import { ElementRef, AfterViewInit, QueryList, OnDestroy } from '@angular/core';
import { ICalendarDate } from './calendar';
import { IgxMonthPickerBase } from './month-picker-base';
import { IgxMonthsViewComponent } from './months-view/months-view.component';
import { IgxYearsViewComponent } from './years-view/years-view.component';
import { IgxDaysViewComponent } from './days-view/days-view.component';
/**
 * **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 extends IgxMonthPickerBase implements AfterViewInit, OnDestroy {
    /**
     * 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;
    hasHeader: boolean;
    /**
     * 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;
    /**
     * Sets/gets the number of month views displayed.
     * Default value is `1`.
     * ```html
     * <igx-calendar [vertical] = "true" [monthsViewNumber]="2"></igx-calendar>
     * ```
     * ```typescript
     * let monthViewsDisplayed = this.calendar.monthsViewNumber;
     * ```
     */
    monthsViewNumber: number;
    /**
     * 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 styleVerticalClass: boolean;
    /**
     * The default css class applied to the component.
     *
     * @hidden
     */
    styleClass: boolean;
    /**
     * @hidden
     */
    monthsView: IgxMonthsViewComponent;
    /**
     * @hidden
     */
    monthsBtn: ElementRef;
    /**
     * @hidden
     */
    dacadeView: IgxYearsViewComponent;
    /**
     * @hidden
     */
    daysView: IgxDaysViewComponent;
    /**
     * @hidden
     */
    monthViews: QueryList<IgxDaysViewComponent>;
    /**
     * @hidden
     */
    prevMonthBtn: ElementRef;
    /**
     * @hidden
     */
    nextMonthBtn: ElementRef;
    /**
     * @hidden
     */
    readonly isYearView: boolean;
    /**
     * @hidden
     */
    /**
    * @hidden
    */
    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;
            index: number;
            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;
            index: number;
            monthView: () => void;
            yearView: () => void;
        };
    };
    /**
     * @hidden
     */
    readonly headerDate: Date;
    /**
     * @hidden
     */
    private headerTemplateDirective;
    /**
     * @hidden
     */
    private subheaderTemplateDirective;
    /**
     *@hidden
     */
    private _monthAction;
    /**
     *@hidden
     */
    private _monthsViewNumber;
    /**
     *@hidden
     */
    private _monthViewsChanges$;
    /**
     *@hidden
     */
    private defaultDayView;
    /**
     *@hidden
     */
    dayViews: {
        value: Date | Date[];
        viewDate: Date;
    }[];
    ngAfterViewInit(): 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;
    /**
     * @hidden
     */
    previousMonth(isKeydownTrigger?: boolean): void;
    /**
     * @hidden
     */
    nextMonth(isKeydownTrigger?: boolean): void;
    /**
     * @hidden
     */
    startPrevMonthScroll: (isKeydownTrigger?: boolean) => void;
    /**
     * @hidden
     */
    startNextMonthScroll: (isKeydownTrigger?: boolean) => void;
    /**
     * @hidden
     */
    stopMonthScroll: (event: any) => void;
    /**
     * @hidden
     */
    activeViewDecade(args: Date): void;
    /**
     * @hidden
     */
    activeViewDecadeKB(event: any, args: Date): void;
    /**
     * @hidden
     */
    getFormattedDate(): {
        weekday: string;
        monthday: string;
    };
    /**
     * @hidden
     */
    childClicked(instance: ICalendarDate): void;
    /**
     * @hidden
     */
    viewChanged(event: any): void;
    /**
     * @hidden
     */
    changeMonth(event: Date): void;
    /**
     * @hidden
     */
    activeViewYear(args: Date, event: any): void;
    private focusMonth;
    /**
     * @hidden
     */
    activeViewYearKB(args: Date, event: any): void;
    /**
     * Deselects date(s) (based on the selection type).
     *```typescript
     * this.calendar.deselectDate(new Date(`2018-06-12`));
     *````
     */
    deselectDate(value?: Date | Date[]): void;
    /**
     * @hidden
     */
    getViewDate(i: number): Date;
    /**
     * @hidden
     */
    getMonth(i: number): number;
    /**
     * @hidden
     */
    getContext(i: number): {
        $implicit: {
            date: Date;
            full: string;
            index: number;
            monthView: () => void;
            yearView: () => void;
        };
    };
    /**
     * @hidden
     */
    onKeydownPageUp(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownPageDown(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownShiftPageUp(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownShiftPageDown(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownHome(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onKeydownEnd(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    onMouseUp(event: KeyboardEvent): void;
    /**
     * @hidden
     */
    ngOnDestroy(): void;
    /**
     * Helper method building and returning the context object inside
     * the calendar templates.
     * @hidden
     */
    private generateContext;
    /**
     * Helper method that sets references for prev/next months for each month in the view
     * @hidden
     */
    private setSiblingMonths;
    /**
     * Helper method returning previous/next day views
     * @hidden
     */
    private getMonthView;
}
