import * as _angular_core from '@angular/core';
import { OnInit, AfterViewInit, OnDestroy, TemplateRef, ElementRef, EventEmitter, OnChanges, Signal, AfterContentInit, WritableSignal, ChangeDetectorRef, ViewContainerRef, Renderer2, DestroyRef } from '@angular/core';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { DefaultControlComponent, DsfrButtonType, DsfrButtonVariant, DsfrSelectOption, DsfrLink, DsfrSeverity, DsfrButtonComponent, DsfrLinkComponent, DsfrSize, DsfrButton, DsfrOption, DefaultValueAccessorComponent, DsfrSeverityConst, DsfrI18nService, DsfrModalAction, DsfrButtonVariantConst, DsfrHeadingLevel as DsfrHeadingLevel$1, DsfrBadge, DsfrTableOptions, DsfrColumn, DsfrSegmentedControl, DsfrTableState, DsfrTablePaginationEvent, DsfrSortColumn, DsfrTableComponent, DsfrFileSizeUnit } from '@edugouvfr/ngx-dsfr';
export { DsfrUserMenuComponent as DsfrProfileMenuComponent, DsfrToolLinkMenuComponent as DsfrToolsMenuComponent } from '@edugouvfr/ngx-dsfr';
import { Validator, AbstractControl, ValidationErrors } from '@angular/forms';
import { Observable } from 'rxjs';
import { BreakpointObserver } from '@angular/cdk/layout';

interface DsfrCompleteEvent {
    /** Browser event. */
    originalEvent: Event;
    /** Selected option value. */
    query: string;
}
type DsfrSuggestions = any[];
/**
 * Interface utilisée pour le contexte du template suggestionTemplate
 */
interface DsfrSuggestionContext {
    $implicit: any;
    index: number;
}

declare class DsfrAutocompleteComponent extends DefaultControlComponent<any> implements OnInit, AfterViewInit, OnDestroy {
    /** Template des suggestions, option en paramètre  */
    suggestionTemplate?: TemplateRef<DsfrSuggestionContext>;
    /** @internal viewport pour le virtualScroll */
    viewport?: CdkVirtualScrollViewport;
    /** @internal le composant de saisie (<input>) */
    inputComponent?: ElementRef;
    /** (form-input) type de l'input, 'text' ou 'search'. 'text' par défaut */
    type: 'text' | 'search';
    /** (form-input) champ obligatoire ou non, faux par défaut. */
    required: boolean;
    /** (form-input) placeholder de l'input. */
    placeholder?: string;
    /***  (form-input) Attribut maxLength de l'input. */
    maxLength?: number;
    /** (form-input) ajoute un icone à droite dans le champ de saisie. */
    icon?: string;
    /** (form-input) pattern de l'input.*/
    pattern?: string;
    /** (form-input) ajout d'un style spécifique, permet par exemple de la limiter la largeur d'un input. */
    customClass?: string;
    /** Emission de l'événement si le type du bouton est différent de `submit`.  */
    buttonSelect: EventEmitter<Event>;
    /*** (form-input) permet de désactiver le bouton d'action. 'false' par défaut. */
    buttonDisabled: boolean;
    /*** (form-input) crée un combo champ + bouton si buttonIcon est renseigné */
    buttonIcon?: string;
    /** (form-input) crée un combo champ + bouton si buttonLabel est renseigné */
    buttonLabel?: string;
    /*** (form-input) tooltip message sur le bouton s'il y a lieu. */
    buttonTooltipMessage?: string;
    /*** (form-input) type du button,'button' par défaut. */
    buttonType: DsfrButtonType;
    /** (form-input) style du bouton, 'primary' par défaut. */
    buttonVariant: DsfrButtonVariant;
    /** (form-input) [accessibilité] Spécifie le libellé qui sera retranscrit par les narrateurs d'écran. */
    buttonAriaLabel?: string;
    /** (form-input) Change la mise en page d'un input accompagné d'un bouton.  */
    inputWrapMode: 'addon' | 'action';
    /**
     * [accessibilité] Permet de masquer visuellement le libellé du bouton en le laissant accessible aux dispositifs d'assistance.
     *
     * A utiliser pour le bouton si  icône seule.
     */
    buttonLabelSrOnly: boolean;
    /** L'utilisateur doit traiter cet événement pour déclencher une méthode de recherche qui met à jour la propriété suggestions. */
    filterChange: EventEmitter<DsfrCompleteEvent>;
    /** Emet la suggestion à la sélection de celle-ci */
    suggestionSelect: EventEmitter<any>;
    /** Fermeture de la liste de suggestions */
    listClose: EventEmitter<void>;
    /** Mode multiple : à la suppression d'une suggestion (tag) */
    clearOptionSelect: EventEmitter<{
        nativeEvent: Event;
        option: any;
    }>;
    /** 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: _angular_core.InputSignal<string | HTMLElement | undefined>;
    /** Propriété CSS z-index de la liste, par défaut supérieur aux composants 'lifted' DSFR */
    zIndex: _angular_core.InputSignal<number | undefined>;
    /** Activer le filtre automatique sur l'autocomplete. Faux par défaut */
    autoFilter: _angular_core.InputSignal<boolean>;
    /** Supprime la valeur de l'input si elle ne provient pas directement de la liste de suggestion. */
    requireSelection: _angular_core.InputSignal<boolean>;
    /** Mode sélection multiple de valeurs */
    multiple: _angular_core.InputSignal<boolean>;
    /** Mode multiple: Nombre max. d'options sélectionnables */
    maxSelectedOptions: _angular_core.InputSignal<number | undefined>;
    /** Activer le virtual scroll */
    virtualScroll: _angular_core.InputSignal<boolean>;
    /** Hauteur maximale avec unité avant le scroll sur la liste déroulante (correspond à la propriété css max-height) */
    scrollHeight: _angular_core.InputSignal<string>;
    /** Surcharger la hauteur en px d'un item dans le cas du virtual scroll. Par défaut 24 (px). */
    virtualScrollItemHeight: _angular_core.InputSignal<number>;
    /** Nom de la propriété correspondant à la valeur (string) affichée dans l'objet suggestion */
    suggestionValueKey: _angular_core.InputSignal<string | undefined>;
    /** Optionnel : nom de la propriété correspond à la valeur de sélection dans l'objet suggestion.
     * Sans définition la sélection concerne tout l'objet suggestion */
    selectedValueKey: _angular_core.InputSignal<string | undefined>;
    /** Afficher le spinner indiquant le chargement des suggestions */
    loading: _angular_core.InputSignal<boolean>;
    /** Cache le label visuellement en le laissant disponible aux lecteurs d'écran.  */
    labelSrOnly: _angular_core.InputSignal<boolean>;
    /** 👓 Correspond à l'attribut `aria-label` */
    ariaLabel: _angular_core.InputSignal<string | undefined>;
    /**  👓 Correspond à l'attribut `aria-invalid` */
    ariaInvalid: _angular_core.InputSignal<string | undefined>;
    /** 👓 Correspond à l'attribut `aria-describedby`  */
    ariaDescribedby: _angular_core.InputSignal<string | undefined>;
    /**
     * Le délai (en millisecondes) pour déclencher l'événement de changement de saisie et de filtrage.
     * Par défaut la valeur est 0
     */
    delay: _angular_core.InputSignal<number>;
    /** Minimum de caractères nécessaires au déclenchement des suggestions. 1 par défaut */
    minLength: _angular_core.InputSignal<number>;
    /** Liste des suggestions */
    suggestions: _angular_core.InputSignal<any[]>;
    /** @internal value interne du dsfr-form-input */
    valueInput: _angular_core.WritableSignal<string>;
    /**  @internal */
    readonly combinedAriaDescribedBy: _angular_core.Signal<string | null>;
    protected isExpanded: _angular_core.WritableSignal<boolean>;
    protected currentOptionIndex: _angular_core.WritableSignal<number>;
    protected statusMessageMultiple: string;
    protected listSelectedOptions: any[];
    /** Nombre de résultats après une recherche (pas de valeur initiale = a11y) */
    protected nbSuggestions: _angular_core.Signal<number>;
    /** Les suggestions filtrées en cas de autoFilter, égales aux suggestions sinon */
    protected filteredSuggestions: _angular_core.WritableSignal<any[]>;
    private inputChange$;
    private notifyOnDestroy;
    /** Container HTML <ul> de la liste des suggestions */
    private containerListElement;
    private readonly _cd;
    private readonly _i18n;
    private readonly _renderer;
    constructor();
    /** Fonction de formatage de la valeur affichée dans l'input à la sélection d'une suggestion */
    formatOnSelect: (selectedSuggestion: any) => string;
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /**
     * Override writeValue pour setter la valeur de l'input programmatiquement à l'initialisation
     * @internal
     */
    writeValue(value: any): void;
    /** @internal */
    setDisabledState(isDisabled: boolean): void;
    /**
     * Le blur qui ajoute le statut touched ne doit se déclencher que si la liste est fermée
     * Pour éviter l'affichage d'erreurs de validation lorsque le clic est appuyé sur la selection d'une option
     * (touched et donc validation déclenchés trop tot)
     */
    protected onFocusOut(): void;
    protected onToogleDisplayList(display: boolean): void;
    protected onInput(event: Event): void;
    /** Ouverture de la liste des suggestions au focus si le minLength est de 0, ou si l'input comporte déjà une valeur */
    protected onFocusInput(): void;
    /** Gestion des touches de navigation. */
    protected doKeyEvent(event: KeyboardEvent, options: any[]): void;
    protected onClickOption(suggestion: any, i: number): void;
    /**
     * Fermeture de la liste des suggestions à la sortie du champ
     * Mise a jour de la valeur dans le cas de requireSelection ou multiple
     * @param hasSelectOption l'utilisateur a cliqué ou sélectionné au clavier une option
     * */
    protected updateValueAndCloseList(hasSelectOption?: boolean): void;
    /**
     * Gestion de l'attribut aria-selected
     * true: en mode multiple l'option est sélectionnée, en mode simple l'option est en focus
     */
    protected isOptionSelected(i: number, option?: any): boolean;
    /** Méthode c/c de la même méthode qui existe du côté du composant form-input */
    protected getWrapClasses(): string[];
    /**
     * Gestion du focus à l'ouverture de la liste (evenement du dropdown-container)
     * @param el element ul de liste ou li courant
     */
    protected handleListFocusOnOpen(listElement: HTMLElement): void;
    /** Emission de buttonSelect au niveau de form-input, seulement si le type du bouton n'est pas `submit` */
    protected onInputButtonSelect(e: Event): void;
    /** Suppression d'une suggestion sélectionnée en mode multiple */
    protected removeSuggestion(e: Event, optToRemove: any): void;
    /** Sélection d'une suggestion (clavier ou souris) */
    private onOptionSelect;
    /** Filtrage apres input change+debounce */
    private handleInputChange;
    /**
     * Filtre la liste avec la valeur
     *
     * La recherche se fait toujours à partir de : originalSuggestions
     * On valorise directement la propriété privée _suggestions sans passer par le setter (réservé à l'utilisateur)
     * afin de garder intact originalSuggestions
     */
    private doAutoFilter;
    /**
     * Affichage visuel de l'option active (class selected, aria-activedescendant) a la nav. clavier ou selection souris
     * Scroll jusqu'a l'option en cas de navigation clavier
     * @param index index courant option active
     * @param hasClickOnOption selection a la souris
     */
    private activateFocusOption;
    private addSelectedSuggestion;
    private handleNoSelectedSuggestion;
    /**
     * Ajoute la suggestion dans la liste si elle n'est pas déja présente et si le nombre d'options sélectionnées est inférieur à maxSelectedOptions
     * @param suggestion
     */
    private addSuggestionMultiple;
    /** Initialisation de la liste des options programmatiquement sélectionné depuis suggestions  */
    private initSelectedOptionsList;
    /** Initialisation de l'option sélectionnée programmatiquement depuis suggestions */
    private initSelectedOption;
    private resetValueAndIndex;
    /**
     * En mode virtualScroll le scroll doit se faire par la methode scrollToIndex de CDK virtualscroll
     * @param index index de l'option dans la liste gérée par cdkVirtualFor
     */
    private manageScrollForVirtualScroll;
    /** Effacement de aria-activedescendant lorsque la liste est cachée ou l'input vide */
    private resetAriaActiveDescendant;
    /** Get option dans la liste des options selon attribut HTML [data-index]  */
    private queryOptionFromDataIndex;
    private getSelectedValue;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrAutocompleteComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrAutocompleteComponent, "dsfr-ext-autocomplete, dsfrx-autocomplete", never, { "type": { "alias": "type"; "required": false; }; "required": { "alias": "required"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "maxLength": { "alias": "maxLength"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "customClass": { "alias": "customClass"; "required": false; }; "buttonDisabled": { "alias": "buttonDisabled"; "required": false; }; "buttonIcon": { "alias": "buttonIcon"; "required": false; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; }; "buttonTooltipMessage": { "alias": "buttonTooltipMessage"; "required": false; }; "buttonType": { "alias": "buttonType"; "required": false; }; "buttonVariant": { "alias": "buttonVariant"; "required": false; }; "buttonAriaLabel": { "alias": "buttonAriaLabel"; "required": false; }; "inputWrapMode": { "alias": "inputWrapMode"; "required": false; }; "buttonLabelSrOnly": { "alias": "buttonLabelSrOnly"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "autoFilter": { "alias": "autoFilter"; "required": false; "isSignal": true; }; "requireSelection": { "alias": "requireSelection"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxSelectedOptions": { "alias": "maxSelectedOptions"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "virtualScrollItemHeight": { "alias": "virtualScrollItemHeight"; "required": false; "isSignal": true; }; "suggestionValueKey": { "alias": "suggestionValueKey"; "required": false; "isSignal": true; }; "selectedValueKey": { "alias": "selectedValueKey"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaInvalid": { "alias": "ariaInvalid"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "formatOnSelect": { "alias": "formatOnSelect"; "required": false; }; }, { "buttonSelect": "buttonSelect"; "filterChange": "filterChange"; "suggestionSelect": "suggestionSelect"; "listClose": "listClose"; "clearOptionSelect": "clearOptionSelect"; }, ["suggestionTemplate"], ["[label]"], true, never>;
    static ngAcceptInputType_maxLength: unknown;
    static ngAcceptInputType_buttonLabelSrOnly: unknown;
}

interface DsfrDateEvent {
    value?: string | DsfrRangeModel;
    date?: Date;
}

/**
 * Implémente la saisie d'une date via un input ou via un calendrier affichant les jours et les mois.
 * Validator est implémenté uniquement par rapport à min et max
 */
declare class DsfrCalendarComponent implements AfterViewInit, OnDestroy, OnInit, OnChanges {
    /**
     * Valeur initial de la date.
     * La valeur doit prendre la forme dd/mm/yyyy pour la locale fr et mm/dd/yyyy pour la locale en.
     */
    value?: string | DsfrRangeModel;
    /** Force le focus sur la date courante à l'initialisation du composant */
    autofocus: boolean;
    /** Id de l'élément correspondant au label de la grille de dates */
    ariaLabelledBy: string;
    /** Modifie le mode de sélection du calendrier, entre `single` et `range` */
    mode: DsfrCalendarMode;
    /**
     * Permet d'ignorer la valeur initiale de l'input `value` si celle ci est erronée.
     * (ex: date de début postérieure à date de fin)
     */
    ignoreInitialValue: boolean;
    /** Emission de la date au format DsfrDateEvent */
    dateChange: EventEmitter<DsfrDateEvent>;
    /** Evènement au changement d'affichage du calendrier (changement mois ou année) */
    calendarChange: EventEmitter<Date>;
    protected previousMonth?: ElementRef<HTMLButtonElement>;
    protected nextMonth?: ElementRef<HTMLButtonElement>;
    protected monthSelect?: ElementRef<HTMLElement>;
    protected yearSelect?: ElementRef<HTMLElement>;
    protected tbody?: ElementRef<HTMLTableElement>;
    protected monthSelectOptions: DsfrSelectOption[];
    protected yearSelectOptions: DsfrSelectOption[];
    protected currentMonthIndex: number;
    protected currentYear: number;
    protected translatedMonthAbbreviations: string[];
    protected translatedMonths: string[];
    protected prevMonthLabel: string;
    protected nextMonthLabel: string;
    protected monthSelectLabel: string;
    protected yearSelectLabel: string;
    protected isMonoYear: boolean;
    protected isMonoMonth: boolean;
    protected readonly rows: any[];
    protected readonly columns: any[];
    private dayCells;
    private prevCodeLang;
    private focusDay;
    private selectedDay;
    private lastDate;
    private _min;
    private _max;
    private subscription;
    private firstDayOffset;
    private daysInMonth;
    private rangeStart;
    private rangeEnd;
    /**
     * Date de fin potentielle du range en cours de sélection, utilisée uniquement pour gérer la prévisualisation du range.
     */
    private rangeEndPreview;
    private readonly i18n;
    private readonly langService;
    private readonly loggerService;
    constructor();
    /**
     * @return Le code de la langue en cours
     */
    get codeLang(): string;
    get min(): string | undefined;
    get max(): string | undefined;
    protected get isEnglishLocale(): boolean;
    /**
     * Date minimale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ.
     * Ce paramètre peut être utilisé seul ou avec la propriété max.
     */
    set min(value: string | undefined);
    /**
     * Date maximale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ.
     * Ce paramètre peut être utilisé seul ou avec la propriété min.
     */
    set max(value: string | undefined);
    /** @internal */
    ngOnInit(): void;
    /** @internal */
    ngOnDestroy(): void;
    /** @internal */
    ngAfterViewInit(): void;
    /** @internal */
    ngOnChanges(): void;
    /**
     * Permet de forcer le focus sur la date active, la dernière date focusée ou la date du jour par défaut.
     *
     * Cette méthode est notamment utilisée dans la gestion du calendrier embarqué dans une modale.
     */
    focusDate(): void;
    /**********************
     * Event Handlers
     **********************/
    protected handleCancelButton(event: Event): void;
    protected handleNextMonthButton(event: Event): void;
    protected handlePreviousMonthButton(event: Event): void;
    protected handleMonthSelectKeydown(event: KeyboardEvent): void;
    protected handleYearSelectKeydown(event: KeyboardEvent): void;
    protected handleDayClick(event: MouseEvent): void;
    protected handleDayMouseEnter(event: MouseEvent): void;
    /**
     * Permet d'éviter que la prévisualisation du range ne persiste lorsque le curseur de lasoursi est déplacé hors de
     * la table
     */
    protected handleCalendarMouseLeave(): void;
    protected handleDayKeyDown(event: KeyboardEvent): void;
    /**
     * Gestion de la sélection dans la liste déroulante des mois
     *
     * @param selectedMonthIndex Index du mois sélectionné (indexage commençant à 1)
     */
    protected handleMonthSelect(selectedMonthIndex: number): void;
    /**
     * Gestion de la sélection dans la liste déroulante des années
     *
     * @param selectedYear Année sélectionnée
     */
    protected handleYearSelect(selectedYear: number): void;
    /**
     * Détermine si le jour correspondant à la cellule appartient au range en cours de sélection.
     */
    protected isInRangePreview(row: number, col: number): boolean;
    private getDateFromCell;
    /**
     * Permet de calculer si le jour a focus est bien disponible dans le mois et l'année de destination après sélection
     * dans la liste déroulante.
     *
     * Dans le cas où l'on se trouve le 29 Février 2024 et où l'on change d'année grâce à la liste déroulante à 2023,
     * le jour a focus devrait être le 28 Février 2023.
     *
     * @param currentYear Année cible
     * @param selectedMonthIndex Mois cible
     * @param currentDay Jour courant dans le calendrier
     * @returns Le numéro du jour à focus
     */
    private computeDayToFocus;
    /**
     * Formatage de la valeur dans la langue courante
     * @param value Valeur au format ISO ou dans la langue courante
     */
    private reformatValue;
    /**
     * Gestion du changement de langue dans le composant.
     *
     * @param code Code de la locale à prendre en compte
     */
    private onLangChange;
    /**
     * Mets à jour l'ensemble du Date Picker
     */
    private updateCalendar;
    /**
     * Détermine la colonne à partir de laquelle le mois commence dans le calendrier.
     *
     * Cette colonne est dépendante du jour de la semaine mais également de la locale : le calendrier anglais a comme
     * première colonne le dimanche, contrairement au calendrier français pour lequel la première colonne est le lundi.
     *
     * @param firstDayOfMonth Index du premier jour de la semaine
     * @returns Index de la colonne où commence le mois
     */
    private getCurrentMonthStartingColumn;
    /**
     * Mise à jour des valeurs des deux listes déroulantes, mois et année.
     */
    private updateMonthAndYearSelects;
    /**
     * Mise à jour de l'état d'une cellule de la table en fonction de :
     * - si elle se trouve dans le mois,
     * - si elle se trouve en dehors des dates limites,
     * - si elle est sélectionnée.
     *
     * @param tdElement Une cellule td du tableau
     * @param outsideOfCurrentMonth boolean true si le jour fait partie du mois ou non
     * @param cellDate jour correspondant à la cellule
     */
    private updateCell;
    private setCellAsFocusable;
    private setCellAsSelected;
    private setCellAsInsideRangeBoundary;
    private setCellDataDate;
    private setCellText;
    private setCellAsOutOfBounds;
    private setCellAsDisabled;
    /**
     * Suppression des éléments ayant pu être attribués durant le rendu de la grille
     *
     * @param tdElement
     */
    private resetCellAttributes;
    /**
     * Initie le changement de focus de la date.
     *
     * @param targetDate Date cible attendue
     */
    private moveFocusToDay;
    /**
     * Met à jour le tabindex de toutes les cellules de la grille.
     *
     * Nécessaire pour rendre un élement de la table focusable.
     *
     * @param autofocus Permet de forcer le focus sur l'élément défini comme étant à tabindex 0. Valeur par défaut à true.
     */
    private updateTableCellsTabIndex;
    /**
     * Force le focus sur la limite min ou max d'un mois pour éviter que le focus soit indisponible.
     *
     * Exemple: L'utilisateur sélectionne le 17 Juillet 2024. Il décide ensuite de changer de mois via la liste
     * déroulante et cible Octobre. Cependant, la date max donnée au date picker est le 10 Octobre 2024. Etant incapable
     * de focus cette date au retour du focus dans la grille, la nouvelle date de focus bascule alors à la date max déterminée,
     * cad. le 10 Octobre 2024.
     *
     * @param boundary type du boundary à prendre en compte, entre le min et le max
     */
    private autoFocusBoundaryDate;
    private initializeCalendar;
    private getNumberOfDaysInMonth;
    /**
     * Calcule la date cible en fonction de la date actuelle et du nombre de mois à ajouter ou enlever à cette dernière.
     *
     * @param currentDate Date actuelle
     * @param monthsOffset Nombre de mois à ajouter ou enlever à la date actuelle
     * @returns La date cible
     */
    private computeTargetDateWithMonthOffset;
    private moveToNextYear;
    private moveToPreviousYear;
    private moveToNextMonth;
    private moveToPreviousMonth;
    private moveFocusToNextDay;
    private moveFocusToNextWeek;
    private moveFocusToPreviousDay;
    private moveFocusToPreviousWeek;
    private moveFocusToFirstDayOfWeek;
    private moveFocusToLastDayOfWeek;
    /**
     * Vérifie que le jour cliqué est sélectionnable en fonction de si il est disabled et de si le jour cliqué est
     * le même que celui en cours de sélection en mode "range".
     *
     * @param domNode La date cliquée
     * @returns Un booléen confirmant que la date cliquée est sélectionnable
     */
    private isDaySelectable;
    private getDayFromDataDateAttribute;
    /**
     * Mets à jour la valeur du composant et émets un événement de type DsfrDateEvent.
     * Cette emission peut être omise via le paramètre booléen skipEmission, notamment à l'initialisation du composant.
     * @param value
     * @private
     */
    private setSingleModeNewValue;
    /**
     * Mets à jour la valeur de période du composant en fonction de la nouvelle date donnée, et émets un événement de type DsfrDateEvent.
     * Cette emission peut être omise via le paramètre booléen skipEmission, notamment à l'initialisation du composant.
     * @private
     */
    private setRangeModeNewIndividualValue;
    /**
     * Mets entièrement à jour la valeur de période du composant et émets un événement de type DsfrDateEvent.
     * Cette emission peut être omise via le paramètre booléen skipEmission, notamment à l'initialisation du composant.
     * @param value
     * @private
     */
    private setNewRangeValue;
    /**
     * Valorise la date de l'input suite à la sélection d'une date dans le calendrier
     * @param domNode cellule td du calendrier telle que 'data-date' contienne la date ISO, ex : data-date="2024-05-28".
     * - i18n : le code de formatage fait appel à DateUtils
     */
    private updateCalendarValue;
    /**
     * Positionne la date du calendrier à partir de
     * - i18n : la date est obtenue à partir de DateUtils
     */
    private computeInitialDate;
    private initializeFocusAndSelectedDay;
    /**
     * @param date date
     * @returns true si la data 'd' est dans l'intervalle [min, max] du cou
     */
    private inMinMaxRange;
    private computeMonthSelectOptions;
    private computeYearSelectOptions;
    private updateMonthTranslations;
    private isValidIso;
    /**
     * Dans le cas d'un changement de mois ou d'année dans le calendrier, cette fonction détermine le type de butée atteinte
     * dans le cas ou le nouveau focusDay se trouverait en dehors des dates min ou max, uniquement dans un mois contenant lesdits min ou max.
     *
     * Exemple: Le focusDay est le 20 Juin 2024 et la date max le 15 Juillet 2024. Si l'utilisateur navigue vers le mois de Juillet via la
     * liste déroulante ou la flèche de "Mois suivant", getReachedBoundary retourne 'max', qui est le type de butée atteinte.
     *
     * @returns Retourne le type de butée atteinte (min ou max) ou undefined si aucune butée n'est atteinte ou qu'aucun focusDay n'est valide pour
     * cette date.
     */
    private getReachedBoundary;
    private computeMonoYearAndMonoMonth;
    /**
     * Vérifie si la date active du composant se trouve dans les limites données du composant.
     *
     * @param date
     * @returns Un booléen indiquant si la date se trouve bien entre les limites minimum et maximum données.
     */
    private isInBounds;
    /**
     * Attribue la valeur sélectionnée à l'index correspondant dans `value`, en fonction de si il doit être remis
     * à jour, et de si l'une des deux valeurs est déjà prise en compte.
     *
     * @param newValue
     * @param reset
     * @returns Un booléen indiquant si la plage de date est complètement formée.
     */
    private setIndividualRangeValue;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrCalendarComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrCalendarComponent, "dsfr-ext-calendar, dsfrx-calendar", never, { "value": { "alias": "value"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "ignoreInitialValue": { "alias": "ignoreInitialValue"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; }, { "dateChange": "dateChange"; "calendarChange": "calendarChange"; }, never, never, true, never>;
    static ngAcceptInputType_autofocus: unknown;
    static ngAcceptInputType_ignoreInitialValue: unknown;
}
type DsfrRangeModel = [string | undefined, string | undefined];
type DsfrDefinedRangeModel = [string, string];
type DsfrCalendarMode = 'single' | 'range';

declare class DsfrCalendarModalComponent implements AfterViewInit, OnDestroy {
    /**
     * Date minimale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ.
     * Ce paramètre peut être utilisé seul ou avec la propriété max.
     */
    min: string;
    /**
     * Date maximale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ.
     * Ce paramètre peut être utilisé seul ou avec la propriété min.
     */
    max: string;
    /**
     * Valeur de l'attribut aria-label du bouton d'ouverture de la modale.
     */
    ariaLabel: string;
    /**
     * Message du `tooltip` (attribut `title` du bouton) ou ajout d'un `span` en `sr-only` si pas de label.
     */
    tooltipMessage: string;
    /**
     * Valeur de l'attribut disabled du bouton d'ouverture de la modale.
     */
    disabled: boolean;
    /** Modifie le mode de sélection du calendrier, entre `single` et `range` */
    mode: DsfrCalendarMode;
    /**
     * Permet d'ignorer la valeur initiale de l'input `value`si celle ci est erronée
     * (ex: date de début postérieure à date de fin)
     */
    ignoreInitialValue: boolean;
    /**
     * Emission de la date au format DsfrDateEvent
     */
    dateChange: EventEmitter<DsfrDateEvent>;
    protected modal: ElementRef<HTMLDivElement>;
    protected calendar: DsfrCalendarComponent;
    /**
     * Id aléatoire, unique, de la modale (le calendrier)
     */
    protected modalId: string;
    protected ariaLabelTitleModal: string;
    protected isOpen: boolean;
    protected dialogTitle: string;
    protected translatedMonths: string[];
    protected dialogTriggerBtnNode: HTMLButtonElement | undefined;
    private _value;
    private currentMonthIndex;
    private currentYear;
    private subscription;
    private readonly elementRef;
    private readonly i18n;
    private readonly logger;
    constructor();
    get value(): string | DsfrRangeModel | undefined;
    /**
     * Valeur initial de la date.
     * La valeur doit prendre la forme dd/mm/yyyy pour la locale fr et mm/dd/yyyy pour la locale en.
     */
    set value(value: string | DsfrRangeModel | undefined);
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /**
     * Gère le clic en dehors de la modale
     */
    protected onCalendarOutside(): void;
    protected handleTriggerBtnClick(): void;
    protected handleDataChange(dateEvent: DsfrDateEvent): void;
    protected handleModalKeydown(keyEvent: KeyboardEvent): void;
    protected handleCancelButton(): void;
    /**
     * Met à jour le titre de la dialog (visuellement caché) pour les besoins d'accessibilité.
     */
    private updateDialogTitle;
    /**
     * Ferme la modale.
     *
     * Positionne le focus sur le bouton d'ouverture de la modale si besoin.
     *
     * @param focusTriggerBtn Permet de savoir si le focus doit être donné au bouton d'ouverture de la modale
     */
    private close;
    private updateMonthTranslations;
    /**
     * Gestion du changement de langue dans le composant.
     *
     * @param code Code de la locale à prendre en compte
     */
    private onLangChange;
    /**
     * Mise à jour des valeurs des deux listes déroulantes, mois et année.
     */
    private updateMonthIndexAndYear;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrCalendarModalComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrCalendarModalComponent, "dsfr-ext-calendar-modal, dsfrx-calendar-modal", never, { "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; }; "tooltipMessage": { "alias": "tooltipMessage"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "ignoreInitialValue": { "alias": "ignoreInitialValue"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "dateChange": "dateChange"; }, never, never, true, never>;
}

interface DsfrSlide {
    /** Url de l'image de l'entête. */
    imagePath?: string;
    /** Texte alternatif de l'image, obligatoire si image renseigné. */
    alt?: string;
    /** Titre associé à l'image, optionnel */
    caption?: string;
    /** Description associée à l'image, optionnel */
    content?: string;
    /** Lien associé, optionnel */
    link?: DsfrLink;
    /** Données supplémentaires associées, optionnel */
    data?: DsfrLink;
}
/**
 * Interface utilisée pour le contexte du template templateSlide
 */
interface DsfrSlideContext {
    $implicit: DsfrSlide;
    index: number;
}

declare const DEFAULT_INTERVAL: number;
declare class DsfrCarouselComponent implements OnInit, OnDestroy, AfterViewInit {
    /** @internal */
    slidesContainer?: ElementRef;
    /** @internal */
    templateSlide?: TemplateRef<DsfrSlideContext>;
    /** Identifiant du champ, généré automatiquement par défaut. */
    carouselId?: string;
    /** Attribut aria-label du composant */
    ariaLabel?: string;
    /** Défilement automatique, faux par défaut */
    autoplay: boolean;
    /** Indique si le carrousel boucle ou non, vrai par défaut. */
    circular: boolean;
    interval: number;
    /** Indique si le carrousel doit réagir aux événements du clavier, vrai par défaut. */
    keyboard: boolean;
    /** Tableau de slides. */
    slides: DsfrSlide[];
    /** Taille maximale du container de slides (optionnel) */
    maxWidth?: string;
    /** Indique si le carrousel doit prendre en charge les interactions par balayage gauche/droite sur les appareils à écran tactile, vrai par défaut. */
    touch: boolean;
    /** Avec les contrôles de chaque côté des slides. */
    withControls: boolean;
    /** Avec des indicateurs d'avancement. */
    withIndicators: boolean;
    /** Avec des indicateurs d'avancement. */
    inverse: boolean;
    /** Afficher les indicateur et contrôles à l'intérieur de l'image */
    withControlsInside: boolean;
    /** Dans le cas de controlsInside à l'interieur, place les indicateur sur un fond noir en couleurs inversées */
    reverseColorsIndicators: boolean;
    /** Avec des labels. */
    withCaptions: boolean;
    /** Désactiver l'animation de transition */
    disableTransition: boolean;
    /** Au changement de slide, emission de l'index du slide actif */
    carouselChange: EventEmitter<number>;
    /** @internal Le carousel est en pause et ne restart que si l'utilisateur clique explicitement sur play */
    onPause: boolean;
    /** @internal */
    transition: boolean;
    private i18n;
    /** Slide courant. */
    private _current;
    /** Id du timer */
    private timeoutId;
    /** Evénements touch */
    private startPoint;
    private renderer;
    private transitionListener;
    constructor();
    /**
     * @internal
     * Duplique le premier et dernier slide pour l'effet de transition circulaire
     */
    get visibleSlides(): DsfrSlide[];
    get current(): number;
    private set current(value);
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    /**
     * Spécifique mobile
     * @internal */
    onTouchStart(event: TouchEvent): void;
    /**
     * Spécifique mobile
     * @internal */
    onTouchEnd(event: TouchEvent): void;
    /** @internal */
    onKeydown(event: KeyboardEvent): void;
    /**
     * Transition vers le slide précédent
     *  @internal */
    previous(origin?: 'user' | 'timer'): void;
    /**
     * Transition vers le slide suivant
     *  @internal */
    next(origin?: 'user' | 'timer'): void;
    /** @internal */
    togglePlayPause(): void;
    /**
     * @internal
     * Lance le carousel si en autoplay et non explicitement sur pause
     */
    startSlideshow(): void;
    /**
     * @internal
     * Stoppe le carousel
     */
    stopSlideshow(): void;
    /** Effet de transition des slides */
    private getTransform;
    private toggleSlideshow;
    /**
     * Gestion de l'affichage avant le premier et apres le dernier slide en mode circulaire
     */
    private handleFirstLastTransition;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrCarouselComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrCarouselComponent, "dsfrx-carousel, dsfr-ext-carousel", never, { "carouselId": { "alias": "carouselId"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "autoplay": { "alias": "autoplay"; "required": false; }; "circular": { "alias": "circular"; "required": false; }; "interval": { "alias": "interval"; "required": false; }; "keyboard": { "alias": "keyboard"; "required": false; }; "slides": { "alias": "slides"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "touch": { "alias": "touch"; "required": false; }; "withControls": { "alias": "withControls"; "required": false; }; "withIndicators": { "alias": "withIndicators"; "required": false; }; "inverse": { "alias": "inverse"; "required": false; }; "withControlsInside": { "alias": "withControlsInside"; "required": false; }; "reverseColorsIndicators": { "alias": "reverseColorsIndicators"; "required": false; }; "withCaptions": { "alias": "withCaptions"; "required": false; }; "disableTransition": { "alias": "disableTransition"; "required": false; }; }, { "carouselChange": "carouselChange"; }, ["templateSlide"], never, true, never>;
    static ngAcceptInputType_autoplay: unknown;
    static ngAcceptInputType_withControls: unknown;
    static ngAcceptInputType_withIndicators: unknown;
    static ngAcceptInputType_inverse: unknown;
    static ngAcceptInputType_withControlsInside: unknown;
    static ngAcceptInputType_reverseColorsIndicators: unknown;
    static ngAcceptInputType_withCaptions: unknown;
    static ngAcceptInputType_disableTransition: unknown;
}

/**
 * Réprésente un message + sévérité.
 */
interface MessageViewModel {
    text?: string | string[];
    severity?: DsfrSeverity;
}
/**
 * Implémente la saisie d'une date via un input ou via un calendrier affichant les jours et les mois.
 * Validator est implémenté uniquement par rapport à min et max
 * @since 0.10
 * @author pfontanet
 */
declare class DsfrDatePickerComponent extends DefaultControlComponent<string | DsfrRangeModel> implements OnInit, AfterViewInit, Validator, OnDestroy {
    /**
     * Indique si la date est obligatoire.
     */
    required: boolean;
    /**
     * Indique si le masque de saisie doit être affiché ou non.
     */
    showMask: boolean;
    /**
     * Cache le Label visuellement en le laissant disponible aux lecteurs d'écran.
     */
    labelSrOnly: boolean;
    /**
     * Indique la valeur de la propriété css z-index de la modale du composant.
     */
    zIndex?: number;
    /** 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;
    /** Modifie le mode de sélection du datepicker, entre `single` et `range` */
    mode: DsfrCalendarMode;
    /** Force l'utilisation du mode regular pour la légende du fieldset en mode range */
    rangeLegendRegular: boolean;
    /** Emission de la date.*/
    dateChange: EventEmitter<DsfrDateEvent>;
    protected calendar?: DsfrCalendarComponent;
    protected controlSingle?: ElementRef;
    protected controlRange?: ElementRef;
    protected modal?: ElementRef<HTMLDivElement>;
    /**
     * Presentation Model pour la priorisation des messages.
     */
    protected readonly messageDateViewModel: Signal<MessageViewModel>;
    protected currentMonthIndex: number;
    protected currentYear: number;
    protected translatedMonthAbbreviations: string[];
    protected translatedMonths: string[];
    protected calendarHeading: string;
    protected modalLabel: string;
    protected startDate: string | undefined;
    protected endDate: string | undefined;
    /** Permet d'ignorer la valeur passée en input à l'ouverture de la modale, notamment si cette valeur est invalide */
    protected ignoreCalendarInitialValue: boolean;
    /** Gère l'annonce de la date/période sélectionnée à la fermeture de la modale (si sélection effective) */
    protected statusMessage: string | undefined;
    /**
     * Placeholder par défaut de l'input. Dépend de la langue 'jj/mm/aaaa' ou 'mm/dd/yyyy'
     */
    protected placeholder: string | undefined;
    /**
     * Id aléatoire, unique, de la modale (le calendrier)
     */
    protected modalId: string;
    protected isOpen: boolean;
    protected buttonLabelChoose: string;
    protected buttonLabelRangeChoose: string;
    protected dropdownContainerControlElement: HTMLElement | undefined;
    private dialogTriggerBtnNode;
    private prevCodeLang;
    private dayLabels;
    private monthLabels;
    private _min;
    private _max;
    /**
     * Message d'information lié au composant.
     */
    private readonly _message;
    /**
     * Représente la sévérité du message.
     */
    private readonly _messageSeverity;
    /**
     * Messages d'erreurs relatifs à une validation interne spécifique au composant.
     */
    private readonly _internalError;
    private readonly cdr;
    private readonly elementRef;
    private readonly i18n;
    private readonly langService;
    private readonly logger;
    /** @internal */
    constructor();
    get value(): string | DsfrRangeModel | undefined;
    /**
     * @return Le code de la langue en cours
     */
    get codeLang(): string;
    /**
     * @internal
     */
    get min(): string | undefined;
    /**
     * @internal
     */
    get max(): string | undefined;
    protected get isEnglishLocale(): boolean;
    set value(value: string | DsfrRangeModel | undefined);
    /**
     * Date minimale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ.
     * Ce paramètre peut être utilisé seul ou avec la propriété max.
     */
    set min(value: string | undefined);
    /**
     * Date maximale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ.
     * Ce paramètre peut être utilisé seul ou avec la propriété min.
     */
    set max(value: string | undefined);
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    /**
     * From Validator interface.
     *
     * @internal
     */
    validate(control: AbstractControl): ValidationErrors | null;
    /**
     * Surcharge de ControlValueAccessor#writeValue permettant potentiellement de corriger le format de la valeur saisie
     * avant enregistrement dans le modèle.
     * @internal
     */
    writeValue(value: string | DsfrRangeModel | undefined): void;
    /**
     * Il faut écouter focusout et non blur car ce dernier ne bubble pas donc le composant parent ne le capte pas.
     */
    protected onInputSingleFocusout(): void;
    /**
     * Il faut écouter focusout et non blur car ce dernier ne bubble pas donc le composant parent ne le capte pas.
     */
    protected onInputRangeFocusout(): void;
    /**
     * La date de début ou de fin du range vient d'être modifiée. Il faut appeler la fonction enregistrée via
     * registerOnChange pour indiquer à Angular que la value a changé et qu'il doit revalider le modèle.
     */
    protected onRangeModelChange(): void;
    /**
     * Mise a jour du titre lors de la navigation dans le calendrier.
     */
    protected onUpdateCalendarView(date: Date): void;
    /**
     * Gère le clic en dehors de la modale
     */
    protected onCalendarOutside(): void;
    protected handleTriggerButtonClick(event: Event): void;
    protected handleTriggerButtonKeydown(event: KeyboardEvent): void;
    protected handleCancelButton(event: Event): void;
    protected handleModalKeydown(keyEvent: KeyboardEvent): void;
    protected onCalendarVisible(): void;
    protected onCalendarDateChange(dateEvent: DsfrDateEvent): void;
    private formatValue;
    private containsMaskLiteral;
    /**
     * Met à jour l'étiquette accessible du calendrier (visuellement cachée).
     */
    private updateCalendarHeading;
    /**
     * Gère la validation interne de la date pour les critères de date min et date max.
     *
     * @param showMessage
     *
     * @returns `true` en cas d'erreur, false sinon.
     */
    private handleInternalValidation;
    private handleSingleModeInternalValidation;
    private handleRangeModeInternalValidation;
    private processError;
    private parseAsDateObject;
    /**
     * Changement de la valeur de l'input et formatage dans la langue courante
     * @param value Valeur au format ISO ou dans la langue courante
     */
    private reformatSingleModeValue;
    /**
     * Changement de la valeur de l'input et formatage dans la langue courante
     * @param value Valeur au format ISO ou dans la langue courante
     */
    private reformatRangeModeValue;
    /**
     * Gestion du changement de langue dans le composant.
     *
     * @param code Code de la locale à prendre en compte
     */
    private onLangChange;
    private reformatForNewCodeLang;
    /**
     * Ouvre la modale.
     */
    private open;
    /**
     * Ferme la modale.
     *
     * Positionne le focus sur le bouton d'ouverture de la modale si besoin.
     *
     * @param focusTriggerBtn Permet de savoir si le focus doit être donné au bouton d'ouverture de la modale
     */
    private close;
    /**
     * Méthode invoquée à la sortie de l'input text. Formate l'input et affecte la propriété 'aria-label' du bouton de
     * sélection du calendrier. A noter que, si la date est exacte, 'aria-label' contient la date, ex :
     * "Changer la date, Lundi Mai 27, 2024" ou ="Change Date, Monday July 1, 2024"
     * - i18n : le code de parsing est remplacé par un appel à DateUtils
     */
    private announceNewValue;
    private announceNewValueInSingleMode;
    private announceNewValueInRangeMode;
    private updateMonthTranslations;
    private isValidIso;
    /**
     * Mise à jour du mois et de l'année pour le titre de la modale.
     */
    private updateMonthIndexAndYear;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrDatePickerComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrDatePickerComponent, "dsfr-ext-datepicker, dsfrx-datepicker", never, { "required": { "alias": "required"; "required": false; }; "showMask": { "alias": "showMask"; "required": false; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "rangeLegendRegular": { "alias": "rangeLegendRegular"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; }, { "dateChange": "dateChange"; }, never, ["[label]", "[label]", "[label]"], true, never>;
    static ngAcceptInputType_rangeLegendRegular: unknown;
}

/**
 * Composant affichage d'un groupe de menu dropdown
 */
declare class DsfrDropdownMenuGroupComponent implements AfterViewInit {
    showSeparator: boolean;
    protected element: ElementRef<any>;
    /**
     * Ajout d'un wrapper <li> avec role presentation
     * si showSeparator, ajout d'un separateur apres ce li
     */
    ngAfterViewInit(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrDropdownMenuGroupComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrDropdownMenuGroupComponent, "dsfrx-dropdownmenu-group, dsfr-ext-dropdownmenu-group", never, { "showSeparator": { "alias": "showSeparator"; "required": false; }; }, {}, never, ["*"], true, never>;
    static ngAcceptInputType_showSeparator: unknown;
}

/**
 * Composant affichage d'un menuitem ou d'un menuitemcheckbox du composant dropdown-menu
 */
declare class DsfrDropdownMenuItemComponent implements AfterViewInit, AfterContentInit, OnDestroy {
    type: undefined | 'checkbox' | 'radio';
    selectItem: EventEmitter<Event>;
    button: DsfrButtonComponent | undefined;
    link: DsfrLinkComponent | undefined;
    _anchorElement: HTMLElement | undefined;
    _checked: boolean;
    private readonly elementRef;
    private readonly renderer;
    private _unlistenFn;
    get checked(): boolean;
    set checked(value: boolean);
    /**
     * Positionner les classes CSS si dsfr-button ou dsfr-link
     */
    ngAfterContentInit(): void;
    /**
     * Positionnement des éléments dans le DOM pour l'accessibilité
     * - ajout d'un élément wrapper li
     * - récupération de l'élément _anchorElement comme élément focusable (dsfr-link, dsfr-button ou li)
     * - ajout de l'attribut [role] menuitem sur l'élément focusable si type est undefined
     * - ajout de [aria-checked] et [role] menuitemcheckbox sur sur l'élément focusable si le type est checkbox
     */
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrDropdownMenuItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrDropdownMenuItemComponent, "dsfrx-dropdownmenu-item, dsfr-ext-dropdownmenu-item", never, { "type": { "alias": "type"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; }, { "selectItem": "selectItem"; }, ["button", "link"], ["*"], true, never>;
}

interface DsfrMenuButton extends Omit<DsfrButton, 'size' | 'variant' | 'iconPosition' | 'loader' | 'invertedOutlineContrast'> {
    /** Action appelée lors du 'click' sur le bouton. */
    callback?: () => void;
}
/** Définition des interfaces internes pour créer le view model de DsfrDropdownMenuItem */
interface MenuButtonViewModel extends DsfrMenuButton {
    menuType: 'button' | 'link' | 'group';
}
interface MenuLinkViewModel extends DsfrMenuButton {
    menuType: 'button' | 'link' | 'group';
}
interface MenuGroupViewModel {
    menuType: 'button' | 'link' | 'group';
    items: MenuButtonViewModel[] | MenuLinkViewModel[];
}
/** Alias pour le type d'entrée de menu */
type DsfrDropdownMenuItem = (DsfrMenuButton | DsfrLink | (DsfrMenuButton | DsfrLink)[])[];
declare class DsfrDropdownMenuComponent implements OnInit {
    /** Libellé du bouton du menu déroulant */
    labelMenu?: string;
    /** Attribut aria-label du bouton du menu déroulant */
    ariaLabelMenu?: string;
    /** Identifiant du bouton du menu déroulant (généré si non renseigné) */
    menuId?: string;
    /** Icône optionnelle du menu déroulant  */
    iconMenu?: string;
    /** Taille du menu déroulant (SM, MD ou LG). MD par défaut. */
    size: DsfrSize;
    /** Désactiver le menu */
    disabled: boolean;
    /** Fermer le menu après un clic sur bouton ou lien.  */
    closeOnAction: boolean;
    /** Evènement sélection d'un bouton */
    buttonSelect: EventEmitter<DsfrButton>;
    /** Evènement sélection d'un lien */
    linkSelect: EventEmitter<DsfrLink>;
    /** Cacher les séparateurs de groupe (dans le cas d'utilisation de menus) */
    hideGroupSeparator: 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;
    /**
     * Indique la valeur de la propriété css z-index de la modale du composant.
     */
    zIndex?: number;
    /** Contenu personnalisé du menu */
    contentTemplate?: TemplateRef<void>;
    /**@internal */
    btnMenuRef: _angular_core.Signal<ElementRef<any> | undefined>;
    /**@internal */
    dropdownWidth: _angular_core.Signal<any>;
    protected menusView: (MenuButtonViewModel | MenuLinkViewModel | MenuGroupViewModel)[];
    protected isOpen: _angular_core.WritableSignal<boolean>;
    protected itemsC: _angular_core.Signal<readonly DsfrDropdownMenuItemComponent[]>;
    protected itemsV: _angular_core.Signal<readonly DsfrDropdownMenuItemComponent[]>;
    /** Element auquel la liste est attachée programmatiquement si appendTo défini */
    protected containerToAttach: HTMLElement | undefined;
    private focusedElement;
    private indexFocusedElement;
    constructor();
    /** Items de menu, liens, boutons ou groupe de liens ou boutons */
    set menus(value: DsfrDropdownMenuItem);
    ngOnInit(): void;
    protected onDropdownAttached(): void;
    protected toggleMenu(): void;
    protected onButtonClick(button: DsfrMenuButton): void;
    protected onClickOutside(): void;
    protected onLinkSelect(link: DsfrLink): void;
    /**
     * Gestion des interactions clavier sur la liste
     * - positionnement du focus sur les éléments précédents/suivants à la navigation flèches
     * - fermeture de la liste sur les touches définies, et repositonnement du focus sur le bouton d'ouverture
     * @param event keyboard event
     */
    protected doKeyEvent(event: KeyboardEvent): void;
    private closeMenuAndFocusButton;
    /** Focus sur le premier élément de la liste à l'ouverture de celle-ci */
    private setInitialFocusOnList;
    /**
     * Si entrée est pressé / ou espace et que l'élément de liste est de type 'checkbox' ou 'radio'
     * Envoi de l'evenement selectItem
     */
    private emitKeyEventElement;
    private focusToElement;
    /** Gestion des tabindex pour le focus sur le nouvel élément de la liste */
    private setFocusElement;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrDropdownMenuComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrDropdownMenuComponent, "dsfr-ext-dropdownmenu, dsfrx-dropdownmenu", never, { "labelMenu": { "alias": "labelMenu"; "required": false; }; "ariaLabelMenu": { "alias": "ariaLabelMenu"; "required": false; }; "menuId": { "alias": "menuId"; "required": false; }; "iconMenu": { "alias": "iconMenu"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnAction": { "alias": "closeOnAction"; "required": false; }; "hideGroupSeparator": { "alias": "hideGroupSeparator"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "menus": { "alias": "menus"; "required": false; }; }, { "buttonSelect": "buttonSelect"; "linkSelect": "linkSelect"; }, ["itemsC", "contentTemplate"], never, true, never>;
}

declare enum DsfrSelectionModeConst {
    SINGLE = "single",
    MULTIPLE = "multiple",
    CHECKBOX = "checkbox"
}
type DsfrSelectionMode = `${DsfrSelectionModeConst}` | undefined;

/**
 * Représentation d'une option dans une modélisation applatie.
 *
 * Dans ce cas, l'appartenance à un groupe est signalée par le groupId et la notion de parenté défini par isGroup.
 */
interface OptionsViewModel extends DsfrOption {
    /**
     * Détermine si l'option représente un parent de groupe
     * (ex: Option "Fruits" dont les enfants seraient "pomme, poire...")
     */
    isGroup?: boolean;
    /** Renseigne l'identifiant du groupe, le cas échéant */
    groupId?: number;
    /** Etat disabled de l'option */
    disabled?: boolean;
    /** Etat de sélection de l'option */
    selected: WritableSignal<boolean | undefined>;
}
/**
 * Représentation d'une option dans une modélisation avec un unique niveau de hierarchie.
 */
interface SelectOptionViewModel extends DsfrSelectOption {
    /** Options enfants en cas de groupe */
    options?: SelectOptionViewModel[];
    /** Etat de sélection de l'option */
    selected: WritableSignal<boolean | undefined>;
    /** Renseigne l'identifiant du groupe, le cas échéant */
    groupId?: number;
}

/**
 * Interface utilisée pour le contexte du template optionTemplate
 */
interface DsfrOptionContext {
    $implicit: DsfrSelectOption;
    /** Dans le cas cas du picklist, position du picklist-unit */
    position?: 'left' | 'right';
}
declare class ListOptionsComponent {
    /** Template des labels des options */
    groupTemplate?: TemplateRef<DsfrOptionContext>;
    /** @internal */
    viewport?: CdkVirtualScrollViewport;
    /**@internal */
    listbox?: ElementRef;
    /** Activer le virtual scroll  */
    virtualScroll: boolean;
    /** Id du composant */
    selectId?: string;
    /** Propriété CSS z-index de la liste, par défaut supérieur aux composants 'lifted' DSFR */
    zIndex?: number;
    /** Surcharger la hauteur d'un item dans le cas du virtual scroll. */
    virtualScrollItemHeight?: number;
    /** Le mode de sélection est single */
    isSingleMode: boolean;
    /** Afficher le dropdown (recherche et liste déroulante) */
    displayDropdown: boolean;
    /** La case à cocher tout sélectionner est affichée */
    showSelectAll: boolean;
    /** La barre de recherche (filtre sur les options) est affichée */
    showSearch: boolean;
    /** Afficher les cases à cocher permettant de sélectionner chaque élément de la liste */
    showCheckboxes: boolean;
    /** Permet la sélection globale des groupes.
     * Lorsqu'activé, une case à cocher apparaît sur le label du groupe, et permet de sélectionner ou désélectionner toutes les options qu'il contient.
     */
    showGroupSelection: boolean;
    /** Donne la position du slot dans le template */
    listPosition: 'left' | 'right';
    /** Permet d'indiquer si le composant est désactivé ou non */
    disabled: boolean;
    /** Message d'accessibilité vocalisé lorsqu'il n'y a aucun résultat. */
    noResultsMessage?: string;
    /** Template utilisé pour rendre une option complète
     * Ce template est responsable du rendu du `<li>` et inclut toute la structure de l'option
     * - option : l'option à afficher
     * - index  : l'index de l'option
     */
    optionTemplate?: TemplateRef<DsfrOptionContext>;
    /** Événement émis lors du clic sur une option */
    optionClicked: EventEmitter<{
        e: any;
        option: SelectOptionViewModel;
    }>;
    /** Événement émis lors du clic sur une option */
    optionKeyDown: EventEmitter<{
        e: any;
        option: SelectOptionViewModel;
        shouldCloseDropdown: boolean;
    }>;
    /** Options filtrées après recherche */
    optionsFilter: _angular_core.InputSignal<SelectOptionViewModel[]>;
    /** Afficher l'état de chargement */
    loading: _angular_core.InputSignal<boolean>;
    /** Hauteur maximale avant le scroll sur la liste déroulante. */
    scrollMaxHeight: _angular_core.InputSignal<string | undefined>;
    /** Hauteur avant le scroll sur la liste déroulante. */
    scrollHeight: _angular_core.InputSignal<string | undefined>;
    protected readonly containerListClass = "dsfrx-select__list";
    /**
     * Sélection ou désélection d'une option
     * @internal */
    onOptionClick(e: any, option: SelectOptionViewModel): void;
    /**
     * 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: SelectOptionViewModel): void;
    handleListFocus(el: HTMLElement): void;
    /** Set focus on element and add aria-activedescendant attribute to parent */
    private setFocusElement;
    private scrollForVirtualScroll;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListOptionsComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListOptionsComponent, "edu-list-options", never, { "virtualScroll": { "alias": "virtualScroll"; "required": false; }; "selectId": { "alias": "selectId"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "virtualScrollItemHeight": { "alias": "virtualScrollItemHeight"; "required": false; }; "isSingleMode": { "alias": "isSingleMode"; "required": false; }; "displayDropdown": { "alias": "displayDropdown"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showCheckboxes": { "alias": "showCheckboxes"; "required": false; }; "showGroupSelection": { "alias": "showGroupSelection"; "required": false; }; "listPosition": { "alias": "listPosition"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; }; "optionTemplate": { "alias": "optionTemplate"; "required": false; }; "optionsFilter": { "alias": "optionsFilter"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "scrollMaxHeight": { "alias": "scrollMaxHeight"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; }, { "optionClicked": "optionClicked"; "optionKeyDown": "optionKeyDown"; }, ["groupTemplate"], never, true, never>;
    static ngAcceptInputType_virtualScroll: unknown;
    static ngAcceptInputType_isSingleMode: unknown;
    static ngAcceptInputType_displayDropdown: unknown;
    static ngAcceptInputType_showSelectAll: unknown;
    static ngAcceptInputType_showSearch: unknown;
    static ngAcceptInputType_showCheckboxes: unknown;
    static ngAcceptInputType_showGroupSelection: unknown;
    static ngAcceptInputType_disabled: unknown;
}

interface DsfrMaxDisplayOptionsContext {
    value: any[];
}
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<DsfrMaxDisplayOptionsContext>;
    /** Template pour chaque valeur sélectionnée */
    selectedOptionTemplate?: TemplateRef<any>;
    /** Template des labels des options */
    optionTemplate?: TemplateRef<DsfrOptionContext>;
    /** 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. 5 par défaut */
    maxDisplayOptions: number | undefined;
    /** Nombre max. d'options sélectionnables */
    maxSelectedOptions?: number;
    /** 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;
    /** 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;
    /** Placeholder pour le champ de recherche */
    searchMessage?: string;
    /** Message d'accessibilité vocalisé lorsqu'il n'y a aucun résultat. */
    noResultsMessage?: string;
    /** Afficher un état de chargement */
    loading: boolean;
    /** 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?: string;
    /** 👓 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: WritableSignal<boolean>;
    /** @internal liste d'options filtrées */
    optionsFilter: WritableSignal<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;
    /**
     * Message d'information lié au composant.
     */
    message: _angular_core.InputSignal<string | undefined>;
    /**
     * Représente la sévérité du message.
     */
    messageSeverity: _angular_core.InputSignal<"info" | "error" | "valid" | "warning" | "success" | undefined>;
    /**
     * Message d'erreur, quand il est présent les couleurs du contrôle changent.
     * @deprecated utiliser message/messageSeverity à la place
     */
    error: _angular_core.InputSignal<string | undefined>;
    /**
     * Message de validation, quand il est présent les couleurs du contrôle changent.
     * @deprecated utiliser message/messageSeverity à la place
     */
    valid: _angular_core.InputSignal<string | undefined>;
    /** @internal */
    messagesGroupId: string;
    /** @internal */
    messageViewModel: _angular_core.Signal<string | string[] | undefined>;
    /** @internal */
    severityViewModel: _angular_core.Signal<"info" | "error" | "valid" | "warning" | "success" | undefined>;
    ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
    /** @internal */
    combinedAriaDescribedBy: _angular_core.Signal<string | null>;
    protected cd: ChangeDetectorRef;
    /** @internal   Afin de pouvoir utiliser le type dans l'HTML*/
    protected readonly severityConst: typeof DsfrSeverityConst;
    /** @internal */
    protected _options: WritableSignal<T[]>;
    /** @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 showCheckboxes(): boolean;
    /** @internal */
    get selectionMode(): DsfrSelectionMode;
    /** 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;
    protected applyOptions(options: T[]): 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: _angular_core.ɵɵFactoryDeclaration<AbstractSelectComponent<any>, never>;
    static ɵcmp: _angular_core.ɵɵ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; }; "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; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "messageSeverity": { "alias": "messageSeverity"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "valid": { "alias": "valid"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; }, { "selectionChange": "selectionChange"; }, ["maxDisplayOptionsTemplate", "selectedOptionTemplate", "optionTemplate"], never, true, never>;
    static ngAcceptInputType_clearableOptions: unknown;
    static ngAcceptInputType_showSelectAll: unknown;
    static ngAcceptInputType_showClearSearch: unknown;
    static ngAcceptInputType_loading: unknown;
    static ngAcceptInputType_virtualScroll: unknown;
    static ngAcceptInputType_clearSearchOnHide: unknown;
    static ngAcceptInputType_ariaRequired: unknown;
    static ngAcceptInputType_labelSrOnly: unknown;
}

declare class DsfrMultiselectComponent extends AbstractSelectComponent<SelectOptionViewModel> implements OnInit {
    /** @internal */
    listOptionsComponent?: ListOptionsComponent;
    /** Template des labels des options */
    groupTemplate?: TemplateRef<DsfrOptionContext>;
    /** Afficher des cases à cocher pour la sélection de groupes d'option */
    showGroupSelection: boolean;
    /** @internal liste d'options filtrées */
    optionsFilter: WritableSignal<SelectOptionViewModel[]>;
    readonly selectionModeConst: typeof DsfrSelectionModeConst;
    /** Nombre de résultats après une recherche (pas de valeur initiale = a11y) */
    protected nbFilterResults: WritableSignal<number>;
    protected readonly containerListClass = "dsfrx-select__list";
    protected optionsFlatten: OptionsViewModel[];
    protected isAllSelected: _angular_core.Signal<boolean>;
    private optionsToSelect;
    /** 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: any[] | 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: SelectOptionViewModel): void;
    /**
     * Gère les interactions clavier sur une option et déclenche, si nécessaire, la fermeture du dropdown.
     * @internal */
    onOptionKeyDown(shouldCloseDropdown: boolean): 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;
    /** @internal */
    toggleDropdown(event: Event): void;
    /**
     * Mise à jour liste des options sélectionnées
     * (suppression des nœuds non sélectionnés)
     */
    updateSelectedNodes(): SelectOptionViewModel[];
    protected trackByIndex: (index: number) => number;
    /** Suppression d'un tag option */
    protected clearOption(event: {
        nativeEvent: Event;
        option: SelectOptionViewModel;
    }): void;
    /** Suppression du tag contenant toutes les options */
    protected clearAllOptions(): void;
    protected handleListFocus(el: HTMLElement): void;
    /** Permet de déterminer l'option à focus dans le cas d'une navigation avec les flêches depuis la combobox */
    private getFirstIndexSelected;
    private getMinIndex;
    /** 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;
    /** Sélection ou déselection d'une option avec sélection de groupes activée */
    private optionClickMultipleWithGroupSelection;
    /** Mise a jour du statut selected d'une option de groupe et de ses enfants */
    private setSelectedStateChildren;
    /** Mise a jour du statut selected d'une option de groupe après sélection d'un de ses enfants */
    private setSelectedStateParent;
    private findParent;
    /** Mise à jour du statut des parents de groupe prenant en compte le filtrage en cours */
    private updateFilteredParentsSelectedState;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrMultiselectComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrMultiselectComponent, "dsfr-ext-multiselect, dsfrx-multiselect,", never, { "showGroupSelection": { "alias": "showGroupSelection"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, {}, ["groupTemplate"], ["[label]"], true, never>;
    static ngAcceptInputType_showGroupSelection: unknown;
}

/**
 * Constantes des niveaux de titre.
 */
declare enum DsfrHeadingLevelConst {
    NONE = "none",
    H2 = "H2",
    H3 = "H3",
    H4 = "H4",
    H5 = "H5",
    H6 = "H6"
}
/**
 * Niveaux de titre de H2 à H6 ou NONE (indique alors qu'il faut utiliser une baslise <p>)
 */
type DsfrHeadingLevel = `${DsfrHeadingLevelConst}`;

declare class DsfrPanelComponent implements OnInit {
    /**
     * Titre du panel.
     */
    heading?: string;
    /** Le niveau de titre devant être utilisé. */
    headingLevel?: DsfrHeadingLevel;
    /**
     *  Identifiant du panel sur la page. Identifiant unique généré par défaut si non renseigné.
     */
    panelId?: string;
    /**
     * Indique si le panel doit être fermé initialement.
     * Si null le panel ne sera pas refermable.
     */
    expanded: boolean | null;
    /**
     * Événement présentant le nouvel état du panel.
     */
    expandedChange: EventEmitter<boolean>;
    protected messageExpandButton: string;
    private i18n;
    constructor();
    ngOnInit(): void;
    /** @Internal */
    toggleExpand(e: Event): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrPanelComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrPanelComponent, "dsfr-ext-panel, dsfrx-panel", never, { "heading": { "alias": "heading"; "required": false; }; "headingLevel": { "alias": "headingLevel"; "required": false; }; "panelId": { "alias": "panelId"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; }, { "expandedChange": "expandedChange"; }, never, ["*", "[footer]", "[actions]"], true, never>;
}

/**
 * Les valeurs possibles pour le format 'mode'.
 */
declare enum ModeValue {
    PICK_LIST = "pick-list",
    DUAL_LIST = "dual-list"
}

/**
 * Interface émise a chaque évènement de filtrage du picklist.
 */
interface DsfrFilterChange {
    /** Renvoie l'ensemble des options visible, ou undefined en cas d'absence de filtrage. */
    filteredOptions?: DsfrSelectOption[];
    /** Permet de discriminer les deux picklist en utilisant leur position. */
    listPosition: 'left' | 'right';
}
declare class DsfrPickListUnitComponent {
    /** @internal */
    listOptionsComponent?: ListOptionsComponent;
    /** @internal */
    toolbarWrapper?: ElementRef<HTMLElement>;
    /** Template des labels des options */
    optionTemplate?: TemplateRef<DsfrOptionContext>;
    /** Template des options */
    optionTemplateUnit?: TemplateRef<any>;
    /** Id du composant, généré par défaut */
    pickListUnitId: string;
    /** Activer le virtual scroll  */
    virtualScroll: boolean;
    /** Donne la position du slot dans le template */
    listPosition: 'left' | 'right';
    /**
     * Afficher la barre de filtrage des options
     */
    showSearch: boolean;
    /** Afficher la case à cocher tout sélectionner */
    showSelectAll: boolean;
    /** Afficher des cases à cocher pour la sélection de groupes d'option */
    showGroupSelection: boolean;
    /** Afficher un bouton pour vider le champ de la barre de recherche */
    showClearSearch: boolean;
    /** Placeholder pour le champ de recherche */
    searchMessage?: string;
    /** Surcharger la hauteur d'un item dans le cas du virtual scroll. Par défaut 32px. */
    virtualScrollItemHeight: number;
    /** Message d'accessibilité vocalisé lorsqu'il n'y a aucun résultat. */
    noResultsMessage?: string;
    /** Afficher un état de chargement */
    loading: boolean;
    /** Permet de définir l'état désactivé du composant */
    disabled: boolean;
    /** Permet de définir le label du header, s'il existe */
    labelHeader?: string;
    /** 👓 Attribut aria-label de la liste */
    ariaLabelList?: string;
    /** Liste d'options sélectionnée modifiée */
    selectionChange: EventEmitter<DsfrSelectOption[]>;
    /** Émet un événement lorsque le composant est marqué comme "touched" */
    touched: EventEmitter<void>;
    /** Liste des options filtrées */
    filterChange: EventEmitter<DsfrFilterChange>;
    /** Hauteur avant le scroll sur la liste déroulante. */
    scrollHeight: _angular_core.InputSignal<string | undefined>;
    optionsFlatten: _angular_core.WritableSignal<OptionsViewModel[]>;
    /** compareWith reprise de l'implémentation angular SelectControlValueAccessor */
    protected compareWithFn: (o1: any, o2: any) => boolean;
    /** Nombre de résultats après une recherche (pas de valeur initiale = a11y) */
    protected nbFilterResults: _angular_core.WritableSignal<number>;
    /** texte pour filtrer */
    protected searchText: string;
    /** liste des options sélectionnées */
    protected selectedOptions: SelectOptionViewModel[];
    /** liste d'options filtrées */
    protected optionsFilter: _angular_core.WritableSignal<SelectOptionViewModel[]>;
    protected nbSelectedFilteredOptions: _angular_core.Signal<number>;
    protected isAllSelected: _angular_core.Signal<boolean>;
    protected readonly containerListClass = "dsfrx-select__list";
    protected _options: SelectOptionViewModel[] | undefined;
    private optionsToSelect;
    private readonly _renderer;
    /** @internal */
    get optionsSelected(): any[];
    /**@internal */
    get options(): SelectOptionViewModel[] | undefined;
    set compareWith(fn: (v1: any, v2: any) => boolean);
    /** Définit la liste des options disponibles pour le picklist */
    set options(value: SelectOptionViewModel[] | 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);
    /**
     * Sélection ou désélection d'une option
     * En cas de correspondance multiple (même valeur dans plusieurs groupes), toutes les options correspondantes sont sélectionnées/désélectionnées.
     * @internal */
    onOptionClick(e: any, option: SelectOptionViewModel): void;
    /**
     * Mise à jour liste des options sélectionnées
     * (suppression des nœuds non sélectionnés)
     */
    updateSelectedNodes(): SelectOptionViewModel[];
    /**
     * Réinitialiser le champ de recherche
     @internal
    */
    resetSearchInput(internal?: boolean): void;
    /**
     * Sélectionner ou déselectionner toutes les 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;
    /** @internal */
    trackByIndex: (index: number) => number;
    /** @internal */
    clearOption(event: {
        nativeEvent: Event;
        option: SelectOptionViewModel;
    }): void;
    /** @internal */
    clearAllOptions(): void;
    protected onFocusOutToolbar(): void;
    protected onKeyDownPickUnit(event: KeyboardEvent): void;
    protected onKeyDownToolbar(event: KeyboardEvent): void;
    /**
     * Positionne le focus sur un élément de la liste lors de l'ouverture ou après "flèche bas" depuis le champ de recherche.
     * - Si un élément est déjà sélectionné, le focus est positionné sur celui-ci.
     * - Sinon, le focus est placé sur le premier élément de la liste.
     */
    private focusOnListElement;
    /**
     * Désélectionne toutes les options visibles (dans le filtre courant),
     * sauf celles qui sont désactivées.
     *
     * Conserve également les options déjà sélectionnées mais non visibles
     * (hors du filtre courant).
     * @returns liste d'options désactivées sélectionnées
     */
    private unselectAllFilteredExceptDisabled;
    /**
     * Attribut aria-activedescendant sur l'input égal à l'option qui a le focus
     * @internal */
    private setAriaActiveDescendant;
    /** 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 sans sélection de groupes */
    private optionClickMultiple;
    /** Sélection ou déselection d'une option avec sélection de groupes activée */
    private optionClickMultipleWithGroupSelection;
    /** Mise a jour du statut selected d'une option de groupe et de ses enfants */
    private setSelectedStateChildren;
    /** Mise a jour du statut selected d'une option de groupe après sélection d'un de ses enfants */
    private setSelectedStateParent;
    private findParent;
    /** Fonction de recherche par défaut */
    private _searchFn;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrPickListUnitComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrPickListUnitComponent, "edu-picklist-unit", never, { "optionTemplateUnit": { "alias": "optionTemplateUnit"; "required": false; }; "pickListUnitId": { "alias": "pickListUnitId"; "required": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; }; "listPosition": { "alias": "listPosition"; "required": true; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "showGroupSelection": { "alias": "showGroupSelection"; "required": false; }; "showClearSearch": { "alias": "showClearSearch"; "required": false; }; "searchMessage": { "alias": "searchMessage"; "required": false; }; "virtualScrollItemHeight": { "alias": "virtualScrollItemHeight"; "required": false; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "labelHeader": { "alias": "labelHeader"; "required": false; }; "ariaLabelList": { "alias": "ariaLabelList"; "required": false; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; }; "options": { "alias": "options"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; }, { "selectionChange": "selectionChange"; "touched": "touched"; "filterChange": "filterChange"; }, ["optionTemplate"], never, true, never>;
    static ngAcceptInputType_virtualScroll: unknown;
    static ngAcceptInputType_showSearch: unknown;
    static ngAcceptInputType_showSelectAll: unknown;
    static ngAcceptInputType_showGroupSelection: unknown;
    static ngAcceptInputType_showClearSearch: unknown;
    static ngAcceptInputType_disabled: unknown;
}

declare class DsfrPickListComponent extends DefaultValueAccessorComponent<any> implements OnInit {
    /** @internal */
    pickListUnitLeft: DsfrPickListUnitComponent;
    /** @internal */
    pickListUnitRight: DsfrPickListUnitComponent;
    /** Template des options */
    optionTemplate?: TemplateRef<any>;
    /** Id du composant, généré par défaut */
    pickListId?: string;
    /** Label du champ de sélection (prioritaire sur le slot label) */
    label?: string;
    /** Texte de description additionnel */
    hint?: string;
    /**
     * Afficher la barre de recherche (filtre sur les options)
     */
    showSearch: boolean;
    /** Afficher la case à cocher tout sélectionner */
    showSelectAll: boolean;
    /** Afficher un bouton pour vider le champ de la barre de recherche */
    showClearSearch: boolean;
    /** Afficher le header des unités de picklist */
    showHeader: boolean;
    /** Permet la sélection globale des groupes.
     * Lorsqu'activé, une case à cocher apparaît sur le label de chaque groupe, et permet de sélectionner ou désélectionner toutes les options qu'ils contiennent.
     */
    showGroupSelection: boolean;
    /** Intitulé du header de la liste source. Une valeur par défaut est utilisée lorsque `showHeader` est activé sans qu'un libellé spécifique ne soit fourni. */
    labelHeaderSourceList?: string;
    /** Intitulé du header de la liste destinataire. Une valeur par défaut est utilisée lorsque `showHeader` est activé sans qu'un libellé spécifique ne soit fourni. */
    labelHeaderDestinationList?: string;
    /** Placeholder pour le champ de recherche */
    searchMessage?: string;
    /** Message d'accessibilité vocalisé lorsqu'il n'y a aucun résultat. */
    noResultsMessage?: string;
    /** Afficher un état de chargement */
    loading: boolean;
    /** Activer le virtual scroll  */
    virtualScroll: boolean;
    /** Surcharger la hauteur d'un item dans le cas du virtual scroll. Par défaut 32px. */
    virtualScrollItemHeight: number;
    /**
     * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.
     */
    labelSrOnly: boolean;
    /** 👓 Correspond à l'attribut `aria-label` du composant */
    ariaLabel?: string;
    /** 👓 Correspond à l'attribut `aria-describedby` du composant  */
    ariaDescribedby?: string;
    /** 👓 Correspond à l'attribut `aria-label` de la liste d'éléments source */
    ariaLabelSourceList?: string;
    /** 👓 Correspond à l'attribut `aria-label` de la liste d'élements destinataire */
    ariaLabelDestinationList?: string;
    /** Liste d'options sélectionnée modifiée */
    selectionChange: EventEmitter<any[] | undefined>;
    /**
     * Message d'information lié au composant.
     */
    message: _angular_core.InputSignal<string | undefined>;
    /**
     * Représente la sévérité du message.
     */
    messageSeverity: _angular_core.InputSignal<"info" | "error" | "valid" | "warning" | "success" | undefined>;
    /** Attribut aria-describedby référençant une description supplémentaire optionnelle */
    ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
    /** @internal */
    combinedAriaDescribedBy: _angular_core.Signal<string | null>;
    /** Mode : picklist ou dual list */
    mode: _angular_core.InputSignal<ModeValue>;
    /** Hauteur avant le scroll sur la liste déroulante. */
    scrollHeight: _angular_core.InputSignal<string | undefined>;
    /** @internal */
    protected messagesGroupId: string;
    protected leftOptions: WritableSignal<SelectOptionViewModel[]>;
    protected rightOptions: WritableSignal<SelectOptionViewModel[]>;
    protected _options: SelectOptionViewModel[];
    protected _scrollHeight: WritableSignal<string | undefined>;
    /** compareWith reprise de l'implémentation angular SelectControlValueAccessor */
    protected compareWithFn: (o1: any, o2: any) => boolean;
    protected cd: ChangeDetectorRef;
    protected leftSelected: WritableSignal<any[] | undefined>;
    protected rightSelected: WritableSignal<any[] | undefined>;
    private optionsViewModel;
    private rightFlatten;
    private i18n;
    private filteredLists;
    constructor();
    /** @internal */
    get options(): any[];
    /** @internal */
    get labelHeaderLeftInternal(): string | undefined;
    /** @internal */
    get labelHeaderRightInternal(): string | undefined;
    /** @internal */
    get ariaLabelListLeft(): string;
    /** @internal */
    get ariaLabelListRight(): string;
    /** 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);
    /** Liste des options disponibles. */
    set options(val: any[]);
    /** 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);
    ngOnInit(): void;
    /** @internal */
    setDisabledState(isDisabled: boolean): void;
    /** @internal */
    writeValue(value: any[]): void;
    /** Indique si le mode est dual list, ou pick list */
    protected isDualListMode(): boolean;
    /** Fonction de recherche par défaut */
    protected searchFunction: (o: DsfrOption, searchText: string) => boolean;
    /** Enregistre les changements des options affichées après un filtrage d'une picklist-unit */
    protected handleFilterChange(filterChange: DsfrFilterChange): void;
    /**
     * Déplacement de l'ensemble des élements de gauche vers la droite
     * Les options désactivées ne doivent pas bouger
     */
    protected moveAllToRight(): void;
    /**
     * Déplacement de l'ensemble des élements de droite vers la gauche
     * Les options désactivées ne doivent pas bouger
     */
    protected moveAllToLeft(): void;
    /** Déplacement des éléments sélectionnés de gauche : de la gauche vers la droite */
    protected moveToRight(): void;
    /** Déplacement des éléments sélectionnés de droite : de la droite vers la gauche */
    protected moveToLeft(): void;
    protected setNewValuesRightSide(newRightsValues: any[], shouldUpdateValue?: boolean): void;
    /** Mise à jour de la sélection de gauche */
    protected onLeftSelectionChange(selection: DsfrSelectOption[] | undefined): void;
    /** Mise à jour de la sélection de droite */
    protected onRightSelectionChange(selection: DsfrSelectOption[] | undefined): void;
    protected clearOptionsRightPickListUnit(): void;
    protected clearOptionsLeftPickListUnit(): void;
    /** Supprime certaines valeurs du modèle complet et reconstruit l'arbre.
     *
     * @param valuesToRemove - Liste des valeurs à retirer du modèle complet.
     * @returns Un tableau représentant le modèle après suppression.
     *
     */
    private removeValuesFromAllVm;
    /** Filtre le modèle complet pour ne conserver que certaines valeurs,
     * en incluant leurs groupes parents si nécessaire, puis reconstruit l'arbre.
     *
     * @param valuesToKeep - Liste des valeurs à conserver.
     * @returns Un tableau représentant le modèle filtré.
     *
     */
    private filterAllVm;
    /** Met à jour la valeur finale du composant */
    private updateValue;
    private moveAllFilteredToRight;
    private moveAllFilteredToLeft;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrPickListComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrPickListComponent, "dsfr-ext-picklist, dsfrx-picklist", never, { "pickListId": { "alias": "pickListId"; "required": false; }; "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "showClearSearch": { "alias": "showClearSearch"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showGroupSelection": { "alias": "showGroupSelection"; "required": false; }; "labelHeaderSourceList": { "alias": "labelHeaderSourceList"; "required": false; }; "labelHeaderDestinationList": { "alias": "labelHeaderDestinationList"; "required": false; }; "searchMessage": { "alias": "searchMessage"; "required": false; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; }; "virtualScrollItemHeight": { "alias": "virtualScrollItemHeight"; "required": false; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; }; "ariaLabelSourceList": { "alias": "ariaLabelSourceList"; "required": false; }; "ariaLabelDestinationList": { "alias": "ariaLabelDestinationList"; "required": false; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "messageSeverity": { "alias": "messageSeverity"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; }; "options": { "alias": "options"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; }, { "selectionChange": "selectionChange"; }, ["optionTemplate"], ["[label]"], true, never>;
    static ngAcceptInputType_virtualScroll: unknown;
}

declare class DsfrProgressBarComponent implements OnDestroy {
    /**
     * Label de la barre de progression.
     */
    label: string;
    /**
     * Affiche ou masque la valeur de la barre de progression, vrai par défaut.
     */
    showValue: boolean;
    /**
     * Affiche ou masque le label de la barre de progression, vrai par défaut.
     */
    showLabel: boolean;
    /**
     * Determine la valeur minimale et la valeur maximale de la valeur représentée dans la progress bar.
     */
    range: DsfrProgressBarRange;
    /**
     * Signe d'unité ajouté à la valeur, '%' par défaut.
     */
    unit: string;
    /**
     * Stoppe l'animation de la barre si la valeur de cette dernière est indéterminée.
     */
    stopIndeterminateAnimation: boolean;
    /**
     * 👓 Message permettant de contextualiser le processus décrit par la barre de progression en mode "indéterminé".
     *
     * Valeur par défaut : "Chargement de l'agenda en cours. Veuillez patienter."
     */
    indeterminateContextMessage: string | undefined;
    /**
     * Id du conteneur
     * @internal */
    protected progressbarId: string;
    /** Id du label
     * @internal
     */
    protected labelId: string;
    protected barLength: number;
    protected valueText: string | null;
    protected readonly i18n: DsfrI18nService;
    private _value;
    private subscription;
    constructor();
    get indeterminate(): boolean;
    get value(): number | undefined;
    /**
     * Valeur actuelle de la progression. La valeur `null` représente une valeur indéterminée.
     */
    set value(value: number | undefined);
    ngOnDestroy(): void;
    private computeBarLength;
    private computeValueText;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrProgressBarComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrProgressBarComponent, "dsfr-ext-progressbar, dsfrx-progressbar", never, { "label": { "alias": "label"; "required": true; }; "showValue": { "alias": "showValue"; "required": false; }; "showLabel": { "alias": "showLabel"; "required": false; }; "range": { "alias": "range"; "required": false; }; "unit": { "alias": "unit"; "required": false; }; "stopIndeterminateAnimation": { "alias": "stopIndeterminateAnimation"; "required": false; }; "indeterminateContextMessage": { "alias": "indeterminateContextMessage"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, true, never>;
}
interface DsfrProgressBarRange {
    min: number;
    max: number;
}

declare class DsfrSpinnerComponent {
    /**
     * Type de loader.
     */
    typeLoader: 'sun' | 'quarter' | 'line';
    /**
     * Message permettant de donner plus de contexte aux usagers visualisant le spinner de temporisation.
     */
    label?: string;
    /**
     * Permet de masquer visuellement le libellé fourni par la propriété `label`.
     *
     * ⚠️ Changement depuis 1.6.0, cette propriété ne sert plus à fournir le libellé accessible : les types `string` et
     * `undefined` sont dépréciés au profit d'un type `boolean` permettant de masquer le libellé (par défaut à `true`).
     */
    labelSrOnly?: string | boolean;
    /**
     * Ajoute un overlay fullscreen.
     */
    overlay: boolean;
    /**
     * Permet le changement de taille du spinner.
     */
    spinnerSize: DsfrSize;
    private i18n;
    constructor();
    protected getSpinnerClasses(): {};
    protected isNonEmptyString(value: unknown): value is string;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrSpinnerComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrSpinnerComponent, "dsfr-ext-spinner, dsfrx-spinner", never, { "typeLoader": { "alias": "typeLoader"; "required": false; }; "label": { "alias": "label"; "required": false; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; }; "overlay": { "alias": "overlay"; "required": false; }; "spinnerSize": { "alias": "spinnerSize"; "required": false; }; }, {}, never, never, true, never>;
}

interface DsfrTimelineAction extends DsfrModalAction {
    disabled?: boolean;
    variant?: DsfrButtonVariantConst;
}
interface DsfrTimelineEvent {
    heading: string;
    headingLevel?: DsfrHeadingLevel$1;
    description?: string;
    detailBottom: string;
    badges?: DsfrBadge[];
    current: boolean;
    actions?: DsfrTimelineAction[];
}
declare enum DsfrTimelineLayout {
    VERTICAL = "vertical",
    HORIZONTAL = "horizontal"
}
declare class DsfrTimelineComponent {
    /**
     * Liste d'évènements.
     */
    events: DsfrTimelineEvent[];
    /**
     * Gestion du mode d'affichage : 'vertical' (par défaut) ou 'horizontal'.
     */
    layout: DsfrTimelineLayout;
    /**
     * Type de balise HTML pour le conteneur des descriptions. <p> par défaut.
     */
    descriptionMarkup: _angular_core.InputSignal<"div" | "p">;
    /** @internal */
    performAction(action: DsfrTimelineAction): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrTimelineComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrTimelineComponent, "dsfr-ext-timeline, dsfrx-timeline", never, { "events": { "alias": "events"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "descriptionMarkup": { "alias": "descriptionMarkup"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Décrit une notification.
 */
interface DsfrToast {
    /**
     * Identifiant unique de la notification (sera généré automatiquement si non valorisé).
     */
    toastId?: string;
    /**
     *  Titre de la notification dans une balise `div` de style `toast--header`, accepte le format HTML.
     */
    heading?: string;
    /**
     * Contenu de la notification dans une balise `div` de style `toast--content`, accepte le format HTML.
     */
    content?: string;
    /**
     *  Sévérité du toast ('info' par défaut).
     */
    severity?: DsfrSeverity;
    /**
     * Permet d'individualiser la durée d'affichage de cette notification (5000ms par défaut).
     */
    duration?: number;
}
/**
 * Définit les positions utilisables pour l'apparition des toasts.
 */
declare enum DsfrToastPositionConst {
    CENTER = "center",
    TOP_LEFT = "top-left",
    TOP_CENTER = "top-center",
    TOP_RIGHT = "top-right",
    BOTTOM_LEFT = "bottom-left",
    BOTTOM_CENTER = "bottom-center",
    BOTTOM_RIGHT = "bottom-right"
}
/**
 * Type union correspondant aux valeurs de l'enum {@link DsfrToastPositionConst}.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button
 */
type DsfrToastPosition = `${DsfrToastPositionConst}`;

declare const DEFAULT_POSITION = DsfrToastPositionConst.BOTTOM_CENTER;
declare class DsfrToastComponent implements AfterViewInit, OnDestroy {
    /**
     * La durée d'affichage en ms des notifications avant fermeture.
     *
     * Chaque notification peut recevoir elle même une durée d'affichage spécifique
     * à l'appel de la méthode show du ToastService.
     *
     * Valeur par défaut: 5000 ms.
     */
    duration: number;
    /**
     * Position par défaut des notifications.
     *
     * Valeur par défaut: 'bottom-center'.
     */
    position: DsfrToastPosition;
    /**
     * Propriété z-index du toaster.
     *
     * Le toaster crée un nouveau contexte d'empilement qui peut nécessiter des
     * ajustement en fonction des autres composants du contexte cible.
     *
     * Valeur par défaut: 2500
     */
    zIndex: number;
    /**
     * Notifie la fermeture d'une notification.
     */
    itemClose: EventEmitter<DsfrToast>;
    /**
     * Liste des toasts.
     */
    protected toasts: DsfrToast[];
    protected bottomPositions: string[];
    private subscription;
    private readonly toastService;
    /** @internal */
    ngAfterViewInit(): void;
    /** @internal */
    ngOnDestroy(): void;
    protected add(toast: DsfrToast): void;
    protected onToastClose(toast: DsfrToast): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrToastComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrToastComponent, "dsfr-ext-toaster, dsfrx-toaster", never, { "duration": { "alias": "duration"; "required": false; }; "position": { "alias": "position"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; }, { "itemClose": "itemClose"; }, never, never, true, never>;
}

declare class DsfrToastService {
    private _toast;
    constructor();
    /** Affiche la nouvelle notification. */
    show(toast: DsfrToast): void;
    toasts(): Observable<DsfrToast>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrToastService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<DsfrToastService>;
}

/**
 * Description d'un item, nœud, d'un arbre.
 */
interface DsfrNode {
    /**
     * Identifiant unique de l'élément. Obligatoire pour la mise à jour du contenu de l'arbre
     */
    id?: string;
    /** Ouvert ou non à l'initialisation, `false` par défaut  */
    expanded?: boolean;
    /** Icône du nœud de l'arbre, préfix `fr-icon-` */
    icon?: string;
    /** Libellé du nœud de l'arbre, obligatoire. */
    label: string;
    /** Sélection du nœud désactivée */
    disabled?: boolean;
    /** Nœud sélectionné à l'initialisation, `false` par défaut. */
    selected?: boolean;
    /** Indique si le noeud doit être masqué, utilisé pour filtrer le contenu de l'arbre. */
    hidden?: boolean;
    /** Données associées, à disposition de l'utilisateur. */
    data?: any;
    /** Arborescences imbriquées, `undefined` par défaut. */
    children?: DsfrNode[];
}
/**
 * Classe d'un noeud interne implémentant DsfrNode utilisé pour la visualisation.
 */
declare class DsfrViewNode implements DsfrNode {
    id?: string;
    readonly expanded?: boolean | undefined;
    readonly selected?: boolean | undefined;
    icon?: string;
    label: string;
    disabled?: boolean;
    hidden?: boolean;
    data?: any;
    children?: DsfrViewNode[];
    /** Etat courant de l'état étendu / plié, initialisé à false dans le cas d'un noeud parent */
    isExpanded: WritableSignal<boolean>;
    /** Etat courant de l'état sélectionné (coché / décoché / indéterminé), initialisé à undefinde */
    isSelected: WritableSignal<boolean | undefined>;
    /** Attribut a11y. Niveau hiérarchique  */
    ariaLevel: number;
    /** Attribut a11y. Nombre d'éléments dans le niveau */
    ariaSize: number;
    /** Attribut a11y. Index de l'élément dans le niveau */
    ariaPosinset: number;
}
/**
 * Actions d'une arborescence
 */
interface DsfrTree {
    /** Mise a jour du contenu de l'arbre. Conserve l'état (nœuds étendus et sélectionnés) si l'id des nœuds est renseigné. */
    updateContent(): void;
    /**
     * Ouvre tous les nœuds de l'arborescence.
     */
    expandAll(): void;
    /**
     * Ferme tous les nœuds de l'arborescence.
     */
    collapseAll(): void;
    /**
     * Sélectionne / désélectionne tous les nœuds en mode multiple ou checkbox
     */
    selectAll(selected: boolean): void;
    /**
     * Réinitialise l'état de l'arbre (nœuds étendus et sélectionnés)
     */
    reinitializeState(): void;
}

/**
 * Interface utilisée par TreeFocusManager
 */
interface TreeFocusable {
    /** Identifiant du noeud possédant le focus courant */
    focusedNodeId: WritableSignal<string | undefined>;
    /** Retourne la structure arborescente du composant. */
    get nodes(): DsfrNode[];
    /** Ouvre tous les nœuds de l'arborescence. */
    expandAll(): void;
    /** Etendre les noeuds de l'arborescence jusqu'au niveau précisé */
    expandLevel(level: number): void;
    /** Ferme tous les nœuds de l'arborescence. */
    collapseAll(): void;
    /** Effectue l'action par défaut (sélection / déselection) sur le nœud courant. */
    doNodeDefaultAction(node: DsfrNode, event: Event): void;
    /** Recherche la liste des nœuds visibles, ce sont les éléments qui posséderont le tabindex */
    findVisibleNodesElt(): HTMLElement[];
    /** Retourne l'élément avec focus ou undefined. */
    findFocusElement(): HTMLElement | undefined;
}

/**
 * Interface utilisée par TreeSelectManager
 */
interface TreeSelectable {
    /** Indique si toutes les options sont sélectionnées ou non. */
    isAllSelected: WritableSignal<boolean>;
    /** Retourne la structure arborescente du composant.  */
    get nodes(): DsfrViewNode[];
    /** Sélectionne / désélectionne tous les nœuds en mode multiple ou checkbox. */
    selectAll(select: boolean): void;
    /** Notifie le composant que node a changé d'état. */
    notifySelectEvent(node: DsfrNode): void;
    /** Mise à jour, graphique, du statut indeterminate. */
    updateIndeterminate(node: DsfrNode): void;
}

/** Événement émis lors de la sélection d'un nœud. */
interface DsfrNodeEvent extends Omit<DsfrNode, 'children'> {
}
interface DsfrTreeNodeEvent {
    node: DsfrNodeEvent | null;
    nodesSelected: DsfrNode[];
}
/**
 * Interface utilisée pour le contexte du template nodeTemplate
 */
interface DsfrNodeContext$1 {
    $implicit: DsfrNode;
}
declare class DsfrTreeComponent implements TreeFocusable, TreeSelectable {
    /** Template pour personnaliser le contenu d'un noeud.
     * Le slot s'ajoute après le label en mode checkbox et le remplace dans les autres modes.  */
    nodeTemplate?: TemplateRef<DsfrNodeContext$1>;
    /** Indique le changement d'état d'un nœud. */
    nodeSelect: EventEmitter<DsfrNodeEvent>;
    /** Indique un changement sur la sélection. Renvoie le noeud concerné et liste des noeuds (feuilles) sélectionnés */
    selectionChange: EventEmitter<DsfrTreeNodeEvent>;
    /** Indique si toutes les options sont sélectionnées ou non. */
    /** @internal */
    isAllSelected: _angular_core.WritableSignal<boolean>;
    /** @internal */
    focusedNodeId: _angular_core.WritableSignal<string | undefined>;
    protected nodesElement: _angular_core.Signal<readonly ElementRef<HTMLElement>[]>;
    protected isModeSelectable: boolean;
    protected viewNodes: _angular_core.WritableSignal<DsfrViewNode[]>;
    private _data;
    private focusManager;
    private selectManager;
    /**
     * Tous les HTMLElements correspondants aux noeuds visibles (expanded) et dans l'ordre du DOM
     * (on ne peut pas récuprer directement viewNodes() => l'ordre du DOM n'est pas respecté)
     */
    private visibleNativeNodeElements;
    constructor();
    get selectionMode(): DsfrSelectionMode;
    /** Noeuds affichés */
    get nodes(): DsfrViewNode[];
    set selectionMode(value: DsfrSelectionMode);
    /** Données sous forme d'arbre DsfrNode[] */
    set value(val: DsfrNode[]);
    /**
     * Permet la récupération du modèle interne de l'arbre.
     * @returns Un tableau de DsfrNode[].
     */
    getTreeState(): DsfrViewNode[];
    /**
     * Permet la récupération de la sélection courante de l'arbre.
     * @returns Un tableau de DsfrNode[].
     */
    getSelection(): DsfrNode[];
    /** @internal */
    isCheckboxMode(): boolean;
    /** @internal */
    isSelectable(): boolean;
    /** @internal */
    onNodeButton(node: DsfrViewNode): void;
    /**
     * Sélection du label d'un nœud lorsque que l'on a un label sans checkbox. Si le mode est `selectable` :
     * - on inverse la sélection, uniquement du nœud, on émet un événement.
     */
    /** @internal */
    onNodeSelect(node: DsfrViewNode, event: Event): void;
    /**
     * Gestion des touches de navigation.
     * On transfère la gestion au composant qui gère la liste.
     */
    /** @internal */
    onNodeKeydown(node: DsfrViewNode, event: KeyboardEvent): void;
    /** Etendre tous les noeuds de l'arborescence. */
    expandAll(): void;
    /** Etendre les noeuds de l'arborescence jusqu'au niveau précisé */
    expandLevel(level: number): void;
    /** Fermer tous les nœuds de l'arborescence.  */
    collapseAll(): void;
    /** @internal */
    doNodeDefaultAction(node: DsfrViewNode, event: Event): void;
    /**
     * Trouver tous les noeuds <li> visibles
     * @internal
     */
    findVisibleNodesElt(): HTMLElement[];
    /** @internal */
    findFocusElement(): HTMLElement | undefined;
    /**
     * Mise a jour du contenu de l'arbre. Conserve l'état (nœuds étendus et sélectionnés) si l'id des nœuds est renseigné.
     */
    updateContent(): void;
    /**
     * Réinitialise l'état de l'arbre (nœuds étendus et sélectionnés)
     * @internal
     */
    reinitializeState(): void;
    /** Sélectionne / désélectionne tous les nœuds en mode multiple ou checkbox.
     * @internal
     */
    selectAll(selected?: boolean): void;
    /** Emission d'un événement pour un nœud.
     * @internal
     */
    notifySelectEvent(node: DsfrViewNode): void;
    /**
     * Met à jour la propriété `indeterminate` de la checkbox `node.inputId` en fonction de la valeur de 'node.isSelected'.
     * @param node Nœud de l'arbre
     */
    /** @internal */
    updateIndeterminate(node: DsfrViewNode): void;
    protected trackById(index: number, item: DsfrNode): string | undefined;
    protected getCheckboxId(node: DsfrNode): string;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrTreeComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrTreeComponent, "dsfr-ext-tree, dsfrx-tree", never, { "selectionMode": { "alias": "selectionMode"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "nodeSelect": "nodeSelect"; "selectionChange": "selectionChange"; }, ["nodeTemplate"], never, true, never>;
}

/**
 * Interface utilisée pour le contexte du template optionTemplate
 */
interface DsfrNodeContext {
    $implicit: DsfrNode;
}
declare class DsfrTreeselectComponent extends AbstractSelectComponent<DsfrViewNode> implements OnInit, TreeFocusable, TreeSelectable {
    /** Stratégie de sélection, uniquement en mode single. Par défaut seules les feuilles sont sélectionnables.*/
    selectionStrategy: 'leaf' | 'all';
    /** Template des labels des options */
    optionTemplate?: TemplateRef<DsfrNodeContext>;
    /** @internal */
    viewport?: CdkVirtualScrollViewport;
    /** @internal*/
    isAllSelected: _angular_core.WritableSignal<boolean>;
    /** @internal */
    focusedNodeId: _angular_core.WritableSignal<string | undefined>;
    protected visibleNodes: DsfrViewNode[];
    protected countFilteredOptions: number;
    protected countLeaves: number;
    protected countFilteredLeaves: number;
    protected nodesElement: _angular_core.Signal<readonly ElementRef<HTMLElement>[]>;
    private treeFocusManager;
    private treeSelectManager;
    /**
     * Tous les HTMLElements correspondants aux noeuds visibles (expanded) et dans l'ordre du DOM
     * (on ne peut pas récuprer directement viewNodes() => l'ordre du DOM n'est pas respecté)
     */
    private visibleNativeNodeElements;
    constructor();
    /** @internal Equivalent a optionsFilter */
    get nodes(): DsfrViewNode[];
    /** @internal */
    get selectionMode(): DsfrSelectionMode;
    /** Personnalisation de la fonction de recherche pour filtrer les options. Fonction à 2 arguments : node (DsfrNode) et texte cherché (string) */
    set searchFn(fn: (n: DsfrNode, text: string) => boolean);
    /** Liste des options (DsfrNode[]) disponibles. */
    set options(val: any[] | undefined);
    /** Mode de sélection. Checkbox par défaut. */
    set selectionMode(mode: DsfrSelectionMode);
    ngOnInit(): void;
    /**
     * Mise a jour de la valeur de selectedOptions et value programmatiquement (ex. à l'init reactive form)
     * @param value
     * @internal
     */
    writeValue(value: any): void;
    /** @internal */
    toggleDropdown(event: Event): void;
    /** @internal */
    notifySelectEvent(node: DsfrNode): void;
    /** Mise a jour de l'état des checkbox selon leur id, nécessaire avec le tri en virtualScroll (perte du binding)
     * @internal */
    updateIndeterminate(node: DsfrViewNode): void;
    /**
     * Selection/Deselection du noeud
     * Mise a jour de la liste des noeuds sélectionnés
     * @internal */
    doNodeDefaultAction(node: DsfrViewNode, event: Event): void;
    /** @internal */
    findFocusElement(): HTMLElement | undefined;
    /**
     * Clic sur une option en mode tag supprimable.
     * Déselection option et mise a jour des parents.
     * @internal */
    clearOption(event: {
        nativeEvent: Event;
        option: DsfrViewNode;
    }): void;
    /**
     * Trouver tous les noeuds <li> visibles
     * @internal
     */
    findVisibleNodesElt(): HTMLElement[];
    /** @internal */
    selectAll(): void;
    /** @internal */
    clearAllOptions(): void;
    /** Etendre tous les noeuds de l'arborescence. */
    expandAll(): void;
    /** Etendre les noeuds de l'arborescence jusqu'au niveau précisé */
    expandLevel(level: number): void;
    /** Fermer tous les nœuds de l'arborescence.  */
    collapseAll(): void;
    /**
     * Gestion du focus à l'ouverture de la liste (evenement du dropdown-container)
     * Focus le 1er element feuille sélectionne visible ou le 1er element du tree
     */
    handleListFocus(): void;
    /**
     * Au clic sur le label ou la checkbox
     * Sélection ou déselection des noeuds
     * @internal */
    onOptionClick(event: Event, node: DsfrViewNode): void;
    /**
     * Filtrer les options selon la fonction de recherche
     * @internal */
    onSearch(): void;
    /**
     * Au clic sur les boutons flèches plier/déplier les noeuds
     *  @internal */
    onNodeButton(node: DsfrViewNode): void;
    /**
     * Interaction clavier avec un des noeuds
     * @internal */
    onNodeKeydown(node: DsfrViewNode, event: KeyboardEvent): void;
    /** @internal */
    isSelectable(): boolean;
    protected trackById(index: number, item: DsfrNode): string | undefined;
    /** Surcharge de compareWith par défaut pour utiliser les id */
    protected _compareWith: (o1: any, o2: any) => boolean;
    /** Mise a jour selectedOptions puis value */
    private updateValueSelected;
    /** Fonction de recherche par défaut */
    private _searchFn;
    /**
     * Filtre visuellement les nœuds en appliquant `hidden` en fonction du résultat de la recherche.
     * - nœud parent visible : correspond à la recherche ou au moins un de ses enfants est visible.
     * - nœud enfant visible : correspond à la recherche ou un de ses ancêtres correspond à la recherche.
     * @param node Le nœud à filtrer de manière récursive.
     * @returns `true` si le nœud est visible, sinon `false`.
     */
    private updateNodeVisibility;
    /**
     * Filtrer physiquement les noeuds dans le cadre du virtualScroll
     * /!\ Le virtualScroll ne permet pas d'utiliser la propriété hidden
     * Identique à updateNodeVisibility mais supprime au lieu d'utiliser la propriété hidden
     * @param node Le nœud à filtrer de manière récursive.
     * @returns le noeud si match, null sinon
     */
    private filterNodes;
    /**
     * Parcours d'arbre pour mettre a jour la valeur selected des nodes à l'init (DsfrNode[]),
     * selon les valeurs sélectionnées programmatiquement
     * @param nodes arbre complet avec selected a mettre a jour
     * @param value tableau non-vide des noeuds sélectionnés
     */
    private setSelectedNodes;
    /**
     * Calcule si toutes les options visibles et non-disabled sont sélectionnées
     */
    private areAllOptionsSelected;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrTreeselectComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrTreeselectComponent, "dsfr-ext-treeselect, dsfrx-treeselect", never, { "selectionStrategy": { "alias": "selectionStrategy"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; "options": { "alias": "options"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; }, {}, ["optionTemplate"], ["[label]"], true, never>;
}

interface DsfrTreeTableContext {
    selectNode(node: DsfrViewNode, event: Event): void;
    refreshRenderAfterExpand(): void;
}

/**
 * Directive row node sur une ligne <tr> correspondant à un noeud.
 * Gère l'etat collapse/expand (avec bouton flêche) et les attributs aria nécessaires au table
 */
declare class DsfrRowNodeDirective implements OnDestroy {
    node: DsfrViewNode;
    protected viewContainer: ViewContainerRef;
    protected renderer: Renderer2;
    protected element: ElementRef<any>;
    protected readonly destroyRef: DestroyRef;
    /** Dépendance vers la méthode onExpandedNode() de treeTableComponent */
    protected readonly treeTableContext: DsfrTreeTableContext;
    private firstTd;
    private _unlisten;
    private componentExpandRef;
    constructor();
    get ariaPosinset(): number | null;
    get ariaLevel(): number | null;
    get ariaSetsize(): number | null;
    ngOnDestroy(): void;
    private updateExpansionButton;
    private initFirstCell;
    private createExpansionButton;
    private updateExpandedState;
    private destroyButton;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrRowNodeDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DsfrRowNodeDirective, "[dsfrRowNode]", never, { "node": { "alias": "node"; "required": true; }; }, {}, never, never, true, never>;
}

/**
 * Directive étendue de row node, select sur une ligne <tr> correspondant à un noeud.
 * Gère la sélection avec checkbox
 */
declare class DsfrRowNodeSelectDirective extends DsfrRowNodeDirective implements OnDestroy {
    nodeSelect: EventEmitter<{
        node: DsfrViewNode;
        event: Event;
    }>;
    private componentCheckboxRef;
    constructor();
    get ariaSelected(): string;
    /**
     * Creation du composant edu-checkbox dans la premiere cellule de ligne
     * Ajout de l'evenement clic
     */
    private createCheckbox;
    private createCheckboxComponent;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrRowNodeSelectDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DsfrRowNodeSelectDirective, "[dsfrRowNodeSelect]", never, {}, { "nodeSelect": "nodeSelect"; }, never, never, true, never>;
}

/**
 * Classe abstraite permettant de copier les inputs/outputs publics de DsfrTable
 * Sert uniquement de classe tampon entre TreeTable et Table afin de générer une documentation propre
 * Etendre directement d'un BaseTable de la lib princ. casserait la génération des inputs/outputs dans la doc API de SB
 * /!\ Ne pas utiliser pour autre chose que la copie directe
 */
declare abstract class BaseTreeTableComponent {
    /** Template pour les groupes de boutons d'actions du header. DOIT contenir un dsfr-buttons-group */
    headerActionsTemplate?: TemplateRef<void>;
    /** Template du résumé dans le cas d'un tableau complexe */
    headerSummaryTemplate?: TemplateRef<void>;
    /** Template pour personnaliser l'affichage du nombre de lignes sélectionnées */
    headerSelectedRowCountTemplate?: TemplateRef<void>;
    /** Template de l'en-tête des colonnes du tableau. (contenu du thead) */
    tableHeaderTemplate?: TemplateRef<void>;
    /** Template du pied du tableau (contenu du tfoot) */
    tableFooterTemplate?: TemplateRef<void>;
    /** Template personnalisé pour afficher le total de lignes */
    footerResultsTemplate?: TemplateRef<void>;
    /** Template pour les groupes de boutons d'actions du footer */
    footerActionsTemplate?: TemplateRef<void>;
    /** Template à afficher pendant le chargement des données */
    loadingTemplate?: TemplateRef<void>;
    /** Template pour une vue alternative au tableau (ex. liste) */
    alternativeViewTemplate?: TemplateRef<void>;
    /** @internal template par défaut pour compter le nombre de lignes sélectionnées */
    defaultHeaderSelectedRowCountTemplate?: TemplateRef<void>;
    /** Identifiant de la table */
    tableId: string;
    /** Titre du tableau. Obligatoire sauf si labelledBy est renseigné. */
    caption?: string;
    /** Hauteur maximale de la table, nombre en pixels ou valeur en string. Le contenu supplémentaire provoque un scroll vertical */
    fixedHeight?: number | string;
    /** Rend les th sticky en haut du tableau. */
    thSticky: boolean;
    /** Le composant se bloquera au top de l'écran et prendra toute sa hauteur.*/
    tableHeaderSticky: boolean;
    /** Options d'affichage du tableau  */
    tableOptions: DsfrTableOptions;
    /** Définition des colonnes */
    columns: DsfrColumn[];
    /** Afficher le nombre de résultat total dans le footer */
    showFooterResult: boolean;
    /** Message affiché en cas de tableau vide ('Aucun résultat' par défaut) */
    emptyResultsMessage?: string;
    /** Indique que les données sont en cours de chargement */
    loading: boolean;
    /** Header: affiche la barre de recherche dans le header */
    showSearch: boolean;
    /** Valeur du placeholder de l'input de recherche, si showSearch est `true`. */
    searchInputPlaceholder?: string;
    /** Valeur du title du bouton de la barre de recherche, si showSearch est `true`. */
    searchButtonTitle?: string;
    /** Valeur de la barre de recherche, si `showSearch` est à `true`. */
    searchInputValue?: string;
    /** Label (pour les lecteurs d'écrans) de l'input de recherche. */
    searchLabel?: string;
    /** Header: affiche le changement de type de vue (tableau / liste) */
    showHeaderViews: boolean;
    /** Header: redéfinit les vues du contrôle segmenté (si showHeaderViews). Par défaut tableau/liste */
    headerViewsOptions: DsfrSegmentedControl[];
    /** Etat initial de la table à appliquer (tri, page et nombre de lignes affichées par page) */
    initialState: DsfrTableState | undefined;
    /** Afficher la pagination */
    pagination: boolean;
    /** Activer le mode serveur (pagination, tri et sélection côté serveur) */
    serverSide: boolean;
    /** Choix de taille de page (par défaut 10, 20, 50, 100). Pas d'affichage du select si non défini */
    rowsPerPageOptions: DsfrOption[];
    /** Changement de pagination (page affichée ou taille de page) */
    paginationChange: EventEmitter<DsfrTablePaginationEvent>;
    /** Etat modifié */
    readonly stateChange: EventEmitter<DsfrTableState>;
    /** Renvoie la vue sélectionnée au changement de vue (displayModes) */
    readonly viewSelect: EventEmitter<string>;
    /** Renvoie la valeur de l'input de la barre de recherche au changement.  */
    readonly searchChange: EventEmitter<string>;
    /** Renvoie la valeur de l'input de la barre de recherche au clic sur rechercher.  */
    readonly searchSelect: EventEmitter<string>;
    /** Renvoie la colonne triée au changement de tri de la table */
    readonly sortChange: EventEmitter<DsfrSortColumn | null>;
    /** Total du nombre de résultats (utilisé si serverSide) */
    serverResultsLength: _angular_core.InputSignal<number>;
    /** @internal */
    get resolvedHeaderSelectedRowCountTemplate(): TemplateRef<any> | undefined;
    /** @internal */
    onViewSelect(value: string): void;
    /** @internal */
    onSortChange(value: any): void;
    /** @internal */
    onStateChange(value: DsfrTableState): void;
    /** @internal */
    onSearchChange(search: string): void;
    /** @internal */
    onSearchSelect(search: string): void;
    /** @internal */
    onPaginationChange(event: DsfrTablePaginationEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseTreeTableComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseTreeTableComponent, "ng-component", never, { "tableId": { "alias": "tableId"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; "fixedHeight": { "alias": "fixedHeight"; "required": false; }; "thSticky": { "alias": "thSticky"; "required": false; }; "tableHeaderSticky": { "alias": "tableHeaderSticky"; "required": false; }; "tableOptions": { "alias": "tableOptions"; "required": false; }; "columns": { "alias": "columns"; "required": true; }; "showFooterResult": { "alias": "showFooterResult"; "required": false; }; "emptyResultsMessage": { "alias": "emptyResultsMessage"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; "searchInputPlaceholder": { "alias": "searchInputPlaceholder"; "required": false; }; "searchButtonTitle": { "alias": "searchButtonTitle"; "required": false; }; "searchInputValue": { "alias": "searchInputValue"; "required": false; }; "searchLabel": { "alias": "searchLabel"; "required": false; }; "showHeaderViews": { "alias": "showHeaderViews"; "required": false; }; "headerViewsOptions": { "alias": "headerViewsOptions"; "required": false; }; "initialState": { "alias": "initialState"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "serverSide": { "alias": "serverSide"; "required": false; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; }; "serverResultsLength": { "alias": "serverResultsLength"; "required": false; "isSignal": true; }; }, { "paginationChange": "paginationChange"; "stateChange": "stateChange"; "viewSelect": "viewSelect"; "searchChange": "searchChange"; "searchSelect": "searchSelect"; "sortChange": "sortChange"; }, ["headerActionsTemplate", "headerSummaryTemplate", "headerSelectedRowCountTemplate", "tableHeaderTemplate", "tableFooterTemplate", "footerResultsTemplate", "footerActionsTemplate", "loadingTemplate", "alternativeViewTemplate"], never, true, never>;
    static ngAcceptInputType_pagination: unknown;
    static ngAcceptInputType_serverSide: unknown;
}

/**
 * Interface utilisée pour le contexte du template nodeRowTemplate
 */
interface DsfrRowNodeContext {
    $implicit: DsfrViewNode;
    index: number;
}
declare class DsfrTreetableComponent extends BaseTreeTableComponent implements TreeFocusable, TreeSelectable, AfterViewInit, OnInit {
    /** Template pour personnaliser une ligne correspondant à un noeud. Doit représenter un <tr> */
    nodeRowTemplate?: TemplateRef<DsfrRowNodeContext>;
    /** Indique un changement sur la sélection. Renvoie le noeud concerné et liste des noeuds (feuilles) sélectionnés */
    selectionChange: EventEmitter<DsfrTreeNodeEvent>;
    /** Indique le changement d'état d'un nœud. */
    nodeSelect: EventEmitter<DsfrNodeEvent>;
    /**@internal */
    datatable: _angular_core.Signal<DsfrTableComponent | undefined>;
    /** @internal */
    isAllSelected: _angular_core.WritableSignal<boolean>;
    /** @internal */
    focusedNodeId: _angular_core.WritableSignal<string | undefined>;
    protected countSelectedNodes: _angular_core.WritableSignal<number>;
    protected viewNodes: _angular_core.WritableSignal<DsfrViewNode[]>;
    protected countLeaves: number;
    private elementRef;
    private selectManager;
    private focusManager;
    private firstInit;
    private hasFixedColumns;
    private _data;
    private i18n;
    constructor();
    /** Noeuds sélectionnés */
    get selectedNodes(): DsfrViewNode[];
    /** Noeuds affichés */
    get nodes(): DsfrViewNode[];
    /** Données sous forme d'arbre DsfrNode[] */
    set data(val: DsfrNode[]);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    /** Etendre tous les noeuds de l'arborescence. */
    expandAll(): void;
    /** Etendre les noeuds de l'arborescence jusqu'au niveau précisé */
    expandLevel(level: number): void;
    /** Fermer tous les nœuds de l'arborescence.  */
    collapseAll(): void;
    /**
     * Mise a jour du contenu de l'arbre. Conserve l'état (nœuds étendus et sélectionnés) si l'id des nœuds est renseigné.
     * Permet de forcer la mise à jour
     */
    updateContent(): void;
    /** Sélectionner ou déselectionner tous les noeuds
     * @param selected sélectionner/déselectionner
     */
    selectAll(selected: boolean): void;
    /** @internal */
    doNodeDefaultAction(node: DsfrViewNode, event: Event): void;
    /**
     * Trouver tous les noeuds <li> visibles (possèdent une hauteur minimale).
     * @internal
     */
    findVisibleNodesElt(): HTMLElement[];
    /** Retourne l'élément avec focus ou undefined.
     * @internal */
    findFocusElement(): HTMLElement | undefined;
    /** @internal */
    notifySelectEvent(node: DsfrNode): void;
    /** @internal */
    updateIndeterminate(node: DsfrViewNode): void;
    protected selectNode(node: DsfrViewNode, event: Event): void;
    protected refreshRenderAfterExpand(): void;
    /** Réinitialise l'état de l'arbre (nœuds étendus et sélectionnés) et le focus */
    protected reinitializeState(): void;
    /**
     * Sélection du label d'un nœud lorsque que l'on a un label sans checkbox. Si le mode est `selectable` :
     * - on inverse la sélection, uniquement du nœud, on émet un événement.
     * - maj de la checkbox selectAll
     */
    protected onNodeSelect(node: DsfrViewNode, event: Event): void;
    protected onNodeButton(node: DsfrViewNode): void;
    protected onClickSelectHeaderCheckbox(selectAll: boolean): void;
    protected trackById(index: number, item: DsfrNode): string | undefined;
    protected getCheckboxId(node: DsfrNode): string;
    /** Mise a jour de la checkbox select all (état indéterminé) **/
    private setIsAllSelected;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrTreetableComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrTreetableComponent, "dsfr-ext-treetable, dsfrx-treetable", never, { "data": { "alias": "data"; "required": false; }; }, { "selectionChange": "selectionChange"; "nodeSelect": "nodeSelect"; }, ["nodeRowTemplate"], never, true, never>;
}

interface DsfrFileActionsContext {
    $implicit: File;
    index: number;
    disabled: boolean;
}
/**
 * Directive permettant le typage du template `dsfrFileActions`, situé à la fin de la description d'un fichier en cours de
 * téléversation. Le slot correspondant est seulement disponible quand le composant `DsfrUploadDnd` n'est pas en mode `inline`.
 */
declare class DsfrFileActionsDirective {
    static ngTemplateContextGuard(dir: DsfrFileActionsDirective, ctx: unknown): ctx is DsfrFileActionsContext;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrFileActionsDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DsfrFileActionsDirective, "ng-template[dsfrFileActions]", never, {}, {}, never, never, true, never>;
}

/**
 * Directive permettant d'appliquer à un `DsfrButton` l'aspect du bouton de suppression de fichier placé à la fin de la description
 * d'un fichier en cours de téléversation du composant `DsfrUploadDnd`.
 *
 * Cette directive permet d'ajouter aisément ce bouton dans le cas de l'utilisation du slot `dsfrFileActions`.
 *
 * Attention: cette directive ne gère pas le comportement du bouton mais seulement son style. Pour supprimer le fichier,
 * utiliser la méthode `deleteFile` du composant `DsfrUploadDnd`
 */
declare class DsfrFileDeleteButtonDirective implements OnInit {
    file: File;
    private button;
    private i18nService;
    constructor();
    ngOnInit(): void;
    private addStyle;
    private addLabelInfo;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrFileDeleteButtonDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DsfrFileDeleteButtonDirective, "dsfr-button[dsfrFileDeleteBtn]", never, { "file": { "alias": "file"; "required": true; }; }, {}, never, never, true, never>;
}

interface DisplayedMessageStatus {
    message: string[] | undefined;
    messageSeverity: DsfrSeverity | undefined;
}
declare class DsfrUploadDndComponent extends DefaultControlComponent<File[]> implements OnInit {
    /** @internal */
    inputFile?: ElementRef<HTMLInputElement>;
    /** @internal */
    inlineDeleteBtn?: ElementRef<HTMLButtonElement>;
    /**
     * Slot custom pour personnaliser les boutons d'action relatifs à un fichier.
     *
     * Indisponible en mode inline.
     */
    fileActions?: TemplateRef<DsfrFileActionsDirective>;
    /** Version inline du composant. */
    inline: boolean;
    /** Label du button. */
    buttonLabel?: string;
    /** En mode full, n'affiche pas l'illustration. */
    hideIllustration: boolean;
    /** Texte indiquant le format de fichier accepté. Doit refléter la valeur donnée à l'attribut `accept` */
    formatAsked?: string;
    /** Texte indiquant le poids maximal autorisé du ou des fichiers. La valeur est seulement indicative et n'entraine aucune vérification interne au composant. */
    maxSizeInfo?: string;
    /** Unité de poids de fichier autorisé. */
    sizeUnit: DsfrFileSizeUnit;
    /** Ajoute l'attribut `aria-invalid` sur le champ de formulaire. */
    ariaInvalid?: string;
    /**
     * L'attribut `accept` prend comme valeur une chaîne de caractères contenant une ou plusieurs spécificateurs de type de fichier unique, séparées par des virgules.
     * Ces spécificateurs décrivent les types de fichiers pouvant être sélectionnés par l'utilisateur.
     *
     * ex: .jpg,.png,audio/*...
     */
    accept: string;
    /** Permet l'ajout de plusieurs fichiers à la fois. */
    multiple: boolean;
    /** Nombre maximum de fichiers pouvant être téléversés. */
    maxFiles?: number;
    /** Evénement émis à la sélection d'un ou plusieurs fichiers. */
    selectionChange: EventEmitter<File[]>;
    /** Evénement émis lorsque l'utilisateur annule la sélection. */
    fileBrowsingCancel: EventEmitter<void>;
    /** Renvoie les fichiers supprimés lorsque l'utilisateur retire un ou plusieurs fichiers */
    fileRemove: EventEmitter<File[]>;
    protected readonly i18n: DsfrI18nService;
    protected disabledDnd: boolean;
    protected breakpointObserver: BreakpointObserver;
    protected customBreakpoint: string;
    protected restitutionSelectedFiles: string;
    protected messageExpandButton: string | undefined;
    protected formatAskedUniqueId: string;
    protected ariaDescribedby: string;
    /** Gère l'affichage du bon markup en mode mobile. */
    protected isMobile: Signal<boolean>;
    /**
     * Gestion de l'affichage de la combinaison des messages internes et externes du composant.
     */
    protected readonly newMessages: Signal<string[]>;
    /**
     * Gestion de l'affichage dans le cas où le composant serait dans un autre statut qu'en erreur,
     * et qu'une erreur interne se manifeste. Dans ce cas, seules sont affichées les erreurs internes, et le statut
     * affiché du composant est forcé en erreur.
     */
    protected readonly displayedMessageStatus: Signal<DisplayedMessageStatus>;
    /** Gestion des classes CSS ajoutées selon la sévérité */
    protected readonly uploadDndClasses: Signal<string | null>;
    /** Gestion des classes CSS ajoutées selon la sévérité */
    protected readonly uploadDndMessageClass: Signal<string | null>;
    private internalError;
    private readonly _renderer;
    private readonly cdr;
    constructor();
    /**
     * Surcharge permettant de gérer la mise à jour du DOM.
     *
     * @internal
     */
    writeValue(value: File[] | undefined): void;
    /**@internal */
    setDisabledState(isDisabled: boolean): void;
    /** @internal */
    ngOnInit(): void;
    /**
     * Permet de programmatiquement réinitialiser le champ après une sélection de fichier(s).
     * @deprecated utiliser directement value
     */
    reset(): void;
    /**
     * Permet de supprimer le fichier se trouvant à l'index fournit.
     */
    deleteFile(index: number): void;
    /**
     * Fonction issue de la lib principale.
     */
    protected onFileBrowsingCancel(): void;
    /**
     * Fonction issue de la lib principale.
     */
    /** TODO: en version inline, après la sélection d'un fichier forcer le focus sur le btn de suppressions (accessibility). */
    protected onFileChange(event: Event): void;
    protected deleteAllFiles(): void;
    private convertFileArrayToFileList;
    private handleMessagesConcat;
    private toArray;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrUploadDndComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrUploadDndComponent, "dsfr-ext-upload-dnd, dsfrx-upload-dnd", never, { "inline": { "alias": "inline"; "required": false; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; }; "hideIllustration": { "alias": "hideIllustration"; "required": false; }; "formatAsked": { "alias": "formatAsked"; "required": false; }; "maxSizeInfo": { "alias": "maxSizeInfo"; "required": false; }; "sizeUnit": { "alias": "sizeUnit"; "required": false; }; "ariaInvalid": { "alias": "ariaInvalid"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "maxFiles": { "alias": "maxFiles"; "required": false; }; }, { "selectionChange": "selectionChange"; "fileBrowsingCancel": "fileBrowsingCancel"; "fileRemove": "fileRemove"; }, ["fileActions"], never, true, never>;
}

/**
 * @deprecated
 */
declare class DsfrToolslinksComponent {
    /** Liste des liens rapides */
    toolsLinks: DsfrLink[];
    /** Evènement émis au clic sur un lien */
    readonly linkSelect: EventEmitter<DsfrLink>;
    protected onLinkSelect(link: DsfrLink): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DsfrToolslinksComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DsfrToolslinksComponent, "dsfr-ext-toolslinks, dsfrx-toolslinks", never, { "toolsLinks": { "alias": "toolsLinks"; "required": true; }; }, { "linkSelect": "linkSelect"; }, never, never, true, never>;
}

export { DEFAULT_INTERVAL, DEFAULT_POSITION, DsfrAutocompleteComponent, DsfrCalendarComponent, DsfrCalendarModalComponent, DsfrCarouselComponent, DsfrDatePickerComponent, DsfrDropdownMenuComponent, DsfrDropdownMenuGroupComponent, DsfrDropdownMenuItemComponent, DsfrFileActionsDirective, DsfrFileDeleteButtonDirective, DsfrMultiselectComponent, DsfrPanelComponent, DsfrPickListComponent, DsfrProgressBarComponent, DsfrRowNodeDirective, DsfrRowNodeSelectDirective, DsfrSpinnerComponent, DsfrTimelineComponent, DsfrTimelineLayout, DsfrToastComponent, DsfrToastPositionConst, DsfrToastService, DsfrToolslinksComponent, DsfrTreeComponent, DsfrTreeselectComponent, DsfrTreetableComponent, DsfrUploadDndComponent, DsfrViewNode, ModeValue };
export type { DsfrCalendarMode, DsfrCompleteEvent, DsfrDateEvent, DsfrDefinedRangeModel, DsfrDropdownMenuItem, DsfrFileActionsContext, DsfrMenuButton, DsfrNode, DsfrNodeContext$1 as DsfrNodeContext, DsfrNodeEvent, DsfrProgressBarRange, DsfrRangeModel, DsfrSelectionMode, DsfrSlide, DsfrSlideContext, DsfrSuggestionContext, DsfrSuggestions, DsfrTimelineAction, DsfrTimelineEvent, DsfrToast, DsfrToastPosition, DsfrTree, DsfrTreeNodeEvent };
