@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.
Files changed (51) hide show
  1. package/README.md +24 -0
  2. package/dist/agent/AGENTS.md +63 -0
  3. package/dist/agent/manifest.json +320 -0
  4. package/dist/agent/pages/docs/build-features/connections.md +241 -0
  5. package/dist/agent/pages/docs/build-features/custom-node-renderers.md +219 -0
  6. package/dist/agent/pages/docs/build-features/groups-and-nesting.md +172 -0
  7. package/dist/agent/pages/docs/build-features/performance.md +76 -0
  8. package/dist/agent/pages/docs/build-features/read-only-and-command-guards.md +52 -0
  9. package/dist/agent/pages/docs/build-features/save-and-load.md +142 -0
  10. package/dist/agent/pages/docs/build-features/selection-and-keyboard.md +145 -0
  11. package/dist/agent/pages/docs/build-features/ssr-and-deterministic-state.md +67 -0
  12. package/dist/agent/pages/docs/build-features/theming.md +102 -0
  13. package/dist/agent/pages/docs/build-features/undo-and-redo.md +124 -0
  14. package/dist/agent/pages/docs/evaluate/design-decisions.md +44 -0
  15. package/dist/agent/pages/docs/evaluate/how-nuxt-board-works.md +41 -0
  16. package/dist/agent/pages/docs/evaluate/why-nuxt-board.md +61 -0
  17. package/dist/agent/pages/docs/project/contributing.md +101 -0
  18. package/dist/agent/pages/docs/project/support-and-security.md +40 -0
  19. package/dist/agent/pages/docs/reference/board-core-types.md +82 -0
  20. package/dist/agent/pages/docs/reference/board-core.md +261 -0
  21. package/dist/agent/pages/docs/reference/connections.md +531 -0
  22. package/dist/agent/pages/docs/reference/events-and-errors.md +158 -0
  23. package/dist/agent/pages/docs/reference/glossary.md +58 -0
  24. package/dist/agent/pages/docs/reference/history.md +193 -0
  25. package/dist/agent/pages/docs/reference/minimap.md +157 -0
  26. package/dist/agent/pages/docs/reference/nuxt-board.md +148 -0
  27. package/dist/agent/pages/docs/reference/package-overview.md +58 -0
  28. package/dist/agent/pages/docs/reference/vue-board.md +424 -0
  29. package/dist/agent/pages/docs/reference/vue-composables.md +293 -0
  30. package/dist/agent/pages/docs/solutions/mind-map.md +104 -0
  31. package/dist/agent/pages/docs/solutions/nuxt-application.md +47 -0
  32. package/dist/agent/pages/docs/solutions/planning-board.md +51 -0
  33. package/dist/agent/pages/docs/solutions/read-only-viewer.md +61 -0
  34. package/dist/agent/pages/docs/solutions/workflow-builder.md +124 -0
  35. package/dist/agent/pages/docs/start-building/add-connections-and-history.md +42 -0
  36. package/dist/agent/pages/docs/start-building/customize-your-first-node.md +38 -0
  37. package/dist/agent/pages/docs/start-building/installation.md +76 -0
  38. package/dist/agent/pages/docs/start-building/your-first-board.md +52 -0
  39. package/dist/agent/pages/docs/understand-the-system/camera-and-coordinates.md +22 -0
  40. package/dist/agent/pages/docs/understand-the-system/commands-and-transactions.md +31 -0
  41. package/dist/agent/pages/docs/understand-the-system/document-and-session-state.md +25 -0
  42. package/dist/agent/pages/docs/understand-the-system/nodes-and-hierarchy.md +24 -0
  43. package/dist/agent/pages/docs/understand-the-system/packages-and-plugins.md +29 -0
  44. package/dist/agent/pages/docs/understand-the-system/persistence-and-json-canvas.md +25 -0
  45. package/dist/agent/pages/docs/understand-the-system/rendering-and-interaction.md +22 -0
  46. package/dist/agent/pages/docs/understand-the-system/the-engine.md +28 -0
  47. package/dist/agent/pages/docs.md +18 -0
  48. package/dist/engine/transaction.d.ts +2 -2
  49. package/dist/index.js +18 -7
  50. package/dist/types.d.ts +2 -2
  51. 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.