Skip to main content

max / quasi

0.17.0: a field says how much of its row it asked for Settled by Max 2026-08-16 against quasicoherent problem 6d6a9160: fill is determined at the description stage. Column::width has carried this fact about a table cell since the beginning and Share carries it about a region, so a leaf control having no way to say it was an inconsistency in where the line sat rather than a principle being upheld. What found it was audiofiles' toolbar, which kept a measured trailing_width in renderer memory, corrected it a frame late, and needed two constants to survive the first frame -- twenty lines to say Fill. It is an intent and not a measurement, the same division Column makes: the actual floor stays with makeover-geometry. A field carrying pixels would be the thing this replaces. The default is Fill, matching Column::new and matching what every renderer did before the member existed, so a description written yesterday draws the same way today. Content would have read tidier and would have silently narrowed every field in every app on the day it landed, which is the one thing an additive member must not do. quasi-immediate honours it. Fill is egui's own behaviour so it does nothing; Content and Fixed need a number the description does not carry, so the renderer guesses, which is where quasi-tui's table sizing already leaves the same question -- a fallback "until the vocabulary carries a measure". A guess rather than nothing, because Content and Fill drawing identically would make the member unfalsifiable here. quasi-webview says it as data-width on the field's wrapper, for data-tone's reason: a fact the description carried is not a styling hook this renderer invented. quasi-tui does not honour it yet, for the reason its table sizing does not: a terminal wants a measure.
Author: Max Johnson <me@maxj.phd> · 2026-08-16 21:21 UTC
Signed with PGP, not checked
Commit: 3626a3bf95967515ecf0105a236221cb8a5f9308
Parent: 9bf7d8f
16 files changed, +202 insertions, -48 deletions
M Cargo.lock +10 -10
@@ -3092,11 +3092,11 @@
3092 3092
3093 3093 [[package]]
3094 3094 name = "quasi"
3095 - version = "0.16.0"
3095 + version = "0.17.0"
3096 3096
3097 3097 [[package]]
3098 3098 name = "quasi-axum"
3099 - version = "0.16.0"
3099 + version = "0.17.0"
3100 3100 dependencies = [
3101 3101 "axum",
3102 3102 "http",
@@ -3110,7 +3110,7 @@
3110 3110
3111 3111 [[package]]
3112 3112 name = "quasi-basics"
3113 - version = "0.16.0"
3113 + version = "0.17.0"
3114 3114 dependencies = [
3115 3115 "makeover-layout",
3116 3116 "quasi-http",
@@ -3120,7 +3120,7 @@
3120 3120
3121 3121 [[package]]
3122 3122 name = "quasi-bench"
3123 - version = "0.16.0"
3123 + version = "0.17.0"
3124 3124 dependencies = [
3125 3125 "dhat",
3126 3126 "makeover",
@@ -3135,7 +3135,7 @@
3135 3135
3136 3136 [[package]]
3137 3137 name = "quasi-http"
3138 - version = "0.16.0"
3138 + version = "0.17.0"
3139 3139 dependencies = [
3140 3140 "form_urlencoded",
3141 3141 "http",
@@ -3144,7 +3144,7 @@
3144 3144
3145 3145 [[package]]
3146 3146 name = "quasi-immediate"
3147 - version = "0.16.0"
3147 + version = "0.17.0"
3148 3148 dependencies = [
3149 3149 "docengine",
3150 3150 "egui",
@@ -3154,7 +3154,7 @@
3154 3154
3155 3155 [[package]]
3156 3156 name = "quasi-router"
3157 - version = "0.16.0"
3157 + version = "0.17.0"
3158 3158 dependencies = [
3159 3159 "makeover-layout",
3160 3160 ]
@@ -3171,7 +3171,7 @@
3171 3171
3172 3172 [[package]]
3173 3173 name = "quasi-tauri"
3174 - version = "0.16.0"
3174 + version = "0.17.0"
3175 3175 dependencies = [
3176 3176 "http",
3177 3177 "quasi-http",
@@ -3182,7 +3182,7 @@
3182 3182
3183 3183 [[package]]
3184 3184 name = "quasi-tui"
3185 - version = "0.16.0"
3185 + version = "0.17.0"
3186 3186 dependencies = [
3187 3187 "docengine",
3188 3188 "makeover",
@@ -3194,7 +3194,7 @@
3194 3194
3195 3195 [[package]]
3196 3196 name = "quasi-webview"
3197 - version = "0.16.0"
3197 + version = "0.17.0"
3198 3198 dependencies = [
3199 3199 "docengine",
3200 3200 "makeover-layout",
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.16.0"
3 + version = "0.17.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.16.0" }
17 - quasi-http = { path = "../quasi-http", version = "0.16.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.17.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.17.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.16.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.17.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.16.0"
3 + version = "0.17.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.16.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.17.0" }
17 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.16.0" }
24 - quasi-http = { path = "../quasi-http", version = "0.16.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.17.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.17.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.16.0"
3 + version = "0.17.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,13 +22,13 @@
22 22 count = ["dep:dhat"]
23 23
24 24 [dependencies]
25 - quasi-router = { path = "../quasi-router", version = "0.16.0" }
26 - quasi-webview = { path = "../quasi-webview", version = "0.16.0" }
27 - quasi-tui = { path = "../quasi-tui", version = "0.16.0" }
25 + quasi-router = { path = "../quasi-router", version = "0.17.0" }
26 + quasi-webview = { path = "../quasi-webview", version = "0.17.0" }
27 + quasi-tui = { path = "../quasi-tui", version = "0.17.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.16.0" }
31 + quasi-http = { path = "../quasi-http", version = "0.17.0" }
32 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]`,
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.16.0"
3 + version = "0.17.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.16.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.17.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.16.0"
3 + version = "0.17.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.16.0" }
15 + quasi-router = { path = "../quasi-router", version = "0.17.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.16.0"
3 + version = "0.17.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