import type { ReactNode } from "react"; import type { AvatarStatus } from "../Avatar/AvatarProps"; /** Chip size; also sets the inner Avatar's size (sm→sm, md→md, lg→lg, xl→xl). */ export type PersonChipSize = "sm" | "md" | "lg" | "xl"; /** "horizontal" (default): avatar left, text right. "vertical": avatar above, text centered below. */ export type PersonChipOrientation = "horizontal" | "vertical"; /** Avatar + name (+ optional secondary line, presence dot, remove action) — the library's one way to show a person. */ export interface PersonChipProps { /** Used for initials, alt text and the deterministic avatar fill. */ name: string; /** Avatar image URL; falls back to initials. */ imageUrl?: string; /** Role, email, or any other line under the name. */ secondary?: ReactNode; /** Default "md". */ size?: PersonChipSize; /** Default "horizontal". */ orientation?: PersonChipOrientation; /** Presence dot on the avatar; omitted entirely when unset. */ status?: AvatarStatus; /** Renders the whole chip as a real, keyboard-reachable button. */ onClick?: () => void; /** Renders a trailing remove button; its click never triggers `onClick`. */ onRemove?: () => void; /** Accessible label for the remove button. Defaults to `Remove ${name}`. */ removeLabel?: string; /** Clips name/secondary with an ellipsis instead of wrapping. Default true. */ isTruncated?: boolean; /** Caps the chip's text column width; only meaningful with `isTruncated`. */ maxW?: string; /** Test hook on the root. */ "data-testid"?: string; }