@mortenbrudvik/waveui 0.14.0 → 0.15.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 (125) hide show
  1. package/README.md +142 -32
  2. package/dist/components/data-display/InfoButton.cjs +1 -1
  3. package/dist/components/data-display/InfoButton.cjs.map +1 -1
  4. package/dist/components/data-display/InfoButton.mjs +90 -82
  5. package/dist/components/data-display/InfoButton.mjs.map +1 -1
  6. package/dist/components/data-display/InfoLabel.cjs +1 -1
  7. package/dist/components/data-display/InfoLabel.cjs.map +1 -1
  8. package/dist/components/data-display/InfoLabel.mjs +19 -18
  9. package/dist/components/data-display/InfoLabel.mjs.map +1 -1
  10. package/dist/components/feedback/MessageBarGroup.cjs +2 -0
  11. package/dist/components/feedback/MessageBarGroup.cjs.map +1 -0
  12. package/dist/components/feedback/MessageBarGroup.mjs +63 -0
  13. package/dist/components/feedback/MessageBarGroup.mjs.map +1 -0
  14. package/dist/components/feedback/ProgressBar.cjs +1 -1
  15. package/dist/components/feedback/ProgressBar.cjs.map +1 -1
  16. package/dist/components/feedback/ProgressBar.mjs +41 -39
  17. package/dist/components/feedback/ProgressBar.mjs.map +1 -1
  18. package/dist/components/feedback/Toaster.cjs +1 -1
  19. package/dist/components/feedback/Toaster.cjs.map +1 -1
  20. package/dist/components/feedback/Toaster.mjs +222 -216
  21. package/dist/components/feedback/Toaster.mjs.map +1 -1
  22. package/dist/components/layout/Accordion.cjs +1 -1
  23. package/dist/components/layout/Accordion.cjs.map +1 -1
  24. package/dist/components/layout/Accordion.mjs +124 -109
  25. package/dist/components/layout/Accordion.mjs.map +1 -1
  26. package/dist/components/layout/Carousel.cjs +1 -1
  27. package/dist/components/layout/Carousel.cjs.map +1 -1
  28. package/dist/components/layout/Carousel.mjs +207 -193
  29. package/dist/components/layout/Carousel.mjs.map +1 -1
  30. package/dist/components/layout/TabList.cjs +1 -1
  31. package/dist/components/layout/TabList.cjs.map +1 -1
  32. package/dist/components/layout/TabList.mjs +149 -108
  33. package/dist/components/layout/TabList.mjs.map +1 -1
  34. package/dist/components/layout/Tree.cjs.map +1 -1
  35. package/dist/components/layout/Tree.context.cjs +1 -1
  36. package/dist/components/layout/Tree.context.cjs.map +1 -1
  37. package/dist/components/layout/Tree.context.mjs +2 -1
  38. package/dist/components/layout/Tree.context.mjs.map +1 -1
  39. package/dist/components/layout/Tree.core.cjs +1 -1
  40. package/dist/components/layout/Tree.core.cjs.map +1 -1
  41. package/dist/components/layout/Tree.core.mjs +178 -165
  42. package/dist/components/layout/Tree.core.mjs.map +1 -1
  43. package/dist/components/layout/Tree.mjs.map +1 -1
  44. package/dist/components/navigation/Menu.popover.cjs +1 -1
  45. package/dist/components/navigation/Menu.popover.cjs.map +1 -1
  46. package/dist/components/navigation/Menu.popover.mjs +154 -168
  47. package/dist/components/navigation/Menu.popover.mjs.map +1 -1
  48. package/dist/components/navigation/Nav.cjs +1 -1
  49. package/dist/components/navigation/Nav.cjs.map +1 -1
  50. package/dist/components/navigation/Nav.mjs +156 -136
  51. package/dist/components/navigation/Nav.mjs.map +1 -1
  52. package/dist/components/navigation/NavDrawer.cjs +1 -1
  53. package/dist/components/navigation/NavDrawer.cjs.map +1 -1
  54. package/dist/components/navigation/NavDrawer.mjs +48 -45
  55. package/dist/components/navigation/NavDrawer.mjs.map +1 -1
  56. package/dist/components/overlays/Dialog.cjs +1 -1
  57. package/dist/components/overlays/Dialog.cjs.map +1 -1
  58. package/dist/components/overlays/Dialog.mjs +128 -122
  59. package/dist/components/overlays/Dialog.mjs.map +1 -1
  60. package/dist/components/overlays/Dialog.slots.cjs +1 -1
  61. package/dist/components/overlays/Dialog.slots.cjs.map +1 -1
  62. package/dist/components/overlays/Dialog.slots.mjs +12 -12
  63. package/dist/components/overlays/Dialog.slots.mjs.map +1 -1
  64. package/dist/components/overlays/Drawer.cjs.map +1 -1
  65. package/dist/components/overlays/Drawer.mjs.map +1 -1
  66. package/dist/components/overlays/Drawer.panel.cjs +1 -1
  67. package/dist/components/overlays/Drawer.panel.cjs.map +1 -1
  68. package/dist/components/overlays/Drawer.panel.mjs +97 -81
  69. package/dist/components/overlays/Drawer.panel.mjs.map +1 -1
  70. package/dist/components/overlays/Drawer.root.cjs +1 -1
  71. package/dist/components/overlays/Drawer.root.cjs.map +1 -1
  72. package/dist/components/overlays/Drawer.root.mjs +34 -31
  73. package/dist/components/overlays/Drawer.root.mjs.map +1 -1
  74. package/dist/components/overlays/Popover.cjs +1 -1
  75. package/dist/components/overlays/Popover.cjs.map +1 -1
  76. package/dist/components/overlays/Popover.mjs +231 -216
  77. package/dist/components/overlays/Popover.mjs.map +1 -1
  78. package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
  79. package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
  80. package/dist/components/overlays/TeachingPopover.parts.cjs +1 -1
  81. package/dist/components/overlays/TeachingPopover.parts.cjs.map +1 -1
  82. package/dist/components/overlays/TeachingPopover.parts.mjs +202 -173
  83. package/dist/components/overlays/TeachingPopover.parts.mjs.map +1 -1
  84. package/dist/components/overlays/TeachingPopover.root.cjs +1 -1
  85. package/dist/components/overlays/TeachingPopover.root.cjs.map +1 -1
  86. package/dist/components/overlays/TeachingPopover.root.mjs +108 -99
  87. package/dist/components/overlays/TeachingPopover.root.mjs.map +1 -1
  88. package/dist/components/overlays/Tooltip.cjs +1 -1
  89. package/dist/components/overlays/Tooltip.cjs.map +1 -1
  90. package/dist/components/overlays/Tooltip.mjs +66 -61
  91. package/dist/components/overlays/Tooltip.mjs.map +1 -1
  92. package/dist/components/provider/WaveProvider.cjs +1 -1
  93. package/dist/components/provider/WaveProvider.cjs.map +1 -1
  94. package/dist/components/provider/WaveProvider.mjs +26 -23
  95. package/dist/components/provider/WaveProvider.mjs.map +1 -1
  96. package/dist/hooks/useCollapsePresence.cjs +2 -0
  97. package/dist/hooks/useCollapsePresence.cjs.map +1 -0
  98. package/dist/hooks/useCollapsePresence.mjs +21 -0
  99. package/dist/hooks/useCollapsePresence.mjs.map +1 -0
  100. package/dist/hooks/useFocusBeforeClose.cjs +2 -0
  101. package/dist/hooks/useFocusBeforeClose.cjs.map +1 -0
  102. package/dist/hooks/useFocusBeforeClose.mjs +33 -0
  103. package/dist/hooks/useFocusBeforeClose.mjs.map +1 -0
  104. package/dist/hooks/useMotion.cjs +2 -0
  105. package/dist/hooks/useMotion.cjs.map +1 -0
  106. package/dist/hooks/useMotion.mjs +14 -0
  107. package/dist/hooks/useMotion.mjs.map +1 -0
  108. package/dist/hooks/usePresenceGroup.cjs +2 -0
  109. package/dist/hooks/usePresenceGroup.cjs.map +1 -0
  110. package/dist/hooks/usePresenceGroup.mjs +68 -0
  111. package/dist/hooks/usePresenceGroup.mjs.map +1 -0
  112. package/dist/index.cjs +1 -1
  113. package/dist/index.d.cts +721 -131
  114. package/dist/index.d.ts +721 -131
  115. package/dist/index.mjs +136 -135
  116. package/dist/lib/classNames.cjs +1 -1
  117. package/dist/lib/classNames.cjs.map +1 -1
  118. package/dist/lib/classNames.mjs +101 -90
  119. package/dist/lib/classNames.mjs.map +1 -1
  120. package/dist/lib/motion.cjs +2 -0
  121. package/dist/lib/motion.cjs.map +1 -0
  122. package/dist/lib/motion.mjs +43 -0
  123. package/dist/lib/motion.mjs.map +1 -0
  124. package/dist/styles.css +1 -1
  125. package/package.json +2 -1
@@ -16,25 +16,26 @@ import { joinIds as te } from "../../lib/aria.mjs";
16
16
  import { forcedColors as y } from "../../lib/styles.mjs";
17
17
  import { CheckIcon as ne, ChevronRightIcon as re, SubtractIcon as ie } from "../../lib/icons.mjs";
18
18
  import { isEditableTarget as ae, isOwnEvent as b } from "../../lib/events.mjs";
19
- import { TreeCheckForcedContext as x, TreeContext as oe, TreeItemContext as se, TreeLabelContext as S, TreeParentContext as C, useTreeContext as ce } from "./Tree.context.mjs";
20
- import { collectItems as le, computeCheckStates as w, toggleCheck as ue } from "./Tree.selection.mjs";
21
- import * as T from "react";
22
- import { jsx as E, jsxs as D } from "react/jsx-runtime";
19
+ import { useCollapsePresence as oe } from "../../hooks/useCollapsePresence.mjs";
20
+ import { TreeCheckForcedContext as x, TreeContext as se, TreeItemContext as ce, TreeLabelContext as S, TreeParentContext as le, useTreeContext as ue } from "./Tree.context.mjs";
21
+ import { collectItems as de, computeCheckStates as C, toggleCheck as fe } from "./Tree.selection.mjs";
22
+ import * as w from "react";
23
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
23
24
  //#region src/components/layout/Tree.core.tsx
24
- var de = [], fe = "Tree.Item was rendered inside the label of another Tree.Item, so it is not part of that item's child group: the parent cannot expand, its name includes the nested text, and a treeitem sits inside a label (axe aria-required-parent). A Tree.Item finds its nested items among its own children (written directly, in Fragments, or returned by a render function such as `children.map(renderNode)`), but not inside a component that renders Tree.Item itself. Build a data-driven tree with a render function instead of a recursive component.";
25
- function pe(e) {
25
+ var pe = [], me = "Tree.Item was rendered inside the label of another Tree.Item, so it is not part of that item's child group: the parent cannot expand, its name includes the nested text, and a treeitem sits inside a label (axe aria-required-parent). A Tree.Item finds its nested items among its own children (written directly, in Fragments, or returned by a render function such as `children.map(renderNode)`), but not inside a component that renders Tree.Item itself. Build a data-driven tree with a render function instead of a recursive component.";
26
+ function he(e) {
26
27
  i(`Tree:duplicate:${e}`, `Tree: several items share the value "${e}". Item values must be unique within a Tree; items with the same value share their expanded, selected and focus state.`);
27
28
  }
28
- var me = "Tree: `selected` has no effect with selectionMode=\"multiple\"; use `checkedItems`, and `current` for the item the user is on.", he = "Tree: `checkedItems` and `defaultCheckedItems` need selectionMode=\"multiple\"; without it the tree draws no checkboxes and ignores them.", ge = "Tree: selectionMode=\"single\" draws a radio on every item for `selected`; pass `selected` (null while nothing is selected) and update it from `onItemSelect`.";
29
- function O(e) {
29
+ var ge = "Tree: `selected` has no effect with selectionMode=\"multiple\"; use `checkedItems`, and `current` for the item the user is on.", _e = "Tree: `checkedItems` and `defaultCheckedItems` need selectionMode=\"multiple\"; without it the tree draws no checkboxes and ignores them.", ve = "Tree: selectionMode=\"single\" draws a radio on every item for `selected`; pass `selected` (null while nothing is selected) and update it from `onItemSelect`.";
30
+ function D(e) {
30
31
  return e ? Array.from(e, (e) => e.current).filter((e) => e !== null).sort((e, t) => !e.element || !t.element || e.element === t.element ? 0 : e.element.compareDocumentPosition(t.element) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1).map((e) => e.node) : [];
31
32
  }
32
- var k = "[role=\"treeitem\"]", A = "button, [href], input, select, textarea, [role=\"button\"], [tabindex]", _e = "[&:focus-within:not(:has(>[role=group]_:focus))>[data-tree-row]_[data-tree-actions]]:visible", ve = "[@media(hover:hover)]:not-forced-colors:[&:focus-within:not(:has(>[role=group]_:focus))>[data-tree-row]_[data-tree-aside]]:invisible", j = "invisible group-hover/row:visible focus-within:visible forced-colors:visible [@media(hover:none)]:visible has-[[aria-expanded=true]]:visible data-[focus-in-popup]:visible", ye = "not-forced-colors:group-hover/row:invisible [@media(hover:hover)]:not-forced-colors:group-focus-within/end:invisible [@media(hover:hover)]:not-forced-colors:group-has-[[aria-expanded=true]]/end:invisible [@media(hover:hover)]:not-forced-colors:group-has-[[data-focus-in-popup]]/end:invisible", be = "[&>*]:[grid-area:1/1] forced-colors:flex [@media(hover:none)]:flex";
33
- function xe(e) {
33
+ var O = "[role=\"treeitem\"]", k = "button, [href], input, select, textarea, [role=\"button\"], [tabindex]", ye = "[&:focus-within:not(:has(>*>[role=group]_:focus))>[data-tree-row]_[data-tree-actions]]:visible", be = "[@media(hover:hover)]:not-forced-colors:[&:focus-within:not(:has(>*>[role=group]_:focus))>[data-tree-row]_[data-tree-aside]]:invisible", A = "invisible group-hover/row:visible focus-within:visible forced-colors:visible [@media(hover:none)]:visible has-[[aria-expanded=true]]:visible data-[focus-in-popup]:visible", xe = "not-forced-colors:group-hover/row:invisible [@media(hover:hover)]:not-forced-colors:group-focus-within/end:invisible [@media(hover:hover)]:not-forced-colors:group-has-[[aria-expanded=true]]/end:invisible [@media(hover:hover)]:not-forced-colors:group-has-[[data-focus-in-popup]]/end:invisible", Se = "[&>*]:[grid-area:1/1] forced-colors:flex [@media(hover:none)]:flex";
34
+ function j(e) {
34
35
  let t = e.querySelector(":scope > [data-tree-row] [data-tree-actions]");
35
36
  if (!t) return !1;
36
37
  let n = /* @__PURE__ */ new Map();
37
- for (let e of Array.from(t.querySelectorAll(A))) {
38
+ for (let e of Array.from(t.querySelectorAll(k))) {
38
39
  if (g(e) || e.matches(":disabled")) continue;
39
40
  let r = e.closest("[hidden], [inert]");
40
41
  if (r && t.contains(r)) continue;
@@ -43,61 +44,61 @@ function xe(e) {
43
44
  }
44
45
  return !1;
45
46
  }
46
- var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a, onItemSelect: o, selected: s, current: u, selectionMode: p = "none", navigationMode: m = "tree", checkedItems: h, defaultCheckedItems: g, onCheckedItemsChange: _, className: te, children: y, onKeyDown: ne, onKeyDownCapture: re, onFocus: ie, onBlur: ae, ref: b, ...se }) => {
47
- let [ce] = T.useState(() => n ?? de), [le, w] = f(t, ce, (e) => a?.([...e])), D = T.useMemo(() => new Set(le), [le]), fe = T.useCallback((e) => {
48
- w((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
49
- }, [w]), A = T.useCallback((e) => {
50
- w((t) => {
47
+ var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a, onItemSelect: o, selected: s, current: u, selectionMode: p = "none", navigationMode: m = "tree", checkedItems: h, defaultCheckedItems: g, onCheckedItemsChange: _, motion: te, className: y, children: ne, onKeyDown: re, onKeyDownCapture: ie, onFocus: ae, onBlur: b, ref: oe, ...ce }) => {
48
+ let [ue] = w.useState(() => n ?? pe), [de, C] = f(t, ue, (e) => a?.([...e])), E = w.useMemo(() => new Set(de), [de]), me = w.useCallback((e) => {
49
+ C((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
50
+ }, [C]), k = w.useCallback((e) => {
51
+ C((t) => {
51
52
  let n = e.filter((e) => !t.includes(e));
52
53
  return n.length > 0 ? [...t, ...n] : t;
53
54
  });
54
- }, [w]), _e = d((e) => {
55
+ }, [C]), ye = d((e) => {
55
56
  o?.(e);
56
- }), [ve] = T.useState(() => g ?? de), j = T.useRef(void 0), [ye, be] = f(h, ve, (e) => _?.([...e], j.current)), xe = T.useMemo(() => new Set(ye), [ye]), M = T.useRef(null), Se = T.useCallback((e) => {
57
+ }), [be] = w.useState(() => g ?? pe), A = w.useRef(void 0), [xe, Se] = f(h, be, (e) => _?.([...e], A.current)), j = w.useMemo(() => new Set(xe), [xe]), M = w.useRef(null), Ce = w.useCallback((e) => {
57
58
  M.current ??= /* @__PURE__ */ new Set();
58
59
  let t = M.current;
59
60
  return t.add(e), () => {
60
61
  t.delete(e);
61
62
  };
62
- }, []), Ce = d((e, t) => {
63
- let n = O(M.current);
64
- be((r) => {
65
- let i = ue(n, r, e);
66
- return j.current = {
63
+ }, []), we = d((e, t) => {
64
+ let n = D(M.current);
65
+ Se((r) => {
66
+ let i = fe(n, r, e);
67
+ return A.current = {
67
68
  value: e,
68
69
  checked: i.includes(e),
69
70
  event: t
70
71
  }, i;
71
- }), j.current = void 0;
72
+ }), A.current = void 0;
72
73
  }), P = p === "multiple" ? void 0 : p === "single" ? s ?? null : s;
73
- T.useEffect(() => {
74
- p === "multiple" && s !== void 0 && i("Tree:selected-with-multiple", me);
75
- }, [p, s]), T.useEffect(() => {
76
- p === "single" && s === void 0 && i("Tree:single-without-selected", ge);
74
+ w.useEffect(() => {
75
+ p === "multiple" && s !== void 0 && i("Tree:selected-with-multiple", ge);
76
+ }, [p, s]), w.useEffect(() => {
77
+ p === "single" && s === void 0 && i("Tree:single-without-selected", ve);
77
78
  }, [p, s]);
78
79
  let F = h !== void 0 || g !== void 0;
79
- T.useEffect(() => {
80
- p !== "multiple" && F && i("Tree:checked-without-multiple", he);
80
+ w.useEffect(() => {
81
+ p !== "multiple" && F && i("Tree:checked-without-multiple", _e);
81
82
  }, [p, F]);
82
- let [I, L] = T.useState(null), R = T.useRef(null), z = T.useCallback((e) => {
83
+ let [I, L] = w.useState(null), R = w.useRef(null), z = w.useCallback((e) => {
83
84
  if (!r) return () => {};
84
85
  R.current ??= /* @__PURE__ */ new Map();
85
86
  let t = R.current, n = (t.get(e) ?? 0) + 1;
86
- return t.set(e, n), n > 1 && pe(e), () => {
87
+ return t.set(e, n), n > 1 && he(e), () => {
87
88
  let n = (t.get(e) ?? 1) - 1;
88
89
  n > 0 ? t.set(e, n) : t.delete(e);
89
90
  };
90
91
  }, []), { containerProps: B, getTabIndex: V, focusValue: H } = v({
91
92
  activeValue: I ?? P ?? null,
92
- itemSelector: k,
93
+ itemSelector: O,
93
94
  orientation: "vertical",
94
95
  loop: !1,
95
96
  typeahead: !0
96
- }), we = T.useMemo(() => ({
97
- expanded: D,
98
- toggle: fe,
99
- expand: A,
100
- activate: _e,
97
+ }), U = w.useMemo(() => ({
98
+ expanded: E,
99
+ toggle: me,
100
+ expand: k,
101
+ activate: ye,
101
102
  selected: P,
102
103
  current: u,
103
104
  getTabIndex: V,
@@ -107,14 +108,15 @@ var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a,
107
108
  navigationMode: m,
108
109
  registerValue: z,
109
110
  selectionMode: p,
110
- checked: xe,
111
- toggleChecked: Ce,
112
- registerTopLevel: Se
111
+ checked: j,
112
+ toggleChecked: we,
113
+ registerTopLevel: Ce,
114
+ motion: te
113
115
  }), [
114
- D,
115
- fe,
116
- A,
117
- _e,
116
+ E,
117
+ me,
118
+ k,
119
+ ye,
118
120
  P,
119
121
  u,
120
122
  V,
@@ -123,10 +125,11 @@ var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a,
123
125
  m,
124
126
  z,
125
127
  p,
126
- xe,
128
+ j,
129
+ we,
127
130
  Ce,
128
- Se
129
- ]), Te = ee(b, B.ref), U = (e) => {
131
+ te
132
+ ]), Te = ee(oe, B.ref), W = (e) => {
130
133
  e.key.length === 1 && N(e.currentTarget), B.onKeyDown(e);
131
134
  }, Ee = (e) => {
132
135
  e.key === " " && N(e.currentTarget), B.onKeyDownCapture(e);
@@ -134,27 +137,27 @@ var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a,
134
137
  let t = e.relatedTarget;
135
138
  (!t || !e.currentTarget.contains(t)) && L(null);
136
139
  };
137
- return /* @__PURE__ */ E(oe.Provider, {
138
- value: we,
139
- children: /* @__PURE__ */ E(C.Provider, {
140
+ return /* @__PURE__ */ T(se.Provider, {
141
+ value: U,
142
+ children: /* @__PURE__ */ T(le.Provider, {
140
143
  value: null,
141
- children: /* @__PURE__ */ E(x.Provider, {
144
+ children: /* @__PURE__ */ T(x.Provider, {
142
145
  value: !1,
143
- children: /* @__PURE__ */ E("div", {
146
+ children: /* @__PURE__ */ T("div", {
144
147
  role: "tree",
145
148
  "data-selection-mode": p,
146
149
  "aria-multiselectable": p === "multiple" || void 0,
147
- className: e(l.root, "text-body-1", te),
148
- ...se,
150
+ className: e(l.root, "text-body-1", y),
151
+ ...ce,
149
152
  "data-roving-container": "",
150
- onKeyDown: c(ne, U),
151
- onKeyDownCapture: c(re, Ee),
152
- onFocus: c(ie, B.onFocus, { checkDefaultPrevented: !1 }),
153
- onBlur: c(ae, De, { checkDefaultPrevented: !1 }),
153
+ onKeyDown: c(re, W),
154
+ onKeyDownCapture: c(ie, Ee),
155
+ onFocus: c(ae, B.onFocus, { checkDefaultPrevented: !1 }),
156
+ onBlur: c(b, De, { checkDefaultPrevented: !1 }),
154
157
  ref: Te,
155
- children: /* @__PURE__ */ E(S.Provider, {
158
+ children: /* @__PURE__ */ T(S.Provider, {
156
159
  value: !1,
157
- children: y
160
+ children: ne
158
161
  })
159
162
  })
160
163
  })
@@ -170,23 +173,23 @@ function N(e) {
170
173
  e.getAttribute("data-roving-text") !== r && e.setAttribute("data-roving-text", r);
171
174
  });
172
175
  }
173
- function Se(e) {
176
+ function Ce(e) {
174
177
  let t = e.target;
175
178
  return !t?.closest?.("[data-tree-actions]") && t?.closest?.("[role=\"treeitem\"]") === e.currentTarget;
176
179
  }
177
- function Ce(e) {
180
+ function we(e) {
178
181
  let t = e.target;
179
- return t === e.currentTarget || !t?.closest?.("[data-tree-checkbox], [data-tree-actions]") && t?.closest?.("[data-tree-row]")?.parentElement === e.currentTarget;
182
+ return t === e.currentTarget ? e.detail === 0 || !e.currentTarget.querySelector(":scope > [inert]") : !t?.closest?.("[data-tree-checkbox], [data-tree-actions]") && t?.closest?.("[data-tree-row]")?.parentElement === e.currentTarget;
180
183
  }
181
184
  var P = ({ labelledBy: t, tabStop: n, navigationMode: r, onReturn: i, children: a }) => {
182
185
  let o = r === "treegrid", { containerProps: { ref: s }, handleKeyDown: c, handleFocus: l } = v({
183
- itemSelector: A,
186
+ itemSelector: k,
184
187
  manageTabIndex: !0,
185
188
  orientation: "horizontal",
186
189
  loop: !o,
187
190
  tabStop: n
188
- }), [d, f] = T.useState(null);
189
- T.useEffect(() => {
191
+ }), [d, f] = w.useState(null);
192
+ w.useEffect(() => {
190
193
  if (d !== "leaving") return;
191
194
  let e = requestAnimationFrame(() => f(null));
192
195
  return () => cancelAnimationFrame(e);
@@ -205,7 +208,7 @@ var P = ({ labelledBy: t, tabStop: n, navigationMode: r, onReturn: i, children:
205
208
  dir: h(e.currentTarget)
206
209
  }) === "prev";
207
210
  };
208
- return /* @__PURE__ */ E("span", {
211
+ return /* @__PURE__ */ T("span", {
209
212
  role: "toolbar",
210
213
  "aria-labelledby": t,
211
214
  "aria-orientation": "horizontal",
@@ -219,67 +222,71 @@ var P = ({ labelledBy: t, tabStop: n, navigationMode: r, onReturn: i, children:
219
222
  },
220
223
  onFocus: p,
221
224
  onBlur: g,
222
- className: e(u.actions, "inline-flex items-center gap-1", j),
225
+ className: e(u.actions, "inline-flex items-center gap-1", A),
223
226
  children: a
224
227
  });
225
228
  };
226
229
  P.displayName = "TreeItemActions";
227
- var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _, leaf: v = !1, className: ae, children: b, onClick: oe, onKeyDown: ue, onFocus: de, onBlur: pe, ref: me, ...he }) => {
228
- let { "data-roving-text": ge, ...O } = he, k = ce("Tree.Item"), A = T.useContext(C), j = T.useContext(S), N = k.expanded.has(r), I = p("tree-item-label"), L = p("tree-item-aside"), R = T.useContext(x), z = T.useRef(null), B = ee(me, z), [V, H] = T.useState(null), we = T.useCallback((e) => (H(e), () => H((t) => t === e ? null : t)), []), Te = T.useMemo(() => ({ registerLayout: we }), [we]), U = V?.nameId ?? I, { registerValue: Ee, registerTopLevel: De } = k;
229
- T.useEffect(() => Ee(r), [Ee, r]), T.useEffect(() => {
230
- j && i("Tree.Item:inside-label", fe);
231
- }, [j]);
232
- let W = [], Oe = [], ke;
230
+ var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _, leaf: v = !1, className: ae, children: b, onClick: se, onKeyDown: fe, onFocus: pe, onBlur: he, ref: ge, ..._e }) => {
231
+ let { "data-roving-text": ve, ...D } = _e, O = ue("Tree.Item"), k = w.useContext(le), A = w.useContext(S), N = O.expanded.has(r), I = p("tree-item-label"), L = p("tree-item-aside"), R = w.useContext(x), z = w.useRef(null), B = ee(ge, z), [V, H] = w.useState(null), U = w.useCallback((e) => (H(e), () => H((t) => t === e ? null : t)), []), Te = w.useMemo(() => ({ registerLayout: U }), [U]), W = V?.nameId ?? I, { registerValue: Ee, registerTopLevel: De } = O;
232
+ w.useEffect(() => Ee(r), [Ee, r]), w.useEffect(() => {
233
+ A && i("Tree.Item:inside-label", me);
234
+ }, [A]);
235
+ let G = [], Oe = [], ke;
233
236
  t(b).forEach(({ key: e, node: t }) => {
234
- let r = /* @__PURE__ */ E(T.Fragment, { children: t }, e);
235
- n(t, F) ? (ke ??= t.props.value, W.push(r)) : n(t, M) ? W.push(r) : Oe.push(r);
237
+ let r = /* @__PURE__ */ T(w.Fragment, { children: t }, e);
238
+ n(t, F) ? (ke ??= t.props.value, G.push(r)) : n(t, M) ? G.push(r) : Oe.push(r);
236
239
  });
237
- let Ae = l && s(l) ? o(l, "span", e(u.icon, "inline-flex shrink-0"), { "aria-hidden": !0 }) : null, je = d && s(d) ? o(d, "span", e(u.iconAfter, "inline-flex shrink-0"), { "aria-hidden": !0 }) : null, G = s(g), K = s(_), q = W.length > 0 && !v, Me = /* @__PURE__ */ E("span", {
240
+ let Ae = l && s(l) ? o(l, "span", e(u.icon, "inline-flex shrink-0"), { "aria-hidden": !0 }) : null, je = d && s(d) ? o(d, "span", e(u.iconAfter, "inline-flex shrink-0"), { "aria-hidden": !0 }) : null, K = s(g), q = s(_), J = G.length > 0 && !v, Me = w.useRef(null), { isMounted: Ne, wrapperRef: Pe, presenceProps: Fe, className: Ie } = oe(J && N, {
241
+ motion: O.motion,
242
+ partRef: Me,
243
+ getTrigger: () => z.current
244
+ }), Le = /* @__PURE__ */ T("span", {
238
245
  className: "w-3 shrink-0",
239
246
  "aria-hidden": "true"
240
247
  });
241
- q && f == null ? Me = /* @__PURE__ */ E(re, { className: e(u.expandIcon, "shrink-0 transition-transform motion-reduce:transition-none", N ? "rotate-90" : "wave-rtl:-scale-x-100") }) : q && s(f) && (Me = o(f, "span", e(u.expandIcon, "inline-flex shrink-0"), { "aria-hidden": !0 }));
242
- let J = k.selectionMode === "multiple", Y = T.useMemo(() => J ? {
248
+ J && f == null ? Le = /* @__PURE__ */ T(re, { className: e(u.expandIcon, "shrink-0 transition-transform motion-reduce:transition-none", N ? "rotate-90" : "wave-rtl:-scale-x-100") }) : J && s(f) && (Le = o(f, "span", e(u.expandIcon, "inline-flex shrink-0"), { "aria-hidden": !0 }));
249
+ let Y = O.selectionMode === "multiple", X = w.useMemo(() => Y ? {
243
250
  value: r,
244
- children: v ? [] : le(b, {
251
+ children: v ? [] : de(b, {
245
252
  item: F,
246
253
  tree: M
247
254
  })
248
255
  } : null, [
249
- J,
256
+ Y,
250
257
  r,
251
258
  v,
252
259
  b
253
- ]), X = Y ? w([Y], k.checked, R).get(r) : void 0, Ne = T.useRef(null);
254
- T.useLayoutEffect(() => {
255
- Ne.current = Y ? {
256
- node: Y,
260
+ ]), Z = X ? C([X], O.checked, R).get(r) : void 0, Re = w.useRef(null);
261
+ w.useLayoutEffect(() => {
262
+ Re.current = X ? {
263
+ node: X,
257
264
  element: z.current
258
265
  } : null;
259
266
  });
260
- let Pe = A === null && !j;
261
- T.useLayoutEffect(() => J && Pe ? De(Ne) : void 0, [
262
- J,
263
- Pe,
267
+ let ze = k === null && !A;
268
+ w.useLayoutEffect(() => Y && ze ? De(Re) : void 0, [
269
+ Y,
270
+ ze,
264
271
  De
265
272
  ]);
266
- let Z = k.selected === void 0 ? void 0 : k.selected === r, Fe = k.current !== void 0 && k.current !== null && k.current === r, Q = () => {
267
- q && k.toggle(r), k.activate(r);
268
- }, Ie = (e) => {
269
- Ce(e) && (oe?.(e), e.defaultPrevented || Q());
270
- }, Le = (e) => {
271
- if (!Se(e) || (ue?.(e), e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey)) return;
273
+ let Q = O.selected === void 0 ? void 0 : O.selected === r, Be = O.current !== void 0 && O.current !== null && O.current === r, Ve = () => {
274
+ J && O.toggle(r), O.activate(r);
275
+ }, He = (e) => {
276
+ we(e) && (se?.(e), e.defaultPrevented || Ve());
277
+ }, Ue = (e) => {
278
+ if (!Ce(e) || (fe?.(e), e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey)) return;
272
279
  switch (e.key) {
273
280
  case "Enter":
274
- e.preventDefault(), Q();
281
+ e.preventDefault(), Ve();
275
282
  return;
276
283
  case " ":
277
- e.preventDefault(), X === void 0 ? Q() : k.toggleChecked(r, e.nativeEvent);
284
+ e.preventDefault(), Z === void 0 ? Ve() : O.toggleChecked(r, e.nativeEvent);
278
285
  return;
279
286
  case "*": {
280
287
  e.preventDefault();
281
288
  let t = e.currentTarget.parentElement?.querySelectorAll(":scope > [role=\"treeitem\"][aria-expanded=\"false\"][data-roving-value]");
282
- k.expand(Array.from(t ?? [], (e) => e.getAttribute("data-roving-value") ?? "").filter(Boolean));
289
+ O.expand(Array.from(t ?? [], (e) => e.getAttribute("data-roving-value") ?? "").filter(Boolean));
283
290
  return;
284
291
  }
285
292
  }
@@ -288,87 +295,87 @@ var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _,
288
295
  dir: h(e.currentTarget)
289
296
  });
290
297
  if (t === "next") {
291
- if (e.preventDefault(), q && !N) {
292
- k.toggle(r);
298
+ if (e.preventDefault(), J && !N) {
299
+ O.toggle(r);
293
300
  return;
294
301
  }
295
- if (k.navigationMode === "treegrid" && xe(e.currentTarget)) return;
296
- q && ke !== void 0 && k.focusValue(ke);
297
- } else t === "prev" && (e.preventDefault(), q && N ? k.toggle(r) : A !== null && k.focusValue(A));
298
- }, $ = T.useRef(null), Re = (e) => e.target.closest("[data-tree-actions]")?.closest("[role=\"treeitem\"]") === e.currentTarget, ze = (e) => {
299
- (e.target === e.currentTarget || Re(e)) && k.onItemFocus(r), Re(e) && ($.current = e.target);
300
- }, Be = (e) => {
301
- Re(e) && (e.relatedTarget !== null || e.target.isConnected) && ($.current = null);
302
+ if (O.navigationMode === "treegrid" && j(e.currentTarget)) return;
303
+ J && ke !== void 0 && O.focusValue(ke);
304
+ } else t === "prev" && (e.preventDefault(), J && N ? O.toggle(r) : k !== null && O.focusValue(k));
305
+ }, $ = w.useRef(null), We = (e) => e.target.closest("[data-tree-actions]")?.closest("[role=\"treeitem\"]") === e.currentTarget, Ge = (e) => {
306
+ (e.target === e.currentTarget || We(e)) && O.onItemFocus(r), We(e) && ($.current = e.target);
307
+ }, Ke = (e) => {
308
+ We(e) && (e.relatedTarget !== null || e.target.isConnected) && ($.current = null);
302
309
  };
303
- T.useLayoutEffect(() => {
310
+ w.useLayoutEffect(() => {
304
311
  let e = $.current;
305
312
  if (!e) return;
306
313
  let t = z.current, n = t?.ownerDocument.activeElement;
307
314
  n && n !== t.ownerDocument.body ? $.current = null : t && !e.isConnected && ($.current = null, t.focus({ preventScroll: !0 }));
308
315
  });
309
- let Ve = X === void 0 ? null : /* @__PURE__ */ E("span", {
316
+ let qe = Z === void 0 ? null : /* @__PURE__ */ T("span", {
310
317
  role: "checkbox",
311
- "aria-checked": X === "mixed" ? "mixed" : X === "checked",
312
- "aria-labelledby": U,
318
+ "aria-checked": Z === "mixed" ? "mixed" : Z === "checked",
319
+ "aria-labelledby": W,
313
320
  tabIndex: -1,
314
321
  "data-tree-checkbox": "",
315
322
  onMouseDown: (e) => {
316
323
  e.preventDefault(), z.current?.focus({ preventScroll: !0 });
317
324
  },
318
325
  onClick: (e) => {
319
- k.toggleChecked(r, e.nativeEvent);
326
+ O.toggleChecked(r, e.nativeEvent);
320
327
  },
321
- className: e(u.indicator, "relative inline-flex size-4 shrink-0 items-center justify-center rounded-xs border transition-colors motion-reduce:transition-none", "before:absolute before:-inset-1", X === "unchecked" ? e("border-stroke-accessible bg-transparent", y.control) : "border-primary bg-primary text-primary-foreground forced-colors:border-[Highlight] forced-colors:bg-[Highlight]"),
322
- children: X === "mixed" ? /* @__PURE__ */ E(ie, {
328
+ className: e(u.indicator, "relative inline-flex size-4 shrink-0 items-center justify-center rounded-xs border transition-colors motion-reduce:transition-none", "before:absolute before:-inset-1", Z === "unchecked" ? e("border-stroke-accessible bg-transparent", y.control) : "border-primary bg-primary text-primary-foreground forced-colors:border-[Highlight] forced-colors:bg-[Highlight]"),
329
+ children: Z === "mixed" ? /* @__PURE__ */ T(ie, {
323
330
  size: 12,
324
331
  className: y.selectedLeaf
325
- }) : X === "checked" ? /* @__PURE__ */ E(ne, {
332
+ }) : Z === "checked" ? /* @__PURE__ */ T(ne, {
326
333
  size: 12,
327
334
  className: y.selectedLeaf
328
335
  }) : null
329
- }), He = k.selectionMode === "single" ? /* @__PURE__ */ E("span", {
336
+ }), Je = O.selectionMode === "single" ? /* @__PURE__ */ T("span", {
330
337
  "aria-hidden": "true",
331
- className: e(u.indicator, "inline-flex size-4 shrink-0 items-center justify-center rounded-full border transition-colors motion-reduce:transition-none", Z ? "border-2 border-primary forced-colors:border-[Highlight]" : e("border-stroke-accessible", y.control)),
332
- children: Z && /* @__PURE__ */ E("span", { className: e("block size-2 rounded-full bg-primary", y.selectedLeaf) })
333
- }) : null, Ue = Ve ?? He, We = R || J && k.checked.has(r);
334
- return /* @__PURE__ */ D("div", {
338
+ className: e(u.indicator, "inline-flex size-4 shrink-0 items-center justify-center rounded-full border transition-colors motion-reduce:transition-none", Q ? "border-2 border-primary forced-colors:border-[Highlight]" : e("border-stroke-accessible", y.control)),
339
+ children: Q && /* @__PURE__ */ T("span", { className: e("block size-2 rounded-full bg-primary", y.selectedLeaf) })
340
+ }) : null, Ye = qe ?? Je, Xe = R || Y && O.checked.has(r);
341
+ return /* @__PURE__ */ E("div", {
335
342
  role: "treeitem",
336
- "aria-selected": Z,
337
- "aria-current": Fe ? !0 : void 0,
338
- "data-checked": X === "checked" ? "" : void 0,
339
- "data-mixed": X === "mixed" ? "" : void 0,
340
- className: e(u.root, "block outline-none", "[&:focus-visible>[data-tree-row]]:outline-2 [&:focus-visible>[data-tree-row]]:-outline-offset-2 [&:focus-visible>[data-tree-row]]:outline-ring", K && _e, K && G && ve, ae),
341
- ...O,
342
- "aria-labelledby": O["aria-labelledby"] ?? (O["aria-label"] === void 0 ? U : void 0),
343
- "aria-describedby": te(O["aria-describedby"], G ? L : void 0, V?.descriptionId),
344
- "aria-expanded": q ? N : void 0,
345
- "aria-checked": X === void 0 ? void 0 : X === "mixed" ? "mixed" : X === "checked",
346
- tabIndex: k.getTabIndex(r),
343
+ "aria-selected": Q,
344
+ "aria-current": Be ? !0 : void 0,
345
+ "data-checked": Z === "checked" ? "" : void 0,
346
+ "data-mixed": Z === "mixed" ? "" : void 0,
347
+ className: e(u.root, "block outline-none", "[&:focus-visible>[data-tree-row]]:outline-2 [&:focus-visible>[data-tree-row]]:-outline-offset-2 [&:focus-visible>[data-tree-row]]:outline-ring", q && ye, q && K && be, ae),
348
+ ...D,
349
+ "aria-labelledby": D["aria-labelledby"] ?? (D["aria-label"] === void 0 ? W : void 0),
350
+ "aria-describedby": te(D["aria-describedby"], K ? L : void 0, V?.descriptionId),
351
+ "aria-expanded": J ? N : void 0,
352
+ "aria-checked": Z === void 0 ? void 0 : Z === "mixed" ? "mixed" : Z === "checked",
353
+ tabIndex: O.getTabIndex(r),
347
354
  "data-roving-value": r,
348
- "data-selected": Z ? "" : void 0,
349
- "data-current": Fe ? "" : void 0,
350
- onClick: Ie,
351
- onKeyDown: Le,
352
- onFocus: (e) => c(de, ze, { checkDefaultPrevented: !1 })(e),
353
- onBlur: (e) => c(pe, Be, { checkDefaultPrevented: !1 })(e),
355
+ "data-selected": Q ? "" : void 0,
356
+ "data-current": Be ? "" : void 0,
357
+ onClick: He,
358
+ onKeyDown: Ue,
359
+ onFocus: (e) => c(pe, Ge, { checkDefaultPrevented: !1 })(e),
360
+ onBlur: (e) => c(he, Ke, { checkDefaultPrevented: !1 })(e),
354
361
  ref: B,
355
- children: [/* @__PURE__ */ D("div", {
362
+ children: [/* @__PURE__ */ E("div", {
356
363
  "data-tree-row": "",
357
- className: e(u.row, "flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 hover:bg-subtle-hover", K && "group/row", Z && e("bg-subtle-selected font-semibold", y.selectedContainer)),
364
+ className: e(u.row, "flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 hover:bg-subtle-hover", q && "group/row", Q && e("bg-subtle-selected font-semibold", y.selectedContainer)),
358
365
  children: [
359
- Me,
360
- Ue,
366
+ Le,
367
+ Ye,
361
368
  Ae,
362
- /* @__PURE__ */ E("span", {
369
+ /* @__PURE__ */ T("span", {
363
370
  id: I,
364
371
  "data-tree-label": "",
365
- "data-roving-text": ge,
366
- className: e(u.label, "truncate", (je || G || K) && "min-w-0"),
367
- children: /* @__PURE__ */ E(x.Provider, {
372
+ "data-roving-text": ve,
373
+ className: e(u.label, "truncate", (je || K || q) && "min-w-0"),
374
+ children: /* @__PURE__ */ T(x.Provider, {
368
375
  value: !1,
369
- children: /* @__PURE__ */ E(S.Provider, {
376
+ children: /* @__PURE__ */ T(S.Provider, {
370
377
  value: !0,
371
- children: /* @__PURE__ */ E(se.Provider, {
378
+ children: /* @__PURE__ */ T(ce.Provider, {
372
379
  value: Te,
373
380
  children: Oe
374
381
  })
@@ -376,33 +383,39 @@ var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _,
376
383
  })
377
384
  }),
378
385
  je,
379
- (G || K) && /* @__PURE__ */ D("span", {
386
+ (K || q) && /* @__PURE__ */ E("span", {
380
387
  "data-tree-end": "",
381
- className: e("group/end ms-auto inline-grid shrink-0 items-center gap-1", G && K && be),
382
- children: [G && /* @__PURE__ */ E("span", {
388
+ className: e("group/end ms-auto inline-grid shrink-0 items-center gap-1", K && q && Se),
389
+ children: [K && /* @__PURE__ */ T("span", {
383
390
  id: L,
384
391
  "data-tree-aside": "",
385
- className: e(u.aside, "inline-flex items-center text-caption-1 text-muted-foreground", K && ye),
392
+ className: e(u.aside, "inline-flex items-center text-caption-1 text-muted-foreground", q && xe),
386
393
  children: a(g)
387
- }), K && /* @__PURE__ */ E(P, {
388
- labelledBy: U,
389
- tabStop: k.navigationMode === "tree" && k.focusedItem === r ? "last-focused" : "none",
390
- navigationMode: k.navigationMode,
391
- onReturn: () => k.focusValue(r),
394
+ }), q && /* @__PURE__ */ T(P, {
395
+ labelledBy: W,
396
+ tabStop: O.navigationMode === "tree" && O.focusedItem === r ? "last-focused" : "none",
397
+ navigationMode: O.navigationMode,
398
+ onReturn: () => O.focusValue(r),
392
399
  children: a(_)
393
400
  })]
394
401
  })
395
402
  ]
396
- }), q && N && /* @__PURE__ */ E(C.Provider, {
403
+ }), Ne && /* @__PURE__ */ T(le.Provider, {
397
404
  value: r,
398
- children: /* @__PURE__ */ E(x.Provider, {
399
- value: We,
400
- children: /* @__PURE__ */ E(S.Provider, {
405
+ children: /* @__PURE__ */ T(x.Provider, {
406
+ value: Xe,
407
+ children: /* @__PURE__ */ T(S.Provider, {
401
408
  value: !1,
402
- children: /* @__PURE__ */ E("div", {
403
- role: "group",
404
- className: e(u.group, "ps-4"),
405
- children: W
409
+ children: /* @__PURE__ */ T("div", {
410
+ ref: Pe,
411
+ ...Fe,
412
+ className: e(u.collapse, Ie),
413
+ children: /* @__PURE__ */ T("div", {
414
+ ref: Me,
415
+ role: "group",
416
+ className: e(u.group, "ps-4"),
417
+ children: G
418
+ })
406
419
  })
407
420
  })
408
421
  })