diff --git a/packages/svelte/src/lib/actions/portal/index.ts b/packages/svelte/src/lib/actions/portal/index.ts
new file mode 100644
index 00000000..4c5d89ea
--- /dev/null
+++ b/packages/svelte/src/lib/actions/portal/index.ts
@@ -0,0 +1,15 @@
+export default function (node: Element, target = 'body') {
+ const targetEl = document.querySelector(target);
+
+ if (targetEl) {
+ targetEl.appendChild(node);
+ }
+
+ return {
+ destroy() {
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+ }
+ };
+}
diff --git a/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte
new file mode 100644
index 00000000..03000191
--- /dev/null
+++ b/packages/svelte/src/lib/components/EdgeLabelRenderer/index.svelte
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/svelte/src/lib/components/edges/BaseEdge.svelte b/packages/svelte/src/lib/components/edges/BaseEdge.svelte
index 1e70dbe6..c92a9412 100644
--- a/packages/svelte/src/lib/components/edges/BaseEdge.svelte
+++ b/packages/svelte/src/lib/components/edges/BaseEdge.svelte
@@ -1,44 +1,46 @@
-
-
+
+{#if interactionWidth}
+
-
+{/if}
+
+{#if label}
+
+
+ {label}
+
+
+{/if}
\ 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
index 022d754c..c9e4cc4f 100644
--- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte
+++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte
@@ -1,21 +1,24 @@
-
\ No newline at end of file
+
diff --git a/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte
new file mode 100644
index 00000000..5a0e79f4
--- /dev/null
+++ b/packages/svelte/src/lib/components/edges/EdgeWrapper.svelte
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte
index 95666355..ec1b2db9 100644
--- a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte
+++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte
@@ -1,21 +1,24 @@
-
\ 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
index 285bbadc..f1d7c190 100644
--- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte
+++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte
@@ -1,19 +1,22 @@
-
\ No newline at end of file
diff --git a/packages/svelte/src/lib/components/nodes/BaseNode.svelte b/packages/svelte/src/lib/components/nodes/NodeWrapper.svelte
similarity index 99%
rename from packages/svelte/src/lib/components/nodes/BaseNode.svelte
rename to packages/svelte/src/lib/components/nodes/NodeWrapper.svelte
index c5f01795..fecb9832 100644
--- a/packages/svelte/src/lib/components/nodes/BaseNode.svelte
+++ b/packages/svelte/src/lib/components/nodes/NodeWrapper.svelte
@@ -85,7 +85,6 @@
\ No newline at end of file
diff --git a/packages/svelte/src/lib/store/index.ts b/packages/svelte/src/lib/store/index.ts
index 68ceaa35..8839d3b9 100644
--- a/packages/svelte/src/lib/store/index.ts
+++ b/packages/svelte/src/lib/store/index.ts
@@ -6,6 +6,7 @@ import {
type NodeDimensionUpdate,
Position,
internalsSymbol,
+ SelectionMode,
type NodeOrigin,
type D3ZoomInstance,
type D3SelectionInstance,
@@ -16,17 +17,11 @@ import {
import { fitView, getConnectedEdges, getD3Transition, getDimensions } from '@reactflow/utils';
import { getHandleBounds } from '../../utils';
-import {
- getEdgePositions,
- getHandle,
- getNodeData,
- type EdgePosition
-} from '$lib/container/EdgeRenderer/utils';
-import { SelectionMode } from 'reactflow';
+import { getEdgePositions, getHandle, getNodeData } from '$lib/container/EdgeRenderer/utils';
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 { EdgeTypes, NodeTypes, Node, Edge } from '$lib/types';
+import type { EdgeTypes, NodeTypes, Node, Edge, WrapEdgeProps } 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';
@@ -42,11 +37,6 @@ type CreateStoreProps = {
id?: string;
};
-export type EdgeWithData = EdgePosition & {
- id: string;
- type: string;
-};
-
type SvelteFlowStore = {
nodesStore: Writable;
edgesStore: Writable;
@@ -57,7 +47,7 @@ type SvelteFlowStore = {
selection: D3SelectionInstance | null;
}>;
transformStore: Writable;
- edgesWithDataStore: Readable;
+ edgesWithDataStore: Readable;
idStore: Writable;
nodeOriginStore: Writable;
draggingStore: Writable;
@@ -162,16 +152,24 @@ export function createStore({
targetPosition
);
+ // we nee to do this to match the types
+ const sourceHandleId = edge.sourceHandle;
+ const targetHandleId = edge.targetHandle;
+
return {
- id: edge.id,
+ ...edge,
type: edgeType,
sourceX,
sourceY,
targetX,
- targetY
+ targetY,
+ sourcePosition,
+ targetPosition,
+ sourceHandleId,
+ targetHandleId
};
})
- .filter((e) => e !== null) as EdgeWithData[];
+ .filter((e) => e !== null) as WrapEdgeProps[];
});
function setEdges(edges: Edge[]) {
@@ -359,6 +357,7 @@ export function createStore({
function addSelectedNodes(ids: string[]) {
selectionRectStore.set(null);
+ selectionRectModeStore.set(null);
if (get(multiselectionKeyPressedStore)) {
// @todo handle multiselection key
diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts
index 217b0efd..37df39cd 100644
--- a/packages/svelte/src/lib/types/edges.ts
+++ b/packages/svelte/src/lib/types/edges.ts
@@ -1,25 +1,4 @@
import type { SvelteComponentTyped } from 'svelte';
-import type { Position } from '@reactflow/system';
-
-export type Edge = {
- id: string;
- type: string;
- source: string;
- target: string;
- sourceHandle?: string;
- targetHandle?: string;
- selected?: boolean;
- deletable?: boolean;
-};
-
-export type EdgeProps = {
- id: string;
- sourceX: number;
- sourceY: number;
- targetX: number;
- targetY: number;
- sourcePosition?: Position;
- targetPosition?: Position;
-};
+import type { EdgeProps } from '$lib/types';
export type EdgeTypes = Record>;
diff --git a/packages/svelte/src/lib/types/index.ts b/packages/svelte/src/lib/types/index.ts
index 43288f9a..ced30c7a 100644
--- a/packages/svelte/src/lib/types/index.ts
+++ b/packages/svelte/src/lib/types/index.ts
@@ -1,4 +1,11 @@
-export type { Position, XYPosition } from '@reactflow/system';
+export type {
+ Position,
+ XYPosition,
+ Edge,
+ BaseEdgeProps,
+ WrapEdgeProps,
+ EdgeProps
+} from '@reactflow/system';
export * from './nodes';
export * from './edges';
diff --git a/packages/svelte/src/routes/+page.svelte b/packages/svelte/src/routes/+page.svelte
index 42118d11..2eea4c7c 100644
--- a/packages/svelte/src/routes/+page.svelte
+++ b/packages/svelte/src/routes/+page.svelte
@@ -83,7 +83,8 @@
id: '1-2',
type: 'default',
source: '1',
- target: '2'
+ target: '2',
+ label: 'Edge Text'
}, {
id: '1-3',
type: 'smoothstep',
@@ -93,7 +94,8 @@
id: '2-4',
type: 'default',
source: '2',
- target: '4'
+ target: '4',
+ animated: true
}];
function updateNode() {