import { type HTMLAttributes } from 'react'; import { type VariantProps } from 'class-variance-authority'; declare const keyValuePairVariants: (props?: ({ layout?: "vertical" | "horizontal" | null | undefined; hasIcon?: boolean | null | undefined; } & import("class-variance-authority/types").ClassProp) | undefined) => string; export interface KeyValuePairProps extends React.HTMLAttributes, Omit, 'hasIcon'> { /** The label (term). Stays a string: it is interpolated into the copy * button's accessible name, where a node would render "[object Object]". */ label: string; /** * Display-only override for the rendered label — a node when the term needs * more than text (a PHI lock beside it, a badge). `label` is still required * and remains the string every accessible name is built from. */ labelNode?: React.ReactNode; /** The value — accepts plain text, Badge, Tag, monospace code, any ReactNode */ value: React.ReactNode; /** Layout direction */ layout?: 'horizontal' | 'vertical'; /** Render value in monospace font */ mono?: boolean; /** * Where the value sits on the row. * * `start` (default) keeps the existing behaviour — the value begins * immediately after the label and absorbs the remaining width. * * `end` pins the value to the inline-end of the row, so its position * no longer moves with the label's length. Use it for the one * comparable figure in a list of rows — a price, a count, a score — * where a reader wants to scan down a column rather than read each * line. Pinning every row defeats the point. * * Horizontal layout only: in `vertical` the value already sits below * the label, so there is nothing to pin against and this is ignored. */ alignValue?: 'start' | 'end'; /** Show a copy-to-clipboard IconButton beside the value */ copyable?: boolean; /** The text to copy — defaults to `value` if value is a string */ copyText?: string; /** * Optional decorative icon rendered at the leading edge of the pair. * Pass a `lucide-react` icon (or any single React element) for * visual consistency. The wrapper applies `aria-hidden="true"` and * paints the icon with `var(--key-value-pair-icon-color)` (defaults * to `--muted-foreground`); consumers can recolour the slot via * that token without forking the component. * * Cap-height alignment with the label is automatic — the wrapper * uses `mt-0.5` so the glyph rides the label row, not the * geometric centre of a wrapping value. * * Type is `ReactElement` (not the broader `ReactNode`) so the * intent is clear at the call site: this slot is for a single * SVG/icon, not arbitrary fragments, strings, or numbers. */ icon?: React.ReactElement | null; } export declare const KeyValuePair: import("react").ForwardRefExoticComponent>; export interface KeyValueListProps extends HTMLAttributes { /** * Gap between rows. Maps to spacing tokens — defaults to `md`. * Smaller gaps suit dense settings panels; larger gaps suit * profile cards. */ rowGap?: 'sm' | 'md' | 'lg'; } export declare const KeyValueList: import("react").ForwardRefExoticComponent>; export {}; //# sourceMappingURL=key-value-pair.d.ts.map