[{"data":1,"prerenderedAt":1087},["ShallowReactive",2],{"navigation":3,"\u002Fcore-concepts\u002Fglossary":604,"\u002Fcore-concepts\u002Fglossary-surround":1082},[4,24,67,93,236,533],{"title":5,"path":6,"stem":7,"children":8,"collapsed":23},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11,15,19],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":16,"path":17,"stem":18},"Key Ideas","\u002Fgetting-started\u002Fkey-ideas","1.getting-started\u002F3.key-ideas",{"title":20,"path":21,"stem":22},"Releases","\u002Fgetting-started\u002Freleases","1.getting-started\u002F4.releases",true,{"title":25,"path":26,"stem":27,"children":28,"collapsed":23},"Core Concepts","\u002Fcore-concepts","2.core-concepts\u002F0.index",[29,31,35,39,43,47,51,55,59,63],{"title":30,"path":26,"stem":27},"Overview",{"title":32,"path":33,"stem":34},"How It All Works","\u002Fcore-concepts\u002Farchitecture","2.core-concepts\u002F1.architecture",{"title":36,"path":37,"stem":38},"The Data Model","\u002Fcore-concepts\u002Fthe-data-model","2.core-concepts\u002F2.the-data-model",{"title":40,"path":41,"stem":42},"Layouts & Pages","\u002Fcore-concepts\u002Flayouts-and-pages","2.core-concepts\u002F3.layouts-and-pages",{"title":44,"path":45,"stem":46},"Dynamic Pages","\u002Fcore-concepts\u002Fdynamic-pages","2.core-concepts\u002F4.dynamic-pages",{"title":48,"path":49,"stem":50},"Components","\u002Fcore-concepts\u002Fcomponents","2.core-concepts\u002F5.components",{"title":52,"path":53,"stem":54},"Draft & Publish Workflow","\u002Fcore-concepts\u002Fdraft-and-publish","2.core-concepts\u002F6.draft-and-publish",{"title":56,"path":57,"stem":58},"The Admin Panel","\u002Fcore-concepts\u002Fadmin-panel","2.core-concepts\u002F7.admin-panel",{"title":60,"path":61,"stem":62},"Caching","\u002Fcore-concepts\u002Fcaching","2.core-concepts\u002F8.caching",{"title":64,"path":65,"stem":66},"Glossary","\u002Fcore-concepts\u002Fglossary","2.core-concepts\u002F9.glossary",{"title":68,"path":69,"stem":70,"children":71,"collapsed":23},"Guides","\u002Fguides","3.guides\u002F0.index",[72,73,77,81,85,89],{"title":30,"path":69,"stem":70},{"title":74,"path":75,"stem":76},"Your First Layout","\u002Fguides\u002Fyour-first-layout","3.guides\u002F1.your-first-layout",{"title":78,"path":79,"stem":80},"Your First Page Template","\u002Fguides\u002Fyour-first-page-template","3.guides\u002F2.your-first-page-template",{"title":82,"path":83,"stem":84},"Your First Component","\u002Fguides\u002Fyour-first-component","3.guides\u002F3.your-first-component",{"title":86,"path":87,"stem":88},"Alternative UI Variants","\u002Fguides\u002Falternative-ui-variants","3.guides\u002F4.alternative-ui-variants",{"title":90,"path":91,"stem":92},"Your First Dynamic Page","\u002Fguides\u002Fyour-first-dynamic-page","3.guides\u002F5.your-first-dynamic-page",{"title":94,"path":95,"stem":96,"children":97,"collapsed":23},"API Bundle (Back-End)","\u002Fapi","4.api\u002F0.index",[98,99,103,107,129,175,179,183,212,216,220,224,228,232],{"title":30,"path":95,"stem":96},{"title":100,"path":101,"stem":102},"Bundle Setup","\u002Fapi\u002Fbundle-setup","4.api\u002F02.bundle-setup",{"title":104,"path":105,"stem":106},"Configuration Reference","\u002Fapi\u002Fconfiguration","4.api\u002F03.configuration",{"title":108,"path":109,"stem":110,"children":111,"page":128},"Users","\u002Fapi\u002Fusers","4.api\u002F04.users",[112,116,120,124],{"title":113,"path":114,"stem":115},"Authentication","\u002Fapi\u002Fusers\u002Fauthentication","4.api\u002F04.users\u002F1.authentication",{"title":117,"path":118,"stem":119},"User Emails","\u002Fapi\u002Fusers\u002Fuser-emails","4.api\u002F04.users\u002F2.user-emails",{"title":121,"path":122,"stem":123},"Access Control","\u002Fapi\u002Fusers\u002Faccess-control","4.api\u002F04.users\u002F3.access-control",{"title":125,"path":126,"stem":127},"Sites with Non-Admin Users","\u002Fapi\u002Fusers\u002Fnon-admin-users","4.api\u002F04.users\u002F4.non-admin-users",false,{"title":48,"path":130,"stem":131,"children":132,"page":128},"\u002Fapi\u002Fcomponents","4.api\u002F05.components",[133,137,158,171],{"title":134,"path":135,"stem":136},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F05.components\u002F1.creating-components",{"title":138,"path":139,"stem":140,"children":141,"page":128},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F05.components\u002F2.annotations",[142,146,150,154],{"title":143,"path":144,"stem":145},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F05.components\u002F2.annotations\u002F1.publishable",{"title":147,"path":148,"stem":149},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F05.components\u002F2.annotations\u002F2.uploadable",{"title":151,"path":152,"stem":153},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F05.components\u002F2.annotations\u002F3.timestamped",{"title":155,"path":156,"stem":157},"Explicit Allow Only","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fexplicit-allow-only","4.api\u002F05.components\u002F2.annotations\u002F4.explicit-allow-only",{"title":159,"path":160,"stem":161,"children":162,"page":128},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F05.components\u002F3.built-ins",[163,167],{"title":164,"path":165,"stem":166},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F05.components\u002F3.built-ins\u002F1.collection-component",{"title":168,"path":169,"stem":170},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F05.components\u002F3.built-ins\u002F2.form-component",{"title":172,"path":173,"stem":174},"Groups & Positions","\u002Fapi\u002Fcomponents\u002Fcomponent-groups","4.api\u002F05.components\u002F4.component-groups",{"title":176,"path":177,"stem":178},"Page Data & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F06.dynamic-pages",{"title":180,"path":181,"stem":182},"Routes","\u002Fapi\u002Froutes","4.api\u002F07.routes",{"title":184,"path":185,"stem":186,"children":187,"page":128},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F08.data-fixtures",[188,192,196,200,204,208],{"title":189,"path":190,"stem":191},"Getting Started with Fixtures","\u002Fapi\u002Fdata-fixtures\u002Fgetting-started","4.api\u002F08.data-fixtures\u002F1.getting-started",{"title":193,"path":194,"stem":195},"Writing a Scaffold","\u002Fapi\u002Fdata-fixtures\u002Fwriting-a-scaffold","4.api\u002F08.data-fixtures\u002F2.writing-a-scaffold",{"title":197,"path":198,"stem":199},"Builder Reference","\u002Fapi\u002Fdata-fixtures\u002Fbuilder-reference","4.api\u002F08.data-fixtures\u002F3.builder-reference",{"title":201,"path":202,"stem":203},"Seeding Content","\u002Fapi\u002Fdata-fixtures\u002Fseeding-content","4.api\u002F08.data-fixtures\u002F4.seeding-content",{"title":205,"path":206,"stem":207},"Appending & Multiple Scaffolds","\u002Fapi\u002Fdata-fixtures\u002Fappending","4.api\u002F08.data-fixtures\u002F5.appending",{"title":209,"path":210,"stem":211},"Generating Fixtures","\u002Fapi\u002Fdata-fixtures\u002Fgenerating-fixtures","4.api\u002F08.data-fixtures\u002F6.generating-fixtures",{"title":213,"path":214,"stem":215},"Real-Time (Mercure)","\u002Fapi\u002Freal-time","4.api\u002F09.real-time",{"title":217,"path":218,"stem":219},"Versions & Conflicts","\u002Fapi\u002Fversions-and-conflicts","4.api\u002F09.versions-and-conflicts",{"title":221,"path":222,"stem":223},"HTTP Caching","\u002Fapi\u002Fhttp-caching","4.api\u002F10.http-caching",{"title":225,"path":226,"stem":227},"Orphaned Data","\u002Fapi\u002Forphaned-data","4.api\u002F11.orphaned-data",{"title":229,"path":230,"stem":231},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F12.console-commands",{"title":233,"path":234,"stem":235},"Debugging & Errors","\u002Fapi\u002Fdebugging","4.api\u002F13.debugging",{"title":237,"path":238,"stem":239,"children":240,"collapsed":23},"Nuxt Module (Front-End)","\u002Fnuxt-module","5.nuxt-module\u002F0.index",[241,242,246,259,279,308,329,460,494,497,525,529],{"title":30,"path":238,"stem":239},{"title":243,"path":244,"stem":245},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F01.module-setup",{"title":247,"path":248,"stem":249,"children":250,"page":128},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F02.configuration",[251,255],{"title":252,"path":253,"stem":254},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F02.configuration\u002F1.nuxt-config",{"title":256,"path":257,"stem":258},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F02.configuration\u002F2.site-config-and-seo",{"title":260,"path":261,"stem":262,"children":263,"page":128},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F03.building-your-ui",[264,268,272,275],{"title":265,"path":266,"stem":267},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F03.building-your-ui\u002F1.creating-layouts",{"title":269,"path":270,"stem":271},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F03.building-your-ui\u002F2.creating-page-templates",{"title":48,"path":273,"stem":274},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F03.building-your-ui\u002F3.creating-components",{"title":276,"path":277,"stem":278},"CLI Generator","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcwa-cli","5.nuxt-module\u002F03.building-your-ui\u002F4.cwa-cli",{"title":280,"path":281,"stem":282,"children":283,"page":128},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F04.component-helpers",[284,288,292,296,300,304],{"title":285,"path":286,"stem":287},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F04.component-helpers\u002F1.images-and-uploads",{"title":289,"path":290,"stem":291},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F04.component-helpers\u002F2.collections-and-pagination",{"title":293,"path":294,"stem":295},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F04.component-helpers\u002F3.html-content",{"title":297,"path":298,"stem":299},"Rich-Text Editor","\u002Fnuxt-module\u002Fcomponent-helpers\u002Frich-text-editor","5.nuxt-module\u002F04.component-helpers\u002F4.rich-text-editor",{"title":301,"path":302,"stem":303},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F04.component-helpers\u002F5.real-time-updates",{"title":305,"path":306,"stem":307},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F04.component-helpers\u002F6.forms",{"title":309,"path":310,"stem":311,"children":312,"page":128},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F05.cwa-components",[313,317,321,325],{"title":314,"path":315,"stem":316},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F05.cwa-components\u002F1.cwa-component-group",{"title":318,"path":319,"stem":320},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F05.cwa-components\u002F2.cwa-page",{"title":322,"path":323,"stem":324},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F05.cwa-components\u002F3.cwa-link",{"title":326,"path":327,"stem":328},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F05.cwa-components\u002F5.cwa-default-layout",{"title":330,"path":331,"stem":332,"children":333,"page":128},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F06.composables",[334,337,345,370,390,415,435],{"title":30,"path":335,"stem":336},"\u002Fnuxt-module\u002Fcomposables\u002Foverview","5.nuxt-module\u002F06.composables\u002F0.overview",{"title":338,"path":339,"stem":340,"children":341,"page":128},"Layout","\u002Fnuxt-module\u002Fcomposables\u002Flayout","5.nuxt-module\u002F06.composables\u002F1.layout",[342],{"title":338,"path":343,"stem":344},"\u002Fnuxt-module\u002Fcomposables\u002Flayout\u002Fuse-cwa-layout","5.nuxt-module\u002F06.composables\u002F1.layout\u002F1.use-cwa-layout",{"title":346,"path":347,"stem":348,"children":349,"page":128},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F06.composables\u002F2.component",[350,354,358,362,366],{"title":351,"path":352,"stem":353},"Component (recommended)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-component","5.nuxt-module\u002F06.composables\u002F2.component\u002F1.use-cwa-component",{"title":355,"path":356,"stem":357},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F06.composables\u002F2.component\u002F2.use-cwa-resource",{"title":359,"path":360,"stem":361},"File Field","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-file-field","5.nuxt-module\u002F06.composables\u002F2.component\u002F3.use-cwa-file-field",{"title":363,"path":364,"stem":365},"Collection Pagination","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-pagination","5.nuxt-module\u002F06.composables\u002F2.component\u002F4.use-cwa-collection-pagination",{"title":367,"path":368,"stem":369},"Collection Resource (deprecated)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F06.composables\u002F2.component\u002F9.use-cwa-collection-resource",{"title":371,"path":372,"stem":373,"children":374,"page":128},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fform","5.nuxt-module\u002F06.composables\u002F3.form",[375,378,382,386],{"title":371,"path":376,"stem":377},"\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form","5.nuxt-module\u002F06.composables\u002F3.form\u002F1.use-cwa-form",{"title":379,"path":380,"stem":381},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-input","5.nuxt-module\u002F06.composables\u002F3.form\u002F2.use-cwa-form-input",{"title":383,"path":384,"stem":385},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F06.composables\u002F3.form\u002F3.use-cwa-form-repeated",{"title":387,"path":388,"stem":389},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-collection","5.nuxt-module\u002F06.composables\u002F3.form\u002F4.use-cwa-form-collection",{"title":391,"path":392,"stem":393,"children":394,"page":128},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F06.composables\u002F4.admin-manager",[395,399,403,407,411],{"title":396,"path":397,"stem":398},"Manager Tab","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-manager-tab","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F1.use-cwa-resource-manager-tab",{"title":400,"path":401,"stem":402},"Resource Model","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-model","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F2.use-cwa-resource-model",{"title":404,"path":405,"stem":406},"Resource Upload","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-upload","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F3.use-cwa-resource-upload",{"title":408,"path":409,"stem":410},"Remote Changes","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fon-remote-change","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F4.on-remote-change",{"title":412,"path":413,"stem":414},"Real-Time Events","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-realtime","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F5.use-cwa-realtime",{"title":416,"path":417,"stem":418,"children":419,"page":128},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F06.composables\u002F5.utilities",[420,424,428,432],{"title":421,"path":422,"stem":423},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F1.use-cwa-resource-endpoint",{"title":425,"path":426,"stem":427},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F2.use-query-bound-model",{"title":429,"path":430,"stem":431},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F3.use-cwa-resource-route",{"title":293,"path":433,"stem":434},"\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-html-content","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F4.use-html-content",{"title":436,"path":437,"stem":438,"children":439,"page":128},"Auth","\u002Fnuxt-module\u002Fcomposables\u002Fauth","5.nuxt-module\u002F06.composables\u002F6.auth",[440,444,448,452,456],{"title":441,"path":442,"stem":443},"Login","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-login","5.nuxt-module\u002F06.composables\u002F6.auth\u002F1.use-login",{"title":445,"path":446,"stem":447},"Forgot Password","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-forgot-password","5.nuxt-module\u002F06.composables\u002F6.auth\u002F2.use-forgot-password",{"title":449,"path":450,"stem":451},"Reset Password","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-reset-password","5.nuxt-module\u002F06.composables\u002F6.auth\u002F3.use-reset-password",{"title":453,"path":454,"stem":455},"Verify Email","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-verify-email","5.nuxt-module\u002F06.composables\u002F6.auth\u002F4.use-verify-email",{"title":457,"path":458,"stem":459},"Resend Verify Email","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-resend-verify-email","5.nuxt-module\u002F06.composables\u002F6.auth\u002F5.use-resend-verify-email",{"title":461,"path":462,"stem":463,"children":464,"page":128},"Cwa Api","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F07.cwa-api",[465,468,472,476,479,482,486,490],{"title":30,"path":466,"stem":467},"\u002Fnuxt-module\u002Fcwa-api\u002Foverview","5.nuxt-module\u002F07.cwa-api\u002F1.overview",{"title":469,"path":470,"stem":471},"Resources","\u002Fnuxt-module\u002Fcwa-api\u002Fresources","5.nuxt-module\u002F07.cwa-api\u002F2.resources",{"title":473,"path":474,"stem":475},"Resources Manager","\u002Fnuxt-module\u002Fcwa-api\u002Fresources-manager","5.nuxt-module\u002F07.cwa-api\u002F3.resources-manager",{"title":436,"path":477,"stem":478},"\u002Fnuxt-module\u002Fcwa-api\u002Fauth","5.nuxt-module\u002F07.cwa-api\u002F4.auth",{"title":305,"path":480,"stem":481},"\u002Fnuxt-module\u002Fcwa-api\u002Fforms","5.nuxt-module\u002F07.cwa-api\u002F5.forms",{"title":483,"path":484,"stem":485},"Admin","\u002Fnuxt-module\u002Fcwa-api\u002Fadmin","5.nuxt-module\u002F07.cwa-api\u002F6.admin",{"title":487,"path":488,"stem":489},"Site Config","\u002Fnuxt-module\u002Fcwa-api\u002Fsite-config","5.nuxt-module\u002F07.cwa-api\u002F7.site-config",{"title":491,"path":492,"stem":493},"Orphaned Resources","\u002Fnuxt-module\u002Fcwa-api\u002Forphaned-resources","5.nuxt-module\u002F07.cwa-api\u002F8.orphaned-resources",{"title":113,"path":495,"stem":496},"\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F08.authentication",{"title":498,"path":499,"stem":500,"children":501,"page":128},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[502,505,509,513,517,521],{"title":30,"path":503,"stem":504},"\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":506,"path":507,"stem":508},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":510,"path":511,"stem":512},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":514,"path":515,"stem":516},"Styling","\u002Fnuxt-module\u002Fcwa-layer\u002Fstyling","5.nuxt-module\u002F9.cwa-layer\u002F4.styling",{"title":518,"path":519,"stem":520},"Date Pickers","\u002Fnuxt-module\u002Fcwa-layer\u002Fdate-pickers","5.nuxt-module\u002F9.cwa-layer\u002F5.date-pickers",{"title":522,"path":523,"stem":524},"Maintenance","\u002Fnuxt-module\u002Fcwa-layer\u002Fmaintenance","5.nuxt-module\u002F9.cwa-layer\u002F6.maintenance",{"title":526,"path":527,"stem":528},"PWA & Offline","\u002Fnuxt-module\u002Fpwa","5.nuxt-module\u002F91.pwa",{"title":530,"path":531,"stem":532},"Page Caching","\u002Fnuxt-module\u002Fpage-caching","5.nuxt-module\u002F92.page-caching",{"title":534,"path":535,"stem":536,"children":537,"collapsed":23},"Deployment & Operations","\u002Fdeployment","6.deployment\u002F0.index",[538,540,544,548,552,556,560,564,568,572,576,580,584,588,592,596,600],{"title":539,"path":535,"stem":536},"Deploying a CWA Site",{"title":541,"path":542,"stem":543},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":545,"path":546,"stem":547},"Deploy to One Server","\u002Fdeployment\u002Fone-server","6.deployment\u002F1.one-server",{"title":549,"path":550,"stem":551},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":553,"path":554,"stem":555},"Moving From One Server to Kubernetes","\u002Fdeployment\u002Fmoving-to-kubernetes","6.deployment\u002F2.moving-to-kubernetes",{"title":557,"path":558,"stem":559},"Scaled Mode","\u002Fdeployment\u002Fscaled-mode","6.deployment\u002F2.scaled-mode",{"title":561,"path":562,"stem":563},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"title":565,"path":566,"stem":567},"Migrations and Backups","\u002Fdeployment\u002Fmigrations-and-backups","6.deployment\u002F3.migrations-and-backups",{"title":569,"path":570,"stem":571},"CI\u002FCD Variables","\u002Fdeployment\u002Fvariables","6.deployment\u002F4.variables",{"title":573,"path":574,"stem":575},"Cloudflare","\u002Fdeployment\u002Fcloudflare","6.deployment\u002F5.cloudflare",{"title":577,"path":578,"stem":579},"Origin Protection","\u002Fdeployment\u002Forigin-protection","6.deployment\u002F5.origin-protection",{"title":581,"path":582,"stem":583},"Load Testing","\u002Fdeployment\u002Fload-testing","6.deployment\u002F6.load-testing",{"title":585,"path":586,"stem":587},"Performance Audit","\u002Fdeployment\u002Fperformance-audit","6.deployment\u002F6.performance-audit",{"title":589,"path":590,"stem":591},"Reading Lighthouse Scores","\u002Fdeployment\u002Freading-lighthouse-scores","6.deployment\u002F6.reading-lighthouse-scores",{"title":593,"path":594,"stem":595},"Browser Tests","\u002Fdeployment\u002Fbrowser-tests","6.deployment\u002F7.browser-tests",{"title":597,"path":598,"stem":599},"Faster Functional Tests","\u002Fdeployment\u002Ffaster-functional-tests","6.deployment\u002F7.faster-functional-tests",{"title":601,"path":602,"stem":603},"Troubleshooting","\u002Fdeployment\u002Ftroubleshooting","6.deployment\u002F7.troubleshooting",{"id":605,"title":64,"badge":606,"body":607,"description":1077,"extension":1078,"links":606,"meta":1079,"navigation":23,"path":65,"seo":1080,"stem":66,"__hash__":1081},"docs\u002F2.core-concepts\u002F9.glossary.md",null,{"type":608,"value":609,"toc":1040},"minimark",[610,618,623,627,639,643,649,653,669,673,697,701,710,714,723,726,735,739,768,772,783,787,793,799,813,817,827,831,836,840,844,861,865,876,880,885,889,903,907,924,928,936,940,944,953,957,968,973,980,984,991,995,1004,1008,1027,1031],[611,612,613,614,617],"p",{},"Each term has a short definition and a link to the page that covers it. ",[615,616,16],"a",{"href":17}," explains the main ones in more words, for readers about to start the guides.",[619,620,622],"h2",{"id":621},"content-structure","Content structure",[624,625,338],"h3",{"id":626},"layout",[611,628,629,630,634,635,638],{},"The outer shell a page renders in: header, footer, navigation. A layout is a record in the database, and its Vue file is in ",[631,632,633],"code",{},"app\u002Fapp\u002Fcwa\u002Flayouts\u002F",". See ",[615,636,40],{"href":637},"\u002Fcore-concepts\u002Flayouts-and-pages#layouts",".",[624,640,642],{"id":641},"page","Page",[611,644,645,646,638],{},"A page saved in the database. It says which layout and page template to use, and holds the page's component groups. A page usually has a route. See ",[615,647,40],{"href":648},"\u002Fcore-concepts\u002Flayouts-and-pages#pages",[624,650,652],{"id":651},"page-template","Page template",[611,654,655,656,659,660,664,665,638],{},"The Vue file that arranges a page's component groups on screen, in ",[631,657,658],{},"app\u002Fapp\u002Fcwa\u002Fpages\u002F",". In the admin it's the ",[661,662,663],"strong",{},"Page UI",". Not the same as a ",[615,666,668],{"href":667},"#template-page","template page",[624,670,672],{"id":671},"template-page","Template page",[611,674,675,676,679,680,684,685,688,689,634,693,638],{},"A page that is the shared design for one type of page data, such as every blog article. It has ",[631,677,678],{},"isTemplate: true"," and no route of its own: each ",[615,681,683],{"href":682},"#page-data","page data"," item of that type is shown through it. In the admin it's a ",[661,686,687],{},"Dynamic"," page. Not the same as a ",[615,690,692],{"href":691},"#page-template","page template",[615,694,696],{"href":695},"\u002Fcore-concepts\u002Flayouts-and-pages#template-pages-istemplate-true","Layouts & Pages › Template Pages",[624,698,700],{"id":699},"page-data","Page data",[611,702,703,704,707,708,638],{},"One item of repeating content, such as one blog article, with its own fields and its own route. Its PHP class extends ",[631,705,706],{},"AbstractPageData",", and it is shown through a template page. See ",[615,709,44],{"href":45},[624,711,713],{"id":712},"route","Route",[611,715,716,717,720,721,638],{},"The link from a URL path, such as ",[631,718,719],{},"\u002Fabout-us",", to the page or page data item shown there. A route can also redirect to another route, and can have a go-live date. See ",[615,722,180],{"href":181},[624,724,346],{"id":725},"component",[611,727,728,729,732,733,638],{},"One piece of content, such as a title, a quote or an image. A component type is a PHP entity that extends ",[631,730,731],{},"AbstractComponent",", plus a Vue file that displays it and admin tabs that edit it. See ",[615,734,48],{"href":49},[624,736,738],{"id":737},"component-group","Component group",[611,740,741,742,745,746,749,750,754,755,758,759,763,764,638],{},"A named, ordered list of components, such as ",[631,743,744],{},"main"," or ",[631,747,748],{},"banner",", that belongs to a layout, page or component. Each component in it sits in a ",[615,751,753],{"href":752},"#component-position","component position",". A Vue file declares the group with ",[631,756,757],{},"\u003CCwaComponentGroup reference=\"main\">",", and editors add components to it in ",[615,760,762],{"href":761},"#edit-mode","edit mode",". Also called a group. See ",[615,765,766],{"href":315},[631,767,314],{},[624,769,771],{"id":770},"component-position","Component position",[611,773,774,775,779,780,638],{},"The entry that puts one component into a component group and sets where it comes in the group's order. Also called a position. A ",[615,776,778],{"href":777},"#dynamic-position","dynamic position"," holds a binding to a page data property instead of a component. The admin creates positions when an editor adds a component. See ",[615,781,36],{"href":782},"\u002Fcore-concepts\u002Fthe-data-model#componentposition",[624,784,786],{"id":785},"dynamic-position","Dynamic position",[611,788,789,790,638],{},"A component position with no component of its own: it shows a component from the current page data item instead, such as each article's body. It sits in a component group on a template page, so every item shown through that template page shows its own component there. See ",[615,791,44],{"href":792},"\u002Fcore-concepts\u002Fdynamic-pages#linking-a-page-data-field-to-a-component-position",[624,794,796],{"id":795},"uicomponent",[631,797,798],{},"uiComponent",[611,800,801,802,805,806,634,809,638],{},"The name of the Vue file that displays a layout, page or component, saved with it in the database. For the layout file ",[631,803,804],{},"landing.vue",", it's ",[631,807,808],{},"CwaLayoutLanding",[615,810,812],{"href":811},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts#how-uicomponent-names-resolve","How uiComponent names resolve",[624,814,816],{"id":815},"stranded-component-group","Stranded component group",[611,818,819,820,823,824,638],{},"A component group still attached to a record after its ",[631,821,822],{},"reference"," was renamed in code, so visitors no longer see it. The admin bar offers to merge or delete it. See ",[615,825,522],{"href":826},"\u002Fnuxt-module\u002Fcwa-layer\u002Fmaintenance#stranded-component-groups",[624,828,830],{"id":829},"orphan","Orphan",[611,832,833,834,638],{},"A record that nothing uses: a component nothing displays, a component position with neither a component nor a page data property, or a component group nothing owns. An orphaned file is a stored upload that no row references. The admin and console commands find and delete them. See ",[615,835,225],{"href":226},[619,837,839],{"id":838},"identifying-and-loading","Identifying and loading",[624,841,843],{"id":842},"iri","IRI",[611,845,846,847,745,850,853,854,856,857,638],{},"The path that identifies a record in the API, such as ",[631,848,849],{},"\u002F_\u002Fpages\u002F018e…",[631,851,852],{},"\u002Fcomponent\u002Ftitles\u002F018e…",". The module passes a record's IRI to its Vue file as the ",[631,855,842],{}," prop, and the API uses IRIs as cache tags. See ",[615,858,860],{"href":859},"\u002Fgetting-started\u002Fkey-ideas#how-records-are-identified","Key Ideas › How records are identified",[624,862,864],{"id":863},"manifest","Manifest",[611,866,867,868,871,872,638],{},"The list of everything a page displays, which the module fetches with the route so it can load the whole page at once. It comes from ",[631,869,870],{},"GET \u002F_\u002Fresource_manifest\u002F{path}",", grouped by how deeply each item is nested. See ",[615,873,875],{"href":874},"\u002Fapi\u002Froutes#the-resource-manifest","Routes › The Resource Manifest",[624,877,879],{"id":878},"draft-and-published","Draft and published",[611,881,882,883,638],{},"A publishable component has two versions. Editors change the draft; visitors see the published version until an editor publishes it. See ",[615,884,52],{"href":53},[624,886,888],{"id":887},"edit-mode","Edit mode",[611,890,891,892,895,896,899,900,638],{},"What an editor turns on with ",[661,893,894],{},"Edit"," in the admin bar. Empty component groups show a ",[661,897,898],{},"+",", and clicking a component selects it and opens the manager panel. See ",[615,901,56],{"href":902},"\u002Fcore-concepts\u002Fadmin-panel#edit-mode",[624,904,906],{"id":905},"layer","Layer",[611,908,909,912,913,916,917,920,921,638],{},[631,910,911],{},"@cwa\u002Fnuxt"," is installed as a Nuxt layer (",[631,914,915],{},"extends: ['@cwa\u002Fnuxt\u002Flayer']","). The layer adds the module, the sign-in pages and the ",[631,918,919],{},"\u002F_cwa"," admin pages. See ",[615,922,923],{"href":503},"The CWA Layer",[624,925,927],{"id":926},"scaffold","Scaffold",[611,929,930,931,634,934,638],{},"A PHP class that creates layouts, pages, routes and components in code, to fill the database with starting content. It extends ",[631,932,933],{},"AbstractCwaScaffold",[615,935,184],{"href":190},[619,937,939],{"id":938},"caching-and-deployment","Caching and deployment",[624,941,943],{"id":942},"souin","Souin",[611,945,946,947,950,951,638],{},"The HTTP cache inside Caddy, in the template's php container. It stores page HTML and ",[631,948,949],{},"\u002F_api"," responses, and drops them when the API purges their tags. See ",[615,952,60],{"href":61},[624,954,956],{"id":955},"cache-tag","Cache tag",[611,958,959,960,963,964,638],{},"A label on a cached response that lets it be purged. CWA tags each response with the IRIs of the resources in it, in the ",[631,961,962],{},"Surrogate-Key"," header. See ",[615,965,967],{"href":966},"\u002Fapi\u002Fhttp-caching#cache-tags-and-purging","HTTP Caching › Cache Tags and Purging",[624,969,971],{"id":970},"cwa-html",[631,972,970],{},[611,974,975,976,638],{},"The cache tag on every page that Nuxt renders. Purging it drops every cached page but keeps cached API responses. Saving site config and every deploy purge it. See ",[615,977,979],{"href":978},"\u002Fapi\u002Fhttp-caching#purging-every-rendered-page","Purging Every Rendered Page",[624,981,983],{"id":982},"purge","Purge",[611,985,986,987,638],{},"Removing cached responses by tag, so the next request gets a fresh copy. A full flush empties the whole cache. See ",[615,988,990],{"href":989},"\u002Fcore-concepts\u002Fcaching#purges","Caching › Purges",[624,992,994],{"id":993},"mercure","Mercure",[611,996,997,998,1001,1002,638],{},"The real-time hub, inside Caddy in the template. The API publishes every change to it. Each open browser is told about the change and shows an ",[661,999,1000],{},"Update"," notice that applies it without a reload. See ",[615,1003,301],{"href":214},[624,1005,1007],{"id":1006},"track","Track",[611,1009,1010,1011,1014,1015,1018,1019,745,1022,634,1025,638],{},"A deploy target in the template's pipeline: ",[631,1012,1013],{},"stable"," (production), ",[631,1016,1017],{},"staging",", ",[631,1020,1021],{},"canary",[631,1023,1024],{},"review",[615,1026,561],{"href":562},[619,1028,1030],{"id":1029},"next-build-your-first-layout","Next: Build Your First Layout",[611,1032,1033,1034,1037,1038,638],{},"The ",[615,1035,1036],{"href":69},"guides"," put these ideas to work. Start with ",[615,1039,74],{"href":75},{"title":1041,"searchDepth":1042,"depth":1042,"links":1043},"",2,[1044,1060,1068,1076],{"id":621,"depth":1042,"text":622,"children":1045},[1046,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059],{"id":626,"depth":1047,"text":338},3,{"id":641,"depth":1047,"text":642},{"id":651,"depth":1047,"text":652},{"id":671,"depth":1047,"text":672},{"id":699,"depth":1047,"text":700},{"id":712,"depth":1047,"text":713},{"id":725,"depth":1047,"text":346},{"id":737,"depth":1047,"text":738},{"id":770,"depth":1047,"text":771},{"id":785,"depth":1047,"text":786},{"id":795,"depth":1047,"text":798},{"id":815,"depth":1047,"text":816},{"id":829,"depth":1047,"text":830},{"id":838,"depth":1042,"text":839,"children":1061},[1062,1063,1064,1065,1066,1067],{"id":842,"depth":1047,"text":843},{"id":863,"depth":1047,"text":864},{"id":878,"depth":1047,"text":879},{"id":887,"depth":1047,"text":888},{"id":905,"depth":1047,"text":906},{"id":926,"depth":1047,"text":927},{"id":938,"depth":1042,"text":939,"children":1069},[1070,1071,1072,1073,1074,1075],{"id":942,"depth":1047,"text":943},{"id":955,"depth":1047,"text":956},{"id":970,"depth":1047,"text":970},{"id":982,"depth":1047,"text":983},{"id":993,"depth":1047,"text":994},{"id":1006,"depth":1047,"text":1007},{"id":1029,"depth":1042,"text":1030},"Every CWA term used in these docs, defined once, from IRI and component position to manifest, track, Souin and orphan.","md",{},{"title":64,"description":1077},"SwYXRuKYgctnkBuupXkykvXVV6PML36eTirQzB3Tc88",[1083,1085],{"title":60,"path":61,"stem":62,"description":1084,"children":-1},"Every cache between a visitor and the API in a CWA site, from the service worker to Cloudflare, Souin and the API's cache tags. What each one stores, how long, and what clears it.",{"title":30,"path":69,"stem":70,"description":1086,"children":-1},"Step-by-step guides that build a small CWA site, from a layout to a dynamic page. Who they're for and the order to follow.",1793565689298]