Files
image-studio/commands/tool.ts
2026-07-03 11:31:02 +02:00

66 lines
1.6 KiB
TypeScript

import type { ToolId } from "@editor/tools";
import type { Command } from "./command";
import { commandIds } from "./ids";
export type ToolSetActivePayload = {
tool: ToolId;
};
export const toolSetActiveCommand: Command<ToolSetActivePayload> = {
id: commandIds.toolSetActive,
name: "Set active tool",
execute({ state }, payload) {
return {
...state,
editor: {
...state.editor,
tools: {
activeTool: payload.tool,
interactionMode: { type: "tool", tool: payload.tool },
},
},
};
},
};
export const toolEnterTemporaryPanCommand: Command = {
id: commandIds.toolEnterTemporaryPan,
name: "Enter temporary pan",
execute({ state }) {
if (state.editor.tools.interactionMode.type === "temporary-pan") return state;
return {
...state,
editor: {
...state.editor,
tools: {
...state.editor.tools,
interactionMode: { type: "temporary-pan", previousTool: state.editor.tools.activeTool },
},
},
};
},
};
export const toolExitTemporaryPanCommand: Command = {
id: commandIds.toolExitTemporaryPan,
name: "Exit temporary pan",
execute({ state }) {
const mode = state.editor.tools.interactionMode;
if (mode.type !== "temporary-pan") return state;
return {
...state,
editor: {
...state.editor,
tools: {
activeTool: mode.previousTool,
interactionMode: { type: "tool", tool: mode.previousTool },
},
},
};
},
};
export const toolCommands = [toolSetActiveCommand, toolEnterTemporaryPanCommand, toolExitTemporaryPanCommand] satisfies Command<unknown>[];