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.
Files changed (43) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/Uploader/styles/index.less +10 -0
  3. package/cjs/Cascader/Cascader.js +2 -1
  4. package/cjs/DatePicker/DatePicker.js +2 -1
  5. package/cjs/DateRangePicker/DateRangePicker.js +11 -5
  6. package/cjs/InputPicker/InputPicker.js +2 -1
  7. package/cjs/MultiCascader/MultiCascader.js +2 -1
  8. package/cjs/SelectPicker/SelectPicker.js +2 -1
  9. package/cjs/Table/Table.d.ts +7 -7
  10. package/cjs/TagPicker/index.d.ts +1 -1
  11. package/cjs/TreePicker/TreePicker.js +2 -1
  12. package/cjs/Uploader/UploadFileItem.d.ts +2 -0
  13. package/cjs/Uploader/UploadFileItem.js +35 -19
  14. package/cjs/Uploader/Uploader.d.ts +2 -0
  15. package/cjs/Uploader/Uploader.js +4 -1
  16. package/cjs/utils/previewFile.d.ts +1 -0
  17. package/cjs/utils/previewFile.js +11 -0
  18. package/dist/rsuite-rtl.css +8 -0
  19. package/dist/rsuite-rtl.min.css +1 -1
  20. package/dist/rsuite-rtl.min.css.map +1 -1
  21. package/dist/rsuite.css +8 -0
  22. package/dist/rsuite.js +12 -12
  23. package/dist/rsuite.min.css +1 -1
  24. package/dist/rsuite.min.css.map +1 -1
  25. package/dist/rsuite.min.js +1 -1
  26. package/dist/rsuite.min.js.map +1 -1
  27. package/esm/Cascader/Cascader.js +2 -1
  28. package/esm/DatePicker/DatePicker.js +2 -1
  29. package/esm/DateRangePicker/DateRangePicker.js +11 -5
  30. package/esm/InputPicker/InputPicker.js +2 -1
  31. package/esm/MultiCascader/MultiCascader.js +2 -1
  32. package/esm/SelectPicker/SelectPicker.js +2 -1
  33. package/esm/Table/Table.d.ts +7 -7
  34. package/esm/TagPicker/index.d.ts +1 -1
  35. package/esm/TreePicker/TreePicker.js +2 -1
  36. package/esm/Uploader/UploadFileItem.d.ts +2 -0
  37. package/esm/Uploader/UploadFileItem.js +35 -19
  38. package/esm/Uploader/Uploader.d.ts +2 -0
  39. package/esm/Uploader/Uploader.js +4 -1
  40. package/esm/utils/previewFile.d.ts +1 -0
  41. package/esm/utils/previewFile.js +9 -0
  42. package/package.json +2 -2
  43. package/styles/variables.less +3 -1
@@ -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) || !DateUtils.isMatch(rangeValue[1], 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 = new Date(rangeValue[0]);
376
- var endDate = new Date(rangeValue[1]);
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];
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { TableProps, ColumnProps, ColumnGroupProps } from 'rsuite-table';
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 React.ForwardRefExoticComponent<TableProps & {
16
+ interface TableComponent extends RsRefForwardingComponent<'div', TableProps & {
17
17
  ref?: React.Ref<TableInstance>;
18
18
  }> {
19
- Column: React.ComponentType<ColumnProps>;
20
- ColumnGroup: React.ComponentType<ColumnGroupProps>;
21
- Cell: React.ComponentType<CellProps>;
22
- HeaderCell: React.ComponentType<StandardProps>;
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;
@@ -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: TriggerType | TriggerType[];
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
- rest = _objectWithoutPropertiesLoose(props, ["as", "disabled", "allowReupload", "file", "classPrefix", "listType", "className", "removable", "maxPreviewFileSize", "locale", "renderFileInfo", "onPreview", "onCancel", "onReupload"]);
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
- if (previewImage) {
146
- return /*#__PURE__*/React.createElement("div", {
147
- className: prefix('preview')
148
- }, /*#__PURE__*/React.createElement("img", {
149
- role: "presentation",
150
- src: previewImage,
151
- alt: file.name,
152
- onClick: handlePreview
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
- }, uploading ? /*#__PURE__*/React.createElement("i", {
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 {
@@ -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,
@@ -1,2 +1,3 @@
1
+ export declare function isImage(file: any): boolean;
1
2
  declare const _default: (file: File, callback: (result: string | ArrayBuffer) => void) => void;
2
3
  export default _default;
@@ -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.1",
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.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",
@@ -608,7 +608,9 @@
608
608
  // Uploader
609
609
 
610
610
  @uploader-file-list-margin-top: 10px;
611
- @uploader-file-item-icon-font-size: 16px;
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;