{"version":3,"file":"date-table.vue2.mjs","sources":["../../../../../packages/components/calendar/src/date-table.vue"],"sourcesContent":["<template>\n  <table :class=\"[nsTable.b(), nsTable.is('range', isInRange)]\" cellspacing=\"0\" cellpadding=\"0\">\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 { useNamespace } from '@element-ultra/hooks'\nimport { rangeArr } from '@element-ultra/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 = ['日', '一', '二', '三', '四', '五', '六'] 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 nsTable = useNamespace('calendar-table')\n    const nsDay = useNamespace('calendar-day')\n\n    const now = dayjs().locale('zh-cn')\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(end.date() - start.date() + 1).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(day => ({\n          text: day,\n          type: 'current'\n        }))\n        days = [...prevMonthDays, ...currentMonthDays]\n        const nextMonthDays: Cell[] = rangeArr(42 - days.length).map((_, index) => ({\n          text: index + 1,\n          type: 'next'\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\n      } else {\n        return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start))\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":[],"mappings":"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"}