diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/BaseNode.svelte index 91734959..40870b1e 100644 --- a/packages/svelte/src/lib/components/nodes/BaseNode.svelte +++ b/packages/svelte/src/lib/components/nodes/BaseNode.svelte @@ -8,10 +8,13 @@ export let id: string; export let positionAbsolute: XYPosition = { x: 0, y: 0 }; + export let position: XYPosition = { x: 0, y: 0 }; export let dragging: boolean = false; export let data: any = {}; export let resizeObserver: ResizeObserver | null = null; export let style: any = {}; + export let width: number = 0; + export let height: number = 0; let nodeRef: HTMLDivElement; @@ -32,6 +35,7 @@
\ No newline at end of file diff --git a/packages/svelte/src/lib/container/NodeRenderer.svelte b/packages/svelte/src/lib/container/NodeRenderer.svelte index 8e1bb4e1..875483b1 100644 --- a/packages/svelte/src/lib/container/NodeRenderer.svelte +++ b/packages/svelte/src/lib/container/NodeRenderer.svelte @@ -18,6 +18,7 @@ onDestroy(() => { resizeObserver?.disconnect(); }); +
diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index d053894a..a2dbe617 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -1,5 +1,6 @@ import SvelteFlow from '$lib/container/SvelteFlow.svelte'; export { Controls, ControlButton } from '$lib/plugins/Controls'; export { Background, BackgroundVariant } from '$lib/plugins/Background'; +export { Minimap } from '$lib/plugins/Minimap'; export default SvelteFlow; diff --git a/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte new file mode 100644 index 00000000..9de661f3 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/Minimap.svelte @@ -0,0 +1,102 @@ + + + + + {#if ariaLabel}{ariaLabel}{/if} + + {#each $nodesStore as node} + {#if node.width && node.height} + {@const pos = getNodePositionWithOrigin(node, $nodeOriginStore).positionAbsolute} + + {/if} + {/each} + + + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte new file mode 100644 index 00000000..41de5dcf --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/MinimapNode.svelte @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/packages/svelte/src/lib/plugins/Minimap/index.ts b/packages/svelte/src/lib/plugins/Minimap/index.ts new file mode 100644 index 00000000..b21255c0 --- /dev/null +++ b/packages/svelte/src/lib/plugins/Minimap/index.ts @@ -0,0 +1 @@ +export { default as Minimap } from './Minimap.svelte'; diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts index 2ad3c2a7..86209515 100644 --- a/packages/svelte/src/lib/store/index.ts +++ b/packages/svelte/src/lib/store/index.ts @@ -13,9 +13,9 @@ import { type D3SelectionInstance, type ViewportHelperFunctionOptions } from '@reactflow/system'; -import { fitView, getD3Transition } from '@reactflow/utils'; +import { fitView, getD3Transition, getDimensions } from '@reactflow/utils'; -import { getDimensions, getHandleBounds } from '../../utils'; +import { getHandleBounds } from '../../utils'; import { getEdgePositions, getHandle, @@ -51,6 +51,7 @@ type SvelteFlowStore = { transformStore: Writable; edgesWithDataStore: Readable; idStore: Writable; + nodeOriginStore: Writable; zoomIn: (options?: ViewportHelperFunctionOptions) => void; zoomOut: (options?: ViewportHelperFunctionOptions) => void; fitView: (options?: ViewportHelperFunctionOptions) => boolean; @@ -243,6 +244,7 @@ export function createStore({ widthStore, edgesWithDataStore, idStore, + nodeOriginStore, updateNodePositions, updateNodeDimensions, zoomIn, diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte index 2c5a8b09..bda7e50a 100644 --- a/packages/svelte/src/routes/+page.svelte +++ b/packages/svelte/src/routes/+page.svelte @@ -1,7 +1,7 @@