vuetify
Version:
Vue Material Component Framework
1 lines • 12.9 kB
Source Map (JSON)
{"version":3,"file":"calendar.mjs","names":["getWeek","useDate","useProxiedModel","computed","propsFactory","wrapInArray","makeCalendarProps","allowedDates","Array","Function","disabled","Boolean","displayValue","modelValue","month","Number","String","max","min","showAdjacentMonths","year","weekdays","type","default","weeksInMonth","useCalendar","props","adapter","model","v","date","value","length","isArray","undefined","getYear","startOfYear","setYear","getMonth","startOfMonth","setMonth","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","day","push","addDays","genDays","today","filter","includes","toJsDate","getDay","map","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","isEnd","endOfMonth","isSame","formatted","format","isDisabled","isWeekStart","isWeekEnd","isToday","isHidden","isSelected","some","localized","daysInWeek","startOfWeek","weekNumbers","isAfter","d"],"sources":["../../src/composables/calendar.ts"],"sourcesContent":["// Composables\nimport { getWeek, useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n allowedDates: unknown[] | ((date: unknown) => boolean) | undefined\n disabled: boolean\n displayValue: unknown\n modelValue: unknown[] | undefined\n max: unknown\n min: unknown\n showAdjacentMonths: boolean\n month: number | string | undefined\n weekdays: number[]\n year: number | string | undefined\n weeksInMonth: 'dynamic' | 'static'\n\n 'onUpdate:modelValue': ((value: unknown[]) => void) | undefined\n 'onUpdate:month': ((value: number) => void) | undefined\n 'onUpdate:year': ((value: number) => void) | undefined\n}\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n allowedDates: [Array, Function] as PropType<unknown[] | ((date: unknown) => boolean)>,\n disabled: Boolean,\n displayValue: null as any as PropType<unknown>,\n modelValue: Array as PropType<unknown[]>,\n month: [Number, String],\n max: null as any as PropType<unknown>,\n min: null as any as PropType<unknown>,\n showAdjacentMonths: Boolean,\n year: [Number, String],\n weekdays: {\n type: Array<number>,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n },\n weeksInMonth: {\n type: String as PropType<'dynamic' | 'static'>,\n default: 'dynamic',\n },\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n const adapter = useDate()\n const model = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => wrapInArray(v),\n )\n const displayValue = computed(() => {\n if (props.displayValue) return adapter.date(props.displayValue)\n if (model.value.length > 0) return adapter.date(model.value[0])\n if (props.min) return adapter.date(props.min)\n if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n return adapter.date()\n })\n\n const year = useProxiedModel(\n props,\n 'year',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getYear(displayValue.value)\n\n return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n },\n v => adapter.getYear(v)\n )\n\n const month = useProxiedModel(\n props,\n 'month',\n undefined,\n v => {\n const value = v != null ? Number(v) : adapter.getMonth(displayValue.value)\n const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value))\n\n return adapter.setMonth(date, value)\n },\n v => adapter.getMonth(v)\n )\n\n const weeksInMonth = computed(() => {\n const weeks = adapter.getWeekArray(month.value)\n\n const days = weeks.flat()\n\n // Make sure there's always 6 weeks in month (6 * 7 days)\n // if weeksInMonth is 'static'\n const daysInMonth = 6 * 7\n if (props.weeksInMonth === 'static' && days.length < daysInMonth) {\n const lastDay = days[days.length - 1]\n\n let week = []\n for (let day = 1; day <= daysInMonth - days.length; day++) {\n week.push(adapter.addDays(lastDay, day))\n\n if (day % 7 === 0) {\n weeks.push(week)\n week = []\n }\n }\n }\n\n return weeks\n })\n\n function genDays (days: unknown[], today: unknown) {\n return days.filter(date => {\n return props.weekdays.includes(adapter.toJsDate(date).getDay())\n }).map((date, index) => {\n const isoDate = adapter.toISO(date)\n const isAdjacent = !adapter.isSameMonth(date, month.value)\n const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n const isSame = adapter.isSameDay(date, month.value)\n\n return {\n date,\n isoDate,\n formatted: adapter.format(date, 'keyboardDate'),\n year: adapter.getYear(date),\n month: adapter.getMonth(date),\n isDisabled: isDisabled(date),\n isWeekStart: index % 7 === 0,\n isWeekEnd: index % 7 === 6,\n isToday: adapter.isSameDay(date, today),\n isAdjacent,\n isHidden: isAdjacent && !props.showAdjacentMonths,\n isStart,\n isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n isEnd,\n isSame,\n localized: adapter.format(date, 'dayOfMonth'),\n }\n })\n }\n\n const daysInWeek = computed(() => {\n const lastDay = adapter.startOfWeek(displayValue.value)\n const week = []\n for (let day = 0; day <= 6; day++) {\n week.push(adapter.addDays(lastDay, day))\n }\n\n const today = adapter.date()\n\n return genDays(week, today)\n })\n\n const daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat()\n const today = adapter.date() as Date\n\n return genDays(days, today)\n })\n\n const weekNumbers = computed(() => {\n return weeksInMonth.value.map(week => {\n return week.length ? getWeek(adapter, week[0]) : null\n })\n })\n\n function isDisabled (value: unknown) {\n if (props.disabled) return true\n\n const date = adapter.date(value)\n\n if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true\n if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true\n\n if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n }\n\n if (typeof props.allowedDates === 'function') {\n return !props.allowedDates(date)\n }\n\n return false\n }\n\n return {\n displayValue,\n daysInMonth,\n daysInWeek,\n genDays,\n model,\n weeksInMonth,\n weekNumbers,\n }\n}\n"],"mappings":"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","ignoreList":[]}