import { CommandMenuPassThrough, CommandMenuSearchChangeEvent, CommandMenuItemSelectEvent, CommandMenuItemTemplateContext, CommandMenuHeaderTemplateContext, CommandMenuFooterTemplateContext, CommandMenuEmptyMessageTemplateContext } from 'primeng/types/commandmenu';
export * from 'primeng/types/commandmenu';
import * as _angular_core from '@angular/core';
import { TemplateRef, ElementRef } from '@angular/core';
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 { Menu } from 'primeng/menu';
import { BaseStyle } from 'primeng/base';

declare class CommandMenuStyle extends BaseStyle {
    name: string;
    style: string;
    classes: {
        root: string;
        header: string;
        input: string;
        list: string;
        emptyMessage: string;
        footer: string;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandMenuStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<CommandMenuStyle>;
}
/**
 *
 * CommandMenu is a search-driven command palette component.
 *
 * [Live Demo](https://www.primeng.org/commandmenu/)
 *
 * @module commandmenustyle
 *
 */
declare enum CommandMenuClasses {
    /**
     * Class name of the root element
     */
    root = "p-commandmenu",
    /**
     * Class name of the header element
     */
    header = "p-commandmenu-header",
    /**
     * Class name of the input element
     */
    input = "p-commandmenu-input",
    /**
     * Class name of the empty message element
     */
    emptyMessage = "p-commandmenu-empty-message",
    /**
     * Class name of the footer element
     */
    footer = "p-commandmenu-footer"
}
interface CommandMenuStyleType extends BaseStyle {
}

/**
 * CommandMenu is a search-driven command palette component.
 * @group Components
 */
declare class CommandMenu extends BaseComponent<CommandMenuPassThrough> {
    componentName: string;
    bindDirectiveInstance: Bind;
    onAfterViewChecked(): void;
    /**
     * An array of menu items to display.
     * @group Props
     */
    model: _angular_core.InputSignal<MenuItem[] | undefined>;
    /**
     * Two-way bound search value.
     * @group Props
     */
    search: _angular_core.ModelSignal<string>;
    /**
     * Custom filter function. Receives (item, search) and returns a number (0 = no match).
     * @group Props
     */
    filter: _angular_core.InputSignal<((item: MenuItem, search: string) => number) | undefined>;
    /**
     * Text to display when there are no results. Defaults to global value in i18n translation configuration.
     * @group Props
     */
    emptyMessage: _angular_core.InputSignal<string | undefined>;
    /**
     * Placeholder text for the search input.
     * @group Props
     */
    placeholder: _angular_core.InputSignal<string | undefined>;
    /**
     * Defines a string that labels the input for accessibility.
     * @group Props
     */
    ariaLabel: _angular_core.InputSignal<string | undefined>;
    /**
     * Identifies the element that labels the input for accessibility.
     * @group Props
     */
    ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
    /**
     * Inline style of the menu.
     * @group Props
     */
    menuStyle: _angular_core.InputSignal<{
        [klass: string]: any;
    } | undefined>;
    /**
     * Style class of the menu.
     * @group Props
     */
    menuStyleClass: _angular_core.InputSignal<string | undefined>;
    /**
     * Callback to invoke when the search value changes.
     * @param {CommandMenuSearchChangeEvent} event - Custom search change event.
     * @group Emits
     */
    onSearchChange: _angular_core.OutputEmitterRef<CommandMenuSearchChangeEvent>;
    /**
     * Callback to invoke when a menu item is selected.
     * @param {CommandMenuItemSelectEvent} event - Custom item select event.
     * @group Emits
     */
    onSelect: _angular_core.OutputEmitterRef<CommandMenuItemSelectEvent>;
    /**
     * Custom item template.
     * @param {CommandMenuItemTemplateContext} context - item context.
     * @group Templates
     */
    itemTemplate: _angular_core.Signal<TemplateRef<CommandMenuItemTemplateContext<any>> | undefined>;
    /**
     * Custom header template.
     * @param {CommandMenuHeaderTemplateContext} context - header context.
     * @group Templates
     */
    headerTemplate: _angular_core.Signal<TemplateRef<CommandMenuHeaderTemplateContext> | undefined>;
    /**
     * Custom footer template.
     * @param {CommandMenuFooterTemplateContext} context - footer context.
     * @group Templates
     */
    footerTemplate: _angular_core.Signal<TemplateRef<CommandMenuFooterTemplateContext> | undefined>;
    /**
     * Custom empty message template.
     * @param {CommandMenuEmptyMessageTemplateContext} context - empty message context.
     * @group Templates
     */
    emptyMessageTemplate: _angular_core.Signal<TemplateRef<CommandMenuEmptyMessageTemplateContext> | undefined>;
    menuViewChild: _angular_core.Signal<Menu | undefined>;
    searchInputViewChild: _angular_core.Signal<ElementRef<any> | undefined>;
    _componentStyle: CommandMenuStyle;
    private _internalId;
    $id: _angular_core.Signal<string>;
    listId: _angular_core.Signal<string>;
    private translation;
    emptyMessageText: _angular_core.Signal<any>;
    focusedOptionId: _angular_core.Signal<string | number | null>;
    /**
     * Filtered model: applies score-based filter with sorting by relevance.
     */
    filteredModel: _angular_core.Signal<MenuItem[]>;
    menuModel: _angular_core.Signal<MenuItem[]>;
    hasVisibleItems: _angular_core.Signal<boolean>;
    onSearchKeyDown(event: KeyboardEvent): void;
    onSearchInput(event: Event): void;
    defaultFilter(item: MenuItem, search: string): number;
    focusInput(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandMenu, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandMenu, "p-commandmenu, p-command-menu", never, { "model": { "alias": "model"; "required": false; "isSignal": true; }; "search": { "alias": "search"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "menuStyle": { "alias": "menuStyle"; "required": false; "isSignal": true; }; "menuStyleClass": { "alias": "menuStyleClass"; "required": false; "isSignal": true; }; }, { "search": "searchChange"; "onSearchChange": "onSearchChange"; "onSelect": "onSelect"; }, ["itemTemplate", "headerTemplate", "footerTemplate", "emptyMessageTemplate"], never, true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}
declare class CommandMenuModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandMenuModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<CommandMenuModule, never, [typeof CommandMenu, typeof i2.SharedModule], [typeof CommandMenu, typeof i2.SharedModule]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<CommandMenuModule>;
}

export { CommandMenu, CommandMenuClasses, CommandMenuModule, CommandMenuStyle };
export type { CommandMenuStyleType };
