// Page-level tabs, for a page that is genuinely several subjects. // // SettingsTabs { // tabs: [{ value: "theme", label: "Theme" }, …] // current: root.tab // onSelected: value => root.tab = value // } // // Only for pages long enough that scrolling hides the control someone came for. // Appearance was six cards deep, so light and dark -- the thing reached most -- // sat below a wallpaper grid and an entire lock screen. Tabs are not a way to // make a short page look organised; they are for when the page is long enough // that the order stops being a suggestion and starts being a burial. import QtQuick import qs.config Item { id: root // [{ value, label }] property var tabs: [] property string current: "" signal selected(string value) width: parent ? parent.width : 620 implicitHeight: 40 Row { id: strip anchors.left: parent.left anchors.bottom: parent.bottom spacing: 2 Repeater { model: root.tabs delegate: Item { id: tab required property var modelData readonly property bool active: String(tab.modelData.value) === root.current implicitWidth: caption.implicitWidth + 30 implicitHeight: 38 Text { id: caption anchors.centerIn: parent text: String(tab.modelData.label ?? "") color: tab.active ? Theme.fg : (hover.hovered ? Theme.fgDim : Theme.fgMuted) font.family: Theme.fontFamily font.pixelSize: Theme.fontSize font.weight: tab.active ? Font.DemiBold : Font.Medium } Rectangle { anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom height: 2 radius: 1 visible: tab.active color: Theme.accent } HoverHandler { id: hover cursorShape: Qt.PointingHandCursor } TapHandler { onTapped: root.selected(String(tab.modelData.value)) } } } } Rectangle { anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom height: 1 color: Theme.alpha(Theme.fg, 0.08) z: -1 } }