{"version":3,"file":"panel-date-range.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/panel-date-range.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[\n      ppNs.b(),\n      drpNs.b(),\n      {\n        'has-sidebar': $slots.sidebar || hasShortcuts,\n        'has-time': showTime,\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                <span :class=\"drpNs.e('header-label')\">{{\n                  leftYearLabel\n                }}</span>\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                    { 'is-disabled': !enableYearArrow },\n                  ]\"\n                  class=\"arrow-right\"\n                  :icon=\"ArrowRight\"\n                  @click=\"leftNextYear\"\n                />\n                <b-spacer v-else :width=\"32\" />\n              </b-col>\n            </b-row>\n            <b-row :gutter=\"1\" :class=\"drpNs.e('month-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=\"leftPrevMonth\"\n                />\n              </b-col>\n              <b-col>\n                <span :class=\"drpNs.e('header-label')\">{{\n                  leftMonthLabel\n                }}</span>\n              </b-col>\n              <b-col span=\"auto\">\n                <b-button\n                  v-if=\"unlinkPanels\"\n                  ghost\n                  small\n                  :disabled=\"!enableMonthArrow\"\n                  :class=\"[\n                    ppNs.e('icon-btn'),\n                    { 'is-disabled': !enableMonthArrow },\n                  ]\"\n                  class=\"arrow-right\"\n                  :icon=\"ArrowRight\"\n                  @click=\"leftNextMonth\"\n                />\n                <b-spacer v-else :width=\"32\" />\n              </b-col>\n            </b-row>\n          </div>\n          <date-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            :cell-class-name=\"cellClassName\"\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                <span :class=\"drpNs.e('header-label')\">{{\n                  rightYearLabel\n                }}</span>\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            <b-row :gutter=\"1\" :class=\"drpNs.e('month-header')\">\n              <b-col span=\"auto\">\n                <b-button\n                  v-if=\"unlinkPanels\"\n                  ghost\n                  small\n                  :disabled=\"!enableMonthArrow\"\n                  :class=\"[\n                    ppNs.e('icon-btn'),\n                    { 'is-disabled': !enableMonthArrow },\n                  ]\"\n                  class=\"arrow-left\"\n                  :icon=\"ArrowLeft\"\n                  @click=\"rightPrevMonth\"\n                />\n                <b-spacer v-else :width=\"32\" />\n              </b-col>\n              <b-col>\n                <span :class=\"drpNs.e('header-label')\">{{\n                  rightMonthLabel\n                }}</span>\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=\"rightNextMonth\"\n                />\n              </b-col>\n            </b-row>\n          </div>\n          <date-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            :cell-class-name=\"cellClassName\"\n            @changerange=\"handleChangeRange\"\n            @pick=\"handleRangePick\"\n            @select=\"onSelect\"\n          />\n        </div>\n      </div>\n      <div v-if=\"showTime\" :class=\"drpNs.e('time-panel')\">\n        <div :class=\"drpNs.e('time-panel-header')\">\n          {{ t('b.datepicker.startTime') }}\n        </div>\n        <time-pick-panel\n          v-if=\"!btnDisabled\"\n          visible\n          hide-actions\n          :format=\"timeFormat\"\n          datetime-role=\"start\"\n          :time-arrow-control=\"arrowControl\"\n          :parsed-value=\"leftDate\"\n          @pick=\"handleMinTimePick\"\n        />\n        <b-spacer v-else :width=\"160\" :height=\"192\">\n          <div :class=\"drpNs.e('time-panel-message')\">\n            {{ t('b.datepicker.timePanelEmptyMessage') }}\n          </div>\n        </b-spacer>\n        <div :class=\"drpNs.e('time-panel-header')\">\n          {{ t('b.datepicker.endTime') }}\n        </div>\n        <time-pick-panel\n          v-if=\"!btnDisabled\"\n          visible\n          hide-actions\n          :format=\"timeFormat\"\n          datetime-role=\"end\"\n          :time-arrow-control=\"arrowControl\"\n          :parsed-value=\"rightDate\"\n          @pick=\"handleMaxTimePick\"\n        />\n        <b-spacer v-else :width=\"160\" :height=\"192\">\n          <div :class=\"drpNs.e('time-panel-message')\">\n            {{ t('b.datepicker.timePanelEmptyMessage') }}\n          </div>\n        </b-spacer>\n      </div>\n    </div>\n    <div v-if=\"showTime\" :class=\"[ppNs.e('footer'), drpNs.e('footer')]\">\n      <b-row :gutter=\"2\" justify=\"end\">\n        <b-col span=\"auto\">\n          <b-button\n            v-if=\"clearable\"\n            small\n            :class=\"ppNs.e('link-btn')\"\n            @click=\"handleClear\"\n          >\n            {{ t('b.datepicker.clear') }}\n          </b-button>\n        </b-col>\n        <b-col span=\"auto\">\n          <b-button\n            primary\n            small\n            :class=\"ppNs.e('link-btn')\"\n            :disabled=\"btnDisabled\"\n            @click=\"handleRangeConfirm(false)\"\n          >\n            {{ t('b.datepicker.confirm') }}\n          </b-button>\n        </b-col>\n      </b-row>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, toRef, unref } from 'vue'\nimport dayjs from 'dayjs'\nimport { isArray } from '@bigin/utils'\nimport { useLocale } from '@bigin/hooks'\nimport BButton from '@bigin/components/button'\nimport {\n  TimePickPanel,\n  extractDateFormat,\n  extractTimeFormat,\n} from '@bigin/components/time-picker'\nimport { BSpacer } from '@bigin/components/container'\nimport { BRow } from '@bigin/components/row'\nimport { BCol } from '@bigin/components/col'\nimport { ArrowLeft, ArrowRight } from '@bigin/icons-vue'\nimport { panelDateRangeProps } from '../props/panel-date-range'\nimport { useRangePicker } from '../composables/use-range-picker'\nimport { getDefaultValue, isValidRange } from '../utils'\nimport DateTable from './basic-date-table.vue'\n\nimport type { Dayjs } from 'dayjs'\n\ntype ChangeType = 'min' | 'max'\ntype UserInput = {\n  min: string | null\n  max: string | null\n}\n\nconst props = defineProps(panelDateRangeProps)\nconst emit = defineEmits([\n  'pick',\n  'set-picker-option',\n  'calendar-change',\n  'panel-change',\n])\n\nconst unit = 'month'\n// FIXME: fix the type for ep picker\nconst pickerBase = inject('EP_PICKER_BASE') as any\nconst {\n  disabledDate,\n  cellClassName,\n  format,\n  defaultTime,\n  arrowControl,\n  clearable,\n} = pickerBase.props\nconst shortcuts = toRef(pickerBase.props, 'shortcuts')\nconst defaultValue = toRef(pickerBase.props, 'defaultValue')\nconst { lang } = useLocale()\nconst leftDate = ref<Dayjs>(dayjs().locale(lang.value))\nconst rightDate = ref<Dayjs>(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  t,\n} = useRangePicker(props, {\n  defaultValue,\n  leftDate,\n  rightDate,\n  unit,\n  onParsedValueChanged,\n})\n\nconst dateUserInput = ref<UserInput>({\n  min: null,\n  max: null,\n})\n\nconst timeUserInput = ref<UserInput>({\n  min: null,\n  max: null,\n})\n\n// const rightLabel = computed(() => {\n//   return `${rightDate.value.year()} ${t('b.datepicker.year')} ${t(\n//     `b.datepicker.month${rightDate.value.month() + 1}`\n//   )}`\n// })\n\nconst leftYearLabel = computed(() => leftDate.value.year())\nconst leftMonthLabel = computed(() =>\n  t(`b.datepicker.month${leftDate.value.month() + 1}`)\n)\nconst rightYearLabel = computed(() => rightDate.value.year())\nconst rightMonthLabel = computed(() =>\n  t(`b.datepicker.month${rightDate.value.month() + 1}`)\n)\n\nconst leftYear = computed(() => {\n  return leftDate.value.year()\n})\n\nconst leftMonth = computed(() => {\n  return leftDate.value.month()\n})\n\nconst rightYear = computed(() => {\n  return rightDate.value.year()\n})\n\nconst rightMonth = computed(() => {\n  return rightDate.value.month()\n})\n\nconst hasShortcuts = computed(() => !!shortcuts.value.length)\n\nconst minVisibleDate = computed(() => {\n  if (dateUserInput.value.min !== null) return dateUserInput.value.min\n  if (minDate.value) return minDate.value.format(dateFormat.value)\n  return ''\n})\n\nconst maxVisibleDate = computed(() => {\n  if (dateUserInput.value.max !== null) return dateUserInput.value.max\n  if (maxDate.value || minDate.value)\n    return (maxDate.value || minDate.value)!.format(dateFormat.value)\n  return ''\n})\n\nconst minVisibleTime = computed(() => {\n  if (timeUserInput.value.min !== null) return timeUserInput.value.min\n  if (minDate.value) return minDate.value.format(timeFormat.value)\n  return ''\n})\n\nconst maxVisibleTime = computed(() => {\n  if (timeUserInput.value.max !== null) return timeUserInput.value.max\n  if (maxDate.value || minDate.value)\n    return (maxDate.value || minDate.value)!.format(timeFormat.value)\n  return ''\n})\n\nconst timeFormat = computed(() => {\n  return extractTimeFormat(format)\n})\n\nconst dateFormat = computed(() => {\n  return extractDateFormat(format)\n})\n\nconst leftPrevYear = () => {\n  leftDate.value = leftDate.value.subtract(1, 'year')\n  if (!props.unlinkPanels) {\n    rightDate.value = leftDate.value.add(1, 'month')\n  }\n  handlePanelChange('year')\n}\n\nconst leftPrevMonth = () => {\n  leftDate.value = leftDate.value.subtract(1, 'month')\n  if (!props.unlinkPanels) {\n    rightDate.value = leftDate.value.add(1, 'month')\n  }\n  handlePanelChange('month')\n}\n\nconst rightNextYear = () => {\n  if (!props.unlinkPanels) {\n    leftDate.value = leftDate.value.add(1, 'year')\n    rightDate.value = leftDate.value.add(1, 'month')\n  } else {\n    rightDate.value = rightDate.value.add(1, 'year')\n  }\n  handlePanelChange('year')\n}\n\nconst rightNextMonth = () => {\n  if (!props.unlinkPanels) {\n    leftDate.value = leftDate.value.add(1, 'month')\n    rightDate.value = leftDate.value.add(1, 'month')\n  } else {\n    rightDate.value = rightDate.value.add(1, 'month')\n  }\n  handlePanelChange('month')\n}\n\nconst leftNextYear = () => {\n  leftDate.value = leftDate.value.add(1, 'year')\n  handlePanelChange('year')\n}\n\nconst leftNextMonth = () => {\n  leftDate.value = leftDate.value.add(1, 'month')\n  handlePanelChange('month')\n}\n\nconst rightPrevYear = () => {\n  rightDate.value = rightDate.value.subtract(1, 'year')\n  handlePanelChange('year')\n}\n\nconst rightPrevMonth = () => {\n  rightDate.value = rightDate.value.subtract(1, 'month')\n  handlePanelChange('month')\n}\n\nconst handlePanelChange = (mode: 'month' | 'year') => {\n  emit(\n    'panel-change',\n    [leftDate.value.toDate(), rightDate.value.toDate()],\n    mode\n  )\n}\n\nconst enableMonthArrow = computed(() => {\n  const nextMonth = (leftMonth.value + 1) % 12\n  const yearOffset = leftMonth.value + 1 >= 12 ? 1 : 0\n  return (\n    props.unlinkPanels &&\n    new Date(leftYear.value + yearOffset, nextMonth) <\n      new Date(rightYear.value, rightMonth.value)\n  )\n})\n\nconst enableYearArrow = computed(() => {\n  return (\n    props.unlinkPanels &&\n    rightYear.value * 12 +\n      rightMonth.value -\n      (leftYear.value * 12 + leftMonth.value + 1) >=\n      12\n  )\n})\n\nconst btnDisabled = computed(() => {\n  return !(\n    minDate.value &&\n    maxDate.value &&\n    !rangeState.value.selecting &&\n    isValidRange([minDate.value, maxDate.value])\n  )\n})\n\nconst showTime = computed(\n  () => props.type === 'datetime' || props.type === 'datetimerange'\n)\n\nconst formatEmit = (emitDayjs: Dayjs | null, index?: number) => {\n  if (!emitDayjs) return\n  if (defaultTime) {\n    const defaultTimeD = dayjs(\n      defaultTime[index as number] || defaultTime\n    ).locale(lang.value)\n    return defaultTimeD\n      .year(emitDayjs.year())\n      .month(emitDayjs.month())\n      .date(emitDayjs.date())\n  }\n  return emitDayjs\n}\n\nconst handleRangePick = (\n  val: {\n    minDate: Dayjs\n    maxDate: Dayjs | null\n  },\n  close = true\n) => {\n  const min_ = val.minDate\n  const max_ = val.maxDate\n  const minDate_ = formatEmit(min_, 0)\n  const maxDate_ = formatEmit(max_, 1)\n\n  if (maxDate.value === maxDate_ && minDate.value === minDate_) {\n    return\n  }\n  emit('calendar-change', [min_.toDate(), max_ && max_.toDate()])\n  maxDate.value = maxDate_\n  minDate.value = minDate_\n\n  if (!close || showTime.value) return\n  handleRangeConfirm()\n}\n\nconst minTimePickerVisible = ref(false)\nconst maxTimePickerVisible = ref(false)\n\nconst handleMinTimeClose = () => {\n  minTimePickerVisible.value = false\n}\n\nconst handleMaxTimeClose = () => {\n  maxTimePickerVisible.value = false\n}\n\nconst handleDateInput = (value: string | null, type: ChangeType) => {\n  dateUserInput.value[type] = value\n  const parsedValueD = dayjs(value, dateFormat.value).locale(lang.value)\n\n  if (parsedValueD.isValid()) {\n    if (disabledDate && disabledDate(parsedValueD.toDate())) {\n      return\n    }\n    if (type === 'min') {\n      leftDate.value = parsedValueD\n      minDate.value = (minDate.value || leftDate.value)\n        .year(parsedValueD.year())\n        .month(parsedValueD.month())\n        .date(parsedValueD.date())\n      if (!props.unlinkPanels) {\n        rightDate.value = parsedValueD.add(1, 'month')\n        maxDate.value = minDate.value.add(1, 'month')\n      }\n    } else {\n      rightDate.value = parsedValueD\n      maxDate.value = (maxDate.value || rightDate.value)\n        .year(parsedValueD.year())\n        .month(parsedValueD.month())\n        .date(parsedValueD.date())\n      if (!props.unlinkPanels) {\n        leftDate.value = parsedValueD.subtract(1, 'month')\n        minDate.value = maxDate.value.subtract(1, 'month')\n      }\n    }\n  }\n}\n\nconst handleDateChange = (_: unknown, type: ChangeType) => {\n  dateUserInput.value[type] = null\n}\n\nconst handleTimeInput = (value: string | null, type: ChangeType) => {\n  timeUserInput.value[type] = value\n  const parsedValueD = dayjs(value, timeFormat.value).locale(lang.value)\n\n  if (parsedValueD.isValid()) {\n    if (type === 'min') {\n      minTimePickerVisible.value = true\n      minDate.value = (minDate.value || leftDate.value)\n        .hour(parsedValueD.hour())\n        .minute(parsedValueD.minute())\n        .second(parsedValueD.second())\n      if (!maxDate.value || maxDate.value.isBefore(minDate.value)) {\n        maxDate.value = minDate.value\n      }\n    } else {\n      maxTimePickerVisible.value = true\n      maxDate.value = (maxDate.value || rightDate.value)\n        .hour(parsedValueD.hour())\n        .minute(parsedValueD.minute())\n        .second(parsedValueD.second())\n      rightDate.value = maxDate.value\n      if (maxDate.value && maxDate.value.isBefore(minDate.value)) {\n        minDate.value = maxDate.value\n      }\n    }\n  }\n}\n\nconst handleTimeChange = (value: string | null, type: ChangeType) => {\n  timeUserInput.value[type] = null\n  if (type === 'min') {\n    leftDate.value = minDate.value!\n    minTimePickerVisible.value = false\n  } else {\n    rightDate.value = maxDate.value!\n    maxTimePickerVisible.value = false\n  }\n}\n\nconst handleMinTimePick = (value: Dayjs, visible: boolean, first: boolean) => {\n  if (timeUserInput.value.min) return\n  if (value) {\n    leftDate.value = value\n    minDate.value = (minDate.value || leftDate.value)\n      .hour(value.hour())\n      .minute(value.minute())\n      .second(value.second())\n  }\n\n  if (!first) {\n    minTimePickerVisible.value = visible\n  }\n\n  if (!maxDate.value || maxDate.value.isBefore(minDate.value)) {\n    maxDate.value = minDate.value\n    rightDate.value = value\n  }\n}\n\nconst handleMaxTimePick = (\n  value: Dayjs | null,\n  visible: boolean,\n  first: boolean\n) => {\n  if (timeUserInput.value.max) return\n  if (value) {\n    rightDate.value = value\n    maxDate.value = (maxDate.value || rightDate.value)\n      .hour(value.hour())\n      .minute(value.minute())\n      .second(value.second())\n  }\n\n  if (!first) {\n    maxTimePickerVisible.value = visible\n  }\n\n  if (maxDate.value && maxDate.value.isBefore(minDate.value)) {\n    minDate.value = maxDate.value\n  }\n}\n\nconst handleClear = () => {\n  leftDate.value = getDefaultValue(unref(defaultValue), {\n    lang: unref(lang),\n    unit: 'month',\n    unlinkPanels: props.unlinkPanels,\n  })[0]\n  rightDate.value = leftDate.value.add(1, 'month')\n  emit('pick', null)\n}\n\nconst formatToString = (value: Dayjs | Dayjs[]) => {\n  return isArray(value)\n    ? value.map((_) => _.format(format))\n    : value.format(format)\n}\n\nconst parseUserInput = (value: Dayjs | Dayjs[]) => {\n  return isArray(value)\n    ? value.map((_) => dayjs(_, format).locale(lang.value))\n    : dayjs(value, format).locale(lang.value)\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 minDateMonth = minDate?.month() || 0\n    const maxDateYear = maxDate.year()\n    const maxDateMonth = maxDate.month()\n    rightDate.value =\n      minDateYear === maxDateYear && minDateMonth === maxDateMonth\n        ? maxDate.add(1, unit)\n        : maxDate\n  } else {\n    rightDate.value = leftDate.value.add(1, unit)\n    if (maxDate) {\n      rightDate.value = rightDate.value\n        .hour(maxDate.hour())\n        .minute(maxDate.minute())\n        .second(maxDate.second())\n    }\n  }\n}\n\nemit('set-picker-option', ['isValidValue', isValidRange])\nemit('set-picker-option', ['parseUserInput', parseUserInput])\nemit('set-picker-option', ['formatToString', formatToString])\nemit('set-picker-option', ['handleClear', handleClear])\n</script>\n"],"names":["minDate","maxDate"],"mappings":"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"}