import { EventEmitter, OnDestroy, ElementRef, TemplateRef, ChangeDetectorRef, NgModuleRef, OnInit, AfterViewInit, Injector, AfterViewChecked, Renderer2 } from '@angular/core';
import { ControlValueAccessor, ValidationErrors } from '@angular/forms';
import { IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarSubheaderTemplateDirective, WEEKDAYS } from '../calendar/public_api';
import { IgxInputDirective, IgxInputGroupComponent, IgxLabelDirective } from '../input-group/public_api';
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
import { OverlaySettings, IgxOverlayService } from '../services/public_api';
import { DateRangeDescriptor } from '../core/dates/dateRange';
import { EditorProvider } from '../core/edit-provider';
import { DatePickerDisplayValuePipe, DatePickerInputValuePipe } from './date-picker.pipes';
import { IDatePicker } from './date-picker.common';
import { IBaseEventArgs, IBaseCancelableBrowserEventArgs } from '../core/utils';
import { IgxDatePickerTemplateDirective, IgxDatePickerActionsDirective } from './date-picker.directives';
import { InteractionMode } from '../core/enums';
/**
 * This interface is used to provide information about date picker reference and its current value
 * when onDisabledDate event is fired.
 */
export interface IDatePickerDisabledDateEventArgs extends IBaseEventArgs {
    datePicker: IgxDatePickerComponent;
    currentValue: Date;
}
/**
 * This interface is used to provide information about date picker reference and its previously valid value
 * when onValidationFailed event is fired.
 */
export interface IDatePickerValidationFailedEventArgs extends IBaseEventArgs {
    datePicker: IgxDatePickerComponent;
    prevValue: Date;
}
/**
 * This interface is used to configure calendar format view options.
 */
export interface IFormatViews {
    day?: boolean;
    month?: boolean;
    year?: boolean;
}
/**
 * This interface is used to configure calendar format options.
 */
export interface IFormatOptions {
    day?: string;
    month?: string;
    weekday?: string;
    year?: string;
}
/**
 * This enumeration is used to configure the date picker to operate with pre-defined format option used in Angular DatePipe.
 * 'https://angular.io/api/common/DatePipe'
 * 'shortDate': equivalent to 'M/d/yy' (6/15/15).
 * 'mediumDate': equivalent to 'MMM d, y' (Jun 15, 2015).
 * 'longDate': equivalent to 'MMMM d, y' (June 15, 2015).
 * 'fullDate': equivalent to 'EEEE, MMMM d, y' (Monday, June 15, 2015).
 */
export declare const PredefinedFormatOptions: {
    ShortDate: "shortDate";
    MediumDate: "mediumDate";
    LongDate: "longDate";
    FullDate: "fullDate";
};
export declare type PredefinedFormatOptions = (typeof PredefinedFormatOptions)[keyof typeof PredefinedFormatOptions];
/**
 * Date Picker displays a popup calendar that lets users select a single date.
 *
 * @igxModule IgxDatePickerModule
 * @igxTheme igx-calendar-theme, igx-icon-theme
 * @igxGroup Scheduling
 * @igxKeywords  datepicker, calendar, schedule, date
 * @example
 * ```html
 * <igx-date-picker [(ngModel)]="selectedDate"></igx-date-picker>
 * ```
 */
export declare class IgxDatePickerComponent implements IDatePicker, ControlValueAccessor, EditorProvider, OnInit, AfterViewInit, OnDestroy, AfterViewChecked {
    private _overlayService;
    element: ElementRef;
    private _cdr;
    private _moduleRef;
    private _injector;
    private _renderer;
    /**
     * Gets/Sets the `IgxDatePickerComponent` label.
     *
     * @remarks
     * The default label is 'Date'.
     * @example
     * ```html
     * <igx-date-picker [label]="Calendar"></igx-date-picker>
     * ```
     * @deprecated Use igxLabel inside the date picker to change the label:
     * ````html
     * <igx-date-picker>
     *      <label igxLabel>Custom label</label>
     * </igx-date-picker>
     * ````
     * to set a custom label.
     */
    label: string;
    /**
     * Gets/Sets the `IgxDatePickerComponent` label visibility.
     *
     * @remarks
     * By default the visibility is set to true.
     * @example
     * <igx-date-picker [labelVisibility]="false"></igx-date-picker>
     */
    labelVisibility: boolean;
    /**
     * Gets/Sets the locales.
     *
     * @remarks Default locale is en.
     * @example
     * ```html
     * <igx-date-picker locale="ja-JP" [value]="date"></igx-date-picker>
     * ```
     */
    locale: 'en';
    /**
     * Gets/Sets the default template editor's tabindex.
     *
     * @example
     * ```html
     * <igx-date-picker editorTabIndex="1"></igx-date-picker>
     * ```
     */
    editorTabIndex: number;
    /**
     * Gets/Sets on which day the week starts.
     *
     * @example
     * ```html
     * <igx-date-picker [weekStart]="WEEKDAYS.FRIDAY" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     * ```
     */
    weekStart: WEEKDAYS | number;
    /**
     * Gets the format options of the `IgxDatePickerComponent`.
     *
     * @example
     * ```typescript
     * let formatOptions = this.datePicker.formatOptions;
     * ```
     */
    get formatOptions(): IFormatOptions;
    /**
     * Sets the format options of the `IgxDatePickerComponent`.
     *
     * @example
     * ```typescript
     * this.datePicker.formatOptions = {  day: "numeric",  month: "long", weekday: "long", year: "numeric"};
     * ```
     */
    set formatOptions(formatOptions: IFormatOptions);
    /**
     * Gets/Sets whether the inactive dates will be hidden.
     *
     * @remarks
     * Apllies to dates that are out of the current month.
     * Default value is `false`.
     * @example
     * ```html
     * <igx-date-picker [hideOutsideDays]="true"></igx-date-picker>
     * ```
     * @example
     * ```typescript
     * let hideOutsideDays = this.datePicker.hideOutsideDays;
     * ```
     */
    hideOutsideDays: boolean;
    /**
     * Gets/Sets the number of month views displayed.
     *
     * @remarks
     * Default value is `1`.
     * @example
     * ```html
     * <igx-date-picker [monthsViewNumber]="2"></igx-date-picker>
     * ```
     * @example
     * ```typescript
     * let monthViewsDisplayed = this.datePicker.monthsViewNumber;
     * ```
     */
    monthsViewNumber: number;
    /**
     * Show/hide week numbers
     *
     * @exmpale
     * ```html
     * <igx-date-picker [showWeekNumbers]="true"></igx-date-picker>
     * ``
     */
    showWeekNumbers: boolean;
    /**
     * Gets/Sets the date display format of the `IgxDatePickerComponent` in dropdown mode.
     *
     * @example
     * ```typescript
     * let format = this.datePicker.format;
     * this.datePicker.format = 'yyyy-M-d';
     * ```
     */
    get format(): string;
    set format(format: string);
    /**
     * Gets/Sets the date mask of the `IgxDatePickerComponent` when in editable dropdown mode.
     *
     *  @example
     * ```typescript
     * let mask = this.datePicker.mask;
     * ```
     */
    mask: string;
    /**
     * Gets/Sets the format views of the `IgxDatePickerComponent`.
     *
     * @example
     * ```typescript
     * let formatViews = this.datePicker.formatViews;
     *  this.datePicker.formatViews = {day:false, month: false, year:false};
     * ```
     */
    get formatViews(): IFormatViews;
    set formatViews(formatViews: IFormatViews);
    /**
     * Gets/Sets the disabled dates descriptors.
     *
     * @example
     * ```typescript
     * let disabledDates = this.datepicker.disabledDates;
     * this.datePicker.disabledDates = [ {type: DateRangeType.Weekends}, ...];
     * ```
     */
    get disabledDates(): DateRangeDescriptor[];
    set disabledDates(value: DateRangeDescriptor[]);
    /**
     * Gets/Sets the special dates descriptors.
     *
     * @example
     * ```typescript
     * let specialDates = this.datepicker.specialDates;
     * this.datePicker.specialDates = [ {type: DateRangeType.Weekends}, ... ];
     * ```
     */
    get specialDates(): DateRangeDescriptor[];
    set specialDates(value: DateRangeDescriptor[]);
    /**
     * Gets/Sets the modal overlay settings.
     */
    get modalOverlaySettings(): OverlaySettings;
    set modalOverlaySettings(value: OverlaySettings);
    /**
     * Gets/Sets the drop-down overlay settings.
     */
    get dropDownOverlaySettings(): OverlaySettings;
    set dropDownOverlaySettings(value: OverlaySettings);
    /**
     * Gets the formatted date when `IgxDatePickerComponent` is in dialog mode.
     *
     *  @example
     * ```typescript
     * let selectedDate = this.datePicker.displayData;
     * ```
     */
    get displayData(): string;
    /** @hidden @internal */
    get transformedDate(): string;
    /** @hidden @internal */
    set transformedDate(value: string);
    /**
     * Gets the input group template.
     *
     * @example
     * ```typescript
     * let template = this.template();
     * ```
     */
    get template(): TemplateRef<any>;
    /**
     * Gets the context passed to the input group template.
     */
    get context(): {
        disabled: boolean;
        disabledDates: DateRangeDescriptor[];
        displayData: string;
        format: string;
        isSpinLoop: boolean;
        label: string;
        labelVisibility: boolean;
        locale: "en";
        mask: string;
        mode: string;
        specialDates: DateRangeDescriptor[];
        value: Date;
        openDialog: () => void;
    };
    private get required();
    /**
     * Gets/Sets the selected date.
     *
     *  @example
     * ```html
     * <igx-date-picker [value]="date"></igx-date-picker>
     * ```
     */
    get value(): Date;
    set value(date: Date);
    /**
     * Gets/Sets the value of `id` attribute.
     *
     * @remarks If not provided it will be automatically generated.
     * @example
     * ```html
     * <igx-date-picker [id]="'igx-date-picker-3'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     * ```
     */
    id: string;
    /**
     * Gets/Sets a custom formatter function on the selected or passed date.
     *
     * @example
     * ```html
     * <igx-date-picker [value]="date" [formatter]="formatter"></igx-date-picker>
     * ```
     */
    formatter: (val: Date) => string;
    /**
     * Enables/Disables the `IgxDatePickerComponent`.
     *
     *  @example
     * ```html
     * <igx-date-picker [disabled]="'true'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     * ```
     */
    disabled: boolean;
    /**
     * Gets/Sets the orientation of the `IgxDatePickerComponent` header.
     *
     *  @example
     * ```html
     * <igx-date-picker [vertical]="'true'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     * ```
     */
    vertical: boolean;
    /**
     * Gets/Sets the today button's label.
     *
     *  @example
     * ```html
     * <igx-date-picker cancelButtonLabel="cancel" todayButtonLabel="Tomorrow"></igx-date-picker>
     * ```
     */
    todayButtonLabel: string;
    /**
     * *Gets/Sets the cancel button's label.
     *
     * @example
     * ```html
     * <igx-date-picker cancelButtonLabel="Close" todayButtonLabel="Today"></igx-date-picker>
     * ```
     */
    cancelButtonLabel: string;
    /**
     * Gets/Sets the interaction mode - dialog or drop down.
     *
     *  @example
     * ```html
     * <igx-date-picker mode="dropdown"></igx-date-picker>
     * ```
     */
    mode: InteractionMode;
    /**
     * Gets/Sets whether date should spin continuously or stop when min/max is reached.
     *
     *  @example
     * ```html
     * <igx-date-picker [isSpinLoop]="false"></igx-date-picker>
     * ```
     */
    isSpinLoop: boolean;
    /**
     * Gets/Sets the container used for the popup element.
     *
     * @remarks
     *  `outlet` is an instance of `IgxOverlayOutletDirective` or an `ElementRef`.
     * @example
     * ```html
     * <div igxOverlayOutlet #outlet="overlay-outlet"></div>
     * //..
     * <igx-date-picker [outlet]="outlet"></igx-date-picker>
     * //..
     * ```
     */
    outlet: IgxOverlayOutletDirective | ElementRef;
    /**
     * Emitted when the `IgxDatePickerComponent` calendar is opened.
     */
    onOpened: EventEmitter<IgxDatePickerComponent>;
    /**
     * Emitted after the `IgxDatePickerComponent` is closed.
     */
    onClosed: EventEmitter<IgxDatePickerComponent>;
    /**
     * Emitted when the `IgxDatePickerComponent` is being closed.
     */
    onClosing: EventEmitter<IBaseCancelableBrowserEventArgs>;
    /**
     * Emitted when selection is made in the calendar.
     *
     *  @example
     * ```html
     * <igx-date-picker (onSelection)="selection($event)"></igx-date-picker>
     * ```
     */
    onSelection: EventEmitter<Date>;
    /**
     * Emitted when date picker value is changed.
     *
     * @example
     * ```html
     * <igx-date-picker (valueChange)="valueChanged($event)" mode="dropdown"></igx-date-picker>
     * ```
     */
    valueChange: EventEmitter<Date>;
    /**
     * Emitted when the user types/spins to a disabled date in the date-picker editor.
     *
     *  @example
     * ```html
     * <igx-date-picker (onDisabledDate)="onDisabledDate($event)"></igx-date-picker>
     * ```
     */
    onDisabledDate: EventEmitter<IDatePickerDisabledDateEventArgs>;
    /**
     * Emitted when the user types/spins invalid date in the date-picker editor.
     *
     *  @example
     * ```html
     * <igx-date-picker (onValidationFailed)="onValidationFailed($event)"></igx-date-picker>
     * ```
     */
    onValidationFailed: EventEmitter<IDatePickerValidationFailedEventArgs>;
    /** @hidden @internal */
    _labelDirectiveUserTemplate: IgxLabelDirective;
    /**
     * @hidden
     */
    headerTemplate: IgxCalendarHeaderTemplateDirective;
    /**
     * @hidden
     */
    subheaderTemplate: IgxCalendarSubheaderTemplateDirective;
    /**
     * @hidden
     */
    datePickerActionsDirective: IgxDatePickerActionsDirective;
    protected readOnlyDatePickerTemplate: TemplateRef<any>;
    protected editableDatePickerTemplate: TemplateRef<any>;
    protected _inputGroup: IgxInputGroupComponent;
    protected _inputGroupUserTemplate: IgxInputGroupComponent;
    protected _inputUserTemplateElementRef: ElementRef;
    protected _labelDirective: IgxLabelDirective;
    /**
     * @hidden
     */
    protected datePickerTemplateDirective: IgxDatePickerTemplateDirective;
    private _inputElementRef;
    private _inputDirective;
    private _inputDirectiveUserTemplates;
    /** @hidden @internal */
    calendar: IgxCalendarComponent;
    /** @hidden @internal */
    hasHeader: boolean;
    /** @hidden @internal */
    collapsed: boolean;
    /** @hidden @internal */
    displayValuePipe: DatePickerDisplayValuePipe;
    /** @hidden @internal */
    inputValuePipe: DatePickerInputValuePipe;
    /** @hidden @internal */
    dateFormatParts: any[];
    /** @hidden @internal */
    rawDateString: string;
    /** @hidden @internal */
    inputMask: string;
    /** @hidden @internal */
    isEmpty: boolean;
    /** @hidden @internal */
    invalidDate: string;
    private readonly spinDelta;
    private readonly defaultLocale;
    private _formatOptions;
    private _formatViews;
    private _destroy$;
    private _statusChanges$;
    private _templateInputBlur$;
    private _componentID;
    private _format;
    private _value;
    private _isInEditMode;
    private _disabledDates;
    private _specialDates;
    private _modalOverlay;
    private _dropDownOverlaySettings;
    private _positionSettings;
    private _defaultDropDownOverlaySettings;
    private _modalOverlaySettings;
    private _transformedDate;
    private _onOpen;
    private _onClose;
    private _ngControl;
    private _onChangeCallback;
    private _onTouchedCallback;
    private _onValidatorChange;
    constructor(_overlayService: IgxOverlayService, element: ElementRef, _cdr: ChangeDetectorRef, _moduleRef: NgModuleRef<any>, _injector: Injector, _renderer: Renderer2);
    /**
     * @hidden
     */
    onSpaceClick(event: KeyboardEvent): void;
    /** @hidden @internal */
    writeValue(value: Date): void;
    /** @hidden @internal */
    registerOnChange(fn: (_: Date) => void): void;
    /** @hidden @internal */
    registerOnTouched(fn: () => void): void;
    /** @hidden @internal */
    setDisabledState(isDisabled: boolean): void;
    /** @hidden @internal */
    registerOnValidatorChange(fn: any): void;
    /** @hidden @internal */
    validate(): ValidationErrors | null;
    /** @hidden */
    getEditElement(): any;
    /** @hidden @internal */
    get inputGroupElement(): HTMLElement;
    /** @hidden @internal */
    get inputGroup(): IgxInputGroupComponent;
    /** @hidden @internal */
    get inputDirective(): IgxInputDirective;
    /** @hidden @internal */
    get labelDirective(): IgxLabelDirective;
    /** @hidden @internal */
    ngOnInit(): void;
    /** @hidden @internal */
    ngAfterViewInit(): void;
    ngAfterViewChecked(): void;
    /** @hidden @internal */
    ngOnDestroy(): void;
    /**
     * Selects today's date from calendar.
     *
     *  @remarks
     * Changes the input field value, @calendar.viewDate and @calendar.value.
     *  @example
     * ```typescript
     * this.datePicker.triggerTodaySelection();
     * ```
     */
    triggerTodaySelection(): void;
    /**
     * Change the calendar selection.
     *
     * @remarks
     * Calling this method will emit the @calendar.onSelection event,
     * which will fire @handleSelection method.
     * @example
     * ```typescript
     * this.datePicker.selectDate(this.date);
     * ```
     * @param date passed date that has to be set to the calendar.
     */
    selectDate(date: Date): void;
    /**
     * Deselects the calendar date.
     *
     * @example
     * ```typescript
     * this.datePicker.deselectDate();
     * ```
     */
    deselectDate(): void;
    /**
     * Opens the date picker drop down or dialog.
     *
     * @param target HTMLElement - the target element to use for positioning the drop down container according to
     * @example
     * ```typescript
     * this.datePicker.openDialog(target);
     * ```
     */
    openDialog(): void;
    /**
     * Close the calendar.
     *
     * @hidden @internal
     */
    closeCalendar(): void;
    /**
     * Clear the input field, date picker value and calendar selection.
     *
     * @hidden @internal
     */
    clear(): void;
    /**
     * Evaluates when @calendar.onSelection event was fired
     * and update the input value.
     *
     * @param event selected value from calendar.
     *
     * @hidden @internal
     */
    handleSelection(date: Date): void;
    /** @hidden @internal */
    onOpenClick(event: MouseEvent): void;
    /** @hidden @internal */
    onBlur(event: any, calcDate?: boolean): void;
    /** @hidden @internal */
    onFocus(): void;
    /** @hidden @internal */
    onKeyDown(event: any): void;
    /** @hidden @internal */
    onWheel(event: any): void;
    /** @hidden @internal */
    onInput(event: any): void;
    _updateValidityOnBlur(): void;
    protected onStatusChanged(): void;
    private attachTemplateBlur;
    private emitValueChangeEvent;
    private calculateDate;
    private spinValue;
    private _onOpening;
    private _onOpened;
    private _onClosed;
    private _initializeCalendarContainer;
    private _focusCalendarDate;
    private _setLocaleToDate;
    private _getCursorPosition;
    private _setCursorPosition;
    /**
     * Apply custom user formatter upon date.
     *
     * @param formatter custom formatter function.
     * @param date passed date
     */
    private _customFormatChecker;
    private _getDisplayDate;
    private _getEditorDate;
}
/**
 * @hidden
 */
export declare class IgxDatePickerModule {
}
