import { EventEmitter, OnInit, QueryList } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { HammerGestureConfig } from '@angular/platform-browser';
import { ICalendarDate, WEEKDAYS } from './calendar';
import { IgxCalendarDateDirective } from './calendar.directives';
export declare enum CalendarView {
    DEFAULT = 0,
    YEAR = 1,
    DECADE = 2,
}
export declare enum CalendarSelection {
    SINGLE = "single",
    MULTI = "multi",
    RANGE = "range",
}
export declare class CalendarHammerConfig extends HammerGestureConfig {
    overrides: {
        pan: {
            direction: number;
            threshold: number;
        };
    };
}
/**
 * **Ignite UI for Angular Calendar** -
 * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/calendar.html)
 *
 * The Ignite UI Calendar provides an easy way to display a calendar and allow users to select dates using single, multiple
 * or range selection.
 *
 * Example:
 * ```html
 * <igx-calendar selection="range"></igx-calendar>
 * ```
 */
export declare class IgxCalendarComponent implements OnInit, ControlValueAccessor {
    /**
     * Sets/gets the `id` of the calendar.
     * If not set, the `id` will have value `"igx-calendar-0"`.
     * ```html
     * <igx-calendar id = "my-first-calendar"></igx-calendar>
     * ```
     * ```typescript
     * let calendarId =  this.calendar.id;
     * ```
     * @memberof IgxCalendarComponent
     */
    id: string;
    /**
     * Gets the start day of the week.
     * Can return a numeric or an enum representation of the week day.
     * Defaults to `Sunday` / `0`.
     * ```typescript
     * let weekStart =  this.calendar.weekStart;
     * ```
     * @memberof IgxCalendarComponent
     */
    /**
     * Sets the start day of the week.
     * Can be assigned to a numeric value or to `WEEKDAYS` enum value.
     * ```html
     * <igx-calendar [weekStart] = "1"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    weekStart: WEEKDAYS | number;
    /**
     * Sets/gets the `locale` of the calendar.
     * Expects a valid BCP 47 language tag.
     * Default value is `"en"`.
     * ```html
     * <igx-calendar [locale] = "de"></igx-calendar>
     * ```
     * ```typescript
     * let locale =  this.calendar.locale;
     * ```
     * @memberof IgxCalendarComponent
     */
    locale: string;
    /**
     *
     * Gets the selection type of the calendar.
     * Default value is `"single"`.
     * Changing the type of selection in the calendar resets the currently
     * selected values if any.
     * ```typescript
     * let selectionType =  this.calendar.selection;
     * ```
     * @memberof IgxCalendarComponent
     */
    /**
     * Sets the selection type of the calendar.
     * ```html
     * <igx-calendar [selection] = "'multi'"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    selection: string;
    /**
     * Gets the date that is presented in the calendar.
     * By default it is the current date.
     * ```typescript
     * let date = this.calendar.viewDate;
     * ```
     * @memberof IgxCalendarComponent
     */
    /**
     * Sets the date that will be presented in the default view when the calendar renders.
     * ```html
     * <igx-calendar viewDate = "15/06/2018"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    viewDate: Date;
    /**
     * Gets the selected date(s) of the calendar.
     *
     * When the calendar selection is set to `single`, it returns
     * a single `Date` object.
     * Otherwise it is an array of `Date` objects.
     * ```typescript
     * let selectedDates =  this.calendar.value;
     * ```
     * @memberof IgxCalendarComponent
     */
    /**
     * Sets the selected date(s) of the calendar.
     *
     * When the calendar selection is set to `single`, it accepts
     * a single `Date` object.
     * Otherwise it is an array of `Date` objects.
     * ```typescript
     *  this.calendar.value =  new Date(`2016-06-12`);
     * ```
     * @memberof IgxCalendarComponent
     */
    value: Date | Date[];
    /**
     * Gets the date format options of the calendar.
     * ```typescript
     * let dateFormatOptions = this.calendar.formatOptions.
     * ```
     */
    /**
     * Sets the date format options of the calendar.
     * ```html
     * <igx-calendar> [formatOptions] = "{ day: '2-digit', month: 'short', weekday: 'long', year: 'numeric' }"</igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    formatOptions: object;
    /**
     * Gets whether the `day`, `month` and `year` should be rendered
     * according to the locale and formatOptions, if any.
     * ```typescript
     * let formatViews = this.calendar.formatViews;
     * ```
     */
    /**
     * Gets whether the `day`, `month` and `year` should be rendered
     * according to the locale and formatOptions, if any.
     * ```html
     * <igx-calendar [formatViews] = "{ day: true, month: false, year: true }"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    formatViews: object;
    /**
     * Sets/gets whether the calendar header will be in vertical position.
     * Default value is `false`.
     * ```html
     * <igx-calendar [vertical] = "true"></igx-calendar>
     * ```
     * ```typescript
     * let isVertical = this.calendar.vertical;
     * ```
     */
    vertical: boolean;
    /**
     * Emits an event when a selection is made in the calendar.
     * Provides reference the `selectedDates` property in the `IgxCalendarComponent`.
     * ```html
     * <igx-calendar (onSelection) = "onSelection($event)"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    onSelection: EventEmitter<Date | Date[]>;
    /**
     * @hidden
     */
    dates: QueryList<IgxCalendarDateDirective>;
    /**
     * The default `tabindex` attribute for the component.
     *
     * @hidden
     */
    tabindex: number;
    /**
     * The default aria role attribute for the component.
     *
     * @hidden
     */
    role: string;
    /**
     * The default aria lebelled by attribute for the component.
     *
     * @hidden
     */
    ariaLabelledBy: string;
    /**
     * The default css class applied to the component.
     *
     * @hidden
     */
    readonly styleClass: string;
    /**
     * Returns an array of date objects which are then used to
     * properly render the month names.
     *
     * Used in the template of the component
     *
     * @hidden
     */
    readonly months: Date[];
    /**
     * Returns an array of date objects which are then used to properly
     * render the years.
     *
     * Used in the template of the component.
     *
     * @hidden
     */
    readonly decade: number[];
    readonly isDefaultView: boolean;
    readonly isYearView: boolean;
    readonly isDecadeView: boolean;
    /**
     * Gets the current active view of the calendar.
     * ```typescript
     * let activeView =  this.calendar.activeView;
     * ```
     */
    readonly activeView: CalendarView;
    /**
     * @hidden
     */
    readonly monthAction: string;
    /**
     * Gets the header template.
     * ```typescript
     * let headerTemplate =  this.calendar.headerTeamplate;
     * ```
     * @memberof IgxCalendarComponent
     */
    /**
     * Sets the header template.
     * ```html
     * <igx-calendar headerTemplateDirective = "igxCalendarHeader"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    headerTemplate: any;
    /**
     * Gets the subheader template.
     * ```typescript
     * let subheaderTemplate = this.calendar.subheaderTemplate;
     * ```
     */
    /**
     * Sets the subheader template.
     * ```html
     * <igx-calendar subheaderTemplate = "igxCalendarSubheader"></igx-calendar>
     * ```
     * @memberof IgxCalendarComponent
     */
    subheaderTemplate: any;
    /**
     * Gets the context for the template marked with the `igxCalendarHeader` directive.
     * ```typescript
     * let headerContext =  this.calendar.headerContext;
     * ```
     */
    readonly headerContext: {
        $implicit: {
            date: Date;
            full: string;
            monthView: () => void;
            yearView: () => void;
        };
    };
    /**
     * Gets the context for the template marked with either `igxCalendarSubHeaderMonth`
     * or `igxCalendarSubHeaderYear` directive.
     * ```typescript
     * let context =  this.calendar.context;
     * ```
     */
    readonly context: {
        $implicit: {
            date: Date;
            full: string;
            monthView: () => void;
            yearView: () => void;
        };
    };
    /**
     * @hidden
     */
    readonly headerDate: Date;
    /**
     * @hidden
     */
    private headerTemplateDirective;
    /**
     * @hidden
     */
    private subheaderTemplateDirective;
    /**
     *@hidden
     */
    private _viewDate;
    /**
     *@hidden
     */
    private calendarModel;
    /**
     *@hidden
     */
    private _activeView;
    /**
     *@hidden
     */
    private selectedDates;
    /**
     *@hidden
     */
    private _selection;
    /**
     *@hidden
     */
    private _rangeStarted;
    /**
     *@hidden
     */
    private _monthAction;
    /**
     *@hidden
     */
    private _formatOptions;
    /**
     *@hidden
     */
    private _formatViews;
    /**
     * @hidden
     */
    constructor();
    /**
     * @hidden
     */
    ngOnInit(): void;
    /**
     * @hidden
     */
    registerOnChange(fn: (v: Date) => void): void;
    /**
     * @hidden
     */
    registerOnTouched(fn: () => void): void;
    /**
     * @hidden
     */
    writeValue(value: Date | Date[]): void;
    /**
     * Returns the locale representation of the month in the month view if enabled,
     * otherwise returns the default `Date.getMonth()` value.
     *
     * @hidden
     */
    formattedMonth(value: Date): string;
    /**
     * Returns the locale representation of the date in the default view if enabled,
     * otherwise returns the default `Date.getDate()` value.
     *
     * @hidden
     */
    formattedDate(value: Date): string;
    /**
     * Returns the locale representation of the year in the year view if enabled,
     * otherwise returns the default `Date.getFullYear()` value.
     *
     * @hidden
     */
    formattedYear(value: Date): string;
    /**
     * @hidden
     */
    isCurrentMonth(value: Date): boolean;
    /**
     * @hidden
     */
    isCurrentYear(value: Date): boolean;
    /**
     * @hidden
     */
    previousMonth(): void;
    /**
     * @hidden
     */
    nextMonth(): void;
    /**
     * @hidden
     */
    previousYear(): void;
    /**
     * @hidden
     */
    nextYear(): void;
    /**
     * @hidden
     */
    getFormattedDate(): {
        weekday: string;
        monthday: string;
    };
    /**
     * @hidden
     */
    childClicked(instance: ICalendarDate): void;
    animationDone(event: any, isLast: boolean): void;
    /**
     * Selects date(s) (based on the selection type).
     *```typescript
     * this.calendar.selectDate(new Date(`2018-06-12`));
     *```
     */
    selectDate(value: Date | Date[]): void;
    /**
     * @hidden
     */
    generateWeekHeader(): string[];
    /**
     * @hidden
     */
    readonly getCalendarMonth: ICalendarDate[][];
    /**
     * @hidden
     */
    changeYear(event: Date): void;
    /**
     * @hidden
     */
    changeMonth(event: Date): void;
    /**
     * @hidden
     */
    activeViewYear(): void;
    /**
     * @hidden
     */
    activeViewDecade(): void;
    /**
     * @hidden
     */
    onScroll(event: any): void;
    /**
     * @hidden
     */
    onPan(event: any): void;
    /**
     * @hidden
     */
    onKeydownPageUp(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownPageDown(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownShiftPageUp(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownShiftPageDown(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownArrowUp(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownArrowDown(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownArrowLeft(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownArrowRight(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownHome(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownEnd(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    dateTracker(index: any, item: any): string;
    /**
     * @hidden
     */
    rowTracker(index: any, item: any): string;
    /**
     * Performs a single selection.
     * @hidden
     */
    private selectSingle(value);
    /**
     * Performs a multiple selection
     * @hidden
     */
    private selectMultiple(value);
    /**
     *@hidden
     */
    private selectRange(value);
    /**
     * Helper method building and returning the context object inside
     * the calendar templates.
     * @hidden
     */
    private generateContext(value);
    /**
     *@hidden
     */
    private generateDateRange(start, end);
    /**
     *@hidden
     */
    private generateYearRange(delta);
    /**
     *@hidden
     */
    private _onTouchedCallback;
    /**
     *@hidden
     */
    private _onChangeCallback;
}
