import { ComponentFactoryResolver, ComponentRef, EventEmitter, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarSubheaderTemplateDirective, WEEKDAYS } from '../calendar/index';
import { IgxDialogComponent } from '../dialog/dialog.component';
import { Subject } from 'rxjs';
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-datePicker [(ngModel)]="selectedDate"></igx-datePicker>
 * ```
 */
export declare class IgxDatePickerComponent implements ControlValueAccessor, OnInit, OnDestroy {
    private resolver;
    /**
     *An @Input property that sets the value of `id` attribute. If not provided it will be automatically generated.
     *```html
     *<igx-datePicker [id]="'igx-datePicker-3'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    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-datePicker [value]="date" [formatter]="formatter"></igx-datePicker>
     *```
     */
    formatter: (val: Date) => string;
    /**
     *An @Input property that disables the `IgxDatePickerComponent`.
     *```html
     *<igx-datePicker [disabled]="'true'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     * ```
     */
    disabled: boolean;
    /**
     *An @Input property that sets the selected date.
     *```typescript
     *public date: Date = new Date();
     *```
     *```html
     *<igx-datePicker [value]="date"></igx-datePicker>
     *```
     */
    value: Date;
    /**
     * An @Input property that sets the `IgxDatePickerComponent` label.
     * The default label is 'Date'.
     * ```html
     * <igx-datePicker [label]="Calendar"></igx-datePicker>
     * ```
     */
    label: string;
    /**
     * An @Input property that sets the `IgxDatePickerComponent` label visibility.
     * By default the visibility is set to true.
     * <igx-datePicker [labelVisibility]="false"></igx-datePicker>
     */
    labelVisibility: boolean;
    /**
     *An @Input property that sets locales. Default locale is en.
     *```html
     *<igx-datePicker locale="ja-JP" [value]="date"></igx-datePicker>
     *```
     */
    locale: string;
    /**
     *An @Input property that sets on which day the week starts.
     *```html
     *<igx-datePicker [weekStart]="WEEKDAYS.FRIDAY" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    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;
    /**
     *An @Input proeprty that sets the orientation of the `IgxDatePickerComponent` header.
     *```html
     *<igx-datePicker [vertical]="'true'" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    vertical: boolean;
    /**
     *An @Input property that renders today button with custom label.
     *```html
     *<igx-datePicker cancelButtonLabel="cancel" todayButtonLabel="Tomorrow"></igx-datePicker>
     *```
     */
    todayButtonLabel: string;
    /**
     *An @Input property that renders cancel button with custom label.
     *```html
     *<igx-datePicker cancelButtonLabel="Close" todayButtonLabel="Today"></igx-datePicker>
     *```
     */
    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-datePicker (onOpen)="open($event)" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    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-datePicker (onClose)="close($event)" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    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-datePicker (onSelection)="selection($event)" cancelButtonLabel="cancel" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    onSelection: EventEmitter<Date>;
    /**
     *Retruns the formatted date.
     *```typescript
     *@ViewChild("MyDatePicker")
     *public datePicker: IgxDatePickerComponent;
     *public selection(event){
     *    let selectedDate = this.datePicker.displayData;
     *    alert(selectedDate);
     *}
     *```
     *```html
     *<igx-datePicker #MyDatePicker (onSelection)="selection()" todayButtonLabel="today"></igx-datePicker>
     *```
     */
    readonly displayData: string;
    /**
     *@hidden
     */
    headerTemplate: IgxCalendarHeaderTemplateDirective;
    /**
     *@hidden
     */
    subheaderTemplate: IgxCalendarSubheaderTemplateDirective;
    /**
     *@hidden
     */
    container: ViewContainerRef;
    /**
     *@hidden
     */
    alert: IgxDialogComponent;
    /**
     *@hidden
     */
    calendarRef: ComponentRef<IgxCalendarComponent>;
    /**
     *@hidden
     */
    readonly calendar: IgxCalendarComponent;
    protected destroy$: Subject<boolean>;
    private _formatOptions;
    private _formatViews;
    private input;
    constructor(resolver: ComponentFactoryResolver);
    /**
     *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
     */
    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;
    /**
     * Emits the open event and update the calendar.
     *
     * @hidden
     */
    onOpenEvent(): 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(event: any): void;
    onSpaceClick(event: any): void;
    private updateCalendarInstance();
    private _focusTheDialog();
    private _setLocaleToDate(value, locale?);
    /**
     * Apply custom user formatter upon date.
     * @param formatter custom formatter function.
     * @param date passed date
     */
    private _customFormatChecker(formatter, date);
    private _onTouchedCallback;
    private _onChangeCallback;
}
/**
 * The IgxDatePickerModule provides the {@link IgxDatePickerComponent} inside your application.
 */
export declare class IgxDatePickerModule {
}
