@uniflowed/ui 0.2.0 → 0.4.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/index.js CHANGED
@@ -60,9 +60,9 @@
60
60
  // `@uniflowed/ui` and owns the scrim, the spacing and the tone of the
61
61
  // trigger — what a person means when they say "our dialog". None of the four
62
62
  // arguments above is reopened by it, because none of them is about the look:
63
- // the focus trap still arrives by upgrade, and the copied `TabsList` still takes
64
- // `renders* TabsTab` over a `TabsTab` that renders this package's tab, so the
65
- // constraint holds in the application's own file. `crates/uf_ui`'s header is
63
+ // the focus trap still arrives by upgrade, and the copied `Tabs.List` still
64
+ // takes `renders*` over a copied `Tabs.Tab` that renders this package's tab, so
65
+ // the constraint holds in the application's own file. `crates/uf_ui`'s header is
66
66
  // the decision in full.
67
67
  //
68
68
  // **What a caller gets without copying anything.** The reason people copy
@@ -309,6 +309,46 @@
309
309
  // primitive because that is the unit a reader looks for, the unit a bundler
310
310
  // drops, and the unit the WAI-ARIA practices are written in.
311
311
  //
312
+ // # One name per component: the namespace
313
+ //
314
+ // A component with parts is imported as one name and its parts are members of
315
+ // it — `import { Dialog } from "@uniflowed/ui"`, then `<Dialog.Root>`,
316
+ // `<Dialog.Trigger>`. There is no second spelling: `DialogRoot` and the other
317
+ // prefixed names this barrel used to export beside the namespaces are gone
318
+ // (ubugeeei-prod/uf#1453), because two names for one part is two things to
319
+ // search for, two things to autocomplete, and a code review that has to decide
320
+ // which one a file should use. `uf codemod` rewrites the old spelling.
321
+ //
322
+ // The rule, applied without exceptions:
323
+ //
324
+ // - **A component with parts is a namespace.** Its module exports each part
325
+ // unprefixed — `dialog.js` exports `Root`, `Trigger`, `Body` — and this file
326
+ // re-exports the module whole: `export * as Dialog from "./dialog.js"`. The
327
+ // namespace *is* the prefix. A module still declares each part under its
328
+ // full name (`component DialogRoot`) and exports it under the short one, so
329
+ // React DevTools, a component stack and an error name `DialogRoot` rather
330
+ // than one of forty `Root`s.
331
+ // - **A component that is one element is one name.** `Checkbox`, `Switch`,
332
+ // `Progress`, `ListBox`: there is no `Checkbox.Root` to write, because there
333
+ // is nothing else in the namespace to tell it from.
334
+ // - **Types, hooks and functions keep their names and stay flat.** `DialogRole`,
335
+ // `Side`, `toast`, `usePress`, `parseColor`: they are imported by name from
336
+ // this file, as before. A module's types are also reachable through its
337
+ // namespace (`Dialog.DialogRole`), because `export * as` carries everything a
338
+ // module exports; the flat name is the one the documentation uses.
339
+ //
340
+ // Why `export * as` and not the object literal (`export const Dialog = {
341
+ // Root: DialogRoot, … }`) this file used to build: a module namespace is
342
+ // static. A bundler sees `Dialog.Root` as a reference to one export of
343
+ // `dialog.js` and drops the parts a page never names, where an object literal
344
+ // is a value it must keep whole; Flow types `Dialog.Root` as exactly the
345
+ // component `dialog.js` declares, `renders*` constraints included; React
346
+ // Compiler sees an imported binding, not a property read off a mutable
347
+ // object. And `@uniflowed/vite`'s barrel rewrite turns
348
+ // `import { Dialog } from "@uniflowed/ui"` into
349
+ // `import * as Dialog from ".../dialog.js"` — one module, not the barrel —
350
+ // with no generated module standing in for the object.
351
+ //
312
352
  // `internal/` holds ten modules and nothing else, each a rule the primitives
313
353
  // must apply identically and a consumer must not be able to apply differently:
314
354
  // `merge-props.js` (the caller's props go on first, the component's semantics
@@ -329,201 +369,6 @@
329
369
  // bag of helpers: a module that cannot say what it is about does not belong in
330
370
  // this package.
331
371
 
332
- import {
333
- AccordionContent,
334
- AccordionHeader,
335
- AccordionItem,
336
- AccordionRoot,
337
- AccordionTrigger,
338
- } from "./accordion.js";
339
- import { AlertDescription, AlertRoot, AlertTitle } from "./alert.js";
340
- import {
341
- AlertDialogAction,
342
- AlertDialogBody,
343
- AlertDialogCancel,
344
- AlertDialogDescription,
345
- AlertDialogFooter,
346
- AlertDialogHeader,
347
- AlertDialogOverlay,
348
- AlertDialogRoot,
349
- AlertDialogTitle,
350
- AlertDialogTrigger,
351
- } from "./alert-dialog.js";
352
- import { AvatarFallback, AvatarImage, AvatarRoot } from "./avatar.js";
353
- import {
354
- BreadcrumbItem,
355
- BreadcrumbLink,
356
- BreadcrumbList,
357
- BreadcrumbPage,
358
- BreadcrumbRoot,
359
- BreadcrumbSeparator,
360
- } from "./breadcrumb.js";
361
- import {
362
- CarouselContent,
363
- CarouselItem,
364
- CarouselNext,
365
- CarouselPause,
366
- CarouselPrevious,
367
- CarouselRoot,
368
- } from "./carousel.js";
369
- import {
370
- CalendarDay,
371
- CalendarMonth,
372
- CalendarNext,
373
- CalendarPrevious,
374
- CalendarRoot,
375
- } from "./calendar.js";
376
- import { Checkbox } from "./checkbox.js";
377
- import { ContextMenuRoot, ContextMenuTrigger } from "./context-menu.js";
378
- import { CollapsibleContent, CollapsibleRoot, CollapsibleTrigger } from "./collapsible.js";
379
- import {
380
- ComboboxEmpty,
381
- ComboboxGroup,
382
- ComboboxGroupLabel,
383
- ComboboxInput,
384
- ComboboxLabel,
385
- ComboboxList,
386
- ComboboxOption,
387
- ComboboxRoot,
388
- ComboboxStatus,
389
- } from "./combobox.js";
390
- import {
391
- DatePickerCalendar,
392
- DatePickerInput,
393
- DatePickerRoot,
394
- DatePickerTrigger,
395
- } from "./date-picker.js";
396
- import {
397
- DialogBody,
398
- DialogClose,
399
- DialogDescription,
400
- DialogFooter,
401
- DialogHeader,
402
- DialogOverlay,
403
- DialogRoot,
404
- DialogTitle,
405
- DialogTrigger,
406
- } from "./dialog.js";
407
- import {
408
- DrawerBody,
409
- DrawerClose,
410
- DrawerDescription,
411
- DrawerFooter,
412
- DrawerHandle,
413
- DrawerHeader,
414
- DrawerOverlay,
415
- DrawerRoot,
416
- DrawerTitle,
417
- DrawerTrigger,
418
- } from "./drawer.js";
419
- import {
420
- FieldControl,
421
- FieldDescription,
422
- FieldError,
423
- FieldLabel,
424
- FieldRoot,
425
- FieldStatus,
426
- } from "./field.js";
427
- import { HoverCardBody, HoverCardRoot, HoverCardTrigger } from "./hover-card.js";
428
- import { InputOtpGroup, InputOtpRoot, InputOtpSeparator, InputOtpSlot } from "./input-otp.js";
429
- import {
430
- MenuBody,
431
- MenuCheckboxItem,
432
- MenuGroup,
433
- MenuItem,
434
- MenuLabel,
435
- MenuRadioGroup,
436
- MenuRadioItem,
437
- MenuRoot,
438
- MenuSeparator,
439
- MenuSub,
440
- MenuSubTrigger,
441
- MenuTrigger,
442
- } from "./menu.js";
443
- import { MenubarMenu, MenubarRoot, MenubarTrigger } from "./menubar.js";
444
- import {
445
- NavigationMenuBody,
446
- NavigationMenuItem,
447
- NavigationMenuLink,
448
- NavigationMenuList,
449
- NavigationMenuRoot,
450
- NavigationMenuTrigger,
451
- } from "./navigation-menu.js";
452
- import {
453
- PaginationContent,
454
- PaginationItem,
455
- PaginationNext,
456
- PaginationPrevious,
457
- PaginationRoot,
458
- } from "./pagination.js";
459
- import { PopoverBody, PopoverRoot, PopoverTrigger } from "./popover.js";
460
- import { Progress } from "./progress.js";
461
- import { RadioGroupIndicator, RadioGroupItem, RadioGroupRoot } from "./radio-group.js";
462
- import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "./resizable.js";
463
- import { ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaViewport } from "./scroll-area.js";
464
- import {
465
- SelectGroup,
466
- SelectGroupLabel,
467
- SelectLabel,
468
- SelectList,
469
- SelectOption,
470
- SelectRoot,
471
- SelectSeparator,
472
- SelectTrigger,
473
- SelectValue,
474
- } from "./select.js";
475
- import { Separator } from "./separator.js";
476
- import {
477
- SheetBody,
478
- SheetClose,
479
- SheetDescription,
480
- SheetFooter,
481
- SheetHeader,
482
- SheetOverlay,
483
- SheetRoot,
484
- SheetTitle,
485
- SheetTrigger,
486
- } from "./sheet.js";
487
- import {
488
- SidebarBody,
489
- SidebarFooter,
490
- SidebarHeader,
491
- SidebarItem,
492
- SidebarRoot,
493
- SidebarTrigger,
494
- } from "./sidebar.js";
495
- import { SkeletonBox, SkeletonRoot } from "./skeleton.js";
496
- import { SliderRange, SliderRoot, SliderThumb, SliderTrack } from "./slider.js";
497
- import { Switch } from "./switch.js";
498
- import {
499
- TableBody,
500
- TableCaption,
501
- TableCell,
502
- TableHead,
503
- TableHeader,
504
- TableRoot,
505
- TableRow,
506
- TableRowHeader,
507
- TableRowSelect,
508
- TableSelectAll,
509
- } from "./table.js";
510
- import { TabsList, TabsPanel, TabsRoot, TabsTab } from "./tabs.js";
511
- import {
512
- ToastAction,
513
- ToastClose,
514
- ToastDescription,
515
- ToastRegion,
516
- ToastRoot,
517
- ToastTitle,
518
- dismissAllToasts,
519
- dismissToast,
520
- toast,
521
- updateToast,
522
- } from "./toast.js";
523
- import { Toggle } from "./toggle.js";
524
- import { ToggleGroupItem, ToggleGroupRoot } from "./toggle-group.js";
525
- import { TooltipBody, TooltipProvider, TooltipRoot, TooltipTrigger } from "./tooltip.js";
526
-
527
372
  export type { AccordionType } from "./accordion.js";
528
373
  export type { AvatarStatus } from "./avatar.js";
529
374
  // A date, however a caller had one to hand: a `PlainDate` from
@@ -553,203 +398,6 @@ export type { Sort } from "./table.js";
553
398
  export type { Notification, ToastChanges, ToastOptions, Urgency } from "./toast.js";
554
399
  export type { ToggleGroupType } from "./toggle-group.js";
555
400
 
556
- /**
557
- * Every part, under the name its module gives it.
558
- *
559
- * This file is the only entry point the package has — `package.json` exports
560
- * `.` and nothing else — so a name a module exports and this list leaves out is
561
- * a name nobody can import. The namespaces below are the same parts spelled for
562
- * composing a page (`Dialog.Root`); these are for the wrapper, the preset and
563
- * the test that want one part (`import { DialogRoot } from "@uniflowed/ui"`).
564
- * `sideEffects: false` lets a bundler keep the module a name comes from and drop
565
- * the rest, and `uf_rsc` names that module, not the package, as the client
566
- * boundary of a Server Component that imports the name.
567
- */
568
- export {
569
- AccordionContent,
570
- AccordionHeader,
571
- AccordionItem,
572
- AccordionRoot,
573
- AccordionTrigger,
574
- AlertDescription,
575
- AlertDialogAction,
576
- AlertDialogBody,
577
- AlertDialogCancel,
578
- AlertDialogDescription,
579
- AlertDialogFooter,
580
- AlertDialogHeader,
581
- AlertDialogOverlay,
582
- AlertDialogRoot,
583
- AlertDialogTitle,
584
- AlertDialogTrigger,
585
- AlertRoot,
586
- AlertTitle,
587
- AvatarFallback,
588
- AvatarImage,
589
- AvatarRoot,
590
- BreadcrumbItem,
591
- BreadcrumbLink,
592
- BreadcrumbList,
593
- BreadcrumbPage,
594
- BreadcrumbRoot,
595
- BreadcrumbSeparator,
596
- CalendarDay,
597
- CalendarMonth,
598
- CalendarNext,
599
- CalendarPrevious,
600
- CalendarRoot,
601
- CarouselContent,
602
- CarouselItem,
603
- CarouselNext,
604
- CarouselPause,
605
- CarouselPrevious,
606
- CarouselRoot,
607
- CollapsibleContent,
608
- CollapsibleRoot,
609
- CollapsibleTrigger,
610
- ComboboxEmpty,
611
- ComboboxGroup,
612
- ComboboxGroupLabel,
613
- ComboboxInput,
614
- ComboboxLabel,
615
- ComboboxList,
616
- ComboboxOption,
617
- ComboboxRoot,
618
- ComboboxStatus,
619
- ContextMenuRoot,
620
- ContextMenuTrigger,
621
- DatePickerCalendar,
622
- DatePickerInput,
623
- DatePickerRoot,
624
- DatePickerTrigger,
625
- DialogBody,
626
- DialogClose,
627
- DialogDescription,
628
- DialogFooter,
629
- DialogHeader,
630
- DialogOverlay,
631
- DialogRoot,
632
- DialogTitle,
633
- DialogTrigger,
634
- DrawerBody,
635
- DrawerClose,
636
- DrawerDescription,
637
- DrawerFooter,
638
- DrawerHandle,
639
- DrawerHeader,
640
- DrawerOverlay,
641
- DrawerRoot,
642
- DrawerTitle,
643
- DrawerTrigger,
644
- FieldControl,
645
- FieldDescription,
646
- FieldError,
647
- FieldLabel,
648
- FieldRoot,
649
- FieldStatus,
650
- HoverCardBody,
651
- HoverCardRoot,
652
- HoverCardTrigger,
653
- InputOtpGroup,
654
- InputOtpRoot,
655
- InputOtpSeparator,
656
- InputOtpSlot,
657
- MenuBody,
658
- MenuCheckboxItem,
659
- MenuGroup,
660
- MenuItem,
661
- MenuLabel,
662
- MenuRadioGroup,
663
- MenuRadioItem,
664
- MenuRoot,
665
- MenuSeparator,
666
- MenuSub,
667
- MenuSubTrigger,
668
- MenuTrigger,
669
- MenubarMenu,
670
- MenubarRoot,
671
- MenubarTrigger,
672
- NavigationMenuBody,
673
- NavigationMenuItem,
674
- NavigationMenuLink,
675
- NavigationMenuList,
676
- NavigationMenuRoot,
677
- NavigationMenuTrigger,
678
- PaginationContent,
679
- PaginationItem,
680
- PaginationNext,
681
- PaginationPrevious,
682
- PaginationRoot,
683
- PopoverBody,
684
- PopoverRoot,
685
- PopoverTrigger,
686
- RadioGroupIndicator,
687
- RadioGroupItem,
688
- RadioGroupRoot,
689
- ResizableHandle,
690
- ResizablePanel,
691
- ResizablePanelGroup,
692
- ScrollAreaRoot,
693
- ScrollAreaScrollbar,
694
- ScrollAreaViewport,
695
- SelectGroup,
696
- SelectGroupLabel,
697
- SelectLabel,
698
- SelectList,
699
- SelectOption,
700
- SelectRoot,
701
- SelectSeparator,
702
- SelectTrigger,
703
- SelectValue,
704
- SheetBody,
705
- SheetClose,
706
- SheetDescription,
707
- SheetFooter,
708
- SheetHeader,
709
- SheetOverlay,
710
- SheetRoot,
711
- SheetTitle,
712
- SheetTrigger,
713
- SidebarBody,
714
- SidebarFooter,
715
- SidebarHeader,
716
- SidebarItem,
717
- SidebarRoot,
718
- SidebarTrigger,
719
- SkeletonBox,
720
- SkeletonRoot,
721
- SliderRange,
722
- SliderRoot,
723
- SliderThumb,
724
- SliderTrack,
725
- TableBody,
726
- TableCaption,
727
- TableCell,
728
- TableHead,
729
- TableHeader,
730
- TableRoot,
731
- TableRow,
732
- TableRowHeader,
733
- TableRowSelect,
734
- TableSelectAll,
735
- TabsList,
736
- TabsPanel,
737
- TabsRoot,
738
- TabsTab,
739
- ToastAction,
740
- ToastClose,
741
- ToastDescription,
742
- ToastRegion,
743
- ToastRoot,
744
- ToastTitle,
745
- ToggleGroupItem,
746
- ToggleGroupRoot,
747
- TooltipBody,
748
- TooltipProvider,
749
- TooltipRoot,
750
- TooltipTrigger,
751
- };
752
-
753
401
  /**
754
402
  * The five that are one component rather than a namespace of parts.
755
403
  *
@@ -758,7 +406,11 @@ export {
758
406
  * meter shell — keeps the role, state, keys and attributes while being their
759
407
  * element. See the module headers and the table in `packages/ui/ui.test.js`.
760
408
  */
761
- export { Checkbox, Progress, Separator, Switch, Toggle };
409
+ export { Checkbox } from "./checkbox.js";
410
+ export { Progress } from "./progress.js";
411
+ export { Separator } from "./separator.js";
412
+ export { Switch } from "./switch.js";
413
+ export { Toggle } from "./toggle.js";
762
414
 
763
415
  /**
764
416
  * Queueing a notification, from anywhere.
@@ -771,7 +423,7 @@ export { Checkbox, Progress, Separator, Switch, Toggle };
771
423
  * updateToast(id, { content: "Uploaded", duration: 4000 });
772
424
  * toast("Could not save", { urgency: "assertive" });
773
425
  */
774
- export { dismissAllToasts, dismissToast, toast, updateToast };
426
+ export { dismissAllToasts, dismissToast, toast, updateToast } from "./toast.js";
775
427
 
776
428
  /**
777
429
  * The interactions every part here is made of, for a control of the caller's own.
@@ -868,14 +520,7 @@ export type {
868
520
  * `role="group"` named by the label, and the description and the error describe
869
521
  * the set.
870
522
  */
871
- export const Field = {
872
- Root: FieldRoot,
873
- Label: FieldLabel,
874
- Control: FieldControl,
875
- Description: FieldDescription,
876
- Status: FieldStatus,
877
- Error: FieldError,
878
- };
523
+ export * as Field from "./field.js";
879
524
 
880
525
  /**
881
526
  * Tabs, with the arrow-key behaviour the pattern requires.
@@ -897,12 +542,7 @@ export const Field = {
897
542
  * the roving tab stop and the `aria-controls` a tab has. `Tabs.List`'s
898
543
  * `renders* Tabs.Tab` is unaffected, because it is the *part* it constrains.
899
544
  */
900
- export const Tabs = {
901
- Root: TabsRoot,
902
- List: TabsList,
903
- Tab: TabsTab,
904
- Panel: TabsPanel,
905
- };
545
+ export * as Tabs from "./tabs.js";
906
546
 
907
547
  /**
908
548
  * A button and the region it shows, with the three attributes that say so.
@@ -915,11 +555,7 @@ export const Tabs = {
915
555
  * <Collapsible.Content>…</Collapsible.Content>
916
556
  * </Collapsible.Root>
917
557
  */
918
- export const Collapsible = {
919
- Root: CollapsibleRoot,
920
- Trigger: CollapsibleTrigger,
921
- Content: CollapsibleContent,
922
- };
558
+ export * as Collapsible from "./collapsible.js";
923
559
 
924
560
  /**
925
561
  * A stack of disclosures that know about each other.
@@ -937,13 +573,7 @@ export const Collapsible = {
937
573
  * </Accordion.Item>
938
574
  * </Accordion.Root>
939
575
  */
940
- export const Accordion = {
941
- Root: AccordionRoot,
942
- Item: AccordionItem,
943
- Header: AccordionHeader,
944
- Trigger: AccordionTrigger,
945
- Content: AccordionContent,
946
- };
576
+ export * as Accordion from "./accordion.js";
947
577
 
948
578
  /**
949
579
  * Site navigation: a list of links behind buttons, and not a `menu`.
@@ -959,14 +589,7 @@ export const Accordion = {
959
589
  * </NavigationMenu.List>
960
590
  * </NavigationMenu.Root>
961
591
  */
962
- export const NavigationMenu = {
963
- Root: NavigationMenuRoot,
964
- List: NavigationMenuList,
965
- Item: NavigationMenuItem,
966
- Trigger: NavigationMenuTrigger,
967
- Body: NavigationMenuBody,
968
- Link: NavigationMenuLink,
969
- };
592
+ export * as NavigationMenu from "./navigation-menu.js";
970
593
 
971
594
  /**
972
595
  * One answer out of several, with the arrow keys that check as they move.
@@ -989,11 +612,7 @@ export const NavigationMenu = {
989
612
  * />
990
613
  * </Field.Root>
991
614
  */
992
- export const RadioGroup = {
993
- Root: RadioGroupRoot,
994
- Item: RadioGroupItem,
995
- Indicator: RadioGroupIndicator,
996
- };
615
+ export * as RadioGroup from "./radio-group.js";
997
616
 
998
617
  /**
999
618
  * A row of toggle buttons that behaves as one control.
@@ -1007,10 +626,7 @@ export const RadioGroup = {
1007
626
  * <ToggleGroup.Item value="italic">I</ToggleGroup.Item>
1008
627
  * </ToggleGroup.Root>
1009
628
  */
1010
- export const ToggleGroup = {
1011
- Root: ToggleGroupRoot,
1012
- Item: ToggleGroupItem,
1013
- };
629
+ export * as ToggleGroup from "./toggle-group.js";
1014
630
 
1015
631
  /**
1016
632
  * A modal dialog: focus moved in, kept in, and given back.
@@ -1035,17 +651,7 @@ export const ToggleGroup = {
1035
651
  * losing the id `aria-labelledby` points at. `AlertDialog`, `Sheet` and
1036
652
  * `Drawer` are made of these parts and pass `render` straight through.
1037
653
  */
1038
- export const Dialog = {
1039
- Root: DialogRoot,
1040
- Trigger: DialogTrigger,
1041
- Overlay: DialogOverlay,
1042
- Body: DialogBody,
1043
- Header: DialogHeader,
1044
- Footer: DialogFooter,
1045
- Title: DialogTitle,
1046
- Description: DialogDescription,
1047
- Close: DialogClose,
1048
- };
654
+ export * as Dialog from "./dialog.js";
1049
655
 
1050
656
  /**
1051
657
  * The confirmation: modal, announced as an alert, and not dismissible by a
@@ -1070,18 +676,7 @@ export const Dialog = {
1070
676
  * </AlertDialog.Body>
1071
677
  * </AlertDialog.Root>
1072
678
  */
1073
- export const AlertDialog = {
1074
- Root: AlertDialogRoot,
1075
- Trigger: AlertDialogTrigger,
1076
- Overlay: AlertDialogOverlay,
1077
- Body: AlertDialogBody,
1078
- Header: AlertDialogHeader,
1079
- Footer: AlertDialogFooter,
1080
- Title: AlertDialogTitle,
1081
- Description: AlertDialogDescription,
1082
- Action: AlertDialogAction,
1083
- Cancel: AlertDialogCancel,
1084
- };
679
+ export * as AlertDialog from "./alert-dialog.js";
1085
680
 
1086
681
  /**
1087
682
  * A modal dialog attached to an edge of the viewport.
@@ -1099,17 +694,7 @@ export const AlertDialog = {
1099
694
  * </Sheet.Body>
1100
695
  * </Sheet.Root>
1101
696
  */
1102
- export const Sheet = {
1103
- Root: SheetRoot,
1104
- Trigger: SheetTrigger,
1105
- Overlay: SheetOverlay,
1106
- Body: SheetBody,
1107
- Header: SheetHeader,
1108
- Footer: SheetFooter,
1109
- Title: SheetTitle,
1110
- Description: SheetDescription,
1111
- Close: SheetClose,
1112
- };
697
+ export * as Sheet from "./sheet.js";
1113
698
 
1114
699
  /**
1115
700
  * The sheet you can drag away, with the keyboard that can do everything the
@@ -1130,18 +715,7 @@ export const Sheet = {
1130
715
  * </Drawer.Body>
1131
716
  * </Drawer.Root>
1132
717
  */
1133
- export const Drawer = {
1134
- Root: DrawerRoot,
1135
- Trigger: DrawerTrigger,
1136
- Overlay: DrawerOverlay,
1137
- Body: DrawerBody,
1138
- Handle: DrawerHandle,
1139
- Header: DrawerHeader,
1140
- Footer: DrawerFooter,
1141
- Title: DrawerTitle,
1142
- Description: DrawerDescription,
1143
- Close: DrawerClose,
1144
- };
718
+ export * as Drawer from "./drawer.js";
1145
719
 
1146
720
  /**
1147
721
  * Navigation beside the page, which becomes a modal sheet on a narrow one.
@@ -1159,14 +733,7 @@ export const Drawer = {
1159
733
  * </Sidebar.Body>
1160
734
  * </Sidebar.Root>
1161
735
  */
1162
- export const Sidebar = {
1163
- Root: SidebarRoot,
1164
- Trigger: SidebarTrigger,
1165
- Header: SidebarHeader,
1166
- Body: SidebarBody,
1167
- Footer: SidebarFooter,
1168
- Item: SidebarItem,
1169
- };
736
+ export * as Sidebar from "./sidebar.js";
1170
737
 
1171
738
  /**
1172
739
  * Slides, one at a time, that a reader can stop and cannot fall into.
@@ -1186,14 +753,7 @@ export const Sidebar = {
1186
753
  * <Carousel.Next />
1187
754
  * </Carousel.Root>
1188
755
  */
1189
- export const Carousel = {
1190
- Root: CarouselRoot,
1191
- Content: CarouselContent,
1192
- Item: CarouselItem,
1193
- Pause: CarouselPause,
1194
- Previous: CarouselPrevious,
1195
- Next: CarouselNext,
1196
- };
756
+ export * as Carousel from "./carousel.js";
1197
757
 
1198
758
  /**
1199
759
  * An overflow container a keyboard can actually scroll.
@@ -1207,11 +767,7 @@ export const Carousel = {
1207
767
  * <ScrollArea.Scrollbar orientation="vertical" />
1208
768
  * </ScrollArea.Root>
1209
769
  */
1210
- export const ScrollArea = {
1211
- Root: ScrollAreaRoot,
1212
- Viewport: ScrollAreaViewport,
1213
- Scrollbar: ScrollAreaScrollbar,
1214
- };
770
+ export * as ScrollArea from "./scroll-area.js";
1215
771
 
1216
772
  /**
1217
773
  * A one-time code: six boxes drawn over one real `<input>`.
@@ -1233,12 +789,7 @@ export const ScrollArea = {
1233
789
  * </InputOtp.Group>
1234
790
  * </InputOtp.Root>
1235
791
  */
1236
- export const InputOtp = {
1237
- Root: InputOtpRoot,
1238
- Group: InputOtpGroup,
1239
- Slot: InputOtpSlot,
1240
- Separator: InputOtpSeparator,
1241
- };
792
+ export * as InputOtp from "./input-otp.js";
1242
793
 
1243
794
  /**
1244
795
  * A menu, with the keyboard map every native menu has had for thirty years.
@@ -1271,20 +822,7 @@ export const InputOtp = {
1271
822
  * item keeps the role, the id, the roving tab stop and the press that closes
1272
823
  * the tree. See the module header for why that is the answer to "no copy step".
1273
824
  */
1274
- export const Menu = {
1275
- Root: MenuRoot,
1276
- Trigger: MenuTrigger,
1277
- Body: MenuBody,
1278
- Item: MenuItem,
1279
- CheckboxItem: MenuCheckboxItem,
1280
- RadioGroup: MenuRadioGroup,
1281
- RadioItem: MenuRadioItem,
1282
- Separator: MenuSeparator,
1283
- Group: MenuGroup,
1284
- Label: MenuLabel,
1285
- Sub: MenuSub,
1286
- SubTrigger: MenuSubTrigger,
1287
- };
825
+ export * as Menu from "./menu.js";
1288
826
 
1289
827
  /**
1290
828
  * The same menu, opened by the right button — and by the keyboard.
@@ -1305,20 +843,7 @@ export const Menu = {
1305
843
  * </ContextMenu.Body>
1306
844
  * </ContextMenu.Root>
1307
845
  */
1308
- export const ContextMenu = {
1309
- Root: ContextMenuRoot,
1310
- Trigger: ContextMenuTrigger,
1311
- Body: MenuBody,
1312
- Item: MenuItem,
1313
- CheckboxItem: MenuCheckboxItem,
1314
- RadioGroup: MenuRadioGroup,
1315
- RadioItem: MenuRadioItem,
1316
- Separator: MenuSeparator,
1317
- Group: MenuGroup,
1318
- Label: MenuLabel,
1319
- Sub: MenuSub,
1320
- SubTrigger: MenuSubTrigger,
1321
- };
846
+ export * as ContextMenu from "./context-menu.js";
1322
847
 
1323
848
  /**
1324
849
  * A row of menus that behaves as one control: File, Edit, View.
@@ -1336,23 +861,7 @@ export const ContextMenu = {
1336
861
  * </Menubar.Menu>
1337
862
  * </Menubar.Root>
1338
863
  */
1339
- export const Menubar = {
1340
- Root: MenubarRoot,
1341
- Menu: MenubarMenu,
1342
- Trigger: MenubarTrigger,
1343
- // `Menu.Body` itself: a bar's menu is a root menu, and `menubar.js`'s header
1344
- // says why a wrapper with the same defaults would be a second place to drift.
1345
- Body: MenuBody,
1346
- Item: MenuItem,
1347
- CheckboxItem: MenuCheckboxItem,
1348
- RadioGroup: MenuRadioGroup,
1349
- RadioItem: MenuRadioItem,
1350
- Separator: MenuSeparator,
1351
- Group: MenuGroup,
1352
- Label: MenuLabel,
1353
- Sub: MenuSub,
1354
- SubTrigger: MenuSubTrigger,
1355
- };
864
+ export * as Menubar from "./menubar.js";
1356
865
 
1357
866
  /**
1358
867
  * A text field with a list of options, navigated without leaving the field.
@@ -1377,17 +886,7 @@ export const Menubar = {
1377
886
  * `Combobox.Label` names the field and `Combobox.GroupLabel` names a group of
1378
887
  * options, which is why there are two of them.
1379
888
  */
1380
- export const Combobox = {
1381
- Root: ComboboxRoot,
1382
- Label: ComboboxLabel,
1383
- Input: ComboboxInput,
1384
- List: ComboboxList,
1385
- Option: ComboboxOption,
1386
- Group: ComboboxGroup,
1387
- GroupLabel: ComboboxGroupLabel,
1388
- Empty: ComboboxEmpty,
1389
- Status: ComboboxStatus,
1390
- };
889
+ export * as Combobox from "./combobox.js";
1391
890
 
1392
891
  /**
1393
892
  * The other half of the combobox pattern: a button, a list, and no typing.
@@ -1415,17 +914,7 @@ export const Combobox = {
1415
914
  * options. shadcn has one `SelectLabel` and it is the second of those; a select
1416
915
  * needs both, so they are two parts here.
1417
916
  */
1418
- export const Select = {
1419
- Root: SelectRoot,
1420
- Label: SelectLabel,
1421
- Trigger: SelectTrigger,
1422
- Value: SelectValue,
1423
- List: SelectList,
1424
- Option: SelectOption,
1425
- Group: SelectGroup,
1426
- GroupLabel: SelectGroupLabel,
1427
- Separator: SelectSeparator,
1428
- };
917
+ export * as Select from "./select.js";
1429
918
 
1430
919
  /**
1431
920
  * A dialog that is not modal, anchored to the button that opened it.
@@ -1447,11 +936,7 @@ export const Select = {
1447
936
  * writes the trigger's width and the room it had as custom properties, so a
1448
937
  * stylesheet can point an arrow and cap a height without measuring anything.
1449
938
  */
1450
- export const Popover = {
1451
- Root: PopoverRoot,
1452
- Trigger: PopoverTrigger,
1453
- Body: PopoverBody,
1454
- };
939
+ export * as Popover from "./popover.js";
1455
940
 
1456
941
  /**
1457
942
  * A month of dates, as one stop in the page's tab order.
@@ -1477,13 +962,7 @@ export const Popover = {
1477
962
  * of what a disabled menu item does and the only way a reader can find out which
1478
963
  * days are unavailable.
1479
964
  */
1480
- export const Calendar = {
1481
- Root: CalendarRoot,
1482
- Previous: CalendarPrevious,
1483
- Next: CalendarNext,
1484
- Month: CalendarMonth,
1485
- Day: CalendarDay,
1486
- };
965
+ export * as Calendar from "./calendar.js";
1487
966
 
1488
967
  /**
1489
968
  * A field somebody types a date into, and a calendar for the times they would
@@ -1504,12 +983,7 @@ export const Calendar = {
1504
983
  * 8601 both ways unless a caller passes their own - `date-picker.js` says why a
1505
984
  * locale format is not this package's to guess.
1506
985
  */
1507
- export const DatePicker = {
1508
- Root: DatePickerRoot,
1509
- Input: DatePickerInput,
1510
- Trigger: DatePickerTrigger,
1511
- Calendar: DatePickerCalendar,
1512
- };
986
+ export * as DatePicker from "./date-picker.js";
1513
987
 
1514
988
  /**
1515
989
  * A phrase about a control, on hover and on focus, that WCAG would accept.
@@ -1533,12 +1007,7 @@ export const DatePicker = {
1533
1007
  * once instead of making the reader wait the delay again. A tooltip outside one
1534
1008
  * is a complete tooltip with a delay of its own.
1535
1009
  */
1536
- export const Tooltip = {
1537
- Provider: TooltipProvider,
1538
- Root: TooltipRoot,
1539
- Trigger: TooltipTrigger,
1540
- Body: TooltipBody,
1541
- };
1010
+ export * as Tooltip from "./tooltip.js";
1542
1011
 
1543
1012
  /**
1544
1013
  * The preview a name expands into: hovered, focused, and full of links.
@@ -1554,11 +1023,7 @@ export const Tooltip = {
1554
1023
  * </HoverCard.Body>
1555
1024
  * </HoverCard.Root>
1556
1025
  */
1557
- export const HoverCard = {
1558
- Root: HoverCardRoot,
1559
- Trigger: HoverCardTrigger,
1560
- Body: HoverCardBody,
1561
- };
1026
+ export * as HoverCard from "./hover-card.js";
1562
1027
 
1563
1028
  /**
1564
1029
  * Notifications, in a live region that was watching before them.
@@ -1575,14 +1040,7 @@ export const HoverCard = {
1575
1040
  * )}
1576
1041
  * </Toast.Region>
1577
1042
  */
1578
- export const Toast = {
1579
- Region: ToastRegion,
1580
- Root: ToastRoot,
1581
- Title: ToastTitle,
1582
- Description: ToastDescription,
1583
- Action: ToastAction,
1584
- Close: ToastClose,
1585
- };
1043
+ export * as Toast from "./toast.js";
1586
1044
 
1587
1045
  /**
1588
1046
  * A value in a range, with `role="slider"` on the thumb where it belongs.
@@ -1598,12 +1056,7 @@ export const Toast = {
1598
1056
  * <Slider.Thumb aria-label="Maximum" index={1} />
1599
1057
  * </Slider.Root>
1600
1058
  */
1601
- export const Slider = {
1602
- Root: SliderRoot,
1603
- Track: SliderTrack,
1604
- Range: SliderRange,
1605
- Thumb: SliderThumb,
1606
- };
1059
+ export * as Slider from "./slider.js";
1607
1060
 
1608
1061
  /**
1609
1062
  * Two panes and the splitter between them, operable from the keyboard.
@@ -1614,11 +1067,7 @@ export const Slider = {
1614
1067
  * <Resizable.Panel>Editor</Resizable.Panel>
1615
1068
  * </Resizable.PanelGroup>
1616
1069
  */
1617
- export const Resizable = {
1618
- PanelGroup: ResizablePanelGroup,
1619
- Panel: ResizablePanel,
1620
- Handle: ResizableHandle,
1621
- };
1070
+ export * as Resizable from "./resizable.js";
1622
1071
 
1623
1072
  /**
1624
1073
  * A table, with the four things about one nobody gets right by hand.
@@ -1653,18 +1102,7 @@ export const Resizable = {
1653
1102
  * </Table.Body>
1654
1103
  * </Table.Root>
1655
1104
  */
1656
- export const Table = {
1657
- Root: TableRoot,
1658
- Caption: TableCaption,
1659
- Header: TableHeader,
1660
- Body: TableBody,
1661
- Row: TableRow,
1662
- Head: TableHead,
1663
- RowHeader: TableRowHeader,
1664
- Cell: TableCell,
1665
- SelectAll: TableSelectAll,
1666
- RowSelect: TableRowSelect,
1667
- };
1105
+ export * as Table from "./table.js";
1668
1106
 
1669
1107
  /**
1670
1108
  * The navigation a paginated table needs, and the sentence that says it moved.
@@ -1677,13 +1115,7 @@ export const Table = {
1677
1115
  * </Pagination.Content>
1678
1116
  * </Pagination.Root>
1679
1117
  */
1680
- export const Pagination = {
1681
- Root: PaginationRoot,
1682
- Content: PaginationContent,
1683
- Item: PaginationItem,
1684
- Previous: PaginationPrevious,
1685
- Next: PaginationNext,
1686
- };
1118
+ export * as Pagination from "./pagination.js";
1687
1119
 
1688
1120
  /**
1689
1121
  * The trail above the page, read as places rather than as punctuation.
@@ -1706,14 +1138,7 @@ export const Pagination = {
1706
1138
  * crumb is a `Breadcrumb.Page` and not a link, because it is where the reader
1707
1139
  * already is.
1708
1140
  */
1709
- export const Breadcrumb = {
1710
- Root: BreadcrumbRoot,
1711
- List: BreadcrumbList,
1712
- Item: BreadcrumbItem,
1713
- Link: BreadcrumbLink,
1714
- Page: BreadcrumbPage,
1715
- Separator: BreadcrumbSeparator,
1716
- };
1141
+ export * as Breadcrumb from "./breadcrumb.js";
1717
1142
 
1718
1143
  /**
1719
1144
  * A callout, and the `live` that decides whether anybody is interrupted by it.
@@ -1736,11 +1161,7 @@ export const Breadcrumb = {
1736
1161
  * `role="alert"` is for. `alert.js`'s header says why there is no polite
1737
1162
  * version of this and why `Toast` is that instead.
1738
1163
  */
1739
- export const Alert = {
1740
- Root: AlertRoot,
1741
- Title: AlertTitle,
1742
- Description: AlertDescription,
1743
- };
1164
+ export * as Alert from "./alert.js";
1744
1165
 
1745
1166
  /**
1746
1167
  * A picture of a person, and the two states it is not in yet.
@@ -1757,11 +1178,7 @@ export const Alert = {
1757
1178
  * screen reader say it twice; pass `alt` where the picture is the only thing
1758
1179
  * identifying the person.
1759
1180
  */
1760
- export const Avatar = {
1761
- Root: AvatarRoot,
1762
- Image: AvatarImage,
1763
- Fallback: AvatarFallback,
1764
- };
1181
+ export * as Avatar from "./avatar.js";
1765
1182
 
1766
1183
  /**
1767
1184
  * The grey boxes, and the sentence that stops them being an empty page.
@@ -1777,24 +1194,10 @@ export const Avatar = {
1777
1194
  * `busy`; unmounting it takes the region away before it can say the wait is
1778
1195
  * over.
1779
1196
  */
1780
- export const Skeleton = {
1781
- Root: SkeletonRoot,
1782
- Box: SkeletonBox,
1783
- };
1197
+ export * as Skeleton from "./skeleton.js";
1784
1198
 
1785
1199
  export { I18nProvider, useLocale, useCollator, useFilter } from "./i18n-provider.js";
1786
- import {
1787
- NumberFieldRoot,
1788
- NumberFieldInput,
1789
- NumberFieldIncrement,
1790
- NumberFieldDecrement,
1791
- } from "./number-field.js";
1792
- export const NumberField = {
1793
- Root: NumberFieldRoot,
1794
- Input: NumberFieldInput,
1795
- Increment: NumberFieldIncrement,
1796
- Decrement: NumberFieldDecrement,
1797
- };
1200
+ export * as NumberField from "./number-field.js";
1798
1201
 
1799
1202
  export { ListBox } from "./list-box.js";
1800
1203
  export { GridList } from "./grid-list.js";
@@ -1804,72 +1207,18 @@ export type { CollectionItem, CollectionItemState, CollectionProps } from "./lis
1804
1207
 
1805
1208
  export type { Drop, DragAndDrop } from "./drag-drop.js";
1806
1209
  export { useDragAndDrop } from "./drag-drop.js";
1807
- import {
1808
- ColorPickerRoot,
1809
- ColorPickerInput,
1810
- ColorPickerField,
1811
- ColorPickerChannel,
1812
- ColorPickerSwatch,
1813
- } from "./color-picker.js";
1814
- export const ColorPicker = {
1815
- Root: ColorPickerRoot,
1816
- Input: ColorPickerInput,
1817
- Field: ColorPickerField,
1818
- Channel: ColorPickerChannel,
1819
- Swatch: ColorPickerSwatch,
1820
- };
1210
+ export * as ColorPicker from "./color-picker.js";
1821
1211
 
1822
1212
  export { DateField } from "./date-field.js";
1823
1213
  export { TimeField } from "./time-field.js";
1824
1214
  export type { DateFieldProps } from "./date-field.js";
1825
- import { RangeCalendarRoot } from "./range-calendar.js";
1826
- import {
1827
- DateRangePickerRoot,
1828
- DateRangePickerStartField,
1829
- DateRangePickerEndField,
1830
- DateRangePickerTrigger,
1831
- DateRangePickerCalendar,
1832
- } from "./date-range-picker.js";
1833
1215
  export type { DateRange } from "./range-calendar.js";
1834
- export const RangeCalendar = {
1835
- Root: RangeCalendarRoot,
1836
- Month: CalendarMonth,
1837
- Day: CalendarDay,
1838
- Previous: CalendarPrevious,
1839
- Next: CalendarNext,
1840
- };
1841
- export const DateRangePicker = {
1842
- Root: DateRangePickerRoot,
1843
- StartField: DateRangePickerStartField,
1844
- EndField: DateRangePickerEndField,
1845
- Trigger: DateRangePickerTrigger,
1846
- Calendar: DateRangePickerCalendar,
1847
- };
1216
+ export * as RangeCalendar from "./range-calendar.js";
1217
+ export * as DateRangePicker from "./date-range-picker.js";
1848
1218
 
1849
- export {
1850
- NumberFieldRoot,
1851
- NumberFieldInput,
1852
- NumberFieldIncrement,
1853
- NumberFieldDecrement,
1854
- parseNumber,
1855
- } from "./number-field.js";
1219
+ export { parseNumber } from "./number-field.js";
1856
1220
  export type { NumberFormatOptions } from "./number-field.js";
1857
- export {
1858
- ColorPickerRoot,
1859
- ColorPickerInput,
1860
- ColorPickerField,
1861
- ColorPickerChannel,
1862
- ColorPickerSwatch,
1863
- parseColor,
1864
- } from "./color-picker.js";
1865
- export { RangeCalendarRoot } from "./range-calendar.js";
1866
- export {
1867
- DateRangePickerRoot,
1868
- DateRangePickerStartField,
1869
- DateRangePickerEndField,
1870
- DateRangePickerTrigger,
1871
- DateRangePickerCalendar,
1872
- } from "./date-range-picker.js";
1221
+ export { parseColor } from "./color-picker.js";
1873
1222
  export type { Locale } from "./i18n-provider.js";
1874
1223
  export { startsWithLocale } from "./i18n-provider.js";
1875
1224