Describe a pager, and draw a direction only where it acts
A pager was a `Rest` the screen supplied whole. A `Rest` has no sentinel and a
supplier of one takes a struct, so a paged screen could not reach the residual
seam however it was written. Said as a description it is a `Rest` settled by its
own body, one guard per direction, and everything it carries is a number or an
address -- the two things a residual already holds.
What made that work was a look ruling, Max's, 2026-09-08. A direction with no
address was drawn disabled, so turning its guard off SUBSTITUTED one markup for
another rather than deleting bytes; the derivation looks for a clean deletion,
found none, and silently baked the enabled form. A first page would have served
an enabled Prev pointing at page 0. It is left out now, which this renderer's
own rule already asked for: a control that answers nothing is the lying control
`control_tag` exists to prevent. The layout shift is the price, and `.rest` is
where to pay it if it matters.
`Jump` carries `here` per jump and `Rest::is_here` is gone. Three renderers each
compared a jump's page against the paging to find the current one, which is a
fact the description already knows. Same ruling as `Choice::chosen`'s, and the
strip needs it whichever way `Op::Arms` goes.
A setting's body may now hold a body of its own, which is what a marked jump
inside a pager's strip is.
The strip itself does not derive yet: it marks its page by substitution too, and
unlike the disabled Prev that is deliberate -- the page you are on is not a
control. quasicoherent cbb63155.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
- Claude-Session
- https://claude.ai/code/session_01P8ostB2UmZJGj5WjSHRSot
22 files changed,
+356 insertions,
-129 deletions
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-axum"
|
| 3 |
|
- |
version = "0.105.0"
|
|
3 |
+ |
version = "0.106.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.105" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.105" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.106" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.106" }
|
| 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.105" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.106" }
|
| 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.105.0"
|
|
3 |
+ |
version = "0.106.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.105" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.106" }
|
| 17 |
17 |
|
quasi-declare = { path = "../quasi-declare", version = "0.1" }
|
| 18 |
18 |
|
makeover-layout = "0.44"
|
| 19 |
19 |
|
|
| 21 |
21 |
|
# A widget's guarantees are claims about what a renderer draws, so they are
|
| 22 |
22 |
|
# tested against a real one rather than by walking the tree the assembly just
|
| 23 |
23 |
|
# built. The webview is the renderer that recognises names today.
|
| 24 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.105" }
|
| 25 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.105" }
|
|
24 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.106" }
|
|
25 |
+ |
quasi-http = { path = "../quasi-http", version = "0.106" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-bench"
|
| 3 |
|
- |
version = "0.105.0"
|
|
3 |
+ |
version = "0.106.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
|
| 26 |
26 |
|
askama = ["dep:askama"]
|
| 27 |
27 |
|
|
| 28 |
28 |
|
[dependencies]
|
| 29 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.105" }
|
| 30 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.105" }
|
| 31 |
|
- |
quasi-tui = { path = "../quasi-tui", version = "0.105" }
|
| 32 |
|
- |
quasi-immediate = { path = "../quasi-immediate", version = "0.105" }
|
|
29 |
+ |
quasi-router = { path = "../quasi-router", version = "0.106" }
|
|
30 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.106" }
|
|
31 |
+ |
quasi-tui = { path = "../quasi-tui", version = "0.106" }
|
|
32 |
+ |
quasi-immediate = { path = "../quasi-immediate", version = "0.106" }
|
| 33 |
33 |
|
# `Serves` is the trait carrying `screen` and `fragment`, which is what the
|
| 34 |
34 |
|
# webview is measured through. Taken directly rather than through quasi-webview
|
| 35 |
35 |
|
# because a bench calling a trait method should name the trait it calls.
|
| 36 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.105" }
|
|
36 |
+ |
quasi-http = { path = "../quasi-http", version = "0.106" }
|
| 37 |
37 |
|
# The macro under measurement. The bench holds the declared copy of the same
|
| 38 |
38 |
|
# screen `staging.rs` writes by hand, so the staged column measures what the
|
| 39 |
39 |
|
# server actually serves rather than a shape written for a benchmark.
|
| 31 |
31 |
|
trybuild = "1"
|
| 32 |
32 |
|
# The generated code names the vocabulary, so a case that is meant to COMPILE
|
| 33 |
33 |
|
# needs it. A proc-macro crate cannot depend on it outside dev.
|
| 34 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.105" }
|
|
34 |
+ |
quasi-router = { path = "../quasi-router", version = "0.106" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-http"
|
| 3 |
|
- |
version = "0.105.0"
|
|
3 |
+ |
version = "0.106.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.105" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.106" }
|
| 17 |
17 |
|
http = "1.3.1"
|
| 18 |
18 |
|
form_urlencoded = "1.2.2"
|