{"version":3,"file":"basic-date-table.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/basic-date-table.vue"],"sourcesContent":["<template>\n  <table\n    cellspacing=\"0\"\n    cellpadding=\"0\"\n    class=\"el-date-table\"\n    :class=\"{ 'is-week-mode': selectionMode === 'week' }\"\n    @click=\"handleClick\"\n    @mousemove=\"handleMouseMove\"\n  >\n    <tbody>\n      <tr>\n        <th v-if=\"showWeekNumber\">{{ t('el.datepicker.week') }}</th>\n        <th v-for=\"(week, key) in WEEKS\" :key=\"key\">\n          {{ t('el.datepicker.weeks.' + week) }}\n        </th>\n      </tr>\n      <tr\n        v-for=\"(row, key) in rows\"\n        :key=\"key\"\n        class=\"el-date-table__row\"\n        :class=\"{ current: isWeekActive(row[1]) }\"\n      >\n        <td\n          v-for=\"(cell, key_) in row\"\n          :key=\"key_\"\n          :class=\"getCellClasses(cell)\"\n        >\n          <el-date-picker-cell :cell=\"cell\" />\n        </td>\n      </tr>\n    </tbody>\n  </table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport { useLocale } from '@element-plus/hooks'\nimport { castArray } from '@element-plus/utils'\nimport ElDatePickerCell from './basic-cell-render'\nimport type { PropType } from 'vue'\n\nimport type { Dayjs } from 'dayjs'\nimport type { DateCell } from '../date-picker.type'\n\nexport default defineComponent({\n  components: {\n    ElDatePickerCell,\n  },\n  props: {\n    date: {\n      type: Object as PropType<Dayjs>,\n    },\n    minDate: {\n      type: Object as PropType<Dayjs>,\n    },\n    maxDate: {\n      type: Object as PropType<Dayjs>,\n    },\n    parsedValue: {\n      type: [Object, Array] as PropType<Dayjs | Dayjs[]>,\n    },\n    selectionMode: {\n      type: String,\n      default: 'day',\n    },\n    showWeekNumber: {\n      type: Boolean,\n      default: false,\n    },\n    disabledDate: {\n      type: Function,\n    },\n    cellClassName: {\n      type: Function,\n    },\n    rangeState: {\n      type: Object,\n      default: () => ({\n        endDate: null,\n        selecting: false,\n      }),\n    },\n  },\n  emits: ['changerange', 'pick', 'select'],\n\n  setup(props, ctx) {\n    const { t, lang } = useLocale()\n    // data\n    const lastRow = ref(null)\n    const lastColumn = ref(null)\n    const tableRows = ref<DateCell[][]>([[], [], [], [], [], []])\n\n    // todo better way to get Day.js locale object\n    const firstDayOfWeek = (props.date as any).$locale().weekStart || 7\n    const WEEKS_CONSTANT = props.date\n      .locale('en')\n      .localeData()\n      .weekdaysShort()\n      .map((_) => _.toLowerCase())\n\n    const 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\n    const startDate = computed(() => {\n      const startDayOfMonth = props.date.startOf('month')\n      return startDayOfMonth.subtract(startDayOfMonth.day() || 7, 'day')\n    })\n\n    const WEEKS = computed(() => {\n      return WEEKS_CONSTANT.concat(WEEKS_CONSTANT).slice(\n        firstDayOfWeek,\n        firstDayOfWeek + 7\n      )\n    })\n\n    const rows = computed(() => {\n      // TODO: refactory rows / getCellClasses\n      const startOfMonth = props.date.startOf('month')\n      const startOfMonthDay = startOfMonth.day() || 7 // day of first day\n      const dateCountOfMonth = startOfMonth.daysInMonth()\n      const dateCountOfLastMonth = startOfMonth\n        .subtract(1, 'month')\n        .daysInMonth()\n\n      const offset = offsetDay.value\n      const rows_ = tableRows.value\n      let count = 1\n\n      const selectedDate: Dayjs[] =\n        props.selectionMode === 'dates' ? castArray(props.parsedValue) : []\n\n      const calNow = dayjs().locale(lang.value).startOf('day')\n\n      for (let i = 0; i < 6; i++) {\n        const row = rows_[i]\n\n        if (props.showWeekNumber) {\n          if (!row[0]) {\n            row[0] = {\n              type: 'week',\n              text: startDate.value.add(i * 7 + 1, 'day').week(),\n            }\n          }\n        }\n\n        for (let j = 0; j < 7; j++) {\n          let cell = row[props.showWeekNumber ? j + 1 : j]\n          if (!cell) {\n            cell = {\n              row: i,\n              column: j,\n              type: 'normal',\n              inRange: false,\n              start: false,\n              end: false,\n            }\n          }\n          const index = i * 7 + j\n          const calTime = startDate.value.add(index - offset, 'day')\n          cell.dayjs = calTime\n          cell.date = calTime.toDate()\n          cell.timestamp = calTime.valueOf()\n          cell.type = 'normal'\n\n          const calEndDate =\n            props.rangeState.endDate ||\n            props.maxDate ||\n            (props.rangeState.selecting && props.minDate)\n\n          cell.inRange =\n            (props.minDate &&\n              calTime.isSameOrAfter(props.minDate, 'day') &&\n              calEndDate &&\n              calTime.isSameOrBefore(calEndDate, 'day')) ||\n            (props.minDate &&\n              calTime.isSameOrBefore(props.minDate, 'day') &&\n              calEndDate &&\n              calTime.isSameOrAfter(calEndDate, 'day'))\n\n          if (props.minDate?.isSameOrAfter(calEndDate)) {\n            cell.start = calEndDate && calTime.isSame(calEndDate, 'day')\n            cell.end = props.minDate && calTime.isSame(props.minDate, 'day')\n          } else {\n            cell.start = props.minDate && calTime.isSame(props.minDate, 'day')\n            cell.end = calEndDate && calTime.isSame(calEndDate, 'day')\n          }\n\n          const isToday = calTime.isSame(calNow, 'day')\n\n          if (isToday) {\n            cell.type = 'today'\n          }\n\n          if (i >= 0 && i <= 1) {\n            const numberOfDaysFromPreviousMonth =\n              startOfMonthDay + offset < 0\n                ? 7 + startOfMonthDay + offset\n                : startOfMonthDay + offset\n\n            if (j + i * 7 >= numberOfDaysFromPreviousMonth) {\n              cell.text = count++\n            } else {\n              cell.text =\n                dateCountOfLastMonth -\n                (numberOfDaysFromPreviousMonth - (j % 7)) +\n                1 +\n                i * 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          }\n\n          const cellDate = calTime.toDate()\n          cell.selected = selectedDate.find(\n            (_) => _.valueOf() === calTime.valueOf()\n          )\n          cell.isSelected = !!cell.selected\n          cell.isCurrent = isCurrent(cell)\n          cell.disabled = props.disabledDate && props.disabledDate(cellDate)\n          cell.customClass =\n            props.cellClassName && props.cellClassName(cellDate)\n          row[props.showWeekNumber ? j + 1 : j] = cell\n        }\n\n        if (props.selectionMode === 'week') {\n          const start = props.showWeekNumber ? 1 : 0\n          const end = props.showWeekNumber ? 7 : 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      return rows_\n    })\n\n    const isCurrent = (cell): boolean => {\n      return (\n        props.selectionMode === 'day' &&\n        (cell.type === 'normal' || cell.type === 'today') &&\n        cellMatchesDate(cell, props.parsedValue)\n      )\n    }\n\n    const cellMatchesDate = (cell, date) => {\n      if (!date) return false\n      return dayjs(date)\n        .locale(lang.value)\n        .isSame(props.date.date(Number(cell.text)), 'day')\n    }\n\n    const getCellClasses = (cell) => {\n      const classes: string[] = []\n      if ((cell.type === 'normal' || cell.type === 'today') && !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        (cell.type === 'normal' ||\n          cell.type === 'today' ||\n          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\n    const getDateOfCell = (row, column) => {\n      const offsetFromStart =\n        row * 7 + (column - (props.showWeekNumber ? 1 : 0)) - offsetDay.value\n      return startDate.value.add(offsetFromStart, 'day')\n    }\n\n    const handleMouseMove = (event) => {\n      if (!props.rangeState.selecting) return\n\n      let target = event.target\n      if (target.tagName === 'SPAN') {\n        target = target.parentNode.parentNode\n      }\n      if (target.tagName === 'DIV') {\n        target = target.parentNode\n      }\n      if (target.tagName !== 'TD') return\n\n      const row = target.parentNode.rowIndex - 1\n      const column = target.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        ctx.emit('changerange', {\n          selecting: true,\n          endDate: getDateOfCell(row, column),\n        })\n      }\n    }\n\n    const handleClick = (event) => {\n      let target = event.target\n\n      while (target) {\n        if (target.tagName === 'TD') {\n          break\n        }\n        target = target.parentNode\n      }\n\n      if (!target || target.tagName !== 'TD') return\n\n      const row = target.parentNode.rowIndex - 1\n      const column = target.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) {\n          ctx.emit('pick', { minDate: newDate, maxDate: null })\n          ctx.emit('select', true)\n        } else {\n          if (newDate >= props.minDate) {\n            ctx.emit('pick', { minDate: props.minDate, maxDate: newDate })\n          } else {\n            ctx.emit('pick', { minDate: newDate, maxDate: props.minDate })\n          }\n          ctx.emit('select', false)\n        }\n      } else if (props.selectionMode === 'day') {\n        ctx.emit('pick', newDate)\n      } else if (props.selectionMode === 'week') {\n        const weekNumber = newDate.week()\n        const value = `${newDate.year()}w${weekNumber}`\n        ctx.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              (_) => _.valueOf() !== newDate.valueOf()\n            )\n          : castArray(props.parsedValue).concat([newDate])\n        ctx.emit('pick', newValue)\n      }\n    }\n\n    const isWeekActive = (cell) => {\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, 10))\n\n      if (props.parsedValue && !Array.isArray(props.parsedValue)) {\n        const dayOffset =\n          ((props.parsedValue.day() - firstDayOfWeek + 7) % 7) - 1\n        const weekDate = props.parsedValue.subtract(dayOffset, 'day')\n        return weekDate.isSame(newDate, 'day')\n      }\n      return false\n    }\n\n    return {\n      handleMouseMove,\n      t,\n      rows,\n      isWeekActive,\n      getCellClasses,\n      WEEKS,\n      handleClick,\n    }\n  },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_normalizeClass","_createVNode"],"mappings":"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"}