var b=Object.defineProperty;var v=(i,t,s)=>t in i?b(i,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):i[t]=s;var l=(i,t,s)=>v(i,typeof t!="symbol"?t+"":t,s);import{g as S}from"./zO0CuF4M.js";import{e as D}from"./DOs8svU4.js";class F{constructor(t,s,o){this.tools={brush:d,eraser:w,wand:null},this.buttonStates=o,this.canvas=t,this.ctx=t.getContext("2d"),this.cursorCanvas=s,this.cursorCtx=s.getContext("2d"),this.selectedTool=this.tools.brush,this.brushSize=30,this.actions=[],this.undoneActions=[],this.handleEvents(),this.drawCursor()}async setImage(t){this.canvas.width=t.naturalWidth,this.canvas.height=t.naturalHeight,this.smallerDimension=Math.min(t.naturalWidth,t.naturalHeight),this.cursorCanvas.width=t.naturalWidth,this.cursorCanvas.height=t.naturalHeight;const s="rgb(83, 255, 146)";this.ctx.lineCap="round",this.ctx.lineJoin="round",this.ctx.strokeStyle=s,this.ctx.fillStyle=s,this.cursorCtx.lineCap="round",this.cursorCtx.lineJoin="round",this.cursorCtx.strokeStyle=s,this.image=t;let o=await k(t,t.naturalWidth,t.naturalHeight,256,512);const a=t.naturalWidth/o.naturalWidth,n=t.naturalHeight/o.naturalHeight;return this.segmentScaleFactor=Math.max(a,n),o}handleEvents(){this.canvas.addEventListener("pointerdown",this.startDrawing.bind(this)),window.addEventListener("pointermove",this.draw.bind(this)),window.addEventListener("pointerup",this.stopDrawing.bind(this))}drawCursor(){this.cursorCtx.clearRect(0,0,this.cursorCanvas.width,this.cursorCanvas.height),this.buttonStates.toolName!=="auto"&&this.mousePosition&&(this.cursorCtx.lineWidth=this.brushSize,u(this.cursorCtx,this.mousePosition,this.mousePosition)),requestAnimationFrame(()=>this.drawCursor())}selectTool(t){this.selectedTool=this.tools[t],this.buttonStates.toolName=t}changeBrushSize(t){this.brushSize=t}clearCanvas(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}redraw(){this.clearCanvas();for(const t of this.actions)t.apply()}undo(){if(this.currentDrawAction&&this.stopDrawing(),this.actions.length===0)return;const t=this.actions.pop();this.undoneActions.unshift(t),t.name=="wand"&&(t.path.dataset.selected="false"),this.redraw(),this.updateStore()}redo(){if(this.undoneActions.length===0)return;const t=this.undoneActions.shift();this.actions.push(t),t.apply(),this.updateStore()}startDrawing(t){!this.selectedTool||!this.image||(this.tool=new this.selectedTool(this.ctx,this.brushSize),this.draw(t))}draw(t){this.image&&(this.mousePosition=A(this.image,t),this.tool&&this.tool&&this.tool.update(this.mousePosition))}addDrawAction(t){this.actions.push(t),this.undoneActions=[]}stopDrawing(){!this.image||!this.tool||(this.addDrawAction(this.tool),this.tool=null,this.updateStore())}resetDrawing(){this.clearCanvas();for(const t of this.actions)t.name==="wand"&&(t.path.dataset.selected=!1);this.undoneActions=[],this.actions=[],this.currentDrawAction=null,this.updateStore()}updateStore(){this.buttonStates.undoCount=this.actions.length,this.buttonStates.redoCount=this.undoneActions.length}isCanvasEmpty(){const t=this.ctx.getImageData(0,0,this.canvas.width,this.canvas.height).data;for(let s=0;sa&&(n=a/Math.min(t,s));const e=document.createElement("canvas");return e.width=t*n,e.height=s*n,e.getContext("2d").drawImage(i,0,0,e.width,e.height),new Promise((c,h)=>{const r=new Image;r.onload=()=>c(r),r.src=e.toDataURL()})}async function T(i,t=null){D("download_result");const s=document.createElement("a");s.href=i,s.target="_blank",t===null?s.download="download."+S(i):s.download="download."+t,document.body.appendChild(s),s.click(),document.body.removeChild(s)}export{F as D,T as d,k as r};