import QtQuick import ZShell.Config import ZShell.Llm import qs.Components import qs.Services Column { id: root // Top-level markdown blocks (see MarkdownParser / LlmSegment.markdown). required property var blocks spacing: Tokens.spacing.small Repeater { id: blockRep model: root.blocks delegate: DelegateChooser { role: "type" DelegateChoice { roleValue: LlmMarkdown.Type.Code delegate: CodeBlockView { required property var modelData language: modelData.language code: modelData.code anchors.right: parent.right anchors.margins: Tokens.spacing.small anchors.left: parent.left } } DelegateChoice { roleValue: LlmMarkdown.Type.Math delegate: MathBlockView { required property var modelData latex: modelData.latex anchors.right: parent.right anchors.left: parent.left anchors.margins: Tokens.padding.medium } } DelegateChoice { roleValue: LlmMarkdown.Type.Heading delegate: CustomText { required property var modelData color: Colors.palette.m3onSurface anchors.right: parent.right anchors.left: parent.left anchors.margins: Tokens.padding.medium text: modelData.text textFormat: Text.MarkdownText font.bold: true font.pointSize: { if (modelData.level <= 1) return Tokens.font.size.larger; if (modelData.level === 2) return Tokens.font.size.normal; return Tokens.font.size.smaller; } wrapMode: Text.WrapAtWordBoundaryOrAnywhere } } DelegateChoice { roleValue: LlmMarkdown.Type.Text delegate: CustomText { required property var modelData color: Colors.palette.m3onSurface anchors.right: parent.right anchors.left: parent.left anchors.margins: Tokens.padding.medium text: modelData.text textFormat: Text.MarkdownText font.pointSize: Tokens.font.size.smaller wrapMode: Text.WrapAtWordBoundaryOrAnywhere } } } } }