import { type ReactNode } from "react"; import { type StyleProp, type ViewStyle, type TextStyle } from "../../style/index.js"; export type Tone = "info" | "success" | "warning" | "error" | "neutral"; export interface AlertSkin { /** Banner shape + density (border-radius, padding, gap). */ container: ViewStyle; /** Leading glyph type (size / line-height). */ iconType: TextStyle; /** Title type (size / line-height / weight / tracking). */ titleType: TextStyle; /** Description / body type (size / line-height / tracking). */ bodyType: TextStyle; /** Dismiss control shape (size, radius). */ dismissButton: ViewStyle; /** Dismiss glyph type (size / line-height). */ dismissType: TextStyle; /** Pressed opacity for the dismiss control (iOS/web dim; Android stays opaque under ripple). */ dismissPressedOpacity: number; /** * Hit-area inset per side (pt/dp) padding the 24px dismiss box out to the platform * minimum touch target (HIG 44x44pt on iOS, M3 48x48dp on Android) without changing * the rendered size. null (web) keeps pointer targets visual. */ dismissHitSlop: number | null; /** Footer action region: the row layout + gap between action buttons, plus the * top separation dividing them from the body above. */ actions: ViewStyle; } export interface AlertProps { title?: string; description?: string; icon?: ReactNode; info?: boolean; success?: boolean; warning?: boolean; /** The danger tone. This is the name the intent axis uses across the kit (Button, * AlertDialog, and every chart) and the one the design hand-off uses here too. */ destructive?: boolean; /** @deprecated Use `destructive`. Kept working so existing call sites are untouched; * it resolves to exactly the same tone. */ error?: boolean; /** Shows a trailing dismiss control. Pressing it hides the banner out of the box * (uncontrolled); pass `dismissed` to own that state instead. */ dismissible?: boolean; /** Cap the banner at 320px, the measure of a standard (base-width) form field. */ narrow?: boolean; /** Cap the banner at 640px, for roomy content regions. */ wide?: boolean; /** Fill the container with no cap: the full-width announcement bar. */ block?: boolean; /** Controlled dismissal: `true` hides the banner. Omit to let the Alert manage it. */ dismissed?: boolean; /** Uncontrolled seed: start hidden. Rarely useful; defaults to false. */ defaultDismissed?: boolean; /** Fired when the dismiss control is pressed (both modes). */ onDismiss?: () => void; children?: ReactNode; /** E2E hook forwarded to the root element. */ testID?: string; /** * A footer action region rendered under the body. The Alert owns the layout: it * separates the actions from the description above and lays the buttons out in a * row, so a call site passes the buttons directly * (`actions={}`) with no wrapper. * Pass a fragment for more than one action. */ actions?: ReactNode; /** Outer layout composition only (width/flex within a parent), never a restyle hook. */ style?: StyleProp; } export declare function createAlert(skin: AlertSkin): (props: AlertProps) => import("react").JSX.Element | null; //# sourceMappingURL=alert.shared.d.ts.map