import { ElementRef, OnInit, OnChanges, SimpleChanges, EventEmitter, Renderer2, ChangeDetectorRef, AfterViewInit, QueryList, NgZone, OnDestroy } from '@angular/core';
import { ControlValueAccessor, FormBuilder, FormGroup, AbstractControl, ValidationErrors } from '@angular/forms';
import { DateAdapter, JalaliDateAdapter, GregorianDateAdapter } from './date-adapter';
import { CustomLabels, DateRange, Lang_Locale, RangeInputLabels } from './utils/models';
import { DatePickerPopupComponent } from './date-picker-popup/date-picker-popup.component';
import { CdkOverlayOrigin, ConnectedOverlayPositionChange, ConnectionPositionPair, HorizontalConnectionPos, VerticalConnectionPos } from '@angular/cdk/overlay';
import { DestroyService, QeydarDatePickerService } from './date-picker.service';
import { CalendarType, DatepickerMode, Placement, RangePartType, ValueFormat } from './utils/types';
import { CustomTemplate } from './utils/template.directive';
import * as i0 from "@angular/core";
export declare class DatePickerComponent implements ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy {
    fb: FormBuilder;
    elementRef: ElementRef;
    renderer: Renderer2;
    cdref: ChangeDetectorRef;
    dpService: QeydarDatePickerService;
    destroy$: DestroyService;
    ngZone: NgZone;
    jalali: JalaliDateAdapter;
    gregorian: GregorianDateAdapter;
    rtl: boolean;
    mode: DatepickerMode;
    isRange: boolean;
    customLabels: Array<CustomLabels>;
    calendarType: CalendarType;
    lang: Lang_Locale;
    cssClass: string;
    footerDescription: string;
    rangeInputLabels: RangeInputLabels;
    inputLabel: string;
    placement: Placement;
    disabled: boolean;
    isInline: boolean;
    showSidebar: boolean;
    showToday: boolean;
    valueFormat: ValueFormat;
    disableInputMask: boolean;
    disabledDates: Array<Date | string>;
    disabledDatesFilter: (date: Date) => boolean;
    disabledTimesFilter: (date: Date) => boolean;
    allowEmpty: boolean;
    readOnly: boolean;
    readOnlyInput: boolean;
    set minDate(date: Date | string | null);
    get minDate(): Date;
    set maxDate(date: Date | string | null);
    get maxDate(): Date;
    set format(value: string);
    get format(): string;
    onFocus: EventEmitter<any>;
    onBlur: EventEmitter<any>;
    onChangeValue: EventEmitter<any>;
    onOpenChange: EventEmitter<boolean>;
    datePickerInput: ElementRef;
    rangePickerInputs?: QueryList<ElementRef<HTMLInputElement>>;
    datePickerPopup: DatePickerPopupComponent;
    templates: QueryList<CustomTemplate>;
    origin: CdkOverlayOrigin;
    overlayPositions: ConnectionPositionPair[];
    currentPositionX: HorizontalConnectionPos;
    currentPositionY: VerticalConnectionPos;
    document: Document;
    isOpen: boolean;
    selectedDate: Date | null;
    selectedStartDate: Date | null;
    selectedEndDate: Date | null;
    form: FormGroup;
    dateAdapter: DateAdapter<Date>;
    activeInput: 'start' | 'end' | '';
    hideStateHelper: boolean;
    isInternalChange: boolean;
    lastEmittedValue: any;
    showTimePicker: boolean;
    timeDisplayFormat: string;
    documentClickListener: (event: MouseEvent) => void;
    private _minDate;
    private _maxDate;
    private _format;
    get valueAdapter(): JalaliDateAdapter | GregorianDateAdapter;
    constructor(fb: FormBuilder, elementRef: ElementRef, renderer: Renderer2, cdref: ChangeDetectorRef, dpService: QeydarDatePickerService, destroy$: DestroyService, ngZone: NgZone, jalali: JalaliDateAdapter, gregorian: GregorianDateAdapter, doc: Document);
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    initializeComponent(doc: Document): void;
    initialize(): void;
    setupAfterViewInit(): void;
    setDateAdapter(): void;
    setupFormControls(): void;
    handleChanges(changes: SimpleChanges): void;
    handleDocumentClick(event: MouseEvent): void;
    onInputChange(value: string, inputType?: 'start' | 'end'): void;
    handleRangeInputChange(value: string, inputType?: 'start' | 'end'): void;
    handleSingleInputChange(value: string): void;
    emitValueIfChanged(): void;
    prepareValueForEmission(): any;
    onDateSelected(date: Date): void;
    handleRangeDateSelection(date: Date): void;
    handleSingleDateSelection(date: Date): void;
    onDateRangeSelected(dateRange: DateRange): void;
    close(): void;
    open(): void;
    focus(): void;
    getInput(partType?: RangePartType): HTMLInputElement | undefined;
    getPlaceholder(inputType?: string): string;
    clampDate(date: Date): Date;
    clampDateTime(adjustedDate: Date, date: Date): Date;
    findNearestValidDate(date: Date): Date;
    validateAndNormalizeTime(date: Date): {
        isValid: boolean;
        normalizedDate: Date | null;
    };
    parseDisabledDates(): Date[];
    isDateDisabled(date: Date): boolean;
    isTimeDisabled(date: Date): boolean;
    dateFormatValidator(control: AbstractControl): ValidationErrors | null;
    getFormatForMode(): string;
    setPlacement(placement: Placement): void;
    onPositionChange(position: ConnectedOverlayPositionChange): void;
    onFocusout(event: FocusEvent): void;
    onInputBlur(inputType: 'start' | 'end' | null, event: Event): void;
    getInputValue(inputType: 'start' | 'end' | null): string | undefined;
    validateAndCorrectInput(value: string): string;
    handleCorrectedValue(inputType: 'start' | 'end' | null, correctedValue: string): void;
    handleRangeCorrectedValue(inputType: 'start' | 'end' | null, correctedValue: string): void;
    handleSingleCorrectedValue(correctedValue: string): void;
    onFocusInput(inputType: 'start' | 'end' | null, event: Event): void;
    toggleDatePicker(inputType: 'start' | 'end' | null, event: Event): void;
    onInputKeydown(event: KeyboardEvent): void;
    updateInputValue(): void;
    updateDatePickerPopup(): void;
    convertDateToFormat(date: Date, fromType: CalendarType): any;
    onChange: any;
    onTouch: any;
    writeValue(value: any): void;
    resetValues(): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setupActiveInputSubscription(): void;
    setupMouseDownEventHandler(): void;
    parseDateValue(value: any): Date | null;
    parseValueFromFormat(value: string | Date, targetAdapter: DateAdapter<Date>): Date | null;
    parseIncomingValue(value: any): Date | null;
    hasTimeComponent(format: string): boolean;
    extractTimeFormat(format: string): string;
    extractDateFormat(format: string): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "qeydar-date-picker", never, { "rtl": "rtl"; "mode": "mode"; "isRange": "isRange"; "customLabels": "customLabels"; "calendarType": "calendarType"; "lang": "lang"; "cssClass": "cssClass"; "footerDescription": "footerDescription"; "rangeInputLabels": "rangeInputLabels"; "inputLabel": "inputLabel"; "placement": "placement"; "disabled": "disabled"; "isInline": "isInline"; "showSidebar": "showSidebar"; "showToday": "showToday"; "valueFormat": "valueFormat"; "disableInputMask": "disableInputMask"; "disabledDates": "disabledDates"; "disabledDatesFilter": "disabledDatesFilter"; "disabledTimesFilter": "disabledTimesFilter"; "allowEmpty": "allowEmpty"; "readOnly": "readOnly"; "readOnlyInput": "readOnlyInput"; "minDate": "minDate"; "maxDate": "maxDate"; "format": "format"; }, { "onFocus": "onFocus"; "onBlur": "onBlur"; "onChangeValue": "onChangeValue"; "onOpenChange": "onOpenChange"; }, ["templates"], never, true>;
}
