@salt-ds/core 1.62.0 → 1.63.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/CHANGELOG.md +18 -0
- package/css/salt-core.css +160 -1
- package/dist-cjs/index.js +8 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/tree/Tree.css.js +6 -0
- package/dist-cjs/tree/Tree.css.js.map +1 -0
- package/dist-cjs/tree/Tree.js +308 -0
- package/dist-cjs/tree/Tree.js.map +1 -0
- package/dist-cjs/tree/TreeContext.js +37 -0
- package/dist-cjs/tree/TreeContext.js.map +1 -0
- package/dist-cjs/tree/TreeNode.css.js +6 -0
- package/dist-cjs/tree/TreeNode.css.js.map +1 -0
- package/dist-cjs/tree/TreeNode.js +109 -0
- package/dist-cjs/tree/TreeNode.js.map +1 -0
- package/dist-cjs/tree/TreeNodeExpansionIcon.css.js +6 -0
- package/dist-cjs/tree/TreeNodeExpansionIcon.css.js.map +1 -0
- package/dist-cjs/tree/TreeNodeExpansionIcon.js +67 -0
- package/dist-cjs/tree/TreeNodeExpansionIcon.js.map +1 -0
- package/dist-cjs/tree/TreeNodeLabel.css.js +6 -0
- package/dist-cjs/tree/TreeNodeLabel.css.js.map +1 -0
- package/dist-cjs/tree/TreeNodeLabel.js +30 -0
- package/dist-cjs/tree/TreeNodeLabel.js.map +1 -0
- package/dist-cjs/tree/TreeNodeTrigger.css.js +6 -0
- package/dist-cjs/tree/TreeNodeTrigger.css.js.map +1 -0
- package/dist-cjs/tree/TreeNodeTrigger.js +161 -0
- package/dist-cjs/tree/TreeNodeTrigger.js.map +1 -0
- package/dist-cjs/tree/treeModel.js +61 -0
- package/dist-cjs/tree/treeModel.js.map +1 -0
- package/dist-cjs/tree/useTree.js +343 -0
- package/dist-cjs/tree/useTree.js.map +1 -0
- package/dist-es/index.js +4 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/tree/Tree.css.js +4 -0
- package/dist-es/tree/Tree.css.js.map +1 -0
- package/dist-es/tree/Tree.js +306 -0
- package/dist-es/tree/Tree.js.map +1 -0
- package/dist-es/tree/TreeContext.js +32 -0
- package/dist-es/tree/TreeContext.js.map +1 -0
- package/dist-es/tree/TreeNode.css.js +4 -0
- package/dist-es/tree/TreeNode.css.js.map +1 -0
- package/dist-es/tree/TreeNode.js +107 -0
- package/dist-es/tree/TreeNode.js.map +1 -0
- package/dist-es/tree/TreeNodeExpansionIcon.css.js +4 -0
- package/dist-es/tree/TreeNodeExpansionIcon.css.js.map +1 -0
- package/dist-es/tree/TreeNodeExpansionIcon.js +65 -0
- package/dist-es/tree/TreeNodeExpansionIcon.js.map +1 -0
- package/dist-es/tree/TreeNodeLabel.css.js +4 -0
- package/dist-es/tree/TreeNodeLabel.css.js.map +1 -0
- package/dist-es/tree/TreeNodeLabel.js +28 -0
- package/dist-es/tree/TreeNodeLabel.js.map +1 -0
- package/dist-es/tree/TreeNodeTrigger.css.js +4 -0
- package/dist-es/tree/TreeNodeTrigger.css.js.map +1 -0
- package/dist-es/tree/TreeNodeTrigger.js +159 -0
- package/dist-es/tree/TreeNodeTrigger.js.map +1 -0
- package/dist-es/tree/treeModel.js +57 -0
- package/dist-es/tree/treeModel.js.map +1 -0
- package/dist-es/tree/useTree.js +341 -0
- package/dist-es/tree/useTree.js.map +1 -0
- package/dist-types/index.d.ts +1 -0
- package/dist-types/tree/Tree.d.ts +36 -0
- package/dist-types/tree/TreeContext.d.ts +77 -0
- package/dist-types/tree/TreeNode.d.ts +25 -0
- package/dist-types/tree/TreeNodeExpansionIcon.d.ts +4 -0
- package/dist-types/tree/TreeNodeLabel.d.ts +4 -0
- package/dist-types/tree/TreeNodeTrigger.d.ts +8 -0
- package/dist-types/tree/index.d.ts +4 -0
- package/dist-types/tree/treeModel.d.ts +24 -0
- package/dist-types/tree/useTree.d.ts +68 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @salt-ds/core
|
|
2
2
|
|
|
3
|
+
## 1.63.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- fcf295b: Added `Tree`, `TreeNode`, `TreeNodeTrigger`, and `TreeNodeLabel`.
|
|
8
|
+
|
|
9
|
+
`Tree` displays hierarchical data as an expandable and collapsible structure. Users can navigate nested items and optionally select one or more nodes.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
<Tree aria-label="File browser" defaultExpanded={["documents"]}>
|
|
13
|
+
<TreeNode value="documents" label="Documents">
|
|
14
|
+
<TreeNode value="reports" label="Reports">
|
|
15
|
+
<TreeNode value="annual-report" label="Annual Report" />
|
|
16
|
+
</TreeNode>
|
|
17
|
+
</TreeNode>
|
|
18
|
+
</Tree>
|
|
19
|
+
```
|
|
20
|
+
|
|
3
21
|
## 1.62.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
package/css/salt-core.css
CHANGED
|
@@ -5558,6 +5558,165 @@ label.saltText small,
|
|
|
5558
5558
|
--tooltip-status-borderColor: var(--salt-status-success-borderColor);
|
|
5559
5559
|
}
|
|
5560
5560
|
|
|
5561
|
+
/* src/tree/Tree.css */
|
|
5562
|
+
.saltTree {
|
|
5563
|
+
display: flex;
|
|
5564
|
+
flex-direction: column;
|
|
5565
|
+
gap: var(--salt-spacing-fixed-100);
|
|
5566
|
+
list-style: none;
|
|
5567
|
+
margin: 0;
|
|
5568
|
+
padding: 0;
|
|
5569
|
+
outline: none;
|
|
5570
|
+
width: 100%;
|
|
5571
|
+
box-sizing: border-box;
|
|
5572
|
+
}
|
|
5573
|
+
.saltTree-disabled {
|
|
5574
|
+
cursor: var(--salt-cursor-disabled);
|
|
5575
|
+
}
|
|
5576
|
+
|
|
5577
|
+
/* src/tree/TreeNode.css */
|
|
5578
|
+
.saltTreeNode {
|
|
5579
|
+
list-style: none;
|
|
5580
|
+
position: relative;
|
|
5581
|
+
cursor: var(--salt-cursor-hover);
|
|
5582
|
+
}
|
|
5583
|
+
.saltTreeNode:focus {
|
|
5584
|
+
outline: none;
|
|
5585
|
+
}
|
|
5586
|
+
.saltTreeNode:focus-visible > .saltTreeNodeTrigger,
|
|
5587
|
+
.saltTreeNode-focusVisible > .saltTreeNodeTrigger {
|
|
5588
|
+
outline: var(--salt-focused-outline);
|
|
5589
|
+
outline-offset: calc(var(--salt-size-fixed-100) * -2);
|
|
5590
|
+
position: relative;
|
|
5591
|
+
z-index: calc(var(--salt-zIndex-default) + 1);
|
|
5592
|
+
}
|
|
5593
|
+
.saltTreeNode-selected:focus-visible > .saltTreeNodeTrigger,
|
|
5594
|
+
.saltTreeNode-selected.saltTreeNode-focusVisible > .saltTreeNodeTrigger {
|
|
5595
|
+
outline: var(--salt-focused-outline);
|
|
5596
|
+
outline-offset: calc(var(--salt-size-fixed-100) * -2);
|
|
5597
|
+
z-index: calc(var(--salt-zIndex-default) + 1);
|
|
5598
|
+
}
|
|
5599
|
+
.saltTreeNode-group {
|
|
5600
|
+
display: flex;
|
|
5601
|
+
flex-direction: column;
|
|
5602
|
+
gap: var(--salt-spacing-fixed-100);
|
|
5603
|
+
list-style: none;
|
|
5604
|
+
margin: 0;
|
|
5605
|
+
padding: 0;
|
|
5606
|
+
padding-top: var(--salt-spacing-fixed-100);
|
|
5607
|
+
}
|
|
5608
|
+
.saltTreeNode-checkbox {
|
|
5609
|
+
flex-shrink: 0;
|
|
5610
|
+
height: var(--salt-size-selectable);
|
|
5611
|
+
}
|
|
5612
|
+
.saltTreeNode-icon {
|
|
5613
|
+
display: flex;
|
|
5614
|
+
align-items: center;
|
|
5615
|
+
justify-content: center;
|
|
5616
|
+
width: var(--saltTreeNodeTrigger-iconSize);
|
|
5617
|
+
min-width: var(--saltTreeNodeTrigger-iconSize);
|
|
5618
|
+
height: var(--saltTreeNodeTrigger-iconSize);
|
|
5619
|
+
flex-shrink: 0;
|
|
5620
|
+
}
|
|
5621
|
+
.saltTreeNode-icon > * {
|
|
5622
|
+
color: var(--salt-content-primary-foreground);
|
|
5623
|
+
}
|
|
5624
|
+
|
|
5625
|
+
/* src/tree/TreeNodeExpansionIcon.css */
|
|
5626
|
+
.saltTreeNodeExpansionIcon {
|
|
5627
|
+
display: flex;
|
|
5628
|
+
align-items: center;
|
|
5629
|
+
justify-content: center;
|
|
5630
|
+
width: var(--saltTreeNodeTrigger-iconSize);
|
|
5631
|
+
min-width: var(--saltTreeNodeTrigger-iconSize);
|
|
5632
|
+
height: var(--saltTreeNodeTrigger-iconSize);
|
|
5633
|
+
flex-shrink: 0;
|
|
5634
|
+
position: relative;
|
|
5635
|
+
}
|
|
5636
|
+
.saltTreeNodeExpansionIcon-icon {
|
|
5637
|
+
color: var(--salt-content-primary-foreground);
|
|
5638
|
+
}
|
|
5639
|
+
.saltTreeNodeExpansionIcon::before {
|
|
5640
|
+
content: "";
|
|
5641
|
+
display: block;
|
|
5642
|
+
position: absolute;
|
|
5643
|
+
width: var(--salt-size-base);
|
|
5644
|
+
height: var(--salt-size-base);
|
|
5645
|
+
top: 50%;
|
|
5646
|
+
left: 50%;
|
|
5647
|
+
transform: translate(-50%, -50%);
|
|
5648
|
+
}
|
|
5649
|
+
|
|
5650
|
+
/* src/tree/TreeNodeLabel.css */
|
|
5651
|
+
.saltTreeNodeLabel {
|
|
5652
|
+
flex: 1;
|
|
5653
|
+
font-family: var(--salt-text-fontFamily);
|
|
5654
|
+
font-size: var(--salt-text-fontSize);
|
|
5655
|
+
font-weight: var(--salt-text-fontWeight);
|
|
5656
|
+
line-height: var(--salt-text-lineHeight);
|
|
5657
|
+
letter-spacing: var(--salt-text-letterSpacing);
|
|
5658
|
+
word-break: break-word;
|
|
5659
|
+
}
|
|
5660
|
+
|
|
5661
|
+
/* src/tree/TreeNodeTrigger.css */
|
|
5662
|
+
.saltTreeNodeTrigger {
|
|
5663
|
+
box-sizing: border-box;
|
|
5664
|
+
display: flex;
|
|
5665
|
+
align-items: flex-start;
|
|
5666
|
+
gap: var(--salt-spacing-100);
|
|
5667
|
+
width: 100%;
|
|
5668
|
+
padding-top: calc(var(--salt-spacing-75) + var(--salt-spacing-50));
|
|
5669
|
+
padding-bottom: calc(var(--salt-spacing-75) + var(--salt-spacing-50));
|
|
5670
|
+
padding-right: var(--salt-spacing-100);
|
|
5671
|
+
--saltTreeNodeTrigger-iconSize: max(var(--salt-size-icon), 12px);
|
|
5672
|
+
--saltTreeNodeTrigger-indentStep: calc(var(--saltTreeNodeTrigger-iconSize) + var(--salt-spacing-100));
|
|
5673
|
+
--saltTreeNodeTrigger-iconOffsetY: calc((var(--salt-text-lineHeight) - var(--saltTreeNodeTrigger-iconSize)) / 2);
|
|
5674
|
+
--saltTreeNodeTrigger-checkboxOffsetY: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2);
|
|
5675
|
+
padding-left: calc(var(--salt-spacing-100) + (var(--saltTreeNodeTrigger-indentStep) * (var(--saltTreeNode-level, 1) - 1)));
|
|
5676
|
+
background: var(--salt-selectable-background);
|
|
5677
|
+
color: var(--salt-content-primary-foreground);
|
|
5678
|
+
}
|
|
5679
|
+
.saltTree-multiselect .saltTreeNodeTrigger {
|
|
5680
|
+
--saltTreeNodeTrigger-indentStep: calc(((var(--saltTreeNodeTrigger-iconSize) + var(--salt-size-selectable)) / 2) + var(--salt-spacing-100));
|
|
5681
|
+
}
|
|
5682
|
+
.saltTreeNodeTrigger:hover {
|
|
5683
|
+
background: var(--salt-selectable-background-hover);
|
|
5684
|
+
}
|
|
5685
|
+
.saltTreeNode:focus-visible > .saltTreeNodeTrigger,
|
|
5686
|
+
.saltTreeNode-focusVisible > .saltTreeNodeTrigger {
|
|
5687
|
+
background: var(--salt-selectable-background-hover);
|
|
5688
|
+
}
|
|
5689
|
+
.saltTreeNode-selected > .saltTreeNodeTrigger {
|
|
5690
|
+
background: var(--salt-selectable-background-selected);
|
|
5691
|
+
box-shadow: 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);
|
|
5692
|
+
position: relative;
|
|
5693
|
+
z-index: var(--salt-zIndex-default);
|
|
5694
|
+
}
|
|
5695
|
+
.saltTreeNode-selected:focus-visible > .saltTreeNodeTrigger,
|
|
5696
|
+
.saltTreeNode-selected.saltTreeNode-focusVisible > .saltTreeNodeTrigger {
|
|
5697
|
+
background: var(--salt-selectable-background-selected);
|
|
5698
|
+
}
|
|
5699
|
+
.saltTreeNode-disabled > .saltTreeNodeTrigger,
|
|
5700
|
+
.saltTreeNode-disabled:hover > .saltTreeNodeTrigger {
|
|
5701
|
+
opacity: 0.4;
|
|
5702
|
+
cursor: var(--salt-cursor-disabled);
|
|
5703
|
+
background: var(--salt-selectable-background);
|
|
5704
|
+
color: var(--salt-content-primary-foreground);
|
|
5705
|
+
}
|
|
5706
|
+
.saltTreeNodeTrigger > .saltTreeNode-checkbox {
|
|
5707
|
+
margin-top: var(--saltTreeNodeTrigger-checkboxOffsetY);
|
|
5708
|
+
margin-bottom: 0;
|
|
5709
|
+
}
|
|
5710
|
+
.saltTreeNodeTrigger > .saltTreeNodeExpansionIcon,
|
|
5711
|
+
.saltTreeNodeTrigger > .saltTreeNode-icon {
|
|
5712
|
+
margin-top: var(--saltTreeNodeTrigger-iconOffsetY);
|
|
5713
|
+
}
|
|
5714
|
+
.saltTreeNodeTrigger > .saltIcon {
|
|
5715
|
+
margin-top: var(--saltTreeNodeTrigger-iconOffsetY);
|
|
5716
|
+
flex-shrink: 0;
|
|
5717
|
+
color: var(--salt-content-primary-foreground);
|
|
5718
|
+
}
|
|
5719
|
+
|
|
5561
5720
|
/* src/vertical-navigation/VerticalNavigation.css */
|
|
5562
5721
|
.saltVerticalNavigation ol {
|
|
5563
5722
|
display: flex;
|
|
@@ -6329,4 +6488,4 @@ label.saltText small,
|
|
|
6329
6488
|
box-shadow: 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);
|
|
6330
6489
|
}
|
|
6331
6490
|
|
|
6332
|
-
/* src/
|
|
6491
|
+
/* src/714e3603-33e8-458e-a737-6975a2f26ebd.css */
|
package/dist-cjs/index.js
CHANGED
|
@@ -155,6 +155,10 @@ var ToggletipPanel = require('./toggletip/ToggletipPanel.js');
|
|
|
155
155
|
var ToggletipTrigger = require('./toggletip/ToggletipTrigger.js');
|
|
156
156
|
var Tooltip = require('./tooltip/Tooltip.js');
|
|
157
157
|
var useTooltip = require('./tooltip/useTooltip.js');
|
|
158
|
+
var Tree = require('./tree/Tree.js');
|
|
159
|
+
var TreeNode = require('./tree/TreeNode.js');
|
|
160
|
+
var TreeNodeLabel = require('./tree/TreeNodeLabel.js');
|
|
161
|
+
var TreeNodeTrigger = require('./tree/TreeNodeTrigger.js');
|
|
158
162
|
var capitalize = require('./utils/capitalize.js');
|
|
159
163
|
var createChainedFunction = require('./utils/createChainedFunction.js');
|
|
160
164
|
var createContext = require('./utils/createContext.js');
|
|
@@ -379,6 +383,10 @@ exports.ToggletipPanel = ToggletipPanel.ToggletipPanel;
|
|
|
379
383
|
exports.ToggletipTrigger = ToggletipTrigger.ToggletipTrigger;
|
|
380
384
|
exports.Tooltip = Tooltip.Tooltip;
|
|
381
385
|
exports.useTooltip = useTooltip.useTooltip;
|
|
386
|
+
exports.Tree = Tree.Tree;
|
|
387
|
+
exports.TreeNode = TreeNode.TreeNode;
|
|
388
|
+
exports.TreeNodeLabel = TreeNodeLabel.TreeNodeLabel;
|
|
389
|
+
exports.TreeNodeTrigger = TreeNodeTrigger.TreeNodeTrigger;
|
|
382
390
|
exports.capitalize = capitalize.capitalize;
|
|
383
391
|
exports.createChainedFunction = createChainedFunction.createChainedFunction;
|
|
384
392
|
exports.createContext = createContext.createContext;
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltTree {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-fixed-100);\n list-style: none;\n margin: 0;\n padding: 0;\n outline: none;\n width: 100%;\n box-sizing: border-box;\n}\n\n.saltTree-disabled {\n cursor: var(--salt-cursor-disabled);\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=Tree.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var styles = require('@salt-ds/styles');
|
|
5
|
+
var window = require('@salt-ds/window');
|
|
6
|
+
var clsx = require('clsx');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var makePrefixer = require('../utils/makePrefixer.js');
|
|
9
|
+
require('../utils/useFloatingUI/useFloatingUI.js');
|
|
10
|
+
var useForkRef = require('../utils/useForkRef.js');
|
|
11
|
+
require('../utils/useId.js');
|
|
12
|
+
require('../salt-provider/SaltProvider.js');
|
|
13
|
+
require('../viewport/ViewportProvider.js');
|
|
14
|
+
var Tree$1 = require('./Tree.css.js');
|
|
15
|
+
var TreeContext = require('./TreeContext.js');
|
|
16
|
+
var useTree = require('./useTree.js');
|
|
17
|
+
|
|
18
|
+
const withBaseName = makePrefixer.makePrefixer("saltTree");
|
|
19
|
+
const Tree = React.forwardRef(
|
|
20
|
+
function Tree2(props, ref) {
|
|
21
|
+
const {
|
|
22
|
+
children,
|
|
23
|
+
className,
|
|
24
|
+
defaultExpanded,
|
|
25
|
+
expanded,
|
|
26
|
+
onExpandedChange,
|
|
27
|
+
defaultSelected,
|
|
28
|
+
selected,
|
|
29
|
+
onSelectionChange,
|
|
30
|
+
multiselect = false,
|
|
31
|
+
disabled = false,
|
|
32
|
+
onKeyDown,
|
|
33
|
+
onBlur,
|
|
34
|
+
...rest
|
|
35
|
+
} = props;
|
|
36
|
+
const targetWindow = window.useWindow();
|
|
37
|
+
styles.useComponentCssInjection({
|
|
38
|
+
testId: "salt-tree",
|
|
39
|
+
css: Tree$1,
|
|
40
|
+
window: targetWindow
|
|
41
|
+
});
|
|
42
|
+
const treeState = useTree.useTree({
|
|
43
|
+
defaultExpanded,
|
|
44
|
+
expanded,
|
|
45
|
+
onExpandedChange,
|
|
46
|
+
defaultSelected,
|
|
47
|
+
selected,
|
|
48
|
+
onSelectionChange,
|
|
49
|
+
multiselect,
|
|
50
|
+
disabled,
|
|
51
|
+
children
|
|
52
|
+
});
|
|
53
|
+
const {
|
|
54
|
+
activeNode,
|
|
55
|
+
setActiveNode,
|
|
56
|
+
expandedArray,
|
|
57
|
+
setExpandedArray,
|
|
58
|
+
expandedState,
|
|
59
|
+
toggleExpanded,
|
|
60
|
+
select,
|
|
61
|
+
selectedSet,
|
|
62
|
+
setVisibleSelectionState,
|
|
63
|
+
visibleNodes,
|
|
64
|
+
getNodeMeta,
|
|
65
|
+
getElement,
|
|
66
|
+
getParent,
|
|
67
|
+
getChildren,
|
|
68
|
+
treeModel,
|
|
69
|
+
disabledIdsSet
|
|
70
|
+
} = treeState;
|
|
71
|
+
const lastKeypressRef = React.useRef("");
|
|
72
|
+
const keypressTimeoutRef = React.useRef(
|
|
73
|
+
null
|
|
74
|
+
);
|
|
75
|
+
const treeRef = React.useRef(null);
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
return () => {
|
|
78
|
+
if (keypressTimeoutRef.current) {
|
|
79
|
+
clearTimeout(keypressTimeoutRef.current);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}, []);
|
|
83
|
+
const handleBlur = (event) => {
|
|
84
|
+
var _a;
|
|
85
|
+
onBlur == null ? void 0 : onBlur(event);
|
|
86
|
+
const relatedTarget = event.relatedTarget;
|
|
87
|
+
if (!((_a = treeRef.current) == null ? void 0 : _a.contains(relatedTarget))) {
|
|
88
|
+
setActiveNode(void 0);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const focusNode = (value) => {
|
|
92
|
+
const element = getElement(value);
|
|
93
|
+
if (!element) {
|
|
94
|
+
return "missing";
|
|
95
|
+
}
|
|
96
|
+
const activeEl = targetWindow == null ? void 0 : targetWindow.document.activeElement;
|
|
97
|
+
if (activeEl === element) {
|
|
98
|
+
return "already-focused";
|
|
99
|
+
}
|
|
100
|
+
element.focus();
|
|
101
|
+
element.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
102
|
+
return "focused";
|
|
103
|
+
};
|
|
104
|
+
const handleKeyDown = (event) => {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
onKeyDown == null ? void 0 : onKeyDown(event);
|
|
107
|
+
if (disabled) return;
|
|
108
|
+
if (visibleNodes.length === 0) return;
|
|
109
|
+
const currentIndex = activeNode ? visibleNodes.indexOf(activeNode) : -1;
|
|
110
|
+
let newActiveNode;
|
|
111
|
+
let handled = false;
|
|
112
|
+
switch (event.key) {
|
|
113
|
+
case "ArrowDown": {
|
|
114
|
+
handled = true;
|
|
115
|
+
const nextIndex = currentIndex + 1;
|
|
116
|
+
if (nextIndex < visibleNodes.length) {
|
|
117
|
+
newActiveNode = visibleNodes[nextIndex];
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case "ArrowUp": {
|
|
122
|
+
handled = true;
|
|
123
|
+
const prevIndex = currentIndex - 1;
|
|
124
|
+
if (prevIndex >= 0) {
|
|
125
|
+
newActiveNode = visibleNodes[prevIndex];
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case "ArrowRight": {
|
|
130
|
+
handled = true;
|
|
131
|
+
if (activeNode) {
|
|
132
|
+
const nodeMeta = getNodeMeta(activeNode);
|
|
133
|
+
const isDisabled = disabledIdsSet.has(activeNode);
|
|
134
|
+
const hasChildren = Boolean(nodeMeta == null ? void 0 : nodeMeta.hasChildren);
|
|
135
|
+
const isExpanded = expandedState.has(activeNode);
|
|
136
|
+
if (!isDisabled && hasChildren) {
|
|
137
|
+
if (!isExpanded) {
|
|
138
|
+
toggleExpanded(event, activeNode);
|
|
139
|
+
} else {
|
|
140
|
+
const firstChild = visibleNodes.find(
|
|
141
|
+
(visibleNode) => getParent(visibleNode) === activeNode
|
|
142
|
+
);
|
|
143
|
+
if (firstChild) {
|
|
144
|
+
newActiveNode = firstChild;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case "ArrowLeft": {
|
|
152
|
+
handled = true;
|
|
153
|
+
if (activeNode) {
|
|
154
|
+
const isDisabled = disabledIdsSet.has(activeNode);
|
|
155
|
+
if (!isDisabled) {
|
|
156
|
+
const isExpanded = expandedState.has(activeNode);
|
|
157
|
+
if (isExpanded) {
|
|
158
|
+
toggleExpanded(event, activeNode);
|
|
159
|
+
} else {
|
|
160
|
+
const parent = getParent(activeNode);
|
|
161
|
+
if (parent) {
|
|
162
|
+
newActiveNode = parent;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case "Home": {
|
|
170
|
+
handled = true;
|
|
171
|
+
newActiveNode = visibleNodes[0];
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case "End": {
|
|
175
|
+
handled = true;
|
|
176
|
+
newActiveNode = visibleNodes[visibleNodes.length - 1];
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case "Enter": {
|
|
180
|
+
handled = true;
|
|
181
|
+
if (activeNode) {
|
|
182
|
+
select(event, activeNode);
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
case " ": {
|
|
187
|
+
handled = true;
|
|
188
|
+
if (activeNode) {
|
|
189
|
+
select(event, activeNode);
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case "*": {
|
|
194
|
+
handled = true;
|
|
195
|
+
if (activeNode) {
|
|
196
|
+
const parent = getParent(activeNode);
|
|
197
|
+
const siblings = parent ? getChildren(parent) : treeModel.rootValues;
|
|
198
|
+
const toExpand = siblings.filter((sibling) => {
|
|
199
|
+
const siblingMeta = getNodeMeta(sibling);
|
|
200
|
+
return (siblingMeta == null ? void 0 : siblingMeta.hasChildren) && !expandedState.has(sibling) && !disabledIdsSet.has(sibling);
|
|
201
|
+
});
|
|
202
|
+
if (toExpand.length > 0) {
|
|
203
|
+
const newExpanded = [...expandedArray, ...toExpand];
|
|
204
|
+
setExpandedArray(newExpanded);
|
|
205
|
+
onExpandedChange == null ? void 0 : onExpandedChange(event, newExpanded);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
default: {
|
|
211
|
+
if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
|
|
212
|
+
handled = true;
|
|
213
|
+
if (keypressTimeoutRef.current) {
|
|
214
|
+
clearTimeout(keypressTimeoutRef.current);
|
|
215
|
+
}
|
|
216
|
+
lastKeypressRef.current += event.key.toLowerCase();
|
|
217
|
+
const searchString = lastKeypressRef.current;
|
|
218
|
+
keypressTimeoutRef.current = setTimeout(() => {
|
|
219
|
+
lastKeypressRef.current = "";
|
|
220
|
+
}, 500);
|
|
221
|
+
const currentIndex2 = activeNode ? visibleNodes.indexOf(activeNode) : -1;
|
|
222
|
+
let found = false;
|
|
223
|
+
for (let i = currentIndex2 + 1; i < visibleNodes.length; i++) {
|
|
224
|
+
const element = getElement(visibleNodes[i]);
|
|
225
|
+
if ((_a = element == null ? void 0 : element.textContent) == null ? void 0 : _a.toLowerCase().startsWith(searchString)) {
|
|
226
|
+
newActiveNode = visibleNodes[i];
|
|
227
|
+
found = true;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (!found) {
|
|
232
|
+
for (let i = 0; i <= currentIndex2; i++) {
|
|
233
|
+
const element = getElement(visibleNodes[i]);
|
|
234
|
+
if ((_b = element == null ? void 0 : element.textContent) == null ? void 0 : _b.toLowerCase().startsWith(searchString)) {
|
|
235
|
+
newActiveNode = visibleNodes[i];
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if ((event.ctrlKey || event.metaKey) && event.key === "a" && multiselect) {
|
|
245
|
+
handled = true;
|
|
246
|
+
event.preventDefault();
|
|
247
|
+
const allVisibleValues = visibleNodes.filter(
|
|
248
|
+
(visibleNode) => !disabledIdsSet.has(visibleNode)
|
|
249
|
+
);
|
|
250
|
+
const allSelected = allVisibleValues.every(
|
|
251
|
+
(visible) => selectedSet.has(visible)
|
|
252
|
+
);
|
|
253
|
+
const newSelected = allSelected ? [] : allVisibleValues;
|
|
254
|
+
setVisibleSelectionState(newSelected);
|
|
255
|
+
onSelectionChange == null ? void 0 : onSelectionChange(event, newSelected);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (event.shiftKey && (event.key === "ArrowUp" || event.key === "ArrowDown") && multiselect) {
|
|
259
|
+
handled = true;
|
|
260
|
+
const isDown = event.key === "ArrowDown";
|
|
261
|
+
const currentIndex2 = activeNode ? visibleNodes.indexOf(activeNode) : -1;
|
|
262
|
+
const nextIndex = isDown ? currentIndex2 + 1 : currentIndex2 - 1;
|
|
263
|
+
if (nextIndex >= 0 && nextIndex < visibleNodes.length) {
|
|
264
|
+
const nextValue = visibleNodes[nextIndex];
|
|
265
|
+
if (!disabledIdsSet.has(nextValue)) {
|
|
266
|
+
select(event, nextValue);
|
|
267
|
+
newActiveNode = nextValue;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (handled) {
|
|
272
|
+
event.preventDefault();
|
|
273
|
+
event.stopPropagation();
|
|
274
|
+
}
|
|
275
|
+
if (newActiveNode !== void 0) {
|
|
276
|
+
const focusResult = focusNode(newActiveNode);
|
|
277
|
+
if (focusResult !== "focused") {
|
|
278
|
+
setActiveNode(newActiveNode);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const handleRef = useForkRef.useForkRef(treeRef, ref);
|
|
283
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TreeContext.TreeProvider, { value: treeState, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
284
|
+
"ul",
|
|
285
|
+
{
|
|
286
|
+
ref: handleRef,
|
|
287
|
+
role: "tree",
|
|
288
|
+
"aria-multiselectable": multiselect ? true : void 0,
|
|
289
|
+
"aria-disabled": disabled || void 0,
|
|
290
|
+
className: clsx.clsx(
|
|
291
|
+
withBaseName(),
|
|
292
|
+
{
|
|
293
|
+
[withBaseName("disabled")]: disabled,
|
|
294
|
+
[withBaseName("multiselect")]: multiselect
|
|
295
|
+
},
|
|
296
|
+
className
|
|
297
|
+
),
|
|
298
|
+
onKeyDown: handleKeyDown,
|
|
299
|
+
onBlur: handleBlur,
|
|
300
|
+
...rest,
|
|
301
|
+
children
|
|
302
|
+
}
|
|
303
|
+
) });
|
|
304
|
+
}
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
exports.Tree = Tree;
|
|
308
|
+
//# sourceMappingURL=Tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.js","sources":["../src/tree/Tree.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEvent,\n forwardRef,\n type KeyboardEvent,\n type SyntheticEvent,\n useEffect,\n useRef,\n} from \"react\";\nimport { makePrefixer, useForkRef } from \"../utils\";\nimport treeCss from \"./Tree.css\";\nimport { TreeProvider } from \"./TreeContext\";\nimport { useTree } from \"./useTree\";\n\nexport interface TreeProps extends ComponentPropsWithoutRef<\"ul\"> {\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\nconst withBaseName = makePrefixer(\"saltTree\");\n\nexport const Tree = forwardRef<HTMLUListElement, TreeProps>(\n function Tree(props, ref) {\n const {\n children,\n className,\n defaultExpanded,\n expanded,\n onExpandedChange,\n defaultSelected,\n selected,\n onSelectionChange,\n multiselect = false,\n disabled = false,\n onKeyDown,\n onBlur,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tree\",\n css: treeCss,\n window: targetWindow,\n });\n\n const treeState = useTree({\n defaultExpanded,\n expanded,\n onExpandedChange,\n defaultSelected,\n selected,\n onSelectionChange,\n multiselect,\n disabled,\n children,\n });\n\n const {\n activeNode,\n setActiveNode,\n expandedArray,\n setExpandedArray,\n expandedState,\n toggleExpanded,\n select,\n selectedSet,\n setVisibleSelectionState,\n visibleNodes,\n getNodeMeta,\n getElement,\n getParent,\n getChildren,\n treeModel,\n disabledIdsSet,\n } = treeState;\n\n const lastKeypressRef = useRef<string>(\"\");\n const keypressTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const treeRef = useRef<HTMLUListElement>(null);\n\n useEffect(() => {\n return () => {\n if (keypressTimeoutRef.current) {\n clearTimeout(keypressTimeoutRef.current);\n }\n };\n }, []);\n\n const handleBlur = (event: FocusEvent<HTMLUListElement>) => {\n onBlur?.(event);\n const relatedTarget = event.relatedTarget as Node | null;\n if (!treeRef.current?.contains(relatedTarget)) {\n setActiveNode(undefined);\n }\n };\n\n const focusNode = (\n value: string,\n ): \"focused\" | \"already-focused\" | \"missing\" => {\n const element = getElement(value);\n if (!element) {\n return \"missing\";\n }\n\n const activeEl = targetWindow?.document.activeElement;\n if (activeEl === element) {\n return \"already-focused\";\n }\n\n element.focus();\n element.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n return \"focused\";\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLUListElement>) => {\n onKeyDown?.(event);\n\n if (disabled) return;\n\n if (visibleNodes.length === 0) return;\n\n const currentIndex = activeNode ? visibleNodes.indexOf(activeNode) : -1;\n\n let newActiveNode: string | undefined;\n let handled = false;\n\n switch (event.key) {\n case \"ArrowDown\": {\n handled = true;\n const nextIndex = currentIndex + 1;\n if (nextIndex < visibleNodes.length) {\n newActiveNode = visibleNodes[nextIndex];\n }\n break;\n }\n case \"ArrowUp\": {\n handled = true;\n const prevIndex = currentIndex - 1;\n if (prevIndex >= 0) {\n newActiveNode = visibleNodes[prevIndex];\n }\n break;\n }\n case \"ArrowRight\": {\n handled = true;\n if (activeNode) {\n const nodeMeta = getNodeMeta(activeNode);\n const isDisabled = disabledIdsSet.has(activeNode);\n const hasChildren = Boolean(nodeMeta?.hasChildren);\n const isExpanded = expandedState.has(activeNode);\n if (!isDisabled && hasChildren) {\n if (!isExpanded) {\n toggleExpanded(event, activeNode);\n } else {\n const firstChild = visibleNodes.find(\n (visibleNode) => getParent(visibleNode) === activeNode,\n );\n if (firstChild) {\n newActiveNode = firstChild;\n }\n }\n }\n }\n break;\n }\n case \"ArrowLeft\": {\n handled = true;\n if (activeNode) {\n const isDisabled = disabledIdsSet.has(activeNode);\n if (!isDisabled) {\n const isExpanded = expandedState.has(activeNode);\n if (isExpanded) {\n toggleExpanded(event, activeNode);\n } else {\n const parent = getParent(activeNode);\n if (parent) {\n newActiveNode = parent;\n }\n }\n }\n }\n break;\n }\n case \"Home\": {\n handled = true;\n newActiveNode = visibleNodes[0];\n break;\n }\n case \"End\": {\n handled = true;\n newActiveNode = visibleNodes[visibleNodes.length - 1];\n break;\n }\n case \"Enter\": {\n handled = true;\n if (activeNode) {\n select(event, activeNode);\n }\n break;\n }\n case \" \": {\n handled = true;\n if (activeNode) {\n select(event, activeNode);\n }\n break;\n }\n case \"*\": {\n handled = true;\n if (activeNode) {\n const parent = getParent(activeNode);\n // Get siblings: either children of parent, or root nodes if no parent\n const siblings = parent\n ? getChildren(parent)\n : treeModel.rootValues;\n\n const toExpand = siblings.filter((sibling) => {\n const siblingMeta = getNodeMeta(sibling);\n return (\n siblingMeta?.hasChildren &&\n !expandedState.has(sibling) &&\n !disabledIdsSet.has(sibling)\n );\n });\n\n if (toExpand.length > 0) {\n const newExpanded = [...expandedArray, ...toExpand];\n setExpandedArray(newExpanded);\n onExpandedChange?.(event, newExpanded);\n }\n }\n break;\n }\n default: {\n // Type-ahead\n if (\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n handled = true;\n\n if (keypressTimeoutRef.current) {\n clearTimeout(keypressTimeoutRef.current);\n }\n\n lastKeypressRef.current += event.key.toLowerCase();\n const searchString = lastKeypressRef.current;\n\n keypressTimeoutRef.current = setTimeout(() => {\n lastKeypressRef.current = \"\";\n }, 500);\n\n const currentIndex = activeNode\n ? visibleNodes.indexOf(activeNode)\n : -1;\n let found = false;\n\n for (let i = currentIndex + 1; i < visibleNodes.length; i++) {\n const element = getElement(visibleNodes[i]);\n if (\n element?.textContent?.toLowerCase().startsWith(searchString)\n ) {\n newActiveNode = visibleNodes[i];\n found = true;\n break;\n }\n }\n\n if (!found) {\n for (let i = 0; i <= currentIndex; i++) {\n const element = getElement(visibleNodes[i]);\n if (\n element?.textContent?.toLowerCase().startsWith(searchString)\n ) {\n newActiveNode = visibleNodes[i];\n break;\n }\n }\n }\n }\n break;\n }\n }\n\n if (\n (event.ctrlKey || event.metaKey) &&\n event.key === \"a\" &&\n multiselect\n ) {\n handled = true;\n event.preventDefault();\n\n const allVisibleValues = visibleNodes.filter(\n (visibleNode) => !disabledIdsSet.has(visibleNode),\n );\n const allSelected = allVisibleValues.every((visible) =>\n selectedSet.has(visible),\n );\n\n const newSelected = allSelected ? [] : allVisibleValues;\n\n setVisibleSelectionState(newSelected);\n onSelectionChange?.(event, newSelected);\n return;\n }\n\n if (\n event.shiftKey &&\n (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") &&\n multiselect\n ) {\n handled = true;\n const isDown = event.key === \"ArrowDown\";\n const currentIndex = activeNode ? visibleNodes.indexOf(activeNode) : -1;\n const nextIndex = isDown ? currentIndex + 1 : currentIndex - 1;\n\n if (nextIndex >= 0 && nextIndex < visibleNodes.length) {\n const nextValue = visibleNodes[nextIndex];\n\n if (!disabledIdsSet.has(nextValue)) {\n select(event, nextValue);\n newActiveNode = nextValue;\n }\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (newActiveNode !== undefined) {\n const focusResult = focusNode(newActiveNode);\n if (focusResult !== \"focused\") {\n setActiveNode(newActiveNode);\n }\n }\n };\n\n const handleRef = useForkRef(treeRef, ref);\n\n return (\n <TreeProvider value={treeState}>\n <ul\n ref={handleRef}\n role=\"tree\"\n aria-multiselectable={multiselect ? true : undefined}\n aria-disabled={disabled || undefined}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"multiselect\")]: multiselect,\n },\n className,\n )}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n {...rest}\n >\n {children}\n </ul>\n </TreeProvider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Tree","useWindow","useComponentCssInjection","treeCss","useTree","useRef","useEffect","currentIndex","useForkRef","jsx","TreeProvider","clsx"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var createContext = require('../utils/createContext.js');
|
|
5
|
+
require('clsx');
|
|
6
|
+
require('react/jsx-runtime');
|
|
7
|
+
require('../utils/useFloatingUI/useFloatingUI.js');
|
|
8
|
+
require('../utils/useId.js');
|
|
9
|
+
require('../salt-provider/SaltProvider.js');
|
|
10
|
+
require('../viewport/ViewportProvider.js');
|
|
11
|
+
|
|
12
|
+
const TreeContext = createContext.createContext(
|
|
13
|
+
"Tree Context",
|
|
14
|
+
void 0
|
|
15
|
+
);
|
|
16
|
+
const TreeProvider = TreeContext.Provider;
|
|
17
|
+
function useTreeContext() {
|
|
18
|
+
const context = React.useContext(TreeContext);
|
|
19
|
+
if (!context) {
|
|
20
|
+
throw new Error("useTreeContext must be used within a TreeProvider");
|
|
21
|
+
}
|
|
22
|
+
return context;
|
|
23
|
+
}
|
|
24
|
+
const TreeNodeContext = createContext.createContext(
|
|
25
|
+
"TreeNodeContext",
|
|
26
|
+
void 0
|
|
27
|
+
);
|
|
28
|
+
const TreeNodeProvider = TreeNodeContext.Provider;
|
|
29
|
+
function useTreeNodeContext() {
|
|
30
|
+
return React.useContext(TreeNodeContext);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
exports.TreeNodeProvider = TreeNodeProvider;
|
|
34
|
+
exports.TreeProvider = TreeProvider;
|
|
35
|
+
exports.useTreeContext = useTreeContext;
|
|
36
|
+
exports.useTreeNodeContext = useTreeNodeContext;
|
|
37
|
+
//# sourceMappingURL=TreeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeContext.js","sources":["../src/tree/TreeContext.ts"],"sourcesContent":["import {\n type Dispatch,\n type ReactNode,\n type Ref,\n type RefObject,\n type SetStateAction,\n type SyntheticEvent,\n useContext,\n} from \"react\";\nimport { createContext } from \"../utils\";\nimport type { TreeModel, TreeNodeMeta } from \"./useTree\";\n\nexport interface TreeContextValue {\n expandedState: Set<string>;\n /** Toggle a node expansion state */\n toggleExpanded: (event: SyntheticEvent, value: string) => void;\n\n /** Selected node values */\n selectedState: string[];\n /** Selected node values as Set for O(1) lookups */\n selectedSet: Set<string>;\n /** Set selected state directly */\n setSelectedState: Dispatch<SetStateAction<string[]>>;\n /** Set selected state without expanding selection through hidden descendants */\n setVisibleSelectionState: (selected: string[]) => void;\n /** Select node */\n select: (event: SyntheticEvent, value: string) => void;\n\n /** Whether multiselect mode with checkboxes is enabled */\n multiselect: boolean;\n /** Disabled state of the tree */\n disabled: boolean;\n /** Set of disabled node IDs */\n disabledIdsSet: Set<string>;\n\n /** Tree model for traversal */\n treeModel: TreeModel;\n /** Get node metadata from tree model */\n getNodeMeta: (value: string) => TreeNodeMeta | undefined;\n /** Get parent of a node */\n getParent: (value: string) => string | undefined;\n /** Get children of a node */\n getChildren: (value: string) => string[];\n /** Get all descendants of a node */\n getDescendants: (value: string) => string[];\n /** Get all ancestors of a node */\n getAncestors: (value: string) => string[];\n /** Memoized visible (navigable) nodes in tree order */\n visibleNodes: string[];\n /** Memoized tabbable node ID for roving tabindex (computed once at tree level) */\n tabbableNodeId: string | undefined;\n /** Register a DOM element for focus management */\n registerElement: (value: string, element: HTMLElement) => () => void;\n /** Get DOM element for a node (if mounted) */\n getElement: (value: string) => HTMLElement | undefined;\n /** Active node value */\n activeNode: string | undefined;\n /** Set the active node */\n setActiveNode: Dispatch<SetStateAction<string | undefined>>;\n\n /** Set of indeterminate (partially selected) node IDs */\n indeterminateState: Set<string>;\n}\n\nconst TreeContext = createContext<TreeContextValue | undefined>(\n \"Tree Context\",\n undefined,\n);\n\nexport const TreeProvider = TreeContext.Provider;\n\nexport function useTreeContext(): TreeContextValue {\n const context = useContext(TreeContext);\n if (!context) {\n throw new Error(\"useTreeContext must be used within a TreeProvider\");\n }\n return context;\n}\n\nexport interface TreeNodeContextValue {\n /** Current node value */\n value: string;\n /** Current depth level */\n level: number;\n /** Whether node has children */\n hasChildren: boolean;\n /** Whether node is expanded */\n expanded: boolean;\n /** Whether node is disabled */\n disabled: boolean;\n /** Node id for the li element */\n id: string;\n /** Ref for the li element rendered by TreeNodeTrigger */\n nodeRef: RefObject<HTMLLIElement>;\n /** Callback ref that connects TreeNode's forwarded ref to the li element */\n setNodeRef: Ref<HTMLLIElement> | null;\n /** Whether node is selected */\n selected: boolean;\n /** Whether node is in indeterminate state (partially selected children) */\n indeterminate: boolean;\n /** Child TreeNode elements to be rendered inside the group */\n nodeChildren: ReactNode;\n}\n\nconst TreeNodeContext = createContext<TreeNodeContextValue | undefined>(\n \"TreeNodeContext\",\n undefined,\n);\n\nexport const TreeNodeProvider = TreeNodeContext.Provider;\n\nexport function useTreeNodeContext(): TreeNodeContextValue | undefined {\n return useContext(TreeNodeContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;AAgEA,MAAM,WAAA,GAAcA,2BAAA;AAAA,EAClB,cAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,eAAe,WAAA,CAAY;AAEjC,SAAS,cAAA,GAAmC;AACjD,EAAA,MAAM,OAAA,GAAUC,iBAAW,WAAW,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,OAAA;AACT;AA2BA,MAAM,eAAA,GAAkBD,2BAAA;AAAA,EACtB,iBAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,mBAAmB,eAAA,CAAgB;AAEzC,SAAS,kBAAA,GAAuD;AACrE,EAAA,OAAOC,iBAAW,eAAe,CAAA;AACnC;;;;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltTreeNode {\n list-style: none;\n position: relative;\n cursor: var(--salt-cursor-hover);\n}\n\n.saltTreeNode:focus {\n outline: none;\n}\n\n/* Focus visible styles - applied when keyboard navigation is used */\n.saltTreeNode:focus-visible > .saltTreeNodeTrigger,\n.saltTreeNode-focusVisible > .saltTreeNodeTrigger {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n position: relative;\n z-index: calc(var(--salt-zIndex-default) + 1);\n}\n\n/* Selected + focus visible */\n.saltTreeNode-selected:focus-visible > .saltTreeNodeTrigger,\n.saltTreeNode-selected.saltTreeNode-focusVisible > .saltTreeNodeTrigger {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n z-index: calc(var(--salt-zIndex-default) + 1);\n}\n\n.saltTreeNode-group {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-fixed-100);\n list-style: none;\n margin: 0;\n padding: 0;\n padding-top: var(--salt-spacing-fixed-100);\n}\n\n.saltTreeNode-checkbox {\n flex-shrink: 0;\n height: var(--salt-size-selectable);\n}\n\n.saltTreeNode-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--saltTreeNodeTrigger-iconSize);\n min-width: var(--saltTreeNodeTrigger-iconSize);\n height: var(--saltTreeNodeTrigger-iconSize);\n flex-shrink: 0;\n}\n\n.saltTreeNode-icon > * {\n color: var(--salt-content-primary-foreground);\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=TreeNode.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeNode.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|