import QtQuick import Quickshell import ZShell.Config import ZShell.Llm import qs.Components import qs.Services Column { id: root required property var blocks spacing: Tokens.spacing.small Repeater { id: blockRep model: ScriptModel { values: root.blocks objectProp: "id" } delegate: DelegateChooser { role: "type" DelegateChoice { roleValue: MarkdownBlock.Type.Code delegate: CodeBlockView { required property MarkdownBlock modelData language: modelData.language code: modelData.code anchors.right: parent.right anchors.margins: Tokens.spacing.small anchors.left: parent.left } } DelegateChoice { roleValue: MarkdownBlock.Type.Math delegate: MathBlockView { required property MarkdownBlock modelData latex: modelData.latex anchors.right: parent.right anchors.left: parent.left anchors.margins: Tokens.padding.medium } } DelegateChoice { roleValue: MarkdownBlock.Type.Heading delegate: TextEditBase { required property MarkdownBlock modelData color: Colors.palette.m3onSurface anchors.right: parent.right anchors.left: parent.left anchors.margins: Tokens.padding.medium text: modelData.text textFormat: Text.MarkdownText readOnly: true font: { if (modelData.level <= 1) return Tokens.font.title.builders.large.weight(Font.Bold).build(); if (modelData.level === 2) return Tokens.font.title.builders.medium.weight(Font.Bold).build(); return Tokens.font.title.builders.small.weight(Font.Bold).build(); } wrapMode: Text.WrapAtWordBoundaryOrAnywhere } } DelegateChoice { roleValue: MarkdownBlock.Type.Text delegate: BubbleEdit { required property MarkdownBlock modelData anchors.right: parent.right anchors.left: parent.left anchors.margins: Tokens.padding.medium text: modelData.text } } } } }