@kdcloudjs/kdesign 1.4.1 → 1.5.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 (63) hide show
  1. package/dist/kdesign-complete.less +50 -5
  2. package/dist/kdesign.css +48 -5
  3. package/dist/kdesign.css.map +1 -1
  4. package/dist/kdesign.js +275 -134
  5. package/dist/kdesign.js.map +1 -1
  6. package/dist/kdesign.min.css +3 -3
  7. package/dist/kdesign.min.js +8 -8
  8. package/dist/kdesign.min.js.map +1 -1
  9. package/es/carousel/carousel.js +4 -4
  10. package/es/config-provider/compDefaultProps.d.ts +0 -1
  11. package/es/config-provider/compDefaultProps.js +0 -1
  12. package/es/date-picker/range-picker.d.ts +1 -0
  13. package/es/date-picker/range-picker.js +2 -0
  14. package/es/date-picker/style/index.css +6 -3
  15. package/es/date-picker/style/index.less +7 -3
  16. package/es/dropdown/style/index.css +3 -0
  17. package/es/dropdown/style/index.less +4 -0
  18. package/es/dropdown/style/token.less +1 -0
  19. package/es/input/style/index.css +8 -0
  20. package/es/input/style/index.less +4 -0
  21. package/es/input/style/mixin.less +6 -1
  22. package/es/menu/menu.d.ts +1 -0
  23. package/es/menu/menu.js +7 -1
  24. package/es/radio/radio.js +6 -1
  25. package/es/tree/style/index.css +30 -1
  26. package/es/tree/style/index.less +25 -1
  27. package/es/tree/style/token.less +3 -0
  28. package/es/tree/tree.d.ts +2 -0
  29. package/es/tree/tree.js +77 -12
  30. package/es/tree/treeHooks.d.ts +1 -1
  31. package/es/tree/treeHooks.js +3 -3
  32. package/es/tree/treeNode.d.ts +1 -0
  33. package/es/tree/treeNode.js +11 -8
  34. package/es/tree/utils/treeUtils.d.ts +4 -2
  35. package/es/tree/utils/treeUtils.js +64 -10
  36. package/lib/carousel/carousel.js +4 -4
  37. package/lib/config-provider/compDefaultProps.d.ts +0 -1
  38. package/lib/config-provider/compDefaultProps.js +0 -1
  39. package/lib/date-picker/range-picker.d.ts +1 -0
  40. package/lib/date-picker/range-picker.js +2 -0
  41. package/lib/date-picker/style/index.css +6 -3
  42. package/lib/date-picker/style/index.less +7 -3
  43. package/lib/dropdown/style/index.css +3 -0
  44. package/lib/dropdown/style/index.less +4 -0
  45. package/lib/dropdown/style/token.less +1 -0
  46. package/lib/input/style/index.css +8 -0
  47. package/lib/input/style/index.less +4 -0
  48. package/lib/input/style/mixin.less +6 -1
  49. package/lib/menu/menu.d.ts +1 -0
  50. package/lib/menu/menu.js +7 -1
  51. package/lib/radio/radio.js +7 -1
  52. package/lib/tree/style/index.css +30 -1
  53. package/lib/tree/style/index.less +25 -1
  54. package/lib/tree/style/token.less +3 -0
  55. package/lib/tree/tree.d.ts +2 -0
  56. package/lib/tree/tree.js +79 -11
  57. package/lib/tree/treeHooks.d.ts +1 -1
  58. package/lib/tree/treeHooks.js +3 -3
  59. package/lib/tree/treeNode.d.ts +1 -0
  60. package/lib/tree/treeNode.js +11 -8
  61. package/lib/tree/utils/treeUtils.d.ts +4 -2
  62. package/lib/tree/utils/treeUtils.js +71 -13
  63. package/package.json +1 -1
@@ -91,7 +91,7 @@ var InternalCarousel = function InternalCarousel(props, ref) {
91
91
  setCurrentIndex(index);
92
92
  setNeedAnimation(needAnimation);
93
93
  }
94
- }, [isFadeEffect, beforeChange, currentIndex, children.length]);
94
+ }, [isFadeEffect, beforeChange, currentIndex, children === null || children === void 0 ? void 0 : children.length]);
95
95
  var next = React.useCallback(function () {
96
96
  jumpTo(currentIndex + 1, true);
97
97
  }, [currentIndex, jumpTo]);
@@ -181,7 +181,7 @@ var InternalCarousel = function InternalCarousel(props, ref) {
181
181
  setNeedAnimation(true);
182
182
  }, [beforeChange, currentIndex]);
183
183
  var handleTransitionEnd = React.useCallback(function () {
184
- if (!autoplay) return;
184
+ if (!autoplay || !(children === null || children === void 0 ? void 0 : children.length)) return;
185
185
  var childrenL = children.length;
186
186
  var newCurrentIndex = currentIndex;
187
187
 
@@ -198,7 +198,7 @@ var InternalCarousel = function InternalCarousel(props, ref) {
198
198
  afterChange && afterChange(currentIndex);
199
199
  setCurrentIndex(newCurrentIndex);
200
200
  isScrollxEffect && setNeedAnimation(false);
201
- }, [currentIndex, children.length, afterChange, isScrollxEffect, autoplay]);
201
+ }, [currentIndex, children === null || children === void 0 ? void 0 : children.length, afterChange, isScrollxEffect, autoplay]);
202
202
  var handleMouseEnter = React.useCallback(function () {
203
203
  autoplayRef.current && clearTimeout(autoplayRef.current);
204
204
  }, []);
@@ -246,7 +246,7 @@ var InternalCarousel = function InternalCarousel(props, ref) {
246
246
  style: style,
247
247
  onMouseEnter: handleMouseEnter,
248
248
  onMouseLeave: handleMouseLeave
249
- }, renderDisplayList(), showDot() && /*#__PURE__*/React.createElement(Slidebar, {
249
+ }, (children === null || children === void 0 ? void 0 : children.length) && renderDisplayList(), (children === null || children === void 0 ? void 0 : children.length) && showDot() && /*#__PURE__*/React.createElement(Slidebar, {
250
250
  number: children.length,
251
251
  currentIndex: currentIndex,
252
252
  dotsClassName: dots,
@@ -210,7 +210,6 @@ declare const compDefaultProps: {
210
210
  strokeWidth: number;
211
211
  };
212
212
  Radio: {
213
- checked: boolean;
214
213
  defaultChecked: boolean;
215
214
  disabled: boolean;
216
215
  };
@@ -217,7 +217,6 @@ var compDefaultProps = {
217
217
  strokeWidth: 4
218
218
  },
219
219
  Radio: {
220
- checked: false,
221
220
  defaultChecked: false,
222
221
  disabled: false
223
222
  },
@@ -17,6 +17,7 @@ export interface RangePickerSharedProps {
17
17
  ranges?: Record<string, DateType[] | (() => DateType[])>;
18
18
  separator?: React.ReactNode;
19
19
  allowEmpty?: [boolean, boolean];
20
+ suffixIcon?: React.ReactNode;
20
21
  mode?: [PanelMode, PanelMode];
21
22
  onChange?: (values: RangeValue, formatString: [string | null, string | null]) => void;
22
23
  onCalendarChange?: (values: RangeValue, formatString: [string | null, string | null], info: RangeInfo) => void;
@@ -104,6 +104,7 @@ function DatePicker(props) {
104
104
  minuteStep = _datePickerProps$minu === void 0 ? 1 : _datePickerProps$minu,
105
105
  _datePickerProps$seco = datePickerProps.secondStep,
106
106
  secondStep = _datePickerProps$seco === void 0 ? 1 : _datePickerProps$seco,
107
+ suffixIcon = datePickerProps.suffixIcon,
107
108
  renderExtraFooter = datePickerProps.renderExtraFooter,
108
109
  disabledHours = datePickerProps.disabledHours,
109
110
  disabledMinutes = datePickerProps.disabledMinutes,
@@ -675,6 +676,7 @@ function DatePicker(props) {
675
676
  startOpen: startOpen,
676
677
  endOpen: endOpen,
677
678
  needConfirmButton: needConfirmButton,
679
+ suffixIcon: suffixIcon,
678
680
  format: _format,
679
681
  open: mergedOpen,
680
682
  readOnly: inputReadOnly,
@@ -128,7 +128,7 @@
128
128
  right: calc(var(--kd-c-date-picker-small-font-size, var(--kd-g-font-size-small, 12px)) + 1px);
129
129
  }
130
130
  .kd-date-picker-small.kd-date-picker-range .kd-date-picker-clear {
131
- right: calc(var(--kd-c-date-picker-small-font-size, var(--kd-g-font-size-small, 12px)) + 9px);
131
+ right: calc(var(--kd-c-date-picker-small-font-size, var(--kd-g-font-size-small, 12px)) + 12px);
132
132
  }
133
133
  .kd-date-picker-large {
134
134
  height: var(--kd-c-date-picker-large-sizing-height, 36px);
@@ -158,7 +158,7 @@
158
158
  right: calc(var(--kd-c-date-picker-middle-font-size, var(--kd-g-font-size-middle, 14px)) + 1px);
159
159
  }
160
160
  .kd-date-picker-middle.kd-date-picker-range .kd-date-picker-clear {
161
- right: calc(var(--kd-c-date-picker-middle-font-size, var(--kd-g-font-size-middle, 14px)) + 9px);
161
+ right: calc(var(--kd-c-date-picker-middle-font-size, var(--kd-g-font-size-middle, 14px)) + 11px);
162
162
  }
163
163
  .kd-date-picker-borderless {
164
164
  border: 0;
@@ -276,7 +276,7 @@
276
276
  -ms-flex-item-align: center;
277
277
  align-self: center;
278
278
  margin-left: var(--kd-c-date-picker-suffix-spacing-margin-left, 10px);
279
- color: var(--kd-c-date-picker-icon-color, var(--kd-g-color-disabled, #b2b2b2));
279
+ color: var(--kd-c-date-picker-input-color, var(--kd-g-color-text-secondary, #666));
280
280
  line-height: 1;
281
281
  pointer-events: none;
282
282
  }
@@ -286,6 +286,9 @@
286
286
  .kd-date-picker:hover .kd-date-picker-clear {
287
287
  opacity: 1;
288
288
  }
289
+ .kd-date-picker:hover .kd-date-picker-suffix {
290
+ color: var(--kd-c-date-picker-color-background-checked, var(--kd-g-color-theme, #5582f3));
291
+ }
289
292
  .kd-date-picker-clear {
290
293
  position: absolute;
291
294
  top: 50%;
@@ -27,7 +27,7 @@
27
27
  }
28
28
 
29
29
  &.@{datePicker-prefix-cls}-range .@{datePicker-prefix-cls}-clear {
30
- right: calc(@date-small-font-size + 9px);
30
+ right: calc(@date-small-font-size + 12px);
31
31
  }
32
32
  }
33
33
 
@@ -59,7 +59,7 @@
59
59
  }
60
60
 
61
61
  &.@{datePicker-prefix-cls}-range .@{datePicker-prefix-cls}-clear {
62
- right: calc(@date-middle-font-size + 9px);
62
+ right: calc(@date-middle-font-size + 11px);
63
63
  }
64
64
  }
65
65
 
@@ -131,7 +131,7 @@
131
131
  &-suffix {
132
132
  align-self: center;
133
133
  margin-left: @date-suffix-spacing-margin-left;
134
- color: @date-icon-color;
134
+ color: @date-input-color;
135
135
  line-height: 1;
136
136
  pointer-events: none;
137
137
 
@@ -144,6 +144,10 @@
144
144
  .@{datePicker-prefix-cls}-clear {
145
145
  opacity: 1;
146
146
  }
147
+
148
+ .@{datePicker-prefix-cls}-suffix {
149
+ color: @date-color-background-checked;
150
+ }
147
151
  }
148
152
 
149
153
  &-clear {
@@ -229,6 +229,9 @@
229
229
  .kd-dropdown-menu-item:not(.disabled):hover {
230
230
  background-color: var(--kd-c-dropdown-item-color-background-hover, var(--kd-g-color-hover, #f5f5f5));
231
231
  }
232
+ .kd-dropdown-menu-item:not(.disabled):hover > a {
233
+ color: var(--kd-c-dropdown-item-color-text-hover, var(--kd-g-color-text-primary, #212121));
234
+ }
232
235
  .kd-dropdown-menu-item:not(.disabled):active,
233
236
  .kd-dropdown-menu-item:not(.disabled).selected {
234
237
  color: var(--kd-g-color-theme, #5582f3);
@@ -72,6 +72,10 @@
72
72
  transition: background-color @duration-promptly;
73
73
  &:not(.disabled):hover {
74
74
  background-color: @dropdown-item-hover-bg-color;
75
+
76
+ > a {
77
+ color: @dropdown-item-hover-color-text;
78
+ }
75
79
  }
76
80
 
77
81
  &:not(.disabled):active,
@@ -8,6 +8,7 @@
8
8
  @dropdown-item-color-disabled: var(~'@{dropdown-custom-prefix}-item-color-text-disabled', @color-disabled);
9
9
  @dropdown-item-color-text-danger: var(~'@{dropdown-custom-prefix}-item-color-text-danger', @color-error);
10
10
  @dropdown-item-color-background-danger-hover: var(~'@{dropdown-custom-prefix}-item-color-background-danger-hover', @color-error);
11
+ @dropdown-item-hover-color-text: var(~'@{dropdown-custom-prefix}-item-color-text-hover', @color-text-primary);
11
12
  @dropdown-divided-color-bg: var(~'@{dropdown-custom-prefix}-divided-color-background', @color-border-weak);
12
13
  @dropdown-color: var(~'@{dropdown-custom-prefix}-menu-item-color-text', @color-text-primary);
13
14
 
@@ -356,6 +356,10 @@ textarea {
356
356
  .kd-input-wrapper-focused {
357
357
  border-color: var(--kd-c-input-color-border-focused, var(--kd-g-color-theme, #5582f3));
358
358
  }
359
+ .kd-input-wrapper-focused .kd-input-clear-icon,
360
+ .kd-input-wrapper-focused .kd-input-textarea-clear-icon {
361
+ color: var(--kd-c-input-color-border-focused, var(--kd-g-color-theme, #5582f3));
362
+ }
359
363
  .kd-input-wrapper-textarea {
360
364
  width: 100%;
361
365
  min-width: 0;
@@ -404,6 +408,10 @@ textarea {
404
408
  .kd-input-clear-icon,
405
409
  .kd-input-textarea-clear-icon {
406
410
  cursor: pointer;
411
+ color: var(--kd-c-input-color-border, #999);
412
+ }
413
+ .kd-input-clear-icon:hover,
414
+ .kd-input-textarea-clear-icon:hover {
407
415
  color: var(--kd-c-input-color-border-focused, var(--kd-g-color-theme, #5582f3));
408
416
  }
409
417
  .kd-input-clear-icon i,
@@ -121,6 +121,10 @@ textarea {
121
121
 
122
122
  &-focused {
123
123
  border-color: @input-border-color-focused;
124
+
125
+ .@{input-prefix-cls}-clear-icon, .@{input-prefix-cls}-textarea-clear-icon {
126
+ color: @input-border-color-focused;
127
+ }
124
128
  }
125
129
  }
126
130
  &-wrapper-textarea {
@@ -47,7 +47,12 @@
47
47
 
48
48
  .input-clear-icon() {
49
49
  cursor: pointer;
50
- color: @input-border-color-focused;
50
+ color: @input-color-border;
51
+
52
+ &:hover {
53
+ color: @input-border-color-focused;
54
+ }
55
+
51
56
  i {
52
57
  vertical-align: middle;
53
58
  font-size: 12px !important;
package/es/menu/menu.d.ts CHANGED
@@ -15,6 +15,7 @@ export interface MenuProps extends React.HTMLAttributes<HTMLElement> {
15
15
  additionalTools?: React.ReactNode;
16
16
  onOpenChange?: SubMenuChangeEventHandler;
17
17
  theme?: MenuTheme;
18
+ accordion?: boolean;
18
19
  }
19
20
  interface MenuType extends React.FC<MenuProps> {
20
21
  Item: typeof MenuItem;
package/es/menu/menu.js CHANGED
@@ -60,10 +60,12 @@ var Menu = function Menu(props) {
60
60
  className = _b.className,
61
61
  theme = _b.theme,
62
62
  collapsed = _b.collapsed,
63
- restProps = __rest(_b, ["prefixCls", "mode", "inlineIndent", "forceSubMenuRender", "additionalTools", "onClick", "onOpenChange", "children", "className", "theme", "collapsed"]);
63
+ accordion = _b.accordion,
64
+ restProps = __rest(_b, ["prefixCls", "mode", "inlineIndent", "forceSubMenuRender", "additionalTools", "onClick", "onOpenChange", "children", "className", "theme", "collapsed", "accordion"]);
64
65
 
65
66
  var prefixCls = getPrefixCls(pkgPrefixCls, 'menu', customPrefixcls);
66
67
  devWarning(['inline', 'vertical', undefined].indexOf(mode) === -1, 'menu', "cannot found menu mode '".concat(mode, "'"));
68
+ devWarning(mode !== 'inline' && accordion !== undefined, 'menu', "'accordion' is valid only in mode='inline'");
67
69
 
68
70
  var _React$useState = React.useState(''),
69
71
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -137,6 +139,10 @@ var Menu = function Menu(props) {
137
139
  if (clean) {
138
140
  openSubMenuSet.clear();
139
141
  } else {
142
+ if (mode === 'inline' && accordion) {
143
+ openSubMenuSet.clear();
144
+ }
145
+
140
146
  if (isAdd) {
141
147
  openSubMenuSet.add(openKey);
142
148
  } else {
package/es/radio/radio.js CHANGED
@@ -18,6 +18,7 @@ var __rest = this && this.__rest || function (s, e) {
18
18
 
19
19
  import React, { useEffect } from 'react';
20
20
  import classNames from 'classnames';
21
+ import isBoolean from 'lodash/isBoolean';
21
22
  import ConfigContext from '../config-provider/ConfigContext';
22
23
  import { getCompProps } from '../_utils';
23
24
  import RadioGroupContext from './context';
@@ -46,13 +47,17 @@ var InternalRadio = function InternalRadio(props, ref) {
46
47
  restProps = __rest(_a, ["style", "checked", "children", "className", "radioType", "defaultChecked", "prefixCls"]); // 属性需要合并一遍用户定义的默认属性
47
48
 
48
49
 
50
+ var getChecked = function getChecked() {
51
+ return isBoolean(checked) ? checked : defaultChecked;
52
+ };
53
+
49
54
  var getPrefix = function getPrefix(radioType) {
50
55
  return "radio".concat(radioType === 'square' ? "-".concat(radioType) : '');
51
56
  };
52
57
 
53
58
  var radioPrefixCls = getPrefixCls === null || getPrefixCls === void 0 ? void 0 : getPrefixCls(prefixCls, getPrefix(radioType), customPrefixcls); // 样式前缀
54
59
 
55
- var _React$useState = React.useState(checked || defaultChecked),
60
+ var _React$useState = React.useState(getChecked()),
56
61
  _React$useState2 = _slicedToArray(_React$useState, 2),
57
62
  isChecked = _React$useState2[0],
58
63
  setIsChecked = _React$useState2[1];
@@ -221,6 +221,19 @@
221
221
  .kd-tree-node-title-disabled {
222
222
  color: var(--kd-c-tree-node-color-disabled, var(--kd-g-color-disabled, #b2b2b2));
223
223
  }
224
+ .kd-tree-node-title-wrap {
225
+ -webkit-box-flex: 1;
226
+ -ms-flex: 1;
227
+ flex: 1;
228
+ position: relative;
229
+ display: -webkit-box;
230
+ display: -ms-flexbox;
231
+ display: flex;
232
+ -webkit-box-align: center;
233
+ -ms-flex-align: center;
234
+ align-items: center;
235
+ height: 100%;
236
+ }
224
237
  .kd-tree-node-title {
225
238
  white-space: nowrap;
226
239
  margin-left: 6px;
@@ -248,12 +261,28 @@
248
261
  width: 100%;
249
262
  height: 100%;
250
263
  }
264
+ .kd-tree-node-drag-over {
265
+ background-color: var(--kd-c-tree-node-drag-over-color-background, #E3EBFF);
266
+ border: 2px solid var(--kd-c-tree-node-drag-over-color-border, #5582f3);
267
+ }
251
268
  .kd-tree-node-drag-line {
252
269
  position: absolute;
253
270
  left: 0;
254
271
  top: 100%;
255
272
  width: 100%;
256
- border-top: 1px solid #fc8555;
273
+ border-top: 2px solid var(--kd-c-tree-node-drag-line-color-background, #276FF5);
274
+ }
275
+ .kd-tree-node-drag-line::before {
276
+ content: '';
277
+ width: 4px;
278
+ height: 4px;
279
+ background-color: #fff;
280
+ border-radius: 50%;
281
+ border: 2px solid var(--kd-c-tree-node-drag-line-color-background, #276FF5);
282
+ position: absolute;
283
+ top: -1px;
284
+ -webkit-transform: translateY(-50%);
285
+ transform: translateY(-50%);
257
286
  }
258
287
  .kd-tree-node-leaf-icon {
259
288
  height: var(--kd-c-tree-node-icon-sizing-height, 20px);
@@ -93,6 +93,13 @@
93
93
  &-title-disabled {
94
94
  color: @tree-node-disabled-color;
95
95
  }
96
+ &-title-wrap {
97
+ flex: 1;
98
+ position: relative;
99
+ display: flex;
100
+ align-items: center;
101
+ height: 100%;
102
+ }
96
103
  &-title {
97
104
  white-space: nowrap;
98
105
  margin-left: 6px;
@@ -118,12 +125,29 @@
118
125
  height: 100%;
119
126
  }
120
127
 
128
+ &-drag-over {
129
+ background-color: @tree-node-drag-over-color-background;
130
+ border: 2px solid @tree-node-drag-over-border-color;
131
+ }
132
+
121
133
  &-drag-line {
122
134
  position: absolute;
123
135
  left: 0;
124
136
  top: 100%;
125
137
  width: 100%;
126
- border-top: 1px solid #fc8555;
138
+ border-top: 2px solid @tree-node-drag-line-border-color;
139
+
140
+ &::before {
141
+ content: '';
142
+ width: 4px;
143
+ height: 4px;
144
+ background-color: #fff;
145
+ border-radius: 50%;
146
+ border: 2px solid @tree-node-drag-line-border-color;
147
+ position: absolute;
148
+ top: -1px;
149
+ transform: translateY(-50%);
150
+ }
127
151
  }
128
152
  &-leaf-icon {
129
153
  height: @tree-node-icon-height;
@@ -11,6 +11,9 @@
11
11
  @tree-node-checked-text-color: var(~'@{tree-prefix}-node-color-text-checked', @color-theme);
12
12
  @tree-node-hover-bg-color: var(~'@{tree-prefix}-node-color-backgroung-hover', @color-hover);
13
13
  @tree-node-icon-color-text: var(~'@{tree-prefix}-node-icon-color-text', #666666);
14
+ @tree-node-drag-over-border-color: var(~'@{tree-prefix}-node-drag-over-color-border', #5582f3);
15
+ @tree-node-drag-over-color-background: var(~'@{tree-prefix}-node-drag-over-color-background', #E3EBFF);
16
+ @tree-node-drag-line-border-color: var(~'@{tree-prefix}-node-drag-line-color-background', #276FF5);
14
17
 
15
18
  // sizing
16
19
  @tree-expand-icon-height: var(~'@{tree-prefix}-expand-icon-sizing-height', 22px);
package/es/tree/tree.d.ts CHANGED
@@ -12,6 +12,8 @@ export interface TreeProps {
12
12
  disabled?: boolean;
13
13
  draggable?: boolean;
14
14
  expandedKeys?: string[];
15
+ filterValue?: string;
16
+ filterTreeNode?: () => boolean;
15
17
  height?: number;
16
18
  icon?: ReactNode | ((props: any) => ReactNode);
17
19
  switcherIcon?: ReactNode | ((props: any) => ReactNode) | [ReactNode | ((props: any) => ReactNode)];
package/es/tree/tree.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import _extends from "@babel/runtime-corejs3/helpers/extends";
2
+ import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
2
3
  import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
3
4
  import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
5
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
4
6
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
5
7
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
6
8
  import React, { useContext, useCallback, useEffect } from 'react';
@@ -8,7 +10,7 @@ import classNames from 'classnames';
8
10
  import ConfigContext from '../config-provider/ConfigContext';
9
11
  import { getCompProps } from '../_utils';
10
12
  import TreeNode from './treeNode';
11
- import { getChecked, getHalfChecked, addKeys, flattenAll, delKey, getFilterData, getSpreadAttrData, getDataCheckededState, getDataCheckededStateStrictly, getMaxLevel, getAllChildKeys, getPos, getSelected } from './utils/treeUtils';
13
+ import { getChecked, getHalfChecked, addKeys, flattenAll, delKey, getFilterData, getSpreadAttrData, getDataCheckededState, getDataCheckededStateStrictly, getMaxLevel, getAllChildKeys, getPos, getSelected, calcDropPosition } from './utils/treeUtils';
12
14
  import { useChecked, useExpand, usePlantomHeightEffect, useViewportHeight, useVisibleDataMemo, useScrollToKey, useSelect } from './treeHooks';
13
15
  import isBoolean from 'lodash/isBoolean';
14
16
  var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
@@ -58,7 +60,9 @@ var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
58
60
  return '';
59
61
  } : _TreeProps$setTreeNod2,
60
62
  innerEstimatedItemSize = TreeProps.estimatedItemSize,
61
- style = TreeProps.style;
63
+ style = TreeProps.style,
64
+ filterTreeNode = TreeProps.filterTreeNode,
65
+ filterValue = TreeProps.filterValue;
62
66
  var treePrefixCls = getPrefixCls(prefixCls, 'tree', customPrefixcls); // 树样式前缀
63
67
 
64
68
  var treeNodePrefixCls = getPrefixCls(prefixCls, 'tree-node', customPrefixcls); // 树节点样式前缀
@@ -102,22 +106,34 @@ var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
102
106
  var scrollRef = ref || rootRef;
103
107
  var treeNodeRef = React.useRef(null);
104
108
  var dragNodeRef = React.useRef(null);
109
+ var delayedDragEnterRef = React.useRef(null);
105
110
 
106
111
  var _React$useState5 = React.useState(true),
107
112
  _React$useState6 = _slicedToArray(_React$useState5, 2),
108
113
  isInit = _React$useState6[0],
109
114
  setIsInit = _React$useState6[1];
110
115
 
111
- var _useExpand = useExpand(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit),
112
- _useExpand2 = _slicedToArray(_useExpand, 1),
113
- expandedKeys = _useExpand2[0];
116
+ var _React$useState7 = React.useState(null),
117
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
118
+ dropPosition = _React$useState8[0],
119
+ setDropPosition = _React$useState8[1];
120
+
121
+ var _React$useState9 = React.useState(null),
122
+ _React$useState10 = _slicedToArray(_React$useState9, 2),
123
+ dragOverNodeKey = _React$useState10[0],
124
+ setDragOverNodeKey = _React$useState10[1];
125
+
126
+ var _useExpand = useExpand(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit, filterTreeNode, filterValue),
127
+ _useExpand2 = _slicedToArray(_useExpand, 2),
128
+ expandedKeys = _useExpand2[0],
129
+ setExpandedKeys = _useExpand2[1];
114
130
 
115
131
  var spreadAttrData = React.useMemo(function () {
116
132
  return getSpreadAttrData(flattenAllData, expandedKeys);
117
133
  }, [flattenAllData, expandedKeys]);
118
134
  var filterData = React.useMemo(function () {
119
- return getFilterData(spreadAttrData);
120
- }, [spreadAttrData]);
135
+ return getFilterData(spreadAttrData, filterTreeNode, filterValue);
136
+ }, [spreadAttrData, filterTreeNode, filterValue]);
121
137
 
122
138
  var _useViewportHeight = useViewportHeight(height, listRef),
123
139
  _useViewportHeight2 = _slicedToArray(_useViewportHeight, 1),
@@ -176,7 +192,15 @@ var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
176
192
  node: node
177
193
  });
178
194
  }, [onDragStart]);
179
- var handleDragOver = React.useCallback(function (event, node) {
195
+ var handleDragOver = React.useCallback(function (event, node, dropTarget) {
196
+ var dropPos = calcDropPosition(event, dropTarget);
197
+ setDropPosition(dropPos);
198
+ var dragNode = getDragNode();
199
+
200
+ if (dragNode.key === node.key) {
201
+ setDropPosition(null);
202
+ }
203
+
180
204
  onDragOver && onDragOver({
181
205
  event: event,
182
206
  node: node
@@ -188,13 +212,52 @@ var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
188
212
  node: node
189
213
  });
190
214
  }, [onDragLeave]);
191
- var handleDragEnter = React.useCallback(function (event, node) {
215
+ var handleDragEnter = React.useCallback(function (event, node, dropTarget) {
216
+ var key = node.key,
217
+ pos = node.pos;
218
+ var dragNode = getDragNode();
219
+
220
+ if (!dragNode) {
221
+ return;
222
+ }
223
+
224
+ if (!delayedDragEnterRef.current) {
225
+ delayedDragEnterRef.current = {};
226
+ }
227
+
228
+ _Object$keys(delayedDragEnterRef.current).forEach(function (key) {
229
+ clearTimeout(delayedDragEnterRef.current[key]);
230
+ });
231
+
232
+ if ((dragNode === null || dragNode === void 0 ? void 0 : dragNode.key) !== key) {
233
+ var dragPos = calcDropPosition(event, dropTarget);
234
+ setDragOverNodeKey(key);
235
+ setDropPosition(dragPos);
236
+ delayedDragEnterRef.current[pos] = setTimeout(function () {
237
+ var newExpandedKeys = _toConsumableArray(expandedKeys);
238
+
239
+ if (!node.expand) {
240
+ newExpandedKeys = addKeys(expandedKeys, [key]);
241
+ }
242
+
243
+ if (!('expandedKeys' in TreeProps)) {
244
+ setExpandedKeys(newExpandedKeys);
245
+ }
246
+
247
+ onExpand === null || onExpand === void 0 ? void 0 : onExpand(newExpandedKeys, {
248
+ node: node,
249
+ expanded: true
250
+ });
251
+ }, 800);
252
+ }
253
+
192
254
  onDragEnter && onDragEnter({
193
255
  event: event,
194
256
  node: node
195
257
  });
196
- }, [onDragEnter]);
258
+ }, [TreeProps, expandedKeys, onDragEnter, onExpand, setExpandedKeys]);
197
259
  var handleDragEnd = React.useCallback(function (event, node) {
260
+ setDragOverNodeKey('');
198
261
  onDragEnd && onDragEnd({
199
262
  event: event,
200
263
  node: node
@@ -211,9 +274,10 @@ var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
211
274
  event: event,
212
275
  node: node,
213
276
  dragNode: dragNode,
214
- keys: keys
277
+ dragNodesKeys: keys,
278
+ dropPosition: dropPosition
215
279
  });
216
- }, [onDrop, flattenAllData]);
280
+ }, [flattenAllData, onDrop, dropPosition]);
217
281
  var handleSelect = React.useCallback(function (event, node, key) {
218
282
  var checked = getChecked(checkedKeys, key);
219
283
  onSelect && onSelect([key], {
@@ -300,6 +364,7 @@ var InternalTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
300
364
  item.style = setTreeNodeStyle(_extends({}, item));
301
365
  item.getDragNode = getDragNode;
302
366
  item.setDragNode = setDragNode;
367
+ item.dragOver = dragOverNodeKey === item.key && dropPosition === 0;
303
368
  return /*#__PURE__*/React.createElement(TreeNode, _extends({}, item, {
304
369
  key: item.key,
305
370
  ref: treeNodeRef
@@ -4,6 +4,6 @@ export declare const useViewportHeight: (height: number, listRef: React.RefObjec
4
4
  export declare const useVisibleDataMemo: (virtual: boolean, filterData: TreeNodeData[], viewportHeight: number, estimatedItemSize: number, start: number) => TreeNodeData[][];
5
5
  export declare const usePlantomHeightEffect: (plantomRef: React.RefObject<HTMLElement>, filterData: TreeNodeData[], estimatedItemSize: number) => void;
6
6
  export declare const useChecked: (checkStrictly: boolean, checkedKeysProps: string[], defaultCheckedKeys: string[], flattenAllData: any[], maxLevel: number, checkable: boolean) => readonly [string[], string[], React.Dispatch<React.SetStateAction<string[]>>, React.Dispatch<React.SetStateAction<string[]>>];
7
- export declare const useExpand: (flattenAllData: any[], expandedKeysProps: string[], defaultExpandedKeys: string[], defaultExpandAll: boolean, defaultExpandRoot: boolean, defaultExpandParent: boolean, scrollKey: string, isInit: boolean) => readonly [string[], React.Dispatch<React.SetStateAction<string[]>>];
7
+ export declare const useExpand: (flattenAllData: any[], expandedKeysProps: string[], defaultExpandedKeys: string[], defaultExpandAll: boolean, defaultExpandRoot: boolean, defaultExpandParent: boolean, scrollKey: string, isInit: boolean, filterTreeNode: FunctionConstructor, filterValue: string) => readonly [string[], React.Dispatch<React.SetStateAction<string[]>>];
8
8
  export declare const useScrollToKey: (scrollKey: string, index: number, estimatedItemSize: number, scrollRef: any, viewportHeight: number, treeNodePrefixCls: string) => void;
9
9
  export declare const useSelect: (selectedKeysProps: string[], defaultSelectedKeys: string[]) => readonly [string[], React.Dispatch<React.SetStateAction<string[]>>];
@@ -64,7 +64,7 @@ export var useChecked = function useChecked(checkStrictly, checkedKeysProps, def
64
64
  }, [nextHalfCheckedKeys]);
65
65
  return [checkedKeys, halfCheckedKeys, setCheckedKeys, setHalfCheckedKeys];
66
66
  };
67
- export var useExpand = function useExpand(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit) {
67
+ export var useExpand = function useExpand(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit, filterTreeNode, filterValue) {
68
68
  var expandScrollkeys = [];
69
69
 
70
70
  if (scrollKey) {
@@ -73,8 +73,8 @@ export var useExpand = function useExpand(flattenAllData, expandedKeysProps, def
73
73
  }
74
74
 
75
75
  var initialExpandedKeys = React.useMemo(function () {
76
- return getInitExpandedKeys(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, expandScrollkeys);
77
- }, [flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey]);
76
+ return getInitExpandedKeys(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, expandScrollkeys, filterTreeNode, filterValue);
77
+ }, [flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, filterTreeNode, filterValue]);
78
78
  var newExpandedKeys = React.useMemo(function () {
79
79
  return getExpandedKeys(expandedKeysProps, expandScrollkeys);
80
80
  }, [expandedKeysProps]);
@@ -24,6 +24,7 @@ export interface TreeNodeProps {
24
24
  checked?: boolean;
25
25
  pos?: string;
26
26
  estimatedItemSize?: number;
27
+ dragOver?: boolean;
27
28
  onCheck?: (key: string, value: boolean, node: React.ReactNode, event: React.MouseEvent<MouseEvent>, pos: string) => void;
28
29
  onSelect?: (event: React.MouseEvent<MouseEvent>, node: React.ReactNode, key: string) => void;
29
30
  onExpand?: (value: boolean, node: React.ReactNode) => void;