@rc-component/tree-select 1.0.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 (137) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +140 -0
  3. package/assets/icons.png +0 -0
  4. package/assets/index.less +2 -0
  5. package/assets/loading.gif +0 -0
  6. package/assets/minus.gif +0 -0
  7. package/assets/select.less +3 -0
  8. package/assets/tree.less +3 -0
  9. package/dist/223.90c7e648.async.js +3 -0
  10. package/dist/338.a2a48f3b.async.js +15 -0
  11. package/dist/338.e8c51481.chunk.css +5 -0
  12. package/dist/404.html +20 -0
  13. package/dist/439.67bede3f.async.js +137 -0
  14. package/dist/929.df8dd03f.async.js +32 -0
  15. package/dist/demo/basic/index.html +20 -0
  16. package/dist/demo/big-data/index.html +20 -0
  17. package/dist/demo/controlled/index.html +20 -0
  18. package/dist/demo/custom-icons/index.html +20 -0
  19. package/dist/demo/debug/index.html +20 -0
  20. package/dist/demo/disable/index.html +20 -0
  21. package/dist/demo/dynamic/index.html +20 -0
  22. package/dist/demo/field-names/index.html +20 -0
  23. package/dist/demo/filter/index.html +20 -0
  24. package/dist/demo/form/index.html +20 -0
  25. package/dist/demo/mutiple-with-max-count/index.html +20 -0
  26. package/dist/demo/tree-node-label-prop/index.html +20 -0
  27. package/dist/demo/width/index.html +20 -0
  28. package/dist/demos.f221b577.async.js +1 -0
  29. package/dist/docs__demo__basic.md.bcb0edb7.async.js +1 -0
  30. package/dist/docs__demo__big-data.md.8783cd6b.async.js +1 -0
  31. package/dist/docs__demo__controlled.md.e65ef7d7.async.js +1 -0
  32. package/dist/docs__demo__custom-icons.md.d53bf2f9.async.js +1 -0
  33. package/dist/docs__demo__debug.md.099ad226.async.js +1 -0
  34. package/dist/docs__demo__disable.md.6ba57652.async.js +1 -0
  35. package/dist/docs__demo__dynamic.md.f7559890.async.js +1 -0
  36. package/dist/docs__demo__fieldNames.md.16131d9f.async.js +1 -0
  37. package/dist/docs__demo__filter.md.02527db4.async.js +1 -0
  38. package/dist/docs__demo__form.md.6b77dffe.async.js +1 -0
  39. package/dist/docs__demo__mutiple-with-maxCount.md.7268d4ad.async.js +1 -0
  40. package/dist/docs__demo__treeNodeLabelProp.md.24709916.async.js +1 -0
  41. package/dist/docs__demo__width.md.24bfecd6.async.js +1 -0
  42. package/dist/docs__index.md.a6e45331.async.js +1 -0
  43. package/dist/dumi__tmp-production__dumi__theme__ContextWrapper.f56a0670.async.js +1 -0
  44. package/dist/index.html +20 -0
  45. package/dist/meta__docs.255fc42b.chunk.css +1 -0
  46. package/dist/meta__docs.dbf04b66.async.js +3359 -0
  47. package/dist/nm__dumi__dist__client__pages__404.8b85f2d9.chunk.css +1 -0
  48. package/dist/nm__dumi__dist__client__pages__404.ca2add38.async.js +1 -0
  49. package/dist/nm__dumi__dist__client__pages__Demo__index.29e9ef8f.async.js +1 -0
  50. package/dist/nm__dumi__dist__client__pages__Demo__index.578aa5c0.chunk.css +1 -0
  51. package/dist/nm__dumi__theme-default__layouts__DocLayout__index.8ed833d7.async.js +1 -0
  52. package/dist/preload_helper.d41c4da0.js +1 -0
  53. package/dist/umi.4f47b921.js +124 -0
  54. package/dist/umi.8faca2de.css +1 -0
  55. package/dist/~demos/:id/index.html +20 -0
  56. package/dist/~demos/docs-demo-basic-demo-basic/index.html +20 -0
  57. package/dist/~demos/docs-demo-big-data-demo-big-data/index.html +20 -0
  58. package/dist/~demos/docs-demo-controlled-demo-controlled/index.html +20 -0
  59. package/dist/~demos/docs-demo-custom-icons-demo-custom-icons/index.html +20 -0
  60. package/dist/~demos/docs-demo-debug-demo-debug/index.html +20 -0
  61. package/dist/~demos/docs-demo-disable-demo-disable/index.html +20 -0
  62. package/dist/~demos/docs-demo-dynamic-demo-dynamic/index.html +20 -0
  63. package/dist/~demos/docs-demo-field-names-demo-fieldnames/index.html +20 -0
  64. package/dist/~demos/docs-demo-filter-demo-filter/index.html +20 -0
  65. package/dist/~demos/docs-demo-form-demo-form/index.html +20 -0
  66. package/dist/~demos/docs-demo-mutiple-with-max-count-demo-mutiple-with-maxcount/index.html +20 -0
  67. package/dist/~demos/docs-demo-tree-node-label-prop-demo-treenodelabelprop/index.html +20 -0
  68. package/dist/~demos/docs-demo-width-demo-width/index.html +20 -0
  69. package/es/LegacyContext.d.ts +24 -0
  70. package/es/LegacyContext.js +3 -0
  71. package/es/OptionList.d.ts +8 -0
  72. package/es/OptionList.js +351 -0
  73. package/es/TreeNode.d.ts +9 -0
  74. package/es/TreeNode.js +5 -0
  75. package/es/TreeSelect.d.ts +65 -0
  76. package/es/TreeSelect.js +507 -0
  77. package/es/TreeSelectContext.d.ts +25 -0
  78. package/es/TreeSelectContext.js +3 -0
  79. package/es/hooks/useCache.d.ts +7 -0
  80. package/es/hooks/useCache.js +32 -0
  81. package/es/hooks/useCheckedKeys.d.ts +5 -0
  82. package/es/hooks/useCheckedKeys.js +21 -0
  83. package/es/hooks/useDataEntities.d.ts +7 -0
  84. package/es/hooks/useDataEntities.js +26 -0
  85. package/es/hooks/useFilterTreeData.d.ts +8 -0
  86. package/es/hooks/useFilterTreeData.js +33 -0
  87. package/es/hooks/useRefFunc.d.ts +5 -0
  88. package/es/hooks/useRefFunc.js +14 -0
  89. package/es/hooks/useTreeData.d.ts +7 -0
  90. package/es/hooks/useTreeData.js +52 -0
  91. package/es/index.d.ts +7 -0
  92. package/es/index.js +5 -0
  93. package/es/interface.d.ts +57 -0
  94. package/es/interface.js +1 -0
  95. package/es/utils/legacyUtil.d.ts +5 -0
  96. package/es/utils/legacyUtil.js +120 -0
  97. package/es/utils/strategyUtil.d.ts +7 -0
  98. package/es/utils/strategyUtil.js +25 -0
  99. package/es/utils/valueUtil.d.ts +11 -0
  100. package/es/utils/valueUtil.js +30 -0
  101. package/es/utils/warningPropsUtil.d.ts +5 -0
  102. package/es/utils/warningPropsUtil.js +30 -0
  103. package/lib/LegacyContext.d.ts +24 -0
  104. package/lib/LegacyContext.js +11 -0
  105. package/lib/OptionList.d.ts +8 -0
  106. package/lib/OptionList.js +359 -0
  107. package/lib/TreeNode.d.ts +9 -0
  108. package/lib/TreeNode.js +11 -0
  109. package/lib/TreeSelect.d.ts +65 -0
  110. package/lib/TreeSelect.js +516 -0
  111. package/lib/TreeSelectContext.d.ts +25 -0
  112. package/lib/TreeSelectContext.js +11 -0
  113. package/lib/hooks/useCache.d.ts +7 -0
  114. package/lib/hooks/useCache.js +41 -0
  115. package/lib/hooks/useCheckedKeys.d.ts +5 -0
  116. package/lib/hooks/useCheckedKeys.js +29 -0
  117. package/lib/hooks/useDataEntities.d.ts +7 -0
  118. package/lib/hooks/useDataEntities.js +36 -0
  119. package/lib/hooks/useFilterTreeData.d.ts +8 -0
  120. package/lib/hooks/useFilterTreeData.js +41 -0
  121. package/lib/hooks/useRefFunc.d.ts +5 -0
  122. package/lib/hooks/useRefFunc.js +21 -0
  123. package/lib/hooks/useTreeData.d.ts +7 -0
  124. package/lib/hooks/useTreeData.js +60 -0
  125. package/lib/index.d.ts +7 -0
  126. package/lib/index.js +35 -0
  127. package/lib/interface.d.ts +57 -0
  128. package/lib/interface.js +5 -0
  129. package/lib/utils/legacyUtil.d.ts +5 -0
  130. package/lib/utils/legacyUtil.js +131 -0
  131. package/lib/utils/strategyUtil.d.ts +7 -0
  132. package/lib/utils/strategyUtil.js +32 -0
  133. package/lib/utils/valueUtil.d.ts +11 -0
  134. package/lib/utils/valueUtil.js +41 -0
  135. package/lib/utils/warningPropsUtil.d.ts +5 -0
  136. package/lib/utils/warningPropsUtil.js +37 -0
  137. package/package.json +89 -0
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _select = require("@rc-component/select");
8
+ var _rcTree = _interopRequireWildcard(require("rc-tree"));
9
+ var _KeyCode = _interopRequireDefault(require("@rc-component/util/lib/KeyCode"));
10
+ var _useMemo = _interopRequireDefault(require("@rc-component/util/lib/hooks/useMemo"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _LegacyContext = _interopRequireDefault(require("./LegacyContext"));
13
+ var _TreeSelectContext = _interopRequireDefault(require("./TreeSelectContext"));
14
+ var _valueUtil = require("./utils/valueUtil");
15
+ var _util = require("@rc-component/util");
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
+ 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); }
20
+ const HIDDEN_STYLE = {
21
+ width: 0,
22
+ height: 0,
23
+ display: 'flex',
24
+ overflow: 'hidden',
25
+ opacity: 0,
26
+ border: 0,
27
+ padding: 0,
28
+ margin: 0
29
+ };
30
+ const OptionList = (_, ref) => {
31
+ const {
32
+ prefixCls,
33
+ multiple,
34
+ searchValue,
35
+ toggleOpen,
36
+ open,
37
+ notFoundContent
38
+ } = (0, _select.useBaseProps)();
39
+ const {
40
+ virtual,
41
+ listHeight,
42
+ listItemHeight,
43
+ listItemScrollOffset,
44
+ treeData,
45
+ fieldNames,
46
+ onSelect,
47
+ popupMatchSelectWidth,
48
+ treeExpandAction,
49
+ treeTitleRender,
50
+ onPopupScroll,
51
+ leftMaxCount,
52
+ leafCountOnly,
53
+ valueEntities
54
+ } = React.useContext(_TreeSelectContext.default);
55
+ const {
56
+ checkable,
57
+ checkedKeys,
58
+ halfCheckedKeys,
59
+ treeExpandedKeys,
60
+ treeDefaultExpandAll,
61
+ treeDefaultExpandedKeys,
62
+ onTreeExpand,
63
+ treeIcon,
64
+ showTreeIcon,
65
+ switcherIcon,
66
+ treeLine,
67
+ treeNodeFilterProp,
68
+ loadData,
69
+ treeLoadedKeys,
70
+ treeMotion,
71
+ onTreeLoad,
72
+ keyEntities
73
+ } = React.useContext(_LegacyContext.default);
74
+ const treeRef = React.useRef();
75
+ const memoTreeData = (0, _useMemo.default)(() => treeData,
76
+ // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ [open, treeData], (prev, next) => next[0] && prev[1] !== next[1]);
78
+
79
+ // ========================== Values ==========================
80
+ const mergedCheckedKeys = React.useMemo(() => {
81
+ if (!checkable) {
82
+ return null;
83
+ }
84
+ return {
85
+ checked: checkedKeys,
86
+ halfChecked: halfCheckedKeys
87
+ };
88
+ }, [checkable, checkedKeys, halfCheckedKeys]);
89
+
90
+ // ========================== Scroll ==========================
91
+ React.useEffect(() => {
92
+ // Single mode should scroll to current key
93
+ if (open && !multiple && checkedKeys.length) {
94
+ treeRef.current?.scrollTo({
95
+ key: checkedKeys[0]
96
+ });
97
+ }
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ }, [open]);
100
+
101
+ // ========================== Events ==========================
102
+ const onListMouseDown = event => {
103
+ event.preventDefault();
104
+ };
105
+ const onInternalSelect = (__, info) => {
106
+ const {
107
+ node
108
+ } = info;
109
+ if (checkable && (0, _valueUtil.isCheckDisabled)(node)) {
110
+ return;
111
+ }
112
+ onSelect(node.key, {
113
+ selected: !checkedKeys.includes(node.key)
114
+ });
115
+ if (!multiple) {
116
+ toggleOpen(false);
117
+ }
118
+ };
119
+
120
+ // =========================== Keys ===========================
121
+ const [expandedKeys, setExpandedKeys] = React.useState(treeDefaultExpandedKeys);
122
+ const [searchExpandedKeys, setSearchExpandedKeys] = React.useState(null);
123
+ const mergedExpandedKeys = React.useMemo(() => {
124
+ if (treeExpandedKeys) {
125
+ return [...treeExpandedKeys];
126
+ }
127
+ return searchValue ? searchExpandedKeys : expandedKeys;
128
+ }, [expandedKeys, searchExpandedKeys, treeExpandedKeys, searchValue]);
129
+ const onInternalExpand = keys => {
130
+ setExpandedKeys(keys);
131
+ setSearchExpandedKeys(keys);
132
+ if (onTreeExpand) {
133
+ onTreeExpand(keys);
134
+ }
135
+ };
136
+
137
+ // ========================== Search ==========================
138
+ const lowerSearchValue = String(searchValue).toLowerCase();
139
+ const filterTreeNode = treeNode => {
140
+ if (!lowerSearchValue) {
141
+ return false;
142
+ }
143
+ return String(treeNode[treeNodeFilterProp]).toLowerCase().includes(lowerSearchValue);
144
+ };
145
+ React.useEffect(() => {
146
+ if (searchValue) {
147
+ setSearchExpandedKeys((0, _valueUtil.getAllKeys)(treeData, fieldNames));
148
+ }
149
+ // eslint-disable-next-line react-hooks/exhaustive-deps
150
+ }, [searchValue]);
151
+
152
+ // ========================= Disabled =========================
153
+ // Cache disabled states in React state to ensure re-render when cache updates
154
+ const [disabledCache, setDisabledCache] = React.useState(() => new Map());
155
+ React.useEffect(() => {
156
+ if (leftMaxCount) {
157
+ setDisabledCache(new Map());
158
+ }
159
+ }, [leftMaxCount]);
160
+ function getDisabledWithCache(node) {
161
+ const value = node[fieldNames.value];
162
+ if (!disabledCache.has(value)) {
163
+ const entity = valueEntities.get(value);
164
+ const isLeaf = (entity.children || []).length === 0;
165
+ if (!isLeaf) {
166
+ const checkableChildren = entity.children.filter(childTreeNode => !childTreeNode.node.disabled && !childTreeNode.node.disableCheckbox && !checkedKeys.includes(childTreeNode.node[fieldNames.value]));
167
+ const checkableChildrenCount = checkableChildren.length;
168
+ disabledCache.set(value, checkableChildrenCount > leftMaxCount);
169
+ } else {
170
+ disabledCache.set(value, false);
171
+ }
172
+ }
173
+ return disabledCache.get(value);
174
+ }
175
+ const nodeDisabled = (0, _util.useEvent)(node => {
176
+ const nodeValue = node[fieldNames.value];
177
+ if (checkedKeys.includes(nodeValue)) {
178
+ return false;
179
+ }
180
+ if (leftMaxCount === null) {
181
+ return false;
182
+ }
183
+ if (leftMaxCount <= 0) {
184
+ return true;
185
+ }
186
+
187
+ // This is a low performance calculation
188
+ if (leafCountOnly && leftMaxCount) {
189
+ return getDisabledWithCache(node);
190
+ }
191
+ return false;
192
+ });
193
+
194
+ // ========================== Get First Selectable Node ==========================
195
+ const getFirstMatchingNode = nodes => {
196
+ for (const node of nodes) {
197
+ if (node.disabled || node.selectable === false) {
198
+ continue;
199
+ }
200
+ if (searchValue) {
201
+ if (filterTreeNode(node)) {
202
+ return node;
203
+ }
204
+ } else {
205
+ return node;
206
+ }
207
+ if (node[fieldNames.children]) {
208
+ const matchInChildren = getFirstMatchingNode(node[fieldNames.children]);
209
+ if (matchInChildren) {
210
+ return matchInChildren;
211
+ }
212
+ }
213
+ }
214
+ return null;
215
+ };
216
+
217
+ // ========================== Active ==========================
218
+ const [activeKey, setActiveKey] = React.useState(null);
219
+ const activeEntity = keyEntities[activeKey];
220
+ React.useEffect(() => {
221
+ if (!open) {
222
+ return;
223
+ }
224
+ let nextActiveKey = null;
225
+ const getFirstNode = () => {
226
+ const firstNode = getFirstMatchingNode(memoTreeData);
227
+ return firstNode ? firstNode[fieldNames.value] : null;
228
+ };
229
+
230
+ // single mode active first checked node
231
+ if (!multiple && checkedKeys.length && !searchValue) {
232
+ nextActiveKey = checkedKeys[0];
233
+ } else {
234
+ nextActiveKey = getFirstNode();
235
+ }
236
+ setActiveKey(nextActiveKey);
237
+ // eslint-disable-next-line react-hooks/exhaustive-deps
238
+ }, [open, searchValue]);
239
+
240
+ // ========================= Keyboard =========================
241
+ React.useImperativeHandle(ref, () => ({
242
+ scrollTo: treeRef.current?.scrollTo,
243
+ onKeyDown: event => {
244
+ const {
245
+ which
246
+ } = event;
247
+ switch (which) {
248
+ // >>> Arrow keys
249
+ case _KeyCode.default.UP:
250
+ case _KeyCode.default.DOWN:
251
+ case _KeyCode.default.LEFT:
252
+ case _KeyCode.default.RIGHT:
253
+ treeRef.current?.onKeyDown(event);
254
+ break;
255
+
256
+ // >>> Select item
257
+ case _KeyCode.default.ENTER:
258
+ {
259
+ if (activeEntity) {
260
+ const isNodeDisabled = nodeDisabled(activeEntity.node);
261
+ const {
262
+ selectable,
263
+ value,
264
+ disabled
265
+ } = activeEntity?.node || {};
266
+ if (selectable !== false && !disabled && !isNodeDisabled) {
267
+ onInternalSelect(null, {
268
+ node: {
269
+ key: activeKey
270
+ },
271
+ selected: !checkedKeys.includes(value)
272
+ });
273
+ }
274
+ }
275
+ break;
276
+ }
277
+
278
+ // >>> Close
279
+ case _KeyCode.default.ESC:
280
+ {
281
+ toggleOpen(false);
282
+ }
283
+ }
284
+ },
285
+ onKeyUp: () => {}
286
+ }));
287
+ const hasLoadDataFn = (0, _useMemo.default)(() => searchValue ? false : true,
288
+ // eslint-disable-next-line react-hooks/exhaustive-deps
289
+ [searchValue, treeExpandedKeys || expandedKeys], ([preSearchValue], [nextSearchValue, nextExcludeSearchExpandedKeys]) => preSearchValue !== nextSearchValue && !!(nextSearchValue || nextExcludeSearchExpandedKeys));
290
+ const syncLoadData = hasLoadDataFn ? loadData : null;
291
+
292
+ // ========================== Render ==========================
293
+ if (memoTreeData.length === 0) {
294
+ return /*#__PURE__*/React.createElement("div", {
295
+ role: "listbox",
296
+ className: `${prefixCls}-empty`,
297
+ onMouseDown: onListMouseDown
298
+ }, notFoundContent);
299
+ }
300
+ const treeProps = {
301
+ fieldNames
302
+ };
303
+ if (treeLoadedKeys) {
304
+ treeProps.loadedKeys = treeLoadedKeys;
305
+ }
306
+ if (mergedExpandedKeys) {
307
+ treeProps.expandedKeys = mergedExpandedKeys;
308
+ }
309
+ return /*#__PURE__*/React.createElement("div", {
310
+ onMouseDown: onListMouseDown
311
+ }, activeEntity && open && /*#__PURE__*/React.createElement("span", {
312
+ style: HIDDEN_STYLE,
313
+ "aria-live": "assertive"
314
+ }, activeEntity.node.value), /*#__PURE__*/React.createElement(_rcTree.UnstableContext.Provider, {
315
+ value: {
316
+ nodeDisabled
317
+ }
318
+ }, /*#__PURE__*/React.createElement(_rcTree.default, _extends({
319
+ ref: treeRef,
320
+ focusable: false,
321
+ prefixCls: `${prefixCls}-tree`,
322
+ treeData: memoTreeData,
323
+ height: listHeight,
324
+ itemHeight: listItemHeight,
325
+ itemScrollOffset: listItemScrollOffset,
326
+ virtual: virtual !== false && popupMatchSelectWidth !== false,
327
+ multiple: multiple,
328
+ icon: treeIcon,
329
+ showIcon: showTreeIcon,
330
+ switcherIcon: switcherIcon,
331
+ showLine: treeLine,
332
+ loadData: syncLoadData,
333
+ motion: treeMotion,
334
+ activeKey: activeKey
335
+ // We handle keys by out instead tree self
336
+ ,
337
+ checkable: checkable,
338
+ checkStrictly: true,
339
+ checkedKeys: mergedCheckedKeys,
340
+ selectedKeys: !checkable ? checkedKeys : [],
341
+ defaultExpandAll: treeDefaultExpandAll,
342
+ titleRender: treeTitleRender
343
+ }, treeProps, {
344
+ // Proxy event out
345
+ onActiveChange: setActiveKey,
346
+ onSelect: onInternalSelect,
347
+ onCheck: onInternalSelect,
348
+ onExpand: onInternalExpand,
349
+ onLoad: onTreeLoad,
350
+ filterTreeNode: filterTreeNode,
351
+ expandAction: treeExpandAction,
352
+ onScroll: onPopupScroll
353
+ }))));
354
+ };
355
+ const RefOptionList = /*#__PURE__*/React.forwardRef(OptionList);
356
+ if (process.env.NODE_ENV !== 'production') {
357
+ RefOptionList.displayName = 'OptionList';
358
+ }
359
+ var _default = exports.default = RefOptionList;
@@ -0,0 +1,9 @@
1
+ import type * as React from 'react';
2
+ import type { DataNode, Key } from './interface';
3
+ export interface TreeNodeProps extends Omit<DataNode, 'children'> {
4
+ value: Key;
5
+ children?: React.ReactNode;
6
+ }
7
+ /** This is a placeholder, not real render in dom */
8
+ declare const TreeNode: React.FC<TreeNodeProps>;
9
+ export default TreeNode;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ /* istanbul ignore file */
8
+
9
+ /** This is a placeholder, not real render in dom */
10
+ const TreeNode = () => null;
11
+ var _default = exports.default = TreeNode;
@@ -0,0 +1,65 @@
1
+ import type { BaseSelectPropsWithoutPrivate, BaseSelectRef } from '@rc-component/select';
2
+ import type { IconType } from 'rc-tree/lib/interface';
3
+ import type { ExpandAction } from 'rc-tree/lib/Tree';
4
+ import * as React from 'react';
5
+ import TreeNode from './TreeNode';
6
+ import type { CheckedStrategy } from './utils/strategyUtil';
7
+ import { SHOW_ALL, SHOW_CHILD, SHOW_PARENT } from './utils/strategyUtil';
8
+ import type { SafeKey, DataNode, SimpleModeConfig, ChangeEventExtra, FieldNames, LegacyDataNode } from './interface';
9
+ export interface TreeSelectProps<ValueType = any, OptionType extends DataNode = DataNode> extends Omit<BaseSelectPropsWithoutPrivate, 'mode'> {
10
+ prefixCls?: string;
11
+ id?: string;
12
+ children?: React.ReactNode;
13
+ value?: ValueType;
14
+ defaultValue?: ValueType;
15
+ onChange?: (value: ValueType, labelList: React.ReactNode[], extra: ChangeEventExtra) => void;
16
+ searchValue?: string;
17
+ /** @deprecated Use `searchValue` instead */
18
+ inputValue?: string;
19
+ onSearch?: (value: string) => void;
20
+ autoClearSearchValue?: boolean;
21
+ filterTreeNode?: boolean | ((inputValue: string, treeNode: DataNode) => boolean);
22
+ treeNodeFilterProp?: string;
23
+ onSelect?: (value: ValueType, option: OptionType) => void;
24
+ onDeselect?: (value: ValueType, option: OptionType) => void;
25
+ showCheckedStrategy?: CheckedStrategy;
26
+ treeNodeLabelProp?: string;
27
+ fieldNames?: FieldNames;
28
+ multiple?: boolean;
29
+ treeCheckable?: boolean | React.ReactNode;
30
+ treeCheckStrictly?: boolean;
31
+ labelInValue?: boolean;
32
+ maxCount?: number;
33
+ treeData?: OptionType[];
34
+ treeDataSimpleMode?: boolean | SimpleModeConfig;
35
+ loadData?: (dataNode: LegacyDataNode) => Promise<unknown>;
36
+ treeLoadedKeys?: SafeKey[];
37
+ onTreeLoad?: (loadedKeys: SafeKey[]) => void;
38
+ treeDefaultExpandAll?: boolean;
39
+ treeExpandedKeys?: SafeKey[];
40
+ treeDefaultExpandedKeys?: SafeKey[];
41
+ onTreeExpand?: (expandedKeys: SafeKey[]) => void;
42
+ treeExpandAction?: ExpandAction;
43
+ virtual?: boolean;
44
+ listHeight?: number;
45
+ listItemHeight?: number;
46
+ listItemScrollOffset?: number;
47
+ onPopupVisibleChange?: (open: boolean) => void;
48
+ treeTitleRender?: (node: OptionType) => React.ReactNode;
49
+ treeLine?: boolean;
50
+ treeIcon?: IconType;
51
+ showTreeIcon?: boolean;
52
+ switcherIcon?: IconType;
53
+ treeMotion?: any;
54
+ }
55
+ declare const GenericTreeSelect: (<ValueType = any, OptionType extends DataNode = DataNode>(props: TreeSelectProps<ValueType, OptionType> & {
56
+ children?: React.ReactNode;
57
+ } & {
58
+ ref?: React.Ref<BaseSelectRef>;
59
+ }) => React.ReactElement) & {
60
+ TreeNode: typeof TreeNode;
61
+ SHOW_ALL: typeof SHOW_ALL;
62
+ SHOW_PARENT: typeof SHOW_PARENT;
63
+ SHOW_CHILD: typeof SHOW_CHILD;
64
+ };
65
+ export default GenericTreeSelect;