import type { ClassValue, HTMLAttributes } from "svelte/elements"; import type { Snippet } from "svelte"; /** Single member inside an AvatarGroup. */ export interface AvatarMember { /** Username or entity name; used for Vercel avatar URL and accessible title. */ username?: string; /** Direct image URL. */ src?: string; /** 1–2 uppercase characters to display when no image is available. */ letter?: string; /** Accessible title for the member; falls back to username. */ title?: string; } /** Core avatar appearance. */ export interface AvatarProps { /** Diameter in px. Default: 32 */ size?: number; /** Image URL. If absent, username or letter fallback is used. */ src?: string; /** Username used for Vercel avatar URL and fallback title. */ username?: string; /** 1–2 uppercase characters shown when no image source resolves. */ letter?: string; /** Loading shell; never the final fallback. */ placeholder?: boolean; /** Accessible name for the entity; defaults to username. */ title?: string; class?: ClassValue; } /** Group of stacked avatars. */ export interface AvatarGroupProps { members: AvatarMember[]; /** Diameter in px. Default: 32 */ size?: number; /** Maximum visible avatars; remaining members become a +N badge. */ limit?: number; /** Put the last member visually on top instead of the first. */ reverse?: boolean; /** Auto scales negative spacing with size, or pass a number of px. */ overlap?: "auto" | number; class?: ClassValue; } /** Avatar rendered with a centered icon. */ export interface AvatarWithIconProps extends Omit, "class"> { /** Diameter in px. Default: 32 */ size?: number; icon: Snippet; /** Fill a subtle background behind the icon. */ iconBackground?: boolean; class?: ClassValue; } export type { Snippet };