import React, { useContext, useMemo } from 'react' import { BaseEdge, getBezierPath, type EdgeProps, } from '@xyflow/react' import FlowContext from '../../lib/flowContext' const EDGE_STROKE_WIDTH = 2 const DOT_MARKER_R = 1.5 function getEdgeLabelByTargetType(targetType: string | undefined): string | undefined { if (targetType === 'render') return 'render' if (targetType === 'config') return 'add input' return undefined } export function AnimatedEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style, label: labelProp, interactionWidth, target, }: EdgeProps) { const ctx = useContext(FlowContext) const nodes = ctx?.nodes ?? [] const targetNode = useMemo(() => nodes.find((n: any) => n.id === target), [nodes, target]) const derivedLabel = useMemo( () => getEdgeLabelByTargetType(targetNode?.type), [targetNode?.type] ) const label = labelProp ?? derivedLabel const [edgePath, edgeLabelX, edgeLabelY] = getBezierPath({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, }) const startId = `animated-edge-dot-start-${id}` const endId = `animated-edge-dot-end-${id}` return ( <> {label != null && ( {label} )} ) }