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