[{"data":1,"prerenderedAt":1431},["ShallowReactive",2],{"navigation":3,"\u002Fnuxt-module\u002Fcomponent-helpers\u002Frich-text-editor":553,"\u002Fnuxt-module\u002Fcomponent-helpers\u002Frich-text-editor-surround":1426},[4,22,64,89,215,503],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","1.getting-started\u002F1.index",[9,10,14,18],{"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},"Key Ideas","\u002Fgetting-started\u002Fkey-ideas","1.getting-started\u002F3.key-ideas",{"title":19,"path":20,"stem":21},"Releases","\u002Fgetting-started\u002Freleases","1.getting-started\u002F4.releases",{"title":23,"path":24,"stem":25,"children":26},"Overview","\u002Fcore-concepts","2.core-concepts\u002F0.index",[27,28,32,36,40,44,48,52,56,60],{"title":23,"path":24,"stem":25},{"title":29,"path":30,"stem":31},"How It All Works","\u002Fcore-concepts\u002Farchitecture","2.core-concepts\u002F1.architecture",{"title":33,"path":34,"stem":35},"The Data Model","\u002Fcore-concepts\u002Fthe-data-model","2.core-concepts\u002F2.the-data-model",{"title":37,"path":38,"stem":39},"Layouts & Pages","\u002Fcore-concepts\u002Flayouts-and-pages","2.core-concepts\u002F3.layouts-and-pages",{"title":41,"path":42,"stem":43},"Dynamic Pages","\u002Fcore-concepts\u002Fdynamic-pages","2.core-concepts\u002F4.dynamic-pages",{"title":45,"path":46,"stem":47},"Components","\u002Fcore-concepts\u002Fcomponents","2.core-concepts\u002F5.components",{"title":49,"path":50,"stem":51},"Draft & Publish Workflow","\u002Fcore-concepts\u002Fdraft-and-publish","2.core-concepts\u002F6.draft-and-publish",{"title":53,"path":54,"stem":55},"The Admin Panel","\u002Fcore-concepts\u002Fadmin-panel","2.core-concepts\u002F7.admin-panel",{"title":57,"path":58,"stem":59},"Caching","\u002Fcore-concepts\u002Fcaching","2.core-concepts\u002F8.caching",{"title":61,"path":62,"stem":63},"Glossary","\u002Fcore-concepts\u002Fglossary","2.core-concepts\u002F9.glossary",{"title":23,"path":65,"stem":66,"children":67},"\u002Fguides","3.guides\u002F0.index",[68,69,73,77,81,85],{"title":23,"path":65,"stem":66},{"title":70,"path":71,"stem":72},"Your First Layout","\u002Fguides\u002Fyour-first-layout","3.guides\u002F1.your-first-layout",{"title":74,"path":75,"stem":76},"Your First Page Template","\u002Fguides\u002Fyour-first-page-template","3.guides\u002F2.your-first-page-template",{"title":78,"path":79,"stem":80},"Your First Component","\u002Fguides\u002Fyour-first-component","3.guides\u002F3.your-first-component",{"title":82,"path":83,"stem":84},"Alternative UI Variants","\u002Fguides\u002Falternative-ui-variants","3.guides\u002F4.alternative-ui-variants",{"title":86,"path":87,"stem":88},"Your First Dynamic Page","\u002Fguides\u002Fyour-first-dynamic-page","3.guides\u002F5.your-first-dynamic-page",{"title":23,"path":90,"stem":91,"children":92},"\u002Fapi","4.api\u002F0.index",[93,94,98,102,120,162,166,170,195,199,203,207,211],{"title":23,"path":90,"stem":91},{"title":95,"path":96,"stem":97},"Bundle Setup","\u002Fapi\u002Fbundle-setup","4.api\u002F02.bundle-setup",{"title":99,"path":100,"stem":101},"Configuration Reference","\u002Fapi\u002Fconfiguration","4.api\u002F03.configuration",{"title":103,"path":104,"stem":105,"children":106,"page":119},"Users","\u002Fapi\u002Fusers","4.api\u002F04.users",[107,111,115],{"title":108,"path":109,"stem":110},"Authentication","\u002Fapi\u002Fusers\u002Fauthentication","4.api\u002F04.users\u002F1.authentication",{"title":112,"path":113,"stem":114},"User Emails","\u002Fapi\u002Fusers\u002Fuser-emails","4.api\u002F04.users\u002F2.user-emails",{"title":116,"path":117,"stem":118},"Access Control","\u002Fapi\u002Fusers\u002Faccess-control","4.api\u002F04.users\u002F3.access-control",false,{"title":45,"path":121,"stem":122,"children":123,"page":119},"\u002Fapi\u002Fcomponents","4.api\u002F05.components",[124,128,149],{"title":125,"path":126,"stem":127},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F05.components\u002F1.creating-components",{"title":129,"path":130,"stem":131,"children":132,"page":119},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F05.components\u002F2.annotations",[133,137,141,145],{"title":134,"path":135,"stem":136},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F05.components\u002F2.annotations\u002F1.publishable",{"title":138,"path":139,"stem":140},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F05.components\u002F2.annotations\u002F2.uploadable",{"title":142,"path":143,"stem":144},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F05.components\u002F2.annotations\u002F3.timestamped",{"title":146,"path":147,"stem":148},"Explicit Allow Only","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fexplicit-allow-only","4.api\u002F05.components\u002F2.annotations\u002F4.explicit-allow-only",{"title":150,"path":151,"stem":152,"children":153,"page":119},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F05.components\u002F3.built-ins",[154,158],{"title":155,"path":156,"stem":157},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F05.components\u002F3.built-ins\u002F1.collection-component",{"title":159,"path":160,"stem":161},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F05.components\u002F3.built-ins\u002F2.form-component",{"title":163,"path":164,"stem":165},"Page Data & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F06.dynamic-pages",{"title":167,"path":168,"stem":169},"Routes","\u002Fapi\u002Froutes","4.api\u002F07.routes",{"title":171,"path":172,"stem":173,"children":174,"page":119},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F08.data-fixtures",[175,179,183,187,191],{"title":176,"path":177,"stem":178},"Getting Started with Fixtures","\u002Fapi\u002Fdata-fixtures\u002Fgetting-started","4.api\u002F08.data-fixtures\u002F1.getting-started",{"title":180,"path":181,"stem":182},"Builder Reference","\u002Fapi\u002Fdata-fixtures\u002Fbuilder-reference","4.api\u002F08.data-fixtures\u002F2.builder-reference",{"title":184,"path":185,"stem":186},"Seeding Content","\u002Fapi\u002Fdata-fixtures\u002Fseeding-content","4.api\u002F08.data-fixtures\u002F3.seeding-content",{"title":188,"path":189,"stem":190},"Appending & Multiple Scaffolds","\u002Fapi\u002Fdata-fixtures\u002Fappending","4.api\u002F08.data-fixtures\u002F4.appending",{"title":192,"path":193,"stem":194},"Generating Fixtures","\u002Fapi\u002Fdata-fixtures\u002Fgenerating-fixtures","4.api\u002F08.data-fixtures\u002F5.generating-fixtures",{"title":196,"path":197,"stem":198},"Real-Time (Mercure)","\u002Fapi\u002Freal-time","4.api\u002F09.real-time",{"title":200,"path":201,"stem":202},"HTTP Caching","\u002Fapi\u002Fhttp-caching","4.api\u002F10.http-caching",{"title":204,"path":205,"stem":206},"Orphaned Data","\u002Fapi\u002Forphaned-data","4.api\u002F11.orphaned-data",{"title":208,"path":209,"stem":210},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F12.console-commands",{"title":212,"path":213,"stem":214},"Debugging & Errors","\u002Fapi\u002Fdebugging","4.api\u002F13.debugging",{"title":23,"path":216,"stem":217,"children":218},"\u002Fnuxt-module","5.nuxt-module\u002F0.index",[219,220,224,237,257,286,307,430,464,467,495,499],{"title":23,"path":216,"stem":217},{"title":221,"path":222,"stem":223},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F01.module-setup",{"title":225,"path":226,"stem":227,"children":228,"page":119},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F02.configuration",[229,233],{"title":230,"path":231,"stem":232},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F02.configuration\u002F1.nuxt-config",{"title":234,"path":235,"stem":236},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F02.configuration\u002F2.site-config-and-seo",{"title":238,"path":239,"stem":240,"children":241,"page":119},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F03.building-your-ui",[242,246,250,253],{"title":243,"path":244,"stem":245},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F03.building-your-ui\u002F1.creating-layouts",{"title":247,"path":248,"stem":249},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F03.building-your-ui\u002F2.creating-page-templates",{"title":45,"path":251,"stem":252},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F03.building-your-ui\u002F3.creating-components",{"title":254,"path":255,"stem":256},"CLI Generator","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcwa-cli","5.nuxt-module\u002F03.building-your-ui\u002F4.cwa-cli",{"title":258,"path":259,"stem":260,"children":261,"page":119},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F04.component-helpers",[262,266,270,274,278,282],{"title":263,"path":264,"stem":265},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F04.component-helpers\u002F1.images-and-uploads",{"title":267,"path":268,"stem":269},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F04.component-helpers\u002F2.collections-and-pagination",{"title":271,"path":272,"stem":273},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F04.component-helpers\u002F3.html-content",{"title":275,"path":276,"stem":277},"Rich-Text Editor","\u002Fnuxt-module\u002Fcomponent-helpers\u002Frich-text-editor","5.nuxt-module\u002F04.component-helpers\u002F4.rich-text-editor",{"title":279,"path":280,"stem":281},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F04.component-helpers\u002F5.real-time-updates",{"title":283,"path":284,"stem":285},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F04.component-helpers\u002F6.forms",{"title":287,"path":288,"stem":289,"children":290,"page":119},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F05.cwa-components",[291,295,299,303],{"title":292,"path":293,"stem":294},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F05.cwa-components\u002F1.cwa-component-group",{"title":296,"path":297,"stem":298},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F05.cwa-components\u002F2.cwa-page",{"title":300,"path":301,"stem":302},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F05.cwa-components\u002F3.cwa-link",{"title":304,"path":305,"stem":306},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F05.cwa-components\u002F5.cwa-default-layout",{"title":308,"path":309,"stem":310,"children":311,"page":119},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F06.composables",[312,315,323,348,368,385,405],{"title":23,"path":313,"stem":314},"\u002Fnuxt-module\u002Fcomposables\u002Foverview","5.nuxt-module\u002F06.composables\u002F0.overview",{"title":316,"path":317,"stem":318,"children":319,"page":119},"Layout","\u002Fnuxt-module\u002Fcomposables\u002Flayout","5.nuxt-module\u002F06.composables\u002F1.layout",[320],{"title":316,"path":321,"stem":322},"\u002Fnuxt-module\u002Fcomposables\u002Flayout\u002Fuse-cwa-layout","5.nuxt-module\u002F06.composables\u002F1.layout\u002F1.use-cwa-layout",{"title":324,"path":325,"stem":326,"children":327,"page":119},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F06.composables\u002F2.component",[328,332,336,340,344],{"title":329,"path":330,"stem":331},"Component (recommended)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-component","5.nuxt-module\u002F06.composables\u002F2.component\u002F1.use-cwa-component",{"title":333,"path":334,"stem":335},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F06.composables\u002F2.component\u002F2.use-cwa-resource",{"title":337,"path":338,"stem":339},"File Field","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-file-field","5.nuxt-module\u002F06.composables\u002F2.component\u002F3.use-cwa-file-field",{"title":341,"path":342,"stem":343},"Collection Pagination","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-pagination","5.nuxt-module\u002F06.composables\u002F2.component\u002F4.use-cwa-collection-pagination",{"title":345,"path":346,"stem":347},"Collection Resource (deprecated)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F06.composables\u002F2.component\u002F9.use-cwa-collection-resource",{"title":349,"path":350,"stem":351,"children":352,"page":119},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fform","5.nuxt-module\u002F06.composables\u002F3.form",[353,356,360,364],{"title":349,"path":354,"stem":355},"\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form","5.nuxt-module\u002F06.composables\u002F3.form\u002F1.use-cwa-form",{"title":357,"path":358,"stem":359},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-input","5.nuxt-module\u002F06.composables\u002F3.form\u002F2.use-cwa-form-input",{"title":361,"path":362,"stem":363},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F06.composables\u002F3.form\u002F3.use-cwa-form-repeated",{"title":365,"path":366,"stem":367},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-collection","5.nuxt-module\u002F06.composables\u002F3.form\u002F4.use-cwa-form-collection",{"title":369,"path":370,"stem":371,"children":372,"page":119},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F06.composables\u002F4.admin-manager",[373,377,381],{"title":374,"path":375,"stem":376},"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":378,"path":379,"stem":380},"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":382,"path":383,"stem":384},"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":386,"path":387,"stem":388,"children":389,"page":119},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F06.composables\u002F5.utilities",[390,394,398,402],{"title":391,"path":392,"stem":393},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F1.use-cwa-resource-endpoint",{"title":395,"path":396,"stem":397},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F2.use-query-bound-model",{"title":399,"path":400,"stem":401},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F3.use-cwa-resource-route",{"title":271,"path":403,"stem":404},"\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-html-content","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F4.use-html-content",{"title":406,"path":407,"stem":408,"children":409,"page":119},"Auth","\u002Fnuxt-module\u002Fcomposables\u002Fauth","5.nuxt-module\u002F06.composables\u002F6.auth",[410,414,418,422,426],{"title":411,"path":412,"stem":413},"Login","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-login","5.nuxt-module\u002F06.composables\u002F6.auth\u002F1.use-login",{"title":415,"path":416,"stem":417},"Forgot Password","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-forgot-password","5.nuxt-module\u002F06.composables\u002F6.auth\u002F2.use-forgot-password",{"title":419,"path":420,"stem":421},"Reset Password","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-reset-password","5.nuxt-module\u002F06.composables\u002F6.auth\u002F3.use-reset-password",{"title":423,"path":424,"stem":425},"Verify Email","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-verify-email","5.nuxt-module\u002F06.composables\u002F6.auth\u002F4.use-verify-email",{"title":427,"path":428,"stem":429},"Resend Verify Email","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-resend-verify-email","5.nuxt-module\u002F06.composables\u002F6.auth\u002F5.use-resend-verify-email",{"title":431,"path":432,"stem":433,"children":434,"page":119},"Cwa Api","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F07.cwa-api",[435,438,442,446,449,452,456,460],{"title":23,"path":436,"stem":437},"\u002Fnuxt-module\u002Fcwa-api\u002Foverview","5.nuxt-module\u002F07.cwa-api\u002F1.overview",{"title":439,"path":440,"stem":441},"Resources","\u002Fnuxt-module\u002Fcwa-api\u002Fresources","5.nuxt-module\u002F07.cwa-api\u002F2.resources",{"title":443,"path":444,"stem":445},"Resources Manager","\u002Fnuxt-module\u002Fcwa-api\u002Fresources-manager","5.nuxt-module\u002F07.cwa-api\u002F3.resources-manager",{"title":406,"path":447,"stem":448},"\u002Fnuxt-module\u002Fcwa-api\u002Fauth","5.nuxt-module\u002F07.cwa-api\u002F4.auth",{"title":283,"path":450,"stem":451},"\u002Fnuxt-module\u002Fcwa-api\u002Fforms","5.nuxt-module\u002F07.cwa-api\u002F5.forms",{"title":453,"path":454,"stem":455},"Admin","\u002Fnuxt-module\u002Fcwa-api\u002Fadmin","5.nuxt-module\u002F07.cwa-api\u002F6.admin",{"title":457,"path":458,"stem":459},"Site Config","\u002Fnuxt-module\u002Fcwa-api\u002Fsite-config","5.nuxt-module\u002F07.cwa-api\u002F7.site-config",{"title":461,"path":462,"stem":463},"Orphaned Resources","\u002Fnuxt-module\u002Fcwa-api\u002Forphaned-resources","5.nuxt-module\u002F07.cwa-api\u002F8.orphaned-resources",{"title":108,"path":465,"stem":466},"\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F08.authentication",{"title":468,"path":469,"stem":470,"children":471,"page":119},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[472,475,479,483,487,491],{"title":23,"path":473,"stem":474},"\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":476,"path":477,"stem":478},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":480,"path":481,"stem":482},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":484,"path":485,"stem":486},"Styling","\u002Fnuxt-module\u002Fcwa-layer\u002Fstyling","5.nuxt-module\u002F9.cwa-layer\u002F4.styling",{"title":488,"path":489,"stem":490},"Date Pickers","\u002Fnuxt-module\u002Fcwa-layer\u002Fdate-pickers","5.nuxt-module\u002F9.cwa-layer\u002F5.date-pickers",{"title":492,"path":493,"stem":494},"Maintenance","\u002Fnuxt-module\u002Fcwa-layer\u002Fmaintenance","5.nuxt-module\u002F9.cwa-layer\u002F6.maintenance",{"title":496,"path":497,"stem":498},"PWA & Offline","\u002Fnuxt-module\u002Fpwa","5.nuxt-module\u002F91.pwa",{"title":500,"path":501,"stem":502},"Page Caching","\u002Fnuxt-module\u002Fpage-caching","5.nuxt-module\u002F92.page-caching",{"title":504,"path":505,"stem":506,"children":507},"Deploying a CWA Site","\u002Fdeployment","6.deployment\u002F0.index",[508,509,513,517,521,525,529,533,537,541,545,549],{"title":504,"path":505,"stem":506},{"title":510,"path":511,"stem":512},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":514,"path":515,"stem":516},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":518,"path":519,"stem":520},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"title":522,"path":523,"stem":524},"CI\u002FCD Variables","\u002Fdeployment\u002Fvariables","6.deployment\u002F4.variables",{"title":526,"path":527,"stem":528},"Cloudflare","\u002Fdeployment\u002Fcloudflare","6.deployment\u002F5.cloudflare",{"title":530,"path":531,"stem":532},"Origin Protection","\u002Fdeployment\u002Forigin-protection","6.deployment\u002F5.origin-protection",{"title":534,"path":535,"stem":536},"Load Testing","\u002Fdeployment\u002Fload-testing","6.deployment\u002F6.load-testing",{"title":538,"path":539,"stem":540},"Performance Audit","\u002Fdeployment\u002Fperformance-audit","6.deployment\u002F6.performance-audit",{"title":542,"path":543,"stem":544},"Reading Lighthouse Scores","\u002Fdeployment\u002Freading-lighthouse-scores","6.deployment\u002F6.reading-lighthouse-scores",{"title":546,"path":547,"stem":548},"Faster Functional Tests","\u002Fdeployment\u002Ffaster-functional-tests","6.deployment\u002F7.faster-functional-tests",{"title":550,"path":551,"stem":552},"Troubleshooting","\u002Fdeployment\u002Ftroubleshooting","6.deployment\u002F7.troubleshooting",{"id":554,"title":275,"badge":555,"body":556,"description":1421,"extension":1422,"links":555,"meta":1423,"navigation":769,"path":276,"seo":1424,"stem":277,"__hash__":1425},"docs\u002F5.nuxt-module\u002F04.component-helpers\u002F4.rich-text-editor.md",null,{"type":557,"value":558,"toc":1417},"minimark",[559,589,594,601,894,901,961,980,1226,1229,1233,1243,1246,1353,1386,1389,1404,1413],[560,561,562,563,567,568,575,576,579,580,585,586,588],"p",{},"The module doesn't ship a rich-text editor. The template has one, ",[564,565,566],"code",{},"app\u002Fapp\u002Fcomponents\u002FTipTapHtmlEditor.vue",", built on ",[569,570,574],"a",{"href":571,"rel":572},"https:\u002F\u002Ftiptap.dev",[573],"nofollow","TipTap",". Its ",[564,577,578],{},"HtmlContent"," component shows the editor to admins in edit mode, and the HTML through ",[569,581,582],{"href":272},[564,583,584],{},"v-cwa-html"," to everyone else. This page covers the editor; ",[569,587,271],{"href":272}," covers rendering the HTML.",[590,591,593],"h2",{"id":592},"loading-an-editor-lazily","Loading an Editor Lazily",[560,595,596,597,600],{},"A rich-text component often shows an editor to admins, such as TipTap. Import the editor with ",[564,598,599],{},"defineAsyncComponent",", not statically. A static import puts the editor into the preloads of every page with body text, for anonymous visitors too. In the template, that was about 424 KB of TipTap and ProseMirror (135 KB gzipped).",[602,603,608],"pre",{"className":604,"code":605,"language":606,"meta":607,"style":607},"language-vue shiki shiki-themes github-light github-dark material-theme-palenight has-focused","\u003Ctemplate>\n  \u003Carticle>\n    \u003CTipTapHtmlEditor v-if=\"$cwa.admin.isEditing\" v-model=\"model\" \u002F>\n    \u003Cdiv v-else ref=\"container\" v-cwa-html=\"content\" class=\"prose\" \u002F>\n  \u003C\u002Farticle>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\nimport { defineAsyncComponent } from 'vue'\n\n\u002F\u002F Fetched only when an admin starts editing.\nconst TipTapHtmlEditor = defineAsyncComponent(() => import('~\u002Fcomponents\u002FTipTapHtmlEditor.vue')) \u002F\u002F [!code focus]\n\u002F\u002F ...\n\u003C\u002Fscript>\n","vue","",[564,609,610,626,637,690,744,754,764,771,796,822,827,834,879,885],{"__ignoreMap":607},[611,612,615,619,623],"span",{"class":613,"line":614},"line",1,[611,616,618],{"class":617},"sOvfz","\u003C",[611,620,622],{"class":621},"s-h7I","template",[611,624,625],{"class":617},">\n",[611,627,629,632,635],{"class":613,"line":628},2,[611,630,631],{"class":617},"  \u003C",[611,633,634],{"class":621},"article",[611,636,625],{"class":617},[611,638,640,643,646,650,653,657,661,664,667,669,672,674,678,680,682,685,687],{"class":613,"line":639},3,[611,641,642],{"class":617},"    \u003C",[611,644,645],{"class":621},"TipTapHtmlEditor",[611,647,649],{"class":648},"sm4w6"," v-if",[611,651,652],{"class":617},"=",[611,654,656],{"class":655},"seSrl","\"",[611,658,660],{"class":659},"sPB8G","$cwa",[611,662,663],{"class":617},".",[611,665,666],{"class":659},"admin",[611,668,663],{"class":617},[611,670,671],{"class":659},"isEditing",[611,673,656],{"class":655},[611,675,677],{"class":676},"sGtlX"," v-model",[611,679,652],{"class":617},[611,681,656],{"class":655},[611,683,684],{"class":659},"model",[611,686,656],{"class":655},[611,688,689],{"class":617}," \u002F>\n",[611,691,693,695,698,701,704,706,708,712,714,717,719,721,724,726,729,731,733,736,738,742],{"class":613,"line":692},4,[611,694,642],{"class":617},[611,696,697],{"class":621},"div",[611,699,700],{"class":676}," v-else",[611,702,703],{"class":676}," ref",[611,705,652],{"class":617},[611,707,656],{"class":655},[611,709,711],{"class":710},"sLL54","container",[611,713,656],{"class":655},[611,715,716],{"class":676}," v-cwa-html",[611,718,652],{"class":617},[611,720,656],{"class":655},[611,722,723],{"class":710},"content",[611,725,656],{"class":655},[611,727,728],{"class":676}," class",[611,730,652],{"class":617},[611,732,656],{"class":655},[611,734,735],{"class":710},"prose",[611,737,656],{"class":655},[611,739,741],{"class":740},"s01iV"," \u002F",[611,743,625],{"class":617},[611,745,747,750,752],{"class":613,"line":746},5,[611,748,749],{"class":617},"  \u003C\u002F",[611,751,634],{"class":621},[611,753,625],{"class":617},[611,755,757,760,762],{"class":613,"line":756},6,[611,758,759],{"class":617},"\u003C\u002F",[611,761,622],{"class":621},[611,763,625],{"class":617},[611,765,767],{"class":613,"line":766},7,[611,768,770],{"emptyLinePlaceholder":769},true,"\n",[611,772,774,776,779,782,785,787,789,792,794],{"class":613,"line":773},8,[611,775,618],{"class":617},[611,777,778],{"class":621},"script",[611,780,781],{"class":676}," setup",[611,783,784],{"class":676}," lang",[611,786,652],{"class":617},[611,788,656],{"class":655},[611,790,791],{"class":710},"ts",[611,793,656],{"class":655},[611,795,625],{"class":617},[611,797,799,802,805,808,811,814,817,819],{"class":613,"line":798},9,[611,800,801],{"class":648},"import",[611,803,804],{"class":617}," {",[611,806,807],{"class":659}," defineAsyncComponent",[611,809,810],{"class":617}," }",[611,812,813],{"class":648}," from",[611,815,816],{"class":655}," '",[611,818,606],{"class":710},[611,820,821],{"class":655},"'\n",[611,823,825],{"class":613,"line":824},10,[611,826,770],{"emptyLinePlaceholder":769},[611,828,830],{"class":613,"line":829},11,[611,831,833],{"class":832},"sTBSN","\u002F\u002F Fetched only when an admin starts editing.\n",[611,835,839,843,847,851,854,857,860,863,866,868,871,874,876],{"class":836,"line":838},[613,837],"focused",12,[611,840,842],{"class":841},"swB56","const",[611,844,846],{"class":845},"sc2zw"," TipTapHtmlEditor",[611,848,850],{"class":849},"sVlFx"," =",[611,852,807],{"class":853},"sKpYG",[611,855,856],{"class":659},"(",[611,858,859],{"class":617},"()",[611,861,862],{"class":841}," =>",[611,864,865],{"class":849}," import",[611,867,856],{"class":659},[611,869,870],{"class":655},"'",[611,872,873],{"class":710},"~\u002Fcomponents\u002FTipTapHtmlEditor.vue",[611,875,870],{"class":655},[611,877,878],{"class":659},")) ",[611,880,882],{"class":613,"line":881},13,[611,883,884],{"class":832},"\u002F\u002F ...\n",[611,886,888,890,892],{"class":613,"line":887},14,[611,889,759],{"class":617},[611,891,778],{"class":621},[611,893,625],{"class":617},[560,895,896,897,900],{},"Anywhere else that only needs the editor's type, use ",[564,898,899],{},"import type",". A value import keeps the editor in the dev bundle.",[602,902,905],{"className":903,"code":904,"language":791,"meta":607,"style":607},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight","import type TipTapHtmlEditor from '~\u002Fcomponents\u002FTipTapHtmlEditor.vue'\n\nconst editorComponent = ref\u003Ctypeof TipTapHtmlEditor | undefined>()\n",[564,906,907,926,930],{"__ignoreMap":607},[611,908,909,911,914,917,920,922,924],{"class":613,"line":614},[611,910,801],{"class":648},[611,912,913],{"class":648}," type",[611,915,916],{"class":659}," TipTapHtmlEditor ",[611,918,919],{"class":648},"from",[611,921,816],{"class":655},[611,923,873],{"class":710},[611,925,821],{"class":655},[611,927,928],{"class":613,"line":628},[611,929,770],{"emptyLinePlaceholder":769},[611,931,932,934,937,939,941,943,946,948,951,955,958],{"class":613,"line":639},[611,933,842],{"class":841},[611,935,936],{"class":845}," editorComponent",[611,938,850],{"class":849},[611,940,703],{"class":853},[611,942,618],{"class":617},[611,944,945],{"class":849},"typeof",[611,947,916],{"class":659},[611,949,950],{"class":849},"|",[611,952,954],{"class":953},"sbW4m"," undefined",[611,956,957],{"class":617},">",[611,959,960],{"class":659},"()\n",[560,962,963,964,967,968,971,972,975,976,979],{},"Nuxt still adds a ",[564,965,966],{},"prefetch"," hint for the async chunk, so browsers may download it in the background. The template removes that hint with a ",[564,969,970],{},"build:manifest"," hook in ",[564,973,974],{},"nuxt.config.ts",". It filters the editor out of each chunk's ",[564,977,978],{},"dynamicImports",". The editor still loads on demand when it is first shown.",[602,981,983],{"className":903,"code":982,"language":791,"meta":607,"style":607},"\u002F\u002F nuxt.config.ts\nconst isEditorSource = (id: string) => id.endsWith('components\u002FTipTapHtmlEditor.vue')\n\nexport default defineNuxtConfig({\n  modules: [\n    (_options, nuxt) => {\n      nuxt.hook('build:manifest', (manifest) => {\n        for (const chunk of Object.values(manifest)) {\n          chunk.dynamicImports = chunk.dynamicImports?.filter(id => !isEditorSource(id))\n        }\n      })\n    },\n  ],\n})\n",[564,984,985,990,1038,1042,1058,1069,1090,1121,1152,1194,1199,1206,1211,1219],{"__ignoreMap":607},[611,986,987],{"class":613,"line":614},[611,988,989],{"class":832},"\u002F\u002F nuxt.config.ts\n",[611,991,992,994,998,1000,1003,1007,1010,1013,1016,1018,1021,1023,1026,1028,1030,1033,1035],{"class":613,"line":628},[611,993,842],{"class":841},[611,995,997],{"class":996},"scpWJ"," isEditorSource",[611,999,850],{"class":849},[611,1001,1002],{"class":617}," (",[611,1004,1006],{"class":1005},"sNTR6","id",[611,1008,1009],{"class":849},":",[611,1011,1012],{"class":953}," string",[611,1014,1015],{"class":617},")",[611,1017,862],{"class":841},[611,1019,1020],{"class":659}," id",[611,1022,663],{"class":617},[611,1024,1025],{"class":853},"endsWith",[611,1027,856],{"class":659},[611,1029,870],{"class":655},[611,1031,1032],{"class":710},"components\u002FTipTapHtmlEditor.vue",[611,1034,870],{"class":655},[611,1036,1037],{"class":659},")\n",[611,1039,1040],{"class":613,"line":639},[611,1041,770],{"emptyLinePlaceholder":769},[611,1043,1044,1047,1050,1053,1055],{"class":613,"line":692},[611,1045,1046],{"class":648},"export",[611,1048,1049],{"class":648}," default",[611,1051,1052],{"class":853}," defineNuxtConfig",[611,1054,856],{"class":659},[611,1056,1057],{"class":617},"{\n",[611,1059,1060,1064,1066],{"class":613,"line":746},[611,1061,1063],{"class":1062},"sDHlG","  modules",[611,1065,1009],{"class":617},[611,1067,1068],{"class":659}," [\n",[611,1070,1071,1074,1077,1080,1083,1085,1087],{"class":613,"line":756},[611,1072,1073],{"class":617},"    (",[611,1075,1076],{"class":1005},"_options",[611,1078,1079],{"class":617},",",[611,1081,1082],{"class":1005}," nuxt",[611,1084,1015],{"class":617},[611,1086,862],{"class":841},[611,1088,1089],{"class":617}," {\n",[611,1091,1092,1095,1097,1100,1102,1104,1106,1108,1110,1112,1115,1117,1119],{"class":613,"line":766},[611,1093,1094],{"class":659},"      nuxt",[611,1096,663],{"class":617},[611,1098,1099],{"class":853},"hook",[611,1101,856],{"class":1062},[611,1103,870],{"class":655},[611,1105,970],{"class":710},[611,1107,870],{"class":655},[611,1109,1079],{"class":617},[611,1111,1002],{"class":617},[611,1113,1114],{"class":1005},"manifest",[611,1116,1015],{"class":617},[611,1118,862],{"class":841},[611,1120,1089],{"class":617},[611,1122,1123,1126,1128,1130,1133,1136,1139,1141,1144,1146,1148,1150],{"class":613,"line":773},[611,1124,1125],{"class":648},"        for",[611,1127,1002],{"class":1062},[611,1129,842],{"class":841},[611,1131,1132],{"class":845}," chunk",[611,1134,1135],{"class":849}," of",[611,1137,1138],{"class":659}," Object",[611,1140,663],{"class":617},[611,1142,1143],{"class":853},"values",[611,1145,856],{"class":1062},[611,1147,1114],{"class":659},[611,1149,878],{"class":1062},[611,1151,1057],{"class":617},[611,1153,1154,1157,1159,1161,1163,1165,1167,1169,1172,1175,1177,1179,1181,1184,1187,1189,1191],{"class":613,"line":798},[611,1155,1156],{"class":659},"          chunk",[611,1158,663],{"class":617},[611,1160,978],{"class":659},[611,1162,850],{"class":849},[611,1164,1132],{"class":659},[611,1166,663],{"class":617},[611,1168,978],{"class":659},[611,1170,1171],{"class":617},"?.",[611,1173,1174],{"class":853},"filter",[611,1176,856],{"class":1062},[611,1178,1006],{"class":1005},[611,1180,862],{"class":841},[611,1182,1183],{"class":849}," !",[611,1185,1186],{"class":853},"isEditorSource",[611,1188,856],{"class":1062},[611,1190,1006],{"class":659},[611,1192,1193],{"class":1062},"))\n",[611,1195,1196],{"class":613,"line":824},[611,1197,1198],{"class":617},"        }\n",[611,1200,1201,1204],{"class":613,"line":829},[611,1202,1203],{"class":617},"      }",[611,1205,1037],{"class":1062},[611,1207,1208],{"class":613,"line":838},[611,1209,1210],{"class":617},"    },\n",[611,1212,1213,1216],{"class":613,"line":881},[611,1214,1215],{"class":659},"  ]",[611,1217,1218],{"class":617},",\n",[611,1220,1221,1224],{"class":613,"line":887},[611,1222,1223],{"class":617},"}",[611,1225,1037],{"class":659},[560,1227,1228],{},"The module already keeps its own admin UI out of visitors' prefetch hints. It can't see your editor, because the editor is app code, so keep this hook.",[590,1230,1232],{"id":1231},"choosing-the-editors-buttons","Choosing the Editor's Buttons",[560,1234,1235,1236,1238,1239,1242],{},"The template's ",[564,1237,566],{}," shows a menu of formatting buttons: H1, H2, Bold, Italic, Underline, Link and Bullet List. Every button shows by default. Pass the ",[564,1240,1241],{},"config"," prop to hide some of them for one field.",[560,1244,1245],{},"For example, a short description that allows only bold, italic and links:",[602,1247,1250],{"className":1248,"code":1249,"language":606,"meta":607,"style":607},"language-vue shiki shiki-themes github-light github-dark material-theme-palenight","\u003CTipTapHtmlEditor\n  v-if=\"$cwa.admin.isEditing\"\n  v-model=\"model\"\n  :config=\"{ h1: false, h2: false, underline: false, bulletList: false }\"\n\u002F>\n",[564,1251,1252,1259,1281,1294,1348],{"__ignoreMap":607},[611,1253,1254,1256],{"class":613,"line":614},[611,1255,618],{"class":617},[611,1257,1258],{"class":621},"TipTapHtmlEditor\n",[611,1260,1261,1264,1266,1268,1270,1272,1274,1276,1278],{"class":613,"line":628},[611,1262,1263],{"class":648},"  v-if",[611,1265,652],{"class":617},[611,1267,656],{"class":655},[611,1269,660],{"class":659},[611,1271,663],{"class":617},[611,1273,666],{"class":659},[611,1275,663],{"class":617},[611,1277,671],{"class":659},[611,1279,1280],{"class":655},"\"\n",[611,1282,1283,1286,1288,1290,1292],{"class":613,"line":639},[611,1284,1285],{"class":676},"  v-model",[611,1287,652],{"class":617},[611,1289,656],{"class":655},[611,1291,684],{"class":659},[611,1293,1280],{"class":655},[611,1295,1296,1299,1301,1303,1305,1308,1311,1313,1317,1319,1322,1324,1326,1328,1331,1333,1335,1337,1340,1342,1344,1346],{"class":613,"line":692},[611,1297,1298],{"class":617},"  :",[611,1300,1241],{"class":676},[611,1302,652],{"class":617},[611,1304,656],{"class":655},[611,1306,1307],{"class":617},"{",[611,1309,1310],{"class":1062}," h1",[611,1312,1009],{"class":617},[611,1314,1316],{"class":1315},"swWMF"," false",[611,1318,1079],{"class":617},[611,1320,1321],{"class":1062}," h2",[611,1323,1009],{"class":617},[611,1325,1316],{"class":1315},[611,1327,1079],{"class":617},[611,1329,1330],{"class":1062}," underline",[611,1332,1009],{"class":617},[611,1334,1316],{"class":1315},[611,1336,1079],{"class":617},[611,1338,1339],{"class":1062}," bulletList",[611,1341,1009],{"class":617},[611,1343,1316],{"class":1315},[611,1345,810],{"class":617},[611,1347,1280],{"class":655},[611,1349,1350],{"class":613,"line":746},[611,1351,1352],{"class":659},"\u002F>\n",[560,1354,1355,1356,1359,1360,1359,1362,1359,1365,1359,1368,1359,1371,1374,1375,1378,1379,1382,1383,1385],{},"The keys are ",[564,1357,1358],{},"h1",", ",[564,1361,590],{},[564,1363,1364],{},"bold",[564,1366,1367],{},"italic",[564,1369,1370],{},"underline",[564,1372,1373],{},"link"," and ",[564,1376,1377],{},"bulletList",". Set a key to ",[564,1380,1381],{},"false"," to hide that button. The prop is typed, so a misspelt key fails the type check. A project whose copy of the file has no ",[564,1384,1241],{}," prop can copy the current file from the template.",[560,1387,1388],{},"H1, H2 and Bullet List also appear in the menu shown on an empty line. That menu is hidden when all three are off.",[1390,1391,1394],"callout",{"icon":1392,"color":1393},"i-heroicons-exclamation-triangle","warning",[560,1395,1396,1400,1401,1403],{},[1397,1398,1399],"strong",{},"Hiding a button doesn't stop the style."," The editor still has every extension, so pasted content and keyboard shortcuts (such as Ctrl+U, or Cmd+U on a Mac, for underline) still apply it. ",[564,1402,1241],{}," only changes the menu. To forbid a style, remove its extension from the editor, or clean the HTML on the API.",[1390,1405,1407],{"icon":1406},"i-heroicons-photo",[560,1408,1409,1410,1412],{},"Image placeholder: the editor's selection menu for a field with ",[564,1411,1241],{}," set to bold, italic and link only, next to the full menu with all seven buttons.",[1414,1415,1416],"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 .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 .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .sPB8G, html code.shiki .sPB8G{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .sGtlX, html code.shiki .sGtlX{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#C792EA}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .s01iV, html code.shiki .s01iV{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#FDAEB7;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:inherit}html pre.shiki code .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 .swB56, html code.shiki .swB56{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .sc2zw, html code.shiki .sc2zw{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .sVlFx, html code.shiki .sVlFx{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .sKpYG, html code.shiki .sKpYG{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbW4m, html code.shiki .sbW4m{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FFCB6B}html pre.shiki code .scpWJ, html code.shiki .scpWJ{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#BABED8}html pre.shiki code .sNTR6, html code.shiki .sNTR6{--shiki-light:#E36209;--shiki-light-font-style:inherit;--shiki-default:#FFAB70;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--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 .swWMF, html code.shiki .swWMF{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FF9CAC}",{"title":607,"searchDepth":628,"depth":628,"links":1418},[1419,1420],{"id":592,"depth":628,"text":593},{"id":1231,"depth":628,"text":1232},"The template's TipTap editor for HTML fields — load it only when an admin edits, keep it out of visitors' prefetch hints, and choose its buttons.","md",{},{"title":275,"description":1421},"cOlKe26LYS7xhvpY9HUN_Pgv88Y3iOQ2wHNDpypysGI",[1427,1429],{"title":271,"path":272,"stem":273,"description":1428,"children":-1},"Render rich-text HTML from a CWA resource with CwaLink replacing anchor tags so internal links stay client-side.",{"title":279,"path":280,"stem":281,"description":1430,"children":-1},"How Mercure broadcasts live content changes to all open browser sessions automatically when a component is published.",1791855278735]