[{"data":1,"prerenderedAt":2806},["ShallowReactive",2],{"navigation_docs":3,"-guides-markdown-and-code":412,"-guides-markdown-and-code-surround":2801},[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":122,"body":414,"description":2794,"extension":2795,"links":2796,"meta":2797,"navigation":2798,"path":123,"seo":2799,"stem":124,"__hash__":2800},"docs\u002F3.guides\u002F16.markdown-and-code.md",{"type":415,"value":416,"toc":2775},"minimark",[417,453,2771],[418,419,420,424,425,428,429,428,432,435,436,428,439,428,442,445,446,428,449,452],"p",{},[421,422,423],"code",{},"@skaile\u002Fforge-editor"," edits documents that live as plain files in three entry families: Markdown as blocks (",[421,426,427],{},"\u002Fmarkdown",", ",[421,430,431],{},"\u002Fmarkdown\u002Fvue",[421,433,434],{},"\u002Fmarkdown\u002Freact","), source files in CodeMirror 6 (",[421,437,438],{},"\u002Fcode",[421,440,441],{},"\u002Fcode\u002Fvue",[421,443,444],{},"\u002Fcode\u002Freact",") and one component that picks between them by file type (",[421,447,448],{},"\u002Fdocument\u002Fvue",[421,450,451],{},"\u002Fdocument\u002Freact","). The Markdown surface keeps the frontmatter and every fence it does not understand byte for byte, so opening and saving a file without edits changes nothing.",[454,455,457,466,471,588,595,604,655,661,691,694,701,712,715,774,778,829,832,839,850,891,911,918,940,943,1005,1008,1733,1739,2323,2334,2758],"demo-frame",{"name":456},"vue-markdown",[458,459,461,462,465],"h2",{"id":460},"markdown-skaileforge-editormarkdown","Markdown (",[421,463,464],{},"@skaile\u002Fforge-editor\u002Fmarkdown",")",[467,468,470],"h3",{"id":469},"framework-free-api","Framework-free API",[472,473,474,485,521,527,546,573],"ul",{},[475,476,477,480,481,484],"li",{},[421,478,479],{},"splitFrontmatter(text)"," \u002F ",[421,482,483],{},"joinFrontmatter(frontmatter, body)",": the YAML block at offset 0 only, kept verbatim.",[475,486,487,490,491,494,495,498,499,428,502,428,505,508,509,512,513,516,517,520],{},[421,488,489],{},"markdownToContent(editor, body, { policy? }): { content, diagnostics }",". The policy ",[421,492,493],{},"{ allowHtml?, allowDataUrls? }"," decides what is dropped: raw HTML, links and media with unsafe URLs are dropped and reported as ",[421,496,497],{},"MarkdownDiagnostic","s: ",[421,500,501],{},"raw-html",[421,503,504],{},"unsafe-url",[421,506,507],{},"unknown-fence"," (info), ",[421,510,511],{},"unclosed-fence"," and ",[421,514,515],{},"invalid-fence-meta"," (errors). ",[421,518,519],{},"hasFatalDiagnostics"," tells whether a result must not be committed.",[475,522,523,526],{},[421,524,525],{},"contentToMarkdown(editor)",".",[475,528,529,532,533,536,537,539,540,512,543,526],{},[421,530,531],{},"MarkdownClipboard.configure({ policy })",": an extension that pastes ",[421,534,535],{},"text\u002Fmarkdown"," and plain text with block syntax as blocks, sanitizes pasted HTML, and copies and cuts as ",[421,538,535],{}," next to ",[421,541,542],{},"text\u002Fhtml",[421,544,545],{},"text\u002Fplain",[475,547,548,551,552,555,556,559,560,428,563,428,566,569,570,526],{},[421,549,550],{},"createSourceMode({ getEditor, toMarkdown?, fromMarkdown?, policy? }): SourceMode",": the ",[421,553,554],{},"state"," store is ",[421,557,558],{},"{ mode: 'visual' | 'source', source, diagnostics }","; ",[421,561,562],{},"enter()",[421,564,565],{},"edit(text)",[421,567,568],{},"commit(): boolean"," (false with the editor untouched on a fatal diagnostic or a document the schema rejects) and ",[421,571,572],{},"cancel()",[475,574,575,576,579,580,583,584,587],{},"Unknown ",[421,577,578],{},"::: kind"," fences are ",[421,581,582],{},"OpaqueFence"," nodes (in ",[421,585,586],{},"coreSchemaExtensions()",") that are written back byte for byte; Block types the Typed blocks feature registers parse first.",[467,589,591,592],{"id":590},"vue-markdownsurface","Vue: ",[421,593,594],{},"MarkdownSurface",[418,596,597,599,600,603],{},[421,598,594],{}," from ",[421,601,602],{},"@skaile\u002Fforge-editor\u002Fmarkdown\u002Fvue",":",[472,605,606,612,619,630,648],{},[475,607,608,611],{},[421,609,610],{},"v-model"," is the Markdown string, frontmatter included. An incoming value equal to the last emitted one is ignored.",[475,613,614,615,618],{},"Props, emits and slots of ",[421,616,617],{},"EditorSurface"," are forwarded.",[475,620,621,622,625,626,629],{},"Prop ",[421,623,624],{},"policy"," also configures the ",[421,627,628],{},"MarkdownClipboard"," it installs.",[475,631,621,632,635,636,639,640,643,644,647],{},[421,633,634],{},"sourceMode"," takes a ",[421,637,638],{},"SourceMode",": while its state is ",[421,641,642],{},"source"," the surface shows the draft in a text area with the diagnostics of a rejected commit and Apply\u002FCancel; ",[421,645,646],{},"sourceLabels"," supplies their texts.",[475,649,650,651,654],{},"Event ",[421,652,653],{},"diagnostics"," reports the load diagnostics.",[467,656,658,659],{"id":657},"react-markdownsurface","React: ",[421,660,594],{},[418,662,663,599,665,668,669,480,672,480,675,480,678,681,682,684,685,687,688,690],{},[421,664,594],{},[421,666,667],{},"@skaile\u002Fforge-editor\u002Fmarkdown\u002Freact"," takes ",[421,670,671],{},"value",[421,673,674],{},"onChange",[421,676,677],{},"onFrontmatterChange",[421,679,680],{},"onDiagnostics",", a ",[421,683,624],{}," prop (it also configures the installed ",[421,686,628],{},") and the ",[421,689,617],{}," props forwarded, with the same semantics. It has no source view.",[418,692,693],{},"Neither binding imports CodeMirror.",[458,695,697,698,465],{"id":696},"code-skaileforge-editorcode","Code (",[421,699,700],{},"@skaile\u002Fforge-editor\u002Fcode",[418,702,703,704,707,708,711],{},"CodeMirror 6 on a string, themed by the shared ",[421,705,706],{},"--sk-*"," tokens (",[421,709,710],{},"styles\u002Ftokens.css","; fallbacks are the token defaults).",[467,713,470],{"id":714},"framework-free-api-1",[418,716,717,428,720,428,723,428,726,428,729,428,732,735,736,480,739,480,742,745,746,749,750,753,754,428,757,428,760,428,763,766,767,770,771,526],{},[421,718,719],{},"createCodeEditor({ parent, doc?, readOnly?, wordWrap?, language?, onSaveShortcut?, onChange? })",[421,721,722],{},"setReadOnly",[421,724,725],{},"setWordWrap",[421,727,728],{},"setLanguage(view, support)",[421,730,731],{},"loadLanguage(view, id)",[421,733,734],{},"setDocument(view, text)"," (a host text, not an edit), ",[421,737,738],{},"registerLanguage(id, loader, { core? })",[421,740,741],{},"resolveLanguage(id)",[421,743,744],{},"isCoreLang(id)"," (language packs are the host's: register the ",[421,747,748],{},"@codemirror\u002Flang-*"," packs you depend on; ",[421,751,752],{},"jsonl"," is built in), ",[421,755,756],{},"formatJsonInEditor(view)",[421,758,759],{},"formatJsonText",[421,761,762],{},"jsonlLanguage",[421,764,765],{},"kindOf(path, mime?)"," (",[421,768,769],{},"'markdown' | 'code' | 'binary'",") and ",[421,772,773],{},"languageOf(path)",[467,775,777],{"id":776},"components","Components",[472,779,780,812],{},[475,781,782,784,785,766,788,790,791,428,794,428,797,800,801,428,804,807,808,811],{},[421,783,441],{},": ",[421,786,787],{},"CodeSurface",[421,789,610],{}," string, ",[421,792,793],{},"editable",[421,795,796],{},"language",[421,798,799],{},"wordWrap","; emits ",[421,802,803],{},"update:modelValue",[421,805,806],{},"save"," on Mod-S, ",[421,809,810],{},"ready(view)",").",[475,813,814,784,816,766,818,428,820,428,822,428,825,828],{},[421,815,444],{},[421,817,787],{},[421,819,671],{},[421,821,674],{},[421,823,824],{},"onSave",[421,826,827],{},"onReady",", same flags).",[418,830,831],{},"No ProseMirror or TipTap is reachable from these entries.",[458,833,835,836],{"id":834},"one-component-for-every-file-documentsurface","One component for every file: ",[421,837,838],{},"DocumentSurface",[418,840,841,599,843,846,847,849],{},[421,842,838],{},[421,844,845],{},"@skaile\u002Fforge-editor\u002Fdocument\u002Fvue"," or ",[421,848,451],{}," renders by file type:",[472,851,852,869,880],{},[475,853,854,856,857,860,861,864,865,868],{},[421,855,594],{}," for ",[421,858,859],{},"kindOf(path, mime) === 'markdown'"," (prop ",[421,862,863],{},"markdown",": the Markdown surface's own props, ",[421,866,867],{},"preset"," at least).",[475,870,871,873,874,876,877,879],{},[421,872,787],{}," for text (language from ",[421,875,773],{}," unless ",[421,878,796],{}," is given).",[475,881,882,883,886,887,890],{},"A ",[421,884,885],{},"binary"," slot (Vue) or ",[421,888,889],{},"binary(path)"," render prop (React) otherwise.",[418,892,893,896,897,846,900,903,904,846,907,910],{},[421,894,895],{},"ready"," carries ",[421,898,899],{},"{ kind: 'markdown', editor }",[421,901,902],{},"{ kind: 'code', view }",". These entries reach both editors; use ",[421,905,906],{},"\u002Fmarkdown\u002F*",[421,908,909],{},"\u002Fcode\u002F*"," alone to keep one out of a bundle.",[458,912,914,915],{"id":913},"example-examplesvue-markdown","Example: ",[421,916,917],{},"examples\u002Fvue-markdown",[418,919,920,928,929,931,932,935,936,939],{},[921,922,926],"a",{"href":923,"rel":924},"https:\u002F\u002Fgithub.com\u002Fskaile-ai\u002Fforge-editor\u002Ftree\u002Fmain\u002Fexamples\u002Fvue-markdown",[925],"nofollow",[421,927,917],{}," is the demo above: a plain Vue app with no data layer that mounts ",[421,930,594],{}," on a sample document with frontmatter, a table, task items and an ",[421,933,934],{},"::: note"," fence of a Block type no feature knows. Run it with ",[421,937,938],{},"bun run --cwd examples\u002Fvue-markdown dev"," (port 3045).",[418,941,942],{},"What the example shows:",[472,944,945,955,978,996],{},[475,946,947,951,952,954],{},[948,949,950],"strong",{},"Byte-identical round trip."," The sample is already in the editor's normal form, so a faithful round trip returns it byte for byte. The page prints \"Round trip without edits: byte-identical\" until you edit; the unknown ",[421,953,934],{}," fence stays exactly as written because it is an opaque block.",[475,956,957,960,961,964,965,428,968,512,971,974,975,526],{},[948,958,959],{},"Preset."," ",[421,962,963],{},"defineEditor"," over ",[421,966,967],{},"coreContentFeature()",[421,969,970],{},"coreUiFeature({ palette: EditorCommandPalette })",[421,972,973],{},"tablesFeature()",". The toolbar is a sibling that takes the editor from ",[421,976,977],{},"@ready",[475,979,980,983,984,987,988,991,992,995],{},[948,981,982],{},"Source mode."," The „Source\" button calls ",[421,985,986],{},"sourceMode.enter()"," on a ",[421,989,990],{},"createSourceMode"," bound to the editor; the surface then shows the Markdown text, and a commit succeeds only when it parses without a fatal diagnostic. ",[421,993,994],{},"useStoreRef(sourceMode.state)"," turns the framework-free store into a ref.",[475,997,998,1001,1002,1004],{},[948,999,1000],{},"Diagnostics."," The ",[421,1003,653],{}," event fills the \"Load diagnostics\" line; the last pane shows the current Markdown string.",[418,1006,1007],{},"The surface component and its state:",[1009,1010,1016],"pre",{"className":1011,"code":1012,"filename":1013,"language":1014,"meta":1015,"style":1015},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { coreContentFeature, coreUiFeature, defineEditor } from '@skaile\u002Fforge-editor\u002Fcore'\nimport { createSourceMode, type MarkdownDiagnostic } from '@skaile\u002Fforge-editor\u002Fmarkdown'\nimport { MarkdownSurface } from '@skaile\u002Fforge-editor\u002Fmarkdown\u002Fvue'\nimport { tablesFeature } from '@skaile\u002Fforge-editor\u002Ftables'\nimport { EditorCommandPalette, EditorToolbar, useStoreRef } from '@skaile\u002Fforge-editor\u002Fvue'\nimport type { Editor } from '@tiptap\u002Fvue-3'\nimport { type Component, computed, ref, shallowRef } from 'vue'\n\n\u002F\u002F The sample is already in the editor's normal form, so a faithful round trip returns it byte for byte; the `::: note`\n\u002F\u002F fence is of a kind no feature knows, so it is an opaque block that is written back as it came.\nconst SAMPLE = `---\ntitle: Sample\ntags: [a, b]\n---\n# Heading\n\nSome text with **bold**.\n\n| Name | Count |\n| --- | --- |\n| a | 1 |\n| b | 2 |\n\n- [ ] open task\n- [x] done task\n\n::: note {\"tone\":\"info\"}\nUnknown kinds   stay\nexactly as written.\n:::\n`\n\nconst preset = defineEditor({ features: [coreContentFeature(), coreUiFeature\u003CComponent>({ palette: EditorCommandPalette }), tablesFeature()] })\nconst text = ref(SAMPLE)\nconst editor = shallowRef\u003CEditor>()\nconst edits = ref(0)\nconst unchanged = computed(() => edits.value === 0 && text.value === SAMPLE)\nconst loadDiagnostics = ref\u003CMarkdownDiagnostic[]>([])\n\n\u002F\u002F Source mode: the whole document as Markdown text, committed only when it parses without a fatal diagnostic.\nconst sourceMode = createSourceMode({ getEditor: () => editor.value })\nconst source = useStoreRef(sourceMode.state)\nconst inSource = computed(() => source.value.mode === 'source')\n\u003C\u002Fscript>\n","examples\u002Fvue-markdown\u002Fsrc\u002FApp.vue","vue","",[421,1017,1018,1053,1093,1121,1141,1162,1193,1216,1253,1260,1267,1273,1290,1296,1302,1307,1313,1318,1324,1329,1335,1341,1347,1353,1358,1364,1370,1375,1381,1387,1393,1399,1405,1410,1485,1500,1522,1542,1590,1614,1619,1625,1662,1682,1723],{"__ignoreMap":1015},[1019,1020,1023,1027,1031,1035,1038,1041,1044,1048,1050],"span",{"class":1021,"line":1022},"line",1,[1019,1024,1026],{"class":1025},"sMK4o","\u003C",[1019,1028,1030],{"class":1029},"swJcz","script",[1019,1032,1034],{"class":1033},"spNyl"," setup",[1019,1036,1037],{"class":1033}," lang",[1019,1039,1040],{"class":1025},"=",[1019,1042,1043],{"class":1025},"\"",[1019,1045,1047],{"class":1046},"sfazB","ts",[1019,1049,1043],{"class":1025},[1019,1051,1052],{"class":1025},">\n",[1019,1054,1056,1060,1063,1067,1070,1073,1075,1078,1081,1084,1087,1090],{"class":1021,"line":1055},2,[1019,1057,1059],{"class":1058},"s7zQu","import",[1019,1061,1062],{"class":1025}," {",[1019,1064,1066],{"class":1065},"sTEyZ"," coreContentFeature",[1019,1068,1069],{"class":1025},",",[1019,1071,1072],{"class":1065}," coreUiFeature",[1019,1074,1069],{"class":1025},[1019,1076,1077],{"class":1065}," defineEditor",[1019,1079,1080],{"class":1025}," }",[1019,1082,1083],{"class":1058}," from",[1019,1085,1086],{"class":1025}," '",[1019,1088,1089],{"class":1046},"@skaile\u002Fforge-editor\u002Fcore",[1019,1091,1092],{"class":1025},"'\n",[1019,1094,1096,1098,1100,1103,1105,1108,1111,1113,1115,1117,1119],{"class":1021,"line":1095},3,[1019,1097,1059],{"class":1058},[1019,1099,1062],{"class":1025},[1019,1101,1102],{"class":1065}," createSourceMode",[1019,1104,1069],{"class":1025},[1019,1106,1107],{"class":1058}," type",[1019,1109,1110],{"class":1065}," MarkdownDiagnostic",[1019,1112,1080],{"class":1025},[1019,1114,1083],{"class":1058},[1019,1116,1086],{"class":1025},[1019,1118,464],{"class":1046},[1019,1120,1092],{"class":1025},[1019,1122,1124,1126,1128,1131,1133,1135,1137,1139],{"class":1021,"line":1123},4,[1019,1125,1059],{"class":1058},[1019,1127,1062],{"class":1025},[1019,1129,1130],{"class":1065}," MarkdownSurface",[1019,1132,1080],{"class":1025},[1019,1134,1083],{"class":1058},[1019,1136,1086],{"class":1025},[1019,1138,602],{"class":1046},[1019,1140,1092],{"class":1025},[1019,1142,1144,1146,1148,1151,1153,1155,1157,1160],{"class":1021,"line":1143},5,[1019,1145,1059],{"class":1058},[1019,1147,1062],{"class":1025},[1019,1149,1150],{"class":1065}," tablesFeature",[1019,1152,1080],{"class":1025},[1019,1154,1083],{"class":1058},[1019,1156,1086],{"class":1025},[1019,1158,1159],{"class":1046},"@skaile\u002Fforge-editor\u002Ftables",[1019,1161,1092],{"class":1025},[1019,1163,1165,1167,1169,1172,1174,1177,1179,1182,1184,1186,1188,1191],{"class":1021,"line":1164},6,[1019,1166,1059],{"class":1058},[1019,1168,1062],{"class":1025},[1019,1170,1171],{"class":1065}," EditorCommandPalette",[1019,1173,1069],{"class":1025},[1019,1175,1176],{"class":1065}," EditorToolbar",[1019,1178,1069],{"class":1025},[1019,1180,1181],{"class":1065}," useStoreRef",[1019,1183,1080],{"class":1025},[1019,1185,1083],{"class":1058},[1019,1187,1086],{"class":1025},[1019,1189,1190],{"class":1046},"@skaile\u002Fforge-editor\u002Fvue",[1019,1192,1092],{"class":1025},[1019,1194,1196,1198,1200,1202,1205,1207,1209,1211,1214],{"class":1021,"line":1195},7,[1019,1197,1059],{"class":1058},[1019,1199,1107],{"class":1058},[1019,1201,1062],{"class":1025},[1019,1203,1204],{"class":1065}," Editor",[1019,1206,1080],{"class":1025},[1019,1208,1083],{"class":1058},[1019,1210,1086],{"class":1025},[1019,1212,1213],{"class":1046},"@tiptap\u002Fvue-3",[1019,1215,1092],{"class":1025},[1019,1217,1219,1221,1223,1225,1228,1230,1233,1235,1238,1240,1243,1245,1247,1249,1251],{"class":1021,"line":1218},8,[1019,1220,1059],{"class":1058},[1019,1222,1062],{"class":1025},[1019,1224,1107],{"class":1058},[1019,1226,1227],{"class":1065}," Component",[1019,1229,1069],{"class":1025},[1019,1231,1232],{"class":1065}," computed",[1019,1234,1069],{"class":1025},[1019,1236,1237],{"class":1065}," ref",[1019,1239,1069],{"class":1025},[1019,1241,1242],{"class":1065}," shallowRef",[1019,1244,1080],{"class":1025},[1019,1246,1083],{"class":1058},[1019,1248,1086],{"class":1025},[1019,1250,1014],{"class":1046},[1019,1252,1092],{"class":1025},[1019,1254,1256],{"class":1021,"line":1255},9,[1019,1257,1259],{"emptyLinePlaceholder":1258},true,"\n",[1019,1261,1263],{"class":1021,"line":1262},10,[1019,1264,1266],{"class":1265},"sHwdD","\u002F\u002F The sample is already in the editor's normal form, so a faithful round trip returns it byte for byte; the `::: note`\n",[1019,1268,1270],{"class":1021,"line":1269},11,[1019,1271,1272],{"class":1265},"\u002F\u002F fence is of a kind no feature knows, so it is an opaque block that is written back as it came.\n",[1019,1274,1276,1279,1282,1284,1287],{"class":1021,"line":1275},12,[1019,1277,1278],{"class":1033},"const",[1019,1280,1281],{"class":1065}," SAMPLE ",[1019,1283,1040],{"class":1025},[1019,1285,1286],{"class":1025}," `",[1019,1288,1289],{"class":1046},"---\n",[1019,1291,1293],{"class":1021,"line":1292},13,[1019,1294,1295],{"class":1046},"title: Sample\n",[1019,1297,1299],{"class":1021,"line":1298},14,[1019,1300,1301],{"class":1046},"tags: [a, b]\n",[1019,1303,1305],{"class":1021,"line":1304},15,[1019,1306,1289],{"class":1046},[1019,1308,1310],{"class":1021,"line":1309},16,[1019,1311,1312],{"class":1046},"# Heading\n",[1019,1314,1316],{"class":1021,"line":1315},17,[1019,1317,1259],{"emptyLinePlaceholder":1258},[1019,1319,1321],{"class":1021,"line":1320},18,[1019,1322,1323],{"class":1046},"Some text with **bold**.\n",[1019,1325,1327],{"class":1021,"line":1326},19,[1019,1328,1259],{"emptyLinePlaceholder":1258},[1019,1330,1332],{"class":1021,"line":1331},20,[1019,1333,1334],{"class":1046},"| Name | Count |\n",[1019,1336,1338],{"class":1021,"line":1337},21,[1019,1339,1340],{"class":1046},"| --- | --- |\n",[1019,1342,1344],{"class":1021,"line":1343},22,[1019,1345,1346],{"class":1046},"| a | 1 |\n",[1019,1348,1350],{"class":1021,"line":1349},23,[1019,1351,1352],{"class":1046},"| b | 2 |\n",[1019,1354,1356],{"class":1021,"line":1355},24,[1019,1357,1259],{"emptyLinePlaceholder":1258},[1019,1359,1361],{"class":1021,"line":1360},25,[1019,1362,1363],{"class":1046},"- [ ] open task\n",[1019,1365,1367],{"class":1021,"line":1366},26,[1019,1368,1369],{"class":1046},"- [x] done task\n",[1019,1371,1373],{"class":1021,"line":1372},27,[1019,1374,1259],{"emptyLinePlaceholder":1258},[1019,1376,1378],{"class":1021,"line":1377},28,[1019,1379,1380],{"class":1046},"::: note {\"tone\":\"info\"}\n",[1019,1382,1384],{"class":1021,"line":1383},29,[1019,1385,1386],{"class":1046},"Unknown kinds   stay\n",[1019,1388,1390],{"class":1021,"line":1389},30,[1019,1391,1392],{"class":1046},"exactly as written.\n",[1019,1394,1396],{"class":1021,"line":1395},31,[1019,1397,1398],{"class":1046},":::\n",[1019,1400,1402],{"class":1021,"line":1401},32,[1019,1403,1404],{"class":1025},"`\n",[1019,1406,1408],{"class":1021,"line":1407},33,[1019,1409,1259],{"emptyLinePlaceholder":1258},[1019,1411,1413,1415,1418,1420,1423,1426,1429,1432,1434,1437,1440,1443,1445,1447,1449,1453,1456,1458,1460,1463,1465,1468,1471,1473,1475,1477,1480,1482],{"class":1021,"line":1412},34,[1019,1414,1278],{"class":1033},[1019,1416,1417],{"class":1065}," preset ",[1019,1419,1040],{"class":1025},[1019,1421,1077],{"class":1422},"s2Zo4",[1019,1424,1425],{"class":1065},"(",[1019,1427,1428],{"class":1025},"{",[1019,1430,1431],{"class":1029}," features",[1019,1433,603],{"class":1025},[1019,1435,1436],{"class":1065}," [",[1019,1438,1439],{"class":1422},"coreContentFeature",[1019,1441,1442],{"class":1065},"()",[1019,1444,1069],{"class":1025},[1019,1446,1072],{"class":1422},[1019,1448,1026],{"class":1025},[1019,1450,1452],{"class":1451},"sBMFI","Component",[1019,1454,1455],{"class":1025},">",[1019,1457,1425],{"class":1065},[1019,1459,1428],{"class":1025},[1019,1461,1462],{"class":1029}," palette",[1019,1464,603],{"class":1025},[1019,1466,1467],{"class":1065}," EditorCommandPalette ",[1019,1469,1470],{"class":1025},"}",[1019,1472,465],{"class":1065},[1019,1474,1069],{"class":1025},[1019,1476,1150],{"class":1422},[1019,1478,1479],{"class":1065},"()] ",[1019,1481,1470],{"class":1025},[1019,1483,1484],{"class":1065},")\n",[1019,1486,1488,1490,1493,1495,1497],{"class":1021,"line":1487},35,[1019,1489,1278],{"class":1033},[1019,1491,1492],{"class":1065}," text ",[1019,1494,1040],{"class":1025},[1019,1496,1237],{"class":1422},[1019,1498,1499],{"class":1065},"(SAMPLE)\n",[1019,1501,1503,1505,1508,1510,1512,1514,1517,1519],{"class":1021,"line":1502},36,[1019,1504,1278],{"class":1033},[1019,1506,1507],{"class":1065}," editor ",[1019,1509,1040],{"class":1025},[1019,1511,1242],{"class":1422},[1019,1513,1026],{"class":1025},[1019,1515,1516],{"class":1451},"Editor",[1019,1518,1455],{"class":1025},[1019,1520,1521],{"class":1065},"()\n",[1019,1523,1525,1527,1530,1532,1534,1536,1540],{"class":1021,"line":1524},37,[1019,1526,1278],{"class":1033},[1019,1528,1529],{"class":1065}," edits ",[1019,1531,1040],{"class":1025},[1019,1533,1237],{"class":1422},[1019,1535,1425],{"class":1065},[1019,1537,1539],{"class":1538},"sbssI","0",[1019,1541,1484],{"class":1065},[1019,1543,1545,1547,1550,1552,1554,1556,1558,1561,1564,1566,1569,1572,1575,1578,1581,1583,1585,1587],{"class":1021,"line":1544},38,[1019,1546,1278],{"class":1033},[1019,1548,1549],{"class":1065}," unchanged ",[1019,1551,1040],{"class":1025},[1019,1553,1232],{"class":1422},[1019,1555,1425],{"class":1065},[1019,1557,1442],{"class":1025},[1019,1559,1560],{"class":1033}," =>",[1019,1562,1563],{"class":1065}," edits",[1019,1565,526],{"class":1025},[1019,1567,1568],{"class":1065},"value ",[1019,1570,1571],{"class":1025},"===",[1019,1573,1574],{"class":1538}," 0",[1019,1576,1577],{"class":1025}," &&",[1019,1579,1580],{"class":1065}," text",[1019,1582,526],{"class":1025},[1019,1584,1568],{"class":1065},[1019,1586,1571],{"class":1025},[1019,1588,1589],{"class":1065}," SAMPLE)\n",[1019,1591,1593,1595,1598,1600,1602,1604,1606,1609,1611],{"class":1021,"line":1592},39,[1019,1594,1278],{"class":1033},[1019,1596,1597],{"class":1065}," loadDiagnostics ",[1019,1599,1040],{"class":1025},[1019,1601,1237],{"class":1422},[1019,1603,1026],{"class":1025},[1019,1605,497],{"class":1451},[1019,1607,1608],{"class":1065},"[]",[1019,1610,1455],{"class":1025},[1019,1612,1613],{"class":1065},"([])\n",[1019,1615,1617],{"class":1021,"line":1616},40,[1019,1618,1259],{"emptyLinePlaceholder":1258},[1019,1620,1622],{"class":1021,"line":1621},41,[1019,1623,1624],{"class":1265},"\u002F\u002F Source mode: the whole document as Markdown text, committed only when it parses without a fatal diagnostic.\n",[1019,1626,1628,1630,1633,1635,1637,1639,1641,1644,1646,1649,1651,1654,1656,1658,1660],{"class":1021,"line":1627},42,[1019,1629,1278],{"class":1033},[1019,1631,1632],{"class":1065}," sourceMode ",[1019,1634,1040],{"class":1025},[1019,1636,1102],{"class":1422},[1019,1638,1425],{"class":1065},[1019,1640,1428],{"class":1025},[1019,1642,1643],{"class":1422}," getEditor",[1019,1645,603],{"class":1025},[1019,1647,1648],{"class":1025}," ()",[1019,1650,1560],{"class":1033},[1019,1652,1653],{"class":1065}," editor",[1019,1655,526],{"class":1025},[1019,1657,1568],{"class":1065},[1019,1659,1470],{"class":1025},[1019,1661,1484],{"class":1065},[1019,1663,1665,1667,1670,1672,1674,1677,1679],{"class":1021,"line":1664},43,[1019,1666,1278],{"class":1033},[1019,1668,1669],{"class":1065}," source ",[1019,1671,1040],{"class":1025},[1019,1673,1181],{"class":1422},[1019,1675,1676],{"class":1065},"(sourceMode",[1019,1678,526],{"class":1025},[1019,1680,1681],{"class":1065},"state)\n",[1019,1683,1685,1687,1690,1692,1694,1696,1698,1700,1703,1705,1707,1709,1712,1714,1716,1718,1721],{"class":1021,"line":1684},44,[1019,1686,1278],{"class":1033},[1019,1688,1689],{"class":1065}," inSource ",[1019,1691,1040],{"class":1025},[1019,1693,1232],{"class":1422},[1019,1695,1425],{"class":1065},[1019,1697,1442],{"class":1025},[1019,1699,1560],{"class":1033},[1019,1701,1702],{"class":1065}," source",[1019,1704,526],{"class":1025},[1019,1706,671],{"class":1065},[1019,1708,526],{"class":1025},[1019,1710,1711],{"class":1065},"mode ",[1019,1713,1571],{"class":1025},[1019,1715,1086],{"class":1025},[1019,1717,642],{"class":1046},[1019,1719,1720],{"class":1025},"'",[1019,1722,1484],{"class":1065},[1019,1724,1726,1729,1731],{"class":1021,"line":1725},45,[1019,1727,1728],{"class":1025},"\u003C\u002F",[1019,1730,1030],{"class":1029},[1019,1732,1052],{"class":1025},[418,1734,1735,1736,1738],{},"The template mounts the surface with ",[421,1737,610],{},", the preset, the source mode and the two events:",[1009,1740,1742],{"className":1011,"code":1741,"filename":1013,"language":1014,"meta":1015,"style":1015},"\u003Ctemplate>\n  \u003CUApp>\n    \u003Cmain class=\"mx-auto flex max-w-4xl flex-col gap-4 p-6\">\n      \u003Ch1 class=\"text-xl font-semibold\">@skaile\u002Fforge-editor – MarkdownSurface\u003C\u002Fh1>\n      \u003Cp class=\"text-sm text-muted\" data-testid=\"roundtrip\">\n        Round trip without edits: {{ unchanged ? 'byte-identical' : 'changed' }}\n      \u003C\u002Fp>\n      \u003Cdiv class=\"flex items-center gap-2\">\n        \u003CEditorToolbar v-show=\"!inSource\" :editor=\"editor\" \u002F>\n        \u003CUButton\n          v-if=\"!inSource\"\n          class=\"ml-auto\"\n          label=\"Source\"\n          icon=\"i-lucide-file-code\"\n          color=\"neutral\"\n          variant=\"outline\"\n          data-testid=\"source-enter\"\n          @click=\"sourceMode.enter()\"\n        \u002F>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"rounded-lg border border-default p-4\" data-testid=\"surface\">\n        \u003CMarkdownSurface\n          v-model=\"text\"\n          :preset=\"preset\"\n          :source-mode=\"sourceMode\"\n          @ready=\"editor = $event\"\n          @update:model-value=\"edits++\"\n          @diagnostics=\"loadDiagnostics = $event\"\n        \u002F>\n      \u003C\u002Fdiv>\n      \u003Cp class=\"text-sm text-muted\" data-testid=\"diagnostics\">\n        Load diagnostics: {{ loadDiagnostics.length ? loadDiagnostics.map(d => `${d.code}${d.line ? `@${d.line}` : ''}`).join(', ') : 'none' }}\n      \u003C\u002Fp>\n      \u003Cpre class=\"max-h-96 overflow-auto rounded-lg bg-elevated p-3 text-xs\" data-testid=\"markdown\">{{ text }}\u003C\u002Fpre>\n    \u003C\u002Fmain>\n  \u003C\u002FUApp>\n\u003C\u002Ftemplate>\n",[421,1743,1744,1753,1763,1785,1815,1846,1851,1860,1880,1920,1927,1943,1957,1971,1984,1998,2012,2026,2049,2054,2062,2092,2099,2113,2128,2143,2163,2187,2206,2210,2218,2246,2251,2259,2297,2306,2315],{"__ignoreMap":1015},[1019,1745,1746,1748,1751],{"class":1021,"line":1022},[1019,1747,1026],{"class":1025},[1019,1749,1750],{"class":1029},"template",[1019,1752,1052],{"class":1025},[1019,1754,1755,1758,1761],{"class":1021,"line":1055},[1019,1756,1757],{"class":1025},"  \u003C",[1019,1759,1760],{"class":1029},"UApp",[1019,1762,1052],{"class":1025},[1019,1764,1765,1768,1771,1774,1776,1778,1781,1783],{"class":1021,"line":1095},[1019,1766,1767],{"class":1025},"    \u003C",[1019,1769,1770],{"class":1029},"main",[1019,1772,1773],{"class":1033}," class",[1019,1775,1040],{"class":1025},[1019,1777,1043],{"class":1025},[1019,1779,1780],{"class":1046},"mx-auto flex max-w-4xl flex-col gap-4 p-6",[1019,1782,1043],{"class":1025},[1019,1784,1052],{"class":1025},[1019,1786,1787,1790,1793,1795,1797,1799,1802,1804,1806,1809,1811,1813],{"class":1021,"line":1123},[1019,1788,1789],{"class":1025},"      \u003C",[1019,1791,1792],{"class":1029},"h1",[1019,1794,1773],{"class":1033},[1019,1796,1040],{"class":1025},[1019,1798,1043],{"class":1025},[1019,1800,1801],{"class":1046},"text-xl font-semibold",[1019,1803,1043],{"class":1025},[1019,1805,1455],{"class":1025},[1019,1807,1808],{"class":1065},"@skaile\u002Fforge-editor – MarkdownSurface",[1019,1810,1728],{"class":1025},[1019,1812,1792],{"class":1029},[1019,1814,1052],{"class":1025},[1019,1816,1817,1819,1821,1823,1825,1827,1830,1832,1835,1837,1839,1842,1844],{"class":1021,"line":1143},[1019,1818,1789],{"class":1025},[1019,1820,418],{"class":1029},[1019,1822,1773],{"class":1033},[1019,1824,1040],{"class":1025},[1019,1826,1043],{"class":1025},[1019,1828,1829],{"class":1046},"text-sm text-muted",[1019,1831,1043],{"class":1025},[1019,1833,1834],{"class":1033}," data-testid",[1019,1836,1040],{"class":1025},[1019,1838,1043],{"class":1025},[1019,1840,1841],{"class":1046},"roundtrip",[1019,1843,1043],{"class":1025},[1019,1845,1052],{"class":1025},[1019,1847,1848],{"class":1021,"line":1164},[1019,1849,1850],{"class":1065},"        Round trip without edits: {{ unchanged ? 'byte-identical' : 'changed' }}\n",[1019,1852,1853,1856,1858],{"class":1021,"line":1195},[1019,1854,1855],{"class":1025},"      \u003C\u002F",[1019,1857,418],{"class":1029},[1019,1859,1052],{"class":1025},[1019,1861,1862,1864,1867,1869,1871,1873,1876,1878],{"class":1021,"line":1218},[1019,1863,1789],{"class":1025},[1019,1865,1866],{"class":1029},"div",[1019,1868,1773],{"class":1033},[1019,1870,1040],{"class":1025},[1019,1872,1043],{"class":1025},[1019,1874,1875],{"class":1046},"flex items-center gap-2",[1019,1877,1043],{"class":1025},[1019,1879,1052],{"class":1025},[1019,1881,1882,1885,1888,1891,1893,1895,1898,1901,1903,1906,1909,1911,1913,1915,1917],{"class":1021,"line":1255},[1019,1883,1884],{"class":1025},"        \u003C",[1019,1886,1887],{"class":1029},"EditorToolbar",[1019,1889,1890],{"class":1033}," v-show",[1019,1892,1040],{"class":1025},[1019,1894,1043],{"class":1025},[1019,1896,1897],{"class":1025},"!",[1019,1899,1900],{"class":1065},"inSource",[1019,1902,1043],{"class":1025},[1019,1904,1905],{"class":1025}," :",[1019,1907,1908],{"class":1033},"editor",[1019,1910,1040],{"class":1025},[1019,1912,1043],{"class":1025},[1019,1914,1908],{"class":1065},[1019,1916,1043],{"class":1025},[1019,1918,1919],{"class":1025}," \u002F>\n",[1019,1921,1922,1924],{"class":1021,"line":1262},[1019,1923,1884],{"class":1025},[1019,1925,1926],{"class":1029},"UButton\n",[1019,1928,1929,1932,1934,1936,1938,1940],{"class":1021,"line":1269},[1019,1930,1931],{"class":1058},"          v-if",[1019,1933,1040],{"class":1025},[1019,1935,1043],{"class":1025},[1019,1937,1897],{"class":1025},[1019,1939,1900],{"class":1065},[1019,1941,1942],{"class":1025},"\"\n",[1019,1944,1945,1948,1950,1952,1955],{"class":1021,"line":1275},[1019,1946,1947],{"class":1033},"          class",[1019,1949,1040],{"class":1025},[1019,1951,1043],{"class":1025},[1019,1953,1954],{"class":1046},"ml-auto",[1019,1956,1942],{"class":1025},[1019,1958,1959,1962,1964,1966,1969],{"class":1021,"line":1292},[1019,1960,1961],{"class":1033},"          label",[1019,1963,1040],{"class":1025},[1019,1965,1043],{"class":1025},[1019,1967,1968],{"class":1046},"Source",[1019,1970,1942],{"class":1025},[1019,1972,1973,1976,1978,1980,1982],{"class":1021,"line":1298},[1019,1974,1975],{"class":1033},"          icon",[1019,1977,1040],{"class":1025},[1019,1979,1043],{"class":1025},[1019,1981,125],{"class":1046},[1019,1983,1942],{"class":1025},[1019,1985,1986,1989,1991,1993,1996],{"class":1021,"line":1304},[1019,1987,1988],{"class":1033},"          color",[1019,1990,1040],{"class":1025},[1019,1992,1043],{"class":1025},[1019,1994,1995],{"class":1046},"neutral",[1019,1997,1942],{"class":1025},[1019,1999,2000,2003,2005,2007,2010],{"class":1021,"line":1309},[1019,2001,2002],{"class":1033},"          variant",[1019,2004,1040],{"class":1025},[1019,2006,1043],{"class":1025},[1019,2008,2009],{"class":1046},"outline",[1019,2011,1942],{"class":1025},[1019,2013,2014,2017,2019,2021,2024],{"class":1021,"line":1315},[1019,2015,2016],{"class":1033},"          data-testid",[1019,2018,1040],{"class":1025},[1019,2020,1043],{"class":1025},[1019,2022,2023],{"class":1046},"source-enter",[1019,2025,1942],{"class":1025},[1019,2027,2028,2031,2034,2036,2038,2040,2042,2045,2047],{"class":1021,"line":1320},[1019,2029,2030],{"class":1025},"          @",[1019,2032,2033],{"class":1033},"click",[1019,2035,1040],{"class":1025},[1019,2037,1043],{"class":1025},[1019,2039,634],{"class":1065},[1019,2041,526],{"class":1025},[1019,2043,2044],{"class":1422},"enter",[1019,2046,1442],{"class":1025},[1019,2048,1942],{"class":1025},[1019,2050,2051],{"class":1021,"line":1326},[1019,2052,2053],{"class":1025},"        \u002F>\n",[1019,2055,2056,2058,2060],{"class":1021,"line":1331},[1019,2057,1855],{"class":1025},[1019,2059,1866],{"class":1029},[1019,2061,1052],{"class":1025},[1019,2063,2064,2066,2068,2070,2072,2074,2077,2079,2081,2083,2085,2088,2090],{"class":1021,"line":1337},[1019,2065,1789],{"class":1025},[1019,2067,1866],{"class":1029},[1019,2069,1773],{"class":1033},[1019,2071,1040],{"class":1025},[1019,2073,1043],{"class":1025},[1019,2075,2076],{"class":1046},"rounded-lg border border-default p-4",[1019,2078,1043],{"class":1025},[1019,2080,1834],{"class":1033},[1019,2082,1040],{"class":1025},[1019,2084,1043],{"class":1025},[1019,2086,2087],{"class":1046},"surface",[1019,2089,1043],{"class":1025},[1019,2091,1052],{"class":1025},[1019,2093,2094,2096],{"class":1021,"line":1343},[1019,2095,1884],{"class":1025},[1019,2097,2098],{"class":1029},"MarkdownSurface\n",[1019,2100,2101,2104,2106,2108,2111],{"class":1021,"line":1349},[1019,2102,2103],{"class":1033},"          v-model",[1019,2105,1040],{"class":1025},[1019,2107,1043],{"class":1025},[1019,2109,2110],{"class":1065},"text",[1019,2112,1942],{"class":1025},[1019,2114,2115,2118,2120,2122,2124,2126],{"class":1021,"line":1355},[1019,2116,2117],{"class":1025},"          :",[1019,2119,867],{"class":1033},[1019,2121,1040],{"class":1025},[1019,2123,1043],{"class":1025},[1019,2125,867],{"class":1065},[1019,2127,1942],{"class":1025},[1019,2129,2130,2132,2135,2137,2139,2141],{"class":1021,"line":1360},[1019,2131,2117],{"class":1025},[1019,2133,2134],{"class":1033},"source-mode",[1019,2136,1040],{"class":1025},[1019,2138,1043],{"class":1025},[1019,2140,634],{"class":1065},[1019,2142,1942],{"class":1025},[1019,2144,2145,2147,2149,2151,2153,2155,2158,2161],{"class":1021,"line":1366},[1019,2146,2030],{"class":1025},[1019,2148,895],{"class":1033},[1019,2150,1040],{"class":1025},[1019,2152,1043],{"class":1025},[1019,2154,1908],{"class":1065},[1019,2156,2157],{"class":1025}," = ",[1019,2159,2160],{"class":1065},"$event",[1019,2162,1942],{"class":1025},[1019,2164,2165,2167,2170,2172,2175,2177,2179,2182,2185],{"class":1021,"line":1372},[1019,2166,2030],{"class":1025},[1019,2168,2169],{"class":1033},"update",[1019,2171,603],{"class":1025},[1019,2173,2174],{"class":1033},"model-value",[1019,2176,1040],{"class":1025},[1019,2178,1043],{"class":1025},[1019,2180,2181],{"class":1065},"edits",[1019,2183,2184],{"class":1025},"++",[1019,2186,1942],{"class":1025},[1019,2188,2189,2191,2193,2195,2197,2200,2202,2204],{"class":1021,"line":1377},[1019,2190,2030],{"class":1025},[1019,2192,653],{"class":1033},[1019,2194,1040],{"class":1025},[1019,2196,1043],{"class":1025},[1019,2198,2199],{"class":1065},"loadDiagnostics",[1019,2201,2157],{"class":1025},[1019,2203,2160],{"class":1065},[1019,2205,1942],{"class":1025},[1019,2207,2208],{"class":1021,"line":1383},[1019,2209,2053],{"class":1025},[1019,2211,2212,2214,2216],{"class":1021,"line":1389},[1019,2213,1855],{"class":1025},[1019,2215,1866],{"class":1029},[1019,2217,1052],{"class":1025},[1019,2219,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244],{"class":1021,"line":1395},[1019,2221,1789],{"class":1025},[1019,2223,418],{"class":1029},[1019,2225,1773],{"class":1033},[1019,2227,1040],{"class":1025},[1019,2229,1043],{"class":1025},[1019,2231,1829],{"class":1046},[1019,2233,1043],{"class":1025},[1019,2235,1834],{"class":1033},[1019,2237,1040],{"class":1025},[1019,2239,1043],{"class":1025},[1019,2241,653],{"class":1046},[1019,2243,1043],{"class":1025},[1019,2245,1052],{"class":1025},[1019,2247,2248],{"class":1021,"line":1401},[1019,2249,2250],{"class":1065},"        Load diagnostics: {{ loadDiagnostics.length ? loadDiagnostics.map(d => `${d.code}${d.line ? `@${d.line}` : ''}`).join(', ') : 'none' }}\n",[1019,2252,2253,2255,2257],{"class":1021,"line":1407},[1019,2254,1855],{"class":1025},[1019,2256,418],{"class":1029},[1019,2258,1052],{"class":1025},[1019,2260,2261,2263,2265,2267,2269,2271,2274,2276,2278,2280,2282,2284,2286,2288,2291,2293,2295],{"class":1021,"line":1412},[1019,2262,1789],{"class":1025},[1019,2264,1009],{"class":1029},[1019,2266,1773],{"class":1033},[1019,2268,1040],{"class":1025},[1019,2270,1043],{"class":1025},[1019,2272,2273],{"class":1046},"max-h-96 overflow-auto rounded-lg bg-elevated p-3 text-xs",[1019,2275,1043],{"class":1025},[1019,2277,1834],{"class":1033},[1019,2279,1040],{"class":1025},[1019,2281,1043],{"class":1025},[1019,2283,863],{"class":1046},[1019,2285,1043],{"class":1025},[1019,2287,1455],{"class":1025},[1019,2289,2290],{"class":1065},"{{ text }}",[1019,2292,1728],{"class":1025},[1019,2294,1009],{"class":1029},[1019,2296,1052],{"class":1025},[1019,2298,2299,2302,2304],{"class":1021,"line":1487},[1019,2300,2301],{"class":1025},"    \u003C\u002F",[1019,2303,1770],{"class":1029},[1019,2305,1052],{"class":1025},[1019,2307,2308,2311,2313],{"class":1021,"line":1502},[1019,2309,2310],{"class":1025},"  \u003C\u002F",[1019,2312,1760],{"class":1029},[1019,2314,1052],{"class":1025},[1019,2316,2317,2319,2321],{"class":1021,"line":1524},[1019,2318,1728],{"class":1025},[1019,2320,1750],{"class":1029},[1019,2322,1052],{"class":1025},[418,2324,2325,2326,2329,2330,2333],{},"The app needs the editor context. ",[421,2327,2328],{},"main.ts"," installs Nuxt UI, then ",[421,2331,2332],{},"createEditor"," with the Nuxt UI kit and a memory backend (users, tags and uploads live in the page):",[1009,2335,2339],{"className":2336,"code":2337,"filename":2338,"language":1047,"meta":1015,"style":1015},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import ui from '@nuxt\u002Fui\u002Fvue-plugin'\nimport { createMemoryBackend } from '@skaile\u002Fforge-editor\u002Fadapters\u002Fmemory'\nimport { createEditor } from '@skaile\u002Fforge-editor\u002Fvue'\nimport { nuxtUiKit } from '@skaile\u002Fforge-editor\u002Fvue\u002Fkit\u002Fnuxt-ui'\nimport { createApp } from 'vue'\nimport App from '.\u002FApp.vue'\nimport '.\u002Fstyle.css'\n\n\u002F\u002F No data layer: documents, dropped files (as blob: URLs), mention users and tags, and settings live in the page.\nconst backend = createMemoryBackend({\n  users: [\n    { id: 'u1', username: 'Ada Lovelace', color: '#7c3aed' },\n    { id: 'u2', username: 'Alan Turing', color: '#0ea5e9' },\n    { id: 'u3', username: 'Grace Hopper', color: '#16a34a' },\n  ],\n  tags: ['idee', 'entwurf', 'wichtig'],\n})\n\ncreateApp(App)\n  .use(ui)\n  .use(createEditor({ kit: nuxtUiKit(), backend }))\n  .mount('#app')\n","examples\u002Fvue-markdown\u002Fsrc\u002Fmain.ts",[421,2340,2341,2358,2378,2397,2417,2436,2452,2463,2467,2472,2488,2498,2546,2589,2632,2640,2679,2685,2689,2697,2708,2740],{"__ignoreMap":1015},[1019,2342,2343,2345,2348,2351,2353,2356],{"class":1021,"line":1022},[1019,2344,1059],{"class":1058},[1019,2346,2347],{"class":1065}," ui ",[1019,2349,2350],{"class":1058},"from",[1019,2352,1086],{"class":1025},[1019,2354,2355],{"class":1046},"@nuxt\u002Fui\u002Fvue-plugin",[1019,2357,1092],{"class":1025},[1019,2359,2360,2362,2364,2367,2369,2371,2373,2376],{"class":1021,"line":1055},[1019,2361,1059],{"class":1058},[1019,2363,1062],{"class":1025},[1019,2365,2366],{"class":1065}," createMemoryBackend",[1019,2368,1080],{"class":1025},[1019,2370,1083],{"class":1058},[1019,2372,1086],{"class":1025},[1019,2374,2375],{"class":1046},"@skaile\u002Fforge-editor\u002Fadapters\u002Fmemory",[1019,2377,1092],{"class":1025},[1019,2379,2380,2382,2384,2387,2389,2391,2393,2395],{"class":1021,"line":1095},[1019,2381,1059],{"class":1058},[1019,2383,1062],{"class":1025},[1019,2385,2386],{"class":1065}," createEditor",[1019,2388,1080],{"class":1025},[1019,2390,1083],{"class":1058},[1019,2392,1086],{"class":1025},[1019,2394,1190],{"class":1046},[1019,2396,1092],{"class":1025},[1019,2398,2399,2401,2403,2406,2408,2410,2412,2415],{"class":1021,"line":1123},[1019,2400,1059],{"class":1058},[1019,2402,1062],{"class":1025},[1019,2404,2405],{"class":1065}," nuxtUiKit",[1019,2407,1080],{"class":1025},[1019,2409,1083],{"class":1058},[1019,2411,1086],{"class":1025},[1019,2413,2414],{"class":1046},"@skaile\u002Fforge-editor\u002Fvue\u002Fkit\u002Fnuxt-ui",[1019,2416,1092],{"class":1025},[1019,2418,2419,2421,2423,2426,2428,2430,2432,2434],{"class":1021,"line":1143},[1019,2420,1059],{"class":1058},[1019,2422,1062],{"class":1025},[1019,2424,2425],{"class":1065}," createApp",[1019,2427,1080],{"class":1025},[1019,2429,1083],{"class":1058},[1019,2431,1086],{"class":1025},[1019,2433,1014],{"class":1046},[1019,2435,1092],{"class":1025},[1019,2437,2438,2440,2443,2445,2447,2450],{"class":1021,"line":1164},[1019,2439,1059],{"class":1058},[1019,2441,2442],{"class":1065}," App ",[1019,2444,2350],{"class":1058},[1019,2446,1086],{"class":1025},[1019,2448,2449],{"class":1046},".\u002FApp.vue",[1019,2451,1092],{"class":1025},[1019,2453,2454,2456,2458,2461],{"class":1021,"line":1195},[1019,2455,1059],{"class":1058},[1019,2457,1086],{"class":1025},[1019,2459,2460],{"class":1046},".\u002Fstyle.css",[1019,2462,1092],{"class":1025},[1019,2464,2465],{"class":1021,"line":1218},[1019,2466,1259],{"emptyLinePlaceholder":1258},[1019,2468,2469],{"class":1021,"line":1255},[1019,2470,2471],{"class":1265},"\u002F\u002F No data layer: documents, dropped files (as blob: URLs), mention users and tags, and settings live in the page.\n",[1019,2473,2474,2476,2479,2481,2483,2485],{"class":1021,"line":1262},[1019,2475,1278],{"class":1033},[1019,2477,2478],{"class":1065}," backend ",[1019,2480,1040],{"class":1025},[1019,2482,2366],{"class":1422},[1019,2484,1425],{"class":1065},[1019,2486,2487],{"class":1025},"{\n",[1019,2489,2490,2493,2495],{"class":1021,"line":1269},[1019,2491,2492],{"class":1029},"  users",[1019,2494,603],{"class":1025},[1019,2496,2497],{"class":1065}," [\n",[1019,2499,2500,2503,2506,2508,2510,2513,2515,2517,2520,2522,2524,2527,2529,2531,2534,2536,2538,2541,2543],{"class":1021,"line":1275},[1019,2501,2502],{"class":1025},"    {",[1019,2504,2505],{"class":1029}," id",[1019,2507,603],{"class":1025},[1019,2509,1086],{"class":1025},[1019,2511,2512],{"class":1046},"u1",[1019,2514,1720],{"class":1025},[1019,2516,1069],{"class":1025},[1019,2518,2519],{"class":1029}," username",[1019,2521,603],{"class":1025},[1019,2523,1086],{"class":1025},[1019,2525,2526],{"class":1046},"Ada Lovelace",[1019,2528,1720],{"class":1025},[1019,2530,1069],{"class":1025},[1019,2532,2533],{"class":1029}," color",[1019,2535,603],{"class":1025},[1019,2537,1086],{"class":1025},[1019,2539,2540],{"class":1046},"#7c3aed",[1019,2542,1720],{"class":1025},[1019,2544,2545],{"class":1025}," },\n",[1019,2547,2548,2550,2552,2554,2556,2559,2561,2563,2565,2567,2569,2572,2574,2576,2578,2580,2582,2585,2587],{"class":1021,"line":1292},[1019,2549,2502],{"class":1025},[1019,2551,2505],{"class":1029},[1019,2553,603],{"class":1025},[1019,2555,1086],{"class":1025},[1019,2557,2558],{"class":1046},"u2",[1019,2560,1720],{"class":1025},[1019,2562,1069],{"class":1025},[1019,2564,2519],{"class":1029},[1019,2566,603],{"class":1025},[1019,2568,1086],{"class":1025},[1019,2570,2571],{"class":1046},"Alan Turing",[1019,2573,1720],{"class":1025},[1019,2575,1069],{"class":1025},[1019,2577,2533],{"class":1029},[1019,2579,603],{"class":1025},[1019,2581,1086],{"class":1025},[1019,2583,2584],{"class":1046},"#0ea5e9",[1019,2586,1720],{"class":1025},[1019,2588,2545],{"class":1025},[1019,2590,2591,2593,2595,2597,2599,2602,2604,2606,2608,2610,2612,2615,2617,2619,2621,2623,2625,2628,2630],{"class":1021,"line":1298},[1019,2592,2502],{"class":1025},[1019,2594,2505],{"class":1029},[1019,2596,603],{"class":1025},[1019,2598,1086],{"class":1025},[1019,2600,2601],{"class":1046},"u3",[1019,2603,1720],{"class":1025},[1019,2605,1069],{"class":1025},[1019,2607,2519],{"class":1029},[1019,2609,603],{"class":1025},[1019,2611,1086],{"class":1025},[1019,2613,2614],{"class":1046},"Grace Hopper",[1019,2616,1720],{"class":1025},[1019,2618,1069],{"class":1025},[1019,2620,2533],{"class":1029},[1019,2622,603],{"class":1025},[1019,2624,1086],{"class":1025},[1019,2626,2627],{"class":1046},"#16a34a",[1019,2629,1720],{"class":1025},[1019,2631,2545],{"class":1025},[1019,2633,2634,2637],{"class":1021,"line":1304},[1019,2635,2636],{"class":1065},"  ]",[1019,2638,2639],{"class":1025},",\n",[1019,2641,2642,2645,2647,2649,2651,2654,2656,2658,2660,2663,2665,2667,2669,2672,2674,2677],{"class":1021,"line":1309},[1019,2643,2644],{"class":1029},"  tags",[1019,2646,603],{"class":1025},[1019,2648,1436],{"class":1065},[1019,2650,1720],{"class":1025},[1019,2652,2653],{"class":1046},"idee",[1019,2655,1720],{"class":1025},[1019,2657,1069],{"class":1025},[1019,2659,1086],{"class":1025},[1019,2661,2662],{"class":1046},"entwurf",[1019,2664,1720],{"class":1025},[1019,2666,1069],{"class":1025},[1019,2668,1086],{"class":1025},[1019,2670,2671],{"class":1046},"wichtig",[1019,2673,1720],{"class":1025},[1019,2675,2676],{"class":1065},"]",[1019,2678,2639],{"class":1025},[1019,2680,2681,2683],{"class":1021,"line":1315},[1019,2682,1470],{"class":1025},[1019,2684,1484],{"class":1065},[1019,2686,2687],{"class":1021,"line":1320},[1019,2688,1259],{"emptyLinePlaceholder":1258},[1019,2690,2691,2694],{"class":1021,"line":1326},[1019,2692,2693],{"class":1422},"createApp",[1019,2695,2696],{"class":1065},"(App)\n",[1019,2698,2699,2702,2705],{"class":1021,"line":1331},[1019,2700,2701],{"class":1025},"  .",[1019,2703,2704],{"class":1422},"use",[1019,2706,2707],{"class":1065},"(ui)\n",[1019,2709,2710,2712,2714,2716,2718,2720,2722,2725,2727,2729,2731,2733,2735,2737],{"class":1021,"line":1337},[1019,2711,2701],{"class":1025},[1019,2713,2704],{"class":1422},[1019,2715,1425],{"class":1065},[1019,2717,2332],{"class":1422},[1019,2719,1425],{"class":1065},[1019,2721,1428],{"class":1025},[1019,2723,2724],{"class":1029}," kit",[1019,2726,603],{"class":1025},[1019,2728,2405],{"class":1422},[1019,2730,1442],{"class":1065},[1019,2732,1069],{"class":1025},[1019,2734,2478],{"class":1065},[1019,2736,1470],{"class":1025},[1019,2738,2739],{"class":1065},"))\n",[1019,2741,2742,2744,2747,2749,2751,2754,2756],{"class":1021,"line":1343},[1019,2743,2701],{"class":1025},[1019,2745,2746],{"class":1422},"mount",[1019,2748,1425],{"class":1065},[1019,2750,1720],{"class":1025},[1019,2752,2753],{"class":1046},"#app",[1019,2755,1720],{"class":1025},[1019,2757,1484],{"class":1065},[418,2759,2760,2761,512,2764,2767,2768,2770],{},"Import ",[421,2762,2763],{},"core.css",[421,2765,2766],{},"tables.css"," in this order after Tailwind and Nuxt UI (",[921,2769,361],{"href":362},"). In this documentation site the demo is the built example, embedded as an iframe.",[2772,2773,2774],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html 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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .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);}",{"title":1015,"searchDepth":1055,"depth":1055,"links":2776},[2777,2785,2790,2792],{"id":460,"depth":1055,"text":2778,"children":2779},"Markdown (@skaile\u002Fforge-editor\u002Fmarkdown)",[2780,2781,2783],{"id":469,"depth":1095,"text":470},{"id":590,"depth":1095,"text":2782},"Vue: MarkdownSurface",{"id":657,"depth":1095,"text":2784},"React: MarkdownSurface",{"id":696,"depth":1055,"text":2786,"children":2787},"Code (@skaile\u002Fforge-editor\u002Fcode)",[2788,2789],{"id":714,"depth":1095,"text":470},{"id":776,"depth":1095,"text":777},{"id":834,"depth":1055,"text":2791},"One component for every file: DocumentSurface",{"id":913,"depth":1055,"text":2793},"Example: examples\u002Fvue-markdown","Edit Markdown files as blocks with frontmatter and unknown fences preserved, edit source files in CodeMirror, and pick a surface per file type.","md",null,{},{"icon":125},{"title":122,"description":2794},"N4LF2qi0TBuYbCDuHXG3Mmw5ZQnGVZndIILMeLoxqIE",[2802,2804],{"title":117,"path":118,"stem":119,"description":2803,"icon":120,"children":-1},"Show folders, documents and the open document's outline in a file drawer over your own DocumentStore, on Vue and React.",{"title":127,"path":128,"stem":129,"description":2805,"icon":83,"children":-1},"Mount the collaborative AdvancedEditor on React with the chrome components beside it, over the same backend as the Vue surface.",1793178231362]