{"version":3,"file":"panel-date-pick.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/panel-date-pick.vue"],"sourcesContent":["<template>\r\n  <div\r\n    class=\"sg-picker-panel sg-date-picker\"\r\n    :class=\"[\r\n      {\r\n        'has-sidebar': $slots.sidebar || hasShortcuts,\r\n        'has-time': showTime,\r\n      },\r\n    ]\"\r\n  >\r\n    <div class=\"sg-picker-panel__body-wrapper\">\r\n      <slot name=\"sidebar\" class=\"sg-picker-panel__sidebar\"></slot>\r\n      <div v-if=\"hasShortcuts\" class=\"sg-picker-panel__sidebar\">\r\n        <button\r\n          v-for=\"(shortcut, key) in shortcuts\"\r\n          :key=\"key\"\r\n          type=\"button\"\r\n          class=\"sg-picker-panel__shortcut\"\r\n          @click=\"handleShortcutClick(shortcut)\"\r\n        >\r\n          {{ shortcut.text }}\r\n        </button>\r\n      </div>\r\n      <div class=\"sg-picker-panel__body\">\r\n        <div v-if=\"showTime\" class=\"sg-date-picker__time-header\">\r\n          <span class=\"sg-date-picker__editor-wrap\">\r\n            <sg-input\r\n              :placeholder=\"t('sg.datepicker.selectDate')\"\r\n              :model-value=\"visibleDate\"\r\n              size=\"small\"\r\n              :validate-event=\"false\"\r\n              @on-input=\"(val) => (userInputDate = val)\"\r\n              @on-change=\"handleVisibleDateChange\"\r\n            />\r\n          </span>\r\n          <span\r\n            v-clickoutside=\"handleTimePickClose\"\r\n            class=\"sg-date-picker__editor-wrap\"\r\n          >\r\n            <sg-input\r\n              :placeholder=\"t('sg.datepicker.selectTime')\"\r\n              :model-value=\"visibleTime\"\r\n              :validate-event=\"false\"\r\n              size=\"small\"\r\n              @on-focus=\"onTimePickerInputFocus\"\r\n              @on-input=\"(val) => (userInputTime = val)\"\r\n              @on-change=\"handleVisibleTimeChange\"\r\n            />\r\n            <time-pick-panel\r\n              :visible=\"timePickerVisible\"\r\n              :format=\"timeFormat\"\r\n              :time-arrow-control=\"arrowControl\"\r\n              :parsed-value=\"innerDate\"\r\n              @pick=\"handleTimePick\"\r\n            />\r\n          </span>\r\n        </div>\r\n        <div\r\n          v-show=\"currentView !== 'time'\"\r\n          class=\"sg-date-picker__header\"\r\n          :class=\"{\r\n            'sg-date-picker__header--bordered':\r\n              currentView === 'year' || currentView === 'month',\r\n          }\"\r\n        >\r\n          <button\r\n            type=\"button\"\r\n            :aria-label=\"t(`sg.datepicker.prevYear`)\"\r\n            class=\"sg-picker-panel__icon-btn sg-date-picker__prev-btn d-arrow-left\"\r\n            @click=\"prevYear_\"\r\n          >\r\n            <sg-icon><DoubleArrowLeft /></sg-icon>\r\n          </button>\r\n          <button\r\n            v-show=\"currentView === 'date'\"\r\n            type=\"button\"\r\n            :aria-label=\"t(`sg.datepicker.prevMonth`)\"\r\n            class=\"sg-picker-panel__icon-btn sg-date-picker__prev-btn arrow-left\"\r\n            @click=\"prevMonth_\"\r\n          >\r\n            <sg-icon><ArrowLeft /></sg-icon>\r\n          </button>\r\n          <span\r\n            role=\"button\"\r\n            class=\"sg-date-picker__header-label\"\r\n            @click=\"showYearPicker\"\r\n            >{{ yearLabel }}</span\r\n          >\r\n          <span\r\n            v-show=\"currentView === 'date'\"\r\n            role=\"button\"\r\n            class=\"sg-date-picker__header-label\"\r\n            :class=\"{ active: currentView === 'month' }\"\r\n            @click=\"showMonthPicker\"\r\n            >{{ t(`sg.datepicker.month${month + 1}`) }}</span\r\n          >\r\n          <button\r\n            type=\"button\"\r\n            :aria-label=\"t(`sg.datepicker.nextYear`)\"\r\n            class=\"sg-picker-panel__icon-btn sg-date-picker__next-btn d-arrow-right\"\r\n            @click=\"nextYear_\"\r\n          >\r\n            <sg-icon><DoubleArrowRight /></sg-icon>\r\n          </button>\r\n          <button\r\n            v-show=\"currentView === 'date'\"\r\n            type=\"button\"\r\n            :aria-label=\"t(`sg.datepicker.nextMonth`)\"\r\n            class=\"sg-picker-panel__icon-btn sg-date-picker__next-btn arrow-right\"\r\n            @click=\"nextMonth_\"\r\n          >\r\n            <sg-icon><ArrowRight /></sg-icon>\r\n          </button>\r\n        </div>\r\n        <div class=\"sg-picker-panel__content\">\r\n          <date-table\r\n            v-if=\"currentView === 'date'\"\r\n            ref=\"currentViewRef\"\r\n            :shortcuts=\"shortcuts\"\r\n            @confirmToday=\"handleShortcutClick\"\r\n            :selection-mode=\"selectionMode\"\r\n            :date=\"innerDate\"\r\n            :parsed-value=\"parsedValue\"\r\n            :disabled-date=\"disabledDate\"\r\n            @pick=\"handleDatePick\"\r\n          />\r\n          <year-table\r\n            v-if=\"currentView === 'year'\"\r\n            ref=\"currentViewRef\"\r\n            :date=\"innerDate\"\r\n            :disabled-date=\"disabledDate\"\r\n            :parsed-value=\"(parsedValue as Dayjs | undefined)\"\r\n            @pick=\"handleYearPick\"\r\n          />\r\n          <month-table\r\n            v-if=\"currentView === 'month'\"\r\n            ref=\"currentViewRef\"\r\n            :date=\"innerDate\"\r\n            :parsed-value=\"(parsedValue as Dayjs | undefined)\"\r\n            :disabled-date=\"disabledDate\"\r\n            @pick=\"handleMonthPick\"\r\n          />\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"select-today\" v-if=\"showToday && !shortcuts.length\" @click=\"changeToToday\">\r\n      <span>今天</span>\r\n    </div>\r\n    <div\r\n      v-show=\"footerVisible && currentView === 'date'\"\r\n      class=\"sg-picker-panel__footer\"\r\n    >\r\n      <sg-button\r\n        v-show=\"selectionMode !== 'dates'\"\r\n        text\r\n        class=\"sg-picker-panel__link-btn\"\r\n        @click=\"changeToNow\"\r\n      >\r\n        {{ t('sg.datepicker.now') }}\r\n      </sg-button>\r\n      <sg-button\r\n        type=\"primary\"\r\n        class=\"sg-picker-panel__link-btn\"\r\n        @click=\"onConfirm\"\r\n      >\r\n        {{ t('sg.datepicker.confirm') }}\r\n      </sg-button>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, ref, watch, toRef } from 'vue'\r\nimport dayjs from 'dayjs'\r\nimport SgButton from '@sgui-plus/components/button'\r\nimport { ClickOutside } from '@sgui-plus/directives'\r\nimport { useLocale } from '@sgui-plus/hooks'\r\nimport SgInput from '@sgui-plus/components/input'\r\nimport {\r\n  extractDateFormat,\r\n  extractTimeFormat,\r\n  TimePickPanel,\r\n  TimePickerContextKey\r\n} from '@sgui-plus/components/time-picker'\r\nimport { SgIcon } from '@sgui-plus/components/icon'\r\nimport { EVENT_CODE } from '@sgui-plus/utils/aria'\r\nimport { isValidDatePickType } from '@sgui-plus/utils/validators'\r\nimport {\r\n  DoubleArrowLeft,\r\n  ArrowLeft,\r\n  ArrowRight,\r\n  DoubleArrowRight\r\n} from '@sgui-plus/icons-vue'\r\nimport { TOOLTIP_INJECTION_KEY } from '@sgui-plus/components/tooltip'\r\nimport DateTable from './basic-date-table.vue'\r\nimport MonthTable from './basic-month-table.vue'\r\nimport YearTable from './basic-year-table.vue'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { ConfigType, Dayjs } from 'dayjs'\r\nimport type { IDatePickerType } from '../date-picker.type'\r\n\r\n// todo\r\n/* eslint-disable-next-line */\r\nconst timeWithinRange = (_: ConfigType, __: any, ___: string) => true\r\n\r\nexport default defineComponent({\r\n  components: {\r\n    DateTable,\r\n    SgInput,\r\n    SgButton,\r\n    SgIcon,\r\n    TimePickPanel,\r\n    MonthTable,\r\n    YearTable,\r\n    DoubleArrowLeft,\r\n    ArrowLeft,\r\n    ArrowRight,\r\n    DoubleArrowRight\r\n  },\r\n\r\n  directives: { clickoutside: ClickOutside },\r\n  props: {\r\n    visible: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    parsedValue: {\r\n      type: [Object, Array] as PropType<Dayjs | Dayjs[]>,\r\n    },\r\n    format: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    type: {\r\n      type: String as PropType<IDatePickerType>,\r\n      required: true,\r\n      validator: isValidDatePickType,\r\n    },\r\n  },\r\n  emits: ['pick', 'set-picker-option', 'on-panel-change'],\r\n  setup(props, ctx) {\r\n    const { t, lang } = useLocale()\r\n    const pickerBase = inject(TimePickerContextKey) as any\r\n    const popper = inject(TOOLTIP_INJECTION_KEY)\r\n    const {\r\n      shortcuts,\r\n      disabledDate,\r\n      cellClassName,\r\n      defaultTime,\r\n      arrowControl,\r\n    } = pickerBase.props\r\n    const defaultValue = toRef(pickerBase.props, 'defaultValue')\r\n\r\n    const currentViewRef = ref<{ focus: () => void }>()\r\n\r\n    const innerDate = ref(dayjs().locale(lang.value))\r\n\r\n    const defaultTimeD = computed(() => {\r\n      return dayjs(defaultTime).locale(lang.value)\r\n    })\r\n\r\n    const month = computed(() => {\r\n      return innerDate.value.month()\r\n    })\r\n\r\n    const year = computed(() => {\r\n      return innerDate.value.year()\r\n    })\r\n\r\n    const selectableRange = ref([])\r\n    const userInputDate = ref(null)\r\n    const userInputTime = ref(null)\r\n    // todo update to disableHour\r\n    const checkDateWithinRange = (date: ConfigType) => {\r\n      return selectableRange.value.length > 0\r\n        ? timeWithinRange(\r\n            date,\r\n            selectableRange.value,\r\n            props.format || 'HH:mm:ss'\r\n          )\r\n        : true\r\n    }\r\n    const formatEmit = (emitDayjs: Dayjs) => {\r\n      if (defaultTime && !visibleTime.value) {\r\n        return defaultTimeD.value\r\n          .year(emitDayjs.year())\r\n          .month(emitDayjs.month())\r\n          .date(emitDayjs.date())\r\n      }\r\n      if (showTime.value) return emitDayjs.millisecond(0)\r\n      return emitDayjs.startOf('day')\r\n    }\r\n    const emit = (value, ...args) => {\r\n      if (!value) {\r\n        ctx.emit('pick', value, ...args)\r\n      } else if (Array.isArray(value)) {\r\n        const dates = value.map(formatEmit)\r\n        ctx.emit('pick', dates, ...args)\r\n      } else {\r\n        ctx.emit('pick', formatEmit(value), ...args)\r\n      }\r\n      userInputDate.value = null\r\n      userInputTime.value = null\r\n    }\r\n    const handleDatePick = (value: Dayjs) => {\r\n      if (selectionMode.value === 'day') {\r\n        let newDate = props.parsedValue\r\n          ? (props.parsedValue as Dayjs)\r\n              .year(value.year())\r\n              .month(value.month())\r\n              .date(value.date())\r\n          : value\r\n        // change default time while out of selectableRange\r\n        if (!checkDateWithinRange(newDate)) {\r\n          newDate = (selectableRange.value[0][0] as Dayjs)\r\n            .year(value.year())\r\n            .month(value.month())\r\n            .date(value.date())\r\n        }\r\n        innerDate.value = newDate\r\n        emit(newDate, showTime.value)\r\n      } else if (selectionMode.value === 'week') {\r\n        emit(value.date)\r\n      } else if (selectionMode.value === 'dates') {\r\n        emit(value, true) // set false to keep panel open\r\n      }\r\n    }\r\n    const prevMonth_ = () => {\r\n      innerDate.value = innerDate.value.subtract(1, 'month')\r\n      handlePanelChange('month')\r\n    }\r\n\r\n    const nextMonth_ = () => {\r\n      innerDate.value = innerDate.value.add(1, 'month')\r\n      handlePanelChange('month')\r\n    }\r\n\r\n    const prevYear_ = () => {\r\n      if (currentView.value === 'year') {\r\n        innerDate.value = innerDate.value.subtract(10, 'year')\r\n      } else {\r\n        innerDate.value = innerDate.value.subtract(1, 'year')\r\n      }\r\n      handlePanelChange('year')\r\n    }\r\n\r\n    const nextYear_ = () => {\r\n      if (currentView.value === 'year') {\r\n        innerDate.value = innerDate.value.add(10, 'year')\r\n      } else {\r\n        innerDate.value = innerDate.value.add(1, 'year')\r\n      }\r\n      handlePanelChange('year')\r\n    }\r\n\r\n    const currentView = ref('date')\r\n\r\n    const yearLabel = computed(() => {\r\n      const yearTranslation = t('sg.datepicker.year')\r\n      if (currentView.value === 'year') {\r\n        const startYear = Math.floor(year.value / 10) * 10\r\n        if (yearTranslation) {\r\n          return `${startYear} ${yearTranslation} - ${\r\n            startYear + 9\r\n          } ${yearTranslation}`\r\n        }\r\n        return `${startYear} - ${startYear + 9}`\r\n      }\r\n      return `${year.value} ${yearTranslation}`\r\n    })\r\n\r\n    const handleShortcutClick = (shortcut) => {\r\n      const shortcutValue =\r\n        typeof shortcut.value === 'function' ? shortcut.value() : shortcut.value\r\n      if (shortcutValue) {\r\n        emit(dayjs(shortcutValue).locale(lang.value))\r\n        return\r\n      }\r\n      if (shortcut.onClick) {\r\n        shortcut.onClick(ctx)\r\n      }\r\n    }\r\n\r\n    const selectionMode = computed(() => {\r\n      if (['week', 'month', 'year', 'dates'].includes(props.type)) {\r\n        return props.type\r\n      }\r\n      return 'day'\r\n    })\r\n\r\n    watch(\r\n      () => selectionMode.value,\r\n      (val) => {\r\n        if (['month', 'year'].includes(val)) {\r\n          currentView.value = val\r\n          return\r\n        }\r\n        currentView.value = 'date'\r\n      },\r\n      { immediate: true }\r\n    )\r\n\r\n    watch(\r\n      () => currentView.value,\r\n      () => {\r\n        popper?.updatePopper()\r\n      }\r\n    )\r\n\r\n    const hasShortcuts = computed(() => !!shortcuts.length)\r\n\r\n    const handleMonthPick = (month) => {\r\n      innerDate.value = innerDate.value.startOf('month').month(month)\r\n      if (selectionMode.value === 'month') {\r\n        emit(innerDate.value)\r\n      } else {\r\n        currentView.value = 'date'\r\n      }\r\n      handlePanelChange('month')\r\n    }\r\n\r\n    const handleYearPick = (year) => {\r\n      if (selectionMode.value === 'year') {\r\n        innerDate.value = innerDate.value.startOf('year').year(year)\r\n        emit(innerDate.value)\r\n      } else {\r\n        innerDate.value = innerDate.value.year(year)\r\n        currentView.value = 'month'\r\n      }\r\n      handlePanelChange('year')\r\n    }\r\n\r\n    const showMonthPicker = () => {\r\n      currentView.value = 'month'\r\n    }\r\n\r\n    const showYearPicker = () => {\r\n      currentView.value = 'year'\r\n    }\r\n\r\n    const showTime = computed(\r\n      () => props.type === 'datetime' || props.type === 'datetimerange'\r\n    )\r\n\r\n    const showToday = computed(() => props.type === 'date')\r\n\r\n    const footerVisible = computed(() => {\r\n      return showTime.value || selectionMode.value === 'dates'\r\n    })\r\n\r\n    const onConfirm = () => {\r\n      if (selectionMode.value === 'dates') {\r\n        emit(props.parsedValue)\r\n      } else {\r\n        // deal with the scenario where: user opens the date time picker, then confirm without doing anything\r\n        let result = props.parsedValue as Dayjs\r\n        if (!result) {\r\n          const defaultTimeD = dayjs(defaultTime).locale(lang.value)\r\n          const defaultValueD = getDefaultValue()\r\n          result = defaultTimeD\r\n            .year(defaultValueD.year())\r\n            .month(defaultValueD.month())\r\n            .date(defaultValueD.date())\r\n        }\r\n        innerDate.value = result\r\n        emit(result)\r\n      }\r\n    }\r\n\r\n    const changeToNow = () => {\r\n      // NOTE: not a permanent solution\r\n      //       consider disable \"now\" button in the future\r\n      const now = dayjs().locale(lang.value)\r\n      const nowDate = now.toDate()\r\n      if (\r\n        (!disabledDate || !disabledDate(nowDate)) &&\r\n        checkDateWithinRange(nowDate)\r\n      ) {\r\n        innerDate.value = dayjs().locale(lang.value)\r\n        emit(innerDate.value)\r\n      }\r\n    }\r\n\r\n    const changeToToday = () => {\r\n      const today = dayjs().locale(lang.value)\r\n\r\n      if (disabledDate && disabledDate(today.toDate())) {\r\n        return\r\n      }\r\n\r\n      innerDate.value = today\r\n      emit(innerDate.value)\r\n    }\r\n\r\n    const timeFormat = computed(() => {\r\n      return extractTimeFormat(props.format)\r\n    })\r\n\r\n    const dateFormat = computed(() => {\r\n      return extractDateFormat(props.format)\r\n    })\r\n\r\n    const visibleTime = computed(() => {\r\n      if (userInputTime.value) return userInputTime.value\r\n      if (!props.parsedValue && !defaultValue.value) return\r\n      return ((props.parsedValue || innerDate.value) as Dayjs).format(\r\n        timeFormat.value\r\n      )\r\n    })\r\n\r\n    const visibleDate = computed(() => {\r\n      if (userInputDate.value) return userInputDate.value\r\n      if (!props.parsedValue && !defaultValue.value) return\r\n      return ((props.parsedValue || innerDate.value) as Dayjs).format(\r\n        dateFormat.value\r\n      )\r\n    })\r\n\r\n    const timePickerVisible = ref(false)\r\n    const onTimePickerInputFocus = () => {\r\n      timePickerVisible.value = true\r\n    }\r\n    const handleTimePickClose = () => {\r\n      timePickerVisible.value = false\r\n    }\r\n\r\n    const handleTimePick = (value, visible, first) => {\r\n      const newDate = props.parsedValue\r\n        ? (props.parsedValue as Dayjs)\r\n            .hour(value.hour())\r\n            .minute(value.minute())\r\n            .second(value.second())\r\n        : value\r\n      innerDate.value = newDate\r\n      emit(innerDate.value, true)\r\n      if (!first) {\r\n        timePickerVisible.value = visible\r\n      }\r\n    }\r\n\r\n    const handleVisibleTimeChange = (value) => {\r\n      const newDate = dayjs(value, timeFormat.value).locale(lang.value)\r\n      if (newDate.isValid() && checkDateWithinRange(newDate)) {\r\n        innerDate.value = newDate\r\n          .year(innerDate.value.year())\r\n          .month(innerDate.value.month())\r\n          .date(innerDate.value.date())\r\n        userInputTime.value = null\r\n        timePickerVisible.value = false\r\n        emit(innerDate.value, true)\r\n      }\r\n    }\r\n\r\n    const handleVisibleDateChange = (value) => {\r\n      const newDate = dayjs(value, dateFormat.value).locale(lang.value)\r\n      if (newDate.isValid()) {\r\n        if (disabledDate && disabledDate(newDate.toDate())) {\r\n          return\r\n        }\r\n        innerDate.value = newDate\r\n          .hour(innerDate.value.hour())\r\n          .minute(innerDate.value.minute())\r\n          .second(innerDate.value.second())\r\n        userInputDate.value = null\r\n        emit(innerDate.value, true)\r\n      }\r\n    }\r\n\r\n    const isValidValue = (date: unknown) => {\r\n      return (\r\n        dayjs.isDayjs(date) &&\r\n        date.isValid() &&\r\n        (disabledDate ? !disabledDate(date.toDate()) : true)\r\n      )\r\n    }\r\n\r\n    const formatToString = (value) => {\r\n      if (selectionMode.value === 'dates') {\r\n        return value.map((_) => _.format(props.format))\r\n      }\r\n      return value.format(props.format)\r\n    }\r\n\r\n    const parseUserInput = (value) => {\r\n      return dayjs(value, props.format).locale(lang.value)\r\n    }\r\n\r\n    const getDefaultValue = () => {\r\n      const parseDate = dayjs(defaultValue.value).locale(lang.value)\r\n      if (!defaultValue.value) {\r\n        const defaultTimeDValue = defaultTimeD.value\r\n        return dayjs()\r\n          .hour(defaultTimeDValue.hour())\r\n          .minute(defaultTimeDValue.minute())\r\n          .second(defaultTimeDValue.second())\r\n          .locale(lang.value)\r\n      }\r\n      return parseDate\r\n    }\r\n\r\n    const handleFocusPicker = async () => {\r\n      if (['week', 'month', 'year', 'date'].includes(selectionMode.value)) {\r\n        currentViewRef.value?.focus()\r\n        if (selectionMode.value === 'week') {\r\n          handleKeyControl(40)\r\n        }\r\n      }\r\n    }\r\n\r\n    const handleKeydown = (event) => {\r\n      const { code, keyCode } = event\r\n      const list = [\r\n        EVENT_CODE.up,\r\n        EVENT_CODE.down,\r\n        EVENT_CODE.left,\r\n        EVENT_CODE.right,\r\n      ]\r\n      if (props.visible && !timePickerVisible.value) {\r\n        if (list.includes(code)) {\r\n          handleKeyControl(keyCode)\r\n          event.stopPropagation()\r\n          event.preventDefault()\r\n        }\r\n        if (\r\n          code === EVENT_CODE.enter &&\r\n          userInputDate.value === null &&\r\n          userInputTime.value === null\r\n        ) {\r\n          // Enter\r\n          emit(innerDate, false)\r\n        }\r\n      }\r\n    }\r\n\r\n    const handleKeyControl = (keyCode) => {\r\n      const mapping = {\r\n        year: {\r\n          38: -4,\r\n          40: 4,\r\n          37: -1,\r\n          39: 1,\r\n          offset: (date, step) => date.setFullYear(date.getFullYear() + step),\r\n        },\r\n        month: {\r\n          38: -4,\r\n          40: 4,\r\n          37: -1,\r\n          39: 1,\r\n          offset: (date, step) => date.setMonth(date.getMonth() + step),\r\n        },\r\n        week: {\r\n          38: -1,\r\n          40: 1,\r\n          37: -1,\r\n          39: 1,\r\n          offset: (date, step) => date.setDate(date.getDate() + step * 7),\r\n        },\r\n        day: {\r\n          38: -7,\r\n          40: 7,\r\n          37: -1,\r\n          39: 1,\r\n          offset: (date, step) => date.setDate(date.getDate() + step),\r\n        },\r\n      }\r\n\r\n      const newDate = innerDate.value.toDate()\r\n      while (Math.abs(innerDate.value.diff(newDate, 'year', true)) < 1) {\r\n        const map = mapping[selectionMode.value]\r\n        map.offset(newDate, map[keyCode])\r\n        if (disabledDate && disabledDate(newDate)) {\r\n          continue\r\n        }\r\n        const result = dayjs(newDate).locale(lang.value)\r\n        innerDate.value = result\r\n        ctx.emit('pick', result, true)\r\n        break\r\n      }\r\n    }\r\n\r\n    const handlePanelChange = (mode: 'month' | 'year') => {\r\n      ctx.emit(\r\n        'on-panel-change',\r\n        innerDate.value.toDate(),\r\n        mode,\r\n        currentView.value\r\n      )\r\n    }\r\n\r\n    ctx.emit('set-picker-option', ['isValidValue', isValidValue])\r\n    ctx.emit('set-picker-option', ['formatToString', formatToString])\r\n    ctx.emit('set-picker-option', ['parseUserInput', parseUserInput])\r\n    ctx.emit('set-picker-option', ['handleKeydown', handleKeydown])\r\n    ctx.emit('set-picker-option', ['handleFocusPicker', handleFocusPicker])\r\n\r\n    watch(\r\n      () => defaultValue.value,\r\n      (val) => {\r\n        if (val) {\r\n          innerDate.value = getDefaultValue()\r\n        }\r\n      },\r\n      { immediate: true }\r\n    )\r\n\r\n    watch(\r\n      () => props.parsedValue,\r\n      (val) => {\r\n        if (val) {\r\n          if (selectionMode.value === 'dates') return\r\n          if (Array.isArray(val)) return\r\n          innerDate.value = val\r\n        } else {\r\n          innerDate.value = getDefaultValue()\r\n        }\r\n      },\r\n      { immediate: true }\r\n    )\r\n\r\n    return {\r\n      handleTimePick,\r\n      handleTimePickClose,\r\n      onTimePickerInputFocus,\r\n      timePickerVisible,\r\n      visibleTime,\r\n      visibleDate,\r\n      showTime,\r\n      showToday,\r\n      changeToNow,\r\n      changeToToday,\r\n      onConfirm,\r\n      footerVisible,\r\n      handleYearPick,\r\n      showMonthPicker,\r\n      showYearPicker,\r\n      handleMonthPick,\r\n      hasShortcuts,\r\n      shortcuts,\r\n      arrowControl,\r\n      disabledDate,\r\n      cellClassName,\r\n      selectionMode,\r\n      handleShortcutClick,\r\n      prevYear_,\r\n      nextYear_,\r\n      prevMonth_,\r\n      nextMonth_,\r\n      innerDate,\r\n      t,\r\n      yearLabel,\r\n      currentView,\r\n      month,\r\n      handleDatePick,\r\n      handleVisibleTimeChange,\r\n      handleVisibleDateChange,\r\n      timeFormat,\r\n      userInputTime,\r\n      userInputDate,\r\n    }\r\n  },\r\n})\r\n</script>\r\n"],"names":["_createElementVNode","_resolveDirective","_renderSlot","_openBlock","_createElementBlock","_Fragment","_renderList","_createCommentVNode","_createVNode","_withDirectives","_normalizeClass","_withCtx","_vShow","_toDisplayString","_createBlock"],"mappings":"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"}