[{"data":1,"prerenderedAt":4612},["ShallowReactive",2],{"navigation-landing-en":3,"navigation-nuxt-auto-en":180,"navigation-nuxt-protokit-en":365,"navigation-nuxt-cookie-consent-en":507,"\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fheadless-mode-en":549,"\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fheadless-mode-surround-en":4607},[4,8,13,28,41,51,64,77,94,110,134,150,157,172],{"title":5,"path":6,"stem":7},"Overview","\u002Fdocs\u002Flanding","0.docs\u002F1.landing\u002F001.index",{"title":9,"path":10,"stem":11,"badge":12},"Built-in Features","\u002Fdocs\u002Flanding\u002Fbuilt-in-features","0.docs\u002F1.landing\u002F002.built-in-features","New",{"title":14,"path":15,"stem":16,"children":17,"icon":27},"Content Foundation","\u002Fdocs\u002Flanding\u002Fcontent","0.docs\u002F1.landing\u002F02.content\u002F1.index",[18,19,23],{"title":5,"path":15,"stem":16},{"title":20,"path":21,"stem":22},"Details","\u002Fdocs\u002Flanding\u002Fcontent\u002Fdetails","0.docs\u002F1.landing\u002F02.content\u002F2.details",{"title":24,"path":25,"stem":26},"Technical","\u002Fdocs\u002Flanding\u002Fcontent\u002Ftechnical","0.docs\u002F1.landing\u002F02.content\u002F4.technical","i-heroicons-document-text",{"title":29,"path":30,"stem":31,"children":32,"icon":40},"Regional Content","\u002Fdocs\u002Flanding\u002Fregional","0.docs\u002F1.landing\u002F03.regional\u002F1.index",[33,34,37],{"title":5,"path":30,"stem":31},{"title":20,"path":35,"stem":36},"\u002Fdocs\u002Flanding\u002Fregional\u002Fdetails","0.docs\u002F1.landing\u002F03.regional\u002F2.details",{"title":24,"path":38,"stem":39},"\u002Fdocs\u002Flanding\u002Fregional\u002Ftechnical","0.docs\u002F1.landing\u002F03.regional\u002F4.technical","i-heroicons-globe-alt",{"title":42,"path":43,"stem":44,"children":45,"icon":50},"Multi-language","\u002Fdocs\u002Flanding\u002Fmultilang","0.docs\u002F1.landing\u002F04.multilang\u002F1.index",[46,47],{"title":5,"path":43,"stem":44},{"title":20,"path":48,"stem":49},"\u002Fdocs\u002Flanding\u002Fmultilang\u002Fdetails","0.docs\u002F1.landing\u002F04.multilang\u002F2.details","i-heroicons-language",{"title":52,"path":53,"stem":54,"children":55,"icon":63},"Blog","\u002Fdocs\u002Flanding\u002Fblog","0.docs\u002F1.landing\u002F05.blog\u002F1.index",[56,57,60],{"title":5,"path":53,"stem":54},{"title":20,"path":58,"stem":59},"\u002Fdocs\u002Flanding\u002Fblog\u002Fdetails","0.docs\u002F1.landing\u002F05.blog\u002F2.details",{"title":24,"path":61,"stem":62},"\u002Fdocs\u002Flanding\u002Fblog\u002Ftechnical","0.docs\u002F1.landing\u002F05.blog\u002F4.technical","i-heroicons-pencil-square",{"title":65,"path":66,"stem":67,"children":68,"icon":76},"Documentation","\u002Fdocs\u002Flanding\u002Fdocs","0.docs\u002F1.landing\u002F06.docs\u002F1.index",[69,70,73],{"title":5,"path":66,"stem":67},{"title":20,"path":71,"stem":72},"\u002Fdocs\u002Flanding\u002Fdocs\u002Fdetails","0.docs\u002F1.landing\u002F06.docs\u002F2.details",{"title":24,"path":74,"stem":75},"\u002Fdocs\u002Flanding\u002Fdocs\u002Ftechnical","0.docs\u002F1.landing\u002F06.docs\u002F4.technical","i-heroicons-book-open",{"title":78,"path":79,"stem":80,"children":81,"icon":93},"Forms","\u002Fdocs\u002Flanding\u002Fforms","0.docs\u002F1.landing\u002F07.forms\u002F1.index",[82,83,86,90],{"title":5,"path":79,"stem":80},{"title":20,"path":84,"stem":85},"\u002Fdocs\u002Flanding\u002Fforms\u002Fdetails","0.docs\u002F1.landing\u002F07.forms\u002F2.details",{"title":87,"path":88,"stem":89},"Admin","\u002Fdocs\u002Flanding\u002Fforms\u002Fadmin","0.docs\u002F1.landing\u002F07.forms\u002F3.admin",{"title":24,"path":91,"stem":92},"\u002Fdocs\u002Flanding\u002Fforms\u002Ftechnical","0.docs\u002F1.landing\u002F07.forms\u002F4.technical","i-heroicons-clipboard-document-list",{"title":95,"path":96,"stem":97,"children":98,"icon":109},"Email","\u002Fdocs\u002Flanding\u002Femail","0.docs\u002F1.landing\u002F08.email\u002F1.index",[99,100,103,106],{"title":5,"path":96,"stem":97},{"title":20,"path":101,"stem":102},"\u002Fdocs\u002Flanding\u002Femail\u002Fdetails","0.docs\u002F1.landing\u002F08.email\u002F2.details",{"title":87,"path":104,"stem":105},"\u002Fdocs\u002Flanding\u002Femail\u002Fadmin","0.docs\u002F1.landing\u002F08.email\u002F3.admin",{"title":24,"path":107,"stem":108},"\u002Fdocs\u002Flanding\u002Femail\u002Ftechnical","0.docs\u002F1.landing\u002F08.email\u002F4.technical","i-heroicons-envelope",{"title":111,"path":112,"stem":113,"children":114,"icon":133},"Feedback Platform","\u002Fdocs\u002Flanding\u002Ffeedback","0.docs\u002F1.landing\u002F09.feedback\u002F1.index",[115,116,119,122,125,129],{"title":5,"path":112,"stem":113},{"title":20,"path":117,"stem":118},"\u002Fdocs\u002Flanding\u002Ffeedback\u002Fdetails","0.docs\u002F1.landing\u002F09.feedback\u002F2.details",{"title":87,"path":120,"stem":121},"\u002Fdocs\u002Flanding\u002Ffeedback\u002Fadmin","0.docs\u002F1.landing\u002F09.feedback\u002F3.admin",{"title":24,"path":123,"stem":124},"\u002Fdocs\u002Flanding\u002Ffeedback\u002Ftechnical","0.docs\u002F1.landing\u002F09.feedback\u002F4.technical",{"title":126,"path":127,"stem":128},"Compare vs SaaS","\u002Fdocs\u002Flanding\u002Ffeedback\u002Fcompare","0.docs\u002F1.landing\u002F09.feedback\u002F5.compare",{"title":130,"path":131,"stem":132},"FAQ","\u002Fdocs\u002Flanding\u002Ffeedback\u002Ffaq","0.docs\u002F1.landing\u002F09.feedback\u002F6.faq","i-heroicons-chat-bubble-left-right",{"title":135,"path":136,"stem":137,"children":138,"icon":149},"Storage","\u002Fdocs\u002Flanding\u002Fstorage","0.docs\u002F1.landing\u002F10.storage\u002F1.index",[139,140,143,146],{"title":5,"path":136,"stem":137},{"title":20,"path":141,"stem":142},"\u002Fdocs\u002Flanding\u002Fstorage\u002Fdetails","0.docs\u002F1.landing\u002F10.storage\u002F2.details",{"title":87,"path":144,"stem":145},"\u002Fdocs\u002Flanding\u002Fstorage\u002Fadmin","0.docs\u002F1.landing\u002F10.storage\u002F3.admin",{"title":24,"path":147,"stem":148},"\u002Fdocs\u002Flanding\u002Fstorage\u002Ftechnical","0.docs\u002F1.landing\u002F10.storage\u002F4.technical","i-heroicons-circle-stack",{"title":151,"path":152,"stem":153,"children":154,"icon":156},"Offline First","\u002Fdocs\u002Flanding\u002Foffline-first","0.docs\u002F1.landing\u002F11.offline-first\u002F1.index",[155],{"title":151,"path":152,"stem":153},"i-heroicons-users",{"title":158,"path":159,"stem":160,"children":161,"icon":156},"Yjs Sync","\u002Fdocs\u002Flanding\u002Fyjs-sync","0.docs\u002F1.landing\u002F12.yjs-sync\u002F1.index",[162,163,166,169],{"title":5,"path":159,"stem":160},{"title":20,"path":164,"stem":165},"\u002Fdocs\u002Flanding\u002Fyjs-sync\u002Fdetails","0.docs\u002F1.landing\u002F12.yjs-sync\u002F2.details",{"title":87,"path":167,"stem":168},"\u002Fdocs\u002Flanding\u002Fyjs-sync\u002Fadmin","0.docs\u002F1.landing\u002F12.yjs-sync\u002F3.admin",{"title":24,"path":170,"stem":171},"\u002Fdocs\u002Flanding\u002Fyjs-sync\u002Ftechnical","0.docs\u002F1.landing\u002F12.yjs-sync\u002F4.technical",{"title":173,"path":174,"stem":175,"children":176,"badge":178,"icon":179},"Newsletter","\u002Fdocs\u002Flanding\u002Fnewsletter","0.docs\u002F1.landing\u002F13.newsletter\u002Findex",[177],{"title":173,"path":174,"stem":175,"badge":178},"Coming Soon","i-lucide-send",[181,184,202,318,358],{"title":5,"path":182,"stem":183},"\u002Fdocs\u002Fnuxt-auto","0.docs\u002F3.nuxt-auto\u002Findex",{"title":185,"path":186,"stem":187,"children":188,"page":201},"Getting Started","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started","0.docs\u002F3.nuxt-auto\u002F1.getting-started",[189,193,197],{"title":190,"path":191,"stem":192},"Introduction","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started\u002Fintroduction","0.docs\u002F3.nuxt-auto\u002F1.getting-started\u002F1.introduction",{"title":194,"path":195,"stem":196},"Installation","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started\u002Finstallation","0.docs\u002F3.nuxt-auto\u002F1.getting-started\u002F2.installation",{"title":198,"path":199,"stem":200},"Quick Start","\u002Fdocs\u002Fnuxt-auto\u002Fgetting-started\u002Fquick-start","0.docs\u002F3.nuxt-auto\u002F1.getting-started\u002F3.quick-start",false,{"title":203,"path":204,"stem":205,"children":206,"page":201},"Auto API","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api","0.docs\u002F3.nuxt-auto\u002F2.auto-api",[207,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294,298,302,306,310,314],{"title":185,"path":208,"stem":209},"\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fgetting-started","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F1.getting-started",{"title":211,"path":212,"stem":213},"Aggregations","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Faggregations","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F10.aggregations",{"title":215,"path":216,"stem":217},"Lifecycle Hooks","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Flifecycle-hooks","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F11.lifecycle-hooks",{"title":219,"path":220,"stem":221},"Many-to-Many (M2M) Relationships","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fm2m-relationships","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F12.m2m-relationships",{"title":223,"path":224,"stem":225},"Plugin System","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fplugin-system","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F13.plugin-system",{"title":227,"path":228,"stem":229},"Database Adapters","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fdatabase-adapters","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F14.database-adapters",{"title":231,"path":232,"stem":233},"Custom Endpoints","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fcustom-endpoints","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F15.custom-endpoints",{"title":235,"path":236,"stem":237},"Multi-Tenancy","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fmulti-tenancy","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F16.multi-tenancy",{"title":239,"path":240,"stem":241},"Schema Presets (Cross-engine)","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fschema-presets","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F17.schema-presets",{"title":243,"path":244,"stem":245},"Permissions Cookbook","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fpermissions-cookbook","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F18.permissions-cookbook",{"title":247,"path":248,"stem":249},"Billing & Plan Gating","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fbilling","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F19.billing",{"title":251,"path":252,"stem":253},"Validation","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fvalidation","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F2.validation",{"title":255,"path":256,"stem":257},"Rate Limiting","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Frate-limiting","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F20.rate-limiting",{"title":259,"path":260,"stem":261},"Request Metadata Plugin","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Frequest-metadata","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F21.request-metadata",{"title":263,"path":264,"stem":265},"Plugin Catalog","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fplugin-catalog","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F22.plugin-catalog",{"title":267,"path":268,"stem":269},"Configuration Reference","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fconfiguration","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F23.configuration",{"title":271,"path":272,"stem":273},"Handler Overrides","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fhandler-overrides","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F3.handler-overrides",{"title":275,"path":276,"stem":277},"Cloudflare D1","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fcloudflare-d1","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F30.cloudflare-d1",{"title":279,"path":280,"stem":281},"SQLite to D1 Migration","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fmigration-sqlite-d1","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F31.migration-sqlite-d1",{"title":283,"path":284,"stem":285},"Frontend Composables","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Ffrontend-composables","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F32.frontend-composables",{"title":287,"path":288,"stem":289},"Testing","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Ftesting","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F33.testing",{"title":291,"path":292,"stem":293},"Pagination","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fpagination","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F4.pagination",{"title":295,"path":296,"stem":297},"Upgrading","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fupgrading","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F40.upgrading",{"title":299,"path":300,"stem":301},"Soft Deletes","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fsoft-deletes","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F5.soft-deletes",{"title":303,"path":304,"stem":305},"Authentication & Authorization","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fauthentication-authorization","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F6.authentication-authorization",{"title":307,"path":308,"stem":309},"Better-Auth Integration","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fbetter-auth","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F7.better-auth",{"title":311,"path":312,"stem":313},"Nested Relations","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fnested-relationships","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F8.nested-relationships",{"title":315,"path":316,"stem":317},"Bulk Operations","\u002Fdocs\u002Fnuxt-auto\u002Fauto-api\u002Fbulk-operations","0.docs\u002F3.nuxt-auto\u002F2.auto-api\u002F9.bulk-operations",{"title":319,"path":320,"stem":321,"children":322,"page":201},"Auto Admin","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin","0.docs\u002F3.nuxt-auto\u002F3.auto-admin",[323,326,330,334,338,342,346,350,354],{"title":185,"path":324,"stem":325},"\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fgetting-started","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F1.getting-started",{"title":327,"path":328,"stem":329},"Configuration & Theming","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fconfiguration-theming","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F2.configuration-theming",{"title":331,"path":332,"stem":333},"Resource Configuration","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fresource-configuration","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F3.resource-configuration",{"title":335,"path":336,"stem":337},"Form Fields & Widgets","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fform-fields-widgets","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F4.form-fields-widgets",{"title":339,"path":340,"stem":341},"Permissions","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fpermissions","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F5.permissions",{"title":343,"path":344,"stem":345},"Custom Pages","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fcustom-pages","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F6.custom-pages",{"title":347,"path":348,"stem":349},"M2M Relationships","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fm2m-relationships","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F7.m2m-relationships",{"title":351,"path":352,"stem":353},"Custom Actions","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fcustom-actions","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F8.custom-actions",{"title":355,"path":356,"stem":357},"Composables","\u002Fdocs\u002Fnuxt-auto\u002Fauto-admin\u002Fcomposables","0.docs\u002F3.nuxt-auto\u002F3.auto-admin\u002F9.composables",{"title":359,"path":360,"stem":361,"children":362,"icon":364},"Claude Code Skills","\u002Fdocs\u002Fnuxt-auto\u002Fclaude-code-skills","0.docs\u002F3.nuxt-auto\u002F4.claude-code-skills\u002F1.index",[363],{"title":5,"path":360,"stem":361},"i-lucide-bot",[366,369,382,409,427,450,472,502],{"title":5,"path":367,"stem":368},"\u002Fdocs\u002Fnuxt-protokit","0.docs\u002F4.nuxt-protokit\u002Findex",{"title":185,"path":370,"stem":371,"children":372,"icon":381},"\u002Fdocs\u002Fnuxt-protokit\u002Fgetting-started","0.docs\u002F4.nuxt-protokit\u002F1.getting-started\u002F1.index",[373,374,378],{"title":190,"path":370,"stem":371},{"title":375,"path":376,"stem":377},"Core Concepts","\u002Fdocs\u002Fnuxt-protokit\u002Fgetting-started\u002Fconcepts","0.docs\u002F4.nuxt-protokit\u002F1.getting-started\u002F2.concepts",{"title":198,"path":379,"stem":380},"\u002Fdocs\u002Fnuxt-protokit\u002Fgetting-started\u002Fquick-start","0.docs\u002F4.nuxt-protokit\u002F1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":383,"path":384,"stem":385,"children":386,"icon":408},"Schemas","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F1.index",[387,388,392,396,400,404],{"title":5,"path":384,"stem":385},{"title":389,"path":390,"stem":391},"Field Types","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Ffields","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F2.fields",{"title":393,"path":394,"stem":395},"Collections","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fcollections","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F3.collections",{"title":397,"path":398,"stem":399},"Derived & Computed","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fderived-computed","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F4.derived-computed",{"title":401,"path":402,"stem":403},"Connections","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fconnections","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F5.connections",{"title":405,"path":406,"stem":407},"Visualizations & Layouts","\u002Fdocs\u002Fnuxt-protokit\u002Fschemas\u002Fvisualizations","0.docs\u002F4.nuxt-protokit\u002F2.schemas\u002F6.visualizations","i-lucide-file-code",{"title":355,"path":410,"stem":411,"children":412,"icon":426},"\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F1.index",[413,414,418,422],{"title":5,"path":410,"stem":411},{"title":415,"path":416,"stem":417},"usePrototype","\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables\u002Fuse-prototype","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F2.use-prototype",{"title":419,"path":420,"stem":421},"useProtoDoc","\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables\u002Fuse-proto-doc","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F3.use-proto-doc",{"title":423,"path":424,"stem":425},"useProtoCollection","\u002Fdocs\u002Fnuxt-protokit\u002Fcomposables\u002Fuse-proto-collection","0.docs\u002F4.nuxt-protokit\u002F3.composables\u002F4.use-proto-collection","i-lucide-layers",{"title":428,"path":429,"stem":430,"children":431,"icon":449},"Components","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F1.index",[432,433,437,441,445],{"title":5,"path":429,"stem":430},{"title":434,"path":435,"stem":436},"ProtoTool","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-tool","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F2.proto-tool",{"title":438,"path":439,"stem":440},"ProtoCrudModal","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-crud-modal","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F3.proto-crud-modal",{"title":442,"path":443,"stem":444},"ProtoCalendar","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-calendar","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F4.proto-calendar",{"title":446,"path":447,"stem":448},"ProtoItemPanel variants","\u002Fdocs\u002Fnuxt-protokit\u002Fcomponents\u002Fproto-item-panels","0.docs\u002F4.nuxt-protokit\u002F4.components\u002F5.proto-item-panels","i-lucide-puzzle",{"title":151,"path":451,"stem":452,"children":453,"icon":471},"\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F1.index",[454,455,459,463,467],{"title":151,"path":451,"stem":452},{"title":456,"path":457,"stem":458},"Corruption Recovery","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fcorruption-recovery","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F2.corruption-recovery",{"title":460,"path":461,"stem":462},"Size & GC","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fdocument-size-and-gc","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F3.document-size-and-gc",{"title":464,"path":465,"stem":466},"Multi-tenant Isolation","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fmulti-tenant-isolation","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F4.multi-tenant-isolation",{"title":468,"path":469,"stem":470},"Encryption at Rest","\u002Fdocs\u002Fnuxt-protokit\u002Foffline-first\u002Fencryption","0.docs\u002F4.nuxt-protokit\u002F5.offline-first\u002F5.encryption","i-lucide-wifi-off",{"title":473,"icon":474,"path":475,"stem":476,"children":477},"Advanced","i-lucide-graduation-cap","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F1.index",[478,479,483,487,491,494,498],{"title":5,"path":475,"stem":476},{"title":480,"path":481,"stem":482},"Multi-Tool Apps","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fbuilding-a-toolkit","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F1.building-a-toolkit",{"title":484,"path":485,"stem":486},"Schema Patterns","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fcustom-schema-patterns","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F2.custom-schema-patterns",{"title":488,"path":489,"stem":490},"Custom Fields & Viz","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fextensibility","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F3.extensibility",{"title":339,"path":492,"stem":493},"\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fpermissions","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F4.permissions",{"title":495,"path":496,"stem":497},"Business Logic Guards","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fpermissions-business-logic","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F5.permissions-business-logic",{"title":499,"path":500,"stem":501},"Headless Mode","\u002Fdocs\u002Fnuxt-protokit\u002Fadvanced\u002Fheadless-mode","0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F6.headless-mode",{"title":359,"path":503,"stem":504,"children":505,"icon":364},"\u002Fdocs\u002Fnuxt-protokit\u002Fclaude-code-skills","0.docs\u002F4.nuxt-protokit\u002F7.claude-code-skills\u002F1.index",[506],{"title":5,"path":503,"stem":504},[508,511],{"title":5,"path":509,"stem":510},"\u002Fdocs\u002Fnuxt-cookie-consent","0.docs\u002F5.nuxt-cookie-consent\u002Findex",{"title":512,"icon":513,"path":514,"stem":515,"children":516,"page":201},"Guide","i-lucide-book-open","\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide",[517,521,525,530,535,539,544],{"title":190,"path":518,"stem":519,"icon":520},"\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Fintroduction","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F1.introduction","i-lucide-info",{"title":194,"path":522,"stem":523,"icon":524},"\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Finstallation","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F2.installation","i-lucide-download",{"title":526,"path":527,"stem":528,"icon":529},"Configuration","\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Fconfiguration","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F3.configuration","i-lucide-settings-2",{"title":531,"path":532,"stem":533,"icon":534},"Usage","\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Fusage","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F4.usage","i-lucide-play",{"title":355,"path":536,"stem":537,"icon":538},"\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Fcomposables","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F5.composables","i-lucide-function-square",{"title":540,"path":541,"stem":542,"icon":543},"Components & overriding","\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Fcomponents","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F6.components","i-lucide-component",{"title":545,"path":546,"stem":547,"icon":548},"Internationalization","\u002Fdocs\u002Fnuxt-cookie-consent\u002Fguide\u002Fi18n","0.docs\u002F5.nuxt-cookie-consent\u002F1.guide\u002F7.i18n","i-lucide-languages",{"page":550,"fallbackPage":4602},{"id":551,"title":499,"body":552,"description":4600,"extension":4601,"links":4602,"meta":4603,"navigation":4604,"ogImage":4602,"path":500,"seo":4605,"stem":501,"__hash__":4606},"nuxt_protokit\u002F0.docs\u002F4.nuxt-protokit\u002F6.advanced\u002F6.headless-mode.md",{"type":553,"value":554,"toc":4586},"minimark",[555,559,576,581,592,602,605,609,628,632,658,892,907,911,914,921,1503,1798,1808,1812,1822,1828,2344,2674,2678,2681,2687,2819,2940,2952,2956,2959,3454,3458,3465,3715,3724,3728,3734,4161,4168,4192,4196,4199,4245,4251,4302,4306,4331,4399,4408,4412,4582],[556,557,499],"h1",{"id":558},"headless-mode",[560,561,562,563,567,568,571,572,575],"p",{},"protokit is not just a UI kit. Its core is a ",[564,565,566],"strong",{},"schema-driven Y.js storage layer"," that works independently of ",[569,570,434],"code",{},", ",[569,573,574],{},"ProtoForm",", and every other built-in component. If you are building your own UI with Nuxt UI, custom components, or a completely different design system, you can use protokit purely for the storage infrastructure.",[577,578,580],"h2",{"id":579},"what-headless-means-here","What \"headless\" means here",[560,582,583,584,571,586,571,588,591],{},"The built-in components (",[569,585,434],{},[569,587,574],{},[569,589,590],{},"ProtoCrudList",", etc.) consume the schema and render opinionated UI. The composables underneath them do the actual work:",[593,594,599],"pre",{"className":595,"code":597,"language":598},[596],"language-text","usePrototype\n├── useProtoDoc    — Y.js document, IndexedDB, BroadcastChannel, server sync\n├── useProtoMap    — Y.Map ↔ reactive refs, bidirectional sync\n├── useProtoList   — Y.Array CRUD (add \u002F update \u002F remove \u002F move \u002F reset)\n├── useProtoText   — Y.Text ↔ reactive string\n├── useProtoDraft  — draft persistence inside a Y.Map\n└── useProtoDerived — reactive computed values from a schema + context\n","text",[569,600,597],{"__ignoreMap":601},"",[560,603,604],{},"All of these are available standalone, fully auto-imported. The visual bricks only sit on top.",[577,606,608],{"id":607},"when-to-use-headless","When to use headless",[610,611,612,616,619,622,625],"ul",{},[613,614,615],"li",{},"You have your own form components and do not want ProtoForm's opinionated layout",[613,617,618],{},"You are building a custom CRUD table, kanban board, or timeline with your own design",[613,620,621],{},"You need persistent state (settings, preferences, wizard state) without any rendering",[613,623,624],{},"You want offline-first persistence for a specific feature without adopting a full PrototypeSchema",[613,626,627],{},"You are using protokit alongside another UI library and only need its data layer",[577,629,631],{"id":630},"defineheadlessschema","defineHeadlessSchema",[560,633,634,635,638,639,571,642,571,645,571,648,651,652,654,655,657],{},"The standard ",[569,636,637],{},"PrototypeSchema"," requires visual-only fields (",[569,640,641],{},"title",[569,643,644],{},"shortTitle",[569,646,647],{},"description",[569,649,650],{},"icon",") that are only read by ",[569,653,434],{},". When going headless, ",[569,656,631],{}," lets you skip them:",[593,659,663],{"className":660,"code":661,"language":662,"meta":601,"style":601},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F ❌ Full PrototypeSchema — visual fields required even when unused\nconst schema = definePrototype({\n  key: 'user-settings',\n  title: 'User Settings',       \u002F\u002F only needed by ProtoTool\n  shortTitle: 'Settings',       \u002F\u002F only needed by ProtoTool\n  description: 'App settings',  \u002F\u002F only needed by ProtoTool\n  icon: 'i-lucide-settings',    \u002F\u002F only needed by ProtoTool\n  fields: { … },\n})\n\n\u002F\u002F ✅ HeadlessSchema — only key + fields required\nconst schema = defineHeadlessSchema({\n  key: 'user-settings',\n  fields: { … },\n})\n","typescript",[569,664,665,674,699,722,743,762,782,802,819,828,835,841,857,872,885],{"__ignoreMap":601},[666,667,670],"span",{"class":668,"line":669},"line",1,[666,671,673],{"class":672},"sHwdD","\u002F\u002F ❌ Full PrototypeSchema — visual fields required even when unused\n",[666,675,677,681,685,689,693,696],{"class":668,"line":676},2,[666,678,680],{"class":679},"spNyl","const",[666,682,684],{"class":683},"sTEyZ"," schema ",[666,686,688],{"class":687},"sMK4o","=",[666,690,692],{"class":691},"s2Zo4"," definePrototype",[666,694,695],{"class":683},"(",[666,697,698],{"class":687},"{\n",[666,700,702,706,709,712,716,719],{"class":668,"line":701},3,[666,703,705],{"class":704},"swJcz","  key",[666,707,708],{"class":687},":",[666,710,711],{"class":687}," '",[666,713,715],{"class":714},"sfazB","user-settings",[666,717,718],{"class":687},"'",[666,720,721],{"class":687},",\n",[666,723,725,728,730,732,735,737,740],{"class":668,"line":724},4,[666,726,727],{"class":704},"  title",[666,729,708],{"class":687},[666,731,711],{"class":687},[666,733,734],{"class":714},"User Settings",[666,736,718],{"class":687},[666,738,739],{"class":687},",",[666,741,742],{"class":672},"       \u002F\u002F only needed by ProtoTool\n",[666,744,746,749,751,753,756,758,760],{"class":668,"line":745},5,[666,747,748],{"class":704},"  shortTitle",[666,750,708],{"class":687},[666,752,711],{"class":687},[666,754,755],{"class":714},"Settings",[666,757,718],{"class":687},[666,759,739],{"class":687},[666,761,742],{"class":672},[666,763,765,768,770,772,775,777,779],{"class":668,"line":764},6,[666,766,767],{"class":704},"  description",[666,769,708],{"class":687},[666,771,711],{"class":687},[666,773,774],{"class":714},"App settings",[666,776,718],{"class":687},[666,778,739],{"class":687},[666,780,781],{"class":672},"  \u002F\u002F only needed by ProtoTool\n",[666,783,785,788,790,792,795,797,799],{"class":668,"line":784},7,[666,786,787],{"class":704},"  icon",[666,789,708],{"class":687},[666,791,711],{"class":687},[666,793,794],{"class":714},"i-lucide-settings",[666,796,718],{"class":687},[666,798,739],{"class":687},[666,800,801],{"class":672},"    \u002F\u002F only needed by ProtoTool\n",[666,803,805,808,810,813,816],{"class":668,"line":804},8,[666,806,807],{"class":704},"  fields",[666,809,708],{"class":687},[666,811,812],{"class":687}," {",[666,814,815],{"class":683}," … ",[666,817,818],{"class":687},"},\n",[666,820,822,825],{"class":668,"line":821},9,[666,823,824],{"class":687},"}",[666,826,827],{"class":683},")\n",[666,829,831],{"class":668,"line":830},10,[666,832,834],{"emptyLinePlaceholder":833},true,"\n",[666,836,838],{"class":668,"line":837},11,[666,839,840],{"class":672},"\u002F\u002F ✅ HeadlessSchema — only key + fields required\n",[666,842,844,846,848,850,853,855],{"class":668,"line":843},12,[666,845,680],{"class":679},[666,847,684],{"class":683},[666,849,688],{"class":687},[666,851,852],{"class":691}," defineHeadlessSchema",[666,854,695],{"class":683},[666,856,698],{"class":687},[666,858,860,862,864,866,868,870],{"class":668,"line":859},13,[666,861,705],{"class":704},[666,863,708],{"class":687},[666,865,711],{"class":687},[666,867,715],{"class":714},[666,869,718],{"class":687},[666,871,721],{"class":687},[666,873,875,877,879,881,883],{"class":668,"line":874},14,[666,876,807],{"class":704},[666,878,708],{"class":687},[666,880,812],{"class":687},[666,882,815],{"class":683},[666,884,818],{"class":687},[666,886,888,890],{"class":668,"line":887},15,[666,889,824],{"class":687},[666,891,827],{"class":683},[560,893,894,896,897,899,900,903,904,906],{},[569,895,631],{}," returns a valid ",[569,898,637],{}," (visual fields default to ",[569,901,902],{},"''",") that can be passed directly to ",[569,905,415],{}," and every other composable.",[577,908,910],{"id":909},"example-persisted-user-settings","Example: Persisted user settings",[560,912,913],{},"User preferences that survive page reloads, sync across tabs, but never touch the server:",[560,915,916],{},[917,918],"img",{"alt":919,"src":920},"A settings store built on usePrototype with plain Nuxt UI controls","\u002Fscreenshots\u002Fnuxt-protokit\u002Fheadless-settings-1440.png",[593,922,924],{"className":660,"code":923,"language":662,"meta":601,"style":601},"\u002F\u002F composables\u002FuseAppSettings.ts\nconst settingsSchema = defineHeadlessSchema({\n  key: 'app-settings',\n  fields: {\n    theme: {\n      type: 'select',\n      label: 'Theme',\n      default: 'system',\n      options: ['system', 'light', 'dark'],\n    },\n    language: {\n      type: 'select',\n      label: 'Language',\n      default: 'en',\n      options: ['en', 'de', 'fr', 'es'],\n    },\n    compactMode: {\n      type: 'toggle',\n      label: 'Compact mode',\n      default: false,\n    },\n    itemsPerPage: {\n      type: 'number',\n      label: 'Items per page',\n      default: 25,\n    },\n  },\n})\n\nexport function useAppSettings() {\n  const { state, isReady, reset } = usePrototype(settingsSchema, {\n    disableSync: true, \u002F\u002F local device only — no server involved\n  })\n\n  return {\n    isReady,\n    theme:         state.theme,\n    language:      state.language,\n    compactMode:   state.compactMode,\n    itemsPerPage:  state.itemsPerPage,\n    reset,\n  }\n}\n",[569,925,926,931,946,961,970,979,995,1011,1027,1066,1071,1080,1094,1109,1124,1169,1174,1184,1200,1216,1229,1234,1244,1260,1276,1289,1294,1300,1307,1312,1330,1369,1385,1393,1398,1406,1414,1432,1449,1466,1483,1491,1497],{"__ignoreMap":601},[666,927,928],{"class":668,"line":669},[666,929,930],{"class":672},"\u002F\u002F composables\u002FuseAppSettings.ts\n",[666,932,933,935,938,940,942,944],{"class":668,"line":676},[666,934,680],{"class":679},[666,936,937],{"class":683}," settingsSchema ",[666,939,688],{"class":687},[666,941,852],{"class":691},[666,943,695],{"class":683},[666,945,698],{"class":687},[666,947,948,950,952,954,957,959],{"class":668,"line":701},[666,949,705],{"class":704},[666,951,708],{"class":687},[666,953,711],{"class":687},[666,955,956],{"class":714},"app-settings",[666,958,718],{"class":687},[666,960,721],{"class":687},[666,962,963,965,967],{"class":668,"line":724},[666,964,807],{"class":704},[666,966,708],{"class":687},[666,968,969],{"class":687}," {\n",[666,971,972,975,977],{"class":668,"line":745},[666,973,974],{"class":704},"    theme",[666,976,708],{"class":687},[666,978,969],{"class":687},[666,980,981,984,986,988,991,993],{"class":668,"line":764},[666,982,983],{"class":704},"      type",[666,985,708],{"class":687},[666,987,711],{"class":687},[666,989,990],{"class":714},"select",[666,992,718],{"class":687},[666,994,721],{"class":687},[666,996,997,1000,1002,1004,1007,1009],{"class":668,"line":784},[666,998,999],{"class":704},"      label",[666,1001,708],{"class":687},[666,1003,711],{"class":687},[666,1005,1006],{"class":714},"Theme",[666,1008,718],{"class":687},[666,1010,721],{"class":687},[666,1012,1013,1016,1018,1020,1023,1025],{"class":668,"line":804},[666,1014,1015],{"class":704},"      default",[666,1017,708],{"class":687},[666,1019,711],{"class":687},[666,1021,1022],{"class":714},"system",[666,1024,718],{"class":687},[666,1026,721],{"class":687},[666,1028,1029,1032,1034,1037,1039,1041,1043,1045,1047,1050,1052,1054,1056,1059,1061,1064],{"class":668,"line":821},[666,1030,1031],{"class":704},"      options",[666,1033,708],{"class":687},[666,1035,1036],{"class":683}," [",[666,1038,718],{"class":687},[666,1040,1022],{"class":714},[666,1042,718],{"class":687},[666,1044,739],{"class":687},[666,1046,711],{"class":687},[666,1048,1049],{"class":714},"light",[666,1051,718],{"class":687},[666,1053,739],{"class":687},[666,1055,711],{"class":687},[666,1057,1058],{"class":714},"dark",[666,1060,718],{"class":687},[666,1062,1063],{"class":683},"]",[666,1065,721],{"class":687},[666,1067,1068],{"class":668,"line":830},[666,1069,1070],{"class":687},"    },\n",[666,1072,1073,1076,1078],{"class":668,"line":837},[666,1074,1075],{"class":704},"    language",[666,1077,708],{"class":687},[666,1079,969],{"class":687},[666,1081,1082,1084,1086,1088,1090,1092],{"class":668,"line":843},[666,1083,983],{"class":704},[666,1085,708],{"class":687},[666,1087,711],{"class":687},[666,1089,990],{"class":714},[666,1091,718],{"class":687},[666,1093,721],{"class":687},[666,1095,1096,1098,1100,1102,1105,1107],{"class":668,"line":859},[666,1097,999],{"class":704},[666,1099,708],{"class":687},[666,1101,711],{"class":687},[666,1103,1104],{"class":714},"Language",[666,1106,718],{"class":687},[666,1108,721],{"class":687},[666,1110,1111,1113,1115,1117,1120,1122],{"class":668,"line":874},[666,1112,1015],{"class":704},[666,1114,708],{"class":687},[666,1116,711],{"class":687},[666,1118,1119],{"class":714},"en",[666,1121,718],{"class":687},[666,1123,721],{"class":687},[666,1125,1126,1128,1130,1132,1134,1136,1138,1140,1142,1145,1147,1149,1151,1154,1156,1158,1160,1163,1165,1167],{"class":668,"line":887},[666,1127,1031],{"class":704},[666,1129,708],{"class":687},[666,1131,1036],{"class":683},[666,1133,718],{"class":687},[666,1135,1119],{"class":714},[666,1137,718],{"class":687},[666,1139,739],{"class":687},[666,1141,711],{"class":687},[666,1143,1144],{"class":714},"de",[666,1146,718],{"class":687},[666,1148,739],{"class":687},[666,1150,711],{"class":687},[666,1152,1153],{"class":714},"fr",[666,1155,718],{"class":687},[666,1157,739],{"class":687},[666,1159,711],{"class":687},[666,1161,1162],{"class":714},"es",[666,1164,718],{"class":687},[666,1166,1063],{"class":683},[666,1168,721],{"class":687},[666,1170,1172],{"class":668,"line":1171},16,[666,1173,1070],{"class":687},[666,1175,1177,1180,1182],{"class":668,"line":1176},17,[666,1178,1179],{"class":704},"    compactMode",[666,1181,708],{"class":687},[666,1183,969],{"class":687},[666,1185,1187,1189,1191,1193,1196,1198],{"class":668,"line":1186},18,[666,1188,983],{"class":704},[666,1190,708],{"class":687},[666,1192,711],{"class":687},[666,1194,1195],{"class":714},"toggle",[666,1197,718],{"class":687},[666,1199,721],{"class":687},[666,1201,1203,1205,1207,1209,1212,1214],{"class":668,"line":1202},19,[666,1204,999],{"class":704},[666,1206,708],{"class":687},[666,1208,711],{"class":687},[666,1210,1211],{"class":714},"Compact mode",[666,1213,718],{"class":687},[666,1215,721],{"class":687},[666,1217,1219,1221,1223,1227],{"class":668,"line":1218},20,[666,1220,1015],{"class":704},[666,1222,708],{"class":687},[666,1224,1226],{"class":1225},"sfNiH"," false",[666,1228,721],{"class":687},[666,1230,1232],{"class":668,"line":1231},21,[666,1233,1070],{"class":687},[666,1235,1237,1240,1242],{"class":668,"line":1236},22,[666,1238,1239],{"class":704},"    itemsPerPage",[666,1241,708],{"class":687},[666,1243,969],{"class":687},[666,1245,1247,1249,1251,1253,1256,1258],{"class":668,"line":1246},23,[666,1248,983],{"class":704},[666,1250,708],{"class":687},[666,1252,711],{"class":687},[666,1254,1255],{"class":714},"number",[666,1257,718],{"class":687},[666,1259,721],{"class":687},[666,1261,1263,1265,1267,1269,1272,1274],{"class":668,"line":1262},24,[666,1264,999],{"class":704},[666,1266,708],{"class":687},[666,1268,711],{"class":687},[666,1270,1271],{"class":714},"Items per page",[666,1273,718],{"class":687},[666,1275,721],{"class":687},[666,1277,1279,1281,1283,1287],{"class":668,"line":1278},25,[666,1280,1015],{"class":704},[666,1282,708],{"class":687},[666,1284,1286],{"class":1285},"sbssI"," 25",[666,1288,721],{"class":687},[666,1290,1292],{"class":668,"line":1291},26,[666,1293,1070],{"class":687},[666,1295,1297],{"class":668,"line":1296},27,[666,1298,1299],{"class":687},"  },\n",[666,1301,1303,1305],{"class":668,"line":1302},28,[666,1304,824],{"class":687},[666,1306,827],{"class":683},[666,1308,1310],{"class":668,"line":1309},29,[666,1311,834],{"emptyLinePlaceholder":833},[666,1313,1315,1319,1322,1325,1328],{"class":668,"line":1314},30,[666,1316,1318],{"class":1317},"s7zQu","export",[666,1320,1321],{"class":679}," function",[666,1323,1324],{"class":691}," useAppSettings",[666,1326,1327],{"class":687},"()",[666,1329,969],{"class":687},[666,1331,1333,1336,1338,1341,1343,1346,1348,1351,1354,1357,1360,1362,1365,1367],{"class":668,"line":1332},31,[666,1334,1335],{"class":679},"  const",[666,1337,812],{"class":687},[666,1339,1340],{"class":683}," state",[666,1342,739],{"class":687},[666,1344,1345],{"class":683}," isReady",[666,1347,739],{"class":687},[666,1349,1350],{"class":683}," reset",[666,1352,1353],{"class":687}," }",[666,1355,1356],{"class":687}," =",[666,1358,1359],{"class":691}," usePrototype",[666,1361,695],{"class":704},[666,1363,1364],{"class":683},"settingsSchema",[666,1366,739],{"class":687},[666,1368,969],{"class":687},[666,1370,1372,1375,1377,1380,1382],{"class":668,"line":1371},32,[666,1373,1374],{"class":704},"    disableSync",[666,1376,708],{"class":687},[666,1378,1379],{"class":1225}," true",[666,1381,739],{"class":687},[666,1383,1384],{"class":672}," \u002F\u002F local device only — no server involved\n",[666,1386,1388,1391],{"class":668,"line":1387},33,[666,1389,1390],{"class":687},"  }",[666,1392,827],{"class":704},[666,1394,1396],{"class":668,"line":1395},34,[666,1397,834],{"emptyLinePlaceholder":833},[666,1399,1401,1404],{"class":668,"line":1400},35,[666,1402,1403],{"class":1317},"  return",[666,1405,969],{"class":687},[666,1407,1409,1412],{"class":668,"line":1408},36,[666,1410,1411],{"class":683},"    isReady",[666,1413,721],{"class":687},[666,1415,1417,1419,1421,1424,1427,1430],{"class":668,"line":1416},37,[666,1418,974],{"class":704},[666,1420,708],{"class":687},[666,1422,1423],{"class":683},"         state",[666,1425,1426],{"class":687},".",[666,1428,1429],{"class":683},"theme",[666,1431,721],{"class":687},[666,1433,1435,1437,1439,1442,1444,1447],{"class":668,"line":1434},38,[666,1436,1075],{"class":704},[666,1438,708],{"class":687},[666,1440,1441],{"class":683},"      state",[666,1443,1426],{"class":687},[666,1445,1446],{"class":683},"language",[666,1448,721],{"class":687},[666,1450,1452,1454,1456,1459,1461,1464],{"class":668,"line":1451},39,[666,1453,1179],{"class":704},[666,1455,708],{"class":687},[666,1457,1458],{"class":683},"   state",[666,1460,1426],{"class":687},[666,1462,1463],{"class":683},"compactMode",[666,1465,721],{"class":687},[666,1467,1469,1471,1473,1476,1478,1481],{"class":668,"line":1468},40,[666,1470,1239],{"class":704},[666,1472,708],{"class":687},[666,1474,1475],{"class":683},"  state",[666,1477,1426],{"class":687},[666,1479,1480],{"class":683},"itemsPerPage",[666,1482,721],{"class":687},[666,1484,1486,1489],{"class":668,"line":1485},41,[666,1487,1488],{"class":683},"    reset",[666,1490,721],{"class":687},[666,1492,1494],{"class":668,"line":1493},42,[666,1495,1496],{"class":687},"  }\n",[666,1498,1500],{"class":668,"line":1499},43,[666,1501,1502],{"class":687},"}\n",[593,1504,1508],{"className":1505,"code":1506,"language":1507,"meta":601,"style":601},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- In any component -->\n\u003Cscript setup lang=\"ts\">\nconst { theme, compactMode, isReady } = useAppSettings()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CClientOnly>\n    \u003Cdiv v-if=\"isReady\">\n      \u003Cselect v-model=\"theme.value\">\n        \u003Coption value=\"system\">System\u003C\u002Foption>\n        \u003Coption value=\"light\">Light\u003C\u002Foption>\n        \u003Coption value=\"dark\">Dark\u003C\u002Foption>\n      \u003C\u002Fselect>\n      \u003Cinput type=\"checkbox\" v-model=\"compactMode.value\" \u002F>\n    \u003C\u002Fdiv>\n  \u003C\u002FClientOnly>\n\u003C\u002Ftemplate>\n","vue",[569,1509,1510,1515,1542,1570,1579,1583,1592,1602,1624,1645,1676,1703,1730,1739,1772,1781,1790],{"__ignoreMap":601},[666,1511,1512],{"class":668,"line":669},[666,1513,1514],{"class":672},"\u003C!-- In any component -->\n",[666,1516,1517,1520,1523,1526,1529,1531,1534,1537,1539],{"class":668,"line":676},[666,1518,1519],{"class":687},"\u003C",[666,1521,1522],{"class":704},"script",[666,1524,1525],{"class":679}," setup",[666,1527,1528],{"class":679}," lang",[666,1530,688],{"class":687},[666,1532,1533],{"class":687},"\"",[666,1535,1536],{"class":714},"ts",[666,1538,1533],{"class":687},[666,1540,1541],{"class":687},">\n",[666,1543,1544,1546,1548,1551,1553,1556,1558,1561,1563,1565,1567],{"class":668,"line":701},[666,1545,680],{"class":679},[666,1547,812],{"class":687},[666,1549,1550],{"class":683}," theme",[666,1552,739],{"class":687},[666,1554,1555],{"class":683}," compactMode",[666,1557,739],{"class":687},[666,1559,1560],{"class":683}," isReady ",[666,1562,824],{"class":687},[666,1564,1356],{"class":687},[666,1566,1324],{"class":691},[666,1568,1569],{"class":683},"()\n",[666,1571,1572,1575,1577],{"class":668,"line":724},[666,1573,1574],{"class":687},"\u003C\u002F",[666,1576,1522],{"class":704},[666,1578,1541],{"class":687},[666,1580,1581],{"class":668,"line":745},[666,1582,834],{"emptyLinePlaceholder":833},[666,1584,1585,1587,1590],{"class":668,"line":764},[666,1586,1519],{"class":687},[666,1588,1589],{"class":704},"template",[666,1591,1541],{"class":687},[666,1593,1594,1597,1600],{"class":668,"line":784},[666,1595,1596],{"class":687},"  \u003C",[666,1598,1599],{"class":704},"ClientOnly",[666,1601,1541],{"class":687},[666,1603,1604,1607,1610,1613,1615,1617,1620,1622],{"class":668,"line":804},[666,1605,1606],{"class":687},"    \u003C",[666,1608,1609],{"class":704},"div",[666,1611,1612],{"class":679}," v-if",[666,1614,688],{"class":687},[666,1616,1533],{"class":687},[666,1618,1619],{"class":714},"isReady",[666,1621,1533],{"class":687},[666,1623,1541],{"class":687},[666,1625,1626,1629,1631,1634,1636,1638,1641,1643],{"class":668,"line":821},[666,1627,1628],{"class":687},"      \u003C",[666,1630,990],{"class":704},[666,1632,1633],{"class":679}," v-model",[666,1635,688],{"class":687},[666,1637,1533],{"class":687},[666,1639,1640],{"class":714},"theme.value",[666,1642,1533],{"class":687},[666,1644,1541],{"class":687},[666,1646,1647,1650,1653,1656,1658,1660,1662,1664,1667,1670,1672,1674],{"class":668,"line":830},[666,1648,1649],{"class":687},"        \u003C",[666,1651,1652],{"class":704},"option",[666,1654,1655],{"class":679}," value",[666,1657,688],{"class":687},[666,1659,1533],{"class":687},[666,1661,1022],{"class":714},[666,1663,1533],{"class":687},[666,1665,1666],{"class":687},">",[666,1668,1669],{"class":683},"System",[666,1671,1574],{"class":687},[666,1673,1652],{"class":704},[666,1675,1541],{"class":687},[666,1677,1678,1680,1682,1684,1686,1688,1690,1692,1694,1697,1699,1701],{"class":668,"line":837},[666,1679,1649],{"class":687},[666,1681,1652],{"class":704},[666,1683,1655],{"class":679},[666,1685,688],{"class":687},[666,1687,1533],{"class":687},[666,1689,1049],{"class":714},[666,1691,1533],{"class":687},[666,1693,1666],{"class":687},[666,1695,1696],{"class":683},"Light",[666,1698,1574],{"class":687},[666,1700,1652],{"class":704},[666,1702,1541],{"class":687},[666,1704,1705,1707,1709,1711,1713,1715,1717,1719,1721,1724,1726,1728],{"class":668,"line":843},[666,1706,1649],{"class":687},[666,1708,1652],{"class":704},[666,1710,1655],{"class":679},[666,1712,688],{"class":687},[666,1714,1533],{"class":687},[666,1716,1058],{"class":714},[666,1718,1533],{"class":687},[666,1720,1666],{"class":687},[666,1722,1723],{"class":683},"Dark",[666,1725,1574],{"class":687},[666,1727,1652],{"class":704},[666,1729,1541],{"class":687},[666,1731,1732,1735,1737],{"class":668,"line":859},[666,1733,1734],{"class":687},"      \u003C\u002F",[666,1736,990],{"class":704},[666,1738,1541],{"class":687},[666,1740,1741,1743,1746,1749,1751,1753,1756,1758,1760,1762,1764,1767,1769],{"class":668,"line":874},[666,1742,1628],{"class":687},[666,1744,1745],{"class":704},"input",[666,1747,1748],{"class":679}," type",[666,1750,688],{"class":687},[666,1752,1533],{"class":687},[666,1754,1755],{"class":714},"checkbox",[666,1757,1533],{"class":687},[666,1759,1633],{"class":679},[666,1761,688],{"class":687},[666,1763,1533],{"class":687},[666,1765,1766],{"class":714},"compactMode.value",[666,1768,1533],{"class":687},[666,1770,1771],{"class":687}," \u002F>\n",[666,1773,1774,1777,1779],{"class":668,"line":887},[666,1775,1776],{"class":687},"    \u003C\u002F",[666,1778,1609],{"class":704},[666,1780,1541],{"class":687},[666,1782,1783,1786,1788],{"class":668,"line":1171},[666,1784,1785],{"class":687},"  \u003C\u002F",[666,1787,1599],{"class":704},[666,1789,1541],{"class":687},[666,1791,1792,1794,1796],{"class":668,"line":1176},[666,1793,1574],{"class":687},[666,1795,1589],{"class":704},[666,1797,1541],{"class":687},[560,1799,1800,1803,1804,1807],{},[569,1801,1802],{},"state.theme.value"," is a standard Vue ",[569,1805,1806],{},"Ref\u003Cstring>",". Writing to it persists to IndexedDB and broadcasts to all open tabs automatically — no extra wiring needed.",[577,1809,1811],{"id":1810},"example-custom-crud-list-with-your-own-table","Example: Custom CRUD list with your own table",[560,1813,1814,1815,1818,1819,1821],{},"Use ",[569,1816,1817],{},"useProtoList"," (or ",[569,1820,423],{},") directly with your own table component:",[560,1823,1824],{},[917,1825],{"alt":1826,"src":1827},"A custom task list on useProtoList, no protokit components","\u002Fscreenshots\u002Fnuxt-protokit\u002Fheadless-tasks-1440.png",[593,1829,1831],{"className":660,"code":1830,"language":662,"meta":601,"style":601},"\u002F\u002F composables\u002FuseTaskStore.ts\nexport function useTaskStore(workspaceId: string) {\n  \u002F\u002F One Y.Doc per workspace — shared across all tools\n  const { doc, isReady } = useProtoDoc(`workspace-${workspaceId}`)\n\n  \u002F\u002F Raw Y.Array CRUD\n  const tasks = useProtoList\u003C{\n    id: string\n    title: string\n    status: 'todo' | 'in-progress' | 'done'\n    priority: 'low' | 'medium' | 'high'\n    createdAt: number\n  }>(doc, 'tasks', {\n    defaults: {\n      id: '',\n      title: '',\n      status: 'todo',\n      priority: 'medium',\n      createdAt: 0,\n    },\n  })\n\n  function addTask(title: string) {\n    tasks.add({\n      id: crypto.randomUUID(),\n      title,\n      status: 'todo',\n      priority: 'medium',\n      createdAt: Date.now(),\n    })\n  }\n\n  function completeTask(index: number) {\n    tasks.update(index, { status: 'done' })\n  }\n\n  return { isReady, tasks, addTask, completeTask }\n}\n",[569,1832,1833,1838,1864,1869,1907,1911,1916,1931,1941,1950,1984,2016,2026,2049,2058,2070,2081,2096,2111,2123,2127,2133,2137,2157,2171,2189,2195,2209,2223,2241,2248,2252,2256,2277,2309,2313,2317,2340],{"__ignoreMap":601},[666,1834,1835],{"class":668,"line":669},[666,1836,1837],{"class":672},"\u002F\u002F composables\u002FuseTaskStore.ts\n",[666,1839,1840,1842,1844,1847,1849,1853,1855,1859,1862],{"class":668,"line":676},[666,1841,1318],{"class":1317},[666,1843,1321],{"class":679},[666,1845,1846],{"class":691}," useTaskStore",[666,1848,695],{"class":687},[666,1850,1852],{"class":1851},"sHdIc","workspaceId",[666,1854,708],{"class":687},[666,1856,1858],{"class":1857},"sBMFI"," string",[666,1860,1861],{"class":687},")",[666,1863,969],{"class":687},[666,1865,1866],{"class":668,"line":701},[666,1867,1868],{"class":672},"  \u002F\u002F One Y.Doc per workspace — shared across all tools\n",[666,1870,1871,1873,1875,1878,1880,1882,1884,1886,1889,1891,1894,1897,1900,1902,1905],{"class":668,"line":724},[666,1872,1335],{"class":679},[666,1874,812],{"class":687},[666,1876,1877],{"class":683}," doc",[666,1879,739],{"class":687},[666,1881,1345],{"class":683},[666,1883,1353],{"class":687},[666,1885,1356],{"class":687},[666,1887,1888],{"class":691}," useProtoDoc",[666,1890,695],{"class":704},[666,1892,1893],{"class":687},"`",[666,1895,1896],{"class":714},"workspace-",[666,1898,1899],{"class":687},"${",[666,1901,1852],{"class":683},[666,1903,1904],{"class":687},"}`",[666,1906,827],{"class":704},[666,1908,1909],{"class":668,"line":745},[666,1910,834],{"emptyLinePlaceholder":833},[666,1912,1913],{"class":668,"line":764},[666,1914,1915],{"class":672},"  \u002F\u002F Raw Y.Array CRUD\n",[666,1917,1918,1920,1923,1925,1928],{"class":668,"line":784},[666,1919,1335],{"class":679},[666,1921,1922],{"class":683}," tasks",[666,1924,1356],{"class":687},[666,1926,1927],{"class":691}," useProtoList",[666,1929,1930],{"class":687},"\u003C{\n",[666,1932,1933,1936,1938],{"class":668,"line":804},[666,1934,1935],{"class":704},"    id",[666,1937,708],{"class":687},[666,1939,1940],{"class":1857}," string\n",[666,1942,1943,1946,1948],{"class":668,"line":821},[666,1944,1945],{"class":704},"    title",[666,1947,708],{"class":687},[666,1949,1940],{"class":1857},[666,1951,1952,1955,1957,1959,1962,1964,1967,1969,1972,1974,1976,1978,1981],{"class":668,"line":830},[666,1953,1954],{"class":704},"    status",[666,1956,708],{"class":687},[666,1958,711],{"class":687},[666,1960,1961],{"class":714},"todo",[666,1963,718],{"class":687},[666,1965,1966],{"class":687}," |",[666,1968,711],{"class":687},[666,1970,1971],{"class":714},"in-progress",[666,1973,718],{"class":687},[666,1975,1966],{"class":687},[666,1977,711],{"class":687},[666,1979,1980],{"class":714},"done",[666,1982,1983],{"class":687},"'\n",[666,1985,1986,1989,1991,1993,1996,1998,2000,2002,2005,2007,2009,2011,2014],{"class":668,"line":837},[666,1987,1988],{"class":704},"    priority",[666,1990,708],{"class":687},[666,1992,711],{"class":687},[666,1994,1995],{"class":714},"low",[666,1997,718],{"class":687},[666,1999,1966],{"class":687},[666,2001,711],{"class":687},[666,2003,2004],{"class":714},"medium",[666,2006,718],{"class":687},[666,2008,1966],{"class":687},[666,2010,711],{"class":687},[666,2012,2013],{"class":714},"high",[666,2015,1983],{"class":687},[666,2017,2018,2021,2023],{"class":668,"line":843},[666,2019,2020],{"class":704},"    createdAt",[666,2022,708],{"class":687},[666,2024,2025],{"class":1857}," number\n",[666,2027,2028,2031,2033,2036,2038,2040,2043,2045,2047],{"class":668,"line":859},[666,2029,2030],{"class":687},"  }>",[666,2032,695],{"class":704},[666,2034,2035],{"class":683},"doc",[666,2037,739],{"class":687},[666,2039,711],{"class":687},[666,2041,2042],{"class":714},"tasks",[666,2044,718],{"class":687},[666,2046,739],{"class":687},[666,2048,969],{"class":687},[666,2050,2051,2054,2056],{"class":668,"line":874},[666,2052,2053],{"class":704},"    defaults",[666,2055,708],{"class":687},[666,2057,969],{"class":687},[666,2059,2060,2063,2065,2068],{"class":668,"line":887},[666,2061,2062],{"class":704},"      id",[666,2064,708],{"class":687},[666,2066,2067],{"class":687}," ''",[666,2069,721],{"class":687},[666,2071,2072,2075,2077,2079],{"class":668,"line":1171},[666,2073,2074],{"class":704},"      title",[666,2076,708],{"class":687},[666,2078,2067],{"class":687},[666,2080,721],{"class":687},[666,2082,2083,2086,2088,2090,2092,2094],{"class":668,"line":1176},[666,2084,2085],{"class":704},"      status",[666,2087,708],{"class":687},[666,2089,711],{"class":687},[666,2091,1961],{"class":714},[666,2093,718],{"class":687},[666,2095,721],{"class":687},[666,2097,2098,2101,2103,2105,2107,2109],{"class":668,"line":1186},[666,2099,2100],{"class":704},"      priority",[666,2102,708],{"class":687},[666,2104,711],{"class":687},[666,2106,2004],{"class":714},[666,2108,718],{"class":687},[666,2110,721],{"class":687},[666,2112,2113,2116,2118,2121],{"class":668,"line":1202},[666,2114,2115],{"class":704},"      createdAt",[666,2117,708],{"class":687},[666,2119,2120],{"class":1285}," 0",[666,2122,721],{"class":687},[666,2124,2125],{"class":668,"line":1218},[666,2126,1070],{"class":687},[666,2128,2129,2131],{"class":668,"line":1231},[666,2130,1390],{"class":687},[666,2132,827],{"class":704},[666,2134,2135],{"class":668,"line":1236},[666,2136,834],{"emptyLinePlaceholder":833},[666,2138,2139,2142,2145,2147,2149,2151,2153,2155],{"class":668,"line":1246},[666,2140,2141],{"class":679},"  function",[666,2143,2144],{"class":691}," addTask",[666,2146,695],{"class":687},[666,2148,641],{"class":1851},[666,2150,708],{"class":687},[666,2152,1858],{"class":1857},[666,2154,1861],{"class":687},[666,2156,969],{"class":687},[666,2158,2159,2162,2164,2167,2169],{"class":668,"line":1262},[666,2160,2161],{"class":683},"    tasks",[666,2163,1426],{"class":687},[666,2165,2166],{"class":691},"add",[666,2168,695],{"class":704},[666,2170,698],{"class":687},[666,2172,2173,2175,2177,2180,2182,2185,2187],{"class":668,"line":1278},[666,2174,2062],{"class":704},[666,2176,708],{"class":687},[666,2178,2179],{"class":683}," crypto",[666,2181,1426],{"class":687},[666,2183,2184],{"class":691},"randomUUID",[666,2186,1327],{"class":704},[666,2188,721],{"class":687},[666,2190,2191,2193],{"class":668,"line":1291},[666,2192,2074],{"class":683},[666,2194,721],{"class":687},[666,2196,2197,2199,2201,2203,2205,2207],{"class":668,"line":1296},[666,2198,2085],{"class":704},[666,2200,708],{"class":687},[666,2202,711],{"class":687},[666,2204,1961],{"class":714},[666,2206,718],{"class":687},[666,2208,721],{"class":687},[666,2210,2211,2213,2215,2217,2219,2221],{"class":668,"line":1302},[666,2212,2100],{"class":704},[666,2214,708],{"class":687},[666,2216,711],{"class":687},[666,2218,2004],{"class":714},[666,2220,718],{"class":687},[666,2222,721],{"class":687},[666,2224,2225,2227,2229,2232,2234,2237,2239],{"class":668,"line":1309},[666,2226,2115],{"class":704},[666,2228,708],{"class":687},[666,2230,2231],{"class":683}," Date",[666,2233,1426],{"class":687},[666,2235,2236],{"class":691},"now",[666,2238,1327],{"class":704},[666,2240,721],{"class":687},[666,2242,2243,2246],{"class":668,"line":1314},[666,2244,2245],{"class":687},"    }",[666,2247,827],{"class":704},[666,2249,2250],{"class":668,"line":1332},[666,2251,1496],{"class":687},[666,2253,2254],{"class":668,"line":1371},[666,2255,834],{"emptyLinePlaceholder":833},[666,2257,2258,2260,2263,2265,2268,2270,2273,2275],{"class":668,"line":1387},[666,2259,2141],{"class":679},[666,2261,2262],{"class":691}," completeTask",[666,2264,695],{"class":687},[666,2266,2267],{"class":1851},"index",[666,2269,708],{"class":687},[666,2271,2272],{"class":1857}," number",[666,2274,1861],{"class":687},[666,2276,969],{"class":687},[666,2278,2279,2281,2283,2286,2288,2290,2292,2294,2297,2299,2301,2303,2305,2307],{"class":668,"line":1395},[666,2280,2161],{"class":683},[666,2282,1426],{"class":687},[666,2284,2285],{"class":691},"update",[666,2287,695],{"class":704},[666,2289,2267],{"class":683},[666,2291,739],{"class":687},[666,2293,812],{"class":687},[666,2295,2296],{"class":704}," status",[666,2298,708],{"class":687},[666,2300,711],{"class":687},[666,2302,1980],{"class":714},[666,2304,718],{"class":687},[666,2306,1353],{"class":687},[666,2308,827],{"class":704},[666,2310,2311],{"class":668,"line":1400},[666,2312,1496],{"class":687},[666,2314,2315],{"class":668,"line":1408},[666,2316,834],{"emptyLinePlaceholder":833},[666,2318,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337],{"class":668,"line":1416},[666,2320,1403],{"class":1317},[666,2322,812],{"class":687},[666,2324,1345],{"class":683},[666,2326,739],{"class":687},[666,2328,1922],{"class":683},[666,2330,739],{"class":687},[666,2332,2144],{"class":683},[666,2334,739],{"class":687},[666,2336,2262],{"class":683},[666,2338,2339],{"class":687}," }\n",[666,2341,2342],{"class":668,"line":1434},[666,2343,1502],{"class":687},[593,2345,2347],{"className":1505,"code":2346,"language":1507,"meta":601,"style":601},"\u003Cscript setup lang=\"ts\">\nconst { isReady, tasks, addTask, completeTask } = useTaskStore(workspaceId)\nconst newTitle = ref('')\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CClientOnly>\n    \u003Cdiv v-if=\"isReady\">\n      \u003C!-- Your own table — not ProtoCrudList -->\n      \u003CMyTable :rows=\"tasks.items.value\">\n        \u003Ctemplate #actions=\"{ index, row }\">\n          \u003CMyButton v-if=\"row.status !== 'done'\" @click=\"completeTask(index)\">\n            Done\n          \u003C\u002FMyButton>\n        \u003C\u002Ftemplate>\n      \u003C\u002FMyTable>\n\n      \u003Cinput v-model=\"newTitle\" placeholder=\"New task\" \u002F>\n      \u003Cbutton @click=\"addTask(newTitle); newTitle = ''\">Add\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n  \u003C\u002FClientOnly>\n\u003C\u002Ftemplate>\n",[569,2348,2349,2369,2399,2417,2425,2429,2437,2445,2463,2468,2489,2522,2555,2560,2569,2578,2586,2590,2621,2650,2658,2666],{"__ignoreMap":601},[666,2350,2351,2353,2355,2357,2359,2361,2363,2365,2367],{"class":668,"line":669},[666,2352,1519],{"class":687},[666,2354,1522],{"class":704},[666,2356,1525],{"class":679},[666,2358,1528],{"class":679},[666,2360,688],{"class":687},[666,2362,1533],{"class":687},[666,2364,1536],{"class":714},[666,2366,1533],{"class":687},[666,2368,1541],{"class":687},[666,2370,2371,2373,2375,2377,2379,2381,2383,2385,2387,2390,2392,2394,2396],{"class":668,"line":676},[666,2372,680],{"class":679},[666,2374,812],{"class":687},[666,2376,1345],{"class":683},[666,2378,739],{"class":687},[666,2380,1922],{"class":683},[666,2382,739],{"class":687},[666,2384,2144],{"class":683},[666,2386,739],{"class":687},[666,2388,2389],{"class":683}," completeTask ",[666,2391,824],{"class":687},[666,2393,1356],{"class":687},[666,2395,1846],{"class":691},[666,2397,2398],{"class":683},"(workspaceId)\n",[666,2400,2401,2403,2406,2408,2411,2413,2415],{"class":668,"line":701},[666,2402,680],{"class":679},[666,2404,2405],{"class":683}," newTitle ",[666,2407,688],{"class":687},[666,2409,2410],{"class":691}," ref",[666,2412,695],{"class":683},[666,2414,902],{"class":687},[666,2416,827],{"class":683},[666,2418,2419,2421,2423],{"class":668,"line":724},[666,2420,1574],{"class":687},[666,2422,1522],{"class":704},[666,2424,1541],{"class":687},[666,2426,2427],{"class":668,"line":745},[666,2428,834],{"emptyLinePlaceholder":833},[666,2430,2431,2433,2435],{"class":668,"line":764},[666,2432,1519],{"class":687},[666,2434,1589],{"class":704},[666,2436,1541],{"class":687},[666,2438,2439,2441,2443],{"class":668,"line":784},[666,2440,1596],{"class":687},[666,2442,1599],{"class":704},[666,2444,1541],{"class":687},[666,2446,2447,2449,2451,2453,2455,2457,2459,2461],{"class":668,"line":804},[666,2448,1606],{"class":687},[666,2450,1609],{"class":704},[666,2452,1612],{"class":679},[666,2454,688],{"class":687},[666,2456,1533],{"class":687},[666,2458,1619],{"class":714},[666,2460,1533],{"class":687},[666,2462,1541],{"class":687},[666,2464,2465],{"class":668,"line":821},[666,2466,2467],{"class":672},"      \u003C!-- Your own table — not ProtoCrudList -->\n",[666,2469,2470,2472,2475,2478,2480,2482,2485,2487],{"class":668,"line":830},[666,2471,1628],{"class":687},[666,2473,2474],{"class":704},"MyTable",[666,2476,2477],{"class":679}," :rows",[666,2479,688],{"class":687},[666,2481,1533],{"class":687},[666,2483,2484],{"class":714},"tasks.items.value",[666,2486,1533],{"class":687},[666,2488,1541],{"class":687},[666,2490,2491,2493,2495,2498,2501,2503,2505,2508,2511,2513,2516,2518,2520],{"class":668,"line":837},[666,2492,1649],{"class":687},[666,2494,1589],{"class":704},[666,2496,2497],{"class":687}," #",[666,2499,2500],{"class":679},"actions",[666,2502,688],{"class":687},[666,2504,1533],{"class":687},[666,2506,2507],{"class":687},"{",[666,2509,2510],{"class":683}," index",[666,2512,739],{"class":687},[666,2514,2515],{"class":683}," row ",[666,2517,824],{"class":687},[666,2519,1533],{"class":687},[666,2521,1541],{"class":687},[666,2523,2524,2527,2530,2532,2534,2536,2539,2541,2544,2546,2548,2551,2553],{"class":668,"line":843},[666,2525,2526],{"class":687},"          \u003C",[666,2528,2529],{"class":704},"MyButton",[666,2531,1612],{"class":679},[666,2533,688],{"class":687},[666,2535,1533],{"class":687},[666,2537,2538],{"class":714},"row.status !== 'done'",[666,2540,1533],{"class":687},[666,2542,2543],{"class":679}," @click",[666,2545,688],{"class":687},[666,2547,1533],{"class":687},[666,2549,2550],{"class":714},"completeTask(index)",[666,2552,1533],{"class":687},[666,2554,1541],{"class":687},[666,2556,2557],{"class":668,"line":859},[666,2558,2559],{"class":683},"            Done\n",[666,2561,2562,2565,2567],{"class":668,"line":874},[666,2563,2564],{"class":687},"          \u003C\u002F",[666,2566,2529],{"class":704},[666,2568,1541],{"class":687},[666,2570,2571,2574,2576],{"class":668,"line":887},[666,2572,2573],{"class":687},"        \u003C\u002F",[666,2575,1589],{"class":704},[666,2577,1541],{"class":687},[666,2579,2580,2582,2584],{"class":668,"line":1171},[666,2581,1734],{"class":687},[666,2583,2474],{"class":704},[666,2585,1541],{"class":687},[666,2587,2588],{"class":668,"line":1176},[666,2589,834],{"emptyLinePlaceholder":833},[666,2591,2592,2594,2596,2598,2600,2602,2605,2607,2610,2612,2614,2617,2619],{"class":668,"line":1186},[666,2593,1628],{"class":687},[666,2595,1745],{"class":704},[666,2597,1633],{"class":679},[666,2599,688],{"class":687},[666,2601,1533],{"class":687},[666,2603,2604],{"class":714},"newTitle",[666,2606,1533],{"class":687},[666,2608,2609],{"class":679}," placeholder",[666,2611,688],{"class":687},[666,2613,1533],{"class":687},[666,2615,2616],{"class":714},"New task",[666,2618,1533],{"class":687},[666,2620,1771],{"class":687},[666,2622,2623,2625,2628,2630,2632,2634,2637,2639,2641,2644,2646,2648],{"class":668,"line":1202},[666,2624,1628],{"class":687},[666,2626,2627],{"class":704},"button",[666,2629,2543],{"class":679},[666,2631,688],{"class":687},[666,2633,1533],{"class":687},[666,2635,2636],{"class":714},"addTask(newTitle); newTitle = ''",[666,2638,1533],{"class":687},[666,2640,1666],{"class":687},[666,2642,2643],{"class":683},"Add",[666,2645,1574],{"class":687},[666,2647,2627],{"class":704},[666,2649,1541],{"class":687},[666,2651,2652,2654,2656],{"class":668,"line":1218},[666,2653,1776],{"class":687},[666,2655,1609],{"class":704},[666,2657,1541],{"class":687},[666,2659,2660,2662,2664],{"class":668,"line":1231},[666,2661,1785],{"class":687},[666,2663,1599],{"class":704},[666,2665,1541],{"class":687},[666,2667,2668,2670,2672],{"class":668,"line":1236},[666,2669,1574],{"class":687},[666,2671,1589],{"class":704},[666,2673,1541],{"class":687},[577,2675,2677],{"id":2676},"example-rich-text-field-with-useprototext","Example: Rich text field with useProtoText",[560,2679,2680],{},"For a persisted text editor (rich text, markdown, notes) that syncs across tabs:",[560,2682,2683],{},[917,2684],{"alt":2685,"src":2686},"Notes on useProtoText: a Y.Text per tab, saved to IndexedDB","\u002Fscreenshots\u002Fnuxt-protokit\u002Fheadless-notes-1440.png",[593,2688,2690],{"className":660,"code":2689,"language":662,"meta":601,"style":601},"\u002F\u002F composables\u002FuseProjectNotes.ts\nexport function useProjectNotes(projectId: string) {\n  const { doc, isReady } = useProtoDoc(`project-${projectId}`)\n\n  \u002F\u002F Y.Text ↔ reactive string — bidirectional\n  const { text: notes } = useProtoText(doc, 'notes')\n\n  return { isReady, notes }\n}\n",[569,2691,2692,2697,2719,2752,2756,2761,2797,2801,2815],{"__ignoreMap":601},[666,2693,2694],{"class":668,"line":669},[666,2695,2696],{"class":672},"\u002F\u002F composables\u002FuseProjectNotes.ts\n",[666,2698,2699,2701,2703,2706,2708,2711,2713,2715,2717],{"class":668,"line":676},[666,2700,1318],{"class":1317},[666,2702,1321],{"class":679},[666,2704,2705],{"class":691}," useProjectNotes",[666,2707,695],{"class":687},[666,2709,2710],{"class":1851},"projectId",[666,2712,708],{"class":687},[666,2714,1858],{"class":1857},[666,2716,1861],{"class":687},[666,2718,969],{"class":687},[666,2720,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2744,2746,2748,2750],{"class":668,"line":701},[666,2722,1335],{"class":679},[666,2724,812],{"class":687},[666,2726,1877],{"class":683},[666,2728,739],{"class":687},[666,2730,1345],{"class":683},[666,2732,1353],{"class":687},[666,2734,1356],{"class":687},[666,2736,1888],{"class":691},[666,2738,695],{"class":704},[666,2740,1893],{"class":687},[666,2742,2743],{"class":714},"project-",[666,2745,1899],{"class":687},[666,2747,2710],{"class":683},[666,2749,1904],{"class":687},[666,2751,827],{"class":704},[666,2753,2754],{"class":668,"line":724},[666,2755,834],{"emptyLinePlaceholder":833},[666,2757,2758],{"class":668,"line":745},[666,2759,2760],{"class":672},"  \u002F\u002F Y.Text ↔ reactive string — bidirectional\n",[666,2762,2763,2765,2767,2770,2772,2775,2777,2779,2782,2784,2786,2788,2790,2793,2795],{"class":668,"line":764},[666,2764,1335],{"class":679},[666,2766,812],{"class":687},[666,2768,2769],{"class":704}," text",[666,2771,708],{"class":687},[666,2773,2774],{"class":683}," notes",[666,2776,1353],{"class":687},[666,2778,1356],{"class":687},[666,2780,2781],{"class":691}," useProtoText",[666,2783,695],{"class":704},[666,2785,2035],{"class":683},[666,2787,739],{"class":687},[666,2789,711],{"class":687},[666,2791,2792],{"class":714},"notes",[666,2794,718],{"class":687},[666,2796,827],{"class":704},[666,2798,2799],{"class":668,"line":784},[666,2800,834],{"emptyLinePlaceholder":833},[666,2802,2803,2805,2807,2809,2811,2813],{"class":668,"line":804},[666,2804,1403],{"class":1317},[666,2806,812],{"class":687},[666,2808,1345],{"class":683},[666,2810,739],{"class":687},[666,2812,2774],{"class":683},[666,2814,2339],{"class":687},[666,2816,2817],{"class":668,"line":821},[666,2818,1502],{"class":687},[593,2820,2822],{"className":1505,"code":2821,"language":1507,"meta":601,"style":601},"\u003Cscript setup lang=\"ts\">\nconst { isReady, notes } = useProjectNotes(projectId)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CClientOnly>\n    \u003CMyMarkdownEditor v-if=\"isReady\" v-model=\"notes.value\" \u002F>\n  \u003C\u002FClientOnly>\n\u003C\u002Ftemplate>\n",[569,2823,2824,2844,2866,2874,2878,2886,2894,2924,2932],{"__ignoreMap":601},[666,2825,2826,2828,2830,2832,2834,2836,2838,2840,2842],{"class":668,"line":669},[666,2827,1519],{"class":687},[666,2829,1522],{"class":704},[666,2831,1525],{"class":679},[666,2833,1528],{"class":679},[666,2835,688],{"class":687},[666,2837,1533],{"class":687},[666,2839,1536],{"class":714},[666,2841,1533],{"class":687},[666,2843,1541],{"class":687},[666,2845,2846,2848,2850,2852,2854,2857,2859,2861,2863],{"class":668,"line":676},[666,2847,680],{"class":679},[666,2849,812],{"class":687},[666,2851,1345],{"class":683},[666,2853,739],{"class":687},[666,2855,2856],{"class":683}," notes ",[666,2858,824],{"class":687},[666,2860,1356],{"class":687},[666,2862,2705],{"class":691},[666,2864,2865],{"class":683},"(projectId)\n",[666,2867,2868,2870,2872],{"class":668,"line":701},[666,2869,1574],{"class":687},[666,2871,1522],{"class":704},[666,2873,1541],{"class":687},[666,2875,2876],{"class":668,"line":724},[666,2877,834],{"emptyLinePlaceholder":833},[666,2879,2880,2882,2884],{"class":668,"line":745},[666,2881,1519],{"class":687},[666,2883,1589],{"class":704},[666,2885,1541],{"class":687},[666,2887,2888,2890,2892],{"class":668,"line":764},[666,2889,1596],{"class":687},[666,2891,1599],{"class":704},[666,2893,1541],{"class":687},[666,2895,2896,2898,2901,2903,2905,2907,2909,2911,2913,2915,2917,2920,2922],{"class":668,"line":784},[666,2897,1606],{"class":687},[666,2899,2900],{"class":704},"MyMarkdownEditor",[666,2902,1612],{"class":679},[666,2904,688],{"class":687},[666,2906,1533],{"class":687},[666,2908,1619],{"class":714},[666,2910,1533],{"class":687},[666,2912,1633],{"class":679},[666,2914,688],{"class":687},[666,2916,1533],{"class":687},[666,2918,2919],{"class":714},"notes.value",[666,2921,1533],{"class":687},[666,2923,1771],{"class":687},[666,2925,2926,2928,2930],{"class":668,"line":804},[666,2927,1785],{"class":687},[666,2929,1599],{"class":704},[666,2931,1541],{"class":687},[666,2933,2934,2936,2938],{"class":668,"line":821},[666,2935,1574],{"class":687},[666,2937,1589],{"class":704},[666,2939,1541],{"class":687},[560,2941,2942,2944,2945,2947,2948,2951],{},[569,2943,2919],{}," is a ",[569,2946,1806],{}," backed by a ",[569,2949,2950],{},"Y.Text",". Any change persists to IndexedDB and syncs to other tabs via BroadcastChannel.",[577,2953,2955],{"id":2954},"example-wizard-multi-step-form-state","Example: Wizard \u002F multi-step form state",[560,2957,2958],{},"Persist a multi-step form so users can leave and return mid-flow:",[593,2960,2962],{"className":660,"code":2961,"language":662,"meta":601,"style":601},"const wizardSchema = defineHeadlessSchema({\n  key: 'onboarding-wizard',\n  fields: {\n    step:          { type: 'number',   label: 'Current step',  default: 0 },\n    companyName:   { type: 'text',     label: 'Company name',  default: '' },\n    teamSize:      { type: 'select',   label: 'Team size',     default: '',\n                     options: ['1', '2-10', '11-50', '50+'] },\n    useCase:       { type: 'textarea', label: 'Use case',      default: '' },\n    completed:     { type: 'toggle',   label: 'Completed',     default: false },\n  },\n})\n\nexport function useOnboardingWizard() {\n  const { state, isReady, reset } = usePrototype(wizardSchema, {\n    disableSync: true,\n  })\n\n  function advance() {\n    state.step.value++\n  }\n\n  function finish() {\n    state.completed.value = true\n  }\n\n  return { isReady, state, advance, finish, reset }\n}\n",[569,2963,2964,2979,2994,3002,3048,3092,3136,3184,3229,3272,3276,3282,3286,3299,3330,3340,3346,3350,3361,3379,3383,3387,3398,3416,3420,3424,3450],{"__ignoreMap":601},[666,2965,2966,2968,2971,2973,2975,2977],{"class":668,"line":669},[666,2967,680],{"class":679},[666,2969,2970],{"class":683}," wizardSchema ",[666,2972,688],{"class":687},[666,2974,852],{"class":691},[666,2976,695],{"class":683},[666,2978,698],{"class":687},[666,2980,2981,2983,2985,2987,2990,2992],{"class":668,"line":676},[666,2982,705],{"class":704},[666,2984,708],{"class":687},[666,2986,711],{"class":687},[666,2988,2989],{"class":714},"onboarding-wizard",[666,2991,718],{"class":687},[666,2993,721],{"class":687},[666,2995,2996,2998,3000],{"class":668,"line":701},[666,2997,807],{"class":704},[666,2999,708],{"class":687},[666,3001,969],{"class":687},[666,3003,3004,3007,3009,3012,3014,3016,3018,3020,3022,3024,3027,3029,3031,3034,3036,3038,3041,3043,3045],{"class":668,"line":724},[666,3005,3006],{"class":704},"    step",[666,3008,708],{"class":687},[666,3010,3011],{"class":687},"          {",[666,3013,1748],{"class":704},[666,3015,708],{"class":687},[666,3017,711],{"class":687},[666,3019,1255],{"class":714},[666,3021,718],{"class":687},[666,3023,739],{"class":687},[666,3025,3026],{"class":704},"   label",[666,3028,708],{"class":687},[666,3030,711],{"class":687},[666,3032,3033],{"class":714},"Current step",[666,3035,718],{"class":687},[666,3037,739],{"class":687},[666,3039,3040],{"class":704},"  default",[666,3042,708],{"class":687},[666,3044,2120],{"class":1285},[666,3046,3047],{"class":687}," },\n",[666,3049,3050,3053,3055,3058,3060,3062,3064,3066,3068,3070,3073,3075,3077,3080,3082,3084,3086,3088,3090],{"class":668,"line":745},[666,3051,3052],{"class":704},"    companyName",[666,3054,708],{"class":687},[666,3056,3057],{"class":687},"   {",[666,3059,1748],{"class":704},[666,3061,708],{"class":687},[666,3063,711],{"class":687},[666,3065,598],{"class":714},[666,3067,718],{"class":687},[666,3069,739],{"class":687},[666,3071,3072],{"class":704},"     label",[666,3074,708],{"class":687},[666,3076,711],{"class":687},[666,3078,3079],{"class":714},"Company name",[666,3081,718],{"class":687},[666,3083,739],{"class":687},[666,3085,3040],{"class":704},[666,3087,708],{"class":687},[666,3089,2067],{"class":687},[666,3091,3047],{"class":687},[666,3093,3094,3097,3099,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3123,3125,3127,3130,3132,3134],{"class":668,"line":764},[666,3095,3096],{"class":704},"    teamSize",[666,3098,708],{"class":687},[666,3100,3101],{"class":687},"      {",[666,3103,1748],{"class":704},[666,3105,708],{"class":687},[666,3107,711],{"class":687},[666,3109,990],{"class":714},[666,3111,718],{"class":687},[666,3113,739],{"class":687},[666,3115,3026],{"class":704},[666,3117,708],{"class":687},[666,3119,711],{"class":687},[666,3121,3122],{"class":714},"Team size",[666,3124,718],{"class":687},[666,3126,739],{"class":687},[666,3128,3129],{"class":704},"     default",[666,3131,708],{"class":687},[666,3133,2067],{"class":687},[666,3135,721],{"class":687},[666,3137,3138,3141,3143,3145,3147,3150,3152,3154,3156,3159,3161,3163,3165,3168,3170,3172,3174,3177,3179,3182],{"class":668,"line":784},[666,3139,3140],{"class":704},"                     options",[666,3142,708],{"class":687},[666,3144,1036],{"class":683},[666,3146,718],{"class":687},[666,3148,3149],{"class":714},"1",[666,3151,718],{"class":687},[666,3153,739],{"class":687},[666,3155,711],{"class":687},[666,3157,3158],{"class":714},"2-10",[666,3160,718],{"class":687},[666,3162,739],{"class":687},[666,3164,711],{"class":687},[666,3166,3167],{"class":714},"11-50",[666,3169,718],{"class":687},[666,3171,739],{"class":687},[666,3173,711],{"class":687},[666,3175,3176],{"class":714},"50+",[666,3178,718],{"class":687},[666,3180,3181],{"class":683},"] ",[666,3183,818],{"class":687},[666,3185,3186,3189,3191,3194,3196,3198,3200,3203,3205,3207,3210,3212,3214,3217,3219,3221,3223,3225,3227],{"class":668,"line":804},[666,3187,3188],{"class":704},"    useCase",[666,3190,708],{"class":687},[666,3192,3193],{"class":687},"       {",[666,3195,1748],{"class":704},[666,3197,708],{"class":687},[666,3199,711],{"class":687},[666,3201,3202],{"class":714},"textarea",[666,3204,718],{"class":687},[666,3206,739],{"class":687},[666,3208,3209],{"class":704}," label",[666,3211,708],{"class":687},[666,3213,711],{"class":687},[666,3215,3216],{"class":714},"Use case",[666,3218,718],{"class":687},[666,3220,739],{"class":687},[666,3222,1015],{"class":704},[666,3224,708],{"class":687},[666,3226,2067],{"class":687},[666,3228,3047],{"class":687},[666,3230,3231,3234,3236,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3260,3262,3264,3266,3268,3270],{"class":668,"line":821},[666,3232,3233],{"class":704},"    completed",[666,3235,708],{"class":687},[666,3237,3238],{"class":687},"     {",[666,3240,1748],{"class":704},[666,3242,708],{"class":687},[666,3244,711],{"class":687},[666,3246,1195],{"class":714},[666,3248,718],{"class":687},[666,3250,739],{"class":687},[666,3252,3026],{"class":704},[666,3254,708],{"class":687},[666,3256,711],{"class":687},[666,3258,3259],{"class":714},"Completed",[666,3261,718],{"class":687},[666,3263,739],{"class":687},[666,3265,3129],{"class":704},[666,3267,708],{"class":687},[666,3269,1226],{"class":1225},[666,3271,3047],{"class":687},[666,3273,3274],{"class":668,"line":830},[666,3275,1299],{"class":687},[666,3277,3278,3280],{"class":668,"line":837},[666,3279,824],{"class":687},[666,3281,827],{"class":683},[666,3283,3284],{"class":668,"line":843},[666,3285,834],{"emptyLinePlaceholder":833},[666,3287,3288,3290,3292,3295,3297],{"class":668,"line":859},[666,3289,1318],{"class":1317},[666,3291,1321],{"class":679},[666,3293,3294],{"class":691}," useOnboardingWizard",[666,3296,1327],{"class":687},[666,3298,969],{"class":687},[666,3300,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3326,3328],{"class":668,"line":874},[666,3302,1335],{"class":679},[666,3304,812],{"class":687},[666,3306,1340],{"class":683},[666,3308,739],{"class":687},[666,3310,1345],{"class":683},[666,3312,739],{"class":687},[666,3314,1350],{"class":683},[666,3316,1353],{"class":687},[666,3318,1356],{"class":687},[666,3320,1359],{"class":691},[666,3322,695],{"class":704},[666,3324,3325],{"class":683},"wizardSchema",[666,3327,739],{"class":687},[666,3329,969],{"class":687},[666,3331,3332,3334,3336,3338],{"class":668,"line":887},[666,3333,1374],{"class":704},[666,3335,708],{"class":687},[666,3337,1379],{"class":1225},[666,3339,721],{"class":687},[666,3341,3342,3344],{"class":668,"line":1171},[666,3343,1390],{"class":687},[666,3345,827],{"class":704},[666,3347,3348],{"class":668,"line":1176},[666,3349,834],{"emptyLinePlaceholder":833},[666,3351,3352,3354,3357,3359],{"class":668,"line":1186},[666,3353,2141],{"class":679},[666,3355,3356],{"class":691}," advance",[666,3358,1327],{"class":687},[666,3360,969],{"class":687},[666,3362,3363,3366,3368,3371,3373,3376],{"class":668,"line":1202},[666,3364,3365],{"class":683},"    state",[666,3367,1426],{"class":687},[666,3369,3370],{"class":683},"step",[666,3372,1426],{"class":687},[666,3374,3375],{"class":683},"value",[666,3377,3378],{"class":687},"++\n",[666,3380,3381],{"class":668,"line":1218},[666,3382,1496],{"class":687},[666,3384,3385],{"class":668,"line":1231},[666,3386,834],{"emptyLinePlaceholder":833},[666,3388,3389,3391,3394,3396],{"class":668,"line":1236},[666,3390,2141],{"class":679},[666,3392,3393],{"class":691}," finish",[666,3395,1327],{"class":687},[666,3397,969],{"class":687},[666,3399,3400,3402,3404,3407,3409,3411,3413],{"class":668,"line":1246},[666,3401,3365],{"class":683},[666,3403,1426],{"class":687},[666,3405,3406],{"class":683},"completed",[666,3408,1426],{"class":687},[666,3410,3375],{"class":683},[666,3412,1356],{"class":687},[666,3414,3415],{"class":1225}," true\n",[666,3417,3418],{"class":668,"line":1262},[666,3419,1496],{"class":687},[666,3421,3422],{"class":668,"line":1278},[666,3423,834],{"emptyLinePlaceholder":833},[666,3425,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448],{"class":668,"line":1291},[666,3427,1403],{"class":1317},[666,3429,812],{"class":687},[666,3431,1345],{"class":683},[666,3433,739],{"class":687},[666,3435,1340],{"class":683},[666,3437,739],{"class":687},[666,3439,3356],{"class":683},[666,3441,739],{"class":687},[666,3443,3393],{"class":683},[666,3445,739],{"class":687},[666,3447,1350],{"class":683},[666,3449,2339],{"class":687},[666,3451,3452],{"class":668,"line":1296},[666,3453,1502],{"class":687},[577,3455,3457],{"id":3456},"example-schema-with-migrations","Example: Schema with migrations",[560,3459,3460,3461,3464],{},"Headless schemas support the same migration system as full schemas. When you rename a field or change its type, bump ",[569,3462,3463],{},"version"," and provide a migration step:",[593,3466,3468],{"className":660,"code":3467,"language":662,"meta":601,"style":601},"const settingsSchema = defineHeadlessSchema({\n  key: 'user-settings',\n  version: 2,\n  migrations: {\n    \u002F\u002F v1 → v2: rename 'darkMode' (boolean) to 'theme' (string)\n    2: (data) => ({\n      ...data,\n      theme: data.darkMode === true ? 'dark' : 'system',\n      darkMode: undefined,\n    }),\n  },\n  fields: {\n    theme: { type: 'select', label: 'Theme', default: 'system',\n             options: ['system', 'light', 'dark'] },\n  },\n})\n",[569,3469,3470,3484,3498,3510,3519,3524,3546,3555,3595,3605,3613,3617,3625,3670,3705,3709],{"__ignoreMap":601},[666,3471,3472,3474,3476,3478,3480,3482],{"class":668,"line":669},[666,3473,680],{"class":679},[666,3475,937],{"class":683},[666,3477,688],{"class":687},[666,3479,852],{"class":691},[666,3481,695],{"class":683},[666,3483,698],{"class":687},[666,3485,3486,3488,3490,3492,3494,3496],{"class":668,"line":676},[666,3487,705],{"class":704},[666,3489,708],{"class":687},[666,3491,711],{"class":687},[666,3493,715],{"class":714},[666,3495,718],{"class":687},[666,3497,721],{"class":687},[666,3499,3500,3503,3505,3508],{"class":668,"line":701},[666,3501,3502],{"class":704},"  version",[666,3504,708],{"class":687},[666,3506,3507],{"class":1285}," 2",[666,3509,721],{"class":687},[666,3511,3512,3515,3517],{"class":668,"line":724},[666,3513,3514],{"class":704},"  migrations",[666,3516,708],{"class":687},[666,3518,969],{"class":687},[666,3520,3521],{"class":668,"line":745},[666,3522,3523],{"class":672},"    \u002F\u002F v1 → v2: rename 'darkMode' (boolean) to 'theme' (string)\n",[666,3525,3526,3529,3531,3534,3537,3539,3542,3544],{"class":668,"line":764},[666,3527,3528],{"class":1285},"    2",[666,3530,708],{"class":687},[666,3532,3533],{"class":687}," (",[666,3535,3536],{"class":1851},"data",[666,3538,1861],{"class":687},[666,3540,3541],{"class":679}," =>",[666,3543,3533],{"class":683},[666,3545,698],{"class":687},[666,3547,3548,3551,3553],{"class":668,"line":784},[666,3549,3550],{"class":687},"      ...",[666,3552,3536],{"class":683},[666,3554,721],{"class":687},[666,3556,3557,3560,3562,3565,3567,3570,3573,3575,3578,3580,3582,3584,3587,3589,3591,3593],{"class":668,"line":804},[666,3558,3559],{"class":704},"      theme",[666,3561,708],{"class":687},[666,3563,3564],{"class":683}," data",[666,3566,1426],{"class":687},[666,3568,3569],{"class":683},"darkMode ",[666,3571,3572],{"class":687},"===",[666,3574,1379],{"class":1225},[666,3576,3577],{"class":687}," ?",[666,3579,711],{"class":687},[666,3581,1058],{"class":714},[666,3583,718],{"class":687},[666,3585,3586],{"class":687}," :",[666,3588,711],{"class":687},[666,3590,1022],{"class":714},[666,3592,718],{"class":687},[666,3594,721],{"class":687},[666,3596,3597,3600,3602],{"class":668,"line":821},[666,3598,3599],{"class":704},"      darkMode",[666,3601,708],{"class":687},[666,3603,3604],{"class":687}," undefined,\n",[666,3606,3607,3609,3611],{"class":668,"line":830},[666,3608,2245],{"class":687},[666,3610,1861],{"class":683},[666,3612,721],{"class":687},[666,3614,3615],{"class":668,"line":837},[666,3616,1299],{"class":687},[666,3618,3619,3621,3623],{"class":668,"line":843},[666,3620,807],{"class":704},[666,3622,708],{"class":687},[666,3624,969],{"class":687},[666,3626,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3660,3662,3664,3666,3668],{"class":668,"line":859},[666,3628,974],{"class":704},[666,3630,708],{"class":687},[666,3632,812],{"class":687},[666,3634,1748],{"class":704},[666,3636,708],{"class":687},[666,3638,711],{"class":687},[666,3640,990],{"class":714},[666,3642,718],{"class":687},[666,3644,739],{"class":687},[666,3646,3209],{"class":704},[666,3648,708],{"class":687},[666,3650,711],{"class":687},[666,3652,1006],{"class":714},[666,3654,718],{"class":687},[666,3656,739],{"class":687},[666,3658,3659],{"class":704}," default",[666,3661,708],{"class":687},[666,3663,711],{"class":687},[666,3665,1022],{"class":714},[666,3667,718],{"class":687},[666,3669,721],{"class":687},[666,3671,3672,3675,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703],{"class":668,"line":874},[666,3673,3674],{"class":704},"             options",[666,3676,708],{"class":687},[666,3678,1036],{"class":683},[666,3680,718],{"class":687},[666,3682,1022],{"class":714},[666,3684,718],{"class":687},[666,3686,739],{"class":687},[666,3688,711],{"class":687},[666,3690,1049],{"class":714},[666,3692,718],{"class":687},[666,3694,739],{"class":687},[666,3696,711],{"class":687},[666,3698,1058],{"class":714},[666,3700,718],{"class":687},[666,3702,3181],{"class":683},[666,3704,818],{"class":687},[666,3706,3707],{"class":668,"line":887},[666,3708,1299],{"class":687},[666,3710,3711,3713],{"class":668,"line":1171},[666,3712,824],{"class":687},[666,3714,827],{"class":683},[560,3716,3717,3718,3720,3721,1426],{},"Migrations run automatically after IndexedDB loads, before ",[569,3719,1619],{}," becomes ",[569,3722,3723],{},"true",[577,3725,3727],{"id":3726},"low-level-useprotodoc-useprotomap-directly","Low-level: useProtoDoc + useProtoMap directly",[560,3729,3730,3731,3733],{},"Skip ",[569,3732,415],{}," entirely when you only need a subset of its features:",[593,3735,3737],{"className":660,"code":3736,"language":662,"meta":601,"style":601},"\u002F\u002F composables\u002FuseMyFeatureStore.ts\nexport function useMyFeatureStore(userId: string) {\n  \u002F\u002F Scoped to this user — data never bleeds across users\n  const { doc, isReady } = useProtoDoc(`feature-store`, {\n    disableSync: false, \u002F\u002F keep server sync\n  })\n\n  \u002F\u002F Bidirectional Y.Map ↔ refs, with schema defaults\n  const { state, set } = useProtoMap(doc, 'feature-settings', {\n    pinned:     { type: 'toggle', label: 'Pinned',     default: false },\n    sortField:  { type: 'text',   label: 'Sort field', default: 'name' },\n    sortOrder:  { type: 'select', label: 'Order',      default: 'asc',\n                  options: ['asc', 'desc'] },\n  })\n\n  \u002F\u002F Y.Array for a list\n  const bookmarks = useProtoList\u003C{ url: string; label: string }>(\n    doc, 'bookmarks', {\n      defaults: { url: '', label: '' },\n    },\n  )\n\n  return { isReady, state, bookmarks }\n}\n",[569,3738,3739,3744,3766,3771,3802,3815,3821,3825,3830,3867,3909,3957,4004,4032,4038,4042,4047,4083,4101,4126,4130,4135,4139,4157],{"__ignoreMap":601},[666,3740,3741],{"class":668,"line":669},[666,3742,3743],{"class":672},"\u002F\u002F composables\u002FuseMyFeatureStore.ts\n",[666,3745,3746,3748,3750,3753,3755,3758,3760,3762,3764],{"class":668,"line":676},[666,3747,1318],{"class":1317},[666,3749,1321],{"class":679},[666,3751,3752],{"class":691}," useMyFeatureStore",[666,3754,695],{"class":687},[666,3756,3757],{"class":1851},"userId",[666,3759,708],{"class":687},[666,3761,1858],{"class":1857},[666,3763,1861],{"class":687},[666,3765,969],{"class":687},[666,3767,3768],{"class":668,"line":701},[666,3769,3770],{"class":672},"  \u002F\u002F Scoped to this user — data never bleeds across users\n",[666,3772,3773,3775,3777,3779,3781,3783,3785,3787,3789,3791,3793,3796,3798,3800],{"class":668,"line":724},[666,3774,1335],{"class":679},[666,3776,812],{"class":687},[666,3778,1877],{"class":683},[666,3780,739],{"class":687},[666,3782,1345],{"class":683},[666,3784,1353],{"class":687},[666,3786,1356],{"class":687},[666,3788,1888],{"class":691},[666,3790,695],{"class":704},[666,3792,1893],{"class":687},[666,3794,3795],{"class":714},"feature-store",[666,3797,1893],{"class":687},[666,3799,739],{"class":687},[666,3801,969],{"class":687},[666,3803,3804,3806,3808,3810,3812],{"class":668,"line":745},[666,3805,1374],{"class":704},[666,3807,708],{"class":687},[666,3809,1226],{"class":1225},[666,3811,739],{"class":687},[666,3813,3814],{"class":672}," \u002F\u002F keep server sync\n",[666,3816,3817,3819],{"class":668,"line":764},[666,3818,1390],{"class":687},[666,3820,827],{"class":704},[666,3822,3823],{"class":668,"line":784},[666,3824,834],{"emptyLinePlaceholder":833},[666,3826,3827],{"class":668,"line":804},[666,3828,3829],{"class":672},"  \u002F\u002F Bidirectional Y.Map ↔ refs, with schema defaults\n",[666,3831,3832,3834,3836,3838,3840,3843,3845,3847,3850,3852,3854,3856,3858,3861,3863,3865],{"class":668,"line":821},[666,3833,1335],{"class":679},[666,3835,812],{"class":687},[666,3837,1340],{"class":683},[666,3839,739],{"class":687},[666,3841,3842],{"class":683}," set",[666,3844,1353],{"class":687},[666,3846,1356],{"class":687},[666,3848,3849],{"class":691}," useProtoMap",[666,3851,695],{"class":704},[666,3853,2035],{"class":683},[666,3855,739],{"class":687},[666,3857,711],{"class":687},[666,3859,3860],{"class":714},"feature-settings",[666,3862,718],{"class":687},[666,3864,739],{"class":687},[666,3866,969],{"class":687},[666,3868,3869,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3897,3899,3901,3903,3905,3907],{"class":668,"line":830},[666,3870,3871],{"class":704},"    pinned",[666,3873,708],{"class":687},[666,3875,3238],{"class":687},[666,3877,1748],{"class":704},[666,3879,708],{"class":687},[666,3881,711],{"class":687},[666,3883,1195],{"class":714},[666,3885,718],{"class":687},[666,3887,739],{"class":687},[666,3889,3209],{"class":704},[666,3891,708],{"class":687},[666,3893,711],{"class":687},[666,3895,3896],{"class":714},"Pinned",[666,3898,718],{"class":687},[666,3900,739],{"class":687},[666,3902,3129],{"class":704},[666,3904,708],{"class":687},[666,3906,1226],{"class":1225},[666,3908,3047],{"class":687},[666,3910,3911,3914,3916,3919,3921,3923,3925,3927,3929,3931,3933,3935,3937,3940,3942,3944,3946,3948,3950,3953,3955],{"class":668,"line":837},[666,3912,3913],{"class":704},"    sortField",[666,3915,708],{"class":687},[666,3917,3918],{"class":687},"  {",[666,3920,1748],{"class":704},[666,3922,708],{"class":687},[666,3924,711],{"class":687},[666,3926,598],{"class":714},[666,3928,718],{"class":687},[666,3930,739],{"class":687},[666,3932,3026],{"class":704},[666,3934,708],{"class":687},[666,3936,711],{"class":687},[666,3938,3939],{"class":714},"Sort field",[666,3941,718],{"class":687},[666,3943,739],{"class":687},[666,3945,3659],{"class":704},[666,3947,708],{"class":687},[666,3949,711],{"class":687},[666,3951,3952],{"class":714},"name",[666,3954,718],{"class":687},[666,3956,3047],{"class":687},[666,3958,3959,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3987,3989,3991,3993,3995,3997,4000,4002],{"class":668,"line":843},[666,3960,3961],{"class":704},"    sortOrder",[666,3963,708],{"class":687},[666,3965,3918],{"class":687},[666,3967,1748],{"class":704},[666,3969,708],{"class":687},[666,3971,711],{"class":687},[666,3973,990],{"class":714},[666,3975,718],{"class":687},[666,3977,739],{"class":687},[666,3979,3209],{"class":704},[666,3981,708],{"class":687},[666,3983,711],{"class":687},[666,3985,3986],{"class":714},"Order",[666,3988,718],{"class":687},[666,3990,739],{"class":687},[666,3992,1015],{"class":704},[666,3994,708],{"class":687},[666,3996,711],{"class":687},[666,3998,3999],{"class":714},"asc",[666,4001,718],{"class":687},[666,4003,721],{"class":687},[666,4005,4006,4009,4011,4013,4015,4017,4019,4021,4023,4026,4028,4030],{"class":668,"line":859},[666,4007,4008],{"class":704},"                  options",[666,4010,708],{"class":687},[666,4012,1036],{"class":704},[666,4014,718],{"class":687},[666,4016,3999],{"class":714},[666,4018,718],{"class":687},[666,4020,739],{"class":687},[666,4022,711],{"class":687},[666,4024,4025],{"class":714},"desc",[666,4027,718],{"class":687},[666,4029,3181],{"class":704},[666,4031,818],{"class":687},[666,4033,4034,4036],{"class":668,"line":874},[666,4035,1390],{"class":687},[666,4037,827],{"class":704},[666,4039,4040],{"class":668,"line":887},[666,4041,834],{"emptyLinePlaceholder":833},[666,4043,4044],{"class":668,"line":1171},[666,4045,4046],{"class":672},"  \u002F\u002F Y.Array for a list\n",[666,4048,4049,4051,4054,4056,4058,4061,4064,4066,4068,4071,4073,4075,4077,4080],{"class":668,"line":1176},[666,4050,1335],{"class":679},[666,4052,4053],{"class":683}," bookmarks",[666,4055,1356],{"class":687},[666,4057,1927],{"class":691},[666,4059,4060],{"class":687},"\u003C{",[666,4062,4063],{"class":704}," url",[666,4065,708],{"class":687},[666,4067,1858],{"class":1857},[666,4069,4070],{"class":687},";",[666,4072,3209],{"class":704},[666,4074,708],{"class":687},[666,4076,1858],{"class":1857},[666,4078,4079],{"class":687}," }>",[666,4081,4082],{"class":704},"(\n",[666,4084,4085,4088,4090,4092,4095,4097,4099],{"class":668,"line":1186},[666,4086,4087],{"class":683},"    doc",[666,4089,739],{"class":687},[666,4091,711],{"class":687},[666,4093,4094],{"class":714},"bookmarks",[666,4096,718],{"class":687},[666,4098,739],{"class":687},[666,4100,969],{"class":687},[666,4102,4103,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124],{"class":668,"line":1202},[666,4104,4105],{"class":704},"      defaults",[666,4107,708],{"class":687},[666,4109,812],{"class":687},[666,4111,4063],{"class":704},[666,4113,708],{"class":687},[666,4115,2067],{"class":687},[666,4117,739],{"class":687},[666,4119,3209],{"class":704},[666,4121,708],{"class":687},[666,4123,2067],{"class":687},[666,4125,3047],{"class":687},[666,4127,4128],{"class":668,"line":1218},[666,4129,1070],{"class":687},[666,4131,4132],{"class":668,"line":1231},[666,4133,4134],{"class":704},"  )\n",[666,4136,4137],{"class":668,"line":1236},[666,4138,834],{"emptyLinePlaceholder":833},[666,4140,4141,4143,4145,4147,4149,4151,4153,4155],{"class":668,"line":1246},[666,4142,1403],{"class":1317},[666,4144,812],{"class":687},[666,4146,1345],{"class":683},[666,4148,739],{"class":687},[666,4150,1340],{"class":683},[666,4152,739],{"class":687},[666,4154,4053],{"class":683},[666,4156,2339],{"class":687},[666,4158,4159],{"class":668,"line":1262},[666,4160,1502],{"class":687},[560,4162,4163,4164,4167],{},"This gives you two ",[569,4165,4166],{},"Ref","-backed fields and a CRUD list — all persisted to IndexedDB and synced across tabs — without any schema boilerplate or component rendering.",[560,4169,4170,4171,4173,4174,4177,4178,4181,4182,4184,4185,4188,4189,4191],{},"If you pass ",[569,4172,3463],{}," and ",[569,4175,4176],{},"migrations"," to ",[569,4179,4180],{},"useProtoMap"," directly, pass the doc's ",[569,4183,1619],{}," too (",[569,4186,4187],{},"useProtoMap(doc, key, fields, { version, migrations, isReady })",") so the migrations run on the stored data once IndexedDB has loaded it. ",[569,4190,415],{}," does this for you.",[577,4193,4195],{"id":4194},"disabling-server-sync-for-purely-local-stores","Disabling server sync for purely local stores",[560,4197,4198],{},"For preferences, UI state, or any data that should stay on-device:",[593,4200,4202],{"className":660,"code":4201,"language":662,"meta":601,"style":601},"\u002F\u002F Local-only — no HTTP calls, no server dependency\nconst { state, isReady } = usePrototype(schema, { disableSync: true })\n",[569,4203,4204,4209],{"__ignoreMap":601},[666,4205,4206],{"class":668,"line":669},[666,4207,4208],{"class":672},"\u002F\u002F Local-only — no HTTP calls, no server dependency\n",[666,4210,4211,4213,4215,4217,4219,4221,4223,4225,4227,4230,4232,4234,4237,4239,4241,4243],{"class":668,"line":676},[666,4212,680],{"class":679},[666,4214,812],{"class":687},[666,4216,1340],{"class":683},[666,4218,739],{"class":687},[666,4220,1560],{"class":683},[666,4222,824],{"class":687},[666,4224,1356],{"class":687},[666,4226,1359],{"class":691},[666,4228,4229],{"class":683},"(schema",[666,4231,739],{"class":687},[666,4233,812],{"class":687},[666,4235,4236],{"class":704}," disableSync",[666,4238,708],{"class":687},[666,4240,1379],{"class":1225},[666,4242,1353],{"class":687},[666,4244,827],{"class":683},[560,4246,4247,4248,708],{},"Or configure it at module level in ",[569,4249,4250],{},"nuxt.config.ts",[593,4252,4254],{"className":660,"code":4253,"language":662,"meta":601,"style":601},"export default defineNuxtConfig({\n  protokit: {\n    serverSync: false, \u002F\u002F all documents are local-only\n  },\n})\n",[569,4255,4256,4269,4278,4292,4296],{"__ignoreMap":601},[666,4257,4258,4260,4262,4265,4267],{"class":668,"line":669},[666,4259,1318],{"class":1317},[666,4261,3659],{"class":1317},[666,4263,4264],{"class":691}," defineNuxtConfig",[666,4266,695],{"class":683},[666,4268,698],{"class":687},[666,4270,4271,4274,4276],{"class":668,"line":676},[666,4272,4273],{"class":704},"  protokit",[666,4275,708],{"class":687},[666,4277,969],{"class":687},[666,4279,4280,4283,4285,4287,4289],{"class":668,"line":701},[666,4281,4282],{"class":704},"    serverSync",[666,4284,708],{"class":687},[666,4286,1226],{"class":1225},[666,4288,739],{"class":687},[666,4290,4291],{"class":672}," \u002F\u002F all documents are local-only\n",[666,4293,4294],{"class":668,"line":724},[666,4295,1299],{"class":687},[666,4297,4298,4300],{"class":668,"line":745},[666,4299,824],{"class":687},[666,4301,827],{"class":683},[577,4303,4305],{"id":4304},"useprototext-is-not-part-of-useprototype","useProtoText is not part of usePrototype",[560,4307,4308,4311,4312,4314,4315,4317,4318,4173,4320,4322,4323,4326,4327,4330],{},[569,4309,4310],{},"useProtoText"," sits outside the ",[569,4313,415],{}," hierarchy because it targets ",[569,4316,2950],{}," (character-by-character CRDT), whereas ",[569,4319,4180],{},[569,4321,1817],{}," use ",[569,4324,4325],{},"Y.Map","\u002F",[569,4328,4329],{},"Y.Array",". Use it directly:",[593,4332,4334],{"className":660,"code":4333,"language":662,"meta":601,"style":601},"const { doc, isReady } = useProtoDoc('my-doc')\nconst { text } = useProtoText(doc, 'note-content')\n\u002F\u002F text is a Ref\u003Cstring> — synced bidirectionally with Y.Text\n",[569,4335,4336,4365,4394],{"__ignoreMap":601},[666,4337,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4361,4363],{"class":668,"line":669},[666,4339,680],{"class":679},[666,4341,812],{"class":687},[666,4343,1877],{"class":683},[666,4345,739],{"class":687},[666,4347,1560],{"class":683},[666,4349,824],{"class":687},[666,4351,1356],{"class":687},[666,4353,1888],{"class":691},[666,4355,695],{"class":683},[666,4357,718],{"class":687},[666,4359,4360],{"class":714},"my-doc",[666,4362,718],{"class":687},[666,4364,827],{"class":683},[666,4366,4367,4369,4371,4374,4376,4378,4380,4383,4385,4387,4390,4392],{"class":668,"line":676},[666,4368,680],{"class":679},[666,4370,812],{"class":687},[666,4372,4373],{"class":683}," text ",[666,4375,824],{"class":687},[666,4377,1356],{"class":687},[666,4379,2781],{"class":691},[666,4381,4382],{"class":683},"(doc",[666,4384,739],{"class":687},[666,4386,711],{"class":687},[666,4388,4389],{"class":714},"note-content",[666,4391,718],{"class":687},[666,4393,827],{"class":683},[666,4395,4396],{"class":668,"line":701},[666,4397,4398],{"class":672},"\u002F\u002F text is a Ref\u003Cstring> — synced bidirectionally with Y.Text\n",[560,4400,4401,4403,4404,4407],{},[569,4402,4310],{}," is especially useful when integrating with rich text editors (TipTap, Milkdown, CodeMirror) that also speak Y.js — pass ",[569,4405,4406],{},"ytext"," directly to the editor's Y.js provider.",[577,4409,4411],{"id":4410},"summary-what-you-get-for-free-headlessly","Summary: what you get for free, headlessly",[4413,4414,4415,4431],"table",{},[4416,4417,4418],"thead",{},[4419,4420,4421,4425,4428],"tr",{},[4422,4423,4424],"th",{},"Feature",[4422,4426,4427],{},"Composable",[4422,4429,4430],{},"Opt-out",[4432,4433,4434,4449,4463,4477,4489,4502,4513,4525,4536,4548,4559,4571],"tbody",{},[4419,4435,4436,4440,4444],{},[4437,4438,4439],"td",{},"IndexedDB persistence",[4437,4441,4442],{},[569,4443,419],{},[4437,4445,4446],{},[569,4447,4448],{},"enableIndexedDB: false",[4419,4450,4451,4454,4458],{},[4437,4452,4453],{},"Cross-tab sync via BroadcastChannel",[4437,4455,4456],{},[569,4457,419],{},[4437,4459,4460],{},[569,4461,4462],{},"enableBroadcast: false",[4419,4464,4465,4468,4472],{},[4437,4466,4467],{},"Server sync (push + pull)",[4437,4469,4470],{},[569,4471,419],{},[4437,4473,4474],{},[569,4475,4476],{},"disableSync: true",[4419,4478,4479,4482,4486],{},[4437,4480,4481],{},"Schema-driven field defaults",[4437,4483,4484],{},[569,4485,4180],{},[4437,4487,4488],{},"—",[4419,4490,4491,4494,4500],{},[4437,4492,4493],{},"Schema migrations",[4437,4495,4496,571,4498],{},[569,4497,4180],{},[569,4499,1817],{},[4437,4501,4488],{},[4419,4503,4504,4507,4511],{},[4437,4505,4506],{},"Reactive CRUD list",[4437,4508,4509],{},[569,4510,1817],{},[4437,4512,4488],{},[4419,4514,4515,4518,4523],{},[4437,4516,4517],{},"Draft persistence",[4437,4519,4520],{},[569,4521,4522],{},"useProtoDraft",[4437,4524,4488],{},[4419,4526,4527,4530,4534],{},[4437,4528,4529],{},"Reactive text",[4437,4531,4532],{},[569,4533,4310],{},[4437,4535,4488],{},[4419,4537,4538,4541,4546],{},[4437,4539,4540],{},"Reactive derived values",[4437,4542,4543],{},[569,4544,4545],{},"useProtoDerived",[4437,4547,4488],{},[4419,4549,4550,4553,4557],{},[4437,4551,4552],{},"Corruption recovery",[4437,4554,4555],{},[569,4556,419],{},[4437,4558,4488],{},[4419,4560,4561,4564,4569],{},[4437,4562,4563],{},"Namespace \u002F per-user isolation",[4437,4565,4566,4568],{},[569,4567,415],{}," options",[4437,4570,4488],{},[4419,4572,4573,4576,4580],{},[4437,4574,4575],{},"At-rest encryption (AES-GCM)",[4437,4577,4578],{},[569,4579,419],{},[4437,4581,4488],{},[4583,4584,4585],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":601,"searchDepth":676,"depth":676,"links":4587},[4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599],{"id":579,"depth":676,"text":580},{"id":607,"depth":676,"text":608},{"id":630,"depth":676,"text":631},{"id":909,"depth":676,"text":910},{"id":1810,"depth":676,"text":1811},{"id":2676,"depth":676,"text":2677},{"id":2954,"depth":676,"text":2955},{"id":3456,"depth":676,"text":3457},{"id":3726,"depth":676,"text":3727},{"id":4194,"depth":676,"text":4195},{"id":4304,"depth":676,"text":4305},{"id":4410,"depth":676,"text":4411},"Use protokit as a pure storage layer — Y.js IndexedDB persistence, BroadcastChannel tab sync, schema migrations, and optional server sync — without rendering any built-in components.","md",null,{},{"title":499},{"title":499,"description":4600},"o5Zv78hQT5uUbPpnv778mqAaX51OQdSFmUfmxZK-PPA",[4608,4610],{"title":495,"path":496,"stem":497,"description":4609,"children":-1},"Extend role-based permission guards with reactive application state — project status, ownership, quotas, and other runtime conditions — using Vue's computed().",{"title":5,"path":503,"stem":504,"description":4611,"children":-1},"Install the nuxt-protokit Claude Code skill plugin to give Claude accurate API knowledge for building prototypes faster.",1792254332735]