@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
@@ -1,6 +1,10 @@
1
1
  import React, { ChangeEvent } from 'react';
2
- import type { TreeProps } from './interface';
2
+ import type { DragPosition, TreeProps } from './interface';
3
3
  import './style/index.less';
4
+ type DropState = {
5
+ key: string | number;
6
+ position: DragPosition;
7
+ } | null;
4
8
  export declare const TreeContext: React.Context<{
5
9
  prefixCls?: string | undefined;
6
10
  checkable?: boolean | undefined;
@@ -11,9 +15,16 @@ export declare const TreeContext: React.Context<{
11
15
  selectedKeys: Array<string | number>;
12
16
  checkedKeys: Array<string | number>;
13
17
  expandedKeys: Array<string | number>;
18
+ draggable?: boolean | undefined;
19
+ draggingKey: string | number | null;
20
+ dropState: DropState;
14
21
  onCheck: (event: ChangeEvent<HTMLInputElement>) => void;
15
22
  onSelect: (key: string | number) => void;
16
23
  onExpand: (key: string | number) => void;
24
+ onNodeDragStart: (key: string | number, e: React.DragEvent) => void;
25
+ onNodeDragOver: (key: string | number, e: React.DragEvent) => void;
26
+ onNodeDragLeave: (key: string | number, e: React.DragEvent) => void;
27
+ onNodeDrop: (key: string | number, e: React.DragEvent) => void;
17
28
  }>;
18
29
  declare const Tree: <T extends Record<string, unknown> = any>(baseprops: TreeProps<T>) => React.JSX.Element;
19
30
  export default Tree;
@@ -51,11 +51,22 @@ var TreeContext = (0, import_react.createContext)({
51
51
  selectedKeys: [],
52
52
  checkedKeys: [],
53
53
  expandedKeys: [],
54
+ draggable: false,
55
+ draggingKey: null,
56
+ dropState: null,
54
57
  onCheck: () => {
55
58
  },
56
59
  onSelect: () => {
57
60
  },
58
61
  onExpand: () => {
62
+ },
63
+ onNodeDragStart: () => {
64
+ },
65
+ onNodeDragOver: () => {
66
+ },
67
+ onNodeDragLeave: () => {
68
+ },
69
+ onNodeDrop: () => {
59
70
  }
60
71
  });
61
72
  var Tree = (baseprops) => {
@@ -80,6 +91,9 @@ var Tree = (baseprops) => {
80
91
  icon,
81
92
  showLine,
82
93
  switcherIcon,
94
+ draggable,
95
+ allowDrop,
96
+ onDrop,
83
97
  onSelect,
84
98
  onCheck,
85
99
  onExpand
@@ -179,25 +193,167 @@ var Tree = (baseprops) => {
179
193
  },
180
194
  [mergedExpandedKeys, itemMap, onExpand]
181
195
  );
182
- return /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(prefixCls, className), style }, /* @__PURE__ */ import_react.default.createElement(
183
- TreeContext.Provider,
184
- {
185
- value: {
186
- prefixCls,
187
- checkable,
188
- showIcon,
189
- icon,
190
- showLine,
191
- switcherIcon,
192
- selectedKeys: mergedSelectedKeys,
193
- checkedKeys: mergedCheckedKeys,
194
- expandedKeys: mergedExpandedKeys,
195
- onCheck: handleCheck,
196
- onSelect: handleSelect,
197
- onExpand: handleExpand
196
+ const dragKeyRef = (0, import_react.useRef)(null);
197
+ const [draggingKey, setDraggingKey] = (0, import_react.useState)(null);
198
+ const [dropState, setDropState] = (0, import_react.useState)(null);
199
+ const isIllegalMove = (0, import_react.useCallback)(
200
+ (dragKey, dropKey) => {
201
+ if (dragKey === dropKey)
202
+ return true;
203
+ const dropNode = itemMap.get(dropKey);
204
+ return !!dropNode && dropNode.path.includes(dragKey);
205
+ },
206
+ [itemMap]
207
+ );
208
+ const resolvePosition = (0, import_react.useCallback)(
209
+ (rect, clientY) => {
210
+ const offset = (clientY - rect.top) / rect.height;
211
+ if (offset < 0.25)
212
+ return "before";
213
+ if (offset > 0.75)
214
+ return "after";
215
+ return "inside";
216
+ },
217
+ []
218
+ );
219
+ const handleDragStart = (0, import_react.useCallback)(
220
+ (key, e) => {
221
+ const node = itemMap.get(key);
222
+ if (node == null ? void 0 : node.disabled) {
223
+ e.preventDefault();
224
+ return;
225
+ }
226
+ dragKeyRef.current = key;
227
+ setDraggingKey(key);
228
+ if (e.dataTransfer) {
229
+ e.dataTransfer.effectAllowed = "move";
230
+ try {
231
+ e.dataTransfer.setData("text/plain", String(key));
232
+ } catch (e2) {
233
+ }
234
+ }
235
+ },
236
+ [itemMap]
237
+ );
238
+ const handleDragOver = (0, import_react.useCallback)(
239
+ (key, e) => {
240
+ const dragKey = dragKeyRef.current;
241
+ if (dragKey === null)
242
+ return;
243
+ if (isIllegalMove(dragKey, key))
244
+ return;
245
+ const dropNode = itemMap.get(key);
246
+ if (!dropNode || dropNode.disabled)
247
+ return;
248
+ const position = resolvePosition(
249
+ e.currentTarget.getBoundingClientRect(),
250
+ e.clientY
251
+ );
252
+ const dragNode = itemMap.get(dragKey);
253
+ if (allowDrop && dragNode && allowDrop({
254
+ dragNode: dragNode.original,
255
+ dropNode: dropNode.original,
256
+ position
257
+ }) === false) {
258
+ return;
198
259
  }
260
+ e.preventDefault();
261
+ if (e.dataTransfer)
262
+ e.dataTransfer.dropEffect = "move";
263
+ setDropState(
264
+ (prev) => prev && prev.key === key && prev.position === position ? prev : { key, position }
265
+ );
199
266
  },
200
- flatItems.map((node, index) => /* @__PURE__ */ import_react.default.createElement(import_tree_node.default, { node, key: node.key || index }))
201
- ));
267
+ [itemMap, isIllegalMove, resolvePosition, allowDrop]
268
+ );
269
+ const handleDragLeave = (0, import_react.useCallback)(
270
+ // Intentionally a no-op: dragleave fires spuriously when crossing child
271
+ // elements. Drop state is cleared in handleDragEnd at the Tree root.
272
+ () => {
273
+ },
274
+ []
275
+ );
276
+ const handleDrop = (0, import_react.useCallback)(
277
+ (key, e) => {
278
+ e.preventDefault();
279
+ const dragKey = dragKeyRef.current;
280
+ if (dragKey === null)
281
+ return;
282
+ const position = resolvePosition(
283
+ e.currentTarget.getBoundingClientRect(),
284
+ e.clientY
285
+ );
286
+ if (isIllegalMove(dragKey, key))
287
+ return;
288
+ const dragNode = itemMap.get(dragKey);
289
+ const dropNode = itemMap.get(key);
290
+ if (!dragNode || !dropNode)
291
+ return;
292
+ if (allowDrop && allowDrop({
293
+ dragNode: dragNode.original,
294
+ dropNode: dropNode.original,
295
+ position
296
+ }) === false) {
297
+ return;
298
+ }
299
+ onDrop == null ? void 0 : onDrop({
300
+ dragNode: dragNode.original,
301
+ dropNode: dropNode.original,
302
+ dragKey,
303
+ dropKey: key,
304
+ position,
305
+ dropToGap: position !== "inside"
306
+ });
307
+ if (position === "inside") {
308
+ setMergedExpandedKeys(
309
+ (prev) => prev.includes(key) ? prev : [...prev, key]
310
+ );
311
+ }
312
+ dragKeyRef.current = null;
313
+ setDraggingKey(null);
314
+ setDropState(null);
315
+ },
316
+ [itemMap, isIllegalMove, resolvePosition, allowDrop, onDrop]
317
+ );
318
+ const handleDragEnd = (0, import_react.useCallback)(() => {
319
+ dragKeyRef.current = null;
320
+ setDraggingKey(null);
321
+ setDropState(null);
322
+ }, []);
323
+ return /* @__PURE__ */ import_react.default.createElement(
324
+ "div",
325
+ {
326
+ className: (0, import_clsx.default)(prefixCls, className),
327
+ style,
328
+ onDragEnd: handleDragEnd
329
+ },
330
+ /* @__PURE__ */ import_react.default.createElement(
331
+ TreeContext.Provider,
332
+ {
333
+ value: {
334
+ prefixCls,
335
+ checkable,
336
+ showIcon,
337
+ icon,
338
+ showLine,
339
+ switcherIcon,
340
+ selectedKeys: mergedSelectedKeys,
341
+ checkedKeys: mergedCheckedKeys,
342
+ expandedKeys: mergedExpandedKeys,
343
+ draggable,
344
+ draggingKey,
345
+ dropState,
346
+ onCheck: handleCheck,
347
+ onSelect: handleSelect,
348
+ onExpand: handleExpand,
349
+ onNodeDragStart: handleDragStart,
350
+ onNodeDragOver: handleDragOver,
351
+ onNodeDragLeave: handleDragLeave,
352
+ onNodeDrop: handleDrop
353
+ }
354
+ },
355
+ flatItems.map((node, index) => /* @__PURE__ */ import_react.default.createElement(import_tree_node.default, { node, key: node.key || index }))
356
+ )
357
+ );
202
358
  };
203
359
  var tree_default = Tree;
@@ -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,7 +1,24 @@
1
1
  var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
3
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
21
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
5
22
  var __export = (target, all) => {
6
23
  for (var name in all)
7
24
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -22,10 +39,81 @@ __export(tree_tools_exports, {
22
39
  containsAll: () => containsAll,
23
40
  getCheckedKeys: () => getCheckedKeys,
24
41
  getChildKeys: () => getChildKeys,
42
+ moveTreeNode: () => moveTreeNode,
25
43
  removeContainsAll: () => removeContainsAll,
26
44
  tree2array: () => tree2array
27
45
  });
28
46
  module.exports = __toCommonJS(tree_tools_exports);
47
+ function moveTreeNode(tree, info, fieldNames) {
48
+ if (!tree || Array.isArray(tree) && tree.length === 0)
49
+ return [];
50
+ const { key: K, children: C } = fieldNames;
51
+ const { dragKey, dropKey, position } = info;
52
+ const root = Array.isArray(tree) ? tree : [tree];
53
+ const detach = (nodes) => {
54
+ let found = null;
55
+ const next = [];
56
+ for (const n of nodes) {
57
+ if (n[K] === dragKey) {
58
+ found = n;
59
+ continue;
60
+ }
61
+ const kids = n[C];
62
+ if (Array.isArray(kids)) {
63
+ const r = detach(kids);
64
+ if (r.found) {
65
+ found = r.found;
66
+ next.push(__spreadProps(__spreadValues({}, n), { [C]: r.nodes }));
67
+ } else {
68
+ next.push(n);
69
+ }
70
+ } else {
71
+ next.push(n);
72
+ }
73
+ }
74
+ return { found, nodes: next };
75
+ };
76
+ const { found: dragNode, nodes: withoutDrag } = detach(root);
77
+ if (!dragNode)
78
+ return root;
79
+ const insert = (nodes) => {
80
+ const next = [];
81
+ let inserted2 = false;
82
+ for (const n of nodes) {
83
+ if (!inserted2 && position === "inside" && n[K] === dropKey) {
84
+ const oldKids = Array.isArray(n[C]) ? n[C] : [];
85
+ next.push(__spreadProps(__spreadValues({}, n), { [C]: [...oldKids, dragNode] }));
86
+ inserted2 = true;
87
+ continue;
88
+ }
89
+ if (!inserted2 && position === "before" && n[K] === dropKey) {
90
+ next.push(dragNode, n);
91
+ inserted2 = true;
92
+ continue;
93
+ }
94
+ if (!inserted2 && position === "after" && n[K] === dropKey) {
95
+ next.push(n, dragNode);
96
+ inserted2 = true;
97
+ continue;
98
+ }
99
+ const kids = n[C];
100
+ if (inserted2 || !Array.isArray(kids)) {
101
+ next.push(n);
102
+ } else {
103
+ const r = insert(kids);
104
+ if (r.inserted) {
105
+ next.push(__spreadProps(__spreadValues({}, n), { [C]: r.nodes }));
106
+ inserted2 = true;
107
+ } else {
108
+ next.push(n);
109
+ }
110
+ }
111
+ }
112
+ return { inserted: inserted2, nodes: next };
113
+ };
114
+ const { inserted, nodes: result } = insert(withoutDrag);
115
+ return inserted ? result : root;
116
+ }
29
117
  function getChildKeys(data, fieldNames) {
30
118
  const { key, children } = fieldNames;
31
119
  const _children = data[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 {
@@ -85,6 +85,7 @@ var Trigger = (baseprops) => {
85
85
  mouseLeaveDelay = 0.2,
86
86
  arrow,
87
87
  forceRender = false,
88
+ popupStyle,
88
89
  onOpenChange,
89
90
  zIndex
90
91
  } = _a, rest = __objRest(_a, [
@@ -101,6 +102,7 @@ var Trigger = (baseprops) => {
101
102
  "mouseLeaveDelay",
102
103
  "arrow",
103
104
  "forceRender",
105
+ "popupStyle",
104
106
  "onOpenChange",
105
107
  "zIndex"
106
108
  ]);
@@ -206,7 +208,7 @@ var Trigger = (baseprops) => {
206
208
  motionAppear: true,
207
209
  motionEnter: true
208
210
  },
209
- popupStyle: { pointerEvents: "auto" }
211
+ popupStyle: __spreadValues({ pointerEvents: "auto" }, popupStyle)
210
212
  }), zIndex !== void 0 ? { zIndex } : {}), {
211
213
  getPopupClassNameFromAlign,
212
214
  onOpenChange: handlePopupOpenChange,
@@ -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;
@@ -30,13 +30,21 @@ function debounce(fn, delay) {
30
30
  throw new Error("Expected delay to be a positive number");
31
31
  }
32
32
  let timer = void 0;
33
- return function(...args) {
33
+ const debounced = function(...args) {
34
34
  if (timer !== void 0) {
35
35
  clearTimeout(timer);
36
36
  }
37
37
  timer = setTimeout(() => {
38
+ timer = void 0;
38
39
  fn.apply(this, args);
39
40
  }, delay);
40
41
  };
42
+ debounced.cancel = () => {
43
+ if (timer !== void 0) {
44
+ clearTimeout(timer);
45
+ timer = void 0;
46
+ }
47
+ };
48
+ return debounced;
41
49
  }
42
50
  var debounce_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";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.1.0";
25
+ var version = "0.2.0";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -17,20 +17,36 @@ var ICON_STROKE_WIDTH = 1.5; // Icon stroke width
17
17
 
18
18
  var iconMap = {
19
19
  info: {
20
- small: /*#__PURE__*/React.createElement(Info, null),
21
- large: /*#__PURE__*/React.createElement(Info, null)
20
+ small: /*#__PURE__*/React.createElement(Info, {
21
+ size: 16
22
+ }),
23
+ large: /*#__PURE__*/React.createElement(Info, {
24
+ size: 24
25
+ })
22
26
  },
23
27
  success: {
24
- small: /*#__PURE__*/React.createElement(CircleCheckBig, null),
25
- large: /*#__PURE__*/React.createElement(CircleCheckBig, null)
28
+ small: /*#__PURE__*/React.createElement(CircleCheckBig, {
29
+ size: 16
30
+ }),
31
+ large: /*#__PURE__*/React.createElement(CircleCheckBig, {
32
+ size: 24
33
+ })
26
34
  },
27
35
  warning: {
28
- small: /*#__PURE__*/React.createElement(CircleAlert, null),
29
- large: /*#__PURE__*/React.createElement(CircleAlert, null)
36
+ small: /*#__PURE__*/React.createElement(CircleAlert, {
37
+ size: 16
38
+ }),
39
+ large: /*#__PURE__*/React.createElement(CircleAlert, {
40
+ size: 24
41
+ })
30
42
  },
31
43
  error: {
32
- small: /*#__PURE__*/React.createElement(CircleX, null),
33
- large: /*#__PURE__*/React.createElement(CircleX, null)
44
+ small: /*#__PURE__*/React.createElement(CircleX, {
45
+ size: 16
46
+ }),
47
+ large: /*#__PURE__*/React.createElement(CircleX, {
48
+ size: 24
49
+ })
34
50
  }
35
51
  };
36
52
  var Alert = function Alert(baseprops) {
@@ -69,4 +69,7 @@
69
69
  border: none;
70
70
  border-radius: 0;
71
71
  }
72
+
73
+ &-small {
74
+ }
72
75
  }