@officina/ui 0.1.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.
@@ -0,0 +1,3773 @@
1
+ import * as react from 'react';
2
+ import { ComponentPropsWithoutRef, ReactNode, HTMLAttributes, ButtonHTMLAttributes, ElementType, Ref, InputHTMLAttributes, ReactElement, ComponentProps } from 'react';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import * as class_variance_authority from 'class-variance-authority';
5
+ import { VariantProps } from 'class-variance-authority';
6
+ import { FieldValues, UseFormReturn, SubmitHandler } from 'react-hook-form';
7
+ import { DateRange } from 'react-day-picker';
8
+ export { DateRange } from 'react-day-picker';
9
+ import { PhoneInputProps as PhoneInputProps$1 } from 'react-international-phone';
10
+ import * as sonner from 'sonner';
11
+ import { ExternalToast } from 'sonner';
12
+ import * as zustand from 'zustand';
13
+ import { CalendarProps as CalendarProps$1, Event, View } from 'react-big-calendar';
14
+ import { Panel as Panel$1, Separator as Separator$1 } from 'react-resizable-panels';
15
+ import { ColumnDef, Table as Table$1 } from '@tanstack/react-table';
16
+ export { createColumnHelper } from '@tanstack/react-table';
17
+ import { Locale } from 'date-fns';
18
+ import { OverlayScrollbarsComponentProps } from 'overlayscrollbars-react';
19
+ import { DropzoneOptions } from 'react-dropzone';
20
+ import useEmblaCarousel from 'embla-carousel-react';
21
+ import { SlideImage } from 'yet-another-react-lightbox';
22
+ import { HTMLMotionProps } from 'framer-motion';
23
+ import { DriveStep, Config } from 'driver.js';
24
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
25
+ import { Placement } from '@floating-ui/react';
26
+
27
+ declare const buttonVariants: (props?: ({
28
+ variant?: "primary" | "secondary" | "outline" | "ghost" | "soft" | "danger" | "success" | null | undefined;
29
+ size?: "xs" | "sm" | "md" | "lg" | "icon" | "icon-sm" | null | undefined;
30
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
31
+ type ButtonProps = ComponentPropsWithoutRef<'button'> & VariantProps<typeof buttonVariants> & {
32
+ /** Show a loading spinner and disable the button while an action is in flight. */
33
+ isLoading?: boolean;
34
+ };
35
+ declare const Button: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
36
+ variant?: "primary" | "secondary" | "outline" | "ghost" | "soft" | "danger" | "success" | null | undefined;
37
+ size?: "xs" | "sm" | "md" | "lg" | "icon" | "icon-sm" | null | undefined;
38
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & {
39
+ /** Show a loading spinner and disable the button while an action is in flight. */
40
+ isLoading?: boolean;
41
+ } & react.RefAttributes<HTMLButtonElement>>;
42
+
43
+ type IconButtonProps = Omit<ButtonProps, 'children' | 'size'> & {
44
+ icon: ReactNode;
45
+ /** Visual + control size. Maps to the Button `icon` / `icon-sm` sizes. */
46
+ size?: 'sm' | 'md';
47
+ /** Optional tooltip; falls back to `aria-label` when omitted. */
48
+ tooltip?: ReactNode;
49
+ tooltipSide?: 'top' | 'right' | 'bottom' | 'left';
50
+ /** Accessible label is mandatory for icon-only buttons. */
51
+ 'aria-label': string;
52
+ };
53
+ /**
54
+ * Icon-only button with an enforced accessible label. Optionally wraps itself
55
+ * in a {@link Tooltip} so hover/focus surfaces the same intent visually.
56
+ */
57
+ declare const IconButton: react.ForwardRefExoticComponent<Omit<ButtonProps, "size" | "children"> & {
58
+ icon: ReactNode;
59
+ /** Visual + control size. Maps to the Button `icon` / `icon-sm` sizes. */
60
+ size?: "sm" | "md";
61
+ /** Optional tooltip; falls back to `aria-label` when omitted. */
62
+ tooltip?: ReactNode;
63
+ tooltipSide?: "top" | "right" | "bottom" | "left";
64
+ /** Accessible label is mandatory for icon-only buttons. */
65
+ 'aria-label': string;
66
+ } & react.RefAttributes<HTMLButtonElement>>;
67
+
68
+ type ButtonGroupProps = {
69
+ children: ReactNode;
70
+ orientation?: 'horizontal' | 'vertical';
71
+ attached?: boolean;
72
+ size?: 'sm' | 'md' | 'lg';
73
+ className?: string;
74
+ };
75
+ declare function ButtonGroup({ children, orientation, attached, className, }: ButtonGroupProps): react.JSX.Element;
76
+
77
+ declare const badgeVariants: (props?: ({
78
+ variant?: "danger" | "success" | "neutral" | "warning" | "info" | "accent" | null | undefined;
79
+ size?: "sm" | "md" | null | undefined;
80
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
81
+ type BadgeProps = ComponentPropsWithoutRef<'span'> & Omit<VariantProps<typeof badgeVariants>, 'variant'> & {
82
+ /** Semantic colour. `error` is accepted as an alias of `danger`. */
83
+ variant?: VariantProps<typeof badgeVariants>['variant'] | 'error';
84
+ /** Render a leading status dot in the current colour. */
85
+ dot?: boolean;
86
+ /** Alias of `variant`, kept for ergonomic status labelling. */
87
+ tone?: VariantProps<typeof badgeVariants>['variant'] | 'error';
88
+ };
89
+ declare function Badge({ className, variant, tone, size, dot, children, ...props }: BadgeProps): react.JSX.Element;
90
+
91
+ declare const avatarVariants: (props?: ({
92
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
93
+ shape?: "circle" | "square" | null | undefined;
94
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
95
+ type AvatarProps = ComponentPropsWithoutRef<'span'> & VariantProps<typeof avatarVariants> & {
96
+ /** Image URL. Falls back to initials when absent or it fails to load. */
97
+ src?: string | undefined;
98
+ /** Full name used to derive initials and the alt text. */
99
+ name?: string | undefined;
100
+ /** Explicit initials override (otherwise derived from `name`). */
101
+ initials?: string | undefined;
102
+ /** Image alt text (defaults to `name`). */
103
+ alt?: string | undefined;
104
+ };
105
+ declare function Avatar({ className, size, shape, src, name, initials, alt, ...props }: AvatarProps): react.JSX.Element;
106
+ type AvatarStackItem = {
107
+ src?: string | undefined;
108
+ name?: string | undefined;
109
+ alt?: string | undefined;
110
+ };
111
+ type AvatarStackProps = ComponentPropsWithoutRef<'div'> & {
112
+ /** Avatar data to render in the stack. */
113
+ avatars: AvatarStackItem[];
114
+ /** Max avatars shown before collapsing the rest into a `+N` chip. Defaults to `4`. */
115
+ max?: number;
116
+ /** Size applied to every avatar in the stack. Defaults to `'md'`. */
117
+ size?: AvatarProps['size'];
118
+ /** Shape applied to every avatar in the stack. Defaults to `'circle'`. */
119
+ shape?: AvatarProps['shape'];
120
+ };
121
+ /**
122
+ * Overflow-aware grouped avatars driven by data instead of children.
123
+ * Renders a `+N` chip once the count exceeds `max`.
124
+ */
125
+ declare function AvatarStack({ avatars, max, size, shape, className, ...props }: AvatarStackProps): react.JSX.Element;
126
+ type AvatarGroupProps = ComponentPropsWithoutRef<'div'> & {
127
+ max?: number;
128
+ size?: AvatarProps['size'];
129
+ };
130
+ declare function AvatarGroup({ children, max, size, className, ...props }: AvatarGroupProps): react.JSX.Element;
131
+
132
+ type CardProps = ComponentPropsWithoutRef<'div'> & {
133
+ /** Inner padding scale. */
134
+ padding?: 'none' | 'sm' | 'md' | 'lg';
135
+ };
136
+ declare function Card({ className, padding, ...props }: CardProps): react.JSX.Element;
137
+ declare function CardHeader({ className, ...props }: ComponentPropsWithoutRef<'div'>): react.JSX.Element;
138
+ declare function CardTitle({ children, className, ...props }: ComponentPropsWithoutRef<'h3'>): react.JSX.Element;
139
+ declare function CardDescription({ className, ...props }: ComponentPropsWithoutRef<'p'>): react.JSX.Element;
140
+ declare function CardContent({ className, ...props }: ComponentPropsWithoutRef<'div'>): react.JSX.Element;
141
+ declare function CardFooter({ className, ...props }: ComponentPropsWithoutRef<'div'>): react.JSX.Element;
142
+
143
+ type SeparatorProps = ComponentPropsWithoutRef<'div'> & {
144
+ /** Divider axis. Defaults to horizontal. */
145
+ orientation?: 'horizontal' | 'vertical';
146
+ /** Optional centered label rendered within the divider. */
147
+ label?: string;
148
+ };
149
+ declare function Separator({ className, orientation, label, ...props }: SeparatorProps): react.JSX.Element;
150
+
151
+ declare const spinnerVariants: (props?: ({
152
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
153
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
154
+ type SpinnerProps = ComponentPropsWithoutRef<'span'> & VariantProps<typeof spinnerVariants> & {
155
+ /** Accessible status label announced to screen readers. Defaults to "Loading…". */
156
+ label?: string;
157
+ };
158
+ declare function Spinner({ className, size, label, ...props }: SpinnerProps): react.JSX.Element;
159
+
160
+ type KbdProps = ComponentPropsWithoutRef<'kbd'>;
161
+ declare function Kbd({ className, ...props }: KbdProps): react.JSX.Element;
162
+
163
+ type ShortcutProps = {
164
+ /** Combo like `"mod+k"`, `"shift+enter"`, or an array of keys. */
165
+ keys: string | string[];
166
+ /** Render `+` separators between keys. */
167
+ withPlus?: boolean;
168
+ className?: string;
169
+ };
170
+ /**
171
+ * Platform-aware keyboard shortcut display built on {@link Kbd}. Renders
172
+ * `"mod+k"` as ⌘K on Apple platforms and Ctrl+K elsewhere.
173
+ */
174
+ declare function Shortcut({ keys, withPlus, className }: ShortcutProps): react.JSX.Element;
175
+
176
+ type ChipTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
177
+ type ChipVariant = 'solid' | 'soft' | 'outline';
178
+ type ChipProps = {
179
+ /** Chip label content. */
180
+ children: ReactNode;
181
+ /** Optional leading icon. */
182
+ icon?: ReactNode;
183
+ /** When provided, renders a remove (×) button that calls this handler. */
184
+ onRemove?: () => void;
185
+ /** Semantic colour. */
186
+ tone?: ChipTone;
187
+ /** Chip size. */
188
+ size?: 'sm' | 'md';
189
+ /** Fill style: solid, soft, or outline. */
190
+ variant?: ChipVariant;
191
+ /** Render as a button (clickable/selectable) rather than a static span. */
192
+ interactive?: boolean;
193
+ /** Accessible label for the remove button. */
194
+ removeLabel?: string;
195
+ } & (HTMLAttributes<HTMLSpanElement> | ButtonHTMLAttributes<HTMLButtonElement>);
196
+ declare const Chip: react.ForwardRefExoticComponent<ChipProps & react.RefAttributes<HTMLButtonElement | HTMLSpanElement>>;
197
+
198
+ declare const tagVariants: (props?: ({
199
+ tone?: "danger" | "success" | "warning" | "default" | null | undefined;
200
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
201
+ type TagProps = VariantProps<typeof tagVariants> & {
202
+ /** Tag contents (label text or nodes). */
203
+ children: ReactNode;
204
+ className?: string;
205
+ };
206
+ declare function Tag({ children, tone, className }: TagProps): react.JSX.Element;
207
+
208
+ type SkeletonProps = HTMLAttributes<HTMLDivElement> & {
209
+ /** Shape of the placeholder. */
210
+ variant?: 'rect' | 'circle' | 'text';
211
+ /** Explicit width (px number or CSS length). */
212
+ width?: number | string;
213
+ /** Explicit height (px number or CSS length). */
214
+ height?: number | string;
215
+ /** Number of text lines to render for the `text` variant. */
216
+ lines?: number;
217
+ };
218
+ declare const Skeleton: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
219
+ /** Shape of the placeholder. */
220
+ variant?: "rect" | "circle" | "text";
221
+ /** Explicit width (px number or CSS length). */
222
+ width?: number | string;
223
+ /** Explicit height (px number or CSS length). */
224
+ height?: number | string;
225
+ /** Number of text lines to render for the `text` variant. */
226
+ lines?: number;
227
+ } & react.RefAttributes<HTMLDivElement>>;
228
+
229
+ type BannerProps = {
230
+ /** Semantic colour of the banner. */
231
+ tone: 'info' | 'success' | 'warning' | 'danger';
232
+ /** Bold leading title. */
233
+ title?: string;
234
+ /** Banner message body. */
235
+ children: ReactNode;
236
+ /** Called when the dismiss button is clicked; omit to hide it. */
237
+ onDismiss?: () => void;
238
+ /** Accessible label for the dismiss button. */
239
+ dismissLabel?: string;
240
+ /** Custom leading icon; defaults to a tone-appropriate icon. */
241
+ icon?: ReactNode;
242
+ /** Trailing action buttons. */
243
+ actions?: ReactNode;
244
+ /** Stretch edge-to-edge with no rounded corners. */
245
+ full?: boolean;
246
+ className?: string;
247
+ };
248
+ declare function Banner({ tone, title, children, onDismiss, dismissLabel, icon, actions, full, className, }: BannerProps): react.JSX.Element;
249
+
250
+ type QRCodeProps = ComponentPropsWithoutRef<'div'> & {
251
+ /** Data encoded into the QR code. */
252
+ value: string;
253
+ /** Module size in pixels. */
254
+ size?: number;
255
+ /** Accessible label describing the code. */
256
+ label?: string;
257
+ };
258
+ declare const QRCode: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
259
+ /** Data encoded into the QR code. */
260
+ value: string;
261
+ /** Module size in pixels. */
262
+ size?: number;
263
+ /** Accessible label describing the code. */
264
+ label?: string;
265
+ } & react.RefAttributes<HTMLDivElement>>;
266
+
267
+ interface BarcodeProps {
268
+ /** Value encoded as a barcode. */
269
+ value: string;
270
+ /** Bar height in pixels. */
271
+ height?: number;
272
+ className?: string;
273
+ }
274
+ declare function Barcode({ value, height, className }: BarcodeProps): react.JSX.Element;
275
+
276
+ declare const typographyVariants: (props?: ({
277
+ align?: "center" | "right" | "left" | "start" | "end" | "justify" | null | undefined;
278
+ gutterBottom?: boolean | null | undefined;
279
+ leading?: "normal" | "relaxed" | "tight" | null | undefined;
280
+ noWrap?: boolean | null | undefined;
281
+ tone?: "danger" | "success" | "base" | "warning" | "accent" | "muted" | "subtle" | null | undefined;
282
+ transform?: "none" | "capitalize" | "lowercase" | "uppercase" | null | undefined;
283
+ variant?: "body" | "caption" | "code" | "h1" | "h2" | "h3" | "h4" | "title" | "display" | "overline" | "body-sm" | null | undefined;
284
+ weight?: "bold" | "medium" | "regular" | "semibold" | null | undefined;
285
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
286
+ declare const lineClampClass: {
287
+ readonly 1: "line-clamp-1";
288
+ readonly 2: "line-clamp-2";
289
+ readonly 3: "line-clamp-3";
290
+ readonly 4: "line-clamp-4";
291
+ readonly 5: "line-clamp-5";
292
+ readonly 6: "line-clamp-6";
293
+ };
294
+ type TypographyProps = ComponentPropsWithoutRef<'p'> & VariantProps<typeof typographyVariants> & {
295
+ /** Render as a different element/component while keeping the styles. */
296
+ as?: ElementType;
297
+ /** Truncate after N lines with an ellipsis. */
298
+ lineClamp?: keyof typeof lineClampClass;
299
+ };
300
+ declare function Typography({ align, as, className, gutterBottom, leading, lineClamp, noWrap, tone, transform, variant, weight, ...props }: TypographyProps): react.JSX.Element;
301
+
302
+ type GradientTextProps = ComponentPropsWithoutRef<'span'> & {
303
+ /** Render as a different element (e.g. `h1`, `h2`). */
304
+ as?: ElementType;
305
+ /** Animate the gradient sweep. Disabled automatically under reduced motion. */
306
+ animate?: boolean;
307
+ /** Override the gradient. Defaults to an accent → info token sweep. */
308
+ gradient?: string;
309
+ };
310
+ /**
311
+ * Gradient-filled text for premium headings and accents. Uses background-clip
312
+ * so it inherits font sizing from the surrounding type scale.
313
+ */
314
+ declare function GradientText({ as, animate, gradient, className, style, children, ...props }: GradientTextProps): react.JSX.Element;
315
+
316
+ type AnimatedNumberProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {
317
+ value: number;
318
+ /** Format the displayed number. Defaults to locale integer formatting. */
319
+ format?: (value: number) => string;
320
+ /** Animation duration in seconds. */
321
+ duration?: number;
322
+ };
323
+ /**
324
+ * Count-up number that animates from its previous value to the next. Snaps
325
+ * instantly when the user prefers reduced motion. Drives premium stat displays.
326
+ */
327
+ declare function AnimatedNumber({ value, format, duration, className, ...props }: AnimatedNumberProps): react.JSX.Element;
328
+
329
+ type AnimatedListProps<T> = {
330
+ /** Items to render; add/remove drives enter/exit animations. */
331
+ items: T[];
332
+ /** Returns a stable key per item so motion can track add/remove/reorder. */
333
+ getKey: (item: T, index: number) => string | number;
334
+ /** Renders a single item. */
335
+ renderItem: (item: T, index: number) => ReactNode;
336
+ /** Extra classes for the list container. */
337
+ className?: string;
338
+ /** Extra classes applied to each item wrapper. */
339
+ itemClassName?: string;
340
+ /** Per-item enter delay for a cascading reveal. */
341
+ stagger?: number;
342
+ };
343
+ /**
344
+ * List that animates items in and out as the array changes — premium feel for
345
+ * notifications, activity feeds, and search results. Honors reduced motion and
346
+ * relies on the app-level `MotionConfig reducedMotion="user"`.
347
+ */
348
+ declare function AnimatedList<T>({ items, getKey, renderItem, className, itemClassName, stagger, }: AnimatedListProps<T>): react.JSX.Element;
349
+
350
+ type PrimitiveLinkProps = ComponentPropsWithoutRef<'a'> & {
351
+ /** Open in a new tab with safe rel attributes and an external icon. */
352
+ external?: boolean;
353
+ /** Use muted foreground colour instead of the accent. */
354
+ muted?: boolean;
355
+ };
356
+ declare const PrimitiveLink: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & {
357
+ /** Open in a new tab with safe rel attributes and an external icon. */
358
+ external?: boolean;
359
+ /** Use muted foreground colour instead of the accent. */
360
+ muted?: boolean;
361
+ } & react.RefAttributes<HTMLAnchorElement>>;
362
+
363
+ type FormProps<T extends FieldValues> = Omit<ComponentPropsWithoutRef<'form'>, 'onSubmit' | 'children'> & {
364
+ form: UseFormReturn<T>;
365
+ onSubmit: SubmitHandler<T>;
366
+ children: ReactNode;
367
+ };
368
+ declare function Form<T extends FieldValues>({ form, onSubmit, children, className, ...rest }: FormProps<T>): react.JSX.Element;
369
+
370
+ type FieldProps = {
371
+ /** Explicit id for the control; auto-generated when omitted. */
372
+ id?: string;
373
+ /** RHF field name — used to read validation errors from form context. */
374
+ name?: string;
375
+ /** Visible field label. */
376
+ label: string;
377
+ /** Helper text shown below the control. */
378
+ hint?: string;
379
+ /** Manual error message; overrides any RHF error for `name`. */
380
+ error?: string | undefined;
381
+ /** Marks the field required (adds the required indicator). */
382
+ required?: boolean;
383
+ /** Extra classes for the field wrapper. */
384
+ className?: string;
385
+ children: ReactNode | ((props: {
386
+ id: string;
387
+ 'aria-invalid': boolean;
388
+ 'aria-describedby': string;
389
+ }) => ReactNode);
390
+ };
391
+ declare function Field({ id: providedId, name, label, hint, error: manualError, required, className, children, }: FieldProps): react.JSX.Element;
392
+
393
+ declare const Input: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & react.RefAttributes<HTMLInputElement>>;
394
+
395
+ declare const gridColumns$1: {
396
+ readonly 1: "grid-cols-1";
397
+ readonly 2: "grid-cols-1 md:grid-cols-2";
398
+ readonly 3: "grid-cols-1 md:grid-cols-3";
399
+ readonly 4: "grid-cols-1 sm:grid-cols-2 xl:grid-cols-4";
400
+ };
401
+ declare const actionAlign: {
402
+ readonly between: "justify-between";
403
+ readonly center: "justify-center";
404
+ readonly end: "justify-end";
405
+ readonly start: "justify-start";
406
+ };
407
+ type FormGridProps = ComponentPropsWithoutRef<'div'> & {
408
+ columns?: keyof typeof gridColumns$1;
409
+ };
410
+ declare function FormGrid({ children, className, columns, ...props }: FormGridProps): react.JSX.Element;
411
+ type FieldsetProps = Omit<ComponentPropsWithoutRef<'fieldset'>, 'title'> & {
412
+ /** Fieldset legend / group title. */
413
+ legend?: ReactNode;
414
+ /** Supporting text shown under the legend. */
415
+ description?: ReactNode;
416
+ /** Number of grid columns for the contained fields. */
417
+ columns?: keyof typeof gridColumns$1;
418
+ };
419
+ declare function Fieldset({ children, className, columns, description, legend, ...props }: FieldsetProps): react.JSX.Element;
420
+ type FormActionsProps = ComponentPropsWithoutRef<'div'> & {
421
+ align?: keyof typeof actionAlign;
422
+ sticky?: boolean;
423
+ };
424
+ declare function FormActions({ align, children, className, sticky, ...props }: FormActionsProps): react.JSX.Element;
425
+
426
+ type FormControlField = {
427
+ /** Stable id shared by the label (`htmlFor`) and the control. */
428
+ id: string;
429
+ 'aria-describedby': string | undefined;
430
+ 'aria-invalid': true | undefined;
431
+ 'aria-required': true | undefined;
432
+ required: boolean;
433
+ disabled: boolean;
434
+ };
435
+ type FormControlContextValue = FormControlField & {
436
+ descriptionId: string;
437
+ errorId: string;
438
+ invalid: boolean;
439
+ };
440
+ declare function useFormControlContext(): FormControlContextValue | null;
441
+ /**
442
+ * Returns the ARIA wiring a control should spread onto itself so the
443
+ * surrounding {@link FormControl} can connect label, helper text, and error.
444
+ * Returns an empty object when used outside a `FormControl`.
445
+ */
446
+ declare function useFormControl(): Partial<FormControlField>;
447
+ type FormControlProps = Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'id'> & {
448
+ id?: string;
449
+ invalid?: boolean;
450
+ required?: boolean;
451
+ disabled?: boolean;
452
+ /**
453
+ * Children may be a render function that receives the resolved field props,
454
+ * or static nodes that wire themselves with {@link useFormControl}.
455
+ */
456
+ children?: ReactNode | ((field: FormControlField) => ReactNode);
457
+ };
458
+ declare function FormControl({ id, invalid, required, disabled, className, children, ...props }: FormControlProps): react.JSX.Element;
459
+ type FormLabelProps = Omit<ComponentPropsWithoutRef<'label'>, 'htmlFor'> & {
460
+ htmlFor?: string;
461
+ required?: boolean;
462
+ };
463
+ declare function FormLabel({ className, children, required, htmlFor, ...props }: FormLabelProps): react.JSX.Element;
464
+ declare const helperTone: {
465
+ readonly muted: "text-[var(--color-fg-muted)]";
466
+ readonly danger: "text-[var(--color-danger-fg)]";
467
+ readonly success: "text-[var(--color-success-fg)]";
468
+ };
469
+ type FormHelperTextProps = ComponentPropsWithoutRef<'p'> & {
470
+ tone?: keyof typeof helperTone;
471
+ };
472
+ declare function FormHelperText({ className, tone, children, ...props }: FormHelperTextProps): react.JSX.Element;
473
+ type FormErrorProps = ComponentPropsWithoutRef<'p'>;
474
+ declare function FormError({ className, children, ...props }: FormErrorProps): react.JSX.Element | null;
475
+
476
+ type RadioOption<T = string> = {
477
+ value: T;
478
+ label: string;
479
+ description?: string;
480
+ icon?: ReactNode;
481
+ disabled?: boolean;
482
+ };
483
+ type RadioGroupProps<T = string> = {
484
+ /** Radio options to choose from. */
485
+ options: RadioOption<T>[];
486
+ /** Currently selected value. */
487
+ value: T;
488
+ /** Called with the newly selected value. */
489
+ onChange: (value: T) => void;
490
+ /** Layout direction of the options. */
491
+ orientation?: 'horizontal' | 'vertical';
492
+ /** Plain radios or selectable cards. */
493
+ variant?: 'plain' | 'card';
494
+ name?: string;
495
+ className?: string;
496
+ };
497
+ declare function RadioGroup<T = string>({ options, value, onChange, orientation, variant, name, className, }: RadioGroupProps<T>): react.JSX.Element;
498
+
499
+ type CheckboxGroupOption = {
500
+ value: string;
501
+ label: string;
502
+ description?: string;
503
+ disabled?: boolean;
504
+ };
505
+ type CheckboxGroupProps = {
506
+ /** Selectable options rendered as checkboxes. */
507
+ options: CheckboxGroupOption[];
508
+ /** Currently selected option values (controlled). */
509
+ value: string[];
510
+ /** Called with the next array of selected values when any box toggles. */
511
+ onChange: (value: string[]) => void;
512
+ /** Stacking direction of the checkboxes. Defaults to `'vertical'`. */
513
+ orientation?: 'vertical' | 'horizontal';
514
+ /** Disables every checkbox in the group. */
515
+ disabled?: boolean;
516
+ /** Marks the group invalid for validation styling (sets `data-invalid`). */
517
+ invalid?: boolean;
518
+ /** Shared form field name applied to each checkbox. */
519
+ name?: string;
520
+ /** Extra classes for the group container. */
521
+ className?: string;
522
+ 'aria-label'?: string;
523
+ 'aria-labelledby'?: string;
524
+ };
525
+ declare function CheckboxGroup({ options, value, onChange, orientation, disabled, invalid, name, className, ...aria }: CheckboxGroupProps): react.JSX.Element;
526
+ type SwitchGroupOption = {
527
+ value: string;
528
+ label: string;
529
+ description?: string;
530
+ disabled?: boolean;
531
+ };
532
+ type SwitchGroupProps = {
533
+ /** Switch options rendered as toggle rows. */
534
+ options: SwitchGroupOption[];
535
+ /** Values of the switches currently on (controlled). */
536
+ value: string[];
537
+ /** Called with the next array of on values when any switch toggles. */
538
+ onChange: (value: string[]) => void;
539
+ /** Disables every switch in the group. */
540
+ disabled?: boolean;
541
+ /** Wrap each row in a bordered settings panel. */
542
+ bordered?: boolean;
543
+ /** Extra classes for the group container. */
544
+ className?: string;
545
+ /** Accessible label for the group. */
546
+ 'aria-label'?: string;
547
+ /** Id of an element labelling the group. */
548
+ 'aria-labelledby'?: string;
549
+ };
550
+ declare function SwitchGroup({ options, value, onChange, disabled, bordered, className, ...aria }: SwitchGroupProps): react.JSX.Element;
551
+ type RadioCardOption<T = string> = RadioOption<T>;
552
+ declare const cardColumns: {
553
+ readonly 1: "grid-cols-1";
554
+ readonly 2: "grid-cols-1 sm:grid-cols-2";
555
+ readonly 3: "grid-cols-1 sm:grid-cols-3";
556
+ readonly 4: "grid-cols-1 sm:grid-cols-2 xl:grid-cols-4";
557
+ };
558
+ type RadioCardGroupProps<T = string> = Omit<RadioGroupProps<T>, 'variant'> & {
559
+ /** Lay cards out as a fixed-column grid instead of wrapping rows. */
560
+ columns?: keyof typeof cardColumns;
561
+ };
562
+ /**
563
+ * Single-choice card selector for plans, roles, layouts, or preferences.
564
+ * Thin preset over {@link RadioGroup} locked to the `card` variant.
565
+ */
566
+ declare function RadioCardGroup<T = string>({ columns, className, ...props }: RadioCardGroupProps<T>): react.JSX.Element;
567
+
568
+ type SelectProps = ComponentPropsWithoutRef<'select'>;
569
+ declare const Select: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, "ref"> & react.RefAttributes<HTMLSelectElement>>;
570
+
571
+ type TextareaProps = ComponentPropsWithoutRef<'textarea'>;
572
+ declare const Textarea: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & react.RefAttributes<HTMLTextAreaElement>>;
573
+
574
+ type CheckboxProps = {
575
+ /** Controlled checked state. */
576
+ checked?: boolean;
577
+ /** Initial checked state when uncontrolled. */
578
+ defaultChecked?: boolean;
579
+ /** Called with the new checked state on toggle. */
580
+ onChange?: (checked: boolean) => void;
581
+ /** Render the mixed/indeterminate visual state. */
582
+ indeterminate?: boolean;
583
+ /** Disable interaction and dim the control. */
584
+ disabled?: boolean;
585
+ /** Visible label beside the checkbox. */
586
+ label?: string;
587
+ /** Secondary helper text under the label. */
588
+ description?: string;
589
+ className?: string;
590
+ /** Element id, also associates the label. */
591
+ id?: string;
592
+ };
593
+ declare function Checkbox({ checked, defaultChecked, onChange, indeterminate, disabled, label, description, className, id, }: CheckboxProps): react.JSX.Element;
594
+
595
+ type SwitchProps = {
596
+ /** Controlled on/off state. */
597
+ checked?: boolean;
598
+ /** Initial state when uncontrolled. */
599
+ defaultChecked?: boolean;
600
+ /** Called with the new boolean state when toggled. */
601
+ onChange?: (checked: boolean) => void;
602
+ /** Disable interaction and dim the control. */
603
+ disabled?: boolean;
604
+ /** Visible label rendered beside the switch. */
605
+ label?: string;
606
+ /** Secondary helper text under the label. */
607
+ description?: string;
608
+ className?: string;
609
+ /** Element id, also used to associate the label. */
610
+ id?: string;
611
+ /** Accessible name when no visible `label` is provided. */
612
+ 'aria-label'?: string;
613
+ /** Id of an external element labelling the switch. */
614
+ 'aria-labelledby'?: string;
615
+ };
616
+ declare function Switch({ checked, defaultChecked, onChange, disabled, label, description, className, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, }: SwitchProps): react.JSX.Element;
617
+
618
+ type ToggleOption<T extends string = string> = {
619
+ value: T;
620
+ label: string;
621
+ icon?: ReactNode;
622
+ disabled?: boolean;
623
+ };
624
+ type ToggleGroupProps<T extends string = string> = {
625
+ /** Single-select mode — only one option active at a time. */
626
+ type: 'single';
627
+ /** The active option value (controlled). */
628
+ value: T;
629
+ /** Called with the newly selected value. */
630
+ onChange: (value: T) => void;
631
+ /** Toggle options to render. */
632
+ options: ToggleOption<T>[];
633
+ /** Extra classes for the toggle container. */
634
+ className?: string;
635
+ /** Accessible label for the group (maps to `aria-label`). */
636
+ ariaLabel?: string;
637
+ } | {
638
+ /** Multi-select mode — any number of options active. */
639
+ type: 'multiple';
640
+ /** The active option values (controlled). */
641
+ value: T[];
642
+ /** Called with the next array of active values when any toggle flips. */
643
+ onChange: (value: T[]) => void;
644
+ /** Toggle options to render. */
645
+ options: ToggleOption<T>[];
646
+ /** Extra classes for the toggle container. */
647
+ className?: string;
648
+ /** Accessible label for the group (maps to `aria-label`). */
649
+ ariaLabel?: string;
650
+ };
651
+ declare function ToggleGroup<T extends string = string>(props: ToggleGroupProps<T>): react.JSX.Element;
652
+
653
+ type ComboboxOption<T = string> = {
654
+ value: T;
655
+ label: string;
656
+ description?: string;
657
+ icon?: ReactNode;
658
+ disabled?: boolean;
659
+ };
660
+ type ComboboxProps<T = string> = {
661
+ /** Selectable options. */
662
+ options: ComboboxOption<T>[];
663
+ /** Currently selected value, or null. */
664
+ value: T | null;
665
+ /** Called with the chosen value (or null when cleared). */
666
+ onChange: (value: T | null) => void;
667
+ /** Placeholder text for the input when nothing is selected. */
668
+ placeholder?: string;
669
+ /** Message shown when no options match the query. */
670
+ emptyMessage?: string;
671
+ /** Show a loading state (e.g. while fetching options). */
672
+ loading?: boolean;
673
+ /** Called as the user types — use for async/remote filtering. */
674
+ onInputChange?: (q: string) => void;
675
+ /** Custom renderer for an option row. */
676
+ renderOption?: (option: ComboboxOption<T>) => ReactNode;
677
+ /** Control size. */
678
+ size?: 'sm' | 'md';
679
+ /** Disables the input and prevents selection. */
680
+ disabled?: boolean;
681
+ /** Show a clear button to reset the selection. */
682
+ clearable?: boolean;
683
+ /** Form field name for the underlying input. */
684
+ name?: string;
685
+ /** Explicit id for the input. */
686
+ id?: string;
687
+ /** Extra classes for the combobox container. */
688
+ className?: string;
689
+ };
690
+ declare function Combobox<T = string>({ options, value, onChange, placeholder, emptyMessage, loading, onInputChange, renderOption, size, disabled, clearable, name, id, className, inputRef, }: ComboboxProps<T> & {
691
+ /** Ref forwarded to the underlying text input. */
692
+ inputRef?: Ref<HTMLInputElement>;
693
+ }): react.JSX.Element;
694
+
695
+ type MultiColumnComboboxColumn = {
696
+ key: string;
697
+ header: string;
698
+ width?: string;
699
+ };
700
+ type MultiColumnComboboxItem = Record<string, string> & {
701
+ id: string;
702
+ };
703
+ type MultiColumnComboboxProps = {
704
+ /** Selectable rows, each carrying a value per column. */
705
+ items: MultiColumnComboboxItem[];
706
+ /** Column definitions shown in the dropdown grid. */
707
+ columns: MultiColumnComboboxColumn[];
708
+ /** Id of the selected item, or null. */
709
+ value: string | null;
710
+ /** Called with the new selection id (or null when cleared). */
711
+ onChange: (id: string | null) => void;
712
+ /** Column key shown in the input when an item is selected. Defaults to first column. */
713
+ displayKey?: string;
714
+ /** Visible field label. */
715
+ label?: string;
716
+ /** Placeholder when nothing is selected. */
717
+ placeholder?: string;
718
+ /** Message shown when no items match the query. */
719
+ emptyMessage?: string;
720
+ /** Disable the control. */
721
+ disabled?: boolean;
722
+ /** Show a clear button when a value is selected. */
723
+ clearable?: boolean;
724
+ className?: string;
725
+ };
726
+ /**
727
+ * Combobox whose popup is a small table — search across all columns, render
728
+ * structured rows. For picking entities with several identifying fields
729
+ * (e.g. SKU + name + stock, employee + department + role).
730
+ */
731
+ declare function MultiColumnCombobox({ items, columns, value, onChange, displayKey, label, placeholder, emptyMessage, disabled, clearable, className, }: MultiColumnComboboxProps): react.JSX.Element;
732
+
733
+ type MultiSelectProps<T = string> = {
734
+ /** Selectable options. */
735
+ options: ComboboxOption<T>[];
736
+ /** Currently selected values. */
737
+ value: T[];
738
+ /** Called with the updated selection. */
739
+ onChange: (value: T[]) => void;
740
+ placeholder?: string;
741
+ /** Message shown when no options match. */
742
+ emptyMessage?: string;
743
+ /** Max chips to render before collapsing into a "+N" badge. */
744
+ maxBadgeCount?: number;
745
+ chipsClassName?: string;
746
+ /** Show a "select all" control. */
747
+ showSelectAll?: boolean;
748
+ /** Label for the select-all control. */
749
+ selectAllLabel?: string;
750
+ /** Label for the clear-all control. */
751
+ clearAllLabel?: string;
752
+ /** Control size. */
753
+ size?: 'sm' | 'md';
754
+ disabled?: boolean;
755
+ className?: string;
756
+ };
757
+ declare function MultiSelect<T = string>({ options, value, onChange, placeholder, emptyMessage, maxBadgeCount, chipsClassName, showSelectAll, selectAllLabel, clearAllLabel, size, disabled, className, }: MultiSelectProps<T>): react.JSX.Element;
758
+
759
+ type TagInputProps = {
760
+ /** Current list of tags. */
761
+ value: string[];
762
+ /** Called with the updated tag list on add/remove. */
763
+ onChange: (value: string[]) => void;
764
+ placeholder?: string;
765
+ /** Maximum number of tags allowed. */
766
+ maxTags?: number;
767
+ /** Pattern that splits typed input into tags (e.g. comma/space). */
768
+ delimiter?: RegExp;
769
+ /** Validate a candidate tag; return an error string to reject it. */
770
+ validate?: (tag: string) => string | null;
771
+ /** Autocomplete suggestions offered while typing. */
772
+ suggestions?: string[];
773
+ className?: string;
774
+ };
775
+ declare function TagInput({ value, onChange, placeholder, maxTags, delimiter, validate, suggestions, className, }: TagInputProps): react.JSX.Element;
776
+
777
+ type ToggleButtonProps = Omit<ButtonProps, 'onClick'> & {
778
+ /** Whether the toggle is currently pressed/active. */
779
+ pressed: boolean;
780
+ /** Called with the next pressed state when toggled. */
781
+ onPressedChange: (pressed: boolean) => void;
782
+ };
783
+ declare function ToggleButton({ pressed, onPressedChange, className, variant, ...props }: ToggleButtonProps): react.JSX.Element;
784
+
785
+ type NumberInputProps = {
786
+ /** Current value, or null when empty. */
787
+ value: number | null;
788
+ /** Called with the parsed value (null when cleared). */
789
+ onChange: (value: number | null) => void;
790
+ /** Minimum allowed value. */
791
+ min?: number;
792
+ /** Maximum allowed value. */
793
+ max?: number;
794
+ /** Increment/decrement step. Defaults to 1. */
795
+ step?: number;
796
+ /** Number of decimal places to enforce. */
797
+ precision?: number;
798
+ placeholder?: string;
799
+ /** Unit suffix shown inside the field (e.g. "%"). */
800
+ suffix?: string;
801
+ /** Prefix shown inside the field (e.g. "$"). */
802
+ prefix?: string;
803
+ /** Show the stepper +/- buttons. */
804
+ showSteppers?: boolean;
805
+ /** Control size. */
806
+ size?: 'sm' | 'md';
807
+ disabled?: boolean;
808
+ className?: string;
809
+ /** Accessible name when no visible label is present. */
810
+ ariaLabel?: string;
811
+ };
812
+ declare const NumberInput: react.ForwardRefExoticComponent<NumberInputProps & react.RefAttributes<HTMLInputElement>>;
813
+
814
+ type SearchInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value'> & {
815
+ /** Current query string. */
816
+ value: string;
817
+ /** Called on every keystroke with the new query. */
818
+ onChange: (value: string) => void;
819
+ /** Called after `debounceMs` of inactivity — ideal for firing searches. */
820
+ onDebouncedChange?: (value: string) => void;
821
+ /** Debounce window for `onDebouncedChange`, in ms. */
822
+ debounceMs?: number;
823
+ /** Show a clear (×) button when there is a value. */
824
+ showClear?: boolean;
825
+ /** Accessible label for the clear button. */
826
+ clearLabel?: string;
827
+ };
828
+ declare const SearchInput: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "onChange"> & {
829
+ /** Current query string. */
830
+ value: string;
831
+ /** Called on every keystroke with the new query. */
832
+ onChange: (value: string) => void;
833
+ /** Called after `debounceMs` of inactivity — ideal for firing searches. */
834
+ onDebouncedChange?: (value: string) => void;
835
+ /** Debounce window for `onDebouncedChange`, in ms. */
836
+ debounceMs?: number;
837
+ /** Show a clear (×) button when there is a value. */
838
+ showClear?: boolean;
839
+ /** Accessible label for the clear button. */
840
+ clearLabel?: string;
841
+ } & react.RefAttributes<HTMLInputElement>>;
842
+
843
+ type TimeValue = {
844
+ hours: number;
845
+ minutes: number;
846
+ seconds?: number;
847
+ };
848
+ type TimePickerProps = {
849
+ /** Selected time ({ hours, minutes, seconds? }). */
850
+ value: TimeValue;
851
+ /** Called with the new time on change. */
852
+ onChange: (value: TimeValue) => void;
853
+ /** Show a seconds field. */
854
+ showSeconds?: boolean;
855
+ /** Use 12-hour format with an AM/PM toggle. */
856
+ hour12?: boolean;
857
+ /** Visible field label. */
858
+ label?: string;
859
+ /** Disable the control. */
860
+ disabled?: boolean;
861
+ };
862
+ declare function TimePicker({ value, onChange, showSeconds, hour12, label, disabled, }: TimePickerProps): react.JSX.Element;
863
+
864
+ type DateTimePickerProps = {
865
+ /** Selected date-time, or `undefined` when empty (controlled). */
866
+ value: Date | undefined;
867
+ /** Called with the newly selected date-time. */
868
+ onChange: (value: Date | undefined) => void;
869
+ /** Placeholder text when nothing is selected. */
870
+ placeholder?: string;
871
+ };
872
+ declare function DateTimePicker({ value, onChange, placeholder }: DateTimePickerProps): react.JSX.Element;
873
+
874
+ type DateTimeRangePickerProps = {
875
+ /** Selected start/end date-time range (controlled). */
876
+ value: DateRange;
877
+ /** Called with the next range when either date or time changes. */
878
+ onChange: (value: DateRange) => void;
879
+ /** Placeholder text for the date inputs. */
880
+ placeholder?: string;
881
+ /** Label for the start date-time field. */
882
+ startLabel?: string;
883
+ /** Label for the end date-time field. */
884
+ endLabel?: string;
885
+ /** Extra classes for the picker container. */
886
+ className?: string;
887
+ };
888
+ declare function DateTimeRangePicker({ value, onChange, placeholder, startLabel, endLabel, className, }: DateTimeRangePickerProps): react.JSX.Element;
889
+
890
+ type PinInputProps = {
891
+ /** Current code value. */
892
+ value: string;
893
+ /** Called with the full code as digits are entered. */
894
+ onChange: (value: string) => void;
895
+ /** Number of input cells. Defaults to 6. */
896
+ length?: number;
897
+ /** Visible label above the inputs. */
898
+ label?: string;
899
+ disabled?: boolean;
900
+ };
901
+ declare function PinInput({ value, onChange, length, label, disabled, }: PinInputProps): react.JSX.Element;
902
+
903
+ type PasswordInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & {
904
+ /** Show a live password-strength meter below the field. */
905
+ showStrength?: boolean;
906
+ /** Accessible label for the reveal toggle (show state). */
907
+ revealLabel?: string;
908
+ /** Accessible label for the reveal toggle (hide state). */
909
+ hideLabel?: string;
910
+ };
911
+ declare const PasswordInput: react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type"> & {
912
+ /** Show a live password-strength meter below the field. */
913
+ showStrength?: boolean;
914
+ /** Accessible label for the reveal toggle (show state). */
915
+ revealLabel?: string;
916
+ /** Accessible label for the reveal toggle (hide state). */
917
+ hideLabel?: string;
918
+ } & react.RefAttributes<HTMLInputElement>>;
919
+
920
+ type PhoneInputProps = Pick<PhoneInputProps$1, 'value' | 'onChange' | 'disabled' | 'name' | 'placeholder' | 'defaultCountry'>;
921
+ declare function PhoneInput(props: PhoneInputProps): react.JSX.Element;
922
+
923
+ type CurrencyInputProps = {
924
+ /** Amount in major units, or null when empty. */
925
+ value: number | null;
926
+ /** Called with the parsed amount (null when cleared). */
927
+ onChange: (value: number | null) => void;
928
+ /** ISO 4217 currency code (e.g. "USD"). */
929
+ currency: string;
930
+ /** BCP 47 locale for formatting. Defaults to the runtime locale. */
931
+ locale?: string;
932
+ /** Minimum allowed amount. */
933
+ min?: number;
934
+ /** Maximum allowed amount. */
935
+ max?: number;
936
+ };
937
+ declare function CurrencyInput({ currency, locale, ...props }: CurrencyInputProps): react.JSX.Element;
938
+
939
+ type RatingProps = {
940
+ /** Current rating value. */
941
+ value: number;
942
+ /** Called with the chosen value; omit for a read-only display. */
943
+ onChange?: (value: number) => void;
944
+ /** Number of stars. Defaults to 5. */
945
+ max?: number;
946
+ /** Selectable granularity: whole or half stars. */
947
+ precision?: 1 | 0.5;
948
+ /** Accessible label for the rating group. */
949
+ label?: string;
950
+ /** Render as a non-interactive display. */
951
+ readOnly?: boolean;
952
+ /** Star size. */
953
+ size?: 'sm' | 'md' | 'lg';
954
+ className?: string;
955
+ };
956
+ declare function Rating({ value, onChange, max, precision, label, readOnly, size, className, }: RatingProps): react.JSX.Element;
957
+
958
+ type MentionOption = {
959
+ id: string;
960
+ label: string;
961
+ };
962
+ type MentionInputProps = {
963
+ /** Current text value, including any @-mentions. */
964
+ value: string;
965
+ /** Called with the new text on change. */
966
+ onChange: (value: string) => void;
967
+ /** Candidates shown in the mention autocomplete. */
968
+ options: MentionOption[];
969
+ /** Placeholder text when empty. */
970
+ placeholder?: string;
971
+ };
972
+ declare function MentionInput({ value, onChange, options, placeholder }: MentionInputProps): react.JSX.Element;
973
+
974
+ type AsyncSelectProps<T = string> = Omit<ComboboxProps<T>, 'options' | 'loading' | 'onInputChange'> & {
975
+ queryKey: (query: string) => unknown[];
976
+ queryFn: (query: string) => Promise<ComboboxOption<T>[]>;
977
+ minChars?: number;
978
+ minCharsMessage?: string;
979
+ };
980
+ declare function AsyncSelect<T = string>({ queryKey, queryFn, minChars, minCharsMessage, ...props }: AsyncSelectProps<T>): react.JSX.Element;
981
+
982
+ type InputGroupProps = ComponentPropsWithoutRef<'div'> & {
983
+ /** Leading addon rendered before the input (icon, label, unit). */
984
+ prefix?: ReactNode;
985
+ /** Trailing addon rendered after the input. */
986
+ suffix?: ReactNode;
987
+ };
988
+ declare const InputGroup: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
989
+ /** Leading addon rendered before the input (icon, label, unit). */
990
+ prefix?: ReactNode;
991
+ /** Trailing addon rendered after the input. */
992
+ suffix?: ReactNode;
993
+ } & react.RefAttributes<HTMLDivElement>>;
994
+
995
+ type Swatch = {
996
+ value: string;
997
+ label?: string;
998
+ };
999
+ type SwatchPickerProps = {
1000
+ /** Selectable swatches — hex strings or `{ value, label }` objects. */
1001
+ swatches: Array<string | Swatch>;
1002
+ /** Currently selected swatch value (controlled). */
1003
+ value: string;
1004
+ /** Called with the newly selected swatch value. */
1005
+ onChange: (value: string) => void;
1006
+ /** Swatch size. Defaults to `'md'`. */
1007
+ size?: 'sm' | 'md';
1008
+ /** Append a native color input for arbitrary values. */
1009
+ allowCustom?: boolean;
1010
+ /** Extra classes for the picker container. */
1011
+ className?: string;
1012
+ /** Accessible label for the swatch group. */
1013
+ 'aria-label'?: string;
1014
+ };
1015
+ /**
1016
+ * Controlled color/accent preset selector. Domain-neutral — the app wires
1017
+ * `value`/`onChange` to its own theme state (e.g. brand accent color).
1018
+ */
1019
+ declare function SwatchPicker({ swatches, value, onChange, size, allowCustom, className, 'aria-label': ariaLabel, }: SwatchPickerProps): react.JSX.Element;
1020
+
1021
+ declare const alertVariants: (props?: ({
1022
+ variant?: "danger" | "success" | "warning" | "info" | null | undefined;
1023
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1024
+ type AlertProps = ComponentPropsWithoutRef<'div'> & VariantProps<typeof alertVariants> & {
1025
+ /** Bold heading shown above the message. */
1026
+ title?: string;
1027
+ /** Show a close button that hides the alert. */
1028
+ dismissible?: boolean;
1029
+ };
1030
+ declare function Alert({ className, variant, title, dismissible, children, ...props }: AlertProps): react.JSX.Element | null;
1031
+
1032
+ type InlineNoticeTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
1033
+ type InlineNoticeProps = Omit<ComponentPropsWithoutRef<'div'>, 'title'> & {
1034
+ /** Semantic tone driving color and default icon. Defaults to `'info'`. */
1035
+ tone?: InlineNoticeTone;
1036
+ /** Leading icon override; falls back to a tone-based default. */
1037
+ icon?: ReactNode;
1038
+ /** Trailing action node (e.g. a small Button or Link). */
1039
+ action?: ReactNode;
1040
+ /** Show a dismiss button. */
1041
+ dismissible?: boolean;
1042
+ /** Called when the dismiss button is clicked. */
1043
+ onDismiss?: () => void;
1044
+ };
1045
+ /**
1046
+ * Compact single-row feedback for forms and settings panels — lighter than
1047
+ * {@link Alert}. No border or fill by default, just toned text + icon.
1048
+ */
1049
+ declare function InlineNotice({ tone, icon, action, dismissible, onDismiss, className, children, ...props }: InlineNoticeProps): react.JSX.Element | null;
1050
+
1051
+ declare const toast: {
1052
+ success: (message: string, opts?: ExternalToast) => string | number;
1053
+ error: (message: string, opts?: ExternalToast) => string | number;
1054
+ warn: (message: string, opts?: ExternalToast) => string | number;
1055
+ info: (message: string, opts?: ExternalToast) => string | number;
1056
+ promise: <ToastData>(promise: Promise<ToastData> | (() => Promise<ToastData>), data?: {
1057
+ icon?: react.ReactNode;
1058
+ style?: React.CSSProperties | undefined;
1059
+ className?: string | undefined;
1060
+ id?: number | string | undefined;
1061
+ position?: ("top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-center" | "bottom-center") | undefined;
1062
+ onDismiss?: ((toast: sonner.ToastT) => void) | undefined;
1063
+ action?: react.ReactNode | sonner.Action;
1064
+ cancel?: react.ReactNode | sonner.Action;
1065
+ duration?: number | undefined;
1066
+ classNames?: sonner.ToastClassnames | undefined;
1067
+ dismissible?: boolean | undefined;
1068
+ richColors?: boolean | undefined;
1069
+ invert?: boolean | undefined;
1070
+ closeButton?: boolean | undefined;
1071
+ onAutoClose?: ((toast: sonner.ToastT) => void) | undefined;
1072
+ cancelButtonStyle?: React.CSSProperties | undefined;
1073
+ actionButtonStyle?: React.CSSProperties | undefined;
1074
+ unstyled?: boolean | undefined;
1075
+ descriptionClassName?: string | undefined;
1076
+ } & {
1077
+ loading?: string | React.ReactNode;
1078
+ success?: react.ReactNode | ((data: ToastData) => React.ReactNode | string | Promise<React.ReactNode | string>);
1079
+ error?: react.ReactNode | ((data: any) => React.ReactNode | string | Promise<React.ReactNode | string>);
1080
+ description?: react.ReactNode | ((data: any) => React.ReactNode | string | Promise<React.ReactNode | string>);
1081
+ finally?: () => void | Promise<void>;
1082
+ }) => (string & {
1083
+ unwrap: () => Promise<ToastData>;
1084
+ }) | (number & {
1085
+ unwrap: () => Promise<ToastData>;
1086
+ }) | {
1087
+ unwrap: () => Promise<ToastData>;
1088
+ };
1089
+ };
1090
+
1091
+ type NotificationCardProps = {
1092
+ /** Notification headline. */
1093
+ title: string;
1094
+ /** Body text. */
1095
+ description?: string;
1096
+ /** Leading icon or avatar. */
1097
+ icon?: ReactNode;
1098
+ /** Trailing metadata such as a timestamp. */
1099
+ meta?: ReactNode;
1100
+ /** Mark as unread (adds an emphasis indicator). */
1101
+ unread?: boolean;
1102
+ /** Action controls rendered in the card. */
1103
+ actions?: ReactNode;
1104
+ };
1105
+ declare function NotificationCard({ title, description, icon, meta, unread, actions, }: NotificationCardProps): react.JSX.Element;
1106
+
1107
+ interface ConfettiProps {
1108
+ /** Fire the confetti burst when true. */
1109
+ run?: boolean;
1110
+ /** Number of confetti pieces. */
1111
+ pieces?: number;
1112
+ /** Height of the confetti canvas in px. */
1113
+ height?: number;
1114
+ }
1115
+ declare function Confetti({ run, pieces, height }: ConfettiProps): react.JSX.Element;
1116
+
1117
+ type BackdropProps = ComponentPropsWithoutRef<'div'> & {
1118
+ /** Apply a backdrop blur to content behind the overlay. */
1119
+ blur?: boolean;
1120
+ /** Whether the backdrop is shown. */
1121
+ open?: boolean;
1122
+ };
1123
+ declare function Backdrop({ blur, className, open, ...props }: BackdropProps): react.JSX.Element | null;
1124
+
1125
+ type LoadingOverlayProps = {
1126
+ /** Whether the overlay is shown. */
1127
+ visible: boolean;
1128
+ /** Optional text shown beneath the spinner. */
1129
+ label?: ReactNode;
1130
+ /** Blur the underlying content instead of dimming it. */
1131
+ blur?: boolean;
1132
+ /** Spinner size. Defaults to `'md'`. */
1133
+ spinnerSize?: 'sm' | 'md' | 'lg';
1134
+ /** Extra classes for the overlay container. */
1135
+ className?: string;
1136
+ /**
1137
+ * When provided, wraps the children in a positioned container and overlays
1138
+ * them. When omitted, renders only the overlay (parent must be `relative`).
1139
+ */
1140
+ children?: ReactNode;
1141
+ };
1142
+ /**
1143
+ * Contained async overlay for panels, forms, and tables. It traps nothing and
1144
+ * owns no data — drive `visible` from the caller's async state.
1145
+ */
1146
+ declare function LoadingOverlay({ visible, label, blur, spinnerSize, className, children, }: LoadingOverlayProps): react.JSX.Element | null;
1147
+
1148
+ type TabItem = {
1149
+ label: string;
1150
+ content: ReactNode;
1151
+ icon?: ReactNode;
1152
+ disabled?: boolean;
1153
+ badge?: string | number;
1154
+ };
1155
+ type TabsProps = {
1156
+ /** Tab definitions; each provides a label and panel content. */
1157
+ items: TabItem[];
1158
+ /** Initially selected tab index when uncontrolled. */
1159
+ defaultIndex?: number;
1160
+ /** Controlled selected tab index. */
1161
+ selectedIndex?: number;
1162
+ /** Called with the newly selected index. */
1163
+ onChange?: (index: number) => void;
1164
+ className?: string;
1165
+ /** Visual style of the tab strip. */
1166
+ variant?: 'underline' | 'pills';
1167
+ };
1168
+ declare function Tabs({ items, defaultIndex, selectedIndex, onChange, className, variant, }: TabsProps): react.JSX.Element;
1169
+
1170
+ type DropdownItem = {
1171
+ label: string;
1172
+ icon?: ReactNode;
1173
+ shortcut?: string;
1174
+ danger?: boolean;
1175
+ disabled?: boolean;
1176
+ onClick?: () => void;
1177
+ href?: string;
1178
+ };
1179
+ type DropdownSection = {
1180
+ heading?: string;
1181
+ items: DropdownItem[];
1182
+ };
1183
+ type DropdownProps = {
1184
+ /** Element that opens the dropdown when activated. */
1185
+ trigger: ReactNode;
1186
+ /** Grouped menu items, optionally with section headings. */
1187
+ sections: DropdownSection[];
1188
+ /** Menu alignment relative to the trigger. Defaults to `'start'`. */
1189
+ align?: 'start' | 'end';
1190
+ /** Extra classes for the menu panel. */
1191
+ className?: string;
1192
+ };
1193
+ declare function Dropdown({ trigger, sections, align, className }: DropdownProps): react.JSX.Element;
1194
+
1195
+ type FloatingSide = 'top' | 'right' | 'bottom' | 'left';
1196
+ type FloatingAlign = 'start' | 'center' | 'end';
1197
+
1198
+ type TooltipProps = {
1199
+ /** Tooltip body shown on hover/focus. */
1200
+ content: ReactNode;
1201
+ /** The single trigger element the tooltip is attached to. */
1202
+ children: ReactElement;
1203
+ /** Preferred side to position against the trigger. */
1204
+ side?: FloatingSide;
1205
+ /** Alignment along the chosen side. */
1206
+ align?: FloatingAlign;
1207
+ /** Hover open delay in milliseconds. */
1208
+ delayMs?: number;
1209
+ /** Gap in pixels between trigger and tooltip. */
1210
+ sideOffset?: number;
1211
+ /** Disable the tooltip entirely. */
1212
+ disabled?: boolean;
1213
+ };
1214
+ declare function Tooltip({ content, children, side, align, delayMs, sideOffset, disabled, }: TooltipProps): react.JSX.Element;
1215
+
1216
+ type PopoverProps = {
1217
+ /** Element that toggles the popover; receives the trigger props. */
1218
+ trigger: ReactElement;
1219
+ /** Panel content, or a render function receiving a `close` callback. */
1220
+ children: ReactNode | ((api: {
1221
+ close: () => void;
1222
+ }) => ReactNode);
1223
+ /** Preferred side of the trigger to position against. */
1224
+ side?: FloatingSide;
1225
+ /** Alignment along the chosen side. */
1226
+ align?: FloatingAlign;
1227
+ /** Gap in pixels between trigger and panel. */
1228
+ sideOffset?: number;
1229
+ /** Controlled open state. */
1230
+ open?: boolean;
1231
+ /** Initial open state when uncontrolled. */
1232
+ defaultOpen?: boolean;
1233
+ /** Called when the open state changes. */
1234
+ onOpenChange?: (open: boolean) => void;
1235
+ /** Trap focus and block outside interaction while open. */
1236
+ modal?: boolean;
1237
+ className?: string;
1238
+ };
1239
+ declare function Popover({ trigger, children, side, align, sideOffset, open, defaultOpen, onOpenChange, modal, className, }: PopoverProps): react.JSX.Element;
1240
+
1241
+ type HoverCardProps = {
1242
+ /** Element that reveals the card on hover/focus. */
1243
+ trigger: ReactElement;
1244
+ /** Card content shown on hover. */
1245
+ children: ReactNode;
1246
+ /** Side of the trigger to position the card. */
1247
+ side?: 'top' | 'right' | 'bottom' | 'left';
1248
+ };
1249
+ declare function HoverCard({ trigger, children, side }: HoverCardProps): react.JSX.Element;
1250
+
1251
+ type ContextMenuItem = {
1252
+ label: string;
1253
+ icon?: ReactNode;
1254
+ disabled?: boolean;
1255
+ danger?: boolean;
1256
+ onClick?: () => void;
1257
+ };
1258
+ type ContextMenuProps = {
1259
+ /** Target region that opens the menu on right-click. */
1260
+ children: ReactNode;
1261
+ /** Menu entries, including separators and nested items. */
1262
+ items: ContextMenuItem[];
1263
+ className?: string;
1264
+ };
1265
+ declare function ContextMenu({ children, items, className }: ContextMenuProps): react.JSX.Element;
1266
+
1267
+ type CommandAction = {
1268
+ id: string;
1269
+ label: string;
1270
+ section: 'navigation' | 'actions' | 'recent';
1271
+ icon?: ReactNode;
1272
+ keywords?: string[];
1273
+ perform: () => void;
1274
+ };
1275
+ type CommandStore = {
1276
+ actions: CommandAction[];
1277
+ open: boolean;
1278
+ setOpen: (open: boolean) => void;
1279
+ register: (actions: CommandAction[]) => () => void;
1280
+ };
1281
+ declare const useCommandStore: zustand.UseBoundStore<zustand.StoreApi<CommandStore>>;
1282
+ declare function registerCommands(actions: CommandAction[]): () => void;
1283
+ declare function CommandPalette({ label, placeholder, }: {
1284
+ label?: string;
1285
+ placeholder?: string;
1286
+ }): react.JSX.Element;
1287
+
1288
+ type BreadcrumbItem = {
1289
+ label: string;
1290
+ href?: string;
1291
+ };
1292
+ type BreadcrumbProps = {
1293
+ /** Trail entries from root to current page. */
1294
+ items: BreadcrumbItem[];
1295
+ /** Custom separator between items. Defaults to a chevron. */
1296
+ separator?: ReactNode;
1297
+ className?: string;
1298
+ };
1299
+ declare function Breadcrumb({ items, separator, className, }: BreadcrumbProps): react.JSX.Element | null;
1300
+
1301
+ type CollapsibleProps = {
1302
+ /** Clickable header that toggles the panel. */
1303
+ title: ReactNode;
1304
+ /** Collapsible content. */
1305
+ children: ReactNode;
1306
+ /** Whether the panel starts open. */
1307
+ defaultOpen?: boolean;
1308
+ };
1309
+ declare function Collapsible({ title, children, defaultOpen }: CollapsibleProps): react.JSX.Element;
1310
+
1311
+ interface AccordionItem {
1312
+ id: string;
1313
+ title: ReactNode;
1314
+ content: ReactNode;
1315
+ disabled?: boolean;
1316
+ }
1317
+ interface AccordionProps {
1318
+ /** Panel definitions. */
1319
+ items: AccordionItem[];
1320
+ /** Ids of panels open on first render. */
1321
+ defaultOpenIds?: string[];
1322
+ /** Allow more than one panel open at a time. */
1323
+ allowMultiple?: boolean;
1324
+ className?: string;
1325
+ }
1326
+ declare function Accordion({ items, defaultOpenIds, allowMultiple, className, }: AccordionProps): react.JSX.Element;
1327
+
1328
+ interface NavigationMenuItem {
1329
+ label: string;
1330
+ href?: string;
1331
+ content?: ReactNode;
1332
+ }
1333
+ interface NavigationMenuProps {
1334
+ /** Top-level menu entries, optionally with nested children. */
1335
+ items: NavigationMenuItem[];
1336
+ className?: string;
1337
+ }
1338
+ declare function NavigationMenu({ items, className }: NavigationMenuProps): react.JSX.Element;
1339
+
1340
+ interface SpotlightProps {
1341
+ /** Whether the spotlight overlay is open. */
1342
+ open: boolean;
1343
+ /** Called when the open state changes (Esc, overlay click). */
1344
+ onOpenChange: (open: boolean) => void;
1345
+ /** Current search query. */
1346
+ value: string;
1347
+ /** Called with the new query on input. */
1348
+ onChange: (value: string) => void;
1349
+ /** Result list rendered below the input. */
1350
+ children?: React.ReactNode;
1351
+ /** Placeholder text for the search input. */
1352
+ placeholder?: string;
1353
+ }
1354
+ declare function Spotlight({ open, onOpenChange, value, onChange, children, placeholder, }: SpotlightProps): react.JSX.Element | null;
1355
+
1356
+ type BottomNavigationItem = {
1357
+ icon?: ReactNode;
1358
+ label: string;
1359
+ value: string;
1360
+ };
1361
+ type BottomNavigationProps = {
1362
+ className?: string;
1363
+ /** Navigation destinations. */
1364
+ items: BottomNavigationItem[];
1365
+ /** Called with the value of the selected destination. */
1366
+ onChange: (value: string) => void;
1367
+ /** Value of the currently active destination. */
1368
+ value: string;
1369
+ };
1370
+ declare function BottomNavigation({ className, items, onChange, value }: BottomNavigationProps): react.JSX.Element;
1371
+
1372
+ type MenuProps = {
1373
+ align?: 'start' | 'end';
1374
+ children: ReactNode;
1375
+ className?: string;
1376
+ sections: DropdownSection[];
1377
+ };
1378
+ declare function Menu({ align, children, className, sections }: MenuProps): react.JSX.Element;
1379
+
1380
+ type ActionMenuItem = DropdownItem;
1381
+ type ActionMenuSection = DropdownSection;
1382
+ type ActionMenuProps = {
1383
+ /** Flat list of actions. Use `sections` instead for grouped/headed menus. */
1384
+ items?: ActionMenuItem[];
1385
+ /** Grouped actions with optional section headings. */
1386
+ sections?: ActionMenuSection[];
1387
+ /** Accessible label for the default trigger. */
1388
+ label?: string;
1389
+ /** Menu alignment relative to the trigger. Defaults to `'end'`. */
1390
+ align?: 'start' | 'end';
1391
+ /** Replace the default overflow trigger entirely. */
1392
+ trigger?: ReactNode;
1393
+ /** Icon for the default trigger button. Defaults to `MoreHorizontal`. */
1394
+ icon?: ReactNode;
1395
+ /** Size of the default trigger button. */
1396
+ size?: 'sm' | 'md';
1397
+ /** Extra classes for the menu container. */
1398
+ className?: string;
1399
+ };
1400
+ /**
1401
+ * Domain-neutral overflow menu for row, toolbar, and contextual actions.
1402
+ * Renders a `MoreHorizontal` {@link IconButton} trigger unless overridden.
1403
+ */
1404
+ declare function ActionMenu({ items, sections, label, align, trigger, icon, size, className, }: ActionMenuProps): react.JSX.Element;
1405
+
1406
+ type RowAction = {
1407
+ label: string;
1408
+ icon: ReactNode;
1409
+ onClick?: () => void;
1410
+ href?: string;
1411
+ danger?: boolean;
1412
+ disabled?: boolean;
1413
+ };
1414
+ type RowActionsProps = {
1415
+ /** Row actions; the first `max` show inline, the rest fold into a menu. */
1416
+ actions: RowAction[];
1417
+ /** Number of actions shown inline before collapsing the rest into a menu. */
1418
+ max?: number;
1419
+ /** Size of the action buttons. Defaults to `'md'`. */
1420
+ size?: 'sm' | 'md';
1421
+ /** Accessible label for the overflow menu trigger. */
1422
+ menuLabel?: string;
1423
+ /** Extra classes for the actions container. */
1424
+ className?: string;
1425
+ };
1426
+ /**
1427
+ * Compact action cluster for table rows and list items. Shows up to `max`
1428
+ * inline icon buttons (each with a tooltip), then collapses overflow into an
1429
+ * {@link ActionMenu}. Domain-neutral — it never imports table primitives.
1430
+ */
1431
+ declare function RowActions({ actions, max, size, menuLabel, className, }: RowActionsProps): react.JSX.Element;
1432
+
1433
+ type SpeedDialAction = {
1434
+ icon?: ReactNode;
1435
+ label: string;
1436
+ onClick: () => void;
1437
+ };
1438
+ type SpeedDialProps = {
1439
+ /** Actions revealed when the dial expands. */
1440
+ actions: SpeedDialAction[];
1441
+ /** Accessible name for the trigger button. */
1442
+ ariaLabel?: string;
1443
+ className?: string;
1444
+ /** Custom trigger icon. Defaults to a plus. */
1445
+ icon?: ReactNode;
1446
+ };
1447
+ declare function SpeedDial({ actions, ariaLabel, className, icon, }: SpeedDialProps): react.JSX.Element;
1448
+
1449
+ declare const positions: {
1450
+ readonly fixed: "fixed inset-x-0 top-0 z-40";
1451
+ readonly sticky: "sticky top-0 z-30";
1452
+ readonly static: "relative";
1453
+ };
1454
+ declare const tones: {
1455
+ readonly base: "border-[var(--color-border)] bg-[var(--color-bg-base)] text-[var(--color-fg-base)]";
1456
+ readonly subtle: "border-[var(--color-border-subtle)] bg-[var(--color-bg-subtle)] text-[var(--color-fg-base)]";
1457
+ readonly accent: "border-[var(--color-accent-hover)] bg-[var(--color-accent)] text-[var(--color-accent-contrast)]";
1458
+ };
1459
+ type AppBarProps = ComponentPropsWithoutRef<'header'> & {
1460
+ /** CSS positioning (e.g. static, sticky, fixed). */
1461
+ position?: keyof typeof positions;
1462
+ /** Background/foreground colour scheme. */
1463
+ tone?: keyof typeof tones;
1464
+ };
1465
+ declare function AppBar({ className, position, tone, ...props }: AppBarProps): react.JSX.Element;
1466
+ declare function AppBarTitle({ className, ...props }: ComponentPropsWithoutRef<'div'>): react.JSX.Element;
1467
+ declare function AppBarSection({ className, ...props }: ComponentPropsWithoutRef<'div'>): react.JSX.Element;
1468
+
1469
+ type PaginationProps = {
1470
+ /** Current 1-based page number. */
1471
+ page: number;
1472
+ /** Total number of pages. */
1473
+ totalPages: number;
1474
+ /** Called with the new page when the user navigates. */
1475
+ onPageChange: (page: number) => void;
1476
+ /** Page buttons shown either side of the current page. */
1477
+ siblingCount?: number;
1478
+ className?: string;
1479
+ };
1480
+ declare function Pagination({ page, totalPages, onPageChange, siblingCount, className, }: PaginationProps): react.JSX.Element | null;
1481
+
1482
+ declare const trackVariants: (props?: ({
1483
+ size?: "xs" | "sm" | "md" | "lg" | null | undefined;
1484
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1485
+ declare const fillVariants: (props?: ({
1486
+ variant?: "danger" | "success" | "warning" | "accent" | null | undefined;
1487
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1488
+ type ProgressProps = VariantProps<typeof trackVariants> & VariantProps<typeof fillVariants> & {
1489
+ /** Current progress value, from 0 to `max`. */
1490
+ value: number;
1491
+ /** Maximum value. Defaults to 100. */
1492
+ max?: number;
1493
+ /** Visible label rendered above the track. */
1494
+ label?: string;
1495
+ /** Accessible name when no visible `label` is provided. */
1496
+ ariaLabel?: string;
1497
+ /** Show the numeric percentage beside the label. */
1498
+ showValue?: boolean;
1499
+ className?: string;
1500
+ };
1501
+ declare function Progress({ value, max, size, variant, label, ariaLabel, showValue, className, }: ProgressProps): react.JSX.Element;
1502
+
1503
+ type CircularProgressProps = ComponentPropsWithoutRef<'div'> & {
1504
+ /** Current progress value, 0 to `max`. */
1505
+ value: number;
1506
+ /** Maximum value. Defaults to 100. */
1507
+ max?: number;
1508
+ /** Diameter in pixels. */
1509
+ size?: number;
1510
+ /** Ring stroke width in pixels. */
1511
+ thickness?: number;
1512
+ /** Accessible label / centre caption. */
1513
+ label?: string;
1514
+ };
1515
+ declare const CircularProgress: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
1516
+ /** Current progress value, 0 to `max`. */
1517
+ value: number;
1518
+ /** Maximum value. Defaults to 100. */
1519
+ max?: number;
1520
+ /** Diameter in pixels. */
1521
+ size?: number;
1522
+ /** Ring stroke width in pixels. */
1523
+ thickness?: number;
1524
+ /** Accessible label / centre caption. */
1525
+ label?: string;
1526
+ } & react.RefAttributes<HTMLDivElement>>;
1527
+
1528
+ type DescriptionItem = {
1529
+ term: string;
1530
+ detail?: ReactNode;
1531
+ description?: ReactNode;
1532
+ };
1533
+ type DescriptionListProps = ComponentPropsWithoutRef<'dl'> & {
1534
+ /** Term/description pairs to render. */
1535
+ items: DescriptionItem[];
1536
+ /** `stacked` puts the term above the value; `inline` puts them side by side. */
1537
+ layout?: 'stacked' | 'inline';
1538
+ };
1539
+ declare function DescriptionList({ items, layout, className, ...props }: DescriptionListProps): react.JSX.Element;
1540
+
1541
+ type PropertyListItem = {
1542
+ label: ReactNode;
1543
+ value: ReactNode;
1544
+ };
1545
+ type PropertyListProps = Omit<ComponentPropsWithoutRef<'dl'>, 'children'> & {
1546
+ /** Data-driven rows; alternative to passing `PropertyItem` children. */
1547
+ items?: PropertyListItem[];
1548
+ /** `PropertyItem` children; alternative to `items`. */
1549
+ children?: ReactNode;
1550
+ /** `horizontal` puts label and value side by side; `vertical` stacks them. */
1551
+ orientation?: 'horizontal' | 'vertical';
1552
+ /** Add dividing lines between rows. */
1553
+ divided?: boolean;
1554
+ /** Width of the label column when horizontal. */
1555
+ labelWidth?: string;
1556
+ };
1557
+ /**
1558
+ * Dense label/value rows for detail panels and settings summaries.
1559
+ * Domain-neutral — labels and values are caller-supplied nodes.
1560
+ */
1561
+ declare function PropertyList({ items, children, orientation, divided, labelWidth, className, ...props }: PropertyListProps): react.JSX.Element;
1562
+ type PropertyItemProps = {
1563
+ /** Row label. */
1564
+ label: ReactNode;
1565
+ /** Row value. */
1566
+ children: ReactNode;
1567
+ /** Layout of label vs value; inherited from the list by default. */
1568
+ orientation?: 'horizontal' | 'vertical';
1569
+ /** Width of the label column when horizontal. */
1570
+ labelWidth?: string;
1571
+ /** Draw a divider above the row. */
1572
+ divided?: boolean;
1573
+ className?: string;
1574
+ };
1575
+ declare function PropertyItem({ label, children, orientation, labelWidth, divided, className, }: PropertyItemProps): react.JSX.Element;
1576
+
1577
+ type MetadataItem = {
1578
+ label: ReactNode;
1579
+ value: ReactNode;
1580
+ icon?: ReactNode;
1581
+ /** When set, renders an inline copy button that copies this string. */
1582
+ copyValue?: string;
1583
+ };
1584
+ declare const columnClass: {
1585
+ readonly 1: "grid-cols-1";
1586
+ readonly 2: "grid-cols-1 sm:grid-cols-2";
1587
+ readonly 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
1588
+ };
1589
+ type MetadataListProps = {
1590
+ /** Key/value entries to render. */
1591
+ items: MetadataItem[];
1592
+ /** Number of grid columns. */
1593
+ columns?: keyof typeof columnClass;
1594
+ className?: string;
1595
+ };
1596
+ /**
1597
+ * Compact key/value metadata grid with muted labels, optional leading icons,
1598
+ * and per-item copy actions. Domain-neutral.
1599
+ */
1600
+ declare function MetadataList({ items, columns, className }: MetadataListProps): react.JSX.Element;
1601
+
1602
+ type StatusTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'accent';
1603
+ type StatusDotProps = ComponentPropsWithoutRef<'span'> & {
1604
+ /** Semantic colour of the dot. */
1605
+ tone?: StatusTone;
1606
+ /** Animate a pulsing ring to signal a live/active state. */
1607
+ pulse?: boolean;
1608
+ };
1609
+ declare function StatusDot({ tone, pulse, className, ...props }: StatusDotProps): react.JSX.Element;
1610
+ type StatusLabelProps = ComponentPropsWithoutRef<'span'> & {
1611
+ /** Semantic colour of the label and dot. */
1612
+ tone?: StatusTone;
1613
+ /** Leading icon; replaces the status dot when set. */
1614
+ icon?: ReactNode;
1615
+ /** Show a leading status dot. Ignored when `icon` is provided. */
1616
+ dot?: boolean;
1617
+ /** Animate a pulsing ring on the dot. */
1618
+ pulse?: boolean;
1619
+ /** `plain` is dot + text on the surface; `soft` wraps it in a tinted pill. */
1620
+ variant?: 'plain' | 'soft';
1621
+ };
1622
+ /**
1623
+ * Generic status text with a leading dot or icon. Tone is token-driven and
1624
+ * intentionally domain-neutral — callers supply the label text.
1625
+ */
1626
+ declare function StatusLabel({ tone, icon, dot, pulse, variant, className, children, ...props }: StatusLabelProps): react.JSX.Element;
1627
+
1628
+ type CopyFieldProps = {
1629
+ /** The exact string written to the clipboard. */
1630
+ value: string;
1631
+ /** Optional display override (e.g. masked or formatted). Defaults to `value`. */
1632
+ displayValue?: ReactNode;
1633
+ /** Field label rendered above the value. */
1634
+ label?: ReactNode;
1635
+ /** Truncate the displayed value with an ellipsis when it overflows. */
1636
+ truncate?: boolean;
1637
+ /** Render the value in a monospace font. */
1638
+ monospace?: boolean;
1639
+ /** Control size. Defaults to `'md'`. */
1640
+ size?: 'sm' | 'md';
1641
+ /** Accessible label for the copy button before copying. */
1642
+ copyLabel?: string;
1643
+ /** Accessible label/feedback shown right after copying. */
1644
+ copiedLabel?: string;
1645
+ /** Extra classes for the field wrapper. */
1646
+ className?: string;
1647
+ };
1648
+ /**
1649
+ * Read-only value with an inline copy action, truncation, and a hover tooltip
1650
+ * on the copy button. Transport-free — copies via the clipboard API only.
1651
+ */
1652
+ declare function CopyField({ value, displayValue, label, truncate, monospace, size, copyLabel, copiedLabel, className, }: CopyFieldProps): react.JSX.Element;
1653
+
1654
+ type MeterSegment = {
1655
+ value: number;
1656
+ tone?: StatusTone;
1657
+ label?: string;
1658
+ };
1659
+ type MeterProps = {
1660
+ /** Single-value fill. Ignored when `segments` is provided. */
1661
+ value?: number;
1662
+ /** Upper bound of the scale. Defaults to 100. */
1663
+ max?: number;
1664
+ /** Multiple stacked segments (e.g. storage by type). */
1665
+ segments?: MeterSegment[];
1666
+ /** Visible label above the track. */
1667
+ label?: ReactNode;
1668
+ /** Right-aligned value caption (e.g. "12 of 25 GB"). */
1669
+ valueLabel?: ReactNode;
1670
+ /** Semantic colour for the single-value fill. */
1671
+ tone?: StatusTone;
1672
+ /** Track thickness. */
1673
+ size?: 'sm' | 'md';
1674
+ /** Render a legend of segment labels below the track. */
1675
+ showLegend?: boolean;
1676
+ className?: string;
1677
+ /** Accessible name when no visible `label` is provided. */
1678
+ 'aria-label'?: string;
1679
+ };
1680
+ /**
1681
+ * Usage/quota meter for dashboards — single fill or stacked segments. Uses the
1682
+ * native `meter` ARIA role so assistive tech reads progress correctly.
1683
+ */
1684
+ declare function Meter({ value, max, segments, label, valueLabel, tone, size, showLegend, className, 'aria-label': ariaLabel, }: MeterProps): react.JSX.Element;
1685
+
1686
+ type StatCardProps = {
1687
+ /** Metric name shown above the value. */
1688
+ label: string;
1689
+ /** Primary metric value. */
1690
+ value: string | number;
1691
+ /** Percentage change; sign drives the up/down colour and arrow. */
1692
+ delta?: number;
1693
+ /** Caption beside the delta (e.g. "vs last month"). */
1694
+ deltaLabel?: string;
1695
+ /** Muted helper text under the value. */
1696
+ hint?: string;
1697
+ /** Leading icon. */
1698
+ icon?: ReactNode;
1699
+ /** Series rendered as an inline trend sparkline. */
1700
+ sparkline?: number[];
1701
+ className?: string;
1702
+ };
1703
+ declare function StatCard({ label, value, delta, deltaLabel, hint, icon, sparkline, className, }: StatCardProps): react.JSX.Element;
1704
+
1705
+ declare const Table: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>, "ref"> & react.RefAttributes<HTMLTableElement>>;
1706
+ declare const TableHeader: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & react.RefAttributes<HTMLTableSectionElement>>;
1707
+ declare const TableBody: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & react.RefAttributes<HTMLTableSectionElement>>;
1708
+ declare const TableFooter: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, "ref"> & react.RefAttributes<HTMLTableSectionElement>>;
1709
+ declare const TableRow: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>, "ref"> & react.RefAttributes<HTMLTableRowElement>>;
1710
+ declare const TableHead: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>, "ref"> & react.RefAttributes<HTMLTableCellElement>>;
1711
+ declare const TableCell: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>, "ref"> & react.RefAttributes<HTMLTableCellElement>>;
1712
+ declare const TableCaption: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & react.RefAttributes<HTMLTableCaptionElement>>;
1713
+
1714
+ type ListProps = ComponentPropsWithoutRef<'ul'> & {
1715
+ dense?: boolean;
1716
+ variant?: 'plain' | 'outlined' | 'soft';
1717
+ };
1718
+ declare const List: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & {
1719
+ dense?: boolean;
1720
+ variant?: "plain" | "outlined" | "soft";
1721
+ } & react.RefAttributes<HTMLUListElement>>;
1722
+ declare function ListItem({ className, ...props }: ComponentPropsWithoutRef<'li'>): react.JSX.Element;
1723
+ type ListItemButtonProps = ComponentPropsWithoutRef<'button'> & {
1724
+ selected?: boolean;
1725
+ };
1726
+ declare const ListItemButton: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
1727
+ selected?: boolean;
1728
+ } & react.RefAttributes<HTMLButtonElement>>;
1729
+ declare function ListItemDecorator({ className, ...props }: ComponentPropsWithoutRef<'span'>): react.JSX.Element;
1730
+ declare function ListItemContent({ children, className, description, title, ...props }: ComponentPropsWithoutRef<'div'> & {
1731
+ description?: ReactNode;
1732
+ title?: ReactNode;
1733
+ }): react.JSX.Element;
1734
+ declare function ListDivider({ className, ...props }: ComponentPropsWithoutRef<'li'>): react.JSX.Element;
1735
+ declare function ListSubheader({ className, ...props }: ComponentPropsWithoutRef<'li'>): react.JSX.Element;
1736
+
1737
+ type Datum = Record<string, string | number>;
1738
+ interface ChartSeries {
1739
+ dataKey: string;
1740
+ name?: string;
1741
+ color?: string;
1742
+ }
1743
+ interface CartesianChartProps {
1744
+ /** Row data; each object holds the x value and every series value. */
1745
+ data: Datum[];
1746
+ /** Key in each datum used for the x axis. */
1747
+ xKey: string;
1748
+ /** Series to plot, each mapping a data key to a label/colour. */
1749
+ series: ChartSeries[];
1750
+ /** Chart height in pixels. */
1751
+ height?: number;
1752
+ /** Show the series legend. */
1753
+ showLegend?: boolean;
1754
+ className?: string;
1755
+ }
1756
+ interface PieChartProps {
1757
+ /** Slice data. */
1758
+ data: Datum[];
1759
+ /** Key in each datum used for the slice label. */
1760
+ nameKey: string;
1761
+ /** Key in each datum used for the slice value. */
1762
+ valueKey: string;
1763
+ /** Chart height in pixels. */
1764
+ height?: number;
1765
+ /** Render as a donut (hollow centre) instead of a full pie. */
1766
+ donut?: boolean;
1767
+ className?: string;
1768
+ }
1769
+ interface RadarChartProps {
1770
+ /** Axis labels around the radar. */
1771
+ categories: string[];
1772
+ /** Series, each a value per category with an optional colour. */
1773
+ series: {
1774
+ name: string;
1775
+ data: number[];
1776
+ color?: string;
1777
+ }[];
1778
+ /** Chart height in pixels. */
1779
+ height?: number;
1780
+ className?: string;
1781
+ }
1782
+ interface GaugeChartProps {
1783
+ /** Current value to display. */
1784
+ value: number;
1785
+ /** Lower bound of the scale. Defaults to 0. */
1786
+ min?: number;
1787
+ /** Upper bound of the scale. Defaults to 100. */
1788
+ max?: number;
1789
+ /** Caption shown with the value. */
1790
+ label?: string;
1791
+ /** Fill colour of the gauge arc. */
1792
+ color?: string;
1793
+ /** Chart height in pixels. */
1794
+ height?: number;
1795
+ className?: string;
1796
+ }
1797
+ interface HeatmapChartProps {
1798
+ /** Cells as [xIndex, yIndex, value] tuples. */
1799
+ data: [number, number, number][];
1800
+ /** Column labels along the x axis. */
1801
+ xLabels: string[];
1802
+ /** Row labels along the y axis. */
1803
+ yLabels: string[];
1804
+ /** Chart height in pixels. */
1805
+ height?: number;
1806
+ className?: string;
1807
+ }
1808
+ interface ScatterChartProps {
1809
+ /** Points, each with x/y and optional name and bubble size. */
1810
+ data: {
1811
+ x: number;
1812
+ y: number;
1813
+ name?: string;
1814
+ size?: number;
1815
+ }[];
1816
+ /** Axis title for x. */
1817
+ xLabel?: string;
1818
+ /** Axis title for y. */
1819
+ yLabel?: string;
1820
+ /** Chart height in pixels. */
1821
+ height?: number;
1822
+ className?: string;
1823
+ }
1824
+ interface FunnelChartProps {
1825
+ /** Stages from widest to narrowest. */
1826
+ data: {
1827
+ name: string;
1828
+ value: number;
1829
+ }[];
1830
+ /** Chart height in pixels. */
1831
+ height?: number;
1832
+ className?: string;
1833
+ }
1834
+ interface TreemapChartProps {
1835
+ /** Hierarchical nodes; size is proportional to `value`. */
1836
+ data: {
1837
+ name: string;
1838
+ value: number;
1839
+ children?: TreemapNode[];
1840
+ }[];
1841
+ /** Chart height in pixels. */
1842
+ height?: number;
1843
+ className?: string;
1844
+ }
1845
+ interface TreemapNode {
1846
+ name: string;
1847
+ value: number;
1848
+ children?: TreemapNode[];
1849
+ }
1850
+ interface WaterfallChartProps {
1851
+ /** Steps; `type` controls running-total vs delta rendering. */
1852
+ data: {
1853
+ name: string;
1854
+ value: number;
1855
+ type?: 'increase' | 'decrease' | 'total';
1856
+ }[];
1857
+ /** Chart height in pixels. */
1858
+ height?: number;
1859
+ className?: string;
1860
+ }
1861
+ declare function LineChart({ data, xKey, series, height, showLegend, className, }: CartesianChartProps): react.JSX.Element;
1862
+ declare function BarChart({ data, xKey, series, height, showLegend, className, }: CartesianChartProps): react.JSX.Element;
1863
+ declare function AreaChart({ data, xKey, series, height, showLegend, className, }: CartesianChartProps): react.JSX.Element;
1864
+ declare function StackedBarChart({ data, xKey, series, height, showLegend, className, }: CartesianChartProps): react.JSX.Element;
1865
+ declare function PieChart({ data, nameKey, valueKey, height, donut, className, }: PieChartProps): react.JSX.Element;
1866
+ declare function DonutChart(props: Omit<PieChartProps, 'donut'>): react.JSX.Element;
1867
+ declare function RadarChart({ categories, series, height, className }: RadarChartProps): react.JSX.Element;
1868
+ declare function GaugeChart({ value, min, max, label, color, height, className, }: GaugeChartProps): react.JSX.Element;
1869
+ declare function HeatmapChart({ data, xLabels, yLabels, height, className, }: HeatmapChartProps): react.JSX.Element;
1870
+ declare function ScatterChart({ data, xLabel, yLabel, height, className }: ScatterChartProps): react.JSX.Element;
1871
+ declare function FunnelChart({ data, height, className }: FunnelChartProps): react.JSX.Element;
1872
+ declare function TreemapChart({ data, height, className }: TreemapChartProps): react.JSX.Element;
1873
+ declare function WaterfallChart({ data, height, className }: WaterfallChartProps): react.JSX.Element;
1874
+ interface SankeyChartProps {
1875
+ /** Named nodes referenced by links. */
1876
+ nodes: {
1877
+ name: string;
1878
+ }[];
1879
+ /** Flows between nodes, weighted by `value`. */
1880
+ links: {
1881
+ source: string;
1882
+ target: string;
1883
+ value: number;
1884
+ }[];
1885
+ /** Chart height in pixels. */
1886
+ height?: number;
1887
+ className?: string;
1888
+ }
1889
+ declare function SankeyChart({ nodes, links, height, className }: SankeyChartProps): react.JSX.Element;
1890
+ interface CandlestickDatum {
1891
+ date: string;
1892
+ open: number;
1893
+ close: number;
1894
+ low: number;
1895
+ high: number;
1896
+ volume?: number;
1897
+ }
1898
+ interface CandlestickChartProps {
1899
+ /** OHLC data points. */
1900
+ data: CandlestickDatum[];
1901
+ /** Chart height in pixels. */
1902
+ height?: number;
1903
+ /** Render a volume sub-chart below the candles. */
1904
+ showVolume?: boolean;
1905
+ /** Show the zoom/pan data slider. */
1906
+ showZoom?: boolean;
1907
+ className?: string;
1908
+ }
1909
+ declare function CandlestickChart({ data, height, showVolume, showZoom, className, }: CandlestickChartProps): react.JSX.Element;
1910
+
1911
+ type CalendarEvent = Event & {
1912
+ id?: string;
1913
+ };
1914
+ type CalendarProps = Omit<CalendarProps$1<CalendarEvent>, 'localizer'> & {
1915
+ className?: string;
1916
+ };
1917
+ declare function Calendar({ className, style, ...props }: CalendarProps): react.JSX.Element;
1918
+
1919
+ type CopyButtonProps = Omit<ButtonProps, 'onClick'> & {
1920
+ /** String written to the clipboard on click. */
1921
+ value: string;
1922
+ /** Label shown briefly after a successful copy. */
1923
+ copiedLabel?: string;
1924
+ /** Default button label. */
1925
+ copyLabel?: string;
1926
+ };
1927
+ declare function CopyButton({ value, copiedLabel, copyLabel, children, ...props }: CopyButtonProps): react.JSX.Element;
1928
+
1929
+ type CodeBlockProps = {
1930
+ /** Source code to render. */
1931
+ code: string;
1932
+ /** Language for syntax highlighting (e.g. "ts", "bash"). */
1933
+ language?: string;
1934
+ /** Show a line-number gutter. */
1935
+ showLineNumbers?: boolean;
1936
+ /** Show a copy-to-clipboard button. */
1937
+ showCopy?: boolean;
1938
+ /** Max height in pixels before the block scrolls. */
1939
+ maxHeight?: number;
1940
+ };
1941
+ declare function CodeBlock({ code, language, showLineNumbers, showCopy, maxHeight, }: CodeBlockProps): react.JSX.Element;
1942
+
1943
+ type ToolbarProps = {
1944
+ /** Control groups; each inner array renders as a divided cluster. */
1945
+ groups: ReactNode[][];
1946
+ /** Actions collapsed into an overflow menu. */
1947
+ overflow?: DropdownSection[];
1948
+ };
1949
+ declare function Toolbar({ groups, overflow }: ToolbarProps): react.JSX.Element;
1950
+
1951
+ type ResizablePanelsProps = {
1952
+ direction: 'horizontal' | 'vertical';
1953
+ children: ReactNode;
1954
+ autoSaveId?: string;
1955
+ className?: string;
1956
+ };
1957
+ declare function ResizablePanels({ direction, children, autoSaveId, className, }: ResizablePanelsProps): react.JSX.Element;
1958
+ declare function PanelHandle(props: ComponentProps<typeof Separator$1>): react.JSX.Element;
1959
+ type PanelProps = ComponentProps<typeof Panel$1> & {
1960
+ scroll?: 'auto' | 'hidden' | 'x' | 'y';
1961
+ };
1962
+ declare function Panel({ className, scroll, style, ...props }: PanelProps): react.JSX.Element;
1963
+
1964
+ type DiffViewerProps = {
1965
+ oldValue: string;
1966
+ newValue: string;
1967
+ };
1968
+ declare function DiffViewer({ oldValue, newValue }: DiffViewerProps): react.JSX.Element;
1969
+
1970
+ type CountdownTimerProps = {
1971
+ target: Date;
1972
+ doneLabel?: string;
1973
+ };
1974
+ declare function CountdownTimer({ target, doneLabel }: CountdownTimerProps): react.JSX.Element;
1975
+
1976
+ type MarqueeProps = {
1977
+ children: ReactNode;
1978
+ speedSeconds?: number;
1979
+ className?: string;
1980
+ };
1981
+ declare function Marquee({ children, speedSeconds, className }: MarqueeProps): react.JSX.Element;
1982
+
1983
+ interface JSONViewerProps {
1984
+ /** The value to render as an interactive JSON tree. */
1985
+ value: unknown;
1986
+ /** Expand all nodes on first render. */
1987
+ defaultExpanded?: boolean;
1988
+ /** Extra classes for the viewer container. */
1989
+ className?: string;
1990
+ }
1991
+ declare function JSONViewer({ value, defaultExpanded, className }: JSONViewerProps): react.JSX.Element;
1992
+
1993
+ interface ActivityFeedItem {
1994
+ id: string;
1995
+ actor: string;
1996
+ action: ReactNode;
1997
+ timestamp: ReactNode;
1998
+ target?: ReactNode;
1999
+ avatarUrl?: string;
2000
+ }
2001
+ interface ActivityFeedProps {
2002
+ /** Feed entries in chronological order. */
2003
+ items: ActivityFeedItem[];
2004
+ /** Content shown when there are no items. */
2005
+ empty?: ReactNode;
2006
+ className?: string;
2007
+ }
2008
+ declare function ActivityFeed({ items, empty, className }: ActivityFeedProps): react.JSX.Element;
2009
+
2010
+ interface OrgChartNode {
2011
+ id: string;
2012
+ label: ReactNode;
2013
+ description?: ReactNode;
2014
+ children?: OrgChartNode[];
2015
+ }
2016
+ interface OrgChartProps {
2017
+ node: OrgChartNode;
2018
+ className?: string;
2019
+ }
2020
+ declare function OrgChart({ node, className }: OrgChartProps): react.JSX.Element;
2021
+
2022
+ interface GanttItem {
2023
+ id: string;
2024
+ label: string;
2025
+ start: Date;
2026
+ end: Date;
2027
+ color?: string;
2028
+ }
2029
+ interface GanttChartProps {
2030
+ items: GanttItem[];
2031
+ className?: string;
2032
+ }
2033
+ declare function GanttChart({ items, className }: GanttChartProps): react.JSX.Element;
2034
+
2035
+ interface MapMarker {
2036
+ id: string;
2037
+ label: string;
2038
+ x: number;
2039
+ y: number;
2040
+ }
2041
+ interface MapProps {
2042
+ /** Pins to render on the map. */
2043
+ markers?: MapMarker[];
2044
+ /** Map height in px. */
2045
+ height?: number;
2046
+ /** Extra classes for the map container. */
2047
+ className?: string;
2048
+ }
2049
+ declare function Map({ markers, height, className }: MapProps): react.JSX.Element;
2050
+
2051
+ declare const paperVariants: (props?: ({
2052
+ elevation?: 0 | 1 | 2 | 3 | null | undefined;
2053
+ variant?: "subtle" | "outlined" | "elevated" | null | undefined;
2054
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
2055
+ type PaperProps = ComponentPropsWithoutRef<'div'> & VariantProps<typeof paperVariants>;
2056
+ declare function Paper({ className, elevation, variant, ...props }: PaperProps): react.JSX.Element;
2057
+
2058
+ type SpotlightCardProps = ComponentPropsWithoutRef<'div'> & {
2059
+ /** Glow color. Defaults to the accent token. */
2060
+ glowColor?: string;
2061
+ /** Glow radius in pixels. */
2062
+ radius?: number;
2063
+ /** Peak glow opacity (0–1). */
2064
+ intensity?: number;
2065
+ };
2066
+ /**
2067
+ * Surface with a radial glow that follows the cursor — the signature premium
2068
+ * hover used by Linear/Vercel-style dashboards. Pointer-driven only, so it adds
2069
+ * no ambient motion.
2070
+ */
2071
+ declare function SpotlightCard({ glowColor, radius, intensity, className, style, children, onPointerMove, onPointerEnter, onPointerLeave, ...props }: SpotlightCardProps): react.JSX.Element;
2072
+
2073
+ type BorderBeamProps = ComponentPropsWithoutRef<'div'> & {
2074
+ /** Beam thickness in pixels. */
2075
+ size?: number;
2076
+ /** Full rotation duration in seconds. */
2077
+ duration?: number;
2078
+ /** Beam color. Defaults to the accent token. */
2079
+ color?: string;
2080
+ };
2081
+ /**
2082
+ * Surface with a light that travels around its border — a premium accent for
2083
+ * upsell cards, active states, and hero panels. The beam is purely decorative
2084
+ * and pauses under `prefers-reduced-motion`.
2085
+ */
2086
+ declare function BorderBeam({ size, duration, color, className, style, children, ...props }: BorderBeamProps): react.JSX.Element;
2087
+
2088
+ declare const gridColumns: {
2089
+ readonly 2: "sm:grid-cols-2";
2090
+ readonly 3: "sm:grid-cols-2 lg:grid-cols-3";
2091
+ readonly 4: "sm:grid-cols-2 lg:grid-cols-4";
2092
+ readonly 6: "sm:grid-cols-3 lg:grid-cols-6";
2093
+ };
2094
+ type BentoGridProps = ComponentPropsWithoutRef<'div'> & {
2095
+ columns?: keyof typeof gridColumns;
2096
+ };
2097
+ /**
2098
+ * Asymmetric "bento" grid for premium dashboard and marketing layouts. Cells
2099
+ * declare their own span via {@link BentoCard}.
2100
+ */
2101
+ declare function BentoGrid({ columns, className, children, ...props }: BentoGridProps): react.JSX.Element;
2102
+ declare const colSpan: {
2103
+ readonly 1: "sm:col-span-1";
2104
+ readonly 2: "sm:col-span-2";
2105
+ readonly 3: "sm:col-span-3";
2106
+ readonly 4: "sm:col-span-4";
2107
+ };
2108
+ declare const rowSpan: {
2109
+ readonly 1: "row-span-1";
2110
+ readonly 2: "row-span-2";
2111
+ readonly 3: "row-span-3";
2112
+ };
2113
+ type BentoCardProps = ComponentPropsWithoutRef<'div'> & {
2114
+ colSpan?: keyof typeof colSpan;
2115
+ rowSpan?: keyof typeof rowSpan;
2116
+ /** Subtle lift + accent border on hover. */
2117
+ interactive?: boolean;
2118
+ };
2119
+ declare function BentoCard({ colSpan: col, rowSpan: row, interactive, className, children, ...props }: BentoCardProps): react.JSX.Element;
2120
+
2121
+ type RippleProps = ComponentPropsWithoutRef<'span'> & {
2122
+ /** Ripple color. Defaults to a translucent current-color tint. */
2123
+ color?: string;
2124
+ disabled?: boolean;
2125
+ };
2126
+ /**
2127
+ * Wraps interactive content with a material-style click ripple. Decorative and
2128
+ * skipped under `prefers-reduced-motion`. Keep it around buttons, list rows, or
2129
+ * any pressable surface.
2130
+ */
2131
+ declare function Ripple({ color, disabled, className, children, onPointerDown, ...props }: RippleProps): react.JSX.Element;
2132
+
2133
+ type TiltProps = ComponentPropsWithoutRef<'div'> & {
2134
+ /** Maximum tilt in degrees. */
2135
+ max?: number;
2136
+ /** Scale applied while hovering. */
2137
+ scale?: number;
2138
+ };
2139
+ /**
2140
+ * 3D pointer-tilt surface for premium feature and pricing cards. Tilt follows
2141
+ * the cursor and resets on leave. Disabled under `prefers-reduced-motion`.
2142
+ */
2143
+ declare function Tilt({ max, scale, className, style, children, onPointerMove, onPointerLeave, ...props }: TiltProps): react.JSX.Element;
2144
+
2145
+ type Crumb = {
2146
+ label: string;
2147
+ href?: string;
2148
+ };
2149
+ type PageHeaderProps = {
2150
+ /** Page title shown as the heading. */
2151
+ title: string;
2152
+ /** Supporting text below the title. */
2153
+ description?: string;
2154
+ /** Breadcrumb trail rendered above the title. */
2155
+ breadcrumbs?: Crumb[];
2156
+ /** Action controls pinned to the right of the header. */
2157
+ actions?: ReactNode;
2158
+ /** Extra classes for the header container. */
2159
+ className?: string;
2160
+ };
2161
+ declare function PageHeader({ title, description, breadcrumbs, actions, className, }: PageHeaderProps): react.JSX.Element;
2162
+
2163
+ type PageBodyProps = {
2164
+ children: ReactNode;
2165
+ className?: string;
2166
+ };
2167
+ declare function PageBody({ children, className }: PageBodyProps): react.JSX.Element;
2168
+
2169
+ type PageSectionProps = {
2170
+ title?: string;
2171
+ description?: string;
2172
+ actions?: ReactNode;
2173
+ children: ReactNode;
2174
+ className?: string;
2175
+ };
2176
+ declare function PageSection({ title, description, actions, children, className, }: PageSectionProps): react.JSX.Element;
2177
+
2178
+ type BoxProps = ComponentPropsWithoutRef<'div'> & {
2179
+ as?: ElementType;
2180
+ };
2181
+ declare function Box({ as: Component, className, ...props }: BoxProps): react.JSX.Element;
2182
+ declare const containerSizes: {
2183
+ readonly sm: "max-w-screen-sm";
2184
+ readonly md: "max-w-screen-md";
2185
+ readonly lg: "max-w-screen-lg";
2186
+ readonly xl: "max-w-screen-xl";
2187
+ readonly '2xl': "max-w-screen-2xl";
2188
+ readonly full: "max-w-none";
2189
+ };
2190
+ type ContainerProps = ComponentPropsWithoutRef<'div'> & {
2191
+ size?: keyof typeof containerSizes;
2192
+ };
2193
+ declare function Container({ className, size, ...props }: ContainerProps): react.JSX.Element;
2194
+ declare const stackDirections: {
2195
+ readonly row: "flex-row";
2196
+ readonly column: "flex-col";
2197
+ };
2198
+ declare const stackAlign: {
2199
+ readonly start: "items-start";
2200
+ readonly center: "items-center";
2201
+ readonly end: "items-end";
2202
+ readonly stretch: "items-stretch";
2203
+ readonly baseline: "items-baseline";
2204
+ };
2205
+ declare const stackJustify: {
2206
+ readonly start: "justify-start";
2207
+ readonly center: "justify-center";
2208
+ readonly end: "justify-end";
2209
+ readonly between: "justify-between";
2210
+ readonly around: "justify-around";
2211
+ readonly evenly: "justify-evenly";
2212
+ };
2213
+ declare const stackGaps: {
2214
+ readonly 0: "gap-0";
2215
+ readonly 1: "gap-1";
2216
+ readonly 2: "gap-2";
2217
+ readonly 3: "gap-3";
2218
+ readonly 4: "gap-4";
2219
+ readonly 5: "gap-5";
2220
+ readonly 6: "gap-6";
2221
+ readonly 8: "gap-8";
2222
+ };
2223
+ type StackProps = ComponentPropsWithoutRef<'div'> & {
2224
+ /** Cross-axis alignment of children. Defaults to `'stretch'`. */
2225
+ align?: keyof typeof stackAlign;
2226
+ /** Flex direction of the stack. Defaults to `'column'`. */
2227
+ direction?: keyof typeof stackDirections;
2228
+ /** Element rendered between each child as a separator. */
2229
+ divider?: ReactNode;
2230
+ /** Spacing scale between children. Defaults to `3`. */
2231
+ gap?: keyof typeof stackGaps;
2232
+ /** Main-axis distribution of children. Defaults to `'start'`. */
2233
+ justify?: keyof typeof stackJustify;
2234
+ /** Allow children to wrap onto multiple lines. */
2235
+ wrap?: boolean;
2236
+ };
2237
+ declare function Stack({ align, children, className, direction, divider, gap, justify, wrap, ...props }: StackProps): react.JSX.Element;
2238
+ type GridProps = ComponentPropsWithoutRef<'div'> & {
2239
+ /** Fixed column count; ignored when `minChildWidth` is set. */
2240
+ columns?: number;
2241
+ /** Spacing scale between grid cells. */
2242
+ gap?: keyof typeof stackGaps;
2243
+ /** Min cell width (px) for an auto-responsive grid. Overrides `columns`. */
2244
+ minChildWidth?: number;
2245
+ };
2246
+ declare function Grid({ className, columns, gap, minChildWidth, style, ...props }: GridProps): react.JSX.Element;
2247
+
2248
+ type EmptyStateProps = {
2249
+ /** Illustrative leading icon. */
2250
+ icon?: ReactNode;
2251
+ /** Headline describing the empty condition. */
2252
+ title: string;
2253
+ /** Supporting text under the title. */
2254
+ description?: string;
2255
+ /** Primary call-to-action (e.g. a button). */
2256
+ action?: ReactNode;
2257
+ /** Overall scale of the block. */
2258
+ size?: 'sm' | 'md' | 'lg';
2259
+ className?: string;
2260
+ };
2261
+ declare function EmptyState({ icon, title, description, action, size, className, }: EmptyStateProps): react.JSX.Element;
2262
+
2263
+ type ErrorStateProps = {
2264
+ title?: string;
2265
+ message?: string;
2266
+ retry?: ReactNode;
2267
+ className?: string;
2268
+ };
2269
+ declare function ErrorState({ title, message, retry, className, }: ErrorStateProps): react.JSX.Element;
2270
+
2271
+ type LoadingStateProps = {
2272
+ label?: string;
2273
+ className?: string;
2274
+ };
2275
+ declare function LoadingState({ label, className }: LoadingStateProps): react.JSX.Element;
2276
+ type SkeletonRowProps = {
2277
+ rows?: number;
2278
+ className?: string;
2279
+ };
2280
+ declare function SkeletonRow({ rows, className }: SkeletonRowProps): react.JSX.Element;
2281
+
2282
+ type ModalProps = {
2283
+ /** Dialog body content. */
2284
+ children: ReactNode;
2285
+ className?: string;
2286
+ /** Supporting text rendered under the title. */
2287
+ description?: ReactNode;
2288
+ /** Called when the user dismisses the modal (overlay click, Esc, close button). */
2289
+ onClose: () => void;
2290
+ /** Whether the modal is visible. */
2291
+ open: boolean;
2292
+ /** Heading shown at the top of the dialog. */
2293
+ title?: ReactNode;
2294
+ };
2295
+ declare function Modal({ children, className, description, onClose, open, title }: ModalProps): react.JSX.Element | null;
2296
+
2297
+ type DrawerProps = {
2298
+ /** Whether the drawer is open (controlled). */
2299
+ open: boolean;
2300
+ /** Called when the drawer requests to close (backdrop, escape, close button). */
2301
+ onClose: () => void;
2302
+ /** Drawer heading. */
2303
+ title: string;
2304
+ /** Optional supporting text below the title. */
2305
+ description?: string;
2306
+ /** Drawer body content. */
2307
+ children: ReactNode;
2308
+ /** Panel width preset. Defaults to `'md'`. */
2309
+ width?: 'sm' | 'md' | 'lg';
2310
+ };
2311
+ declare function Drawer({ open, onClose, title, description, children, width }: DrawerProps): react.JSX.Element;
2312
+
2313
+ type SheetProps = {
2314
+ open: boolean;
2315
+ onClose: () => void;
2316
+ title: string;
2317
+ children: ReactNode;
2318
+ };
2319
+ declare function Sheet({ open, onClose, title, children }: SheetProps): react.JSX.Element;
2320
+
2321
+ type ConfirmDialogProps = {
2322
+ /** Whether the dialog is visible (controlled). */
2323
+ open: boolean;
2324
+ /** Called when the dialog is dismissed or cancelled. */
2325
+ onClose: () => void;
2326
+ /** Called when the user confirms the action. */
2327
+ onConfirm: () => void;
2328
+ /** Dialog heading. */
2329
+ title: string;
2330
+ /** Body text explaining the consequence of confirming. */
2331
+ description: string;
2332
+ /** Label for the confirm button. Defaults to `'Confirm'`. */
2333
+ confirmLabel?: string;
2334
+ /** Label for the cancel button. Defaults to `'Cancel'`. */
2335
+ cancelLabel?: string;
2336
+ /** When set, user must type this value to enable the confirm button. */
2337
+ typeToConfirm?: string;
2338
+ /** Styles the confirm button as a destructive action. */
2339
+ destructive?: boolean;
2340
+ };
2341
+ declare function ConfirmDialog({ open, onClose, onConfirm, title, description, confirmLabel, cancelLabel, typeToConfirm, destructive, }: ConfirmDialogProps): react.JSX.Element;
2342
+
2343
+ type UseDialogControlsOptions = {
2344
+ defaultOpen?: boolean;
2345
+ onOpen?: () => void;
2346
+ onClose?: () => void;
2347
+ };
2348
+ declare function useDialogControls(options?: UseDialogControlsOptions): {
2349
+ dialogProps: {
2350
+ onClose: () => void;
2351
+ open: boolean;
2352
+ };
2353
+ triggerProps: {
2354
+ 'aria-expanded': boolean;
2355
+ onClick: () => void;
2356
+ type: "button";
2357
+ };
2358
+ isOpen: boolean;
2359
+ open: () => void;
2360
+ close: () => void;
2361
+ toggle: () => void;
2362
+ };
2363
+
2364
+ type ExportColumn<T> = {
2365
+ key: keyof T & string;
2366
+ header?: string;
2367
+ value?: (row: T) => unknown;
2368
+ format?: (value: unknown, row: T) => string;
2369
+ };
2370
+
2371
+ type FilterFieldType = 'string' | 'number' | 'date' | 'enum' | 'boolean';
2372
+ type FilterOperator = 'eq' | 'neq' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'in' | 'notIn' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'before' | 'after' | 'relative' | 'is' | 'isEmpty' | 'isNotEmpty';
2373
+ type FilterFieldOption = {
2374
+ label: string;
2375
+ value: string | number;
2376
+ };
2377
+ type FilterFieldDef<TRow = unknown> = {
2378
+ id: string;
2379
+ label: string;
2380
+ type: FilterFieldType;
2381
+ accessor?: (row: TRow) => unknown;
2382
+ options?: FilterFieldOption[];
2383
+ operators?: FilterOperator[];
2384
+ format?: (v: unknown) => string;
2385
+ };
2386
+ type FilterCondition = {
2387
+ id: string;
2388
+ field: string;
2389
+ op: FilterOperator;
2390
+ value: unknown;
2391
+ };
2392
+ type FilterCombinator = 'AND' | 'OR';
2393
+ type FilterGroup = {
2394
+ id: string;
2395
+ combinator: FilterCombinator;
2396
+ conditions: Array<FilterCondition | FilterGroup>;
2397
+ };
2398
+ type FilterState = {
2399
+ root: FilterGroup;
2400
+ };
2401
+ type FilterMode = 'client' | 'server';
2402
+ type FilterDialect = 'rest' | 'rsql' | 'graphql-where';
2403
+ type SavedView = {
2404
+ id: string;
2405
+ name: string;
2406
+ state: FilterState;
2407
+ pinned?: boolean;
2408
+ createdAt: string;
2409
+ };
2410
+
2411
+ type ExportFormat = 'csv' | 'xlsx' | 'json' | 'pdf';
2412
+ type ExportToolbarProps<T extends object> = {
2413
+ /** Rows to export. */
2414
+ data: T[];
2415
+ /** Base filename (without extension) for the downloaded file. */
2416
+ filename: string;
2417
+ /** Export formats to offer (e.g. CSV, JSON). */
2418
+ formats: ExportFormat[];
2419
+ /** Column definitions controlling which fields and headers are exported. */
2420
+ columns: ExportColumn<T>[];
2421
+ };
2422
+ declare function ExportToolbar<T extends object>({ data, filename, formats, columns, }: ExportToolbarProps<T>): react.JSX.Element;
2423
+
2424
+ type DataTableFilters<TData extends object> = {
2425
+ fields: FilterFieldDef<TData>[];
2426
+ mode: FilterMode;
2427
+ urlKey?: string;
2428
+ dialect?: FilterDialect;
2429
+ onServerQueryChange?: (params: URLSearchParams) => void;
2430
+ };
2431
+ type DataTableProps<TData extends object> = {
2432
+ /** Row data. */
2433
+ data: TData[];
2434
+ /** TanStack Table column definitions. */
2435
+ columns: ColumnDef<TData, unknown>[];
2436
+ /** Show a loading skeleton instead of rows. */
2437
+ isLoading?: boolean;
2438
+ /** Heading for the empty state. */
2439
+ emptyTitle?: string;
2440
+ /** Description for the empty state. */
2441
+ emptyDescription?: string | undefined;
2442
+ /** Row height/padding density. */
2443
+ density?: 'comfortable' | 'compact';
2444
+ /** When set, table renders a checkbox column and reports row selection. */
2445
+ enableRowSelection?: boolean;
2446
+ /** Called with the selected rows when selection changes. */
2447
+ onRowSelectionChange?: (rows: TData[]) => void;
2448
+ /** Called when a row is clicked. */
2449
+ onRowClick?: (row: TData) => void;
2450
+ /** Controlled global search term. */
2451
+ globalFilter?: string;
2452
+ /** Rows per page; enables pagination when set. */
2453
+ pageSize?: number;
2454
+ /** Custom toolbar rendered above the table. */
2455
+ toolbar?: ReactNode;
2456
+ exportable?: {
2457
+ columns?: ExportColumn<TData>[];
2458
+ filename?: string;
2459
+ formats?: ExportFormat[];
2460
+ scope?: 'visible' | 'all' | 'selected';
2461
+ };
2462
+ filters?: DataTableFilters<TData>;
2463
+ className?: string;
2464
+ };
2465
+ declare function DataTable<TData extends object>(props: DataTableProps<TData>): react.JSX.Element;
2466
+
2467
+ /**
2468
+ * Tiny CSV exporter — no third-party dep.
2469
+ */
2470
+ declare function toCsv<T extends object>(rows: T[], columns: ExportColumn<T>[] | (keyof T & string)[]): string;
2471
+ declare function downloadCsv(filename: string, csv: string): void;
2472
+
2473
+ type TableToolbarProps = {
2474
+ /** Built-in search box config; omit to hide the search input. */
2475
+ search?: {
2476
+ value: string;
2477
+ onChange: (value: string) => void;
2478
+ placeholder?: string;
2479
+ };
2480
+ /** Filter controls rendered in the toolbar's filter slot. */
2481
+ filters?: ReactNode;
2482
+ /** Bulk-action controls shown when rows are selected. */
2483
+ bulkActions?: ReactNode;
2484
+ /** Column visibility toggle control. */
2485
+ columnsToggle?: ReactNode;
2486
+ /** Arbitrary content pinned to the right edge of the toolbar. */
2487
+ rightSlot?: ReactNode;
2488
+ };
2489
+ declare function TableToolbar({ search, filters, bulkActions, columnsToggle, rightSlot, }: TableToolbarProps): react.JSX.Element;
2490
+
2491
+ type UseFiltersOptions<TRow> = {
2492
+ fields: FilterFieldDef<TRow>[];
2493
+ mode: FilterMode;
2494
+ defaultState?: FilterState;
2495
+ urlKey?: string;
2496
+ dialect?: FilterDialect;
2497
+ onChange?: (state: FilterState) => void;
2498
+ };
2499
+ type FilterChip = {
2500
+ id: string;
2501
+ label: string;
2502
+ onRemove: () => void;
2503
+ };
2504
+ type UseFiltersReturn<TRow> = {
2505
+ state: FilterState;
2506
+ setState: (next: FilterState | ((prev: FilterState) => FilterState)) => void;
2507
+ addCondition: (field: string) => void;
2508
+ updateCondition: (id: string, patch: Partial<Omit<FilterCondition, 'id'>>) => void;
2509
+ removeCondition: (id: string) => void;
2510
+ clear: () => void;
2511
+ predicate: (row: TRow) => boolean;
2512
+ filter: (rows: TRow[]) => TRow[];
2513
+ queryParams: URLSearchParams;
2514
+ queryString: string;
2515
+ chips: FilterChip[];
2516
+ activeCount: number;
2517
+ encodedUrl: string;
2518
+ fields: FilterFieldDef<TRow>[];
2519
+ mode: FilterMode;
2520
+ };
2521
+ declare function useFilters<TRow>(opts: UseFiltersOptions<TRow>): UseFiltersReturn<TRow>;
2522
+
2523
+ type FiltersProviderProps<TRow> = {
2524
+ value: UseFiltersReturn<TRow>;
2525
+ children: ReactNode;
2526
+ };
2527
+ declare function FiltersProvider<TRow>({ value, children }: FiltersProviderProps<TRow>): react.JSX.Element;
2528
+ declare function useFiltersContext<TRow = unknown>(): UseFiltersReturn<TRow>;
2529
+ declare function useOptionalFiltersContext<TRow = unknown>(): UseFiltersReturn<TRow> | null;
2530
+
2531
+ type FilterBarProps = {
2532
+ /** Extra classes for the filter bar container. */
2533
+ className?: string;
2534
+ /** Saved-views control rendered in the bar. */
2535
+ savedViews?: ReactNode;
2536
+ /** Label for the add-filter control. */
2537
+ addLabel?: string;
2538
+ /** Label for the clear-filters control. */
2539
+ clearLabel?: string;
2540
+ };
2541
+ declare function FilterBar({ className, savedViews, addLabel, clearLabel, }: FilterBarProps): react.JSX.Element;
2542
+
2543
+ type FilterBuilderProps<TRow = unknown> = {
2544
+ /** The single filter condition being edited. */
2545
+ condition: FilterCondition;
2546
+ /** Available fields the condition can target, with their operators/types. */
2547
+ fields: FilterFieldDef<TRow>[];
2548
+ /** Called with the condition id and a partial patch when any part changes. */
2549
+ onChange: (id: string, patch: Partial<Omit<FilterCondition, 'id'>>) => void;
2550
+ /** Called with the condition id when the user removes it. */
2551
+ onRemove: (id: string) => void;
2552
+ };
2553
+ declare const defaultValueForOperator: <TRow>(op: FilterOperator, field?: FilterFieldDef<TRow>) => unknown;
2554
+ declare function FilterBuilder<TRow = unknown>({ condition, fields, onChange, onRemove, }: FilterBuilderProps<TRow>): react.JSX.Element | null;
2555
+
2556
+ type FilterGroupEditorProps<TRow = unknown> = {
2557
+ fields?: FilterFieldDef<TRow>[];
2558
+ maxDepth?: number;
2559
+ };
2560
+
2561
+ declare function FilterGroupEditor(props: FilterGroupEditorProps): react.JSX.Element;
2562
+
2563
+ type FilterPopoverProps = {
2564
+ /** Trigger button label. */
2565
+ label: string;
2566
+ /** Number of active filters; shown as a badge on the trigger. */
2567
+ activeCount?: number;
2568
+ /** Called when the apply button is pressed. */
2569
+ onApply?: () => void;
2570
+ /** Called when the clear button is pressed. */
2571
+ onClear?: () => void;
2572
+ /** Filter controls rendered inside the popover. */
2573
+ children: ReactNode;
2574
+ /** Leading icon on the trigger. */
2575
+ icon?: ReactNode;
2576
+ /** Label for the apply button. */
2577
+ applyLabel?: string;
2578
+ /** Label for the clear button. */
2579
+ clearLabel?: string;
2580
+ };
2581
+ declare function FilterPopover({ label, activeCount, onApply, onClear, children, icon, applyLabel, clearLabel, }: FilterPopoverProps): react.JSX.Element;
2582
+
2583
+ type FacetOption<T = string> = {
2584
+ value: T;
2585
+ label: string;
2586
+ count?: number;
2587
+ };
2588
+ type FacetedFilterProps<T = string> = {
2589
+ /** Filter label shown on the trigger. */
2590
+ label: string;
2591
+ /** Selectable facet options, optionally with counts. */
2592
+ options: FacetOption<T>[];
2593
+ /** Currently selected option values. */
2594
+ value: T[];
2595
+ /** Called with the new selection array. */
2596
+ onChange: (value: T[]) => void;
2597
+ /** Render inline instead of inside a popover. */
2598
+ inline?: boolean;
2599
+ /** Show a search box above the options. */
2600
+ showSearch?: boolean;
2601
+ /** Placeholder for the option search box. */
2602
+ searchPlaceholder?: string;
2603
+ };
2604
+ declare function FacetedFilter<T = string>({ label, options, value, onChange, inline, showSearch, searchPlaceholder, }: FacetedFilterProps<T>): react.JSX.Element;
2605
+
2606
+ type DateRangeFilterProps = {
2607
+ /** Filter label shown on the trigger. */
2608
+ label: string;
2609
+ /** Selected range ({ from, to }). */
2610
+ value: DateRange;
2611
+ /** Called with the new range. */
2612
+ onChange: (value: DateRange) => void;
2613
+ /** Render inline instead of inside a popover. */
2614
+ inline?: boolean;
2615
+ /** Called when the filter is cleared; omit to hide the clear control. */
2616
+ onClear?: () => void;
2617
+ /** Placeholder when no range is set. */
2618
+ placeholder?: string;
2619
+ };
2620
+ declare function DateRangeFilter({ label, value, onChange, inline, onClear, placeholder, }: DateRangeFilterProps): react.JSX.Element;
2621
+
2622
+ type RangeFilterProps = {
2623
+ /** Filter label shown on the trigger. */
2624
+ label: string;
2625
+ /** Selected [min, max] range. */
2626
+ value: [number, number];
2627
+ /** Called with the new [min, max] tuple. */
2628
+ onChange: (value: [number, number]) => void;
2629
+ /** Lower bound of the slider. */
2630
+ min: number;
2631
+ /** Upper bound of the slider. */
2632
+ max: number;
2633
+ /** Step increment. */
2634
+ step?: number;
2635
+ /** Render inline instead of inside a popover. */
2636
+ inline?: boolean;
2637
+ };
2638
+ declare function RangeFilter({ label, value, onChange, min, max, step, inline, }: RangeFilterProps): react.JSX.Element;
2639
+
2640
+ type SearchFilterProps = {
2641
+ /** Current search text (controlled). */
2642
+ value: string;
2643
+ /** Called on every keystroke with the raw input value. */
2644
+ onChange: (value: string) => void;
2645
+ /** Called with the value after `debounceMs` of inactivity. */
2646
+ onDebouncedChange?: (value: string) => void;
2647
+ /** Debounce window in ms for `onDebouncedChange`. */
2648
+ debounceMs?: number;
2649
+ /** Placeholder text for the search input. */
2650
+ placeholder?: string;
2651
+ /** Extra classes for the input wrapper. */
2652
+ className?: string;
2653
+ };
2654
+ declare function SearchFilter({ value, onChange, onDebouncedChange, debounceMs, placeholder, className, }: SearchFilterProps): react.JSX.Element;
2655
+
2656
+ type FilterChipsProps = {
2657
+ /** Active filter chips to display, each removable. */
2658
+ chips: FilterChip[];
2659
+ /** Called when the user clears all chips at once. */
2660
+ onClearAll?: () => void;
2661
+ /** Label for the clear-all control. */
2662
+ clearAllLabel?: string;
2663
+ };
2664
+ declare function FilterChips({ chips, onClearAll, clearAllLabel }: FilterChipsProps): react.JSX.Element | null;
2665
+
2666
+ type ColumnsToggleProps<TData> = {
2667
+ table: Table$1<TData>;
2668
+ label?: string;
2669
+ };
2670
+ declare function ColumnsToggle<TData>({ table, label }: ColumnsToggleProps<TData>): react.JSX.Element;
2671
+
2672
+ type SavedViewsStorage = {
2673
+ load: () => Promise<SavedView[]>;
2674
+ save: (views: SavedView[]) => Promise<void>;
2675
+ };
2676
+ type LegacySavedView = {
2677
+ id: string;
2678
+ label: string;
2679
+ filters: unknown;
2680
+ };
2681
+ type ContextSavedViewsProps = {
2682
+ /** Query-string key the active view serializes filters into. */
2683
+ urlKey: string;
2684
+ /** Storage adapter for persisting saved views. Defaults to localStorage. */
2685
+ storage?: SavedViewsStorage;
2686
+ /** Label for the save-view action. */
2687
+ saveLabel?: string;
2688
+ /** Label for the update-current-view action. */
2689
+ updateLabel?: string;
2690
+ /** Label for the share-view action. */
2691
+ shareLabel?: string;
2692
+ /** Called with a shareable URL when the user shares a view. */
2693
+ onShare?: (url: string) => void;
2694
+ /** Extra classes for the container. */
2695
+ className?: string;
2696
+ };
2697
+ type LegacySavedViewsProps = {
2698
+ /** Storage key used to persist views (legacy controlled mode). */
2699
+ storageKey: string;
2700
+ /** Id of the active saved view, or null (controlled). */
2701
+ value: string | null;
2702
+ /** Called with the selected view (or null when cleared). */
2703
+ onChange: (view: LegacySavedView | null) => void;
2704
+ /** Current filter state captured when saving a new view. */
2705
+ currentFilters: unknown;
2706
+ /** Label for the save-view action. */
2707
+ saveLabel?: string;
2708
+ /** Placeholder for the view selector. */
2709
+ placeholder?: string;
2710
+ };
2711
+ type SavedViewsProps = ContextSavedViewsProps | LegacySavedViewsProps;
2712
+ declare function SavedViews(props: SavedViewsProps): react.JSX.Element;
2713
+
2714
+ type SingleProps$1 = {
2715
+ /** Single-date selection mode (default). */
2716
+ mode?: 'single';
2717
+ /** Selected date, or `undefined` when empty (controlled). */
2718
+ value: Date | undefined;
2719
+ /** Called with the newly selected date. */
2720
+ onChange: (date: Date | undefined) => void;
2721
+ /** Field label shown above the input. */
2722
+ label?: string;
2723
+ /** Placeholder text when no date is selected. */
2724
+ placeholder?: string;
2725
+ /** Extra classes for the field wrapper. */
2726
+ className?: string;
2727
+ };
2728
+ type RangeProps$1 = {
2729
+ /** Date-range selection mode. */
2730
+ mode: 'range';
2731
+ /** Selected start/end range, or `undefined` when empty (controlled). */
2732
+ value: DateRange | undefined;
2733
+ /** Called with the newly selected range. */
2734
+ onChange: (range: DateRange | undefined) => void;
2735
+ /** Field label shown above the input. */
2736
+ label?: string;
2737
+ /** Placeholder text when no range is selected. */
2738
+ placeholder?: string;
2739
+ /** Extra classes for the field wrapper. */
2740
+ className?: string;
2741
+ };
2742
+ type DatePickerProps = SingleProps$1 | RangeProps$1;
2743
+ declare function DatePicker(props: DatePickerProps): react.JSX.Element;
2744
+
2745
+ type DateRangePickerProps = {
2746
+ /** Selected range ({ from, to }). */
2747
+ value: DateRange;
2748
+ /** Called with the new range on selection. */
2749
+ onChange: (value: DateRange) => void;
2750
+ /** Quick-select preset ranges shown beside the calendar. */
2751
+ presets?: {
2752
+ label: string;
2753
+ range: DateRange;
2754
+ }[];
2755
+ /** Earliest selectable date. */
2756
+ minDate?: Date;
2757
+ /** Latest selectable date. */
2758
+ maxDate?: Date;
2759
+ /** Placeholder for the trigger input when empty. */
2760
+ placeholder?: string;
2761
+ /** date-fns locale for labels and formatting. */
2762
+ locale?: Locale;
2763
+ className?: string;
2764
+ /** Render the calendar inline instead of in a popover. */
2765
+ inline?: boolean;
2766
+ };
2767
+ declare function DateRangePicker({ value, onChange, presets, minDate, maxDate, placeholder, locale, className, inline, }: DateRangePickerProps): react.JSX.Element;
2768
+
2769
+ type SingleProps = {
2770
+ /** Single-date selection mode (default). */
2771
+ mode?: 'single';
2772
+ /** Selected date, or `undefined` when empty (controlled). */
2773
+ value: Date | undefined;
2774
+ /** Called with the newly selected date. */
2775
+ onChange: (date: Date | undefined) => void;
2776
+ /** Number of months rendered side by side. Defaults to `2`. */
2777
+ months?: number;
2778
+ /** Extra classes for the calendar container. */
2779
+ className?: string;
2780
+ };
2781
+ type RangeProps = {
2782
+ /** Date-range selection mode. */
2783
+ mode: 'range';
2784
+ /** Selected start/end range, or `undefined` when empty (controlled). */
2785
+ value: DateRange | undefined;
2786
+ /** Called with the newly selected range. */
2787
+ onChange: (range: DateRange | undefined) => void;
2788
+ /** Number of months rendered side by side. Defaults to `2`. */
2789
+ months?: number;
2790
+ /** Extra classes for the calendar container. */
2791
+ className?: string;
2792
+ };
2793
+ type MultiViewCalendarProps = SingleProps | RangeProps;
2794
+ /**
2795
+ * Inline calendar showing multiple months side by side. Unlike DatePicker this
2796
+ * renders directly in the page (no popover) — for range dashboards, booking
2797
+ * flows, and availability views.
2798
+ */
2799
+ declare function MultiViewCalendar(props: MultiViewCalendarProps): react.JSX.Element;
2800
+
2801
+ type Step = {
2802
+ id: string;
2803
+ label: string;
2804
+ description?: string;
2805
+ };
2806
+ type StepperProps = {
2807
+ /** Ordered steps to render. */
2808
+ steps: Step[];
2809
+ /** Zero-based index of the active step. */
2810
+ current: number;
2811
+ /** Called with the step index when a step is clicked. */
2812
+ onStepClick?: (index: number) => void;
2813
+ /** Layout direction. Defaults to `'horizontal'`. */
2814
+ orientation?: 'horizontal' | 'vertical';
2815
+ /** Extra classes for the stepper container. */
2816
+ className?: string;
2817
+ };
2818
+ declare function Stepper({ steps, current, onStepClick, orientation, className, }: StepperProps): react.JSX.Element;
2819
+
2820
+ type TimelineItem = {
2821
+ id: string;
2822
+ title: string;
2823
+ description?: string;
2824
+ timestamp?: string | undefined;
2825
+ tone?: string;
2826
+ icon?: ReactNode;
2827
+ };
2828
+ type TimelineProps = {
2829
+ items: TimelineItem[];
2830
+ orientation?: 'vertical' | 'horizontal';
2831
+ className?: string;
2832
+ };
2833
+ declare function Timeline({ items, orientation, className }: TimelineProps): react.JSX.Element;
2834
+
2835
+ type SliderValueChange = {
2836
+ bivarianceHack(value: number[]): void;
2837
+ }['bivarianceHack'];
2838
+ type SliderProps = {
2839
+ /** Current thumb value(s). One entry per thumb. */
2840
+ value: number[];
2841
+ /** Called with the updated value array as thumbs move. */
2842
+ onValueChange: SliderValueChange;
2843
+ /** Minimum value. Defaults to 0. */
2844
+ min?: number;
2845
+ /** Maximum value. Defaults to 100. */
2846
+ max?: number;
2847
+ /** Step increment. Defaults to 1. */
2848
+ step?: number;
2849
+ /** Visible label above the track. */
2850
+ label?: string;
2851
+ className?: string;
2852
+ /** Format a raw value for display (e.g. add a "$"). */
2853
+ formatValue?: (n: number) => string;
2854
+ };
2855
+ declare function Slider({ value, onValueChange, min, max, step, label, className, formatValue, }: SliderProps): react.JSX.Element;
2856
+
2857
+ type RangeSliderProps = {
2858
+ /** Current [start, end] values. */
2859
+ value: [number, number];
2860
+ /** Called with the new [start, end] tuple as either thumb moves. */
2861
+ onValueChange: (value: [number, number]) => void;
2862
+ /** Lower bound of the track. Defaults to 0. */
2863
+ min?: number;
2864
+ /** Upper bound of the track. Defaults to 100. */
2865
+ max?: number;
2866
+ /** Step increment between values. */
2867
+ step?: number;
2868
+ /** Minimum number of steps to keep between the two thumbs. */
2869
+ minStepsBetweenThumbs?: number;
2870
+ /** Visible label above the slider. */
2871
+ label?: string;
2872
+ className?: string;
2873
+ /** Format thumb/value captions (e.g. add a unit or currency). */
2874
+ formatValue?: (n: number) => string;
2875
+ };
2876
+ declare function RangeSlider({ value, onValueChange, min, max, step, minStepsBetweenThumbs, label, className, formatValue, }: RangeSliderProps): react.JSX.Element;
2877
+
2878
+ declare function TopProgressBar(): react.JSX.Element | null;
2879
+
2880
+ type ScrollbarProps = OverlayScrollbarsComponentProps & {
2881
+ className?: string;
2882
+ };
2883
+ declare function Scrollbar({ className, ...rest }: ScrollbarProps): react.JSX.Element;
2884
+
2885
+ type EditorProps = {
2886
+ /** Editor content as an HTML string (controlled). */
2887
+ value: string;
2888
+ /** Called with the updated HTML on every change. */
2889
+ onChange: (html: string) => void;
2890
+ /** Placeholder shown while the editor is empty. */
2891
+ placeholder?: string;
2892
+ /** Extra classes for the editor wrapper. */
2893
+ className?: string;
2894
+ };
2895
+ declare function Editor({ value, onChange, placeholder, className }: EditorProps): react.JSX.Element | null;
2896
+
2897
+ type FileUploadProps = Omit<DropzoneOptions, 'onDrop'> & {
2898
+ onFiles: (files: File[]) => void;
2899
+ activeLabel?: string;
2900
+ ariaLabel?: string;
2901
+ hint?: string;
2902
+ label?: string;
2903
+ className?: string;
2904
+ };
2905
+ declare function FileUpload({ onFiles, activeLabel, ariaLabel, hint, label, className, ...dropzone }: FileUploadProps): react.JSX.Element;
2906
+
2907
+ type FileItemStatus = 'idle' | 'uploading' | 'success' | 'error';
2908
+ type FileItemProps = {
2909
+ /** File name shown as the primary label. */
2910
+ name: string;
2911
+ /** Size in bytes. Rendered as a human-readable label. */
2912
+ size?: number;
2913
+ /** Current upload state — drives the status icon and styling. */
2914
+ status?: FileItemStatus;
2915
+ /** Upload progress 0–100. Shown as a thin bar when `status` is `uploading`. */
2916
+ progress?: number;
2917
+ /** Error message shown when `status` is `error`. */
2918
+ error?: string;
2919
+ /** Leading icon; defaults to a file-type glyph. */
2920
+ icon?: ReactNode;
2921
+ /** Called when the remove button is clicked. Omit to hide it. */
2922
+ onRemove?: () => void;
2923
+ /** Called when the retry button is clicked (shown on error). */
2924
+ onRetry?: () => void;
2925
+ /** Extra classes for the row container. */
2926
+ className?: string;
2927
+ };
2928
+ /**
2929
+ * Reusable file row with name, size, progress, status, and remove/retry
2930
+ * actions. Transport-free — the parent owns upload state and callbacks.
2931
+ */
2932
+ declare function FileItem({ name, size, status, progress, error, icon, onRemove, onRetry, className, }: FileItemProps): react.JSX.Element;
2933
+
2934
+ type ColorPickerProps = {
2935
+ /** Selected color as a hex string (controlled). */
2936
+ value: string;
2937
+ /** Called with the new hex value when the color changes. */
2938
+ onChange: (hex: string) => void;
2939
+ /** Swatch presets shown for quick selection. Falls back to a default palette. */
2940
+ presets?: string[];
2941
+ /** Field label shown above the picker. */
2942
+ label?: string;
2943
+ /** Extra classes for the picker container. */
2944
+ className?: string;
2945
+ };
2946
+ declare function ColorPicker({ value, onChange, presets, label, className, }: ColorPickerProps): react.JSX.Element;
2947
+
2948
+ type CarouselProps = {
2949
+ /** Slides to render, one per child. */
2950
+ children: ReactNode[];
2951
+ /** Embla carousel options (loop, align, drag, etc.). */
2952
+ options?: Parameters<typeof useEmblaCarousel>[0];
2953
+ /** Extra classes for the carousel container. */
2954
+ className?: string;
2955
+ /** Show the dot pagination indicators. */
2956
+ showDots?: boolean;
2957
+ /** Show the previous/next arrow controls. */
2958
+ showArrows?: boolean;
2959
+ };
2960
+ declare function Carousel({ children, options, className, showDots, showArrows, }: CarouselProps): react.JSX.Element;
2961
+
2962
+ type ImageLightboxProps = {
2963
+ /** Whether the lightbox is open (controlled). */
2964
+ open: boolean;
2965
+ /** Called when the lightbox is dismissed. */
2966
+ onClose: () => void;
2967
+ /** Images to display in the gallery. */
2968
+ slides: SlideImage[];
2969
+ /** Zero-based index of the slide shown first. Defaults to `0`. */
2970
+ startIndex?: number;
2971
+ };
2972
+ declare function ImageLightbox({ open, onClose, slides, startIndex }: ImageLightboxProps): react.JSX.Element;
2973
+
2974
+ type ImagePreviewStatus = 'idle' | 'uploading' | 'error';
2975
+ type ImagePreviewProps = {
2976
+ /** Image source URL or object URL. */
2977
+ src: string;
2978
+ /** Alt text for the thumbnail. */
2979
+ alt?: string;
2980
+ /** Optional file name shown as a caption/overlay. */
2981
+ name?: string;
2982
+ /** Current upload state — drives the overlay and styling. */
2983
+ status?: ImagePreviewStatus;
2984
+ /** Upload progress 0–100, shown over the thumbnail while `uploading`. */
2985
+ progress?: number;
2986
+ /** Called when the remove button is clicked. Omit to hide it. */
2987
+ onRemove?: () => void;
2988
+ /** Called when the retry button is clicked (shown on error). */
2989
+ onRetry?: () => void;
2990
+ /** Square edge length. Number → px, string → raw CSS size. */
2991
+ size?: number | string;
2992
+ /** Extra classes for the tile container. */
2993
+ className?: string;
2994
+ };
2995
+ /**
2996
+ * Single image preview tile with remove and retry actions plus uploading/error
2997
+ * overlays. Transport-free — the parent owns the object URL and callbacks.
2998
+ */
2999
+ declare function ImagePreview({ src, alt, name, status, progress, onRemove, onRetry, size, className, }: ImagePreviewProps): react.JSX.Element;
3000
+
3001
+ type MarkdownProps = {
3002
+ children: string;
3003
+ className?: string;
3004
+ };
3005
+ declare function Markdown({ children, className }: MarkdownProps): react.JSX.Element;
3006
+
3007
+ type TreeNode = {
3008
+ id: string;
3009
+ label: ReactNode;
3010
+ icon?: ReactNode;
3011
+ children?: TreeNode[];
3012
+ };
3013
+ type TreeViewProps = {
3014
+ /** Hierarchical nodes to render. */
3015
+ nodes: TreeNode[];
3016
+ /** Ids of branches expanded on first render. */
3017
+ defaultExpandedIds?: string[];
3018
+ /** Called with the node id when a node is selected. */
3019
+ onSelect?: (id: string) => void;
3020
+ /** Extra classes for the tree container. */
3021
+ className?: string;
3022
+ };
3023
+ declare function TreeView({ nodes, defaultExpandedIds, onSelect, className }: TreeViewProps): react.JSX.Element;
3024
+
3025
+ type PlayerProps = {
3026
+ /** Media source URL. */
3027
+ src: string;
3028
+ /** Poster image shown before playback. */
3029
+ poster?: string;
3030
+ /** Show native playback controls. Defaults to `true`. */
3031
+ controls?: boolean;
3032
+ /** Extra classes for the player element. */
3033
+ className?: string;
3034
+ };
3035
+ declare function Player({ src, poster, controls, className }: PlayerProps): react.JSX.Element;
3036
+
3037
+ type MegamenuColumn = {
3038
+ heading?: string;
3039
+ items: {
3040
+ label: string;
3041
+ description?: string;
3042
+ href: string;
3043
+ icon?: ReactNode;
3044
+ }[];
3045
+ };
3046
+ type MegamenuProps = {
3047
+ /** Text label for the menu trigger. */
3048
+ trigger: string;
3049
+ /** Column groups of links shown in the open panel. */
3050
+ columns: MegamenuColumn[];
3051
+ /** Optional footer content below the columns. */
3052
+ footer?: ReactNode;
3053
+ /** Extra classes for the menu container. */
3054
+ className?: string;
3055
+ };
3056
+ declare function Megamenu({ trigger, columns, footer, className }: MegamenuProps): react.JSX.Element;
3057
+
3058
+ declare const PRESETS: {
3059
+ readonly fadeIn: {
3060
+ readonly initial: {
3061
+ readonly opacity: 0;
3062
+ };
3063
+ readonly animate: {
3064
+ readonly opacity: 1;
3065
+ };
3066
+ readonly exit: {
3067
+ readonly opacity: 0;
3068
+ };
3069
+ };
3070
+ readonly fadeInUp: {
3071
+ readonly initial: {
3072
+ readonly opacity: 0;
3073
+ readonly y: 12;
3074
+ };
3075
+ readonly animate: {
3076
+ readonly opacity: 1;
3077
+ readonly y: 0;
3078
+ };
3079
+ readonly exit: {
3080
+ readonly opacity: 0;
3081
+ readonly y: -12;
3082
+ };
3083
+ };
3084
+ readonly scaleIn: {
3085
+ readonly initial: {
3086
+ readonly opacity: 0;
3087
+ readonly scale: 0.96;
3088
+ };
3089
+ readonly animate: {
3090
+ readonly opacity: 1;
3091
+ readonly scale: 1;
3092
+ };
3093
+ readonly exit: {
3094
+ readonly opacity: 0;
3095
+ readonly scale: 0.96;
3096
+ };
3097
+ };
3098
+ readonly slideInRight: {
3099
+ readonly initial: {
3100
+ readonly opacity: 0;
3101
+ readonly x: 24;
3102
+ };
3103
+ readonly animate: {
3104
+ readonly opacity: 1;
3105
+ readonly x: 0;
3106
+ };
3107
+ readonly exit: {
3108
+ readonly opacity: 0;
3109
+ readonly x: -24;
3110
+ };
3111
+ };
3112
+ };
3113
+ type MotionPresetName = keyof typeof PRESETS;
3114
+ type MotionPresetProps = HTMLMotionProps<'div'> & {
3115
+ /** Named animation preset (fadeIn, slideUp, …). Defaults to "fadeIn". */
3116
+ preset?: MotionPresetName;
3117
+ /** Animation duration in seconds. Defaults to 0.25. */
3118
+ duration?: number;
3119
+ };
3120
+ declare function MotionPreset({ preset, duration, ...rest }: MotionPresetProps): react.JSX.Element;
3121
+
3122
+ type ImageCropperProps = {
3123
+ /** Source image URL or object URL to crop. */
3124
+ src: string;
3125
+ /** Fixed crop aspect ratio (width / height); free-form when omitted. */
3126
+ aspect?: number;
3127
+ /** Called with the cropped image as a `Blob` when the user confirms. */
3128
+ onCrop: (blob: Blob) => void;
3129
+ /** Label for the confirm/crop button. */
3130
+ cropLabel?: string;
3131
+ };
3132
+ declare function ImageCropper({ src, aspect, onCrop, cropLabel }: ImageCropperProps): react.JSX.Element;
3133
+
3134
+ type SignaturePadProps = {
3135
+ /** Called with a PNG data URL whenever the signature changes. */
3136
+ onChange: (dataUrl: string) => void;
3137
+ /** Label for the clear button. */
3138
+ clearLabel?: string;
3139
+ };
3140
+ declare function SignaturePad({ onChange, clearLabel }: SignaturePadProps): react.JSX.Element;
3141
+
3142
+ type SortableListProps<T extends {
3143
+ id: string;
3144
+ }> = {
3145
+ /** Items to render; each must have a stable `id`. */
3146
+ items: T[];
3147
+ /** Called with the reordered array after a drag completes. */
3148
+ onChange: (items: T[]) => void;
3149
+ /** Renders a single item. */
3150
+ renderItem: (item: T) => ReactNode;
3151
+ };
3152
+ declare function SortableList<T extends {
3153
+ id: string;
3154
+ }>({ items, onChange, renderItem, }: SortableListProps<T>): react.JSX.Element;
3155
+
3156
+ interface SplitButtonAction {
3157
+ label: string;
3158
+ onSelect: () => void;
3159
+ disabled?: boolean;
3160
+ }
3161
+ interface SplitButtonProps extends Omit<ButtonProps, 'children'> {
3162
+ /** Label for the primary (left) button. */
3163
+ label: ReactNode;
3164
+ /** Secondary actions shown in the attached dropdown. */
3165
+ actions: SplitButtonAction[];
3166
+ }
3167
+ declare function SplitButton({ label, actions, onClick, variant, size, ...props }: SplitButtonProps): react.JSX.Element;
3168
+
3169
+ interface TransferListItem {
3170
+ value: string;
3171
+ label: string;
3172
+ disabled?: boolean;
3173
+ }
3174
+ interface TransferListProps {
3175
+ /** All transferable items across both panes. */
3176
+ items: TransferListItem[];
3177
+ /** Ids of items currently in the selected pane (controlled). */
3178
+ value: string[];
3179
+ /** Called with the next array of selected ids when items move. */
3180
+ onChange: (value: string[]) => void;
3181
+ /** Heading for the available (left) pane. */
3182
+ availableLabel?: string;
3183
+ /** Heading for the selected (right) pane. */
3184
+ selectedLabel?: string;
3185
+ /** Extra classes for the component wrapper. */
3186
+ className?: string;
3187
+ }
3188
+ declare function TransferList({ items, value, onChange, availableLabel, selectedLabel, className, }: TransferListProps): react.JSX.Element;
3189
+
3190
+ interface InfiniteScrollProps {
3191
+ /** Whether more items remain to load. */
3192
+ hasMore: boolean;
3193
+ /** True while a load is in flight — suppresses duplicate `onLoadMore` calls. */
3194
+ isLoading?: boolean;
3195
+ /** Called when the sentinel scrolls into view and more items are available. */
3196
+ onLoadMore: () => void;
3197
+ /** The already-loaded content. */
3198
+ children: ReactNode;
3199
+ /** Node shown while loading the next page. */
3200
+ loader?: ReactNode;
3201
+ /** Node shown once all items are loaded. */
3202
+ end?: ReactNode;
3203
+ /** Extra classes for the scroll container. */
3204
+ className?: string;
3205
+ }
3206
+ declare function InfiniteScroll({ hasMore, isLoading, onLoadMore, children, loader, end, className, }: InfiniteScrollProps): react.JSX.Element;
3207
+
3208
+ interface VirtualListProps<T> {
3209
+ /** Items to virtualize; only the visible window is rendered. */
3210
+ items: T[];
3211
+ /** Estimated row height in px, used before measurement. Defaults to `44`. */
3212
+ estimateSize?: number;
3213
+ /** Height of the scroll viewport (px or CSS length). */
3214
+ height?: number | string;
3215
+ /** Renders a single item for the given index. */
3216
+ renderItem: (item: T, index: number) => ReactNode;
3217
+ /** Extra classes for the scroll container. */
3218
+ className?: string;
3219
+ }
3220
+ declare function VirtualList<T>({ items, estimateSize, height, renderItem, className, }: VirtualListProps<T>): react.JSX.Element;
3221
+
3222
+ interface OnboardingTourProps {
3223
+ /** Ordered tour steps, each targeting an element with content. */
3224
+ steps: DriveStep[];
3225
+ /** Start the tour when true; stops/resets when false. */
3226
+ run?: boolean;
3227
+ /** Driver.js config overrides (animation, labels, behavior). */
3228
+ options?: Config;
3229
+ /** Called when the tour is closed or completed. */
3230
+ onClose?: () => void;
3231
+ }
3232
+ declare function OnboardingTour({ steps, run, options, onClose }: OnboardingTourProps): null;
3233
+
3234
+ type AspectRatioProps = ComponentPropsWithoutRef<typeof AspectRatioPrimitive.Root>;
3235
+ declare function AspectRatio({ className, ...props }: AspectRatioProps): react.JSX.Element;
3236
+
3237
+ type ImageListProps = ComponentPropsWithoutRef<'div'> & {
3238
+ cols?: number;
3239
+ gap?: number;
3240
+ };
3241
+ declare function ImageList({ className, cols, gap, style, ...props }: ImageListProps): react.JSX.Element;
3242
+ type ImageListItemProps = ComponentPropsWithoutRef<'figure'> & {
3243
+ caption?: string;
3244
+ };
3245
+ declare function ImageListItem({ caption, children, className, ...props }: ImageListItemProps): react.JSX.Element;
3246
+
3247
+ type MasonryProps = ComponentPropsWithoutRef<'div'> & {
3248
+ columns?: number;
3249
+ gap?: number;
3250
+ };
3251
+ declare function Masonry({ children, className, columns, gap, style, ...props }: MasonryProps): react.JSX.Element;
3252
+ declare function MasonryItem({ className, ...props }: ComponentPropsWithoutRef<'div'>): react.JSX.Element;
3253
+
3254
+ type FloatingActionButtonProps = ButtonProps & {
3255
+ /** Fixed corner the button is anchored to. */
3256
+ placement?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
3257
+ };
3258
+ declare const FloatingActionButton: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & class_variance_authority.VariantProps<(props?: ({
3259
+ variant?: "primary" | "secondary" | "outline" | "ghost" | "soft" | "danger" | "success" | null | undefined;
3260
+ size?: "xs" | "sm" | "md" | "lg" | "icon" | "icon-sm" | null | undefined;
3261
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & {
3262
+ isLoading?: boolean;
3263
+ } & {
3264
+ /** Fixed corner the button is anchored to. */
3265
+ placement?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
3266
+ } & react.RefAttributes<HTMLButtonElement>>;
3267
+
3268
+ interface KanbanCardItem {
3269
+ id: string;
3270
+ columnId: string;
3271
+ content: ReactNode;
3272
+ }
3273
+ interface KanbanColumnItem {
3274
+ id: string;
3275
+ title: ReactNode;
3276
+ }
3277
+ interface KanbanBoardProps {
3278
+ /** Column definitions in display order. */
3279
+ columns: KanbanColumnItem[];
3280
+ /** Cards, each referencing its column by id. */
3281
+ cards: KanbanCardItem[];
3282
+ /** Called when a card is dragged to a new column. */
3283
+ onMoveCard?: (cardId: string, columnId: string) => void;
3284
+ className?: string;
3285
+ }
3286
+ declare function KanbanBoard({ columns, cards, onMoveCard, className }: KanbanBoardProps): react.JSX.Element;
3287
+
3288
+ type CodeEditorLanguage = 'javascript' | 'typescript' | 'python' | 'css' | 'html' | 'json' | 'markdown';
3289
+ type CodeEditorProps = {
3290
+ /** Current editor contents. */
3291
+ value: string;
3292
+ /** Called with the new contents on edit. */
3293
+ onChange?: (value: string) => void;
3294
+ /** Language for syntax highlighting. */
3295
+ language?: CodeEditorLanguage;
3296
+ /** Render read-only (no editing). */
3297
+ readOnly?: boolean;
3298
+ /** Fixed height (CSS length). */
3299
+ height?: string;
3300
+ /** Minimum height when auto-growing. */
3301
+ minHeight?: string;
3302
+ /** Colour theme; `auto` follows the app theme. */
3303
+ theme?: 'light' | 'dark' | 'auto';
3304
+ /** Show the line-number gutter. */
3305
+ lineNumbers?: boolean;
3306
+ /** Placeholder shown when empty. */
3307
+ placeholder?: string;
3308
+ className?: string;
3309
+ };
3310
+ declare function CodeEditor({ value, onChange, language, readOnly, height, minHeight, theme, lineNumbers, placeholder, className, }: CodeEditorProps): react.JSX.Element;
3311
+
3312
+ type DataGridColumn<TData extends object> = ColumnDef<TData, unknown>;
3313
+ type DataGridFilters<TData extends object> = {
3314
+ fields: FilterFieldDef<TData>[];
3315
+ mode: FilterMode;
3316
+ urlKey?: string;
3317
+ dialect?: FilterDialect;
3318
+ onServerQueryChange?: (params: URLSearchParams) => void;
3319
+ };
3320
+ type DataGridProps<TData extends object> = {
3321
+ /** Row data. */
3322
+ data: TData[];
3323
+ /** Column definitions. */
3324
+ columns: DataGridColumn<TData>[];
3325
+ /** Column accessorKey/id values that allow double-click inline editing. */
3326
+ editableColumns?: string[];
3327
+ /** Called when an editable cell is committed. */
3328
+ onCellChange?: (rowIndex: number, columnId: string, value: string) => void;
3329
+ /** Row height/padding density. */
3330
+ density?: 'comfortable' | 'compact';
3331
+ /** Controlled global search term. */
3332
+ globalFilter?: string;
3333
+ /** Rows per page; enables pagination when set. */
3334
+ pageSize?: number;
3335
+ /** Keep the header visible while scrolling. */
3336
+ stickyHeader?: boolean;
3337
+ /** Per-column filter configuration. */
3338
+ filters?: DataGridFilters<TData>;
3339
+ className?: string;
3340
+ };
3341
+ declare function DataGrid<TData extends object>(props: DataGridProps<TData>): react.JSX.Element;
3342
+
3343
+ type ChatMessage = {
3344
+ id: string;
3345
+ content: string;
3346
+ sender: 'user' | 'other';
3347
+ senderName?: string;
3348
+ avatar?: ReactNode;
3349
+ timestamp?: Date | string;
3350
+ status?: 'sending' | 'sent' | 'error';
3351
+ };
3352
+ type ChatProps = {
3353
+ /** Conversation messages in chronological order. */
3354
+ messages: ChatMessage[];
3355
+ /** Called with the message text when the user sends. */
3356
+ onSend: (content: string) => void;
3357
+ /** Show a loading state for an in-flight response. */
3358
+ loading?: boolean;
3359
+ /** Placeholder for the composer input. */
3360
+ placeholder?: string;
3361
+ /** Disable the composer. */
3362
+ disabled?: boolean;
3363
+ /** Content shown when there are no messages. */
3364
+ emptyState?: ReactNode;
3365
+ /** Show an animated typing indicator. */
3366
+ typingIndicator?: boolean;
3367
+ className?: string;
3368
+ };
3369
+ declare function Chat({ messages, onSend, loading, placeholder, disabled, emptyState, typingIndicator, className, }: ChatProps): react.JSX.Element;
3370
+
3371
+ type Notification = {
3372
+ id: string;
3373
+ title: string;
3374
+ description?: string;
3375
+ icon?: ReactNode;
3376
+ meta?: ReactNode;
3377
+ unread?: boolean;
3378
+ timestamp?: Date | string;
3379
+ onClick?: () => void;
3380
+ };
3381
+ type NotificationCenterProps = {
3382
+ /** Notifications to display, newest first. */
3383
+ notifications: Notification[];
3384
+ /** Called when "mark all as read" is pressed. */
3385
+ onMarkAllRead?: () => void;
3386
+ /** Called with an id when a single item is marked read. */
3387
+ onMarkRead?: (id: string) => void;
3388
+ /** Called when the clear-all action is pressed. */
3389
+ onClear?: () => void;
3390
+ /** Called when the "see all" footer link is pressed. */
3391
+ onSeeAll?: () => void;
3392
+ /** Maximum number of items shown before scrolling. */
3393
+ maxVisible?: number;
3394
+ /** Content rendered when there are no notifications. */
3395
+ emptyState?: ReactNode;
3396
+ /** Accessible label for the panel/trigger. */
3397
+ label?: string;
3398
+ className?: string;
3399
+ };
3400
+ declare function NotificationCenter({ notifications, onMarkAllRead, onMarkRead, onClear, onSeeAll, maxVisible, emptyState, label, className, }: NotificationCenterProps): react.JSX.Element;
3401
+
3402
+ type WizardStep = {
3403
+ id: string;
3404
+ label: string;
3405
+ description?: string;
3406
+ content: ReactNode | ((api: WizardStepApi) => ReactNode);
3407
+ onNext?: () => boolean | Promise<boolean>;
3408
+ onBack?: () => void;
3409
+ };
3410
+ type WizardStepApi = {
3411
+ next: () => Promise<void>;
3412
+ back: () => void;
3413
+ goTo: (index: number) => void;
3414
+ isFirst: boolean;
3415
+ isLast: boolean;
3416
+ currentIndex: number;
3417
+ totalSteps: number;
3418
+ };
3419
+ type WizardProps = {
3420
+ /** Ordered steps with their content and validation. */
3421
+ steps: WizardStep[];
3422
+ /** Called when the final step is completed. */
3423
+ onComplete?: () => void;
3424
+ /** Layout of the step indicator. */
3425
+ orientation?: 'horizontal' | 'vertical';
3426
+ /** Label for the next button. */
3427
+ nextLabel?: string;
3428
+ /** Label for the back button. */
3429
+ backLabel?: string;
3430
+ /** Label for the final/complete button. */
3431
+ completeLabel?: string;
3432
+ className?: string;
3433
+ };
3434
+ declare function useWizard(): WizardStepApi;
3435
+ declare function Wizard({ steps, onComplete, orientation, nextLabel, backLabel, completeLabel, className, }: WizardProps): react.JSX.Element;
3436
+
3437
+ type ClickAwayListenerProps = {
3438
+ children: ReactNode;
3439
+ className?: string;
3440
+ onClickAway: (event: MouseEvent | TouchEvent) => void;
3441
+ };
3442
+ declare function ClickAwayListener({ children, className, onClickAway }: ClickAwayListenerProps): react.JSX.Element;
3443
+
3444
+ type NoSsrProps = {
3445
+ children: ReactNode;
3446
+ fallback?: ReactNode;
3447
+ };
3448
+ declare function NoSsr({ children, fallback }: NoSsrProps): ReactNode;
3449
+
3450
+ type PopperProps = {
3451
+ /** Element to position the floating content against. */
3452
+ anchor: HTMLElement | null;
3453
+ /** Floating content. */
3454
+ children: ReactNode;
3455
+ className?: string;
3456
+ /** Whether the floating content is rendered. */
3457
+ open: boolean;
3458
+ /** Preferred placement relative to the anchor. */
3459
+ placement?: Placement;
3460
+ };
3461
+ declare function Popper({ anchor, children, className, open, placement, }: PopperProps): react.JSX.Element | null;
3462
+
3463
+ type PortalProps = {
3464
+ children: ReactNode;
3465
+ container?: Element | DocumentFragment | null;
3466
+ disabled?: boolean;
3467
+ };
3468
+ declare function Portal({ children, container, disabled }: PortalProps): ReactNode;
3469
+
3470
+ type TextareaAutosizeProps = ComponentPropsWithoutRef<'textarea'> & {
3471
+ maxRows?: number;
3472
+ minRows?: number;
3473
+ };
3474
+ declare const TextareaAutosize: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & {
3475
+ maxRows?: number;
3476
+ minRows?: number;
3477
+ } & react.RefAttributes<HTMLTextAreaElement>>;
3478
+
3479
+ declare function useMediaQuery(query: string, defaultValue?: boolean): boolean;
3480
+
3481
+ type SparklineProps = {
3482
+ /** Series values to plot. */
3483
+ data: number[];
3484
+ /** Render as a line or as bars. */
3485
+ variant?: 'line' | 'bars';
3486
+ /** Width in pixels. */
3487
+ width?: number;
3488
+ /** Height in pixels. */
3489
+ height?: number;
3490
+ /** Stroke/bar colour. */
3491
+ color?: string;
3492
+ /** Fill the area under a line sparkline. */
3493
+ fill?: boolean;
3494
+ /** Accessible description of the trend. */
3495
+ 'aria-label'?: string;
3496
+ className?: string;
3497
+ };
3498
+ declare function Sparkline({ data, variant, width, height, color, fill, 'aria-label': ariaLabel, className, }: SparklineProps): react.JSX.Element | null;
3499
+
3500
+ /**
3501
+ * Mask tokens:
3502
+ * 9 — digit (0-9)
3503
+ * a — letter (A-Z, a-z)
3504
+ * * — alphanumeric
3505
+ * Any other character is a literal and is inserted automatically.
3506
+ * Example masks: "(999) 999-9999", "99/99/9999", "aa-9999", "99:99"
3507
+ */
3508
+ type MaskedInputProps = {
3509
+ /** Mask pattern; `9` = digit, `a` = letter, `*` = alphanumeric (e.g. "(999) 999-9999"). */
3510
+ mask: string;
3511
+ /** Current (masked) value. */
3512
+ value: string;
3513
+ /** Called with the masked value on input. */
3514
+ onChange: (value: string) => void;
3515
+ /** Visible label above the field. */
3516
+ label?: string;
3517
+ placeholder?: string;
3518
+ disabled?: boolean;
3519
+ /** Mark the field invalid for validation styling. */
3520
+ invalid?: boolean;
3521
+ className?: string;
3522
+ /** Accessible name when no visible label is present. */
3523
+ 'aria-label'?: string;
3524
+ };
3525
+ declare function applyMask(raw: string, mask: string): string;
3526
+ declare function MaskedInput({ mask, value, onChange, label, placeholder, disabled, invalid, className, 'aria-label': ariaLabel, }: MaskedInputProps): react.JSX.Element;
3527
+
3528
+ type ScrollSpyItem = {
3529
+ id: string;
3530
+ label: ReactNode;
3531
+ };
3532
+ type ScrollSpyProps = {
3533
+ items: ScrollSpyItem[];
3534
+ /** Root margin handed to IntersectionObserver — tune when a section counts as active. */
3535
+ rootMargin?: string;
3536
+ /** Scroll container element id — defaults to the viewport. */
3537
+ containerId?: string;
3538
+ onActiveChange?: (id: string) => void;
3539
+ className?: string;
3540
+ };
3541
+ declare function useScrollSpy(ids: string[], options?: {
3542
+ rootMargin?: string;
3543
+ containerId?: string;
3544
+ }): string | null;
3545
+ declare function ScrollSpy({ items, rootMargin, containerId, onActiveChange, className, }: ScrollSpyProps): react.JSX.Element;
3546
+
3547
+ type GaugeProps = {
3548
+ /** Current value to display. */
3549
+ value: number;
3550
+ /** Lower bound of the scale. Defaults to 0. */
3551
+ min?: number;
3552
+ /** Upper bound of the scale. Defaults to 100. */
3553
+ max?: number;
3554
+ /** Caption shown with the value. */
3555
+ label?: string;
3556
+ /** Visual style: arc (270° dial), semi (180° half circle), linear (horizontal bar). */
3557
+ variant?: 'arc' | 'semi' | 'linear';
3558
+ /** Diameter (arc/semi) or width (linear) in pixels. */
3559
+ size?: number;
3560
+ /** Fill colour of the value arc/bar. */
3561
+ color?: string;
3562
+ /** Colour of the unfilled track. */
3563
+ trackColor?: string;
3564
+ /** Format the displayed value (e.g. add a unit). */
3565
+ formatValue?: (value: number) => string;
3566
+ /** Threshold stops — color switches when value crosses. Sorted ascending. */
3567
+ thresholds?: {
3568
+ value: number;
3569
+ color: string;
3570
+ }[];
3571
+ className?: string;
3572
+ };
3573
+ declare function Gauge({ value, min, max, label, variant, size, color, trackColor, formatValue, thresholds, className, }: GaugeProps): react.JSX.Element;
3574
+
3575
+ type WindowProps = {
3576
+ /** Whether the window is open (controlled). */
3577
+ open: boolean;
3578
+ /** Called when the window is closed. */
3579
+ onClose: () => void;
3580
+ /** Window title bar content. */
3581
+ title: ReactNode;
3582
+ /** Window body content. */
3583
+ children: ReactNode;
3584
+ /** Starting top-left position in pixels. */
3585
+ initialPosition?: {
3586
+ x: number;
3587
+ y: number;
3588
+ };
3589
+ /** Starting size in pixels. */
3590
+ initialSize?: {
3591
+ width: number;
3592
+ height: number;
3593
+ };
3594
+ /** Minimum width when resizing. */
3595
+ minWidth?: number;
3596
+ /** Minimum height when resizing. */
3597
+ minHeight?: number;
3598
+ /** Allow the user to resize the window. */
3599
+ resizable?: boolean;
3600
+ /** Show the maximize control. */
3601
+ maximizable?: boolean;
3602
+ /** Stack order among multiple windows. */
3603
+ zIndex?: number;
3604
+ /** Called when the window gains focus (e.g. to raise it). */
3605
+ onFocus?: () => void;
3606
+ /** Extra classes for the window container. */
3607
+ className?: string;
3608
+ };
3609
+ /**
3610
+ * Draggable, resizable floating window. Non-modal — page behind stays
3611
+ * interactive. For multi-window dashboards, tool palettes, and pop-out panels.
3612
+ */
3613
+ declare function Window({ open, onClose, title, children, initialPosition, initialSize, minWidth, minHeight, resizable, maximizable, zIndex, onFocus, className, }: WindowProps): react.JSX.Element | null;
3614
+
3615
+ type ActionSheetAction = {
3616
+ label: string;
3617
+ icon?: ReactNode;
3618
+ onSelect: () => void;
3619
+ tone?: 'default' | 'danger';
3620
+ disabled?: boolean;
3621
+ };
3622
+ type ActionSheetProps = {
3623
+ /** Whether the sheet is visible. */
3624
+ open: boolean;
3625
+ /** Called when the sheet is dismissed. */
3626
+ onClose: () => void;
3627
+ /** Optional heading at the top of the sheet. */
3628
+ title?: string;
3629
+ /** Supporting text under the title. */
3630
+ description?: string;
3631
+ /** Action buttons rendered in the sheet. */
3632
+ actions: ActionSheetAction[];
3633
+ /** Label for the cancel button. Defaults to "Cancel". */
3634
+ cancelLabel?: string;
3635
+ className?: string;
3636
+ };
3637
+ /**
3638
+ * Mobile-first bottom sheet presenting a vertical list of actions.
3639
+ * Desktop renders the same sheet centered at the bottom with max width.
3640
+ */
3641
+ declare function ActionSheet({ open, onClose, title, description, actions, cancelLabel, className, }: ActionSheetProps): react.JSX.Element;
3642
+
3643
+ type AIPromptProps = {
3644
+ /** Called with the prompt text on submit. Wire your model call here. */
3645
+ onSubmit: (prompt: string) => void;
3646
+ /** Streaming/working state — shows stop affordance and disables input. */
3647
+ busy?: boolean;
3648
+ /** Called when the user clicks stop during a busy/streaming response. */
3649
+ onStop?: () => void;
3650
+ /** Quick-start suggestion chips shown above the input. */
3651
+ suggestions?: string[];
3652
+ /** Placeholder text for the input. Defaults to `'Ask anything…'`. */
3653
+ placeholder?: string;
3654
+ /** Accessible label for the input (visually hidden). Defaults to `'AI prompt'`. */
3655
+ label?: string;
3656
+ /** Rendered output region (markdown, streamed text, components). */
3657
+ output?: ReactNode;
3658
+ /** Footer hint, e.g. model name or token budget. */
3659
+ hint?: string;
3660
+ /** Disables the input and submit affordance. */
3661
+ disabled?: boolean;
3662
+ className?: string;
3663
+ };
3664
+ /**
3665
+ * Prompt input surface for AI features: suggestion chips, multiline input with
3666
+ * Cmd/Ctrl+Enter submit, busy/stop state, and an output slot. Transport-free —
3667
+ * wire your own model call in onSubmit.
3668
+ */
3669
+ declare function AIPrompt({ onSubmit, busy, onStop, suggestions, placeholder, label, output, hint, disabled, className, }: AIPromptProps): react.JSX.Element;
3670
+
3671
+ type DropDownTreeProps = {
3672
+ /** Hierarchical tree nodes to choose from. */
3673
+ nodes: TreeNode[];
3674
+ /** Id of the selected node, or `undefined` when empty (controlled). */
3675
+ value: string | undefined;
3676
+ /** Called with the newly selected node id. */
3677
+ onChange: (id: string | undefined) => void;
3678
+ /** Field label shown above the control. */
3679
+ label?: string;
3680
+ /** Placeholder text when nothing is selected. */
3681
+ placeholder?: string;
3682
+ /** Only allow selecting leaf nodes (no children). */
3683
+ leafOnly?: boolean;
3684
+ /** Ids of branches expanded on first render. */
3685
+ defaultExpandedIds?: string[];
3686
+ /** Extra classes for the control wrapper. */
3687
+ className?: string;
3688
+ };
3689
+ /** Select-style trigger opening a tree picker — for hierarchical taxonomies. */
3690
+ declare function DropDownTree({ nodes, value, onChange, label, placeholder, leafOnly, defaultExpandedIds, className, }: DropDownTreeProps): react.JSX.Element;
3691
+
3692
+ type TreeListRow = {
3693
+ id: string;
3694
+ children?: TreeListRow[];
3695
+ } & Record<string, unknown>;
3696
+ type TreeListColumn<R extends TreeListRow = TreeListRow> = {
3697
+ key: string;
3698
+ header: ReactNode;
3699
+ width?: string;
3700
+ align?: 'left' | 'right';
3701
+ render?: (row: R) => ReactNode;
3702
+ };
3703
+ type TreeListProps<R extends TreeListRow = TreeListRow> = {
3704
+ /** Hierarchical row data; each row may carry nested children. */
3705
+ rows: R[];
3706
+ /** Column definitions describing how to render each cell. */
3707
+ columns: TreeListColumn<R>[];
3708
+ /** Ids of branches expanded on first render. */
3709
+ defaultExpandedIds?: string[];
3710
+ /** Expand every branch initially. */
3711
+ defaultExpandAll?: boolean;
3712
+ /** Called when a row is clicked. */
3713
+ onRowClick?: (row: R) => void;
3714
+ /** Highlighted row id. */
3715
+ selectedId?: string;
3716
+ /** Text shown when there are no rows. */
3717
+ emptyMessage?: string;
3718
+ /** Extra classes for the tree container. */
3719
+ className?: string;
3720
+ };
3721
+ /**
3722
+ * Hierarchical data grid — rows expand/collapse in place while staying aligned
3723
+ * to columns. KendoUI TreeList equivalent for org structures, BOM tables,
3724
+ * account trees, and file systems.
3725
+ */
3726
+ declare function TreeList<R extends TreeListRow = TreeListRow>({ rows, columns, defaultExpandedIds, defaultExpandAll, onRowClick, selectedId, emptyMessage, className, }: TreeListProps<R>): react.JSX.Element;
3727
+
3728
+ type SchedulerEvent = Event & {
3729
+ id: string;
3730
+ /** Token-driven color accent for the event chip. */
3731
+ color?: string;
3732
+ resourceId?: string;
3733
+ };
3734
+ type SchedulerResource = {
3735
+ id: string;
3736
+ title: string;
3737
+ };
3738
+ type SchedulerProps = {
3739
+ /** Events to render on the calendar (controlled). */
3740
+ events: SchedulerEvent[];
3741
+ /** Called with the next events array after a drag, resize, or edit. */
3742
+ onEventsChange: (events: SchedulerEvent[]) => void;
3743
+ /** Resource lanes (people, rooms, machines) — enables resource view columns. */
3744
+ resources?: SchedulerResource[];
3745
+ /** Called when user selects an empty slot — create-event hook. */
3746
+ onSlotSelect?: (slot: {
3747
+ start: Date;
3748
+ end: Date;
3749
+ resourceId?: string;
3750
+ }) => void;
3751
+ /** Called when an existing event is clicked. */
3752
+ onEventClick?: (event: SchedulerEvent) => void;
3753
+ /** Calendar view shown on first render. */
3754
+ defaultView?: View;
3755
+ /** Views the user can switch between. */
3756
+ views?: View[];
3757
+ /** Date the calendar opens on. */
3758
+ defaultDate?: Date;
3759
+ /** Disable drag/resize editing. */
3760
+ readOnly?: boolean;
3761
+ /** Minimum height of the calendar viewport in px. */
3762
+ minHeight?: number;
3763
+ /** Extra classes for the calendar container. */
3764
+ className?: string;
3765
+ };
3766
+ /**
3767
+ * Full event scheduler: day/week/month/agenda views, drag to move, drag edges
3768
+ * to resize, slot selection to create, optional resource lanes. Controlled —
3769
+ * pass events and apply changes in onEventsChange.
3770
+ */
3771
+ declare function Scheduler({ events, onEventsChange, resources, onSlotSelect, onEventClick, defaultView, views, defaultDate, readOnly, minHeight, className, }: SchedulerProps): react.JSX.Element;
3772
+
3773
+ export { AIPrompt, type AIPromptProps, Accordion, type AccordionItem, type AccordionProps, ActionMenu, type ActionMenuItem, type ActionMenuProps, type ActionMenuSection, ActionSheet, type ActionSheetAction, type ActionSheetProps, ActivityFeed, type ActivityFeedItem, type ActivityFeedProps, Alert, type AlertProps, AnimatedList, type AnimatedListProps, AnimatedNumber, type AnimatedNumberProps, AppBar, type AppBarProps, AppBarSection, AppBarTitle, AreaChart, AspectRatio, type AspectRatioProps, AsyncSelect, type AsyncSelectProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarStack, type AvatarStackItem, type AvatarStackProps, Backdrop, type BackdropProps, Badge, type BadgeProps, Banner, type BannerProps, BarChart, Barcode, type BarcodeProps, BentoCard, type BentoCardProps, BentoGrid, type BentoGridProps, BorderBeam, type BorderBeamProps, BottomNavigation, type BottomNavigationItem, type BottomNavigationProps, Box, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Calendar, type CalendarEvent, type CalendarProps, CandlestickChart, type CandlestickChartProps, type CandlestickDatum, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Carousel, type CartesianChartProps, type ChartSeries, Chat, type ChatMessage, type ChatProps, Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, Chip, type ChipProps, CircularProgress, type CircularProgressProps, ClickAwayListener, type ClickAwayListenerProps, CodeBlock, type CodeBlockProps, CodeEditor, type CodeEditorLanguage, type CodeEditorProps, Collapsible, type CollapsibleProps, ColorPicker, ColumnsToggle, type ColumnsToggleProps, Combobox, type ComboboxOption, type ComboboxProps, type CommandAction, CommandPalette, Confetti, type ConfettiProps, ConfirmDialog, Container, type ContainerProps, ContextMenu, type ContextMenuItem, type ContextMenuProps, CopyButton, type CopyButtonProps, CopyField, type CopyFieldProps, CountdownTimer, type CountdownTimerProps, CurrencyInput, type CurrencyInputProps, DataGrid, type DataGridColumn, type DataGridProps, DataTable, type DataTableProps, DatePicker, type DatePickerProps, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, DateTimePicker, type DateTimePickerProps, DateTimeRangePicker, type DateTimeRangePickerProps, type DescriptionItem, DescriptionList, type DescriptionListProps, DiffViewer, type DiffViewerProps, DonutChart, Drawer, DropDownTree, type DropDownTreeProps, Dropdown, type DropdownItem, type DropdownProps, type DropdownSection, Editor, EmptyState, type EmptyStateProps, ErrorState, type ExportFormat, ExportToolbar, type FacetOption, FacetedFilter, type FacetedFilterProps, Field, Fieldset, type FieldsetProps, FileItem, type FileItemProps, type FileItemStatus, FileUpload, FilterBar, type FilterBarProps, FilterBuilder, type FilterBuilderProps, type FilterChip, FilterChips, type FilterChipsProps, FilterGroupEditor, type FilterGroupEditorProps, FilterPopover, type FilterPopoverProps, FiltersProvider, type FiltersProviderProps, FloatingActionButton, type FloatingActionButtonProps, Form, FormActions, type FormActionsProps, FormControl, type FormControlField, type FormControlProps, FormError, type FormErrorProps, FormGrid, type FormGridProps, FormHelperText, type FormHelperTextProps, FormLabel, type FormLabelProps, FunnelChart, type FunnelChartProps, GanttChart, type GanttChartProps, type GanttItem, Gauge, GaugeChart, type GaugeChartProps, type GaugeProps, GradientText, type GradientTextProps, Grid, type GridProps, HeatmapChart, type HeatmapChartProps, HoverCard, type HoverCardProps, IconButton, type IconButtonProps, ImageCropper, type ImageCropperProps, ImageLightbox, ImageList, ImageListItem, type ImageListItemProps, type ImageListProps, ImagePreview, type ImagePreviewProps, type ImagePreviewStatus, InfiniteScroll, type InfiniteScrollProps, InlineNotice, type InlineNoticeProps, type InlineNoticeTone, Input, InputGroup, type InputGroupProps, JSONViewer, type JSONViewerProps, Kbd as KBD, KanbanBoard, type KanbanBoardProps, type KanbanCardItem, type KanbanColumnItem, Kbd, type KbdProps, type LegacySavedView, LineChart, PrimitiveLink as Link, List, ListDivider, ListItem, ListItemButton, type ListItemButtonProps, ListItemContent, ListItemDecorator, type ListProps, ListSubheader, LoadingOverlay, type LoadingOverlayProps, LoadingState, Map, type MapMarker, type MapProps, Markdown, Marquee, type MarqueeProps, MaskedInput, type MaskedInputProps, Masonry, MasonryItem, type MasonryProps, Megamenu, type MegamenuColumn, MentionInput, type MentionInputProps, type MentionOption, Menu, type MenuProps, type MetadataItem, MetadataList, type MetadataListProps, Meter, type MeterProps, type MeterSegment, Modal, type ModalProps, MotionPreset, type MotionPresetName, MultiColumnCombobox, type MultiColumnComboboxColumn, type MultiColumnComboboxItem, type MultiColumnComboboxProps, MultiSelect, type MultiSelectProps, MultiViewCalendar, type MultiViewCalendarProps, NavigationMenu, type NavigationMenuItem, type NavigationMenuProps, NoSsr, type NoSsrProps, type Notification, NotificationCard, type NotificationCardProps, NotificationCenter, type NotificationCenterProps, NumberInput, type NumberInputProps, OnboardingTour, type OnboardingTourProps, OrgChart, type OrgChartNode, type OrgChartProps, PageBody, PageHeader, PageSection, Pagination, type PaginationProps, Panel, PanelHandle, Paper, type PaperProps, PasswordInput, type PasswordInputProps, PhoneInput, type PhoneInputProps, PieChart, type PieChartProps, PinInput, type PinInputProps, Player, Popover, type PopoverProps, Popper, type PopperProps, Portal, type PortalProps, PrimitiveLink, type PrimitiveLinkProps, Progress, type ProgressProps, PropertyItem, type PropertyItemProps, PropertyList, type PropertyListItem, type PropertyListProps, QRCode, type QRCodeProps, RadarChart, type RadarChartProps, RadioCardGroup, type RadioCardGroupProps, type RadioCardOption, RadioGroup, type RadioGroupProps, type RadioOption, RangeFilter, type RangeFilterProps, RangeSlider, type RangeSliderProps, Rating, type RatingProps, ResizablePanels, type ResizablePanelsProps, Ripple, type RippleProps, type RowAction, RowActions, type RowActionsProps, SankeyChart, type SankeyChartProps, type SavedView, SavedViews, type SavedViewsProps, type SavedViewsStorage, ScatterChart, type ScatterChartProps, Scheduler, type SchedulerEvent, type SchedulerProps, type SchedulerResource, ScrollSpy, type ScrollSpyItem, type ScrollSpyProps, Scrollbar, SearchFilter, type SearchFilterProps, SearchInput, type SearchInputProps, Select, type SelectProps, Separator, type SeparatorProps, Sheet, Shortcut, type ShortcutProps, SignaturePad, type SignaturePadProps, Skeleton, type SkeletonProps, SkeletonRow, Slider, SortableList, type SortableListProps, Sparkline, type SparklineProps, SpeedDial, type SpeedDialAction, type SpeedDialProps, Spinner, type SpinnerProps, SplitButton, type SplitButtonAction, type SplitButtonProps, Spotlight, SpotlightCard, type SpotlightCardProps, type SpotlightProps, Stack, type StackProps, StackedBarChart, StatCard, type StatCardProps, StatusDot, type StatusDotProps, StatusLabel, type StatusLabelProps, type StatusTone, Stepper, type Swatch, SwatchPicker, type SwatchPickerProps, Switch, SwitchGroup, type SwitchGroupOption, type SwitchGroupProps, type SwitchProps, type TabItem, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableToolbar, type TableToolbarProps, Tabs, type TabsProps, Tag, TagInput, type TagInputProps, type TagProps, Textarea, TextareaAutosize, type TextareaAutosizeProps, type TextareaProps, Tilt, type TiltProps, TimePicker, type TimePickerProps, type TimeValue, Timeline, type TimelineItem, ToggleButton, type ToggleButtonProps, ToggleGroup, type ToggleGroupProps, type ToggleOption, Toolbar, type ToolbarProps, Tooltip, type TooltipProps, TopProgressBar, TransferList, type TransferListItem, type TransferListProps, TreeList, type TreeListColumn, type TreeListProps, type TreeListRow, type TreeNode, TreeView, TreemapChart, type TreemapChartProps, type TreemapNode, Typography, type TypographyProps, type UseFiltersOptions, type UseFiltersReturn, VirtualList, type VirtualListProps, WaterfallChart, type WaterfallChartProps, Window, type WindowProps, Wizard, type WizardProps, type WizardStep, type WizardStepApi, applyMask, defaultValueForOperator, downloadCsv, registerCommands, toCsv, toast, useCommandStore, useDialogControls, useFilters, useFiltersContext, useFormControl, useFormControlContext, useMediaQuery, useOptionalFiltersContext, useScrollSpy, useWizard };