import { Signal, TemplateRef } from '@angular/core';
import { EuiCalendarEvent } from './models';
import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
import * as i0 from "@angular/core";
export interface EuiCalendarDayCell {
    day: number;
    month: number;
    year: number;
    isCurrentMonth: boolean;
    isToday?: boolean;
    isFuture?: boolean;
    isPast?: boolean;
    isWeekend?: boolean;
    dayOfWeek: number;
    dateString: string;
    weekNumber?: number;
    isFirstDayOfMonth?: boolean;
    isLastDayOfMonth?: boolean;
    isDisabled?: boolean;
    events?: EuiCalendarEvent[];
}
export interface EuiCalendarMonthlyCalendarOptions {
    year?: number;
    emptyValue?: any;
    fillPreviousMonth?: boolean;
    fillNextMonth?: boolean;
    includeMetadata?: boolean;
    includeToday?: boolean;
    includeTemporalFlags?: boolean;
    includeWeekends?: boolean;
    includeWeekNumbers?: boolean;
    weekendDays?: number[];
}
/**
 * @description
 */
export declare class EuiCalendarMonthlyComponent {
    events: import("@angular/core").InputSignal<EuiCalendarEvent[]>;
    hasEmptyValue: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    /**
     * Template for rendering each day cell
     */
    dayTemplate: import("@angular/core").InputSignal<TemplateRef<any>>;
    /**
     * Template for rendering each day cell
     */
    headerTemplate: import("@angular/core").InputSignal<TemplateRef<{
        date: Date;
    }>>;
    /**
     * Display mode of the calendar ('compact' or 'truncated')
     */
    mode: import("@angular/core").InputSignal<"compact" | "truncated">;
    /**
     * Starting day of the week (0=Monday, 1=Tuesday, ..., 6=Sunday or 'monday', 'tue', 'wed', etc.)
     */
    startingDay: import("@angular/core").InputSignalWithTransform<number, NumberInput>;
    /**
     * The reference date for the month. The component will display the month that contains this date.
     */
    date: import("@angular/core").InputSignal<Date>;
    /**
     * Fill with previous month days
     */
    fillPreviousMonth: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    /**
     * Fill with next month days
     */
    fillNextMonth: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    /**
     * Disable selection of future dates
     */
    disableFutureDates: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    /**
     * Disable selection of past dates
     */
    disablePastDates: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    /**
     * Disable selection of weekend dates
     */
    disableWeekends: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    /**
     * Disable days that are not in the current selected month
     */
    disabledDaysNotInMonth: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
    newEventAddClicked: import("@angular/core").OutputEmitterRef<EuiCalendarDayCell>;
    monthlyCalendar: Signal<EuiCalendarDayCell[][]>;
    private locale;
    daysHeaderArray: Signal<{
        short: string;
        date: Date;
    }[]>;
    /**
     * Map day names to enum values for flexible input
     * @type {Object.<string, number>}
     */
    private DayNameMap;
    onMouseEnterDay(day: any): void;
    onMouseLeaveDay(day: any): void;
    addNewItemClicked(day: EuiCalendarDayCell): void;
    /**
     * Calculates the number of days in a given month
     * @param {number} month - Month (1-12)
     * @param {number} year - Year (optional, defaults to current year)
     * @returns {number} Number of days in the month
     */
    getDaysInMonth(month: number, year?: number): number;
    /**
     * Calculates the day of week for the first day of a month
     * @param {number} month - Month (1-12)
     * @param {number} year - Year (optional, defaults to current year)
     * @returns {number} Day of week (0=Sunday, 1=Monday, ..., 6=Saturday)
     */
    getFirstDayOfMonth(month: number, year?: number): number;
    /**
     * Calculates the ISO week number for a given date
     * @param {Date} date - Date object
     * @returns {number} ISO week number (1-53)
     */
    getISOWeekNumber(date: Date): number;
    /**
     * Compares two dates at day precision
     * @param {Date} date1 - First date
     * @param {Date} date2 - Second date
     * @returns {number} -1 if date1 < date2, 0 if equal, 1 if date1 > date2
     */
    compareDatesAtDayPrecision(date1: Date, date2: Date): 0 | 1 | -1;
    /**
     * Creates an enhanced day cell object with comprehensive metadata
     * @param {number} day - Day of the month
     * @param {number} month - Month (1-12)
     * @param {number} year - Year
     * @param {boolean} isCurrentMonth - Whether this day belongs to the displayed month
     * @param {Object} options - Configuration options
     * @returns {DayCell} Enhanced day cell object
     */
    createEnhancedDayCell(day: number, month: number, year: number, isCurrentMonth: boolean, options?: object): EuiCalendarDayCell;
    /**
     * Generates a calendar grid for a given month
     * @param {number} month - Month (1-12)
     * @param {string|number} startingDay - First day of the week (configurable)
     * @param {Object} options - Additional options
     * @param {number} options.year - Year (defaults to current year)
     * @param {*} options.emptyValue - Value for empty cells (defaults to null)
     * @param {boolean} options.fillPreviousMonth - Fill with previous month days
     * @param {boolean} options.fillNextMonth - Fill with next month days
     * @returns {Array<Array>} 6x7 grid representing the calendar month
     */
    generateCalendarGrid(month: number, startingDay: number, options?: EuiCalendarMonthlyCalendarOptions): EuiCalendarDayCell[][];
    trackByDay(index: number, day: EuiCalendarDayCell): string | number;
    /**
     * Transforms and validates the month input
     * @param value
     * @private
     */
    private monthTransformer;
    /**
     * Transforms and validates the year input
     * @param value
     * @throws {Error} If the starting day is invalid
     */
    private yearTransformer;
    /**
     * Normalizes the starting day input to a DayOfWeek enum value
     * @param {string|number} startingDay - Day name, abbreviation, or number
     * @returns {number} Normalized day index (0-6)
     * @throws {Error} If the starting day is invalid
     */
    private startingDayTransformer;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiCalendarMonthlyComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiCalendarMonthlyComponent, "eui-calendar-monthly", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; "hasEmptyValue": { "alias": "hasEmptyValue"; "required": false; "isSignal": true; }; "dayTemplate": { "alias": "dayTemplate"; "required": false; "isSignal": true; }; "headerTemplate": { "alias": "headerTemplate"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "startingDay": { "alias": "startingDay"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "fillPreviousMonth": { "alias": "fillPreviousMonth"; "required": false; "isSignal": true; }; "fillNextMonth": { "alias": "fillNextMonth"; "required": false; "isSignal": true; }; "disableFutureDates": { "alias": "disableFutureDates"; "required": false; "isSignal": true; }; "disablePastDates": { "alias": "disablePastDates"; "required": false; "isSignal": true; }; "disableWeekends": { "alias": "disableWeekends"; "required": false; "isSignal": true; }; "disabledDaysNotInMonth": { "alias": "disabledDaysNotInMonth"; "required": false; "isSignal": true; }; }, { "newEventAddClicked": "newEventAddClicked"; }, never, never, true, never>;
}
//# sourceMappingURL=eui-calendar-monthly.component.d.ts.map