{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-draggable/index.ts"],"sourcesContent":["import { onBeforeUnmount, onMounted, watchEffect } from 'vue'\nimport { addUnit } from '@vuesax-plus/utils'\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) => {\n  let transform = {\n    offsetX: 0,\n    offsetY: 0,\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 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 = clientHeight - targetTop - targetHeight + offsetY\n\n    const onMousemove = (e: MouseEvent) => {\n      const moveX = Math.min(\n        Math.max(offsetX + e.clientX - downX, minLeft),\n        maxLeft\n      )\n      const moveY = Math.min(\n        Math.max(offsetY + e.clientY - downY, minTop),\n        maxTop\n      )\n\n      transform = {\n        offsetX: moveX,\n        offsetY: moveY,\n      }\n      targetRef.value!.style.transform = `translate(${addUnit(\n        moveX\n      )}, ${addUnit(moveY)})`\n    }\n\n    const onMouseup = () => {\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    }\n  }\n\n  const offDraggable = () => {\n    if (dragRef.value && targetRef.value) {\n      dragRef.value.removeEventListener('mousedown', onMousedown)\n    }\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"],"names":["e"],"mappings":"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"}