import { ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';
import { SpecialDayRule } from '@fundamental-ngx/core/shared';
import { CalendarCurrent } from '../../models/calendar-current';
import { CalendarDay } from '../../models/calendar-day';
import { DateRange } from '../../models/date-range';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { CalendarLegendFocusingService } from '../../calendar-legend/calendar-legend-focusing.service';
import { CalendarService } from '../../calendar.service';
import { DisableDateFunction, EscapeFocusFunction, FocusableCalendarView } from '../../models/common';
import { CalendarType, DaysOfWeek } from '../../types';
import * as i0 from "@angular/core";
/** Component representing the day view of the calendar. */
export declare class CalendarDayViewComponent<D> implements OnInit, OnChanges, FocusableCalendarView {
    private eRef;
    private changeDetRef;
    private calendarService;
    private legendFocusedService;
    private _dateTimeFormats;
    _dateTimeAdapter: DatetimeAdapter<D>;
    /** Currently displayed month and year for days */
    set currentlyDisplayed(currentlyDisplayed: CalendarCurrent);
    get currentlyDisplayed(): CalendarCurrent;
    /** The currently selected date model in single mode. */
    set selectedDate(date: Nullable<D>);
    get selectedDate(): Nullable<D>;
    /** The currently selected date model in multiple mode. */
    set selectedMultipleDates(dates: Array<D>);
    get selectedMultipleDates(): Nullable<Array<D>>;
    /** The currently selected FdDates model start and end in range mode. */
    set selectedRangeDate(dateRange: DateRange<D>);
    get selectedRangeDate(): DateRange<D>;
    /** The currently selected FdDates model start and end in multiple range mode. */
    set selectedMultipleDateRanges(dateRanges: Array<DateRange<D>>);
    get selectedMultipleDateRanges(): Array<DateRange<D>>;
    /** Event emitted always, when next month is selected, by focus */
    readonly nextMonthSelect: EventEmitter<void>;
    /** Event emitted always, when previous month is selected, by focus */
    readonly previousMonthSelect: EventEmitter<void>;
    /** Event thrown every time selected date in single mode is changed */
    readonly selectedDateChange: EventEmitter<D>;
    /** Event thrown every time the selected dates in multiple mode are changed. */
    readonly selectedMultipleDatesChange: EventEmitter<Array<D>>;
    /** Event thrown every time selected first or last date in range mode is changed */
    readonly selectedRangeDateChange: EventEmitter<DateRange<D>>;
    /** Event thrown every time the first or last date in multiple range mode is changed. */
    readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>>;
    /**
     * Function used to disable certain dates in the calendar.
     * @param date date type
     */
    disableFunction: import("@angular/core").ModelSignal<DisableDateFunction<D>>;
    /**
     * Function used to disable certain dates in the calendar for the range start selection.
     * @param date date representation
     */
    disableRangeStartFunction: import("@angular/core").ModelSignal<DisableDateFunction<D>>;
    /**
     * Function used to disable certain dates in the calendar for the range end selection.
     * @param date date representation
     */
    disableRangeEndFunction: import("@angular/core").ModelSignal<DisableDateFunction<D>>;
    /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */
    startingDayOfWeek: import("@angular/core").ModelSignal<DaysOfWeek | undefined>;
    /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */
    calType: import("@angular/core").ModelSignal<CalendarType>;
    /** Id of the calendar. If none is provided, one will be generated. */
    id: import("@angular/core").InputSignal<string | undefined>;
    /** @hidden Id of the associated legend, passed from the parent calendar component. */
    associatedLegendId: import("@angular/core").InputSignal<string | undefined>;
    /**
     * Whether user wants to mark day cells on hover.
     * Works only on range mode, when start date is selected.
     */
    rangeHoverEffect: import("@angular/core").ModelSignal<boolean>;
    /**
     * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class
     */
    markWeekends: import("@angular/core").InputSignal<boolean>;
    /**
     * Whether user wants to show week numbers next to days
     */
    showWeekNumbers: import("@angular/core").InputSignal<boolean>;
    /**
     * Whether the user wants to select multiple days or multiple range dates.
     * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.
     * The user can click on week days to mark the related column.
     * Note: Clickable selection for week row or column does not work for range selections.
     */
    allowMultipleSelection: import("@angular/core").ModelSignal<boolean>;
    /** Function that allows to specify which function would be called, when focus wants to escape */
    focusEscapeFunction: import("@angular/core").InputSignal<EscapeFocusFunction>;
    /**
     * Special days mark, it can be used by passing array of object with
     * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:
     * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section
     * Rule accepts method with date object as a parameter. ex:
     * `rule: (date: D) => this.dateAdapter.getDay(date) === 1`, which will mark all sundays as special day.
     */
    specialDaysRules: import("@angular/core").InputSignal<SpecialDayRule<D>[]>;
    /**
     * @hidden
     * Actual day grid with previous/current/next month days
     */
    _dayViewGrid: CalendarDay<D>[][];
    /**
     * @hidden
     * Array of week numbers displayed for current month/year
     */
    _weeks: string[];
    /**
     * @hidden
     * Array of CSS classes for each week day in calendar header, computed based on whether the calendar type is 'multi'
     * and the date is not disabled.
     */
    _weekHeaderClasses: string[];
    /** @hidden */
    private _selectedDate;
    /** @hidden */
    private _selectedMultipleDates;
    /** @hidden */
    private _selectedRangeDate;
    /** @hidden */
    private _selectedMultipleDateRanges;
    /** @hidden */
    private readonly _destroyRef;
    /**
     * @hidden
     * Days per week
     */
    private readonly _amountOfCols;
    /** @hidden */
    private _isOnRangePick;
    /** @hidden */
    private _isInitiated;
    /** @hidden */
    private _currentlyDisplayed;
    /**
     * @hidden
     * Variable that contains short weekday names.
     */
    private _shortWeekDays;
    /**
     * @hidden
     * Variable that contains short weekday names.
     */
    private _longWeekDays;
    /**
     * @hidden
     * global variable to store the new range.
     */
    private _newRange;
    /** @hidden */
    constructor(eRef: ElementRef, changeDetRef: ChangeDetectorRef, calendarService: CalendarService, legendFocusedService: CalendarLegendFocusingService, _dateTimeFormats: DateTimeFormats, _dateTimeAdapter: DatetimeAdapter<D>);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /**
     * @hidden
     * Selects a date in single mode, toggles selection in multi mode, or sets the range in range mode.
     * Handles the selection of a date based on the calendar type.
     * @param day The calendar day to be selected.
     * @param event Optional mouse event for handling event propagation.
     */
    selectDate(day: CalendarDay<D>, event?: MouseEvent | KeyboardEvent): void;
    /**
     * Toggles the selection of a week on the calendar.
     * If the provided week is already fully selected, it will deselect it.
     * If the provided week is not fully selected, it will select the entire week and clear any previous selections.
     * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.
     */
    handleWeekSelectionByDays(selectedWeek: Array<CalendarDay<D>>): void;
    /**
     * Toggles the selection of a week on the calendar based on the weekday index.
     * If the provided week is already fully selected, it will deselect it.
     * If the provided week is not fully selected, it will select the entire week and clear any previous selections.
     * @param weekDayIndex The index of the weekday to be toggled.
     */
    handleWeekSelectionByIndex(weekDayIndex: number): void;
    /**
     * Set focus on default focusable cell
     */
    setFocusOnCell(): void;
    /** @hidden */
    _refreshHoverRange(day: CalendarDay<D>): void;
    /**
     * @hidden
     *  Amount of selected days
     *  0, when there is no day selected, or start date is invalid,
     *  1, when there is only valid start date, or end date is same as start date,
     *  2, when both dates are valid
     */
    get _selectCounter(): number;
    /**
     * @hidden
     * Total amount of selected days across multiple ranges.
     * Sums the counts of valid days in each date range.
     */
    get _selectMultipleCounter(): number;
    /**
     * @hidden
     * Method that returns short weekday name.
     * Can be changed by user by providing other class which implements DatetimeAdapter
     */
    get shortWeekDays(): string[];
    /**
     * @hidden
     * Method that returns weekday name.
     * Can be changed by user by providing other class which implements DatetimeAdapter
     */
    get longWeekDays(): string[];
    /**
     * @hidden
     * Function that gives array of all displayed CalendarDays
     */
    get _calendarDayList(): CalendarDay<D>[];
    /**
     * View ID
     */
    get viewId(): string;
    /**
     * @hidden
     * Week column header ID
     */
    get _weekNumbersColumnHeaderId(): string;
    /**
     * @hidden
     * Today cell label ID
     */
    get _todayLabelId(): string;
    /**
     * @hidden
     * Selected date label ID
     */
    get _selectedDateLabelId(): string;
    /**
     * @hidden
     * Date range start date label ID
     */
    get _dateRangeStartLabelId(): string;
    /**
     * @hidden
     * Date range end date label ID
     */
    get _dateRangeEndLabelId(): string;
    /**
     * @hidden
     * Date in past label ID
     */
    get _dateInPastLabelId(): string;
    /**
     * @hidden
     * Method that handles day cells keydown events,
     * @param event KeyboardEvent
     * @param cell CalendarDay
     * @param index with specified column and row as a x and y
     */
    _onKeydownDayHandler(event: KeyboardEvent, cell: CalendarDay<D>, index: number): void;
    /**
     * @hidden
     *  Method that allow to focus elements inside this component
     */
    _focusElementBySelector(elementSelector: string): void;
    /**
     * @hidden
     * Standardized method to calculate grid [x][y] to index number of flatten list
     */
    _getIndex(rowIndex: number, colIndex: number): number;
    /**
     * @hidden
     * Method that selects previous month
     * Triggered only when the month is changed during changing focus
     * Also triggers event to parent calendar component and rebuilds day view grid
     */
    private _selectPreviousMonth;
    /**
     * @hidden
     * Method that selects next month
     * Triggered only when the month is changed during changing focus
     * Also triggers event to parent calendar component and rebuilds day view grid
     */
    private _selectNextMonth;
    /** @hidden */
    private _focusOnLegendsDay;
    /** @hidden */
    private _legendBlurred;
    /**
     * @hidden
     * Method that creates array of CalendarDay models which will be shown on day grid,
     * depending on current month and year.
     */
    private _populateCalendar;
    /**
     * @hidden
     * Method that builds 2 dimensions day view grid, also sets up currently displayed month, or year,
     * when there is not any.
     */
    private _buildDayViewGrid;
    /** @hidden */
    private _isInvalidDate;
    /**
     * @hidden
     * Get id of calendar's day item
     */
    private _getCellIdByIndex;
    /**
     * @hidden
     * Method which provides array of CalendarDay,
     * which contains every single day of currently shown month/year.
     */
    private _getCurrentMonthDays;
    /**
     * @hidden
     * Method that returns active cell, which means:
     * if there is any selected day, return selected day
     * if there is no selected day, but there is today day, return today day
     * if there is no today, or selected, return first one
     */
    private _getActiveCell;
    /**
     * @hidden
     * Method which provides array of CalendarDay,
     * which contains last 0-6 days of previous month/year. Theses days
     * fills the gap between starting startingDayOfWeek and first day of current month
     */
    private _getPreviousMonthDays;
    /**
     * @hidden
     * Method which provides array of CalendarDay, which contains first days of next month/year. Theses days
     * fills the gap between last day of current day and end of 6-weeks calendar grid.
     */
    private _getNextMonthDays;
    /** @hidden */
    private _isWeekendDay;
    /**
     * @hidden
     * Method that generates whole day model basing on date, disabling functions, block functions, and actually
     * chosen range / single date.
     */
    private _getDay;
    /**
     * @hidden
     * Method that is called to refresh i18n short week days.
     */
    private _refreshShortWeekDays;
    /**
     * @hidden
     * Gets special day number of specified date model
     */
    private _getSpecialDay;
    /**
     * @hidden
     * Method that returns array of week's count
     */
    private _refreshWeekCount;
    /**
     * @hidden
     * Get year and month for previous year
     */
    private _getPreviousMonth;
    /**
     * @hidden
     * Get year and month for next year
     */
    private _getNextMonth;
    /**
     * @hidden
     * Method to put configuration and listeners on calendar keyboard service
     */
    private _setupKeyboardService;
    /**
     * @hidden
     * Change selection flag on days to false, besides the selected one
     */
    private _changeSelectedSingleDay;
    /**
     * @hidden
     * Change selection flag on days to false, besides the selected one
     *
     * @param dates - An array of CalendarDay objects to be marked as selected
     * @param calendar - The calendar array containing all CalendarDay objects
     */
    private _changeSelectedMultipleDays;
    /**
     * @hidden
     * Change properties of range days, this method is called, to not rebuild whole grid from scratch,
     * it just changes properties of newly selected/unselected days.
     */
    private _changeSelectedRangeDays;
    /**
     * @hidden
     * Change properties of range days for multiple ranges.
     * This method is called to not rebuild the whole grid from scratch.
     * It just changes properties of newly selected/unselected days.
     */
    private _changeSelectedMultipleRangeDays;
    /** @hidden */
    private refreshTabIndex;
    /** @hidden */
    private focusOnCellByIndex;
    /**
     * @hidden
     * Check if dates are equal
     */
    private _isSameDay;
    /**
     * @hidden
     * Selects a single date and updates the selected date in single mode.
     * @param day The calendar day to be selected.
     */
    private _selectSingleDate;
    /**
     * @hidden
     * Toggles the selection of a date in multi mode.
     * Adds the date if not selected, removes it if already selected.
     * @param day The calendar day to be toggled.
     */
    private _toggleMultiDate;
    /**
     * @hidden
     * Selects or updates the range of dates in range mode.
     * Handles the start and end dates and updates the selected range.
     * @param day The calendar day to be selected or updated in the range.
     */
    private _selectRangeDate;
    /**
     * @hidden
     * Selects or updates multiple ranges of dates in range mode.
     * Handles the start and end dates and updates the selected ranges.
     * @param day The calendar day to be selected or updated in the range.
     */
    private _selectMultipleRangeDates;
    /**
     * Merges overlapping date ranges into a single range.
     *
     * @param ranges - An array of date ranges to be merged.
     * @returns An array of merged date ranges.
     */
    private _mergeOverlappingRanges;
    /**
     * Handles the case where the selected day is part of an existing range.
     *
     * @param tempRanges - An array of date ranges to be checked.
     * @param day - The calendar day to be checked.
     * @returns An array of date ranges with the updated range if the selected day is part of an existing range.
     */
    private _handleExistingRange;
    /**
     * @hidden
     * Checks if a date is within a given date range.
     * @param date The date to check.
     * @param range The date range.
     * @returns True if the date is in the range, false otherwise.
     */
    private _isDateInRange;
    /**
     * @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
     * 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;
    /**
     * Helper method to toggle the selection of a week.
     * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.
     */
    private toggleWeekSelection;
    /**
     * @hidden
     * Computes the CSS class for each week day in calendar header based on whether the calendar type is 'multi'
     * and the date is not disabled.
     * Stores the computed classes in the weekHeaderClasses array.
     */
    private _computeWeekHeaderClasses;
    /**
     * @hidden
     * Handles hover effect for single-range selection mode.
     * @param day The calendar day that is hovered.
     */
    private _handleSingleRangeHover;
    /**
     * @hidden
     * Handles hover effect for multi-range selection mode.
     * @param day The calendar day that is hovered.
     */
    private _handleMultiRangeHover;
    static ɵfac: i0.ɵɵFactoryDeclaration<CalendarDayViewComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<CalendarDayViewComponent<any>, "fd-calendar-day-view", never, { "currentlyDisplayed": { "alias": "currentlyDisplayed"; "required": false; }; "selectedDate": { "alias": "selectedDate"; "required": false; }; "selectedMultipleDates": { "alias": "selectedMultipleDates"; "required": false; }; "selectedRangeDate": { "alias": "selectedRangeDate"; "required": false; }; "selectedMultipleDateRanges": { "alias": "selectedMultipleDateRanges"; "required": false; }; "disableFunction": { "alias": "disableFunction"; "required": false; "isSignal": true; }; "disableRangeStartFunction": { "alias": "disableRangeStartFunction"; "required": false; "isSignal": true; }; "disableRangeEndFunction": { "alias": "disableRangeEndFunction"; "required": false; "isSignal": true; }; "startingDayOfWeek": { "alias": "startingDayOfWeek"; "required": false; "isSignal": true; }; "calType": { "alias": "calType"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "associatedLegendId": { "alias": "associatedLegendId"; "required": false; "isSignal": true; }; "rangeHoverEffect": { "alias": "rangeHoverEffect"; "required": false; "isSignal": true; }; "markWeekends": { "alias": "markWeekends"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "allowMultipleSelection": { "alias": "allowMultipleSelection"; "required": false; "isSignal": true; }; "focusEscapeFunction": { "alias": "focusEscapeFunction"; "required": false; "isSignal": true; }; "specialDaysRules": { "alias": "specialDaysRules"; "required": false; "isSignal": true; }; }, { "nextMonthSelect": "nextMonthSelect"; "previousMonthSelect": "previousMonthSelect"; "selectedDateChange": "selectedDateChange"; "selectedMultipleDatesChange": "selectedMultipleDatesChange"; "selectedRangeDateChange": "selectedRangeDateChange"; "selectedMultipleDateRangesChange": "selectedMultipleDateRangesChange"; "disableFunction": "disableFunctionChange"; "disableRangeStartFunction": "disableRangeStartFunctionChange"; "disableRangeEndFunction": "disableRangeEndFunctionChange"; "startingDayOfWeek": "startingDayOfWeekChange"; "calType": "calTypeChange"; "rangeHoverEffect": "rangeHoverEffectChange"; "allowMultipleSelection": "allowMultipleSelectionChange"; }, never, never, true, never>;
}
