@doscientos/ui 0.1.9 → 0.1.10
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.cjs +21 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +30 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -439,15 +439,31 @@ function AppShellContent({
|
|
|
439
439
|
var import_react4 = require("react");
|
|
440
440
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
441
441
|
var sizes = { xs: "size-5 text-[10px]", sm: "size-6 text-xs", default: "size-8 text-sm", lg: "size-10 text-base" };
|
|
442
|
-
|
|
443
|
-
|
|
442
|
+
var AvatarContext = (0, import_react4.createContext)(null);
|
|
443
|
+
function Avatar({ className, size = "default", children, ...props }) {
|
|
444
|
+
const [status, setStatus] = (0, import_react4.useState)("idle");
|
|
445
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground", sizes[size], className), ...props, children }) });
|
|
444
446
|
}
|
|
445
|
-
function AvatarImage({ className, ...props }) {
|
|
447
|
+
function AvatarImage({ className, src, onError, onLoad, ...props }) {
|
|
448
|
+
const avatar = (0, import_react4.useContext)(AvatarContext);
|
|
446
449
|
const [failed, setFailed] = (0, import_react4.useState)(false);
|
|
447
|
-
|
|
448
|
-
|
|
450
|
+
(0, import_react4.useEffect)(() => {
|
|
451
|
+
setFailed(false);
|
|
452
|
+
avatar?.setStatus(src ? "loading" : "idle");
|
|
453
|
+
}, [avatar?.setStatus, src]);
|
|
454
|
+
if (failed || avatar?.status === "error") return null;
|
|
455
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { "data-slot": "avatar-image", src, className: cn("aspect-square size-full object-cover", className), onLoad: (event) => {
|
|
456
|
+
avatar?.setStatus("loaded");
|
|
457
|
+
onLoad?.(event);
|
|
458
|
+
}, onError: (event) => {
|
|
459
|
+
setFailed(true);
|
|
460
|
+
avatar?.setStatus("error");
|
|
461
|
+
onError?.(event);
|
|
462
|
+
}, ...props });
|
|
449
463
|
}
|
|
450
464
|
function AvatarFallback({ className, ...props }) {
|
|
465
|
+
const avatar = (0, import_react4.useContext)(AvatarContext);
|
|
466
|
+
if (avatar?.status === "loaded") return null;
|
|
451
467
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-slot": "avatar-fallback", className: cn("flex size-full items-center justify-center font-medium", className), ...props });
|
|
452
468
|
}
|
|
453
469
|
function AvatarBadge({ className, ...props }) {
|