diff --git a/src/App.tsx b/src/App.tsx
index b751400..3d708fe 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -10,6 +10,8 @@ import {
NodeTypes,
NodeChange,
OnEdgesChange,
+ ConnectionMode,
+ MarkerType,
OnConnect,
} from '@xyflow/react';
import '@xyflow/react/dist/style.css';
@@ -102,8 +104,13 @@ function FlowContent(): ReactNode {
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
onConnect={onConnect}
- onNodeClick={onNodeClick}
+ onNodeDoubleClick={onNodeClick}
nodeTypes={nodeTypes}
+ deleteKeyCode={["Delete"]}
+ defaultEdgeOptions={{
+ animated: true,
+ markerEnd: { type: MarkerType.ArrowClosed }
+ }}
fitView
>
diff --git a/src/components/CustomNode.css b/src/components/CustomNode.css
index bfacedf..426af5a 100644
--- a/src/components/CustomNode.css
+++ b/src/components/CustomNode.css
@@ -13,6 +13,20 @@
box-shadow: 0 4px 12px rgba(22, 119, 255, 0.3);
}
+.custom-node .node-handle {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+}
+
+.custom-node:hover .node-handle {
+ opacity: 1;
+}
+
+.custom-node:hover .node-handle,
+.node-handle.react-flow__handle-connecting {
+ opacity: 1;
+}
+
.node-header {
display: flex;
justify-content: space-between;
diff --git a/src/components/CustomNode.tsx b/src/components/CustomNode.tsx
index 88f87f6..5b63e93 100644
--- a/src/components/CustomNode.tsx
+++ b/src/components/CustomNode.tsx
@@ -28,8 +28,11 @@ export default function CustomNode({
)}
-
-
+ {[Position.Top, Position.Bottom, Position.Right, Position.Left].map((position) => (
+ (["target", "source"] as const).map((type) => (
+
+ ))
+ ))}
);
}