diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index 09e72ce2..cd4162bd 100644
--- a/packages/svelte/package.json
+++ b/packages/svelte/package.json
@@ -16,6 +16,7 @@
".": "./index.js"
},
"dependencies": {
+ "@reactflow/edge-utils": "workspace:*",
"@reactflow/system": "workspace:*",
"@reactflow/utils": "workspace:*",
"@svelte-put/shortcut": "^2.0.0",
diff --git a/packages/svelte/src/customnodes/Custom.svelte b/packages/svelte/src/customnodes/Custom.svelte
index 41057123..09b6c7f5 100644
--- a/packages/svelte/src/customnodes/Custom.svelte
+++ b/packages/svelte/src/customnodes/Custom.svelte
@@ -10,8 +10,8 @@
{data.label}
{~~xPos}, {~~yPos}
-
-
+
+
\ No newline at end of file
diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte
new file mode 100644
index 00000000..decca792
--- /dev/null
+++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte
@@ -0,0 +1,21 @@
+
+
+
\ No newline at end of file
diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte
new file mode 100644
index 00000000..6b0d1c42
--- /dev/null
+++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte
@@ -0,0 +1,21 @@
+
+
+
\ No newline at end of file
diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte
new file mode 100644
index 00000000..285bbadc
--- /dev/null
+++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/packages/svelte/src/lib/container/Pane/index.svelte b/packages/svelte/src/lib/container/Pane/index.svelte
index b4a03386..ba7580f0 100644
--- a/packages/svelte/src/lib/container/Pane/index.svelte
+++ b/packages/svelte/src/lib/container/Pane/index.svelte
@@ -1,14 +1,8 @@
-
+
+
diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts
index d7daecab..85ded208 100644
--- a/packages/svelte/src/lib/store/index.ts
+++ b/packages/svelte/src/lib/store/index.ts
@@ -27,7 +27,10 @@ import { SelectionMode } from 'reactflow';
import DefaultNode from '$lib/components/nodes/DefaultNode.svelte';
import InputNode from '$lib/components/nodes/InputNode.svelte';
import OutputNode from '$lib/components/nodes/OutputNode.svelte';
-import type { NodeTypes } from '$lib/types';
+import type { EdgeTypes, NodeTypes } from '$lib/types';
+import BezierEdge from '$lib/components/edges/BezierEdge.svelte';
+import StraightEdge from '$lib/components/edges/StraightEdge.svelte';
+import SmoothStepEdge from '$lib/components/edges/SmoothStepEdge.svelte';
export const key = Symbol();
@@ -38,6 +41,7 @@ type CreateStoreProps = {
nodeOrigin?: NodeOrigin;
transform?: Transform;
nodeTypes?: NodeTypes;
+ edgeTypes?: EdgeTypes;
id?: string;
};
@@ -65,6 +69,7 @@ type SvelteFlowStore = {
selectionMode: Writable;
selectionKeyPressedStore: Writable;
nodeTypesStore: Writable;
+ edgeTypesStore: Writable;
zoomIn: (options?: ViewportHelperFunctionOptions) => void;
zoomOut: (options?: ViewportHelperFunctionOptions) => void;
fitView: (options?: ViewportHelperFunctionOptions) => boolean;
@@ -84,6 +89,7 @@ export function createStore({
nodeOrigin = [0, 0],
fitView: fitViewOnInit = false,
nodeTypes = {},
+ edgeTypes = {},
id = '1'
}: CreateStoreProps): SvelteFlowStore {
const nodesStore = writable(nodes.map((n) => ({ ...n, positionAbsolute: n.position })));
@@ -108,6 +114,13 @@ export function createStore({
default: nodeTypes.default || DefaultNode
});
+ const edgeTypesStore = writable({
+ ...edgeTypes,
+ straight: edgeTypes.straight || StraightEdge,
+ smoothstep: edgeTypes.smoothstep || SmoothStepEdge,
+ default: edgeTypes.default || BezierEdge
+ });
+
let fitViewOnInitDone = false;
const edgesWithDataStore = derived([edgesStore, nodesStore], ([$edges, $nodes]) => {
@@ -293,6 +306,7 @@ export function createStore({
selectionRectModeStore,
selectionMode,
nodeTypesStore,
+ edgeTypesStore,
updateNodePositions,
updateNodeDimensions,
zoomIn,
@@ -304,5 +318,6 @@ export function createStore({
export function useStore(): SvelteFlowStore {
const { getStore } = getContext<{ getStore: () => SvelteFlowStore }>(key);
+
return getStore();
}
diff --git a/packages/svelte/src/lib/types/index.ts b/packages/svelte/src/lib/types/index.ts
index d295e4ec..1bc07e7d 100644
--- a/packages/svelte/src/lib/types/index.ts
+++ b/packages/svelte/src/lib/types/index.ts
@@ -13,3 +13,15 @@ export type NodeProps = Record>;
+
+export type EdgeProps = {
+ id: string;
+ sourceX: number;
+ sourceY: number;
+ targetX: number;
+ targetY: number;
+ sourcePosition?: Position;
+ targetPosition?: Position;
+};
+
+export type EdgeTypes = Record>;
diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte
index b2736b94..6a664f0a 100644
--- a/packages/svelte/src/routes/+page.svelte
+++ b/packages/svelte/src/routes/+page.svelte
@@ -4,64 +4,84 @@
import SvelteFlow, { Controls, Background, BackgroundVariant, Minimap } from '../lib/index';
import CustomNode from '../customnodes/Custom.svelte';
- const yNodes = 10;
- const xNodes = 10;
-
- const nodes: Node[] = [];
- const edges: Edge[] = [];
-
const nodeTypes = {
custom: CustomNode,
};
- let source = null;
+ // const yNodes = 10;
+ // const xNodes = 10;
- for (let y = 0; y < yNodes; y++) {
- for (let x = 0; x < xNodes; x++) {
- const position = { x: x * 100, y: y * 50 };
- const id = `${x}-${y}`;
- const data = { label: `Node ${id}` };
- const node = {
- id,
- data,
- position,
- type: x === 0 ? 'custom' : 'default',
- };
- nodes.push(node);
+ // const nodes: Node[] = [];
+ // const edges: Edge[] = [];
- if (source) {
- const edge = {
- id: `${source.id}-${id}`,
- source: source.id,
- target: id,
- };
- edges.push(edge);
- }
- source = node;
-
- }
- }
+ // let source = null;
- // const nodes = [{
- // id: '1',
- // type: 'input',
- // data: { label: 'Input Node' },
- // position: { x: 250, y: 5 }
- // }, {
- // id: '2',
- // type: 'input',
- // data: { label: 'Input Node 2' },
- // position: { x: 150, y: 250 },
- // }]
+ // for (let y = 0; y < yNodes; y++) {
+ // for (let x = 0; x < xNodes; x++) {
+ // const position = { x: x * 100, y: y * 50 };
+ // const id = `${x}-${y}`;
+ // const data = { label: `Node ${id}` };
+ // const node = {
+ // id,
+ // data,
+ // position,
+ // type: x === 0 ? 'custom' : 'default',
+ // };
+ // nodes.push(node);
- // const edges = [{
- // id: '1-2',
- // type: 'default',
- // source: '1',
- // target: '2'
- // }]
+ // if (source) {
+ // const edge = {
+ // id: `${source.id}-${id}`,
+ // source: source.id,
+ // target: id,
+ // };
+ // edges.push(edge);
+ // }
+
+ // source = node;
+ // }
+ // }
+
+ const nodes: Node[] = [{
+ id: '1',
+ type: 'input',
+ data: { label: 'Input Node' },
+ position: { x: 150, y: 5 }
+ }, {
+ id: '2',
+ type: 'default',
+ data: { label: 'Node' },
+ position: { x: 0, y: 150 },
+ }, {
+ id: '3',
+ type: 'output',
+ data: { label: 'Output Node' },
+ position: { x: 300, y: 150 },
+ }, {
+ id: '4',
+ type: 'custom',
+ data: { label: 'Custom Node' },
+ position: { x: 150, y: 300 },
+ }];
+
+ const edges: Edge[] = [{
+ id: '1-2',
+ type: 'default',
+ source: '1',
+ target: '2'
+ }, {
+ id: '1-3',
+ type: 'smoothstep',
+ source: '1',
+ target: '3'
+ }, {
+ id: '2-4',
+ type: 'default',
+ source: '2',
+ target: '4'
+ }];
diff --git a/packages/system/package.json b/packages/system/package.json
index 48a6575c..67654749 100644
--- a/packages/system/package.json
+++ b/packages/system/package.json
@@ -57,6 +57,6 @@
},
"rollup": {
"globals": {},
- "name": "ReactFlowCore"
+ "name": "ReactFlowSystem"
}
}
diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts
index 3a488d88..94a0c81c 100644
--- a/packages/system/src/types/general.ts
+++ b/packages/system/src/types/general.ts
@@ -77,6 +77,8 @@ export type FitViewParams = {
nodeOrigin: NodeOrigin;
d3Zoom: D3ZoomInstance;
d3Selection: D3SelectionInstance;
+ minZoom: number;
+ maxZoom: number;
};
export type FitViewOptions = {
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 887cdd89..33b95963 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -59,6 +59,6 @@
},
"rollup": {
"globals": {},
- "name": "ReactFlowCore"
+ "name": "ReactFlowUtils"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 74088eff..afe772eb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -143,6 +143,7 @@ importers:
packages/core:
specifiers:
+ '@reactflow/edge-utils': workspace:^11.5.5
'@reactflow/eslint-config': workspace:*
'@reactflow/rollup-config': workspace:*
'@reactflow/system': workspace:*
@@ -163,6 +164,7 @@ importers:
typescript: ^4.9.4
zustand: ^4.3.3
dependencies:
+ '@reactflow/edge-utils': link:../edge-utils
'@reactflow/system': link:../system
'@reactflow/utils': link:../utils
'@types/d3': registry.npmjs.org/@types/d3/7.4.0
@@ -310,6 +312,7 @@ importers:
packages/svelte:
specifiers:
+ '@reactflow/edge-utils': workspace:^11.5.5
'@reactflow/system': workspace:*
'@reactflow/utils': workspace:*
'@svelte-put/shortcut': ^2.0.0
@@ -335,6 +338,7 @@ importers:
typescript: ^4.9.3
vite: ^4.1.1
dependencies:
+ '@reactflow/edge-utils': link:../edge-utils
'@reactflow/system': link:../system
'@reactflow/utils': link:../utils
'@svelte-put/shortcut': registry.npmjs.org/@svelte-put/shortcut/2.0.0