import { type ReactElement, type ReactNode } from "react";
import { type SheetPosition, type SheetVerticalSize } from "../sheet/styles.js";
/** @remarks \@since 5.0.0 */
export interface MenuOrientationProps {
    /**
     * Boolean if the menu should be rendered horizontally instead of vertically.
     * This will also update the `aria-orientation`.
     *
     * @defaultValue `false`
     */
    horizontal?: boolean;
}
/**
 * This allows the menu to be conditionally rendered as a `Sheet` instead of a
 * menu.
 *
 * - `false` - always render as a `Menu`
 * - `true` - always render as a `Sheet`
 * - `"phone"` - render as a sheet only when the {@link AppSize} is considered
 *   phone (`isPhone === true`).
 *
 * @defaultValue `false`
 * @remarks \@since 5.0.0
 */
export type RenderMenuAsSheet = boolean | "phone";
/** @remarks \@since 5.0.0 */
export interface MenuConfiguration extends MenuOrientationProps {
    /** {@inheritDoc RenderMenuAsSheet} */
    renderAsSheet?: RenderMenuAsSheet;
    /**
     * @see {@link SheetPosition}
     * @defaultValue `"bottom"`
     */
    sheetPosition?: SheetPosition;
    /**
     * @see {@link SheetVerticalSize}
     * @defaultValue `"touch"`
     */
    sheetVerticalSize?: SheetVerticalSize;
    /**
     * Any children to render above the sheet's menu implementation. This would
     * normally be something like a `<DialogHeader>` or `AppBar`.
     *
     * @defaultValue `null`
     */
    sheetHeader?: ReactNode;
    /**
     * Any children to render below the sheet's menu implementation. This would
     * normally be something like a `<DialogFooter>`.
     *
     * @defaultValue `null`
     */
    sheetFooter?: ReactNode;
}
/** @remarks \@since 5.0.0 */
export type MenuConfigurationContext = Required<MenuConfiguration>;
/** @remarks \@since 5.0.0 */
export declare const DEFAULT_MENU_CONFIGURATION: Readonly<MenuConfiguration>;
/**
 * This is probably just an internal only hook that allows you to get the
 * {@link MenuConfigurationContext} with optional overrides.
 *
 * @param overrides - An object of {@link MenuConfiguration} that would override
 * the inherited context values if they are not `undefined`.
 * @returns the {@link MenuConfigurationContext} with any overrides that were
 * provided.
 * @remarks \@since 5.0.0
 */
export declare function useMenuConfiguration(overrides?: MenuConfiguration): Readonly<MenuConfigurationContext>;
/** @remarks \@since 5.0.0 */
export interface MenuConfigurationProviderProps extends MenuConfiguration {
    children: ReactNode;
}
/**
 * **Client Component**
 *
 * Note: This will always merge values with any parent
 * `MenuConfigurationProvider`s.
 *
 * @remarks \@since 5.0.0
 */
export declare function MenuConfigurationProvider(props: MenuConfigurationProviderProps): ReactElement;
