@douyinfe/semi-ui 2.1.6-alpha.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/_base/_story/a11y.jsx +1302 -0
  2. package/_base/_story/a11y.scss +49 -0
  3. package/_base/_story/index.stories.js +3 -1
  4. package/_utils/index.ts +9 -4
  5. package/cascader/__test__/cascader.test.js +221 -0
  6. package/cascader/_story/cascader.stories.js +138 -0
  7. package/cascader/index.tsx +37 -21
  8. package/cascader/item.tsx +4 -2
  9. package/datePicker/__test__/datePicker.test.js +100 -2
  10. package/datePicker/_story/datePicker.stories.js +90 -1
  11. package/datePicker/_story/v2/YearButton.jsx +17 -0
  12. package/datePicker/_story/v2/index.js +1 -0
  13. package/datePicker/datePicker.tsx +3 -0
  14. package/datePicker/monthsGrid.tsx +12 -1
  15. package/datePicker/navigation.tsx +55 -29
  16. package/descriptions/__test__/descriptions.test.js +27 -1
  17. package/descriptions/_story/descriptions.stories.js +52 -2
  18. package/descriptions/item.tsx +1 -1
  19. package/dist/css/semi.css +72 -28
  20. package/dist/css/semi.min.css +1 -1
  21. package/dist/umd/semi-ui.js +1086 -468
  22. package/dist/umd/semi-ui.js.map +1 -1
  23. package/dist/umd/semi-ui.min.js +1 -1
  24. package/dist/umd/semi-ui.min.js.map +1 -1
  25. package/empty/index.tsx +2 -2
  26. package/gulpfile.js +2 -1
  27. package/lib/cjs/_utils/index.d.ts +1 -0
  28. package/lib/cjs/_utils/index.js +12 -5
  29. package/lib/cjs/cascader/index.d.ts +7 -0
  30. package/lib/cjs/cascader/index.js +35 -22
  31. package/lib/cjs/cascader/item.d.ts +2 -0
  32. package/lib/cjs/cascader/item.js +4 -2
  33. package/lib/cjs/datePicker/datePicker.js +4 -0
  34. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -0
  35. package/lib/cjs/datePicker/monthsGrid.js +6 -0
  36. package/lib/cjs/datePicker/navigation.js +47 -7
  37. package/lib/cjs/descriptions/item.js +1 -1
  38. package/lib/cjs/empty/index.d.ts +2 -2
  39. package/lib/cjs/empty/index.js +19 -18
  40. package/lib/cjs/form/baseForm.d.ts +6 -1
  41. package/lib/cjs/form/field.d.ts +6 -1
  42. package/lib/cjs/locale/source/es.d.ts +7 -0
  43. package/lib/cjs/locale/source/es.js +168 -0
  44. package/lib/cjs/rating/item.js +1 -1
  45. package/lib/cjs/select/index.d.ts +9 -0
  46. package/lib/cjs/select/index.js +10 -8
  47. package/lib/cjs/tabs/index.js +3 -7
  48. package/lib/cjs/timeline/item.d.ts +3 -0
  49. package/lib/cjs/timeline/item.js +10 -4
  50. package/lib/cjs/typography/title.d.ts +1 -1
  51. package/lib/cjs/upload/fileCard.d.ts +2 -0
  52. package/lib/cjs/upload/fileCard.js +70 -45
  53. package/lib/cjs/upload/index.d.ts +23 -2
  54. package/lib/cjs/upload/index.js +133 -25
  55. package/lib/cjs/upload/interface.d.ts +3 -0
  56. package/lib/es/_utils/index.d.ts +1 -0
  57. package/lib/es/_utils/index.js +12 -5
  58. package/lib/es/cascader/index.d.ts +7 -0
  59. package/lib/es/cascader/index.js +34 -25
  60. package/lib/es/cascader/item.d.ts +2 -0
  61. package/lib/es/cascader/item.js +4 -2
  62. package/lib/es/datePicker/datePicker.js +4 -0
  63. package/lib/es/datePicker/monthsGrid.d.ts +1 -0
  64. package/lib/es/datePicker/monthsGrid.js +6 -0
  65. package/lib/es/datePicker/navigation.js +48 -8
  66. package/lib/es/descriptions/item.js +1 -1
  67. package/lib/es/empty/index.d.ts +2 -2
  68. package/lib/es/empty/index.js +19 -18
  69. package/lib/es/form/baseForm.d.ts +6 -1
  70. package/lib/es/form/field.d.ts +6 -1
  71. package/lib/es/locale/source/es.d.ts +7 -0
  72. package/lib/es/locale/source/es.js +157 -0
  73. package/lib/es/rating/item.js +1 -1
  74. package/lib/es/select/index.d.ts +9 -0
  75. package/lib/es/select/index.js +14 -8
  76. package/lib/es/tabs/index.js +1 -5
  77. package/lib/es/timeline/item.d.ts +3 -0
  78. package/lib/es/timeline/item.js +9 -4
  79. package/lib/es/typography/title.d.ts +1 -1
  80. package/lib/es/upload/fileCard.d.ts +2 -0
  81. package/lib/es/upload/fileCard.js +69 -44
  82. package/lib/es/upload/index.d.ts +23 -2
  83. package/lib/es/upload/index.js +133 -24
  84. package/lib/es/upload/interface.d.ts +3 -0
  85. package/locale/source/es.ts +160 -0
  86. package/package.json +9 -9
  87. package/popover/Arrow.tsx +1 -1
  88. package/rating/item.tsx +1 -1
  89. package/select/_story/select.stories.js +25 -0
  90. package/select/index.tsx +17 -6
  91. package/tabs/index.tsx +1 -1
  92. package/timeline/_story/timeline.stories.js +50 -0
  93. package/timeline/item.tsx +7 -2
  94. package/upload/__test__/upload.test.js +50 -1
  95. package/upload/fileCard.tsx +110 -95
  96. package/upload/index.tsx +147 -53
  97. package/upload/interface.ts +3 -0
package/empty/index.tsx CHANGED
@@ -60,7 +60,7 @@ export default class Empty extends BaseComponent<EmptyProps, EmptyState> {
60
60
  this.observer && this.observer.disconnect();
61
61
  }
62
62
 
63
- observe(mutationsList: any): void {
63
+ observe = (mutationsList: any): void => {
64
64
  for (const mutation of mutationsList) {
65
65
  if (mutation.type === 'attributes' && mutation.attributeName === 'theme-mode') {
66
66
  this.updateMode();
@@ -68,7 +68,7 @@ export default class Empty extends BaseComponent<EmptyProps, EmptyState> {
68
68
  }
69
69
  }
70
70
 
71
- updateMode(): void {
71
+ updateMode = (): void => {
72
72
  const val = this.body.getAttribute('theme-mode');
73
73
  if (val !== this.state.mode) {
74
74
  this.setState({ mode: val });
package/gulpfile.js CHANGED
@@ -81,7 +81,8 @@ gulp.task('compileScss', function compileScss() {
81
81
  realUrl = url.replace(/~@douyinfe\/semi-foundation/, semiUIPath);
82
82
  }
83
83
  return { url: realUrl };
84
- }
84
+ },
85
+ charset: false
85
86
  }).on('error', sass.logError))
86
87
  .pipe(gulp.dest('lib/es'))
87
88
  .pipe(gulp.dest('lib/cjs'));
@@ -30,6 +30,7 @@ export declare function cloneDeep(value: any, customizer?: (value: any) => void)
30
30
  export declare const getHighLightTextHTML: ({ sourceString, searchWords, option }: GetHighLightTextHTMLProps) => (string | React.ReactElement<{
31
31
  style: Record<string, any>;
32
32
  className: string;
33
+ key: string;
33
34
  }, string | React.JSXElementConstructor<any>>)[];
34
35
  export interface RegisterMediaQueryOption {
35
36
  match?: (e: MediaQueryList | MediaQueryListEvent) => void;
@@ -126,7 +126,7 @@ const getHighLightTextHTML = _ref => {
126
126
  const markEle = option.highlightTag || 'mark';
127
127
  const highlightClassName = option.highlightClassName || '';
128
128
  const highlightStyle = option.highlightStyle || {};
129
- return (0, _map.default)(chunks).call(chunks, chunk => {
129
+ return (0, _map.default)(chunks).call(chunks, (chunk, index) => {
130
130
  const {
131
131
  end,
132
132
  start,
@@ -137,7 +137,8 @@ const getHighLightTextHTML = _ref => {
137
137
  if (highlight) {
138
138
  return /*#__PURE__*/_react.default.createElement(markEle, {
139
139
  style: highlightStyle,
140
- className: highlightClassName
140
+ className: highlightClassName,
141
+ key: text + index
141
142
  }, text);
142
143
  } else {
143
144
  return text;
@@ -173,11 +174,17 @@ const registerMediaQuery = (media, _ref2) => {
173
174
  }
174
175
 
175
176
  callInInit && handlerMediaChange(mediaQueryList);
176
- mediaQueryList.addEventListener('change', handlerMediaChange);
177
- return () => mediaQueryList.removeEventListener('change', handlerMediaChange);
177
+
178
+ if (Object.prototype.hasOwnProperty.call(mediaQueryList, 'addEventListener')) {
179
+ mediaQueryList.addEventListener('change', handlerMediaChange);
180
+ return () => mediaQueryList.removeEventListener('change', handlerMediaChange);
181
+ }
182
+
183
+ mediaQueryList.addListener(handlerMediaChange);
184
+ return () => mediaQueryList.removeListener(handlerMediaChange);
178
185
  }
179
186
 
180
- return null;
187
+ return () => undefined;
181
188
  };
182
189
  /**
183
190
  * Determine whether the incoming element is a built-in icon
@@ -105,14 +105,18 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
105
105
  showRestTagsPopover: PropTypes.Requireable<boolean>;
106
106
  restTagsPopoverProps: PropTypes.Requireable<object>;
107
107
  max: PropTypes.Requireable<number>;
108
+ separator: PropTypes.Requireable<string>;
108
109
  onExceed: PropTypes.Requireable<(...args: any[]) => any>;
109
110
  onClear: PropTypes.Requireable<(...args: any[]) => any>;
110
111
  loadData: PropTypes.Requireable<(...args: any[]) => any>;
111
112
  onLoad: PropTypes.Requireable<(...args: any[]) => any>;
112
113
  loadedKeys: PropTypes.Requireable<any[]>;
113
114
  disableStrictly: PropTypes.Requireable<boolean>;
115
+ leafOnly: PropTypes.Requireable<boolean>;
116
+ enableLeafClick: PropTypes.Requireable<boolean>;
114
117
  };
115
118
  static defaultProps: {
119
+ leafOnly: boolean;
116
120
  arrowIcon: JSX.Element;
117
121
  stopPropagation: boolean;
118
122
  motion: boolean;
@@ -129,6 +133,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
129
133
  filterLeafOnly: boolean;
130
134
  showRestTagsPopover: boolean;
131
135
  restTagsPopoverProps: {};
136
+ separator: string;
132
137
  size: "default";
133
138
  treeNodeFilterProp: "label";
134
139
  displayProp: "label";
@@ -138,6 +143,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
138
143
  onClear: (...args: any[]) => void;
139
144
  onDropdownVisibleChange: (...args: any[]) => void;
140
145
  onListScroll: (...args: any[]) => void;
146
+ enableLeafClick: boolean;
141
147
  };
142
148
  options: any;
143
149
  isEmpty: boolean;
@@ -145,6 +151,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
145
151
  triggerRef: React.RefObject<HTMLDivElement>;
146
152
  optionsRef: React.RefObject<any>;
147
153
  clickOutsideHandler: any;
154
+ mergeType: string;
148
155
  constructor(props: CascaderProps);
149
156
  get adapter(): CascaderAdapter;
150
157
  static getDerivedStateFromProps(props: CascaderProps, prevState: CascaderState): Partial<CascaderState>;
@@ -28,6 +28,8 @@ var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-st
28
28
 
29
29
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
30
30
 
31
+ var _flatten2 = _interopRequireDefault(require("lodash/flatten"));
32
+
31
33
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
32
34
 
33
35
  var _isNumber2 = _interopRequireDefault(require("lodash/isNumber"));
@@ -175,6 +177,7 @@ class Cascader extends _baseComponent.default {
175
177
  dropdownStyle,
176
178
  loadData,
177
179
  emptyContent,
180
+ separator,
178
181
  topSlot,
179
182
  bottomSlot,
180
183
  showNext,
@@ -191,6 +194,7 @@ class Cascader extends _baseComponent.default {
191
194
  }, topSlot, /*#__PURE__*/_react.default.createElement(_item.default, {
192
195
  activeKeys: activeKeys,
193
196
  selectedKeys: selectedKeys,
197
+ separator: separator,
194
198
  loadedKeys: loadedKeys,
195
199
  loadingKeys: loadingKeys,
196
200
  onItemClick: this.handleItemClick,
@@ -243,9 +247,9 @@ class Cascader extends _baseComponent.default {
243
247
  } = this.props;
244
248
  const {
245
249
  checkedKeys,
246
- mergedCheckedKeys
250
+ resolvedCheckedKeys
247
251
  } = this.state;
248
- const realKeys = autoMergeValue ? mergedCheckedKeys : checkedKeys;
252
+ const realKeys = this.mergeType === _constants.strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
249
253
  const displayTag = [];
250
254
  const hiddenTag = [];
251
255
  (0, _forEach.default)(_context2 = [...realKeys]).call(_context2, (checkedKey, idx) => {
@@ -333,20 +337,23 @@ class Cascader extends _baseComponent.default {
333
337
  const {
334
338
  disabled,
335
339
  triggerRender,
336
- multiple,
337
- autoMergeValue
340
+ multiple
338
341
  } = this.props;
339
342
  const {
340
343
  selectedKeys,
341
344
  inputValue,
342
345
  inputPlaceHolder,
343
- mergedCheckedKeys,
346
+ resolvedCheckedKeys,
344
347
  checkedKeys
345
348
  } = this.state;
346
349
  let realValue;
347
350
 
348
351
  if (multiple) {
349
- realValue = autoMergeValue ? mergedCheckedKeys : checkedKeys;
352
+ if (this.mergeType === _constants.strings.NONE_MERGE_TYPE) {
353
+ realValue = checkedKeys;
354
+ } else {
355
+ realValue = resolvedCheckedKeys;
356
+ }
350
357
  } else {
351
358
  realValue = [...selectedKeys][0];
352
359
  }
@@ -526,8 +533,8 @@ class Cascader extends _baseComponent.default {
526
533
  /* Key of half checked node, when multiple */
527
534
  halfCheckedKeys: new _set.default([]),
528
535
 
529
- /* Auto merged checkedKeys, when multiple */
530
- mergedCheckedKeys: new _set.default([]),
536
+ /* Auto merged checkedKeys or leaf checkedKeys, when multiple */
537
+ resolvedCheckedKeys: new _set.default([]),
531
538
 
532
539
  /* Keys of loaded item */
533
540
  loadedKeys: new _set.default(),
@@ -540,6 +547,7 @@ class Cascader extends _baseComponent.default {
540
547
  };
541
548
  this.options = {};
542
549
  this.isEmpty = false;
550
+ this.mergeType = (0, _util.calcMergeType)(props.autoMergeValue, props.leafOnly);
543
551
  this.inputRef = /*#__PURE__*/_react.default.createRef();
544
552
  this.triggerRef = /*#__PURE__*/_react.default.createRef();
545
553
  this.optionsRef = /*#__PURE__*/_react.default.createRef();
@@ -684,7 +692,9 @@ class Cascader extends _baseComponent.default {
684
692
  multiple,
685
693
  value,
686
694
  defaultValue,
687
- onChangeWithObject
695
+ onChangeWithObject,
696
+ leafOnly,
697
+ autoMergeValue
688
698
  } = props;
689
699
  const {
690
700
  prevProps
@@ -745,22 +755,20 @@ class Cascader extends _baseComponent.default {
745
755
  realKeys = formatKeys;
746
756
  }
747
757
 
748
- let checkedKeys = new _set.default([]);
749
- let halfCheckedKeys = new _set.default([]);
750
- (0, _forEach.default)(realKeys).call(realKeys, v => {
751
- const calRes = (0, _treeUtil.calcCheckedKeys)(v, keyEntities);
752
- checkedKeys = new _set.default([...checkedKeys, ...calRes.checkedKeys]);
753
- halfCheckedKeys = new _set.default([...halfCheckedKeys, ...calRes.halfCheckedKeys]);
754
- }); // disableStrictly
758
+ const calRes = (0, _treeUtil.calcCheckedKeys)((0, _flatten2.default)(realKeys), keyEntities);
759
+ const checkedKeys = new _set.default(calRes.checkedKeys);
760
+ const halfCheckedKeys = new _set.default(calRes.halfCheckedKeys); // disableStrictly
755
761
 
756
762
  if (props.disableStrictly) {
757
763
  newState.disabledKeys = (0, _treeUtil.calcDisabledKeys)(keyEntities);
758
764
  }
759
765
 
766
+ const isLeafOnlyMerge = (0, _util.calcMergeType)(autoMergeValue, leafOnly) === _constants.strings.LEAF_ONLY_MERGE_TYPE;
767
+
760
768
  newState.prevProps = props;
761
769
  newState.checkedKeys = checkedKeys;
762
770
  newState.halfCheckedKeys = halfCheckedKeys;
763
- newState.mergedCheckedKeys = new _set.default((0, _treeUtil.normalizeKeyList)(checkedKeys, keyEntities));
771
+ newState.resolvedCheckedKeys = new _set.default((0, _treeUtil.normalizeKeyList)(checkedKeys, keyEntities, isLeafOnlyMerge));
764
772
  }
765
773
  }
766
774
 
@@ -794,7 +802,6 @@ class Cascader extends _baseComponent.default {
794
802
  const {
795
803
  size,
796
804
  disabled,
797
- autoMergeValue,
798
805
  placeholder,
799
806
  maxTagCount,
800
807
  showRestTagsPopover,
@@ -804,11 +811,11 @@ class Cascader extends _baseComponent.default {
804
811
  inputValue,
805
812
  checkedKeys,
806
813
  keyEntities,
807
- mergedCheckedKeys
814
+ resolvedCheckedKeys
808
815
  } = this.state;
809
816
  const tagInputcls = (0, _classnames.default)("".concat(prefixcls, "-tagInput-wrapper"));
810
817
  const tagValue = [];
811
- const realKeys = autoMergeValue ? mergedCheckedKeys : checkedKeys;
818
+ const realKeys = this.mergeType === _constants.strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
812
819
  (0, _forEach.default)(_context3 = [...realKeys]).call(_context3, checkedKey => {
813
820
  if (!(0, _isEmpty2.default)(keyEntities[checkedKey])) {
814
821
  tagValue.push(keyEntities[checkedKey].valuePath);
@@ -956,14 +963,18 @@ Cascader.propTypes = {
956
963
  showRestTagsPopover: _propTypes.default.bool,
957
964
  restTagsPopoverProps: _propTypes.default.object,
958
965
  max: _propTypes.default.number,
966
+ separator: _propTypes.default.string,
959
967
  onExceed: _propTypes.default.func,
960
968
  onClear: _propTypes.default.func,
961
969
  loadData: _propTypes.default.func,
962
970
  onLoad: _propTypes.default.func,
963
971
  loadedKeys: _propTypes.default.array,
964
- disableStrictly: _propTypes.default.bool
972
+ disableStrictly: _propTypes.default.bool,
973
+ leafOnly: _propTypes.default.bool,
974
+ enableLeafClick: _propTypes.default.bool
965
975
  };
966
976
  Cascader.defaultProps = {
977
+ leafOnly: false,
967
978
  arrowIcon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, null),
968
979
  stopPropagation: true,
969
980
  motion: true,
@@ -980,6 +991,7 @@ Cascader.defaultProps = {
980
991
  filterLeafOnly: true,
981
992
  showRestTagsPopover: false,
982
993
  restTagsPopoverProps: {},
994
+ separator: ' / ',
983
995
  size: 'default',
984
996
  treeNodeFilterProp: 'label',
985
997
  displayProp: 'label',
@@ -988,7 +1000,8 @@ Cascader.defaultProps = {
988
1000
  onExceed: _noop2.default,
989
1001
  onClear: _noop2.default,
990
1002
  onDropdownVisibleChange: _noop2.default,
991
- onListScroll: _noop2.default
1003
+ onListScroll: _noop2.default,
1004
+ enableLeafClick: false
992
1005
  };
993
1006
  var _default = Cascader;
994
1007
  exports.default = _default;
@@ -33,6 +33,7 @@ export interface CascaderItemProps {
33
33
  emptyContent: React.ReactNode;
34
34
  loadData: (selectOptions: CascaderData[]) => Promise<void>;
35
35
  data: Array<Data | Entity>;
36
+ separator: string;
36
37
  multiple: boolean;
37
38
  checkedKeys: Set<string>;
38
39
  halfCheckedKeys: Set<string>;
@@ -50,6 +51,7 @@ export default class Item extends PureComponent<CascaderItemProps> {
50
51
  checkedKeys: PropTypes.Requireable<object>;
51
52
  halfCheckedKeys: PropTypes.Requireable<object>;
52
53
  onItemCheckboxClick: PropTypes.Requireable<(...args: any[]) => any>;
54
+ separator: PropTypes.Requireable<string>;
53
55
  keyword: PropTypes.Requireable<string>;
54
56
  };
55
57
  static defaultProps: {
@@ -151,7 +151,8 @@ class Item extends _react.PureComponent {
151
151
  this.highlight = searchText => {
152
152
  const content = [];
153
153
  const {
154
- keyword
154
+ keyword,
155
+ separator
155
156
  } = this.props;
156
157
  (0, _forEach.default)(searchText).call(searchText, (item, idx) => {
157
158
  if (typeof item === 'string' && (0, _includes2.default)(item, keyword)) {
@@ -174,7 +175,7 @@ class Item extends _react.PureComponent {
174
175
  }
175
176
 
176
177
  if (idx !== searchText.length - 1) {
177
- content.push(' / ');
178
+ content.push(separator);
178
179
  }
179
180
  });
180
181
  return content;
@@ -349,6 +350,7 @@ Item.propTypes = {
349
350
  checkedKeys: _propTypes.default.object,
350
351
  halfCheckedKeys: _propTypes.default.object,
351
352
  onItemCheckboxClick: _propTypes.default.func,
353
+ separator: _propTypes.default.string,
352
354
  keyword: _propTypes.default.string
353
355
  };
354
356
  Item.defaultProps = {
@@ -278,6 +278,10 @@ class DatePicker extends _baseComponent.default {
278
278
  }
279
279
 
280
280
  this.clickOutSideHandler = e => {
281
+ if (this.adapter.needConfirm()) {
282
+ return;
283
+ }
284
+
281
285
  const triggerEl = this.triggerElRef && this.triggerElRef.current;
282
286
  const panelEl = this.panelRef && this.panelRef.current;
283
287
  const isInTrigger = triggerEl && triggerEl.contains(e.target);
@@ -81,6 +81,7 @@ export default class MonthsGrid extends BaseComponent<MonthsGridProps, MonthsGri
81
81
  renderMonth(month: Date, panelType: PanelType): JSX.Element;
82
82
  handleWeeksRowNumChange: (weeksRowNum: number, panelType: PanelType) => void;
83
83
  reselect: () => void;
84
+ getYAMOpenType: () => "left" | "right" | "none" | "both";
84
85
  renderTimePicker(panelType: PanelType, panelDetail: MonthInfo): JSX.Element;
85
86
  renderYearAndMonth(panelType: PanelType, panelDetail: MonthInfo): JSX.Element;
86
87
  renderSwitch(panelType: PanelType): JSX.Element;
@@ -157,6 +157,10 @@ class MonthsGrid extends _baseComponent.default {
157
157
  });
158
158
  };
159
159
 
160
+ this.getYAMOpenType = () => {
161
+ return this.foundation.getYAMOpenType();
162
+ };
163
+
160
164
  let nowDate = (0, _isArray.default)(props.defaultPickerValue) ? props.defaultPickerValue[0] : props.defaultPickerValue;
161
165
  const validFormat = props.format || (0, _getDefaultFormatToken.getDefaultFormatTokenByType)(props.type);
162
166
 
@@ -644,9 +648,11 @@ class MonthsGrid extends _baseComponent.default {
644
648
  content = 'year month';
645
649
  }
646
650
 
651
+ const yearOpenType = this.getYAMOpenType();
647
652
  return /*#__PURE__*/_react.default.createElement("div", {
648
653
  className: monthGridCls,
649
654
  "x-type": type,
655
+ "x-panel-yearandmonth-open-type": yearOpenType,
650
656
  ref: current => this.cacheRefCurrent('monthGrid', current)
651
657
  }, content);
652
658
  }
@@ -48,6 +48,8 @@ class Navigation extends _react.PureComponent {
48
48
  onMonthClick,
49
49
  onNextMonth,
50
50
  onPrevMonth,
51
+ onPrevYear,
52
+ onNextYear,
51
53
  density,
52
54
  shouldBimonthSwitch,
53
55
  panelType
@@ -55,37 +57,75 @@ class Navigation extends _react.PureComponent {
55
57
  const btnTheme = 'borderless';
56
58
  const iconBtnSize = density === 'compact' ? 'default' : 'large';
57
59
  const btnNoHorizontalPadding = true;
58
- const buttonSize = density === 'compact' ? 'small' : 'default'; // Enable dual-panel synchronous switching, and the current panel is the left panel
60
+ const buttonSize = density === 'compact' ? 'small' : 'default';
61
+ const isLeftPanel = panelType === _constants.strings.PANEL_TYPE_LEFT;
62
+ const isRightPanel = panelType === _constants.strings.PANEL_TYPE_RIGHT; // syncSwitchMonth and the current panel is the left
59
63
 
60
- const bimonthSwitchWithLeftPanel = shouldBimonthSwitch && panelType === _constants.strings.PANEL_TYPE_LEFT; // Enable dual-panel synchronous switching, and the current panel is the right panel
64
+ const hiddenLeftPanelRightButtons = shouldBimonthSwitch && isLeftPanel; // syncSwitchMonth and the current panel is the right
65
+
66
+ const hiddenRightPanelLeftButtons = shouldBimonthSwitch && isRightPanel; // `visibility: hidden` will keep the icon in position
67
+
68
+ const leftButtonStyle = {};
69
+ const rightButtonStyle = {};
70
+
71
+ if (hiddenRightPanelLeftButtons) {
72
+ leftButtonStyle.visibility = 'hidden';
73
+ }
74
+
75
+ if (hiddenLeftPanelRightButtons) {
76
+ rightButtonStyle.visibility = 'hidden';
77
+ }
61
78
 
62
- const bimonthSwitchWithRightPanel = shouldBimonthSwitch && panelType === _constants.strings.PANEL_TYPE_RIGHT;
63
79
  const ref = forwardRef || this.navRef;
64
80
  return /*#__PURE__*/_react.default.createElement("div", {
65
81
  className: prefixCls,
66
82
  ref: ref
67
- }, !bimonthSwitchWithRightPanel && /*#__PURE__*/_react.default.createElement(_iconButton.default, {
83
+ }, /*#__PURE__*/_react.default.createElement(_iconButton.default, {
84
+ key: "double-chevron-left",
85
+ icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconDoubleChevronLeft, {
86
+ size: iconBtnSize
87
+ }),
88
+ size: buttonSize,
89
+ theme: btnTheme,
90
+ noHorizontalPadding: btnNoHorizontalPadding,
91
+ onClick: onPrevYear,
92
+ style: leftButtonStyle
93
+ }), /*#__PURE__*/_react.default.createElement(_iconButton.default, {
94
+ key: "chevron-left",
68
95
  icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronLeft, {
69
96
  size: iconBtnSize
70
97
  }),
71
98
  size: buttonSize,
72
99
  onClick: onPrevMonth,
73
100
  theme: btnTheme,
74
- noHorizontalPadding: btnNoHorizontalPadding
101
+ noHorizontalPadding: btnNoHorizontalPadding,
102
+ style: leftButtonStyle
75
103
  }), /*#__PURE__*/_react.default.createElement("div", {
76
104
  className: "".concat(prefixCls, "-month")
77
105
  }, /*#__PURE__*/_react.default.createElement(_button.default, {
78
106
  onClick: onMonthClick,
79
107
  theme: btnTheme,
80
108
  size: buttonSize
81
- }, /*#__PURE__*/_react.default.createElement("span", null, monthText))), !bimonthSwitchWithLeftPanel && /*#__PURE__*/_react.default.createElement(_iconButton.default, {
109
+ }, /*#__PURE__*/_react.default.createElement("span", null, monthText))), /*#__PURE__*/_react.default.createElement(_iconButton.default, {
110
+ key: "chevron-right",
82
111
  icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronRight, {
83
112
  size: iconBtnSize
84
113
  }),
85
114
  size: buttonSize,
86
115
  onClick: onNextMonth,
87
116
  theme: btnTheme,
88
- noHorizontalPadding: btnNoHorizontalPadding
117
+ noHorizontalPadding: btnNoHorizontalPadding,
118
+ style: rightButtonStyle
119
+ }), /*#__PURE__*/_react.default.createElement(_iconButton.default, {
120
+ key: "double-chevron-right",
121
+ icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconDoubleChevronRight, {
122
+ size: iconBtnSize
123
+ }),
124
+ size: buttonSize,
125
+ theme: btnTheme,
126
+ noHorizontalPadding: btnNoHorizontalPadding,
127
+ onClick: onNextYear,
128
+ style: rightButtonStyle
89
129
  }));
90
130
  }
91
131
 
@@ -60,7 +60,7 @@ class Item extends _react.PureComponent {
60
60
  className: "".concat(prefixCls, "-item")
61
61
  }, /*#__PURE__*/_react.default.createElement("span", {
62
62
  className: keyCls
63
- }, "".concat(itemKey, ":")), /*#__PURE__*/_react.default.createElement("span", {
63
+ }, itemKey, ":"), /*#__PURE__*/_react.default.createElement("span", {
64
64
  className: valCls
65
65
  }, typeof children === 'function' ? children() : children))) : /*#__PURE__*/_react.default.createElement("tr", {
66
66
  className: className,
@@ -31,8 +31,8 @@ export default class Empty extends BaseComponent<EmptyProps, EmptyState> {
31
31
  constructor(props: EmptyProps);
32
32
  componentDidMount(): void;
33
33
  componentWillUnmount(): void;
34
- observe(mutationsList: any): void;
35
- updateMode(): void;
34
+ observe: (mutationsList: any) => void;
35
+ updateMode: () => void;
36
36
  render(): JSX.Element;
37
37
  }
38
38
  export {};
@@ -31,6 +31,25 @@ const prefixCls = _constants.cssClasses.PREFIX;
31
31
  class Empty extends _baseComponent.default {
32
32
  constructor(props) {
33
33
  super(props);
34
+
35
+ this.observe = mutationsList => {
36
+ for (const mutation of mutationsList) {
37
+ if (mutation.type === 'attributes' && mutation.attributeName === 'theme-mode') {
38
+ this.updateMode();
39
+ }
40
+ }
41
+ };
42
+
43
+ this.updateMode = () => {
44
+ const val = this.body.getAttribute('theme-mode');
45
+
46
+ if (val !== this.state.mode) {
47
+ this.setState({
48
+ mode: val
49
+ });
50
+ }
51
+ };
52
+
34
53
  this.state = {
35
54
  mode: null
36
55
  };
@@ -54,24 +73,6 @@ class Empty extends _baseComponent.default {
54
73
  this.observer && this.observer.disconnect();
55
74
  }
56
75
 
57
- observe(mutationsList) {
58
- for (const mutation of mutationsList) {
59
- if (mutation.type === 'attributes' && mutation.attributeName === 'theme-mode') {
60
- this.updateMode();
61
- }
62
- }
63
- }
64
-
65
- updateMode() {
66
- const val = this.body.getAttribute('theme-mode');
67
-
68
- if (val !== this.state.mode) {
69
- this.setState({
70
- mode: val
71
- });
72
- }
73
- }
74
-
75
76
  render() {
76
77
  var _context;
77
78
 
@@ -90,6 +90,11 @@ declare class Form extends BaseComponent<BaseFormProps, BaseFormState> {
90
90
  suffix?: React.ReactNode;
91
91
  prefix?: React.ReactNode;
92
92
  insetLabel?: React.ReactNode;
93
+ inputProps?: import("utility-types").Subtract<import("../input").InputProps, {
94
+ value?: React.ReactText;
95
+ onFocus?: (e: React.FocusEvent<HTMLInputElement, Element>) => void;
96
+ onChange?: (value: string, e: React.ChangeEvent<HTMLInputElement>) => void;
97
+ }>;
93
98
  showClear?: boolean;
94
99
  showArrow?: boolean;
95
100
  renderSelectedItem?: import("../select").RenderSelectedItemFn;
@@ -111,7 +116,7 @@ declare class Form extends BaseComponent<BaseFormProps, BaseFormState> {
111
116
  onBlur?: (e: React.FocusEvent<Element, Element>) => void;
112
117
  onListScroll?: (e: React.UIEvent<HTMLDivElement, UIEvent>) => void;
113
118
  children?: React.ReactNode;
114
- } & Pick<import("../tooltip").TooltipProps, "getPopupContainer" | "stopPropagation" | "spacing" | "mouseEnterDelay" | "autoAdjustOverflow" | "mouseLeaveDelay" | "motion"> & React.RefAttributes<any> & import("./interface").CommonFieldProps, import("./interface").CommonexcludeType>> & import("./interface").SelectStatic;
119
+ } & Pick<import("../tooltip").TooltipProps, "stopPropagation" | "getPopupContainer" | "spacing" | "mouseEnterDelay" | "autoAdjustOverflow" | "mouseLeaveDelay" | "motion"> & React.RefAttributes<any> & import("./interface").CommonFieldProps, import("./interface").CommonexcludeType>> & import("./interface").SelectStatic;
115
120
  static Checkbox: React.ComponentType<import("utility-types").Subtract<import("./interface").CommonFieldProps, import("./interface").RadioCheckboxExcludeProps> & import("../checkbox").CheckboxProps & import("./interface").RCIncludeType>;
116
121
  static CheckboxGroup: React.ComponentType<import("utility-types").Subtract<import("../checkbox").CheckboxGroupProps, import("./interface").CommonexcludeType> & import("./interface").CommonFieldProps>;
117
122
  static Radio: React.ComponentType<import("utility-types").Subtract<import("./interface").CommonFieldProps, import("./interface").RadioCheckboxExcludeProps> & import("../radio").RadioProps & import("./interface").RCIncludeType>;
@@ -40,6 +40,11 @@ declare const FormSelect: import("react").ComponentType<import("utility-types").
40
40
  suffix?: import("react").ReactNode;
41
41
  prefix?: import("react").ReactNode;
42
42
  insetLabel?: import("react").ReactNode;
43
+ inputProps?: import("utility-types").Subtract<import("../input/index").InputProps, {
44
+ value?: import("react").ReactText;
45
+ onFocus?: (e: import("react").FocusEvent<HTMLInputElement, Element>) => void;
46
+ onChange?: (value: string, e: import("react").ChangeEvent<HTMLInputElement>) => void;
47
+ }>;
43
48
  showClear?: boolean;
44
49
  showArrow?: boolean;
45
50
  renderSelectedItem?: import("../select/index").RenderSelectedItemFn;
@@ -61,7 +66,7 @@ declare const FormSelect: import("react").ComponentType<import("utility-types").
61
66
  onBlur?: (e: import("react").FocusEvent<Element, Element>) => void;
62
67
  onListScroll?: (e: import("react").UIEvent<HTMLDivElement, UIEvent>) => void;
63
68
  children?: import("react").ReactNode;
64
- } & Pick<import("../tooltip").TooltipProps, "getPopupContainer" | "stopPropagation" | "spacing" | "mouseEnterDelay" | "autoAdjustOverflow" | "mouseLeaveDelay" | "motion"> & import("react").RefAttributes<any> & import("./interface").CommonFieldProps, import("./interface").CommonexcludeType>> & import("./interface").SelectStatic;
69
+ } & Pick<import("../tooltip").TooltipProps, "stopPropagation" | "getPopupContainer" | "spacing" | "mouseEnterDelay" | "autoAdjustOverflow" | "mouseLeaveDelay" | "motion"> & import("react").RefAttributes<any> & import("./interface").CommonFieldProps, import("./interface").CommonexcludeType>> & import("./interface").SelectStatic;
65
70
  declare const FormCheckboxGroup: import("react").ComponentType<import("utility-types").Subtract<import("../checkbox/checkboxGroup").CheckboxGroupProps, import("./interface").CommonexcludeType> & import("./interface").CommonFieldProps>;
66
71
  declare const FormCheckbox: import("react").ComponentType<import("utility-types").Subtract<import("./interface").CommonFieldProps, import("./interface").RadioCheckboxExcludeProps> & import("../checkbox/checkbox").CheckboxProps & import("./interface").RCIncludeType>;
67
72
  declare const FormRadioGroup: import("react").ComponentType<import("utility-types").Subtract<import("../radio/radioGroup").RadioGroupProps, import("./interface").CommonexcludeType> & import("./interface").CommonFieldProps>;
@@ -0,0 +1,7 @@
1
+ import { Locale } from '../interface';
2
+ /**
3
+ * [i18n-Spanish(es)]
4
+ *
5
+ */
6
+ declare const locale: Locale;
7
+ export default locale;