import Collection from "@arcgis/core/core/Collection";
import type { EntityBaseProperties } from "../Entity.js";
import { EntityBase } from "../Entity.js";
import type { InitializableBase } from "../support/InitializableBase.js";
import type { PropertyDefs } from "../support/Serializable.js";
import type { MenuItemProperties } from "./MenuItem.js";
import { MenuItem } from "./MenuItem.js";
import type { MenuFactory } from "./support/MenuFactory.js";
/**
 * Properties that can be passed into the constructor for
 * {@link menus/Menu!Menu}.
 */
export interface MenuProperties extends EntityBaseProperties {
    /**
     * See {@link menus/Menu!Menu.items}.
     */
    items?: (MenuItem | MenuItemProperties)[];
    /**
     * See {@link menus/Menu!Menu.title}.
     */
    title?: string;
}
/**
 * A set of actions that can be performed by a user.
 */
export declare class Menu<TMenuItemProps extends MenuItemProperties = MenuItemProperties, TMenuProps extends MenuProperties = MenuProperties, TMenuItem extends MenuItem<TMenuItemProps, TMenuProps> = MenuItem<TMenuItemProps, TMenuProps>> extends EntityBase<TMenuProps> {
    /**
     * The parent menu item of this menu.
     */
    get parentItem(): TMenuItem;
    /**
     * The factory that will be used whenever a new menu needs to be created.
     * Applications can supply their own factory to customize menu creation.
     */
    static factory: MenuFactory;
    /**
     * A human-readable title for this menu.
     */
    get title(): string | undefined;
    set title(title: string | undefined);
    /**
     * The list of items in the menu.
     */
    get items(): Collection<TMenuItem>;
    /**
     * @inheritDoc
     */
    protected readonly _itemType: string;
    private _title;
    private readonly _items;
    /**
     * Creates a new instance of {@link menus/Menu!Menu}.
     *
     * @param properties An object containing initial property values to set.
     */
    constructor(properties?: TMenuProps);
    /**
     * Creates the appropriate subclass of {@link menus/Menu!Menu} based on the
     * supplied properties. Applications can customize the default creation
     * behavior by supplying a custom factory object (see
     * {@link menus/Menu!Menu.factory}).
     *
     * @param properties The menu properties.
     */
    static create<TMenuProps extends MenuProperties>(properties: TMenuProps): Menu;
    protected _initializableChildCollections(): IterableIterator<Collection<InitializableBase>>;
    protected _getSerializableProperties(): PropertyDefs<TMenuProps>;
}
