@rainbow-oh/yee-c 0.6.4 → 0.8.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 (145) hide show
  1. package/dist/cjs/Button/style/index.less +5 -4
  2. package/dist/cjs/Drawer/drawer.js +1 -1
  3. package/dist/cjs/Drawer/interface.d.ts +1 -1
  4. package/dist/cjs/Drawer/style/index.less +1 -0
  5. package/dist/cjs/Form/form-store.d.ts +2 -1
  6. package/dist/cjs/Form/form-store.js +32 -17
  7. package/dist/cjs/List/demo/virtual.d.ts +3 -0
  8. package/dist/cjs/List/demo/virtual.js +53 -0
  9. package/dist/cjs/List/hooks/useListKeyboard.d.ts +28 -0
  10. package/dist/cjs/List/hooks/useListKeyboard.js +188 -0
  11. package/dist/cjs/List/interface.d.ts +29 -2
  12. package/dist/cjs/List/list.js +141 -21
  13. package/dist/cjs/List/style/index.less +24 -0
  14. package/dist/cjs/Select/demo/columns.d.ts +3 -0
  15. package/dist/cjs/Select/demo/columns.js +62 -0
  16. package/dist/cjs/Select/hooks/useSelectKeyboard.d.ts +13 -1
  17. package/dist/cjs/Select/hooks/useSelectKeyboard.js +81 -10
  18. package/dist/cjs/Select/interface.d.ts +30 -3
  19. package/dist/cjs/Select/option.js +4 -3
  20. package/dist/cjs/Select/options.js +90 -8
  21. package/dist/cjs/Select/select.js +32 -8
  22. package/dist/cjs/Select/style/index.less +14 -0
  23. package/dist/cjs/Selector/interface.d.ts +4 -0
  24. package/dist/cjs/Selector/selector.js +5 -3
  25. package/dist/cjs/Table/hooks/useColumns.js +1 -1
  26. package/dist/cjs/Table/interface.d.ts +1 -1
  27. package/dist/cjs/Table/style/index.less +35 -11
  28. package/dist/cjs/Table/table.js +57 -7
  29. package/dist/cjs/Table/tbody/cell.js +1 -1
  30. package/dist/cjs/Table/util/header.d.ts +3 -1
  31. package/dist/cjs/Table/util/header.js +30 -3
  32. package/dist/cjs/Tree/demo/draggable.js +2 -0
  33. package/dist/cjs/Tree/interface.d.ts +46 -23
  34. package/dist/cjs/Tree/tree-node.d.ts +1 -1
  35. package/dist/cjs/Tree/tree-node.js +30 -23
  36. package/dist/cjs/Tree/tree.d.ts +13 -12
  37. package/dist/cjs/Tree/tree.js +452 -227
  38. package/dist/cjs/Tree/utils/tree-tools.d.ts +43 -10
  39. package/dist/cjs/Tree/utils/tree-tools.js +129 -91
  40. package/dist/cjs/locale/context.d.ts +5 -4
  41. package/dist/cjs/locale/context.js +15 -8
  42. package/dist/cjs/locale/interface.d.ts +20 -0
  43. package/dist/cjs/locale/util.d.ts +3 -3
  44. package/dist/cjs/style/color.css +3 -0
  45. package/dist/cjs/style/size.css +2 -1
  46. package/dist/cjs/style/themes.css +1 -1
  47. package/dist/cjs/style/variables.css +6 -2
  48. package/dist/cjs/utils/isEqual.js +5 -7
  49. package/dist/cjs/version.d.ts +1 -1
  50. package/dist/cjs/version.js +1 -1
  51. package/dist/esm/Button/style/index.less +5 -4
  52. package/dist/esm/Drawer/drawer.js +2 -1
  53. package/dist/esm/Drawer/interface.d.ts +1 -1
  54. package/dist/esm/Drawer/style/index.less +1 -0
  55. package/dist/esm/Form/form-store.d.ts +2 -1
  56. package/dist/esm/Form/form-store.js +40 -19
  57. package/dist/esm/List/demo/virtual.d.ts +3 -0
  58. package/dist/esm/List/demo/virtual.js +22 -0
  59. package/dist/esm/List/hooks/useListKeyboard.d.ts +28 -0
  60. package/dist/esm/List/hooks/useListKeyboard.js +173 -0
  61. package/dist/esm/List/interface.d.ts +29 -2
  62. package/dist/esm/List/list.js +171 -14
  63. package/dist/esm/List/style/index.less +24 -0
  64. package/dist/esm/Select/demo/columns.d.ts +3 -0
  65. package/dist/esm/Select/demo/columns.js +36 -0
  66. package/dist/esm/Select/hooks/useSelectKeyboard.d.ts +13 -1
  67. package/dist/esm/Select/hooks/useSelectKeyboard.js +91 -14
  68. package/dist/esm/Select/interface.d.ts +30 -3
  69. package/dist/esm/Select/option.js +6 -2
  70. package/dist/esm/Select/options.js +114 -32
  71. package/dist/esm/Select/select.js +40 -11
  72. package/dist/esm/Select/style/index.less +14 -0
  73. package/dist/esm/Selector/interface.d.ts +4 -0
  74. package/dist/esm/Selector/selector.js +10 -4
  75. package/dist/esm/Table/hooks/useColumns.js +1 -1
  76. package/dist/esm/Table/interface.d.ts +1 -1
  77. package/dist/esm/Table/style/index.less +35 -11
  78. package/dist/esm/Table/table.js +54 -2
  79. package/dist/esm/Table/tbody/cell.js +1 -1
  80. package/dist/esm/Table/util/header.d.ts +3 -1
  81. package/dist/esm/Table/util/header.js +30 -2
  82. package/dist/esm/Tree/demo/draggable.js +2 -0
  83. package/dist/esm/Tree/interface.d.ts +46 -23
  84. package/dist/esm/Tree/tree-node.d.ts +1 -1
  85. package/dist/esm/Tree/tree-node.js +26 -31
  86. package/dist/esm/Tree/tree.d.ts +13 -12
  87. package/dist/esm/Tree/tree.js +572 -163
  88. package/dist/esm/Tree/utils/tree-tools.d.ts +43 -10
  89. package/dist/esm/Tree/utils/tree-tools.js +219 -104
  90. package/dist/esm/locale/context.d.ts +5 -4
  91. package/dist/esm/locale/context.js +25 -9
  92. package/dist/esm/locale/interface.d.ts +20 -0
  93. package/dist/esm/locale/util.d.ts +3 -3
  94. package/dist/esm/style/color.css +3 -0
  95. package/dist/esm/style/size.css +2 -1
  96. package/dist/esm/style/themes.css +1 -1
  97. package/dist/esm/style/variables.css +6 -2
  98. package/dist/esm/utils/isEqual.js +5 -7
  99. package/dist/esm/version.d.ts +1 -1
  100. package/dist/esm/version.js +1 -1
  101. package/dist/umd/yee-c.min.css +4 -4
  102. package/dist/umd/yee-c.min.js +1 -1
  103. package/package.json +1 -1
  104. package/src/Button/style/index.less +5 -4
  105. package/src/Drawer/drawer.tsx +1 -1
  106. package/src/Drawer/interface.ts +1 -0
  107. package/src/Drawer/style/index.less +1 -0
  108. package/src/Form/form-store.ts +42 -15
  109. package/src/List/demo/virtual.tsx +20 -0
  110. package/src/List/hooks/useListKeyboard.ts +235 -0
  111. package/src/List/index.en-US.md +6 -0
  112. package/src/List/index.zh-CN.md +6 -0
  113. package/src/List/interface.ts +29 -2
  114. package/src/List/list.tsx +157 -19
  115. package/src/List/style/index.less +24 -0
  116. package/src/Select/demo/columns.tsx +35 -0
  117. package/src/Select/hooks/useSelectKeyboard.ts +112 -15
  118. package/src/Select/index.en-US.md +4 -0
  119. package/src/Select/index.zh-CN.md +4 -0
  120. package/src/Select/interface.ts +31 -4
  121. package/src/Select/option.tsx +9 -3
  122. package/src/Select/options.tsx +119 -26
  123. package/src/Select/select.tsx +41 -8
  124. package/src/Select/style/index.less +14 -0
  125. package/src/Selector/interface.ts +4 -0
  126. package/src/Selector/selector.tsx +8 -3
  127. package/src/Table/hooks/useColumns.ts +1 -1
  128. package/src/Table/interface.ts +1 -1
  129. package/src/Table/style/index.less +35 -11
  130. package/src/Table/table.tsx +60 -1
  131. package/src/Table/tbody/cell.tsx +1 -1
  132. package/src/Table/util/header.ts +48 -2
  133. package/src/Tree/demo/draggable.tsx +2 -0
  134. package/src/Tree/interface.ts +46 -23
  135. package/src/Tree/tree-node.tsx +26 -29
  136. package/src/Tree/tree.tsx +573 -274
  137. package/src/Tree/utils/tree-tools.ts +231 -125
  138. package/src/locale/_README.md +22 -13
  139. package/src/locale/context.tsx +33 -16
  140. package/src/locale/interface.ts +24 -0
  141. package/src/locale/util.ts +6 -6
  142. package/src/style/color.css +3 -0
  143. package/src/style/size.css +2 -1
  144. package/src/utils/isEqual.ts +5 -7
  145. package/src/version.ts +1 -1
@@ -1,19 +1,29 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
7
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
8
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
9
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
10
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
11
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
12
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
9
13
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
10
14
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
15
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (_e) { function e(_x) { return _e.apply(this, arguments); } e.toString = function () { return _e.toString(); }; return e; }(function (e) { throw e; }), f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function (_e2) { function e(_x2) { return _e2.apply(this, arguments); } e.toString = function () { return _e2.toString(); }; return e; }(function (e) { didErr = true; err = e; }), f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
18
  import clsx from 'clsx';
12
- import React, { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';
19
+ import React, { createContext, useContext, useMemo, useRef, useState } from 'react';
20
+ import { AnimatePresence, motion } from 'motion/react';
13
21
  import { GlobalContext } from "../Config-Provider";
22
+ import useEvent from "../hooks/useEvent";
14
23
  import useMergedState from "../hooks/useMergedState";
24
+ import useVirtualList from "../hooks/useVirtualList";
15
25
  import mergeContextToProps from "../utils/mergeContextToProps";
16
- import TreeNode from "./tree-node";
26
+ import TreeNodeComp from "./tree-node";
17
27
  import { getCheckedKeys, tree2array } from "./utils/tree-tools";
18
28
  import "./style/index.less";
19
29
  var DEFAULTFIELDNAMES = {
@@ -23,11 +33,12 @@ var DEFAULTFIELDNAMES = {
23
33
  };
24
34
  export var TreeContext = /*#__PURE__*/createContext({
25
35
  showIcon: true,
26
- selectedKeys: [],
27
- checkedKeys: [],
28
- expandedKeys: [],
36
+ selectedUids: new Set(),
37
+ checkedUids: new Set(),
38
+ indeterminateUids: new Set(),
39
+ expandedUids: new Set(),
29
40
  draggable: false,
30
- draggingKey: null,
41
+ draggingUid: null,
31
42
  dropState: null,
32
43
  onCheck: function onCheck() {},
33
44
  onSelect: function onSelect() {},
@@ -37,10 +48,133 @@ export var TreeContext = /*#__PURE__*/createContext({
37
48
  onNodeDragLeave: function onNodeDragLeave() {},
38
49
  onNodeDrop: function onNodeDrop() {}
39
50
  });
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // Helpers: convert between external user keys and internal uids
54
+ // ---------------------------------------------------------------------------
55
+
56
+ var EMPTY_ARRAY = [];
57
+
58
+ /**
59
+ * Given a list of user-provided keys, find matching uids.
60
+ * A key may match multiple nodes (non-unique keys), so we return all matches.
61
+ * Returns an array of uid strings (for use with useMergedState).
62
+ */
63
+ function keysToUidArray(keys, flatItems) {
64
+ if (!keys) return undefined;
65
+ if (keys.length === 0) return EMPTY_ARRAY;
66
+ var keySet = new Set(keys.map(String));
67
+ var uids = [];
68
+ var _iterator = _createForOfIteratorHelper(flatItems),
69
+ _step;
70
+ try {
71
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
72
+ var item = _step.value;
73
+ if (keySet.has(String(item.key))) {
74
+ uids.push(item.uid);
75
+ }
76
+ }
77
+ } catch (err) {
78
+ _iterator.e(err);
79
+ } finally {
80
+ _iterator.f();
81
+ }
82
+ return uids;
83
+ }
84
+
85
+ /**
86
+ * Hook that memoizes a uid array derived from external keys.
87
+ * Only returns a new reference when the actual uid content changes.
88
+ * This prevents useMergedState from seeing a "new value" every render.
89
+ */
90
+ function useStableUidArray(keys, flatItems) {
91
+ var ref = useRef({
92
+ keys: undefined,
93
+ result: undefined
94
+ });
95
+
96
+ // Only recompute if external keys reference or flatItems changed
97
+ var computed = useMemo(function () {
98
+ return keysToUidArray(keys, flatItems);
99
+ }, [keys, flatItems]);
100
+
101
+ // Stable reference: reuse previous if content is identical
102
+ if (computed === undefined) {
103
+ ref.current = {
104
+ keys: keys,
105
+ result: undefined
106
+ };
107
+ return undefined;
108
+ }
109
+ var prev = ref.current.result;
110
+ if (prev && prev.length === computed.length && prev.every(function (v, i) {
111
+ return v === computed[i];
112
+ })) {
113
+ return prev;
114
+ }
115
+ ref.current = {
116
+ keys: keys,
117
+ result: computed
118
+ };
119
+ return computed;
120
+ }
121
+
122
+ /**
123
+ * Convert an array of uids to user keys (for external callbacks).
124
+ */
125
+ function uidsToKeys(uids, map) {
126
+ var keys = [];
127
+ var _iterator2 = _createForOfIteratorHelper(uids),
128
+ _step2;
129
+ try {
130
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
131
+ var _uid = _step2.value;
132
+ var node = map.get(_uid);
133
+ if (node) keys.push(node.key);
134
+ }
135
+ } catch (err) {
136
+ _iterator2.e(err);
137
+ } finally {
138
+ _iterator2.f();
139
+ }
140
+ return keys;
141
+ }
142
+
143
+ /** Build a Set from an array (avoids downlevelIteration issues with Set constructor). */
144
+ function arrayToSet(arr) {
145
+ var s = new Set();
146
+ var _iterator3 = _createForOfIteratorHelper(arr),
147
+ _step3;
148
+ try {
149
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
150
+ var item = _step3.value;
151
+ s.add(item);
152
+ }
153
+ } catch (err) {
154
+ _iterator3.e(err);
155
+ } finally {
156
+ _iterator3.f();
157
+ }
158
+ return s;
159
+ }
160
+
161
+ /** Convert a Set to an array (avoids spread/iteration issues). */
162
+ function setToArray(s) {
163
+ var arr = [];
164
+ s.forEach(function (v) {
165
+ return arr.push(v);
166
+ });
167
+ return arr;
168
+ }
169
+
170
+ // ---------------------------------------------------------------------------
171
+ // Tree Component
172
+ // ---------------------------------------------------------------------------
173
+
40
174
  var Tree = function Tree(baseprops) {
41
175
  var _useContext = useContext(GlobalContext),
42
176
  tree = _useContext.tree;
43
- // @ts-expect-error - tree context type may not match TreeProps<T> exactly, mergeContextToProps handles this
177
+ // @ts-expect-error - tree context type may not match TreeProps<T> exactly
44
178
  var props = mergeContextToProps(baseprops, tree);
45
179
  var _props$prefixCls = props.prefixCls,
46
180
  prefixCls = _props$prefixCls === void 0 ? 'yee-tree' : _props$prefixCls,
@@ -70,191 +204,320 @@ var Tree = function Tree(baseprops) {
70
204
  onDrop = props.onDrop,
71
205
  onSelect = props.onSelect,
72
206
  onCheck = props.onCheck,
73
- onExpand = props.onExpand;
74
- var _useMergedState = useMergedState([], {
75
- value: selectedKeys,
76
- defaultValue: defaultSelectedKeys
77
- }),
78
- _useMergedState2 = _slicedToArray(_useMergedState, 2),
79
- mergedSelectedKeys = _useMergedState2[0],
80
- setMergedSelectedKeys = _useMergedState2[1];
81
- var _useMergedState3 = useMergedState([], {
82
- value: checkedKeys,
83
- defaultValue: defaultCheckedKeys
84
- }),
85
- _useMergedState4 = _slicedToArray(_useMergedState3, 2),
86
- mergedCheckedKeys = _useMergedState4[0],
87
- setMergedCheckedKeys = _useMergedState4[1];
207
+ onExpand = props.onExpand,
208
+ _props$virtual = props.virtual,
209
+ virtual = _props$virtual === void 0 ? false : _props$virtual,
210
+ height = props.height,
211
+ _props$itemHeight = props.itemHeight,
212
+ itemHeight = _props$itemHeight === void 0 ? 28 : _props$itemHeight;
213
+
214
+ // ======================== Data ========================
88
215
  var _useMemo = useMemo(function () {
89
216
  return tree2array(dataSource !== null && dataSource !== void 0 ? dataSource : [], fieldNames);
90
217
  }, [dataSource, fieldNames]),
91
218
  _useMemo2 = _slicedToArray(_useMemo, 2),
92
219
  flatItems = _useMemo2[0],
93
220
  itemMap = _useMemo2[1];
94
- var allParentKeys = useMemo(function () {
95
- var keys = [];
96
- flatItems.forEach(function (item) {
97
- if (!item.isLeaf) {
98
- keys.push(item.key);
221
+
222
+ // All parent uids (for defaultExpandAll)
223
+ var allParentUidArray = useMemo(function () {
224
+ var uids = [];
225
+ var _iterator4 = _createForOfIteratorHelper(flatItems),
226
+ _step4;
227
+ try {
228
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
229
+ var item = _step4.value;
230
+ if (!item.isLeaf) uids.push(item.uid);
99
231
  }
100
- });
101
- return keys;
232
+ } catch (err) {
233
+ _iterator4.e(err);
234
+ } finally {
235
+ _iterator4.f();
236
+ }
237
+ return uids;
102
238
  }, [flatItems]);
103
- var _useMergedState5 = useMergedState(function () {
104
- return defaultExpandAll ? allParentKeys : [];
239
+
240
+ // ==================== State (array-based for useMergedState compatibility) ====================
241
+ // useMergedState works with arrays (serializable, isEqual-friendly).
242
+ // We derive Sets via useMemo for O(1) lookups in render/handlers.
243
+ // useStableUidArray ensures stable references to prevent infinite re-render loops.
244
+
245
+ var stableExpandedValue = useStableUidArray(expandedKeys, flatItems);
246
+ var stableExpandedDefault = useStableUidArray(defaultExpandedKeys, flatItems);
247
+ var stableSelectedValue = useStableUidArray(selectedKeys, flatItems);
248
+ var stableSelectedDefault = useStableUidArray(defaultSelectedKeys, flatItems);
249
+ var stableCheckedValue = useStableUidArray(checkedKeys, flatItems);
250
+ var stableCheckedDefault = useStableUidArray(defaultCheckedKeys, flatItems);
251
+
252
+ // --- Expanded ---
253
+ var _useMergedState = useMergedState(function () {
254
+ return defaultExpandAll ? allParentUidArray : [];
105
255
  }, {
106
- value: expandedKeys,
107
- defaultValue: defaultExpandedKeys
256
+ value: stableExpandedValue,
257
+ defaultValue: stableExpandedDefault
258
+ }),
259
+ _useMergedState2 = _slicedToArray(_useMergedState, 2),
260
+ expandedUidArray = _useMergedState2[0],
261
+ setExpandedUidArray = _useMergedState2[1];
262
+ var expandedUidSet = useMemo(function () {
263
+ return arrayToSet(expandedUidArray);
264
+ }, [expandedUidArray]);
265
+
266
+ // --- Selected ---
267
+ var _useMergedState3 = useMergedState([], {
268
+ value: stableSelectedValue,
269
+ defaultValue: stableSelectedDefault
270
+ }),
271
+ _useMergedState4 = _slicedToArray(_useMergedState3, 2),
272
+ selectedUidArray = _useMergedState4[0],
273
+ setSelectedUidArray = _useMergedState4[1];
274
+ var selectedUidSet = useMemo(function () {
275
+ return arrayToSet(selectedUidArray);
276
+ }, [selectedUidArray]);
277
+
278
+ // --- Checked ---
279
+ var _useMergedState5 = useMergedState([], {
280
+ value: stableCheckedValue,
281
+ defaultValue: stableCheckedDefault
108
282
  }),
109
283
  _useMergedState6 = _slicedToArray(_useMergedState5, 2),
110
- mergedExpandedKeys = _useMergedState6[0],
111
- setMergedExpandedKeys = _useMergedState6[1];
112
- var handleCheck = useCallback(function (event) {
113
- var key = event.target.value;
284
+ checkedUidArray = _useMergedState6[0],
285
+ setCheckedUidArray = _useMergedState6[1];
286
+ var checkedUidSet = useMemo(function () {
287
+ return arrayToSet(checkedUidArray);
288
+ }, [checkedUidArray]);
289
+
290
+ // --- Indeterminate (half-select) ---
291
+ // A non-leaf node is indeterminate if:
292
+ // - It is NOT itself checked
293
+ // - At least one of its descendants IS checked
294
+ var indeterminateUidSet = useMemo(function () {
295
+ var result = new Set();
296
+ var _iterator5 = _createForOfIteratorHelper(flatItems),
297
+ _step5;
298
+ try {
299
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
300
+ var item = _step5.value;
301
+ if (!item.isLeaf && !checkedUidSet.has(item.uid) && item.childUids && item.childUids.some(function (cuid) {
302
+ return checkedUidSet.has(cuid);
303
+ })) {
304
+ result.add(item.uid);
305
+ }
306
+ }
307
+ } catch (err) {
308
+ _iterator5.e(err);
309
+ } finally {
310
+ _iterator5.f();
311
+ }
312
+ return result;
313
+ }, [flatItems, checkedUidSet]);
314
+
315
+ // ==================== Visible Items ====================
316
+ // A node is visible if it's a root OR its parent is both visible and expanded.
317
+ // flatItems is in pre-order so we can compute in a single forward pass.
318
+ var visibleItems = useMemo(function () {
319
+ var visibleSet = new Set();
320
+ var result = [];
321
+ var _iterator6 = _createForOfIteratorHelper(flatItems),
322
+ _step6;
323
+ try {
324
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
325
+ var item = _step6.value;
326
+ if (item.depth === 0) {
327
+ visibleSet.add(item.uid);
328
+ result.push(item);
329
+ } else if (item.pUid && visibleSet.has(item.pUid) && expandedUidSet.has(item.pUid)) {
330
+ visibleSet.add(item.uid);
331
+ result.push(item);
332
+ }
333
+ }
334
+ } catch (err) {
335
+ _iterator6.e(err);
336
+ } finally {
337
+ _iterator6.f();
338
+ }
339
+ return result;
340
+ }, [flatItems, expandedUidSet]);
341
+
342
+ // ==================== Handlers ====================
343
+ // All handlers use useEvent for stable references — they always read
344
+ // the latest state via closure without being listed as deps.
345
+
346
+ var handleCheck = useEvent(function (event, uid) {
114
347
  var checked = event.target.checked;
115
- var treeNode = itemMap.get(key);
116
- var newKeys = getCheckedKeys({
348
+ var treeNode = itemMap.get(uid);
349
+ var newUidSet = getCheckedKeys({
117
350
  checked: checked,
118
- keys: mergedCheckedKeys,
119
- key: key,
351
+ keys: checkedUidSet,
352
+ uid: uid,
120
353
  map: itemMap
121
354
  });
122
- var nodes = newKeys.map(function (key) {
123
- var _itemMap$get;
124
- return (_itemMap$get = itemMap.get(key)) === null || _itemMap$get === void 0 ? void 0 : _itemMap$get.original;
125
- }).filter(function (node) {
126
- return node !== undefined;
127
- });
128
- setMergedCheckedKeys(newKeys);
129
- var originalNode = treeNode === null || treeNode === void 0 ? void 0 : treeNode.original;
130
- if (originalNode) {
131
- onCheck === null || onCheck === void 0 || onCheck(newKeys, {
355
+ var newUidArr = setToArray(newUidSet);
356
+ setCheckedUidArray(newUidArr);
357
+ if (treeNode && onCheck) {
358
+ var externalKeys = uidsToKeys(newUidArr, itemMap);
359
+ var nodes = [];
360
+ newUidSet.forEach(function (u) {
361
+ var _itemMap$get;
362
+ var n = (_itemMap$get = itemMap.get(u)) === null || _itemMap$get === void 0 ? void 0 : _itemMap$get.original;
363
+ if (n) nodes.push(n);
364
+ });
365
+ onCheck(externalKeys, {
132
366
  checked: checked,
133
367
  checkedNodes: nodes,
134
- node: originalNode
368
+ node: treeNode.original
135
369
  });
136
370
  }
137
- }, [mergedCheckedKeys, itemMap, onCheck]);
138
- var handleSelect = useCallback(function (key) {
139
- var selected = mergedSelectedKeys.includes(key);
140
- var newKeys = multiple ? selected ? _toConsumableArray(mergedSelectedKeys.filter(function (k) {
141
- return k !== key;
142
- })) : [].concat(_toConsumableArray(mergedSelectedKeys), [key]) : selected ? [] : [key];
143
- setMergedSelectedKeys(newKeys);
144
- var nodes = newKeys.map(function (k) {
145
- var _itemMap$get2;
146
- return (_itemMap$get2 = itemMap.get(k)) === null || _itemMap$get2 === void 0 ? void 0 : _itemMap$get2.original;
147
- }).filter(function (node) {
148
- return node !== undefined;
149
- });
150
- var treeNode = itemMap.get(key);
151
- var originalNode = treeNode === null || treeNode === void 0 ? void 0 : treeNode.original;
152
- if (originalNode) {
153
- onSelect === null || onSelect === void 0 || onSelect(newKeys, {
371
+ });
372
+ var handleSelect = useEvent(function (uid) {
373
+ var selected = selectedUidSet.has(uid);
374
+ var newUidArr;
375
+ if (multiple) {
376
+ if (selected) {
377
+ newUidArr = selectedUidArray.filter(function (u) {
378
+ return u !== uid;
379
+ });
380
+ } else {
381
+ newUidArr = [].concat(_toConsumableArray(selectedUidArray), [uid]);
382
+ }
383
+ } else {
384
+ newUidArr = selected ? [] : [uid];
385
+ }
386
+ setSelectedUidArray(newUidArr);
387
+ var treeNode = itemMap.get(uid);
388
+ if (treeNode && onSelect) {
389
+ var externalKeys = uidsToKeys(newUidArr, itemMap);
390
+ var nodes = [];
391
+ var _iterator7 = _createForOfIteratorHelper(newUidArr),
392
+ _step7;
393
+ try {
394
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
395
+ var _itemMap$get2;
396
+ var u = _step7.value;
397
+ var n = (_itemMap$get2 = itemMap.get(u)) === null || _itemMap$get2 === void 0 ? void 0 : _itemMap$get2.original;
398
+ if (n) nodes.push(n);
399
+ }
400
+ } catch (err) {
401
+ _iterator7.e(err);
402
+ } finally {
403
+ _iterator7.f();
404
+ }
405
+ onSelect(externalKeys, {
154
406
  selected: !selected,
155
407
  selectedNodes: nodes,
156
- node: originalNode
408
+ node: treeNode.original
157
409
  });
158
410
  }
159
- }, [mergedSelectedKeys, itemMap, multiple, onSelect]);
160
- var handleExpand = useCallback(function (key) {
161
- var expanded = mergedExpandedKeys.includes(key);
162
- var newKeys = expanded ? _toConsumableArray(mergedExpandedKeys.filter(function (k) {
163
- return k !== key;
164
- })) : [].concat(_toConsumableArray(mergedExpandedKeys), [key]);
165
- setMergedExpandedKeys(newKeys);
166
- var nodes = newKeys.map(function (k) {
167
- var _itemMap$get3;
168
- return (_itemMap$get3 = itemMap.get(k)) === null || _itemMap$get3 === void 0 ? void 0 : _itemMap$get3.original;
169
- }).filter(function (node) {
170
- return node !== undefined;
171
- });
172
- onExpand === null || onExpand === void 0 || onExpand(newKeys, {
173
- expanded: !expanded,
174
- expandedNodes: nodes,
175
- node: nodes
176
- });
177
- }, [mergedExpandedKeys, itemMap, onExpand]);
411
+ });
412
+ var handleExpand = useEvent(function (uid) {
413
+ var expanded = expandedUidSet.has(uid);
414
+ var newUidArr = expanded ? expandedUidArray.filter(function (u) {
415
+ return u !== uid;
416
+ }) : [].concat(_toConsumableArray(expandedUidArray), [uid]);
417
+ setExpandedUidArray(newUidArr);
418
+ if (onExpand) {
419
+ var externalKeys = uidsToKeys(newUidArr, itemMap);
420
+ var treeNode = itemMap.get(uid);
421
+ var nodes = [];
422
+ var _iterator8 = _createForOfIteratorHelper(newUidArr),
423
+ _step8;
424
+ try {
425
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
426
+ var _itemMap$get3;
427
+ var u = _step8.value;
428
+ var n = (_itemMap$get3 = itemMap.get(u)) === null || _itemMap$get3 === void 0 ? void 0 : _itemMap$get3.original;
429
+ if (n) nodes.push(n);
430
+ }
431
+ } catch (err) {
432
+ _iterator8.e(err);
433
+ } finally {
434
+ _iterator8.f();
435
+ }
436
+ onExpand(externalKeys, {
437
+ expanded: !expanded,
438
+ expandedNodes: nodes,
439
+ node: treeNode.original
440
+ });
441
+ }
442
+ });
178
443
 
179
- // --- drag & drop (native HTML5) ---
180
- // dataTransfer is not reliably readable during dragover, so the drag key
181
- // lives in a ref as the source of truth; a state mirrors it for styling.
182
- var dragKeyRef = useRef(null);
444
+ // --- Drag & Drop ---
445
+ var dragUidRef = useRef(null);
183
446
  var _useState = useState(null),
184
447
  _useState2 = _slicedToArray(_useState, 2),
185
- draggingKey = _useState2[0],
186
- setDraggingKey = _useState2[1];
448
+ draggingUid = _useState2[0],
449
+ setDraggingUid = _useState2[1];
187
450
  var _useState3 = useState(null),
188
451
  _useState4 = _slicedToArray(_useState3, 2),
189
452
  dropState = _useState4[0],
190
453
  setDropState = _useState4[1];
191
-
192
- // A drop is a cycle/illegal if the target is the dragged node itself or one
193
- // of its descendants. Covers before/after/inside uniformly.
194
- var isIllegalMove = useCallback(function (dragKey, dropKey) {
195
- if (dragKey === dropKey) return true;
196
- var dropNode = itemMap.get(dropKey);
197
- return !!dropNode && dropNode.path.includes(dragKey);
198
- }, [itemMap]);
199
- var resolvePosition = useCallback(function (rect, clientY) {
454
+ var resolvePosition = function resolvePosition(rect, clientY) {
200
455
  var offset = (clientY - rect.top) / rect.height;
201
456
  if (offset < 0.25) return 'before';
202
457
  if (offset > 0.75) return 'after';
203
458
  return 'inside';
204
- }, []);
205
- var handleDragStart = useCallback(function (key, e) {
206
- var node = itemMap.get(key);
459
+ };
460
+ var isIllegalMove = function isIllegalMove(dragUid, dropUid) {
461
+ if (dragUid === dropUid) return true;
462
+ var dropNode = itemMap.get(dropUid);
463
+ if (!dropNode) return true;
464
+ var current = dropNode;
465
+ while (current) {
466
+ if (current.pUid === dragUid) return true;
467
+ current = current.pUid ? itemMap.get(current.pUid) : undefined;
468
+ }
469
+ return false;
470
+ };
471
+ var handleDragStart = useEvent(function (uid, e) {
472
+ var node = itemMap.get(uid);
207
473
  if (node !== null && node !== void 0 && node.disabled) {
208
474
  e.preventDefault();
209
475
  return;
210
476
  }
211
- dragKeyRef.current = key;
212
- setDraggingKey(key);
477
+ dragUidRef.current = uid;
478
+ setDraggingUid(uid);
213
479
  if (e.dataTransfer) {
214
480
  e.dataTransfer.effectAllowed = 'move';
215
481
  try {
216
- e.dataTransfer.setData('text/plain', String(key));
482
+ e.dataTransfer.setData('text/plain', uid);
217
483
  } catch (_unused) {
218
- /* some browsers throw on setData in certain modes */
484
+ /* some browsers throw */
219
485
  }
220
486
  }
221
- }, [itemMap]);
222
- var handleDragOver = useCallback(function (key, e) {
223
- var dragKey = dragKeyRef.current;
224
- if (dragKey === null) return;
225
- if (isIllegalMove(dragKey, key)) return;
226
- var dropNode = itemMap.get(key);
487
+ });
488
+ var handleDragOver = useEvent(function (uid, e) {
489
+ var dragUid = dragUidRef.current;
490
+ if (dragUid === null) return;
491
+ if (isIllegalMove(dragUid, uid)) return;
492
+ var dropNode = itemMap.get(uid);
227
493
  if (!dropNode || dropNode.disabled) return;
228
494
  var position = resolvePosition(e.currentTarget.getBoundingClientRect(), e.clientY);
229
- var dragNode = itemMap.get(dragKey);
495
+ var dragNode = itemMap.get(dragUid);
230
496
  if (allowDrop && dragNode && allowDrop({
231
497
  dragNode: dragNode.original,
232
498
  dropNode: dropNode.original,
233
499
  position: position
234
500
  }) === false) {
235
- return; // not calling preventDefault shows the "no-drop" cursor
501
+ return;
236
502
  }
237
503
  e.preventDefault();
238
504
  if (e.dataTransfer) e.dataTransfer.dropEffect = 'move';
239
505
  setDropState(function (prev) {
240
- return prev && prev.key === key && prev.position === position ? prev : {
241
- key: key,
506
+ return prev && prev.uid === uid && prev.position === position ? prev : {
507
+ uid: uid,
242
508
  position: position
243
509
  };
244
510
  });
245
- }, [itemMap, isIllegalMove, resolvePosition, allowDrop]);
246
- var handleDragLeave = useCallback(
247
- // Intentionally a no-op: dragleave fires spuriously when crossing child
248
- // elements. Drop state is cleared in handleDragEnd at the Tree root.
249
- function () {}, []);
250
- var handleDrop = useCallback(function (key, e) {
511
+ });
512
+ var handleDragLeave = useEvent(function () {});
513
+ var handleDrop = useEvent(function (uid, e) {
251
514
  e.preventDefault();
252
- var dragKey = dragKeyRef.current;
253
- if (dragKey === null) return;
515
+ var dragUid = dragUidRef.current;
516
+ if (dragUid === null) return;
254
517
  var position = resolvePosition(e.currentTarget.getBoundingClientRect(), e.clientY);
255
- if (isIllegalMove(dragKey, key)) return;
256
- var dragNode = itemMap.get(dragKey);
257
- var dropNode = itemMap.get(key);
518
+ if (isIllegalMove(dragUid, uid)) return;
519
+ var dragNode = itemMap.get(dragUid);
520
+ var dropNode = itemMap.get(uid);
258
521
  if (!dragNode || !dropNode) return;
259
522
  if (allowDrop && allowDrop({
260
523
  dragNode: dragNode.original,
@@ -266,45 +529,46 @@ var Tree = function Tree(baseprops) {
266
529
  onDrop === null || onDrop === void 0 || onDrop({
267
530
  dragNode: dragNode.original,
268
531
  dropNode: dropNode.original,
269
- dragKey: dragKey,
270
- dropKey: key,
532
+ dragKey: dragNode.key,
533
+ dropKey: dropNode.key,
534
+ dragPath: [].concat(_toConsumableArray(dragNode.path), [dragNode.key]),
535
+ dropPath: [].concat(_toConsumableArray(dropNode.path), [dropNode.key]),
271
536
  position: position,
272
537
  dropToGap: position !== 'inside'
273
538
  });
274
539
 
275
- // Auto-expand the target after a drop-inside so the dragged node is
276
- // visible. Only effective in uncontrolled expandedKeys mode.
540
+ // Auto-expand the target after a drop-inside
277
541
  if (position === 'inside') {
278
- setMergedExpandedKeys(function (prev) {
279
- return prev.includes(key) ? prev : [].concat(_toConsumableArray(prev), [key]);
542
+ setExpandedUidArray(function (prev) {
543
+ if (prev.includes(uid)) return prev;
544
+ return [].concat(_toConsumableArray(prev), [uid]);
280
545
  });
281
546
  }
282
- dragKeyRef.current = null;
283
- setDraggingKey(null);
547
+ dragUidRef.current = null;
548
+ setDraggingUid(null);
284
549
  setDropState(null);
285
- }, [itemMap, isIllegalMove, resolvePosition, allowDrop, onDrop]);
286
- var handleDragEnd = useCallback(function () {
287
- dragKeyRef.current = null;
288
- setDraggingKey(null);
550
+ });
551
+ var handleDragEnd = useEvent(function () {
552
+ dragUidRef.current = null;
553
+ setDraggingUid(null);
289
554
  setDropState(null);
290
- }, []);
291
- return /*#__PURE__*/React.createElement("div", {
292
- className: clsx(prefixCls, className),
293
- style: style,
294
- onDragEnd: handleDragEnd
295
- }, /*#__PURE__*/React.createElement(TreeContext.Provider, {
296
- value: {
555
+ });
556
+
557
+ // ==================== Context Value (memoized) ====================
558
+ var contextValue = useMemo(function () {
559
+ return {
297
560
  prefixCls: prefixCls,
298
561
  checkable: checkable,
299
562
  showIcon: showIcon,
300
563
  icon: icon,
301
564
  showLine: showLine,
302
565
  switcherIcon: switcherIcon,
303
- selectedKeys: mergedSelectedKeys,
304
- checkedKeys: mergedCheckedKeys,
305
- expandedKeys: mergedExpandedKeys,
566
+ selectedUids: selectedUidSet,
567
+ checkedUids: checkedUidSet,
568
+ indeterminateUids: indeterminateUidSet,
569
+ expandedUids: expandedUidSet,
306
570
  draggable: draggable,
307
- draggingKey: draggingKey,
571
+ draggingUid: draggingUid,
308
572
  dropState: dropState,
309
573
  onCheck: handleCheck,
310
574
  onSelect: handleSelect,
@@ -313,12 +577,157 @@ var Tree = function Tree(baseprops) {
313
577
  onNodeDragOver: handleDragOver,
314
578
  onNodeDragLeave: handleDragLeave,
315
579
  onNodeDrop: handleDrop
580
+ };
581
+ }, [prefixCls, checkable, showIcon, icon, showLine, switcherIcon, selectedUidSet, checkedUidSet, indeterminateUidSet, expandedUidSet, draggable, draggingUid, dropState,
582
+ // handlers are stable (useEvent), but listed for correctness
583
+ handleCheck, handleSelect, handleExpand, handleDragStart, handleDragOver, handleDragLeave, handleDrop]);
584
+
585
+ // ==================== Virtual Scroll ====================
586
+ var useVirtual = virtual && height !== null && height !== undefined;
587
+ var _useVirtualList = useVirtualList({
588
+ itemCount: useVirtual ? visibleItems.length : 0,
589
+ itemHeight: itemHeight,
590
+ overscan: 4
591
+ }),
592
+ start = _useVirtualList.start,
593
+ end = _useVirtualList.end,
594
+ offsetY = _useVirtualList.offsetY,
595
+ totalHeight = _useVirtualList.totalHeight,
596
+ viewportRef = _useVirtualList.viewportRef,
597
+ onScroll = _useVirtualList.onScroll;
598
+
599
+ // ==================== Render ====================
600
+ if (useVirtual) {
601
+ var slicedItems = visibleItems.slice(start, end);
602
+ return /*#__PURE__*/React.createElement("div", {
603
+ className: clsx(prefixCls, className),
604
+ style: style,
605
+ onDragEnd: handleDragEnd
606
+ }, /*#__PURE__*/React.createElement(TreeContext.Provider, {
607
+ value: contextValue
608
+ }, /*#__PURE__*/React.createElement("div", {
609
+ ref: viewportRef,
610
+ onScroll: onScroll,
611
+ style: {
612
+ height: height,
613
+ overflowY: 'auto'
614
+ }
615
+ }, /*#__PURE__*/React.createElement("div", {
616
+ style: {
617
+ height: totalHeight,
618
+ position: 'relative'
619
+ }
620
+ }, slicedItems.map(function (node, i) {
621
+ return /*#__PURE__*/React.createElement(TreeNodeComp, {
622
+ node: node,
623
+ key: node.uid,
624
+ style: {
625
+ position: 'absolute',
626
+ top: 0,
627
+ left: 0,
628
+ width: '100%',
629
+ height: itemHeight,
630
+ transform: "translateY(".concat(offsetY + i * itemHeight, "px)")
631
+ }
632
+ });
633
+ })))));
634
+ }
635
+
636
+ // ==================== Render (non-virtual) ====================
637
+ // Group consecutive children of the same parent into segments.
638
+ // Each group animates as a single unit (one height measurement) rather than
639
+ // each node individually, drastically reducing layout thrashing.
640
+
641
+ var segments = [];
642
+ var currentGroup = null;
643
+ var _iterator9 = _createForOfIteratorHelper(visibleItems),
644
+ _step9;
645
+ try {
646
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
647
+ var node = _step9.value;
648
+ if (node.depth === 0) {
649
+ // Root nodes are always visible, render directly without animation
650
+ if (currentGroup) {
651
+ segments.push(_objectSpread({
652
+ type: 'group'
653
+ }, currentGroup));
654
+ currentGroup = null;
655
+ }
656
+ segments.push({
657
+ type: 'node',
658
+ node: node
659
+ });
660
+ } else {
661
+ // Non-root: group consecutive children under the same parent
662
+ if (currentGroup && currentGroup.pUid === node.pUid) {
663
+ currentGroup.nodes.push(node);
664
+ } else {
665
+ if (currentGroup) {
666
+ segments.push(_objectSpread({
667
+ type: 'group'
668
+ }, currentGroup));
669
+ }
670
+ currentGroup = {
671
+ pUid: node.pUid,
672
+ nodes: [node]
673
+ };
674
+ }
675
+ }
316
676
  }
317
- }, flatItems.map(function (node, index) {
318
- return /*#__PURE__*/React.createElement(TreeNode, {
319
- node: node,
320
- key: node.key || index
321
- });
322
- })));
677
+ } catch (err) {
678
+ _iterator9.e(err);
679
+ } finally {
680
+ _iterator9.f();
681
+ }
682
+ if (currentGroup) {
683
+ segments.push(_objectSpread({
684
+ type: 'group'
685
+ }, currentGroup));
686
+ }
687
+ return /*#__PURE__*/React.createElement("div", {
688
+ className: clsx(prefixCls, className),
689
+ style: style,
690
+ onDragEnd: handleDragEnd
691
+ }, /*#__PURE__*/React.createElement(TreeContext.Provider, {
692
+ value: contextValue
693
+ }, /*#__PURE__*/React.createElement(AnimatePresence, {
694
+ initial: false
695
+ }, segments.map(function (segment) {
696
+ if (segment.type === 'node') {
697
+ return /*#__PURE__*/React.createElement(TreeNodeComp, {
698
+ node: segment.node,
699
+ key: segment.node.uid
700
+ });
701
+ }
702
+ // Keep the wrapper mounted throughout native drag operations.
703
+ // Replacing this tree after dragStart removes the browser's drag
704
+ // source and cancels the drag before dragOver/drop can fire.
705
+ return /*#__PURE__*/React.createElement(motion.div, {
706
+ key: segment.pUid + '\x01children',
707
+ initial: {
708
+ height: 0,
709
+ opacity: 0
710
+ },
711
+ animate: {
712
+ height: 'auto',
713
+ opacity: 1
714
+ },
715
+ exit: {
716
+ height: 0,
717
+ opacity: 0
718
+ },
719
+ transition: {
720
+ duration: 0.15
721
+ },
722
+ style: {
723
+ overflow: 'hidden'
724
+ }
725
+ }, segment.nodes.map(function (node) {
726
+ return /*#__PURE__*/React.createElement(TreeNodeComp, {
727
+ node: node,
728
+ key: node.uid
729
+ });
730
+ }));
731
+ }))));
323
732
  };
324
733
  export default Tree;