import { ChangeDetectorRef, EventEmitter, OnInit, TemplateRef } from '@angular/core';
import { DefaultValueAccessorComponent, DsfrOption, DsfrSeverity, DsfrSeverityConst } from '@edugouvfr/ngx-dsfr';
import { DsfrSelectionMode } from '../../models/selection-mode.type';
import * as i0 from "@angular/core";
export declare abstract class AbstractSelectComponent<T> extends DefaultValueAccessorComponent<any[] | any | undefined> implements OnInit {
    /** Template pour l'ensemble des valeurs sélectionnées lorsque maxDisplayOptions est atteint */
    maxDisplayOptionsTemplate: TemplateRef<any>;
    /** Template pour chaque valeur sélectionnée */
    selectedOptionTemplate: TemplateRef<any>;
    /** Template des labels des options */
    optionTemplate: TemplateRef<any>;
    /** La liste prend une taille fluide selon la taille des options qu'elle contient (par défaut : taille du select) */
    autoWidthDropdown: boolean;
    /** Les options sélectionnées sont affichées sous forme de tags supprimables */
    clearableOptions: boolean;
    /** Id du composant, généré par défaut */
    selectId: string;
    /** Hauteur maximale avant le scroll sur la liste déroulante. */
    scrollHeight: string;
    /** Label du champ de sélection (prioritaire sur le slot label) */
    label: string;
    /** Texte de description additionnel */
    hint: string;
    /** Nombre max. d'options sélectionnées affichées */
    maxDisplayOptions: number;
    /** Nombre max. d'options sélectionnables */
    maxSelectedOptions: number | undefined;
    /** Afficher la case à cocher tout sélectionner */
    showSelectAll: boolean;
    /** Attacher l'élément de liste déroulante au 'body' ou a un container (réf. vers un élément #div ou nom de la classe du parent) */
    appendTo: 'body' | HTMLElement | string | undefined;
    /** Afficher la barre de recherche (filtre sur les options) */
    showSearch: boolean;
    /** Afficher un bouton pour vider le champ de la barre de recherche */
    showClearSearch: boolean;
    /** Placeholder pour le champ de sélection */
    placeHolder: string | undefined;
    /** Placeholder pour le champ de recherche */
    searchMessage: string | undefined;
    /** Placeholder pour le champ de recherche */
    noResultsMessage: string | undefined;
    /** Afficher un état de chargement */
    loading: boolean;
    /**
     * Message d'information lié au composant
     */
    message: string;
    /**
     * Représente la sévérité du message
     */
    messageSeverity: DsfrSeverity;
    /** Activer le virtual scroll  */
    virtualScroll: boolean;
    /** Surcharger la hauteur d'un item dans le cas du virtual scroll. Par défaut 32px. */
    virtualScrollItemHeight: number;
    /** Propriété CSS z-index de la liste, par défaut supérieur aux composants 'lifted' DSFR */
    zIndex: number;
    /** Vider le champ de recherche lorsque la liste est cachée */
    clearSearchOnHide: boolean;
    /** 👓 Correspond à l'attribut `aria-invalid` */
    ariaInvalid: boolean;
    /** 👓 Correspond à l'attribut `aria-required` */
    ariaRequired: boolean;
    /**
     * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.
     */
    labelSrOnly: boolean;
    /** Liste d'options sélectionnée modifiée */
    selectionChange: EventEmitter<any[] | undefined>;
    /** @internal texte pour filtrer */
    searchText: string;
    /** @internal liste des options sélectionnées */
    selectedOptions: T[];
    /** @internal toutes les options visibles sélectionnées */
    isCheckedSelectAll: boolean;
    /** @internal afficher le dropdown (recherche et liste déroulante) */
    displayDropdown: boolean;
    /** @internal liste d'options filtrées */
    optionsFilter: T[];
    /** @internal Sauvegarder l'index de la premiere option sélectionnée pour la gestion du focus */
    indexFirstSelected: number | null;
    /**@internal le mode de sélection est single */
    isSingleMode: boolean;
    protected cd: ChangeDetectorRef;
    /** @internal   Afin de pouvoir utiliser le type dans l'HTML*/
    protected readonly severityConst: typeof DsfrSeverityConst;
    /** @internal */
    protected _options: T[] | undefined;
    /** @internal */
    protected _selectionMode: DsfrSelectionMode;
    /** @internal compareWith reprise de l'implémentation angular SelectControlValueAccessor */
    protected _compareWith: (o1: any, o2: any) => boolean;
    private i18n;
    /** @internal */
    constructor();
    /** @internal */
    get options(): any[] | undefined;
    /** @internal */
    get showCheckboxes(): boolean;
    /** @internal */
    get selectionMode(): DsfrSelectionMode;
    /**
     * Positionne un message d'erreur
     * @deprecated utiliser message et messageSeverity
     */
    set error(value: string);
    /**
     * Positionne un message de validation
     * @deprecated utiliser message et messageSeverity
     */
    set valid(value: string);
    /** Liste des options disponibles. */
    set options(val: any[] | undefined);
    /** Mode de sélection. Checkbox, multiple ou single */
    set selectionMode(mode: DsfrSelectionMode);
    /** Personnalisation de la comparaison. Fonction à 2 arguments: val1 et val2 (les values des deux options).
    Si compareWith est fourni, sélection de l'option selon le retour de la fonction.*/
    set compareWith(fn: (v1: any, v2: any) => boolean);
    ngOnInit(): void;
    /**  @internal */
    getLabelKeyOptionsSelected(): string;
    /** @internal */
    setDisabledState(isDisabled: boolean): void;
    /**
     * Réinitialiser le champ de recherche
     @internal
    */
    resetSearchInput(): void;
    /**
     * Ouverture du multiselect sur arrow down
     *  @internal */
    onButtonKeyDown(e: KeyboardEvent): void;
    /** @internal */
    toggleDropdown(e?: any): void;
    /** @internal */
    hide(): void;
    /** @internal **/
    protected setSelectionMode(mode: DsfrSelectionMode): void;
    /**
     * Sélectionner ou déselectionner toutes les options
     * Si maxSelectedOptions est défini, sélection uniquement des (max) premières options
     @internal
    */
    abstract selectAll(): void;
    /**
     * Sélection ou désélection d'une option
     * @internal */
    abstract onOptionClick(e: any, option: DsfrOption): void;
    /**
     * Filtrer les options selon la fonction de recherche
     * @internal */
    abstract onSearch(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractSelectComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AbstractSelectComponent<any>, "ng-component", never, { "autoWidthDropdown": { "alias": "autoWidthDropdown"; "required": false; }; "clearableOptions": { "alias": "clearableOptions"; "required": false; }; "selectId": { "alias": "selectId"; "required": false; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; }; "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "maxDisplayOptions": { "alias": "maxDisplayOptions"; "required": false; }; "maxSelectedOptions": { "alias": "maxSelectedOptions"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showClearSearch": { "alias": "showClearSearch"; "required": false; }; "placeHolder": { "alias": "placeHolder"; "required": false; }; "searchMessage": { "alias": "searchMessage"; "required": false; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messageSeverity": { "alias": "messageSeverity"; "required": false; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; }; "virtualScrollItemHeight": { "alias": "virtualScrollItemHeight"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "clearSearchOnHide": { "alias": "clearSearchOnHide"; "required": false; }; "ariaInvalid": { "alias": "ariaInvalid"; "required": false; }; "ariaRequired": { "alias": "ariaRequired"; "required": false; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; }; "error": { "alias": "error"; "required": false; }; "valid": { "alias": "valid"; "required": false; }; "options": { "alias": "options"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; }, { "selectionChange": "selectionChange"; }, ["maxDisplayOptionsTemplate", "selectedOptionTemplate", "optionTemplate"], never, true, never>;
}
