@hanzogui/avatar 8.3.0 → 8.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Avatar.js +126 -0
- package/dist/cjs/Avatar.js.map +1 -0
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/Avatar.js +119 -0
- package/dist/esm/Avatar.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/package.json +22 -22
- package/src/index.ts +1 -1
- package/types/Avatar.d.ts +21 -21
- package/types/Avatar.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/dist/cjs/Avatar.cjs +0 -160
- package/dist/cjs/Avatar.native.js +0 -184
- package/dist/cjs/Avatar.native.js.map +0 -1
- package/dist/cjs/index.cjs +0 -20
- package/dist/cjs/index.native.js +0 -23
- package/dist/cjs/index.native.js.map +0 -1
- package/dist/esm/Avatar.mjs +0 -119
- package/dist/esm/Avatar.mjs.map +0 -1
- package/dist/esm/Avatar.native.js +0 -140
- package/dist/esm/Avatar.native.js.map +0 -1
- package/dist/esm/index.mjs +0 -2
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js +0 -2
- package/dist/esm/index.native.js.map +0 -1
- package/dist/jsx/Avatar.mjs +0 -119
- package/dist/jsx/Avatar.mjs.map +0 -1
- package/dist/jsx/Avatar.native.js +0 -184
- package/dist/jsx/Avatar.native.js.map +0 -1
- package/dist/jsx/index.js +0 -2
- package/dist/jsx/index.js.map +0 -1
- package/dist/jsx/index.mjs +0 -2
- package/dist/jsx/index.mjs.map +0 -1
- package/dist/jsx/index.native.js +0 -23
- package/dist/jsx/index.native.js.map +0 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AvatarFallback = exports.AvatarImage = exports.Avatar = exports.createAvatarScope = exports.AvatarFrame = exports.AvatarFallbackFrame = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const core_1 = require("@hanzogui/core");
|
|
7
|
+
const create_context_1 = require("@hanzogui/create-context");
|
|
8
|
+
const helpers_1 = require("@hanzogui/helpers");
|
|
9
|
+
const image_1 = require("@hanzogui/image");
|
|
10
|
+
const shapes_1 = require("@hanzogui/shapes");
|
|
11
|
+
const stacks_1 = require("@hanzogui/stacks");
|
|
12
|
+
const React = tslib_1.__importStar(require("react"));
|
|
13
|
+
const AVATAR_NAME = 'Avatar';
|
|
14
|
+
const [createAvatarContext, createAvatarScope] = (0, create_context_1.createContextScope)(AVATAR_NAME);
|
|
15
|
+
exports.createAvatarScope = createAvatarScope;
|
|
16
|
+
const [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);
|
|
17
|
+
/* -------------------------------------------------------------------------------------------------
|
|
18
|
+
* AvatarImage
|
|
19
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
20
|
+
const IMAGE_NAME = 'AvatarImage';
|
|
21
|
+
const AvatarImage = React.forwardRef((props, forwardedRef) => {
|
|
22
|
+
const { __scopeAvatar, src, source, onLoadingStatusChange = () => { }, ...imageProps } = props;
|
|
23
|
+
const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);
|
|
24
|
+
const [status, setStatus] = React.useState('idle');
|
|
25
|
+
// Support both `src` (web) and `source` (RN) props
|
|
26
|
+
const resolvedSrc = src ||
|
|
27
|
+
(source && typeof source === 'object' && 'uri' in source ? source.uri : source);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
// If src is falsy, immediately set error status so fallback renders
|
|
30
|
+
if (!resolvedSrc) {
|
|
31
|
+
setStatus('error');
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
setStatus('idle');
|
|
35
|
+
}
|
|
36
|
+
}, [resolvedSrc]);
|
|
37
|
+
React.useEffect(() => {
|
|
38
|
+
onLoadingStatusChange(status);
|
|
39
|
+
context.onImageLoadingStatusChange(status);
|
|
40
|
+
}, [status]);
|
|
41
|
+
// Don't render Image if src is falsy to avoid Android warning
|
|
42
|
+
if (!resolvedSrc) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return ((0, jsx_runtime_1.jsx)(stacks_1.YStack, { fullscreen: true, zIndex: 1, children: (0, jsx_runtime_1.jsx)(image_1.Image, { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, objectFit: "cover",
|
|
46
|
+
// fill the frame. previously the image was sized to
|
|
47
|
+
// getShapeSize(context.size) — but that resolves a numeric `size`
|
|
48
|
+
// (e.g. <Avatar size={16} />) as a size-TOKEN index (tokens.size[16]),
|
|
49
|
+
// so it got the token-scale value (~224px) instead of 16px, blowing
|
|
50
|
+
// the image far past its frame; object-fit:cover then showed a
|
|
51
|
+
// blurry mis-cropped corner. the frame already owns the size, so the
|
|
52
|
+
// image just fills it — correct for numeric and token sizes alike.
|
|
53
|
+
width: "100%", height: "100%", ...imageProps,
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
ref: forwardedRef,
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
src: resolvedSrc,
|
|
58
|
+
// onLoadStart={() => {
|
|
59
|
+
// // setStatus('loading')
|
|
60
|
+
// }}
|
|
61
|
+
onError: () => {
|
|
62
|
+
setStatus('error');
|
|
63
|
+
}, onLoad: () => {
|
|
64
|
+
setStatus('loaded');
|
|
65
|
+
} }) }));
|
|
66
|
+
});
|
|
67
|
+
exports.AvatarImage = AvatarImage;
|
|
68
|
+
AvatarImage.displayName = IMAGE_NAME;
|
|
69
|
+
/* -------------------------------------------------------------------------------------------------
|
|
70
|
+
* AvatarFallback
|
|
71
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
72
|
+
const FALLBACK_NAME = 'AvatarFallback';
|
|
73
|
+
exports.AvatarFallbackFrame = (0, core_1.styled)(stacks_1.YStack, {
|
|
74
|
+
name: FALLBACK_NAME,
|
|
75
|
+
position: 'absolute',
|
|
76
|
+
fullscreen: true,
|
|
77
|
+
zIndex: 0,
|
|
78
|
+
});
|
|
79
|
+
const AvatarFallback = exports.AvatarFallbackFrame.styleable((props, forwardedRef) => {
|
|
80
|
+
const { __scopeAvatar, delayMs, ...fallbackProps } = props;
|
|
81
|
+
const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);
|
|
82
|
+
const [canRender, setCanRender] = React.useState(delayMs === undefined);
|
|
83
|
+
React.useEffect(() => {
|
|
84
|
+
if (delayMs !== undefined) {
|
|
85
|
+
const timerId = setTimeout(() => setCanRender(true), delayMs);
|
|
86
|
+
return () => clearTimeout(timerId);
|
|
87
|
+
}
|
|
88
|
+
}, [delayMs]);
|
|
89
|
+
return canRender && context.imageLoadingStatus !== 'loaded' ? ((0, jsx_runtime_1.jsx)(exports.AvatarFallbackFrame, { ...fallbackProps, ref: forwardedRef })) : null;
|
|
90
|
+
});
|
|
91
|
+
exports.AvatarFallback = AvatarFallback;
|
|
92
|
+
AvatarFallback.displayName = FALLBACK_NAME;
|
|
93
|
+
/* -------------------------------------------------------------------------------------------------
|
|
94
|
+
* Avatar
|
|
95
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
96
|
+
exports.AvatarFrame = (0, core_1.styled)(shapes_1.Square, {
|
|
97
|
+
name: AVATAR_NAME,
|
|
98
|
+
position: 'relative',
|
|
99
|
+
overflow: 'hidden',
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* @summary A component that displays an image or a fallback icon.
|
|
103
|
+
* @see — Docs https://hanzogui.dev/ui/avatar
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```tsx
|
|
107
|
+
* <Avatar circular size="$10">
|
|
108
|
+
* <Avatar.Image
|
|
109
|
+
* aria-label="Cam"
|
|
110
|
+
* src="https://images.unsplash.com/photo-1548142813-c348350df52b?&w=150&h=150&dpr=2&q=80"
|
|
111
|
+
* />
|
|
112
|
+
* <Avatar.Fallback backgroundColor="$blue10" />
|
|
113
|
+
* </Avatar>
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
const Avatar = (0, helpers_1.withStaticProperties)(React.forwardRef((props, forwardedRef) => {
|
|
117
|
+
const { __scopeAvatar, size = '$true', ...avatarProps } = props;
|
|
118
|
+
const [imageLoadingStatus, setImageLoadingStatus] = React.useState('idle');
|
|
119
|
+
return ((0, jsx_runtime_1.jsx)(AvatarProvider, { size: size, scope: __scopeAvatar, imageLoadingStatus: imageLoadingStatus, onImageLoadingStatusChange: setImageLoadingStatus, children: (0, jsx_runtime_1.jsx)(exports.AvatarFrame, { size: size, ...avatarProps, ref: forwardedRef }) }));
|
|
120
|
+
}), {
|
|
121
|
+
Image: AvatarImage,
|
|
122
|
+
Fallback: AvatarFallback,
|
|
123
|
+
});
|
|
124
|
+
exports.Avatar = Avatar;
|
|
125
|
+
Avatar.displayName = AVATAR_NAME;
|
|
126
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../src/Avatar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "commonjs" }
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { styled } from '@hanzogui/core';
|
|
3
|
+
import { createContextScope } from '@hanzogui/create-context';
|
|
4
|
+
import { withStaticProperties } from '@hanzogui/helpers';
|
|
5
|
+
import { Image } from '@hanzogui/image';
|
|
6
|
+
import { Square } from '@hanzogui/shapes';
|
|
7
|
+
import { YStack } from '@hanzogui/stacks';
|
|
8
|
+
import * as React from 'react';
|
|
9
|
+
const AVATAR_NAME = 'Avatar';
|
|
10
|
+
const [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);
|
|
11
|
+
const [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);
|
|
12
|
+
/* -------------------------------------------------------------------------------------------------
|
|
13
|
+
* AvatarImage
|
|
14
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
15
|
+
const IMAGE_NAME = 'AvatarImage';
|
|
16
|
+
const AvatarImage = React.forwardRef((props, forwardedRef) => {
|
|
17
|
+
const { __scopeAvatar, src, source, onLoadingStatusChange = () => { }, ...imageProps } = props;
|
|
18
|
+
const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);
|
|
19
|
+
const [status, setStatus] = React.useState('idle');
|
|
20
|
+
// Support both `src` (web) and `source` (RN) props
|
|
21
|
+
const resolvedSrc = src ||
|
|
22
|
+
(source && typeof source === 'object' && 'uri' in source ? source.uri : source);
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
// If src is falsy, immediately set error status so fallback renders
|
|
25
|
+
if (!resolvedSrc) {
|
|
26
|
+
setStatus('error');
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
setStatus('idle');
|
|
30
|
+
}
|
|
31
|
+
}, [resolvedSrc]);
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
onLoadingStatusChange(status);
|
|
34
|
+
context.onImageLoadingStatusChange(status);
|
|
35
|
+
}, [status]);
|
|
36
|
+
// Don't render Image if src is falsy to avoid Android warning
|
|
37
|
+
if (!resolvedSrc) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return (_jsx(YStack, { fullscreen: true, zIndex: 1, children: _jsx(Image, { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, objectFit: "cover",
|
|
41
|
+
// fill the frame. previously the image was sized to
|
|
42
|
+
// getShapeSize(context.size) — but that resolves a numeric `size`
|
|
43
|
+
// (e.g. <Avatar size={16} />) as a size-TOKEN index (tokens.size[16]),
|
|
44
|
+
// so it got the token-scale value (~224px) instead of 16px, blowing
|
|
45
|
+
// the image far past its frame; object-fit:cover then showed a
|
|
46
|
+
// blurry mis-cropped corner. the frame already owns the size, so the
|
|
47
|
+
// image just fills it — correct for numeric and token sizes alike.
|
|
48
|
+
width: "100%", height: "100%", ...imageProps,
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
ref: forwardedRef,
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
src: resolvedSrc,
|
|
53
|
+
// onLoadStart={() => {
|
|
54
|
+
// // setStatus('loading')
|
|
55
|
+
// }}
|
|
56
|
+
onError: () => {
|
|
57
|
+
setStatus('error');
|
|
58
|
+
}, onLoad: () => {
|
|
59
|
+
setStatus('loaded');
|
|
60
|
+
} }) }));
|
|
61
|
+
});
|
|
62
|
+
AvatarImage.displayName = IMAGE_NAME;
|
|
63
|
+
/* -------------------------------------------------------------------------------------------------
|
|
64
|
+
* AvatarFallback
|
|
65
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
66
|
+
const FALLBACK_NAME = 'AvatarFallback';
|
|
67
|
+
export const AvatarFallbackFrame = styled(YStack, {
|
|
68
|
+
name: FALLBACK_NAME,
|
|
69
|
+
position: 'absolute',
|
|
70
|
+
fullscreen: true,
|
|
71
|
+
zIndex: 0,
|
|
72
|
+
});
|
|
73
|
+
const AvatarFallback = AvatarFallbackFrame.styleable((props, forwardedRef) => {
|
|
74
|
+
const { __scopeAvatar, delayMs, ...fallbackProps } = props;
|
|
75
|
+
const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);
|
|
76
|
+
const [canRender, setCanRender] = React.useState(delayMs === undefined);
|
|
77
|
+
React.useEffect(() => {
|
|
78
|
+
if (delayMs !== undefined) {
|
|
79
|
+
const timerId = setTimeout(() => setCanRender(true), delayMs);
|
|
80
|
+
return () => clearTimeout(timerId);
|
|
81
|
+
}
|
|
82
|
+
}, [delayMs]);
|
|
83
|
+
return canRender && context.imageLoadingStatus !== 'loaded' ? (_jsx(AvatarFallbackFrame, { ...fallbackProps, ref: forwardedRef })) : null;
|
|
84
|
+
});
|
|
85
|
+
AvatarFallback.displayName = FALLBACK_NAME;
|
|
86
|
+
/* -------------------------------------------------------------------------------------------------
|
|
87
|
+
* Avatar
|
|
88
|
+
* -----------------------------------------------------------------------------------------------*/
|
|
89
|
+
export const AvatarFrame = styled(Square, {
|
|
90
|
+
name: AVATAR_NAME,
|
|
91
|
+
position: 'relative',
|
|
92
|
+
overflow: 'hidden',
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* @summary A component that displays an image or a fallback icon.
|
|
96
|
+
* @see — Docs https://hanzogui.dev/ui/avatar
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```tsx
|
|
100
|
+
* <Avatar circular size="$10">
|
|
101
|
+
* <Avatar.Image
|
|
102
|
+
* aria-label="Cam"
|
|
103
|
+
* src="https://images.unsplash.com/photo-1548142813-c348350df52b?&w=150&h=150&dpr=2&q=80"
|
|
104
|
+
* />
|
|
105
|
+
* <Avatar.Fallback backgroundColor="$blue10" />
|
|
106
|
+
* </Avatar>
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
const Avatar = withStaticProperties(React.forwardRef((props, forwardedRef) => {
|
|
110
|
+
const { __scopeAvatar, size = '$true', ...avatarProps } = props;
|
|
111
|
+
const [imageLoadingStatus, setImageLoadingStatus] = React.useState('idle');
|
|
112
|
+
return (_jsx(AvatarProvider, { size: size, scope: __scopeAvatar, imageLoadingStatus: imageLoadingStatus, onImageLoadingStatusChange: setImageLoadingStatus, children: _jsx(AvatarFrame, { size: size, ...avatarProps, ref: forwardedRef }) }));
|
|
113
|
+
}), {
|
|
114
|
+
Image: AvatarImage,
|
|
115
|
+
Fallback: AvatarFallback,
|
|
116
|
+
});
|
|
117
|
+
Avatar.displayName = AVATAR_NAME;
|
|
118
|
+
export { createAvatarScope, Avatar, AvatarImage, AvatarFallback };
|
|
119
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../src/Avatar.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export * from './Avatar.js';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAc,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzogui/avatar",
|
|
3
|
-
"version": "8.3.
|
|
3
|
+
"version": "8.3.2",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"files": [
|
|
6
6
|
"src",
|
|
@@ -9,47 +9,47 @@
|
|
|
9
9
|
],
|
|
10
10
|
"type": "module",
|
|
11
11
|
"sideEffects": false,
|
|
12
|
-
"main": "dist/cjs",
|
|
13
|
-
"module": "dist/esm",
|
|
12
|
+
"main": "./dist/cjs/index.js",
|
|
13
|
+
"module": "./dist/esm/index.js",
|
|
14
14
|
"types": "./types/index.d.ts",
|
|
15
15
|
"exports": {
|
|
16
16
|
"./package.json": "./package.json",
|
|
17
17
|
".": {
|
|
18
18
|
"types": "./types/index.d.ts",
|
|
19
|
-
"react-native": "./dist/esm/index.
|
|
20
|
-
"browser": "./dist/esm/index.
|
|
21
|
-
"module": "./dist/esm/index.
|
|
22
|
-
"import": "./dist/esm/index.
|
|
23
|
-
"require": "./dist/cjs/index.
|
|
24
|
-
"default": "./dist/esm/index.
|
|
19
|
+
"react-native": "./dist/esm/index.js",
|
|
20
|
+
"browser": "./dist/esm/index.js",
|
|
21
|
+
"module": "./dist/esm/index.js",
|
|
22
|
+
"import": "./dist/esm/index.js",
|
|
23
|
+
"require": "./dist/cjs/index.js",
|
|
24
|
+
"default": "./dist/esm/index.js"
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"publishConfig": {
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
|
-
"build": "hanzogui-build",
|
|
31
|
+
"build": "hanzogui-build --skip-native",
|
|
32
32
|
"watch": "hanzogui-build --watch",
|
|
33
33
|
"clean": "hanzogui-build clean",
|
|
34
34
|
"clean:build": "hanzogui-build clean:build"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@hanzogui/core": "8.3.
|
|
38
|
-
"@hanzogui/create-context": "8.3.
|
|
39
|
-
"@hanzogui/helpers": "8.3.
|
|
40
|
-
"@hanzogui/image": "8.3.
|
|
41
|
-
"@hanzogui/shapes": "8.3.
|
|
42
|
-
"@hanzogui/stacks": "8.3.
|
|
43
|
-
"@hanzogui/text": "8.3.
|
|
44
|
-
"@hanzogui/web": "8.3.
|
|
37
|
+
"@hanzogui/core": "8.3.2",
|
|
38
|
+
"@hanzogui/create-context": "8.3.2",
|
|
39
|
+
"@hanzogui/helpers": "8.3.2",
|
|
40
|
+
"@hanzogui/image": "8.3.2",
|
|
41
|
+
"@hanzogui/shapes": "8.3.2",
|
|
42
|
+
"@hanzogui/stacks": "8.3.2",
|
|
43
|
+
"@hanzogui/text": "8.3.2",
|
|
44
|
+
"@hanzogui/web": "8.3.2"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@hanzogui/build": "8.3.
|
|
48
|
-
"react": "
|
|
49
|
-
"react-native": "0.
|
|
47
|
+
"@hanzogui/build": "8.3.2",
|
|
48
|
+
"react": "19.2.8",
|
|
49
|
+
"react-native": "^0.87.1"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"react": ">=19"
|
|
52
|
+
"react": ">=19.2.8"
|
|
53
53
|
},
|
|
54
54
|
"module:jsx": "dist/jsx",
|
|
55
55
|
"repository": {
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './Avatar'
|
|
1
|
+
export * from './Avatar.tsx'
|
package/types/Avatar.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ type AvatarFallbackProps = GetProps<typeof AvatarFallbackFrame> & AvatarFallback
|
|
|
21
21
|
declare const AvatarFallback: import("@hanzogui/web").GuiComponent<Omit<import("@hanzogui/web").GetFinalProps<import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
22
22
|
elevation?: number | SizeTokens | undefined;
|
|
23
23
|
fullscreen?: boolean | undefined;
|
|
24
|
-
}>, "
|
|
24
|
+
}>, "__scopeAvatar" | "delayMs"> & AvatarFallbackExtraProps & {
|
|
25
25
|
__scopeAvatar?: Scope;
|
|
26
26
|
}, GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps & AvatarFallbackExtraProps & {
|
|
27
27
|
__scopeAvatar?: Scope;
|
|
@@ -30,14 +30,14 @@ declare const AvatarFallback: import("@hanzogui/web").GuiComponent<Omit<import("
|
|
|
30
30
|
fullscreen?: boolean | undefined;
|
|
31
31
|
}, import("@hanzogui/web").StaticConfigPublic>;
|
|
32
32
|
export declare const AvatarFrame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
33
|
+
bordered?: boolean | undefined;
|
|
34
|
+
chromeless?: "all" | boolean | undefined;
|
|
35
|
+
circular?: boolean | undefined;
|
|
36
|
+
elevate?: boolean | undefined;
|
|
33
37
|
elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
38
|
+
fullscreen?: boolean | undefined;
|
|
34
39
|
size?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
35
40
|
transparent?: boolean | undefined;
|
|
36
|
-
fullscreen?: boolean | undefined;
|
|
37
|
-
circular?: boolean | undefined;
|
|
38
|
-
elevate?: boolean | undefined;
|
|
39
|
-
bordered?: boolean | undefined;
|
|
40
|
-
chromeless?: boolean | "all" | undefined;
|
|
41
41
|
}, import("@hanzogui/web").StaticConfigPublic & {
|
|
42
42
|
memo: true;
|
|
43
43
|
}>;
|
|
@@ -57,33 +57,33 @@ type AvatarProps = GetProps<typeof AvatarFrame>;
|
|
|
57
57
|
* </Avatar>
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
|
-
declare const Avatar: React.ForwardRefExoticComponent<Omit<import("@hanzogui/core").RNGuiViewNonStyleProps, "
|
|
60
|
+
declare const Avatar: React.ForwardRefExoticComponent<Omit<import("@hanzogui/core").RNGuiViewNonStyleProps, "bordered" | "chromeless" | "circular" | "elevate" | "elevation" | "fullscreen" | "size" | "transparent" | keyof import("@hanzogui/web").StackStyleBase> & import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase> & {
|
|
61
|
+
bordered?: boolean | undefined;
|
|
62
|
+
chromeless?: "all" | boolean | undefined;
|
|
63
|
+
circular?: boolean | undefined;
|
|
64
|
+
elevate?: boolean | undefined;
|
|
61
65
|
elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
66
|
+
fullscreen?: boolean | undefined;
|
|
62
67
|
size?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
63
68
|
transparent?: boolean | undefined;
|
|
64
|
-
|
|
69
|
+
} & import("@hanzogui/web").WithShorthands<import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase>> & import("@hanzogui/web").WithPseudoProps<import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase> & {
|
|
70
|
+
bordered?: boolean | undefined;
|
|
71
|
+
chromeless?: "all" | boolean | undefined;
|
|
65
72
|
circular?: boolean | undefined;
|
|
66
73
|
elevate?: boolean | undefined;
|
|
67
|
-
bordered?: boolean | undefined;
|
|
68
|
-
chromeless?: boolean | "all" | undefined;
|
|
69
|
-
} & import("@hanzogui/web").WithShorthands<import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase>> & import("@hanzogui/web").WithPseudoProps<import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase> & {
|
|
70
74
|
elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
75
|
+
fullscreen?: boolean | undefined;
|
|
71
76
|
size?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
72
77
|
transparent?: boolean | undefined;
|
|
73
|
-
|
|
78
|
+
} & import("@hanzogui/web").WithShorthands<import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase>>> & import("@hanzogui/web").WithMediaProps<import("@hanzogui/web").WithThemeShorthandsAndPseudos<import("@hanzogui/web").StackStyleBase, {
|
|
79
|
+
bordered?: boolean | undefined;
|
|
80
|
+
chromeless?: "all" | boolean | undefined;
|
|
74
81
|
circular?: boolean | undefined;
|
|
75
82
|
elevate?: boolean | undefined;
|
|
76
|
-
bordered?: boolean | undefined;
|
|
77
|
-
chromeless?: boolean | "all" | undefined;
|
|
78
|
-
} & import("@hanzogui/web").WithShorthands<import("@hanzogui/web").WithThemeValues<import("@hanzogui/web").StackStyleBase>>> & import("@hanzogui/web").WithMediaProps<import("@hanzogui/web").WithThemeShorthandsAndPseudos<import("@hanzogui/web").StackStyleBase, {
|
|
79
83
|
elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
84
|
+
fullscreen?: boolean | undefined;
|
|
80
85
|
size?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
81
86
|
transparent?: boolean | undefined;
|
|
82
|
-
fullscreen?: boolean | undefined;
|
|
83
|
-
circular?: boolean | undefined;
|
|
84
|
-
elevate?: boolean | undefined;
|
|
85
|
-
bordered?: boolean | undefined;
|
|
86
|
-
chromeless?: boolean | "all" | undefined;
|
|
87
87
|
}>> & React.RefAttributes<GuiElement>> & {
|
|
88
88
|
Image: React.ForwardRefExoticComponent<Partial<ImageProps> & {
|
|
89
89
|
onLoadingStatusChange?: (status: ImageLoadingStatus) => void;
|
|
@@ -91,7 +91,7 @@ declare const Avatar: React.ForwardRefExoticComponent<Omit<import("@hanzogui/cor
|
|
|
91
91
|
Fallback: import("@hanzogui/web").GuiComponent<Omit<import("@hanzogui/web").GetFinalProps<import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
92
92
|
elevation?: number | SizeTokens | undefined;
|
|
93
93
|
fullscreen?: boolean | undefined;
|
|
94
|
-
}>, "
|
|
94
|
+
}>, "__scopeAvatar" | "delayMs"> & AvatarFallbackExtraProps & {
|
|
95
95
|
__scopeAvatar?: Scope;
|
|
96
96
|
}, GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps & AvatarFallbackExtraProps & {
|
|
97
97
|
__scopeAvatar?: Scope;
|
package/types/Avatar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,QAAA,MAA4B,iBAAiB,gDAAmC,CAAA;AAEhF,KAAK,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAiBjE,KAAK,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG;IAC5C,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAC7D,CAAA;AAED,QAAA,MAAM,WAAW;4BAHS,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI;oCA2E7D,CAAA;AAUD,eAAO,MAAM,mBAAmB;;;8CAK9B,CAAA;AAEF,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AACD,KAAK,mBAAmB,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,GAAG,wBAAwB,CAAA;AAE1F,QAAA,MAAM,cAAc;;;;oBAtHwB,KAAK
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,QAAA,MAA4B,iBAAiB,gDAAmC,CAAA;AAEhF,KAAK,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAiBjE,KAAK,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG;IAC5C,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAC7D,CAAA;AAED,QAAA,MAAM,WAAW;4BAHS,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI;oCA2E7D,CAAA;AAUD,eAAO,MAAM,mBAAmB;;;8CAK9B,CAAA;AAEF,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AACD,KAAK,mBAAmB,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,GAAG,wBAAwB,CAAA;AAE1F,QAAA,MAAM,cAAc;;;;oBAtHwB,KAAK;;;;;;8CAuI/C,CAAA;AAQF,eAAO,MAAM,WAAW;;;;;;;;;;;EAItB,CAAA;AAEF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAjJc,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI;;;;;;wBArBlB,KAAK;;;;;;;CA4LhD,CAAA;AAID,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAA"}
|
package/types/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './Avatar';
|
|
1
|
+
export * from './Avatar.tsx';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
|
package/dist/cjs/Avatar.cjs
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all) __defProp(target, name, {
|
|
9
|
-
get: all[name],
|
|
10
|
-
enumerable: true
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
var __copyProps = (to, from, except, desc) => {
|
|
14
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
-
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
-
get: () => from[key],
|
|
17
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
return to;
|
|
21
|
-
};
|
|
22
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
28
|
-
value: mod,
|
|
29
|
-
enumerable: true
|
|
30
|
-
}) : target, mod));
|
|
31
|
-
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
32
|
-
value: true
|
|
33
|
-
}), mod);
|
|
34
|
-
var Avatar_exports = {};
|
|
35
|
-
__export(Avatar_exports, {
|
|
36
|
-
Avatar: () => Avatar,
|
|
37
|
-
AvatarFallback: () => AvatarFallback,
|
|
38
|
-
AvatarFallbackFrame: () => AvatarFallbackFrame,
|
|
39
|
-
AvatarFrame: () => AvatarFrame,
|
|
40
|
-
AvatarImage: () => AvatarImage,
|
|
41
|
-
createAvatarScope: () => createAvatarScope
|
|
42
|
-
});
|
|
43
|
-
module.exports = __toCommonJS(Avatar_exports);
|
|
44
|
-
var import_core = require("@hanzogui/core");
|
|
45
|
-
var import_create_context = require("@hanzogui/create-context");
|
|
46
|
-
var import_helpers = require("@hanzogui/helpers");
|
|
47
|
-
var import_image = require("@hanzogui/image");
|
|
48
|
-
var import_shapes = require("@hanzogui/shapes");
|
|
49
|
-
var import_stacks = require("@hanzogui/stacks");
|
|
50
|
-
var React = __toESM(require("react"), 1);
|
|
51
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
52
|
-
const AVATAR_NAME = "Avatar";
|
|
53
|
-
const [createAvatarContext, createAvatarScope] = (0, import_create_context.createContextScope)(AVATAR_NAME);
|
|
54
|
-
const [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);
|
|
55
|
-
const IMAGE_NAME = "AvatarImage";
|
|
56
|
-
const AvatarImage = React.forwardRef((props, forwardedRef) => {
|
|
57
|
-
const {
|
|
58
|
-
__scopeAvatar,
|
|
59
|
-
src,
|
|
60
|
-
source,
|
|
61
|
-
onLoadingStatusChange = () => {},
|
|
62
|
-
...imageProps
|
|
63
|
-
} = props;
|
|
64
|
-
const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);
|
|
65
|
-
const [status, setStatus] = React.useState("idle");
|
|
66
|
-
const resolvedSrc = src || (source && typeof source === "object" && "uri" in source ? source.uri : source);
|
|
67
|
-
React.useEffect(() => {
|
|
68
|
-
if (!resolvedSrc) {
|
|
69
|
-
setStatus("error");
|
|
70
|
-
} else {
|
|
71
|
-
setStatus("idle");
|
|
72
|
-
}
|
|
73
|
-
}, [resolvedSrc]);
|
|
74
|
-
React.useEffect(() => {
|
|
75
|
-
onLoadingStatusChange(status);
|
|
76
|
-
context.onImageLoadingStatusChange(status);
|
|
77
|
-
}, [status]);
|
|
78
|
-
if (!resolvedSrc) {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
|
|
82
|
-
fullscreen: true,
|
|
83
|
-
zIndex: 1,
|
|
84
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_image.Image, {
|
|
85
|
-
position: "absolute",
|
|
86
|
-
top: 0,
|
|
87
|
-
left: 0,
|
|
88
|
-
right: 0,
|
|
89
|
-
bottom: 0,
|
|
90
|
-
objectFit: "cover",
|
|
91
|
-
width: "100%",
|
|
92
|
-
height: "100%",
|
|
93
|
-
...imageProps,
|
|
94
|
-
ref: forwardedRef,
|
|
95
|
-
src: resolvedSrc,
|
|
96
|
-
onError: () => {
|
|
97
|
-
setStatus("error");
|
|
98
|
-
},
|
|
99
|
-
onLoad: () => {
|
|
100
|
-
setStatus("loaded");
|
|
101
|
-
}
|
|
102
|
-
})
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
AvatarImage.displayName = IMAGE_NAME;
|
|
106
|
-
const FALLBACK_NAME = "AvatarFallback";
|
|
107
|
-
const AvatarFallbackFrame = (0, import_core.styled)(import_stacks.YStack, {
|
|
108
|
-
name: FALLBACK_NAME,
|
|
109
|
-
position: "absolute",
|
|
110
|
-
fullscreen: true,
|
|
111
|
-
zIndex: 0
|
|
112
|
-
});
|
|
113
|
-
const AvatarFallback = AvatarFallbackFrame.styleable((props, forwardedRef) => {
|
|
114
|
-
const {
|
|
115
|
-
__scopeAvatar,
|
|
116
|
-
delayMs,
|
|
117
|
-
...fallbackProps
|
|
118
|
-
} = props;
|
|
119
|
-
const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);
|
|
120
|
-
const [canRender, setCanRender] = React.useState(delayMs === void 0);
|
|
121
|
-
React.useEffect(() => {
|
|
122
|
-
if (delayMs !== void 0) {
|
|
123
|
-
const timerId = setTimeout(() => setCanRender(true), delayMs);
|
|
124
|
-
return () => clearTimeout(timerId);
|
|
125
|
-
}
|
|
126
|
-
}, [delayMs]);
|
|
127
|
-
return canRender && context.imageLoadingStatus !== "loaded" ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(AvatarFallbackFrame, {
|
|
128
|
-
...fallbackProps,
|
|
129
|
-
ref: forwardedRef
|
|
130
|
-
}) : null;
|
|
131
|
-
});
|
|
132
|
-
AvatarFallback.displayName = FALLBACK_NAME;
|
|
133
|
-
const AvatarFrame = (0, import_core.styled)(import_shapes.Square, {
|
|
134
|
-
name: AVATAR_NAME,
|
|
135
|
-
position: "relative",
|
|
136
|
-
overflow: "hidden"
|
|
137
|
-
});
|
|
138
|
-
const Avatar = (0, import_helpers.withStaticProperties)(React.forwardRef((props, forwardedRef) => {
|
|
139
|
-
const {
|
|
140
|
-
__scopeAvatar,
|
|
141
|
-
size = "$true",
|
|
142
|
-
...avatarProps
|
|
143
|
-
} = props;
|
|
144
|
-
const [imageLoadingStatus, setImageLoadingStatus] = React.useState("idle");
|
|
145
|
-
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(AvatarProvider, {
|
|
146
|
-
size,
|
|
147
|
-
scope: __scopeAvatar,
|
|
148
|
-
imageLoadingStatus,
|
|
149
|
-
onImageLoadingStatusChange: setImageLoadingStatus,
|
|
150
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(AvatarFrame, {
|
|
151
|
-
size,
|
|
152
|
-
...avatarProps,
|
|
153
|
-
ref: forwardedRef
|
|
154
|
-
})
|
|
155
|
-
});
|
|
156
|
-
}), {
|
|
157
|
-
Image: AvatarImage,
|
|
158
|
-
Fallback: AvatarFallback
|
|
159
|
-
});
|
|
160
|
-
Avatar.displayName = AVATAR_NAME;
|