{"version":3,"file":"date-range-panel.vue2.mjs","sources":["../../../../../../../packages/components/date-picker/src/panels/date-range-panel.vue"],"sourcesContent":["<script lang=\"ts\">\n  import type { PropType } from 'vue'\n  import { computed, defineComponent, ref, toRefs, watch } from 'vue'\n  import { getNamespace } from '../../../../utils/global-config'\n  import { diffOfMonth, dateFormat, diffOfYear, getYMD, compareMonth, isSameMonth } from '../utils'\n  import type { DateCell } from '../types'\n  import { useDateRows } from '../hooks/use-date-rows'\n  import PanelBody from './layout/body.vue'\n  import PanelHeader from './layout/header.vue'\n  import PanelWeek from './layout/week.vue'\n\n  export default defineComponent({\n    name: 'DateRangePanel',\n    components: {\n      PanelHeader,\n      PanelBody,\n      PanelWeek\n    },\n    props: {\n      dayStartOfWeek: {\n        type: Number,\n        default: 0\n      },\n      modelValue: {\n        type: Array as PropType<Date[]>,\n        default: () => []\n      },\n      disabledDate: {\n        type: Function,\n        default: undefined\n      }\n    },\n    emits: ['update:modelValue'],\n    setup(props, { emit }) {\n      const ns = getNamespace('date-picker')\n\n      const { dayStartOfWeek } = toRefs(props)\n      const leftDate = ref<Date>()\n      const rightDate = ref<Date>()\n      const dateRange = ref<Date[]>([])\n      const dateModel = ref<Date[]>([])\n      const { disabledDate } = toRefs(props)\n\n      const { rows: leftRows, weeks: leftWeeks } = useDateRows({\n        date: leftDate,\n        dayStartOfWeek,\n        dateModel,\n        dateRange,\n        disabledDate\n      })\n\n      const { rows: rightRows, weeks: rightWeeks } = useDateRows({\n        date: rightDate,\n        dayStartOfWeek,\n        dateModel,\n        dateRange,\n        disabledDate\n      })\n\n      const headerContent = computed(() => {\n        return {\n          left: dateFormat(leftDate.value, 'yyyy 年 M 月'),\n          right: dateFormat(rightDate.value, 'yyyy 年 M 月')\n        }\n      })\n\n      const actions = computed(() => {\n        const [ly, lm] = getYMD(leftDate.value)\n        const [ry, rm] = getYMD(rightDate.value)\n        const left: string[] = []\n        const right: string[] = []\n        if (ly === ry && lm === rm - 1) {\n          left.push('prev', 'prevSuper')\n          right.push('next', 'nextSuper')\n        } else if ((ly === ry && lm < rm - 1) || (ly === ry - 1 && lm >= rm)) {\n          left.push('prev', 'prevSuper', 'next')\n          right.push('prev', 'next', 'nextSuper')\n        } else {\n          left.push('prev', 'prevSuper', 'next', 'nextSuper')\n          right.push('prev', 'prevSuper', 'next', 'nextSuper')\n        }\n        return {\n          left,\n          right\n        }\n      })\n\n      const leftDateOps = {\n        handleYearChange(count: number) {\n          leftDate.value = diffOfYear(leftDate.value!, count)\n        },\n        handleMonthChange(count: number) {\n          leftDate.value = diffOfMonth(leftDate.value!, count)\n          console.log(leftDate.value)\n        }\n      }\n\n      const rightDateOps = {\n        handleYearChange(count: number) {\n          rightDate.value = diffOfYear(rightDate.value!, count)\n        },\n        handleMonthChange(count: number) {\n          rightDate.value = diffOfMonth(rightDate.value!, count)\n        }\n      }\n\n      const handleCellClick = (cell: DateCell) => {\n        if (dateModel.value.length < 2) {\n          dateRange.value.push(cell.date)\n          dateModel.value.push(cell.date)\n        } else {\n          dateRange.value = [cell.date]\n          dateModel.value = [cell.date]\n        }\n\n        if (dateModel.value.length === 2) {\n          emit('update:modelValue', dateModel.value)\n        }\n      }\n\n      const handleCellMouseenter = (cell: DateCell) => {\n        if (dateModel.value.length === 1) {\n          const origin = dateRange.value.slice(0, 1)\n          origin.push(cell.date)\n          dateRange.value = origin\n        }\n      }\n\n      watch(\n        () => props.modelValue,\n        (newDate) => {\n          const [l = new Date(), r = diffOfMonth(l, 1)] = newDate ?? []\n          const leftRet = compareMonth(l, leftDate.value)\n          if (leftRet) {\n            leftDate.value = leftRet\n          }\n          const rightRet = compareMonth(r, rightDate.value)\n          if (isSameMonth(l, r)) {\n            rightDate.value = diffOfMonth(l, 1)\n          } else if (rightRet) {\n            rightDate.value = rightRet\n          }\n          dateRange.value = newDate.slice()\n          dateModel.value = newDate.slice()\n        },\n        {\n          immediate: true\n        }\n      )\n\n      return {\n        ns,\n        leftRows,\n        leftWeeks,\n        rightRows,\n        rightWeeks,\n        headerContent,\n        handleCellClick,\n        handleCellMouseenter,\n        leftDateOps,\n        rightDateOps,\n        actions\n      }\n    }\n  })\n</script>\n\n<template>\n  <div :class=\"[`${ns}__range`]\">\n    <div :class=\"[`${ns}__range-left`]\">\n      <PanelHeader\n        :content=\"headerContent.left\"\n        :actions=\"actions.left\"\n        @prev-super=\"leftDateOps.handleYearChange(-1)\"\n        @prev=\"leftDateOps.handleMonthChange(-1)\"\n        @next=\"leftDateOps.handleMonthChange(1)\"\n        @next-super=\"leftDateOps.handleYearChange(1)\"\n      />\n      <PanelWeek :weeks=\"leftWeeks\" />\n      <PanelBody\n        :rows=\"leftRows\"\n        @on-cell-click=\"handleCellClick\"\n        @on-cell-mouseenter=\"handleCellMouseenter\"\n      >\n        <template #cell=\"scoped\">\n          <slot name=\"cell\" v-bind=\"scoped\"></slot>\n        </template>\n      </PanelBody>\n    </div>\n    <div :class=\"[`${ns}__panel-right`]\">\n      <PanelHeader\n        :content=\"headerContent.right\"\n        :actions=\"actions.right\"\n        @prev-super=\"rightDateOps.handleYearChange(-1)\"\n        @prev=\"rightDateOps.handleMonthChange(-1)\"\n        @next=\"rightDateOps.handleMonthChange(1)\"\n        @next-super=\"rightDateOps.handleYearChange(1)\"\n      />\n      <PanelWeek :weeks=\"rightWeeks\" />\n      <PanelBody\n        :rows=\"rightRows\"\n        @on-cell-click=\"handleCellClick\"\n        @on-cell-mouseenter=\"handleCellMouseenter\"\n      >\n        <template #cell=\"scoped\">\n          <slot name=\"cell\" v-bind=\"scoped\"></slot>\n        </template>\n      </PanelBody>\n    </div>\n  </div>\n</template>\n"],"names":[],"mappings":"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"}