diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx
index d5e8852b96..f74423f3f0 100644
--- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx
+++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuOpenContainer.tsx
@@ -10,7 +10,7 @@ import { PAGE_HEADER_COMMAND_MENU_BUTTON_CLICK_OUTSIDE_ID } from '@/ui/layout/pa
import { currentFocusIdSelector } from '@/ui/utilities/focus/states/currentFocusIdSelector';
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
import { WORKFLOW_DIAGRAM_CREATE_STEP_NODE_CLICK_OUTSIDE_ID } from '@/workflow/workflow-diagram/constants/WorkflowDiagramCreateStepNodeClickOutsideId';
-import { WORKFLOW_DIAGRAM_EDGE_OPTIONS_CLICK_OUTSIDE_ID } from '@/workflow/workflow-diagram/constants/WorkflowDiagramEdgeOptionsClickOutsideId';
+import { WORKFLOW_DIAGRAM_EDGE_OPTIONS_CLICK_OUTSIDE_ID } from '@/workflow/workflow-diagram/workflow-edges/constants/WorkflowDiagramEdgeOptionsClickOutsideId';
import { WORKFLOW_DIAGRAM_STEP_NODE_BASE_CLICK_OUTSIDE_ID } from '@/workflow/workflow-diagram/constants/WorkflowDiagramStepNodeClickOutsideId';
import { useTheme } from '@emotion/react';
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx
index 79fc8d17cd..07ed27be44 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx
@@ -5,7 +5,7 @@ import { useRecoilComponentCallbackState } from '@/ui/utilities/state/component-
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue';
-import { WorkflowDiagramCustomMarkers } from '@/workflow/workflow-diagram/components/WorkflowDiagramCustomMarkers';
+import { WorkflowDiagramCustomMarkers } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramCustomMarkers';
import { WorkflowDiagramRightClickCommandMenu } from '@/workflow/workflow-diagram/components/WorkflowDiagramRightClickCommandMenu';
import { useRightDrawerState } from '@/workflow/workflow-diagram/hooks/useRightDrawerState';
import { workflowDiagramComponentState } from '@/workflow/workflow-diagram/states/workflowDiagramComponentState';
@@ -54,7 +54,8 @@ import { isDefined } from 'twenty-shared/utils';
import { Tag, type TagColor } from 'twenty-ui/components';
import { THEME_COMMON } from 'twenty-ui/theme';
import { FeatureFlagKey } from '~/generated/graphql';
-import { useEdgeState } from '@/workflow/workflow-diagram/hooks/useEdgeState';
+import { useEdgeState } from '@/workflow/workflow-diagram/workflow-edges/hooks/useEdgeState';
+import { WorkflowDiagramConnection } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramConnection';
const StyledResetReactflowStyles = styled.div`
height: 100%;
@@ -496,6 +497,8 @@ export const WorkflowDiagramCanvasBase = ({
nodesConnectable={isWorkflowBranchEnabled ? nodesConnectable : false}
paneClickDistance={10} // Fix small unwanted user dragging does not select node
preventScrolling={false}
+ connectionLineComponent={WorkflowDiagramConnection}
+ connectionRadius={0}
>
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditable.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditable.tsx
index 184db42988..66e04b7ad9 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditable.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditable.tsx
@@ -2,11 +2,10 @@ import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/ho
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion';
import { workflowVisualizerWorkflowIdComponentState } from '@/workflow/states/workflowVisualizerWorkflowIdComponentState';
-import { WorkflowDiagramBlankEdge } from '@/workflow/workflow-diagram/components/WorkflowDiagramBlankEdge';
+import { WorkflowDiagramBlankEdge } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramBlankEdge';
import { WorkflowDiagramCanvasBase } from '@/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase';
import { WorkflowDiagramCanvasEditableEffect } from '@/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect';
-import { WorkflowDiagramDefaultEdgeEditable } from '@/workflow/workflow-diagram/components/WorkflowDiagramDefaultEdgeEditable';
-
+import { WorkflowDiagramDefaultEdgeEditable } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramDefaultEdgeEditable';
import { workflowDiagramComponentState } from '@/workflow/workflow-diagram/states/workflowDiagramComponentState';
import { workflowDiagramRightClickMenuPositionState } from '@/workflow/workflow-diagram/states/workflowDiagramRightClickMenuPositionState';
import {
@@ -15,7 +14,7 @@ import {
} from '@/workflow/workflow-diagram/types/WorkflowDiagram';
import { getWorkflowVersionStatusTagProps } from '@/workflow/workflow-diagram/utils/getWorkflowVersionStatusTagProps';
import { WorkflowDiagramEmptyTriggerEditable } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowDiagramEmptyTriggerEditable';
-import { WorkflowDiagramFilterEdgeEditable } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowDiagramFilterEdgeEditable';
+import { WorkflowDiagramFilterEdgeEditable } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramFilterEdgeEditable';
import { WorkflowDiagramStepNodeEditable } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowDiagramStepNodeEditable';
import { useCreateEdge } from '@/workflow/workflow-steps/hooks/useCreateEdge';
import { useDeleteEdge } from '@/workflow/workflow-steps/hooks/useDeleteEdge';
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx
index 25759528e6..47cc59f2d7 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx
@@ -1,4 +1,4 @@
-import { useEdgeState } from '@/workflow/workflow-diagram/hooks/useEdgeState';
+import { useEdgeState } from '@/workflow/workflow-diagram/workflow-edges/hooks/useEdgeState';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import {
type OnSelectionChangeParams,
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonly.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonly.tsx
index 0357dca8b5..682179c74b 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonly.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonly.tsx
@@ -1,10 +1,10 @@
import { type WorkflowVersionStatus } from '@/workflow/types/Workflow';
import { WorkflowDiagramCanvasBase } from '@/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase';
-import { WorkflowDiagramDefaultEdgeReadonly } from '@/workflow/workflow-diagram/components/WorkflowDiagramDefaultEdgeReadonly';
+import { WorkflowDiagramDefaultEdgeReadonly } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramDefaultEdgeReadonly';
import { getWorkflowVersionStatusTagProps } from '@/workflow/workflow-diagram/utils/getWorkflowVersionStatusTagProps';
import { WorkflowDiagramEmptyTriggerReadonly } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowDiagramEmptyTriggerReadonly';
-import { WorkflowDiagramFilterEdgeReadonly } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowDiagramFilterEdgeReadonly';
+import { WorkflowDiagramFilterEdgeReadonly } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramFilterEdgeReadonly';
import { WorkflowDiagramStepNodeReadonly } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowDiagramStepNodeReadonly';
import { ReactFlowProvider } from '@xyflow/react';
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunDiagramCanvas.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunDiagramCanvas.tsx
index d75ce012bd..86cd797800 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunDiagramCanvas.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowRunDiagramCanvas.tsx
@@ -1,7 +1,7 @@
import { type WorkflowRunStatus } from '@/workflow/types/Workflow';
import { WorkflowDiagramCanvasBase } from '@/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase';
-import { WorkflowDiagramDefaultEdgeRun } from '@/workflow/workflow-diagram/components/WorkflowDiagramDefaultEdgeRun';
-import { WorkflowDiagramFilterEdgeRun } from '@/workflow/workflow-diagram/components/WorkflowDiagramFilterEdgeRun';
+import { WorkflowDiagramDefaultEdgeRun } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramDefaultEdgeRun';
+import { WorkflowDiagramFilterEdgeRun } from '@/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramFilterEdgeRun';
import { getWorkflowRunStatusTagProps } from '@/workflow/workflow-diagram/utils/getWorkflowRunStatusTagProps';
import { WorkflowRunDiagramStepNode } from '@/workflow/workflow-diagram/workflow-nodes/components/WorkflowRunDiagramStepNode';
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/constants/EdgeBranchArrowMarker.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/constants/EdgeBranchArrowMarker.ts
deleted file mode 100644
index e816638ea3..0000000000
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/constants/EdgeBranchArrowMarker.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum EdgeBranchArrowMarker {
- Default = 'edge-branch-arrow-default',
- Hover = 'edge-branch-arrow-hover',
- Selected = 'edge-branch-arrow-selected',
-}
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useEdgeState.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useEdgeState.ts
deleted file mode 100644
index 8eb326ea5c..0000000000
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useEdgeState.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import { workflowSelectedEdgeComponentState } from '@/workflow/workflow-diagram/states/workflowSelectedEdgeComponentState';
-import { useRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentState';
-import { type WorkflowDiagramNodeHandles } from '@/workflow/workflow-diagram/types/WorkflowDiagramNodeHandles';
-import { type WorkflowDiagramEdge } from '@/workflow/workflow-diagram/types/WorkflowDiagramEdge';
-import { workflowHoveredEdgeComponentState } from '@/workflow/workflow-diagram/states/workflowHoveredEdgeComponentState';
-import { useReactFlow } from '@xyflow/react';
-import { EdgeBranchArrowMarker } from '@/workflow/workflow-diagram/constants/EdgeBranchArrowMarker';
-
-export const useEdgeState = () => {
- const reactflow = useReactFlow();
-
- const [workflowSelectedEdge, setWorkflowSelectedEdge] =
- useRecoilComponentState(workflowSelectedEdgeComponentState);
-
- const [workflowHoveredEdge, setWorkflowHoveredEdge] = useRecoilComponentState(
- workflowHoveredEdgeComponentState,
- );
-
- const isEdgeSelected = ({ source, target }: WorkflowDiagramEdge) => {
- return (
- workflowSelectedEdge?.source === source &&
- workflowSelectedEdge?.target === target
- );
- };
-
- const isEdgeHovered = ({ source, target }: WorkflowDiagramEdge) => {
- return (
- workflowHoveredEdge?.source === source &&
- workflowHoveredEdge?.target === target
- );
- };
-
- const getNodeHandlesSelectedState = (
- id: string,
- ): WorkflowDiagramNodeHandles => {
- return {
- targetHandle: workflowSelectedEdge?.target === id,
- sourceHandle: workflowSelectedEdge?.source === id,
- };
- };
-
- const getNodeHandlesHoveredState = (
- id: string,
- ): WorkflowDiagramNodeHandles => {
- return {
- targetHandle: workflowHoveredEdge?.target === id,
- sourceHandle: workflowHoveredEdge?.source === id,
- };
- };
-
- const setEdgeSelected = ({ source, target }: WorkflowDiagramEdge) => {
- if (
- workflowSelectedEdge?.source === source &&
- workflowSelectedEdge?.target === target
- ) {
- return;
- }
-
- setWorkflowSelectedEdge({ source, target });
-
- reactflow.setEdges((edges) =>
- edges.map((edge) => ({
- ...edge,
- markerEnd:
- edge.source === source && edge.target === target
- ? EdgeBranchArrowMarker.Selected
- : EdgeBranchArrowMarker.Default,
- })),
- );
- };
-
- const setEdgeHovered = ({ source, target }: WorkflowDiagramEdge) => {
- if (
- workflowHoveredEdge?.source === source &&
- workflowHoveredEdge?.target === target
- ) {
- return;
- }
-
- setWorkflowHoveredEdge({ source, target });
-
- reactflow.setEdges((edges) =>
- edges.map((edge) =>
- edge.source === source &&
- edge.target === target &&
- edge.markerEnd !== EdgeBranchArrowMarker.Selected
- ? {
- ...edge,
- markerEnd: EdgeBranchArrowMarker.Hover,
- }
- : edge,
- ),
- );
- };
-
- const clearEdgeSelected = () => {
- setWorkflowSelectedEdge(undefined);
-
- reactflow.setEdges((edges) =>
- edges.map((edge) => ({
- ...edge,
- markerEnd: EdgeBranchArrowMarker.Default,
- })),
- );
- };
-
- const clearEdgeHover = () => {
- setWorkflowHoveredEdge(undefined);
-
- reactflow.setEdges((edges) =>
- edges.map((edge) =>
- edge.markerEnd === EdgeBranchArrowMarker.Hover
- ? {
- ...edge,
- markerEnd: EdgeBranchArrowMarker.Default,
- }
- : edge,
- ),
- );
- };
-
- return {
- isEdgeSelected,
- setEdgeSelected,
- clearEdgeSelected,
- getNodeHandlesSelectedState,
- isEdgeHovered,
- setEdgeHovered,
- clearEdgeHover,
- getNodeHandlesHoveredState,
- };
-};
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts
index 84d841b121..6ab1ec3e46 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts
@@ -125,6 +125,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "trigger",
"target": "step1",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -139,6 +140,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step1",
"target": "step2",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -153,6 +155,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step2",
"target": "step3",
"type": "empty-filter--run",
+ "zIndex": -2,
},
],
"nodes": [
@@ -355,6 +358,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "trigger",
"target": "step1",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -369,6 +373,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step1",
"target": "step2",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -383,6 +388,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step2",
"target": "step3",
"type": "empty-filter--run",
+ "zIndex": -2,
},
],
"nodes": [
@@ -585,6 +591,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "trigger",
"target": "step1",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -599,6 +606,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step1",
"target": "step2",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -613,6 +621,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step2",
"target": "step3",
"type": "empty-filter--run",
+ "zIndex": -2,
},
],
"nodes": [
@@ -834,6 +843,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "trigger",
"target": "step1",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -848,6 +858,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step1",
"target": "step2",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -862,6 +873,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step2",
"target": "step3",
"type": "empty-filter--run",
+ "zIndex": -2,
},
{
"data": {
@@ -876,6 +888,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "step3",
"target": "step4",
"type": "empty-filter--run",
+ "zIndex": -2,
},
],
"nodes": [
@@ -1063,6 +1076,7 @@ describe('generateWorkflowRunDiagram', () => {
"source": "trigger",
"target": "step1",
"type": "empty-filter--run",
+ "zIndex": -2,
},
],
"nodes": [
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts
index d31685087c..00377b368b 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts
@@ -163,6 +163,7 @@ describe('getWorkflowVersionDiagram', () => {
"source": "trigger",
"target": "step-1",
"type": "empty-filter--editable",
+ "zIndex": -2,
},
],
"nodes": [
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts
index f430cd41b3..0604474f14 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts
@@ -4,7 +4,7 @@ import {
} from '@/workflow/types/Workflow';
import { FIRST_NODE_POSITION } from '@/workflow/workflow-diagram/constants/FirstNodePosition';
import { VERTICAL_DISTANCE_BETWEEN_TWO_NODES } from '@/workflow/workflow-diagram/constants/VerticalDistanceBetweenTwoNodes';
-import { WORKFLOW_VISUALIZER_EDGE_DEFAULT_CONFIGURATION } from '@/workflow/workflow-diagram/constants/WorkflowVisualizerEdgeDefaultConfiguration';
+import { WORKFLOW_VISUALIZER_EDGE_DEFAULT_CONFIGURATION } from '@/workflow/workflow-diagram/workflow-edges/constants/WorkflowVisualizerEdgeDefaultConfiguration';
import {
type WorkflowDiagram,
type WorkflowDiagramEdge,
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseEdge.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramBaseEdge.tsx
similarity index 91%
rename from packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseEdge.tsx
rename to packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramBaseEdge.tsx
index cfe4a51107..a88404e7bc 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseEdge.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramBaseEdge.tsx
@@ -1,7 +1,7 @@
import { useTheme } from '@emotion/react';
import { BaseEdge, type EdgeProps } from '@xyflow/react';
import { type WorkflowDiagramEdge } from '@/workflow/workflow-diagram/types/WorkflowDiagram';
-import { useEdgeState } from '@/workflow/workflow-diagram/hooks/useEdgeState';
+import { useEdgeState } from '@/workflow/workflow-diagram/workflow-edges/hooks/useEdgeState';
type WorkflowDiagramBaseEdgeProps = Pick<
EdgeProps,
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBlankEdge.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramBlankEdge.tsx
similarity index 100%
rename from packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBlankEdge.tsx
rename to packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramBlankEdge.tsx
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramConnection.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramConnection.tsx
new file mode 100644
index 0000000000..9bca932bb6
--- /dev/null
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramConnection.tsx
@@ -0,0 +1,33 @@
+import {
+ type ConnectionLineComponentProps,
+ getBezierPath,
+} from '@xyflow/react';
+import { useTheme } from '@emotion/react';
+import { EDGE_BRANCH_ARROW_MARKER } from '@/workflow/workflow-diagram/workflow-edges/constants/EdgeBranchArrowMarker';
+
+type WorkflowDiagramConnectionProps = ConnectionLineComponentProps;
+
+export const WorkflowDiagramConnection = ({
+ fromX,
+ fromY,
+ toX,
+ toY,
+}: WorkflowDiagramConnectionProps) => {
+ const theme = useTheme();
+
+ const [path] = getBezierPath({
+ sourceX: fromX,
+ sourceY: fromY + 4,
+ targetX: toX,
+ targetY: toY - 4,
+ });
+
+ return (
+
+ );
+};
diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCustomMarkers.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramCustomMarkers.tsx
similarity index 84%
rename from packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCustomMarkers.tsx
rename to packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramCustomMarkers.tsx
index c9a3c0f1bf..31df069caf 100644
--- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCustomMarkers.tsx
+++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/workflow-edges/components/WorkflowDiagramCustomMarkers.tsx
@@ -1,4 +1,4 @@
-import { EdgeBranchArrowMarker } from '@/workflow/workflow-diagram/constants/EdgeBranchArrowMarker';
+import { EDGE_BRANCH_ARROW_MARKER } from '@/workflow/workflow-diagram/workflow-edges/constants/EdgeBranchArrowMarker';
import { useTheme } from '@emotion/react';
export const WorkflowDiagramCustomMarkers = () => {
@@ -8,7 +8,7 @@ export const WorkflowDiagramCustomMarkers = () => {