fix(myqbz): final fidelity pass (uppercase, trim, expanded cache, bulk bar §13.1)

Phase-2 Slice 12d.
- Discography Builder: uppercase eyebrow + ORDER BY + 6 column labels (BUILD ARTIST
  COLLECTION / YEAR/TYPE/ALBUM/TRACKS/SOURCE/QUALITY); Create now disables on a
  whitespace-only name (name-trimmed-empty computed in the controller).
- Expanded-mode: per-item inline-track cache keyed by the stable source|source_item_id
  (survives filter/sort/search re-derive instead of re-fetching), cleared on open.
- Inline tracks: go-to-album passes the parent item_type (playlist parent routes to
  the playlist view); duration 0 -> "--:--"; track number from the resolver order.
- Detail bulk bar: completed the §13.1 set (Add to queue, Play next, Add to playlist,
  Add to Mixtape/Collection, Remove, Clear) via MultiSelectBar slots + bulk_enqueue
  (reuses the resolver) + the existing playlist picker; no invented primitive.
- Stale comments corrected (dj-mix wired; mix-modal primary = Add to queue).

Backend crates untouched. cargo check -p qbz-slint green.

cc
This commit is contained in:
vicrodh committed 2026-06-09 08:49:39 -06:00
1 parent 16e6232220
commit 4e0d1a005e
8 files changed
+349 -45

No files matched your search

+5
View File
@@ -1797,6 +1797,11 @@ export global DiscoBuilderState {
// The collection-name input (defaulted to "<artist> — Complete Discography").
in-out property <string> collection-name: "";
// Whether the name is empty AFTER trimming whitespace (Slint can't trim, so
// the controller computes this on every name change). Gates the Create
// button so a whitespace-only name disables it (spec 13 §2.13 / §10.19:
// disabled = creating || selectedCount===0 || !collectionName.trim()).
in property <bool> name-trimmed-empty: true;
// Order segmented control: "release_date" | "title" | "manual".
in-out property <string> order-by: "release_date";