pragma ComponentBehavior: Bound import ".." import QtQuick import QtQuick.Layouts import Quickshell import Caelestia.Config import qs.components import qs.components.containers import qs.components.controls import qs.services ColumnLayout { id: root property Session session: null property var model: null property Component delegate: null property string title: "" property string description: "" property var activeItem: null property Component headerComponent: null property Component titleSuffix: null property bool showHeader: true property alias view: view signal itemSelected(var item) spacing: Tokens.spacing.small Loader { id: headerLoader Layout.fillWidth: true asynchronous: true sourceComponent: root.headerComponent visible: root.headerComponent !== null && root.showHeader } RowLayout { Layout.fillWidth: true Layout.topMargin: root.headerComponent ? 0 : 0 spacing: Tokens.spacing.small visible: root.title !== "" || root.description !== "" StyledText { visible: root.title !== "" text: root.title font: Tokens.font.title.builders.medium.weight(Font.Medium).build() } Loader { asynchronous: true sourceComponent: root.titleSuffix visible: root.titleSuffix !== null } Item { Layout.fillWidth: true } } StyledText { visible: root.description !== "" Layout.fillWidth: true text: root.description color: Colours.palette.m3outline } StyledListView { id: view Layout.fillWidth: true implicitHeight: contentHeight model: root.model delegate: root.delegate spacing: Tokens.spacing.extraSmall interactive: false clip: false } }