feat: enhance Comfy API handling and add tests for branded non-Z diffusion models
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import type { Dispatch } from "@commands/dispatcher";
|
||||
import { commandIds } from "@commands/ids";
|
||||
import type { CommandPayloads } from "@commands/payloads";
|
||||
import type { PointerInputEvent } from "./pointer";
|
||||
import { createViewportPanInputController } from "./viewport-pan";
|
||||
|
||||
@@ -45,25 +46,36 @@ describe("viewport pan store integration", () => {
|
||||
});
|
||||
});
|
||||
|
||||
type InputToolId = "select" | "brush" | "eraser" | "pan";
|
||||
type InputToolId = CommandPayloads[typeof commandIds.toolSetActive]["tool"];
|
||||
type InputInteractionMode =
|
||||
| { type: "tool"; tool: InputToolId }
|
||||
| { type: "temporary-pan"; previousTool: InputToolId };
|
||||
|
||||
type InputStoreState = {
|
||||
viewport: { center: { x: number; y: number }; zoom: number };
|
||||
tools: { activeTool: InputToolId; interactionMode: InputInteractionMode };
|
||||
};
|
||||
|
||||
type InputStore = ReturnType<typeof createInputStore>;
|
||||
|
||||
function createInputStore() {
|
||||
const store = {
|
||||
state: {
|
||||
viewport: { center: { x: 0, y: 0 }, zoom: 1 },
|
||||
tools: {
|
||||
activeTool: "select" as InputToolId,
|
||||
interactionMode: { type: "tool" as const, tool: "select" as InputToolId },
|
||||
},
|
||||
const state: InputStoreState = {
|
||||
viewport: { center: { x: 0, y: 0 }, zoom: 1 },
|
||||
tools: {
|
||||
activeTool: "select",
|
||||
interactionMode: { type: "tool", tool: "select" },
|
||||
},
|
||||
};
|
||||
const store = {
|
||||
state,
|
||||
dispatch: ((commandId, payload) => {
|
||||
switch (commandId) {
|
||||
case commandIds.toolSetActive:
|
||||
store.state.tools.activeTool = payload.tool;
|
||||
store.state.tools.interactionMode = { type: "tool", tool: payload.tool };
|
||||
case commandIds.toolSetActive: {
|
||||
const next = payload as CommandPayloads[typeof commandIds.toolSetActive];
|
||||
store.state.tools.activeTool = next.tool;
|
||||
store.state.tools.interactionMode = { type: "tool", tool: next.tool };
|
||||
break;
|
||||
}
|
||||
case commandIds.toolEnterTemporaryPan:
|
||||
store.state.tools.interactionMode = { type: "temporary-pan", previousTool: store.state.tools.activeTool };
|
||||
break;
|
||||
@@ -75,12 +87,14 @@ function createInputStore() {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case commandIds.viewportPan:
|
||||
case commandIds.viewportPan: {
|
||||
const next = payload as CommandPayloads[typeof commandIds.viewportPan];
|
||||
store.state.viewport.center = {
|
||||
x: store.state.viewport.center.x + payload.delta.x,
|
||||
y: store.state.viewport.center.y + payload.delta.y,
|
||||
x: store.state.viewport.center.x + next.delta.x,
|
||||
y: store.state.viewport.center.y + next.delta.y,
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ignoredState;
|
||||
}) as Dispatch,
|
||||
|
||||
Reference in New Issue
Block a user