import { type ComponentPropsWithoutRef, type ReactNode } from "react";
export type AvatarSize = "xs" | "sm" | "md" | "lg" | "xl";
export type AvatarShape = "circle" | "square";
/** Presence indicator. `online` pulses gently; reduced-motion is respected. */
export type AvatarStatus = "online" | "offline" | "busy" | "away";
export interface AvatarProps extends Omit<ComponentPropsWithoutRef<"div">, "color" | "children" | "onClick" | "onKeyDown"> {
    /** Image URL. If loading fails, falls back to `initials` (then `icon`, then `?`). */
    src?: string;
    /** Accessible name for the avatar. Used as the `<img>` alt AND as the
     * wrapping element's accessible name. If you only pass `initials`,
     * this is recommended so AT announces "Jane Doe avatar" not "J D". */
    alt?: string;
    /** Initials to render when there is no image. Auto-uppercased and
     * truncated to 2 characters so passing a full name stays sane. */
    initials?: string;
    /** Optional icon slot — rendered when neither `src` nor `initials` is
     * available (or used directly when you want a system/bot avatar). */
    icon?: ReactNode;
    /** Override the default `?` fallback content. */
    fallback?: ReactNode;
    /** Stable seed for the persistent palette. Falls back to `initials` /
     * `alt` so the same person consistently gets the same color even if
     * their name changes case or you only have a partial identity. */
    seed?: string;
    /** Pixel/font size variant. */
    size?: AvatarSize;
    /** Shape — `circle` (people, default) or `square` (teams, bots, brands). */
    shape?: AvatarShape;
    /** Presence indicator dot. */
    status?: AvatarStatus;
    /** Human-readable status label folded into the accessible name. Defaults
     * to the capitalized `status` value. */
    statusLabel?: string;
    /** When set, the avatar becomes a button (Enter/Space activated). */
    onClick?: () => void;
    /** Native image attributes — set `loading="eager"` for above-the-fold avatars
     * if you've measured CLS regressions. Defaults to `lazy`. */
    imgLoading?: "eager" | "lazy";
    /** Native referrerPolicy for cross-origin avatar hosts (Gravatar, etc.). */
    referrerPolicy?: ComponentPropsWithoutRef<"img">["referrerPolicy"];
}
export declare const Avatar: import("react").ForwardRefExoticComponent<AvatarProps & import("react").RefAttributes<HTMLDivElement>>;
export interface AvatarStackProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
    /** Avatars to display (in left-to-right stacking order). */
    children: ReactNode;
    /** Max avatars to show before collapsing the surplus into `+N`. */
    max?: number;
    /** Size applied to the overflow chip. Defaults to `md`. */
    size?: AvatarSize;
    /** Replace the default `+N` overflow chip. Receives the hidden count. */
    renderOverflow?: (count: number) => ReactNode;
    /** Stacking direction. `ltr` (default) overlaps each successive avatar to
     * the right of the previous one; `rtl` mirrors. */
    direction?: "ltr" | "rtl";
}
export declare const AvatarStack: import("react").ForwardRefExoticComponent<AvatarStackProps & import("react").RefAttributes<HTMLDivElement>>;
//# sourceMappingURL=Avatar.d.ts.map