interface Options {
    // Render type: [ default | year-month-picker ]. Default: default
    type?: 'default' | 'year-month-picker';
    // Range restriction [dateStart, dateEnd]
    validRange?: [string|null, string|null];
    // Starting weekday - 0 for sunday, 6 for saturday
    startingDay?: number,
    // Date format. Default 'DD/MM/YYYY'
    format?: string,
    // Allow keyboard date entry
    readonly?: boolean,
    // Today is default
    today?: boolean,
    // Show timepicker
    time?: boolean,
    // Show the reset button
    resetButton?: boolean,
    // Placeholder
    placeholder?: string,
    // Translations can be done here
    months?: string[],
    monthsFull?: string[],
    weekdays?: string[],
    textDone?: string[],
    textReset?: string[],
    textUpdate?: string[],
    // Start with the value
    value?: string,
    // Fullscreen (this is automatic set for screen size < 800)
    fullscreen: boolean,
    // Create the calendar closed as default
    opened: boolean,
    // Events
    onopen: () => void,
    onclose: () => void,
    onchange: () => void,
    onupdate: () => void,
    // Internal mode controller
    mode: null,
    position: null,
    // Data type
    dataType: null,
    // Controls
    controls: boolean,
    /** Auto select confirms the current date as the new value onblur. Default: true */
    autoSelect: boolean;
}

/** Toast Plugin */
export type Calendar = (el: HTMLElement, options: Options) => {
    /** Close the calendar picker */
    close: () => void;
    /** Internal date value */
    date: number[];
    /** Convert a formatted string to a valid raw date */
    fromFormatted: string;
    /** Show the calendar in day picker mode */
    getDays: () => void;
    /** Show the calendar in month picker mode */
    getMonths: () => void;
    /** Show the calendar in year picker mode */
    getYears: () => void;
    /** Get the current date. Get the internal value or the real component value */
    getValue: (internal?: boolean) => string;
    /** Advance to the next month, year or group of years depending on the current view mode */
    next: () => void;
    /** Previous month, year or group of years depending on the current view mode */
    prev: () => void;
    /** Open the calendar picker */
    open: () => void;
    /** Initial settings */
    options: Options;
    /** Reset date */
    reset: () => void;
    /** Change the configurations */
    setOptions: () => void;
    /** Change the date for today */
    setToday: () => void;
    /** Change the value for a given date */
    setValue: (newDate: string) => void;
    /** Type calendar */
    type: 'calendar';
    /** Alias for setValue */
    update: () => void;
    /** Auto select confirms the current date as the new value onblur. Default: true */
    autoSelect: boolean;
}
