import { ComponentFactoryResolver, ComponentRef, EventEmitter, OnDestroy, OnInit, ViewContainerRef, ElementRef, TemplateRef, ChangeDetectorRef } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarSubheaderTemplateDirective, WEEKDAYS } from '../calendar/index';
import { IgxDialogComponent } from '../dialog/dialog.component';
import { IgxInputDirective } from '../input-group/index';
import { Subject } from 'rxjs';
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
import { DateRangeDescriptor } from '../core/dates/dateRange';
import { EditorProvider } from '../core/edit-provider';
export declare class IgxDatePickerTemplateDirective {
    template: TemplateRef<any>;
    constructor(template: TemplateRef<any>);
}
export interface IFormatViews {
    day?: boolean;
    month?: boolean;
    year?: boolean;
}
export interface IFormatOptions {
    day?: string;
    month?: string;
    weekday?: string;
    year?: string;
}
/**
 * **Ignite UI for Angular Date Picker** -
 * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/date_picker.html)
 *
 * The Ignite UI Date Picker displays a popup calendar that lets users select a single date.
 *
 * Example:
 * ```html
 * <igx-date-picker [(ngModel)]="selectedDate"></igx-date-picker>
 * ```
 */
export declare class IgxDatePickerComponent implements ControlValueAccessor, EditorProvider, OnInit, OnDestroy {
    private resolver;
    private element;
    private cdr;
    /**
     *An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated.
     *```html
     *<igx-date-picker [id]="'igx-date-picker-3'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    id: string;
    /**
     *An @Input property that applies custom formatter on the selected or passed date.
     *```typescript
     *public date: Date = new Date();
     *private dayFormatter = new Intl.DateTimeFormat("en", { weekday: "long" });
     *private monthFormatter = new Intl.DateTimeFormat("en", { month: "long" });
     *public formatter = (date: Date) => { return `You selected
     *                     ${this.dayFormatter.format(date)},
     *                     ${date.getDate()} ${this.monthFormatter.format(date)},
     *                     ${date.getFullYear()}`;
     *}
     *```
     *```html
     *<igx-date-picker [value]="date" [formatter]="formatter"></igx-date-picker>
     *```
     */
    formatter: (val: Date) => string;
    /**
     *An @Input property that disables the `IgxDatePickerComponent`.
     *```html
     *<igx-date-picker [disabled]="'true'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     * ```
     */
    disabled: boolean;
    /**
     *An @Input property that sets the selected date.
     *```typescript
     *public date: Date = new Date();
     *```
     *```html
     *<igx-date-picker [value]="date"></igx-date-picker>
     *```
     */
    value: Date;
    /**
     * An @Input property that sets the `IgxDatePickerComponent` label.
     * The default label is 'Date'.
     * ```html
     * <igx-date-picker [label]="Calendar"></igx-date-picker>
     * ```
     */
    label: string;
    /**
     * An @Input property that sets the `IgxDatePickerComponent` label visibility.
     * By default the visibility is set to true.
     * <igx-date-picker [labelVisibility]="false"></igx-date-picker>
     */
    labelVisibility: boolean;
    /**
     *An @Input property that sets locales. Default locale is en.
     *```html
     *<igx-date-picker locale="ja-JP" [value]="date"></igx-date-picker>
     *```
     */
    locale: 'en';
    /**
     *An @Input property that sets on which day the week starts.
     *```html
     *<igx-date-picker [weekStart]="WEEKDAYS.FRIDAY" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    weekStart: WEEKDAYS | number;
    /**
     *Returns the format options of the `IgxDatePickerComponent`.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *ngAfterViewInit(){
     *    let formatOptions = this.datePicker.formatOptions;
     *}
     *```
     */
    /**
    *Sets the format options of the `IgxDatePickerComponent`.
    *```typescript
    *public Options;
    *@ViewChild("MyDatePicker")
    *public datePicker: IgxDatePickerComponent;
    *ngAfterViewInit(){
    *    this.Options = {
    *        day: "numeric",
    *        month: "long",
    *        weekday: "long",
    *        year: "numeric"
    *    }
    *this.datePicker.formatOptions = this.Options;
    *}
    *```
    */
    formatOptions: IFormatOptions;
    /**
     *Returns the format views of the `IgxDatePickerComponent`.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *ngAfterViewInit(){
     *    let formatViews = this.datePicker.formatViews;
     *}
     *```
     */
    /**
    *Sets the format views of the `IgxDatePickerComponent`.
    *```typescript
    *public Views;
    *@ViewChild("MyDatePicker")
    *public datePicker: IgxDatePickerComponent;
    *ngAfterViewInit(){
    *    this.Views = {day:false, month: false, year:false};
    *    this.datePicker.formatViews = this.Views;
    *}
    *```
    */
    formatViews: IFormatViews;
    /**
     * Gets the disabled dates descriptors.
     * ```typescript
     * let disabledDates = this.datepicker.disabledDates;
     * ```
     */
    /**
    * Sets the disabled dates' descriptors.
    * ```typescript
    *@ViewChild("MyDatePicker")
    *public datePicker: IgxDatePickerComponent;
    *ngAfterViewInit(){
    *    this.datePicker.disabledDates = [
    *      new DateRangeDescriptor(DateRangeType.Between, [new Date("2020-1-1"), new Date("2020-1-15")]),
    *      new DateRangeDescriptor(DateRangeType.Weekends)];
    *}
    *```
    */
    disabledDates: DateRangeDescriptor[];
    /**
     * Gets the special dates descriptors.
     * ```typescript
     * let specialDates = this.datepicker.specialDates;
     * ```
     */
    /**
    * Sets the special dates' descriptors.
    * ```typescript
    *@ViewChild("MyDatePicker")
    *public datePicker: IgxDatePickerComponent;
    *ngAfterViewInit(){
    *    this.datePicker.specialDates = [
    *      new DateRangeDescriptor(DateRangeType.Between, [new Date("2020-1-1"), new Date("2020-1-15")]),
    *      new DateRangeDescriptor(DateRangeType.Weekends)];
    *}
    *```
    */
    specialDates: DateRangeDescriptor[];
    /**
     *An @Input proeprty that sets the orientation of the `IgxDatePickerComponent` header.
     *```html
     *<igx-date-picker [vertical]="'true'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    vertical: boolean;
    /**
     *An @Input property that renders today button with custom label.
     *```html
     *<igx-date-picker cancelButtonLabel="cancel" todayButtonLabel="Tomorrow"></igx-date-picker>
     *```
     */
    todayButtonLabel: string;
    /**
     *An @Input property that renders cancel button with custom label.
     *```html
     *<igx-date-picker cancelButtonLabel="Close" todayButtonLabel="Today"></igx-date-picker>
     *```
     */
    cancelButtonLabel: string;
    /**
     *An event that is emitted when the `IgxDatePickerComponent` is opened.
     *```typescript
     *public open(event){
     *    alert("The date-picker has been opened!");
     *}
     *```
     *```html
     *<igx-date-picker (onOpen)="open($event)" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    onOpen: EventEmitter<IgxDatePickerComponent>;
    /**
     *"An event that is emitted when the `IgxDatePickerComponent` is closed.
     *```typescript
     *public close(event){
     *    alert("The date-picker has been closed!");
     *}
     *```
     *```html
     *<igx-date-picker (onClose)="close($event)" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    onClose: EventEmitter<IgxDatePickerComponent>;
    /**
     *An @Output property that is fired when selection is made in the calendar.
     *```typescript
     *public selection(event){
     *    alert("A date has been selected!");
     *}
     *```
     *```html
     *<igx-date-picker (onSelection)="selection($event)" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    onSelection: EventEmitter<Date>;
    /**
     * @hidden
     */
    protected defaultDatePickerTemplate: TemplateRef<any>;
    /**
     *@hidden
     */
    protected datePickerTemplateDirective: IgxDatePickerTemplateDirective;
    /**
     *Returns the formatted date.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *public selection(event){
     *    let selectedDate = this.datePicker.displayData;
     *    alert(selectedDate);
     *}
     *```
     *```html
     *<igx-date-picker #MyDatePicker (onSelection)="selection()" todayButtonLabel="today"></igx-date-picker>
     *```
     */
    readonly displayData: string;
    /**
     *@hidden
     */
    headerTemplate: IgxCalendarHeaderTemplateDirective;
    /**
     *@hidden
     */
    subheaderTemplate: IgxCalendarSubheaderTemplateDirective;
    /**
     *@hidden
     */
    container: ViewContainerRef;
    /**
     *@hidden
     */
    alert: IgxDialogComponent;
    /**
     *@hidden
     */
    calendarRef: ComponentRef<IgxCalendarComponent>;
    /**
     *@hidden
     */
    outlet: IgxOverlayOutletDirective | ElementRef;
    /**
     *@hidden
     */
    readonly calendar: IgxCalendarComponent;
    protected destroy$: Subject<boolean>;
    private _formatOptions;
    private _formatViews;
    private _disabledDates;
    private _specialDates;
    protected input: IgxInputDirective;
    constructor(resolver: ComponentFactoryResolver, element: ElementRef, cdr: ChangeDetectorRef);
    /**
     *Method that sets the selected date.
     *```typescript
     *public date = new Date();
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *ngAfterViewInit(){
     *    this.datePicker.writeValue(this.date);
     *}
     *```
     *@param value The date you want to select.
     *@memberOf {@link IgxDatePickerComponent}
     */
    writeValue(value: Date): void;
    /**
     *@hidden
     */
    registerOnChange(fn: (_: Date) => void): void;
    /**
     *@hidden
     */
    registerOnTouched(fn: () => void): void;
    /** @hidden */
    getEditElement(): any;
    /**
     *@hidden
     */
    ngOnInit(): void;
    /**
     *@hidden
     */
    ngOnDestroy(): void;
    /**
     *Selects today's date from calendar and change the input field value, @calendar.viewDate and @calendar.value.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *ngAfterViewInit(){
     *this.datePicker.triggerTodaySelection();
     *}
     *```
     *@memberOf {@link IgxDatePickerComponent}
     */
    triggerTodaySelection(): void;
    /**
     * Change the calendar selection and calling this method will emit the @calendar.onSelection event,
     * which will fire @handleSelection method.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *ngAfterViewInit(){
     *this.datePicker.selectDate(this.date);
     *}
     * ```
     * @param date passed date that has to be set to the calendar.
     * @memberOf {@link IgxDatePickerComponent}
     */
    selectDate(date: Date): void;
    /**
     * Deselects the calendar date.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *ngAfterViewInit(){
     *this.datePicker.deselectDate();
     *}
     * ```
     * @memberOf {@link IgxDatePickerComponent}
     */
    deselectDate(): void;
    /**
     * Open the dialog and update the calendar.
     *
     * @hidden
     */
    openDialog(): void;
    private createCalendarRef;
    /**
     * Closes the dialog, after was clearing all calendar items from dom.
     *
     * @hidden
     */
    handleDialogCloseAction(): void;
    /**
     * Evaluates when @calendar.onSelection event was fired
     * and update the input value.
     *
     * @param event selected value from calendar.
     *
     * @hidden
     */
    handleSelection(date: Date): void;
    onSpaceClick(event: any): void;
    /**
     * Gets the input group template.
     * ```typescript
     * let template = this.template();
     * ```
     * @memberof IgxTimePickerComponent
     */
    readonly template: TemplateRef<any>;
    /**
     * Gets the context passed to the input group template.
     * @memberof IgxTimePickerComponent
     */
    readonly context: {
        value: Date;
        displayData: string;
        openDialog: () => void;
    };
    private updateCalendarInstance;
    private _focusCalendarDate;
    private _setLocaleToDate;
    /**
     * Apply custom user formatter upon date.
     * @param formatter custom formatter function.
     * @param date passed date
     */
    private _customFormatChecker;
    private _onTouchedCallback;
    private _onChangeCallback;
}
/**
 * The IgxDatePickerModule provides the {@link IgxDatePickerComponent} inside your application.
 */
export declare class IgxDatePickerModule {
}
