import { type ComponentType, type ReactNode } from "react"; import { type StyleProp, type ViewStyle } from "../../style/index.js"; import { type ButtonProps } from "../../atoms/button/button.shared.js"; import { type Edge, type DrawerSkin } from "./drawer.styles.js"; export type ButtonComponent = ComponentType; export interface DrawerProps { /** Pinned header above the independently scrolling body. */ header?: ReactNode; /** Pinned actions below the independently scrolling body. */ footer?: ReactNode; /** Navigation body: no content inset or inter-item gap; fills the available height. */ navigation?: boolean; /** Solid, rounded execution sidebar inset from the viewport. Overrides edge and plain; width remains configurable. */ terminal?: boolean; /** Square web side panel and the original lightly frosted application dim. */ plain?: boolean; /** Present and dismiss immediately, preserving the original application interaction. */ instant?: boolean; /** * Show the open drawer as a non-modal specimen inside its parent, for a catalogue or a * showcase: the panel docks against its edge of the parent (which gives it its height) * over the dim, with no Modal, no slide, no focus trap, and no close on Escape, native * back or a tap on the dim. It keeps its labelling as a named region. Ignored with * `trigger`, which always opens a live drawer. */ embedded?: boolean; /** Panel content. */ children?: ReactNode; /** Controlled open state. Omit for uncontrolled (a `trigger` opens it). */ open?: boolean; /** Fired when the open state changes (trigger press, scrim tap, back/escape). */ onOpenChange?: (open: boolean) => void; /** Called once after an opened drawer finishes dismissal; never called for its initial closed state. */ onClosed?: () => void; /** * Label for an optional outline trigger button. When set, the drawer renders the button * and opens itself on press (uncontrolled). Omit when you drive `open` yourself. */ trigger?: string; /** A full-height panel on the left edge (default). */ left?: boolean; /** A full-height panel on the right edge. */ right?: boolean; /** A sheet spanning the width, rising from the bottom. */ bottom?: boolean; /** A sheet spanning the width, dropping from the top. */ top?: boolean; /** Width of a side drawer in px (default 300). Ignored for the bottom/top sheet. */ width?: number; /** Accessible name for the modal surface. Required when the drawer has no trigger whose label can name it. */ accessibilityLabel?: string; /** E2E hook forwarded to the root element. */ testID?: string; /** Outer layout composition for the panel surface, never a restyle hook. (Device safe-area insets are applied automatically.) */ style?: StyleProp; } export declare function edgeOf(p: DrawerProps): Edge; /** * Build a Drawer component from a platform skin and the platform-correct trigger * Button. * * The trigger Button is passed in by each platform's thin `.tsx`/`.ios`/`.android` * file so the built-in `trigger` reads native on every build path. This matters * for the WEB docs 3-up preview: a bare barrel import always resolves the WEB * Button in a browser bundler, which would paint a web-styled trigger inside the * iOS/Android rows; each platform file passes its own `.ios`/`.android` Button so * the row's trigger reads native. On a real device Metro resolves the right Button * by extension regardless, so the default (the web base) is correct there too. */ export declare function createDrawer(skin: DrawerSkin, Button?: ButtonComponent): (props: DrawerProps) => import("react").JSX.Element | null; //# sourceMappingURL=drawer.shared.d.ts.map