@hi-ui/check-tree-select 4.0.0-alpha.10

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Xiaomi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # CheckTreeSelect 树形多项选择器
2
+
3
+ 一种接收树形数据结构的选择器,为用户提供复杂数据展示的能力
4
+
5
+ ## 何时使用
6
+
7
+ - 选择部门的组织结构、部门等
8
+ - 选择商品目录等
9
+
10
+ ## 使用示例
11
+
12
+ <!-- Inject Stories -->
13
+
14
+ ## Props
15
+
16
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
17
+ | ------------------ | ---------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
18
+ | data | 展示数据 | DataItem [] | - | - |
19
+ | fieldNames | 设置 data 中 id, title, disabled, children 对应的 key (3.0 新增) | object | - | { title: 'title', id: 'id',disabled:'disabled', children: 'children'} |
20
+ | showCheckedMode | 数据回显模式 | string | ALL: 所有被选中节点,不区分父子节点 <br/>PARENT: 当所有子节点被选中时将只保留父节点<br/>CHILD:仅显示子节点 | ALL |
21
+ | disabled | 是否禁用 | boolean | true \| false | false |
22
+ | defaultExpandAll | 是否默认展开所有树节点 | boolean | true \| false | false |
23
+ | expandedIds | 展开的节点(受控) | ReactText[] | - | - |
24
+ | defaultExpandedIds | 默认展开的节点(非受控) | ReactText[] | - | - |
25
+ | defaultValue | 默认选中项 (非受控) | DataItem[] \| string[] \| string | - | - |
26
+ | value | 默认选中项 (受控) | DataItem[] \| string[] \| string | - | - |
27
+ | displayRender | 自定义渲染 Input 中展示内容 | (valueItem: checkedNode) => ReactNode | - | - |
28
+ | placeholder | 输入框占位 | string | - | 请选择 |
29
+ | searchMode | 节点搜索模式 | string | 'highlight' \| 'filter' | - |
30
+ | dataSource | 异步加载数据 | (key: string) => DataSource \| DataSource \| Promise | - | - |
31
+ | emptyContent | 没有选项时的提示 | string \| ReactNode | - | 无内容 |
32
+ | optionWidth | 自定义下拉选项宽度 | number | - | |
33
+ | overlayClassName | 下拉根元素的类名称 | string | - | - |
34
+
35
+ ## Events
36
+
37
+ | 名称 | 说明 | 类型 | 参数 | 返回值 |
38
+ | -------- | ---------- | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------ |
39
+ | onChange | 选中时触发 | (checkedIds: ReactText[], checkedNodes: DataItem[], targetNode: DataItem, shouldChecked: boolean) => void | checkedIds: 选中项 ID 集合 <br/> checkedNodes: 选中项数据项集合 <br/> targetNode: 当前操作节点 <br/> shouldChecked: 是否要被选中 | - |
40
+
41
+ ### DataItem
42
+
43
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
44
+ | -------- | --------------- | ---------------- | ------ | ------ |
45
+ | title | 下拉选项标题 | string | - | - |
46
+ | id | 下拉选项唯一 id | string \| number | - | - |
47
+ | disabled | 是否禁用 | boolean | - | false |
48
+ | children | 子级数据 | DataItem[] | - | - |
49
+
50
+ ### DataSource
51
+
52
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
53
+ | ----------------- | ---------------------------------- | -------------------------------- | -------------------------------------------------- | ------------- |
54
+ | url | 请求的 url | string | - | - |
55
+ | type | 请求方法 | string | get \| post | get |
56
+ | data | post 请求时请求体参数 | object | - | - |
57
+ | params | url 查询参数 | object | - | - |
58
+ | headers | 请求头 | object | - | - |
59
+ | mode | 请求模式 | string | 'same-origin' \| 'cors' \| 'no-cors' \| 'navigate' | 'same-origin' |
60
+ | transformResponse | 成功时的回调,用于对数据进行预处理 | (response: object) => DataItem[] | - | - |
61
+
62
+ ## CHANGELOG
63
+
64
+ > 从 TreeSelect 组件抽离多选模式出来,作为为单独 CheckTreeSelect 组件。
65
+
66
+ | 参数 | 变更类型 | 变更内容 | 解决的问题 |
67
+ | ------------------ | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
68
+ | propName | feature \| deprecated \| update | 变更了什么 | 之前是什么样子,解决什么问题 |
69
+ | ---- | ---- | ---- | ---- |
70
+ | value | update | 类型 DataItem[] \| string[] \| string -> <string \| number>[] | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
71
+ | defaultValue | update | 类型 DataItem[] \| string[] \| string -> <string \| number>[] | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
72
+ | id | update | 类型 string -> string \| number | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
73
+ | bordered | deprecated | 字段 `bordered` -> `appearance` | 对于 Picker 类型的组件,统一使用 appearance 设置外形(线\面\无边框)值 |
74
+ | searchPlaceholder | feature | - | Picker 类型组件统一支持 |
75
+ | loadingContent | feature | - | Picker 类型组件统一支持,适配新 UI |
76
+ | popper | feature | - | Picker 类型组件统一支持,聚合管理。比如: placement,之前有的加了有的没加 |
77
+ | titleRender | feature | 字段 render -> titleRender | 统一支持自定义渲染每一项 |
78
+ | virtual | feature | - | 支持虚拟列表 |
79
+ | height | feature | - | 支持虚拟列表 |
80
+ | itemHeight | feature | - | 支持虚拟列表 |
81
+ | type | deprecated | - | 拆分单选多选组件单独维护 |
82
+ | autoload | deprecated | - | 页面级首次渲染执行数据加载操作,取消内置 |
83
+ | mode | deprecated | - | 面包屑模式可以使用 checkCascade 组件替代,交互形式更为优雅。 |
84
+ | appearance | feature | - | 统一支持:线性\面性\无边框 |
85
+ | valueRender | update | valueRender(items: DataItem[]) -> displayRender(item: DataItem) | 统一字段命名及其含义 |
86
+ | expandedIds | update | 字段:expandIds -> expandedIds | 统一字段命名及其含义 |
87
+ | defaultExpandedIds | update | defaultExpandIds -> defaultExpandedIds | 统一字段命名及其含义 |
88
+ | onChange | update | 类型:`(checkedIds \| checkedId, checkedNodes \| checkedNode, currentNode) => void` -> `(checkedIds: ReactText[], checkedNodes: DataItem[], targetNode: DataItem, shouldChecked: boolean) => void` | 1. 移除数组结构,方便用户获取;2. 暴露 shouldSelected 执行相应拦截之类的操作; 3. 点击清空时触发 onChange |
@@ -0,0 +1,349 @@
1
+ /** @LICENSE
2
+ * @hi-ui/check-tree-select
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ var _typeof = require("@babel/runtime/helpers/typeof");
13
+
14
+ Object.defineProperty(exports, '__esModule', {
15
+ value: true
16
+ });
17
+
18
+ var tslib = require('tslib');
19
+
20
+ var React = require('react');
21
+
22
+ var classname = require('@hi-ui/classname');
23
+
24
+ var env = require('@hi-ui/env');
25
+
26
+ var useToggle = require('@hi-ui/use-toggle');
27
+
28
+ var tree = require('@hi-ui/tree');
29
+
30
+ var useUncontrolledState = require('@hi-ui/use-uncontrolled-state');
31
+
32
+ var picker = require('@hi-ui/picker');
33
+
34
+ var treeUtils = require('@hi-ui/tree-utils');
35
+
36
+ var typeAssertion = require('@hi-ui/type-assertion');
37
+
38
+ var lodash = require('lodash');
39
+
40
+ var highlighter = require('@hi-ui/highlighter');
41
+
42
+ var tagInput = require('@hi-ui/tag-input');
43
+
44
+ var icons = require('@hi-ui/icons');
45
+
46
+ var useSearchMode = require('@hi-ui/use-search-mode');
47
+
48
+ function _interopDefaultLegacy(e) {
49
+ return e && _typeof(e) === 'object' && 'default' in e ? e : {
50
+ 'default': e
51
+ };
52
+ }
53
+
54
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
55
+
56
+ var TREE_SELECT_PREFIX = classname.getPrefixCls('check-tree-select');
57
+ var DEFAULT_DATA = [];
58
+ var DEFAULT_VALUE = [];
59
+ var DEFAULT_FIELD_NAMES = {};
60
+ var DEFAULT_EXPANDED_IDS = [];
61
+ /**
62
+ * TODO: What is CheckTreeSelect
63
+ */
64
+
65
+ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
66
+ var _a$prefixCls = _a.prefixCls,
67
+ prefixCls = _a$prefixCls === void 0 ? TREE_SELECT_PREFIX : _a$prefixCls,
68
+ className = _a.className,
69
+ _a$data = _a.data,
70
+ data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
71
+ dataSource = _a.dataSource,
72
+ _a$disabled = _a.disabled,
73
+ disabled = _a$disabled === void 0 ? false : _a$disabled,
74
+ _a$fieldNames = _a.fieldNames,
75
+ fieldNames = _a$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _a$fieldNames,
76
+ _a$defaultExpandAll = _a.defaultExpandAll,
77
+ defaultExpandAll = _a$defaultExpandAll === void 0 ? false : _a$defaultExpandAll,
78
+ expandedIdsProp = _a.expandedIds,
79
+ _a$defaultExpandedIds = _a.defaultExpandedIds,
80
+ defaultExpandedIds = _a$defaultExpandedIds === void 0 ? DEFAULT_EXPANDED_IDS : _a$defaultExpandedIds,
81
+ onExpand = _a.onExpand,
82
+ _a$defaultValue = _a.defaultValue,
83
+ defaultValue = _a$defaultValue === void 0 ? DEFAULT_VALUE : _a$defaultValue,
84
+ valueProp = _a.value,
85
+ onChange = _a.onChange,
86
+ searchableProp = _a.searchable,
87
+ searchModeProp = _a.searchMode,
88
+ onLoadChildren = _a.onLoadChildren,
89
+ titleRender = _a.titleRender,
90
+ filterOption = _a.filterOption,
91
+ clearable = _a.clearable,
92
+ invalid = _a.invalid,
93
+ displayRender = _a.displayRender,
94
+ _a$placeholder = _a.placeholder,
95
+ placeholder = _a$placeholder === void 0 ? '请选择' : _a$placeholder,
96
+ appearance = _a.appearance,
97
+ rest = tslib.__rest(_a, ["prefixCls", "role", "className", "data", "dataSource", "disabled", "fieldNames", "showCheckedMode", "defaultExpandAll", "expandedIds", "defaultExpandedIds", "onExpand", "defaultValue", "value", "onChange", "searchable", "searchMode", "onLoadChildren", "titleRender", "filterOption", "clearable", "invalid", "displayRender", "placeholder", "appearance"]);
98
+
99
+ var _useToggle = useToggle.useToggle(),
100
+ menuVisible = _useToggle[0],
101
+ menuVisibleAction = _useToggle[1]; // const [viewSelected, setViewSelected] = useState(false)
102
+
103
+ /**
104
+ * 转换对象
105
+ */
106
+
107
+
108
+ var getKeyFields = React.useCallback(function (node, key) {
109
+ return node[fieldNames[key] || key];
110
+ }, [fieldNames]);
111
+ var flattedData = React.useMemo(function () {
112
+ return treeUtils.flattenTree(data, function (node) {
113
+ node.id = getKeyFields(node.raw, 'id'); // @ts-ignore
114
+
115
+ node.title = getKeyFields(node.raw, 'title');
116
+ return node;
117
+ });
118
+ }, [data, getKeyFields]); // TODO: 抽离展开hook
119
+ // TODO: onLoadChildren 和 defaultExpandAll 共存时
120
+
121
+ var _useUncontrolledState = useUncontrolledState.useUncontrolledState(function getDefaultExpandedIds() {
122
+ // 开启默认展开全部
123
+ if (defaultExpandAll) {
124
+ return flattedData.map(function (node) {
125
+ return node.id;
126
+ });
127
+ }
128
+
129
+ return defaultExpandedIds;
130
+ }, expandedIdsProp, onExpand),
131
+ expandedIds = _useUncontrolledState[0],
132
+ tryChangeExpandedIds = _useUncontrolledState[1];
133
+
134
+ var _useUncontrolledState2 = useUncontrolledState.useUncontrolledState(defaultValue, valueProp, onChange),
135
+ value = _useUncontrolledState2[0],
136
+ tryChangeValue = _useUncontrolledState2[1]; // 搜索时临时选中缓存数据
137
+
138
+
139
+ var _useState = React.useState([]),
140
+ selectedItems = _useState[0],
141
+ setSelectedItems = _useState[1];
142
+
143
+ var onSelect = React.useCallback(function (_ref, node, checked) {
144
+ var checkedIds = _ref.checkedIds;
145
+ tryChangeValue(checkedIds, node); // 存取异步选中数据
146
+
147
+ setSelectedItems(function (prev) {
148
+ var next = [].concat(prev);
149
+
150
+ if (checked) {
151
+ next.push(node);
152
+ } else {
153
+ next.filter(function (item) {
154
+ return item.id !== node.id;
155
+ });
156
+ }
157
+
158
+ return next;
159
+ });
160
+ }, [tryChangeValue]); // ************************** 异步搜索 ************************* //
161
+ // const { loading, hasError, loadRemoteData } = useDataSource({ dataSource, validate: isArray })
162
+
163
+ var _b = useSearchMode.useAsyncSearch({
164
+ dataSource: dataSource
165
+ }),
166
+ loading = _b.loading,
167
+ hasError = _b.hasError,
168
+ dataSourceStrategy = tslib.__rest(_b, ["loading", "hasError"]);
169
+
170
+ var customSearchStrategy = useSearchMode.useTreeCustomSearch({
171
+ data: data,
172
+ filterOption: filterOption
173
+ });
174
+ var filterSearchStrategy = useSearchMode.useFilterSearch({
175
+ data: data,
176
+ flattedData: flattedData,
177
+ searchMode: searchModeProp
178
+ });
179
+ var highlightSearchStrategy = useSearchMode.useHighlightSearch({
180
+ data: data,
181
+ flattedData: flattedData,
182
+ searchMode: searchModeProp
183
+ });
184
+
185
+ var _useSearchMode = useSearchMode.useSearchMode({
186
+ searchable: searchableProp,
187
+ strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy, highlightSearchStrategy]
188
+ }),
189
+ stateInSearch = _useSearchMode.state,
190
+ setStateInSearch = _useSearchMode.setStateInSearch,
191
+ searchable = _useSearchMode.searchable,
192
+ searchMode = _useSearchMode.searchMode,
193
+ onSearch = _useSearchMode.onSearch,
194
+ searchValue = _useSearchMode.keyword; // 拦截 titleRender,自定义高亮展示
195
+
196
+
197
+ var proxyTitleRender = React.useCallback(function (node) {
198
+ if (titleRender) {
199
+ var _ret = titleRender(node);
200
+
201
+ if (_ret && _ret !== true) return _ret;
202
+ } // 本地搜索执行默认高亮规则
203
+
204
+
205
+ var highlight = !!searchValue && (searchMode === 'highlight' || searchMode === 'filter');
206
+ var ret = highlight ? /*#__PURE__*/React__default['default'].createElement(highlighter.Highlighter, {
207
+ keyword: searchValue
208
+ }, node.title) : true;
209
+ return ret;
210
+ }, [titleRender, searchValue, searchMode]);
211
+ var shouldUseSearch = !!searchValue && !hasError;
212
+ var treeProps = {
213
+ data: shouldUseSearch ? stateInSearch.data : data,
214
+ expandedIds: shouldUseSearch ? stateInSearch.expandedIds : expandedIds,
215
+ onExpand: shouldUseSearch ? function (ids) {
216
+ return setStateInSearch(function (prev) {
217
+ return Object.assign(Object.assign({}, prev), {
218
+ expandedIds: ids
219
+ });
220
+ });
221
+ } : tryChangeExpandedIds,
222
+ titleRender: proxyTitleRender
223
+ }; // 下拉菜单不能合并(因为树形数据,不知道是第几级)
224
+
225
+ var mergedData = React.useMemo(function () {
226
+ var nextData = selectedItems.concat(flattedData);
227
+ return lodash.uniqBy(nextData, 'id');
228
+ }, [selectedItems, flattedData]);
229
+ var cls = classname.cx(prefixCls, className); // 过滤掉未选中的数据
230
+ // const tagList = useMemo(() => {
231
+ // // @ts-ignore
232
+ // const [semiCheckedIds] = getSemiCheckedIdsWithSet(flattedData, (id) => value.includes(id))
233
+ // const ids = Array.from(new Set([...semiCheckedIds, ...value]))
234
+ // return flattedData.filter((item) => ids.includes(item.id))
235
+ // }, [value, flattedData])
236
+
237
+ return /*#__PURE__*/React__default['default'].createElement(picker.Picker, Object.assign({
238
+ ref: ref,
239
+ className: cls
240
+ }, rest, {
241
+ visible: menuVisible,
242
+ onOpen: function onOpen() {
243
+ // setViewSelected(false)
244
+ menuVisibleAction.on();
245
+ },
246
+ disabled: disabled,
247
+ onClose: menuVisibleAction.off,
248
+ // value={value}
249
+ // onChange={tryChangeValue}
250
+ // data={mergedData}
251
+ searchable: searchable,
252
+ onSearch: onSearch,
253
+ loading: loading,
254
+ trigger: /*#__PURE__*/React__default['default'].createElement(tagInput.TagInputMock // ref={targetElementRef}
255
+ // onClick={openMenu}
256
+ // disabled={disabled}
257
+ , {
258
+ // ref={targetElementRef}
259
+ // onClick={openMenu}
260
+ // disabled={disabled}
261
+ clearable: clearable,
262
+ placeholder: placeholder,
263
+ // @ts-ignore
264
+ displayRender: displayRender,
265
+ suffix: menuVisible ? /*#__PURE__*/React__default['default'].createElement(icons.UpOutlined, null) : /*#__PURE__*/React__default['default'].createElement(icons.DownOutlined, null),
266
+ focused: menuVisible,
267
+ appearance: appearance,
268
+ value: value,
269
+ onChange: tryChangeValue,
270
+ data: mergedData,
271
+ // @ts-ignore
272
+ invalid: invalid,
273
+ onExpand: function onExpand() {
274
+ // setViewSelected(true)
275
+ menuVisibleAction.on();
276
+ }
277
+ })
278
+ }), typeAssertion.isArrayNonEmpty(treeProps.data) ? /*#__PURE__*/React__default['default'].createElement(tree.Tree, Object.assign({
279
+ className: prefixCls + "__tree",
280
+ selectable: false,
281
+ checkable: true,
282
+ // checkOnSelect
283
+ checkedIds: value,
284
+ onCheck: onSelect,
285
+ // TODO: 支持 fieldNames
286
+ // 禁用时被选中的样式处理
287
+ onLoadChildren: onLoadChildren
288
+ }, treeProps)) : null);
289
+ });
290
+
291
+ if (env.__DEV__) {
292
+ CheckTreeSelect.displayName = 'CheckTreeSelect';
293
+ }
294
+
295
+ var ALWAYS_ALLOW = function ALWAYS_ALLOW() {
296
+ return true;
297
+ };
298
+ /**
299
+ * 在 checkedIdsSet 为数据合法的情况下,查找所有的半选中态的节点 ids
300
+ *
301
+ * @param checkedIdsSet
302
+ * @param flattedData
303
+ * @returns
304
+ */
305
+
306
+
307
+ var getSemiCheckedIdsWithSet = function getSemiCheckedIdsWithSet(flattedData, isChecked, allowCheck) {
308
+ if (allowCheck === void 0) {
309
+ allowCheck = ALWAYS_ALLOW;
310
+ }
311
+
312
+ var semiCheckedNodes = [];
313
+ var semiCheckedIdsSet = new Set();
314
+ var parentId;
315
+ var parent;
316
+ flattedData.forEach(function (node) {
317
+ parent = node.parent;
318
+
319
+ if (parent && parent.id !== undefined) {
320
+ if (!allowCheck(parent)) return;
321
+ parentId = parent.id;
322
+ if (semiCheckedIdsSet.has(parentId)) return; // 父节点没选中,但是当前节点被选中,则视为半选
323
+
324
+ if (!isChecked(parentId) && isChecked(node.id)) {
325
+ semiCheckedIdsSet.add(parentId);
326
+ semiCheckedNodes.push(parent);
327
+ }
328
+ }
329
+ }); // 自下而上设置半选态
330
+
331
+ semiCheckedNodes.forEach(function (node) {
332
+ parent = node.parent;
333
+
334
+ while (parent && parent.id !== undefined) {
335
+ if (!allowCheck(parent)) return;
336
+ parentId = parent.id; // 可能存在兄弟节点,共同祖先需要去重,避免重复计算
337
+
338
+ if (semiCheckedIdsSet.has(parentId)) return;
339
+ semiCheckedIdsSet.add(parentId);
340
+ parent = parent.parent;
341
+ }
342
+ });
343
+ var semiCheckedIds = Array.from(semiCheckedIdsSet);
344
+ return [semiCheckedIds, semiCheckedIdsSet];
345
+ };
346
+
347
+ exports.CheckTreeSelect = CheckTreeSelect;
348
+ exports.getSemiCheckedIdsWithSet = getSemiCheckedIdsWithSet;
349
+ //# sourceMappingURL=CheckTreeSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckTreeSelect.js","sources":["../../src/CheckTreeSelect.tsx"],"sourcesContent":[null],"names":["TREE_SELECT_PREFIX","getPrefixCls","DEFAULT_DATA","DEFAULT_VALUE","DEFAULT_FIELD_NAMES","DEFAULT_EXPANDED_IDS","CheckTreeSelect","forwardRef","_a","ref","prefixCls","className","data","dataSource","disabled","fieldNames","defaultExpandAll","expandedIdsProp","expandedIds","defaultExpandedIds","onExpand","defaultValue","valueProp","value","onChange","searchableProp","searchable","searchModeProp","searchMode","onLoadChildren","titleRender","filterOption","clearable","invalid","displayRender","placeholder","appearance","rest","useToggle","menuVisible","menuVisibleAction","getKeyFields","useCallback","node","key","flattedData","useMemo","flattenTree","id","raw","title","useUncontrolledState","getDefaultExpandedIds","map","tryChangeExpandedIds","tryChangeValue","useState","selectedItems","setSelectedItems","onSelect","checked","checkedIds","prev","next","push","filter","item","_b","useAsyncSearch","loading","hasError","dataSourceStrategy","customSearchStrategy","useTreeCustomSearch","filterSearchStrategy","useFilterSearch","highlightSearchStrategy","useHighlightSearch","useSearchMode","strategies","stateInSearch","state","setStateInSearch","onSearch","searchValue","keyword","proxyTitleRender","ret","highlight","React","Highlighter","shouldUseSearch","treeProps","ids","mergedData","nextData","concat","uniqBy","cls","cx","Picker","visible","onOpen","on","onClose","off","trigger","TagInputMock","suffix","UpOutlined","DownOutlined","focused","isArrayNonEmpty","Tree","selectable","checkable","onCheck","__DEV__","displayName","ALWAYS_ALLOW","getSemiCheckedIdsWithSet","isChecked","allowCheck","semiCheckedNodes","semiCheckedIdsSet","Set","parentId","parent","forEach","undefined","has","add","semiCheckedIds","Array","from"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** @LICENSE
2
+ * @hi-ui/check-tree-select
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ Object.defineProperty(exports, '__esModule', {
13
+ value: true
14
+ });
15
+
16
+ require('./styles/index.scss.js');
17
+
18
+ var CheckTreeSelect = require('./CheckTreeSelect.js');
19
+
20
+ exports.CheckTreeSelect = CheckTreeSelect.CheckTreeSelect;
21
+ exports["default"] = CheckTreeSelect.CheckTreeSelect;
22
+ exports.getSemiCheckedIdsWithSet = CheckTreeSelect.getSemiCheckedIdsWithSet;
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,22 @@
1
+ /** @LICENSE
2
+ * @hi-ui/check-tree-select
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ Object.defineProperty(exports, '__esModule', {
13
+ value: true
14
+ });
15
+ var css_248z = "@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n";
16
+
17
+ var __styleInject__ = require('style-inject/dist/style-inject.es.js')["default"];
18
+
19
+ __styleInject__(css_248z);
20
+
21
+ exports["default"] = css_248z;
22
+ //# sourceMappingURL=index.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,317 @@
1
+ /** @LICENSE
2
+ * @hi-ui/check-tree-select
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import { __rest } from 'tslib';
11
+ import React, { forwardRef, useCallback, useMemo, useState } from 'react';
12
+ import { getPrefixCls, cx } from '@hi-ui/classname';
13
+ import { __DEV__ } from '@hi-ui/env';
14
+ import { useToggle } from '@hi-ui/use-toggle';
15
+ import { Tree } from '@hi-ui/tree';
16
+ import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
17
+ import { Picker } from '@hi-ui/picker';
18
+ import { flattenTree } from '@hi-ui/tree-utils';
19
+ import { isArrayNonEmpty } from '@hi-ui/type-assertion';
20
+ import { uniqBy } from 'lodash';
21
+ import { Highlighter } from '@hi-ui/highlighter';
22
+ import { TagInputMock } from '@hi-ui/tag-input';
23
+ import { UpOutlined, DownOutlined } from '@hi-ui/icons';
24
+ import { useAsyncSearch, useTreeCustomSearch, useFilterSearch, useHighlightSearch, useSearchMode } from '@hi-ui/use-search-mode';
25
+ var TREE_SELECT_PREFIX = getPrefixCls('check-tree-select');
26
+ var DEFAULT_DATA = [];
27
+ var DEFAULT_VALUE = [];
28
+ var DEFAULT_FIELD_NAMES = {};
29
+ var DEFAULT_EXPANDED_IDS = [];
30
+ /**
31
+ * TODO: What is CheckTreeSelect
32
+ */
33
+
34
+ var CheckTreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
35
+ var _a$prefixCls = _a.prefixCls,
36
+ prefixCls = _a$prefixCls === void 0 ? TREE_SELECT_PREFIX : _a$prefixCls,
37
+ className = _a.className,
38
+ _a$data = _a.data,
39
+ data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
40
+ dataSource = _a.dataSource,
41
+ _a$disabled = _a.disabled,
42
+ disabled = _a$disabled === void 0 ? false : _a$disabled,
43
+ _a$fieldNames = _a.fieldNames,
44
+ fieldNames = _a$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _a$fieldNames,
45
+ _a$defaultExpandAll = _a.defaultExpandAll,
46
+ defaultExpandAll = _a$defaultExpandAll === void 0 ? false : _a$defaultExpandAll,
47
+ expandedIdsProp = _a.expandedIds,
48
+ _a$defaultExpandedIds = _a.defaultExpandedIds,
49
+ defaultExpandedIds = _a$defaultExpandedIds === void 0 ? DEFAULT_EXPANDED_IDS : _a$defaultExpandedIds,
50
+ onExpand = _a.onExpand,
51
+ _a$defaultValue = _a.defaultValue,
52
+ defaultValue = _a$defaultValue === void 0 ? DEFAULT_VALUE : _a$defaultValue,
53
+ valueProp = _a.value,
54
+ onChange = _a.onChange,
55
+ searchableProp = _a.searchable,
56
+ searchModeProp = _a.searchMode,
57
+ onLoadChildren = _a.onLoadChildren,
58
+ titleRender = _a.titleRender,
59
+ filterOption = _a.filterOption,
60
+ clearable = _a.clearable,
61
+ invalid = _a.invalid,
62
+ displayRender = _a.displayRender,
63
+ _a$placeholder = _a.placeholder,
64
+ placeholder = _a$placeholder === void 0 ? '请选择' : _a$placeholder,
65
+ appearance = _a.appearance,
66
+ rest = __rest(_a, ["prefixCls", "role", "className", "data", "dataSource", "disabled", "fieldNames", "showCheckedMode", "defaultExpandAll", "expandedIds", "defaultExpandedIds", "onExpand", "defaultValue", "value", "onChange", "searchable", "searchMode", "onLoadChildren", "titleRender", "filterOption", "clearable", "invalid", "displayRender", "placeholder", "appearance"]);
67
+
68
+ var _useToggle = useToggle(),
69
+ menuVisible = _useToggle[0],
70
+ menuVisibleAction = _useToggle[1]; // const [viewSelected, setViewSelected] = useState(false)
71
+
72
+ /**
73
+ * 转换对象
74
+ */
75
+
76
+
77
+ var getKeyFields = useCallback(function (node, key) {
78
+ return node[fieldNames[key] || key];
79
+ }, [fieldNames]);
80
+ var flattedData = useMemo(function () {
81
+ return flattenTree(data, function (node) {
82
+ node.id = getKeyFields(node.raw, 'id'); // @ts-ignore
83
+
84
+ node.title = getKeyFields(node.raw, 'title');
85
+ return node;
86
+ });
87
+ }, [data, getKeyFields]); // TODO: 抽离展开hook
88
+ // TODO: onLoadChildren 和 defaultExpandAll 共存时
89
+
90
+ var _useUncontrolledState = useUncontrolledState(function getDefaultExpandedIds() {
91
+ // 开启默认展开全部
92
+ if (defaultExpandAll) {
93
+ return flattedData.map(function (node) {
94
+ return node.id;
95
+ });
96
+ }
97
+
98
+ return defaultExpandedIds;
99
+ }, expandedIdsProp, onExpand),
100
+ expandedIds = _useUncontrolledState[0],
101
+ tryChangeExpandedIds = _useUncontrolledState[1];
102
+
103
+ var _useUncontrolledState2 = useUncontrolledState(defaultValue, valueProp, onChange),
104
+ value = _useUncontrolledState2[0],
105
+ tryChangeValue = _useUncontrolledState2[1]; // 搜索时临时选中缓存数据
106
+
107
+
108
+ var _useState = useState([]),
109
+ selectedItems = _useState[0],
110
+ setSelectedItems = _useState[1];
111
+
112
+ var onSelect = useCallback(function (_ref, node, checked) {
113
+ var checkedIds = _ref.checkedIds;
114
+ tryChangeValue(checkedIds, node); // 存取异步选中数据
115
+
116
+ setSelectedItems(function (prev) {
117
+ var next = [].concat(prev);
118
+
119
+ if (checked) {
120
+ next.push(node);
121
+ } else {
122
+ next.filter(function (item) {
123
+ return item.id !== node.id;
124
+ });
125
+ }
126
+
127
+ return next;
128
+ });
129
+ }, [tryChangeValue]); // ************************** 异步搜索 ************************* //
130
+ // const { loading, hasError, loadRemoteData } = useDataSource({ dataSource, validate: isArray })
131
+
132
+ var _b = useAsyncSearch({
133
+ dataSource: dataSource
134
+ }),
135
+ loading = _b.loading,
136
+ hasError = _b.hasError,
137
+ dataSourceStrategy = __rest(_b, ["loading", "hasError"]);
138
+
139
+ var customSearchStrategy = useTreeCustomSearch({
140
+ data: data,
141
+ filterOption: filterOption
142
+ });
143
+ var filterSearchStrategy = useFilterSearch({
144
+ data: data,
145
+ flattedData: flattedData,
146
+ searchMode: searchModeProp
147
+ });
148
+ var highlightSearchStrategy = useHighlightSearch({
149
+ data: data,
150
+ flattedData: flattedData,
151
+ searchMode: searchModeProp
152
+ });
153
+
154
+ var _useSearchMode = useSearchMode({
155
+ searchable: searchableProp,
156
+ strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy, highlightSearchStrategy]
157
+ }),
158
+ stateInSearch = _useSearchMode.state,
159
+ setStateInSearch = _useSearchMode.setStateInSearch,
160
+ searchable = _useSearchMode.searchable,
161
+ searchMode = _useSearchMode.searchMode,
162
+ onSearch = _useSearchMode.onSearch,
163
+ searchValue = _useSearchMode.keyword; // 拦截 titleRender,自定义高亮展示
164
+
165
+
166
+ var proxyTitleRender = useCallback(function (node) {
167
+ if (titleRender) {
168
+ var _ret = titleRender(node);
169
+
170
+ if (_ret && _ret !== true) return _ret;
171
+ } // 本地搜索执行默认高亮规则
172
+
173
+
174
+ var highlight = !!searchValue && (searchMode === 'highlight' || searchMode === 'filter');
175
+ var ret = highlight ? /*#__PURE__*/React.createElement(Highlighter, {
176
+ keyword: searchValue
177
+ }, node.title) : true;
178
+ return ret;
179
+ }, [titleRender, searchValue, searchMode]);
180
+ var shouldUseSearch = !!searchValue && !hasError;
181
+ var treeProps = {
182
+ data: shouldUseSearch ? stateInSearch.data : data,
183
+ expandedIds: shouldUseSearch ? stateInSearch.expandedIds : expandedIds,
184
+ onExpand: shouldUseSearch ? function (ids) {
185
+ return setStateInSearch(function (prev) {
186
+ return Object.assign(Object.assign({}, prev), {
187
+ expandedIds: ids
188
+ });
189
+ });
190
+ } : tryChangeExpandedIds,
191
+ titleRender: proxyTitleRender
192
+ }; // 下拉菜单不能合并(因为树形数据,不知道是第几级)
193
+
194
+ var mergedData = useMemo(function () {
195
+ var nextData = selectedItems.concat(flattedData);
196
+ return uniqBy(nextData, 'id');
197
+ }, [selectedItems, flattedData]);
198
+ var cls = cx(prefixCls, className); // 过滤掉未选中的数据
199
+ // const tagList = useMemo(() => {
200
+ // // @ts-ignore
201
+ // const [semiCheckedIds] = getSemiCheckedIdsWithSet(flattedData, (id) => value.includes(id))
202
+ // const ids = Array.from(new Set([...semiCheckedIds, ...value]))
203
+ // return flattedData.filter((item) => ids.includes(item.id))
204
+ // }, [value, flattedData])
205
+
206
+ return /*#__PURE__*/React.createElement(Picker, Object.assign({
207
+ ref: ref,
208
+ className: cls
209
+ }, rest, {
210
+ visible: menuVisible,
211
+ onOpen: function onOpen() {
212
+ // setViewSelected(false)
213
+ menuVisibleAction.on();
214
+ },
215
+ disabled: disabled,
216
+ onClose: menuVisibleAction.off,
217
+ // value={value}
218
+ // onChange={tryChangeValue}
219
+ // data={mergedData}
220
+ searchable: searchable,
221
+ onSearch: onSearch,
222
+ loading: loading,
223
+ trigger: /*#__PURE__*/React.createElement(TagInputMock // ref={targetElementRef}
224
+ // onClick={openMenu}
225
+ // disabled={disabled}
226
+ , {
227
+ // ref={targetElementRef}
228
+ // onClick={openMenu}
229
+ // disabled={disabled}
230
+ clearable: clearable,
231
+ placeholder: placeholder,
232
+ // @ts-ignore
233
+ displayRender: displayRender,
234
+ suffix: menuVisible ? /*#__PURE__*/React.createElement(UpOutlined, null) : /*#__PURE__*/React.createElement(DownOutlined, null),
235
+ focused: menuVisible,
236
+ appearance: appearance,
237
+ value: value,
238
+ onChange: tryChangeValue,
239
+ data: mergedData,
240
+ // @ts-ignore
241
+ invalid: invalid,
242
+ onExpand: function onExpand() {
243
+ // setViewSelected(true)
244
+ menuVisibleAction.on();
245
+ }
246
+ })
247
+ }), isArrayNonEmpty(treeProps.data) ? /*#__PURE__*/React.createElement(Tree, Object.assign({
248
+ className: prefixCls + "__tree",
249
+ selectable: false,
250
+ checkable: true,
251
+ // checkOnSelect
252
+ checkedIds: value,
253
+ onCheck: onSelect,
254
+ // TODO: 支持 fieldNames
255
+ // 禁用时被选中的样式处理
256
+ onLoadChildren: onLoadChildren
257
+ }, treeProps)) : null);
258
+ });
259
+
260
+ if (__DEV__) {
261
+ CheckTreeSelect.displayName = 'CheckTreeSelect';
262
+ }
263
+
264
+ var ALWAYS_ALLOW = function ALWAYS_ALLOW() {
265
+ return true;
266
+ };
267
+ /**
268
+ * 在 checkedIdsSet 为数据合法的情况下,查找所有的半选中态的节点 ids
269
+ *
270
+ * @param checkedIdsSet
271
+ * @param flattedData
272
+ * @returns
273
+ */
274
+
275
+
276
+ var getSemiCheckedIdsWithSet = function getSemiCheckedIdsWithSet(flattedData, isChecked, allowCheck) {
277
+ if (allowCheck === void 0) {
278
+ allowCheck = ALWAYS_ALLOW;
279
+ }
280
+
281
+ var semiCheckedNodes = [];
282
+ var semiCheckedIdsSet = new Set();
283
+ var parentId;
284
+ var parent;
285
+ flattedData.forEach(function (node) {
286
+ parent = node.parent;
287
+
288
+ if (parent && parent.id !== undefined) {
289
+ if (!allowCheck(parent)) return;
290
+ parentId = parent.id;
291
+ if (semiCheckedIdsSet.has(parentId)) return; // 父节点没选中,但是当前节点被选中,则视为半选
292
+
293
+ if (!isChecked(parentId) && isChecked(node.id)) {
294
+ semiCheckedIdsSet.add(parentId);
295
+ semiCheckedNodes.push(parent);
296
+ }
297
+ }
298
+ }); // 自下而上设置半选态
299
+
300
+ semiCheckedNodes.forEach(function (node) {
301
+ parent = node.parent;
302
+
303
+ while (parent && parent.id !== undefined) {
304
+ if (!allowCheck(parent)) return;
305
+ parentId = parent.id; // 可能存在兄弟节点,共同祖先需要去重,避免重复计算
306
+
307
+ if (semiCheckedIdsSet.has(parentId)) return;
308
+ semiCheckedIdsSet.add(parentId);
309
+ parent = parent.parent;
310
+ }
311
+ });
312
+ var semiCheckedIds = Array.from(semiCheckedIdsSet);
313
+ return [semiCheckedIds, semiCheckedIdsSet];
314
+ };
315
+
316
+ export { CheckTreeSelect, getSemiCheckedIdsWithSet };
317
+ //# sourceMappingURL=CheckTreeSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckTreeSelect.js","sources":["../../src/CheckTreeSelect.tsx"],"sourcesContent":[null],"names":["TREE_SELECT_PREFIX","getPrefixCls","DEFAULT_DATA","DEFAULT_VALUE","DEFAULT_FIELD_NAMES","DEFAULT_EXPANDED_IDS","CheckTreeSelect","forwardRef","_a","ref","prefixCls","className","data","dataSource","disabled","fieldNames","defaultExpandAll","expandedIdsProp","expandedIds","defaultExpandedIds","onExpand","defaultValue","valueProp","value","onChange","searchableProp","searchable","searchModeProp","searchMode","onLoadChildren","titleRender","filterOption","clearable","invalid","displayRender","placeholder","appearance","rest","useToggle","menuVisible","menuVisibleAction","getKeyFields","useCallback","node","key","flattedData","useMemo","flattenTree","id","raw","title","useUncontrolledState","getDefaultExpandedIds","map","tryChangeExpandedIds","tryChangeValue","useState","selectedItems","setSelectedItems","onSelect","checked","checkedIds","prev","next","push","filter","item","_b","useAsyncSearch","loading","hasError","dataSourceStrategy","customSearchStrategy","useTreeCustomSearch","filterSearchStrategy","useFilterSearch","highlightSearchStrategy","useHighlightSearch","useSearchMode","strategies","stateInSearch","state","setStateInSearch","onSearch","searchValue","keyword","proxyTitleRender","ret","highlight","React","Highlighter","shouldUseSearch","treeProps","ids","mergedData","nextData","concat","uniqBy","cls","cx","Picker","visible","onOpen","on","onClose","off","trigger","TagInputMock","suffix","UpOutlined","DownOutlined","focused","isArrayNonEmpty","Tree","selectable","checkable","onCheck","__DEV__","displayName","ALWAYS_ALLOW","getSemiCheckedIdsWithSet","isChecked","allowCheck","semiCheckedNodes","semiCheckedIdsSet","Set","parentId","parent","forEach","undefined","has","add","semiCheckedIds","Array","from"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA4BA,IAAMA,kBAAkB,GAAGC,YAAY,CAAC,mBAAD,CAAvC;AACA,IAAMC,YAAY,GAAG,EAArB;AACA,IAAMC,aAAa,GAAG,EAAtB;AACA,IAAMC,mBAAmB,GAAG,EAA5B;AACA,IAAMC,oBAAoB,GAAG,EAA7B;AAEA;;;;IAGaC,eAAe,gBAAGC,UAAU,CACvC,UACEC,EADF,EAwCEC,GAxCF;wBAEIC;MAAAA,sCAAYV;MAEZW,eAAAA;mBACAC;MAAAA,4BAAOV;MACPW,gBAAAA;uBACAC;MAAAA,oCAAW;yBAGXC;MAAAA,wCAAaX;+BAGbY;MAAAA,oDAAmB;MACNC,qBAAbC;iCACAC;MAAAA,wDAAqBd;MACrBe,cAAAA;2BACAC;MAAAA,4CAAelB;MACRmB,eAAPC;MACAC,cAAAA;MAEYC,oBAAZC;MACYC,oBAAZC;MACAC,oBAAAA;MACAC,iBAAAA;MACAC,kBAAAA;MAOAC,eAAAA;MACAC,aAAAA;MACAC,mBAAAA;0BACAC;MAAAA,0CAAc;MACdC,gBAAAA;MAEGC,kBArCL,YAAA,QAAA,aAAA,QAAA,cAAA,YAAA,cAAA,mBAAA,oBAAA,eAAA,sBAAA,YAAA,gBAAA,SAAA,YAAA,cAAA,cAAA,kBAAA,eAAA,gBAAA,aAAA,WAAA,iBAAA,eAAA,cAAA;;mBAyCyCC,SAAS;MAA3CC,WAAP;MAAoBC,iBAApB;;;;;;;MAMMC,YAAY,GAAGC,WAAW,CAC9B,UAACC,IAAD,EAAYC,GAAZ;WACSD,IAAI,CAAC5B,UAAU,CAAC6B,GAAD,CAAV7B,IAAmB6B,GAApB;AAFiB,GAAA,EAI9B,CAAC7B,UAAD,CAJ8B;MAO1B8B,WAAW,GAAGC,OAAO,CAAC;WACnBC,WAAW,CAACnC,IAAD,EAAO,UAAC+B,IAAD;AACvBA,MAAAA,IAAI,CAACK,EAALL,GAAUF,YAAY,CAACE,IAAI,CAACM,GAAN,EAAW,IAAX,CAAtBN;;AAEAA,MAAAA,IAAI,CAACO,KAALP,GAAaF,YAAY,CAACE,IAAI,CAACM,GAAN,EAAW,OAAX,CAAzBN;aACOA;AAJS,KAAA;AADO,GAAA,EAOxB,CAAC/B,IAAD,EAAO6B,YAAP,CAPwB;;;8BAWiBU,oBAAoB,CAC9D,SAASC,qBAAT;;QAEMpC,kBAAkB;aACb6B,WAAW,CAACQ,GAAZR,CAAgB,UAACF,IAAD;eAAUA,IAAI,CAACK;AAA/B,OAAAH;;;WAEF1B;AANqD,GAAA,EAQ9DF,eAR8D,EAS9DG,QAT8D;MAAzDF,WAAP;MAAoBoC,oBAApB;;+BAYgCH,oBAAoB,CAAC9B,YAAD,EAAeC,SAAf,EAA0BE,QAA1B;MAA7CD,KAAP;MAAcgC,cAAd;;;kBAE0CC,QAAQ,CAA4B,EAA5B;MAA3CC,aAAP;MAAsBC,gBAAtB;;MAEMC,QAAQ,GAAGjB,WAAW,CAC1B,cAAA,EAAiBC,IAAjB,EAA0CiB,OAA1C;QAAGC,kBAAAA;AACDN,IAAAA,cAAc,CAACM,UAAD,EAAalB,IAAb,CAAdY;;AAEAG,IAAAA,gBAAgB,CAAC,UAACI,IAAD;UACTC,IAAI,aAAOD;;UACbF,SAAS;AACXG,QAAAA,IAAI,CAACC,IAALD,CAAUpB,IAAVoB;AADF,aAEO;AACLA,QAAAA,IAAI,CAACE,MAALF,CAAY,UAACG,IAAD;iBAAUA,IAAI,CAAClB,EAALkB,KAAYvB,IAAI,CAACK;AAAvC,SAAAe;;;aAEKA;AAPO,KAAA,CAAhBL;AAJwB,GAAA,EAc1B,CAACH,cAAD,CAd0B;;;MAqBtBY,KAA+CC,cAAc,CAAC;AAAEvD,IAAAA,UAAU,EAAVA;AAAF,GAAD;MAA3DwD,OAAF,KAAA,CAAEA;MAASC,QAAX,KAAA,CAAWA;MAAaC,kBAAxB,cAAA,UAAA,YAAA;;MACAC,oBAAoB,GAAGC,mBAAmB,CAAC;AAAE7D,IAAAA,IAAI,EAAJA,IAAF;AAAQmB,IAAAA,YAAY,EAAZA;AAAR,GAAD;MAC1C2C,oBAAoB,GAAGC,eAAe,CAAC;AAC3C/D,IAAAA,IAAI,EAAJA,IAD2C;AAE3CiC,IAAAA,WAAW,EAAXA,WAF2C;AAG3CjB,IAAAA,UAAU,EAAED;AAH+B,GAAD;MAKtCiD,uBAAuB,GAAGC,kBAAkB,CAAC;AACjDjE,IAAAA,IAAI,EAAJA,IADiD;AAEjDiC,IAAAA,WAAW,EAAXA,WAFiD;AAGjDjB,IAAAA,UAAU,EAAED;AAHqC,GAAD;;uBAa9CmD,aAAa,CAAC;AAChBpD,IAAAA,UAAU,EAAED,cADI;AAEhBsD,IAAAA,UAAU,EAAE,CACVR,kBADU,EAEVC,oBAFU,EAGVE,oBAHU,EAIVE,uBAJU;AAFI,GAAD;MANRI,aADT,kBACEC;MACAC,gBAFF,kBAEEA;MACAxD,UAHF,kBAGEA;MACAE,UAJF,kBAIEA;MACAuD,QALF,kBAKEA;MACSC,WANX,kBAMEC;;;MAYIC,gBAAgB,GAAG5C,WAAW,CAClC,UAACC,IAAD;QACMb,aAAa;UACTyD,IAAG,GAAGzD,WAAW,CAACa,IAAD;;UACnB4C,IAAG,IAAIA,IAAG,KAAK,MAAM,OAAOA,IAAP;;;;QAIrBC,SAAS,GAAG,CAAC,CAACJ,WAAF,KAAkBxD,UAAU,KAAK,WAAfA,IAA8BA,UAAU,KAAK,QAA/D;QAEZ2D,GAAG,GAAGC,SAAS,gBAAGC,mBAAAA,CAACC,WAADD;AAAaJ,MAAAA,OAAO,EAAED;KAAtBK,EAAoC9C,IAAI,CAACO,KAAzCuC,CAAH,GAAmE;WAEjFF;AAZyB,GAAA,EAclC,CAACzD,WAAD,EAAcsD,WAAd,EAA2BxD,UAA3B,CAdkC;MAiB9B+D,eAAe,GAAG,CAAC,CAACP,WAAF,IAAiB,CAACd;MAEpCsB,SAAS,GAAG;AAChBhF,IAAAA,IAAI,EAAE+E,eAAe,GAAGX,aAAa,CAACpE,IAAjB,GAAwBA,IAD7B;AAEhBM,IAAAA,WAAW,EAAEyE,eAAe,GAAGX,aAAa,CAAC9D,WAAjB,GAA+BA,WAF3C;AAGhBE,IAAAA,QAAQ,EAAEuE,eAAe,GACrB,UAACE,GAAD;aAAcX,gBAAgB,CAAC,UAACpB,IAAD;+CAAqBA;AAAM5C,UAAAA,WAAW,EAAE2E;;AAAzC,OAAA;AADT,KAAA,GAErBvC,oBALY;AAMhBxB,IAAAA,WAAW,EAAEwD;AANG;;MAUZQ,UAAU,GAAUhD,OAAO,CAAC;QAC1BiD,QAAQ,GAAGtC,aAAa,CAACuC,MAAdvC,CAAqBZ,WAArBY;WACVwC,MAAM,CAACF,QAAD,EAAW,IAAX;AAFkB,GAAA,EAG9B,CAACtC,aAAD,EAAgBZ,WAAhB,CAH8B;MAK3BqD,GAAG,GAAGC,EAAE,CAACzF,SAAD,EAAYC,SAAZ;;;;;;;;sBAaZ8E,mBAAAA,CAACW,MAADX;AACEhF,IAAAA,GAAG,EAAEA;AACLE,IAAAA,SAAS,EAAEuF;KACP7D;AACJgE,IAAAA,OAAO,EAAE9D;AACT+D,IAAAA,MAAM,EAAE,eAAA;;AAEN9D,MAAAA,iBAAiB,CAAC+D,EAAlB/D;;AAEF1B,IAAAA,QAAQ,EAAEA;AACV0F,IAAAA,OAAO,EAAEhE,iBAAiB,CAACiE;;;;AAI3B/E,IAAAA,UAAU,EAAEA;AACZyD,IAAAA,QAAQ,EAAEA;AACVd,IAAAA,OAAO,EAAEA;AACTqC,IAAAA,OAAO,eACLjB,mBAAAA,CAACkB,YAADlB;;;AAAAA;;;;AAIEzD,MAAAA,SAAS,EAAEA;AACXG,MAAAA,WAAW,EAAEA;;AAEbD,MAAAA,aAAa,EAAEA;AACf0E,MAAAA,MAAM,EAAErE,WAAW,gBAAGkD,mBAAAA,CAACoB,UAADpB,MAAAA,CAAH,gBAAoBA,mBAAAA,CAACqB,YAADrB,MAAAA;AACvCsB,MAAAA,OAAO,EAAExE;AACTH,MAAAA,UAAU,EAAEA;AACZb,MAAAA,KAAK,EAAEA;AACPC,MAAAA,QAAQ,EAAE+B;AACV3C,MAAAA,IAAI,EAAEkF;;AAEN7D,MAAAA,OAAO,EAAEA;AACTb,MAAAA,QAAQ,EAAE,iBAAA;;AAERoB,QAAAA,iBAAiB,CAAC+D,EAAlB/D;;KAlBJiD;IAlBJA,EA0CGuB,eAAe,CAACpB,SAAS,CAAChF,IAAX,CAAfoG,gBACCvB,mBAAAA,CAACwB,IAADxB;AACE9E,IAAAA,SAAS,EAAKD,SAAL;AACTwG,IAAAA,UAAU,EAAE;AACZC,IAAAA,SAAS;;AAETtD,IAAAA,UAAU,EAAEtC;AACZ6F,IAAAA,OAAO,EAAEzD;;;AAGT9B,IAAAA,cAAc,EAAEA;KACZ+D,UAVNH,CADDuB,GAaG,IAvDNvB;AAtLmC,CAAA;;AA6XzC,IAAI4B,OAAJ,EAAa;AACX/G,EAAAA,eAAe,CAACgH,WAAhBhH,GAA8B,iBAA9BA;;;AAGF,IAAMiH,YAAY,GAAG,SAAfA,YAAe;SAAM;AAA3B,CAAA;AAEA;;;;;;;;;IAOaC,wBAAwB,GAAG,SAA3BA,wBAA2B,CACtC3E,WADsC,EAEtC4E,SAFsC,EAGtCC,UAHsC;MAGtCA;AAAAA,IAAAA,aAA2DH,YAA3DG;;;MAEMC,gBAAgB,GAAG;MACnBC,iBAAiB,GAAG,IAAIC,GAAJ;MAEtBC;MACAC;AAEJlF,EAAAA,WAAW,CAACmF,OAAZnF,CAAoB,UAACF,IAAD;AAClBoF,IAAAA,MAAM,GAAGpF,IAAI,CAACoF,MAAdA;;QAEIA,MAAM,IAAIA,MAAM,CAAC/E,EAAP+E,KAAcE,WAAW;UACjC,CAACP,UAAU,CAACK,MAAD,GAAU;AAEzBD,MAAAA,QAAQ,GAAGC,MAAM,CAAC/E,EAAlB8E;UACIF,iBAAiB,CAACM,GAAlBN,CAAsBE,QAAtBF,GAAiC,OAJA;;UAOjC,CAACH,SAAS,CAACK,QAAD,CAAV,IAAwBL,SAAS,CAAC9E,IAAI,CAACK,EAAN,GAAW;AAC9C4E,QAAAA,iBAAiB,CAACO,GAAlBP,CAAsBE,QAAtBF;AACAD,QAAAA,gBAAgB,CAAC3D,IAAjB2D,CAAsBI,MAAtBJ;;;AAZN,GAAA9E;;AAkBA8E,EAAAA,gBAAgB,CAACK,OAAjBL,CAAyB,UAAChF,IAAD;AACvBoF,IAAAA,MAAM,GAAGpF,IAAI,CAACoF,MAAdA;;WACOA,MAAM,IAAIA,MAAM,CAAC/E,EAAP+E,KAAcE,WAAW;UACpC,CAACP,UAAU,CAACK,MAAD,GAAU;AAEzBD,MAAAA,QAAQ,GAAGC,MAAM,CAAC/E,EAAlB8E,CAHwC;;UAKpCF,iBAAiB,CAACM,GAAlBN,CAAsBE,QAAtBF,GAAiC;AAErCA,MAAAA,iBAAiB,CAACO,GAAlBP,CAAsBE,QAAtBF;AACAG,MAAAA,MAAM,GAAGA,MAAM,CAACA,MAAhBA;;AAVJ,GAAAJ;MAcMS,cAAc,GAAGC,KAAK,CAACC,IAAND,CAAWT,iBAAXS;SAChB,CAACD,cAAD,EAAiBR,iBAAjB;;;"}
@@ -0,0 +1,12 @@
1
+ /** @LICENSE
2
+ * @hi-ui/check-tree-select
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import './styles/index.scss.js';
11
+ export { CheckTreeSelect, CheckTreeSelect as default, getSemiCheckedIdsWithSet } from './CheckTreeSelect.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,17 @@
1
+ /** @LICENSE
2
+ * @hi-ui/check-tree-select
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ var css_248z = "@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n";
11
+
12
+ var __styleInject__ = require('style-inject/dist/style-inject.es.js')["default"];
13
+
14
+ __styleInject__(css_248z);
15
+
16
+ export default css_248z;
17
+ //# sourceMappingURL=index.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
@@ -0,0 +1,135 @@
1
+ import React from 'react';
2
+ import { DataSourceFunc, FieldNames, CheckTreeSelectDataItem, CheckTreeSelectDataSource } from './types';
3
+ import { PopperProps } from '@hi-ui/popper';
4
+ import { FlattedTreeNodeData, TreeNodeEventData } from '@hi-ui/tree';
5
+ import { PickerProps } from '@hi-ui/picker';
6
+ /**
7
+ * TODO: What is CheckTreeSelect
8
+ */
9
+ export declare const CheckTreeSelect: React.ForwardRefExoticComponent<CheckTreeSelectProps & React.RefAttributes<HTMLDivElement | null>>;
10
+ export interface CheckTreeSelectProps extends Omit<PickerProps, 'data' | 'onChange' | 'value' | 'trigger'> {
11
+ /**
12
+ * 展示数据
13
+ */
14
+ data?: CheckTreeSelectDataItem[];
15
+ /**
16
+ * 设置 data 中 id, title, disabled, children 对应的 key (3.0 新增) object - { title: 'title', id: 'id',disabled:'disabled', children: 'children'}
17
+ */
18
+ fieldNames?: FieldNames;
19
+ /**
20
+ * 数据回显模式 string
21
+ * ALL: 所有被选中节点,不区分父子节点
22
+ * PARENT: 当所有子节点被选中时将只保留父节点
23
+ * CHILD: 仅显示子节点
24
+ */
25
+ showCheckedMode?: 'ALL' | 'PARENT' | 'CHILD';
26
+ /**
27
+ * 数据选择类型
28
+ */
29
+ type?: 'single' | 'multiple';
30
+ /**
31
+ * 是否有边框
32
+ */
33
+ bordered?: boolean;
34
+ /**
35
+ * 是否禁用
36
+ */
37
+ disabled?: boolean;
38
+ /**
39
+ * 是否默认展开所有树节点
40
+ */
41
+ defaultExpandAll?: boolean;
42
+ /**
43
+ * 展开的节点(受控)
44
+ */
45
+ expandedIds?: React.ReactText[];
46
+ /**
47
+ * 默认展开的节点(非受控)
48
+ */
49
+ defaultExpandedIds?: React.ReactText[];
50
+ /**
51
+ * 节点被点击(展开/收起)时触发
52
+ */
53
+ onExpand?: () => void;
54
+ /**
55
+ * 默认选中项 (非受控)
56
+ */
57
+ defaultValue?: React.ReactText[];
58
+ /**
59
+ * 默认选中项 (受控)
60
+ */
61
+ value?: React.ReactText[];
62
+ /**
63
+ * 自定义渲染 Input 中展示内容
64
+ */
65
+ displayRender?: (item: CheckTreeSelectDataItem) => React.ReactNode;
66
+ /**
67
+ * 输入框占位 string - 请选择
68
+ */
69
+ placeholder?: string;
70
+ /**
71
+ * 节点搜索模式,仅在mode=normal模式下生效
72
+ */
73
+ searchMode?: 'highlight' | 'filter';
74
+ /**
75
+ * 自定义搜索过滤器,仅在 searchable 为 true 时有效
76
+ * 第一个参数为输入的关键字,
77
+ * 第二个为数据项,返回值为 true 时将出现在结果项
78
+ */
79
+ filterOption?: (keyword: string, item: CheckTreeSelectDataItem) => boolean;
80
+ /**
81
+ * 自定义渲染节点的 title 内容
82
+ */
83
+ titleRender?: (node: TreeNodeEventData) => React.ReactNode;
84
+ /**
85
+ * 点击异步加载子项
86
+ */
87
+ onLoadChildren?: (node: TreeNodeEventData) => void | Promise<CheckTreeSelectDataItem[] | void>;
88
+ /**
89
+ * 从远端获取数据,初始时是否自动加载
90
+ */
91
+ autoload?: boolean;
92
+ /**
93
+ * 异步加载数据
94
+ */
95
+ dataSource?: DataSourceFunc | CheckTreeSelectDataSource | Promise<CheckTreeSelectDataItem[]>;
96
+ /**
97
+ * 没有选项时的提示
98
+ */
99
+ emptyContent?: React.ReactNode;
100
+ /**
101
+ * 自定义下拉选项宽度
102
+ */
103
+ optionWidth?: number;
104
+ /**
105
+ * 下拉根元素的类名称 (3.0 新增)
106
+ */
107
+ overlayClassName?: string;
108
+ /**
109
+ * 选中时触发
110
+ * checkedIds | checkedId: 选中项 ID 集合 | ID
111
+ * checkedNodes | checkedNode: 选中项数据项集合|数据项
112
+ * currentNode: 当前操作节点
113
+ */
114
+ onChange?: (selectedIds: React.ReactText[], changedItem: CheckTreeSelectDataItem[], currentNode: CheckTreeSelectDataItem) => void;
115
+ /**
116
+ * 是否可清空
117
+ */
118
+ clearable?: boolean;
119
+ /**
120
+ * 自定义控制 popper 行为
121
+ */
122
+ popper?: PopperProps;
123
+ /**
124
+ * 设置展现形式
125
+ */
126
+ appearance?: 'outline' | 'unset' | 'filled';
127
+ }
128
+ /**
129
+ * 在 checkedIdsSet 为数据合法的情况下,查找所有的半选中态的节点 ids
130
+ *
131
+ * @param checkedIdsSet
132
+ * @param flattedData
133
+ * @returns
134
+ */
135
+ export declare const getSemiCheckedIdsWithSet: (flattedData: FlattedTreeNodeData[], isChecked: (id: React.ReactText) => boolean, allowCheck?: (targetItem: FlattedTreeNodeData) => boolean) => readonly [React.ReactText[], Set<React.ReactText>];
@@ -0,0 +1,3 @@
1
+ import './styles/index.scss';
2
+ export * from './CheckTreeSelect';
3
+ export { CheckTreeSelect as default } from './CheckTreeSelect';
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ export interface CheckTreeSelectDataItem {
3
+ /**
4
+ * 节点唯一 id
5
+ */
6
+ id: React.ReactText;
7
+ /**
8
+ * 节点标题
9
+ */
10
+ title: React.ReactNode;
11
+ /**
12
+ * 子级数据
13
+ */
14
+ children?: CheckTreeSelectDataItem[];
15
+ /**
16
+ * 是否禁用
17
+ */
18
+ disabled?: boolean;
19
+ }
20
+ export interface CheckTreeSelectDataSource<T = any> {
21
+ /**
22
+ * 请求的 url
23
+ */
24
+ url?: string;
25
+ /**
26
+ * 请求方法
27
+ */
28
+ type?: 'get' | 'post';
29
+ /**
30
+ * post 请求时请求体参数
31
+ */
32
+ data?: object;
33
+ /**
34
+ * url 查询参数
35
+ */
36
+ params?: object;
37
+ /**
38
+ * 请求头
39
+ */
40
+ headers?: object;
41
+ /**
42
+ * 请求模式
43
+ */
44
+ mode?: 'same-origin' | 'cors' | 'no-cors' | 'navigate' | 'same-origin';
45
+ /**
46
+ * 成功时的回调,用于对数据进行预处理
47
+ */
48
+ transformResponse?: (response: object) => T;
49
+ }
50
+ export declare type FilterOptionFunc = (keyword: string, item: CheckTreeSelectDataItem) => boolean;
51
+ export declare type DataSourceFunc = (keyword: string) => CheckTreeSelectDataSource;
52
+ export declare type FieldNames = {
53
+ id?: string;
54
+ title?: string;
55
+ disabled?: string;
56
+ children?: string;
57
+ };
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@hi-ui/check-tree-select",
3
+ "version": "4.0.0-alpha.10",
4
+ "description": "A sub-package for @hi-ui/hiui.",
5
+ "keywords": [],
6
+ "author": "HIUI <mi-hiui@xiaomi.com>",
7
+ "homepage": "https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-tree-select#readme",
8
+ "license": "MIT",
9
+ "directories": {
10
+ "lib": "lib",
11
+ "test": "__tests__"
12
+ },
13
+ "files": [
14
+ "lib"
15
+ ],
16
+ "main": "lib/cjs/index.js",
17
+ "module": "lib/esm/index.js",
18
+ "types": "lib/types/index.d.ts",
19
+ "typings": "lib/types/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "require": "./lib/cjs/index.js",
23
+ "default": "./lib/esm/index.js"
24
+ }
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/XiaoMi/hiui.git"
32
+ },
33
+ "scripts": {
34
+ "test": "jest",
35
+ "clean": "rimraf lib",
36
+ "prebuild": "yarn clean",
37
+ "build:esm": "hi-build ./src/index.ts --format esm -d ./lib/esm",
38
+ "build:cjs": "hi-build ./src/index.ts --format cjs -d ./lib/cjs",
39
+ "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir lib/types",
40
+ "build": "concurrently yarn:build:*"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/XiaoMi/hiui/issues"
44
+ },
45
+ "dependencies": {
46
+ "@hi-ui/classname": "^4.0.0-alpha.3",
47
+ "@hi-ui/core": "^4.0.0-alpha.14",
48
+ "@hi-ui/core-css": "^4.0.0-alpha.10",
49
+ "@hi-ui/env": "^4.0.0-alpha.5",
50
+ "@hi-ui/highlighter": "^4.0.0-alpha.6",
51
+ "@hi-ui/icons": "^4.0.0-alpha.20",
52
+ "@hi-ui/picker": "^4.0.0-alpha.8",
53
+ "@hi-ui/popper": "^4.0.0-alpha.17",
54
+ "@hi-ui/tag-input": "^4.0.0-alpha.15",
55
+ "@hi-ui/tree": "^4.0.0-alpha.30",
56
+ "@hi-ui/tree-utils": "^4.0.0-alpha.8",
57
+ "@hi-ui/type-assertion": "^4.0.0-alpha.13",
58
+ "@hi-ui/use-search-mode": "^4.0.0-alpha.7",
59
+ "@hi-ui/use-toggle": "^4.0.0-alpha.10",
60
+ "@hi-ui/use-uncontrolled-state": "^4.0.0-alpha.12",
61
+ "lodash": "^4.17.21"
62
+ },
63
+ "peerDependencies": {
64
+ "react": "^17.0.1",
65
+ "react-dom": "^17.0.1"
66
+ },
67
+ "devDependencies": {
68
+ "@hi-ui/hi-build": "^4.0.0-alpha.4",
69
+ "react": "^17.0.1",
70
+ "react-dom": "^17.0.1"
71
+ },
72
+ "gitHead": "90f526d81b6e564427caf34ba49655c07943c195"
73
+ }