Visual Linker
0.4.3
2026-10-02
- Изменено (поведение по умолчанию):
hoverиhighlightтеперь включаются по запросу. Раньше линия реагировала на курсор в любой диаграмме: получала состояниеhoverс прибавкой к толщине, показывала курсор-указатель над своей областью нажатия, а наведение на блок подсвечивало его соединения. Теперь ничего из этого не происходит, пока вы не включите режим, так что диаграмма, на которую просто смотрят, остаётся неподвижной. Курсор-указатель на линии появляется, только если для неё включён hover или она выделяемая. Чтобы вернуть прежнее поведение, задайтеinteraction: { hover: true, highlight: true }. - Новое:
interaction.hoverиinteraction.highlight. Два независимых флага, оба по умолчаниюfalse.hover— курсор над линией,highlight— курсор над блоком подсвечивает его соединения. См. Визуальные состояния. - Новое:
hoverableу соединения иhighlightableу блока. Каждый включает или выключает свой режим для одной сущности, и локальное значение сильнее глобального.highlightableтакже доступен как опцияv-vl-block, поле пропаblocksи атрибутdata-vl-highlightable. - Без изменений: события
connection:mouseenter,connection:mouseleave,connection:click,block:mouseenterиblock:mouseleaveприходят как раньше, а состоянияselectedиfocus, выделение и управление с клавиатуры от новых флагов не зависят. Корзинаhoverилиhighlightничего не делает, пока её режим выключен. Оба флага можно менять черезsetConfig.
0.4.2
2026-10-02
- Порт с якорем больше не прижимается обрезающей обёрткой внутри якорного блока. У порта с
anchorBlockIdилиanchorElточка рисуется на границе якоря, но обрезан ли он, решала именно эта точка. Строка внутри элемента сoverflow: hidden— скруглённого переключателя, карточки — внутри блока с отступами, привязанная к нижней границе блока, имеет точку ниже обёртки, поэтому её линию подтягивало к краю обёртки, и она теряла маркер и точку порта. Теперь, обрезан ли такой порт, решает его собственный элемент: видимая строка оставляет точку на границе якоря, а ушедшая за край прокрутки прижимается, как раньше. Порты без якоря не изменились. Подробнее — Прокручиваемые контейнеры.
0.4.1
2026-10-02
- Строки принимаются везде, где был enum. Типы
lines.curve,shapeиorientмаркера иsideпорта были объединениями членов enum'ов, поэтому TypeScript отклонялcurve: 'straight'илиshape: 'arrow'с ошибкойType '"straight"' is not assignable to type 'ConnectionCurve', хотя в рантайме обе записи работали. Теперь это обычные объединения строк ('bezier' | 'straight' | 'smoothstep','circle' | 'square' | 'diamond' | 'arrow','top' | 'right' | 'bottom' | 'left','auto' | 'fixed'), и члены enum'ов под них по-прежнему подходят, так что существующий код продолжает компилироваться.VLConnectionCurveEnum,VLMarkerShapeEnum,VLFixedSideEnumиVLOrientEnumпо-прежнему экспортируются. Подробнее — Структура конфигурации.
0.4.0
2026-10-02
Breaking (все пакеты): плоский
VisualLinkerOptionsзаменён одним структурированнымVisualLinkerConfig, разбитым по тому, что он оформляет:theme,lines,markers,ports,labels,blocksиinteraction. Все опцииdefaultXxxубраны; у каждой настройки теперь есть место в группе.styleсоединения имеет ту же форму, что и группаlines, плюсmarkers: { start, end }. Подробнее — Структура конфигурации. Старые имена соответствуют новым так:0.3.x 0.4.0 defaultCurvelines.curvedefaultCurvature,defaultCurveMinReach,defaultCurveMaxReach,defaultCurveAngleBlend,defaultCurveAngleMaxOffsetlines.bezier.curvature,minReach,maxReach,angleBlend,angleMaxOffsetdefaultCornerRadius,defaultMaxTrunkReachlines.smoothstep.cornerRadius,lines.smoothstep.maxTrunkReachavoidObstacles,obstaclePaddinglines.routing.avoidObstacles,lines.routing.paddingjumps,defaultAnimatedlines.jumps,lines.animatedshowPortsports.showdefaultPortRadius,defaultPortColor,defaultPortStrokeColor,defaultPortStrokeWidthports.radius,ports.fill,ports.stroke,ports.strokeWidthdefaultPortSpreadports.spreaddefaultCircleMarkerSize,defaultSquareMarkerSize,defaultDiamondMarkerSize,defaultArrowMarkerSizemarkers.sizes.circle,square,diamond,arrowdraggable,dragGridSize,dragBoundsblocks.draggable,blocks.drag.grid,blocks.drag.boundsselectable,clipToScrollParentsinteraction.selectable,interaction.clipToScrollParentsstyle.curvature,curveMinReach,curveMaxReach,curveAngleBlend,curveAngleMaxOffsetstyle.bezier.curvature,minReach,maxReach,angleBlend,angleMaxOffsetstyle.cornerRadius,style.maxTrunkReachstyle.smoothstep.cornerRadius,style.smoothstep.maxTrunkReachstyle.avoidObstaclesstyle.routing.avoidObstaclesstyle.startMarker,style.endMarkerstyle.markers.start,style.markers.endstyle.hoverStyle,style.selectedStylestyle.hover,style.selectedhoverStyle.markerSize,selectedStyle.markerSizesizeв собственныхhoverиselectedмаркераVisualLinkerOptionsVisualLinkerConfigBreaking (Vue): проп
optionsкомпонента<VisualLinker>теперь называетсяconfig, аUseVisualLinkerOptionsуuseVisualLinker()больше не расширяет опции движка: в нёмconfig,blocksиconnections.configреактивен, поэтому его изменение перерисовывает диаграмму. Подробнее — Компонент VisualLinker.Breaking (Vue): общая конфигурация переехала из глобального объекта в
provide/injectVue.setVisualLinkerDefaults(),resetVisualLinkerDefaults(),visualLinkerDefaultsи типVisualLinkerDefaultsудалены. Передайте конфигурацию вapp.use(VisualLinkerPlugin, { config }), а позже меняйте её черезuseVisualLinkerConfig(). Подробнее — Общая конфигурация.Breaking (Nuxt): опции модуля теперь сама конфигурация движка — те же группы
theme,lines,markers,ports,labels,blocksиinteraction— вместо отдельного плоского списка (defaultCurve,portRadius,curvature, …). Они должны быть сериализуемы в JSON. Четыре настройки, до которых старый список не дотягивался (defaultCornerRadius,defaultMaxTrunkReach,draggable,dragBounds), стали обычными полями. Клиентского плагина больше нет: один универсальный плагин регистрирует директивы и устанавливает конфигурацию. Подробнее — Модуль Nuxt.Breaking (core): маркер, заданный в
markers.startилиmarkers.end, заменяет встроенную точку порта на этом конце у каждого соединения — так же, как это всегда делал маркер, заданный у одного соединения. Цвета маркеров теперь следуют и за цветами линий из темы.New (core): визуальные состояния для каждой визуальной сущности. Линии, маркеры, порты и подписи принимают корзины
highlight,hover,selectedиfocusс полями самой сущности, которые накладываются на базовые в этом порядке. В состоянии маркер может поменятьshape,size, цвета, обводку,arrowили целыйsvg; порт может вырасти, подпись — сменить заливку. Маркеры, порты и подписи следуют состоянию своего соединения. Подробнее — Визуальные состояния.New (core): состояние
highlight. Наведённый блок теперь переводит свои соединения вhighlight, отдельно отhover— курсора над самой линией. Пока корзинаhighlightне задана, оно выглядит так же, какhover, поэтому существующие конфигурации выглядят как раньше.New (core):
opacityдля линий, маркеров, портов и подписей, в том числе по состояниям. Маркер без собственнойopacityблёкнет вместе со своей линией, а анимированная линия перемножает её со своим притемнением.New (core): темы.
theme— это набор токенов цветов —line,lineHover,lineSelected,selectedHalo,focusRing,portFill,portStroke,labelBackground,labelBorder,labelText, — которые записываются в CSS-переменные. ЭкспортируютсяlightTheme,darkThemeиdefineTheme(overrides, base). Подробнее — Темы.New (core): группа
labels—background,border,color,fontSize,paddingX,paddingYиopacityподписей, которые рисует библиотека, с состояниями — а такжеports.sideиports.offsetкак значения по умолчанию для портов, у которых нет своих.New (core): конфигурацию можно менять, пока движок работает.
setConfig(patch)глубоко сливает (ключ со значениемundefinedудаляется),replaceConfig(next)заменяет,getConfig()возвращает копию. Перетаскивание и выделение подключаются или отключаются в соответствии с ней, и всё перерисовывается. Дополнительно экспортируютсяmergeConfig,patchConfigиmergeMarkerInputs.New (Vue): общая конфигурация.
VisualLinkerPluginпринимает{ config };useVisualLinkerConfig()возвращает реактивный объект;provideVisualLinkerConfig(initial?)задаёт свою для поддерева;installVisualLinkerConfig,createSharedConfigиVISUAL_LINKER_CONFIG_KEYнужны интеграциям. Каждая диаграмма сливает её под своимconfig, а изменение перерисовывает все диаграммы. Ничего глобального нет, поэтому несколько приложений на странице не мешают друг другу.Changed (core): событие
block:mouseenterпереводит соединения блока вhighlight, а не вhover, и под курсором в состоянииhoverостаётся только линия, над которой он находится.