{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/use-draggable/index.ts"],"sourcesContent":["import { onBeforeUnmount, onMounted, ref, watchEffect } from 'vue'\nimport { addUnit } from '@hd-front-end/utils'\n\nimport type { ComputedRef, Ref } from 'vue'\n\nexport const useDraggable = (\n  targetRef: Ref<HTMLElement | undefined>,\n  dragRef: Ref<HTMLElement | undefined>,\n  draggable: ComputedRef<boolean>,\n  overflow?: ComputedRef<boolean>\n) => {\n  const transform = {\n    offsetX: 0,\n    offsetY: 0,\n  }\n\n  const isDragging = ref(false)\n\n  const adjustPosition = (moveX: number, moveY: number) => {\n    if (targetRef.value) {\n      const { offsetX, offsetY } = transform\n      const targetRect = targetRef.value.getBoundingClientRect()\n      const targetLeft = targetRect.left\n      const targetTop = targetRect.top\n      const targetWidth = targetRect.width\n      const targetHeight = targetRect.height\n\n      const clientWidth = document.documentElement.clientWidth\n      const clientHeight = document.documentElement.clientHeight\n\n      const minLeft = -targetLeft + offsetX\n      const minTop = -targetTop + offsetY\n      const maxLeft = clientWidth - targetLeft - targetWidth + offsetX\n      const maxTop =\n        clientHeight -\n        targetTop -\n        (targetHeight < clientHeight ? targetHeight : 0) +\n        offsetY\n\n      if (!overflow?.value) {\n        moveX = Math.min(Math.max(moveX, minLeft), maxLeft)\n        moveY = Math.min(Math.max(moveY, minTop), maxTop)\n      }\n\n      transform.offsetX = moveX\n      transform.offsetY = moveY\n\n      targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(\n        moveY\n      )})`\n    }\n  }\n\n  const onMousedown = (e: MouseEvent) => {\n    const downX = e.clientX\n    const downY = e.clientY\n    const { offsetX, offsetY } = transform\n\n    const onMousemove = (e: MouseEvent) => {\n      if (!isDragging.value) {\n        isDragging.value = true\n      }\n      const moveX = offsetX + e.clientX - downX\n      const moveY = offsetY + e.clientY - downY\n\n      adjustPosition(moveX, moveY)\n    }\n\n    const onMouseup = () => {\n      isDragging.value = false\n      document.removeEventListener('mousemove', onMousemove)\n      document.removeEventListener('mouseup', onMouseup)\n    }\n\n    document.addEventListener('mousemove', onMousemove)\n    document.addEventListener('mouseup', onMouseup)\n  }\n\n  const onDraggable = () => {\n    if (dragRef.value && targetRef.value) {\n      dragRef.value.addEventListener('mousedown', onMousedown)\n      window.addEventListener('resize', updatePosition)\n    }\n  }\n\n  const offDraggable = () => {\n    if (dragRef.value && targetRef.value) {\n      dragRef.value.removeEventListener('mousedown', onMousedown)\n      window.removeEventListener('resize', updatePosition)\n    }\n  }\n\n  const resetPosition = () => {\n    transform.offsetX = 0\n    transform.offsetY = 0\n\n    if (targetRef.value) {\n      targetRef.value.style.transform = ''\n    }\n  }\n\n  const updatePosition = () => {\n    const { offsetX, offsetY } = transform\n\n    adjustPosition(offsetX, offsetY)\n  }\n\n  onMounted(() => {\n    watchEffect(() => {\n      if (draggable.value) {\n        onDraggable()\n      } else {\n        offDraggable()\n      }\n    })\n  })\n\n  onBeforeUnmount(() => {\n    offDraggable()\n  })\n\n  return {\n    isDragging,\n    resetPosition,\n    updatePosition,\n  }\n}\n"],"names":["e"],"mappings":"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"}