[{"data":1,"prerenderedAt":1390},["ShallowReactive",2],{"navigation_docs":3,"-guides-data-views":412,"-guides-data-views-surround":1385},[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":205,"body":414,"description":1378,"extension":1379,"links":1380,"meta":1381,"navigation":1382,"path":206,"seo":1383,"stem":207,"__hash__":1384},"docs\u002F3.guides\u002F31.data-views.md",{"type":415,"value":416,"toc":1368},"minimark",[417,440,453,458,469,535,644,657,661,680,734,766,781,785,804,875,879,904,981,985,1011,1100,1133,1297,1303,1320,1330,1337,1364],[418,419,420,421,425,426,430,431,435,436,439],"p",{},"A ",[422,423,424],"strong",{},"data view"," is a ",[427,428,429],"a",{"href":110},"Typed block"," of the Block type ",[432,433,434],"code",{},"dataView"," that shows the answer to a ",[427,437,438],{"href":239},"query"," as a table, a list or a board. It stores the query and the layout and nothing else: the rows are never part of the Document, they are asked for whenever the view is on screen. Copy the Document, export it, or let a collaborator open it: the view shows what the query finds at that moment.",[418,441,442,445,446,448,449,452],{},[432,443,444],{},"defaultBlockTypes(t)"," lists the type (label „Ansicht“ \u002F \"View\", icon ",[432,447,208],{},", capabilities ",[432,450,451],{},"properties"," and the colour basket), so a host that spreads the built-in list has it.",[454,455,457],"h2",{"id":456},"what-a-data-view-stores","What a data view stores",[418,459,460,461,464,465,468],{},"Two ",[427,462,463],{"href":176},"Block properties"," in the Typed block's ",[432,466,467],{},"meta",":",[470,471,472,488],"table",{},[473,474,475],"thead",{},[476,477,478,482,485],"tr",{},[479,480,481],"th",{},"Key",[479,483,484],{},"Type",[479,486,487],{},"Meaning",[489,490,491,511],"tbody",{},[476,492,493,498,504],{},[494,495,496],"td",{},[432,497,438],{},[494,499,500,503],{},[432,501,502],{},"text",", hidden",[494,505,506,507,510],{},"a ",[432,508,509],{},"DataQuery"," as JSON text; the properties form never shows it",[476,512,513,518,523],{},[494,514,515],{},[432,516,517],{},"layout",[494,519,520],{},[432,521,522],{},"select",[494,524,525,527,528,531,532],{},[432,526,470],{}," (the default), ",[432,529,530],{},"list"," or ",[432,533,534],{},"board",[536,537,542],"pre",{"className":538,"code":539,"language":540,"meta":541,"style":541},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { dataViewLayoutOf, dataViewQueryOf, newDataViewMeta } from '@skaile\u002Fforge-editor\u002Fcomposites'\n\nnewDataViewMeta('task')   \u002F\u002F { query: '{\"v\":1,\"source\":{\"kind\":\"blocks\",\"blockType\":\"task\"}}' }\ndataViewQueryOf(node)     \u002F\u002F DataQuery | null; null for no query, bad JSON or a query that names no Block type\ndataViewLayoutOf(node)    \u002F\u002F 'table' | 'list' | 'board'; an unknown value reads as 'table'\n","ts","",[432,543,544,588,595,620,632],{"__ignoreMap":541},[545,546,549,553,557,561,564,567,569,572,575,578,581,585],"span",{"class":547,"line":548},"line",1,[545,550,552],{"class":551},"s7zQu","import",[545,554,556],{"class":555},"sMK4o"," {",[545,558,560],{"class":559},"sTEyZ"," dataViewLayoutOf",[545,562,563],{"class":555},",",[545,565,566],{"class":559}," dataViewQueryOf",[545,568,563],{"class":555},[545,570,571],{"class":559}," newDataViewMeta",[545,573,574],{"class":555}," }",[545,576,577],{"class":551}," from",[545,579,580],{"class":555}," '",[545,582,584],{"class":583},"sfazB","@skaile\u002Fforge-editor\u002Fcomposites",[545,586,587],{"class":555},"'\n",[545,589,591],{"class":547,"line":590},2,[545,592,594],{"emptyLinePlaceholder":593},true,"\n",[545,596,598,602,605,608,611,613,616],{"class":547,"line":597},3,[545,599,601],{"class":600},"s2Zo4","newDataViewMeta",[545,603,604],{"class":559},"(",[545,606,607],{"class":555},"'",[545,609,610],{"class":583},"task",[545,612,607],{"class":555},[545,614,615],{"class":559},")   ",[545,617,619],{"class":618},"sHwdD","\u002F\u002F { query: '{\"v\":1,\"source\":{\"kind\":\"blocks\",\"blockType\":\"task\"}}' }\n",[545,621,623,626,629],{"class":547,"line":622},4,[545,624,625],{"class":600},"dataViewQueryOf",[545,627,628],{"class":559},"(node)     ",[545,630,631],{"class":618},"\u002F\u002F DataQuery | null; null for no query, bad JSON or a query that names no Block type\n",[545,633,635,638,641],{"class":547,"line":634},5,[545,636,637],{"class":600},"dataViewLayoutOf",[545,639,640],{"class":559},"(node)    ",[545,642,643],{"class":618},"\u002F\u002F 'table' | 'list' | 'board'; an unknown value reads as 'table'\n",[418,645,646,648,649,652,653,656],{},[432,647,625],{}," reads the JSON text like ",[432,650,651],{},"collectionQueryOf"," does and checks only its shape; ",[432,654,655],{},"validateQuery"," names the issues against the Block type's fields, and a view whose query is wrong shows them instead of rows.",[454,658,660],{"id":659},"the-three-layouts","The three layouts",[418,662,663,664,667,668,671,672,675,676,679],{},"A layout turns the ",[432,665,666],{},"DataResult"," into the model a view draws (",[432,669,670],{},"VIEW_LAYOUTS",", ",[432,673,674],{},"features\u002Fcomposites\u002Fviews\u002Flayouts.ts","). Cell text, sort keys and the right-hand alignment of numbers come from the Property kind registry (",[432,677,678],{},"PROPERTY_KINDS","), so a new property type shows in every layout without code here.",[470,681,682,695],{},[473,683,684],{},[476,685,686,689,692],{},[479,687,688],{},"Layout",[479,690,691],{},"Shows",[479,693,694],{},"Requires",[489,696,697,709,720],{},[476,698,699,703,706],{},[494,700,701],{},[432,702,470],{},[494,704,705],{},"one row per Block: title, Block type, then one column per property (long text such as a transcript and hidden properties get none)",[494,707,708],{},"nothing",[476,710,711,715,718],{},[494,712,713],{},[432,714,530],{},[494,716,717],{},"the title first, then the short properties as fields",[494,719,708],{},[476,721,722,726,729],{},[494,723,724],{},[432,725,534],{},[494,727,728],{},"one lane per option of the group field, a card per Block",[494,730,731],{},[432,732,733],{},"group",[418,735,736,737,740,741,671,744,671,747,750,751,753,754,757,758,761,762,765],{},"A board needs a group in the query: its lanes are the options of the grouped property. For a ",[432,738,739],{},"status"," property the lane carries the option's group (",[432,742,743],{},"todo",[432,745,746],{},"doing",[432,748,749],{},"done","), for a ",[432,752,522],{}," the options in their declared order; a lane of an option nobody uses stays on the board (a board shows where nothing is yet), the lane of Blocks without a value comes last, and ",[432,755,756],{},"group.hideEmpty"," drops it when it holds nothing. ",[432,759,760],{},"viewModelOf(layout, result, defs, env, input)"," refuses a query without a group for the board (",[432,763,764],{},"{ ok: false, missing: ['group'] }","), and the view then says so instead of drawing no lanes.",[418,767,768,769,772,773,775,776,531,778,780],{},"Choosing the board in the view (",[432,770,771],{},"chooseDataViewLayout(editor, node, 'board')",") on a query without a group writes the ",[432,774,739],{}," property (else the first ",[432,777,739],{},[432,779,522],{}," property of the queried Block types) as the group, so the board shows lanes at once. Going back to the table keeps the group.",[454,782,784],{"id":783},"how-a-view-asks","How a view asks",[418,786,787,788,791,792,795,796,799,800,803],{},"The model is ",[432,789,790],{},"features\u002Fcomposites\u002Fviews\u002Fdata-view-model.ts"," (",[432,793,794],{},"createDataViewModel","), shared by ",[432,797,798],{},"DataView.vue"," and ",[432,801,802],{},"DataView.tsx",": one model, two thin twins.",[805,806,807,819,842,857,865],"ul",{},[808,809,810,811,814,815,818],"li",{},"It answers with ",[432,812,813],{},"backend.index.query"," (the Blocks of every Document the user may read). A backend without it answers the same query locally over the Blocks of the open Document, with ",[432,816,817],{},"evaluateQuery","; the line below the view then says „Nur die Blöcke dieses Dokuments“.",[808,820,821,822,671,825,671,828,671,831,799,834,837,838,841],{},"The state is one of ",[432,823,824],{},"no-query",[432,826,827],{},"loading",[432,829,830],{},"ready",[432,832,833],{},"needs-group",[432,835,836],{},"error"," (a refused query lists its ",[432,839,840],{},"QueryIssue","s). The previous rows stay on screen while the next answer is on its way, and an answer that equals the one shown does not redraw the view.",[808,843,844,845,848,849,852,853,856],{},"Only a view on screen asks. The node view reports its visibility (",[432,846,847],{},"model.setVisible","); a visible view listens for changes of the Blocks (its own Document and the Blocks of other Documents, as the reference chips do), asks again 200 ms after the last change (",[432,850,851],{},"DATA_VIEW_DEBOUNCE_MS","), and every ",[432,854,855],{},"FOREIGN_CONTENT_REFRESH_MS"," (the Blocks of other Documents change without the editor hearing of it). A view scrolled away stops all three and asks again when it comes back.",[808,858,859,860,531,862,864],{},"A change of the block's ",[432,861,438],{},[432,863,517],{}," asks at once.",[808,866,867,868,791,871,874],{},"Row clicks reveal the Block in the open Document, or open it in its own Document through the host's ",[432,869,870],{},"openBlock",[432,872,873],{},"revealCollectionItem",").",[454,876,878],{"id":877},"node-view","Node view",[418,880,881,882,885,886,888,889,892,893,896,897,900,901,468],{},"Both bindings supply the node view (",[432,883,884],{},"CompositeNodeViews.dataView","): the usual Typed block view with the answer below its content, and layout buttons while the editor is editable. A binding that renders no live content leaves ",[432,887,434],{}," out of ",[432,890,891],{},"nodeViews","; the block then renders as any Typed block and its query stays in ",[432,894,895],{},"meta.query",". Both bindings pass ",[432,898,899],{},"typedBlockViewOptions"," to the renderer, like ",[432,902,903],{},"collection",[536,905,907],{"className":538,"code":906,"language":540,"meta":541,"style":541},"compositeNodes({\n  typedBlock: VueNodeViewRenderer(CompositeView, typedBlockViewOptions),\n  dataView: VueNodeViewRenderer(DataView, typedBlockViewOptions),\n  reference: VueNodeViewRenderer(ReferenceView),\n})\n",[432,908,909,919,941,959,973],{"__ignoreMap":541},[545,910,911,914,916],{"class":547,"line":548},[545,912,913],{"class":600},"compositeNodes",[545,915,604],{"class":559},[545,917,918],{"class":555},"{\n",[545,920,921,925,927,930,933,935,938],{"class":547,"line":590},[545,922,924],{"class":923},"swJcz","  typedBlock",[545,926,468],{"class":555},[545,928,929],{"class":600}," VueNodeViewRenderer",[545,931,932],{"class":559},"(CompositeView",[545,934,563],{"class":555},[545,936,937],{"class":559}," typedBlockViewOptions)",[545,939,940],{"class":555},",\n",[545,942,943,946,948,950,953,955,957],{"class":547,"line":597},[545,944,945],{"class":923},"  dataView",[545,947,468],{"class":555},[545,949,929],{"class":600},[545,951,952],{"class":559},"(DataView",[545,954,563],{"class":555},[545,956,937],{"class":559},[545,958,940],{"class":555},[545,960,961,964,966,968,971],{"class":547,"line":622},[545,962,963],{"class":923},"  reference",[545,965,468],{"class":555},[545,967,929],{"class":600},[545,969,970],{"class":559},"(ReferenceView)",[545,972,940],{"class":555},[545,974,975,978],{"class":547,"line":634},[545,976,977],{"class":555},"}",[545,979,980],{"class":559},")\n",[454,982,984],{"id":983},"the-query-builder","The query builder",[418,986,987,988,791,991,994,995,998,999,1002,1003,1006,1007,1010],{},"In an editable editor the layout bar of a data view has an \"Abfrage bearbeiten\" button that opens the ",[422,989,990],{},"query builder",[432,992,993],{},"QueryBuilder.vue"," \u002F ",[432,996,997],{},"QueryBuilder.tsx",", both over ",[432,1000,1001],{},"createQueryBuilderModel"," in ",[432,1004,1005],{},"views\u002Fquery-builder-model.ts","; ",[432,1008,1009],{},"createEditorQueryBuilder(editor, node)"," wires it to a view). The form has:",[805,1012,1013,1020,1090],{},[808,1014,1015,1016,1019],{},"the ",[422,1017,1018],{},"Block type"," the query reads (a stored query that names several types keeps them until another type is chosen);",[808,1021,1022,1023,1026,1027,671,1030,671,1033,1036,1037,671,1040,671,1043,671,1046,671,1049,799,1052,1055,1056,1059,1060,1062,1063,1066,1067,1066,1070,1073,1074,1066,1077,1080,1081,531,1083,1085,1086,1089],{},"a flat ",[422,1024,1025],{},"AND list of conditions",", each ",[432,1028,1029],{},"field",[432,1031,1032],{},"operator",[432,1034,1035],{},"value",". The fields are the properties of the type plus the pseudo-fields ",[432,1038,1039],{},"$title",[432,1041,1042],{},"$tags",[432,1044,1045],{},"$type",[432,1047,1048],{},"$id",[432,1050,1051],{},"$doc",[432,1053,1054],{},"$basket"," (the baskets are its choices). The operators are the ",[432,1057,1058],{},"ops"," of the field's kind in ",[432,1061,678],{},", so a date offers ",[432,1064,1065],{},"before","\u002F",[432,1068,1069],{},"after",[432,1071,1072],{},"on",", a number ",[432,1075,1076],{},"lt",[432,1078,1079],{},"gte",", a ",[432,1082,739],{},[432,1084,522],{}," its options as choices, a ",[432,1087,1088],{},"checkbox"," yes\u002Fno. Changing the field resets the operator to the first one of its kind;",[808,1091,1092,1093,1096,1097,1099],{},"one ",[422,1094,1095],{},"sort"," field with a direction and one ",[422,1098,733],{}," field (with \"hide the group without a value\").",[418,1101,1102,1103,1105,1106,1108,1109,1112,1113,671,1116,671,1119,671,1121,1124,1125,1128,1129,1132],{},"Every change builds the query again and runs ",[432,1104,655],{},". Only a complete, valid query is written to the block's ",[432,1107,895],{}," (through ",[432,1110,1111],{},"setDataViewQuery","); a row without a value yet, or a query the validator refuses, writes nothing and the form says how many parts are open. The view then asks again at once because its node changed. What the form has no control for stays as stored: ",[432,1114,1115],{},"search",[432,1117,1118],{},"aggregates",[432,1120,522],{},[432,1122,1123],{},"page",", the ",[432,1126,1127],{},"scope",", sorts after the first, and a filter with ",[432,1130,1131],{},"or"," or nesting (the form shows it as kept and offers to replace it). A change of the stored query from outside (another user, an undo) is followed by the open form.",[536,1134,1136],{"className":538,"code":1135,"language":540,"meta":541,"style":541},"import { createEditorQueryBuilder } from '@skaile\u002Fforge-editor\u002Fcomposites'\n\nconst builder = createEditorQueryBuilder(editor, node)   \u002F\u002F null without a block ID or a translator\nbuilder?.setBlockType('task')\nconst id = builder!.addCondition()\nbuilder!.setConditionField(id, 'status')\nbuilder!.setConditionValue(id, 'done')                   \u002F\u002F writes `status eq done`\nbuilder!.setGroup('$basket')\n",[432,1137,1138,1157,1161,1186,1207,1228,1251,1277],{"__ignoreMap":541},[545,1139,1140,1142,1144,1147,1149,1151,1153,1155],{"class":547,"line":548},[545,1141,552],{"class":551},[545,1143,556],{"class":555},[545,1145,1146],{"class":559}," createEditorQueryBuilder",[545,1148,574],{"class":555},[545,1150,577],{"class":551},[545,1152,580],{"class":555},[545,1154,584],{"class":583},[545,1156,587],{"class":555},[545,1158,1159],{"class":547,"line":590},[545,1160,594],{"emptyLinePlaceholder":593},[545,1162,1163,1167,1170,1173,1175,1178,1180,1183],{"class":547,"line":597},[545,1164,1166],{"class":1165},"spNyl","const",[545,1168,1169],{"class":559}," builder ",[545,1171,1172],{"class":555},"=",[545,1174,1146],{"class":600},[545,1176,1177],{"class":559},"(editor",[545,1179,563],{"class":555},[545,1181,1182],{"class":559}," node)   ",[545,1184,1185],{"class":618},"\u002F\u002F null without a block ID or a translator\n",[545,1187,1188,1191,1194,1197,1199,1201,1203,1205],{"class":547,"line":622},[545,1189,1190],{"class":559},"builder",[545,1192,1193],{"class":555},"?.",[545,1195,1196],{"class":600},"setBlockType",[545,1198,604],{"class":559},[545,1200,607],{"class":555},[545,1202,610],{"class":583},[545,1204,607],{"class":555},[545,1206,980],{"class":559},[545,1208,1209,1211,1214,1216,1219,1222,1225],{"class":547,"line":634},[545,1210,1166],{"class":1165},[545,1212,1213],{"class":559}," id ",[545,1215,1172],{"class":555},[545,1217,1218],{"class":559}," builder",[545,1220,1221],{"class":555},"!.",[545,1223,1224],{"class":600},"addCondition",[545,1226,1227],{"class":559},"()\n",[545,1229,1231,1233,1235,1238,1241,1243,1245,1247,1249],{"class":547,"line":1230},6,[545,1232,1190],{"class":559},[545,1234,1221],{"class":555},[545,1236,1237],{"class":600},"setConditionField",[545,1239,1240],{"class":559},"(id",[545,1242,563],{"class":555},[545,1244,580],{"class":555},[545,1246,739],{"class":583},[545,1248,607],{"class":555},[545,1250,980],{"class":559},[545,1252,1254,1256,1258,1261,1263,1265,1267,1269,1271,1274],{"class":547,"line":1253},7,[545,1255,1190],{"class":559},[545,1257,1221],{"class":555},[545,1259,1260],{"class":600},"setConditionValue",[545,1262,1240],{"class":559},[545,1264,563],{"class":555},[545,1266,580],{"class":555},[545,1268,749],{"class":583},[545,1270,607],{"class":555},[545,1272,1273],{"class":559},")                   ",[545,1275,1276],{"class":618},"\u002F\u002F writes `status eq done`\n",[545,1278,1280,1282,1284,1287,1289,1291,1293,1295],{"class":547,"line":1279},8,[545,1281,1190],{"class":559},[545,1283,1221],{"class":555},[545,1285,1286],{"class":600},"setGroup",[545,1288,604],{"class":559},[545,1290,607],{"class":555},[545,1292,1054],{"class":583},[545,1294,607],{"class":555},[545,1296,980],{"class":559},[454,1298,1300],{"id":1299},"ansicht",[432,1301,1302],{},"\u002Fansicht",[418,1304,1305,1306,1308,1309,1312,1313,1316,1317,1319],{},"The slash command ",[432,1307,1302],{}," inserts a data view after the caret's block over the Block type that has the most Typed blocks in the open Document (the first one met wins a tie; a data view never counts). A Document without another Typed block gets a view over the default Block type of the settings. ",[432,1310,1311],{},"insertDataView(editor, fallbackType)"," does the same from code, and ",[432,1314,1315],{},"insertComposite(kind, meta)"," takes the ",[432,1318,467],{}," of the block it creates.",[418,1321,1322,1323,1326,1327,1329],{},"The Block type's own slash entry (",[432,1324,1325],{},"\u002FdataView",") is not offered: an empty view says nothing, ",[432,1328,1302],{}," always starts with a query.",[454,1331,1333,1334,1336],{"id":1332},"the-typed-blocks-table-is-the-table-layout","The Typed blocks table is the ",[432,1335,470],{}," layout",[418,1338,1339,1342,1343,791,1346,1349,1350,1352,1353,1355,1356,1359,1360,1363],{},[432,1340,1341],{},"CompositeTable"," (Vue and React) lists the Typed blocks of the open Document. It does not have a table of its own: its columns are those of ",[432,1344,1345],{},"VIEW_LAYOUTS.table",[432,1347,1348],{},"tableColumnsOf","), its filters are one ",[432,1351,509],{}," that ",[432,1354,817],{}," answers over ",[432,1357,1358],{},"rowsAsBlockRows(rows)",", and cell text and sort keys come from the kind registry. ",[432,1361,1362],{},"tableViewOf"," adds what only the panel has (tags, summary, search box, the sort the header sets). A column or kind added to the layout shows in the panel and in every data view.",[1365,1366,1367],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":541,"searchDepth":590,"depth":590,"links":1369},[1370,1371,1372,1373,1374,1375,1376],{"id":456,"depth":590,"text":457},{"id":659,"depth":590,"text":660},{"id":783,"depth":590,"text":784},{"id":877,"depth":590,"text":878},{"id":983,"depth":590,"text":984},{"id":1299,"depth":590,"text":1302},{"id":1332,"depth":590,"text":1377},"The Typed blocks table is the table layout","The dataView Block type: its stored query and layout, the three layouts and what a board needs, how the view asks and refreshes, \u002Fansicht, and the Typed blocks table as the table layout.","md",null,{},{"icon":208},{"title":205,"description":1378},"Ji1p1Ef0n0KGdQa_pZ1Ep53Lb_pJbekrBpNGA3xIt4k",[1386,1388],{"title":200,"path":201,"stem":202,"description":1387,"icon":203,"children":-1},"The collection Block type: its items and stored query, the node view with reorder and „Aus Abfrage füllen“, the block action that adds a Block, and the Markdown export.",{"title":210,"path":211,"stem":212,"description":1389,"icon":193,"children":-1},"What is connected to a Block: the Blocks that point at it, the Blocks related to it, and the chain of Derivations behind it. The explore Feature, the panel, the related route and derivationTrailOf.",1793213905433]