[{"data":1,"prerenderedAt":512},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:zUOU_D0I4WNWmz_3BugRnro-eI1D4l9d3LnNz9YFltU":303,"content-page-surround:docs:zUOU_D0I4WNWmz_3BugRnro-eI1D4l9d3LnNz9YFltU":509},[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":14,"description":304,"audience":305,"intent":306,"related":307,"body":309,"type":497,"id":15,"canonicalKey":16,"draft":6,"partial":6,"locale":8,"collection":498,"navigationFile":6,"file":499,"route":504,"resolution":506},"The product problems Nuxt Board solves and the boundaries it keeps explicit.","evaluator","evaluate",[308],"\u002Fevaluate\u002Fhow-nuxt-board-works",{"type":310,"children":311,"toc":487},"root",[312,320,327,339,344,350,355,361,392,397,402,408,443,449,477,482],{"type":313,"tag":314,"props":315,"children":316},"element","p",{},[317],{"type":318,"value":319},"text","Nuxt Board gives your application a board model that exists independently of the component tree. That matters when the canvas is part of a product rather than a disposable visualization.",{"type":313,"tag":321,"props":322,"children":324},"h2",{"id":323},"what-it-owns",[325],{"type":318,"value":326},"What it owns",{"type":313,"tag":314,"props":328,"children":329},{},[330,332,337],{"type":318,"value":331},"The headless engine owns spatial state and behavior: nodes, hierarchy, camera, selection, commands, validation, events, and JSON Canvas persistence. ",{"type":313,"tag":333,"props":334,"children":335},"code",{},[336],{"type":318,"value":237},{"type":318,"value":338}," owns DOM interaction and rendering. Optional packages own connections and history.",{"type":313,"tag":314,"props":340,"children":341},{},[342],{"type":318,"value":343},"This separation gives application code one mutation path. A command can be guarded, validated, recorded in history, and observed without coordinating several Vue stores.",{"type":313,"tag":321,"props":345,"children":347},{"id":346},"what-you-keep",[348],{"type":318,"value":349},"What you keep",{"type":313,"tag":314,"props":351,"children":352},{},[353],{"type":318,"value":354},"Your product owns business rules, backend execution, and domain data. Custom Vue renderers control how records look. Nuxt Board does not turn a planning card into a task service or a workflow node into an execution engine.",{"type":313,"tag":321,"props":356,"children":358},{"id":357},"why-the-limits-help",[359],{"type":318,"value":360},"Why the limits help",{"type":313,"tag":314,"props":362,"children":363},{},[364,366,370,372,377,378,383,385,390],{"type":318,"value":365},"Nuxt Board supports the JSON Canvas node types: ",{"type":313,"tag":333,"props":367,"children":368},{},[369],{"type":318,"value":318},{"type":318,"value":371},", ",{"type":313,"tag":333,"props":373,"children":374},{},[375],{"type":318,"value":376},"file",{"type":318,"value":371},{"type":313,"tag":333,"props":379,"children":380},{},[381],{"type":318,"value":382},"link",{"type":318,"value":384},", and ",{"type":313,"tag":333,"props":386,"children":387},{},[388],{"type":318,"value":389},"group",{"type":318,"value":391},". Custom renderers change presentation without introducing another node schema. First-party plugins add bounded capabilities instead of an unrestricted extension system.",{"type":313,"tag":314,"props":393,"children":394},{},[395],{"type":318,"value":396},"The cost is less speculative flexibility. The benefit is one document model, predictable persistence, and fewer invalid combinations.",{"type":313,"tag":314,"props":398,"children":399},{},[400],{"type":318,"value":401},"Choose Nuxt Board when those boundaries match the system you want to maintain.",{"type":313,"tag":321,"props":403,"children":405},{"id":404},"strong-fit",[406],{"type":318,"value":407},"Strong fit",{"type":313,"tag":409,"props":410,"children":411},"ul",{},[412,418,423,428,433,438],{"type":313,"tag":413,"props":414,"children":415},"li",{},[416],{"type":318,"value":417},"Users arrange, resize, group, select, or connect structured records.",{"type":313,"tag":413,"props":419,"children":420},{},[421],{"type":318,"value":422},"Board state must exist outside the Vue component tree.",{"type":313,"tag":413,"props":424,"children":425},{},[426],{"type":318,"value":427},"Mutations need guards, atomic batches, events, validation, or undo boundaries.",{"type":313,"tag":413,"props":429,"children":430},{},[431],{"type":318,"value":432},"Custom Vue components should render a stable document schema.",{"type":313,"tag":413,"props":434,"children":435},{},[436],{"type":318,"value":437},"JSON Canvas is a useful persistence or interchange format.",{"type":313,"tag":413,"props":439,"children":440},{},[441],{"type":318,"value":442},"Connections, history, and minimaps should remain optional.",{"type":313,"tag":321,"props":444,"children":446},{"id":445},"look-elsewhere-when",[447],{"type":318,"value":448},"Look elsewhere when",{"type":313,"tag":409,"props":450,"children":451},{},[452,457,462,467,472],{"type":313,"tag":413,"props":453,"children":454},{},[455],{"type":318,"value":456},"You only need a static graph renderer.",{"type":313,"tag":413,"props":458,"children":459},{},[460],{"type":318,"value":461},"Freehand drawing and vector illustration are the primary interaction.",{"type":313,"tag":413,"props":463,"children":464},{},[465],{"type":318,"value":466},"You want a complete collaborative whiteboard product rather than a library.",{"type":313,"tag":413,"props":468,"children":469},{},[470],{"type":318,"value":471},"Your graph is already modeled around another library's node and edge model.",{"type":313,"tag":413,"props":473,"children":474},{},[475],{"type":318,"value":476},"You need backend workflow execution; Nuxt Board only owns the editor surface.",{"type":313,"tag":314,"props":478,"children":479},{},[480],{"type":318,"value":481},"Graph-first components such as Vue Flow are a better fit when handles and edges\ndefine the product. Drawing libraries such as Konva or Fabric are a better fit\nwhen shapes and low-level scene manipulation are the core abstraction. Complete\nwhiteboard SDKs fit products that value a prescribed toolset over a narrow\nVue-specific engine, while static renderers such as Mermaid fit non-interactive\ndiagrams.",{"type":313,"tag":314,"props":483,"children":484},{},[485],{"type":318,"value":486},"The deciding question is where canonical state should live. Choose Nuxt Board\nwhen you want a headless board document changed through explicit commands.",{"title":488,"searchDepth":489,"depth":489,"links":490},"",4,[491,493,494,495,496],{"id":323,"depth":492,"text":326},2,{"id":346,"depth":492,"text":349},{"id":357,"depth":492,"text":360},{"id":404,"depth":492,"text":407},{"id":445,"depth":492,"text":448},"markdown","docs",{"source":500,"path":501,"stem":502,"dir":306,"extension":503},"content","docs\u002F1.evaluate\u002F1.why-nuxt-board.md","docs\u002F1.evaluate\u002F1.why-nuxt-board","md",{"requestedPath":17,"resolvedPath":17,"alternates":505},[],{"requested":507,"resolved":508,"usedFallback":6},{},{"locale":8},{"previous":510,"next":511},null,{"title":19,"id":20,"canonicalKey":21,"locale":8,"draft":6,"path":22},1786637497110]