/**
 * @license
 * Copyright 2023 Tyler Technologies, Inc. 
 * License: Apache-2.0
 */
import { ICustomElementFoundation } from '@tylertech/forge-core';
import { CalendarMode, DayOfWeek, ICalendarDateSelectEventData } from '../../calendar/calendar-constants';
import { IBaseDatePickerAdapter } from './base-date-picker-adapter';
import { DatePickerFormatCallback, DatePickerParseCallback, DatePickerPrepareMaskCallback, DatePickerValueMode } from './base-date-picker-constants';
export interface IBaseDatePickerFoundation<TValue> extends ICustomElementFoundation {
    value: TValue | null | undefined;
    min: Date | string | null | undefined;
    max: Date | string | null | undefined;
    disabledDates: Date | Date[] | null | undefined;
    open: boolean;
    parseCallback: DatePickerParseCallback;
    formatCallback: DatePickerFormatCallback;
    prepareMaskCallback: DatePickerPrepareMaskCallback;
    popupClasses: string | string[];
    disabled: boolean;
    masked: boolean;
    maskFormat: string;
    showMaskFormat: boolean;
    valueMode: DatePickerValueMode;
    notifyInputValueChanges: boolean;
    allowInvalidDate: boolean;
    showToday: boolean;
    showClear: boolean;
    yearRange: string;
    locale: string | undefined;
}
export declare abstract class BaseDatePickerFoundation<TAdapter extends IBaseDatePickerAdapter, TPublicValue, TPrivateValue = TPublicValue> implements IBaseDatePickerFoundation<TPublicValue> {
    protected _adapter: TAdapter;
    protected abstract _mode: CalendarMode;
    protected _value?: TPrivateValue | null;
    protected _min?: Date | null;
    protected _max?: Date | null;
    protected _disabledDates?: Date | Date[] | null;
    protected _open: boolean;
    protected _parseCallback: DatePickerParseCallback;
    protected _formatCallback: DatePickerFormatCallback;
    protected _prepareMaskCallback: DatePickerPrepareMaskCallback;
    protected _disableDayCallback: (date: Date) => boolean;
    protected _popupClasses: string | string[];
    protected _disabled: boolean;
    protected _masked: boolean;
    protected _maskFormat: string;
    protected _showMaskFormat: boolean;
    protected _valueMode: DatePickerValueMode;
    protected _notifyInputValueChanges: boolean;
    protected _allowInvalidDate: boolean;
    protected _showToday: boolean;
    protected _showClear: boolean;
    protected _disabledDaysOfWeek: DayOfWeek[];
    protected _yearRange: string;
    protected _locale: string | undefined;
    protected _isInitialized: boolean;
    private _inputListener;
    private _inputKeydownListener;
    private _inputFocusListener;
    private _inputBlurListener;
    private _inputValueChangedListener;
    private _toggleMousedownListener;
    private _dropdownCloseListener;
    private _activeChangeListener;
    private _todayListener;
    private _clearListener;
    private _dateSelectListener;
    private _monthChangeListener;
    constructor(_adapter: TAdapter);
    protected _initializeState?(): void;
    abstract value: TPublicValue | null | undefined;
    protected abstract _emitChangeEvent(value: TPrivateValue | null | undefined, force?: boolean): boolean;
    protected abstract _emitOpenEvent(): void;
    protected abstract _emitCloseEvent(): void;
    protected abstract _onToday(): void;
    protected abstract _onClear(): void;
    protected abstract _getCurrentValue(): TPrivateValue | null | undefined;
    protected abstract _setFormattedInputValue(suppressValueChanges?: boolean): void;
    protected abstract _onInputValueChanged(value: string): void;
    protected abstract _handleInput(value: string): void;
    protected abstract _setValue(value: Date | null): void;
    protected abstract _onDateSelected(event: ICalendarDateSelectEventData): void;
    protected abstract _applyDisabledDates(): void;
    protected abstract _applyDisabledDaysOfWeek(): void;
    initialize(): void;
    disconnect(): void;
    protected _initializeListeners(): void;
    protected _initializeValueChangedListeners(): void;
    protected _setInputChangeListeners(): void;
    protected _removeInputChangeListeners(): void;
    protected _destroyListeners(): void;
    protected _onInput(evt: Event): void;
    protected _onInputFocus(evt: FocusEvent): void;
    protected _onInputBlur(evt: FocusEvent): void;
    protected _openCalendar(emitOpenEvent?: boolean): void;
    protected _closeCalendar(emitCloseEvent?: boolean): void;
    protected _onInputKeydown(evt: KeyboardEvent): void;
    protected _getSanitizedDateString(value: string): string;
    private _onToggleMousedown;
    private _onDropdownClose;
    private _onMonthChanged;
    private _onActiveDescendantChanged;
    protected _formatInputValue(): void;
    protected _formatDate(date: Date | null | undefined): string;
    protected _parseDateString(value: string): Date | null;
    protected _coerceDateValue(value?: Date | string | null): Date | null | undefined;
    protected _getTypedValue(value: Date | null | undefined): Date | string | null | undefined;
    protected _isDateValueAcceptable(value?: Date | null): boolean;
    protected _initializeMask(): void;
    private _applyMask;
    protected _applyMin(): void;
    protected _applyMax(): void;
    private _applyDisableDayCallback;
    private _applyDisabled;
    get valueMode(): DatePickerValueMode;
    set valueMode(value: DatePickerValueMode);
    get min(): Date | string | null | undefined;
    set min(value: Date | string | null | undefined);
    get max(): Date | string | null | undefined;
    set max(value: Date | string | null | undefined);
    get open(): boolean;
    set open(value: boolean);
    get disabled(): boolean;
    set disabled(value: boolean);
    get disabledDates(): Date | Date[] | null | undefined;
    set disabledDates(value: Date | Date[] | null | undefined);
    get popupClasses(): string | string[];
    set popupClasses(value: string | string[]);
    get masked(): boolean;
    set masked(value: boolean);
    get maskFormat(): string;
    set maskFormat(value: string);
    get showMaskFormat(): boolean;
    set showMaskFormat(value: boolean);
    get notifyInputValueChanges(): boolean;
    set notifyInputValueChanges(value: boolean);
    get allowInvalidDate(): boolean;
    set allowInvalidDate(value: boolean);
    get disabledDaysOfWeek(): DayOfWeek[];
    set disabledDaysOfWeek(value: DayOfWeek[]);
    get disableDayCallback(): (date: Date) => boolean;
    set disableDayCallback(value: (date: Date) => boolean);
    get parseCallback(): DatePickerParseCallback;
    set parseCallback(cb: DatePickerParseCallback);
    get formatCallback(): DatePickerFormatCallback;
    set formatCallback(cb: DatePickerFormatCallback);
    get prepareMaskCallback(): DatePickerPrepareMaskCallback;
    set prepareMaskCallback(cb: DatePickerPrepareMaskCallback);
    get showToday(): boolean;
    set showToday(value: boolean);
    get showClear(): boolean;
    set showClear(value: boolean);
    get yearRange(): string;
    set yearRange(value: string);
    get locale(): string | undefined;
    set locale(value: string | undefined);
}
