{"version":3,"file":"resizer.mjs","sources":["../../../../../../packages/components/dialog/src/resizer.ts"],"sourcesContent":["\nimport { setTransform } from '@hongluan-ui/utils'\nimport type { Directive, DirectiveBinding } from 'vue'\n\nexport interface DialogElement extends HTMLDivElement {\n  __resizer__: {\n    width: number\n    height: number\n    lastWidth: number\n    lastHeight: number\n    downX: number\n    downY: number\n    moveHandler: (e: MouseEvent) => void\n    upHandler: (e: MouseEvent) => void\n    downHandler: (e: MouseEvent) => void\n  }\n}\n\nconst initDialogResizer = (dlg: DialogElement) => {\n  const resizer = dlg.__resizer__\n  const body = dlg.querySelector('.panel-body') as HTMLDivElement\n  body.addEventListener('mousedown', resizer.downHandler)\n\n  resizer.width = 0\n  resizer.height = 0\n}\n\nconst resetDialogResizer = (dlg: DialogElement) => {\n  const resizer = dlg.__resizer__\n  const body = dlg.querySelector('.panel-body') as HTMLDivElement\n  body.removeEventListener('mousedown', resizer.downHandler)\n}\n\nconst DialogResizer: Directive = {\n  beforeMount: (dlg: DialogElement, binding: DirectiveBinding) => {\n    dlg.__resizer__ = Object.assign({\n      moveHandler: (e: MouseEvent) => {\n        const resizer = dlg.__resizer__\n        const { downX, downY, lastWidth, lastHeight, height: originHeight, width: originWidth } = resizer\n\n        const { clientX, clientY } = e\n        const transformStr = dlg!.style.transform\n\n        const diffX = clientX - downX\n        const diffY = clientY - downY\n        const newWidth = lastWidth + diffX\n        const newHeight = lastHeight + diffY\n        const scaleX = newWidth / originWidth\n        const scaleY = newHeight / originHeight\n\n        dlg!.style.transformOrigin = 'top left'\n        dlg!.style.transform = setTransform(transformStr, 'scale', `scale(${scaleX},${scaleY})`)\n      },\n      upHandler: () => {\n        const resizer = dlg.__resizer__\n        removeEventListener('mousemove', resizer.moveHandler)\n        removeEventListener('mouseup', resizer.upHandler)\n      },\n      downHandler: (e: MouseEvent) => {\n        const resizer = dlg.__resizer__\n\n        const downX = e.clientX\n        const downY = e.clientY\n\n        resizer.downX = downX\n        resizer.downY = downY\n\n        const resizerDom = window.getComputedStyle(dlg.querySelector('.panel-body')!, '::after')\n        const resizerWidth = parseFloat(resizerDom.getPropertyValue('width'))\n        const resizerHeight = parseFloat(resizerDom.getPropertyValue('height'))\n\n        const targetRect = dlg!.getBoundingClientRect()\n        if (!resizer.width) { // 保留原始尺寸\n          resizer.width = targetRect.width\n          resizer.height = targetRect.height\n        }\n        const { bottom, right, height, width } = targetRect\n        resizer.lastWidth = width\n        resizer.lastHeight = height\n        const resizerTop = bottom - resizerHeight\n        const resizerLeft = right - resizerWidth\n\n        if (downX >= resizerLeft && downX <= right && downY <= bottom && downY >= resizerTop) {\n          addEventListener('mousemove', resizer.moveHandler)\n          addEventListener('mouseup', resizer.upHandler)\n        }\n      },\n    })\n\n    if (!binding.value.canResize) return\n\n    initDialogResizer(dlg)\n  },\n  updated(dlg: DialogElement, binding: DirectiveBinding) {\n    if (binding.value.canResize) {\n      initDialogResizer(dlg)\n    } else {\n      resetDialogResizer(dlg)\n    }\n    if (binding.value.showAs === 'drawer' || binding.value.placement === 'fullscreen') {\n      dlg.style.removeProperty('transform-origin')\n      dlg!.style.transform = setTransform(dlg!.style.transform, 'scale', '')\n    }\n  },\n  beforeUnmount(dlg: DialogElement) {\n    resetDialogResizer(dlg)\n    dlg.__resizer__ = {} as any\n  },\n}\n\nexport { DialogResizer }\n"],"names":[],"mappings":"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"}