Coherence: one component per idea, one spelling per word, one truth per claim

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-25 02:21:45 -04:00
parent 06c53d6c21
commit bd2fd12de2
87 changed files with 660 additions and 766 deletions
@@ -0,0 +1,47 @@
// A pill beside a name: the one fact about that thing which decides how to
// read the rest of the row.
//
// StatusBadge { text: "Bluetooth"; tone: Theme.accent }
// StatusBadge { text: "No reader"; tone: Theme.warn }
//
// It was born on the Sound page as SoundBadge, where nine outputs named after
// their chipsets look alike in a list and which of them arrives over the
// network, over Bluetooth, or is simply away in its case is what tells them
// apart. That turned out to be the general shape -- an account that is
// connected, a package that came from Flatpak, a shortcut that has been
// changed -- so it lost the "Sound" and became the one pill the settings use.
//
// Always a single short token, always upper-cased here rather than by the
// caller. A badge carrying a sentence is a detail line wearing a border.
import QtQuick
import qs.config
Rectangle {
id: root
property string text: ""
// The token the badge is drawn from -- cyan for network devices, the accent
// for Bluetooth, muted for a device that is not present.
property color tone: Theme.accent
implicitWidth: label.implicitWidth + 14
implicitHeight: 17
radius: Theme.pillRadius
color: Theme.alpha(root.tone, 0.10)
border.width: 1
border.color: Theme.alpha(root.tone, 0.28)
Text {
id: label
anchors.centerIn: parent
text: root.text
color: root.tone
font.family: Theme.fontFamily
font.pixelSize: Math.max(9, Theme.fontSizeSmall - 2)
font.weight: Font.DemiBold
font.capitalization: Font.AllUppercase
font.letterSpacing: 0.5
}
}