[{"data":1,"prerenderedAt":2140},["ShallowReactive",2],{"navigation":3,"\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-realtime":592,"\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-realtime-surround":2135},[4,24,67,93,232,529],{"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,125,171,175,179,208,212,216,220,224,228],{"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":124},"Users","\u002Fapi\u002Fusers","4.api\u002F04.users",[112,116,120],{"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",false,{"title":48,"path":126,"stem":127,"children":128,"page":124},"\u002Fapi\u002Fcomponents","4.api\u002F05.components",[129,133,154,167],{"title":130,"path":131,"stem":132},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F05.components\u002F1.creating-components",{"title":134,"path":135,"stem":136,"children":137,"page":124},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F05.components\u002F2.annotations",[138,142,146,150],{"title":139,"path":140,"stem":141},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F05.components\u002F2.annotations\u002F1.publishable",{"title":143,"path":144,"stem":145},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F05.components\u002F2.annotations\u002F2.uploadable",{"title":147,"path":148,"stem":149},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F05.components\u002F2.annotations\u002F3.timestamped",{"title":151,"path":152,"stem":153},"Explicit Allow Only","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fexplicit-allow-only","4.api\u002F05.components\u002F2.annotations\u002F4.explicit-allow-only",{"title":155,"path":156,"stem":157,"children":158,"page":124},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F05.components\u002F3.built-ins",[159,163],{"title":160,"path":161,"stem":162},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F05.components\u002F3.built-ins\u002F1.collection-component",{"title":164,"path":165,"stem":166},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F05.components\u002F3.built-ins\u002F2.form-component",{"title":168,"path":169,"stem":170},"Groups & Positions","\u002Fapi\u002Fcomponents\u002Fcomponent-groups","4.api\u002F05.components\u002F4.component-groups",{"title":172,"path":173,"stem":174},"Page Data & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F06.dynamic-pages",{"title":176,"path":177,"stem":178},"Routes","\u002Fapi\u002Froutes","4.api\u002F07.routes",{"title":180,"path":181,"stem":182,"children":183,"page":124},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F08.data-fixtures",[184,188,192,196,200,204],{"title":185,"path":186,"stem":187},"Getting Started with Fixtures","\u002Fapi\u002Fdata-fixtures\u002Fgetting-started","4.api\u002F08.data-fixtures\u002F1.getting-started",{"title":189,"path":190,"stem":191},"Writing a Scaffold","\u002Fapi\u002Fdata-fixtures\u002Fwriting-a-scaffold","4.api\u002F08.data-fixtures\u002F2.writing-a-scaffold",{"title":193,"path":194,"stem":195},"Builder Reference","\u002Fapi\u002Fdata-fixtures\u002Fbuilder-reference","4.api\u002F08.data-fixtures\u002F3.builder-reference",{"title":197,"path":198,"stem":199},"Seeding Content","\u002Fapi\u002Fdata-fixtures\u002Fseeding-content","4.api\u002F08.data-fixtures\u002F4.seeding-content",{"title":201,"path":202,"stem":203},"Appending & Multiple Scaffolds","\u002Fapi\u002Fdata-fixtures\u002Fappending","4.api\u002F08.data-fixtures\u002F5.appending",{"title":205,"path":206,"stem":207},"Generating Fixtures","\u002Fapi\u002Fdata-fixtures\u002Fgenerating-fixtures","4.api\u002F08.data-fixtures\u002F6.generating-fixtures",{"title":209,"path":210,"stem":211},"Real-Time (Mercure)","\u002Fapi\u002Freal-time","4.api\u002F09.real-time",{"title":213,"path":214,"stem":215},"Versions & Conflicts","\u002Fapi\u002Fversions-and-conflicts","4.api\u002F09.versions-and-conflicts",{"title":217,"path":218,"stem":219},"HTTP Caching","\u002Fapi\u002Fhttp-caching","4.api\u002F10.http-caching",{"title":221,"path":222,"stem":223},"Orphaned Data","\u002Fapi\u002Forphaned-data","4.api\u002F11.orphaned-data",{"title":225,"path":226,"stem":227},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F12.console-commands",{"title":229,"path":230,"stem":231},"Debugging & Errors","\u002Fapi\u002Fdebugging","4.api\u002F13.debugging",{"title":233,"path":234,"stem":235,"children":236,"collapsed":23},"Nuxt Module (Front-End)","\u002Fnuxt-module","5.nuxt-module\u002F0.index",[237,238,242,255,275,304,325,456,490,493,521,525],{"title":30,"path":234,"stem":235},{"title":239,"path":240,"stem":241},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F01.module-setup",{"title":243,"path":244,"stem":245,"children":246,"page":124},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F02.configuration",[247,251],{"title":248,"path":249,"stem":250},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F02.configuration\u002F1.nuxt-config",{"title":252,"path":253,"stem":254},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F02.configuration\u002F2.site-config-and-seo",{"title":256,"path":257,"stem":258,"children":259,"page":124},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F03.building-your-ui",[260,264,268,271],{"title":261,"path":262,"stem":263},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F03.building-your-ui\u002F1.creating-layouts",{"title":265,"path":266,"stem":267},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F03.building-your-ui\u002F2.creating-page-templates",{"title":48,"path":269,"stem":270},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F03.building-your-ui\u002F3.creating-components",{"title":272,"path":273,"stem":274},"CLI Generator","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcwa-cli","5.nuxt-module\u002F03.building-your-ui\u002F4.cwa-cli",{"title":276,"path":277,"stem":278,"children":279,"page":124},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F04.component-helpers",[280,284,288,292,296,300],{"title":281,"path":282,"stem":283},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F04.component-helpers\u002F1.images-and-uploads",{"title":285,"path":286,"stem":287},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F04.component-helpers\u002F2.collections-and-pagination",{"title":289,"path":290,"stem":291},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F04.component-helpers\u002F3.html-content",{"title":293,"path":294,"stem":295},"Rich-Text Editor","\u002Fnuxt-module\u002Fcomponent-helpers\u002Frich-text-editor","5.nuxt-module\u002F04.component-helpers\u002F4.rich-text-editor",{"title":297,"path":298,"stem":299},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F04.component-helpers\u002F5.real-time-updates",{"title":301,"path":302,"stem":303},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F04.component-helpers\u002F6.forms",{"title":305,"path":306,"stem":307,"children":308,"page":124},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F05.cwa-components",[309,313,317,321],{"title":310,"path":311,"stem":312},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F05.cwa-components\u002F1.cwa-component-group",{"title":314,"path":315,"stem":316},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F05.cwa-components\u002F2.cwa-page",{"title":318,"path":319,"stem":320},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F05.cwa-components\u002F3.cwa-link",{"title":322,"path":323,"stem":324},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F05.cwa-components\u002F5.cwa-default-layout",{"title":326,"path":327,"stem":328,"children":329,"page":124},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F06.composables",[330,333,341,366,386,411,431],{"title":30,"path":331,"stem":332},"\u002Fnuxt-module\u002Fcomposables\u002Foverview","5.nuxt-module\u002F06.composables\u002F0.overview",{"title":334,"path":335,"stem":336,"children":337,"page":124},"Layout","\u002Fnuxt-module\u002Fcomposables\u002Flayout","5.nuxt-module\u002F06.composables\u002F1.layout",[338],{"title":334,"path":339,"stem":340},"\u002Fnuxt-module\u002Fcomposables\u002Flayout\u002Fuse-cwa-layout","5.nuxt-module\u002F06.composables\u002F1.layout\u002F1.use-cwa-layout",{"title":342,"path":343,"stem":344,"children":345,"page":124},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F06.composables\u002F2.component",[346,350,354,358,362],{"title":347,"path":348,"stem":349},"Component (recommended)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-component","5.nuxt-module\u002F06.composables\u002F2.component\u002F1.use-cwa-component",{"title":351,"path":352,"stem":353},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F06.composables\u002F2.component\u002F2.use-cwa-resource",{"title":355,"path":356,"stem":357},"File Field","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-file-field","5.nuxt-module\u002F06.composables\u002F2.component\u002F3.use-cwa-file-field",{"title":359,"path":360,"stem":361},"Collection Pagination","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-pagination","5.nuxt-module\u002F06.composables\u002F2.component\u002F4.use-cwa-collection-pagination",{"title":363,"path":364,"stem":365},"Collection Resource (deprecated)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F06.composables\u002F2.component\u002F9.use-cwa-collection-resource",{"title":367,"path":368,"stem":369,"children":370,"page":124},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fform","5.nuxt-module\u002F06.composables\u002F3.form",[371,374,378,382],{"title":367,"path":372,"stem":373},"\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form","5.nuxt-module\u002F06.composables\u002F3.form\u002F1.use-cwa-form",{"title":375,"path":376,"stem":377},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-input","5.nuxt-module\u002F06.composables\u002F3.form\u002F2.use-cwa-form-input",{"title":379,"path":380,"stem":381},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F06.composables\u002F3.form\u002F3.use-cwa-form-repeated",{"title":383,"path":384,"stem":385},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fform\u002Fuse-cwa-form-collection","5.nuxt-module\u002F06.composables\u002F3.form\u002F4.use-cwa-form-collection",{"title":387,"path":388,"stem":389,"children":390,"page":124},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F06.composables\u002F4.admin-manager",[391,395,399,403,407],{"title":392,"path":393,"stem":394},"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":396,"path":397,"stem":398},"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":400,"path":401,"stem":402},"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":404,"path":405,"stem":406},"Remote Changes","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fon-remote-change","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F4.on-remote-change",{"title":408,"path":409,"stem":410},"Real-Time Events","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-realtime","5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F5.use-cwa-realtime",{"title":412,"path":413,"stem":414,"children":415,"page":124},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F06.composables\u002F5.utilities",[416,420,424,428],{"title":417,"path":418,"stem":419},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F1.use-cwa-resource-endpoint",{"title":421,"path":422,"stem":423},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F2.use-query-bound-model",{"title":425,"path":426,"stem":427},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F3.use-cwa-resource-route",{"title":289,"path":429,"stem":430},"\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-html-content","5.nuxt-module\u002F06.composables\u002F5.utilities\u002F4.use-html-content",{"title":432,"path":433,"stem":434,"children":435,"page":124},"Auth","\u002Fnuxt-module\u002Fcomposables\u002Fauth","5.nuxt-module\u002F06.composables\u002F6.auth",[436,440,444,448,452],{"title":437,"path":438,"stem":439},"Login","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-login","5.nuxt-module\u002F06.composables\u002F6.auth\u002F1.use-login",{"title":441,"path":442,"stem":443},"Forgot Password","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-forgot-password","5.nuxt-module\u002F06.composables\u002F6.auth\u002F2.use-forgot-password",{"title":445,"path":446,"stem":447},"Reset Password","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-reset-password","5.nuxt-module\u002F06.composables\u002F6.auth\u002F3.use-reset-password",{"title":449,"path":450,"stem":451},"Verify Email","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-verify-email","5.nuxt-module\u002F06.composables\u002F6.auth\u002F4.use-verify-email",{"title":453,"path":454,"stem":455},"Resend Verify Email","\u002Fnuxt-module\u002Fcomposables\u002Fauth\u002Fuse-resend-verify-email","5.nuxt-module\u002F06.composables\u002F6.auth\u002F5.use-resend-verify-email",{"title":457,"path":458,"stem":459,"children":460,"page":124},"Cwa Api","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F07.cwa-api",[461,464,468,472,475,478,482,486],{"title":30,"path":462,"stem":463},"\u002Fnuxt-module\u002Fcwa-api\u002Foverview","5.nuxt-module\u002F07.cwa-api\u002F1.overview",{"title":465,"path":466,"stem":467},"Resources","\u002Fnuxt-module\u002Fcwa-api\u002Fresources","5.nuxt-module\u002F07.cwa-api\u002F2.resources",{"title":469,"path":470,"stem":471},"Resources Manager","\u002Fnuxt-module\u002Fcwa-api\u002Fresources-manager","5.nuxt-module\u002F07.cwa-api\u002F3.resources-manager",{"title":432,"path":473,"stem":474},"\u002Fnuxt-module\u002Fcwa-api\u002Fauth","5.nuxt-module\u002F07.cwa-api\u002F4.auth",{"title":301,"path":476,"stem":477},"\u002Fnuxt-module\u002Fcwa-api\u002Fforms","5.nuxt-module\u002F07.cwa-api\u002F5.forms",{"title":479,"path":480,"stem":481},"Admin","\u002Fnuxt-module\u002Fcwa-api\u002Fadmin","5.nuxt-module\u002F07.cwa-api\u002F6.admin",{"title":483,"path":484,"stem":485},"Site Config","\u002Fnuxt-module\u002Fcwa-api\u002Fsite-config","5.nuxt-module\u002F07.cwa-api\u002F7.site-config",{"title":487,"path":488,"stem":489},"Orphaned Resources","\u002Fnuxt-module\u002Fcwa-api\u002Forphaned-resources","5.nuxt-module\u002F07.cwa-api\u002F8.orphaned-resources",{"title":113,"path":491,"stem":492},"\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F08.authentication",{"title":494,"path":495,"stem":496,"children":497,"page":124},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[498,501,505,509,513,517],{"title":30,"path":499,"stem":500},"\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":502,"path":503,"stem":504},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":506,"path":507,"stem":508},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":510,"path":511,"stem":512},"Styling","\u002Fnuxt-module\u002Fcwa-layer\u002Fstyling","5.nuxt-module\u002F9.cwa-layer\u002F4.styling",{"title":514,"path":515,"stem":516},"Date Pickers","\u002Fnuxt-module\u002Fcwa-layer\u002Fdate-pickers","5.nuxt-module\u002F9.cwa-layer\u002F5.date-pickers",{"title":518,"path":519,"stem":520},"Maintenance","\u002Fnuxt-module\u002Fcwa-layer\u002Fmaintenance","5.nuxt-module\u002F9.cwa-layer\u002F6.maintenance",{"title":522,"path":523,"stem":524},"PWA & Offline","\u002Fnuxt-module\u002Fpwa","5.nuxt-module\u002F91.pwa",{"title":526,"path":527,"stem":528},"Page Caching","\u002Fnuxt-module\u002Fpage-caching","5.nuxt-module\u002F92.page-caching",{"title":530,"path":531,"stem":532,"children":533,"collapsed":23},"Deployment & Operations","\u002Fdeployment","6.deployment\u002F0.index",[534,536,540,544,548,552,556,560,564,568,572,576,580,584,588],{"title":535,"path":531,"stem":532},"Deploying a CWA Site",{"title":537,"path":538,"stem":539},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":541,"path":542,"stem":543},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":545,"path":546,"stem":547},"Scaled Mode","\u002Fdeployment\u002Fscaled-mode","6.deployment\u002F2.scaled-mode",{"title":549,"path":550,"stem":551},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"title":553,"path":554,"stem":555},"Migrations and Backups","\u002Fdeployment\u002Fmigrations-and-backups","6.deployment\u002F3.migrations-and-backups",{"title":557,"path":558,"stem":559},"CI\u002FCD Variables","\u002Fdeployment\u002Fvariables","6.deployment\u002F4.variables",{"title":561,"path":562,"stem":563},"Cloudflare","\u002Fdeployment\u002Fcloudflare","6.deployment\u002F5.cloudflare",{"title":565,"path":566,"stem":567},"Origin Protection","\u002Fdeployment\u002Forigin-protection","6.deployment\u002F5.origin-protection",{"title":569,"path":570,"stem":571},"Load Testing","\u002Fdeployment\u002Fload-testing","6.deployment\u002F6.load-testing",{"title":573,"path":574,"stem":575},"Performance Audit","\u002Fdeployment\u002Fperformance-audit","6.deployment\u002F6.performance-audit",{"title":577,"path":578,"stem":579},"Reading Lighthouse Scores","\u002Fdeployment\u002Freading-lighthouse-scores","6.deployment\u002F6.reading-lighthouse-scores",{"title":581,"path":582,"stem":583},"Browser Tests","\u002Fdeployment\u002Fbrowser-tests","6.deployment\u002F7.browser-tests",{"title":585,"path":586,"stem":587},"Faster Functional Tests","\u002Fdeployment\u002Ffaster-functional-tests","6.deployment\u002F7.faster-functional-tests",{"title":589,"path":590,"stem":591},"Troubleshooting","\u002Fdeployment\u002Ftroubleshooting","6.deployment\u002F7.troubleshooting",{"id":593,"title":594,"badge":595,"body":596,"description":2129,"extension":2130,"links":595,"meta":2131,"navigation":2132,"path":409,"seo":2133,"stem":410,"__hash__":2134},"docs\u002F5.nuxt-module\u002F06.composables\u002F4.admin-manager\u002F5.use-cwa-realtime.md","useCwaRealtime",null,{"type":597,"value":598,"toc":2122},"minimark",[599,618,627,948,953,1143,1149,1177,1181,1188,1375,1391,1395,1412,1438,1444,1459,1463,1477,1480,1606,1609,1632,1636,1655,2111,2118],[600,601,602,605,606,609,610,613,614,617],"p",{},[603,604,594],"code",{}," lets admins' browsers talk to each other about one resource. It's for an editor that shares more than saved values, such as where each admin's caret is. It returns the other admins on the resource (",[603,607,608],{},"peers","), a way to send an event (",[603,611,612],{},"send",") and a way to hear one (",[603,615,616],{},"on",").",[600,619,620,621,626],{},"The module already shows who's editing and applies other admins' saves (see ",[622,623,625],"a",{"href":624},"\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates#co-editing-in-the-admin","Real-Time Updates › Co-Editing in the Admin","), so most components need nothing from it.",[628,629,634],"pre",{"className":630,"code":631,"language":632,"meta":633,"style":633},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight has-focused","import { useCwaRealtime } from '#imports'\n\nconst props = defineProps\u003C{ iri: string }>()\n\ntype Events = {\n  selection: { from: number, to: number } | null\n}\n\nconst { send, on, peers } = useCwaRealtime\u003CEvents>(() => props.iri) \u002F\u002F [!code focus]\n\non('selection', ({ clientId, name, colour, data }) => { \u002F\u002F [!code focus]\n  \u002F\u002F draw another admin's caret\n}) \u002F\u002F [!code focus]\n\nsend('selection', { from: 4, to: 4 }) \u002F\u002F [!code focus]\n","ts","",[603,635,636,670,676,715,720,735,770,776,781,835,840,887,894,904,909],{"__ignoreMap":633},[637,638,641,645,649,653,656,659,663,667],"span",{"class":639,"line":640},"line",1,[637,642,644],{"class":643},"sm4w6","import",[637,646,648],{"class":647},"sOvfz"," {",[637,650,652],{"class":651},"sPB8G"," useCwaRealtime",[637,654,655],{"class":647}," }",[637,657,658],{"class":643}," from",[637,660,662],{"class":661},"seSrl"," '",[637,664,666],{"class":665},"sLL54","#imports",[637,668,669],{"class":661},"'\n",[637,671,673],{"class":639,"line":672},2,[637,674,675],{"emptyLinePlaceholder":23},"\n",[637,677,679,683,687,691,695,698,702,705,709,712],{"class":639,"line":678},3,[637,680,682],{"class":681},"swB56","const",[637,684,686],{"class":685},"sc2zw"," props",[637,688,690],{"class":689},"sVlFx"," =",[637,692,694],{"class":693},"sKpYG"," defineProps",[637,696,697],{"class":647},"\u003C{",[637,699,701],{"class":700},"ssFBz"," iri",[637,703,704],{"class":689},":",[637,706,708],{"class":707},"sbW4m"," string",[637,710,711],{"class":647}," }>",[637,713,714],{"class":651},"()\n",[637,716,718],{"class":639,"line":717},4,[637,719,675],{"emptyLinePlaceholder":23},[637,721,723,726,730,732],{"class":639,"line":722},5,[637,724,725],{"class":681},"type",[637,727,729],{"class":728},"sRCss"," Events",[637,731,690],{"class":689},[637,733,734],{"class":647}," {\n",[637,736,738,741,743,745,747,749,752,755,758,760,762,764,767],{"class":639,"line":737},6,[637,739,740],{"class":700},"  selection",[637,742,704],{"class":689},[637,744,648],{"class":647},[637,746,658],{"class":700},[637,748,704],{"class":689},[637,750,751],{"class":707}," number",[637,753,754],{"class":647},",",[637,756,757],{"class":700}," to",[637,759,704],{"class":689},[637,761,751],{"class":707},[637,763,655],{"class":647},[637,765,766],{"class":689}," |",[637,768,769],{"class":707}," null\n",[637,771,773],{"class":639,"line":772},7,[637,774,775],{"class":647},"}\n",[637,777,779],{"class":639,"line":778},8,[637,780,675],{"emptyLinePlaceholder":23},[637,782,786,788,790,793,795,798,800,803,805,807,809,812,815,818,821,824,827,829,832],{"class":783,"line":785},[639,784],"focused",9,[637,787,682],{"class":681},[637,789,648],{"class":647},[637,791,792],{"class":685}," send",[637,794,754],{"class":647},[637,796,797],{"class":685}," on",[637,799,754],{"class":647},[637,801,802],{"class":685}," peers",[637,804,655],{"class":647},[637,806,690],{"class":689},[637,808,652],{"class":693},[637,810,811],{"class":647},"\u003C",[637,813,814],{"class":728},"Events",[637,816,817],{"class":647},">",[637,819,820],{"class":651},"(",[637,822,823],{"class":647},"()",[637,825,826],{"class":681}," =>",[637,828,686],{"class":651},[637,830,831],{"class":647},".",[637,833,834],{"class":651},"iri) ",[637,836,838],{"class":639,"line":837},10,[637,839,675],{"emptyLinePlaceholder":23},[637,841,844,846,848,851,854,856,858,861,865,867,870,872,875,877,880,883,885],{"class":842,"line":843},[639,784],11,[637,845,616],{"class":693},[637,847,820],{"class":651},[637,849,850],{"class":661},"'",[637,852,853],{"class":665},"selection",[637,855,850],{"class":661},[637,857,754],{"class":647},[637,859,860],{"class":647}," ({",[637,862,864],{"class":863},"sNTR6"," clientId",[637,866,754],{"class":647},[637,868,869],{"class":863}," name",[637,871,754],{"class":647},[637,873,874],{"class":863}," colour",[637,876,754],{"class":647},[637,878,879],{"class":863}," data",[637,881,882],{"class":647}," })",[637,884,826],{"class":681},[637,886,648],{"class":647},[637,888,890],{"class":639,"line":889},12,[637,891,893],{"class":892},"sTBSN","  \u002F\u002F draw another admin's caret\n",[637,895,898,901],{"class":896,"line":897},[639,784],13,[637,899,900],{"class":647},"}",[637,902,903],{"class":651},") ",[637,905,907],{"class":639,"line":906},14,[637,908,675],{"emptyLinePlaceholder":23},[637,910,913,915,917,919,921,923,925,927,930,932,936,938,940,942,944,946],{"class":911,"line":912},[639,784],15,[637,914,612],{"class":693},[637,916,820],{"class":651},[637,918,850],{"class":661},[637,920,853],{"class":665},[637,922,850],{"class":661},[637,924,754],{"class":647},[637,926,648],{"class":647},[637,928,658],{"class":929},"sDHlG",[637,931,704],{"class":647},[637,933,935],{"class":934},"scSvc"," 4",[637,937,754],{"class":647},[637,939,757],{"class":929},[637,941,704],{"class":647},[637,943,935],{"class":934},[637,945,655],{"class":647},[637,947,903],{"class":651},[949,950,952],"h2",{"id":951},"signature","Signature",[628,954,957],{"className":955,"code":956,"language":632,"meta":633,"style":633},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight","useCwaRealtime\u003CEvents extends object = Record\u003Cstring, unknown>>(\n  iri: MaybeRefOrGetter\u003Cstring | undefined>\n): {\n  peers: ComputedRef\u003CRealtimePeer[]>\n  send: (event: keyof Events, data: Events[event]) => boolean\n  on: (event: keyof Events, handler: (message: RealtimeMessage\u003CEvents[event]>) => void) => () => void\n}\n",[603,958,959,990,1010,1018,1035,1076,1139],{"__ignoreMap":633},[637,960,961,963,965,968,971,974,976,979,981,984,987],{"class":639,"line":640},[637,962,594],{"class":651},[637,964,811],{"class":689},[637,966,967],{"class":651},"Events extends object ",[637,969,970],{"class":689},"=",[637,972,973],{"class":651}," Record",[637,975,811],{"class":689},[637,977,978],{"class":651},"string",[637,980,754],{"class":647},[637,982,983],{"class":651}," unknown",[637,985,986],{"class":689},">>",[637,988,989],{"class":651},"(\n",[637,991,992,995,997,1000,1003,1007],{"class":639,"line":672},[637,993,994],{"class":651},"  iri: MaybeRefOrGetter",[637,996,811],{"class":689},[637,998,999],{"class":651},"string ",[637,1001,1002],{"class":689},"|",[637,1004,1006],{"class":1005},"sBtbT"," undefined",[637,1008,1009],{"class":689},">\n",[637,1011,1012,1015],{"class":639,"line":678},[637,1013,1014],{"class":651},"): ",[637,1016,1017],{"class":647},"{\n",[637,1019,1020,1023,1025,1028,1030,1033],{"class":639,"line":717},[637,1021,1022],{"class":929},"  peers",[637,1024,704],{"class":647},[637,1026,1027],{"class":651}," ComputedRef",[637,1029,811],{"class":689},[637,1031,1032],{"class":651},"RealtimePeer[]",[637,1034,1009],{"class":689},[637,1036,1037,1040,1042,1045,1047,1050,1052,1054,1056,1058,1060,1063,1065,1068,1071,1073],{"class":639,"line":722},[637,1038,1039],{"class":651},"  send: ",[637,1041,820],{"class":647},[637,1043,1044],{"class":863},"event",[637,1046,704],{"class":689},[637,1048,1049],{"class":689}," keyof",[637,1051,729],{"class":728},[637,1053,754],{"class":647},[637,1055,879],{"class":863},[637,1057,704],{"class":689},[637,1059,729],{"class":728},[637,1061,1062],{"class":651},"[",[637,1064,1044],{"class":728},[637,1066,1067],{"class":651},"]",[637,1069,1070],{"class":647},")",[637,1072,826],{"class":681},[637,1074,1075],{"class":651}," boolean\n",[637,1077,1078,1081,1083,1085,1087,1089,1091,1093,1096,1098,1101,1104,1106,1109,1111,1113,1115,1117,1119,1122,1124,1127,1129,1131,1134,1136],{"class":639,"line":737},[637,1079,1080],{"class":651},"  on: ",[637,1082,820],{"class":647},[637,1084,1044],{"class":863},[637,1086,704],{"class":689},[637,1088,1049],{"class":689},[637,1090,729],{"class":728},[637,1092,754],{"class":647},[637,1094,1095],{"class":693}," handler",[637,1097,704],{"class":689},[637,1099,1100],{"class":647}," (",[637,1102,1103],{"class":863},"message",[637,1105,704],{"class":689},[637,1107,1108],{"class":728}," RealtimeMessage",[637,1110,811],{"class":647},[637,1112,814],{"class":728},[637,1114,1062],{"class":651},[637,1116,1044],{"class":728},[637,1118,1067],{"class":651},[637,1120,1121],{"class":647},">)",[637,1123,826],{"class":681},[637,1125,1126],{"class":707}," void",[637,1128,1070],{"class":647},[637,1130,826],{"class":681},[637,1132,1133],{"class":647}," ()",[637,1135,826],{"class":681},[637,1137,1138],{"class":689}," void\n",[637,1140,1141],{"class":639,"line":772},[637,1142,775],{"class":647},[600,1144,1145,1148],{},[603,1146,1147],{},"iri"," can be a string, a ref or a getter, so it follows the selected resource. A draft and its published version count as one resource: an event sent on either reaches handlers on both.",[600,1150,1151,1153,1154,1156,1157,1159,1160,1163,1164,1163,1167,1156,1170,1173,1174,831],{},[603,1152,814],{}," maps each event name to the type of its data, so ",[603,1155,612],{}," and ",[603,1158,616],{}," are typed. The types ",[603,1161,1162],{},"RealtimePeer",", ",[603,1165,1166],{},"RealtimeMessage",[603,1168,1169],{},"RealtimeEventHandler",[603,1171,1172],{},"RealtimeEvents"," can be imported from ",[603,1175,1176],{},"#cwa\u002Fcomposables\u002Fcwa-realtime",[949,1178,1179],{"id":608},[603,1180,608],{},[600,1182,1183,1184,1187],{},"The other admins who have this component, or its component position, selected. Your own other windows are listed too, with ",[603,1185,1186],{},"isSelf: true",". Your current tab never is.",[1189,1190,1191,1207],"table",{},[1192,1193,1194],"thead",{},[1195,1196,1197,1201,1204],"tr",{},[1198,1199,1200],"th",{},"Property",[1198,1202,1203],{},"Type",[1198,1205,1206],{},"Description",[1208,1209,1210,1225,1240,1262,1280,1295,1310,1324,1342,1358],"tbody",{},[1195,1211,1212,1218,1222],{},[1213,1214,1215],"td",{},[603,1216,1217],{},"clientId",[1213,1219,1220],{},[603,1221,978],{},[1213,1223,1224],{},"The other browser tab's ID. One admin with two tabs open is two entries",[1195,1226,1227,1232,1237],{},[1213,1228,1229],{},[603,1230,1231],{},"user",[1213,1233,1234],{},[603,1235,1236],{},"{ id: string, name?: string }",[1213,1238,1239],{},"The admin's user IRI, and their display name when the API sent one",[1195,1241,1242,1247,1251],{},[1213,1243,1244],{},[603,1245,1246],{},"name",[1213,1248,1249],{},[603,1250,978],{},[1213,1252,1253,1254,1258,1259],{},"The name to show: the admin's name, ",[1255,1256,1257],"strong",{},"Someone"," without one, or ",[1255,1260,1261],{},"You (other window)",[1195,1263,1264,1269,1274],{},[1213,1265,1266],{},[603,1267,1268],{},"state",[1213,1270,1271],{},[603,1272,1273],{},"'selected' | 'editing' | 'idle'",[1213,1275,1276,1279],{},[603,1277,1278],{},"editing"," while they have a field in focus or a save waiting or in flight",[1195,1281,1282,1287,1292],{},[1213,1283,1284],{},[603,1285,1286],{},"field",[1213,1288,1289],{},[603,1290,1291],{},"string | undefined",[1213,1293,1294],{},"The field they have in focus",[1195,1296,1297,1302,1307],{},[1213,1298,1299],{},[603,1300,1301],{},"expiresAt",[1213,1303,1304],{},[603,1305,1306],{},"number",[1213,1308,1309],{},"When the entry is dropped (milliseconds since the epoch) unless they send presence again",[1195,1311,1312,1317,1321],{},[1213,1313,1314],{},[603,1315,1316],{},"colour",[1213,1318,1319],{},[603,1320,978],{},[1213,1322,1323],{},"Their presence colour, as in the admin header. Your own windows are grey",[1195,1325,1326,1331,1336],{},[1213,1327,1328],{},[603,1329,1330],{},"isSelf",[1213,1332,1333],{},[603,1334,1335],{},"boolean",[1213,1337,1338,1341],{},[603,1339,1340],{},"true"," for your own other windows",[1195,1343,1344,1349,1353],{},[1213,1345,1346],{},[603,1347,1348],{},"idle",[1213,1350,1351],{},[603,1352,1335],{},[1213,1354,1355,1357],{},[603,1356,1340],{}," when their tab is hidden or they haven't used it for 5 minutes",[1195,1359,1360,1365,1369],{},[1213,1361,1362],{},[603,1363,1364],{},"device",[1213,1366,1367],{},[603,1368,1291],{},[1213,1370,1371,1372],{},"Only on your own windows: a label such as ",[603,1373,1374],{},"Chrome on macOS",[1376,1377,1379],"callout",{"icon":1378},"i-heroicons-information-circle",[600,1380,1381,1386,1387,617],{},[1255,1382,1383,1385],{},[603,1384,608],{}," lists admins on a component, not on a page."," An admin is only listed once they select the component, or its position. Who's on the page is shown in the admin header (see ",[622,1388,1390],{"href":1389},"\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates#who-else-is-here","Real-Time Updates › Who Else Is Here",[949,1392,1393],{"id":612},[603,1394,612],{},[600,1396,1397,1400,1401,1404,1405,1407,1408,1411],{},[603,1398,1399],{},"send(event, data)"," sends ",[603,1402,1403],{},"data"," to the other admins' tabs. It returns ",[603,1406,1340],{}," when the event is queued, and ",[603,1409,1410],{},"false"," when nothing is sent:",[1413,1414,1415,1426,1433],"ul",{},[1416,1417,1418,1419,1422,1423,1425],"li",{},"the user isn't a signed-in admin, or ",[603,1420,1421],{},"cwa.realtime.enabled"," is ",[603,1424,1410],{},";",[1416,1427,1428,1429,1432],{},"the real-time connection is down (the admin header then says ",[1255,1430,1431],{},"Live editing paused",");",[1416,1434,1435,1437],{},[603,1436,1147],{}," is empty.",[600,1439,1440,1441,1443],{},"A tab sends one real-time request at a time, at most 8 a second. Presence goes first. While an event waits to be sent, a newer ",[603,1442,612],{}," of the same event on the same resource replaces its data, so only the newest data goes. That suits state like a caret position, but not a log of changes.",[1376,1445,1448],{"icon":1446,"color":1447},"i-heroicons-exclamation-triangle","warning",[600,1449,1450,1453,1454,1458],{},[1255,1451,1452],{},"Keep each event small."," The API refuses an event body over 16 KB (see ",[622,1455,1457],{"href":1456},"\u002Fapi\u002Freal-time#the-admin-real-time-channel","Real-Time Updates (Mercure) › The Admin Real-Time Channel","). The module logs one warning for each refused event name and drops it. Send larger state some other way, such as saving it to the API and sending a short notice.",[949,1460,1461],{"id":616},[603,1462,616],{},[600,1464,1465,1468,1469,1472,1473,1476],{},[603,1466,1467],{},"on(event, handler)"," calls ",[603,1470,1471],{},"handler"," for each event of that name sent on this resource by another tab. It returns a function that stops listening. Called inside a component's ",[603,1474,1475],{},"setup",", it stops by itself when the component unmounts.",[600,1478,1479],{},"The handler gets one message:",[1189,1481,1482,1492],{},[1192,1483,1484],{},[1195,1485,1486,1488,1490],{},[1198,1487,1200],{},[1198,1489,1203],{},[1198,1491,1206],{},[1208,1493,1494,1507,1520,1535,1550,1563,1576,1592],{},[1195,1495,1496,1500,1504],{},[1213,1497,1498],{},[603,1499,1217],{},[1213,1501,1502],{},[603,1503,978],{},[1213,1505,1506],{},"The sending tab's ID",[1195,1508,1509,1513,1517],{},[1213,1510,1511],{},[603,1512,1231],{},[1213,1514,1515],{},[603,1516,1236],{},[1213,1518,1519],{},"The sender's user IRI and name",[1195,1521,1522,1526,1530],{},[1213,1523,1524],{},[603,1525,1246],{},[1213,1527,1528],{},[603,1529,978],{},[1213,1531,1532,1533],{},"The name to show, as in ",[603,1534,608],{},[1195,1536,1537,1541,1545],{},[1213,1538,1539],{},[603,1540,1330],{},[1213,1542,1543],{},[603,1544,1335],{},[1213,1546,1547,1549],{},[603,1548,1340],{}," when it came from your own other window",[1195,1551,1552,1556,1560],{},[1213,1553,1554],{},[603,1555,1316],{},[1213,1557,1558],{},[603,1559,978],{},[1213,1561,1562],{},"The sender's presence colour",[1195,1564,1565,1569,1573],{},[1213,1566,1567],{},[603,1568,1044],{},[1213,1570,1571],{},[603,1572,978],{},[1213,1574,1575],{},"The event name",[1195,1577,1578,1582,1587],{},[1213,1579,1580],{},[603,1581,1403],{},[1213,1583,1584],{},[603,1585,1586],{},"Events[event]",[1213,1588,1589,1590],{},"What the sender passed to ",[603,1591,612],{},[1195,1593,1594,1599,1603],{},[1213,1595,1596],{},[603,1597,1598],{},"sentAt",[1213,1600,1601],{},[603,1602,1291],{},[1213,1604,1605],{},"When the API received it",[600,1607,1608],{},"A handler never hears its own tab's events. A handler that throws is logged, and the other handlers still run.",[1376,1610,1611],{"icon":1446,"color":1447},[600,1612,1613,1623,1624,1626,1627,1156,1629,1631],{},[1255,1614,1615,1618,1619,1622],{},[603,1616,1617],{},"presence"," and names starting with ",[603,1620,1621],{},"cwa:"," are reserved"," for the module's own events. In development, using one throws an error. In production, ",[603,1625,612],{}," returns ",[603,1628,1410],{},[603,1630,616],{}," does nothing.",[949,1633,1635],{"id":1634},"an-example-live-carets","An Example: Live Carets",[600,1637,1638,1639,1642,1643,1646,1647,1654],{},"The template's TipTap editor shows other admins' carets this way. Each tab sends its selection when it changes, and ",[603,1640,1641],{},"null"," when it leaves the field. The editor only draws carets of admins who have the field in focus, from the field's ",[603,1644,1645],{},"focusedBy"," (see ",[622,1648,1650,1653],{"href":1649},"\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-model#field-presence",[603,1651,1652],{},"useCwaResourceModel"," › Field Presence","):",[628,1656,1658],{"className":630,"code":1657,"language":632,"meta":633,"style":633},"const props = defineProps\u003C{\n  model: ReturnType\u003Ctypeof useCwaResourceModel\u003Cstring>>\n  iri: string\n}>()\n\ntype Selection = { from: number, to: number } | null\nconst { send, on } = useCwaRealtime\u003C{ selection: { selection: Selection } }>(() => props.iri)\nconst selections = reactive(new Map\u003Cstring, { name: string, colour: string, from: number, to: number }>())\n\non('selection', ({ data: { selection }, clientId, name, colour }) => { \u002F\u002F [!code focus]\n  selection ? selections.set(clientId, { name, colour, ...selection }) : selections.delete(clientId) \u002F\u002F [!code focus]\n}) \u002F\u002F [!code focus]\n\nconst inField = computed(() => props.model.focusedBy.value.flatMap(peer => peer.clientIds))\nconst carets = computed(() => [...selections].filter(([clientId]) => inField.value.includes(clientId)))\n\n\u002F\u002F in the editor's options\n\u002F\u002F onFocus: ({ editor }) => send('selection', { selection: { from: editor.state.selection.from, to: editor.state.selection.to } }),\n\u002F\u002F onBlur: () => send('selection', { selection: null }),\n",[603,1659,1660,1673,1698,1708,1715,1719,1750,1800,1863,1867,1911,1966,1973,1977,2031,2088,2093,2099,2105],{"__ignoreMap":633},[637,1661,1662,1664,1666,1668,1670],{"class":639,"line":640},[637,1663,682],{"class":681},[637,1665,686],{"class":685},[637,1667,690],{"class":689},[637,1669,694],{"class":693},[637,1671,1672],{"class":647},"\u003C{\n",[637,1674,1675,1678,1680,1683,1685,1688,1691,1693,1695],{"class":639,"line":672},[637,1676,1677],{"class":700},"  model",[637,1679,704],{"class":689},[637,1681,1682],{"class":728}," ReturnType",[637,1684,811],{"class":647},[637,1686,1687],{"class":689},"typeof",[637,1689,1690],{"class":651}," useCwaResourceModel",[637,1692,811],{"class":647},[637,1694,978],{"class":707},[637,1696,1697],{"class":647},">>\n",[637,1699,1700,1703,1705],{"class":639,"line":678},[637,1701,1702],{"class":700},"  iri",[637,1704,704],{"class":689},[637,1706,1707],{"class":707}," string\n",[637,1709,1710,1713],{"class":639,"line":717},[637,1711,1712],{"class":647},"}>",[637,1714,714],{"class":651},[637,1716,1717],{"class":639,"line":722},[637,1718,675],{"emptyLinePlaceholder":23},[637,1720,1721,1723,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748],{"class":639,"line":737},[637,1722,725],{"class":681},[637,1724,1725],{"class":728}," Selection",[637,1727,690],{"class":689},[637,1729,648],{"class":647},[637,1731,658],{"class":700},[637,1733,704],{"class":689},[637,1735,751],{"class":707},[637,1737,754],{"class":647},[637,1739,757],{"class":700},[637,1741,704],{"class":689},[637,1743,751],{"class":707},[637,1745,655],{"class":647},[637,1747,766],{"class":689},[637,1749,769],{"class":707},[637,1751,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797],{"class":639,"line":772},[637,1753,682],{"class":681},[637,1755,648],{"class":647},[637,1757,792],{"class":685},[637,1759,754],{"class":647},[637,1761,797],{"class":685},[637,1763,655],{"class":647},[637,1765,690],{"class":689},[637,1767,652],{"class":693},[637,1769,697],{"class":647},[637,1771,1772],{"class":700}," selection",[637,1774,704],{"class":689},[637,1776,648],{"class":647},[637,1778,1772],{"class":700},[637,1780,704],{"class":689},[637,1782,1725],{"class":728},[637,1784,655],{"class":647},[637,1786,711],{"class":647},[637,1788,820],{"class":651},[637,1790,823],{"class":647},[637,1792,826],{"class":681},[637,1794,686],{"class":651},[637,1796,831],{"class":647},[637,1798,1799],{"class":651},"iri)\n",[637,1801,1802,1804,1807,1809,1812,1814,1817,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860],{"class":639,"line":778},[637,1803,682],{"class":681},[637,1805,1806],{"class":685}," selections",[637,1808,690],{"class":689},[637,1810,1811],{"class":693}," reactive",[637,1813,820],{"class":651},[637,1815,1816],{"class":689},"new",[637,1818,1819],{"class":693}," Map",[637,1821,811],{"class":647},[637,1823,978],{"class":707},[637,1825,754],{"class":647},[637,1827,648],{"class":647},[637,1829,869],{"class":700},[637,1831,704],{"class":689},[637,1833,708],{"class":707},[637,1835,754],{"class":647},[637,1837,874],{"class":700},[637,1839,704],{"class":689},[637,1841,708],{"class":707},[637,1843,754],{"class":647},[637,1845,658],{"class":700},[637,1847,704],{"class":689},[637,1849,751],{"class":707},[637,1851,754],{"class":647},[637,1853,757],{"class":700},[637,1855,704],{"class":689},[637,1857,751],{"class":707},[637,1859,711],{"class":647},[637,1861,1862],{"class":651},"())\n",[637,1864,1865],{"class":639,"line":785},[637,1866,675],{"emptyLinePlaceholder":23},[637,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1895,1897,1899,1901,1903,1905,1907,1909],{"class":1869,"line":837},[639,784],[637,1871,616],{"class":693},[637,1873,820],{"class":651},[637,1875,850],{"class":661},[637,1877,853],{"class":665},[637,1879,850],{"class":661},[637,1881,754],{"class":647},[637,1883,860],{"class":647},[637,1885,879],{"class":700},[637,1887,704],{"class":647},[637,1889,648],{"class":647},[637,1891,1772],{"class":863},[637,1893,1894],{"class":647}," },",[637,1896,864],{"class":863},[637,1898,754],{"class":647},[637,1900,869],{"class":863},[637,1902,754],{"class":647},[637,1904,874],{"class":863},[637,1906,882],{"class":647},[637,1908,826],{"class":681},[637,1910,648],{"class":647},[637,1912,1914,1916,1919,1921,1923,1926,1928,1930,1932,1934,1936,1938,1940,1942,1945,1947,1949,1951,1953,1955,1957,1960,1962,1964],{"class":1913,"line":843},[639,784],[637,1915,740],{"class":651},[637,1917,1918],{"class":689}," ?",[637,1920,1806],{"class":651},[637,1922,831],{"class":647},[637,1924,1925],{"class":693},"set",[637,1927,820],{"class":929},[637,1929,1217],{"class":651},[637,1931,754],{"class":647},[637,1933,648],{"class":647},[637,1935,869],{"class":651},[637,1937,754],{"class":647},[637,1939,874],{"class":651},[637,1941,754],{"class":647},[637,1943,1944],{"class":689}," ...",[637,1946,853],{"class":651},[637,1948,655],{"class":647},[637,1950,903],{"class":929},[637,1952,704],{"class":689},[637,1954,1806],{"class":651},[637,1956,831],{"class":647},[637,1958,1959],{"class":693},"delete",[637,1961,820],{"class":929},[637,1963,1217],{"class":651},[637,1965,903],{"class":929},[637,1967,1969,1971],{"class":1968,"line":889},[639,784],[637,1970,900],{"class":647},[637,1972,903],{"class":651},[637,1974,1975],{"class":639,"line":897},[637,1976,675],{"emptyLinePlaceholder":23},[637,1978,1979,1981,1984,1986,1989,1991,1993,1995,1997,1999,2002,2004,2006,2008,2011,2013,2016,2018,2021,2023,2026,2028],{"class":639,"line":906},[637,1980,682],{"class":681},[637,1982,1983],{"class":685}," inField",[637,1985,690],{"class":689},[637,1987,1988],{"class":693}," computed",[637,1990,820],{"class":651},[637,1992,823],{"class":647},[637,1994,826],{"class":681},[637,1996,686],{"class":651},[637,1998,831],{"class":647},[637,2000,2001],{"class":651},"model",[637,2003,831],{"class":647},[637,2005,1645],{"class":651},[637,2007,831],{"class":647},[637,2009,2010],{"class":651},"value",[637,2012,831],{"class":647},[637,2014,2015],{"class":693},"flatMap",[637,2017,820],{"class":651},[637,2019,2020],{"class":863},"peer",[637,2022,826],{"class":681},[637,2024,2025],{"class":651}," peer",[637,2027,831],{"class":647},[637,2029,2030],{"class":651},"clientIds))\n",[637,2032,2033,2035,2038,2040,2042,2044,2046,2048,2051,2054,2057,2059,2062,2064,2067,2069,2072,2074,2076,2078,2080,2082,2085],{"class":639,"line":912},[637,2034,682],{"class":681},[637,2036,2037],{"class":685}," carets",[637,2039,690],{"class":689},[637,2041,1988],{"class":693},[637,2043,820],{"class":651},[637,2045,823],{"class":647},[637,2047,826],{"class":681},[637,2049,2050],{"class":651}," [",[637,2052,2053],{"class":689},"...",[637,2055,2056],{"class":651},"selections]",[637,2058,831],{"class":647},[637,2060,2061],{"class":693},"filter",[637,2063,820],{"class":651},[637,2065,2066],{"class":647},"([",[637,2068,1217],{"class":863},[637,2070,2071],{"class":647},"])",[637,2073,826],{"class":681},[637,2075,1983],{"class":651},[637,2077,831],{"class":647},[637,2079,2010],{"class":651},[637,2081,831],{"class":647},[637,2083,2084],{"class":693},"includes",[637,2086,2087],{"class":651},"(clientId)))\n",[637,2089,2091],{"class":639,"line":2090},16,[637,2092,675],{"emptyLinePlaceholder":23},[637,2094,2096],{"class":639,"line":2095},17,[637,2097,2098],{"class":892},"\u002F\u002F in the editor's options\n",[637,2100,2102],{"class":639,"line":2101},18,[637,2103,2104],{"class":892},"\u002F\u002F onFocus: ({ editor }) => send('selection', { selection: { from: editor.state.selection.from, to: editor.state.selection.to } }),\n",[637,2106,2108],{"class":639,"line":2107},19,[637,2109,2110],{"class":892},"\u002F\u002F onBlur: () => send('selection', { selection: null }),\n",[600,2112,2113,2114,831],{},"The full editor is described in ",[622,2115,2117],{"href":2116},"\u002Fnuxt-module\u002Fcomponent-helpers\u002Frich-text-editor#editing-together","Rich-Text Editor › Editing Together",[2119,2120,2121],"style",{},"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 .sOvfz, html code.shiki .sOvfz{--shiki-light:#24292E;--shiki-default:#E1E4E8;--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 .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .swB56, html code.shiki .swB56{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .sc2zw, html code.shiki .sc2zw{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .sVlFx, html code.shiki .sVlFx{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .sKpYG, html code.shiki .sKpYG{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#82AAFF}html pre.shiki code .ssFBz, html code.shiki .ssFBz{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#F07178}html pre.shiki code .sbW4m, html code.shiki .sbW4m{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FFCB6B}html pre.shiki code .sRCss, html code.shiki .sRCss{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}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 .sTBSN, html code.shiki .sTBSN{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sDHlG, html code.shiki .sDHlG{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .scSvc, html code.shiki .scSvc{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#F78C6C}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 .sBtbT, html code.shiki .sBtbT{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#89DDFF}",{"title":633,"searchDepth":672,"depth":672,"links":2123},[2124,2125,2126,2127,2128],{"id":951,"depth":672,"text":952},{"id":608,"depth":672,"text":608},{"id":612,"depth":672,"text":612},{"id":616,"depth":672,"text":616},{"id":1634,"depth":672,"text":1635},"Send your own real-time events between signed-in admins on a resource, hear theirs, and see which other admins have it selected.","md",{},{"title":408},{"title":594,"description":2129},"3J7PPbIRvg-NQl4boicTU9cf36eR6cTmVKbivqphJvg",[2136,2138],{"title":404,"path":405,"stem":406,"description":2137,"children":-1},"Run your own code when another admin saves a change to a resource you're showing, with the fields that changed.",{"title":417,"path":418,"stem":419,"description":2139,"children":-1},"Resolves the correct API endpoint URL for a resource, accounting for draft\u002Fpublished state in admin edit mode.",1792757992925]