{"version":3,"file":"useModalDrag2.mjs","sources":["../../../../../../../../packages/components/modal/src/hooks/useModalDrag.ts"],"sourcesContent":["import { unref, watchEffect } from 'vue'\nimport { useTimeoutFn } from '@tav-ui/hooks/core/useTimeout'\nimport type { Ref } from 'vue'\n\nexport interface UseModalDragMoveContext {\n  draggable: Ref<boolean>\n  destroyOnClose: Ref<boolean | undefined> | undefined\n  visible: Ref<boolean>\n}\n\nexport function useModalDragMove(context: UseModalDragMoveContext) {\n  const getStyle = (dom: any, attr: any) => {\n    return getComputedStyle(dom)[attr]\n  }\n  const drag = (wrap: any) => {\n    if (!wrap) return\n    wrap.setAttribute('data-drag', unref(context.draggable))\n    const dialogHeaderEl = wrap.querySelector('.ant-modal-header')\n    const dragDom = wrap.querySelector('.ant-modal')\n\n    if (!dialogHeaderEl || !dragDom || !unref(context.draggable)) return\n\n    dialogHeaderEl.style.cursor = 'move'\n\n    dialogHeaderEl.onmousedown = (e: any) => {\n      if (!e) return\n      // 鼠标按下，计算当前元素距离可视区的距离\n      const disX = e.clientX\n      const disY = e.clientY\n      const screenWidth = document.body.clientWidth // body当前宽度\n      const screenHeight = document.documentElement.clientHeight // 可见区域高度(应为body高度，可某些环境下无法获取)\n\n      const dragDomWidth = dragDom.offsetWidth // 对话框宽度\n      const dragDomheight = dragDom.offsetHeight // 对话框高度\n\n      const minDragDomLeft = dragDom.offsetLeft\n\n      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth\n      const minDragDomTop = dragDom.offsetTop\n      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight\n      // 获取到的值带px 正则匹配替换\n      const domLeft = getStyle(dragDom, 'left')\n      const domTop = getStyle(dragDom, 'top')\n      let styL = +domLeft\n      let styT = +domTop\n\n      // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n      if (domLeft.includes('%')) {\n        styL = +document.body.clientWidth * (+domLeft.replace(/%/g, '') / 100)\n        styT = +document.body.clientHeight * (+domTop.replace(/%/g, '') / 100)\n      } else {\n        styL = +domLeft.replace(/px/g, '')\n        styT = +domTop.replace(/px/g, '')\n      }\n\n      document.onmousemove = function (e) {\n        // 通过事件委托，计算移动的距离\n        let left = e.clientX - disX\n        let top = e.clientY - disY\n\n        // 边界处理\n        if (-left > minDragDomLeft) left = -minDragDomLeft\n        else if (left > maxDragDomLeft) left = maxDragDomLeft\n\n        if (-top > minDragDomTop) top = -minDragDomTop\n        else if (top > maxDragDomTop) top = maxDragDomTop\n\n        // 移动当前元素\n        dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`\n      }\n\n      document.onmouseup = () => {\n        document.onmousemove = null\n        document.onmouseup = null\n      }\n    }\n  }\n\n  const handleDrag = () => {\n    const dragWraps = document.querySelectorAll('.ant-modal-wrap')\n    for (const wrap of Array.from(dragWraps)) {\n      if (!wrap) continue\n      const display = getStyle(wrap, 'display')\n      const draggable = wrap.getAttribute('data-drag')\n      if (display !== 'none') {\n        // 拖拽位置\n        if (draggable === null || unref(context.destroyOnClose)) drag(wrap)\n      }\n    }\n  }\n\n  watchEffect(() => {\n    if (!unref(context.visible) || !unref(context.draggable)) return\n\n    useTimeoutFn(() => {\n      handleDrag()\n    }, 30)\n  })\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,gBAAgB,CAAC,OAAO,EAAE;AAC1C,EAAE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK;AAClC,IAAI,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,GAAG,CAAC;AACJ,EAAE,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK;AACzB,IAAI,IAAI,CAAC,IAAI;AACb,MAAM,OAAO;AACb,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;AACnE,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACrD,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AAChE,MAAM,OAAO;AACb,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACzC,IAAI,cAAc,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK;AACxC,MAAM,IAAI,CAAC,CAAC;AACZ,QAAQ,OAAO;AACf,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AAC7B,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;AAC7B,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;AAC/C,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;AACjD,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,YAAY,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9C,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;AAC7E,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9C,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC;AAC1B,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;AACzB,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/E,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/E,OAAO,MAAM;AACb,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3C,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC1C,OAAO;AACP,MAAM,QAAQ,CAAC,WAAW,GAAG,SAAS,EAAE,EAAE;AAC1C,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;AACrC,QAAQ,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI,GAAG,cAAc;AAClC,UAAU,IAAI,GAAG,CAAC,cAAc,CAAC;AACjC,aAAa,IAAI,IAAI,GAAG,cAAc;AACtC,UAAU,IAAI,GAAG,cAAc,CAAC;AAChC,QAAQ,IAAI,CAAC,GAAG,GAAG,aAAa;AAChC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC;AAC/B,aAAa,IAAI,GAAG,GAAG,aAAa;AACpC,UAAU,GAAG,GAAG,aAAa,CAAC;AAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,OAAO,CAAC;AACR,MAAM,QAAQ,CAAC,SAAS,GAAG,MAAM;AACjC,QAAQ,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACpC,QAAQ,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;AAClC,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,EAAE,MAAM,UAAU,GAAG,MAAM;AAC3B,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AACnE,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC9C,MAAM,IAAI,CAAC,IAAI;AACf,QAAQ,SAAS;AACjB,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACvD,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE;AAC9B,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;AAC/D,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,WAAW,CAAC,MAAM;AACpB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5D,MAAM,OAAO;AACb,IAAI,YAAY,CAAC,MAAM;AACvB,MAAM,UAAU,EAAE,CAAC;AACnB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG,CAAC,CAAC;AACL;;;;"}