{"version":3,"file":"date-range-panel.vue.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":["_resolveComponent","_normalizeClass","actions","leftDateOps","leftWeeks","_createVNode","leftRows","handleCellClick","_createElementVNode","rightDateOps","rightWeeks","rightRows"],"mappings":"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"}