{"version":3,"file":"DatePicker.mjs","sources":["../../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { defineComponent, computed, watch } from 'vue';\nimport dayjs from 'dayjs';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport isFunction from 'lodash/isFunction';\n\nimport { useFormDisabled } from '../form/hooks';\nimport useSingle from './hooks/useSingle';\nimport { parseToDayjs, getDefaultFormat, formatTime, formatDate } from '../_common/js/date-picker/format';\nimport { subtractMonth, addMonth, extractTimeObj } from '../_common/js/date-picker/utils';\nimport type { DateValue } from './type';\nimport props from './props';\n\nimport TSelectInput from '../select-input';\nimport TSinglePanel from './panel/SinglePanel';\n\nexport default defineComponent({\n  name: 'XDatePicker',\n\n  props: {\n    ...props,\n  },\n\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('date-picker');\n\n    const {\n      inputValue,\n      popupVisible,\n      inputProps,\n      popupProps,\n      isHoverCell,\n      cacheValue,\n      value,\n      year,\n      month,\n      time,\n      inputRef,\n      onChange,\n    } = useSingle(props);\n\n    const disabled = useFormDisabled();\n\n    const formatRef = computed(() =>\n      getDefaultFormat({\n        mode: props.mode,\n        format: props.format,\n        valueType: props.valueType,\n        enableTimePicker: props.enableTimePicker,\n      }),\n    );\n\n    watch(popupVisible, (visible) => {\n      cacheValue.value = formatDate(value.value, {\n        format: formatRef.value.format,\n      });\n      inputValue.value = formatDate(value.value, {\n        format: formatRef.value.format,\n      });\n\n      // 面板展开重置数据\n      if (visible) {\n        year.value = parseToDayjs(value.value, formatRef.value.format).year();\n        month.value = parseToDayjs(value.value, formatRef.value.format).month();\n        time.value = formatTime(value.value, formatRef.value.format, formatRef.value.timeFormat, props.defaultTime);\n      } else {\n        isHoverCell.value = false;\n      }\n    });\n\n    // 日期 hover\n    function onCellMouseEnter(date: Date) {\n      isHoverCell.value = true;\n      inputValue.value = formatDate(date, {\n        format: formatRef.value.format,\n      });\n    }\n\n    // 日期 leave\n    function onCellMouseLeave() {\n      isHoverCell.value = false;\n      inputValue.value = formatDate(cacheValue.value, {\n        format: formatRef.value.format,\n      });\n    }\n\n    // 日期点击\n    function onCellClick(date: Date) {\n      isHoverCell.value = false;\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, {\n          format: formatRef.value.format,\n        });\n      } else {\n        onChange?.(\n          formatDate(date, {\n            format: formatRef.value.format,\n            targetFormat: formatRef.value.valueType,\n          }) as DateValue,\n          {\n            dayjsValue: parseToDayjs(date, formatRef.value.format),\n            trigger: 'pick',\n          },\n        );\n        popupVisible.value = false;\n      }\n\n      props.onPick?.(date);\n    }\n\n    // 头部快速切换\n    function onJumperClick({ trigger }: { trigger: string }) {\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      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(inputValue.value as string, formatRef.value.format).isValid()\n        ? dayjs()\n        : dayjs(inputValue.value as string, formatRef.value.format);\n      const nextDate = currentDate.hour(nextHours).minute(minutes).second(seconds).millisecond(milliseconds).toDate();\n      inputValue.value = formatDate(nextDate, {\n        format: formatRef.value.format,\n      });\n      cacheValue.value = formatDate(nextDate, {\n        format: formatRef.value.format,\n      });\n\n      props.onPick?.(nextDate);\n    }\n\n    // 确定\n    function onConfirmClick({ e }: { e: MouseEvent }) {\n      const nextValue = formatDate(inputValue.value, {\n        format: formatRef.value.format,\n      });\n      if (nextValue) {\n        props?.onConfirm?.({ date: dayjs(nextValue as string).toDate(), e });\n        onChange?.(\n          formatDate(inputValue.value, {\n            format: formatRef.value.format,\n            targetFormat: formatRef.value.valueType,\n          }) as DateValue,\n          {\n            dayjsValue: parseToDayjs(inputValue.value as string, formatRef.value.format),\n            trigger: 'confirm',\n          },\n        );\n      } else {\n        inputValue.value = formatDate(value.value, {\n          format: formatRef.value.format,\n        });\n      }\n      popupVisible.value = false;\n    }\n\n    // 预设\n    function onPresetClick(presetValue: DateValue | (() => DateValue)) {\n      const presetVal = isFunction(presetValue) ? presetValue() : presetValue;\n      onChange?.(\n        formatDate(presetVal, {\n          format: formatRef.value.format,\n          targetFormat: formatRef.value.valueType,\n        }) as DateValue,\n        {\n          dayjsValue: parseToDayjs(presetVal, formatRef.value.format),\n          trigger: 'preset',\n        },\n      );\n\n      popupVisible.value = false;\n    }\n\n    function onYearChange(nextYear: number) {\n      year.value = nextYear;\n    }\n\n    function onMonthChange(nextMonth: number) {\n      month.value = nextMonth;\n    }\n\n    const panelProps = computed(() => ({\n      value: cacheValue.value as string,\n      year: year.value,\n      month: month.value,\n      format: formatRef.value.format,\n      mode: props.mode,\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: popupVisible.value,\n      onCellClick,\n      onCellMouseEnter,\n      onCellMouseLeave,\n      onJumperClick,\n      onConfirmClick,\n      onPresetClick,\n      onYearChange,\n      onMonthChange,\n      onTimePickerChange,\n      onPanelClick: () => inputRef.value?.focus?.(),\n    }));\n\n    return () => (\n      <div class={COMPONENT_NAME.value}>\n        <TSelectInput\n          disabled={disabled.value}\n          value={inputValue.value}\n          status={props.status}\n          tips={props.tips}\n          clearable={props.clearable}\n          popupProps={popupProps.value}\n          inputProps={inputProps.value}\n          popupVisible={popupVisible.value}\n          panel={() => <TSinglePanel {...panelProps.value} />}\n        />\n      </div>\n    );\n  },\n});\n"],"names":["name","props","watch","format","year","month","inputValue","cacheValue","targetFormat","trigger","date","week","quarter","next","e","dayjsValue","onCellClick","onCellMouseEnter","onCellMouseLeave","onJumperClick","onConfirmClick","onPresetClick","onYearChange","onMonthChange","onTimePickerChange","_createVNode"],"mappings":"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"}