@vertisanpro/flowbite-react
Version:
Non-Official React components built for Flowbite and Tailwind CSS
28 lines (27 loc) • 2.7 kB
JavaScript
import { twMerge } from '@vertisanpro/tailwind-merge';
import React from 'react';
import { mergeDeep } from '../../helpers/merge-deep';
import { getTheme } from '../../theme-store';
import { AvatarGroup } from './AvatarGroup';
import { AvatarGroupCounter } from './AvatarGroupCounter';
const AvatarComponent = ({ alt = '', bordered = false, children, className, color = 'light', img, placeholderInitials = '', rounded = false, size = 'md', stacked = false, status, statusPosition = 'top-left', theme: customTheme = {}, ...props }) => {
const theme = mergeDeep(getTheme().avatar, customTheme);
const imgClassName = twMerge(theme.root.img.base, bordered && theme.root.bordered, bordered && theme.root.color[color], rounded && theme.root.rounded, stacked && theme.root.stacked, theme.root.img.on, theme.root.size[size]);
const imgProps = {
className: twMerge(imgClassName, theme.root.img.on),
'data-testid': 'flowbite-avatar-img',
};
return (React.createElement("div", { className: twMerge(theme.root.base, className), "data-testid": "flowbite-avatar", ...props },
React.createElement("div", { className: "relative" },
img ? (typeof img === 'string' ? (React.createElement("img", { alt: alt, src: img, ...imgProps })) : (img({ alt, ...imgProps }))) : placeholderInitials ? (React.createElement("div", { className: twMerge(theme.root.img.off, theme.root.initials.base, stacked && theme.root.stacked, bordered && theme.root.bordered, bordered && theme.root.color[color], theme.root.size[size], rounded && theme.root.rounded), "data-testid": "flowbite-avatar-initials-placeholder" },
React.createElement("span", { className: twMerge(theme.root.initials.text), "data-testid": "flowbite-avatar-initials-placeholder-text" }, placeholderInitials))) : (React.createElement("div", { className: twMerge(imgClassName, theme.root.img.off), "data-testid": "flowbite-avatar-img" },
React.createElement("svg", { className: theme.root.img.placeholder, fill: "currentColor", viewBox: "0 0 20 20", xmlns: "http://www.w3.org/2000/svg" },
React.createElement("path", { fillRule: "evenodd", d: "M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z", clipRule: "evenodd" })))),
status && (React.createElement("span", { "data-testid": "flowbite-avatar-status", className: twMerge(theme.root.status.base, theme.root.status[status], theme.root.statusPosition[statusPosition]) }))),
children && React.createElement("div", null, children)));
};
AvatarComponent.displayName = 'Avatar';
export const Avatar = Object.assign(AvatarComponent, {
Group: AvatarGroup,
Counter: AvatarGroupCounter,
});