@douyinfe/semi-ui 2.41.3 → 2.42.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 (63) hide show
  1. package/dist/css/semi.css +28 -7
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +1245 -1496
  4. package/dist/umd/semi-ui.js.map +1 -1
  5. package/dist/umd/semi-ui.min.js +1 -1
  6. package/dist/umd/semi-ui.min.js.map +1 -1
  7. package/lib/cjs/button/splitButtonGroup.d.ts +2 -0
  8. package/lib/cjs/button/splitButtonGroup.js +14 -0
  9. package/lib/cjs/collapse/item.d.ts +2 -1
  10. package/lib/cjs/collapse/item.js +4 -1
  11. package/lib/cjs/form/baseForm.d.ts +12 -10
  12. package/lib/cjs/form/baseForm.js +17 -13
  13. package/lib/cjs/form/hoc/withField.js +13 -11
  14. package/lib/cjs/form/interface.d.ts +5 -3
  15. package/lib/cjs/inputNumber/index.js +1 -1
  16. package/lib/cjs/modal/confirm.d.ts +1 -1
  17. package/lib/cjs/table/ResizableHeaderCell.d.ts +2 -0
  18. package/lib/cjs/table/ResizableHeaderCell.js +6 -4
  19. package/lib/cjs/table/TableHeader.d.ts +2 -2
  20. package/lib/cjs/table/TableHeaderRow.d.ts +2 -1
  21. package/lib/cjs/table/TableHeaderRow.js +3 -0
  22. package/lib/cjs/table/interface.d.ts +2 -1
  23. package/lib/cjs/toast/index.d.ts +18 -0
  24. package/lib/cjs/toast/index.js +49 -4
  25. package/lib/cjs/toast/toast.d.ts +11 -0
  26. package/lib/cjs/toast/toast.js +22 -2
  27. package/lib/cjs/tooltip/index.d.ts +1 -1
  28. package/lib/cjs/tooltip/index.js +2 -1
  29. package/lib/cjs/tree/treeNode.js +1 -2
  30. package/lib/cjs/typography/base.js +1 -3
  31. package/lib/cjs/upload/fileCard.d.ts +13 -2
  32. package/lib/cjs/upload/fileCard.js +52 -11
  33. package/lib/cjs/upload/index.d.ts +4 -0
  34. package/lib/cjs/upload/index.js +16 -4
  35. package/lib/es/button/splitButtonGroup.d.ts +2 -0
  36. package/lib/es/button/splitButtonGroup.js +14 -0
  37. package/lib/es/collapse/item.d.ts +2 -1
  38. package/lib/es/collapse/item.js +4 -1
  39. package/lib/es/form/baseForm.d.ts +12 -10
  40. package/lib/es/form/baseForm.js +17 -13
  41. package/lib/es/form/hoc/withField.js +14 -12
  42. package/lib/es/form/interface.d.ts +5 -3
  43. package/lib/es/inputNumber/index.js +1 -1
  44. package/lib/es/modal/confirm.d.ts +1 -1
  45. package/lib/es/table/ResizableHeaderCell.d.ts +2 -0
  46. package/lib/es/table/ResizableHeaderCell.js +6 -4
  47. package/lib/es/table/TableHeader.d.ts +2 -2
  48. package/lib/es/table/TableHeaderRow.d.ts +2 -1
  49. package/lib/es/table/TableHeaderRow.js +3 -0
  50. package/lib/es/table/interface.d.ts +2 -1
  51. package/lib/es/toast/index.d.ts +18 -0
  52. package/lib/es/toast/index.js +49 -4
  53. package/lib/es/toast/toast.d.ts +11 -0
  54. package/lib/es/toast/toast.js +22 -2
  55. package/lib/es/tooltip/index.d.ts +1 -1
  56. package/lib/es/tooltip/index.js +2 -1
  57. package/lib/es/tree/treeNode.js +1 -2
  58. package/lib/es/typography/base.js +1 -3
  59. package/lib/es/upload/fileCard.d.ts +13 -2
  60. package/lib/es/upload/fileCard.js +52 -9
  61. package/lib/es/upload/index.d.ts +4 -0
  62. package/lib/es/upload/index.js +16 -4
  63. package/package.json +2 -2
@@ -20,6 +20,7 @@ const prefixCls = _constants.cssClasses.PREFIX;
20
20
  class Toast extends _baseComponent.default {
21
21
  constructor(props) {
22
22
  super(props);
23
+ this.toastEle = /*#__PURE__*/_react.default.createRef();
23
24
  this.clearCloseTimer = () => {
24
25
  this.foundation.clearCloseTimer_();
25
26
  };
@@ -99,11 +100,15 @@ class Toast extends _baseComponent.default {
99
100
  textStyle.maxWidth = textMaxWidth;
100
101
  const btnTheme = 'borderless';
101
102
  const btnSize = 'small';
102
- return /*#__PURE__*/_react.default.createElement("div", {
103
+ const reservedIndex = this.props.positionInList ? this.props.positionInList.length - this.props.positionInList.index - 1 : 0;
104
+ const toastEle = /*#__PURE__*/_react.default.createElement("div", {
105
+ ref: this.toastEle,
103
106
  role: "alert",
104
107
  "aria-label": `${type ? type : 'default'} type`,
105
108
  className: toastCls,
106
- style: style,
109
+ style: Object.assign(Object.assign({}, style), {
110
+ transform: `translate3d(0,0,${reservedIndex * -10}px)`
111
+ }),
107
112
  onMouseEnter: this.clearCloseTimer,
108
113
  onMouseLeave: this.startCloseTimer,
109
114
  onAnimationStart: this.props.onAnimationStart,
@@ -125,6 +130,17 @@ class Toast extends _baseComponent.default {
125
130
  theme: btnTheme,
126
131
  size: btnSize
127
132
  }))));
133
+ if (this.props.stack) {
134
+ const height = this.props.stackExpanded && this.toastEle.current && getComputedStyle(this.toastEle.current).height || 0;
135
+ return /*#__PURE__*/_react.default.createElement("div", {
136
+ className: `${prefixCls}-zero-height-wrapper`,
137
+ style: {
138
+ height
139
+ }
140
+ }, toastEle);
141
+ } else {
142
+ return toastEle;
143
+ }
128
144
  }
129
145
  }
130
146
  Toast.contextType = _context.default;
@@ -139,6 +155,8 @@ Toast.propTypes = {
139
155
  style: _propTypes.default.object,
140
156
  className: _propTypes.default.string,
141
157
  showClose: _propTypes.default.bool,
158
+ stack: _propTypes.default.bool,
159
+ stackExpanded: _propTypes.default.bool,
142
160
  icon: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
143
161
  direction: _propTypes.default.oneOf(_constants.strings.directions)
144
162
  };
@@ -149,6 +167,8 @@ Toast.defaultProps = {
149
167
  duration: _constants.numbers.duration,
150
168
  textMaxWidth: 450,
151
169
  showClose: true,
170
+ stack: false,
171
+ stackExpanded: false,
152
172
  theme: 'normal'
153
173
  };
154
174
  var _default = Toast;
@@ -92,7 +92,7 @@ export default class Tooltip extends BaseComponent<TooltipProps, TooltipState> {
92
92
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
93
93
  mouseEnterDelay: PropTypes.Requireable<number>;
94
94
  mouseLeaveDelay: PropTypes.Requireable<number>;
95
- trigger: PropTypes.Validator<NonNullable<"hover" | "focus" | "click" | "custom">>;
95
+ trigger: PropTypes.Validator<NonNullable<"hover" | "focus" | "click" | "custom" | "contextMenu">>;
96
96
  className: PropTypes.Requireable<string>;
97
97
  wrapperClassName: PropTypes.Requireable<string>;
98
98
  clickToHide: PropTypes.Requireable<boolean>;
@@ -338,7 +338,8 @@ class Tooltip extends _baseComponent.default {
338
338
  click: 'onClick',
339
339
  focus: 'onFocus',
340
340
  blur: 'onBlur',
341
- keydown: 'onKeyDown'
341
+ keydown: 'onKeyDown',
342
+ contextMenu: 'onContextMenu'
342
343
  }),
343
344
  registerTriggerEvent: triggerEventSet => {
344
345
  this.setState({
@@ -217,7 +217,7 @@ class TreeNode extends _react.PureComponent {
217
217
  } = this.props;
218
218
  if ((0, _isFunction2.default)(renderLabel)) {
219
219
  return renderLabel(label, data);
220
- } else if ((0, _isString2.default)(label) && filtered && keyword && treeNodeFilterProp === 'label') {
220
+ } else if ((0, _isString2.default)(label) && filtered && keyword) {
221
221
  return (0, _index.getHighLightTextHTML)({
222
222
  sourceString: label,
223
223
  searchWords: [keyword],
@@ -367,7 +367,6 @@ class TreeNode extends _react.PureComponent {
367
367
  [`${prefixcls}-selected`]: selected,
368
368
  [`${prefixcls}-active`]: !multiple && active,
369
369
  [`${prefixcls}-ellipsis`]: labelEllipsis,
370
- [`${prefixcls}-filtered`]: filtered && treeNodeFilterProp !== 'label',
371
370
  [`${prefixcls}-drag-over`]: !disabled && dragOver,
372
371
  [`${prefixcls}-draggable`]: !disabled && draggable && !renderFullLabel,
373
372
  // When draggable + renderFullLabel is enabled, the default style
@@ -126,9 +126,7 @@ class Base extends _react.Component {
126
126
  if (showTooltip.type && showTooltip.type.toLowerCase() === 'popover') {
127
127
  return (0, _merge2.default)({
128
128
  opts: {
129
- style: {
130
- width: '240px'
131
- },
129
+ // style: { width: '240px' },
132
130
  showArrow: true
133
131
  }
134
132
  }, showTooltip);
@@ -1,12 +1,19 @@
1
- import { PureComponent, ReactNode, MouseEvent, CSSProperties } from 'react';
1
+ import { ReactNode, MouseEvent, CSSProperties } from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import { FileCardAdapter } from '@douyinfe/semi-foundation/lib/cjs/upload/fileCardFoundation';
3
4
  import { Locale } from '../locale/interface';
5
+ import BaseComponent from '../_base/baseComponent';
4
6
  import { RenderFileItemProps } from './interface';
5
7
  export interface FileCardProps extends RenderFileItemProps {
6
8
  className?: string;
7
9
  style?: CSSProperties;
10
+ picWidth?: string | number;
11
+ picHeight?: string | number;
8
12
  }
9
- declare class FileCard extends PureComponent<FileCardProps> {
13
+ export interface FileCardState {
14
+ fallbackPreview?: boolean;
15
+ }
16
+ declare class FileCard extends BaseComponent<FileCardProps, FileCardState> {
10
17
  static propTypes: {
11
18
  className: PropTypes.Requireable<string>;
12
19
  disabled: PropTypes.Requireable<boolean>;
@@ -19,6 +26,8 @@ declare class FileCard extends PureComponent<FileCardProps> {
19
26
  percent: PropTypes.Requireable<number>;
20
27
  preview: PropTypes.Requireable<boolean>;
21
28
  previewFile: PropTypes.Requireable<(...args: any[]) => any>;
29
+ picWidth: PropTypes.Requireable<NonNullable<string | number>>;
30
+ picHeight: PropTypes.Requireable<NonNullable<string | number>>;
22
31
  showReplace: PropTypes.Requireable<boolean>;
23
32
  showRetry: PropTypes.Requireable<boolean>;
24
33
  size: PropTypes.Requireable<NonNullable<string | number>>;
@@ -36,6 +45,8 @@ declare class FileCard extends PureComponent<FileCardProps> {
36
45
  preview: boolean;
37
46
  size: string;
38
47
  };
48
+ constructor(props: FileCardProps);
49
+ get adapter(): FileCardAdapter<FileCardProps, FileCardState>;
39
50
  transSize(size: string | number): string;
40
51
  renderValidateMessage(): ReactNode;
41
52
  renderPicValidateMsg(): ReactNode;
@@ -4,21 +4,21 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = _interopRequireDefault(require("react"));
8
8
  var _classnames = _interopRequireDefault(require("classnames"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _constants = require("@douyinfe/semi-foundation/lib/cjs/upload/constants");
11
+ var _fileCardFoundation = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/upload/fileCardFoundation"));
11
12
  var _utils = require("@douyinfe/semi-foundation/lib/cjs/upload/utils");
12
13
  var _semiIcons = require("@douyinfe/semi-icons");
13
14
  var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer"));
15
+ var _baseComponent = _interopRequireDefault(require("../_base/baseComponent"));
14
16
  var _index = _interopRequireDefault(require("../button/index"));
15
17
  var _index2 = _interopRequireDefault(require("../progress/index"));
16
18
  var _index3 = _interopRequireDefault(require("../tooltip/index"));
17
19
  var _index4 = _interopRequireDefault(require("../spin/index"));
18
20
  var _reactUtils = require("../_base/reactUtils");
19
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
22
  const prefixCls = _constants.cssClasses.PREFIX;
23
23
  const ErrorSvg = function () {
24
24
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -88,7 +88,21 @@ const DirectorySvg = function () {
88
88
  strokeLinejoin: "round"
89
89
  }));
90
90
  };
91
- class FileCard extends _react.PureComponent {
91
+ class FileCard extends _baseComponent.default {
92
+ constructor(props) {
93
+ super(props);
94
+ this.state = {
95
+ fallbackPreview: false
96
+ };
97
+ this.foundation = new _fileCardFoundation.default(this.adapter);
98
+ }
99
+ get adapter() {
100
+ return Object.assign(Object.assign({}, super.adapter), {
101
+ updateFallbackPreview: fallbackPreview => this.setState({
102
+ fallbackPreview
103
+ })
104
+ });
105
+ }
92
106
  transSize(size) {
93
107
  if (typeof size === 'number') {
94
108
  return (0, _utils.getFileSize)(size);
@@ -149,6 +163,9 @@ class FileCard extends _react.PureComponent {
149
163
  }, icon) : null;
150
164
  }
151
165
  renderPic(locale) {
166
+ const {
167
+ fallbackPreview
168
+ } = this.state;
152
169
  const {
153
170
  url,
154
171
  percent,
@@ -161,7 +178,9 @@ class FileCard extends _react.PureComponent {
161
178
  renderPicPreviewIcon,
162
179
  renderThumbnail,
163
180
  name,
164
- index
181
+ index,
182
+ picHeight,
183
+ picWidth
165
184
  } = this.props;
166
185
  const showProgress = status === _constants.strings.FILE_STATUS_UPLOADING && percent !== 100;
167
186
  const showRetry = status === _constants.strings.FILE_STATUS_UPLOAD_FAIL && this.props.showRetry;
@@ -169,6 +188,7 @@ class FileCard extends _react.PureComponent {
169
188
  const showPreview = status === _constants.strings.FILE_STATUS_SUCCESS && !this.props.showReplace;
170
189
  const filePicCardCls = (0, _classnames.default)({
171
190
  [`${prefixCls}-picture-file-card`]: true,
191
+ [`${prefixCls}-picture-file-card-preview-fallback`]: fallbackPreview,
172
192
  [`${prefixCls}-picture-file-card-disabled`]: disabled,
173
193
  [`${prefixCls}-picture-file-card-show-pointer`]: typeof onPreviewClick !== 'undefined',
174
194
  [`${prefixCls}-picture-file-card-error`]: status === _constants.strings.FILE_STATUS_UPLOAD_FAIL,
@@ -210,14 +230,29 @@ class FileCard extends _react.PureComponent {
210
230
  const picInfo = typeof renderPicInfo === 'function' ? renderPicInfo(this.props) : /*#__PURE__*/_react.default.createElement("div", {
211
231
  className: `${prefixCls}-picture-file-card-pic-info`
212
232
  }, index + 1);
213
- const thumbnail = typeof renderThumbnail === 'function' ? renderThumbnail(this.props) : /*#__PURE__*/_react.default.createElement("img", {
233
+ let imgStyle = {};
234
+ let itemStyle = style ? Object.assign({}, style) : {};
235
+ if (picHeight) {
236
+ itemStyle.height = picHeight;
237
+ imgStyle.height = picHeight;
238
+ }
239
+ if (picWidth) {
240
+ itemStyle.width = picWidth;
241
+ imgStyle.width = picWidth;
242
+ }
243
+ const defaultThumbTail = !fallbackPreview ? /*#__PURE__*/_react.default.createElement("img", {
214
244
  src: url,
215
- alt: name
245
+ alt: name,
246
+ onError: error => this.foundation.handleImageError(error),
247
+ style: imgStyle
248
+ }) : /*#__PURE__*/_react.default.createElement(_semiIcons.IconFile, {
249
+ size: "large"
216
250
  });
251
+ const thumbnail = typeof renderThumbnail === 'function' ? renderThumbnail(this.props) : defaultThumbTail;
217
252
  return /*#__PURE__*/_react.default.createElement("div", {
218
253
  role: "listitem",
219
254
  className: filePicCardCls,
220
- style: style,
255
+ style: itemStyle,
221
256
  onClick: onPreviewClick
222
257
  }, thumbnail, showProgress ? /*#__PURE__*/_react.default.createElement(_index2.default, {
223
258
  percent: percent,
@@ -242,6 +277,9 @@ class FileCard extends _react.PureComponent {
242
277
  onPreviewClick,
243
278
  renderFileOperation
244
279
  } = this.props;
280
+ const {
281
+ fallbackPreview
282
+ } = this.state;
245
283
  const fileCardCls = (0, _classnames.default)({
246
284
  [`${prefixCls}-file-card`]: true,
247
285
  [`${prefixCls}-file-card-fail`]: status === _constants.strings.FILE_STATUS_VALID_FAIL || status === _constants.strings.FILE_STATUS_UPLOAD_FAIL,
@@ -249,7 +287,7 @@ class FileCard extends _react.PureComponent {
249
287
  });
250
288
  const previewCls = (0, _classnames.default)({
251
289
  [`${prefixCls}-file-card-preview`]: true,
252
- [`${prefixCls}-file-card-preview-placeholder`]: !preview || previewFile
290
+ [`${prefixCls}-file-card-preview-placeholder`]: !preview || previewFile || fallbackPreview
253
291
  });
254
292
  const infoCls = `${prefixCls}-file-card-info`;
255
293
  const closeCls = `${prefixCls}-file-card-close`;
@@ -259,9 +297,10 @@ class FileCard extends _react.PureComponent {
259
297
  const showRetry = status === _constants.strings.FILE_STATUS_UPLOAD_FAIL && propsShowRetry;
260
298
  const showReplace = status === _constants.strings.FILE_STATUS_SUCCESS && propsShowReplace;
261
299
  const fileSize = this.transSize(size);
262
- let previewContent = preview ? /*#__PURE__*/_react.default.createElement("img", {
300
+ let previewContent = preview && !fallbackPreview ? /*#__PURE__*/_react.default.createElement("img", {
263
301
  src: url,
264
- alt: name
302
+ alt: name,
303
+ onError: error => this.foundation.handleImageError(error)
265
304
  }) : /*#__PURE__*/_react.default.createElement(_semiIcons.IconFile, {
266
305
  size: "large"
267
306
  });
@@ -361,6 +400,8 @@ FileCard.propTypes = {
361
400
  percent: _propTypes.default.number,
362
401
  preview: _propTypes.default.bool,
363
402
  previewFile: _propTypes.default.func,
403
+ picWidth: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
404
+ picHeight: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
364
405
  showReplace: _propTypes.default.bool,
365
406
  showRetry: _propTypes.default.bool,
366
407
  size: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -56,6 +56,8 @@ export interface UploadProps {
56
56
  previewFile?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
57
57
  prompt?: ReactNode;
58
58
  promptPosition?: PromptPositionType;
59
+ picHeight?: string | number;
60
+ picWidth?: string | number;
59
61
  renderFileItem?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
60
62
  renderPicInfo?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
61
63
  renderThumbnail?: (renderFileItemProps: RenderFileItemProps) => ReactNode;
@@ -129,6 +131,8 @@ declare class Upload extends BaseComponent<UploadProps, UploadState> {
129
131
  previewFile: PropTypes.Requireable<(...args: any[]) => any>;
130
132
  prompt: PropTypes.Requireable<PropTypes.ReactNodeLike>;
131
133
  promptPosition: PropTypes.Requireable<"left" | "right" | "bottom">;
134
+ picWidth: PropTypes.Requireable<NonNullable<string | number>>;
135
+ picHeight: PropTypes.Requireable<NonNullable<string | number>>;
132
136
  renderFileItem: PropTypes.Requireable<(...args: any[]) => any>;
133
137
  renderPicPreviewIcon: PropTypes.Requireable<(...args: any[]) => any>;
134
138
  renderFileOperation: PropTypes.Requireable<(...args: any[]) => any>;
@@ -116,7 +116,9 @@ class Upload extends _baseComponent.default {
116
116
  renderFileItem,
117
117
  renderThumbnail,
118
118
  disabled,
119
- onPreviewClick
119
+ onPreviewClick,
120
+ picWidth,
121
+ picHeight
120
122
  } = this.props;
121
123
  const onRemove = () => this.remove(file);
122
124
  const onRetry = () => {
@@ -140,7 +142,9 @@ class Upload extends _baseComponent.default {
140
142
  renderFileOperation,
141
143
  renderThumbnail,
142
144
  onReplace,
143
- onPreviewClick: typeof onPreviewClick !== 'undefined' ? () => this.foundation.handlePreviewClick(file) : undefined
145
+ onPreviewClick: typeof onPreviewClick !== 'undefined' ? () => this.foundation.handlePreviewClick(file) : undefined,
146
+ picWidth,
147
+ picHeight
144
148
  });
145
149
  if (status === _constants.strings.FILE_STATUS_UPLOAD_FAIL && !validateMessage) {
146
150
  fileCardProps.validateMessage = locale.fail;
@@ -173,7 +177,9 @@ class Upload extends _baseComponent.default {
173
177
  disabled,
174
178
  children,
175
179
  draggable,
176
- hotSpotLocation
180
+ hotSpotLocation,
181
+ picHeight,
182
+ picWidth
177
183
  } = this.props;
178
184
  const {
179
185
  fileList: stateFileList,
@@ -197,7 +203,11 @@ class Upload extends _baseComponent.default {
197
203
  const addContentProps = {
198
204
  role: 'button',
199
205
  className: uploadAddCls,
200
- onClick: this.onClick
206
+ onClick: this.onClick,
207
+ style: {
208
+ height: picHeight,
209
+ width: picWidth
210
+ }
201
211
  };
202
212
  const containerProps = {
203
213
  className: fileListCls
@@ -578,6 +588,8 @@ Upload.propTypes = {
578
588
  previewFile: _propTypes.default.func,
579
589
  prompt: _propTypes.default.node,
580
590
  promptPosition: _propTypes.default.oneOf(_constants.strings.PROMPT_POSITION),
591
+ picWidth: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
592
+ picHeight: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
581
593
  renderFileItem: _propTypes.default.func,
582
594
  renderPicPreviewIcon: _propTypes.default.func,
583
595
  renderFileOperation: _propTypes.default.func,
@@ -6,10 +6,12 @@ export interface SplitButtonGroupProps extends BaseProps {
6
6
  'aria-label'?: React.AriaAttributes['aria-label'];
7
7
  }
8
8
  export default class SplitButtonGroup extends BaseComponent<SplitButtonGroupProps> {
9
+ containerRef: React.RefObject<HTMLDivElement>;
9
10
  static propTypes: {
10
11
  style: PropTypes.Requireable<object>;
11
12
  className: PropTypes.Requireable<string>;
12
13
  'aria-label': PropTypes.Requireable<string>;
13
14
  };
15
+ componentDidMount(): void;
14
16
  render(): JSX.Element;
15
17
  }
@@ -6,6 +6,19 @@ import '@douyinfe/semi-foundation/lib/es/button/button.css';
6
6
  import BaseComponent from '../_base/baseComponent';
7
7
  const prefixCls = cssClasses.PREFIX;
8
8
  export default class SplitButtonGroup extends BaseComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.containerRef = /*#__PURE__*/React.createRef();
12
+ }
13
+ componentDidMount() {
14
+ if (this.containerRef.current) {
15
+ const buttons = this.containerRef.current.querySelectorAll('button');
16
+ const firstButton = buttons[0];
17
+ const lastButton = buttons[buttons.length - 1];
18
+ firstButton === null || firstButton === void 0 ? void 0 : firstButton.classList.add(`${prefixCls}-first`);
19
+ lastButton === null || lastButton === void 0 ? void 0 : lastButton.classList.add(`${prefixCls}-last`);
20
+ }
21
+ }
9
22
  render() {
10
23
  const {
11
24
  children,
@@ -14,6 +27,7 @@ export default class SplitButtonGroup extends BaseComponent {
14
27
  } = this.props;
15
28
  const cls = classNames(`${prefixCls}-split`, className);
16
29
  return /*#__PURE__*/React.createElement("div", {
30
+ ref: this.containerRef,
17
31
  className: cls,
18
32
  style: style,
19
33
  role: "group",
@@ -15,6 +15,7 @@ export interface CollapsePanelProps {
15
15
  export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
16
16
  static contextType: React.Context<CollapseContextType>;
17
17
  headerExpandIconTriggerRef: React.RefObject<HTMLElement>;
18
+ private ariaID;
18
19
  static propTypes: {
19
20
  itemKey: PropTypes.Requireable<string>;
20
21
  extra: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -28,8 +29,8 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
28
29
  showArrow: boolean;
29
30
  disabled: boolean;
30
31
  };
31
- private ariaID;
32
32
  context: CollapseContextType;
33
+ componentDidMount(): void;
33
34
  renderHeader(active: boolean, expandIconEnable?: boolean): JSX.Element;
34
35
  handleClick: (itemKey: string, e: React.MouseEvent) => void;
35
36
  render(): JSX.Element;
@@ -18,7 +18,7 @@ export default class CollapsePanel extends PureComponent {
18
18
  constructor() {
19
19
  super(...arguments);
20
20
  this.headerExpandIconTriggerRef = /*#__PURE__*/React.createRef();
21
- this.ariaID = getUuidShort({});
21
+ this.ariaID = "";
22
22
  this.handleClick = (itemKey, e) => {
23
23
  var _a;
24
24
  // Judge user click Icon or Header
@@ -28,6 +28,9 @@ export default class CollapsePanel extends PureComponent {
28
28
  }
29
29
  };
30
30
  }
31
+ componentDidMount() {
32
+ this.ariaID = getUuidShort({});
33
+ }
31
34
  renderHeader(active) {
32
35
  let expandIconEnable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
33
36
  const {
@@ -19,25 +19,27 @@ declare class Form<Values extends Record<string, any> = any> extends BaseCompone
19
19
  onChange: PropTypes.Requireable<(...args: any[]) => any>;
20
20
  onReset: PropTypes.Requireable<(...args: any[]) => any>;
21
21
  onValueChange: PropTypes.Requireable<(...args: any[]) => any>;
22
- initValues: PropTypes.Requireable<object>;
23
- getFormApi: PropTypes.Requireable<(...args: any[]) => any>;
22
+ autoScrollToError: PropTypes.Requireable<NonNullable<boolean | object>>;
23
+ allowEmpty: PropTypes.Requireable<boolean>;
24
+ className: PropTypes.Requireable<string>;
24
25
  component: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
25
- render: PropTypes.Requireable<(...args: any[]) => any>;
26
+ disabled: PropTypes.Requireable<boolean>;
27
+ extraTextPosition: PropTypes.Requireable<string>;
28
+ getFormApi: PropTypes.Requireable<(...args: any[]) => any>;
29
+ initValues: PropTypes.Requireable<object>;
26
30
  validateFields: PropTypes.Requireable<(...args: any[]) => any>;
27
- style: PropTypes.Requireable<object>;
28
- className: PropTypes.Requireable<string>;
29
31
  layout: PropTypes.Requireable<string>;
30
32
  labelPosition: PropTypes.Requireable<string>;
31
33
  labelWidth: PropTypes.Requireable<NonNullable<string | number>>;
32
34
  labelAlign: PropTypes.Requireable<string>;
33
35
  labelCol: PropTypes.Requireable<object>;
34
- wrapperCol: PropTypes.Requireable<object>;
35
- allowEmpty: PropTypes.Requireable<boolean>;
36
- autoScrollToError: PropTypes.Requireable<NonNullable<boolean | object>>;
37
- disabled: PropTypes.Requireable<boolean>;
36
+ render: PropTypes.Requireable<(...args: any[]) => any>;
37
+ style: PropTypes.Requireable<object>;
38
38
  showValidateIcon: PropTypes.Requireable<boolean>;
39
- extraTextPosition: PropTypes.Requireable<string>;
39
+ stopValidateWithError: PropTypes.Requireable<boolean>;
40
40
  id: PropTypes.Requireable<string>;
41
+ wrapperCol: PropTypes.Requireable<object>;
42
+ trigger: PropTypes.Requireable<NonNullable<string | string[]>>;
41
43
  };
42
44
  static defaultProps: {
43
45
  onChange: (...args: any[]) => void;
@@ -164,10 +164,12 @@ class Form extends BaseComponent {
164
164
  allowEmpty,
165
165
  autoScrollToError,
166
166
  showValidateIcon,
167
+ stopValidateWithError,
167
168
  extraTextPosition,
168
- id
169
+ id,
170
+ trigger
169
171
  } = _a,
170
- rest = __rest(_a, ["children", "getFormApi", "onChange", "onSubmit", "onSubmitFail", "onValueChange", "component", "render", "validateFields", "initValues", "layout", "style", "className", "labelPosition", "labelWidth", "labelAlign", "labelCol", "wrapperCol", "allowEmpty", "autoScrollToError", "showValidateIcon", "extraTextPosition", "id"]);
172
+ rest = __rest(_a, ["children", "getFormApi", "onChange", "onSubmit", "onSubmitFail", "onValueChange", "component", "render", "validateFields", "initValues", "layout", "style", "className", "labelPosition", "labelWidth", "labelAlign", "labelCol", "wrapperCol", "allowEmpty", "autoScrollToError", "showValidateIcon", "stopValidateWithError", "extraTextPosition", "id", "trigger"]);
171
173
  const formCls = classNames(prefix, className, {
172
174
  [prefix + '-vertical']: layout === 'vertical',
173
175
  [prefix + '-horizontal']: layout === 'horizontal'
@@ -200,25 +202,27 @@ Form.propTypes = {
200
202
  onReset: PropTypes.func,
201
203
  // Triggered when the value of the form is updated, only when the value of the subfield changes. The entry parameter is formState.values
202
204
  onValueChange: PropTypes.func,
203
- initValues: PropTypes.object,
204
- getFormApi: PropTypes.func,
205
+ autoScrollToError: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
206
+ allowEmpty: PropTypes.bool,
207
+ className: PropTypes.string,
205
208
  component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
206
- render: PropTypes.func,
209
+ disabled: PropTypes.bool,
210
+ extraTextPosition: PropTypes.oneOf(strings.EXTRA_POS),
211
+ getFormApi: PropTypes.func,
212
+ initValues: PropTypes.object,
207
213
  validateFields: PropTypes.func,
208
- style: PropTypes.object,
209
- className: PropTypes.string,
210
214
  layout: PropTypes.oneOf(strings.LAYOUT),
211
215
  labelPosition: PropTypes.oneOf(strings.LABEL_POS),
212
216
  labelWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
213
217
  labelAlign: PropTypes.oneOf(strings.LABEL_ALIGN),
214
218
  labelCol: PropTypes.object,
215
- wrapperCol: PropTypes.object,
216
- allowEmpty: PropTypes.bool,
217
- autoScrollToError: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
218
- disabled: PropTypes.bool,
219
+ render: PropTypes.func,
220
+ style: PropTypes.object,
219
221
  showValidateIcon: PropTypes.bool,
220
- extraTextPosition: PropTypes.oneOf(strings.EXTRA_POS),
221
- id: PropTypes.string
222
+ stopValidateWithError: PropTypes.bool,
223
+ id: PropTypes.string,
224
+ wrapperCol: PropTypes.object,
225
+ trigger: PropTypes.oneOfType([PropTypes.oneOf(['blur', 'change', 'custom', 'mount']), PropTypes.arrayOf(PropTypes.oneOf(['blur', 'change', 'custom', 'mount']))])
222
226
  };
223
227
  Form.defaultProps = {
224
228
  onChange: _noop,
@@ -2,7 +2,7 @@
2
2
  import React, { useState, useLayoutEffect, useEffect, useMemo, useRef, forwardRef } from 'react';
3
3
  import classNames from 'classnames';
4
4
  import { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';
5
- import { isValid, generateValidatesFromRules, mergeOptions, mergeProps, getDisplayName } from '@douyinfe/semi-foundation/lib/es/form/utils';
5
+ import { isValid, generateValidatesFromRules, mergeOptions, mergeProps, getDisplayName, transformTrigger, transformDefaultBooleanAPI } from '@douyinfe/semi-foundation/lib/es/form/utils';
6
6
  import * as ObjectUtil from '@douyinfe/semi-foundation/lib/es/utils/object';
7
7
  import isPromise from '@douyinfe/semi-foundation/lib/es/utils/isPromise';
8
8
  import warning from '@douyinfe/semi-foundation/lib/es/utils/warning';
@@ -78,6 +78,15 @@ function withField(Component, opts) {
78
78
  warning(true, '[Semi Form]: Field Component must be use inside the Form, please check your dom declaration');
79
79
  return null;
80
80
  }
81
+ let formProps = updater.getFormProps(['labelPosition', 'labelWidth', 'labelAlign', 'labelCol', 'wrapperCol', 'disabled', 'showValidateIcon', 'extraTextPosition', 'stopValidateWithError', 'trigger']);
82
+ let mergeLabelPos = labelPosition || formProps.labelPosition;
83
+ let mergeLabelWidth = labelWidth || formProps.labelWidth;
84
+ let mergeLabelAlign = labelAlign || formProps.labelAlign;
85
+ let mergeLabelCol = labelCol || formProps.labelCol;
86
+ let mergeWrapperCol = wrapperCol || formProps.wrapperCol;
87
+ let mergeExtraPos = extraTextPosition || formProps.extraTextPosition || 'bottom';
88
+ let mergeStopValidateWithError = transformDefaultBooleanAPI(stopValidateWithError, formProps.stopValidateWithError, false);
89
+ let mergeTrigger = transformTrigger(trigger, formProps.trigger);
81
90
  // To prevent user forgetting to pass the field, use undefined as the key, and updater.getValue will get the wrong value.
82
91
  let initValueInFormOpts = typeof field !== 'undefined' ? updater.getValue(field) : undefined; // Get the init value of form from formP rops.init Values Get the initial value set in the initValues of Form
83
92
  let initVal = typeof initValue !== 'undefined' ? initValue : initValueInFormOpts;
@@ -91,7 +100,7 @@ function withField(Component, opts) {
91
100
  } catch (err) {}
92
101
  // FIXME typeof initVal
93
102
  const [value, setValue, getVal] = useStateWithGetter(typeof initVal !== undefined ? initVal : null);
94
- const validateOnMount = trigger.includes('mount');
103
+ const validateOnMount = mergeTrigger.includes('mount');
95
104
  allowEmpty = allowEmpty || updater.getFormProps().allowEmpty;
96
105
  // Error information: Array, String, undefined
97
106
  const [error, setError, getError] = useStateWithGetter();
@@ -150,7 +159,7 @@ function withField(Component, opts) {
150
159
  };
151
160
  const rootPromise = new Promise((resolve, reject) => {
152
161
  validator.validate(model, {
153
- first: stopValidateWithError
162
+ first: mergeStopValidateWithError
154
163
  }, (errors, fields) => {}).then(res => {
155
164
  if (validatePromise.current !== rootPromise) {
156
165
  return;
@@ -298,7 +307,7 @@ function withField(Component, opts) {
298
307
  });
299
308
  updateValue(val);
300
309
  // only validate when trigger includes change
301
- if (trigger.includes('change')) {
310
+ if (mergeTrigger.includes('change')) {
302
311
  fieldValidate(val);
303
312
  }
304
313
  };
@@ -309,7 +318,7 @@ function withField(Component, opts) {
309
318
  if (!touched) {
310
319
  updateTouched(true);
311
320
  }
312
- if (trigger.includes('blur')) {
321
+ if (mergeTrigger.includes('blur')) {
313
322
  let val = getVal();
314
323
  fieldValidate(val);
315
324
  }
@@ -369,13 +378,6 @@ function withField(Component, opts) {
369
378
  };
370
379
  // eslint-disable-next-line react-hooks/exhaustive-deps
371
380
  }, [field]);
372
- let formProps = updater.getFormProps(['labelPosition', 'labelWidth', 'labelAlign', 'labelCol', 'wrapperCol', 'disabled', 'showValidateIcon', 'extraTextPosition']);
373
- let mergeLabelPos = labelPosition || formProps.labelPosition;
374
- let mergeLabelWidth = labelWidth || formProps.labelWidth;
375
- let mergeLabelAlign = labelAlign || formProps.labelAlign;
376
- let mergeLabelCol = labelCol || formProps.labelCol;
377
- let mergeWrapperCol = wrapperCol || formProps.wrapperCol;
378
- let mergeExtraPos = extraTextPosition || formProps.extraTextPosition || 'bottom';
379
381
  // id attribute to improve a11y
380
382
  const a11yId = id ? id : field;
381
383
  const labelId = `${a11yId}-label`;