116 lines
2.0 KiB
QML
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
|
|
}
|
|
}
|
|
}
|