@kdcloudjs/kdesign 1.4.0 → 1.5.1
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/CHANGELOG.md +41 -0
- package/dist/kdesign-complete.less +50 -5
- package/dist/kdesign.css +48 -5
- package/dist/kdesign.css.map +1 -1
- package/dist/kdesign.js +363 -171
- package/dist/kdesign.js.map +1 -1
- package/dist/kdesign.min.css +3 -3
- package/dist/kdesign.min.js +8 -8
- package/dist/kdesign.min.js.map +1 -1
- package/es/carousel/carousel.js +4 -4
- package/es/config-provider/compDefaultProps.d.ts +0 -1
- package/es/config-provider/compDefaultProps.js +0 -1
- package/es/date-picker/range-picker.d.ts +1 -0
- package/es/date-picker/range-picker.js +2 -0
- package/es/date-picker/style/index.css +6 -3
- package/es/date-picker/style/index.less +7 -3
- package/es/dropdown/style/index.css +3 -0
- package/es/dropdown/style/index.less +4 -0
- package/es/dropdown/style/token.less +1 -0
- package/es/input/style/index.css +8 -0
- package/es/input/style/index.less +4 -0
- package/es/input/style/mixin.less +6 -1
- package/es/menu/menu.d.ts +1 -0
- package/es/menu/menu.js +11 -10
- package/es/radio/radio.js +6 -1
- package/es/table/table.js +8 -2
- package/es/tree/style/index.css +30 -1
- package/es/tree/style/index.less +25 -1
- package/es/tree/style/token.less +3 -0
- package/es/tree/tree.d.ts +2 -0
- package/es/tree/tree.js +77 -12
- package/es/tree/treeHooks.d.ts +1 -1
- package/es/tree/treeHooks.js +3 -3
- package/es/tree/treeNode.d.ts +1 -0
- package/es/tree/treeNode.js +11 -8
- package/es/tree/utils/treeUtils.d.ts +4 -2
- package/es/tree/utils/treeUtils.js +64 -10
- package/lib/carousel/carousel.js +4 -4
- package/lib/config-provider/compDefaultProps.d.ts +0 -1
- package/lib/config-provider/compDefaultProps.js +0 -1
- package/lib/date-picker/range-picker.d.ts +1 -0
- package/lib/date-picker/range-picker.js +2 -0
- package/lib/date-picker/style/index.css +6 -3
- package/lib/date-picker/style/index.less +7 -3
- package/lib/dropdown/style/index.css +3 -0
- package/lib/dropdown/style/index.less +4 -0
- package/lib/dropdown/style/token.less +1 -0
- package/lib/input/style/index.css +8 -0
- package/lib/input/style/index.less +4 -0
- package/lib/input/style/mixin.less +6 -1
- package/lib/menu/menu.d.ts +1 -0
- package/lib/menu/menu.js +11 -10
- package/lib/radio/radio.js +7 -1
- package/lib/table/table.js +8 -2
- package/lib/tree/style/index.css +30 -1
- package/lib/tree/style/index.less +25 -1
- package/lib/tree/style/token.less +3 -0
- package/lib/tree/tree.d.ts +2 -0
- package/lib/tree/tree.js +79 -11
- package/lib/tree/treeHooks.d.ts +1 -1
- package/lib/tree/treeHooks.js +3 -3
- package/lib/tree/treeNode.d.ts +1 -0
- package/lib/tree/treeNode.js +11 -8
- package/lib/tree/utils/treeUtils.d.ts +4 -2
- package/lib/tree/utils/treeUtils.js +71 -13
- package/package.json +2 -2
package/es/carousel/carousel.js
CHANGED
|
@@ -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,
|
|
@@ -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)) +
|
|
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)) +
|
|
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-
|
|
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 +
|
|
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 +
|
|
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-
|
|
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);
|
|
@@ -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
|
|
package/es/input/style/index.css
CHANGED
|
@@ -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,
|
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
|
-
|
|
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),
|
|
@@ -98,17 +100,12 @@ var Menu = function Menu(props) {
|
|
|
98
100
|
useEffect(function () {
|
|
99
101
|
if (userOpenKeys !== undefined && Array.isArray(userOpenKeys)) {
|
|
100
102
|
setOpenKeys(userOpenKeys);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (userSelectedKey !== undefined && userOpenKeys !== undefined && Array.isArray(userOpenKeys)) {
|
|
105
|
-
setTimeout(function () {
|
|
106
|
-
userOpenKeys.forEach(function (d) {
|
|
107
|
-
openSubMenuSet.add(d);
|
|
108
|
-
});
|
|
103
|
+
openSubMenuSet.clear();
|
|
104
|
+
userOpenKeys.forEach(function (d) {
|
|
105
|
+
openSubMenuSet.add(d);
|
|
109
106
|
});
|
|
110
107
|
}
|
|
111
|
-
}, []);
|
|
108
|
+
}, [userOpenKeys]);
|
|
112
109
|
|
|
113
110
|
var handleOnClick = function handleOnClick(info) {
|
|
114
111
|
if (userSelectedKey === undefined) {
|
|
@@ -142,6 +139,10 @@ var Menu = function Menu(props) {
|
|
|
142
139
|
if (clean) {
|
|
143
140
|
openSubMenuSet.clear();
|
|
144
141
|
} else {
|
|
142
|
+
if (mode === 'inline' && accordion) {
|
|
143
|
+
openSubMenuSet.clear();
|
|
144
|
+
}
|
|
145
|
+
|
|
145
146
|
if (isAdd) {
|
|
146
147
|
openSubMenuSet.add(openKey);
|
|
147
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(
|
|
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];
|
package/es/table/table.js
CHANGED
|
@@ -48,7 +48,10 @@ function Table(props) {
|
|
|
48
48
|
getTableProps = props.getTableProps,
|
|
49
49
|
contextMenu = props.contextMenu,
|
|
50
50
|
rangeSelection = props.rangeSelection,
|
|
51
|
-
cssVariables = props.cssVariables
|
|
51
|
+
cssVariables = props.cssVariables,
|
|
52
|
+
stickyScrollHeight = props.stickyScrollHeight,
|
|
53
|
+
scrollbarWidth = props.scrollbarWidth,
|
|
54
|
+
scrollLoad = props.scrollLoad;
|
|
52
55
|
|
|
53
56
|
var _useContext = useContext(ConfigContext),
|
|
54
57
|
getPrefixCls = _useContext.getPrefixCls,
|
|
@@ -127,7 +130,10 @@ function Table(props) {
|
|
|
127
130
|
hasHeader: hasHeader,
|
|
128
131
|
useOuterBorder: useOuterBorder,
|
|
129
132
|
defaultColumnWidth: defaultColumnWidth,
|
|
130
|
-
cssVariables: cssVariables
|
|
133
|
+
cssVariables: cssVariables,
|
|
134
|
+
stickyScrollHeight: stickyScrollHeight,
|
|
135
|
+
scrollbarWidth: scrollbarWidth,
|
|
136
|
+
scrollLoad: scrollLoad
|
|
131
137
|
}));
|
|
132
138
|
}
|
|
133
139
|
|
package/es/tree/style/index.css
CHANGED
|
@@ -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:
|
|
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);
|
package/es/tree/style/index.less
CHANGED
|
@@ -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:
|
|
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;
|
package/es/tree/style/token.less
CHANGED
|
@@ -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
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
277
|
+
dragNodesKeys: keys,
|
|
278
|
+
dropPosition: dropPosition
|
|
215
279
|
});
|
|
216
|
-
}, [onDrop,
|
|
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
|
package/es/tree/treeHooks.d.ts
CHANGED
|
@@ -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[]>>];
|
package/es/tree/treeHooks.js
CHANGED
|
@@ -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]);
|
package/es/tree/treeNode.d.ts
CHANGED
|
@@ -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;
|