@opencxh/ui-kit 3.98.0 → 3.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,16 +34,10 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
34
34
  *
35
35
  * @example
36
36
  * ```tsx
37
- * <Button variant="primary" size="md">
38
- * Click me
39
- * </Button>
40
- *
41
- * <Button variant="outline" leftIcon={<PlusIcon />}>
42
- * Add item
43
- * </Button>
44
- *
45
- * <Button iconOnly variant="ghost" size="sm">
46
- * <SearchIcon />
37
+ * <Button variant="primary" size="md">Click me</Button>
38
+ * <Button variant="outline" leftIcon={<Icon name={Plus} />}>Add item</Button>
39
+ * <Button iconOnly variant="ghost" size="sm" aria-label="Zoeken">
40
+ * <Icon name={Search} />
47
41
  * </Button>
48
42
  * ```
49
43
  */
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ export interface FilterChipProps {
3
+ /** Chip text (e.g. "Status", or "Status: Open" when a value is set). */
4
+ label: React.ReactNode;
5
+ /** Selected/active — renders the filled dark treatment. */
6
+ active?: boolean;
7
+ /** Show a trailing caret (opens a menu the consumer wires with Dropdown/Popover). */
8
+ caret?: boolean;
9
+ /** Open a value clear affordance (✕) — only shown when `active`. */
10
+ onClear?: () => void;
11
+ onClick?: () => void;
12
+ className?: string;
13
+ }
14
+ /**
15
+ * Filter chip — the inbox filter bar and the thread priority/assign/inbox/tags
16
+ * menus. Presentational: it renders the chip (active = filled accent, inactive =
17
+ * outlined) with an optional caret + clear; the consumer wires the actual menu
18
+ * with the existing `Dropdown` / `Popover`.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <FilterChip label={status ? `Status: ${status}` : "Status"} caret
23
+ * active={!!status} onClick={openMenu} onClear={() => setStatus(null)} />
24
+ * ```
25
+ */
26
+ export declare function FilterChip({ label, active, caret, onClear, onClick, className, }: FilterChipProps): React.JSX.Element;
@@ -16,6 +16,7 @@ export interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement>
16
16
  children: React.ReactNode;
17
17
  }
18
18
  /**
19
- * Link component with theme integration and accessibility features
19
+ * Link component with theme integration and accessibility features.
20
+ * Use for navigation; use Button for actions.
20
21
  */
21
22
  export declare const Link: React.FC<LinkProps>;
@@ -0,0 +1,29 @@
1
+ import { default as React } from 'react';
2
+ export interface SegmentedOption<T extends string> {
3
+ value: T;
4
+ label: React.ReactNode;
5
+ }
6
+ export interface SegmentedToggleProps<T extends string> {
7
+ options: SegmentedOption<T>[];
8
+ value: T;
9
+ onChange: (value: T) => void;
10
+ /** Control height. */
11
+ size?: "sm" | "md";
12
+ className?: string;
13
+ /** Accessible group label. */
14
+ "aria-label"?: string;
15
+ }
16
+ /**
17
+ * Segmented pill toggle (focus "Feed / Eén tegelijk", settings "Persoonlijk /
18
+ * Bedrijf"). Track = surface-hover, active segment = surface. No shadow.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <SegmentedToggle
23
+ * value={layout}
24
+ * onChange={setLayout}
25
+ * options={[{ value: "feed", label: "Feed" }, { value: "one", label: "Eén tegelijk" }]}
26
+ * />
27
+ * ```
28
+ */
29
+ export declare function SegmentedToggle<T extends string>({ options, value, onChange, size, className, "aria-label": ariaLabel, }: SegmentedToggleProps<T>): React.JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { default as React } from 'react';
2
+ export interface AssistantCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
3
+ /** Card heading (e.g. "Briefing van je assistent", "Voorstel van de assistent"). */
4
+ title: React.ReactNode;
5
+ /** Leading icon; defaults to the lucide Sparkles icon. */
6
+ icon?: React.ReactNode;
7
+ /** Optional action rendered on the header's right (e.g. a "Gebruiken" button). */
8
+ action?: React.ReactNode;
9
+ /** Body content. */
10
+ children?: React.ReactNode;
11
+ }
12
+ /**
13
+ * AI-assistant card shell — the tinted "Briefing / Voorstel van de assistent"
14
+ * surface used on Mijn dag and in the Focus queue. Uses the `--assistant-*`
15
+ * design-system tokens so the tint is mode-aware.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <AssistantCard title="Voorstel van de assistent" action={<Button size="xs">Gebruiken</Button>}>
20
+ * Marc wacht 12 min op WhatsApp — concept staat klaar.
21
+ * </AssistantCard>
22
+ * ```
23
+ */
24
+ export declare function AssistantCard({ title, icon, action, children, className, ...props }: AssistantCardProps): React.JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { default as React } from 'react';
2
+ /** Communication channel keys the redesign colour-codes. */
3
+ export type ChannelKey = "mail" | "wa" | "chat" | "tel" | "note";
4
+ export interface ChannelBadgeProps {
5
+ /** Channel — drives the colour. Unknown/undefined falls back to the neutral "note" tone. */
6
+ channel?: ChannelKey | string;
7
+ /** Glyph or short label inside the tile (e.g. an icon, or an initial). */
8
+ children?: React.ReactNode;
9
+ /** Tile size. */
10
+ size?: "sm" | "md" | "lg";
11
+ className?: string;
12
+ title?: string;
13
+ }
14
+ /**
15
+ * Coloured channel tile (the glyph-in-rounded-square used across inbox rows,
16
+ * the focus queue, the attention list and Recent tabs). Colours come from the
17
+ * `--ch-*` design-system tokens, so it is mode-aware.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <ChannelBadge channel="wa">W</ChannelBadge>
22
+ * <ChannelBadge channel="mail" size="lg"><MailIcon /></ChannelBadge>
23
+ * ```
24
+ */
25
+ export declare function ChannelBadge({ channel, children, size, className, title }: ChannelBadgeProps): React.JSX.Element;
@@ -15,7 +15,4 @@ export interface IconProps {
15
15
  /** Accessibility label */
16
16
  'aria-label'?: string;
17
17
  }
18
- /**
19
- * Icon component that works with Lucide React icons and provides theme integration
20
- */
21
18
  export declare const Icon: React.FC<IconProps>;
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ export interface KpiCardProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** The big number / metric. */
4
+ value: React.ReactNode;
5
+ /** Caption under the value. */
6
+ label: React.ReactNode;
7
+ /** Tone — `urgent` tints the number + border, `success` tints the number. */
8
+ tone?: "default" | "urgent" | "success";
9
+ }
10
+ /**
11
+ * KPI / stat card (the Mijn dag metric row). Token-driven, mode-aware.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <KpiCard value={3} label="wachten op jou · gem. 1u12" />
16
+ * <KpiCard value={1} label="dreigt SLA te missen" tone="urgent" />
17
+ * ```
18
+ */
19
+ export declare function KpiCard({ value, label, tone, className, ...props }: KpiCardProps): React.JSX.Element;
@@ -0,0 +1,76 @@
1
+ import { default as React } from 'react';
2
+ export interface ListProps<T> {
3
+ /** Rows to render */
4
+ items: T[];
5
+ /** Stable key per row */
6
+ getRowKey?: (item: T, index: number) => string | number;
7
+ /** Row separation */
8
+ variant?: "plain" | "divided" | "bulleted";
9
+ /** Leading slot — channel tile, avatar, status dot */
10
+ leading?: (item: T, index: number) => React.ReactNode;
11
+ /** Main content; defaults to `String(item)` */
12
+ renderItem?: (item: T, index: number) => React.ReactNode;
13
+ /** Trailing slot — timestamp, badge, counter */
14
+ trailing?: (item: T, index: number) => React.ReactNode;
15
+ /** Row click */
16
+ onSelect?: (item: T, index: number) => void;
17
+ /** Highlighted row (accent wash) */
18
+ isActive?: (item: T, index: number) => boolean;
19
+ /** Bold + accent dot */
20
+ unread?: (item: T, index: number) => boolean;
21
+ /** Deprioritised noise (opacity) */
22
+ dimmed?: (item: T, index: number) => boolean;
23
+ /** Checkbox column + bulk bar */
24
+ selectable?: boolean;
25
+ /** Selected rows (controlled) */
26
+ selectedItems?: T[];
27
+ /** Selection handler */
28
+ onSelectionChange?: (selected: T[]) => void;
29
+ /** Actions shown in the bulk bar when a selection exists */
30
+ bulkActions?: React.ReactNode;
31
+ /** Wrap the list in a bordered container */
32
+ bordered?: boolean;
33
+ /** Empty state content */
34
+ emptyContent?: React.ReactNode;
35
+ /** Loading state */
36
+ loading?: boolean;
37
+ /** Number of skeleton rows while loading */
38
+ loadingRows?: number;
39
+ className?: string;
40
+ "aria-label"?: string;
41
+ }
42
+ /**
43
+ * List — one row is one object you open, with content of varying length
44
+ * (inbox conversations, notifications, search results). No column headers:
45
+ * hierarchy lives inside the row.
46
+ *
47
+ * Use `Table` instead when you compare values between rows (sortable columns,
48
+ * aligned amounts, select-all in a header).
49
+ *
50
+ * @example
51
+ * ```tsx
52
+ * <List
53
+ * items={threads}
54
+ * getRowKey={(t) => t.id}
55
+ * variant="divided"
56
+ * bordered
57
+ * leading={(t) => <ChannelBadge channel={t.channel} size="sm" />}
58
+ * renderItem={(t) => (
59
+ * <>
60
+ * <span className="w-30 shrink-0 truncate">{t.sender}</span>
61
+ * <span className="min-w-0 flex-1 truncate">
62
+ * <strong>{t.subject}</strong>
63
+ * <span className="text-text-muted"> — {t.preview}</span>
64
+ * </span>
65
+ * </>
66
+ * )}
67
+ * trailing={(t) => <span className="text-xs text-text-subtle">{t.time}</span>}
68
+ * unread={(t) => !t.read}
69
+ * selectable
70
+ * selectedItems={selection}
71
+ * onSelectionChange={setSelection}
72
+ * bulkActions={<Button size="sm" variant="secondary">Archiveren</Button>}
73
+ * />
74
+ * ```
75
+ */
76
+ export declare function List<T>({ items, getRowKey, variant, leading, renderItem, trailing, onSelect, isActive, unread, dimmed, selectable, selectedItems, onSelectionChange, bulkActions, bordered, emptyContent, loading, loadingRows, className, "aria-label": ariaLabel, }: ListProps<T>): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ export interface SourceChipProps {
3
+ /** Label — the linked conversation subject. */
4
+ label: React.ReactNode;
5
+ /** Optional leading dot colour (a `--dot-*` / channel CSS var, or any colour). */
6
+ dotColor?: string;
7
+ /** Click opens the linked conversation. */
8
+ onClick?: () => void;
9
+ className?: string;
10
+ }
11
+ /**
12
+ * Source-conversation chip — the "open brongesprek / gekoppeld gesprek ↗" pill
13
+ * that links a task or focus item back to its conversation.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <SourceChip label="Vraag over factuur maart" dotColor="var(--dot-finance)" onClick={openThread} />
18
+ * ```
19
+ */
20
+ export declare function SourceChip({ label, dotColor, onClick, className }: SourceChipProps): React.JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ export interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
3
+ /** Leading glyph or icon (e.g. a check for the focus "queue empty" state). */
4
+ icon?: React.ReactNode;
5
+ /** Tint of the icon disc. */
6
+ tone?: "neutral" | "success";
7
+ /** Headline. */
8
+ title: React.ReactNode;
9
+ /** Supporting copy. */
10
+ description?: React.ReactNode;
11
+ /** Action buttons row. */
12
+ actions?: React.ReactNode;
13
+ /** Render inside a raised card (focus "done" state) vs. plain centered block. */
14
+ card?: boolean;
15
+ }
16
+ /**
17
+ * Centered empty / completion state (focus queue done, no-results lists).
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <EmptyState card tone="success" icon={<Icon icon={Check} size="lg" />}
22
+ * title="Wachtrij leeg — 7 afgehandeld"
23
+ * description="Nieuwe gesprekken verschijnen hier vanzelf."
24
+ * actions={<Button>Terug naar Mijn dag</Button>} />
25
+ * ```
26
+ */
27
+ export declare function EmptyState({ icon, tone, title, description, actions, card, className, ...props }: EmptyStateProps): React.JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ export interface KbdProps extends React.HTMLAttributes<HTMLElement> {
3
+ /** Key label, e.g. "⌘K", "E", "↵". */
4
+ children: React.ReactNode;
5
+ }
6
+ /**
7
+ * Keyboard-shortcut chip (the `⌘K` / `E` / `↵` hints in the redesign).
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * Zoeken <Kbd>⌘K</Kbd>
12
+ * ```
13
+ */
14
+ export declare function Kbd({ children, className, ...props }: KbdProps): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ export interface ProgressBarProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Completion 0–100 (clamped). */
4
+ value: number;
5
+ /** Fill tone. */
6
+ variant?: "accent" | "success";
7
+ /** Track height. */
8
+ size?: "sm" | "md";
9
+ }
10
+ /**
11
+ * Slim determinate progress bar (focus queue progress, subtask completion).
12
+ * Token-driven and mode-aware.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <ProgressBar value={40} />
17
+ * <ProgressBar value={3 / 7 * 100} variant="success" size="sm" />
18
+ * ```
19
+ */
20
+ export declare function ProgressBar({ value, variant, size, className, ...props }: ProgressBarProps): React.JSX.Element;
@@ -4,35 +4,44 @@ export { ParticipantTile, type ParticipantTileProps } from './meeting/Participan
4
4
  export { VideoSurface, type VideoSurfaceProps } from './meeting/VideoSurface';
5
5
  export { Button, type ButtonProps } from './action/Button';
6
6
  export { ButtonGroup, type ButtonGroupProps } from './action/ButtonGroup';
7
+ export { FilterChip, type FilterChipProps } from './action/FilterChip';
7
8
  export { Link, type LinkProps } from './action/Link';
8
- export { SplitButton, type SplitButtonProps, type SplitButtonOption } from './action/SplitButton';
9
+ export { SegmentedToggle, type SegmentedOption, type SegmentedToggleProps } from './action/SegmentedToggle';
10
+ export { SplitButton, type SplitButtonOption, type SplitButtonProps } from './action/SplitButton';
9
11
  export { Checkbox, type CheckboxProps } from './input/Checkbox';
10
12
  export { DatePicker, type DatePickerProps } from './input/DatePicker';
13
+ export { FolderSelect, type FolderDestination, type FolderSelectProps } from './input/FolderSelect';
11
14
  export { SearchableTextField, type SearchableTextFieldProps } from './input/SearchableTextField';
12
15
  export { Select, type SelectOption, type SelectProps } from './input/Select';
16
+ export { StorageInput, type StorageInputProps } from './input/StorageInput';
13
17
  export { TextArea, type TextAreaProps } from './input/TextArea';
14
18
  export { TextField, type TextFieldProps } from './input/TextField';
15
- export { StorageInput, type StorageInputProps } from './input/StorageInput';
16
- export { FolderSelect, type FolderSelectProps, type FolderDestination } from './input/FolderSelect';
17
19
  export { Form, type FormButtonProps, type FormFieldType, type FormGroup, type FormGroupItem, type FormProps } from './forms/Form';
18
20
  export { Dropdown, type DropdownOption, type DropdownProps } from './overlays/Dropdown';
19
21
  export { Modal, type ModalProps } from './overlays/Modal';
20
22
  export { Popover, type PopoverProps } from './overlays/Popover';
21
23
  export { Badge, type BadgeProps } from './feedback/Badge';
22
24
  export { ContentLoading } from './feedback/ContentLoading';
25
+ export { EmptyState, type EmptyStateProps } from './feedback/EmptyState';
26
+ export { Kbd, type KbdProps } from './feedback/Kbd';
27
+ export { ProgressBar, type ProgressBarProps } from './feedback/ProgressBar';
23
28
  export { Spinner, type SpinnerProps } from './feedback/Spinner';
29
+ export { AssistantCard, type AssistantCardProps } from './content/AssistantCard';
24
30
  export { Avatar, type AvatarProps } from './content/Avatar';
25
- export { AvatarStack, type AvatarStackProps, type AvatarStackPerson } from './content/AvatarStack';
31
+ export { AvatarStack, type AvatarStackPerson, type AvatarStackProps } from './content/AvatarStack';
32
+ export { ChannelBadge, type ChannelBadgeProps, type ChannelKey } from './content/ChannelBadge';
26
33
  export { Icon, type IconProps } from './content/Icon';
27
34
  export { Image, type ImageProps } from './content/Image';
35
+ export { List, type ListProps } from './content/List';
36
+ export { KpiCard, type KpiCardProps } from './content/KpiCard';
28
37
  export { PageHeader, type PageHeaderAction, type PageHeaderProps } from './content/PageHeader';
29
38
  export { PageToolbar, type PageToolbarProps } from './content/PageToolbar';
39
+ export { SourceChip, type SourceChipProps } from './content/SourceChip';
30
40
  export { Table, type TableAction, type TableColumn, type TableFilter, type TableProps } from './content/Table';
31
41
  export { View, type ViewGroup, type ViewProps } from './content/View';
32
42
  export { SidebarMenu, type MenuItem } from './navigation/Sidebar';
33
43
  export { TabBar, Tabs, type TabItem, type TabsProps } from './navigation/Tabs';
34
44
  export { Heading, type HeadingProps } from './typography/Heading';
35
- export { List, type ListItem, type ListProps } from './typography/List';
36
45
  export { Text, type TextProps } from './typography/Text';
37
46
  export * from './command-palette';
38
47
  export * from './primitives/Box';
@@ -30,26 +30,15 @@ export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputE
30
30
  labelClassName?: string;
31
31
  }
32
32
  /**
33
- * Checkbox component with theme integration
33
+ * Checkbox component with theme integration.
34
+ *
35
+ * Uses the native input with `accent-color`, so the checked fill is the accent
36
+ * token and dark mode needs no extra classes.
34
37
  *
35
38
  * @example
36
39
  * ```tsx
37
- * <Checkbox label="Accept terms and conditions" />
38
- *
39
- * <Checkbox
40
- * label="Subscribe to newsletter"
41
- * helperText="You can unsubscribe at any time"
42
- * />
43
- *
44
- * <Checkbox
45
- * label="Required field"
46
- * error="This field is required"
47
- * />
48
- *
49
- * <Checkbox
50
- * label="Select all"
51
- * indeterminate={true}
52
- * />
40
+ * <Checkbox label="Voorwaarden accepteren" />
41
+ * <Checkbox label="Alles selecteren" indeterminate />
53
42
  * ```
54
43
  */
55
44
  export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
@@ -41,28 +41,16 @@ export interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInput
41
41
  */
42
42
  labelClassName?: string;
43
43
  }
44
+ /** Shared with TextArea / Select / DatePicker: uppercase section label. */
45
+ export declare const fieldLabelClasses = "mb-1.5 block text-xs font-semibold uppercase tracking-label";
44
46
  /**
45
47
  * TextField component with theme integration and validation states
46
48
  *
47
49
  * @example
48
50
  * ```tsx
49
- * <TextField
50
- * label="Email"
51
- * placeholder="Enter your email"
52
- * type="email"
53
- * />
54
- *
55
- * <TextField
56
- * label="Search"
57
- * startIcon={<SearchIcon />}
58
- * placeholder="Search..."
59
- * />
60
- *
61
- * <TextField
62
- * label="Password"
63
- * type="password"
64
- * error="Password is required"
65
- * />
51
+ * <TextField label="E-mail" type="email" placeholder="naam@bedrijf.nl" />
52
+ * <TextField label="Zoeken" startIcon={<Icon icon={Search} />} />
53
+ * <TextField label="Wachtwoord" type="password" error="Verplicht veld" />
66
54
  * ```
67
55
  */
68
56
  export declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>>;
@@ -34,14 +34,9 @@ export interface BoxProps extends React.HTMLAttributes<HTMLDivElement> {
34
34
  *
35
35
  * @example
36
36
  * ```tsx
37
- * <Box padding="md" background="primary" radius="lg">
37
+ * <Box padding="md" background="module" radius="lg" border="sm" borderColor="neutral">
38
38
  * Content
39
39
  * </Box>
40
- *
41
- * <Box as="section" padding="lg" shadow="md">
42
- * <h2>Section Title</h2>
43
- * <p>Section content</p>
44
- * </Box>
45
40
  * ```
46
41
  */
47
42
  export declare const Box: React.ForwardRefExoticComponent<BoxProps & React.RefAttributes<HTMLDivElement>>;
@@ -3,4 +3,7 @@ export interface CardProps extends BoxProps {
3
3
  children: React.ReactNode;
4
4
  title?: string;
5
5
  }
6
+ /**
7
+ * Card — panel on a page background. Border, never a shadow (radius-lg = 12px).
8
+ */
6
9
  export declare const Card: ({ children, title, ...props }: CardProps) => import("react").JSX.Element;
@@ -17,7 +17,4 @@ export interface HeadingProps {
17
17
  /** Child content */
18
18
  children: React.ReactNode;
19
19
  }
20
- /**
21
- * Heading component with semantic HTML and theme integration
22
- */
23
20
  export declare const Heading: React.FC<HeadingProps>;
@@ -25,7 +25,4 @@ export interface TextProps {
25
25
  /** Child content */
26
26
  children: React.ReactNode;
27
27
  }
28
- /**
29
- * Text component with theme integration and typography variants
30
- */
31
28
  export declare const Text: React.FC<TextProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencxh/ui-kit",
3
- "version": "3.98.0",
3
+ "version": "3.105.0",
4
4
  "description": "Theme-aware UI component library for OpenCXH platform",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,31 +0,0 @@
1
- import { default as React } from 'react';
2
- export interface ListItem {
3
- /** Unique identifier */
4
- id?: string;
5
- /** List item content */
6
- content: React.ReactNode;
7
- /** Whether the item is disabled */
8
- disabled?: boolean;
9
- /** Click handler for interactive lists */
10
- onClick?: () => void;
11
- }
12
- export interface ListProps {
13
- /** List items */
14
- items: ListItem[];
15
- /** List type */
16
- type?: 'unordered' | 'ordered' | 'description';
17
- /** List variant */
18
- variant?: 'default' | 'flush' | 'bordered' | 'divided';
19
- /** List size */
20
- size?: 'sm' | 'md' | 'lg';
21
- /** Whether list items are interactive */
22
- interactive?: boolean;
23
- /** Additional CSS classes */
24
- className?: string;
25
- /** Additional CSS classes for list items */
26
- itemClassName?: string;
27
- }
28
- /**
29
- * List component with theme integration and multiple variants
30
- */
31
- export declare const List: React.FC<ListProps>;