pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts import qs.Config import qs.Components ConnectedRect { id: root property alias icon: iconLabel.text readonly property alias iconLabel: iconLabel readonly property alias label: label property alias stateEnabled: stateLayer.enabled readonly property alias subLabel: subLabel property alias subtext: subLabel.text property alias text: label.text property string trailingIcon signal clicked(event: MouseEvent) Layout.fillWidth: true implicitHeight: row.implicitHeight + Appearance.padding.normal * 2 StateLayer { id: stateLayer onClicked: e => root.clicked(e) } RowLayout { id: row anchors.left: parent.left anchors.margins: Appearance.padding.largeIncreased anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter opacity: root.enabled ? 1 : 0.5 spacing: Appearance.spacing.normal Behavior on opacity { Anim { } } MaterialIcon { id: iconLabel color: DynamicColors.palette.m3onSurfaceVariant fill: 1 font.pointSize: Appearance.font.size.medium } Column { id: column Layout.fillWidth: true spacing: 0 CustomText { id: label anchors.left: parent.left anchors.right: parent.right elide: Text.ElideRight font.pointSize: Appearance.font.size.small } CustomText { id: subLabel anchors.left: parent.left anchors.right: parent.right color: DynamicColors.palette.m3outline elide: Text.ElideRight font.pointSize: Appearance.font.size.small visible: text } } Loader { active: root.trailingIcon asynchronous: true visible: active sourceComponent: MaterialIcon { color: DynamicColors.palette.m3onSurfaceVariant font.pointSize: Appearance.font.size.medium text: root.trailingIcon } } } }