Files

133 lines
3.4 KiB
QML

import ZShell
import QtQuick
import QtQuick.Layouts
import qs.Components
import ZShell.Config
import qs.Services
CustomRect {
id: root
required property Toast modelData
anchors.left: parent.left
anchors.right: parent.right
border.color: {
let colour = Colors.palette.m3outlineVariant;
if (root.modelData.type === Toast.Success)
colour = Colors.palette.m3success;
if (root.modelData.type === Toast.Warning)
colour = Colors.palette.m3secondaryContainer;
if (root.modelData.type === Toast.Error)
colour = Colors.palette.m3error;
return Qt.alpha(colour, 0.3);
}
border.width: 1
color: {
if (root.modelData.type === Toast.Success)
return Colors.palette.m3successContainer;
if (root.modelData.type === Toast.Warning)
return Colors.palette.m3secondary;
if (root.modelData.type === Toast.Error)
return Colors.palette.m3errorContainer;
return Colors.palette.m3surface;
}
implicitHeight: layout.implicitHeight + Tokens.padding.smaller * 2
radius: Tokens.rounding.normal
Behavior on border.color {
CAnim {
}
}
Elevation {
anchors.fill: parent
level: 3
opacity: parent.opacity
radius: parent.radius
z: -1
}
RowLayout {
id: layout
anchors.fill: parent
anchors.leftMargin: Tokens.padding.normal
anchors.margins: Tokens.padding.smaller
anchors.rightMargin: Tokens.padding.normal
spacing: Tokens.spacing.normal
CustomRect {
color: {
if (root.modelData.type === Toast.Success)
return Colors.palette.m3success;
if (root.modelData.type === Toast.Warning)
return Colors.palette.m3secondaryContainer;
if (root.modelData.type === Toast.Error)
return Colors.palette.m3error;
return Colors.palette.m3surfaceContainerHigh;
}
implicitHeight: icon.implicitHeight + Tokens.padding.smaller * 2
implicitWidth: implicitHeight
radius: Tokens.rounding.normal
MaterialIcon {
id: icon
anchors.centerIn: parent
color: {
if (root.modelData.type === Toast.Success)
return Colors.palette.m3onSuccess;
if (root.modelData.type === Toast.Warning)
return Colors.palette.m3onSecondaryContainer;
if (root.modelData.type === Toast.Error)
return Colors.palette.m3onError;
return Colors.palette.m3onSurfaceVariant;
}
font.pointSize: Math.round(Tokens.font.size.large * 1.2)
text: root.modelData.icon
}
}
ColumnLayout {
Layout.fillWidth: true
spacing: 0
CustomText {
id: title
Layout.fillWidth: true
color: {
if (root.modelData.type === Toast.Success)
return Colors.palette.m3onSuccessContainer;
if (root.modelData.type === Toast.Warning)
return Colors.palette.m3onSecondary;
if (root.modelData.type === Toast.Error)
return Colors.palette.m3onErrorContainer;
return Colors.palette.m3onSurface;
}
elide: Text.ElideRight
font.pointSize: Tokens.font.size.normal
text: root.modelData.title
}
CustomText {
Layout.fillWidth: true
color: {
if (root.modelData.type === Toast.Success)
return Colors.palette.m3onSuccessContainer;
if (root.modelData.type === Toast.Warning)
return Colors.palette.m3onSecondary;
if (root.modelData.type === Toast.Error)
return Colors.palette.m3onErrorContainer;
return Colors.palette.m3onSurface;
}
elide: Text.ElideRight
opacity: 0.8
text: root.modelData.message
textFormat: Text.StyledText
}
}
}
}