max / audiofiles
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
- Claude-Session
- https://claude.ai/code/session_01P8ostB2UmZJGj5WjSHRSot
5 files changed,
+92 insertions,
-49 deletions
| @@ -4257,16 +4257,17 @@ | |||
| 4257 | 4257 | ||
| 4258 | 4258 | [[package]] | |
| 4259 | 4259 | name = "quasi-declare" | |
| 4260 | - | version = "0.1.7" | |
| 4260 | + | version = "0.1.10" | |
| 4261 | 4261 | dependencies = [ | |
| 4262 | 4262 | "proc-macro2", | |
| 4263 | 4263 | "quote", | |
| 4264 | 4264 | "syn 2.0.119", | |
| 4265 | + | "toml 1.1.4+spec-1.1.0", | |
| 4265 | 4266 | ] | |
| 4266 | 4267 | ||
| 4267 | 4268 | [[package]] | |
| 4268 | 4269 | name = "quasi-immediate" | |
| 4269 | - | version = "0.101.1" | |
| 4270 | + | version = "0.102.0" | |
| 4270 | 4271 | dependencies = [ | |
| 4271 | 4272 | "docengine", | |
| 4272 | 4273 | "egui", | |
| @@ -4277,7 +4278,7 @@ | |||
| 4277 | 4278 | ||
| 4278 | 4279 | [[package]] | |
| 4279 | 4280 | name = "quasi-router" | |
| 4280 | - | version = "0.101.14" | |
| 4281 | + | version = "0.102.0" | |
| 4281 | 4282 | dependencies = [ | |
| 4282 | 4283 | "makeover-layout", | |
| 4283 | 4284 | ] | |
| @@ -7566,6 +7567,38 @@ | |||
| 7566 | 7567 | "winnow 1.0.4", | |
| 7567 | 7568 | ] | |
| 7568 | 7569 | ||
| 7570 | + | [[patch.unused]] | |
| 7571 | + | name = "quasi-axum" | |
| 7572 | + | version = "0.102.0" | |
| 7573 | + | ||
| 7574 | + | [[patch.unused]] | |
| 7575 | + | name = "quasi-basics" | |
| 7576 | + | version = "0.102.0" | |
| 7577 | + | ||
| 7578 | + | [[patch.unused]] | |
| 7579 | + | name = "quasi-http" | |
| 7580 | + | version = "0.102.0" | |
| 7581 | + | ||
| 7582 | + | [[patch.unused]] | |
| 7583 | + | name = "quasi-notifs" | |
| 7584 | + | version = "0.102.0" | |
| 7585 | + | ||
| 7586 | + | [[patch.unused]] | |
| 7587 | + | name = "quasi-store" | |
| 7588 | + | version = "0.1.0" | |
| 7589 | + | ||
| 7590 | + | [[patch.unused]] | |
| 7591 | + | name = "quasi-tauri" | |
| 7592 | + | version = "0.102.0" | |
| 7593 | + | ||
| 7594 | + | [[patch.unused]] | |
| 7595 | + | name = "quasi-webview" | |
| 7596 | + | version = "0.102.0" | |
| 7597 | + | ||
| 7598 | + | [[patch.unused]] | |
| 7599 | + | name = "quasi-type" | |
| 7600 | + | version = "0.1.3" | |
| 7601 | + | ||
| 7569 | 7602 | [[patch.unused]] | |
| 7570 | 7603 | name = "kberg" | |
| 7571 | 7604 | version = "0.1.0" | |
| @@ -7579,33 +7612,9 @@ | |||
| 7579 | 7612 | version = "0.1.0" | |
| 7580 | 7613 | ||
| 7581 | 7614 | [[patch.unused]] | |
| 7582 | - | name = "quasi-axum" | |
| 7583 | - | version = "0.101.1" | |
| 7615 | + | name = "makeover-build" | |
| 7616 | + | version = "0.67.0" | |
| 7584 | 7617 | ||
| 7585 | 7618 | [[patch.unused]] | |
| 7586 | - | name = "quasi-basics" | |
| 7587 | - | version = "0.101.1" | |
| 7588 | - | ||
| 7589 | - | [[patch.unused]] | |
| 7590 | - | name = "quasi-http" | |
| 7591 | - | version = "0.101.1" | |
| 7592 | - | ||
| 7593 | - | [[patch.unused]] | |
| 7594 | - | name = "quasi-notifs" | |
| 7595 | - | version = "0.101.2" | |
| 7596 | - | ||
| 7597 | - | [[patch.unused]] | |
| 7598 | - | name = "quasi-store" | |
| 7599 | - | version = "0.1.0" | |
| 7600 | - | ||
| 7601 | - | [[patch.unused]] | |
| 7602 | - | name = "quasi-tauri" | |
| 7603 | - | version = "0.101.1" | |
| 7604 | - | ||
| 7605 | - | [[patch.unused]] | |
| 7606 | - | name = "quasi-webview" | |
| 7607 | - | version = "0.101.1" | |
| 7608 | - | ||
| 7609 | - | [[patch.unused]] | |
| 7610 | - | name = "quasi-type" | |
| 7611 | - | version = "0.1.3" | |
| 7619 | + | name = "makeover-webview" | |
| 7620 | + | version = "0.74.0" |
| @@ -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.101" } | |
| 30 | - | quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.101" } | |
| 29 | + | quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.102" } | |
| 30 | + | quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.102" } | |
| 31 | 31 | quasi-declare = { git = "https://makenot.work/git/max/quasi.git", version = "0.1" } | |
| 32 | 32 | egui = { version = "0.35", default-features = false, features = ["default_fonts"] } | |
| 33 | 33 | egui_extras = { version = "0.35", default-features = false } |
| @@ -1824,14 +1824,18 @@ | |||
| 1824 | 1824 | declare! { | |
| 1825 | 1825 | /// Reading what the analysis suggested. | |
| 1826 | 1826 | /// | |
| 1827 | - | /// The one stage with two panes, and the region says so: [`RegionKind::Split`] | |
| 1828 | - | /// is "two panes side by side, the left choosing what the right shows", which | |
| 1829 | - | /// is what the shipped side panel and central pane are. The screen's own | |
| 1830 | - | /// arrangement stays `sidebar_content` like every other stage -- the split is | |
| 1831 | - | /// inside this flow's one region rather than a different shape of screen, | |
| 1832 | - | /// because the flow is one address and the arrangement is the window's. | |
| 1827 | + | /// The one stage with two panes, and the row says so: the listing takes what | |
| 1828 | + | /// it needs and the reading absorbs the rest, which is what the shipped side | |
| 1829 | + | /// panel and central pane are. The screen's own arrangement stays | |
| 1830 | + | /// `sidebar_content` like every other stage -- the split is inside this | |
| 1831 | + | /// flow's one region rather than a different shape of screen, because the | |
| 1832 | + | /// flow is one address and the arrangement is the window's. | |
| 1833 | 1833 | /// | |
| 1834 | - | /// [`RegionKind::Split`]: quasi_router::RegionKind::Split | |
| 1834 | + | /// `RegionKind::Split` said this until it was retired (quasicoherent | |
| 1835 | + | /// `cf981aaa`). Content beside a fill says the same division and `Stack` | |
| 1836 | + | /// says what happens when there is not room for both, which the variant | |
| 1837 | + | /// could not: the reading takes its own line rather than being squeezed | |
| 1838 | + | /// beside a listing it no longer fits next to. | |
| 1835 | 1839 | shape reviewing(review: &Reviewing) -> Vec<Node>; | |
| 1836 | 1840 | ||
| 1837 | 1841 | region "review-head" as Group { | |
| @@ -1842,9 +1846,11 @@ | |||
| 1842 | 1846 | stats review.figures.clone() unless review.figures.is_empty(); | |
| 1843 | 1847 | } | |
| 1844 | 1848 | ||
| 1845 | - | region "review-split" as Split { | |
| 1846 | - | include listing(&review.listing); | |
| 1847 | - | include reading(&review.reading); | |
| 1849 | + | region "review-split" as Group { | |
| 1850 | + | across Stack { | |
| 1851 | + | beside Essential include listing(&review.listing); | |
| 1852 | + | beside Essential Fill include reading(&review.reading); | |
| 1853 | + | } | |
| 1848 | 1854 | } | |
| 1849 | 1855 | ||
| 1850 | 1856 | text "Accept at least one suggestion, or use Cancel to discard." unless review.any; |
| @@ -441,9 +441,11 @@ | |||
| 441 | 441 | ||
| 442 | 442 | screen sidebar_content "Review Tags" { | |
| 443 | 443 | include head(review); | |
| 444 | - | region "review-split" as Split { | |
| 445 | - | include tags(review); | |
| 446 | - | include group(review); | |
| 444 | + | region "review-split" as Group { | |
| 445 | + | across Stack { | |
| 446 | + | beside Essential include tags(review); | |
| 447 | + | beside Essential Fill include group(review); | |
| 448 | + | } | |
| 447 | 449 | } | |
| 448 | 450 | include foot(review); | |
| 449 | 451 | } |
| @@ -7696,14 +7696,27 @@ | |||
| 7696 | 7696 | for placed in body { | |
| 7697 | 7697 | into.push(placed.node.clone()); | |
| 7698 | 7698 | if let Node::Region(slot) = &placed.node { | |
| 7699 | - | walk(&slot.body, into); | |
| 7699 | + | inside(slot, into); | |
| 7700 | 7700 | } | |
| 7701 | 7701 | } | |
| 7702 | 7702 | } | |
| 7703 | 7703 | ||
| 7704 | + | /// A region's row and then its body, which is the order they are drawn in. | |
| 7705 | + | /// | |
| 7706 | + | /// The row was missed until the two review panes moved into one | |
| 7707 | + | /// (quasicoherent `cf981aaa`), and it was a blind spot before that: a | |
| 7708 | + | /// band's members share a row, so every test asking what a screen says was | |
| 7709 | + | /// answering about the body alone. | |
| 7710 | + | fn inside(slot: &quasi_router::Slot, into: &mut Vec<Node>) { | |
| 7711 | + | if let Some(run) = slot.run.as_ref() { | |
| 7712 | + | walk(&run.members, into); | |
| 7713 | + | } | |
| 7714 | + | walk(&slot.body, into); | |
| 7715 | + | } | |
| 7716 | + | ||
| 7704 | 7717 | let mut found = Vec::new(); | |
| 7705 | 7718 | for slot in &screen.slots { | |
| 7706 | - | walk(&slot.body, &mut found); | |
| 7719 | + | inside(slot, &mut found); | |
| 7707 | 7720 | } | |
| 7708 | 7721 | found | |
| 7709 | 7722 | } | |
| @@ -9816,7 +9829,20 @@ | |||
| 9816 | 9829 | .iter() | |
| 9817 | 9830 | .find(|slot| slot.id == "review-split") | |
| 9818 | 9831 | .expect("the screen is a split"); | |
| 9819 | - | assert_eq!(tags.kind, quasi_router::RegionKind::Split); | |
| 9832 | + | // A row of two, the second absorbing what the first did not take. That was | |
| 9833 | + | // `RegionKind::Split` until the variant was retired (quasicoherent | |
| 9834 | + | // `cf981aaa`); what says it now is the width on the row's members. | |
| 9835 | + | let run = tags.run.as_ref().expect("the two panes share a row"); | |
| 9836 | + | assert_eq!( | |
| 9837 | + | run.members | |
| 9838 | + | .iter() | |
| 9839 | + | .map(|placed| placed.width) | |
| 9840 | + | .collect::<Vec<_>>(), | |
| 9841 | + | vec![ | |
| 9842 | + | quasi_router::layout::Width::Content, | |
| 9843 | + | quasi_router::layout::Width::Fill | |
| 9844 | + | ], | |
| 9845 | + | ); | |
| 9820 | 9846 | ||
| 9821 | 9847 | let rows = deep_rows(&screen); | |
| 9822 | 9848 | let open = rows |