{"version":3,"file":"useDraggable.mjs","sources":["../../../src/tree/hooks/useDraggable.ts"],"sourcesContent":["import { ref, toRefs, inject } from 'vue';\nimport throttle from 'lodash/throttle';\nimport { TreeNode } from '../../_common/js/tree/tree-node';\nimport { DropPosition } from '../interface';\nimport { dragInjectKey } from '../constants';\n\nexport default function useDraggable(props: { nodeRef: HTMLElement | undefined; node: TreeNode }) {\n  const { nodeRef, node } = toRefs(props);\n  const onDrag = inject(dragInjectKey);\n\n  const isDragOver = ref(false);\n  const isDragging = ref(false);\n  const dropPosition = ref<DropPosition>(0);\n\n  const updateDropPosition = throttle((e: DragEvent) => {\n    if (typeof window === 'undefined') return;\n    if (!nodeRef.value) return;\n\n    const rect = nodeRef.value.getBoundingClientRect();\n    const offsetY = window.pageYOffset + rect.top;\n    const { pageY } = e;\n    const gapHeight = rect.height / 4;\n    const diff = pageY - offsetY;\n\n    // 其实三元可行\n    if (diff < gapHeight) {\n      dropPosition.value = -1;\n    } else if (diff < rect.height - gapHeight) {\n      dropPosition.value = 0;\n    } else {\n      dropPosition.value = 1;\n    }\n  });\n\n  const setDragStatus = (status: 'dragStart' | 'dragOver' | 'dragLeave' | 'dragEnd' | 'drop', e: DragEvent) => {\n    switch (status) {\n      case 'dragStart':\n        isDragging.value = true;\n        dropPosition.value = 0;\n        onDrag.onDragStart?.({ node: node.value, e });\n        e.dataTransfer.effectAllowed = 'move';\n        break;\n      case 'dragEnd':\n        isDragging.value = false;\n        isDragOver.value = false;\n        dropPosition.value = 0;\n        updateDropPosition.cancel();\n        onDrag.onDragEnd?.({ node: node.value, e });\n        break;\n      case 'dragOver':\n        isDragOver.value = true;\n        updateDropPosition(e);\n        onDrag.onDragOver?.({ node: node.value, e });\n        break;\n      case 'dragLeave':\n        isDragOver.value = false;\n        dropPosition.value = 0;\n        updateDropPosition.cancel();\n        onDrag.onDragLeave?.({ node: node.value, e });\n        break;\n      case 'drop':\n        onDrag.onDrop?.({ node: node.value, dropPosition: dropPosition.value, e });\n        isDragOver.value = false;\n        updateDropPosition.cancel();\n        break;\n      default:\n        break;\n    }\n  };\n\n  return {\n    isDragOver,\n    isDragging,\n    dropPosition,\n    setDragStatus,\n  };\n}\n"],"names":["throttle","dropPosition","e","isDragOver","isDragging","setDragStatus"],"mappings":"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"}