@radix-ui/react-avatar 1.0.4-rc.3 → 1.1.0-rc.1

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/index.d.mts CHANGED
@@ -1,23 +1,35 @@
1
- import * as React from "react";
2
- import * as Radix from "@radix-ui/react-primitive";
3
- import { Primitive } from "@radix-ui/react-primitive";
4
- export const createAvatarScope: import("@radix-ui/react-context").CreateScope;
5
- type ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';
6
- type PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;
7
- export interface AvatarProps extends PrimitiveSpanProps {
1
+ import * as React from 'react';
2
+ import * as Radix from '@radix-ui/react-primitive';
3
+ import { Primitive } from '@radix-ui/react-primitive';
4
+
5
+ declare type Scope<C = any> = {
6
+ [scopeName: string]: React.Context<C>[];
7
+ } | undefined;
8
+ declare type ScopeHook = (scope: Scope) => {
9
+ [__scopeProp: string]: Scope;
10
+ };
11
+ interface CreateScope {
12
+ scopeName: string;
13
+ (): ScopeHook;
14
+ }
15
+
16
+ declare const createAvatarScope: CreateScope;
17
+ declare type ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';
18
+ declare type PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;
19
+ interface AvatarProps extends PrimitiveSpanProps {
8
20
  }
9
- export const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
10
- type PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;
11
- export interface AvatarImageProps extends PrimitiveImageProps {
21
+ declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
22
+ declare type PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;
23
+ interface AvatarImageProps extends PrimitiveImageProps {
12
24
  onLoadingStatusChange?: (status: ImageLoadingStatus) => void;
13
25
  }
14
- export const AvatarImage: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
15
- export interface AvatarFallbackProps extends PrimitiveSpanProps {
26
+ declare const AvatarImage: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
27
+ interface AvatarFallbackProps extends PrimitiveSpanProps {
16
28
  delayMs?: number;
17
29
  }
18
- export const AvatarFallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
19
- export const Root: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
20
- export const Image: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
21
- export const Fallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
30
+ declare const AvatarFallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
31
+ declare const Root: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
32
+ declare const Image: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
33
+ declare const Fallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
22
34
 
23
- //# sourceMappingURL=index.d.ts.map
35
+ export { Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, type AvatarImageProps, type AvatarProps, Fallback, Image, Root, createAvatarScope };
package/dist/index.d.ts CHANGED
@@ -1,23 +1,35 @@
1
- import * as React from "react";
2
- import * as Radix from "@radix-ui/react-primitive";
3
- import { Primitive } from "@radix-ui/react-primitive";
4
- export const createAvatarScope: import("@radix-ui/react-context").CreateScope;
5
- type ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';
6
- type PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;
7
- export interface AvatarProps extends PrimitiveSpanProps {
1
+ import * as React from 'react';
2
+ import * as Radix from '@radix-ui/react-primitive';
3
+ import { Primitive } from '@radix-ui/react-primitive';
4
+
5
+ declare type Scope<C = any> = {
6
+ [scopeName: string]: React.Context<C>[];
7
+ } | undefined;
8
+ declare type ScopeHook = (scope: Scope) => {
9
+ [__scopeProp: string]: Scope;
10
+ };
11
+ interface CreateScope {
12
+ scopeName: string;
13
+ (): ScopeHook;
14
+ }
15
+
16
+ declare const createAvatarScope: CreateScope;
17
+ declare type ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';
18
+ declare type PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;
19
+ interface AvatarProps extends PrimitiveSpanProps {
8
20
  }
9
- export const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
10
- type PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;
11
- export interface AvatarImageProps extends PrimitiveImageProps {
21
+ declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
22
+ declare type PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;
23
+ interface AvatarImageProps extends PrimitiveImageProps {
12
24
  onLoadingStatusChange?: (status: ImageLoadingStatus) => void;
13
25
  }
14
- export const AvatarImage: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
15
- export interface AvatarFallbackProps extends PrimitiveSpanProps {
26
+ declare const AvatarImage: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
27
+ interface AvatarFallbackProps extends PrimitiveSpanProps {
16
28
  delayMs?: number;
17
29
  }
18
- export const AvatarFallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
19
- export const Root: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
20
- export const Image: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
21
- export const Fallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
30
+ declare const AvatarFallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
31
+ declare const Root: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
32
+ declare const Image: React.ForwardRefExoticComponent<AvatarImageProps & React.RefAttributes<HTMLImageElement>>;
33
+ declare const Fallback: React.ForwardRefExoticComponent<AvatarFallbackProps & React.RefAttributes<HTMLSpanElement>>;
22
34
 
23
- //# sourceMappingURL=index.d.ts.map
35
+ export { Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, type AvatarImageProps, type AvatarProps, Fallback, Image, Root, createAvatarScope };
package/dist/index.js CHANGED
@@ -1,129 +1,121 @@
1
- var $6FDFN$babelruntimehelpersextends = require("@babel/runtime/helpers/extends");
2
- var $6FDFN$react = require("react");
3
- var $6FDFN$radixuireactcontext = require("@radix-ui/react-context");
4
- var $6FDFN$radixuireactusecallbackref = require("@radix-ui/react-use-callback-ref");
5
- var $6FDFN$radixuireactuselayouteffect = require("@radix-ui/react-use-layout-effect");
6
- var $6FDFN$radixuireactprimitive = require("@radix-ui/react-primitive");
1
+ "use strict";
2
+ (() => {
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
7
31
 
8
- function $parcel$export(e, n, v, s) {
9
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
10
- }
11
- function $parcel$interopDefault(a) {
12
- return a && a.__esModule ? a.default : a;
13
- }
14
-
15
- $parcel$export(module.exports, "createAvatarScope", () => $94437fed6c1d6d8a$export$90370d16b488820f);
16
- $parcel$export(module.exports, "Avatar", () => $94437fed6c1d6d8a$export$e2255cf6045e8d47);
17
- $parcel$export(module.exports, "AvatarImage", () => $94437fed6c1d6d8a$export$2cd8ae1985206fe8);
18
- $parcel$export(module.exports, "AvatarFallback", () => $94437fed6c1d6d8a$export$69fffb6a9571fbfe);
19
- $parcel$export(module.exports, "Root", () => $94437fed6c1d6d8a$export$be92b6f5f03c0fe9);
20
- $parcel$export(module.exports, "Image", () => $94437fed6c1d6d8a$export$3e431a229df88919);
21
- $parcel$export(module.exports, "Fallback", () => $94437fed6c1d6d8a$export$fb8d7f40caaeea67);
22
-
23
-
24
-
25
-
26
-
27
-
28
- /* -------------------------------------------------------------------------------------------------
29
- * Avatar
30
- * -----------------------------------------------------------------------------------------------*/ const $94437fed6c1d6d8a$var$AVATAR_NAME = 'Avatar';
31
- const [$94437fed6c1d6d8a$var$createAvatarContext, $94437fed6c1d6d8a$export$90370d16b488820f] = $6FDFN$radixuireactcontext.createContextScope($94437fed6c1d6d8a$var$AVATAR_NAME);
32
- const [$94437fed6c1d6d8a$var$AvatarProvider, $94437fed6c1d6d8a$var$useAvatarContext] = $94437fed6c1d6d8a$var$createAvatarContext($94437fed6c1d6d8a$var$AVATAR_NAME);
33
- const $94437fed6c1d6d8a$export$e2255cf6045e8d47 = /*#__PURE__*/ $6FDFN$react.forwardRef((props, forwardedRef)=>{
34
- const { __scopeAvatar: __scopeAvatar , ...avatarProps } = props;
35
- const [imageLoadingStatus, setImageLoadingStatus] = $6FDFN$react.useState('idle');
36
- return /*#__PURE__*/ $6FDFN$react.createElement($94437fed6c1d6d8a$var$AvatarProvider, {
37
- scope: __scopeAvatar,
38
- imageLoadingStatus: imageLoadingStatus,
39
- onImageLoadingStatusChange: setImageLoadingStatus
40
- }, /*#__PURE__*/ $6FDFN$react.createElement($6FDFN$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($6FDFN$babelruntimehelpersextends))({}, avatarProps, {
41
- ref: forwardedRef
42
- })));
43
- });
44
- /*#__PURE__*/ Object.assign($94437fed6c1d6d8a$export$e2255cf6045e8d47, {
45
- displayName: $94437fed6c1d6d8a$var$AVATAR_NAME
46
- });
47
- /* -------------------------------------------------------------------------------------------------
48
- * AvatarImage
49
- * -----------------------------------------------------------------------------------------------*/ const $94437fed6c1d6d8a$var$IMAGE_NAME = 'AvatarImage';
50
- const $94437fed6c1d6d8a$export$2cd8ae1985206fe8 = /*#__PURE__*/ $6FDFN$react.forwardRef((props, forwardedRef)=>{
51
- const { __scopeAvatar: __scopeAvatar , src: src , onLoadingStatusChange: onLoadingStatusChange = ()=>{} , ...imageProps } = props;
52
- const context = $94437fed6c1d6d8a$var$useAvatarContext($94437fed6c1d6d8a$var$IMAGE_NAME, __scopeAvatar);
53
- const imageLoadingStatus = $94437fed6c1d6d8a$var$useImageLoadingStatus(src);
54
- const handleLoadingStatusChange = $6FDFN$radixuireactusecallbackref.useCallbackRef((status)=>{
32
+ // packages/react/avatar/src/Avatar.tsx
33
+ var React = __toESM(__require("react"));
34
+ var import_react_context = __require("@radix-ui/react-context");
35
+ var import_react_use_callback_ref = __require("@radix-ui/react-use-callback-ref");
36
+ var import_react_use_layout_effect = __require("@radix-ui/react-use-layout-effect");
37
+ var import_react_primitive = __require("@radix-ui/react-primitive");
38
+ var import_jsx_runtime = __require("react/jsx-runtime");
39
+ var AVATAR_NAME = "Avatar";
40
+ var [createAvatarContext, createAvatarScope] = (0, import_react_context.createContextScope)(AVATAR_NAME);
41
+ var [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);
42
+ var Avatar = React.forwardRef(
43
+ (props, forwardedRef) => {
44
+ const { __scopeAvatar, ...avatarProps } = props;
45
+ const [imageLoadingStatus, setImageLoadingStatus] = React.useState("idle");
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
47
+ AvatarProvider,
48
+ {
49
+ scope: __scopeAvatar,
50
+ imageLoadingStatus,
51
+ onImageLoadingStatusChange: setImageLoadingStatus,
52
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.span, { ...avatarProps, ref: forwardedRef })
53
+ }
54
+ );
55
+ }
56
+ );
57
+ Avatar.displayName = AVATAR_NAME;
58
+ var IMAGE_NAME = "AvatarImage";
59
+ var AvatarImage = React.forwardRef(
60
+ (props, forwardedRef) => {
61
+ const { __scopeAvatar, src, onLoadingStatusChange = () => {
62
+ }, ...imageProps } = props;
63
+ const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);
64
+ const imageLoadingStatus = useImageLoadingStatus(src);
65
+ const handleLoadingStatusChange = (0, import_react_use_callback_ref.useCallbackRef)((status) => {
55
66
  onLoadingStatusChange(status);
56
67
  context.onImageLoadingStatusChange(status);
57
- });
58
- $6FDFN$radixuireactuselayouteffect.useLayoutEffect(()=>{
59
- if (imageLoadingStatus !== 'idle') handleLoadingStatusChange(imageLoadingStatus);
60
- }, [
61
- imageLoadingStatus,
62
- handleLoadingStatusChange
63
- ]);
64
- return imageLoadingStatus === 'loaded' ? /*#__PURE__*/ $6FDFN$react.createElement($6FDFN$radixuireactprimitive.Primitive.img, ($parcel$interopDefault($6FDFN$babelruntimehelpersextends))({}, imageProps, {
65
- ref: forwardedRef,
66
- src: src
67
- })) : null;
68
- });
69
- /*#__PURE__*/ Object.assign($94437fed6c1d6d8a$export$2cd8ae1985206fe8, {
70
- displayName: $94437fed6c1d6d8a$var$IMAGE_NAME
71
- });
72
- /* -------------------------------------------------------------------------------------------------
73
- * AvatarFallback
74
- * -----------------------------------------------------------------------------------------------*/ const $94437fed6c1d6d8a$var$FALLBACK_NAME = 'AvatarFallback';
75
- const $94437fed6c1d6d8a$export$69fffb6a9571fbfe = /*#__PURE__*/ $6FDFN$react.forwardRef((props, forwardedRef)=>{
76
- const { __scopeAvatar: __scopeAvatar , delayMs: delayMs , ...fallbackProps } = props;
77
- const context = $94437fed6c1d6d8a$var$useAvatarContext($94437fed6c1d6d8a$var$FALLBACK_NAME, __scopeAvatar);
78
- const [canRender, setCanRender] = $6FDFN$react.useState(delayMs === undefined);
79
- $6FDFN$react.useEffect(()=>{
80
- if (delayMs !== undefined) {
81
- const timerId = window.setTimeout(()=>setCanRender(true)
82
- , delayMs);
83
- return ()=>window.clearTimeout(timerId)
84
- ;
68
+ });
69
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
70
+ if (imageLoadingStatus !== "idle") {
71
+ handleLoadingStatusChange(imageLoadingStatus);
85
72
  }
86
- }, [
87
- delayMs
88
- ]);
89
- return canRender && context.imageLoadingStatus !== 'loaded' ? /*#__PURE__*/ $6FDFN$react.createElement($6FDFN$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($6FDFN$babelruntimehelpersextends))({}, fallbackProps, {
90
- ref: forwardedRef
91
- })) : null;
92
- });
93
- /*#__PURE__*/ Object.assign($94437fed6c1d6d8a$export$69fffb6a9571fbfe, {
94
- displayName: $94437fed6c1d6d8a$var$FALLBACK_NAME
95
- });
96
- /* -----------------------------------------------------------------------------------------------*/ function $94437fed6c1d6d8a$var$useImageLoadingStatus(src) {
97
- const [loadingStatus, setLoadingStatus] = $6FDFN$react.useState('idle');
98
- $6FDFN$radixuireactuselayouteffect.useLayoutEffect(()=>{
99
- if (!src) {
100
- setLoadingStatus('error');
101
- return;
73
+ }, [imageLoadingStatus, handleLoadingStatusChange]);
74
+ return imageLoadingStatus === "loaded" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;
75
+ }
76
+ );
77
+ AvatarImage.displayName = IMAGE_NAME;
78
+ var FALLBACK_NAME = "AvatarFallback";
79
+ var AvatarFallback = React.forwardRef(
80
+ (props, forwardedRef) => {
81
+ const { __scopeAvatar, delayMs, ...fallbackProps } = props;
82
+ const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);
83
+ const [canRender, setCanRender] = React.useState(delayMs === void 0);
84
+ React.useEffect(() => {
85
+ if (delayMs !== void 0) {
86
+ const timerId = window.setTimeout(() => setCanRender(true), delayMs);
87
+ return () => window.clearTimeout(timerId);
102
88
  }
103
- let isMounted = true;
104
- const image = new window.Image();
105
- const updateStatus = (status)=>()=>{
106
- if (!isMounted) return;
107
- setLoadingStatus(status);
108
- }
109
- ;
110
- setLoadingStatus('loading');
111
- image.onload = updateStatus('loaded');
112
- image.onerror = updateStatus('error');
113
- image.src = src;
114
- return ()=>{
115
- isMounted = false;
116
- };
117
- }, [
118
- src
119
- ]);
89
+ }, [delayMs]);
90
+ return canRender && context.imageLoadingStatus !== "loaded" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;
91
+ }
92
+ );
93
+ AvatarFallback.displayName = FALLBACK_NAME;
94
+ function useImageLoadingStatus(src) {
95
+ const [loadingStatus, setLoadingStatus] = React.useState("idle");
96
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
97
+ if (!src) {
98
+ setLoadingStatus("error");
99
+ return;
100
+ }
101
+ let isMounted = true;
102
+ const image = new window.Image();
103
+ const updateStatus = (status) => () => {
104
+ if (!isMounted) return;
105
+ setLoadingStatus(status);
106
+ };
107
+ setLoadingStatus("loading");
108
+ image.onload = updateStatus("loaded");
109
+ image.onerror = updateStatus("error");
110
+ image.src = src;
111
+ return () => {
112
+ isMounted = false;
113
+ };
114
+ }, [src]);
120
115
  return loadingStatus;
121
- }
122
- const $94437fed6c1d6d8a$export$be92b6f5f03c0fe9 = $94437fed6c1d6d8a$export$e2255cf6045e8d47;
123
- const $94437fed6c1d6d8a$export$3e431a229df88919 = $94437fed6c1d6d8a$export$2cd8ae1985206fe8;
124
- const $94437fed6c1d6d8a$export$fb8d7f40caaeea67 = $94437fed6c1d6d8a$export$69fffb6a9571fbfe;
125
-
126
-
127
-
128
-
116
+ }
117
+ var Root = Avatar;
118
+ var Image = AvatarImage;
119
+ var Fallback = AvatarFallback;
120
+ })();
129
121
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1,7 @@
1
- {"mappings":"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","sources":["packages/react/avatar/src/index.ts","packages/react/avatar/src/Avatar.tsx"],"sourcesContent":["export {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n} from './Avatar';\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps } from './Avatar';\n","import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Avatar\n * -----------------------------------------------------------------------------------------------*/\n\nconst AVATAR_NAME = 'Avatar';\n\ntype ScopedProps<P> = P & { __scopeAvatar?: Scope };\nconst [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\n\ntype ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';\n\ntype AvatarContextValue = {\n imageLoadingStatus: ImageLoadingStatus;\n onImageLoadingStatusChange(status: ImageLoadingStatus): void;\n};\n\nconst [AvatarProvider, useAvatarContext] = createAvatarContext<AvatarContextValue>(AVATAR_NAME);\n\ntype AvatarElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface AvatarProps extends PrimitiveSpanProps {}\n\nconst Avatar = React.forwardRef<AvatarElement, AvatarProps>(\n (props: ScopedProps<AvatarProps>, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n return (\n <AvatarProvider\n scope={__scopeAvatar}\n imageLoadingStatus={imageLoadingStatus}\n onImageLoadingStatusChange={setImageLoadingStatus}\n >\n <Primitive.span {...avatarProps} ref={forwardedRef} />\n </AvatarProvider>\n );\n }\n);\n\nAvatar.displayName = AVATAR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarImage\n * -----------------------------------------------------------------------------------------------*/\n\nconst IMAGE_NAME = 'AvatarImage';\n\ntype AvatarImageElement = React.ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;\ninterface AvatarImageProps extends PrimitiveImageProps {\n onLoadingStatusChange?: (status: ImageLoadingStatus) => void;\n}\n\nconst AvatarImage = React.forwardRef<AvatarImageElement, AvatarImageProps>(\n (props: ScopedProps<AvatarImageProps>, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {}, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src);\n const handleLoadingStatusChange = useCallbackRef((status: ImageLoadingStatus) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n\n useLayoutEffect(() => {\n if (imageLoadingStatus !== 'idle') {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n\n return imageLoadingStatus === 'loaded' ? (\n <Primitive.img {...imageProps} ref={forwardedRef} src={src} />\n ) : null;\n }\n);\n\nAvatarImage.displayName = IMAGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarFallback\n * -----------------------------------------------------------------------------------------------*/\n\nconst FALLBACK_NAME = 'AvatarFallback';\n\ntype AvatarFallbackElement = React.ElementRef<typeof Primitive.span>;\ninterface AvatarFallbackProps extends PrimitiveSpanProps {\n delayMs?: number;\n}\n\nconst AvatarFallback = React.forwardRef<AvatarFallbackElement, AvatarFallbackProps>(\n (props: ScopedProps<AvatarFallbackProps>, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === undefined);\n\n React.useEffect(() => {\n if (delayMs !== undefined) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n\n return canRender && context.imageLoadingStatus !== 'loaded' ? (\n <Primitive.span {...fallbackProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nAvatarFallback.displayName = FALLBACK_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useImageLoadingStatus(src?: string) {\n const [loadingStatus, setLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus('error');\n return;\n }\n\n let isMounted = true;\n const image = new window.Image();\n\n const updateStatus = (status: ImageLoadingStatus) => () => {\n if (!isMounted) return;\n setLoadingStatus(status);\n };\n\n setLoadingStatus('loading');\n image.onload = updateStatus('loaded');\n image.onerror = updateStatus('error');\n image.src = src;\n\n return () => {\n isMounted = false;\n };\n }, [src]);\n\n return loadingStatus;\n}\nconst Root = Avatar;\nconst Image = AvatarImage;\nconst Fallback = AvatarFallback;\n\nexport {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n};\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps };\n"],"names":["createAvatarScope","Avatar","AvatarImage","AvatarFallback","Root","Image","Fallback","React","createContextScope","useCallbackRef","useLayoutEffect","Primitive","AVATAR_NAME","createAvatarContext","AvatarProvider","useAvatarContext","forwardRef","props","forwardedRef","__scopeAvatar","avatarProps","imageLoadingStatus","setImageLoadingStatus","useState","IMAGE_NAME","src","onLoadingStatusChange","imageProps","context","useImageLoadingStatus","handleLoadingStatusChange","status","onImageLoadingStatusChange","FALLBACK_NAME","delayMs","fallbackProps","canRender","setCanRender","undefined","useEffect","timerId","window","setTimeout","clearTimeout","loadingStatus","setLoadingStatus","isMounted","image","updateStatus","onload","onerror"],"version":3,"file":"index.js.map"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/Avatar.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Avatar\n * -----------------------------------------------------------------------------------------------*/\n\nconst AVATAR_NAME = 'Avatar';\n\ntype ScopedProps<P> = P & { __scopeAvatar?: Scope };\nconst [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\n\ntype ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';\n\ntype AvatarContextValue = {\n imageLoadingStatus: ImageLoadingStatus;\n onImageLoadingStatusChange(status: ImageLoadingStatus): void;\n};\n\nconst [AvatarProvider, useAvatarContext] = createAvatarContext<AvatarContextValue>(AVATAR_NAME);\n\ntype AvatarElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface AvatarProps extends PrimitiveSpanProps {}\n\nconst Avatar = React.forwardRef<AvatarElement, AvatarProps>(\n (props: ScopedProps<AvatarProps>, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n return (\n <AvatarProvider\n scope={__scopeAvatar}\n imageLoadingStatus={imageLoadingStatus}\n onImageLoadingStatusChange={setImageLoadingStatus}\n >\n <Primitive.span {...avatarProps} ref={forwardedRef} />\n </AvatarProvider>\n );\n }\n);\n\nAvatar.displayName = AVATAR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarImage\n * -----------------------------------------------------------------------------------------------*/\n\nconst IMAGE_NAME = 'AvatarImage';\n\ntype AvatarImageElement = React.ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;\ninterface AvatarImageProps extends PrimitiveImageProps {\n onLoadingStatusChange?: (status: ImageLoadingStatus) => void;\n}\n\nconst AvatarImage = React.forwardRef<AvatarImageElement, AvatarImageProps>(\n (props: ScopedProps<AvatarImageProps>, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {}, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src);\n const handleLoadingStatusChange = useCallbackRef((status: ImageLoadingStatus) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n\n useLayoutEffect(() => {\n if (imageLoadingStatus !== 'idle') {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n\n return imageLoadingStatus === 'loaded' ? (\n <Primitive.img {...imageProps} ref={forwardedRef} src={src} />\n ) : null;\n }\n);\n\nAvatarImage.displayName = IMAGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarFallback\n * -----------------------------------------------------------------------------------------------*/\n\nconst FALLBACK_NAME = 'AvatarFallback';\n\ntype AvatarFallbackElement = React.ElementRef<typeof Primitive.span>;\ninterface AvatarFallbackProps extends PrimitiveSpanProps {\n delayMs?: number;\n}\n\nconst AvatarFallback = React.forwardRef<AvatarFallbackElement, AvatarFallbackProps>(\n (props: ScopedProps<AvatarFallbackProps>, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === undefined);\n\n React.useEffect(() => {\n if (delayMs !== undefined) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n\n return canRender && context.imageLoadingStatus !== 'loaded' ? (\n <Primitive.span {...fallbackProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nAvatarFallback.displayName = FALLBACK_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useImageLoadingStatus(src?: string) {\n const [loadingStatus, setLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus('error');\n return;\n }\n\n let isMounted = true;\n const image = new window.Image();\n\n const updateStatus = (status: ImageLoadingStatus) => () => {\n if (!isMounted) return;\n setLoadingStatus(status);\n };\n\n setLoadingStatus('loading');\n image.onload = updateStatus('loaded');\n image.onerror = updateStatus('error');\n image.src = src;\n\n return () => {\n isMounted = false;\n };\n }, [src]);\n\n return loadingStatus;\n}\nconst Root = Avatar;\nconst Image = AvatarImage;\nconst Fallback = AvatarFallback;\n\nexport {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n};\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAuB;AACvB,6BAAmC;AACnC,sCAA+B;AAC/B,uCAAgC;AAChC,+BAA0B;AAqClB;AA5BR,MAAM,cAAc;AAGpB,MAAM,CAAC,qBAAqB,iBAAiB,QAAI,yCAAmB,WAAW;AAS/E,MAAM,CAAC,gBAAgB,gBAAgB,IAAI,oBAAwC,WAAW;AAM9F,MAAM,SAAe;AAAA,IACnB,CAAC,OAAiC,iBAAiB;AACjD,YAAM,EAAE,eAAe,GAAG,YAAY,IAAI;AAC1C,YAAM,CAAC,oBAAoB,qBAAqB,IAAU,eAA6B,MAAM;AAC7F,aACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP;AAAA,UACA,4BAA4B;AAAA,UAE5B,sDAAC,iCAAU,MAAV,EAAgB,GAAG,aAAa,KAAK,cAAc;AAAA;AAAA,MACtD;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO,cAAc;AAMrB,MAAM,aAAa;AAQnB,MAAM,cAAoB;AAAA,IACxB,CAAC,OAAsC,iBAAiB;AACtD,YAAM,EAAE,eAAe,KAAK,wBAAwB,MAAM;AAAA,MAAC,GAAG,GAAG,WAAW,IAAI;AAChF,YAAM,UAAU,iBAAiB,YAAY,aAAa;AAC1D,YAAM,qBAAqB,sBAAsB,GAAG;AACpD,YAAM,gCAA4B,8CAAe,CAAC,WAA+B;AAC/E,8BAAsB,MAAM;AAC5B,gBAAQ,2BAA2B,MAAM;AAAA,MAC3C,CAAC;AAED,0DAAgB,MAAM;AACpB,YAAI,uBAAuB,QAAQ;AACjC,oCAA0B,kBAAkB;AAAA,QAC9C;AAAA,MACF,GAAG,CAAC,oBAAoB,yBAAyB,CAAC;AAElD,aAAO,uBAAuB,WAC5B,4CAAC,iCAAU,KAAV,EAAe,GAAG,YAAY,KAAK,cAAc,KAAU,IAC1D;AAAA,IACN;AAAA,EACF;AAEA,cAAY,cAAc;AAM1B,MAAM,gBAAgB;AAOtB,MAAM,iBAAuB;AAAA,IAC3B,CAAC,OAAyC,iBAAiB;AACzD,YAAM,EAAE,eAAe,SAAS,GAAG,cAAc,IAAI;AACrD,YAAM,UAAU,iBAAiB,eAAe,aAAa;AAC7D,YAAM,CAAC,WAAW,YAAY,IAAU,eAAS,YAAY,MAAS;AAEtE,MAAM,gBAAU,MAAM;AACpB,YAAI,YAAY,QAAW;AACzB,gBAAM,UAAU,OAAO,WAAW,MAAM,aAAa,IAAI,GAAG,OAAO;AACnE,iBAAO,MAAM,OAAO,aAAa,OAAO;AAAA,QAC1C;AAAA,MACF,GAAG,CAAC,OAAO,CAAC;AAEZ,aAAO,aAAa,QAAQ,uBAAuB,WACjD,4CAAC,iCAAU,MAAV,EAAgB,GAAG,eAAe,KAAK,cAAc,IACpD;AAAA,IACN;AAAA,EACF;AAEA,iBAAe,cAAc;AAI7B,WAAS,sBAAsB,KAAc;AAC3C,UAAM,CAAC,eAAe,gBAAgB,IAAU,eAA6B,MAAM;AAEnF,wDAAgB,MAAM;AACpB,UAAI,CAAC,KAAK;AACR,yBAAiB,OAAO;AACxB;AAAA,MACF;AAEA,UAAI,YAAY;AAChB,YAAM,QAAQ,IAAI,OAAO,MAAM;AAE/B,YAAM,eAAe,CAAC,WAA+B,MAAM;AACzD,YAAI,CAAC,UAAW;AAChB,yBAAiB,MAAM;AAAA,MACzB;AAEA,uBAAiB,SAAS;AAC1B,YAAM,SAAS,aAAa,QAAQ;AACpC,YAAM,UAAU,aAAa,OAAO;AACpC,YAAM,MAAM;AAEZ,aAAO,MAAM;AACX,oBAAY;AAAA,MACd;AAAA,IACF,GAAG,CAAC,GAAG,CAAC;AAER,WAAO;AAAA,EACT;AACA,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,WAAW;",
6
+ "names": []
7
+ }
package/dist/index.mjs CHANGED
@@ -1,116 +1,98 @@
1
- import $8NyvN$babelruntimehelpersesmextends from "@babel/runtime/helpers/esm/extends";
2
- import {forwardRef as $8NyvN$forwardRef, useState as $8NyvN$useState, createElement as $8NyvN$createElement, useEffect as $8NyvN$useEffect} from "react";
3
- import {createContextScope as $8NyvN$createContextScope} from "@radix-ui/react-context";
4
- import {useCallbackRef as $8NyvN$useCallbackRef} from "@radix-ui/react-use-callback-ref";
5
- import {useLayoutEffect as $8NyvN$useLayoutEffect} from "@radix-ui/react-use-layout-effect";
6
- import {Primitive as $8NyvN$Primitive} from "@radix-ui/react-primitive";
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
- /* -------------------------------------------------------------------------------------------------
15
- * Avatar
16
- * -----------------------------------------------------------------------------------------------*/ const $cddcb0b647441e34$var$AVATAR_NAME = 'Avatar';
17
- const [$cddcb0b647441e34$var$createAvatarContext, $cddcb0b647441e34$export$90370d16b488820f] = $8NyvN$createContextScope($cddcb0b647441e34$var$AVATAR_NAME);
18
- const [$cddcb0b647441e34$var$AvatarProvider, $cddcb0b647441e34$var$useAvatarContext] = $cddcb0b647441e34$var$createAvatarContext($cddcb0b647441e34$var$AVATAR_NAME);
19
- const $cddcb0b647441e34$export$e2255cf6045e8d47 = /*#__PURE__*/ $8NyvN$forwardRef((props, forwardedRef)=>{
20
- const { __scopeAvatar: __scopeAvatar , ...avatarProps } = props;
21
- const [imageLoadingStatus, setImageLoadingStatus] = $8NyvN$useState('idle');
22
- return /*#__PURE__*/ $8NyvN$createElement($cddcb0b647441e34$var$AvatarProvider, {
1
+ // packages/react/avatar/src/Avatar.tsx
2
+ import * as React from "react";
3
+ import { createContextScope } from "@radix-ui/react-context";
4
+ import { useCallbackRef } from "@radix-ui/react-use-callback-ref";
5
+ import { useLayoutEffect } from "@radix-ui/react-use-layout-effect";
6
+ import { Primitive } from "@radix-ui/react-primitive";
7
+ import { jsx } from "react/jsx-runtime";
8
+ var AVATAR_NAME = "Avatar";
9
+ var [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);
10
+ var [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);
11
+ var Avatar = React.forwardRef(
12
+ (props, forwardedRef) => {
13
+ const { __scopeAvatar, ...avatarProps } = props;
14
+ const [imageLoadingStatus, setImageLoadingStatus] = React.useState("idle");
15
+ return /* @__PURE__ */ jsx(
16
+ AvatarProvider,
17
+ {
23
18
  scope: __scopeAvatar,
24
- imageLoadingStatus: imageLoadingStatus,
25
- onImageLoadingStatusChange: setImageLoadingStatus
26
- }, /*#__PURE__*/ $8NyvN$createElement($8NyvN$Primitive.span, $8NyvN$babelruntimehelpersesmextends({}, avatarProps, {
27
- ref: forwardedRef
28
- })));
29
- });
30
- /*#__PURE__*/ Object.assign($cddcb0b647441e34$export$e2255cf6045e8d47, {
31
- displayName: $cddcb0b647441e34$var$AVATAR_NAME
32
- });
33
- /* -------------------------------------------------------------------------------------------------
34
- * AvatarImage
35
- * -----------------------------------------------------------------------------------------------*/ const $cddcb0b647441e34$var$IMAGE_NAME = 'AvatarImage';
36
- const $cddcb0b647441e34$export$2cd8ae1985206fe8 = /*#__PURE__*/ $8NyvN$forwardRef((props, forwardedRef)=>{
37
- const { __scopeAvatar: __scopeAvatar , src: src , onLoadingStatusChange: onLoadingStatusChange = ()=>{} , ...imageProps } = props;
38
- const context = $cddcb0b647441e34$var$useAvatarContext($cddcb0b647441e34$var$IMAGE_NAME, __scopeAvatar);
39
- const imageLoadingStatus = $cddcb0b647441e34$var$useImageLoadingStatus(src);
40
- const handleLoadingStatusChange = $8NyvN$useCallbackRef((status)=>{
41
- onLoadingStatusChange(status);
42
- context.onImageLoadingStatusChange(status);
43
- });
44
- $8NyvN$useLayoutEffect(()=>{
45
- if (imageLoadingStatus !== 'idle') handleLoadingStatusChange(imageLoadingStatus);
46
- }, [
47
19
  imageLoadingStatus,
48
- handleLoadingStatusChange
49
- ]);
50
- return imageLoadingStatus === 'loaded' ? /*#__PURE__*/ $8NyvN$createElement($8NyvN$Primitive.img, $8NyvN$babelruntimehelpersesmextends({}, imageProps, {
51
- ref: forwardedRef,
52
- src: src
53
- })) : null;
54
- });
55
- /*#__PURE__*/ Object.assign($cddcb0b647441e34$export$2cd8ae1985206fe8, {
56
- displayName: $cddcb0b647441e34$var$IMAGE_NAME
57
- });
58
- /* -------------------------------------------------------------------------------------------------
59
- * AvatarFallback
60
- * -----------------------------------------------------------------------------------------------*/ const $cddcb0b647441e34$var$FALLBACK_NAME = 'AvatarFallback';
61
- const $cddcb0b647441e34$export$69fffb6a9571fbfe = /*#__PURE__*/ $8NyvN$forwardRef((props, forwardedRef)=>{
62
- const { __scopeAvatar: __scopeAvatar , delayMs: delayMs , ...fallbackProps } = props;
63
- const context = $cddcb0b647441e34$var$useAvatarContext($cddcb0b647441e34$var$FALLBACK_NAME, __scopeAvatar);
64
- const [canRender, setCanRender] = $8NyvN$useState(delayMs === undefined);
65
- $8NyvN$useEffect(()=>{
66
- if (delayMs !== undefined) {
67
- const timerId = window.setTimeout(()=>setCanRender(true)
68
- , delayMs);
69
- return ()=>window.clearTimeout(timerId)
70
- ;
71
- }
72
- }, [
73
- delayMs
74
- ]);
75
- return canRender && context.imageLoadingStatus !== 'loaded' ? /*#__PURE__*/ $8NyvN$createElement($8NyvN$Primitive.span, $8NyvN$babelruntimehelpersesmextends({}, fallbackProps, {
76
- ref: forwardedRef
77
- })) : null;
78
- });
79
- /*#__PURE__*/ Object.assign($cddcb0b647441e34$export$69fffb6a9571fbfe, {
80
- displayName: $cddcb0b647441e34$var$FALLBACK_NAME
81
- });
82
- /* -----------------------------------------------------------------------------------------------*/ function $cddcb0b647441e34$var$useImageLoadingStatus(src) {
83
- const [loadingStatus, setLoadingStatus] = $8NyvN$useState('idle');
84
- $8NyvN$useLayoutEffect(()=>{
85
- if (!src) {
86
- setLoadingStatus('error');
87
- return;
88
- }
89
- let isMounted = true;
90
- const image = new window.Image();
91
- const updateStatus = (status)=>()=>{
92
- if (!isMounted) return;
93
- setLoadingStatus(status);
94
- }
95
- ;
96
- setLoadingStatus('loading');
97
- image.onload = updateStatus('loaded');
98
- image.onerror = updateStatus('error');
99
- image.src = src;
100
- return ()=>{
101
- isMounted = false;
102
- };
103
- }, [
104
- src
105
- ]);
106
- return loadingStatus;
20
+ onImageLoadingStatusChange: setImageLoadingStatus,
21
+ children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })
22
+ }
23
+ );
24
+ }
25
+ );
26
+ Avatar.displayName = AVATAR_NAME;
27
+ var IMAGE_NAME = "AvatarImage";
28
+ var AvatarImage = React.forwardRef(
29
+ (props, forwardedRef) => {
30
+ const { __scopeAvatar, src, onLoadingStatusChange = () => {
31
+ }, ...imageProps } = props;
32
+ const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);
33
+ const imageLoadingStatus = useImageLoadingStatus(src);
34
+ const handleLoadingStatusChange = useCallbackRef((status) => {
35
+ onLoadingStatusChange(status);
36
+ context.onImageLoadingStatusChange(status);
37
+ });
38
+ useLayoutEffect(() => {
39
+ if (imageLoadingStatus !== "idle") {
40
+ handleLoadingStatusChange(imageLoadingStatus);
41
+ }
42
+ }, [imageLoadingStatus, handleLoadingStatusChange]);
43
+ return imageLoadingStatus === "loaded" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;
44
+ }
45
+ );
46
+ AvatarImage.displayName = IMAGE_NAME;
47
+ var FALLBACK_NAME = "AvatarFallback";
48
+ var AvatarFallback = React.forwardRef(
49
+ (props, forwardedRef) => {
50
+ const { __scopeAvatar, delayMs, ...fallbackProps } = props;
51
+ const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);
52
+ const [canRender, setCanRender] = React.useState(delayMs === void 0);
53
+ React.useEffect(() => {
54
+ if (delayMs !== void 0) {
55
+ const timerId = window.setTimeout(() => setCanRender(true), delayMs);
56
+ return () => window.clearTimeout(timerId);
57
+ }
58
+ }, [delayMs]);
59
+ return canRender && context.imageLoadingStatus !== "loaded" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;
60
+ }
61
+ );
62
+ AvatarFallback.displayName = FALLBACK_NAME;
63
+ function useImageLoadingStatus(src) {
64
+ const [loadingStatus, setLoadingStatus] = React.useState("idle");
65
+ useLayoutEffect(() => {
66
+ if (!src) {
67
+ setLoadingStatus("error");
68
+ return;
69
+ }
70
+ let isMounted = true;
71
+ const image = new window.Image();
72
+ const updateStatus = (status) => () => {
73
+ if (!isMounted) return;
74
+ setLoadingStatus(status);
75
+ };
76
+ setLoadingStatus("loading");
77
+ image.onload = updateStatus("loaded");
78
+ image.onerror = updateStatus("error");
79
+ image.src = src;
80
+ return () => {
81
+ isMounted = false;
82
+ };
83
+ }, [src]);
84
+ return loadingStatus;
107
85
  }
108
- const $cddcb0b647441e34$export$be92b6f5f03c0fe9 = $cddcb0b647441e34$export$e2255cf6045e8d47;
109
- const $cddcb0b647441e34$export$3e431a229df88919 = $cddcb0b647441e34$export$2cd8ae1985206fe8;
110
- const $cddcb0b647441e34$export$fb8d7f40caaeea67 = $cddcb0b647441e34$export$69fffb6a9571fbfe;
111
-
112
-
113
-
114
-
115
- export {$cddcb0b647441e34$export$90370d16b488820f as createAvatarScope, $cddcb0b647441e34$export$e2255cf6045e8d47 as Avatar, $cddcb0b647441e34$export$2cd8ae1985206fe8 as AvatarImage, $cddcb0b647441e34$export$69fffb6a9571fbfe as AvatarFallback, $cddcb0b647441e34$export$be92b6f5f03c0fe9 as Root, $cddcb0b647441e34$export$3e431a229df88919 as Image, $cddcb0b647441e34$export$fb8d7f40caaeea67 as Fallback};
86
+ var Root = Avatar;
87
+ var Image = AvatarImage;
88
+ var Fallback = AvatarFallback;
89
+ export {
90
+ Avatar,
91
+ AvatarFallback,
92
+ AvatarImage,
93
+ Fallback,
94
+ Image,
95
+ Root,
96
+ createAvatarScope
97
+ };
116
98
  //# sourceMappingURL=index.mjs.map
@@ -1 +1,7 @@
1
- {"mappings":"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","sources":["packages/react/avatar/src/index.ts","packages/react/avatar/src/Avatar.tsx"],"sourcesContent":["export {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n} from './Avatar';\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps } from './Avatar';\n","import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Avatar\n * -----------------------------------------------------------------------------------------------*/\n\nconst AVATAR_NAME = 'Avatar';\n\ntype ScopedProps<P> = P & { __scopeAvatar?: Scope };\nconst [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\n\ntype ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';\n\ntype AvatarContextValue = {\n imageLoadingStatus: ImageLoadingStatus;\n onImageLoadingStatusChange(status: ImageLoadingStatus): void;\n};\n\nconst [AvatarProvider, useAvatarContext] = createAvatarContext<AvatarContextValue>(AVATAR_NAME);\n\ntype AvatarElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface AvatarProps extends PrimitiveSpanProps {}\n\nconst Avatar = React.forwardRef<AvatarElement, AvatarProps>(\n (props: ScopedProps<AvatarProps>, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n return (\n <AvatarProvider\n scope={__scopeAvatar}\n imageLoadingStatus={imageLoadingStatus}\n onImageLoadingStatusChange={setImageLoadingStatus}\n >\n <Primitive.span {...avatarProps} ref={forwardedRef} />\n </AvatarProvider>\n );\n }\n);\n\nAvatar.displayName = AVATAR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarImage\n * -----------------------------------------------------------------------------------------------*/\n\nconst IMAGE_NAME = 'AvatarImage';\n\ntype AvatarImageElement = React.ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;\ninterface AvatarImageProps extends PrimitiveImageProps {\n onLoadingStatusChange?: (status: ImageLoadingStatus) => void;\n}\n\nconst AvatarImage = React.forwardRef<AvatarImageElement, AvatarImageProps>(\n (props: ScopedProps<AvatarImageProps>, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {}, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src);\n const handleLoadingStatusChange = useCallbackRef((status: ImageLoadingStatus) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n\n useLayoutEffect(() => {\n if (imageLoadingStatus !== 'idle') {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n\n return imageLoadingStatus === 'loaded' ? (\n <Primitive.img {...imageProps} ref={forwardedRef} src={src} />\n ) : null;\n }\n);\n\nAvatarImage.displayName = IMAGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarFallback\n * -----------------------------------------------------------------------------------------------*/\n\nconst FALLBACK_NAME = 'AvatarFallback';\n\ntype AvatarFallbackElement = React.ElementRef<typeof Primitive.span>;\ninterface AvatarFallbackProps extends PrimitiveSpanProps {\n delayMs?: number;\n}\n\nconst AvatarFallback = React.forwardRef<AvatarFallbackElement, AvatarFallbackProps>(\n (props: ScopedProps<AvatarFallbackProps>, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === undefined);\n\n React.useEffect(() => {\n if (delayMs !== undefined) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n\n return canRender && context.imageLoadingStatus !== 'loaded' ? (\n <Primitive.span {...fallbackProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nAvatarFallback.displayName = FALLBACK_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useImageLoadingStatus(src?: string) {\n const [loadingStatus, setLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus('error');\n return;\n }\n\n let isMounted = true;\n const image = new window.Image();\n\n const updateStatus = (status: ImageLoadingStatus) => () => {\n if (!isMounted) return;\n setLoadingStatus(status);\n };\n\n setLoadingStatus('loading');\n image.onload = updateStatus('loaded');\n image.onerror = updateStatus('error');\n image.src = src;\n\n return () => {\n isMounted = false;\n };\n }, [src]);\n\n return loadingStatus;\n}\nconst Root = Avatar;\nconst Image = AvatarImage;\nconst Fallback = AvatarFallback;\n\nexport {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n};\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps };\n"],"names":["createAvatarScope","Avatar","AvatarImage","AvatarFallback","Root","Image","Fallback","React","createContextScope","useCallbackRef","useLayoutEffect","Primitive","AVATAR_NAME","createAvatarContext","AvatarProvider","useAvatarContext","forwardRef","props","forwardedRef","__scopeAvatar","avatarProps","imageLoadingStatus","setImageLoadingStatus","useState","IMAGE_NAME","src","onLoadingStatusChange","imageProps","context","useImageLoadingStatus","handleLoadingStatusChange","status","onImageLoadingStatusChange","FALLBACK_NAME","delayMs","fallbackProps","canRender","setCanRender","undefined","useEffect","timerId","window","setTimeout","clearTimeout","loadingStatus","setLoadingStatus","isMounted","image","updateStatus","onload","onerror"],"version":3,"file":"index.mjs.map"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/Avatar.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Avatar\n * -----------------------------------------------------------------------------------------------*/\n\nconst AVATAR_NAME = 'Avatar';\n\ntype ScopedProps<P> = P & { __scopeAvatar?: Scope };\nconst [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\n\ntype ImageLoadingStatus = 'idle' | 'loading' | 'loaded' | 'error';\n\ntype AvatarContextValue = {\n imageLoadingStatus: ImageLoadingStatus;\n onImageLoadingStatusChange(status: ImageLoadingStatus): void;\n};\n\nconst [AvatarProvider, useAvatarContext] = createAvatarContext<AvatarContextValue>(AVATAR_NAME);\n\ntype AvatarElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface AvatarProps extends PrimitiveSpanProps {}\n\nconst Avatar = React.forwardRef<AvatarElement, AvatarProps>(\n (props: ScopedProps<AvatarProps>, forwardedRef) => {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n return (\n <AvatarProvider\n scope={__scopeAvatar}\n imageLoadingStatus={imageLoadingStatus}\n onImageLoadingStatusChange={setImageLoadingStatus}\n >\n <Primitive.span {...avatarProps} ref={forwardedRef} />\n </AvatarProvider>\n );\n }\n);\n\nAvatar.displayName = AVATAR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarImage\n * -----------------------------------------------------------------------------------------------*/\n\nconst IMAGE_NAME = 'AvatarImage';\n\ntype AvatarImageElement = React.ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = Radix.ComponentPropsWithoutRef<typeof Primitive.img>;\ninterface AvatarImageProps extends PrimitiveImageProps {\n onLoadingStatusChange?: (status: ImageLoadingStatus) => void;\n}\n\nconst AvatarImage = React.forwardRef<AvatarImageElement, AvatarImageProps>(\n (props: ScopedProps<AvatarImageProps>, forwardedRef) => {\n const { __scopeAvatar, src, onLoadingStatusChange = () => {}, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n const imageLoadingStatus = useImageLoadingStatus(src);\n const handleLoadingStatusChange = useCallbackRef((status: ImageLoadingStatus) => {\n onLoadingStatusChange(status);\n context.onImageLoadingStatusChange(status);\n });\n\n useLayoutEffect(() => {\n if (imageLoadingStatus !== 'idle') {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n\n return imageLoadingStatus === 'loaded' ? (\n <Primitive.img {...imageProps} ref={forwardedRef} src={src} />\n ) : null;\n }\n);\n\nAvatarImage.displayName = IMAGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AvatarFallback\n * -----------------------------------------------------------------------------------------------*/\n\nconst FALLBACK_NAME = 'AvatarFallback';\n\ntype AvatarFallbackElement = React.ElementRef<typeof Primitive.span>;\ninterface AvatarFallbackProps extends PrimitiveSpanProps {\n delayMs?: number;\n}\n\nconst AvatarFallback = React.forwardRef<AvatarFallbackElement, AvatarFallbackProps>(\n (props: ScopedProps<AvatarFallbackProps>, forwardedRef) => {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === undefined);\n\n React.useEffect(() => {\n if (delayMs !== undefined) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n\n return canRender && context.imageLoadingStatus !== 'loaded' ? (\n <Primitive.span {...fallbackProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nAvatarFallback.displayName = FALLBACK_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useImageLoadingStatus(src?: string) {\n const [loadingStatus, setLoadingStatus] = React.useState<ImageLoadingStatus>('idle');\n\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus('error');\n return;\n }\n\n let isMounted = true;\n const image = new window.Image();\n\n const updateStatus = (status: ImageLoadingStatus) => () => {\n if (!isMounted) return;\n setLoadingStatus(status);\n };\n\n setLoadingStatus('loading');\n image.onload = updateStatus('loaded');\n image.onerror = updateStatus('error');\n image.src = src;\n\n return () => {\n isMounted = false;\n };\n }, [src]);\n\n return loadingStatus;\n}\nconst Root = Avatar;\nconst Image = AvatarImage;\nconst Fallback = AvatarFallback;\n\nexport {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n};\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps };\n"],
5
+ "mappings": ";AAAA,YAAY,WAAW;AACvB,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,iBAAiB;AAqClB;AA5BR,IAAM,cAAc;AAGpB,IAAM,CAAC,qBAAqB,iBAAiB,IAAI,mBAAmB,WAAW;AAS/E,IAAM,CAAC,gBAAgB,gBAAgB,IAAI,oBAAwC,WAAW;AAM9F,IAAM,SAAe;AAAA,EACnB,CAAC,OAAiC,iBAAiB;AACjD,UAAM,EAAE,eAAe,GAAG,YAAY,IAAI;AAC1C,UAAM,CAAC,oBAAoB,qBAAqB,IAAU,eAA6B,MAAM;AAC7F,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,4BAA4B;AAAA,QAE5B,8BAAC,UAAU,MAAV,EAAgB,GAAG,aAAa,KAAK,cAAc;AAAA;AAAA,IACtD;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;AAMrB,IAAM,aAAa;AAQnB,IAAM,cAAoB;AAAA,EACxB,CAAC,OAAsC,iBAAiB;AACtD,UAAM,EAAE,eAAe,KAAK,wBAAwB,MAAM;AAAA,IAAC,GAAG,GAAG,WAAW,IAAI;AAChF,UAAM,UAAU,iBAAiB,YAAY,aAAa;AAC1D,UAAM,qBAAqB,sBAAsB,GAAG;AACpD,UAAM,4BAA4B,eAAe,CAAC,WAA+B;AAC/E,4BAAsB,MAAM;AAC5B,cAAQ,2BAA2B,MAAM;AAAA,IAC3C,CAAC;AAED,oBAAgB,MAAM;AACpB,UAAI,uBAAuB,QAAQ;AACjC,kCAA0B,kBAAkB;AAAA,MAC9C;AAAA,IACF,GAAG,CAAC,oBAAoB,yBAAyB,CAAC;AAElD,WAAO,uBAAuB,WAC5B,oBAAC,UAAU,KAAV,EAAe,GAAG,YAAY,KAAK,cAAc,KAAU,IAC1D;AAAA,EACN;AACF;AAEA,YAAY,cAAc;AAM1B,IAAM,gBAAgB;AAOtB,IAAM,iBAAuB;AAAA,EAC3B,CAAC,OAAyC,iBAAiB;AACzD,UAAM,EAAE,eAAe,SAAS,GAAG,cAAc,IAAI;AACrD,UAAM,UAAU,iBAAiB,eAAe,aAAa;AAC7D,UAAM,CAAC,WAAW,YAAY,IAAU,eAAS,YAAY,MAAS;AAEtE,IAAM,gBAAU,MAAM;AACpB,UAAI,YAAY,QAAW;AACzB,cAAM,UAAU,OAAO,WAAW,MAAM,aAAa,IAAI,GAAG,OAAO;AACnE,eAAO,MAAM,OAAO,aAAa,OAAO;AAAA,MAC1C;AAAA,IACF,GAAG,CAAC,OAAO,CAAC;AAEZ,WAAO,aAAa,QAAQ,uBAAuB,WACjD,oBAAC,UAAU,MAAV,EAAgB,GAAG,eAAe,KAAK,cAAc,IACpD;AAAA,EACN;AACF;AAEA,eAAe,cAAc;AAI7B,SAAS,sBAAsB,KAAc;AAC3C,QAAM,CAAC,eAAe,gBAAgB,IAAU,eAA6B,MAAM;AAEnF,kBAAgB,MAAM;AACpB,QAAI,CAAC,KAAK;AACR,uBAAiB,OAAO;AACxB;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,UAAM,QAAQ,IAAI,OAAO,MAAM;AAE/B,UAAM,eAAe,CAAC,WAA+B,MAAM;AACzD,UAAI,CAAC,UAAW;AAChB,uBAAiB,MAAM;AAAA,IACzB;AAEA,qBAAiB,SAAS;AAC1B,UAAM,SAAS,aAAa,QAAQ;AACpC,UAAM,UAAU,aAAa,OAAO;AACpC,UAAM,MAAM;AAEZ,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAER,SAAO;AACT;AACA,IAAM,OAAO;AACb,IAAM,QAAQ;AACd,IAAM,WAAW;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radix-ui/react-avatar",
3
- "version": "1.0.4-rc.3",
3
+ "version": "1.1.0-rc.1",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {
@@ -28,11 +28,10 @@
28
28
  "version": "yarn version"
29
29
  },
30
30
  "dependencies": {
31
- "@babel/runtime": "^7.13.10",
32
- "@radix-ui/react-context": "1.0.1",
33
- "@radix-ui/react-primitive": "1.0.3",
34
- "@radix-ui/react-use-callback-ref": "1.0.1",
35
- "@radix-ui/react-use-layout-effect": "1.0.1"
31
+ "@radix-ui/react-context": "1.1.0-rc.1",
32
+ "@radix-ui/react-primitive": "1.1.0-rc.1",
33
+ "@radix-ui/react-use-callback-ref": "1.1.0-rc.1",
34
+ "@radix-ui/react-use-layout-effect": "1.1.0-rc.1"
36
35
  },
37
36
  "peerDependencies": {
38
37
  "@types/react": "*",
@@ -56,5 +55,5 @@
56
55
  "bugs": {
57
56
  "url": "https://github.com/radix-ui/primitives/issues"
58
57
  },
59
- "stableVersion": "1.0.3"
58
+ "stableVersion": "1.0.4"
60
59
  }
@@ -1 +0,0 @@
1
- {"mappings":";;;AAgBA,OAAA,wFAAgF,CAAC;AAEjF,0BAA0B,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAUlE,0BAA0B,MAAM,wBAAwB,CAAC,OAAO,UAAU,IAAI,CAAC,CAAC;AAChF,4BAAsB,SAAQ,kBAAkB;CAAG;AAEnD,OAAA,MAAM,2FAcL,CAAC;AAWF,2BAA2B,MAAM,wBAAwB,CAAC,OAAO,UAAU,GAAG,CAAC,CAAC;AAChF,iCAA2B,SAAQ,mBAAmB;IACpD,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9D;AAED,OAAA,MAAM,sGAoBL,CAAC;AAWF,oCAA8B,SAAQ,kBAAkB;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,OAAA,MAAM,2GAiBL,CAAC;AAmCF,OAAA,MAAM,yFAAa,CAAC;AACpB,OAAA,MAAM,gGAAmB,CAAC;AAC1B,OAAA,MAAM,qGAAyB,CAAC","sources":["packages/react/avatar/src/packages/react/avatar/src/Avatar.tsx","packages/react/avatar/src/packages/react/avatar/src/index.ts","packages/react/avatar/src/index.ts"],"sourcesContent":[null,null,"export {\n createAvatarScope,\n //\n Avatar,\n AvatarImage,\n AvatarFallback,\n //\n Root,\n Image,\n Fallback,\n} from './Avatar';\nexport type { AvatarProps, AvatarImageProps, AvatarFallbackProps } from './Avatar';\n"],"names":[],"version":3,"file":"index.d.ts.map"}