import { AfterContentInit, EventEmitter } from '@angular/core';
import { AswCalendarCell } from '../calendar-body/calendar-body';
import { AswDatetimeFormats, DatetimeAdapter } from '@asoftwareworld/form-builder-pro/common';
import { AswDatetimepickerType } from '../datetimepicker-types';
import * as i0 from "@angular/core";
export declare const yearsPerPage = 24;
export declare const yearsPerRow = 4;
/**
 * An internal component used to display multiple years in the datetimepicker.
 * @docs-private
 */
export declare class AswMultiYearView<D> implements AfterContentInit {
    _adapter: DatetimeAdapter<D>;
    private _dateFormats;
    type: AswDatetimepickerType;
    /** A function used to filter which dates are selectable. */
    dateFilter: (date: D) => boolean;
    /** Emits when a new month is selected. */
    selectedChange: EventEmitter<D>;
    /** Emits when any date is selected. */
    readonly _userSelection: EventEmitter<void>;
    /** Grid of calendar cells representing the years in the range. */
    _years: AswCalendarCell[][];
    /** The label for this year range (e.g. "2000-2020"). */
    _yearLabel: string;
    /** The year in this range that today falls on. Null if today is in a different range. */
    _todayYear: number;
    /**
     * The year in this range that the selected Date falls on.
     * Null if the selected Date is in a different range.
     */
    _selectedYear: number | null;
    _calendarState: string;
    constructor(_adapter: DatetimeAdapter<D>, _dateFormats: AswDatetimeFormats);
    /** The date to display in this multi year view */
    get activeDate(): D;
    set activeDate(value: D);
    private _activeDate;
    /** The currently selected date. */
    get selected(): D;
    set selected(value: D);
    private _selected;
    /** The minimum selectable date. */
    get minDate(): D | null;
    set minDate(value: D | null);
    private _minDate;
    /** The maximum selectable date. */
    get maxDate(): D | null;
    set maxDate(value: D | null);
    private _maxDate;
    ngAfterContentInit(): void;
    /** Handles when a new year is selected. */
    _yearSelected(year: number): void;
    _getActiveCell(): number;
    _calendarStateDone(): void;
    /** Initializes this year view. */
    private _init;
    /** Creates an AswCalendarCell for the given year. */
    private _createCellForYear;
    /** Whether the given year is enabled. */
    private _shouldEnableYear;
    /**
     * Gets the year in this years range that the given Date falls on.
     * Returns null if the given Date is not in this range.
     */
    private _getYearInCurrentRange;
    /**
     * Validate if the current year is in the current range
     * Returns true if is in range else returns false
     */
    private _isInRange;
    /**
     * @param obj The object to check.
     * @returns The given object if it is both a date instance and valid, otherwise null.
     */
    private _getValidDateOrNull;
    static ɵfac: i0.ɵɵFactoryDeclaration<AswMultiYearView<any>, [{ optional: true; }, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AswMultiYearView<any>, "asw-multi-year-view", ["aswMultiYearView"], { "type": { "alias": "type"; "required": false; }; "dateFilter": { "alias": "dateFilter"; "required": false; }; "activeDate": { "alias": "activeDate"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; }, { "selectedChange": "selectedChange"; "_userSelection": "_userSelection"; }, never, never, false, never>;
}
export declare function isSameMultiYearView<D>(dateAdapter: DatetimeAdapter<D>, date1: D, date2: D, minDate: D | null, maxDate: D | null): boolean;
/**
 * When the multi-year view is first opened, the active year will be in view.
 * So we compute how many years are between the active year and the *slot* where our
 * "startingYear" will render when paged into view.
 */
export declare function getActiveOffset<D>(dateAdapter: DatetimeAdapter<D>, activeDate: D, minDate: D | null, maxDate: D | null): number;
