rsuite 5.0.1 → 5.0.2
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/CHANGELOG.md +12 -0
- package/Uploader/styles/index.less +10 -0
- package/cjs/Cascader/Cascader.js +2 -1
- package/cjs/DatePicker/DatePicker.js +2 -1
- package/cjs/DateRangePicker/DateRangePicker.js +11 -5
- package/cjs/InputPicker/InputPicker.js +2 -1
- package/cjs/MultiCascader/MultiCascader.js +2 -1
- package/cjs/SelectPicker/SelectPicker.js +2 -1
- package/cjs/Table/Table.d.ts +7 -7
- package/cjs/TagPicker/index.d.ts +1 -1
- package/cjs/TreePicker/TreePicker.js +2 -1
- package/cjs/Uploader/UploadFileItem.d.ts +2 -0
- package/cjs/Uploader/UploadFileItem.js +35 -19
- package/cjs/Uploader/Uploader.d.ts +2 -0
- package/cjs/Uploader/Uploader.js +4 -1
- package/cjs/utils/previewFile.d.ts +1 -0
- package/cjs/utils/previewFile.js +11 -0
- package/dist/rsuite-rtl.css +8 -0
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +8 -0
- package/dist/rsuite.js +12 -12
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Cascader/Cascader.js +2 -1
- package/esm/DatePicker/DatePicker.js +2 -1
- package/esm/DateRangePicker/DateRangePicker.js +11 -5
- package/esm/InputPicker/InputPicker.js +2 -1
- package/esm/MultiCascader/MultiCascader.js +2 -1
- package/esm/SelectPicker/SelectPicker.js +2 -1
- package/esm/Table/Table.d.ts +7 -7
- package/esm/TagPicker/index.d.ts +1 -1
- package/esm/TreePicker/TreePicker.js +2 -1
- package/esm/Uploader/UploadFileItem.d.ts +2 -0
- package/esm/Uploader/UploadFileItem.js +35 -19
- package/esm/Uploader/Uploader.d.ts +2 -0
- package/esm/Uploader/Uploader.js +4 -1
- package/esm/utils/previewFile.d.ts +1 -0
- package/esm/utils/previewFile.js +9 -0
- package/package.json +2 -2
- package/styles/variables.less +3 -1
package/esm/Cascader/Cascader.js
CHANGED
|
@@ -451,7 +451,8 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
451
451
|
var _usePickerClassName = usePickerClassName(_extends({}, props, {
|
|
452
452
|
classPrefix: classPrefix,
|
|
453
453
|
hasValue: hasValue,
|
|
454
|
-
name: 'cascader'
|
|
454
|
+
name: 'cascader',
|
|
455
|
+
cleanable: cleanable
|
|
455
456
|
})),
|
|
456
457
|
classes = _usePickerClassName[0],
|
|
457
458
|
usedClassNamePropKeys = _usePickerClassName[1]; // TODO: bad api design
|
|
@@ -387,7 +387,8 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
387
387
|
var _usePickerClassName = usePickerClassName(_extends({}, props, {
|
|
388
388
|
classPrefix: classPrefix,
|
|
389
389
|
name: 'date',
|
|
390
|
-
hasValue: hasValue
|
|
390
|
+
hasValue: hasValue,
|
|
391
|
+
cleanable: cleanable
|
|
391
392
|
})),
|
|
392
393
|
classes = _usePickerClassName[0],
|
|
393
394
|
usedClassNamePropKeys = _usePickerClassName[1];
|
|
@@ -72,7 +72,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
72
72
|
|
|
73
73
|
var _useCustom = useCustom('DateRangePicker', overrideLocale),
|
|
74
74
|
locale = _useCustom.locale,
|
|
75
|
-
formatDate = _useCustom.formatDate
|
|
75
|
+
formatDate = _useCustom.formatDate,
|
|
76
|
+
parseDate = _useCustom.parseDate;
|
|
76
77
|
|
|
77
78
|
var rangeFormatStr = "" + formatStr + character + formatStr;
|
|
78
79
|
|
|
@@ -367,13 +368,17 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
367
368
|
var rangeValue = value.split(character); // isMatch('01/11/2020', 'MM/dd/yyyy') ==> true
|
|
368
369
|
// isMatch('2020-11-01', 'MM/dd/yyyy') ==> false
|
|
369
370
|
|
|
370
|
-
if (!DateUtils.isMatch(rangeValue[0], formatStr
|
|
371
|
+
if (!DateUtils.isMatch(rangeValue[0], formatStr, {
|
|
372
|
+
locale: locale.dateLocale
|
|
373
|
+
}) || !DateUtils.isMatch(rangeValue[1], formatStr, {
|
|
374
|
+
locale: locale.dateLocale
|
|
375
|
+
})) {
|
|
371
376
|
setInputState('Error');
|
|
372
377
|
return;
|
|
373
378
|
}
|
|
374
379
|
|
|
375
|
-
var startDate =
|
|
376
|
-
var endDate =
|
|
380
|
+
var startDate = parseDate(rangeValue[0], formatStr);
|
|
381
|
+
var endDate = parseDate(rangeValue[1], formatStr);
|
|
377
382
|
var selectValue = [startDate, endDate];
|
|
378
383
|
|
|
379
384
|
if (!DateUtils.isValid(startDate) || !DateUtils.isValid(endDate)) {
|
|
@@ -545,7 +550,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
545
550
|
var _usePickerClassName = usePickerClassName(_extends({}, props, {
|
|
546
551
|
classPrefix: classPrefix,
|
|
547
552
|
name: 'daterange',
|
|
548
|
-
hasValue: hasValue
|
|
553
|
+
hasValue: hasValue,
|
|
554
|
+
cleanable: cleanable
|
|
549
555
|
})),
|
|
550
556
|
classes = _usePickerClassName[0],
|
|
551
557
|
usedClassNamePropKeys = _usePickerClassName[1];
|
|
@@ -644,7 +644,8 @@ var InputPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
644
644
|
classPrefix: classPrefix,
|
|
645
645
|
appearance: appearance,
|
|
646
646
|
hasValue: hasValue,
|
|
647
|
-
name: 'input'
|
|
647
|
+
name: 'input',
|
|
648
|
+
cleanable: cleanable
|
|
648
649
|
})),
|
|
649
650
|
pickerClasses = _usePickerClassName[0],
|
|
650
651
|
usedClassNamePropKeys = _usePickerClassName[1];
|
|
@@ -456,7 +456,8 @@ var MultiCascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
456
456
|
var _usePickerClassName = usePickerClassName(_extends({}, props, {
|
|
457
457
|
classPrefix: classPrefix,
|
|
458
458
|
hasValue: hasValue,
|
|
459
|
-
name: 'cascader'
|
|
459
|
+
name: 'cascader',
|
|
460
|
+
cleanable: cleanable
|
|
460
461
|
})),
|
|
461
462
|
classes = _usePickerClassName[0],
|
|
462
463
|
usedClassNamePropKeys = _usePickerClassName[1];
|
|
@@ -283,7 +283,8 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
283
283
|
classPrefix: classPrefix,
|
|
284
284
|
appearance: appearance,
|
|
285
285
|
hasValue: hasValue,
|
|
286
|
-
name: 'select'
|
|
286
|
+
name: 'select',
|
|
287
|
+
cleanable: cleanable
|
|
287
288
|
})),
|
|
288
289
|
classes = _usePickerClassName[0],
|
|
289
290
|
usedClassNamePropKeys = _usePickerClassName[1];
|
package/esm/Table/Table.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { StandardProps } from '../@types/common';
|
|
2
|
+
import { Column, Cell, HeaderCell, ColumnGroup, TableProps } from 'rsuite-table';
|
|
3
|
+
import { StandardProps, RsRefForwardingComponent } from '../@types/common';
|
|
4
4
|
export interface TableInstance extends React.Component<TableProps> {
|
|
5
5
|
scrollTop: (top: number) => void;
|
|
6
6
|
scrollLeft: (left: number) => void;
|
|
@@ -13,13 +13,13 @@ export interface CellProps extends StandardProps {
|
|
|
13
13
|
/** Row Data */
|
|
14
14
|
rowData?: any;
|
|
15
15
|
}
|
|
16
|
-
interface TableComponent extends
|
|
16
|
+
interface TableComponent extends RsRefForwardingComponent<'div', TableProps & {
|
|
17
17
|
ref?: React.Ref<TableInstance>;
|
|
18
18
|
}> {
|
|
19
|
-
Column:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
Column: typeof Column;
|
|
20
|
+
Cell: typeof Cell;
|
|
21
|
+
HeaderCell: typeof HeaderCell;
|
|
22
|
+
ColumnGroup: typeof ColumnGroup;
|
|
23
23
|
}
|
|
24
24
|
declare const Table: TableComponent;
|
|
25
25
|
export default Table;
|
package/esm/TagPicker/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface TagPickerProps extends InputPickerProps {
|
|
|
7
7
|
/**
|
|
8
8
|
* Set the trigger for creating tags. only valid when creatable
|
|
9
9
|
*/
|
|
10
|
-
trigger
|
|
10
|
+
trigger?: TriggerType | TriggerType[];
|
|
11
11
|
}
|
|
12
12
|
declare const TagPicker: PickerComponent<TagPickerProps>;
|
|
13
13
|
export default TagPicker;
|
|
@@ -709,7 +709,8 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
709
709
|
classPrefix: classPrefix,
|
|
710
710
|
appearance: appearance,
|
|
711
711
|
hasValue: hasValidValue,
|
|
712
|
-
name: 'tree'
|
|
712
|
+
name: 'tree',
|
|
713
|
+
cleanable: cleanable
|
|
713
714
|
})),
|
|
714
715
|
classes = _usePickerClassName[0],
|
|
715
716
|
usedClassNamePropKeys = _usePickerClassName[1];
|
|
@@ -13,9 +13,11 @@ export interface UploadFileItemProps extends WithAsProps {
|
|
|
13
13
|
allowReupload?: boolean;
|
|
14
14
|
locale?: UploaderLocale;
|
|
15
15
|
renderFileInfo?: (file: FileType, fileElement: React.ReactNode) => React.ReactNode;
|
|
16
|
+
renderThumbnail?: (file: FileType, thumbnail: React.ReactNode) => React.ReactNode;
|
|
16
17
|
onCancel?: (fileKey: number | string, event: React.MouseEvent) => void;
|
|
17
18
|
onPreview?: (file: FileType, event: React.MouseEvent) => void;
|
|
18
19
|
onReupload?: (file: FileType, event: React.MouseEvent) => void;
|
|
20
|
+
onThumbnailCompleted?: (thumbnail: string) => void;
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Format display file size
|
|
@@ -52,10 +52,12 @@ var UploadFileItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
52
52
|
maxPreviewFileSize = _props$maxPreviewFile === void 0 ? 1024 * 1024 * 5 : _props$maxPreviewFile,
|
|
53
53
|
locale = props.locale,
|
|
54
54
|
renderFileInfo = props.renderFileInfo,
|
|
55
|
+
renderThumbnail = props.renderThumbnail,
|
|
55
56
|
onPreview = props.onPreview,
|
|
56
57
|
onCancel = props.onCancel,
|
|
57
58
|
onReupload = props.onReupload,
|
|
58
|
-
|
|
59
|
+
onThumbnailCompleted = props.onThumbnailCompleted,
|
|
60
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "disabled", "allowReupload", "file", "classPrefix", "listType", "className", "removable", "maxPreviewFileSize", "locale", "renderFileInfo", "renderThumbnail", "onPreview", "onCancel", "onReupload", "onThumbnailCompleted"]);
|
|
59
61
|
|
|
60
62
|
var _useClassNames = useClassNames(classPrefix),
|
|
61
63
|
merge = _useClassNames.merge,
|
|
@@ -80,7 +82,8 @@ var UploadFileItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
80
82
|
|
|
81
83
|
if (!~['picture-text', 'picture'].indexOf(listType)) {
|
|
82
84
|
return;
|
|
83
|
-
}
|
|
85
|
+
} // The thumbnail file size cannot be larger than the preset value.
|
|
86
|
+
|
|
84
87
|
|
|
85
88
|
if (!file.blobFile || (file === null || file === void 0 ? void 0 : (_file$blobFile = file.blobFile) === null || _file$blobFile === void 0 ? void 0 : _file$blobFile.size) > maxPreviewFileSize) {
|
|
86
89
|
return;
|
|
@@ -92,9 +95,10 @@ var UploadFileItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
92
95
|
if (!file.url) {
|
|
93
96
|
getThumbnail(function (previewImage) {
|
|
94
97
|
setPreviewImage(previewImage);
|
|
98
|
+
onThumbnailCompleted === null || onThumbnailCompleted === void 0 ? void 0 : onThumbnailCompleted(previewImage);
|
|
95
99
|
});
|
|
96
100
|
}
|
|
97
|
-
}, [file.url, getThumbnail]);
|
|
101
|
+
}, [file.url, getThumbnail, onThumbnailCompleted]);
|
|
98
102
|
var handlePreview = useCallback(function (event) {
|
|
99
103
|
if (disabled) {
|
|
100
104
|
return;
|
|
@@ -142,18 +146,17 @@ var UploadFileItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
142
146
|
};
|
|
143
147
|
|
|
144
148
|
var renderPreview = function renderPreview() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return null;
|
|
149
|
+
var thumbnail = previewImage ? /*#__PURE__*/React.createElement("img", {
|
|
150
|
+
role: "presentation",
|
|
151
|
+
src: previewImage,
|
|
152
|
+
alt: file.name,
|
|
153
|
+
onClick: handlePreview
|
|
154
|
+
}) : /*#__PURE__*/React.createElement(Attachment, {
|
|
155
|
+
className: prefix('icon')
|
|
156
|
+
});
|
|
157
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
158
|
+
className: prefix('preview')
|
|
159
|
+
}, renderThumbnail ? renderThumbnail(file, thumbnail) : thumbnail);
|
|
157
160
|
};
|
|
158
161
|
/**
|
|
159
162
|
* Render the loading state.
|
|
@@ -165,11 +168,22 @@ var UploadFileItem = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
165
168
|
var classes = prefix('icon-wrapper', {
|
|
166
169
|
'icon-loading': uploading
|
|
167
170
|
});
|
|
171
|
+
|
|
172
|
+
if (uploading) {
|
|
173
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
174
|
+
className: classes
|
|
175
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
176
|
+
className: prefix('icon')
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (listType === 'picture' || listType === 'picture-text') {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
|
|
168
184
|
return /*#__PURE__*/React.createElement("div", {
|
|
169
185
|
className: classes
|
|
170
|
-
},
|
|
171
|
-
className: prefix('icon')
|
|
172
|
-
}) : /*#__PURE__*/React.createElement(Attachment, {
|
|
186
|
+
}, /*#__PURE__*/React.createElement(Attachment, {
|
|
173
187
|
className: prefix('icon')
|
|
174
188
|
}));
|
|
175
189
|
};
|
|
@@ -272,8 +286,10 @@ UploadFileItem.propTypes = {
|
|
|
272
286
|
removable: PropTypes.bool,
|
|
273
287
|
allowReupload: PropTypes.bool,
|
|
274
288
|
renderFileInfo: PropTypes.func,
|
|
289
|
+
renderThumbnail: PropTypes.func,
|
|
275
290
|
onCancel: PropTypes.func,
|
|
276
291
|
onPreview: PropTypes.func,
|
|
277
|
-
onReupload: PropTypes.func
|
|
292
|
+
onReupload: PropTypes.func,
|
|
293
|
+
onThumbnailCompleted: PropTypes.func
|
|
278
294
|
};
|
|
279
295
|
export default UploadFileItem;
|
|
@@ -93,6 +93,8 @@ export interface UploaderProps extends WithAsProps {
|
|
|
93
93
|
onRemove?: (file: FileType) => void;
|
|
94
94
|
/** Custom render file information */
|
|
95
95
|
renderFileInfo?: (file: FileType, fileElement: React.ReactNode) => React.ReactNode;
|
|
96
|
+
/** Custom render thumbnail */
|
|
97
|
+
renderThumbnail?: (file: FileType, thumbnail: React.ReactNode) => React.ReactNode;
|
|
96
98
|
}
|
|
97
99
|
export declare type FileStatusType = 'inited' | 'uploading' | 'error' | 'finished';
|
|
98
100
|
export interface FileProgressType {
|
package/esm/Uploader/Uploader.js
CHANGED
|
@@ -136,13 +136,14 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
136
136
|
shouldUpload = props.shouldUpload,
|
|
137
137
|
shouldQueueUpdate = props.shouldQueueUpdate,
|
|
138
138
|
renderFileInfo = props.renderFileInfo,
|
|
139
|
+
renderThumbnail = props.renderThumbnail,
|
|
139
140
|
onPreview = props.onPreview,
|
|
140
141
|
onChange = props.onChange,
|
|
141
142
|
onSuccess = props.onSuccess,
|
|
142
143
|
onError = props.onError,
|
|
143
144
|
onProgress = props.onProgress,
|
|
144
145
|
onReupload = props.onReupload,
|
|
145
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "listType", "defaultFileList", "fileList", "fileListVisible", "locale", "style", "draggable", "name", "multiple", "disabled", "readOnly", "plaintext", "accept", "children", "toggleAs", "removable", "disabledFileItem", "maxPreviewFileSize", "autoUpload", "action", "headers", "withCredentials", "disableMultipart", "timeout", "data", "onRemove", "onUpload", "shouldUpload", "shouldQueueUpdate", "renderFileInfo", "onPreview", "onChange", "onSuccess", "onError", "onProgress", "onReupload"]);
|
|
146
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "listType", "defaultFileList", "fileList", "fileListVisible", "locale", "style", "draggable", "name", "multiple", "disabled", "readOnly", "plaintext", "accept", "children", "toggleAs", "removable", "disabledFileItem", "maxPreviewFileSize", "autoUpload", "action", "headers", "withCredentials", "disableMultipart", "timeout", "data", "onRemove", "onUpload", "shouldUpload", "shouldQueueUpdate", "renderFileInfo", "renderThumbnail", "onPreview", "onChange", "onSuccess", "onError", "onProgress", "onReupload"]);
|
|
146
147
|
|
|
147
148
|
var _useClassNames = useClassNames(classPrefix),
|
|
148
149
|
merge = _useClassNames.merge,
|
|
@@ -401,6 +402,7 @@ var Uploader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
401
402
|
onReupload: handleReupload,
|
|
402
403
|
onCancel: handleRemoveFile,
|
|
403
404
|
renderFileInfo: renderFileInfo,
|
|
405
|
+
renderThumbnail: renderThumbnail,
|
|
404
406
|
removable: removable && !readOnly && !plaintext,
|
|
405
407
|
allowReupload: !readOnly && !plaintext
|
|
406
408
|
});
|
|
@@ -458,6 +460,7 @@ Uploader.propTypes = {
|
|
|
458
460
|
style: PropTypes.object,
|
|
459
461
|
toggleAs: PropTypes.elementType,
|
|
460
462
|
renderFileInfo: PropTypes.func,
|
|
463
|
+
renderThumbnail: PropTypes.func,
|
|
461
464
|
removable: PropTypes.bool,
|
|
462
465
|
fileListVisible: PropTypes.bool,
|
|
463
466
|
draggable: PropTypes.bool,
|
package/esm/utils/previewFile.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types
|
|
2
|
+
var MIME = ['image/apng', 'image/avif', 'image/gif', 'image/jpeg', 'image/png', 'image/svg+xml', 'image/webp'];
|
|
3
|
+
export function isImage(file) {
|
|
4
|
+
return MIME.includes(file === null || file === void 0 ? void 0 : file.type);
|
|
5
|
+
}
|
|
1
6
|
export default (function (file, callback) {
|
|
7
|
+
if (!isImage(file)) {
|
|
8
|
+
return callback(null);
|
|
9
|
+
}
|
|
10
|
+
|
|
2
11
|
var reader = new FileReader();
|
|
3
12
|
|
|
4
13
|
reader.onloadend = function () {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rsuite",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"description": "A suite of react components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@babel/runtime": "^7.8.4",
|
|
28
|
-
"@rsuite/icons": "^1.0.
|
|
28
|
+
"@rsuite/icons": "^1.0.2",
|
|
29
29
|
"@types/chai": "^4.2.18",
|
|
30
30
|
"@types/classnames": "^2.2.8",
|
|
31
31
|
"@types/lodash": "^4.14.134",
|
package/styles/variables.less
CHANGED
|
@@ -608,7 +608,9 @@
|
|
|
608
608
|
// Uploader
|
|
609
609
|
|
|
610
610
|
@uploader-file-list-margin-top: 10px;
|
|
611
|
-
@uploader-file-item-icon-font-size:
|
|
611
|
+
@uploader-file-item-icon-font-size: 22px;
|
|
612
|
+
@uploader-file-item-icon-margin: 12px;
|
|
613
|
+
@uploader-file-item-icon-margin-plus: 22px;
|
|
612
614
|
@uploader-base-padding: 8px;
|
|
613
615
|
@uploader-picture-side-length: 66px;
|
|
614
616
|
@uploader-picture-item-gap: 10px;
|