import { DateTime } from "./datetime";
export interface SelectedDate {
    date?: Date;
    start?: Date;
    end?: Date;
}
interface IPickerElements {
    container: HTMLElement;
    shadowRoot: ShadowRoot;
    wrapper: HTMLElement;
}
export interface IPickerConfig {
    element: HTMLElement | string;
    doc?: Document | ShadowRoot;
    css?: string | string[] | ((picker: EasePicker) => void);
    firstDay?: number;
    lang?: string;
    date?: Date | string | number;
    format?: string;
    grid?: number;
    calendars?: number;
    readonly?: boolean;
    autoApply?: boolean;
    shadowDom?: boolean;
    ranged?: boolean;
    locked?: boolean;
    header?: boolean | string | HTMLElement;
    locale?: {
        previousMonth?: string;
        nextMonth?: string;
        cancel?: string;
        apply?: string;
        zero?: string;
        one?: string;
        two?: string;
        few?: string;
        many?: string;
        other?: string;
    };
    plugins?: any[];
    documentClick?: boolean | (() => void);
    zIndex?: number;
    inline?: boolean;
    scrollToDate?: boolean;
    setup?(picker: EasePicker): void;
    elementEnd?: HTMLElement | string;
    startDate?: DateTime;
    endDate?: DateTime;
    repick?: boolean;
    strict?: boolean;
    delimiter?: string;
    tooltip?: boolean;
    tooltipNumber?: (num: number) => number;
    minDate?: Date | string | number;
    maxDate?: Date | string | number;
    minDays?: number;
    maxDays?: number;
    selectForward?: boolean;
    selectBackward?: boolean;
    presets?: boolean;
    inseparable?: boolean;
    filter?: (date: DateTime | DateTime[], picked: DateTime[]) => boolean;
}
export declare class EasePicker {
    tooltipElement: HTMLElement;
    triggerElement: HTMLElement;
    Calendar: Calendar;
    calendars: DateTime[];
    datePicked: DateTime[];
    cssLoaded: number;
    binds: {
        hidePicker: any;
        show: any;
        setStartDate: any;
        setEndDate: any;
        setDateRange: any;
        getStartDate: any;
        getEndDate: any;
        onViewRanged: any;
        onViewLocked: any;
        onShow: any;
        onMouseEnter: any;
        onMouseLeave: any;
        onClickCalendarDay: any;
        onClickApplyButton: any;
        parseValues: any;
        updateValues: any;
        clear: any;
    };
    options: IPickerConfig;
    ui: IPickerElements;
    constructor(options: IPickerConfig);
    /**
     * Attach Ranged capabilities
     */
    private attachRanged;
    /**
     * Attach Locked capabilities
     */
    private attachLocked;
    /**
     * Add listener to container element
     *
     * @param type
     * @param listener
     * @param options
     */
    on(type: string, listener: (event: any) => void, options?: unknown): void;
    /**
     * Remove listener from container element
     *
     * @param type
     * @param listener
     * @param options
     */
    off(type: string, listener: (event: any) => void, options?: unknown): void;
    /**
     * Dispatch an event
     *
     * @param type
     * @param detail
     * @returns
     */
    trigger(type: string, detail?: unknown): boolean;
    /**
     * Destroy picker
     */
    destroy(): void;
    /**
     * Fired on render event
     *
     * @param event
     */
    onRender(event: CustomEvent): void;
    onView(event: CustomEvent): void;
    /**
     *
     * @param element
     */
    onClickHeaderButton(element: HTMLElement): void;
    /**
     *
     * @param element
     */
    onClickCalendarDay(element: HTMLElement): void;
    /**
     *
     * @param element
     */
    onClickApplyButton(element: HTMLElement): void;
    /**
     *
     * @param element
     * @returns
     */
    onClickCancelButton(element: HTMLElement): void;
    /**
     * Fired on click event
     *
     * @param event
     */
    onClick(event: any): void;
    /**
     * Determine if the picker is visible or not
     *
     * @returns Boolean
     */
    isShown(): boolean;
    /**
     * Show the picker
     *
     * @param event
     */
    show(event?: any): void;
    /**
     * Hide the picker
     */
    hide(): void;
    /**
     * Set date programmatically
     *
     * @param date
     */
    setDate(date: Date | string | number): void;
    /**
     *
     * @returns DateTime
     */
    getDate(): DateTime;
    /**
     * Parse `date` option or value of input element
     */
    parseValues(): void;
    /**
     * Update value of input element
     */
    updateValues(): void;
    /**
     * Function for documentClick option
     * Allows the picker to close when the user clicks outside
     *
     * @param e
     */
    hidePicker(e: any): void;
    /**
     * Render entire picker layout
     *
     * @param date
     */
    renderAll(date?: DateTime): void;
    /**
     * Determines if the element is buttons of header (previous month, next month)
     *
     * @param element
     * @returns Boolean
     */
    isCalendarHeaderButton(element: HTMLElement): boolean;
    /**
     * Determines if the element is day element
     *
     * @param element
     * @returns Boolean
     */
    isCalendarDay(element: HTMLElement): boolean;
    /**
     * Determines if the element is the apply button
     *
     * @param element
     * @returns Boolean
     */
    isApplyButton(element: HTMLElement): boolean;
    /**
     * Determines if the element is the cancel button
     *
     * @param element
     * @returns Boolean
     */
    isCancelButton(element: HTMLElement): boolean;
    /**
     * Change visible month
     *
     * @param date
     */
    gotoDate(date: Date | string | number): void;
    /**
     * Clear date selection
     */
    clear(): void;
    /**
     * Handling parameters passed by the user
     */
    private handleOptions;
    /**
     * Apply CSS passed by the user
     */
    private handleCSS;
    /**
     * Calculate the position of the picker
     *
     * @param element
     * @returns { top, left }
     */
    private adjustPosition;
    /**
   * Parse `startDate`, `endDate` options or value of input elements
   */
    private parseValuesRanged;
    /**
     * Update value of input element
     */
    private updateValuesRanged;
    /**
     * Clear selection
     */
    private clearRanged;
    /**
     * Function `show` event
     *
     * @param event
     */
    private onShow;
    /**
     * Function `view` event
     * Adds HTML layout of current plugin to the picker layout
     *
     * @param event
     */
    private onViewRanged;
    /**
     * Function for documentClick option
     * Allows the picker to close when the user clicks outside
     *
     * @param e
     */
    private hidePickerRanged;
    /**
     * Set startDate programmatically
     *
     * @param date
     */
    setStartDate(date: Date | string | number): void;
    /**
     * Set endDate programmatically
     *
     * @param date
     */
    setEndDate(date: Date | string | number): void;
    /**
     * Set date range programmatically
     *
     * @param start
     * @param end
     */
    setDateRange(start: Date | string | number, end: Date | string | number): void;
    /**
     *
     * @returns DateTime
     */
    getStartDate(): DateTime;
    /**
     *
     * @returns
     */
    getEndDate(): DateTime;
    /**
     * Handle `mouseenter` event
     *
     * @param event
     */
    private onMouseEnter;
    /**
     * Handle `mouseleave` event
     *
     * @param event
     */
    private onMouseLeave;
    private onClickCalendarDayRanged;
    private onClickApplyButtonRanged;
    /**
     * Displays tooltip of selected days
     *
     * @param element
     * @param text
     */
    private showTooltip;
    /**
     * Hide tooltip
     */
    private hideTooltip;
    /**
     * Determines if the locale option contains all required plurals
     */
    private checkIntlPluralLocales;
    /**
     * Handle `repick` option
     */
    private initializeRepick;
    /**
     * Determines if the element is the picker container
     *
     * @param element
     * @returns Boolean
     */
    private isContainer;
    /**
     * Function `view` event
     * Mark day elements as locked
     *
     * @param event
     */
    private onViewLocked;
    /**
     * Checks availability date
     *
     * @param date
     * @param start
     * @returns Boolean
     */
    private dateIsNotAvailable;
    /**
     * Checks the date range for availability
     *
     * @param date1
     * @param date2
     * @returns Boolean
     */
    private rangeIsNotAvailable;
    /**
     * Handle `minDate` option
     *
     * @param date
     * @returns Boolean
     */
    private lockMinDate;
    /**
     * Handle `maxDate` option
     *
     * @param date
     * @returns Boolean
     */
    private lockMaxDate;
    /**
     * Handle `minDays` option
     *
     * @param date
     * @returns Boolean
     */
    private lockMinDays;
    /**
     * Handle `maxDays` option
     *
     * @param date
     * @returns Boolean
     */
    private lockMaxDays;
    /**
     * Handle `selectForward` option
     *
     * @param date
     * @returns Boolean
     */
    private lockSelectForward;
    /**
     * Handle `selectBackward` option
     *
     * @param date
     * @returns Boolean
     */
    private lockSelectBackward;
    /**
     * Handle `filter` option
     *
     * @param date
     * @returns Boolean
     */
    private testFilter;
}
declare class Calendar {
    picker: EasePicker;
    constructor(picker: EasePicker);
    /**
     * Render transferred date and view
     *
     * @param date
     * @param view
     */
    render(date: DateTime, view: string): void;
    /**
     * Function for `Container` view
     *
     * @param date
     */
    getContainerView(date: DateTime): void;
    /**
     * Function for `Header` view
     *
     * @param date
     */
    getHeaderView(date: DateTime): void;
    /**
     * Function for `Main` view
     *
     * @param date
     */
    getMainView(date: DateTime): void;
    /**
     * Function for `Footer` view
     *
     * @param date
     */
    getFooterView(date: DateTime): void;
    /**
     * Function for `CalendarHeader` view
     *
     * @param date
     * @returns HTMLElement
     */
    getCalendarHeaderView(date: DateTime): HTMLElement;
    /**
     * Function for `CalendarDayNames` view
     *
     * @param date
     * @returns HTMLElement
     */
    getCalendarDayNamesView(): HTMLElement;
    /**
     * Function for `CalendarDays` view
     *
     * @param date
     * @returns HTMLElement
     */
    getCalendarDaysView(date: DateTime): HTMLElement;
    /**
     * Function for `CalendarDay` view
     *
     * @param date
     * @returns HTMLElement
     */
    getCalendarDayView(date: DateTime): HTMLElement;
    /**
     * Function for `CalendarFooter` view
     *
     * @param lang
     * @param date
     * @returns HTMLElement
     */
    getCalendarFooterView(lang: string, date: DateTime): HTMLElement;
    /**
     * Count the number of days of indentation
     *
     * @param date
     * @param firstDay
     * @returns Number
     */
    calcOffsetDays(date: DateTime, firstDay: number): number;
}
export {};
