[{"data":1,"prerenderedAt":544},["ShallowReactive",2],{"navigation":3,"-getting-started-routing":325,"-getting-started-routing-surround":541},[4,79,198,295],{"title":5,"path":6,"stem":7,"children":8,"icon":77,"header":78},"Getting Started","\u002Fgetting-started","1.getting-started\u002F01.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","lucide:info",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F02.installation","lucide:play",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F03.configuration","lucide:cog",{"title":23,"path":24,"stem":25,"icon":26},"Views","\u002Fgetting-started\u002Fviews","1.getting-started\u002F04.views","lucide:panels-top-left",{"title":28,"path":29,"stem":30,"icon":31},"Assets","\u002Fgetting-started\u002Fassets","1.getting-started\u002F05.assets","lucide:image",{"title":33,"path":34,"stem":35,"icon":36},"Styling","\u002Fgetting-started\u002Fstyling","1.getting-started\u002F06.styling","lucide:palette",{"title":38,"path":39,"stem":40,"icon":41},"Routing","\u002Fgetting-started\u002Frouting","1.getting-started\u002F07.routing","lucide:milestone",{"title":43,"path":44,"stem":45,"icon":46},"Data Loading","\u002Fgetting-started\u002Fdata-loading","1.getting-started\u002F08.data-loading","lucide:cable",{"title":48,"path":49,"stem":50,"icon":51},"Actions","\u002Fgetting-started\u002Factions","1.getting-started\u002F09.actions","lucide:mouse",{"title":53,"path":54,"stem":55,"icon":56},"Pending UI","\u002Fgetting-started\u002Fpending-ui","1.getting-started\u002F10.pending-ui","lucide:loader",{"title":58,"path":59,"stem":60,"icon":61},"SEO and Meta","\u002Fgetting-started\u002Fseo-meta","1.getting-started\u002F11.seo-meta","lucide:file-search-corner",{"title":63,"path":64,"stem":65,"icon":66},"State Management","\u002Fgetting-started\u002Fstate-management","1.getting-started\u002F12.state-management","lucide:database",{"title":68,"path":69,"stem":70,"icon":71},"Transitions","\u002Fgetting-started\u002Ftransitions","1.getting-started\u002F13.transitions","lucide:toggle-right",{"title":73,"path":74,"stem":75,"icon":76},"Error Handling","\u002Fgetting-started\u002Ferror-handling","1.getting-started\u002F14.error-handling","lucide:bug-off","lucide:rocket",true,{"title":80,"icon":81,"path":82,"stem":83,"children":84,"page":149},"Structure","lucide:folder-open","\u002Fdirectory-structure\u002Fhorn","2.directory-structure",[85,89,94,150,155,160,174,179,184,188,193],{"title":86,"path":82,"stem":87,"icon":88},".vuloom","2.directory-structure\u002F01.horn","vscode-icons:folder-type-temp",{"title":90,"path":91,"stem":92,"icon":93},".output","\u002Fdirectory-structure\u002Foutput","2.directory-structure\u002F02.output","vscode-icons:folder-type-package",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":149},"app","vscode-icons:folder-type-app","\u002Fdirectory-structure\u002Fapp","2.directory-structure\u002F03.app",[100,105,110,115,120,125,130,135,140,144],{"title":101,"path":102,"stem":103,"icon":104},"assets","\u002Fdirectory-structure\u002Fapp\u002Fassets","2.directory-structure\u002F03.app\u002F01.assets","vscode-icons:folder-type-asset",{"title":106,"path":107,"stem":108,"icon":109},"components","\u002Fdirectory-structure\u002Fapp\u002Fcomponents","2.directory-structure\u002F03.app\u002F02.components","vscode-icons:folder-type-component",{"title":111,"path":112,"stem":113,"icon":114},"composables","\u002Fdirectory-structure\u002Fapp\u002Fcomposables","2.directory-structure\u002F03.app\u002F03.composables","vscode-icons:folder-type-src",{"title":116,"path":117,"stem":118,"icon":119},"middleware","\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","2.directory-structure\u002F03.app\u002F04.middleware","vscode-icons:folder-type-middleware",{"title":121,"path":122,"stem":123,"icon":124},"pages","\u002Fdirectory-structure\u002Fapp\u002Fpages","2.directory-structure\u002F03.app\u002F05.pages","vscode-icons:folder-type-view",{"title":126,"path":127,"stem":128,"icon":129},"utils","\u002Fdirectory-structure\u002Fapp\u002Futils","2.directory-structure\u002F03.app\u002F06.utils","vscode-icons:folder-type-tools",{"title":131,"path":132,"stem":133,"icon":134},"app.vue","\u002Fdirectory-structure\u002Fapp\u002Fapp","2.directory-structure\u002F03.app\u002F07.app","vscode-icons:file-type-vue",{"title":136,"path":137,"stem":138,"icon":139},"app.config.ts","\u002Fdirectory-structure\u002Fapp\u002Fapp-config","2.directory-structure\u002F03.app\u002F08.app-config","vscode-icons:file-type-light-config",{"title":141,"path":142,"stem":143,"icon":134},"error.vue","\u002Fdirectory-structure\u002Fapp\u002Ferror","2.directory-structure\u002F03.app\u002F09.error",{"title":145,"path":146,"stem":147,"icon":148},"loader.ts","\u002Fdirectory-structure\u002Fapp\u002Floader","2.directory-structure\u002F03.app\u002F10.loader","vscode-icons:file-type-typescript",false,{"title":151,"path":152,"stem":153,"icon":154},"node_modules","\u002Fdirectory-structure\u002Fnode_modules","2.directory-structure\u002F04.node_modules","vscode-icons:folder-type-node",{"title":156,"path":157,"stem":158,"icon":159},"public","\u002Fdirectory-structure\u002Fpublic","2.directory-structure\u002F05.public","vscode-icons:folder-type-public",{"title":161,"icon":162,"path":163,"stem":164,"children":165,"page":149},"server","vscode-icons:folder-type-server","\u002Fdirectory-structure\u002Fserver","2.directory-structure\u002F06.server",[166,169],{"title":116,"path":167,"stem":168,"icon":119},"\u002Fdirectory-structure\u002Fserver\u002Fmiddleware","2.directory-structure\u002F06.server\u002F01.middleware",{"title":170,"path":171,"stem":172,"icon":173},"routes","\u002Fdirectory-structure\u002Fserver\u002Froutes","2.directory-structure\u002F06.server\u002F02.routes","vscode-icons:folder-type-route",{"title":175,"path":176,"stem":177,"icon":178},".env","\u002Fdirectory-structure\u002Fenv","2.directory-structure\u002F07.env","vscode-icons:file-type-dotenv",{"title":180,"path":181,"stem":182,"icon":183},".gitignore","\u002Fdirectory-structure\u002Fgitignore","2.directory-structure\u002F08.gitignore","vscode-icons:file-type-git",{"title":185,"path":186,"stem":187,"icon":139},"vuloom.config.ts","\u002Fdirectory-structure\u002Fhorn-config","2.directory-structure\u002F09.horn-config",{"title":189,"path":190,"stem":191,"icon":192},"package.json","\u002Fdirectory-structure\u002Fpackage","2.directory-structure\u002F10.package","vscode-icons:file-type-npm",{"title":194,"path":195,"stem":196,"icon":197},"tsconfig.json","\u002Fdirectory-structure\u002Ftsconfig","2.directory-structure\u002F11.tsconfig","vscode-icons:file-type-tsconfig",{"title":199,"icon":200,"header":78,"path":201,"stem":202,"children":203,"page":149},"API","lucide:code-xml","\u002Fapi\u002Fcomponents\u002Fclient-only","3.api",[204,224,269,290],{"title":205,"icon":206,"path":207,"stem":208,"children":209,"page":149},"Components","lucide:box","\u002Fapi\u002Fcomponents","3.api\u002F01.components",[210,214,219],{"title":211,"path":201,"stem":212,"icon":213},"ClientOnly","3.api\u002F01.components\u002F01.client-only","lucide:monitor",{"title":215,"path":216,"stem":217,"icon":218},"DevOnly","\u002Fapi\u002Fcomponents\u002Fdev-only","3.api\u002F01.components\u002F02.dev-only","lucide:wrench",{"title":220,"path":221,"stem":222,"icon":223},"RouterLink","\u002Fapi\u002Fcomponents\u002Flink","3.api\u002F01.components\u002F03.link","lucide:link",{"title":225,"icon":226,"path":227,"stem":228,"children":229,"page":149},"Composables","lucide:arrow-left-right","\u002Fapi\u002Fcomposables","3.api\u002F02.composables",[230,235,240,245,250,255,260,265],{"title":231,"path":232,"stem":233,"icon":234},"useAppData","\u002Fapi\u002Fcomposables\u002Fuse-app-data","3.api\u002F02.composables\u002F01.use-app-data","lucide:app-window",{"title":236,"path":237,"stem":238,"icon":239},"useLoaderData","\u002Fapi\u002Fcomposables\u002Fuse-loader-data","3.api\u002F02.composables\u002F02.use-loader-data","lucide:database-zap",{"title":241,"path":242,"stem":243,"icon":244},"useActionData","\u002Fapi\u002Fcomposables\u002Fuse-action-data","3.api\u002F02.composables\u002F03.use-action-data","lucide:send",{"title":246,"path":247,"stem":248,"icon":249},"useRoute","\u002Fapi\u002Fcomposables\u002Fuse-route","3.api\u002F02.composables\u002F04.use-route","lucide:route",{"title":251,"path":252,"stem":253,"icon":254},"useRouter","\u002Fapi\u002Fcomposables\u002Fuse-router","3.api\u002F02.composables\u002F05.use-router","lucide:navigation",{"title":256,"path":257,"stem":258,"icon":259},"useNavigation","\u002Fapi\u002Fcomposables\u002Fuse-navigation","3.api\u002F02.composables\u002F06.use-navigation","lucide:loader-circle",{"title":261,"path":262,"stem":263,"icon":264},"useHead","\u002Fapi\u002Fcomposables\u002Fuse-head","3.api\u002F02.composables\u002F07.use-head","lucide:file-search",{"title":266,"path":267,"stem":268,"icon":66},"useState","\u002Fapi\u002Fcomposables\u002Fuse-state","3.api\u002F02.composables\u002F08.use-state",{"title":270,"icon":271,"path":272,"stem":273,"children":274,"page":149},"Utils","lucide:square-function","\u002Fapi\u002Futils","3.api\u002F03.utils",[275,280,285],{"title":276,"path":277,"stem":278,"icon":279},"Response Helpers","\u002Fapi\u002Futils\u002Fresponses","3.api\u002F03.utils\u002F01.responses","lucide:reply",{"title":281,"path":282,"stem":283,"icon":284},"Loaders and Actions","\u002Fapi\u002Futils\u002Floaders-and-actions","3.api\u002F03.utils\u002F02.loaders-and-actions","lucide:workflow",{"title":286,"path":287,"stem":288,"icon":289},"Route Definitions","\u002Fapi\u002Futils\u002Froute-definition","3.api\u002F03.utils\u002F03.route-definition","lucide:file-code",{"title":291,"path":292,"stem":293,"icon":294},"Commands","\u002Fapi\u002Fcommands","3.api\u002F04.commands","lucide:square-terminal",{"title":296,"icon":297,"header":78,"path":298,"stem":299,"children":300,"page":149},"Community","lucide:messages-square","\u002Fcommunity\u002Fgetting-help","4.community",[301,305,310,315,320],{"title":302,"path":298,"stem":303,"icon":304},"Getting Help","4.community\u002F01.getting-help","lucide:life-buoy",{"title":306,"path":307,"stem":308,"icon":309},"Reporting Bugs","\u002Fcommunity\u002Freporting-bugs","4.community\u002F02.reporting-bugs","lucide:bug",{"title":311,"path":312,"stem":313,"icon":314},"Contribution","\u002Fcommunity\u002Fcontribution","4.community\u002F03.contribution","lucide:git-pull-request",{"title":316,"path":317,"stem":318,"icon":319},"Framework Contribution","\u002Fcommunity\u002Fframework-contribution","4.community\u002F04.framework-contribution","lucide:github",{"title":321,"path":322,"stem":323,"icon":324},"Releases","\u002Fcommunity\u002Freleases","4.community\u002F05.releases","lucide:bell-dot",{"id":326,"title":38,"body":327,"description":407,"extension":536,"meta":537,"navigation":538,"path":39,"seo":539,"stem":40,"__hash__":540},"content\u002F1.getting-started\u002F07.routing.md",{"type":328,"value":329,"toc":530,"icon":41},"minimark",[330,339,344,393,397,400,410,413,419,422,428,432,439,502,512,516,526],[331,332,333,334,338],"p",{},"Page routes live under ",[335,336,337],"code",{},"app\u002Fpages\u002F",".",[340,341,343],"h2",{"id":342},"core-conventions","Core conventions",[345,346,347,354,360,366,372,378,384],"ul",{},[348,349,350,353],"li",{},[335,351,352],{},"layout.*"," creates a layout route",[348,355,356,359],{},[335,357,358],{},"page.*"," creates a page route",[348,361,362,365],{},[335,363,364],{},"error.*"," creates a route error boundary",[348,367,368,371],{},[335,369,370],{},"loading.*"," creates a client navigation loading boundary",[348,373,374,377],{},[335,375,376],{},"middleware.ts"," adds middleware for the current route",[348,379,380,383],{},[335,381,382],{},"index\u002F"," is used for a directory's own index route when that directory also has child routes",[348,385,386,387,389,390,392],{},"a non-",[335,388,382],{}," directory-level ",[335,391,376],{}," applies to that directory subtree",[340,394,396],{"id":395},"dynamic-routes","Dynamic routes",[331,398,399],{},"Use square brackets for params:",[401,402,408],"pre",{"className":403,"code":405,"language":406,"meta":407},[404],"language-text","app\u002Fpages\u002Fblog\u002F[slug]\u002Fpage.ts\n","text","",[335,409,405],{"__ignoreMap":407},[331,411,412],{},"Use catch-all routes for the rest pattern:",[401,414,417],{"className":415,"code":416,"language":406,"meta":407},[404],"app\u002Fpages\u002Fdocs\u002F[...all]\u002Fpage.ts\n",[335,418,416],{"__ignoreMap":407},[331,420,421],{},"Use route groups to organize files without affecting the URL:",[401,423,426],{"className":424,"code":425,"language":406,"meta":407},[404],"app\u002Fpages\u002F(marketing)\u002Fabout\u002Fpage.vue\n",[335,427,425],{"__ignoreMap":407},[340,429,431],{"id":430},"typed-navigation","Typed navigation",[331,433,434,435,438],{},"After ",[335,436,437],{},"vuloom prepare",", route ids and params are available to TypeScript.",[401,440,444],{"className":441,"code":442,"language":443,"meta":407,"style":407},"language-ts shiki shiki-themes github-light github-dark github-dark","router.push({\n  routeId: 'blog\u002F[slug]\u002Fpage',\n  params: {\n    slug: 'hello-world'\n  }\n})\n","ts",[335,445,446,462,475,481,490,496],{"__ignoreMap":407},[447,448,451,455,459],"span",{"class":449,"line":450},"line",1,[447,452,454],{"class":453},"slsVL","router.",[447,456,458],{"class":457},"shcOC","push",[447,460,461],{"class":453},"({\n",[447,463,465,468,472],{"class":449,"line":464},2,[447,466,467],{"class":453},"  routeId: ",[447,469,471],{"class":470},"sfrk1","'blog\u002F[slug]\u002Fpage'",[447,473,474],{"class":453},",\n",[447,476,478],{"class":449,"line":477},3,[447,479,480],{"class":453},"  params: {\n",[447,482,484,487],{"class":449,"line":483},4,[447,485,486],{"class":453},"    slug: ",[447,488,489],{"class":470},"'hello-world'\n",[447,491,493],{"class":449,"line":492},5,[447,494,495],{"class":453},"  }\n",[447,497,499],{"class":449,"line":498},6,[447,500,501],{"class":453},"})\n",[331,503,504,507,508,511],{},[335,505,506],{},"\u003CRouterLink>"," supports string targets today. Typed object navigation is generated into the route types, but this docs set should not assume a separate ",[335,509,510],{},"Link"," component exists yet.",[340,513,515],{"id":514},"path-ownership","Path ownership",[331,517,518,521,522,525],{},[335,519,520],{},"app\u002Fpages"," owns page paths. ",[335,523,524],{},"server\u002Froutes"," cannot overlap with the same path pattern, even if methods differ.",[527,528,529],"style",{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}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":407,"searchDepth":464,"depth":464,"links":531},[532,533,534,535],{"id":342,"depth":464,"text":343},{"id":395,"depth":464,"text":396},{"id":430,"depth":464,"text":431},{"id":514,"depth":464,"text":515},"md",{"icon":41},{"icon":41},{"title":38,"description":407},"Q9Arl02xbT1K5Y7ssDLvKxFLdoPD1pfw0smSiTwwmtY",[542,543],{"title":33,"path":34,"stem":35,"description":407,"icon":36,"children":-1},{"title":43,"path":44,"stem":45,"description":407,"icon":46,"children":-1},1777022953780]