0.49.0: an interval, through the whole stack
`Field::upper_name` and `Field::upper_value` mirror makeover-layout 0.34.0's
`FieldKind::Interval`, and the three renderers draw the pair.
The mirroring is what the cascade is for. `quasi_router::Field` declares itself
independently of `makeover_layout::Field`, so a member that stopped at one of
them would be silently absent everywhere downstream; `with_layout` is where the
two meet and where a missing member shows up as nothing drawn.
`upper_value` is the half a `pairs_with` member would not have paid for. A
refusal has two values to hand back, and without a second one it returns the
low end and drops the high one, so the user retypes half of an answer they
already gave. `refilled` reads both names, and an absent end stays absent: "over
120 BPM" is an answer rather than a half-filled form.
Renderer side, each host draws what it has. quasi-webview fills
`Value::Between`, quasi-tui `Held::Between` off the view's two buffers,
quasi-immediate `Filling::Between` off two of its own. The last of those also
fires `changes` from either end with both ends in the payload: a handler reading
only the box that moved would narrow the filter to a single bound every time
either one was touched.
`checkbox_node` and `upper_moved` are `field_node` split where the shapes
genuinely differ, which is what kept it under the line-count lint.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
16 files changed,
+346 insertions,
-69 deletions
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-axum"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.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 |
13 |
|
workspace = true
|
| 14 |
14 |
|
|
| 15 |
15 |
|
[dependencies]
|
| 16 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.48.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.48.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.49.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.49.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.48.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.49.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 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-basics"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.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 |
13 |
|
workspace = true
|
| 14 |
14 |
|
|
| 15 |
15 |
|
[dependencies]
|
| 16 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.48.0" }
|
| 17 |
|
- |
makeover-layout = "0.33.0"
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.49.0" }
|
|
17 |
+ |
makeover-layout = "0.34.0"
|
| 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.48.0" }
|
| 24 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.48.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.49.0" }
|
|
24 |
+ |
quasi-http = { path = "../quasi-http", version = "0.49.0" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-bench"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.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 |
22 |
|
count = ["dep:dhat"]
|
| 23 |
23 |
|
|
| 24 |
24 |
|
[dependencies]
|
| 25 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.48.0" }
|
| 26 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.48.0" }
|
| 27 |
|
- |
quasi-tui = { path = "../quasi-tui", version = "0.48.0" }
|
|
25 |
+ |
quasi-router = { path = "../quasi-router", version = "0.49.0" }
|
|
26 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.49.0" }
|
|
27 |
+ |
quasi-tui = { path = "../quasi-tui", version = "0.49.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.48.0" }
|
| 32 |
|
- |
makeover-layout = "0.33.0"
|
| 33 |
|
- |
makeover-tui = { version = "0.32.0", features = ["theme"] }
|
|
31 |
+ |
quasi-http = { path = "../quasi-http", version = "0.49.0" }
|
|
32 |
+ |
makeover-layout = "0.34.0"
|
|
33 |
+ |
makeover-tui = { version = "0.33.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
|
| 36 |
36 |
|
# tests take this.
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-http"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.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 |
13 |
|
workspace = true
|
| 14 |
14 |
|
|
| 15 |
15 |
|
[dependencies]
|
| 16 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.48.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.49.0" }
|
| 17 |
17 |
|
http = "1.3.1"
|
| 18 |
18 |
|
form_urlencoded = "1.2.2"
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-immediate"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.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 |
12 |
|
categories = ["gui"]
|
| 13 |
13 |
|
|
| 14 |
14 |
|
[dependencies]
|
| 15 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.48.0" }
|
|
15 |
+ |
quasi-router = { path = "../quasi-router", version = "0.49.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
|
| 19 |
19 |
|
# renderer instead of one copy per app.
|
| 20 |
|
- |
makeover-immediate = "0.32.0"
|
|
20 |
+ |
makeover-immediate = "0.33.0"
|
| 21 |
21 |
|
egui = { version = "0.35", default-features = false }
|
| 22 |
22 |
|
# Markdown to text for `Node::Rich`. The same crate the webview renderer takes,
|
| 23 |
23 |
|
# reading the same source: what differs is that it can emit markup and this
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-notifs"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.0"
|
| 4 |
4 |
|
description = "Declared notification kinds and the registry that holds them: what a notification says and what it is for, apart from how it reaches a person"
|
| 5 |
5 |
|
edition.workspace = true
|
| 6 |
6 |
|
rust-version.workspace = true
|
| 24 |
24 |
|
describe = ["dep:quasi-router"]
|
| 25 |
25 |
|
|
| 26 |
26 |
|
[dependencies]
|
| 27 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.48.0", optional = true }
|
|
27 |
+ |
quasi-router = { path = "../quasi-router", version = "0.49.0", optional = true }
|
| 28 |
28 |
|
synckit-config = { git = "https://makenot.work/git/max/synckit.git", version = "0.2", optional = true }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-router"
|
| 3 |
|
- |
version = "0.48.0"
|
|
3 |
+ |
version = "0.49.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 |
13 |
|
workspace = true
|
| 14 |
14 |
|
|
| 15 |
15 |
|
[dependencies]
|
| 16 |
|
- |
makeover-layout = "0.33.0"
|
|
16 |
+ |
makeover-layout = "0.34.0"
|