@hi-ui/hiui 3.9.0-rc.2 → 3.9.0-rc.6

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.
@@ -212,7 +212,7 @@ var Carousel = /*#__PURE__*/function (_Component) {
212
212
  });
213
213
  })), showPages && /*#__PURE__*/_react["default"].createElement("div", {
214
214
  className: "hi-carousel__pages"
215
- }, /*#__PURE__*/_react["default"].createElement("span", null, active, " / ", len)));
215
+ }, /*#__PURE__*/_react["default"].createElement("span", null, active + 1, " / ", len)));
216
216
  }
217
217
  }]);
218
218
  return Carousel;
package/es/form/Item.js CHANGED
@@ -407,7 +407,16 @@ var FormItem = function FormItem(props) {
407
407
  }
408
408
 
409
409
  if (_field && !isExist) {
410
- _value = initialValues && typeof initialValues[field] !== 'undefined' ? initialValues[_field] : _value;
410
+ // 初始化值
411
+ if (initialValues) {
412
+ // TODO: 如果 field 是数组,无法完成嵌套对象初始化值,感觉这块实现没想清楚,暂时维护现状,对用户不建议使用数组模式
413
+ // 这里逻辑判断 field,但是最终操作的是 _field,暂时不调整,暂不清楚是否存在破坏性更新
414
+ if (typeof initialValues[field] !== 'undefined') {
415
+ _value = initialValues[_field];
416
+ } else if (_type === 'SchemaForm' && typeof initialValues[realField] !== 'undefined') {
417
+ _value = initialValues[realField];
418
+ }
419
+ }
411
420
 
412
421
  if (_type === 'list' && listItemValue) {
413
422
  _value = Object.keys(listItemValue).includes(name) ? listItemValue[name] : listItemValue;
@@ -494,6 +503,7 @@ var FormItem = function FormItem(props) {
494
503
  var _labelWidth = labelWidth();
495
504
 
496
505
  var contentWidth = formProps.labelPlacement === 'top' ? '100%' : "calc(100% - ".concat(_labelWidth, "px)");
506
+ var alignItems = getItemPosition(contentPosition);
497
507
  return /*#__PURE__*/_react["default"].createElement("div", {
498
508
  className: (0, _classnames["default"])('hi-form-item', className, obj),
499
509
  style: style,
@@ -519,7 +529,7 @@ var FormItem = function FormItem(props) {
519
529
  }, /*#__PURE__*/_react["default"].createElement("div", {
520
530
  className: 'hi-form-item' + '__children',
521
531
  style: {
522
- alignItems: getItemPosition(contentPosition)
532
+ alignItems: alignItems
523
533
  }
524
534
  }, renderChildren()), /*#__PURE__*/_react["default"].createElement("div", {
525
535
  className: (0, _classnames["default"])('hi-form-item--msg__error', {
@@ -422,30 +422,29 @@ var InternalSelect = function InternalSelect(props) {
422
422
  return shouldMatch || String(item[(0, _utils.transKeys)(fieldNames, 'id')] || '').includes(keyword) || String(item[(0, _utils.transKeys)(fieldNames, 'title')] || '').includes(keyword);
423
423
  }, [dataSource, searchable, keyword, filterOption]);
424
424
  var remoteSearch = (0, _react.useCallback)(function (keyword) {
425
- var _dataSource = typeof dataSource === 'function' ? dataSource(keyword) : dataSource;
425
+ var resultMayBePromise = typeof dataSource === 'function' ? dataSource(keyword) : dataSource;
426
+ if ((0, _lodash.isNil)(resultMayBePromise)) return;
426
427
 
427
- if (Array.isArray(_dataSource)) {
428
- setDropdownItems(_dataSource);
428
+ if (Array.isArray(resultMayBePromise)) {
429
+ setDropdownItems(resultMayBePromise);
429
430
  return;
430
- } // 处理promise函数
431
-
431
+ }
432
432
 
433
- if (_dataSource.toString() === '[object Promise]') {
433
+ if (resultMayBePromise.toString() === '[object Promise]') {
434
434
  setLoading(true);
435
-
436
- _dataSource.then(function (res) {
435
+ resultMayBePromise.then(function (res) {
437
436
  setLoading(false);
437
+ if ((0, _lodash.isNil)(res)) return;
438
438
  setDropdownItems(Array.isArray(res) ? res : []);
439
439
  }, function () {
440
440
  setLoading(false);
441
441
  setDropdownItems([]);
442
442
  });
443
-
444
443
  return;
445
- } // 调用接口
444
+ } // 传入对象, 调用接口
446
445
 
447
446
 
448
- HiRequestSearch(_dataSource, keyword);
447
+ HiRequestSearch(resultMayBePromise, keyword);
449
448
  }, [dataSource, keyword]);
450
449
  var HiRequestSearch = (0, _react.useCallback)(function (_dataSource, keyword) {
451
450
  var url = _dataSource.url,
@@ -85,7 +85,14 @@ var SelectTree = function SelectTree(_ref) {
85
85
  _ref$bordered = _ref.bordered,
86
86
  bordered = _ref$bordered === void 0 ? true : _ref$bordered,
87
87
  _ref$fieldNames = _ref.fieldNames,
88
- fieldNames = _ref$fieldNames === void 0 ? {} : _ref$fieldNames;
88
+ fieldNames = _ref$fieldNames === void 0 ? {} : _ref$fieldNames,
89
+ filterOption = _ref.filterOption;
90
+ var isCustomFilter = typeof filterOption === 'function';
91
+
92
+ if (isCustomFilter) {
93
+ searchMode = '';
94
+ }
95
+
89
96
  (0, _util.setFieldNames)(fieldNames || {});
90
97
 
91
98
  var _useState = (0, _react.useState)(false),
@@ -308,13 +315,13 @@ var SelectTree = function SelectTree(_ref) {
308
315
  }, []); // 过滤方法
309
316
 
310
317
  var searchTreeNode = function searchTreeNode(val) {
318
+ var _keyword = val;
311
319
  var matchNodes = [];
312
320
 
313
321
  var _data = _lodash["default"].cloneDeep(flattenData);
314
322
 
315
323
  if (searchMode === 'highlight') {
316
324
  var filterArr = _data.map(function (node) {
317
- var _keyword = val;
318
325
  _keyword = val.includes('[') ? _keyword.replace(/\[/gi, '\\[') : _keyword;
319
326
  _keyword = val.includes('(') ? _keyword.replace(/\(/gi, '\\(') : _keyword;
320
327
  _keyword = val.includes(')') ? _keyword.replace(/\)/gi, '\\)') : _keyword;
@@ -337,6 +344,18 @@ var SelectTree = function SelectTree(_ref) {
337
344
  });
338
345
  matchNodesSet = _lodash["default"].uniq(matchNodesSet);
339
346
  setExpandIds(matchNodesSet);
347
+ } else if (searchMode === '' && isCustomFilter) {
348
+ // filterOption 模式展开全部
349
+ var _matchNodesSet = [];
350
+
351
+ _data.forEach(function (mn) {
352
+ _matchNodesSet.push(mn[(0, _util.transKeys)(fieldNames, 'id')]);
353
+
354
+ _matchNodesSet = _matchNodesSet.concat(mn.ancestors || []);
355
+ });
356
+
357
+ _matchNodesSet = _lodash["default"].uniq(_matchNodesSet);
358
+ setExpandIds(_matchNodesSet);
340
359
  }
341
360
  };
342
361
  /**
@@ -543,7 +562,7 @@ var SelectTree = function SelectTree(_ref) {
543
562
 
544
563
  var debouncedFilterItems = _lodash["default"].debounce(changeEvents, 300);
545
564
 
546
- var searchable = searchMode === 'filter' || searchMode === 'highlight'; // 按键操作
565
+ var searchable = searchMode === 'filter' || searchMode === 'highlight' || isCustomFilter; // 按键操作
547
566
 
548
567
  var handleKeyDown = (0, _react.useCallback)(function (evt) {
549
568
  // space
@@ -741,7 +760,8 @@ var SelectTree = function SelectTree(_ref) {
741
760
  onClick: selectedEvents,
742
761
  emptyContent: emptyContent,
743
762
  isRemoteLoadData: !!dataSource,
744
- onCheck: checkedEvents
763
+ onCheck: checkedEvents,
764
+ filterOption: filterOption
745
765
  })))));
746
766
  };
747
767
 
@@ -67,7 +67,8 @@ var TreeNode = function TreeNode(_ref2) {
67
67
  isRemoteLoadData = _useContext.isRemoteLoadData,
68
68
  activeId = _useContext.activeId,
69
69
  searchMode = _useContext.searchMode,
70
- searchValue = _useContext.searchValue;
70
+ searchValue = _useContext.searchValue,
71
+ filterOption = _useContext.filterOption;
71
72
 
72
73
  var treeNodeRef = (0, _react.useRef)(null);
73
74
  var renderIndent = (0, _react.useCallback)(function () {
@@ -131,7 +132,14 @@ var TreeNode = function TreeNode(_ref2) {
131
132
  isLeaf = node.isLeaf;
132
133
  var childrenNodes = (0, _util.getChildrenNodes)(node, flttenData);
133
134
  var expand = expandIds.includes(node[(0, _util.transKeys)(fieldNames, 'id')]);
134
- var needFilter = searchMode === 'filter' ? !!(0, _util.matchAllDataFilterKey)(node, searchValue) : true;
135
+ var needFilter = true;
136
+
137
+ if (searchMode === 'filter') {
138
+ needFilter = !!(0, _util.matchAllDataFilterKey)(node, searchValue);
139
+ } else if (typeof filterOption === 'function') {
140
+ needFilter = filterOption(searchValue, node);
141
+ }
142
+
135
143
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
136
144
  key: index
137
145
  }, needFilter ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("li", {
@@ -39,6 +39,7 @@ var Tree = function Tree(_ref) {
39
39
  emptyContent = _ref.emptyContent,
40
40
  searchMode = _ref.searchMode,
41
41
  searchValue = _ref.searchValue,
42
+ filterOption = _ref.filterOption,
42
43
  fieldNames = _ref.fieldNames;
43
44
  return /*#__PURE__*/_react["default"].createElement(_context["default"].Provider, {
44
45
  value: {
@@ -57,7 +58,8 @@ var Tree = function Tree(_ref) {
57
58
  isRemoteLoadData: isRemoteLoadData,
58
59
  activeId: activeId,
59
60
  searchMode: searchMode,
60
- searchValue: searchValue
61
+ searchValue: searchValue,
62
+ filterOption: filterOption
61
63
  }
62
64
  }, /*#__PURE__*/_react["default"].createElement("div", {
63
65
  className: "".concat(PREFIX)
@@ -47,9 +47,9 @@ var CustomFilter = function CustomFilter(_ref) {
47
47
  }, /*#__PURE__*/_react["default"].createElement("div", {
48
48
  className: "".concat(prefix, "-icon"),
49
49
  ref: popperAttachEle,
50
- onClick: function onClick() {
50
+ onClick: filterDropdown ? function () {
51
51
  return setFilterDropdownVisible(true);
52
- }
52
+ } : undefined
53
53
  }, filterIcon), /*#__PURE__*/_react["default"].createElement(_popper["default"] // 弹出层的显示隐藏
54
54
  , {
55
55
  show: filterDropdownVisible // 依附的元素
@@ -39,6 +39,8 @@ var _utils = require("../../../select/utils");
39
39
 
40
40
  require("./style");
41
41
 
42
+ var _util = require("../../util");
43
+
42
44
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
43
45
 
44
46
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@@ -106,7 +108,7 @@ var InternalSelect = function InternalSelect(props) {
106
108
  setCacheSelectItem = _useState8[1]; // value 有可能是0的情况
107
109
 
108
110
 
109
- var _useState9 = (0, _react.useState)((0, _utils.resetSelectedItems)(value === undefined ? defaultValue : value, _lodash["default"].cloneDeep(data), (0, _utils.transKeys)(fieldNames, 'id'))),
111
+ var _useState9 = (0, _react.useState)((0, _utils.resetSelectedItems)(value === undefined ? defaultValue : value, (0, _util.cloneArray)(data), (0, _utils.transKeys)(fieldNames, 'id'))),
110
112
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
111
113
  selectedItems = _useState10[0],
112
114
  setSelectedItems = _useState10[1];
@@ -145,7 +147,7 @@ var InternalSelect = function InternalSelect(props) {
145
147
  resetFocusedIndex();
146
148
  }, []);
147
149
  (0, _react.useEffect)(function () {
148
- historyData.current = _lodash["default"].cloneDeep(data);
150
+ historyData.current = (0, _util.cloneArray)(data);
149
151
  }, [data]);
150
152
  (0, _react.useEffect)(function () {
151
153
  if (dropdownItems && dropdownItems.length) {
@@ -174,7 +176,7 @@ var InternalSelect = function InternalSelect(props) {
174
176
  }
175
177
  }, [value, cacheSelectItem]);
176
178
  (0, _react.useEffect)(function () {
177
- var _data = _lodash["default"].cloneDeep(data);
179
+ var _data = (0, _util.cloneArray)(data);
178
180
 
179
181
  var selectedItems = (0, _utils.resetSelectedItems)(value === undefined ? defaultValue : value, historyData.current, (0, _utils.transKeys)(fieldNames, 'id')); // setSelectedItems(selectedItems)
180
182
 
@@ -213,7 +215,7 @@ var InternalSelect = function InternalSelect(props) {
213
215
  var onClickOption = (0, _react.useCallback)(function (item, index) {
214
216
  if (!item || item[(0, _utils.transKeys)(fieldNames, 'disabled')]) return;
215
217
 
216
- var _selectedItems = _lodash["default"].cloneDeep(selectedItems);
218
+ var _selectedItems = (0, _util.cloneArray)(selectedItems);
217
219
 
218
220
  if (type === 'multiple') {
219
221
  // 获取元素索引
@@ -73,7 +73,7 @@ var BodyTable = function BodyTable(_ref) {
73
73
  setDragRowKey = _useState4[1]; // **************** 获取colgroup
74
74
 
75
75
 
76
- var _columns = _lodash["default"].cloneDeep(columns);
76
+ var _columns = (0, _util.cloneArray)(columns);
77
77
 
78
78
  var depthArray = [];
79
79
  (0, _util.setDepth)(_columns, 0, depthArray);
@@ -19,8 +19,6 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _reactResizable = require("react-resizable");
21
21
 
22
- var _lodash = _interopRequireDefault(require("lodash"));
23
-
24
22
  var _classnames = _interopRequireDefault(require("classnames"));
25
23
 
26
24
  var _context = _interopRequireDefault(require("./context"));
@@ -65,13 +63,13 @@ var HeaderTable = function HeaderTable(_ref) {
65
63
  sticky = _useContext.sticky,
66
64
  disabledData = _useContext.disabledData;
67
65
 
68
- var _useState = (0, _react.useState)(_lodash["default"].cloneDeep(propsData)),
66
+ var _useState = (0, _react.useState)((0, _util.cloneArray)(propsData)),
69
67
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
70
68
  data = _useState2[0],
71
69
  setDate = _useState2[1];
72
70
 
73
71
  (0, _react.useEffect)(function () {
74
- setDate(_lodash["default"].cloneDeep(propsData));
72
+ setDate((0, _util.cloneArray)(propsData));
75
73
  }, [propsData]);
76
74
 
77
75
  var _useState3 = (0, _react.useState)(false),
@@ -117,7 +115,7 @@ var HeaderTable = function HeaderTable(_ref) {
117
115
  if (rowSelection) {
118
116
  var _rowSelection$selecte = rowSelection.selectedRowKeys,
119
117
  selectedRowKeys = _rowSelection$selecte === void 0 ? [] : _rowSelection$selecte;
120
- var flattedData = (0, _util.flatTreeData)(_lodash["default"].cloneDeep(data));
118
+ var flattedData = (0, _util.flatTreeData)((0, _util.cloneArray)(data));
121
119
 
122
120
  var _isAllChecked = flattedData.filter(function (data) {
123
121
  return !disabledData.current.includes(data.key);
@@ -130,7 +128,7 @@ var HeaderTable = function HeaderTable(_ref) {
130
128
  }, [data, rowSelection]); // 处理列的深度
131
129
 
132
130
  (0, _react.useEffect)(function () {
133
- var _columns = _lodash["default"].cloneDeep(columns);
131
+ var _columns = (0, _util.cloneArray)(columns);
134
132
 
135
133
  var depthArray = [];
136
134
  (0, _util.setDepth)(_columns, 0, depthArray);
@@ -226,7 +224,7 @@ var HeaderTable = function HeaderTable(_ref) {
226
224
  indeterminate: !isAllChecked && rowSelection.selectedRowKeys.length > 0,
227
225
  onChange: function onChange(e) {
228
226
  if (rowSelection.onChange) {
229
- var targetItems = (0, _util.flatTreeData)(_lodash["default"].cloneDeep(data)).filter(function (data) {
227
+ var targetItems = (0, _util.flatTreeData)((0, _util.cloneArray)(data)).filter(function (data) {
230
228
  return !disabledData.current.includes(data.key);
231
229
  });
232
230
  var selectedIds = isAllChecked ? [] : targetItems.map(function (item) {
package/es/table/Row.js CHANGED
@@ -23,8 +23,6 @@ var _context = _interopRequireDefault(require("./context"));
23
23
 
24
24
  var _classnames = _interopRequireDefault(require("classnames"));
25
25
 
26
- var _lodash = _interopRequireDefault(require("lodash"));
27
-
28
26
  var _checkbox = _interopRequireDefault(require("../checkbox"));
29
27
 
30
28
  var _loading = _interopRequireDefault(require("../loading"));
@@ -92,7 +90,7 @@ var Row = function Row(_ref) {
92
90
  onDragStart = _useContext.onDragStart,
93
91
  dargInfo = _useContext.dargInfo;
94
92
 
95
- var _columns = _lodash["default"].cloneDeep(columns);
93
+ var _columns = (0, _util.cloneArray)(columns);
96
94
 
97
95
  var depthArray = [];
98
96
  (0, _util.setDepth)(_columns, 0, depthArray);
package/es/table/Table.js CHANGED
@@ -35,8 +35,6 @@ var _pagination2 = _interopRequireDefault(require("../pagination"));
35
35
 
36
36
  var _axios = _interopRequireDefault(require("axios"));
37
37
 
38
- var _lodash = _interopRequireDefault(require("lodash"));
39
-
40
38
  var _context2 = _interopRequireDefault(require("../context"));
41
39
 
42
40
  var _loading = _interopRequireDefault(require("../loading"));
@@ -142,9 +140,9 @@ var Table = function Table(_ref) {
142
140
  var _dargInfo$current = dargInfo.current,
143
141
  rowData = _dargInfo$current.rowData,
144
142
  dropRowData = _dargInfo$current.dropRowData;
145
- var restData = (0, _util.deleteRowByKey)(_lodash["default"].cloneDeep(data), dargInfo.current);
143
+ var restData = (0, _util.deleteRowByKey)((0, _util.cloneArray)(data), dargInfo.current);
146
144
 
147
- var _data = (0, _util.setRowByKey)(_lodash["default"].cloneDeep(restData), dargInfo.current);
145
+ var _data = (0, _util.setRowByKey)((0, _util.cloneArray)(restData), dargInfo.current);
148
146
 
149
147
  dargInfo.current = {};
150
148
  onDropEnd && onDropEnd(rowData, dropRowData, _data);
@@ -272,7 +270,7 @@ var Table = function Table(_ref) {
272
270
  var firstRowRef = (0, _react.useRef)(null); // 处理拉平数据
273
271
 
274
272
  (0, _react.useEffect)(function () {
275
- var _columns = _lodash["default"].cloneDeep(dataSource ? serverTableConfig.columns || [] : propsColumns);
273
+ var _columns = (0, _util.cloneArray)(dataSource ? serverTableConfig.columns || [] : propsColumns);
276
274
 
277
275
  var _flattedColumns = (0, _util.flatTreeData)(_columns);
278
276
 
@@ -302,7 +300,7 @@ var Table = function Table(_ref) {
302
300
  _columns[index] = currentItem;
303
301
  }); // 右侧
304
302
 
305
- var rightCloumns = _lodash["default"].cloneDeep(_columns.slice(rightFixedIndex || _flattedColumns.length).reverse());
303
+ var rightCloumns = (0, _util.cloneArray)(_columns.slice(rightFixedIndex || _flattedColumns.length).reverse());
306
304
 
307
305
  if (rightFixedIndex) {
308
306
  rightCloumns.forEach(function (currentItem, index) {
package/es/table/util.js CHANGED
@@ -6,12 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.getScrollBarSize = getScrollBarSize;
9
- exports.deleteRowByKey = exports.setRowByKey = exports.getMaskNums = exports.setColumnsDefaultWidth = exports.parseFixedcolumns = exports.getTotalOrEvgRowData = exports.checkNeedTotalOrEvg = exports.checkIsNumberStr = exports.getStyle = exports.getFixedDataByFixedColumn = exports.groupDataByDepth = exports.getLeafChildren = exports.setDepth = exports.flatTreeData = void 0;
9
+ exports.cloneArray = exports.deleteRowByKey = exports.setRowByKey = exports.getMaskNums = exports.setColumnsDefaultWidth = exports.parseFixedcolumns = exports.getTotalOrEvgRowData = exports.checkNeedTotalOrEvg = exports.checkIsNumberStr = exports.getStyle = exports.getFixedDataByFixedColumn = exports.groupDataByDepth = exports.getLeafChildren = exports.setDepth = exports.flatTreeData = void 0;
10
10
 
11
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
12
 
13
13
  var _lodash = _interopRequireDefault(require("lodash"));
14
14
 
15
+ var _treeUtils = require("@hi-ui/tree-utils");
16
+
15
17
  // 将树状数据拍平
16
18
  var flatTreeData = function flatTreeData() {
17
19
  var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
@@ -309,4 +311,10 @@ var deleteRowByKey = function deleteRowByKey(data, dragInfo) {
309
311
  return data;
310
312
  };
311
313
 
312
- exports.deleteRowByKey = deleteRowByKey;
314
+ exports.deleteRowByKey = deleteRowByKey;
315
+
316
+ var cloneArray = function cloneArray(arr) {
317
+ return Array.isArray(arr) ? (0, _treeUtils.cloneTree)(arr) : [];
318
+ };
319
+
320
+ exports.cloneArray = cloneArray;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/hiui",
3
- "version": "3.9.0-rc.2",
3
+ "version": "3.9.0-rc.6",
4
4
  "description": "HIUI for React",
5
5
  "scripts": {
6
6
  "test": "node_modules/.bin/standard && node_modules/.bin/stylelint --config .stylelintrc 'components/**/*.scss'",
@@ -54,6 +54,7 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "@hi-ui/core-css": "^2.0.1",
57
+ "@hi-ui/tree-utils": "^4.0.0-alpha.3",
57
58
  "@hi-ui/use-latest": "~4.0.0-alpha.2",
58
59
  "@hi-ui/use-uncontrolled-state": "~4.0.0-alpha.5",
59
60
  "async-validator": "^3.3.0",