Модуль Nuxt
Оборачивает @macrulez/visual-linker-vue для Nuxt — автоимпортирует <VisualLinker> и useVisualLinker, регистрирует директивы v-vl-block/v-vl-port и делает ключ visualLinker в nuxt.config.ts общей конфигурацией всех диаграмм проекта.
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@macrulez/visual-linker-nuxt'],
visualLinker: {
theme: { line: '#6366f1', lineHover: '#312e81' },
lines: { curve: 'smoothstep', jumps: true },
markers: { end: { shape: 'arrow', hover: { size: 10 } } },
blocks: { draggable: true, drag: { grid: 20 } },
},
})Опции модуля — это в точности конфигурация движка; чтобы менять её, пока приложение работает, см. Общая конфигурация.
Конфигурация
Ключ visualLinker — это VisualLinkerConfig, тот же объект, который принимают createVisualLinker() и проп config у <VisualLinker>, поэтому отдельного списка имён, свойственных только модулю, учить не нужно. Его группы:
theme— токены цветов, которые записываются в CSS-переменные. См. Темы.lines— кривая, цвет, толщина, штриховка, прозрачность, визуальные состояния,bezier,smoothstep,routing,jumps,animated.markers— маркерыstartиendс их состояниями и размерыsizesпо формам.ports— встроенная точка (show,radius,fill,stroke, состояния),sideиoffsetпо умолчанию, а такжеspread.labels— вид подписей соединений, которые рисует библиотека, с состояниями.blocks—draggableиdrag: { grid, bounds }.interaction—hover,highlight,selectableиclipToScrollParents.
Каждая группа и каждое поле описаны в Структуре конфигурации. Всё необязательно, и модуль не зашивает собственных значений по умолчанию: пропущенное поле берёт встроенное значение движка, так что будущее изменение дефолта ядра никогда не будет незаметно перекрыто слоем Nuxt.
Опции передаются через runtimeConfig.public.visualLinker, поэтому должны быть простыми JSON-данными: строки, числа, булевы значения, объекты и массивы. Для blocks.drag.bounds это означает 'container' или объект отступов, а не HTMLElement — элемент по-прежнему можно передать одной диаграмме через её собственный config или блок.
Пример — все группы сразу:
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@macrulez/visual-linker-nuxt'],
visualLinker: {
theme: { line: '#6366f1', lineHover: '#312e81', portFill: '#ffffff' }, // цвета в одном месте
lines: {
curve: 'smoothstep', // ортогональная трассировка для каждого соединения
width: 2,
hover: { width: 3 }, // под курсором толще
smoothstep: { cornerRadius: 10 }, // более круглые изгибы, чем дефолтные 8px
routing: { avoidObstacles: true, padding: 12 }, // обходить другие блоки
jumps: { radius: 6 }, // перепрыгивать через пересекаемые линии
animated: { shape: 'dots', speed: 50 }, // по каждой линии бежит точечный узор
},
markers: {
end: { shape: 'arrow', hover: { size: 10 } }, // стрелка, которая растёт при наведении
sizes: { arrow: 8 }, // стрелки чуть крупнее остальных форм
},
ports: { radius: 5, hover: { radius: 7 }, spread: { gap: 16, padding: 8 } }, // более крупные точки, разведение по общей стороне
labels: { background: '#ffffff', fontSize: 12 }, // «таблетка» за текстом подписи
blocks: { draggable: true, drag: { grid: 20, bounds: 'container' } }, // любой блок можно перетаскивать
interaction: { hover: true, highlight: true, selectable: true, clipToScrollParents: 'pin' }, // линии реагируют и доступны с клавиатуры
},
})Изменение во время работы
Модуль устанавливает конфигурацию как общую конфигурацию приложения — реактивный объект, — поэтому любой компонент может её изменить, и все диаграммы последуют за ней, например чтобы переключить тему:
import { darkTheme, useVisualLinkerConfig } from '@macrulez/visual-linker-vue'
const shared = useVisualLinkerConfig()
shared.theme = darkThemeСобственный config места вызова по-прежнему побеждает её, по полям.
Регистрация
Модуль автоматически:
- Регистрирует
<VisualLinker>как глобальный компонент - Автоимпортирует
useVisualLinker - Регистрирует директивы
v-vl-block/v-vl-portв универсальном плагине — в том числе на сервере, так что атрибуты обнаруженияdata-vl-*уже есть в отрендеренном сервером HTML - Устанавливает конфигурацию
visualLinkerв том же плагине как общую конфигурацию для каждого вызова<VisualLinker>/useVisualLinker(), которые сливают её под своимconfig
<VisualLinker> и useVisualLinker уже безопасны для SSR на сервере — движок и его слой рисования существуют только на клиенте, после монтирования. Оборачивать что-либо в <ClientOnly> нигде не нужно.