@payfit/unity-components
Version:
232 lines (231 loc) • 10.6 kB
TypeScript
import { VariantProps } from '@payfit/unity-themes';
import { PropsWithChildren } from 'react';
import * as React from 'react';
declare const avatarRoot: import('tailwind-variants').TVReturnType<{} | {
size: {
xs: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
sm: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
md: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
lg: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
xl: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
};
variant: {
circle: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
square: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
};
color: {
teal: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
plum: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
purple: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
orange: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
neutral: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
warning: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
success: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
info: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
danger: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
promo: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
primary: import('tailwind-variants').ClassValue | {
base?: import('tailwind-variants').ClassValue;
};
};
}, undefined, "uy:inline-block uy:relative uy:shrink-0", {
size: {
xs: "uy:size-200";
sm: "uy:size-300";
md: "uy:size-400";
lg: "uy:size-500";
xl: "uy:size-[56px]";
};
variant: {
circle: "uy:rounded-circle";
square: "uy:aspect-square";
};
color: {
teal: "uy:bg-surface-decorative-teal-lowest uy:text-content-decorative-teal-high";
plum: "uy:bg-surface-decorative-plum-lowest uy:text-content-decorative-plum";
purple: "uy:bg-surface-decorative-purple-lowest uy:text-content-decorative-purple";
orange: "uy:bg-surface-decorative-orange-lowest uy:text-content-decorative-orange";
neutral: "uy:bg-surface-neutral-lowest uy:text-content-neutral";
warning: "uy:bg-surface-warning-low uy:text-content-warning-high";
success: "uy:bg-surface-success-low uy:text-content-success-high";
info: "uy:bg-surface-info-low uy:text-content-info-high";
danger: "uy:bg-surface-danger-low uy:text-content-danger-high";
promo: "uy:bg-surface-promo-low uy:text-content-promo-high";
primary: "uy:bg-surface-primary-lowest uy:text-content-primary-high";
};
}, undefined, import('tailwind-variants').TVReturnType<{
size: {
xs: "uy:size-200";
sm: "uy:size-300";
md: "uy:size-400";
lg: "uy:size-500";
xl: "uy:size-[56px]";
};
variant: {
circle: "uy:rounded-circle";
square: "uy:aspect-square";
};
color: {
teal: "uy:bg-surface-decorative-teal-lowest uy:text-content-decorative-teal-high";
plum: "uy:bg-surface-decorative-plum-lowest uy:text-content-decorative-plum";
purple: "uy:bg-surface-decorative-purple-lowest uy:text-content-decorative-purple";
orange: "uy:bg-surface-decorative-orange-lowest uy:text-content-decorative-orange";
neutral: "uy:bg-surface-neutral-lowest uy:text-content-neutral";
warning: "uy:bg-surface-warning-low uy:text-content-warning-high";
success: "uy:bg-surface-success-low uy:text-content-success-high";
info: "uy:bg-surface-info-low uy:text-content-info-high";
danger: "uy:bg-surface-danger-low uy:text-content-danger-high";
promo: "uy:bg-surface-promo-low uy:text-content-promo-high";
primary: "uy:bg-surface-primary-lowest uy:text-content-primary-high";
};
}, undefined, undefined, {
size: {
xs: "uy:size-200";
sm: "uy:size-300";
md: "uy:size-400";
lg: "uy:size-500";
xl: "uy:size-[56px]";
};
variant: {
circle: "uy:rounded-circle";
square: "uy:aspect-square";
};
color: {
teal: "uy:bg-surface-decorative-teal-lowest uy:text-content-decorative-teal-high";
plum: "uy:bg-surface-decorative-plum-lowest uy:text-content-decorative-plum";
purple: "uy:bg-surface-decorative-purple-lowest uy:text-content-decorative-purple";
orange: "uy:bg-surface-decorative-orange-lowest uy:text-content-decorative-orange";
neutral: "uy:bg-surface-neutral-lowest uy:text-content-neutral";
warning: "uy:bg-surface-warning-low uy:text-content-warning-high";
success: "uy:bg-surface-success-low uy:text-content-success-high";
info: "uy:bg-surface-info-low uy:text-content-info-high";
danger: "uy:bg-surface-danger-low uy:text-content-danger-high";
promo: "uy:bg-surface-promo-low uy:text-content-promo-high";
primary: "uy:bg-surface-primary-lowest uy:text-content-primary-high";
};
}, undefined, import('tailwind-variants').TVReturnTypeLike<{
size: {
xs: "uy:size-200";
sm: "uy:size-300";
md: "uy:size-400";
lg: "uy:size-500";
xl: "uy:size-[56px]";
};
variant: {
circle: "uy:rounded-circle";
square: "uy:aspect-square";
};
color: {
teal: "uy:bg-surface-decorative-teal-lowest uy:text-content-decorative-teal-high";
plum: "uy:bg-surface-decorative-plum-lowest uy:text-content-decorative-plum";
purple: "uy:bg-surface-decorative-purple-lowest uy:text-content-decorative-purple";
orange: "uy:bg-surface-decorative-orange-lowest uy:text-content-decorative-orange";
neutral: "uy:bg-surface-neutral-lowest uy:text-content-neutral";
warning: "uy:bg-surface-warning-low uy:text-content-warning-high";
success: "uy:bg-surface-success-low uy:text-content-success-high";
info: "uy:bg-surface-info-low uy:text-content-info-high";
danger: "uy:bg-surface-danger-low uy:text-content-danger-high";
promo: "uy:bg-surface-promo-low uy:text-content-promo-high";
primary: "uy:bg-surface-primary-lowest uy:text-content-primary-high";
};
}, undefined>>>;
type AvatarAccessibleName = {
'aria-label': string;
'aria-labelledby'?: string;
} | {
'aria-label'?: string;
'aria-labelledby': string;
};
export type AvatarProps = PropsWithChildren<{
/** Additional class names to apply to the avatar */
className?: string;
/** The avatar's variant. One of: circle or square */
variant?: VariantProps<typeof avatarRoot>['variant'];
/** Size of the avatar. One of: xs, sm, md, lg, xl */
size?: VariantProps<typeof avatarRoot>['size'];
/** Color variant for icon avatars. One of: teal, plum, purple, orange, neutral, warning, success, info, danger, promo, primary */
color?: VariantProps<typeof avatarRoot>['color'];
/** ID of the element that describes the avatar */
'aria-describedby'?: string;
/** Additional details for the avatar */
'aria-details'?: string;
/** Indicates if the avatar is hidden from assistive technologies */
'aria-hidden'?: boolean;
} & AvatarAccessibleName>;
/**
* The Avatar component displays visual or text content for representing people or entities.
* It supports images, initials, placeholders, and icons with customizable colors and sizes.
* @param {AvatarProps} props - Props for the Avatar component
* @example
* ```tsx
* import { Avatar, AvatarImage, AvatarFallback, AvatarIcon } from '@payfit/unity-components'
*
* // Avatar with image and fallback
* function Example() {
* return (
* <Avatar size="lg" variant="circle" aria-label="John Doe">
* <AvatarImage src="/images/avatar.jpg" alt="John Doe" />
* <AvatarFallback variant="initials">JD</AvatarFallback>
* </Avatar>
* )
* }
*
* // Avatar with icon and color
* function IconExample() {
* return (
* <Avatar size="lg" color="teal" variant="circle" aria-label="Vacation">
* <AvatarIcon src="PalmFilled" alt="Palm tree" />
* </Avatar>
* )
* }
* ```
* @remarks
* - Use the `circle` variant for representing people
* - Use the `square` variant for representing companies or organizations
* - The `color` prop applies background and text color variants for icon avatars
* - Always provide an `aria-label` or `aria-labelledby` for accessibility
* - Use `aria-description` when a short additional description helps screen reader users
* - Use `aria-labelledby` and `aria-describedby` to associate the avatar with visible text that identifies the represented person or entity
* - The avatar has `role="img"` by default and should not be used as an interactive element directly; wrap it in a button or Actionable when it triggers an action
* @see {@link AvatarProps} for all available props
* @see Source code in {@link https://github.com/PayFit/hr-apps/tree/master/libs/shared/unity/components/src/components/avatar GitHub}
* @see Design specs {@link https://www.figma.com/design/poaMyU7abAgL9VRhx4ygyy/Unity-DS-%3E-Components-Library?node-id=19-3741 Figma}
* @see Design docs in {@link https://www.payfit.design/24f360409/p/69c10a-avatar Payfit.design}
* @see Developer docs in {@link https://unity-components.payfit.io/?path=/docs/component-reference-avatar unity-components.payfit.io}
*/
declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
export { Avatar };