import { type CSSProperties, type HTMLAttributes, type MouseEvent, type ReactNode } from "react";
import { type ListItemAddonPosition, type ListItemAddonType, type ListItemHeight } from "../list/types.js";
import { type PropsWithRef } from "../types.js";
import { type IndeterminateCheckboxProps, type InputToggleIconProps } from "./InputToggle.js";
import { type InputToggleSize } from "./inputToggleStyles.js";
/** @remarks \@since 6.0.0 */
export interface MenuItemInputToggleClassNameOptions {
    className?: string;
    type: "radio" | "checkbox" | "switch";
}
/**
 * @remarks \@since 6.0.0
 */
export declare function menuItemInputToggle(options: MenuItemInputToggleClassNameOptions): string;
/**
 * @remarks \@since 6.0.0
 */
export type MenuItemInputToggleCheckedCallback = (checked: boolean, event: MouseEvent<HTMLLIElement>) => void;
/** @remarks \@since 2.8.0 */
export interface BaseMenuItemInputToggleProps extends HTMLAttributes<HTMLLIElement>, InputToggleIconProps {
    checked: boolean;
    onCheckedChange: MenuItemInputToggleCheckedCallback;
    /**
     * @defaultValue `"menu-item-" + useId()`
     */
    id?: string;
    /** @defaultValue `false` */
    disabled?: boolean;
    /**
     * Set this to `true` if the `Menu` should not close when the input toggle is
     * clicked. This can be useful when interacting with a checkbox group within a
     * menu or allowing the user to select multiple options before closing the
     * menu.
     *
     * @defaultValue `false`
     */
    preventMenuHideOnClick?: boolean;
    /**
     * This is set to `"auto"` by default so the icon shrinks back down to the
     * default icon size instead of relative to the current font size. You
     * probably don't want to change this since it'll also modify the height of
     * the menu item
     *
     * @defaultValue `"auto"`
     */
    size?: InputToggleSize;
    /** @defaultValue `"auto"` */
    height?: ListItemHeight;
    /** @defaultValue `false` */
    multiline?: boolean;
    /** @defaultValue `false` */
    disableTextChildren?: boolean;
    /** @defaultValue `false` */
    iconAfter?: boolean;
    addon?: ReactNode;
    addonType?: ListItemAddonType;
    addonPosition?: ListItemAddonPosition;
    /** @defaultValue `false` */
    addonForceWrap?: boolean;
    /** @defaultValue `false` */
    disableAddonCenteredMedia?: boolean;
}
export interface MenuItemCheckboxProps extends BaseMenuItemInputToggleProps, IndeterminateCheckboxProps {
}
export type MenuItemRadioProps = BaseMenuItemInputToggleProps;
/**
 * @remarks
 * \@since 2.8.0
 * \@since 6.0.0 Added additional props for styling the track and ball.
 */
export interface MenuItemSwitchProps extends BaseMenuItemInputToggleProps {
    trackProps?: PropsWithRef<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
    trackStyle?: CSSProperties;
    trackClassName?: string;
    ballProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
    ballStyle?: CSSProperties;
    ballClassName?: string;
}
/**
 * @remarks
 * \@since 2.8.0
 * \@since 6.0.0 Updated to be a union of the different props to enforce the
 * correct props based on `type`
 */
export type MenuItemInputToggleProps = (MenuItemCheckboxProps & {
    type: "checkbox";
}) | (MenuItemRadioProps & {
    type: "radio";
}) | (MenuItemSwitchProps & {
    type: "switch";
});
/**
 * **Client Component**
 *
 * This is a low-level component that should probably not be used externally and
 * instead the `MenuItemCheckbox`, `MenuItemRadio`, or `MenuItemSwitch` should
 * be used instead.
 *
 * @see {@link MenuItemCheckbox} for checkbox examples
 * @see {@link MenuItemRadio} for radio examples
 * @see {@link MenuItemSwitch} for switch examples
 * @remarks \@since 2.8.0
 */
export declare const MenuItemInputToggle: import("react").ForwardRefExoticComponent<MenuItemInputToggleProps & import("react").RefAttributes<HTMLLIElement>>;
