make viewport bindable

This commit is contained in:
peterkogo
2024-12-18 12:14:32 +01:00
parent 08b5f81cf5
commit 801300e895
5 changed files with 33 additions and 16 deletions
@@ -102,6 +102,7 @@ export const getInitialStore = (signals: StoreSignals) => {
set edges(edges) {
signals.edges = edges;
}
nodeLookup: NodeLookup = new Map();
parentLookup: ParentLookup = new Map();
connectionLookup: ConnectionLookup = new Map();
@@ -147,7 +148,17 @@ export const getInitialStore = (signals: StoreSignals) => {
nodeTypes: NodeTypes = $derived({ ...initialNodeTypes, ...signals.props.nodeTypes });
edgeTypes: EdgeTypes = $derived({ ...initialEdgeTypes, ...signals.props.edgeTypes });
viewport: Viewport = $state(signals.props.initialViewport ?? { x: 0, y: 0, zoom: 1 });
// _viewport is the internal viewport. We either return signals.viewport or _viewport
_viewport: Viewport = $state(signals.props.initialViewport ?? { x: 0, y: 0, zoom: 1 });
get viewport() {
return signals.viewport ?? this._viewport;
}
set viewport(viewport: Viewport) {
if (signals.viewport) {
signals.viewport = viewport;
}
this._viewport = viewport;
}
connectionMode: ConnectionMode = $derived(
signals.props.connectionMode ?? ConnectionMode.Strict
+3 -1
View File
@@ -5,7 +5,8 @@ import type {
Connection,
UpdateNodePositions,
CoordinateExtent,
UpdateConnection
UpdateConnection,
Viewport
} from '@xyflow/system';
import type { getInitialStore } from './initial-store.svelte';
@@ -42,6 +43,7 @@ export type StoreSignals = {
height?: number;
nodes: Node[];
edges: Edge[];
viewport?: Viewport;
};
export type SvelteFlowStoreState = ReturnType<typeof getInitialStore>;