{"version":3,"file":"panel-month-range.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/panel-month-range.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[\n      ppNs.b(),\n      drpNs.b(),\n      {\n        'has-sidebar': Boolean($slots.sidebar) || hasShortcuts,\n      },\n    ]\"\n  >\n    <div :class=\"ppNs.e('body-wrapper')\">\n      <slot name=\"sidebar\" :class=\"ppNs.e('sidebar')\" />\n      <div v-if=\"hasShortcuts\" :class=\"ppNs.e('sidebar')\">\n        <button\n          v-for=\"(shortcut, key) in shortcuts\"\n          :key=\"key\"\n          type=\"button\"\n          :class=\"ppNs.e('shortcut')\"\n          @click=\"handleShortcutClick(shortcut)\"\n        >\n          {{ shortcut.text }}\n        </button>\n      </div>\n      <div :class=\"ppNs.e('body')\">\n        <div :class=\"[ppNs.e('content'), drpNs.e('content')]\" class=\"is-left\">\n          <div :class=\"drpNs.e('header')\">\n            <b-row :gutter=\"1\" :class=\"drpNs.e('year-header')\">\n              <b-col span=\"auto\">\n                <b-button\n                  ghost\n                  small\n                  :class=\"ppNs.e('icon-btn')\"\n                  class=\"arrow-left\"\n                  :icon=\"ArrowLeft\"\n                  @click=\"leftPrevYear\"\n                />\n              </b-col>\n              <b-col>\n                <div :class=\"drpNs.e('header-label')\">{{ leftLabel }}</div>\n              </b-col>\n              <b-col span=\"auto\">\n                <b-button\n                  v-if=\"unlinkPanels\"\n                  ghost\n                  small\n                  :disabled=\"!enableYearArrow\"\n                  :class=\"[\n                    ppNs.e('icon-btn'),\n                    { [ppNs.is('disabled')]: !enableYearArrow },\n                  ]\"\n                  :icon=\"ArrowRight\"\n                  class=\"arrow-right\"\n                  @click=\"leftNextYear\"\n                />\n                <b-spacer v-else :width=\"32\" />\n              </b-col>\n            </b-row>\n          </div>\n          <month-table\n            selection-mode=\"range\"\n            :date=\"leftDate\"\n            :min-date=\"minDate\"\n            :max-date=\"maxDate\"\n            :range-state=\"rangeState\"\n            :disabled-date=\"disabledDate\"\n            @changerange=\"handleChangeRange\"\n            @pick=\"handleRangePick\"\n            @select=\"onSelect\"\n          />\n        </div>\n        <div :class=\"[ppNs.e('content'), drpNs.e('content')]\" class=\"is-right\">\n          <div :class=\"drpNs.e('header')\">\n            <b-row :gutter=\"1\" :class=\"drpNs.e('year-header')\">\n              <b-col span=\"auto\">\n                <b-button\n                  v-if=\"unlinkPanels\"\n                  ghost\n                  small\n                  :disabled=\"!enableYearArrow\"\n                  :class=\"[\n                    ppNs.e('icon-btn'),\n                    { 'is-disabled': !enableYearArrow },\n                  ]\"\n                  class=\"arrow-left\"\n                  :icon=\"ArrowLeft\"\n                  @click=\"rightPrevYear\"\n                />\n                <b-spacer v-else :width=\"32\" />\n              </b-col>\n              <b-col>\n                <div :class=\"drpNs.e('header-label')\">{{ rightLabel }}</div>\n              </b-col>\n              <b-col span=\"auto\">\n                <b-button\n                  ghost\n                  small\n                  :class=\"ppNs.e('icon-btn')\"\n                  class=\"arrow-right\"\n                  :icon=\"ArrowRight\"\n                  @click=\"rightNextYear\"\n                />\n              </b-col>\n            </b-row>\n          </div>\n          <month-table\n            selection-mode=\"range\"\n            :date=\"rightDate\"\n            :min-date=\"minDate\"\n            :max-date=\"maxDate\"\n            :range-state=\"rangeState\"\n            :disabled-date=\"disabledDate\"\n            @changerange=\"handleChangeRange\"\n            @pick=\"handleRangePick\"\n            @select=\"onSelect\"\n          />\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, toRef } from 'vue'\nimport dayjs from 'dayjs'\nimport { BButton } from '@bigin/components/button'\nimport { BSpacer } from '@bigin/components/container'\nimport { BRow } from '@bigin/components/row'\nimport { BCol } from '@bigin/components/col'\nimport { useLocale } from '@bigin/hooks'\nimport { ArrowLeft, ArrowRight } from '@bigin/icons-vue'\nimport {\n  panelMonthRangeEmits,\n  panelMonthRangeProps,\n} from '../props/panel-month-range'\nimport { useMonthRangeHeader } from '../composables/use-month-range-header'\nimport { useRangePicker } from '../composables/use-range-picker'\nimport MonthTable from './basic-month-table.vue'\n\nimport type { Dayjs } from 'dayjs'\n\ndefineOptions({\n  name: 'DatePickerMonthRange',\n})\n\nconst props = defineProps(panelMonthRangeProps)\nconst emit = defineEmits(panelMonthRangeEmits)\nconst unit = 'year'\n\nconst { lang } = useLocale()\nconst pickerBase = inject('EP_PICKER_BASE') as any\nconst { shortcuts, disabledDate, format } = pickerBase.props\nconst defaultValue = toRef(pickerBase.props, 'defaultValue')\nconst leftDate = ref(dayjs().locale(lang.value))\nconst rightDate = ref(dayjs().locale(lang.value).add(1, unit))\n\nconst {\n  minDate,\n  maxDate,\n  rangeState,\n  ppNs,\n  drpNs,\n\n  handleChangeRange,\n  handleRangeConfirm,\n  handleShortcutClick,\n  onSelect,\n} = useRangePicker(props, {\n  defaultValue,\n  leftDate,\n  rightDate,\n  unit,\n  onParsedValueChanged,\n})\n\nconst hasShortcuts = computed(() => !!shortcuts.length)\n\nconst {\n  leftPrevYear,\n  rightNextYear,\n  leftNextYear,\n  rightPrevYear,\n  leftLabel,\n  rightLabel,\n  leftYear,\n  rightYear,\n} = useMonthRangeHeader({\n  unlinkPanels: toRef(props, 'unlinkPanels'),\n  leftDate,\n  rightDate,\n})\n\nconst enableYearArrow = computed(() => {\n  return props.unlinkPanels && rightYear.value > leftYear.value + 1\n})\n\ntype RangePickValue = {\n  minDate: Dayjs\n  maxDate: Dayjs\n}\n\nconst handleRangePick = (val: RangePickValue, close = true) => {\n  // const defaultTime = props.defaultTime || []\n  // const minDate_ = modifyWithTimeString(val.minDate, defaultTime[0])\n  // const maxDate_ = modifyWithTimeString(val.maxDate, defaultTime[1])\n  // todo\n  const minDate_ = val.minDate\n  const maxDate_ = val.maxDate\n  if (maxDate.value === maxDate_ && minDate.value === minDate_) {\n    return\n  }\n  maxDate.value = maxDate_\n  minDate.value = minDate_\n\n  if (!close) return\n  handleRangeConfirm()\n}\n\nconst formatToString = (days: Dayjs[]) => {\n  return days.map((day) => day.format(format))\n}\n\nfunction onParsedValueChanged(\n  minDate: Dayjs | undefined,\n  maxDate: Dayjs | undefined\n) {\n  if (props.unlinkPanels && maxDate) {\n    const minDateYear = minDate?.year() || 0\n    const maxDateYear = maxDate.year()\n    rightDate.value =\n      minDateYear === maxDateYear ? maxDate.add(1, unit) : maxDate\n  } else {\n    rightDate.value = leftDate.value.add(1, unit)\n  }\n}\n\nemit('set-picker-option', ['formatToString', formatToString])\n</script>\n"],"names":["minDate","maxDate"],"mappings":"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"}