diff --git a/frontends/qt6/qmllib/Material/MaterialAlert.qml b/frontends/qt6/qmllib/Material/MaterialAlert.qml new file mode 100644 index 000000000..275c73a36 --- /dev/null +++ b/frontends/qt6/qmllib/Material/MaterialAlert.qml @@ -0,0 +1,75 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 + +import "MaterialPalette.qml" as MaterialPalette + +Rectangle { + id: alert + property alias title: titleText.text + property alias message: messageText.text + property string severity: "info" + property bool dismissible: false + signal dismissed() + radius: 12 + color: severity === "success" ? MaterialPalette.primaryContainer : + severity === "error" ? MaterialPalette.error : + severity === "warning" ? MaterialPalette.secondaryContainer : + MaterialPalette.surfaceVariant + border.color: MaterialPalette.outline + border.width: 1 + padding: 18 + implicitHeight: content.implicitHeight + 12 + + RowLayout { + id: content + anchors.fill: parent + spacing: 12 + + Rectangle { + width: 28 + height: 28 + radius: 14 + color: severity === "success" ? MaterialPalette.primary : + severity === "error" ? MaterialPalette.error : + severity === "warning" ? MaterialPalette.secondary : MaterialPalette.primary + Text { + anchors.centerIn: parent + text: severity === "success" ? "✓" : severity === "error" ? "!" : severity === "warning" ? "!" : "ℹ" + color: "#fff" + font.pixelSize: 16 + font.bold: true + } + } + + ColumnLayout { + spacing: 4 + Text { + id: titleText + font.pixelSize: 16 + font.bold: true + color: MaterialPalette.onSurface + } + Text { + id: messageText + font.pixelSize: 14 + color: MaterialPalette.onSurface + wrapMode: Text.Wrap + } + } + + Item { + Layout.fillWidth: true + } + + Button { + visible: dismissible + text: "Close" + font.pixelSize: 12 + background: Rectangle { + color: "transparent" + } + onClicked: alert.dismissed() + } + } +} diff --git a/frontends/qt6/qmllib/Material/MaterialDialog.qml b/frontends/qt6/qmllib/Material/MaterialDialog.qml new file mode 100644 index 000000000..94d79db5c --- /dev/null +++ b/frontends/qt6/qmllib/Material/MaterialDialog.qml @@ -0,0 +1,69 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 + +import "MaterialPalette.qml" as MaterialPalette + +Dialog { + id: dialog + modal: true + focus: true + property alias title: titleText.text + property alias description: descriptionText.text + signal actionTriggered(string id) + + contentItem: Rectangle { + color: MaterialPalette.surface + radius: 16 + border.color: MaterialPalette.outline + border.width: 1 + width: 480 + + ColumnLayout { + anchors.fill: parent + anchors.margins: 24 + spacing: 12 + + RowLayout { + spacing: 12 + Text { + id: titleText + font.pixelSize: 20 + font.bold: true + color: MaterialPalette.onSurface + } + Item { Layout.fillWidth: true } + Button { + text: "Close" + onClicked: dialog.close() + background: Rectangle { + color: "transparent" + } + } + } + + Text { + id: descriptionText + font.pixelSize: 14 + color: MaterialPalette.onSurface + wrapMode: Text.WordWrap + } + + Item { + Layout.fillHeight: true + } + + RowLayout { + id: actionsRow + spacing: 10 + Layout.alignment: Qt.AlignRight + default property alias buttons: buttonsLoader.data + + Loader { + id: buttonsLoader + asynchronous: true + } + } + } + } +}