import { type ComponentPropsWithoutRef, type ReactNode } from "react";
export type BannerVariant = "info" | "success" | "warning" | "error" | "promo" | "neutral";
export type BannerSize = "sm" | "md" | "lg";
/** Direction the banner slides in / out from. Default = `down` (enters
 * slightly above its final position, settles down + fades in). */
export type BannerAnimateFrom = "top" | "bottom" | "left" | "right" | "none";
export type BannerAppearance = "filled" | "outlined" | "subtle";
export interface BannerProps extends Omit<ComponentPropsWithoutRef<"div">, "color" | "title"> {
    /** Visual / semantic variant. `error` defaults to `role="alert"`; the rest
     * default to `role="status"` (polite live region). */
    variant?: BannerVariant;
    /** Size variant. */
    size?: BannerSize;
    /** Appearance treatment. `filled` (default) uses the variant's bg/border;
     * `outlined` keeps the border but drops the fill; `subtle` mutes both. */
    appearance?: BannerAppearance;
    /** Leading icon. If omitted, Banner renders a sensible default per
     * variant (info/success/warning/error/promo). Pass `null` explicitly to
     * suppress the default. */
    icon?: ReactNode | null;
    title?: ReactNode;
    description?: ReactNode;
    /** Trailing action slot (typically a Button). */
    action?: ReactNode;
    /** Renders a dismiss `×` button on the trailing edge. */
    dismissible?: boolean;
    /** Fires when the dismiss button is clicked. */
    onDismiss?: () => void;
    /** Accessible label for the dismiss button. Defaults to "Dismiss". */
    dismissLabel?: string;
    /** Override the inferred role. Pass explicitly for non-default
     * announcements ("alert", "alertdialog", "region", etc.). */
    role?: ComponentPropsWithoutRef<"div">["role"];
    /** Auto-focus the banner when it first mounts. Useful for error banners
     * that should grab focus on appearance so AT users notice them. */
    autoFocus?: boolean;
    /** Controls whether the banner is mounted. Pair with `useBanner()` for
     * declarative show/hide state, or wire to your own state. When omitted,
     * the banner is always mounted (the regular, animation-free shape). */
    open?: boolean;
    /** Direction the enter/exit animation slides from. Defaults to `top`.
     * `none` disables the slide entirely (still fades). */
    animateFrom?: BannerAnimateFrom;
    /** Disable all enter/exit motion. Use when the banner is part of a
     * larger animation managed externally. */
    disableAnimation?: boolean;
    /** Render Banner's styling onto a custom child element (Radix-style Slot).
     *
     * Example — a clickable banner-as-link:
     *   <Banner asChild variant="promo">
     *     <a href="/changelog">New release! See what's new →</a>
     *   </Banner>
     *
     * When `asChild` is true, Banner does NOT render its internal icon /
     * title / description / action / dismiss slots. The consumer's element
     * fully owns the content. */
    asChild?: boolean;
    children?: ReactNode;
}
export declare const Banner: import("react").ForwardRefExoticComponent<BannerProps & import("react").RefAttributes<HTMLDivElement>>;
//# sourceMappingURL=Banner.d.ts.map