feat(qt): kiosk profile release hardening

Integrate the Kiosk profile hardening round: 12 dedicated Kiosk views plus
22 shared opt-in hosts, shared navigation history with Back/Forward, Albums
as the default library tab, native paged Local Library (artists/tracks),
lightweight MyQBZ grid and detail, Ephemeral lifecycle, bounded lists and
artwork sized to the physical frame, static skeletons, 64px transport bar,
Settings touch reflow and a persistent Immersive exit.

Desktop keeps its prior behavior: every shared component defaults to the
desktop path and only opts into Kiosk behavior through explicit properties
(origin-relative ScrollMemory, viewport-bounded artwork requests).

Regression coverage: kiosk navigation and artwork Node tests added to the
runtime gate, scroll-origin fixtures for fixed and grouped rows, i18n
strings for all eight locales.

Verified by 750 release tests, six QML audits, Kiosk smokes at 800x480 and
1280x800 and a Desktop A/B with seven pixel-identical captures.

cc
This commit is contained in:
vicrodh committed 2026-09-07 08:23:11 -06:00
1 parent c1c463dc94
commit b1dba198c9
139 files changed
+9590 -4973

No files matched your search

+6 -3
View File
@@ -23,6 +23,9 @@ import com.blitzfc.qbz
import "../theme"
Rectangle {
// Explicit density opt-in; desktop geometry remains the default.
property bool kioskHost: false
id: root
// --- plain arm (API unchanged) ---------------------------------------
@@ -60,7 +63,7 @@ Rectangle {
// The ROOT keeps the closed footprint; only the inner field animates, so
// a positioner never reflows while the search opens.
width: expandable ? collapsedSize : 240
height: (searchMode || expandable) ? collapsedSize : 34
height: kioskHost ? 44 : ((searchMode || expandable) ? collapsedSize : 34)
color: "transparent"
activeFocusOnTab: root.enabled && root.expandable && !root.open
@@ -220,7 +223,7 @@ Rectangle {
id: input
anchors.fill: parent
color: theme.textPrimary
font.pixelSize: root.searchMode ? 12 : theme.fontBody
font.pixelSize: root.kioskHost ? (root.searchMode ? 12 : theme.fontBody) * 1.2 : (root.searchMode ? 12 : theme.fontBody)
verticalAlignment: Text.AlignVCenter
clip: true
selectByMouse: true
@@ -275,7 +278,7 @@ Rectangle {
anchors.fill: parent
text: root.placeholder
color: theme.textMuted
font.pixelSize: root.searchMode ? 12 : theme.fontBody
font.pixelSize: root.kioskHost ? (root.searchMode ? 12 : theme.fontBody) * 1.2 : (root.searchMode ? 12 : theme.fontBody)
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}