@douyinfe/semi-ui 2.4.1 → 2.6.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 (138) hide show
  1. package/calendar/monthCalendar.tsx +14 -13
  2. package/cascader/__test__/cascader.test.js +24 -0
  3. package/cascader/_story/cascader.stories.js +73 -0
  4. package/cascader/index.tsx +26 -5
  5. package/cascader/item.tsx +25 -5
  6. package/datePicker/_story/v2/FixInputRangeFocus.jsx +25 -0
  7. package/datePicker/_story/v2/index.js +2 -1
  8. package/datePicker/dateInput.tsx +8 -5
  9. package/datePicker/datePicker.tsx +9 -1
  10. package/datePicker/month.tsx +14 -7
  11. package/datePicker/monthsGrid.tsx +17 -5
  12. package/datePicker/navigation.tsx +8 -4
  13. package/datePicker/quickControl.tsx +1 -0
  14. package/datePicker/yearAndMonth.tsx +1 -1
  15. package/dist/css/semi.css +71 -35
  16. package/dist/css/semi.min.css +1 -1
  17. package/dist/umd/semi-ui.js +696 -263
  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/form/__test__/formApi.test.js +182 -0
  22. package/form/_story/FormApi/arrayDemo.jsx +4 -7
  23. package/form/_story/Layout/slotDemo.jsx +2 -2
  24. package/form/_story/demo.jsx +18 -1
  25. package/form/_story/form.stories.js +6 -6
  26. package/form/baseForm.tsx +2 -2
  27. package/form/hoc/withField.tsx +1 -1
  28. package/lib/cjs/_base/base.css +5 -5
  29. package/lib/cjs/autoComplete/index.d.ts +1 -1
  30. package/lib/cjs/calendar/monthCalendar.js +21 -5
  31. package/lib/cjs/cascader/index.d.ts +9 -2
  32. package/lib/cjs/cascader/index.js +20 -1
  33. package/lib/cjs/cascader/item.d.ts +6 -2
  34. package/lib/cjs/cascader/item.js +33 -4
  35. package/lib/cjs/datePicker/dateInput.d.ts +0 -2
  36. package/lib/cjs/datePicker/dateInput.js +17 -6
  37. package/lib/cjs/datePicker/datePicker.js +19 -12
  38. package/lib/cjs/datePicker/month.d.ts +1 -0
  39. package/lib/cjs/datePicker/month.js +18 -2
  40. package/lib/cjs/datePicker/monthsGrid.js +16 -4
  41. package/lib/cjs/datePicker/navigation.js +8 -0
  42. package/lib/cjs/datePicker/quickControl.js +1 -0
  43. package/lib/cjs/datePicker/yearAndMonth.js +1 -0
  44. package/lib/cjs/dropdown/index.d.ts +1 -1
  45. package/lib/cjs/form/baseForm.d.ts +1 -1
  46. package/lib/cjs/form/baseForm.js +2 -2
  47. package/lib/cjs/form/field.d.ts +1 -1
  48. package/lib/cjs/form/hoc/withField.js +1 -1
  49. package/lib/cjs/scrollList/scrollItem.d.ts +2 -1
  50. package/lib/cjs/scrollList/scrollItem.js +13 -3
  51. package/lib/cjs/select/index.d.ts +3 -3
  52. package/lib/cjs/select/index.js +32 -28
  53. package/lib/cjs/select/option.js +2 -2
  54. package/lib/cjs/select/virtualRow.js +2 -2
  55. package/lib/cjs/table/Table.d.ts +1 -1
  56. package/lib/cjs/table/Table.js +8 -2
  57. package/lib/cjs/table/interface.d.ts +1 -0
  58. package/lib/cjs/tabs/interface.d.ts +1 -1
  59. package/lib/cjs/tooltip/index.d.ts +1 -1
  60. package/lib/cjs/tooltip/index.js +6 -2
  61. package/lib/cjs/tree/index.d.ts +2 -0
  62. package/lib/cjs/tree/index.js +15 -8
  63. package/lib/cjs/treeSelect/index.d.ts +2 -0
  64. package/lib/cjs/treeSelect/index.js +64 -27
  65. package/lib/cjs/upload/fileCard.js +31 -22
  66. package/lib/cjs/upload/index.d.ts +6 -0
  67. package/lib/cjs/upload/index.js +15 -8
  68. package/lib/cjs/upload/interface.d.ts +8 -6
  69. package/lib/es/_base/base.css +5 -5
  70. package/lib/es/autoComplete/index.d.ts +1 -1
  71. package/lib/es/calendar/monthCalendar.js +22 -5
  72. package/lib/es/cascader/index.d.ts +9 -2
  73. package/lib/es/cascader/index.js +19 -1
  74. package/lib/es/cascader/item.d.ts +6 -2
  75. package/lib/es/cascader/item.js +31 -4
  76. package/lib/es/datePicker/dateInput.d.ts +0 -2
  77. package/lib/es/datePicker/dateInput.js +17 -6
  78. package/lib/es/datePicker/datePicker.js +19 -12
  79. package/lib/es/datePicker/month.d.ts +1 -0
  80. package/lib/es/datePicker/month.js +18 -2
  81. package/lib/es/datePicker/monthsGrid.js +16 -4
  82. package/lib/es/datePicker/navigation.js +8 -0
  83. package/lib/es/datePicker/quickControl.js +2 -0
  84. package/lib/es/datePicker/yearAndMonth.js +1 -0
  85. package/lib/es/dropdown/index.d.ts +1 -1
  86. package/lib/es/form/baseForm.d.ts +1 -1
  87. package/lib/es/form/baseForm.js +2 -2
  88. package/lib/es/form/field.d.ts +1 -1
  89. package/lib/es/form/hoc/withField.js +1 -1
  90. package/lib/es/scrollList/scrollItem.d.ts +2 -1
  91. package/lib/es/scrollList/scrollItem.js +13 -3
  92. package/lib/es/select/index.d.ts +3 -3
  93. package/lib/es/select/index.js +30 -26
  94. package/lib/es/select/option.js +2 -2
  95. package/lib/es/select/virtualRow.js +2 -2
  96. package/lib/es/table/Table.d.ts +1 -1
  97. package/lib/es/table/Table.js +10 -2
  98. package/lib/es/table/interface.d.ts +1 -0
  99. package/lib/es/tabs/interface.d.ts +1 -1
  100. package/lib/es/tooltip/index.d.ts +1 -1
  101. package/lib/es/tooltip/index.js +6 -2
  102. package/lib/es/tree/index.d.ts +2 -0
  103. package/lib/es/tree/index.js +15 -8
  104. package/lib/es/treeSelect/index.d.ts +2 -0
  105. package/lib/es/treeSelect/index.js +64 -27
  106. package/lib/es/upload/fileCard.js +31 -24
  107. package/lib/es/upload/index.d.ts +6 -0
  108. package/lib/es/upload/index.js +14 -8
  109. package/lib/es/upload/interface.d.ts +8 -6
  110. package/package.json +9 -9
  111. package/scrollList/_story/ScrollList/index.js +3 -0
  112. package/scrollList/_story/WheelList/index.js +3 -0
  113. package/scrollList/scrollItem.tsx +30 -9
  114. package/select/index.tsx +18 -19
  115. package/select/option.tsx +2 -2
  116. package/select/virtualRow.tsx +2 -2
  117. package/table/Table.tsx +7 -2
  118. package/table/_story/Perf/Virtualized/index.jsx +6 -0
  119. package/table/_story/table.stories.js +1 -2
  120. package/table/_story/v2/FixedHeaderMerge/index.jsx +98 -0
  121. package/table/_story/v2/FixedResizable/index.jsx +114 -0
  122. package/table/_story/v2/defaultFilteredValue.tsx +114 -0
  123. package/table/_story/v2/index.js +5 -0
  124. package/table/interface.ts +1 -0
  125. package/tabs/interface.ts +1 -1
  126. package/tooltip/__test__/tooltip.test.js +48 -4
  127. package/tooltip/_story/tooltip.stories.js +83 -1
  128. package/tooltip/index.tsx +4 -4
  129. package/tree/__test__/treeMultiple.test.js +94 -0
  130. package/tree/_story/tree.stories.js +169 -0
  131. package/tree/index.tsx +12 -5
  132. package/treeSelect/__test__/treeMultiple.test.js +94 -0
  133. package/treeSelect/_story/treeSelect.stories.js +242 -0
  134. package/treeSelect/index.tsx +72 -40
  135. package/upload/_story/upload.stories.js +22 -6
  136. package/upload/fileCard.tsx +23 -23
  137. package/upload/index.tsx +15 -6
  138. package/upload/interface.ts +7 -5
@@ -30,7 +30,7 @@ var _semiIcons = require("@douyinfe/semi-icons");
30
30
 
31
31
  var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer"));
32
32
 
33
- var _index = _interopRequireDefault(require("../iconButton/index"));
33
+ var _index = _interopRequireDefault(require("../button/index"));
34
34
 
35
35
  var _index2 = _interopRequireDefault(require("../progress/index"));
36
36
 
@@ -200,6 +200,7 @@ class FileCard extends _react.PureComponent {
200
200
  onPreviewClick,
201
201
  showPicInfo,
202
202
  renderPicInfo,
203
+ renderPicPreviewIcon,
203
204
  renderThumbnail,
204
205
  name,
205
206
  index
@@ -207,6 +208,7 @@ class FileCard extends _react.PureComponent {
207
208
  const showProgress = status === _constants.strings.FILE_STATUS_UPLOADING && percent !== 100;
208
209
  const showRetry = status === _constants.strings.FILE_STATUS_UPLOAD_FAIL && this.props.showRetry;
209
210
  const showReplace = status === _constants.strings.FILE_STATUS_SUCCESS && this.props.showReplace;
211
+ const showPreview = status === _constants.strings.FILE_STATUS_SUCCESS && !this.props.showReplace;
210
212
  const filePicCardCls = (0, _classnames.default)({
211
213
  ["".concat(prefixCls, "-picture-file-card")]: true,
212
214
  ["".concat(prefixCls, "-picture-file-card-disabled")]: disabled,
@@ -214,7 +216,6 @@ class FileCard extends _react.PureComponent {
214
216
  ["".concat(prefixCls, "-picture-file-card-error")]: status === _constants.strings.FILE_STATUS_UPLOAD_FAIL,
215
217
  ["".concat(prefixCls, "-picture-file-card-uploading")]: showProgress
216
218
  });
217
- const closeCls = "".concat(prefixCls, "-picture-file-card-close");
218
219
 
219
220
  const retry = /*#__PURE__*/_react.default.createElement("div", {
220
221
  role: "button",
@@ -240,6 +241,19 @@ class FileCard extends _react.PureComponent {
240
241
  className: "".concat(prefixCls, "-picture-file-card-icon-replace")
241
242
  })));
242
243
 
244
+ const preview = /*#__PURE__*/_react.default.createElement("div", {
245
+ className: "".concat(prefixCls, "-picture-file-card-preview")
246
+ }, typeof renderPicPreviewIcon === 'function' ? renderPicPreviewIcon(this.props) : null);
247
+
248
+ const close = /*#__PURE__*/_react.default.createElement("div", {
249
+ role: "button",
250
+ tabIndex: 0,
251
+ className: "".concat(prefixCls, "-picture-file-card-close"),
252
+ onClick: e => this.onRemove(e)
253
+ }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClear, {
254
+ className: "".concat(prefixCls, "-picture-file-card-icon-close")
255
+ }));
256
+
243
257
  const picInfo = typeof renderPicInfo === 'function' ? renderPicInfo(this.props) : /*#__PURE__*/_react.default.createElement("div", {
244
258
  className: "".concat(prefixCls, "-picture-file-card-pic-info")
245
259
  }, index + 1);
@@ -258,14 +272,7 @@ class FileCard extends _react.PureComponent {
258
272
  size: "small",
259
273
  orbitStroke: '#FFF',
260
274
  "aria-label": "uploading file progress"
261
- }) : null, showRetry ? retry : null, showReplace && replace, showPicInfo && picInfo, !disabled && /*#__PURE__*/_react.default.createElement("div", {
262
- className: closeCls,
263
- onClick: e => this.onRemove(e)
264
- }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, {
265
- tabIndex: 0,
266
- role: "button",
267
- size: "extra-small"
268
- })), this.renderPicValidateMsg());
275
+ }) : null, showRetry ? retry : null, showReplace && replace, showPreview && preview, showPicInfo && picInfo, !disabled && close, this.renderPicValidateMsg());
269
276
  }
270
277
 
271
278
  renderFile(locale) {
@@ -280,7 +287,8 @@ class FileCard extends _react.PureComponent {
280
287
  previewFile,
281
288
  status,
282
289
  style,
283
- onPreviewClick
290
+ onPreviewClick,
291
+ renderFileOperation
284
292
  } = this.props;
285
293
  const fileCardCls = (0, _classnames.default)({
286
294
  ["".concat(prefixCls, "-file-card")]: true,
@@ -310,6 +318,14 @@ class FileCard extends _react.PureComponent {
310
318
  previewContent = previewFile(this.props);
311
319
  }
312
320
 
321
+ const operation = typeof renderFileOperation === 'function' ? renderFileOperation(this.props) : /*#__PURE__*/_react.default.createElement(_index.default, {
322
+ onClick: e => this.onRemove(e),
323
+ type: "tertiary",
324
+ icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, null),
325
+ theme: "borderless",
326
+ size: "small",
327
+ className: closeCls
328
+ });
313
329
  return /*#__PURE__*/_react.default.createElement("div", {
314
330
  role: "listitem",
315
331
  className: fileCardCls,
@@ -352,29 +368,22 @@ class FileCard extends _react.PureComponent {
352
368
  tabIndex: 0,
353
369
  className: "".concat(infoCls, "-retry"),
354
370
  onClick: e => this.onRetry(e)
355
- }, locale.retry) : null)), /*#__PURE__*/_react.default.createElement(_index.default, {
356
- onClick: e => this.onRemove(e),
357
- type: "tertiary",
358
- icon: /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, null),
359
- theme: "borderless",
360
- size: "small",
361
- className: closeCls
362
- }));
371
+ }, locale.retry) : null)), operation);
363
372
  }
364
373
 
365
374
  onRemove(e) {
366
375
  e.stopPropagation();
367
- this.props.onRemove(this.props, e);
376
+ this.props.onRemove();
368
377
  }
369
378
 
370
379
  onReplace(e) {
371
380
  e.stopPropagation();
372
- this.props.onReplace(this.props, e);
381
+ this.props.onReplace();
373
382
  }
374
383
 
375
384
  onRetry(e) {
376
385
  e.stopPropagation();
377
- this.props.onRetry(this.props, e);
386
+ this.props.onRetry();
378
387
  }
379
388
 
380
389
  render() {
@@ -29,6 +29,7 @@ export interface UploadProps {
29
29
  fileList?: Array<FileItem>;
30
30
  fileName?: string;
31
31
  headers?: Record<string, any> | ((file: File) => Record<string, string>);
32
+ hotSpotLocation?: 'start' | 'end';
32
33
  itemStyle?: CSSProperties;
33
34
  limit?: number;
34
35
  listType?: UploadListType;
@@ -56,6 +57,8 @@ export interface UploadProps {
56
57
  renderFileItem?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
57
58
  renderPicInfo?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
58
59
  renderThumbnail?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
60
+ renderPicPreviewIcon?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
61
+ renderFileOperation?: (fileItem: RenderFileItemProps) => ReactNode;
59
62
  showClear?: boolean;
60
63
  showPicInfo?: boolean;
61
64
  showReplace?: boolean;
@@ -99,6 +102,7 @@ declare class Upload extends BaseComponent<UploadProps, UploadState> {
99
102
  fileList: PropTypes.Requireable<any[]>;
100
103
  fileName: PropTypes.Requireable<string>;
101
104
  headers: PropTypes.Requireable<object>;
105
+ hotSpotLocation: PropTypes.Requireable<string>;
102
106
  itemStyle: PropTypes.Requireable<object>;
103
107
  limit: PropTypes.Requireable<number>;
104
108
  listType: PropTypes.Requireable<"picture" | "list">;
@@ -124,6 +128,8 @@ declare class Upload extends BaseComponent<UploadProps, UploadState> {
124
128
  prompt: PropTypes.Requireable<PropTypes.ReactNodeLike>;
125
129
  promptPosition: PropTypes.Requireable<"left" | "right" | "bottom">;
126
130
  renderFileItem: PropTypes.Requireable<(...args: any[]) => any>;
131
+ renderPicPreviewIcon: PropTypes.Requireable<(...args: any[]) => any>;
132
+ renderFileOperation: PropTypes.Requireable<(...args: any[]) => any>;
127
133
  renderPicInfo: PropTypes.Requireable<(...args: any[]) => any>;
128
134
  renderThumbnail: PropTypes.Requireable<(...args: any[]) => any>;
129
135
  showClear: PropTypes.Requireable<boolean>;
@@ -16,6 +16,8 @@ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
16
16
 
17
17
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
18
18
 
19
+ var _pick2 = _interopRequireDefault(require("lodash/pick"));
20
+
19
21
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
20
22
 
21
23
  var _react = _interopRequireDefault(require("react"));
@@ -136,14 +138,14 @@ class Upload extends _baseComponent.default {
136
138
  previewFile,
137
139
  listType,
138
140
  itemStyle,
139
- showRetry,
140
141
  showPicInfo,
141
142
  renderPicInfo,
143
+ renderPicPreviewIcon,
144
+ renderFileOperation,
142
145
  renderFileItem,
143
146
  renderThumbnail,
144
147
  disabled,
145
- onPreviewClick,
146
- showReplace
148
+ onPreviewClick
147
149
  } = this.props;
148
150
 
149
151
  const onRemove = () => this.remove(file);
@@ -156,20 +158,20 @@ class Upload extends _baseComponent.default {
156
158
  this.replace(index);
157
159
  };
158
160
 
159
- const fileCardProps = (0, _assign.default)((0, _assign.default)({}, file), {
161
+ const fileCardProps = (0, _assign.default)((0, _assign.default)((0, _assign.default)({}, (0, _pick2.default)(this.props, ['showRetry', 'showReplace', ''])), file), {
160
162
  previewFile,
161
163
  listType,
162
164
  onRemove,
163
165
  onRetry,
164
166
  index,
165
167
  key: uid || (0, _concat.default)(_context = "".concat(name)).call(_context, index),
166
- showRetry: typeof file.showRetry !== 'undefined' ? file.showRetry : showRetry,
167
168
  style: itemStyle,
168
169
  disabled,
169
170
  showPicInfo,
170
171
  renderPicInfo,
172
+ renderPicPreviewIcon,
173
+ renderFileOperation,
171
174
  renderThumbnail,
172
- showReplace: typeof file.showReplace !== 'undefined' ? file.showReplace : showReplace,
173
175
  onReplace,
174
176
  onPreviewClick: typeof onPreviewClick !== 'undefined' ? () => this.foundation.handlePreviewClick(file) : undefined
175
177
  });
@@ -211,7 +213,8 @@ class Upload extends _baseComponent.default {
211
213
  limit,
212
214
  disabled,
213
215
  children,
214
- draggable
216
+ draggable,
217
+ hotSpotLocation
215
218
  } = this.props;
216
219
  const {
217
220
  fileList: stateFileList,
@@ -269,7 +272,7 @@ class Upload extends _baseComponent.default {
269
272
  className: mainCls,
270
273
  role: "list",
271
274
  "aria-label": "picture list"
272
- }, (0, _map.default)(fileList).call(fileList, (file, index) => this.renderFile(file, index, locale)), showAddTriggerInList ? addContent : null)));
275
+ }, showAddTriggerInList && hotSpotLocation === 'start' ? addContent : null, (0, _map.default)(fileList).call(fileList, (file, index) => this.renderFile(file, index, locale)), showAddTriggerInList && hotSpotLocation === 'end' ? addContent : null)));
273
276
  };
274
277
 
275
278
  this.renderFileListDefault = () => {
@@ -609,6 +612,7 @@ Upload.propTypes = {
609
612
  fileList: _propTypes.default.array,
610
613
  fileName: _propTypes.default.string,
611
614
  headers: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]),
615
+ hotSpotLocation: _propTypes.default.oneOf(['start', 'end']),
612
616
  itemStyle: _propTypes.default.object,
613
617
  limit: _propTypes.default.number,
614
618
  listType: _propTypes.default.oneOf(_constants.strings.LIST_TYPE),
@@ -634,6 +638,8 @@ Upload.propTypes = {
634
638
  prompt: _propTypes.default.node,
635
639
  promptPosition: _propTypes.default.oneOf(_constants.strings.PROMPT_POSITION),
636
640
  renderFileItem: _propTypes.default.func,
641
+ renderPicPreviewIcon: _propTypes.default.func,
642
+ renderFileOperation: _propTypes.default.func,
637
643
  renderPicInfo: _propTypes.default.func,
638
644
  renderThumbnail: _propTypes.default.func,
639
645
  showClear: _propTypes.default.bool,
@@ -653,6 +659,7 @@ Upload.defaultProps = {
653
659
  defaultFileList: [],
654
660
  disabled: false,
655
661
  listType: 'list',
662
+ hotSpotLocation: 'end',
656
663
  multiple: false,
657
664
  onAcceptInvalid: _noop2.default,
658
665
  onChange: _noop2.default,
@@ -1,4 +1,4 @@
1
- import { ReactNode, CSSProperties, MouseEvent } from 'react';
1
+ import { ReactNode, CSSProperties } from 'react';
2
2
  import { BaseFileItem } from '@douyinfe/semi-foundation/lib/cjs/upload/foundation';
3
3
  import { strings } from '@douyinfe/semi-foundation/lib/cjs/upload/constants';
4
4
  import { ArrayElement } from '../_base/base';
@@ -45,14 +45,16 @@ export interface RenderFileItemProps extends FileItem {
45
45
  index?: number;
46
46
  previewFile?: (fileItem: RenderFileItemProps) => ReactNode;
47
47
  listType: UploadListType;
48
- onRemove: (props: RenderFileItemProps, e: MouseEvent) => void;
49
- onRetry: (props: RenderFileItemProps, e: MouseEvent) => void;
50
- onReplace: (props: RenderFileItemProps, e: MouseEvent) => void;
48
+ onRemove: () => void;
49
+ onRetry: () => void;
50
+ onReplace: () => void;
51
51
  key: string;
52
52
  showPicInfo?: boolean;
53
53
  renderPicInfo?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
54
- showRetry: boolean;
55
- showReplace: boolean;
54
+ renderPicPreviewIcon?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
55
+ renderFileOperation?: (fileItem: RenderFileItemProps) => ReactNode;
56
+ showRetry?: boolean;
57
+ showReplace?: boolean;
56
58
  style?: CSSProperties;
57
59
  disabled: boolean;
58
60
  onPreviewClick: () => void;
@@ -19,7 +19,7 @@ body .semi-always-light {
19
19
  --semi-blue-2: 152,205,253;
20
20
  --semi-blue-3: 101,178,252;
21
21
  --semi-blue-4: 50,149,251;
22
- --semi-blue-5: 0,119,250;
22
+ --semi-blue-5: 0,100,250;
23
23
  --semi-blue-6: 0,98,214;
24
24
  --semi-blue-7: 0,79,179;
25
25
  --semi-blue-8: 0,61,143;
@@ -410,7 +410,7 @@ body, body[theme-mode=dark] .semi-always-light {
410
410
  --semi-color-bg-4: rgba(var(--semi-white), 1);
411
411
  --semi-color-text-0: rgba(var(--semi-grey-9), 1);
412
412
  --semi-color-text-1: rgba(var(--semi-grey-9), .8);
413
- --semi-color-text-2: rgba(var(--semi-grey-9), .6);
413
+ --semi-color-text-2: rgba(var(--semi-grey-9), .62);
414
414
  --semi-color-text-3: rgba(var(--semi-grey-9), .35);
415
415
  --semi-shadow-elevated: 0 0 1px rgba(0, 0, 0, .3), 0 4px 14px rgba(0, 0, 0, .1);
416
416
  --semi-border-radius-extra-small: 3px;
@@ -487,9 +487,9 @@ body[theme-mode=dark], body .semi-always-dark {
487
487
  --semi-color-nav-bg: rgba(35, 36, 41, 1);
488
488
  --semi-shadow-elevated: inset 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 14px rgba(0, 0, 0, .25);
489
489
  --semi-color-overlay-bg: rgba(22, 22, 26, .6);
490
- --semi-color-fill-0: rgba(var(--semi-white), .05);
491
- --semi-color-fill-1: rgba(var(--semi-white), .09);
492
- --semi-color-fill-2: rgba(var(--semi-white), .13);
490
+ --semi-color-fill-0: rgba(var(--semi-white), .12);
491
+ --semi-color-fill-1: rgba(var(--semi-white), .16);
492
+ --semi-color-fill-2: rgba(var(--semi-white), .20);
493
493
  --semi-color-border: rgba(var(--semi-white), .08);
494
494
  --semi-color-shadow: rgba(var(--semi-black), .04);
495
495
  --semi-color-bg-0: rgba(22, 22, 26, 1);
@@ -113,7 +113,7 @@ declare class AutoComplete<T extends AutoCompleteItems> extends BaseComponent<Au
113
113
  onBlur: PropTypes.Requireable<(...args: any[]) => any>;
114
114
  onFocus: PropTypes.Requireable<(...args: any[]) => any>;
115
115
  onChange: PropTypes.Requireable<(...args: any[]) => any>;
116
- position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver">;
116
+ position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver" | "leftBottomOver" | "rightBottomOver">;
117
117
  placeholder: PropTypes.Requireable<string>;
118
118
  prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
119
119
  onChangeWithObject: PropTypes.Requireable<boolean>;
@@ -6,6 +6,8 @@ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
6
6
  import _bindInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/bind";
7
7
  import _Map from "@babel/runtime-corejs3/core-js-stable/map";
8
8
  import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
9
+
10
+ /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */
9
11
  import React from 'react';
10
12
  import ReactDOM from 'react-dom';
11
13
  import cls from 'classnames';
@@ -62,11 +64,13 @@ export default class monthCalendar extends BaseComponent {
62
64
  } = this.props;
63
65
  this.monthlyData = this.foundation.getMonthlyData(displayValue, dateFnsLocale);
64
66
  return /*#__PURE__*/React.createElement("div", {
65
- className: "".concat(prefixCls, "-header")
67
+ className: "".concat(prefixCls, "-header"),
68
+ role: "presentation"
66
69
  }, /*#__PURE__*/React.createElement("div", {
67
- role: "gridcell",
70
+ role: "presentation",
68
71
  className: "".concat(prefixCls, "-grid")
69
72
  }, /*#__PURE__*/React.createElement("ul", {
73
+ role: "row",
70
74
  className: "".concat(prefixCls, "-grid-row")
71
75
  }, _mapInstanceProperty(_context = this.monthlyData[0]).call(_context, day => {
72
76
  const {
@@ -76,6 +80,8 @@ export default class monthCalendar extends BaseComponent {
76
80
  ["".concat(cssClasses.PREFIX, "-weekend")]: markWeekend && day.isWeekend
77
81
  });
78
82
  return /*#__PURE__*/React.createElement("li", {
83
+ role: "columnheader",
84
+ "aria-label": weekday,
79
85
  key: "".concat(weekday, "-monthheader"),
80
86
  className: listCls
81
87
  }, /*#__PURE__*/React.createElement("span", null, weekday));
@@ -158,7 +164,10 @@ export default class monthCalendar extends BaseComponent {
158
164
  const pos = showCard && showCard[key] ? showCard[key][1] : 'leftTopOver';
159
165
  const text = /*#__PURE__*/React.createElement(LocaleConsumer, {
160
166
  componentName: "Calendar"
161
- }, locale => /*#__PURE__*/React.createElement("div", {
167
+ }, locale =>
168
+ /*#__PURE__*/
169
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
170
+ React.createElement("div", {
162
171
  className: "".concat(cardCls, "-wrapper"),
163
172
  style: {
164
173
  bottom: 0
@@ -226,11 +235,12 @@ export default class monthCalendar extends BaseComponent {
226
235
  day
227
236
  } = events;
228
237
  return /*#__PURE__*/React.createElement("div", {
229
- role: "gridcell",
238
+ role: "presentation",
230
239
  className: "".concat(prefixCls, "-weekrow"),
231
240
  ref: _this.cellDom,
232
241
  key: "".concat(index, "-weekrow")
233
242
  }, /*#__PURE__*/React.createElement("ul", {
243
+ role: "row",
234
244
  className: "".concat(prefixCls, "-skeleton")
235
245
  }, _mapInstanceProperty(weekDay).call(weekDay, each => {
236
246
  const {
@@ -249,6 +259,9 @@ export default class monthCalendar extends BaseComponent {
249
259
  });
250
260
  const shouldRenderCollapsed = Boolean(day && day[ind] && day[ind].length > itemLimit);
251
261
  const inner = /*#__PURE__*/React.createElement("li", {
262
+ role: "gridcell",
263
+ "aria-label": date.toLocaleDateString(),
264
+ "aria-current": isToday ? "date" : false,
252
265
  key: "".concat(date, "-weeksk"),
253
266
  className: listCls,
254
267
  onClick: e => _this.handleClick(e, [date])
@@ -271,9 +284,10 @@ export default class monthCalendar extends BaseComponent {
271
284
  parsedEvents
272
285
  } = this.state;
273
286
  return /*#__PURE__*/React.createElement("div", {
274
- role: "gridcell",
287
+ role: "presentation",
275
288
  className: "".concat(prefixCls, "-week")
276
289
  }, /*#__PURE__*/React.createElement("ul", {
290
+ role: "presentation",
277
291
  className: "".concat(prefixCls, "-grid-col")
278
292
  }, _mapInstanceProperty(_context3 = _Object$keys(this.monthlyData)).call(_context3, weekInd => this.renderWeekRow(weekInd, this.monthlyData[weekInd], parsedEvents[weekInd]))));
279
293
  };
@@ -404,12 +418,15 @@ export default class monthCalendar extends BaseComponent {
404
418
  return /*#__PURE__*/React.createElement(LocaleConsumer, {
405
419
  componentName: "Calendar"
406
420
  }, (locale, localeCode, dateFnsLocale) => /*#__PURE__*/React.createElement("div", {
421
+ role: "grid",
407
422
  className: monthCls,
408
423
  key: this.state.itemLimit,
409
424
  style: monthStyle
410
425
  }, /*#__PURE__*/React.createElement("div", {
426
+ role: "presentation",
411
427
  className: "".concat(prefixCls, "-sticky-top")
412
428
  }, header, this.renderHeader(dateFnsLocale)), /*#__PURE__*/React.createElement("div", {
429
+ role: "presentation",
413
430
  className: "".concat(prefixCls, "-grid-wrapper")
414
431
  }, this.renderMonthGrid())));
415
432
  }
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, CSSProperties, MouseEvent } from 'react';
1
+ import React, { ReactNode, CSSProperties, MouseEvent, KeyboardEvent } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { BasicCascaderInnerData, BasicCascaderProps, BasicTriggerRenderProps, BasicScrollPanelProps, CascaderAdapter, CascaderType } from '@douyinfe/semi-foundation/lib/es/cascader/foundation';
4
4
  import '@douyinfe/semi-foundation/lib/es/cascader/cascader.css';
@@ -24,6 +24,7 @@ export interface CascaderProps extends BasicCascaderProps {
24
24
  'aria-invalid'?: React.AriaAttributes['aria-invalid'];
25
25
  'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
26
26
  'aria-required'?: React.AriaAttributes['aria-required'];
27
+ 'aria-label'?: React.AriaAttributes['aria-label'];
27
28
  arrowIcon?: ReactNode;
28
29
  defaultValue?: Value;
29
30
  dropdownStyle?: CSSProperties;
@@ -65,6 +66,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
65
66
  'aria-errormessage': PropTypes.Requireable<string>;
66
67
  'aria-describedby': PropTypes.Requireable<string>;
67
68
  'aria-required': PropTypes.Requireable<boolean>;
69
+ 'aria-label': PropTypes.Requireable<string>;
68
70
  arrowIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
69
71
  changeOnSelect: PropTypes.Requireable<boolean>;
70
72
  defaultValue: PropTypes.Requireable<string | any[]>;
@@ -158,6 +160,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
158
160
  onDropdownVisibleChange: (...args: any[]) => void;
159
161
  onListScroll: (...args: any[]) => void;
160
162
  enableLeafClick: boolean;
163
+ 'aria-label': string;
161
164
  };
162
165
  options: any;
163
166
  isEmpty: boolean;
@@ -177,7 +180,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
177
180
  renderTagItem: (value: string | Array<string>, idx: number, type: string) => React.ReactNode;
178
181
  renderTagInput(): JSX.Element;
179
182
  renderInput(): JSX.Element;
180
- handleItemClick: (e: MouseEvent, item: Entity | Data) => void;
183
+ handleItemClick: (e: MouseEvent | KeyboardEvent, item: Entity | Data) => void;
181
184
  handleItemHover: (e: MouseEvent, item: Entity) => void;
182
185
  onItemCheckboxClick: (item: Entity | Data) => void;
183
186
  handleListScroll: (e: React.UIEvent<HTMLUListElement, UIEvent>, ind: number) => void;
@@ -191,6 +194,10 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
191
194
  handleMouseOver: () => void;
192
195
  handleMouseLeave: () => void;
193
196
  handleClear: (e: MouseEvent) => void;
197
+ /**
198
+ * A11y: simulate clear button click
199
+ */
200
+ handleClearEnterPress: (e: KeyboardEvent) => void;
194
201
  showClearBtn: () => boolean;
195
202
  renderClearBtn: () => JSX.Element;
196
203
  renderArrow: () => JSX.Element;
@@ -5,6 +5,7 @@ import _isFunction from "lodash/isFunction";
5
5
  import _isEmpty from "lodash/isEmpty";
6
6
  import _isString from "lodash/isString";
7
7
  import _isEqual from "lodash/isEqual";
8
+ import _isSet from "lodash/isSet";
8
9
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
9
10
  import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
10
11
  import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
@@ -329,6 +330,15 @@ class Cascader extends BaseComponent {
329
330
  e && e.stopPropagation();
330
331
  this.foundation.handleClear();
331
332
  };
333
+ /**
334
+ * A11y: simulate clear button click
335
+ */
336
+
337
+
338
+ this.handleClearEnterPress = e => {
339
+ e && e.stopPropagation();
340
+ this.foundation.handleClearEnterPress();
341
+ };
332
342
 
333
343
  this.showClearBtn = () => {
334
344
  const {
@@ -355,6 +365,7 @@ class Cascader extends BaseComponent {
355
365
  return /*#__PURE__*/React.createElement("div", {
356
366
  className: clearCls,
357
367
  onClick: this.handleClear,
368
+ onKeyPress: this.handleClearEnterPress,
358
369
  role: 'button',
359
370
  tabIndex: 0
360
371
  }, /*#__PURE__*/React.createElement(IconClear, null));
@@ -444,6 +455,7 @@ class Cascader extends BaseComponent {
444
455
  style: style,
445
456
  ref: this.triggerRef,
446
457
  onClick: e => this.foundation.handleClick(e),
458
+ onKeyPress: e => this.foundation.handleSelectionEnterPress(e),
447
459
  "aria-invalid": this.props['aria-invalid'],
448
460
  "aria-errormessage": this.props['aria-errormessage'],
449
461
  "aria-label": this.props['aria-label'],
@@ -722,6 +734,10 @@ class Cascader extends BaseComponent {
722
734
  realKeys = formatKeys;
723
735
  }
724
736
 
737
+ if (_isSet(realKeys)) {
738
+ realKeys = [...realKeys];
739
+ }
740
+
725
741
  const calRes = calcCheckedKeys(_flatten(realKeys), keyEntities);
726
742
  const checkedKeys = new _Set(calRes.checkedKeys);
727
743
  const halfCheckedKeys = new _Set(calRes.halfCheckedKeys); // disableStrictly
@@ -882,6 +898,7 @@ Cascader.propTypes = {
882
898
  'aria-errormessage': PropTypes.string,
883
899
  'aria-describedby': PropTypes.string,
884
900
  'aria-required': PropTypes.bool,
901
+ 'aria-label': PropTypes.string,
885
902
  arrowIcon: PropTypes.node,
886
903
  changeOnSelect: PropTypes.bool,
887
904
  defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
@@ -976,6 +993,7 @@ Cascader.defaultProps = {
976
993
  onClear: _noop,
977
994
  onDropdownVisibleChange: _noop,
978
995
  onListScroll: _noop,
979
- enableLeafClick: false
996
+ enableLeafClick: false,
997
+ 'aria-label': 'Cascader'
980
998
  };
981
999
  export default Cascader;
@@ -22,7 +22,7 @@ export interface CascaderItemProps {
22
22
  selectedKeys: Set<string>;
23
23
  loadedKeys: Set<string>;
24
24
  loadingKeys: Set<string>;
25
- onItemClick: (e: React.MouseEvent, item: Entity | Data) => void;
25
+ onItemClick: (e: React.MouseEvent | React.KeyboardEvent, item: Entity | Data) => void;
26
26
  onItemHover: (e: React.MouseEvent, item: Entity) => void;
27
27
  showNext: ShowNextType;
28
28
  onItemCheckboxClick: (item: Entity | Data) => void;
@@ -57,7 +57,11 @@ export default class Item extends PureComponent<CascaderItemProps> {
57
57
  static defaultProps: {
58
58
  empty: boolean;
59
59
  };
60
- onClick: (e: React.MouseEvent, item: Entity | Data) => void;
60
+ onClick: (e: React.MouseEvent | React.KeyboardEvent, item: Entity | Data) => void;
61
+ /**
62
+ * A11y: simulate item click
63
+ */
64
+ handleItemEnterPress: (keyboardEvent: React.KeyboardEvent, item: Entity | Data) => void;
61
65
  onHover: (e: React.MouseEvent, item: Entity) => void;
62
66
  onCheckboxChange: (e: CheckboxEvent, item: Entity | Data) => void;
63
67
  getItemStatus: (key: string) => {
@@ -2,10 +2,12 @@ import _includes from "lodash/includes";
2
2
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
3
3
  import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
4
4
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
5
+ import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
5
6
  import React, { PureComponent } from 'react';
6
7
  import cls from 'classnames';
7
8
  import PropTypes from 'prop-types';
8
9
  import { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/cascader/constants';
10
+ import isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';
9
11
  import ConfigContext from '../configProvider/context';
10
12
  import LocaleConsumer from '../locale/localeConsumer';
11
13
  import { IconChevronRight, IconTick } from '@douyinfe/semi-icons';
@@ -27,6 +29,16 @@ export default class Item extends PureComponent {
27
29
 
28
30
  onItemClick(e, item);
29
31
  };
32
+ /**
33
+ * A11y: simulate item click
34
+ */
35
+
36
+
37
+ this.handleItemEnterPress = (keyboardEvent, item) => {
38
+ if (isEnterPress(keyboardEvent)) {
39
+ this.onClick(keyboardEvent, item);
40
+ }
41
+ };
30
42
 
31
43
  this.onHover = (e, item) => {
32
44
  const {
@@ -106,6 +118,7 @@ export default class Item extends PureComponent {
106
118
 
107
119
  case 'empty':
108
120
  return /*#__PURE__*/React.createElement("span", {
121
+ "aria-hidden": true,
109
122
  className: _concatInstanceProperty(_context3 = "".concat(prefixcls, "-icon ")).call(_context3, prefixcls, "-icon-empty")
110
123
  });
111
124
 
@@ -169,11 +182,13 @@ export default class Item extends PureComponent {
169
182
  ["".concat(prefixcls, "-disabled")]: disabled
170
183
  });
171
184
  return /*#__PURE__*/React.createElement("li", {
185
+ role: 'menuitem',
172
186
  className: className,
173
187
  key: key,
174
188
  onClick: e => {
175
189
  this.onClick(e, item);
176
- }
190
+ },
191
+ onKeyPress: e => this.handleItemEnterPress(e, item)
177
192
  }, /*#__PURE__*/React.createElement("span", {
178
193
  className: "".concat(prefixcls, "-label")
179
194
  }, !multiple && this.renderIcon('empty'), multiple && /*#__PURE__*/React.createElement(Checkbox, {
@@ -198,13 +213,15 @@ export default class Item extends PureComponent {
198
213
  let showChildItem;
199
214
  const ind = content.length;
200
215
  content.push( /*#__PURE__*/React.createElement("ul", {
216
+ role: 'menu',
201
217
  className: "".concat(prefixcls, "-list"),
202
218
  key: renderData[0].key,
203
219
  onScroll: e => this.props.onListScroll(e, ind)
204
220
  }, _mapInstanceProperty(renderData).call(renderData, item => {
205
221
  const {
206
222
  data,
207
- key
223
+ key,
224
+ parentKey
208
225
  } = item;
209
226
  const {
210
227
  children,
@@ -229,16 +246,26 @@ export default class Item extends PureComponent {
229
246
  ["".concat(prefixcls, "-select")]: selected && !multiple,
230
247
  ["".concat(prefixcls, "-disabled")]: disabled
231
248
  });
232
- return /*#__PURE__*/React.createElement("li", {
249
+ const otherAriaProps = parentKey ? {
250
+ ['aria-owns']: "cascaderItem-".concat(parentKey)
251
+ } : {};
252
+ return /*#__PURE__*/React.createElement("li", _Object$assign({
253
+ role: 'menuitem',
254
+ id: "cascaderItem-".concat(key),
255
+ "aria-expanded": active,
256
+ "aria-haspopup": Boolean(showExpand),
257
+ "aria-disabled": disabled
258
+ }, otherAriaProps, {
233
259
  className: className,
234
260
  key: key,
235
261
  onClick: e => {
236
262
  this.onClick(e, item);
237
263
  },
264
+ onKeyPress: e => this.handleItemEnterPress(e, item),
238
265
  onMouseEnter: e => {
239
266
  this.onHover(e, item);
240
267
  }
241
- }, /*#__PURE__*/React.createElement("span", {
268
+ }), /*#__PURE__*/React.createElement("span", {
242
269
  className: "".concat(prefixcls, "-label")
243
270
  }, selected && !multiple && this.renderIcon('tick'), !selected && !multiple && this.renderIcon('empty'), multiple && /*#__PURE__*/React.createElement(Checkbox, {
244
271
  onChange: e => this.onCheckboxChange(e, item),