diff --git a/packages/react/src/components/Edges/StepEdge.tsx b/packages/react/src/components/Edges/StepEdge.tsx index bb1833d4..6385e8f0 100644 --- a/packages/react/src/components/Edges/StepEdge.tsx +++ b/packages/react/src/components/Edges/StepEdge.tsx @@ -1,11 +1,11 @@ import { memo, useMemo } from 'react'; import { SmoothStepEdge } from './SmoothStepEdge'; -import type { SmoothStepEdgeProps } from '../../types'; +import type { StepEdgeProps } from '../../types'; function createStepEdge(params: { isInternal: boolean }) { // eslint-disable-next-line react/display-name - return memo(({ id, ...props }: SmoothStepEdgeProps) => { + return memo(({ id, ...props }: StepEdgeProps) => { const _id = params.isInternal ? undefined : id; return ( diff --git a/packages/react/src/components/Edges/index.ts b/packages/react/src/components/Edges/index.ts index dcd45701..21af9667 100644 --- a/packages/react/src/components/Edges/index.ts +++ b/packages/react/src/components/Edges/index.ts @@ -1,3 +1,7 @@ +// We distinguish between internal and exported edges +// 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 { SimpleBezierEdge, SimpleBezierEdgeInternal } from './SimpleBezierEdge'; export { SmoothStepEdge, SmoothStepEdgeInternal } from './SmoothStepEdge'; export { StepEdge, StepEdgeInternal } from './StepEdge'; diff --git a/packages/react/src/types/edges.ts b/packages/react/src/types/edges.ts index db34416d..896c4605 100644 --- a/packages/react/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -14,6 +14,7 @@ import type { ConnectionStatus, EdgePosition, Optional, + StepPathOptions, } from '@xyflow/system'; import { Node } from '.'; @@ -47,7 +48,12 @@ type BezierEdgeType = DefaultEdge & { pathOptions?: BezierPathOptions; }; -export type Edge = DefaultEdge | SmoothStepEdgeType | BezierEdgeType; +type StepEdgeType = DefaultEdge & { + type: 'step'; + pathOptions?: StepPathOptions; +}; + +export type Edge = DefaultEdge | SmoothStepEdgeType | BezierEdgeType | StepEdgeType; export type EdgeMouseHandler = (event: ReactMouseEvent, edge: Edge) => void; @@ -113,6 +119,10 @@ export type BezierEdgeProps = EdgeComponentProps & { pathOptions?: BezierPathOptions; }; +export type StepEdgeProps = EdgeComponentProps & { + pathOptions?: StepPathOptions; +}; + export type SimpleBezierEdgeProps = EdgeComponentProps; export type OnEdgeUpdateFunc = (oldEdge: Edge, newConnection: Connection) => void; diff --git a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte index fa4adc92..aad6d2b1 100644 --- a/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte +++ b/packages/svelte/src/lib/components/EdgeWrapper/EdgeWrapper.svelte @@ -6,7 +6,7 @@ import { errorMessages, getMarkerId } from '@xyflow/system'; import { useStore } from '$lib/store'; - import { BezierEdge } from '$lib/components/edges/internal'; + import { BezierEdgeInternal } from '$lib/components/edges'; import type { EdgeLayouted, Edge } from '$lib/types'; import { get } from 'svelte/store'; @@ -57,7 +57,7 @@ edgecontextmenu: { edge: Edge; event: MouseEvent }; }>(); - $: edgeComponent = $edgeTypes[type!] || BezierEdge; + $: edgeComponent = $edgeTypes[type!] || BezierEdgeInternal; $: markerStartUrl = markerStart ? `url(#${getMarkerId(markerStart, $flowId)})` : undefined; $: markerEndUrl = markerEnd ? `url(#${getMarkerId(markerEnd, $flowId)})` : undefined; diff --git a/packages/svelte/src/lib/components/edges/BezierEdge.svelte b/packages/svelte/src/lib/components/edges/BezierEdge.svelte deleted file mode 100644 index ef5fd3db..00000000 --- a/packages/svelte/src/lib/components/edges/BezierEdge.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/BezierEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/BezierEdge/BaseBezierEdge.svelte similarity index 69% rename from packages/svelte/src/lib/components/edges/BezierEdgeInternal.svelte rename to packages/svelte/src/lib/components/edges/BezierEdge/BaseBezierEdge.svelte index a1ca0658..749a5096 100644 --- a/packages/svelte/src/lib/components/edges/BezierEdgeInternal.svelte +++ b/packages/svelte/src/lib/components/edges/BezierEdge/BaseBezierEdge.svelte @@ -1,10 +1,10 @@ + import BaseBezierEdge from './BaseBezierEdge.svelte'; + import type { BezierEdgeProps } from '$lib/types'; + + type $$Props = BezierEdgeProps; + + $: props = $$props as $$Props; + + + diff --git a/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdgeInternal.svelte new file mode 100644 index 00000000..75d168f4 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/BezierEdge/BezierEdgeInternal.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte deleted file mode 100644 index f528da0e..00000000 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdge.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge/BaseSmoothStepEdge.svelte similarity index 65% rename from packages/svelte/src/lib/components/edges/SmoothStepEdgeInternal.svelte rename to packages/svelte/src/lib/components/edges/SmoothStepEdge/BaseSmoothStepEdge.svelte index 73324a89..5ec4dd89 100644 --- a/packages/svelte/src/lib/components/edges/SmoothStepEdgeInternal.svelte +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge/BaseSmoothStepEdge.svelte @@ -1,10 +1,10 @@ + import BaseSmoothStepEdge from './BaseSmoothStepEdge.svelte'; + import type { SmoothStepEdgeProps } from '$lib/types'; + + type $$Props = SmoothStepEdgeProps; + + $: props = $$props as $$Props; + + + diff --git a/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdgeInternal.svelte new file mode 100644 index 00000000..803247c2 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/SmoothStepEdge/SmoothStepEdgeInternal.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/StepEdge.svelte b/packages/svelte/src/lib/components/edges/StepEdge.svelte deleted file mode 100644 index b0860d03..00000000 --- a/packages/svelte/src/lib/components/edges/StepEdge.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StepEdge/BaseStepEdge.svelte similarity index 73% rename from packages/svelte/src/lib/components/edges/StepEdgeInternal.svelte rename to packages/svelte/src/lib/components/edges/StepEdge/BaseStepEdge.svelte index f793376b..4099e7d5 100644 --- a/packages/svelte/src/lib/components/edges/StepEdgeInternal.svelte +++ b/packages/svelte/src/lib/components/edges/StepEdge/BaseStepEdge.svelte @@ -1,10 +1,10 @@ + import BaseStepEdge from './BaseStepEdge.svelte'; + import type { StepEdgeProps } from '$lib/types'; + + type $$Props = StepEdgeProps; + + $: props = $$props as $$Props; + + + diff --git a/packages/svelte/src/lib/components/edges/StepEdge/StepEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StepEdge/StepEdgeInternal.svelte new file mode 100644 index 00000000..21109992 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StepEdge/StepEdgeInternal.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/StraightEdge.svelte b/packages/svelte/src/lib/components/edges/StraightEdge.svelte deleted file mode 100644 index 979c4351..00000000 --- a/packages/svelte/src/lib/components/edges/StraightEdge.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/edges/StraightEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StraightEdge/BaseStraightEdge.svelte similarity index 75% rename from packages/svelte/src/lib/components/edges/StraightEdgeInternal.svelte rename to packages/svelte/src/lib/components/edges/StraightEdge/BaseStraightEdge.svelte index 8cc984d7..5db480ca 100644 --- a/packages/svelte/src/lib/components/edges/StraightEdgeInternal.svelte +++ b/packages/svelte/src/lib/components/edges/StraightEdge/BaseStraightEdge.svelte @@ -1,10 +1,10 @@ + import BaseStraighEdge from './BaseStraightEdge.svelte'; + import type { StraightEdgeProps } from '$lib/types'; + + type $$Props = StraightEdgeProps; + + $: props = $$props as $$Props; + + + diff --git a/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdgeInternal.svelte b/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdgeInternal.svelte new file mode 100644 index 00000000..bad893b2 --- /dev/null +++ b/packages/svelte/src/lib/components/edges/StraightEdge/StraightEdgeInternal.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/svelte/src/lib/components/edges/index.ts b/packages/svelte/src/lib/components/edges/index.ts index 1f1567b6..19f1f129 100644 --- a/packages/svelte/src/lib/components/edges/index.ts +++ b/packages/svelte/src/lib/components/edges/index.ts @@ -1,4 +1,15 @@ -export { default as BezierEdge } from './BezierEdge.svelte'; -export { default as StraightEdge } from './StraightEdge.svelte'; -export { default as SmoothStepEdge } from './SmoothStepEdge.svelte'; -export { default as StepEdge } from './StepEdge.svelte'; +// We distinguish between internal and exported edges +// 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'; + +export { default as SmoothStepEdge } from './SmoothStepEdge/BaseSmoothStepEdge.svelte'; +export { default as SmoothStepEdgeInternal } from './SmoothStepEdge/SmoothStepEdgeInternal.svelte'; + +export { default as StraightEdge } from './StraightEdge/StraightEdge.svelte'; +export { default as StraightEdgeInternal } from './StraightEdge/StraightEdgeInternal.svelte'; + +export { default as StepEdge } from './StepEdge/StepEdge.svelte'; +export { default as StepEdgeInternal } from './StepEdge/StepEdgeInternal.svelte'; diff --git a/packages/svelte/src/lib/components/edges/internal.ts b/packages/svelte/src/lib/components/edges/internal.ts deleted file mode 100644 index f2582b79..00000000 --- a/packages/svelte/src/lib/components/edges/internal.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as BezierEdge } from './BezierEdgeInternal.svelte'; -export { default as StraightEdge } from './StraightEdgeInternal.svelte'; -export { default as SmoothStepEdge } from './SmoothStepEdgeInternal.svelte'; -export { default as StepEdge } from './StepEdgeInternal.svelte'; diff --git a/packages/svelte/src/lib/store/initial-store.ts b/packages/svelte/src/lib/store/initial-store.ts index 65acad86..dcfee4db 100644 --- a/packages/svelte/src/lib/store/initial-store.ts +++ b/packages/svelte/src/lib/store/initial-store.ts @@ -25,7 +25,12 @@ import InputNode from '$lib/components/nodes/InputNode.svelte'; import OutputNode from '$lib/components/nodes/OutputNode.svelte'; import GroupNode from '$lib/components/nodes/GroupNode.svelte'; -import { BezierEdge, StraightEdge, StepEdge, SmoothStepEdge } from '$lib/components/edges/internal'; +import { + BezierEdgeInternal, + SmoothStepEdgeInternal, + StraightEdgeInternal, + StepEdgeInternal +} from '$lib/components/edges'; import type { NodeTypes, @@ -47,10 +52,10 @@ export const initialNodeTypes = { }; export const initialEdgeTypes = { - straight: StraightEdge, - smoothstep: SmoothStepEdge, - default: BezierEdge, - step: StepEdge + straight: StraightEdgeInternal, + smoothstep: SmoothStepEdgeInternal, + default: BezierEdgeInternal, + step: StepEdgeInternal }; export const getInitialStore = ({ diff --git a/packages/svelte/src/lib/types/edges.ts b/packages/svelte/src/lib/types/edges.ts index 33f0d908..0a666ce7 100644 --- a/packages/svelte/src/lib/types/edges.ts +++ b/packages/svelte/src/lib/types/edges.ts @@ -5,7 +5,9 @@ import type { BezierPathOptions, DefaultEdgeOptionsBase, EdgePosition, - SmoothStepPathOptions + SmoothStepPathOptions, + Optional, + StepPathOptions } from '@xyflow/system'; import type { Node } from '$lib/types'; @@ -29,6 +31,7 @@ type BezierEdgeType = DefaultEdge & { type StepEdgeType = DefaultEdge & { type: 'step'; + pathOptions?: StepPathOptions; }; export type Edge = @@ -37,7 +40,7 @@ export type Edge = | BezierEdgeType | StepEdgeType; -export type EdgeProps = Omit & +export type EdgeProps = Omit, 'sourceHandle' | 'targetHandle'> & EdgePosition & { markerStart?: string; markerEnd?: string; @@ -45,6 +48,22 @@ export type EdgeProps = Omit & targetHandleId?: string | null; }; +export type EdgeComponentProps = Optional, 'source' | 'target'>, 'id'>; + +export type BezierEdgeProps = EdgeComponentProps & { + pathOptions?: BezierPathOptions; +}; + +export type SmoothStepEdgeProps = EdgeComponentProps & { + pathOptions?: SmoothStepPathOptions; +}; + +export type StepEdgeProps = EdgeComponentProps & { + pathOptions?: StepPathOptions; +}; + +export type StraightEdgeProps = EdgeComponentProps; + export type EdgeTypes = Record>>; export type DefaultEdgeOptions = Omit, 'focusable'>; diff --git a/packages/system/src/types/edges.ts b/packages/system/src/types/edges.ts index 855682d2..65c8e641 100644 --- a/packages/system/src/types/edges.ts +++ b/packages/system/src/types/edges.ts @@ -27,6 +27,10 @@ export type SmoothStepPathOptions = { borderRadius?: number; }; +export type StepPathOptions = { + offset?: number; +}; + export type BezierPathOptions = { curvature?: number; };