@mortenbrudvik/waveui 0.11.0 → 0.12.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.
Files changed (116) hide show
  1. package/README.md +97 -2
  2. package/dist/components/button/Link.cjs +1 -1
  3. package/dist/components/button/Link.cjs.map +1 -1
  4. package/dist/components/button/Link.mjs +4 -4
  5. package/dist/components/data-display/AvatarGroup.cjs +1 -1
  6. package/dist/components/data-display/AvatarGroup.cjs.map +1 -1
  7. package/dist/components/data-display/AvatarGroup.mjs +10 -10
  8. package/dist/components/data-display/InfoButton.cjs +1 -1
  9. package/dist/components/data-display/InfoButton.cjs.map +1 -1
  10. package/dist/components/data-display/InfoButton.mjs +12 -12
  11. package/dist/components/feedback/Toaster.cjs +1 -1
  12. package/dist/components/feedback/Toaster.cjs.map +1 -1
  13. package/dist/components/feedback/Toaster.mjs +235 -235
  14. package/dist/components/feedback/Toaster.mjs.map +1 -1
  15. package/dist/components/input/Combobox.cjs +1 -1
  16. package/dist/components/input/Combobox.cjs.map +1 -1
  17. package/dist/components/input/Combobox.mjs +176 -175
  18. package/dist/components/input/Combobox.mjs.map +1 -1
  19. package/dist/components/input/DatePicker.cjs +1 -1
  20. package/dist/components/input/DatePicker.cjs.map +1 -1
  21. package/dist/components/input/DatePicker.mjs +188 -187
  22. package/dist/components/input/DatePicker.mjs.map +1 -1
  23. package/dist/components/input/Dropdown.cjs +1 -1
  24. package/dist/components/input/Dropdown.cjs.map +1 -1
  25. package/dist/components/input/Dropdown.mjs +41 -40
  26. package/dist/components/input/Dropdown.mjs.map +1 -1
  27. package/dist/components/input/Option.cjs +1 -1
  28. package/dist/components/input/Option.cjs.map +1 -1
  29. package/dist/components/input/Option.mjs +89 -87
  30. package/dist/components/input/Option.mjs.map +1 -1
  31. package/dist/components/input/TagPicker.root.cjs +1 -1
  32. package/dist/components/input/TagPicker.root.cjs.map +1 -1
  33. package/dist/components/input/TagPicker.root.mjs +136 -135
  34. package/dist/components/input/TagPicker.root.mjs.map +1 -1
  35. package/dist/components/input/TimePicker.cjs +1 -1
  36. package/dist/components/input/TimePicker.cjs.map +1 -1
  37. package/dist/components/input/TimePicker.mjs +156 -154
  38. package/dist/components/input/TimePicker.mjs.map +1 -1
  39. package/dist/components/navigation/Menu.popover.cjs +1 -1
  40. package/dist/components/navigation/Menu.popover.cjs.map +1 -1
  41. package/dist/components/navigation/Menu.popover.mjs +137 -127
  42. package/dist/components/navigation/Menu.popover.mjs.map +1 -1
  43. package/dist/components/navigation/Menu.root.cjs +1 -1
  44. package/dist/components/navigation/Menu.root.cjs.map +1 -1
  45. package/dist/components/navigation/Menu.root.mjs +4 -4
  46. package/dist/components/overlays/Dialog.cjs +1 -1
  47. package/dist/components/overlays/Dialog.cjs.map +1 -1
  48. package/dist/components/overlays/Dialog.mjs +123 -123
  49. package/dist/components/overlays/Dialog.mjs.map +1 -1
  50. package/dist/components/overlays/Drawer.panel.cjs +1 -1
  51. package/dist/components/overlays/Drawer.panel.cjs.map +1 -1
  52. package/dist/components/overlays/Drawer.panel.mjs +12 -12
  53. package/dist/components/overlays/Drawer.panel.mjs.map +1 -1
  54. package/dist/components/overlays/Popover.cjs +1 -1
  55. package/dist/components/overlays/Popover.cjs.map +1 -1
  56. package/dist/components/overlays/Popover.mjs +173 -162
  57. package/dist/components/overlays/Popover.mjs.map +1 -1
  58. package/dist/components/overlays/TeachingPopover.cjs +1 -1
  59. package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
  60. package/dist/components/overlays/TeachingPopover.mjs +96 -91
  61. package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
  62. package/dist/components/overlays/Tooltip.cjs +1 -1
  63. package/dist/components/overlays/Tooltip.cjs.map +1 -1
  64. package/dist/components/overlays/Tooltip.mjs +47 -47
  65. package/dist/components/overlays/Tooltip.mjs.map +1 -1
  66. package/dist/components/portal/Portal.cjs +1 -1
  67. package/dist/components/portal/Portal.cjs.map +1 -1
  68. package/dist/components/portal/Portal.mjs +5 -5
  69. package/dist/components/table/DataGrid.cjs +1 -1
  70. package/dist/components/table/DataGrid.cjs.map +1 -1
  71. package/dist/components/table/DataGrid.mjs +1 -1
  72. package/dist/hooks/useDismiss.cjs.map +1 -1
  73. package/dist/hooks/useDismiss.mjs.map +1 -1
  74. package/dist/hooks/useFocusTrap.cjs.map +1 -1
  75. package/dist/hooks/useFocusTrap.mjs.map +1 -1
  76. package/dist/hooks/useFocusVisible.cjs +2 -0
  77. package/dist/hooks/useFocusVisible.cjs.map +1 -0
  78. package/dist/hooks/useFocusVisible.mjs +49 -0
  79. package/dist/hooks/useFocusVisible.mjs.map +1 -0
  80. package/dist/hooks/useFocusableGroup.cjs +2 -0
  81. package/dist/hooks/useFocusableGroup.cjs.map +1 -0
  82. package/dist/hooks/useFocusableGroup.mjs +70 -0
  83. package/dist/hooks/useFocusableGroup.mjs.map +1 -0
  84. package/dist/hooks/useModalLayer.cjs +1 -1
  85. package/dist/hooks/useModalLayer.cjs.map +1 -1
  86. package/dist/hooks/useModalLayer.mjs +4 -4
  87. package/dist/hooks/useModalOpen.cjs +2 -0
  88. package/dist/hooks/useModalOpen.cjs.map +1 -0
  89. package/dist/hooks/useModalOpen.mjs +14 -0
  90. package/dist/hooks/useModalOpen.mjs.map +1 -0
  91. package/dist/hooks/usePopupPosition.cjs +1 -1
  92. package/dist/hooks/usePopupPosition.cjs.map +1 -1
  93. package/dist/hooks/usePopupPosition.mjs +82 -53
  94. package/dist/hooks/usePopupPosition.mjs.map +1 -1
  95. package/dist/hooks/useResolvedTarget.cjs +2 -0
  96. package/dist/hooks/useResolvedTarget.cjs.map +1 -0
  97. package/dist/hooks/useResolvedTarget.mjs +37 -0
  98. package/dist/hooks/useResolvedTarget.mjs.map +1 -0
  99. package/dist/hooks/useRovingGrid.cjs +1 -1
  100. package/dist/hooks/useRovingGrid.cjs.map +1 -1
  101. package/dist/hooks/useRovingGrid.mjs +8 -57
  102. package/dist/hooks/useRovingGrid.mjs.map +1 -1
  103. package/dist/hooks/useRovingTabIndex.cjs +1 -1
  104. package/dist/hooks/useRovingTabIndex.cjs.map +1 -1
  105. package/dist/hooks/useRovingTabIndex.mjs +142 -107
  106. package/dist/hooks/useRovingTabIndex.mjs.map +1 -1
  107. package/dist/index.cjs +1 -1
  108. package/dist/index.d.cts +814 -18
  109. package/dist/index.d.ts +814 -18
  110. package/dist/index.mjs +120 -108
  111. package/dist/lib/layers.cjs +1 -1
  112. package/dist/lib/layers.cjs.map +1 -1
  113. package/dist/lib/layers.mjs +112 -109
  114. package/dist/lib/layers.mjs.map +1 -1
  115. package/dist/styles.css +1 -1
  116. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -9,111 +9,123 @@ import { createToaster as hn } from "./lib/toaster.mjs";
9
9
  import { useEventCallback as gn } from "./hooks/useEventCallback.mjs";
10
10
  import { useControllable as _n } from "./hooks/useControllable.mjs";
11
11
  import { useId as vn } from "./hooks/useId.mjs";
12
- import { useRovingTabIndex as yn } from "./hooks/useRovingTabIndex.mjs";
13
- import { useMergedRefs as bn } from "./hooks/useMergedRefs.mjs";
14
- import { useIsClient as xn } from "./hooks/useIsClient.mjs";
15
- import { useFieldControl as Sn } from "./hooks/useFieldControl.mjs";
16
- import { announce as Cn, useAnnounce as wn } from "./hooks/useAnnounce.mjs";
17
- import { usePresence as Tn } from "./hooks/usePresence.mjs";
18
- import { useActiveDescendant as En } from "./hooks/useActiveDescendant.mjs";
19
- import { collectOptionLabels as Dn, markListboxElement as On, useListbox as kn, useListboxOption as An } from "./hooks/useListbox.mjs";
20
- import { getThemeClassName as jn } from "./lib/theme.mjs";
21
- import { WaveProvider as Mn, useWaveTheme as Nn } from "./components/provider/WaveProvider.mjs";
22
- import { Portal as Pn } from "./components/portal/Portal.mjs";
23
- import { Button as Fn } from "./components/button/Button.mjs";
24
- import { CompoundButton as In } from "./components/button/CompoundButton.mjs";
25
- import { ToggleButton as Ln } from "./components/button/ToggleButton.mjs";
26
- import { SplitButton as Rn } from "./components/button/SplitButton.mjs";
27
- import { MenuButton as zn } from "./components/button/MenuButton.mjs";
28
- import { Link as Bn } from "./components/button/Link.mjs";
29
- import { ToolbarButton as Vn, ToolbarDivider as Hn, ToolbarGroup as Un, ToolbarRadioButton as Wn, ToolbarRadioGroup as Gn, ToolbarToggleButton as Kn } from "./components/button/Toolbar.parts.mjs";
30
- import { Toolbar as qn } from "./components/button/Toolbar.mjs";
31
- import { Input as Jn } from "./components/input/Input.mjs";
32
- import { Textarea as Yn } from "./components/input/Textarea.mjs";
33
- import { Field as Xn } from "./components/input/Field.mjs";
34
- import { Checkbox as Zn } from "./components/input/Checkbox.mjs";
35
- import { RadioGroup as Qn, RadioGroupItem as $n, RadioItem as er } from "./components/input/RadioGroup.mjs";
36
- import { Switch as tr } from "./components/input/Switch.mjs";
37
- import { Select as nr } from "./components/input/Select.mjs";
38
- import { SearchBox as rr } from "./components/input/SearchBox.mjs";
39
- import { Slider as ir } from "./components/input/Slider.mjs";
40
- import { SpinButton as ar } from "./components/input/SpinButton.mjs";
41
- import { Label as or } from "./components/input/Label.mjs";
42
- import { ListboxProvider as sr, ListboxSurface as cr, Option as lr, OptionGroup as ur, useListboxPopup as dr } from "./components/input/Option.mjs";
43
- import { Combobox as fr, ComboboxOption as pr, ComboboxOptionGroup as mr } from "./components/input/Combobox.mjs";
44
- import { Dropdown as hr, DropdownOption as gr, DropdownOptionGroup as _r } from "./components/input/Dropdown.mjs";
45
- import { Listbox as vr, ListboxOption as yr, ListboxOptionGroup as br } from "./components/input/Listbox.mjs";
46
- import { ColorSwatch as xr, EmptySwatch as Sr, ImageSwatch as Cr } from "./components/input/SwatchPicker.swatches.mjs";
47
- import { SwatchPicker as wr, SwatchPickerRow as Tr } from "./components/input/SwatchPicker.mjs";
48
- import { ColorPickerHexField as Er, ColorPickerPreview as Dr, ColorPickerSwatches as Or } from "./components/input/ColorPicker.parts.mjs";
49
- import { AlphaSlider as kr } from "./components/input/AlphaSlider.mjs";
50
- import { ColorArea as Ar } from "./components/input/ColorArea.mjs";
51
- import { ColorSlider as jr } from "./components/input/ColorSlider.mjs";
52
- import { ColorPicker as Mr } from "./components/input/ColorPicker.mjs";
53
- import { Tag as Nr } from "./components/data-display/Tag.mjs";
54
- import { TagGroup as Pr } from "./components/data-display/TagGroup.mjs";
55
- import { TagPickerOption as Fr } from "./components/input/TagPicker.option.mjs";
56
- import { TagPickerButton as Ir, TagPickerControl as Lr, TagPickerGroup as Rr, TagPickerInput as zr, TagPickerList as Br, TagPickerOptionGroup as Vr } from "./components/input/TagPicker.parts.mjs";
57
- import { TagPicker as Hr } from "./components/input/TagPicker.mjs";
58
- import { RatingItem as Ur } from "./components/input/Rating.item.mjs";
59
- import { Rating as Wr, RatingDisplay as Gr, RatingDisplayItem as Kr } from "./components/input/Rating.mjs";
60
- import { TimePicker as qr } from "./components/input/TimePicker.mjs";
61
- import { Calendar as Jr } from "./components/input/Calendar.mjs";
62
- import { DatePicker as Yr } from "./components/input/DatePicker.mjs";
63
- import { Avatar as Xr } from "./components/data-display/Avatar.mjs";
64
- import { AvatarGroup as Zr } from "./components/data-display/AvatarGroup.mjs";
65
- import { Badge as Qr } from "./components/data-display/Badge.mjs";
66
- import { PresenceBadge as $r } from "./components/data-display/PresenceBadge.mjs";
67
- import { CounterBadge as ei } from "./components/data-display/CounterBadge.mjs";
68
- import { InteractionTag as ti, InteractionTagPrimary as ni, InteractionTagSecondary as ri } from "./components/data-display/InteractionTag.mjs";
69
- import { Persona as ii } from "./components/data-display/Persona.mjs";
70
- import { Divider as ai } from "./components/data-display/Divider.mjs";
71
- import { InfoButton as oi } from "./components/data-display/InfoButton.mjs";
72
- import { InfoLabel as si } from "./components/data-display/InfoLabel.mjs";
73
- import { Image as ci } from "./components/data-display/Image.mjs";
74
- import { List as li, ListItem as ui } from "./components/data-display/List.mjs";
75
- import { Text as di } from "./components/typography/Text.mjs";
76
- import { Card as fi, CardBody as pi, CardFooter as mi, CardHeader as hi } from "./components/layout/Card.mjs";
77
- import { Accordion as gi, AccordionItem as _i, AccordionPanel as vi, AccordionTrigger as yi } from "./components/layout/Accordion.mjs";
78
- import { TabList as bi, TabListPanel as xi, TabListPanels as Si, TabListTab as Ci } from "./components/layout/TabList.mjs";
79
- import { TreeItem as wi } from "./components/layout/Tree.core.mjs";
80
- import { TreeItemPersonaLayout as Ti } from "./components/layout/Tree.itemPersonaLayout.mjs";
81
- import { Tree as Ei } from "./components/layout/Tree.mjs";
82
- import { Carousel as Di, CarouselItem as Oi } from "./components/layout/Carousel.mjs";
83
- import { Overflow as ki, OverflowItem as Ai, useIsOverflowItemVisible as ji, useIsOverflowing as Mi, useOverflowMenu as Ni } from "./components/layout/Overflow.mjs";
84
- import { Stack as Pi } from "./components/layout/Stack.mjs";
85
- import { Flex as Fi } from "./components/layout/Flex.mjs";
86
- import { Grid as Ii } from "./components/layout/Grid.mjs";
87
- import { Breadcrumb as Li, BreadcrumbItem as Ri } from "./components/navigation/Breadcrumb.mjs";
88
- import { MenuDivider as zi, MenuItem as Bi } from "./components/navigation/Menu.items.mjs";
89
- import { MenuGroup as Vi, MenuGroupHeader as Hi } from "./components/navigation/Menu.group.mjs";
90
- import { MenuItemLink as Ui } from "./components/navigation/Menu.link.mjs";
91
- import { MenuPopover as Wi } from "./components/navigation/Menu.popover.mjs";
92
- import { MenuTrigger as Gi } from "./components/navigation/Menu.trigger.mjs";
93
- import { MenuItemCheckbox as Ki, MenuItemRadio as qi, MenuItemSwitch as Ji } from "./components/navigation/Menu.selectable.mjs";
94
- import { MenuSplitGroup as Yi } from "./components/navigation/Menu.splitGroup.mjs";
95
- import { Menu as Xi } from "./components/navigation/Menu.mjs";
96
- import { NavAppItem as Zi, NavAppItemStatic as Qi, NavDivider as $i, NavSectionHeader as ea } from "./components/navigation/Nav.parts.mjs";
97
- import { Nav as ta, NavCategory as na, NavItem as ra, NavSubItem as ia } from "./components/navigation/Nav.mjs";
98
- import { NavDrawer as aa, NavDrawerBody as oa, NavDrawerFooter as sa, NavDrawerHeader as ca } from "./components/navigation/NavDrawer.mjs";
99
- import { Hamburger as la } from "./components/navigation/Hamburger.mjs";
100
- import { Pagination as ua } from "./components/navigation/Pagination.mjs";
101
- import { Stepper as da, StepperStep as fa } from "./components/navigation/Stepper.mjs";
102
- import { MessageBarActions as pa, MessageBarTitle as ma } from "./components/feedback/MessageBar.parts.mjs";
103
- import { MessageBar as ha } from "./components/feedback/MessageBar.mjs";
104
- import { ProgressBar as ga } from "./components/feedback/ProgressBar.mjs";
105
- import { Spinner as _a } from "./components/feedback/Spinner.mjs";
106
- import { Skeleton as va, SkeletonGroup as ya } from "./components/feedback/Skeleton.mjs";
107
- import { ToastBody as ba, ToastClose as xa, ToastFooter as Sa, ToastTitle as Ca } from "./components/feedback/Toast.parts.mjs";
108
- import { Toaster as wa, useToastController as Ta } from "./components/feedback/Toaster.mjs";
109
- import { Toast as Ea } from "./components/feedback/Toast.mjs";
110
- import { Dialog as Da, DialogClose as Oa, DialogContent as ka, DialogFooter as Aa, DialogTitle as ja, DialogTrigger as Ma } from "./components/overlays/Dialog.mjs";
111
- import { Popover as Na, PopoverContent as Pa, PopoverTrigger as Fa } from "./components/overlays/Popover.mjs";
112
- import { Tooltip as Ia } from "./components/overlays/Tooltip.mjs";
113
- import { DrawerBody as La, DrawerClose as Ra, DrawerFooter as za, DrawerHeader as Ba, DrawerHeaderNavigation as Va, DrawerHeaderTitle as Ha, DrawerTitle as Ua, DrawerTrigger as Wa } from "./components/overlays/Drawer.parts.mjs";
114
- import { Drawer as Ga } from "./components/overlays/Drawer.mjs";
115
- import { TeachingPopover as Ka } from "./components/overlays/TeachingPopover.mjs";
116
- import { Table as qa, TableBody as Ja, TableCell as Ya, TableHead as Xa, TableHeadCell as Za, TableHeader as Qa, TableHeaderCell as $a, TableRow as eo } from "./components/table/Table.mjs";
117
- import { DataGrid as to, DataGridBody as no, DataGridCell as ro, DataGridHeader as io, DataGridHeaderCell as ao, DataGridRow as oo } from "./components/table/DataGrid.mjs";
118
- import { Presence as so } from "./components/motion/Presence.mjs";
119
- export { gi as Accordion, _i as AccordionItem, vi as AccordionPanel, yi as AccordionTrigger, kr as AlphaSlider, Xr as Avatar, Zr as AvatarGroup, Qr as Badge, Li as Breadcrumb, Ri as BreadcrumbItem, Fn as Button, Jr as Calendar, fi as Card, pi as CardBody, mi as CardFooter, hi as CardHeader, Di as Carousel, Oi as CarouselItem, Zn as Checkbox, Ar as ColorArea, Mr as ColorPicker, Er as ColorPickerHexField, Dr as ColorPickerPreview, Or as ColorPickerSwatches, jr as ColorSlider, xr as ColorSwatch, fr as Combobox, pr as ComboboxOption, mr as ComboboxOptionGroup, In as CompoundButton, ei as CounterBadge, to as DataGrid, no as DataGridBody, ro as DataGridCell, io as DataGridHeader, ao as DataGridHeaderCell, oo as DataGridRow, Yr as DatePicker, Da as Dialog, Oa as DialogClose, ka as DialogContent, Aa as DialogFooter, ja as DialogTitle, Ma as DialogTrigger, ai as Divider, Ga as Drawer, La as DrawerBody, Ra as DrawerClose, za as DrawerFooter, Ba as DrawerHeader, Va as DrawerHeaderNavigation, Ha as DrawerHeaderTitle, Ua as DrawerTitle, Wa as DrawerTrigger, hr as Dropdown, gr as DropdownOption, _r as DropdownOptionGroup, Sr as EmptySwatch, Xn as Field, Fi as Flex, Ii as Grid, la as Hamburger, ci as Image, Cr as ImageSwatch, oi as InfoButton, si as InfoLabel, Jn as Input, ti as InteractionTag, ni as InteractionTagPrimary, ri as InteractionTagSecondary, or as Label, Bn as Link, li as List, ui as ListItem, vr as Listbox, yr as ListboxOption, br as ListboxOptionGroup, sr as ListboxProvider, cr as ListboxSurface, Xi as Menu, zn as MenuButton, zi as MenuDivider, Vi as MenuGroup, Hi as MenuGroupHeader, Bi as MenuItem, Ki as MenuItemCheckbox, Ui as MenuItemLink, qi as MenuItemRadio, Ji as MenuItemSwitch, Wi as MenuPopover, Yi as MenuSplitGroup, Gi as MenuTrigger, ha as MessageBar, pa as MessageBarActions, ma as MessageBarTitle, ta as Nav, Zi as NavAppItem, Qi as NavAppItemStatic, na as NavCategory, $i as NavDivider, aa as NavDrawer, oa as NavDrawerBody, sa as NavDrawerFooter, ca as NavDrawerHeader, ra as NavItem, ea as NavSectionHeader, ia as NavSubItem, lr as Option, ur as OptionGroup, ki as Overflow, Ai as OverflowItem, ua as Pagination, ii as Persona, Na as Popover, Pa as PopoverContent, Fa as PopoverTrigger, Pn as Portal, so as Presence, $r as PresenceBadge, ga as ProgressBar, Qn as RadioGroup, $n as RadioGroupItem, er as RadioItem, Wr as Rating, Gr as RatingDisplay, Kr as RatingDisplayItem, Ur as RatingItem, rr as SearchBox, nr as Select, va as Skeleton, ya as SkeletonGroup, ir as Slider, ar as SpinButton, _a as Spinner, Rn as SplitButton, Pi as Stack, da as Stepper, fa as StepperStep, wr as SwatchPicker, Tr as SwatchPickerRow, tr as Switch, bi as TabList, xi as TabListPanel, Si as TabListPanels, Ci as TabListTab, qa as Table, Ja as TableBody, Ya as TableCell, Xa as TableHead, Za as TableHeadCell, Qa as TableHeader, $a as TableHeaderCell, eo as TableRow, Nr as Tag, Pr as TagGroup, Hr as TagPicker, Ir as TagPickerButton, Lr as TagPickerControl, Rr as TagPickerGroup, zr as TagPickerInput, Br as TagPickerList, Fr as TagPickerOption, Vr as TagPickerOptionGroup, Ka as TeachingPopover, di as Text, Yn as Textarea, qr as TimePicker, Ea as Toast, ba as ToastBody, xa as ToastClose, Sa as ToastFooter, Ca as ToastTitle, wa as Toaster, Ln as ToggleButton, qn as Toolbar, Vn as ToolbarButton, Hn as ToolbarDivider, Un as ToolbarGroup, Wn as ToolbarRadioButton, Gn as ToolbarRadioGroup, Kn as ToolbarToggleButton, Ia as Tooltip, Ei as Tree, wi as TreeItem, Ti as TreeItemPersonaLayout, Mn as WaveProvider, a as accordionClassNames, o as accordionItemClassNames, s as accordionPanelClassNames, c as accordionTriggerClassNames, cn as addDays, ln as addMonths, l as alphaSliderClassNames, Cn as announce, u as avatarClassNames, d as avatarGroupClassNames, f as badgeClassNames, p as breadcrumbClassNames, m as breadcrumbItemClassNames, h as buttonClassNames, g as calendarClassNames, _ as cardBodyClassNames, v as cardClassNames, y as cardFooterClassNames, b as cardHeaderClassNames, x as carouselClassNames, S as carouselItemClassNames, C as checkboxClassNames, e as cn, Dn as collectOptionLabels, w as colorAreaClassNames, T as colorPickerClassNames, E as colorPickerHexFieldClassNames, D as colorPickerPreviewClassNames, O as colorPickerSwatchesClassNames, k as colorSliderClassNames, A as colorSwatchClassNames, j as comboboxClassNames, r as composeEventHandlers, M as compoundButtonClassNames, N as counterBadgeClassNames, hn as createToaster, P as dataGridBodyClassNames, F as dataGridCellClassNames, I as dataGridClassNames, L as dataGridHeaderCellClassNames, R as dataGridHeaderClassNames, z as dataGridRowClassNames, B as datePickerClassNames, V as dialogContentClassNames, H as dialogFooterClassNames, U as dialogTitleClassNames, W as dividerClassNames, G as drawerBodyClassNames, K as drawerClassNames, q as drawerFooterClassNames, J as drawerHeaderClassNames, Y as drawerHeaderNavigationClassNames, X as drawerHeaderTitleClassNames, Z as drawerTitleClassNames, Q as dropdownClassNames, $ as emptySwatchClassNames, ee as fieldClassNames, te as flexClassNames, jn as getThemeClassName, un as getWeekNumber, ne as gridClassNames, re as hamburgerClassNames, pn as hexToHsv, mn as hsvToHex, ie as imageClassNames, ae as imageSwatchClassNames, oe as infoButtonClassNames, se as infoLabelClassNames, ce as inputClassNames, le as interactionTagClassNames, ue as interactionTagPrimaryClassNames, de as interactionTagSecondaryClassNames, dn as isSameDay, fe as labelClassNames, pe as linkClassNames, me as listClassNames, he as listItemClassNames, ge as listboxClassNames, _e as listboxSurfaceClassNames, On as markListboxElement, ve as menuButtonClassNames, ye as menuClassNames, be as menuDividerClassNames, xe as menuGroupClassNames, Se as menuGroupHeaderClassNames, Ce as menuItemCheckboxClassNames, we as menuItemClassNames, Te as menuItemLinkClassNames, Ee as menuItemRadioClassNames, De as menuItemSwitchClassNames, Oe as menuPopoverClassNames, ke as menuSplitGroupClassNames, i as mergeRefs, Ae as messageBarActionsClassNames, je as messageBarClassNames, Me as messageBarTitleClassNames, Ne as navAppItemClassNames, Pe as navAppItemStaticClassNames, Fe as navCategoryClassNames, Ie as navClassNames, Le as navDividerClassNames, Re as navDrawerBodyClassNames, ze as navDrawerClassNames, Be as navDrawerFooterClassNames, Ve as navDrawerHeaderClassNames, He as navItemClassNames, Ue as navSectionHeaderClassNames, We as navSubItemClassNames, Ge as optionClassNames, Ke as optionGroupClassNames, qe as overflowClassNames, Je as overflowItemClassNames, Ye as paginationClassNames, Xe as personaClassNames, Ze as popoverContentClassNames, Qe as portalClassNames, $e as presenceBadgeClassNames, et as progressBarClassNames, tt as radioGroupClassNames, nt as radioGroupItemClassNames, rt as ratingClassNames, it as ratingDisplayClassNames, at as ratingItemClassNames, t as renderSlot, n as resolveSlot, ot as searchBoxClassNames, st as selectClassNames, ct as skeletonClassNames, lt as skeletonGroupClassNames, ut as sliderClassNames, dt as spinButtonClassNames, ft as spinnerClassNames, pt as splitButtonClassNames, mt as stackClassNames, fn as startOfWeek, ht as stepperClassNames, gt as stepperStepClassNames, _t as swatchPickerClassNames, vt as swatchPickerRowClassNames, yt as switchClassNames, bt as tabListClassNames, xt as tabListPanelClassNames, St as tabListPanelsClassNames, Ct as tabListTabClassNames, wt as tableBodyClassNames, Tt as tableCellClassNames, Et as tableClassNames, Dt as tableHeaderCellClassNames, Ot as tableHeaderClassNames, kt as tableRowClassNames, At as tagClassNames, jt as tagGroupClassNames, Mt as tagPickerButtonClassNames, Nt as tagPickerClassNames, Pt as tagPickerControlClassNames, Ft as tagPickerGroupClassNames, It as tagPickerInputClassNames, Lt as tagPickerListClassNames, Rt as tagPickerOptionClassNames, zt as teachingPopoverClassNames, Bt as textClassNames, Vt as textareaClassNames, Ht as timePickerClassNames, Ut as toastBodyClassNames, Wt as toastClassNames, Gt as toastFooterClassNames, Kt as toastTitleClassNames, qt as toasterClassNames, Jt as toggleButtonClassNames, Yt as toolbarButtonClassNames, Xt as toolbarClassNames, Zt as toolbarDividerClassNames, Qt as toolbarGroupClassNames, $t as toolbarRadioButtonClassNames, en as toolbarRadioGroupClassNames, tn as toolbarToggleButtonClassNames, nn as tooltipClassNames, rn as treeClassNames, an as treeItemClassNames, on as treeItemPersonaLayoutClassNames, En as useActiveDescendant, wn as useAnnounce, _n as useControllable, gn as useEventCallback, Sn as useFieldControl, vn as useId, xn as useIsClient, ji as useIsOverflowItemVisible, Mi as useIsOverflowing, kn as useListbox, An as useListboxOption, dr as useListboxPopup, bn as useMergedRefs, Ni as useOverflowMenu, Tn as usePresence, yn as useRovingTabIndex, Ta as useToastController, Nn as useWaveTheme, sn as waveProviderClassNames };
12
+ import { getFirstTabbable as yn, getLastTabbable as bn, getTabbableElements as xn } from "./lib/focus.mjs";
13
+ import { useRovingTabIndex as Sn } from "./hooks/useRovingTabIndex.mjs";
14
+ import { useMergedRefs as Cn } from "./hooks/useMergedRefs.mjs";
15
+ import { useIsClient as wn } from "./hooks/useIsClient.mjs";
16
+ import { useFieldControl as Tn } from "./hooks/useFieldControl.mjs";
17
+ import { announce as En, useAnnounce as Dn } from "./hooks/useAnnounce.mjs";
18
+ import { usePresence as On } from "./hooks/usePresence.mjs";
19
+ import { useActiveDescendant as kn } from "./hooks/useActiveDescendant.mjs";
20
+ import { collectOptionLabels as An, markListboxElement as jn, useListbox as Mn, useListboxOption as Nn } from "./hooks/useListbox.mjs";
21
+ import { getThemeClassName as Pn } from "./lib/theme.mjs";
22
+ import { WaveProvider as Fn, useWaveTheme as In } from "./components/provider/WaveProvider.mjs";
23
+ import { usePopupPosition as Ln } from "./hooks/usePopupPosition.mjs";
24
+ import { hasOpenModal as Rn, modalAllowProps as zn } from "./lib/layers.mjs";
25
+ import { DismissLayerProvider as Bn, useDismiss as Vn } from "./hooks/useDismiss.mjs";
26
+ import { useFocusTrap as Hn, useInitialFocus as Un } from "./hooks/useFocusTrap.mjs";
27
+ import { useRestoreFocus as Wn } from "./hooks/useRestoreFocus.mjs";
28
+ import { useModalLayer as Gn } from "./hooks/useModalLayer.mjs";
29
+ import { useModalOpen as Kn } from "./hooks/useModalOpen.mjs";
30
+ import { useFocusVisible as qn } from "./hooks/useFocusVisible.mjs";
31
+ import { useFocusableGroup as Jn } from "./hooks/useFocusableGroup.mjs";
32
+ import { useGridNavigation as Yn } from "./components/table/useGridNavigation.mjs";
33
+ import { focusRing as Xn, focusRingInset as Zn, inputFocus as Qn, inputFocusWithin as $n } from "./lib/styles.mjs";
34
+ import { Portal as er } from "./components/portal/Portal.mjs";
35
+ import { Button as tr } from "./components/button/Button.mjs";
36
+ import { CompoundButton as nr } from "./components/button/CompoundButton.mjs";
37
+ import { ToggleButton as rr } from "./components/button/ToggleButton.mjs";
38
+ import { SplitButton as ir } from "./components/button/SplitButton.mjs";
39
+ import { MenuButton as ar } from "./components/button/MenuButton.mjs";
40
+ import { Link as or } from "./components/button/Link.mjs";
41
+ import { ToolbarButton as sr, ToolbarDivider as cr, ToolbarGroup as lr, ToolbarRadioButton as ur, ToolbarRadioGroup as dr, ToolbarToggleButton as fr } from "./components/button/Toolbar.parts.mjs";
42
+ import { Toolbar as pr } from "./components/button/Toolbar.mjs";
43
+ import { Input as mr } from "./components/input/Input.mjs";
44
+ import { Textarea as hr } from "./components/input/Textarea.mjs";
45
+ import { Field as gr } from "./components/input/Field.mjs";
46
+ import { Checkbox as _r } from "./components/input/Checkbox.mjs";
47
+ import { RadioGroup as vr, RadioGroupItem as yr, RadioItem as br } from "./components/input/RadioGroup.mjs";
48
+ import { Switch as xr } from "./components/input/Switch.mjs";
49
+ import { Select as Sr } from "./components/input/Select.mjs";
50
+ import { SearchBox as Cr } from "./components/input/SearchBox.mjs";
51
+ import { Slider as wr } from "./components/input/Slider.mjs";
52
+ import { SpinButton as Tr } from "./components/input/SpinButton.mjs";
53
+ import { Label as Er } from "./components/input/Label.mjs";
54
+ import { ListboxProvider as Dr, ListboxSurface as Or, Option as kr, OptionGroup as Ar, useListboxPopup as jr } from "./components/input/Option.mjs";
55
+ import { Combobox as Mr, ComboboxOption as Nr, ComboboxOptionGroup as Pr } from "./components/input/Combobox.mjs";
56
+ import { Dropdown as Fr, DropdownOption as Ir, DropdownOptionGroup as Lr } from "./components/input/Dropdown.mjs";
57
+ import { Listbox as Rr, ListboxOption as zr, ListboxOptionGroup as Br } from "./components/input/Listbox.mjs";
58
+ import { ColorSwatch as Vr, EmptySwatch as Hr, ImageSwatch as Ur } from "./components/input/SwatchPicker.swatches.mjs";
59
+ import { SwatchPicker as Wr, SwatchPickerRow as Gr } from "./components/input/SwatchPicker.mjs";
60
+ import { ColorPickerHexField as Kr, ColorPickerPreview as qr, ColorPickerSwatches as Jr } from "./components/input/ColorPicker.parts.mjs";
61
+ import { AlphaSlider as Yr } from "./components/input/AlphaSlider.mjs";
62
+ import { ColorArea as Xr } from "./components/input/ColorArea.mjs";
63
+ import { ColorSlider as Zr } from "./components/input/ColorSlider.mjs";
64
+ import { ColorPicker as Qr } from "./components/input/ColorPicker.mjs";
65
+ import { Tag as $r } from "./components/data-display/Tag.mjs";
66
+ import { TagGroup as ei } from "./components/data-display/TagGroup.mjs";
67
+ import { TagPickerOption as ti } from "./components/input/TagPicker.option.mjs";
68
+ import { TagPickerButton as ni, TagPickerControl as ri, TagPickerGroup as ii, TagPickerInput as ai, TagPickerList as oi, TagPickerOptionGroup as si } from "./components/input/TagPicker.parts.mjs";
69
+ import { TagPicker as ci } from "./components/input/TagPicker.mjs";
70
+ import { RatingItem as li } from "./components/input/Rating.item.mjs";
71
+ import { Rating as ui, RatingDisplay as di, RatingDisplayItem as fi } from "./components/input/Rating.mjs";
72
+ import { TimePicker as pi } from "./components/input/TimePicker.mjs";
73
+ import { Calendar as mi } from "./components/input/Calendar.mjs";
74
+ import { DatePicker as hi } from "./components/input/DatePicker.mjs";
75
+ import { Avatar as gi } from "./components/data-display/Avatar.mjs";
76
+ import { AvatarGroup as _i } from "./components/data-display/AvatarGroup.mjs";
77
+ import { Badge as vi } from "./components/data-display/Badge.mjs";
78
+ import { PresenceBadge as yi } from "./components/data-display/PresenceBadge.mjs";
79
+ import { CounterBadge as bi } from "./components/data-display/CounterBadge.mjs";
80
+ import { InteractionTag as xi, InteractionTagPrimary as Si, InteractionTagSecondary as Ci } from "./components/data-display/InteractionTag.mjs";
81
+ import { Persona as wi } from "./components/data-display/Persona.mjs";
82
+ import { Divider as Ti } from "./components/data-display/Divider.mjs";
83
+ import { InfoButton as Ei } from "./components/data-display/InfoButton.mjs";
84
+ import { InfoLabel as Di } from "./components/data-display/InfoLabel.mjs";
85
+ import { Image as Oi } from "./components/data-display/Image.mjs";
86
+ import { List as ki, ListItem as Ai } from "./components/data-display/List.mjs";
87
+ import { Text as ji } from "./components/typography/Text.mjs";
88
+ import { Card as Mi, CardBody as Ni, CardFooter as Pi, CardHeader as Fi } from "./components/layout/Card.mjs";
89
+ import { Accordion as Ii, AccordionItem as Li, AccordionPanel as Ri, AccordionTrigger as zi } from "./components/layout/Accordion.mjs";
90
+ import { TabList as Bi, TabListPanel as Vi, TabListPanels as Hi, TabListTab as Ui } from "./components/layout/TabList.mjs";
91
+ import { TreeItem as Wi } from "./components/layout/Tree.core.mjs";
92
+ import { TreeItemPersonaLayout as Gi } from "./components/layout/Tree.itemPersonaLayout.mjs";
93
+ import { Tree as Ki } from "./components/layout/Tree.mjs";
94
+ import { Carousel as qi, CarouselItem as Ji } from "./components/layout/Carousel.mjs";
95
+ import { Overflow as Yi, OverflowItem as Xi, useIsOverflowItemVisible as Zi, useIsOverflowing as Qi, useOverflowMenu as $i } from "./components/layout/Overflow.mjs";
96
+ import { Stack as ea } from "./components/layout/Stack.mjs";
97
+ import { Flex as ta } from "./components/layout/Flex.mjs";
98
+ import { Grid as na } from "./components/layout/Grid.mjs";
99
+ import { Breadcrumb as ra, BreadcrumbItem as ia } from "./components/navigation/Breadcrumb.mjs";
100
+ import { MenuDivider as aa, MenuItem as oa } from "./components/navigation/Menu.items.mjs";
101
+ import { MenuGroup as sa, MenuGroupHeader as ca } from "./components/navigation/Menu.group.mjs";
102
+ import { MenuItemLink as la } from "./components/navigation/Menu.link.mjs";
103
+ import { MenuPopover as ua } from "./components/navigation/Menu.popover.mjs";
104
+ import { MenuTrigger as da } from "./components/navigation/Menu.trigger.mjs";
105
+ import { MenuItemCheckbox as fa, MenuItemRadio as pa, MenuItemSwitch as ma } from "./components/navigation/Menu.selectable.mjs";
106
+ import { MenuSplitGroup as ha } from "./components/navigation/Menu.splitGroup.mjs";
107
+ import { Menu as ga } from "./components/navigation/Menu.mjs";
108
+ import { NavAppItem as _a, NavAppItemStatic as va, NavDivider as ya, NavSectionHeader as ba } from "./components/navigation/Nav.parts.mjs";
109
+ import { Nav as xa, NavCategory as Sa, NavItem as Ca, NavSubItem as wa } from "./components/navigation/Nav.mjs";
110
+ import { NavDrawer as Ta, NavDrawerBody as Ea, NavDrawerFooter as Da, NavDrawerHeader as Oa } from "./components/navigation/NavDrawer.mjs";
111
+ import { Hamburger as ka } from "./components/navigation/Hamburger.mjs";
112
+ import { Pagination as Aa } from "./components/navigation/Pagination.mjs";
113
+ import { Stepper as ja, StepperStep as Ma } from "./components/navigation/Stepper.mjs";
114
+ import { MessageBarActions as Na, MessageBarTitle as Pa } from "./components/feedback/MessageBar.parts.mjs";
115
+ import { MessageBar as Fa } from "./components/feedback/MessageBar.mjs";
116
+ import { ProgressBar as Ia } from "./components/feedback/ProgressBar.mjs";
117
+ import { Spinner as La } from "./components/feedback/Spinner.mjs";
118
+ import { Skeleton as Ra, SkeletonGroup as za } from "./components/feedback/Skeleton.mjs";
119
+ import { ToastBody as Ba, ToastClose as Va, ToastFooter as Ha, ToastTitle as Ua } from "./components/feedback/Toast.parts.mjs";
120
+ import { Toaster as Wa, useToastController as Ga } from "./components/feedback/Toaster.mjs";
121
+ import { Toast as Ka } from "./components/feedback/Toast.mjs";
122
+ import { Dialog as qa, DialogClose as Ja, DialogContent as Ya, DialogFooter as Xa, DialogTitle as Za, DialogTrigger as Qa } from "./components/overlays/Dialog.mjs";
123
+ import { Popover as $a, PopoverContent as eo, PopoverTrigger as to } from "./components/overlays/Popover.mjs";
124
+ import { Tooltip as no } from "./components/overlays/Tooltip.mjs";
125
+ import { DrawerBody as ro, DrawerClose as io, DrawerFooter as ao, DrawerHeader as oo, DrawerHeaderNavigation as so, DrawerHeaderTitle as co, DrawerTitle as lo, DrawerTrigger as uo } from "./components/overlays/Drawer.parts.mjs";
126
+ import { Drawer as fo } from "./components/overlays/Drawer.mjs";
127
+ import { TeachingPopover as po } from "./components/overlays/TeachingPopover.mjs";
128
+ import { Table as mo, TableBody as ho, TableCell as go, TableHead as _o, TableHeadCell as vo, TableHeader as yo, TableHeaderCell as bo, TableRow as xo } from "./components/table/Table.mjs";
129
+ import { DataGrid as So, DataGridBody as Co, DataGridCell as wo, DataGridHeader as To, DataGridHeaderCell as Eo, DataGridRow as Do } from "./components/table/DataGrid.mjs";
130
+ import { Presence as Oo } from "./components/motion/Presence.mjs";
131
+ export { Ii as Accordion, Li as AccordionItem, Ri as AccordionPanel, zi as AccordionTrigger, Yr as AlphaSlider, gi as Avatar, _i as AvatarGroup, vi as Badge, ra as Breadcrumb, ia as BreadcrumbItem, tr as Button, mi as Calendar, Mi as Card, Ni as CardBody, Pi as CardFooter, Fi as CardHeader, qi as Carousel, Ji as CarouselItem, _r as Checkbox, Xr as ColorArea, Qr as ColorPicker, Kr as ColorPickerHexField, qr as ColorPickerPreview, Jr as ColorPickerSwatches, Zr as ColorSlider, Vr as ColorSwatch, Mr as Combobox, Nr as ComboboxOption, Pr as ComboboxOptionGroup, nr as CompoundButton, bi as CounterBadge, So as DataGrid, Co as DataGridBody, wo as DataGridCell, To as DataGridHeader, Eo as DataGridHeaderCell, Do as DataGridRow, hi as DatePicker, qa as Dialog, Ja as DialogClose, Ya as DialogContent, Xa as DialogFooter, Za as DialogTitle, Qa as DialogTrigger, Bn as DismissLayerProvider, Ti as Divider, fo as Drawer, ro as DrawerBody, io as DrawerClose, ao as DrawerFooter, oo as DrawerHeader, so as DrawerHeaderNavigation, co as DrawerHeaderTitle, lo as DrawerTitle, uo as DrawerTrigger, Fr as Dropdown, Ir as DropdownOption, Lr as DropdownOptionGroup, Hr as EmptySwatch, gr as Field, ta as Flex, na as Grid, ka as Hamburger, Oi as Image, Ur as ImageSwatch, Ei as InfoButton, Di as InfoLabel, mr as Input, xi as InteractionTag, Si as InteractionTagPrimary, Ci as InteractionTagSecondary, Er as Label, or as Link, ki as List, Ai as ListItem, Rr as Listbox, zr as ListboxOption, Br as ListboxOptionGroup, Dr as ListboxProvider, Or as ListboxSurface, ga as Menu, ar as MenuButton, aa as MenuDivider, sa as MenuGroup, ca as MenuGroupHeader, oa as MenuItem, fa as MenuItemCheckbox, la as MenuItemLink, pa as MenuItemRadio, ma as MenuItemSwitch, ua as MenuPopover, ha as MenuSplitGroup, da as MenuTrigger, Fa as MessageBar, Na as MessageBarActions, Pa as MessageBarTitle, xa as Nav, _a as NavAppItem, va as NavAppItemStatic, Sa as NavCategory, ya as NavDivider, Ta as NavDrawer, Ea as NavDrawerBody, Da as NavDrawerFooter, Oa as NavDrawerHeader, Ca as NavItem, ba as NavSectionHeader, wa as NavSubItem, kr as Option, Ar as OptionGroup, Yi as Overflow, Xi as OverflowItem, Aa as Pagination, wi as Persona, $a as Popover, eo as PopoverContent, to as PopoverTrigger, er as Portal, Oo as Presence, yi as PresenceBadge, Ia as ProgressBar, vr as RadioGroup, yr as RadioGroupItem, br as RadioItem, ui as Rating, di as RatingDisplay, fi as RatingDisplayItem, li as RatingItem, Cr as SearchBox, Sr as Select, Ra as Skeleton, za as SkeletonGroup, wr as Slider, Tr as SpinButton, La as Spinner, ir as SplitButton, ea as Stack, ja as Stepper, Ma as StepperStep, Wr as SwatchPicker, Gr as SwatchPickerRow, xr as Switch, Bi as TabList, Vi as TabListPanel, Hi as TabListPanels, Ui as TabListTab, mo as Table, ho as TableBody, go as TableCell, _o as TableHead, vo as TableHeadCell, yo as TableHeader, bo as TableHeaderCell, xo as TableRow, $r as Tag, ei as TagGroup, ci as TagPicker, ni as TagPickerButton, ri as TagPickerControl, ii as TagPickerGroup, ai as TagPickerInput, oi as TagPickerList, ti as TagPickerOption, si as TagPickerOptionGroup, po as TeachingPopover, ji as Text, hr as Textarea, pi as TimePicker, Ka as Toast, Ba as ToastBody, Va as ToastClose, Ha as ToastFooter, Ua as ToastTitle, Wa as Toaster, rr as ToggleButton, pr as Toolbar, sr as ToolbarButton, cr as ToolbarDivider, lr as ToolbarGroup, ur as ToolbarRadioButton, dr as ToolbarRadioGroup, fr as ToolbarToggleButton, no as Tooltip, Ki as Tree, Wi as TreeItem, Gi as TreeItemPersonaLayout, Fn as WaveProvider, a as accordionClassNames, o as accordionItemClassNames, s as accordionPanelClassNames, c as accordionTriggerClassNames, cn as addDays, ln as addMonths, l as alphaSliderClassNames, En as announce, u as avatarClassNames, d as avatarGroupClassNames, f as badgeClassNames, p as breadcrumbClassNames, m as breadcrumbItemClassNames, h as buttonClassNames, g as calendarClassNames, _ as cardBodyClassNames, v as cardClassNames, y as cardFooterClassNames, b as cardHeaderClassNames, x as carouselClassNames, S as carouselItemClassNames, C as checkboxClassNames, e as cn, An as collectOptionLabels, w as colorAreaClassNames, T as colorPickerClassNames, E as colorPickerHexFieldClassNames, D as colorPickerPreviewClassNames, O as colorPickerSwatchesClassNames, k as colorSliderClassNames, A as colorSwatchClassNames, j as comboboxClassNames, r as composeEventHandlers, M as compoundButtonClassNames, N as counterBadgeClassNames, hn as createToaster, P as dataGridBodyClassNames, F as dataGridCellClassNames, I as dataGridClassNames, L as dataGridHeaderCellClassNames, R as dataGridHeaderClassNames, z as dataGridRowClassNames, B as datePickerClassNames, V as dialogContentClassNames, H as dialogFooterClassNames, U as dialogTitleClassNames, W as dividerClassNames, G as drawerBodyClassNames, K as drawerClassNames, q as drawerFooterClassNames, J as drawerHeaderClassNames, Y as drawerHeaderNavigationClassNames, X as drawerHeaderTitleClassNames, Z as drawerTitleClassNames, Q as dropdownClassNames, $ as emptySwatchClassNames, ee as fieldClassNames, te as flexClassNames, Xn as focusRing, Zn as focusRingInset, yn as getFirstTabbable, bn as getLastTabbable, xn as getTabbableElements, Pn as getThemeClassName, un as getWeekNumber, ne as gridClassNames, re as hamburgerClassNames, Rn as hasOpenModal, pn as hexToHsv, mn as hsvToHex, ie as imageClassNames, ae as imageSwatchClassNames, oe as infoButtonClassNames, se as infoLabelClassNames, ce as inputClassNames, Qn as inputFocus, $n as inputFocusWithin, le as interactionTagClassNames, ue as interactionTagPrimaryClassNames, de as interactionTagSecondaryClassNames, dn as isSameDay, fe as labelClassNames, pe as linkClassNames, me as listClassNames, he as listItemClassNames, ge as listboxClassNames, _e as listboxSurfaceClassNames, jn as markListboxElement, ve as menuButtonClassNames, ye as menuClassNames, be as menuDividerClassNames, xe as menuGroupClassNames, Se as menuGroupHeaderClassNames, Ce as menuItemCheckboxClassNames, we as menuItemClassNames, Te as menuItemLinkClassNames, Ee as menuItemRadioClassNames, De as menuItemSwitchClassNames, Oe as menuPopoverClassNames, ke as menuSplitGroupClassNames, i as mergeRefs, Ae as messageBarActionsClassNames, je as messageBarClassNames, Me as messageBarTitleClassNames, zn as modalAllowProps, Ne as navAppItemClassNames, Pe as navAppItemStaticClassNames, Fe as navCategoryClassNames, Ie as navClassNames, Le as navDividerClassNames, Re as navDrawerBodyClassNames, ze as navDrawerClassNames, Be as navDrawerFooterClassNames, Ve as navDrawerHeaderClassNames, He as navItemClassNames, Ue as navSectionHeaderClassNames, We as navSubItemClassNames, Ge as optionClassNames, Ke as optionGroupClassNames, qe as overflowClassNames, Je as overflowItemClassNames, Ye as paginationClassNames, Xe as personaClassNames, Ze as popoverContentClassNames, Qe as portalClassNames, $e as presenceBadgeClassNames, et as progressBarClassNames, tt as radioGroupClassNames, nt as radioGroupItemClassNames, rt as ratingClassNames, it as ratingDisplayClassNames, at as ratingItemClassNames, t as renderSlot, n as resolveSlot, ot as searchBoxClassNames, st as selectClassNames, ct as skeletonClassNames, lt as skeletonGroupClassNames, ut as sliderClassNames, dt as spinButtonClassNames, ft as spinnerClassNames, pt as splitButtonClassNames, mt as stackClassNames, fn as startOfWeek, ht as stepperClassNames, gt as stepperStepClassNames, _t as swatchPickerClassNames, vt as swatchPickerRowClassNames, yt as switchClassNames, bt as tabListClassNames, xt as tabListPanelClassNames, St as tabListPanelsClassNames, Ct as tabListTabClassNames, wt as tableBodyClassNames, Tt as tableCellClassNames, Et as tableClassNames, Dt as tableHeaderCellClassNames, Ot as tableHeaderClassNames, kt as tableRowClassNames, At as tagClassNames, jt as tagGroupClassNames, Mt as tagPickerButtonClassNames, Nt as tagPickerClassNames, Pt as tagPickerControlClassNames, Ft as tagPickerGroupClassNames, It as tagPickerInputClassNames, Lt as tagPickerListClassNames, Rt as tagPickerOptionClassNames, zt as teachingPopoverClassNames, Bt as textClassNames, Vt as textareaClassNames, Ht as timePickerClassNames, Ut as toastBodyClassNames, Wt as toastClassNames, Gt as toastFooterClassNames, Kt as toastTitleClassNames, qt as toasterClassNames, Jt as toggleButtonClassNames, Yt as toolbarButtonClassNames, Xt as toolbarClassNames, Zt as toolbarDividerClassNames, Qt as toolbarGroupClassNames, $t as toolbarRadioButtonClassNames, en as toolbarRadioGroupClassNames, tn as toolbarToggleButtonClassNames, nn as tooltipClassNames, rn as treeClassNames, an as treeItemClassNames, on as treeItemPersonaLayoutClassNames, kn as useActiveDescendant, Dn as useAnnounce, _n as useControllable, Vn as useDismiss, gn as useEventCallback, Tn as useFieldControl, Hn as useFocusTrap, qn as useFocusVisible, Jn as useFocusableGroup, Yn as useGridNavigation, vn as useId, Un as useInitialFocus, wn as useIsClient, Zi as useIsOverflowItemVisible, Qi as useIsOverflowing, Mn as useListbox, Nn as useListboxOption, jr as useListboxPopup, Cn as useMergedRefs, Gn as useModalLayer, Kn as useModalOpen, $i as useOverflowMenu, Ln as usePopupPosition, On as usePresence, Wn as useRestoreFocus, Sn as useRovingTabIndex, Ga as useToastController, In as useWaveTheme, sn as waveProviderClassNames };
@@ -1,2 +1,2 @@
1
- const e=require("./globalRegistry.cjs");var t={overlay:`var(--wave-z-overlay, 1000)`,toast:`var(--wave-z-toast, 1100)`,tooltip:`var(--wave-z-tooltip, 1200)`},n=`[data-wave-focus-trap-allow]`;function r(){let t=e.getGlobalRegistry(`layers`,()=>({stack:[],elements:new Map,counter:0,press:null,listeners:null,subscribers:new Set,isolated:new Map}));return t.subscribers??=new Set,t.isolated??=new Map,t}function i(e){for(let t of Array.from(e.subscribers))t()}var a=1;function o(e,t){if(t!==null)return e.stack.find(e=>e.id===t)}function s(e,t,n){let r=new Set([t.id]),i=t.parentId;for(;i!==null&&!r.has(i);){if(i===n)return!0;r.add(i),i=o(e,i)?.parentId??null}return!1}function c(e,t){return!!e&&e.contains(t)}function l(e,t,n,r){if(r.has(t))return!1;r.add(t);let i=o(e,t);if(i&&i.getElements().some(e=>c(e,n)))return!0;let a=e.elements.get(t);if(a){for(let e of a)if(c(e,n))return!0}for(let i of e.stack)if(i.parentId===t&&l(e,i.id,n,r))return!0;return!1}function u(e){let t=e.nodeType===a?e:e.parentElement;return!!t&&t.closest(`[data-wave-focus-trap-allow]`)!==null}function d(e,t){return u(t)?!0:l(r(),e,t,new Set)}function f(e,t){if(e===t||e.id===t.id)return 0;let n=r();if(s(n,e,t.id))return 1;if(s(n,t,e.id))return-1;let i=n.stack.indexOf(e),a=n.stack.indexOf(t);return i!==-1&&a!==-1?i-a:e.order-t.order}function p(e){let{stack:t}=r();for(let n=t.length-1;n>=0;n--){let r=t[n];if(!e||e(r))return r}return null}function m(e){let t=r(),{isolated:n}=t,a=n.get(e)??0;n.set(e,a+1),a===0&&i(t);let o=!0;return()=>{if(!o)return;o=!1;let r=(n.get(e)??1)-1;r>0?n.set(e,r):n.delete(e)&&i(t)}}function h(e){return e.isolated.size===0?null:p(t=>e.isolated.has(t.id))}function g(e){let t=r();if(t.isolated.size===0)return!1;let n=o(t,e);return t.stack.some(r=>r.id!==e&&t.isolated.has(r.id)&&!s(t,r,e)&&(!n||f(n,r)>0))}function _(e,t){return!!t&&t!==e&&f(t,e)>0}function v(e){let{subscribers:t}=r();return t.add(e),()=>{t.delete(e)}}function y(){return[...r().stack]}function b(e){return o(r(),e)??null}function x(e,t){let n=r(),i=o(n,e);return!!i&&s(n,i,t)}function S(e,t){let n=r(),i=[],a=t?.includeOwnElements??!0,s=(t,r)=>{if(r.has(t))return;r.add(t);let c=o(n,t);if(c&&(a||t!==e))for(let e of c.getElements())e&&!i.includes(e)&&i.push(e);for(let e of n.elements.get(t)??[])i.includes(e)||i.push(e);for(let e of n.stack)e.parentId===t&&s(e.id,r)};return s(e,new Set),i}function C(e,t){let n=r();for(let r=n.stack.length-1;r>=0;r--){let i=n.stack[r];if(i.kind===`modal`&&(t===void 0||i.id!==t&&!s(n,i,t)))return!d(i.id,e)}return!1}function w(e,t){let n=r(),i=n.elements.get(e);return i||(i=new Set,n.elements.set(e,i)),i.add(t),()=>{let r=n.elements.get(e);r&&(r.delete(t),r.size===0&&n.elements.delete(e))}}function T(e){let t=r();t.counter+=1,e.order=t.counter;let n=t.stack.findIndex(n=>s(t,n,e.id));n===-1?t.stack.push(e):t.stack.splice(n,0,e),R(t),i(t);let a=!0;return()=>{if(!a)return;a=!1;let n=t.stack.indexOf(e);n!==-1&&t.stack.splice(n,1),t.press&&(t.press.layers=t.press.layers.filter(t=>t!==e)),t.stack.length===0&&z(t),i(t)}}function E(e){let t=e.target;return t&&typeof t.nodeType==`number`?t:null}function D(e){return[...e].sort((e,t)=>f(t,e))}function O(e,t,n){let r=h(e),i=e=>!!t&&d(e.id,t)||!!n&&d(e.id,n),a=e=>(e.escape===!0||e.escape===`inside`&&i(e))&&!_(e,r),o=p(i);return(o?p(t=>a(t)&&(t===o||s(e,t,o.id)))??p(e=>a(e)&&i(e)):null)??p(a)}function k(e){return e===`Enter`||e===` `||e===`Spacebar`}function A(e){let t=r();if(e.key===`Escape`||e.key===`Esc`){if(e.defaultPrevented||e.isComposing)return;let n=O(t,E(e),document.activeElement);if(!n)return;e.preventDefault(),n.onDismiss(`escape`,e);return}k(e.key)&&(t.press=null)}function j(e){let t=r(),n=E(e);if(!n||e.button!==0){t.press=null;return}let i=h(t);t.press={layers:t.stack.filter(t=>{let{outsidePress:r}=t;return!r||_(t,i)||d(t.id,n)?!1:typeof r!=`function`||r(e)!==!1})}}var M=1e3;function N(e){let t=r().press;if(!t)return;let n=e.pointerType===`mouse`?0:M;setTimeout(()=>{let e=r();e.press===t&&(e.press=null)},n)}function P(){r().press=null}function F(e){let t=r(),n=t.press;if(t.press=null,!n)return;let i=E(e),a=n.layers.filter(e=>!(i&&d(e.id,i)));for(let n of D(a))t.stack.includes(n)&&n.onDismiss(`outside-press`,e)}function I(e){let t=E(e);if(!t)return;let n=r().stack.filter(e=>e.focusOutside&&!d(e.id,t));n.length!==0&&queueMicrotask(()=>L(n,t,e))}function L(e,t,n){let i=r(),a=(t.ownerDocument??document).activeElement,o=e.filter(e=>i.stack.includes(e)&&!d(e.id,t)&&!(a&&d(e.id,a)));for(let e of D(o))i.stack.includes(e)&&e.onDismiss(`focus-outside`,n)}function R(e){if(e.listeners||typeof document>`u`)return;let t=document;t.addEventListener(`keydown`,A),t.addEventListener(`pointerdown`,j,!0),t.addEventListener(`pointerup`,N,!0),t.addEventListener(`pointercancel`,P,!0),t.addEventListener(`contextmenu`,P,!0),t.addEventListener(`click`,F),t.addEventListener(`focusin`,I,!0),e.listeners={remove(){t.removeEventListener(`keydown`,A),t.removeEventListener(`pointerdown`,j,!0),t.removeEventListener(`pointerup`,N,!0),t.removeEventListener(`pointercancel`,P,!0),t.removeEventListener(`contextmenu`,P,!0),t.removeEventListener(`click`,F),t.removeEventListener(`focusin`,I,!0)}}}function z(e){e.listeners?.remove(),e.listeners=null,e.press=null}exports.ALLOW_OUTSIDE_SELECTOR=n,exports.Z_INDEX=t,exports.compareLayers=f,exports.getLayer=b,exports.getLayerTreeElements=S,exports.getOpenLayers=y,exports.getTopmostLayer=p,exports.hasIsolatingModalBelow=g,exports.isDescendantLayer=x,exports.isInsideLayerTree=d,exports.isInsideOtherOpenModal=C,exports.registerLayer=T,exports.registerLayerElement=w,exports.registerLayerIsolation=m,exports.subscribeLayers=v;
1
+ const e=require("./globalRegistry.cjs");var t={overlay:`var(--wave-z-overlay, 1000)`,toast:`var(--wave-z-toast, 1100)`,tooltip:`var(--wave-z-tooltip, 1200)`},n=`[data-wave-focus-trap-allow]`,r={"data-wave-focus-trap-allow":``};function i(){let t=e.getGlobalRegistry(`layers`,()=>({stack:[],elements:new Map,counter:0,press:null,listeners:null,subscribers:new Set,isolated:new Map}));return t.subscribers??=new Set,t.isolated??=new Map,t}function a(e){for(let t of Array.from(e.subscribers))t()}var o=1;function s(e,t){if(t!==null)return e.stack.find(e=>e.id===t)}function c(e,t,n){let r=new Set([t.id]),i=t.parentId;for(;i!==null&&!r.has(i);){if(i===n)return!0;r.add(i),i=s(e,i)?.parentId??null}return!1}function l(e,t){return!!e&&e.contains(t)}function u(e,t,n,r){if(r.has(t))return!1;r.add(t);let i=s(e,t);if(i&&i.getElements().some(e=>l(e,n)))return!0;let a=e.elements.get(t);if(a){for(let e of a)if(l(e,n))return!0}for(let i of e.stack)if(i.parentId===t&&u(e,i.id,n,r))return!0;return!1}function d(e){let t=e.nodeType===o?e:e.parentElement;return!!t&&t.closest(`[data-wave-focus-trap-allow]`)!==null}function f(e,t){return d(t)?!0:u(i(),e,t,new Set)}function p(e,t){if(e===t||e.id===t.id)return 0;let n=i();if(c(n,e,t.id))return 1;if(c(n,t,e.id))return-1;let r=n.stack.indexOf(e),a=n.stack.indexOf(t);return r!==-1&&a!==-1?r-a:e.order-t.order}function m(e){let{stack:t}=i();for(let n=t.length-1;n>=0;n--){let r=t[n];if(!e||e(r))return r}return null}function h(e){let t=i(),{isolated:n}=t,r=n.get(e)??0;n.set(e,r+1),r===0&&a(t);let o=!0;return()=>{if(!o)return;o=!1;let r=(n.get(e)??1)-1;r>0?n.set(e,r):n.delete(e)&&a(t)}}function g(e){return e.isolated.size===0?null:m(t=>e.isolated.has(t.id))}function _(e){let t=i();if(t.isolated.size===0)return!1;let n=s(t,e);return t.stack.some(r=>r.id!==e&&t.isolated.has(r.id)&&!c(t,r,e)&&(!n||p(n,r)>0))}function v(e,t){return!!t&&t!==e&&p(t,e)>0}function y(e){let{subscribers:t}=i();return t.add(e),()=>{t.delete(e)}}function b(){return i().stack.some(e=>e.kind===`modal`)}function x(){return[...i().stack]}function S(e){return s(i(),e)??null}function C(e,t){let n=i(),r=s(n,e);return!!r&&c(n,r,t)}function w(e,t){let n=i(),r=[],a=t?.includeOwnElements??!0,o=(t,i)=>{if(i.has(t))return;i.add(t);let c=s(n,t);if(c&&(a||t!==e))for(let e of c.getElements())e&&!r.includes(e)&&r.push(e);for(let e of n.elements.get(t)??[])r.includes(e)||r.push(e);for(let e of n.stack)e.parentId===t&&o(e.id,i)};return o(e,new Set),r}function T(e,t){let n=i();for(let r=n.stack.length-1;r>=0;r--){let i=n.stack[r];if(i.kind===`modal`&&(t===void 0||i.id!==t&&!c(n,i,t)))return!f(i.id,e)}return!1}function E(e,t){let n=i(),r=n.elements.get(e);return r||(r=new Set,n.elements.set(e,r)),r.add(t),()=>{let r=n.elements.get(e);r&&(r.delete(t),r.size===0&&n.elements.delete(e))}}function D(e){let t=i();t.counter+=1,e.order=t.counter;let n=t.stack.findIndex(n=>c(t,n,e.id));n===-1?t.stack.push(e):t.stack.splice(n,0,e),B(t),a(t);let r=!0;return()=>{if(!r)return;r=!1;let n=t.stack.indexOf(e);n!==-1&&t.stack.splice(n,1),t.press&&(t.press.layers=t.press.layers.filter(t=>t!==e)),t.stack.length===0&&V(t),a(t)}}function O(e){let t=e.target;return t&&typeof t.nodeType==`number`?t:null}function k(e){return[...e].sort((e,t)=>p(t,e))}function A(e,t,n){let r=g(e),i=e=>!!t&&f(e.id,t)||!!n&&f(e.id,n),a=e=>(e.escape===!0||e.escape===`inside`&&i(e))&&!v(e,r),o=m(i);return(o?m(t=>a(t)&&(t===o||c(e,t,o.id)))??m(e=>a(e)&&i(e)):null)??m(a)}function j(e){return e===`Enter`||e===` `||e===`Spacebar`}function M(e){let t=i();if(e.key===`Escape`||e.key===`Esc`){if(e.defaultPrevented||e.isComposing)return;let n=A(t,O(e),document.activeElement);if(!n)return;e.preventDefault(),n.onDismiss(`escape`,e);return}j(e.key)&&(t.press=null)}function N(e){let t=i(),n=O(e);if(!n||e.button!==0){t.press=null;return}let r=g(t);t.press={layers:t.stack.filter(t=>{let{outsidePress:i}=t;return!i||v(t,r)||f(t.id,n)?!1:typeof i!=`function`||i(e)!==!1})}}var P=1e3;function F(e){let t=i().press;if(!t)return;let n=e.pointerType===`mouse`?0:P;setTimeout(()=>{let e=i();e.press===t&&(e.press=null)},n)}function I(){i().press=null}function L(e){let t=i(),n=t.press;if(t.press=null,!n)return;let r=O(e),a=n.layers.filter(e=>!(r&&f(e.id,r)));for(let n of k(a))t.stack.includes(n)&&n.onDismiss(`outside-press`,e)}function R(e){let t=O(e);if(!t)return;let n=i().stack.filter(e=>e.focusOutside&&!f(e.id,t));n.length!==0&&queueMicrotask(()=>z(n,t,e))}function z(e,t,n){let r=i(),a=(t.ownerDocument??document).activeElement,o=e.filter(e=>r.stack.includes(e)&&!f(e.id,t)&&!(a&&f(e.id,a)));for(let e of k(o))r.stack.includes(e)&&e.onDismiss(`focus-outside`,n)}function B(e){if(e.listeners||typeof document>`u`)return;let t=document;t.addEventListener(`keydown`,M),t.addEventListener(`pointerdown`,N,!0),t.addEventListener(`pointerup`,F,!0),t.addEventListener(`pointercancel`,I,!0),t.addEventListener(`contextmenu`,I,!0),t.addEventListener(`click`,L),t.addEventListener(`focusin`,R,!0),e.listeners={remove(){t.removeEventListener(`keydown`,M),t.removeEventListener(`pointerdown`,N,!0),t.removeEventListener(`pointerup`,F,!0),t.removeEventListener(`pointercancel`,I,!0),t.removeEventListener(`contextmenu`,I,!0),t.removeEventListener(`click`,L),t.removeEventListener(`focusin`,R,!0)}}}function V(e){e.listeners?.remove(),e.listeners=null,e.press=null}exports.ALLOW_OUTSIDE_SELECTOR=n,exports.Z_INDEX=t,exports.compareLayers=p,exports.getLayer=S,exports.getLayerTreeElements=w,exports.getOpenLayers=x,exports.getTopmostLayer=m,exports.hasIsolatingModalBelow=_,exports.hasOpenModal=b,exports.isDescendantLayer=C,exports.isInsideLayerTree=f,exports.isInsideOtherOpenModal=T,exports.modalAllowProps=r,exports.registerLayer=D,exports.registerLayerElement=E,exports.registerLayerIsolation=h,exports.subscribeLayers=y;
2
2
  //# sourceMappingURL=layers.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"layers.cjs","names":["getGlobalRegistry","require_globalRegistry","Z_INDEX","ALLOW_OUTSIDE_SELECTOR","getState","state","notifySubscribers","subscriber","ELEMENT_NODE","findLayer","id","layer","isDescendantOf","visited","parentId","ancestorId","containsNode","container","target","isInsideTreeWithoutAllowList","layerId","record","el","registered","isInsideAllowList","isInsideLayerTree","compareLayers","a","b","indexA","indexB","getTopmostLayer","i","stack","predicate","registerLayerIsolation","previous","isolated","count","getIsolationBarrier","hasIsolatingModalBelow","self","isBelowBarrier","barrier","subscribeLayers","subscribers","listener","getOpenLayers","getLayer","isDescendantLayer","getLayerTreeElements","result","includeOwn","options","visit","isInsideOtherOpenModal","exceptLayerId","registerLayerElement","set","current","registerLayer","firstDescendant","ensureListeners","index","removeListeners","getEventTargetNode","event","sortTopmostFirst","layers","findEscapeHandler","contains","active","isCandidate","scope","isClickActivationKey","key","handleKeyDown","handler","handlePointerDown","outsidePress","GESTURE_CLICK_TIMEOUT_MS","handlePointerUp","press","timeout","forgetPress","handleClick","toDismiss","handleFocusIn","candidates","dismissFocusOutside","doc"],"sources":["../../src/lib/layers.ts"],"sourcesContent":["import { getGlobalRegistry } from './globalRegistry';\n\n/**\n * The shared stack of open dismissable layers (dialogs, drawers, popovers, menus, listboxes,\n * tooltips) and the document listeners that route Escape, outside presses and focus changes to\n * them. `useDismiss` registers layers; focus traps, modal isolation and focus restore read the\n * stack. It lives in `getGlobalRegistry('layers')`, so an app that loads both the ESM and the CJS\n * build still has one stack and one set of listeners.\n */\n\n/**\n * z-index of each portal layer. `Portal` adds its nesting depth, so a surface opened from inside\n * another overlay always stacks above it. The values fall back to the defaults of `tokens.css`.\n */\nexport const Z_INDEX = {\n overlay: 'var(--wave-z-overlay, 1000)',\n toast: 'var(--wave-z-toast, 1100)',\n tooltip: 'var(--wave-z-tooltip, 1200)',\n} as const;\n\n/**\n * What kind of surface a layer is. `modal` marks dialog-like surfaces (focus-restore validation and\n * modal isolation look for them); a modal blocks presses and Escape for the layers below it only\n * while its page isolation is active ({@link registerLayerIsolation}). `dialog` marks a non-modal\n * Dialog or Drawer: it shields nothing (no isolation), takes Escape only from inside its tree\n * (`escape: 'inside'`), and the Toaster moves out of its way; focus-restore validation and modal\n * isolation do not count it.\n */\nexport type LayerKind = 'modal' | 'dialog' | 'popover' | 'menu' | 'listbox' | 'tooltip' | 'toast';\n\n/** Why a popup layer is dismissed: Escape, a press outside it, or focus moving outside it. */\nexport type DismissReason = 'escape' | 'outside-press' | 'focus-outside';\n\n/** A registered layer. Getters are allowed, so fields can read the latest options. */\nexport interface LayerRecord {\n /** Unique id; children name it as their `parentId` (through `DismissLayerContext`). */\n id: string;\n /** The enclosing layer (React parentage, which survives portals), or `null`. */\n parentId: string | null;\n kind: LayerKind;\n /** Global open-order counter, assigned by {@link registerLayer} (the passed value is replaced). */\n order: number;\n /** The elements that belong to the layer: its surface, its trigger, extra ignore targets. */\n getElements(): Array<HTMLElement | null>;\n /** The element the layer is anchored to (its trigger); focus traps leave the layer through it. */\n getAnchor(): HTMLElement | null;\n /**\n * Whether Escape dismisses the layer: always (`true`), never (`false`), or only while the key's\n * target or the focused element is in the layer's tree (`'inside'`).\n */\n escape: boolean | 'inside';\n /** Whether a press outside the layer's tree dismisses it; a predicate returning `false` opts out. */\n outsidePress: boolean | ((event: PointerEvent | MouseEvent) => boolean);\n /** Whether focus moving outside the layer's tree dismisses it. */\n focusOutside: boolean;\n /** Called when the layer should close. */\n onDismiss(reason: DismissReason, event: Event): void;\n}\n\n/**\n * Regions (the Toaster viewport) whose content counts as inside **every** layer and whose\n * tabbables join every focus trap's Tab cycle. Modal isolation never makes them inert.\n */\nexport const ALLOW_OUTSIDE_SELECTOR = '[data-wave-focus-trap-allow]';\n\ninterface PressSnapshot {\n /**\n * Layers with outside press enabled whose tree did not contain the pointerdown target. Only these\n * can be dismissed by the click: a layer registered later (opened by that press, or closed and\n * reopened, which registers a new record) is not in it, and a layer that unregisters is removed.\n */\n layers: LayerRecord[];\n}\n\ninterface InstalledListeners {\n remove(): void;\n}\n\ninterface LayerState {\n /** Open layers from bottom to top. A parent always precedes its descendants. */\n stack: LayerRecord[];\n /** Elements registered per layer id (portal wrappers of the layer's descendants). */\n elements: Map<string, Set<HTMLElement>>;\n counter: number;\n press: PressSnapshot | null;\n listeners: InstalledListeners | null;\n /**\n * Called after a layer registers or unregisters (modal isolation re-plans), and after the\n * isolated set changes (the dim-once snapshot).\n */\n subscribers: Set<() => void>;\n /** Ids of layers whose modal isolation currently makes the page inert, with a use count. */\n isolated: Map<string, number>;\n}\n\nfunction getState(): LayerState {\n const state = getGlobalRegistry<LayerState>('layers', () => ({\n stack: [],\n elements: new Map(),\n counter: 0,\n press: null,\n listeners: null,\n subscribers: new Set(),\n isolated: new Map(),\n }));\n // A registry created by an earlier copy of this module (hot reload) may predate these fields.\n state.subscribers ??= new Set();\n state.isolated ??= new Map();\n return state;\n}\n\nfunction notifySubscribers(state: LayerState): void {\n for (const subscriber of Array.from(state.subscribers)) subscriber();\n}\n\nconst ELEMENT_NODE = 1;\n\nfunction findLayer(state: LayerState, id: string | null): LayerRecord | undefined {\n if (id === null) return undefined;\n return state.stack.find((layer) => layer.id === id);\n}\n\n/** Whether `layer` is a (possibly indirect) descendant of the layer `ancestorId`. */\nfunction isDescendantOf(state: LayerState, layer: LayerRecord, ancestorId: string): boolean {\n const visited = new Set<string>([layer.id]);\n let parentId = layer.parentId;\n while (parentId !== null && !visited.has(parentId)) {\n if (parentId === ancestorId) return true;\n visited.add(parentId);\n parentId = findLayer(state, parentId)?.parentId ?? null;\n }\n return false;\n}\n\nfunction containsNode(container: Node | null | undefined, target: Node): boolean {\n return !!container && container.contains(target);\n}\n\nfunction isInsideTreeWithoutAllowList(\n state: LayerState,\n layerId: string,\n target: Node,\n visited: Set<string>,\n): boolean {\n if (visited.has(layerId)) return false;\n visited.add(layerId);\n\n const record = findLayer(state, layerId);\n if (record && record.getElements().some((el) => containsNode(el, target))) return true;\n\n const registered = state.elements.get(layerId);\n if (registered) {\n for (const el of registered) {\n if (containsNode(el, target)) return true;\n }\n }\n\n for (const layer of state.stack) {\n if (\n layer.parentId === layerId &&\n isInsideTreeWithoutAllowList(state, layer.id, target, visited)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isInsideAllowList(target: Node): boolean {\n const el = target.nodeType === ELEMENT_NODE ? (target as Element) : target.parentElement;\n return !!el && el.closest(ALLOW_OUTSIDE_SELECTOR) !== null;\n}\n\n/**\n * Whether `target` belongs to the tree of the layer `layerId`:\n * - the layer's own elements (`getElements()`),\n * - elements registered for it with {@link registerLayerElement} (portal wrappers of overlays\n * rendered inside it — React parentage survives portals, the DOM does not),\n * - every descendant layer's tree, and\n * - regions matching {@link ALLOW_OUTSIDE_SELECTOR} (the Toaster viewport), which count as inside\n * every layer.\n */\nexport function isInsideLayerTree(layerId: string, target: Node): boolean {\n if (isInsideAllowList(target)) return true;\n return isInsideTreeWithoutAllowList(getState(), layerId, target, new Set());\n}\n\n/**\n * Compares two layers for stacking: `> 0` when `a` is above `b`. A descendant layer is above its\n * ancestor; otherwise the layer whose tree opened later is above. (A parent that registers after\n * its descendants — effects run child-first when both open in one commit — takes the place of its\n * earliest descendant.)\n */\nexport function compareLayers(a: LayerRecord, b: LayerRecord): number {\n if (a === b || a.id === b.id) return 0;\n const state = getState();\n if (isDescendantOf(state, a, b.id)) return 1;\n if (isDescendantOf(state, b, a.id)) return -1;\n const indexA = state.stack.indexOf(a);\n const indexB = state.stack.indexOf(b);\n if (indexA !== -1 && indexB !== -1) return indexA - indexB;\n return a.order - b.order;\n}\n\n/** The topmost open layer (optionally the topmost one matching `predicate`), or `null`. */\nexport function getTopmostLayer(predicate?: (layer: LayerRecord) => boolean): LayerRecord | null {\n const { stack } = getState();\n for (let i = stack.length - 1; i >= 0; i--) {\n const layer = stack[i];\n if (!predicate || predicate(layer)) return layer;\n }\n return null;\n}\n\n/**\n * Marks the layer `layerId` as isolating the page: `useModalIsolation` made everything outside its\n * tree inert (Dialog, Drawer). While it is open, the topmost isolating layer is a barrier — layers\n * stacked below it (its ancestors and older siblings) are never dismissed by outside presses and\n * never receive Escape, the way a modal blocks the page behind it. Layers above it (its\n * descendants, or a modal opened later) are unaffected. A `kind: 'modal'` layer without isolation\n * (a transient popup such as the DatePicker calendar, whose page stays interactive) is no barrier.\n * Returns the unregister function; registrations are counted, so the layer stays marked until\n * every registration is removed.\n */\nexport function registerLayerIsolation(layerId: string): () => void {\n const state = getState();\n const { isolated } = state;\n const previous = isolated.get(layerId) ?? 0;\n isolated.set(layerId, previous + 1);\n // Subscribers (the dim-once snapshot of Dialog and Drawer) read isolation, which changes without\n // a layer registering: notify when the isolated set gains the layer, and again when it loses it.\n if (previous === 0) notifySubscribers(state);\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n const count = (isolated.get(layerId) ?? 1) - 1;\n if (count > 0) isolated.set(layerId, count);\n else if (isolated.delete(layerId)) notifySubscribers(state);\n };\n}\n\n/** The topmost open layer whose modal isolation is active, or `null`. */\nfunction getIsolationBarrier(state: LayerState): LayerRecord | null {\n if (state.isolated.size === 0) return null;\n return getTopmostLayer((layer) => state.isolated.has(layer.id));\n}\n\n/**\n * Whether an open layer whose modal isolation is active ({@link registerLayerIsolation}) is\n * stacked below the layer `layerId` (`compareLayers(self, other) > 0`). A `layerId` that is not\n * registered yet (the render that opens it) counts as the topmost layer, so every isolating open\n * layer counts. The layer itself and its descendants never count. Read during render through\n * `useSyncExternalStore(subscribeLayers, …)` (the dim-once rule of Dialog and Drawer).\n */\nexport function hasIsolatingModalBelow(layerId: string): boolean {\n const state = getState();\n if (state.isolated.size === 0) return false;\n const self = findLayer(state, layerId);\n return state.stack.some(\n (layer) =>\n layer.id !== layerId &&\n state.isolated.has(layer.id) &&\n !isDescendantOf(state, layer, layerId) &&\n (!self || compareLayers(self, layer) > 0),\n );\n}\n\n/** Whether `layer` is stacked below `barrier` (neither the barrier itself nor above it). */\nfunction isBelowBarrier(layer: LayerRecord, barrier: LayerRecord | null): boolean {\n return !!barrier && barrier !== layer && compareLayers(barrier, layer) > 0;\n}\n\n/**\n * Whether `layer` is stacked below the topmost open **isolating** modal (see\n * {@link registerLayerIsolation}). Such a layer is behind the modal and inert: outside presses\n * never dismiss it and Escape never reaches it. The modal's descendants are above it and stay\n * reachable; a modal-kind layer without isolation shields nothing.\n */\nexport function isBehindIsolatingModal(layer: LayerRecord): boolean {\n return isBelowBarrier(layer, getIsolationBarrier(getState()));\n}\n\n/**\n * Calls `listener` synchronously after any layer registers or unregisters (in the committing\n * component's layout effect, so a modal can re-plan its isolation before a newly opened modal\n * moves focus), and after a layer's modal isolation starts or ends ({@link registerLayerIsolation}).\n * Returns the unsubscribe function.\n */\nexport function subscribeLayers(listener: () => void): () => void {\n const { subscribers } = getState();\n subscribers.add(listener);\n return () => {\n subscribers.delete(listener);\n };\n}\n\n/** The open layers from bottom to top (a copy; a parent always precedes its descendants). */\nexport function getOpenLayers(): LayerRecord[] {\n return [...getState().stack];\n}\n\n/** The open layer with this id, or `null`. */\nexport function getLayer(layerId: string): LayerRecord | null {\n return findLayer(getState(), layerId) ?? null;\n}\n\n/** Whether the open layer `layerId` is a (possibly indirect) descendant of `ancestorId`. */\nexport function isDescendantLayer(layerId: string, ancestorId: string): boolean {\n const state = getState();\n const layer = findLayer(state, layerId);\n return !!layer && isDescendantOf(state, layer, ancestorId);\n}\n\n/**\n * Every element that makes up the tree of `layerId`: the layer's own elements, the elements\n * registered for it and the same for each descendant layer (the allow-list is not included).\n * With `includeOwnElements: false` the layer's own `getElements()` are left out (its descendants'\n * are still included).\n */\nexport function getLayerTreeElements(\n layerId: string,\n options?: { includeOwnElements?: boolean },\n): HTMLElement[] {\n const state = getState();\n const result: HTMLElement[] = [];\n const includeOwn = options?.includeOwnElements ?? true;\n const visit = (id: string, visited: Set<string>) => {\n if (visited.has(id)) return;\n visited.add(id);\n const record = findLayer(state, id);\n if (record && (includeOwn || id !== layerId)) {\n for (const el of record.getElements()) {\n if (el && !result.includes(el)) result.push(el);\n }\n }\n for (const el of state.elements.get(id) ?? []) {\n if (!result.includes(el)) result.push(el);\n }\n for (const layer of state.stack) {\n if (layer.parentId === id) visit(layer.id, visited);\n }\n };\n visit(layerId, new Set());\n return result;\n}\n\n/**\n * Whether focusing `el` would send focus behind another open modal layer: the topmost open modal\n * layer other than `exceptLayerId` (and its descendants, which close with it) does not contain\n * `el` in its tree. An element inside that modal's tree (for example an opener inside a parent\n * dialog) is reachable and returns `false`. Used to validate focus-restore targets.\n */\nexport function isInsideOtherOpenModal(el: Element, exceptLayerId?: string): boolean {\n const state = getState();\n for (let i = state.stack.length - 1; i >= 0; i--) {\n const layer = state.stack[i];\n if (layer.kind !== 'modal') continue;\n if (exceptLayerId !== undefined) {\n if (layer.id === exceptLayerId || isDescendantOf(state, layer, exceptLayerId)) continue;\n }\n return !isInsideLayerTree(layer.id, el);\n }\n return false;\n}\n\n/**\n * Registers an element (a portal wrapper) as part of the layer `layerId`, so presses and focus\n * inside it count as inside that layer and its ancestors. Returns the unregister function (usable\n * as a React 19 ref-callback cleanup). The layer does not need to be registered yet.\n */\nexport function registerLayerElement(layerId: string, el: HTMLElement): () => void {\n const state = getState();\n let set = state.elements.get(layerId);\n if (!set) {\n set = new Set();\n state.elements.set(layerId, set);\n }\n set.add(el);\n return () => {\n const current = state.elements.get(layerId);\n if (!current) return;\n current.delete(el);\n if (current.size === 0) state.elements.delete(layerId);\n };\n}\n\n/**\n * Registers an open layer and returns its unregister function. `record.order` is set to the next\n * value of the global open-order counter. The layer is placed on top of the stack — or, when some\n * of its descendants registered first (same commit), directly below the earliest of them.\n */\nexport function registerLayer(record: LayerRecord): () => void {\n const state = getState();\n state.counter += 1;\n record.order = state.counter;\n\n const firstDescendant = state.stack.findIndex((layer) => isDescendantOf(state, layer, record.id));\n if (firstDescendant === -1) state.stack.push(record);\n else state.stack.splice(firstDescendant, 0, record);\n\n ensureListeners(state);\n notifySubscribers(state);\n\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n const index = state.stack.indexOf(record);\n if (index !== -1) state.stack.splice(index, 1);\n if (state.press) {\n state.press.layers = state.press.layers.filter((layer) => layer !== record);\n }\n if (state.stack.length === 0) removeListeners(state);\n notifySubscribers(state);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Document listeners\n// ---------------------------------------------------------------------------\n\nfunction getEventTargetNode(event: Event): Node | null {\n const target = event.target as { nodeType?: unknown } | null;\n return target && typeof target.nodeType === 'number' ? (target as Node) : null;\n}\n\n/** Topmost first: descendants before their ancestors. */\nfunction sortTopmostFirst(layers: LayerRecord[]): LayerRecord[] {\n return [...layers].sort((a, b) => compareLayers(b, a));\n}\n\n/**\n * The layer that handles an Escape whose target / focused element is `target` / `active`.\n * Candidates are the escape-enabled layers that are not stacked below the topmost isolating modal\n * (a modal that ignores Escape never lets the key close something inert behind it — its ancestor\n * dialog as much as an older sibling); a layer with `escape: 'inside'` is a candidate only while\n * its tree contains them (the toast region counts as inside every layer):\n * 1. the innermost layer whose tree contains them (the topmost such layer) is the focus scope;\n * 2. the topmost candidate of that scope's subtree handles it — the scope itself or an open\n * descendant above it (a tooltip or popover opened from the focused dialog closes first, while\n * a sibling of the focused layer is not in its subtree);\n * 3. else the topmost candidate whose tree contains them (an ancestor);\n * 4. else — no layer contains them, or none of the containing layers takes Escape — the global\n * topmost candidate.\n */\nfunction findEscapeHandler(\n state: LayerState,\n target: Node | null,\n active: Element | null,\n): LayerRecord | null {\n const barrier = getIsolationBarrier(state);\n const contains = (layer: LayerRecord) =>\n (!!target && isInsideLayerTree(layer.id, target)) ||\n (!!active && isInsideLayerTree(layer.id, active));\n const isCandidate = (layer: LayerRecord) =>\n (layer.escape === true || (layer.escape === 'inside' && contains(layer))) &&\n !isBelowBarrier(layer, barrier);\n const scope = getTopmostLayer(contains);\n const handler = scope\n ? (getTopmostLayer(\n (layer) =>\n isCandidate(layer) && (layer === scope || isDescendantOf(state, layer, scope.id)),\n ) ?? getTopmostLayer((layer) => isCandidate(layer) && contains(layer)))\n : null;\n return handler ?? getTopmostLayer(isCandidate);\n}\n\n/** Keys that activate the focused control with a synthetic click. */\nfunction isClickActivationKey(key: string): boolean {\n return key === 'Enter' || key === ' ' || key === 'Spacebar';\n}\n\nfunction handleKeyDown(event: KeyboardEvent): void {\n const state = getState();\n if (event.key === 'Escape' || event.key === 'Esc') {\n if (event.defaultPrevented || event.isComposing) return;\n const handler = findEscapeHandler(state, getEventTargetNode(event), document.activeElement);\n if (!handler) return;\n event.preventDefault();\n handler.onDismiss('escape', event);\n return;\n }\n // A keyboard-activated click (Enter/Space) must not dismiss layers recorded by an unrelated\n // earlier pointerdown. Other keys keep the pending press: modifiers held for a Shift/Ctrl+click\n // auto-repeat their keydown while the pointer is down.\n if (isClickActivationKey(event.key)) state.press = null;\n}\n\nfunction handlePointerDown(event: PointerEvent): void {\n const state = getState();\n const target = getEventTargetNode(event);\n // Only a primary press is followed by a click (right/middle buttons fire contextmenu/auxclick).\n if (!target || event.button !== 0) {\n state.press = null;\n return;\n }\n const barrier = getIsolationBarrier(state);\n const layers = state.stack.filter((layer) => {\n const { outsidePress } = layer;\n if (!outsidePress) return false;\n // A layer behind an open isolating modal (its parent dialog, or a dialog below a sibling\n // modal opened from inside it) is inert and not reachable: presses inside that modal, or on\n // its backdrop, are not \"outside\" presses for it.\n if (isBelowBarrier(layer, barrier)) return false;\n if (isInsideLayerTree(layer.id, target)) return false;\n return typeof outsidePress !== 'function' || outsidePress(event) !== false;\n });\n state.press = { layers };\n}\n\n/**\n * How long (ms) a touch, pen or unknown-device press waits for its click after the pointerup. A\n * tap's click follows within about 350 ms (at most the double-tap delay); a press that gets no\n * click (a long press that opened the context menu, a tap on a non-clickable area) is forgotten\n * after this, so a later programmatic `click()` cannot complete it.\n */\nconst GESTURE_CLICK_TIMEOUT_MS = 1000;\n\n/**\n * A mouse click is dispatched right after its pointerup, in the same task. When none follows (the\n * pointer was released over another window or element tree), a mouse press is forgotten on the\n * next macrotask, so a later programmatic `click()` cannot complete it. Touch and stylus taps are\n * turned into a click by a separate gesture event in a later task (Apple Pencil on iPadOS and\n * Android styluses report `pointerType: 'pen'`, and an unknown device type `''` may behave the\n * same way), so every other pointer type keeps its press for {@link GESTURE_CLICK_TIMEOUT_MS}.\n * The next pointerdown, pointercancel, contextmenu or Enter/Space forgets a press earlier.\n */\nfunction handlePointerUp(event: PointerEvent): void {\n const press = getState().press;\n if (!press) return;\n const timeout = event.pointerType === 'mouse' ? 0 : GESTURE_CLICK_TIMEOUT_MS;\n setTimeout(() => {\n const current = getState();\n if (current.press === press) current.press = null;\n }, timeout);\n}\n\n/** A cancelled pointer stream, or a context menu (a long press, a Mac Ctrl+click), gets no click. */\nfunction forgetPress(): void {\n getState().press = null;\n}\n\nfunction handleClick(event: MouseEvent): void {\n const state = getState();\n const press = state.press;\n state.press = null;\n if (!press) return;\n const target = getEventTargetNode(event);\n const toDismiss = press.layers.filter(\n (layer) => !(target && isInsideLayerTree(layer.id, target)),\n );\n for (const layer of sortTopmostFirst(toDismiss)) {\n // An earlier layer's onDismiss may already have unregistered this one.\n if (state.stack.includes(layer)) layer.onDismiss('outside-press', event);\n }\n}\n\nfunction handleFocusIn(event: FocusEvent): void {\n const target = getEventTargetNode(event);\n if (!target) return;\n const candidates = getState().stack.filter(\n (layer) => layer.focusOutside && !isInsideLayerTree(layer.id, target),\n );\n if (candidates.length === 0) return;\n // Not in this dispatch: React applies `autoFocus` in the layout phase of the commit that mounts\n // a surface, before that surface's portal wrapper and dismiss layer register. A field focused\n // as a popover or dialog opens inside the layer is inside its tree once that commit has run.\n queueMicrotask(() => dismissFocusOutside(candidates, target, event));\n}\n\n/**\n * Dismisses each of `candidates` that is still open and whose tree still contains neither the\n * focusin `target` nor the element focused now (focus that came back inside keeps it open; focus\n * lost to `<body>` after leaving does not).\n */\nfunction dismissFocusOutside(candidates: LayerRecord[], target: Node, event: FocusEvent): void {\n const state = getState();\n const active = (target.ownerDocument ?? document).activeElement;\n const toDismiss = candidates.filter(\n (layer) =>\n state.stack.includes(layer) &&\n !isInsideLayerTree(layer.id, target) &&\n !(active && isInsideLayerTree(layer.id, active)),\n );\n for (const layer of sortTopmostFirst(toDismiss)) {\n // An earlier layer's onDismiss may already have unregistered this one.\n if (state.stack.includes(layer)) layer.onDismiss('focus-outside', event);\n }\n}\n\nfunction ensureListeners(state: LayerState): void {\n if (state.listeners || typeof document === 'undefined') return;\n const doc = document;\n doc.addEventListener('keydown', handleKeyDown);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('pointerup', handlePointerUp, true);\n doc.addEventListener('pointercancel', forgetPress, true);\n doc.addEventListener('contextmenu', forgetPress, true);\n doc.addEventListener('click', handleClick);\n doc.addEventListener('focusin', handleFocusIn, true);\n state.listeners = {\n remove() {\n doc.removeEventListener('keydown', handleKeyDown);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('pointerup', handlePointerUp, true);\n doc.removeEventListener('pointercancel', forgetPress, true);\n doc.removeEventListener('contextmenu', forgetPress, true);\n doc.removeEventListener('click', handleClick);\n doc.removeEventListener('focusin', handleFocusIn, true);\n },\n };\n}\n\nfunction removeListeners(state: LayerState): void {\n state.listeners?.remove();\n state.listeners = null;\n state.press = null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"layers.cjs","names":["getGlobalRegistry","require_globalRegistry","Z_INDEX","ALLOW_OUTSIDE_SELECTOR","modalAllowProps","getState","state","notifySubscribers","subscriber","ELEMENT_NODE","findLayer","id","layer","isDescendantOf","visited","parentId","ancestorId","containsNode","container","target","isInsideTreeWithoutAllowList","layerId","record","el","registered","isInsideAllowList","isInsideLayerTree","compareLayers","a","b","indexA","indexB","getTopmostLayer","i","stack","predicate","registerLayerIsolation","previous","isolated","count","getIsolationBarrier","hasIsolatingModalBelow","self","isBelowBarrier","barrier","subscribeLayers","subscribers","listener","hasOpenModal","getOpenLayers","getLayer","isDescendantLayer","getLayerTreeElements","result","includeOwn","options","visit","isInsideOtherOpenModal","exceptLayerId","registerLayerElement","set","current","registerLayer","firstDescendant","ensureListeners","index","removeListeners","getEventTargetNode","event","sortTopmostFirst","layers","findEscapeHandler","contains","active","isCandidate","scope","isClickActivationKey","key","handleKeyDown","handler","handlePointerDown","outsidePress","GESTURE_CLICK_TIMEOUT_MS","handlePointerUp","press","timeout","forgetPress","handleClick","toDismiss","handleFocusIn","candidates","dismissFocusOutside","doc"],"sources":["../../src/lib/layers.ts"],"sourcesContent":["import { getGlobalRegistry } from './globalRegistry';\n\n/**\n * The shared stack of open dismissable layers (dialogs, drawers, popovers, menus, listboxes,\n * tooltips) and the document listeners that route Escape, outside presses and focus changes to\n * them. `useDismiss` registers layers; focus traps, modal isolation and focus restore read the\n * stack. It lives in `getGlobalRegistry('layers')`, so an app that loads both the ESM and the CJS\n * build still has one stack and one set of listeners.\n */\n\n/**\n * z-index of each portal layer. `Portal` adds its nesting depth, so a surface opened from inside\n * another overlay always stacks above it. The values fall back to the defaults of `tokens.css`.\n */\nexport const Z_INDEX = {\n overlay: 'var(--wave-z-overlay, 1000)',\n toast: 'var(--wave-z-toast, 1100)',\n tooltip: 'var(--wave-z-tooltip, 1200)',\n} as const;\n\n/**\n * What kind of surface a layer is. `modal` marks dialog-like surfaces (focus-restore validation and\n * modal isolation look for them); a modal blocks presses and Escape for the layers below it only\n * while its page isolation is active ({@link registerLayerIsolation}). `dialog` marks a non-modal\n * Dialog or Drawer: it shields nothing (no isolation), takes Escape only from inside its tree\n * (`escape: 'inside'`), and the Toaster moves out of its way; focus-restore validation and modal\n * isolation do not count it.\n */\nexport type LayerKind = 'modal' | 'dialog' | 'popover' | 'menu' | 'listbox' | 'tooltip' | 'toast';\n\n/** Why a popup layer is dismissed: Escape, a press outside it, or focus moving outside it. */\nexport type DismissReason = 'escape' | 'outside-press' | 'focus-outside';\n\n/** A registered layer. Getters are allowed, so fields can read the latest options. */\nexport interface LayerRecord {\n /** Unique id; children name it as their `parentId` (through `DismissLayerContext`). */\n id: string;\n /** The enclosing layer (React parentage, which survives portals), or `null`. */\n parentId: string | null;\n kind: LayerKind;\n /** Global open-order counter, assigned by {@link registerLayer} (the passed value is replaced). */\n order: number;\n /** The elements that belong to the layer: its surface, its trigger, extra ignore targets. */\n getElements(): Array<HTMLElement | null>;\n /** The element the layer is anchored to (its trigger); focus traps leave the layer through it. */\n getAnchor(): HTMLElement | null;\n /**\n * Whether Escape dismisses the layer: always (`true`), never (`false`), or only while the key's\n * target or the focused element is in the layer's tree (`'inside'`).\n */\n escape: boolean | 'inside';\n /** Whether a press outside the layer's tree dismisses it; a predicate returning `false` opts out. */\n outsidePress: boolean | ((event: PointerEvent | MouseEvent) => boolean);\n /** Whether focus moving outside the layer's tree dismisses it. */\n focusOutside: boolean;\n /** Called when the layer should close. */\n onDismiss(reason: DismissReason, event: Event): void;\n}\n\n/**\n * Regions (the Toaster viewport) whose content counts as inside **every** layer and whose\n * tabbables join every focus trap's Tab cycle. Modal isolation never makes them inert.\n */\nexport const ALLOW_OUTSIDE_SELECTOR = '[data-wave-focus-trap-allow]';\n\n/**\n * Props that mark an app-owned region (a notification area, a live status bar) so that WaveUI's\n * modal surfaces leave it usable. Spread them on the region's element: `<div {...modalAllowProps}>`.\n * Over an open Dialog or Drawer the region\n *\n * - counts as inside every dismiss layer, so a press in it closes nothing;\n * - has its tabbable elements in the Tab cycle of every focus trap;\n * - is never made `inert` by the modal's page isolation.\n *\n * The attribute it sets, `data-wave-focus-trap-allow`, is the one the Toaster's own region\n * carries, and it is a stable contract.\n */\nexport const modalAllowProps = { 'data-wave-focus-trap-allow': '' } as const;\n\ninterface PressSnapshot {\n /**\n * Layers with outside press enabled whose tree did not contain the pointerdown target. Only these\n * can be dismissed by the click: a layer registered later (opened by that press, or closed and\n * reopened, which registers a new record) is not in it, and a layer that unregisters is removed.\n */\n layers: LayerRecord[];\n}\n\ninterface InstalledListeners {\n remove(): void;\n}\n\ninterface LayerState {\n /** Open layers from bottom to top. A parent always precedes its descendants. */\n stack: LayerRecord[];\n /** Elements registered per layer id (portal wrappers of the layer's descendants). */\n elements: Map<string, Set<HTMLElement>>;\n counter: number;\n press: PressSnapshot | null;\n listeners: InstalledListeners | null;\n /**\n * Called after a layer registers or unregisters (modal isolation re-plans), and after the\n * isolated set changes (the dim-once snapshot).\n */\n subscribers: Set<() => void>;\n /** Ids of layers whose modal isolation currently makes the page inert, with a use count. */\n isolated: Map<string, number>;\n}\n\nfunction getState(): LayerState {\n const state = getGlobalRegistry<LayerState>('layers', () => ({\n stack: [],\n elements: new Map(),\n counter: 0,\n press: null,\n listeners: null,\n subscribers: new Set(),\n isolated: new Map(),\n }));\n // A registry created by an earlier copy of this module (hot reload) may predate these fields.\n state.subscribers ??= new Set();\n state.isolated ??= new Map();\n return state;\n}\n\nfunction notifySubscribers(state: LayerState): void {\n for (const subscriber of Array.from(state.subscribers)) subscriber();\n}\n\nconst ELEMENT_NODE = 1;\n\nfunction findLayer(state: LayerState, id: string | null): LayerRecord | undefined {\n if (id === null) return undefined;\n return state.stack.find((layer) => layer.id === id);\n}\n\n/** Whether `layer` is a (possibly indirect) descendant of the layer `ancestorId`. */\nfunction isDescendantOf(state: LayerState, layer: LayerRecord, ancestorId: string): boolean {\n const visited = new Set<string>([layer.id]);\n let parentId = layer.parentId;\n while (parentId !== null && !visited.has(parentId)) {\n if (parentId === ancestorId) return true;\n visited.add(parentId);\n parentId = findLayer(state, parentId)?.parentId ?? null;\n }\n return false;\n}\n\nfunction containsNode(container: Node | null | undefined, target: Node): boolean {\n return !!container && container.contains(target);\n}\n\nfunction isInsideTreeWithoutAllowList(\n state: LayerState,\n layerId: string,\n target: Node,\n visited: Set<string>,\n): boolean {\n if (visited.has(layerId)) return false;\n visited.add(layerId);\n\n const record = findLayer(state, layerId);\n if (record && record.getElements().some((el) => containsNode(el, target))) return true;\n\n const registered = state.elements.get(layerId);\n if (registered) {\n for (const el of registered) {\n if (containsNode(el, target)) return true;\n }\n }\n\n for (const layer of state.stack) {\n if (\n layer.parentId === layerId &&\n isInsideTreeWithoutAllowList(state, layer.id, target, visited)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isInsideAllowList(target: Node): boolean {\n const el = target.nodeType === ELEMENT_NODE ? (target as Element) : target.parentElement;\n return !!el && el.closest(ALLOW_OUTSIDE_SELECTOR) !== null;\n}\n\n/**\n * Whether `target` belongs to the tree of the layer `layerId`:\n * - the layer's own elements (`getElements()`),\n * - elements registered for it with {@link registerLayerElement} (portal wrappers of overlays\n * rendered inside it — React parentage survives portals, the DOM does not),\n * - every descendant layer's tree, and\n * - regions matching {@link ALLOW_OUTSIDE_SELECTOR} (the Toaster viewport), which count as inside\n * every layer.\n */\nexport function isInsideLayerTree(layerId: string, target: Node): boolean {\n if (isInsideAllowList(target)) return true;\n return isInsideTreeWithoutAllowList(getState(), layerId, target, new Set());\n}\n\n/**\n * Compares two layers for stacking: `> 0` when `a` is above `b`. A descendant layer is above its\n * ancestor; otherwise the layer whose tree opened later is above. (A parent that registers after\n * its descendants — effects run child-first when both open in one commit — takes the place of its\n * earliest descendant.)\n */\nexport function compareLayers(a: LayerRecord, b: LayerRecord): number {\n if (a === b || a.id === b.id) return 0;\n const state = getState();\n if (isDescendantOf(state, a, b.id)) return 1;\n if (isDescendantOf(state, b, a.id)) return -1;\n const indexA = state.stack.indexOf(a);\n const indexB = state.stack.indexOf(b);\n if (indexA !== -1 && indexB !== -1) return indexA - indexB;\n return a.order - b.order;\n}\n\n/** The topmost open layer (optionally the topmost one matching `predicate`), or `null`. */\nexport function getTopmostLayer(predicate?: (layer: LayerRecord) => boolean): LayerRecord | null {\n const { stack } = getState();\n for (let i = stack.length - 1; i >= 0; i--) {\n const layer = stack[i];\n if (!predicate || predicate(layer)) return layer;\n }\n return null;\n}\n\n/**\n * Marks the layer `layerId` as isolating the page: `useModalIsolation` made everything outside its\n * tree inert (Dialog, Drawer). While it is open, the topmost isolating layer is a barrier — layers\n * stacked below it (its ancestors and older siblings) are never dismissed by outside presses and\n * never receive Escape, the way a modal blocks the page behind it. Layers above it (its\n * descendants, or a modal opened later) are unaffected. A `kind: 'modal'` layer without isolation\n * (a transient popup such as the DatePicker calendar, whose page stays interactive) is no barrier.\n * Returns the unregister function; registrations are counted, so the layer stays marked until\n * every registration is removed.\n */\nexport function registerLayerIsolation(layerId: string): () => void {\n const state = getState();\n const { isolated } = state;\n const previous = isolated.get(layerId) ?? 0;\n isolated.set(layerId, previous + 1);\n // Subscribers (the dim-once snapshot of Dialog and Drawer) read isolation, which changes without\n // a layer registering: notify when the isolated set gains the layer, and again when it loses it.\n if (previous === 0) notifySubscribers(state);\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n const count = (isolated.get(layerId) ?? 1) - 1;\n if (count > 0) isolated.set(layerId, count);\n else if (isolated.delete(layerId)) notifySubscribers(state);\n };\n}\n\n/** The topmost open layer whose modal isolation is active, or `null`. */\nfunction getIsolationBarrier(state: LayerState): LayerRecord | null {\n if (state.isolated.size === 0) return null;\n return getTopmostLayer((layer) => state.isolated.has(layer.id));\n}\n\n/**\n * Whether an open layer whose modal isolation is active ({@link registerLayerIsolation}) is\n * stacked below the layer `layerId` (`compareLayers(self, other) > 0`). A `layerId` that is not\n * registered yet (the render that opens it) counts as the topmost layer, so every isolating open\n * layer counts. The layer itself and its descendants never count. Read during render through\n * `useSyncExternalStore(subscribeLayers, …)` (the dim-once rule of Dialog and Drawer).\n */\nexport function hasIsolatingModalBelow(layerId: string): boolean {\n const state = getState();\n if (state.isolated.size === 0) return false;\n const self = findLayer(state, layerId);\n return state.stack.some(\n (layer) =>\n layer.id !== layerId &&\n state.isolated.has(layer.id) &&\n !isDescendantOf(state, layer, layerId) &&\n (!self || compareLayers(self, layer) > 0),\n );\n}\n\n/** Whether `layer` is stacked below `barrier` (neither the barrier itself nor above it). */\nfunction isBelowBarrier(layer: LayerRecord, barrier: LayerRecord | null): boolean {\n return !!barrier && barrier !== layer && compareLayers(barrier, layer) > 0;\n}\n\n/**\n * Whether `layer` is stacked below the topmost open **isolating** modal (see\n * {@link registerLayerIsolation}). Such a layer is behind the modal and inert: outside presses\n * never dismiss it and Escape never reaches it. The modal's descendants are above it and stay\n * reachable; a modal-kind layer without isolation shields nothing.\n */\nexport function isBehindIsolatingModal(layer: LayerRecord): boolean {\n return isBelowBarrier(layer, getIsolationBarrier(getState()));\n}\n\n/**\n * Calls `listener` synchronously after any layer registers or unregisters (in the committing\n * component's layout effect, so a modal can re-plan its isolation before a newly opened modal\n * moves focus), and after a layer's modal isolation starts or ends ({@link registerLayerIsolation}).\n * Returns the unsubscribe function.\n */\nexport function subscribeLayers(listener: () => void): () => void {\n const { subscribers } = getState();\n subscribers.add(listener);\n return () => {\n subscribers.delete(listener);\n };\n}\n\n/**\n * Whether a modal surface is open now: a layer of kind `'modal'` (a Dialog, an overlay Drawer, an\n * alert, the DatePicker's calendar, or your own `useDismiss({ kind: 'modal' })`). A non-modal\n * surface is no modal. Server-safe: `false` when no layer is registered, as on the server.\n */\nexport function hasOpenModal(): boolean {\n return getState().stack.some((layer) => layer.kind === 'modal');\n}\n\n/** The open layers from bottom to top (a copy; a parent always precedes its descendants). */\nexport function getOpenLayers(): LayerRecord[] {\n return [...getState().stack];\n}\n\n/** The open layer with this id, or `null`. */\nexport function getLayer(layerId: string): LayerRecord | null {\n return findLayer(getState(), layerId) ?? null;\n}\n\n/** Whether the open layer `layerId` is a (possibly indirect) descendant of `ancestorId`. */\nexport function isDescendantLayer(layerId: string, ancestorId: string): boolean {\n const state = getState();\n const layer = findLayer(state, layerId);\n return !!layer && isDescendantOf(state, layer, ancestorId);\n}\n\n/**\n * Every element that makes up the tree of `layerId`: the layer's own elements, the elements\n * registered for it and the same for each descendant layer (the allow-list is not included).\n * With `includeOwnElements: false` the layer's own `getElements()` are left out (its descendants'\n * are still included).\n */\nexport function getLayerTreeElements(\n layerId: string,\n options?: { includeOwnElements?: boolean },\n): HTMLElement[] {\n const state = getState();\n const result: HTMLElement[] = [];\n const includeOwn = options?.includeOwnElements ?? true;\n const visit = (id: string, visited: Set<string>) => {\n if (visited.has(id)) return;\n visited.add(id);\n const record = findLayer(state, id);\n if (record && (includeOwn || id !== layerId)) {\n for (const el of record.getElements()) {\n if (el && !result.includes(el)) result.push(el);\n }\n }\n for (const el of state.elements.get(id) ?? []) {\n if (!result.includes(el)) result.push(el);\n }\n for (const layer of state.stack) {\n if (layer.parentId === id) visit(layer.id, visited);\n }\n };\n visit(layerId, new Set());\n return result;\n}\n\n/**\n * Whether focusing `el` would send focus behind another open modal layer: the topmost open modal\n * layer other than `exceptLayerId` (and its descendants, which close with it) does not contain\n * `el` in its tree. An element inside that modal's tree (for example an opener inside a parent\n * dialog) is reachable and returns `false`. Used to validate focus-restore targets.\n */\nexport function isInsideOtherOpenModal(el: Element, exceptLayerId?: string): boolean {\n const state = getState();\n for (let i = state.stack.length - 1; i >= 0; i--) {\n const layer = state.stack[i];\n if (layer.kind !== 'modal') continue;\n if (exceptLayerId !== undefined) {\n if (layer.id === exceptLayerId || isDescendantOf(state, layer, exceptLayerId)) continue;\n }\n return !isInsideLayerTree(layer.id, el);\n }\n return false;\n}\n\n/**\n * Registers an element (a portal wrapper) as part of the layer `layerId`, so presses and focus\n * inside it count as inside that layer and its ancestors. Returns the unregister function (usable\n * as a React 19 ref-callback cleanup). The layer does not need to be registered yet.\n */\nexport function registerLayerElement(layerId: string, el: HTMLElement): () => void {\n const state = getState();\n let set = state.elements.get(layerId);\n if (!set) {\n set = new Set();\n state.elements.set(layerId, set);\n }\n set.add(el);\n return () => {\n const current = state.elements.get(layerId);\n if (!current) return;\n current.delete(el);\n if (current.size === 0) state.elements.delete(layerId);\n };\n}\n\n/**\n * Registers an open layer and returns its unregister function. `record.order` is set to the next\n * value of the global open-order counter. The layer is placed on top of the stack — or, when some\n * of its descendants registered first (same commit), directly below the earliest of them.\n */\nexport function registerLayer(record: LayerRecord): () => void {\n const state = getState();\n state.counter += 1;\n record.order = state.counter;\n\n const firstDescendant = state.stack.findIndex((layer) => isDescendantOf(state, layer, record.id));\n if (firstDescendant === -1) state.stack.push(record);\n else state.stack.splice(firstDescendant, 0, record);\n\n ensureListeners(state);\n notifySubscribers(state);\n\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n const index = state.stack.indexOf(record);\n if (index !== -1) state.stack.splice(index, 1);\n if (state.press) {\n state.press.layers = state.press.layers.filter((layer) => layer !== record);\n }\n if (state.stack.length === 0) removeListeners(state);\n notifySubscribers(state);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Document listeners\n// ---------------------------------------------------------------------------\n\nfunction getEventTargetNode(event: Event): Node | null {\n const target = event.target as { nodeType?: unknown } | null;\n return target && typeof target.nodeType === 'number' ? (target as Node) : null;\n}\n\n/** Topmost first: descendants before their ancestors. */\nfunction sortTopmostFirst(layers: LayerRecord[]): LayerRecord[] {\n return [...layers].sort((a, b) => compareLayers(b, a));\n}\n\n/**\n * The layer that handles an Escape whose target / focused element is `target` / `active`.\n * Candidates are the escape-enabled layers that are not stacked below the topmost isolating modal\n * (a modal that ignores Escape never lets the key close something inert behind it — its ancestor\n * dialog as much as an older sibling); a layer with `escape: 'inside'` is a candidate only while\n * its tree contains them (the toast region counts as inside every layer):\n * 1. the innermost layer whose tree contains them (the topmost such layer) is the focus scope;\n * 2. the topmost candidate of that scope's subtree handles it — the scope itself or an open\n * descendant above it (a tooltip or popover opened from the focused dialog closes first, while\n * a sibling of the focused layer is not in its subtree);\n * 3. else the topmost candidate whose tree contains them (an ancestor);\n * 4. else — no layer contains them, or none of the containing layers takes Escape — the global\n * topmost candidate.\n */\nfunction findEscapeHandler(\n state: LayerState,\n target: Node | null,\n active: Element | null,\n): LayerRecord | null {\n const barrier = getIsolationBarrier(state);\n const contains = (layer: LayerRecord) =>\n (!!target && isInsideLayerTree(layer.id, target)) ||\n (!!active && isInsideLayerTree(layer.id, active));\n const isCandidate = (layer: LayerRecord) =>\n (layer.escape === true || (layer.escape === 'inside' && contains(layer))) &&\n !isBelowBarrier(layer, barrier);\n const scope = getTopmostLayer(contains);\n const handler = scope\n ? (getTopmostLayer(\n (layer) =>\n isCandidate(layer) && (layer === scope || isDescendantOf(state, layer, scope.id)),\n ) ?? getTopmostLayer((layer) => isCandidate(layer) && contains(layer)))\n : null;\n return handler ?? getTopmostLayer(isCandidate);\n}\n\n/** Keys that activate the focused control with a synthetic click. */\nfunction isClickActivationKey(key: string): boolean {\n return key === 'Enter' || key === ' ' || key === 'Spacebar';\n}\n\nfunction handleKeyDown(event: KeyboardEvent): void {\n const state = getState();\n if (event.key === 'Escape' || event.key === 'Esc') {\n if (event.defaultPrevented || event.isComposing) return;\n const handler = findEscapeHandler(state, getEventTargetNode(event), document.activeElement);\n if (!handler) return;\n event.preventDefault();\n handler.onDismiss('escape', event);\n return;\n }\n // A keyboard-activated click (Enter/Space) must not dismiss layers recorded by an unrelated\n // earlier pointerdown. Other keys keep the pending press: modifiers held for a Shift/Ctrl+click\n // auto-repeat their keydown while the pointer is down.\n if (isClickActivationKey(event.key)) state.press = null;\n}\n\nfunction handlePointerDown(event: PointerEvent): void {\n const state = getState();\n const target = getEventTargetNode(event);\n // Only a primary press is followed by a click (right/middle buttons fire contextmenu/auxclick).\n if (!target || event.button !== 0) {\n state.press = null;\n return;\n }\n const barrier = getIsolationBarrier(state);\n const layers = state.stack.filter((layer) => {\n const { outsidePress } = layer;\n if (!outsidePress) return false;\n // A layer behind an open isolating modal (its parent dialog, or a dialog below a sibling\n // modal opened from inside it) is inert and not reachable: presses inside that modal, or on\n // its backdrop, are not \"outside\" presses for it.\n if (isBelowBarrier(layer, barrier)) return false;\n if (isInsideLayerTree(layer.id, target)) return false;\n return typeof outsidePress !== 'function' || outsidePress(event) !== false;\n });\n state.press = { layers };\n}\n\n/**\n * How long (ms) a touch, pen or unknown-device press waits for its click after the pointerup. A\n * tap's click follows within about 350 ms (at most the double-tap delay); a press that gets no\n * click (a long press that opened the context menu, a tap on a non-clickable area) is forgotten\n * after this, so a later programmatic `click()` cannot complete it.\n */\nconst GESTURE_CLICK_TIMEOUT_MS = 1000;\n\n/**\n * A mouse click is dispatched right after its pointerup, in the same task. When none follows (the\n * pointer was released over another window or element tree), a mouse press is forgotten on the\n * next macrotask, so a later programmatic `click()` cannot complete it. Touch and stylus taps are\n * turned into a click by a separate gesture event in a later task (Apple Pencil on iPadOS and\n * Android styluses report `pointerType: 'pen'`, and an unknown device type `''` may behave the\n * same way), so every other pointer type keeps its press for {@link GESTURE_CLICK_TIMEOUT_MS}.\n * The next pointerdown, pointercancel, contextmenu or Enter/Space forgets a press earlier.\n */\nfunction handlePointerUp(event: PointerEvent): void {\n const press = getState().press;\n if (!press) return;\n const timeout = event.pointerType === 'mouse' ? 0 : GESTURE_CLICK_TIMEOUT_MS;\n setTimeout(() => {\n const current = getState();\n if (current.press === press) current.press = null;\n }, timeout);\n}\n\n/** A cancelled pointer stream, or a context menu (a long press, a Mac Ctrl+click), gets no click. */\nfunction forgetPress(): void {\n getState().press = null;\n}\n\nfunction handleClick(event: MouseEvent): void {\n const state = getState();\n const press = state.press;\n state.press = null;\n if (!press) return;\n const target = getEventTargetNode(event);\n const toDismiss = press.layers.filter(\n (layer) => !(target && isInsideLayerTree(layer.id, target)),\n );\n for (const layer of sortTopmostFirst(toDismiss)) {\n // An earlier layer's onDismiss may already have unregistered this one.\n if (state.stack.includes(layer)) layer.onDismiss('outside-press', event);\n }\n}\n\nfunction handleFocusIn(event: FocusEvent): void {\n const target = getEventTargetNode(event);\n if (!target) return;\n const candidates = getState().stack.filter(\n (layer) => layer.focusOutside && !isInsideLayerTree(layer.id, target),\n );\n if (candidates.length === 0) return;\n // Not in this dispatch: React applies `autoFocus` in the layout phase of the commit that mounts\n // a surface, before that surface's portal wrapper and dismiss layer register. A field focused\n // as a popover or dialog opens inside the layer is inside its tree once that commit has run.\n queueMicrotask(() => dismissFocusOutside(candidates, target, event));\n}\n\n/**\n * Dismisses each of `candidates` that is still open and whose tree still contains neither the\n * focusin `target` nor the element focused now (focus that came back inside keeps it open; focus\n * lost to `<body>` after leaving does not).\n */\nfunction dismissFocusOutside(candidates: LayerRecord[], target: Node, event: FocusEvent): void {\n const state = getState();\n const active = (target.ownerDocument ?? document).activeElement;\n const toDismiss = candidates.filter(\n (layer) =>\n state.stack.includes(layer) &&\n !isInsideLayerTree(layer.id, target) &&\n !(active && isInsideLayerTree(layer.id, active)),\n );\n for (const layer of sortTopmostFirst(toDismiss)) {\n // An earlier layer's onDismiss may already have unregistered this one.\n if (state.stack.includes(layer)) layer.onDismiss('focus-outside', event);\n }\n}\n\nfunction ensureListeners(state: LayerState): void {\n if (state.listeners || typeof document === 'undefined') return;\n const doc = document;\n doc.addEventListener('keydown', handleKeyDown);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('pointerup', handlePointerUp, true);\n doc.addEventListener('pointercancel', forgetPress, true);\n doc.addEventListener('contextmenu', forgetPress, true);\n doc.addEventListener('click', handleClick);\n doc.addEventListener('focusin', handleFocusIn, true);\n state.listeners = {\n remove() {\n doc.removeEventListener('keydown', handleKeyDown);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('pointerup', handlePointerUp, true);\n doc.removeEventListener('pointercancel', forgetPress, true);\n doc.removeEventListener('contextmenu', forgetPress, true);\n doc.removeEventListener('click', handleClick);\n doc.removeEventListener('focusin', handleFocusIn, true);\n },\n };\n}\n\nfunction removeListeners(state: LayerState): void {\n state.listeners?.remove();\n state.listeners = null;\n state.press = null;\n}\n"],"mappings":"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"}