/**
 * @file DropdownMenuSubMenu.tsx
 * @input React, stylex, useLayer (context mode), useListFocus, useMenuHover,
 *   useTypeahead, Item, Icon, Spinner, DropdownMenu context + item roles.
 * @output Exports DropdownMenuSubMenu — a single menu row that reveals a nested
 *   flyout menu of its own children/items.
 * @position Sub-component; place inside a DropdownMenu (or ContextMenu)
 *   alongside plain items.
 *
 * One component, not three. The row itself adopts DropdownMenuItem semantics
 * (label / icon / description / isDisabled) and its children become the
 * flyout's content. This mirrors how SideNavItem / TreeListItem promote a
 * normal row into a nested surface when given children, rather than the Radix
 * Sub / SubTrigger / SubContent split. Data-driven menus never touch this
 * component directly — renderDropdownItems renders it from a nested `items`
 * array and passes the rendered children in.
 *
 * Built on existing primitives — no bespoke floating code:
 * - Positioning: useLayer context mode opens the flyout inline-end with
 *   viewport auto-flip via CSS anchor positioning (RTL-correct by default).
 * - Pointer: useMenuHover for open/close intent.
 * - Keyboard: a per-level useListFocus + useTypeahead. Right (Left in RTL) /
 *   Enter / Space opens the flyout and focuses its first item; Left (Right in
 *   RTL) / Escape closes it and returns focus to the trigger row.
 *
 * Prior art: legacy internal XDS `XDSDropdownSubMenuItem` (APG menubar-
 * navigation submenu). This re-expresses the same contract on Astryx primitives.
 *
 * SYNC: When modified, update these files to stay in sync:
 * - /packages/core/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs
 * - /packages/core/src/DropdownMenu/DropdownMenuSubMenu.test.tsx
 * - /packages/core/src/DropdownMenu/index.ts
 * - /apps/storybook/stories/DropdownMenu.stories.tsx
 * - /packages/cli/assets/templates/blocks/components/DropdownMenu/ (showcase blocks)
 */
import { type ReactNode } from 'react';
import { type IconType } from '../Icon';
import type { BaseProps } from '../BaseProps';
interface DropdownMenuSubMenuBaseProps extends Pick<BaseProps, 'xstyle' | 'className' | 'style'> {
    /** Icon to display before the label on the trigger row. */
    icon?: ReactNode | IconType;
    /** Primary label text for the trigger row. */
    label: ReactNode;
    /** Secondary description text displayed below the label. */
    description?: ReactNode;
    /**
     * Whether the submenu is disabled. A disabled submenu renders its trigger
     * row but never opens the flyout.
     * @default false
     */
    isDisabled?: boolean;
    /**
     * Show a spinner in place of the caret, e.g. while a lazy submenu's children
     * are loading. Ported from the legacy `hasSpinner` async-submenu affordance.
     * @default false
     */
    hasSpinner?: boolean;
    /** Fixed flyout width. Defaults to sizing to its content (min 160px). */
    menuWidth?: number | string;
    /** Called when the flyout opens or closes. */
    onOpenChange?: (isOpen: boolean) => void;
    /** Test id for the trigger row. */
    'data-testid'?: string;
    /** Test id for the flyout menu. */
    menuDataTestId?: string;
}
export interface DropdownMenuSubMenuProps extends DropdownMenuSubMenuBaseProps {
    /**
     * The flyout's menu items — the same components used at the top level
     * (`DropdownMenuItem`, `DropdownMenuSubMenu`, selectable items, etc.).
     *
     * Data-mode parity lives one level up: give a `DropdownMenu`/`ContextMenu`
     * item a nested `items` array and it renders a `DropdownMenuSubMenu` with
     * these children automatically — so the data path never has to reach into
     * this component.
     */
    children: ReactNode;
}
/**
 * A single menu row that reveals a nested flyout of its own items. The row
 * adopts DropdownMenuItem semantics (label / icon / description / isDisabled);
 * its `children` become the flyout content. Place inside a DropdownMenu (or
 * ContextMenu) alongside plain items.
 *
 * For data-driven menus, don't use this directly — give a menu item a nested
 * `items` array and DropdownMenu/ContextMenu renders the submenu for you.
 *
 * @example
 * ```
 * <DropdownMenu button={{label: 'Actions'}}>
 *   <DropdownMenuItem label="Rename" onClick={rename} />
 *   <DropdownMenuSubMenu label="Move to" icon="folder">
 *     <DropdownMenuItem label="Folder A" onClick={() => move('a')} />
 *     <DropdownMenuItem label="Folder B" onClick={() => move('b')} />
 *   </DropdownMenuSubMenu>
 * </DropdownMenu>
 * ```
 */
export declare function DropdownMenuSubMenu(props: DropdownMenuSubMenuProps): ReactNode;
export declare namespace DropdownMenuSubMenu {
    var displayName: string;
}
export {};
//# sourceMappingURL=DropdownMenuSubMenu.d.ts.map