Files
qbz/crates/qbz-slint/ui/app.slint
T
vicrodh 7535869e61 feat(qbz-slint): app shell frame
M1 progress. Adds the post-login shell: HeaderBar (nav tabs and
search), Sidebar (playlists list and user card), PlayerBar (transport,
now-playing, volume), and AppShell composing them with the content
region as a placeholder.

app.slint gains an AppScreen enum; clicking sign-in or start-offline
navigates login -> shell (no real auth yet — that is M2). New layout
foundation tokens (sidebar width, header/player-bar heights) plus
border and hover semantic colors.

cc
2026-05-18 12:34:01 -06:00

49 lines
1.4 KiB
Plaintext

// QBZ Slint POC — UI entry point.
//
// Stays thin: imports the feature screens and exports the single
// top-level window. No raw visual constants or domain logic here
// (POC ADR, sections 13 and 21).
import { Theme } from "foundation/semantic-colors.slint";
import { LoginScreen } from "login/LoginScreen.slint";
import { AppShell } from "shell/AppShell.slint";
// Which top-level screen is shown. During M1 the screen switches on a
// login-button click without real authentication; M2 ties the switch
// to a real session.
export enum AppScreen { login, shell }
export component AppWindow inherits Window {
title: "QBZ";
preferred-width: 1180px;
preferred-height: 760px;
min-width: 940px;
min-height: 600px;
background: Theme.surface-main;
in-out property <AppScreen> screen: AppScreen.login;
// Forwarded to the Rust layer, which maps them to typed AppCommands.
callback sign-in-via-browser();
callback use-system-browser();
callback start-offline();
callback open-tos();
if root.screen == AppScreen.login: LoginScreen {
sign-in-via-browser => {
root.sign-in-via-browser();
}
use-system-browser => {
root.use-system-browser();
}
start-offline => {
root.start-offline();
}
open-tos => {
root.open-tos();
}
}
if root.screen == AppScreen.shell: AppShell { }
}