import { AfterViewInit, DestroyRef, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
import { BehaviorSubject, Observable, Subscription } from 'rxjs';
import { MatMenuTrigger } from '@angular/material/menu';
import { ItemRecord, ItemRecords$ } from '../../../../core';
import { SelectionModel } from '../../../classes';
import { FormControlExtended } from '@al00x/forms';
import * as i0 from "@angular/core";
interface SelectItem<T> extends ItemRecord<T> {
    optional?: boolean;
    type?: 'selectAll';
}
export declare class CacSelectOptionsComponent<T> implements OnChanges, AfterViewInit, OnDestroy {
    destroyRef: DestroyRef;
    readonly SEARCH_OR_ADD_TEXT: string;
    readonly SEARCH_TEXT: string;
    readonly N_ITEMS_SELECTED_TEXT: string;
    readonly CHOOSE_OPTIONAL_VALUE_TEXT: string;
    readonly LOADING_TEXT: string;
    readonly NO_ITEMS_AVAILABLE_TEXT: string;
    trigger: MatMenuTrigger;
    wrapperEl: ElementRef<HTMLDivElement>;
    filterInputEl?: ElementRef<HTMLInputElement>;
    panelEl: ElementRef<HTMLDivElement>;
    containerEl: ElementRef<HTMLDivElement>;
    control: FormControlExtended;
    items?: ItemRecords$<T, any> | undefined;
    requiredCharactersForFilter: number;
    filterStrategy: 'startWith' | 'includes';
    optional?: boolean;
    searchable?: boolean;
    menuClass?: string;
    multiple?: boolean;
    showIcons?: boolean;
    categories?: ItemRecords$<string | number, any> | undefined;
    menuClosed: EventEmitter<any>;
    onSelect: EventEmitter<T>;
    onKeydown: EventEmitter<KeyboardEvent>;
    onMultiSelect: EventEmitter<ItemRecord<T, unknown>[]>;
    originalItems$: BehaviorSubject<ItemRecord<T, unknown>[] | undefined>;
    categories$: BehaviorSubject<ItemRecord<string | number, unknown>[] | undefined>;
    filteredItems$: BehaviorSubject<SelectItem<T>[] | undefined>;
    itemsUpdateSub: Subscription;
    categoriesUpdateSub: Subscription;
    controlSub: Subscription;
    customInputSub: Subscription;
    currentItemControl: FormControlExtended<SelectItem<T> | null | undefined, any>;
    filterControl: FormControlExtended<string, any>;
    categoryControl: FormControlExtended<string | number | undefined, any>;
    isLoading$: Observable<boolean>;
    isClosing: boolean;
    isOpening: boolean;
    private _initialValue?;
    private _instanceOfItems?;
    private _recentOptionalItems;
    private _customInput?;
    protected _selectionModel: SelectionModel<SelectItem<any>>;
    currentFocusIndex: import("@angular/core").WritableSignal<number>;
    protected _showingOptionalValue: import("@angular/core").WritableSignal<boolean>;
    constructor();
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    selectItem(item: SelectItem<T>, e?: MouseEvent): void;
    selectFirstItem(): void;
    selectFocusedItem(): void;
    open(): void;
    close(): void;
    focusNextItem(): void;
    focusPrevItem(): void;
    onFilterKeyDown(e: KeyboardEvent): void;
    setElementToFocus(el: HTMLInputElement): void;
    private invokeTypedItemAction;
    private scrollToFocusedIndex;
    private setFocusIndex;
    private updateFocusIndex;
    private itemToIndex;
    private indexToItem;
    private prepareClose;
    private setCurrentItemByValue;
    private updateSelectionModel;
    private markAsTouched;
    private markAsDirty;
    private valueTypeTransform;
    static ɵfac: i0.ɵɵFactoryDeclaration<CacSelectOptionsComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<CacSelectOptionsComponent<any>, "cac-select-options", never, { "control": { "alias": "control"; "required": false; }; "items": { "alias": "items"; "required": false; }; "requiredCharactersForFilter": { "alias": "requiredCharactersForFilter"; "required": false; }; "filterStrategy": { "alias": "filterStrategy"; "required": false; }; "optional": { "alias": "optional"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "menuClass": { "alias": "menuClass"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "showIcons": { "alias": "showIcons"; "required": false; }; "categories": { "alias": "categories"; "required": false; }; }, { "menuClosed": "menuClosed"; "onSelect": "onSelect"; "onKeydown": "onKeydown"; "onMultiSelect": "onMultiSelect"; }, never, never, true, never>;
}
export {};
