@kdcloudjs/kdesign 1.6.22 → 1.6.24

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 (46) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/kdesign-complete.less +141 -9
  3. package/dist/kdesign.css +156 -11
  4. package/dist/kdesign.css.map +1 -1
  5. package/dist/kdesign.js +652 -66
  6. package/dist/kdesign.js.map +1 -1
  7. package/dist/kdesign.min.css +3 -3
  8. package/dist/kdesign.min.js +8 -8
  9. package/dist/kdesign.min.js.map +1 -1
  10. package/es/_utils/usePopper.js +5 -1
  11. package/es/cascader/cascader.d.ts +7 -3
  12. package/es/cascader/cascader.js +243 -37
  13. package/es/cascader/style/index.css +144 -6
  14. package/es/cascader/style/index.less +122 -5
  15. package/es/cascader/style/token.less +3 -0
  16. package/es/cascader/util.d.ts +26 -0
  17. package/es/cascader/util.js +301 -0
  18. package/es/config-provider/compDefaultProps.d.ts +1 -0
  19. package/es/config-provider/compDefaultProps.js +1 -0
  20. package/es/select/option.js +3 -2
  21. package/es/select/style/index.css +1 -1
  22. package/es/select/style/index.less +1 -1
  23. package/es/stepper/style/index.css +10 -3
  24. package/es/stepper/style/index.less +12 -3
  25. package/es/stepper/style/token.less +3 -0
  26. package/es/tooltip/tooltip.js +1 -1
  27. package/es/tree/utils/treeUtils.js +2 -2
  28. package/lib/_utils/usePopper.js +5 -1
  29. package/lib/cascader/cascader.d.ts +7 -3
  30. package/lib/cascader/cascader.js +280 -56
  31. package/lib/cascader/style/index.css +144 -6
  32. package/lib/cascader/style/index.less +122 -5
  33. package/lib/cascader/style/token.less +3 -0
  34. package/lib/cascader/util.d.ts +26 -0
  35. package/lib/cascader/util.js +353 -0
  36. package/lib/config-provider/compDefaultProps.d.ts +1 -0
  37. package/lib/config-provider/compDefaultProps.js +1 -0
  38. package/lib/select/option.js +3 -2
  39. package/lib/select/style/index.css +1 -1
  40. package/lib/select/style/index.less +1 -1
  41. package/lib/stepper/style/index.css +10 -3
  42. package/lib/stepper/style/index.less +12 -3
  43. package/lib/stepper/style/token.less +3 -0
  44. package/lib/tooltip/tooltip.js +1 -1
  45. package/lib/tree/utils/treeUtils.js +2 -2
  46. package/package.json +1 -1
@@ -556,7 +556,11 @@ function usePopper(locatorElement, popperElement, props) {
556
556
  focus: 'mousedown',
557
557
  contextMenu: 'mousedown'
558
558
  };
559
- popperNode === null || popperNode === void 0 ? void 0 : popperNode.addEventListener('mouseleave', debounceHidePopper);
559
+
560
+ if (matchTrigger('hover')) {
561
+ popperNode === null || popperNode === void 0 ? void 0 : popperNode.addEventListener('mouseleave', debounceHidePopper);
562
+ }
563
+
560
564
  Array.isArray(trigger) ? trigger.forEach(function (action) {
561
565
  return document.addEventListener(mapEvent[action], debounceHidePopper);
562
566
  }) : document.addEventListener(mapEvent[trigger], debounceHidePopper);
@@ -1,7 +1,7 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { PopperProps } from '../_utils/usePopper';
3
3
  export interface CascaderOptionType {
4
- value?: string | number;
4
+ value?: string;
5
5
  label?: React.ReactNode;
6
6
  disabled?: boolean;
7
7
  isLeaf?: boolean;
@@ -14,9 +14,12 @@ declare type FieldNames = {
14
14
  value: string;
15
15
  children: string;
16
16
  };
17
+ export declare type KeysDataType = {
18
+ [key: string]: CascaderOptionType;
19
+ };
17
20
  export declare const CascaderPlacement: ["topLeft", "topRight", "bottomLeft", "bottomRight"];
18
21
  export declare type CascaderPlacementType = typeof CascaderPlacement[number];
19
- export declare type CascaderValueType = Array<string | number>;
22
+ export declare type CascaderValueType = (string | string[])[];
20
23
  export declare type CascaderExpandTrigger = 'click' | 'hover';
21
24
  export interface CascaderProps extends PopperProps {
22
25
  id?: string;
@@ -37,6 +40,7 @@ export interface CascaderProps extends PopperProps {
37
40
  notFoundContent?: string;
38
41
  value?: CascaderValueType;
39
42
  children?: React.ReactNode;
43
+ mode?: 'single' | 'multiple';
40
44
  style?: React.CSSProperties;
41
45
  suffixIcon?: React.ReactNode;
42
46
  expandIcon?: React.ReactNode;
@@ -1,11 +1,13 @@
1
- import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
2
1
  import _extends from "@babel/runtime-corejs3/helpers/extends";
2
+ import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
3
+ import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
3
4
  import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
4
5
  import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
5
6
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
7
+ import _JSON$stringify from "@babel/runtime-corejs3/core-js-stable/json/stringify";
6
8
  import _spliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/splice";
7
9
  import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
8
- import * as React from 'react';
10
+ import React, { useMemo, useCallback } from 'react';
9
11
  import classNames from 'classnames';
10
12
  import { tuple } from '../_utils/type';
11
13
  import { getCompProps } from '../_utils';
@@ -14,6 +16,9 @@ import usePopper from '../_utils/usePopper';
14
16
  import Input from '../input';
15
17
  import Icon from '../icon';
16
18
  import Empty from '../empty';
19
+ import Checkbox from '../checkbox';
20
+ import Tag from '../tag';
21
+ import { flattenAll, useChecked, getHalfChecked, getChecked, getMultipleCheckValue, getAllCheckedKeys } from './util';
17
22
  export var CascaderPlacement = tuple('topLeft', 'topRight', 'bottomLeft', 'bottomRight');
18
23
  var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
19
24
  var _React$useContext = React.useContext(ConfigContext),
@@ -23,14 +28,19 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
23
28
 
24
29
 
25
30
  var allProps = getCompProps('Cascader', userDefaultProps, props);
26
- var style = allProps.style,
31
+ var mode = allProps.mode,
32
+ style = allProps.style,
27
33
  options = allProps.options,
34
+ bordered = allProps.bordered,
35
+ disabled = allProps.disabled,
28
36
  children = allProps.children,
29
37
  loadData = allProps.loadData,
38
+ clearIcon = allProps.clearIcon,
30
39
  className = allProps.className,
31
40
  fieldNames = allProps.fieldNames,
32
41
  placeholder = allProps.placeholder,
33
42
  defaultValue = allProps.defaultValue,
43
+ maxTagPlaceholder = allProps.maxTagPlaceholder,
34
44
  displayRender = allProps.displayRender,
35
45
  expandTrigger = allProps.expandTrigger,
36
46
  changeOnSelect = allProps.changeOnSelect,
@@ -45,6 +55,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
45
55
  var prefixCls = getPrefixCls(pkgPrefixCls, 'cascader', customPrefixcls);
46
56
  var pickerRef = React.useRef();
47
57
  var triggerRef = React.useRef();
58
+ var wrapperRef = React.useRef();
48
59
  var mergeRef = ref || pickerRef;
49
60
 
50
61
  var _React$useState = React.useState(!!props.popperVisible || !!props.popupVisible || defaultPopupVisible),
@@ -79,8 +90,23 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
79
90
  React.useEffect(function () {
80
91
  props.value && setValue(props.value);
81
92
  }, [props.value]);
93
+ var isMultiple = useMemo(function () {
94
+ return mode === 'multiple';
95
+ }, [mode]);
96
+
97
+ var _useMemo = useMemo(function () {
98
+ return flattenAll(options, []);
99
+ }, [options]),
100
+ flattenData = _useMemo.flattenData,
101
+ keysData = _useMemo.keysData;
102
+
103
+ var _useChecked = useChecked(value, flattenData, keysData, isMultiple),
104
+ _useChecked2 = _slicedToArray(_useChecked, 2),
105
+ checkedKeys = _useChecked2[0],
106
+ halfCheckedKeys = _useChecked2[1];
107
+
82
108
  React.useEffect(function () {
83
- if (value && (options === null || options === void 0 ? void 0 : options.length) > 0) {
109
+ if (!isMultiple && value && (options === null || options === void 0 ? void 0 : options.length) > 0) {
84
110
  var _currentOptions = [];
85
111
  var _menus = [options];
86
112
 
@@ -104,7 +130,39 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
104
130
  setMenus(_menus);
105
131
  setCurrentOptions(_currentOptions);
106
132
  }
107
- }, [options, value, selectedOptions, fieldNames]);
133
+ }, [options, value, selectedOptions, fieldNames, isMultiple]);
134
+ React.useEffect(function () {
135
+ if (isMultiple && value && (options === null || options === void 0 ? void 0 : options.length) > 0) {
136
+ var _currentOptions2 = [];
137
+ var lastselectedOptions = value[(value === null || value === void 0 ? void 0 : value.length) - 1] || [];
138
+ var _menus2 = [options];
139
+
140
+ var scanOptions = function scanOptions(options) {
141
+ options.forEach(function (option) {
142
+ var _a;
143
+
144
+ if (_includesInstanceProperty(lastselectedOptions).call(lastselectedOptions, String(option[fieldNames.value]))) {
145
+ _currentOptions2.push(option);
146
+
147
+ if ((_a = option[fieldNames.children]) === null || _a === void 0 ? void 0 : _a.length) {
148
+ _menus2.push(option[fieldNames.children]);
149
+
150
+ scanOptions(option[fieldNames.children]);
151
+ }
152
+ }
153
+ });
154
+ };
155
+
156
+ scanOptions(options);
157
+ var newMultipleOptions = value === null || value === void 0 ? void 0 : _mapInstanceProperty(value).call(value, function (item) {
158
+ return Array.isArray(item) ? _mapInstanceProperty(item).call(item, function (key) {
159
+ return keysData[key];
160
+ }) : [];
161
+ });
162
+ setMenus(_menus2);
163
+ setCurrentOptions(newMultipleOptions);
164
+ }
165
+ }, [options, value, fieldNames, isMultiple]);
108
166
  React.useEffect(function () {
109
167
  var _a;
110
168
 
@@ -112,12 +170,30 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
112
170
  (_a = mergeRef.current) === null || _a === void 0 ? void 0 : _a.focus();
113
171
  }
114
172
  }, [allProps.autoFocus, mergeRef]);
173
+ React.useEffect(function () {
174
+ var _a;
115
175
 
116
- var labels = _mapInstanceProperty(currentOptions).call(currentOptions, function (_ref) {
117
- var label = _ref[fieldNames.label];
118
- return label;
119
- });
176
+ (_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('mouseup', function (e) {
177
+ var _a;
178
+
179
+ var isCloseBtn = ((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.className.indexOf('kd-tag-close-icon')) > -1;
120
180
 
181
+ if (isCloseBtn) {
182
+ e.stopPropagation();
183
+ }
184
+ });
185
+ }, []);
186
+ var labels = useMemo(function () {
187
+ return !isMultiple ? _mapInstanceProperty(currentOptions).call(currentOptions, function (_ref) {
188
+ var label = _ref[fieldNames.label];
189
+ return label;
190
+ }) : _mapInstanceProperty(currentOptions).call(currentOptions, function (option) {
191
+ return _mapInstanceProperty(option).call(option, function (_ref2) {
192
+ var label = _ref2[fieldNames.label];
193
+ return label;
194
+ });
195
+ });
196
+ }, [currentOptions, fieldNames.label, isMultiple]);
121
197
  var allowClear = allProps.allowClear && value.length > 0;
122
198
  var locatorProps = {
123
199
  style: style,
@@ -125,7 +201,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
125
201
  className: classNames("".concat(prefixCls, "-picker"), className, {
126
202
  expand: visible,
127
203
  allowClear: allowClear,
128
- disabled: props.disabled
204
+ disabled: disabled
129
205
  })
130
206
  };
131
207
 
@@ -137,7 +213,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
137
213
  value: value,
138
214
  placeholder: placeholder,
139
215
  readOnly: true,
140
- disabled: props.disabled,
216
+ disabled: disabled,
141
217
  className: classNames("".concat(prefixCls, "-picker-input"), {
142
218
  expand: visible
143
219
  }),
@@ -149,47 +225,167 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
149
225
  })
150
226
  };
151
227
 
152
- if (props.bordered) {
228
+ if (bordered) {
153
229
  inputProps.borderType = 'bordered';
154
230
  }
155
231
 
156
- var cascaderLocator = /*#__PURE__*/React.createElement("span", _extends({}, locatorProps, {
157
- ref: mergeRef
158
- }), React.Children.count(children) === 1 && children.type ? /*#__PURE__*/React.cloneElement(children, {
159
- ref: triggerRef
160
- }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
161
- ref: triggerRef
162
- }, /*#__PURE__*/React.createElement(Input, _extends({}, inputProps)), /*#__PURE__*/React.createElement("span", {
163
- className: "".concat(prefixCls, "-picker-label")
164
- }, (labels === null || labels === void 0 ? void 0 : labels.length) ? displayRender(labels, currentOptions) : '')), allowClear && /*#__PURE__*/React.createElement(Icon, {
165
- type: "close-solid",
166
- className: "".concat(prefixCls, "-picker-close"),
167
- onClick: handleClear
168
- })));
232
+ var renderSuffix = function renderSuffix() {
233
+ var _classNames;
234
+
235
+ var suffixIcon = allProps.suffixIcon; // 选择器下拉icon样式
236
+
237
+ var arrowIconCls = classNames((_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-icon-arrow"), true), _defineProperty(_classNames, "".concat(prefixCls, "-icon-arrow-up"), visible), _defineProperty(_classNames, "".concat(prefixCls, "-icon-arrow-down"), !visible), _defineProperty(_classNames, "".concat(prefixCls, "-icon-arrow-focus"), visible), _classNames));
238
+ var iconShow = allowClear && !disabled && currentOptions.length > 0;
239
+ var clearIconCls = classNames(_defineProperty({}, "".concat(prefixCls, "-icon-clear"), true));
240
+ return /*#__PURE__*/React.createElement(React.Fragment, null, iconShow && /*#__PURE__*/React.createElement("span", {
241
+ onClick: handleClear,
242
+ className: clearIconCls
243
+ }, /*#__PURE__*/React.createElement(Icon, {
244
+ type: "close-solid"
245
+ }) || clearIcon), /*#__PURE__*/React.createElement("span", {
246
+ className: arrowIconCls
247
+ }, suffixIcon || /*#__PURE__*/React.createElement(Icon, {
248
+ type: "arrow-down"
249
+ })));
250
+ };
251
+
252
+ var handleMaxTagHolder = useCallback(function () {
253
+ if (typeof maxTagPlaceholder === 'function') {
254
+ return /*#__PURE__*/React.createElement(Tag, {
255
+ type: "edit",
256
+ disabled: disabled
257
+ }, maxTagPlaceholder(currentOptions));
258
+ } else {
259
+ return /*#__PURE__*/React.createElement(Tag, {
260
+ type: "edit",
261
+ disabled: disabled
262
+ }, maxTagPlaceholder);
263
+ }
264
+ }, [disabled, maxTagPlaceholder, currentOptions]);
265
+
266
+ var handleRemove = function handleRemove(e, opt) {
267
+ e.stopPropagation();
268
+ onMultipleChecked(_toConsumableArray(opt).pop(), false);
269
+ };
270
+
271
+ var renderMultiple = function renderMultiple() {
272
+ var _classNames3, _classNames4;
273
+
274
+ var maxTagCount = allProps.maxTagCount,
275
+ maxTagPlaceholder = allProps.maxTagPlaceholder;
276
+ var multipleCls = classNames((_classNames3 = {
277
+ disabled: disabled
278
+ }, _defineProperty(_classNames3, "".concat(prefixCls, "-multiple"), true), _defineProperty(_classNames3, "".concat(prefixCls, "-bordered"), bordered), _classNames3));
279
+ var itemCls = classNames((_classNames4 = {}, _defineProperty(_classNames4, "".concat(prefixCls, "-selection-item"), true), _defineProperty(_classNames4, "".concat(prefixCls, "-tag-describe"), true), _classNames4));
280
+ var TagStyle = {
281
+ margin: '2px 8px 2px 0',
282
+ maxWidth: '100%'
283
+ };
284
+ return /*#__PURE__*/React.createElement("div", {
285
+ className: multipleCls,
286
+ ref: triggerRef,
287
+ style: style
288
+ }, /*#__PURE__*/React.createElement("div", {
289
+ className: "".concat(prefixCls, "-multiple-wrapper"),
290
+ ref: wrapperRef
291
+ }, Array.isArray(currentOptions) && /*#__PURE__*/React.createElement(React.Fragment, null, _mapInstanceProperty(currentOptions).call(currentOptions, function (option, index) {
292
+ return /*#__PURE__*/React.createElement("span", {
293
+ key: _JSON$stringify(labels[index]),
294
+ className: classNames("".concat(prefixCls, "-selection-tag"))
295
+ }, (!maxTagCount || index <= maxTagCount - 1) && /*#__PURE__*/React.createElement(Tag, {
296
+ type: "edit",
297
+ style: TagStyle,
298
+ closable: true,
299
+ onClose: function onClose(e) {
300
+ return handleRemove(e, option);
301
+ }
302
+ }, displayRender(labels[index], option)));
303
+ }), maxTagCount && currentOptions.length > maxTagCount ? maxTagPlaceholder ? handleMaxTagHolder() : /*#__PURE__*/React.createElement("span", {
304
+ className: itemCls
305
+ }, /*#__PURE__*/React.createElement("span", {
306
+ className: "".concat(prefixCls, "-tag-describe-content")
307
+ }, "\u5171", currentOptions.length, "\u9879")) : null), /*#__PURE__*/React.createElement("span", {
308
+ className: "".concat(prefixCls, "-placeholder")
309
+ }, !currentOptions.length && placeholder), /*#__PURE__*/React.createElement("span", {
310
+ className: "".concat(prefixCls, "-suffix")
311
+ }, renderSuffix())));
312
+ };
313
+
314
+ var renderSingle = function renderSingle() {
315
+ return /*#__PURE__*/React.createElement("span", _extends({}, locatorProps, {
316
+ ref: mergeRef
317
+ }), React.Children.count(children) === 1 && children.type ? /*#__PURE__*/React.cloneElement(children, {
318
+ ref: triggerRef
319
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
320
+ ref: triggerRef
321
+ }, /*#__PURE__*/React.createElement(Input, _extends({}, inputProps)), /*#__PURE__*/React.createElement("span", {
322
+ className: "".concat(prefixCls, "-picker-label")
323
+ }, (labels === null || labels === void 0 ? void 0 : labels.length) ? displayRender(labels, currentOptions) : '')), allowClear && /*#__PURE__*/React.createElement(Icon, {
324
+ type: "close-solid",
325
+ className: "".concat(prefixCls, "-picker-close"),
326
+ onClick: handleClear
327
+ })));
328
+ };
329
+
330
+ var cascaderLocator = isMultiple ? renderMultiple() : renderSingle();
169
331
 
170
332
  var onExpend = function onExpend(index, opt, opts) {
171
333
  _spliceInstanceProperty(selectedOptions).call(selectedOptions, index, selectedOptions.length - index, opt);
172
334
 
173
335
  setSelectedOptions(selectedOptions);
174
336
 
337
+ if (!(opts === null || opts === void 0 ? void 0 : opts.length) && opt.isLeaf !== false || changeOnSelect) {
338
+ onChange(selectedOptions);
339
+ }
340
+
341
+ !(opts === null || opts === void 0 ? void 0 : opts.length) && opt.isLeaf !== false && setVisible(false);
342
+
175
343
  var newMenus = _toConsumableArray(menus);
176
344
 
177
345
  if ((opts === null || opts === void 0 ? void 0 : opts.length) || opt.isLeaf === false) {
178
346
  _spliceInstanceProperty(newMenus).call(newMenus, index + 1, newMenus.length - index + 1, opts);
179
347
  }
180
348
 
181
- if (!(opts === null || opts === void 0 ? void 0 : opts.length) && opt.isLeaf !== false || changeOnSelect) {
182
- onChange(selectedOptions);
349
+ setMenus(newMenus);
350
+ loadData && opt.isLeaf === false && !(opts === null || opts === void 0 ? void 0 : opts.length) && loadData(selectedOptions);
351
+ };
352
+
353
+ var onMultipleExpend = function onMultipleExpend(index, opt, opts) {
354
+ _spliceInstanceProperty(selectedOptions).call(selectedOptions, index, selectedOptions.length - index, opt);
355
+
356
+ setSelectedOptions(selectedOptions);
357
+
358
+ var newMenus = _toConsumableArray(menus);
359
+
360
+ if ((opts === null || opts === void 0 ? void 0 : opts.length) || opt.isLeaf === false) {
361
+ _spliceInstanceProperty(newMenus).call(newMenus, index + 1, newMenus.length - index + 1, opts);
183
362
  }
184
363
 
185
- !(opts === null || opts === void 0 ? void 0 : opts.length) && opt.isLeaf !== false && setVisible(false);
186
364
  setMenus(newMenus);
187
365
  loadData && opt.isLeaf === false && !(opts === null || opts === void 0 ? void 0 : opts.length) && loadData(selectedOptions);
188
366
  };
189
367
 
368
+ var onMultipleChecked = function onMultipleChecked(opt, checked) {
369
+ var _a;
370
+
371
+ var checkState = getAllCheckedKeys(opt.value, checked, checkedKeys, keysData, halfCheckedKeys);
372
+ var newValue = getMultipleCheckValue(value, opt, checked, flattenData, checkState.checkedKeys);
373
+ var newMultipleOptions = newValue === null || newValue === void 0 ? void 0 : _mapInstanceProperty(newValue).call(newValue, function (item) {
374
+ return Array.isArray(item) ? _mapInstanceProperty(item).call(item, function (key) {
375
+ return keysData[key];
376
+ }) : [];
377
+ });
378
+
379
+ if (!('value' in props)) {
380
+ setValue(newValue);
381
+ }
382
+
383
+ (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, newValue, newMultipleOptions);
384
+ };
385
+
190
386
  var onChange = function onChange(selectedOptions) {
191
- var selectedValue = _mapInstanceProperty(selectedOptions).call(selectedOptions, function (_ref2) {
192
- var value = _ref2[fieldNames.value];
387
+ var selectedValue = _mapInstanceProperty(selectedOptions).call(selectedOptions, function (_ref3) {
388
+ var value = _ref3[fieldNames.value];
193
389
  return value;
194
390
  });
195
391
 
@@ -216,24 +412,21 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
216
412
  label = opt[fieldNames.label],
217
413
  children = opt[fieldNames.children];
218
414
  var expendEvent = expandTrigger === 'click' || !(children && children.length) ? 'onClick' : 'onMouseEnter';
415
+ var selected = selectedOptions[index] && selectedOptions[index][fieldNames.value] === value;
219
416
  var optionProps = {
220
417
  role: 'menuitem',
221
418
  className: classNames("".concat(prefixCls, "-menu-item"), {
222
419
  disabled: opt.disabled,
223
420
  last: !(children === null || children === void 0 ? void 0 : children.length) && isLeaf !== false,
224
- selected: selectedOptions[index] && selectedOptions[index][fieldNames.value] === value
421
+ selected: selected
225
422
  })
226
423
  };
227
424
 
228
425
  if (!opt.disabled) {
229
- optionProps[expendEvent] = onExpend.bind(null, index, opt, children);
426
+ optionProps[expendEvent] = isMultiple ? onMultipleExpend.bind(null, index, opt, children) : onExpend.bind(null, index, opt, children);
230
427
  }
231
428
 
232
- return /*#__PURE__*/React.createElement("li", _extends({
233
- key: value
234
- }, optionProps, {
235
- title: label
236
- }), /*#__PURE__*/React.createElement("span", {
429
+ var node = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
237
430
  className: "".concat(prefixCls, "-menu-item-label")
238
431
  }, label), loading ? /*#__PURE__*/React.createElement(Icon, {
239
432
  type: "loadding-circle",
@@ -241,6 +434,19 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
241
434
  }) : ((children === null || children === void 0 ? void 0 : children.length) || isLeaf === false) && (props.expandIcon || /*#__PURE__*/React.createElement(Icon, {
242
435
  type: "arrow-right"
243
436
  })));
437
+ return /*#__PURE__*/React.createElement("li", _extends({
438
+ key: value
439
+ }, optionProps, {
440
+ title: label
441
+ }), isMultiple ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Checkbox, {
442
+ checked: getChecked(checkedKeys, value),
443
+ indeterminate: getHalfChecked(halfCheckedKeys, value),
444
+ disabled: opt.disabled,
445
+ onChange: function onChange(e) {
446
+ return onMultipleChecked(opt, e.target.checked);
447
+ },
448
+ className: "".concat(prefixCls, "-checkbox")
449
+ }), node) : node);
244
450
  }));
245
451
  }) : /*#__PURE__*/React.createElement(Empty, {
246
452
  description: notFoundContent
@@ -114,11 +114,11 @@
114
114
  border-color: var(--kd-c-cascader-color-active, #999);
115
115
  }
116
116
  .kd-cascader-picker:focus > .kd-cascader-picker-input .kd-input-suffix,
117
- .kd-cascader-picker:focus > .kd-cascader-picker-input i[class*="kdicon"] {
117
+ .kd-cascader-picker:focus > .kd-cascader-picker-input i[class*='kdicon'] {
118
118
  color: var(--kd-c-cascader-color-active, #999);
119
119
  }
120
120
  .kd-cascader-picker:hover > .kd-cascader-picker-input .kd-input-suffix,
121
- .kd-cascader-picker:hover > .kd-cascader-picker-input i[class*="kdicon"] {
121
+ .kd-cascader-picker:hover > .kd-cascader-picker-input i[class*='kdicon'] {
122
122
  color: var(--kd-c-cascader-color-active, #999);
123
123
  }
124
124
  .kd-cascader-picker.disabled .kd-cascader-picker-input {
@@ -126,7 +126,7 @@
126
126
  border-color: var(--kd-g-color-border-strong, #d9d9d9);
127
127
  }
128
128
  .kd-cascader-picker.disabled .kd-cascader-picker-input .kd-input-suffix,
129
- .kd-cascader-picker.disabled .kd-cascader-picker-input i[class*="kdicon"] {
129
+ .kd-cascader-picker.disabled .kd-cascader-picker-input i[class*='kdicon'] {
130
130
  color: var(--kd-c-cascader-color-text-disabled, var(--kd-g-color-disabled, #b2b2b2));
131
131
  }
132
132
  .kd-cascader-picker-label {
@@ -157,13 +157,13 @@
157
157
  .kd-cascader-picker-input.expand {
158
158
  border-color: var(--kd-c-cascader-color-active, #999);
159
159
  }
160
- .kd-cascader-picker-input.expand i[class*="kdicon"] {
160
+ .kd-cascader-picker-input.expand i[class*='kdicon'] {
161
161
  color: var(--kd-c-cascader-color-active, #999);
162
162
  -webkit-transform: rotate(180deg);
163
163
  transform: rotate(180deg);
164
164
  }
165
165
  .kd-cascader-picker-input .kd-input-suffix,
166
- .kd-cascader-picker-input i[class*="kdicon"] {
166
+ .kd-cascader-picker-input i[class*='kdicon'] {
167
167
  -webkit-transition: all 0.2s;
168
168
  transition: all 0.2s;
169
169
  }
@@ -188,7 +188,7 @@
188
188
  opacity: 0;
189
189
  cursor: pointer;
190
190
  visibility: hidden;
191
- color: var(--kd-c-cascader-clear-color-text, #d9d9d9);
191
+ color: var(--kd-c-cascader-icon-clear-color-text, #d9d9d9);
192
192
  -webkit-transition: all 0.1s;
193
193
  transition: all 0.1s;
194
194
  -webkit-transform-origin: 50% 50%;
@@ -241,6 +241,9 @@
241
241
  -webkit-box-pack: justify;
242
242
  -ms-flex-pack: justify;
243
243
  justify-content: space-between;
244
+ -webkit-box-align: center;
245
+ -ms-flex-align: center;
246
+ align-items: center;
244
247
  padding: 0 var(--kd-c-cascader-menu-item-spacing-padding-horizontal, 12px);
245
248
  line-height: var(--kd-c-cascader-menu-item-sizing-height, 32px);
246
249
  cursor: pointer;
@@ -267,6 +270,141 @@
267
270
  .kd-cascader-menus .kd-cascader-menu-item.last .kd-cascader-menu-item-label {
268
271
  width: 92px;
269
272
  }
273
+ .kd-cascader-menus .kd-cascader-menu-item .kd-cascader-checkbox {
274
+ margin-right: 5px;
275
+ }
270
276
  .kd-cascader-menus .kd-empty {
271
277
  padding: 10px 0 20px;
272
278
  }
279
+ .kd-cascader-bordered {
280
+ border: 1px solid #d9d9d9;
281
+ padding-left: 8px !important;
282
+ border-radius: 2px;
283
+ }
284
+ .kd-cascader-multiple {
285
+ padding: 1px 28px 1px 0;
286
+ -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
287
+ transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
288
+ width: 100%;
289
+ min-height: 30px;
290
+ max-height: 100px;
291
+ color: #212121;
292
+ display: -webkit-box;
293
+ display: -ms-flexbox;
294
+ display: flex;
295
+ cursor: pointer;
296
+ -webkit-box-sizing: border-box;
297
+ box-sizing: border-box;
298
+ overflow-y: auto;
299
+ overflow-x: hidden;
300
+ position: relative;
301
+ border-bottom: 1px solid #d9d9d9;
302
+ }
303
+ .kd-cascader-multiple-wrapper {
304
+ display: -webkit-box;
305
+ display: -ms-flexbox;
306
+ display: flex;
307
+ -webkit-box-align: center;
308
+ -ms-flex-align: center;
309
+ align-items: center;
310
+ -ms-flex-wrap: wrap;
311
+ flex-wrap: wrap;
312
+ width: 100%;
313
+ }
314
+ .kd-cascader-placeholder {
315
+ position: absolute;
316
+ color: #999;
317
+ overflow: hidden;
318
+ white-space: nowrap;
319
+ text-overflow: ellipsis;
320
+ }
321
+ .kd-cascader-suffix {
322
+ right: 0;
323
+ position: absolute;
324
+ display: -webkit-box;
325
+ display: -ms-flexbox;
326
+ display: flex;
327
+ -webkit-box-flex: 0;
328
+ -ms-flex: 0;
329
+ flex: 0;
330
+ -ms-flex-wrap: wrap;
331
+ flex-wrap: wrap;
332
+ -webkit-box-align: center;
333
+ -ms-flex-align: center;
334
+ align-items: center;
335
+ -webkit-box-pack: center;
336
+ -ms-flex-pack: center;
337
+ justify-content: center;
338
+ margin-left: 8px;
339
+ }
340
+ .kd-cascader-selection-tag {
341
+ max-width: 100%;
342
+ }
343
+ .kd-cascader-multiple:hover .kd-cascader-icon-clear {
344
+ opacity: 1;
345
+ }
346
+ .kd-cascader-icon-arrow {
347
+ display: -webkit-inline-box;
348
+ display: -ms-inline-flexbox;
349
+ display: inline-flex;
350
+ -webkit-box-align: center;
351
+ -ms-flex-align: center;
352
+ align-items: center;
353
+ vertical-align: middle;
354
+ }
355
+ .kd-cascader-icon-arrow-up {
356
+ -webkit-transform: rotate(180deg);
357
+ transform: rotate(180deg);
358
+ -webkit-transition: -webkit-transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
359
+ transition: -webkit-transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
360
+ transition: transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
361
+ transition: transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
362
+ }
363
+ .kd-cascader-icon-arrow-down {
364
+ -webkit-transform: rotate(0deg);
365
+ transform: rotate(0deg);
366
+ -webkit-transition: -webkit-transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
367
+ transition: -webkit-transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
368
+ transition: transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
369
+ transition: transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform calc(0.3s - 0.1s) cubic-bezier(0.4, 0, 0.6, 1);
370
+ }
371
+ .kd-cascader-icon-arrow-focus {
372
+ color: var(--kd-c-cascader-color-border-foucs, var(--kd-g-color-theme, #5582f3));
373
+ }
374
+ .kd-cascader-icon-clear {
375
+ opacity: 0;
376
+ z-index: 1;
377
+ position: absolute;
378
+ background: #fff;
379
+ -webkit-transition: opacity 0.15s ease;
380
+ transition: opacity 0.15s ease;
381
+ color: var(--kd-c-cascader-icon-clear-color-text, #d9d9d9);
382
+ }
383
+ .kd-cascader-icon-clear:hover {
384
+ color: var(--kd-c-cascader-icon-clear-color-text-hover, #999);
385
+ }
386
+ .kd-cascader-tag-describe {
387
+ font-size: 12px;
388
+ height: 20px;
389
+ line-height: 18px;
390
+ margin: 2px 8px 2px 0;
391
+ -webkit-user-select: none;
392
+ -moz-user-select: none;
393
+ -ms-user-select: none;
394
+ user-select: none;
395
+ }
396
+ .kd-cascader-tag-describe-content {
397
+ display: -webkit-inline-box;
398
+ display: -ms-inline-flexbox;
399
+ display: inline-flex;
400
+ -webkit-box-align: center;
401
+ -ms-flex-align: center;
402
+ align-items: center;
403
+ vertical-align: middle;
404
+ padding: 0 7px;
405
+ overflow: hidden;
406
+ white-space: nowrap;
407
+ text-overflow: ellipsis;
408
+ border: 1px solid #ccc;
409
+ color: #212121;
410
+ }