import { Viewport } from '../Viewport.js';
import { type Props as ViewProps, View } from '../View.js';
import { Size } from '../geometry.js';
import { type KeyEvent, type MouseEvent } from '../events/index.js';
import { type LegendItem } from '../types.js';
import { System } from '../System.js';
type DisplayMode = 'days' | 'months' | 'years';
type Selection = 'single' | 'range';
interface Props extends ViewProps {
    /** Selected date */
    date?: Date;
    /** Displayed month/year */
    visibleDate?: Date;
    /** Called when navigating months/years (day is always 1) */
    onChangeVisible?: (date: Date) => void;
    /** Called when selecting a date (date2 == date1 for single selection) */
    onChange?: (date1: Date, date2: Date) => void;
    /** Single date or range selection. Default: 'single' */
    selection?: Selection;
    /** 0=Sunday (default), 1=Monday */
    firstDayOfWeek?: 0 | 1;
    now?: Date;
}
export declare class Calendar extends View {
    #private;
    constructor(props?: Props);
    update(props: Props): void;
    get date(): Date;
    set date(value: Date);
    get cursorDate(): Date;
    set cursorDate(value: Date);
    get visibleDate(): Date;
    set visibleDate(value: Date);
    get displayMode(): DisplayMode;
    naturalSize(_available: Size): Size;
    receiveMouse(event: MouseEvent, system: System): void;
    legendItems(): LegendItem[];
    receiveKey(event: KeyEvent): void;
    render(viewport: Viewport): void;
}
export {};
