{"version":3,"file":"panel-date-pick.vue2.mjs","sources":["../../../../../../packages/components/date-picker/src/date-picker-com/panel-date-pick.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[\n      ppNs.b(),\n      dpNs.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 v-if=\"showTime\" :class=\"dpNs.e('time-header')\">\n          <span :class=\"dpNs.e('editor-wrap')\">\n            <el-input\n              placeholder=\"选择日期\"\n              :model-value=\"visibleDate\"\n              size=\"small\"\n              @input=\"val => (userInputDate = val)\"\n              @change=\"handleVisibleDateChange\"\n            />\n          </span>\n          <span\n            v-click-outside=\"handleTimePickClose\"\n            :class=\"dpNs.e('editor-wrap')\"\n          >\n            <el-input\n              placeholder=\"选择时间\"\n              :model-value=\"visibleTime\"\n              size=\"small\"\n              @focus=\"onTimePickerInputFocus\"\n              @input=\"val => (userInputTime = val)\"\n              @change=\"handleVisibleTimeChange\"\n            />\n            <el-time-pick-panel\n              :visible=\"timePickerVisible\"\n              :format=\"timeFormat\"\n              :time-arrow-control=\"arrowControl\"\n              :parsed-value=\"innerDate\"\n              @pick=\"handleTimePick\"\n            />\n          </span>\n        </div>\n        <div\n          v-show=\"currentView !== 'time'\"\n          :class=\"[\n            dpNs.e('header'),\n            (currentView === 'year' || currentView === 'month') &&\n              dpNs.e('header--bordered')\n          ]\"\n        >\n          <span :class=\"dpNs.e('prev-btn')\">\n            <button\n              type=\"button\"\n              aria-label=\"前一年\"\n              class=\"d-arrow-left\"\n              :class=\"ppNs.e('icon-btn')\"\n              @click=\"moveByYear(false)\"\n            >\n              <el-icon><d-arrow-left /></el-icon>\n            </button>\n            <button\n              v-show=\"currentView === 'date'\"\n              type=\"button\"\n              aria-label=\"上个月\"\n              :class=\"ppNs.e('icon-btn')\"\n              class=\"arrow-left\"\n              @click=\"moveByMonth(false)\"\n            >\n              <el-icon><arrow-left /></el-icon>\n            </button>\n          </span>\n          <span\n            role=\"button\"\n            :class=\"dpNs.e('header-label')\"\n            aria-live=\"polite\"\n            tabindex=\"0\"\n            @keydown.enter=\"showPicker('year')\"\n            @click=\"showPicker('year')\"\n            >{{ yearLabel }}</span\n          >\n          <span\n            v-show=\"currentView === 'date'\"\n            role=\"button\"\n            aria-live=\"polite\"\n            tabindex=\"0\"\n            :class=\"[\n              dpNs.e('header-label'),\n              { active: currentView === 'month' }\n            ]\"\n            @keydown.enter=\"showPicker('month')\"\n            @click=\"showPicker('month')\"\n            >{{ month + 1 }} 月</span\n          >\n          <span :class=\"dpNs.e('next-btn')\">\n            <button\n              v-show=\"currentView === 'date'\"\n              type=\"button\"\n              aria-label=\"下个月\"\n              :class=\"ppNs.e('icon-btn')\"\n              class=\"arrow-right\"\n              @click=\"moveByMonth(true)\"\n            >\n              <el-icon><arrow-right /></el-icon>\n            </button>\n            <button\n              type=\"button\"\n              aria-label=\"后一年\"\n              :class=\"ppNs.e('icon-btn')\"\n              class=\"d-arrow-right\"\n              @click=\"moveByYear(true)\"\n            >\n              <el-icon><d-arrow-right /></el-icon>\n            </button>\n          </span>\n        </div>\n        <div :class=\"ppNs.e('content')\" @keydown=\"handleKeydownTable\">\n          <date-table\n            v-if=\"currentView === 'date'\"\n            ref=\"currentViewRef\"\n            :selection-mode=\"selectionMode\"\n            :date=\"innerDate\"\n            :parsed-value=\"parsedValue\"\n            :disabled-date=\"disabledDate\"\n            :cell-class-name=\"cellClassName\"\n            @pick=\"handleDatePick\"\n          />\n          <year-table\n            v-if=\"currentView === 'year'\"\n            ref=\"currentViewRef\"\n            :date=\"innerDate\"\n            :disabled-date=\"disabledDate\"\n            :parsed-value=\"parsedValue\"\n            @pick=\"handleYearPick\"\n          />\n          <month-table\n            v-if=\"currentView === 'month'\"\n            ref=\"currentViewRef\"\n            :date=\"innerDate\"\n            :parsed-value=\"parsedValue\"\n            :disabled-date=\"disabledDate\"\n            @pick=\"handleMonthPick\"\n          />\n        </div>\n      </div>\n    </div>\n    <div\n      v-show=\"footerVisible && currentView === 'date'\"\n      :class=\"ppNs.e('footer')\"\n    >\n      <el-button\n        v-show=\"selectionMode !== 'dates'\"\n        text\n        size=\"small\"\n        :class=\"ppNs.e('link-btn')\"\n        @click=\"changeToNow\"\n      >\n        此刻\n      </el-button>\n      <el-button\n        plain\n        size=\"small\"\n        :class=\"ppNs.e('link-btn')\"\n        @click=\"onConfirm\"\n      >\n        确定\n      </el-button>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  inject,\n  nextTick,\n  ref,\n  toRef,\n  useAttrs,\n  useSlots,\n  watch\n} from 'vue'\nimport dayjs from 'dayjs'\nimport ElButton from '@element-ultra/components/button'\nimport { ClickOutside as vClickOutside } from '@element-ultra/directives'\nimport { useNamespace } from '@element-ultra/hooks'\nimport ElInput from '@element-ultra/components/input'\nimport {\n  ElTimePickPanel,\n  extractDateFormat,\n  extractTimeFormat\n} from '@element-ultra/components/time-picker'\nimport { ElIcon } from '@element-ultra/components/icon'\nimport { isArray, isFunction } from '@element-ultra/utils'\nimport { EVENT_CODE } from '@element-ultra/shared'\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from 'icon-ultra'\nimport { TOOLTIP_INJECTION_KEY } from '@element-ultra/components/tooltip'\nimport { panelDatePickProps } from '../props/panel-date-pick'\nimport DateTable from './basic-date-table.vue'\nimport MonthTable from './basic-month-table.vue'\nimport YearTable from './basic-year-table.vue'\n\nimport type { SetupContext } from 'vue'\nimport type { ConfigType, Dayjs } from 'dayjs'\nimport type {\n  DateTableEmits,\n  DatesPickerEmits,\n  WeekPickerEmits\n} from '../props/basic-date-table'\n\n// todo\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst timeWithinRange = (_: ConfigType, __: any, ___: string) => true\nconst props = defineProps(panelDatePickProps)\nconst contextEmit = defineEmits(['pick', 'set-picker-option', 'panel-change'])\nconst ppNs = useNamespace('picker-panel')\nconst dpNs = useNamespace('date-picker')\nconst attrs = useAttrs()\nconst slots = useSlots()\n\nconst { lang } = { lang: 'zh-cn' }\nconst pickerBase = inject('EP_PICKER_BASE') as any\nconst popper = inject(TOOLTIP_INJECTION_KEY)\nconst { shortcuts, disabledDate, cellClassName, defaultTime, arrowControl } =\n  pickerBase.props\nconst defaultValue = toRef(pickerBase.props, 'defaultValue')\n\nconst currentViewRef = ref<{ focus: () => void }>()\n\nconst innerDate = ref(dayjs().locale(lang))\n\nconst defaultTimeD = computed(() => {\n  return dayjs(defaultTime).locale(lang)\n})\n\nconst month = computed(() => {\n  return innerDate.value.month()\n})\n\nconst year = computed(() => {\n  return innerDate.value.year()\n})\n\nconst selectableRange = ref([])\nconst userInputDate = ref<string | null>(null)\nconst userInputTime = ref<string | null>(null)\n// todo update to disableHour\nconst checkDateWithinRange = (date: ConfigType) => {\n  return selectableRange.value.length > 0\n    ? timeWithinRange(date, selectableRange.value, props.format || 'HH:mm:ss')\n    : true\n}\nconst formatEmit = (emitDayjs: Dayjs) => {\n  if (defaultTime && !visibleTime.value) {\n    return defaultTimeD.value\n      .year(emitDayjs.year())\n      .month(emitDayjs.month())\n      .date(emitDayjs.date())\n  }\n  if (showTime.value) return emitDayjs.millisecond(0)\n  return emitDayjs.startOf('day')\n}\nconst emit = (value: Dayjs | Dayjs[], ...args: any[]) => {\n  if (!value) {\n    contextEmit('pick', value, ...args)\n  } else if (isArray(value)) {\n    const dates = value.map(formatEmit)\n    contextEmit('pick', dates, ...args)\n  } else {\n    contextEmit('pick', formatEmit(value), ...args)\n  }\n  userInputDate.value = null\n  userInputTime.value = null\n}\nconst handleDatePick = (value: DateTableEmits, keepOpen?: boolean) => {\n  if (selectionMode.value === 'date') {\n    value = value as Dayjs\n    let newDate = props.parsedValue\n      ? (props.parsedValue as Dayjs)\n          .year(value.year())\n          .month(value.month())\n          .date(value.date())\n      : value\n    // change default time while out of selectableRange\n    if (!checkDateWithinRange(newDate)) {\n      newDate = (selectableRange.value[0][0] as Dayjs)\n        .year(value.year())\n        .month(value.month())\n        .date(value.date())\n    }\n    innerDate.value = newDate\n    emit(newDate, showTime.value || keepOpen)\n  } else if (selectionMode.value === 'week') {\n    emit((value as WeekPickerEmits).date)\n  } else if (selectionMode.value === 'dates') {\n    emit(value as DatesPickerEmits, true) // set true to keep panel open\n  }\n}\n\nconst moveByMonth = (forward: boolean) => {\n  const action = forward ? 'add' : 'subtract'\n  innerDate.value = innerDate.value[action](1, 'month')\n  handlePanelChange('month')\n}\n\nconst moveByYear = (forward: boolean) => {\n  const currentDate = innerDate.value\n  const action = forward ? 'add' : 'subtract'\n\n  innerDate.value =\n    currentView.value === 'year'\n      ? currentDate[action](10, 'year')\n      : currentDate[action](1, 'year')\n\n  handlePanelChange('year')\n}\n\nconst currentView = ref('date')\n\nconst yearLabel = computed(() => {\n  const yearTranslation = '年'\n  if (currentView.value === 'year') {\n    const startYear = Math.floor(year.value / 10) * 10\n    if (yearTranslation) {\n      return `${startYear} ${yearTranslation} - ${\n        startYear + 9\n      } ${yearTranslation}`\n    }\n    return `${startYear} - ${startYear + 9}`\n  }\n  return `${year.value} ${yearTranslation}`\n})\n\ntype Shortcut = {\n  value: (() => Dayjs) | Dayjs\n  onClick?: (ctx: Omit<SetupContext, 'expose'>) => void\n}\n\nconst handleShortcutClick = (shortcut: Shortcut) => {\n  const shortcutValue = isFunction(shortcut.value)\n    ? shortcut.value()\n    : shortcut.value\n  if (shortcutValue) {\n    emit(dayjs(shortcutValue).locale(lang))\n    return\n  }\n  if (shortcut.onClick) {\n    shortcut.onClick({\n      attrs,\n      slots,\n      emit: contextEmit as SetupContext['emit']\n    })\n  }\n}\n\nconst selectionMode = computed(() => {\n  const { type } = props\n  const types = ['week', 'month', 'year', 'dates'] as const\n  if (types.includes(type as any)) return type as typeof types[number]\n  return 'date'\n})\n\nconst keyboardMode = computed<string>(() => {\n  return selectionMode.value === 'date'\n    ? currentView.value\n    : selectionMode.value\n})\n\nconst hasShortcuts = computed(() => !!shortcuts.length)\n\nconst handleMonthPick = async (month: number) => {\n  innerDate.value = innerDate.value.startOf('month').month(month)\n  if (selectionMode.value === 'month') {\n    emit(innerDate.value, false)\n  } else {\n    currentView.value = 'date'\n    if (['month', 'year', 'date', 'week'].includes(selectionMode.value)) {\n      emit(innerDate.value, true)\n      await nextTick()\n      handleFocusPicker()\n    }\n  }\n  handlePanelChange('month')\n}\n\nconst handleYearPick = async (year: number) => {\n  if (selectionMode.value === 'year') {\n    innerDate.value = innerDate.value.startOf('year').year(year)\n    emit(innerDate.value, false)\n  } else {\n    innerDate.value = innerDate.value.year(year)\n    currentView.value = 'month'\n    if (['month', 'year', 'date', 'week'].includes(selectionMode.value)) {\n      emit(innerDate.value, true)\n      await nextTick()\n      handleFocusPicker()\n    }\n  }\n  handlePanelChange('year')\n}\n\nconst showPicker = async (view: 'month' | 'year') => {\n  currentView.value = view\n  await nextTick()\n  handleFocusPicker()\n}\n\nconst showTime = computed(\n  () => props.type === 'datetime' || props.type === 'datetimerange'\n)\n\nconst footerVisible = computed(() => {\n  return showTime.value || selectionMode.value === 'dates'\n})\n\nconst onConfirm = () => {\n  if (selectionMode.value === 'dates') {\n    emit(props.parsedValue as Dayjs[])\n  } else {\n    // deal with the scenario where: user opens the date time picker, then confirm without doing anything\n    let result = props.parsedValue as Dayjs\n    if (!result) {\n      const defaultTimeD = dayjs(defaultTime).locale(lang)\n      const defaultValueD = getDefaultValue()\n      result = defaultTimeD\n        .year(defaultValueD.year())\n        .month(defaultValueD.month())\n        .date(defaultValueD.date())\n    }\n    innerDate.value = result\n    emit(result)\n  }\n}\n\nconst changeToNow = () => {\n  // NOTE: not a permanent solution\n  //       consider disable \"now\" button in the future\n  const now = dayjs().locale(lang)\n  const nowDate = now.toDate()\n  if (\n    (!disabledDate || !disabledDate(nowDate)) &&\n    checkDateWithinRange(nowDate)\n  ) {\n    innerDate.value = dayjs().locale(lang)\n    emit(innerDate.value)\n  }\n}\n\nconst timeFormat = computed(() => {\n  return extractTimeFormat(props.format)\n})\n\nconst dateFormat = computed(() => {\n  return extractDateFormat(props.format)\n})\n\nconst visibleTime = computed(() => {\n  if (userInputTime.value) return userInputTime.value\n  if (!props.parsedValue && !defaultValue.value) return\n  return ((props.parsedValue || innerDate.value) as Dayjs).format(\n    timeFormat.value\n  )\n})\n\nconst visibleDate = computed(() => {\n  if (userInputDate.value) return userInputDate.value\n  if (!props.parsedValue && !defaultValue.value) return\n  return ((props.parsedValue || innerDate.value) as Dayjs).format(\n    dateFormat.value\n  )\n})\n\nconst timePickerVisible = ref(false)\nconst onTimePickerInputFocus = () => {\n  timePickerVisible.value = true\n}\nconst handleTimePickClose = () => {\n  timePickerVisible.value = false\n}\n\nconst getUnits = (date: Dayjs) => {\n  return {\n    hour: date.hour(),\n    minute: date.minute(),\n    second: date.second(),\n    year: date.year(),\n    month: date.month(),\n    date: date.date()\n  }\n}\n\nconst handleTimePick = (value: Dayjs, visible: boolean, first: boolean) => {\n  const { hour, minute, second } = getUnits(value)\n  const newDate = props.parsedValue\n    ? (props.parsedValue as Dayjs).hour(hour).minute(minute).second(second)\n    : value\n  innerDate.value = newDate\n  emit(innerDate.value, true)\n  if (!first) {\n    timePickerVisible.value = visible\n  }\n}\n\nconst handleVisibleTimeChange = (value: string) => {\n  const newDate = dayjs(value, timeFormat.value).locale(lang)\n  if (newDate.isValid() && checkDateWithinRange(newDate)) {\n    const { year, month, date } = getUnits(innerDate.value)\n    innerDate.value = newDate.year(year).month(month).date(date)\n    userInputTime.value = null\n    timePickerVisible.value = false\n    emit(innerDate.value, true)\n  }\n}\n\nconst handleVisibleDateChange = (value: string) => {\n  const newDate = dayjs(value, dateFormat.value).locale(lang)\n  if (newDate.isValid()) {\n    if (disabledDate && disabledDate(newDate.toDate())) {\n      return\n    }\n    const { hour, minute, second } = getUnits(innerDate.value)\n    innerDate.value = newDate.hour(hour).minute(minute).second(second)\n    userInputDate.value = null\n    emit(innerDate.value, true)\n  }\n}\n\nconst isValidValue = (date: unknown) => {\n  return (\n    dayjs.isDayjs(date) &&\n    date.isValid() &&\n    (disabledDate ? !disabledDate(date.toDate()) : true)\n  )\n}\n\nconst formatToString = (value: Dayjs | Dayjs[]) => {\n  if (selectionMode.value === 'dates') {\n    return (value as Dayjs[]).map(_ => _.format(props.format))\n  }\n  if (selectionMode.value === 'week') {\n    return (value as Dayjs).format('第 ww 周')\n  }\n  return (value as Dayjs).format(props.format)\n}\n\nconst parseUserInput = (value: Dayjs) => {\n  return dayjs(value, props.format).locale(lang)\n}\n\nconst getDefaultValue = () => {\n  const parseDate = dayjs(defaultValue.value).locale(lang)\n  if (!defaultValue.value) {\n    const defaultTimeDValue = defaultTimeD.value\n    return dayjs()\n      .hour(defaultTimeDValue.hour())\n      .minute(defaultTimeDValue.minute())\n      .second(defaultTimeDValue.second())\n      .locale(lang)\n  }\n  return parseDate\n}\n\nconst handleFocusPicker = async () => {\n  if (['week', 'month', 'year', 'date'].includes(selectionMode.value)) {\n    currentViewRef.value?.focus()\n    if (selectionMode.value === 'week') {\n      handleKeyControl(EVENT_CODE.down)\n    }\n  }\n}\n\nconst handleKeydownTable = (event: KeyboardEvent) => {\n  const code = event.code as EVENT_CODE\n  const validCode = [\n    EVENT_CODE.up,\n    EVENT_CODE.down,\n    EVENT_CODE.left,\n    EVENT_CODE.right,\n    EVENT_CODE.home,\n    EVENT_CODE.end,\n    EVENT_CODE.pageUp,\n    EVENT_CODE.pageDown\n  ]\n  if (validCode.includes(code)) {\n    handleKeyControl(code)\n    event.stopPropagation()\n    event.preventDefault()\n  }\n  if (\n    [EVENT_CODE.enter, EVENT_CODE.space].includes(code) &&\n    userInputDate.value === null &&\n    userInputTime.value === null\n  ) {\n    event.preventDefault()\n    emit(innerDate.value, false)\n  }\n}\n\nconst handleKeyControl = (code: string) => {\n  type KeyControlMappingCallableOffset = (date: Date, step?: number) => number\n  type KeyControl = {\n    [key: string]:\n      | number\n      | KeyControlMappingCallableOffset\n      | ((date: Date, step: number) => any)\n    offset: (date: Date, step: number) => any\n  }\n  interface KeyControlMapping {\n    [key: string]: KeyControl\n  }\n\n  const up = EVENT_CODE.up\n  const down = EVENT_CODE.down\n  const left = EVENT_CODE.left\n  const right = EVENT_CODE.right\n  const home = EVENT_CODE.home\n  const end = EVENT_CODE.end\n  const pageUp = EVENT_CODE.pageUp\n  const pageDown = EVENT_CODE.pageDown\n\n  const mapping: KeyControlMapping = {\n    year: {\n      [up]: -4,\n      [down]: 4,\n      [left]: -1,\n      [right]: 1,\n      offset: (date: Date, step: number) =>\n        date.setFullYear(date.getFullYear() + step)\n    },\n    month: {\n      [up]: -4,\n      [down]: 4,\n      [left]: -1,\n      [right]: 1,\n      offset: (date: Date, step: number) =>\n        date.setMonth(date.getMonth() + step)\n    },\n    week: {\n      [up]: -1,\n      [down]: 1,\n      [left]: -1,\n      [right]: 1,\n      offset: (date: Date, step: number) =>\n        date.setDate(date.getDate() + step * 7)\n    },\n    date: {\n      [up]: -7,\n      [down]: 7,\n      [left]: -1,\n      [right]: 1,\n      [home]: (date: Date) => -date.getDay(),\n      [end]: (date: Date) => -date.getDay() + 6,\n      [pageUp]: (date: Date) =>\n        -new Date(date.getFullYear(), date.getMonth(), 0).getDate(),\n      [pageDown]: (date: Date) =>\n        new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(),\n      offset: (date: Date, step: number) => date.setDate(date.getDate() + step)\n    }\n  }\n\n  const newDate = innerDate.value.toDate()\n  while (Math.abs(innerDate.value.diff(newDate, 'year', true)) < 1) {\n    const map = mapping[keyboardMode.value]\n    if (!map) return\n    map.offset(\n      newDate,\n      isFunction(map[code])\n        ? (map[code] as unknown as KeyControlMappingCallableOffset)(newDate)\n        : (map[code] as number) ?? 0\n    )\n    if (disabledDate && disabledDate(newDate)) {\n      break\n    }\n    const result = dayjs(newDate).locale(lang)\n    innerDate.value = result\n    contextEmit('pick', result, true)\n    break\n  }\n}\n\nconst handlePanelChange = (mode: 'month' | 'year') => {\n  contextEmit('panel-change', innerDate.value.toDate(), mode, currentView.value)\n}\n\nwatch(\n  () => selectionMode.value,\n  val => {\n    if (['month', 'year'].includes(val)) {\n      currentView.value = val\n      return\n    }\n    currentView.value = 'date'\n  },\n  { immediate: true }\n)\n\nwatch(\n  () => currentView.value,\n  () => {\n    popper?.updatePopper()\n  }\n)\n\nwatch(\n  () => defaultValue.value,\n  val => {\n    if (val) {\n      innerDate.value = getDefaultValue()\n    }\n  },\n  { immediate: true }\n)\n\nwatch(\n  () => props.parsedValue,\n  val => {\n    if (val) {\n      if (selectionMode.value === 'dates') return\n      if (Array.isArray(val)) return\n      innerDate.value = val\n    } else {\n      innerDate.value = getDefaultValue()\n    }\n  },\n  { immediate: true }\n)\n\ncontextEmit('set-picker-option', ['isValidValue', isValidValue])\ncontextEmit('set-picker-option', ['formatToString', formatToString])\ncontextEmit('set-picker-option', ['parseUserInput', parseUserInput])\ncontextEmit('set-picker-option', ['handleFocusPicker', handleFocusPicker])\n</script>\n"],"names":["month","year","defaultTimeD"],"mappings":"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"}