diff --git a/examples/svelte/src/components/Header/Header.svelte b/examples/svelte/src/components/Header/Header.svelte
index 089aea87..6fa79b68 100644
--- a/examples/svelte/src/components/Header/Header.svelte
+++ b/examples/svelte/src/components/Header/Header.svelte
@@ -1,46 +1,47 @@
- Svelte Flow
-
+ Svelte Flow
+
diff --git a/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte b/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte
new file mode 100644
index 00000000..12dec33c
--- /dev/null
+++ b/examples/svelte/src/routes/useupdatenodeinternals/+page.svelte
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte b/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte
new file mode 100644
index 00000000..f4d306ac
--- /dev/null
+++ b/examples/svelte/src/routes/useupdatenodeinternals/CustomNode.svelte
@@ -0,0 +1,29 @@
+
+
+
+
+
+{#each Array.from({ length: handleCount }) as handle, i}
+
+{/each}
diff --git a/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte b/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte
new file mode 100644
index 00000000..13b48cb3
--- /dev/null
+++ b/examples/svelte/src/routes/useupdatenodeinternals/Flow.svelte
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index 36957c68..3b04d4a1 100644
--- a/packages/svelte/package.json
+++ b/packages/svelte/package.json
@@ -1,6 +1,6 @@
{
"name": "@xyflow/svelte",
- "version": "0.0.18",
+ "version": "0.0.19",
"description": "Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.",
"keywords": [
"svelte",
diff --git a/packages/svelte/src/lib/hooks/useSvelteFlow.ts b/packages/svelte/src/lib/hooks/useSvelteFlow.ts
index a0dc8cb8..d4a40ac3 100644
--- a/packages/svelte/src/lib/hooks/useSvelteFlow.ts
+++ b/packages/svelte/src/lib/hooks/useSvelteFlow.ts
@@ -27,7 +27,6 @@ export function useSvelteFlow(): {
nodes: SvelteFlowStore['nodes'];
edges: SvelteFlowStore['edges'];
} {
- // how to get the new context here? fit view doesn't work, because the store is not updated (uses old nodes store)
const {
zoomIn,
zoomOut,
diff --git a/packages/svelte/src/lib/hooks/useUpdateNodeInternals.ts b/packages/svelte/src/lib/hooks/useUpdateNodeInternals.ts
new file mode 100644
index 00000000..9de90763
--- /dev/null
+++ b/packages/svelte/src/lib/hooks/useUpdateNodeInternals.ts
@@ -0,0 +1,28 @@
+import { get } from 'svelte/store';
+import type { UpdateNodeInternals, NodeDimensionUpdate } from '@xyflow/system';
+
+import { useStore } from '$lib/store';
+
+export function useUpdateNodeInternals(): UpdateNodeInternals {
+ const { domNode, updateNodeDimensions } = useStore();
+
+ // @todo: do we want to add this to system?
+ const updateInternals = (id: string | string[]) => {
+ const updateIds = Array.isArray(id) ? id : [id];
+ const updates = updateIds.reduce((res, updateId) => {
+ const nodeElement = get(domNode)?.querySelector(
+ `.svelte-flow__node[data-id="${updateId}"]`
+ ) as HTMLDivElement;
+
+ if (nodeElement) {
+ res.push({ id: updateId, nodeElement, forceUpdate: true });
+ }
+
+ return res;
+ }, []);
+
+ requestAnimationFrame(() => updateNodeDimensions(updates));
+ };
+
+ return updateInternals;
+}
diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts
index b3048f18..66b1af10 100644
--- a/packages/svelte/src/lib/index.ts
+++ b/packages/svelte/src/lib/index.ts
@@ -20,6 +20,7 @@ export { useStore } from '$lib/store';
// utils
export * from '$lib/utils';
export * from '$lib/hooks/useSvelteFlow';
+export * from '$lib/hooks/useUpdateNodeInternals';
// types
export type { Edge, EdgeProps, EdgeTypes, DefaultEdgeOptions } from '$lib/types/edges';