@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.
- package/dist/css/semi.css +28 -7
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +1245 -1496
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/lib/cjs/button/splitButtonGroup.d.ts +2 -0
- package/lib/cjs/button/splitButtonGroup.js +14 -0
- package/lib/cjs/collapse/item.d.ts +2 -1
- package/lib/cjs/collapse/item.js +4 -1
- package/lib/cjs/form/baseForm.d.ts +12 -10
- package/lib/cjs/form/baseForm.js +17 -13
- package/lib/cjs/form/hoc/withField.js +13 -11
- package/lib/cjs/form/interface.d.ts +5 -3
- package/lib/cjs/inputNumber/index.js +1 -1
- package/lib/cjs/modal/confirm.d.ts +1 -1
- package/lib/cjs/table/ResizableHeaderCell.d.ts +2 -0
- package/lib/cjs/table/ResizableHeaderCell.js +6 -4
- package/lib/cjs/table/TableHeader.d.ts +2 -2
- package/lib/cjs/table/TableHeaderRow.d.ts +2 -1
- package/lib/cjs/table/TableHeaderRow.js +3 -0
- package/lib/cjs/table/interface.d.ts +2 -1
- package/lib/cjs/toast/index.d.ts +18 -0
- package/lib/cjs/toast/index.js +49 -4
- package/lib/cjs/toast/toast.d.ts +11 -0
- package/lib/cjs/toast/toast.js +22 -2
- package/lib/cjs/tooltip/index.d.ts +1 -1
- package/lib/cjs/tooltip/index.js +2 -1
- package/lib/cjs/tree/treeNode.js +1 -2
- package/lib/cjs/typography/base.js +1 -3
- package/lib/cjs/upload/fileCard.d.ts +13 -2
- package/lib/cjs/upload/fileCard.js +52 -11
- package/lib/cjs/upload/index.d.ts +4 -0
- package/lib/cjs/upload/index.js +16 -4
- package/lib/es/button/splitButtonGroup.d.ts +2 -0
- package/lib/es/button/splitButtonGroup.js +14 -0
- package/lib/es/collapse/item.d.ts +2 -1
- package/lib/es/collapse/item.js +4 -1
- package/lib/es/form/baseForm.d.ts +12 -10
- package/lib/es/form/baseForm.js +17 -13
- package/lib/es/form/hoc/withField.js +14 -12
- package/lib/es/form/interface.d.ts +5 -3
- package/lib/es/inputNumber/index.js +1 -1
- package/lib/es/modal/confirm.d.ts +1 -1
- package/lib/es/table/ResizableHeaderCell.d.ts +2 -0
- package/lib/es/table/ResizableHeaderCell.js +6 -4
- package/lib/es/table/TableHeader.d.ts +2 -2
- package/lib/es/table/TableHeaderRow.d.ts +2 -1
- package/lib/es/table/TableHeaderRow.js +3 -0
- package/lib/es/table/interface.d.ts +2 -1
- package/lib/es/toast/index.d.ts +18 -0
- package/lib/es/toast/index.js +49 -4
- package/lib/es/toast/toast.d.ts +11 -0
- package/lib/es/toast/toast.js +22 -2
- package/lib/es/tooltip/index.d.ts +1 -1
- package/lib/es/tooltip/index.js +2 -1
- package/lib/es/tree/treeNode.js +1 -2
- package/lib/es/typography/base.js +1 -3
- package/lib/es/upload/fileCard.d.ts +13 -2
- package/lib/es/upload/fileCard.js +52 -9
- package/lib/es/upload/index.d.ts +4 -0
- package/lib/es/upload/index.js +16 -4
- package/package.json +2 -2
package/lib/cjs/toast/toast.js
CHANGED
|
@@ -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
|
-
|
|
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>;
|
package/lib/cjs/tooltip/index.js
CHANGED
|
@@ -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({
|
package/lib/cjs/tree/treeNode.js
CHANGED
|
@@ -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
|
|
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 {
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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:
|
|
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>;
|
package/lib/cjs/upload/index.js
CHANGED
|
@@ -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;
|
package/lib/es/collapse/item.js
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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;
|
package/lib/es/form/baseForm.js
CHANGED
|
@@ -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
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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
|
-
|
|
216
|
-
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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 (
|
|
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 (
|
|
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`;
|