[{"data":1,"prerenderedAt":589},["ShallowReactive",2],{"navigation_docs":3,"landing":159},[4,29,57,76,100,124,152],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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":161,"body":162,"description":581,"extension":582,"meta":583,"navigation":584,"path":585,"seo":586,"stem":587,"__hash__":588},"landing\u002Findex.md","phaser-vue",{"type":163,"value":164,"toc":578},"minimark",[165,260,312,362,455,540,554,574],[166,167,170,179,182,203],"u-page-hero",{"className":168},[169],"hero-glow",[171,172,174,175,178],"template",{"v-slot:title":173},"","Phaser for Vue and Nuxt, ",[176,177],"br",{}," without hiding Phaser",[171,180,181],{"v-slot:description":173},"Build Phaser games with Vue orchestration, typed scene wiring, and explicit escape hatches. Use the Vue package directly or add the Nuxt wrapper on top.",[171,183,184,190,198],{"v-slot:links":173},[185,186],"u-button",{"label":187,"size":188,"to":7,"trailing-icon":189},"Get started","xl","i-lucide-arrow-right",[185,191],{"label":192,"size":188,"to":193,"trailing-icon":194,"color":195,"variant":196,"target":197},"Live demo","https:\u002F\u002Fphaser-vue-playground.vercel.app","i-lucide-monitor-play","neutral","outline","_blank",[185,199],{"label":200,"size":188,"to":201,"trailing-icon":202,"color":195,"variant":196,"target":197},"View on GitHub","https:\u002F\u002Fgithub.com\u002Fonmax\u002Fphaser-vue","i-simple-icons-github",[171,204,205],{"v-slot:body":173},[206,207,212,241],"code-group",{"className":208},[209,210,211],"landing-install-command","max-w-lg","mx-auto",[213,214,219],"pre",{"className":215,"code":216,"filename":217,"language":218,"meta":173,"style":173},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @onmax\u002Fphaser-vue phaser\n","Vue","bash",[220,221,222],"code",{"__ignoreMap":173},[223,224,227,231,235,238],"span",{"class":225,"line":226},"line",1,[223,228,230],{"class":229},"sBMFI","pnpm",[223,232,234],{"class":233},"sfazB"," add",[223,236,237],{"class":233}," @onmax\u002Fphaser-vue",[223,239,240],{"class":233}," phaser\n",[213,242,245],{"className":215,"code":243,"filename":244,"language":218,"meta":173,"style":173},"pnpm add @onmax\u002Fnuxt-phaser @onmax\u002Fphaser-vue phaser\n","Nuxt",[220,246,247],{"__ignoreMap":173},[223,248,249,251,253,256,258],{"class":225,"line":226},[223,250,230],{"class":229},[223,252,234],{"class":233},[223,254,255],{"class":233}," @onmax\u002Fnuxt-phaser",[223,257,237],{"class":233},[223,259,240],{"class":233},[261,262,264,267],"u-page-section",{"orientation":263},"vertical",[171,265,266],{"v-slot:title":173},"Start with the path that matches your job",[171,268,269,273],{"v-slot:description":173},[270,271,272],"p",{},"Pick one route first. You do not need the full docs site to get a first working game.",[274,275,282,292,302],"u-page-grid",{"className":276},[277,211,278,279,280,281],"max-w-5xl","!grid-cols-1","sm:!grid-cols-2","lg:!grid-cols-3","!gap-4",[283,284,286,289],"u-page-card",{"icon":6,":spotlight":285,"to":7},"true",[171,287,288],{"v-slot:title":173},"Get to first success",[171,290,291],{"v-slot:description":173},"Install the package, mount one game, and verify the client-only contract.",[283,293,296,299],{"icon":294,":spotlight":285,"to":295},"i-simple-icons-vuedotjs","\u002Fvue",[171,297,298],{"v-slot:title":173},"Build in Vue",[171,300,301],{"v-slot:description":173},"Learn the shared runtime, scene lifecycle, bridge APIs, primitives, and escape hatches.",[283,303,306,309],{"icon":304,":spotlight":285,"to":305},"i-simple-icons-nuxtdotjs","\u002Fnuxt",[171,307,308],{"v-slot:title":173},"Build in Nuxt",[171,310,311],{"v-slot:description":173},"Install the module, configure runtime defaults, and keep Phaser explicitly client-only.",[261,313,314,317],{"orientation":263},[171,315,316],{"v-slot:title":173},"Choose your track",[171,318,319,322],{"v-slot:description":173},[270,320,321],{},"The same hybrid runtime powers both packages. Pick the wrapper that matches your app.",[274,323,327,346],{"className":324},[325,211,278,279,326],"max-w-3xl","!gap-6",[283,328,329,332],{"icon":294,":spotlight":285,"to":295},[171,330,331],{"v-slot:title":173},"Vue package",[171,333,334,335,338,339,341,342,345],{"v-slot:description":173},"Install ",[220,336,337],{},"@onmax\u002Fphaser-vue"," in any Vue 3 app. Use ",[220,340,38],{},", ",[220,343,344],{},"PhaserScene",", composables, and primitives directly.",[283,347,348,351],{"icon":304,":spotlight":285,"to":305},[171,349,350],{"v-slot:title":173},"Nuxt module",[171,352,353,354,357,358,361],{"v-slot:description":173},"Add ",[220,355,356],{},"@onmax\u002Fnuxt-phaser"," for auto-imports, ",[220,359,360],{},"#phaser",", client-only mounting, and runtime defaults.",[261,363,364,367],{"orientation":263},[171,365,366],{"v-slot:title":173},"Built for a hybrid workflow",[171,368,369,372],{"v-slot:description":173},[270,370,371],{},"Vue handles setup, UI, and low-frequency state. Phaser stays in charge of scenes, display objects, and hot-path runtime behavior.",[274,373,375,390,405,421,430,439],{"className":374},[277,211,278,279,280,281],[283,376,378,383],{"icon":377},"i-lucide-layout-template",[171,379,380,382],{"v-slot:title":173},[220,381,38],{}," host",[171,384,385,386,389],{"v-slot:description":173},"One component owns ",[220,387,388],{},"Phaser.Game",", merges defaults, mounts safely on the client, and cleans up on unmount.",[283,391,392,395],{"icon":59},[171,393,394],{"v-slot:title":173},"Scene-first API",[171,396,397,398,401,402,404],{"v-slot:description":173},"Register managed scenes with ",[220,399,400],{},"definePhaserScene"," and ",[220,403,344],{}," without replacing Phaser's own scene model.",[283,406,408,411],{"icon":407},"i-lucide-waypoints",[171,409,410],{"v-slot:title":173},"Typed bridge",[171,412,413,414,401,417,420],{"v-slot:description":173},"Connect Vue UI and Phaser scenes with ",[220,415,416],{},"createPhaserBridge",[220,418,419],{},"usePhaserBridge",", scoped per game instance.",[283,422,424,427],{"icon":423},"i-lucide-box",[171,425,426],{"v-slot:title":173},"Small primitive layer",[171,428,429],{"v-slot:description":173},"Create images, sprites, text, and containers declaratively without pretending Vue should reconcile the whole game tree.",[283,431,433,436],{"icon":432},"i-lucide-shield-check",[171,434,435],{"v-slot:title":173},"SSR-safe mounting",[171,437,438],{"v-slot:description":173},"Phaser only boots on mount. The Nuxt wrapper keeps that client-only boundary explicit.",[283,440,442,445],{"icon":441},"i-lucide-zap",[171,443,444],{"v-slot:title":173},"Escape hatches",[171,446,447,448,341,451,454],{"v-slot:description":173},"Grab ",[220,449,450],{},"game",[220,452,453],{},"scene",", and raw Phaser objects at any point. The abstraction stays removable.",[261,456,459,462],{"orientation":263,"className":457},[458],"landing-section-alt",[171,460,461],{"v-slot:title":173},"What the Nuxt module adds",[171,463,464,467],{"v-slot:description":173},[270,465,466],{},"The Nuxt layer stays thin. It improves ergonomics without duplicating the core runtime.",[274,468,471,482,496,517],{"className":469},[470,211,278,279,281],"max-w-4xl",[283,472,474,479],{"icon":473},"i-lucide-hash",[171,475,476,478],{"v-slot:title":173},[220,477,360],{}," alias",[171,480,481],{"v-slot:description":173},"Import shared runtime APIs through a Nuxt alias when you want one source of truth in app code.",[283,483,485,488],{"icon":484},"i-lucide-download",[171,486,487],{"v-slot:title":173},"Auto-imports",[171,489,490,491,341,493,495],{"v-slot:description":173},"Register the composables you actually use, including ",[220,492,400],{},[220,494,419],{},", and scene helpers.",[283,497,498,503],{"icon":194},[171,499,500],{"v-slot:title":173},[220,501,502],{},"NuxtPhaserGame",[171,504,505,506,508,509,512,513,516],{"v-slot:description":173},"Wrap ",[220,507,38],{}," in ",[220,510,511],{},"ClientOnly"," when ",[220,514,515],{},"clientOnly"," stays enabled, and keep the mounting contract clear.",[283,518,520,523],{"icon":519},"i-lucide-settings-2",[171,521,522],{"v-slot:title":173},"Runtime defaults",[171,524,525,526,341,529,341,532,535,536,539],{"v-slot:description":173},"Set defaults for ",[220,527,528],{},"pixelArt",[220,530,531],{},"transparent",[220,533,534],{},"suspendWhenHidden",", and ",[220,537,538],{},"assetsBaseUrl"," in one Nuxt module config block.",[261,541,542,545,548],{"orientation":263},[171,543,544],{"v-slot:title":173},"Try the demo",[171,546,547],{"v-slot:description":173},"Open the live Nuxt playground to see the bridge, scene wiring, and client-only host running together before you adopt the package in your own app.",[171,549,550],{"v-slot:links":173},[185,551],{"label":552,"size":188,"to":193,"trailing-icon":553,"target":197},"Open playground","i-lucide-arrow-up-right",[261,555,556,559,562],{"orientation":263},[171,557,558],{"v-slot:title":173},"Start with the docs that match your next step",[171,560,561],{"v-slot:description":173},"Use the getting-started pages for the happy path, then switch to the runtime-specific guides or reference pages when you need depth.",[171,563,564,566,569,571],{"v-slot:links":173},[185,565],{"label":13,"size":188,"to":7,"trailing-icon":189},[185,567],{"label":568,"size":188,"to":32,"trailing-icon":189,"color":195,"variant":196},"Vue guide",[185,570],{"label":350,"size":188,"to":60,"trailing-icon":189,"color":195,"variant":196},[185,572],{"label":573,"size":188,"to":103,"trailing-icon":189,"color":195,"variant":196},"API reference",[575,576,577],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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);}",{"title":173,"searchDepth":579,"depth":579,"links":580},2,[],"Hybrid Phaser primitives for Vue and Nuxt. Scene-first APIs, typed bridges, SSR-safe mounting, and direct escape hatches.","md",{},false,"\u002F",{"title":161,"description":581},"index","hutO5EOe8hQagulX3v-5iGYf5UTrh3wVOmRNOjD3UI0",1777965857947]