type LabelWidthPreset = 'auto' | 'fixed'; export type DescriptionListLabelWidth = LabelWidthPreset | (string & {}); export interface DescriptionListProps extends React.HTMLAttributes { layout?: 'inline' | 'stacked' | 'responsive'; density?: 'default' | 'compact'; divider?: 'none' | 'between' | 'bordered'; /** * Width of the term column in `inline` and `responsive` layouts. * * - `'auto'` (default): the term column sizes to its intrinsic content * per row, so labels wrap at word boundaries in narrow contexts (carousel * cards, sidebar panels) and the detail column takes the remaining inline * space. **Sibling rows do NOT share column widths under this preset** — * each row's columns size to its own content. Use this when intrinsic * per-row sizing matters more than vertical alignment of values. * - `'fixed'`: ⅓ / ⅔ split — term column is `minmax(0, 1fr)` and detail * column is `minmax(0, 2fr)`. Sibling rows share the same proportional * widths, so values align vertically across rows. Use this when shared * value-column alignment matters (the typical use case for a list of * contact rows, profile fields, or any tabular-feeling metadata). * - any CSS track size (`'8rem'`, `'min-content'`, `'40%'`, …): pins the * term column to that width and lets the detail column take the rest. * * Ignored when `layout="stacked"` (single content column). */ labelWidth?: DescriptionListLabelWidth; } export interface DescriptionListRowProps extends React.HTMLAttributes { /** When true, shows a copy-to-clipboard button using KeyValuePair's established mechanism */ copyable?: boolean; /** Text written to the clipboard when copyable=true */ copyText?: string; /** Label used in the copy button's aria-label: "Copy {copyLabel}". Falls back to copyText. */ copyLabel?: string; /** * Optional decorative icon rendered at the leading edge of the row. * 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(--description-list-icon-color)` (defaults to * `--muted-foreground`); consumers can recolour the slot via that * token without forking the component. * * When any row in the list passes an `icon`, every row reserves a * leading icon column so values align across siblings — including * rows that did not pass an icon. * * 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 type DescriptionListTermProps = React.HTMLAttributes; export interface DescriptionListDetailProps extends React.HTMLAttributes { /** Right-aligns numeric values via text-end */ numeric?: boolean; } export declare const DescriptionList: import("react").ForwardRefExoticComponent> & { Row: import("react").ForwardRefExoticComponent>; Term: import("react").ForwardRefExoticComponent>; Detail: import("react").ForwardRefExoticComponent>; }; export {}; //# sourceMappingURL=description-list.d.ts.map