Add Slot::revealed_by: a region says which control and which value reveal it
`079a011e`, ruled 2026-08-25 (wiki `quasi-vocabulary-findings`, "A region says
what reveals it"): the condition lives on the region. A region names the control
it watches and the value that brings it out, and every renderer evaluates that
from what it already holds, with no request in it.
The host with no cursor decided the shape. On a terminal a hidden region is not
hidden the way a browser hides one, and the honest reading is "this region is not
applicable right now", which is a property of the region. On the control, a
terminal asking whether a section applies would have to search outward across
every control on the screen. Rejected with it: a back-pointer at both ends, which
costs two members to keep in agreement and a rule for when they disagree.
`Reveal` carries the control name and a `Held`: anything, nothing, one value, or
one of several. Empty is nothing on every host, so an unticked box and a cleared
box are one answer, and `Reveal::satisfied_by` is the one place that says so.
`Screen::holds` is the described half, walking the node tree exhaustively rather
than over a wildcard so a container member that grows a body cannot quietly hide
fields from every conditional region on the screen.
quasi-webview emits `data-reveal`, `data-reveal-when` and `data-reveal-values` on
the region and ships `reveal.js` to read them. A script rather than a hyperscript
program for `fill.js`'s reason: the watched values are app text, and no emitted
program is built out of that. No verb, no trigger, no target, because a reveal is
not a request. A page served without the script shows every conditional region,
which is the direction the rest of this renderer degrades in.
The two client renderers leave the region out and say so together: `reveal.rs` in
each answers once per drawing, and the terminal's focus walk reads that same list
so the caret and the picture cannot disagree about how many stops a screen has.
What was typed into a section the reader has since closed stays in the view and
is still submitted, exactly as a browser sends the value of a hidden input.
The eight measured sites are covered by a test that names each one: MNW's six
`window.<name>` toggles, goingson's zone picker and its recurrence detail.
Breaking, so 0.59.0, with the consumer pins moved in the same pass.
40 files changed,
+1533 insertions,
-131 deletions
| 3414 |
3414 |
|
|
| 3415 |
3415 |
|
[[package]]
|
| 3416 |
3416 |
|
name = "quasi"
|
| 3417 |
|
- |
version = "0.58.0"
|
|
3417 |
+ |
version = "0.59.0"
|
| 3418 |
3418 |
|
|
| 3419 |
3419 |
|
[[package]]
|
| 3420 |
3420 |
|
name = "quasi-axum"
|
| 3421 |
|
- |
version = "0.58.0"
|
|
3421 |
+ |
version = "0.59.0"
|
| 3422 |
3422 |
|
dependencies = [
|
| 3423 |
3423 |
|
"axum",
|
| 3424 |
3424 |
|
"http",
|
| 3432 |
3432 |
|
|
| 3433 |
3433 |
|
[[package]]
|
| 3434 |
3434 |
|
name = "quasi-basics"
|
| 3435 |
|
- |
version = "0.58.0"
|
|
3435 |
+ |
version = "0.59.0"
|
| 3436 |
3436 |
|
dependencies = [
|
| 3437 |
3437 |
|
"makeover-layout",
|
| 3438 |
3438 |
|
"quasi-http",
|
| 3442 |
3442 |
|
|
| 3443 |
3443 |
|
[[package]]
|
| 3444 |
3444 |
|
name = "quasi-bench"
|
| 3445 |
|
- |
version = "0.58.0"
|
|
3445 |
+ |
version = "0.59.0"
|
| 3446 |
3446 |
|
dependencies = [
|
| 3447 |
3447 |
|
"dhat",
|
| 3448 |
3448 |
|
"makeover",
|
| 3457 |
3457 |
|
|
| 3458 |
3458 |
|
[[package]]
|
| 3459 |
3459 |
|
name = "quasi-http"
|
| 3460 |
|
- |
version = "0.58.0"
|
|
3460 |
+ |
version = "0.59.0"
|
| 3461 |
3461 |
|
dependencies = [
|
| 3462 |
3462 |
|
"form_urlencoded",
|
| 3463 |
3463 |
|
"http",
|
| 3466 |
3466 |
|
|
| 3467 |
3467 |
|
[[package]]
|
| 3468 |
3468 |
|
name = "quasi-immediate"
|
| 3469 |
|
- |
version = "0.58.0"
|
|
3469 |
+ |
version = "0.59.0"
|
| 3470 |
3470 |
|
dependencies = [
|
| 3471 |
3471 |
|
"docengine",
|
| 3472 |
3472 |
|
"egui",
|
| 3476 |
3476 |
|
|
| 3477 |
3477 |
|
[[package]]
|
| 3478 |
3478 |
|
name = "quasi-notifs"
|
| 3479 |
|
- |
version = "0.58.0"
|
|
3479 |
+ |
version = "0.59.0"
|
| 3480 |
3480 |
|
dependencies = [
|
| 3481 |
3481 |
|
"quasi-router",
|
| 3482 |
3482 |
|
"synckit-config",
|
| 3484 |
3484 |
|
|
| 3485 |
3485 |
|
[[package]]
|
| 3486 |
3486 |
|
name = "quasi-router"
|
| 3487 |
|
- |
version = "0.58.0"
|
|
3487 |
+ |
version = "0.59.0"
|
| 3488 |
3488 |
|
dependencies = [
|
| 3489 |
3489 |
|
"makeover-layout",
|
| 3490 |
3490 |
|
]
|
| 3501 |
3501 |
|
|
| 3502 |
3502 |
|
[[package]]
|
| 3503 |
3503 |
|
name = "quasi-tauri"
|
| 3504 |
|
- |
version = "0.58.0"
|
|
3504 |
+ |
version = "0.59.0"
|
| 3505 |
3505 |
|
dependencies = [
|
| 3506 |
3506 |
|
"http",
|
| 3507 |
3507 |
|
"quasi-http",
|
| 3514 |
3514 |
|
|
| 3515 |
3515 |
|
[[package]]
|
| 3516 |
3516 |
|
name = "quasi-tui"
|
| 3517 |
|
- |
version = "0.58.0"
|
|
3517 |
+ |
version = "0.59.0"
|
| 3518 |
3518 |
|
dependencies = [
|
| 3519 |
3519 |
|
"docengine",
|
| 3520 |
3520 |
|
"makeover",
|
| 3526 |
3526 |
|
|
| 3527 |
3527 |
|
[[package]]
|
| 3528 |
3528 |
|
name = "quasi-webview"
|
| 3529 |
|
- |
version = "0.58.0"
|
|
3529 |
+ |
version = "0.59.0"
|
| 3530 |
3530 |
|
dependencies = [
|
| 3531 |
3531 |
|
"docengine",
|
| 3532 |
3532 |
|
"makeover-layout",
|
| 6198 |
6198 |
|
]
|
| 6199 |
6199 |
|
|
| 6200 |
6200 |
|
[[patch.unused]]
|
| 6201 |
|
- |
name = "synckit-client"
|
| 6202 |
|
- |
version = "0.9.1"
|
|
6201 |
+ |
name = "quasi-type"
|
|
6202 |
+ |
version = "0.1.0"
|
| 6203 |
6203 |
|
|
| 6204 |
6204 |
|
[[patch.unused]]
|
| 6205 |
6205 |
|
name = "kberg"
|
| 6218 |
6218 |
|
version = "0.4.1"
|
| 6219 |
6219 |
|
|
| 6220 |
6220 |
|
[[patch.unused]]
|
| 6221 |
|
- |
name = "quasi-type"
|
| 6222 |
|
- |
version = "0.1.0"
|
|
6221 |
+ |
name = "synckit-client"
|
|
6222 |
+ |
version = "0.9.1"
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-axum"
|
| 3 |
|
- |
version = "0.58.0"
|
|
3 |
+ |
version = "0.59.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.58.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.58.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.59.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.59.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.58.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.59.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.58.0"
|
|
3 |
+ |
version = "0.59.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.58.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.59.0" }
|
| 17 |
17 |
|
makeover-layout = "0.35.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.58.0" }
|
| 24 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.58.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.59.0" }
|
|
24 |
+ |
quasi-http = { path = "../quasi-http", version = "0.59.0" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-bench"
|
| 3 |
|
- |
version = "0.58.0"
|
|
3 |
+ |
version = "0.59.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.58.0" }
|
| 26 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.58.0" }
|
| 27 |
|
- |
quasi-tui = { path = "../quasi-tui", version = "0.58.0" }
|
|
25 |
+ |
quasi-router = { path = "../quasi-router", version = "0.59.0" }
|
|
26 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.59.0" }
|
|
27 |
+ |
quasi-tui = { path = "../quasi-tui", version = "0.59.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.58.0" }
|
|
31 |
+ |
quasi-http = { path = "../quasi-http", version = "0.59.0" }
|
| 32 |
32 |
|
makeover-layout = "0.35.0"
|
| 33 |
33 |
|
makeover-tui = { version = "0.33.0", features = ["theme"] }
|
| 34 |
34 |
|
# Only to load a bundled theme file. `makeover_tui::Theme` is `#[non_exhaustive]`,
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-http"
|
| 3 |
|
- |
version = "0.58.0"
|
|
3 |
+ |
version = "0.59.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.58.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.59.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.58.0"
|
|
3 |
+ |
version = "0.59.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.58.0" }
|
|
15 |
+ |
quasi-router = { path = "../quasi-router", version = "0.59.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 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-notifs"
|
| 3 |
|
- |
version = "0.58.0"
|
|
3 |
+ |
version = "0.59.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.58.0", optional = true }
|
|
27 |
+ |
quasi-router = { path = "../quasi-router", version = "0.59.0", optional = true }
|
| 28 |
28 |
|
synckit-config = { git = "https://makenot.work/git/max/synckit.git", version = "0.2", optional = true }
|