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
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ <a name="5.0.2"></a>
2
+
3
+ ## [5.0.2](https://github.com/rsuite/rsuite/compare/v5.0.1...v5.0.2) (2021-10-15)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **date-range-picker:** fix date formatting error when typing ([#1991](https://github.com/rsuite/rsuite/issues/1991)) ([f65f7f8](https://github.com/rsuite/rsuite/commit/f65f7f8))
8
+ - **pickers:** clean button overlapping with value ([#1984](https://github.com/rsuite/rsuite/issues/1984)) ([ec127dc](https://github.com/rsuite/rsuite/commit/ec127dc))
9
+ - **table:** fix the typescript type definition of Table ([#1998](https://github.com/rsuite/rsuite/issues/1998)) ([8d00b8d](https://github.com/rsuite/rsuite/commit/8d00b8d)), closes [#1958](https://github.com/rsuite/rsuite/issues/1958)
10
+ - **tag-picker:** update TagPicker trigger props declare. ([#1996](https://github.com/rsuite/rsuite/issues/1996)) ([27da381](https://github.com/rsuite/rsuite/commit/27da381))
11
+ - **uploader:** improve thumbnail rendering on file list ([#1997](https://github.com/rsuite/rsuite/issues/1997)) ([68344d7](https://github.com/rsuite/rsuite/commit/68344d7))
12
+
1
13
  <a name="5.0.1"></a>
2
14
 
3
15
  ## [5.0.1](https://github.com/rsuite/rsuite/compare/v5.0.0-beta.8...v5.0.1) (2021-10-09)
@@ -213,6 +213,11 @@
213
213
  > img {
214
214
  .img-cover();
215
215
  }
216
+
217
+ .rs-uploader-file-item-icon {
218
+ font-size: @uploader-file-item-icon-font-size;
219
+ margin: @uploader-file-item-icon-margin-plus;
220
+ }
216
221
  }
217
222
 
218
223
  &-status {
@@ -351,6 +356,11 @@
351
356
  > img {
352
357
  .img-cover();
353
358
  }
359
+
360
+ .rs-uploader-file-item-icon {
361
+ font-size: @uploader-file-item-icon-font-size;
362
+ margin: @uploader-file-item-icon-margin;
363
+ }
354
364
  }
355
365
 
356
366
  &-content {
@@ -473,7 +473,8 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
473
473
  var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends3.default)({}, props, {
474
474
  classPrefix: classPrefix,
475
475
  hasValue: hasValue,
476
- name: 'cascader'
476
+ name: 'cascader',
477
+ cleanable: cleanable
477
478
  })),
478
479
  classes = _usePickerClassName[0],
479
480
  usedClassNamePropKeys = _usePickerClassName[1]; // TODO: bad api design
@@ -417,7 +417,8 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
417
417
  var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends2.default)({}, props, {
418
418
  classPrefix: classPrefix,
419
419
  name: 'date',
420
- hasValue: hasValue
420
+ hasValue: hasValue,
421
+ cleanable: cleanable
421
422
  })),
422
423
  classes = _usePickerClassName[0],
423
424
  usedClassNamePropKeys = _usePickerClassName[1];
@@ -98,7 +98,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
98
98
 
99
99
  var _useCustom = (0, _utils.useCustom)('DateRangePicker', overrideLocale),
100
100
  locale = _useCustom.locale,
101
- formatDate = _useCustom.formatDate;
101
+ formatDate = _useCustom.formatDate,
102
+ parseDate = _useCustom.parseDate;
102
103
 
103
104
  var rangeFormatStr = "" + formatStr + character + formatStr;
104
105
 
@@ -393,13 +394,17 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
393
394
  var rangeValue = value.split(character); // isMatch('01/11/2020', 'MM/dd/yyyy') ==> true
394
395
  // isMatch('2020-11-01', 'MM/dd/yyyy') ==> false
395
396
 
396
- if (!_utils.DateUtils.isMatch(rangeValue[0], formatStr) || !_utils.DateUtils.isMatch(rangeValue[1], formatStr)) {
397
+ if (!_utils.DateUtils.isMatch(rangeValue[0], formatStr, {
398
+ locale: locale.dateLocale
399
+ }) || !_utils.DateUtils.isMatch(rangeValue[1], formatStr, {
400
+ locale: locale.dateLocale
401
+ })) {
397
402
  setInputState('Error');
398
403
  return;
399
404
  }
400
405
 
401
- var startDate = new Date(rangeValue[0]);
402
- var endDate = new Date(rangeValue[1]);
406
+ var startDate = parseDate(rangeValue[0], formatStr);
407
+ var endDate = parseDate(rangeValue[1], formatStr);
403
408
  var selectValue = [startDate, endDate];
404
409
 
405
410
  if (!_utils.DateUtils.isValid(startDate) || !_utils.DateUtils.isValid(endDate)) {
@@ -569,7 +574,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
569
574
  var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends2.default)({}, props, {
570
575
  classPrefix: classPrefix,
571
576
  name: 'daterange',
572
- hasValue: hasValue
577
+ hasValue: hasValue,
578
+ cleanable: cleanable
573
579
  })),
574
580
  classes = _usePickerClassName[0],
575
581
  usedClassNamePropKeys = _usePickerClassName[1];
@@ -674,7 +674,8 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
674
674
  classPrefix: classPrefix,
675
675
  appearance: appearance,
676
676
  hasValue: hasValue,
677
- name: 'input'
677
+ name: 'input',
678
+ cleanable: cleanable
678
679
  })),
679
680
  pickerClasses = _usePickerClassName[0],
680
681
  usedClassNamePropKeys = _usePickerClassName[1];
@@ -479,7 +479,8 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
479
479
  var _usePickerClassName = (0, _Picker.usePickerClassName)((0, _extends3.default)({}, props, {
480
480
  classPrefix: classPrefix,
481
481
  hasValue: hasValue,
482
- name: 'cascader'
482
+ name: 'cascader',
483
+ cleanable: cleanable
483
484
  })),
484
485
  classes = _usePickerClassName[0],
485
486
  usedClassNamePropKeys = _usePickerClassName[1];
@@ -301,7 +301,8 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
301
301
  classPrefix: classPrefix,
302
302
  appearance: appearance,
303
303
  hasValue: hasValue,
304
- name: 'select'
304
+ name: 'select',
305
+ cleanable: cleanable
305
306
  })),
306
307
  classes = _usePickerClassName[0],
307
308
  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;
@@ -729,7 +729,8 @@ var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
729
729
  classPrefix: classPrefix,
730
730
  appearance: appearance,
731
731
  hasValue: hasValidValue,
732
- name: 'tree'
732
+ name: 'tree',
733
+ cleanable: cleanable
733
734
  })),
734
735
  classes = _usePickerClassName[0],
735
736
  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
@@ -71,10 +71,12 @@ var UploadFileItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref
71
71
  maxPreviewFileSize = _props$maxPreviewFile === void 0 ? 1024 * 1024 * 5 : _props$maxPreviewFile,
72
72
  locale = props.locale,
73
73
  renderFileInfo = props.renderFileInfo,
74
+ renderThumbnail = props.renderThumbnail,
74
75
  onPreview = props.onPreview,
75
76
  onCancel = props.onCancel,
76
77
  onReupload = props.onReupload,
77
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "allowReupload", "file", "classPrefix", "listType", "className", "removable", "maxPreviewFileSize", "locale", "renderFileInfo", "onPreview", "onCancel", "onReupload"]);
78
+ onThumbnailCompleted = props.onThumbnailCompleted,
79
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "allowReupload", "file", "classPrefix", "listType", "className", "removable", "maxPreviewFileSize", "locale", "renderFileInfo", "renderThumbnail", "onPreview", "onCancel", "onReupload", "onThumbnailCompleted"]);
78
80
 
79
81
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
80
82
  merge = _useClassNames.merge,
@@ -99,7 +101,8 @@ var UploadFileItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref
99
101
 
100
102
  if (!~['picture-text', 'picture'].indexOf(listType)) {
101
103
  return;
102
- }
104
+ } // The thumbnail file size cannot be larger than the preset value.
105
+
103
106
 
104
107
  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) {
105
108
  return;
@@ -111,9 +114,10 @@ var UploadFileItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref
111
114
  if (!file.url) {
112
115
  getThumbnail(function (previewImage) {
113
116
  setPreviewImage(previewImage);
117
+ onThumbnailCompleted === null || onThumbnailCompleted === void 0 ? void 0 : onThumbnailCompleted(previewImage);
114
118
  });
115
119
  }
116
- }, [file.url, getThumbnail]);
120
+ }, [file.url, getThumbnail, onThumbnailCompleted]);
117
121
  var handlePreview = (0, _react.useCallback)(function (event) {
118
122
  if (disabled) {
119
123
  return;
@@ -161,18 +165,17 @@ var UploadFileItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref
161
165
  };
162
166
 
163
167
  var renderPreview = function renderPreview() {
164
- if (previewImage) {
165
- return /*#__PURE__*/_react.default.createElement("div", {
166
- className: prefix('preview')
167
- }, /*#__PURE__*/_react.default.createElement("img", {
168
- role: "presentation",
169
- src: previewImage,
170
- alt: file.name,
171
- onClick: handlePreview
172
- }));
173
- }
174
-
175
- return null;
168
+ var thumbnail = previewImage ? /*#__PURE__*/_react.default.createElement("img", {
169
+ role: "presentation",
170
+ src: previewImage,
171
+ alt: file.name,
172
+ onClick: handlePreview
173
+ }) : /*#__PURE__*/_react.default.createElement(_Attachment.default, {
174
+ className: prefix('icon')
175
+ });
176
+ return /*#__PURE__*/_react.default.createElement("div", {
177
+ className: prefix('preview')
178
+ }, renderThumbnail ? renderThumbnail(file, thumbnail) : thumbnail);
176
179
  };
177
180
  /**
178
181
  * Render the loading state.
@@ -184,11 +187,22 @@ var UploadFileItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref
184
187
  var classes = prefix('icon-wrapper', {
185
188
  'icon-loading': uploading
186
189
  });
190
+
191
+ if (uploading) {
192
+ return /*#__PURE__*/_react.default.createElement("div", {
193
+ className: classes
194
+ }, /*#__PURE__*/_react.default.createElement("i", {
195
+ className: prefix('icon')
196
+ }));
197
+ }
198
+
199
+ if (listType === 'picture' || listType === 'picture-text') {
200
+ return null;
201
+ }
202
+
187
203
  return /*#__PURE__*/_react.default.createElement("div", {
188
204
  className: classes
189
- }, uploading ? /*#__PURE__*/_react.default.createElement("i", {
190
- className: prefix('icon')
191
- }) : /*#__PURE__*/_react.default.createElement(_Attachment.default, {
205
+ }, /*#__PURE__*/_react.default.createElement(_Attachment.default, {
192
206
  className: prefix('icon')
193
207
  }));
194
208
  };
@@ -293,9 +307,11 @@ UploadFileItem.propTypes = {
293
307
  removable: _propTypes.default.bool,
294
308
  allowReupload: _propTypes.default.bool,
295
309
  renderFileInfo: _propTypes.default.func,
310
+ renderThumbnail: _propTypes.default.func,
296
311
  onCancel: _propTypes.default.func,
297
312
  onPreview: _propTypes.default.func,
298
- onReupload: _propTypes.default.func
313
+ onReupload: _propTypes.default.func,
314
+ onThumbnailCompleted: _propTypes.default.func
299
315
  };
300
316
  var _default = UploadFileItem;
301
317
  exports.default = _default;
@@ -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 {
@@ -153,13 +153,14 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
153
153
  shouldUpload = props.shouldUpload,
154
154
  shouldQueueUpdate = props.shouldQueueUpdate,
155
155
  renderFileInfo = props.renderFileInfo,
156
+ renderThumbnail = props.renderThumbnail,
156
157
  onPreview = props.onPreview,
157
158
  onChange = props.onChange,
158
159
  onSuccess = props.onSuccess,
159
160
  onError = props.onError,
160
161
  onProgress = props.onProgress,
161
162
  onReupload = props.onReupload,
162
- rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
163
+ rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
163
164
 
164
165
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
165
166
  merge = _useClassNames.merge,
@@ -415,6 +416,7 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
415
416
  onReupload: handleReupload,
416
417
  onCancel: handleRemoveFile,
417
418
  renderFileInfo: renderFileInfo,
419
+ renderThumbnail: renderThumbnail,
418
420
  removable: removable && !readOnly && !plaintext,
419
421
  allowReupload: !readOnly && !plaintext
420
422
  });
@@ -473,6 +475,7 @@ Uploader.propTypes = {
473
475
  style: _propTypes.default.object,
474
476
  toggleAs: _propTypes.default.elementType,
475
477
  renderFileInfo: _propTypes.default.func,
478
+ renderThumbnail: _propTypes.default.func,
476
479
  removable: _propTypes.default.bool,
477
480
  fileListVisible: _propTypes.default.bool,
478
481
  draggable: _propTypes.default.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,9 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ exports.isImage = isImage;
4
5
  exports.default = void 0;
6
+ // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types
7
+ var MIME = ['image/apng', 'image/avif', 'image/gif', 'image/jpeg', 'image/png', 'image/svg+xml', 'image/webp'];
8
+
9
+ function isImage(file) {
10
+ return MIME.includes(file === null || file === void 0 ? void 0 : file.type);
11
+ }
5
12
 
6
13
  var _default = function _default(file, callback) {
14
+ if (!isImage(file)) {
15
+ return callback(null);
16
+ }
17
+
7
18
  var reader = new FileReader();
8
19
 
9
20
  reader.onloadend = function () {
@@ -15344,6 +15344,10 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
15344
15344
  object-fit: cover;
15345
15345
  }
15346
15346
  }
15347
+ .rs-uploader-picture .rs-uploader-file-item-preview .rs-uploader-file-item-icon {
15348
+ font-size: 22px;
15349
+ margin: 22px;
15350
+ }
15347
15351
  .rs-uploader-picture .rs-uploader-file-item-status {
15348
15352
  position: absolute;
15349
15353
  top: 0;
@@ -15708,6 +15712,10 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
15708
15712
  object-fit: cover;
15709
15713
  }
15710
15714
  }
15715
+ .rs-uploader-picture-text .rs-uploader-file-item-preview .rs-uploader-file-item-icon {
15716
+ font-size: 22px;
15717
+ margin: 12px;
15718
+ }
15711
15719
  .rs-uploader-picture-text .rs-uploader-file-item-content {
15712
15720
  padding: 5px 12px;
15713
15721
  }