[{"data":1,"prerenderedAt":1727},["ShallowReactive",2],{"navigation-landing-en":3,"navigation-nuxt-auto-en":180,"navigation-nuxt-protokit-en":338,"/docs/nuxt-protokit/components/proto-tool-en":444,"/docs/nuxt-protokit/components/proto-tool-surround-en":1722},[4,8,13,28,41,51,64,77,94,110,134,150,157,172],{"title":5,"path":6,"stem":7},"Overview","/docs/landing","0.docs/1.landing/001.index",{"title":9,"path":10,"stem":11,"badge":12},"Built-in Features","/docs/landing/built-in-features","0.docs/1.landing/002.built-in-features","New",{"title":14,"path":15,"stem":16,"children":17,"icon":27},"Content Foundation","/docs/landing/content","0.docs/1.landing/02.content/1.index",[18,19,23],{"title":5,"path":15,"stem":16},{"title":20,"path":21,"stem":22},"Details","/docs/landing/content/details","0.docs/1.landing/02.content/2.details",{"title":24,"path":25,"stem":26},"Technical","/docs/landing/content/technical","0.docs/1.landing/02.content/4.technical","i-heroicons-document-text",{"title":29,"path":30,"stem":31,"children":32,"icon":40},"Regional Content","/docs/landing/regional","0.docs/1.landing/03.regional/1.index",[33,34,37],{"title":5,"path":30,"stem":31},{"title":20,"path":35,"stem":36},"/docs/landing/regional/details","0.docs/1.landing/03.regional/2.details",{"title":24,"path":38,"stem":39},"/docs/landing/regional/technical","0.docs/1.landing/03.regional/4.technical","i-heroicons-globe-alt",{"title":42,"path":43,"stem":44,"children":45,"icon":50},"Multi-language","/docs/landing/multilang","0.docs/1.landing/04.multilang/1.index",[46,47],{"title":5,"path":43,"stem":44},{"title":20,"path":48,"stem":49},"/docs/landing/multilang/details","0.docs/1.landing/04.multilang/2.details","i-heroicons-language",{"title":52,"path":53,"stem":54,"children":55,"icon":63},"Blog","/docs/landing/blog","0.docs/1.landing/05.blog/1.index",[56,57,60],{"title":5,"path":53,"stem":54},{"title":20,"path":58,"stem":59},"/docs/landing/blog/details","0.docs/1.landing/05.blog/2.details",{"title":24,"path":61,"stem":62},"/docs/landing/blog/technical","0.docs/1.landing/05.blog/4.technical","i-heroicons-pencil-square",{"title":65,"path":66,"stem":67,"children":68,"icon":76},"Documentation","/docs/landing/docs","0.docs/1.landing/06.docs/1.index",[69,70,73],{"title":5,"path":66,"stem":67},{"title":20,"path":71,"stem":72},"/docs/landing/docs/details","0.docs/1.landing/06.docs/2.details",{"title":24,"path":74,"stem":75},"/docs/landing/docs/technical","0.docs/1.landing/06.docs/4.technical","i-heroicons-book-open",{"title":78,"path":79,"stem":80,"children":81,"icon":93},"Forms","/docs/landing/forms","0.docs/1.landing/07.forms/1.index",[82,83,86,90],{"title":5,"path":79,"stem":80},{"title":20,"path":84,"stem":85},"/docs/landing/forms/details","0.docs/1.landing/07.forms/2.details",{"title":87,"path":88,"stem":89},"Admin","/docs/landing/forms/admin","0.docs/1.landing/07.forms/3.admin",{"title":24,"path":91,"stem":92},"/docs/landing/forms/technical","0.docs/1.landing/07.forms/4.technical","i-heroicons-clipboard-document-list",{"title":95,"path":96,"stem":97,"children":98,"icon":109},"Email","/docs/landing/email","0.docs/1.landing/08.email/1.index",[99,100,103,106],{"title":5,"path":96,"stem":97},{"title":20,"path":101,"stem":102},"/docs/landing/email/details","0.docs/1.landing/08.email/2.details",{"title":87,"path":104,"stem":105},"/docs/landing/email/admin","0.docs/1.landing/08.email/3.admin",{"title":24,"path":107,"stem":108},"/docs/landing/email/technical","0.docs/1.landing/08.email/4.technical","i-heroicons-envelope",{"title":111,"path":112,"stem":113,"children":114,"icon":133},"Feedback Platform","/docs/landing/feedback","0.docs/1.landing/09.feedback/1.index",[115,116,119,122,125,129],{"title":5,"path":112,"stem":113},{"title":20,"path":117,"stem":118},"/docs/landing/feedback/details","0.docs/1.landing/09.feedback/2.details",{"title":87,"path":120,"stem":121},"/docs/landing/feedback/admin","0.docs/1.landing/09.feedback/3.admin",{"title":24,"path":123,"stem":124},"/docs/landing/feedback/technical","0.docs/1.landing/09.feedback/4.technical",{"title":126,"path":127,"stem":128},"Compare vs SaaS","/docs/landing/feedback/compare","0.docs/1.landing/09.feedback/5.compare",{"title":130,"path":131,"stem":132},"FAQ","/docs/landing/feedback/faq","0.docs/1.landing/09.feedback/6.faq","i-heroicons-chat-bubble-left-right",{"title":135,"path":136,"stem":137,"children":138,"icon":149},"Storage","/docs/landing/storage","0.docs/1.landing/10.storage/1.index",[139,140,143,146],{"title":5,"path":136,"stem":137},{"title":20,"path":141,"stem":142},"/docs/landing/storage/details","0.docs/1.landing/10.storage/2.details",{"title":87,"path":144,"stem":145},"/docs/landing/storage/admin","0.docs/1.landing/10.storage/3.admin",{"title":24,"path":147,"stem":148},"/docs/landing/storage/technical","0.docs/1.landing/10.storage/4.technical","i-heroicons-circle-stack",{"title":151,"path":152,"stem":153,"children":154,"icon":156},"Offline First","/docs/landing/offline-first","0.docs/1.landing/11.offline-first/1.index",[155],{"title":151,"path":152,"stem":153},"i-heroicons-users",{"title":158,"path":159,"stem":160,"children":161,"icon":156},"Yjs Sync","/docs/landing/yjs-sync","0.docs/1.landing/12.yjs-sync/1.index",[162,163,166,169],{"title":5,"path":159,"stem":160},{"title":20,"path":164,"stem":165},"/docs/landing/yjs-sync/details","0.docs/1.landing/12.yjs-sync/2.details",{"title":87,"path":167,"stem":168},"/docs/landing/yjs-sync/admin","0.docs/1.landing/12.yjs-sync/3.admin",{"title":24,"path":170,"stem":171},"/docs/landing/yjs-sync/technical","0.docs/1.landing/12.yjs-sync/4.technical",{"title":173,"path":174,"stem":175,"children":176,"badge":178,"icon":179},"Newsletter","/docs/landing/newsletter","0.docs/1.landing/13.newsletter/index",[177],{"title":173,"path":174,"stem":175,"badge":178},"Coming Soon","i-lucide-send",[181,184,202,298],{"title":5,"path":182,"stem":183},"/docs/nuxt-auto","0.docs/3.nuxt-auto/index",{"title":185,"path":186,"stem":187,"children":188,"page":201},"Getting Started","/docs/nuxt-auto/getting-started","0.docs/3.nuxt-auto/1.getting-started",[189,193,197],{"title":190,"path":191,"stem":192},"Introduction","/docs/nuxt-auto/getting-started/introduction","0.docs/3.nuxt-auto/1.getting-started/1.introduction",{"title":194,"path":195,"stem":196},"Installation","/docs/nuxt-auto/getting-started/installation","0.docs/3.nuxt-auto/1.getting-started/2.installation",{"title":198,"path":199,"stem":200},"Quick Start","/docs/nuxt-auto/getting-started/quick-start","0.docs/3.nuxt-auto/1.getting-started/3.quick-start",false,{"title":203,"path":204,"stem":205,"children":206,"page":201},"Auto API","/docs/nuxt-auto/auto-api","0.docs/3.nuxt-auto/2.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],{"title":185,"path":208,"stem":209},"/docs/nuxt-auto/auto-api/getting-started","0.docs/3.nuxt-auto/2.auto-api/1.getting-started",{"title":211,"path":212,"stem":213},"Aggregations","/docs/nuxt-auto/auto-api/aggregations","0.docs/3.nuxt-auto/2.auto-api/10.aggregations",{"title":215,"path":216,"stem":217},"Lifecycle Hooks","/docs/nuxt-auto/auto-api/lifecycle-hooks","0.docs/3.nuxt-auto/2.auto-api/11.lifecycle-hooks",{"title":219,"path":220,"stem":221},"Many-to-Many (M2M) Relationships","/docs/nuxt-auto/auto-api/m2m-relationships","0.docs/3.nuxt-auto/2.auto-api/12.m2m-relationships",{"title":223,"path":224,"stem":225},"Plugin System","/docs/nuxt-auto/auto-api/plugin-system","0.docs/3.nuxt-auto/2.auto-api/13.plugin-system",{"title":227,"path":228,"stem":229},"Database Adapters","/docs/nuxt-auto/auto-api/database-adapters","0.docs/3.nuxt-auto/2.auto-api/14.database-adapters",{"title":231,"path":232,"stem":233},"Custom Endpoints","/docs/nuxt-auto/auto-api/custom-endpoints","0.docs/3.nuxt-auto/2.auto-api/15.custom-endpoints",{"title":235,"path":236,"stem":237},"Multi-Tenancy","/docs/nuxt-auto/auto-api/multi-tenancy","0.docs/3.nuxt-auto/2.auto-api/16.multi-tenancy",{"title":239,"path":240,"stem":241},"Validation","/docs/nuxt-auto/auto-api/validation","0.docs/3.nuxt-auto/2.auto-api/2.validation",{"title":243,"path":244,"stem":245},"Rate Limiting","/docs/nuxt-auto/auto-api/rate-limiting","0.docs/3.nuxt-auto/2.auto-api/20.rate-limiting",{"title":247,"path":248,"stem":249},"Request Metadata Plugin","/docs/nuxt-auto/auto-api/request-metadata","0.docs/3.nuxt-auto/2.auto-api/21.request-metadata",{"title":251,"path":252,"stem":253},"Plugin Catalog","/docs/nuxt-auto/auto-api/plugin-catalog","0.docs/3.nuxt-auto/2.auto-api/22.plugin-catalog",{"title":255,"path":256,"stem":257},"Handler Overrides","/docs/nuxt-auto/auto-api/handler-overrides","0.docs/3.nuxt-auto/2.auto-api/3.handler-overrides",{"title":259,"path":260,"stem":261},"Cloudflare D1","/docs/nuxt-auto/auto-api/cloudflare-d1","0.docs/3.nuxt-auto/2.auto-api/30.cloudflare-d1",{"title":263,"path":264,"stem":265},"SQLite to D1 Migration","/docs/nuxt-auto/auto-api/migration-sqlite-d1","0.docs/3.nuxt-auto/2.auto-api/31.migration-sqlite-d1",{"title":267,"path":268,"stem":269},"Frontend Composables","/docs/nuxt-auto/auto-api/frontend-composables","0.docs/3.nuxt-auto/2.auto-api/32.frontend-composables",{"title":271,"path":272,"stem":273},"Testing","/docs/nuxt-auto/auto-api/testing","0.docs/3.nuxt-auto/2.auto-api/33.testing",{"title":275,"path":276,"stem":277},"Pagination","/docs/nuxt-auto/auto-api/pagination","0.docs/3.nuxt-auto/2.auto-api/4.pagination",{"title":279,"path":280,"stem":281},"Soft Deletes","/docs/nuxt-auto/auto-api/soft-deletes","0.docs/3.nuxt-auto/2.auto-api/5.soft-deletes",{"title":283,"path":284,"stem":285},"Authentication & Authorization","/docs/nuxt-auto/auto-api/authentication-authorization","0.docs/3.nuxt-auto/2.auto-api/6.authentication-authorization",{"title":287,"path":288,"stem":289},"Better-Auth Integration","/docs/nuxt-auto/auto-api/better-auth","0.docs/3.nuxt-auto/2.auto-api/7.better-auth",{"title":291,"path":292,"stem":293},"Nested Relations","/docs/nuxt-auto/auto-api/nested-relationships","0.docs/3.nuxt-auto/2.auto-api/8.nested-relationships",{"title":295,"path":296,"stem":297},"Bulk Operations","/docs/nuxt-auto/auto-api/bulk-operations","0.docs/3.nuxt-auto/2.auto-api/9.bulk-operations",{"title":299,"path":300,"stem":301,"children":302,"page":201},"Auto Admin","/docs/nuxt-auto/auto-admin","0.docs/3.nuxt-auto/3.auto-admin",[303,306,310,314,318,322,326,330,334],{"title":185,"path":304,"stem":305},"/docs/nuxt-auto/auto-admin/getting-started","0.docs/3.nuxt-auto/3.auto-admin/1.getting-started",{"title":307,"path":308,"stem":309},"Configuration & Theming","/docs/nuxt-auto/auto-admin/configuration-theming","0.docs/3.nuxt-auto/3.auto-admin/2.configuration-theming",{"title":311,"path":312,"stem":313},"Resource Configuration","/docs/nuxt-auto/auto-admin/resource-configuration","0.docs/3.nuxt-auto/3.auto-admin/3.resource-configuration",{"title":315,"path":316,"stem":317},"Form Fields & Widgets","/docs/nuxt-auto/auto-admin/form-fields-widgets","0.docs/3.nuxt-auto/3.auto-admin/4.form-fields-widgets",{"title":319,"path":320,"stem":321},"Permissions","/docs/nuxt-auto/auto-admin/permissions","0.docs/3.nuxt-auto/3.auto-admin/5.permissions",{"title":323,"path":324,"stem":325},"Custom Pages","/docs/nuxt-auto/auto-admin/custom-pages","0.docs/3.nuxt-auto/3.auto-admin/6.custom-pages",{"title":327,"path":328,"stem":329},"M2M Relationships","/docs/nuxt-auto/auto-admin/m2m-relationships","0.docs/3.nuxt-auto/3.auto-admin/7.m2m-relationships",{"title":331,"path":332,"stem":333},"Custom Actions","/docs/nuxt-auto/auto-admin/custom-actions","0.docs/3.nuxt-auto/3.auto-admin/8.custom-actions",{"title":335,"path":336,"stem":337},"Composables","/docs/nuxt-auto/auto-admin/composables","0.docs/3.nuxt-auto/3.auto-admin/9.composables",[339,342,355,382,400,415,425],{"title":5,"path":340,"stem":341},"/docs/nuxt-protokit","0.docs/4.nuxt-protokit/index",{"title":185,"path":343,"stem":344,"children":345,"icon":354},"/docs/nuxt-protokit/getting-started","0.docs/4.nuxt-protokit/1.getting-started/1.index",[346,347,351],{"title":190,"path":343,"stem":344},{"title":348,"path":349,"stem":350},"Core Concepts","/docs/nuxt-protokit/getting-started/concepts","0.docs/4.nuxt-protokit/1.getting-started/2.concepts",{"title":198,"path":352,"stem":353},"/docs/nuxt-protokit/getting-started/quick-start","0.docs/4.nuxt-protokit/1.getting-started/3.quick-start","i-lucide-rocket",{"title":356,"path":357,"stem":358,"children":359,"icon":381},"Schemas","/docs/nuxt-protokit/schemas","0.docs/4.nuxt-protokit/2.schemas/1.index",[360,361,365,369,373,377],{"title":5,"path":357,"stem":358},{"title":362,"path":363,"stem":364},"Field Types","/docs/nuxt-protokit/schemas/fields","0.docs/4.nuxt-protokit/2.schemas/2.fields",{"title":366,"path":367,"stem":368},"Collections","/docs/nuxt-protokit/schemas/collections","0.docs/4.nuxt-protokit/2.schemas/3.collections",{"title":370,"path":371,"stem":372},"Derived & Computed","/docs/nuxt-protokit/schemas/derived-computed","0.docs/4.nuxt-protokit/2.schemas/4.derived-computed",{"title":374,"path":375,"stem":376},"Connections","/docs/nuxt-protokit/schemas/connections","0.docs/4.nuxt-protokit/2.schemas/5.connections",{"title":378,"path":379,"stem":380},"Visualizations & Layouts","/docs/nuxt-protokit/schemas/visualizations","0.docs/4.nuxt-protokit/2.schemas/6.visualizations","i-lucide-file-code",{"title":335,"path":383,"stem":384,"children":385,"icon":399},"/docs/nuxt-protokit/composables","0.docs/4.nuxt-protokit/3.composables/1.index",[386,387,391,395],{"title":5,"path":383,"stem":384},{"title":388,"path":389,"stem":390},"usePrototype","/docs/nuxt-protokit/composables/use-prototype","0.docs/4.nuxt-protokit/3.composables/2.use-prototype",{"title":392,"path":393,"stem":394},"useProtoDoc","/docs/nuxt-protokit/composables/use-proto-doc","0.docs/4.nuxt-protokit/3.composables/3.use-proto-doc",{"title":396,"path":397,"stem":398},"useProtoCollection","/docs/nuxt-protokit/composables/use-proto-collection","0.docs/4.nuxt-protokit/3.composables/4.use-proto-collection","i-lucide-layers",{"title":401,"path":402,"stem":403,"children":404,"icon":414},"Components","/docs/nuxt-protokit/components","0.docs/4.nuxt-protokit/4.components/1.index",[405,406,410],{"title":5,"path":402,"stem":403},{"title":407,"path":408,"stem":409},"ProtoTool","/docs/nuxt-protokit/components/proto-tool","0.docs/4.nuxt-protokit/4.components/2.proto-tool",{"title":411,"path":412,"stem":413},"ProtoCrudModal","/docs/nuxt-protokit/components/proto-crud-modal","0.docs/4.nuxt-protokit/4.components/3.proto-crud-modal","i-lucide-puzzle",{"title":151,"path":416,"stem":417,"children":418,"icon":424},"/docs/nuxt-protokit/offline-first","0.docs/4.nuxt-protokit/5.offline-first/1.index",[419,420],{"title":151,"path":416,"stem":417},{"title":421,"path":422,"stem":423},"Corruption Recovery","/docs/nuxt-protokit/offline-first/corruption-recovery","0.docs/4.nuxt-protokit/5.offline-first/2.corruption-recovery","i-lucide-wifi-off",{"title":426,"icon":427,"path":428,"stem":429,"children":430},"Advanced","i-lucide-graduation-cap","/docs/nuxt-protokit/advanced","0.docs/4.nuxt-protokit/6.advanced/1.index",[431,432,436,440],{"title":5,"path":428,"stem":429},{"title":433,"path":434,"stem":435},"Multi-Tool Apps","/docs/nuxt-protokit/advanced/building-a-toolkit","0.docs/4.nuxt-protokit/6.advanced/1.building-a-toolkit",{"title":437,"path":438,"stem":439},"Schema Patterns","/docs/nuxt-protokit/advanced/custom-schema-patterns","0.docs/4.nuxt-protokit/6.advanced/2.custom-schema-patterns",{"title":441,"path":442,"stem":443},"Custom Fields & Viz","/docs/nuxt-protokit/advanced/extensibility","0.docs/4.nuxt-protokit/6.advanced/3.extensibility",{"page":445,"fallbackPage":1717},{"id":446,"title":407,"body":447,"description":1715,"extension":1716,"links":1717,"meta":1718,"navigation":1719,"ogImage":1717,"path":408,"seo":1720,"stem":409,"__hash__":1721},"nuxt_protokit/0.docs/4.nuxt-protokit/4.components/2.proto-tool.md",{"type":448,"value":449,"toc":1703},"minimark",[450,457,465,470,575,579,662,666,821,825,835,867,870,883,887,892,973,987,991,1198,1209,1215,1229,1289,1296,1302,1699],[451,452,454],"h1",{"id":453},"prototool",[455,456,407],"code",{},[458,459,460,461,464],"p",{},"The main entry point component. Given a ",[455,462,463],{},"PrototypeSchema",", it renders the complete tool UI: form, results, visualizations, collections, and action toolbar. All Y.js persistence is handled internally.",[466,467,469],"h2",{"id":468},"props","Props",[471,472,473,492],"table",{},[474,475,476],"thead",{},[477,478,479,483,486,489],"tr",{},[480,481,482],"th",{},"Prop",[480,484,485],{},"Type",[480,487,488],{},"Default",[480,490,491],{},"Description",[493,494,495,513,531,551],"tbody",{},[477,496,497,503,507,510],{},[498,499,500],"td",{},[455,501,502],{},"schema",[498,504,505],{},[455,506,463],{},[498,508,509],{},"required",[498,511,512],{},"The tool schema object",[477,514,515,520,525,528],{},[498,516,517],{},[455,518,519],{},"doc",[498,521,522],{},[455,523,524],{},"Y.Doc",[498,526,527],{},"—",[498,529,530],{},"Pass an existing Y.Doc to share state with another component",[477,532,533,538,543,548],{},[498,534,535],{},[455,536,537],{},"docKey",[498,539,540],{},[455,541,542],{},"string",[498,544,545],{},[455,546,547],{},"schema.key",[498,549,550],{},"Y.js document key — override to run multiple independent instances",[477,552,553,558,563,568],{},[498,554,555],{},[455,556,557],{},"disableSync",[498,559,560],{},[455,561,562],{},"boolean",[498,564,565],{},[455,566,567],{},"false",[498,569,570,571,574],{},"Force local-only mode for this tool, regardless of the global ",[455,572,573],{},"protokit.serverSync"," config",[466,576,578],{"id":577},"basic-usage","Basic usage",[580,581,586],"pre",{"className":582,"code":583,"language":584,"meta":585,"style":585},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n  \u003CClientOnly>\n    \u003CProtoTool :schema=\"breakEvenSchema\" />\n  \u003C/ClientOnly>\n\u003C/template>\n","vue","",[455,587,588,604,615,642,652],{"__ignoreMap":585},[589,590,593,597,601],"span",{"class":591,"line":592},"line",1,[589,594,596],{"class":595},"sMK4o","\u003C",[589,598,600],{"class":599},"swJcz","template",[589,602,603],{"class":595},">\n",[589,605,607,610,613],{"class":591,"line":606},2,[589,608,609],{"class":595},"  \u003C",[589,611,612],{"class":599},"ClientOnly",[589,614,603],{"class":595},[589,616,618,621,623,627,630,633,637,639],{"class":591,"line":617},3,[589,619,620],{"class":595},"    \u003C",[589,622,407],{"class":599},[589,624,626],{"class":625},"spNyl"," :schema",[589,628,629],{"class":595},"=",[589,631,632],{"class":595},"\"",[589,634,636],{"class":635},"sfazB","breakEvenSchema",[589,638,632],{"class":595},[589,640,641],{"class":595}," />\n",[589,643,645,648,650],{"class":591,"line":644},4,[589,646,647],{"class":595},"  \u003C/",[589,649,612],{"class":599},[589,651,603],{"class":595},[589,653,655,658,660],{"class":591,"line":654},5,[589,656,657],{"class":595},"\u003C/",[589,659,600],{"class":599},[589,661,603],{"class":595},[466,663,665],{"id":664},"multiple-instances-of-the-same-schema","Multiple instances of the same schema",[580,667,669],{"className":582,"code":668,"language":584,"meta":585,"style":585},"\u003Ctemplate>\n  \u003C!-- Two independent instances with separate storage -->\n  \u003Cdiv class=\"grid grid-cols-2 gap-6\">\n    \u003CClientOnly>\n      \u003CProtoTool :schema=\"breakEvenSchema\" doc-key=\"break-even-optimistic\" />\n    \u003C/ClientOnly>\n    \u003CClientOnly>\n      \u003CProtoTool :schema=\"breakEvenSchema\" doc-key=\"break-even-conservative\" />\n    \u003C/ClientOnly>\n  \u003C/div>\n\u003C/template>\n",[455,670,671,679,685,706,714,745,755,764,794,803,812],{"__ignoreMap":585},[589,672,673,675,677],{"class":591,"line":592},[589,674,596],{"class":595},[589,676,600],{"class":599},[589,678,603],{"class":595},[589,680,681],{"class":591,"line":606},[589,682,684],{"class":683},"sHwdD","  \u003C!-- Two independent instances with separate storage -->\n",[589,686,687,689,692,695,697,699,702,704],{"class":591,"line":617},[589,688,609],{"class":595},[589,690,691],{"class":599},"div",[589,693,694],{"class":625}," class",[589,696,629],{"class":595},[589,698,632],{"class":595},[589,700,701],{"class":635},"grid grid-cols-2 gap-6",[589,703,632],{"class":595},[589,705,603],{"class":595},[589,707,708,710,712],{"class":591,"line":644},[589,709,620],{"class":595},[589,711,612],{"class":599},[589,713,603],{"class":595},[589,715,716,719,721,723,725,727,729,731,734,736,738,741,743],{"class":591,"line":654},[589,717,718],{"class":595},"      \u003C",[589,720,407],{"class":599},[589,722,626],{"class":625},[589,724,629],{"class":595},[589,726,632],{"class":595},[589,728,636],{"class":635},[589,730,632],{"class":595},[589,732,733],{"class":625}," doc-key",[589,735,629],{"class":595},[589,737,632],{"class":595},[589,739,740],{"class":635},"break-even-optimistic",[589,742,632],{"class":595},[589,744,641],{"class":595},[589,746,748,751,753],{"class":591,"line":747},6,[589,749,750],{"class":595},"    \u003C/",[589,752,612],{"class":599},[589,754,603],{"class":595},[589,756,758,760,762],{"class":591,"line":757},7,[589,759,620],{"class":595},[589,761,612],{"class":599},[589,763,603],{"class":595},[589,765,767,769,771,773,775,777,779,781,783,785,787,790,792],{"class":591,"line":766},8,[589,768,718],{"class":595},[589,770,407],{"class":599},[589,772,626],{"class":625},[589,774,629],{"class":595},[589,776,632],{"class":595},[589,778,636],{"class":635},[589,780,632],{"class":595},[589,782,733],{"class":625},[589,784,629],{"class":595},[589,786,632],{"class":595},[589,788,789],{"class":635},"break-even-conservative",[589,791,632],{"class":595},[589,793,641],{"class":595},[589,795,797,799,801],{"class":591,"line":796},9,[589,798,750],{"class":595},[589,800,612],{"class":599},[589,802,603],{"class":595},[589,804,806,808,810],{"class":591,"line":805},10,[589,807,647],{"class":595},[589,809,691],{"class":599},[589,811,603],{"class":595},[589,813,815,817,819],{"class":591,"line":814},11,[589,816,657],{"class":595},[589,818,600],{"class":599},[589,820,603],{"class":595},[466,822,824],{"id":823},"local-only-demo-tools","Local-only / demo tools",[458,826,827,828,831,832,834],{},"Add ",[455,829,830],{},"disable-sync"," to suppress server sync for a specific tool, regardless of the global ",[455,833,573],{}," config. The tool still saves to the user's local IndexedDB — inputs survive page refresh. Only the server push is skipped.",[580,836,838],{"className":582,"code":837,"language":584,"meta":585,"style":585},"\u003C!-- Public demo — persists locally, never pushes to server -->\n\u003CClientOnly>\n  \u003CProtoTool :schema=\"demoSchema\" disable-sync />\n\u003C/ClientOnly>\n",[455,839,840,845,853,859],{"__ignoreMap":585},[589,841,842],{"class":591,"line":592},[589,843,844],{"class":683},"\u003C!-- Public demo — persists locally, never pushes to server -->\n",[589,846,847,849,851],{"class":591,"line":606},[589,848,596],{"class":595},[589,850,612],{"class":599},[589,852,603],{"class":595},[589,854,855],{"class":591,"line":617},[589,856,858],{"class":857},"sTEyZ","  \u003CProtoTool :schema=\"demoSchema\" disable-sync />\n",[589,860,861,863,865],{"class":591,"line":644},[589,862,657],{"class":595},[589,864,612],{"class":599},[589,866,603],{"class":595},[458,868,869],{},"This is the right choice for:",[871,872,873,877,880],"ul",{},[874,875,876],"li",{},"Public marketing pages with embedded demo tools (you don't want every visitor's data on your server)",[874,878,879],{},"Scratch pad tools that are intentionally ephemeral beyond the current browser",[874,881,882],{},"Isolated test instances in development",[466,884,886],{"id":885},"rendering-logic","Rendering logic",[458,888,889,891],{},[455,890,407],{}," renders sections in this order:",[893,894,895,906,915,927,940,950,963],"ol",{},[874,896,897,901,902,905],{},[898,899,900],"strong",{},"Form"," — ",[455,903,904],{},"ProtoForm"," with schema fields or sections",[874,907,908,911,912],{},[898,909,910],{},"Results badge"," — from ",[455,913,914],{},"schema.results.badge",[874,916,917,911,920,923,924],{},[898,918,919],{},"Stats grid",[455,921,922],{},"schema.results.stats"," via ",[455,925,926],{},"ProtoStatGrid",[874,928,929,932,933,936,937],{},[898,930,931],{},"Visualizations"," — one ",[455,934,935],{},"ProtoViz"," per entry in ",[455,938,939],{},"schema.visualizations",[874,941,942,932,944,936,947],{},[898,943,366],{},[455,945,946],{},"ProtoCrudList",[455,948,949],{},"schema.collections",[874,951,952,901,955,958,959,962],{},[898,953,954],{},"Action toolbar",[455,956,957],{},"ProtoActionBar"," if ",[455,960,961],{},"schema.actions"," is defined",[874,964,965,968,969,972],{},[898,966,967],{},"Reset button"," — if ",[455,970,971],{},"showReset"," is true",[458,974,975,976,979,980,982,983,986],{},"If ",[455,977,978],{},"schema.layout"," is defined, ",[455,981,407],{}," delegates entirely to ",[455,984,985],{},"ProtoDashboard",", which respects the custom tab/row/column layout.",[466,988,990],{"id":989},"custom-layout-delegation","Custom layout delegation",[580,992,996],{"className":993,"code":994,"language":995,"meta":585,"style":585},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// When schema.layout is defined:\nconst mySchema = definePrototype({\n  key: 'interviews',\n  layout: {\n    tabs: [\n      { id: 'questions',  label: 'Questions',  … },\n      { id: 'interviews', label: 'Interviews', … },\n      { id: 'patterns',   label: 'Patterns',   … },\n    ]\n  },\n  // rest of schema…\n})\n","typescript",[455,997,998,1003,1023,1043,1053,1063,1103,1138,1174,1179,1184,1189],{"__ignoreMap":585},[589,999,1000],{"class":591,"line":592},[589,1001,1002],{"class":683},"// When schema.layout is defined:\n",[589,1004,1005,1008,1011,1013,1017,1020],{"class":591,"line":606},[589,1006,1007],{"class":625},"const",[589,1009,1010],{"class":857}," mySchema ",[589,1012,629],{"class":595},[589,1014,1016],{"class":1015},"s2Zo4"," definePrototype",[589,1018,1019],{"class":857},"(",[589,1021,1022],{"class":595},"{\n",[589,1024,1025,1028,1031,1034,1037,1040],{"class":591,"line":617},[589,1026,1027],{"class":599},"  key",[589,1029,1030],{"class":595},":",[589,1032,1033],{"class":595}," '",[589,1035,1036],{"class":635},"interviews",[589,1038,1039],{"class":595},"'",[589,1041,1042],{"class":595},",\n",[589,1044,1045,1048,1050],{"class":591,"line":644},[589,1046,1047],{"class":599},"  layout",[589,1049,1030],{"class":595},[589,1051,1052],{"class":595}," {\n",[589,1054,1055,1058,1060],{"class":591,"line":654},[589,1056,1057],{"class":599},"    tabs",[589,1059,1030],{"class":595},[589,1061,1062],{"class":857}," [\n",[589,1064,1065,1068,1071,1073,1075,1078,1080,1083,1086,1088,1090,1093,1095,1097,1100],{"class":591,"line":747},[589,1066,1067],{"class":595},"      {",[589,1069,1070],{"class":599}," id",[589,1072,1030],{"class":595},[589,1074,1033],{"class":595},[589,1076,1077],{"class":635},"questions",[589,1079,1039],{"class":595},[589,1081,1082],{"class":595},",",[589,1084,1085],{"class":599},"  label",[589,1087,1030],{"class":595},[589,1089,1033],{"class":595},[589,1091,1092],{"class":635},"Questions",[589,1094,1039],{"class":595},[589,1096,1082],{"class":595},[589,1098,1099],{"class":857},"  … ",[589,1101,1102],{"class":595},"},\n",[589,1104,1105,1107,1109,1111,1113,1115,1117,1119,1122,1124,1126,1129,1131,1133,1136],{"class":591,"line":757},[589,1106,1067],{"class":595},[589,1108,1070],{"class":599},[589,1110,1030],{"class":595},[589,1112,1033],{"class":595},[589,1114,1036],{"class":635},[589,1116,1039],{"class":595},[589,1118,1082],{"class":595},[589,1120,1121],{"class":599}," label",[589,1123,1030],{"class":595},[589,1125,1033],{"class":595},[589,1127,1128],{"class":635},"Interviews",[589,1130,1039],{"class":595},[589,1132,1082],{"class":595},[589,1134,1135],{"class":857}," … ",[589,1137,1102],{"class":595},[589,1139,1140,1142,1144,1146,1148,1151,1153,1155,1158,1160,1162,1165,1167,1169,1172],{"class":591,"line":766},[589,1141,1067],{"class":595},[589,1143,1070],{"class":599},[589,1145,1030],{"class":595},[589,1147,1033],{"class":595},[589,1149,1150],{"class":635},"patterns",[589,1152,1039],{"class":595},[589,1154,1082],{"class":595},[589,1156,1157],{"class":599},"   label",[589,1159,1030],{"class":595},[589,1161,1033],{"class":595},[589,1163,1164],{"class":635},"Patterns",[589,1166,1039],{"class":595},[589,1168,1082],{"class":595},[589,1170,1171],{"class":857},"   … ",[589,1173,1102],{"class":595},[589,1175,1176],{"class":591,"line":796},[589,1177,1178],{"class":857},"    ]\n",[589,1180,1181],{"class":591,"line":805},[589,1182,1183],{"class":595},"  },\n",[589,1185,1186],{"class":591,"line":814},[589,1187,1188],{"class":683},"  // rest of schema…\n",[589,1190,1192,1195],{"class":591,"line":1191},12,[589,1193,1194],{"class":595},"}",[589,1196,1197],{"class":857},")\n",[458,1199,1200,1202,1203,1205,1206,1208],{},[455,1201,407],{}," detects ",[455,1204,978],{}," and renders ",[455,1207,985],{}," instead of the default sequential layout.",[466,1210,1212,1214],{"id":1211},"clientonly-wrapper",[455,1213,612],{}," wrapper",[458,1216,1217,1218,1220,1221,1224,1225,1228],{},"Always wrap ",[455,1219,407],{}," in ",[455,1222,1223],{},"\u003CClientOnly>"," — it uses ",[455,1226,1227],{},"IndexeddbPersistence"," which requires browser APIs. Provide a fallback skeleton:",[580,1230,1232],{"className":582,"code":1231,"language":584,"meta":585,"style":585},"\u003CClientOnly>\n  \u003CProtoTool :schema=\"mySchema\" />\n  \u003Ctemplate #fallback>\n    \u003Cdiv class=\"space-y-4 animate-pulse\">\n      \u003Cdiv class=\"h-10 bg-muted rounded\" />\n      \u003Cdiv class=\"h-10 bg-muted rounded\" />\n      \u003Cdiv class=\"h-24 bg-muted rounded\" />\n    \u003C/div>\n  \u003C/template>\n\u003C/ClientOnly>\n",[455,1233,1234,1242,1247,1252,1257,1262,1266,1271,1276,1281],{"__ignoreMap":585},[589,1235,1236,1238,1240],{"class":591,"line":592},[589,1237,596],{"class":595},[589,1239,612],{"class":599},[589,1241,603],{"class":595},[589,1243,1244],{"class":591,"line":606},[589,1245,1246],{"class":857},"  \u003CProtoTool :schema=\"mySchema\" />\n",[589,1248,1249],{"class":591,"line":617},[589,1250,1251],{"class":857},"  \u003Ctemplate #fallback>\n",[589,1253,1254],{"class":591,"line":644},[589,1255,1256],{"class":857},"    \u003Cdiv class=\"space-y-4 animate-pulse\">\n",[589,1258,1259],{"class":591,"line":654},[589,1260,1261],{"class":857},"      \u003Cdiv class=\"h-10 bg-muted rounded\" />\n",[589,1263,1264],{"class":591,"line":747},[589,1265,1261],{"class":857},[589,1267,1268],{"class":591,"line":757},[589,1269,1270],{"class":857},"      \u003Cdiv class=\"h-24 bg-muted rounded\" />\n",[589,1272,1273],{"class":591,"line":766},[589,1274,1275],{"class":857},"    \u003C/div>\n",[589,1277,1278],{"class":591,"line":796},[589,1279,1280],{"class":857},"  \u003C/template>\n",[589,1282,1283,1285,1287],{"class":591,"line":805},[589,1284,657],{"class":595},[589,1286,612],{"class":599},[589,1288,603],{"class":595},[466,1290,1292,1293,1295],{"id":1291},"using-useprototype-for-custom-layout","Using ",[455,1294,388],{}," for custom layout",[458,1297,1298,1299,1301],{},"If the built-in rendering doesn't fit your design, use ",[455,1300,388],{}," directly and compose your own UI:",[580,1303,1305],{"className":582,"code":1304,"language":584,"meta":585,"style":585},"\u003Cscript setup lang=\"ts\">\nconst props = defineProps\u003C{ schema: PrototypeSchema }>()\n\nconst { state, derived, collections, computeContext, isReady, reset } =\n  usePrototype(props.schema)\n\nconst badge = computed(() =>\n  props.schema.results?.badge?.(computeContext.value))\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CClientOnly>\n    \u003Cdiv v-if=\"!isReady\">Loading…\u003C/div>\n    \u003Ctemplate v-else>\n      \u003C!-- Completely custom layout -->\n      \u003Caside>\n        \u003CProtoForm :schema=\"props.schema\" :state=\"state\" />\n      \u003C/aside>\n      \u003Cmain>\n        \u003CUBadge v-if=\"badge\" :color=\"badge.color\">{{ badge.label }}\u003C/UBadge>\n        \u003C!-- Custom charts, tables, whatever -->\n      \u003C/main>\n    \u003C/template>\n  \u003C/ClientOnly>\n\u003C/template>\n",[455,1306,1307,1331,1361,1367,1407,1421,1425,1445,1475,1483,1487,1495,1503,1534,1547,1553,1563,1596,1606,1616,1657,1663,1672,1681,1690],{"__ignoreMap":585},[589,1308,1309,1311,1314,1317,1320,1322,1324,1327,1329],{"class":591,"line":592},[589,1310,596],{"class":595},[589,1312,1313],{"class":599},"script",[589,1315,1316],{"class":625}," setup",[589,1318,1319],{"class":625}," lang",[589,1321,629],{"class":595},[589,1323,632],{"class":595},[589,1325,1326],{"class":635},"ts",[589,1328,632],{"class":595},[589,1330,603],{"class":595},[589,1332,1333,1335,1338,1340,1343,1346,1349,1351,1355,1358],{"class":591,"line":606},[589,1334,1007],{"class":625},[589,1336,1337],{"class":857}," props ",[589,1339,629],{"class":595},[589,1341,1342],{"class":1015}," defineProps",[589,1344,1345],{"class":595},"\u003C{",[589,1347,1348],{"class":599}," schema",[589,1350,1030],{"class":595},[589,1352,1354],{"class":1353},"sBMFI"," PrototypeSchema",[589,1356,1357],{"class":595}," }>",[589,1359,1360],{"class":857},"()\n",[589,1362,1363],{"class":591,"line":617},[589,1364,1366],{"emptyLinePlaceholder":1365},true,"\n",[589,1368,1369,1371,1374,1377,1379,1382,1384,1387,1389,1392,1394,1397,1399,1402,1404],{"class":591,"line":644},[589,1370,1007],{"class":625},[589,1372,1373],{"class":595}," {",[589,1375,1376],{"class":857}," state",[589,1378,1082],{"class":595},[589,1380,1381],{"class":857}," derived",[589,1383,1082],{"class":595},[589,1385,1386],{"class":857}," collections",[589,1388,1082],{"class":595},[589,1390,1391],{"class":857}," computeContext",[589,1393,1082],{"class":595},[589,1395,1396],{"class":857}," isReady",[589,1398,1082],{"class":595},[589,1400,1401],{"class":857}," reset ",[589,1403,1194],{"class":595},[589,1405,1406],{"class":595}," =\n",[589,1408,1409,1412,1415,1418],{"class":591,"line":654},[589,1410,1411],{"class":1015},"  usePrototype",[589,1413,1414],{"class":857},"(props",[589,1416,1417],{"class":595},".",[589,1419,1420],{"class":857},"schema)\n",[589,1422,1423],{"class":591,"line":747},[589,1424,1366],{"emptyLinePlaceholder":1365},[589,1426,1427,1429,1432,1434,1437,1439,1442],{"class":591,"line":757},[589,1428,1007],{"class":625},[589,1430,1431],{"class":857}," badge ",[589,1433,629],{"class":595},[589,1435,1436],{"class":1015}," computed",[589,1438,1019],{"class":857},[589,1440,1441],{"class":595},"()",[589,1443,1444],{"class":625}," =>\n",[589,1446,1447,1450,1452,1454,1456,1459,1462,1465,1467,1470,1472],{"class":591,"line":766},[589,1448,1449],{"class":857},"  props",[589,1451,1417],{"class":595},[589,1453,502],{"class":857},[589,1455,1417],{"class":595},[589,1457,1458],{"class":857},"results",[589,1460,1461],{"class":595},"?.",[589,1463,1464],{"class":1015},"badge",[589,1466,1461],{"class":595},[589,1468,1469],{"class":857},"(computeContext",[589,1471,1417],{"class":595},[589,1473,1474],{"class":857},"value))\n",[589,1476,1477,1479,1481],{"class":591,"line":796},[589,1478,657],{"class":595},[589,1480,1313],{"class":599},[589,1482,603],{"class":595},[589,1484,1485],{"class":591,"line":805},[589,1486,1366],{"emptyLinePlaceholder":1365},[589,1488,1489,1491,1493],{"class":591,"line":814},[589,1490,596],{"class":595},[589,1492,600],{"class":599},[589,1494,603],{"class":595},[589,1496,1497,1499,1501],{"class":591,"line":1191},[589,1498,609],{"class":595},[589,1500,612],{"class":599},[589,1502,603],{"class":595},[589,1504,1506,1508,1510,1513,1515,1517,1520,1522,1525,1528,1530,1532],{"class":591,"line":1505},13,[589,1507,620],{"class":595},[589,1509,691],{"class":599},[589,1511,1512],{"class":625}," v-if",[589,1514,629],{"class":595},[589,1516,632],{"class":595},[589,1518,1519],{"class":635},"!isReady",[589,1521,632],{"class":595},[589,1523,1524],{"class":595},">",[589,1526,1527],{"class":857},"Loading…",[589,1529,657],{"class":595},[589,1531,691],{"class":599},[589,1533,603],{"class":595},[589,1535,1537,1539,1541,1545],{"class":591,"line":1536},14,[589,1538,620],{"class":595},[589,1540,600],{"class":599},[589,1542,1544],{"class":1543},"s7zQu"," v-else",[589,1546,603],{"class":595},[589,1548,1550],{"class":591,"line":1549},15,[589,1551,1552],{"class":683},"      \u003C!-- Completely custom layout -->\n",[589,1554,1556,1558,1561],{"class":591,"line":1555},16,[589,1557,718],{"class":595},[589,1559,1560],{"class":599},"aside",[589,1562,603],{"class":595},[589,1564,1566,1569,1571,1573,1575,1577,1580,1582,1585,1587,1589,1592,1594],{"class":591,"line":1565},17,[589,1567,1568],{"class":595},"        \u003C",[589,1570,904],{"class":599},[589,1572,626],{"class":625},[589,1574,629],{"class":595},[589,1576,632],{"class":595},[589,1578,1579],{"class":635},"props.schema",[589,1581,632],{"class":595},[589,1583,1584],{"class":625}," :state",[589,1586,629],{"class":595},[589,1588,632],{"class":595},[589,1590,1591],{"class":635},"state",[589,1593,632],{"class":595},[589,1595,641],{"class":595},[589,1597,1599,1602,1604],{"class":591,"line":1598},18,[589,1600,1601],{"class":595},"      \u003C/",[589,1603,1560],{"class":599},[589,1605,603],{"class":595},[589,1607,1609,1611,1614],{"class":591,"line":1608},19,[589,1610,718],{"class":595},[589,1612,1613],{"class":599},"main",[589,1615,603],{"class":595},[589,1617,1619,1621,1624,1626,1628,1630,1632,1634,1637,1639,1641,1644,1646,1648,1651,1653,1655],{"class":591,"line":1618},20,[589,1620,1568],{"class":595},[589,1622,1623],{"class":599},"UBadge",[589,1625,1512],{"class":625},[589,1627,629],{"class":595},[589,1629,632],{"class":595},[589,1631,1464],{"class":635},[589,1633,632],{"class":595},[589,1635,1636],{"class":625}," :color",[589,1638,629],{"class":595},[589,1640,632],{"class":595},[589,1642,1643],{"class":635},"badge.color",[589,1645,632],{"class":595},[589,1647,1524],{"class":595},[589,1649,1650],{"class":857},"{{ badge.label }}",[589,1652,657],{"class":595},[589,1654,1623],{"class":599},[589,1656,603],{"class":595},[589,1658,1660],{"class":591,"line":1659},21,[589,1661,1662],{"class":683},"        \u003C!-- Custom charts, tables, whatever -->\n",[589,1664,1666,1668,1670],{"class":591,"line":1665},22,[589,1667,1601],{"class":595},[589,1669,1613],{"class":599},[589,1671,603],{"class":595},[589,1673,1675,1677,1679],{"class":591,"line":1674},23,[589,1676,750],{"class":595},[589,1678,600],{"class":599},[589,1680,603],{"class":595},[589,1682,1684,1686,1688],{"class":591,"line":1683},24,[589,1685,647],{"class":595},[589,1687,612],{"class":599},[589,1689,603],{"class":595},[589,1691,1693,1695,1697],{"class":591,"line":1692},25,[589,1694,657],{"class":595},[589,1696,600],{"class":599},[589,1698,603],{"class":595},[1700,1701,1702],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":585,"searchDepth":606,"depth":606,"links":1704},[1705,1706,1707,1708,1709,1710,1711,1713],{"id":468,"depth":606,"text":469},{"id":577,"depth":606,"text":578},{"id":664,"depth":606,"text":665},{"id":823,"depth":606,"text":824},{"id":885,"depth":606,"text":886},{"id":989,"depth":606,"text":990},{"id":1211,"depth":606,"text":1712},"ClientOnly wrapper",{"id":1291,"depth":606,"text":1714},"Using usePrototype for custom layout","The top-level tool rendering component. Accepts a schema and an optional doc-key, renders the full tool UI, and handles all Y.js plumbing internally.","md",null,{},{"title":407},{"title":407,"description":1715},"1lPR_axWrmD8B0Ak472AbjME2DnEy_PU7F2-W5zar9k",[1723,1725],{"title":5,"path":402,"stem":403,"description":1724,"children":-1},"All globally registered components — ProtoTool, ProtoCrudModal, ProtoForm, ProtoDebugPanel, field components, and visualization components.",{"title":411,"path":412,"stem":413,"description":1726,"children":-1},"Modal editor for a single collection item with automatic draft persistence — unsaved changes survive tab switches and browser refreshes.",1772977477363]