{"version":3,"file":"usePickerInput.cjs","sources":["../../../../../../../packages/vue-components/vc-picker/src/hooks/usePickerInput.ts"],"sourcesContent":["import type { FocusEventHandler } from '@antdv/types';\nimport type { ComputedRef, HTMLAttributes, Ref } from 'vue';\nimport { KeyCode, raf } from '@antdv/utils';\nimport { computed, onBeforeUnmount, onMounted, shallowRef, watch } from 'vue';\nimport { addGlobalMousedownEvent, getTargetFromEvent } from '../utils/uiUtil';\n\nexport default function usePickerInput({\n  open,\n  value,\n  isClickOutside,\n  triggerOpen,\n  forwardKeydown,\n  onKeydown,\n  blurToCancel,\n  onSubmit,\n  onCancel,\n  onFocus,\n  onBlur,\n}: {\n  open: Ref<boolean>;\n  value: Ref<string>;\n  isClickOutside: (clickElement: EventTarget | null) => boolean;\n  triggerOpen: (open: boolean) => void;\n  forwardKeydown: (e: KeyboardEvent) => boolean;\n  onKeydown: (e: KeyboardEvent, preventDefault: () => void) => void;\n  blurToCancel?: ComputedRef<boolean>;\n  onSubmit: () => void | boolean;\n  onCancel: () => void;\n  onFocus?: FocusEventHandler;\n  onBlur?: FocusEventHandler;\n}): [ComputedRef<HTMLAttributes>, { focused: Ref<boolean>; typing: Ref<boolean> }] {\n  const typing = shallowRef(false);\n  const focused = shallowRef(false);\n\n  /**\n   * We will prevent blur to handle open event when user click outside,\n   * since this will repeat trigger `onOpenChange` event.\n   */\n  const preventBlurRef = shallowRef<boolean>(false);\n\n  const valueChangedRef = shallowRef<boolean>(false);\n\n  const preventDefaultRef = shallowRef<boolean>(false);\n\n  const inputProps = computed<HTMLAttributes>(() => ({\n    onMousedown: () => {\n      typing.value = true;\n      triggerOpen(true);\n    },\n    onKeydown: (e) => {\n      const preventDefault = (): void => {\n        preventDefaultRef.value = true;\n      };\n\n      onKeydown(e, preventDefault);\n\n      if (preventDefaultRef.value) return;\n\n      switch (e.which) {\n        case KeyCode.ENTER: {\n          if (!open.value)\n            triggerOpen(true);\n          else if (onSubmit() !== false)\n            typing.value = true;\n\n          e.preventDefault();\n          return;\n        }\n\n        case KeyCode.TAB: {\n          if (typing.value && open.value && !e.shiftKey) {\n            typing.value = false;\n            e.preventDefault();\n          } else if (!typing.value && open.value) {\n            if (!forwardKeydown(e) && e.shiftKey) {\n              typing.value = true;\n              e.preventDefault();\n            }\n          }\n          return;\n        }\n\n        case KeyCode.ESC: {\n          typing.value = true;\n          onCancel();\n          return;\n        }\n      }\n\n      if (!open.value && ![KeyCode.SHIFT].includes(e.which)) {\n        triggerOpen(true);\n      } else if (!typing.value) {\n        // Let popup panel handle keyboard\n        forwardKeydown(e);\n      }\n    },\n\n    onFocus: (e) => {\n      typing.value = true;\n      focused.value = true;\n\n      if (onFocus)\n        onFocus(e);\n    },\n\n    onBlur: (e) => {\n      if (preventBlurRef.value || !isClickOutside(document.activeElement)) {\n        preventBlurRef.value = false;\n        return;\n      }\n\n      if (blurToCancel.value) {\n        setTimeout(() => {\n          let { activeElement } = document;\n          while (activeElement && activeElement.shadowRoot)\n            activeElement = activeElement.shadowRoot.activeElement;\n\n          if (isClickOutside(activeElement))\n            onCancel();\n        }, 0);\n      } else if (open.value) {\n        triggerOpen(false);\n\n        if (valueChangedRef.value)\n          onSubmit();\n      }\n      focused.value = false;\n\n      if (onBlur)\n        onBlur(e);\n    },\n  }));\n\n  // check if value changed\n  watch(open, () => {\n    valueChangedRef.value = false;\n  });\n\n  watch(value, () => {\n    valueChangedRef.value = true;\n  });\n  const globalMousedownEvent = shallowRef();\n  // Global click handler\n  onMounted(() => {\n    globalMousedownEvent.value = addGlobalMousedownEvent((e: MouseEvent) => {\n      const target = getTargetFromEvent(e);\n\n      if (open.value) {\n        const clickedOutside = isClickOutside(target);\n\n        if (!clickedOutside) {\n          preventBlurRef.value = true;\n\n          // Always set back in case `onBlur` prevented by user\n          raf(() => {\n            preventBlurRef.value = false;\n          });\n        } else if (!focused.value || clickedOutside) {\n          triggerOpen(false);\n        }\n      }\n    });\n  });\n  onBeforeUnmount(() => {\n    globalMousedownEvent.value && globalMousedownEvent.value();\n  });\n\n  return [inputProps, { focused, typing }];\n}\n"],"names":["shallowRef","computed","KeyCode","watch","onMounted","addGlobalMousedownEvent","getTargetFromEvent","raf","onBeforeUnmount"],"mappings":"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"}