UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 10.9 kB
{"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","useCalendar","props","adapter","model","v","date","value","length","isArray","undefined","getYear","startOfYear","setYear","getMonth","setMonth","weeksInMonth","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","day","push","addDays","today","map","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","startOfMonth","isEnd","endOfMonth","isSame","formatted","format","isDisabled","isWeekStart","isWeekEnd","isToday","isHidden","isSelected","some","localized","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)\n disabled: boolean\n displayValue: unknown\n modelValue: unknown[]\n max: unknown\n min: unknown\n showAdjacentMonths?: boolean\n month: number | string\n year: number | string\n\n 'onUpdate:modelValue': (value: unknown[]) => void\n 'onUpdate:month': (value: number) => void\n 'onUpdate:year': (value: number) => void\n}\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n allowedDates: [Array, Function],\n disabled: Boolean,\n displayValue: null as any as PropType<unknown>,\n modelValue: Array as PropType<unknown[] | undefined>,\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}, '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.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 // But only do it if we're not hiding adjacent months?\n const daysInMonth = 6 * 7\n if (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 const daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat()\n const today = adapter.date()\n\n return days.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 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 model,\n weeksInMonth,\n weekNumbers,\n }\n}\n"],"mappings":"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"}