[{"data":1,"prerenderedAt":480},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:yBCgI5N8CyBfU4MoX_P85MOaCM8tfP4Oj9FiqtXh5kc":303,"content-page-surround:docs:yBCgI5N8CyBfU4MoX_P85MOaCM8tfP4Oj9FiqtXh5kc":477},[4,28,54,100,176,215,278,298],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Learn",false,"1","en","content:docs:1.evaluate:.navigation.yml","i-lucide-compass","section",[13,18,23],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"path":17},"Why Nuxt Board","content:docs:1.evaluate:1.why-nuxt-board.md","1\u002F1","\u002Fdocs\u002Fevaluate\u002Fwhy-nuxt-board",{"title":19,"id":20,"canonicalKey":21,"locale":8,"draft":6,"path":22},"How Nuxt Board works","content:docs:1.evaluate:2.how-nuxt-board-works.md","1\u002F2","\u002Fdocs\u002Fevaluate\u002Fhow-nuxt-board-works",{"title":24,"id":25,"canonicalKey":26,"locale":8,"draft":6,"path":27},"Design decisions","content:docs:1.evaluate:4.design-decisions.md","1\u002F4","\u002Fdocs\u002Fevaluate\u002Fdesign-decisions",{"title":29,"page":6,"canonicalKey":30,"locale":8,"id":31,"draft":6,"icon":32,"children":33},"Start building","2","content:docs:2.start-building:.navigation.yml","i-lucide-rocket",[34,39,44,49],{"title":35,"id":36,"canonicalKey":37,"locale":8,"draft":6,"path":38},"Installation","content:docs:2.start-building:1.installation.md","2\u002F1","\u002Fdocs\u002Fstart-building\u002Finstallation",{"title":40,"id":41,"canonicalKey":42,"locale":8,"draft":6,"path":43},"Your first board","content:docs:2.start-building:2.your-first-board.md","2\u002F2","\u002Fdocs\u002Fstart-building\u002Fyour-first-board",{"title":45,"id":46,"canonicalKey":47,"locale":8,"draft":6,"path":48},"Customize your first node","content:docs:2.start-building:3.customize-your-first-node.md","2\u002F3","\u002Fdocs\u002Fstart-building\u002Fcustomize-your-first-node",{"title":50,"id":51,"canonicalKey":52,"locale":8,"draft":6,"path":53},"Add connections and history","content:docs:2.start-building:4.add-connections-and-history.md","2\u002F4","\u002Fdocs\u002Fstart-building\u002Fadd-connections-and-history",{"title":55,"page":6,"canonicalKey":56,"locale":8,"id":57,"draft":6,"icon":58,"children":59},"Understand the system","3","content:docs:3.understand-the-system:.navigation.yml","i-lucide-workflow",[60,65,70,75,80,85,90,95],{"title":61,"id":62,"canonicalKey":63,"locale":8,"draft":6,"path":64},"The engine","content:docs:3.understand-the-system:1.the-engine.md","3\u002F1","\u002Fdocs\u002Funderstand-the-system\u002Fthe-engine",{"title":66,"id":67,"canonicalKey":68,"locale":8,"draft":6,"path":69},"Document and session state","content:docs:3.understand-the-system:2.document-and-session-state.md","3\u002F2","\u002Fdocs\u002Funderstand-the-system\u002Fdocument-and-session-state",{"title":71,"id":72,"canonicalKey":73,"locale":8,"draft":6,"path":74},"Commands and transactions","content:docs:3.understand-the-system:3.commands-and-transactions.md","3\u002F3","\u002Fdocs\u002Funderstand-the-system\u002Fcommands-and-transactions",{"title":76,"id":77,"canonicalKey":78,"locale":8,"draft":6,"path":79},"Nodes and hierarchy","content:docs:3.understand-the-system:4.nodes-and-hierarchy.md","3\u002F4","\u002Fdocs\u002Funderstand-the-system\u002Fnodes-and-hierarchy",{"title":81,"id":82,"canonicalKey":83,"locale":8,"draft":6,"path":84},"Camera and coordinates","content:docs:3.understand-the-system:5.camera-and-coordinates.md","3\u002F5","\u002Fdocs\u002Funderstand-the-system\u002Fcamera-and-coordinates",{"title":86,"id":87,"canonicalKey":88,"locale":8,"draft":6,"path":89},"Rendering and interaction","content:docs:3.understand-the-system:6.rendering-and-interaction.md","3\u002F6","\u002Fdocs\u002Funderstand-the-system\u002Frendering-and-interaction",{"title":91,"id":92,"canonicalKey":93,"locale":8,"draft":6,"path":94},"Packages and plugins","content:docs:3.understand-the-system:7.packages-and-plugins.md","3\u002F7","\u002Fdocs\u002Funderstand-the-system\u002Fpackages-and-plugins",{"title":96,"id":97,"canonicalKey":98,"locale":8,"draft":6,"path":99},"Persistence and JSON Canvas","content:docs:3.understand-the-system:8.persistence-and-json-canvas.md","3\u002F8","\u002Fdocs\u002Funderstand-the-system\u002Fpersistence-and-json-canvas",{"title":101,"page":6,"canonicalKey":102,"locale":8,"id":103,"draft":6,"icon":104,"sidebar":11,"children":105},"Build","4","content:docs:4.build-features:.navigation.yml","i-lucide-blocks",[106,113,120,127,134,141,148,155,162,169],{"title":107,"id":108,"canonicalKey":109,"locale":8,"draft":6,"navigation":110,"icon":111,"path":112},"Custom renderers","content:docs:4.build-features:1.custom-node-renderers.md","4\u002F1",{"icon":111},"i-lucide-layout-template","\u002Fdocs\u002Fbuild-features\u002Fcustom-node-renderers",{"title":114,"id":115,"canonicalKey":116,"locale":8,"draft":6,"navigation":117,"icon":118,"path":119},"Connections","content:docs:4.build-features:2.connections.md","4\u002F2",{"icon":118},"i-lucide-cable","\u002Fdocs\u002Fbuild-features\u002Fconnections",{"title":121,"id":122,"canonicalKey":123,"locale":8,"draft":6,"navigation":124,"icon":125,"path":126},"Group nodes","content:docs:4.build-features:3.groups-and-nesting.md","4\u002F3",{"icon":125},"i-lucide-group","\u002Fdocs\u002Fbuild-features\u002Fgroups-and-nesting",{"title":128,"id":129,"canonicalKey":130,"locale":8,"draft":6,"navigation":131,"icon":132,"path":133},"History","content:docs:4.build-features:4.undo-and-redo.md","4\u002F4",{"icon":132},"i-lucide-history","\u002Fdocs\u002Fbuild-features\u002Fundo-and-redo",{"title":135,"id":136,"canonicalKey":137,"locale":8,"draft":6,"navigation":138,"icon":139,"path":140},"Selection and interaction","content:docs:4.build-features:5.selection-and-keyboard.md","4\u002F5",{"icon":139},"i-lucide-mouse-pointer","\u002Fdocs\u002Fbuild-features\u002Fselection-and-keyboard",{"title":142,"id":143,"canonicalKey":144,"locale":8,"draft":6,"navigation":145,"icon":146,"path":147},"First-party features and command guards","content:docs:4.build-features:6.read-only-and-command-guards.md","4\u002F6",{"icon":146},"i-lucide-puzzle","\u002Fdocs\u002Fbuild-features\u002Fread-only-and-command-guards",{"title":149,"id":150,"canonicalKey":151,"locale":8,"draft":6,"navigation":152,"icon":153,"path":154},"Serialization","content:docs:4.build-features:7.save-and-load.md","4\u002F7",{"icon":153},"i-lucide-file-json","\u002Fdocs\u002Fbuild-features\u002Fsave-and-load",{"title":156,"id":157,"canonicalKey":158,"locale":8,"draft":6,"navigation":159,"icon":160,"path":161},"Theming","content:docs:4.build-features:8.theming.md","4\u002F8",{"icon":160},"i-lucide-palette","\u002Fdocs\u002Fbuild-features\u002Ftheming",{"title":163,"id":164,"canonicalKey":165,"locale":8,"draft":6,"navigation":166,"icon":167,"path":168},"Performance","content:docs:4.build-features:9.performance.md","4\u002F9",{"icon":167},"i-lucide-zap","\u002Fdocs\u002Fbuild-features\u002Fperformance",{"title":170,"id":171,"canonicalKey":172,"locale":8,"draft":6,"navigation":173,"icon":174,"path":175},"SSR deterministic scene","content:docs:4.build-features:10.ssr-and-deterministic-state.md","4\u002F10",{"icon":174},"i-lucide-server","\u002Fdocs\u002Fbuild-features\u002Fssr-and-deterministic-state",{"title":177,"page":6,"canonicalKey":178,"locale":8,"id":179,"draft":6,"icon":111,"children":180},"Solutions","5","content:docs:5.solutions:.navigation.yml",[181,187,194,201,208],{"title":182,"id":183,"canonicalKey":184,"locale":8,"draft":6,"navigation":185,"icon":58,"path":186},"Workflow renderer demo","content:docs:5.solutions:1.workflow-builder.md","5\u002F1",{"icon":58},"\u002Fdocs\u002Fsolutions\u002Fworkflow-builder",{"title":188,"id":189,"canonicalKey":190,"locale":8,"draft":6,"navigation":191,"icon":192,"path":193},"Mind map","content:docs:5.solutions:2.mind-map.md","5\u002F2",{"icon":192},"i-lucide-brain","\u002Fdocs\u002Fsolutions\u002Fmind-map",{"title":195,"id":196,"canonicalKey":197,"locale":8,"draft":6,"navigation":198,"icon":199,"path":200},"Planning board","content:docs:5.solutions:3.planning-board.md","5\u002F3",{"icon":199},"i-lucide-square","\u002Fdocs\u002Fsolutions\u002Fplanning-board",{"title":202,"id":203,"canonicalKey":204,"locale":8,"draft":6,"navigation":205,"icon":206,"path":207},"Read-only viewer","content:docs:5.solutions:4.read-only-viewer.md","5\u002F4",{"icon":206},"i-lucide-eye","\u002Fdocs\u002Fsolutions\u002Fread-only-viewer",{"title":209,"id":210,"canonicalKey":211,"locale":8,"draft":6,"navigation":212,"icon":213,"path":214},"Nuxt auto-imports","content:docs:5.solutions:5.nuxt-application.md","5\u002F5",{"icon":213},"i-lucide-sparkles","\u002Fdocs\u002Fsolutions\u002Fnuxt-application",{"title":216,"page":6,"canonicalKey":217,"locale":8,"id":218,"draft":6,"icon":219,"children":220},"Reference","6","content:docs:6.reference:.navigation.yml","i-lucide-braces",[221,226,231,236,241,246,251,256,261,266,273],{"title":222,"id":223,"canonicalKey":224,"locale":8,"draft":6,"path":225},"Package overview","content:docs:6.reference:1.package-overview.md","6\u002F1","\u002Fdocs\u002Freference\u002Fpackage-overview",{"title":227,"id":228,"canonicalKey":229,"locale":8,"draft":6,"path":230},"@lupinum\u002Fboard-core","content:docs:6.reference:2.board-core.md","6\u002F2","\u002Fdocs\u002Freference\u002Fboard-core",{"title":232,"id":233,"canonicalKey":234,"locale":8,"draft":6,"path":235},"@lupinum\u002Fboard-core types","content:docs:6.reference:3.board-core-types.md","6\u002F3","\u002Fdocs\u002Freference\u002Fboard-core-types",{"title":237,"id":238,"canonicalKey":239,"locale":8,"draft":6,"path":240},"@lupinum\u002Fvue-board","content:docs:6.reference:4.vue-board.md","6\u002F4","\u002Fdocs\u002Freference\u002Fvue-board",{"title":242,"id":243,"canonicalKey":244,"locale":8,"draft":6,"path":245},"Vue composables","content:docs:6.reference:5.vue-composables.md","6\u002F5","\u002Fdocs\u002Freference\u002Fvue-composables",{"title":247,"id":248,"canonicalKey":249,"locale":8,"draft":6,"path":250},"@lupinum\u002Fboard-connections","content:docs:6.reference:6.connections.md","6\u002F6","\u002Fdocs\u002Freference\u002Fconnections",{"title":252,"id":253,"canonicalKey":254,"locale":8,"draft":6,"path":255},"@lupinum\u002Fboard-history","content:docs:6.reference:7.history.md","6\u002F7","\u002Fdocs\u002Freference\u002Fhistory",{"title":257,"id":258,"canonicalKey":259,"locale":8,"draft":6,"path":260},"@lupinum\u002Fvue-board\u002Fminimap","content:docs:6.reference:8.minimap.md","6\u002F8","\u002Fdocs\u002Freference\u002Fminimap",{"title":262,"id":263,"canonicalKey":264,"locale":8,"draft":6,"path":265},"@lupinum\u002Fnuxt-board","content:docs:6.reference:9.nuxt-board.md","6\u002F9","\u002Fdocs\u002Freference\u002Fnuxt-board",{"title":267,"id":268,"canonicalKey":269,"locale":8,"draft":6,"navigation":270,"icon":271,"path":272},"Events and subscriptions","content:docs:6.reference:10.events-and-errors.md","6\u002F10",{"icon":271},"i-lucide-bell","\u002Fdocs\u002Freference\u002Fevents-and-errors",{"title":274,"id":275,"canonicalKey":276,"locale":8,"draft":6,"path":277},"Glossary","content:docs:6.reference:11.glossary.md","6\u002F11","\u002Fdocs\u002Freference\u002Fglossary",{"title":279,"page":6,"canonicalKey":280,"locale":8,"id":281,"draft":6,"icon":282,"children":283},"Project","7","content:docs:7.project:.navigation.yml","i-lucide-git-branch",[284,291],{"title":285,"id":286,"canonicalKey":287,"locale":8,"draft":6,"navigation":288,"icon":289,"path":290},"Contributing","content:docs:7.project:1.contributing.md","7\u002F1",{"icon":289},"i-lucide-git-pull-request","\u002Fdocs\u002Fproject\u002Fcontributing",{"title":292,"id":293,"canonicalKey":294,"locale":8,"draft":6,"navigation":295,"icon":296,"path":297},"Support and security","content:docs:7.project:2.support-and-security.md","7\u002F2",{"icon":296},"i-lucide-shield","\u002Fdocs\u002Fproject\u002Fsupport-and-security",{"title":299,"id":300,"canonicalKey":301,"locale":8,"draft":6,"path":302},"Nuxt Board documentation","content:docs:index.md","\u002F","\u002Fdocs",{"title":24,"description":304,"audience":305,"intent":306,"packages":307,"related":308,"body":311,"type":464,"id":25,"canonicalKey":26,"draft":6,"partial":6,"locale":8,"collection":465,"navigationFile":6,"file":466,"route":472,"resolution":474},"The constraints Nuxt Board chooses, the problems they solve, and their costs.","application-developer","learn",[227],[309,310],"\u002Funderstand-the-system\u002Fcommands-and-transactions","\u002Funderstand-the-system\u002Fpackages-and-plugins",{"type":312,"children":313,"toc":453},"root",[314,322,329,340,350,360,366,371,377,382,388,420,426,438,444],{"type":315,"tag":316,"props":317,"children":318},"element","p",{},[319],{"type":320,"value":321},"text","Nuxt Board limits its extension points to keep state ownership and failure behavior understandable.",{"type":315,"tag":323,"props":324,"children":326},"h2",{"id":325},"one-engine-owns-board-state",[327],{"type":320,"value":328},"One engine owns board state",{"type":315,"tag":316,"props":330,"children":331},{},[332,338],{"type":315,"tag":333,"props":334,"children":335},"strong",{},[336],{"type":320,"value":337},"Decision:",{"type":320,"value":339}," nodes, camera, grid, selection, hierarchy, and plugin slices belong to one engine.",{"type":315,"tag":316,"props":341,"children":342},{},[343,348],{"type":315,"tag":333,"props":344,"children":345},{},[346],{"type":320,"value":347},"Benefit:",{"type":320,"value":349}," commands, snapshots, events, and persistence cannot silently use different board instances.",{"type":315,"tag":316,"props":351,"children":352},{},[353,358],{"type":315,"tag":333,"props":354,"children":355},{},[356],{"type":320,"value":357},"Cost:",{"type":320,"value":359}," applications must adapt existing product data at a deliberate boundary instead of mirroring every field into Vue state.",{"type":315,"tag":323,"props":361,"children":363},{"id":362},"commands-are-the-mutation-boundary",[364],{"type":320,"value":365},"Commands are the mutation boundary",{"type":315,"tag":316,"props":367,"children":368},{},[369],{"type":320,"value":370},"Persistent changes stage a candidate, validate it, and publish only after the outer transaction succeeds. The cost is that direct record mutation is unsupported. The benefit is atomic failure and one observable lifecycle.",{"type":315,"tag":323,"props":372,"children":374},{"id":373},"document-and-session-state-are-separate",[375],{"type":320,"value":376},"Document and session state are separate",{"type":315,"tag":316,"props":378,"children":379},{},[380],{"type":320,"value":381},"Pointer gestures update transient geometry. Completion commits once; cancellation discards the override. Runtime and exported state can differ during a gesture. That difference keeps persistence and history stable.",{"type":315,"tag":323,"props":383,"children":385},{"id":384},"json-canvas-node-types-are-canonical",[386],{"type":320,"value":387},"JSON Canvas node types are canonical",{"type":315,"tag":316,"props":389,"children":390},{},[391,393,398,400,405,406,411,413,418],{"type":320,"value":392},"Custom renderers use existing ",{"type":315,"tag":394,"props":395,"children":396},"code",{},[397],{"type":320,"value":320},{"type":320,"value":399},", ",{"type":315,"tag":394,"props":401,"children":402},{},[403],{"type":320,"value":404},"file",{"type":320,"value":399},{"type":315,"tag":394,"props":407,"children":408},{},[409],{"type":320,"value":410},"link",{"type":320,"value":412},", and ",{"type":315,"tag":394,"props":414,"children":415},{},[416],{"type":320,"value":417},"group",{"type":320,"value":419}," records. This rules out arbitrary type strings, but prevents a second persistence schema.",{"type":315,"tag":323,"props":421,"children":423},{"id":422},"plugins-are-first-party-infrastructure",[424],{"type":320,"value":425},"Plugins are first-party infrastructure",{"type":315,"tag":316,"props":427,"children":428},{},[429,431,436],{"type":320,"value":430},"Connections and history install during engine construction. The unsupported ",{"type":315,"tag":394,"props":432,"children":433},{},[434],{"type":320,"value":435},"@lupinum\u002Fboard-core\u002Finternal",{"type":320,"value":437}," ABI exists for separately published first-party packages, not application extensions.",{"type":315,"tag":323,"props":439,"children":441},{"id":440},"nuxt-owns-no-board-behavior",[442],{"type":320,"value":443},"Nuxt owns no board behavior",{"type":315,"tag":316,"props":445,"children":446},{},[447,451],{"type":315,"tag":394,"props":448,"children":449},{},[450],{"type":320,"value":262},{"type":320,"value":452}," registers imports and styles. Domain invariants stay below the framework boundary.",{"title":454,"searchDepth":455,"depth":455,"links":456},"",4,[457,459,460,461,462,463],{"id":325,"depth":458,"text":328},2,{"id":362,"depth":458,"text":365},{"id":373,"depth":458,"text":376},{"id":384,"depth":458,"text":387},{"id":422,"depth":458,"text":425},{"id":440,"depth":458,"text":443},"markdown","docs",{"source":467,"path":468,"stem":469,"dir":470,"extension":471},"content","docs\u002F1.evaluate\u002F4.design-decisions.md","docs\u002F1.evaluate\u002F4.design-decisions","evaluate","md",{"requestedPath":27,"resolvedPath":27,"alternates":473},[],{"requested":475,"resolved":476,"usedFallback":6},{},{"locale":8},{"previous":478,"next":479},{"title":19,"id":20,"canonicalKey":21,"locale":8,"draft":6,"path":22},{"title":35,"id":36,"canonicalKey":37,"locale":8,"draft":6,"path":38},1786637497897]