@salt-ds/lab 1.0.0-alpha.92 → 1.0.0-alpha.94
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/CHANGELOG.md +116 -0
- package/css/salt-lab.css +166 -249
- package/dist-cjs/index.js +6 -24
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +6 -0
- package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +1 -0
- package/dist-cjs/toolbar-next/ToolbarContentNext.js +32 -0
- package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +1 -0
- package/dist-cjs/toolbar-next/ToolbarNext.css.js +6 -0
- package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +1 -0
- package/dist-cjs/toolbar-next/ToolbarNext.js +394 -0
- package/dist-cjs/toolbar-next/ToolbarNext.js.map +1 -0
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +6 -0
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +705 -0
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +1 -0
- package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +165 -0
- package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
- package/dist-cjs/toolbar-next/TooltrayNext.css.js +6 -0
- package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +1 -0
- package/dist-cjs/toolbar-next/TooltrayNext.js +55 -0
- package/dist-cjs/toolbar-next/TooltrayNext.js.map +1 -0
- package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +391 -0
- package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
- package/dist-cjs/toolbar-next/toolbarNextUtils.js +215 -0
- package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +1 -0
- package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +334 -0
- package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
- package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +743 -0
- package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +1 -0
- package/dist-es/index.js +3 -12
- package/dist-es/index.js.map +1 -1
- package/dist-es/toolbar-next/ToolbarContentNext.css.js +4 -0
- package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +1 -0
- package/dist-es/toolbar-next/ToolbarContentNext.js +30 -0
- package/dist-es/toolbar-next/ToolbarContentNext.js.map +1 -0
- package/dist-es/toolbar-next/ToolbarNext.css.js +4 -0
- package/dist-es/toolbar-next/ToolbarNext.css.js.map +1 -0
- package/dist-es/toolbar-next/ToolbarNext.js +392 -0
- package/dist-es/toolbar-next/ToolbarNext.js.map +1 -0
- package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +4 -0
- package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
- package/dist-es/toolbar-next/ToolbarNextOverflow.js +700 -0
- package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +1 -0
- package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +159 -0
- package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
- package/dist-es/toolbar-next/TooltrayNext.css.js +4 -0
- package/dist-es/toolbar-next/TooltrayNext.css.js.map +1 -0
- package/dist-es/toolbar-next/TooltrayNext.js +53 -0
- package/dist-es/toolbar-next/TooltrayNext.js.map +1 -0
- package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +372 -0
- package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
- package/dist-es/toolbar-next/toolbarNextUtils.js +211 -0
- package/dist-es/toolbar-next/toolbarNextUtils.js.map +1 -0
- package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +332 -0
- package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
- package/dist-es/toolbar-next/useToolbarNextOverflow.js +741 -0
- package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +1 -0
- package/dist-types/index.d.ts +1 -2
- package/dist-types/toolbar-next/ToolbarContentNext.d.ts +11 -0
- package/dist-types/toolbar-next/ToolbarNext.d.ts +12 -0
- package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +34 -0
- package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +16 -0
- package/dist-types/toolbar-next/TooltrayNext.d.ts +37 -0
- package/dist-types/toolbar-next/index.d.ts +3 -0
- package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +39 -0
- package/dist-types/toolbar-next/toolbarNextUtils.d.ts +42 -0
- package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +41 -0
- package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +37 -0
- package/package.json +2 -2
- package/dist-cjs/side-panel/SidePanel.css.js +0 -6
- package/dist-cjs/side-panel/SidePanel.css.js.map +0 -1
- package/dist-cjs/side-panel/SidePanel.js +0 -197
- package/dist-cjs/side-panel/SidePanel.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelCloseButton.js +0 -38
- package/dist-cjs/side-panel/SidePanelCloseButton.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelContent.css.js +0 -6
- package/dist-cjs/side-panel/SidePanelContent.css.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelContent.js +0 -66
- package/dist-cjs/side-panel/SidePanelContent.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelHeader.css.js +0 -6
- package/dist-cjs/side-panel/SidePanelHeader.css.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelHeader.js +0 -26
- package/dist-cjs/side-panel/SidePanelHeader.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelProvider.js +0 -78
- package/dist-cjs/side-panel/SidePanelProvider.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelTitle.css.js +0 -6
- package/dist-cjs/side-panel/SidePanelTitle.css.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelTitle.js +0 -48
- package/dist-cjs/side-panel/SidePanelTitle.js.map +0 -1
- package/dist-cjs/side-panel/SidePanelTrigger.js +0 -37
- package/dist-cjs/side-panel/SidePanelTrigger.js.map +0 -1
- package/dist-cjs/side-panel/internal/SidePanelContext.js +0 -32
- package/dist-cjs/side-panel/internal/SidePanelContext.js.map +0 -1
- package/dist-cjs/side-panel/internal/useIsScrollable.js +0 -50
- package/dist-cjs/side-panel/internal/useIsScrollable.js.map +0 -1
- package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js +0 -214
- package/dist-cjs/side-panel/internal/useSidePanelTabOrder.js.map +0 -1
- package/dist-cjs/side-panel/useSidePanel.js +0 -43
- package/dist-cjs/side-panel/useSidePanel.js.map +0 -1
- package/dist-cjs/tree/Tree.css.js +0 -6
- package/dist-cjs/tree/Tree.css.js.map +0 -1
- package/dist-cjs/tree/Tree.js +0 -300
- package/dist-cjs/tree/Tree.js.map +0 -1
- package/dist-cjs/tree/TreeContext.js +0 -31
- package/dist-cjs/tree/TreeContext.js.map +0 -1
- package/dist-cjs/tree/TreeNode.css.js +0 -6
- package/dist-cjs/tree/TreeNode.css.js.map +0 -1
- package/dist-cjs/tree/TreeNode.js +0 -103
- package/dist-cjs/tree/TreeNode.js.map +0 -1
- package/dist-cjs/tree/TreeNodeExpansionIcon.css.js +0 -6
- package/dist-cjs/tree/TreeNodeExpansionIcon.css.js.map +0 -1
- package/dist-cjs/tree/TreeNodeExpansionIcon.js +0 -62
- package/dist-cjs/tree/TreeNodeExpansionIcon.js.map +0 -1
- package/dist-cjs/tree/TreeNodeLabel.css.js +0 -6
- package/dist-cjs/tree/TreeNodeLabel.css.js.map +0 -1
- package/dist-cjs/tree/TreeNodeLabel.js +0 -26
- package/dist-cjs/tree/TreeNodeLabel.js.map +0 -1
- package/dist-cjs/tree/TreeNodeTrigger.css.js +0 -6
- package/dist-cjs/tree/TreeNodeTrigger.css.js.map +0 -1
- package/dist-cjs/tree/TreeNodeTrigger.js +0 -153
- package/dist-cjs/tree/TreeNodeTrigger.js.map +0 -1
- package/dist-cjs/tree/treeModel.js +0 -61
- package/dist-cjs/tree/treeModel.js.map +0 -1
- package/dist-cjs/tree/useTree.js +0 -337
- package/dist-cjs/tree/useTree.js.map +0 -1
- package/dist-es/side-panel/SidePanel.css.js +0 -4
- package/dist-es/side-panel/SidePanel.css.js.map +0 -1
- package/dist-es/side-panel/SidePanel.js +0 -195
- package/dist-es/side-panel/SidePanel.js.map +0 -1
- package/dist-es/side-panel/SidePanelCloseButton.js +0 -36
- package/dist-es/side-panel/SidePanelCloseButton.js.map +0 -1
- package/dist-es/side-panel/SidePanelContent.css.js +0 -4
- package/dist-es/side-panel/SidePanelContent.css.js.map +0 -1
- package/dist-es/side-panel/SidePanelContent.js +0 -64
- package/dist-es/side-panel/SidePanelContent.js.map +0 -1
- package/dist-es/side-panel/SidePanelHeader.css.js +0 -4
- package/dist-es/side-panel/SidePanelHeader.css.js.map +0 -1
- package/dist-es/side-panel/SidePanelHeader.js +0 -24
- package/dist-es/side-panel/SidePanelHeader.js.map +0 -1
- package/dist-es/side-panel/SidePanelProvider.js +0 -76
- package/dist-es/side-panel/SidePanelProvider.js.map +0 -1
- package/dist-es/side-panel/SidePanelTitle.css.js +0 -4
- package/dist-es/side-panel/SidePanelTitle.css.js.map +0 -1
- package/dist-es/side-panel/SidePanelTitle.js +0 -46
- package/dist-es/side-panel/SidePanelTitle.js.map +0 -1
- package/dist-es/side-panel/SidePanelTrigger.js +0 -35
- package/dist-es/side-panel/SidePanelTrigger.js.map +0 -1
- package/dist-es/side-panel/internal/SidePanelContext.js +0 -29
- package/dist-es/side-panel/internal/SidePanelContext.js.map +0 -1
- package/dist-es/side-panel/internal/useIsScrollable.js +0 -48
- package/dist-es/side-panel/internal/useIsScrollable.js.map +0 -1
- package/dist-es/side-panel/internal/useSidePanelTabOrder.js +0 -212
- package/dist-es/side-panel/internal/useSidePanelTabOrder.js.map +0 -1
- package/dist-es/side-panel/useSidePanel.js +0 -41
- package/dist-es/side-panel/useSidePanel.js.map +0 -1
- package/dist-es/tree/Tree.css.js +0 -4
- package/dist-es/tree/Tree.css.js.map +0 -1
- package/dist-es/tree/Tree.js +0 -298
- package/dist-es/tree/Tree.js.map +0 -1
- package/dist-es/tree/TreeContext.js +0 -26
- package/dist-es/tree/TreeContext.js.map +0 -1
- package/dist-es/tree/TreeNode.css.js +0 -4
- package/dist-es/tree/TreeNode.css.js.map +0 -1
- package/dist-es/tree/TreeNode.js +0 -101
- package/dist-es/tree/TreeNode.js.map +0 -1
- package/dist-es/tree/TreeNodeExpansionIcon.css.js +0 -4
- package/dist-es/tree/TreeNodeExpansionIcon.css.js.map +0 -1
- package/dist-es/tree/TreeNodeExpansionIcon.js +0 -60
- package/dist-es/tree/TreeNodeExpansionIcon.js.map +0 -1
- package/dist-es/tree/TreeNodeLabel.css.js +0 -4
- package/dist-es/tree/TreeNodeLabel.css.js.map +0 -1
- package/dist-es/tree/TreeNodeLabel.js +0 -24
- package/dist-es/tree/TreeNodeLabel.js.map +0 -1
- package/dist-es/tree/TreeNodeTrigger.css.js +0 -4
- package/dist-es/tree/TreeNodeTrigger.css.js.map +0 -1
- package/dist-es/tree/TreeNodeTrigger.js +0 -151
- package/dist-es/tree/TreeNodeTrigger.js.map +0 -1
- package/dist-es/tree/treeModel.js +0 -57
- package/dist-es/tree/treeModel.js.map +0 -1
- package/dist-es/tree/useTree.js +0 -335
- package/dist-es/tree/useTree.js.map +0 -1
- package/dist-types/side-panel/SidePanel.d.ts +0 -26
- package/dist-types/side-panel/SidePanelCloseButton.d.ts +0 -2
- package/dist-types/side-panel/SidePanelContent.d.ts +0 -5
- package/dist-types/side-panel/SidePanelHeader.d.ts +0 -5
- package/dist-types/side-panel/SidePanelProvider.d.ts +0 -20
- package/dist-types/side-panel/SidePanelTitle.d.ts +0 -3
- package/dist-types/side-panel/SidePanelTrigger.d.ts +0 -3
- package/dist-types/side-panel/index.d.ts +0 -8
- package/dist-types/side-panel/internal/SidePanelContext.d.ts +0 -52
- package/dist-types/side-panel/internal/index.d.ts +0 -3
- package/dist-types/side-panel/internal/useIsScrollable.d.ts +0 -2
- package/dist-types/side-panel/internal/useSidePanelTabOrder.d.ts +0 -7
- package/dist-types/side-panel/useSidePanel.d.ts +0 -58
- package/dist-types/tree/Tree.d.ts +0 -36
- package/dist-types/tree/TreeContext.d.ts +0 -77
- package/dist-types/tree/TreeNode.d.ts +0 -25
- package/dist-types/tree/TreeNodeExpansionIcon.d.ts +0 -4
- package/dist-types/tree/TreeNodeLabel.d.ts +0 -4
- package/dist-types/tree/TreeNodeTrigger.d.ts +0 -8
- package/dist-types/tree/index.d.ts +0 -4
- package/dist-types/tree/treeModel.d.ts +0 -24
- package/dist-types/tree/useTree.d.ts +0 -68
package/dist-es/tree/useTree.js
DELETED
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
import { useControlled } from '@salt-ds/core';
|
|
2
|
-
import { useMemo, useRef, useCallback, useState, useEffect } from 'react';
|
|
3
|
-
import { buildTreeModel } from './treeModel.js';
|
|
4
|
-
|
|
5
|
-
function arraysEqual(a, b) {
|
|
6
|
-
if (a.length !== b.length) {
|
|
7
|
-
return false;
|
|
8
|
-
}
|
|
9
|
-
return a.every((value, index) => value === b[index]);
|
|
10
|
-
}
|
|
11
|
-
function expandSelectionWithDescendants(selection, model, disabledIds) {
|
|
12
|
-
const expanded = new Set(selection);
|
|
13
|
-
function addDescendants(parentValue) {
|
|
14
|
-
const children = model.childrenOf.get(parentValue) ?? [];
|
|
15
|
-
for (const child of children) {
|
|
16
|
-
if (!disabledIds.has(child)) {
|
|
17
|
-
expanded.add(child);
|
|
18
|
-
addDescendants(child);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
for (const value of selection) {
|
|
23
|
-
addDescendants(value);
|
|
24
|
-
}
|
|
25
|
-
return Array.from(expanded);
|
|
26
|
-
}
|
|
27
|
-
function expandSelectionUpwards(selection, model, disabledIds) {
|
|
28
|
-
const selectedSet = new Set(selection);
|
|
29
|
-
for (const [value, meta] of model.nodes) {
|
|
30
|
-
if (meta.hasChildren && !selectedSet.has(value) && !disabledIds.has(value)) {
|
|
31
|
-
const children = model.childrenOf.get(value) ?? [];
|
|
32
|
-
const enabledChildren = children.filter((c) => !disabledIds.has(c));
|
|
33
|
-
if (enabledChildren.length > 0 && enabledChildren.every((c) => selectedSet.has(c))) {
|
|
34
|
-
selectedSet.add(value);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return Array.from(selectedSet);
|
|
39
|
-
}
|
|
40
|
-
function useTree(props) {
|
|
41
|
-
const {
|
|
42
|
-
defaultExpanded = [],
|
|
43
|
-
expanded: expandedProp,
|
|
44
|
-
onExpandedChange,
|
|
45
|
-
defaultSelected = [],
|
|
46
|
-
selected: selectedProp,
|
|
47
|
-
onSelectionChange,
|
|
48
|
-
multiselect = false,
|
|
49
|
-
disabled = false,
|
|
50
|
-
children
|
|
51
|
-
} = props;
|
|
52
|
-
const clampedDefaultSelected = multiselect ? defaultSelected : defaultSelected.slice(0, 1);
|
|
53
|
-
const clampedSelectedProp = selectedProp && !multiselect ? selectedProp.slice(0, 1) : selectedProp;
|
|
54
|
-
const treeModel = useMemo(() => buildTreeModel(children), [children]);
|
|
55
|
-
const elementsRef = useRef(/* @__PURE__ */ new Map());
|
|
56
|
-
const suppressUncontrolledSelectionExpansionRef = useRef(false);
|
|
57
|
-
const disabledIdsSet = useMemo(() => {
|
|
58
|
-
const set = /* @__PURE__ */ new Set();
|
|
59
|
-
for (const [value, meta] of treeModel.nodes) {
|
|
60
|
-
if (meta.disabled) set.add(value);
|
|
61
|
-
}
|
|
62
|
-
return set;
|
|
63
|
-
}, [treeModel]);
|
|
64
|
-
const [expandedArray, setExpandedArray] = useControlled({
|
|
65
|
-
controlled: expandedProp,
|
|
66
|
-
default: defaultExpanded,
|
|
67
|
-
name: "Tree",
|
|
68
|
-
state: "expanded"
|
|
69
|
-
});
|
|
70
|
-
const expandedState = useMemo(() => new Set(expandedArray), [expandedArray]);
|
|
71
|
-
const expandedDefaultSelected = useMemo(() => {
|
|
72
|
-
if (!multiselect || clampedDefaultSelected.length === 0) {
|
|
73
|
-
return clampedDefaultSelected;
|
|
74
|
-
}
|
|
75
|
-
let expanded = expandSelectionWithDescendants(
|
|
76
|
-
clampedDefaultSelected,
|
|
77
|
-
treeModel,
|
|
78
|
-
disabledIdsSet
|
|
79
|
-
);
|
|
80
|
-
expanded = expandSelectionUpwards(expanded, treeModel, disabledIdsSet);
|
|
81
|
-
return expanded;
|
|
82
|
-
}, [clampedDefaultSelected, treeModel, disabledIdsSet, multiselect]);
|
|
83
|
-
const [selectedState, setSelectedState, selectedControlled] = useControlled({
|
|
84
|
-
controlled: clampedSelectedProp,
|
|
85
|
-
default: expandedDefaultSelected,
|
|
86
|
-
name: "Tree",
|
|
87
|
-
state: "selected"
|
|
88
|
-
});
|
|
89
|
-
const setVisibleSelectionState = useCallback((selection) => {
|
|
90
|
-
suppressUncontrolledSelectionExpansionRef.current = true;
|
|
91
|
-
setSelectedState(selection);
|
|
92
|
-
}, []);
|
|
93
|
-
const selectedSet = useMemo(() => new Set(selectedState), [selectedState]);
|
|
94
|
-
const [activeNode, setActiveNode] = useState(void 0);
|
|
95
|
-
const registerElement = useCallback((value, element) => {
|
|
96
|
-
elementsRef.current.set(value, element);
|
|
97
|
-
return () => {
|
|
98
|
-
if (elementsRef.current.get(value) === element) {
|
|
99
|
-
elementsRef.current.delete(value);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
}, []);
|
|
103
|
-
const getElement = useCallback((value) => {
|
|
104
|
-
return elementsRef.current.get(value);
|
|
105
|
-
}, []);
|
|
106
|
-
const getNodeMeta = useCallback(
|
|
107
|
-
(value) => {
|
|
108
|
-
return treeModel.nodes.get(value);
|
|
109
|
-
},
|
|
110
|
-
[treeModel]
|
|
111
|
-
);
|
|
112
|
-
const getParent = useCallback(
|
|
113
|
-
(value) => {
|
|
114
|
-
var _a;
|
|
115
|
-
return (_a = treeModel.nodes.get(value)) == null ? void 0 : _a.parentValue;
|
|
116
|
-
},
|
|
117
|
-
[treeModel]
|
|
118
|
-
);
|
|
119
|
-
const getChildren = useCallback(
|
|
120
|
-
(parentValue) => {
|
|
121
|
-
return treeModel.childrenOf.get(parentValue) ?? [];
|
|
122
|
-
},
|
|
123
|
-
[treeModel]
|
|
124
|
-
);
|
|
125
|
-
const getDescendants = useCallback(
|
|
126
|
-
(value) => {
|
|
127
|
-
const descendants = [];
|
|
128
|
-
function traverse(parentValue) {
|
|
129
|
-
const children2 = treeModel.childrenOf.get(parentValue) ?? [];
|
|
130
|
-
for (const child of children2) {
|
|
131
|
-
if (!disabledIdsSet.has(child)) {
|
|
132
|
-
descendants.push(child);
|
|
133
|
-
traverse(child);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
traverse(value);
|
|
138
|
-
return descendants;
|
|
139
|
-
},
|
|
140
|
-
[treeModel, disabledIdsSet]
|
|
141
|
-
);
|
|
142
|
-
const getAncestors = useCallback(
|
|
143
|
-
(value) => {
|
|
144
|
-
var _a, _b;
|
|
145
|
-
const ancestors = [];
|
|
146
|
-
let current = (_a = treeModel.nodes.get(value)) == null ? void 0 : _a.parentValue;
|
|
147
|
-
while (current) {
|
|
148
|
-
ancestors.push(current);
|
|
149
|
-
current = (_b = treeModel.nodes.get(current)) == null ? void 0 : _b.parentValue;
|
|
150
|
-
}
|
|
151
|
-
return ancestors;
|
|
152
|
-
},
|
|
153
|
-
[treeModel]
|
|
154
|
-
);
|
|
155
|
-
const toggleExpanded = useCallback(
|
|
156
|
-
(event, value) => {
|
|
157
|
-
const isExpanding = !expandedState.has(value);
|
|
158
|
-
const newExpanded = isExpanding ? [...expandedArray, value] : expandedArray.filter((v) => v !== value);
|
|
159
|
-
setExpandedArray(newExpanded);
|
|
160
|
-
onExpandedChange == null ? void 0 : onExpandedChange(event, newExpanded);
|
|
161
|
-
},
|
|
162
|
-
[expandedArray, expandedState, onExpandedChange]
|
|
163
|
-
);
|
|
164
|
-
const calculateIndeterminateState = useCallback(
|
|
165
|
-
(selected) => {
|
|
166
|
-
const indeterminate = /* @__PURE__ */ new Set();
|
|
167
|
-
const selectedSet2 = new Set(selected);
|
|
168
|
-
for (const selectedValue of selected) {
|
|
169
|
-
let current = getParent(selectedValue);
|
|
170
|
-
while (current) {
|
|
171
|
-
const children2 = getChildren(current);
|
|
172
|
-
const enabledChildren = children2.filter(
|
|
173
|
-
(child) => !disabledIdsSet.has(child)
|
|
174
|
-
);
|
|
175
|
-
if (enabledChildren.length === 0) {
|
|
176
|
-
current = getParent(current);
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
const selectedChildren = enabledChildren.filter(
|
|
180
|
-
(child) => selectedSet2.has(child)
|
|
181
|
-
);
|
|
182
|
-
const allChildrenSelected = selectedChildren.length === enabledChildren.length;
|
|
183
|
-
const someChildrenSelected = selectedChildren.length > 0;
|
|
184
|
-
const someChildrenIndeterminate = enabledChildren.some(
|
|
185
|
-
(child) => indeterminate.has(child)
|
|
186
|
-
);
|
|
187
|
-
if (someChildrenIndeterminate || someChildrenSelected && !allChildrenSelected) {
|
|
188
|
-
indeterminate.add(current);
|
|
189
|
-
}
|
|
190
|
-
current = getParent(current);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return indeterminate;
|
|
194
|
-
},
|
|
195
|
-
[getParent, getChildren, disabledIdsSet]
|
|
196
|
-
);
|
|
197
|
-
const indeterminateState = useMemo(() => {
|
|
198
|
-
const state = multiselect ? calculateIndeterminateState(selectedState) : /* @__PURE__ */ new Set();
|
|
199
|
-
return state;
|
|
200
|
-
}, [multiselect, selectedState, calculateIndeterminateState]);
|
|
201
|
-
useEffect(() => {
|
|
202
|
-
if (suppressUncontrolledSelectionExpansionRef.current) {
|
|
203
|
-
suppressUncontrolledSelectionExpansionRef.current = false;
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
if (selectedControlled || !multiselect || selectedState.length === 0) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
let expanded = expandSelectionWithDescendants(
|
|
210
|
-
selectedState,
|
|
211
|
-
treeModel,
|
|
212
|
-
disabledIdsSet
|
|
213
|
-
);
|
|
214
|
-
expanded = expandSelectionUpwards(expanded, treeModel, disabledIdsSet);
|
|
215
|
-
if (!arraysEqual(selectedState, expanded)) {
|
|
216
|
-
setSelectedState(expanded);
|
|
217
|
-
}
|
|
218
|
-
}, [
|
|
219
|
-
selectedControlled,
|
|
220
|
-
multiselect,
|
|
221
|
-
selectedState,
|
|
222
|
-
treeModel,
|
|
223
|
-
disabledIdsSet
|
|
224
|
-
]);
|
|
225
|
-
const updateAncestors = (currentSet, value) => {
|
|
226
|
-
const ancestors = getAncestors(value);
|
|
227
|
-
for (const ancestor of ancestors) {
|
|
228
|
-
const children2 = treeModel.childrenOf.get(ancestor) ?? [];
|
|
229
|
-
const enabledChildren = children2.filter(
|
|
230
|
-
(child) => !disabledIdsSet.has(child)
|
|
231
|
-
);
|
|
232
|
-
if (enabledChildren.length === 0) continue;
|
|
233
|
-
const allSelected = enabledChildren.every(
|
|
234
|
-
(child) => currentSet.has(child)
|
|
235
|
-
);
|
|
236
|
-
if (allSelected) {
|
|
237
|
-
currentSet.add(ancestor);
|
|
238
|
-
} else {
|
|
239
|
-
currentSet.delete(ancestor);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
return Array.from(currentSet);
|
|
243
|
-
};
|
|
244
|
-
const getMultiSelectState = (value) => {
|
|
245
|
-
const currentSet = new Set(selectedState);
|
|
246
|
-
const descendants = getDescendants(value);
|
|
247
|
-
if (currentSet.has(value)) {
|
|
248
|
-
currentSet.delete(value);
|
|
249
|
-
const descendantSet = new Set(descendants);
|
|
250
|
-
for (const d of descendantSet) {
|
|
251
|
-
currentSet.delete(d);
|
|
252
|
-
}
|
|
253
|
-
} else {
|
|
254
|
-
currentSet.add(value);
|
|
255
|
-
for (const d of descendants) {
|
|
256
|
-
if (!currentSet.has(d)) {
|
|
257
|
-
currentSet.add(d);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return updateAncestors(currentSet, value);
|
|
262
|
-
};
|
|
263
|
-
const select = useCallback(
|
|
264
|
-
(event, value) => {
|
|
265
|
-
if (disabled || disabledIdsSet.has(value)) return;
|
|
266
|
-
let newSelected;
|
|
267
|
-
if (multiselect) {
|
|
268
|
-
newSelected = getMultiSelectState(value);
|
|
269
|
-
} else {
|
|
270
|
-
const isCurrentlySelected = selectedSet.has(value);
|
|
271
|
-
newSelected = isCurrentlySelected ? [] : [value];
|
|
272
|
-
}
|
|
273
|
-
setSelectedState(newSelected);
|
|
274
|
-
onSelectionChange == null ? void 0 : onSelectionChange(event, newSelected);
|
|
275
|
-
},
|
|
276
|
-
[disabled, disabledIdsSet, multiselect, selectedState, onSelectionChange]
|
|
277
|
-
);
|
|
278
|
-
const visibleNodes = useMemo(() => {
|
|
279
|
-
const visible = [];
|
|
280
|
-
function traverse(values) {
|
|
281
|
-
for (const value of values) {
|
|
282
|
-
visible.push(value);
|
|
283
|
-
const nodeMeta = treeModel.nodes.get(value);
|
|
284
|
-
if ((nodeMeta == null ? void 0 : nodeMeta.hasChildren) && expandedState.has(value)) {
|
|
285
|
-
const children2 = treeModel.childrenOf.get(value) ?? [];
|
|
286
|
-
traverse(children2);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
traverse(treeModel.rootValues);
|
|
291
|
-
return visible;
|
|
292
|
-
}, [treeModel, expandedState]);
|
|
293
|
-
const tabbableNodeId = useMemo(() => {
|
|
294
|
-
if (activeNode) {
|
|
295
|
-
return activeNode;
|
|
296
|
-
}
|
|
297
|
-
const firstSelectedVisible = visibleNodes.find(
|
|
298
|
-
(node) => selectedSet.has(node)
|
|
299
|
-
);
|
|
300
|
-
if (firstSelectedVisible !== void 0) {
|
|
301
|
-
return firstSelectedVisible;
|
|
302
|
-
}
|
|
303
|
-
return visibleNodes[0];
|
|
304
|
-
}, [activeNode, selectedSet, visibleNodes]);
|
|
305
|
-
return {
|
|
306
|
-
expandedArray,
|
|
307
|
-
setExpandedArray,
|
|
308
|
-
expandedState,
|
|
309
|
-
toggleExpanded,
|
|
310
|
-
selectedState,
|
|
311
|
-
selectedSet,
|
|
312
|
-
setSelectedState,
|
|
313
|
-
setVisibleSelectionState,
|
|
314
|
-
select,
|
|
315
|
-
multiselect,
|
|
316
|
-
disabled,
|
|
317
|
-
disabledIdsSet,
|
|
318
|
-
treeModel,
|
|
319
|
-
getNodeMeta,
|
|
320
|
-
getParent,
|
|
321
|
-
getChildren,
|
|
322
|
-
getDescendants,
|
|
323
|
-
getAncestors,
|
|
324
|
-
visibleNodes,
|
|
325
|
-
tabbableNodeId,
|
|
326
|
-
registerElement,
|
|
327
|
-
getElement,
|
|
328
|
-
activeNode,
|
|
329
|
-
setActiveNode,
|
|
330
|
-
indeterminateState
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
export { useTree };
|
|
335
|
-
//# sourceMappingURL=useTree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTree.js","sources":["../src/tree/useTree.ts"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport {\n type ReactNode,\n type SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { buildTreeModel, type TreeModel, type TreeNodeMeta } from \"./treeModel\";\n\nexport type { TreeModel, TreeNodeMeta } from \"./treeModel\";\n\nexport interface UseTreeProps {\n /**\n * Default expanded nodes (uncontrolled)\n */\n defaultExpanded?: string[];\n /**\n * Expanded nodes (controlled)\n */\n expanded?: string[];\n /**\n * Callback on expanded nodes change\n */\n onExpandedChange?: (event: SyntheticEvent, expanded: string[]) => void;\n /**\n * Default selected nodes (uncontrolled)\n */\n defaultSelected?: string[];\n /**\n * Selected nodes\n */\n selected?: string[];\n /**\n * Callback on selected nodes change\n */\n onSelectionChange?: (event: SyntheticEvent, selected: string[]) => void;\n /**\n * Sets multiselect mode with checkboxes and allows for multiple node selection\n */\n multiselect?: boolean;\n /**\n * Sets tree to disabled state, preventing all interaction\n */\n disabled?: boolean;\n /**\n * Tree children used to build the tree model for traversal an state management\n */\n children?: ReactNode;\n}\n\nfunction arraysEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n return a.every((value, index) => value === b[index]);\n}\n\nfunction expandSelectionWithDescendants(\n selection: string[],\n model: TreeModel,\n disabledIds: Set<string>,\n): string[] {\n const expanded = new Set(selection);\n\n function addDescendants(parentValue: string): void {\n const children = model.childrenOf.get(parentValue) ?? [];\n for (const child of children) {\n if (!disabledIds.has(child)) {\n expanded.add(child);\n addDescendants(child);\n }\n }\n }\n\n for (const value of selection) {\n addDescendants(value);\n }\n\n return Array.from(expanded);\n}\n\nfunction expandSelectionUpwards(\n selection: string[],\n model: TreeModel,\n disabledIds: Set<string>,\n): string[] {\n const selectedSet = new Set(selection);\n\n for (const [value, meta] of model.nodes) {\n if (\n meta.hasChildren &&\n !selectedSet.has(value) &&\n !disabledIds.has(value)\n ) {\n const children = model.childrenOf.get(value) ?? [];\n const enabledChildren = children.filter((c) => !disabledIds.has(c));\n\n if (\n enabledChildren.length > 0 &&\n enabledChildren.every((c) => selectedSet.has(c))\n ) {\n selectedSet.add(value);\n }\n }\n }\n\n return Array.from(selectedSet);\n}\n\nexport function useTree(props: UseTreeProps) {\n const {\n defaultExpanded = [],\n expanded: expandedProp,\n onExpandedChange,\n defaultSelected = [],\n selected: selectedProp,\n onSelectionChange,\n multiselect = false,\n disabled = false,\n children,\n } = props;\n\n const clampedDefaultSelected = multiselect\n ? defaultSelected\n : defaultSelected.slice(0, 1);\n\n const clampedSelectedProp =\n selectedProp && !multiselect ? selectedProp.slice(0, 1) : selectedProp;\n\n const treeModel = useMemo(() => buildTreeModel(children), [children]);\n const elementsRef = useRef<Map<string, HTMLElement>>(new Map());\n const suppressUncontrolledSelectionExpansionRef = useRef(false);\n\n const disabledIdsSet = useMemo(() => {\n const set = new Set<string>();\n for (const [value, meta] of treeModel.nodes) {\n if (meta.disabled) set.add(value);\n }\n return set;\n }, [treeModel]);\n\n const [expandedArray, setExpandedArray] = useControlled({\n controlled: expandedProp,\n default: defaultExpanded,\n name: \"Tree\",\n state: \"expanded\",\n });\n\n // Convert array to Set for more efficient lookups during rendering and nav\n const expandedState = useMemo(() => new Set(expandedArray), [expandedArray]);\n\n const expandedDefaultSelected = useMemo(() => {\n if (!multiselect || clampedDefaultSelected.length === 0) {\n return clampedDefaultSelected;\n }\n\n let expanded = expandSelectionWithDescendants(\n clampedDefaultSelected,\n treeModel,\n disabledIdsSet,\n );\n\n expanded = expandSelectionUpwards(expanded, treeModel, disabledIdsSet);\n\n return expanded;\n }, [clampedDefaultSelected, treeModel, disabledIdsSet, multiselect]);\n\n const [selectedState, setSelectedState, selectedControlled] = useControlled({\n controlled: clampedSelectedProp,\n default: expandedDefaultSelected,\n name: \"Tree\",\n state: \"selected\",\n });\n\n const setVisibleSelectionState = useCallback((selection: string[]) => {\n suppressUncontrolledSelectionExpansionRef.current = true;\n setSelectedState(selection);\n }, []);\n\n const selectedSet = useMemo(() => new Set(selectedState), [selectedState]);\n\n const [activeNode, setActiveNode] = useState<string | undefined>(undefined);\n\n const registerElement = useCallback((value: string, element: HTMLElement) => {\n elementsRef.current.set(value, element);\n\n return () => {\n if (elementsRef.current.get(value) === element) {\n elementsRef.current.delete(value);\n }\n };\n }, []);\n\n const getElement = useCallback((value: string): HTMLElement | undefined => {\n return elementsRef.current.get(value);\n }, []);\n\n const getNodeMeta = useCallback(\n (value: string): TreeNodeMeta | undefined => {\n return treeModel.nodes.get(value);\n },\n [treeModel],\n );\n\n const getParent = useCallback(\n (value: string): string | undefined => {\n return treeModel.nodes.get(value)?.parentValue;\n },\n [treeModel],\n );\n\n const getChildren = useCallback(\n (parentValue: string): string[] => {\n return treeModel.childrenOf.get(parentValue) ?? [];\n },\n [treeModel],\n );\n\n // Depth-first search (with pre-order traversal)\n const getDescendants = useCallback(\n (value: string): string[] => {\n const descendants: string[] = [];\n\n function traverse(parentValue: string): void {\n const children = treeModel.childrenOf.get(parentValue) ?? [];\n for (const child of children) {\n if (!disabledIdsSet.has(child)) {\n descendants.push(child);\n traverse(child);\n }\n }\n }\n\n traverse(value);\n return descendants;\n },\n [treeModel, disabledIdsSet],\n );\n\n const getAncestors = useCallback(\n (value: string): string[] => {\n const ancestors: string[] = [];\n let current = treeModel.nodes.get(value)?.parentValue;\n\n while (current) {\n ancestors.push(current);\n current = treeModel.nodes.get(current)?.parentValue;\n }\n\n return ancestors;\n },\n [treeModel],\n );\n\n const toggleExpanded = useCallback(\n (event: SyntheticEvent, value: string) => {\n const isExpanding = !expandedState.has(value);\n const newExpanded = isExpanding\n ? [...expandedArray, value]\n : expandedArray.filter((v) => v !== value);\n\n setExpandedArray(newExpanded);\n onExpandedChange?.(event, newExpanded);\n },\n [expandedArray, expandedState, onExpandedChange],\n );\n\n const calculateIndeterminateState = useCallback(\n (selected: string[]): Set<string> => {\n const indeterminate = new Set<string>();\n const selectedSet = new Set(selected);\n\n for (const selectedValue of selected) {\n let current = getParent(selectedValue);\n\n while (current) {\n const children = getChildren(current);\n const enabledChildren = children.filter(\n (child) => !disabledIdsSet.has(child),\n );\n\n if (enabledChildren.length === 0) {\n current = getParent(current);\n continue;\n }\n\n const selectedChildren = enabledChildren.filter((child) =>\n selectedSet.has(child),\n );\n const allChildrenSelected =\n selectedChildren.length === enabledChildren.length;\n const someChildrenSelected = selectedChildren.length > 0;\n\n const someChildrenIndeterminate = enabledChildren.some((child) =>\n indeterminate.has(child),\n );\n\n if (\n someChildrenIndeterminate ||\n (someChildrenSelected && !allChildrenSelected)\n ) {\n indeterminate.add(current);\n }\n\n current = getParent(current);\n }\n }\n\n return indeterminate;\n },\n [getParent, getChildren, disabledIdsSet],\n );\n\n const indeterminateState = useMemo(() => {\n const state = multiselect\n ? calculateIndeterminateState(selectedState)\n : new Set<string>();\n return state;\n }, [multiselect, selectedState, calculateIndeterminateState]);\n\n useEffect(() => {\n if (suppressUncontrolledSelectionExpansionRef.current) {\n suppressUncontrolledSelectionExpansionRef.current = false;\n return;\n }\n\n if (selectedControlled || !multiselect || selectedState.length === 0) {\n return;\n }\n\n let expanded = expandSelectionWithDescendants(\n selectedState,\n treeModel,\n disabledIdsSet,\n );\n expanded = expandSelectionUpwards(expanded, treeModel, disabledIdsSet);\n\n if (!arraysEqual(selectedState, expanded)) {\n setSelectedState(expanded);\n }\n }, [\n selectedControlled,\n multiselect,\n selectedState,\n treeModel,\n disabledIdsSet,\n ]);\n\n const updateAncestors = (\n currentSet: Set<string>,\n value: string,\n ): string[] => {\n const ancestors = getAncestors(value);\n\n for (const ancestor of ancestors) {\n const children = treeModel.childrenOf.get(ancestor) ?? [];\n const enabledChildren = children.filter(\n (child) => !disabledIdsSet.has(child),\n );\n\n if (enabledChildren.length === 0) continue;\n\n const allSelected = enabledChildren.every((child) =>\n currentSet.has(child),\n );\n\n if (allSelected) {\n currentSet.add(ancestor);\n } else {\n currentSet.delete(ancestor);\n }\n }\n\n return Array.from(currentSet);\n };\n\n const getMultiSelectState = (value: string) => {\n const currentSet = new Set(selectedState);\n const descendants = getDescendants(value);\n\n if (currentSet.has(value)) {\n currentSet.delete(value);\n const descendantSet = new Set(descendants);\n for (const d of descendantSet) {\n currentSet.delete(d);\n }\n } else {\n currentSet.add(value);\n for (const d of descendants) {\n if (!currentSet.has(d)) {\n currentSet.add(d);\n }\n }\n }\n\n return updateAncestors(currentSet, value);\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: getMultiSelectState/updateAncestors are intentionally not memoized - their captured values (selectedState, treeModel, etc.) are already in deps\n const select = useCallback(\n (event: SyntheticEvent, value: string) => {\n if (disabled || disabledIdsSet.has(value)) return;\n\n let newSelected: string[];\n\n if (multiselect) {\n newSelected = getMultiSelectState(value);\n } else {\n const isCurrentlySelected = selectedSet.has(value);\n newSelected = isCurrentlySelected ? [] : [value];\n }\n\n setSelectedState(newSelected);\n onSelectionChange?.(event, newSelected);\n },\n [disabled, disabledIdsSet, multiselect, selectedState, onSelectionChange],\n );\n\n // Visible nodes in depth-first order matching visual tree order\n const visibleNodes = useMemo((): string[] => {\n const visible: string[] = [];\n\n function traverse(values: string[]): void {\n for (const value of values) {\n visible.push(value);\n\n const nodeMeta = treeModel.nodes.get(value);\n if (nodeMeta?.hasChildren && expandedState.has(value)) {\n const children = treeModel.childrenOf.get(value) ?? [];\n traverse(children);\n }\n }\n }\n\n traverse(treeModel.rootValues);\n return visible;\n }, [treeModel, expandedState]);\n\n const tabbableNodeId = useMemo((): string | undefined => {\n if (activeNode) {\n return activeNode;\n }\n\n const firstSelectedVisible = visibleNodes.find((node) =>\n selectedSet.has(node),\n );\n\n if (firstSelectedVisible !== undefined) {\n return firstSelectedVisible;\n }\n\n return visibleNodes[0];\n }, [activeNode, selectedSet, visibleNodes]);\n\n return {\n expandedArray,\n setExpandedArray,\n expandedState,\n toggleExpanded,\n selectedState,\n selectedSet,\n setSelectedState,\n setVisibleSelectionState,\n select,\n multiselect,\n disabled,\n disabledIdsSet,\n treeModel,\n getNodeMeta,\n getParent,\n getChildren,\n getDescendants,\n getAncestors,\n visibleNodes,\n tabbableNodeId,\n registerElement,\n getElement,\n activeNode,\n setActiveNode,\n indeterminateState,\n };\n}\n"],"names":["children","selectedSet"],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type ComponentPropsWithRef, type RefObject } from "react";
|
|
2
|
-
export interface SidePanelProps extends ComponentPropsWithRef<"div"> {
|
|
3
|
-
/**
|
|
4
|
-
* Disable the panel's own open/close animation.
|
|
5
|
-
* Set to `true` when the parent controls sizing and animation (e.g. inside a splitter).
|
|
6
|
-
* @default false
|
|
7
|
-
*/
|
|
8
|
-
disableAnimation?: boolean;
|
|
9
|
-
/**
|
|
10
|
-
* Edge the panel is anchored to; controls animation direction and divider side.
|
|
11
|
-
* @default "right"
|
|
12
|
-
*/
|
|
13
|
-
position?: "right" | "left";
|
|
14
|
-
/**
|
|
15
|
-
* Which element receives focus when the panel opens.
|
|
16
|
-
* Pass a number for the tabbable element index (0 = first), or a ref to a specific element.
|
|
17
|
-
* Defaults to the first tabbable element inside the panel (close button if present).
|
|
18
|
-
*/
|
|
19
|
-
initialFocus?: number | RefObject<HTMLElement | null>;
|
|
20
|
-
/**
|
|
21
|
-
* The background color palette. Options are 'primary', 'secondary', 'tertiary' and 'none'.
|
|
22
|
-
* @default "primary"
|
|
23
|
-
*/
|
|
24
|
-
variant?: "primary" | "secondary" | "tertiary" | "none";
|
|
25
|
-
}
|
|
26
|
-
export declare const SidePanel: import("react").ForwardRefExoticComponent<Omit<SidePanelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type ComponentPropsWithRef } from "react";
|
|
2
|
-
export type SidePanelContentProps = ComponentPropsWithRef<"div">;
|
|
3
|
-
export declare const SidePanelContent: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
4
|
-
ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
5
|
-
}, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type ComponentPropsWithRef } from "react";
|
|
2
|
-
export type SidePanelHeaderProps = ComponentPropsWithRef<"div">;
|
|
3
|
-
export declare const SidePanelHeader: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
4
|
-
ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
5
|
-
}, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type ReactNode } from "react";
|
|
2
|
-
export interface SidePanelProviderProps {
|
|
3
|
-
/**
|
|
4
|
-
* Whether the panel is open.
|
|
5
|
-
*/
|
|
6
|
-
open?: boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Default open state when initially rendered.
|
|
9
|
-
*/
|
|
10
|
-
defaultOpen?: boolean;
|
|
11
|
-
/**
|
|
12
|
-
* Callback when open state changes.
|
|
13
|
-
*/
|
|
14
|
-
onOpenChange?: (open: boolean) => void;
|
|
15
|
-
/**
|
|
16
|
-
* SidePanelProvider children, should include SidePanel and SidePanelTrigger.
|
|
17
|
-
*/
|
|
18
|
-
children: ReactNode;
|
|
19
|
-
}
|
|
20
|
-
export declare function SidePanelProvider(props: SidePanelProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { type ComponentPropsWithoutRef } from "react";
|
|
2
|
-
export type SidePanelTriggerProps = ComponentPropsWithoutRef<"button">;
|
|
3
|
-
export declare const SidePanelTrigger: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export * from "./SidePanel";
|
|
2
|
-
export * from "./SidePanelCloseButton";
|
|
3
|
-
export * from "./SidePanelContent";
|
|
4
|
-
export * from "./SidePanelHeader";
|
|
5
|
-
export * from "./SidePanelProvider";
|
|
6
|
-
export * from "./SidePanelTitle";
|
|
7
|
-
export * from "./SidePanelTrigger";
|
|
8
|
-
export * from "./useSidePanel";
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { FloatingRootContext } from "@floating-ui/react";
|
|
2
|
-
import { type Dispatch, type SetStateAction } from "react";
|
|
3
|
-
export interface SidePanelContextValue {
|
|
4
|
-
/**
|
|
5
|
-
* Whether the side panel is currently open.
|
|
6
|
-
*/
|
|
7
|
-
openState: boolean;
|
|
8
|
-
/**
|
|
9
|
-
* The floating-ui root context shared between the trigger and the panel.
|
|
10
|
-
* Coordinates interactions (click, dismiss, role) across both elements.
|
|
11
|
-
*/
|
|
12
|
-
floatingRootContext: FloatingRootContext;
|
|
13
|
-
/**
|
|
14
|
-
* Ref setter for the panel element.
|
|
15
|
-
* Registers the panel DOM node with floating-ui.
|
|
16
|
-
*/
|
|
17
|
-
setFloating: Dispatch<SetStateAction<HTMLDivElement | null>>;
|
|
18
|
-
/**
|
|
19
|
-
* Ref setter for the reference (trigger) element.
|
|
20
|
-
* Registers the trigger DOM node with floating-ui for focus return.
|
|
21
|
-
*/
|
|
22
|
-
setReference: Dispatch<SetStateAction<HTMLElement | null>>;
|
|
23
|
-
/**
|
|
24
|
-
* Sets the open state of the panel.
|
|
25
|
-
* Called by the close button in SidePanelHeader, or any consumer that needs to close the panel.
|
|
26
|
-
*/
|
|
27
|
-
setOpen: (open: boolean) => void;
|
|
28
|
-
/**
|
|
29
|
-
* Side panel id used for aria-controls on the trigger.
|
|
30
|
-
*/
|
|
31
|
-
panelId?: string;
|
|
32
|
-
/**
|
|
33
|
-
* Registers or clears the side panel id used for aria-controls/id linkage.
|
|
34
|
-
*/
|
|
35
|
-
setPanelId: Dispatch<SetStateAction<string | undefined>>;
|
|
36
|
-
/**
|
|
37
|
-
* The auto-generated id placed on SidePanelTitle.
|
|
38
|
-
* Used for aria-labelledby on the panel region and the scrollable body.
|
|
39
|
-
*/
|
|
40
|
-
titleId?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Registers the title id from SidePanelTitle back to the context
|
|
43
|
-
* so that SidePanel and SidePanelContent can use it for aria-labelledby.
|
|
44
|
-
*/
|
|
45
|
-
setTitleId: Dispatch<SetStateAction<string | undefined>>;
|
|
46
|
-
/**
|
|
47
|
-
* Edge the panel is anchored to. Set by SidePanel for its own subtree.
|
|
48
|
-
*/
|
|
49
|
-
position?: "right" | "left";
|
|
50
|
-
}
|
|
51
|
-
export declare const SidePanelContext: import("react").Context<SidePanelContextValue>;
|
|
52
|
-
export declare function useSidePanelContext(): SidePanelContextValue;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithoutRef, MouseEvent, MutableRefObject, RefCallback } from "react";
|
|
2
|
-
export interface SidePanelTriggerExtraProps {
|
|
3
|
-
/**
|
|
4
|
-
* Optional ref to forward alongside the focus-return registration.
|
|
5
|
-
*/
|
|
6
|
-
ref?: RefCallback<HTMLElement | null> | MutableRefObject<HTMLElement | null> | null;
|
|
7
|
-
/**
|
|
8
|
-
* Click handler. Runs before the built-in toggle so consumers can
|
|
9
|
-
* preventDefault to skip the toggle.
|
|
10
|
-
*/
|
|
11
|
-
onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
12
|
-
}
|
|
13
|
-
export type SidePanelTriggerPropsResult = ComponentPropsWithoutRef<"button"> & {
|
|
14
|
-
"aria-expanded": boolean;
|
|
15
|
-
"aria-controls": string | undefined;
|
|
16
|
-
ref: RefCallback<HTMLElement | null>;
|
|
17
|
-
};
|
|
18
|
-
export interface SidePanelValue {
|
|
19
|
-
/**
|
|
20
|
-
* Whether the side panel is currently open.
|
|
21
|
-
*/
|
|
22
|
-
openState: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Sets the open state of the panel.
|
|
25
|
-
*/
|
|
26
|
-
setOpen: (open: boolean) => void;
|
|
27
|
-
/**
|
|
28
|
-
* Props getter for a trigger element outside of `SidePanelTrigger`.
|
|
29
|
-
* Returns `aria-expanded`, `aria-controls`, a `ref` (for focus-return),
|
|
30
|
-
* and an `onClick` that toggles the panel.
|
|
31
|
-
*
|
|
32
|
-
* Spread the result onto a Button to get full trigger behavior:
|
|
33
|
-
* ```tsx
|
|
34
|
-
* <Button {...getTriggerProps()}>Toggle panel</Button>
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* You can pass additional props which are merged in. If you provide your
|
|
38
|
-
* own `onClick`, it runs before the built-in toggle. If you provide your
|
|
39
|
-
* own `ref`, it is forwarded alongside the internal focus-return ref.
|
|
40
|
-
*
|
|
41
|
-
* For multi-trigger scenarios (e.g. table rows), use `setTriggerRef` and
|
|
42
|
-
* manage ARIA attributes yourself instead.
|
|
43
|
-
*/
|
|
44
|
-
getTriggerProps: (userProps?: SidePanelTriggerExtraProps) => SidePanelTriggerPropsResult;
|
|
45
|
-
/**
|
|
46
|
-
* Registers the element that should receive focus when the panel closes.
|
|
47
|
-
* Use this in multi-trigger scenarios (e.g. table rows) where each trigger
|
|
48
|
-
* needs explicit control over which element is the reference. Pass `null`
|
|
49
|
-
* to clear the previously-registered trigger.
|
|
50
|
-
*/
|
|
51
|
-
setTriggerRef: (element: HTMLElement | null) => void;
|
|
52
|
-
/**
|
|
53
|
-
* The panel's DOM id. Use this for `aria-controls` in multi-trigger
|
|
54
|
-
* scenarios where you manage ARIA attributes yourself.
|
|
55
|
-
*/
|
|
56
|
-
panelId: string | undefined;
|
|
57
|
-
}
|
|
58
|
-
export declare function useSidePanel(): SidePanelValue;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { type ComponentPropsWithoutRef, type SyntheticEvent } from "react";
|
|
2
|
-
export interface TreeProps extends ComponentPropsWithoutRef<"ul"> {
|
|
3
|
-
/**
|
|
4
|
-
* Default expanded nodes (uncontrolled)
|
|
5
|
-
*/
|
|
6
|
-
defaultExpanded?: string[];
|
|
7
|
-
/**
|
|
8
|
-
* Expanded nodes (controlled)
|
|
9
|
-
*/
|
|
10
|
-
expanded?: string[];
|
|
11
|
-
/**
|
|
12
|
-
* Callback on expanded nodes change
|
|
13
|
-
*/
|
|
14
|
-
onExpandedChange?: (event: SyntheticEvent, expanded: string[]) => void;
|
|
15
|
-
/**
|
|
16
|
-
* Default selected nodes (uncontrolled)
|
|
17
|
-
*/
|
|
18
|
-
defaultSelected?: string[];
|
|
19
|
-
/**
|
|
20
|
-
* Selected nodes
|
|
21
|
-
*/
|
|
22
|
-
selected?: string[];
|
|
23
|
-
/**
|
|
24
|
-
* Callback on selected nodes change
|
|
25
|
-
*/
|
|
26
|
-
onSelectionChange?: (event: SyntheticEvent, selected: string[]) => void;
|
|
27
|
-
/**
|
|
28
|
-
* Sets multiselect mode with checkboxes and allows for multiple node selection
|
|
29
|
-
*/
|
|
30
|
-
multiselect?: boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Sets tree to disabled state, preventing all interaction
|
|
33
|
-
*/
|
|
34
|
-
disabled?: boolean;
|
|
35
|
-
}
|
|
36
|
-
export declare const Tree: import("react").ForwardRefExoticComponent<TreeProps & import("react").RefAttributes<HTMLUListElement>>;
|