@mortenbrudvik/waveui 0.15.0 → 0.16.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 +274 -24
- package/dist/components/data-display/List.cjs +1 -1
- package/dist/components/data-display/List.cjs.map +1 -1
- package/dist/components/data-display/List.mjs +405 -219
- package/dist/components/data-display/List.mjs.map +1 -1
- package/dist/components/data-display/List.registry.cjs +1 -1
- package/dist/components/data-display/List.registry.cjs.map +1 -1
- package/dist/components/data-display/List.registry.mjs +12 -6
- package/dist/components/data-display/List.registry.mjs.map +1 -1
- package/dist/components/input/Combobox.cjs +1 -1
- package/dist/components/input/Combobox.cjs.map +1 -1
- package/dist/components/input/Combobox.mjs +163 -148
- package/dist/components/input/Combobox.mjs.map +1 -1
- package/dist/components/input/Dropdown.cjs +1 -1
- package/dist/components/input/Dropdown.cjs.map +1 -1
- package/dist/components/input/Dropdown.mjs +132 -117
- package/dist/components/input/Dropdown.mjs.map +1 -1
- package/dist/components/input/Listbox.cjs +1 -1
- package/dist/components/input/Listbox.cjs.map +1 -1
- package/dist/components/input/Listbox.mjs +90 -78
- package/dist/components/input/Listbox.mjs.map +1 -1
- package/dist/components/input/Option.cjs +1 -1
- package/dist/components/input/Option.cjs.map +1 -1
- package/dist/components/input/Option.data.cjs +2 -0
- package/dist/components/input/Option.data.cjs.map +1 -0
- package/dist/components/input/Option.data.mjs +114 -0
- package/dist/components/input/Option.data.mjs.map +1 -0
- package/dist/components/input/Option.mjs +21 -17
- package/dist/components/input/Option.mjs.map +1 -1
- package/dist/components/layout/FlatTree.cjs +2 -0
- package/dist/components/layout/FlatTree.cjs.map +1 -0
- package/dist/components/layout/FlatTree.context.cjs +2 -0
- package/dist/components/layout/FlatTree.context.cjs.map +1 -0
- package/dist/components/layout/FlatTree.context.mjs +20 -0
- package/dist/components/layout/FlatTree.context.mjs.map +1 -0
- package/dist/components/layout/FlatTree.item.cjs +2 -0
- package/dist/components/layout/FlatTree.item.cjs.map +1 -0
- package/dist/components/layout/FlatTree.item.mjs +90 -0
- package/dist/components/layout/FlatTree.item.mjs.map +1 -0
- package/dist/components/layout/FlatTree.mjs +276 -0
- package/dist/components/layout/FlatTree.mjs.map +1 -0
- 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 +166 -165
- package/dist/components/layout/Tree.core.mjs.map +1 -1
- package/dist/components/layout/Tree.selection.cjs +1 -1
- package/dist/components/layout/Tree.selection.cjs.map +1 -1
- package/dist/components/layout/Tree.selection.mjs +11 -57
- package/dist/components/layout/Tree.selection.mjs.map +1 -1
- package/dist/components/layout/useFlatTree.cjs +2 -0
- package/dist/components/layout/useFlatTree.cjs.map +1 -0
- package/dist/components/layout/useFlatTree.mjs +83 -0
- package/dist/components/layout/useFlatTree.mjs.map +1 -0
- package/dist/components/table/DataGrid.cjs +1 -1
- package/dist/components/table/DataGrid.cjs.map +1 -1
- package/dist/components/table/DataGrid.context.cjs +2 -0
- package/dist/components/table/DataGrid.context.cjs.map +1 -0
- package/dist/components/table/DataGrid.context.mjs +74 -0
- package/dist/components/table/DataGrid.context.mjs.map +1 -0
- package/dist/components/table/DataGrid.header.cjs +2 -0
- package/dist/components/table/DataGrid.header.cjs.map +1 -0
- package/dist/components/table/DataGrid.header.mjs +168 -0
- package/dist/components/table/DataGrid.header.mjs.map +1 -0
- package/dist/components/table/DataGrid.mjs +488 -591
- package/dist/components/table/DataGrid.mjs.map +1 -1
- package/dist/components/table/DataGrid.sizing.cjs +2 -0
- package/dist/components/table/DataGrid.sizing.cjs.map +1 -0
- package/dist/components/table/DataGrid.sizing.mjs +187 -0
- package/dist/components/table/DataGrid.sizing.mjs.map +1 -0
- package/dist/components/table/DataGrid.store.cjs +2 -0
- package/dist/components/table/DataGrid.store.cjs.map +1 -0
- package/dist/components/table/DataGrid.store.mjs +108 -0
- package/dist/components/table/DataGrid.store.mjs.map +1 -0
- package/dist/components/table/DataGrid.window.cjs +2 -0
- package/dist/components/table/DataGrid.window.cjs.map +1 -0
- package/dist/components/table/DataGrid.window.mjs +165 -0
- package/dist/components/table/DataGrid.window.mjs.map +1 -0
- package/dist/components/table/Table.cjs +1 -1
- package/dist/components/table/Table.cjs.map +1 -1
- package/dist/components/table/Table.mjs +74 -72
- package/dist/components/table/Table.mjs.map +1 -1
- package/dist/components/table/Table.resize.cjs +2 -0
- package/dist/components/table/Table.resize.cjs.map +1 -0
- package/dist/components/table/Table.resize.mjs +98 -0
- package/dist/components/table/Table.resize.mjs.map +1 -0
- package/dist/components/table/useGridNavigation.cjs +1 -1
- package/dist/components/table/useGridNavigation.cjs.map +1 -1
- package/dist/components/table/useGridNavigation.mjs +343 -140
- package/dist/components/table/useGridNavigation.mjs.map +1 -1
- package/dist/components/table/useTableColumnSizing.cjs +2 -0
- package/dist/components/table/useTableColumnSizing.cjs.map +1 -0
- package/dist/components/table/useTableColumnSizing.mjs +76 -0
- package/dist/components/table/useTableColumnSizing.mjs.map +1 -0
- package/dist/components/table/useTableFeatures.cjs +2 -0
- package/dist/components/table/useTableFeatures.cjs.map +1 -0
- package/dist/components/table/useTableFeatures.mjs +110 -0
- package/dist/components/table/useTableFeatures.mjs.map +1 -0
- package/dist/components/table/useTableSelection.cjs +2 -0
- package/dist/components/table/useTableSelection.cjs.map +1 -0
- package/dist/components/table/useTableSelection.mjs +39 -0
- package/dist/components/table/useTableSelection.mjs.map +1 -0
- package/dist/components/table/useTableSort.cjs +2 -0
- package/dist/components/table/useTableSort.cjs.map +1 -0
- package/dist/components/table/useTableSort.mjs +58 -0
- package/dist/components/table/useTableSort.mjs.map +1 -0
- package/dist/hooks/useActiveDescendant.cjs +1 -1
- package/dist/hooks/useActiveDescendant.cjs.map +1 -1
- package/dist/hooks/useActiveDescendant.mjs +33 -25
- package/dist/hooks/useActiveDescendant.mjs.map +1 -1
- package/dist/hooks/useListbox.cjs +1 -1
- package/dist/hooks/useListbox.cjs.map +1 -1
- package/dist/hooks/useListbox.mjs +140 -130
- package/dist/hooks/useListbox.mjs.map +1 -1
- package/dist/hooks/useRovingTabIndex.cjs +1 -1
- package/dist/hooks/useRovingTabIndex.cjs.map +1 -1
- package/dist/hooks/useRovingTabIndex.mjs +1 -1
- package/dist/hooks/useRovingTabIndex.mjs.map +1 -1
- package/dist/hooks/useSelection.cjs +2 -0
- package/dist/hooks/useSelection.cjs.map +1 -0
- package/dist/hooks/useSelection.mjs +57 -0
- package/dist/hooks/useSelection.mjs.map +1 -0
- package/dist/hooks/useVirtualWindow.cjs +2 -0
- package/dist/hooks/useVirtualWindow.cjs.map +1 -0
- package/dist/hooks/useVirtualWindow.mjs +102 -0
- package/dist/hooks/useVirtualWindow.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1542 -53
- package/dist/index.d.ts +1542 -53
- package/dist/index.mjs +147 -136
- package/dist/lib/classNames.cjs +1 -1
- package/dist/lib/classNames.cjs.map +1 -1
- package/dist/lib/classNames.mjs +68 -49
- package/dist/lib/classNames.mjs.map +1 -1
- package/dist/lib/columnSizing.cjs +2 -0
- package/dist/lib/columnSizing.cjs.map +1 -0
- package/dist/lib/columnSizing.mjs +27 -0
- package/dist/lib/columnSizing.mjs.map +1 -0
- package/dist/lib/flatTree.cjs +2 -0
- package/dist/lib/flatTree.cjs.map +1 -0
- package/dist/lib/flatTree.mjs +118 -0
- package/dist/lib/flatTree.mjs.map +1 -0
- package/dist/lib/selection.cjs +2 -0
- package/dist/lib/selection.cjs.map +1 -0
- package/dist/lib/selection.mjs +28 -0
- package/dist/lib/selection.mjs.map +1 -0
- package/dist/lib/treeCascade.cjs +2 -0
- package/dist/lib/treeCascade.cjs.map +1 -0
- package/dist/lib/treeCascade.mjs +52 -0
- package/dist/lib/treeCascade.mjs.map +1 -0
- package/dist/lib/virtual.cjs +2 -0
- package/dist/lib/virtual.cjs.map +1 -0
- package/dist/lib/virtual.mjs +54 -0
- package/dist/lib/virtual.mjs.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -17,25 +17,26 @@ 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
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
|
|
21
|
-
import {
|
|
22
|
-
import
|
|
23
|
-
import
|
|
20
|
+
import { TreeCheckForcedContext as x, TreeContext as se, TreeItemContext as ce, TreeLabelContext as S, TreeParentContext as C, useTreeContext as le } from "./Tree.context.mjs";
|
|
21
|
+
import { computeCheckStates as ue, toggleCheck as de } from "../../lib/treeCascade.mjs";
|
|
22
|
+
import { collectItems as w } from "./Tree.selection.mjs";
|
|
23
|
+
import * as T from "react";
|
|
24
|
+
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
24
25
|
//#region src/components/layout/Tree.core.tsx
|
|
25
|
-
var
|
|
26
|
-
function
|
|
26
|
+
var fe = [], pe = "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.";
|
|
27
|
+
function me(e) {
|
|
27
28
|
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.`);
|
|
28
29
|
}
|
|
29
|
-
var
|
|
30
|
-
function
|
|
30
|
+
var he = "Tree: `selected` has no effect with selectionMode=\"multiple\"; use `checkedItems`, and `current` for the item the user is on.", ge = "Tree: `checkedItems` and `defaultCheckedItems` need selectionMode=\"multiple\"; without it the tree draws no checkboxes and ignores them.", _e = "Tree: selectionMode=\"single\" draws a radio on every item for `selected`; pass `selected` (null while nothing is selected) and update it from `onItemSelect`.";
|
|
31
|
+
function O(e) {
|
|
31
32
|
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) : [];
|
|
32
33
|
}
|
|
33
|
-
var
|
|
34
|
-
function
|
|
34
|
+
var k = "[role=\"treeitem\"]", A = "button, [href], input, select, textarea, [role=\"button\"], [tabindex]", ve = "[&:focus-within:not(:has(>*>[role=group]_:focus))>[data-tree-row]_[data-tree-actions]]:visible", ye = "[@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", be = "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", xe = "[&>*]:[grid-area:1/1] forced-colors:flex [@media(hover:none)]:flex";
|
|
35
|
+
function M(e) {
|
|
35
36
|
let t = e.querySelector(":scope > [data-tree-row] [data-tree-actions]");
|
|
36
37
|
if (!t) return !1;
|
|
37
38
|
let n = /* @__PURE__ */ new Map();
|
|
38
|
-
for (let e of Array.from(t.querySelectorAll(
|
|
39
|
+
for (let e of Array.from(t.querySelectorAll(A))) {
|
|
39
40
|
if (g(e) || e.matches(":disabled")) continue;
|
|
40
41
|
let r = e.closest("[hidden], [inert]");
|
|
41
42
|
if (r && t.contains(r)) continue;
|
|
@@ -44,106 +45,106 @@ function j(e) {
|
|
|
44
45
|
}
|
|
45
46
|
return !1;
|
|
46
47
|
}
|
|
47
|
-
var
|
|
48
|
-
let [
|
|
49
|
-
|
|
50
|
-
}, [
|
|
51
|
-
|
|
48
|
+
var N = ({ 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 }) => {
|
|
49
|
+
let [le] = T.useState(() => n ?? fe), [ue, w] = f(t, le, (e) => a?.([...e])), D = T.useMemo(() => new Set(ue), [ue]), pe = T.useCallback((e) => {
|
|
50
|
+
w((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
|
|
51
|
+
}, [w]), A = T.useCallback((e) => {
|
|
52
|
+
w((t) => {
|
|
52
53
|
let n = e.filter((e) => !t.includes(e));
|
|
53
54
|
return n.length > 0 ? [...t, ...n] : t;
|
|
54
55
|
});
|
|
55
|
-
}, [
|
|
56
|
+
}, [w]), ve = d((e) => {
|
|
56
57
|
o?.(e);
|
|
57
|
-
}), [
|
|
58
|
-
|
|
59
|
-
let t =
|
|
58
|
+
}), [ye] = T.useState(() => g ?? fe), j = T.useRef(void 0), [be, xe] = f(h, ye, (e) => _?.([...e], j.current)), M = T.useMemo(() => new Set(be), [be]), N = T.useRef(null), Se = T.useCallback((e) => {
|
|
59
|
+
N.current ??= /* @__PURE__ */ new Set();
|
|
60
|
+
let t = N.current;
|
|
60
61
|
return t.add(e), () => {
|
|
61
62
|
t.delete(e);
|
|
62
63
|
};
|
|
63
|
-
}, []),
|
|
64
|
-
let n =
|
|
65
|
-
|
|
66
|
-
let i =
|
|
67
|
-
return
|
|
64
|
+
}, []), Ce = d((e, t) => {
|
|
65
|
+
let n = O(N.current);
|
|
66
|
+
xe((r) => {
|
|
67
|
+
let i = de(n, r, e);
|
|
68
|
+
return j.current = {
|
|
68
69
|
value: e,
|
|
69
70
|
checked: i.includes(e),
|
|
70
71
|
event: t
|
|
71
72
|
}, i;
|
|
72
|
-
}),
|
|
73
|
-
}),
|
|
74
|
-
|
|
75
|
-
p === "multiple" && s !== void 0 && i("Tree:selected-with-multiple",
|
|
76
|
-
}, [p, s]),
|
|
77
|
-
p === "single" && s === void 0 && i("Tree:single-without-selected",
|
|
73
|
+
}), j.current = void 0;
|
|
74
|
+
}), F = p === "multiple" ? void 0 : p === "single" ? s ?? null : s;
|
|
75
|
+
T.useEffect(() => {
|
|
76
|
+
p === "multiple" && s !== void 0 && i("Tree:selected-with-multiple", he);
|
|
77
|
+
}, [p, s]), T.useEffect(() => {
|
|
78
|
+
p === "single" && s === void 0 && i("Tree:single-without-selected", _e);
|
|
78
79
|
}, [p, s]);
|
|
79
|
-
let
|
|
80
|
-
|
|
81
|
-
p !== "multiple" &&
|
|
82
|
-
}, [p,
|
|
83
|
-
let [
|
|
80
|
+
let I = h !== void 0 || g !== void 0;
|
|
81
|
+
T.useEffect(() => {
|
|
82
|
+
p !== "multiple" && I && i("Tree:checked-without-multiple", ge);
|
|
83
|
+
}, [p, I]);
|
|
84
|
+
let [L, R] = T.useState(null), z = T.useRef(null), B = T.useCallback((e) => {
|
|
84
85
|
if (!r) return () => {};
|
|
85
|
-
|
|
86
|
-
let t =
|
|
87
|
-
return t.set(e, n), n > 1 &&
|
|
86
|
+
z.current ??= /* @__PURE__ */ new Map();
|
|
87
|
+
let t = z.current, n = (t.get(e) ?? 0) + 1;
|
|
88
|
+
return t.set(e, n), n > 1 && me(e), () => {
|
|
88
89
|
let n = (t.get(e) ?? 1) - 1;
|
|
89
90
|
n > 0 ? t.set(e, n) : t.delete(e);
|
|
90
91
|
};
|
|
91
|
-
}, []), { containerProps:
|
|
92
|
-
activeValue:
|
|
93
|
-
itemSelector:
|
|
92
|
+
}, []), { containerProps: V, getTabIndex: H, focusValue: U } = v({
|
|
93
|
+
activeValue: L ?? F ?? null,
|
|
94
|
+
itemSelector: k,
|
|
94
95
|
orientation: "vertical",
|
|
95
96
|
loop: !1,
|
|
96
97
|
typeahead: !0
|
|
97
|
-
}),
|
|
98
|
-
expanded:
|
|
99
|
-
toggle:
|
|
100
|
-
expand:
|
|
101
|
-
activate:
|
|
102
|
-
selected:
|
|
98
|
+
}), we = T.useMemo(() => ({
|
|
99
|
+
expanded: D,
|
|
100
|
+
toggle: pe,
|
|
101
|
+
expand: A,
|
|
102
|
+
activate: ve,
|
|
103
|
+
selected: F,
|
|
103
104
|
current: u,
|
|
104
|
-
getTabIndex:
|
|
105
|
-
focusValue:
|
|
106
|
-
onItemFocus:
|
|
107
|
-
focusedItem:
|
|
105
|
+
getTabIndex: H,
|
|
106
|
+
focusValue: U,
|
|
107
|
+
onItemFocus: R,
|
|
108
|
+
focusedItem: L,
|
|
108
109
|
navigationMode: m,
|
|
109
|
-
registerValue:
|
|
110
|
+
registerValue: B,
|
|
110
111
|
selectionMode: p,
|
|
111
|
-
checked:
|
|
112
|
-
toggleChecked:
|
|
113
|
-
registerTopLevel:
|
|
112
|
+
checked: M,
|
|
113
|
+
toggleChecked: Ce,
|
|
114
|
+
registerTopLevel: Se,
|
|
114
115
|
motion: te
|
|
115
116
|
}), [
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
D,
|
|
118
|
+
pe,
|
|
119
|
+
A,
|
|
120
|
+
ve,
|
|
121
|
+
F,
|
|
121
122
|
u,
|
|
122
|
-
V,
|
|
123
123
|
H,
|
|
124
|
-
|
|
124
|
+
U,
|
|
125
|
+
L,
|
|
125
126
|
m,
|
|
126
|
-
|
|
127
|
+
B,
|
|
127
128
|
p,
|
|
128
|
-
|
|
129
|
-
we,
|
|
129
|
+
M,
|
|
130
130
|
Ce,
|
|
131
|
+
Se,
|
|
131
132
|
te
|
|
132
|
-
]), Te = ee(oe,
|
|
133
|
-
e.key.length === 1 &&
|
|
133
|
+
]), Te = ee(oe, V.ref), W = (e) => {
|
|
134
|
+
e.key.length === 1 && P(e.currentTarget), V.onKeyDown(e);
|
|
134
135
|
}, Ee = (e) => {
|
|
135
|
-
e.key === " " &&
|
|
136
|
+
e.key === " " && P(e.currentTarget), V.onKeyDownCapture(e);
|
|
136
137
|
}, De = (e) => {
|
|
137
138
|
let t = e.relatedTarget;
|
|
138
|
-
(!t || !e.currentTarget.contains(t)) &&
|
|
139
|
+
(!t || !e.currentTarget.contains(t)) && R(null);
|
|
139
140
|
};
|
|
140
|
-
return /* @__PURE__ */
|
|
141
|
-
value:
|
|
142
|
-
children: /* @__PURE__ */
|
|
141
|
+
return /* @__PURE__ */ E(se.Provider, {
|
|
142
|
+
value: we,
|
|
143
|
+
children: /* @__PURE__ */ E(C.Provider, {
|
|
143
144
|
value: null,
|
|
144
|
-
children: /* @__PURE__ */
|
|
145
|
+
children: /* @__PURE__ */ E(x.Provider, {
|
|
145
146
|
value: !1,
|
|
146
|
-
children: /* @__PURE__ */
|
|
147
|
+
children: /* @__PURE__ */ E("div", {
|
|
147
148
|
role: "tree",
|
|
148
149
|
"data-selection-mode": p,
|
|
149
150
|
"aria-multiselectable": p === "multiple" || void 0,
|
|
@@ -152,10 +153,10 @@ var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a,
|
|
|
152
153
|
"data-roving-container": "",
|
|
153
154
|
onKeyDown: c(re, W),
|
|
154
155
|
onKeyDownCapture: c(ie, Ee),
|
|
155
|
-
onFocus: c(ae,
|
|
156
|
+
onFocus: c(ae, V.onFocus, { checkDefaultPrevented: !1 }),
|
|
156
157
|
onBlur: c(b, De, { checkDefaultPrevented: !1 }),
|
|
157
158
|
ref: Te,
|
|
158
|
-
children: /* @__PURE__ */
|
|
159
|
+
children: /* @__PURE__ */ E(S.Provider, {
|
|
159
160
|
value: !1,
|
|
160
161
|
children: ne
|
|
161
162
|
})
|
|
@@ -164,8 +165,8 @@ var M = ({ expandedItems: t, defaultExpandedItems: n, onExpandedItemsChange: a,
|
|
|
164
165
|
})
|
|
165
166
|
});
|
|
166
167
|
};
|
|
167
|
-
|
|
168
|
-
function
|
|
168
|
+
N.displayName = "Tree";
|
|
169
|
+
function P(e) {
|
|
169
170
|
e.querySelectorAll("[role=\"treeitem\"]").forEach((e) => {
|
|
170
171
|
let t = e.querySelector(":scope > [data-tree-row] > [data-tree-label]");
|
|
171
172
|
if (!t) return;
|
|
@@ -173,23 +174,23 @@ function N(e) {
|
|
|
173
174
|
e.getAttribute("data-roving-text") !== r && e.setAttribute("data-roving-text", r);
|
|
174
175
|
});
|
|
175
176
|
}
|
|
176
|
-
function
|
|
177
|
+
function Se(e) {
|
|
177
178
|
let t = e.target;
|
|
178
179
|
return !t?.closest?.("[data-tree-actions]") && t?.closest?.("[role=\"treeitem\"]") === e.currentTarget;
|
|
179
180
|
}
|
|
180
|
-
function
|
|
181
|
+
function Ce(e) {
|
|
181
182
|
let t = e.target;
|
|
182
183
|
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;
|
|
183
184
|
}
|
|
184
|
-
var
|
|
185
|
+
var F = ({ labelledBy: t, tabStop: n, navigationMode: r, onReturn: i, children: a }) => {
|
|
185
186
|
let o = r === "treegrid", { containerProps: { ref: s }, handleKeyDown: c, handleFocus: l } = v({
|
|
186
|
-
itemSelector:
|
|
187
|
+
itemSelector: A,
|
|
187
188
|
manageTabIndex: !0,
|
|
188
189
|
orientation: "horizontal",
|
|
189
190
|
loop: !o,
|
|
190
191
|
tabStop: n
|
|
191
|
-
}), [d, f] =
|
|
192
|
-
|
|
192
|
+
}), [d, f] = T.useState(null);
|
|
193
|
+
T.useEffect(() => {
|
|
193
194
|
if (d !== "leaving") return;
|
|
194
195
|
let e = requestAnimationFrame(() => f(null));
|
|
195
196
|
return () => cancelAnimationFrame(e);
|
|
@@ -208,7 +209,7 @@ var P = ({ labelledBy: t, tabStop: n, navigationMode: r, onReturn: i, children:
|
|
|
208
209
|
dir: h(e.currentTarget)
|
|
209
210
|
}) === "prev";
|
|
210
211
|
};
|
|
211
|
-
return /* @__PURE__ */
|
|
212
|
+
return /* @__PURE__ */ E("span", {
|
|
212
213
|
role: "toolbar",
|
|
213
214
|
"aria-labelledby": t,
|
|
214
215
|
"aria-orientation": "horizontal",
|
|
@@ -222,71 +223,71 @@ var P = ({ labelledBy: t, tabStop: n, navigationMode: r, onReturn: i, children:
|
|
|
222
223
|
},
|
|
223
224
|
onFocus: p,
|
|
224
225
|
onBlur: g,
|
|
225
|
-
className: e(u.actions, "inline-flex items-center gap-1",
|
|
226
|
+
className: e(u.actions, "inline-flex items-center gap-1", j),
|
|
226
227
|
children: a
|
|
227
228
|
});
|
|
228
229
|
};
|
|
229
|
-
|
|
230
|
-
var
|
|
231
|
-
let { "data-roving-text":
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}, [
|
|
230
|
+
F.displayName = "TreeItemActions";
|
|
231
|
+
var I = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _, leaf: v = !1, className: ae, children: b, onClick: se, onKeyDown: de, onFocus: fe, onBlur: me, ref: he, ...ge }) => {
|
|
232
|
+
let { "data-roving-text": _e, ...O } = ge, k = le("Tree.Item"), A = T.useContext(C), j = T.useContext(S), P = k.expanded.has(r), L = p("tree-item-label"), R = p("tree-item-aside"), z = T.useContext(x), B = T.useRef(null), V = ee(he, B), [H, U] = T.useState(null), we = T.useCallback((e) => (U(e), () => U((t) => t === e ? null : t)), []), Te = T.useMemo(() => ({ registerLayout: we }), [we]), W = H?.nameId ?? L, { registerValue: Ee, registerTopLevel: De } = k;
|
|
233
|
+
T.useEffect(() => Ee(r), [Ee, r]), T.useEffect(() => {
|
|
234
|
+
j && i("Tree.Item:inside-label", pe);
|
|
235
|
+
}, [j]);
|
|
235
236
|
let G = [], Oe = [], ke;
|
|
236
237
|
t(b).forEach(({ key: e, node: t }) => {
|
|
237
|
-
let r = /* @__PURE__ */ T
|
|
238
|
-
n(t,
|
|
238
|
+
let r = /* @__PURE__ */ E(T.Fragment, { children: t }, e);
|
|
239
|
+
n(t, I) ? (ke ??= t.props.value, G.push(r)) : n(t, N) ? G.push(r) : Oe.push(r);
|
|
239
240
|
});
|
|
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 =
|
|
241
|
-
motion:
|
|
241
|
+
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 = T.useRef(null), { isMounted: Ne, wrapperRef: Pe, presenceProps: Fe, className: Ie } = oe(J && P, {
|
|
242
|
+
motion: k.motion,
|
|
242
243
|
partRef: Me,
|
|
243
|
-
getTrigger: () =>
|
|
244
|
-
}), Le = /* @__PURE__ */
|
|
244
|
+
getTrigger: () => B.current
|
|
245
|
+
}), Le = /* @__PURE__ */ E("span", {
|
|
245
246
|
className: "w-3 shrink-0",
|
|
246
247
|
"aria-hidden": "true"
|
|
247
248
|
});
|
|
248
|
-
J && f == null ? Le = /* @__PURE__ */
|
|
249
|
-
let Y =
|
|
249
|
+
J && f == null ? Le = /* @__PURE__ */ E(re, { className: e(u.expandIcon, "shrink-0 transition-transform motion-reduce:transition-none", P ? "rotate-90" : "wave-rtl:-scale-x-100") }) : J && s(f) && (Le = o(f, "span", e(u.expandIcon, "inline-flex shrink-0"), { "aria-hidden": !0 }));
|
|
250
|
+
let Y = k.selectionMode === "multiple", X = T.useMemo(() => Y ? {
|
|
250
251
|
value: r,
|
|
251
|
-
children: v ? [] :
|
|
252
|
-
item:
|
|
253
|
-
tree:
|
|
252
|
+
children: v ? [] : w(b, {
|
|
253
|
+
item: I,
|
|
254
|
+
tree: N
|
|
254
255
|
})
|
|
255
256
|
} : null, [
|
|
256
257
|
Y,
|
|
257
258
|
r,
|
|
258
259
|
v,
|
|
259
260
|
b
|
|
260
|
-
]), Z = X ?
|
|
261
|
-
|
|
261
|
+
]), Z = X ? ue([X], k.checked, z).get(r) : void 0, Re = T.useRef(null);
|
|
262
|
+
T.useLayoutEffect(() => {
|
|
262
263
|
Re.current = X ? {
|
|
263
264
|
node: X,
|
|
264
|
-
element:
|
|
265
|
+
element: B.current
|
|
265
266
|
} : null;
|
|
266
267
|
});
|
|
267
|
-
let ze =
|
|
268
|
-
|
|
268
|
+
let ze = A === null && !j;
|
|
269
|
+
T.useLayoutEffect(() => Y && ze ? De(Re) : void 0, [
|
|
269
270
|
Y,
|
|
270
271
|
ze,
|
|
271
272
|
De
|
|
272
273
|
]);
|
|
273
|
-
let Q =
|
|
274
|
-
J &&
|
|
274
|
+
let Q = k.selected === void 0 ? void 0 : k.selected === r, Be = k.current !== void 0 && k.current !== null && k.current === r, Ve = () => {
|
|
275
|
+
J && k.toggle(r), k.activate(r);
|
|
275
276
|
}, He = (e) => {
|
|
276
|
-
|
|
277
|
+
Ce(e) && (se?.(e), e.defaultPrevented || Ve());
|
|
277
278
|
}, Ue = (e) => {
|
|
278
|
-
if (!
|
|
279
|
+
if (!Se(e) || (de?.(e), e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey)) return;
|
|
279
280
|
switch (e.key) {
|
|
280
281
|
case "Enter":
|
|
281
282
|
e.preventDefault(), Ve();
|
|
282
283
|
return;
|
|
283
284
|
case " ":
|
|
284
|
-
e.preventDefault(), Z === void 0 ? Ve() :
|
|
285
|
+
e.preventDefault(), Z === void 0 ? Ve() : k.toggleChecked(r, e.nativeEvent);
|
|
285
286
|
return;
|
|
286
287
|
case "*": {
|
|
287
288
|
e.preventDefault();
|
|
288
289
|
let t = e.currentTarget.parentElement?.querySelectorAll(":scope > [role=\"treeitem\"][aria-expanded=\"false\"][data-roving-value]");
|
|
289
|
-
|
|
290
|
+
k.expand(Array.from(t ?? [], (e) => e.getAttribute("data-roving-value") ?? "").filter(Boolean));
|
|
290
291
|
return;
|
|
291
292
|
}
|
|
292
293
|
}
|
|
@@ -295,87 +296,87 @@ var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _,
|
|
|
295
296
|
dir: h(e.currentTarget)
|
|
296
297
|
});
|
|
297
298
|
if (t === "next") {
|
|
298
|
-
if (e.preventDefault(), J && !
|
|
299
|
-
|
|
299
|
+
if (e.preventDefault(), J && !P) {
|
|
300
|
+
k.toggle(r);
|
|
300
301
|
return;
|
|
301
302
|
}
|
|
302
|
-
if (
|
|
303
|
-
J && ke !== void 0 &&
|
|
304
|
-
} else t === "prev" && (e.preventDefault(), J &&
|
|
305
|
-
}, $ =
|
|
306
|
-
(e.target === e.currentTarget || We(e)) &&
|
|
303
|
+
if (k.navigationMode === "treegrid" && M(e.currentTarget)) return;
|
|
304
|
+
J && ke !== void 0 && k.focusValue(ke);
|
|
305
|
+
} else t === "prev" && (e.preventDefault(), J && P ? k.toggle(r) : A !== null && k.focusValue(A));
|
|
306
|
+
}, $ = T.useRef(null), We = (e) => e.target.closest("[data-tree-actions]")?.closest("[role=\"treeitem\"]") === e.currentTarget, Ge = (e) => {
|
|
307
|
+
(e.target === e.currentTarget || We(e)) && k.onItemFocus(r), We(e) && ($.current = e.target);
|
|
307
308
|
}, Ke = (e) => {
|
|
308
309
|
We(e) && (e.relatedTarget !== null || e.target.isConnected) && ($.current = null);
|
|
309
310
|
};
|
|
310
|
-
|
|
311
|
+
T.useLayoutEffect(() => {
|
|
311
312
|
let e = $.current;
|
|
312
313
|
if (!e) return;
|
|
313
|
-
let t =
|
|
314
|
+
let t = B.current, n = t?.ownerDocument.activeElement;
|
|
314
315
|
n && n !== t.ownerDocument.body ? $.current = null : t && !e.isConnected && ($.current = null, t.focus({ preventScroll: !0 }));
|
|
315
316
|
});
|
|
316
|
-
let qe = Z === void 0 ? null : /* @__PURE__ */
|
|
317
|
+
let qe = Z === void 0 ? null : /* @__PURE__ */ E("span", {
|
|
317
318
|
role: "checkbox",
|
|
318
319
|
"aria-checked": Z === "mixed" ? "mixed" : Z === "checked",
|
|
319
320
|
"aria-labelledby": W,
|
|
320
321
|
tabIndex: -1,
|
|
321
322
|
"data-tree-checkbox": "",
|
|
322
323
|
onMouseDown: (e) => {
|
|
323
|
-
e.preventDefault(),
|
|
324
|
+
e.preventDefault(), B.current?.focus({ preventScroll: !0 });
|
|
324
325
|
},
|
|
325
326
|
onClick: (e) => {
|
|
326
|
-
|
|
327
|
+
k.toggleChecked(r, e.nativeEvent);
|
|
327
328
|
},
|
|
328
329
|
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__ */
|
|
330
|
+
children: Z === "mixed" ? /* @__PURE__ */ E(ie, {
|
|
330
331
|
size: 12,
|
|
331
332
|
className: y.selectedLeaf
|
|
332
|
-
}) : Z === "checked" ? /* @__PURE__ */
|
|
333
|
+
}) : Z === "checked" ? /* @__PURE__ */ E(ne, {
|
|
333
334
|
size: 12,
|
|
334
335
|
className: y.selectedLeaf
|
|
335
336
|
}) : null
|
|
336
|
-
}), Je =
|
|
337
|
+
}), Je = k.selectionMode === "single" ? /* @__PURE__ */ E("span", {
|
|
337
338
|
"aria-hidden": "true",
|
|
338
339
|
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__ */
|
|
340
|
-
}) : null, Ye = qe ?? Je, Xe =
|
|
341
|
-
return /* @__PURE__ */
|
|
340
|
+
children: Q && /* @__PURE__ */ E("span", { className: e("block size-2 rounded-full bg-primary", y.selectedLeaf) })
|
|
341
|
+
}) : null, Ye = qe ?? Je, Xe = z || Y && k.checked.has(r);
|
|
342
|
+
return /* @__PURE__ */ D("div", {
|
|
342
343
|
role: "treeitem",
|
|
343
344
|
"aria-selected": Q,
|
|
344
345
|
"aria-current": Be ? !0 : void 0,
|
|
345
346
|
"data-checked": Z === "checked" ? "" : void 0,
|
|
346
347
|
"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 &&
|
|
348
|
-
...
|
|
349
|
-
"aria-labelledby":
|
|
350
|
-
"aria-describedby": te(
|
|
351
|
-
"aria-expanded": J ?
|
|
348
|
+
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 && ve, q && K && ye, ae),
|
|
349
|
+
...O,
|
|
350
|
+
"aria-labelledby": O["aria-labelledby"] ?? (O["aria-label"] === void 0 ? W : void 0),
|
|
351
|
+
"aria-describedby": te(O["aria-describedby"], K ? R : void 0, H?.descriptionId),
|
|
352
|
+
"aria-expanded": J ? P : void 0,
|
|
352
353
|
"aria-checked": Z === void 0 ? void 0 : Z === "mixed" ? "mixed" : Z === "checked",
|
|
353
|
-
tabIndex:
|
|
354
|
+
tabIndex: k.getTabIndex(r),
|
|
354
355
|
"data-roving-value": r,
|
|
355
356
|
"data-selected": Q ? "" : void 0,
|
|
356
357
|
"data-current": Be ? "" : void 0,
|
|
357
358
|
onClick: He,
|
|
358
359
|
onKeyDown: Ue,
|
|
359
|
-
onFocus: (e) => c(
|
|
360
|
-
onBlur: (e) => c(
|
|
361
|
-
ref:
|
|
362
|
-
children: [/* @__PURE__ */
|
|
360
|
+
onFocus: (e) => c(fe, Ge, { checkDefaultPrevented: !1 })(e),
|
|
361
|
+
onBlur: (e) => c(me, Ke, { checkDefaultPrevented: !1 })(e),
|
|
362
|
+
ref: V,
|
|
363
|
+
children: [/* @__PURE__ */ D("div", {
|
|
363
364
|
"data-tree-row": "",
|
|
364
365
|
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)),
|
|
365
366
|
children: [
|
|
366
367
|
Le,
|
|
367
368
|
Ye,
|
|
368
369
|
Ae,
|
|
369
|
-
/* @__PURE__ */
|
|
370
|
-
id:
|
|
370
|
+
/* @__PURE__ */ E("span", {
|
|
371
|
+
id: L,
|
|
371
372
|
"data-tree-label": "",
|
|
372
|
-
"data-roving-text":
|
|
373
|
+
"data-roving-text": _e,
|
|
373
374
|
className: e(u.label, "truncate", (je || K || q) && "min-w-0"),
|
|
374
|
-
children: /* @__PURE__ */
|
|
375
|
+
children: /* @__PURE__ */ E(x.Provider, {
|
|
375
376
|
value: !1,
|
|
376
|
-
children: /* @__PURE__ */
|
|
377
|
+
children: /* @__PURE__ */ E(S.Provider, {
|
|
377
378
|
value: !0,
|
|
378
|
-
children: /* @__PURE__ */
|
|
379
|
+
children: /* @__PURE__ */ E(ce.Provider, {
|
|
379
380
|
value: Te,
|
|
380
381
|
children: Oe
|
|
381
382
|
})
|
|
@@ -383,34 +384,34 @@ var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _,
|
|
|
383
384
|
})
|
|
384
385
|
}),
|
|
385
386
|
je,
|
|
386
|
-
(K || q) && /* @__PURE__ */
|
|
387
|
+
(K || q) && /* @__PURE__ */ D("span", {
|
|
387
388
|
"data-tree-end": "",
|
|
388
|
-
className: e("group/end ms-auto inline-grid shrink-0 items-center gap-1", K && q &&
|
|
389
|
-
children: [K && /* @__PURE__ */
|
|
390
|
-
id:
|
|
389
|
+
className: e("group/end ms-auto inline-grid shrink-0 items-center gap-1", K && q && xe),
|
|
390
|
+
children: [K && /* @__PURE__ */ E("span", {
|
|
391
|
+
id: R,
|
|
391
392
|
"data-tree-aside": "",
|
|
392
|
-
className: e(u.aside, "inline-flex items-center text-caption-1 text-muted-foreground", q &&
|
|
393
|
+
className: e(u.aside, "inline-flex items-center text-caption-1 text-muted-foreground", q && be),
|
|
393
394
|
children: a(g)
|
|
394
|
-
}), q && /* @__PURE__ */
|
|
395
|
+
}), q && /* @__PURE__ */ E(F, {
|
|
395
396
|
labelledBy: W,
|
|
396
|
-
tabStop:
|
|
397
|
-
navigationMode:
|
|
398
|
-
onReturn: () =>
|
|
397
|
+
tabStop: k.navigationMode === "tree" && k.focusedItem === r ? "last-focused" : "none",
|
|
398
|
+
navigationMode: k.navigationMode,
|
|
399
|
+
onReturn: () => k.focusValue(r),
|
|
399
400
|
children: a(_)
|
|
400
401
|
})]
|
|
401
402
|
})
|
|
402
403
|
]
|
|
403
|
-
}), Ne && /* @__PURE__ */
|
|
404
|
+
}), Ne && /* @__PURE__ */ E(C.Provider, {
|
|
404
405
|
value: r,
|
|
405
|
-
children: /* @__PURE__ */
|
|
406
|
+
children: /* @__PURE__ */ E(x.Provider, {
|
|
406
407
|
value: Xe,
|
|
407
|
-
children: /* @__PURE__ */
|
|
408
|
+
children: /* @__PURE__ */ E(S.Provider, {
|
|
408
409
|
value: !1,
|
|
409
|
-
children: /* @__PURE__ */
|
|
410
|
+
children: /* @__PURE__ */ E("div", {
|
|
410
411
|
ref: Pe,
|
|
411
412
|
...Fe,
|
|
412
413
|
className: e(u.collapse, Ie),
|
|
413
|
-
children: /* @__PURE__ */
|
|
414
|
+
children: /* @__PURE__ */ E("div", {
|
|
414
415
|
ref: Me,
|
|
415
416
|
role: "group",
|
|
416
417
|
className: e(u.group, "ps-4"),
|
|
@@ -422,8 +423,8 @@ var F = ({ value: r, icon: l, iconAfter: d, expandIcon: f, aside: g, actions: _,
|
|
|
422
423
|
})]
|
|
423
424
|
});
|
|
424
425
|
};
|
|
425
|
-
|
|
426
|
+
I.displayName = "TreeItem";
|
|
426
427
|
//#endregion
|
|
427
|
-
export {
|
|
428
|
+
export { I as TreeItem, N as TreeRoot };
|
|
428
429
|
|
|
429
430
|
//# sourceMappingURL=Tree.core.mjs.map
|