@lupinum/board-core 1.0.0-beta.2 → 1.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/agent/AGENTS.md +63 -0
- package/dist/agent/manifest.json +320 -0
- package/dist/agent/pages/docs/build-features/connections.md +241 -0
- package/dist/agent/pages/docs/build-features/custom-node-renderers.md +219 -0
- package/dist/agent/pages/docs/build-features/groups-and-nesting.md +172 -0
- package/dist/agent/pages/docs/build-features/performance.md +76 -0
- package/dist/agent/pages/docs/build-features/read-only-and-command-guards.md +52 -0
- package/dist/agent/pages/docs/build-features/save-and-load.md +142 -0
- package/dist/agent/pages/docs/build-features/selection-and-keyboard.md +145 -0
- package/dist/agent/pages/docs/build-features/ssr-and-deterministic-state.md +67 -0
- package/dist/agent/pages/docs/build-features/theming.md +102 -0
- package/dist/agent/pages/docs/build-features/undo-and-redo.md +124 -0
- package/dist/agent/pages/docs/evaluate/design-decisions.md +44 -0
- package/dist/agent/pages/docs/evaluate/how-nuxt-board-works.md +41 -0
- package/dist/agent/pages/docs/evaluate/why-nuxt-board.md +61 -0
- package/dist/agent/pages/docs/project/contributing.md +101 -0
- package/dist/agent/pages/docs/project/support-and-security.md +40 -0
- package/dist/agent/pages/docs/reference/board-core-types.md +82 -0
- package/dist/agent/pages/docs/reference/board-core.md +261 -0
- package/dist/agent/pages/docs/reference/connections.md +531 -0
- package/dist/agent/pages/docs/reference/events-and-errors.md +158 -0
- package/dist/agent/pages/docs/reference/glossary.md +58 -0
- package/dist/agent/pages/docs/reference/history.md +193 -0
- package/dist/agent/pages/docs/reference/minimap.md +157 -0
- package/dist/agent/pages/docs/reference/nuxt-board.md +148 -0
- package/dist/agent/pages/docs/reference/package-overview.md +58 -0
- package/dist/agent/pages/docs/reference/vue-board.md +424 -0
- package/dist/agent/pages/docs/reference/vue-composables.md +293 -0
- package/dist/agent/pages/docs/solutions/mind-map.md +104 -0
- package/dist/agent/pages/docs/solutions/nuxt-application.md +47 -0
- package/dist/agent/pages/docs/solutions/planning-board.md +51 -0
- package/dist/agent/pages/docs/solutions/read-only-viewer.md +61 -0
- package/dist/agent/pages/docs/solutions/workflow-builder.md +124 -0
- package/dist/agent/pages/docs/start-building/add-connections-and-history.md +42 -0
- package/dist/agent/pages/docs/start-building/customize-your-first-node.md +38 -0
- package/dist/agent/pages/docs/start-building/installation.md +76 -0
- package/dist/agent/pages/docs/start-building/your-first-board.md +52 -0
- package/dist/agent/pages/docs/understand-the-system/camera-and-coordinates.md +22 -0
- package/dist/agent/pages/docs/understand-the-system/commands-and-transactions.md +31 -0
- package/dist/agent/pages/docs/understand-the-system/document-and-session-state.md +25 -0
- package/dist/agent/pages/docs/understand-the-system/nodes-and-hierarchy.md +24 -0
- package/dist/agent/pages/docs/understand-the-system/packages-and-plugins.md +29 -0
- package/dist/agent/pages/docs/understand-the-system/persistence-and-json-canvas.md +25 -0
- package/dist/agent/pages/docs/understand-the-system/rendering-and-interaction.md +22 -0
- package/dist/agent/pages/docs/understand-the-system/the-engine.md +28 -0
- package/dist/agent/pages/docs.md +18 -0
- package/dist/engine/transaction.d.ts +2 -2
- package/dist/index.js +18 -7
- package/dist/types.d.ts +2 -2
- package/package.json +3 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Glossary"
|
|
3
|
+
description: "Canonical definitions for Nuxt Board architecture and API terms."
|
|
4
|
+
url: "https://nuxt-board.lupinum.com/docs/reference/glossary"
|
|
5
|
+
route: "/docs/reference/glossary"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Glossary
|
|
13
|
+
|
|
14
|
+
> Canonical definitions for Nuxt Board architecture and API terms.
|
|
15
|
+
|
|
16
|
+
## Board document
|
|
17
|
+
|
|
18
|
+
The committed, persistable JSON Canvas data owned by the engine and installed persistence plugins.
|
|
19
|
+
|
|
20
|
+
## Board engine
|
|
21
|
+
|
|
22
|
+
The framework-agnostic source of truth created by `createBoardEngine()`.
|
|
23
|
+
|
|
24
|
+
## Command
|
|
25
|
+
|
|
26
|
+
A named operation that changes persistent board state through the transaction boundary.
|
|
27
|
+
|
|
28
|
+
## Effective geometry
|
|
29
|
+
|
|
30
|
+
The node geometry rendered at a given moment: committed geometry plus any active session override.
|
|
31
|
+
|
|
32
|
+
## History boundary
|
|
33
|
+
|
|
34
|
+
One successful persistent commit recorded as a single undoable transition.
|
|
35
|
+
|
|
36
|
+
## Plugin slice
|
|
37
|
+
|
|
38
|
+
Immutable state owned by one installed first-party plugin and committed with core state.
|
|
39
|
+
|
|
40
|
+
## Renderer
|
|
41
|
+
|
|
42
|
+
A Vue component that presents an existing node record. It does not define another persisted node type.
|
|
43
|
+
|
|
44
|
+
## Session state
|
|
45
|
+
|
|
46
|
+
Runtime-only state such as viewport measurements, active interaction, snap guides, clipboard data, and transient geometry.
|
|
47
|
+
|
|
48
|
+
## Snapshot
|
|
49
|
+
|
|
50
|
+
An immutable public view of runtime state. It is not the persistence format.
|
|
51
|
+
|
|
52
|
+
## Subscribable
|
|
53
|
+
|
|
54
|
+
A focused reactive channel that publishes a current value and its previous outer-transaction value.
|
|
55
|
+
|
|
56
|
+
## Transaction
|
|
57
|
+
|
|
58
|
+
The staged unit in which commands update a candidate, validate it, commit it, and then publish subscriptions and events.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@lupinum/board-history"
|
|
3
|
+
description: "Deterministic structural undo/redo with connection-aware state restoration."
|
|
4
|
+
url: "https://nuxt-board.lupinum.com/docs/reference/history"
|
|
5
|
+
route: "/docs/reference/history"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# @lupinum/board-history
|
|
13
|
+
|
|
14
|
+
> Deterministic structural undo/redo with connection-aware state restoration.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
<code-group>
|
|
19
|
+
```bash [pnpm]
|
|
20
|
+
pnpm add @lupinum/board-history @lupinum/board-core
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```bash [npm]
|
|
24
|
+
npm install @lupinum/board-history @lupinum/board-core
|
|
25
|
+
```
|
|
26
|
+
</code-group>
|
|
27
|
+
|
|
28
|
+
## historyPlugin
|
|
29
|
+
|
|
30
|
+
Creates the history plugin. Install it during engine creation via `createBoardEngine({ plugins })`.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
const plugin = historyPlugin({ maxSteps: 100 })
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Options
|
|
37
|
+
|
|
38
|
+
| Name | Type | Default | Description |
|
|
39
|
+
| --- | --- | --- | --- |
|
|
40
|
+
| `maxSteps` | `number` | `200` | Maximum number of undo steps to retain. |
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import { createBoardEngine } from '@lupinum/board-core'
|
|
44
|
+
import { historyPlugin } from '@lupinum/board-history'
|
|
45
|
+
|
|
46
|
+
const engine = createBoardEngine({
|
|
47
|
+
plugins: [historyPlugin({ maxSteps: 100 })],
|
|
48
|
+
})
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Command capture
|
|
52
|
+
|
|
53
|
+
History capture is driven by command metadata emitted by the engine and internal features. Camera movement, transient pointer setup/teardown, text-edit begin, imports, and selection-only commands mark themselves as ignored; geometry and content mutations mark themselves as recorded.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Plugin API
|
|
58
|
+
|
|
59
|
+
After installing the plugin, the history API is available on `engine.plugins.history`.
|
|
60
|
+
|
|
61
|
+
### undo
|
|
62
|
+
|
|
63
|
+
Restores the previous state. No-op if there is nothing to undo.
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
undo(): void
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
engine.plugins.history.undo()
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### redo
|
|
74
|
+
|
|
75
|
+
Re-applies the next state. No-op if there is nothing to redo.
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
redo(): void
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### canUndo
|
|
82
|
+
|
|
83
|
+
Returns `true` if there is at least one undo step available.
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
canUndo(): boolean
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### canRedo
|
|
90
|
+
|
|
91
|
+
Returns `true` if there is at least one redo step available.
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
canRedo(): boolean
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### clear
|
|
98
|
+
|
|
99
|
+
Clears the entire history stack (both undo and redo).
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
clear(): void
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### getState
|
|
106
|
+
|
|
107
|
+
Returns the current history state.
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
getState(): HistoryState
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
const state = engine.plugins.history.getState()
|
|
115
|
+
console.log(`${state.undoDepth} undo steps, ${state.redoDepth} redo steps`)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## History boundaries
|
|
121
|
+
|
|
122
|
+
History has no timers or implicit coalescing. A completed gesture, text edit, or outer `batch()` call creates one step. Separate programmatic commands create separate steps.
|
|
123
|
+
|
|
124
|
+
## BoardHistoryShortcuts
|
|
125
|
+
|
|
126
|
+
Import `BoardHistoryShortcuts` from `@lupinum/board-history/vue` and render it
|
|
127
|
+
inside `BoardRoot` with
|
|
128
|
+
`<BoardHistoryShortcuts :history="engine.plugins.history" />`. The required
|
|
129
|
+
prop identifies the history API, while the enclosing root identifies which DOM
|
|
130
|
+
events it may handle. Editable controls and events already handled by another
|
|
131
|
+
component keep their native behavior.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Connection-aware restoration
|
|
136
|
+
|
|
137
|
+
When the connections plugin is also installed, the history plugin automatically captures and restores edge state. Undoing a node deletion also restores any edges that were connected to that node.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Types
|
|
142
|
+
|
|
143
|
+
### HistoryState
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
interface HistoryState {
|
|
147
|
+
undoDepth: number // number of undo steps available
|
|
148
|
+
redoDepth: number // number of redo steps available
|
|
149
|
+
current: string | null // label of the current history entry
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### HistoryEntry
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
interface HistoryEntry {
|
|
157
|
+
label: string // command name that created this entry
|
|
158
|
+
timestamp: number // Date.now() when the entry was created
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### HistoryPluginOptions
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
interface HistoryPluginOptions {
|
|
166
|
+
maxSteps?: number // default: 200
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Events
|
|
173
|
+
|
|
174
|
+
The history plugin adds these events to `BoardEventMap`:
|
|
175
|
+
|
|
176
|
+
| Event | Handler | Description |
|
|
177
|
+
| --- | --- | --- |
|
|
178
|
+
| `history:push` | `(entry: HistoryEntry) => void` | A new entry was added to the undo stack. |
|
|
179
|
+
| `history:undo` | `(entry: HistoryEntry \| null) => void` | An undo operation was performed. |
|
|
180
|
+
| `history:redo` | `(entry: HistoryEntry \| null) => void` | A redo operation was performed. |
|
|
181
|
+
| `history:clear` | `() => void` | The history stack was cleared. |
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
engine.on('history:push', (entry) => {
|
|
185
|
+
console.log('New undo step:', entry.label)
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
engine.on('history:undo', () => {
|
|
189
|
+
console.log('Undo depth:', engine.plugins.history.getState().undoDepth)
|
|
190
|
+
})
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@lupinum/vue-board/minimap"
|
|
3
|
+
description: "Minimap composable and component for board navigation."
|
|
4
|
+
url: "https://nuxt-board.lupinum.com/docs/reference/minimap"
|
|
5
|
+
route: "/docs/reference/minimap"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# @lupinum/vue-board/minimap
|
|
13
|
+
|
|
14
|
+
> Minimap composable and component for board navigation.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
<code-group>
|
|
19
|
+
```bash [pnpm]
|
|
20
|
+
pnpm add @lupinum/vue-board @lupinum/board-core
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```bash [npm]
|
|
24
|
+
npm install @lupinum/vue-board @lupinum/board-core
|
|
25
|
+
```
|
|
26
|
+
</code-group>
|
|
27
|
+
|
|
28
|
+
## useBoardMinimap
|
|
29
|
+
|
|
30
|
+
A composable that computes minimap projections from the engine state. Returns reactive bounds, viewport rectangle, projected nodes, and a pan function.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
function useBoardMinimap(
|
|
34
|
+
engine: BoardEngine,
|
|
35
|
+
options?: MinimapOptions,
|
|
36
|
+
): {
|
|
37
|
+
bounds: ComputedRef<Bounds>
|
|
38
|
+
viewportRect: ComputedRef<{
|
|
39
|
+
x: number
|
|
40
|
+
y: number
|
|
41
|
+
width: number
|
|
42
|
+
height: number
|
|
43
|
+
}>
|
|
44
|
+
minimapNodes: ComputedRef<
|
|
45
|
+
Array<{
|
|
46
|
+
node: BoardNode
|
|
47
|
+
x: number
|
|
48
|
+
y: number
|
|
49
|
+
width: number
|
|
50
|
+
height: number
|
|
51
|
+
}>
|
|
52
|
+
>
|
|
53
|
+
panToMinimapPoint: (point: Point) => Promise<void>
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Options
|
|
58
|
+
|
|
59
|
+
| Name | Type | Default | Description |
|
|
60
|
+
| --- | --- | --- | --- |
|
|
61
|
+
| `width` | `MaybeRefOrGetter<number>` | `200` | Minimap width in pixels. |
|
|
62
|
+
| `height` | `MaybeRefOrGetter<number>` | `140` | Minimap height in pixels. |
|
|
63
|
+
| `padding` | `MaybeRefOrGetter<number>` | `24` | Padding around the world-space content. |
|
|
64
|
+
|
|
65
|
+
### Return type
|
|
66
|
+
|
|
67
|
+
| Property | Type | Description |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| `bounds` | `ComputedRef<Bounds>` | World-space bounds of all nodes (with padding). |
|
|
70
|
+
| `viewportRect` | `ComputedRef<{x, y, width, height}>` | Viewport rectangle projected onto the minimap. |
|
|
71
|
+
| `minimapNodes` | `ComputedRef<Array<...>>` | All nodes projected onto minimap coordinates. |
|
|
72
|
+
| `panToMinimapPoint` | `(point: Point) => Promise<void>` | Pans the main camera so the clicked minimap point is centered. |
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
import { useBoardMinimap } from '@lupinum/vue-board/minimap'
|
|
76
|
+
|
|
77
|
+
const minimap = useBoardMinimap(engine, { width: 200, height: 120 })
|
|
78
|
+
|
|
79
|
+
// Access minimap data
|
|
80
|
+
const nodes = minimap.minimapNodes.value
|
|
81
|
+
const viewport = minimap.viewportRect.value
|
|
82
|
+
|
|
83
|
+
// Navigate by clicking on the minimap
|
|
84
|
+
await minimap.panToMinimapPoint({ x: 100, y: 60 })
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Pass refs or getters when dimensions come from reactive state. `BoardMinimap` does this internally for its `width` and `height` props. Keep the `engine` instance stable for the lifetime of the component or composable.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## BoardMinimap
|
|
92
|
+
|
|
93
|
+
A ready-to-use Vue component that renders a minimap.
|
|
94
|
+
|
|
95
|
+
The minimap is focusable. Arrow keys pan by 24 screen pixels; hold
|
|
96
|
+
<kbd>
|
|
97
|
+
Shift
|
|
98
|
+
</kbd>
|
|
99
|
+
|
|
100
|
+
to pan by 100 pixels.
|
|
101
|
+
|
|
102
|
+
### Props
|
|
103
|
+
|
|
104
|
+
| Name | Type | Default | Description |
|
|
105
|
+
| --- | --- | --- | --- |
|
|
106
|
+
| `engine` | `BoardEngine \| null` | `null` | Engine instance. Falls back to `useBoardEngine()` context if omitted. |
|
|
107
|
+
| `width` | `number` | `200` | Minimap width in pixels. |
|
|
108
|
+
| `height` | `number` | `140` | Minimap height in pixels. |
|
|
109
|
+
|
|
110
|
+
### Slots
|
|
111
|
+
|
|
112
|
+
#### default
|
|
113
|
+
|
|
114
|
+
Custom minimap rendering. If not provided, renders rectangles for nodes and a viewport indicator.
|
|
115
|
+
|
|
116
|
+
| Prop | Type | Description |
|
|
117
|
+
| --- | --- | --- |
|
|
118
|
+
| `nodes` | `Array<{ node, x, y, width, height }>` | Projected node positions. |
|
|
119
|
+
| `viewport` | `{ x, y, width, height }` | Viewport rectangle on the minimap. |
|
|
120
|
+
|
|
121
|
+
### Usage
|
|
122
|
+
|
|
123
|
+
Place the minimap component in the default slot of `BoardRoot` (not inside the viewport, since it should stay in screen-space):
|
|
124
|
+
|
|
125
|
+
```vue
|
|
126
|
+
<BoardRoot :engine="engine">
|
|
127
|
+
<template #default>
|
|
128
|
+
<div class="minimap-container">
|
|
129
|
+
<BoardMinimap :width="208" :height="148" />
|
|
130
|
+
</div>
|
|
131
|
+
</template>
|
|
132
|
+
</BoardRoot>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
```css
|
|
136
|
+
.minimap-container {
|
|
137
|
+
position: absolute;
|
|
138
|
+
bottom: 16px;
|
|
139
|
+
right: 16px;
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Types
|
|
146
|
+
|
|
147
|
+
### MinimapOptions
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
interface MinimapOptions {
|
|
151
|
+
width?: number // default: 200
|
|
152
|
+
height?: number // default: 140
|
|
153
|
+
padding?: number // default: 24
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@lupinum/nuxt-board"
|
|
3
|
+
description: "Nuxt module with auto-imported board components and composables."
|
|
4
|
+
url: "https://nuxt-board.lupinum.com/docs/reference/nuxt-board"
|
|
5
|
+
route: "/docs/reference/nuxt-board"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# @lupinum/nuxt-board
|
|
13
|
+
|
|
14
|
+
> Nuxt module with auto-imported board components and composables.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
Requires Nuxt 3.19 or newer, or Nuxt 4.
|
|
19
|
+
|
|
20
|
+
<code-group>
|
|
21
|
+
```bash [pnpm]
|
|
22
|
+
pnpm add @lupinum/nuxt-board @lupinum/board-core @lupinum/vue-board
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```bash [npm]
|
|
26
|
+
npm install @lupinum/nuxt-board @lupinum/board-core @lupinum/vue-board
|
|
27
|
+
```
|
|
28
|
+
</code-group>
|
|
29
|
+
|
|
30
|
+
Add the module to `nuxt.config.ts`:
|
|
31
|
+
|
|
32
|
+
```ts [nuxt.config.ts]
|
|
33
|
+
export default defineNuxtConfig({
|
|
34
|
+
modules: ['@lupinum/nuxt-board'],
|
|
35
|
+
board: {
|
|
36
|
+
// options
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Module options
|
|
44
|
+
|
|
45
|
+
Configure via the `board` key in `nuxt.config.ts`:
|
|
46
|
+
|
|
47
|
+
| Name | Type | Default | Description |
|
|
48
|
+
| --- | --- | --- | --- |
|
|
49
|
+
| `prefix` | `string` | `''` | Optional prefix for all auto-imported exports. Example: `'My'` produces `<MyBoardRoot>`, `useMyBoardCamera()`, and `createMyBoardEngine()`. |
|
|
50
|
+
| `autoImportComponents` | `boolean` | `true` | Make board components available through Nuxt's component auto-imports. |
|
|
51
|
+
| `autoImportComposables` | `boolean` | `true` | Make board composables and `createBoardEngine` available through Nuxt auto-imports. |
|
|
52
|
+
|
|
53
|
+
```ts [nuxt.config.ts]
|
|
54
|
+
export default defineNuxtConfig({
|
|
55
|
+
modules: ['@lupinum/nuxt-board'],
|
|
56
|
+
board: {
|
|
57
|
+
prefix: 'My',
|
|
58
|
+
autoImportComponents: true,
|
|
59
|
+
autoImportComposables: true,
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Auto-imported components
|
|
67
|
+
|
|
68
|
+
When `autoImportComponents` is `true` (default), these components are auto-imported when used:
|
|
69
|
+
|
|
70
|
+
| Component | Source |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| `BoardRoot` | `@lupinum/vue-board` |
|
|
73
|
+
| `BoardViewport` | `@lupinum/vue-board` |
|
|
74
|
+
| `BoardNode` | `@lupinum/vue-board` |
|
|
75
|
+
| `BoardNodeHandle` | `@lupinum/vue-board` |
|
|
76
|
+
| `BoardSelectionToolbar` | `@lupinum/vue-board` |
|
|
77
|
+
| `BoardGrid` | `@lupinum/vue-board` |
|
|
78
|
+
| `BoardBoxSelect` | `@lupinum/vue-board` |
|
|
79
|
+
| `BoardSnapGuides` | `@lupinum/vue-board` |
|
|
80
|
+
| `BoardMinimap` | `@lupinum/vue-board/minimap` |
|
|
81
|
+
|
|
82
|
+
With a prefix of `'My'`, they become `<MyBoardRoot>`, `<MyBoardViewport>`, etc.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Auto-imported composables
|
|
87
|
+
|
|
88
|
+
When `autoImportComposables` is `true` (default), these are available without imports:
|
|
89
|
+
|
|
90
|
+
| Composable | Source |
|
|
91
|
+
| --- | --- |
|
|
92
|
+
| `useBoardEngine` | `@lupinum/vue-board` |
|
|
93
|
+
| `useBoardCamera` | `@lupinum/vue-board` |
|
|
94
|
+
| `useBoardNodes` | `@lupinum/vue-board` |
|
|
95
|
+
| `useBoardSelection` | `@lupinum/vue-board` |
|
|
96
|
+
| `useBoardInteraction` | `@lupinum/vue-board` |
|
|
97
|
+
| `useBoardVisibleBounds` | `@lupinum/vue-board` |
|
|
98
|
+
| `useBoardVisibleNodes` | `@lupinum/vue-board` |
|
|
99
|
+
| `useBoardGridStyle` | `@lupinum/vue-board` |
|
|
100
|
+
| `useBoardNode` | `@lupinum/vue-board` |
|
|
101
|
+
| `useBoardBoxSelectBounds` | `@lupinum/vue-board` |
|
|
102
|
+
| `useBoardMinimap` | `@lupinum/vue-board/minimap` |
|
|
103
|
+
|
|
104
|
+
With a prefix of `'My'`, these aliases become `useMyBoardEngine()`, `useMyBoardCamera()`, `useMyBoardNodes()`, and so on.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Auto-imported functions
|
|
109
|
+
|
|
110
|
+
These helpers are registered with the composable auto-imports. If `autoImportComposables` is `false`, import them explicitly.
|
|
111
|
+
|
|
112
|
+
| Function | Source |
|
|
113
|
+
| --- | --- |
|
|
114
|
+
| `createBoardEngine` | `@lupinum/board-core` |
|
|
115
|
+
|
|
116
|
+
With a prefix of `'My'`, the helper becomes `createMyBoardEngine()`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Usage
|
|
121
|
+
|
|
122
|
+
With the Nuxt module installed, you can use board features without any imports:
|
|
123
|
+
|
|
124
|
+
```vue [app.vue]
|
|
125
|
+
<script setup lang="ts">
|
|
126
|
+
import { asNodeId } from '@lupinum/board-core'
|
|
127
|
+
|
|
128
|
+
const engine = createBoardEngine({
|
|
129
|
+
grid: { size: 20, snap: true },
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
engine.createNode({
|
|
133
|
+
id: asNodeId('nuxt-hello'),
|
|
134
|
+
type: 'text',
|
|
135
|
+
x: 100,
|
|
136
|
+
y: 100,
|
|
137
|
+
width: 240,
|
|
138
|
+
height: 160,
|
|
139
|
+
text: 'Node',
|
|
140
|
+
})
|
|
141
|
+
</script>
|
|
142
|
+
|
|
143
|
+
<template>
|
|
144
|
+
<BoardRoot :engine="engine" style="height: 100vh" />
|
|
145
|
+
</template>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Package overview"
|
|
3
|
+
description: "The supported entrypoints and the capability each package owns."
|
|
4
|
+
url: "https://nuxt-board.lupinum.com/docs/reference/package-overview"
|
|
5
|
+
route: "/docs/reference/package-overview"
|
|
6
|
+
locale: "en"
|
|
7
|
+
section: "Documentation"
|
|
8
|
+
collection: "docs"
|
|
9
|
+
source: "ginko-content"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Package overview
|
|
13
|
+
|
|
14
|
+
> The supported entrypoints and the capability each package owns.
|
|
15
|
+
|
|
16
|
+
Install only the packages that own capabilities your product uses.
|
|
17
|
+
|
|
18
|
+
| Import | Contract |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `@lupinum/board-core` | Framework-agnostic engine, types, commands, math, events, and JSON Canvas |
|
|
21
|
+
| `@lupinum/vue-board` | `BoardRoot`, board components, composables, and styles |
|
|
22
|
+
| `@lupinum/vue-board/minimap` | Minimap composable and renderer |
|
|
23
|
+
| `@lupinum/board-connections` | Headless edge plugin, routing, and geometry |
|
|
24
|
+
| `@lupinum/board-connections/vue` | Connection rendering and interaction |
|
|
25
|
+
| `@lupinum/board-history` | Undo and redo plugin |
|
|
26
|
+
| `@lupinum/nuxt-board` | Nuxt registration |
|
|
27
|
+
|
|
28
|
+
`@lupinum/board-core/internal` is published so separately versioned first-party packages can share an ABI. Applications should not depend on it.
|
|
29
|
+
|
|
30
|
+
All packages are ESM and target Node 20.19 or newer. Vue-facing packages require Vue 3.5.
|
|
31
|
+
|
|
32
|
+
Use the pages in this section for exact signatures, return values, events, and failures.
|
|
33
|
+
|
|
34
|
+
## Installed documentation
|
|
35
|
+
|
|
36
|
+
Every package exports `./agent-docs`, a readable Markdown file. Resolve it from
|
|
37
|
+
your application directory; for example, resolve
|
|
38
|
+
`@lupinum/board-history/agent-docs` before changing history integration. Read the
|
|
39
|
+
local pages from its index. The snapshot matches the installed package version.
|
|
40
|
+
Resolve it again after an upgrade or rollback. This export is not a JavaScript module.
|
|
41
|
+
|
|
42
|
+
Use the [installation prompt](/raw/docs/start-building/installation.md#use-a-coding-agent)
|
|
43
|
+
to start an agent task. Existing project instructions remain authoritative.
|
|
44
|
+
|
|
45
|
+
## Runtime export index
|
|
46
|
+
|
|
47
|
+
Core exports `BOARD_COLOR_PRESETS`, `BoardError`, `BoardInputError`,
|
|
48
|
+
`BoardNotFoundError`, `BoardConflictError`, `CommandBlockedError`,
|
|
49
|
+
`BoardDestroyedError`, `createBoardEngine`, `asNodeId`, `asEdgeId`, `clamp`,
|
|
50
|
+
`boundsIntersect`, `getBoundsFromPoints`, `getVisibleBounds`,
|
|
51
|
+
`getSelectionNodes`, `getSelectionBounds`, `toggleIds`, `colorForPreset`, and
|
|
52
|
+
`isBoardColorPreset`.
|
|
53
|
+
|
|
54
|
+
Connections exports `EDGE_COLOR_PRESETS`, `connectionsPlugin`,
|
|
55
|
+
`buildArcRoute`, `buildConnectionRoute`, `getVisibleEdges`,
|
|
56
|
+
`resolveAnchorPoint`, `resolveAutoAnchorSide`, `resolveConnectionEndpoint`,
|
|
57
|
+
`resolveEdgeRenderState`, `resolveFloatingEndpoint`, `edgeEndsForDirectionality`,
|
|
58
|
+
`presetForColor`, `resolvePresetColor`, and its own `colorForPreset` helper.
|