diff --git a/examples/svelte/src/routes/examples/edges/+page.svelte b/examples/svelte/src/routes/examples/edges/+page.svelte index 403b0ef6..8a2471b8 100644 --- a/examples/svelte/src/routes/examples/edges/+page.svelte +++ b/examples/svelte/src/routes/examples/edges/+page.svelte @@ -10,6 +10,8 @@ } from '@xyflow/svelte'; import '@xyflow/svelte/dist/style.css'; + import ButtonEdge from './ButtonEdge.svelte'; + import CustomBezierEdge from './CustomBezierEdge.svelte'; const nodes = writable([ { @@ -110,13 +112,14 @@ id: 'e5-8', source: '5', target: '8', - data: { text: 'custom edge' } + type: 'button' }, { id: 'e5-9', source: '5', target: '9', - data: { text: 'custom edge 2' } + type: 'customBezier', + label: 'custom bezier' }, { id: 'e5-6', @@ -143,9 +146,14 @@ } } ]); + + const edgeTypes = { + button: ButtonEdge, + customBezier: CustomBezierEdge + }; - + diff --git a/examples/svelte/src/routes/examples/edges/ButtonEdge.svelte b/examples/svelte/src/routes/examples/edges/ButtonEdge.svelte new file mode 100644 index 00000000..235aab98 --- /dev/null +++ b/examples/svelte/src/routes/examples/edges/ButtonEdge.svelte @@ -0,0 +1,92 @@ + + + + +
+ +
+
+ + diff --git a/examples/svelte/src/routes/examples/edges/CustomBezierEdge.svelte b/examples/svelte/src/routes/examples/edges/CustomBezierEdge.svelte new file mode 100644 index 00000000..48d86c3d --- /dev/null +++ b/examples/svelte/src/routes/examples/edges/CustomBezierEdge.svelte @@ -0,0 +1,55 @@ + + + diff --git a/packages/react/src/components/Edges/StraightEdge.tsx b/packages/react/src/components/Edges/StraightEdge.tsx index a9a453df..5a3c824d 100644 --- a/packages/react/src/components/Edges/StraightEdge.tsx +++ b/packages/react/src/components/Edges/StraightEdge.tsx @@ -1,8 +1,8 @@ import { memo } from 'react'; -import { type Optional, getStraightPath } from '@xyflow/system'; +import { getStraightPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; -import type { EdgeProps } from '../../types'; +import type { StraightEdgeProps } from '../../types'; function createStraightEdge(params: { isInternal: boolean }) { // eslint-disable-next-line react/display-name @@ -23,7 +23,7 @@ function createStraightEdge(params: { isInternal: boolean }) { markerEnd, markerStart, interactionWidth, - }: Optional) => { + }: StraightEdgeProps) => { const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY }); const _id = params.isInternal ? undefined : id; diff --git a/packages/react/src/types/edges.ts b/packages/react/src/types/edges.ts index 896c4605..287c277d 100644 --- a/packages/react/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -109,7 +109,7 @@ export type BaseEdgeProps = Pick = Optional, 'source' | 'target'>, 'id'>; -export type StraightEdgeProps = EdgeComponentProps; +export type StraightEdgeProps = Omit, 'sourcePosition' | 'targetPosition'>; export type SmoothStepEdgeProps = EdgeComponentProps & { pathOptions?: SmoothStepPathOptions; 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..9d32f4c7 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/BezierEdge.svelte @@ -0,0 +1,48 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/BezierEdge/BaseBezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge/BaseBezierEdge.svelte deleted file mode 100644 index 749a5096..00000000 --- a/packages/svelte/src/lib/components/edges/BezierEdge/BaseBezierEdge.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdge.svelte deleted file mode 100644 index 9f93e7df..00000000 --- a/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdge.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdgeInternal.svelte deleted file mode 100644 index 75d168f4..00000000 --- a/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdgeInternal.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/BezierEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/BezierEdgeInternal.svelte new file mode 100644 index 00000000..9431a05d --- /dev/null +++ b/packages/svelte/src/lib/components/edges/BezierEdgeInternal.svelte @@ -0,0 +1,63 @@ + + + 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..3e27368f --- /dev/null +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte @@ -0,0 +1,49 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge/BaseSmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge/BaseSmoothStepEdge.svelte deleted file mode 100644 index 5ec4dd89..00000000 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge/BaseSmoothStepEdge.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdge.svelte deleted file mode 100644 index 1cac5d1c..00000000 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdge.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdgeInternal.svelte deleted file mode 100644 index 803247c2..00000000 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdgeInternal.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdgeInternal.svelte new file mode 100644 index 00000000..28e87269 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdgeInternal.svelte @@ -0,0 +1,63 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/StepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge.svelte new file mode 100644 index 00000000..5ca6dc00 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StepEdge.svelte @@ -0,0 +1,49 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/StepEdge/BaseStepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge/BaseStepEdge.svelte deleted file mode 100644 index 4099e7d5..00000000 --- a/packages/svelte/src/lib/components/edges/StepEdge/BaseStepEdge.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StepEdge/StepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge/StepEdge.svelte deleted file mode 100644 index 49522e95..00000000 --- a/packages/svelte/src/lib/components/edges/StepEdge/StepEdge.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StepEdge/StepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StepEdge/StepEdgeInternal.svelte deleted file mode 100644 index 21109992..00000000 --- a/packages/svelte/src/lib/components/edges/StepEdge/StepEdgeInternal.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StepEdgeInternal.svelte new file mode 100644 index 00000000..248e5912 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StepEdgeInternal.svelte @@ -0,0 +1,64 @@ + + + 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..c868752f --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StraightEdge.svelte @@ -0,0 +1,42 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/StraightEdge/BaseStraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge/BaseStraightEdge.svelte deleted file mode 100644 index 5db480ca..00000000 --- a/packages/svelte/src/lib/components/edges/StraightEdge/BaseStraightEdge.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdge.svelte deleted file mode 100644 index d7153544..00000000 --- a/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdge.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdgeInternal.svelte deleted file mode 100644 index bad893b2..00000000 --- a/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdgeInternal.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StraightEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StraightEdgeInternal.svelte new file mode 100644 index 00000000..0d436d52 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StraightEdgeInternal.svelte @@ -0,0 +1,63 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/index.ts b/packages/svelte/src/lib/components/edges/index.ts index 19f1f129..4be51363 100644 --- a/packages/svelte/src/lib/components/edges/index.ts +++ b/packages/svelte/src/lib/components/edges/index.ts @@ -2,14 +2,16 @@ // The internal edges are used directly like custom edges and always get an id, source and target props // If you import an edge from the library, the id is optional and source and target are not used at all -export { default as BezierEdge } from './BezierEdge/BezierEdge.svelte'; -export { default as BezierEdgeInternal } from './BezierEdge/BezierEdgeInternal.svelte'; +// @todo: how can we prevent this duplication in ...Edge/ ...EdgeInternal? +// both are quite similar, it's just about 1-2 props that are different +export { default as BezierEdge } from './BezierEdge.svelte'; +export { default as BezierEdgeInternal } from './BezierEdgeInternal.svelte'; -export { default as SmoothStepEdge } from './SmoothStepEdge/BaseSmoothStepEdge.svelte'; -export { default as SmoothStepEdgeInternal } from './SmoothStepEdge/SmoothStepEdgeInternal.svelte'; +export { default as SmoothStepEdge } from './SmoothStepEdge.svelte'; +export { default as SmoothStepEdgeInternal } from './SmoothStepEdgeInternal.svelte'; -export { default as StraightEdge } from './StraightEdge/StraightEdge.svelte'; -export { default as StraightEdgeInternal } from './StraightEdge/StraightEdgeInternal.svelte'; +export { default as StraightEdge } from './StraightEdge.svelte'; +export { default as StraightEdgeInternal } from './StraightEdgeInternal.svelte'; -export { default as StepEdge } from './StepEdge/StepEdge.svelte'; -export { default as StepEdgeInternal } from './StepEdge/StepEdgeInternal.svelte'; +export { default as StepEdge } from './StepEdge.svelte'; +export { default as StepEdgeInternal } from './StepEdgeInternal.svelte'; diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index d9e0885f..a9107415 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -7,7 +7,7 @@ export * from '$lib/container/Panel'; export * from '$lib/components/SvelteFlowProvider'; export * from '$lib/components/EdgeLabelRenderer'; export * from '$lib/components/BaseEdge'; -export * from '$lib/components/edges'; +export { BezierEdge, StepEdge, SmoothStepEdge, StraightEdge } from '$lib/components/edges'; export * from '$lib/components/Handle'; // plugins @@ -29,7 +29,16 @@ export * from '$lib/hooks/useConnection'; export * from '$lib/hooks/useNodesEdges'; // types -export type { Edge, EdgeProps, EdgeTypes, DefaultEdgeOptions } from '$lib/types/edges'; +export type { + Edge, + EdgeProps, + BezierEdgeProps, + SmoothStepEdgeProps, + StepEdgeProps, + StraightEdgeProps, + EdgeTypes, + DefaultEdgeOptions +} from '$lib/types/edges'; export type { HandleComponentProps, FitViewOptions } from '$lib/types/general'; export type { Node, NodeTypes, DefaultNodeOptions } from '$lib/types/nodes'; export type { SvelteFlowStore } from '$lib/store/types'; diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 0a666ce7..3f1f0e8d 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -40,7 +40,7 @@ export type Edge = | BezierEdgeType | StepEdgeType; -export type EdgeProps = Omit, 'sourceHandle' | 'targetHandle'> & +export type EdgeProps = Omit, 'sourceHandle' | 'targetHandle' | 'type'> & EdgePosition & { markerStart?: string; markerEnd?: string; @@ -48,7 +48,13 @@ export type EdgeProps = Omit, 'sourceHandle' | 'targetHandle'> targetHandleId?: string | null; }; -export type EdgeComponentProps = Optional, 'source' | 'target'>, 'id'>; +export type EdgeComponentProps = Optional< + Omit< + EdgeProps, + 'source' | 'target' | 'sourceHandleId' | 'targetHandleId' | 'animated' | 'selected' | 'data' + >, + 'id' +>; export type BezierEdgeProps = EdgeComponentProps & { pathOptions?: BezierPathOptions; @@ -62,7 +68,10 @@ export type StepEdgeProps = EdgeComponentProps & { pathOptions?: StepPathOptions; }; -export type StraightEdgeProps = EdgeComponentProps; +export type StraightEdgeProps = Omit< + EdgeComponentProps, + 'sourcePosition' | 'targetPosition' +>; export type EdgeTypes = Record>>; diff --git a/packages/svelte/tsconfig.json b/packages/svelte/tsconfig.json index 8fbe9e82..d9cfe5d6 100644 --- a/packages/svelte/tsconfig.json +++ b/packages/svelte/tsconfig.json @@ -8,7 +8,8 @@ "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, - "strict": true + "strict": true, + "noErrorTruncation": true } // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias diff --git a/tooling/tsconfig/react.json b/tooling/tsconfig/react.json index e3cb9853..33c4fc1f 100644 --- a/tooling/tsconfig/react.json +++ b/tooling/tsconfig/react.json @@ -6,6 +6,7 @@ "lib": ["dom", "esnext"], "module": "esnext", "target": "esnext", - "outDir": "dist" + "outDir": "dist", + "noErrorTruncation": true } }