{"version":3,"file":"basic-month-table.mjs","sources":["../../../../../../../packages/components/date-picker-panel/src/date-picker-com/basic-month-table.vue"],"sourcesContent":["<template>\n  <table\n    role=\"grid\"\n    :aria-label=\"t('el.datepicker.monthTablePrompt')\"\n    :class=\"ns.b()\"\n    @click=\"handleMonthTableClick\"\n    @mousemove=\"handleMouseMove\"\n  >\n    <tbody ref=\"tbodyRef\">\n      <tr v-for=\"(row, key) in rows\" :key=\"key\">\n        <td\n          v-for=\"(cell, key_) in row\"\n          :key=\"key_\"\n          :ref=\"(el) => cell.isSelected && (currentCellRef = el as HTMLElement)\"\n          :class=\"getCellStyle(cell)\"\n          :aria-selected=\"!!cell.isSelected\"\n          :aria-label=\"t(`el.datepicker.month${+cell.text + 1}`)\"\n          :tabindex=\"cell.isSelected ? 0 : -1\"\n          @keydown.space.prevent.stop=\"handleMonthTableClick\"\n          @keydown.enter.prevent.stop=\"handleMonthTableClick\"\n        >\n          <el-date-picker-cell\n            :cell=\"{\n              ...cell,\n              renderText: t('el.datepicker.months.' + months[cell.text]),\n            }\"\n          />\n        </td>\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 '@element-plus/hooks'\nimport { castArray, hasClass } from '@element-plus/utils'\nimport { basicMonthTableProps } from '../props/basic-month-table'\nimport { datesInMonth, getValidDateOfMonth } from '../utils'\nimport ElDatePickerCell from './basic-cell-render'\n\nimport type { Dayjs } from 'dayjs'\n\ntype MonthCell = {\n  column: number\n  customClass: string | undefined\n  disabled: boolean\n  end: boolean\n  inRange: boolean\n  row: number\n  selected: Dayjs | undefined\n  isCurrent: boolean | undefined\n  isSelected: boolean\n  start: boolean\n  text: number\n  renderText: string | undefined\n  timestamp: number | undefined\n  date: Date | undefined\n  dayjs: Dayjs | undefined\n  type: 'normal' | 'today'\n}\n\nconst props = defineProps(basicMonthTableProps)\nconst emit = defineEmits(['changerange', 'pick', 'select'])\n\nconst ns = useNamespace('month-table')\n\nconst { t, lang } = useLocale()\nconst tbodyRef = ref<HTMLElement>()\nconst currentCellRef = ref<HTMLElement>()\nconst months = ref(\n  props.date\n    .locale('en')\n    .localeData()\n    .monthsShort()\n    .map((_) => _.toLowerCase())\n)\nconst tableRows = ref<MonthCell[][]>([[], [], []])\nconst lastRow = ref<number>()\nconst lastColumn = ref<number>()\nconst rows = computed<MonthCell[][]>(() => {\n  const rows = tableRows.value\n\n  const now = dayjs().locale(lang.value).startOf('month')\n\n  for (let i = 0; i < 3; i++) {\n    const row = rows[i]\n    for (let j = 0; j < 4; j++) {\n      const cell = (row[j] ||= {\n        row: i,\n        column: j,\n        type: 'normal',\n        inRange: false,\n        start: false,\n        end: false,\n        text: -1,\n        disabled: false,\n        isSelected: false,\n        customClass: undefined,\n        date: undefined,\n        dayjs: undefined,\n        isCurrent: undefined,\n        selected: undefined,\n        renderText: undefined,\n        timestamp: undefined,\n      })\n\n      cell.type = 'normal'\n\n      const index = i * 4 + j\n      const calTime = props.date.startOf('year').month(index)\n\n      const calEndDate =\n        props.rangeState.endDate ||\n        props.maxDate ||\n        (props.rangeState.selecting && props.minDate) ||\n        null\n\n      cell.inRange =\n        !!(\n          props.minDate &&\n          calTime.isSameOrAfter(props.minDate, 'month') &&\n          calEndDate &&\n          calTime.isSameOrBefore(calEndDate, 'month')\n        ) ||\n        !!(\n          props.minDate &&\n          calTime.isSameOrBefore(props.minDate, 'month') &&\n          calEndDate &&\n          calTime.isSameOrAfter(calEndDate, 'month')\n        )\n\n      if (props.minDate?.isSameOrAfter(calEndDate)) {\n        cell.start = !!(calEndDate && calTime.isSame(calEndDate, 'month'))\n        cell.end = props.minDate && calTime.isSame(props.minDate, 'month')\n      } else {\n        cell.start = !!(props.minDate && calTime.isSame(props.minDate, 'month'))\n        cell.end = !!(calEndDate && calTime.isSame(calEndDate, 'month'))\n      }\n\n      const isToday = now.isSame(calTime)\n      if (isToday) {\n        cell.type = 'today'\n      }\n\n      const cellDate = calTime.toDate()\n      cell.text = index\n      cell.disabled = props.disabledDate?.(cellDate) || false\n      cell.date = cellDate\n      cell.customClass = props.cellClassName?.(cellDate)\n      cell.dayjs = calTime\n      cell.timestamp = calTime.valueOf()\n      cell.isSelected = isSelectedCell(cell)\n    }\n  }\n  return rows\n})\n\nconst focus = () => {\n  currentCellRef.value?.focus()\n}\n\nconst getCellStyle = (cell: MonthCell) => {\n  const style = {} as any\n  const year = props.date.year()\n  const today = new Date()\n  const month = cell.text\n\n  style.disabled =\n    props.disabled ||\n    (props.disabledDate\n      ? datesInMonth(props.date, year, month, lang.value).every(\n          props.disabledDate\n        )\n      : false)\n  style.current =\n    castArray(props.parsedValue).findIndex(\n      (date) =>\n        dayjs.isDayjs(date) && date.year() === year && date.month() === month\n    ) >= 0\n  style.today = today.getFullYear() === year && today.getMonth() === month\n\n  if (cell.customClass) {\n    style[cell.customClass] = true\n  }\n  if (cell.inRange) {\n    style['in-range'] = true\n\n    if (cell.start) {\n      style['start-date'] = true\n    }\n\n    if (cell.end) {\n      style['end-date'] = true\n    }\n  }\n  return style\n}\n\nconst isSelectedCell = (cell: MonthCell) => {\n  const year = props.date.year()\n  const month = cell.text\n  return (\n    castArray(props.date).findIndex(\n      (date) => date.year() === year && date.month() === month\n    ) >= 0\n  )\n}\n\nconst handleMouseMove = (event: MouseEvent) => {\n  if (!props.rangeState.selecting) return\n\n  let target = event.target as HTMLElement\n  if (target.tagName === 'SPAN') {\n    target = target.parentNode?.parentNode as HTMLElement\n  }\n  if (target.tagName === 'DIV') {\n    target = target.parentNode as HTMLElement\n  }\n  if (target.tagName !== 'TD') return\n\n  const row = (target.parentNode as HTMLTableRowElement).rowIndex\n  const column = (target as HTMLTableCellElement).cellIndex\n  // can not select disabled date\n  if (rows.value[row][column].disabled) return\n\n  // only update rangeState when mouse moves to a new cell\n  // this avoids frequent Date object creation and improves performance\n  if (row !== lastRow.value || column !== lastColumn.value) {\n    lastRow.value = row\n    lastColumn.value = column\n    emit('changerange', {\n      selecting: true,\n      endDate: props.date.startOf('year').month(row * 4 + column),\n    })\n  }\n}\nconst handleMonthTableClick = (event: MouseEvent | KeyboardEvent) => {\n  if (props.disabled) return\n  const target = (event.target as HTMLElement)?.closest(\n    'td'\n  ) as HTMLTableCellElement\n  if (target?.tagName !== 'TD') return\n  if (hasClass(target, 'disabled')) return\n  const column = target.cellIndex\n  const row = (target.parentNode as HTMLTableRowElement).rowIndex\n  const month = row * 4 + column\n  const newDate = props.date.startOf('year').month(month)\n  if (props.selectionMode === 'months') {\n    if (event.type === 'keydown') {\n      emit('pick', castArray(props.parsedValue), false)\n      return\n    }\n    const newMonth = getValidDateOfMonth(\n      props.date,\n      props.date.year(),\n      month,\n      lang.value,\n      props.disabledDate\n    )\n    const newValue = hasClass(target, 'current')\n      ? castArray(props.parsedValue).filter(\n          (d) =>\n            // Filter out the selected month only when both year and month match\n            // This allows remove same months from different years #20019\n            d?.year() !== newMonth.year() || d?.month() !== newMonth.month()\n        )\n      : castArray(props.parsedValue).concat([dayjs(newMonth)])\n    emit('pick', newValue)\n  } else if (props.selectionMode === 'range') {\n    if (!props.rangeState.selecting) {\n      emit('pick', { minDate: newDate, maxDate: null })\n      emit('select', true)\n    } else {\n      if (props.minDate && newDate >= props.minDate) {\n        emit('pick', { minDate: props.minDate, maxDate: newDate })\n      } else {\n        emit('pick', { minDate: newDate, maxDate: props.minDate })\n      }\n      emit('select', false)\n    }\n  } else {\n    emit('pick', month)\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 current cell\n   */\n  focus,\n})\n</script>\n"],"names":["rows","_openBlock","_createElementBlock","_unref","_normalizeClass","_createElementVNode","_Fragment","_renderList"],"mappings":"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"}