import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
import { AbstractControl, ValidationErrors, Validator } from '@angular/forms';
import { DefaultControlComponent, DsfrI18nService, DsfrSeverity, LangService, LoggerService } from '@edugouvfr/ngx-dsfr';
import { DsfrCalendarComponent } from '../calendar/calendar.component';
import { DsfrDateEvent } from '../shared/models/date-event';
import * as i0 from "@angular/core";
/**
 * 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
 */
export declare class DsfrDatePickerComponent extends DefaultControlComponent<string> implements AfterViewInit, Validator, OnDestroy, OnChanges {
    private elementRef;
    private i18n;
    private langService;
    private logger;
    /** Message d'information lié au composant */
    message: string | undefined;
    /** Représente la sévérité du message. */
    severity: DsfrSeverity;
    /**
     * 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 | undefined;
    /** Attacher l'élément de liste déroulante au 'body' ou a un container (réf. vers un élément #div ou nom de la classe du parent) */
    appendTo: 'body' | HTMLElement | string | undefined;
    /** Emission de la date.*/
    dateChange: EventEmitter<DsfrDateEvent>;
    calendar: DsfrCalendarComponent;
    comboBox: ElementRef;
    protected modal: ElementRef<HTMLDivElement>;
    protected cancelBtn: ElementRef<HTMLButtonElement>;
    protected currentMonthIndex: number;
    protected currentYear: number;
    protected translatedMonthAbbreviations: string[];
    protected translatedMonths: string[];
    protected dialogTitle: string;
    protected modalLabel: string;
    /**
     * Placeholder par défaut de l'input. Dépend de la langue 'jj/mm/aaaa' ou 'mm/dd/yyyy'
     */
    protected placeholder: string;
    /**
     * Id aléatoire, unique, de la modale (le calendrier)
     */
    protected modalId: string;
    protected isOpen: boolean;
    protected buttonLabelChoose: string;
    private dialogTriggerBtnNode;
    private prevCodeLang;
    private buttonLabelChange;
    private dayLabels;
    private monthLabels;
    private _min;
    private _max;
    /** @internal */
    constructor(elementRef: ElementRef, i18n: DsfrI18nService, langService: LangService, logger: LoggerService);
    /**
     * Compatibilité ascendante avec l'ancien `datepicker`.
     * @deprecated since 0.10 Utiliser `message` et `severity` à la place.
     */
    get error(): string | undefined;
    /**
     * Compatibilité ascendante avec l'ancien `datepicker`.
     * @deprecated since 0.10 Utiliser `message` et `severity` à la place.
     */
    get valid(): string | 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;
    /**
     * Compatibilité ascendante avec l'ancien `datepicker`.
     * @deprecated since 0.10 Utiliser `message` et `severity` à la place.
     */
    set error(message: string | undefined);
    /**
     * Compatibilité ascendante avec l'ancien `datepicker`.
     * @deprecated since 0.10 Utiliser `message` et `severity` à la place.
     */
    set valid(message: string | 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);
    ngOnChanges(simpleChanges: SimpleChanges): void;
    /** @internal */
    ngOnDestroy(): void;
    /** @internal */
    ngAfterViewInit(): void;
    /**
     * @internal
     * Interface Validator
     */
    validate(control: AbstractControl): ValidationErrors | null;
    /**
     * Mise a jour du titre lors de la navigation dans le calendrier
     * @internal
     */
    onUpdateCalendarView(date: Date): void;
    writeValue(value: string): void;
    /**
     * Gère le clic en dehors de la modale
     */
    protected onCalendarOutside(): void;
    /**
     * Gère le changement de valeur de l'input
     */
    protected onInputChange(): void;
    /**********************
     * Event Handlers
     **********************/
    protected handleTriggerButtonClick(event: Event): void;
    protected handleTriggerButtonKeydown(event: KeyboardEvent): void;
    protected handleCancelButton(event: Event): void;
    protected handleModalKeydown(keyEvent: KeyboardEvent): void;
    protected onCalendarVisible(): void;
    protected handleDataChange(dateEvent: DsfrDateEvent): void;
    /**
     * Met à jour le titre de la dialog (visuellement caché) pour les besoins d'accessibilité.
     */
    protected updateDialogTitle(): void;
    /**
     * Gère la validation interne de la date pour les critères de date min et date max.
     * Retourne `true` en cas d'erreur.
     */
    private handleInternalValidation;
    /**
     * 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 reformatValue;
    /**
     * Gestion du changement de langue dans le composant.
     *
     * @param code Code de la locale à prendre en compte
     */
    private onLangChange;
    /**
     * 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;
    /**
     * Mets à jour la valeur du composant (donc normalement textboxNode.value) et émets un événement
     * @param value
     * @private
     */
    private setNewValue;
    /**
     * 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 setDateForTriggerButtonLabel;
    private updateMonthTranslations;
    private isValidIso;
    /**
     * Mise à jour du mois et de l'année pour le titre de la modale.
     */
    private updateMonthIndexAndYear;
    static ɵfac: i0.ɵɵFactoryDeclaration<DsfrDatePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DsfrDatePickerComponent, "dsfr-ext-datepicker, dsfrx-datepicker", never, { "message": { "alias": "message"; "required": false; }; "severity": { "alias": "severity"; "required": false; }; "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; }; "error": { "alias": "error"; "required": false; }; "valid": { "alias": "valid"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; }, { "dateChange": "dateChange"; }, never, ["[label]"], true, never>;
}
