{"version":3,"file":"useDragSort.mjs","sources":["../../src/hooks/useDragSort.tsx"],"sourcesContent":["import { onUnmounted } from 'vue';\n\nconst traversalTabNavs = (tabNavs: HTMLCollection, fn: { (itemNode: any): void; (tabNav: HTMLDivElement): void }) => {\n  for (const itemNode of tabNavs) {\n    if (itemNode.getAttribute('draggable')) {\n      fn(itemNode);\n    }\n  }\n};\n\nconst handleTarget = (target: EventTarget, tabNavs: HTMLCollection): any => {\n  let resultTarget;\n  traversalTabNavs(tabNavs, (itemNode) => {\n    if (itemNode.contains(target)) {\n      resultTarget = itemNode;\n    }\n  });\n  return resultTarget;\n};\n\nexport default function useDragSort(props: any) {\n  let navsWrap: HTMLDivElement = null;\n\n  let dragged: HTMLDivElement;\n  const enterTargets: HTMLDivElement[] = [];\n\n  const dragstart = (event: DragEvent) => {\n    const target = event.target as HTMLDivElement;\n    // const { target } = event;\n    dragged = target;\n    target.style.opacity = '0.5';\n  };\n  const dragend = (event: DragEvent) => {\n    (event.target as HTMLDivElement).style.opacity = '';\n  };\n  const dragover = (event: DragEvent) => {\n    event.preventDefault();\n  };\n  const dragenter = (event: DragEvent) => {\n    const target = handleTarget(event.target, navsWrap.children);\n    if (target && target !== dragged && target.draggable) {\n      target.firstChild.style.outline = '1px dashed #0052d9';\n      if (!enterTargets.includes(target)) {\n        enterTargets.push(target);\n      }\n    }\n  };\n  const dragleave = (event: DragEvent) => {\n    const target = event.target as HTMLDivElement;\n    // const { target } = event;\n    for (const enterTarget of enterTargets) {\n      if (!enterTarget.contains(target)) {\n        (enterTarget.firstChild as HTMLDivElement).style.outline = 'none';\n      }\n    }\n  };\n  const drop = (event: DragEvent) => {\n    event.preventDefault();\n\n    traversalTabNavs(navsWrap.children, (tabNav) => {\n      tabNav.firstChild.style.outline = 'none';\n    });\n    let target = handleTarget(event.target, navsWrap.children);\n    if (target && target.parentNode !== dragged && target.draggable) {\n      const dragIndex = [].indexOf.call(navsWrap.children, dragged);\n      const targetIndex = [].indexOf.call(navsWrap.children, target);\n      if (targetIndex > dragIndex) {\n        target = navsWrap.children[targetIndex + 1];\n      }\n      navsWrap.insertBefore(dragged, target);\n\n      const currentIndex = props.theme === 'card' ? dragIndex : dragIndex - 1;\n      const endIndex = props.theme === 'card' ? targetIndex : targetIndex - 1;\n      props.onDragSort({\n        currentIndex,\n        current: props.panels[currentIndex].value,\n        targetIndex: endIndex,\n        target: props.panels[endIndex].value,\n      });\n    }\n  };\n  function setNavsWrap(val: HTMLDivElement) {\n    navsWrap = val;\n    navsWrap.addEventListener('dragstart', dragstart, false);\n    navsWrap.addEventListener('dragend', dragend, false);\n    navsWrap.addEventListener('dragover', dragover, false);\n    navsWrap.addEventListener('dragenter', dragenter, false);\n    document.addEventListener('dragleave', dragleave, false);\n    document.addEventListener('mousemove', dragleave, false);\n    navsWrap.addEventListener('drop', drop, false);\n  }\n\n  onUnmounted(() => {\n    navsWrap.removeEventListener('dragstart', dragstart);\n    navsWrap.removeEventListener('dragend', dragend);\n    navsWrap.removeEventListener('dragover', dragover);\n    navsWrap.removeEventListener('dragenter', dragenter);\n    document.removeEventListener('dragleave', dragleave);\n    document.removeEventListener('mousemove', dragleave);\n    navsWrap.removeEventListener('drop', drop);\n  });\n  return { setNavsWrap };\n}\n"],"names":["_iterator","traversalTabNavs","resultTarget","dragged","target","event","enterTargets","enterTarget","tabNav","navsWrap","currentIndex","targetIndex","onUnmounted","document","setNavsWrap"],"mappings":"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"}