import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { OnInit, TemplateRef } from '@angular/core';
import { DsfrOption, DsfrSelectOption } from '@edugouvfr/ngx-dsfr';
import { AbstractSelectComponent } from '../shared/components';
import * as i0 from "@angular/core";
interface OptionsViewModel extends DsfrOption {
    isGroup?: boolean;
    groupId?: number;
}
export declare class DsfrMultiselectComponent extends AbstractSelectComponent<DsfrSelectOption> implements OnInit {
    /** @internal */
    viewport: CdkVirtualScrollViewport;
    /** Template des labels des options */
    groupTemplate: TemplateRef<any>;
    /** @internal liste d'options filtrées */
    optionsFilter: DsfrSelectOption[];
    /** Nombre de résultats après une recherche (pas de valeur initiale = a11y) */
    protected nbFilterResults: import("@angular/core").WritableSignal<number>;
    protected readonly containerListClass = "dsfrx-multiselect__list";
    protected optionsFlatten: OptionsViewModel[];
    /**@internal */
    get options(): DsfrSelectOption[] | undefined;
    /** Personnalisation de la fonction de recherche pour filtrer les options. Fonction à 2 arguments : option (DsfrSelectOption) et texte cherché (string) */
    set searchFn(fn: (o: DsfrOption, text: string) => boolean);
    /** Liste des options disponibles. */
    set options(val: DsfrSelectOption[] | undefined);
    /**
     * Mise a jour de la valeur de selectedOptions et value programmaticalement (ex. à l'init reactive form)
     * @param value
     * @internal
     */
    writeValue(value: any): void;
    /**
     * Sélection ou désélection d'une option
     * @internal */
    onOptionClick(e: any, option: DsfrOption): void;
    /** @internal */
    isSelected(option: DsfrOption): boolean;
    /**
     * Interaction au clavier dans la liste déroulante
     * Les flêches permettent de naviguer d'une option à l'autre en modifiant le focus.
     * A la fin ou au début de la liste on boucle sur la première ou dernière option
     * @internal */
    onOptionKeydown(event: KeyboardEvent, option: DsfrOption): void;
    /**
     * Sélectionner ou déselectionner toutes les options
     * Si maxSelectedOptions est défini, sélection uniquement des (max) premières options
     @internal
    */
    selectAll(): void;
    /**
     * Filtrer les options selon la fonction de recherche et conserver la structure. Les labels des groupes sont ignorés.
     * @internal */
    onSearch(): void;
    /**
     * Filtrer les options selon la fonction de recherche et conserver la structure. Les labels des groupes sont ignorés.
     * @internal */
    onSearchFlatten(): void;
    /** @internal */
    hasisAllSelected(): boolean;
    /** @internal */
    trackByIndex: (index: number) => number;
    /** @internal */
    clearOption(event: {
        nativeEvent: Event;
        option: DsfrOption;
    }): void;
    /** @internal */
    clearAllOptions(): void;
    protected handleListFocus(el: HTMLElement): void;
    /** Index du premier element sélectionné pour positionner le focus et aria */
    private getFirstIndexSelected;
    /** Sélection ou déselection d'une option en mode multiple/checkbox */
    private optionClickMultiple;
    /** Sélection ou déselection d'une option en mode single */
    private optionClickSingle;
    /** Fonction de recherche par défaut */
    private _searchFn;
    /** Set focus on element and add aria-activedescendant attribute to parent */
    private setFocusElement;
    private scrollForVirtualScroll;
    /** Gestion à plat du tableau des options en cas de groupe */
    private flattenOptions;
    static ɵfac: i0.ɵɵFactoryDeclaration<DsfrMultiselectComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DsfrMultiselectComponent, "dsfr-ext-multiselect, dsfrx-multiselect,", never, { "searchFn": { "alias": "searchFn"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, {}, ["groupTemplate"], ["[label]"], true, never>;
}
export {};
