/**
 * @file BottomSheet.tsx
 * @input Uses React, StyleX, core hooks/utils, BottomSheetPanel, BottomSheetSwitcherContext
 * @output Exports BottomSheet component and BottomSheetProps
 * @position Public BottomSheet router plus private standalone/switcher hosts
 *
 * BottomSheet selects one of two focused hosts. A standalone host owns its
 * native dialog lifecycle; a switcher item participates in the parent's shared
 * dialog and transition state machine. Both render the same BottomSheetPanel,
 * which owns sheet presentation, gestures, mobile-keyboard accommodation, and
 * motion completion.
 *
 * SYNC: When modified, update these files to stay in sync:
 * - /packages/core/src/BottomSheet/BottomSheetPanel.tsx
 * - /packages/core/src/BottomSheet/BottomSheet.doc.mjs
 * - /packages/core/src/BottomSheet/BottomSheet.test.tsx
 * - /packages/core/src/BottomSheet/BottomSheetSwitcher.tsx
 * - /packages/core/src/BottomSheet/BottomSheetSwitcher.test.tsx
 * - /apps/storybook/stories/BottomSheet.stories.tsx
 * - /packages/cli/assets/templates/blocks/components/BottomSheet/BottomSheetShowcase.tsx
 */
import { type ReactNode } from 'react';
import type { BaseProps } from '../BaseProps';
import type { DialogPurpose } from '../Dialog';
export type { BottomSheetHeight, BottomSheetSnapPoint } from './BottomSheetPanel';
import type { BottomSheetHeight, BottomSheetSnapPoint } from './BottomSheetPanel';
interface BottomSheetSharedProps extends BaseProps<HTMLDivElement> {
    /** Ref forwarded to the visual sheet panel <div>. */
    ref?: React.Ref<HTMLDivElement>;
    /** Accessible label for the sheet. */
    label: string;
    /** Sheet content, rendered below the grab handle in a scrollable area. */
    children: ReactNode;
    /** Height budget or custom CSS length. Only fully expanded Tall is keyboard-aware. @default 'capped' */
    height?: BottomSheetHeight | number | string;
    /**
     * Extra heights the sheet can rest at when dragged; its own height is always
     * the tallest stop, and omitting this gives a sheet that only opens and
     * closes. Each stop is the sheet's visible height: a number is a viewport
     * fraction (`0.5` is half the screen), `'50%'` the same in CSS, `'320px'` an
     * absolute length. A stop of a quarter of the sheet or less is a peek — it
     * slides away instead of reflowing, and thins the scrim.
     */
    snapPoints?: ReadonlyArray<BottomSheetSnapPoint>;
    /**
     * Configures implicit dismissal behavior, matching Dialog.
     * - required: Blocks swipe, scrim click, and Escape
     * - form: Blocks swipe and scrim click, allows Escape
     * - info: Allows swipe, scrim click, and Escape
     * @default 'info'
     */
    purpose?: DialogPurpose;
}
interface StandaloneBottomSheetProps extends BottomSheetSharedProps {
    isOpen: boolean;
    onOpenChange: (isOpen: boolean) => void;
    hasScrim?: boolean;
    sheetId?: never;
}
interface SwitcherBottomSheetProps extends BottomSheetSharedProps {
    sheetId: string;
    isOpen?: never;
    onOpenChange?: never;
    hasScrim?: never;
}
export type BottomSheetProps = StandaloneBottomSheetProps | SwitcherBottomSheetProps;
/**
 * A mobile touch sheet that either owns a native dialog or participates in a
 * BottomSheetSwitcher shared dialog when given a sheetId inside that context.
 */
export declare function BottomSheet(props: BottomSheetProps): import("react").JSX.Element;
export declare namespace BottomSheet {
    var displayName: string;
}
//# sourceMappingURL=BottomSheet.d.ts.map