Skip to content

Commit 6a5e533

Browse files
committed
fix: Define types for slots (fixes #819)
1 parent 0320f55 commit 6a5e533

File tree

1 file changed

+134
-11
lines changed

1 file changed

+134
-11
lines changed

index.d.ts

+134-11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type {
44
ComponentPropsOptions,
55
ComponentPublicInstance,
66
ComputedOptions,
7+
ComputedRef,
78
DefineComponent,
89
MethodOptions,
910
} from 'vue';
@@ -343,17 +344,139 @@ export interface PublicMethods extends MethodOptions {
343344
toggleMenu: () => void;
344345
}
345346

346-
declare const _default: DefineComponent<
347-
ComponentPropsOptions<VueDatePickerProps>,
348-
{},
349-
{},
350-
ComputedOptions,
351-
PublicMethods,
352-
ComponentOptionsMixin,
353-
ComponentOptionsMixin,
354-
EmitEvents[],
355-
EmitEvents,
356-
VueDatePickerProps
347+
type InternalModelValue = Date | Date[] | null;
348+
interface InternalTime {
349+
hours: number | number[];
350+
minutes: number | number[];
351+
seconds: number | number[];
352+
}
353+
354+
interface MonthYearOverlay {
355+
month: number;
356+
year: number;
357+
items: { text: string; value: number }[];
358+
updateMonthYear: (month: number, year: number) => void;
359+
instance: number;
360+
toggle: () => void;
361+
}
362+
363+
interface SidebarSlotProps {
364+
modelValue: InternalModelValue;
365+
month?: ComputedRef<(instance: number) => number>;
366+
year?: ComputedRef<(instance: number) => number>;
367+
time?: InternalTime;
368+
updateTime?: (value: number | number[], isHours?: boolean, isSeconds?: boolean) => void;
369+
updateMonthYear?: (instance: number, val: { month: number; year: number; fromNav?: boolean }) => void;
370+
selectDate?: (day: { value: Date }, isNext: boolean = false) => {};
371+
presetDate?: (value: Date[] | string[] | Date | string, noTz?: boolea) => void;
372+
getModelMonthYear?: () => { month: number | null; year: number | null }[];
373+
selectMonth?: (month: number, instance: number) => void;
374+
selectYear?: (year: number, instance: number) => void;
375+
handleYear?: (instance: number, increment?: boolean) => void;
376+
selectQuarter?: (date: Date, instance: number, disabled: boolean) => void;
377+
handleYearSelect?: (year: number, instance: number) => void;
378+
}
379+
380+
interface Slots {
381+
'clock-icon'(): any;
382+
'arrow-left'(): any;
383+
'arrow-right'(): any;
384+
'arrow-up'(): any;
385+
'arrow-down'(): any;
386+
'calendar-icon'(): any;
387+
day(props: { date: Date; day: number }): any;
388+
'month-overlay-value'(props: { text: string; value: number }): any;
389+
'year-overlay-value'(props: { text: string; value: number }): any;
390+
'year-overlay'(props: MonthYearOverlay): any;
391+
'month-overlay'(props: MonthYearOverlay): any;
392+
'month-overlay-header'(props: { toggle: () => void }): any;
393+
'year-overlay-header'(props: { toggle: () => void }): any;
394+
'hours-overlay-value'(props: { text: string; value: number }): any;
395+
'minutes-overlay-value'(props: { text: string; value: number }): any;
396+
'seconds-overlay-value'(props: { text: string; value: number }): any;
397+
hours(props: { text: string; value: number }): any;
398+
minutes(props: { text: string; value: number }): any;
399+
month(props: { text: string; value: number }): any;
400+
year(props: { year: number }): any;
401+
'action-buttons'(props: { value: InternalModelValue }): any;
402+
'action-preview'(props: { value: InternalModelValue }): any;
403+
'calendar-header'(props: { day: string; index: number }): any;
404+
'marker-tooltip'(props: { day: Date; tooltip: { text?: string; html?: string; color?: string }[] }): any;
405+
'action-extra'(props: { selectCurrentDate: () => void }): any;
406+
'time-picker-overlay'(props: {
407+
hours: number | number[];
408+
minutes: number | number[];
409+
seconds: number | number[];
410+
setHours: (hours: number | number[]) => void;
411+
setMinutes: (minutes: number | number[]) => void;
412+
setSeconds: (seconds: number | number[]) => void;
413+
}): any;
414+
'am-pm-button'(props: { toggle: () => void; value: string }): any;
415+
'left-sidebar'(props: SidebarSlotProps): any;
416+
'right-sidebar'(props: SidebarSlotProps): any;
417+
'month-year'(props: {
418+
year: number;
419+
month?: number;
420+
months?: { value: number; text: string; className?: Record<string, boolean> }[];
421+
years?: { value: number; text: string; className?: Record<string, boolean> }[];
422+
updateMonthYear?: (month: number, year: number, fromNav: boolean) => void;
423+
handleMonthYearChange?: (isNext: boolean, fromNav = false) => void;
424+
instance?: number;
425+
selectMonth?: (month: number, instance: number) => void;
426+
selectYear?: (year: number, instance: number) => void;
427+
}): any;
428+
'time-picker'(props: {
429+
time: InternalTime;
430+
updateTime: (value: number | number[], isHours = true, isSeconds = false) => void;
431+
}): any;
432+
'action-row'(props: {
433+
internalModelValue: InternalModelValue;
434+
disabled: boolean;
435+
selectDate: () => void;
436+
closePicker: () => void;
437+
}): any;
438+
marker(props: { marker: DatePickerMarker; day: number; date: Date }): any;
439+
quarter(props: { value: Date; text: string }): any;
440+
'top-extra'(props: { value: InternalModelValue }): any;
441+
trigger(): any;
442+
'input-icon'(): any;
443+
'clear-icon'(): any;
444+
'dp-input'(props: {
445+
value: string;
446+
isMenuOpen: boolean;
447+
onInput: (ev: string | Event) => void;
448+
onEnter: (ev: KeyboardEvent) => void;
449+
onTab: (ev: KeyboardEvent) => void;
450+
onClear: (ev?: Event | undefined) => void;
451+
onBlur: () => void;
452+
onKeypress: (ev: KeyboardEvent) => void;
453+
onPaste: () => void;
454+
openMenu: () => void;
455+
closeMenu: () => void;
456+
toggleMenu: () => void;
457+
}): any;
458+
}
459+
460+
type __VLS_WithTemplateSlots<T, S> = T & {
461+
new (): {
462+
$slots: S;
463+
};
464+
};
465+
466+
declare const _default: __VLS_WithTemplateSlots<
467+
DefineComponent<
468+
ComponentPropsOptions<VueDatePickerProps>,
469+
{},
470+
{},
471+
ComputedOptions,
472+
PublicMethods,
473+
ComponentOptionsMixin,
474+
ComponentOptionsMixin,
475+
EmitEvents[],
476+
EmitEvents,
477+
VueDatePickerProps
478+
>,
479+
Readonly<Slots> & Slots
357480
>;
358481

359482
export default _default;

0 commit comments

Comments
 (0)