feat(react/svelte): controlled viewport (#3461)

* feat(react): controlled viewport

* refactor(react): cleanup viewport

* feat(svelte): two way data binding for viewport, cleanup transform <> viewport stuff

* refactor(svelte): viewport stuff
This commit is contained in:
Moritz Klack
2023-09-28 16:19:03 +02:00
committed by GitHub
parent 2215b68438
commit ae33cba887
35 changed files with 351 additions and 95 deletions
@@ -3,6 +3,7 @@
import { page } from '$app/stores';
const routes = [
'custom-connection-line',
'customnode',
'drag-n-drop',
'edges',
@@ -11,10 +12,10 @@
'overview',
'stress',
'subflows',
'two-way-viewport',
'usesvelteflow',
'useupdatenodeinternals',
'validation',
'custom-connection-line'
'validation'
];
const onChange = (event: Event) => {
@@ -0,0 +1,9 @@
<script lang="ts">
import { SvelteFlowProvider } from '@xyflow/svelte';
import Flow from './Flow.svelte';
</script>
<SvelteFlowProvider>
<Flow />
</SvelteFlowProvider>
@@ -0,0 +1,46 @@
<script lang="ts">
import { writable } from 'svelte/store';
import {
SvelteFlow,
Controls,
Background,
BackgroundVariant,
Panel,
useSvelteFlow,
type Viewport
} from '@xyflow/svelte';
import '@xyflow/svelte/dist/style.css';
const nodes = writable([
{
id: 'A',
position: { x: 0, y: 0 },
data: { label: 'A' }
},
{ id: 'B', position: { x: 0, y: 100 }, data: { label: 'B' } }
]);
const edges = writable([{ id: 'ab', source: 'A', target: 'B' }]);
const viewport = writable<Viewport>({ x: 0, y: 10, zoom: 1.25 });
const { fitView } = useSvelteFlow();
const updateViewport = () => {
$viewport.x += 10;
$viewport = $viewport;
};
viewport.subscribe((vp) => {
console.log('viewport update', vp);
});
</script>
<SvelteFlow {nodes} {edges} fitView {viewport}>
<Controls />
<Background variant={BackgroundVariant.Dots} />
<Panel>
<button on:click={updateViewport}>update viewport</button>
<button on:click={() => fitView()}>fitView</button>
</Panel>
</SvelteFlow>