Skip to main content

max / quasi

A part says how many lines it may take, and the webview honours it Part gains a flow, and Row::relaxed sets it on the part just added. On the part rather than on the row because BB clamps a feed row's title while its excerpt wraps freely underneath, so a row-wide setting would have been wrong at the one site that asked for it. quasi-webview groups on role and flow together. The span is what carries the clamp, so two parts sharing a role and disagreeing about how many lines they may take cannot share one. quasi-tui and quasi-immediate read the field and do nothing with it, each with a comment saying so rather than dropping it silently. The reason is the opposite of what it looks like: the terminal already gives a row as many lines as the text needs, so honouring Flow there is a cap rather than a grant, and a cap changes the height of every existing row. That is a decision and it is filed as 7bfb554a. 0.21.0: Part is a public struct and gained a field.
Author: Max Johnson <me@maxj.phd> · 2026-08-17 23:45 UTC
Signed with PGP, not checked
Commit: f958c034c9e98bc43da2e7d4d331fd6a9a606fd9
Parent: 44bf892
16 files changed, +190 insertions, -59 deletions
M Cargo.lock +12 -16
@@ -2367,9 +2367,7 @@
2367 2367
2368 2368 [[package]]
2369 2369 name = "makeover-layout"
2370 - version = "0.28.0"
2371 - source = "registry+https://github.com/rust-lang/crates.io-index"
2372 - checksum = "4621aad492adac3b258a3a2822b5e4661b0ed3884ca565c29c933f32f5acc050"
2370 + version = "0.28.1"
2373 2371
2374 2372 [[package]]
2375 2373 name = "makeover-touch"
@@ -2394,9 +2392,7 @@
2394 2392
2395 2393 [[package]]
2396 2394 name = "makeover-webview"
2397 - version = "0.47.0"
2398 - source = "registry+https://github.com/rust-lang/crates.io-index"
2399 - checksum = "1b53e075387c3d151b065e073064aebb5ad299d5a7cd133e30d59257f25ae773"
2395 + version = "0.48.0"
2400 2396 dependencies = [
2401 2397 "makeover-geometry",
2402 2398 "makeover-layout",
@@ -3100,11 +3096,11 @@
3100 3096
3101 3097 [[package]]
3102 3098 name = "quasi"
3103 - version = "0.20.1"
3099 + version = "0.21.0"
3104 3100
3105 3101 [[package]]
3106 3102 name = "quasi-axum"
3107 - version = "0.20.1"
3103 + version = "0.21.0"
3108 3104 dependencies = [
3109 3105 "axum",
3110 3106 "http",
@@ -3118,7 +3114,7 @@
3118 3114
3119 3115 [[package]]
3120 3116 name = "quasi-basics"
3121 - version = "0.20.1"
3117 + version = "0.21.0"
3122 3118 dependencies = [
3123 3119 "makeover-layout",
3124 3120 "quasi-http",
@@ -3128,7 +3124,7 @@
3128 3124
3129 3125 [[package]]
3130 3126 name = "quasi-bench"
3131 - version = "0.20.1"
3127 + version = "0.21.0"
3132 3128 dependencies = [
3133 3129 "dhat",
3134 3130 "makeover",
@@ -3143,7 +3139,7 @@
3143 3139
3144 3140 [[package]]
3145 3141 name = "quasi-http"
3146 - version = "0.20.1"
3142 + version = "0.21.0"
3147 3143 dependencies = [
3148 3144 "form_urlencoded",
3149 3145 "http",
@@ -3152,7 +3148,7 @@
3152 3148
3153 3149 [[package]]
3154 3150 name = "quasi-immediate"
3155 - version = "0.20.1"
3151 + version = "0.21.0"
3156 3152 dependencies = [
3157 3153 "docengine",
3158 3154 "egui",
@@ -3162,7 +3158,7 @@
3162 3158
3163 3159 [[package]]
3164 3160 name = "quasi-router"
3165 - version = "0.20.1"
3161 + version = "0.21.0"
3166 3162 dependencies = [
3167 3163 "makeover-layout",
3168 3164 ]
@@ -3179,7 +3175,7 @@
3179 3175
3180 3176 [[package]]
3181 3177 name = "quasi-tauri"
3182 - version = "0.20.1"
3178 + version = "0.21.0"
3183 3179 dependencies = [
3184 3180 "http",
3185 3181 "quasi-http",
@@ -3190,7 +3186,7 @@
3190 3186
3191 3187 [[package]]
3192 3188 name = "quasi-tui"
3193 - version = "0.20.1"
3189 + version = "0.21.0"
3194 3190 dependencies = [
3195 3191 "docengine",
3196 3192 "makeover",
@@ -3202,7 +3198,7 @@
3202 3198
3203 3199 [[package]]
3204 3200 name = "quasi-webview"
3205 - version = "0.20.1"
3201 + version = "0.21.0"
3206 3202 dependencies = [
3207 3203 "docengine",
3208 3204 "makeover-layout",
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.20.1"
3 + version = "0.21.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.20.1" }
17 - quasi-http = { path = "../quasi-http", version = "0.20.1" }
16 + quasi-router = { path = "../quasi-router", version = "0.21.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.21.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.20.1" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.21.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.20.1"
3 + version = "0.21.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.20.1" }
17 - makeover-layout = "0.28.0"
16 + quasi-router = { path = "../quasi-router", version = "0.21.0" }
17 + makeover-layout = "0.28.1"
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.20.1" }
24 - quasi-http = { path = "../quasi-http", version = "0.20.1" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.21.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.21.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.20.1"
3 + version = "0.21.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.20.1" }
26 - quasi-webview = { path = "../quasi-webview", version = "0.20.1" }
27 - quasi-tui = { path = "../quasi-tui", version = "0.20.1" }
25 + quasi-router = { path = "../quasi-router", version = "0.21.0" }
26 + quasi-webview = { path = "../quasi-webview", version = "0.21.0" }
27 + quasi-tui = { path = "../quasi-tui", version = "0.21.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.20.1" }
32 - makeover-layout = "0.28.0"
31 + quasi-http = { path = "../quasi-http", version = "0.21.0" }
32 + makeover-layout = "0.28.1"
33 33 makeover-tui = { version = "0.27.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.20.1"
3 + version = "0.21.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.20.1" }
16 + quasi-router = { path = "../quasi-router", version = "0.21.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.20.1"
3 + version = "0.21.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.20.1" }
15 + quasi-router = { path = "../quasi-router", version = "0.21.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.20.1"
3 + version = "0.21.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.28.0"
16 + makeover-layout = "0.28.1"