import { DefineComponent, ExtractPropTypes, PropType } from 'vue'; import { Flow, IDateFilter, IDefaultSelect, IDisableDates, IMarker, InternalModuleValue, ITimeValue, PresetRange, WeekStartNum, WeekStartStr, } from '../interfaces'; import { Prop } from '@vue/runtime-core'; // Since many props are passed from the main component to the children, this is simply to reuse prop definitions and don't repeat the same code export const CommonProps = { weekNumbers: { type: Boolean as PropType, default: false }, weekStart: { type: [Number, String] as PropType, default: 1 }, disableMonthYearSelect: { type: Boolean as PropType, default: false }, menuClassName: { type: String as PropType, default: null }, calendarClassName: { type: String as PropType, default: null }, yearRange: { type: Array as PropType, default: () => [1970, 2100] }, range: { type: Boolean as PropType, default: false }, multiCalendarsSolo: { type: Boolean as PropType, default: false }, calendarCellClassName: { type: String as PropType, default: null }, enableTimePicker: { type: Boolean as PropType, default: true }, is24: { type: Boolean as PropType, default: true }, hoursIncrement: { type: [String, Number] as PropType, default: 1 }, minutesIncrement: { type: [String, Number] as PropType, default: 1 }, secondsIncrement: { type: [String, Number] as PropType, default: 1 }, hoursGridIncrement: { type: [String, Number] as PropType, default: 1 }, secondsGridIncrement: { type: [String, Number] as PropType, default: 1 }, minutesGridIncrement: { type: [String, Number] as PropType, default: 5 }, minDate: { type: [Date, String] as PropType, default: null }, maxDate: { type: [Date, String] as PropType, default: null }, autoApply: { type: Boolean as PropType, default: false }, selectText: { type: String as PropType, default: 'Select' }, cancelText: { type: String as PropType, default: 'Cancel' }, locale: { type: String as PropType, default: 'en-US' }, weekNumName: { type: String as PropType, default: 'W' }, disabledDates: { type: [Array, Function] as PropType, default: () => [] }, minTime: { type: Object as PropType, default: null }, maxTime: { type: Object as PropType, default: null }, inline: { type: Boolean as PropType, default: false }, monthPicker: { type: Boolean as PropType, default: false }, timePicker: { type: Boolean as PropType, default: false }, monthNameFormat: { type: String as PropType<'long' | 'short'>, default: 'short' }, startDate: { type: [Date, String] as PropType, default: null }, startTime: { type: [Object, Array] as PropType, default: null }, monthYearComponent: { type: Object as PropType, default: null }, timePickerComponent: { type: Object as PropType, default: null }, actionRowComponent: { type: Object as PropType, default: null }, customProps: { type: Object as PropType>, default: null }, hideOffsetDates: { type: Boolean as PropType, default: false }, autoRange: { type: [Number, String] as PropType, default: null }, noToday: { type: Boolean as PropType, default: false }, noHoursOverlay: { type: Boolean as PropType, default: false }, noMinutesOverlay: { type: Boolean as PropType, default: false }, noSecondsOverlay: { type: Boolean as PropType, default: false }, disabledWeekDays: { type: Array as PropType, default: () => [] }, allowedDates: { type: Array as PropType, default: () => [] }, showNowButton: { type: Boolean as PropType, default: false }, nowButtonLabel: { type: String as PropType, default: 'Now' }, monthChangeOnScroll: { type: [Boolean, String] as PropType, default: true }, markers: { type: Array as PropType, default: () => [] }, uid: { type: String as PropType, default: null }, modeHeight: { type: [Number, String] as PropType, default: 255 }, enableSeconds: { type: Boolean as PropType, default: false }, escClose: { type: Boolean as PropType, default: true }, spaceConfirm: { type: Boolean as PropType, default: true }, monthChangeOnArrows: { type: Boolean as PropType, default: true }, textInput: { type: Boolean as PropType, default: false }, disabled: { type: Boolean as PropType, default: false }, readonly: { type: Boolean as PropType, default: false }, multiDates: { type: Boolean as PropType, default: false }, presetRanges: { type: Array as PropType, default: () => [] }, flow: { type: Array as PropType, default: () => [] }, preventMinMaxNavigation: { type: Boolean as PropType, default: false }, minRange: { type: [Number, String] as PropType, default: null }, maxRange: { type: [Number, String] as PropType, default: null }, fixedStart: { type: Boolean as PropType, default: false }, fixedEnd: { type: Boolean as PropType, default: false }, multiDatesLimit: { type: [Number, String] as PropType, default: null }, reverseYears: { type: Boolean as PropType, default: false }, keepActionRow: { type: Boolean as PropType, default: false }, weekPicker: { type: Boolean as PropType, default: false }, }; type ICommonProps = Record< keyof typeof CommonProps, Readonly>>[keyof typeof CommonProps] >; type IPartialProp = Prop>>[keyof typeof CommonProps]>; export const passCommonProps = (props: IPartialProp): ICommonProps => { const buildProps: ICommonProps = {} as ICommonProps; Object.keys(props).forEach((key) => { buildProps[key as keyof typeof CommonProps] = props[key as keyof IPartialProp]; }); return buildProps; }; // Shared props between MonthYearInput and Calendar components export const MonthCalendarSharedProps = { years: { type: Array as PropType, default: () => [] }, months: { type: Array as PropType, default: () => [] }, month: { type: Number as PropType, default: 0 }, year: { type: Number as PropType, default: 0 }, filters: { type: Object as PropType, default: () => ({}) }, monthPicker: { type: Boolean as PropType, default: false }, instance: { type: Number as PropType, default: 1 }, internalModelValue: { type: [Date, Array] as PropType, default: null }, range: { type: Boolean as PropType, default: false }, multiCalendars: { type: Number as PropType, default: 0 }, multiCalendarsSolo: { type: Boolean as PropType, default: false }, customProps: { type: Object as PropType>, default: null }, };