[{"data":1,"prerenderedAt":727},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-introduction":412,"-getting-started-introduction-surround":724},[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":11,"body":414,"description":717,"extension":718,"links":719,"meta":720,"navigation":721,"path":12,"seo":722,"stem":13,"__hash__":723},"docs\u002F1.getting-started\u002F1.introduction.md",{"type":415,"value":416,"toc":710},"minimark",[417,422,480,487,491,680,686,690],[418,419,421],"h2",{"id":420},"what-it-is","What it is",[423,424,425,426,430,431,435,436,439,440,444,445,448,449,452,453,456,457,460,461,464,465,468,469,472,473,468,476,479],"p",{},"A Vue and React editor library on TipTap v3. Editors are assembled from ",[427,428,429],"strong",{},"features",": the ",[432,433,434],"em",{},"simple"," editor is the core features alone (formatting, headings, lists, quotes, code, undo\u002Fredo) and needs no backend, no Yjs and no feature code; the ",[432,437,438],{},"advanced"," editor composes every feature (media, mentions, transcripts, Typed blocks, authors, comments, AI, collaboration, block UI, site-wide Obsidian themes and their integrations) on both surfaces. The framework-free ",[441,442,443],"code",{},".\u002Fcore"," holds the feature model, and every feature's logic is framework-free too (",[441,446,447],{},".\u002F\u003Cfeature>","): a feature is built from a typed ",[427,450,451],{},"UI binding"," (",[441,454,455],{},"\u003Cx>FeatureCore(ui)",") that the Vue layer (",[441,458,459],{},".\u002F\u003Cfeature>\u002Fvue",", Nuxt UI chrome) and the React layer (",[441,462,463],{},".\u002F\u003Cfeature>\u002Freact",", shadcn\u002Fui on Radix and Tailwind) fill with their components, node views and notice seam. Toolbar, settings panel and modal, Block outline, AI sidebar, Comments margin, Typed blocks table and Block inspector, and the Document tree are components you place anywhere beside an editor; both layers ship the simple editor (",[441,466,467],{},".\u002Fvue\u002Fsimple",", ",[441,470,471],{},".\u002Freact\u002Fsimple",") and the advanced editor (",[441,474,475],{},".\u002Fvue\u002Fadvanced",[441,477,478],{},".\u002Freact\u002Fadvanced",").",[423,481,482,483,486],{},"A reference Nuxt app and the ",[441,484,485],{},"@skaile\u002Fforge-editor"," library it is built on: a block editor for structured documents (transcripts, minutes, reports) with AI assistance and collaboration, offered on a Vue and a React surface.",[418,488,490],{"id":489},"how-the-pieces-fit","How the pieces fit",[492,493,494,561,580,616,642],"ul",{},[495,496,497,498,452,501,504,505,508,509,512,513,516,517,520,521,524,525,528,529,532,533,536,537,540,541,452,544,547,548,551,552,555,556,560],"li",{},"An editor is a ",[427,499,500],{},"list of features",[441,502,503],{},"EditorFeature",") validated by ",[441,506,507],{},"defineEditor"," into an immutable ",[441,510,511],{},"EditorPreset"," and mounted by ",[441,514,515],{},"EditorSurface",". ",[441,518,519],{},"composeEditor({ content: 'basic' | 'rich', interaction: 'minimal' | 'full' | [], ai: boolean, backend?, add?, remove? })"," builds one from three dimensions; a feature whose ",[441,522,523],{},"requires"," or backend capability is missing is dropped and listed in ",[441,526,527],{},"omitted",". Prebuilt are the ",[441,530,531],{},"SimpleEditor"," and ",[441,534,535],{},"AdvancedEditor"," components (Vue and React), ",[441,538,539],{},"advancedEditor()"," (everything plus the three integrations) and the framework-free ",[441,542,543],{},"simpleEditor()",[441,545,546],{},"core-content"," + ",[441,549,550],{},"core-ui",", no backend, no ⌘K palette) from ",[441,553,554],{},"\u002Fpresets\u002Fcompose",". See ",[557,558,559],"a",{"href":91},"Feature composition",".",[495,562,563,564,567,568,571,572,575,576,579],{},"Toolbar, settings panel and modal, Block outline, AI sidebar and Document tree are ",[427,565,566],{},"separate components"," you place beside an editor and give the editor (",[441,569,570],{},":editor"," from ",[441,573,574],{},"ready","). The toolbar and settings components find the editor's preset through it; there is no ",[441,577,578],{},"preset"," prop.",[495,581,582,583,586,587,532,590,593,594,597,598,601,602,605,606,608,609,612,613,560],{},"Every advanced feature has three entries: framework-free ",[441,584,585],{},"\u002F\u003Cx>"," (logic, models and the UI binding contract), ",[441,588,589],{},"\u002F\u003Cx>\u002Fvue",[441,591,592],{},"\u002F\u003Cx>\u002Freact",". Layers: framework-free ",[441,595,596],{},"\u002Fcore",", Vue (",[441,599,600],{},"\u002Fvue",", Nuxt UI) and React (",[441,603,604],{},"\u002Freact",", shadcn\u002Fui). Importing an entry registers nothing globally, and the root entry ",[441,607,485],{}," is ",[427,610,611],{},"type-only",". All entries are listed in the ",[557,614,615],{"href":333},"exports reference",[495,617,618,619,622,623,626,627,630,631,634,635,630,638,641],{},"The package is published as built ESM with ",[441,620,621],{},".d.ts"," (the source maps embed the sources; ",[441,624,625],{},"src"," is not published). Consume it through Vite (",[441,628,629],{},"@vitejs\u002Fplugin-vue"," with ",[441,632,633],{},"@nuxt\u002Fui\u002Fvite",", or ",[441,636,637],{},"@vitejs\u002Fplugin-react",[441,639,640],{},"@tailwindcss\u002Fvite",") or Nuxt.",[495,643,644,645,648,649,652,653,656,657,660,661,664,665,668,669,672,673,676,677,679],{},"UI strings render from catalogs in ",[441,646,647],{},"de"," (default) and ",[441,650,651],{},"en",": ",[441,654,655],{},"locale: 'de' | 'en'"," and partial ",[441,658,659],{},"messages"," overrides on ",[441,662,663],{},"createEditorContext"," \u002F ",[441,666,667],{},"createEditor"," \u002F the module option, ",[441,670,671],{},"ctx.t(key, params?)"," in features and ",[441,674,675],{},"useEditorI18n()"," in components (see ",[557,678,322],{"href":323},"). Server error messages are German developer messages; docs and identifiers are English.",[423,681,682,683,560],{},"The words used on these pages (Feature, Preset, Surface, Block, …) are defined in the ",[557,684,685],{"href":34},"glossary",[418,687,689],{"id":688},"where-to-start","Where to start",[691,692,693,698,702,705],"card-group",{},[694,695,697],"card",{"icon":19,"title":696,"to":17},"Install","Requirements, peer dependencies and the npm command.",[694,699,701],{"icon":6,"title":700,"to":22},"Quick start","A working editor in Nuxt, plain Vue or React.",[694,703,704],{"icon":40,"title":39,"to":46},"Build a meeting-notes editor step by step, including an own block.",[694,706,709],{"icon":707,"title":708,"to":333},"i-lucide-list","Exports reference","Every entry point of the package and what it exports.",{"title":711,"searchDepth":712,"depth":712,"links":713},"",2,[714,715,716],{"id":420,"depth":712,"text":421},{"id":489,"depth":712,"text":490},{"id":688,"depth":712,"text":689},"What @skaile\u002Fforge-editor is: a Vue and React block editor library on TipTap v3, assembled from features.","md",null,{},{"icon":14},{"title":11,"description":717},"NgEgIEpvQz9RjfwXauxdslXnVinWJnfIkiBlWb5-1Sc",[719,725],{"title":16,"path":17,"stem":18,"description":726,"icon":19,"children":-1},"Requirements, peer dependencies and the npm install command for @skaile\u002Fforge-editor.",1793178225761]