{"version":3,"file":"month-range-panel.vue.mjs","sources":["../../../../../../../packages/components/date-picker/src/panels/month-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 { dateFormat, diffOfYear, getYMD, compareYear, isSameYear } from '../utils'\n  import type { DateCell } from '../types'\n  import { useMonthRows } from '../hooks/use-month-rows'\n\n  import PanelBody from './layout/body.vue'\n  import PanelHeader from './layout/header.vue'\n\n  export default defineComponent({\n    name: 'MonthRangePanel',\n    components: {\n      PanelHeader,\n      PanelBody\n    },\n    props: {\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 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 } = useMonthRows({\n        date: leftDate,\n        dateModel,\n        dateRange,\n        disabledDate\n      })\n\n      const { rows: rightRows } = useMonthRows({\n        date: rightDate,\n        dateModel,\n        dateRange,\n        disabledDate\n      })\n\n      const headerContent = computed(() => {\n        return {\n          left: dateFormat(leftDate.value, 'yyyy 年'),\n          right: dateFormat(rightDate.value, 'yyyy 年')\n        }\n      })\n\n      const actions = computed(() => {\n        const [ly] = getYMD(leftDate.value)\n        const [ry] = getYMD(rightDate.value)\n        const left: string[] = []\n        const right: string[] = []\n        if (ly === ry - 1) {\n          left.push('prevSuper')\n          right.push('nextSuper')\n        } else {\n          left.push('prevSuper', 'nextSuper')\n          right.push('prevSuper', '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 = diffOfYear(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 = diffOfYear(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.slice())\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 = diffOfYear(l, 1)] = newDate ?? []\n          const leftRet = compareYear(l, leftDate.value)\n          if (leftRet) {\n            leftDate.value = leftRet\n          }\n          const rightRet = compareYear(r, rightDate.value)\n          if (isSameYear(l, r)) {\n            rightDate.value = diffOfYear(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        rightRows,\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        :actions=\"actions.left\"\n        :content=\"headerContent.left\"\n        @prev-super=\"leftDateOps.handleYearChange(-1)\"\n        @next-super=\"leftDateOps.handleYearChange(1)\"\n      />\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        :actions=\"actions.right\"\n        :content=\"headerContent.right\"\n        @prev-super=\"rightDateOps.handleYearChange(-1)\"\n        @next-super=\"rightDateOps.handleYearChange(1)\"\n      />\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","headerContent","leftRows","_createVNode","handleCellClick","_createElementVNode","rightRows"],"mappings":";;;;;;+BA2JEA,iBAmCM,WAAA,CAAA,CAAA;;;;MAlCJ,OAgBMC,cAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,WAAA,CAAA,CAAA;AAAA,KAAA;AAAA;;;;UAfJ,OAKEA,cAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,gBAAA,CAAA,CAAA;AAAA,SAAA;AAAA;sBAHUC,sBAAkB,EAAA;AAAA,YAC3B,OAAA,EAAU,KAAA,OAAA,CAAA,IAAA;AAAA,YACV,OAAA,EAAU,KAAA,aAAA,CAAA,IAAA;AAAA,YAAA,WAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,YAEb,WAQY,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,aAPT,IAAMC,EAAAA,CAAAA,EAAQ,CAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AAAA,UAAAC,YACd,oBAAeC,EAAAA;AAAAA,YACf,MAAA,IAAA,CAAA,QAAA;AAAA,YAAA,eAAA,IAAA,CAAA,eAAA;AAAA,YAEU,oBAAM,IAAM,CAAA,oBAAA;AAAA,WAAA,EAAA;AAAA;;;;;aAqBrB,CAAA,EAAA,CAAA,MAAA,EAAA,eAAA,EAAA,oBAAA,CAAA,CAAA;AAAA,SAAA;AAAA,QAhBA,CAAA;AAAA;AAAA,OAAK;AAAA,MAAAC,kBAAA;AAAA;;UACT,OAKEL,cAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,SAAA;AAAA;sBAHUC,sBAAmB,EAAA;AAAA,YAC5B,OAAA,EAAU,KAAA,OAAA,CAAA,KAAA;AAAA,YACV,OAAA,EAAU,KAAA,aAAA,CAAA,KAAA;AAAA,YAAA,WAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,YAEb,WAQY,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,aAPT,IAAMK,EAAAA,CAAAA,EAAS,CAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AAAA,UAAAH,YACf,oBAAeC,EAAAA;AAAAA,YACf,MAAA,IAAA,CAAA,SAAA;AAAA,YAAA,eAAA,IAAA,CAAA,eAAA;AAAA,YAEU,oBAAM,IAAM,CAAA,oBAAA;AAAA,WAAA,EAAA;AAAA;;;;;;;;;;;;;;;;;;;"}