{"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(nsDay.is('selected'))\n        }\n        if (date.isSame(now, 'day')) {\n          classes.push(nsDay.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":["_createElementBlock","_normalizeClass","_openBlock","_Fragment","_renderList","_toDisplayString","_createElementVNode","_renderSlot"],"mappings":"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"}