/** @packageDocumentation
 * @module Item
 */
import * as React from "react";
import type { AbstractMenuItemProps, StringGetter } from "@itwin/appui-abstract";
import { ConditionalBooleanValue } from "@itwin/appui-abstract";
import type { BadgeType, CommonProps, IconSpec } from "@itwin/core-react";
import type { BadgeKind } from "@itwin/core-react/internal";
import type { ActionButtonItemDef } from "./ActionButtonItemDef.js";
import { ItemDefBase } from "./ItemDefBase.js";
import type { CommandItemProps } from "./ItemProps.js";
import type { ConditionalStringValue } from "./ConditionalValue.js";
/** Properties for context menu items.
 * @public
 */
export interface CursorMenuItemProps extends CommonProps {
    /** The id for the menu item. */
    id: string;
    /** Icon to display. */
    iconNode?: React.ReactNode;
    /** Icon to display.
     * @deprecated in 4.16.0. Use {@link CursorMenuItemProps.iconNode} instead.
     */
    iconSpec?: IconSpec;
    /** The item to execute when this item is invoked. Either 'item', 'submenu' or `execute` must be specified.
     * @deprecated in 4.15.0. Use properties of this object instead.
     */
    item?: CommandItemProps;
    /** Function to execute. */
    execute?: () => any;
    /** Nested array of item props. Either 'item', 'submenu' or 'execute' must be specified. */
    submenu?: CursorMenuItemProps[];
    /** Icon to display on right side of the menu item.
     * Name of icon WebFont entry or if specifying an imported SVG symbol use "webSvg:" prefix  to imported symbol Id.
     * @deprecated in 5.4.0. Use {@link CursorMenuItemProps.iconRightNode} instead.
     */
    iconRight?: string | ConditionalStringValue;
    /** Icon to display on right side of the menu item. */
    iconRightNode?: React.ReactNode;
    /** if true component will be hidden - defaults to false */
    isHidden?: boolean | ConditionalBooleanValue;
    /** if true component will be disabled - defaults to false */
    isDisabled?: boolean | ConditionalBooleanValue;
    /** if set, component will be considered "active" an will display an "active stripe" - defaults to false */
    isActive?: boolean;
    /** if set, component will be considered selected but will NOT display an "active stripe" - defaults to false. Typically used by buttons that toggle between two states. */
    isPressed?: boolean;
    /** can be used by application to store miscellaneous data. */
    applicationData?: any;
    /** Badge to be overlaid on the item.
     * @deprecated in 4.16.0. Use `badgeKind` property instead.
     */
    badgeType?: BadgeType;
    /** Specifies the kind of badge, if any, to be overlaid on the item. */
    badgeKind?: BadgeKind;
    /** Abstract icon definition. Used when creating itemDef from abstract item (ie. MenuItem).
     * @deprecated in 4.16.0. Use {@link CursorMenuItemProps.iconNode} instead.
     */
    icon?: IconSpec;
    /** if set, it is used to explicitly set the label shown by a component. */
    label?: string | StringGetter | ConditionalStringValue;
    /** if set, it is used to define a key that is used to look up a localized string. This value is used only if label is not explicitly set. */
    labelKey?: string;
    /** if set, it is used to explicitly set the description shown by a component. */
    description?: string | StringGetter | ConditionalStringValue;
    /** if set, it is used to define a key that is used to look up a localized string. This value is used only if description is not explicitly set. */
    descriptionKey?: string;
    /** used to explicitly set the tooltip shown by a component. */
    tooltip?: string | StringGetter | ConditionalStringValue;
    /** if set, it is used to define a key that is used to look up a localized string. This value is used only if label is not explicitly set. */
    tooltipKey?: string;
}
/** Menu Item Properties
 * @public
 * @deprecated in 4.11.0. Please use {@link CursorMenuItemProps}.
 */
export type MenuItemProps = AbstractMenuItemProps;
/** Menu Item
 * @alpha
 * @deprecated in 4.15.0. Used in a deprecated class {@link MenuItemHelpers}.
 */
export declare class MenuItem extends ItemDefBase {
    private _id;
    private _actionItem?;
    private _submenu;
    private _onSelection?;
    private _execute?;
    /** onSelection is an optional parameter typically supplied to allow menu parent to close context menu when a menu item is selected. */
    constructor(props: CursorMenuItemProps, onSelection?: () => void);
    get id(): string;
    get submenu(): MenuItem[];
    get actionItem(): ActionButtonItemDef | undefined;
    iconRightSpec?: IconSpec;
    itemPicked(): void;
}
/** Menu Item helper methods
 * @alpha
 * @deprecated in 4.15.0. Use {@link @itwin/core-react#ContextMenuItem} and {@link @itwin/core-react#ContextSubMenu} components.
 */
export declare class MenuItemHelpers {
    static createMenuItems(itemPropsList: CursorMenuItemProps[], onSelection?: () => void): MenuItem[];
    static createMenuItemNodes(itemList: MenuItem[]): React.ReactNode[];
    private static createMenuItemNode;
}
//# sourceMappingURL=MenuItem.d.ts.map