import { type ReactNode } from "react"; /** * Below the mobile breakpoint the newest pending approval * presents as a bottom sheet instead of an in-list card: grabber, scrim, * safe-area + keyboard-inset padding, slide-up entrance (fade under reduced * motion). * * A consent must be decided explicitly: the scrim does NOT dismiss and Esc * (inside the sheet) is a no-op — the only exits are the card's own * Approve/Deny (the caller unmounts the sheet when the approval resolves). * NON-modal on purpose (voice-approval-overlap regression): only the sheet * itself takes pointer events, so at short viewports the surfaces it slides * over — the voice stage's controls — stay usable while the consent waits. * * Portals to with its own theme boundary (the MorphToast pattern) so * no host stacking context can trap it. The child is the regular * — it keeps every behavior (remember, error, busy) and, spec * §16 law 1, the sheet only SIZES it: this ancestor used to strip the card's * padding, border and background, which is why the same consent looked like a * different product on a phone. The approve morph keeps working because the * DOM still carries `.fl-approval` for the start-rect lookup. */ export declare function ApprovalSheet({ children, label }: { children: ReactNode; /** Accessible name for the dialog, e.g. `Approval for ${title}`. */ label: string; }): import("react").ReactPortal | null;