{"version":3,"file":"CalendarCellTrigger.cjs","sources":["../../src/Calendar/CalendarCellTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n  type DateValue,\n  getLocalTimeZone,\n  isSameDay,\n  isSameMonth,\n  isToday,\n} from '@internationalized/date'\nimport { computed, nextTick } from 'vue'\nimport { useKbd } from '@/shared'\nimport { getDaysInMonth, toDate } from '@/date'\nimport { getSelectableCells } from './utils'\n\nexport interface CalendarCellTriggerProps extends PrimitiveProps {\n  /** The date value provided to the cell trigger */\n  day: DateValue\n  /** The month in which the cell is rendered */\n  month: DateValue\n}\n\nexport interface CalendarCellTriggerSlot {\n  default: (props: {\n    /** Current day */\n    dayValue: string\n    /** Current disable state */\n    disabled: boolean\n    /** Current selected state */\n    selected: boolean\n    /** Current today state */\n    today: boolean\n    /** Current outside view state */\n    outsideView: boolean\n    /** Current outside visible view state */\n    outsideVisibleView: boolean\n    /** Current unavailable state */\n    unavailable: boolean\n  }) => any\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { injectCalendarRootContext } from './CalendarRoot.vue'\n\nconst props = withDefaults(defineProps<CalendarCellTriggerProps>(), {\n  as: 'div',\n})\n\ndefineSlots<CalendarCellTriggerSlot>()\n\nconst kbd = useKbd()\nconst rootContext = injectCalendarRootContext()\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\n\nconst dayValue = computed(() => props.day.day.toLocaleString(rootContext.locale.value))\n\nconst labelText = computed(() => {\n  return rootContext.formatter.custom(toDate(props.day), {\n    weekday: 'long',\n    month: 'long',\n    day: 'numeric',\n    year: 'numeric',\n  })\n})\n\nconst isDisabled = computed(() => rootContext.isDateDisabled(props.day))\nconst isUnavailable = computed(() =>\n  rootContext.isDateUnavailable?.(props.day) ?? false,\n)\nconst isDateToday = computed(() => {\n  return isToday(props.day, getLocalTimeZone())\n})\nconst isOutsideView = computed(() => {\n  return !isSameMonth(props.day, props.month)\n})\nconst isOutsideVisibleView = computed(() =>\n  rootContext.isOutsideVisibleView(props.day),\n)\n\nconst isFocusedDate = computed(() => {\n  return !rootContext.disabled.value && isSameDay(props.day, rootContext.placeholder.value)\n})\nconst isSelectedDate = computed(() => rootContext.isDateSelected(props.day))\n\nfunction changeDate(date: DateValue) {\n  if (rootContext.readonly.value)\n    return\n  if (rootContext.isDateDisabled(date) || rootContext.isDateUnavailable?.(date))\n    return\n\n  rootContext.onDateChange(date)\n}\n\nfunction handleClick() {\n  changeDate(props.day)\n}\n\nfunction handleArrowKey(e: KeyboardEvent) {\n  e.preventDefault()\n  e.stopPropagation()\n  const parentElement = rootContext.parentElement.value!\n  const indexIncrementation = 7\n  const sign = rootContext.dir.value === 'rtl' ? -1 : 1\n  switch (e.code) {\n    case kbd.ARROW_RIGHT:\n      shiftFocus(currentElement.value, sign)\n      break\n    case kbd.ARROW_LEFT:\n      shiftFocus(currentElement.value, -sign)\n      break\n    case kbd.ARROW_UP:\n      shiftFocus(currentElement.value, -indexIncrementation)\n      break\n    case kbd.ARROW_DOWN:\n      shiftFocus(currentElement.value, indexIncrementation)\n      break\n    case kbd.ENTER:\n    case kbd.SPACE_CODE:\n      changeDate(props.day)\n  }\n\n  function shiftFocus(node: HTMLElement, add: number) {\n    const allCollectionItems: HTMLElement[] = getSelectableCells(parentElement)\n    if (!allCollectionItems.length)\n      return\n\n    const index = allCollectionItems.indexOf(node)\n    const newIndex = index + add\n\n    if (newIndex >= 0 && newIndex < allCollectionItems.length) {\n      if (allCollectionItems[newIndex].hasAttribute('data-disabled')) {\n        shiftFocus(allCollectionItems[newIndex], add)\n      }\n      allCollectionItems[newIndex].focus()\n      return\n    }\n\n    if (newIndex < 0) {\n      if (rootContext.isPrevButtonDisabled())\n        return\n      rootContext.prevPage()\n      nextTick(() => {\n        const newCollectionItems: HTMLElement[] = getSelectableCells(parentElement)\n        if (!newCollectionItems.length)\n          return\n        if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {\n        // Placeholder is set to first month of the new page\n          const numberOfDays = getDaysInMonth(rootContext.placeholder.value)\n          const computedIndex = numberOfDays - Math.abs(newIndex)\n          if (newCollectionItems[computedIndex].hasAttribute('data-disabled')) {\n            shiftFocus(newCollectionItems[computedIndex], add)\n          }\n          newCollectionItems[\n            computedIndex\n          ].focus()\n          return\n        }\n        const computedIndex = newCollectionItems.length - Math.abs(newIndex)\n        if (newCollectionItems[computedIndex].hasAttribute('data-disabled')) {\n          shiftFocus(newCollectionItems[computedIndex], add)\n        }\n        newCollectionItems[\n          computedIndex\n        ].focus()\n      })\n      return\n    }\n\n    if (newIndex >= allCollectionItems.length) {\n      if (rootContext.isNextButtonDisabled())\n        return\n      rootContext.nextPage()\n      nextTick(() => {\n        const newCollectionItems: HTMLElement[] = getSelectableCells(parentElement)\n        if (!newCollectionItems.length)\n          return\n\n        if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {\n        // Placeholder is set to first month of the new page\n          const numberOfDays = getDaysInMonth(\n            rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 }),\n          )\n\n          const computedIndex = newIndex - allCollectionItems.length + (newCollectionItems.length - numberOfDays)\n\n          if (newCollectionItems[computedIndex].hasAttribute('data-disabled')) {\n            shiftFocus(newCollectionItems[computedIndex], add)\n          }\n          newCollectionItems[computedIndex].focus()\n          return\n        }\n\n        const computedIndex = newIndex - allCollectionItems.length\n        if (newCollectionItems[computedIndex].hasAttribute('data-disabled')) {\n          shiftFocus(newCollectionItems[computedIndex], add)\n        }\n\n        newCollectionItems[computedIndex].focus()\n      })\n    }\n  }\n}\n</script>\n\n<template>\n  <Primitive\n    ref=\"primitiveElement\"\n    v-bind=\"props\"\n    role=\"button\"\n    :aria-label=\"labelText\"\n    data-reka-calendar-cell-trigger\n    :aria-disabled=\"isDisabled || isUnavailable ? true : undefined\"\n    :data-selected=\"isSelectedDate ? true : undefined\"\n    :data-value=\"day.toString()\"\n    :data-disabled=\"isDisabled ? '' : undefined\"\n    :data-unavailable=\"isUnavailable ? '' : undefined\"\n    :data-today=\"isDateToday ? '' : undefined\"\n    :data-outside-view=\"isOutsideView ? '' : undefined\"\n    :data-outside-visible-view=\"isOutsideVisibleView ? '' : undefined\"\n    :data-focused=\"isFocusedDate ? '' : undefined\"\n    :tabindex=\"isFocusedDate ? 0 : isOutsideView || isDisabled ? undefined : -1\"\n    @click=\"handleClick\"\n    @keydown.up.down.left.right.space.enter=\"handleArrowKey\"\n    @keydown.enter.prevent\n  >\n    <slot\n      :day-value=\"dayValue\"\n      :disabled=\"isDisabled\"\n      :today=\"isDateToday\"\n      :selected=\"isSelectedDate\"\n      :outside-view=\"isOutsideView\"\n      :outside-visible-view=\"isOutsideVisibleView\"\n      :unavailable=\"isUnavailable\"\n    >\n      {{ dayValue }}\n    </slot>\n  </Primitive>\n</template>\n"],"names":["useKbd","injectCalendarRootContext","usePrimitiveElement","computed","toDate","isToday","getLocalTimeZone","isSameMonth","isSameDay","getSelectableCells","nextTick","getDaysInMonth","computedIndex"],"mappings":"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"}