{"version":3,"file":"index.mjs","sources":["../../../../../../../../packages/vue-components/vc-picker/src/panels/DatetimePanel/index.tsx"],"sourcesContent":["import type { DisabledTime, PanelRefProps } from '../../interface';\nimport type { DatePanelProps } from '../DatePanel';\nimport type { SharedTimeProps } from '../TimePanel';\nimport { classNames, KeyCode } from '@antdv/utils';\nimport { ref } from 'vue';\nimport useMergeProps from '../../hooks/useMergeProps';\nimport { tuple } from '../../utils/miscUtil';\nimport { setDateTime as setTime } from '../../utils/timeUtil';\nimport DatePanel from '../DatePanel';\nimport TimePanel from '../TimePanel';\n\nexport type DatetimePanelProps<DateType> = {\n  disabledTime?: DisabledTime<DateType>;\n  showTime?: boolean | SharedTimeProps<DateType>;\n  defaultValue?: DateType;\n} & Omit<DatePanelProps<DateType>, 'disabledHours' | 'disabledMinutes' | 'disabledSeconds'>;\n\nconst ACTIVE_PANEL = tuple('date', 'time');\ntype ActivePanelType = (typeof ACTIVE_PANEL)[number];\n\nfunction DatetimePanel<DateType>(_props: DatetimePanelProps<DateType>) {\n  const props = useMergeProps(_props);\n  const {\n    prefixCls,\n    operationRef,\n    generateConfig,\n    value,\n    defaultValue,\n    disabledTime,\n    showTime,\n    onSelect,\n  } = props;\n  const panelPrefixCls = `${prefixCls}-datetime-panel`;\n  const activePanel = ref<ActivePanelType | null>(null);\n\n  const dateOperationRef = ref<PanelRefProps>({});\n  const timeOperationRef = ref<PanelRefProps>({});\n\n  const timeProps = typeof showTime === 'object' ? { ...showTime } : {};\n\n  // ======================= Keyboard =======================\n  function getNextActive(offset: number) {\n    const activeIndex = ACTIVE_PANEL.indexOf(activePanel.value!) + offset;\n    const nextActivePanel = ACTIVE_PANEL[activeIndex] || null;\n    return nextActivePanel;\n  }\n\n  const onBlur = (e?: FocusEvent) => {\n    if (timeOperationRef.value.onBlur)\n      timeOperationRef.value.onBlur(e!);\n\n    activePanel.value = null;\n  };\n\n  operationRef.value = {\n    onKeydown: (event: KeyboardEvent) => {\n      // Switch active panel\n      if (event.which === KeyCode.TAB) {\n        const nextActivePanel = getNextActive(event.shiftKey ? -1 : 1);\n        activePanel.value = nextActivePanel;\n\n        if (nextActivePanel)\n          event.preventDefault();\n\n        return true;\n      }\n\n      // Operate on current active panel\n      if (activePanel.value) {\n        const ref = activePanel.value === 'date' ? dateOperationRef : timeOperationRef;\n\n        if (ref.value && ref.value.onKeydown)\n          ref.value.onKeydown(event);\n\n        return true;\n      }\n\n      // Switch first active panel if operate without panel\n      if ([KeyCode.LEFT, KeyCode.RIGHT, KeyCode.UP, KeyCode.DOWN].includes(event.which)) {\n        activePanel.value = 'date';\n        return true;\n      }\n\n      return false;\n    },\n    onBlur,\n    onClose: onBlur,\n  };\n\n  // ======================== Events ========================\n  const onInternalSelect = (date: DateType, source: 'date' | 'time') => {\n    let selectedDate = date;\n\n    if (source === 'date' && !value && timeProps.defaultValue) {\n      // Date with time defaultValue\n      selectedDate = generateConfig.setHour(\n        selectedDate,\n        generateConfig.getHour(timeProps.defaultValue),\n      );\n      selectedDate = generateConfig.setMinute(\n        selectedDate,\n        generateConfig.getMinute(timeProps.defaultValue),\n      );\n      selectedDate = generateConfig.setSecond(\n        selectedDate,\n        generateConfig.getSecond(timeProps.defaultValue),\n      );\n    } else if (source === 'time' && !value && defaultValue) {\n      selectedDate = generateConfig.setYear(selectedDate, generateConfig.getYear(defaultValue));\n      selectedDate = generateConfig.setMonth(selectedDate, generateConfig.getMonth(defaultValue));\n      selectedDate = generateConfig.setDate(selectedDate, generateConfig.getDate(defaultValue));\n    }\n\n    if (onSelect)\n      onSelect(selectedDate, 'mouse');\n  };\n\n  // ======================== Render ========================\n  const disabledTimes = disabledTime ? disabledTime(value || null) : {};\n\n  return (\n    <div\n      class={classNames(panelPrefixCls, {\n        [`${panelPrefixCls}-active`]: activePanel.value,\n      })}\n    >\n      <DatePanel\n        {...props}\n        operationRef={dateOperationRef}\n        active={activePanel.value === 'date'}\n        onSelect={(date) => {\n          onInternalSelect(\n            setTime(\n              generateConfig,\n              date,\n              !value && typeof showTime === 'object' ? showTime.defaultValue : null,\n            ),\n            'date',\n          );\n        }}\n      />\n      <TimePanel\n        {...props}\n        format={undefined}\n        {...timeProps}\n        {...disabledTimes}\n        disabledTime={null}\n        defaultValue={undefined}\n        operationRef={timeOperationRef}\n        active={activePanel.value === 'time'}\n        onSelect={(date) => {\n          onInternalSelect(date, 'time');\n        }}\n      />\n    </div>\n  );\n}\n\nDatetimePanel.displayName = 'DatetimePanel';\nDatetimePanel.inheritAttrs = false;\n\nexport default DatetimePanel;\n"],"names":["ACTIVE_PANEL","tuple","DatetimePanel","_props","props","useMergeProps","prefixCls","operationRef","generateConfig","value","defaultValue","disabledTime","showTime","onSelect","panelPrefixCls","activePanel","ref","dateOperationRef","timeOperationRef","timeProps","getNextActive","offset","activeIndex","indexOf","nextActivePanel","onBlur","e","onKeydown","event","which","KeyCode","TAB","shiftKey","preventDefault","LEFT","RIGHT","UP","DOWN","includes","onClose","onInternalSelect","date","source","selectedDate","setHour","getHour","setMinute","getMinute","setSecond","getSecond","setYear","getYear","setMonth","getMonth","setDate","getDate","disabledTimes","_createVNode","classNames","DatePanel","setTime","TimePanel","undefined","displayName","inheritAttrs"],"mappings":"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"}