rsuite 5.58.0 → 5.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/Avatar/styles/index.css +74 -3
  2. package/Avatar/styles/index.less +25 -1
  3. package/Avatar/styles/mixin.less +8 -0
  4. package/CHANGELOG.md +24 -0
  5. package/Drawer/styles/index.css +4 -0
  6. package/Drawer/styles/index.less +5 -0
  7. package/cjs/Avatar/Avatar.d.ts +30 -5
  8. package/cjs/Avatar/Avatar.js +47 -21
  9. package/cjs/Avatar/AvatarIcon.d.ts +3 -0
  10. package/cjs/Avatar/AvatarIcon.js +24 -0
  11. package/cjs/Avatar/useImage.d.ts +39 -0
  12. package/cjs/Avatar/useImage.js +75 -0
  13. package/cjs/AvatarGroup/AvatarGroup.d.ts +14 -6
  14. package/cjs/DateInput/DateField.js +5 -0
  15. package/cjs/Heading/index.d.ts +1 -1
  16. package/cjs/Heading/index.js +3 -4
  17. package/cjs/Modal/Modal.js +36 -21
  18. package/cjs/Text/index.d.ts +1 -1
  19. package/cjs/Text/index.js +3 -4
  20. package/cjs/internals/Overlay/Modal.js +2 -1
  21. package/dist/rsuite-no-reset-rtl.css +75 -3
  22. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  23. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  24. package/dist/rsuite-no-reset.css +75 -3
  25. package/dist/rsuite-no-reset.min.css +1 -1
  26. package/dist/rsuite-no-reset.min.css.map +1 -1
  27. package/dist/rsuite-rtl.css +75 -3
  28. package/dist/rsuite-rtl.min.css +1 -1
  29. package/dist/rsuite-rtl.min.css.map +1 -1
  30. package/dist/rsuite.css +75 -3
  31. package/dist/rsuite.js +29 -7
  32. package/dist/rsuite.js.map +1 -1
  33. package/dist/rsuite.min.css +1 -1
  34. package/dist/rsuite.min.css.map +1 -1
  35. package/dist/rsuite.min.js +1 -1
  36. package/dist/rsuite.min.js.map +1 -1
  37. package/esm/Avatar/Avatar.d.ts +30 -5
  38. package/esm/Avatar/Avatar.js +48 -22
  39. package/esm/Avatar/AvatarIcon.d.ts +3 -0
  40. package/esm/Avatar/AvatarIcon.js +18 -0
  41. package/esm/Avatar/useImage.d.ts +39 -0
  42. package/esm/Avatar/useImage.js +70 -0
  43. package/esm/AvatarGroup/AvatarGroup.d.ts +14 -6
  44. package/esm/DateInput/DateField.js +5 -0
  45. package/esm/Heading/index.d.ts +1 -1
  46. package/esm/Heading/index.js +0 -1
  47. package/esm/Modal/Modal.js +36 -21
  48. package/esm/Text/index.d.ts +1 -1
  49. package/esm/Text/index.js +0 -1
  50. package/esm/internals/Overlay/Modal.js +2 -1
  51. package/package.json +1 -1
  52. package/styles/color-modes/dark.less +2 -0
  53. package/styles/color-modes/high-contrast.less +2 -0
  54. package/styles/color-modes/light.less +2 -0
  55. package/styles/variables.less +12 -20
@@ -3,22 +3,31 @@
3
3
  --rs-gray-0: #fff;
4
4
  --rs-gray-300: #d9d9d9;
5
5
  --rs-gray-400: #c5c6c7;
6
+ --rs-gray-900: #272c36;
6
7
  --rs-avatar-bg: var(--rs-gray-300);
7
8
  --rs-avatar-text: var(--rs-gray-0);
9
+ --rs-avatar-offset-color: var(--rs-gray-0);
10
+ --rs-avatar-ring-color: var(--rs-avatar-bg);
8
11
  }
9
12
  .rs-theme-dark {
10
13
  --rs-gray-0: #fff;
11
14
  --rs-gray-300: #858b94;
12
15
  --rs-gray-400: #6a6f76;
16
+ --rs-gray-900: #0f131a;
13
17
  --rs-avatar-bg: var(--rs-gray-400);
14
18
  --rs-avatar-text: var(--rs-gray-0);
19
+ --rs-avatar-offset-color: var(--rs-gray-900);
20
+ --rs-avatar-ring-color: var(--rs-avatar-bg);
15
21
  }
16
22
  .rs-theme-high-contrast {
17
23
  --rs-gray-0: #fff;
18
24
  --rs-gray-300: #858b94;
19
25
  --rs-gray-400: #6a6f76;
26
+ --rs-gray-900: #0f131a;
20
27
  --rs-avatar-bg: var(--rs-gray-400);
21
28
  --rs-avatar-text: var(--rs-gray-0);
29
+ --rs-avatar-offset-color: var(--rs-gray-900);
30
+ --rs-avatar-ring-color: var(--rs-avatar-bg);
22
31
  }
23
32
  /* stylelint-disable */
24
33
  *[class*='rs-'] {
@@ -74,13 +83,47 @@
74
83
  background: var(--rs-avatar-bg);
75
84
  text-align: center;
76
85
  padding: 0 2px;
77
- overflow: hidden;
78
- text-overflow: ellipsis;
79
- white-space: nowrap;
86
+ }
87
+ .rs-avatar-icon {
88
+ position: absolute;
89
+ }
90
+ .rs-avatar-bordered {
91
+ --rs-ring-offset-shadow: var(--rs-avatar-offset-color) 0 0 0 2px;
92
+ --rs-ring-shadow: var(--rs-avatar-ring-color) 0 0 0 4px;
93
+ -webkit-box-shadow: var(--rs-ring-offset-shadow), var(--rs-ring-shadow), 0 0 #0000;
94
+ box-shadow: var(--rs-ring-offset-shadow), var(--rs-ring-shadow), 0 0 #0000;
80
95
  }
81
96
  .rs-avatar-circle {
82
97
  border-radius: 50%;
83
98
  }
99
+ .rs-avatar-xxl {
100
+ width: 120px;
101
+ height: 120px;
102
+ font-size: 48px;
103
+ }
104
+ .rs-avatar-xxl > .rs-icon {
105
+ font-size: 84px;
106
+ height: 84px;
107
+ }
108
+ .rs-avatar-xxl > .rs-avatar-image {
109
+ width: 120px;
110
+ height: 120px;
111
+ line-height: 120px;
112
+ }
113
+ .rs-avatar-xl {
114
+ width: 90px;
115
+ height: 90px;
116
+ font-size: 36px;
117
+ }
118
+ .rs-avatar-xl > .rs-icon {
119
+ font-size: 63px;
120
+ height: 63px;
121
+ }
122
+ .rs-avatar-xl > .rs-avatar-image {
123
+ width: 90px;
124
+ height: 90px;
125
+ line-height: 90px;
126
+ }
84
127
  .rs-avatar-lg {
85
128
  width: 60px;
86
129
  height: 60px;
@@ -123,5 +166,33 @@
123
166
  height: 20px;
124
167
  line-height: 20px;
125
168
  }
169
+ .rs-avatar-red {
170
+ --rs-avatar-bg: var(--rs-red-500);
171
+ --rs-avatar-ring-color: var(--rs-red-500);
172
+ }
173
+ .rs-avatar-orange {
174
+ --rs-avatar-bg: var(--rs-orange-500);
175
+ --rs-avatar-ring-color: var(--rs-orange-500);
176
+ }
177
+ .rs-avatar-yellow {
178
+ --rs-avatar-bg: var(--rs-yellow-500);
179
+ --rs-avatar-ring-color: var(--rs-yellow-500);
180
+ }
181
+ .rs-avatar-green {
182
+ --rs-avatar-bg: var(--rs-green-500);
183
+ --rs-avatar-ring-color: var(--rs-green-500);
184
+ }
185
+ .rs-avatar-cyan {
186
+ --rs-avatar-bg: var(--rs-cyan-500);
187
+ --rs-avatar-ring-color: var(--rs-cyan-500);
188
+ }
189
+ .rs-avatar-blue {
190
+ --rs-avatar-bg: var(--rs-blue-500);
191
+ --rs-avatar-ring-color: var(--rs-blue-500);
192
+ }
193
+ .rs-avatar-violet {
194
+ --rs-avatar-bg: var(--rs-violet-500);
195
+ --rs-avatar-ring-color: var(--rs-violet-500);
196
+ }
126
197
 
127
198
  /*# sourceMappingURL=index.css.map */
@@ -28,14 +28,31 @@
28
28
  background: var(--rs-avatar-bg);
29
29
  text-align: center;
30
30
  padding: 0 2px;
31
- .ellipsis-basic();
32
31
  }
33
32
  }
34
33
 
34
+ &-icon {
35
+ position: absolute;
36
+ }
37
+
38
+ &-bordered {
39
+ --rs-ring-offset-shadow: var(--rs-avatar-offset-color) 0 0 0 2px;
40
+ --rs-ring-shadow: var(--rs-avatar-ring-color) 0 0 0 4px;
41
+ box-shadow: var(--rs-ring-offset-shadow), var(--rs-ring-shadow), 0 0 #0000;
42
+ }
43
+
35
44
  &-circle {
36
45
  border-radius: 50%;
37
46
  }
38
47
 
48
+ &-xxl {
49
+ .avatar-xxl();
50
+ }
51
+
52
+ &-xl {
53
+ .avatar-xl();
54
+ }
55
+
39
56
  &-lg {
40
57
  .avatar-lg();
41
58
  }
@@ -48,3 +65,10 @@
48
65
  .avatar-xs();
49
66
  }
50
67
  }
68
+
69
+ each(@spectrum, .(@color) {
70
+ .rs-avatar-@{color} {
71
+ --rs-avatar-bg: var(~'--rs-@{color}-500');
72
+ --rs-avatar-ring-color: var(~'--rs-@{color}-500');
73
+ }
74
+ });
@@ -17,6 +17,14 @@
17
17
  }
18
18
  }
19
19
 
20
+ .avatar-xxl() {
21
+ .avatar-size(@avatar-size-xxl, @avatar-font-size-xxl);
22
+ }
23
+
24
+ .avatar-xl() {
25
+ .avatar-size(@avatar-size-xl, @avatar-font-size-xl);
26
+ }
27
+
20
28
  .avatar-lg() {
21
29
  .avatar-size(@avatar-size-lg, @avatar-font-size-lg);
22
30
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,27 @@
1
+ # [5.59.0](https://github.com/rsuite/rsuite/compare/v5.58.1...v5.59.0) (2024-04-03)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **DatePicker,DateRangePicker:** fix the date change when the input date is incomplete ([#3719](https://github.com/rsuite/rsuite/issues/3719)) ([24f162f](https://github.com/rsuite/rsuite/commit/24f162f6ee403dbca0829159f3a099167b278bcf))
7
+ * **Drawer:** fix the focus cannot be moved to elements outside the Drawer when `backdrop=false` ([#3716](https://github.com/rsuite/rsuite/issues/3716)) ([f044445](https://github.com/rsuite/rsuite/commit/f044445e97d653debcb1772a70c51b4a30d44f6b))
8
+
9
+
10
+ ### Features
11
+
12
+ * **Avatar:** add support for `bordered` and `color` props ([#3711](https://github.com/rsuite/rsuite/issues/3711)) ([3ca7dc1](https://github.com/rsuite/rsuite/commit/3ca7dc1eeaf46461fff107012dac972d4ef20c1b))
13
+
14
+
15
+
16
+ ## [5.58.1](https://github.com/rsuite/rsuite/compare/v5.58.0...v5.58.1) (2024-03-28)
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * fix build errors caused by export type ([#3712](https://github.com/rsuite/rsuite/issues/3712)) ([94e9ef4](https://github.com/rsuite/rsuite/commit/94e9ef423c7722ecfa4ed3d72a320b38f13a0c6d))
22
+
23
+
24
+
1
25
  # [5.58.0](https://github.com/rsuite/rsuite/compare/v5.57.0...v5.58.0) (2024-03-28)
2
26
 
3
27
 
@@ -108,6 +108,9 @@
108
108
  width: 100%;
109
109
  height: 100%;
110
110
  }
111
+ .rs-drawer-wrapper.rs-drawer-no-backdrop {
112
+ pointer-events: none;
113
+ }
111
114
  .rs-drawer {
112
115
  display: none;
113
116
  overflow: hidden;
@@ -117,6 +120,7 @@
117
120
  -webkit-box-shadow: var(--rs-drawer-shadow);
118
121
  box-shadow: 0 4px 4px rgba(0, 0, 0, 0.12), 0 0 10px rgba(0, 0, 0, 0.06);
119
122
  box-shadow: var(--rs-drawer-shadow);
123
+ pointer-events: auto;
120
124
  outline: 0;
121
125
  }
122
126
  .rs-drawer-open.rs-drawer-has-backdrop {
@@ -9,6 +9,10 @@
9
9
  left: 0;
10
10
  width: 100%;
11
11
  height: 100%;
12
+
13
+ &.rs-drawer-no-backdrop {
14
+ pointer-events: none;
15
+ }
12
16
  }
13
17
 
14
18
  // Container that the drawer scrolls within
@@ -18,6 +22,7 @@
18
22
  position: fixed;
19
23
  z-index: @zindex-drawer;
20
24
  box-shadow: var(--rs-drawer-shadow);
25
+ pointer-events: auto;
21
26
  // Prevent Chrome on Windows from adding a focus outline. For details, see
22
27
  // https://github.com/twbs/bootstrap/pull/10951.
23
28
  outline: 0;
@@ -1,8 +1,14 @@
1
1
  import React from 'react';
2
- import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
2
+ import { WithAsProps, RsRefForwardingComponent, TypeAttributes } from '../@types/common';
3
+ import { type Size } from '../AvatarGroup/AvatarGroup';
3
4
  export interface AvatarProps extends WithAsProps {
4
- /** A avatar can have different sizes */
5
- size?: TypeAttributes.Size;
5
+ /**
6
+ * A avatar can have different sizes.
7
+ *
8
+ * @default 'md'
9
+ * @version xxl and xs added in v5.59.0
10
+ */
11
+ size?: Size;
6
12
  /**
7
13
  * The `src` attribute for the `img` element.
8
14
  */
@@ -21,10 +27,29 @@ export interface AvatarProps extends WithAsProps {
21
27
  * It can be used to listen for the loading error event.
22
28
  */
23
29
  imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;
24
- /** Set avatar shape to circle */
30
+ /**
31
+ * Set avatar shape to circle
32
+ */
25
33
  circle?: boolean;
26
- /** This attribute defines an alternative text description of the image */
34
+ /**
35
+ * This attribute defines an alternative text description of the image
36
+ */
27
37
  alt?: string;
38
+ /**
39
+ * Show a border around the avatar.
40
+ * @version 5.59.0
41
+ */
42
+ bordered?: boolean;
43
+ /**
44
+ * Sets the avatar background color.
45
+ * @version 5.59.0
46
+ */
47
+ color?: TypeAttributes.Color;
48
+ /**
49
+ * Callback fired when the image failed to load.
50
+ * @version 5.59.0
51
+ */
52
+ onError?: OnErrorEventHandler;
28
53
  }
29
54
  /**
30
55
  * The Avatar component is used to represent user or brand.
@@ -5,53 +5,79 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
6
  exports.__esModule = true;
7
7
  exports.default = void 0;
8
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
8
  var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
  var _utils = require("../utils");
14
14
  var _AvatarGroup = require("../AvatarGroup/AvatarGroup");
15
15
  var _propTypes2 = require("../internals/propTypes");
16
- var _templateObject;
16
+ var _AvatarIcon = _interopRequireDefault(require("./AvatarIcon"));
17
+ var _useImage2 = _interopRequireDefault(require("./useImage"));
18
+ var _templateObject, _templateObject2;
17
19
  /**
18
20
  * The Avatar component is used to represent user or brand.
19
21
  * @see https://rsuitejs.com/components/avatar
20
22
  */
21
23
  var Avatar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
22
- var _props$classPrefix = props.classPrefix,
23
- classPrefix = _props$classPrefix === void 0 ? 'avatar' : _props$classPrefix,
24
- _props$as = props.as,
24
+ var _useContext = (0, _react.useContext)(_AvatarGroup.AvatarGroupContext),
25
+ groupSize = _useContext.size;
26
+ var _props$as = props.as,
25
27
  Component = _props$as === void 0 ? 'div' : _props$as,
26
- sizeProp = props.size,
28
+ bordered = props.bordered,
29
+ alt = props.alt,
27
30
  className = props.className,
28
31
  children = props.children,
32
+ circle = props.circle,
33
+ color = props.color,
34
+ _props$classPrefix = props.classPrefix,
35
+ classPrefix = _props$classPrefix === void 0 ? 'avatar' : _props$classPrefix,
36
+ _props$size = props.size,
37
+ size = _props$size === void 0 ? groupSize : _props$size,
29
38
  src = props.src,
30
39
  srcSet = props.srcSet,
31
40
  sizes = props.sizes,
32
41
  imgProps = props.imgProps,
33
- circle = props.circle,
34
- alt = props.alt,
35
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["classPrefix", "as", "size", "className", "children", "src", "srcSet", "sizes", "imgProps", "circle", "alt"]);
36
- var _useContext = (0, _react.useContext)(_AvatarGroup.AvatarGroupContext),
37
- size = _useContext.size;
42
+ onError = props.onError,
43
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "bordered", "alt", "className", "children", "circle", "color", "classPrefix", "size", "src", "srcSet", "sizes", "imgProps", "onError"]);
38
44
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
39
45
  withClassPrefix = _useClassNames.withClassPrefix,
40
46
  prefix = _useClassNames.prefix,
41
47
  merge = _useClassNames.merge;
42
- var classes = merge(className, withClassPrefix(sizeProp || size, {
43
- circle: circle
48
+ var classes = merge(className, withClassPrefix(size, color, {
49
+ circle: circle,
50
+ bordered: bordered
44
51
  }));
52
+ var imageProps = (0, _extends2.default)({}, imgProps, {
53
+ alt: alt,
54
+ src: src,
55
+ srcSet: srcSet,
56
+ sizes: sizes
57
+ });
58
+ var _useImage = (0, _useImage2.default)((0, _extends2.default)({}, imageProps, {
59
+ onError: onError
60
+ })),
61
+ loaded = _useImage.loaded;
62
+ var altComponent = (0, _react.useMemo)(function () {
63
+ if (alt) {
64
+ return /*#__PURE__*/_react.default.createElement("span", {
65
+ role: "img",
66
+ "aria-label": alt
67
+ }, alt);
68
+ }
69
+ return null;
70
+ }, [alt]);
71
+ var placeholder = children || altComponent || /*#__PURE__*/_react.default.createElement(_AvatarIcon.default, {
72
+ className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["icon"])))
73
+ });
74
+ var image = loaded ? /*#__PURE__*/_react.default.createElement("img", (0, _extends2.default)({}, imageProps, {
75
+ className: prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["image"])))
76
+ })) : placeholder;
45
77
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
46
78
  ref: ref,
47
79
  className: classes
48
- }), src || srcSet ? /*#__PURE__*/_react.default.createElement("img", (0, _extends2.default)({}, imgProps, {
49
- className: prefix(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["image"]))),
50
- src: src,
51
- sizes: sizes,
52
- srcSet: srcSet,
53
- alt: alt
54
- })) : children);
80
+ }), src ? image : placeholder);
55
81
  });
56
82
  Avatar.displayName = 'Avatar';
57
83
  Avatar.propTypes = {
@@ -59,7 +85,7 @@ Avatar.propTypes = {
59
85
  classPrefix: _propTypes.default.string,
60
86
  className: _propTypes.default.string,
61
87
  children: _propTypes.default.node,
62
- size: (0, _propTypes2.oneOf)(['lg', 'md', 'sm', 'xs']),
88
+ size: (0, _propTypes2.oneOf)(['xxl', 'xl', 'lg', 'md', 'sm', 'xs']),
63
89
  src: _propTypes.default.string,
64
90
  sizes: _propTypes.default.string,
65
91
  srcSet: _propTypes.default.string,
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const AvatarIcon: (props: React.HTMLAttributes<SVGElement>) => JSX.Element;
3
+ export default AvatarIcon;
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var AvatarIcon = function AvatarIcon(props) {
10
+ return /*#__PURE__*/_react.default.createElement("svg", (0, _extends2.default)({
11
+ role: "img",
12
+ "aria-label": "Avatar",
13
+ stroke: "currentColor",
14
+ fill: "currentColor",
15
+ strokeWidth: "0",
16
+ viewBox: "0 0 448 512",
17
+ height: "60%",
18
+ width: "60%"
19
+ }, props), /*#__PURE__*/_react.default.createElement("path", {
20
+ d: "M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z"
21
+ }));
22
+ };
23
+ var _default = AvatarIcon;
24
+ exports.default = _default;
@@ -0,0 +1,39 @@
1
+ import { ImgHTMLAttributes } from 'react';
2
+ interface UseImageProps {
3
+ /**
4
+ * The image `src` attribute
5
+ */
6
+ src?: string;
7
+ /**
8
+ * The image `srcSet` attribute
9
+ */
10
+ srcSet?: string;
11
+ /**
12
+ * The image `sizes` attribute
13
+ */
14
+ sizes?: string;
15
+ /**
16
+ * The image `crossOrigin` attribute
17
+ */
18
+ crossOrigin?: ImgHTMLAttributes<HTMLImageElement>['crossOrigin'];
19
+ /**
20
+ * Callback fired when the image failed to load.
21
+ */
22
+ onError?: OnErrorEventHandler;
23
+ }
24
+ declare type Status = 'pending' | 'loading' | 'error' | 'loaded';
25
+ /**
26
+ * A hook that loads an image and returns the status of the image.
27
+ *
28
+ * @example
29
+ * ```jsx
30
+ * const { loaded } = useImage({ src:'https://example.com/image.jpg' });
31
+ *
32
+ * return loaded ? <img src="https://example.com/image.jpg" /> : <Placeholder />;
33
+ * ```
34
+ */
35
+ declare const useImage: (props: UseImageProps) => {
36
+ loaded: boolean;
37
+ status: Status;
38
+ };
39
+ export default useImage;
@@ -0,0 +1,75 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _react = require("react");
7
+ var _utils = require("../utils");
8
+ /**
9
+ * A hook that loads an image and returns the status of the image.
10
+ *
11
+ * @example
12
+ * ```jsx
13
+ * const { loaded } = useImage({ src:'https://example.com/image.jpg' });
14
+ *
15
+ * return loaded ? <img src="https://example.com/image.jpg" /> : <Placeholder />;
16
+ * ```
17
+ */
18
+ var useImage = function useImage(props) {
19
+ var src = props.src,
20
+ srcSet = props.srcSet,
21
+ sizes = props.sizes,
22
+ crossOrigin = props.crossOrigin,
23
+ onError = props.onError;
24
+ var _useState = (0, _react.useState)('pending'),
25
+ status = _useState[0],
26
+ setStatus = _useState[1];
27
+ var imgRef = (0, _react.useRef)(null);
28
+ var flush = function flush() {
29
+ if (imgRef.current) {
30
+ imgRef.current.onload = null;
31
+ imgRef.current.onerror = null;
32
+ imgRef.current = null;
33
+ }
34
+ };
35
+ var handleLoad = (0, _react.useCallback)(function () {
36
+ setStatus('loaded');
37
+ flush();
38
+ }, []);
39
+ var handleError = (0, _react.useCallback)(function (event) {
40
+ setStatus('error');
41
+ flush();
42
+ onError === null || onError === void 0 ? void 0 : onError(event);
43
+ }, [onError]);
44
+ (0, _react.useEffect)(function () {
45
+ setStatus(src ? 'loading' : 'pending');
46
+ }, [src]);
47
+ var loadImge = (0, _react.useCallback)(function () {
48
+ if (!src) {
49
+ return;
50
+ }
51
+ var img = new Image();
52
+ img.onload = handleLoad;
53
+ img.onerror = handleError;
54
+ if (src) img.src = src;
55
+ if (srcSet) img.srcset = srcSet;
56
+ if (sizes) img.sizes = sizes;
57
+ if (crossOrigin) img.crossOrigin = crossOrigin;
58
+ imgRef.current = img;
59
+ }, [crossOrigin, handleError, handleLoad, sizes, src, srcSet]);
60
+ (0, _utils.useIsomorphicLayoutEffect)(function () {
61
+ if (status === 'loading') {
62
+ loadImge();
63
+ }
64
+ }, [loadImge, status]);
65
+ (0, _react.useEffect)(function () {
66
+ return flush;
67
+ }, []);
68
+ console.log('status', status);
69
+ return {
70
+ loaded: status === 'loaded',
71
+ status: status
72
+ };
73
+ };
74
+ var _default = useImage;
75
+ exports.default = _default;
@@ -1,15 +1,23 @@
1
1
  import React from 'react';
2
- import { TypeAttributes, WithAsProps, RsRefForwardingComponent } from '../@types/common';
2
+ import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
+ export declare type Size = 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';
3
4
  export interface AvatarGroupProps extends WithAsProps {
4
- /** Render all avatars as stacks */
5
+ /**
6
+ * Render all avatars as stacks
7
+ */
5
8
  stack?: boolean;
6
- /** Set the spacing of the avatar */
9
+ /**
10
+ * Set the spacing of the avatar
11
+ */
7
12
  spacing?: number;
8
- /** Set the size of all avatars. */
9
- size?: TypeAttributes.Size;
13
+ /**
14
+ * Set the size of all avatars.
15
+ * @version xxl and xs added in v5.59.0
16
+ */
17
+ size?: Size;
10
18
  }
11
19
  export declare const AvatarGroupContext: React.Context<{
12
- size?: TypeAttributes.Size | undefined;
20
+ size?: Size | undefined;
13
21
  }>;
14
22
  /**
15
23
  * The AvatarGroup component is used to represent a collection of avatars.
@@ -180,6 +180,11 @@ var useDateField = function useDateField(format, localize, date) {
180
180
  if (isEmptyValue(type, value)) {
181
181
  return null;
182
182
  }
183
+
184
+ // Invalid Date
185
+ return new Date('');
186
+ } else if (type === 'day' && value === 0) {
187
+ // Invalid Date. If the type is day and the value is 0, it is considered an invalid date.
183
188
  return new Date('');
184
189
  }
185
190
  if (type === 'meridian' && typeof hour === 'number') {
@@ -1,3 +1,3 @@
1
1
  import Heading from './Heading';
2
- export { type HeadingProps } from './Heading';
2
+ export type { HeadingProps } from './Heading';
3
3
  export default Heading;
@@ -1,10 +1,9 @@
1
1
  'use client';
2
2
  "use strict";
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  exports.__esModule = true;
6
- exports.default = exports.HeadingProps = void 0;
7
- var _Heading = _interopRequireWildcard(require("./Heading"));
8
- exports.HeadingProps = _Heading.HeadingProps;
6
+ exports.default = void 0;
7
+ var _Heading = _interopRequireDefault(require("./Heading"));
9
8
  var _default = _Heading.default;
10
9
  exports.default = _default;