[{"data":1,"prerenderedAt":1124},["ShallowReactive",2],{"navigation_docs":3,"-guides-templates":412,"-guides-templates-surround":1119},[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":224,"body":414,"description":1112,"extension":1113,"links":1114,"meta":1115,"navigation":1116,"path":225,"seo":1117,"stem":226,"__hash__":1118},"docs\u002F3.guides\u002F35.templates.md",{"type":415,"value":416,"toc":1107},"minimark",[417,439,444,454,577,600,771,777,781,802,882,910,992,995,999,1017,1103],[418,419,420,421,425,426,430,431,434,435,438],"p",{},"A ",[422,423,424],"strong",{},"Dokumentvorlage"," is an ordinary Document that sits in a folder named ",[427,428,429],"code",{},"Dokumentvorlagen"," (",[427,432,433],{},"TEMPLATES_FOLDER",", ",[427,436,437],{},"@skaile\u002Fforge-editor\u002Fcore","). A new Document can start as a copy of it: the editor server copies the Dokumentvorlage's content and fills in the placeholders in every text node. The Dokumentvorlage itself is never changed. There is no separate template store, so a Dokumentvorlage has the same access rules, history and editor as any other Document, and a user who may read it may create from it.",[440,441,443],"h2",{"id":442},"placeholders","Placeholders",[418,445,446,449,450,453],{},[427,447,448],{},"expandTemplate(text, { title, now, locale })"," is pure and framework-free. It returns ",[427,451,452],{},"{ text, cursor }",".",[455,456,457,470],"table",{},[458,459,460],"thead",{},[461,462,463,467],"tr",{},[464,465,466],"th",{},"Placeholder",[464,468,469],{},"Becomes",[471,472,473,484,505,525,542,560],"tbody",{},[461,474,475,481],{},[476,477,478],"td",{},[427,479,480],{},"{{title}}",[476,482,483],{},"the title of the new Document",[461,485,486,491],{},[476,487,488],{},[427,489,490],{},"{{date}}",[476,492,493,494,497,498,430,501,504],{},"the date, ",[427,495,496],{},"medium"," style in ",[427,499,500],{},"locale",[427,502,503],{},"25.10.2026",")",[461,506,507,518],{},[476,508,509,434,512,434,515],{},[427,510,511],{},"{{date:short}}",[427,513,514],{},"{{date:medium}}",[427,516,517],{},"{{date:long}}",[476,519,520,521,524],{},"the date in that ",[427,522,523],{},"Intl.DateTimeFormat"," style",[461,526,527,532],{},[476,528,529],{},[427,530,531],{},"{{date:iso}}",[476,533,534,535,538,539,504],{},"the date as ",[427,536,537],{},"2026-10-25"," (the local day of ",[427,540,541],{},"now",[461,543,544,549],{},[476,545,546],{},[427,547,548],{},"{{time}}",[476,550,551,552,497,555,430,557,504],{},"the time, ",[427,553,554],{},"short",[427,556,500],{},[427,558,559],{},"14:05",[461,561,562,567],{},[476,563,564],{},[427,565,566],{},"{{cursor}}",[476,568,569,570,573,574,576],{},"nothing; ",[427,571,572],{},"cursor"," holds its offset in the expanded text. Every further ",[427,575,566],{}," is removed too",[418,578,579,580,583,584,587,588,591,592,595,596,599],{},"Names are not case-sensitive and may have spaces inside the braces (",[427,581,582],{},"{{ Title }}","). Anything else in double braces stays exactly as written, an unknown name (",[427,585,586],{},"{{author}}",") and an unknown format (",[427,589,590],{},"{{date:weird}}",") included, so a Dokumentvorlage can carry text that only looks like a placeholder. Block templates for the AI (",[427,593,594],{},"BlockTypeAi.contentTemplate",") keep their own ",[427,597,598],{},"{key}"," syntax; the two are not mixed, and Templater scripts are not translated.",[601,602,607],"pre",{"className":603,"code":604,"language":605,"meta":606,"style":606},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { expandTemplate } from '@skaile\u002Fforge-editor\u002Fcore'\n\nconst env = { title: 'Sitzung', now: new Date(2026, 9, 25, 14, 5), locale: 'de-DE' }\nexpandTemplate('# {{title}} ({{date:iso}})\\n\\n{{cursor}}', env)\n\u002F\u002F { text: '# Sitzung (2026-10-25)\\n\\n', cursor: 24 }\n","ts","",[427,608,609,641,648,739,764],{"__ignoreMap":606},[610,611,614,618,622,626,629,632,635,638],"span",{"class":612,"line":613},"line",1,[610,615,617],{"class":616},"s7zQu","import",[610,619,621],{"class":620},"sMK4o"," {",[610,623,625],{"class":624},"sTEyZ"," expandTemplate",[610,627,628],{"class":620}," }",[610,630,631],{"class":616}," from",[610,633,634],{"class":620}," '",[610,636,437],{"class":637},"sfazB",[610,639,640],{"class":620},"'\n",[610,642,644],{"class":612,"line":643},2,[610,645,647],{"emptyLinePlaceholder":646},true,"\n",[610,649,651,655,658,661,663,667,670,672,675,678,681,684,686,689,693,696,700,702,705,707,710,712,715,717,720,722,724,727,729,731,734,736],{"class":612,"line":650},3,[610,652,654],{"class":653},"spNyl","const",[610,656,657],{"class":624}," env ",[610,659,660],{"class":620},"=",[610,662,621],{"class":620},[610,664,666],{"class":665},"swJcz"," title",[610,668,669],{"class":620},":",[610,671,634],{"class":620},[610,673,674],{"class":637},"Sitzung",[610,676,677],{"class":620},"'",[610,679,680],{"class":620},",",[610,682,683],{"class":665}," now",[610,685,669],{"class":620},[610,687,688],{"class":620}," new",[610,690,692],{"class":691},"s2Zo4"," Date",[610,694,695],{"class":624},"(",[610,697,699],{"class":698},"sbssI","2026",[610,701,680],{"class":620},[610,703,704],{"class":698}," 9",[610,706,680],{"class":620},[610,708,709],{"class":698}," 25",[610,711,680],{"class":620},[610,713,714],{"class":698}," 14",[610,716,680],{"class":620},[610,718,719],{"class":698}," 5",[610,721,504],{"class":624},[610,723,680],{"class":620},[610,725,726],{"class":665}," locale",[610,728,669],{"class":620},[610,730,634],{"class":620},[610,732,733],{"class":637},"de-DE",[610,735,677],{"class":620},[610,737,738],{"class":620}," }\n",[610,740,742,745,747,749,752,755,757,759,761],{"class":612,"line":741},4,[610,743,744],{"class":691},"expandTemplate",[610,746,695],{"class":624},[610,748,677],{"class":620},[610,750,751],{"class":637},"# {{title}} ({{date:iso}})",[610,753,754],{"class":624},"\\n\\n",[610,756,566],{"class":637},[610,758,677],{"class":620},[610,760,680],{"class":620},[610,762,763],{"class":624}," env)\n",[610,765,767],{"class":612,"line":766},5,[610,768,770],{"class":769},"sHwdD","\u002F\u002F { text: '# Sitzung (2026-10-25)\\n\\n', cursor: 24 }\n",[418,772,773,776],{},[427,774,775],{},"expandTemplateContent(content, env)"," applies the same expansion to every text node of TipTap JSON. It keeps marks, attributes and block IDs, returns a new tree and drops the cursor, because a new Document has no caret yet.",[440,778,780],{"id":779},"creating-from-a-dokumentvorlage","Creating from a Dokumentvorlage",[418,782,783,786,787,790,791,794,795,798,799,453],{},[427,784,785],{},"POST \u002Fapi\u002Feditor\u002Fdocuments"," takes an optional ",[427,788,789],{},"templateId"," next to ",[427,792,793],{},"title"," and ",[427,796,797],{},"folder",". In the client it is ",[427,800,801],{},"backend.documents.create({ title?, folder?, templateId? })",[601,803,805],{"className":603,"code":804,"language":605,"meta":606,"style":606},"const sitzung = await backend.documents.create({ title: 'Sitzung', folder: 'Projekte', templateId: protokoll.id })\n",[427,806,807],{"__ignoreMap":606},[610,808,809,811,814,816,819,822,824,827,829,832,834,837,839,841,843,845,847,849,852,854,856,859,861,863,866,868,871,873,876,879],{"class":612,"line":613},[610,810,654],{"class":653},[610,812,813],{"class":624}," sitzung ",[610,815,660],{"class":620},[610,817,818],{"class":616}," await",[610,820,821],{"class":624}," backend",[610,823,453],{"class":620},[610,825,826],{"class":624},"documents",[610,828,453],{"class":620},[610,830,831],{"class":691},"create",[610,833,695],{"class":624},[610,835,836],{"class":620},"{",[610,838,666],{"class":665},[610,840,669],{"class":620},[610,842,634],{"class":620},[610,844,674],{"class":637},[610,846,677],{"class":620},[610,848,680],{"class":620},[610,850,851],{"class":665}," folder",[610,853,669],{"class":620},[610,855,634],{"class":620},[610,857,858],{"class":637},"Projekte",[610,860,677],{"class":620},[610,862,680],{"class":620},[610,864,865],{"class":665}," templateId",[610,867,669],{"class":620},[610,869,870],{"class":624}," protokoll",[610,872,453],{"class":620},[610,874,875],{"class":624},"id ",[610,877,878],{"class":620},"}",[610,880,881],{"class":624},")\n",[418,883,884,885,430,887,890,891,894,895,898,899,901,902,905,906,909],{},"The server checks the Dokumentvorlage before it creates anything: the Document must be listed in a folder named ",[427,886,429],{},[427,888,889],{},"templatesOf(tree)",", any depth) and the user must be allowed to read it. It then creates the Document through ",[427,892,893],{},"DocumentAdmin.createDocument"," and stores the expanded content with ",[427,896,897],{},"storeContent",", so the Block index follows as for any write. ",[427,900,480],{}," is the title the Document got, which is the default title when the request names none. The date and time use the first language tag of the ",[427,903,904],{},"Accept-Language"," header, ",[427,907,908],{},"de"," when there is none.",[455,911,912,922],{},[458,913,914],{},[461,915,916,919],{},[464,917,918],{},"Answer",[464,920,921],{},"When",[471,923,924,938,950,960,975],{},[461,925,926,935],{},[476,927,928,931,932],{},[427,929,930],{},"201"," with the ",[427,933,934],{},"DocumentSummary",[476,936,937],{},"created",[461,939,940,945],{},[476,941,942],{},[427,943,944],{},"400",[476,946,947,949],{},[427,948,789],{}," is an empty string, or the body is otherwise invalid",[461,951,952,957],{},[476,953,954],{},[427,955,956],{},"403",[476,958,959],{},"the user may not read the Dokumentvorlage",[461,961,962,967],{},[476,963,964],{},[427,965,966],{},"404",[476,968,969,971,972,974],{},[427,970,789],{}," names no Document inside a ",[427,973,429],{}," folder, or the folder is unknown",[461,976,977,982],{},[476,978,979],{},[427,980,981],{},"501",[476,983,984,985,988,989],{},"the documents port has no ",[427,986,987],{},"createDocument"," or no ",[427,990,991],{},"listTree",[418,993,994],{},"The content of the Dokumentvorlage is the live one when the collaboration server has it open, so an unsaved edit is part of the copy. Block IDs are copied unchanged: they are unique per Document only, so the copy and the Dokumentvorlage do not clash.",[440,996,998],{"id":997},"in-the-host","In the host",[418,1000,1001,1002,1004,1005,1007,1008,1010,1011,1014,1015,669],{},"The host lists the Dokumentvorlagen from the tree it already has: ",[427,1003,889],{}," returns the Documents of the first folder named ",[427,1006,429],{},", newest first, as ",[427,1009,934],{},"s. The reference app shows them in the menu „Aus Dokumentvorlage“ next to „Neues Dokument“ on ",[427,1012,1013],{},"app\u002Fpages\u002Fdocuments\u002Findex.vue"," and passes the choice as ",[427,1016,789],{},[601,1018,1020],{"className":603,"code":1019,"language":605,"meta":606,"style":606},"import { templatesOf } from '@skaile\u002Fforge-editor\u002Fcore'\n\nconst templates = templatesOf(tree) \u002F\u002F [{ id, title, … }]\nawait backend.documents.create({ templateId: templates[0]!.id })\n",[427,1021,1022,1041,1045,1062],{"__ignoreMap":606},[610,1023,1024,1026,1028,1031,1033,1035,1037,1039],{"class":612,"line":613},[610,1025,617],{"class":616},[610,1027,621],{"class":620},[610,1029,1030],{"class":624}," templatesOf",[610,1032,628],{"class":620},[610,1034,631],{"class":616},[610,1036,634],{"class":620},[610,1038,437],{"class":637},[610,1040,640],{"class":620},[610,1042,1043],{"class":612,"line":643},[610,1044,647],{"emptyLinePlaceholder":646},[610,1046,1047,1049,1052,1054,1056,1059],{"class":612,"line":650},[610,1048,654],{"class":653},[610,1050,1051],{"class":624}," templates ",[610,1053,660],{"class":620},[610,1055,1030],{"class":691},[610,1057,1058],{"class":624},"(tree) ",[610,1060,1061],{"class":769},"\u002F\u002F [{ id, title, … }]\n",[610,1063,1064,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1088,1091,1094,1097,1099,1101],{"class":612,"line":741},[610,1065,1066],{"class":616},"await",[610,1068,821],{"class":624},[610,1070,453],{"class":620},[610,1072,826],{"class":624},[610,1074,453],{"class":620},[610,1076,831],{"class":691},[610,1078,695],{"class":624},[610,1080,836],{"class":620},[610,1082,865],{"class":665},[610,1084,669],{"class":620},[610,1086,1087],{"class":624}," templates[",[610,1089,1090],{"class":698},"0",[610,1092,1093],{"class":624},"]",[610,1095,1096],{"class":620},"!.",[610,1098,875],{"class":624},[610,1100,878],{"class":620},[610,1102,881],{"class":624},[1104,1105,1106],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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":606,"searchDepth":643,"depth":643,"links":1108},[1109,1110,1111],{"id":442,"depth":643,"text":443},{"id":779,"depth":643,"text":780},{"id":997,"depth":643,"text":998},"The Dokumentvorlagen folder, the placeholders expandTemplate fills in ({{title}}, {{date}}, {{time}}, {{cursor}}), and the templateId of the Document create route.","md",null,{},{"icon":227},{"title":224,"description":1112},"0qBaADk5XHphNNi1y7GTgIkkzFstYj-P4vLqF5fwbbY",[1120,1122],{"title":219,"path":220,"stem":221,"description":1121,"icon":222,"children":-1},"The importer registry of the feature contract: Importer and ImportPlan, planImport, the Markdown, subtitle and BibTeX importers of the media feature, and how composite-media wraps the plan.",{"title":229,"path":230,"stem":231,"description":1123,"icon":232,"children":-1},"Cite a bibliography entry of the Document with the inline cite node: insert it with \u002Fzitat, read it as (Autor Jahr), and keep it through Markdown export and import.",1793213905973]