@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
package/README.md CHANGED
@@ -17,6 +17,30 @@
17
17
 
18
18
  Use this package for board state, commands, selection, grouping, camera control, snapping, guards, events, and first-party plugin hooks.
19
19
 
20
+ <!-- BEGIN:consumer-onboarding -->
21
+
22
+ ## Use a coding agent
23
+
24
+ A coding agent is a development tool that can inspect and change your project.
25
+
26
+ Copy this task prompt into your application agent:
27
+
28
+ ```text
29
+ Use the installed Nuxt Board packages to implement my requested feature.
30
+ Read the application's instructions first. Resolve @lupinum/board-core/agent-docs
31
+ and each installed Board package’s agent-docs entry from this application
32
+ directory. Read the relevant local pages.
33
+ Preserve the existing AGENTS.md. If it has no equivalent guidance, append
34
+ one short note to resolve installed package docs before integration work
35
+ and after dependency changes. Do not install a consumer skill.
36
+ Check the completed feature using this project's normal commands.
37
+ ```
38
+
39
+ The installed documentation matches the package version. If an older version
40
+ has no documentation export, use its README, types and matching release docs.
41
+
42
+ <!-- END:consumer-onboarding -->
43
+
20
44
  ## Requirements
21
45
 
22
46
  The package is framework independent. Use `@lupinum/vue-board` or `@lupinum/nuxt-board` when you need rendering.
@@ -0,0 +1,63 @@
1
+ # @lupinum/board-core
2
+
3
+ Documentation for installed version 1.0.0-beta.4.
4
+
5
+ Read the relevant local pages before changing this package’s integration.
6
+ Project instructions govern architecture, style and permissions.
7
+
8
+ ## Start here
9
+
10
+ - [Installation](./pages/docs/start-building/installation.md) — /docs/start-building/installation
11
+ - [@lupinum/board-core](./pages/docs/reference/board-core.md) — /docs/reference/board-core
12
+
13
+ ## Find a page
14
+
15
+ The index below maps public documentation routes to this installed snapshot.
16
+ For links to this documentation site, use the matching local page in manifest.json
17
+ instead of fetching a possibly different website version. Preserve URL fragments.
18
+ External dependencies have their own versioned contracts. Report missing guidance.
19
+
20
+ - [Nuxt Board documentation](./pages/docs.md) — /docs
21
+ - [Connections](./pages/docs/build-features/connections.md) — /docs/build-features/connections
22
+ - [Custom renderers](./pages/docs/build-features/custom-node-renderers.md) — /docs/build-features/custom-node-renderers
23
+ - [Group nodes](./pages/docs/build-features/groups-and-nesting.md) — /docs/build-features/groups-and-nesting
24
+ - [Performance](./pages/docs/build-features/performance.md) — /docs/build-features/performance
25
+ - [First-party features and command guards](./pages/docs/build-features/read-only-and-command-guards.md) — /docs/build-features/read-only-and-command-guards
26
+ - [Serialization](./pages/docs/build-features/save-and-load.md) — /docs/build-features/save-and-load
27
+ - [Selection and interaction](./pages/docs/build-features/selection-and-keyboard.md) — /docs/build-features/selection-and-keyboard
28
+ - [SSR deterministic scene](./pages/docs/build-features/ssr-and-deterministic-state.md) — /docs/build-features/ssr-and-deterministic-state
29
+ - [Theming](./pages/docs/build-features/theming.md) — /docs/build-features/theming
30
+ - [History](./pages/docs/build-features/undo-and-redo.md) — /docs/build-features/undo-and-redo
31
+ - [Design decisions](./pages/docs/evaluate/design-decisions.md) — /docs/evaluate/design-decisions
32
+ - [How Nuxt Board works](./pages/docs/evaluate/how-nuxt-board-works.md) — /docs/evaluate/how-nuxt-board-works
33
+ - [Why Nuxt Board](./pages/docs/evaluate/why-nuxt-board.md) — /docs/evaluate/why-nuxt-board
34
+ - [Contributing](./pages/docs/project/contributing.md) — /docs/project/contributing
35
+ - [Support and security](./pages/docs/project/support-and-security.md) — /docs/project/support-and-security
36
+ - [@lupinum/board-core types](./pages/docs/reference/board-core-types.md) — /docs/reference/board-core-types
37
+ - [@lupinum/board-core](./pages/docs/reference/board-core.md) — /docs/reference/board-core
38
+ - [@lupinum/board-connections](./pages/docs/reference/connections.md) — /docs/reference/connections
39
+ - [Events and subscriptions](./pages/docs/reference/events-and-errors.md) — /docs/reference/events-and-errors
40
+ - [Glossary](./pages/docs/reference/glossary.md) — /docs/reference/glossary
41
+ - [@lupinum/board-history](./pages/docs/reference/history.md) — /docs/reference/history
42
+ - [@lupinum/vue-board/minimap](./pages/docs/reference/minimap.md) — /docs/reference/minimap
43
+ - [@lupinum/nuxt-board](./pages/docs/reference/nuxt-board.md) — /docs/reference/nuxt-board
44
+ - [Package overview](./pages/docs/reference/package-overview.md) — /docs/reference/package-overview
45
+ - [@lupinum/vue-board](./pages/docs/reference/vue-board.md) — /docs/reference/vue-board
46
+ - [Vue composables](./pages/docs/reference/vue-composables.md) — /docs/reference/vue-composables
47
+ - [Mind map](./pages/docs/solutions/mind-map.md) — /docs/solutions/mind-map
48
+ - [Nuxt auto-imports](./pages/docs/solutions/nuxt-application.md) — /docs/solutions/nuxt-application
49
+ - [Planning board](./pages/docs/solutions/planning-board.md) — /docs/solutions/planning-board
50
+ - [Read-only viewer](./pages/docs/solutions/read-only-viewer.md) — /docs/solutions/read-only-viewer
51
+ - [Workflow renderer demo](./pages/docs/solutions/workflow-builder.md) — /docs/solutions/workflow-builder
52
+ - [Add connections and history](./pages/docs/start-building/add-connections-and-history.md) — /docs/start-building/add-connections-and-history
53
+ - [Customize your first node](./pages/docs/start-building/customize-your-first-node.md) — /docs/start-building/customize-your-first-node
54
+ - [Installation](./pages/docs/start-building/installation.md) — /docs/start-building/installation
55
+ - [Your first board](./pages/docs/start-building/your-first-board.md) — /docs/start-building/your-first-board
56
+ - [Camera and coordinates](./pages/docs/understand-the-system/camera-and-coordinates.md) — /docs/understand-the-system/camera-and-coordinates
57
+ - [Commands and transactions](./pages/docs/understand-the-system/commands-and-transactions.md) — /docs/understand-the-system/commands-and-transactions
58
+ - [Document and session state](./pages/docs/understand-the-system/document-and-session-state.md) — /docs/understand-the-system/document-and-session-state
59
+ - [Nodes and hierarchy](./pages/docs/understand-the-system/nodes-and-hierarchy.md) — /docs/understand-the-system/nodes-and-hierarchy
60
+ - [Packages and plugins](./pages/docs/understand-the-system/packages-and-plugins.md) — /docs/understand-the-system/packages-and-plugins
61
+ - [Persistence and JSON Canvas](./pages/docs/understand-the-system/persistence-and-json-canvas.md) — /docs/understand-the-system/persistence-and-json-canvas
62
+ - [Rendering and interaction](./pages/docs/understand-the-system/rendering-and-interaction.md) — /docs/understand-the-system/rendering-and-interaction
63
+ - [The engine](./pages/docs/understand-the-system/the-engine.md) — /docs/understand-the-system/the-engine
@@ -0,0 +1,320 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "@lupinum/board-core",
4
+ "version": "1.0.0-beta.4",
5
+ "entrySha256": "8bb3494aaab14b693dbbb72cd0a9c82627c17e0a4a54d51a359b75942aed8991",
6
+ "startRoutes": [
7
+ "/docs/start-building/installation",
8
+ "/docs/reference/board-core"
9
+ ],
10
+ "pages": [
11
+ {
12
+ "title": "Nuxt Board documentation",
13
+ "route": "/docs",
14
+ "url": "https://nuxt-board.lupinum.com/docs",
15
+ "file": "pages/docs.md",
16
+ "sha256": "12aaf7fa607f2941e1dd2ca3f7edd2472e09ba8152a8792d5cb11b26ef3cecfd"
17
+ },
18
+ {
19
+ "title": "Connections",
20
+ "route": "/docs/build-features/connections",
21
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/connections",
22
+ "file": "pages/docs/build-features/connections.md",
23
+ "sha256": "f28b76bb85f27a3424f2e17cfa0a94382f8f42c37a3f8d4fc88888a2c515b0f7"
24
+ },
25
+ {
26
+ "title": "Custom renderers",
27
+ "route": "/docs/build-features/custom-node-renderers",
28
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/custom-node-renderers",
29
+ "file": "pages/docs/build-features/custom-node-renderers.md",
30
+ "sha256": "5dcf0f3aeabbd8c2e2336ec56b8242d8241aac670674b12eb773cade0a0292f1"
31
+ },
32
+ {
33
+ "title": "Group nodes",
34
+ "route": "/docs/build-features/groups-and-nesting",
35
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/groups-and-nesting",
36
+ "file": "pages/docs/build-features/groups-and-nesting.md",
37
+ "sha256": "b2f18338dddfcedb7be0d64224c5b4ff36fa1bb8faeae1b3e537366207051a8e"
38
+ },
39
+ {
40
+ "title": "Performance",
41
+ "route": "/docs/build-features/performance",
42
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/performance",
43
+ "file": "pages/docs/build-features/performance.md",
44
+ "sha256": "3d8ece5404eb2dd61446d1b750c4e5447b19f4a681fceb8f9c285bc3b6e1853f"
45
+ },
46
+ {
47
+ "title": "First-party features and command guards",
48
+ "route": "/docs/build-features/read-only-and-command-guards",
49
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/read-only-and-command-guards",
50
+ "file": "pages/docs/build-features/read-only-and-command-guards.md",
51
+ "sha256": "38c06b1175089a47425ad4cc5e2f31785e934d00cf2dc02e4ef818781074ddbf"
52
+ },
53
+ {
54
+ "title": "Serialization",
55
+ "route": "/docs/build-features/save-and-load",
56
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/save-and-load",
57
+ "file": "pages/docs/build-features/save-and-load.md",
58
+ "sha256": "e0a558f4827b1dfa28014a7301f91c9194bf8579d0b24b8409c0670c4bffbc79"
59
+ },
60
+ {
61
+ "title": "Selection and interaction",
62
+ "route": "/docs/build-features/selection-and-keyboard",
63
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/selection-and-keyboard",
64
+ "file": "pages/docs/build-features/selection-and-keyboard.md",
65
+ "sha256": "b6e7cc4b87910ab2e955f4159a9a9d2a938bb576282e5142c9bc6f2a9fcd425c"
66
+ },
67
+ {
68
+ "title": "SSR deterministic scene",
69
+ "route": "/docs/build-features/ssr-and-deterministic-state",
70
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/ssr-and-deterministic-state",
71
+ "file": "pages/docs/build-features/ssr-and-deterministic-state.md",
72
+ "sha256": "20f3a7e0c97889335f1b9a34e1403d02caaded9301953e09f6d1e7ac75a2a995"
73
+ },
74
+ {
75
+ "title": "Theming",
76
+ "route": "/docs/build-features/theming",
77
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/theming",
78
+ "file": "pages/docs/build-features/theming.md",
79
+ "sha256": "1809f4e51693340e777b13a24d17be7adeb50e14f1cfbdbba35150bfbbb85a67"
80
+ },
81
+ {
82
+ "title": "History",
83
+ "route": "/docs/build-features/undo-and-redo",
84
+ "url": "https://nuxt-board.lupinum.com/docs/build-features/undo-and-redo",
85
+ "file": "pages/docs/build-features/undo-and-redo.md",
86
+ "sha256": "b5e743162727210e404afa9f34ec0642d5084887bd4d502d33a3320abcbdff93"
87
+ },
88
+ {
89
+ "title": "Design decisions",
90
+ "route": "/docs/evaluate/design-decisions",
91
+ "url": "https://nuxt-board.lupinum.com/docs/evaluate/design-decisions",
92
+ "file": "pages/docs/evaluate/design-decisions.md",
93
+ "sha256": "cefccf196ec4a9eb2caf37dfec2da1d69dff81e7c42ab74d531d94af8070f49a"
94
+ },
95
+ {
96
+ "title": "How Nuxt Board works",
97
+ "route": "/docs/evaluate/how-nuxt-board-works",
98
+ "url": "https://nuxt-board.lupinum.com/docs/evaluate/how-nuxt-board-works",
99
+ "file": "pages/docs/evaluate/how-nuxt-board-works.md",
100
+ "sha256": "b7094845c580b764661bf7a12c22e29826e8632f095b76f08b16e5ee244d9a56"
101
+ },
102
+ {
103
+ "title": "Why Nuxt Board",
104
+ "route": "/docs/evaluate/why-nuxt-board",
105
+ "url": "https://nuxt-board.lupinum.com/docs/evaluate/why-nuxt-board",
106
+ "file": "pages/docs/evaluate/why-nuxt-board.md",
107
+ "sha256": "284375805ad6f0a8351dab4ce391519e4e516ae732951dfee69148f637d3406e"
108
+ },
109
+ {
110
+ "title": "Contributing",
111
+ "route": "/docs/project/contributing",
112
+ "url": "https://nuxt-board.lupinum.com/docs/project/contributing",
113
+ "file": "pages/docs/project/contributing.md",
114
+ "sha256": "ec5c9d0295538c7354caf9b314f5bdc6a33e31cb42dbc1eaf9e2761bab08bdb9"
115
+ },
116
+ {
117
+ "title": "Support and security",
118
+ "route": "/docs/project/support-and-security",
119
+ "url": "https://nuxt-board.lupinum.com/docs/project/support-and-security",
120
+ "file": "pages/docs/project/support-and-security.md",
121
+ "sha256": "b5619172ef92dbc503b7568bd4f32f45e9911e52909b0bcd21c9503eea462779"
122
+ },
123
+ {
124
+ "title": "@lupinum/board-core types",
125
+ "route": "/docs/reference/board-core-types",
126
+ "url": "https://nuxt-board.lupinum.com/docs/reference/board-core-types",
127
+ "file": "pages/docs/reference/board-core-types.md",
128
+ "sha256": "82994a98bf1afbab16149e6fa3a6285998c986c36047114f7f5728cbdd21a856"
129
+ },
130
+ {
131
+ "title": "@lupinum/board-core",
132
+ "route": "/docs/reference/board-core",
133
+ "url": "https://nuxt-board.lupinum.com/docs/reference/board-core",
134
+ "file": "pages/docs/reference/board-core.md",
135
+ "sha256": "56f9e8c73d0cd03a3aee573b4e654d506514e1aed60c2e849f2e74f4e2200f6c"
136
+ },
137
+ {
138
+ "title": "@lupinum/board-connections",
139
+ "route": "/docs/reference/connections",
140
+ "url": "https://nuxt-board.lupinum.com/docs/reference/connections",
141
+ "file": "pages/docs/reference/connections.md",
142
+ "sha256": "afa0a0d6a480999dec9888cc69d032822943bd31ae4787dd98d6a44e65bae8a0"
143
+ },
144
+ {
145
+ "title": "Events and subscriptions",
146
+ "route": "/docs/reference/events-and-errors",
147
+ "url": "https://nuxt-board.lupinum.com/docs/reference/events-and-errors",
148
+ "file": "pages/docs/reference/events-and-errors.md",
149
+ "sha256": "45be4331a1aba94e1766b07655bcfd315522d7814e70957585bc9646adb119e3"
150
+ },
151
+ {
152
+ "title": "Glossary",
153
+ "route": "/docs/reference/glossary",
154
+ "url": "https://nuxt-board.lupinum.com/docs/reference/glossary",
155
+ "file": "pages/docs/reference/glossary.md",
156
+ "sha256": "ae65c10dbfe65bf9e525c8e7e14ad9d7c45e72915c3e74be7715a24f51c692fd"
157
+ },
158
+ {
159
+ "title": "@lupinum/board-history",
160
+ "route": "/docs/reference/history",
161
+ "url": "https://nuxt-board.lupinum.com/docs/reference/history",
162
+ "file": "pages/docs/reference/history.md",
163
+ "sha256": "944d6245cb0b9a6194d84b5f0a243dcbb51dd7d618eae4e1cce3408520206770"
164
+ },
165
+ {
166
+ "title": "@lupinum/vue-board/minimap",
167
+ "route": "/docs/reference/minimap",
168
+ "url": "https://nuxt-board.lupinum.com/docs/reference/minimap",
169
+ "file": "pages/docs/reference/minimap.md",
170
+ "sha256": "970f22a864dc84fedfea12edbe4fb780aa53c18714bae6d503876f2e2fc30c26"
171
+ },
172
+ {
173
+ "title": "@lupinum/nuxt-board",
174
+ "route": "/docs/reference/nuxt-board",
175
+ "url": "https://nuxt-board.lupinum.com/docs/reference/nuxt-board",
176
+ "file": "pages/docs/reference/nuxt-board.md",
177
+ "sha256": "4514aa3f51777b71e24785876fca146100ce4ca1c9dff3857d6807c166c5eeca"
178
+ },
179
+ {
180
+ "title": "Package overview",
181
+ "route": "/docs/reference/package-overview",
182
+ "url": "https://nuxt-board.lupinum.com/docs/reference/package-overview",
183
+ "file": "pages/docs/reference/package-overview.md",
184
+ "sha256": "135d1326da46de41cf6405e8e846f02bb397089dc6b5a8000515ed7cccb5604e"
185
+ },
186
+ {
187
+ "title": "@lupinum/vue-board",
188
+ "route": "/docs/reference/vue-board",
189
+ "url": "https://nuxt-board.lupinum.com/docs/reference/vue-board",
190
+ "file": "pages/docs/reference/vue-board.md",
191
+ "sha256": "fb58c66c279c57feaa74c808c00ed64971c638faa7867dbd85704b7cc42b71a3"
192
+ },
193
+ {
194
+ "title": "Vue composables",
195
+ "route": "/docs/reference/vue-composables",
196
+ "url": "https://nuxt-board.lupinum.com/docs/reference/vue-composables",
197
+ "file": "pages/docs/reference/vue-composables.md",
198
+ "sha256": "e8226d7cce8ca005382ffd2d53ecf9e6fce2f52dda7d8c7c1f9bc14d88625736"
199
+ },
200
+ {
201
+ "title": "Mind map",
202
+ "route": "/docs/solutions/mind-map",
203
+ "url": "https://nuxt-board.lupinum.com/docs/solutions/mind-map",
204
+ "file": "pages/docs/solutions/mind-map.md",
205
+ "sha256": "5a9eba776aab3fc4492ce181a295e6f45c37eba7dc58fe198398a152f58c2f1a"
206
+ },
207
+ {
208
+ "title": "Nuxt auto-imports",
209
+ "route": "/docs/solutions/nuxt-application",
210
+ "url": "https://nuxt-board.lupinum.com/docs/solutions/nuxt-application",
211
+ "file": "pages/docs/solutions/nuxt-application.md",
212
+ "sha256": "0f855165d85ce0da750cb434916a9a0a9114dc8460e632f8afd799edbdb58b38"
213
+ },
214
+ {
215
+ "title": "Planning board",
216
+ "route": "/docs/solutions/planning-board",
217
+ "url": "https://nuxt-board.lupinum.com/docs/solutions/planning-board",
218
+ "file": "pages/docs/solutions/planning-board.md",
219
+ "sha256": "9033d0a52106920e3a08695ed2b9de53d718ee876bca29d28c7a7463ecfc6a2c"
220
+ },
221
+ {
222
+ "title": "Read-only viewer",
223
+ "route": "/docs/solutions/read-only-viewer",
224
+ "url": "https://nuxt-board.lupinum.com/docs/solutions/read-only-viewer",
225
+ "file": "pages/docs/solutions/read-only-viewer.md",
226
+ "sha256": "a8a8a5a62a420c734ab3e0ead6a0648304d6ddb99ecc73d5cc9a39bcbe88e014"
227
+ },
228
+ {
229
+ "title": "Workflow renderer demo",
230
+ "route": "/docs/solutions/workflow-builder",
231
+ "url": "https://nuxt-board.lupinum.com/docs/solutions/workflow-builder",
232
+ "file": "pages/docs/solutions/workflow-builder.md",
233
+ "sha256": "9a16bc300abf99c28514b99119f30c79dec010cedf9e4b8b3b4cf0fac8dac382"
234
+ },
235
+ {
236
+ "title": "Add connections and history",
237
+ "route": "/docs/start-building/add-connections-and-history",
238
+ "url": "https://nuxt-board.lupinum.com/docs/start-building/add-connections-and-history",
239
+ "file": "pages/docs/start-building/add-connections-and-history.md",
240
+ "sha256": "77db54ed7c65f365da0a89654a4545142b4ccf83755989e0a5d90d3c9412d963"
241
+ },
242
+ {
243
+ "title": "Customize your first node",
244
+ "route": "/docs/start-building/customize-your-first-node",
245
+ "url": "https://nuxt-board.lupinum.com/docs/start-building/customize-your-first-node",
246
+ "file": "pages/docs/start-building/customize-your-first-node.md",
247
+ "sha256": "e63461480fc5d41ad4944e17b90484a5d7656fad30211cc745e4de4d229642a2"
248
+ },
249
+ {
250
+ "title": "Installation",
251
+ "route": "/docs/start-building/installation",
252
+ "url": "https://nuxt-board.lupinum.com/docs/start-building/installation",
253
+ "file": "pages/docs/start-building/installation.md",
254
+ "sha256": "2b264cf614455ed93eb1a83be0ad2d3d8959fcb3bf9191be0cea7565b20c00a1"
255
+ },
256
+ {
257
+ "title": "Your first board",
258
+ "route": "/docs/start-building/your-first-board",
259
+ "url": "https://nuxt-board.lupinum.com/docs/start-building/your-first-board",
260
+ "file": "pages/docs/start-building/your-first-board.md",
261
+ "sha256": "e49f81d90233da1dca3e786cd16215e3a12e308cff029194b6bce67d8ce25445"
262
+ },
263
+ {
264
+ "title": "Camera and coordinates",
265
+ "route": "/docs/understand-the-system/camera-and-coordinates",
266
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/camera-and-coordinates",
267
+ "file": "pages/docs/understand-the-system/camera-and-coordinates.md",
268
+ "sha256": "098b553aba9d20ccedc9b942f68fdfebde5c1a1c12c032a74d8cdb5b41f477b8"
269
+ },
270
+ {
271
+ "title": "Commands and transactions",
272
+ "route": "/docs/understand-the-system/commands-and-transactions",
273
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/commands-and-transactions",
274
+ "file": "pages/docs/understand-the-system/commands-and-transactions.md",
275
+ "sha256": "c79e309fbeb811bab40eb69fa1703335f42ccf2894c5325e2e54e61a32184da2"
276
+ },
277
+ {
278
+ "title": "Document and session state",
279
+ "route": "/docs/understand-the-system/document-and-session-state",
280
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/document-and-session-state",
281
+ "file": "pages/docs/understand-the-system/document-and-session-state.md",
282
+ "sha256": "0b0c222cd2a5eb47028bbca8071fd199c794716617e3edbb3f15d85d343881f7"
283
+ },
284
+ {
285
+ "title": "Nodes and hierarchy",
286
+ "route": "/docs/understand-the-system/nodes-and-hierarchy",
287
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/nodes-and-hierarchy",
288
+ "file": "pages/docs/understand-the-system/nodes-and-hierarchy.md",
289
+ "sha256": "948b7b1df90813d9769c40476302e1d78dd148755632339763d9036b6e53bfd5"
290
+ },
291
+ {
292
+ "title": "Packages and plugins",
293
+ "route": "/docs/understand-the-system/packages-and-plugins",
294
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/packages-and-plugins",
295
+ "file": "pages/docs/understand-the-system/packages-and-plugins.md",
296
+ "sha256": "83b3f9513afc6cc958438541d0636f3f5fd17bd59f457a779527164ab2d334c7"
297
+ },
298
+ {
299
+ "title": "Persistence and JSON Canvas",
300
+ "route": "/docs/understand-the-system/persistence-and-json-canvas",
301
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/persistence-and-json-canvas",
302
+ "file": "pages/docs/understand-the-system/persistence-and-json-canvas.md",
303
+ "sha256": "ca23f4626f0bbe533f3f1299e33e304ba261a9659648006d1473a168ac38eca6"
304
+ },
305
+ {
306
+ "title": "Rendering and interaction",
307
+ "route": "/docs/understand-the-system/rendering-and-interaction",
308
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/rendering-and-interaction",
309
+ "file": "pages/docs/understand-the-system/rendering-and-interaction.md",
310
+ "sha256": "94241704d8af88395152a9887a981d2b4da7f19485f34c209928255d1427a9a0"
311
+ },
312
+ {
313
+ "title": "The engine",
314
+ "route": "/docs/understand-the-system/the-engine",
315
+ "url": "https://nuxt-board.lupinum.com/docs/understand-the-system/the-engine",
316
+ "file": "pages/docs/understand-the-system/the-engine.md",
317
+ "sha256": "8a0464454adfda7cf3b14f0afb7facc17a849f083e09d2226340fbf4fdb76b7a"
318
+ }
319
+ ]
320
+ }
@@ -0,0 +1,241 @@
1
+ ---
2
+ title: "Connections"
3
+ description: "Add edges between nodes with the connections plugin — anchors, routing styles, and the SVG connection layer."
4
+ url: "https://nuxt-board.lupinum.com/docs/build-features/connections"
5
+ route: "/docs/build-features/connections"
6
+ locale: "en"
7
+ section: "Documentation"
8
+ collection: "docs"
9
+ source: "ginko-content"
10
+ ---
11
+
12
+ # Connections
13
+
14
+ > Add edges between nodes with the connections plugin — anchors, routing styles, and the SVG connection layer.
15
+
16
+ Connections draw edges between nodes. Install the plugin, create edges, and the connection layer renders them as SVG paths with five routing styles.
17
+
18
+ > Component omitted: `connections-board-demo`.
19
+ > This page contains an interactive or site-specific block that has no agent markdown serializer yet.
20
+
21
+ ## Setup
22
+
23
+ Install the package when your board needs edges:
24
+
25
+ ```bash
26
+ pnpm add @lupinum/board-connections
27
+ ```
28
+
29
+ Then install the connections plugin during engine creation and render the SVG
30
+ layer under `BoardRoot`:
31
+
32
+ ```ts
33
+ import { createBoardEngine } from '@lupinum/board-core'
34
+ import { connectionsPlugin } from '@lupinum/board-connections'
35
+ import { BoardConnectionLayer } from '@lupinum/board-connections/vue'
36
+
37
+ const engine = createBoardEngine({
38
+ plugins: [connectionsPlugin({ routing: 'bezier' })],
39
+ })
40
+ ```
41
+
42
+ ```vue
43
+ <template>
44
+ <BoardRoot :engine="engine" style="height: 100vh">
45
+ <BoardConnectionLayer />
46
+ </BoardRoot>
47
+ </template>
48
+ ```
49
+
50
+ Both pieces are required: the plugin owns edge state, and
51
+ `BoardConnectionLayer` renders and edits that state.
52
+
53
+ ---
54
+
55
+ ## Creating edges
56
+
57
+ Create edges after the endpoint nodes exist:
58
+
59
+ ```ts
60
+ const edge = engine.plugins.connections.createEdge({
61
+ from: sourceNodeId,
62
+ to: targetNodeId,
63
+ label: 'depends on',
64
+ data: {},
65
+ })
66
+ ```
67
+
68
+ For a complete minimal scene:
69
+
70
+ ```ts
71
+ const source = engine.createNode({
72
+ type: 'text',
73
+ x: 80,
74
+ y: 100,
75
+ text: 'Source',
76
+ })
77
+
78
+ const target = engine.createNode({
79
+ type: 'text',
80
+ x: 420,
81
+ y: 100,
82
+ text: 'Target',
83
+ })
84
+
85
+ engine.plugins.connections.createEdge({
86
+ from: source.id,
87
+ to: target.id,
88
+ label: 'depends on',
89
+ data: {},
90
+ })
91
+ ```
92
+
93
+ ### With anchors
94
+
95
+ Specify where the edge attaches on each node:
96
+
97
+ ```ts
98
+ engine.plugins.connections.createEdge({
99
+ from: nodeA,
100
+ to: nodeB,
101
+ fromAnchor: { side: 'right', offset: 0.5 }, // middle of right edge
102
+ toAnchor: { side: 'left', offset: 0.5 }, // middle of left edge
103
+ data: {},
104
+ })
105
+ ```
106
+
107
+ Anchor `offset` is 0–1 along the side (0.5 = center). If omitted, the connection layer auto-picks the best side from node geometry, keeps it stable while nodes move, and attaches at the center of that side.
108
+
109
+ Use non-center offsets for precise manual anchors:
110
+
111
+ ```ts
112
+ engine.plugins.connections.createEdge({
113
+ from: nodeA,
114
+ to: nodeB,
115
+ fromAnchor: { side: 'bottom', offset: 0.2 },
116
+ toAnchor: { side: 'top', offset: 0.8 },
117
+ data: {},
118
+ })
119
+ ```
120
+
121
+ ---
122
+
123
+ ## Querying edges
124
+
125
+ ```ts
126
+ // All edges
127
+ const edges = engine.plugins.connections.getEdges()
128
+
129
+ // Edges from a specific node
130
+ const outgoing = engine.plugins.connections.getEdgesFrom(nodeId)
131
+
132
+ // Edges to a specific node
133
+ const incoming = engine.plugins.connections.getEdgesTo(nodeId)
134
+
135
+ // Edges between two nodes
136
+ const between = engine.plugins.connections.getEdgesBetween(nodeA, nodeB)
137
+
138
+ // A specific edge
139
+ const edge = engine.plugins.connections.getEdge(edgeId)
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Updating edges
145
+
146
+ Reconnect or restyle an existing edge with `updateEdge()`:
147
+
148
+ ```ts
149
+ engine.plugins.connections.updateEdge(edgeId, {
150
+ to: otherNodeId,
151
+ toAnchor: undefined, // clear explicit anchor so the new node side auto-resolves
152
+ })
153
+ ```
154
+
155
+ The connection layer uses the same API internally when you drag an endpoint handle to another node.
156
+
157
+ ---
158
+
159
+ ## Deleting edges
160
+
161
+ ```ts
162
+ engine.plugins.connections.deleteEdge(edgeId)
163
+ ```
164
+
165
+ <note>
166
+ Edges are also automatically deleted when either endpoint node is removed.
167
+ </note>
168
+
169
+ ---
170
+
171
+ ## Rendering with BoardConnectionLayer
172
+
173
+ Render `BoardConnectionLayer` anywhere under `BoardRoot`. It uses the board context, teleports its SVG layer to the root element, and applies the camera transform itself:
174
+
175
+ ```vue
176
+ <script setup lang="ts">
177
+ import { BoardRoot } from '@lupinum/vue-board'
178
+ import { BoardConnectionLayer } from '@lupinum/board-connections/vue'
179
+ </script>
180
+
181
+ <template>
182
+ <BoardRoot :engine="engine" style="height: 100vh">
183
+ <BoardConnectionLayer />
184
+ </BoardRoot>
185
+ </template>
186
+ ```
187
+
188
+ Hover a card edge to reveal a filled connection handle, then drag from it to another card to create a new edge. Dropping a new connection on empty space cancels by default; pass `createNodeForConnection` if your app wants empty-drop creation to create a node and connect it. The callback runs synchronously inside the same board batch as edge creation. A rejected edge rolls back node changes made through that engine; it cannot roll back external effects from the callback. A callback that returns `null` keeps its existing cancellation behavior. Hover an edge or select it to reveal draggable endpoint handles for reconnecting existing edges; dropping a reconnect on empty space cancels it.
189
+
190
+ UI-created edges use automatic endpoints by default. The edge stores no `fromAnchor` or `toAnchor`, so the connection layer keeps choosing the best side as nodes move. Dragging an existing endpoint onto a node side locks that endpoint to the exact side offset under the pointer. Select the edge and use the reset anchor actions to clear manual anchors back to auto. Set `endpointMode="manual"` on `BoardConnectionLayer`, or `connectionsPlugin({ endpointMode: 'manual' })`, when newly created edges should also lock to the side points the user chose.
191
+
192
+ ### Routing styles
193
+
194
+ Toggle the demo above to compare routing styles. Set the routing on `BoardConnectionLayer`:
195
+
196
+ ```vue
197
+ <BoardConnectionLayer routing="step" />
198
+ ```
199
+
200
+ | Style | Purpose |
201
+ | --- | --- |
202
+ | `bezier` (default) | Smooth cubic bezier curve. Best for organic-looking graphs. |
203
+ | `smooth-step` | Rounded orthogonal connector. Clean and readable. |
204
+ | `step` | Right-angle stepped path. Good for pipeline and workflow layouts. |
205
+ | `straight` | Direct straight line. Simple and lightweight. |
206
+ | `arc` | Curved arc route for sketch-style or hand-drawn edge rendering. |
207
+
208
+ ### Custom edge rendering
209
+
210
+ Use the `edge` slot for full control over edge appearance:
211
+
212
+ ```vue
213
+ <BoardConnectionLayer>
214
+ <template #edge="{ edge, route }">
215
+ <path :d="route.path" stroke="#3b82f6" stroke-width="2" fill="none" />
216
+ <text :x="route.labelPoint.x" :y="route.labelPoint.y" text-anchor="middle">
217
+ {{ edge.label }}
218
+ </text>
219
+ </template>
220
+ </BoardConnectionLayer>
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Events
226
+
227
+ ```ts
228
+ engine.on('edge:created', (edge) => {
229
+ console.log('Edge created:', edge.from, '→', edge.to)
230
+ })
231
+
232
+ engine.on('edge:updated', (edge, prev) => {
233
+ console.log('Edge moved from', prev.to, 'to', edge.to)
234
+ })
235
+
236
+ engine.on('edge:deleted', (edgeId) => {
237
+ console.log('Edge deleted:', edgeId)
238
+ })
239
+ ```
240
+
241
+ ---