[{"data":1,"prerenderedAt":2479},["ShallowReactive",2],{"navigation":3,"\u002Farchitecture\u002Fauthoring-plugins":629,"\u002Farchitecture\u002Fauthoring-plugins-surround":2474},[4,27,60,265,595,625],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Editors","\u002Fgetting-started\u002Feditors","1.getting-started\u002F2.editors",{"title":19,"path":20,"stem":21},"Editor API","\u002Fgetting-started\u002Feditor-api","1.getting-started\u002F3.editor-api",{"title":23,"path":24,"stem":25},"Migration v1 → v2","\u002Fgetting-started\u002Fmigration-v1-to-v2","1.getting-started\u002F4.migration-v1-to-v2",false,{"title":15,"icon":28,"path":29,"stem":30,"children":31,"page":26},"i-lucide-layout-panel-left","\u002Feditors","2.editors",[32,36,40,44,48,52,56],{"title":33,"path":34,"stem":35},"JSON Editor","\u002Feditors\u002Fjson","2.editors\u002F1.json",{"title":37,"path":38,"stem":39},"Markdown Editor","\u002Feditors\u002Fmarkdown","2.editors\u002F2.markdown",{"title":41,"path":42,"stem":43},"Code Editor","\u002Feditors\u002Fcode","2.editors\u002F3.code",{"title":45,"path":46,"stem":47},"Forms Editor","\u002Feditors\u002Fforms","2.editors\u002F4.forms",{"title":49,"path":50,"stem":51},"Charts Editor","\u002Feditors\u002Fcharts","2.editors\u002F5.charts",{"title":53,"path":54,"stem":55},"Calendar Editor","\u002Feditors\u002Fcalendar","2.editors\u002F6.calendar",{"title":57,"path":58,"stem":59},"Tables Editor","\u002Feditors\u002Ftables","2.editors\u002F7.tables",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":26},"Plugins","i-lucide-puzzle","\u002Fplugins","3.plugins",[66,70,108,154,180,210,235],{"title":67,"path":68,"stem":69},"Plugins overview","\u002Fplugins\u002Foverview","3.plugins\u002F1.overview",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":26},"Formatting","i-lucide-type","\u002Fplugins\u002Fformatting","3.plugins\u002F2.formatting",[76,80,84,88,92,96,100,104],{"title":77,"path":78,"stem":79},"Default marks","\u002Fplugins\u002Fformatting\u002Ftoolbar","3.plugins\u002F2.formatting\u002F1.toolbar",{"title":81,"path":82,"stem":83},"Font","\u002Fplugins\u002Fformatting\u002Ffont","3.plugins\u002F2.formatting\u002F2.font",{"title":85,"path":86,"stem":87},"Typography","\u002Fplugins\u002Fformatting\u002Ftypography","3.plugins\u002F2.formatting\u002F3.typography",{"title":89,"path":90,"stem":91},"Color","\u002Fplugins\u002Fformatting\u002Fcolor","3.plugins\u002F2.formatting\u002F4.color",{"title":93,"path":94,"stem":95},"Clear Styles","\u002Fplugins\u002Fformatting\u002Fclear-styles","3.plugins\u002F2.formatting\u002F5.clear-styles",{"title":97,"path":98,"stem":99},"Alignment","\u002Fplugins\u002Fformatting\u002Falignment","3.plugins\u002F2.formatting\u002F6.alignment",{"title":101,"path":102,"stem":103},"Block Style","\u002Fplugins\u002Fformatting\u002Fblock-style","3.plugins\u002F2.formatting\u002F7.block-style",{"title":105,"path":106,"stem":107},"Link","\u002Fplugins\u002Fformatting\u002Flink","3.plugins\u002F2.formatting\u002F8.link",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":26},"Blocks","i-lucide-blocks","\u002Fplugins\u002Fblocks","3.plugins\u002F3.blocks",[114,118,122,126,130,134,138,142,146,150],{"title":115,"path":116,"stem":117},"Block","\u002Fplugins\u002Fblocks\u002Fblock","3.plugins\u002F3.blocks\u002F01.block",{"title":119,"path":120,"stem":121},"Lists","\u002Fplugins\u002Fblocks\u002Flists","3.plugins\u002F3.blocks\u002F02.lists",{"title":123,"path":124,"stem":125},"Table","\u002Fplugins\u002Fblocks\u002Ftable","3.plugins\u002F3.blocks\u002F03.table",{"title":127,"path":128,"stem":129},"Templates","\u002Fplugins\u002Fblocks\u002Ftemplates","3.plugins\u002F3.blocks\u002F04.templates",{"title":131,"path":132,"stem":133},"Code Block","\u002Fplugins\u002Fblocks\u002Fcode-block","3.plugins\u002F3.blocks\u002F05.code-block",{"title":135,"path":136,"stem":137},"Math","\u002Fplugins\u002Fblocks\u002Fmath","3.plugins\u002F3.blocks\u002F06.math",{"title":139,"path":140,"stem":141},"HTML Viewer","\u002Fplugins\u002Fblocks\u002Fhtml-viewer","3.plugins\u002F3.blocks\u002F07.html-viewer",{"title":143,"path":144,"stem":145},"Footnotes","\u002Fplugins\u002Fblocks\u002Ffootnotes","3.plugins\u002F3.blocks\u002F08.footnotes",{"title":147,"path":148,"stem":149},"Anchor Link","\u002Fplugins\u002Fblocks\u002Fanchor-link","3.plugins\u002F3.blocks\u002F09.anchor-link",{"title":151,"path":152,"stem":153},"Footer","\u002Fplugins\u002Fblocks\u002Ffooter","3.plugins\u002F3.blocks\u002F10.footer",{"title":155,"icon":156,"path":157,"stem":158,"children":159,"page":26},"Media","i-lucide-image","\u002Fplugins\u002Fmedia","3.plugins\u002F4.media",[160,164,168,172,176],{"title":161,"path":162,"stem":163},"Image","\u002Fplugins\u002Fmedia\u002Fimage","3.plugins\u002F4.media\u002F1.image",{"title":165,"path":166,"stem":167},"Video","\u002Fplugins\u002Fmedia\u002Fvideo","3.plugins\u002F4.media\u002F2.video",{"title":169,"path":170,"stem":171},"YouTube Video","\u002Fplugins\u002Fmedia\u002Fyoutube-video","3.plugins\u002F4.media\u002F3.youtube-video",{"title":173,"path":174,"stem":175},"File Upload","\u002Fplugins\u002Fmedia\u002Ffile-upload","3.plugins\u002F4.media\u002F4.file-upload",{"title":177,"path":178,"stem":179},"PDF Embed","\u002Fplugins\u002Fmedia\u002Fpdf-embed","3.plugins\u002F4.media\u002F5.pdf-embed",{"title":181,"icon":182,"path":183,"stem":184,"children":185,"page":26},"Data & embeds","i-lucide-database","\u002Fplugins\u002Fdata","3.plugins\u002F5.data",[186,190,194,198,202,206],{"title":187,"path":188,"stem":189},"JSON","\u002Fplugins\u002Fdata\u002Fjson","3.plugins\u002F5.data\u002F1.json",{"title":191,"path":192,"stem":193},"Markdown","\u002Fplugins\u002Fdata\u002Fmarkdown","3.plugins\u002F5.data\u002F2.markdown",{"title":195,"path":196,"stem":197},"Charts","\u002Fplugins\u002Fdata\u002Fcharts","3.plugins\u002F5.data\u002F3.charts",{"title":199,"path":200,"stem":201},"Form Builder","\u002Fplugins\u002Fdata\u002Fform-builder","3.plugins\u002F5.data\u002F4.form-builder",{"title":203,"path":204,"stem":205},"Calendar","\u002Fplugins\u002Fdata\u002Fcalendar","3.plugins\u002F5.data\u002F5.calendar",{"title":207,"path":208,"stem":209},"Timer","\u002Fplugins\u002Fdata\u002Ftimer","3.plugins\u002F5.data\u002F6.timer",{"title":211,"icon":212,"path":213,"stem":214,"children":215,"page":26},"Collaboration","i-lucide-users","\u002Fplugins\u002Fcollaboration","3.plugins\u002F6.collaboration",[216,219,223,227,231],{"title":211,"path":217,"stem":218},"\u002Fplugins\u002Fcollaboration\u002Fcollaboration","3.plugins\u002F6.collaboration\u002F1.collaboration",{"title":220,"path":221,"stem":222},"Comments","\u002Fplugins\u002Fcollaboration\u002Fcomments","3.plugins\u002F6.collaboration\u002F2.comments",{"title":224,"path":225,"stem":226},"Mentions","\u002Fplugins\u002Fcollaboration\u002Fmentions","3.plugins\u002F6.collaboration\u002F3.mentions",{"title":228,"path":229,"stem":230},"Track Changes","\u002Fplugins\u002Fcollaboration\u002Ftrack-changes","3.plugins\u002F6.collaboration\u002F4.track-changes",{"title":232,"path":233,"stem":234},"History","\u002Fplugins\u002Fcollaboration\u002Fhistory","3.plugins\u002F6.collaboration\u002F5.history",{"title":236,"icon":237,"path":238,"stem":239,"children":240,"page":26},"Tools","i-lucide-wrench","\u002Fplugins\u002Ftools","3.plugins\u002F7.tools",[241,245,249,253,257,261],{"title":242,"path":243,"stem":244},"Export","\u002Fplugins\u002Ftools\u002Fexport","3.plugins\u002F7.tools\u002F1.export",{"title":246,"path":247,"stem":248},"Shortcuts","\u002Fplugins\u002Ftools\u002Fshortcuts","3.plugins\u002F7.tools\u002F2.shortcuts",{"title":250,"path":251,"stem":252},"Responsive","\u002Fplugins\u002Ftools\u002Fresponsive","3.plugins\u002F7.tools\u002F3.responsive",{"title":254,"path":255,"stem":256},"Language","\u002Fplugins\u002Ftools\u002Flanguage","3.plugins\u002F7.tools\u002F4.language",{"title":258,"path":259,"stem":260},"Spell Checker","\u002Fplugins\u002Ftools\u002Fspell-checker","3.plugins\u002F7.tools\u002F5.spell-checker",{"title":262,"path":263,"stem":264},"AI Assistant","\u002Fplugins\u002Ftools\u002Fai-assistant","3.plugins\u002F7.tools\u002F6.ai-assistant",{"title":266,"icon":267,"path":268,"stem":269,"children":270,"page":26},"Integrate","i-lucide-plug","\u002Fintegrate","4.integrate",[271,275,305,359,385,423,445,471,493,523,569],{"title":272,"path":273,"stem":274},"Integrate overview","\u002Fintegrate\u002Foverview","4.integrate\u002F01.overview",{"title":276,"icon":277,"path":278,"stem":279,"children":280,"page":26},"Basics","i-lucide-book-open","\u002Fintegrate\u002Fbasics","4.integrate\u002F02.basics",[281,285,289,293,297,301],{"title":282,"path":283,"stem":284},"Persistence","\u002Fintegrate\u002Fbasics\u002Fpersistence","4.integrate\u002F02.basics\u002F1.persistence",{"title":286,"path":287,"stem":288},"Host config","\u002Fintegrate\u002Fbasics\u002Fhost-config","4.integrate\u002F02.basics\u002F2.host-config",{"title":290,"path":291,"stem":292},"Server + Vite","\u002Fintegrate\u002Fbasics\u002Fserver-vite","4.integrate\u002F02.basics\u002F3.server-vite",{"title":294,"path":295,"stem":296},"Meta-frameworks (SSR \u002F CSR)","\u002Fintegrate\u002Fbasics\u002Fmeta-ssr","4.integrate\u002F02.basics\u002F4.meta-ssr",{"title":298,"path":299,"stem":300},"Native \u002F iframe bridge","\u002Fintegrate\u002Fbasics\u002Fnative-bridge","4.integrate\u002F02.basics\u002F5.native-bridge",{"title":302,"path":303,"stem":304},"Chrome & host","\u002Fintegrate\u002Fbasics\u002Fchrome-and-host","4.integrate\u002F02.basics\u002F6.chrome-and-host",{"title":306,"icon":307,"path":308,"stem":309,"children":310,"page":26},"Frontend","i-lucide-monitor","\u002Fintegrate\u002Ffrontend","4.integrate\u002F03.frontend",[311,315,319,323,327,331,335,339,343,347,351,355],{"title":312,"path":313,"stem":314},"React","\u002Fintegrate\u002Ffrontend\u002Freact","4.integrate\u002F03.frontend\u002F01.react",{"title":316,"path":317,"stem":318},"Vue 2","\u002Fintegrate\u002Ffrontend\u002Fvue2","4.integrate\u002F03.frontend\u002F02.vue2",{"title":320,"path":321,"stem":322},"Vue 3","\u002Fintegrate\u002Ffrontend\u002Fvue3","4.integrate\u002F03.frontend\u002F03.vue3",{"title":324,"path":325,"stem":326},"Angular","\u002Fintegrate\u002Ffrontend\u002Fangular","4.integrate\u002F03.frontend\u002F04.angular",{"title":328,"path":329,"stem":330},"Svelte","\u002Fintegrate\u002Ffrontend\u002Fsvelte","4.integrate\u002F03.frontend\u002F05.svelte",{"title":332,"path":333,"stem":334},"Solid.js","\u002Fintegrate\u002Ffrontend\u002Fsolid","4.integrate\u002F03.frontend\u002F06.solid",{"title":336,"path":337,"stem":338},"Preact","\u002Fintegrate\u002Ffrontend\u002Fpreact","4.integrate\u002F03.frontend\u002F07.preact",{"title":340,"path":341,"stem":342},"Lit","\u002Fintegrate\u002Ffrontend\u002Flit","4.integrate\u002F03.frontend\u002F08.lit",{"title":344,"path":345,"stem":346},"Qwik","\u002Fintegrate\u002Ffrontend\u002Fqwik","4.integrate\u002F03.frontend\u002F09.qwik",{"title":348,"path":349,"stem":350},"jQuery","\u002Fintegrate\u002Ffrontend\u002Fjquery","4.integrate\u002F03.frontend\u002F10.jquery",{"title":352,"path":353,"stem":354},"Alpine.js","\u002Fintegrate\u002Ffrontend\u002Falpine","4.integrate\u002F03.frontend\u002F11.alpine",{"title":356,"path":357,"stem":358},"Backbone.js","\u002Fintegrate\u002Ffrontend\u002Fbackbone","4.integrate\u002F03.frontend\u002F12.backbone",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":26},"Meta-frameworks","i-lucide-layers","\u002Fintegrate\u002Fmeta-frameworks","4.integrate\u002F04.meta-frameworks",[365,369,373,377,381],{"title":366,"path":367,"stem":368},"Next.js","\u002Fintegrate\u002Fmeta-frameworks\u002Fnext","4.integrate\u002F04.meta-frameworks\u002F1.next",{"title":370,"path":371,"stem":372},"Nuxt 3 \u002F 4","\u002Fintegrate\u002Fmeta-frameworks\u002Fnuxt","4.integrate\u002F04.meta-frameworks\u002F2.nuxt",{"title":374,"path":375,"stem":376},"SvelteKit","\u002Fintegrate\u002Fmeta-frameworks\u002Fsveltekit","4.integrate\u002F04.meta-frameworks\u002F3.sveltekit",{"title":378,"path":379,"stem":380},"Remix","\u002Fintegrate\u002Fmeta-frameworks\u002Fremix","4.integrate\u002F04.meta-frameworks\u002F4.remix",{"title":382,"path":383,"stem":384},"Astro","\u002Fintegrate\u002Fmeta-frameworks\u002Fastro","4.integrate\u002F04.meta-frameworks\u002F5.astro",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":26},"Node \u002F edge","i-simple-icons-nodedotjs","\u002Fintegrate\u002Fnode","4.integrate\u002F05.node",[391,395,399,403,407,411,415,419],{"title":392,"path":393,"stem":394},"Express.js","\u002Fintegrate\u002Fnode\u002Fexpress","4.integrate\u002F05.node\u002F1.express",{"title":396,"path":397,"stem":398},"NestJS","\u002Fintegrate\u002Fnode\u002Fnestjs","4.integrate\u002F05.node\u002F2.nestjs",{"title":400,"path":401,"stem":402},"Fastify","\u002Fintegrate\u002Fnode\u002Ffastify","4.integrate\u002F05.node\u002F3.fastify",{"title":404,"path":405,"stem":406},"Hono","\u002Fintegrate\u002Fnode\u002Fhono","4.integrate\u002F05.node\u002F4.hono",{"title":408,"path":409,"stem":410},"Koa","\u002Fintegrate\u002Fnode\u002Fkoa","4.integrate\u002F05.node\u002F5.koa",{"title":412,"path":413,"stem":414},"Bun","\u002Fintegrate\u002Fnode\u002Fbun","4.integrate\u002F05.node\u002F6.bun",{"title":416,"path":417,"stem":418},"Deno","\u002Fintegrate\u002Fnode\u002Fdeno","4.integrate\u002F05.node\u002F7.deno",{"title":420,"path":421,"stem":422},"AdonisJS","\u002Fintegrate\u002Fnode\u002Fadonis","4.integrate\u002F05.node\u002F8.adonis",{"title":424,"icon":425,"path":426,"stem":427,"children":428,"page":26},"Python","i-simple-icons-python","\u002Fintegrate\u002Fpython","4.integrate\u002F06.python",[429,433,437,441],{"title":430,"path":431,"stem":432},"FastAPI","\u002Fintegrate\u002Fpython\u002Ffastapi","4.integrate\u002F06.python\u002F1.fastapi",{"title":434,"path":435,"stem":436},"Django","\u002Fintegrate\u002Fpython\u002Fdjango","4.integrate\u002F06.python\u002F2.django",{"title":438,"path":439,"stem":440},"Python Flask","\u002Fintegrate\u002Fpython\u002Fpython-flask","4.integrate\u002F06.python\u002F3.python-flask",{"title":442,"path":443,"stem":444},"Litestar","\u002Fintegrate\u002Fpython\u002Flitestar","4.integrate\u002F06.python\u002F4.litestar",{"title":446,"icon":447,"path":448,"stem":449,"children":450,"page":26},"PHP","i-simple-icons-php","\u002Fintegrate\u002Fphp","4.integrate\u002F07.php",[451,455,459,463,467],{"title":452,"path":453,"stem":454},"Laravel","\u002Fintegrate\u002Fphp\u002Flaravel","4.integrate\u002F07.php\u002F1.laravel",{"title":456,"path":457,"stem":458},"Symfony","\u002Fintegrate\u002Fphp\u002Fsymfony","4.integrate\u002F07.php\u002F2.symfony",{"title":460,"path":461,"stem":462},"Slim","\u002Fintegrate\u002Fphp\u002Fslim","4.integrate\u002F07.php\u002F3.slim",{"title":464,"path":465,"stem":466},"CakePHP","\u002Fintegrate\u002Fphp\u002Fcakephp","4.integrate\u002F07.php\u002F4.cakephp",{"title":468,"path":469,"stem":470},"CodeIgniter","\u002Fintegrate\u002Fphp\u002Fcodeigniter","4.integrate\u002F07.php\u002F5.codeigniter",{"title":472,"icon":473,"path":474,"stem":475,"children":476,"page":26},"Go","i-simple-icons-go","\u002Fintegrate\u002Fgo","4.integrate\u002F08.go",[477,481,485,489],{"title":478,"path":479,"stem":480},"Go Gin","\u002Fintegrate\u002Fgo\u002Fgo-gin","4.integrate\u002F08.go\u002F1.go-gin",{"title":482,"path":483,"stem":484},"Go Echo","\u002Fintegrate\u002Fgo\u002Fgo-echo","4.integrate\u002F08.go\u002F2.go-echo",{"title":486,"path":487,"stem":488},"Go Fiber","\u002Fintegrate\u002Fgo\u002Fgo-fiber","4.integrate\u002F08.go\u002F3.go-fiber",{"title":490,"path":491,"stem":492},"Go Chi","\u002Fintegrate\u002Fgo\u002Fgo-chi","4.integrate\u002F08.go\u002F4.go-chi",{"title":494,"icon":495,"path":496,"stem":497,"children":498,"page":26},"Rust","i-simple-icons-rust","\u002Fintegrate\u002Frust","4.integrate\u002F09.rust",[499,503,507,511,515,519],{"title":500,"path":501,"stem":502},"Rust Axum","\u002Fintegrate\u002Frust\u002Frust-axum","4.integrate\u002F09.rust\u002F1.rust-axum",{"title":504,"path":505,"stem":506},"Rust Actix-web","\u002Fintegrate\u002Frust\u002Frust-actix","4.integrate\u002F09.rust\u002F2.rust-actix",{"title":508,"path":509,"stem":510},"Rust Rocket","\u002Fintegrate\u002Frust\u002Frust-rocket","4.integrate\u002F09.rust\u002F3.rust-rocket",{"title":512,"path":513,"stem":514},"Rust Warp","\u002Fintegrate\u002Frust\u002Frust-warp","4.integrate\u002F09.rust\u002F4.rust-warp",{"title":516,"path":517,"stem":518},"Rust Poem","\u002Fintegrate\u002Frust\u002Frust-poem","4.integrate\u002F09.rust\u002F5.rust-poem",{"title":520,"path":521,"stem":522},"Rust Loco","\u002Fintegrate\u002Frust\u002Frust-loco","4.integrate\u002F09.rust\u002F6.rust-loco",{"title":524,"icon":525,"path":526,"stem":527,"children":528,"page":26},"JVM \u002F .NET \u002F other","i-lucide-coffee","\u002Fintegrate\u002Fjvm-dotnet","4.integrate\u002F10.jvm-dotnet",[529,533,537,541,545,549,553,557,561,565],{"title":530,"path":531,"stem":532},"Spring Boot","\u002Fintegrate\u002Fjvm-dotnet\u002Fspring","4.integrate\u002F10.jvm-dotnet\u002F01.spring",{"title":534,"path":535,"stem":536},"Quarkus","\u002Fintegrate\u002Fjvm-dotnet\u002Fquarkus","4.integrate\u002F10.jvm-dotnet\u002F02.quarkus",{"title":538,"path":539,"stem":540},"Micronaut","\u002Fintegrate\u002Fjvm-dotnet\u002Fmicronaut","4.integrate\u002F10.jvm-dotnet\u002F03.micronaut",{"title":542,"path":543,"stem":544},"Kotlin Spring Boot","\u002Fintegrate\u002Fjvm-dotnet\u002Fkotlin-spring","4.integrate\u002F10.jvm-dotnet\u002F04.kotlin-spring",{"title":546,"path":547,"stem":548},"Ktor","\u002Fintegrate\u002Fjvm-dotnet\u002Fktor","4.integrate\u002F10.jvm-dotnet\u002F05.ktor",{"title":550,"path":551,"stem":552},"ASP.NET Core","\u002Fintegrate\u002Fjvm-dotnet\u002Faspnet-core","4.integrate\u002F10.jvm-dotnet\u002F06.aspnet-core",{"title":554,"path":555,"stem":556},"Blazor","\u002Fintegrate\u002Fjvm-dotnet\u002Fblazor","4.integrate\u002F10.jvm-dotnet\u002F07.blazor",{"title":558,"path":559,"stem":560},"Phoenix","\u002Fintegrate\u002Fjvm-dotnet\u002Fphoenix","4.integrate\u002F10.jvm-dotnet\u002F08.phoenix",{"title":562,"path":563,"stem":564},"Ruby on Rails","\u002Fintegrate\u002Fjvm-dotnet\u002Frails","4.integrate\u002F10.jvm-dotnet\u002F09.rails",{"title":566,"path":567,"stem":568},"HTMX host","\u002Fintegrate\u002Fjvm-dotnet\u002Fhtmx","4.integrate\u002F10.jvm-dotnet\u002F10.htmx",{"title":570,"icon":571,"path":572,"stem":573,"children":574,"page":26},"Desktop & mobile hosts","i-lucide-smartphone","\u002Fintegrate\u002Fhosts","4.integrate\u002F11.hosts",[575,579,583,587,591],{"title":576,"path":577,"stem":578},"Flutter","\u002Fintegrate\u002Fhosts\u002Fflutter","4.integrate\u002F11.hosts\u002F1.flutter",{"title":580,"path":581,"stem":582},"Electron","\u002Fintegrate\u002Fhosts\u002Felectron","4.integrate\u002F11.hosts\u002F2.electron",{"title":584,"path":585,"stem":586},"Tauri","\u002Fintegrate\u002Fhosts\u002Ftauri","4.integrate\u002F11.hosts\u002F3.tauri",{"title":588,"path":589,"stem":590},"Wails","\u002Fintegrate\u002Fhosts\u002Fwails","4.integrate\u002F11.hosts\u002F4.wails",{"title":592,"path":593,"stem":594},"Capacitor","\u002Fintegrate\u002Fhosts\u002Fcapacitor","4.integrate\u002F11.hosts\u002F5.capacitor",{"title":596,"icon":597,"path":598,"stem":599,"children":600,"page":26},"Architecture","i-lucide-cpu","\u002Farchitecture","5.architecture",[601,605,609,613,617,621],{"title":602,"path":603,"stem":604},"Document model","\u002Farchitecture\u002Fdocument-model","5.architecture\u002F1.document-model",{"title":606,"path":607,"stem":608},"SDK reference","\u002Farchitecture\u002Fsdk","5.architecture\u002F2.sdk",{"title":610,"path":611,"stem":612},"View runtime","\u002Farchitecture\u002Fview","5.architecture\u002F3.view",{"title":614,"path":615,"stem":616},"Authoring plugins","\u002Farchitecture\u002Fauthoring-plugins","5.architecture\u002F4.authoring-plugins",{"title":618,"path":619,"stem":620},"Mermaid","\u002Farchitecture\u002Fmermaid","5.architecture\u002F5.mermaid",{"title":622,"path":623,"stem":624},"Publishing packages","\u002Farchitecture\u002Fpublishing-packages","5.architecture\u002F6.publishing-packages",{"title":626,"path":627,"stem":628},"Changelog","\u002Fchangelog","9.changelog",{"id":630,"title":614,"body":631,"description":2468,"extension":2469,"links":2470,"meta":2471,"navigation":701,"path":615,"seo":2472,"stem":616,"__hash__":2473},"docs\u002F5.architecture\u002F4.authoring-plugins.md",{"type":632,"value":633,"toc":2459},"minimark",[634,1025,1071,1076,1161,1174,1178,1212,1216,1237,1918,1994,2026,2035,2039,2049,2269,2295,2303,2309,2402,2437,2446,2450,2455],[635,636,641],"pre",{"className":637,"code":638,"language":639,"meta":640,"style":640},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { definePlugin, core, insertAtomAfter, setMarkAttrs } from 'on-codemerge\u002Fsdk';\n\nexport function MyPlugin() {\n  return definePlugin({\n    name: 'my-plugin',\n    commands: {\n      insertWidget: insertAtomAfter('myAtom', { src: '' }),\n      paint: setMarkAttrs('textColor', { color: '#f00' }),\n    },\n    setup(ctx) {\n      ctx.toolbar.add({\n        id: 'my',\n        label: 'My',\n        group: 'format',\n        order: 25,\n        onClick: () => ctx.editor.command('insertWidget'),\n      });\n    },\n  });\n}\n","ts","",[642,643,644,696,703,723,738,757,767,805,846,852,868,889,906,923,940,954,994,1004,1009,1019],"code",{"__ignoreMap":640},[645,646,649,653,657,661,664,667,669,672,674,677,680,683,686,690,693],"span",{"class":647,"line":648},"line",1,[645,650,652],{"class":651},"s7zQu","import",[645,654,656],{"class":655},"sMK4o"," {",[645,658,660],{"class":659},"sTEyZ"," definePlugin",[645,662,663],{"class":655},",",[645,665,666],{"class":659}," core",[645,668,663],{"class":655},[645,670,671],{"class":659}," insertAtomAfter",[645,673,663],{"class":655},[645,675,676],{"class":659}," setMarkAttrs",[645,678,679],{"class":655}," }",[645,681,682],{"class":651}," from",[645,684,685],{"class":655}," '",[645,687,689],{"class":688},"sfazB","on-codemerge\u002Fsdk",[645,691,692],{"class":655},"'",[645,694,695],{"class":655},";\n",[645,697,699],{"class":647,"line":698},2,[645,700,702],{"emptyLinePlaceholder":701},true,"\n",[645,704,706,709,713,717,720],{"class":647,"line":705},3,[645,707,708],{"class":651},"export",[645,710,712],{"class":711},"spNyl"," function",[645,714,716],{"class":715},"s2Zo4"," MyPlugin",[645,718,719],{"class":655},"()",[645,721,722],{"class":655}," {\n",[645,724,726,729,731,735],{"class":647,"line":725},4,[645,727,728],{"class":651},"  return",[645,730,660],{"class":715},[645,732,734],{"class":733},"swJcz","(",[645,736,737],{"class":655},"{\n",[645,739,741,744,747,749,752,754],{"class":647,"line":740},5,[645,742,743],{"class":733},"    name",[645,745,746],{"class":655},":",[645,748,685],{"class":655},[645,750,751],{"class":688},"my-plugin",[645,753,692],{"class":655},[645,755,756],{"class":655},",\n",[645,758,760,763,765],{"class":647,"line":759},6,[645,761,762],{"class":733},"    commands",[645,764,746],{"class":655},[645,766,722],{"class":655},[645,768,770,773,775,777,779,781,784,786,788,790,793,795,798,800,803],{"class":647,"line":769},7,[645,771,772],{"class":733},"      insertWidget",[645,774,746],{"class":655},[645,776,671],{"class":715},[645,778,734],{"class":733},[645,780,692],{"class":655},[645,782,783],{"class":688},"myAtom",[645,785,692],{"class":655},[645,787,663],{"class":655},[645,789,656],{"class":655},[645,791,792],{"class":733}," src",[645,794,746],{"class":655},[645,796,797],{"class":655}," ''",[645,799,679],{"class":655},[645,801,802],{"class":733},")",[645,804,756],{"class":655},[645,806,808,811,813,815,817,819,822,824,826,828,831,833,835,838,840,842,844],{"class":647,"line":807},8,[645,809,810],{"class":733},"      paint",[645,812,746],{"class":655},[645,814,676],{"class":715},[645,816,734],{"class":733},[645,818,692],{"class":655},[645,820,821],{"class":688},"textColor",[645,823,692],{"class":655},[645,825,663],{"class":655},[645,827,656],{"class":655},[645,829,830],{"class":733}," color",[645,832,746],{"class":655},[645,834,685],{"class":655},[645,836,837],{"class":688},"#f00",[645,839,692],{"class":655},[645,841,679],{"class":655},[645,843,802],{"class":733},[645,845,756],{"class":655},[645,847,849],{"class":647,"line":848},9,[645,850,851],{"class":655},"    },\n",[645,853,855,858,860,864,866],{"class":647,"line":854},10,[645,856,857],{"class":733},"    setup",[645,859,734],{"class":655},[645,861,863],{"class":862},"sHdIc","ctx",[645,865,802],{"class":655},[645,867,722],{"class":655},[645,869,871,874,877,880,882,885,887],{"class":647,"line":870},11,[645,872,873],{"class":659},"      ctx",[645,875,876],{"class":655},".",[645,878,879],{"class":659},"toolbar",[645,881,876],{"class":655},[645,883,884],{"class":715},"add",[645,886,734],{"class":733},[645,888,737],{"class":655},[645,890,892,895,897,899,902,904],{"class":647,"line":891},12,[645,893,894],{"class":733},"        id",[645,896,746],{"class":655},[645,898,685],{"class":655},[645,900,901],{"class":688},"my",[645,903,692],{"class":655},[645,905,756],{"class":655},[645,907,909,912,914,916,919,921],{"class":647,"line":908},13,[645,910,911],{"class":733},"        label",[645,913,746],{"class":655},[645,915,685],{"class":655},[645,917,918],{"class":688},"My",[645,920,692],{"class":655},[645,922,756],{"class":655},[645,924,926,929,931,933,936,938],{"class":647,"line":925},14,[645,927,928],{"class":733},"        group",[645,930,746],{"class":655},[645,932,685],{"class":655},[645,934,935],{"class":688},"format",[645,937,692],{"class":655},[645,939,756],{"class":655},[645,941,943,946,948,952],{"class":647,"line":942},15,[645,944,945],{"class":733},"        order",[645,947,746],{"class":655},[645,949,951],{"class":950},"sbssI"," 25",[645,953,756],{"class":655},[645,955,957,960,962,965,968,971,973,976,978,981,983,985,988,990,992],{"class":647,"line":956},16,[645,958,959],{"class":715},"        onClick",[645,961,746],{"class":655},[645,963,964],{"class":655}," ()",[645,966,967],{"class":711}," =>",[645,969,970],{"class":659}," ctx",[645,972,876],{"class":655},[645,974,975],{"class":659},"editor",[645,977,876],{"class":655},[645,979,980],{"class":715},"command",[645,982,734],{"class":733},[645,984,692],{"class":655},[645,986,987],{"class":688},"insertWidget",[645,989,692],{"class":655},[645,991,802],{"class":733},[645,993,756],{"class":655},[645,995,997,1000,1002],{"class":647,"line":996},17,[645,998,999],{"class":655},"      }",[645,1001,802],{"class":733},[645,1003,695],{"class":655},[645,1005,1007],{"class":647,"line":1006},18,[645,1008,851],{"class":655},[645,1010,1012,1015,1017],{"class":647,"line":1011},19,[645,1013,1014],{"class":655},"  }",[645,1016,802],{"class":733},[645,1018,695],{"class":655},[645,1020,1022],{"class":647,"line":1021},20,[645,1023,1024],{"class":655},"}\n",[1026,1027,1028,1031,1032,1038,1039,1041,1042,1045,1046,1045,1049,1045,1052,1045,1055,1045,1058,1061,1062,1045,1065,1045,1068,876],"p",{},[642,1029,1030],{},"setup"," receives a ",[1033,1034,1035],"strong",{},[642,1036,1037],{},"PluginContext"," (",[642,1040,863],{},"), not the raw editor. Use ",[642,1043,1044],{},"ctx.editor",", ",[642,1047,1048],{},"ctx.toolbar",[642,1050,1051],{},"ctx.popup",[642,1053,1054],{},"ctx.menu",[642,1056,1057],{},"ctx.notify",[642,1059,1060],{},"ctx.on"," \u002F ",[642,1063,1064],{},"ctx.onDom",[642,1066,1067],{},"ctx.own",[642,1069,1070],{},"ctx.scope",[1072,1073,1075],"h2",{"id":1074},"workspaces-packages","Workspaces \u002F packages",[1077,1078,1079,1092],"table",{},[1080,1081,1082],"thead",{},[1083,1084,1085,1089],"tr",{},[1086,1087,1088],"th",{},"Package",[1086,1090,1091],{},"Role",[1093,1094,1095,1106,1124,1141,1151],"tbody",{},[1083,1096,1097,1103],{},[1098,1099,1100],"td",{},[642,1101,1102],{},"on-codemerge",[1098,1104,1105],{},"Product Editor + plugins + CSS (prefer this for apps)",[1083,1107,1108,1115],{},[1098,1109,1110,1061,1112],{},[642,1111,689],{},[642,1113,1114],{},"@codemerge\u002Fsdk",[1098,1116,1117,1045,1120,1123],{},[642,1118,1119],{},"core.*",[642,1121,1122],{},"definePlugin",", UI services (compat subpath vs standalone)",[1083,1125,1126,1134],{},[1098,1127,1128,1061,1131],{},[642,1129,1130],{},"on-codemerge\u002Fkernel",[642,1132,1133],{},"@codemerge\u002Fkernel",[1098,1135,1136,1137,1140],{},"Pure doc\u002Fops (plugins should use ",[642,1138,1139],{},"core"," from SDK, not kernel directly)",[1083,1142,1143,1148],{},[1098,1144,1145],{},[642,1146,1147],{},"@codemerge\u002Fhunspell",[1098,1149,1150],{},"Spell engine without DOM",[1083,1152,1153,1158],{},[1098,1154,1155],{},[642,1156,1157],{},"@codemerge\u002Fcollaboration-server",[1098,1159,1160],{},"Authoritative ops WebSocket server (embed + CLI)",[1026,1162,1163,1164,1167,1168,1170,1171,1173],{},"Do ",[1033,1165,1166],{},"not"," mix ",[642,1169,1102],{}," and ",[642,1172,1114],{}," in the same application bundle (two SDK instances). Use the product package alone, or the low-level packages alone for custom shells.",[1072,1175,1177],{"id":1176},"rules","Rules",[1179,1180,1181,1191,1202],"ol",{},[1182,1183,1184,1185,1187,1188,1190],"li",{},"Never import ",[642,1186,1130],{}," from a plugin — use ",[642,1189,1139],{}," \u002F helpers from SDK.",[1182,1192,1193,1194,1061,1196,1061,1198,1061,1200,876],{},"Never invent modal\u002Ftoolbar DOM — use ",[642,1195,1048],{},[642,1197,1051],{},[642,1199,1054],{},[642,1201,1057],{},[1182,1203,1204,1205,1045,1208,1211],{},"Command helpers (",[642,1206,1207],{},"insertAtomAfter",[642,1209,1210],{},"setMarkAttrs",", …) live in the SDK.",[1072,1213,1215],{"id":1214},"toolbar-bar-vs-menus","Toolbar: bar vs menus",[1026,1217,1218,1219,1038,1222,1225,1226,1038,1229,1232,1233,1236],{},"The sticky toolbar chrome is ",[1033,1220,1221],{},"core-owned",[642,1223,1224],{},"ToolbarPanel","). ",[1033,1227,1228],{},"Menus come from Editor construct options",[642,1230,1231],{},"toolbar.menus","); plugins only register items (and may ",[642,1234,1235],{},"defineMenu"," for custom dropdowns).",[635,1238,1240],{"className":637,"code":1239,"language":639,"meta":640,"style":640},"\u002F\u002F Host: which overflow menus exist (omit → Insert \u002F Review \u002F Tools)\nnew Editor(host, {\n  toolbar: {\n    menus: [\n      { id: 'insert', label: 'Insert', icon: insertIcon, group: 'insert', order: 40 },\n    ],\n  },\n  plugins: [ChartsPlugin(), TablePlugin()],\n});\n\n\u002F\u002F Flat bar — no dropdowns; plugin `menu: 'insert'` falls through to the bar\nnew Editor(host, { toolbar: { menus: [] }, plugins: [ChartsPlugin()] });\n\n\u002F\u002F Top-level button (group → separators, group-aware sort)\nctx.toolbar.add({\n  id: 'font-settings',\n  icon: fontIcon,\n  group: 'format',\n  order: 14,\n  onClick: openFont,\n});\n\n\u002F\u002F Overflow item — only if host registered that menu id\nctx.toolbar.add({\n  id: 'table',\n  icon: tableIcon,\n  menu: 'insert',\n  order: 30,\n  onClick: openTablePicker,\n});\n\n\u002F\u002F Plugin factory placement (optional)\nChartsPlugin(); \u002F\u002F default menu: 'insert'\nChartsPlugin({ menu: null }); \u002F\u002F always on the bar\nChartsPlugin({ menu: 'insert', order: 50 });\n\n\u002F\u002F Custom menu (any plugin may define one — then add items to it)\nctx.toolbar.defineMenu({\n  id: 'acme',\n  label: 'Acme',\n  group: 'tools',\n  order: 70,\n});\nctx.toolbar.add({ id: 'acme-x', label: 'X', menu: 'acme', order: 1, onClick: … });\n",[642,1241,1242,1248,1263,1272,1282,1349,1356,1361,1386,1395,1399,1404,1452,1456,1461,1477,1493,1505,1520,1532,1544,1553,1558,1564,1581,1596,1608,1624,1636,1648,1657,1662,1668,1681,1708,1742,1747,1753,1770,1786,1803,1819,1831,1840],{"__ignoreMap":640},[645,1243,1244],{"class":647,"line":648},[645,1245,1247],{"class":1246},"sHwdD","\u002F\u002F Host: which overflow menus exist (omit → Insert \u002F Review \u002F Tools)\n",[645,1249,1250,1253,1256,1259,1261],{"class":647,"line":698},[645,1251,1252],{"class":655},"new",[645,1254,1255],{"class":715}," Editor",[645,1257,1258],{"class":659},"(host",[645,1260,663],{"class":655},[645,1262,722],{"class":655},[645,1264,1265,1268,1270],{"class":647,"line":705},[645,1266,1267],{"class":733},"  toolbar",[645,1269,746],{"class":655},[645,1271,722],{"class":655},[645,1273,1274,1277,1279],{"class":647,"line":725},[645,1275,1276],{"class":733},"    menus",[645,1278,746],{"class":655},[645,1280,1281],{"class":659}," [\n",[645,1283,1284,1287,1290,1292,1294,1297,1299,1301,1304,1306,1308,1311,1313,1315,1318,1320,1323,1325,1328,1330,1332,1334,1336,1338,1341,1343,1346],{"class":647,"line":740},[645,1285,1286],{"class":655},"      {",[645,1288,1289],{"class":733}," id",[645,1291,746],{"class":655},[645,1293,685],{"class":655},[645,1295,1296],{"class":688},"insert",[645,1298,692],{"class":655},[645,1300,663],{"class":655},[645,1302,1303],{"class":733}," label",[645,1305,746],{"class":655},[645,1307,685],{"class":655},[645,1309,1310],{"class":688},"Insert",[645,1312,692],{"class":655},[645,1314,663],{"class":655},[645,1316,1317],{"class":733}," icon",[645,1319,746],{"class":655},[645,1321,1322],{"class":659}," insertIcon",[645,1324,663],{"class":655},[645,1326,1327],{"class":733}," group",[645,1329,746],{"class":655},[645,1331,685],{"class":655},[645,1333,1296],{"class":688},[645,1335,692],{"class":655},[645,1337,663],{"class":655},[645,1339,1340],{"class":733}," order",[645,1342,746],{"class":655},[645,1344,1345],{"class":950}," 40",[645,1347,1348],{"class":655}," },\n",[645,1350,1351,1354],{"class":647,"line":759},[645,1352,1353],{"class":659},"    ]",[645,1355,756],{"class":655},[645,1357,1358],{"class":647,"line":769},[645,1359,1360],{"class":655},"  },\n",[645,1362,1363,1366,1368,1371,1374,1376,1378,1381,1384],{"class":647,"line":807},[645,1364,1365],{"class":733},"  plugins",[645,1367,746],{"class":655},[645,1369,1370],{"class":659}," [",[645,1372,1373],{"class":715},"ChartsPlugin",[645,1375,719],{"class":659},[645,1377,663],{"class":655},[645,1379,1380],{"class":715}," TablePlugin",[645,1382,1383],{"class":659},"()]",[645,1385,756],{"class":655},[645,1387,1388,1391,1393],{"class":647,"line":848},[645,1389,1390],{"class":655},"}",[645,1392,802],{"class":659},[645,1394,695],{"class":655},[645,1396,1397],{"class":647,"line":854},[645,1398,702],{"emptyLinePlaceholder":701},[645,1400,1401],{"class":647,"line":870},[645,1402,1403],{"class":1246},"\u002F\u002F Flat bar — no dropdowns; plugin `menu: 'insert'` falls through to the bar\n",[645,1405,1406,1408,1410,1412,1414,1416,1419,1421,1423,1426,1428,1431,1434,1437,1439,1441,1443,1446,1448,1450],{"class":647,"line":891},[645,1407,1252],{"class":655},[645,1409,1255],{"class":715},[645,1411,1258],{"class":659},[645,1413,663],{"class":655},[645,1415,656],{"class":655},[645,1417,1418],{"class":733}," toolbar",[645,1420,746],{"class":655},[645,1422,656],{"class":655},[645,1424,1425],{"class":733}," menus",[645,1427,746],{"class":655},[645,1429,1430],{"class":659}," [] ",[645,1432,1433],{"class":655},"},",[645,1435,1436],{"class":733}," plugins",[645,1438,746],{"class":655},[645,1440,1370],{"class":659},[645,1442,1373],{"class":715},[645,1444,1445],{"class":659},"()] ",[645,1447,1390],{"class":655},[645,1449,802],{"class":659},[645,1451,695],{"class":655},[645,1453,1454],{"class":647,"line":908},[645,1455,702],{"emptyLinePlaceholder":701},[645,1457,1458],{"class":647,"line":925},[645,1459,1460],{"class":1246},"\u002F\u002F Top-level button (group → separators, group-aware sort)\n",[645,1462,1463,1465,1467,1469,1471,1473,1475],{"class":647,"line":942},[645,1464,863],{"class":659},[645,1466,876],{"class":655},[645,1468,879],{"class":659},[645,1470,876],{"class":655},[645,1472,884],{"class":715},[645,1474,734],{"class":659},[645,1476,737],{"class":655},[645,1478,1479,1482,1484,1486,1489,1491],{"class":647,"line":956},[645,1480,1481],{"class":733},"  id",[645,1483,746],{"class":655},[645,1485,685],{"class":655},[645,1487,1488],{"class":688},"font-settings",[645,1490,692],{"class":655},[645,1492,756],{"class":655},[645,1494,1495,1498,1500,1503],{"class":647,"line":996},[645,1496,1497],{"class":733},"  icon",[645,1499,746],{"class":655},[645,1501,1502],{"class":659}," fontIcon",[645,1504,756],{"class":655},[645,1506,1507,1510,1512,1514,1516,1518],{"class":647,"line":1006},[645,1508,1509],{"class":733},"  group",[645,1511,746],{"class":655},[645,1513,685],{"class":655},[645,1515,935],{"class":688},[645,1517,692],{"class":655},[645,1519,756],{"class":655},[645,1521,1522,1525,1527,1530],{"class":647,"line":1011},[645,1523,1524],{"class":733},"  order",[645,1526,746],{"class":655},[645,1528,1529],{"class":950}," 14",[645,1531,756],{"class":655},[645,1533,1534,1537,1539,1542],{"class":647,"line":1021},[645,1535,1536],{"class":733},"  onClick",[645,1538,746],{"class":655},[645,1540,1541],{"class":659}," openFont",[645,1543,756],{"class":655},[645,1545,1547,1549,1551],{"class":647,"line":1546},21,[645,1548,1390],{"class":655},[645,1550,802],{"class":659},[645,1552,695],{"class":655},[645,1554,1556],{"class":647,"line":1555},22,[645,1557,702],{"emptyLinePlaceholder":701},[645,1559,1561],{"class":647,"line":1560},23,[645,1562,1563],{"class":1246},"\u002F\u002F Overflow item — only if host registered that menu id\n",[645,1565,1567,1569,1571,1573,1575,1577,1579],{"class":647,"line":1566},24,[645,1568,863],{"class":659},[645,1570,876],{"class":655},[645,1572,879],{"class":659},[645,1574,876],{"class":655},[645,1576,884],{"class":715},[645,1578,734],{"class":659},[645,1580,737],{"class":655},[645,1582,1584,1586,1588,1590,1592,1594],{"class":647,"line":1583},25,[645,1585,1481],{"class":733},[645,1587,746],{"class":655},[645,1589,685],{"class":655},[645,1591,1077],{"class":688},[645,1593,692],{"class":655},[645,1595,756],{"class":655},[645,1597,1599,1601,1603,1606],{"class":647,"line":1598},26,[645,1600,1497],{"class":733},[645,1602,746],{"class":655},[645,1604,1605],{"class":659}," tableIcon",[645,1607,756],{"class":655},[645,1609,1611,1614,1616,1618,1620,1622],{"class":647,"line":1610},27,[645,1612,1613],{"class":733},"  menu",[645,1615,746],{"class":655},[645,1617,685],{"class":655},[645,1619,1296],{"class":688},[645,1621,692],{"class":655},[645,1623,756],{"class":655},[645,1625,1627,1629,1631,1634],{"class":647,"line":1626},28,[645,1628,1524],{"class":733},[645,1630,746],{"class":655},[645,1632,1633],{"class":950}," 30",[645,1635,756],{"class":655},[645,1637,1639,1641,1643,1646],{"class":647,"line":1638},29,[645,1640,1536],{"class":733},[645,1642,746],{"class":655},[645,1644,1645],{"class":659}," openTablePicker",[645,1647,756],{"class":655},[645,1649,1651,1653,1655],{"class":647,"line":1650},30,[645,1652,1390],{"class":655},[645,1654,802],{"class":659},[645,1656,695],{"class":655},[645,1658,1660],{"class":647,"line":1659},31,[645,1661,702],{"emptyLinePlaceholder":701},[645,1663,1665],{"class":647,"line":1664},32,[645,1666,1667],{"class":1246},"\u002F\u002F Plugin factory placement (optional)\n",[645,1669,1671,1673,1675,1678],{"class":647,"line":1670},33,[645,1672,1373],{"class":715},[645,1674,719],{"class":659},[645,1676,1677],{"class":655},";",[645,1679,1680],{"class":1246}," \u002F\u002F default menu: 'insert'\n",[645,1682,1684,1686,1688,1691,1694,1696,1699,1701,1703,1705],{"class":647,"line":1683},34,[645,1685,1373],{"class":715},[645,1687,734],{"class":659},[645,1689,1690],{"class":655},"{",[645,1692,1693],{"class":733}," menu",[645,1695,746],{"class":655},[645,1697,1698],{"class":655}," null",[645,1700,679],{"class":655},[645,1702,802],{"class":659},[645,1704,1677],{"class":655},[645,1706,1707],{"class":1246}," \u002F\u002F always on the bar\n",[645,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1736,1738,1740],{"class":647,"line":1710},35,[645,1712,1373],{"class":715},[645,1714,734],{"class":659},[645,1716,1690],{"class":655},[645,1718,1693],{"class":733},[645,1720,746],{"class":655},[645,1722,685],{"class":655},[645,1724,1296],{"class":688},[645,1726,692],{"class":655},[645,1728,663],{"class":655},[645,1730,1340],{"class":733},[645,1732,746],{"class":655},[645,1734,1735],{"class":950}," 50",[645,1737,679],{"class":655},[645,1739,802],{"class":659},[645,1741,695],{"class":655},[645,1743,1745],{"class":647,"line":1744},36,[645,1746,702],{"emptyLinePlaceholder":701},[645,1748,1750],{"class":647,"line":1749},37,[645,1751,1752],{"class":1246},"\u002F\u002F Custom menu (any plugin may define one — then add items to it)\n",[645,1754,1756,1758,1760,1762,1764,1766,1768],{"class":647,"line":1755},38,[645,1757,863],{"class":659},[645,1759,876],{"class":655},[645,1761,879],{"class":659},[645,1763,876],{"class":655},[645,1765,1235],{"class":715},[645,1767,734],{"class":659},[645,1769,737],{"class":655},[645,1771,1773,1775,1777,1779,1782,1784],{"class":647,"line":1772},39,[645,1774,1481],{"class":733},[645,1776,746],{"class":655},[645,1778,685],{"class":655},[645,1780,1781],{"class":688},"acme",[645,1783,692],{"class":655},[645,1785,756],{"class":655},[645,1787,1789,1792,1794,1796,1799,1801],{"class":647,"line":1788},40,[645,1790,1791],{"class":733},"  label",[645,1793,746],{"class":655},[645,1795,685],{"class":655},[645,1797,1798],{"class":688},"Acme",[645,1800,692],{"class":655},[645,1802,756],{"class":655},[645,1804,1806,1808,1810,1812,1815,1817],{"class":647,"line":1805},41,[645,1807,1509],{"class":733},[645,1809,746],{"class":655},[645,1811,685],{"class":655},[645,1813,1814],{"class":688},"tools",[645,1816,692],{"class":655},[645,1818,756],{"class":655},[645,1820,1822,1824,1826,1829],{"class":647,"line":1821},42,[645,1823,1524],{"class":733},[645,1825,746],{"class":655},[645,1827,1828],{"class":950}," 70",[645,1830,756],{"class":655},[645,1832,1834,1836,1838],{"class":647,"line":1833},43,[645,1835,1390],{"class":655},[645,1837,802],{"class":659},[645,1839,695],{"class":655},[645,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1866,1868,1870,1872,1874,1876,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1902,1904,1907,1909,1912,1914,1916],{"class":647,"line":1842},44,[645,1844,863],{"class":659},[645,1846,876],{"class":655},[645,1848,879],{"class":659},[645,1850,876],{"class":655},[645,1852,884],{"class":715},[645,1854,734],{"class":659},[645,1856,1690],{"class":655},[645,1858,1289],{"class":733},[645,1860,746],{"class":655},[645,1862,685],{"class":655},[645,1864,1865],{"class":688},"acme-x",[645,1867,692],{"class":655},[645,1869,663],{"class":655},[645,1871,1303],{"class":733},[645,1873,746],{"class":655},[645,1875,685],{"class":655},[645,1877,1878],{"class":688},"X",[645,1880,692],{"class":655},[645,1882,663],{"class":655},[645,1884,1693],{"class":733},[645,1886,746],{"class":655},[645,1888,685],{"class":655},[645,1890,1781],{"class":688},[645,1892,692],{"class":655},[645,1894,663],{"class":655},[645,1896,1340],{"class":733},[645,1898,746],{"class":655},[645,1900,1901],{"class":950}," 1",[645,1903,663],{"class":655},[645,1905,1906],{"class":733}," onClick",[645,1908,746],{"class":655},[645,1910,1911],{"class":659}," … ",[645,1913,1390],{"class":655},[645,1915,802],{"class":659},[645,1917,695],{"class":655},[1077,1919,1920,1930],{},[1080,1921,1922],{},[1083,1923,1924,1927],{},[1086,1925,1926],{},"Placement",[1086,1928,1929],{},"How",[1093,1931,1932,1953,1971,1979],{},[1083,1933,1934,1937],{},[1098,1935,1936],{},"Bar",[1098,1938,1939,1942,1943,1942,1946,1949,1950,1952],{},[642,1940,1941],{},"toolbar.add"," ",[1033,1944,1945],{},"without",[642,1947,1948],{},"menu",", or ",[642,1951,1948],{}," id missing from config",[1083,1954,1955,1958],{},[1098,1956,1957],{},"Named dropdown",[1098,1959,1960,1942,1963,1966,1967,1061,1969],{},[642,1961,1962],{},"toolbar.add({ menu: 'insert' })",[1033,1964,1965],{},"and"," that id is in ",[642,1968,1231],{},[642,1970,1235],{},[1083,1972,1973,1976],{},[1098,1974,1975],{},"Empty menu",[1098,1977,1978],{},"Trigger is hidden until at least one item exists",[1083,1980,1981,1984],{},[1098,1982,1983],{},"Flat host",[1098,1985,1986,1989,1990,1993],{},[642,1987,1988],{},"toolbar: { menus: [] }"," — every ",[642,1991,1992],{},"menu:"," target becomes a bar button",[1026,1995,1996,1997,2002,2003,1045,2007,1045,2012,1038,2016,2019,2020,1061,2023,876],{},"Default menus when ",[1033,1998,1999,2001],{},[642,2000,879],{}," is omitted",": ",[1033,2004,2005],{},[642,2006,1296],{},[1033,2008,2009],{},[642,2010,2011],{},"review",[1033,2013,2014],{},[642,2015,1814],{},[642,2017,2018],{},"defaultWysiwygToolbarMenus","). SDK helpers: ",[642,2021,2022],{},"PluginToolbarOpts",[642,2024,2025],{},"pluginToolbarPlacement",[1026,2027,2028,2031,2032,2034],{},[642,2029,2030],{},"ToolbarPlugin()"," only adds B\u002FI\u002FU\u002FS marks. It does ",[1033,2033,1166],{}," own the panel.",[1072,2036,2038],{"id":2037},"portals-teleport","Portals (Teleport)",[1026,2040,2041,2042,2045,2046,746],{},"Overlays must not live under the editor host (transforms \u002F overflow break ",[642,2043,2044],{},"position: fixed",").\nSDK portals mirror Vue ",[642,2047,2048],{},"\u003CTeleport>",[635,2050,2052],{"className":637,"code":2051,"language":639,"meta":640,"style":640},"import { createPortal, teleport, h, getPortalRoot } from 'on-codemerge\u002Fsdk';\n\nconst portal = createPortal(h('div', { class: 'my-layer' }, 'Hi'), { to: 'popup' });\nportal.destroy();\n\nh('div', null, ['inline', teleport('body', h('div', { class: 'floating' }, 'away'))]);\n",[642,2053,2054,2090,2094,2171,2185,2189],{"__ignoreMap":640},[645,2055,2056,2058,2060,2063,2065,2068,2070,2073,2075,2078,2080,2082,2084,2086,2088],{"class":647,"line":648},[645,2057,652],{"class":651},[645,2059,656],{"class":655},[645,2061,2062],{"class":659}," createPortal",[645,2064,663],{"class":655},[645,2066,2067],{"class":659}," teleport",[645,2069,663],{"class":655},[645,2071,2072],{"class":659}," h",[645,2074,663],{"class":655},[645,2076,2077],{"class":659}," getPortalRoot",[645,2079,679],{"class":655},[645,2081,682],{"class":651},[645,2083,685],{"class":655},[645,2085,689],{"class":688},[645,2087,692],{"class":655},[645,2089,695],{"class":655},[645,2091,2092],{"class":647,"line":698},[645,2093,702],{"emptyLinePlaceholder":701},[645,2095,2096,2099,2102,2105,2107,2109,2112,2114,2116,2119,2121,2123,2125,2128,2130,2132,2135,2137,2140,2142,2145,2147,2149,2151,2153,2156,2158,2160,2163,2165,2167,2169],{"class":647,"line":705},[645,2097,2098],{"class":711},"const",[645,2100,2101],{"class":659}," portal ",[645,2103,2104],{"class":655},"=",[645,2106,2062],{"class":715},[645,2108,734],{"class":659},[645,2110,2111],{"class":715},"h",[645,2113,734],{"class":659},[645,2115,692],{"class":655},[645,2117,2118],{"class":688},"div",[645,2120,692],{"class":655},[645,2122,663],{"class":655},[645,2124,656],{"class":655},[645,2126,2127],{"class":733}," class",[645,2129,746],{"class":655},[645,2131,685],{"class":655},[645,2133,2134],{"class":688},"my-layer",[645,2136,692],{"class":655},[645,2138,2139],{"class":655}," },",[645,2141,685],{"class":655},[645,2143,2144],{"class":688},"Hi",[645,2146,692],{"class":655},[645,2148,802],{"class":659},[645,2150,663],{"class":655},[645,2152,656],{"class":655},[645,2154,2155],{"class":733}," to",[645,2157,746],{"class":655},[645,2159,685],{"class":655},[645,2161,2162],{"class":688},"popup",[645,2164,692],{"class":655},[645,2166,679],{"class":655},[645,2168,802],{"class":659},[645,2170,695],{"class":655},[645,2172,2173,2176,2178,2181,2183],{"class":647,"line":725},[645,2174,2175],{"class":659},"portal",[645,2177,876],{"class":655},[645,2179,2180],{"class":715},"destroy",[645,2182,719],{"class":659},[645,2184,695],{"class":655},[645,2186,2187],{"class":647,"line":740},[645,2188,702],{"emptyLinePlaceholder":701},[645,2190,2191,2193,2195,2197,2199,2201,2203,2206,2208,2210,2213,2215,2217,2219,2221,2223,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2253,2255,2257,2259,2262,2264,2267],{"class":647,"line":759},[645,2192,2111],{"class":715},[645,2194,734],{"class":659},[645,2196,692],{"class":655},[645,2198,2118],{"class":688},[645,2200,692],{"class":655},[645,2202,663],{"class":655},[645,2204,2205],{"class":655}," null,",[645,2207,1370],{"class":659},[645,2209,692],{"class":655},[645,2211,2212],{"class":688},"inline",[645,2214,692],{"class":655},[645,2216,663],{"class":655},[645,2218,2067],{"class":715},[645,2220,734],{"class":659},[645,2222,692],{"class":655},[645,2224,2225],{"class":688},"body",[645,2227,692],{"class":655},[645,2229,663],{"class":655},[645,2231,2072],{"class":715},[645,2233,734],{"class":659},[645,2235,692],{"class":655},[645,2237,2118],{"class":688},[645,2239,692],{"class":655},[645,2241,663],{"class":655},[645,2243,656],{"class":655},[645,2245,2127],{"class":733},[645,2247,746],{"class":655},[645,2249,685],{"class":655},[645,2251,2252],{"class":688},"floating",[645,2254,692],{"class":655},[645,2256,2139],{"class":655},[645,2258,685],{"class":655},[645,2260,2261],{"class":688},"away",[645,2263,692],{"class":655},[645,2265,2266],{"class":659},"))])",[645,2268,695],{"class":655},[1026,2270,2271,2272,2274,2275,2274,2277,2274,2279,2282,2283,2286,2287,2290,2291,2294],{},"Named roots (",[642,2273,2225],{}," | ",[642,2276,1948],{},[642,2278,2162],{},[642,2280,2281],{},"notify",") live under ",[642,2284,2285],{},"document.body"," as\n",[642,2288,2289],{},"[data-ocm-portal=\"…\"]",". Popup \u002F context menu \u002F notify \u002F toolbar dropdowns use them.\nOverride with ",[642,2292,2293],{},"setPortalRoot('popup', el)"," for shadow DOM \u002F iframe hosts.",[1072,2296,2298,2299,2302],{"id":2297},"publish-publish-runtimes","Publish (",[642,2300,2301],{},"publish"," + runtimes)",[1026,2304,2305,2306,2308],{},"Atoms that need rich public markup declare ",[642,2307,2301],{}," on the plugin:",[635,2310,2312],{"className":637,"code":2311,"language":639,"meta":640,"style":640},"publish: {\n  node: 'timer',\n  runtime: 'timer',\n  render: (attrs) => manager.timerView(parse(attrs.payload)),\n},\n",[642,2313,2314,2323,2339,2354,2397],{"__ignoreMap":640},[645,2315,2316,2319,2321],{"class":647,"line":648},[645,2317,2301],{"class":2318},"sBMFI",[645,2320,746],{"class":655},[645,2322,722],{"class":655},[645,2324,2325,2328,2330,2332,2335,2337],{"class":647,"line":698},[645,2326,2327],{"class":2318},"  node",[645,2329,746],{"class":655},[645,2331,685],{"class":655},[645,2333,2334],{"class":688},"timer",[645,2336,692],{"class":655},[645,2338,756],{"class":655},[645,2340,2341,2344,2346,2348,2350,2352],{"class":647,"line":705},[645,2342,2343],{"class":2318},"  runtime",[645,2345,746],{"class":655},[645,2347,685],{"class":655},[645,2349,2334],{"class":688},[645,2351,692],{"class":655},[645,2353,756],{"class":655},[645,2355,2356,2359,2361,2363,2366,2368,2370,2373,2375,2378,2380,2383,2385,2387,2389,2392,2395],{"class":647,"line":725},[645,2357,2358],{"class":2318},"  render",[645,2360,746],{"class":655},[645,2362,1038],{"class":655},[645,2364,2365],{"class":862},"attrs",[645,2367,802],{"class":655},[645,2369,967],{"class":711},[645,2371,2372],{"class":659}," manager",[645,2374,876],{"class":655},[645,2376,2377],{"class":715},"timerView",[645,2379,734],{"class":733},[645,2381,2382],{"class":715},"parse",[645,2384,734],{"class":733},[645,2386,2365],{"class":659},[645,2388,876],{"class":655},[645,2390,2391],{"class":659},"payload",[645,2393,2394],{"class":733},"))",[645,2396,756],{"class":655},[645,2398,2399],{"class":647,"line":740},[645,2400,2401],{"class":655},"},\n",[2403,2404,2405,2415,2426],"ul",{},[1182,2406,2407,2410,2411,2414],{},[642,2408,2409],{},"editor.getPublishedHTML()"," runs each ",[642,2412,2413],{},"publish.render"," via ViewSpec → HTML.",[1182,2416,2417,2418,2421,2422,2425],{},"Interactive widgets register a runtime under ",[642,2419,2420],{},"plugins\u002F*\u002Fpublish\u002Fruntime.ts"," (bundled into ",[642,2423,2424],{},"dist\u002Fpublic.js",").",[1182,2427,2428,2429,2432,2433,2436],{},"Semantic ",[642,2430,2431],{},"getHTML()"," keeps empty ",[642,2434,2435],{},"data-node"," shells for round-trip.",[1026,2438,2439,2440,2443,2444,876],{},"Full export list: ",[2441,2442,606],"a",{"href":607},". Boundaries: ",[2441,2445,19],{"href":20},[1072,2447,2449],{"id":2448},"migrating-from-v1","Migrating from v1",[1026,2451,2452,2453,876],{},"See ",[2441,2454,23],{"href":24},[2456,2457,2458],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":640,"searchDepth":698,"depth":705,"links":2460},[2461,2462,2463,2464,2465,2467],{"id":1074,"depth":698,"text":1075},{"id":1176,"depth":698,"text":1177},{"id":1214,"depth":698,"text":1215},{"id":2037,"depth":698,"text":2038},{"id":2297,"depth":698,"text":2466},"Publish (publish + runtimes)",{"id":2448,"depth":698,"text":2449},"Plugins import the SDK via the published path on-codemerge\u002Fsdk (workspace may alias @codemerge\u002Fsdk to sources). App helpers under src\u002Futils are package-internal — third-party plugins should use only the public SDK, not deep imports into that folder.","md",null,{},{"title":614,"description":2468},"TNvj0TX3u7pcMgPFQ8QoLsFJX4SY4EFxmUs4oYdEY0A",[2475,2477],{"title":610,"path":611,"stem":612,"description":2476,"children":-1},"Tiny zero-dependency DOM runtime: hyperscript h, mount, portals, file helpers, and DisposableScope — without the editor kernel or plugin chrome.",{"title":618,"path":619,"stem":620,"description":2478,"children":-1},"Sync Mermaid-subset SVG renderer used by Markdown preview\u002Fpublish and Charts (most types). It is not the full Mermaid.js engine: no CDN, no CSS injection, presentation attributes only.",1794129103353]