@ceebee/ui 0.5.0 → 0.6.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.
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ButtonHTMLAttributes, InputHTMLAttributes, TextareaHTMLAttributes, ReactElement } from 'react';
2
+ import { ReactNode, ButtonHTMLAttributes, ReactElement, InputHTMLAttributes, TextareaHTMLAttributes } from 'react';
3
3
  import * as _base_ui_react from '@base-ui/react';
4
4
 
5
5
  /**
@@ -117,6 +117,35 @@ interface ButtonProps extends NativeButtonProps {
117
117
  }
118
118
  declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
119
119
 
120
+ type FloatButtonPlacement = 'bottom-start' | 'bottom-end';
121
+ type NativeFloatButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'aria-label' | 'aria-labelledby' | 'children' | 'className' | 'color' | 'role' | 'style'>;
122
+ type FloatButtonCommonProps = NativeFloatButtonProps & {
123
+ /** Required accessible name. It is also rendered when `visibleLabel` is enabled. */
124
+ label: string;
125
+ tone?: Tone;
126
+ size?: Size;
127
+ placement?: FloatButtonPlacement;
128
+ /** These native escape hatches are rejected so FloatButton owns its name and fixed layout. */
129
+ 'aria-label'?: never;
130
+ 'aria-labelledby'?: never;
131
+ style?: never;
132
+ };
133
+ type FloatButtonProps = FloatButtonCommonProps & ({
134
+ /** Renders `label` beside the optional icon. */
135
+ visibleLabel: true;
136
+ icon?: ReactNode;
137
+ } | {
138
+ /** An icon-only action must still expose a visible affordance. */
139
+ visibleLabel?: false;
140
+ icon: ReactElement;
141
+ });
142
+ /**
143
+ * A persistent, fixed-viewport action. It intentionally remains one native
144
+ * button: navigation, grouped actions, and scroll-to-top behaviour are separate
145
+ * contracts rather than variants of this component.
146
+ */
147
+ declare const FloatButton: react.ForwardRefExoticComponent<FloatButtonProps & react.RefAttributes<HTMLButtonElement>>;
148
+
120
149
  interface FieldWiring {
121
150
  controlId: string;
122
151
  describedBy: string | undefined;
@@ -436,6 +465,250 @@ interface NumberInputProps extends NumberBounds {
436
465
  */
437
466
  declare function InputNumber({ value, defaultValue, onValueChange, min, max, step, size, disabled, invalid, name, placeholder, suffix, className, }: NumberInputProps): react.JSX.Element;
438
467
 
468
+ interface SliderSkeletonProps {
469
+ orientation?: SliderOrientation;
470
+ range?: boolean;
471
+ size?: Size;
472
+ }
473
+ /** Placeholder geometry for a one- or two-thumb Slider (ADR 0009). */
474
+ declare function SliderSkeleton({ orientation, range, size }: SliderSkeletonProps): react.JSX.Element;
475
+
476
+ type SliderOrientation = 'horizontal' | 'vertical';
477
+ type SliderRangeValue = readonly [number, number];
478
+ interface SliderCommonProps {
479
+ /** Names the value control. Range thumbs become “Minimum {label}” and “Maximum {label}”. */
480
+ label: string;
481
+ min?: number;
482
+ max?: number;
483
+ step?: number;
484
+ largeStep?: number;
485
+ minStepsBetweenValues?: number;
486
+ /** Disables visual thumb transitions without changing Slider state feedback. */
487
+ motion?: boolean;
488
+ disabled?: boolean;
489
+ orientation?: SliderOrientation;
490
+ tone?: Tone;
491
+ size?: Size;
492
+ name?: string;
493
+ /** Announces a formatted value without changing the numeric form value. */
494
+ getAriaValueText?: (value: number, index: number) => string;
495
+ }
496
+ type SliderProps = SliderCommonProps & ({
497
+ range?: false;
498
+ value?: number;
499
+ defaultValue?: number;
500
+ onValueChange?: (value: number) => void;
501
+ onValueCommitted?: (value: number) => void;
502
+ } | {
503
+ range: true;
504
+ value?: SliderRangeValue;
505
+ defaultValue?: SliderRangeValue;
506
+ onValueChange?: (value: SliderRangeValue) => void;
507
+ onValueCommitted?: (value: SliderRangeValue) => void;
508
+ });
509
+ /**
510
+ * A continuous numeric value, or two bounded values when `range` is true.
511
+ * Base UI owns the hidden range inputs, keyboard map, pointer and touch dragging,
512
+ * thumb collision, and form submission semantics.
513
+ */
514
+ declare function SliderComponent(props: SliderProps): react.JSX.Element;
515
+ declare const Slider: typeof SliderComponent & {
516
+ Skeleton: typeof SliderSkeleton;
517
+ };
518
+
519
+ interface MentionsSkeletonProps {
520
+ rows?: number;
521
+ }
522
+ declare function MentionsSkeleton({ rows }: MentionsSkeletonProps): react.JSX.Element;
523
+
524
+ interface MentionOption {
525
+ /** Stable text inserted after the trigger character. */
526
+ value: string;
527
+ label: ReactNode;
528
+ searchText?: string;
529
+ disabled?: boolean;
530
+ }
531
+ interface MentionsProps {
532
+ options: MentionOption[];
533
+ value?: string;
534
+ defaultValue?: string;
535
+ onValueChange?: (value: string) => void;
536
+ trigger?: string;
537
+ separator?: string;
538
+ placeholder?: string;
539
+ rows?: number;
540
+ name?: string;
541
+ disabled?: boolean;
542
+ motion?: boolean;
543
+ }
544
+ /** Inline textarea editing with an anchored mention-list contract, not a text-field combobox. */
545
+ declare function MentionsRoot({ options, value, defaultValue, onValueChange, trigger, separator, placeholder, rows, name, disabled, motion, }: MentionsProps): react.JSX.Element;
546
+ declare const Mentions: typeof MentionsRoot & {
547
+ Skeleton: typeof MentionsSkeleton;
548
+ };
549
+
550
+ interface TransferSkeletonProps {
551
+ items?: number;
552
+ }
553
+ /** Static two-list loading geometry matching Transfer without controls or destination state. */
554
+ declare function TransferSkeleton({ items }: TransferSkeletonProps): react.JSX.Element;
555
+
556
+ interface TransferItem {
557
+ /** Stable identity. Keys must be unique within one Transfer. */
558
+ key: string;
559
+ label: ReactNode;
560
+ description?: ReactNode;
561
+ disabled?: boolean;
562
+ }
563
+ interface TransferProps {
564
+ /** The application supplies the complete, stable collection; Transfer never fetches it. */
565
+ items: TransferItem[];
566
+ /** Keys currently assigned to the target list. Supplying this makes assignment controlled. */
567
+ targetKeys?: string[];
568
+ defaultTargetKeys?: string[];
569
+ onTargetKeysChange?: (keys: string[]) => void;
570
+ sourceTitle?: ReactNode;
571
+ targetTitle?: ReactNode;
572
+ disabled?: boolean;
573
+ 'aria-label'?: string;
574
+ }
575
+ /**
576
+ * Two persistent checkbox lists for assigning supplied records between source and target.
577
+ * `targetKeys` is controlled or uncontrolled assignment state; transient per-list checkbox
578
+ * selection is deliberately internal, cleared only for records that are moved.
579
+ */
580
+ declare function TransferRoot({ items, targetKeys, defaultTargetKeys, onTargetKeysChange, sourceTitle, targetTitle, disabled, 'aria-label': ariaLabel, }: TransferProps): react.JSX.Element;
581
+ declare const Transfer: typeof TransferRoot & {
582
+ Skeleton: typeof TransferSkeleton;
583
+ };
584
+
585
+ interface TreeSkeletonProps {
586
+ items?: number;
587
+ size?: 'sm' | 'md' | 'lg';
588
+ tone?: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
589
+ 'aria-label'?: string;
590
+ }
591
+ /** Placeholder geometry for an inline tree whose static nodes are still loading. */
592
+ declare function TreeSkeleton({ items, size, tone, 'aria-label': ariaLabel }: TreeSkeletonProps): react.JSX.Element;
593
+
594
+ type TreeTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
595
+ type TreeSize = 'sm' | 'md' | 'lg';
596
+ interface TreeNode {
597
+ key: string;
598
+ label: ReactNode;
599
+ /** Static supplementary content, such as a count or status. It must not introduce controls. */
600
+ content?: ReactNode;
601
+ disabled?: boolean;
602
+ children?: TreeNode[];
603
+ }
604
+ interface TreeProps {
605
+ nodes: TreeNode[];
606
+ expandedPaths?: string[];
607
+ defaultExpandedPaths?: string[];
608
+ onExpandedPathsChange?: (paths: string[]) => void;
609
+ selectedPath?: string;
610
+ defaultSelectedPath?: string;
611
+ onSelectedPathChange?: (path: string) => void;
612
+ size?: TreeSize;
613
+ tone?: TreeTone;
614
+ motion?: boolean;
615
+ 'aria-label'?: string;
616
+ }
617
+ /**
618
+ * Inline hierarchy with the ARIA tree keyboard model. It is neither a navigation menu nor a
619
+ * disclosure: Tree owns one roving treeitem focus and independently controlled expansion.
620
+ */
621
+ declare function TreeRoot({ nodes, expandedPaths, defaultExpandedPaths, onExpandedPathsChange, selectedPath, defaultSelectedPath, onSelectedPathChange, size, tone, motion, 'aria-label': ariaLabel, }: TreeProps): react.JSX.Element;
622
+ declare const Tree: typeof TreeRoot & {
623
+ Skeleton: typeof TreeSkeleton;
624
+ };
625
+
626
+ interface TreeSelectSkeletonProps {
627
+ size?: 'sm' | 'md' | 'lg';
628
+ }
629
+ declare function TreeSelectSkeleton({ size }: TreeSelectSkeletonProps): react.JSX.Element;
630
+
631
+ interface TreeSelectProps {
632
+ nodes: TreeNode[];
633
+ value?: string | null;
634
+ defaultValue?: string | null;
635
+ onValueChange?: (path: string) => void;
636
+ open?: boolean;
637
+ defaultOpen?: boolean;
638
+ onOpenChange?: (open: boolean) => void;
639
+ label: string;
640
+ placeholder?: string;
641
+ name?: string;
642
+ disabled?: boolean;
643
+ motion?: boolean;
644
+ }
645
+ /** One value chosen from injected hierarchy. Popover owns anchoring/dismissal; Tree owns traversal. */
646
+ declare function TreeSelectRoot({ nodes, value, defaultValue, onValueChange, open, defaultOpen, onOpenChange, label, placeholder, name, disabled, motion }: TreeSelectProps): react.JSX.Element;
647
+ declare const TreeSelect: typeof TreeSelectRoot & {
648
+ Skeleton: typeof TreeSelectSkeleton;
649
+ };
650
+
651
+ interface CascaderSkeletonProps {
652
+ rows?: number;
653
+ }
654
+ declare function CascaderSkeleton({ rows }: CascaderSkeletonProps): react.JSX.Element;
655
+
656
+ interface CascaderOption {
657
+ key: string;
658
+ label: ReactNode;
659
+ disabled?: boolean;
660
+ children?: CascaderOption[];
661
+ }
662
+ interface CascaderProps {
663
+ options: CascaderOption[];
664
+ label: string;
665
+ value?: string[];
666
+ defaultValue?: string[];
667
+ onValueChange?: (path: string[]) => void;
668
+ placeholder?: string;
669
+ disabled?: boolean;
670
+ motion?: boolean;
671
+ }
672
+ /** A hierarchical, column-by-column selection surface. It is not an inline tree or a flat Select. */
673
+ declare function CascaderRoot({ options, label, value, defaultValue, onValueChange, placeholder, disabled, motion, }: CascaderProps): react.JSX.Element;
674
+ declare const Cascader: typeof CascaderRoot & {
675
+ Skeleton: typeof CascaderSkeleton;
676
+ };
677
+
678
+ declare function ColorPickerSkeleton(): react.JSX.Element;
679
+
680
+ interface ColorPickerOption {
681
+ tone: Tone;
682
+ label: string;
683
+ disabled?: boolean;
684
+ }
685
+ interface ColorPickerProps {
686
+ label: string;
687
+ value?: Tone;
688
+ defaultValue?: Tone;
689
+ onValueChange?: (tone: Tone) => void;
690
+ open?: boolean;
691
+ defaultOpen?: boolean;
692
+ onOpenChange?: (open: boolean) => void;
693
+ options?: ColorPickerOption[];
694
+ name?: string;
695
+ disabled?: boolean;
696
+ motion?: boolean;
697
+ }
698
+ declare function ColorPickerRoot({ label, value, defaultValue, onValueChange, open, defaultOpen, onOpenChange, options, name, disabled, motion }: ColorPickerProps): react.JSX.Element;
699
+ declare const ColorPicker: typeof ColorPickerRoot & {
700
+ Skeleton: typeof ColorPickerSkeleton;
701
+ };
702
+
703
+ interface ModalSkeletonProps {
704
+ size?: 'sm' | 'md' | 'lg';
705
+ lines?: number;
706
+ withActions?: boolean;
707
+ className?: string;
708
+ }
709
+ /** Static loading geometry for content that will resolve into a Modal (ADR 0009). */
710
+ declare function ModalSkeleton({ size, lines, withActions, className, }: ModalSkeletonProps): react.JSX.Element;
711
+
439
712
  interface DialogProps {
440
713
  open?: boolean;
441
714
  defaultOpen?: boolean;
@@ -456,7 +729,28 @@ interface DialogProps {
456
729
  * (ADR 0003). Enter and exit are CSS transitions driven by Base UI's own state attributes,
457
730
  * because Base UI owns this element's mount lifecycle — motion is used where we own it.
458
731
  */
459
- declare function Modal({ open, defaultOpen, onOpenChange, title, description, children, footer, size, placement, trigger, className, }: DialogProps): react.JSX.Element;
732
+ declare function ModalRoot({ open, defaultOpen, onOpenChange, title, description, children, footer, size, placement, trigger, className, }: DialogProps): react.JSX.Element;
733
+ interface ModalConfirmProps extends Omit<DialogProps, 'children' | 'footer' | 'placement' | 'size'> {
734
+ /** Optional supporting content below the description. */
735
+ children?: ReactNode;
736
+ /** Action that dismisses without applying the decision. Rendered first. */
737
+ cancelAction?: ReactNode;
738
+ /** Action that applies the decision. Rendered last. */
739
+ confirmAction: ReactNode;
740
+ /** Semantic treatment for the confirmation icon and emphasis. */
741
+ tone?: Tone;
742
+ /** Replaces the semantic icon supplied by the consumer. */
743
+ icon?: ReactNode;
744
+ }
745
+ /**
746
+ * A composable counterpart to Ant's modal confirmation family. It intentionally reuses Modal's
747
+ * dialog contract: this is viewport-modal confirmation, never an anchored Popconfirm.
748
+ */
749
+ declare function ModalConfirm({ title, description, children, cancelAction, confirmAction, tone, icon, className, ...rootProps }: ModalConfirmProps): react.JSX.Element;
750
+ declare const Modal: typeof ModalRoot & {
751
+ Confirm: typeof ModalConfirm;
752
+ Skeleton: typeof ModalSkeleton;
753
+ };
460
754
  declare const DialogClose: react.ForwardRefExoticComponent<Omit<_base_ui_react.AlertDialogCloseProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
461
755
 
462
756
  interface DrawerProps {
@@ -572,6 +866,41 @@ interface TooltipProps {
572
866
  }
573
867
  declare function Tooltip({ children, label, side, align, sideOffset, showArrow, delay, }: TooltipProps): react.JSX.Element;
574
868
 
869
+ interface PopconfirmSkeletonProps {
870
+ withDescription?: boolean;
871
+ withCancel?: boolean;
872
+ }
873
+ /** Static loading geometry matching the anchored confirmation surface. */
874
+ declare function PopconfirmSkeleton({ withDescription, withCancel, }: PopconfirmSkeletonProps): react.JSX.Element;
875
+
876
+ interface PopconfirmProps {
877
+ /** Native interactive element that anchors and opens the confirmation. */
878
+ trigger: ReactElement;
879
+ title: ReactNode;
880
+ description?: ReactNode;
881
+ /** Dismisses the confirmation after the rendered action handles its click. */
882
+ cancelAction?: ReactElement;
883
+ /** Dismisses the confirmation after the rendered action handles its click. */
884
+ confirmAction: ReactElement;
885
+ tone?: Extract<Tone, 'neutral' | 'warning' | 'danger'>;
886
+ icon?: ReactNode;
887
+ side?: Side;
888
+ align?: Align;
889
+ open?: boolean;
890
+ defaultOpen?: boolean;
891
+ onOpenChange?: (open: boolean) => void;
892
+ motion?: boolean;
893
+ }
894
+ /**
895
+ * Anchored, lightweight confirmation. Base UI owns anchoring, outside dismissal, Escape,
896
+ * initial focus, and focus restoration when dismissal does not move focus elsewhere.
897
+ * Viewport-modal confirmation remains Modal.Confirm.
898
+ */
899
+ declare function PopconfirmRoot({ trigger, title, description, cancelAction, confirmAction, tone, icon, side, align, open, defaultOpen, onOpenChange, motion, }: PopconfirmProps): react.JSX.Element;
900
+ declare const Popconfirm: typeof PopconfirmRoot & {
901
+ Skeleton: typeof PopconfirmSkeleton;
902
+ };
903
+
575
904
  interface TagProps {
576
905
  children: ReactNode;
577
906
  tone?: Tone;
@@ -676,6 +1005,33 @@ declare function useToast(): {
676
1005
  promise: <Value, T extends any = any>(promise: Promise<Value>, options: _base_ui_react.ToastManagerPromiseOptions<Value, T>) => Promise<Value>;
677
1006
  };
678
1007
 
1008
+ interface WatermarkSkeletonProps {
1009
+ content?: WatermarkContent;
1010
+ tone?: Tone;
1011
+ density?: WatermarkDensity;
1012
+ direction?: WatermarkDirection;
1013
+ lines?: number;
1014
+ }
1015
+ /** Matching marked content surface while the wrapped content is loading (ADR 0009). */
1016
+ declare function WatermarkSkeleton({ content, tone, density, direction, lines, }: WatermarkSkeletonProps): react.JSX.Element;
1017
+
1018
+ type WatermarkContent = string | string[];
1019
+ type WatermarkDensity = 'sm' | 'md' | 'lg';
1020
+ type WatermarkDirection = 'horizontal' | 'vertical';
1021
+ interface WatermarkProps {
1022
+ /** One mark, or a sequence that repeats in order across the overlay. */
1023
+ content: WatermarkContent;
1024
+ children: ReactNode;
1025
+ tone?: Tone;
1026
+ density?: WatermarkDensity;
1027
+ direction?: WatermarkDirection;
1028
+ }
1029
+ /** A presentational overlay that keeps its supplied content's semantics untouched. */
1030
+ declare function WatermarkRoot({ content, children, tone, density, direction, }: WatermarkProps): react.JSX.Element;
1031
+ declare const Watermark: typeof WatermarkRoot & {
1032
+ Skeleton: typeof WatermarkSkeleton;
1033
+ };
1034
+
679
1035
  interface TabItem {
680
1036
  value: string;
681
1037
  label: ReactNode;
@@ -726,6 +1082,58 @@ type DropdownMenuProps = DropdownMenuBaseProps & ({
726
1082
  /** Typeahead, roving focus, and dismissal are Base UI's; the surface and the rhythm are ours. */
727
1083
  declare function Dropdown({ trigger, items, sections, align, side, className }: DropdownMenuProps): react.JSX.Element;
728
1084
 
1085
+ interface MenuSkeletonProps {
1086
+ items?: number;
1087
+ size?: 'sm' | 'md' | 'lg';
1088
+ tone?: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
1089
+ 'aria-label'?: string;
1090
+ }
1091
+ /** Placeholder rows for a persistent navigation menu whose destinations have not loaded yet. */
1092
+ declare function MenuSkeleton({ items, size, tone, 'aria-label': ariaLabel, }: MenuSkeletonProps): react.JSX.Element;
1093
+
1094
+ type MenuTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
1095
+ type MenuSize = 'sm' | 'md' | 'lg';
1096
+ interface PersistentMenuLeaf {
1097
+ key: string;
1098
+ label: ReactNode;
1099
+ href: string;
1100
+ icon?: ReactNode;
1101
+ disabled?: boolean;
1102
+ }
1103
+ interface PersistentMenuBranch {
1104
+ key: string;
1105
+ label: ReactNode;
1106
+ /** Explicit accessible name for the disclosure control; labels may contain arbitrary React nodes. */
1107
+ ariaLabel: string;
1108
+ icon?: ReactNode;
1109
+ disabled?: boolean;
1110
+ children: PersistentMenuItem[];
1111
+ href?: never;
1112
+ }
1113
+ type PersistentMenuItem = PersistentMenuLeaf | PersistentMenuBranch;
1114
+ interface MenuProps {
1115
+ items: PersistentMenuItem[];
1116
+ selectedPath?: string;
1117
+ defaultSelectedPath?: string;
1118
+ onSelectedPathChange?: (path: string) => void;
1119
+ openKeys?: string[];
1120
+ defaultOpenKeys?: string[];
1121
+ onOpenKeysChange?: (keys: string[]) => void;
1122
+ size?: MenuSize;
1123
+ tone?: MenuTone;
1124
+ motion?: boolean;
1125
+ 'aria-label'?: string;
1126
+ }
1127
+ /**
1128
+ * Persistent navigation in normal document flow. Native links retain their normal browser
1129
+ * behaviour; nested branches are disclosure buttons. This is intentionally not Dropdown:
1130
+ * Dropdown is an anchored, dismissible action menu with roving focus.
1131
+ */
1132
+ declare function MenuRoot({ items, selectedPath, defaultSelectedPath, onSelectedPathChange, openKeys, defaultOpenKeys, onOpenKeysChange, size, tone, motion, 'aria-label': ariaLabel, }: MenuProps): react.JSX.Element;
1133
+ declare const Menu: typeof MenuRoot & {
1134
+ Skeleton: typeof MenuSkeleton;
1135
+ };
1136
+
729
1137
  interface NavItem {
730
1138
  label: ReactNode;
731
1139
  icon?: ReactNode;
@@ -849,6 +1257,101 @@ interface PaginationProps {
849
1257
  }
850
1258
  declare function Pagination({ page, pageSize, total, onPageChange, showSummary, siblings, className, }: PaginationProps): react.JSX.Element;
851
1259
 
1260
+ interface CollapseSkeletonProps {
1261
+ items?: number;
1262
+ openItems?: number[];
1263
+ lines?: number;
1264
+ size?: 'sm' | 'md' | 'lg';
1265
+ bordered?: boolean;
1266
+ expandIconPosition?: 'start' | 'end';
1267
+ className?: string;
1268
+ }
1269
+ /** Matching disclosure-row geometry for a Collapse that has not loaded yet (ADR 0009). */
1270
+ declare function CollapseSkeleton({ items, openItems, lines, size, bordered, expandIconPosition, className, }: CollapseSkeletonProps): react.JSX.Element;
1271
+
1272
+ interface CollapseItem {
1273
+ key: string;
1274
+ label: ReactNode;
1275
+ children: ReactNode;
1276
+ disabled?: boolean;
1277
+ }
1278
+ interface CollapseProps {
1279
+ items: CollapseItem[];
1280
+ /** One key in single mode; an array of keys when `multiple` is true. */
1281
+ value?: string | string[];
1282
+ /** Initial key or keys for an uncontrolled Collapse. */
1283
+ defaultValue?: string | string[];
1284
+ onValueChange?: (value: string | string[] | undefined) => void;
1285
+ multiple?: boolean;
1286
+ size?: 'sm' | 'md' | 'lg';
1287
+ bordered?: boolean;
1288
+ expandIconPosition?: 'start' | 'end';
1289
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
1290
+ disabled?: boolean;
1291
+ /** Keeps closed panels in the DOM, for content whose local state must survive toggles. */
1292
+ keepMounted?: boolean;
1293
+ /** Allows browser page search to reveal matching content in closed panels. */
1294
+ hiddenUntilFound?: boolean;
1295
+ motion?: boolean;
1296
+ className?: string;
1297
+ }
1298
+ declare function CollapseRoot({ items, value, defaultValue, onValueChange, multiple, size, bordered, expandIconPosition, headingLevel, disabled, keepMounted, hiddenUntilFound, motion, className, }: CollapseProps): react.JSX.Element;
1299
+ /** A disclosure group. Base UI owns expansion state, button semantics, and panel association. */
1300
+ declare const Collapse: typeof CollapseRoot & {
1301
+ Skeleton: typeof CollapseSkeleton;
1302
+ };
1303
+
1304
+ interface CalendarSkeletonProps {
1305
+ weekStartsOn?: 0 | 1;
1306
+ }
1307
+ /** A fixed six-week placeholder matching Calendar's inline month-grid geometry. */
1308
+ declare function CalendarSkeleton({ weekStartsOn }: CalendarSkeletonProps): react.JSX.Element;
1309
+
1310
+ interface CalendarDay {
1311
+ date: Date;
1312
+ inMonth: boolean;
1313
+ selected: boolean;
1314
+ today: boolean;
1315
+ disabled: boolean;
1316
+ }
1317
+ interface CalendarProps {
1318
+ /** Selected local calendar day. Supplying it makes date selection controlled. */
1319
+ value?: Date | null;
1320
+ defaultValue?: Date | null;
1321
+ onValueChange?: (value: Date) => void;
1322
+ /** Month being displayed. Supplying it makes month navigation controlled. */
1323
+ month?: Date;
1324
+ defaultMonth?: Date;
1325
+ onMonthChange?: (month: Date) => void;
1326
+ minDate?: Date;
1327
+ maxDate?: Date;
1328
+ disabledDate?: (date: Date) => boolean;
1329
+ /** Renders static, noninteractive content inside each day button without changing its grid or selection contract. */
1330
+ renderDay?: (day: CalendarDay) => ReactNode;
1331
+ locale?: string | string[];
1332
+ weekStartsOn?: 0 | 1;
1333
+ disabled?: boolean;
1334
+ }
1335
+ /** Inline month grid: it owns neither a field, a popup, nor dismissal. */
1336
+ declare function CalendarRoot({ value, defaultValue, onValueChange, month, defaultMonth, onMonthChange, minDate, maxDate, disabledDate, renderDay, locale, weekStartsOn, disabled, }: CalendarProps): react.JSX.Element;
1337
+ declare const Calendar: typeof CalendarRoot & {
1338
+ Skeleton: typeof CalendarSkeleton;
1339
+ };
1340
+
1341
+ interface ImageSkeletonProps {
1342
+ aspectRatio?: number;
1343
+ radius?: "none" | "sm" | "md" | "lg" | "xl";
1344
+ className?: string;
1345
+ }
1346
+ interface ImagePreviewGroupSkeletonProps extends ImageSkeletonProps {
1347
+ items?: number;
1348
+ }
1349
+ /** Reserves the same aspect-ratio and radius geometry as Image (ADR 0009). */
1350
+ declare function ImageSkeleton({ aspectRatio, radius, className, }: ImageSkeletonProps): react.JSX.Element;
1351
+ /** Mirrors the responsive thumbnail collection owned by Image.PreviewGroup. */
1352
+ declare function ImagePreviewGroupSkeleton({ items, aspectRatio, radius, className, }: ImagePreviewGroupSkeletonProps): react.JSX.Element;
1353
+
1354
+ type TokenReference = `var(--${string})`;
852
1355
  interface ImageProps {
853
1356
  src: string;
854
1357
  /** Empty string is allowed, and means "decorative" — but it has to be said out loud. */
@@ -858,17 +1361,59 @@ interface ImageProps {
858
1361
  /** A tiny data URI, blurred up while the real image loads. */
859
1362
  blurDataUrl?: string;
860
1363
  /** Flat colour to sit behind the image when there is no blur placeholder. */
861
- background?: string;
862
- fit?: 'cover' | 'contain';
863
- radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
864
- loading?: 'lazy' | 'eager';
1364
+ background?: TokenReference;
1365
+ fit?: "cover" | "contain";
1366
+ radius?: "none" | "sm" | "md" | "lg" | "xl";
1367
+ loading?: "lazy" | "eager";
1368
+ /** Opts this image out of its loading fade without changing its visibility. */
1369
+ motion?: boolean;
1370
+ className?: string;
1371
+ }
1372
+ declare function ImageRoot({ src, alt, aspectRatio, blurDataUrl, background, fit, radius, loading, motion, className, }: ImageProps): react.JSX.Element;
1373
+ interface ImagePreviewItem extends ImageProps {
1374
+ /** Stable identity for React and controlled collections. */
1375
+ id: string;
1376
+ /** Optional larger source used only inside the preview. */
1377
+ previewSrc?: string;
1378
+ /** Optional content shown below the fullscreen image. */
1379
+ caption?: ReactNode;
1380
+ }
1381
+ interface ImagePreviewLabels {
1382
+ close: string;
1383
+ previous: string;
1384
+ next: string;
1385
+ zoomIn: string;
1386
+ zoomOut: string;
1387
+ resetZoom: string;
1388
+ open: (item: ImagePreviewItem, index: number) => string;
1389
+ position: (current: number, total: number) => string;
1390
+ }
1391
+ interface ImagePreviewGroupProps {
1392
+ items: readonly ImagePreviewItem[];
1393
+ /** Accessible name for the thumbnail collection. */
1394
+ label: string;
1395
+ open?: boolean;
1396
+ defaultOpen?: boolean;
1397
+ onOpenChange?: (open: boolean) => void;
1398
+ index?: number;
1399
+ defaultIndex?: number;
1400
+ onIndexChange?: (index: number) => void;
1401
+ loop?: boolean;
1402
+ labels?: Partial<ImagePreviewLabels>;
1403
+ motion?: boolean;
865
1404
  className?: string;
866
1405
  }
1406
+ declare function ImagePreviewGroupRoot({ items, label, open, defaultOpen, onOpenChange, index, defaultIndex, onIndexChange, loop, labels: labelOverrides, motion, className, }: ImagePreviewGroupProps): react.JSX.Element;
867
1407
  /**
868
- * An `<img>` that reserves its space and fades in. It is not a Next.js Image and does not want to
869
- * be: no resizing service, no loader those belong to the framework the app already chose.
1408
+ * `Image` stays an image-loading composition. Preview is a separate compound contract because it
1409
+ * adds dialog semantics, keyboard navigation, focus ownership, and a zoom gesture (ADR 0014).
870
1410
  */
871
- declare function Image({ src, alt, aspectRatio, blurDataUrl, background, fit, radius, loading, className, }: ImageProps): react.JSX.Element;
1411
+ declare const Image: typeof ImageRoot & {
1412
+ PreviewGroup: typeof ImagePreviewGroupRoot & {
1413
+ Skeleton: typeof ImagePreviewGroupSkeleton;
1414
+ };
1415
+ Skeleton: typeof ImageSkeleton;
1416
+ };
872
1417
 
873
1418
  interface CarouselProps {
874
1419
  children: ReactNode;
@@ -1049,4 +1594,52 @@ interface StaggerProps {
1049
1594
  /** Wraps each child in a Reveal with an increasing delay — the list arrives, it does not pop. */
1050
1595
  declare function Stagger({ children, step, from, onView, className }: StaggerProps): react.JSX.Element;
1051
1596
 
1052
- export { Alert, type AlertProps, type Align, AutoComplete, type AutoplayConditions, Button, type ButtonProps, Carousel, type CarouselProps, type CarouselSkeletonProps, type CarouselSlideProps, Checkbox, type CheckboxProps, Checklist, type ChecklistProps, type ChecklistTask, Coachmark, type CoachmarkProps, type Column, type ComboboxOption, type ComboboxProps, type Command, CommandPalette, type CommandPaletteProps, DEFAULT_LABELS, type DataTableProps, type DataTableSkeletonProps, type DateInputProps, DatePicker, type DayCell, DialogClose, type DialogProps, Drawer, DrawerClose, type DrawerProps, Dropdown, type DropdownMenuProps, type DurationToken, Field, type FieldProps, type FileRules, Image, type ImageProps, Input, InputNumber, type Labels, LabelsProvider, type LabelsProviderProps, type MenuItem, type MenuSection, Modal, type MotionHelpers, MotionProvider, type MotionProviderProps, type MotionSettings, type NavItem, type NavSection, type NumberBounds, type NumberInputProps, type PageRange, Pagination, type PaginationProps, type PaletteCommand, Popover, type PopoverProps, RadioGroup, type RadioGroupProps, type RadioOption, type RankedCommand, Rate, type RateProps, type Rejection, Reveal, type RevealProps, type SeenStore, Select, type SelectOption, type SelectProps, type Side, Sidebar, type SidebarProps, type SortDirection, type SortState, type SpringPreset, Stagger, type StaggerProps, type StepTarget, Switch, type SwitchProps, type TabItem, Table, Tabs, type TabsProps, Tag, type TagProps, type TextInputProps, Textarea, type TextareaProps, type ThemeChoice, ThemeProvider, type TimeInputProps, TimePicker, type TimeValue, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, TopBar, type TopBarProps, Tour, type TourAction, type TourProps, type TourState, type TourStatus, type TourStep, Upload, type UploadProps, ariaSortFor, canStep, clamp, decimalPlaces, describeAccept, filterCommands, formatISO, formatTime, groupCommands, hasEnded, initialTourState, isOutOfRange, isSameDay, isTimeOutOfRange, matchesAccept, monthMatrix, nextSort, pageRange, parseDateInput, parseNumber, parseTime, partitionFiles, rankCommand, resolveTarget, shouldAutoplay, startOfDay, stepBy, timeOptions, timeToMinutes, tourReducer, useFieldWiring, useLabels, useMotionSettings, useTheme, useToast };
1597
+ interface BorderBeamProps {
1598
+ /** Content keeps its own semantics and interactions; the beam is decorative. */
1599
+ children: ReactNode;
1600
+ tone?: Tone;
1601
+ /** Controls the beam thickness and the geometry of its visible sweep. */
1602
+ size?: Size;
1603
+ /** Opt out of the decorative movement while retaining a visible border. */
1604
+ motion?: boolean;
1605
+ }
1606
+ /**
1607
+ * Wraps content with a decorative moving border. The overlay is deliberately
1608
+ * not an interaction layer: it is hidden from assistive technology and cannot
1609
+ * intercept pointer events.
1610
+ */
1611
+ declare function BorderBeam({ children, tone, size, motion }: BorderBeamProps): react.JSX.Element;
1612
+
1613
+ interface SplitterSkeletonProps {
1614
+ orientation?: SplitterOrientation;
1615
+ size?: number;
1616
+ handleSize?: SplitterHandleSize;
1617
+ }
1618
+ declare function SplitterSkeleton({ orientation, size, handleSize, }: SplitterSkeletonProps): react.JSX.Element;
1619
+
1620
+ type SplitterOrientation = 'horizontal' | 'vertical';
1621
+ type SplitterHandleSize = 'sm' | 'md' | 'lg';
1622
+ interface SplitterProps {
1623
+ /** Percentage assigned to the first pane. Supplying this makes the Splitter controlled. */
1624
+ size?: number;
1625
+ /** Initial percentage assigned to the first pane when uncontrolled. */
1626
+ defaultSize?: number;
1627
+ /** Lowest allowed percentage for the first pane. */
1628
+ minSize?: number;
1629
+ /** Highest allowed percentage for the first pane. */
1630
+ maxSize?: number;
1631
+ onSizeChange?: (size: number) => void;
1632
+ orientation?: SplitterOrientation;
1633
+ /** Handle geometry only; it does not alter the resize contract. */
1634
+ handleSize?: SplitterHandleSize;
1635
+ disabled?: boolean;
1636
+ /** Accessible name for the separator. */
1637
+ handleLabel?: string;
1638
+ children: ReactNode;
1639
+ }
1640
+ declare function SplitterRoot({ size, defaultSize, minSize, maxSize, onSizeChange, orientation, handleSize, disabled, handleLabel, children, }: SplitterProps): react.JSX.Element;
1641
+ declare const Splitter: typeof SplitterRoot & {
1642
+ Skeleton: typeof SplitterSkeleton;
1643
+ };
1644
+
1645
+ export { Alert, type AlertProps, type Align, AutoComplete, type AutoplayConditions, BorderBeam, type BorderBeamProps, Button, type ButtonProps, Calendar, type CalendarDay, type CalendarProps, CalendarSkeleton, type CalendarSkeletonProps, Carousel, type CarouselProps, type CarouselSkeletonProps, type CarouselSlideProps, Cascader, type CascaderOption, type CascaderProps, CascaderSkeleton, type CascaderSkeletonProps, Checkbox, type CheckboxProps, Checklist, type ChecklistProps, type ChecklistTask, Coachmark, type CoachmarkProps, Collapse, type CollapseItem, type CollapseProps, CollapseSkeleton, type CollapseSkeletonProps, ColorPicker, type ColorPickerOption, type ColorPickerProps, ColorPickerSkeleton, type Column, type ComboboxOption, type ComboboxProps, type Command, CommandPalette, type CommandPaletteProps, DEFAULT_LABELS, type DataTableProps, type DataTableSkeletonProps, type DateInputProps, DatePicker, type DayCell, DialogClose, type DialogProps, Drawer, DrawerClose, type DrawerProps, Dropdown, type DropdownMenuProps, type DurationToken, Field, type FieldProps, type FileRules, FloatButton, type FloatButtonPlacement, type FloatButtonProps, Image, type ImagePreviewGroupProps, type ImagePreviewGroupSkeletonProps, type ImagePreviewItem, type ImagePreviewLabels, type ImageProps, type ImageSkeletonProps, Input, InputNumber, type Labels, LabelsProvider, type LabelsProviderProps, type MentionOption, Mentions, type MentionsProps, MentionsSkeleton, type MentionsSkeletonProps, Menu, type MenuItem, type MenuProps, type MenuSection, type MenuSize, MenuSkeleton, type MenuSkeletonProps, type MenuTone, Modal, type ModalConfirmProps, type ModalSkeletonProps, type MotionHelpers, MotionProvider, type MotionProviderProps, type MotionSettings, type NavItem, type NavSection, type NumberBounds, type NumberInputProps, type PageRange, Pagination, type PaginationProps, type PaletteCommand, type PersistentMenuItem, Popconfirm, type PopconfirmProps, PopconfirmSkeleton, type PopconfirmSkeletonProps, Popover, type PopoverProps, RadioGroup, type RadioGroupProps, type RadioOption, type RankedCommand, Rate, type RateProps, type Rejection, Reveal, type RevealProps, type SeenStore, Select, type SelectOption, type SelectProps, type Side, Sidebar, type SidebarProps, Slider, type SliderOrientation, type SliderProps, type SliderRangeValue, SliderSkeleton, type SliderSkeletonProps, type SortDirection, type SortState, Splitter, type SplitterHandleSize, type SplitterOrientation, type SplitterProps, SplitterSkeleton, type SplitterSkeletonProps, type SpringPreset, Stagger, type StaggerProps, type StepTarget, Switch, type SwitchProps, type TabItem, Table, Tabs, type TabsProps, Tag, type TagProps, type TextInputProps, Textarea, type TextareaProps, type ThemeChoice, ThemeProvider, type TimeInputProps, TimePicker, type TimeValue, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, Tooltip, type TooltipProps, TopBar, type TopBarProps, Tour, type TourAction, type TourProps, type TourState, type TourStatus, type TourStep, Transfer, type TransferItem, type TransferProps, TransferSkeleton, type TransferSkeletonProps, Tree, type TreeNode, type TreeProps, TreeSelect, type TreeSelectProps, TreeSelectSkeleton, type TreeSelectSkeletonProps, type TreeSize, TreeSkeleton, type TreeSkeletonProps, type TreeTone, Upload, type UploadProps, Watermark, type WatermarkContent, type WatermarkDensity, type WatermarkDirection, type WatermarkProps, WatermarkSkeleton, type WatermarkSkeletonProps, ariaSortFor, canStep, clamp, decimalPlaces, describeAccept, filterCommands, formatISO, formatTime, groupCommands, hasEnded, initialTourState, isOutOfRange, isSameDay, isTimeOutOfRange, matchesAccept, monthMatrix, nextSort, pageRange, parseDateInput, parseNumber, parseTime, partitionFiles, rankCommand, resolveTarget, shouldAutoplay, startOfDay, stepBy, timeOptions, timeToMinutes, tourReducer, useFieldWiring, useLabels, useMotionSettings, useTheme, useToast };