@snack-uikit/tree 0.6.29 → 0.6.30-preview-71543426.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/cjs/components/Tree/Tree.js +64 -0
  2. package/dist/cjs/components/Tree/index.js +25 -0
  3. package/dist/cjs/components/Tree/utils.js +31 -0
  4. package/dist/cjs/components/index.js +25 -0
  5. package/dist/cjs/constants.js +27 -0
  6. package/dist/cjs/contexts/TreeContext.js +128 -0
  7. package/dist/cjs/helperComponents/ExpandableTreeNode/ExpandableTreeNode.js +164 -0
  8. package/dist/cjs/helperComponents/ExpandableTreeNode/index.js +25 -0
  9. package/dist/cjs/helperComponents/TreeItem/TreeItem.js +32 -0
  10. package/dist/cjs/helperComponents/TreeItem/index.js +25 -0
  11. package/dist/cjs/helperComponents/TreeLine/TreeLine.js +30 -0
  12. package/dist/cjs/helperComponents/TreeLine/index.js +25 -0
  13. package/dist/cjs/helperComponents/TreeNode/TreeNode.js +280 -0
  14. package/dist/cjs/helperComponents/TreeNode/components/TreeNodeActions.js +109 -0
  15. package/dist/cjs/helperComponents/TreeNode/components/index.js +25 -0
  16. package/dist/cjs/helperComponents/TreeNode/index.js +25 -0
  17. package/dist/cjs/helperComponents/TreeNode/utils.js +13 -0
  18. package/dist/cjs/helperComponents/index.js +28 -0
  19. package/dist/cjs/helpers.js +89 -0
  20. package/dist/cjs/index.js +25 -0
  21. package/dist/cjs/types.js +5 -0
  22. package/dist/esm/components/Tree/Tree.d.ts +4 -0
  23. package/dist/esm/components/Tree/styles.module.css +4 -0
  24. package/dist/esm/components/Tree/utils.d.ts +2 -0
  25. package/dist/esm/components/index.d.ts +1 -0
  26. package/dist/esm/components/index.js +1 -0
  27. package/dist/esm/constants.d.ts +21 -0
  28. package/dist/esm/contexts/TreeContext.d.ts +27 -0
  29. package/dist/esm/helperComponents/ExpandableTreeNode/ExpandableTreeNode.d.ts +11 -0
  30. package/dist/esm/helperComponents/ExpandableTreeNode/index.js +1 -0
  31. package/dist/esm/helperComponents/ExpandableTreeNode/styles.module.css +34 -0
  32. package/dist/esm/helperComponents/TreeItem/TreeItem.d.ts +8 -0
  33. package/dist/esm/helperComponents/TreeItem/index.js +1 -0
  34. package/dist/esm/helperComponents/TreeLine/TreeLine.d.ts +7 -0
  35. package/dist/esm/helperComponents/TreeLine/index.js +1 -0
  36. package/dist/esm/helperComponents/TreeLine/styles.module.css +37 -0
  37. package/dist/esm/helperComponents/TreeNode/TreeNode.d.ts +11 -0
  38. package/dist/esm/helperComponents/TreeNode/components/TreeNodeActions.d.ts +14 -0
  39. package/dist/esm/helperComponents/TreeNode/components/index.js +1 -0
  40. package/dist/esm/helperComponents/TreeNode/index.js +1 -0
  41. package/dist/esm/helperComponents/TreeNode/styles.module.css +113 -0
  42. package/dist/esm/helperComponents/TreeNode/utils.d.ts +3 -0
  43. package/dist/esm/helperComponents/index.js +4 -0
  44. package/dist/esm/helpers.d.ts +11 -0
  45. package/dist/esm/index.d.ts +2 -0
  46. package/dist/esm/types.d.ts +100 -0
  47. package/package.json +14 -12
  48. /package/dist/{components → cjs/components}/Tree/Tree.d.ts +0 -0
  49. /package/dist/{components → cjs/components}/Tree/index.d.ts +0 -0
  50. /package/dist/{components → cjs/components}/Tree/styles.module.css +0 -0
  51. /package/dist/{components → cjs/components}/Tree/utils.d.ts +0 -0
  52. /package/dist/{components → cjs/components}/index.d.ts +0 -0
  53. /package/dist/{constants.d.ts → cjs/constants.d.ts} +0 -0
  54. /package/dist/{contexts → cjs/contexts}/TreeContext.d.ts +0 -0
  55. /package/dist/{helperComponents → cjs/helperComponents}/ExpandableTreeNode/ExpandableTreeNode.d.ts +0 -0
  56. /package/dist/{helperComponents → cjs/helperComponents}/ExpandableTreeNode/index.d.ts +0 -0
  57. /package/dist/{helperComponents → cjs/helperComponents}/ExpandableTreeNode/styles.module.css +0 -0
  58. /package/dist/{helperComponents → cjs/helperComponents}/TreeItem/TreeItem.d.ts +0 -0
  59. /package/dist/{helperComponents → cjs/helperComponents}/TreeItem/index.d.ts +0 -0
  60. /package/dist/{helperComponents → cjs/helperComponents}/TreeLine/TreeLine.d.ts +0 -0
  61. /package/dist/{helperComponents → cjs/helperComponents}/TreeLine/index.d.ts +0 -0
  62. /package/dist/{helperComponents → cjs/helperComponents}/TreeLine/styles.module.css +0 -0
  63. /package/dist/{helperComponents → cjs/helperComponents}/TreeNode/TreeNode.d.ts +0 -0
  64. /package/dist/{helperComponents → cjs/helperComponents}/TreeNode/components/TreeNodeActions.d.ts +0 -0
  65. /package/dist/{helperComponents → cjs/helperComponents}/TreeNode/components/index.d.ts +0 -0
  66. /package/dist/{helperComponents → cjs/helperComponents}/TreeNode/index.d.ts +0 -0
  67. /package/dist/{helperComponents → cjs/helperComponents}/TreeNode/styles.module.css +0 -0
  68. /package/dist/{helperComponents → cjs/helperComponents}/TreeNode/utils.d.ts +0 -0
  69. /package/dist/{helperComponents → cjs/helperComponents}/index.d.ts +0 -0
  70. /package/dist/{helpers.d.ts → cjs/helpers.d.ts} +0 -0
  71. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  72. /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
  73. /package/dist/{components → esm/components}/Tree/Tree.js +0 -0
  74. /package/dist/{components/Tree/index.js → esm/components/Tree/index.d.ts} +0 -0
  75. /package/dist/{components → esm/components/Tree}/index.js +0 -0
  76. /package/dist/{components → esm/components}/Tree/utils.js +0 -0
  77. /package/dist/{constants.js → esm/constants.js} +0 -0
  78. /package/dist/{contexts → esm/contexts}/TreeContext.js +0 -0
  79. /package/dist/{helperComponents → esm/helperComponents}/ExpandableTreeNode/ExpandableTreeNode.js +0 -0
  80. /package/dist/{helperComponents/ExpandableTreeNode/index.js → esm/helperComponents/ExpandableTreeNode/index.d.ts} +0 -0
  81. /package/dist/{helperComponents → esm/helperComponents}/TreeItem/TreeItem.js +0 -0
  82. /package/dist/{helperComponents/TreeItem/index.js → esm/helperComponents/TreeItem/index.d.ts} +0 -0
  83. /package/dist/{helperComponents → esm/helperComponents}/TreeLine/TreeLine.js +0 -0
  84. /package/dist/{helperComponents/TreeLine/index.js → esm/helperComponents/TreeLine/index.d.ts} +0 -0
  85. /package/dist/{helperComponents → esm/helperComponents}/TreeNode/TreeNode.js +0 -0
  86. /package/dist/{helperComponents → esm/helperComponents}/TreeNode/components/TreeNodeActions.js +0 -0
  87. /package/dist/{helperComponents/TreeNode/components/index.js → esm/helperComponents/TreeNode/components/index.d.ts} +0 -0
  88. /package/dist/{helperComponents/TreeNode/index.js → esm/helperComponents/TreeNode/index.d.ts} +0 -0
  89. /package/dist/{helperComponents → esm/helperComponents}/TreeNode/utils.js +0 -0
  90. /package/dist/{helperComponents/index.js → esm/helperComponents/index.d.ts} +0 -0
  91. /package/dist/{helpers.js → esm/helpers.js} +0 -0
  92. /package/dist/{index.js → esm/index.js} +0 -0
  93. /package/dist/{types.js → esm/types.js} +0 -0
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+
3
+ var __rest = void 0 && (void 0).__rest || function (s, e) {
4
+ var t = {};
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
8
+ }
9
+ return t;
10
+ };
11
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
12
+ return mod && mod.__esModule ? mod : {
13
+ "default": mod
14
+ };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", {
17
+ value: true
18
+ });
19
+ exports.TreeNode = TreeNode;
20
+ const jsx_runtime_1 = require("react/jsx-runtime");
21
+ const classnames_1 = __importDefault(require("classnames"));
22
+ const react_1 = require("react");
23
+ const button_1 = require("@snack-uikit/button");
24
+ const icons_1 = require("@snack-uikit/icons");
25
+ const toggles_1 = require("@snack-uikit/toggles");
26
+ const truncate_string_1 = require("@snack-uikit/truncate-string");
27
+ const typography_1 = require("@snack-uikit/typography");
28
+ const utils_1 = require("@snack-uikit/utils");
29
+ const constants_1 = require("../../constants");
30
+ const TreeContext_1 = require("../../contexts/TreeContext");
31
+ const helpers_1 = require("../../helpers");
32
+ const TreeLine_1 = require("../TreeLine");
33
+ const components_1 = require("./components");
34
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
35
+ const utils_2 = require("./utils");
36
+ function TreeNode(_a) {
37
+ var {
38
+ id,
39
+ title,
40
+ icon = (0, jsx_runtime_1.jsx)(icons_1.FileSVG, {
41
+ size: 24
42
+ }),
43
+ expandedIcon = (0, jsx_runtime_1.jsx)(icons_1.FolderOpenSVG, {
44
+ size: 24
45
+ }),
46
+ collapsedIcon = (0, jsx_runtime_1.jsx)(icons_1.FolderSVG, {
47
+ size: 24
48
+ }),
49
+ disabled,
50
+ onClick,
51
+ nested,
52
+ className,
53
+ onChevronClick,
54
+ onKeyDown,
55
+ isLoading,
56
+ parentNode,
57
+ tabIndexAvailable
58
+ } = _a,
59
+ rest = __rest(_a, ["id", "title", "icon", "expandedIcon", "collapsedIcon", "disabled", "onClick", "nested", "className", "onChevronClick", "onKeyDown", "isLoading", "parentNode", "tabIndexAvailable"]);
60
+ const {
61
+ isMultiSelect,
62
+ isSelectable,
63
+ onNodeClick,
64
+ selected,
65
+ expandedNodes,
66
+ onSelect,
67
+ nodeActions,
68
+ parentActions,
69
+ setFocusPosition,
70
+ resetFocusPosition,
71
+ focusedNodeId,
72
+ setFocusIndex,
73
+ focusableNodeIds,
74
+ showToggle,
75
+ showLines,
76
+ showIcons
77
+ } = (0, TreeContext_1.useTreeContext)();
78
+ const [isDroplistOpen, setDroplistOpen] = (0, react_1.useState)(false);
79
+ const [isDroplistTriggerFocused, setFocusDroplistTrigger] = (0, react_1.useState)(false);
80
+ const ref = (0, react_1.useRef)(null);
81
+ const isExpandable = Array.isArray(nested);
82
+ const isExpanded = isExpandable ? expandedNodes === null || expandedNodes === void 0 ? void 0 : expandedNodes.includes(id) : undefined;
83
+ const nestedNodesSelection = (0, react_1.useMemo)(() => {
84
+ if (!nested || !selected) return undefined;
85
+ return (0, helpers_1.checkNestedNodesSelection)(nested, Array.isArray(selected) ? selected : [selected]);
86
+ }, [nested, selected]);
87
+ const isSelected = (Array.isArray(selected) ? selected.includes(id) || (nestedNodesSelection === null || nestedNodesSelection === void 0 ? void 0 : nestedNodesSelection.allSelected) : selected === id) || false;
88
+ const isFocused = focusedNodeId === id;
89
+ (0, react_1.useEffect)(() => {
90
+ if (ref.current && isFocused) {
91
+ ref.current.focus();
92
+ }
93
+ }, [isFocused]);
94
+ const treeNodeIcon = (0, react_1.useMemo)(() => {
95
+ if (!showIcons) return undefined;
96
+ if (isExpandable) {
97
+ return isExpanded ? expandedIcon : collapsedIcon;
98
+ }
99
+ return icon;
100
+ }, [showIcons, isExpandable, icon, isExpanded, expandedIcon, collapsedIcon]);
101
+ const handleClick = e => {
102
+ onNodeClick({
103
+ id,
104
+ title,
105
+ disabled,
106
+ nested,
107
+ onClick
108
+ }, e);
109
+ };
110
+ const handleSelect = () => {
111
+ onSelect({
112
+ id,
113
+ disabled,
114
+ nested
115
+ }, parentNode);
116
+ };
117
+ const handleFocus = e => {
118
+ var _a;
119
+ setFocusPosition(id);
120
+ if (!e) {
121
+ setFocusDroplistTrigger(false);
122
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
123
+ }
124
+ };
125
+ const handleBlurActions = () => {
126
+ var _a;
127
+ if (isDroplistTriggerFocused && !isDroplistOpen) {
128
+ setFocusDroplistTrigger(false);
129
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.blur();
130
+ }
131
+ };
132
+ const handleKeyDown = e => {
133
+ var _a, _b;
134
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
135
+ const focusableCount = focusableNodeIds.length;
136
+ switch (e.key) {
137
+ case 'ArrowDown':
138
+ {
139
+ e.preventDefault();
140
+ setFocusIndex(function () {
141
+ let prev = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
142
+ if (prev >= focusableCount - 1) {
143
+ return focusableCount - 1;
144
+ }
145
+ return prev + 1;
146
+ });
147
+ return;
148
+ }
149
+ case 'ArrowUp':
150
+ {
151
+ e.preventDefault();
152
+ setFocusIndex(function () {
153
+ let prev = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
154
+ if (!prev) {
155
+ return 0;
156
+ }
157
+ return prev - 1;
158
+ });
159
+ return;
160
+ }
161
+ case 'ArrowRight':
162
+ {
163
+ e.preventDefault();
164
+ if (isExpanded || !isExpandable || disabled) {
165
+ setFocusDroplistTrigger(true);
166
+ }
167
+ return;
168
+ }
169
+ case 'ArrowLeft':
170
+ {
171
+ e.preventDefault();
172
+ if (isDroplistTriggerFocused) {
173
+ setFocusDroplistTrigger(false);
174
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
175
+ }
176
+ return;
177
+ }
178
+ case 'Escape':
179
+ {
180
+ (_b = ref.current) === null || _b === void 0 ? void 0 : _b.blur();
181
+ return;
182
+ }
183
+ case ' ':
184
+ case 'Enter':
185
+ {
186
+ e.preventDefault();
187
+ handleSelect();
188
+ return;
189
+ }
190
+ default:
191
+ return;
192
+ }
193
+ };
194
+ const getNodeActions = Boolean(nested) ? parentActions : nodeActions;
195
+ return (0, jsx_runtime_1.jsxs)("div", Object.assign({
196
+ role: 'presentation',
197
+ className: (0, classnames_1.default)(styles_module_scss_1.default.treeNode, className)
198
+ }, (0, utils_1.extractSupportProps)(rest), {
199
+ "data-node-id": id,
200
+ children: [parentNode && (0, jsx_runtime_1.jsx)(TreeLine_1.TreeLine, {
201
+ halfWidth: Boolean(nested),
202
+ horizontal: true,
203
+ visible: showLines,
204
+ "data-test-id": constants_1.TEST_IDS.line
205
+ }), !parentNode && !Boolean(nested) && (0, jsx_runtime_1.jsx)(TreeLine_1.TreeLine, {
206
+ visible: false
207
+ }), isExpandable && (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, {
208
+ size: 'xs',
209
+ icon: (0, jsx_runtime_1.jsx)(icons_1.ChevronRightSVG, {}),
210
+ loading: isLoading,
211
+ onClick: onChevronClick,
212
+ "data-expanded": isExpanded || undefined,
213
+ className: styles_module_scss_1.default.treeNodeExpandButton,
214
+ tabIndex: -1,
215
+ "data-test-id": constants_1.TEST_IDS.chevron
216
+ }), (0, jsx_runtime_1.jsxs)("div", {
217
+ role: 'treeitem',
218
+ "aria-expanded": isExpanded,
219
+ "aria-selected": isSelectable ? isSelected : undefined,
220
+ "aria-disabled": disabled,
221
+ "data-multiselect": isMultiSelect || undefined,
222
+ "data-droplist-active": isDroplistOpen || isDroplistTriggerFocused || undefined,
223
+ onClick: handleClick,
224
+ onKeyDown: handleKeyDown,
225
+ onFocus: handleFocus,
226
+ onBlur: resetFocusPosition,
227
+ tabIndex: tabIndexAvailable ? 0 : -1,
228
+ className: styles_module_scss_1.default.treeNodeContent,
229
+ "data-test-id": constants_1.TEST_IDS.item,
230
+ ref: ref,
231
+ children: [(isMultiSelect || showToggle) && (0, jsx_runtime_1.jsxs)("div", {
232
+ className: styles_module_scss_1.default.treeNodeCheckboxWrap,
233
+ children: [isMultiSelect && (0, jsx_runtime_1.jsx)(toggles_1.Checkbox, {
234
+ size: 's',
235
+ disabled: disabled,
236
+ checked: isSelected,
237
+ indeterminate: !isSelected && (nestedNodesSelection === null || nestedNodesSelection === void 0 ? void 0 : nestedNodesSelection.someSelected),
238
+ onChange: handleSelect,
239
+ onClick: utils_2.stopPropagationClick,
240
+ "data-test-id": constants_1.TEST_IDS.checkbox,
241
+ tabIndex: -1
242
+ }), showToggle && (0, jsx_runtime_1.jsx)(toggles_1.Radio, {
243
+ size: 's',
244
+ checked: isSelected,
245
+ disabled: disabled || !isSelected && (nestedNodesSelection === null || nestedNodesSelection === void 0 ? void 0 : nestedNodesSelection.someSelected),
246
+ "data-test-id": constants_1.TEST_IDS.radio,
247
+ tabIndex: -1
248
+ })]
249
+ }), treeNodeIcon && (0, jsx_runtime_1.jsx)("div", {
250
+ className: styles_module_scss_1.default.treeNodeIcon,
251
+ "data-test-id": constants_1.TEST_IDS.icon,
252
+ children: treeNodeIcon
253
+ }), (0, jsx_runtime_1.jsxs)(typography_1.Typography.SansBodyM, {
254
+ tag: 'div',
255
+ className: styles_module_scss_1.default.treeNodeTitle,
256
+ children: [typeof title === 'string' && (0, jsx_runtime_1.jsx)(truncate_string_1.TruncateString, {
257
+ text: title,
258
+ "data-test-id": constants_1.TEST_IDS.title
259
+ }), typeof title !== 'string' && title({
260
+ id,
261
+ disabled,
262
+ nested
263
+ })]
264
+ }), getNodeActions && (0, jsx_runtime_1.jsx)(components_1.TreeNodeActions, {
265
+ getNodeActions: getNodeActions,
266
+ node: {
267
+ id,
268
+ title,
269
+ disabled,
270
+ nested
271
+ },
272
+ focusNode: handleFocus,
273
+ onBlurActions: handleBlurActions,
274
+ isDroplistTriggerFocused: isDroplistTriggerFocused,
275
+ isDroplistOpen: isDroplistOpen,
276
+ setDroplistOpen: setDroplistOpen
277
+ })]
278
+ })]
279
+ }));
280
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
4
+ return mod && mod.__esModule ? mod : {
5
+ "default": mod
6
+ };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ exports.TreeNodeActions = TreeNodeActions;
12
+ const jsx_runtime_1 = require("react/jsx-runtime");
13
+ const react_1 = require("react");
14
+ const button_1 = require("@snack-uikit/button");
15
+ const icons_1 = require("@snack-uikit/icons");
16
+ const list_1 = require("@snack-uikit/list");
17
+ const constants_1 = require("../../../constants");
18
+ const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
19
+ const utils_1 = require("../utils");
20
+ function TreeNodeActions(_ref) {
21
+ let {
22
+ getNodeActions,
23
+ isDroplistTriggerFocused,
24
+ focusNode,
25
+ isDroplistOpen,
26
+ setDroplistOpen,
27
+ onBlurActions,
28
+ node
29
+ } = _ref;
30
+ const droplistActions = getNodeActions(node);
31
+ const localRef = (0, react_1.useRef)(null);
32
+ (0, react_1.useEffect)(() => {
33
+ if (localRef.current && isDroplistTriggerFocused) {
34
+ localRef.current.focus();
35
+ }
36
+ }, [isDroplistTriggerFocused, localRef]);
37
+ const handleKeyDown = e => {
38
+ var _a;
39
+ switch (e.key) {
40
+ case 'Tab':
41
+ {
42
+ focusNode();
43
+ setDroplistOpen(false);
44
+ e.preventDefault();
45
+ e.stopPropagation();
46
+ return;
47
+ }
48
+ case 'ArrowLeft':
49
+ {
50
+ if (isDroplistTriggerFocused) {
51
+ focusNode();
52
+ setDroplistOpen(false);
53
+ e.stopPropagation();
54
+ }
55
+ return;
56
+ }
57
+ case ' ':
58
+ case 'Enter':
59
+ {
60
+ e.stopPropagation();
61
+ return;
62
+ }
63
+ case 'ArrowDown':
64
+ {
65
+ if (isDroplistTriggerFocused) {
66
+ setDroplistOpen(true);
67
+ }
68
+ e.stopPropagation();
69
+ return;
70
+ }
71
+ case 'ArrowUp':
72
+ {
73
+ setDroplistOpen(false);
74
+ (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus();
75
+ e.stopPropagation();
76
+ return;
77
+ }
78
+ default:
79
+ return;
80
+ }
81
+ };
82
+ if (!droplistActions.length) {
83
+ return null;
84
+ }
85
+ return (0, jsx_runtime_1.jsx)("div", {
86
+ role: 'presentation',
87
+ className: styles_module_scss_1.default.treeNodeActions,
88
+ "data-focused": isDroplistTriggerFocused || undefined,
89
+ onClick: utils_1.stopPropagationClick,
90
+ onKeyDown: handleKeyDown,
91
+ onFocus: utils_1.stopPropagationFocus,
92
+ children: (0, jsx_runtime_1.jsx)(list_1.Droplist, {
93
+ open: isDroplistOpen,
94
+ onOpenChange: setDroplistOpen,
95
+ items: droplistActions,
96
+ closeDroplistOnItemClick: true,
97
+ placement: 'bottom-end',
98
+ triggerElemRef: localRef,
99
+ size: 'm',
100
+ children: (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, {
101
+ size: 'xs',
102
+ icon: (0, jsx_runtime_1.jsx)(icons_1.KebabSVG, {}),
103
+ onBlur: onBlurActions,
104
+ tabIndex: -1,
105
+ "data-test-id": constants_1.TEST_IDS.droplistTrigger
106
+ })
107
+ })
108
+ });
109
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = {
8
+ enumerable: true,
9
+ get: function () {
10
+ return m[k];
11
+ }
12
+ };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ } : function (o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ });
19
+ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+ __exportStar(require("./TreeNodeActions"), exports);
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = {
8
+ enumerable: true,
9
+ get: function () {
10
+ return m[k];
11
+ }
12
+ };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ } : function (o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ });
19
+ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+ __exportStar(require("./TreeNode"), exports);
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.stopPropagationClick = stopPropagationClick;
7
+ exports.stopPropagationFocus = stopPropagationFocus;
8
+ function stopPropagationClick(e) {
9
+ e.stopPropagation();
10
+ }
11
+ function stopPropagationFocus(e) {
12
+ e.stopPropagation();
13
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = {
8
+ enumerable: true,
9
+ get: function () {
10
+ return m[k];
11
+ }
12
+ };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ } : function (o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ });
19
+ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+ __exportStar(require("./ExpandableTreeNode"), exports);
26
+ __exportStar(require("./TreeNode"), exports);
27
+ __exportStar(require("./TreeLine"), exports);
28
+ __exportStar(require("./TreeItem"), exports);
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkNestedNodesSelection = checkNestedNodesSelection;
7
+ exports.findAllExpandedChildNodeIds = findAllExpandedChildNodeIds;
8
+ exports.lookupTreeForSelectedNodes = lookupTreeForSelectedNodes;
9
+ function findAllChildNodeIds(nodes) {
10
+ var _a;
11
+ const stack = [...nodes];
12
+ const ids = [];
13
+ let node;
14
+ while (node = stack.pop()) {
15
+ if (!node.disabled) {
16
+ ids.push(node.id);
17
+ if ((_a = node.nested) === null || _a === void 0 ? void 0 : _a.length) {
18
+ stack.push(...node.nested);
19
+ }
20
+ }
21
+ }
22
+ return ids;
23
+ }
24
+ function checkNestedNodesSelection(nodes, selectedKeys) {
25
+ const allIds = findAllChildNodeIds(nodes);
26
+ const selected = allIds.filter(id => selectedKeys.includes(id));
27
+ const someSelected = selected.length > 0;
28
+ const allSelected = someSelected && allIds.length === selected.length;
29
+ return {
30
+ someSelected: !allSelected && someSelected,
31
+ allSelected
32
+ };
33
+ }
34
+ function findAllExpandedChildNodeIds(nodes, expandedNodes) {
35
+ var _a;
36
+ const stack = [...nodes];
37
+ const ids = [];
38
+ let node;
39
+ while (node = stack.shift()) {
40
+ ids.push(node.id);
41
+ if (((_a = node.nested) === null || _a === void 0 ? void 0 : _a.length) && expandedNodes.includes(node.id)) {
42
+ stack.unshift(...node.nested);
43
+ }
44
+ }
45
+ return ids;
46
+ }
47
+ function lookupTreeForSelectedNodes(_ref) {
48
+ let {
49
+ node,
50
+ selectedNodes,
51
+ parentNode
52
+ } = _ref;
53
+ var _a;
54
+ const {
55
+ nested
56
+ } = node;
57
+ const childSelection = (nested === null || nested === void 0 ? void 0 : nested.length) ? checkNestedNodesSelection(nested, selectedNodes) : undefined;
58
+ const isSelected = childSelection ? childSelection.someSelected || childSelection.allSelected : selectedNodes.includes(node.id);
59
+ let updatedSelectedNodes = [];
60
+ const allIdsFromNode = [node.id];
61
+ if (nested === null || nested === void 0 ? void 0 : nested.length) {
62
+ allIdsFromNode.push(...findAllChildNodeIds(nested));
63
+ }
64
+ if (isSelected) {
65
+ updatedSelectedNodes = selectedNodes.filter(id => !allIdsFromNode.includes(id));
66
+ } else {
67
+ updatedSelectedNodes = selectedNodes.concat(allIdsFromNode);
68
+ }
69
+ if (parentNode) {
70
+ let parent = parentNode;
71
+ while (parent) {
72
+ if ((_a = parent.nested) === null || _a === void 0 ? void 0 : _a.length) {
73
+ const parentNestedSelection = checkNestedNodesSelection(parent.nested, updatedSelectedNodes);
74
+ if (isSelected) {
75
+ if (parentNestedSelection.allSelected || parentNestedSelection.someSelected) {
76
+ const parentIdIndex = updatedSelectedNodes.findIndex(id => id === (parent === null || parent === void 0 ? void 0 : parent.id));
77
+ if (parentIdIndex > -1) {
78
+ updatedSelectedNodes.splice(parentIdIndex, 1);
79
+ }
80
+ }
81
+ } else if (!isSelected && parentNestedSelection.allSelected) {
82
+ updatedSelectedNodes.push(parent.id);
83
+ }
84
+ }
85
+ parent = parent.parentNode;
86
+ }
87
+ }
88
+ return updatedSelectedNodes;
89
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = {
8
+ enumerable: true,
9
+ get: function () {
10
+ return m[k];
11
+ }
12
+ };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ } : function (o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ });
19
+ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+ __exportStar(require("./components"), exports);
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,4 @@
1
+ import { WithSupportProps } from '@snack-uikit/utils';
2
+ import { TreeBaseProps } from '../../types';
3
+ export type TreeProps = WithSupportProps<TreeBaseProps>;
4
+ export declare function Tree({ data, onNodeClick, onExpand, expandedNodes, nodeActions, parentActions, onDataLoad, showLines, showIcons, className, ...rest }: TreeProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ .tree{
2
+ box-sizing:border-box;
3
+ height:100%;
4
+ }
@@ -0,0 +1,2 @@
1
+ import { TreeBaseProps, TreeMultiSelect, TreeSingleSelect, TreeView } from '../../types';
2
+ export declare function extractSelectableProps({ selectionMode, selected, onSelect, }: Pick<TreeBaseProps, 'selectionMode' | 'selected' | 'onSelect'>): Pick<TreeSingleSelect, "selected" | "selectionMode" | "onSelect"> | Pick<TreeMultiSelect, "selected" | "selectionMode" | "onSelect"> | Pick<TreeView, "selected" | "selectionMode" | "onSelect">;
@@ -0,0 +1 @@
1
+ export * from './Tree';
@@ -0,0 +1 @@
1
+ export * from './Tree';
@@ -0,0 +1,21 @@
1
+ export declare const SELECTION_MODE: {
2
+ readonly Single: "single";
3
+ readonly Multi: "multi";
4
+ };
5
+ export declare const TRANSITION_TIMING: {
6
+ accordionFolding: number;
7
+ };
8
+ export declare const TEST_IDS: {
9
+ node: string;
10
+ line: string;
11
+ item: string;
12
+ chevron: string;
13
+ checkbox: string;
14
+ radio: string;
15
+ icon: string;
16
+ title: string;
17
+ droplistTrigger: string;
18
+ droplistAction: string;
19
+ expandable: string;
20
+ expandableContent: string;
21
+ };
@@ -0,0 +1,27 @@
1
+ import { Dispatch, ReactNode, SetStateAction } from 'react';
2
+ import { OnNodeClick, ParentNode, TreeBaseProps, TreeNodeId, TreeNodeProps } from '../types';
3
+ type TreeContextBaseProps = TreeBaseProps & {
4
+ showToggle?: boolean;
5
+ };
6
+ type TreeContextProps = Omit<TreeContextBaseProps, 'onSelect' | 'onExpand' | 'onNodeClick' | 'selected' | 'selectionMode'> & {
7
+ onExpand(node: TreeNodeProps): void;
8
+ onSelect(node: Pick<TreeNodeProps, 'id' | 'nested' | 'disabled'>, parentNode?: ParentNode): void;
9
+ selected?: TreeNodeId[] | TreeNodeId;
10
+ onNodeClick: OnNodeClick;
11
+ isMultiSelect: boolean;
12
+ isSingleSelect: boolean;
13
+ isSelectable: boolean;
14
+ focusedNodeId?: TreeNodeId;
15
+ setFocusPosition(id: TreeNodeId): void;
16
+ resetFocusPosition(): void;
17
+ setFocusIndex: Dispatch<SetStateAction<number | undefined>>;
18
+ focusableNodeIds: TreeNodeId[];
19
+ };
20
+ type TreeContextProviderProps = {
21
+ children: ReactNode;
22
+ value: TreeContextBaseProps;
23
+ };
24
+ export declare const TreeContext: import("react").Context<TreeContextProps>;
25
+ export declare function TreeContextProvider({ children, value }: TreeContextProviderProps): import("react/jsx-runtime").JSX.Element;
26
+ export declare const useTreeContext: () => TreeContextProps;
27
+ export {};