Skip to main content

max / quasi

0.15.0: a set that arrived in parts says where the reader is Rest was a count and one address. It is a layout::Paging and up to two now, which is the same Window a carousel instantiates: a frame is a window of one over children that are present, a page is a window over rows that were never fetched, and presence shows up as whether there are addresses rather than as a second copy of the arithmetic. What this buys is that the description can say where the reader is at all. Position never reached it before, so a renderer could not print 'Page 3' even though that half is always knowable, and every screen kept it in app state instead. goingson's mail list ships prev/next and numbered pages and described itself as load-more. Each renderer draws one control for both jobs, and draws a direction it was given no address for as disabled rather than absent, so the pager keeps its width on the first page and the last. Slot::current delegates its clamp to Window for the same reason.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-16 20:13 UTC
Signed with PGP, not checked
Commit: fe6d4b45e602224e00a20f136c08eb55e2c7bbaf
Parent: 741f90e
19 files changed, +352 insertions, -125 deletions
M Cargo.lock +19 -21
@@ -2359,9 +2359,7 @@
2359 2359
2360 2360 [[package]]
2361 2361 name = "makeover-layout"
2362 - version = "0.27.0"
2363 - source = "registry+https://github.com/rust-lang/crates.io-index"
2364 - checksum = "70c07e8b5020bf12ced1aea9313ebf0d4ca764ce2de6ef0d95eddc7d34bd939a"
2362 + version = "0.27.3"
2365 2363
2366 2364 [[package]]
2367 2365 name = "makeover-touch"
@@ -3092,11 +3090,11 @@
3092 3090
3093 3091 [[package]]
3094 3092 name = "quasi"
3095 - version = "0.14.0"
3093 + version = "0.15.0"
3096 3094
3097 3095 [[package]]
3098 3096 name = "quasi-axum"
3099 - version = "0.14.0"
3097 + version = "0.15.0"
3100 3098 dependencies = [
3101 3099 "axum",
3102 3100 "http",
@@ -3110,7 +3108,7 @@
3110 3108
3111 3109 [[package]]
3112 3110 name = "quasi-basics"
3113 - version = "0.14.0"
3111 + version = "0.15.0"
3114 3112 dependencies = [
3115 3113 "makeover-layout",
3116 3114 "quasi-http",
@@ -3120,7 +3118,7 @@
3120 3118
3121 3119 [[package]]
3122 3120 name = "quasi-bench"
3123 - version = "0.14.0"
3121 + version = "0.15.0"
3124 3122 dependencies = [
3125 3123 "dhat",
3126 3124 "makeover",
@@ -3135,7 +3133,7 @@
3135 3133
3136 3134 [[package]]
3137 3135 name = "quasi-http"
3138 - version = "0.14.0"
3136 + version = "0.15.0"
3139 3137 dependencies = [
3140 3138 "form_urlencoded",
3141 3139 "http",
@@ -3144,7 +3142,7 @@
3144 3142
3145 3143 [[package]]
3146 3144 name = "quasi-immediate"
3147 - version = "0.14.0"
3145 + version = "0.15.0"
3148 3146 dependencies = [
3149 3147 "docengine",
3150 3148 "egui",
@@ -3154,7 +3152,7 @@
3154 3152
3155 3153 [[package]]
3156 3154 name = "quasi-router"
3157 - version = "0.14.0"
3155 + version = "0.15.0"
3158 3156 dependencies = [
3159 3157 "makeover-layout",
3160 3158 ]
@@ -3171,7 +3169,7 @@
3171 3169
3172 3170 [[package]]
3173 3171 name = "quasi-tauri"
3174 - version = "0.14.0"
3172 + version = "0.15.0"
3175 3173 dependencies = [
3176 3174 "http",
3177 3175 "quasi-http",
@@ -3182,7 +3180,7 @@
3182 3180
3183 3181 [[package]]
3184 3182 name = "quasi-tui"
3185 - version = "0.14.0"
3183 + version = "0.15.0"
3186 3184 dependencies = [
3187 3185 "docengine",
3188 3186 "makeover",
@@ -3194,7 +3192,7 @@
3194 3192
3195 3193 [[package]]
3196 3194 name = "quasi-webview"
3197 - version = "0.14.0"
3195 + version = "0.15.0"
3198 3196 dependencies = [
3199 3197 "docengine",
3200 3198 "makeover-layout",
@@ -5624,6 +5622,14 @@
5624 5622 source = "registry+https://github.com/rust-lang/crates.io-index"
5625 5623 checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
5626 5624
5625 + [[patch.unused]]
5626 + name = "synckit-client"
5627 + version = "0.8.0"
5628 +
5629 + [[patch.unused]]
5630 + name = "synckit-config"
5631 + version = "0.2.0"
5632 +
5627 5633 [[patch.unused]]
5628 5634 name = "kberg"
5629 5635 version = "0.1.0"
@@ -5639,11 +5645,3 @@
5639 5645 [[patch.unused]]
5640 5646 name = "tagtree"
5641 5647 version = "0.4.0"
5642 -
5643 - [[patch.unused]]
5644 - name = "synckit-client"
5645 - version = "0.8.0"
5646 -
5647 - [[patch.unused]]
5648 - name = "synckit-config"
5649 - version = "0.2.0"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.14.0"
3 + version = "0.15.0"
4 4 description = "The axum host adapter for quasi-router: an HTTP request in, a rendered description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,14 +13,14 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.14.0" }
17 - quasi-http = { path = "../quasi-http", version = "0.14.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.15.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.15.0" }
18 18 axum = "0.8.8"
19 19 http = "1.3.1"
20 20 tokio = { version = "1.50.0", features = ["rt"] }
21 21
22 22 [dev-dependencies]
23 - quasi-webview = { path = "../quasi-webview", version = "0.14.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.15.0" }
24 24 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread"] }
25 25 tower = { version = "0.5.3", features = ["util"] }
26 26 http-body-util = "0.1.3"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-basics"
3 - version = "0.14.0"
3 + version = "0.15.0"
4 4 description = "The first-party widget set: named assemblies of primitives, shared across our apps"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,12 +13,12 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.14.0" }
17 - makeover-layout = "0.27.0"
16 + quasi-router = { path = "../quasi-router", version = "0.15.0" }
17 + makeover-layout = "0.27.3"
18 18
19 19 [dev-dependencies]
20 20 # A widget's guarantees are claims about what a renderer draws, so they are
21 21 # tested against a real one rather than by walking the tree the assembly just
22 22 # built. The webview is the renderer that recognises names today.
23 - quasi-webview = { path = "../quasi-webview", version = "0.14.0" }
24 - quasi-http = { path = "../quasi-http", version = "0.14.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.15.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.15.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.14.0"
3 + version = "0.15.0"
4 4 description = "What a described screen costs to render, in time and in allocations"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -22,14 +22,14 @@
22 22 count = ["dep:dhat"]
23 23
24 24 [dependencies]
25 - quasi-router = { path = "../quasi-router", version = "0.14.0" }
26 - quasi-webview = { path = "../quasi-webview", version = "0.14.0" }
27 - quasi-tui = { path = "../quasi-tui", version = "0.14.0" }
25 + quasi-router = { path = "../quasi-router", version = "0.15.0" }
26 + quasi-webview = { path = "../quasi-webview", version = "0.15.0" }
27 + quasi-tui = { path = "../quasi-tui", version = "0.15.0" }
28 28 # `Serves` is the trait carrying `screen` and `fragment`, which is what the
29 29 # webview is measured through. Taken directly rather than through quasi-webview
30 30 # because a bench calling a trait method should name the trait it calls.
31 - quasi-http = { path = "../quasi-http", version = "0.14.0" }
32 - makeover-layout = "0.27.0"
31 + quasi-http = { path = "../quasi-http", version = "0.15.0" }
32 + makeover-layout = "0.27.3"
33 33 makeover-tui = { version = "0.25.0", features = ["theme"] }
34 34 # Only to load a bundled theme file. `makeover_tui::Theme` is `#[non_exhaustive]`,
35 35 # so `Theme::from_theme` is the one way to get one, the same reason quasi-tui's
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.14.0"
3 + version = "0.15.0"
4 4 description = "The http-shaped seam quasi's webview host adapters share: decoding in, a rendered description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,6 +13,6 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.14.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.15.0" }
17 17 http = "1.3.1"
18 18 form_urlencoded = "1.2.2"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-immediate"
3 - version = "0.14.0"
3 + version = "0.15.0"
4 4 edition = "2024"
5 5 description = "The immediate-mode renderer for quasi-router: a described screen in, an egui frame out. Immediate mode is the constraint that matters, not the library."
6 6 license = "MIT"
@@ -12,7 +12,7 @@
12 12 categories = ["gui"]
13 13
14 14 [dependencies]
15 - quasi-router = { path = "../quasi-router", version = "0.14.0" }
15 + quasi-router = { path = "../quasi-router", version = "0.15.0" }
16 16 # The node drawing, which is the makeover layer's and not this crate's. Every
17 17 # widget here that is not a container comes from it: a screen walk that painted
18 18 # its own meter would be the divergence the suite exists to end, one copy per
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-router"
3 - version = "0.14.0"
3 + version = "0.15.0"
4 4 description = "Host-agnostic router: a request in, a renderer-agnostic description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,4 +13,4 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - makeover-layout = "0.27.0"
16 + makeover-layout = "0.27.3"