[{"data":1,"prerenderedAt":1576},["ShallowReactive",2],{"navigation":3,"\u002Fnuxt-module\u002Fmodule-setup":342,"\u002Fnuxt-module\u002Fmodule-setup-surround":1571},[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":146,"badge":344,"body":347,"description":1565,"extension":1566,"links":1567,"meta":1568,"navigation":993,"path":147,"seo":1569,"stem":148,"__hash__":1570},"docs\u002F5.nuxt-module\u002F1.module-setup.md",{"label":345,"color":346},"Draft","amber",{"type":348,"value":349,"toc":1551},"minimark",[350,378,381,385,410,417,567,571,578,682,685,689,695,832,836,844,854,894,899,907,916,948,955,964,1164,1168,1178,1185,1190,1193,1276,1282,1286,1289,1358,1362,1369,1451,1454,1458,1461,1516,1547],[351,352,353,357,358,365,366,371,372,377],"p",{},[354,355,356],"code",{},"@cwa\u002Fnuxt"," is the front-end half of a CWA application. It connects your ",[359,360,364],"a",{"href":361,"rel":362},"https:\u002F\u002Fnuxt.com",[363],"nofollow","Nuxt"," application to a ",[359,367,370],{"href":368,"rel":369},"https:\u002F\u002Fsymfony.com",[363],"Symfony"," API powered by ",[359,373,376],{"href":374,"rel":375},"https:\u002F\u002Fapi-platform.com",[363],"API Platform",", providing automatic route resolution, a reactive resource store, real-time updates via Mercure, authentication pages, a full admin CMS panel, and composables for every content pattern.",[351,379,380],{},"You own your Vue templates — CWA drives what data they receive and in what order they render.",[382,383,11],"h2",{"id":384},"installation",[386,387,392],"pre",{"className":388,"code":389,"language":390,"meta":391,"style":391},"language-bash shiki shiki-themes github-light github-dark material-theme-palenight","pnpm add @cwa\u002Fnuxt\n","bash","",[354,393,394],{"__ignoreMap":391},[395,396,399,403,407],"span",{"class":397,"line":398},"line",1,[395,400,402],{"class":401},"sRCss","pnpm",[395,404,406],{"class":405},"sLL54"," add",[395,408,409],{"class":405}," @cwa\u002Fnuxt\n",[351,411,412,413,416],{},"The module requires these peer modules — add them all to your ",[354,414,415],{},"nuxt.config.ts",":",[386,418,422],{"className":419,"code":420,"language":421,"meta":391,"style":391},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n    modules: [\n        '@nuxt\u002Fui',\n        '@nuxt\u002Fimage',\n        '@nuxtjs\u002Fseo',\n        '@pinia\u002Fnuxt',\n        '@pinia-plugin-persistedstate\u002Fnuxt',\n        'nuxt-security',\n        '@cwa\u002Fnuxt'   \u002F\u002F must come after its peers\n    ]\n})\n","ts",[354,423,424,430,452,464,480,492,504,516,528,540,552,558],{"__ignoreMap":391},[395,425,426],{"class":397,"line":398},[395,427,429],{"class":428},"sTBSN","\u002F\u002F nuxt.config.ts\n",[395,431,433,437,440,444,448],{"class":397,"line":432},2,[395,434,436],{"class":435},"sm4w6","export",[395,438,439],{"class":435}," default",[395,441,443],{"class":442},"sKpYG"," defineNuxtConfig",[395,445,447],{"class":446},"sPB8G","(",[395,449,451],{"class":450},"sOvfz","{\n",[395,453,455,459,461],{"class":397,"line":454},3,[395,456,458],{"class":457},"sDHlG","    modules",[395,460,416],{"class":450},[395,462,463],{"class":446}," [\n",[395,465,467,471,474,477],{"class":397,"line":466},4,[395,468,470],{"class":469},"seSrl","        '",[395,472,473],{"class":405},"@nuxt\u002Fui",[395,475,476],{"class":469},"'",[395,478,479],{"class":450},",\n",[395,481,483,485,488,490],{"class":397,"line":482},5,[395,484,470],{"class":469},[395,486,487],{"class":405},"@nuxt\u002Fimage",[395,489,476],{"class":469},[395,491,479],{"class":450},[395,493,495,497,500,502],{"class":397,"line":494},6,[395,496,470],{"class":469},[395,498,499],{"class":405},"@nuxtjs\u002Fseo",[395,501,476],{"class":469},[395,503,479],{"class":450},[395,505,507,509,512,514],{"class":397,"line":506},7,[395,508,470],{"class":469},[395,510,511],{"class":405},"@pinia\u002Fnuxt",[395,513,476],{"class":469},[395,515,479],{"class":450},[395,517,519,521,524,526],{"class":397,"line":518},8,[395,520,470],{"class":469},[395,522,523],{"class":405},"@pinia-plugin-persistedstate\u002Fnuxt",[395,525,476],{"class":469},[395,527,479],{"class":450},[395,529,531,533,536,538],{"class":397,"line":530},9,[395,532,470],{"class":469},[395,534,535],{"class":405},"nuxt-security",[395,537,476],{"class":469},[395,539,479],{"class":450},[395,541,543,545,547,549],{"class":397,"line":542},10,[395,544,470],{"class":469},[395,546,356],{"class":405},[395,548,476],{"class":469},[395,550,551],{"class":428},"   \u002F\u002F must come after its peers\n",[395,553,555],{"class":397,"line":554},11,[395,556,557],{"class":446},"    ]\n",[395,559,561,564],{"class":397,"line":560},12,[395,562,563],{"class":450},"}",[395,565,566],{"class":446},")\n",[382,568,570],{"id":569},"minimum-configuration","Minimum Configuration",[351,572,573,574,577],{},"Set your API URL via ",[354,575,576],{},"runtimeConfig",". The browser URL is used client-side; the server URL is used during SSR (can be an internal Docker network address):",[386,579,581],{"className":419,"code":580,"language":421,"meta":391,"style":391},"export default defineNuxtConfig({\n    runtimeConfig: {\n        public: {\n            cwa: {\n                apiUrl: 'http:\u002F\u002Fapi-internal',             \u002F\u002F server-side (SSR)\n                apiUrlBrowser: 'https:\u002F\u002Fapi.example.com'  \u002F\u002F client-side\n            }\n        }\n    }\n})\n",[354,582,583,595,605,614,623,644,661,666,671,676],{"__ignoreMap":391},[395,584,585,587,589,591,593],{"class":397,"line":398},[395,586,436],{"class":435},[395,588,439],{"class":435},[395,590,443],{"class":442},[395,592,447],{"class":446},[395,594,451],{"class":450},[395,596,597,600,602],{"class":397,"line":432},[395,598,599],{"class":457},"    runtimeConfig",[395,601,416],{"class":450},[395,603,604],{"class":450}," {\n",[395,606,607,610,612],{"class":397,"line":454},[395,608,609],{"class":457},"        public",[395,611,416],{"class":450},[395,613,604],{"class":450},[395,615,616,619,621],{"class":397,"line":466},[395,617,618],{"class":457},"            cwa",[395,620,416],{"class":450},[395,622,604],{"class":450},[395,624,625,628,630,633,636,638,641],{"class":397,"line":482},[395,626,627],{"class":457},"                apiUrl",[395,629,416],{"class":450},[395,631,632],{"class":469}," '",[395,634,635],{"class":405},"http:\u002F\u002Fapi-internal",[395,637,476],{"class":469},[395,639,640],{"class":450},",",[395,642,643],{"class":428},"             \u002F\u002F server-side (SSR)\n",[395,645,646,649,651,653,656,658],{"class":397,"line":494},[395,647,648],{"class":457},"                apiUrlBrowser",[395,650,416],{"class":450},[395,652,632],{"class":469},[395,654,655],{"class":405},"https:\u002F\u002Fapi.example.com",[395,657,476],{"class":469},[395,659,660],{"class":428},"  \u002F\u002F client-side\n",[395,662,663],{"class":397,"line":506},[395,664,665],{"class":450},"            }\n",[395,667,668],{"class":397,"line":518},[395,669,670],{"class":450},"        }\n",[395,672,673],{"class":397,"line":530},[395,674,675],{"class":450},"    }\n",[395,677,678,680],{"class":397,"line":542},[395,679,563],{"class":450},[395,681,566],{"class":446},[351,683,684],{},"In a Docker Compose setup these are typically different — the internal hostname resolves only within the Docker network.",[382,686,688],{"id":687},"full-cwa-config-reference","Full cwa: Config Reference",[351,690,691,692,694],{},"See ",[359,693,155],{"href":156}," for the complete reference. The key options at a glance:",[386,696,698],{"className":419,"code":697,"language":421,"meta":391,"style":391},"export default defineNuxtConfig({\n    cwa: {\n        resources: { \u002F* your CMS component types *\u002F },\n        layouts:   { \u002F* your layout component types *\u002F },\n        pages:     { \u002F* your page template component types *\u002F },\n        pageData:  { \u002F* your PageData resource classes *\u002F },\n        pagesDepth: 2,  \u002F\u002F nested page depth (default: 4)\n        siteConfig: { siteName: 'My App' }\n    }\n})\n",[354,699,700,712,721,737,752,767,782,798,822,826],{"__ignoreMap":391},[395,701,702,704,706,708,710],{"class":397,"line":398},[395,703,436],{"class":435},[395,705,439],{"class":435},[395,707,443],{"class":442},[395,709,447],{"class":446},[395,711,451],{"class":450},[395,713,714,717,719],{"class":397,"line":432},[395,715,716],{"class":457},"    cwa",[395,718,416],{"class":450},[395,720,604],{"class":450},[395,722,723,726,728,731,734],{"class":397,"line":454},[395,724,725],{"class":457},"        resources",[395,727,416],{"class":450},[395,729,730],{"class":450}," {",[395,732,733],{"class":428}," \u002F* your CMS component types *\u002F",[395,735,736],{"class":450}," },\n",[395,738,739,742,744,747,750],{"class":397,"line":466},[395,740,741],{"class":457},"        layouts",[395,743,416],{"class":450},[395,745,746],{"class":450},"   {",[395,748,749],{"class":428}," \u002F* your layout component types *\u002F",[395,751,736],{"class":450},[395,753,754,757,759,762,765],{"class":397,"line":482},[395,755,756],{"class":457},"        pages",[395,758,416],{"class":450},[395,760,761],{"class":450},"     {",[395,763,764],{"class":428}," \u002F* your page template component types *\u002F",[395,766,736],{"class":450},[395,768,769,772,774,777,780],{"class":397,"line":494},[395,770,771],{"class":457},"        pageData",[395,773,416],{"class":450},[395,775,776],{"class":450},"  {",[395,778,779],{"class":428}," \u002F* your PageData resource classes *\u002F",[395,781,736],{"class":450},[395,783,784,787,789,793,795],{"class":397,"line":506},[395,785,786],{"class":457},"        pagesDepth",[395,788,416],{"class":450},[395,790,792],{"class":791},"scSvc"," 2",[395,794,640],{"class":450},[395,796,797],{"class":428},"  \u002F\u002F nested page depth (default: 4)\n",[395,799,800,803,805,807,810,812,814,817,819],{"class":397,"line":518},[395,801,802],{"class":457},"        siteConfig",[395,804,416],{"class":450},[395,806,730],{"class":450},[395,808,809],{"class":457}," siteName",[395,811,416],{"class":450},[395,813,632],{"class":469},[395,815,816],{"class":405},"My App",[395,818,476],{"class":469},[395,820,821],{"class":450}," }\n",[395,823,824],{"class":397,"line":530},[395,825,675],{"class":450},[395,827,828,830],{"class":397,"line":542},[395,829,563],{"class":450},[395,831,566],{"class":446},[382,833,835],{"id":834},"what-the-module-auto-provides","What the Module Auto-Provides",[351,837,838,839,843],{},"You do ",[840,841,842],"strong",{},"not"," create these — the module ships them:",[351,845,846,849,850,853],{},[840,847,848],{},"Pages"," (override by creating the same path in ",[354,851,852],{},"app\u002Fpages\u002F","):",[855,856,857,864,870,876,882,888],"ul",{},[858,859,860,863],"li",{},[354,861,862],{},"\u002Flogin"," — email + password login form",[858,865,866,869],{},[354,867,868],{},"\u002Fforgot-password"," — request a password reset email",[858,871,872,875],{},[354,873,874],{},"\u002Freset-password\u002F[username]\u002F[token]"," — set a new password",[858,877,878,881],{},[354,879,880],{},"\u002Fverify-email\u002F[username]\u002F[token]"," — verify email on registration",[858,883,884,887],{},[354,885,886],{},"\u002Fconfirm-new-email\u002F[username]\u002F[newEmail]\u002F[token]"," — confirm email change",[858,889,890,893],{},[354,891,892],{},"\u002F_cwa\u002F*"," — the full admin panel",[351,895,896,416],{},[840,897,898],{},"Middleware",[855,900,901,904],{},[858,902,903],{},"Route resolution on every navigation — fetches the manifest and resolves the layout, page, and page data IRIs from the current URL",[858,905,906],{},"Auth state hydration from the JWT cookie payload",[351,908,909,912,913,853],{},[840,910,911],{},"Pinia stores"," (accessed via ",[354,914,915],{},"useCwa()",[855,917,918,924,930,936,942],{},[858,919,920,923],{},[354,921,922],{},"resources"," — all fetched resource data, keyed by IRI",[858,925,926,929],{},[354,927,928],{},"auth"," — authentication state and methods",[858,931,932,935],{},[354,933,934],{},"forms"," — form view state and submission helpers",[858,937,938,941],{},[354,939,940],{},"ui"," — admin panel open\u002Fclosed state, selected component, etc.",[858,943,944,947],{},[354,945,946],{},"siteConfig"," — site-wide settings fetched from the API",[382,949,951,952,954],{"id":950},"the-usecwa-composable","The ",[354,953,915],{}," Composable",[351,956,957,959,960,963],{},[354,958,915],{}," (or ",[354,961,962],{},"$cwa"," in templates) is your entry point to everything the module manages:",[386,965,967],{"className":419,"code":966,"language":421,"meta":391,"style":391},"const cwa = useCwa()\n\ncwa.resources.layout.value         \u002F\u002F current layout resource\ncwa.resources.page.value           \u002F\u002F current page resource\ncwa.resources.pageData.value       \u002F\u002F current page data (dynamic pages)\ncwa.auth.isSignedIn.value          \u002F\u002F boolean\ncwa.auth.isAdmin.value             \u002F\u002F boolean (ROLE_ADMIN+)\ncwa.auth.user.value                \u002F\u002F current user object\ncwa.siteConfig.siteName.value      \u002F\u002F the site name from API settings\ncwa.ui.isEditing.value             \u002F\u002F admin edit mode active\n",[354,968,969,989,995,1018,1039,1060,1081,1102,1123,1144],{"__ignoreMap":391},[395,970,971,975,979,983,986],{"class":397,"line":398},[395,972,974],{"class":973},"swB56","const",[395,976,978],{"class":977},"sc2zw"," cwa",[395,980,982],{"class":981},"sVlFx"," =",[395,984,985],{"class":442}," useCwa",[395,987,988],{"class":446},"()\n",[395,990,991],{"class":397,"line":432},[395,992,994],{"emptyLinePlaceholder":993},true,"\n",[395,996,997,1000,1003,1005,1007,1010,1012,1015],{"class":397,"line":454},[395,998,999],{"class":446},"cwa",[395,1001,1002],{"class":450},".",[395,1004,922],{"class":446},[395,1006,1002],{"class":450},[395,1008,1009],{"class":446},"layout",[395,1011,1002],{"class":450},[395,1013,1014],{"class":446},"value         ",[395,1016,1017],{"class":428},"\u002F\u002F current layout resource\n",[395,1019,1020,1022,1024,1026,1028,1031,1033,1036],{"class":397,"line":466},[395,1021,999],{"class":446},[395,1023,1002],{"class":450},[395,1025,922],{"class":446},[395,1027,1002],{"class":450},[395,1029,1030],{"class":446},"page",[395,1032,1002],{"class":450},[395,1034,1035],{"class":446},"value           ",[395,1037,1038],{"class":428},"\u002F\u002F current page resource\n",[395,1040,1041,1043,1045,1047,1049,1052,1054,1057],{"class":397,"line":482},[395,1042,999],{"class":446},[395,1044,1002],{"class":450},[395,1046,922],{"class":446},[395,1048,1002],{"class":450},[395,1050,1051],{"class":446},"pageData",[395,1053,1002],{"class":450},[395,1055,1056],{"class":446},"value       ",[395,1058,1059],{"class":428},"\u002F\u002F current page data (dynamic pages)\n",[395,1061,1062,1064,1066,1068,1070,1073,1075,1078],{"class":397,"line":494},[395,1063,999],{"class":446},[395,1065,1002],{"class":450},[395,1067,928],{"class":446},[395,1069,1002],{"class":450},[395,1071,1072],{"class":446},"isSignedIn",[395,1074,1002],{"class":450},[395,1076,1077],{"class":446},"value          ",[395,1079,1080],{"class":428},"\u002F\u002F boolean\n",[395,1082,1083,1085,1087,1089,1091,1094,1096,1099],{"class":397,"line":506},[395,1084,999],{"class":446},[395,1086,1002],{"class":450},[395,1088,928],{"class":446},[395,1090,1002],{"class":450},[395,1092,1093],{"class":446},"isAdmin",[395,1095,1002],{"class":450},[395,1097,1098],{"class":446},"value             ",[395,1100,1101],{"class":428},"\u002F\u002F boolean (ROLE_ADMIN+)\n",[395,1103,1104,1106,1108,1110,1112,1115,1117,1120],{"class":397,"line":518},[395,1105,999],{"class":446},[395,1107,1002],{"class":450},[395,1109,928],{"class":446},[395,1111,1002],{"class":450},[395,1113,1114],{"class":446},"user",[395,1116,1002],{"class":450},[395,1118,1119],{"class":446},"value                ",[395,1121,1122],{"class":428},"\u002F\u002F current user object\n",[395,1124,1125,1127,1129,1131,1133,1136,1138,1141],{"class":397,"line":530},[395,1126,999],{"class":446},[395,1128,1002],{"class":450},[395,1130,946],{"class":446},[395,1132,1002],{"class":450},[395,1134,1135],{"class":446},"siteName",[395,1137,1002],{"class":450},[395,1139,1140],{"class":446},"value      ",[395,1142,1143],{"class":428},"\u002F\u002F the site name from API settings\n",[395,1145,1146,1148,1150,1152,1154,1157,1159,1161],{"class":397,"line":542},[395,1147,999],{"class":446},[395,1149,1002],{"class":450},[395,1151,940],{"class":446},[395,1153,1002],{"class":450},[395,1155,1156],{"class":446},"isEditing",[395,1158,1002],{"class":450},[395,1160,1098],{"class":446},[395,1162,1163],{"class":428},"\u002F\u002F admin edit mode active\n",[382,1165,1167],{"id":1166},"mixing-your-own-pages-with-cwa-mixing-your-own-pages-with-cwa","Mixing Your Own Pages with CWA {#mixing-your-own-pages-with-cwa}",[351,1169,1170,1171,1174,1175,1177],{},"CWA's catch-all route covers ",[354,1172,1173],{},"\u002F"," and all paths. But you can still create regular Nuxt pages alongside it — your ",[354,1176,852],{}," files take precedence over CWA's dynamic routing.",[351,1179,1180,1181,1184],{},"For pages you write yourself, use ",[354,1182,1183],{},"definePageMeta"," to control how much of CWA runs on that page:",[1186,1187,1189],"h3",{"id":1188},"disable-cwa-route-fetching","Disable CWA route fetching",[351,1191,1192],{},"If your page has nothing to do with CWA content, disable the middleware entirely:",[386,1194,1198],{"className":1195,"code":1196,"language":1197,"meta":391,"style":391},"language-vue shiki shiki-themes github-light github-dark material-theme-palenight","\u003C!-- app\u002Fpages\u002Fstatus.vue -->\n\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n    cwa: { disabled: true }\n})\n\u003C\u002Fscript>\n","vue",[354,1199,1200,1205,1234,1242,1261,1267],{"__ignoreMap":391},[395,1201,1202],{"class":397,"line":398},[395,1203,1204],{"class":428},"\u003C!-- app\u002Fpages\u002Fstatus.vue -->\n",[395,1206,1207,1210,1214,1218,1221,1224,1227,1229,1231],{"class":397,"line":432},[395,1208,1209],{"class":450},"\u003C",[395,1211,1213],{"class":1212},"s-h7I","script",[395,1215,1217],{"class":1216},"sGtlX"," setup",[395,1219,1220],{"class":1216}," lang",[395,1222,1223],{"class":450},"=",[395,1225,1226],{"class":469},"\"",[395,1228,421],{"class":405},[395,1230,1226],{"class":469},[395,1232,1233],{"class":450},">\n",[395,1235,1236,1238,1240],{"class":397,"line":454},[395,1237,1183],{"class":442},[395,1239,447],{"class":446},[395,1241,451],{"class":450},[395,1243,1244,1246,1248,1250,1253,1255,1259],{"class":397,"line":466},[395,1245,716],{"class":457},[395,1247,416],{"class":450},[395,1249,730],{"class":450},[395,1251,1252],{"class":457}," disabled",[395,1254,416],{"class":450},[395,1256,1258],{"class":1257},"swWMF"," true",[395,1260,821],{"class":450},[395,1262,1263,1265],{"class":397,"line":482},[395,1264,563],{"class":450},[395,1266,566],{"class":446},[395,1268,1269,1272,1274],{"class":397,"line":494},[395,1270,1271],{"class":450},"\u003C\u002F",[395,1273,1213],{"class":1212},[395,1275,1233],{"class":450},[351,1277,1278,1279,1281],{},"CWA will not fetch a route manifest or resolve any resources. Auth state and ",[354,1280,915],{}," are still available.",[1186,1283,1285],{"id":1284},"use-a-static-nuxt-layout","Use a static Nuxt layout",[351,1287,1288],{},"If you want to use one of your own Nuxt layouts instead of CWA's resolved layout:",[386,1290,1292],{"className":1195,"code":1291,"language":1197,"meta":391,"style":391},"\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n    cwa: { staticLayout: 'my-nuxt-layout' }\n})\n\u003C\u002Fscript>\n",[354,1293,1294,1314,1322,1344,1350],{"__ignoreMap":391},[395,1295,1296,1298,1300,1302,1304,1306,1308,1310,1312],{"class":397,"line":398},[395,1297,1209],{"class":450},[395,1299,1213],{"class":1212},[395,1301,1217],{"class":1216},[395,1303,1220],{"class":1216},[395,1305,1223],{"class":450},[395,1307,1226],{"class":469},[395,1309,421],{"class":405},[395,1311,1226],{"class":469},[395,1313,1233],{"class":450},[395,1315,1316,1318,1320],{"class":397,"line":432},[395,1317,1183],{"class":442},[395,1319,447],{"class":446},[395,1321,451],{"class":450},[395,1323,1324,1326,1328,1330,1333,1335,1337,1340,1342],{"class":397,"line":454},[395,1325,716],{"class":457},[395,1327,416],{"class":450},[395,1329,730],{"class":450},[395,1331,1332],{"class":457}," staticLayout",[395,1334,416],{"class":450},[395,1336,632],{"class":469},[395,1338,1339],{"class":405},"my-nuxt-layout",[395,1341,476],{"class":469},[395,1343,821],{"class":450},[395,1345,1346,1348],{"class":397,"line":466},[395,1347,563],{"class":450},[395,1349,566],{"class":446},[395,1351,1352,1354,1356],{"class":397,"line":482},[395,1353,1271],{"class":450},[395,1355,1213],{"class":1212},[395,1357,1233],{"class":450},[1186,1359,1361],{"id":1360},"use-the-cwa-root-layout-on-your-own-page","Use the CWA root layout on your own page",[351,1363,1364,1365,1368],{},"You can opt into ",[354,1366,1367],{},"cwa-root-layout"," to get the admin header and edit-mode overlay on a hand-coded page:",[386,1370,1372],{"className":1195,"code":1371,"language":1197,"meta":391,"style":391},"\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n    layout: 'cwa-root-layout',\n    cwa: { disabled: true }   \u002F\u002F disable CWA content fetching but keep the layout\n})\n\u003C\u002Fscript>\n",[354,1373,1374,1394,1402,1417,1437,1443],{"__ignoreMap":391},[395,1375,1376,1378,1380,1382,1384,1386,1388,1390,1392],{"class":397,"line":398},[395,1377,1209],{"class":450},[395,1379,1213],{"class":1212},[395,1381,1217],{"class":1216},[395,1383,1220],{"class":1216},[395,1385,1223],{"class":450},[395,1387,1226],{"class":469},[395,1389,421],{"class":405},[395,1391,1226],{"class":469},[395,1393,1233],{"class":450},[395,1395,1396,1398,1400],{"class":397,"line":432},[395,1397,1183],{"class":442},[395,1399,447],{"class":446},[395,1401,451],{"class":450},[395,1403,1404,1407,1409,1411,1413,1415],{"class":397,"line":454},[395,1405,1406],{"class":457},"    layout",[395,1408,416],{"class":450},[395,1410,632],{"class":469},[395,1412,1367],{"class":405},[395,1414,476],{"class":469},[395,1416,479],{"class":450},[395,1418,1419,1421,1423,1425,1427,1429,1431,1434],{"class":397,"line":466},[395,1420,716],{"class":457},[395,1422,416],{"class":450},[395,1424,730],{"class":450},[395,1426,1252],{"class":457},[395,1428,416],{"class":450},[395,1430,1258],{"class":1257},[395,1432,1433],{"class":450}," }",[395,1435,1436],{"class":428},"   \u002F\u002F disable CWA content fetching but keep the layout\n",[395,1438,1439,1441],{"class":397,"line":482},[395,1440,563],{"class":450},[395,1442,566],{"class":446},[395,1444,1445,1447,1449],{"class":397,"line":494},[395,1446,1271],{"class":450},[395,1448,1213],{"class":1212},[395,1450,1233],{"class":450},[351,1452,1453],{},"This is useful for pages like account settings or checkout flows that are not CMS-managed but should still appear inside the site shell and support admin edit mode for other parts of the page.",[382,1455,1457],{"id":1456},"typescript-support","TypeScript Support",[351,1459,1460],{},"The module exports types for all component patterns:",[386,1462,1464],{"className":419,"code":1463,"language":421,"meta":391,"style":391},"import type { IriProp } from '@cwa\u002Fnuxt\u002Fruntime\u002Fcomposables'\n\n\u002F\u002F Every CWA component receives :iri as a prop\ndefineProps\u003CIriProp>()\n",[354,1465,1466,1492,1496,1501],{"__ignoreMap":391},[395,1467,1468,1471,1474,1476,1479,1481,1484,1486,1489],{"class":397,"line":398},[395,1469,1470],{"class":435},"import",[395,1472,1473],{"class":435}," type",[395,1475,730],{"class":450},[395,1477,1478],{"class":446}," IriProp",[395,1480,1433],{"class":450},[395,1482,1483],{"class":435}," from",[395,1485,632],{"class":469},[395,1487,1488],{"class":405},"@cwa\u002Fnuxt\u002Fruntime\u002Fcomposables",[395,1490,1491],{"class":469},"'\n",[395,1493,1494],{"class":397,"line":432},[395,1495,994],{"emptyLinePlaceholder":993},[395,1497,1498],{"class":397,"line":454},[395,1499,1500],{"class":428},"\u002F\u002F Every CWA component receives :iri as a prop\n",[395,1502,1503,1506,1508,1511,1514],{"class":397,"line":466},[395,1504,1505],{"class":442},"defineProps",[395,1507,1209],{"class":450},[395,1509,1510],{"class":401},"IriProp",[395,1512,1513],{"class":450},">",[395,1515,988],{"class":446},[351,1517,1518,1519,1522,1523,1526,1527,1530,1531,1534,1535,1538,1539,1542,1543,1546],{},"API resource data is dynamically shaped (",[354,1520,1521],{},"resource.data"," is typed as ",[354,1524,1525],{},"Record\u003Cstring, any>"," or similar). Under strict mode TypeScript may flag index access on these types as potentially undefined, even in contexts where you've checked for it. If you encounter these conflicts and don't want to add ",[354,1528,1529],{},"?"," or type assertions throughout your component code, set ",[354,1532,1533],{},"strict: false"," in ",[354,1536,1537],{},"tsconfig.json",". Alternatively, keep ",[354,1540,1541],{},"strict: true"," and use optional chaining (",[354,1544,1545],{},"resource.data?.title",") consistently.",[1548,1549,1550],"style",{},"html pre.shiki code .sRCss, html code.shiki .sRCss{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}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 .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 .sKpYG, html code.shiki .sKpYG{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#82AAFF}html pre.shiki code .sPB8G, html code.shiki .sPB8G{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .sOvfz, html code.shiki .sOvfz{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html pre.shiki code .sDHlG, html code.shiki .sDHlG{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .scSvc, html code.shiki .scSvc{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#F78C6C}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 .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 .swWMF, html code.shiki .swWMF{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FF9CAC}",{"title":391,"searchDepth":432,"depth":432,"links":1552},[1553,1554,1555,1556,1557,1559,1564],{"id":384,"depth":432,"text":11},{"id":569,"depth":432,"text":570},{"id":687,"depth":432,"text":688},{"id":834,"depth":432,"text":835},{"id":950,"depth":432,"text":1558},"The useCwa() Composable",{"id":1166,"depth":432,"text":1167,"children":1560},[1561,1562,1563],{"id":1188,"depth":454,"text":1189},{"id":1284,"depth":454,"text":1285},{"id":1360,"depth":454,"text":1361},{"id":1456,"depth":432,"text":1457},"Installing the CWA Nuxt module, configuring peer dependencies, and wiring up the nuxt.config options.","md",null,{},{"title":146,"description":1565},"LsaMUz4-0v56aJ9vLJiZNsPMxFelXe-mGC33DYtIvgo",[1572,1574],{"title":137,"path":138,"stem":139,"description":1573,"children":-1},"The CWA Symfony profiler panel surfaces JWT activity, resolved routes, and Mercure publications in the web toolbar.",{"title":155,"path":156,"stem":157,"description":1575,"children":-1},"[object Object]",1782241281558]