@douyinfe/semi-ui 2.14.0-beta.1 → 2.15.0-beta.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 (184) hide show
  1. package/autoComplete/index.tsx +0 -1
  2. package/cascader/__test__/cascader.test.js +13 -10
  3. package/cascader/_story/cascader.stories.js +22 -0
  4. package/cascader/index.tsx +53 -35
  5. package/checkbox/checkbox.tsx +1 -0
  6. package/checkbox/checkboxInner.tsx +4 -1
  7. package/datePicker/datePicker.tsx +7 -5
  8. package/dist/css/semi.css +34 -6
  9. package/dist/css/semi.min.css +1 -1
  10. package/dist/umd/semi-ui.js +1332 -572
  11. package/dist/umd/semi-ui.js.map +1 -1
  12. package/dist/umd/semi-ui.min.js +1 -1
  13. package/dist/umd/semi-ui.min.js.map +1 -1
  14. package/dropdown/context.ts +2 -0
  15. package/dropdown/dropdownItem.tsx +2 -1
  16. package/dropdown/dropdownMenu.tsx +24 -1
  17. package/dropdown/index.tsx +10 -2
  18. package/form/_story/form.stories.tsx +32 -17
  19. package/form/hoc/withField.tsx +1 -1
  20. package/form/interface.ts +1 -1
  21. package/input/__test__/input.test.js +31 -0
  22. package/input/_story/input.stories.js +24 -1
  23. package/input/index.tsx +5 -2
  24. package/input/inputGroup.tsx +7 -6
  25. package/inputNumber/index.tsx +5 -3
  26. package/lib/cjs/autoComplete/index.d.ts +0 -1
  27. package/lib/cjs/autoComplete/index.js +0 -1
  28. package/lib/cjs/cascader/index.d.ts +1 -1
  29. package/lib/cjs/cascader/index.js +36 -9
  30. package/lib/cjs/checkbox/checkbox.d.ts +1 -0
  31. package/lib/cjs/checkbox/checkbox.js +2 -1
  32. package/lib/cjs/checkbox/checkboxInner.d.ts +2 -0
  33. package/lib/cjs/checkbox/checkboxInner.js +8 -2
  34. package/lib/cjs/datePicker/datePicker.d.ts +1 -1
  35. package/lib/cjs/datePicker/datePicker.js +21 -6
  36. package/lib/cjs/dropdown/context.d.ts +2 -0
  37. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  38. package/lib/cjs/dropdown/dropdownMenu.d.ts +18 -1
  39. package/lib/cjs/dropdown/dropdownMenu.js +23 -2
  40. package/lib/cjs/dropdown/index.d.ts +4 -0
  41. package/lib/cjs/dropdown/index.js +13 -5
  42. package/lib/cjs/form/baseForm.d.ts +17 -16
  43. package/lib/cjs/form/field.d.ts +17 -16
  44. package/lib/cjs/form/hoc/withField.d.ts +1 -1
  45. package/lib/cjs/form/interface.d.ts +1 -1
  46. package/lib/cjs/input/index.d.ts +2 -1
  47. package/lib/cjs/input/index.js +11 -5
  48. package/lib/cjs/input/inputGroup.js +16 -9
  49. package/lib/cjs/inputNumber/index.d.ts +1 -0
  50. package/lib/cjs/inputNumber/index.js +8 -3
  51. package/lib/cjs/locale/source/de.d.ts +3 -0
  52. package/lib/cjs/locale/source/de.js +165 -0
  53. package/lib/cjs/locale/source/fr.d.ts +3 -0
  54. package/lib/cjs/locale/source/fr.js +165 -0
  55. package/lib/cjs/locale/source/it.d.ts +3 -0
  56. package/lib/cjs/locale/source/it.js +165 -0
  57. package/lib/cjs/modal/ModalContent.d.ts +1 -0
  58. package/lib/cjs/modal/ModalContent.js +17 -4
  59. package/lib/cjs/modal/confirm.d.ts +5 -0
  60. package/lib/cjs/radio/radio.d.ts +2 -0
  61. package/lib/cjs/radio/radio.js +2 -1
  62. package/lib/cjs/radio/radioInner.d.ts +2 -0
  63. package/lib/cjs/radio/radioInner.js +8 -2
  64. package/lib/cjs/rating/index.d.ts +7 -0
  65. package/lib/cjs/rating/index.js +135 -68
  66. package/lib/cjs/rating/item.d.ts +27 -3
  67. package/lib/cjs/rating/item.js +145 -38
  68. package/lib/cjs/select/index.d.ts +2 -0
  69. package/lib/cjs/select/index.js +15 -3
  70. package/lib/cjs/spin/icon.js +1 -1
  71. package/lib/cjs/table/Body/index.js +1 -1
  72. package/lib/cjs/tabs/index.d.ts +1 -0
  73. package/lib/cjs/tabs/index.js +2 -1
  74. package/lib/cjs/tabs/interface.d.ts +1 -0
  75. package/lib/cjs/tag/index.js +4 -5
  76. package/lib/cjs/tag/interface.d.ts +1 -0
  77. package/lib/cjs/tagInput/index.d.ts +2 -0
  78. package/lib/cjs/tagInput/index.js +19 -5
  79. package/lib/cjs/timePicker/TimeInput.d.ts +2 -1
  80. package/lib/cjs/timePicker/TimeInput.js +7 -3
  81. package/lib/cjs/timePicker/TimePicker.d.ts +2 -0
  82. package/lib/cjs/timePicker/TimePicker.js +2 -1
  83. package/lib/cjs/timePicker/index.d.ts +1 -0
  84. package/lib/cjs/tooltip/index.d.ts +2 -0
  85. package/lib/cjs/tooltip/index.js +12 -4
  86. package/lib/cjs/tree/index.d.ts +1 -0
  87. package/lib/cjs/tree/index.js +9 -2
  88. package/lib/cjs/tree/treeNode.js +12 -18
  89. package/lib/cjs/treeSelect/index.js +8 -1
  90. package/lib/cjs/typography/title.d.ts +1 -1
  91. package/lib/es/autoComplete/index.d.ts +0 -1
  92. package/lib/es/autoComplete/index.js +0 -1
  93. package/lib/es/cascader/index.d.ts +1 -1
  94. package/lib/es/cascader/index.js +36 -9
  95. package/lib/es/checkbox/checkbox.d.ts +1 -0
  96. package/lib/es/checkbox/checkbox.js +2 -1
  97. package/lib/es/checkbox/checkboxInner.d.ts +2 -0
  98. package/lib/es/checkbox/checkboxInner.js +8 -2
  99. package/lib/es/datePicker/datePicker.d.ts +1 -1
  100. package/lib/es/datePicker/datePicker.js +21 -6
  101. package/lib/es/dropdown/context.d.ts +2 -0
  102. package/lib/es/dropdown/dropdownItem.js +3 -1
  103. package/lib/es/dropdown/dropdownMenu.d.ts +18 -1
  104. package/lib/es/dropdown/dropdownMenu.js +21 -2
  105. package/lib/es/dropdown/index.d.ts +4 -0
  106. package/lib/es/dropdown/index.js +13 -5
  107. package/lib/es/form/baseForm.d.ts +17 -16
  108. package/lib/es/form/field.d.ts +17 -16
  109. package/lib/es/form/hoc/withField.d.ts +1 -1
  110. package/lib/es/form/interface.d.ts +1 -1
  111. package/lib/es/input/index.d.ts +2 -1
  112. package/lib/es/input/index.js +11 -5
  113. package/lib/es/input/inputGroup.js +15 -9
  114. package/lib/es/inputNumber/index.d.ts +1 -0
  115. package/lib/es/inputNumber/index.js +8 -3
  116. package/lib/es/locale/source/de.d.ts +3 -0
  117. package/lib/es/locale/source/de.js +153 -0
  118. package/lib/es/locale/source/fr.d.ts +3 -0
  119. package/lib/es/locale/source/fr.js +153 -0
  120. package/lib/es/locale/source/it.d.ts +3 -0
  121. package/lib/es/locale/source/it.js +153 -0
  122. package/lib/es/modal/ModalContent.d.ts +1 -0
  123. package/lib/es/modal/ModalContent.js +17 -4
  124. package/lib/es/modal/confirm.d.ts +5 -0
  125. package/lib/es/radio/radio.d.ts +2 -0
  126. package/lib/es/radio/radio.js +2 -1
  127. package/lib/es/radio/radioInner.d.ts +2 -0
  128. package/lib/es/radio/radioInner.js +8 -2
  129. package/lib/es/rating/index.d.ts +7 -0
  130. package/lib/es/rating/index.js +133 -65
  131. package/lib/es/rating/item.d.ts +27 -3
  132. package/lib/es/rating/item.js +145 -32
  133. package/lib/es/select/index.d.ts +2 -0
  134. package/lib/es/select/index.js +15 -3
  135. package/lib/es/spin/icon.js +1 -1
  136. package/lib/es/table/Body/index.js +1 -1
  137. package/lib/es/tabs/index.d.ts +1 -0
  138. package/lib/es/tabs/index.js +2 -1
  139. package/lib/es/tabs/interface.d.ts +1 -0
  140. package/lib/es/tag/index.js +4 -5
  141. package/lib/es/tag/interface.d.ts +1 -0
  142. package/lib/es/tagInput/index.d.ts +2 -0
  143. package/lib/es/tagInput/index.js +19 -5
  144. package/lib/es/timePicker/TimeInput.d.ts +2 -1
  145. package/lib/es/timePicker/TimeInput.js +7 -3
  146. package/lib/es/timePicker/TimePicker.d.ts +2 -0
  147. package/lib/es/timePicker/TimePicker.js +2 -1
  148. package/lib/es/timePicker/index.d.ts +1 -0
  149. package/lib/es/tooltip/index.d.ts +2 -0
  150. package/lib/es/tooltip/index.js +13 -4
  151. package/lib/es/tree/index.d.ts +1 -0
  152. package/lib/es/tree/index.js +9 -2
  153. package/lib/es/tree/treeNode.js +11 -19
  154. package/lib/es/treeSelect/index.js +8 -1
  155. package/lib/es/typography/title.d.ts +1 -1
  156. package/locale/source/de.ts +156 -0
  157. package/locale/source/fr.ts +156 -0
  158. package/locale/source/it.ts +156 -0
  159. package/modal/ModalContent.tsx +7 -4
  160. package/package.json +8 -8
  161. package/radio/radio.tsx +2 -0
  162. package/radio/radioInner.tsx +4 -1
  163. package/rating/__test__/rating.test.js +13 -31
  164. package/rating/_story/rating.stories.js +13 -2
  165. package/rating/index.tsx +63 -18
  166. package/rating/item.tsx +141 -26
  167. package/select/index.tsx +6 -2
  168. package/spin/icon.tsx +1 -1
  169. package/table/Body/index.tsx +1 -1
  170. package/table/_story/v2/FixedVirtualizedEmpty.tsx +76 -0
  171. package/table/_story/v2/index.js +2 -1
  172. package/tabs/index.tsx +1 -0
  173. package/tabs/interface.ts +1 -0
  174. package/tag/index.tsx +2 -3
  175. package/tag/interface.ts +1 -0
  176. package/tagInput/index.tsx +8 -4
  177. package/timePicker/TimeInput.tsx +5 -3
  178. package/timePicker/TimePicker.tsx +2 -0
  179. package/tooltip/index.tsx +7 -2
  180. package/tree/index.tsx +3 -1
  181. package/tree/treeNode.tsx +9 -12
  182. package/treeSelect/index.tsx +4 -1
  183. package/upload/_story/upload.stories.tsx +9 -6
  184. package/yarn-error.log +0 -26235
@@ -169,7 +169,6 @@ class AutoComplete<T extends AutoCompleteItems> extends BaseComponent<AutoComple
169
169
  position: 'bottomLeft' as const,
170
170
  data: [] as [],
171
171
  showClear: false,
172
- disabled: false,
173
172
  size: 'default' as const,
174
173
  onFocus: noop,
175
174
  onSearch: noop,
@@ -427,10 +427,10 @@ describe('Cascader', () => {
427
427
  });
428
428
  expect(
429
429
  cascaderWithSingleFilter
430
- .find(`.${BASE_CLASS_PREFIX}-cascader-search-wrapper .${BASE_CLASS_PREFIX}-input`)
430
+ .find(`.${BASE_CLASS_PREFIX}-cascader-search-wrapper span`)
431
431
  .getDOMNode()
432
- .getAttribute('value')
433
- ).toEqual('亚洲 / 中国');
432
+ .textContent
433
+ ).toEqual('亚洲 / 中国');
434
434
  cascaderWithSingleFilter.unmount();
435
435
 
436
436
  const cascaderWithSingleControlled = render({
@@ -550,10 +550,10 @@ describe('Cascader', () => {
550
550
  expect(searchWrapper.exists()).toEqual(true);
551
551
  expect(
552
552
  searchWrapper
553
- .find('input')
554
- .instance()
555
- .getAttribute('placeholder')
556
- ).toEqual('placeholder');
553
+ .find('span')
554
+ .getDOMNode()
555
+ .textContent
556
+ ).toEqual('placeholder');
557
557
  });
558
558
 
559
559
  it('onSearch', () => {
@@ -563,10 +563,11 @@ describe('Cascader', () => {
563
563
  filterTreeNode: true,
564
564
  onSearch: spyOnSearch,
565
565
  });
566
- const searchWrapper = cascader.find(`.${BASE_CLASS_PREFIX}-cascader-search-wrapper`);
567
566
  let searchValue = '${BASE_CLASS_PREFIX}';
568
567
  let event = { target: { value: searchValue } };
569
- searchWrapper.find('input').simulate('change', event);
568
+ cascader.simulate('click');
569
+ const input = cascader.find(`.${BASE_CLASS_PREFIX}-cascader-selection input`);
570
+ input.simulate('change', event);
570
571
  expect(spyOnSearch.calledOnce).toBe(true);
571
572
  expect(spyOnSearch.calledWithMatch(searchValue)).toBe(true);
572
573
  });
@@ -1228,8 +1229,10 @@ describe('Cascader', () => {
1228
1229
  separator: ' > ',
1229
1230
  defaultOpen: true,
1230
1231
  });
1232
+ const span = cascader.find(`.${BASE_CLASS_PREFIX}-cascader-selection span`);
1233
+ expect(span.getDOMNode().textContent).toEqual('亚洲 > 中国 > 北京');
1234
+ cascader.simulate('click');
1231
1235
  const input = cascader.find(`.${BASE_CLASS_PREFIX}-cascader-selection input`);
1232
- expect(input.props().placeholder).toEqual('亚洲 > 中国 > 北京');
1233
1236
  const event = { target: { value: '中国' } };
1234
1237
  input.simulate('change', event);
1235
1238
  expect(
@@ -396,6 +396,28 @@ Searchable.parameters = {
396
396
  chromatic: { disableSnapshot: false },
397
397
  }
398
398
 
399
+ export const filterTreeNodeAndDisplayRender = () => {
400
+ return (
401
+ <>
402
+ <div>
403
+ filterTreeNode=true,配合displayRender 使用,回显到input的内容也是符合预期
404
+ </div>
405
+ <Cascader
406
+ filterTreeNode
407
+ style={{ width: 300 }}
408
+ treeData={treeData4}
409
+ placeholder="自定义回填时显示数据的格式"
410
+ defaultValue={['zhejiang', 'ningbo', 'jiangbei']}
411
+ displayRender={(item) => {
412
+ console.log('item', item);
413
+ return <div>
414
+ {'已选择:' + item.join(' -> ')}
415
+ </div>;}}
416
+ />
417
+ </>
418
+ );
419
+ };
420
+
399
421
  export const Disabled = () => {
400
422
  return (
401
423
  <div>
@@ -168,6 +168,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
168
168
  disableStrictly: PropTypes.bool,
169
169
  leafOnly: PropTypes.bool,
170
170
  enableLeafClick: PropTypes.bool,
171
+ preventScroll: PropTypes.bool,
171
172
  };
172
173
 
173
174
  static defaultProps = {
@@ -180,7 +181,6 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
180
181
  showClear: false,
181
182
  autoClearSearchValue: true,
182
183
  changeOnSelect: false,
183
- disabled: false,
184
184
  disableStrictly: false,
185
185
  autoMergeValue: true,
186
186
  multiple: false,
@@ -248,6 +248,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
248
248
  loadingKeys: new Set(),
249
249
  /* Mark whether this rendering has triggered asynchronous loading of data */
250
250
  loading: false,
251
+ showInput: false,
251
252
  };
252
253
  this.options = {};
253
254
  this.isEmpty = false;
@@ -268,15 +269,16 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
268
269
  this.setState({ inputPlaceHolder: value });
269
270
  },
270
271
  focusInput: () => {
272
+ const { preventScroll } = this.props;
271
273
  if (this.inputRef && this.inputRef.current) {
272
274
  // TODO: check the reason
273
- (this.inputRef.current as any).focus();
275
+ (this.inputRef.current as any).focus({ preventScroll });
274
276
  }
275
277
  },
276
278
  };
277
279
  const cascaderAdapter: Pick<
278
- CascaderAdapter,
279
- 'registerClickOutsideHandler' | 'unregisterClickOutsideHandler' | 'rePositionDropdown'
280
+ CascaderAdapter,
281
+ 'registerClickOutsideHandler' | 'unregisterClickOutsideHandler' | 'rePositionDropdown'
280
282
  > = {
281
283
  registerClickOutsideHandler: cb => {
282
284
  const clickOutsideHandler = (e: Event) => {
@@ -363,6 +365,14 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
363
365
  },
364
366
  notifyOnExceed: data => this.props.onExceed(data),
365
367
  notifyClear: () => this.props.onClear(),
368
+ toggleInputShow: (showInput: boolean, cb: (...args: any) => void) => {
369
+ this.setState({ showInput }, () => {
370
+ cb();
371
+ });
372
+ },
373
+ updateFocusState: (isFocus: boolean) => {
374
+ this.setState({ isFocus });
375
+ },
366
376
  };
367
377
  }
368
378
 
@@ -542,20 +552,28 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
542
552
  renderInput() {
543
553
  const { size, disabled } = this.props;
544
554
  const inputcls = cls(`${prefixcls}-input`);
545
- const { inputValue, inputPlaceHolder } = this.state;
555
+ const { inputValue, inputPlaceHolder, showInput } = this.state;
546
556
  const inputProps = {
547
557
  disabled,
548
558
  value: inputValue,
549
559
  className: inputcls,
550
560
  onChange: this.handleInputChange,
551
- placeholder: inputPlaceHolder,
552
561
  };
553
562
  const wrappercls = cls({
554
563
  [`${prefixcls}-search-wrapper`]: true,
555
564
  });
565
+
566
+ const displayText = this.renderDisplayText();
567
+ const spanCls = cls({
568
+ [`${prefixcls}-selection-placeholder`]: !displayText,
569
+ [`${prefixcls}-selection-text-hide`]: showInput && inputValue,
570
+ [`${prefixcls}-selection-text-inactive`]: showInput && !inputValue,
571
+ });
572
+
556
573
  return (
557
574
  <div className={wrappercls}>
558
- <Input ref={this.inputRef as any} size={size} {...inputProps} />
575
+ <span className={spanCls}>{displayText ? displayText : inputPlaceHolder}</span>
576
+ {showInput && <Input ref={this.inputRef as any} size={size} {...inputProps} />}
559
577
  </div>
560
578
  );
561
579
  }
@@ -866,40 +884,40 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
866
884
  const { isOpen, isFocus, isInput, checkedKeys } = this.state;
867
885
  const filterable = Boolean(filterTreeNode);
868
886
  const useCustomTrigger = typeof triggerRender === 'function';
869
- const classNames = useCustomTrigger
870
- ? cls(className)
871
- : cls(prefixcls, className, {
872
- [`${prefixcls}-focus`]: isFocus || (isOpen && !isInput),
873
- [`${prefixcls}-disabled`]: disabled,
874
- [`${prefixcls}-single`]: true,
875
- [`${prefixcls}-filterable`]: filterable,
876
- [`${prefixcls}-error`]: validateStatus === 'error',
877
- [`${prefixcls}-warning`]: validateStatus === 'warning',
878
- [`${prefixcls}-small`]: size === 'small',
879
- [`${prefixcls}-large`]: size === 'large',
880
- [`${prefixcls}-with-prefix`]: prefix || insetLabel,
881
- [`${prefixcls}-with-suffix`]: suffix,
882
- });
883
- const mouseEvent = showClear
884
- ? {
885
- onMouseEnter: () => this.handleMouseOver(),
886
- onMouseLeave: () => this.handleMouseLeave(),
887
- }
888
- : {};
887
+ const classNames = useCustomTrigger ?
888
+ cls(className) :
889
+ cls(prefixcls, className, {
890
+ [`${prefixcls}-focus`]: isFocus || (isOpen && !isInput),
891
+ [`${prefixcls}-disabled`]: disabled,
892
+ [`${prefixcls}-single`]: true,
893
+ [`${prefixcls}-filterable`]: filterable,
894
+ [`${prefixcls}-error`]: validateStatus === 'error',
895
+ [`${prefixcls}-warning`]: validateStatus === 'warning',
896
+ [`${prefixcls}-small`]: size === 'small',
897
+ [`${prefixcls}-large`]: size === 'large',
898
+ [`${prefixcls}-with-prefix`]: prefix || insetLabel,
899
+ [`${prefixcls}-with-suffix`]: suffix,
900
+ });
901
+ const mouseEvent = showClear ?
902
+ {
903
+ onMouseEnter: () => this.handleMouseOver(),
904
+ onMouseLeave: () => this.handleMouseLeave(),
905
+ } :
906
+ {};
889
907
  const sectionCls = cls(`${prefixcls}-selection`, {
890
908
  [`${prefixcls}-selection-multiple`]: multiple && !isEmpty(checkedKeys),
891
909
  });
892
910
  const inner = useCustomTrigger
893
911
  ? this.renderCustomTrigger()
894
912
  : [
895
- <Fragment key={'prefix'}>{prefix || insetLabel ? this.renderPrefix() : null}</Fragment>,
896
- <Fragment key={'selection'}>
897
- <div className={sectionCls}>{this.renderSelectContent()}</div>
898
- </Fragment>,
899
- <Fragment key={'clearbtn'}>{this.renderClearBtn()}</Fragment>,
900
- <Fragment key={'suffix'}>{suffix ? this.renderSuffix() : null}</Fragment>,
901
- <Fragment key={'arrow'}>{this.renderArrow()}</Fragment>,
902
- ];
913
+ <Fragment key={'prefix'}>{prefix || insetLabel ? this.renderPrefix() : null}</Fragment>,
914
+ <Fragment key={'selection'}>
915
+ <div className={sectionCls}>{this.renderSelectContent()}</div>
916
+ </Fragment>,
917
+ <Fragment key={'clearbtn'}>{this.renderClearBtn()}</Fragment>,
918
+ <Fragment key={'suffix'}>{suffix ? this.renderSuffix() : null}</Fragment>,
919
+ <Fragment key={'arrow'}>{this.renderArrow()}</Fragment>,
920
+ ];
903
921
  /**
904
922
  * Reasons for disabling the a11y eslint rule:
905
923
  * The following attributes(aria-controls,aria-expanded) will be automatically added by Tooltip, no need to declare here
@@ -67,6 +67,7 @@ class Checkbox extends BaseComponent<CheckboxProps, CheckboxState> {
67
67
  index: PropTypes.number,
68
68
  'aria-label': PropTypes.string,
69
69
  tabIndex: PropTypes.number,
70
+ preventScroll: PropTypes.bool,
70
71
  };
71
72
 
72
73
  static defaultProps = {
@@ -26,6 +26,7 @@ export interface CheckboxInnerProps {
26
26
  focusInner?: boolean;
27
27
  onInputFocus?: (e: any) => void;
28
28
  onInputBlur?: (e: any) => void;
29
+ preventScroll?: boolean;
29
30
  }
30
31
 
31
32
  class CheckboxInner extends PureComponent<CheckboxInnerProps> {
@@ -49,6 +50,7 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
49
50
  focusInner: PropTypes.bool,
50
51
  onInputFocus: PropTypes.func,
51
52
  onInputBlur: PropTypes.func,
53
+ preventScroll: PropTypes.bool,
52
54
  };
53
55
 
54
56
  static defaultProps = {
@@ -61,7 +63,8 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
61
63
  }
62
64
 
63
65
  focus() {
64
- this.inputEntity.focus();
66
+ const { preventScroll } = this.props;
67
+ this.inputEntity.focus({ preventScroll });
65
68
  }
66
69
 
67
70
  render() {
@@ -125,6 +125,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
125
125
  // Callback function for panel date switching
126
126
  onPanelChange: PropTypes.func,
127
127
  rangeSeparator: PropTypes.string,
128
+ preventScroll: PropTypes.bool,
128
129
  };
129
130
 
130
131
  static defaultProps = {
@@ -138,7 +139,6 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
138
139
  type: 'date',
139
140
  size: 'default',
140
141
  density: 'default',
141
- disabled: false,
142
142
  multiple: false,
143
143
  defaultOpen: false,
144
144
  disabledHours: noop,
@@ -272,13 +272,14 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
272
272
  typeIsYearOrMonth: () => ['month', 'year'].includes(this.props.type),
273
273
  setMotionEnd: motionEnd => this.setState({ motionEnd }),
274
274
  setRangeInputFocus: rangeInputFocus => {
275
+ const { preventScroll } = this.props;
275
276
  if (rangeInputFocus !== this.state.rangeInputFocus) {
276
277
  this.setState({ rangeInputFocus });
277
278
  }
278
279
  switch (rangeInputFocus) {
279
280
  case 'rangeStart':
280
281
  const inputStartNode = get(this, 'rangeInputStartRef.current');
281
- inputStartNode && inputStartNode.focus();
282
+ inputStartNode && inputStartNode.focus({ preventScroll });
282
283
  /**
283
284
  * 解决选择完startDate,切换到endDate后panel被立马关闭的问题。
284
285
  * 用户打开panel,选了startDate后,会执行setRangeInputFocus('rangeEnd'),focus到endDateInput,
@@ -298,7 +299,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
298
299
  break;
299
300
  case 'rangeEnd':
300
301
  const inputEndNode = get(this, 'rangeInputEndRef.current');
301
- inputEndNode && inputEndNode.focus();
302
+ inputEndNode && inputEndNode.focus({ preventScroll });
302
303
  /**
303
304
  * 解决选择完startDate,切换到endDate后panel被立马关闭的问题。
304
305
  * 用户打开panel,选了startDate后,会执行setRangeInputFocus('rangeEnd'),focus到endDateInput,
@@ -323,19 +324,20 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
323
324
  couldPanelClosed: () => this.focusRecordsRef.current.rangeStart && this.focusRecordsRef.current.rangeEnd,
324
325
  isEventTarget: e => e && e.target === e.currentTarget,
325
326
  setInsetInputFocus: () => {
327
+ const { preventScroll } = this.props;
326
328
  const { rangeInputFocus } = this.state;
327
329
  switch (rangeInputFocus) {
328
330
  case 'rangeEnd':
329
331
  if (document.activeElement !== this.rangeInputEndRef.current) {
330
332
  const inputEndNode = get(this, 'rangeInputEndRef.current');
331
- inputEndNode && inputEndNode.focus();
333
+ inputEndNode && inputEndNode.focus({ preventScroll });
332
334
  }
333
335
  break;
334
336
  case 'rangeStart':
335
337
  default:
336
338
  if (document.activeElement !== this.rangeInputStartRef.current) {
337
339
  const inputStartNode = get(this, 'rangeInputStartRef.current');
338
- inputStartNode && inputStartNode.focus();
340
+ inputStartNode && inputStartNode.focus({ preventScroll });
339
341
  }
340
342
  break;
341
343
  }
package/dist/css/semi.css CHANGED
@@ -3088,6 +3088,12 @@ body[theme-mode=dark], body .semi-always-dark {
3088
3088
  .semi-cascader-selection .semi-tagInput .semi-input-wrapper-large {
3089
3089
  height: 38px;
3090
3090
  }
3091
+ .semi-cascader-selection-text-inactive {
3092
+ color: var(--semi-color-text-2);
3093
+ }
3094
+ .semi-cascader-selection-text-hide {
3095
+ display: none;
3096
+ }
3091
3097
  .semi-cascader-arrow, .semi-cascader-clearbtn {
3092
3098
  display: inline-flex;
3093
3099
  align-items: center;
@@ -3181,8 +3187,17 @@ body[theme-mode=dark], body .semi-always-dark {
3181
3187
  }
3182
3188
  .semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper {
3183
3189
  width: 100%;
3190
+ height: 30px;
3191
+ display: flex;
3192
+ align-items: center;
3193
+ position: relative;
3184
3194
  }
3185
3195
  .semi-cascader-single.semi-cascader-filterable .semi-cascader-selection .semi-cascader-search-wrapper .semi-input-wrapper {
3196
+ position: absolute;
3197
+ top: 0;
3198
+ left: 0;
3199
+ border: none;
3200
+ background-color: transparent;
3186
3201
  height: 100%;
3187
3202
  width: 100%;
3188
3203
  border: none;
@@ -5032,6 +5047,10 @@ body[theme-mode=dark], body .semi-always-dark {
5032
5047
  .semi-dropdown-item:not(.semi-dropdown-item-active):active {
5033
5048
  background-color: var(--semi-color-fill-1);
5034
5049
  }
5050
+ .semi-dropdown-item:focus-visible {
5051
+ background-color: var(--semi-color-fill-0);
5052
+ outline: 0;
5053
+ }
5035
5054
  .semi-dropdown-item-icon {
5036
5055
  display: inline-flex;
5037
5056
  align-items: center;
@@ -12432,7 +12451,7 @@ body[theme-mode=dark], body .semi-always-dark {
12432
12451
  padding: 12px 24px;
12433
12452
  }
12434
12453
  .semi-list-empty {
12435
- padding: 12px;
12454
+ padding: 12px 0px;
12436
12455
  color: var(--semi-color-text-2);
12437
12456
  width: 100%;
12438
12457
  text-align: center;
@@ -14625,10 +14644,15 @@ body[theme-mode=dark], body .semi-always-dark {
14625
14644
  margin: 0px;
14626
14645
  padding: 0px;
14627
14646
  color: rgba(var(--semi-yellow-5), 1);
14628
- font-size: 20px;
14629
- line-height: unset;
14630
14647
  list-style: none;
14631
14648
  outline: none;
14649
+ border-radius: 3px;
14650
+ }
14651
+ .semi-rating-focus {
14652
+ outline: 2px solid var(--semi-color-primary-light-active);
14653
+ }
14654
+ .semi-rating-no-focus {
14655
+ outline: none;
14632
14656
  }
14633
14657
  .semi-rating-disabled .semi-rating-star {
14634
14658
  cursor: default;
@@ -14648,12 +14672,12 @@ body[theme-mode=dark], body .semi-always-dark {
14648
14672
  .semi-rating-star:not(:last-child) {
14649
14673
  margin-right: 6px;
14650
14674
  }
14651
- .semi-rating-star > div:focus {
14652
- outline: 0;
14653
- }
14654
14675
  .semi-rating-star > div:hover, .semi-rating-star > div:focus {
14655
14676
  transform: scale(1.1);
14656
14677
  }
14678
+ .semi-rating-star > div.semi-rating-star-disabled {
14679
+ transform: none;
14680
+ }
14657
14681
  .semi-rating-star-small {
14658
14682
  width: 16px;
14659
14683
  height: 16px;
@@ -14666,6 +14690,10 @@ body[theme-mode=dark], body .semi-always-dark {
14666
14690
  }
14667
14691
  .semi-rating-star-wrapper {
14668
14692
  position: relative;
14693
+ overflow: hidden;
14694
+ border-radius: 3px;
14695
+ width: 100%;
14696
+ height: 100%;
14669
14697
  }
14670
14698
  .semi-rating-star-first, .semi-rating-star-second {
14671
14699
  color: var(--semi-color-fill-0);