/**
 * Official Type definitions for LemonadeJS plugins
 * https://lemonadejs.net
 * Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
 */

declare function Calendar(el: HTMLElement, options?: Calendar.Options): Calendar.Instance;

declare namespace Calendar {
    interface Options {
        /** Calendar type */
        type?: 'default' | 'inline';
        /** Date format */
        format?: string;
        /** Range picker */
        range?: boolean;
        /** Value */
        value?: number | string;
        /** Calendar value will be a excel-like number or a ISO string. Default false */
        numeric?: boolean;
        /** Bind the calendar to na HTML input element */
        input?: HTMLElement | object | 'auto';
        /** Footer. Default: true **/
        footer?: boolean;
        /** Show hour and minute picker **/
        time?: boolean;
        /** Show grid mode. Default: false */
        grid?: boolean;
        /** Update view on mouse wheel. Default: true */
        wheel?: boolean;
        /** LemonadeJS on change event */
        onchange?: (self: object, value: string) => void;
        /** LemonadeJS on update event */
        onupdate?: (self: object, value: string) => void;
        /** React dedicated onChange event */
        onChange?: (e: Event) => void;
    }

    interface Instance {
        /** Calendar type */
        type?: 'default' | 'inline';
        /** Range picker */
        range?: boolean;
        /** Value */
        value?: number | string;
        /** Calendar value will be a excel-like number or a ISO string. Default false */
        numeric?: boolean;
        /** Bind the calendar to na HTML input element */
        input?: HTMLElement;
    }
}

export default Calendar;
