/** @packageDocumentation
 * @module Item
 */
import * as React from "react";
import { BadgeType, ConditionalStringValue, OnItemExecutedFunc, StringGetter } from "@itwin/appui-abstract";
import { CommonProps, IconSpec, SizeProps } from "@itwin/core-react";
import { Direction } from "@itwin/appui-layout-react";
import { ActionButtonItemDef } from "../shared/ActionButtonItemDef";
import { AnyItemDef } from "../shared/AnyItemDef";
import { GroupItemProps } from "../shared/GroupItemProps";
import { BaseItemState, ItemDefBase } from "../shared/ItemDefBase";
/** An Item that opens a group of items.
 * @public
 */
export declare class GroupItemDef extends ActionButtonItemDef {
    private static _sId;
    static groupIdPrefix: string;
    groupId: string;
    /** @deprecated in 3.6.  Used in UI1.0 only. */
    direction: Direction;
    itemsInColumn: number;
    items: AnyItemDef[];
    /** @deprecated in 3.6. Used in UI1.0 only. */
    directionExplicit: boolean;
    defaultActiveItemId?: string;
    /** @internal */
    overflow: boolean;
    private _itemList;
    private _itemMap;
    private _panelLabel;
    constructor(groupItemProps: GroupItemProps, onItemExecuted?: OnItemExecutedFunc);
    get id(): string;
    /** Get the panelLabel string */
    get panelLabel(): string;
    /** Set the panelLabel.
     * @param v A string or a function to get the string.
     */
    setPanelLabel(v: string | StringGetter | ConditionalStringValue): void;
    resolveItems(force?: boolean): void;
    getItemById(id: string): ItemDefBase | undefined;
    getItemByIndex(index: number): ItemDefBase | undefined;
    get itemCount(): number;
    execute(): void;
    /** @deprecated in 3.6. Used in UI1.0 only. */
    toolbarReactNode(index?: number): React.ReactNode;
}
interface ToolGroupItem {
    iconSpec?: IconSpec;
    label: string;
    trayId?: string;
    badgeType?: BadgeType;
}
interface ToolGroupTray {
    title: string;
    items: Map<string, ToolGroupItem>;
    groupItemDef: GroupItemDef;
}
declare type ToolGroupTrayMap = Map<string, ToolGroupTray>;
interface GroupItemComponentProps extends CommonProps {
    groupItemDef: GroupItemDef;
    onSizeKnown?: (size: SizeProps) => void;
}
interface GroupItemState extends BaseItemState {
    activeItemId: string;
    activeToolId: string;
    groupItemDef: GroupItemDef;
    trayId: string;
    backTrays: ReadonlyArray<string>;
    trays: ToolGroupTrayMap;
}
/** Group Item React component.
 * @internal
 */
export declare class GroupItem extends React.Component<GroupItemComponentProps, GroupItemState> {
    /** @internal */
    readonly state: Readonly<GroupItemState>;
    private _componentUnmounting;
    private _childSyncIds?;
    private _childRefreshRequired;
    private _trayIndex;
    private _closeOnPanelOpened;
    private _ref;
    constructor(props: GroupItemComponentProps);
    private _loadChildSyncIds;
    private _handleSyncUiEvent;
    componentDidMount(): void;
    componentWillUnmount(): void;
    shouldComponentUpdate(nextProps: GroupItemComponentProps, nextState: GroupItemState): boolean;
    private getGroupItemState;
    private resetTrayId;
    private generateTrayId;
    private processGroupItemDef;
    componentDidUpdate(prevProps: GroupItemComponentProps, _prevState: GroupItemState): void;
    private get _tray();
    private getTray;
    private _handleKeyDown;
    render(): React.ReactNode;
    private _handleOpenPanel;
    private _handleClick;
    private _handleDragInteractionClick;
    private _handleOverflowClick;
    private _handleDragInteractionOutsideClick;
    private _handleOutsideClick;
    private _handleToolActivatedEvent;
    private _handleToolPanelOpenedEvent;
    private closeGroupButton;
    private handleToolGroupItemClicked;
    private getGroupTray;
    getItemById(id: string): ItemDefBase | undefined;
    private _handleBack;
    private _handleExpanderClick;
}
/** Properties for the [[GroupButton]] React component
 * @deprecated in 3.5. Props of a deprecated component.
 * @public
 */
export interface GroupButtonProps extends GroupItemProps, CommonProps {
}
/** Group Button React component
 * @deprecated in 3.5. Use [GroupButton]($appui-abstract) instead.
 * @public
 */
export declare function GroupButton(props: GroupButtonProps): JSX.Element;
/** @internal */
export declare const getFirstItem: (groupItemDef: GroupItemDef) => AnyItemDef | undefined;
/** @internal */
export declare const getFirstItemId: (groupItemDef: GroupItemDef) => string;
export {};
//# sourceMappingURL=GroupItem.d.ts.map