Spaces:
Sleeping
Sleeping
| import React from 'react'; | |
| import { | |
| getSmoothStepPath, | |
| EdgeText | |
| } from 'reactflow'; | |
| // Custom animated edge component with contextual styling | |
| const CustomEdge = (props) => { | |
| const { | |
| id, | |
| sourceX, | |
| sourceY, | |
| targetX, | |
| targetY, | |
| sourcePosition, | |
| targetPosition, | |
| style = {}, | |
| markerEnd, | |
| data, | |
| label, | |
| labelStyle, | |
| labelShowBg = true | |
| } = props; | |
| // Get edge path based on the edge type (default to smoothstep) | |
| const [edgePath, labelX, labelY] = getSmoothStepPath({ | |
| sourceX, | |
| sourceY, | |
| sourcePosition, | |
| targetX, | |
| targetY, | |
| targetPosition, | |
| borderRadius: 20, // Add rounded corners to the paths | |
| }); | |
| // Determine edge style based on source node type | |
| const sourceType = data?.sourceType || 'default'; | |
| // Default style if nothing specific is provided | |
| const edgeStyle = { | |
| strokeWidth: 3, // Increase stroke width from default | |
| ...style, | |
| }; | |
| return ( | |
| <> | |
| {/* Main path */} | |
| <path | |
| id={id} | |
| className={`react-flow__edge-path animated source-${sourceType}`} | |
| d={edgePath} | |
| style={edgeStyle} | |
| markerEnd={markerEnd} | |
| strokeDasharray="6 3" // Improved dash pattern | |
| strokeLinecap="round" | |
| filter="drop-shadow(0px 1px 2px rgba(0,0,0,0.3))" // Add subtle shadow | |
| /> | |
| {/* Glow effect for the path */} | |
| <path | |
| d={edgePath} | |
| className={`edge-glow source-${sourceType}`} | |
| style={{ | |
| ...edgeStyle, | |
| stroke: style.stroke, | |
| strokeWidth: 10, | |
| strokeOpacity: 0.15, | |
| filter: 'blur(3px)', | |
| pointerEvents: 'none', // Ensure this doesn't interfere with clicks | |
| }} | |
| /> | |
| {/* Edge label */} | |
| {label && ( | |
| <EdgeText | |
| x={labelX} | |
| y={labelY} | |
| label={label} | |
| labelStyle={{ | |
| fontWeight: 500, | |
| fill: 'white', | |
| fontSize: 12, | |
| ...labelStyle, | |
| }} | |
| labelShowBg={labelShowBg} | |
| labelBgStyle={{ | |
| fill: '#1E1E28', | |
| opacity: 0.8, | |
| rx: 4, | |
| ry: 4, | |
| }} | |
| labelBgPadding={[4, 6]} | |
| /> | |
| )} | |
| </> | |
| ); | |
| }; | |
| // Define edge types for ReactFlow | |
| export const customEdgeTypes = { | |
| custom: CustomEdge, | |
| }; | |
| export default CustomEdge; |