[{"data":1,"prerenderedAt":545},["ShallowReactive",2],{"navigation":3,"-getting-started-actions":325,"-getting-started-actions-surround":542},[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":48,"body":327,"description":348,"extension":537,"meta":538,"navigation":539,"path":49,"seo":540,"stem":50,"__hash__":541},"content\u002F1.getting-started\u002F09.actions.md",{"type":328,"value":329,"toc":533,"icon":51},"minimark",[330,339,342,492,497,500,522,526,529],[331,332,333,334,338],"p",{},"Use ",[335,336,337],"code",{},"app\u002Fpages\u002F**\u002Faction.ts"," for mutating requests.",[331,340,341],{},"Actions are the server-side counterpart to route loaders.",[343,344,349],"pre",{"className":345,"code":346,"language":347,"meta":348,"style":348},"language-ts shiki shiki-themes github-light github-dark github-dark","export async function action({ formData }: { formData: FormData }) {\n  const title = formData.get('title')\n\n  if (!title) {\n    return { ok: false }\n  }\n\n  return { ok: true }\n}\n","ts","",[335,350,351,397,426,432,447,462,468,473,486],{"__ignoreMap":348},[352,353,356,360,363,366,370,374,378,381,384,387,389,391,394],"span",{"class":354,"line":355},"line",1,[352,357,359],{"class":358},"so5gQ","export",[352,361,362],{"class":358}," async",[352,364,365],{"class":358}," function",[352,367,369],{"class":368},"shcOC"," action",[352,371,373],{"class":372},"slsVL","({ ",[352,375,377],{"class":376},"sQHwn","formData",[352,379,380],{"class":372}," }",[352,382,383],{"class":358},":",[352,385,386],{"class":372}," { ",[352,388,377],{"class":376},[352,390,383],{"class":358},[352,392,393],{"class":368}," FormData",[352,395,396],{"class":372}," }) {\n",[352,398,400,403,407,410,413,416,419,423],{"class":354,"line":399},2,[352,401,402],{"class":358},"  const",[352,404,406],{"class":405},"suiK_"," title",[352,408,409],{"class":358}," =",[352,411,412],{"class":372}," formData.",[352,414,415],{"class":368},"get",[352,417,418],{"class":372},"(",[352,420,422],{"class":421},"sfrk1","'title'",[352,424,425],{"class":372},")\n",[352,427,429],{"class":354,"line":428},3,[352,430,431],{"emptyLinePlaceholder":78},"\n",[352,433,435,438,441,444],{"class":354,"line":434},4,[352,436,437],{"class":358},"  if",[352,439,440],{"class":372}," (",[352,442,443],{"class":358},"!",[352,445,446],{"class":372},"title) {\n",[352,448,450,453,456,459],{"class":354,"line":449},5,[352,451,452],{"class":358},"    return",[352,454,455],{"class":372}," { ok: ",[352,457,458],{"class":405},"false",[352,460,461],{"class":372}," }\n",[352,463,465],{"class":354,"line":464},6,[352,466,467],{"class":372},"  }\n",[352,469,471],{"class":354,"line":470},7,[352,472,431],{"emptyLinePlaceholder":78},[352,474,476,479,481,484],{"class":354,"line":475},8,[352,477,478],{"class":358},"  return",[352,480,455],{"class":372},[352,482,483],{"class":405},"true",[352,485,461],{"class":372},[352,487,489],{"class":354,"line":488},9,[352,490,491],{"class":372},"}\n",[493,494,496],"h2",{"id":495},"reading-action-state","Reading action state",[331,498,499],{},"Use these composables in route components:",[501,502,503,510,516],"ul",{},[504,505,506,509],"li",{},[335,507,508],{},"useActionData()"," for the current matched node",[504,511,512,515],{},[335,513,514],{},"useRouteActionData(routeId)"," for an explicit route id",[504,517,518,521],{},[335,519,520],{},"useActionState()"," for the raw reactive action state wrapper",[493,523,525],{"id":524},"forms","Forms",[331,527,528],{},"Vuloom progressively enhances normal HTML forms. A route action works with SSR first, and then upgrades to client-side form submission once the app hydrates.",[530,531,532],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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":348,"searchDepth":399,"depth":399,"links":534},[535,536],{"id":495,"depth":399,"text":496},{"id":524,"depth":399,"text":525},"md",{"icon":51},{"icon":51},{"title":48,"description":348},"jVbuPYdOFyBj7UREL0VMUy5FG03cLK3UZ1Nl_snyJzE",[543,544],{"title":43,"path":44,"stem":45,"description":348,"icon":46,"children":-1},{"title":53,"path":54,"stem":55,"description":348,"icon":56,"children":-1},1777022953780]