Рисует умные, автоматически прокладываемые SVG-линии между DOM-блоками, которые уже находятся под вашим контролем — для vanilla JS, Vue 3 и Nuxt. Позиционирование блоков остаётся за вами, пакет только измеряет их и рисует соединения.

Связи между произвольными блоками интерфейса — карта процесса, диаграмма сущностей, визуализация зависимостей — обычно означают либо тяжёлый движок диаграмм со своей системой узлов, либо самописную отрисовку SVG-путей поверх обычной вёрстки, с ручным пересчётом координат при каждом ресайзе и скролле. Visual Linker берёт на себя только эту механику, оставляя разметку и позиционирование блоков полностью вашими.
Этапы согласования, воронка продаж, пайплайн обработки заявки — каждый этап уже верстается как обычный компонент. Линии между карточками прокладываются автоматически, с выбором стороны выхода/входа и без пересечения самих блоков, а при изменении размера окна или скролле контейнера пересчитываются сами.
Связи между сущностями — компонентами системы, шагами сценария, узлами графа — нужно показать без написания собственного SVG-рендерера путей. Два типа кривых (bezier и ортогональный smoothstep с учётом групповых точек ветвления) покрывают как мягкие, так и строго прямоугольные схемы.
Пользователь двигает блоки мышью, а линии между ними должны следовать за ними в реальном времени, сохраняя автоматический выбор стороны подключения. Drag & drop блоков, наведение и клик по самой линии соединения — уже готовая часть API, с типизированными событиями.
У каждой линии может быть свой цвет, толщина, пунктир, маркеры начала/конца (готовые формы или произвольный SVG) и отдельный стиль при наведении — оформление связей настраивается так же детально, как оформление самих блоков.

Каждая линия сама выбирает, с какой стороны блока войти и выйти, с опциональным ограничением списка разрешённых сторон и ограниченным наклоном угла в сторону реального направления на цель — вместо ручного указания портов для каждого соединения.

Плавные кривые с настраиваемой кривизной, вылетом и углом — либо строго ортогональная трассировка с точками ветвления, учитывающими соединения, которые делят один и тот же порт, для аккуратных прямоугольных схем.

Блоки можно двигать мышью, линии следуют за ними сами. Наведение и клик по соединению доступны через типизированный API событий — никакой ручной работы с координатами курсора и геометрией пути.

Цвет, толщина, пунктир, маркеры начала и конца — встроенные формы или произвольный SVG — и отдельный стиль при наведении, задаются индивидуально для любой линии.

Линии сами пересчитываются при изменении размеров блоков, окна или прокрутке контейнера — без подписки на события вручную в коде приложения.

Framework-agnostic движок с адаптером под Vue 3 — компонент <VisualLinker> вокруг вашей собственной разметки и композабл useVisualLinker(), плюс Nuxt-модуль с автоимпортами и настройками кривой/портов по умолчанию на уровне конфига.
createVisualLinker(container) измеряет блоки, переданные через setBlocks(), и рисует SVG-путь между ними — без ручной геометрии и без Vue.
import { createVisualLinker } from '@macrulez/visual-linker-core'
const container = document.querySelector('#diagram') as HTMLElement
const linker = createVisualLinker(container)
linker.setBlocks([
{ id: 'a', el: document.querySelector('#block-a') as HTMLElement },
{ id: 'b', el: document.querySelector('#block-b') as HTMLElement },
])
linker.setConnections([{ id: 'a-b', from: { blockId: 'a' }, to: { blockId: 'b' } }])style соединения имеет ту же форму, что группа lines конфигурации: тип кривой, маркер и вид для каждого состояния — здесь линия толще, а стрелка крупнее при hover.
linker.setConnections([
{
id: 'a-b',
from: { blockId: 'a' },
to: { blockId: 'b' },
style: {
curve: 'smoothstep',
color: '#6366f1',
hover: { width: 3 },
markers: { end: { shape: 'arrow', hover: { size: 10 } } },
},
},
])