/**
 * TyCalendar Web Component
 * PORTED FROM: cljs/ty/components/calendar.cljs
 *
 * A complete calendar orchestration component that combines navigation and month display.
 * Manages selection state, form participation, and event coordination.
 *
 * Architecture:
 * - year/month/day HTML attributes for intuitive API
 * - Internal state management (private properties)
 * - Distributes properties to child components (navigation + month)
 * - Single 'change' event with complete day context
 * - Form participation via ElementInternals
 *
 * Features:
 * - Combines ty-calendar-navigation + ty-calendar-month
 * - Date selection with visual feedback
 * - Form integration (works with FormData)
 * - Custom render functions (dayContentFn)
 * - Custom CSS injection
 * - Automatic date validation
 * - Event coordination between components
 *
 * @example
 * ```html
 * <!-- Basic usage -->
 * <ty-calendar
 *   year="2025"
 *   month="10"
 *   day="15">
 * </ty-calendar>
 *
 * <!-- Form integration -->
 * <form>
 *   <ty-calendar name="booking-date"></ty-calendar>
 *   <button type="submit">Submit</button>
 * </form>
 *
 * <!-- With custom rendering -->
 * <ty-calendar id="custom"></ty-calendar>
 * <script type="module">
 *   const cal = document.getElementById('custom');
 *   cal.dayContentFn = (ctx) => {
 *     const el = document.createElement('div');
 *     el.textContent = ctx.dayInMonth;
 *     if (ctx.today) el.style.fontWeight = 'bold';
 *     return el;
 *   };
 * </script>
 * ```
 */
import type { DayContentFn, CalendarSize } from './calendar-month.js';
import type { DayContext } from '../utils/calendar-utils.js';
/**
 * Calendar change event detail (day selection)
 */
export interface CalendarChangeDetail {
    year: number;
    month: number;
    day: number;
    action: 'select';
    source: 'day-click';
    dayContext: DayContext;
}
/**
 * Calendar navigate event detail (month/year change)
 */
export interface CalendarNavigateDetail {
    month: number;
    year: number;
    action: 'navigate';
    source: 'navigation';
}
/**
 * TyCalendar Web Component
 */
export declare class TyCalendar extends HTMLElement {
    private _state;
    private _locale;
    private _showNavigation;
    private _stateless;
    private _size;
    private _width?;
    private _dayContentFn?;
    private _customCSS?;
    private _navigation?;
    private _monthDisplay?;
    private _internals?;
    private _localeObserver?;
    /**
     * Form-associated custom element
     */
    static formAssociated: boolean;
    /**
     * Observed attributes
     */
    static get observedAttributes(): string[];
    constructor();
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
    get year(): number | undefined;
    set year(value: number | undefined);
    get month(): number | undefined;
    set month(value: number | undefined);
    get day(): number | undefined;
    set day(value: number | undefined);
    get locale(): string;
    set locale(value: string);
    get showNavigation(): boolean;
    set showNavigation(value: boolean);
    get stateless(): boolean;
    set stateless(value: boolean);
    get size(): CalendarSize;
    set size(value: CalendarSize);
    get width(): string | undefined;
    set width(value: string | undefined);
    get dayContentFn(): DayContentFn | undefined;
    set dayContentFn(fn: DayContentFn | undefined);
    get customCSS(): CSSStyleSheet | undefined;
    set customCSS(sheet: CSSStyleSheet | undefined);
    get value(): string;
    set value(isoDate: string);
    /**
     * Initialize state from HTML attributes on first load
     */
    private initializeFromAttributes;
    /**
     * Sync state from changed attributes
     */
    private syncStateFromAttributes;
    /**
     * Update child components with current state
     */
    private syncChildComponents;
    /**
     * Update form value using ElementInternals
     */
    private updateFormValue;
    /**
     * Handle navigation change (month/year navigation)
     */
    private handleNavigationChange;
    /**
     * Handle day click (day selection)
     */
    private handleDayClick;
    /**
     * Force re-render of the calendar
     * Useful after updating dayContentFn or other dynamic properties
     */
    refresh(): void;
    /**
     * Create navigation element
     */
    private createNavigation;
    /**
     * Create month display element
     */
    private createMonthDisplay;
    /**
     * Main render function
     */
    private render;
}
//# sourceMappingURL=calendar.d.ts.map