import { EventEmitter, Injector, OnChanges, OnDestroy, DoCheck, OnInit, SimpleChanges, AfterViewInit, TemplateRef, ElementRef } from '@angular/core';
import { ControlValueAccessor, FormControl } from '@angular/forms';
import { MatCalendarCellClassFunction, MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';
import { BooleanInput } from '@angular/cdk/coercion';
import { Moment } from 'moment';
import 'moment/min/locales';
import { EuiTimepickerComponent } from '@eui/components/eui-timepicker';
import { BaseStatesDirective } from '@eui/components/shared';
import * as i0 from "@angular/core";
import * as i1 from "@eui/components/shared";
export declare class EuiDatepickerComponent implements OnInit, AfterViewInit, ControlValueAccessor, OnDestroy, OnChanges, DoCheck {
    baseStatesDirective: BaseStatesDirective;
    euiLetterFormat: EuiLetterFormatDirective;
    get cssClasses(): string;
    e2eAttr: string;
    inputFormControl: FormControl<any>;
    breakpointsValue: any;
    showDateButton: boolean;
    timePickerInstance: EuiTimepickerComponent;
    calendar: MatDatepicker<any>;
    templatePortalRef: TemplateRef<EuiActionButtonsDirective>;
    inputRef: ElementRef<HTMLInputElement>;
    euiActionButtons: EuiActionButtonsDirective;
    /**
     * Event emitted when there is a change in the input value.
     */
    inputChange: EventEmitter<any>;
    /**
     * Event emitted upon date selection.
     */
    dateSelect: EventEmitter<any>;
    /**
     * Sets the default value of the input field.
     */
    value: any;
    /**
     * Sets the svg icon for the calendar toggler button.
     * @default 'eui-calendar-outline'
     */
    togglerIconSvg: string;
    /**
     * Sets the name of the calendar toggler button label.
     * @type {string}
     */
    togglerLabel: string;
    /**
     * Sets the placeholder of the input field.
     * @type {string}
     */
    placeholder: string;
    /**
     * Sets the type of the calendar.
     * @type {('year' | 'month' | 'regular')}
     * @default 'regular'
     */
    type: 'year' | 'month' | 'regular';
    /**
     * Sets the starting view of the calendar.
     * @type {('month' | 'year' | 'multi-year')}
     * @default 'month'
     */
    startView: 'month' | 'year' | 'multi-year';
    /**
     * Sets minimum date in the calendar.
     */
    minDate: any;
    /**
     * Sets maximum date in the calendar.
     */
    maxDate: any;
    /**
     * Provides date validation based on the boolean value returned from the function.
     * @param {any} d - The date type which is chosen by the adapter used.
     * @returns {boolean} - Returns true if the date is valid, otherwise false.
     */
    datepickerFilter: (d: any) => boolean;
    /**
     * Sets the date output format.
     * @type {string}
     */
    dateOutputFormat: string;
    /**
     * Option to replace the current calendar header by a new one specified through a component class.
     */
    customHeader: any;
    /**
     * Option to apply one or more css classes to some dates in the calendar.
     * @type {MatCalendarCellClassFunction<any>}
     */
    dateClass: MatCalendarCellClassFunction<any>;
    /**
     * Sets the step for increasing/decreasing hours.
     * @default 1
     */
    stepHours: number;
    /**
     * Sets the step for increasing/decreasing minutes.
     * @default 1
     */
    stepMinutes: number;
    /**
     * Sets the step for increasing/decreasing seconds.
     * @default 1
     */
    stepSeconds: number;
    /**
     * Sets a unique id for the input field.
     * @default 'eui-datepicker-<uniqueId>'
     */
    inputId: string;
    /**
     * Allows passing one or multiple custom CSS classes to the underlying
     */
    customPanelClass: string | string[] | null;
    /**
     * Option to inject timepicker into the calendar.
     * @default false
     */
    isDatetimepicker: boolean;
    /**
     * Option for adding seconds in the calendar timepicker view.
     * @default false
     */
    hasSeconds: boolean;
    /**
     * Option for enabling a one input field timepicker in the calendar.
     * @default false
     */
    isOneInputField: boolean;
    /**
     * Option for hiding the calendar button.
     * @default false
     */
    hasNoButton: boolean;
    /**
     * Option for making the input field responsive.
     * @default false
     */
    isDatepickerBlock: boolean;
    /**
     * Option for making the input field read-only.
     * @default false
     */
    isReadOnly: boolean;
    /**
     * Option for disabling the whole component.
     * @default false
     */
    isDisabled: boolean;
    /**
     * Option for disabling only the input field.
     * @default false
     */
    isInputDisabled: boolean;
    /**
     * Option for disabling only the trigger button.
     * @default false
     */
    isButtonDisabled: boolean;
    /**
     * Option for disabling the calendar picker.
     * @default false
     */
    isPickerDisabled: boolean;
    /**
     * Option for opening the calendar upon clicking in the input field.
     * @default true
     */
    isShownOnInputClick: boolean;
    /**
     * Sets the clearable attribute for the input field when read-only is false.
     * @default false
     */
    get isClearable(): boolean;
    set isClearable(value: BooleanInput);
    private _isClearable;
    /**
     * Option for restricting the input value to a specific regex pattern.
     * @type {string | RegExp}
     * @default null
     */
    get restrictToRegex(): RegExp;
    set restrictToRegex(value: string | RegExp);
    private _restrictToRegex;
    /**
     * Returns an array of CSS classes to apply to the mat-datepicker panel.
     * Combines internal classes with user-provided customPanelClass.
     */
    get mergedPanelClass(): string[];
    protected hasAriaRequiredAttribute: boolean;
    private destroy$;
    private format;
    private portalHost;
    private portal;
    private templatePortal;
    private isNull;
    private adapter;
    private translateService;
    private localeService;
    private EuiAppShellService;
    private injector;
    private appRef;
    private viewContainerRef;
    private control;
    private momentAdapterOptions;
    constructor();
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngDoCheck(): void;
    ngOnChanges(changes: SimpleChanges): void;
    /**
     * Creates an injector for the timepicker component.
     * @param data - The data to be passed to the timepicker component.
     * @return {Injector} - The created injector.
     */
    createInjector(data: any): Injector;
    /**
     * Opens the calendar if read-only is false, listens to the keydown event when isDatetimepicker or euiActionButtons used
     * and creates the time config passed to the timepicker component.
     */
    openCalendar(): void;
    ngOnDestroy(): void;
    /**
     * When calendar opens and isDatetimepicker or eui-action-buttons directive used, it closes the calendar when clicking outside of the
     * overlay. If eui-action-buttons directive is used it registers the template portal where the user can add projected content as a
     * footer.
     */
    onOpened(): void;
    /**
     * Retrieves the event path for a given event. This method provides a fallback
     * for browsers that do not support the `event.path` property by constructing
     * the path manually.
     *
     * @param event - The event object of type `KeyboardEvent`.
     * @returns An array representing the event path, starting from the event target
     *          and traversing up through its ancestors, ending with the `document`
     *          and `window` objects.
     */
    getEventPath(event: KeyboardEvent): EventTarget[];
    /**
     * Fires when the type of the calendar is either month or year,
     * formats the date if dateOutputFormat used
     * emits and propagates the selected date value
     * and closes the calendar.
     * @param normalizedDate - The selected date in the calendar.
     * @param calendar - The MatDatepicker instance.
     */
    chosenDateHandler(normalizedDate: any, calendar: MatDatepicker<any>): void;
    /**
     * Method which returns true in order to mark the date as valid.
     * @returns {boolean} - Returns true if the date is valid.
     */
    datepickerFiltering(): boolean;
    /**
     * Method which fires when the datepicker input value changes and applies logic when isDatetimepicker is false.
     * @param e - The MatDatepickerInputEvent object containing the new value.
     */
    onDateInput(e: MatDatepickerInputEvent<Moment | Date | string>): void;
    /**
     * Method which fires when there is a date change from the calendar popup,
     * formats, emits and propagates the new value also when isDatetimepicker true.
     * @param e - The MatDatepickerInputEvent object containing the new value.
     */
    onDateChange(e: MatDatepickerInputEvent<Moment | Date | string>): void;
    /**
     * Method which fires when the input value changes and applies logic when isDatetimepicker true.
     * @param e - The new value of the input field.
     */
    changedInput(e: string | Event): void;
    /**
     * Method which fires when clearing the input field and emits/propagates the null value.
     */
    onClear(): void;
    /**
     * Method which fires upon keypress and opens the calendar if isShownOnInputClick is true and the Enter key is pressed.
     * Also if there is a restrictToRegex, it prevents the default action if the key is not matching the regex.
     * @param e - The KeyboardEvent object.
     */
    onKeypress(e: KeyboardEvent): void;
    /**
     * Selects today's date
     */
    selectToday(): void;
    /**
     * Closes the calendar when isDatetimepicker or eui-action-buttons used and removes the applied footer when eui-action-buttons used
     */
    closeCalendar(): void;
    /**
     * When eui-action-buttons used, it applies the date selection and closes the calendar
     */
    onDateSelectApply(): void;
    writeValue(value: any): void;
    registerOnChange(fn: () => void): void;
    registerOnTouched(fn: () => void): void;
    /**
     * Converts the type of the calendar to the corresponding start view.
     * @param type - The type of the calendar.
     * @returns {('year' | 'month' | 'multi-year')} - The start view of the calendar.
     */
    convTypeToStartView(type: string): 'year' | 'month' | 'multi-year';
    /**
     * Sets the disabled state of the component based on the boolean value passed.
     * @param isDisabled - The boolean value indicating whether the component should be disabled or not.
     */
    setDisabledState?(isDisabled: boolean): void;
    /**
     * Marks the form field as touched when focusing out to trigger validation
     */
    protected onFocusOut(): void;
    /**
     * Checks the validity of the time picker based on the minDate and maxDate properties.
     * If the value is outside the range, it adjusts the time picker values accordingly.
     */
    private checkTimePickerValidity;
    /**
     * Compares two dates and checks if they are the same.
     * @param date1 - The first date to compare.
     * @param date2 - The second date to compare.
     * @returns {boolean} - Returns true if the dates are the same, otherwise false.
     */
    private areSameDates;
    private propagateChange;
    private propagateTouched;
    /**
     * Updates the `aria-required` attribute on the input element.
     * @private
     */
    private updateInputAriaRequiredAttribute;
    /**
     * Updates the disabled state of the timepicker based on whether a date is selected.
     * @private
     */
    private updateTimePickerDisabledState;
    /**
     * Validates and corrects the date to ensure it falls within the specified minDate and maxDate range.
     * If the date is before minDate, returns minDate. If the date is after maxDate, returns maxDate.
     * Otherwise, returns the original date unchanged.
     *
     * @param date - The date to validate (can be Moment, Date, or string)
     * @returns The validated date as a Moment object within the allowed range
     */
    private validateDateRange;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiDatepickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiDatepickerComponent, "eui-datepicker", never, { "e2eAttr": { "alias": "e2eAttr"; "required": false; }; "value": { "alias": "value"; "required": false; }; "togglerIconSvg": { "alias": "togglerIconSvg"; "required": false; }; "togglerLabel": { "alias": "togglerLabel"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "type": { "alias": "type"; "required": false; }; "startView": { "alias": "startView"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "datepickerFilter": { "alias": "datepickerFilter"; "required": false; }; "dateOutputFormat": { "alias": "dateOutputFormat"; "required": false; }; "customHeader": { "alias": "customHeader"; "required": false; }; "dateClass": { "alias": "dateClass"; "required": false; }; "stepHours": { "alias": "stepHours"; "required": false; }; "stepMinutes": { "alias": "stepMinutes"; "required": false; }; "stepSeconds": { "alias": "stepSeconds"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "customPanelClass": { "alias": "customPanelClass"; "required": false; }; "isDatetimepicker": { "alias": "isDatetimepicker"; "required": false; }; "hasSeconds": { "alias": "hasSeconds"; "required": false; }; "isOneInputField": { "alias": "isOneInputField"; "required": false; }; "hasNoButton": { "alias": "hasNoButton"; "required": false; }; "isDatepickerBlock": { "alias": "isDatepickerBlock"; "required": false; }; "isReadOnly": { "alias": "isReadOnly"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "isInputDisabled": { "alias": "isInputDisabled"; "required": false; }; "isButtonDisabled": { "alias": "isButtonDisabled"; "required": false; }; "isPickerDisabled": { "alias": "isPickerDisabled"; "required": false; }; "isShownOnInputClick": { "alias": "isShownOnInputClick"; "required": false; }; "isClearable": { "alias": "isClearable"; "required": false; }; "restrictToRegex": { "alias": "restrictToRegex"; "required": false; }; }, { "inputChange": "inputChange"; "dateSelect": "dateSelect"; }, ["euiActionButtons"], ["eui-action-buttons"], true, [{ directive: typeof i1.BaseStatesDirective; inputs: { "euiSuccess": "euiSuccess"; "euiInfo": "euiInfo"; "euiWarning": "euiWarning"; "euiDanger": "euiDanger"; "euiVariant": "euiVariant"; }; outputs: {}; }]>;
    static ngAcceptInputType_isDatetimepicker: unknown;
    static ngAcceptInputType_hasSeconds: unknown;
    static ngAcceptInputType_isOneInputField: unknown;
    static ngAcceptInputType_hasNoButton: unknown;
    static ngAcceptInputType_isDatepickerBlock: unknown;
    static ngAcceptInputType_isReadOnly: unknown;
    static ngAcceptInputType_isDisabled: unknown;
    static ngAcceptInputType_isInputDisabled: unknown;
    static ngAcceptInputType_isButtonDisabled: unknown;
    static ngAcceptInputType_isPickerDisabled: unknown;
    static ngAcceptInputType_isShownOnInputClick: unknown;
}
export declare const LETTER_FORMAT: {
    parse: {
        dateInput: string;
    };
    display: {
        dateInput: string;
        monthYearLabel: string;
    };
};
export declare const YEAR_FORMAT: {
    parse: {
        dateInput: string;
    };
    display: {
        dateInput: string;
        monthYearLabel: string;
        dateA11yLabel: string;
        monthYearA11yLabel: string;
    };
};
export declare const MONTH_YEAR_FORMAT: {
    parse: {
        dateInput: string;
    };
    display: {
        dateInput: string;
        monthYearLabel: string;
        dateA11yLabel: string;
        monthYearA11yLabel: string;
    };
};
export declare class EuiLetterFormatDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiLetterFormatDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<EuiLetterFormatDirective, "[euiLetterFormat]", never, {}, {}, never, never, true, never>;
}
export declare class EuiYearFormatDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiYearFormatDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<EuiYearFormatDirective, "[euiYearFormat]", never, {}, {}, never, never, true, never>;
}
export declare class EuiMonthYearFormatDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiMonthYearFormatDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<EuiMonthYearFormatDirective, "[euiMonthYearFormat]", never, {}, {}, never, never, true, never>;
}
export declare class EuiActionButtonsDirective {
    class: string;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiActionButtonsDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<EuiActionButtonsDirective, "eui-action-buttons", never, {}, {}, never, never, true, never>;
}
//# sourceMappingURL=eui-datepicker.component.d.ts.map