import React, { useMemo } from 'react'; import { COMPONENTS } from '../../data/components'; interface ConnectionLineProps { from: string; to: string; isActive: boolean; containerWidth: number; containerHeight: number; } let gradientCounter = 0; export const ConnectionLine: React.FC = React.memo( ({ from, to, isActive, containerWidth, containerHeight }) => { const gradientId = useMemo(() => `gradient-${from}-${to}-${++gradientCounter}`, [from, to]); const path = useMemo(() => { const fromComp = COMPONENTS.find((c) => c.id === from); const toComp = COMPONENTS.find((c) => c.id === to); if (!fromComp || !toComp) return null; const x1 = (fromComp.position.x / 100) * containerWidth; const y1 = (fromComp.position.y / 100) * containerHeight; const x2 = (toComp.position.x / 100) * containerWidth; const y2 = (toComp.position.y / 100) * containerHeight; const midX = (x1 + x2) / 2; const dx = Math.abs(x2 - x1); const dy = Math.abs(y2 - y1); const curveFactor = Math.min(dx, dy) * 0.3; const midY = (y1 + y2) / 2 - curveFactor; return `M ${x1} ${y1} Q ${midX} ${midY} ${x2} ${y2}`; }, [from, to, containerWidth, containerHeight]); if (!path) return null; if (isActive) { return ( {/* Background dashed path */} {/* Active gradient path */} ); } return ( ); } );