UNPKG

@wordpress/editor

Version:
91 lines (90 loc) 2.75 kB
// packages/editor/src/components/collaborators-presence/avatar/component.tsx import clsx from "clsx"; import { colord, extend } from "colord"; import a11yPlugin from "colord/plugins/a11y"; import { Icon, Tooltip } from "@wordpress/components"; import { useMemo } from "@wordpress/element"; import { useImageLoadingStatus } from "./use-image-loading-status.mjs"; import { jsx, jsxs } from "react/jsx-runtime"; extend([a11yPlugin]); var GRAY_900 = "#1e1e1e"; var WHITE = "#fff"; function Avatar({ className, src, name, label, variant, size = "default", borderColor, dimmed = false, statusIndicator, style, ...props }) { const { status: imageStatus, handleLoad, handleError } = useImageLoadingStatus(src); const imageLoaded = imageStatus === "loaded"; const showBadge = variant === "badge" && !!name; const initials = name ? name.split(/\s+/).slice(0, 2).map((word) => word[0]).join("").toUpperCase() : void 0; const nameColor = useMemo( () => borderColor && colord(borderColor).isReadable(GRAY_900, { level: "AA", size: "normal" }) ? GRAY_900 : WHITE, [borderColor] ); const customProperties = { ...style, ...borderColor ? { "--editor-avatar-outline-color": borderColor, "--editor-avatar-name-color": nameColor } : {} }; const avatar = /* @__PURE__ */ jsxs( "div", { className: clsx("editor-avatar", className, { "has-avatar-border-color": !!borderColor, "has-src": imageLoaded, "is-badge": showBadge, "is-small": size === "small", "is-dimmed": dimmed }), style: customProperties, role: name ? "img" : void 0, "aria-label": name || void 0, ...props, children: [ /* @__PURE__ */ jsxs("span", { className: "editor-avatar__image", children: [ src && /* @__PURE__ */ jsx( "img", { src, alt: "", crossOrigin: "anonymous", className: "editor-avatar__img", onLoad: handleLoad, onError: handleError } ), !imageLoaded && initials ] }), dimmed && !!statusIndicator && /* @__PURE__ */ jsx("span", { className: "editor-avatar__status-indicator", children: /* @__PURE__ */ jsx(Icon, { icon: statusIndicator }) }), showBadge && /* @__PURE__ */ jsx("span", { className: "editor-avatar__name", children: label || name }) ] } ); if (name && (!showBadge || label)) { return /* @__PURE__ */ jsx(Tooltip, { text: name, children: avatar }); } return avatar; } var component_default = Avatar; export { component_default as default }; //# sourceMappingURL=component.mjs.map