Files
metabuilder/qml/MetaBuilder/CSmtpTemplateEditor.qml
johndoe6345789 491c4cffed refactor(qt6): push for sub-100 LOC — JS modules, JSON configs, compact formatting
WorkflowEditor (325→80): CWorkflowState.qml + WorkflowConnectionState.js
DashboardView (121→95): DashboardDBAL.js + config/dashboard-config.json
Storybook (114→78): StorybookSidebar + config/storybook-components.json
+ 7 components compacted to under 100 via formatting (no logic changes)
+ Multiple view/component splits across all remaining 100+ LOC files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:58:28 +00:00

84 lines
2.2 KiB
QML

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QmlComponents 1.0
CCard {
id: root
Layout.fillWidth: true
Layout.fillHeight: true
property bool hasSelection: false
property string templateName: ""
property string templateSubject: ""
property string templateBody: ""
signal nameChanged(string value)
signal subjectChanged(string value)
signal bodyChanged(string value)
signal saveRequested()
ColumnLayout {
anchors.fill: parent
anchors.margins: 16
spacing: 12
FlexRow {
Layout.fillWidth: true
spacing: 8
CText { variant: "h4"; text: "Template Editor" }
Item { Layout.fillWidth: true }
CButton {
visible: root.hasSelection
text: "Save Template"
variant: "primary"
size: "sm"
onClicked: root.saveRequested()
}
}
CDivider { Layout.fillWidth: true }
CText {
visible: !root.hasSelection
variant: "body2"
text: "Select a template from the list to edit."
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: 40
}
ColumnLayout {
visible: root.hasSelection
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 12
CTextField {
Layout.fillWidth: true
label: "Template Name"
placeholderText: "e.g. Welcome Email"
text: root.templateName
onTextChanged: root.nameChanged(text)
}
CTextField {
Layout.fillWidth: true
label: "Subject Template"
placeholderText: "e.g. Welcome to {{app_name}}"
text: root.templateSubject
onTextChanged: root.subjectChanged(text)
}
CSmtpBodyEditor {
Layout.fillWidth: true
Layout.fillHeight: true
body: root.templateBody
onBodyChanged: function(value) { root.bodyChanged(value) }
}
}
}
}