{"version":3,"file":"basic-year-table.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/basic-year-table.vue"],"sourcesContent":["<template>\n  <table\n    role=\"grid\"\n    :aria-label=\"t('b.datepicker.yearTablePrompt')\"\n    :class=\"ns.b()\"\n    @click=\"handleYearTableClick\"\n  >\n    <tbody ref=\"tbodyRef\">\n      <tr v-for=\"(_, i) in 3\" :key=\"i\">\n        <template v-for=\"(__, j) in 4\" :key=\"i + '_' + j\">\n          <td\n            v-if=\"i * 4 + j < 10\"\n            :ref=\"\n              (el) =>\n                isSelectedCell(startYear + i * 4 + j) && (currentCellRef = el as HTMLElement)\n            \"\n            class=\"available\"\n            :class=\"getCellKls(startYear + i * 4 + j)\"\n            :aria-selected=\"`${isSelectedCell(startYear + i * 4 + j)}`\"\n            :tabindex=\"isSelectedCell(startYear + i * 4 + j) ? 0 : -1\"\n            @keydown.space.prevent.stop=\"handleYearTableClick\"\n            @keydown.enter.prevent.stop=\"handleYearTableClick\"\n          >\n            <div :class=\"[ns.e('cell')]\">\n              <span class=\"cell\">{{ startYear + i * 4 + j }}</span>\n            </div>\n          </td>\n          <td v-else />\n        </template>\n      </tr>\n    </tbody>\n  </table>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, nextTick, ref, watch } from 'vue'\nimport dayjs from 'dayjs'\nimport { useLocale, useNamespace } from '@bigin/hooks'\nimport { rangeArr } from '@bigin/components/time-picker'\nimport { castArray, hasClass } from '@bigin/utils'\nimport { basicYearTableProps } from '../props/basic-year-table'\n\nconst datesInYear = (year: number, lang: string) => {\n  const firstDay = dayjs(String(year)).locale(lang).startOf('year')\n  const lastDay = firstDay.endOf('year')\n  const numOfDays = lastDay.dayOfYear()\n  return rangeArr(numOfDays).map((n) => firstDay.add(n, 'day').toDate())\n}\n\nconst props = defineProps(basicYearTableProps)\nconst emit = defineEmits(['pick'])\n\nconst ns = useNamespace('year-table')\n\nconst { t, lang } = useLocale()\nconst tbodyRef = ref<HTMLElement>()\nconst currentCellRef = ref<HTMLElement>()\nconst startYear = computed(() => {\n  return Math.floor(props.date.year() / 10) * 10\n})\n\nconst focus = () => {\n  currentCellRef.value?.focus()\n}\n\nconst getCellKls = (year: number) => {\n  const kls: Record<string, boolean> = {}\n  const today = dayjs().locale(lang.value)\n\n  kls.disabled = props.disabledDate\n    ? datesInYear(year, lang.value).every(props.disabledDate)\n    : false\n\n  kls.current =\n    castArray(props.parsedValue).findIndex((d) => d!.year() === year) >= 0\n\n  kls.today = today.year() === year\n\n  return kls\n}\n\nconst isSelectedCell = (year: number) => {\n  return (\n    (year === startYear.value &&\n      props.date.year() < startYear.value &&\n      props.date.year() > startYear.value + 9) ||\n    castArray(props.date).findIndex((date) => date.year() === year) >= 0\n  )\n}\n\nconst handleYearTableClick = (event: MouseEvent | KeyboardEvent) => {\n  const clickTarget = event.target as HTMLDivElement\n  const target = clickTarget.closest('td')\n  if (target && target.textContent) {\n    if (hasClass(target, 'disabled')) return\n    const year = target.textContent || target.innerText\n    emit('pick', Number(year))\n  }\n}\n\nwatch(\n  () => props.date,\n  async () => {\n    if (tbodyRef.value?.contains(document.activeElement)) {\n      await nextTick()\n      currentCellRef.value?.focus()\n    }\n  }\n)\n\ndefineExpose({\n  /**\n   * @description focus on the current cell\n   */\n  focus,\n})\n</script>\n"],"names":["lang"],"mappings":"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"}