diff --git a/frontend/apps/editor3d/app/src/pages/PageDraw/Mirai.tsx b/frontend/apps/editor3d/app/src/pages/PageDraw/Mirai.tsx index bf82bc770e..a338695376 100644 --- a/frontend/apps/editor3d/app/src/pages/PageDraw/Mirai.tsx +++ b/frontend/apps/editor3d/app/src/pages/PageDraw/Mirai.tsx @@ -158,7 +158,7 @@ export const Mirai = ({ strokeWidth: brushSize / stage.scaleX(), draggable: true, }; - + store.selectNode(null); store.addLineNode(newLineNode); setCurrentLineId(lineId); setIsDrawing(true); @@ -386,13 +386,11 @@ export const Mirai = ({ const handleNodeMouseLeave = (e: Konva.KonvaEventObject) => { const container = e.target.getStage()?.container(); if (!container) return; - const defaultCursor = activeTool === 'draw' - ? 'crosshair' - : activeTool === 'eraser' - ? 'cell' - : activeTool === 'select' - ? 'grab' - : 'default'; + const defaultCursor = activeTool === 'draw' || activeTool === 'eraser' + ? 'none' + : activeTool === 'select' + ? 'grab' + : 'default'; container.style.cursor = defaultCursor; }; @@ -467,17 +465,21 @@ export const Mirai = ({ const renderNode = (node: Node | LineNode) => { // Node Callbacks const handleNodeMouseDown = (e: Konva.KonvaEventObject, nodeId: string) => { + // Don't select nodes when draw or erase tools are active + if (activeTool === 'draw' || activeTool === 'eraser') { + return; + } + // Check if Ctrl/Cmd key is pressed const isMultiSelect = e.evt.ctrlKey || e.evt.metaKey; // If clicking directly on the stage, clear selection if (e.target === e.target.getStage()) { - store.selectNode(null); return; } - store.selectNode(nodeId,isMultiSelect); + store.selectNode(nodeId, isMultiSelect); }; const handleNodeDragStart = (e: Konva.KonvaEventObject, nodeId:string) => { diff --git a/frontend/apps/editor3d/app/src/pages/PageDraw/SceneState.ts b/frontend/apps/editor3d/app/src/pages/PageDraw/SceneState.ts index 85c323b6ed..2c73a28231 100644 --- a/frontend/apps/editor3d/app/src/pages/PageDraw/SceneState.ts +++ b/frontend/apps/editor3d/app/src/pages/PageDraw/SceneState.ts @@ -239,6 +239,7 @@ export const useSceneStore = create((set, get) => ({ draggable: true }); get().addNode(node); + get().setActiveTool('select'); // Switch to select tool after creating }, createCircle: (x: number, y: number, radius = 50, fill = '#f0f0f0') => { @@ -255,6 +256,7 @@ export const useSceneStore = create((set, get) => ({ draggable: true }); get().addNode(node); + get().setActiveTool('select'); // Switch to select tool after creating }, createTriangle: (x: number, y: number, width = 100, height = 100, fill = '#d0d0d0') => { @@ -271,6 +273,7 @@ export const useSceneStore = create((set, get) => ({ draggable: true }); get().addNode(node); + get().setActiveTool('select'); // Switch to select tool after creating }, // History management diff --git a/frontend/apps/editor3d/app/src/pages/PageDraw/SideToolbar.tsx b/frontend/apps/editor3d/app/src/pages/PageDraw/SideToolbar.tsx index 1f62da8c21..5c216d7a20 100644 --- a/frontend/apps/editor3d/app/src/pages/PageDraw/SideToolbar.tsx +++ b/frontend/apps/editor3d/app/src/pages/PageDraw/SideToolbar.tsx @@ -62,11 +62,11 @@ const SideToolbar: React.FC = ({ onGenerateImage, onUploadImage, onDelete, + activeToolId, className = "", }) => { /* ------------------------------------------------ state ---------- */ const [open, setOpen] = useState(null); - const [selected, setSel] = useState("select"); const [brushSize, setBrushSize] = useState(16); const [brushHsva, setBrushHsva] = useState({ h:120,s:100,v:100,a:1 }); @@ -310,7 +310,7 @@ const SideToolbar: React.FC = ({ } const { id, icon, onClick, popout, label } = tool; - const active = id === selected; + const active = id === activeToolId; const btnStyle = active ? "bg-zinc-600 text-white" : "hover:bg-zinc-800 text-zinc-100"; return ( @@ -321,7 +321,6 @@ const SideToolbar: React.FC = ({