@douyinfe/semi-ui 2.3.0-beta.0 → 2.4.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 (97) hide show
  1. package/_base/_story/a11y.scss +0 -1
  2. package/_base/_story/index.scss +2 -5
  3. package/avatar/avatarGroup.tsx +1 -1
  4. package/avatar/index.tsx +0 -4
  5. package/button/__test__/button.test.js +1 -1
  6. package/checkbox/_story/checkbox.stories.js +2 -2
  7. package/collapse/index.tsx +1 -1
  8. package/collapse/item.tsx +1 -3
  9. package/datePicker/_story/RenderDate/index.js +13 -3
  10. package/datePicker/_story/RenderFullDate/index.js +36 -14
  11. package/datePicker/_story/RenderFullDate/index.scss +1 -1
  12. package/datePicker/_story/datePicker.stories.js +19 -11
  13. package/datePicker/_story/v2/PanelOpen.jsx +39 -0
  14. package/datePicker/_story/v2/index.js +2 -1
  15. package/dist/css/semi.css +33 -9
  16. package/dist/css/semi.min.css +1 -1
  17. package/dist/umd/semi-ui.js +96 -57
  18. package/dist/umd/semi-ui.js.map +1 -1
  19. package/dist/umd/semi-ui.min.js +1 -1
  20. package/dist/umd/semi-ui.min.js.map +1 -1
  21. package/dropdown/index.tsx +11 -3
  22. package/empty/index.tsx +1 -1
  23. package/input/textarea.tsx +5 -3
  24. package/inputNumber/__test__/inputNumber.test.js +36 -8
  25. package/inputNumber/index.tsx +2 -1
  26. package/lib/cjs/avatar/avatarGroup.js +1 -2
  27. package/lib/cjs/avatar/index.js +1 -6
  28. package/lib/cjs/collapse/index.js +1 -2
  29. package/lib/cjs/collapse/item.js +1 -5
  30. package/lib/cjs/dropdown/index.d.ts +10 -3
  31. package/lib/cjs/empty/index.js +1 -2
  32. package/lib/cjs/input/textarea.js +4 -2
  33. package/lib/cjs/inputNumber/index.js +3 -2
  34. package/lib/cjs/list/index.d.ts +4 -4
  35. package/lib/cjs/navigation/Item.js +1 -1
  36. package/lib/cjs/navigation/SubNav.js +1 -1
  37. package/lib/cjs/scrollList/scrollItem.d.ts +5 -1
  38. package/lib/cjs/scrollList/scrollItem.js +7 -0
  39. package/lib/cjs/select/index.js +1 -1
  40. package/lib/cjs/sideSheet/SideSheetContent.js +5 -9
  41. package/lib/cjs/spin/icon.js +2 -1
  42. package/lib/cjs/table/Table.js +9 -5
  43. package/lib/cjs/timePicker/TimePicker.d.ts +2 -0
  44. package/lib/cjs/timePicker/TimePicker.js +2 -3
  45. package/lib/cjs/timePicker/index.d.ts +1 -0
  46. package/lib/cjs/tooltip/index.js +1 -1
  47. package/lib/cjs/tree/treeNode.js +10 -1
  48. package/lib/cjs/treeSelect/index.js +11 -3
  49. package/lib/cjs/typography/util.js +0 -1
  50. package/lib/cjs/upload/fileCard.js +3 -3
  51. package/lib/es/avatar/avatarGroup.js +1 -2
  52. package/lib/es/avatar/index.js +1 -6
  53. package/lib/es/collapse/index.js +1 -2
  54. package/lib/es/collapse/item.js +1 -5
  55. package/lib/es/dropdown/index.d.ts +10 -3
  56. package/lib/es/empty/index.js +1 -2
  57. package/lib/es/input/textarea.js +4 -2
  58. package/lib/es/inputNumber/index.js +3 -2
  59. package/lib/es/list/index.d.ts +4 -4
  60. package/lib/es/navigation/Item.js +1 -1
  61. package/lib/es/navigation/SubNav.js +1 -1
  62. package/lib/es/scrollList/scrollItem.d.ts +5 -1
  63. package/lib/es/scrollList/scrollItem.js +7 -0
  64. package/lib/es/select/index.js +1 -1
  65. package/lib/es/sideSheet/SideSheetContent.js +5 -9
  66. package/lib/es/spin/icon.js +2 -1
  67. package/lib/es/table/Table.js +9 -5
  68. package/lib/es/timePicker/TimePicker.d.ts +2 -0
  69. package/lib/es/timePicker/TimePicker.js +2 -3
  70. package/lib/es/timePicker/index.d.ts +1 -0
  71. package/lib/es/tooltip/index.js +2 -2
  72. package/lib/es/tree/treeNode.js +9 -1
  73. package/lib/es/treeSelect/index.js +12 -4
  74. package/lib/es/typography/util.js +0 -1
  75. package/lib/es/upload/fileCard.js +3 -3
  76. package/list/index.tsx +5 -5
  77. package/navigation/Item.tsx +1 -1
  78. package/navigation/SubNav.tsx +1 -1
  79. package/package.json +8 -8
  80. package/scrollList/scrollItem.tsx +10 -3
  81. package/select/index.tsx +6 -1
  82. package/sideSheet/SideSheetContent.tsx +6 -8
  83. package/spin/icon.tsx +2 -1
  84. package/table/Table.tsx +9 -6
  85. package/table/_story/table.stories.js +2 -0
  86. package/table/_story/v2/FixedColumnsChange/index.jsx +104 -0
  87. package/table/_story/v2/FixedZIndex/index.jsx +87 -0
  88. package/timePicker/TimePicker.tsx +3 -1
  89. package/timePicker/__test__/timePicker.test.js +42 -3
  90. package/timePicker/_story/timepicker.stories.js +18 -0
  91. package/tooltip/index.tsx +3 -2
  92. package/tree/treeNode.tsx +9 -2
  93. package/treeSelect/__test__/treeSelect.test.js +157 -0
  94. package/treeSelect/index.tsx +21 -12
  95. package/typography/_story/typography.stories.js +8 -0
  96. package/typography/util.tsx +0 -1
  97. package/upload/fileCard.tsx +2 -2
@@ -25,12 +25,20 @@ export { DropdownDividerProps } from './dropdownDivider';
25
25
  export { DropdownItemProps, Type } from './dropdownItem';
26
26
  export { DropdownMenuProps } from './dropdownMenu';
27
27
  export { DropdownTitleProps } from './dropdownTitle';
28
- export interface DropDownMenuItemBasic {
29
- node: 'title' | 'item' | 'divider';
28
+
29
+ export interface DropDownMenuItemItem extends DropdownItemProps {
30
+ node: 'item';
30
31
  name?: string;
31
32
  }
33
+ export interface DropDownMenuItemDivider extends DropdownDividerProps {
34
+ node: 'divider'
35
+ }
36
+ export interface DropDownMenuItemTitle extends DropdownTitleProps {
37
+ node: 'title';
38
+ name?: string
39
+ }
32
40
 
33
- export type DropDownMenuItem = DropDownMenuItemBasic & DropdownItemProps & DropdownDividerProps & DropdownTitleProps;
41
+ export type DropDownMenuItem = DropDownMenuItemItem | DropDownMenuItemDivider | DropDownMenuItemTitle;
34
42
 
35
43
  export interface DropdownProps extends TooltipProps {
36
44
  render?: React.ReactNode;
package/empty/index.tsx CHANGED
@@ -108,7 +108,7 @@ export default class Empty extends BaseComponent<EmptyProps, EmptyState> {
108
108
  style: { fontWeight: 400 },
109
109
  };
110
110
  return (
111
- <div className={wrapperCls} style={style} aria-label="empty placeholder image">
111
+ <div className={wrapperCls} style={style}>
112
112
  <div className={`${prefixCls}-image`} style={imageStyle} >
113
113
  {imageNode}
114
114
  </div>
@@ -295,7 +295,8 @@ class TextArea extends BaseComponent<TextAreaProps, TextAreaState> {
295
295
  className,
296
296
  `${prefixCls}-textarea-wrapper`,
297
297
  {
298
- [`${prefixCls}-textarea-wrapper-disabled`]: disabled || readonly,
298
+ [`${prefixCls}-textarea-wrapper-disabled`]: disabled,
299
+ [`${prefixCls}-textarea-wrapper-readonly`]: readonly,
299
300
  [`${prefixCls}-textarea-wrapper-${validateStatus}`]: Boolean(validateStatus),
300
301
  [`${prefixCls}-textarea-wrapper-focus`]: isFocus,
301
302
  // [`${prefixCls}-textarea-wrapper-resize`]: !autosize && resize,
@@ -305,7 +306,8 @@ class TextArea extends BaseComponent<TextAreaProps, TextAreaState> {
305
306
  const itemCls = cls(
306
307
  `${prefixCls}-textarea`,
307
308
  {
308
- [`${prefixCls}-textarea-disabled`]: disabled || readonly,
309
+ [`${prefixCls}-textarea-disabled`]: disabled,
310
+ [`${prefixCls}-textarea-readonly`]: readonly,
309
311
  [`${prefixCls}-textarea-autosize`]: autosize,
310
312
  [`${prefixCls}-textarea-showClear`]: showClear,
311
313
  }
@@ -346,4 +348,4 @@ class TextArea extends BaseComponent<TextAreaProps, TextAreaState> {
346
348
 
347
349
  const ForwardTextarea = React.forwardRef<HTMLTextAreaElement, Omit<TextAreaProps, 'forwardRef'>>((props, ref) => <TextArea {...props} forwardRef={ref} />);
348
350
 
349
- export default ForwardTextarea;
351
+ export default ForwardTextarea;
@@ -5,6 +5,7 @@ import sinon from 'sinon';
5
5
  import keyCode from '@douyinfe/semi-foundation/utils/keyCode';
6
6
  import * as _ from 'lodash';
7
7
  import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
8
+ import { numbers } from '@douyinfe/semi-foundation/inputNumber/constants';
8
9
  import { Form, withField } from '../../index';
9
10
 
10
11
  const log = (...args) => console.log(...args);
@@ -216,8 +217,8 @@ describe(`InputNumber`, () => {
216
217
  const addCount = 3;
217
218
  const minusCount = 1;
218
219
 
219
- _.times(addCount, () => addBtn.simulate('mousedown'));
220
- _.times(minusCount, () => minusBtn.simulate('mousedown'));
220
+ _.times(addCount, () => addBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT }));
221
+ _.times(minusCount, () => minusBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT }));
221
222
 
222
223
  expect(inputElem.instance().value).toBe(String(defaultValue + addCount - minusCount));
223
224
  expect(onUpClick.called).toBe(true);
@@ -243,8 +244,8 @@ describe(`InputNumber`, () => {
243
244
  const addCount = 3;
244
245
  const minusCount = 1;
245
246
 
246
- _.times(addCount, () => addBtn.simulate('mousedown'));
247
- _.times(minusCount, () => minusBtn.simulate('mousedown'));
247
+ _.times(addCount, () => addBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT }));
248
+ _.times(minusCount, () => minusBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT }));
248
249
 
249
250
  expect(inputElem.instance().value).toBe(String(defaultValue + addCount - minusCount));
250
251
  expect(onUpClick.called).toBe(true);
@@ -283,9 +284,9 @@ describe(`InputNumber`, () => {
283
284
  // click button focus
284
285
  const addCount = 3;
285
286
  const minusCount = 1;
286
- _.times(addCount, () => addBtn.simulate('mousedown'));
287
+ _.times(addCount, () => addBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT }));
287
288
  _.times(addCount, () => addBtn.simulate('mouseup'));
288
- _.times(minusCount, () => minusBtn.simulate('mousedown'));
289
+ _.times(minusCount, () => minusBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT }));
289
290
  _.times(minusCount, () => minusBtn.simulate('mouseup'));
290
291
  expect(inputElem.instance().value).toBe(String(defaultValue + addCount - minusCount));
291
292
  expect(inputNumber.find(BaseInputNumber).state('focusing')).toBeTruthy();
@@ -338,7 +339,7 @@ describe(`InputNumber`, () => {
338
339
  const btns = inputNumber.find(`.${BASE_CLASS_PREFIX}-input-number-suffix-btns .${BASE_CLASS_PREFIX}-input-number-button`);
339
340
  const inputElem = inputNumber.find('input');
340
341
  const addBtn = btns.first();
341
- addBtn.simulate('mousedown');
342
+ addBtn.simulate('mousedown', { button: numbers.MOUSE_BUTTON_LEFT });
342
343
  expect(inputElem.instance().value).toBe("1");
343
344
  })
344
345
 
@@ -366,5 +367,32 @@ describe(`InputNumber`, () => {
366
367
  inputElem.simulate('change', newEvent);
367
368
  expect(onNumberChange.calledOnce).toBe(true);
368
369
  expect(inputElem.instance().value).toBe('123');
369
- })
370
+ });
371
+
372
+ /**
373
+ * test buttons right click
374
+ */
375
+ it(`right click add/minus button`, async () => {
376
+ const defaultValue = 1000;
377
+ const onUpClick = sinon.spy();
378
+ const onDownClick = sinon.spy();
379
+ const MOUSE_BUTTON_RIGHT = 2;
380
+
381
+ const inputNumber = mount(
382
+ <InputNumber defaultValue={defaultValue} onUpClick={onUpClick} onDownClick={onDownClick} />
383
+ );
384
+ const inputElem = inputNumber.find('input');
385
+
386
+ const btns = inputNumber.find(`.${BASE_CLASS_PREFIX}-input-number-suffix-btns .${BASE_CLASS_PREFIX}-input-number-button`);
387
+
388
+ const addBtn = btns.first();
389
+ const minusBtn = btns.last();
390
+
391
+ _.times(1, () => addBtn.simulate('mousedown', { button: MOUSE_BUTTON_RIGHT }));
392
+ _.times(3, () => minusBtn.simulate('mousedown', { button: MOUSE_BUTTON_RIGHT }));
393
+
394
+ expect(inputElem.instance().value).toBe(String(defaultValue));
395
+ expect(onUpClick.called).toBe(false);
396
+ expect(onDownClick.called).toBe(false);
397
+ });
370
398
  });
@@ -447,6 +447,7 @@ class InputNumber extends BaseComponent<InputNumberProps, InputNumberState> {
447
447
  style,
448
448
  onNumberChange,
449
449
  keepFocus,
450
+ defaultValue,
450
451
  ...rest
451
452
  } = this.props;
452
453
  const { value, number } = this.state;
@@ -508,4 +509,4 @@ export default forwardStatics(
508
509
  InputNumber
509
510
  );
510
511
 
511
- export { InputNumber };
512
+ export { InputNumber };
@@ -149,8 +149,7 @@ class AvatarGroup extends _react.PureComponent {
149
149
  }
150
150
 
151
151
  return /*#__PURE__*/_react.default.createElement("div", {
152
- className: groupCls,
153
- "aria-label": "avatar group"
152
+ className: groupCls
154
153
  }, inner);
155
154
  }
156
155
 
@@ -204,7 +204,6 @@ class Avatar extends _baseComponent.default {
204
204
  const hoverRender = hoverContent ? /*#__PURE__*/_react.default.createElement("div", {
205
205
  className: "".concat(prefixCls, "-hover")
206
206
  }, hoverContent) : null;
207
- let ariaLabel;
208
207
 
209
208
  if (isImg) {
210
209
  content = /*#__PURE__*/_react.default.createElement("img", (0, _assign.default)({
@@ -213,22 +212,18 @@ class Avatar extends _baseComponent.default {
213
212
  onError: this.handleError,
214
213
  alt: alt
215
214
  }, imgAttr));
216
- ariaLabel = 'avatar';
217
215
  } else if (typeof children === 'string') {
218
216
  content = /*#__PURE__*/_react.default.createElement("span", {
219
217
  className: "".concat(prefixCls, "-content")
220
218
  }, /*#__PURE__*/_react.default.createElement("span", {
221
219
  className: "".concat(prefixCls, "-label")
222
220
  }, children));
223
- ariaLabel = "avatar of ".concat(children);
224
221
  }
225
222
 
226
223
  return (
227
224
  /*#__PURE__*/
228
225
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events
229
- _react.default.createElement("span", (0, _assign.default)({
230
- "aria-label": ariaLabel
231
- }, others, {
226
+ _react.default.createElement("span", (0, _assign.default)({}, others, {
232
227
  style: style,
233
228
  className: avatarCls,
234
229
  onClick: onClick,
@@ -126,8 +126,7 @@ class Collapse extends _baseComponent.default {
126
126
  } = this.state;
127
127
  return /*#__PURE__*/_react.default.createElement("div", {
128
128
  className: clsPrefix,
129
- style: style,
130
- "aria-label": "Collapse"
129
+ style: style
131
130
  }, /*#__PURE__*/_react.default.createElement(_collapseContext.default.Provider, {
132
131
  value: {
133
132
  activeSet,
@@ -91,9 +91,7 @@ class CollapsePanel extends _react.PureComponent {
91
91
  if (typeof header === 'string') {
92
92
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, iconPosLeft ? icon : null, /*#__PURE__*/_react.default.createElement("span", null, header), /*#__PURE__*/_react.default.createElement("span", {
93
93
  className: "".concat(_constants.cssClasses.PREFIX, "-header-right")
94
- }, /*#__PURE__*/_react.default.createElement("span", {
95
- "aria-label": 'Extra of collapse header'
96
- }, extra), iconPosLeft ? null : icon));
94
+ }, /*#__PURE__*/_react.default.createElement("span", null, extra), iconPosLeft ? null : icon));
97
95
  }
98
96
 
99
97
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, iconPosLeft ? icon : null, header, iconPosLeft ? null : icon);
@@ -128,7 +126,6 @@ class CollapsePanel extends _react.PureComponent {
128
126
  ["".concat(_constants.cssClasses.PREFIX, "-content")]: true
129
127
  });
130
128
  return /*#__PURE__*/_react.default.createElement("div", (0, _assign.default)({
131
- "aria-label": 'Collapse panel',
132
129
  className: itemCls
133
130
  }, restProps), /*#__PURE__*/_react.default.createElement("div", {
134
131
  role: "button",
@@ -144,7 +141,6 @@ class CollapsePanel extends _react.PureComponent {
144
141
  reCalcKey: reCalcKey
145
142
  }, /*#__PURE__*/_react.default.createElement("div", {
146
143
  className: contentCls,
147
- "aria-label": 'Collapse content',
148
144
  "aria-hidden": !active,
149
145
  id: this.ariaID
150
146
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -12,11 +12,18 @@ export { DropdownDividerProps } from './dropdownDivider';
12
12
  export { DropdownItemProps, Type } from './dropdownItem';
13
13
  export { DropdownMenuProps } from './dropdownMenu';
14
14
  export { DropdownTitleProps } from './dropdownTitle';
15
- export interface DropDownMenuItemBasic {
16
- node: 'title' | 'item' | 'divider';
15
+ export interface DropDownMenuItemItem extends DropdownItemProps {
16
+ node: 'item';
17
17
  name?: string;
18
18
  }
19
- export declare type DropDownMenuItem = DropDownMenuItemBasic & DropdownItemProps & DropdownDividerProps & DropdownTitleProps;
19
+ export interface DropDownMenuItemDivider extends DropdownDividerProps {
20
+ node: 'divider';
21
+ }
22
+ export interface DropDownMenuItemTitle extends DropdownTitleProps {
23
+ node: 'title';
24
+ name?: string;
25
+ }
26
+ export declare type DropDownMenuItem = DropDownMenuItemItem | DropDownMenuItemDivider | DropDownMenuItemTitle;
20
27
  export interface DropdownProps extends TooltipProps {
21
28
  render?: React.ReactNode;
22
29
  children?: React.ReactNode;
@@ -119,8 +119,7 @@ class Empty extends _baseComponent.default {
119
119
  };
120
120
  return /*#__PURE__*/_react.default.createElement("div", {
121
121
  className: wrapperCls,
122
- style: style,
123
- "aria-label": "empty placeholder image"
122
+ style: style
124
123
  }, /*#__PURE__*/_react.default.createElement("div", {
125
124
  className: "".concat(prefixCls, "-image"),
126
125
  style: imageStyle
@@ -267,14 +267,16 @@ class TextArea extends _baseComponent.default {
267
267
  minLength: stateMinLength
268
268
  } = this.state;
269
269
  const wrapperCls = (0, _classnames.default)(className, "".concat(prefixCls, "-textarea-wrapper"), {
270
- ["".concat(prefixCls, "-textarea-wrapper-disabled")]: disabled || readonly,
270
+ ["".concat(prefixCls, "-textarea-wrapper-disabled")]: disabled,
271
+ ["".concat(prefixCls, "-textarea-wrapper-readonly")]: readonly,
271
272
  [(0, _concat.default)(_context = "".concat(prefixCls, "-textarea-wrapper-")).call(_context, validateStatus)]: Boolean(validateStatus),
272
273
  ["".concat(prefixCls, "-textarea-wrapper-focus")]: isFocus // [`${prefixCls}-textarea-wrapper-resize`]: !autosize && resize,
273
274
 
274
275
  }); // const ref = this.props.forwardRef || this.textAreaRef;
275
276
 
276
277
  const itemCls = (0, _classnames.default)("".concat(prefixCls, "-textarea"), {
277
- ["".concat(prefixCls, "-textarea-disabled")]: disabled || readonly,
278
+ ["".concat(prefixCls, "-textarea-disabled")]: disabled,
279
+ ["".concat(prefixCls, "-textarea-readonly")]: readonly,
278
280
  ["".concat(prefixCls, "-textarea-autosize")]: autosize,
279
281
  ["".concat(prefixCls, "-textarea-showClear")]: showClear
280
282
  });
@@ -441,9 +441,10 @@ class InputNumber extends _baseComponent.default {
441
441
  innerButtons,
442
442
  style,
443
443
  onNumberChange,
444
- keepFocus
444
+ keepFocus,
445
+ defaultValue
445
446
  } = _a,
446
- rest = __rest(_a, ["disabled", "className", "prefixCls", "min", "max", "step", "shiftStep", "precision", "formatter", "parser", "forwardedRef", "onUpClick", "onDownClick", "pressInterval", "pressTimeout", "suffix", "size", "hideButtons", "innerButtons", "style", "onNumberChange", "keepFocus"]);
447
+ rest = __rest(_a, ["disabled", "className", "prefixCls", "min", "max", "step", "shiftStep", "precision", "formatter", "parser", "forwardedRef", "onUpClick", "onDownClick", "pressInterval", "pressTimeout", "suffix", "size", "hideButtons", "innerButtons", "style", "onNumberChange", "keepFocus", "defaultValue"]);
447
448
 
448
449
  const {
449
450
  value,
@@ -5,7 +5,7 @@ import ListItem from './item';
5
5
  import { Grid } from './list-context';
6
6
  import BaseComponent from '../_base/baseComponent';
7
7
  export { ListItemProps } from './item';
8
- export interface ListProps {
8
+ export interface ListProps<T> {
9
9
  style?: React.CSSProperties;
10
10
  className?: string;
11
11
  bordered?: boolean;
@@ -15,15 +15,15 @@ export interface ListProps {
15
15
  size?: 'small' | 'large' | 'default';
16
16
  split?: boolean;
17
17
  emptyContent?: React.ReactNode;
18
- dataSource?: any[];
19
- renderItem?: (item: any, ind: number) => React.ReactNode;
18
+ dataSource?: T[];
19
+ renderItem?: (item: T, ind: number) => React.ReactNode;
20
20
  grid?: Grid;
21
21
  loading?: boolean;
22
22
  loadMore?: React.ReactNode;
23
23
  onClick?: React.MouseEventHandler<HTMLLIElement>;
24
24
  onRightClick?: React.MouseEventHandler<HTMLLIElement>;
25
25
  }
26
- declare class List extends BaseComponent<ListProps> {
26
+ declare class List<T = any> extends BaseComponent<ListProps<T>> {
27
27
  static Item: typeof ListItem;
28
28
  static propTypes: {
29
29
  style: PropTypes.Requireable<object>;
@@ -204,7 +204,7 @@ class NavItem extends _baseComponent.default {
204
204
  } else {
205
205
  let placeholderIcons = null;
206
206
 
207
- if (mode === _constants.strings.MODE_VERTICAL && !limitIndent) {
207
+ if (mode === _constants.strings.MODE_VERTICAL && !limitIndent && !isCollapsed) {
208
208
  const iconAmount = icon && !indent ? level : level - 1;
209
209
  placeholderIcons = (0, _times2.default)(iconAmount, () => this.renderIcon(null, _constants.strings.ICON_POS_RIGHT, false));
210
210
  }
@@ -230,7 +230,7 @@ class SubNav extends _baseComponent.default {
230
230
 
231
231
  let placeholderIcons = null;
232
232
 
233
- if (mode === _constants.strings.MODE_VERTICAL && !limitIndent) {
233
+ if (mode === _constants.strings.MODE_VERTICAL && !limitIndent && !isCollapsed) {
234
234
  /* Different icons' amount means different indents.*/
235
235
  const iconAmount = icon && !indent ? level : level - 1;
236
236
  placeholderIcons = (0, _times2.default)(iconAmount, index => this.renderIcon(null, _constants.strings.ICON_POS_RIGHT, false, undefined, index));
@@ -3,7 +3,10 @@ import BaseComponent from '../_base/baseComponent';
3
3
  import PropTypes from 'prop-types';
4
4
  import { Item, ScrollItemAdapter } from '@douyinfe/semi-foundation/lib/cjs/scrollList/itemFoundation';
5
5
  import { Motion } from '../_base/base';
6
- declare type DebounceSelectFn = (e: React.UIEvent, newSelectedNode: HTMLElement) => void;
6
+ interface DebounceSelectFn {
7
+ (e: React.UIEvent, newSelectedNode: HTMLElement): void;
8
+ cancel(): void;
9
+ }
7
10
  export interface ScrollItemProps<T extends Item> {
8
11
  mode?: string;
9
12
  cycled?: boolean;
@@ -52,6 +55,7 @@ export default class ScrollItem<T extends Item> extends BaseComponent<ScrollItem
52
55
  debouncedSelect: DebounceSelectFn;
53
56
  constructor(props?: {});
54
57
  get adapter(): ScrollItemAdapter<ScrollItemProps<T>, ScrollItemState, T>;
58
+ componentWillUnmount(): void;
55
59
  componentDidMount(): void;
56
60
  componentDidUpdate(prevProps: ScrollItemProps<T>): void;
57
61
  _cacheNode: (name: string, node: Element) => Element;
@@ -451,6 +451,13 @@ class ScrollItem extends _baseComponent.default {
451
451
  });
452
452
  }
453
453
 
454
+ componentWillUnmount() {
455
+ if (this.props.cycled) {
456
+ this.throttledAdjustList.cancel();
457
+ this.debouncedSelect.cancel();
458
+ }
459
+ }
460
+
454
461
  componentDidMount() {
455
462
  this.foundation.init();
456
463
  const {
@@ -563,7 +563,7 @@ class Select extends _baseComponent.default {
563
563
  role: "button",
564
564
  "aria-label": "Use the input box to create an optional item",
565
565
  onClick: e => this.onSelect(option, optionIndex, e),
566
- key: new Date().valueOf()
566
+ key: option.key || option.label
567
567
  }, customCreateItem)
568
568
  );
569
569
  }
@@ -102,8 +102,7 @@ class SideSheetContent extends _react.default.PureComponent {
102
102
 
103
103
  if (title) {
104
104
  header = /*#__PURE__*/_react.default.createElement("div", {
105
- className: "".concat(prefixCls, "-title"),
106
- "aria-label": 'Sidesheet title'
105
+ className: "".concat(prefixCls, "-title")
107
106
  }, this.props.title);
108
107
  }
109
108
 
@@ -122,6 +121,7 @@ class SideSheetContent extends _react.default.PureComponent {
122
121
  return /*#__PURE__*/_react.default.createElement("div", {
123
122
  className: "".concat(prefixCls, "-header"),
124
123
  role: 'heading',
124
+ "aria-level": 1,
125
125
  style: (0, _assign.default)({}, headerStyle)
126
126
  }, header, closer);
127
127
  }
@@ -155,15 +155,12 @@ class SideSheetContent extends _react.default.PureComponent {
155
155
  // onMouseDown={this.onDialogMouseDown}
156
156
  style: (0, _assign.default)((0, _assign.default)({}, props.style), style)
157
157
  }, /*#__PURE__*/_react.default.createElement("div", {
158
- className: "".concat(prefixCls, "-content"),
159
- "aria-label": "Sidesheet content"
158
+ className: "".concat(prefixCls, "-content")
160
159
  }, header, /*#__PURE__*/_react.default.createElement("div", {
161
160
  className: "".concat(prefixCls, "-body"),
162
- "aria-label": "Sidesheet body",
163
161
  style: props.bodyStyle
164
162
  }, props.children), props.footer ? /*#__PURE__*/_react.default.createElement("div", {
165
- className: "".concat(prefixCls, "-footer"),
166
- "aria-label": "Sidesheet footer"
163
+ className: "".concat(prefixCls, "-footer")
167
164
  }, props.footer) : null));
168
165
 
169
166
  return dialogElement;
@@ -186,8 +183,7 @@ class SideSheetContent extends _react.default.PureComponent {
186
183
 
187
184
  return /*#__PURE__*/_react.default.createElement("div", {
188
185
  className: wrapperCls,
189
- style: wrapperStyle,
190
- "aria-label": this.props['aria-label']
186
+ style: wrapperStyle
191
187
  }, this.getMaskElement(), this.getDialogElement());
192
188
  }
193
189
 
@@ -59,7 +59,8 @@ function Icon() {
59
59
  viewBox: "0 0 36 36",
60
60
  version: "1.1",
61
61
  xmlns: "http://www.w3.org/2000/svg",
62
- "aria-label": "spin"
62
+ "aria-hidden": true,
63
+ "data-icon": "spin"
63
64
  }), /*#__PURE__*/_react.default.createElement("defs", null, /*#__PURE__*/_react.default.createElement("linearGradient", {
64
65
  x1: "0%",
65
66
  y1: "100%",
@@ -1294,15 +1294,18 @@ class Table extends _baseComponent.default {
1294
1294
  const _dataSource = [...dataSource];
1295
1295
  const filteredSortedDataSource = this.foundation.getFilteredSortedDataSource(_dataSource, stateQueries);
1296
1296
  this.foundation.setCachedFilteredSortedDataSource(filteredSortedDataSource);
1297
- states.dataSource = filteredSortedDataSource; // when dataSource has change, should reset currentPage
1298
-
1299
- states.pagination = (0, _isObject2.default)(statePagination) ? (0, _assign.default)((0, _assign.default)({}, statePagination), {
1300
- currentPage: (0, _isObject2.default)(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1
1301
- }) : statePagination;
1297
+ states.dataSource = filteredSortedDataSource;
1302
1298
 
1303
1299
  if (this.props.groupBy) {
1304
1300
  states.groups = null;
1305
1301
  }
1302
+ } // when dataSource has change, should reset currentPage
1303
+
1304
+
1305
+ if (dataSource !== prevProps.dataSource) {
1306
+ states.pagination = (0, _isObject2.default)(statePagination) ? (0, _assign.default)((0, _assign.default)({}, statePagination), {
1307
+ currentPage: (0, _isObject2.default)(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1
1308
+ }) : statePagination;
1306
1309
  }
1307
1310
 
1308
1311
  if ((0, _keys.default)(states).length) {
@@ -1484,6 +1487,7 @@ class Table extends _baseComponent.default {
1484
1487
  return /*#__PURE__*/_react.default.createElement("div", {
1485
1488
  ref: this.rootWrapRef,
1486
1489
  className: (0, _classnames.default)(className, "".concat(prefixCls, "-wrapper")),
1490
+ "data-column-fixed": anyColumnFixed,
1487
1491
  style: wrapStyle,
1488
1492
  id: id
1489
1493
  }, /*#__PURE__*/_react.default.createElement(_TableContextProvider.default, (0, _assign.default)({}, tableContextValue), /*#__PURE__*/_react.default.createElement(_spin.default, {
@@ -69,6 +69,7 @@ export declare type TimePickerProps = {
69
69
  zIndex?: number | string;
70
70
  onBlur?: React.FocusEventHandler<HTMLInputElement>;
71
71
  onChange?: TimePickerAdapter['notifyChange'];
72
+ onChangeWithDateFirst?: boolean;
72
73
  onFocus?: React.FocusEventHandler<HTMLInputElement>;
73
74
  onOpenChange?: (open: boolean) => void;
74
75
  };
@@ -169,6 +170,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
169
170
  onFocus: (...args: any[]) => void;
170
171
  onBlur: (...args: any[]) => void;
171
172
  onChange: (...args: any[]) => void;
173
+ onChangeWithDateFirst: boolean;
172
174
  use12Hours: boolean;
173
175
  focusOnOpen: boolean;
174
176
  onKeyDown: (...args: any[]) => void;
@@ -183,9 +183,7 @@ class TimePicker extends _baseComponent.default {
183
183
  notifyOpenChange: function () {
184
184
  return _this2.props.onOpenChange(...arguments);
185
185
  },
186
- notifyChange: function () {
187
- return _this2.props.onChange && _this2.props.onChange(...arguments);
188
- },
186
+ notifyChange: (agr1, arg2) => this.props.onChange && this.props.onChange(agr1, arg2),
189
187
  notifyFocus: function () {
190
188
  return _this2.props.onFocus && _this2.props.onFocus(...arguments);
191
189
  },
@@ -503,6 +501,7 @@ TimePicker.defaultProps = (0, _assign.default)({
503
501
  onFocus: _noop2.default,
504
502
  onBlur: _noop2.default,
505
503
  onChange: _noop2.default,
504
+ onChangeWithDateFirst: true,
506
505
  use12Hours: false,
507
506
  focusOnOpen: false,
508
507
  onKeyDown: _noop2.default,
@@ -91,6 +91,7 @@ export default class LocaleTimePicker extends React.PureComponent<LocalePickerPr
91
91
  onFocus: (...args: any[]) => void;
92
92
  onBlur: (...args: any[]) => void;
93
93
  onChange: (...args: any[]) => void;
94
+ onChangeWithDateFirst: boolean;
94
95
  use12Hours: boolean;
95
96
  focusOnOpen: boolean;
96
97
  onKeyDown: (...args: any[]) => void;
@@ -308,7 +308,7 @@ class Tooltip extends _baseComponent.default {
308
308
  placement: props.position || 'top',
309
309
  transitionStyle: {},
310
310
  isPositionUpdated: false,
311
- id: (0, _uuid.getUuidv4)() // auto generate id, will be used by children.aria-descriptionby & content.id, improve a11y
311
+ id: (0, _uuid.getUuidShort)() // auto generate id, will be used by children.aria-describedby & content.id, improve a11y
312
312
 
313
313
  };
314
314
  this.foundation = new _foundation.default(this.adapter);
@@ -24,6 +24,8 @@ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-st
24
24
 
25
25
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
26
26
 
27
+ var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
28
+
27
29
  var _get2 = _interopRequireDefault(require("lodash/get"));
28
30
 
29
31
  var _isString2 = _interopRequireDefault(require("lodash/isString"));
@@ -506,7 +508,14 @@ class TreeNode extends _react.PureComponent {
506
508
  ref: this.setRef
507
509
  }, dragProps));
508
510
  } else {
509
- return customLabel;
511
+ if ((0, _isEmpty2.default)(style)) {
512
+ return customLabel;
513
+ } else {
514
+ // In virtualization, props.style will contain location information
515
+ return /*#__PURE__*/_react.default.cloneElement(customLabel, {
516
+ style: (0, _assign.default)((0, _assign.default)({}, (0, _get2.default)(customLabel, ['props', 'style'])), style)
517
+ });
518
+ }
510
519
  }
511
520
  }
512
521
 
@@ -950,7 +950,7 @@ class TreeSelect extends _baseComponent.default {
950
950
  } // if treeData keys changes, we won't show animation
951
951
 
952
952
 
953
- if (treeData && props.motion && !(0, _isEqual2.default)(new _set.default((0, _keys.default)(newState.keyEntities)), new _set.default((0, _keys.default)(prevState.keyEntities)))) {
953
+ if (treeData && props.motion && !(0, _isEqual2.default)((0, _keys.default)(newState.keyEntities), (0, _keys.default)(prevState.keyEntities))) {
954
954
  if (prevProps && props.motion) {
955
955
  newState.motionKeys = new _set.default([]);
956
956
  newState.motionType = null;
@@ -996,7 +996,11 @@ class TreeSelect extends _baseComponent.default {
996
996
  newState.selectedKeys = (0, _treeUtil.findKeysForValues)((0, _treeUtil.normalizeValue)(props.defaultValue, withObject), valueEntities, isMultiple);
997
997
  } else if (treeData) {
998
998
  // If `treeData` changed, we also need check it
999
- newState.selectedKeys = (0, _treeUtil.findKeysForValues)((0, _treeUtil.normalizeValue)(props.value, withObject) || '', valueEntities, isMultiple);
999
+ if (props.value) {
1000
+ newState.selectedKeys = (0, _treeUtil.findKeysForValues)((0, _treeUtil.normalizeValue)(props.value, withObject) || '', valueEntities, isMultiple);
1001
+ } else {
1002
+ newState.selectedKeys = (0, _treeUtil.updateKeys)(prevState.selectedKeys, keyEntities);
1003
+ }
1000
1004
  }
1001
1005
  } else {
1002
1006
  // checkedKeys: multiple mode controlled || data changed
@@ -1008,7 +1012,11 @@ class TreeSelect extends _baseComponent.default {
1008
1012
  checkedKeyValues = (0, _treeUtil.findKeysForValues)((0, _treeUtil.normalizeValue)(props.defaultValue, withObject), valueEntities, isMultiple);
1009
1013
  } else if (treeData) {
1010
1014
  // If `treeData` changed, we also need check it
1011
- checkedKeyValues = (0, _treeUtil.findKeysForValues)((0, _treeUtil.normalizeValue)(props.value, withObject) || [], valueEntities, isMultiple);
1015
+ if (props.value) {
1016
+ checkedKeyValues = (0, _treeUtil.findKeysForValues)((0, _treeUtil.normalizeValue)(props.value, withObject) || [], valueEntities, isMultiple);
1017
+ } else {
1018
+ checkedKeyValues = (0, _treeUtil.updateKeys)(prevState.checkedKeys, keyEntities);
1019
+ }
1012
1020
  }
1013
1021
 
1014
1022
  if (checkedKeyValues) {
@@ -77,7 +77,6 @@ const getRenderText = function (originEle, rows) {
77
77
  ellipsisContainer.style.zIndex = '-1000'; // clean up css overflow
78
78
 
79
79
  ellipsisContainer.style.textOverflow = 'clip';
80
- ellipsisContainer.style.whiteSpace = 'normal';
81
80
  ellipsisContainer.style.webkitLineClamp = 'none'; // Render fake container
82
81
 
83
82
  _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), ellipsisContainer); // Check if ellipsis in measure div is height enough for content
@@ -259,12 +259,12 @@ class FileCard extends _react.PureComponent {
259
259
  orbitStroke: '#FFF',
260
260
  "aria-label": "uploading file progress"
261
261
  }) : null, showRetry ? retry : null, showReplace && replace, showPicInfo && picInfo, !disabled && /*#__PURE__*/_react.default.createElement("div", {
262
- className: closeCls
262
+ className: closeCls,
263
+ onClick: e => this.onRemove(e)
263
264
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, {
264
265
  tabIndex: 0,
265
266
  role: "button",
266
- size: "extra-small",
267
- onClick: e => this.onRemove(e)
267
+ size: "extra-small"
268
268
  })), this.renderPicValidateMsg());
269
269
  }
270
270