diff --git a/src/lib/components/ComfyJourneyView.svelte b/src/lib/components/ComfyJourneyView.svelte index 8004451..7486293 100644 --- a/src/lib/components/ComfyJourneyView.svelte +++ b/src/lib/components/ComfyJourneyView.svelte @@ -14,7 +14,7 @@ import uiState from '$lib/stores/uiState'; import { resolvePatch, type JourneyPatchNode, type WritableJourneyStateStore, diffParams, type JourneyNode } from '$lib/stores/journeyStates'; import JourneyRenderer, { type JourneyNodeEvent } from './JourneyRenderer.svelte'; - import { Trash, ClockHistory, Diagram3 } from "svelte-bootstrap-icons"; + import { Trash, ClockHistory, Diagram3, GeoAlt } from "svelte-bootstrap-icons"; import { getWorkflowRestoreParamsFromWorkflow } from '$lib/restoreParameters'; import notify from '$lib/notify'; import selectionState from '$lib/stores/selectionState'; @@ -32,6 +32,7 @@ let journey: WritableJourneyStateStore | null = null; let activeNode: JourneyNode | null = null; let mode: JourneyMode = "linear"; + let cyto: cytoscape.Core | null = null; const MODES: [JourneyMode, typeof SvelteComponent][] = [ ["linear", ClockHistory], @@ -62,6 +63,21 @@ notify("History cleared.", { type: "info" }) } + function doCenter() { + if (cyto == null) + return; + + const activeNode = journey.getActiveNode(); + if (activeNode == null) + return; + + const node = cyto.$(`#${activeNode.id}`); + if (node.isNode()) { + cyto.zoom(1.25); + cyto.center(node) + } + } + function onSelectNode(e: CustomEvent) { const { node } = e.detail; @@ -141,7 +157,13 @@
+
{#key $journey.version} {#if workflow && journey} - diff --git a/src/lib/components/graph/Graph.svelte b/src/lib/components/graph/Graph.svelte index 9726679..4ecdc5e 100644 --- a/src/lib/components/graph/Graph.svelte +++ b/src/lib/components/graph/Graph.svelte @@ -18,6 +18,9 @@ export let style: string = "" + let refElement = null + export let cyInstance: cytoscape.Core | null = null + const dispatch = createEventDispatcher<{ rebuilt: { cyto: cytoscape.Core }; }>(); @@ -75,9 +78,6 @@ dispatch("rebuilt", { cyto: cyInstance }) } - - let refElement = null - let cyInstance: cytoscape.Core = null
diff --git a/src/lib/restoreParameters.ts b/src/lib/restoreParameters.ts index 9a95ab4..6d23fec 100644 --- a/src/lib/restoreParameters.ts +++ b/src/lib/restoreParameters.ts @@ -39,6 +39,8 @@ export interface RestoreParamSource { */ export interface RestoreParamSourceWorkflowNode extends RestoreParamSource<"workflow"> { type: "workflow", + + prevValue?: any } export type RestoreParamWorkflowNodeTargets = Record @@ -233,6 +235,7 @@ export function getWorkflowRestoreParams(serGraph: SerializedLGraph, workflow?: type: "workflow", nodeType: node.type, name, + prevValue: finalValue, finalValue, } result[node.id] = source; diff --git a/src/lib/stores/journeyStates.ts b/src/lib/stores/journeyStates.ts index ae27bc4..be7e446 100644 --- a/src/lib/stores/journeyStates.ts +++ b/src/lib/stores/journeyStates.ts @@ -81,6 +81,7 @@ export function diffParams(base: RestoreParamWorkflowNodeTargets, updated: Resto for (const [k, v] of Object.entries(updated)) { if (!(k in base) || !deepEqual(base[k].finalValue, v.finalValue, { strict: true })) { result[k] = v + v.prevValue = base[k].finalValue } }