feat: arrowhead endpoints for edges + fix parallel edges not rendering
Add optional filled-triangle arrowheads at either end of an edge, independently toggleable per edge (EdgeModal) and as per-edge-type defaults (CustomStyleModal). Arrowheads are custom inline <marker> defs filled with the live stroke colour so they recolour reactively with custom_color / vlan / selected state. Persisted frontend (serializer) and backend (edge columns + schemas + runtime migration). Also fix two dedupe layers that silently dropped legitimate parallel links between the same two devices: - store: React Flow addEdge() connectionExists dropped a second edge with matching source+target when handles were null/equal. Build the edge with a unique id and append directly. - render: rewireEdgesForCollapse deduped ALL edges by src->tgt key even when nothing was collapsed, filtering real parallel edges out of the visible set. Restrict the anti-mesh dedupe to rewired collapse stubs. Tests: marker render, per-edge/per-type UI, store apply, serializer round-trip, backend edge/canvas persistence, parallel-edge regressions. ha-relevant: yes
This commit is contained in:
@@ -169,6 +169,10 @@ export interface EdgeData extends Record<string, unknown> {
|
||||
custom_color?: string
|
||||
path_style?: EdgePathStyle
|
||||
animated?: boolean | 'snake' | 'flow' | 'basic' | 'none'
|
||||
/** Filled arrowhead at the source end. */
|
||||
marker_start?: boolean
|
||||
/** Filled arrowhead at the target end. */
|
||||
marker_end?: boolean
|
||||
waypoints?: Waypoint[]
|
||||
}
|
||||
|
||||
@@ -257,6 +261,10 @@ export interface EdgeTypeStyle {
|
||||
opacity: number
|
||||
pathStyle: EdgePathStyle
|
||||
animated: 'none' | 'snake' | 'flow' | 'basic'
|
||||
/** Default filled arrowhead at the source end for new edges of this type. */
|
||||
arrowStart: boolean
|
||||
/** Default filled arrowhead at the target end for new edges of this type. */
|
||||
arrowEnd: boolean
|
||||
}
|
||||
|
||||
export interface CustomStyleDef {
|
||||
|
||||
Reference in New Issue
Block a user