@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.
- package/README.md +142 -32
- package/dist/components/data-display/InfoButton.cjs +1 -1
- package/dist/components/data-display/InfoButton.cjs.map +1 -1
- package/dist/components/data-display/InfoButton.mjs +90 -82
- package/dist/components/data-display/InfoButton.mjs.map +1 -1
- package/dist/components/data-display/InfoLabel.cjs +1 -1
- package/dist/components/data-display/InfoLabel.cjs.map +1 -1
- package/dist/components/data-display/InfoLabel.mjs +19 -18
- package/dist/components/data-display/InfoLabel.mjs.map +1 -1
- package/dist/components/feedback/MessageBarGroup.cjs +2 -0
- package/dist/components/feedback/MessageBarGroup.cjs.map +1 -0
- package/dist/components/feedback/MessageBarGroup.mjs +63 -0
- package/dist/components/feedback/MessageBarGroup.mjs.map +1 -0
- package/dist/components/feedback/ProgressBar.cjs +1 -1
- package/dist/components/feedback/ProgressBar.cjs.map +1 -1
- package/dist/components/feedback/ProgressBar.mjs +41 -39
- package/dist/components/feedback/ProgressBar.mjs.map +1 -1
- package/dist/components/feedback/Toaster.cjs +1 -1
- package/dist/components/feedback/Toaster.cjs.map +1 -1
- package/dist/components/feedback/Toaster.mjs +222 -216
- package/dist/components/feedback/Toaster.mjs.map +1 -1
- package/dist/components/layout/Accordion.cjs +1 -1
- package/dist/components/layout/Accordion.cjs.map +1 -1
- package/dist/components/layout/Accordion.mjs +124 -109
- package/dist/components/layout/Accordion.mjs.map +1 -1
- package/dist/components/layout/Carousel.cjs +1 -1
- package/dist/components/layout/Carousel.cjs.map +1 -1
- package/dist/components/layout/Carousel.mjs +207 -193
- package/dist/components/layout/Carousel.mjs.map +1 -1
- package/dist/components/layout/TabList.cjs +1 -1
- package/dist/components/layout/TabList.cjs.map +1 -1
- package/dist/components/layout/TabList.mjs +149 -108
- package/dist/components/layout/TabList.mjs.map +1 -1
- package/dist/components/layout/Tree.cjs.map +1 -1
- package/dist/components/layout/Tree.context.cjs +1 -1
- package/dist/components/layout/Tree.context.cjs.map +1 -1
- package/dist/components/layout/Tree.context.mjs +2 -1
- package/dist/components/layout/Tree.context.mjs.map +1 -1
- package/dist/components/layout/Tree.core.cjs +1 -1
- package/dist/components/layout/Tree.core.cjs.map +1 -1
- package/dist/components/layout/Tree.core.mjs +178 -165
- package/dist/components/layout/Tree.core.mjs.map +1 -1
- package/dist/components/layout/Tree.mjs.map +1 -1
- package/dist/components/navigation/Menu.popover.cjs +1 -1
- package/dist/components/navigation/Menu.popover.cjs.map +1 -1
- package/dist/components/navigation/Menu.popover.mjs +154 -168
- package/dist/components/navigation/Menu.popover.mjs.map +1 -1
- package/dist/components/navigation/Nav.cjs +1 -1
- package/dist/components/navigation/Nav.cjs.map +1 -1
- package/dist/components/navigation/Nav.mjs +156 -136
- package/dist/components/navigation/Nav.mjs.map +1 -1
- package/dist/components/navigation/NavDrawer.cjs +1 -1
- package/dist/components/navigation/NavDrawer.cjs.map +1 -1
- package/dist/components/navigation/NavDrawer.mjs +48 -45
- package/dist/components/navigation/NavDrawer.mjs.map +1 -1
- package/dist/components/overlays/Dialog.cjs +1 -1
- package/dist/components/overlays/Dialog.cjs.map +1 -1
- package/dist/components/overlays/Dialog.mjs +128 -122
- package/dist/components/overlays/Dialog.mjs.map +1 -1
- package/dist/components/overlays/Dialog.slots.cjs +1 -1
- package/dist/components/overlays/Dialog.slots.cjs.map +1 -1
- package/dist/components/overlays/Dialog.slots.mjs +12 -12
- package/dist/components/overlays/Dialog.slots.mjs.map +1 -1
- package/dist/components/overlays/Drawer.cjs.map +1 -1
- package/dist/components/overlays/Drawer.mjs.map +1 -1
- package/dist/components/overlays/Drawer.panel.cjs +1 -1
- package/dist/components/overlays/Drawer.panel.cjs.map +1 -1
- package/dist/components/overlays/Drawer.panel.mjs +97 -81
- package/dist/components/overlays/Drawer.panel.mjs.map +1 -1
- package/dist/components/overlays/Drawer.root.cjs +1 -1
- package/dist/components/overlays/Drawer.root.cjs.map +1 -1
- package/dist/components/overlays/Drawer.root.mjs +34 -31
- package/dist/components/overlays/Drawer.root.mjs.map +1 -1
- package/dist/components/overlays/Popover.cjs +1 -1
- package/dist/components/overlays/Popover.cjs.map +1 -1
- package/dist/components/overlays/Popover.mjs +231 -216
- package/dist/components/overlays/Popover.mjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.parts.cjs +1 -1
- package/dist/components/overlays/TeachingPopover.parts.cjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.parts.mjs +202 -173
- package/dist/components/overlays/TeachingPopover.parts.mjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.root.cjs +1 -1
- package/dist/components/overlays/TeachingPopover.root.cjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.root.mjs +108 -99
- package/dist/components/overlays/TeachingPopover.root.mjs.map +1 -1
- package/dist/components/overlays/Tooltip.cjs +1 -1
- package/dist/components/overlays/Tooltip.cjs.map +1 -1
- package/dist/components/overlays/Tooltip.mjs +66 -61
- package/dist/components/overlays/Tooltip.mjs.map +1 -1
- package/dist/components/provider/WaveProvider.cjs +1 -1
- package/dist/components/provider/WaveProvider.cjs.map +1 -1
- package/dist/components/provider/WaveProvider.mjs +26 -23
- package/dist/components/provider/WaveProvider.mjs.map +1 -1
- package/dist/hooks/useCollapsePresence.cjs +2 -0
- package/dist/hooks/useCollapsePresence.cjs.map +1 -0
- package/dist/hooks/useCollapsePresence.mjs +21 -0
- package/dist/hooks/useCollapsePresence.mjs.map +1 -0
- package/dist/hooks/useFocusBeforeClose.cjs +2 -0
- package/dist/hooks/useFocusBeforeClose.cjs.map +1 -0
- package/dist/hooks/useFocusBeforeClose.mjs +33 -0
- package/dist/hooks/useFocusBeforeClose.mjs.map +1 -0
- package/dist/hooks/useMotion.cjs +2 -0
- package/dist/hooks/useMotion.cjs.map +1 -0
- package/dist/hooks/useMotion.mjs +14 -0
- package/dist/hooks/useMotion.mjs.map +1 -0
- package/dist/hooks/usePresenceGroup.cjs +2 -0
- package/dist/hooks/usePresenceGroup.cjs.map +1 -0
- package/dist/hooks/usePresenceGroup.mjs +68 -0
- package/dist/hooks/usePresenceGroup.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +721 -131
- package/dist/index.d.ts +721 -131
- package/dist/index.mjs +136 -135
- package/dist/lib/classNames.cjs +1 -1
- package/dist/lib/classNames.cjs.map +1 -1
- package/dist/lib/classNames.mjs +101 -90
- package/dist/lib/classNames.mjs.map +1 -1
- package/dist/lib/motion.cjs +2 -0
- package/dist/lib/motion.cjs.map +1 -0
- package/dist/lib/motion.mjs +43 -0
- package/dist/lib/motion.mjs.map +1 -0
- package/dist/styles.css +1 -1
- 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 {
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
22
|
-
import
|
|
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
|
|
25
|
-
function
|
|
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
|
|
29
|
-
function
|
|
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
|
|
33
|
-
function
|
|
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(
|
|
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: _,
|
|
47
|
-
let [
|
|
48
|
-
|
|
49
|
-
}, [
|
|
50
|
-
|
|
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
|
-
}, [
|
|
55
|
+
}, [C]), ye = d((e) => {
|
|
55
56
|
o?.(e);
|
|
56
|
-
}), [
|
|
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
|
-
}, []),
|
|
63
|
-
let n =
|
|
64
|
-
|
|
65
|
-
let i =
|
|
66
|
-
return
|
|
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
|
-
}),
|
|
72
|
+
}), A.current = void 0;
|
|
72
73
|
}), P = p === "multiple" ? void 0 : p === "single" ? s ?? null : s;
|
|
73
|
-
|
|
74
|
-
p === "multiple" && s !== void 0 && i("Tree:selected-with-multiple",
|
|
75
|
-
}, [p, s]),
|
|
76
|
-
p === "single" && s === void 0 && i("Tree:single-without-selected",
|
|
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
|
-
|
|
80
|
-
p !== "multiple" && F && i("Tree:checked-without-multiple",
|
|
80
|
+
w.useEffect(() => {
|
|
81
|
+
p !== "multiple" && F && i("Tree:checked-without-multiple", _e);
|
|
81
82
|
}, [p, F]);
|
|
82
|
-
let [I, L] =
|
|
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 &&
|
|
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:
|
|
93
|
+
itemSelector: O,
|
|
93
94
|
orientation: "vertical",
|
|
94
95
|
loop: !1,
|
|
95
96
|
typeahead: !0
|
|
96
|
-
}),
|
|
97
|
-
expanded:
|
|
98
|
-
toggle:
|
|
99
|
-
expand:
|
|
100
|
-
activate:
|
|
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:
|
|
111
|
-
toggleChecked:
|
|
112
|
-
registerTopLevel:
|
|
111
|
+
checked: j,
|
|
112
|
+
toggleChecked: we,
|
|
113
|
+
registerTopLevel: Ce,
|
|
114
|
+
motion: te
|
|
113
115
|
}), [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
128
|
+
j,
|
|
129
|
+
we,
|
|
127
130
|
Ce,
|
|
128
|
-
|
|
129
|
-
]), Te = ee(
|
|
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__ */
|
|
138
|
-
value:
|
|
139
|
-
children: /* @__PURE__ */
|
|
140
|
+
return /* @__PURE__ */ T(se.Provider, {
|
|
141
|
+
value: U,
|
|
142
|
+
children: /* @__PURE__ */ T(le.Provider, {
|
|
140
143
|
value: null,
|
|
141
|
-
children: /* @__PURE__ */
|
|
144
|
+
children: /* @__PURE__ */ T(x.Provider, {
|
|
142
145
|
value: !1,
|
|
143
|
-
children: /* @__PURE__ */
|
|
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",
|
|
148
|
-
...
|
|
150
|
+
className: e(l.root, "text-body-1", y),
|
|
151
|
+
...ce,
|
|
149
152
|
"data-roving-container": "",
|
|
150
|
-
onKeyDown: c(
|
|
151
|
-
onKeyDownCapture: c(
|
|
152
|
-
onFocus: c(
|
|
153
|
-
onBlur: c(
|
|
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__ */
|
|
158
|
+
children: /* @__PURE__ */ T(S.Provider, {
|
|
156
159
|
value: !1,
|
|
157
|
-
children:
|
|
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
|
|
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
|
|
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:
|
|
186
|
+
itemSelector: k,
|
|
184
187
|
manageTabIndex: !0,
|
|
185
188
|
orientation: "horizontal",
|
|
186
189
|
loop: !o,
|
|
187
190
|
tabStop: n
|
|
188
|
-
}), [d, f] =
|
|
189
|
-
|
|
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__ */
|
|
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",
|
|
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:
|
|
228
|
-
let { "data-roving-text":
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}, [
|
|
232
|
-
let
|
|
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__ */
|
|
235
|
-
n(t, F) ? (ke ??= t.props.value,
|
|
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,
|
|
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
|
-
|
|
242
|
-
let
|
|
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 ? [] :
|
|
251
|
+
children: v ? [] : de(b, {
|
|
245
252
|
item: F,
|
|
246
253
|
tree: M
|
|
247
254
|
})
|
|
248
255
|
} : null, [
|
|
249
|
-
|
|
256
|
+
Y,
|
|
250
257
|
r,
|
|
251
258
|
v,
|
|
252
259
|
b
|
|
253
|
-
]),
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
node:
|
|
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
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
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
|
|
267
|
-
|
|
268
|
-
},
|
|
269
|
-
|
|
270
|
-
},
|
|
271
|
-
if (!
|
|
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(),
|
|
281
|
+
e.preventDefault(), Ve();
|
|
275
282
|
return;
|
|
276
283
|
case " ":
|
|
277
|
-
e.preventDefault(),
|
|
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
|
-
|
|
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(),
|
|
292
|
-
|
|
298
|
+
if (e.preventDefault(), J && !N) {
|
|
299
|
+
O.toggle(r);
|
|
293
300
|
return;
|
|
294
301
|
}
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
} else t === "prev" && (e.preventDefault(),
|
|
298
|
-
}, $ =
|
|
299
|
-
(e.target === e.currentTarget ||
|
|
300
|
-
},
|
|
301
|
-
|
|
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
|
-
|
|
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
|
|
316
|
+
let qe = Z === void 0 ? null : /* @__PURE__ */ T("span", {
|
|
310
317
|
role: "checkbox",
|
|
311
|
-
"aria-checked":
|
|
312
|
-
"aria-labelledby":
|
|
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
|
-
|
|
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",
|
|
322
|
-
children:
|
|
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
|
-
}) :
|
|
332
|
+
}) : Z === "checked" ? /* @__PURE__ */ T(ne, {
|
|
326
333
|
size: 12,
|
|
327
334
|
className: y.selectedLeaf
|
|
328
335
|
}) : null
|
|
329
|
-
}),
|
|
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",
|
|
332
|
-
children:
|
|
333
|
-
}) : null,
|
|
334
|
-
return /* @__PURE__ */
|
|
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":
|
|
337
|
-
"aria-current":
|
|
338
|
-
"data-checked":
|
|
339
|
-
"data-mixed":
|
|
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",
|
|
341
|
-
...
|
|
342
|
-
"aria-labelledby":
|
|
343
|
-
"aria-describedby": te(
|
|
344
|
-
"aria-expanded":
|
|
345
|
-
"aria-checked":
|
|
346
|
-
tabIndex:
|
|
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":
|
|
349
|
-
"data-current":
|
|
350
|
-
onClick:
|
|
351
|
-
onKeyDown:
|
|
352
|
-
onFocus: (e) => c(
|
|
353
|
-
onBlur: (e) => c(
|
|
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__ */
|
|
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",
|
|
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
|
-
|
|
360
|
-
|
|
366
|
+
Le,
|
|
367
|
+
Ye,
|
|
361
368
|
Ae,
|
|
362
|
-
/* @__PURE__ */
|
|
369
|
+
/* @__PURE__ */ T("span", {
|
|
363
370
|
id: I,
|
|
364
371
|
"data-tree-label": "",
|
|
365
|
-
"data-roving-text":
|
|
366
|
-
className: e(u.label, "truncate", (je ||
|
|
367
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
376
|
+
children: /* @__PURE__ */ T(S.Provider, {
|
|
370
377
|
value: !0,
|
|
371
|
-
children: /* @__PURE__ */
|
|
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
|
-
(
|
|
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",
|
|
382
|
-
children: [
|
|
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",
|
|
392
|
+
className: e(u.aside, "inline-flex items-center text-caption-1 text-muted-foreground", q && xe),
|
|
386
393
|
children: a(g)
|
|
387
|
-
}),
|
|
388
|
-
labelledBy:
|
|
389
|
-
tabStop:
|
|
390
|
-
navigationMode:
|
|
391
|
-
onReturn: () =>
|
|
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
|
-
}),
|
|
403
|
+
}), Ne && /* @__PURE__ */ T(le.Provider, {
|
|
397
404
|
value: r,
|
|
398
|
-
children: /* @__PURE__ */
|
|
399
|
-
value:
|
|
400
|
-
children: /* @__PURE__ */
|
|
405
|
+
children: /* @__PURE__ */ T(x.Provider, {
|
|
406
|
+
value: Xe,
|
|
407
|
+
children: /* @__PURE__ */ T(S.Provider, {
|
|
401
408
|
value: !1,
|
|
402
|
-
children: /* @__PURE__ */
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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
|
})
|