import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { DateRangeSource } from 'v-calendar/dist/types/src/utils/date/range.d.ts';
import { DateRangeSource as DateRangeSource_2 } from 'v-calendar/dist/types/src/utils/date/range.js';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { PopoverOptions } from 'v-calendar/dist/types/src/utils/popovers.d.ts';
import { PropType } from 'vue';
import { PublicProps } from 'vue';

declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;

declare type __VLS_Prettify<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_WithDefaults<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithTemplateSlots<T, S> = T & {
    new (): {
        $slots: S;
    };
};

export declare interface DatePickerPopoverOptions extends Partial<PopoverOptions> {
    positionFixed?: boolean;
}

export declare interface DatePickerProps {
    /**
     * Dates or date range objects that are available for selection or navigation.
     * All other dates are disabled.
     * @see <This property is available via the source code (https://github.com/nathanreyes/v-calendar/blob/05ae3d812f8473c9fe0f56a36791c8e61200c0ef/src/components/DatePicker.vue#L92) but is
     * missing in documentation>
     */
    availableDates?: DateRangeSource[];
    /**
     * Whether the input is disabled
     */
    disabled?: boolean;
    /**
     * Dates that are disabled from user selection or navigation.
     * @see: https://vcalendar.io/api/v2.0/calendar.html#disabled-dates
     */
    disabledDates?: DateRangeSource[];
    /**
     * Adds default modifiers to make the calendar popover teleport; useful in preventing the calendar
     * popover from getting hidden behind its containing element.
     * Although we are not using vue teleport, this name is to future-proof the prop name for when the vCalendar is updated to use teleport internally.
     */
    enableTeleport?: boolean;
    /**
     * Error text to display. Replaces `hintText` (if provided) & adds error styling.
     */
    errorText?: string;
    /**
     * Date Format required for date-fns-tz formatInTimeZone()
     * @see https://www.npmjs.com/package/date-fns-tz
     */
    format?: string;
    /**
     * If true, show clear button
     */
    hideClearButton?: boolean;
    /**
     * Hint text to display below the input
     */
    hintText?: string;
    id?: string;
    /**
     * Disables text input. Only the calendar popover can update the date value.
     */
    isInputReadonly?: boolean;
    /**
     * Label to render for the datepicker
     */
    label?: string;
    /**
     * Prevents access to portion of the calendar AFTER the specified MAX date.
     * Disables click events for all other dates outside of the min-max ranges.
     * @see https://vcalendar.io/calendar/api.html#props
     */
    maxDate?: Date;
    /**
     * Prevents access to portion of the calendar before the specified MIN date.
     * Disables click events for all other dates outside of the min-max ranges.
     * @see https://vcalendar.io/calendar/api.html#props
     */
    minDate?: Date;
    /**
     * Latest page (month, year) that the user can navigate to.
     * @see https://vcalendar.io/calendar/api.html#props
     */
    maxPage?: {
        month: number;
        year: number;
    };
    /**
     * Earliest page (month, year) that the user can navigate to.
     * @see https://vcalendar.io/calendar/api.html#props
     */
    minPage?: {
        month: number;
        year: number;
    };
    /**
     * Mode (date, time, datetime)
     * @see https://vcalendar.io/calendar/api.html#props
     * @todo dateTime and time are in beta and should be used with caution.
     */
    mode?: 'date' | 'dateTime' | 'time';
    /**
     * Initial value to pass to the datepicker
     */
    modelValue?: string;
    /**
     * `name` property for datepicker's input
     */
    name?: string;
    /**
     * `placeholder' property for datepicker input
     */
    placeholder?: string;
    /**
     * Popover configuration; v-calendar uses Popover internally.
     * @see https://v2--vcalendar.netlify.app/api/v2.0/datepicker.html#popover
     */
    popoverOptions?: DatePickerPopoverOptions;
    /**
     * `timezone` TZ DB time zone property
     * @see https://vcalendar.io/i18n/timezones.html
     */
    timeZone?: string;
    /**
     * Passed to the addBottomSpace prop in the Field component; it adds spacing under the field that is consistent whether or not hint/error text is displayed.
     */
    addBottomSpace?: boolean;
}

declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<DatePickerProps>, {
availableDates: undefined;
addBottomSpace: boolean;
disabled: boolean;
disabledDates: undefined;
errorText: string;
format: string;
hideClearButton: boolean;
hintText: string;
id: string;
isInputReadonly: boolean;
label: string;
maxDate: undefined;
maxPage: undefined;
minDate: undefined;
minPage: undefined;
mode: string;
modelValue: string;
name: string;
placeholder: undefined;
enableTeleport: boolean;
timeZone: string;
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:model-value": (date: string | number | Date) => void;
blur: () => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<DatePickerProps>, {
availableDates: undefined;
addBottomSpace: boolean;
disabled: boolean;
disabledDates: undefined;
errorText: string;
format: string;
hideClearButton: boolean;
hintText: string;
id: string;
isInputReadonly: boolean;
label: string;
maxDate: undefined;
maxPage: undefined;
minDate: undefined;
minPage: undefined;
mode: string;
modelValue: string;
name: string;
placeholder: undefined;
enableTeleport: boolean;
timeZone: string;
}>>> & Readonly<{
onBlur?: (() => any) | undefined;
"onUpdate:model-value"?: ((date: string | number | Date) => any) | undefined;
}>, {
name: string;
disabled: boolean;
mode: "time" | "date" | "dateTime";
label: string;
placeholder: string;
id: string;
addBottomSpace: boolean;
errorText: string;
hintText: string;
modelValue: string;
enableTeleport: boolean;
format: string;
timeZone: string;
availableDates: DateRangeSource_2[];
disabledDates: DateRangeSource_2[];
hideClearButton: boolean;
isInputReadonly: boolean;
maxDate: Date;
minDate: Date;
maxPage: {
month: number;
year: number;
};
minPage: {
month: number;
year: number;
};
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
    hint?(_: {}): any;
}>;
export default _default;

export { }
