{"version":3,"file":"basic-date-table.vue2.mjs","sources":["../../../../../../packages/components/date-picker/src/date-picker-com/basic-date-table.vue"],"sourcesContent":["<script lang=\"ts\">\nconst lang = 'zh-cn'\n</script>\n<template>\n  <table\n    role=\"grid\"\n    cellspacing=\"0\"\n    cellpadding=\"0\"\n    :class=\"[ns.b(), { 'is-week-mode': selectionMode === 'week' }]\"\n    @click=\"handlePickDate\"\n    @mousemove=\"handleMouseMove\"\n    @mousedown=\"handleMouseDown\"\n    @mouseup=\"handleMouseUp\"\n  >\n    <tbody ref=\"tbodyRef\">\n      <tr>\n        <th v-if=\"showWeekNumber\" scope=\"col\">周</th>\n        <th\n          v-for=\"(week, key) in WEEKS\"\n          :key=\"key\"\n          scope=\"col\"\n          :aria-label=\"week\"\n        >\n          {{ week }}\n        </th>\n      </tr>\n      <tr\n        v-for=\"(row, rowKey) in rows\"\n        :key=\"rowKey\"\n        :class=\"[ns.e('row'), { current: isWeekActive(row[1]) }]\"\n      >\n        <td\n          v-for=\"(cell, columnKey) in row\"\n          :key=\"`${rowKey}.${columnKey}`\"\n          :ref=\"(el) => isSelectedCell(cell) && (currentCellRef = el as HTMLElement)\"\n          :class=\"getCellClasses(cell)\"\n          :aria-current=\"cell.isCurrent ? 'date' : undefined\"\n          :aria-selected=\"cell.isCurrent\"\n          :tabindex=\"isSelectedCell(cell) ? 0 : -1\"\n          @focus=\"handleFocus\"\n        >\n          <el-date-picker-cell :cell=\"cell\" />\n        </td>\n      </tr>\n    </tbody>\n  </table>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, nextTick, ref, unref, watch } from 'vue'\nimport dayjs from 'dayjs'\nimport { useNamespace } from '@element-ultra/hooks'\nimport { castArray } from '@element-ultra/utils'\nimport { basicDateTableProps } from '../props/basic-date-table'\nimport { buildPickerTable } from '../utils'\nimport ElDatePickerCell from './basic-cell-render'\n\nimport type { Dayjs } from 'dayjs'\nimport type { DateCell } from '../date-picker.type'\n\nconst props = defineProps(basicDateTableProps)\nconst emit = defineEmits(['changerange', 'pick', 'select'])\n\nconst ns = useNamespace('date-table')\n\n\n\nconst tbodyRef = ref<HTMLElement>()\nconst currentCellRef = ref<HTMLElement>()\n// data\nconst lastRow = ref<number>()\nconst lastColumn = ref<number>()\nconst tableRows = ref<DateCell[][]>([[], [], [], [], [], []])\n\nlet focusWithClick = false\n\n// todo better way to get Day.js locale object\nconst firstDayOfWeek = (props.date as any).$locale().weekStart || 7\nconst WEEKS_CONSTANT = ['日', '一', '二', '三', '四', '五', '六']\n\nconst offsetDay = computed(() => {\n  // Sunday 7(0), cal the left and right offset days, 3217654, such as Monday is -1, the is to adjust the position of the first two rows of dates\n  return firstDayOfWeek > 3 ? 7 - firstDayOfWeek : -firstDayOfWeek\n})\n\nconst startDate = computed(() => {\n  const startDayOfMonth = props.date!.startOf('month')\n  return startDayOfMonth.subtract(startDayOfMonth.day() || 7, 'day')\n})\n\nconst WEEKS = computed(() => {\n  return WEEKS_CONSTANT.concat(WEEKS_CONSTANT).slice(\n    firstDayOfWeek,\n    firstDayOfWeek + 7\n  )\n})\n\nconst hasCurrent = computed<boolean>(() => {\n  return rows.value.flat().some(row => {\n    return row.isCurrent\n  })\n})\n\nconst days = computed(() => {\n  const startOfMonth = props.date!.startOf('month')\n  const startOfMonthDay = startOfMonth.day() || 7 // day of first day\n  const dateCountOfMonth = startOfMonth.daysInMonth()\n\n  const dateCountOfLastMonth = startOfMonth.subtract(1, 'month').daysInMonth()\n\n  return {\n    startOfMonthDay,\n    dateCountOfMonth,\n    dateCountOfLastMonth\n  }\n})\n\nconst selectedDate = computed(() => {\n  return props.selectionMode === 'dates'\n    ? (castArray(props.parsedValue) as Dayjs[])\n    : ([] as Dayjs[])\n})\n\n// Return value indicates should the counter be incremented\nconst setDateText = (\n  cell: DateCell,\n  {\n    count,\n    rowIndex,\n    columnIndex\n  }: {\n    count: number\n    rowIndex: number\n    columnIndex: number\n  }\n): boolean => {\n  const { startOfMonthDay, dateCountOfMonth, dateCountOfLastMonth } =\n    unref(days)\n  const offset = unref(offsetDay)\n  if (rowIndex >= 0 && rowIndex <= 1) {\n    const numberOfDaysFromPreviousMonth =\n      startOfMonthDay + offset < 0\n        ? 7 + startOfMonthDay + offset\n        : startOfMonthDay + offset\n\n    if (columnIndex + rowIndex * 7 >= numberOfDaysFromPreviousMonth) {\n      cell.text = count\n      return true\n    } else {\n      cell.text =\n        dateCountOfLastMonth -\n        (numberOfDaysFromPreviousMonth - (columnIndex % 7)) +\n        1 +\n        rowIndex * 7\n      cell.type = 'prev-month'\n    }\n  } else {\n    if (count <= dateCountOfMonth) {\n      cell.text = count\n    } else {\n      cell.text = count - dateCountOfMonth\n      cell.type = 'next-month'\n    }\n    return true\n  }\n  return false\n}\n\nconst setCellMetadata = (\n  cell: DateCell,\n  {\n    columnIndex,\n    rowIndex\n  }: {\n    columnIndex: number\n    rowIndex: number\n  },\n  count: number\n) => {\n  const { disabledDate, cellClassName } = props\n  const _selectedDate = unref(selectedDate)\n  const shouldIncrement = setDateText(cell, { count, rowIndex, columnIndex })\n\n  const cellDate = cell.dayjs!.toDate()\n  cell.selected = _selectedDate.find(d => d.valueOf() === cell.dayjs!.valueOf())\n  cell.isSelected = !!cell.selected\n  cell.isCurrent = isCurrent(cell)\n  cell.disabled = disabledDate?.(cellDate)\n  cell.customClass = cellClassName?.(cellDate)\n  return shouldIncrement\n}\n\nconst setRowMetadata = (row: DateCell[]) => {\n  if (props.selectionMode === 'week') {\n    const [start, end] = props.showWeekNumber ? [1, 7] : [0, 6]\n    const isActive = isWeekActive(row[start + 1])\n    row[start].inRange = isActive\n    row[start].start = isActive\n    row[end].inRange = isActive\n    row[end].end = isActive\n  }\n}\n\nconst rows = computed(() => {\n  const { minDate, maxDate, rangeState, showWeekNumber } = props\n\n  const offset = offsetDay.value\n  const rows_ = tableRows.value\n  const dateUnit = 'day'\n  let count = 1\n\n  if (showWeekNumber) {\n    for (let rowIndex = 0; rowIndex < 6; rowIndex++) {\n      if (!rows_[rowIndex][0]) {\n        rows_[rowIndex][0] = {\n          type: 'week',\n          text: startDate.value.add(rowIndex * 7 + 1, dateUnit).week()\n        }\n      }\n    }\n  }\n\n  buildPickerTable({ row: 6, column: 7 }, rows_, {\n    startDate: minDate,\n    columnIndexOffset: showWeekNumber ? 1 : 0,\n    nextEndDate:\n      rangeState.endDate ||\n      maxDate ||\n      (rangeState.selecting && minDate) ||\n      null,\n    now: dayjs().locale(unref(lang)).startOf(dateUnit),\n    unit: dateUnit,\n    relativeDateGetter: (idx: number) =>\n      startDate.value.add(idx - offset, dateUnit),\n    setCellMetadata: (...args) => {\n      if (setCellMetadata(...args, count)) {\n        count += 1\n      }\n    },\n\n    setRowMetadata\n  })\n\n  return rows_\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\nconst focus = async () => {\n  currentCellRef.value?.focus()\n}\n\nconst isNormalDay = (type = '') => {\n  return ['normal', 'today'].includes(type)\n}\n\nconst isCurrent = (cell: DateCell): boolean => {\n  return (\n    props.selectionMode === 'date' &&\n    isNormalDay(cell.type) &&\n    cellMatchesDate(cell, props.parsedValue as Dayjs)\n  )\n}\n\nconst cellMatchesDate = (cell: DateCell, date: Dayjs) => {\n  if (!date) return false\n  return dayjs(date)\n    .locale(lang)\n    .isSame(props.date!.date(Number(cell.text)), 'day')\n}\n\nconst getCellClasses = (cell: DateCell) => {\n  const classes: string[] = []\n  if (isNormalDay(cell.type) && !cell.disabled) {\n    classes.push('available')\n    if (cell.type === 'today') {\n      classes.push('today')\n    }\n  } else {\n    classes.push(cell.type!)\n  }\n\n  if (isCurrent(cell)) {\n    classes.push('current')\n  }\n\n  if (\n    cell.inRange &&\n    (isNormalDay(cell.type) || props.selectionMode === 'week')\n  ) {\n    classes.push('in-range')\n\n    if (cell.start) {\n      classes.push('start-date')\n    }\n\n    if (cell.end) {\n      classes.push('end-date')\n    }\n  }\n\n  if (cell.disabled) {\n    classes.push('disabled')\n  }\n\n  if (cell.selected) {\n    classes.push('selected')\n  }\n\n  if (cell.customClass) {\n    classes.push(cell.customClass)\n  }\n\n  return classes.join(' ')\n}\n\nconst getDateOfCell = (row: number, column: number) => {\n  const offsetFromStart =\n    row * 7 + (column - (props.showWeekNumber ? 1 : 0)) - offsetDay.value\n  return startDate.value.add(offsetFromStart, 'day')\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 - 1\n  const column = (target as HTMLTableCellElement).cellIndex\n\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: getDateOfCell(row, column)\n    })\n  }\n}\n\nconst isSelectedCell = (cell: DateCell) => {\n  return (\n    (!hasCurrent.value && cell?.text === 1 && cell.type === 'normal') ||\n    cell.isCurrent\n  )\n}\n\nconst handleFocus = (event: FocusEvent) => {\n  if (focusWithClick || hasCurrent.value || props.selectionMode !== 'date')\n    return\n  handlePickDate(event, true)\n}\n\nconst handleMouseDown = (event: MouseEvent) => {\n  const target = (event.target as HTMLElement).closest('td')\n  if (!target) return\n  focusWithClick = true\n}\n\nconst handleMouseUp = (event: MouseEvent) => {\n  const target = (event.target as HTMLElement).closest('td')\n  if (!target) return\n  focusWithClick = false\n}\n\nconst handlePickDate = (\n  event: FocusEvent | MouseEvent,\n  isKeyboardMovement = false\n) => {\n  const target = (event.target as HTMLElement).closest('td')\n\n  if (!target) return\n\n  const row = (target.parentNode as HTMLTableRowElement).rowIndex - 1\n  const column = (target as HTMLTableCellElement).cellIndex\n  const cell = rows.value[row][column]\n\n  if (cell.disabled || cell.type === 'week') return\n\n  const newDate = getDateOfCell(row, column)\n\n  if (props.selectionMode === 'range') {\n    if (!props.rangeState.selecting || !props.minDate) {\n      emit('pick', { minDate: newDate, maxDate: null })\n      emit('select', true)\n    } else {\n      if (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 if (props.selectionMode === 'date') {\n    emit('pick', newDate, isKeyboardMovement)\n  } else if (props.selectionMode === 'week') {\n    const weekNumber = newDate.week()\n    const value = `${newDate.year()}w${weekNumber}`\n    emit('pick', {\n      year: newDate.year(),\n      week: weekNumber,\n      value,\n      date: newDate.startOf('week')\n    })\n  } else if (props.selectionMode === 'dates') {\n    const newValue = cell.selected\n      ? castArray(props.parsedValue).filter(\n          d => d?.valueOf() !== newDate.valueOf()\n        )\n      : castArray(props.parsedValue).concat([newDate])\n    emit('pick', newValue)\n  }\n}\n\nconst isWeekActive = (cell: DateCell) => {\n  if (props.selectionMode !== 'week') return false\n  let newDate = props.date!.startOf('day')\n\n  if (cell.type === 'prev-month') {\n    newDate = newDate.subtract(1, 'month')\n  }\n\n  if (cell.type === 'next-month') {\n    newDate = newDate.add(1, 'month')\n  }\n\n  newDate = newDate.date(Number.parseInt(cell.text as any, 10))\n\n  if (props.parsedValue && !Array.isArray(props.parsedValue)) {\n\n    const dayOffset = ((props.parsedValue.day() - firstDayOfWeek + 7) % 7) - 1\n    const weekDate = props.parsedValue.subtract(dayOffset, 'day')\n\n    return weekDate.isSame(newDate, 'day')\n  }\n  return false\n}\n\ndefineExpose({\n  /**\n   * @description focus on current cell\n   */\n  focus\n})\n</script>\n"],"names":[],"mappings":"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"}