@rainbow-oh/yee-c 0.1.0 → 0.2.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 (228) hide show
  1. package/dist/cjs/Alert/alert.js +10 -4
  2. package/dist/cjs/Alert/style/index.less +3 -0
  3. package/dist/cjs/Anchor/anchor-item.js +6 -4
  4. package/dist/cjs/Anchor/anchor.js +38 -22
  5. package/dist/cjs/Anchor/demo/auto.d.ts +11 -0
  6. package/dist/cjs/Anchor/demo/auto.js +85 -0
  7. package/dist/cjs/Anchor/demo/basic.js +7 -1
  8. package/dist/cjs/Anchor/demo/controlled.js +42 -30
  9. package/dist/cjs/Anchor/interface.d.ts +2 -0
  10. package/dist/cjs/Anchor/style/index.less +2 -2
  11. package/dist/cjs/Button/button.d.ts +1 -1
  12. package/dist/cjs/Checkbox/checkbox-group.js +4 -1
  13. package/dist/cjs/Checkbox/demo/group.js +1 -0
  14. package/dist/cjs/Checkbox/interface.d.ts +5 -0
  15. package/dist/cjs/Checkbox/style/index.less +21 -1
  16. package/dist/cjs/Dropdown/demo/placement.js +2 -1
  17. package/dist/cjs/Dropdown/dropdown.js +3 -0
  18. package/dist/cjs/Dropdown/style/index.less +6 -0
  19. package/dist/cjs/Form/Field.js +33 -3
  20. package/dist/cjs/Form/Group.js +3 -2
  21. package/dist/cjs/Form/demo/form-table.js +1 -8
  22. package/dist/cjs/Form/demo/tooltip.d.ts +3 -0
  23. package/dist/cjs/Form/demo/tooltip.js +84 -0
  24. package/dist/cjs/Form/interface.d.ts +34 -1
  25. package/dist/cjs/Form/style/index.less +22 -7
  26. package/dist/cjs/Popconfirm/popconfirm.js +1 -1
  27. package/dist/cjs/Popconfirm/style/index.less +6 -0
  28. package/dist/cjs/Popover/popover.js +1 -1
  29. package/dist/cjs/Popover/style/index.less +6 -0
  30. package/dist/cjs/Progress/progress.js +2 -2
  31. package/dist/cjs/Radio/style/index.less +13 -6
  32. package/dist/cjs/Select/option.js +3 -2
  33. package/dist/cjs/Select/options.js +9 -1
  34. package/dist/cjs/Select/select.js +1 -0
  35. package/dist/cjs/Skeleton/demo/basic.js +1 -1
  36. package/dist/cjs/Space/interface.d.ts +4 -0
  37. package/dist/cjs/Space/space.js +36 -16
  38. package/dist/cjs/Splitter/demo/basic.js +1 -1
  39. package/dist/cjs/Splitter/demo/vertical.js +23 -1
  40. package/dist/cjs/Splitter/index.d.ts +1 -1
  41. package/dist/cjs/Splitter/interface.d.ts +9 -3
  42. package/dist/cjs/Splitter/splitter-handler.d.ts +1 -1
  43. package/dist/cjs/Splitter/splitter-handler.js +2 -1
  44. package/dist/cjs/Splitter/splitter.d.ts +2 -9
  45. package/dist/cjs/Splitter/splitter.js +53 -50
  46. package/dist/cjs/Splitter/style/index.less +21 -0
  47. package/dist/cjs/Table/demo/size.js +1 -1
  48. package/dist/cjs/Tabs/hooks/useTabScroll.d.ts +1 -1
  49. package/dist/cjs/Tabs/interface.d.ts +1 -1
  50. package/dist/cjs/Tabs/style/index.less +4 -0
  51. package/dist/cjs/Tabs/tab-header/index.js +56 -25
  52. package/dist/cjs/Tooltip/interface.d.ts +4 -0
  53. package/dist/cjs/Tooltip/style/index.less +8 -8
  54. package/dist/cjs/Tooltip/tooltip.js +11 -3
  55. package/dist/cjs/Tree/demo/draggable.d.ts +3 -0
  56. package/dist/cjs/Tree/demo/draggable.js +88 -0
  57. package/dist/cjs/Tree/demo/expanded.js +6 -6
  58. package/dist/cjs/Tree/index.d.ts +1 -0
  59. package/dist/cjs/Tree/index.js +3 -1
  60. package/dist/cjs/Tree/interface.d.ts +26 -0
  61. package/dist/cjs/Tree/style/index.less +25 -0
  62. package/dist/cjs/Tree/tree-node.js +38 -4
  63. package/dist/cjs/Tree/tree.d.ts +12 -1
  64. package/dist/cjs/Tree/tree.js +174 -18
  65. package/dist/cjs/Tree/utils/tree-tools.d.ts +21 -0
  66. package/dist/cjs/Tree/utils/tree-tools.js +88 -0
  67. package/dist/cjs/Trigger/style/index.less +17 -0
  68. package/dist/cjs/Trigger/trigger.js +3 -1
  69. package/dist/cjs/hooks/useDebounceFunction.d.ts +1 -1
  70. package/dist/cjs/hooks/useLayoutEffect.d.ts +1 -1
  71. package/dist/cjs/style/size.css +13 -4
  72. package/dist/cjs/style/themes.css +1 -1
  73. package/dist/cjs/style/variables.css +14 -5
  74. package/dist/cjs/utils/debounce.d.ts +6 -1
  75. package/dist/cjs/utils/debounce.js +9 -1
  76. package/dist/cjs/version.d.ts +1 -1
  77. package/dist/cjs/version.js +1 -1
  78. package/dist/esm/Alert/alert.js +24 -8
  79. package/dist/esm/Alert/style/index.less +3 -0
  80. package/dist/esm/Anchor/anchor-item.js +6 -3
  81. package/dist/esm/Anchor/anchor.js +38 -19
  82. package/dist/esm/Anchor/demo/auto.d.ts +11 -0
  83. package/dist/esm/Anchor/demo/auto.js +62 -0
  84. package/dist/esm/Anchor/demo/basic.js +3 -1
  85. package/dist/esm/Anchor/demo/controlled.js +14 -9
  86. package/dist/esm/Anchor/interface.d.ts +2 -0
  87. package/dist/esm/Anchor/style/index.less +2 -2
  88. package/dist/esm/Button/button.d.ts +1 -1
  89. package/dist/esm/Checkbox/checkbox-group.js +4 -2
  90. package/dist/esm/Checkbox/demo/group.js +1 -0
  91. package/dist/esm/Checkbox/interface.d.ts +5 -0
  92. package/dist/esm/Checkbox/style/index.less +21 -1
  93. package/dist/esm/Dropdown/demo/placement.js +2 -1
  94. package/dist/esm/Dropdown/dropdown.js +6 -1
  95. package/dist/esm/Dropdown/style/index.less +6 -0
  96. package/dist/esm/Form/Field.js +43 -5
  97. package/dist/esm/Form/Group.js +4 -2
  98. package/dist/esm/Form/demo/form-table.js +8 -6
  99. package/dist/esm/Form/demo/tooltip.d.ts +3 -0
  100. package/dist/esm/Form/demo/tooltip.js +59 -0
  101. package/dist/esm/Form/interface.d.ts +34 -1
  102. package/dist/esm/Form/style/index.less +22 -7
  103. package/dist/esm/Popconfirm/popconfirm.js +3 -1
  104. package/dist/esm/Popconfirm/style/index.less +6 -0
  105. package/dist/esm/Popover/popover.js +3 -1
  106. package/dist/esm/Popover/style/index.less +6 -0
  107. package/dist/esm/Progress/progress.js +5 -5
  108. package/dist/esm/Radio/style/index.less +13 -6
  109. package/dist/esm/Select/option.js +4 -2
  110. package/dist/esm/Select/options.js +5 -3
  111. package/dist/esm/Select/select.js +1 -0
  112. package/dist/esm/Skeleton/demo/basic.js +2 -8
  113. package/dist/esm/Space/interface.d.ts +4 -0
  114. package/dist/esm/Space/space.js +24 -13
  115. package/dist/esm/Splitter/demo/basic.js +2 -0
  116. package/dist/esm/Splitter/demo/vertical.js +13 -5
  117. package/dist/esm/Splitter/index.d.ts +1 -1
  118. package/dist/esm/Splitter/interface.d.ts +9 -3
  119. package/dist/esm/Splitter/splitter-handler.d.ts +1 -1
  120. package/dist/esm/Splitter/splitter-handler.js +3 -1
  121. package/dist/esm/Splitter/splitter.d.ts +2 -9
  122. package/dist/esm/Splitter/splitter.js +59 -56
  123. package/dist/esm/Splitter/style/index.less +21 -0
  124. package/dist/esm/Table/demo/size.js +2 -7
  125. package/dist/esm/Tabs/hooks/useTabScroll.d.ts +1 -1
  126. package/dist/esm/Tabs/interface.d.ts +1 -1
  127. package/dist/esm/Tabs/style/index.less +4 -0
  128. package/dist/esm/Tabs/tab-header/index.js +11 -5
  129. package/dist/esm/Tooltip/interface.d.ts +4 -0
  130. package/dist/esm/Tooltip/style/index.less +8 -8
  131. package/dist/esm/Tooltip/tooltip.js +14 -2
  132. package/dist/esm/Tree/demo/draggable.d.ts +3 -0
  133. package/dist/esm/Tree/demo/draggable.js +61 -0
  134. package/dist/esm/Tree/demo/expanded.js +6 -6
  135. package/dist/esm/Tree/index.d.ts +1 -0
  136. package/dist/esm/Tree/index.js +1 -0
  137. package/dist/esm/Tree/interface.d.ts +26 -0
  138. package/dist/esm/Tree/style/index.less +25 -0
  139. package/dist/esm/Tree/tree-node.js +29 -4
  140. package/dist/esm/Tree/tree.d.ts +12 -1
  141. package/dist/esm/Tree/tree.js +135 -4
  142. package/dist/esm/Tree/utils/tree-tools.d.ts +21 -0
  143. package/dist/esm/Tree/utils/tree-tools.js +128 -1
  144. package/dist/esm/Trigger/style/index.less +17 -0
  145. package/dist/esm/Trigger/trigger.js +4 -3
  146. package/dist/esm/hooks/useDebounceFunction.d.ts +1 -1
  147. package/dist/esm/hooks/useLayoutEffect.d.ts +1 -1
  148. package/dist/esm/style/size.css +13 -4
  149. package/dist/esm/style/themes.css +1 -1
  150. package/dist/esm/style/variables.css +14 -5
  151. package/dist/esm/utils/debounce.d.ts +6 -1
  152. package/dist/esm/utils/debounce.js +9 -2
  153. package/dist/esm/version.d.ts +1 -1
  154. package/dist/esm/version.js +1 -1
  155. package/dist/umd/yee-c.min.css +2 -2
  156. package/dist/umd/yee-c.min.js +1 -1
  157. package/package.json +21 -23
  158. package/src/Alert/alert.tsx +10 -4
  159. package/src/Alert/style/index.less +3 -0
  160. package/src/Anchor/anchor-item.tsx +7 -2
  161. package/src/Anchor/anchor.tsx +49 -23
  162. package/src/Anchor/demo/auto.tsx +55 -0
  163. package/src/Anchor/demo/basic.tsx +7 -1
  164. package/src/Anchor/demo/controlled.tsx +18 -14
  165. package/src/Anchor/index.en-US.md +17 -0
  166. package/src/Anchor/index.zh-CN.md +17 -0
  167. package/src/Anchor/interface.ts +2 -0
  168. package/src/Anchor/style/index.less +2 -2
  169. package/src/Checkbox/checkbox-group.tsx +5 -1
  170. package/src/Checkbox/demo/group.tsx +1 -0
  171. package/src/Checkbox/interface.ts +5 -0
  172. package/src/Checkbox/style/index.less +21 -1
  173. package/src/Dropdown/demo/placement.tsx +1 -0
  174. package/src/Dropdown/dropdown.tsx +2 -0
  175. package/src/Dropdown/style/index.less +6 -0
  176. package/src/Form/Field.tsx +45 -3
  177. package/src/Form/Group.tsx +4 -1
  178. package/src/Form/demo/form-table.tsx +7 -7
  179. package/src/Form/demo/tooltip.tsx +72 -0
  180. package/src/Form/form-store.ts +1 -1
  181. package/src/Form/index.en-US.md +2 -0
  182. package/src/Form/index.zh-CN.md +83 -85
  183. package/src/Form/interface.ts +36 -1
  184. package/src/Form/style/index.less +22 -7
  185. package/src/Popconfirm/popconfirm.tsx +1 -1
  186. package/src/Popconfirm/style/index.less +6 -0
  187. package/src/Popover/popover.tsx +1 -1
  188. package/src/Popover/style/index.less +6 -0
  189. package/src/Progress/progress.tsx +2 -2
  190. package/src/Radio/style/index.less +13 -6
  191. package/src/Select/option.tsx +2 -1
  192. package/src/Select/options.tsx +7 -2
  193. package/src/Select/select.tsx +1 -0
  194. package/src/Skeleton/demo/basic.tsx +3 -3
  195. package/src/Space/interface.ts +4 -0
  196. package/src/Space/space.tsx +40 -16
  197. package/src/Splitter/demo/basic.tsx +2 -2
  198. package/src/Splitter/demo/vertical.tsx +19 -5
  199. package/src/Splitter/index.ts +5 -1
  200. package/src/Splitter/interface.ts +10 -3
  201. package/src/Splitter/splitter-handler.tsx +4 -2
  202. package/src/Splitter/splitter.tsx +55 -60
  203. package/src/Splitter/style/index.less +21 -0
  204. package/src/Table/demo/size.tsx +3 -3
  205. package/src/Table/index.zh-CN.md +50 -50
  206. package/src/Tabs/interface.ts +1 -1
  207. package/src/Tabs/style/index.less +4 -0
  208. package/src/Tabs/tab-header/index.tsx +26 -5
  209. package/src/Tooltip/index.en-US.md +1 -0
  210. package/src/Tooltip/index.zh-CN.md +1 -0
  211. package/src/Tooltip/interface.ts +4 -0
  212. package/src/Tooltip/style/index.less +8 -8
  213. package/src/Tooltip/tooltip.tsx +10 -1
  214. package/src/Tree/demo/draggable.tsx +58 -0
  215. package/src/Tree/demo/expanded.tsx +7 -7
  216. package/src/Tree/index.en-US.md +3 -0
  217. package/src/Tree/index.ts +1 -0
  218. package/src/Tree/index.zh-CN.md +3 -0
  219. package/src/Tree/interface.ts +28 -0
  220. package/src/Tree/style/index.less +25 -0
  221. package/src/Tree/tree-node.tsx +26 -0
  222. package/src/Tree/tree.tsx +183 -2
  223. package/src/Tree/utils/tree-tools.ts +107 -0
  224. package/src/Trigger/style/index.less +17 -0
  225. package/src/Trigger/trigger.tsx +3 -1
  226. package/src/style/size.css +13 -4
  227. package/src/utils/debounce.ts +22 -3
  228. package/src/version.ts +1 -1
@@ -9,7 +9,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
9
9
  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
10
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
11
11
  import clsx from 'clsx';
12
- import React, { createContext, useCallback, useContext, useMemo } from 'react';
12
+ import React, { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';
13
13
  import { GlobalContext } from "../Config-Provider";
14
14
  import useMergedState from "../hooks/useMergedState";
15
15
  import mergeContextToProps from "../utils/mergeContextToProps";
@@ -26,9 +26,16 @@ export var TreeContext = /*#__PURE__*/createContext({
26
26
  selectedKeys: [],
27
27
  checkedKeys: [],
28
28
  expandedKeys: [],
29
+ draggable: false,
30
+ draggingKey: null,
31
+ dropState: null,
29
32
  onCheck: function onCheck() {},
30
33
  onSelect: function onSelect() {},
31
- onExpand: function onExpand() {}
34
+ onExpand: function onExpand() {},
35
+ onNodeDragStart: function onNodeDragStart() {},
36
+ onNodeDragOver: function onNodeDragOver() {},
37
+ onNodeDragLeave: function onNodeDragLeave() {},
38
+ onNodeDrop: function onNodeDrop() {}
32
39
  });
33
40
  var Tree = function Tree(baseprops) {
34
41
  var _useContext = useContext(GlobalContext),
@@ -58,6 +65,9 @@ var Tree = function Tree(baseprops) {
58
65
  icon = props.icon,
59
66
  showLine = props.showLine,
60
67
  switcherIcon = props.switcherIcon,
68
+ draggable = props.draggable,
69
+ allowDrop = props.allowDrop,
70
+ onDrop = props.onDrop,
61
71
  onSelect = props.onSelect,
62
72
  onCheck = props.onCheck,
63
73
  onExpand = props.onExpand;
@@ -165,9 +175,123 @@ var Tree = function Tree(baseprops) {
165
175
  node: nodes
166
176
  });
167
177
  }, [mergedExpandedKeys, itemMap, onExpand]);
178
+
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);
183
+ var _useState = useState(null),
184
+ _useState2 = _slicedToArray(_useState, 2),
185
+ draggingKey = _useState2[0],
186
+ setDraggingKey = _useState2[1];
187
+ var _useState3 = useState(null),
188
+ _useState4 = _slicedToArray(_useState3, 2),
189
+ dropState = _useState4[0],
190
+ 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) {
200
+ var offset = (clientY - rect.top) / rect.height;
201
+ if (offset < 0.25) return 'before';
202
+ if (offset > 0.75) return 'after';
203
+ return 'inside';
204
+ }, []);
205
+ var handleDragStart = useCallback(function (key, e) {
206
+ var node = itemMap.get(key);
207
+ if (node !== null && node !== void 0 && node.disabled) {
208
+ e.preventDefault();
209
+ return;
210
+ }
211
+ dragKeyRef.current = key;
212
+ setDraggingKey(key);
213
+ if (e.dataTransfer) {
214
+ e.dataTransfer.effectAllowed = 'move';
215
+ try {
216
+ e.dataTransfer.setData('text/plain', String(key));
217
+ } catch (_unused) {
218
+ /* some browsers throw on setData in certain modes */
219
+ }
220
+ }
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);
227
+ if (!dropNode || dropNode.disabled) return;
228
+ var position = resolvePosition(e.currentTarget.getBoundingClientRect(), e.clientY);
229
+ var dragNode = itemMap.get(dragKey);
230
+ if (allowDrop && dragNode && allowDrop({
231
+ dragNode: dragNode.original,
232
+ dropNode: dropNode.original,
233
+ position: position
234
+ }) === false) {
235
+ return; // not calling preventDefault shows the "no-drop" cursor
236
+ }
237
+ e.preventDefault();
238
+ if (e.dataTransfer) e.dataTransfer.dropEffect = 'move';
239
+ setDropState(function (prev) {
240
+ return prev && prev.key === key && prev.position === position ? prev : {
241
+ key: key,
242
+ position: position
243
+ };
244
+ });
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) {
251
+ e.preventDefault();
252
+ var dragKey = dragKeyRef.current;
253
+ if (dragKey === null) return;
254
+ 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);
258
+ if (!dragNode || !dropNode) return;
259
+ if (allowDrop && allowDrop({
260
+ dragNode: dragNode.original,
261
+ dropNode: dropNode.original,
262
+ position: position
263
+ }) === false) {
264
+ return;
265
+ }
266
+ onDrop === null || onDrop === void 0 || onDrop({
267
+ dragNode: dragNode.original,
268
+ dropNode: dropNode.original,
269
+ dragKey: dragKey,
270
+ dropKey: key,
271
+ position: position,
272
+ dropToGap: position !== 'inside'
273
+ });
274
+
275
+ // Auto-expand the target after a drop-inside so the dragged node is
276
+ // visible. Only effective in uncontrolled expandedKeys mode.
277
+ if (position === 'inside') {
278
+ setMergedExpandedKeys(function (prev) {
279
+ return prev.includes(key) ? prev : [].concat(_toConsumableArray(prev), [key]);
280
+ });
281
+ }
282
+ dragKeyRef.current = null;
283
+ setDraggingKey(null);
284
+ setDropState(null);
285
+ }, [itemMap, isIllegalMove, resolvePosition, allowDrop, onDrop]);
286
+ var handleDragEnd = useCallback(function () {
287
+ dragKeyRef.current = null;
288
+ setDraggingKey(null);
289
+ setDropState(null);
290
+ }, []);
168
291
  return /*#__PURE__*/React.createElement("div", {
169
292
  className: clsx(prefixCls, className),
170
- style: style
293
+ style: style,
294
+ onDragEnd: handleDragEnd
171
295
  }, /*#__PURE__*/React.createElement(TreeContext.Provider, {
172
296
  value: {
173
297
  prefixCls: prefixCls,
@@ -179,9 +303,16 @@ var Tree = function Tree(baseprops) {
179
303
  selectedKeys: mergedSelectedKeys,
180
304
  checkedKeys: mergedCheckedKeys,
181
305
  expandedKeys: mergedExpandedKeys,
306
+ draggable: draggable,
307
+ draggingKey: draggingKey,
308
+ dropState: dropState,
182
309
  onCheck: handleCheck,
183
310
  onSelect: handleSelect,
184
- onExpand: handleExpand
311
+ onExpand: handleExpand,
312
+ onNodeDragStart: handleDragStart,
313
+ onNodeDragOver: handleDragOver,
314
+ onNodeDragLeave: handleDragLeave,
315
+ onNodeDrop: handleDrop
185
316
  }
186
317
  }, flatItems.map(function (node, index) {
187
318
  return /*#__PURE__*/React.createElement(TreeNode, {
@@ -1,4 +1,25 @@
1
1
  import { TreeNode } from '../interface';
2
+ export type DragPosition = 'before' | 'after' | 'inside';
3
+ export interface MoveInfo {
4
+ dragKey: string | number;
5
+ dropKey: string | number;
6
+ position: DragPosition;
7
+ }
8
+ /**
9
+ * Reorder the nested dataSource immutably after a drag.
10
+ *
11
+ * Two phases: detach the dragged subtree, then insert it at the drop target.
12
+ * Only the modified path gets new arrays + shallow-cloned wrappers; untouched
13
+ * nodes are reused by reference (data may carry non-cloneable values like
14
+ * React elements / functions in `icon`).
15
+ *
16
+ * Returns a brand-new root array; returns the input unchanged if dragKey is
17
+ * not found or drag and drop resolve to the same location.
18
+ */
19
+ export declare function moveTreeNode<T extends Record<string, unknown>>(tree: T | T[], info: MoveInfo, fieldNames: {
20
+ key: keyof T;
21
+ children: keyof T;
22
+ }): T[];
2
23
  export declare function getChildKeys<T extends Record<string, unknown>>(data: T, fieldNames: {
3
24
  key: keyof T;
4
25
  children: keyof T;
@@ -1,9 +1,136 @@
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); }
1
2
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
3
  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
- 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); }
4
4
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
5
5
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
6
+ 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; }
7
+ 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; }
8
+ 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; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
10
+ 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); }
11
+ 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(_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 e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
12
+ 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); }
6
13
  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; }
14
+ /**
15
+ * Reorder the nested dataSource immutably after a drag.
16
+ *
17
+ * Two phases: detach the dragged subtree, then insert it at the drop target.
18
+ * Only the modified path gets new arrays + shallow-cloned wrappers; untouched
19
+ * nodes are reused by reference (data may carry non-cloneable values like
20
+ * React elements / functions in `icon`).
21
+ *
22
+ * Returns a brand-new root array; returns the input unchanged if dragKey is
23
+ * not found or drag and drop resolve to the same location.
24
+ */
25
+ export function moveTreeNode(tree, info, fieldNames) {
26
+ if (!tree || Array.isArray(tree) && tree.length === 0) return [];
27
+ var K = fieldNames.key,
28
+ C = fieldNames.children;
29
+ var dragKey = info.dragKey,
30
+ dropKey = info.dropKey,
31
+ position = info.position;
32
+ var root = Array.isArray(tree) ? tree : [tree];
33
+
34
+ // Phase 1: detach the drag node subtree (immutably).
35
+ // Returns the rebuilt array (without the drag node) plus the detached node.
36
+ var detach = function detach(nodes) {
37
+ var found = null;
38
+ var next = [];
39
+ var _iterator = _createForOfIteratorHelper(nodes),
40
+ _step;
41
+ try {
42
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
43
+ var n = _step.value;
44
+ if (n[K] === dragKey) {
45
+ found = n; // keep the original subtree reference intact
46
+ continue;
47
+ }
48
+ var kids = n[C];
49
+ if (Array.isArray(kids)) {
50
+ var r = detach(kids);
51
+ if (r.found) {
52
+ found = r.found;
53
+ next.push(_objectSpread(_objectSpread({}, n), {}, _defineProperty({}, C, r.nodes)));
54
+ } else {
55
+ next.push(n); // unchanged branch: reuse original ref
56
+ }
57
+ } else {
58
+ next.push(n);
59
+ }
60
+ }
61
+ } catch (err) {
62
+ _iterator.e(err);
63
+ } finally {
64
+ _iterator.f();
65
+ }
66
+ return {
67
+ found: found,
68
+ nodes: next
69
+ };
70
+ };
71
+ var _detach = detach(root),
72
+ dragNode = _detach.found,
73
+ withoutDrag = _detach.nodes;
74
+ if (!dragNode) return root; // dragKey not found: no-op
75
+
76
+ // Phase 2: insert per position into the tree that no longer contains the drag node.
77
+ // Note: do NOT short-circuit with an early return once inserted — siblings that
78
+ // follow the matched subtree must still be copied (by reference) or they'd be lost.
79
+ var insert = function insert(nodes) {
80
+ var next = [];
81
+ var inserted = false;
82
+ var _iterator2 = _createForOfIteratorHelper(nodes),
83
+ _step2;
84
+ try {
85
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
86
+ var n = _step2.value;
87
+ if (!inserted && position === 'inside' && n[K] === dropKey) {
88
+ var oldKids = Array.isArray(n[C]) ? n[C] : [];
89
+ next.push(_objectSpread(_objectSpread({}, n), {}, _defineProperty({}, C, [].concat(_toConsumableArray(oldKids), [dragNode]))));
90
+ inserted = true;
91
+ continue;
92
+ }
93
+ if (!inserted && position === 'before' && n[K] === dropKey) {
94
+ next.push(dragNode, n);
95
+ inserted = true;
96
+ continue;
97
+ }
98
+ if (!inserted && position === 'after' && n[K] === dropKey) {
99
+ next.push(n, dragNode);
100
+ inserted = true;
101
+ continue;
102
+ }
103
+ var kids = n[C];
104
+ if (inserted || !Array.isArray(kids)) {
105
+ // Already inserted, or a leaf with no subtree to search: keep by ref.
106
+ next.push(n);
107
+ } else {
108
+ var r = insert(kids);
109
+ if (r.inserted) {
110
+ next.push(_objectSpread(_objectSpread({}, n), {}, _defineProperty({}, C, r.nodes)));
111
+ inserted = true;
112
+ } else {
113
+ next.push(n);
114
+ }
115
+ }
116
+ }
117
+ } catch (err) {
118
+ _iterator2.e(err);
119
+ } finally {
120
+ _iterator2.f();
121
+ }
122
+ return {
123
+ inserted: inserted,
124
+ nodes: next
125
+ };
126
+ };
127
+ var _insert = insert(withoutDrag),
128
+ inserted = _insert.inserted,
129
+ result = _insert.nodes;
130
+ // If the drop target wasn't found, nothing should change — return the
131
+ // original (drag node stays put) rather than silently dropping it.
132
+ return inserted ? result : root;
133
+ }
7
134
  export function getChildKeys(data, fieldNames) {
8
135
  var key = fieldNames.key,
9
136
  children = fieldNames.children;
@@ -8,6 +8,23 @@
8
8
  display: none;
9
9
  }
10
10
 
11
+ &-arrow {
12
+ &::after {
13
+ position: absolute;
14
+ bottom: 0;
15
+ z-index: 0;
16
+ width: var(--yee-popup-arrow-width);
17
+ height: var(--yee-popup-arrow-height);
18
+ margin: auto;
19
+ border-radius: var(--yee-popup-arrow-border-radius);
20
+ box-shadow: var(--yee-box-shadow-popover-arrow);
21
+ transform: translateY(var(--yee-popup-arrow-translate-y))
22
+ rotate(var(--yee-popup-arrow-rotate));
23
+ content: '';
24
+ inset-inline: 0;
25
+ }
26
+ }
27
+
11
28
  &-topLeft,
12
29
  &-top,
13
30
  &-topRight {
@@ -1,5 +1,5 @@
1
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
- var _excluded = ["prefixCls", "trigger", "children", "open", "defaultOpen", "placement", "popupAlign", "popup", "hideOnClick", "mouseEnterDelay", "mouseLeaveDelay", "arrow", "forceRender", "onOpenChange", "zIndex"];
2
+ var _excluded = ["prefixCls", "trigger", "children", "open", "defaultOpen", "placement", "popupAlign", "popup", "hideOnClick", "mouseEnterDelay", "mouseLeaveDelay", "arrow", "forceRender", "popupStyle", "onOpenChange", "zIndex"];
3
3
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
4
  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; }
5
5
  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; }
@@ -45,6 +45,7 @@ var Trigger = function Trigger(baseprops) {
45
45
  arrow = props.arrow,
46
46
  _props$forceRender = props.forceRender,
47
47
  forceRender = _props$forceRender === void 0 ? false : _props$forceRender,
48
+ popupStyle = props.popupStyle,
48
49
  onOpenChange = props.onOpenChange,
49
50
  zIndex = props.zIndex,
50
51
  rest = _objectWithoutProperties(props, _excluded);
@@ -160,9 +161,9 @@ var Trigger = function Trigger(baseprops) {
160
161
  motionAppear: true,
161
162
  motionEnter: true
162
163
  },
163
- popupStyle: {
164
+ popupStyle: _objectSpread({
164
165
  pointerEvents: 'auto'
165
- }
166
+ }, popupStyle)
166
167
  }, zIndex !== undefined ? {
167
168
  zIndex: zIndex
168
169
  } : {}, {
@@ -1 +1 @@
1
- export default function useDebounceFunction<T extends (...args: any[]) => any>(fn: T, delay: number, deps?: never[]): (...args: Parameters<T>) => void;
1
+ export default function useDebounceFunction<T extends (...args: any[]) => any>(fn: T, delay: number, deps?: never[]): import("../utils/debounce").Debounced<T>;
@@ -2,6 +2,6 @@ import * as React from 'react';
2
2
  /**
3
3
  * Wrap `React.useLayoutEffect` which will not throw warning message in test env
4
4
  */
5
- declare const useLayoutEffect: typeof React.useEffect;
5
+ declare const useLayoutEffect: typeof React.useLayoutEffect;
6
6
  export default useLayoutEffect;
7
7
  export declare const useLayoutUpdateEffect: typeof React.useEffect;
@@ -8,10 +8,17 @@
8
8
  --yee-z-index-message: 1100; /* L6 全局反馈 */
9
9
  --yee-z-index-max: 1110; /* L7 最顶层 */
10
10
 
11
+ /* common size */
12
+ --yee-popup-arrow-width: 8px;
13
+ --yee-popup-arrow-height: 8px;
14
+ --yee-popup-border-radius: 4px;
15
+ --yee-popup-arrow-translate-y: 50%;
16
+ --yee-popup-arrow-rotate: -135deg;
17
+
11
18
  /* --Alert-- */
12
19
  --yee-alert-close-top: 7px;
13
20
  --yee-alert-close-right: 11px;
14
- --yee-alert-icon-margin-right: 6px;
21
+ --yee-alert-icon-margin-right: 12px;
15
22
  --yee-alert-title-font-size: 16px;
16
23
  --yee-alert-message-font-size: 14px;
17
24
  --yee-alert-banner-padding: 8px 12px;
@@ -26,7 +33,7 @@
26
33
  --yee-anchor-static-content-padding: 8px 0;
27
34
  --yee-anchor-static-item-active-width: 2px;
28
35
  --yee-anchor-static-item-active-height: 22px;
29
- --yee-anchor-vertical-line-left: 4px;
36
+ --yee-anchor-vertical-line-left: 0;
30
37
  --yee-anchor-horizontal-item-padding: 6px 12px;
31
38
  --yee-anchor-nav-arrow-left: -8px;
32
39
  --yee-anchor-nav-arrow-height: 80px;
@@ -376,6 +383,8 @@
376
383
  --yee-popover-header-font-weight: 500;
377
384
  --yee-popover-header-font-size: 16px;
378
385
  --yee-popover-header-line-height: 24px;
386
+ --yee-popover-arrow-width: var(--yee-popup-arrow-width);
387
+ --yee-popover-arrow-height: var(--yee-popup-arrow-height);
379
388
 
380
389
  /* --Progress-- */
381
390
  --yee-progress-text-width: 48px;
@@ -768,8 +777,8 @@
768
777
  --yee-tooltip-z-index: var(--yee-z-index-tooltip);
769
778
  --yee-tooltip-padding: 8px 12px;
770
779
  --yee-tooltip-border-radius: 4px;
771
- --yee-tooltip-arrow-width: 8px;
772
- --yee-tooltip-arrow-height: 8px;
780
+ --yee-tooltip-arrow-width: var(--yee-popup-arrow-width);
781
+ --yee-tooltip-arrow-height: var(--yee-popup-arrow-height);
773
782
  --yee-tooltip-arrow-border-radius: 0 0 2px 0;
774
783
  --yee-tooltip-arrow-translate-y: 50%;
775
784
  --yee-tooltip-arrow-rotate: -135deg;
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-06-05T07:34:02.169Z
4
+ * Generated on 2026-06-18T01:50:06.790Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-06-05T07:34:02.169Z
4
+ * Generated on 2026-06-18T01:50:06.790Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -1109,10 +1109,17 @@
1109
1109
  --yee-z-index-message: 1100; /* L6 全局反馈 */
1110
1110
  --yee-z-index-max: 1110; /* L7 最顶层 */
1111
1111
 
1112
+ /* common size */
1113
+ --yee-popup-arrow-width: 8px;
1114
+ --yee-popup-arrow-height: 8px;
1115
+ --yee-popup-border-radius: 4px;
1116
+ --yee-popup-arrow-translate-y: 50%;
1117
+ --yee-popup-arrow-rotate: -135deg;
1118
+
1112
1119
  /* --Alert-- */
1113
1120
  --yee-alert-close-top: 7px;
1114
1121
  --yee-alert-close-right: 11px;
1115
- --yee-alert-icon-margin-right: 6px;
1122
+ --yee-alert-icon-margin-right: 12px;
1116
1123
  --yee-alert-title-font-size: 16px;
1117
1124
  --yee-alert-message-font-size: 14px;
1118
1125
  --yee-alert-banner-padding: 8px 12px;
@@ -1127,7 +1134,7 @@
1127
1134
  --yee-anchor-static-content-padding: 8px 0;
1128
1135
  --yee-anchor-static-item-active-width: 2px;
1129
1136
  --yee-anchor-static-item-active-height: 22px;
1130
- --yee-anchor-vertical-line-left: 4px;
1137
+ --yee-anchor-vertical-line-left: 0;
1131
1138
  --yee-anchor-horizontal-item-padding: 6px 12px;
1132
1139
  --yee-anchor-nav-arrow-left: -8px;
1133
1140
  --yee-anchor-nav-arrow-height: 80px;
@@ -1477,6 +1484,8 @@
1477
1484
  --yee-popover-header-font-weight: 500;
1478
1485
  --yee-popover-header-font-size: 16px;
1479
1486
  --yee-popover-header-line-height: 24px;
1487
+ --yee-popover-arrow-width: var(--yee-popup-arrow-width);
1488
+ --yee-popover-arrow-height: var(--yee-popup-arrow-height);
1480
1489
 
1481
1490
  /* --Progress-- */
1482
1491
  --yee-progress-text-width: 48px;
@@ -1869,8 +1878,8 @@
1869
1878
  --yee-tooltip-z-index: var(--yee-z-index-tooltip);
1870
1879
  --yee-tooltip-padding: 8px 12px;
1871
1880
  --yee-tooltip-border-radius: 4px;
1872
- --yee-tooltip-arrow-width: 8px;
1873
- --yee-tooltip-arrow-height: 8px;
1881
+ --yee-tooltip-arrow-width: var(--yee-popup-arrow-width);
1882
+ --yee-tooltip-arrow-height: var(--yee-popup-arrow-height);
1874
1883
  --yee-tooltip-arrow-border-radius: 0 0 2px 0;
1875
1884
  --yee-tooltip-arrow-translate-y: 50%;
1876
1885
  --yee-tooltip-arrow-rotate: -135deg;
@@ -1,2 +1,7 @@
1
- declare function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
1
+ type AnyFn = (...args: any[]) => any;
2
+ export type Debounced<T extends AnyFn> = ((...args: Parameters<T>) => void) & {
3
+ /** Cancel any pending invocation. */
4
+ cancel: () => void;
5
+ };
6
+ declare function debounce<T extends AnyFn>(fn: T, delay: number): Debounced<T>;
2
7
  export default debounce;
@@ -6,7 +6,7 @@ function debounce(fn, delay) {
6
6
  throw new Error('Expected delay to be a positive number');
7
7
  }
8
8
  var timer = undefined;
9
- return function () {
9
+ var debounced = function debounced() {
10
10
  var _this = this;
11
11
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12
12
  args[_key] = arguments[_key];
@@ -15,9 +15,16 @@ function debounce(fn, delay) {
15
15
  clearTimeout(timer);
16
16
  }
17
17
  timer = setTimeout(function () {
18
- // @ts-ignore
18
+ timer = undefined;
19
19
  fn.apply(_this, args);
20
20
  }, delay);
21
21
  };
22
+ debounced.cancel = function () {
23
+ if (timer !== undefined) {
24
+ clearTimeout(timer);
25
+ timer = undefined;
26
+ }
27
+ };
28
+ return debounced;
22
29
  }
23
30
  export default debounce;
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.1.0";
6
+ export declare const version = "0.2.0";
@@ -1,4 +1,4 @@
1
- export var version = "0.1.0";
1
+ export var version = "0.2.0";
2
2
  if (typeof window !== 'undefined') {
3
3
  window.__yee_c_version__ = version;
4
4
  }