[{"data":1,"prerenderedAt":1553},["ShallowReactive",2],{"navigation":3,"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts":358,"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts-surround":1548},[4,14,36,69,140,341],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","1.getting-started\u002F1.index",[9,10],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":15,"path":16,"stem":17,"children":18,"page":35},"Guides","\u002Fguides","2.guides",[19,23,27,31],{"title":20,"path":21,"stem":22},"Your First Layout","\u002Fguides\u002Fyour-first-layout","2.guides\u002F1.your-first-layout",{"title":24,"path":25,"stem":26},"Your First Page Template","\u002Fguides\u002Fyour-first-page-template","2.guides\u002F2.your-first-page-template",{"title":28,"path":29,"stem":30},"Your First Component","\u002Fguides\u002Fyour-first-component","2.guides\u002F3.your-first-component",{"title":32,"path":33,"stem":34},"Alternative UI Variants","\u002Fguides\u002Falternative-ui-variants","2.guides\u002F4.alternative-ui-variants",false,{"title":37,"path":38,"stem":39,"children":40,"page":35},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[41,45,49,53,57,61,65],{"title":42,"path":43,"stem":44},"How It All Works","\u002Fcore-concepts\u002Farchitecture","3.core-concepts\u002F1.architecture",{"title":46,"path":47,"stem":48},"The Data Model","\u002Fcore-concepts\u002Fthe-data-model","3.core-concepts\u002F2.the-data-model",{"title":50,"path":51,"stem":52},"Layouts & Pages","\u002Fcore-concepts\u002Flayouts-and-pages","3.core-concepts\u002F3.layouts-and-pages",{"title":54,"path":55,"stem":56},"Dynamic Pages","\u002Fcore-concepts\u002Fdynamic-pages","3.core-concepts\u002F4.dynamic-pages",{"title":58,"path":59,"stem":60},"Components","\u002Fcore-concepts\u002Fcomponents","3.core-concepts\u002F5.components",{"title":62,"path":63,"stem":64},"Draft & Publish Workflow","\u002Fcore-concepts\u002Fdraft-and-publish","3.core-concepts\u002F6.draft-and-publish",{"title":66,"path":67,"stem":68},"The Admin Panel","\u002Fcore-concepts\u002Fadmin-panel","3.core-concepts\u002F7.admin-panel",{"title":70,"path":71,"stem":72,"children":73,"page":35},"Api","\u002Fapi","4.api",[74,78,116,120,124,128,132,136],{"title":75,"path":76,"stem":77},"Bundle Setup","\u002Fapi\u002Fbundle-setup","4.api\u002F1.bundle-setup",{"title":58,"path":79,"stem":80,"children":81,"page":35},"\u002Fapi\u002Fcomponents","4.api\u002F2.components",[82,86,103],{"title":83,"path":84,"stem":85},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F2.components\u002F1.creating-components",{"title":87,"path":88,"stem":89,"children":90,"page":35},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F2.components\u002F2.annotations",[91,95,99],{"title":92,"path":93,"stem":94},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F2.components\u002F2.annotations\u002F1.publishable",{"title":96,"path":97,"stem":98},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F2.components\u002F2.annotations\u002F2.uploadable",{"title":100,"path":101,"stem":102},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F2.components\u002F2.annotations\u002F3.timestamped",{"title":104,"path":105,"stem":106,"children":107,"page":35},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F2.components\u002F3.built-ins",[108,112],{"title":109,"path":110,"stem":111},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F2.components\u002F3.built-ins\u002F1.collection-component",{"title":113,"path":114,"stem":115},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F2.components\u002F3.built-ins\u002F2.form-component",{"title":117,"path":118,"stem":119},"Dynamic & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F3.dynamic-pages",{"title":121,"path":122,"stem":123},"Users & Security","\u002Fapi\u002Fusers-and-security","4.api\u002F4.users-and-security",{"title":125,"path":126,"stem":127},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F5.data-fixtures",{"title":129,"path":130,"stem":131},"Configuration Reference","\u002Fapi\u002Fconfiguration","4.api\u002F6.configuration",{"title":133,"path":134,"stem":135},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F7.console-commands",{"title":137,"path":138,"stem":139},"Debugging & Profiler","\u002Fapi\u002Fdebugging","4.api\u002F8.debugging",{"title":141,"path":142,"stem":143,"children":144,"page":35},"Nuxt Module","\u002Fnuxt-module","5.nuxt-module",[145,149,162,182,207,211,295,320,324],{"title":146,"path":147,"stem":148},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F1.module-setup",{"title":150,"path":151,"stem":152,"children":153,"page":35},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F2.configuration",[154,158],{"title":155,"path":156,"stem":157},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F2.configuration\u002F1.nuxt-config",{"title":159,"path":160,"stem":161},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F2.configuration\u002F2.site-config-and-seo",{"title":163,"path":164,"stem":165,"children":166,"page":35},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F3.building-your-ui",[167,171,175,178],{"title":168,"path":169,"stem":170},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F3.building-your-ui\u002F1.creating-layouts",{"title":172,"path":173,"stem":174},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F3.building-your-ui\u002F2.creating-page-templates",{"title":83,"path":176,"stem":177},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F3.building-your-ui\u002F3.creating-components",{"title":179,"path":180,"stem":181},"CLI Generator","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcwa-cli","5.nuxt-module\u002F3.building-your-ui\u002F4.cwa-cli",{"title":183,"path":184,"stem":185,"children":186,"page":35},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F4.cwa-components",[187,191,195,199,203],{"title":188,"path":189,"stem":190},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F4.cwa-components\u002F1.cwa-component-group",{"title":192,"path":193,"stem":194},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F4.cwa-components\u002F2.cwa-page",{"title":196,"path":197,"stem":198},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F4.cwa-components\u002F3.cwa-link",{"title":200,"path":201,"stem":202},"\u003CCwaImage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-image","5.nuxt-module\u002F4.cwa-components\u002F4.cwa-image",{"title":204,"path":205,"stem":206},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F4.cwa-components\u002F5.cwa-default-layout",{"title":208,"path":209,"stem":210},"The useCwa() API","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F5.cwa-api",{"title":212,"path":213,"stem":214,"children":215,"page":35},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F6.composables",[216,224,261,278],{"title":217,"path":218,"stem":219,"children":220,"page":35},"Layout","\u002Fnuxt-module\u002Fcomposables\u002Flayout","5.nuxt-module\u002F6.composables\u002F0.layout",[221],{"title":217,"path":222,"stem":223},"\u002Fnuxt-module\u002Fcomposables\u002Flayout\u002Fuse-cwa-layout","5.nuxt-module\u002F6.composables\u002F0.layout\u002F1.use-cwa-layout",{"title":225,"path":226,"stem":227,"children":228,"page":35},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F6.composables\u002F1.component",[229,233,237,241,245,249,253,257],{"title":230,"path":231,"stem":232},"Component (recommended)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-component","5.nuxt-module\u002F6.composables\u002F1.component\u002F0.use-cwa-component",{"title":234,"path":235,"stem":236},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F1.use-cwa-resource",{"title":238,"path":239,"stem":240},"Collection Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F2.use-cwa-collection-resource",{"title":242,"path":243,"stem":244},"Image Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-image-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F3.use-cwa-image-resource",{"title":246,"path":247,"stem":248},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form","5.nuxt-module\u002F6.composables\u002F1.component\u002F4.use-cwa-form",{"title":250,"path":251,"stem":252},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-input","5.nuxt-module\u002F6.composables\u002F1.component\u002F5.use-cwa-form-input",{"title":254,"path":255,"stem":256},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F6.composables\u002F1.component\u002F6.use-cwa-form-repeated",{"title":258,"path":259,"stem":260},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-collection","5.nuxt-module\u002F6.composables\u002F1.component\u002F7.use-cwa-form-collection",{"title":262,"path":263,"stem":264,"children":265,"page":35},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F6.composables\u002F2.admin-manager",[266,270,274],{"title":267,"path":268,"stem":269},"Manager Tab","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-manager-tab","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F1.use-cwa-resource-manager-tab",{"title":271,"path":272,"stem":273},"Resource Model","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-model","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F2.use-cwa-resource-model",{"title":275,"path":276,"stem":277},"Resource Upload","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-upload","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F3.use-cwa-resource-upload",{"title":279,"path":280,"stem":281,"children":282,"page":35},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F6.composables\u002F3.utilities",[283,287,291],{"title":284,"path":285,"stem":286},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F1.use-cwa-resource-endpoint",{"title":288,"path":289,"stem":290},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F2.use-query-bound-model",{"title":292,"path":293,"stem":294},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F3.use-cwa-resource-route",{"title":296,"path":297,"stem":298,"children":299,"page":35},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F7.component-helpers",[300,304,308,312,316],{"title":301,"path":302,"stem":303},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F7.component-helpers\u002F1.images-and-uploads",{"title":305,"path":306,"stem":307},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F7.component-helpers\u002F2.collections-and-pagination",{"title":309,"path":310,"stem":311},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F7.component-helpers\u002F3.html-content",{"title":313,"path":314,"stem":315},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F7.component-helpers\u002F4.real-time-updates",{"title":317,"path":318,"stem":319},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F7.component-helpers\u002F5.forms",{"title":321,"path":322,"stem":323},"Authentication","\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F8.authentication",{"title":325,"path":326,"stem":327,"children":328,"page":35},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[329,333,337],{"title":330,"path":331,"stem":332},"Overview","\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":334,"path":335,"stem":336},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":338,"path":339,"stem":340},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":342,"path":343,"stem":344,"children":345,"page":35},"Deployment","\u002Fdeployment","6.deployment",[346,350,354],{"title":347,"path":348,"stem":349},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":351,"path":352,"stem":353},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":355,"path":356,"stem":357},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"id":359,"title":168,"badge":360,"body":363,"description":1542,"extension":1543,"links":1544,"meta":1545,"navigation":526,"path":169,"seo":1546,"stem":170,"__hash__":1547},"docs\u002F5.nuxt-module\u002F3.building-your-ui\u002F1.creating-layouts.md",{"label":361,"color":362},"Draft","amber",{"type":364,"value":365,"toc":1532},"minimark",[366,378,383,393,403,407,773,779,783,790,910,919,955,959,966,1128,1136,1140,1147,1208,1212,1218,1398,1404,1408,1411,1417,1423,1427,1430,1528],[367,368,369,370,373,374,377],"p",{},"A CWA layout is the outer shell of your site — the header, footer, navigation, and any component groups that persist across pages. The PHP API has a ",[371,372,217],"code",{}," entity whose ",[371,375,376],{},"uiComponent"," value maps to your Vue file.",[379,380,382],"h2",{"id":381},"file-convention","File Convention",[384,385,390],"pre",{"className":386,"code":388,"language":389},[387],"language-text","app\u002Fcwa\u002Flayouts\u002FPrimary.vue  →  registered as CwaLayoutPrimary\n","text",[371,391,388],{"__ignoreMap":392},"",[367,394,395,396,399,400,402],{},"The file name (without ",[371,397,398],{},".vue",") must match the ",[371,401,376],{}," value stored in the Layout API entity. Capitalisation matters.",[379,404,406],{"id":405},"minimal-layout","Minimal Layout",[384,408,412],{"className":409,"code":410,"language":411,"meta":392,"style":392},"language-vue shiki shiki-themes github-light github-dark material-theme-palenight","\u003C!-- app\u002Fcwa\u002Flayouts\u002FPrimary.vue -->\n\u003Ctemplate>\n    \u003Cdiv :class=\"uiClassNames\">\n        \u003Cheader>\n            \u003CNuxtLink to=\"\u002F\">Home\u003C\u002FNuxtLink>\n        \u003C\u002Fheader>\n\n        \u003Cmain>\n            \u003Cslot \u002F>\n        \u003C\u002Fmain>\n\n        \u003Cfooter>\n            \u003Cp>© 2024 My Site\u003C\u002Fp>\n        \u003C\u002Ffooter>\n    \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\nconst cwa = useCwa()\n\nconst layout = computed(() => cwa.resources.layout.value)\nconst uiClassNames = computed(() => layout.value?.data?.uiClassNames ?? '')\n\u003C\u002Fscript>\n","vue",[371,413,414,423,437,465,476,511,521,528,538,552,561,566,576,594,603,613,622,627,652,674,679,719,764],{"__ignoreMap":392},[415,416,419],"span",{"class":417,"line":418},"line",1,[415,420,422],{"class":421},"sTBSN","\u003C!-- app\u002Fcwa\u002Flayouts\u002FPrimary.vue -->\n",[415,424,426,430,434],{"class":417,"line":425},2,[415,427,429],{"class":428},"sOvfz","\u003C",[415,431,433],{"class":432},"s-h7I","template",[415,435,436],{"class":428},">\n",[415,438,440,443,446,450,453,457,461,463],{"class":417,"line":439},3,[415,441,442],{"class":428},"    \u003C",[415,444,445],{"class":432},"div",[415,447,449],{"class":448},"sGtlX"," :class",[415,451,452],{"class":428},"=",[415,454,456],{"class":455},"seSrl","\"",[415,458,460],{"class":459},"sLL54","uiClassNames",[415,462,456],{"class":455},[415,464,436],{"class":428},[415,466,468,471,474],{"class":417,"line":467},4,[415,469,470],{"class":428},"        \u003C",[415,472,473],{"class":432},"header",[415,475,436],{"class":428},[415,477,479,482,485,488,490,492,495,497,500,504,507,509],{"class":417,"line":478},5,[415,480,481],{"class":428},"            \u003C",[415,483,484],{"class":432},"NuxtLink",[415,486,487],{"class":448}," to",[415,489,452],{"class":428},[415,491,456],{"class":455},[415,493,494],{"class":459},"\u002F",[415,496,456],{"class":455},[415,498,499],{"class":428},">",[415,501,503],{"class":502},"sPB8G","Home",[415,505,506],{"class":428},"\u003C\u002F",[415,508,484],{"class":432},[415,510,436],{"class":428},[415,512,514,517,519],{"class":417,"line":513},6,[415,515,516],{"class":428},"        \u003C\u002F",[415,518,473],{"class":432},[415,520,436],{"class":428},[415,522,524],{"class":417,"line":523},7,[415,525,527],{"emptyLinePlaceholder":526},true,"\n",[415,529,531,533,536],{"class":417,"line":530},8,[415,532,470],{"class":428},[415,534,535],{"class":432},"main",[415,537,436],{"class":428},[415,539,541,543,546,550],{"class":417,"line":540},9,[415,542,481],{"class":428},[415,544,545],{"class":432},"slot",[415,547,549],{"class":548},"s01iV"," \u002F",[415,551,436],{"class":428},[415,553,555,557,559],{"class":417,"line":554},10,[415,556,516],{"class":428},[415,558,535],{"class":432},[415,560,436],{"class":428},[415,562,564],{"class":417,"line":563},11,[415,565,527],{"emptyLinePlaceholder":526},[415,567,569,571,574],{"class":417,"line":568},12,[415,570,470],{"class":428},[415,572,573],{"class":432},"footer",[415,575,436],{"class":428},[415,577,579,581,583,585,588,590,592],{"class":417,"line":578},13,[415,580,481],{"class":428},[415,582,367],{"class":432},[415,584,499],{"class":428},[415,586,587],{"class":502},"© 2024 My Site",[415,589,506],{"class":428},[415,591,367],{"class":432},[415,593,436],{"class":428},[415,595,597,599,601],{"class":417,"line":596},14,[415,598,516],{"class":428},[415,600,573],{"class":432},[415,602,436],{"class":428},[415,604,606,609,611],{"class":417,"line":605},15,[415,607,608],{"class":428},"    \u003C\u002F",[415,610,445],{"class":432},[415,612,436],{"class":428},[415,614,616,618,620],{"class":417,"line":615},16,[415,617,506],{"class":428},[415,619,433],{"class":432},[415,621,436],{"class":428},[415,623,625],{"class":417,"line":624},17,[415,626,527],{"emptyLinePlaceholder":526},[415,628,630,632,635,638,641,643,645,648,650],{"class":417,"line":629},18,[415,631,429],{"class":428},[415,633,634],{"class":432},"script",[415,636,637],{"class":448}," setup",[415,639,640],{"class":448}," lang",[415,642,452],{"class":428},[415,644,456],{"class":455},[415,646,647],{"class":459},"ts",[415,649,456],{"class":455},[415,651,436],{"class":428},[415,653,655,659,663,667,671],{"class":417,"line":654},19,[415,656,658],{"class":657},"swB56","const",[415,660,662],{"class":661},"sc2zw"," cwa",[415,664,666],{"class":665},"sVlFx"," =",[415,668,670],{"class":669},"sKpYG"," useCwa",[415,672,673],{"class":502},"()\n",[415,675,677],{"class":417,"line":676},20,[415,678,527],{"emptyLinePlaceholder":526},[415,680,682,684,687,689,692,695,698,701,703,706,709,711,714,716],{"class":417,"line":681},21,[415,683,658],{"class":657},[415,685,686],{"class":661}," layout",[415,688,666],{"class":665},[415,690,691],{"class":669}," computed",[415,693,694],{"class":502},"(",[415,696,697],{"class":428},"()",[415,699,700],{"class":657}," =>",[415,702,662],{"class":502},[415,704,705],{"class":428},".",[415,707,708],{"class":502},"resources",[415,710,705],{"class":428},[415,712,713],{"class":502},"layout",[415,715,705],{"class":428},[415,717,718],{"class":502},"value)\n",[415,720,722,724,727,729,731,733,735,737,739,741,744,747,750,752,755,758,761],{"class":417,"line":721},22,[415,723,658],{"class":657},[415,725,726],{"class":661}," uiClassNames",[415,728,666],{"class":665},[415,730,691],{"class":669},[415,732,694],{"class":502},[415,734,697],{"class":428},[415,736,700],{"class":657},[415,738,686],{"class":502},[415,740,705],{"class":428},[415,742,743],{"class":502},"value",[415,745,746],{"class":428},"?.",[415,748,749],{"class":502},"data",[415,751,746],{"class":428},[415,753,754],{"class":502},"uiClassNames ",[415,756,757],{"class":665},"??",[415,759,760],{"class":455}," ''",[415,762,763],{"class":502},")\n",[415,765,767,769,771],{"class":417,"line":766},23,[415,768,506],{"class":428},[415,770,634],{"class":432},[415,772,436],{"class":428},[367,774,775,776,705],{},"No special props needed — the page content renders into the default ",[371,777,778],{},"\u003Cslot \u002F>",[379,780,782],{"id":781},"accessing-layout-data","Accessing Layout Data",[367,784,785,786,789],{},"The layout resource is available through ",[371,787,788],{},"cwa.resources.layout",":",[384,791,794],{"className":792,"code":793,"language":647,"meta":392,"style":392},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight","const cwa = useCwa()\n\nconst layout = computed(() => cwa.resources.layout.value)\nconst uiClassNames = computed(() => layout.value?.data?.uiClassNames ?? '')\nconst isLoading = computed(() => cwa.resources.isLoading.value)\n",[371,795,796,808,812,842,878],{"__ignoreMap":392},[415,797,798,800,802,804,806],{"class":417,"line":418},[415,799,658],{"class":657},[415,801,662],{"class":661},[415,803,666],{"class":665},[415,805,670],{"class":669},[415,807,673],{"class":502},[415,809,810],{"class":417,"line":425},[415,811,527],{"emptyLinePlaceholder":526},[415,813,814,816,818,820,822,824,826,828,830,832,834,836,838,840],{"class":417,"line":439},[415,815,658],{"class":657},[415,817,686],{"class":661},[415,819,666],{"class":665},[415,821,691],{"class":669},[415,823,694],{"class":502},[415,825,697],{"class":428},[415,827,700],{"class":657},[415,829,662],{"class":502},[415,831,705],{"class":428},[415,833,708],{"class":502},[415,835,705],{"class":428},[415,837,713],{"class":502},[415,839,705],{"class":428},[415,841,718],{"class":502},[415,843,844,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876],{"class":417,"line":467},[415,845,658],{"class":657},[415,847,726],{"class":661},[415,849,666],{"class":665},[415,851,691],{"class":669},[415,853,694],{"class":502},[415,855,697],{"class":428},[415,857,700],{"class":657},[415,859,686],{"class":502},[415,861,705],{"class":428},[415,863,743],{"class":502},[415,865,746],{"class":428},[415,867,749],{"class":502},[415,869,746],{"class":428},[415,871,754],{"class":502},[415,873,757],{"class":665},[415,875,760],{"class":455},[415,877,763],{"class":502},[415,879,880,882,885,887,889,891,893,895,897,899,901,903,906,908],{"class":417,"line":478},[415,881,658],{"class":657},[415,883,884],{"class":661}," isLoading",[415,886,666],{"class":665},[415,888,691],{"class":669},[415,890,694],{"class":502},[415,892,697],{"class":428},[415,894,700],{"class":657},[415,896,662],{"class":502},[415,898,705],{"class":428},[415,900,708],{"class":502},[415,902,705],{"class":428},[415,904,905],{"class":502},"isLoading",[415,907,705],{"class":428},[415,909,718],{"class":502},[367,911,912,914,915,918],{},[371,913,460],{}," contains the CSS class name(s) the admin selected from the options you register in ",[371,916,917],{},"nuxt.config",". Apply them to the layout's root element:",[384,920,922],{"className":409,"code":921,"language":411,"meta":392,"style":392},"\u003Cdiv :class=\"uiClassNames\">...\u003C\u002Fdiv>\n",[371,923,924],{"__ignoreMap":392},[415,925,926,928,930,933,936,938,940,942,944,946,949,951,953],{"class":417,"line":418},[415,927,429],{"class":428},[415,929,445],{"class":432},[415,931,932],{"class":428}," :",[415,934,935],{"class":448},"class",[415,937,452],{"class":428},[415,939,456],{"class":455},[415,941,460],{"class":502},[415,943,456],{"class":455},[415,945,499],{"class":428},[415,947,948],{"class":502},"...",[415,950,506],{"class":428},[415,952,445],{"class":432},[415,954,436],{"class":428},[379,956,958],{"id":957},"component-groups","Component Groups",[367,960,961,962,965],{},"Add named content regions that admins can populate with components. The ",[371,963,964],{},"reference"," is a stable name unique within this layout's IRI:",[384,967,969],{"className":409,"code":968,"language":411,"meta":392,"style":392},"\u003Ctemplate>\n    \u003Cdiv>\n        \u003Cheader>\n            \u003CCwaComponentGroup\n                reference=\"navigation\"\n                :location=\"cwa.resources.layoutIri.value\"\n            \u002F>\n        \u003C\u002Fheader>\n\n        \u003Cslot \u002F>\n\n        \u003Cfooter>\n            \u003CCwaComponentGroup\n                reference=\"footer\"\n                :location=\"cwa.resources.layoutIri.value\"\n            \u002F>\n        \u003C\u002Ffooter>\n    \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[371,970,971,979,987,995,1002,1017,1031,1036,1044,1048,1058,1062,1070,1076,1088,1100,1104,1112,1120],{"__ignoreMap":392},[415,972,973,975,977],{"class":417,"line":418},[415,974,429],{"class":428},[415,976,433],{"class":432},[415,978,436],{"class":428},[415,980,981,983,985],{"class":417,"line":425},[415,982,442],{"class":428},[415,984,445],{"class":432},[415,986,436],{"class":428},[415,988,989,991,993],{"class":417,"line":439},[415,990,470],{"class":428},[415,992,473],{"class":432},[415,994,436],{"class":428},[415,996,997,999],{"class":417,"line":467},[415,998,481],{"class":428},[415,1000,1001],{"class":432},"CwaComponentGroup\n",[415,1003,1004,1007,1009,1011,1014],{"class":417,"line":478},[415,1005,1006],{"class":448},"                reference",[415,1008,452],{"class":428},[415,1010,456],{"class":455},[415,1012,1013],{"class":459},"navigation",[415,1015,1016],{"class":455},"\"\n",[415,1018,1019,1022,1024,1026,1029],{"class":417,"line":513},[415,1020,1021],{"class":448},"                :location",[415,1023,452],{"class":428},[415,1025,456],{"class":455},[415,1027,1028],{"class":459},"cwa.resources.layoutIri.value",[415,1030,1016],{"class":455},[415,1032,1033],{"class":417,"line":523},[415,1034,1035],{"class":428},"            \u002F>\n",[415,1037,1038,1040,1042],{"class":417,"line":530},[415,1039,516],{"class":428},[415,1041,473],{"class":432},[415,1043,436],{"class":428},[415,1045,1046],{"class":417,"line":540},[415,1047,527],{"emptyLinePlaceholder":526},[415,1049,1050,1052,1054,1056],{"class":417,"line":554},[415,1051,470],{"class":428},[415,1053,545],{"class":432},[415,1055,549],{"class":548},[415,1057,436],{"class":428},[415,1059,1060],{"class":417,"line":563},[415,1061,527],{"emptyLinePlaceholder":526},[415,1063,1064,1066,1068],{"class":417,"line":568},[415,1065,470],{"class":428},[415,1067,573],{"class":432},[415,1069,436],{"class":428},[415,1071,1072,1074],{"class":417,"line":578},[415,1073,481],{"class":428},[415,1075,1001],{"class":432},[415,1077,1078,1080,1082,1084,1086],{"class":417,"line":596},[415,1079,1006],{"class":448},[415,1081,452],{"class":428},[415,1083,456],{"class":455},[415,1085,573],{"class":459},[415,1087,1016],{"class":455},[415,1089,1090,1092,1094,1096,1098],{"class":417,"line":605},[415,1091,1021],{"class":448},[415,1093,452],{"class":428},[415,1095,456],{"class":455},[415,1097,1028],{"class":459},[415,1099,1016],{"class":455},[415,1101,1102],{"class":417,"line":615},[415,1103,1035],{"class":428},[415,1105,1106,1108,1110],{"class":417,"line":624},[415,1107,516],{"class":428},[415,1109,573],{"class":432},[415,1111,436],{"class":428},[415,1113,1114,1116,1118],{"class":417,"line":629},[415,1115,608],{"class":428},[415,1117,445],{"class":432},[415,1119,436],{"class":428},[415,1121,1122,1124,1126],{"class":417,"line":654},[415,1123,506],{"class":428},[415,1125,433],{"class":432},[415,1127,436],{"class":428},[367,1129,1130,1133,1134,705],{},[371,1131,1132],{},"location"," must be the IRI of the owning entity — for layout groups, that's ",[371,1135,1028],{},[379,1137,1139],{"id":1138},"auth-conditional-ui","Auth-Conditional UI",[367,1141,1142,1143,1146],{},"Auth state is only available after client hydration. Always wrap auth-dependent UI in ",[371,1144,1145],{},"\u003CClientOnly>"," to avoid SSR hydration mismatches:",[384,1148,1150],{"className":409,"code":1149,"language":411,"meta":392,"style":392},"\u003CClientOnly>\n    \u003Ctemplate #default>\n        \u003CUserMenu v-if=\"$cwa.auth.signedIn.value\" \u002F>\n        \u003CNuxtLink v-else to=\"\u002Flogin\">Sign in\u003C\u002FNuxtLink>\n    \u003C\u002Ftemplate>\n    \u003Ctemplate #fallback>\n        \u003C!-- server-side: render nothing or a skeleton -->\n        \u003Cdiv class=\"w-20 h-8 bg-gray-200 rounded animate-pulse\" \u002F>\n    \u003C\u002Ftemplate>\n\u003C\u002FClientOnly>\n",[371,1151,1152,1161,1166,1171,1176,1181,1186,1191,1196,1200],{"__ignoreMap":392},[415,1153,1154,1156,1159],{"class":417,"line":418},[415,1155,429],{"class":428},[415,1157,1158],{"class":432},"ClientOnly",[415,1160,436],{"class":428},[415,1162,1163],{"class":417,"line":425},[415,1164,1165],{"class":502},"    \u003Ctemplate #default>\n",[415,1167,1168],{"class":417,"line":439},[415,1169,1170],{"class":502},"        \u003CUserMenu v-if=\"$cwa.auth.signedIn.value\" \u002F>\n",[415,1172,1173],{"class":417,"line":467},[415,1174,1175],{"class":502},"        \u003CNuxtLink v-else to=\"\u002Flogin\">Sign in\u003C\u002FNuxtLink>\n",[415,1177,1178],{"class":417,"line":478},[415,1179,1180],{"class":502},"    \u003C\u002Ftemplate>\n",[415,1182,1183],{"class":417,"line":513},[415,1184,1185],{"class":502},"    \u003Ctemplate #fallback>\n",[415,1187,1188],{"class":417,"line":523},[415,1189,1190],{"class":502},"        \u003C!-- server-side: render nothing or a skeleton -->\n",[415,1192,1193],{"class":417,"line":530},[415,1194,1195],{"class":502},"        \u003Cdiv class=\"w-20 h-8 bg-gray-200 rounded animate-pulse\" \u002F>\n",[415,1197,1198],{"class":417,"line":540},[415,1199,1180],{"class":502},[415,1201,1202,1204,1206],{"class":417,"line":554},[415,1203,506],{"class":428},[415,1205,1158],{"class":432},[415,1207,436],{"class":428},[379,1209,1211],{"id":1210},"registering-layout-options","Registering Layout Options",[367,1213,1214,1215,1217],{},"Register your layout in ",[371,1216,917],{}," to expose it in the admin panel and define which CSS classes an admin can apply:",[384,1219,1221],{"className":792,"code":1220,"language":647,"meta":392,"style":392},"\u002F\u002F nuxt.config.ts\ncwa: {\n    layouts: {\n        Primary: {\n            name: 'Primary Layout',\n            classes: [\n                { value: '', label: 'Default' },\n                { value: 'theme-light', label: 'Light' },\n                { value: 'theme-dark', label: 'Dark' }\n            ]\n        }\n    }\n}\n",[371,1222,1223,1228,1239,1248,1257,1276,1287,1317,1347,1378,1383,1388,1393],{"__ignoreMap":392},[415,1224,1225],{"class":417,"line":418},[415,1226,1227],{"class":421},"\u002F\u002F nuxt.config.ts\n",[415,1229,1230,1234,1236],{"class":417,"line":425},[415,1231,1233],{"class":1232},"sRCss","cwa",[415,1235,789],{"class":428},[415,1237,1238],{"class":428}," {\n",[415,1240,1241,1244,1246],{"class":417,"line":439},[415,1242,1243],{"class":1232},"    layouts",[415,1245,789],{"class":428},[415,1247,1238],{"class":428},[415,1249,1250,1253,1255],{"class":417,"line":467},[415,1251,1252],{"class":1232},"        Primary",[415,1254,789],{"class":428},[415,1256,1238],{"class":428},[415,1258,1259,1262,1264,1267,1270,1273],{"class":417,"line":478},[415,1260,1261],{"class":1232},"            name",[415,1263,789],{"class":428},[415,1265,1266],{"class":455}," '",[415,1268,1269],{"class":459},"Primary Layout",[415,1271,1272],{"class":455},"'",[415,1274,1275],{"class":428},",\n",[415,1277,1278,1281,1283],{"class":417,"line":513},[415,1279,1280],{"class":1232},"            classes",[415,1282,789],{"class":428},[415,1284,1286],{"class":1285},"sDHlG"," [\n",[415,1288,1289,1292,1295,1297,1299,1302,1305,1307,1309,1312,1314],{"class":417,"line":523},[415,1290,1291],{"class":428},"                {",[415,1293,1294],{"class":1285}," value",[415,1296,789],{"class":428},[415,1298,760],{"class":455},[415,1300,1301],{"class":428},",",[415,1303,1304],{"class":1285}," label",[415,1306,789],{"class":428},[415,1308,1266],{"class":455},[415,1310,1311],{"class":459},"Default",[415,1313,1272],{"class":455},[415,1315,1316],{"class":428}," },\n",[415,1318,1319,1321,1323,1325,1327,1330,1332,1334,1336,1338,1340,1343,1345],{"class":417,"line":530},[415,1320,1291],{"class":428},[415,1322,1294],{"class":1285},[415,1324,789],{"class":428},[415,1326,1266],{"class":455},[415,1328,1329],{"class":459},"theme-light",[415,1331,1272],{"class":455},[415,1333,1301],{"class":428},[415,1335,1304],{"class":1285},[415,1337,789],{"class":428},[415,1339,1266],{"class":455},[415,1341,1342],{"class":459},"Light",[415,1344,1272],{"class":455},[415,1346,1316],{"class":428},[415,1348,1349,1351,1353,1355,1357,1360,1362,1364,1366,1368,1370,1373,1375],{"class":417,"line":540},[415,1350,1291],{"class":428},[415,1352,1294],{"class":1285},[415,1354,789],{"class":428},[415,1356,1266],{"class":455},[415,1358,1359],{"class":459},"theme-dark",[415,1361,1272],{"class":455},[415,1363,1301],{"class":428},[415,1365,1304],{"class":1285},[415,1367,789],{"class":428},[415,1369,1266],{"class":455},[415,1371,1372],{"class":459},"Dark",[415,1374,1272],{"class":455},[415,1376,1377],{"class":428}," }\n",[415,1379,1380],{"class":417,"line":554},[415,1381,1382],{"class":1285},"            ]\n",[415,1384,1385],{"class":417,"line":563},[415,1386,1387],{"class":428},"        }\n",[415,1389,1390],{"class":417,"line":568},[415,1391,1392],{"class":428},"    }\n",[415,1394,1395],{"class":417,"line":578},[415,1396,1397],{"class":428},"}\n",[367,1399,1400,1401,1403],{},"A layout that isn't registered in ",[371,1402,917],{}," still renders correctly — it just has no name in the admin and no class options.",[379,1405,1407],{"id":1406},"multiple-layouts","Multiple Layouts",[367,1409,1410],{},"Create one file per layout variant. A common setup:",[384,1412,1415],{"className":1413,"code":1414,"language":389},[387],"app\u002Fcwa\u002Flayouts\u002F\n    Primary.vue     # full layout with header + footer\n    Minimal.vue     # just a centered container (login pages, errors)\n    Landing.vue     # marketing layout with large hero\n",[371,1416,1414],{"__ignoreMap":392},[367,1418,1419,1420,705],{},"Each is independently configurable in ",[371,1421,1422],{},"nuxt.config.layouts",[379,1424,1426],{"id":1425},"loading-state","Loading State",[367,1428,1429],{},"Show a skeleton while the layout resource is loading. The layout loads first in the CWA fetch sequence, so this is typically only visible on the initial server-side render:",[384,1431,1433],{"className":409,"code":1432,"language":411,"meta":392,"style":392},"\u003Cdiv v-if=\"cwa.resources.isLoading.value\" class=\"animate-pulse ...\">\n    \u003C!-- skeleton -->\n\u003C\u002Fdiv>\n\u003Cdiv v-else :class=\"uiClassNames\">\n    \u003C!-- real content -->\n\u003C\u002Fdiv>\n",[371,1434,1435,1479,1484,1492,1515,1520],{"__ignoreMap":392},[415,1436,1437,1439,1441,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1468,1470,1472,1475,1477],{"class":417,"line":418},[415,1438,429],{"class":428},[415,1440,445],{"class":432},[415,1442,1444],{"class":1443},"sm4w6"," v-if",[415,1446,452],{"class":428},[415,1448,456],{"class":455},[415,1450,1233],{"class":502},[415,1452,705],{"class":428},[415,1454,708],{"class":502},[415,1456,705],{"class":428},[415,1458,905],{"class":502},[415,1460,705],{"class":428},[415,1462,743],{"class":502},[415,1464,456],{"class":455},[415,1466,1467],{"class":448}," class",[415,1469,452],{"class":428},[415,1471,456],{"class":455},[415,1473,1474],{"class":459},"animate-pulse ...",[415,1476,456],{"class":455},[415,1478,436],{"class":428},[415,1480,1481],{"class":417,"line":425},[415,1482,1483],{"class":502},"    \u003C!-- skeleton -->\n",[415,1485,1486,1488,1490],{"class":417,"line":439},[415,1487,506],{"class":428},[415,1489,445],{"class":432},[415,1491,436],{"class":428},[415,1493,1494,1496,1498,1501,1503,1505,1507,1509,1511,1513],{"class":417,"line":467},[415,1495,429],{"class":428},[415,1497,445],{"class":432},[415,1499,1500],{"class":1443}," v-else",[415,1502,932],{"class":428},[415,1504,935],{"class":448},[415,1506,452],{"class":428},[415,1508,456],{"class":455},[415,1510,460],{"class":502},[415,1512,456],{"class":455},[415,1514,436],{"class":428},[415,1516,1517],{"class":417,"line":478},[415,1518,1519],{"class":502},"    \u003C!-- real content -->\n",[415,1521,1522,1524,1526],{"class":417,"line":513},[415,1523,506],{"class":428},[415,1525,445],{"class":432},[415,1527,436],{"class":428},[1529,1530,1531],"style",{},"html pre.shiki code .sTBSN, html code.shiki .sTBSN{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sOvfz, html code.shiki .sOvfz{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html pre.shiki code .s-h7I, html code.shiki .s-h7I{--shiki-light:#22863A;--shiki-default:#85E89D;--shiki-dark:#F07178}html pre.shiki code .sGtlX, html code.shiki .sGtlX{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#C792EA}html pre.shiki code .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .sPB8G, html code.shiki .sPB8G{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .s01iV, html code.shiki .s01iV{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#FDAEB7;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:inherit}html pre.shiki code .swB56, html code.shiki .swB56{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .sc2zw, html code.shiki .sc2zw{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .sVlFx, html code.shiki .sVlFx{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .sKpYG, html code.shiki .sKpYG{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#82AAFF}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 .sRCss, html code.shiki .sRCss{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}html pre.shiki code .sDHlG, html code.shiki .sDHlG{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .sm4w6, html code.shiki .sm4w6{--shiki-light:#D73A49;--shiki-light-font-style:inherit;--shiki-default:#F97583;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":392,"searchDepth":425,"depth":425,"links":1533},[1534,1535,1536,1537,1538,1539,1540,1541],{"id":381,"depth":425,"text":382},{"id":405,"depth":425,"text":406},{"id":781,"depth":425,"text":782},{"id":957,"depth":425,"text":958},{"id":1138,"depth":425,"text":1139},{"id":1210,"depth":425,"text":1211},{"id":1406,"depth":425,"text":1407},{"id":1425,"depth":425,"text":1426},"How to create CWA layout components that form the outer shell of your site — header, footer, navigation, and component group regions.","md",null,{},{"title":168,"description":1542},"xeBye8cUqEGFzkwPyE84e8EE1ewZJOA-6hRFb1RUhO0",[1549,1551],{"title":159,"path":160,"stem":161,"description":1550,"children":-1},"Admin settings panel, siteConfig API, per-page SEO from page data, sitemap, maintenance mode, and robots configuration.",{"title":172,"path":173,"stem":174,"description":1552,"children":-1},"How to create CWA page template components that define the content regions of a page using CwaComponentGroup and CwaPage.",1782512898295]