Skip to main content

max / audiofiles

Move the toolbar onto Run, and take quasi 0.100 The toolbar is audiofiles' only row, so it is the whole of this repo's share of Slot::beside going away.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-09-03 02:17 UTC
Signed with PGP, not checked
Commit: 9138fb6c1a15752acb2186565191da15ef548cf7
Parent: 1f5f0ea
3 files changed, +31 insertions, -22 deletions
M Cargo.lock +12 -12
@@ -4256,7 +4256,7 @@
4256 4256
4257 4257 [[package]]
4258 4258 name = "quasi-immediate"
4259 - version = "0.99.0"
4259 + version = "0.100.0"
4260 4260 dependencies = [
4261 4261 "docengine",
4262 4262 "egui",
@@ -4267,7 +4267,7 @@
4267 4267
4268 4268 [[package]]
4269 4269 name = "quasi-router"
4270 - version = "0.99.0"
4270 + version = "0.100.0"
4271 4271 dependencies = [
4272 4272 "makeover-layout",
4273 4273 ]
@@ -7556,6 +7556,10 @@
7556 7556 "winnow 1.0.4",
7557 7557 ]
7558 7558
7559 + [[patch.unused]]
7560 + name = "quasi-type"
7561 + version = "0.1.3"
7562 +
7559 7563 [[patch.unused]]
7560 7564 name = "kberg"
7561 7565 version = "0.1.0"
@@ -7570,19 +7574,19 @@
7570 7574
7571 7575 [[patch.unused]]
7572 7576 name = "quasi-axum"
7573 - version = "0.99.0"
7577 + version = "0.100.0"
7574 7578
7575 7579 [[patch.unused]]
7576 7580 name = "quasi-basics"
7577 - version = "0.99.0"
7581 + version = "0.100.0"
7578 7582
7579 7583 [[patch.unused]]
7580 7584 name = "quasi-http"
7581 - version = "0.99.0"
7585 + version = "0.100.0"
7582 7586
7583 7587 [[patch.unused]]
7584 7588 name = "quasi-notifs"
7585 - version = "0.99.0"
7589 + version = "0.100.0"
7586 7590
7587 7591 [[patch.unused]]
7588 7592 name = "quasi-store"
@@ -7590,12 +7594,8 @@
7590 7594
7591 7595 [[patch.unused]]
7592 7596 name = "quasi-tauri"
7593 - version = "0.99.0"
7597 + version = "0.100.0"
7594 7598
7595 7599 [[patch.unused]]
7596 7600 name = "quasi-webview"
7597 - version = "0.99.0"
7598 -
7599 - [[patch.unused]]
7600 - name = "quasi-type"
7601 - version = "0.1.3"
7601 + version = "0.100.0"
M Cargo.toml +2 -2
@@ -26,8 +26,8 @@
26 26 # The described screens, which are audiofiles-browser's screens. By git URL with
27 27 # a version requirement, per the tree's rule for cross-repo deps. They were
28 28 # behind a `quasi` feature until 2026-08-25, when the last flip landed.
29 - quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
30 - quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.99" }
29 + quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.100" }
30 + quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.100" }
31 31 egui = { version = "0.35", default-features = false, features = ["default_fonts"] }
32 32 egui_extras = { version = "0.35", default-features = false }
33 33 eframe = { version = "0.35", default-features = false, features = ["default_fonts", "glow"] }
@@ -88,7 +88,7 @@
88 88 use quasi_router::layout::{self, FieldKind, Priority, Tone, Width};
89 89 use quasi_router::{
90 90 Act, Action, Choice, Consult, Field, Node, RegionKind, Request, Response, RouteError, Router,
91 - Screen, Slot,
91 + Run, Screen, Slot,
92 92 };
93 93
94 94 use super::{Panel, Panels, Where};
@@ -300,11 +300,20 @@
300 300 // already carry what each is worth (`Panel::worth`), which is the declared
301 301 // replacement for the `screen_w < 900.0` collapse, and a fallback that kept
302 302 // everything would leave those ranks saying nothing.
303 - let bar = Slot::new(BAR, RegionKind::Band).across(layout::Fallback::Shed);
303 + //
304 + // The row is built as a row and then given to the region, which is what
305 + // lets the builders below take a `Run` and add to it. They used to take the
306 + // whole `Slot`, and what they were relying on was that this function had
307 + // already called `across` on it: a promise nothing in their signatures made
308 + // and no compiler could check. `Run::new` is the only way to make a row and
309 + // it takes the fallback, so a helper holding one is holding a row that has
310 + // already said what it does when it is tight.
311 + let bar = Run::new(layout::Fallback::Shed);
304 312 let bar = here(bar, state);
305 313 let bar = holding(bar, state);
306 314 let bar = looking(bar, state);
307 - panels(bar, state)
315 + let bar = panels(bar, state);
316 + Slot::new(BAR, RegionKind::Band).across(bar)
308 317 }
309 318
310 319 /// Where you are, which is one of three things.
@@ -314,7 +323,7 @@
314 323 /// "making every linked value a button would put a row of bevels down the first
315 324 /// column of half a dashboard". A breadcrumb is the case that argument was
316 325 /// written for.
317 - fn here(bar: Slot, state: &Panels<'_>) -> Slot {
326 + fn here(bar: Run, state: &Panels<'_>) -> Run {
318 327 match state.bar.place() {
319 328 Where::Folder { trail } => {
320 329 let mut bar = bar.beside(
@@ -429,7 +438,7 @@
429 438 /// Nothing at all when it is empty. An empty basket is not a query with no
430 439 /// results, it is no query, and a control for a question nobody has asked is
431 440 /// noise on a bar that already sheds members to fit.
432 - fn holding(bar: Slot, state: &Panels<'_>) -> Slot {
441 + fn holding(bar: Run, state: &Panels<'_>) -> Run {
433 442 let held = state.bar.basket();
434 443 if held.is_empty() {
435 444 return bar;
@@ -479,7 +488,7 @@
479 488 }
480 489
481 490 /// A mode you are in, and the way out of it.
482 - fn leaving(bar: Slot, says: String, out: &str) -> Slot {
491 + fn leaving(bar: Run, says: String, out: &str) -> Run {
483 492 bar.beside(
484 493 Node::Text {
485 494 text: says,
@@ -494,7 +503,7 @@
494 503 }
495 504
496 505 /// What you are looking for.
497 - fn looking(bar: Slot, state: &Panels<'_>) -> Slot {
506 + fn looking(bar: Run, state: &Panels<'_>) -> Run {
498 507 let searching = state.bar.searching();
499 508
500 509 let mut bar = bar
@@ -569,7 +578,7 @@
569 578 /// and the last three controls are addresses this router already serves. That is
570 579 /// the toolbar's own claim: Settings, Cloud Sync and Help are screens, so
571 580 /// reaching them is navigation rather than something the host arranges.
572 - fn panels(bar: Slot, state: &Panels<'_>) -> Slot {
581 + fn panels(bar: Run, state: &Panels<'_>) -> Run {
573 582 use quasi_router::Tag;
574 583
575 584 let showing = state.bar.showing();