import QtQuick import QtQuick.Layouts import Nebula.Bigscreen ColumnLayout { id: root signal goBack() readonly property var entries: [ { title: "Nebula Demo", meta: "Local • Ready", icon: "🎮" }, { title: "Retro Runner", meta: "Wine • Installed", icon: "👾" }, { title: "Media Hub", meta: "App • Installed", icon: "🎬" } ] property int focusIndex: 0 spacing: 20 Text { text: "Library" font: Theme.brandFont color: Theme.textPrimary Layout.leftMargin: 40 } Text { text: "Mock entries for v0 — scanners and launchers come later." font: Theme.metaFont color: Theme.textMuted Layout.leftMargin: 40 Layout.bottomMargin: 8 } ListView { id: list Layout.fillWidth: true Layout.fillHeight: true Layout.leftMargin: 40 Layout.rightMargin: 40 clip: true spacing: 12 model: root.entries delegate: Rectangle { width: list.width height: 72 radius: 12 color: index === root.focusIndex ? "#22304A66" : Theme.backgroundPanel border.color: index === root.focusIndex ? Theme.accentCyan : Theme.accentLine border.width: index === root.focusIndex ? 2 : 1 RowLayout { anchors.fill: parent anchors.margins: 16 spacing: 16 Text { text: modelData.icon font.pixelSize: 28 } ColumnLayout { spacing: 2 Text { text: modelData.title font: Theme.titleFont color: Theme.textPrimary } Text { text: modelData.meta font: Theme.metaFont color: Theme.textMuted } } } } } function handleInput(action) { switch (action) { case InputRouter.Up: focusIndex = Math.max(0, focusIndex - 1) list.currentIndex = focusIndex break case InputRouter.Down: focusIndex = Math.min(entries.length - 1, focusIndex + 1) list.currentIndex = focusIndex break case InputRouter.Back: root.goBack() break case InputRouter.Accept: break default: break } } }