import classNames from "classnames"; import type { HTMLAttributes, ReactElement, ReactNode } from "react"; import { CopyIconButton } from "../CopyIconButton"; interface Props { children: | ReactElement> | (ReactElement> | null)[]; selectable?: boolean; } export function KeyValueRows({ children, selectable }: Props) { const childArray = Array.isArray(children) ? children.filter(Boolean) : [children]; return ( {childArray.map((child, i) => ( // oxlint-disable-next-line react/no-array-index-key {child} ))}
); } interface KeyValueRowProps { label: ReactNode; children: ReactNode; rightSlot?: ReactNode; leftSlot?: ReactNode; align?: "top" | "middle"; labelClassName?: string; labelColor?: "secondary" | "primary" | "info"; enableCopy?: boolean; copyText?: string; } export function KeyValueRow({ label, children, rightSlot, leftSlot, align = "top", labelColor = "secondary", labelClassName, enableCopy, copyText, }: KeyValueRowProps) { const textToCopy = copyText ?? (typeof children === "string" || typeof children === "number" ? `${children}` : null); const resolvedRightSlot = rightSlot ?? (enableCopy && textToCopy != null ? ( ) : null); return ( <> {label}
{leftSlot ?? } {children} {resolvedRightSlot ? (
{resolvedRightSlot}
) : ( )}
); }