import type { ReactNode } from "react"; /** Scrim treatment: `dim` darkens only (black 0.5, no blur); `frosted` is the heavier Modal/Drawer scrim (black 0.6 + 4px blur). */ export type BackdropVariant = "dim" | "frosted"; /** Props for Backdrop, a fading full-viewport (or container-scoped) scrim that optionally centres a loader. */ export type BackdropProps = { /** Mounts the scrim and fades it in; `false` fades out and unmounts. */ open: boolean; /** Defaults to "dim". */ variant?: BackdropVariant; /** Centres a 40px spinner in the library's `Spinner`, inheriting the scrim's foreground colour. */ loader?: boolean; /** Caption under the loader; ignored unless `loader` is set. */ text?: string; /** Keeps the scrim blocking every click while painting nothing. */ invisible?: boolean; /** Lets clicks reach the page behind; `onClick` cannot fire while this is set. */ allowBackgroundInteraction?: boolean; /** Fires on scrim clicks — the usual "click away to dismiss" hook. */ onClick?: () => void; /** Fade length in ms, or separate enter/exit. Defaults to 225 in / 195 out. */ transitionDuration?: number | { enter?: number; exit?: number; }; /** Scopes the scrim to the nearest positioned ancestor instead of the viewport. */ container?: boolean; /** Defaults to the 1300 modal layer full-viewport, or 10 when `container`. */ zIndex?: number | string; /** Rendered centred; replaces the built-in loader when both are given. */ children?: ReactNode; /** Announced to screen readers while open; defaults to "Loading" when `loader` is set. */ ariaLabel?: string; };