{"version":3,"file":"DatePickerPanel.mjs","sources":["../../src/date-picker/DatePickerPanel.tsx"],"sourcesContent":["import { defineComponent, computed } from 'vue';\nimport dayjs from 'dayjs';\nimport isFunction from 'lodash/isFunction';\nimport useSingleValue from './hooks/useSingleValue';\nimport { formatDate, getDefaultFormat, parseToDayjs } from '../_common/js/date-picker/format';\nimport { subtractMonth, addMonth, extractTimeObj } from '../_common/js/date-picker/utils';\nimport type {\n  DateValue,\n  TdDatePickerPanelProps,\n  DatePickerYearChangeTrigger,\n  DatePickerMonthChangeTrigger,\n} from './type';\n\nimport datePickerPanelProps from './date-picker-panel-props';\nimport datePickerProps from './props';\n\nimport TSinglePanel from './panel/SinglePanel';\n\nexport default defineComponent({\n  name: 'XDatePickerPanel',\n\n  props: {\n    value: datePickerProps.value,\n    defaultValue: datePickerProps.defaultValue,\n    modelValue: datePickerProps.modelValue,\n    disabled: datePickerProps.disabled,\n    disableDate: datePickerProps.disableDate,\n    enableTimePicker: datePickerProps.enableTimePicker,\n    firstDayOfWeek: datePickerProps.firstDayOfWeek,\n    format: datePickerProps.format,\n    mode: datePickerProps.mode,\n    presets: datePickerProps.presets,\n    presetsPlacement: datePickerProps.presetsPlacement,\n    timePickerProps: datePickerProps.timePickerProps,\n    ...datePickerPanelProps,\n  },\n\n  setup(props: TdDatePickerPanelProps) {\n    const { cacheValue, value, year, month, time, onChange } = useSingleValue(props);\n\n    const formatRef = computed(() =>\n      getDefaultFormat({\n        mode: props.mode,\n        format: props.format,\n        enableTimePicker: props.enableTimePicker,\n      }),\n    );\n\n    // 日期点击\n    function onCellClick(date: Date, { e }: { e: MouseEvent }) {\n      props.onCellClick?.({ date, e });\n\n      // date 模式自动切换年月\n      if (props.mode === 'date') {\n        year.value = date.getFullYear();\n        month.value = date.getMonth();\n      }\n      if (props.enableTimePicker) {\n        cacheValue.value = formatDate(date, { format: formatRef.value.format });\n      } else {\n        onChange?.(formatDate(date, { format: formatRef.value.format }) as DateValue, {\n          dayjsValue: parseToDayjs(date, formatRef.value.format),\n          trigger: 'pick',\n        });\n      }\n    }\n\n    // 头部快速切换\n    function onJumperClick({ trigger }: { trigger: string }) {\n      const triggerMap = {\n        prev: 'arrow-previous',\n        next: 'arrow-next',\n      };\n      const monthCountMap = { date: 1, week: 1, month: 12, quarter: 12, year: 120 };\n      const monthCount = monthCountMap[props.mode] || 0;\n\n      const current = new Date(year.value, month.value);\n\n      let next = null;\n      if (trigger === 'prev') {\n        next = subtractMonth(current, monthCount);\n      } else if (trigger === 'current') {\n        next = new Date();\n      } else if (trigger === 'next') {\n        next = addMonth(current, monthCount);\n      }\n\n      const nextYear = next.getFullYear();\n      const nextMonth = next.getMonth();\n\n      if (year.value !== nextYear) {\n        props.onYearChange?.({\n          year: nextYear,\n          date: dayjs(value.value).toDate(),\n          trigger: trigger === 'current' ? 'today' : (`year-${triggerMap[trigger]}` as DatePickerYearChangeTrigger),\n        });\n      }\n      if (month.value !== nextMonth) {\n        props.onMonthChange?.({\n          month: nextMonth,\n          date: dayjs(value.value).toDate(),\n          trigger: trigger === 'current' ? 'today' : (`month-${triggerMap[trigger]}` as DatePickerMonthChangeTrigger),\n        });\n      }\n\n      year.value = nextYear;\n      month.value = nextMonth;\n    }\n\n    // timepicker 点击\n    function onTimePickerChange(val: string) {\n      time.value = val;\n\n      const { hours, minutes, seconds, milliseconds, meridiem } = extractTimeObj(val);\n\n      // am pm 12小时制转化 24小时制\n      let nextHours = hours;\n      if (/am/i.test(meridiem) && nextHours === 12) nextHours -= 12;\n      if (/pm/i.test(meridiem) && nextHours < 12) nextHours += 12;\n      const currentDate = !dayjs(cacheValue.value as string, formatRef.value.format).isValid()\n        ? dayjs()\n        : dayjs(cacheValue.value as string, formatRef.value.format);\n      const nextDate = currentDate.hour(nextHours).minute(minutes).second(seconds).millisecond(milliseconds).toDate();\n      cacheValue.value = formatDate(nextDate, { format: formatRef.value.format });\n\n      props.onTimeChange?.({\n        time: val,\n        date: dayjs(value.value).toDate(),\n        trigger: 'time-hour',\n      });\n    }\n\n    // 确定\n    function onConfirmClick({ e }: { e: MouseEvent }) {\n      onChange?.(\n        formatDate(cacheValue.value, {\n          format: formatRef.value.format,\n        }) as DateValue,\n        {\n          dayjsValue: parseToDayjs(cacheValue.value as string, formatRef.value.format),\n          trigger: 'confirm',\n        },\n      );\n      props.onConfirm?.({ date: dayjs(cacheValue.value as string).toDate(), e });\n    }\n\n    // 预设\n    function onPresetClick(preset: any, context: any) {\n      const presetVal = isFunction(preset) ? preset() : preset;\n      onChange?.(formatDate(presetVal, { format: formatRef.value.format }) as DateValue, {\n        dayjsValue: parseToDayjs(presetVal, formatRef.value.format),\n        trigger: 'preset',\n      });\n      props.onPresetClick?.(context);\n    }\n\n    function onYearChange(nextYear: number) {\n      year.value = nextYear;\n\n      props.onYearChange?.({\n        year: year.value,\n        date: dayjs(value.value).toDate(),\n        trigger: 'year-select',\n      });\n    }\n\n    function onMonthChange(nextMonth: number) {\n      month.value = nextMonth;\n\n      props.onMonthChange?.({\n        month: month.value,\n        date: dayjs(value.value).toDate(),\n        trigger: 'month-select',\n      });\n    }\n\n    const panelProps = computed(() => ({\n      value: cacheValue.value as string,\n      year: year.value,\n      month: month.value,\n      mode: props.mode,\n      format: formatRef.value.format,\n      presets: props.presets,\n      time: time.value as string,\n      disableDate: props.disableDate,\n      firstDayOfWeek: props.firstDayOfWeek,\n      timePickerProps: props.timePickerProps,\n      enableTimePicker: props.enableTimePicker,\n      presetsPlacement: props.presetsPlacement,\n      popupVisible: true,\n      panelClick: props.onPanelClick,\n      onCellClick,\n      onJumperClick,\n      onConfirmClick,\n      onPresetClick,\n      onYearChange,\n      onMonthChange,\n      onTimePickerChange,\n    }));\n\n    return () => <TSinglePanel {...panelProps.value} />;\n  },\n});\n"],"names":["name","props","date","e","year","month","cacheValue","format","trigger","prev","next","week","quarter","time","dayjsValue","popupVisible","onCellClick","onJumperClick","onConfirmClick","onPresetClick","onYearChange","onMonthChange","onTimePickerChange","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,uBAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,kBAAAA;AAEAC,EAAAA,KAAAA,EAAAA,aAAAA,CAAAA;;;;;;;;;;;;;AAYmC,GAAA,EAAA,oBAAA,CAAA;;AAK3B,IAAA,IAAA,eAAA,GAAA,cAAA,CAAA,KAAA,CAAA;;;;;;;;AAEqB,MAAA,OAAA,gBAAA,CAAA;;;;AAKzB,OAAA,CAAA,CAAA;AAAC,KAAA,CAAA,CAAA;AAIH,IAAA,SAAA,WAAA,CAAA,IAAA,EAAA,IAAA,EAAA;AAA2D,MAAA,IAAA,kBAAA,CAAA;AAAA,MAAA,IAAA,CAAA,GAAA,IAAA,CAAA,CAAA,CAAA;AACzD,MAAA,CAAA,kBAAA,GAAA,KAAA,CAAA,WAAA,MAAA,IAAA,IAAA,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AAAsBC,QAAAA,IAAAA,EAAAA,IAAAA;AAAMC,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AAG1B,MAAA,IAAA,KAAA,CAAA,IAAA,KAAA,MAAA,EAAA;AACGC,QAAAA,IAAAA,CAAAA,KAAAA,GAAAA,IAAAA,CAAAA,WAAAA,EAAAA,CAAAA;AACCC,QAAAA,KAAAA,CAAAA,KAAAA,GAAAA,IAAAA,CAAAA,QAAAA,EAAAA,CAAAA;AACR,OAAA;;AAEaC,QAAAA,UAAAA,CAAAA,KAAAA,GAAAA,UAAAA,CAAAA,IAAAA,EAAAA;AAA2BC,UAAAA,MAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA;AAA+B,SAAA,CAAA,CAAA;AACvE,OAAA,MAAA;;AACgCA,UAAAA,MAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA;AAA+B,SAAA,CAAA,EAAA;;AAE3DC,UAAAA,OAAAA,EAAAA,MAAAA;AACF,SAAA,CAAA,CAAA;AACF,OAAA;AACF,KAAA;;AAGyD,MAAA,IAAA,OAAA,GAAA,KAAA,CAAA,OAAA,CAAA;AACvD,MAAA,IAAA,UAAA,GAAA;AACEC,QAAAA,IAAAA,EAAAA,gBAAAA;AACAC,QAAAA,IAAAA,EAAAA,YAAAA;;AAEI,MAAA,IAAA,aAAA,GAAA;AAAkBR,QAAAA,IAAAA,EAAAA,CAAAA;AAASS,QAAAA,IAAAA,EAAAA,CAAAA;AAASN,QAAAA,KAAAA,EAAAA,EAAAA;AAAWO,QAAAA,OAAAA,EAAAA,EAAAA;AAAaR,QAAAA,IAAAA,EAAAA,GAAAA;;;AAGlE,MAAA,IAAA,OAAA,GAAA,IAAA,IAAA,CAAA,IAAA,CAAA,KAAA,EAAA,KAAA,CAAA,KAAA,CAAA,CAAA;;;AAISM,QAAAA,IAAAA,GAAAA,aAAAA,CAAAA,OAAAA,EAAAA,UAAAA,CAAAA,CAAAA;AACT,OAAA,MAAA,IAAA,OAAA,KAAA,SAAA,EAAA;AACEA,QAAAA,IAAAA,GAAAA,IAAAA,IAAAA,EAAAA,CAAAA;AACF,OAAA,MAAA,IAAA,OAAA,KAAA,MAAA,EAAA;AACSA,QAAAA,IAAAA,GAAAA,QAAAA,CAAAA,OAAAA,EAAAA,UAAAA,CAAAA,CAAAA;AACT,OAAA;AAEM,MAAA,IAAA,QAAA,GAAA,IAAA,CAAA,WAAA,EAAA,CAAA;AACA,MAAA,IAAA,SAAA,GAAA,IAAA,CAAA,QAAA,EAAA,CAAA;AAEF,MAAA,IAAA,IAAA,CAAA,KAAA,KAAA,QAAA,EAAA;AAAyB,QAAA,IAAA,mBAAA,CAAA;AAC3B,QAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,YAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AACEN,UAAAA,IAAAA,EAAAA,QAAAA;;AAEAI,UAAAA,OAAAA,EAAAA,OAAAA,KAAAA,SAAAA,GAAAA,OAAAA,GAAAA,OAAAA,CAAAA,MAAAA,CAAAA,UAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACF,SAAA,CAAA,CAAA;AACF,OAAA;AACI,MAAA,IAAA,KAAA,CAAA,KAAA,KAAA,SAAA,EAAA;AAA2B,QAAA,IAAA,oBAAA,CAAA;AAC7B,QAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AACEH,UAAAA,KAAAA,EAAAA,SAAAA;;AAEAG,UAAAA,OAAAA,EAAAA,OAAAA,KAAAA,SAAAA,GAAAA,OAAAA,GAAAA,QAAAA,CAAAA,MAAAA,CAAAA,UAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACF,SAAA,CAAA,CAAA;AACF,OAAA;;;AAIF,KAAA;;AAGyC,MAAA,IAAA,mBAAA,CAAA;;AAGjC,MAAA,IAAA,eAAA,GAAA,cAAA,CAAA,GAAA,CAAA;;;;;;;AAIN,MAAA,IAAA,KAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,SAAA,KAAA,EAAA,EAAA,SAAA,IAAA,EAAA,CAAA;AACA,MAAA,IAAA,KAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,SAAA,GAAA,EAAA,EAAA,SAAA,IAAA,EAAA,CAAA;AACA,MAAA,IAAA,WAAA,GAAA,CAAA,KAAA,CAAA,UAAA,CAAA,KAAA,EAAA,SAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,OAAA,EAAA,GAAA,KAAA,EAAA,GAAA,KAAA,CAAA,UAAA,CAAA,KAAA,EAAA,SAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;;AAIWF,MAAAA,UAAAA,CAAAA,KAAAA,GAAAA,UAAAA,CAAAA,QAAAA,EAAAA;AAA+BC,QAAAA,MAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA;AAA+B,OAAA,CAAA,CAAA;AAEzE,MAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,YAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;AACEM,QAAAA,IAAAA,EAAAA,GAAAA;;AAEAL,QAAAA,OAAAA,EAAAA,WAAAA;AACF,OAAA,CAAA,CAAA;AACF,KAAA;;AAGkD,MAAA,IAAA,gBAAA,CAAA;AAAA,MAAA,IAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;;AAG5CD,QAAAA,MAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA;AACF,OAAA,CAAA,EAAA;AAEEO,QAAAA,UAAAA,EAAAA,YAAAA,CAAAA,UAAAA,CAAAA,KAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA,CAAAA;AACAN,QAAAA,OAAAA,EAAAA,SAAAA;AACF,OAAA,CAAA,CAAA;AAEI,MAAA,CAAA,gBAAA,GAAA,KAAA,CAAA,SAAA,MAAA,IAAA,IAAA,gBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;;AAAgEL,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AAC1E,KAAA;AAGS,IAAA,SAAA,aAAA,CAAA,MAAA,EAAA,OAAA,EAAA;AAAyC,MAAA,IAAA,oBAAA,CAAA;;;AAEbI,QAAAA,MAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA;AAA+B,OAAA,CAAA,EAAA;;AAEhEC,QAAAA,OAAAA,EAAAA,QAAAA;AACF,OAAA,CAAA,CAAA;AACA,MAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,KAAA,EAAA,OAAA,CAAA,CAAA;AACF,KAAA;;AAEwC,MAAA,IAAA,oBAAA,CAAA;;AAGtC,MAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,YAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;;;AAGEA,QAAAA,OAAAA,EAAAA,aAAAA;AACF,OAAA,CAAA,CAAA;AACF,KAAA;;AAE0C,MAAA,IAAA,qBAAA,CAAA;;AAGxC,MAAA,CAAA,qBAAA,GAAA,KAAA,CAAA,aAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,KAAA,EAAA;;;AAGEA,QAAAA,OAAAA,EAAAA,cAAAA;AACF,OAAA,CAAA,CAAA;AACF,KAAA;;;;;;;AAOED,QAAAA,MAAAA,EAAAA,SAAAA,CAAAA,KAAAA,CAAAA,MAAAA;;;;;;;;AAQAQ,QAAAA,YAAAA,EAAAA,IAAAA;;AAEAC,QAAAA,WAAAA,EAAAA,WAAAA;AACAC,QAAAA,aAAAA,EAAAA,aAAAA;AACAC,QAAAA,cAAAA,EAAAA,cAAAA;AACAC,QAAAA,aAAAA,EAAAA,aAAAA;AACAC,QAAAA,YAAAA,EAAAA,YAAAA;AACAC,QAAAA,aAAAA,EAAAA,aAAAA;AACAC,QAAAA,kBAAAA,EAAAA,kBAAAA;;AACA,KAAA,CAAA,CAAA;;AAEK,MAAA,OAAAC,WAAA,CAAA,YAAA,EAAA,UAAA,CAAA,KAAA,EAAA,IAAA,CAAA,CAAA;;AACT,GAAA;AACF,CAAA,CAAA;;;;"}