Files
dotfiles/.config/quickshell/nucleus-shell/modules/interface/sidebarLeft/SidebarLeftContent.qml

143 lines
3.6 KiB
QML

import Qt5Compat.GraphicalEffects
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Io
import Quickshell.Wayland
import qs.config
import qs.modules.functions
import qs.modules.components
import qs.services
Item {
anchors.fill: parent
SwipeView {
id: view
anchors.fill: parent
// IntelligencePanel {}
SystemOverview {}
// WallpapersPage {}
}
Rectangle {
height: 2
width: parent.width - Metrics.margin("verylarge")
color: Appearance.m3colors.m3outlineVariant
opacity: 0.6
anchors {
top: view.top
topMargin: segmentedIndicator.height + Metrics.margin("verysmall")
horizontalCenter: view.horizontalCenter
}
}
Rectangle {
id: activeTabIndicator
height: 2
width: 96
radius: Metrics.radius(1)
color: Appearance.m3colors.m3primary
x: (segmentedIndicator.width / view.count) * view.currentIndex + (segmentedIndicator.width / view.count - width) / 2
anchors {
top: segmentedIndicator.bottom
topMargin: Metrics.margin(8)
}
Behavior on x {
NumberAnimation {
duration: Metrics.chronoDuration(220)
easing.type: Easing.OutCubic
}
}
}
Item {
id: segmentedIndicator
height: 56
width: parent.width
anchors {
top: parent.top
horizontalCenter: parent.horizontalCenter
}
Row {
anchors.fill: parent
spacing: 0
Repeater {
model: [
// {
// "icon": "neurology",
// "text": "Intelligence"
// },
{
"icon": "overview",
"text": "Overview"
},
// {
// "icon": "wallpaper",
// "text": "Wallpapers"
// }
]
Item {
width: segmentedIndicator.width / view.count
height: parent.height
MouseArea {
anchors.fill: parent
onClicked: view.currentIndex = index
}
// Icon (true center)
MaterialSymbol {
icon: modelData.icon
iconSize: Metrics.iconSize("huge")
color: view.currentIndex === index ? Appearance.m3colors.m3primary : Appearance.m3colors.m3onSurfaceVariant
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.top
topMargin: Metrics.margin(12)
}
}
// Label (independent centering)
StyledText {
text: modelData.text
font.pixelSize: Metrics.fontSize("large")
font.weight: Font.Medium
color: view.currentIndex === index ? Appearance.m3colors.m3primary : Appearance.m3colors.m3onSurfaceVariant
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
bottomMargin: 0
}
}
}
}
}
}
}