UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

153 lines (150 loc) • 4.68 kB
import { ElementType, ReactNode } from 'react'; import { ClassValue } from 'clsx'; import { AvatarVariants } from '../../theme/recipes/avatar.js'; import { OverrideProps, SxProp, ComponentUtilityClasses, ComponentPropsWithCommonProps } from '../../types/utils.js'; import { Avatar } from './Avatar.js'; interface AvatarPropsOverrides { } type AvatarSlotProps<RootComponent extends ElementType> = { img?: ComponentPropsWithCommonProps<'img', AvatarOwnerState<RootComponent>>; }; type AvatarOwnProps<RootComponent extends ElementType> = { /** * The component or element to render as the root. * @default 'div' */ as?: RootComponent; /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx?: SxProp<AvatarOwnerState<RootComponent>>; /** * Used in combination with src or srcSet to provide an alt attribute for the rendered img element. */ alt?: string; /** * If true, adds an outline around the avatar. * @default false */ outlined?: boolean; /** * The src attribute for the img element. */ src?: string; /** * The srcSet attribute for the img element. */ srcSet?: string; /** * Additional class names to apply to the root element. */ className?: ClassValue; /** * Used to render icon or text elements inside the avatar if src is not set. This can be an element, or just a string. */ children?: ReactNode; /** * The props used for each slot. */ slotProps?: AvatarSlotProps<RootComponent>; /** * The className used for each slot. */ classes?: ComponentUtilityClasses<'root' | 'img'>; /** * The size of the avatar. * @default 'md' */ size?: AvatarVariants['size']; /** * The border radius of the avatar. * @default size */ radius?: AvatarVariants['radius']; /** * The color of the avatar. * @default 'gray' */ color?: AvatarVariants['color']; }; type AvatarProps<RootComponent extends ElementType = 'div'> = OverrideProps<RootComponent, AvatarOwnProps<RootComponent>, AvatarPropsOverrides>; type LoadedState = false | 'error' | 'loaded'; type AvatarOwnerState<RootComponent extends ElementType = 'div'> = AvatarProps<RootComponent> & { radius: AvatarVariants['radius']; size: AvatarVariants['size']; color: AvatarVariants['color']; outlined: boolean; inGroup: boolean; loaded: LoadedState; }; interface AvatarGroupPropsOverrides { } type AvatarGroupSlotProps<RootComponent extends ElementType> = { surplus?: ComponentPropsWithCommonProps<typeof Avatar, AvatarGroupOwnerState<RootComponent>>; }; type AvatarGroupOwnProps<RootComponent extends ElementType = 'div'> = { /** * The component or element to render as the root. * @default 'div' */ as?: RootComponent; /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx?: SxProp<AvatarGroupOwnerState<RootComponent>>; /** * The props used for each slot. */ slotProps?: AvatarGroupSlotProps<RootComponent>; /** * The className used for each slot. */ classes?: ComponentUtilityClasses<'root' | 'surplus'>; /** * The size of the Avatars. * @default 'md' */ size?: AvatarVariants['size']; /** * The border radius of the Avatars * @default size */ radius?: AvatarVariants['radius']; /** * The color of the Avatars * @default 'gray' */ color?: AvatarVariants['color']; /** * If true, adds an outline around the avatars. * @default false * @default false */ outlined?: boolean; /** * Max avatars to show before +x. * @default 5 */ max?: number; /** * The total number of avatars. */ total?: number; /** * Spacing between avatars. */ spacing?: number; /** * custom renderer of extraAvatars */ renderSurplus?: (surplus: number) => ReactNode; }; type AvatarGroupProps<RootComponent extends ElementType = 'div'> = OverrideProps<RootComponent, AvatarGroupOwnProps<RootComponent>, AvatarGroupPropsOverrides>; type AvatarGroupOwnerState<RootComponent extends ElementType = 'div'> = AvatarGroupProps<RootComponent> & { radius: AvatarVariants['radius']; size: AvatarVariants['size']; color: AvatarVariants['color']; outlined: boolean; max: number; }; export type { AvatarGroupOwnerState, AvatarGroupProps, AvatarGroupPropsOverrides, AvatarOwnerState, AvatarProps, AvatarPropsOverrides, LoadedState };