Files
z-bar-qt/Modules/Notifications/Sidebar/Content.qml
T

116 lines
2.0 KiB
QML

pragma ComponentBehavior: Bound
import ZShell.Config
import ZShell.Llm
import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Modules.Notifications.Sidebar.Chat
import qs.Services
Item {
id: root
required property Props props
required property var visibilities
Connections {
function onIsWindowChanged(): void {
if (ChatState.isWindow)
root.props.currentTab = 0;
}
target: ChatState
}
ColumnLayout {
id: layout
anchors.fill: parent
spacing: Tokens.spacing.small
Tabs {
Layout.fillWidth: true
Layout.preferredHeight: ChatState.isWindow ? 0 : implicitHeight
dashState: root.props
nonAnimWidth: layout.width
visible: height > 0
}
CustomClippingRect {
Layout.fillHeight: true
Layout.fillWidth: true
radius: Tokens.rounding.small
Item {
id: pages
anchors.bottom: parent.bottom
anchors.top: parent.top
implicitWidth: parent.width
opacity: root.props.currentTab === 0 ? 1 : 0
visible: opacity > 0
x: root.props.currentTab === 0 ? 0 : -root.width
Behavior on opacity {
Anim {
}
}
Behavior on x {
Anim {
}
}
CustomRect {
anchors.fill: parent
color: Colors.tPalette.m3surfaceContainerLow
radius: Tokens.rounding.small
NotifDock {
props: root.props
visibilities: root.visibilities
}
}
}
Item {
id: chatPage
anchors.bottom: parent.bottom
anchors.top: parent.top
implicitWidth: parent.width
opacity: root.props.currentTab === 1 ? 1 : 0
visible: opacity > 0
x: root.props.currentTab === 0 ? root.width : 0
z: 1
Behavior on opacity {
Anim {
}
}
Behavior on x {
Anim {
}
}
CustomRect {
anchors.fill: parent
color: Colors.tPalette.m3surfaceContainerLow
radius: Tokens.rounding.small
ChatPanel {
anchors.fill: parent
}
}
}
}
CustomRect {
Layout.fillWidth: true
Layout.topMargin: Tokens.padding.small - layout.spacing
color: Colors.tPalette.m3outlineVariant
implicitHeight: 1
}
}
}