/**
 * @file BottomSheetSwitcher.tsx
 * @input Uses React context, StyleX, theme tokens, focus/scroll-lock hooks, BottomSheetSwitcherContext
 * @output Exports BottomSheetSwitcher and BottomSheetSwitcherProps
 * @position Core switcher for mutually exclusive BottomSheet flows
 *
 * The switcher turns a set of declaratively nested BottomSheets into a
 * controlled single-selection group: `activeSheet` names the one interactive
 * child, or is null when the flow is closed. During a handoff the new sheet
 * enters above the previous sheet. If it is shorter, the previous sheet moves
 * down at the same time until their top edges align; otherwise it stays
 * stationary. The previous sheet fades only after both motions complete.
 *
 * All child sheets render as panels inside one switcher-owned `<dialog>`. A
 * scrim flow calls showModal() once and keeps that native top-layer dialog open
 * across every handoff. A no-scrim flow calls show() on the same non-modal shell.
 * This keeps one modal boundary and one native ::backdrop without a portal.
 *
 * SYNC: When modified, update these files to stay in sync:
 * - /packages/core/src/BottomSheet/BottomSheet.tsx
 * - /packages/core/src/BottomSheet/BottomSheetSwitcher.doc.mjs
 * - /packages/core/src/BottomSheet/BottomSheetSwitcher.test.tsx
 * - /packages/core/src/BottomSheet/index.ts
 * - /apps/storybook/stories/BottomSheetSwitcher.stories.tsx
 * - /packages/cli/assets/templates/blocks/components/BottomSheet/BottomSheetSwitcherShowcase.tsx
 */
import { type ReactNode, type SyntheticEvent } from 'react';
import type { BaseProps } from '../BaseProps';
export interface BottomSheetSwitcherProps extends BaseProps<HTMLDialogElement> {
    /** Ref forwarded to the shared native dialog. */
    ref?: React.Ref<HTMLDialogElement>;
    /** Called when the shared native dialog receives a cancel event. */
    onCancel?: (event: SyntheticEvent<HTMLDialogElement>) => void;
    /**
     * ID of the interactive BottomSheet, or null when the flow should close.
     * Must match a nested BottomSheet's `sheetId`. The previous sheet may remain
     * visually present and inert while the new sheet enters, moving downward at
     * the same time if the new sheet is shorter, then fade away.
     */
    activeSheet: string | null;
    /** Called with null when the active sheet requests dismissal. */
    onActiveSheetChange: (sheetId: string | null) => void;
    /**
     * Whether to open the shared dialog modally with its native ::backdrop.
     * Disable for a viewport-anchored, non-modal flow over an interactive page.
     * @default true
     */
    hasScrim?: boolean;
    /** BottomSheets identified by unique `sheetId` values. */
    children: ReactNode;
}
/**
 * Coordinates a set of BottomSheets so zero or one is active at a time inside
 * one shared native dialog. During a handoff the previous panel stays visible
 * and inert beneath the entering panel, then fades after motion completes.
 */
export declare function BottomSheetSwitcher({ activeSheet, onActiveSheetChange, hasScrim, children, ref, xstyle, className, style, onCancel, onClick, onKeyDown, ...props }: BottomSheetSwitcherProps): import("react").JSX.Element;
export declare namespace BottomSheetSwitcher {
    var displayName: string;
}
//# sourceMappingURL=BottomSheetSwitcher.d.ts.map