[{"data":1,"prerenderedAt":1954},["ShallowReactive",2],{"navigation_docs":3,"-guides-derive-methods":412,"-guides-derive-methods-surround":1949},[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":170,"body":414,"description":1942,"extension":1943,"links":1944,"meta":1945,"navigation":1946,"path":171,"seo":1947,"stem":172,"__hash__":1948},"docs\u002F3.guides\u002F25.derive-methods.md",{"type":415,"value":416,"toc":1935},"minimark",[417,436,451,456,486,493,1461,1480,1502,1509,1595,1599,1660,1688,1692,1701,1798,1802,1831,1835,1848,1891,1931],[418,419,420,421,425,426,430,431,435],"p",{},"Transcription, text extraction (PDF text, OCR, image description), summary, AI fill, AI derivation into another Block type and bibliography fetch have one thing in common: they make something from a Block. Each is one ",[422,423,424],"strong",{},"derive method",". A Feature contributes its methods as ",[427,428,429],"code",{},"deriveMethods",", and the preset merges all of them into one registry. The ",[432,433,434],"a",{"href":337},"derive-method contract"," lists the fields.",[418,437,438,439,442,443,446,447,450],{},"A Block that was made this way is a ",[422,440,441],{},"Derived block",". It records in ",[427,444,445],{},"meta.derivation"," what it was made from (its ",[422,448,449],{},"Derivation","). The original keeps nothing, so the link cannot disagree with the document after a move, a delete or a merge.",[452,453,455],"h2",{"id":454},"register-a-derive-method","Register a derive method",[418,457,458,459,462,463,466,467,470,471,474,475,478,479,482,483,485],{},"A derive method declares the capabilities the original must have (",[427,460,461],{},"requires","), the ability (",[427,464,465],{},"ability",") and, where the capabilities cannot say it, ",[427,468,469],{},"available(ctx)",": the backend flag ",[427,472,473],{},"ctx.ctx.backend.ai",", the public AI flags, a readable source. ",[427,476,477],{},"run"," writes the result. A method with sub-choices (derive into one of several Block types) gives ",[427,480,481],{},"menu"," instead of ",[427,484,477],{},".",[418,487,488,489,492],{},"The example adds „Kernaussagen ableiten“. It is offered on every Container block with a title when the backend has AI, and it inserts a Typed block of the Block type ",[427,490,491],{},"note"," that records its Derivation:",[494,495,501],"pre",{"className":496,"code":497,"filename":498,"language":499,"meta":500,"style":500},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { Derivation, EditorFeature } from '@skaile\u002Fforge-editor\u002Fcore'\nimport { derivationState, derivedOf, newTypedBlockJSON } from '@skaile\u002Fforge-editor\u002Fcore'\nimport { ABILITY, blockIdOf } from '@skaile\u002Fforge-editor\u002Fcore\u002Fschema'\nimport type { Node as PMNode } from '@tiptap\u002Fpm\u002Fmodel'\n\n\u002F\u002F One registration: the block action, its gate (`requires`, `ability`, `available`) and the work.\nexport function keyPointsFeature(): EditorFeature {\n  return {\n    id: 'key-points',\n    dimension: 'ai',\n    requires: ['composites'],\n    deriveMethods: [{\n      id: 'key-points',\n      label: () => 'Kernaussagen ableiten',\n      icon: 'i-lucide-list-checks',\n      ability: ABILITY.compositeDerive,\n      requires: ['container', 'title'],\n      available: ({ ctx }) => !!ctx.backend.ai,\n      run: ({ editor, node, pos }) => {\n        const block = blockIdOf(node)\n        if (!block) return\n        const derivation: Derivation = { from: { block }, method: 'key-points', createdAt: new Date().toISOString(), inputHash: '', outputHash: '' }\n        const result = newTypedBlockJSON('note', [{ type: 'paragraph', content: [{ type: 'text', text: 'Kernaussagen ...' }] }])\n        \u002F\u002F The Derived block records where it came from; the original keeps nothing.\n        editor.commands.insertContentAt(pos + node.nodeSize, { ...result, attrs: { ...result.attrs, meta: { derivation } } })\n      },\n    }],\n  }\n}\n\n\u002F** The Derived blocks made from the original at `originalPos`, computed from block IDs and asset names. *\u002F\nexport const derivedBlocksOf = (doc: PMNode, originalPos: number, documentId: string) =>\n  derivedOf(doc, originalPos, documentId).map(entry => ({ pos: entry.pos, method: entry.derivation.method }))\n\n\u002F** True when the original of the Derived block at `derivedPos` was deleted. *\u002F\nexport const isSourceMissing = (doc: PMNode, derivedPos: number, documentId: string) =>\n  derivationState(doc, derivedPos, () => '', documentId)?.source === 'missing'\n","docs\u002Fsnippets\u002Fderive-method.ts","ts","",[427,502,503,545,575,601,630,637,644,667,675,696,713,736,749,765,788,804,821,851,888,917,940,961,1044,1129,1135,1213,1219,1229,1235,1241,1246,1252,1301,1369,1374,1380,1421],{"__ignoreMap":500},[504,505,508,512,515,519,523,526,529,532,535,538,542],"span",{"class":506,"line":507},"line",1,[504,509,511],{"class":510},"s7zQu","import",[504,513,514],{"class":510}," type",[504,516,518],{"class":517},"sMK4o"," {",[504,520,522],{"class":521},"sTEyZ"," Derivation",[504,524,525],{"class":517},",",[504,527,528],{"class":521}," EditorFeature",[504,530,531],{"class":517}," }",[504,533,534],{"class":510}," from",[504,536,537],{"class":517}," '",[504,539,541],{"class":540},"sfazB","@skaile\u002Fforge-editor\u002Fcore",[504,543,544],{"class":517},"'\n",[504,546,548,550,552,555,557,560,562,565,567,569,571,573],{"class":506,"line":547},2,[504,549,511],{"class":510},[504,551,518],{"class":517},[504,553,554],{"class":521}," derivationState",[504,556,525],{"class":517},[504,558,559],{"class":521}," derivedOf",[504,561,525],{"class":517},[504,563,564],{"class":521}," newTypedBlockJSON",[504,566,531],{"class":517},[504,568,534],{"class":510},[504,570,537],{"class":517},[504,572,541],{"class":540},[504,574,544],{"class":517},[504,576,578,580,582,585,587,590,592,594,596,599],{"class":506,"line":577},3,[504,579,511],{"class":510},[504,581,518],{"class":517},[504,583,584],{"class":521}," ABILITY",[504,586,525],{"class":517},[504,588,589],{"class":521}," blockIdOf",[504,591,531],{"class":517},[504,593,534],{"class":510},[504,595,537],{"class":517},[504,597,598],{"class":540},"@skaile\u002Fforge-editor\u002Fcore\u002Fschema",[504,600,544],{"class":517},[504,602,604,606,608,610,613,616,619,621,623,625,628],{"class":506,"line":603},4,[504,605,511],{"class":510},[504,607,514],{"class":510},[504,609,518],{"class":517},[504,611,612],{"class":521}," Node",[504,614,615],{"class":510}," as",[504,617,618],{"class":521}," PMNode",[504,620,531],{"class":517},[504,622,534],{"class":510},[504,624,537],{"class":517},[504,626,627],{"class":540},"@tiptap\u002Fpm\u002Fmodel",[504,629,544],{"class":517},[504,631,633],{"class":506,"line":632},5,[504,634,636],{"emptyLinePlaceholder":635},true,"\n",[504,638,640],{"class":506,"line":639},6,[504,641,643],{"class":642},"sHwdD","\u002F\u002F One registration: the block action, its gate (`requires`, `ability`, `available`) and the work.\n",[504,645,647,650,654,658,661,664],{"class":506,"line":646},7,[504,648,649],{"class":510},"export",[504,651,653],{"class":652},"spNyl"," function",[504,655,657],{"class":656},"s2Zo4"," keyPointsFeature",[504,659,660],{"class":517},"():",[504,662,528],{"class":663},"sBMFI",[504,665,666],{"class":517}," {\n",[504,668,670,673],{"class":506,"line":669},8,[504,671,672],{"class":510},"  return",[504,674,666],{"class":517},[504,676,678,682,685,687,690,693],{"class":506,"line":677},9,[504,679,681],{"class":680},"swJcz","    id",[504,683,684],{"class":517},":",[504,686,537],{"class":517},[504,688,689],{"class":540},"key-points",[504,691,692],{"class":517},"'",[504,694,695],{"class":517},",\n",[504,697,699,702,704,706,709,711],{"class":506,"line":698},10,[504,700,701],{"class":680},"    dimension",[504,703,684],{"class":517},[504,705,537],{"class":517},[504,707,708],{"class":540},"ai",[504,710,692],{"class":517},[504,712,695],{"class":517},[504,714,716,719,721,724,726,729,731,734],{"class":506,"line":715},11,[504,717,718],{"class":680},"    requires",[504,720,684],{"class":517},[504,722,723],{"class":680}," [",[504,725,692],{"class":517},[504,727,728],{"class":540},"composites",[504,730,692],{"class":517},[504,732,733],{"class":680},"]",[504,735,695],{"class":517},[504,737,739,742,744,746],{"class":506,"line":738},12,[504,740,741],{"class":680},"    deriveMethods",[504,743,684],{"class":517},[504,745,723],{"class":680},[504,747,748],{"class":517},"{\n",[504,750,752,755,757,759,761,763],{"class":506,"line":751},13,[504,753,754],{"class":680},"      id",[504,756,684],{"class":517},[504,758,537],{"class":517},[504,760,689],{"class":540},[504,762,692],{"class":517},[504,764,695],{"class":517},[504,766,768,771,773,776,779,781,784,786],{"class":506,"line":767},14,[504,769,770],{"class":656},"      label",[504,772,684],{"class":517},[504,774,775],{"class":517}," ()",[504,777,778],{"class":652}," =>",[504,780,537],{"class":517},[504,782,783],{"class":540},"Kernaussagen ableiten",[504,785,692],{"class":517},[504,787,695],{"class":517},[504,789,791,794,796,798,800,802],{"class":506,"line":790},15,[504,792,793],{"class":680},"      icon",[504,795,684],{"class":517},[504,797,537],{"class":517},[504,799,203],{"class":540},[504,801,692],{"class":517},[504,803,695],{"class":517},[504,805,807,810,812,814,816,819],{"class":506,"line":806},16,[504,808,809],{"class":680},"      ability",[504,811,684],{"class":517},[504,813,584],{"class":521},[504,815,485],{"class":517},[504,817,818],{"class":521},"compositeDerive",[504,820,695],{"class":517},[504,822,824,827,829,831,833,836,838,840,842,845,847,849],{"class":506,"line":823},17,[504,825,826],{"class":680},"      requires",[504,828,684],{"class":517},[504,830,723],{"class":680},[504,832,692],{"class":517},[504,834,835],{"class":540},"container",[504,837,692],{"class":517},[504,839,525],{"class":517},[504,841,537],{"class":517},[504,843,844],{"class":540},"title",[504,846,692],{"class":517},[504,848,733],{"class":680},[504,850,695],{"class":517},[504,852,854,857,859,862,866,869,871,874,877,879,882,884,886],{"class":506,"line":853},18,[504,855,856],{"class":656},"      available",[504,858,684],{"class":517},[504,860,861],{"class":517}," ({",[504,863,865],{"class":864},"sHdIc"," ctx",[504,867,868],{"class":517}," })",[504,870,778],{"class":652},[504,872,873],{"class":517}," !!",[504,875,876],{"class":521},"ctx",[504,878,485],{"class":517},[504,880,881],{"class":521},"backend",[504,883,485],{"class":517},[504,885,708],{"class":521},[504,887,695],{"class":517},[504,889,891,894,896,898,901,903,906,908,911,913,915],{"class":506,"line":890},19,[504,892,893],{"class":656},"      run",[504,895,684],{"class":517},[504,897,861],{"class":517},[504,899,900],{"class":864}," editor",[504,902,525],{"class":517},[504,904,905],{"class":864}," node",[504,907,525],{"class":517},[504,909,910],{"class":864}," pos",[504,912,868],{"class":517},[504,914,778],{"class":652},[504,916,666],{"class":517},[504,918,920,923,926,929,931,934,937],{"class":506,"line":919},20,[504,921,922],{"class":652},"        const",[504,924,925],{"class":521}," block",[504,927,928],{"class":517}," =",[504,930,589],{"class":656},[504,932,933],{"class":680},"(",[504,935,936],{"class":521},"node",[504,938,939],{"class":680},")\n",[504,941,943,946,949,952,955,958],{"class":506,"line":942},21,[504,944,945],{"class":510},"        if",[504,947,948],{"class":680}," (",[504,950,951],{"class":517},"!",[504,953,954],{"class":521},"block",[504,956,957],{"class":680},") ",[504,959,960],{"class":510},"return\n",[504,962,964,966,969,971,973,975,977,979,981,983,985,988,991,993,995,997,999,1001,1004,1006,1009,1012,1015,1017,1020,1022,1024,1027,1029,1032,1034,1037,1039,1041],{"class":506,"line":963},22,[504,965,922],{"class":652},[504,967,968],{"class":521}," derivation",[504,970,684],{"class":517},[504,972,522],{"class":663},[504,974,928],{"class":517},[504,976,518],{"class":517},[504,978,534],{"class":680},[504,980,684],{"class":517},[504,982,518],{"class":517},[504,984,925],{"class":521},[504,986,987],{"class":517}," },",[504,989,990],{"class":680}," method",[504,992,684],{"class":517},[504,994,537],{"class":517},[504,996,689],{"class":540},[504,998,692],{"class":517},[504,1000,525],{"class":517},[504,1002,1003],{"class":680}," createdAt",[504,1005,684],{"class":517},[504,1007,1008],{"class":517}," new",[504,1010,1011],{"class":656}," Date",[504,1013,1014],{"class":680},"()",[504,1016,485],{"class":517},[504,1018,1019],{"class":656},"toISOString",[504,1021,1014],{"class":680},[504,1023,525],{"class":517},[504,1025,1026],{"class":680}," inputHash",[504,1028,684],{"class":517},[504,1030,1031],{"class":517}," ''",[504,1033,525],{"class":517},[504,1035,1036],{"class":680}," outputHash",[504,1038,684],{"class":517},[504,1040,1031],{"class":517},[504,1042,1043],{"class":517}," }\n",[504,1045,1047,1049,1052,1054,1056,1058,1060,1062,1064,1066,1068,1071,1073,1075,1077,1080,1082,1084,1087,1089,1091,1093,1095,1097,1099,1102,1104,1106,1109,1111,1113,1116,1118,1120,1123,1126],{"class":506,"line":1046},23,[504,1048,922],{"class":652},[504,1050,1051],{"class":521}," result",[504,1053,928],{"class":517},[504,1055,564],{"class":656},[504,1057,933],{"class":680},[504,1059,692],{"class":517},[504,1061,491],{"class":540},[504,1063,692],{"class":517},[504,1065,525],{"class":517},[504,1067,723],{"class":680},[504,1069,1070],{"class":517},"{",[504,1072,514],{"class":680},[504,1074,684],{"class":517},[504,1076,537],{"class":517},[504,1078,1079],{"class":540},"paragraph",[504,1081,692],{"class":517},[504,1083,525],{"class":517},[504,1085,1086],{"class":680}," content",[504,1088,684],{"class":517},[504,1090,723],{"class":680},[504,1092,1070],{"class":517},[504,1094,514],{"class":680},[504,1096,684],{"class":517},[504,1098,537],{"class":517},[504,1100,1101],{"class":540},"text",[504,1103,692],{"class":517},[504,1105,525],{"class":517},[504,1107,1108],{"class":680}," text",[504,1110,684],{"class":517},[504,1112,537],{"class":517},[504,1114,1115],{"class":540},"Kernaussagen ...",[504,1117,692],{"class":517},[504,1119,531],{"class":517},[504,1121,1122],{"class":680},"] ",[504,1124,1125],{"class":517},"}",[504,1127,1128],{"class":680},"])\n",[504,1130,1132],{"class":506,"line":1131},24,[504,1133,1134],{"class":642},"        \u002F\u002F The Derived block records where it came from; the original keeps nothing.\n",[504,1136,1138,1141,1143,1146,1148,1151,1153,1156,1159,1161,1163,1166,1168,1170,1173,1176,1178,1181,1183,1185,1187,1189,1191,1194,1196,1199,1201,1203,1205,1207,1209,1211],{"class":506,"line":1137},25,[504,1139,1140],{"class":521},"        editor",[504,1142,485],{"class":517},[504,1144,1145],{"class":521},"commands",[504,1147,485],{"class":517},[504,1149,1150],{"class":656},"insertContentAt",[504,1152,933],{"class":680},[504,1154,1155],{"class":521},"pos",[504,1157,1158],{"class":517}," +",[504,1160,905],{"class":521},[504,1162,485],{"class":517},[504,1164,1165],{"class":521},"nodeSize",[504,1167,525],{"class":517},[504,1169,518],{"class":517},[504,1171,1172],{"class":517}," ...",[504,1174,1175],{"class":521},"result",[504,1177,525],{"class":517},[504,1179,1180],{"class":680}," attrs",[504,1182,684],{"class":517},[504,1184,518],{"class":517},[504,1186,1172],{"class":517},[504,1188,1175],{"class":521},[504,1190,485],{"class":517},[504,1192,1193],{"class":521},"attrs",[504,1195,525],{"class":517},[504,1197,1198],{"class":680}," meta",[504,1200,684],{"class":517},[504,1202,518],{"class":517},[504,1204,968],{"class":521},[504,1206,531],{"class":517},[504,1208,531],{"class":517},[504,1210,531],{"class":517},[504,1212,939],{"class":680},[504,1214,1216],{"class":506,"line":1215},26,[504,1217,1218],{"class":517},"      },\n",[504,1220,1222,1225,1227],{"class":506,"line":1221},27,[504,1223,1224],{"class":517},"    }",[504,1226,733],{"class":680},[504,1228,695],{"class":517},[504,1230,1232],{"class":506,"line":1231},28,[504,1233,1234],{"class":517},"  }\n",[504,1236,1238],{"class":506,"line":1237},29,[504,1239,1240],{"class":517},"}\n",[504,1242,1244],{"class":506,"line":1243},30,[504,1245,636],{"emptyLinePlaceholder":635},[504,1247,1249],{"class":506,"line":1248},31,[504,1250,1251],{"class":642},"\u002F** The Derived blocks made from the original at `originalPos`, computed from block IDs and asset names. *\u002F\n",[504,1253,1255,1257,1260,1263,1266,1268,1271,1273,1275,1277,1280,1282,1285,1287,1290,1292,1295,1298],{"class":506,"line":1254},32,[504,1256,649],{"class":510},[504,1258,1259],{"class":652}," const",[504,1261,1262],{"class":521}," derivedBlocksOf ",[504,1264,1265],{"class":517},"=",[504,1267,948],{"class":517},[504,1269,1270],{"class":864},"doc",[504,1272,684],{"class":517},[504,1274,618],{"class":663},[504,1276,525],{"class":517},[504,1278,1279],{"class":864}," originalPos",[504,1281,684],{"class":517},[504,1283,1284],{"class":663}," number",[504,1286,525],{"class":517},[504,1288,1289],{"class":864}," documentId",[504,1291,684],{"class":517},[504,1293,1294],{"class":663}," string",[504,1296,1297],{"class":517},")",[504,1299,1300],{"class":652}," =>\n",[504,1302,1304,1307,1310,1312,1314,1316,1319,1321,1324,1326,1329,1331,1333,1335,1337,1339,1342,1344,1346,1348,1350,1352,1354,1356,1359,1361,1364,1366],{"class":506,"line":1303},33,[504,1305,1306],{"class":656},"  derivedOf",[504,1308,1309],{"class":521},"(doc",[504,1311,525],{"class":517},[504,1313,1279],{"class":521},[504,1315,525],{"class":517},[504,1317,1318],{"class":521}," documentId)",[504,1320,485],{"class":517},[504,1322,1323],{"class":656},"map",[504,1325,933],{"class":521},[504,1327,1328],{"class":864},"entry",[504,1330,778],{"class":652},[504,1332,948],{"class":521},[504,1334,1070],{"class":517},[504,1336,910],{"class":680},[504,1338,684],{"class":517},[504,1340,1341],{"class":521}," entry",[504,1343,485],{"class":517},[504,1345,1155],{"class":521},[504,1347,525],{"class":517},[504,1349,990],{"class":680},[504,1351,684],{"class":517},[504,1353,1341],{"class":521},[504,1355,485],{"class":517},[504,1357,1358],{"class":521},"derivation",[504,1360,485],{"class":517},[504,1362,1363],{"class":521},"method ",[504,1365,1125],{"class":517},[504,1367,1368],{"class":521},"))\n",[504,1370,1372],{"class":506,"line":1371},34,[504,1373,636],{"emptyLinePlaceholder":635},[504,1375,1377],{"class":506,"line":1376},35,[504,1378,1379],{"class":642},"\u002F** True when the original of the Derived block at `derivedPos` was deleted. *\u002F\n",[504,1381,1383,1385,1387,1390,1392,1394,1396,1398,1400,1402,1405,1407,1409,1411,1413,1415,1417,1419],{"class":506,"line":1382},36,[504,1384,649],{"class":510},[504,1386,1259],{"class":652},[504,1388,1389],{"class":521}," isSourceMissing ",[504,1391,1265],{"class":517},[504,1393,948],{"class":517},[504,1395,1270],{"class":864},[504,1397,684],{"class":517},[504,1399,618],{"class":663},[504,1401,525],{"class":517},[504,1403,1404],{"class":864}," derivedPos",[504,1406,684],{"class":517},[504,1408,1284],{"class":663},[504,1410,525],{"class":517},[504,1412,1289],{"class":864},[504,1414,684],{"class":517},[504,1416,1294],{"class":663},[504,1418,1297],{"class":517},[504,1420,1300],{"class":652},[504,1422,1424,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1448,1451,1454,1456,1459],{"class":506,"line":1423},37,[504,1425,1426],{"class":656},"  derivationState",[504,1428,1309],{"class":521},[504,1430,525],{"class":517},[504,1432,1404],{"class":521},[504,1434,525],{"class":517},[504,1436,775],{"class":517},[504,1438,778],{"class":652},[504,1440,1031],{"class":517},[504,1442,525],{"class":517},[504,1444,1318],{"class":521},[504,1446,1447],{"class":517},"?.",[504,1449,1450],{"class":521},"source ",[504,1452,1453],{"class":517},"===",[504,1455,537],{"class":517},[504,1457,1458],{"class":540},"missing",[504,1460,544],{"class":517},[418,1462,1463,1466,1467,1470,1471,1473,1474,1476,1477,1479],{},[427,1464,1465],{},"defineEditor"," merges the methods of all Features in feature order into ",[427,1468,1469],{},"preset.deriveMethods"," and throws for a duplicate id, a method with neither or both of ",[427,1472,477],{}," and ",[427,1475,481],{},", and a ",[427,1478,461],{}," entry that no Feature declares (the built-in capabilities count).",[418,1481,1482,1483,1486,1487,1490,1491,1493,1494,1497,1498,1501],{},"The menu of the user does not change. ",[427,1484,1485],{},"blockActionsOf"," turns every method into a Block action with the same id (",[427,1488,1489],{},"deriveActionsOf","), so the overlay filter applies ",[427,1492,461],{},", the ability and ",[427,1495,1496],{},"available"," like for every other action. ",[427,1499,1500],{},"deriveMethodsAt(editor, ctx, pos)"," lists the methods that can run on one Block.",[418,1503,1504,1505,1508],{},"The built-in ",[427,1506,1507],{},"composite-ai"," integration registers its six methods this way:",[1510,1511,1512,1526],"table",{},[1513,1514,1515],"thead",{},[1516,1517,1518,1522],"tr",{},[1519,1520,1521],"th",{},"Method id",[1519,1523,1524],{},[427,1525,461],{},[1527,1528,1529,1542,1559,1571,1583],"tbody",{},[1516,1530,1531,1537],{},[1532,1533,1534],"td",{},[427,1535,1536],{},"composite-fill",[1532,1538,1539],{},[427,1540,1541],{},"ai-brief",[1516,1543,1544,1553],{},[1532,1545,1546,1549,1550],{},[427,1547,1548],{},"composite-summarize",", ",[427,1551,1552],{},"composite-derive",[1532,1554,1555,1549,1557],{},[427,1556,835],{},[427,1558,844],{},[1516,1560,1561,1566],{},[1532,1562,1563],{},[427,1564,1565],{},"bibliography-fetch",[1532,1567,1568],{},[427,1569,1570],{},"bibliography",[1516,1572,1573,1578],{},[1532,1574,1575],{},[427,1576,1577],{},"rendition-create",[1532,1579,1580],{},[427,1581,1582],{},"source",[1516,1584,1585,1590],{},[1532,1586,1587],{},[427,1588,1589],{},"rendition-regenerate",[1532,1591,1592],{},[427,1593,1594],{},"derived",[452,1596,1598],{"id":1597},"the-derivation","The Derivation",[418,1600,1601,1603,1604,1606,1607,1610,1611,1614,1615,1618,1619,1622,1623,1549,1626,1549,1629,1632,1633,1549,1636,1549,1639,1549,1642,1473,1645,1648,1649,1651,1652,1655,1656,1659],{},[427,1602,449],{}," is the record in ",[427,1605,445],{},": ",[427,1608,1609],{},"from"," (an asset by asset name, or a Block by block ID, with ",[427,1612,1613],{},"document"," when the Block lives in another Document), ",[427,1616,1617],{},"method"," (a ",[427,1620,1621],{},"DerivationMethod"," such as ",[427,1624,1625],{},"'transcription'",[427,1627,1628],{},"'ocr'",[427,1630,1631],{},"'description'"," or any string a host uses), ",[427,1634,1635],{},"model",[427,1637,1638],{},"createdAt",[427,1640,1641],{},"inputHash",[427,1643,1644],{},"outputHash",[427,1646,1647],{},"output",". The ",[427,1650,1594],{}," capability, which the composites feature declares, applies to every Block that has the record (",[427,1653,1654],{},"perNode","), and ",[427,1657,1658],{},"derivationOf(node)"," reads it.",[418,1661,1662,1663,1666,1667,1670,1671,1673,1674,1676,1677,1680,1681,948,1684,1687],{},"A Block made from several originals (a mixdown, a summary of several Blocks) names them in ",[427,1664,1665],{},"inputs",", a record of ",[427,1668,1669],{},"{ from, hash }"," by input name. Then ",[427,1672,1609],{}," is the primary input and ",[427,1675,1641],{}," holds ",[427,1678,1679],{},"derivationFingerprint({ method, inputs })",": the SHA-256 of the method and the hash of every input, by input name, so the order the inputs were written in does not change it. ",[427,1682,1683],{},"activity",[427,1685,1686],{},"{ id, agent?, at? }",") records the run that produced the Block, for example one AI request and the model that answered; the AI rendition and „Ableiten (KI)“ write it.",[452,1689,1691],{"id":1690},"find-the-derived-blocks-of-an-original","Find the Derived blocks of an original",[418,1693,1694,1697,1698,1700],{},[427,1695,1696],{},"derivationIndexOf(doc)"," computes the reverse index from block IDs and asset names. It is memoised per ",[427,1699,1270],{}," node, so it is recomputed for every new document version, and it cannot disagree with the document after a move or delete (Yjs merges included). The functions on top of it:",[1702,1703,1704,1715,1731,1773],"ul",{},[1705,1706,1707,1710,1711,1714],"li",{},[427,1708,1709],{},"derivedOf(doc, originalPos, documentId?)"," lists the Derived blocks of the original at ",[427,1712,1713],{},"originalPos",", in document order. A Derived block that was moved out of its original still counts. Derivations from another Document are not listed.",[1705,1716,1717,1720,1721,1724,1725,1727,1728,485],{},[427,1718,1719],{},"derivationOriginOf(doc, derivedPos, documentId?)"," finds the original and answers ",[427,1722,1723],{},"found"," (with node and position), ",[427,1726,1458],{}," or ",[427,1729,1730],{},"foreign",[1705,1732,1733,1736,1737,1740,1741,1744,1745,1549,1747,1750,1751,1754,1755,1757,1758,1761,1762,1765,1766,1768,1769,1772],{},[427,1734,1735],{},"derivationState(doc, derivedPos, bodyHash, documentId?, foreignHash?, inputHashOf?)"," adds ",[427,1738,1739],{},"stale"," (an original changed since) and ",[427,1742,1743],{},"edited"," (the body changed since). For a Derivation with ",[427,1746,1665],{},[427,1748,1749],{},"inputHashOf(from)"," returns the live hash of one input (",[427,1752,1753],{},"null"," = unknown): ",[427,1756,1739],{}," is ",[427,1759,1760],{},"true"," when any input differs, ",[427,1763,1764],{},"false"," when all match and ",[427,1767,1753],{}," without ",[427,1770,1771],{},"inputHashOf"," or while an input is unknown.",[1705,1774,1775,1778,1779,1782,1783,1606,1786,1549,1788,1549,1790,1549,1792,1727,1794,1797],{},[427,1776,1777],{},"derivedStateOf(state)"," folds a ",[427,1780,1781],{},"DerivationState"," into one ",[427,1784,1785],{},"DerivedStateId",[427,1787,1458],{},[427,1789,1739],{},[427,1791,1743],{},[427,1793,1730],{},[427,1795,1796],{},"fresh",", the first that applies.",[452,1799,1801],{"id":1800},"state-badge","State badge",[418,1803,1804,1805,1808,1809,1812,1813,1816,1817,1820,1821,1549,1824,1827,1828,485],{},"The composites chrome, the Document tree and the row badge use that one state. ",[427,1806,1807],{},"derivedChromeOf(editor, row)"," returns ",[427,1810,1811],{},"{ state }",". The composites feature registers ",[427,1814,1815],{},"derivedRowBadge"," under ",[427,1818,1819],{},"rowBadges",": a Derived block whose original changed shows „veraltet“ (English: \"outdated\"), one whose original is gone shows „Quelle fehlt“. A tree row of a Derived block that is stale, missing or edited shows a dot with the reason as its label (",[427,1822,1823],{},"OutlineNode.derived",[427,1825,1826],{},"TreeItem.derived","). The labels are the keys ",[427,1829,1830],{},"composites.derivation.state.\u003Cfresh|stale|edited|missing|foreign>",[452,1832,1834],{"id":1833},"source-missing","Source missing",[418,1836,1837,1838,1757,1841,1844,1845,1847],{},"When the original is deleted, the Derived block stays. ",[427,1839,1840],{},"derivationState(...).source",[427,1842,1843],{},"'missing'",", and the composite chrome, the details card, the Block inspector and the outline of the Document tree show „Quelle fehlt“ (English: \"Source missing\"). A Derivation from another Document is ",[427,1846,1730],{}," and never missing, because listing those needs a query on the documents port. The last two exports of the example read both states:",[494,1849,1851],{"className":496,"code":1850,"language":499,"meta":500,"style":500},"derivedBlocksOf(doc, originalPos, documentId)   \u002F\u002F [{ pos, method }, ...]\nisSourceMissing(doc, derivedPos, documentId)    \u002F\u002F true after the original was deleted\n",[427,1852,1853,1872],{"__ignoreMap":500},[504,1854,1855,1858,1860,1862,1864,1866,1869],{"class":506,"line":507},[504,1856,1857],{"class":656},"derivedBlocksOf",[504,1859,1309],{"class":521},[504,1861,525],{"class":517},[504,1863,1279],{"class":521},[504,1865,525],{"class":517},[504,1867,1868],{"class":521}," documentId)   ",[504,1870,1871],{"class":642},"\u002F\u002F [{ pos, method }, ...]\n",[504,1873,1874,1877,1879,1881,1883,1885,1888],{"class":506,"line":547},[504,1875,1876],{"class":656},"isSourceMissing",[504,1878,1309],{"class":521},[504,1880,525],{"class":517},[504,1882,1404],{"class":521},[504,1884,525],{"class":517},[504,1886,1887],{"class":521}," documentId)    ",[504,1889,1890],{"class":642},"\u002F\u002F true after the original was deleted\n",[418,1892,1893,1549,1896,1549,1899,1549,1902,1549,1905,1549,1908,1549,1911,1549,1914,1473,1917,1920,1921,1923,1924,1473,1927,1930],{},[427,1894,1895],{},"derivationIndexOf",[427,1897,1898],{},"derivedOf",[427,1900,1901],{},"derivationOriginOf",[427,1903,1904],{},"derivationState",[427,1906,1907],{},"derivedStateOf",[427,1909,1910],{},"derivationFingerprint",[427,1912,1913],{},"derivationOf",[427,1915,1916],{},"derivedChildrenOf",[427,1918,1919],{},"DERIVATION_KEY"," are exported from ",[427,1922,541],{},", and only from there: ",[427,1925,1926],{},"\u002Fcomposites",[427,1928,1929],{},"\u002Fcomposites\u002Fschema"," do not re-export them.",[1932,1933,1934],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .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":500,"searchDepth":547,"depth":547,"links":1936},[1937,1938,1939,1940,1941],{"id":454,"depth":547,"text":455},{"id":1597,"depth":547,"text":1598},{"id":1690,"depth":547,"text":1691},{"id":1800,"depth":547,"text":1801},{"id":1833,"depth":547,"text":1834},"Register one way to make a block from another block, find the Derived blocks of an original and handle a missing source.","md",null,{},{"icon":173},{"title":170,"description":1942},"HfNBDOVt6HofUnN_qaTn9LW54rTvgtXmhPA91dFZIDU",[1950,1952],{"title":165,"path":166,"stem":167,"description":1951,"icon":168,"children":-1},"Define a Block type as data in code or in a JSON file, check it against the capability registry, and give the server the same list.",{"title":175,"path":176,"stem":177,"description":1953,"icon":178,"children":-1},"Define Block properties with Property definitions, give them to a Block type with the properties capability and read and write them.",1793219827190]