[{"data":1,"prerenderedAt":1322},["ShallowReactive",2],{"navigation_docs":3,"-reference-dependency-rules":412,"-reference-dependency-rules-surround":1317},[4,38,84,326,386],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":37},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,24,28,32],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Quick start: Nuxt","\u002Fgetting-started\u002Fquick-start-nuxt","1.getting-started\u002F3.quick-start-nuxt",{"title":25,"path":26,"stem":27,"icon":6},"Quick start: plain Vue","\u002Fgetting-started\u002Fquick-start-vue","1.getting-started\u002F4.quick-start-vue",{"title":29,"path":30,"stem":31,"icon":6},"Quick start: React","\u002Fgetting-started\u002Fquick-start-react","1.getting-started\u002F5.quick-start-react",{"title":33,"path":34,"stem":35,"icon":36},"Glossary","\u002Fgetting-started\u002Fglossary","1.getting-started\u002F6.glossary","i-lucide-book-a",false,{"title":39,"icon":40,"path":41,"stem":42,"children":43,"page":37},"Tutorial","i-lucide-graduation-cap","\u002Ftutorial","2.tutorial",[44,49,54,59,64,69,74,79],{"title":45,"path":46,"stem":47,"icon":48},"Tutorial: overview","\u002Ftutorial\u002Foverview","2.tutorial\u002F1.overview","i-lucide-map",{"title":50,"path":51,"stem":52,"icon":53},"Chapter 2: A simple editor","\u002Ftutorial\u002Fsimple-editor","2.tutorial\u002F2.simple-editor","i-lucide-pencil",{"title":55,"path":56,"stem":57,"icon":58},"Chapter 3: Compose features","\u002Ftutorial\u002Fcompose-features","2.tutorial\u002F3.compose-features","i-lucide-blocks",{"title":60,"path":61,"stem":62,"icon":63},"Chapter 4: Your own block, path A","\u002Ftutorial\u002Fown-block-path-a","2.tutorial\u002F4.own-block-path-a","i-lucide-square-plus",{"title":65,"path":66,"stem":67,"icon":68},"Chapter 5: Your own feature, path B","\u002Ftutorial\u002Fown-feature-path-b","2.tutorial\u002F5.own-feature-path-b","i-lucide-puzzle",{"title":70,"path":71,"stem":72,"icon":73},"Chapter 6: Backend and collaboration","\u002Ftutorial\u002Fbackend-and-collaboration","2.tutorial\u002F6.backend-and-collaboration","i-lucide-users",{"title":75,"path":76,"stem":77,"icon":78},"Chapter 7: AI","\u002Ftutorial\u002Fai","2.tutorial\u002F7.ai","i-lucide-sparkles",{"title":80,"path":81,"stem":82,"icon":83},"Chapter 8: The React surface","\u002Ftutorial\u002Freact-surface","2.tutorial\u002F8.react-surface","i-lucide-atom",{"title":85,"icon":14,"path":86,"stem":87,"children":88,"page":37},"Guides","\u002Fguides","3.guides",[89,93,98,103,108,112,116,121,126,130,134,139,144,149,154,159,164,169,174,179,184,189,194,199,204,209,213,218,223,228,233,237,242,247,251,256,261,266,271,276,281,286,291,295,302,307,311,316,321],{"title":90,"path":91,"stem":92,"icon":58},"Feature composition and entries","\u002Fguides\u002Fcomposition","3.guides\u002F1.composition",{"title":94,"path":95,"stem":96,"icon":97},"Media, mentions and transcript features","\u002Fguides\u002Fmedia-mentions-transcript","3.guides\u002F10.media-mentions-transcript","i-lucide-image",{"title":99,"path":100,"stem":101,"icon":102},"Authors and comments","\u002Fguides\u002Fauthors-and-comments","3.guides\u002F11.authors-and-comments","i-lucide-message-square-text",{"title":104,"path":105,"stem":106,"icon":107},"Themes (Obsidian)","\u002Fguides\u002Fthemes","3.guides\u002F12.themes","i-lucide-palette",{"title":109,"path":110,"stem":111,"icon":58},"Composites and the settings UI","\u002Fguides\u002Fcomposites","3.guides\u002F13.composites",{"title":113,"path":114,"stem":115,"icon":78},"AI","\u002Fguides\u002Fai","3.guides\u002F14.ai",{"title":117,"path":118,"stem":119,"icon":120},"Document tree","\u002Fguides\u002Fdocument-tree","3.guides\u002F15.document-tree","i-lucide-folder-tree",{"title":122,"path":123,"stem":124,"icon":125},"Markdown and code","\u002Fguides\u002Fmarkdown-and-code","3.guides\u002F16.markdown-and-code","i-lucide-file-code",{"title":127,"path":128,"stem":129,"icon":83},"Advanced editor in React","\u002Fguides\u002Fadvanced-react","3.guides\u002F17.advanced-react",{"title":131,"path":132,"stem":133,"icon":6},"Kitchen sink: learning path","\u002Fguides\u002Fadvanced-nuxt-example","3.guides\u002F18.advanced-nuxt-example",{"title":135,"path":136,"stem":137,"icon":138},"Production","\u002Fguides\u002Fproduction","3.guides\u002F19.production","i-lucide-server",{"title":140,"path":141,"stem":142,"icon":143},"Register the Nuxt module","\u002Fguides\u002Fnuxt-module","3.guides\u002F2.nuxt-module","i-lucide-package",{"title":145,"path":146,"stem":147,"icon":148},"Storage adapters, comment stores, Nitro host","\u002Fguides\u002Fstorage-adapters","3.guides\u002F20.storage-adapters","i-lucide-database",{"title":150,"path":151,"stem":152,"icon":153},"Migrating from #tiptap-editor","\u002Fguides\u002Fmigration","3.guides\u002F21.migration","i-lucide-arrow-right-left",{"title":155,"path":156,"stem":157,"icon":158},"Content tree mechanics","\u002Fguides\u002Fcontent-tree","3.guides\u002F22.content-tree","i-lucide-git-fork",{"title":160,"path":161,"stem":162,"icon":163},"Block capabilities, abilities and actions","\u002Fguides\u002Fblock-capabilities","3.guides\u002F23.block-capabilities","i-lucide-shield-check",{"title":165,"path":166,"stem":167,"icon":168},"Block types in code and JSON","\u002Fguides\u002Fblock-types","3.guides\u002F24.block-types","i-lucide-shapes",{"title":170,"path":171,"stem":172,"icon":173},"Derive methods and the Derivation index","\u002Fguides\u002Fderive-methods","3.guides\u002F25.derive-methods","i-lucide-git-branch-plus",{"title":175,"path":176,"stem":177,"icon":178},"Block properties and Property definitions","\u002Fguides\u002Fblock-properties","3.guides\u002F26.block-properties","i-lucide-sliders-horizontal",{"title":180,"path":181,"stem":182,"icon":183},"Image studio","\u002Fguides\u002Fimage-studio","3.guides\u002F27.image-studio","i-lucide-image-plus",{"title":185,"path":186,"stem":187,"icon":188},"Prüfung and Freigabestatus","\u002Fguides\u002Fpruefung","3.guides\u002F28.pruefung","i-lucide-stamp",{"title":190,"path":191,"stem":192,"icon":193},"Workspace: find, read, reference and embed Blocks across Documents","\u002Fguides\u002Fworkspace","3.guides\u002F29.workspace","i-lucide-network",{"title":195,"path":196,"stem":197,"icon":198},"EditorPorts: auth and storage","\u002Fguides\u002Feditor-ports","3.guides\u002F3.editor-ports","i-lucide-plug",{"title":200,"path":201,"stem":202,"icon":203},"Collections: an ordered list of Blocks","\u002Fguides\u002Fcollections","3.guides\u002F30.collections","i-lucide-list-checks",{"title":205,"path":206,"stem":207,"icon":208},"Data views: a query shown as table, list or board","\u002Fguides\u002Fdata-views","3.guides\u002F31.data-views","i-lucide-table-properties",{"title":210,"path":211,"stem":212,"icon":193},"Explore: backlinks, related Blocks and the trail","\u002Fguides\u002Fexplore","3.guides\u002F32.explore",{"title":214,"path":215,"stem":216,"icon":217},"Render: export a Block or a Document to a file","\u002Fguides\u002Frender","3.guides\u002F33.render","i-lucide-file-output",{"title":219,"path":220,"stem":221,"icon":222},"Importers: what a dropped file becomes","\u002Fguides\u002Fimporters","3.guides\u002F34.importers","i-lucide-file-input",{"title":224,"path":225,"stem":226,"icon":227},"Templates: start a Document from a Dokumentvorlage","\u002Fguides\u002Ftemplates","3.guides\u002F35.templates","i-lucide-file-stack",{"title":229,"path":230,"stem":231,"icon":232},"Citations","\u002Fguides\u002Fcitations","3.guides\u002F36.citations","i-lucide-quote",{"title":234,"path":235,"stem":236,"icon":163},"AI proposals and the export check","\u002Fguides\u002Fexport-check","3.guides\u002F37.export-check",{"title":238,"path":239,"stem":240,"icon":241},"Query: filter, sort, group and total Blocks","\u002Fguides\u002Fquery","3.guides\u002F38.query","i-lucide-list-filter",{"title":243,"path":244,"stem":245,"icon":246},"Edges: backlinks and authored connections","\u002Fguides\u002Fedges","3.guides\u002F39.edges","i-lucide-link-2",{"title":248,"path":249,"stem":250,"icon":163},"Server routes and authentication","\u002Fguides\u002Froutes-and-auth","3.guides\u002F4.routes-and-auth",{"title":252,"path":253,"stem":254,"icon":255},"Speech: text to audio, and subtitle files","\u002Fguides\u002Fspeech","3.guides\u002F41.speech","i-lucide-audio-lines",{"title":257,"path":258,"stem":259,"icon":260},"Graph: the Edges around a Block","\u002Fguides\u002Fgraph","3.guides\u002F42.graph","i-lucide-waypoints",{"title":262,"path":263,"stem":264,"icon":265},"PDF viewer: passages, anchors and quotes","\u002Fguides\u002Fpdf-viewer","3.guides\u002F43.pdf-viewer","i-lucide-file-search",{"title":267,"path":268,"stem":269,"icon":270},"Obsidian: import and export a vault","\u002Fguides\u002Fobsidian","3.guides\u002F44.obsidian","i-lucide-folder-input",{"title":272,"path":273,"stem":274,"icon":275},"Typst: render a Document as a PDF with citations","\u002Fguides\u002Ftypst","3.guides\u002F45.typst","i-lucide-file-text",{"title":277,"path":278,"stem":279,"icon":280},"Audio: read aloud, mixdown and ElevenLabs","\u002Fguides\u002Faudio","3.guides\u002F46.audio","i-lucide-audio-waveform",{"title":282,"path":283,"stem":284,"icon":285},"Slides: decks, slide layouts and exports","\u002Fguides\u002Fslides","3.guides\u002F47.slides","i-lucide-presentation",{"title":287,"path":288,"stem":289,"icon":290},"Knowledge graph: sources and concepts beside the Documents","\u002Fguides\u002Fknowledge-graph","3.guides\u002F49.knowledge-graph","i-lucide-share-2",{"title":292,"path":293,"stem":294,"icon":78},"AI configuration and secrets","\u002Fguides\u002Fai-configuration","3.guides\u002F5.ai-configuration",{"title":296,"path":297,"stem":298,"children":299,"icon":301},"Index on Postgres: typos, meaning and SQL pushdown","\u002Fguides\u002Findex-pg","3.guides\u002F50.index-pg",[300],{"title":296,"path":297,"stem":298,"icon":301},"i-lucide-database-zap",{"title":303,"path":304,"stem":305,"icon":306},"Charts: bar, line, pie and scatter over a query","\u002Fguides\u002Fcharts","3.guides\u002F51.charts","i-lucide-chart-column",{"title":308,"path":309,"stem":310,"icon":73},"Collaboration on the client","\u002Fguides\u002Fcollaboration","3.guides\u002F6.collaboration",{"title":312,"path":313,"stem":314,"icon":315},"Block UI (drag handle, hover actions)","\u002Fguides\u002Fblock-ui","3.guides\u002F7.block-ui","i-lucide-grip-vertical",{"title":317,"path":318,"stem":319,"icon":320},"Settings and app lifetime","\u002Fguides\u002Fsettings","3.guides\u002F8.settings","i-lucide-settings",{"title":322,"path":323,"stem":324,"icon":325},"Language","\u002Fguides\u002Flanguage","3.guides\u002F9.language","i-lucide-languages",{"title":327,"icon":14,"path":328,"stem":329,"children":330,"page":37},"Reference","\u002Freference","4.reference",[331,335,339,344,348,352,356,360,364,368,373,378,382],{"title":332,"path":333,"stem":334,"icon":143},"Public exports","\u002Freference\u002Fexports","4.reference\u002F1.exports",{"title":336,"path":337,"stem":338,"icon":173},"Derive method contract","\u002Freference\u002Fderive-methods","4.reference\u002F10.derive-methods",{"title":340,"path":341,"stem":342,"icon":343},"Changelog","\u002Freference\u002Fchangelog","4.reference\u002F11.changelog","i-lucide-history",{"title":345,"path":346,"stem":347,"icon":217},"Renderer port","\u002Freference\u002Frenderer-port","4.reference\u002F12.renderer-port",{"title":349,"path":350,"stem":351,"icon":255},"Speech port","\u002Freference\u002Fspeech-port","4.reference\u002F13.speech-port",{"title":353,"path":354,"stem":355,"icon":58},"Presets and features","\u002Freference\u002Fpresets-and-features","4.reference\u002F2.presets-and-features",{"title":357,"path":358,"stem":359,"icon":68},"Feature contract","\u002Freference\u002Ffeature-contract","4.reference\u002F3.feature-contract",{"title":361,"path":362,"stem":363,"icon":107},"CSS and UI-provider requirements","\u002Freference\u002Fcss-and-ui","4.reference\u002F4.css-and-ui",{"title":365,"path":366,"stem":367,"icon":148},"Vue-free advanced schema","\u002Freference\u002Fadvanced-schema","4.reference\u002F5.advanced-schema",{"title":369,"path":370,"stem":371,"icon":372},"Dependency rules","\u002Freference\u002Fdependency-rules","4.reference\u002F6.dependency-rules","i-lucide-git-branch",{"title":374,"path":375,"stem":376,"icon":377},"Commands","\u002Freference\u002Fcommands","4.reference\u002F7.commands","i-lucide-terminal",{"title":379,"path":380,"stem":381,"icon":163},"Block capability contract","\u002Freference\u002Fblock-capabilities","4.reference\u002F8.block-capabilities",{"title":383,"path":384,"stem":385,"icon":168},"Block type contract","\u002Freference\u002Fblock-types","4.reference\u002F9.block-types",{"title":387,"path":388,"stem":389,"children":390,"icon":393},"AI agents","\u002Fai-agents","5.ai-agents\u002F1.index",[391,394,398,402,407],{"title":392,"path":388,"stem":389,"icon":393},"Overview","i-lucide-bot",{"title":395,"path":396,"stem":397,"icon":198},"Integrate the editor","\u002Fai-agents\u002Fintegrate","5.ai-agents\u002F2.integrate",{"title":399,"path":400,"stem":401,"icon":68},"Add a block or feature","\u002Fai-agents\u002Fextend","5.ai-agents\u002F3.extend",{"title":403,"path":404,"stem":405,"icon":406},"Pitfalls and invariants","\u002Fai-agents\u002Finvariants","5.ai-agents\u002F4.invariants","i-lucide-shield-alert",{"title":408,"path":409,"stem":410,"icon":411},"Verify","\u002Fai-agents\u002Fverify","5.ai-agents\u002F5.verify","i-lucide-check-check",{"id":413,"title":369,"body":414,"description":1310,"extension":1311,"links":1312,"meta":1313,"navigation":1314,"path":370,"seo":1315,"stem":371,"__hash__":1316},"docs\u002F4.reference\u002F6.dependency-rules.md",{"type":415,"value":416,"toc":1305},"minimark",[417,426,986,1081,1122,1175,1192,1263,1268],[418,419,420,421,425],"p",{},"Imports inside ",[422,423,424],"code",{},"packages\u002Feditor\u002Fsrc"," follow one direction; the entry checks enforce them on the emitted bundles.",[427,428,429,445],"table",{},[430,431,432],"thead",{},[433,434,435,439,442],"tr",{},[436,437,438],"th",{},"Layer",[436,440,441],{},"May import",[436,443,444],{},"Must not import",[446,447,448,501,555,612,634,657,682,748,801,840,855,890,915,969],"tbody",{},[433,449,450,460,478],{},[451,452,453,456,457],"td",{},[422,454,455],{},"core",", ",[422,458,459],{},"settings",[451,461,462,463,456,466,456,469,456,472,456,475],{},"each other, external packages other than ",[422,464,465],{},"vue",[422,467,468],{},"@tiptap\u002Fvue-3",[422,470,471],{},"@nuxt\u002Fui",[422,473,474],{},"react",[422,476,477],{},"sonner",[451,479,480,481,456,484,487,488,456,491,494,495,456,498],{},"those, ",[422,482,483],{},"vue\u002F",[422,485,486],{},"react\u002F",", any feature, integration, ",[422,489,490],{},"outline",[422,492,493],{},"tree",", preset, ",[422,496,497],{},"nuxt",[422,499,500],{},"server",[433,502,503,537,547],{},[451,504,505,507,508,511,512,456,515,518,519,456,522,456,525,528,529,532,533,536],{},[422,506,465],{}," (",[422,509,510],{},"src\u002Fvue",": ",[422,513,514],{},"EditorSurface",[422,516,517],{},"EditorToolbar",", settings components, ",[422,520,521],{},"createEditor",[422,523,524],{},"useEditorUi",[422,526,527],{},"vueSuggestionRenderer",", the queued notifier; ",[422,530,531],{},"SimpleEditor","\u002F",[422,534,535],{},"AdvancedEditor"," also the preset they mount)",[451,538,539,456,541,543,544,546],{},[422,540,455],{},[422,542,459],{},", Vue, ",[422,545,468],{},", Nuxt UI",[451,548,549,456,551,456,553],{},[422,550,474],{},[422,552,497],{},[422,554,500],{},[433,556,557,586,601],{},[451,558,559,507,561,511,564,456,566,518,568,456,571,456,574,577,578,581,582,532,584,536],{},[422,560,474],{},[422,562,563],{},"src\u002Freact",[422,565,514],{},[422,567,517],{},[422,569,570],{},"EditorContextProvider",[422,572,573],{},"reactSuggestionRenderer",[422,575,576],{},"reactNotifier",", vendored shadcn primitives in ",[422,579,580],{},"ui\u002F","; ",[422,583,531],{},[422,585,535],{},[451,587,588,456,590,592,593,596,597,600],{},[422,589,455],{},[422,591,459],{},", React, ",[422,594,595],{},"@tiptap\u002Freact",", Radix, sonner, ",[422,598,599],{},"@iconify\u002Freact",", framework-free features and presets",[451,602,603,456,605,607,608,456,610],{},[422,604,465],{},[422,606,468],{},", Nuxt UI, ",[422,609,497],{},[422,611,500],{},[433,613,614,624,629],{},[451,615,616,456,618,456,621],{},[422,617,490],{},[422,619,620],{},"outline\u002Fvue",[422,622,623],{},"outline\u002Freact",[451,625,626,628],{},[422,627,455],{}," (and its layer)",[451,630,631,633],{},[422,632,493],{},", composites, any feature",[433,635,636,647,651],{},[451,637,638,456,641,456,644],{},[422,639,640],{},"search",[422,642,643],{},"search\u002Fvue",[422,645,646],{},"search\u002Freact",[451,648,649,628],{},[422,650,455],{},[451,652,653,456,655,633],{},[422,654,493],{},[422,656,490],{},[433,658,659,670,674],{},[451,660,661,456,664,456,667],{},[422,662,663],{},"change-sets",[422,665,666],{},"change-sets\u002Fvue",[422,668,669],{},"change-sets\u002Freact",[451,671,672,628],{},[422,673,455],{},[451,675,676,456,678,456,680,633],{},[422,677,493],{},[422,679,490],{},[422,681,640],{},[433,683,684,721,735],{},[451,685,686,687,456,690,456,693,456,696,456,699,456,702,456,705,456,708,456,711,456,714,717,718],{},"features (",[422,688,689],{},"media",[422,691,692],{},"mentions",[422,694,695],{},"transcript",[422,697,698],{},"authors",[422,700,701],{},"comments",[422,703,704],{},"composites",[422,706,707],{},"ai",[422,709,710],{},"collab",[422,712,713],{},"block-ui",[422,715,716],{},"themes","): ",[422,719,720],{},"features\u002F\u003Cx>\u002F{index,feature,model…}.ts",[451,722,723,456,725,727,728,532,731,734],{},[422,724,455],{},[422,726,459],{},", their own ",[422,729,730],{},"schema",[422,732,733],{},"protocol","; no UI framework",[451,736,737,738,456,740,456,742,456,744,456,746],{},"another feature (by implementation), integrations, ",[422,739,493],{},[422,741,465],{},[422,743,474],{},[422,745,497],{},[422,747,500],{},[433,749,750,769,778],{},[451,751,752,507,755,758,759,456,762,532,765,768],{},[422,753,754],{},"transfer",[422,756,757],{},"features\u002Ftransfer",": the block drop target, its menu, ",[422,760,761],{},"copyTransform",[422,763,764],{},"BlockTransform",[422,766,767],{},"TransferEnv",", the payload plumbing)",[451,770,771,773,774,777],{},[422,772,455],{}," and the ",[422,775,776],{},"composites\u002Fschema"," entry",[451,779,780,781,783,784,456,787,790,791,581,794,797,798,800],{},"any other feature by implementation, integrations, ",[422,782,493],{},", a UI framework in its framework-free files. Its AI transforms (",[422,785,786],{},"summaryTransform",[422,788,789],{},"bulletsTransform"," and their tasks) live in ",[422,792,793],{},"integrations\u002Fcomposite-ai",[422,795,796],{},"composeEditor"," (a preset) adds them to the transfer row when ",[422,799,707],{}," is on",[433,802,803,819,833],{},[451,804,805,806,809,810,812,813,809,816,818],{},"feature bindings (",[422,807,808],{},"features\u002F\u003Cx>\u002Fvue.ts"," + ",[422,811,483],{}," components, ",[422,814,815],{},"features\u002F\u003Cx>\u002Freact.ts",[422,817,486],{}," components)",[451,820,821,822,456,824,826,827,829,830,832],{},"the feature's framework-free files, ",[422,823,455],{},[422,825,459],{},", and that framework's layer (",[422,828,465],{}," or ",[422,831,474],{},")",[451,834,835,836,456,838],{},"the other framework, other features' implementations, ",[422,837,497],{},[422,839,500],{},[433,841,842,845,848],{},[451,843,844],{},"integrations",[451,846,847],{},"the features they connect (framework-free feature entries, or only their schema)",[451,849,850,851,456,853],{},"other integrations' internals, a UI framework, ",[422,852,497],{},[422,854,500],{},[433,856,857,876,887],{},[451,858,859,507,861,456,864,456,867,581,870,581,873,832],{},[422,860,493],{},[422,862,863],{},"index",[422,865,866],{},"tree-view-model",[422,868,869],{},"store",[422,871,872],{},"vue.ts",[422,874,875],{},"react.ts",[451,877,878,456,880,456,882,456,884,886],{},[422,879,455],{},[422,881,490],{},[422,883,704],{},[422,885,689],{}," (the bindings also their framework's layer)",[451,888,889],{},"AI, collab, transcript, mentions, block-ui, integrations; the other framework",[433,891,892,906,909],{},[451,893,894,895,898,899,456,902,905],{},"presets (",[422,896,897],{},"presets\u002Fcompose"," framework-free; ",[422,900,901],{},"vue\u002Fcompose.ts",[422,903,904],{},"react\u002Fcompose.ts"," bind it)",[451,907,908],{},"everything they compose",[451,910,911,456,913],{},[422,912,497],{},[422,914,500],{},[433,916,917,929,951],{},[451,918,919,507,922,925,926,832],{},[422,920,921],{},"adapters\u002Fdirect-ai",[422,923,924],{},".\u002Fadapters\u002Fdirect-ai",", the browser-direct ",[422,927,928],{},"EditorBackend['ai']",[451,930,931,507,933,936,937,939,940,943,944,947,948],{},[422,932,455],{},[422,934,935],{},"BackendError",", backend types), ",[422,938,459],{}," values, the client-safe protocols ",[422,941,942],{},"features\u002Fai\u002Fprotocol"," and ",[422,945,946],{},"integrations\u002Ftranscript-ai\u002Fprotocol",", the platform ",[422,949,950],{},"fetch",[451,952,953,955,956,456,958,961,962,456,964,456,966,968],{},[422,954,500],{},", the AI SDK (",[422,957,707],{},[422,959,960],{},"@ai-sdk\u002F*","), an HTTP client, ",[422,963,465],{},[422,965,474],{},[422,967,497],{},", other adapters",[433,970,971,977,983],{},[451,972,973,456,975],{},[422,974,497],{},[422,976,500],{},[451,978,979,980,982],{},"Nitro\u002FNuxt, framework-free schema entries, the client-safe ",[422,981,942],{},"; the composite modules of the exception below",[451,984,985],{},"browser components, any other feature implementation",[418,987,988,995,996,999,1000,1003,1004,943,1007,456,1010,1003,1013,456,1015,943,1018,456,1021,1003,1024,943,1026,456,1028,1031,1032,1034,1035,1003,1038,1041,1042,456,1045,456,1048,456,1051,1054,1055,456,1057,456,1059,1062,1063,456,1066,456,1069,1072,1073,1076,1077,1080],{},[989,990,991,992,994],"strong",{},"Exception: ",[422,993,500],{}," imports framework-free composite modules."," The server parses and converts Markdown and projects Blocks without an editor, so it needs more of ",[422,997,998],{},"features\u002Fcomposites"," than its schema entry. ",[422,1001,1002],{},"server\u002Fdocument-mutator.ts"," imports ",[422,1005,1006],{},"block-types",[422,1008,1009],{},"convert",[422,1011,1012],{},"server\u002Fmarkdown-blocks.ts",[422,1014,1006],{},[422,1016,1017],{},"fences",[422,1019,1020],{},"reference-text",[422,1022,1023],{},"server\u002Fblock-index.ts",[422,1025,1006],{},[422,1027,1017],{},[422,1029,1030],{},"server\u002Fworkspace-tools.ts"," imports the ",[422,1033,1006],{}," type, and ",[422,1036,1037],{},"server\u002Fstored-content.ts",[422,1039,1040],{},"legacy"," (the older precedent). These modules and the composite modules they pull in (",[422,1043,1044],{},"nodes",[422,1046,1047],{},"heading-composites",[422,1049,1050],{},"meta-keys",[422,1052,1053],{},"reference",") import only ",[422,1056,455],{},[422,1058,459],{},[422,1060,1061],{},"i18n",", TipTap's framework-free packages (",[422,1064,1065],{},"@tiptap\u002Fcore",[422,1067,1068],{},"@tiptap\u002Fpm",[422,1070,1071],{},"@tiptap\u002Fsuggestion",") and each other, never Vue, React, the DOM or another feature. The exception covers exactly them; a server module that needs another composite module or another feature implementation extends it only by an edit here. (",[422,1074,1075],{},"server\u002Fextract.ts"," also takes a type from ",[422,1078,1079],{},"features\u002Fmedia\u002Fassets","; a type import carries no code into the server bundle.)",[418,1082,1083,1084,1087,1088,1091,1092,1095,1096,456,1099,456,1102,1105,1106,456,1108,456,1111,456,1113,829,1115,1117,1118,1121],{},"Simple and advanced bundles are separate: the ",[422,1085,1086],{},"simple"," bundle contains no feature implementation, integration, tree, AI SDK, Yjs, y-tiptap, Hocuspocus, Nuxt or server module; a feature fixture contains core, settings and that feature only. The ",[422,1089,1090],{},"core-headless"," fixture builds an editor from ",[422,1093,1094],{},"\u002Fcore"," alone (",[422,1097,1098],{},"createEditorContext",[422,1100,1101],{},"coreContentFeature()",[422,1103,1104],{},"mentionsFeature()",") and fails on any ",[422,1107,465],{},[422,1109,1110],{},"@vue",[422,1112,468],{},[422,1114,471],{},[422,1116,474],{}," module; the ",[422,1119,1120],{},"headless-\u003Cx>"," fixtures do the same for the framework-free entry of each feature, integration and the tree.",[418,1123,1124,1125,456,1128,456,1131,456,1134,456,1137,1140,1141,456,1143,456,1145,456,1147,456,1149,829,1151,1154,1155,456,1158,943,1160,1162,1163,1165,1166,507,1168,1171,1172,1174],{},"The React fixtures (",[422,1126,1127],{},"react-simple",[422,1129,1130],{},"\u003Cx>-react",[422,1132,1133],{},"tree-react",[422,1135,1136],{},"outline-react",[422,1138,1139],{},"advanced-react",") mount their React binding with its toolbar and fail on any ",[422,1142,465],{},[422,1144,1110],{},[422,1146,468],{},[422,1148,471],{},[422,1150,510],{},[422,1152,1153],{},".vue"," module; the Vue fixtures fail on ",[422,1156,1157],{},"react-dom",[422,1159,477],{},[422,1161,563],{},". ",[422,1164,1139],{}," mounts the complete ",[422,1167,535],{},[422,1169,1170],{},"\u002Freact\u002Fadvanced",") and requires every feature and integration binding, so no ",[422,1173,1153],{}," file can slip into the React bundle unnoticed.",[418,1176,1177,1178,456,1181,943,1184,1187,1188,1191],{},"Run ",[422,1179,1180],{},"typecheck:editor",[422,1182,1183],{},"check:editor-entries",[422,1185,1186],{},"check:editor-composition"," as described in ",[1189,1190,374],"a",{"href":375},".",[418,1193,1194,1196,1197,1200,1201,1204,1205,532,1208,1211,1212,1215,1216,456,1219,943,1222,1225,1226,1229,1230,1233,1234,1236,1237,943,1240,1243,1244,456,1246,456,1248,456,1251,456,1254,1256,1257,1259,1260,1262],{},[422,1195,1183],{}," collects the module IDs of every emitted chunk (including dynamic ones) and fails on a forbidden module, on a source module outside the fixture's allow-list, or on a missing required module. To check your own composition, add ",[422,1198,1199],{},"packages\u002Feditor\u002Fchecks\u002Ffixtures\u002F\u003Cname>\u002F"," (an ",[422,1202,1203],{},"index.html"," plus ",[422,1206,1207],{},"main.ts",[422,1209,1210],{},"main.tsx"," that mounts the surface with its toolbar, so unused factories cannot be tree-shaken away) and one ",[422,1213,1214],{},"FIXTURES"," entry with ",[422,1217,1218],{},"forbid",[422,1220,1221],{},"require",[422,1223,1224],{},"allowSource"," patterns (and ",[422,1227,1228],{},"plugins: 'react'"," for a React fixture) in ",[422,1231,1232],{},"packages\u002Feditor\u002Fchecks\u002Fentries.ts",". Fixtures exist for ",[422,1235,1086],{},", each feature (Vue, ",[422,1238,1239],{},"-react",[422,1241,1242],{},"headless-"," variants), each integration, ",[422,1245,493],{},[422,1247,1133],{},[422,1249,1250],{},"headless-tree",[422,1252,1253],{},"advanced",[422,1255,1139],{},", the headless core (",[422,1258,1090],{},"), the React simple editor (",[422,1261,1127],{},") and the Node schema.",[1264,1265,1267],"h2",{"id":1266},"bundle-isolation-proof","Bundle isolation proof",[418,1269,1270,1273,1274,1276,1277,1279,1280,1282,1283,943,1286,1289,1290,1293,1294,943,1297,1300,1301,1304],{},[422,1271,1272],{},"bun run check:editor-entries"," builds each fixture in ",[422,1275,1199],{}," as its own production Vite app, collects the module IDs of every emitted chunk and fails on forbidden modules (or on a missing required one, so exported factories cannot be tree-shaken away unnoticed). Last result for ",[422,1278,1086],{},": 325 modules, JS 1082.5 kB (gzip 331.1 kB), CSS 194.5 kB (gzip 25.2 kB); for ",[422,1281,493],{},": 433 modules, JS 1314.5 kB (gzip 389.2 kB), CSS 197.6 kB (gzip 25.7 kB). The ",[422,1284,1285],{},"code-only",[422,1287,1288],{},"code-only-react"," fixtures prove the code surface carries CodeMirror and no ProseMirror or TipTap (and nothing of this package outside ",[422,1291,1292],{},"src\u002Fcode","), and the ",[422,1295,1296],{},"markdown-vue",[422,1298,1299],{},"tables"," fixtures prove the Markdown entries contain no CodeMirror. The check also bundles the advanced schema for Node and compares it with a snapshot (",[422,1302,1303],{},"checks\u002Fschema.ts",").",{"title":1306,"searchDepth":1307,"depth":1307,"links":1308},"",2,[1309],{"id":1266,"depth":1307,"text":1267},"Which layer of @skaile\u002Fforge-editor may import which, and how the bundle isolation check enforces it.","md",null,{},{"icon":372},{"title":369,"description":1310},"Hpraf-jRwDTLrAZ2d5hCXLTHkc-dHkMKyQspf9xMOLE",[1318,1320],{"title":365,"path":366,"stem":367,"description":1319,"icon":148,"children":-1},"Use advancedSchemaExtensions() on a server, validator or migration without Vue, React or browser globals.",{"title":374,"path":375,"stem":376,"description":1321,"icon":377,"children":-1},"Build, check and dev commands of the repository: what each one proves and when to run it.",1793178238658]