@expcat/tigercat-react 0.0.65 → 0.0.67

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 (196) hide show
  1. package/dist/styles/index.css +4 -0
  2. package/dist/styles/index.d.mts +2 -0
  3. package/package.json +12 -9
  4. package/dist/chunk-2DOPHSZP.js +0 -32
  5. package/dist/chunk-2TS6X5RA.js +0 -73
  6. package/dist/chunk-2Y327ZU4.js +0 -493
  7. package/dist/chunk-3OF7XPIQ.js +0 -90
  8. package/dist/chunk-3WPKVV4N.js +0 -140
  9. package/dist/chunk-5FRENLDC.js +0 -194
  10. package/dist/chunk-5QKMQRCW.js +0 -89
  11. package/dist/chunk-5ZVSFIZD.js +0 -50
  12. package/dist/chunk-6MGEGOYJ.js +0 -108
  13. package/dist/chunk-6PUSRC6S.js +0 -68
  14. package/dist/chunk-72ZRDBXN.js +0 -25
  15. package/dist/chunk-77D7VQMG.js +0 -43
  16. package/dist/chunk-7P6PHSFM.js +0 -548
  17. package/dist/chunk-AG6GVQ5O.js +0 -271
  18. package/dist/chunk-AQ6DHCP6.js +0 -53
  19. package/dist/chunk-AQQRWISY.js +0 -184
  20. package/dist/chunk-C5EFBJBR.js +0 -540
  21. package/dist/chunk-D3I2SY7X.js +0 -301
  22. package/dist/chunk-DZJUFU55.js +0 -300
  23. package/dist/chunk-EI2GHMQS.js +0 -37
  24. package/dist/chunk-ENR3RIMM.js +0 -205
  25. package/dist/chunk-EQWQXURG.js +0 -18
  26. package/dist/chunk-EUHWE7MN.js +0 -267
  27. package/dist/chunk-FAKTU64M.js +0 -67
  28. package/dist/chunk-FQ6UHRAO.js +0 -499
  29. package/dist/chunk-GX74TC62.js +0 -54
  30. package/dist/chunk-HDDBBZQH.js +0 -321
  31. package/dist/chunk-IFY46RWU.js +0 -25
  32. package/dist/chunk-IQINYCU6.js +0 -99
  33. package/dist/chunk-IY4LEJYF.js +0 -78
  34. package/dist/chunk-JW64IJP2.js +0 -210
  35. package/dist/chunk-KUCFT2OA.js +0 -43
  36. package/dist/chunk-LNKI6HQ3.js +0 -152
  37. package/dist/chunk-LXA2YBAO.js +0 -38
  38. package/dist/chunk-MKWXJZ3T.js +0 -74
  39. package/dist/chunk-NEULKOYJ.js +0 -48
  40. package/dist/chunk-NI2WNZRT.js +0 -38
  41. package/dist/chunk-OFCKGWTS.js +0 -12
  42. package/dist/chunk-OTRGVENC.js +0 -305
  43. package/dist/chunk-P273E6XE.js +0 -219
  44. package/dist/chunk-Q3DPJHNM.js +0 -407
  45. package/dist/chunk-QFVE7GKD.js +0 -109
  46. package/dist/chunk-QL6OBKEN.js +0 -84
  47. package/dist/chunk-QL6UEG3U.js +0 -27
  48. package/dist/chunk-QORSSZX4.js +0 -144
  49. package/dist/chunk-R4JSBXGG.js +0 -12
  50. package/dist/chunk-R5BQHZWB.js +0 -698
  51. package/dist/chunk-R7MS42PL.js +0 -90
  52. package/dist/chunk-TB2UHDOZ.js +0 -19
  53. package/dist/chunk-TBIEWDY5.js +0 -175
  54. package/dist/chunk-TJFS44SH.js +0 -48
  55. package/dist/chunk-TZ26HQAW.js +0 -85
  56. package/dist/chunk-U4ZVEPYD.js +0 -71
  57. package/dist/chunk-UFAXJVMD.js +0 -120
  58. package/dist/chunk-VJJ76I7U.js +0 -19
  59. package/dist/chunk-VO4WDK4K.js +0 -37
  60. package/dist/chunk-VSF4DF7N.js +0 -84
  61. package/dist/chunk-VVO4V4IK.js +0 -56
  62. package/dist/chunk-WK5HN4OH.js +0 -113
  63. package/dist/chunk-XZDJ5FRB.js +0 -333
  64. package/dist/chunk-YE2M2HNM.js +0 -168
  65. package/dist/chunk-YYGTJKP5.js +0 -39
  66. package/dist/chunk-ZREFCRX3.js +0 -52
  67. package/dist/components/Alert.d.ts +0 -24
  68. package/dist/components/Alert.js +0 -10
  69. package/dist/components/Avatar.d.ts +0 -12
  70. package/dist/components/Avatar.js +0 -10
  71. package/dist/components/Badge.d.ts +0 -12
  72. package/dist/components/Badge.js +0 -10
  73. package/dist/components/Breadcrumb.d.ts +0 -13
  74. package/dist/components/Breadcrumb.js +0 -14
  75. package/dist/components/BreadcrumbItem.d.ts +0 -21
  76. package/dist/components/BreadcrumbItem.js +0 -11
  77. package/dist/components/Button.d.ts +0 -8
  78. package/dist/components/Button.js +0 -10
  79. package/dist/components/Card.d.ts +0 -33
  80. package/dist/components/Card.js +0 -10
  81. package/dist/components/Checkbox.d.ts +0 -48
  82. package/dist/components/Checkbox.js +0 -11
  83. package/dist/components/CheckboxGroup.d.ts +0 -39
  84. package/dist/components/CheckboxGroup.js +0 -14
  85. package/dist/components/Code.d.ts +0 -9
  86. package/dist/components/Code.js +0 -16
  87. package/dist/components/Col.d.ts +0 -7
  88. package/dist/components/Col.js +0 -11
  89. package/dist/components/ConfigProvider.d.ts +0 -14
  90. package/dist/components/ConfigProvider.js +0 -14
  91. package/dist/components/Container.d.ts +0 -13
  92. package/dist/components/Container.js +0 -10
  93. package/dist/components/Content.d.ts +0 -9
  94. package/dist/components/Content.js +0 -10
  95. package/dist/components/DatePicker.d.ts +0 -24
  96. package/dist/components/DatePicker.js +0 -10
  97. package/dist/components/Descriptions.d.ts +0 -53
  98. package/dist/components/Descriptions.js +0 -16
  99. package/dist/components/Divider.d.ts +0 -12
  100. package/dist/components/Divider.js +0 -10
  101. package/dist/components/Drawer.d.ts +0 -19
  102. package/dist/components/Drawer.js +0 -11
  103. package/dist/components/Dropdown.d.ts +0 -22
  104. package/dist/components/Dropdown.js +0 -16
  105. package/dist/components/DropdownItem.d.ts +0 -17
  106. package/dist/components/DropdownItem.js +0 -13
  107. package/dist/components/DropdownMenu.d.ts +0 -13
  108. package/dist/components/DropdownMenu.js +0 -10
  109. package/dist/components/Footer.d.ts +0 -9
  110. package/dist/components/Footer.js +0 -10
  111. package/dist/components/Form.d.ts +0 -56
  112. package/dist/components/Form.js +0 -14
  113. package/dist/components/FormItem.d.ts +0 -16
  114. package/dist/components/FormItem.js +0 -11
  115. package/dist/components/Header.d.ts +0 -9
  116. package/dist/components/Header.js +0 -10
  117. package/dist/components/Icon.d.ts +0 -9
  118. package/dist/components/Icon.js +0 -10
  119. package/dist/components/Input.d.ts +0 -28
  120. package/dist/components/Input.js +0 -10
  121. package/dist/components/Layout.d.ts +0 -9
  122. package/dist/components/Layout.js +0 -10
  123. package/dist/components/Link.d.ts +0 -10
  124. package/dist/components/Link.js +0 -10
  125. package/dist/components/List.d.ts +0 -94
  126. package/dist/components/List.js +0 -12
  127. package/dist/components/Loading.d.ts +0 -8
  128. package/dist/components/Loading.js +0 -10
  129. package/dist/components/Menu.d.ts +0 -35
  130. package/dist/components/Menu.js +0 -14
  131. package/dist/components/MenuItem.d.ts +0 -20
  132. package/dist/components/MenuItem.js +0 -11
  133. package/dist/components/MenuItemGroup.d.ts +0 -16
  134. package/dist/components/MenuItemGroup.js +0 -12
  135. package/dist/components/Message.d.ts +0 -44
  136. package/dist/components/Message.js +0 -20
  137. package/dist/components/Modal.d.ts +0 -41
  138. package/dist/components/Modal.js +0 -11
  139. package/dist/components/Notification.d.ts +0 -40
  140. package/dist/components/Notification.js +0 -20
  141. package/dist/components/Pagination.d.ts +0 -11
  142. package/dist/components/Pagination.js +0 -16
  143. package/dist/components/Popconfirm.d.ts +0 -34
  144. package/dist/components/Popconfirm.js +0 -10
  145. package/dist/components/Popover.d.ts +0 -14
  146. package/dist/components/Popover.js +0 -10
  147. package/dist/components/Progress.d.ts +0 -8
  148. package/dist/components/Progress.js +0 -10
  149. package/dist/components/Radio.d.ts +0 -20
  150. package/dist/components/Radio.js +0 -11
  151. package/dist/components/RadioGroup.d.ts +0 -28
  152. package/dist/components/RadioGroup.js +0 -14
  153. package/dist/components/Row.d.ts +0 -11
  154. package/dist/components/Row.js +0 -14
  155. package/dist/components/Select.d.ts +0 -23
  156. package/dist/components/Select.js +0 -10
  157. package/dist/components/Sidebar.d.ts +0 -9
  158. package/dist/components/Sidebar.js +0 -10
  159. package/dist/components/Skeleton.d.ts +0 -7
  160. package/dist/components/Skeleton.js +0 -10
  161. package/dist/components/Slider.d.ts +0 -12
  162. package/dist/components/Slider.js +0 -10
  163. package/dist/components/Space.d.ts +0 -11
  164. package/dist/components/Space.js +0 -10
  165. package/dist/components/Steps.d.ts +0 -31
  166. package/dist/components/Steps.js +0 -14
  167. package/dist/components/StepsItem.d.ts +0 -36
  168. package/dist/components/StepsItem.js +0 -10
  169. package/dist/components/SubMenu.d.ts +0 -20
  170. package/dist/components/SubMenu.js +0 -13
  171. package/dist/components/Switch.d.ts +0 -12
  172. package/dist/components/Switch.js +0 -10
  173. package/dist/components/TabPane.d.ts +0 -42
  174. package/dist/components/TabPane.js +0 -10
  175. package/dist/components/Table.d.ts +0 -46
  176. package/dist/components/Table.js +0 -10
  177. package/dist/components/Tabs.d.ts +0 -43
  178. package/dist/components/Tabs.js +0 -14
  179. package/dist/components/Tag.d.ts +0 -16
  180. package/dist/components/Tag.js +0 -10
  181. package/dist/components/Text.d.ts +0 -9
  182. package/dist/components/Text.js +0 -10
  183. package/dist/components/Textarea.d.ts +0 -13
  184. package/dist/components/Textarea.js +0 -10
  185. package/dist/components/TimePicker.d.ts +0 -28
  186. package/dist/components/TimePicker.js +0 -10
  187. package/dist/components/Timeline.d.ts +0 -47
  188. package/dist/components/Timeline.js +0 -10
  189. package/dist/components/Tooltip.d.ts +0 -15
  190. package/dist/components/Tooltip.js +0 -10
  191. package/dist/components/Tree.d.ts +0 -154
  192. package/dist/components/Tree.js +0 -16
  193. package/dist/components/Upload.d.ts +0 -16
  194. package/dist/components/Upload.js +0 -11
  195. package/dist/index.d.ts +0 -77
  196. package/dist/index.js +0 -364
@@ -1,540 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var tigercatCore = require('@expcat/tigercat-core');
5
- var jsxRuntime = require('react/jsx-runtime');
6
-
7
- // src/components/Tree.tsx
8
- var spinnerSvg = tigercatCore.getSpinnerSVG("spinner");
9
- var ExpandIcon = ({
10
- expanded,
11
- hasChildren
12
- }) => {
13
- if (!hasChildren) {
14
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: tigercatCore.treeNodeIndentClasses });
15
- }
16
- return /* @__PURE__ */ jsxRuntime.jsx(
17
- "svg",
18
- {
19
- className: tigercatCore.getTreeNodeExpandIconClasses(expanded),
20
- width: "16",
21
- height: "16",
22
- viewBox: "0 0 16 16",
23
- fill: "currentColor",
24
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 4l4 4-4 4V4z" })
25
- }
26
- );
27
- };
28
- var LoadingSpinner = () => /* @__PURE__ */ jsxRuntime.jsx(
29
- "svg",
30
- {
31
- className: tigercatCore.treeLoadingClasses,
32
- xmlns: "http://www.w3.org/2000/svg",
33
- fill: "none",
34
- viewBox: spinnerSvg.viewBox,
35
- children: spinnerSvg.elements.map((el, index) => {
36
- if (el.type === "circle") return /* @__PURE__ */ jsxRuntime.jsx("circle", { ...el.attrs }, index);
37
- if (el.type === "path") return /* @__PURE__ */ jsxRuntime.jsx("path", { ...el.attrs }, index);
38
- return null;
39
- })
40
- }
41
- );
42
- var Tree = ({
43
- treeData = [],
44
- selectionMode,
45
- checkable = false,
46
- showIcon = true,
47
- showLine = false,
48
- defaultExpandedKeys = [],
49
- defaultSelectedKeys = [],
50
- defaultCheckedKeys = [],
51
- expandedKeys: controlledExpandedKeys,
52
- selectedKeys: controlledSelectedKeys,
53
- checkedKeys: controlledCheckedKeys,
54
- defaultExpandAll = false,
55
- checkStrictly = false,
56
- checkStrategy = "all",
57
- selectable = true,
58
- multiple = false,
59
- loadData,
60
- filterValue = "",
61
- filterFn,
62
- autoExpandParent = true,
63
- blockNode = false,
64
- emptyText = "No data",
65
- ariaLabel = "Tree",
66
- onExpand,
67
- onSelect,
68
- onCheck,
69
- onNodeClick,
70
- onNodeExpand,
71
- onNodeCollapse,
72
- className
73
- }) => {
74
- const itemRefs = react.useRef(/* @__PURE__ */ new Map());
75
- const effectiveSelectable = react.useMemo(() => {
76
- if (selectionMode !== void 0) {
77
- return selectionMode !== "none";
78
- }
79
- return selectable;
80
- }, [selectionMode, selectable]);
81
- const effectiveMultiple = react.useMemo(() => {
82
- if (selectionMode !== void 0) {
83
- return selectionMode === "multiple";
84
- }
85
- return multiple;
86
- }, [selectionMode, multiple]);
87
- const [internalExpandedKeys, setInternalExpandedKeys] = react.useState(() => {
88
- if (controlledExpandedKeys !== void 0) {
89
- return new Set(controlledExpandedKeys);
90
- }
91
- if (defaultExpandAll) {
92
- return new Set(tigercatCore.getAllKeys(treeData));
93
- }
94
- if (defaultExpandedKeys && defaultExpandedKeys.length > 0) {
95
- return new Set(defaultExpandedKeys);
96
- }
97
- return /* @__PURE__ */ new Set();
98
- });
99
- const [internalSelectedKeys, setInternalSelectedKeys] = react.useState(
100
- () => new Set(controlledSelectedKeys !== void 0 ? controlledSelectedKeys : defaultSelectedKeys)
101
- );
102
- const [internalCheckedState, setInternalCheckedState] = react.useState(() => {
103
- if (controlledCheckedKeys !== void 0) {
104
- if (Array.isArray(controlledCheckedKeys)) {
105
- return tigercatCore.calculateCheckedState(treeData, controlledCheckedKeys, checkStrictly);
106
- }
107
- return controlledCheckedKeys;
108
- }
109
- return tigercatCore.calculateCheckedState(treeData, defaultCheckedKeys, checkStrictly);
110
- });
111
- const [loadingNodes, setLoadingNodes] = react.useState(/* @__PURE__ */ new Set());
112
- const [filteredNodeKeys, setFilteredNodeKeys] = react.useState(/* @__PURE__ */ new Set());
113
- const [activeKey, setActiveKey] = react.useState();
114
- const computedExpandedKeys = react.useMemo(() => {
115
- if (controlledExpandedKeys !== void 0) {
116
- return new Set(controlledExpandedKeys);
117
- }
118
- return internalExpandedKeys;
119
- }, [controlledExpandedKeys, internalExpandedKeys]);
120
- const visibleItems = react.useMemo(
121
- () => tigercatCore.getVisibleTreeItems(treeData, computedExpandedKeys, filteredNodeKeys),
122
- [treeData, computedExpandedKeys, filteredNodeKeys]
123
- );
124
- const focusableKeys = react.useMemo(
125
- () => visibleItems.filter((i) => !i.node.disabled).map((i) => i.key),
126
- [visibleItems]
127
- );
128
- const defaultActiveKey = focusableKeys[0];
129
- react.useEffect(() => {
130
- if (activeKey === void 0) return;
131
- itemRefs.current.get(activeKey)?.focus();
132
- }, [activeKey]);
133
- const computedSelectedKeys = react.useMemo(() => {
134
- if (controlledSelectedKeys !== void 0) {
135
- return new Set(controlledSelectedKeys);
136
- }
137
- return internalSelectedKeys;
138
- }, [controlledSelectedKeys, internalSelectedKeys]);
139
- const computedCheckedState = react.useMemo(() => {
140
- if (controlledCheckedKeys !== void 0) {
141
- if (Array.isArray(controlledCheckedKeys)) {
142
- return tigercatCore.calculateCheckedState(treeData, controlledCheckedKeys, checkStrictly);
143
- }
144
- return controlledCheckedKeys;
145
- }
146
- return internalCheckedState;
147
- }, [controlledCheckedKeys, internalCheckedState, treeData, checkStrictly]);
148
- react.useEffect(() => {
149
- if (filterValue) {
150
- const matched = tigercatCore.filterTreeNodes(treeData, filterValue, filterFn);
151
- setFilteredNodeKeys(matched);
152
- if (autoExpandParent) {
153
- const autoExpand = tigercatCore.getAutoExpandKeys(treeData, matched);
154
- if (controlledExpandedKeys === void 0) {
155
- setInternalExpandedKeys((prev) => /* @__PURE__ */ new Set([...prev, ...autoExpand]));
156
- }
157
- }
158
- } else {
159
- setFilteredNodeKeys(/* @__PURE__ */ new Set());
160
- }
161
- }, [filterValue, treeData, filterFn, autoExpandParent, controlledExpandedKeys]);
162
- const handleExpand = react.useCallback(
163
- (nodeKey) => {
164
- const node = tigercatCore.findNode(treeData, nodeKey);
165
- if (!node) return;
166
- const newExpandedKeys = new Set(computedExpandedKeys);
167
- const isExpanded = newExpandedKeys.has(nodeKey);
168
- if (isExpanded) {
169
- newExpandedKeys.delete(nodeKey);
170
- onNodeCollapse?.(node, nodeKey);
171
- } else {
172
- newExpandedKeys.add(nodeKey);
173
- onNodeExpand?.(node, nodeKey);
174
- if (loadData && !node.children && !node.isLeaf && !loadingNodes.has(nodeKey)) {
175
- setLoadingNodes((prev) => /* @__PURE__ */ new Set([...prev, nodeKey]));
176
- loadData(node).then((children) => {
177
- node.children = children;
178
- setLoadingNodes((prev) => {
179
- const next = new Set(prev);
180
- next.delete(nodeKey);
181
- return next;
182
- });
183
- }).catch(() => {
184
- setLoadingNodes((prev) => {
185
- const next = new Set(prev);
186
- next.delete(nodeKey);
187
- return next;
188
- });
189
- newExpandedKeys.delete(nodeKey);
190
- });
191
- }
192
- }
193
- if (controlledExpandedKeys === void 0) {
194
- setInternalExpandedKeys(newExpandedKeys);
195
- }
196
- onExpand?.(Array.from(newExpandedKeys), {
197
- expanded: !isExpanded,
198
- node
199
- });
200
- },
201
- [
202
- treeData,
203
- computedExpandedKeys,
204
- loadData,
205
- loadingNodes,
206
- controlledExpandedKeys,
207
- onExpand,
208
- onNodeExpand,
209
- onNodeCollapse
210
- ]
211
- );
212
- const handleSelect = react.useCallback(
213
- (nodeKey, event) => {
214
- const node = tigercatCore.findNode(treeData, nodeKey);
215
- if (!node || node.disabled || !effectiveSelectable) return;
216
- const newSelectedKeys = new Set(computedSelectedKeys);
217
- if (effectiveMultiple) {
218
- if (newSelectedKeys.has(nodeKey)) {
219
- newSelectedKeys.delete(nodeKey);
220
- } else {
221
- newSelectedKeys.add(nodeKey);
222
- }
223
- } else {
224
- newSelectedKeys.clear();
225
- newSelectedKeys.add(nodeKey);
226
- }
227
- if (controlledSelectedKeys === void 0) {
228
- setInternalSelectedKeys(newSelectedKeys);
229
- }
230
- const selectedKeysArray = Array.from(newSelectedKeys);
231
- onSelect?.(selectedKeysArray, {
232
- selected: newSelectedKeys.has(nodeKey),
233
- selectedNodes: selectedKeysArray.map((k) => tigercatCore.findNode(treeData, k)).filter(Boolean),
234
- node,
235
- event
236
- });
237
- },
238
- [
239
- treeData,
240
- computedSelectedKeys,
241
- effectiveSelectable,
242
- effectiveMultiple,
243
- controlledSelectedKeys,
244
- onSelect
245
- ]
246
- );
247
- const handleCheck = react.useCallback(
248
- (nodeKey, checked) => {
249
- const node = tigercatCore.findNode(treeData, nodeKey);
250
- if (!node || node.disabled) return;
251
- const currentCheckedKeys = computedCheckedState.checked;
252
- const newCheckedState = tigercatCore.handleNodeCheck(
253
- treeData,
254
- nodeKey,
255
- checked,
256
- currentCheckedKeys,
257
- checkStrictly
258
- );
259
- if (controlledCheckedKeys === void 0) {
260
- setInternalCheckedState(newCheckedState);
261
- }
262
- const returnKeys = tigercatCore.getCheckedKeysByStrategy(newCheckedState, treeData, checkStrategy);
263
- onCheck?.(returnKeys, {
264
- checked,
265
- checkedNodes: newCheckedState.checked.map((k) => tigercatCore.findNode(treeData, k)).filter(Boolean),
266
- node,
267
- checkedNodesPositions: newCheckedState
268
- });
269
- },
270
- [treeData, computedCheckedState, checkStrictly, checkStrategy, controlledCheckedKeys, onCheck]
271
- );
272
- const handleKeyDown = react.useCallback(
273
- (e, node, isExpanded, isChecked) => {
274
- if (node.disabled) return;
275
- const currentKey = activeKey ?? defaultActiveKey ?? node.key;
276
- const currentIndex = focusableKeys.findIndex((k) => k === currentKey);
277
- const isExpandable = !!(node.children && node.children.length > 0) || !!(loadData && !node.isLeaf);
278
- const parents = tigercatCore.getParentKeys(treeData, node.key);
279
- const parentKey = parents[parents.length - 1];
280
- const getFirstChildKey = () => {
281
- const list = visibleItems;
282
- const index = list.findIndex((i) => i.key === node.key);
283
- if (index < 0) return void 0;
284
- const base = list[index];
285
- for (let i = index + 1; i < list.length; i++) {
286
- const item = list[i];
287
- if (item.level <= base.level) break;
288
- if (item.parentKey === node.key && !item.node.disabled) return item.key;
289
- }
290
- return void 0;
291
- };
292
- if (e.key === "ArrowDown") {
293
- e.preventDefault();
294
- setActiveKey(focusableKeys[currentIndex + 1] ?? currentKey);
295
- return;
296
- }
297
- if (e.key === "ArrowUp") {
298
- e.preventDefault();
299
- setActiveKey(focusableKeys[currentIndex - 1] ?? currentKey);
300
- return;
301
- }
302
- if (e.key === "Home") {
303
- e.preventDefault();
304
- setActiveKey(focusableKeys[0] ?? currentKey);
305
- return;
306
- }
307
- if (e.key === "End") {
308
- e.preventDefault();
309
- setActiveKey(focusableKeys[focusableKeys.length - 1] ?? currentKey);
310
- return;
311
- }
312
- if (e.key === "ArrowRight") {
313
- e.preventDefault();
314
- if (isExpandable && !isExpanded) {
315
- handleExpand(node.key);
316
- return;
317
- }
318
- if (isExpandable && isExpanded) {
319
- setActiveKey(getFirstChildKey() ?? currentKey);
320
- }
321
- return;
322
- }
323
- if (e.key === "ArrowLeft") {
324
- e.preventDefault();
325
- if (isExpandable && isExpanded) {
326
- handleExpand(node.key);
327
- return;
328
- }
329
- if (parentKey !== void 0) {
330
- setActiveKey(parentKey);
331
- }
332
- return;
333
- }
334
- if (e.key === "Escape") {
335
- e.preventDefault();
336
- if (isExpandable && isExpanded) {
337
- handleExpand(node.key);
338
- return;
339
- }
340
- if (parentKey !== void 0) {
341
- if (computedExpandedKeys.has(parentKey)) {
342
- handleExpand(parentKey);
343
- }
344
- setActiveKey(parentKey);
345
- }
346
- return;
347
- }
348
- if (e.key === "Enter") {
349
- e.preventDefault();
350
- if (effectiveSelectable) {
351
- handleSelect(node.key, e);
352
- return;
353
- }
354
- if (isExpandable) {
355
- handleExpand(node.key);
356
- }
357
- return;
358
- }
359
- if (e.key === " ") {
360
- e.preventDefault();
361
- if (checkable) {
362
- handleCheck(node.key, !isChecked);
363
- return;
364
- }
365
- if (isExpandable) {
366
- handleExpand(node.key);
367
- }
368
- }
369
- },
370
- [
371
- activeKey,
372
- defaultActiveKey,
373
- focusableKeys,
374
- visibleItems,
375
- treeData,
376
- loadData,
377
- checkable,
378
- computedExpandedKeys,
379
- effectiveSelectable,
380
- handleExpand,
381
- handleSelect,
382
- handleCheck
383
- ]
384
- );
385
- const handleNodeClickInternal = react.useCallback(
386
- (node, event) => {
387
- if (node.disabled) return;
388
- onNodeClick?.(node, event);
389
- },
390
- [onNodeClick]
391
- );
392
- const renderTreeNode = react.useCallback(
393
- (node, level, _parentKey) => {
394
- const hasChildren = !!(node.children && node.children.length > 0);
395
- const isExpanded = computedExpandedKeys.has(node.key);
396
- const isSelected = computedSelectedKeys.has(node.key);
397
- const isChecked = computedCheckedState.checked.includes(node.key);
398
- const isHalfChecked = computedCheckedState.halfChecked.includes(node.key);
399
- const isLoading = loadingNodes.has(node.key);
400
- const isFiltered = filteredNodeKeys.size > 0;
401
- const isMatched = filteredNodeKeys.has(node.key);
402
- const isVisible = !isFiltered || isMatched;
403
- const isExpandable = hasChildren || !!(loadData && !node.isLeaf);
404
- const isFocusable = !node.disabled && node.key === (activeKey ?? defaultActiveKey);
405
- if (!isVisible) {
406
- return null;
407
- }
408
- const indent = [];
409
- for (let i = 0; i < level; i++) {
410
- indent.push(/* @__PURE__ */ jsxRuntime.jsx("span", { className: tigercatCore.treeNodeIndentClasses }, i));
411
- }
412
- const nodeContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
413
- indent,
414
- /* @__PURE__ */ jsxRuntime.jsx(
415
- "span",
416
- {
417
- className: isExpandable ? "cursor-pointer" : "",
418
- onClick: (e) => {
419
- e.stopPropagation();
420
- if (isExpandable) {
421
- setActiveKey(node.key);
422
- handleExpand(node.key);
423
- }
424
- },
425
- children: /* @__PURE__ */ jsxRuntime.jsx(ExpandIcon, { expanded: isExpanded, hasChildren: isExpandable })
426
- }
427
- ),
428
- checkable && /* @__PURE__ */ jsxRuntime.jsx(
429
- "input",
430
- {
431
- type: "checkbox",
432
- "aria-label": `Select ${node.label}`,
433
- className: tigercatCore.treeNodeCheckboxClasses,
434
- checked: isChecked,
435
- ref: (input) => {
436
- if (input) {
437
- input.indeterminate = isHalfChecked;
438
- }
439
- },
440
- disabled: node.disabled,
441
- onClick: (e) => {
442
- e.stopPropagation();
443
- },
444
- onChange: (e) => {
445
- handleCheck(node.key, e.target.checked);
446
- }
447
- }
448
- ),
449
- showIcon && node.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tigercatCore.treeNodeIconClasses, children: node.icon }),
450
- /* @__PURE__ */ jsxRuntime.jsx(
451
- "span",
452
- {
453
- className: tigercatCore.classNames(
454
- tigercatCore.treeNodeLabelClasses,
455
- isFiltered && isMatched ? "font-semibold text-[var(--tiger-primary,#2563eb)]" : ""
456
- ),
457
- children: node.label
458
- }
459
- ),
460
- isLoading && /* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner, {})
461
- ] });
462
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tigercatCore.treeNodeWrapperClasses, children: [
463
- /* @__PURE__ */ jsxRuntime.jsx(
464
- "div",
465
- {
466
- className: tigercatCore.getTreeNodeClasses(isSelected, !!node.disabled, blockNode),
467
- ref: (el) => {
468
- itemRefs.current.set(node.key, el);
469
- },
470
- role: "treeitem",
471
- "aria-level": level + 1,
472
- "aria-disabled": node.disabled || void 0,
473
- "aria-selected": effectiveSelectable ? isSelected : void 0,
474
- "aria-expanded": isExpandable ? isExpanded : void 0,
475
- "aria-checked": checkable ? isHalfChecked ? "mixed" : isChecked : void 0,
476
- tabIndex: isFocusable ? 0 : -1,
477
- onFocus: () => {
478
- if (!node.disabled) setActiveKey(node.key);
479
- },
480
- onKeyDown: (e) => handleKeyDown(e, node, isExpanded, isChecked),
481
- onClick: (e) => {
482
- setActiveKey(node.key);
483
- handleNodeClickInternal(node, e);
484
- if (effectiveSelectable && !node.disabled) {
485
- handleSelect(node.key, e);
486
- }
487
- },
488
- children: nodeContent
489
- }
490
- ),
491
- hasChildren && isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: tigercatCore.classNames(tigercatCore.treeNodeChildrenClasses, showLine && tigercatCore.treeLineClasses), children: node.children.map((child) => renderTreeNode(child, level + 1, node.key)) })
492
- ] }, node.key);
493
- },
494
- [
495
- computedExpandedKeys,
496
- computedSelectedKeys,
497
- computedCheckedState,
498
- loadingNodes,
499
- filteredNodeKeys,
500
- activeKey,
501
- defaultActiveKey,
502
- loadData,
503
- checkable,
504
- blockNode,
505
- effectiveSelectable,
506
- showIcon,
507
- showLine,
508
- handleExpand,
509
- handleCheck,
510
- handleSelect,
511
- handleNodeClickInternal,
512
- handleKeyDown
513
- ]
514
- );
515
- if (!treeData || treeData.length === 0) {
516
- return /* @__PURE__ */ jsxRuntime.jsx(
517
- "div",
518
- {
519
- className: tigercatCore.classNames(tigercatCore.treeBaseClasses, "p-4", className),
520
- role: "tree",
521
- "aria-label": ariaLabel,
522
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: tigercatCore.treeEmptyStateClasses, children: emptyText })
523
- }
524
- );
525
- }
526
- return /* @__PURE__ */ jsxRuntime.jsx(
527
- "div",
528
- {
529
- className: tigercatCore.classNames(tigercatCore.treeBaseClasses, className),
530
- role: "tree",
531
- "aria-label": ariaLabel,
532
- "aria-multiselectable": effectiveMultiple || void 0,
533
- children: treeData.map((node) => renderTreeNode(node, 0))
534
- }
535
- );
536
- };
537
- var Tree_default = Tree;
538
-
539
- exports.Tree = Tree;
540
- exports.Tree_default = Tree_default;