A Field can say its value is the reader's and survives a redraw
Decided in quasicoherent a135f898 (Max): say it, one member, on the field.
The fact is that the server never sent this value and cannot send it
again, so a redraw that clears the control loses something only the reader
had. MNW's tag typeahead is the measured case: its sidebar is swapped out
of band on every filter change, so three letters of a tag plus a tick on
an unrelated facet emptied the box.
Only one host's default is destructive, which is the usual reason a fact
has to enter the vocabulary rather than be assumed. quasi-tui keeps its
own buffer and quasi-immediate keeps widget state by id, and both are
confirmed by a test rather than changed.
Not on the region, which is what the original task asked and cannot be
implemented: preservation is per-element, so a renderer told "redraw this
region but keep the reader's half" has no way to know which elements hold
reader state, and preserving every input would keep a facet control the
answer legitimately reset. Not inferred either -- "no value plus suggests
or consults" would cover the measured site exactly and would change
behaviour when a field gained an unrelated member.
hx- now enters in three functions rather than two, and the test that
checks it counts three. preserve_attr is a third reading of one fact
beside action_attrs and oob_html -- where a control sends, where an
unasked answer lands, and what the answer may not touch on the way in --
so the transport stays as replaceable as decision 13 claims. Inlining the
attribute would have been the leak that test exists to catch, and it
caught it.
The combobox had already taken the single control_attrs slot, so the two
compose rather than one winning: MNW's box is both.
20 files changed,
+277 insertions,
-60 deletions
| 3425 |
3425 |
|
|
| 3426 |
3426 |
|
[[package]]
|
| 3427 |
3427 |
|
name = "quasi"
|
| 3428 |
|
- |
version = "0.86.0"
|
|
3428 |
+ |
version = "0.87.0"
|
| 3429 |
3429 |
|
|
| 3430 |
3430 |
|
[[package]]
|
| 3431 |
3431 |
|
name = "quasi-axum"
|
| 3432 |
|
- |
version = "0.86.0"
|
|
3432 |
+ |
version = "0.87.0"
|
| 3433 |
3433 |
|
dependencies = [
|
| 3434 |
3434 |
|
"axum",
|
| 3435 |
3435 |
|
"http",
|
| 3443 |
3443 |
|
|
| 3444 |
3444 |
|
[[package]]
|
| 3445 |
3445 |
|
name = "quasi-basics"
|
| 3446 |
|
- |
version = "0.86.0"
|
|
3446 |
+ |
version = "0.87.0"
|
| 3447 |
3447 |
|
dependencies = [
|
| 3448 |
3448 |
|
"makeover-layout",
|
| 3449 |
3449 |
|
"quasi-http",
|
| 3453 |
3453 |
|
|
| 3454 |
3454 |
|
[[package]]
|
| 3455 |
3455 |
|
name = "quasi-bench"
|
| 3456 |
|
- |
version = "0.86.0"
|
|
3456 |
+ |
version = "0.87.0"
|
| 3457 |
3457 |
|
dependencies = [
|
| 3458 |
3458 |
|
"dhat",
|
| 3459 |
3459 |
|
"makeover",
|
| 3468 |
3468 |
|
|
| 3469 |
3469 |
|
[[package]]
|
| 3470 |
3470 |
|
name = "quasi-http"
|
| 3471 |
|
- |
version = "0.86.0"
|
|
3471 |
+ |
version = "0.87.0"
|
| 3472 |
3472 |
|
dependencies = [
|
| 3473 |
3473 |
|
"form_urlencoded",
|
| 3474 |
3474 |
|
"http",
|
| 3477 |
3477 |
|
|
| 3478 |
3478 |
|
[[package]]
|
| 3479 |
3479 |
|
name = "quasi-immediate"
|
| 3480 |
|
- |
version = "0.86.0"
|
|
3480 |
+ |
version = "0.87.0"
|
| 3481 |
3481 |
|
dependencies = [
|
| 3482 |
3482 |
|
"docengine",
|
| 3483 |
3483 |
|
"egui",
|
| 3488 |
3488 |
|
|
| 3489 |
3489 |
|
[[package]]
|
| 3490 |
3490 |
|
name = "quasi-notifs"
|
| 3491 |
|
- |
version = "0.86.0"
|
|
3491 |
+ |
version = "0.87.0"
|
| 3492 |
3492 |
|
dependencies = [
|
| 3493 |
3493 |
|
"quasi-router",
|
| 3494 |
3494 |
|
"synckit-config",
|
| 3496 |
3496 |
|
|
| 3497 |
3497 |
|
[[package]]
|
| 3498 |
3498 |
|
name = "quasi-router"
|
| 3499 |
|
- |
version = "0.86.0"
|
|
3499 |
+ |
version = "0.87.0"
|
| 3500 |
3500 |
|
dependencies = [
|
| 3501 |
3501 |
|
"makeover-layout",
|
| 3502 |
3502 |
|
]
|
| 3513 |
3513 |
|
|
| 3514 |
3514 |
|
[[package]]
|
| 3515 |
3515 |
|
name = "quasi-tauri"
|
| 3516 |
|
- |
version = "0.86.0"
|
|
3516 |
+ |
version = "0.87.0"
|
| 3517 |
3517 |
|
dependencies = [
|
| 3518 |
3518 |
|
"http",
|
| 3519 |
3519 |
|
"quasi-http",
|
| 3526 |
3526 |
|
|
| 3527 |
3527 |
|
[[package]]
|
| 3528 |
3528 |
|
name = "quasi-tui"
|
| 3529 |
|
- |
version = "0.86.0"
|
|
3529 |
+ |
version = "0.87.0"
|
| 3530 |
3530 |
|
dependencies = [
|
| 3531 |
3531 |
|
"docengine",
|
| 3532 |
3532 |
|
"makeover",
|
| 3539 |
3539 |
|
|
| 3540 |
3540 |
|
[[package]]
|
| 3541 |
3541 |
|
name = "quasi-webview"
|
| 3542 |
|
- |
version = "0.86.0"
|
|
3542 |
+ |
version = "0.87.0"
|
| 3543 |
3543 |
|
dependencies = [
|
| 3544 |
3544 |
|
"docengine",
|
| 3545 |
3545 |
|
"makeover-layout",
|
| 6211 |
6211 |
|
"winnow 1.0.4",
|
| 6212 |
6212 |
|
]
|
| 6213 |
6213 |
|
|
| 6214 |
|
- |
[[patch.unused]]
|
| 6215 |
|
- |
name = "synckit-client"
|
| 6216 |
|
- |
version = "0.10.0"
|
| 6217 |
|
- |
|
| 6218 |
6214 |
|
[[patch.unused]]
|
| 6219 |
6215 |
|
name = "quasi-type"
|
| 6220 |
6216 |
|
version = "0.1.3"
|
| 6234 |
6230 |
|
[[patch.unused]]
|
| 6235 |
6231 |
|
name = "tagtree"
|
| 6236 |
6232 |
|
version = "0.4.1"
|
|
6233 |
+ |
|
|
6234 |
+ |
[[patch.unused]]
|
|
6235 |
+ |
name = "synckit-client"
|
|
6236 |
+ |
version = "0.10.0"
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-axum"
|
| 3 |
|
- |
version = "0.86.0"
|
|
3 |
+ |
version = "0.87.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.86.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.86.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.87.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.87.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.86.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.87.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.86.0"
|
|
3 |
+ |
version = "0.87.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.86.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.87.0" }
|
| 17 |
17 |
|
makeover-layout = "0.41.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.86.0" }
|
| 24 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.86.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.87.0" }
|
|
24 |
+ |
quasi-http = { path = "../quasi-http", version = "0.87.0" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-bench"
|
| 3 |
|
- |
version = "0.86.0"
|
|
3 |
+ |
version = "0.87.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.86.0" }
|
| 26 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.86.0" }
|
| 27 |
|
- |
quasi-tui = { path = "../quasi-tui", version = "0.86.0" }
|
|
25 |
+ |
quasi-router = { path = "../quasi-router", version = "0.87.0" }
|
|
26 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.87.0" }
|
|
27 |
+ |
quasi-tui = { path = "../quasi-tui", version = "0.87.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.86.0" }
|
|
31 |
+ |
quasi-http = { path = "../quasi-http", version = "0.87.0" }
|
| 32 |
32 |
|
makeover-layout = "0.41.0"
|
| 33 |
33 |
|
makeover-tui = { version = "0.41.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.86.0"
|
|
3 |
+ |
version = "0.87.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.86.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.87.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.86.0"
|
|
3 |
+ |
version = "0.87.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.86.0" }
|
|
15 |
+ |
quasi-router = { path = "../quasi-router", version = "0.87.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.86.0"
|
|
3 |
+ |
version = "0.87.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.86.0", optional = true }
|
|
27 |
+ |
quasi-router = { path = "../quasi-router", version = "0.87.0", optional = true }
|
| 28 |
28 |
|
synckit-config = { git = "https://makenot.work/git/max/synckit.git", version = "0.2", optional = true }
|