UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 19.6 kB
{"version":3,"file":"calendar-panel.vue2.mjs","sources":["../../../components/calendar/calendar-panel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, ref, toRef, watch } from 'vue'\n\nimport CalendarCell from './calendar-cell.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover } from '@vexip-ui/hooks'\nimport {\n debounceMinor,\n differenceDays,\n differenceWeeks,\n endOfDay,\n rangeDate,\n startOfDay,\n startOfWeek,\n toFalse,\n} from '@vexip-ui/utils'\nimport { calendarPanelProps } from './props'\n\nimport type { Dateable } from '@vexip-ui/utils'\nimport type { CalendarPanelSlots, WeekIndex } from './symbol'\n\ndefineOptions({ name: 'CalendarPanel' })\n\nconst _props = defineProps(calendarPanelProps)\nconst props = useProps('calendarBase', _props, {\n locale: null,\n value: {\n default: null,\n static: true,\n },\n year: () => new Date().getFullYear(),\n month: {\n default: () => new Date().getMonth() + 1,\n validator: value => value > 0 && value <= 12,\n },\n weekDays: {\n default: null,\n validator: value => !value || value.length === 0 || value.length === 7,\n },\n weekStart: {\n default: 0,\n validator: value => value >= 0 && value < 7,\n },\n today: {\n default: () => new Date(),\n validator: value => !Number.isNaN(+new Date(value)),\n },\n disabledDate: {\n default: toFalse,\n isFunc: true,\n },\n valueType: {\n default: 'start',\n validator: value => value === 'start' || value === 'end',\n },\n min: null,\n max: null,\n range: null,\n selectRow: false,\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<CalendarPanelSlots>()\n\nconst nh = useNameHelper('calendar')\n\nconst startValue = ref<Date | null>(null)\nconst endValue = ref<Date | null>(null)\nconst dateRange = ref<Date[]>([])\nconst hoveredDate = ref<Date | null>(null)\n\nconst { wrapper: body, isHover } = useHover()\nconst locale = useLocale('calendar', toRef(props, 'locale'))\n\nconst min = computed(() => (props.min ? +startOfDay(props.min) : -Infinity))\nconst max = computed(() => (props.max ? +endOfDay(props.max) : Infinity))\nconst reversed = computed(() => {\n if (Number.isNaN(min.value) || Number.isNaN(max.value)) {\n return false\n }\n\n return min.value > max.value\n})\n\nconst updateDateRange = debounceMinor(setDateRange)\n\nparseValue(props.value)\nsetDateRange()\n\nwatch(() => props.value, parseValue)\nwatch([() => props.year, () => props.month, () => props.weekStart], updateDateRange)\nwatch(isHover, value => {\n if (!value) {\n hoveredDate.value = null\n }\n})\nwatch(hoveredDate, value => {\n emitEvent(props.onHover, value)\n})\n\ndefineExpose({\n startValue,\n endValue,\n body,\n isSelected,\n isHovered,\n isPrevMonth,\n isNextMonth,\n isDisabled,\n isToday,\n isInRange,\n})\n\nfunction getWeekLabel(index: number) {\n return props.weekDays?.[index] || locale.value[`week${(index || 7) as WeekIndex}`]\n}\n\nfunction setDateRange() {\n dateRange.value = rangeDate(\n startOfWeek(new Date(props.year, props.month - 1, 1), props.weekStart),\n 42,\n )\n}\n\nfunction parseValue(value: Dateable | Dateable[]) {\n if (!Array.isArray(value)) {\n value = [value, value]\n }\n\n for (let i = 0; i < 2; ++i) {\n const date = new Date(value[i] ?? '')\n\n if (i === 0) {\n startValue.value = Number.isNaN(+date) ? null : date\n } else {\n endValue.value = Number.isNaN(+date) ? null : date\n }\n\n if (!props.range) break\n }\n}\n\nfunction isSameRow(current: Date, target: Date) {\n return props.selectRow && differenceWeeks(current, target) === 0\n}\n\nfunction isSelected(date: Date) {\n if (!date || (!startValue.value && !endValue.value)) {\n return false\n }\n\n return !!(\n (startValue.value &&\n (!differenceDays(date, startValue.value) || isSameRow(date, startValue.value))) ||\n (endValue.value && (!differenceDays(date, endValue.value) || isSameRow(date, endValue.value)))\n )\n}\n\nfunction isDisabled(date: Date) {\n if (typeof props.disabledDate === 'function') {\n if (props.disabledDate(date)) {\n return true\n }\n }\n\n const time = date.getTime()\n\n if (reversed.value) {\n if (time > max.value && time < min.value) {\n return true\n }\n } else {\n if (time < min.value || time > max.value) {\n return true\n }\n }\n\n return false\n}\n\nfunction isHovered(date: Date) {\n if (!date || !hoveredDate.value) {\n return false\n }\n\n return !differenceDays(date, hoveredDate.value) || isSameRow(date, hoveredDate.value)\n}\n\nfunction isPrevMonth(date: Date) {\n const { year, month } = props\n const dateYear = date.getFullYear()\n const dateMonth = date.getMonth()\n\n return dateYear < year || (dateYear === year && dateMonth < month - 1)\n}\n\nfunction isNextMonth(date: Date) {\n const { year, month } = props\n const dateYear = date.getFullYear()\n const dateMonth = date.getMonth()\n\n return dateYear > year || (dateYear === year && dateMonth > month - 1)\n}\n\nfunction isToday(date: Date) {\n return differenceDays(date, props.today) === 0\n}\n\nfunction handleSelect(date: Date) {\n if (isDisabled(date)) {\n return\n }\n\n if (props.valueType === 'start') {\n startValue.value = date\n } else {\n endValue.value = date\n }\n\n emitEvent(props.onSelect, date)\n emit('update:value', date)\n}\n\nfunction handleHover(date: Date) {\n hoveredDate.value = isDisabled(date) ? null : date\n}\n\nfunction isInRange(date: Date) {\n if (!hoveredDate.value && !startValue.value && !endValue.value) {\n return false\n }\n\n let min: number\n let max: number\n\n if (startValue.value && endValue.value) {\n const startTime = startValue.value.getTime()\n const endTime = endValue.value.getTime()\n\n min = Math.min(startTime, endTime)\n max = Math.max(startTime, endTime)\n } else if (hoveredDate.value) {\n if (!startValue.value && !endValue.value) return false\n\n const hoveredTime = hoveredDate.value.getTime()\n\n if (!startValue.value || !endValue.value) {\n const selectedTime = (startValue.value ?? endValue.value)!.getTime()\n\n min = Math.min(hoveredTime, selectedTime)\n max = Math.max(hoveredTime, selectedTime)\n } else {\n const startTime = startValue.value.getTime()\n const endTime = endValue.value.getTime()\n const minTime = Math.min(startTime, endTime)\n const maxTime = Math.max(startTime, endTime)\n\n min = Math.min(hoveredTime, minTime)\n max = Math.max(hoveredTime, maxTime)\n }\n } else {\n return false\n }\n\n return date.getTime() >= min && date.getTime() <= max\n}\n</script>\n\n<template>\n <div\n :class=\"[\n nh.be('panel'),\n nh.bs('vars'),\n props.selectRow && nh.bem('panel', 'select-row'),\n props.inherit && nh.bem('panel', 'inherit')\n ]\"\n role=\"grid\"\n >\n <slot name=\"header\">\n <Renderer :renderer=\"props.slots.header\"></Renderer>\n </slot>\n <div :class=\"[nh.be('row'), nh.bem('row', 'week')]\" aria-hidden>\n <div v-for=\"week in 7\" :key=\"week\" :class=\"[nh.be('cell'), nh.be('cell-week')]\">\n <slot\n name=\"week\"\n :label=\"getWeekLabel((week - 1 + props.weekStart) % 7)\"\n :index=\"week - 1\"\n :week=\"(week - 1 + props.weekStart) % 7\"\n >\n <Renderer\n :renderer=\"props.slots.week\"\n :data=\"{\n label: getWeekLabel((week - 1 + props.weekStart) % 7),\n index: week - 1,\n week: (week - 1 + props.weekStart) % 7\n }\"\n >\n <div :class=\"nh.be('index')\">\n {{ getWeekLabel((week - 1 + props.weekStart) % 7) }}\n </div>\n </Renderer>\n </slot>\n </div>\n </div>\n <div ref=\"body\" :class=\"nh.be('body')\">\n <div v-for=\"row in 6\" :key=\"row\" :class=\"nh.be('row')\">\n <CalendarCell\n v-for=\"cell in 7\"\n :key=\"(row - 1) * 7 + cell\"\n :date=\"dateRange[(row - 1) * 7 + cell - 1]\"\n :locale=\"locale\"\n :selected=\"isSelected(dateRange[(row - 1) * 7 + cell - 1])\"\n :hovered=\"isHovered(dateRange[(row - 1) * 7 + cell - 1])\"\n :is-prev=\"isPrevMonth(dateRange[(row - 1) * 7 + cell - 1])\"\n :is-next=\"isNextMonth(dateRange[(row - 1) * 7 + cell - 1])\"\n :is-today=\"isToday(dateRange[(row - 1) * 7 + cell - 1])\"\n :disabled=\"isDisabled(dateRange[(row - 1) * 7 + cell - 1])\"\n :in-range=\"props.range && isInRange(dateRange[(row - 1) * 7 + cell - 1])\"\n @hover=\"handleHover\"\n @select=\"handleSelect\"\n >\n <template\n v-if=\"$slots.item || props.slots.item\"\n #item=\"{\n date,\n label,\n selected,\n hovered,\n isPrev,\n isNext,\n isToday: matchedToday,\n disabled,\n inRange\n }\"\n >\n <slot\n name=\"item\"\n :date=\"date\"\n :label=\"label\"\n :selected=\"selected\"\n :hovered=\"hovered\"\n :is-prev=\"isPrev\"\n :is-next=\"isNext\"\n :is-today=\"matchedToday\"\n :disabled=\"disabled\"\n :in-range=\"inRange\"\n >\n <Renderer\n :renderer=\"props.slots.item\"\n :data=\"{\n date,\n label,\n selected,\n hovered,\n isPrev,\n isNext,\n isToday: matchedToday,\n disabled,\n inRange\n }\"\n ></Renderer>\n </slot>\n </template>\n <template v-if=\"$slots.itemContent || props.slots.itemContent\" #default=\"cellParams\">\n <slot name=\"itemContent\" v-bind=\"cellParams\">\n <Renderer :renderer=\"props.slots.itemContent\" :data=\"cellParams\"></Renderer>\n </slot>\n </template>\n </CalendarCell>\n </div>\n </div>\n <slot name=\"footer\">\n <Renderer :renderer=\"props.slots.footer\"></Renderer>\n </slot>\n </div>\n</template>\n"],"names":["props","useProps","__props","value","toFalse","emit","__emit","nh","useNameHelper","startValue","ref","endValue","dateRange","hoveredDate","body","isHover","useHover","locale","useLocale","toRef","min","computed","startOfDay","max","endOfDay","reversed","updateDateRange","debounceMinor","setDateRange","parseValue","watch","emitEvent","__expose","isSelected","isHovered","isPrevMonth","isNextMonth","isDisabled","isToday","isInRange","getWeekLabel","index","_a","rangeDate","startOfWeek","i","date","isSameRow","current","target","differenceWeeks","differenceDays","time","year","month","dateYear","dateMonth","handleSelect","handleHover","startTime","endTime","hoveredTime","selectedTime","minTime","maxTime","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_createVNode","Renderer","_createElementVNode","_Fragment","_renderList","week","_toDisplayString","row","cell","CalendarCell","$slots","label","selected","hovered","isPrev","isNext","matchedToday","disabled","inRange","_withCtx","cellParams","_mergeProps"],"mappings":"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"}