import { ControllerAdapter } from "@uplink-protocol/core";
import { ControllerMetadata } from "@uplink-protocol/core/dist/uplink/interfaces/metadata/controller-metadata.interface";
import { CalendarDate, CalendarMonth, CalendarYear, CalendarOptions, DateRange, YearRange } from "./interfaces";
import { TypedCalendarController, CalendarControllerBindings, CalendarControllerMethods, CalendarControllerEvents } from "./types";
/**
 * CalendarControllerClass - A full featured date picker controller class.
 * Provides functionality for date picking and calendar display.
 *
 * This controller uses a service-oriented architecture where all the core
 * functionality is delegated to specialized services.
 */
export interface CalendarControllerInterface extends TypedCalendarController {
    _currentDate: Date;
    _selectedDate: Date | null;
    _selectedDateRange: DateRange;
    _focusedDate: Date | null;
    _minDate: Date | null;
    _maxDate: Date | null;
    _disabledDates: Date[];
    _disabledDaysOfWeek: number[];
    _firstDayOfWeek: number;
    _dateFormat: string | null;
    _isRangeSelection: boolean;
    _hideOtherMonthDays: boolean;
    _locale: string;
    _dateFormatOptions: Intl.DateTimeFormatOptions | null;
    _yearRangeSize: number;
    _currentYearRangeBase: number;
    nextMonth?: () => void;
    prevMonth?: () => void;
    previousMonth?: () => void;
    nextYear?: () => void;
    prevYear?: () => void;
}
export declare class CalendarControllerClass implements CalendarControllerInterface {
    bindings: CalendarControllerBindings;
    methods: CalendarControllerMethods;
    events: CalendarControllerEvents;
    meta?: ControllerMetadata;
    __adapter?: ControllerAdapter;
    options?: CalendarOptions;
    nextMonth?: () => void;
    prevMonth?: () => void;
    previousMonth?: () => void;
    nextYear?: () => void;
    prevYear?: () => void;
    _currentDate: Date;
    _selectedDate: Date | null;
    _selectedDateRange: DateRange;
    _focusedDate: Date | null;
    _minDate: Date | null;
    _maxDate: Date | null;
    _disabledDates: Date[];
    _disabledDaysOfWeek: number[];
    _firstDayOfWeek: number;
    _dateFormat: string | null;
    _isRangeSelection: boolean;
    _hideOtherMonthDays: boolean;
    _locale: string;
    _dateFormatOptions: Intl.DateTimeFormatOptions | null;
    _yearRangeSize: number;
    _currentYearRangeBase: number;
    private _calendarService;
    private _localizationService;
    private _dateFormattingService;
    private _dateSelectionService;
    private _viewStateService;
    private _eventManagerService;
    private _navigationService;
    private _constraintsService;
    private _calendarGeneratorService;
    private _configurationService;
    private _accessibilityService;
    private _accessibilityManagerService;
    private _calendarStateService;
    /**
     * Constructor - initializes the controller with optional configuration
     * @param options Calendar configuration options
     */
    constructor(options?: CalendarOptions);
    /**
     * Generate calendar days for current month view using CalendarGeneratorService
     * @returns Array of CalendarDate objects
     */
    generateCalendarDays(): CalendarDate[];
    /**
     * Generate calendar months for year view
     * @returns Array of CalendarMonth objects
     */
    generateCalendarMonths(): CalendarMonth[];
    /**
     * Generate calendar years for year range view
     * @returns Array of CalendarYear objects
     */
    generateCalendarYears(): CalendarYear[];
    /**
     * Check if a date is disabled by constraints or disabled dates array
     * @param date Date to check
     * @returns true if date is disabled
     */
    private isDateDisabled;
    /**
     * Select a date
     * @param yearOrDate Year value or Date object
     * @param month Month value (0-based) - optional when yearOrDate is a Date
     * @param day Day value - optional when yearOrDate is a Date
     */
    selectDate(yearOrDate: number | Date, month?: number, day?: number): void;
    /**
     * Navigate to a specific month
     * @param month Month (0-based)
     * @param year Year
     */
    goToMonth(month: number, year: number): void;
    /**
     * Navigate to a specific year
     * @param year Year
     */
    goToYear(year: number): void;
    /**
     * Navigate to a specific date
     * @param date Target date
     */
    goToDate(date: Date): void;
    /**
     * Navigate to next month
     */
    goToNextMonth(): void;
    /**
     * Navigate to previous month
     */
    goToPreviousMonth(): void;
    /**
     * Navigate to next year
     */
    goToNextYear(): void;
    /**
     * Navigate to previous year
     */
    goToPreviousYear(): void;
    /**
     * Navigate to today's date
     */
    goToToday(): void;
    /**
     * Navigate to next year range
     */
    goToNextYearRange(): void;
    /**
     * Navigate to previous year range
     */
    goToPreviousYearRange(): void;
    /**
     * Update current date and related bindings
     * @param date New current date
     */ private updateCurrentDate;
    /**
     * Update view-related bindings
     */
    private updateViewBindings;
    /**
     * Set range selection mode
     * @param isRange Whether range selection is enabled
     */
    setRangeSelectionMode(isRange: boolean): void;
    /**
     * Clear current selection
     */
    clearSelection(): void;
    /**
     * Get formatted date string
     * @returns Formatted date string or null
     */
    getFormattedDate(): string | null;
    /**
     * Set minimum selectable date
     * @param date Minimum date or null
     */
    setMinDate(date: Date | null): void;
    /**
     * Set maximum selectable date
     * @param date Maximum date or null
     */
    setMaxDate(date: Date | null): void;
    /**
     * Set disabled dates
     * @param dates Array of disabled dates
     */
    setDisabledDates(dates: Date[]): void;
    /**
     * Add a disabled date
     * @param date Date to disable
     * @returns Updated disabled dates array
     */
    addDisabledDate(date: Date): Date[];
    /**
     * Remove a disabled date
     * @param date Date to enable
     * @returns Updated disabled dates array
     */
    removeDisabledDate(date: Date): Date[];
    /**
     * Get disabled dates
     * @returns Array of disabled dates
     */
    getDisabledDates(): Date[];
    /**
     * Set disabled days of the week
     * @param days Array of disabled days (0 = Sunday, 1 = Monday, etc.)
     * @returns Array of disabled days
     */
    setDisabledDaysOfWeek(days: number[]): number[];
    /**
     * Add a disabled day of the week
     * @param day Day of the week to disable (0 = Sunday, 1 = Monday, etc.)
     * @returns Updated disabled days array
     */
    addDisabledDayOfWeek(day: number): number[];
    /**
     * Remove a disabled day of the week
     * @param day Day of the week to enable (0 = Sunday, 1 = Monday, etc.)
     * @returns Updated disabled days array
     */
    removeDisabledDayOfWeek(day: number): number[];
    /**
     * Get disabled days of the week
     * @returns Array of disabled days (0 = Sunday, 1 = Monday, etc.)
     */
    getDisabledDaysOfWeek(): number[];
    /**
     * Set locale
     * @param locale Locale string
     */
    setLocale(locale: string): void;
    /**
     * Get current locale
     * @returns Current locale string
     */
    getLocale(): string;
    /**
     * Set date format options
     * @param options Intl.DateTimeFormatOptions
     */
    setDateFormatOptions(options: Intl.DateTimeFormatOptions): void;
    /**
     * Get date format options
     * @returns Current date format options
     */
    getDateFormatOptions(): Intl.DateTimeFormatOptions | null;
    /**
     * Set focused date
     * @param date Date to focus or null
     */
    setFocusedDate(date: Date | null): void;
    /**
     * Clear focused date
     */
    clearFocusedDate(): void;
    /**
     * Format a date with given options
     * @param date Date to format
     * @param options Format options or format string
     * @returns Formatted date string
     */ formatDate(date: Date, options?: Intl.DateTimeFormatOptions | string): string;
    /**
     * Get month names in current locale
     * @returns Array of month names
     */
    getMonthNames(): string[];
    /**
     * Get weekday names in current locale
     * @param short Whether to use short names
     * @returns Array of weekday names
     */
    getWeekdayNames(short?: boolean): string[];
    /**
     * Get current year range
     * @returns Year range object
     */
    getCurrentYearRange(): YearRange;
    /**
     * Set current year range based on date
     * @param date Date to base range on
     */
    setCurrentYearRange(date: Date): void;
    /**
     * Get year range base for a given date
     * @param date Input date
     * @returns Year range
     */
    private getYearRangeBase;
    /**
     * Set year range size
     * @param size Number of years to display
     */
    setYearRangeSize(size: number): void;
    /**
     * Select month (navigate to month view)
     * @param month Month number (0-based)
     * @param year Year number
     */
    selectMonth(month: number, year: number): void;
    /**
     * Select year (navigate to year view)
     * @param year Year number
     */
    selectYear(year: number): void;
    /**
     * Focus a specific date
     * @param date Date to focus
     */
    focusDate(date: Date): void;
    /**
     * Move focus right (next day)
     */
    moveFocusRight(): void;
    /**
     * Move focus left (previous day)
     */
    moveFocusLeft(): void;
    /**
     * Move focus up (previous week)
     */
    moveFocusUp(): void;
    /**
     * Move focus down (next week)
     */
    moveFocusDown(): void;
    /**
     * Move focus to start of month
     */
    moveFocusToStartOfMonth(): void;
    /**
     * Move focus to end of month
     */
    moveFocusToEndOfMonth(): void;
    /**
     * Move focus to previous month
     */
    moveFocusToPreviousMonth(): void;
    /**
     * Move focus to next month
     */
    moveFocusToNextMonth(): void;
    /**
     * Move focus to previous year
     */
    moveFocusToPreviousYear(): void;
    /**
     * Move focus to next year
     */
    moveFocusToNextYear(): void;
    /**
     * Select the currently focused date
     */
    selectFocusedDate(): void;
    /**
     * Get accessible label for a date
     * @param date Date to get label for
     * @returns Accessible label string
     */
    getAccessibleDateLabel(date: Date): string;
    /**
     * Check if date is today
     * @param date Date to check
     * @returns true if date is today
     */
    isToday(date: Date): boolean;
    /**
     * Get date state description for accessibility
     * @param date Date to describe
     * @returns State description string
     */
    getDateStateDescription(date: Date): string;
    /**
     * Generate month view data
     * @returns Month view object
     */
    generateMonthView(): {
        month: number;
        year: number;
        weeks: {
            days: CalendarDate[];
            weekNumber?: number;
        }[];
        weekdays: string[];
    };
    /**
     * Get week number for a date
     * @param date Date to get week number for
     * @returns Week number
     */
    getWeekNumber(date: Date): number;
    /**
     * Get selected date range with flexible property access
     */
    get selectedDateRange(): {
        start: Date | null;
        end: Date | null;
        startDate: Date | null;
        endDate: Date | null;
    };
    /**
     * Set selected date range with flexible property access
     */
    set selectedDateRange(value: {
        start?: Date | null;
        end?: Date | null;
        startDate?: Date | null;
        endDate?: Date | null;
    });
    /**
     * Update all bindings with optional selective updates
     * @param updates Object specifying which bindings to update
     */
    private updateAllBindings; /**
     * Execute batched binding updates for performance
     * @param updates Array of update functions
     */
    private executeBatchedBindingUpdates;
}
/**
 * CalendarController - Factory function that creates and returns a new CalendarControllerClass instance.
 *
 * @param options Optional calendar configuration options
 * @returns A CalendarControllerClass instance
 */
export declare const CalendarController: (options?: CalendarOptions) => CalendarControllerClass;
