[{"data":1,"prerenderedAt":4371},["ShallowReactive",2],{"navigation_docs":3,"-reference-exports":412,"-reference-exports-surround":4366},[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":332,"body":414,"description":4359,"extension":4360,"links":4361,"meta":4362,"navigation":4363,"path":333,"seo":4364,"stem":334,"__hash__":4365},"docs\u002F4.reference\u002F1.exports.md",{"type":415,"value":416,"toc":4355},"minimark",[417,426],[418,419,420,421,425],"p",{},"Every entry is an explicit subpath of ",[422,423,424],"code",{},"package.json#exports","; there is no wildcard into internal folders and no runtime umbrella barrel. Importing an entry registers nothing globally.",[427,428,429,442],"table",{},[430,431,432],"thead",{},[433,434,435,439],"tr",{},[436,437,438],"th",{},"Import",[436,440,441],{},"Contents",[443,444,445,494,602,642,683,806,836,897,921,941,1020,1178,1259,1352,1432,1446,1499,1533,1599,1694,1886,1945,2174,2214,2250,2420,2542,2604,2677,2736,2820,2952,2993,3236,3424,3454,3508,3535,3585,3629,3677,3705,3736,3864,3897,3939,3983,4056,4176,4189,4303],"tbody",{},[433,446,447,453],{},[448,449,450],"td",{},[422,451,452],{},"@skaile\u002Fforge-editor",[448,454,455,456,459,460,459,463,459,466,459,469,459,472,459,475,459,478,459,481,459,484,459,487,459,490,493],{},"Type-only: ",[422,457,458],{},"EditorSettings",", ",[422,461,462],{},"EditorFeature",[422,464,465],{},"EditorPreset",[422,467,468],{},"FeatureContext",[422,470,471],{},"AnchorResolver",[422,473,474],{},"CommandDef",[422,476,477],{},"ToolbarGroupDef",[422,479,480],{},"BlockAction",[422,482,483],{},"AbilitiesOptions",[422,485,486],{},"EditorMetadata",[422,488,489],{},"MetadataItem",[422,491,492],{},"AuthorIdentity",", …",[433,495,496,501],{},[448,497,498],{},[422,499,500],{},"@skaile\u002Fforge-editor\u002Fvue",[448,502,503,504,507,508,511,512,459,515,459,518,459,521,459,524,459,527,459,530,459,533,459,536,459,539,542,543,459,546,459,549,459,552,459,555,459,558,511,561,564,565,459,568,459,571,459,574,459,577,580,581,584,585,511,588,459,591,594,595,459,598,601],{},"The Vue layer (Nuxt UI chrome): ",[422,505,506],{},"createEditor"," (Vue plugin around ",[422,509,510],{},"createEditorContext","), ",[422,513,514],{},"EDITOR_CONTEXT",[422,516,517],{},"useEditorContext",[422,519,520],{},"useEditorSettings",[422,522,523],{},"useNotifier",[422,525,526],{},"trackedStore",[422,528,529],{},"useStoreRef",[422,531,532],{},"useWritableStoreRef",[422,534,535],{},"storeFromRef",[422,537,538],{},"EDITOR_UI",[422,540,541],{},"useEditorUi"," (",[422,544,545],{},"openSettings",[422,547,548],{},"toggleSidebar",[422,550,551],{},"toggleComments",[422,553,554],{},"commentsOpen",[422,556,557],{},"togglePalette",[422,559,560],{},"paletteOpen",[422,562,563],{},"vueSuggestionRenderer",", the components ",[422,566,567],{},"EditorSurface",[422,569,570],{},"EditorToolbar",[422,572,573],{},"EditorSettingsPanel",[422,575,576],{},"EditorSettingsModal",[422,578,579],{},"EditorCommandPalette"," (the ⌘K palette, the ",[422,582,583],{},"core-ui"," overlay: ",[422,586,587],{},"coreUiFeature\u003CComponent>({ palette: EditorCommandPalette })",[422,589,590],{},"SettingsSection",[422,592,593],{},"SuggestionList",", and the types ",[422,596,597],{},"VueFeature",[422,599,600],{},"VuePreset"," (the preset components are the two entries below)",[433,603,604,609],{},[448,605,606],{},[422,607,608],{},"@skaile\u002Fforge-editor\u002Fvue\u002Fsimple",[448,610,611,614,615,618,619,621,622,625,626,629,630,633,634,637,638,641],{},[422,612,613],{},"SimpleEditor"," component (",[422,616,617],{},"core-content"," + ",[422,620,583],{}," plus the host features in ",[422,623,624],{},"add",", e.g. ",[422,627,628],{},"aiFeature()","; no ",[422,631,632],{},"composeEditor",", so the bundle holds no catalog feature; exposes ",[422,635,636],{},"editor"," and the ",[422,639,640],{},"preset"," it mounts)",[433,643,644,649],{},[448,645,646],{},[422,647,648],{},"@skaile\u002Fforge-editor\u002Fvue\u002Fadvanced",[448,650,651,654,655,459,658,459,661,664,665,668,669,671,672,674,675,674,677,679,680,682],{},[422,652,653],{},"AdvancedEditor"," component (same props, defaults ",[422,656,657],{},"'rich'",[422,659,660],{},"'full'",[422,662,663],{},"true","; optional collaboration session) and ",[422,666,667],{},"advancedEditor(options): VuePreset"," (the preset for an ",[422,670,567],{}," you mount yourself, and the base for own feature lists); ",[422,673,570],{},"\u002F",[422,676,573],{},[422,678,576],{}," beside it take the ",[422,681,636],{}," and find the preset through it",[433,684,685,690],{},[448,686,687],{},[422,688,689],{},"@skaile\u002Fforge-editor\u002Freact",[448,691,692,693,459,696,564,698,700,701,704,705,459,707,511,709,459,711,459,713,459,715,580,717,584,719,511,722,459,724,459,726,729,730,542,732,459,735,459,738,459,741,459,744,511,747,459,749,459,751,459,754,459,757,760,761,764,765,768,769,772,773,459,776,459,779,459,782,459,784,787,788,791,792,795,796,799,800,791,803],{},"The React layer (shadcn\u002Fui chrome; Vue-free): ",[422,694,695],{},"EditorContextProvider",[422,697,517],{},[422,699,567],{}," (ref handle ",[422,702,703],{},"EditorSurfaceHandle",": ",[422,706,636],{},[422,708,545],{},[422,710,570],{},[422,712,573],{},[422,714,576],{},[422,716,579],{},[422,718,583],{},[422,720,721],{},"coreUiFeature({ palette: EditorCommandPalette })",[422,723,590],{},[422,725,593],{},[422,727,728],{},"Icon",", the hooks ",[422,731,520],{},[422,733,734],{},"settings",[422,736,737],{},"update",[422,739,740],{},"set",[422,742,743],{},"ready",[422,745,746],{},"synced",[422,748,541],{},[422,750,523],{},[422,752,753],{},"useStore",[422,755,756],{},"EditorUiContext",[422,758,759],{},"reactSuggestionRenderer",", the notice seam ",[422,762,763],{},"reactNotifier"," and sonner's ",[422,766,767],{},"Toaster"," (mount it once per page), the ",[422,770,771],{},"cn"," class helper, and the types ",[422,774,775],{},"ReactFeature",[422,777,778],{},"ReactPreset",[422,780,781],{},"EditorSurfaceProps",[422,783,703],{},[422,785,786],{},"SuggestionListHandle",". Presets are ",[422,789,790],{},"defineEditor({ features })"," from ",[422,793,794],{},"\u002Fcore"," over the ",[422,797,798],{},"\u002F\u003Cfeature>\u002Freact"," bindings and framework-free features, or ",[422,801,802],{},"advancedEditor()",[422,804,805],{},"\u002Freact\u002Fadvanced",[433,807,808,813],{},[448,809,810],{},[422,811,812],{},"@skaile\u002Fforge-editor\u002Freact\u002Fsimple",[448,814,815,817,818,820,821,823,824,704,827,459,829,459,831,511,833],{},[422,816,613],{}," component (props: the surface's except ",[422,819,640],{},", plus ",[422,822,624],{},"; ref handle ",[422,825,826],{},"SimpleEditorHandle",[422,828,636],{},[422,830,545],{},[422,832,640],{},[422,834,835],{},"SimpleEditorProps",[433,837,838,843],{},[448,839,840],{},[422,841,842],{},"@skaile\u002Fforge-editor\u002Freact\u002Fadvanced",[448,844,845,847,848,851,852,854,855,820,857,459,860,459,863,459,866,459,868,459,871,459,874,459,877,459,880,823,883,886,887,890,891,791,893,896],{},[422,846,653],{}," component (every feature and integration with its React binding, optional collaboration session; props ",[422,849,850],{},"AdvancedEditorProps"," = ",[422,853,567],{},"'s except ",[422,856,640],{},[422,858,859],{},"content",[422,861,862],{},"interaction",[422,864,865],{},"ai",[422,867,624],{},[422,869,870],{},"remove",[422,872,873],{},"backend",[422,875,876],{},"blockTypes",[422,878,879],{},"blockUi",[422,881,882],{},"coreContent",[422,884,885],{},"AdvancedEditorHandle",") and ",[422,888,889],{},"advancedEditor(options): ReactPreset","; mount ",[422,892,767],{},[422,894,895],{},"\u002Freact"," beside it",[433,898,899,904],{},[448,900,901],{},[422,902,903],{},"@skaile\u002Fforge-editor\u002Freact\u002Fstyles\u002Fui-vars.css",[448,905,906,907,459,910,913,914,917,918],{},"Maps the shadcn tokens (",[422,908,909],{},"--primary",[422,911,912],{},"--background",", …) to the ",[422,915,916],{},"--ui-*"," variables the feature sheets read; import it before ",[422,919,920],{},"core.css",[433,922,923,928],{},[448,924,925],{},[422,926,927],{},"@skaile\u002Fforge-editor\u002Freact\u002Fstyles\u002Fadvanced.css",[448,929,930,931,459,934,936,937,940],{},"One import for React hosts of the advanced editor: ",[422,932,933],{},"ui-vars.css",[422,935,920],{},", every feature sheet and ",[422,938,939],{},"themes.css"," (with the shadcn bridge for Obsidian themes), in the order the Nuxt module registers them",[433,942,943,948],{},[448,944,945],{},[422,946,947],{},"@skaile\u002Fforge-editor\u002Fpresets\u002Fcompose",[448,949,950,951,954,955,704,957,674,960,962,963,704,965,674,968,674,970,962,973,975,976,979,980,459,983,459,986,988,989,992,993,459,996,999,1000,542,1003,618,1005,1007,1008,1010,1011,1014,1015,1010,1018],{},"Framework-free: ",[422,952,953],{},"composeEditor(ui, { content, interaction, ai, backend?, add?, remove?, blockTypes?, comments?, blockUi?, coreContent? })"," builds a preset from three dimensions (",[422,956,859],{},[422,958,959],{},"'basic'",[422,961,657],{},"; ",[422,964,862],{},[422,966,967],{},"'minimal'",[422,969,660],{},[422,971,972],{},"[]",[422,974,865],{},": boolean) and prunes by the backend's capabilities (",[422,977,978],{},"omitted","), with ",[422,981,982],{},"CONTENT",[422,984,985],{},"INTERACTION",[422,987,113],{}," (feature ids in canonical order), ",[422,990,991],{},"UiBindings\u003CC>"," (the layer binds only the UI-bound features), ",[422,994,995],{},"ComposeOptions\u003CC>",[422,997,998],{},"ComposedEditor\u003CC>",", and ",[422,1001,1002],{},"simpleEditor(): ComposedEditor\u003Cnever>",[422,1004,617],{},[422,1006,583],{},", no ⌘K palette). The ready compositions with the palette are ",[422,1009,632],{}," and ",[422,1012,1013],{},"advancedEditor"," of ",[422,1016,1017],{},"\u002Fvue\u002Fadvanced",[422,1019,805],{},[433,1021,1022,1027],{},[448,1023,1024],{},[422,1025,1026],{},"@skaile\u002Fforge-editor\u002Fcore",[448,1028,1029,1030,459,1033,459,1036,1039,1040,459,1043,459,1046,459,1049,1051,1052,1055,1056,1059,1060,1063,1064,1067,1068,459,1070,459,1073,459,1076,1079,1080,459,1083,459,1086,1089,1090,459,1093,459,1096,459,1099,459,1102,511,1105,459,1108,1111,1112,459,1115,459,1118,459,1121,1124,1125,1128,1129,1010,1132,1135,1136,459,1139,459,1141,459,1143,1146,1147,1124,1150,1124,1153,1156,1157,459,1160,1163,1164,1167,1168,459,1171,459,1174,1177],{},"Framework-free (Tiptap\u002FProseMirror only; imports no ",[422,1031,1032],{},"vue",[422,1034,1035],{},"@tiptap\u002Fvue-3",[422,1037,1038],{},"@nuxt\u002Fui"," or React): ",[422,1041,1042],{},"defineEditor",[422,1044,1045],{},"coreContentFeature",[422,1047,1048],{},"coreUiFeature",[422,1050,510],{}," (settings context and the translator ",[422,1053,1054],{},"ctx.t",", options ",[422,1057,1058],{},"locale: 'de' | 'en'"," and partial ",[422,1061,1062],{},"messages","; with ",[422,1065,1066],{},"createStore"," ",[422,1069,1066],{},[422,1071,1072],{},"derived",[422,1074,1075],{},"Store",[422,1077,1078],{},"ReadonlyStore","), the notice seam (",[422,1081,1082],{},"Notice",[422,1084,1085],{},"Notifier",[422,1087,1088],{},"silentNotifier","), the suggestion renderer seam (",[422,1091,1092],{},"SuggestionPopup",[422,1094,1095],{},"suggestionPopupOf",[422,1097,1098],{},"SuggestionListProps",[422,1100,1101],{},"SuggestionPopupHandle",[422,1103,1104],{},"SuggestionPopupRenderer",[422,1106,1107],{},"registerEditor",[422,1109,1110],{},"Abilities"," and ability helpers, ",[422,1113,1114],{},"BlockFlash",[422,1116,1117],{},"SlashCommand",[422,1119,1120],{},"Metadata",[422,1122,1123],{},"parseBlocks"," \u002F ",[422,1126,1127],{},"DEFAULT_BLOCK_PIPELINE",", generic helpers ",[422,1130,1131],{},"downloadText",[422,1133,1134],{},"fetchErrorMessage",", the feature\u002Ftoolbar\u002Fextension-point types (",[422,1137,1138],{},"EditorFeature\u003CC>",[422,1140,468],{},[422,1142,474],{},[422,1144,1145],{},"MenuItem",", …), ",[422,1148,1149],{},"command",[422,1151,1152],{},"commandState",[422,1154,1155],{},"toolbarOf",", and the block-conversion engine for own features (",[422,1158,1159],{},"ConversionProvider",[422,1161,1162],{},"ConvertTarget"," with its ",[422,1165,1166],{},"custom"," member for host blocks, ",[422,1169,1170],{},"createConverter",[422,1172,1173],{},"convertCoreBlocks",[422,1175,1176],{},"finishConversion",")",[433,1179,1180,1185],{},[448,1181,1182,1184],{},[422,1183,1026],{}," (Typed block)",[448,1186,1187,1188,1191,1192,459,1195,459,1198,459,1201,459,1204,459,1207,1210,1211,1214,1215,1218,1219,459,1222,542,1225,1228,1229,459,1232,459,1235,1124,1238,1124,1241,1244,1245,459,1248,459,1251,1254,1255,1258],{},"Framework-free; the one definition of the Typed block (",[422,1189,1190],{},"core\u002Ftyped-block.ts","): the persisted names ",[422,1193,1194],{},"TYPED_BLOCK",[422,1196,1197],{},"TYPED_BLOCK_TITLE",[422,1199,1200],{},"TYPED_BLOCK_DESCRIPTION",[422,1202,1203],{},"TYPED_BLOCK_TAGS",[422,1205,1206],{},"BLOCK_TYPE_ATTR",[422,1208,1209],{},"BIB_KEY"," (the ",[422,1212,1213],{},"meta"," key of the bibliographic record); ",[422,1216,1217],{},"newTypedBlockJSON(blockType, body?, meta?, title?)"," (the JSON of a fresh Typed block); ",[422,1220,1221],{},"isTypedBlock(node | json)",[422,1223,1224],{},"typedBlockAt(doc, pos)",[422,1226,1227],{},"null"," for an invalid or non-Typed-block position), ",[422,1230,1231],{},"typeIdOf(block)",[422,1233,1234],{},"findBlockType(blockTypes, block)",[422,1236,1237],{},"metaOf",[422,1239,1240],{},"withMeta",[422,1242,1243],{},"withoutMeta"," (copies, the block is never changed). The Derivation record (",[422,1246,1247],{},"Derivation",[422,1249,1250],{},"DERIVATION_KEY",[422,1252,1253],{},"derivationOf",") is part of it. ",[422,1256,1257],{},"\u002Fcore\u002Fschema"," does not export the names",[433,1260,1261,1266],{},[448,1262,1263,1265],{},[422,1264,1026],{}," (derivation and derive methods)",[448,1267,1268,1269,459,1271,459,1274,459,1277,459,1279,459,1281,459,1284,1287,1288,459,1291,459,1294,1297,1298,542,1301,1304,1305,459,1308,542,1311,459,1314,459,1317,459,1320,459,1323,459,1326,1329,1330,511,1333,459,1336,459,1339,459,1342,459,1345,962,1348,1351],{},"Framework-free. ",[422,1270,1247],{},[422,1272,1273],{},"DerivationSource",[422,1275,1276],{},"DerivationMethod",[422,1278,1250],{},[422,1280,1253],{},[422,1282,1283],{},"derivedChildrenOf",[422,1285,1286],{},"derivationIndexOf"," (original → Derived blocks, computed from block IDs and memoised per document node), ",[422,1289,1290],{},"derivedOf(doc, pos)",[422,1292,1293],{},"derivationOriginOf",[422,1295,1296],{},"derivedStateLabel(state, t)"," (the reason label of a Derived block's state), ",[422,1299,1300],{},"derivationState",[422,1302,1303],{},"source: 'found' | 'missing' | 'foreign'","); the derive method registry: ",[422,1306,1307],{},"EditorFeature.deriveMethods",[422,1309,1310],{},"DeriveMethod",[422,1312,1313],{},"id",[422,1315,1316],{},"label",[422,1318,1319],{},"icon",[422,1321,1322],{},"requires",[422,1324,1325],{},"available",[422,1327,1328],{},"run"," or ",[422,1331,1332],{},"menu",[422,1334,1335],{},"DeriveContext",[422,1337,1338],{},"DeriveRegistry",[422,1340,1341],{},"createDeriveRegistry",[422,1343,1344],{},"deriveMethodsAt(editor, ctx, pos)",[422,1346,1347],{},"deriveActionsOf(preset, ctx)",[422,1349,1350],{},"preset.deriveMethods"," is the merged registry",[433,1353,1354,1359],{},[448,1355,1356],{},[422,1357,1358],{},"@skaile\u002Fforge-editor\u002Fcore\u002Fschema",[448,1360,1361,1362,459,1365,1368,1369,1372,1373,459,1376,459,1379,459,1382,1385,1386,459,1389,459,1392,459,1395,511,1398,1401,1402,459,1405,1010,1408,1411,1412,1415,1416,459,1419,459,1422,1425,1426,459,1429,1177],{},"Vue-free base schema: ",[422,1363,1364],{},"coreSchemaExtensions()",[422,1366,1367],{},"coreContentSchemaExtensions(options?)"," with ",[422,1370,1371],{},"CoreContentOptions"," (drop headings, lists, blockquote, code block, rule) and ",[422,1374,1375],{},"starterKitOf",[422,1377,1378],{},"EMPTY_EDITOR_CONTENT",[422,1380,1381],{},"StrikeX",[422,1383,1384],{},"BlockId"," helpers (",[422,1387,1388],{},"BLOCK_ID_TYPES",[422,1390,1391],{},"blockIdOf",[422,1393,1394],{},"findBlockById",[422,1396,1397],{},"assignBlockIds",[422,1399,1400],{},"NodeFlags"," (copies the node flags ",[422,1403,1404],{},"editorBlockContainer",[422,1406,1407],{},"editorChrome",[422,1409,1410],{},"editorBlock"," onto the node spec; ",[422,1413,1414],{},"editorBlock: true"," gives an own node block IDs), ",[422,1417,1418],{},"isEditorBlock",[422,1420,1421],{},"isBlockContainer",[422,1423,1424],{},"isChromeNode",", the ability vocabulary (",[422,1427,1428],{},"ABILITY",[422,1430,1431],{},"ROOT_ABILITIES",[433,1433,1434,1439],{},[448,1435,1436],{},[422,1437,1438],{},"@skaile\u002Fforge-editor\u002Fschema\u002Fsimple",[448,1440,1441,1442,1445],{},"Vue-free ",[422,1443,1444],{},"simpleSchemaExtensions()"," for servers and validators",[433,1447,1448,1453],{},[448,1449,1450],{},[422,1451,1452],{},"@skaile\u002Fforge-editor\u002Fsettings",[448,1454,1455,459,1457,459,1460,459,1463,459,1466,459,1469,1472,1473,1476,1477,459,1480,459,1483,459,1486,459,1489,459,1492,459,1495,1498],{},[422,1456,458],{},[422,1458,1459],{},"EDITOR_SETTINGS_VERSION",[422,1461,1462],{},"EDITOR_SETTINGS_DEFAULTS",[422,1464,1465],{},"editorSettingsSchema",[422,1467,1468],{},"parseEditorSettings",[422,1470,1471],{},"ModelRole",", inert value constants (",[422,1474,1475],{},"MODEL_ROLES",", the Model roles; ",[422,1478,1479],{},"STRUCTURE_MODES",[422,1481,1482],{},"TREE_ROOTS",[422,1484,1485],{},"BLOCK_TYPE_ICON_VISIBILITIES",[422,1487,1488],{},"DRAG_HANDLE_VISIBILITIES",[422,1490,1491],{},"AI_LANGUAGES",[422,1493,1494],{},"AUTHOR_COLOR_STYLES",[422,1496,1497],{},"COMMENTS_LAYOUTS",", …)",[433,1500,1501,1512],{},[448,1502,1503,459,1506,459,1509],{},[422,1504,1505],{},"@skaile\u002Fforge-editor\u002Foutline",[422,1507,1508],{},"\u002Foutline\u002Fvue",[422,1510,1511],{},"\u002Foutline\u002Freact",[448,1513,1514,1010,1517,704,1519,1522,1523,459,1526,459,1529,1532],{},[422,1515,1516],{},"\u002Fvue",[422,1518,895],{},[422,1520,1521],{},"EditorOutline"," (the Block outline); framework-free: ",[422,1524,1525],{},"headingOutline",[422,1527,1528],{},"revealBlockInEditor",[422,1530,1531],{},"HeadingOutlineNode"," (imports no tree and no Typed block code)",[433,1534,1535,1546],{},[448,1536,1537,459,1540,459,1543],{},[422,1538,1539],{},"@skaile\u002Fforge-editor\u002Fsearch",[422,1541,1542],{},"\u002Fsearch\u002Fvue",[422,1544,1545],{},"\u002Fsearch\u002Freact",[448,1547,1548,1549,1552,1553,1010,1555,704,1557,1560,1561,1564,1565,1568,1569,1572,1573,1575,1576,1579,1580,459,1583,459,1586,459,1589,459,1592,459,1595,1598],{},"Workspace search over the Block index (backend capability ",[422,1550,1551],{},"index","). ",[422,1554,1516],{},[422,1556,895],{},[422,1558,1559],{},"SearchPanel"," (props ",[422,1562,1563],{},"open(hit)"," and optional ",[422,1566,1567],{},"documentTitle(id)","; React also ",[422,1570,1571],{},"className","; renders nothing without the ",[422,1574,1551],{}," capability), ",[422,1577,1578],{},"useSearchModel","; framework-free: ",[422,1581,1582],{},"createSearchModel",[422,1584,1585],{},"hitLabel",[422,1587,1588],{},"SearchModel",[422,1590,1591],{},"SearchModelOptions",[422,1593,1594],{},"SearchState",[422,1596,1597],{},"SearchStatus"," (imports no tree, no feature)",[433,1600,1601,1612],{},[448,1602,1603,459,1606,459,1609],{},[422,1604,1605],{},"@skaile\u002Fforge-editor\u002Fchange-sets",[422,1607,1608],{},"\u002Fchange-sets\u002Fvue",[422,1610,1611],{},"\u002Fchange-sets\u002Freact",[448,1613,1614,1615,1552,1618,1010,1620,704,1622,1560,1625,1628,1629,1010,1631,1568,1634,1636,1637,1640,1641,1644,1645,1647,1648,459,1651,459,1654,459,1657,459,1660,459,1663,459,1666,459,1669,459,1672,459,1675,1678,1679,459,1682,459,1685,459,1688,459,1691,1598],{},"What the document chat proposed for other Documents than the open one, reviewed per Document (backend capability ",[422,1616,1617],{},"changeSets",[422,1619,1516],{},[422,1621,895],{},[422,1623,1624],{},"ChangeSetPanel",[422,1626,1627],{},"model",", optional ",[422,1630,1567],{},[422,1632,1633],{},"open(id)",[422,1635,1571],{},"; renders nothing while there is nothing to show), ",[422,1638,1639],{},"useChangeSetModel({ backend })"," (one model per app, shared with the chat through ",[422,1642,1643],{},"AiSidebar","'s ",[422,1646,1617],{},"); framework-free: ",[422,1649,1650],{},"createChangeSetModel",[422,1652,1653],{},"groupChangeSets",[422,1655,1656],{},"hunkLabel",[422,1658,1659],{},"HUNK_STATUS_KEYS",[422,1661,1662],{},"ChangeSetModel",[422,1664,1665],{},"ChangeSetModelOptions",[422,1667,1668],{},"ChangeSetState",[422,1670,1671],{},"ChangeSetGroup",[422,1673,1674],{},"ChangeSetEntry",[422,1676,1677],{},"ChangeSetFailure"," and the types ",[422,1680,1681],{},"ChangeSet",[422,1683,1684],{},"ChangeSetHunk",[422,1686,1687],{},"ChangeSetHunkStatus",[422,1689,1690],{},"ChangeSetOp",[422,1692,1693],{},"ChangeSetFeed",[433,1695,1696,1710],{},[448,1697,1698,459,1701,459,1704,459,1707],{},[422,1699,1700],{},"@skaile\u002Fforge-editor\u002Ftree",[422,1702,1703],{},"\u002Ftree\u002Fvue",[422,1705,1706],{},"\u002Ftree\u002Freact",[422,1708,1709],{},"\u002Ftree\u002Ftypes",[448,1711,1712,1713,1010,1715,704,1717,1720,1721,459,1724,459,1726,1729,1730,1733,1734,459,1736,459,1738,674,1741,1744,1745,459,1748,1750,1751,1753,1754,511,1756,1759,1760,674,1763,1766,1767,1770,1771,459,1774,459,1777,1780,1781,1783,1784,459,1787,1790,1791,459,1794,459,1797,459,1800,962,1803,1805,1806,1010,1808,1810,1811,1815,1816,1818,1819,674,1821,1823,1824,542,1827,1830,1831,511,1834,459,1837,962,1840,459,1843,459,1846,1849,1850,1010,1853,962,1856,1859,1860,1863,1864,1010,1867,962,1870,1067,1873,1368,1876,1010,1879,1882,1883],{},"Document tree. ",[422,1714,1516],{},[422,1716,895],{},[422,1718,1719],{},"DocumentTree"," (Vue: props ",[422,1722,1723],{},"store",[422,1725,636],{},[422,1727,1728],{},"v-model:selectedFolder",", slot ",[422,1731,1732],{},"document-actions","; React: props ",[422,1735,1723],{},[422,1737,636],{},[422,1739,1740],{},"selectedFolder",[422,1742,1743],{},"onSelectedFolderChange"," (uncontrolled when omitted), ",[422,1746,1747],{},"documentActions",[422,1749,1571],{},"; needs ",[422,1752,695],{}," and a mounted ",[422,1755,767],{},[422,1757,1758],{},"useTreeView"," (Vue: ",[422,1761,1762],{},"nodeFilters",[422,1764,1765],{},"expanded"," as refs; React: as values); framework-free: ",[422,1768,1769],{},"DocumentStore"," (the tree's store interface; store-based: ",[422,1772,1773],{},"tree",[422,1775,1776],{},"documents",[422,1778,1779],{},"activeId"," are ",[422,1782,1078],{},"s plus the host's operations), ",[422,1785,1786],{},"createTreeView",[422,1788,1789],{},"treeView(context)"," (the per-app view state: node filters, expanded folders), ",[422,1792,1793],{},"TreeViewModel",[422,1795,1796],{},"NodeFilters",[422,1798,1799],{},"TreeFolder",[422,1801,1802],{},"DocumentSummary",[422,1804,1516],{}," also ",[422,1807,529],{},[422,1809,535],{}," (adapters from Vue refs to the store shape). Depends on core, outline, composites and media; see the ",[1812,1813,1814],"a",{"href":118},"integration guide",". ",[422,1817,1709],{}," has the ",[422,1820,1799],{},[422,1822,1802],{}," types alone, for servers whose typecheck has no DOM. Content tree: ",[422,1825,1826],{},"TreeViewModel.basketFilter",[422,1828,1829],{},"Store\u003Cstring[]>",", persisted under ",[422,1832,1833],{},"tip-tree:basket-filter",[422,1835,1836],{},"setBasketShown(id, shown)",[422,1838,1839],{},"clearBasketFilter()",[422,1841,1842],{},"TreeState.basketFilter",[422,1844,1845],{},"focusKey",[422,1847,1848],{},"focusPath","; the model's ",[422,1851,1852],{},"focus(key)",[422,1854,1855],{},"defocus()",[422,1857,1858],{},"TreeRowState.dimmed","; the ",[422,1861,1862],{},"TreeCommand"," members ",[422,1865,1866],{},"transferBlock",[422,1868,1869],{},"focusBlock",[422,1871,1872],{},"DragPayload",[422,1874,1875],{},"foreign-block",[422,1877,1878],{},"TreeModel.foreignDragOver(item)",[422,1880,1881],{},"dropForeign(item, payload, menu, x, y)",". See ",[1812,1884,117],{"href":1885},"\u002Fguides\u002Fdocument-tree#baskets-focus-and-foreign-drops",[433,1887,1888,1902],{},[448,1889,1890,459,1893,459,1896,459,1899],{},[422,1891,1892],{},"@skaile\u002Fforge-editor\u002Fmedia",[422,1894,1895],{},"\u002Fmedia\u002Fvue",[422,1897,1898],{},"\u002Fmedia\u002Freact",[422,1900,1901],{},"\u002Fmedia\u002Fschema",[448,1903,1904,1010,1906,704,1908,459,1911,459,1914,459,1917,1579,1920,459,1923,459,1926,459,1929,459,1932,459,1935,459,1938,459,1941,1944],{},[422,1905,1516],{},[422,1907,895],{},[422,1909,1910],{},"mediaFeature",[422,1912,1913],{},"useFileImport",[422,1915,1916],{},"AudioRecorderModal",[422,1918,1919],{},"useAudioRecorder",[422,1921,1922],{},"mediaFeatureCore",[422,1924,1925],{},"fileImport",[422,1927,1928],{},"createAudioRecorder",[422,1930,1931],{},"pickFiles",[422,1933,1934],{},"openAudioRecorder",[422,1936,1937],{},"mediaSchemaExtensions()",[422,1939,1940],{},"MEDIA_TYPES",[422,1942,1943],{},"MAX_MEDIA_BYTES",", asset helpers",[433,1946,1947,1961],{},[448,1948,1949,459,1952,459,1955,459,1958],{},[422,1950,1951],{},"@skaile\u002Fforge-editor\u002Fimage-studio",[422,1953,1954],{},"\u002Fimage-studio\u002Fvue",[422,1956,1957],{},"\u002Fimage-studio\u002Freact",[422,1959,1960],{},"\u002Fimage-studio\u002Fschema",[448,1962,1963,1964,1552,1967,704,1969,459,1972,1560,1975,1124,1978,459,1981,459,1983,511,1986,1989,1990,459,1993,962,1996,1999,2000,2003,2004,459,2007,459,2010,459,2012,459,2015,459,2018,2021,2022,704,2024,459,2026,1560,2028,459,2030,459,2033,459,2035,511,2037,2040,2041,2043,2044,2046,2047,2049,2050,2053,2054,2057,2058,459,2061,459,2064,459,2067,2070,2071,459,2074,459,2077,459,2080,459,2083,542,2086,2089,2090,2093,2094,459,2097,459,2100,459,2103,2106,2107,459,2110,459,2113,459,2116,459,2119,2122,2123,459,2126,459,2129,459,2132,459,2135,459,2138,459,2141,459,2144,999,2147,459,2150,459,2153,2156,2157,2160,2161,511,2164,542,2167,2170,2171],{},"The Bild-Studio block (",[1812,1965,1966],{"href":181},"guide",[422,1968,1516],{},[422,1970,1971],{},"imageStudioFeature()",[422,1973,1974],{},"ImageStudioDialog",[422,1976,1977],{},"open",[422,1979,1980],{},"v-model:open",[422,1982,1723],{},[422,1984,1985],{},"title?",[422,1987,1988],{},"createImageStudioNodeStore({ editor, getPos, backend, documentId })"," (with ",[422,1991,1992],{},"ImageStudioNodeStore",[422,1994,1995],{},"ImageStudioNodeStoreOptions",[422,1997,1998],{},"dispose()"," detaches it), ",[422,2001,2002],{},"ImageStudioStore"," (the contract the dialog drives: ",[422,2005,2006],{},"state",[422,2008,2009],{},"promptBlocks",[422,2011,737],{},[422,2013,2014],{},"generate",[422,2016,2017],{},"upload",[422,2019,2020],{},"problem",", all as refs) and everything from the framework-free entry. ",[422,2023,895],{},[422,2025,1971],{},[422,2027,1974],{},[422,2029,1977],{},[422,2031,2032],{},"onOpenChange",[422,2034,1723],{},[422,2036,1985],{},[422,2038,2039],{},"ImageStudioReactStore"," (the same contract with plain values instead of refs; the host re-renders the dialog with the new ",[422,2042,2006],{}," after ",[422,2045,737],{},", and keeps ",[422,2048,737],{}," stable per image: its identity is the store's), ",[422,2051,2052],{},"useImageStudioNodeStore({ editor, getPos, backend, documentId })"," (the store of one node, ",[422,2055,2056],{},"undefined"," on the first render), ",[422,2059,2060],{},"createImageStudioNodeCore",[422,2062,2063],{},"ImageStudioNodeCore",[422,2065,2066],{},"ImageStudioNodeCoreOptions",[422,2068,2069],{},"ImageStudioNodeSnapshot"," and the state and reducers. Framework-free: ",[422,2072,2073],{},"imageStudioFeatureCore(ui?)",[422,2075,2076],{},"ImageStudioUi",[422,2078,2079],{},"IMAGE_STUDIO_OPEN",[422,2081,2082],{},"ImageStudioNode",[422,2084,2085],{},"imageStudioSchemaExtensions()",[422,2087,2088],{},"\u002Fschema"," is Vue-free, for servers), ",[422,2091,2092],{},"ImageStudioAttrs",", the types ",[422,2095,2096],{},"ImageStudioState",[422,2098,2099],{},"ImageStudioImage",[422,2101,2102],{},"ImageStudioTurn",[422,2104,2105],{},"ImageStudioPromptBlock",", the gallery types ",[422,2108,2109],{},"ImageStudioLibrary",[422,2111,2112],{},"ImageStudioLibraryFacet",[422,2114,2115],{},"ImageStudioLibraryQuery",[422,2117,2118],{},"ImageStudioLibraryItem",[422,2120,2121],{},"EMPTY_IMAGE_STUDIO_STATE",", the pure reducers ",[422,2124,2125],{},"setDescription",[422,2127,2128],{},"togglePromptBlock",[422,2130,2131],{},"toggleImage",[422,2133,2134],{},"select",[422,2136,2137],{},"removeImage",[422,2139,2140],{},"addReference",[422,2142,2143],{},"adoptImage",[422,2145,2146],{},"addGeneration",[422,2148,2149],{},"selectedImage",[422,2151,2152],{},"isEmptyImageStudioState",[422,2154,2155],{},"normalizeImageStudioState",". The backend side is ",[422,2158,2159],{},"EditorBackend.images"," (capability ",[422,2162,2163],{},"images",[422,2165,2166],{},"EditorPorts.images",[422,2168,2169],{},"ImageProvider",") and the routes under ",[422,2172,2173],{},"\u002Fapi\u002Feditor\u002Fimages\u002F",[433,2175,2176,2184],{},[448,2177,2178,459,2181],{},[422,2179,2180],{},"@skaile\u002Fforge-editor\u002Fmentions",[422,2182,2183],{},"\u002Fmentions\u002Fschema",[448,2185,2186,459,2189,459,2192,2195,2196,459,2199,459,2202,459,2205,459,2208,459,2211],{},[422,2187,2188],{},"mentionsFeature",[422,2190,2191],{},"mentionSuggestion",[422,2193,2194],{},"tagSuggestion","; Vue-free: ",[422,2197,2198],{},"mentionsSchemaExtensions()",[422,2200,2201],{},"MentionNode",[422,2203,2204],{},"TagNode",[422,2206,2207],{},"mentionsFromText",[422,2209,2210],{},"tagsFromText",[422,2212,2213],{},"normalizeTagName",[433,2215,2216,2224],{},[448,2217,2218,459,2221],{},[422,2219,2220],{},"@skaile\u002Fforge-editor\u002Ftables",[422,2222,2223],{},"\u002Ftables\u002Fschema",[448,2225,2226,2229,2230,2232,2233,1010,2236,2239,2240,2243,2244,1010,2247,1177],{},[422,2227,2228],{},"tablesFeature()"," (GFM tables and task lists: the nodes, toolbar group ",[422,2231,427],{}," with insert 3×3, add\u002Fdelete row, add\u002Fdelete column, delete table, slash entries ",[422,2234,2235],{},"table.insert",[422,2237,2238],{},"task.insert","; no components, so it fits both framework layers); Vue-free: ",[422,2241,2242],{},"tablesSchemaExtensions()"," (also part of ",[422,2245,2246],{},"\u002Fschema\u002Fsimple",[422,2248,2249],{},"\u002Fschema\u002Fadvanced",[433,2251,2252,2263],{},[448,2253,2254,459,2257,459,2260],{},[422,2255,2256],{},"@skaile\u002Fforge-editor\u002Fmarkdown",[422,2258,2259],{},"\u002Fmarkdown\u002Fvue",[422,2261,2262],{},"\u002Fmarkdown\u002Freact",[448,2264,950,2265,1124,2268,2271,2272,2275,2276,2279,2280,2283,2284,459,2287,459,2290,2293,2294,1010,2297,2300,2301,511,2304,459,2307,2310,2311,2314,2315,2317,2318,1010,2321,511,2324,542,2327,2329,2330,459,2333,459,2336,459,2339,2342,2343,2346,2347,2350,2351,2354,2355,2357,2358,542,2361,2364,2365,2367,2368,2371,2372,2375,2376,2379,2380,2383,2384,2387,2388,2391,2392,2395,2396,542,2398,1124,2401,1124,2404,1124,2407,2410,2411,2413,2414,2416,2417,2419],{},[422,2266,2267],{},"splitFrontmatter(text)",[422,2269,2270],{},"joinFrontmatter(frontmatter, body)"," (YAML block at offset 0 only, kept verbatim), ",[422,2273,2274],{},"markdownToContent(editor, body, { policy? }): { content, diagnostics }"," (policy ",[422,2277,2278],{},"{ allowHtml?, allowDataUrls? }",": raw HTML, links and media with unsafe URLs are dropped and reported as ",[422,2281,2282],{},"MarkdownDiagnostic","s — ",[422,2285,2286],{},"raw-html",[422,2288,2289],{},"unsafe-url",[422,2291,2292],{},"unknown-fence"," (info), ",[422,2295,2296],{},"unclosed-fence",[422,2298,2299],{},"invalid-fence-meta"," (errors); ",[422,2302,2303],{},"hasFatalDiagnostics",[422,2305,2306],{},"contentToMarkdown(editor)",[422,2308,2309],{},"MarkdownClipboard.configure({ policy })"," (an extension: pastes ",[422,2312,2313],{},"text\u002Fmarkdown"," and plain text with block syntax as blocks, sanitizes pasted HTML, copies and cuts as ",[422,2316,2313],{}," next to ",[422,2319,2320],{},"text\u002Fhtml",[422,2322,2323],{},"text\u002Fplain",[422,2325,2326],{},"createSourceMode({ getEditor, toMarkdown?, fromMarkdown?, policy? }): SourceMode",[422,2328,2006],{}," store ",[422,2331,2332],{},"{ mode: 'visual' | 'source', source, diagnostics }",[422,2334,2335],{},"enter()",[422,2337,2338],{},"edit(text)",[422,2340,2341],{},"commit(): boolean"," — false with the editor untouched on a fatal diagnostic or a document the schema rejects —, ",[422,2344,2345],{},"cancel()","). Unknown ",[422,2348,2349],{},"::: kind"," fences are ",[422,2352,2353],{},"OpaqueFence"," nodes (in ",[422,2356,1364],{},") that are written back byte for byte; the Block types a Typed block feature registers parse first. Vue: ",[422,2359,2360],{},"MarkdownSurface",[422,2362,2363],{},"v-model"," is the Markdown string, frontmatter included; props, emits and slots of ",[422,2366,567],{}," forwarded; an incoming value equal to the last emitted one is ignored; prop ",[422,2369,2370],{},"policy"," (also configures the ",[422,2373,2374],{},"MarkdownClipboard"," it installs), prop ",[422,2377,2378],{},"sourceMode"," (a ",[422,2381,2382],{},"SourceMode",": while its state is ",[422,2385,2386],{},"source"," the surface shows the draft in a text area with the diagnostics of a rejected commit and Apply\u002FCancel, ",[422,2389,2390],{},"sourceLabels"," for their texts), event ",[422,2393,2394],{},"diagnostics","). React: ",[422,2397,2360],{},[422,2399,2400],{},"value",[422,2402,2403],{},"onChange",[422,2405,2406],{},"onFrontmatterChange",[422,2408,2409],{},"onDiagnostics",", prop ",[422,2412,2370],{}," (also configures the installed ",[422,2415,2374],{},"), the ",[422,2418,567],{}," props forwarded, same semantics; no source view). Neither imports CodeMirror",[433,2421,2422,2433],{},[448,2423,2424,459,2427,459,2430],{},[422,2425,2426],{},"@skaile\u002Fforge-editor\u002Fcode",[422,2428,2429],{},"\u002Fcode\u002Fvue",[422,2431,2432],{},"\u002Fcode\u002Freact",[448,2434,2435,2436,2439,2440,2443,2444,459,2447,459,2450,459,2453,459,2456,459,2459,2462,2463,1124,2466,1124,2469,2472,2473,2476,2477,2480,2481,459,2484,459,2487,459,2490,542,2493,511,2496,1815,2499,704,2501,542,2504,2506,2507,459,2510,459,2513,2516,2517,459,2520,2523,2524,1552,2527,704,2529,542,2531,459,2533,459,2535,459,2538,2541],{},"CodeMirror 6 on a string, themed by the shared ",[422,2437,2438],{},"--sk-*"," tokens (",[422,2441,2442],{},"styles\u002Ftokens.css","; fallbacks are the token defaults). Framework-free: ",[422,2445,2446],{},"createCodeEditor({ parent, doc?, readOnly?, wordWrap?, language?, onSaveShortcut?, onChange? })",[422,2448,2449],{},"setReadOnly",[422,2451,2452],{},"setWordWrap",[422,2454,2455],{},"setLanguage(view, support)",[422,2457,2458],{},"loadLanguage(view, id)",[422,2460,2461],{},"setDocument(view, text)"," (a host text, not an edit), ",[422,2464,2465],{},"registerLanguage(id, loader, { core? })",[422,2467,2468],{},"resolveLanguage(id)",[422,2470,2471],{},"isCoreLang(id)"," (language packs are the host's: register the ",[422,2474,2475],{},"@codemirror\u002Flang-*"," packs you depend on; ",[422,2478,2479],{},"jsonl"," is built in), ",[422,2482,2483],{},"formatJsonInEditor(view)",[422,2485,2486],{},"formatJsonText",[422,2488,2489],{},"jsonlLanguage",[422,2491,2492],{},"kindOf(path, mime?)",[422,2494,2495],{},"'markdown' | 'code' | 'binary'",[422,2497,2498],{},"languageOf(path)",[422,2500,2429],{},[422,2502,2503],{},"CodeSurface",[422,2505,2363],{}," string, ",[422,2508,2509],{},"editable",[422,2511,2512],{},"language",[422,2514,2515],{},"wordWrap","; emits ",[422,2518,2519],{},"update:modelValue",[422,2521,2522],{},"save"," on Mod-S, ",[422,2525,2526],{},"ready(view)",[422,2528,2432],{},[422,2530,2503],{},[422,2532,2400],{},[422,2534,2403],{},[422,2536,2537],{},"onSave",[422,2539,2540],{},"onReady",", same flags). No ProseMirror or TipTap is reachable from these entries",[433,2543,2544,2552],{},[448,2545,2546,459,2549],{},[422,2547,2548],{},"@skaile\u002Fforge-editor\u002Fdocument\u002Fvue",[422,2550,2551],{},"\u002Fdocument\u002Freact",[448,2553,2554,704,2557,2559,2560,1560,2563,2566,2567,2569,2570,2572,2573,2575,2576,2578,2579,2582,2583,2586,2587,2589,2590,1329,2593,2596,2597,1329,2600,2603],{},[422,2555,2556],{},"DocumentSurface",[422,2558,2360],{}," for ",[422,2561,2562],{},"kindOf(path, mime) === 'markdown'",[422,2564,2565],{},"markdown",": the Markdown surface's own props, ",[422,2568,640],{}," at least), ",[422,2571,2503],{}," for text (language from ",[422,2574,2498],{}," unless ",[422,2577,2512],{}," is given), a ",[422,2580,2581],{},"binary"," slot (Vue) \u002F ",[422,2584,2585],{},"binary(path)"," render prop (React) otherwise. ",[422,2588,743],{}," carries ",[422,2591,2592],{},"{ kind: 'markdown', editor }",[422,2594,2595],{},"{ kind: 'code', view }",". These entries reach both editors; use ",[422,2598,2599],{},"\u002Fmarkdown\u002F*",[422,2601,2602],{},"\u002Fcode\u002F*"," alone to keep one out of a bundle",[433,2605,2606,2620],{},[448,2607,2608,459,2611,459,2614,459,2617],{},[422,2609,2610],{},"@skaile\u002Fforge-editor\u002Ftranscript",[422,2612,2613],{},"\u002Ftranscript\u002Fvue",[422,2615,2616],{},"\u002Ftranscript\u002Freact",[422,2618,2619],{},"\u002Ftranscript\u002Fschema",[448,2621,2622,1010,2624,704,2626,459,2629,1579,2632,459,2635,459,2638,459,2641,459,2644,459,2647,459,2650,459,2653,2656,2657,459,2660,459,2663,459,2666,2669,2670,2673,2674,1177],{},[422,2623,1516],{},[422,2625,895],{},[422,2627,2628],{},"transcriptFeature",[422,2630,2631],{},"TranscriptSegmentView",[422,2633,2634],{},"transcriptFeatureCore",[422,2636,2637],{},"transcriptSegment",[422,2639,2640],{},"speakerConversions",[422,2642,2643],{},"segmentSpeakerLines",[422,2645,2646],{},"transcriptSchemaExtensions()",[422,2648,2649],{},"speakerParagraphsToSegments",[422,2651,2652],{},"lastSpeaker",[422,2654,2655],{},"speakersIn",", and the subtitle export ",[422,2658,2659],{},"vttOf(cues)",[422,2661,2662],{},"srtOf(cues)",[422,2664,2665],{},"transcriptCuesOf(node)",[422,2667,2668],{},"TranscriptCue"," (block action ",[422,2671,2672],{},"transcript-export","; see ",[1812,2675,2676],{"href":253},"Speech",[433,2678,2679,2693],{},[448,2680,2681,459,2684,459,2687,459,2690],{},[422,2682,2683],{},"@skaile\u002Fforge-editor\u002Fauthors",[422,2685,2686],{},"\u002Fauthors\u002Fvue",[422,2688,2689],{},"\u002Fauthors\u002Freact",[422,2691,2692],{},"\u002Fauthors\u002Fschema",[448,2694,2695,1010,2697,704,2699,459,2702,459,2705,459,2708,1579,2711,459,2714,459,2717,459,2720,459,2723,459,2726,459,2729,459,2731,459,2733],{},[422,2696,1516],{},[422,2698,895],{},[422,2700,2701],{},"authorsFeature",[422,2703,2704],{},"AuthorColorsPanel",[422,2706,2707],{},"AuthorColorsButton",[422,2709,2710],{},"SettingsAuthorsTab",[422,2712,2713],{},"authorsFeatureCore",[422,2715,2716],{},"currentAuthor",[422,2718,2719],{},"AuthorAttribution",[422,2721,2722],{},"authorsSchemaExtensions()",[422,2724,2725],{},"AuthorMark",[422,2727,2728],{},"documentAuthors",[422,2730,492],{},[422,2732,1494],{},[422,2734,2735],{},"AuthorColorStyle",[433,2737,2738,2752],{},[448,2739,2740,459,2743,459,2746,459,2749],{},[422,2741,2742],{},"@skaile\u002Fforge-editor\u002Fthemes",[422,2744,2745],{},"\u002Fthemes\u002Fvue",[422,2747,2748],{},"\u002Fthemes\u002Freact",[422,2750,2751],{},"\u002Fthemes\u002Fschema",[448,2753,2754,1010,2756,704,2758,2761,2762,2765,2766,2769,2770,1579,2773,459,2776,2779,2780,2783,2784,459,2787,459,2790,2793,2794,459,2797,459,2800,459,2803,459,2806,2809,2810,674,2813,2816,2817],{},[422,2755,1516],{},[422,2757,895],{},[422,2759,2760],{},"themesFeature()"," (site-wide Obsidian themes: its ",[422,2763,2764],{},"setup"," hook starts the theme runtime and returns its teardown, its ",[422,2767,2768],{},"appearance"," settings tab picks the theme), ",[422,2771,2772],{},"SettingsAppearanceTab",[422,2774,2775],{},"themesFeatureCore",[422,2777,2778],{},"startObsidianTheme(ctx)"," (reference-counted per app, returns the release), ",[422,2781,2782],{},"pinObsidianTheme(ctx, id)"," (shows a theme over the setting until released, nothing persisted), ",[422,2785,2786],{},"ThemeHost",[422,2788,2789],{},"scopeThemeCss",[422,2791,2792],{},"THEME_SCOPE_CLASS","; Vue-free schema: ",[422,2795,2796],{},"ThemeRecord",[422,2798,2799],{},"ThemeManifest",[422,2801,2802],{},"themeManifestSchema",[422,2804,2805],{},"THEME_ID",[422,2807,2808],{},"MAX_THEME_BYTES",". Needs an adapter with ",[422,2811,2812],{},"listThemes",[422,2814,2815],{},"loadTheme","; see the ",[1812,2818,2819],{"href":105},"usage guide",[433,2821,2822,2836],{},[448,2823,2824,459,2827,459,2830,459,2833],{},[422,2825,2826],{},"@skaile\u002Fforge-editor\u002Fcomments",[422,2828,2829],{},"\u002Fcomments\u002Fvue",[422,2831,2832],{},"\u002Fcomments\u002Freact",[422,2834,2835],{},"\u002Fcomments\u002Fschema",[448,2837,2838,1010,2840,704,2842,2845,2846,511,2849,459,2852,459,2855,459,2858,459,2861,459,2864,459,2867,459,2870,542,2873,2875,2876,1647,2879,459,2882,459,2885,2888,2889,459,2892,459,2895,459,2898,459,2901,459,2904,459,2906,2909,2910,1989,2913,459,2916,459,2919,511,2922,1989,2925,459,2928,2931,2932,2935,2936,1989,2939,459,2942,459,2945,2948,2949,2951],{},[422,2839,1516],{},[422,2841,895],{},[422,2843,2844],{},"commentsFeature"," (requires ",[422,2847,2848],{},"collab",[422,2850,2851],{},"useComments",[422,2853,2854],{},"CommentsMargin",[422,2856,2857],{},"CommentsPopover",[422,2859,2860],{},"CommentsListMenu",[422,2862,2863],{},"CommentThreadView",[422,2865,2866],{},"CommentComposer",[422,2868,2869],{},"CommentBubble",[422,2871,2872],{},"SettingsCommentsTab",[422,2874,1516],{}," also the type ",[422,2877,2878],{},"CommentsStore",[422,2880,2881],{},"commentsFeatureCore",[422,2883,2884],{},"createCommentsModel",[422,2886,2887],{},"Comments"," plugin helpers, ",[422,2890,2891],{},"commentsSchemaExtensions()",[422,2893,2894],{},"CommentMark",[422,2896,2897],{},"CommentThread",[422,2899,2900],{},"CommentReply",[422,2902,2903],{},"COMMENT_LIMITS",[422,2905,1497],{},[422,2907,2908],{},"CommentsLayout",", and the margin's layout (the active thread pinned to its text's line, the others one-line cards out of its way): ",[422,2911,2912],{},"layoutMargin(entries, activeId, { gap, minTop })",[422,2914,2915],{},"MarginEntry",[422,2917,2918],{},"MarginLayout",[422,2920,2921],{},"MARGIN_GAP",[422,2923,2924],{},"marginCards",[422,2926,2927],{},"MarginCard",[422,2929,2930],{},"DRAFT_CARD","; an orphaned thread sits at its deletion point, ",[422,2933,2934],{},"CommentsSnapshot.orphanAt",", which host models may omit), ",[422,2937,2938],{},"createMarginController",[422,2940,2941],{},"MarginController",[422,2943,2944],{},"MarginSource",[422,2946,2947],{},"MarginState",": measuring and scheduling for both ",[422,2950,2854],{},"s)",[433,2953,2954,2962],{},[448,2955,2956,459,2959],{},[422,2957,2958],{},"@skaile\u002Fforge-editor\u002Fcomposites\u002Fvue",[422,2960,2961],{},"\u002Fcomposites\u002Freact",[448,2963,2964,2967,2968,1010,2971,459,2974,459,2977,459,2980,459,2983,2986,2987,459,2990],{},[422,2965,2966],{},"compositeFeature()"," (Vue: Nuxt UI, React: shadcn), the host-placed ",[422,2969,2970],{},"CompositeTable",[422,2972,2973],{},"CompositeInspector",[422,2975,2976],{},"SettingsEditingTab",[422,2978,2979],{},"CompositeChrome",[422,2981,2982],{},"CompositeDetails",[422,2984,2985],{},"CompositeView"," and editors, ",[422,2988,2989],{},"useCompositeRows",[422,2991,2992],{},"useCompositeAnchors",[433,2994,2995,3003],{},[448,2996,2997,459,3000],{},[422,2998,2999],{},"@skaile\u002Fforge-editor\u002Fcomposites",[422,3001,3002],{},"\u002Fcomposites\u002Fschema",[448,3004,950,3005,459,3008,459,3011,459,3014,459,3017,459,3020,459,3023,3026,3027,511,3030,3033,3034,3036,3037,459,3040,3043,3044,459,3047,459,3050,511,3053,3056,3057,1989,3060,704,3063,1329,3066,3069,3070,511,3073,542,3076,511,3079,459,3082,459,3085,459,3088,459,3091,459,3094,459,3097,459,3100,459,3103,459,3106,459,3109,459,3112,459,3115,459,3118,459,3121,3124,3125,459,3128,459,3131,3133,3134,1368,3136,459,3138,459,3140,459,3142,3145,3146,459,3149,459,3152,459,3155,459,3158,459,3161,459,3164,459,3167,459,3170,3173,3174,459,3177,459,3180,459,3183,962,3186,1805,3189,459,3192,459,3195,1989,3198,459,3201,886,3204,459,3207,459,3210,459,3213,3216,3217,1805,3219,3222,3223,542,3226,511,3229,459,3232,3235],{},[422,3006,3007],{},"compositeFeatureCore",[422,3009,3010],{},"Composite",[422,3012,3013],{},"BlockType",[422,3015,3016],{},"BlockTypeAi",[422,3018,3019],{},"defaultBlockTypes",[422,3021,3022],{},"blockTypeOf",[422,3024,3025],{},"acceptsChild"," (the Block types' Accepted children, ",[422,3028,3029],{},"BlockType.accepts",[422,3031,3032],{},"AcceptedChildren"," (the editor extension that enforces them; registered by ",[422,3035,3007],{},"). Also ",[422,3038,3039],{},"compositeOutline",[422,3041,3042],{},"documentOutline(doc, untitled, capabilitiesOf?, documentId?)"," (the Block outline: headings and Typed blocks as one tree; ",[422,3045,3046],{},"DocumentOutlineEntry",[422,3048,3049],{},"DocumentOutlineBlock",[422,3051,3052],{},"DocumentOutlineHeading",[422,3054,3055],{},"moveBlockInto"," (returns whether the document changed), ",[422,3058,3059],{},"moveIntoVerdict(editor, id, targetId, t)",[422,3061,3062],{},"MoveVerdict",[422,3064,3065],{},"{ ok: true }",[422,3067,3068],{},"{ ok: false, reason }"," in the language of ",[422,3071,3072],{},"t",[422,3074,3075],{},"canMoveBlockInto",[422,3077,3078],{},"moveIntoVerdict(...).ok",[422,3080,3081],{},"headingsMarkdown",[422,3083,3084],{},"documentCompositeMarkdown",[422,3086,3087],{},"Structure",[422,3089,3090],{},"createCompositeRows",[422,3092,3093],{},"createCompositeInspector",[422,3095,3096],{},"compositeFieldText",[422,3098,3099],{},"observeCompositeAnchors",[422,3101,3102],{},"compositeRows",[422,3104,3105],{},"setBlockProperty",[422,3107,3108],{},"setCompositeTags",[422,3110,3111],{},"setCompositeDescription",[422,3113,3114],{},"compositeDescriptionText",[422,3116,3117],{},"compositeSchemaExtensions()",[422,3119,3120],{},"blocksFromMarkdown",[422,3122,3123],{},"compositeFence",", conversions and heading↔Typed block transforms. Source-holding Typed blocks: ",[422,3126,3127],{},"SOURCE_MEDIA_TYPES",[422,3129,3130],{},"sourceOf",[422,3132,1283],{}," (the Derived blocks of a Typed block), ",[422,3135,1247],{},[422,3137,1250],{},[422,3139,1253],{},[422,3141,1300],{},[422,3143,3144],{},"bodyMarkdown","; bibliography: ",[422,3147,3148],{},"CslItem",[422,3150,3151],{},"CSL_TYPES",[422,3153,3154],{},"bibOf",[422,3156,3157],{},"cslOf",[422,3159,3160],{},"citeShort",[422,3162,3163],{},"citeFull",[422,3165,3166],{},"bibtexOf",[422,3168,3169],{},"yearOf",[422,3171,3172],{},"cslTypeOptions","; references: ",[422,3175,3176],{},"ReferenceNode",[422,3178,3179],{},"referencesFromText",[422,3181,3182],{},"normalizeReferences",[422,3184,3185],{},"referenceMarkdown",[422,3187,3188],{},"\u002Fcomposites",[422,3190,3191],{},"referenceSuggestion",[422,3193,3194],{},"referenceLabel",[422,3196,3197],{},"compositeBacklinks",[422,3199,3200],{},"CompositeBacklink",[422,3202,3203],{},"CompositeReference",[422,3205,3206],{},"revealSource",[422,3208,3209],{},"seekSource",[422,3211,3212],{},"parseLocator",[422,3214,3215],{},"SourceReveal"," (show a Typed block's source at a time or page); ",[422,3218,3002],{},[422,3220,3221],{},"compositeIdsOf",". Baskets: ",[422,3224,3225],{},"Basket",[422,3227,3228],{},"{ id, label, color }",[422,3230,3231],{},"BASKET_IDS",[422,3233,3234],{},"defaultBaskets(t)",", `basketOf(node",[433,3237,3238,3246],{},[448,3239,3240,459,3243],{},[422,3241,3242],{},"@skaile\u002Fforge-editor\u002Fai",[422,3244,3245],{},"\u002Fai\u002Fprotocol",[448,3247,950,3248,459,3251,459,3254,459,3257,459,3260,1989,3263,511,3266,3269,3270,3273,3274,3277,3278,459,3281,3284,3285,459,3288,459,3291,459,3294,459,3297,3300,3301,3303,3304,459,3307,459,3310,459,3313,3316,3317,3319,3320,3323,3324,3327,3328,3331,3332,3335,3336,3339,3340,3343,3344,459,3347,459,3350,459,3353,459,3356,459,3359,459,3362,459,3365,459,3368,459,3371,3374,3375,3378,3379,3382,3383,1010,3386,3389,3390,459,3393,459,3396,459,3399,459,3402,459,3405,459,3408,459,3411,3414,3415,459,3418,459,3421,1177],{},[422,3249,3250],{},"aiFeatureCore",[422,3252,3253],{},"modelProfiles(app)",[422,3255,3256],{},"createAiAssistant",[422,3258,3259],{},"createDocumentChat",[422,3261,3262],{},"createAiSelectionFlow",[422,3264,3265],{},"AI_SELECTION_MENU_KEY",[422,3267,3268],{},"createAiReviewBar({ notify, t, editor })"," (model of the review bar), ",[422,3271,3272],{},"createAgentOpReview({ notify, t })"," (host-driven agent edit review), ",[422,3275,3276],{},"notifyAiRateLimited(notify, t)",", review\u002Fapply helpers (",[422,3279,3280],{},"startAiReview",[422,3282,3283],{},"applyAiResult",", …) and the protocol (",[422,3286,3287],{},"AI_TASKS",[422,3289,3290],{},"ModelRef",[422,3292,3293],{},"AGENT_OP_TYPES",[422,3295,3296],{},"AGENT_OP_OUTCOMES",[422,3298,3299],{},"CHAT_LIMITS",", …), importable alone from ",[422,3302,3245],{},"; the model-facing agent texts (",[422,3305,3306],{},"checkAgentOps",[422,3308,3309],{},"agentShownMessage",[422,3311,3312],{},"agentFeedbackText",[422,3314,3315],{},"agentRetryMessage",") take a ",[422,3318,1058],{}," option (default ",[422,3321,3322],{},"de","), and ",[422,3325,3326],{},"agentRetryMessage(problems, scoped, { locale, tool })"," names the ",[422,3329,3330],{},"tool"," the model must call again (default ",[422,3333,3334],{},"edit_document","). The ",[422,3337,3338],{},"[id]"," line format of the chat's document text has one owner there, ",[422,3341,3342],{},"block-lines",": writer helpers (",[422,3345,3346],{},"blockLine",[422,3348,3349],{},"singleBlockLine",[422,3351,3352],{},"nestedLinePrefix",[422,3354,3355],{},"quoteLinePrefix",[422,3357,3358],{},"listLinePrefix",[422,3360,3361],{},"continuedLinePrefix",[422,3363,3364],{},"compositeChromePart",[422,3366,3367],{},"compositeLineHeader",[422,3369,3370],{},"compositeLineClose",[422,3372,3373],{},"TRUNCATED_LINE","), the reader ",[422,3376,3377],{},"readBlockLines"," (the block ids and which blocks lie inside which; lines in fenced code are not block lines; type ",[422,3380,3381],{},"BlockLines","), the echo strippers ",[422,3384,3385],{},"stripBlockLineEcho",[422,3387,3388],{},"stripListMarkerEcho",", and the (German, model-facing) prompt texts ",[422,3391,3392],{},"BLOCK_LINES_LABEL",[422,3394,3395],{},"BLOCK_LINE_INTRO",[422,3397,3398],{},"BLOCK_LINE_MARKERS",[422,3400,3401],{},"BLOCK_LINE_LIST_TEXT",[422,3403,3404],{},"BLOCK_LINE_HOST_TEXT",[422,3406,3407],{},"BLOCK_LINE_COMPOSITE_TEXT",[422,3409,3410],{},"BLOCK_LINE_ECHO_TEXT",[422,3412,3413],{},"BLOCK_LINE_IDS_HINT"," with the example (",[422,3416,3417],{},"BLOCK_LINE_EXAMPLE",[422,3419,3420],{},"BLOCK_LINE_EXAMPLE_ID",[422,3422,3423],{},"BLOCK_LINE_EXAMPLE_TEXT",[433,3425,3426,3431],{},[448,3427,3428],{},[422,3429,3430],{},"@skaile\u002Fforge-editor\u002Fai\u002Factions",[448,3432,3433,542,3436,3439,3440,1010,3443,3446,3447,2673,3450,1177],{},[422,3434,3435],{},"documentActions({ editor, review, scope?, targets? })",[422,3437,3438],{},"DocumentActionsOptions","): the forge actions ",[422,3441,3442],{},"doc.read",[422,3444,3445],{},"doc.propose_ops"," for a host chat with client tools (optional peer ",[422,3448,3449],{},"@skaile\u002Fforge-app-actions",[1812,3451,3453],{"href":3452},"\u002Fguides\u002Fai#chat-agent-operations","Chat agent operations",[433,3455,3456,3464],{},[448,3457,3458,459,3461],{},[422,3459,3460],{},"@skaile\u002Fforge-editor\u002Fai\u002Fvue",[422,3462,3463],{},"\u002Fai\u002Freact",[448,3465,3466,459,3468,3470,3471,511,3474,459,3477,459,3480,459,3483,459,3486,962,3489,1805,3492,459,3495,459,3498,3501,3502,3504,3505],{},[422,3467,628],{},[422,3469,1643],{}," (React only; the Vue one is ",[422,3472,3473],{},"\u002Fai\u002Fvue\u002Fchat",[422,3475,3476],{},"ModelQuickSwitch",[422,3478,3479],{},"AiReviewBar",[422,3481,3482],{},"AiSelectionMenu",[422,3484,3485],{},"SettingsAiTab",[422,3487,3488],{},"SettingsModelProfiles",[422,3490,3491],{},"\u002Fai\u002Fvue",[422,3493,3494],{},"useAiAssistant",[422,3496,3497],{},"useDocumentChat",[422,3499,3500],{},"useModelProfiles"," (thin hooks over the models); ",[422,3503,3491],{}," is free of ",[422,3506,3507],{},"@skaile\u002Fforge-chat",[433,3509,3510,3515],{},[448,3511,3512],{},[422,3513,3514],{},"@skaile\u002Fforge-editor\u002Fai\u002Fvue\u002Fchat",[448,3516,3517,3518,3520,3521,542,3523,3526,3527,3530,3531,3534],{},"The Vue ",[422,3519,1643],{},". Renders on the optional peer ",[422,3522,3507],{},[422,3524,3525],{},"ChatPanel","): importing the entry without it throws an error naming the peer. The host imports ",[422,3528,3529],{},"@skaile\u002Fforge-chat\u002Fstyles\u002Fchat.css"," and adds Tailwind ",[422,3532,3533],{},"@source"," for the package",[433,3536,3537,3542],{},[448,3538,3539],{},[422,3540,3541],{},"@skaile\u002Fforge-editor\u002Fadapters\u002Fdirect-ai",[448,3543,3544,542,3547,459,3550,3553,3554,3557,3558,459,3561,459,3564,459,3566,962,3569,1010,3572,3575,3576,637,3580,3584],{},[422,3545,3546],{},"createDirectAi({ presets, roles?, users?, fetch? })",[422,3548,3549],{},"DirectAiOptions",[422,3551,3552],{},"DirectAiPreset","): an ",[422,3555,3556],{},"EditorBackend['ai']"," that calls OpenAI-compatible chat-completion endpoints from the browser (",[422,3559,3560],{},"models",[422,3562,3563],{},"complete",[422,3565,2014],{},[422,3567,3568],{},"transcriptCleanup",[422,3570,3571],{},"chat",[422,3573,3574],{},"extract"," answer 501). The preset keys are readable by the page and no server rate limit applies; see ",[1812,3577,3579],{"href":3578},"\u002Fguides\u002Fstorage-adapters#browser-direct-ai","Browser-direct AI",[1812,3581,3583],{"href":3582},"\u002Fguides\u002Feditor-ports#capability-locality","capability locality"," table",[433,3586,3587,3592],{},[448,3588,3589],{},[422,3590,3591],{},"@skaile\u002Fforge-editor\u002Fadapters\u002Frender",[448,3593,3594,2379,3597,3600,3601,3604,3605,511,3608,3611,3612,3614,3615,459,3617,459,3620,3623,3624,637,3627],{},[422,3595,3596],{},"createRenderer(targets)",[422,3598,3599],{},"Renderer"," over ",[422,3602,3603],{},"RenderTarget","s, the port ",[422,3606,3607],{},"EditorPorts.render",[422,3609,3610],{},"markdownTarget(options?)"," (the built-in ",[422,3613,2565],{}," target), ",[422,3616,3603],{},[422,3618,3619],{},"RenderOutput",[422,3621,3622],{},"MarkdownTargetOptions","; Node program, no Vue, React, Nitro or drizzle. See ",[1812,3625,3626],{"href":215},"Render",[1812,3628,345],{"href":346},[433,3630,3631,3636],{},[448,3632,3633],{},[422,3634,3635],{},"@skaile\u002Fforge-editor\u002Fadapters\u002Fspeech",[448,3637,3638,2379,3641,3644,3645,3648,3649,511,3652,459,3655,3658,3659,3662,3663,1010,3666,3669,3670,1882,3673,637,3675],{},[422,3639,3640],{},"createOpenAiSpeech(options)",[422,3642,3643],{},"SpeechProvider"," over an OpenAI-compatible ",[422,3646,3647],{},"\u002Faudio\u002Fspeech"," endpoint, the port ",[422,3650,3651],{},"EditorPorts.speech",[422,3653,3654],{},"OPENAI_VOICES",[422,3656,3657],{},"createMemorySpeech(options?)"," (one second of silent WAV, for tests and demos), ",[422,3660,3661],{},"silentWav(seconds?)","; Node program, no Vue, React, Nitro or drizzle. The daily budget ",[422,3664,3665],{},"createSpeechBudget",[422,3667,3668],{},"SPEECH_CHARS_PER_DAY"," are in ",[422,3671,3672],{},"@skaile\u002Fforge-editor\u002Fserver",[1812,3674,2676],{"href":253},[1812,3676,349],{"href":350},[433,3678,3679,3684],{},[448,3680,3681],{},[422,3682,3683],{},"@skaile\u002Fforge-editor\u002Fadapters\u002Fembeddings",[448,3685,3686,3689,3690,3644,3693,3648,3696,511,3699,3623,3702],{},[422,3687,3688],{},"createOpenAiEmbedder(options)"," (an ",[422,3691,3692],{},"Embedder",[422,3694,3695],{},"\u002Fembeddings",[422,3697,3698],{},"EditorPorts.embeddings",[422,3700,3701],{},"OPENAI_EMBEDDING_DIMENSIONS",[1812,3703,3704],{"href":297},"Index on Postgres",[433,3706,3707,3712],{},[448,3708,3709],{},[422,3710,3711],{},"@skaile\u002Fforge-editor\u002Fadapters\u002Fknowledge",[448,3713,3714,2379,3717,3720,3721,3724,3725,3728,3729,3732,3733],{},[422,3715,3716],{},"createMemoryKnowledgeGraph(nodes, edges)",[422,3718,3719],{},"KnowledgeGraph"," over fixed nodes and edges, searched by the words of the labels, the port ",[422,3722,3723],{},"EditorPorts.knowledge",", for tests and demos), ",[422,3726,3727],{},"MEMORY_KNOWLEDGE_LIMIT","; Node program, no Vue, React, Nitro or drizzle. A real graph is the host's: ",[422,3730,3731],{},"@skaile\u002Fforge-editor-kgs"," wraps the KGS SDK. See ",[1812,3734,3735],{"href":288},"Knowledge graph",[433,3737,3738,3743],{},[448,3739,3740],{},[422,3741,3742],{},"@skaile\u002Fforge-editor\u002Fintegrations\u002Fcomposite-ai",[448,3744,3745,3746,2845,3749,459,3752,459,3754,511,3757,459,3760,1989,3763,511,3766,459,3769,459,3772,459,3775,459,3778,459,3781,3784,3785,459,3788,459,3791,459,3794,3797,3798,459,3801,459,3804,3807,3808,459,3811,3814,3815,459,3818,459,3821,3824,3825,459,3828,459,3831,459,3834,459,3837,459,3840,3843,3844,459,3847,3850,3851,459,3854,542,3857,3860,3861],{},"Framework-free (labels quoted in their English catalog form): ",[422,3747,3748],{},"compositeAiFeature",[422,3750,3751],{},"composites",[422,3753,865],{},[422,3755,3756],{},"media",[422,3758,3759],{},"fillComposite",[422,3761,3762],{},"generateCompositeBody",[422,3764,3765],{},"CompositeBodyResult",[422,3767,3768],{},"summarizeComposite",[422,3770,3771],{},"createRendition",[422,3773,3774],{},"regenerateRendition",[422,3776,3777],{},"canCreateRendition",[422,3779,3780],{},"canRegenerateRendition",[422,3782,3783],{},"RenditionOptions"," (“Create readable rendition”, “Regenerate (replace)”), ",[422,3786,3787],{},"deriveComposite",[422,3789,3790],{},"canDeriveAfter",[422,3792,3793],{},"derivableBlockTypesOf",[422,3795,3796],{},"isDerivableSource"," (“Derive (AI)”), ",[422,3799,3800],{},"fetchBibliography",[422,3802,3803],{},"canFetchBibliography",[422,3805,3806],{},"doiOf"," (“Fetch bibliography”), ",[422,3809,3810],{},"compositeSourceText",[422,3812,3813],{},"COMPOSITE_BODY_START",". Splitting and outline: ",[422,3816,3817],{},"splitCompositeWithAi",[422,3819,3820],{},"bodyUnchanged",[422,3822,3823],{},"splitByInsertedHeadings"," (“Split into sub-blocks with AI” \u002F “Split into blocks with AI”); ",[422,3826,3827],{},"sanitizeOutline",[422,3829,3830],{},"collectHeadings",[422,3832,3833],{},"parseOutlineResponse",[422,3835,3836],{},"applyOutline",[422,3838,3839],{},"OutlineHeading",[422,3841,3842],{},"OutlineEntry"," (“Clean up outline (AI)”); ",[422,3845,3846],{},"writeDerivedBody",[422,3848,3849],{},"discardDerived"," (the write-back of “Derive (AI)”). Transfer: ",[422,3852,3853],{},"summaryTransform",[422,3855,3856],{},"bulletsTransform",[422,3858,3859],{},"BlockTransform","s for the transfer menu: “Insert summary”, “Insert bullet points”), ",[422,3862,3863],{},"transferRequest",[433,3865,3866,3871],{},[448,3867,3868],{},[422,3869,3870],{},"@skaile\u002Fforge-editor\u002Fintegrations\u002Fcomposite-media",[448,3872,950,3873,2845,3876,459,3878,3880,3881,3884,3885,3888,3889,3892,3893,3896],{},[422,3874,3875],{},"compositeMediaFeature",[422,3877,3751],{},[422,3879,3756],{},"): imported files become Typed blocks of the Block type whose ",[422,3882,3883],{},"import"," capability takes their media (built in: ",[422,3886,3887],{},"recording"," for audio\u002Fvideo, ",[422,3890,3891],{},"figure"," for images, ",[422,3894,3895],{},"document"," otherwise); block action “Replace source” (English label)",[433,3898,3899,3907],{},[448,3900,3901,459,3904],{},[422,3902,3903],{},"@skaile\u002Fforge-editor\u002Fintegrations\u002Ftranscript-ai",[422,3905,3906],{},"\u002Ftranscript-ai\u002Fprotocol",[448,3908,950,3909,2845,3912,459,3915,511,3917,459,3920,3923,3924,459,3927,459,3930,459,3933,459,3936],{},[422,3910,3911],{},"transcriptAiFeature",[422,3913,3914],{},"transcript",[422,3916,865],{},[422,3918,3919],{},"createTranscriptCleanup",[422,3921,3922],{},"hasTranscriptSegments","; server contract: ",[422,3925,3926],{},"TRANSCRIPT_CLEANUP_LIMITS",[422,3928,3929],{},"transcriptCleanupRequestSchema",[422,3931,3932],{},"transcriptCleanupMessages",[422,3934,3935],{},"transcriptCleanupChunks",[422,3937,3938],{},"parseTranscriptCleanup",[433,3940,3941,3952],{},[448,3942,3943,459,3946,459,3949],{},[422,3944,3945],{},"@skaile\u002Fforge-editor\u002Fcollab",[422,3947,3948],{},"\u002Fcollab\u002Fvue",[422,3950,3951],{},"\u002Fcollab\u002Freact",[448,3953,950,3954,3957,3958,674,3961,3964,3965,3968,3969,962,3972,1010,3974,704,3976,3979,3980,3982],{},[422,3955,3956],{},"collabFeatureCore(ui?)"," (Yjs ",[422,3959,3960],{},"Collaboration",[422,3962,3963],{},"CollaborationCaret",", active only with a ",[422,3966,3967],{},"collaboration"," session on the surface), ",[422,3970,3971],{},"yjsAnchorResolver",[422,3973,1516],{},[422,3975,895],{},[422,3977,3978],{},"collabFeature()"," (the Vue one adds the ",[422,3981,1035],{}," state-sync workaround, the React one needs none)",[433,3984,3985,3996],{},[448,3986,3987,459,3990,459,3993],{},[422,3988,3989],{},"@skaile\u002Fforge-editor\u002Fblock-ui",[422,3991,3992],{},"\u002Fblock-ui\u002Fvue",[422,3994,3995],{},"\u002Fblock-ui\u002Freact",[448,3997,3998,1010,4000,704,4002,542,4005,704,4008,4011,4012,459,4015,459,4018,511,4021,459,4024,1579,4027,459,4030,459,4033,459,4036,459,4039,459,4042,459,4045,1010,4048,4051,4052,4055],{},[422,3999,1516],{},[422,4001,895],{},[422,4003,4004],{},"blockUiFeature(options?)",[422,4006,4007],{},"BlockUiOptions.actions",[422,4009,4010],{},"'hover'"," default, ",[422,4013,4014],{},"'toolbar'",[422,4016,4017],{},"'both'",[422,4019,4020],{},"'none'",[422,4022,4023],{},"BlockUi",[422,4025,4026],{},"BlockActionsOverlay",[422,4028,4029],{},"blockUiFeatureCore(ui, options?)",[422,4031,4032],{},"blockActionsFor(editor, target, actions, surface)",[422,4034,4035],{},"selectedBlockOf",[422,4037,4038],{},"sameBlock",[422,4040,4041],{},"actionSurfacesOf",[422,4043,4044],{},"effectiveTarget",[422,4046,4047],{},"BLOCK_CORNER_ATTR",[422,4049,4050],{},"blockCornerOf"," (a node view marks its own top-right icons with ",[422,4053,4054],{},"data-block-corner","; the bar docks left of them): drag handle, hover targeting and block actions (opt-in; the simple editor never includes it)",[433,4057,4058,4069],{},[448,4059,4060,459,4063,459,4066],{},[422,4061,4062],{},"@skaile\u002Fforge-editor\u002Ftransfer",[422,4064,4065],{},"\u002Ftransfer\u002Fvue",[422,4067,4068],{},"\u002Ftransfer\u002Freact",[448,4070,4071,4072,459,4075,542,4078,511,4081,459,4084,459,4086,459,4089,459,4092,459,4095,4098,4099,459,4102,459,4105,459,4108,459,4111,459,4114,459,4117,459,4120,459,4123,459,4126,459,4129,4132,4133,459,4135,1010,4137,3669,4139,962,4141,1010,4143,704,4145,459,4148,4151,4152,459,4155,459,4158,459,4161,459,4164,459,4167,4170,4171,1882,4173],{},"Block transfer between editor surfaces and trees. Framework-free: ",[422,4073,4074],{},"transferFeatureCore(ui, options?)",[422,4076,4077],{},"TransferFeatureOptions",[422,4079,4080],{},"{ transforms?, defaultTransform? }",[422,4082,4083],{},"TransferUi",[422,4085,3859],{},[422,4087,4088],{},"TransformContext",[422,4090,4091],{},"TransferEnv",[422,4093,4094],{},"copyTransform",[422,4096,4097],{},"DEFAULT_TRANSFORMS"," (the copy), ",[422,4100,4101],{},"runTransform",[422,4103,4104],{},"availableTransforms",[422,4106,4107],{},"transformContextOf",[422,4109,4110],{},"transferKindOf",[422,4112,4113],{},"transferSourceHash",[422,4115,4116],{},"createsOf",[422,4118,4119],{},"withFreshBlockIds",[422,4121,4122],{},"isSelfDrop",[422,4124,4125],{},"BlockDropTargetStorage",[422,4127,4128],{},"TransferDrop",[422,4130,4131],{},"PendingDrop","; the AI transforms ",[422,4134,3853],{},[422,4136,3856],{},[422,4138,3863],{},[422,4140,3742],{},[422,4142,1516],{},[422,4144,895],{},[422,4146,4147],{},"transferFeature(options?)",[422,4149,4150],{},"TransferMenu",". The payload side (",[422,4153,4154],{},"BLOCK_MIME",[422,4156,4157],{},"BlockTransfer",[422,4159,4160],{},"readBlockTransfer",[422,4162,4163],{},"writeBlockTransfer",[422,4165,4166],{},"blockTransferOf",[422,4168,4169],{},"BlockTransferStorage",") is in ",[422,4172,1026],{},[1812,4174,155],{"href":4175},"\u002Fguides\u002Fcontent-tree#block-transfer",[433,4177,4178,4183],{},[448,4179,4180],{},[422,4181,4182],{},"@skaile\u002Fforge-editor\u002Fschema\u002Fadvanced",[448,4184,1441,4185,4188],{},[422,4186,4187],{},"advancedSchemaExtensions()",": the advanced schema for servers, validators and migrations",[433,4190,4191,4204],{},[448,4192,4193,459,4195,459,4198,459,4201],{},[422,4194,3672],{},[422,4196,4197],{},"\u002Fserver\u002Fhandlers",[422,4199,4200],{},"\u002Fserver\u002Fnode",[422,4202,4203],{},"\u002Fnuxt",[448,4205,4206,4207,459,4210,459,4213,459,4216,459,4219,459,4222,4225,4226,4229,4230,459,4233,459,4236,459,4239,459,4242,459,4245,459,4248,459,4251,511,4254,4257,4258,511,4260,4263,4264,4266,4267,459,4270,1010,4273,542,4276,4279,4280,4283,4284,459,4287,459,4290,459,4293,4296,4297,4300,4301],{},"Server side without a web framework: ",[422,4208,4209],{},"createCollabServer",[422,4211,4212],{},"createAiModels",[422,4214,4215],{},"createRateLimiter",[422,4217,4218],{},"loadCurrentContent",[422,4220,4221],{},"listCurrentContents",[422,4223,4224],{},"currentContent"," (stored content in the current shape), ",[422,4227,4228],{},"EditorPorts"," with its port interfaces (",[422,4231,4232],{},"AccessControl",[422,4234,4235],{},"DocumentContentStore",[422,4237,4238],{},"CollabStateStore",[422,4240,4241],{},"Directory",[422,4243,4244],{},"AssetStore",[422,4246,4247],{},"SettingsStore",[422,4249,4250],{},"ThemeStore",[422,4252,4253],{},"ModelProvider",[422,4255,4256],{},"serverCapabilities",", one request handler per route (",[422,4259,4197],{},[422,4261,4262],{},"listenCollab"," for a plain Node script (",[422,4265,4200],{},"); the Nitro installers ",[422,4268,4269],{},"installEditorServer",[422,4271,4272],{},"provideEditorServer",[422,4274,4275],{},"useEditorServer",[422,4277,4278],{},"\u002Fserver\u002Fnitro","), whose ",[422,4281,4282],{},"EditorServer"," handle offers ",[422,4285,4286],{},"forgetDocument",[422,4288,4289],{},"liveContent",[422,4291,4292],{},"enforceRateLimit",[422,4294,4295],{},"resolveModel","; the Nuxt module (config key ",[422,4298,4299],{},"tiptapEditor",") wraps the same core. See the ",[1812,4302,1814],{"href":196},[433,4304,4305,4344],{},[448,4306,4307,4310,4311,459,4314,459,4317,459,4320,459,4323,459,4326,459,4329,459,4332,459,4335,459,4338,459,4341],{},[422,4308,4309],{},"@skaile\u002Fforge-editor\u002Fstyles\u002Fcore.css"," (required), ",[422,4312,4313],{},"\u002Fcomposites.css",[422,4315,4316],{},"\u002Fmedia.css",[422,4318,4319],{},"\u002Fmentions.css",[422,4321,4322],{},"\u002Ftables.css",[422,4324,4325],{},"\u002Fauthors.css",[422,4327,4328],{},"\u002Fcomments.css",[422,4330,4331],{},"\u002Ftranscript.css",[422,4333,4334],{},"\u002Fai.css",[422,4336,4337],{},"\u002Fcollab.css",[422,4339,4340],{},"\u002Fblock-ui.css",[422,4342,4343],{},"\u002Fthemes.css",[448,4345,4346,4347,4349,4350,962,4352,4354],{},"Feature CSS (import after Tailwind, Nuxt UI (Vue) or ",[422,4348,933],{}," (React) and ",[422,4351,920],{},[422,4353,939],{}," after the feature sheets). The Nuxt module adds all of them itself",{"title":4356,"searchDepth":4357,"depth":4357,"links":4358},"",2,[],"Every explicit subpath of @skaile\u002Fforge-editor and the names it exports.","md",null,{},{"icon":143},{"title":332,"description":4359},"QuVh-vbE8qXYQjbbqKUsigt2dacCBPRbXyehyCH00Jk",[4367,4369],{"title":322,"path":323,"stem":324,"description":4368,"icon":325,"children":-1},"Choose the editor language once per app, override single messages, and keep user-facing strings in the German and English catalogs.",{"title":336,"path":337,"stem":338,"description":4370,"icon":173,"children":-1},"DeriveMethod, DeriveContext, the derive registry, the Derivation record and the derivation index functions.",1793178228357]