[{"data":1,"prerenderedAt":737},["ShallowReactive",2],{"navigation_docs":3,"-vue-guide-escape-hatches":159,"-vue-guide-escape-hatches-surround":732},[4,29,57,76,100,124,152],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,12,16,20,24],{"title":5,"path":7,"stem":11},"1.getting-started\u002Findex",{"title":13,"path":14,"stem":15},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation",{"title":17,"path":18,"stem":19},"First Game","\u002Fgetting-started\u002Ffirst-game","1.getting-started\u002F2.first-game",{"title":21,"path":22,"stem":23},"SSR and Mounting","\u002Fgetting-started\u002Fssr-and-mounting","1.getting-started\u002F3.ssr-and-mounting",{"title":25,"path":26,"stem":27,"icon":28},"Skills","\u002Fgetting-started\u002Fskills","1.getting-started\u002F4.skills","i-lucide-sparkles",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Vue Guide","i-lucide-book-open","\u002Fvue-guide","2.vue-guide",[35,37,41,45,49,53],{"title":30,"path":32,"stem":36},"2.vue-guide\u002Findex",{"title":38,"path":39,"stem":40},"PhaserGame","\u002Fvue-guide\u002Fphaser-game","2.vue-guide\u002F1.phaser-game",{"title":42,"path":43,"stem":44},"Scenes","\u002Fvue-guide\u002Fscenes","2.vue-guide\u002F2.scenes",{"title":46,"path":47,"stem":48},"Primitives","\u002Fvue-guide\u002Fprimitives","2.vue-guide\u002F3.primitives",{"title":50,"path":51,"stem":52},"Composables and Bridge","\u002Fvue-guide\u002Fcomposables-and-bridge","2.vue-guide\u002F4.composables-and-bridge",{"title":54,"path":55,"stem":56},"Escape Hatches","\u002Fvue-guide\u002Fescape-hatches","2.vue-guide\u002F5.escape-hatches",{"title":58,"icon":59,"path":60,"stem":61,"children":62},"Nuxt Module","i-lucide-layers-3","\u002Fnuxt-module","3.nuxt-module",[63,65,68,72],{"title":58,"path":60,"stem":64},"3.nuxt-module\u002Findex",{"title":13,"path":66,"stem":67},"\u002Fnuxt-module\u002Finstallation","3.nuxt-module\u002F1.installation",{"title":69,"path":70,"stem":71},"Runtime Defaults","\u002Fnuxt-module\u002Fruntime-defaults","3.nuxt-module\u002F2.runtime-defaults",{"title":73,"path":74,"stem":75},"Client-only Wrapper","\u002Fnuxt-module\u002Fclient-only-wrapper","3.nuxt-module\u002F3.client-only-wrapper",{"title":77,"icon":78,"path":79,"stem":80,"children":81},"Examples","i-lucide-play-square","\u002Fexamples","4.examples",[82,84,88,92,96],{"title":77,"path":79,"stem":83},"4.examples\u002Findex",{"title":85,"path":86,"stem":87},"Minimal","\u002Fexamples\u002Fminimal","4.examples\u002F1.minimal",{"title":89,"path":90,"stem":91},"Imperative Escape Hatch","\u002Fexamples\u002Fimperative-escape-hatch","4.examples\u002F2.imperative-escape-hatch",{"title":93,"path":94,"stem":95},"Multi-scene","\u002Fexamples\u002Fmulti-scene","4.examples\u002F3.multi-scene",{"title":97,"path":98,"stem":99},"Nuxt Playground","\u002Fexamples\u002Fnuxt-playground","4.examples\u002F4.nuxt-playground",{"title":101,"icon":102,"path":103,"stem":104,"children":105},"API Reference","i-lucide-book-open-text","\u002Fapi-reference","5.api-reference",[106,108,112,116,120],{"title":101,"path":103,"stem":107},"5.api-reference\u002Findex",{"title":109,"path":110,"stem":111},"Vue Components","\u002Fapi-reference\u002Fvue-components","5.api-reference\u002F1.vue-components",{"title":113,"path":114,"stem":115},"Composables","\u002Fapi-reference\u002Fcomposables","5.api-reference\u002F2.composables",{"title":117,"path":118,"stem":119},"Types","\u002Fapi-reference\u002Ftypes","5.api-reference\u002F3.types",{"title":121,"path":122,"stem":123},"Nuxt Module Options","\u002Fapi-reference\u002Fnuxt-module-options","5.api-reference\u002F4.nuxt-module-options",{"title":125,"icon":126,"path":127,"stem":128,"children":129},"Guides","i-lucide-compass","\u002Fguides","6.guides",[130,132,136,140,144,148],{"title":125,"path":127,"stem":131},"6.guides\u002Findex",{"title":133,"path":134,"stem":135},"Performance","\u002Fguides\u002Fperformance","6.guides\u002F1.performance",{"title":137,"path":138,"stem":139},"Scene-first Design","\u002Fguides\u002Fscene-first-design","6.guides\u002F2.scene-first-design",{"title":141,"path":142,"stem":143},"Vue Reactivity vs Phaser Imperative Updates","\u002Fguides\u002Fvue-reactivity-vs-phaser-imperative-updates","6.guides\u002F3.vue-reactivity-vs-phaser-imperative-updates",{"title":145,"path":146,"stem":147},"Testing scene primitives in Vue","\u002Fguides\u002Ftesting-scene-primitives-in-vue","6.guides\u002F4.testing-scene-primitives-in-vue",{"title":149,"path":150,"stem":151},"Testing a Phaser canvas in Nuxt","\u002Fguides\u002Ftesting-a-phaser-canvas-in-nuxt","6.guides\u002F5.testing-a-phaser-canvas-in-nuxt",{"title":153,"path":154,"stem":155,"children":156,"icon":158},"Roadmap","\u002Froadmap","7.roadmap\u002Findex",[157],{"title":153,"path":154,"stem":155},"i-lucide-flag",{"id":160,"title":54,"body":161,"description":726,"extension":727,"links":728,"meta":729,"navigation":316,"path":55,"seo":730,"stem":56,"__hash__":731},"docs\u002F2.vue-guide\u002F5.escape-hatches.md",{"type":162,"value":163,"toc":721},"minimark",[164,168,173,244,247,251,258,354,428,432,435,713,717],[165,166,167],"p",{},"The abstraction stays removable. If a primitive or composable is not the right fit, drop back to raw Phaser without fighting the library.",[169,170,172],"h2",{"id":171},"raw-game-and-scene-access","Raw game and scene access",[174,175,181],"pre",{"className":176,"code":177,"filename":178,"language":179,"meta":180,"style":180},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const game = usePhaserGame('demo')\nconst scene = usePhaserScene('main')\n","src\u002Fcomposables\u002FuseRawHandles.ts","ts","",[182,183,184,220],"code",{"__ignoreMap":180},[185,186,189,193,197,201,205,208,211,215,217],"span",{"class":187,"line":188},"line",1,[185,190,192],{"class":191},"spNyl","const",[185,194,196],{"class":195},"sTEyZ"," game ",[185,198,200],{"class":199},"sMK4o","=",[185,202,204],{"class":203},"s2Zo4"," usePhaserGame",[185,206,207],{"class":195},"(",[185,209,210],{"class":199},"'",[185,212,214],{"class":213},"sfazB","demo",[185,216,210],{"class":199},[185,218,219],{"class":195},")\n",[185,221,223,225,228,230,233,235,237,240,242],{"class":187,"line":222},2,[185,224,192],{"class":191},[185,226,227],{"class":195}," scene ",[185,229,200],{"class":199},[185,231,232],{"class":203}," usePhaserScene",[185,234,207],{"class":195},[185,236,210],{"class":199},[185,238,239],{"class":213},"main",[185,241,210],{"class":199},[185,243,219],{"class":195},[165,245,246],{},"Those composables return the underlying Phaser refs. From there, you can access the loader, cameras, tweens, physics systems, or scene plugins directly.",[169,248,250],{"id":249},"object-refs","Object refs",[165,252,253,254,257],{},"Use ",[182,255,256],{},"usePhaserObjectRef()"," or component refs when you need the created object instance.",[174,259,262],{"className":176,"code":260,"filename":261,"language":179,"meta":180,"style":180},"import { usePhaserObjectRef } from '@onmax\u002Fphaser-vue'\nimport type Phaser from 'phaser'\n\nconst player = usePhaserObjectRef\u003CPhaser.GameObjects.Sprite>()\n","src\u002Fcomposables\u002FusePlayerRef.ts",[182,263,264,291,311,318],{"__ignoreMap":180},[185,265,266,270,273,276,279,282,285,288],{"class":187,"line":188},[185,267,269],{"class":268},"s7zQu","import",[185,271,272],{"class":199}," {",[185,274,275],{"class":195}," usePhaserObjectRef",[185,277,278],{"class":199}," }",[185,280,281],{"class":268}," from",[185,283,284],{"class":199}," '",[185,286,287],{"class":213},"@onmax\u002Fphaser-vue",[185,289,290],{"class":199},"'\n",[185,292,293,295,298,301,304,306,309],{"class":187,"line":222},[185,294,269],{"class":268},[185,296,297],{"class":268}," type",[185,299,300],{"class":195}," Phaser ",[185,302,303],{"class":268},"from",[185,305,284],{"class":199},[185,307,308],{"class":213},"phaser",[185,310,290],{"class":199},[185,312,314],{"class":187,"line":313},3,[185,315,317],{"emptyLinePlaceholder":316},true,"\n",[185,319,321,323,326,328,330,333,337,340,343,345,348,351],{"class":187,"line":320},4,[185,322,192],{"class":191},[185,324,325],{"class":195}," player ",[185,327,200],{"class":199},[185,329,275],{"class":203},[185,331,332],{"class":199},"\u003C",[185,334,336],{"class":335},"sBMFI","Phaser",[185,338,339],{"class":199},".",[185,341,342],{"class":335},"GameObjects",[185,344,339],{"class":199},[185,346,347],{"class":335},"Sprite",[185,349,350],{"class":199},">",[185,352,353],{"class":195},"()\n",[174,355,360],{"className":356,"code":357,"filename":358,"language":359,"meta":180,"style":180},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CPhaserSprite ref=\"playerSprite\" texture=\"player\" :x=\"120\" :y=\"220\" \u002F>\n","src\u002FApp.vue","vue",[182,361,362],{"__ignoreMap":180},[185,363,364,366,370,373,375,378,381,383,386,388,390,393,395,398,401,403,405,409,411,413,416,418,420,423,425],{"class":187,"line":188},[185,365,332],{"class":199},[185,367,369],{"class":368},"swJcz","PhaserSprite",[185,371,372],{"class":191}," ref",[185,374,200],{"class":199},[185,376,377],{"class":199},"\"",[185,379,380],{"class":213},"playerSprite",[185,382,377],{"class":199},[185,384,385],{"class":191}," texture",[185,387,200],{"class":199},[185,389,377],{"class":199},[185,391,392],{"class":213},"player",[185,394,377],{"class":199},[185,396,397],{"class":199}," :",[185,399,400],{"class":191},"x",[185,402,200],{"class":199},[185,404,377],{"class":199},[185,406,408],{"class":407},"sbssI","120",[185,410,377],{"class":199},[185,412,397],{"class":199},[185,414,415],{"class":191},"y",[185,417,200],{"class":199},[185,419,377],{"class":199},[185,421,422],{"class":407},"220",[185,424,377],{"class":199},[185,426,427],{"class":199}," \u002F>\n",[169,429,431],{"id":430},"imperative-scene-code","Imperative scene code",[165,433,434],{},"Keep per-frame work in the scene itself when that is the honest model.",[174,436,439],{"className":176,"code":437,"filename":438,"language":179,"meta":180,"style":180},"export const runnerScene = definePhaserScene({\n  key: 'runner',\n  create({ scene }) {\n    const orb = scene.add.image(160, 180, 'orb').setScale(0.35)\n    let velocity = 80\n\n    scene.events.on('update', (_time, delta) => {\n      orb.x += velocity * (delta \u002F 1000)\n      if (orb.x > 840)\n        orb.x = -40\n    })\n  },\n})\n","src\u002Fgame\u002Frunner-scene.ts",[182,440,441,462,480,498,556,570,575,620,651,673,691,699,705],{"__ignoreMap":180},[185,442,443,446,449,452,454,457,459],{"class":187,"line":188},[185,444,445],{"class":268},"export",[185,447,448],{"class":191}," const",[185,450,451],{"class":195}," runnerScene ",[185,453,200],{"class":199},[185,455,456],{"class":203}," definePhaserScene",[185,458,207],{"class":195},[185,460,461],{"class":199},"{\n",[185,463,464,467,470,472,475,477],{"class":187,"line":222},[185,465,466],{"class":368},"  key",[185,468,469],{"class":199},":",[185,471,284],{"class":199},[185,473,474],{"class":213},"runner",[185,476,210],{"class":199},[185,478,479],{"class":199},",\n",[185,481,482,485,488,492,495],{"class":187,"line":313},[185,483,484],{"class":368},"  create",[185,486,487],{"class":199},"({",[185,489,491],{"class":490},"sHdIc"," scene",[185,493,494],{"class":199}," })",[185,496,497],{"class":199}," {\n",[185,499,500,503,506,509,511,513,516,518,521,523,526,529,532,534,536,539,541,544,546,549,551,554],{"class":187,"line":320},[185,501,502],{"class":191},"    const",[185,504,505],{"class":195}," orb",[185,507,508],{"class":199}," =",[185,510,491],{"class":195},[185,512,339],{"class":199},[185,514,515],{"class":195},"add",[185,517,339],{"class":199},[185,519,520],{"class":203},"image",[185,522,207],{"class":368},[185,524,525],{"class":407},"160",[185,527,528],{"class":199},",",[185,530,531],{"class":407}," 180",[185,533,528],{"class":199},[185,535,284],{"class":199},[185,537,538],{"class":213},"orb",[185,540,210],{"class":199},[185,542,543],{"class":368},")",[185,545,339],{"class":199},[185,547,548],{"class":203},"setScale",[185,550,207],{"class":368},[185,552,553],{"class":407},"0.35",[185,555,219],{"class":368},[185,557,559,562,565,567],{"class":187,"line":558},5,[185,560,561],{"class":191},"    let",[185,563,564],{"class":195}," velocity",[185,566,508],{"class":199},[185,568,569],{"class":407}," 80\n",[185,571,573],{"class":187,"line":572},6,[185,574,317],{"emptyLinePlaceholder":316},[185,576,578,581,583,586,588,591,593,595,598,600,602,605,608,610,613,615,618],{"class":187,"line":577},7,[185,579,580],{"class":195},"    scene",[185,582,339],{"class":199},[185,584,585],{"class":195},"events",[185,587,339],{"class":199},[185,589,590],{"class":203},"on",[185,592,207],{"class":368},[185,594,210],{"class":199},[185,596,597],{"class":213},"update",[185,599,210],{"class":199},[185,601,528],{"class":199},[185,603,604],{"class":199}," (",[185,606,607],{"class":490},"_time",[185,609,528],{"class":199},[185,611,612],{"class":490}," delta",[185,614,543],{"class":199},[185,616,617],{"class":191}," =>",[185,619,497],{"class":199},[185,621,623,626,628,630,633,635,638,640,643,646,649],{"class":187,"line":622},8,[185,624,625],{"class":195},"      orb",[185,627,339],{"class":199},[185,629,400],{"class":195},[185,631,632],{"class":199}," +=",[185,634,564],{"class":195},[185,636,637],{"class":199}," *",[185,639,604],{"class":368},[185,641,642],{"class":195},"delta",[185,644,645],{"class":199}," \u002F",[185,647,648],{"class":407}," 1000",[185,650,219],{"class":368},[185,652,654,657,659,661,663,665,668,671],{"class":187,"line":653},9,[185,655,656],{"class":268},"      if",[185,658,604],{"class":368},[185,660,538],{"class":195},[185,662,339],{"class":199},[185,664,400],{"class":195},[185,666,667],{"class":199}," >",[185,669,670],{"class":407}," 840",[185,672,219],{"class":368},[185,674,676,679,681,683,685,688],{"class":187,"line":675},10,[185,677,678],{"class":195},"        orb",[185,680,339],{"class":199},[185,682,400],{"class":195},[185,684,508],{"class":199},[185,686,687],{"class":199}," -",[185,689,690],{"class":407},"40\n",[185,692,694,697],{"class":187,"line":693},11,[185,695,696],{"class":199},"    }",[185,698,219],{"class":368},[185,700,702],{"class":187,"line":701},12,[185,703,704],{"class":199},"  },\n",[185,706,708,711],{"class":187,"line":707},13,[185,709,710],{"class":199},"}",[185,712,219],{"class":195},[714,715,716],"important",{},"If the code reads more clearly in raw Phaser, keep it in raw Phaser. The library should reduce boilerplate, not force a declarative style where it hurts.",[718,719,720],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":180,"searchDepth":222,"depth":222,"links":722},[723,724,725],{"id":171,"depth":222,"text":172},{"id":249,"depth":222,"text":250},{"id":430,"depth":222,"text":431},"Reach raw game, scene, and object instances whenever the abstraction stops helping.","md",null,{},{"title":54,"description":726},"GwiMlIYlAMJmreot_k2FgJfY6L-EfZX7zoWwc0YnaCI",[733,735],{"title":50,"path":51,"stem":52,"description":734,"children":-1},"Reach the current game or scene, subscribe to low-frequency state, and connect DOM UI to Phaser through typed events.",{"title":58,"path":60,"stem":64,"description":736,"children":-1},"Configure @onmax\u002Fnuxt-phaser without duplicating the shared runtime contract from @onmax\u002Fphaser-vue.",1777965860915]