Visual Linker
0.3.0
2026-10-01
- New (core):
selectableoption — connections become focusable buttons (Tab order = the order ofconnections) that can be selected by click or Enter/Space, with Ctrl/Cmd/Shift toggling within a multi-selection; Escape or a pointer press elsewhere clears the selection. Delete/Backspace emitsconnection:delete-requestand never removes data itself. New:setSelectedConnections(ids), theconnection:selectionchangeevent,ConnectionStyle.selectedStyleand the--vl-selected-color/--vl-focus-colorCSS variables. Every line now carriesrole="img"and anaria-label(ConnectionDescriptor.ariaLabel, by default "Connection: a → b"). See Selection & Accessibility. - New (core):
ConnectionDescriptor.labels— any number of labels anywhere along a line (position:'start','middle','end'or a 0..1 fraction;offset,rotate,className). A label withtextis drawn by the library as an SVG pill (--vl-label-bg,--vl-label-border,--vl-label-color); one without is only a position.ConnectionLayout.labelscarries every label's resolved point and angle. New types:ConnectionLabel,LabelLayout. See Connection Labels. - New (core):
ConnectionStyle.animated/defaultAnimated— a pattern of dashes or dots travelling along a line (speed,direction,shape,dash,gap,color,width), drawn as a separate CSS-only overlay and switched off forprefers-reduced-motion. New type:ConnectionFlow. See Animated Flow. - New (core):
avoidObstacles/obstaclePadding(andConnectionStyle.avoidObstacles) —smoothsteplines are routed around other blocks instead of through them, re-routing live while blocks are dragged; a line whose plain route is already clear is unchanged, and when no route exists the plain one is kept. See Routing and Crossings. - New (core):
jumps(andConnectionStyle.jumps) — asmoothstepline makes a small semicircular hop where it crosses another connection's line, like on electrical schematics. New type:JumpsOption. See Routing and Crossings. - New (core):
clipToScrollParents— a port scrolled out of view inside a clipping ancestor (a row in a scrolling list,overflow: hidden) no longer leaves a line dangling over other content: by default'pin'pulls that end to the edge of the visible area and drops its marker and port dot,'hide'hides the connection,falserestores the previous behavior.ConnectionLayoutgainsfromClipped/toClipped. See Scrolling Containers. - New (core): port spreading —
BlockDescriptor.portSpread,PortDescriptor.spreadanddefaultPortSpread(trueor{ gap, padding }, defaults 16 and 8) give every connection that shares a port side its own virtual port, ordered so the lines don't cross. New types:PortSpread,PortSpreadOptions. See Port Spreading. - New (Vue): the
selectedprop (v-model:selected) and theconnection-selectionchange,connection-delete-requestandupdate:selectedevents. - New (Vue):
#connection-labelis called once per label that has notext—{ connection, label, point, angle, rotation, from, to }— and positions the label at its point, rotated byrotation. Withoutlabelsit behaves as before: one label at the line's midpoint. - New (Vue):
portSpreadonv-vl-blockand theblocksentries,spreadonv-vl-port, and thedata-vl-port-spread/data-vl-spreadattributes (""or"true"on,"false"off,"24"for the gap,"24 4"for the gap and padding). - Changed (Vue): the
#markerslot is not rendered for a connection end pinned to the edge of a scrolling container. - New (Nuxt): the module options
portSpread,clipToScrollParents,animated,avoidObstacles,obstaclePaddingandjumps, applied as defaults to every<VisualLinker>.