{"version":3,"file":"RotateHandle-BTkMVnNp.cjs","sources":["../app/components/ui/RotateHandle.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef } from \"react\";\n\nexport type RotateHandleProps = {\n  onChange: (deg: number) => void;\n  getCenter: () => { x: number; y: number } | null;\n  initialDeg: number;\n  className?: string;\n  title?: string;\n};\n\nexport default function RotateHandle({\n  onChange,\n  getCenter,\n  initialDeg,\n  className,\n  title = \"Rotate\",\n}: RotateHandleProps) {\n  const isDraggingRef = useRef(false);\n  const startAngleRef = useRef(0);\n  const startDegRef = useRef(initialDeg);\n\n  return (\n    <button\n      type=\"button\"\n      aria-label={title}\n      title={title}\n      className={className}\n      onMouseDown={(e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        const center = getCenter();\n        if (!center) return;\n        isDraggingRef.current = true;\n        startDegRef.current = initialDeg;\n        startAngleRef.current = Math.atan2(\n          e.clientY - center.y,\n          e.clientX - center.x\n        );\n\n        function onMove(ev: MouseEvent) {\n          if (!isDraggingRef.current) return;\n          const c = getCenter();\n          if (!c) return;\n          const angle = Math.atan2(ev.clientY - c.y, ev.clientX - c.x);\n          const delta = angle - startAngleRef.current;\n          let deg = (startDegRef.current + (delta * 180) / Math.PI) % 360;\n          if (deg < 0) deg += 360;\n          onChange(deg);\n        }\n        function onUp() {\n          isDraggingRef.current = false;\n          window.removeEventListener(\"mousemove\", onMove);\n          window.removeEventListener(\"mouseup\", onUp);\n        }\n        window.addEventListener(\"mousemove\", onMove);\n        window.addEventListener(\"mouseup\", onUp);\n      }}\n    />\n  );\n}\n"],"names":["RotateHandle","onChange","getCenter","initialDeg","className","title","isDraggingRef","useRef","startAngleRef","startDegRef","jsx","center","onMove","ev","c","delta","deg","onUp"],"mappings":"qEAYA,SAAwBA,EAAa,CACnC,SAAAC,EACA,UAAAC,EACA,WAAAC,EACA,UAAAC,EACA,MAAAC,EAAQ,QACV,EAAsB,CACpB,MAAMC,EAAgBC,EAAAA,OAAO,EAAK,EAC5BC,EAAgBD,EAAAA,OAAO,CAAC,EACxBE,EAAcF,EAAAA,OAAOJ,CAAU,EAErC,OACEO,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,aAAYL,EACZ,MAAAA,EACA,UAAAD,EACA,YAAc,GAAM,CAClB,EAAE,eAAA,EACF,EAAE,gBAAA,EACF,MAAMO,EAAST,EAAA,EACf,GAAI,CAACS,EAAQ,OACbL,EAAc,QAAU,GACxBG,EAAY,QAAUN,EACtBK,EAAc,QAAU,KAAK,MAC3B,EAAE,QAAUG,EAAO,EACnB,EAAE,QAAUA,EAAO,CAAA,EAGrB,SAASC,EAAOC,EAAgB,CAC9B,GAAI,CAACP,EAAc,QAAS,OAC5B,MAAMQ,EAAIZ,EAAA,EACV,GAAI,CAACY,EAAG,OAER,MAAMC,EADQ,KAAK,MAAMF,EAAG,QAAUC,EAAE,EAAGD,EAAG,QAAUC,EAAE,CAAC,EACrCN,EAAc,QACpC,IAAIQ,GAAOP,EAAY,QAAWM,EAAQ,IAAO,KAAK,IAAM,IACxDC,EAAM,IAAGA,GAAO,KACpBf,EAASe,CAAG,CACd,CACA,SAASC,GAAO,CACdX,EAAc,QAAU,GACxB,OAAO,oBAAoB,YAAaM,CAAM,EAC9C,OAAO,oBAAoB,UAAWK,CAAI,CAC5C,CACA,OAAO,iBAAiB,YAAaL,CAAM,EAC3C,OAAO,iBAAiB,UAAWK,CAAI,CACzC,CAAA,CAAA,CAGN"}