[{"data":1,"prerenderedAt":1362},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fyour-first-page-template":342,"\u002Fguides\u002Fyour-first-page-template-surround":1357},[4,14,36,69,140,325],{"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,178,203,207,279,304,308],{"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],{"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,"children":182,"page":35},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F4.cwa-components",[183,187,191,195,199],{"title":184,"path":185,"stem":186},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F4.cwa-components\u002F1.cwa-component-group",{"title":188,"path":189,"stem":190},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F4.cwa-components\u002F2.cwa-page",{"title":192,"path":193,"stem":194},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F4.cwa-components\u002F3.cwa-link",{"title":196,"path":197,"stem":198},"\u003CCwaImage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-image","5.nuxt-module\u002F4.cwa-components\u002F4.cwa-image",{"title":200,"path":201,"stem":202},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F4.cwa-components\u002F5.cwa-default-layout",{"title":204,"path":205,"stem":206},"The useCwa() API","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F5.cwa-api",{"title":208,"path":209,"stem":210,"children":211,"page":35},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F6.composables",[212,245,262],{"title":213,"path":214,"stem":215,"children":216,"page":35},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F6.composables\u002F1.component",[217,221,225,229,233,237,241],{"title":218,"path":219,"stem":220},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F1.use-cwa-resource",{"title":222,"path":223,"stem":224},"Collection Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F2.use-cwa-collection-resource",{"title":226,"path":227,"stem":228},"Image Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-image-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F3.use-cwa-image-resource",{"title":230,"path":231,"stem":232},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form","5.nuxt-module\u002F6.composables\u002F1.component\u002F4.use-cwa-form",{"title":234,"path":235,"stem":236},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-input","5.nuxt-module\u002F6.composables\u002F1.component\u002F5.use-cwa-form-input",{"title":238,"path":239,"stem":240},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F6.composables\u002F1.component\u002F6.use-cwa-form-repeated",{"title":242,"path":243,"stem":244},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-collection","5.nuxt-module\u002F6.composables\u002F1.component\u002F7.use-cwa-form-collection",{"title":246,"path":247,"stem":248,"children":249,"page":35},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F6.composables\u002F2.admin-manager",[250,254,258],{"title":251,"path":252,"stem":253},"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":255,"path":256,"stem":257},"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":259,"path":260,"stem":261},"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":263,"path":264,"stem":265,"children":266,"page":35},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F6.composables\u002F3.utilities",[267,271,275],{"title":268,"path":269,"stem":270},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F1.use-cwa-resource-endpoint",{"title":272,"path":273,"stem":274},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F2.use-query-bound-model",{"title":276,"path":277,"stem":278},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F3.use-cwa-resource-route",{"title":280,"path":281,"stem":282,"children":283,"page":35},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F7.component-helpers",[284,288,292,296,300],{"title":285,"path":286,"stem":287},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F7.component-helpers\u002F1.images-and-uploads",{"title":289,"path":290,"stem":291},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F7.component-helpers\u002F2.collections-and-pagination",{"title":293,"path":294,"stem":295},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F7.component-helpers\u002F3.html-content",{"title":297,"path":298,"stem":299},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F7.component-helpers\u002F4.real-time-updates",{"title":301,"path":302,"stem":303},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F7.component-helpers\u002F5.forms",{"title":305,"path":306,"stem":307},"Authentication","\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F8.authentication",{"title":309,"path":310,"stem":311,"children":312,"page":35},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[313,317,321],{"title":314,"path":315,"stem":316},"Overview","\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":318,"path":319,"stem":320},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":322,"path":323,"stem":324},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":326,"path":327,"stem":328,"children":329,"page":35},"Deployment","\u002Fdeployment","6.deployment",[330,334,338],{"title":331,"path":332,"stem":333},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":335,"path":336,"stem":337},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":339,"path":340,"stem":341},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"id":343,"title":24,"badge":344,"body":347,"description":1351,"extension":1352,"links":1353,"meta":1354,"navigation":509,"path":25,"seo":1355,"stem":26,"__hash__":1356},"docs\u002F2.guides\u002F2.your-first-page-template.md",{"label":345,"color":346},"Draft","amber",{"type":348,"value":349,"toc":1338},"minimark",[350,359,366,373,378,385,613,618,627,638,655,659,662,934,944,948,1067,1071,1074,1092,1096,1112,1117,1121,1203,1220,1224,1234,1291,1301,1318,1323,1327,1334],[351,352,353,354,358],"p",{},"Your layout is in place — but the ",[355,356,357],"code",{},"\u003Cslot \u002F>"," is empty. A page template fills it. It's a Vue file that defines the regions for a page: where the hero sits, where the main content goes, where the sidebar lives.",[351,360,361,362,365],{},"Each region is a ",[355,363,364],{},"CwaComponentGroup",". You declare which regions exist and what they're called; editors fill them with components at runtime.",[367,368,370],"callout",{"icon":369},"i-heroicons-photo",[351,371,372],{},"IMAGE: Page template in edit mode showing two CwaComponentGroup regions highlighted as editable areas with + hotspots",[374,375,377],"h2",{"id":376},"the-file","The File",[351,379,380,381,384],{},"Create ",[355,382,383],{},"app\u002Fcwa\u002Fpages\u002FPrimaryPageTemplate.vue",":",[386,387,392],"pre",{"className":388,"code":389,"language":390,"meta":391,"style":391},"language-vue shiki shiki-themes github-light github-dark material-theme-palenight","\u003Ctemplate>\n  \u003Cdiv class=\"mx-auto max-w-7xl px-4 py-10\">\n    \u003CCwaComponentGroup\n      reference=\"primary\"\n      :location=\"props.iri\"\n    \u002F>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\nimport type { IriProp } from '#cwa\u002Fcomposables\u002Fcwa-resource'\n\nconst props = defineProps\u003CIriProp>()\n\u003C\u002Fscript>\n","vue","",[355,393,394,410,438,447,463,478,484,494,504,511,536,568,573,604],{"__ignoreMap":391},[395,396,399,403,407],"span",{"class":397,"line":398},"line",1,[395,400,402],{"class":401},"sOvfz","\u003C",[395,404,406],{"class":405},"s-h7I","template",[395,408,409],{"class":401},">\n",[395,411,413,416,419,423,426,430,434,436],{"class":397,"line":412},2,[395,414,415],{"class":401},"  \u003C",[395,417,418],{"class":405},"div",[395,420,422],{"class":421},"sGtlX"," class",[395,424,425],{"class":401},"=",[395,427,429],{"class":428},"seSrl","\"",[395,431,433],{"class":432},"sLL54","mx-auto max-w-7xl px-4 py-10",[395,435,429],{"class":428},[395,437,409],{"class":401},[395,439,441,444],{"class":397,"line":440},3,[395,442,443],{"class":401},"    \u003C",[395,445,446],{"class":405},"CwaComponentGroup\n",[395,448,450,453,455,457,460],{"class":397,"line":449},4,[395,451,452],{"class":421},"      reference",[395,454,425],{"class":401},[395,456,429],{"class":428},[395,458,459],{"class":432},"primary",[395,461,462],{"class":428},"\"\n",[395,464,466,469,471,473,476],{"class":397,"line":465},5,[395,467,468],{"class":421},"      :location",[395,470,425],{"class":401},[395,472,429],{"class":428},[395,474,475],{"class":432},"props.iri",[395,477,462],{"class":428},[395,479,481],{"class":397,"line":480},6,[395,482,483],{"class":401},"    \u002F>\n",[395,485,487,490,492],{"class":397,"line":486},7,[395,488,489],{"class":401},"  \u003C\u002F",[395,491,418],{"class":405},[395,493,409],{"class":401},[395,495,497,500,502],{"class":397,"line":496},8,[395,498,499],{"class":401},"\u003C\u002F",[395,501,406],{"class":405},[395,503,409],{"class":401},[395,505,507],{"class":397,"line":506},9,[395,508,510],{"emptyLinePlaceholder":509},true,"\n",[395,512,514,516,519,522,525,527,529,532,534],{"class":397,"line":513},10,[395,515,402],{"class":401},[395,517,518],{"class":405},"script",[395,520,521],{"class":421}," setup",[395,523,524],{"class":421}," lang",[395,526,425],{"class":401},[395,528,429],{"class":428},[395,530,531],{"class":432},"ts",[395,533,429],{"class":428},[395,535,409],{"class":401},[395,537,539,543,546,549,553,556,559,562,565],{"class":397,"line":538},11,[395,540,542],{"class":541},"sm4w6","import",[395,544,545],{"class":541}," type",[395,547,548],{"class":401}," {",[395,550,552],{"class":551},"sPB8G"," IriProp",[395,554,555],{"class":401}," }",[395,557,558],{"class":541}," from",[395,560,561],{"class":428}," '",[395,563,564],{"class":432},"#cwa\u002Fcomposables\u002Fcwa-resource",[395,566,567],{"class":428},"'\n",[395,569,571],{"class":397,"line":570},12,[395,572,510],{"emptyLinePlaceholder":509},[395,574,576,580,584,588,592,594,598,601],{"class":397,"line":575},13,[395,577,579],{"class":578},"swB56","const",[395,581,583],{"class":582},"sc2zw"," props",[395,585,587],{"class":586},"sVlFx"," =",[395,589,591],{"class":590},"sKpYG"," defineProps",[395,593,402],{"class":401},[395,595,597],{"class":596},"sRCss","IriProp",[395,599,600],{"class":401},">",[395,602,603],{"class":551},"()\n",[395,605,607,609,611],{"class":397,"line":606},14,[395,608,499],{"class":401},[395,610,518],{"class":405},[395,612,409],{"class":401},[614,615,617],"h3",{"id":616},"key-points","Key points",[351,619,620,626],{},[621,622,623],"strong",{},[355,624,625],{},"defineProps\u003CIriProp>()"," — every page template receives its page's IRI as a prop. The module passes this automatically when rendering the page.",[351,628,629,634,635,637],{},[621,630,631],{},[355,632,633],{},"CwaComponentGroup reference=\"primary\" :location=\"props.iri\""," — creates a content region called ",[355,636,459],{}," owned by this page. Any components the editor adds here are stored against this specific page record.",[367,639,641],{"icon":640},"i-heroicons-information-circle",[351,642,643,644,647,648,651,652,654],{},"The ",[355,645,646],{},"location"," must be the IRI of a ",[621,649,650],{},"layout, page, or component",". For page regions, always use ",[355,653,475],{}," — the IRI the module passes in automatically for the current page.",[374,656,658],{"id":657},"multiple-regions","Multiple Regions",[351,660,661],{},"Real page templates usually have several regions:",[386,663,665],{"className":388,"code":664,"language":390,"meta":391,"style":391},"\u003Ctemplate>\n  \u003Cdiv>\n    \u003C!-- Full-width hero area -->\n    \u003CCwaComponentGroup\n      reference=\"hero\"\n      :location=\"props.iri\"\n      :allowed-components=\"['\u002Fcomponent\u002Fhero_sections']\"\n    \u002F>\n\n    \u003C!-- Main content + optional sidebar -->\n    \u003Cdiv class=\"max-w-7xl mx-auto px-4 py-10 flex gap-10\">\n      \u003Cdiv class=\"flex-1\">\n        \u003CCwaComponentGroup\n          reference=\"main\"\n          :location=\"props.iri\"\n        \u002F>\n      \u003C\u002Fdiv>\n      \u003Caside class=\"w-64\">\n        \u003CCwaComponentGroup\n          reference=\"sidebar\"\n          :location=\"props.iri\"\n        \u002F>\n      \u003C\u002Faside>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[355,666,667,675,683,689,695,708,720,734,738,742,747,766,786,793,807,821,827,837,858,865,879,892,897,906,916,925],{"__ignoreMap":391},[395,668,669,671,673],{"class":397,"line":398},[395,670,402],{"class":401},[395,672,406],{"class":405},[395,674,409],{"class":401},[395,676,677,679,681],{"class":397,"line":412},[395,678,415],{"class":401},[395,680,418],{"class":405},[395,682,409],{"class":401},[395,684,685],{"class":397,"line":440},[395,686,688],{"class":687},"sTBSN","    \u003C!-- Full-width hero area -->\n",[395,690,691,693],{"class":397,"line":449},[395,692,443],{"class":401},[395,694,446],{"class":405},[395,696,697,699,701,703,706],{"class":397,"line":465},[395,698,452],{"class":421},[395,700,425],{"class":401},[395,702,429],{"class":428},[395,704,705],{"class":432},"hero",[395,707,462],{"class":428},[395,709,710,712,714,716,718],{"class":397,"line":480},[395,711,468],{"class":421},[395,713,425],{"class":401},[395,715,429],{"class":428},[395,717,475],{"class":432},[395,719,462],{"class":428},[395,721,722,725,727,729,732],{"class":397,"line":486},[395,723,724],{"class":421},"      :allowed-components",[395,726,425],{"class":401},[395,728,429],{"class":428},[395,730,731],{"class":432},"['\u002Fcomponent\u002Fhero_sections']",[395,733,462],{"class":428},[395,735,736],{"class":397,"line":496},[395,737,483],{"class":401},[395,739,740],{"class":397,"line":506},[395,741,510],{"emptyLinePlaceholder":509},[395,743,744],{"class":397,"line":513},[395,745,746],{"class":687},"    \u003C!-- Main content + optional sidebar -->\n",[395,748,749,751,753,755,757,759,762,764],{"class":397,"line":538},[395,750,443],{"class":401},[395,752,418],{"class":405},[395,754,422],{"class":421},[395,756,425],{"class":401},[395,758,429],{"class":428},[395,760,761],{"class":432},"max-w-7xl mx-auto px-4 py-10 flex gap-10",[395,763,429],{"class":428},[395,765,409],{"class":401},[395,767,768,771,773,775,777,779,782,784],{"class":397,"line":570},[395,769,770],{"class":401},"      \u003C",[395,772,418],{"class":405},[395,774,422],{"class":421},[395,776,425],{"class":401},[395,778,429],{"class":428},[395,780,781],{"class":432},"flex-1",[395,783,429],{"class":428},[395,785,409],{"class":401},[395,787,788,791],{"class":397,"line":575},[395,789,790],{"class":401},"        \u003C",[395,792,446],{"class":405},[395,794,795,798,800,802,805],{"class":397,"line":606},[395,796,797],{"class":421},"          reference",[395,799,425],{"class":401},[395,801,429],{"class":428},[395,803,804],{"class":432},"main",[395,806,462],{"class":428},[395,808,810,813,815,817,819],{"class":397,"line":809},15,[395,811,812],{"class":421},"          :location",[395,814,425],{"class":401},[395,816,429],{"class":428},[395,818,475],{"class":432},[395,820,462],{"class":428},[395,822,824],{"class":397,"line":823},16,[395,825,826],{"class":401},"        \u002F>\n",[395,828,830,833,835],{"class":397,"line":829},17,[395,831,832],{"class":401},"      \u003C\u002F",[395,834,418],{"class":405},[395,836,409],{"class":401},[395,838,840,842,845,847,849,851,854,856],{"class":397,"line":839},18,[395,841,770],{"class":401},[395,843,844],{"class":405},"aside",[395,846,422],{"class":421},[395,848,425],{"class":401},[395,850,429],{"class":428},[395,852,853],{"class":432},"w-64",[395,855,429],{"class":428},[395,857,409],{"class":401},[395,859,861,863],{"class":397,"line":860},19,[395,862,790],{"class":401},[395,864,446],{"class":405},[395,866,868,870,872,874,877],{"class":397,"line":867},20,[395,869,797],{"class":421},[395,871,425],{"class":401},[395,873,429],{"class":428},[395,875,876],{"class":432},"sidebar",[395,878,462],{"class":428},[395,880,882,884,886,888,890],{"class":397,"line":881},21,[395,883,812],{"class":421},[395,885,425],{"class":401},[395,887,429],{"class":428},[395,889,475],{"class":432},[395,891,462],{"class":428},[395,893,895],{"class":397,"line":894},22,[395,896,826],{"class":401},[395,898,900,902,904],{"class":397,"line":899},23,[395,901,832],{"class":401},[395,903,844],{"class":405},[395,905,409],{"class":401},[395,907,909,912,914],{"class":397,"line":908},24,[395,910,911],{"class":401},"    \u003C\u002F",[395,913,418],{"class":405},[395,915,409],{"class":401},[395,917,919,921,923],{"class":397,"line":918},25,[395,920,489],{"class":401},[395,922,418],{"class":405},[395,924,409],{"class":401},[395,926,928,930,932],{"class":397,"line":927},26,[395,929,499],{"class":401},[395,931,406],{"class":405},[395,933,409],{"class":401},[351,935,936,937,939,940,943],{},"Each ",[355,938,364],{}," with a unique ",[355,941,942],{},"reference"," becomes a separate, independently manageable region in the CMS.",[374,945,947],{"id":946},"register-in-nuxtconfig","Register in nuxt.config",[386,949,952],{"className":950,"code":951,"language":531,"meta":391,"style":391},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight","\u002F\u002F nuxt.config.ts\ncwa: {\n  pages: {\n    PrimaryPageTemplate: {\n      name: 'Primary Page',\n      classes: [\n        { value: '', label: 'Default' }\n      ]\n    }\n  }\n}\n",[355,953,954,959,969,978,987,1005,1016,1047,1052,1057,1062],{"__ignoreMap":391},[395,955,956],{"class":397,"line":398},[395,957,958],{"class":687},"\u002F\u002F nuxt.config.ts\n",[395,960,961,964,966],{"class":397,"line":412},[395,962,963],{"class":596},"cwa",[395,965,384],{"class":401},[395,967,968],{"class":401}," {\n",[395,970,971,974,976],{"class":397,"line":440},[395,972,973],{"class":596},"  pages",[395,975,384],{"class":401},[395,977,968],{"class":401},[395,979,980,983,985],{"class":397,"line":449},[395,981,982],{"class":596},"    PrimaryPageTemplate",[395,984,384],{"class":401},[395,986,968],{"class":401},[395,988,989,992,994,996,999,1002],{"class":397,"line":465},[395,990,991],{"class":596},"      name",[395,993,384],{"class":401},[395,995,561],{"class":428},[395,997,998],{"class":432},"Primary Page",[395,1000,1001],{"class":428},"'",[395,1003,1004],{"class":401},",\n",[395,1006,1007,1010,1012],{"class":397,"line":480},[395,1008,1009],{"class":596},"      classes",[395,1011,384],{"class":401},[395,1013,1015],{"class":1014},"sDHlG"," [\n",[395,1017,1018,1021,1024,1026,1029,1032,1035,1037,1039,1042,1044],{"class":397,"line":486},[395,1019,1020],{"class":401},"        {",[395,1022,1023],{"class":1014}," value",[395,1025,384],{"class":401},[395,1027,1028],{"class":428}," ''",[395,1030,1031],{"class":401},",",[395,1033,1034],{"class":1014}," label",[395,1036,384],{"class":401},[395,1038,561],{"class":428},[395,1040,1041],{"class":432},"Default",[395,1043,1001],{"class":428},[395,1045,1046],{"class":401}," }\n",[395,1048,1049],{"class":397,"line":496},[395,1050,1051],{"class":1014},"      ]\n",[395,1053,1054],{"class":397,"line":506},[395,1055,1056],{"class":401},"    }\n",[395,1058,1059],{"class":397,"line":513},[395,1060,1061],{"class":401},"  }\n",[395,1063,1064],{"class":397,"line":538},[395,1065,1066],{"class":401},"}\n",[374,1068,1070],{"id":1069},"create-a-page-record","Create a Page Record",[351,1072,1073],{},"A page template Vue file defines the structure; a Page record in the database gives it a URL and assigns it to a layout.",[351,1075,1076,1079,1080,1083,1084,1087,1088,1091],{},[621,1077,1078],{},"Naming convention:"," unlike layouts, page template ",[355,1081,1082],{},"uiComponent"," values are not prefixed — the value is the Vue filename as-is. ",[355,1085,1086],{},"PrimaryPageTemplate.vue"," → ",[355,1089,1090],{},"PrimaryPageTemplate",".",[614,1093,1095],{"id":1094},"via-the-admin","Via the admin",[351,1097,1098,1099,1087,1102,1105,1106,1108,1109,1111],{},"Go to ",[355,1100,1101],{},"\u002F_cwa\u002Fpages",[621,1103,1104],{},"Create"," → set ",[355,1107,1082],{}," to ",[355,1110,1090],{},", assign a layout, and set the route path.",[367,1113,1114],{"icon":369},[351,1115,1116],{},"IMAGE: Admin create page form showing uiComponent, layout, and route fields",[614,1118,1120],{"id":1119},"via-fixtures","Via fixtures",[386,1122,1126],{"className":1123,"code":1124,"language":1125,"meta":391,"style":391},"language-php shiki shiki-themes github-light github-dark material-theme-palenight","$cwa->page('home', 'PrimaryPageTemplate', layout: 'main', route: '\u002F');\n$cwa->flush();\n","php",[355,1127,1128,1189],{"__ignoreMap":391},[395,1129,1130,1133,1135,1138,1141,1144,1146,1149,1151,1153,1155,1157,1159,1161,1164,1166,1168,1170,1172,1174,1177,1179,1181,1184,1186],{"class":397,"line":398},[395,1131,1132],{"class":401},"$",[395,1134,963],{"class":551},[395,1136,1137],{"class":586},"->",[395,1139,1140],{"class":590},"page",[395,1142,1143],{"class":401},"(",[395,1145,1001],{"class":428},[395,1147,1148],{"class":432},"home",[395,1150,1001],{"class":428},[395,1152,1031],{"class":401},[395,1154,561],{"class":428},[395,1156,1090],{"class":432},[395,1158,1001],{"class":428},[395,1160,1031],{"class":401},[395,1162,1163],{"class":596}," layout",[395,1165,384],{"class":401},[395,1167,561],{"class":428},[395,1169,804],{"class":432},[395,1171,1001],{"class":428},[395,1173,1031],{"class":401},[395,1175,1176],{"class":596}," route",[395,1178,384],{"class":401},[395,1180,561],{"class":428},[395,1182,1183],{"class":432},"\u002F",[395,1185,1001],{"class":428},[395,1187,1188],{"class":401},");\n",[395,1190,1191,1193,1195,1197,1200],{"class":397,"line":412},[395,1192,1132],{"class":401},[395,1194,963],{"class":551},[395,1196,1137],{"class":586},[395,1198,1199],{"class":590},"flush",[395,1201,1202],{"class":401},"();\n",[351,1204,643,1205,1208,1209,1212,1213,1215,1216,1219],{},[355,1206,1207],{},"'main'"," argument refers to the layout reference from your scaffold (",[355,1210,1211],{},"$cwa->layout('main', ...)",") — not the ",[355,1214,1082],{}," value. See ",[1217,1218,125],"a",{"href":126}," for the full API.",[374,1221,1223],{"id":1222},"template-pages-for-dynamic-content","Template Pages for Dynamic Content",[351,1225,1226,1227,1230,1231,384],{},"Static pages (home, about, contact) map one-to-one: one URL, one page. But for repeating content — blog articles, events, products — you want the ",[621,1228,1229],{},"same page structure"," reused across many URLs. For this, you create a ",[621,1232,1233],{},"template page",[386,1235,1237],{"className":1123,"code":1236,"language":1125,"meta":391,"style":391},"$cwa->page('blog-template', 'PrimaryPageTemplate', layout: 'main', isTemplate: true);\n",[355,1238,1239],{"__ignoreMap":391},[395,1240,1241,1243,1245,1247,1249,1251,1253,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1283,1285,1289],{"class":397,"line":398},[395,1242,1132],{"class":401},[395,1244,963],{"class":551},[395,1246,1137],{"class":586},[395,1248,1140],{"class":590},[395,1250,1143],{"class":401},[395,1252,1001],{"class":428},[395,1254,1255],{"class":432},"blog-template",[395,1257,1001],{"class":428},[395,1259,1031],{"class":401},[395,1261,561],{"class":428},[395,1263,1090],{"class":432},[395,1265,1001],{"class":428},[395,1267,1031],{"class":401},[395,1269,1163],{"class":596},[395,1271,384],{"class":401},[395,1273,561],{"class":428},[395,1275,804],{"class":432},[395,1277,1001],{"class":428},[395,1279,1031],{"class":401},[395,1281,1282],{"class":596}," isTemplate",[395,1284,384],{"class":401},[395,1286,1288],{"class":1287},"sBtbT"," true",[395,1290,1188],{"class":401},[351,1292,1293,1294,1297,1298,1300],{},"A template page has no URL. Instead, each blog article (or product, or event) is a ",[621,1295,1296],{},"PageData"," record that references this template and gets its own URL. All those records share the same component regions you've defined in ",[355,1299,1086],{},", but each has its own data.",[367,1302,1303],{"icon":640},[351,1304,1305,1306,1309,1310,1313,1314,1317],{},"In the admin, ",[621,1307,1308],{},"blue"," records are static pages, ",[621,1311,1312],{},"yellow"," are template pages, and ",[621,1315,1316],{},"green"," are PageData records (individual articles, products, etc.). This colour coding makes it easy to see what's a shared structure vs. an individual piece of content.",[351,1319,1320,1321,1091],{},"The full dynamic pages pattern — how PageData records work, how to bind component positions to data fields — is in ",[1217,1322,54],{"href":55},[374,1324,1326],{"id":1325},"next-create-a-component","Next: Create a Component",[351,1328,1329,1330,1333],{},"With a layout and page template in place, ",[1217,1331,1332],{"href":29},"build a component"," to fill those regions with real, editable content.",[1335,1336,1337],"style",{},"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 .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}html pre.shiki code .sPB8G, html code.shiki .sPB8G{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}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 pre.shiki code .sRCss, html code.shiki .sRCss{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}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 .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 .sDHlG, html code.shiki .sDHlG{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .sBtbT, html code.shiki .sBtbT{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#89DDFF}",{"title":391,"searchDepth":412,"depth":412,"links":1339},[1340,1343,1344,1345,1349,1350],{"id":376,"depth":412,"text":377,"children":1341},[1342],{"id":616,"depth":440,"text":617},{"id":657,"depth":412,"text":658},{"id":946,"depth":412,"text":947},{"id":1069,"depth":412,"text":1070,"children":1346},[1347,1348],{"id":1094,"depth":440,"text":1095},{"id":1119,"depth":440,"text":1120},{"id":1222,"depth":412,"text":1223},{"id":1325,"depth":412,"text":1326},"Create a page template that defines the content regions within a layout using CwaComponentGroup.","md",null,{},{"title":24,"description":1351},"rogNtAKtU22o5arlfbNVCI80K0HdLcCwjw-ffpprrqQ",[1358,1360],{"title":20,"path":21,"stem":22,"description":1359,"children":-1},"Create a layout component that wraps every page with your site header, footer, and navigation.",{"title":28,"path":29,"stem":30,"description":1361,"children":-1},"Build a complete CWA component from scratch — the PHP entity, the Vue display template, and the admin editing tab.",1782241278654]