[{"data":1,"prerenderedAt":1022},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:Uyhp8t-OLU4mt5lMfM9Zfai5jrhYIDYP1t8zdY7h-Dg":303,"content-page-surround:docs:Uyhp8t-OLU4mt5lMfM9Zfai5jrhYIDYP1t8zdY7h-Dg":1007,"i-logos:vue":1012,"i-logos:typescript-icon":1017,"i-lucide:clipboard":1019},[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",{"audience":304,"intent":305,"title":163,"description":306,"navigation":307,"body":308,"type":994,"id":164,"canonicalKey":165,"draft":6,"partial":6,"locale":8,"collection":995,"navigationFile":6,"file":996,"route":1002,"resolution":1004},"application-developer","build","Viewport culling, level of detail, batching, and rendering habits for large boards.",{"icon":167},{"type":309,"children":310,"toc":981},"root",[311,319,326,337,427,438,444,540,551,557,569,842,848,867,886,898,909,929],{"type":312,"tag":313,"props":314,"children":315},"element","p",{},[316],{"type":317,"value":318},"text","Nuxt Board keeps large boards usable with viewport culling, level of detail, requestAnimationFrame pointer updates, and granular subscriptions. Your code still needs to batch bulk operations and avoid deep-reactive engine wrappers.",{"type":312,"tag":320,"props":321,"children":323},"h2",{"id":322},"viewport-culling",[324],{"type":317,"value":325},"Viewport culling",{"type":312,"tag":313,"props":327,"children":328},{},[329,335],{"type":312,"tag":330,"props":331,"children":332},"code",{},[333],{"type":317,"value":334},"BoardRoot",{"type":317,"value":336}," only renders nodes within the viewport plus a configurable margin. Nodes outside are completely unmounted from the DOM:",{"type":312,"tag":338,"props":339,"children":342},"pre",{"language":340,"class":341},"vue","shiki shiki-themes light-plus dark-plus dark:dark-plus",[343],{"type":312,"tag":330,"props":344,"children":346},{"class":345},"language-vue",[347],{"type":312,"tag":348,"props":349,"children":352},"span",{"class":350,"style":351},"line","display: inline",[353,359,364,370,376,381,386,391,395,399,404,408,412,418,422],{"type":312,"tag":348,"props":354,"children":356},{"style":355},"color:#800000;--shiki-dark:#808080",[357],{"type":317,"value":358},"\u003C",{"type":312,"tag":348,"props":360,"children":362},{"style":361},"color:#800000;--shiki-dark:#569CD6",[363],{"type":317,"value":334},{"type":312,"tag":348,"props":365,"children":367},{"style":366},"color:#000000;--shiki-dark:#D4D4D4",[368],{"type":317,"value":369}," :",{"type":312,"tag":348,"props":371,"children":373},{"style":372},"color:#E50000;--shiki-dark:#9CDCFE",[374],{"type":317,"value":375},"engine",{"type":312,"tag":348,"props":377,"children":378},{"style":366},[379],{"type":317,"value":380},"=",{"type":312,"tag":348,"props":382,"children":383},{"style":366},[384],{"type":317,"value":385},"\"",{"type":312,"tag":348,"props":387,"children":389},{"style":388},"color:#001080;--shiki-dark:#9CDCFE",[390],{"type":317,"value":375},{"type":312,"tag":348,"props":392,"children":393},{"style":366},[394],{"type":317,"value":385},{"type":312,"tag":348,"props":396,"children":397},{"style":366},[398],{"type":317,"value":369},{"type":312,"tag":348,"props":400,"children":401},{"style":372},[402],{"type":317,"value":403},"cull-margin",{"type":312,"tag":348,"props":405,"children":406},{"style":366},[407],{"type":317,"value":380},{"type":312,"tag":348,"props":409,"children":410},{"style":366},[411],{"type":317,"value":385},{"type":312,"tag":348,"props":413,"children":415},{"style":414},"color:#098658;--shiki-dark:#B5CEA8",[416],{"type":317,"value":417},"200",{"type":312,"tag":348,"props":419,"children":420},{"style":366},[421],{"type":317,"value":385},{"type":312,"tag":348,"props":423,"children":424},{"style":355},[425],{"type":317,"value":426}," \u002F>",{"type":312,"tag":313,"props":428,"children":429},{},[430,432,436],{"type":317,"value":431},"Increase ",{"type":312,"tag":330,"props":433,"children":434},{},[435],{"type":317,"value":403},{"type":317,"value":437}," if nodes appear too late during fast panning. Decrease it when DOM count matters more than early rendering.",{"type":312,"tag":320,"props":439,"children":441},{"id":440},"level-of-detail-lod",[442],{"type":317,"value":443},"Level of detail (LOD)",{"type":312,"tag":445,"props":446,"children":447},"table",{},[448,472],{"type":312,"tag":449,"props":450,"children":451},"thead",{},[452],{"type":312,"tag":453,"props":454,"children":455},"tr",{},[456,462,467],{"type":312,"tag":457,"props":458,"children":459},"th",{},[460],{"type":317,"value":461},"LOD",{"type":312,"tag":457,"props":463,"children":464},{},[465],{"type":317,"value":466},"Condition",{"type":312,"tag":457,"props":468,"children":469},{},[470],{"type":317,"value":471},"What renders",{"type":312,"tag":473,"props":474,"children":475},"tbody",{},[476,498,519],{"type":312,"tag":453,"props":477,"children":478},{},[479,488,493],{"type":312,"tag":480,"props":481,"children":482},"td",{},[483],{"type":312,"tag":330,"props":484,"children":485},{},[486],{"type":317,"value":487},"full",{"type":312,"tag":480,"props":489,"children":490},{},[491],{"type":317,"value":492},"Selected, or >= 96px on screen",{"type":312,"tag":480,"props":494,"children":495},{},[496],{"type":317,"value":497},"Full custom renderer.",{"type":312,"tag":453,"props":499,"children":500},{},[501,509,514],{"type":312,"tag":480,"props":502,"children":503},{},[504],{"type":312,"tag":330,"props":505,"children":506},{},[507],{"type":317,"value":508},"simple",{"type":312,"tag":480,"props":510,"children":511},{},[512],{"type":317,"value":513},"6–96px",{"type":312,"tag":480,"props":515,"children":516},{},[517],{"type":317,"value":518},"Lightweight placeholder that preserves node color and group shape.",{"type":312,"tag":453,"props":520,"children":521},{},[522,530,535],{"type":312,"tag":480,"props":523,"children":524},{},[525],{"type":312,"tag":330,"props":526,"children":527},{},[528],{"type":317,"value":529},"hidden",{"type":312,"tag":480,"props":531,"children":532},{},[533],{"type":317,"value":534},"\u003C 6px",{"type":312,"tag":480,"props":536,"children":537},{},[538],{"type":317,"value":539},"Nothing (unmounted).",{"type":312,"tag":313,"props":541,"children":542},{},[543,545,549],{"type":317,"value":544},"Selected nodes always render at ",{"type":312,"tag":330,"props":546,"children":547},{},[548],{"type":317,"value":487},{"type":317,"value":550}," detail. Zoomed-out boards keep colored borders and fills so users can still scan structure without mounting every custom renderer.",{"type":312,"tag":320,"props":552,"children":554},{"id":553},"batching",[555],{"type":317,"value":556},"Batching",{"type":312,"tag":313,"props":558,"children":559},{},[560,562,567],{"type":317,"value":561},"Use ",{"type":312,"tag":330,"props":563,"children":564},{},[565],{"type":317,"value":566},"engine.batch()",{"type":317,"value":568}," when creating many nodes at once:",{"type":312,"tag":338,"props":570,"children":572},{"language":571,"class":341},"ts",[573],{"type":312,"tag":330,"props":574,"children":576},{"class":575},"language-ts",[577,611,613,680,681,703,704,723,724,750,751,768,769,805,806,814,815,823,824,833,834],{"type":312,"tag":348,"props":578,"children":579},{"class":350,"style":351},[580,584,589,595,600,606],{"type":312,"tag":348,"props":581,"children":582},{"style":388},[583],{"type":317,"value":375},{"type":312,"tag":348,"props":585,"children":586},{"style":366},[587],{"type":317,"value":588},".",{"type":312,"tag":348,"props":590,"children":592},{"style":591},"color:#795E26;--shiki-dark:#DCDCAA",[593],{"type":317,"value":594},"batch",{"type":312,"tag":348,"props":596,"children":597},{"style":366},[598],{"type":317,"value":599},"(() ",{"type":312,"tag":348,"props":601,"children":603},{"style":602},"color:#0000FF;--shiki-dark:#569CD6",[604],{"type":317,"value":605},"=>",{"type":312,"tag":348,"props":607,"children":608},{"style":366},[609],{"type":317,"value":610}," {",{"type":317,"value":612},"\n",{"type":312,"tag":348,"props":614,"children":615},{"class":350,"style":351},[616,622,627,632,637,642,647,652,657,662,667,671,675],{"type":312,"tag":348,"props":617,"children":619},{"style":618},"color:#AF00DB;--shiki-dark:#C586C0",[620],{"type":317,"value":621},"  for",{"type":312,"tag":348,"props":623,"children":624},{"style":366},[625],{"type":317,"value":626}," (",{"type":312,"tag":348,"props":628,"children":629},{"style":602},[630],{"type":317,"value":631},"let",{"type":312,"tag":348,"props":633,"children":634},{"style":388},[635],{"type":317,"value":636}," i",{"type":312,"tag":348,"props":638,"children":639},{"style":366},[640],{"type":317,"value":641}," = ",{"type":312,"tag":348,"props":643,"children":644},{"style":414},[645],{"type":317,"value":646},"0",{"type":312,"tag":348,"props":648,"children":649},{"style":366},[650],{"type":317,"value":651},"; ",{"type":312,"tag":348,"props":653,"children":654},{"style":388},[655],{"type":317,"value":656},"i",{"type":312,"tag":348,"props":658,"children":659},{"style":366},[660],{"type":317,"value":661}," \u003C ",{"type":312,"tag":348,"props":663,"children":664},{"style":414},[665],{"type":317,"value":666},"100",{"type":312,"tag":348,"props":668,"children":669},{"style":366},[670],{"type":317,"value":651},{"type":312,"tag":348,"props":672,"children":673},{"style":388},[674],{"type":317,"value":656},{"type":312,"tag":348,"props":676,"children":677},{"style":366},[678],{"type":317,"value":679},"++) {",{"type":317,"value":612},{"type":312,"tag":348,"props":682,"children":683},{"class":350,"style":351},[684,689,693,698],{"type":312,"tag":348,"props":685,"children":686},{"style":388},[687],{"type":317,"value":688},"    engine",{"type":312,"tag":348,"props":690,"children":691},{"style":366},[692],{"type":317,"value":588},{"type":312,"tag":348,"props":694,"children":695},{"style":591},[696],{"type":317,"value":697},"createNode",{"type":312,"tag":348,"props":699,"children":700},{"style":366},[701],{"type":317,"value":702},"({",{"type":317,"value":612},{"type":312,"tag":348,"props":705,"children":706},{"class":350,"style":351},[707,712,718],{"type":312,"tag":348,"props":708,"children":709},{"style":388},[710],{"type":317,"value":711},"      type:",{"type":312,"tag":348,"props":713,"children":715},{"style":714},"color:#A31515;--shiki-dark:#CE9178",[716],{"type":317,"value":717}," 'text'",{"type":312,"tag":348,"props":719,"children":720},{"style":366},[721],{"type":317,"value":722},",",{"type":317,"value":612},{"type":312,"tag":348,"props":725,"children":726},{"class":350,"style":351},[727,732,736,741,746],{"type":312,"tag":348,"props":728,"children":729},{"style":388},[730],{"type":317,"value":731},"      x:",{"type":312,"tag":348,"props":733,"children":734},{"style":388},[735],{"type":317,"value":636},{"type":312,"tag":348,"props":737,"children":738},{"style":366},[739],{"type":317,"value":740}," * ",{"type":312,"tag":348,"props":742,"children":743},{"style":414},[744],{"type":317,"value":745},"260",{"type":312,"tag":348,"props":747,"children":748},{"style":366},[749],{"type":317,"value":722},{"type":317,"value":612},{"type":312,"tag":348,"props":752,"children":753},{"class":350,"style":351},[754,759,764],{"type":312,"tag":348,"props":755,"children":756},{"style":388},[757],{"type":317,"value":758},"      y:",{"type":312,"tag":348,"props":760,"children":761},{"style":414},[762],{"type":317,"value":763}," 0",{"type":312,"tag":348,"props":765,"children":766},{"style":366},[767],{"type":317,"value":722},{"type":317,"value":612},{"type":312,"tag":348,"props":770,"children":771},{"class":350,"style":351},[772,777,782,787,791,796,801],{"type":312,"tag":348,"props":773,"children":774},{"style":388},[775],{"type":317,"value":776},"      text:",{"type":312,"tag":348,"props":778,"children":779},{"style":714},[780],{"type":317,"value":781}," `Node ",{"type":312,"tag":348,"props":783,"children":784},{"style":602},[785],{"type":317,"value":786},"${",{"type":312,"tag":348,"props":788,"children":789},{"style":388},[790],{"type":317,"value":656},{"type":312,"tag":348,"props":792,"children":793},{"style":602},[794],{"type":317,"value":795},"}",{"type":312,"tag":348,"props":797,"children":798},{"style":714},[799],{"type":317,"value":800},"`",{"type":312,"tag":348,"props":802,"children":803},{"style":366},[804],{"type":317,"value":722},{"type":317,"value":612},{"type":312,"tag":348,"props":807,"children":808},{"class":350,"style":351},[809],{"type":312,"tag":348,"props":810,"children":811},{"style":366},[812],{"type":317,"value":813},"    })",{"type":317,"value":612},{"type":312,"tag":348,"props":816,"children":817},{"class":350,"style":351},[818],{"type":312,"tag":348,"props":819,"children":820},{"style":366},[821],{"type":317,"value":822},"  }",{"type":317,"value":612},{"type":312,"tag":348,"props":825,"children":826},{"class":350,"style":351},[827],{"type":312,"tag":348,"props":828,"children":830},{"style":829},"color:#008000;--shiki-dark:#6A9955",[831],{"type":317,"value":832},"  \u002F\u002F One notification instead of 100",{"type":317,"value":612},{"type":312,"tag":348,"props":835,"children":836},{"class":350,"style":351},[837],{"type":312,"tag":348,"props":838,"children":839},{"style":366},[840],{"type":317,"value":841},"})",{"type":312,"tag":320,"props":843,"children":845},{"id":844},"best-practices",[846],{"type":317,"value":847},"Best practices",{"type":312,"tag":313,"props":849,"children":850},{},[851,853,858,860,865],{"type":317,"value":852},"Do not wrap the engine in ",{"type":312,"tag":330,"props":854,"children":855},{},[856],{"type":317,"value":857},"reactive()",{"type":317,"value":859},". The engine manages its own reactivity through subscribables. Use ",{"type":312,"tag":330,"props":861,"children":862},{},[863],{"type":317,"value":864},"shallowRef",{"type":317,"value":866}," if you need to store the engine in Vue state.",{"type":312,"tag":313,"props":868,"children":869},{},[870,872,877,879,884],{"type":317,"value":871},"Prefer composables such as ",{"type":312,"tag":330,"props":873,"children":874},{},[875],{"type":317,"value":876},"useBoardCamera()",{"type":317,"value":878}," and ",{"type":312,"tag":330,"props":880,"children":881},{},[882],{"type":317,"value":883},"useBoardNodes()",{"type":317,"value":885}," over manual subscriptions. They keep component dependencies narrow.",{"type":312,"tag":313,"props":887,"children":888},{},[889,891,896],{"type":317,"value":890},"Keep node updates immutable. Pass a fresh patch to ",{"type":312,"tag":330,"props":892,"children":893},{},[894],{"type":317,"value":895},"engine.updateNode()",{"type":317,"value":897}," instead of mutating objects returned from snapshots.",{"type":312,"tag":313,"props":899,"children":900},{},[901,903,907],{"type":317,"value":902},"Batch bulk operations with ",{"type":312,"tag":330,"props":904,"children":905},{},[906],{"type":317,"value":566},{"type":317,"value":908}," so subscribers receive one coherent update.",{"type":312,"tag":910,"props":911,"children":912},"collapsible",{},[913,920],{"type":312,"tag":914,"props":915,"children":917},"h3",{"id":916},"best-practices-raf-throttling",[918],{"type":317,"value":919},"RAF throttling",{"type":312,"tag":313,"props":921,"children":922},{},[923,927],{"type":312,"tag":330,"props":924,"children":925},{},[926],{"type":317,"value":334},{"type":317,"value":928}," throttles pointer projection updates to one internal adapter call per animation frame. Applications do not drive the pointer state machine directly.",{"type":312,"tag":910,"props":930,"children":931},{},[932,938],{"type":312,"tag":914,"props":933,"children":935},{"id":934},"best-practices-subscribable-granularity",[936],{"type":317,"value":937},"Subscribable granularity",{"type":312,"tag":313,"props":939,"children":940},{},[941,943,948,950,955,956,961,962,967,968,973,975,979],{"type":317,"value":942},"The five subscribables (",{"type":312,"tag":330,"props":944,"children":945},{},[946],{"type":317,"value":947},"$camera",{"type":317,"value":949},", ",{"type":312,"tag":330,"props":951,"children":952},{},[953],{"type":317,"value":954},"$nodes",{"type":317,"value":949},{"type":312,"tag":330,"props":957,"children":958},{},[959],{"type":317,"value":960},"$selection",{"type":317,"value":949},{"type":312,"tag":330,"props":963,"children":964},{},[965],{"type":317,"value":966},"$interaction",{"type":317,"value":949},{"type":312,"tag":330,"props":969,"children":970},{},[971],{"type":317,"value":972},"$snapGuides",{"type":317,"value":974},") fire independently. A camera change does not trigger a ",{"type":312,"tag":330,"props":976,"children":977},{},[978],{"type":317,"value":954},{"type":317,"value":980}," notification. This prevents cascading re-renders in Vue's reactivity system.",{"title":982,"searchDepth":983,"depth":983,"links":984},"",4,[985,987,988,989],{"id":322,"depth":986,"text":325},2,{"id":440,"depth":986,"text":443},{"id":553,"depth":986,"text":556},{"id":844,"depth":986,"text":847,"children":990},[991,993],{"id":916,"depth":992,"text":919},3,{"id":934,"depth":992,"text":937},"markdown","docs",{"source":997,"path":998,"stem":999,"dir":1000,"extension":1001},"content","docs\u002F4.build-features\u002F9.performance.md","docs\u002F4.build-features\u002F9.performance","build-features","md",{"requestedPath":168,"resolvedPath":168,"alternates":1003},[],{"requested":1005,"resolved":1006,"usedFallback":6},{},{"locale":8},{"previous":1008,"next":1010},{"title":156,"id":157,"canonicalKey":158,"locale":8,"draft":6,"navigation":1009,"icon":160,"path":161},{"icon":160},{"title":170,"id":171,"canonicalKey":172,"locale":8,"draft":6,"navigation":1011,"icon":174,"path":175},{"icon":174},{"left":1013,"top":1013,"width":1014,"height":1015,"rotate":1013,"vFlip":6,"hFlip":6,"body":1016},0,256,221,"\u003Cpath fill=\"#41b883\" d=\"M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z\"\u002F>\u003Cpath fill=\"#41b883\" d=\"m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z\"\u002F>\u003Cpath fill=\"#35495e\" d=\"M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z\"\u002F>",{"left":1013,"top":1013,"width":1014,"height":1014,"rotate":1013,"vFlip":6,"hFlip":6,"body":1018},"\u003Cpath fill=\"#3178c6\" d=\"M20 0h216c11.046 0 20 8.954 20 20v216c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20V20C0 8.954 8.954 0 20 0\"\u002F>\u003Cpath fill=\"#fff\" d=\"M150.518 200.475v27.62q6.738 3.453 15.938 5.179T185.849 235q9.934 0 18.874-1.899t15.678-6.257q6.738-4.359 10.669-11.394q3.93-7.033 3.93-17.391q0-7.51-2.246-13.163a30.8 30.8 0 0 0-6.479-10.055q-4.232-4.402-10.149-7.898t-13.347-6.602q-5.442-2.245-9.761-4.359t-7.342-4.316q-3.024-2.2-4.665-4.661t-1.641-5.567q0-2.848 1.468-5.135q1.469-2.288 4.147-3.927t6.565-2.547q3.887-.906 8.638-.906q3.456 0 7.299.518q3.844.517 7.732 1.597a54 54 0 0 1 7.558 2.719a41.7 41.7 0 0 1 6.781 3.797v-25.807q-6.306-2.417-13.778-3.582T198.633 107q-9.847 0-18.658 2.115q-8.811 2.114-15.506 6.602q-6.694 4.49-10.582 11.437Q150 134.102 150 143.769q0 12.342 7.127 21.06t21.638 14.759a292 292 0 0 1 10.625 4.575q4.924 2.244 8.509 4.66t5.658 5.265t2.073 6.474a9.9 9.9 0 0 1-1.296 4.963q-1.295 2.287-3.93 3.97t-6.565 2.632t-9.2.95q-8.983 0-17.794-3.151t-16.327-9.451m-46.036-68.733H140V109H41v22.742h35.345V233h28.137z\"\u002F>",{"left":1013,"top":1013,"width":1020,"height":1020,"rotate":1013,"vFlip":6,"hFlip":6,"body":1021},24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786637504602]