import { ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { DateTimeFormats, DatetimeAdapter } from '@fundamental-ngx/core/datetime';
import { CalendarService } from '../../calendar.service';
import { CalendarMonth } from '../../models/calendar-month';
import { EscapeFocusFunction, FocusableCalendarView } from '../../models/common';
import { DateRange } from '../../models/date-range';
import * as i0 from "@angular/core";
/** Component representing the month view of the calendar. */
export declare class CalendarMonthViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {
    private _eRef;
    private _changeDetectorRef;
    private _calendarService;
    private _dateTimeFormats;
    private _dateTimeAdapter;
    /** The id of the calendar passed from the parent component */
    id: string;
    /** A number (1-12) representing the selected month */
    monthSelected: number;
    /** A function that handles escape focus */
    focusEscapeFunction: EscapeFocusFunction;
    /** A year the month view is referring to */
    year: number;
    /** Whether to pick the date range in month year format without picking days */
    isDateRangeMonthYearFormat: boolean;
    /** An event fired when a new month is selected */
    readonly monthClicked: EventEmitter<number>;
    /** Event thrown every time selected first or last date in range mode is changed */
    readonly selectedRangeDateChange: EventEmitter<DateRange<D>>;
    /**
     * Whether user wants to mark month cells on hover.
     * Works only on range mode, when start month is selected.
     */
    rangeHoverEffect: boolean;
    /**
     * @hidden
     * Month grid table
     */
    _calendarMonthListGrid: CalendarMonth<D>[][];
    /**
     * @hidden
     * A number offset used to achieve the 1-12 representation of the calendar
     */
    private readonly _monthOffset;
    /** @hidden */
    private readonly _amountOfColPerRow;
    /** @hidden */
    private readonly _amountOfRows;
    /**
     * @hidden
     */
    private readonly _destroyRef;
    /** @hidden */
    private _initiated;
    /** @hidden */
    private _selectedRangeDate;
    private _isOnRangePick;
    /** @hidden */
    constructor(_eRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, _calendarService: CalendarService, _dateTimeFormats: DateTimeFormats, _dateTimeAdapter: DatetimeAdapter<D>);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /** Get a number (1-12) representing the current month  */
    get currentMonth(): number;
    /**  Getter for the private class member _monthOffset */
    get monthOffset(): number;
    /** View ID */
    get viewId(): string;
    /**
     * @hidden
     * Today cell label ID
     */
    get _todayLabelId(): string;
    /**
     * @hidden
     * Selected date label ID
     */
    get _selectedDateLabelId(): string;
    /** The currently selected FdDates model start and end in range mode. */
    set selectedRangeDate(dateRange: DateRange<D>);
    get selectedRangeDate(): DateRange<D>;
    /**
     * @hidden
     *  Amount of selected months
     *  0, when there is no month selected, or start month is invalid,
     *  1, when there is only valid start month, or end month is same as start month,
     *  2, when both dates are valid
     */
    get _selectCounter(): number;
    /**
     * @hidden
     * Method for handling the keyboard events (a11y)
     */
    _onKeydownMonthHandler(event: KeyboardEvent, index: number): void;
    /**
     * @hidden
     * Method that allows to focus elements inside this component
     */
    _focusElementBySelector(elementSelector: string): void;
    /**
     * @hidden
     * Method returning id of month cell
     */
    _getIndex(rowIndex: number, colIndex: number): number;
    /**
     * @hidden
     * @param index month grid cell index
     */
    _getId(index: number): string;
    /**
     * @hidden
     * Method that checks if this is current month
     */
    _isCurrent(id: number): boolean;
    /**
     * @hidden
     * Method that check if this is selected month
     */
    _isSelected(id: number): boolean;
    /** Method for handling the mouse click event when a month is selected  */
    selectMonth(monthCell: CalendarMonth<D>, event?: MouseEvent | KeyboardEvent): void;
    /**
     * Set focus on month cell.
     * It can be a selected cell, current month cell or first cell in the list
     */
    setFocusOnCell(): void;
    /**
     * @hidden
     * Handles hover effect for range selection mode.
     * @param month The calendar month that is hovered.
     */
    _handleRangeHover(month: CalendarMonth<D>): void;
    /**
     * @hidden
     * Handles the hover effect for range selection.
     * Toggles the hover effect based on the selection state and event.
     * @param event Optional mouse event for handling hover effect.
     */
    private _handleRangeHoverEffect;
    /**
     * @hidden
     * Selects or updates the range of dates in range mode.
     * Handles the start and end dates and updates the selected range.
     * @param month The calendar month to be selected or updated in the range.
     */
    private _selectRangeDate;
    /**
     * @hidden
     * Orders the start and end dates for the range selection.
     * Ensures the start date is before or equal to the end date.
     * @param date1 The first date.
     * @param date2 The second date.
     * @returns An object containing the ordered start and end dates.
     */
    private _getOrderedRange;
    /**
     * @hidden
     * Change properties of range months, this method is called, to not rebuild whole grid from scratch,
     * it just changes properties of newly selected/unselected months.
     */
    private _changeSelectedRangeMonths;
    /**
     * @hidden
     * Check if dates are equal
     */
    private _isSameDate;
    /**
     * @hidden
     * Method that create month grid with required meta data
     */
    private _constructMonthGrid;
    /**
     * @hidden
     * Method to put configuration and listeners on calendar keyboard service
     */
    private _setupKeyboardService;
    /**
     * @hidden
     * Returns transformed 1d array from 2d month grid.
     */
    private _getMonthList;
    /** @hidden */
    private _focusOnCellByIndex;
    static ɵfac: i0.ɵɵFactoryDeclaration<CalendarMonthViewComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<CalendarMonthViewComponent<any>, "fd-calendar-month-view", never, { "id": { "alias": "id"; "required": false; }; "monthSelected": { "alias": "monthSelected"; "required": false; }; "focusEscapeFunction": { "alias": "focusEscapeFunction"; "required": false; }; "year": { "alias": "year"; "required": false; }; "isDateRangeMonthYearFormat": { "alias": "isDateRangeMonthYearFormat"; "required": false; }; "rangeHoverEffect": { "alias": "rangeHoverEffect"; "required": false; }; "selectedRangeDate": { "alias": "selectedRangeDate"; "required": false; }; }, { "monthClicked": "monthClicked"; "selectedRangeDateChange": "selectedRangeDateChange"; }, never, never, true, never>;
}
