{"version":3,"file":"date-table2.mjs","sources":["../../../../../../packages/components/calendar/src/date-table.vue"],"sourcesContent":["<template>\n  <table\n    :class=\"[nsTable.b(), nsTable.is('range', isInRange)]\"\n    cellspacing=\"0\"\n    cellpadding=\"0\"\n  >\n    <thead v-if=\"!hideHeader\">\n      <th v-for=\"day in weekDays\" :key=\"day\">{{ day }}</th>\n    </thead>\n\n    <tbody>\n      <tr\n        v-for=\"(row, index) in rows\"\n        :key=\"index\"\n        :class=\"{\n          [nsTable.e('row')]: true,\n          [nsTable.em('row', 'hide-border')]: index === 0 && hideHeader,\n        }\"\n      >\n        <td\n          v-for=\"(cell, key) in row\"\n          :key=\"key\"\n          :class=\"getCellClass(cell)\"\n          @click=\"handlePickDay(cell)\"\n        >\n          <div :class=\"nsDay.b()\">\n            <slot name=\"dateCell\" :data=\"getSlotData(cell)\">\n              <span>{{ cell.text }}</span>\n            </slot>\n          </div>\n        </td>\n      </tr>\n    </tbody>\n  </table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport dayjs from 'dayjs'\nimport localeData from 'dayjs/plugin/localeData'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport { rangeArr } from '@element-plus/components/time-picker'\nimport { dateTableProps, dateTableEmits } from './date-table'\nimport type { Dayjs } from 'dayjs'\ndayjs.extend(localeData)\n\ntype CellType = 'next' | 'prev' | 'current'\ninterface Cell {\n  text: number\n  type: CellType\n}\n\nconst WEEK_DAYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'] as const\n\nexport const getPrevMonthLastDays = (date: Dayjs, count: number) => {\n  const lastDay = date.subtract(1, 'month').endOf('month').date()\n  return rangeArr(count).map((_, index) => lastDay - (count - index - 1))\n}\n\nexport const getMonthDays = (date: Dayjs) => {\n  const days = date.daysInMonth()\n  return rangeArr(days).map((_, index) => index + 1)\n}\n\nconst toNestedArr = (days: Cell[]) =>\n  rangeArr(days.length / 7).map((index) => {\n    const start = index * 7\n    return days.slice(start, start + 7)\n  })\n\nexport default defineComponent({\n  props: dateTableProps,\n  emits: dateTableEmits,\n\n  setup(props, { emit }) {\n    const { t, lang } = useLocale()\n    const nsTable = useNamespace('calendar-table')\n    const nsDay = useNamespace('calendar-day')\n\n    const now = dayjs().locale(lang.value)\n    // todo better way to get Day.js locale object\n    const firstDayOfWeek: number = (now as any).$locale().weekStart || 0\n\n    const isInRange = computed(() => !!props.range && !!props.range.length)\n\n    const rows = computed(() => {\n      let days: Cell[] = []\n      if (isInRange.value) {\n        const [start, end] = props.range!\n        const currentMonthRange: Cell[] = rangeArr(\n          end.date() - start.date() + 1\n        ).map((index) => ({\n          text: start.date() + index,\n          type: 'current',\n        }))\n\n        let remaining = currentMonthRange.length % 7\n        remaining = remaining === 0 ? 0 : 7 - remaining\n        const nextMonthRange: Cell[] = rangeArr(remaining).map((_, index) => ({\n          text: index + 1,\n          type: 'next',\n        }))\n        days = currentMonthRange.concat(nextMonthRange)\n      } else {\n        const firstDay = props.date.startOf('month').day() || 7\n        const prevMonthDays: Cell[] = getPrevMonthLastDays(\n          props.date,\n          firstDay - firstDayOfWeek\n        ).map((day) => ({\n          text: day,\n          type: 'prev',\n        }))\n        const currentMonthDays: Cell[] = getMonthDays(props.date).map(\n          (day) => ({\n            text: day,\n            type: 'current',\n          })\n        )\n        days = [...prevMonthDays, ...currentMonthDays]\n        const nextMonthDays: Cell[] = rangeArr(42 - days.length).map(\n          (_, index) => ({\n            text: index + 1,\n            type: 'next',\n          })\n        )\n        days = days.concat(nextMonthDays)\n      }\n      return toNestedArr(days)\n    })\n\n    const weekDays = computed(() => {\n      const start = firstDayOfWeek\n      if (start === 0) {\n        return WEEK_DAYS.map((_) => t(`el.datepicker.weeks.${_}`))\n      } else {\n        return WEEK_DAYS.slice(start)\n          .concat(WEEK_DAYS.slice(0, start))\n          .map((_) => t(`el.datepicker.weeks.${_}`))\n      }\n    })\n\n    const getFormattedDate = (day: number, type: CellType): Dayjs => {\n      switch (type) {\n        case 'prev':\n          return props.date.startOf('month').subtract(1, 'month').date(day)\n        case 'next':\n          return props.date.startOf('month').add(1, 'month').date(day)\n        case 'current':\n          return props.date.date(day)\n      }\n    }\n\n    const getCellClass = ({ text, type }: Cell) => {\n      const classes: string[] = [type]\n      if (type === 'current') {\n        const date = getFormattedDate(text, type)\n        if (date.isSame(props.selectedDay, 'day')) {\n          classes.push('is-selected')\n        }\n        if (date.isSame(now, 'day')) {\n          classes.push('is-today')\n        }\n      }\n      return classes\n    }\n\n    const handlePickDay = ({ text, type }: Cell) => {\n      const date = getFormattedDate(text, type)\n      emit('pick', date)\n    }\n\n    const getSlotData = ({ text, type }: Cell) => {\n      const day = getFormattedDate(text, type)\n      return {\n        isSelected: day.isSame(props.selectedDay),\n        type: `${type}-month`,\n        day: day.format('YYYY-MM-DD'),\n        date: day.toDate(),\n      }\n    }\n\n    return {\n      isInRange,\n      weekDays,\n      rows,\n      getCellClass,\n      handlePickDay,\n      getSlotData,\n\n      nsTable,\n      nsDay,\n    }\n  },\n})\n</script>\n"],"names":["_openBlock","_Fragment","_renderList","_createCommentVNode","_createElementBlock","_normalizeClass"],"mappings":"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"}