import { Value, type Prop, type TNode } from '@tempots/dom';
import { ControlSize } from '../theme';
import { ThemeColorName } from '../../tokens';
import type { BeatUITemporal, PlainDate } from '../../temporal/types';
export declare const YEARS_PER_PAGE = 20;
export declare const DAYS_IN_WEEK = 7;
export declare const MONTH_NAMES: string[];
export declare const SHORT_MONTH_NAMES: string[];
export declare const DAY_NAMES: string[];
export type CalendarView = 'days' | 'months' | 'years';
export declare function generateCalendarClasses(size: ControlSize, disabled: boolean): string;
export declare function generateCalendarStyles(color: ThemeColorName): string;
/** Base cell data computed by {@link buildCalendarGrid}. */
export interface CalendarBaseCell {
    day: number;
    date: PlainDate;
    inMonth: boolean;
    isToday: boolean;
    isDisabled: boolean;
}
/** Builds the base array of day cells for a given month. */
export declare function buildCalendarGrid(T: BeatUITemporal, year: number, month: number, weekStartsOn: number, today: PlainDate, isDateDisabled?: (date: PlainDate) => boolean): CalendarBaseCell[];
/** State and actions returned by {@link createCalendarNav}. */
export interface CalendarNav {
    today: PlainDate;
    currentYear: Prop<number>;
    currentMonth: Prop<number>;
    view: Prop<CalendarView>;
    yearPageStart: Prop<number>;
    shiftedDayNames: string[];
    prevMonth: () => void;
    nextMonth: () => void;
    prevYear: () => void;
    nextYear: () => void;
    prevYearPage: () => void;
    nextYearPage: () => void;
    switchToMonthsView: () => void;
    switchToYearsView: () => void;
    selectMonth: (month: number) => void;
    selectYear: (year: number) => void;
}
/** Creates the shared navigation state for a calendar. */
export declare function createCalendarNav(T: BeatUITemporal, initialYear: number, initialMonth: number, disabled: Value<boolean>, weekStartsOn: number): CalendarNav;
export interface CalendarShellOptions {
    size: Value<ControlSize>;
    disabled: Value<boolean>;
    color: Value<ThemeColorName>;
    ariaLabel: string;
}
/**
 * Renders the full calendar shell: outer wrapper, navigation header
 * (days/months/years), weekday headers, month picker, year picker,
 * and a custom day grid.
 */
export declare function renderCalendarShell(nav: CalendarNav, opts: CalendarShellOptions, renderGrid: () => TNode): TNode;
/** Converts a `PlainDate` to a JavaScript `Date` (local midnight). */
export declare function plainDateToDate(pd: PlainDate): Date;
/** Converts a JavaScript `Date` to a `PlainDate`. */
export declare function dateToPlainDate(T: BeatUITemporal, d: Date): PlainDate;
