- Replace every Unicode glyph placeholder with Lucide icons via QbzIcon (player transport, carousel nav, album-card overlay, album-page actions, gear, search, checkbox, sidebar). - Header: the search field is centered to the window width and gets a search icon; the header and player bar now use the elevated surface, so all chrome (header, sidebar, player bar) shares one color over the darker content area. - The sidebar user card moves to the header as a user element (name + QBZ logo) that opens a dropdown — Settings, Keyboard Shortcuts, Documentation, Report an Issue, About, plus Log Out and Close. Log Out clears the session and returns to login; Close quits the app. - Content ScrollViews disable the horizontal scrollbar — no view scrolls horizontally, so the phantom reserved lane is gone. cc
35 lines
918 B
Plaintext
35 lines
918 B
Plaintext
// Small square checkbox primitive matching the QBZ dark theme.
|
|
|
|
import { Theme } from "../foundation/semantic-colors.slint";
|
|
import { QbzIcon } from "QbzIcon.slint";
|
|
|
|
export component QbzCheckbox inherits Rectangle {
|
|
in-out property <bool> checked: false;
|
|
callback toggled();
|
|
|
|
width: 18px;
|
|
height: 18px;
|
|
border-radius: 4px;
|
|
background: root.checked ? Theme.accent : transparent;
|
|
border-width: root.checked ? 0px : 1.5px;
|
|
border-color: Theme.text-muted;
|
|
|
|
QbzIcon {
|
|
source: @image-url("../assets/icons/check.svg");
|
|
visible: root.checked;
|
|
width: 12px;
|
|
height: 12px;
|
|
x: (parent.width - self.width) / 2;
|
|
y: (parent.height - self.height) / 2;
|
|
tint: Theme.accent-text;
|
|
}
|
|
|
|
TouchArea {
|
|
mouse-cursor: pointer;
|
|
clicked => {
|
|
root.checked = !root.checked;
|
|
root.toggled();
|
|
}
|
|
}
|
|
}
|