/**
 * @license
 * Copyright Tyler Technologies, Inc. 
 * License: Apache-2.0
 */
import { CalendarMode, DayOfWeek, ICalendarDateSelectEventData, CalendarDateBuilder, CalendarDayBuilder, CalendarDateSelectCallback, CalendarEventBuilder, ICalendarEvent, ICalendarFocusChangeEventData, ICalendarMonthChangeEventData, CalendarTooltipBuilder, CalendarView } from './calendar-constants';
import { DateRange } from './core/date-range';
import { ICalendarBase } from './core/calendar-base';
import { CalendarMenuAnimationType } from './calendar-menu';
import { BaseComponent, IBaseComponent } from '../core/base/base-component';
export interface ICalendarComponent extends ICalendarBase, IBaseComponent {
    mode: CalendarMode;
    view: CalendarView;
    preventFocus: boolean;
    selectionFollowsMonth: boolean;
    showHeader: boolean;
    menuAnimation: CalendarMenuAnimationType;
    clearButton: boolean;
    todayButton: boolean;
    clearCallback: (() => void) | undefined;
    todayCallback: (() => void) | undefined;
    tooltipBuilder: CalendarTooltipBuilder | undefined;
    clear(): void;
    today(): void;
    selectDate(date: Date, setFocus?: boolean): void;
    deselectDate(date: Date): void;
    toggleDate(date: Date, force?: boolean): void;
    goToDate(date: Date, setFocus?: boolean): void;
    setActiveDate(date: Date, setFocus?: boolean): boolean;
    handleKey(evt: KeyboardEvent): void;
    layout(): void;
}
declare global {
    interface HTMLElementTagNameMap {
        'forge-calendar': ICalendarComponent;
    }
    interface HTMLElementEventMap {
        'forge-calendar-date-select': CustomEvent<ICalendarDateSelectEventData>;
        'forge-calendar-focus-change': CustomEvent<ICalendarFocusChangeEventData>;
        'forge-calendar-month-change': CustomEvent<ICalendarMonthChangeEventData>;
        'forge-calendar-view-change': CustomEvent<CalendarView>;
    }
}
/**
 * @tag forge-calendar
 *
 * @property {Date} activeDate - The currently active date in the calendar.
 * @property {boolean} [allowSingleDateRange=true] - Whether to allow a single date range to be selected.
 * @property {boolean} [clearButton=false] - Whether to show a button to clear the selected date(s).
 * @property {() => void | undefined} clearCallback - Callback function to call when the clear button is clicked.
 * @property {boolean} [constrainToEnabled=true] - Whether to constrain the selected date(s) to the enabled dates.
 * @property {CalendarDateBuilder | undefined} dateBuilder - Function to build the date content.
 * @property {CalendarDateSelectCallback | undefined} dateSelectCallback - Callback function to call when a date is selected.
 * @property {CalendarDayBuilder | undefined} dayBuilder - Function to build the day content.
 * @property {(date: Date) => boolean | undefined} disabledDateBuilder - Function to determine if a date is disabled.
 * @property {Date | Date[] | null | undefined} [disabledDates=[]] - Dates that are disabled from being selected.
 * @property {DayOfWeek | DayOfWeek[] | null | undefined} [disabledDaysOfWeek=[]] - Days of the week that are disabled from being selected.
 * @property {CalendarEventBuilder | undefined} eventBuilder - Function to build the event content.
 * @property {ICalendarEvent[] | null | undefined} [events=[]] - Events to display on the calendar.
 * @property {DayOfWeek | undefined} firstDayOfWeek - The first day of the week.
 * @property {boolean} [fixedHeight=false] - Whether to fix the height of the calendar.
 * @property {boolean} [listYears=true] - Whether to list the years in the year view.
 * @property {string | undefined} locale - The locale to use for formatting dates.
 * @property {Date | string | null | undefined} max - The maximum date that can be selected.
 * @property {CalendarMenuAnimationType} [menuAnimation="scale"] - The animation to use for the menu.
 * @property {Date | string | null | undefined} min - The minimum date that can be selected.
 * @property {CalendarMode} [mode="single"] - The mode of the calendar.
 * @property {number} [month=<current month>] - The month to display.
 * @property {boolean} [preventFocus=false] - Whether to prevent the calendar from taking focus.
 * @property {boolean} [readonly=false] - Whether the calendar is readonly.
 * @property {boolean} [selectionFollowsMonth=false] - Whether the selection follows the month.
 * @property {boolean} [showHeader=true] - Whether to show the header.
 * @property {boolean} [showOtherMonths=false] - Whether to show days from other months.
 * @property {boolean} [showToday=true] - Whether to show the today button.
 * @property {boolean} [todayButton=false] - Whether to show a button to select today.
 * @property {() => void | undefined} todayCallback - Callback function to call when the today button is clicked.
 * @property {CalendarTooltipBuilder | undefined} tooltipBuilder - Function to build the tooltip content.
 * @property {Date | Date[] | DateRange | null | undefined} [value=[]] - The selected date(s).
 * @property {CalendarView} [view="date"] - The view of the calendar.
 * @property {DayOfWeek[] | null | undefined} weekendDays - The days of the week that are considered weekends.
 * @property {number} [year=<current year>] - The year to display.
 * @property {string} [yearRange="-50:+50"] - The range of years to display.
 *
 * @attribute {boolean} [allow-single-date-range=true] - Whether to allow a single date range to be selected.
 * @attribute {boolean} [clear-button=false] - Whether to show a button to clear the selected date(s).
 * @attribute {boolean} [constrain-to-enabled=true] - Whether to constrain the selected date(s) to the enabled dates.
 * @attribute {DayOfWeek} first-day-of-week - The first day of the week.
 * @attribute {boolean} [fixed-height=false] - Whether to fix the height of the calendar.
 * @attribute {boolean} [list-years=true] - Whether to list the years in the year view.
 * @attribute {string} locale - The locale to use for formatting dates.
 * @attribute {Date | string | null} max - The maximum date that can be selected.
 * @attribute {CalendarMenuAnimationType} [menu-animation="scale"] - The animation to use for the menu.
 * @attribute {Date | string | null} min - The minimum date that can be selected.
 * @attribute {CalendarMode} [mode="single"] - The mode of the calendar.
 * @attribute {number} [month=<current month>] - The month to display.
 * @attribute {boolean} [prevent-focus=false] - Whether to prevent the calendar from taking focus.
 * @attribute {boolean} [readonly=false] - Whether the calendar is readonly.
 * @attribute {boolean} [selection-follows-month=false] - Whether the selection follows the month.
 * @attribute {boolean} [show-header=true] - Whether to show the header.
 * @attribute {boolean} [show-other-months=false] - Whether to show days from other months.
 * @attribute {boolean} [show-today=true] - Whether to show the today button.
 * @attribute {boolean} [today-button=fakse] - Whether to show a button to select today.
 * @attribute {CalendarView} [view="date"] - The view of the calendar.
 * @attribute {number} [year=<current year>] - The year to display.
 * @attribute {string} [year-range="-50:+50"] - The range of years to display.
 *
 * @fires {CustomEvent<ICalendarDateSelectEventData>} forge-calendar-date-select - Event fired when a date is selected.
 * @fires {CustomEvent<ICalendarFocusChangeEventData>} forge-calendar-focus-change - Event fired when the focus changes.
 * @fires {CustomEvent<ICalendarMonthChangeEventData>} forge-calendar-month-change - Event fired when the month changes.
 * @fires {CustomEvent<CalendarView>} forge-calendar-view-change - Event fired when the view changes.
 */
export declare class CalendarComponent extends BaseComponent implements ICalendarComponent {
    static get observedAttributes(): string[];
    private _core;
    constructor();
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
    /** @readonly */
    activeDate: Date;
    allowSingleDateRange: boolean;
    clearButton: boolean;
    clearCallback: (() => void) | undefined;
    constrainToEnabled: boolean;
    dateBuilder: CalendarDateBuilder | undefined;
    dateSelectCallback: CalendarDateSelectCallback | undefined;
    dayBuilder: CalendarDayBuilder | undefined;
    disabledDateBuilder: ((date: Date) => boolean) | undefined;
    disabledDates: Date | Date[] | null | undefined;
    disabledDaysOfWeek: DayOfWeek | DayOfWeek[] | null | undefined;
    eventBuilder: CalendarEventBuilder | undefined;
    events: ICalendarEvent[] | null | undefined;
    firstDayOfWeek: DayOfWeek | undefined;
    fixedHeight: boolean;
    listYears: boolean;
    locale: string | undefined;
    max: Date | string | null | undefined;
    menuAnimation: CalendarMenuAnimationType;
    min: Date | string | null | undefined;
    mode: CalendarMode;
    month: number;
    preventFocus: boolean;
    readonly: boolean;
    selectionFollowsMonth: boolean;
    showHeader: boolean;
    showOtherMonths: boolean;
    showToday: boolean;
    todayButton: boolean;
    todayCallback: (() => void) | undefined;
    tooltipBuilder: CalendarTooltipBuilder | undefined;
    value: Date | Date[] | DateRange | null | undefined;
    view: CalendarView;
    weekendDays: DayOfWeek[] | null | undefined;
    year: number;
    yearRange: string;
    /**
     * Clears the selected date(s).
     */
    clear(): void;
    /**
     * Deselects a date.
     */
    deselectDate(date: Date): void;
    /**
     * Navigates to a specific date.
     */
    goToDate(date: Date, setFocus?: boolean): void;
    /**
     * Handles a keyboard event.
     */
    handleKey(evt: KeyboardEvent): void;
    /**
     * Lays out the calendar.
     */
    layout(): void;
    /**
     * Selects a date.
     */
    selectDate(date: Date): void;
    /**
     * Sets the active date.
     */
    setActiveDate(date: Date, setFocus?: boolean): boolean;
    /**
     * Sets the calendar to today.
     */
    today(): void;
    /**
     * Toggles a date selection.
     */
    toggleDate(date: Date, force?: boolean): void;
}
