@qsxy/element-plus-react 1.0.0-next.5 → 1.0.0-next.7

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 (109) hide show
  1. package/dist/Cascader/Cascader.js +147 -182
  2. package/dist/Cascader/CascaderContext.d.ts +4 -10
  3. package/dist/Cascader/CascaderContext.js +2 -6
  4. package/dist/Cascader/CascaderDropdown.js +1 -1
  5. package/dist/Cascader/CascaderMenu.d.ts +0 -7
  6. package/dist/Cascader/CascaderMenu.js +4 -77
  7. package/dist/Cascader/Utils.d.ts +0 -2
  8. package/dist/Cascader/Utils.js +0 -44
  9. package/dist/Cascader/index.d.ts +1 -1
  10. package/dist/Cascader/typings.d.ts +2 -18
  11. package/dist/Cascader/useCascader.d.ts +1 -15
  12. package/dist/Cascader/useCascader.js +14 -41
  13. package/dist/DatePicker/DatePicker.js +5 -5
  14. package/dist/Empty/ImgEmpty.js +1 -1
  15. package/dist/Tree/DirectoryTree.d.ts +6 -13
  16. package/dist/Tree/DirectoryTree.js +32 -81
  17. package/dist/Tree/DropIndicator.d.ts +4 -2
  18. package/dist/Tree/DropIndicator.js +7 -2
  19. package/dist/Tree/Indent.d.ts +2 -2
  20. package/dist/Tree/Indent.js +4 -4
  21. package/dist/Tree/MotionTreeNode.d.ts +4 -5
  22. package/dist/Tree/MotionTreeNode.js +69 -52
  23. package/dist/Tree/NodeList.d.ts +15 -11
  24. package/dist/Tree/NodeList.js +38 -29
  25. package/dist/Tree/RCTree.d.ts +77 -75
  26. package/dist/Tree/RCTree.js +199 -188
  27. package/dist/Tree/Tree.d.ts +3 -3
  28. package/dist/Tree/Tree.js +27 -27
  29. package/dist/Tree/TreeNode.d.ts +5 -90
  30. package/dist/Tree/TreeNode.js +320 -422
  31. package/dist/Tree/contextTypes.d.ts +36 -30
  32. package/dist/Tree/contextTypes.js +17 -4
  33. package/dist/Tree/index.d.ts +2 -2
  34. package/dist/Tree/typings.d.ts +60 -19
  35. package/dist/Tree/typings.js +1 -13
  36. package/dist/Tree/typings.tsx--bak +245 -0
  37. package/dist/Tree/useUnmount.d.ts +5 -0
  38. package/dist/{VirtualList/index.js → Tree/useUnmount.js} +25 -10
  39. package/dist/Tree/util.d.ts +17 -21
  40. package/dist/Tree/util.js +21 -52
  41. package/dist/Tree/utils/conductUtil.d.ts +2 -2
  42. package/dist/Tree/utils/conductUtil.js +14 -3
  43. package/dist/Tree/utils/dictUtil.d.ts +7 -3
  44. package/dist/Tree/utils/dictUtil.js +49 -32
  45. package/dist/Tree/utils/diffUtil.d.ts +4 -3
  46. package/dist/Tree/utils/keyUtil.d.ts +2 -0
  47. package/dist/{VirtualList/utils/isFirefox.js → Tree/utils/keyUtil.js} +8 -7
  48. package/dist/Tree/utils/motion.js +6 -5
  49. package/dist/Tree/utils/treeUtil.d.ts +16 -18
  50. package/dist/Tree/utils/treeUtil.js +35 -14
  51. package/dist/TreeSelect/Utils.d.ts +1 -1
  52. package/dist/Util/base.d.ts +1 -1
  53. package/dist/Util/base.js +14 -2
  54. package/dist/index.css +6 -4
  55. package/dist/index.d.ts +3 -5
  56. package/dist/index.js +0 -5
  57. package/dist/theme-chalk/calendar/month-table.scss +1 -1
  58. package/dist/theme-chalk/input/input.scss +5 -3
  59. package/package.json +2 -1
  60. package/dist/Tree/utils/KeyCode.d.ts +0 -436
  61. package/dist/Tree/utils/KeyCode.js +0 -550
  62. package/dist/VirtualList/Filler.d.ts +0 -16
  63. package/dist/VirtualList/Filler.js +0 -78
  64. package/dist/VirtualList/Item.d.ts +0 -7
  65. package/dist/VirtualList/Item.js +0 -37
  66. package/dist/VirtualList/ScrollBar.d.ts +0 -43
  67. package/dist/VirtualList/ScrollBar.js +0 -216
  68. package/dist/VirtualList/VirtualList.d.ts +0 -36
  69. package/dist/VirtualList/VirtualList.js +0 -280
  70. package/dist/VirtualList/hooks/useChildren.d.ts +0 -3
  71. package/dist/VirtualList/hooks/useChildren.js +0 -46
  72. package/dist/VirtualList/hooks/useDiffItem.d.ts +0 -2
  73. package/dist/VirtualList/hooks/useDiffItem.js +0 -39
  74. package/dist/VirtualList/hooks/useFrameWheel.d.ts +0 -6
  75. package/dist/VirtualList/hooks/useFrameWheel.js +0 -72
  76. package/dist/VirtualList/hooks/useHeights.d.ts +0 -3
  77. package/dist/VirtualList/hooks/useHeights.js +0 -83
  78. package/dist/VirtualList/hooks/useLayoutEffect.d.ts +0 -6
  79. package/dist/VirtualList/hooks/useLayoutEffect.js +0 -30
  80. package/dist/VirtualList/hooks/useMobileTouchMove.d.ts +0 -2
  81. package/dist/VirtualList/hooks/useMobileTouchMove.js +0 -92
  82. package/dist/VirtualList/hooks/useOriginScroll.d.ts +0 -2
  83. package/dist/VirtualList/hooks/useOriginScroll.js +0 -56
  84. package/dist/VirtualList/hooks/useScrollTo.d.ts +0 -5
  85. package/dist/VirtualList/hooks/useScrollTo.js +0 -111
  86. package/dist/VirtualList/index.d.ts +0 -2
  87. package/dist/VirtualList/interface.d.ts +0 -8
  88. package/dist/VirtualList/interface.js +0 -17
  89. package/dist/VirtualList/mock.d.ts +0 -6
  90. package/dist/VirtualList/mock.js +0 -29
  91. package/dist/VirtualList/utils/CacheMap.d.ts +0 -7
  92. package/dist/VirtualList/utils/CacheMap.js +0 -36
  93. package/dist/VirtualList/utils/algorithmUtil.d.ts +0 -23
  94. package/dist/VirtualList/utils/algorithmUtil.js +0 -81
  95. package/dist/VirtualList/utils/findDOMNode.d.ts +0 -5
  96. package/dist/VirtualList/utils/findDOMNode.js +0 -30
  97. package/dist/VirtualList/utils/isFirefox.d.ts +0 -2
  98. package/dist/VirtualList/utils/raf.d.ts +0 -5
  99. package/dist/VirtualList/utils/raf.js +0 -57
  100. package/dist/theme-chalk/bak/common/popup.scss +0 -47
  101. package/dist/theme-chalk/bak/common/transition.scss +0 -118
  102. package/dist/theme-chalk/bak/common/var.scss +0 -1476
  103. package/dist/theme-chalk/bak/mixins/_button.scss +0 -224
  104. package/dist/theme-chalk/bak/mixins/_col.scss +0 -38
  105. package/dist/theme-chalk/bak/mixins/_var.scss +0 -55
  106. package/dist/theme-chalk/bak/mixins/config.scss +0 -5
  107. package/dist/theme-chalk/bak/mixins/function.scss +0 -85
  108. package/dist/theme-chalk/bak/mixins/mixins.scss +0 -215
  109. package/dist/theme-chalk/bak/mixins/utils.scss +0 -39
@@ -33,14 +33,17 @@ __export(MotionTreeNode_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(MotionTreeNode_exports);
35
35
  var import_classnames = __toESM(require("classnames"));
36
- var import_omit = __toESM(require("lodash/omit"));
37
- var import_react = __toESM(require("react"));
36
+ var import_rc_util = require("rc-util");
37
+ var import_useLayoutEffect = __toESM(require("rc-util/lib/hooks/useLayoutEffect"));
38
+ var React = __toESM(require("react"));
39
+ var import_react = require("react");
38
40
  var import_Transition = require("../Transition");
39
41
  var import_TreeNode = __toESM(require("./TreeNode"));
40
42
  var import_contextTypes = require("./contextTypes");
43
+ var import_useUnmount = __toESM(require("./useUnmount"));
41
44
  var import_treeUtil = require("./utils/treeUtil");
42
- var MotionTreeNode = (0, import_react.forwardRef)(
43
- ({
45
+ var MotionTreeNode = React.forwardRef((oriProps, ref) => {
46
+ const {
44
47
  className,
45
48
  style,
46
49
  motion,
@@ -51,59 +54,73 @@ var MotionTreeNode = (0, import_react.forwardRef)(
51
54
  active,
52
55
  treeNodeRequiredProps,
53
56
  ...props
54
- }, ref) => {
55
- const [visible, setVisible] = (0, import_react.useState)(true);
56
- const { prefixCls } = (0, import_react.useContext)(import_contextTypes.TreeContext);
57
- const motionedRef = (0, import_react.useRef)(false);
58
- const onMotionEnd = () => {
59
- if (!motionedRef.current) {
60
- onOriginMotionEnd();
61
- }
62
- motionedRef.current = true;
63
- };
64
- (0, import_react.useEffect)(() => {
65
- if (motionNodes && motionType === "hide" && visible) {
66
- setVisible(false);
67
- }
68
- }, [motionNodes]);
69
- (0, import_react.useEffect)(() => {
70
- if (motionNodes) {
71
- onOriginMotionStart();
57
+ } = oriProps;
58
+ const [visible, setVisible] = React.useState(true);
59
+ const { prefixCls } = React.useContext(import_contextTypes.TreeContext);
60
+ const targetVisible = motionNodes && motionType !== "hide";
61
+ const motionedRef = (0, import_react.useRef)(false);
62
+ const containerRef = (0, import_react.useRef)(null);
63
+ const mergedRef = (0, import_rc_util.useComposeRef)(ref, containerRef);
64
+ const onMotionEnd = () => {
65
+ if (!motionedRef.current) {
66
+ onOriginMotionEnd();
67
+ }
68
+ motionedRef.current = true;
69
+ };
70
+ (0, import_useLayoutEffect.default)(() => {
71
+ if (motionNodes) {
72
+ if (targetVisible !== visible) {
73
+ setVisible(targetVisible);
72
74
  }
73
- return () => {
74
- if (motionNodes) {
75
- onMotionEnd();
76
- }
77
- };
78
- }, []);
75
+ }
76
+ }, [motionNodes]);
77
+ const triggerMotionStart = () => {
79
78
  if (motionNodes) {
80
- return /* @__PURE__ */ import_react.default.createElement(import_Transition.Transition, { ref, visible, ...motion, transitionAppear: motionType === "show", afterEnter: onMotionEnd, afterLeave: onMotionEnd }, ({ className: motionClassName, style: motionStyle }, motionRef) => /* @__PURE__ */ import_react.default.createElement("div", { ref: motionRef, className: (0, import_classnames.default)(`${prefixCls}-treenode-motion`, motionClassName), style: motionStyle }, motionNodes.map((treeNode) => {
81
- const {
82
- data: { ...restProps },
79
+ onOriginMotionStart();
80
+ }
81
+ };
82
+ const triggerMotionEndRef = React.useRef(false);
83
+ const triggerMotionEnd = () => {
84
+ if (motionNodes && !triggerMotionEndRef.current) {
85
+ triggerMotionEndRef.current = true;
86
+ onOriginMotionEnd();
87
+ }
88
+ };
89
+ (0, import_useUnmount.default)(triggerMotionStart, triggerMotionEnd);
90
+ const onVisibleChanged = (nextVisible) => {
91
+ if (targetVisible === nextVisible) {
92
+ triggerMotionEnd();
93
+ }
94
+ };
95
+ if (motionNodes) {
96
+ return /* @__PURE__ */ React.createElement(import_Transition.Transition, { nodeRef: containerRef, visible, ...motion, transitionAppear: motionType === "show", afterEnter: onMotionEnd, afterLeave: onMotionEnd }, /* @__PURE__ */ React.createElement("div", { ref: mergedRef, className: (0, import_classnames.default)(`${prefixCls}-treenode-motion`, className), style }, motionNodes.map((treeNode) => {
97
+ const {
98
+ data: { ...restProps },
99
+ title,
100
+ key,
101
+ isStart,
102
+ isEnd
103
+ } = treeNode;
104
+ delete restProps.children;
105
+ const treeNodeProps = (0, import_treeUtil.getTreeNodeProps)(key, treeNodeRequiredProps);
106
+ return /* @__PURE__ */ React.createElement(
107
+ import_TreeNode.default,
108
+ {
109
+ ...restProps,
110
+ ...treeNodeProps,
83
111
  title,
112
+ active,
113
+ data: treeNode.data,
84
114
  key,
85
115
  isStart,
86
116
  isEnd
87
- } = treeNode;
88
- delete restProps.children;
89
- const treeNodeProps = (0, import_treeUtil.getTreeNodeProps)(key, treeNodeRequiredProps);
90
- return /* @__PURE__ */ import_react.default.createElement(
91
- import_TreeNode.default,
92
- {
93
- ...(0, import_omit.default)(restProps, "children"),
94
- ...treeNodeProps,
95
- title,
96
- active,
97
- data: treeNode.data,
98
- key,
99
- isStart,
100
- isEnd
101
- }
102
- );
103
- })));
104
- }
105
- return /* @__PURE__ */ import_react.default.createElement(import_TreeNode.default, { domRef: ref, className, style, ...props, active });
117
+ }
118
+ );
119
+ })));
106
120
  }
107
- );
108
- MotionTreeNode.displayName = "MotionTreeNode";
121
+ return /* @__PURE__ */ React.createElement(import_TreeNode.default, { domRef: ref, className, style, ...props, active });
122
+ });
123
+ if (process.env.NODE_ENV !== "production") {
124
+ MotionTreeNode.displayName = "MotionTreeNode";
125
+ }
109
126
  var MotionTreeNode_default = MotionTreeNode;
@@ -1,18 +1,21 @@
1
- import React, { FC } from 'react';
2
- import { DataEntity, FlattenNode, Key, ScrollTo } from './typings';
1
+ /**
2
+ * Handle virtual list of the TreeNodes.
3
+ */
4
+ import * as React from 'react';
5
+ import type { BasicDataNode, DataEntity, DataNode, FlattenNode, Key, KeyEntities, ScrollTo } from './typings';
3
6
  export declare const MOTION_KEY: string;
4
7
  export declare const MotionEntity: DataEntity;
5
8
  export interface NodeListRef {
6
9
  scrollTo: ScrollTo;
7
10
  getIndentWidth: () => number;
8
11
  }
9
- interface NodeListProps {
12
+ interface NodeListProps<TreeDataType extends BasicDataNode> {
10
13
  prefixCls: string;
11
14
  style: React.CSSProperties;
12
- data: FlattenNode[];
15
+ data: FlattenNode<TreeDataType>[];
13
16
  motion: any;
14
17
  focusable?: boolean;
15
- activeItem: FlattenNode;
18
+ activeItem: FlattenNode<TreeDataType>;
16
19
  focused?: boolean;
17
20
  tabIndex: number;
18
21
  checkable?: boolean;
@@ -24,16 +27,17 @@ interface NodeListProps {
24
27
  loadedKeys: Key[];
25
28
  loadingKeys: Key[];
26
29
  halfCheckedKeys: Key[];
27
- keyEntities: Record<Key, DataEntity<any>>;
30
+ keyEntities: KeyEntities;
28
31
  dragging: boolean;
29
32
  dragOverNodeKey: Key;
30
33
  dropPosition: number;
31
34
  height: number;
32
35
  itemHeight: number;
33
36
  virtual?: boolean;
34
- onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
35
- onFocus?: React.FocusEventHandler<HTMLInputElement>;
36
- onBlur?: React.FocusEventHandler<HTMLInputElement>;
37
+ scrollWidth?: number;
38
+ onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
39
+ onFocus?: React.FocusEventHandler<HTMLDivElement>;
40
+ onBlur?: React.FocusEventHandler<HTMLDivElement>;
37
41
  onActiveChange: (key: Key) => void;
38
42
  onListChangeStart: () => void;
39
43
  onListChangeEnd: () => void;
@@ -41,6 +45,6 @@ interface NodeListProps {
41
45
  /**
42
46
  * We only need get visible content items to play the animation.
43
47
  */
44
- export declare function getMinimumRangeTransitionRange(list: FlattenNode[], virtual: boolean, height: number, itemHeight: number): FlattenNode[];
45
- declare const NodeList: FC<NodeListProps>;
48
+ export declare function getMinimumRangeTransitionRange(list: FlattenNode[], virtual: boolean, height: number, itemHeight: number): FlattenNode<DataNode>[];
49
+ declare const NodeList: React.ForwardRefExoticComponent<NodeListProps<any> & React.RefAttributes<NodeListRef>>;
46
50
  export default NodeList;
@@ -35,9 +35,9 @@ __export(NodeList_exports, {
35
35
  getMinimumRangeTransitionRange: () => getMinimumRangeTransitionRange
36
36
  });
37
37
  module.exports = __toCommonJS(NodeList_exports);
38
- var import_react = __toESM(require("react"));
39
- var import_omit = __toESM(require("lodash/omit"));
40
- var import_VirtualList = require("../VirtualList");
38
+ var import_useLayoutEffect = __toESM(require("rc-util/lib/hooks/useLayoutEffect"));
39
+ var import_rc_virtual_list = __toESM(require("rc-virtual-list"));
40
+ var React = __toESM(require("react"));
41
41
  var import_MotionTreeNode = __toESM(require("./MotionTreeNode"));
42
42
  var import_diffUtil = require("./utils/diffUtil");
43
43
  var import_treeUtil = require("./utils/treeUtil");
@@ -95,10 +95,11 @@ function getAccessibilityPath(item) {
95
95
  }
96
96
  return path;
97
97
  }
98
- var NodeList = (0, import_react.forwardRef)((props, ref) => {
98
+ var NodeList = React.forwardRef((props, ref) => {
99
99
  const {
100
100
  prefixCls,
101
101
  data,
102
+ selectable,
102
103
  checkable,
103
104
  expandedKeys,
104
105
  selectedKeys,
@@ -115,6 +116,7 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
115
116
  height,
116
117
  itemHeight,
117
118
  virtual,
119
+ scrollWidth,
118
120
  focusable,
119
121
  activeItem,
120
122
  focused,
@@ -127,27 +129,30 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
127
129
  onListChangeEnd,
128
130
  ...domProps
129
131
  } = props;
130
- const listRef = (0, import_react.useRef)(null);
131
- const indentMeasurerRef = (0, import_react.useRef)(null);
132
- (0, import_react.useImperativeHandle)(ref, () => ({
132
+ const listRef = React.useRef(null);
133
+ const indentMeasurerRef = React.useRef(null);
134
+ React.useImperativeHandle(ref, () => ({
133
135
  scrollTo: (scroll) => {
134
136
  listRef.current.scrollTo(scroll);
135
137
  },
136
138
  getIndentWidth: () => indentMeasurerRef.current.offsetWidth
137
139
  }));
138
- const [prevExpandedKeys, setPrevExpandedKeys] = (0, import_react.useState)(expandedKeys);
139
- const [prevData, setPrevData] = (0, import_react.useState)(data);
140
- const [transitionData, setTransitionData] = (0, import_react.useState)(data);
141
- const [transitionRange, setTransitionRange] = (0, import_react.useState)([]);
142
- const [motionType, setMotionType] = (0, import_react.useState)(null);
140
+ const [prevExpandedKeys, setPrevExpandedKeys] = React.useState(expandedKeys);
141
+ const [prevData, setPrevData] = React.useState(data);
142
+ const [transitionData, setTransitionData] = React.useState(data);
143
+ const [transitionRange, setTransitionRange] = React.useState([]);
144
+ const [motionType, setMotionType] = React.useState(null);
145
+ const dataRef = React.useRef(data);
146
+ dataRef.current = data;
143
147
  function onMotionEnd() {
144
- setPrevData(data);
145
- setTransitionData(data);
148
+ const latestData = dataRef.current;
149
+ setPrevData(latestData);
150
+ setTransitionData(latestData);
146
151
  setTransitionRange([]);
147
152
  setMotionType(null);
148
153
  onListChangeEnd();
149
154
  }
150
- (0, import_react.useEffect)(() => {
155
+ (0, import_useLayoutEffect.default)(() => {
151
156
  setPrevExpandedKeys(expandedKeys);
152
157
  const diffExpanded = (0, import_diffUtil.findExpandedKeys)(prevExpandedKeys, expandedKeys);
153
158
  if (diffExpanded.key !== null) {
@@ -173,7 +178,7 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
173
178
  setTransitionData(data);
174
179
  }
175
180
  }, [expandedKeys, data]);
176
- (0, import_react.useEffect)(() => {
181
+ React.useEffect(() => {
177
182
  if (!dragging) {
178
183
  onMotionEnd();
179
184
  }
@@ -190,7 +195,7 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
190
195
  dropPosition,
191
196
  keyEntities
192
197
  };
193
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, focused && activeItem && /* @__PURE__ */ import_react.default.createElement("span", { style: HIDDEN_STYLE, "aria-live": "assertive" }, getAccessibilityPath(activeItem)), /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
198
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, focused && activeItem && /* @__PURE__ */ React.createElement("span", { style: HIDDEN_STYLE, "aria-live": "assertive" }, getAccessibilityPath(activeItem)), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
194
199
  "input",
195
200
  {
196
201
  style: HIDDEN_STYLE,
@@ -203,7 +208,7 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
203
208
  onChange: noop,
204
209
  "aria-label": "for screen reader"
205
210
  }
206
- )), /* @__PURE__ */ import_react.default.createElement(
211
+ )), /* @__PURE__ */ React.createElement(
207
212
  "div",
208
213
  {
209
214
  className: `${prefixCls}-treenode`,
@@ -213,12 +218,14 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
213
218
  pointerEvents: "none",
214
219
  visibility: "hidden",
215
220
  height: 0,
216
- overflow: "hidden"
221
+ overflow: "hidden",
222
+ border: 0,
223
+ padding: 0
217
224
  }
218
225
  },
219
- /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-indent` }, /* @__PURE__ */ import_react.default.createElement("div", { ref: indentMeasurerRef, className: `${prefixCls}-indent-unit` }))
220
- ), /* @__PURE__ */ import_react.default.createElement(
221
- import_VirtualList.VirtualList,
226
+ /* @__PURE__ */ React.createElement("div", { className: `${prefixCls}-indent` }, /* @__PURE__ */ React.createElement("div", { ref: indentMeasurerRef, className: `${prefixCls}-indent-unit` }))
227
+ ), /* @__PURE__ */ React.createElement(
228
+ import_rc_virtual_list.default,
222
229
  {
223
230
  ...domProps,
224
231
  data: mergedData,
@@ -227,12 +234,12 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
227
234
  fullHeight: false,
228
235
  virtual,
229
236
  itemHeight,
237
+ scrollWidth,
230
238
  prefixCls: `${prefixCls}-list`,
231
239
  ref: listRef,
232
- onVisibleChange: (originList, fullList) => {
233
- const originSet = new Set(originList);
234
- const restList = fullList.filter((item) => !originSet.has(item));
235
- if (restList.some((item) => itemKey(item) === MOTION_KEY)) {
240
+ role: "tree",
241
+ onVisibleChange: (originList) => {
242
+ if (originList.every((item) => itemKey(item) !== MOTION_KEY)) {
236
243
  onMotionEnd();
237
244
  }
238
245
  }
@@ -250,10 +257,10 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
250
257
  delete restProps.key;
251
258
  delete restProps.children;
252
259
  const treeNodeProps = (0, import_treeUtil.getTreeNodeProps)(mergedKey, treeNodeRequiredProps);
253
- return /* @__PURE__ */ import_react.default.createElement(
260
+ return /* @__PURE__ */ React.createElement(
254
261
  import_MotionTreeNode.default,
255
262
  {
256
- ...(0, import_omit.default)(restProps, "children"),
263
+ ...restProps,
257
264
  ...treeNodeProps,
258
265
  title,
259
266
  active: !!activeItem && key === activeItem.key,
@@ -275,7 +282,9 @@ var NodeList = (0, import_react.forwardRef)((props, ref) => {
275
282
  }
276
283
  ));
277
284
  });
278
- NodeList.displayName = "NodeList";
285
+ if (process.env.NODE_ENV !== "production") {
286
+ NodeList.displayName = "NodeList";
287
+ }
279
288
  var NodeList_default = NodeList;
280
289
  // Annotate the CommonJS export names for ESM import in node:
281
290
  0 && (module.exports = {
@@ -1,11 +1,11 @@
1
- import React, { Component } from 'react';
2
- import DropIndicator from './DropIndicator';
3
- import { NodeListRef } from './NodeList';
1
+ import * as React from 'react';
2
+ import { DropIndicatorProps } from './DropIndicator';
3
+ import { type NodeListRef } from './NodeList';
4
4
  import { NodeDragEventHandler, NodeDragEventParams, NodeMouseEventHandler, NodeMouseEventParams } from './contextTypes';
5
- import { BasicDataNode, DataEntity, DataNode, Direction, EventDataNode, FieldNames, FlattenNode, IconType, Key, NodeInstance, ScrollTo } from './typings';
5
+ import type { BasicDataNode, DataNode, Direction, EventDataNode, FieldNames, FlattenNode, IconType, Key, KeyEntities, SafeKey, ScrollTo, TreeNodeProps } from './typings';
6
6
  export interface CheckInfo<TreeDataType extends BasicDataNode = DataNode> {
7
7
  event: 'check';
8
- node: EventDataNode;
8
+ node: EventDataNode<TreeDataType>;
9
9
  checked: boolean;
10
10
  nativeEvent: MouseEvent;
11
11
  checkedNodes: TreeDataType[];
@@ -23,26 +23,31 @@ export interface AllowDropOptions<TreeDataType extends BasicDataNode = DataNode>
23
23
  export type AllowDrop<TreeDataType extends BasicDataNode = DataNode> = (options: AllowDropOptions<TreeDataType>) => boolean;
24
24
  export type DraggableFn = (node: DataNode) => boolean;
25
25
  export type DraggableConfig = {
26
- icon?: React.ReactElement | false;
26
+ icon?: React.ReactNode | false;
27
27
  nodeDraggable?: DraggableFn;
28
28
  };
29
+ export type ExpandAction = false | 'click' | 'doubleClick';
30
+ export type SemanticName = 'itemIcon' | 'item' | 'itemTitle';
29
31
  export interface TreeProps<TreeDataType extends BasicDataNode = DataNode> {
30
- prefixCls?: string;
32
+ prefixCls: string;
31
33
  className?: string;
32
34
  style?: React.CSSProperties;
35
+ styles?: Partial<Record<SemanticName, React.CSSProperties>>;
36
+ classNames?: Partial<Record<SemanticName, string>>;
33
37
  focusable?: boolean;
34
- activeKey?: Key;
38
+ activeKey?: Key | null;
35
39
  tabIndex?: number;
36
- children?: React.ReactElement;
40
+ children?: React.ReactNode;
37
41
  treeData?: TreeDataType[];
38
42
  fieldNames?: FieldNames;
39
43
  showLine?: boolean;
40
44
  showIcon?: boolean;
41
45
  icon?: IconType;
42
46
  selectable?: boolean;
47
+ expandAction?: ExpandAction;
43
48
  disabled?: boolean;
44
49
  multiple?: boolean;
45
- checkable?: boolean | React.ReactElement;
50
+ checkable?: boolean | React.ReactNode;
46
51
  checkStrictly?: boolean;
47
52
  draggable?: DraggableFn | boolean | DraggableConfig;
48
53
  defaultExpandParent?: boolean;
@@ -58,23 +63,17 @@ export interface TreeProps<TreeDataType extends BasicDataNode = DataNode> {
58
63
  defaultSelectedKeys?: Key[];
59
64
  selectedKeys?: Key[];
60
65
  allowDrop?: AllowDrop<TreeDataType>;
61
- titleRender?: (node: TreeDataType) => React.ReactElement | string;
62
- dropIndicatorRender?: (props: {
63
- dropPosition: -1 | 0 | 1;
64
- dropLevelOffset: number;
65
- indent: number;
66
- prefixCls: string;
67
- direction: Direction;
68
- }) => React.ReactElement;
66
+ titleRender?: (node: TreeDataType) => React.ReactNode;
67
+ dropIndicatorRender?: (props: DropIndicatorProps) => React.ReactNode;
69
68
  onFocus?: React.FocusEventHandler<HTMLDivElement>;
70
69
  onBlur?: React.FocusEventHandler<HTMLDivElement>;
71
70
  onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
72
- onContextMenu?: React.MouseEvent<HTMLDivElement>;
73
- onClick?: NodeMouseEventHandler;
74
- onDoubleClick?: NodeMouseEventHandler;
71
+ onContextMenu?: React.MouseEventHandler<HTMLDivElement>;
72
+ onClick?: NodeMouseEventHandler<TreeDataType>;
73
+ onDoubleClick?: NodeMouseEventHandler<TreeDataType>;
75
74
  onScroll?: React.UIEventHandler<HTMLElement>;
76
75
  onExpand?: (expandedKeys: Key[], info: {
77
- node: EventDataNode;
76
+ node: EventDataNode<TreeDataType>;
78
77
  expanded: boolean;
79
78
  nativeEvent: MouseEvent;
80
79
  }) => void;
@@ -85,31 +84,31 @@ export interface TreeProps<TreeDataType extends BasicDataNode = DataNode> {
85
84
  onSelect?: (selectedKeys: Key[], info: {
86
85
  event: 'select';
87
86
  selected: boolean;
88
- node: EventDataNode;
87
+ node: EventDataNode<TreeDataType>;
89
88
  selectedNodes: TreeDataType[];
90
89
  nativeEvent: MouseEvent;
91
90
  }) => void;
92
91
  onLoad?: (loadedKeys: Key[], info: {
93
92
  event: 'load';
94
- node: EventDataNode;
93
+ node: EventDataNode<TreeDataType>;
95
94
  }) => void;
96
- loadData?: (treeNode: EventDataNode) => Promise<void>;
95
+ loadData?: (treeNode: EventDataNode<TreeDataType>) => Promise<any>;
97
96
  loadedKeys?: Key[];
98
- onMouseEnter?: (info: NodeMouseEventParams) => void;
99
- onMouseLeave?: (info: NodeMouseEventParams) => void;
97
+ onMouseEnter?: (info: NodeMouseEventParams<TreeDataType>) => void;
98
+ onMouseLeave?: (info: NodeMouseEventParams<TreeDataType>) => void;
100
99
  onRightClick?: (info: {
101
100
  event: React.MouseEvent;
102
- node: EventDataNode;
101
+ node: EventDataNode<TreeDataType>;
103
102
  }) => void;
104
- onDragStart?: (info: NodeDragEventParams) => void;
105
- onDragEnter?: (info: NodeDragEventParams & {
103
+ onDragStart?: (info: NodeDragEventParams<TreeDataType>) => void;
104
+ onDragEnter?: (info: NodeDragEventParams<TreeDataType> & {
106
105
  expandedKeys: Key[];
107
106
  }) => void;
108
- onDragOver?: (info: NodeDragEventParams) => void;
109
- onDragLeave?: (info: NodeDragEventParams) => void;
110
- onDragEnd?: (info: NodeDragEventParams) => void;
111
- onDrop?: (info: NodeDragEventParams & {
112
- dragNode: EventDataNode;
107
+ onDragOver?: (info: NodeDragEventParams<TreeDataType>) => void;
108
+ onDragLeave?: (info: NodeDragEventParams<TreeDataType>) => void;
109
+ onDragEnd?: (info: NodeDragEventParams<TreeDataType>) => void;
110
+ onDrop?: (info: NodeDragEventParams<TreeDataType> & {
111
+ dragNode: EventDataNode<TreeDataType>;
113
112
  dragNodesKeys: Key[];
114
113
  dropPosition: number;
115
114
  dropToGap: boolean;
@@ -119,18 +118,20 @@ export interface TreeProps<TreeDataType extends BasicDataNode = DataNode> {
119
118
  * Do not use in your production code directly since this will be refactor.
120
119
  */
121
120
  onActiveChange?: (key: Key) => void;
122
- filterTreeNode?: (treeNode: EventDataNode) => boolean;
121
+ filterTreeNode?: (treeNode: EventDataNode<TreeDataType>) => boolean;
123
122
  motion?: any;
124
123
  switcherIcon?: IconType;
125
124
  height?: number;
126
125
  itemHeight?: number;
126
+ scrollWidth?: number;
127
+ itemScrollOffset?: number;
127
128
  virtual?: boolean;
128
129
  direction?: Direction;
129
130
  rootClassName?: string;
130
131
  rootStyle?: React.CSSProperties;
131
132
  }
132
133
  interface TreeState<TreeDataType extends BasicDataNode = DataNode> {
133
- keyEntities: Record<Key, DataEntity<TreeDataType>>;
134
+ keyEntities: KeyEntities<TreeDataType>;
134
135
  indent: number | null;
135
136
  selectedKeys: Key[];
136
137
  checkedKeys: Key[];
@@ -147,15 +148,15 @@ interface TreeState<TreeDataType extends BasicDataNode = DataNode> {
147
148
  dropTargetPos: string | null;
148
149
  dropAllowed: boolean;
149
150
  dragOverNodeKey: Key | null;
150
- treeData: DataNode[];
151
- flattenNodes: FlattenNode[];
151
+ treeData: TreeDataType[];
152
+ flattenNodes: FlattenNode<TreeDataType>[];
152
153
  focused: boolean;
153
- activeKey: Key;
154
+ activeKey: Key | null;
154
155
  listChanging: boolean;
155
156
  prevProps: TreeProps;
156
157
  fieldNames: FieldNames;
157
158
  }
158
- declare class RCTree<TreeDataType extends BasicDataNode = DataNode> extends Component<TreeProps<TreeDataType>, TreeState<TreeDataType>> {
159
+ declare class Tree<TreeDataType extends DataNode | BasicDataNode = DataNode> extends React.Component<TreeProps<TreeDataType>, TreeState<TreeDataType>> {
159
160
  static defaultProps: {
160
161
  prefixCls: string;
161
162
  showLine: boolean;
@@ -172,24 +173,25 @@ declare class RCTree<TreeDataType extends BasicDataNode = DataNode> extends Comp
172
173
  defaultExpandedKeys: any[];
173
174
  defaultCheckedKeys: any[];
174
175
  defaultSelectedKeys: any[];
175
- dropIndicatorRender: typeof DropIndicator;
176
+ dropIndicatorRender: React.FC<Readonly<DropIndicatorProps>>;
176
177
  allowDrop: () => boolean;
178
+ expandAction: boolean;
177
179
  };
178
- static TreeNode: React.FC<import("./TreeNode").TreeNodeProps<DataNode<any>>>;
180
+ static TreeNode: React.FC<Readonly<TreeNodeProps<DataNode>>>;
179
181
  destroyed: boolean;
180
- delayedDragEnterLogic: Record<Key, number>;
181
- loadingRetryTimes: Record<Key, number>;
182
+ delayedDragEnterLogic: Record<SafeKey, number>;
183
+ loadingRetryTimes: Record<SafeKey, number>;
182
184
  state: TreeState<TreeDataType>;
183
185
  dragStartMousePosition: any;
184
- dragNode: NodeInstance<TreeDataType>;
186
+ dragNodeProps: TreeNodeProps<TreeDataType>;
185
187
  currentMouseOverDroppableNodeKey: any;
186
188
  listRef: React.RefObject<NodeListRef>;
187
189
  componentDidMount(): void;
188
190
  componentDidUpdate(): void;
189
191
  onUpdated(): void;
190
192
  componentWillUnmount(): void;
191
- static getDerivedStateFromProps(props: TreeProps, prevState: TreeState): Partial<TreeState<DataNode<any>>>;
192
- onNodeDragStart: NodeDragEventHandler<HTMLDivElement, TreeDataType>;
193
+ static getDerivedStateFromProps(props: TreeProps, prevState: TreeState): Partial<TreeState<DataNode>>;
194
+ onNodeDragStart: NodeDragEventHandler<TreeDataType, HTMLDivElement>;
193
195
  /**
194
196
  * [Legacy] Select handler is smaller than node,
195
197
  * so that this will trigger when drag enter node or select handler.
@@ -197,50 +199,50 @@ declare class RCTree<TreeDataType extends BasicDataNode = DataNode> extends Comp
197
199
  * Better for use mouse move event to refresh drag state.
198
200
  * But let's just keep it to avoid event trigger logic change.
199
201
  */
200
- onNodeDragEnter: (event: any, node: NodeInstance<TreeDataType>) => void;
201
- onNodeDragOver: (event: any, node: NodeInstance<TreeDataType>) => void;
202
- onNodeDragLeave: NodeDragEventHandler;
202
+ onNodeDragEnter: (event: React.DragEvent<HTMLDivElement>, nodeProps: TreeNodeProps<TreeDataType>) => void;
203
+ onNodeDragOver: (event: React.DragEvent<HTMLDivElement>, nodeProps: TreeNodeProps<TreeDataType>) => void;
204
+ onNodeDragLeave: NodeDragEventHandler<TreeDataType>;
203
205
  onWindowDragEnd: (event: any) => void;
204
- onNodeDragEnd: NodeDragEventHandler;
205
- onNodeDrop: (event: any, node: any, outsideTree?: boolean) => void;
206
+ onNodeDragEnd: NodeDragEventHandler<TreeDataType>;
207
+ onNodeDrop: (event: React.DragEvent<HTMLDivElement>, _: TreeNodeProps<TreeDataType>, outsideTree?: boolean) => void;
206
208
  resetDragState(): void;
207
209
  cleanDragState: () => void;
208
- onNodeClick: NodeMouseEventHandler;
209
- onNodeDoubleClick: NodeMouseEventHandler;
210
- onNodeSelect: NodeMouseEventHandler;
211
- onNodeCheck: (e: any, treeNode: EventDataNode, checked: boolean) => void;
212
- onNodeLoad: (treeNode: EventDataNode) => Promise<void>;
213
- onNodeMouseEnter: NodeMouseEventHandler;
214
- onNodeMouseLeave: NodeMouseEventHandler;
215
- onNodeContextMenu: NodeMouseEventHandler;
210
+ triggerExpandActionExpand: NodeMouseEventHandler;
211
+ onNodeClick: NodeMouseEventHandler<TreeDataType>;
212
+ onNodeDoubleClick: NodeMouseEventHandler<TreeDataType>;
213
+ onNodeSelect: NodeMouseEventHandler<TreeDataType>;
214
+ onNodeCheck: (e: React.MouseEvent<HTMLSpanElement>, treeNode: EventDataNode<TreeDataType>, checked: boolean) => void;
215
+ onNodeLoad: (treeNode: EventDataNode<TreeDataType>) => Promise<void>;
216
+ onNodeMouseEnter: NodeMouseEventHandler<TreeDataType>;
217
+ onNodeMouseLeave: NodeMouseEventHandler<TreeDataType>;
218
+ onNodeContextMenu: NodeMouseEventHandler<TreeDataType>;
216
219
  onFocus: React.FocusEventHandler<HTMLDivElement>;
217
220
  onBlur: React.FocusEventHandler<HTMLDivElement>;
218
221
  getTreeNodeRequiredProps: () => {
219
- expandedKeys: Key[];
220
- selectedKeys: Key[];
221
- loadedKeys: Key[];
222
- loadingKeys: Key[];
223
- checkedKeys: Key[];
224
- halfCheckedKeys: Key[];
225
- dragOverNodeKey: Key;
222
+ expandedKeys: React.Key[];
223
+ selectedKeys: React.Key[];
224
+ loadedKeys: React.Key[];
225
+ loadingKeys: React.Key[];
226
+ checkedKeys: React.Key[];
227
+ halfCheckedKeys: React.Key[];
228
+ dragOverNodeKey: React.Key;
226
229
  dropPosition: 0 | 1 | -1;
227
- keyEntities: Record<Key, DataEntity<TreeDataType>>;
230
+ keyEntities: KeyEntities<TreeDataType>;
228
231
  };
229
232
  /** Set uncontrolled `expandedKeys`. This will also auto update `flattenNodes`. */
230
233
  setExpandedKeys: (expandedKeys: Key[]) => void;
231
- flattenTreeData: (expandedKeys: Key[]) => FlattenNode[];
232
- onNodeExpand: (e: any, treeNode: EventDataNode) => void;
234
+ onNodeExpand: (e: React.MouseEvent<HTMLDivElement>, treeNode: EventDataNode<TreeDataType>) => void;
233
235
  onListChangeStart: () => void;
234
236
  onListChangeEnd: () => void;
235
- onActiveChange: (newActiveKey: Key) => void;
236
- getActiveItem: () => FlattenNode;
237
+ onActiveChange: (newActiveKey: Key | null) => void;
238
+ getActiveItem: () => FlattenNode<TreeDataType>;
237
239
  offsetActiveKey: (offset: number) => void;
238
240
  onKeyDown: React.KeyboardEventHandler<HTMLDivElement>;
239
241
  /**
240
242
  * Only update the value which is not in props
241
243
  */
242
- setUncontrolledState: (state: Partial<TreeState>, atomic?: boolean, forceState?: Partial<TreeState<TreeDataType>> | null) => void;
244
+ setUncontrolledState: (state: Partial<TreeState<TreeDataType>>, atomic?: boolean, forceState?: Partial<TreeState<TreeDataType>> | null) => void;
243
245
  scrollTo: ScrollTo;
244
246
  render(): React.JSX.Element;
245
247
  }
246
- export default RCTree;
248
+ export default Tree;