{"version":3,"file":"resizer.mjs","sources":["../../../../../../packages/components/modeless-dialog/src/resizer.ts"],"sourcesContent":["import type { Directive, DirectiveBinding } from 'vue'\n\nexport interface DialogElement extends HTMLDivElement {\n  __resizer__: {\n    offset: [number, number]\n    area: [number, number]\n    moveHandler: (e: MouseEvent) => void\n    upHandler: (e: MouseEvent) => void\n    downHandler: (e: MouseEvent) => void\n  }\n}\n\nconst initModelessDialogResizer = (dlg: DialogElement) => {\n  if (dlg.querySelector('.panel-resizer')) return\n\n  const resizerEle = document.createElement('span')\n  resizerEle.className = 'panel-resizer'\n  resizerEle.addEventListener('mousedown', dlg.__resizer__.downHandler)\n  dlg.appendChild(resizerEle)\n}\n\nconst resetModelessDialogResizer = (dlg: DialogElement) => {\n  const resizerEle = dlg.querySelector('.panel-resizer') as HTMLElement\n  if (resizerEle) {\n    resizerEle.removeEventListener('mousedown', dlg.__resizer__.downHandler)\n    dlg.removeChild(resizerEle)\n  }\n}\n\nconst ModelessDialogResizer: Directive = {\n  beforeMount: (dlg: DialogElement, binding: DirectiveBinding<boolean>) => {\n    dlg.__resizer__ = Object.assign({\n      moveHandler: (e: MouseEvent) => {\n        e.preventDefault()\n\n        const __resizer__ = dlg.__resizer__\n        const X = e.clientX - __resizer__.offset[0] ,Y = e.clientY - __resizer__.offset[1]\n        const width = __resizer__.area[0] + X + 'px', height = __resizer__.area[1] + Y + 'px'\n        dlg.style.width = width\n        dlg.style.height = height\n\n        binding.instance.$emit('resize', dlg)\n      },\n      upHandler: () => {\n        const __resizer__ = dlg.__resizer__\n        removeEventListener('mousemove', __resizer__.moveHandler)\n        removeEventListener('mouseup', __resizer__.upHandler)\n\n        document.body.style.cursor = ''\n      },\n      downHandler: (e: MouseEvent) => {\n        e.preventDefault()\n\n        const __resizer__ = dlg.__resizer__\n        __resizer__.offset = [e.clientX, e.clientY]\n        __resizer__.area = [dlg.getBoundingClientRect().width, dlg.getBoundingClientRect().height]\n        addEventListener('mousemove', __resizer__.moveHandler)\n        addEventListener('mouseup', __resizer__.upHandler)\n\n        document.body.style.cursor = 'se-resize'\n      },\n    })\n\n    binding.value && initModelessDialogResizer(dlg)\n  },\n  updated(dlg: DialogElement, binding: DirectiveBinding<boolean>) {\n    if (binding.value) {\n      initModelessDialogResizer(dlg)\n    } else {\n      resetModelessDialogResizer(dlg)\n    }\n  },\n  beforeUnmount(dlg: DialogElement) {\n    resetModelessDialogResizer(dlg)\n    dlg.__resizer__ = null\n  },\n}\n\nexport { ModelessDialogResizer }\n"],"names":[],"mappings":"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"}