@a-type/ui 2.1.14 → 2.1.15
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/components/avatar/Avatar.d.ts +3 -2
- package/dist/cjs/components/avatar/Avatar.js +10 -5
- package/dist/cjs/components/avatar/Avatar.js.map +1 -1
- package/dist/esm/components/avatar/Avatar.d.ts +3 -2
- package/dist/esm/components/avatar/Avatar.js +10 -5
- package/dist/esm/components/avatar/Avatar.js.map +1 -1
- package/package.json +1 -1
- package/src/components/avatar/Avatar.tsx +19 -4
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { CSSProperties } from 'react';
|
|
1
|
+
import { CSSProperties, HTMLProps } from 'react';
|
|
2
2
|
export interface AvatarProps {
|
|
3
3
|
className?: string;
|
|
4
4
|
popIn?: boolean;
|
|
5
5
|
style?: CSSProperties;
|
|
6
6
|
imageSrc?: string | null;
|
|
7
7
|
name?: string;
|
|
8
|
+
crossOrigin?: HTMLProps<HTMLImageElement>['crossOrigin'];
|
|
8
9
|
}
|
|
9
|
-
export declare function Avatar({ className, popIn, imageSrc, name, ...rest }: AvatarProps): import("react/jsx-runtime.js").JSX.Element;
|
|
10
|
+
export declare function Avatar({ className, popIn, imageSrc, name, crossOrigin, ...rest }: AvatarProps): import("react/jsx-runtime.js").JSX.Element;
|
|
@@ -18,16 +18,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.Avatar = Avatar;
|
|
19
19
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
20
20
|
const clsx_1 = __importDefault(require("clsx"));
|
|
21
|
+
const react_1 = require("react");
|
|
21
22
|
const index_js_1 = require("../icon/index.js");
|
|
22
23
|
function Avatar(_a) {
|
|
23
|
-
var { className, popIn = false, imageSrc, name } = _a, rest = __rest(_a, ["className", "popIn", "imageSrc", "name"]);
|
|
24
|
+
var { className, popIn = false, imageSrc, name, crossOrigin } = _a, rest = __rest(_a, ["className", "popIn", "imageSrc", "name", "crossOrigin"]);
|
|
24
25
|
const empty = !name && !imageSrc;
|
|
25
26
|
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ "data-pop": popIn, className: (0, clsx_1.default)('layer-components:flex layer-components:items-center layer-components:justify-center layer-components:rounded-lg layer-components:border-default layer-components:overflow-hidden layer-components:w-24px layer-components:aspect-1 layer-components:select-none layer-components:relative layer-components:bg-white layer-components:flex-shrink-0', popIn &&
|
|
26
|
-
'layer-variants:animate-pop-in-from-half layer-variants:animate-ease-springy layer-variants:animate-duration-200', empty && 'layer-components(border-dashed bg-gray-light)', className) }, rest, { children: [!empty && (0, jsx_runtime_1.jsx)(AvatarContent, { name: name, imageSrc: imageSrc }), empty && (0, jsx_runtime_1.jsx)(index_js_1.Icon, { name: "profile" })] })));
|
|
27
|
+
'layer-variants:animate-pop-in-from-half layer-variants:animate-ease-springy layer-variants:animate-duration-200', empty && 'layer-components(border-dashed bg-gray-light)', className) }, rest, { children: [!empty && ((0, jsx_runtime_1.jsx)(AvatarContent, { name: name, imageSrc: imageSrc, crossOrigin: crossOrigin })), empty && (0, jsx_runtime_1.jsx)(index_js_1.Icon, { name: "profile" })] })));
|
|
27
28
|
}
|
|
28
|
-
function AvatarContent({ name, imageSrc, }) {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
function AvatarContent({ name, imageSrc, crossOrigin = 'anonymous', }) {
|
|
30
|
+
const [fallback, setFallback] = (0, react_1.useState)(false);
|
|
31
|
+
const triggerFallback = () => {
|
|
32
|
+
setFallback(true);
|
|
33
|
+
};
|
|
34
|
+
if (imageSrc && !fallback) {
|
|
35
|
+
return ((0, jsx_runtime_1.jsx)("img", { className: "w-full h-full object-cover", referrerPolicy: "no-referrer", src: imageSrc, alt: `${name !== null && name !== void 0 ? name : 'user'}'s profile picture`, crossOrigin: crossOrigin, onError: triggerFallback }));
|
|
31
36
|
}
|
|
32
37
|
return ((0, jsx_runtime_1.jsx)("div", { className: "color-black items-center justify-center flex text-sm font-bold", children: (name === null || name === void 0 ? void 0 : name.charAt(0)) || '?' }));
|
|
33
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../../src/components/avatar/Avatar.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../../src/components/avatar/Avatar.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAaA,wBA+BC;;AA5CD,gDAA8B;AAC9B,iCAA2D;AAC3D,+CAAwC;AAWxC,SAAgB,MAAM,CAAC,EAOT;QAPS,EACtB,SAAS,EACT,KAAK,GAAG,KAAK,EACb,QAAQ,EACR,IAAI,EACJ,WAAW,OAEE,EADV,IAAI,cANe,yDAOtB,CADO;IAEP,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;IACjC,OAAO,CACN,2DACW,KAAK,EACf,SAAS,EAAE,IAAA,cAAU,EACpB,2JAA2J,EAC3J,KAAK;YACJ,qFAAqF,EACtF,KAAK,IAAI,+CAA+C,EACxD,SAAS,CACT,IACG,IAAI,eAEP,CAAC,KAAK,IAAI,CACV,uBAAC,aAAa,IACb,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACvB,CACF,EACA,KAAK,IAAI,uBAAC,eAAI,IAAC,IAAI,EAAC,SAAS,GAAG,KAC5B,CACN,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EACtB,IAAI,EACJ,QAAQ,EACR,WAAW,GAAG,WAAW,GAKzB;IACA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,GAAG,EAAE;QAC5B,WAAW,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,IAAI,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CACN,gCACC,SAAS,EAAC,4BAA4B,EACtC,cAAc,EAAC,aAAa,EAC5B,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,MAAM,oBAAoB,EAC1C,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,eAAe,GACvB,CACF,CAAC;IACH,CAAC;IACD,OAAO,CACN,gCAAK,SAAS,EAAC,gEAAgE,YAC7E,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,CAAC,CAAC,KAAI,GAAG,GAClB,CACN,CAAC;AACH,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { CSSProperties } from 'react';
|
|
1
|
+
import { CSSProperties, HTMLProps } from 'react';
|
|
2
2
|
export interface AvatarProps {
|
|
3
3
|
className?: string;
|
|
4
4
|
popIn?: boolean;
|
|
5
5
|
style?: CSSProperties;
|
|
6
6
|
imageSrc?: string | null;
|
|
7
7
|
name?: string;
|
|
8
|
+
crossOrigin?: HTMLProps<HTMLImageElement>['crossOrigin'];
|
|
8
9
|
}
|
|
9
|
-
export declare function Avatar({ className, popIn, imageSrc, name, ...rest }: AvatarProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function Avatar({ className, popIn, imageSrc, name, crossOrigin, ...rest }: AvatarProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -12,16 +12,21 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
};
|
|
13
13
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
14
|
import classNames from 'clsx';
|
|
15
|
+
import { useState } from 'react';
|
|
15
16
|
import { Icon } from '../icon/index.js';
|
|
16
17
|
export function Avatar(_a) {
|
|
17
|
-
var { className, popIn = false, imageSrc, name } = _a, rest = __rest(_a, ["className", "popIn", "imageSrc", "name"]);
|
|
18
|
+
var { className, popIn = false, imageSrc, name, crossOrigin } = _a, rest = __rest(_a, ["className", "popIn", "imageSrc", "name", "crossOrigin"]);
|
|
18
19
|
const empty = !name && !imageSrc;
|
|
19
20
|
return (_jsxs("div", Object.assign({ "data-pop": popIn, className: classNames('layer-components:flex layer-components:items-center layer-components:justify-center layer-components:rounded-lg layer-components:border-default layer-components:overflow-hidden layer-components:w-24px layer-components:aspect-1 layer-components:select-none layer-components:relative layer-components:bg-white layer-components:flex-shrink-0', popIn &&
|
|
20
|
-
'layer-variants:animate-pop-in-from-half layer-variants:animate-ease-springy layer-variants:animate-duration-200', empty && 'layer-components(border-dashed bg-gray-light)', className) }, rest, { children: [!empty && _jsx(AvatarContent, { name: name, imageSrc: imageSrc }), empty && _jsx(Icon, { name: "profile" })] })));
|
|
21
|
+
'layer-variants:animate-pop-in-from-half layer-variants:animate-ease-springy layer-variants:animate-duration-200', empty && 'layer-components(border-dashed bg-gray-light)', className) }, rest, { children: [!empty && (_jsx(AvatarContent, { name: name, imageSrc: imageSrc, crossOrigin: crossOrigin })), empty && _jsx(Icon, { name: "profile" })] })));
|
|
21
22
|
}
|
|
22
|
-
function AvatarContent({ name, imageSrc, }) {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
function AvatarContent({ name, imageSrc, crossOrigin = 'anonymous', }) {
|
|
24
|
+
const [fallback, setFallback] = useState(false);
|
|
25
|
+
const triggerFallback = () => {
|
|
26
|
+
setFallback(true);
|
|
27
|
+
};
|
|
28
|
+
if (imageSrc && !fallback) {
|
|
29
|
+
return (_jsx("img", { className: "w-full h-full object-cover", referrerPolicy: "no-referrer", src: imageSrc, alt: `${name !== null && name !== void 0 ? name : 'user'}'s profile picture`, crossOrigin: crossOrigin, onError: triggerFallback }));
|
|
25
30
|
}
|
|
26
31
|
return (_jsx("div", { className: "color-black items-center justify-center flex text-sm font-bold", children: (name === null || name === void 0 ? void 0 : name.charAt(0)) || '?' }));
|
|
27
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../../src/components/avatar/Avatar.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,UAAU,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../../src/components/avatar/Avatar.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,UAAU,MAAM,MAAM,CAAC;AAC9B,OAAO,EAA4B,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAWxC,MAAM,UAAU,MAAM,CAAC,EAOT;QAPS,EACtB,SAAS,EACT,KAAK,GAAG,KAAK,EACb,QAAQ,EACR,IAAI,EACJ,WAAW,OAEE,EADV,IAAI,cANe,yDAOtB,CADO;IAEP,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;IACjC,OAAO,CACN,yCACW,KAAK,EACf,SAAS,EAAE,UAAU,CACpB,2JAA2J,EAC3J,KAAK;YACJ,qFAAqF,EACtF,KAAK,IAAI,+CAA+C,EACxD,SAAS,CACT,IACG,IAAI,eAEP,CAAC,KAAK,IAAI,CACV,KAAC,aAAa,IACb,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACvB,CACF,EACA,KAAK,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,GAAG,KAC5B,CACN,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EACtB,IAAI,EACJ,QAAQ,EACR,WAAW,GAAG,WAAW,GAKzB;IACA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,GAAG,EAAE;QAC5B,WAAW,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,IAAI,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CACN,cACC,SAAS,EAAC,4BAA4B,EACtC,cAAc,EAAC,aAAa,EAC5B,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,MAAM,oBAAoB,EAC1C,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,eAAe,GACvB,CACF,CAAC;IACH,CAAC;IACD,OAAO,CACN,cAAK,SAAS,EAAC,gEAAgE,YAC7E,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,CAAC,CAAC,KAAI,GAAG,GAClB,CACN,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import classNames from 'clsx';
|
|
2
|
-
import { CSSProperties } from 'react';
|
|
2
|
+
import { CSSProperties, HTMLProps, useState } from 'react';
|
|
3
3
|
import { Icon } from '../icon/index.js';
|
|
4
4
|
|
|
5
5
|
export interface AvatarProps {
|
|
@@ -8,6 +8,7 @@ export interface AvatarProps {
|
|
|
8
8
|
style?: CSSProperties;
|
|
9
9
|
imageSrc?: string | null;
|
|
10
10
|
name?: string;
|
|
11
|
+
crossOrigin?: HTMLProps<HTMLImageElement>['crossOrigin'];
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
export function Avatar({
|
|
@@ -15,6 +16,7 @@ export function Avatar({
|
|
|
15
16
|
popIn = false,
|
|
16
17
|
imageSrc,
|
|
17
18
|
name,
|
|
19
|
+
crossOrigin,
|
|
18
20
|
...rest
|
|
19
21
|
}: AvatarProps) {
|
|
20
22
|
const empty = !name && !imageSrc;
|
|
@@ -30,7 +32,13 @@ export function Avatar({
|
|
|
30
32
|
)}
|
|
31
33
|
{...rest}
|
|
32
34
|
>
|
|
33
|
-
{!empty &&
|
|
35
|
+
{!empty && (
|
|
36
|
+
<AvatarContent
|
|
37
|
+
name={name}
|
|
38
|
+
imageSrc={imageSrc}
|
|
39
|
+
crossOrigin={crossOrigin}
|
|
40
|
+
/>
|
|
41
|
+
)}
|
|
34
42
|
{empty && <Icon name="profile" />}
|
|
35
43
|
</div>
|
|
36
44
|
);
|
|
@@ -39,18 +47,25 @@ export function Avatar({
|
|
|
39
47
|
function AvatarContent({
|
|
40
48
|
name,
|
|
41
49
|
imageSrc,
|
|
50
|
+
crossOrigin = 'anonymous',
|
|
42
51
|
}: {
|
|
43
52
|
name?: string;
|
|
44
53
|
imageSrc?: string | null;
|
|
54
|
+
crossOrigin?: HTMLProps<HTMLImageElement>['crossOrigin'];
|
|
45
55
|
}) {
|
|
46
|
-
|
|
56
|
+
const [fallback, setFallback] = useState(false);
|
|
57
|
+
const triggerFallback = () => {
|
|
58
|
+
setFallback(true);
|
|
59
|
+
};
|
|
60
|
+
if (imageSrc && !fallback) {
|
|
47
61
|
return (
|
|
48
62
|
<img
|
|
49
63
|
className="w-full h-full object-cover"
|
|
50
64
|
referrerPolicy="no-referrer"
|
|
51
|
-
crossOrigin="anonymous"
|
|
52
65
|
src={imageSrc}
|
|
53
66
|
alt={`${name ?? 'user'}'s profile picture`}
|
|
67
|
+
crossOrigin={crossOrigin}
|
|
68
|
+
onError={triggerFallback}
|
|
54
69
|
/>
|
|
55
70
|
);
|
|
56
71
|
}
|