import { PanelMenuPassThrough, PanelMenuItemTemplateContext } from 'primeng/types/panelmenu';
export * from 'primeng/types/panelmenu';
import * as _angular_core from '@angular/core';
import { TemplateRef } from '@angular/core';
import { MotionOptions } from '@primeuix/motion';
import * as i2 from 'primeng/api';
import { MenuItem } from 'primeng/api';
import { BaseComponent } from 'primeng/basecomponent';
import * as i1 from 'primeng/bind';
import { Bind } from 'primeng/bind';
import { BaseStyle } from 'primeng/base';

/**
 *
 * PanelMenu is a hybrid of Accordion and Tree components.
 *
 * [Live Demo](https://www.primeng.org/panelmenu/)
 *
 * @module panelmenustyle
 *
 */
declare enum PanelMenuClasses {
    /**
     * Class name of the root element
     */
    root = "p-panelmenu",
    /**
     * Class name of the panel element
     */
    panel = "p-panelmenu-panel",
    /**
     * Class name of the header element
     */
    header = "p-panelmenu-header",
    /**
     * Class name of the header content element
     */
    headerContent = "p-panelmenu-header-content",
    /**
     * Class name of the header link element
     */
    headerLink = "p-panelmenu-header-link",
    /**
     * Class name of the header icon element
     */
    headerIcon = "p-panelmenu-header-icon",
    /**
     * Class name of the header label element
     */
    headerLabel = "p-panelmenu-header-label",
    /**
     * Class name of the content container element
     */
    contentContainer = "p-panelmenu-content-container",
    /**
     * Class name of the content element
     */
    content = "p-panelmenu-content",
    /**
     * Class name of the root list element
     */
    rootList = "p-panelmenu-root-list",
    /**
     * Class name of the item element
     */
    item = "p-panelmenu-item",
    /**
     * Class name of the item content element
     */
    itemContent = "p-panelmenu-item-content",
    /**
     * Class name of the item link element
     */
    itemLink = "p-panelmenu-item-link",
    /**
     * Class name of the item icon element
     */
    itemIcon = "p-panelmenu-item-icon",
    /**
     * Class name of the item label element
     */
    itemLabel = "p-panelmenu-item-label",
    /**
     * Class name of the submenu icon element
     */
    submenuIcon = "p-panelmenu-submenu-icon",
    /**
     * Class name of the submenu element
     */
    submenu = "p-panelmenu-submenu",
    separator = "p-menuitem-separator"
}
declare class PanelMenuStyle extends BaseStyle {
    name: string;
    style: string;
    classes: {
        root: () => string[];
        panel: string;
        header: ({ instance, item }: {
            instance: any;
            item: any;
        }) => (string | {
            'p-panelmenu-header-active': any;
            'p-disabled': any;
        })[];
        headerContent: string;
        headerLink: string;
        headerIcon: string;
        headerLabel: string;
        contentContainer: ({ instance, processedItem }: {
            instance: any;
            processedItem: any;
        }) => (string | {
            'p-panelmenu-expanded': any;
        })[];
        contentWrapper: string;
        content: string;
        rootList: string;
        item: ({ instance, processedItem }: {
            instance: any;
            processedItem: any;
        }) => (string | {
            'p-focus': any;
            'p-disabled': any;
        })[];
        itemContent: string;
        itemLink: string;
        itemIcon: string;
        itemLabel: string;
        submenuIcon: string;
        submenu: string;
        separator: string;
        badge: string;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelMenuStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<PanelMenuStyle>;
}
interface PanelMenuStyle extends BaseStyle {
}

/**
 * PanelMenu is a hybrid of Accordion and Tree components.
 * @group Components
 * @deprecated Use Menu component with `toggleable` option instead.
 */
declare class PanelMenu extends BaseComponent<PanelMenuPassThrough> {
    componentName: string;
    constructor();
    /**
     * An array of menuitems.
     * @group Props
     */
    model: _angular_core.InputSignal<MenuItem[] | undefined>;
    /**
     * Whether multiple tabs can be activated at the same time or not.
     * @group Props
     */
    multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * The motion options.
     * @group Props
     */
    motionOptions: _angular_core.InputSignal<MotionOptions | undefined>;
    computedMotionOptions: _angular_core.Signal<MotionOptions>;
    /**
     * Current id state as a string.
     * @group Props
     */
    id: _angular_core.InputSignal<string | undefined>;
    /**
     * Index of the element in tabbing order.
     * @group Props
     */
    tabindex: _angular_core.InputSignalWithTransform<number, unknown>;
    /**
     * Template option of submenu icon.
     * @group Templates
     */
    submenuIconTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Template option of header icon.
     * @group Templates
     */
    headerIconTemplate: _angular_core.Signal<TemplateRef<void> | undefined>;
    /**
     * Template option of item.
     * @param {PanelMenuItemTemplateContext} context - item context.
     * @see {@link PanelMenuItemTemplateContext}
     * @group Templates
     */
    itemTemplate: _angular_core.Signal<TemplateRef<PanelMenuItemTemplateContext> | undefined>;
    activeItem: _angular_core.WritableSignal<MenuItem | null>;
    _componentStyle: PanelMenuStyle;
    bindDirectiveInstance: Bind;
    $pcPanelMenu: PanelMenu | undefined;
    private _internalId;
    $id: _angular_core.Signal<string>;
    onAfterViewChecked(): void;
    getPTOptions(key: string, item: MenuItem, index: number): any;
    /**
     * Collapses open panels.
     * @group Method
     */
    collapseAll(): void;
    changeActiveItem(_event: Event, item: MenuItem, _index?: number, selfActive?: boolean): void;
    getItemProp(item: MenuItem, name: string): any;
    getItemLabel(item: MenuItem): any;
    isItemActive(item: MenuItem): boolean | undefined;
    isItemVisible(item: MenuItem): boolean;
    isItemDisabled(item: MenuItem): any;
    isItemGroup(item: MenuItem): boolean;
    getRouterLinkActiveOptions(item: MenuItem): any;
    hasIcon(item: MenuItem): boolean;
    shouldEscapeLabel(item: MenuItem): boolean;
    hasBadge(item: MenuItem): boolean;
    getItemTemplateContext(item: MenuItem): {
        $implicit: MenuItem;
    };
    getPanelId(index: number, item?: MenuItem): string;
    getHeaderId(item: MenuItem, index: number): string;
    getContentId(item: MenuItem, index: number): string;
    updateFocusedHeader(event: {
        originalEvent: Event;
        focusOnNext?: boolean;
        selfCheck?: boolean;
    }): void;
    changeFocusedHeader(element: HTMLElement | null): void;
    findNextHeader(panelElement: Element | null, selfCheck?: boolean): Element | null;
    findPrevHeader(panelElement: Element | null, selfCheck?: boolean): Element | null;
    findFirstHeader(): HTMLElement | null;
    findLastHeader(): HTMLElement | null;
    onHeaderClick(event: MouseEvent, item: MenuItem, index: number): void;
    onHeaderKeyDown(event: KeyboardEvent, item: MenuItem, index: number): void;
    onHeaderArrowDownKey(event: KeyboardEvent): void;
    onHeaderArrowUpKey(event: KeyboardEvent): void;
    onHeaderHomeKey(event: KeyboardEvent): void;
    onHeaderEndKey(event: KeyboardEvent): void;
    onHeaderEnterKey(event: KeyboardEvent, item: MenuItem, index: number): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelMenu, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<PanelMenu, "p-panelmenu, p-panel-menu", never, { "model": { "alias": "model"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "motionOptions": { "alias": "motionOptions"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; }, {}, ["submenuIconTemplate", "headerIconTemplate", "itemTemplate"], never, true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}
declare class PanelMenuModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PanelMenuModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<PanelMenuModule, never, [typeof PanelMenu, typeof i2.SharedModule], [typeof PanelMenu, typeof i2.SharedModule]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<PanelMenuModule>;
}

export { PanelMenu, PanelMenuClasses, PanelMenuModule, PanelMenuStyle };
