A document that calls no route can ship no transport
`Shell::htmx_src` was a `String` emitted unconditionally, so every
document this renderer produced downloaded htmx whether or not it had
an `hx-` attribute to use it on. The five MNW embeds have none between
them, and an embed is an iframe on a third party's page: a script the
reader fetches and runs to do nothing.
`without_htmx()` matches `without_morph()` and `without_selection()` in
shape, and drops the extensions with it since both hang off htmx. Safe
in a way `without_morph` is not: dropping idiomorph makes htmx fall back
to a destructive swap in silence, while dropping htmx from a document
that never asked it for anything changes nothing, and a document that
does ask fails visibly on the first control pressed.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
13 files changed,
+98 insertions,
-48 deletions
| 3100 |
3100 |
|
|
| 3101 |
3101 |
|
[[package]]
|
| 3102 |
3102 |
|
name = "quasi"
|
| 3103 |
|
- |
version = "0.25.0"
|
|
3103 |
+ |
version = "0.26.0"
|
| 3104 |
3104 |
|
|
| 3105 |
3105 |
|
[[package]]
|
| 3106 |
3106 |
|
name = "quasi-axum"
|
| 3107 |
|
- |
version = "0.25.0"
|
|
3107 |
+ |
version = "0.26.0"
|
| 3108 |
3108 |
|
dependencies = [
|
| 3109 |
3109 |
|
"axum",
|
| 3110 |
3110 |
|
"http",
|
| 3118 |
3118 |
|
|
| 3119 |
3119 |
|
[[package]]
|
| 3120 |
3120 |
|
name = "quasi-basics"
|
| 3121 |
|
- |
version = "0.25.0"
|
|
3121 |
+ |
version = "0.26.0"
|
| 3122 |
3122 |
|
dependencies = [
|
| 3123 |
3123 |
|
"makeover-layout",
|
| 3124 |
3124 |
|
"quasi-http",
|
| 3128 |
3128 |
|
|
| 3129 |
3129 |
|
[[package]]
|
| 3130 |
3130 |
|
name = "quasi-bench"
|
| 3131 |
|
- |
version = "0.25.0"
|
|
3131 |
+ |
version = "0.26.0"
|
| 3132 |
3132 |
|
dependencies = [
|
| 3133 |
3133 |
|
"dhat",
|
| 3134 |
3134 |
|
"makeover",
|
| 3143 |
3143 |
|
|
| 3144 |
3144 |
|
[[package]]
|
| 3145 |
3145 |
|
name = "quasi-http"
|
| 3146 |
|
- |
version = "0.25.0"
|
|
3146 |
+ |
version = "0.26.0"
|
| 3147 |
3147 |
|
dependencies = [
|
| 3148 |
3148 |
|
"form_urlencoded",
|
| 3149 |
3149 |
|
"http",
|
| 3152 |
3152 |
|
|
| 3153 |
3153 |
|
[[package]]
|
| 3154 |
3154 |
|
name = "quasi-immediate"
|
| 3155 |
|
- |
version = "0.25.0"
|
|
3155 |
+ |
version = "0.26.0"
|
| 3156 |
3156 |
|
dependencies = [
|
| 3157 |
3157 |
|
"docengine",
|
| 3158 |
3158 |
|
"egui",
|
| 3162 |
3162 |
|
|
| 3163 |
3163 |
|
[[package]]
|
| 3164 |
3164 |
|
name = "quasi-router"
|
| 3165 |
|
- |
version = "0.25.0"
|
|
3165 |
+ |
version = "0.26.0"
|
| 3166 |
3166 |
|
dependencies = [
|
| 3167 |
3167 |
|
"makeover-layout",
|
| 3168 |
3168 |
|
]
|
| 3179 |
3179 |
|
|
| 3180 |
3180 |
|
[[package]]
|
| 3181 |
3181 |
|
name = "quasi-tauri"
|
| 3182 |
|
- |
version = "0.25.0"
|
|
3182 |
+ |
version = "0.26.0"
|
| 3183 |
3183 |
|
dependencies = [
|
| 3184 |
3184 |
|
"http",
|
| 3185 |
3185 |
|
"quasi-http",
|
| 3190 |
3190 |
|
|
| 3191 |
3191 |
|
[[package]]
|
| 3192 |
3192 |
|
name = "quasi-tui"
|
| 3193 |
|
- |
version = "0.25.0"
|
|
3193 |
+ |
version = "0.26.0"
|
| 3194 |
3194 |
|
dependencies = [
|
| 3195 |
3195 |
|
"docengine",
|
| 3196 |
3196 |
|
"makeover",
|
| 3202 |
3202 |
|
|
| 3203 |
3203 |
|
[[package]]
|
| 3204 |
3204 |
|
name = "quasi-webview"
|
| 3205 |
|
- |
version = "0.25.0"
|
|
3205 |
+ |
version = "0.26.0"
|
| 3206 |
3206 |
|
dependencies = [
|
| 3207 |
3207 |
|
"docengine",
|
| 3208 |
3208 |
|
"makeover-layout",
|
| 5648 |
5648 |
|
name = "tagtree"
|
| 5649 |
5649 |
|
version = "0.4.0"
|
| 5650 |
5650 |
|
|
|
5651 |
+ |
[[patch.unused]]
|
|
5652 |
+ |
name = "quasi-type"
|
|
5653 |
+ |
version = "0.1.0"
|
|
5654 |
+ |
|
| 5651 |
5655 |
|
[[patch.unused]]
|
| 5652 |
5656 |
|
name = "synckit-client"
|
| 5653 |
5657 |
|
version = "0.8.0"
|
| 5655 |
5659 |
|
[[patch.unused]]
|
| 5656 |
5660 |
|
name = "synckit-config"
|
| 5657 |
5661 |
|
version = "0.2.0"
|
| 5658 |
|
- |
|
| 5659 |
|
- |
[[patch.unused]]
|
| 5660 |
|
- |
name = "quasi-type"
|
| 5661 |
|
- |
version = "0.1.0"
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-axum"
|
| 3 |
|
- |
version = "0.25.0"
|
|
3 |
+ |
version = "0.26.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.25.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.25.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.26.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.25.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.26.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.25.0"
|
|
3 |
+ |
version = "0.26.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.25.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.0" }
|
| 17 |
17 |
|
makeover-layout = "0.28.2"
|
| 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.25.0" }
|
| 24 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.25.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.26.0" }
|
|
24 |
+ |
quasi-http = { path = "../quasi-http", version = "0.26.0" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-bench"
|
| 3 |
|
- |
version = "0.25.0"
|
|
3 |
+ |
version = "0.26.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.25.0" }
|
| 26 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.25.0" }
|
| 27 |
|
- |
quasi-tui = { path = "../quasi-tui", version = "0.25.0" }
|
|
25 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.0" }
|
|
26 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.26.0" }
|
|
27 |
+ |
quasi-tui = { path = "../quasi-tui", version = "0.26.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.25.0" }
|
|
31 |
+ |
quasi-http = { path = "../quasi-http", version = "0.26.0" }
|
| 32 |
32 |
|
makeover-layout = "0.28.2"
|
| 33 |
33 |
|
makeover-tui = { version = "0.27.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.25.0"
|
|
3 |
+ |
version = "0.26.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.25.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.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.25.0"
|
|
3 |
+ |
version = "0.26.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.25.0" }
|
|
15 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.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-router"
|
| 3 |
|
- |
version = "0.25.0"
|
|
3 |
+ |
version = "0.26.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
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-tauri"
|
| 3 |
|
- |
version = "0.25.0"
|
|
3 |
+ |
version = "0.26.0"
|
| 4 |
4 |
|
description = "The Tauri custom-protocol host adapter for quasi-router: a webview 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.25.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.25.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.26.0" }
|
| 18 |
18 |
|
http = "1.3.1"
|
| 19 |
19 |
|
# Default features off: this crate uses tauri's protocol registration and its
|
| 20 |
20 |
|
# blocking pool, and nothing else. An app brings the features it wants, and the
|
| 22 |
22 |
|
tauri = { version = "2.11.5", default-features = false }
|
| 23 |
23 |
|
|
| 24 |
24 |
|
[dev-dependencies]
|
| 25 |
|
- |
quasi-webview = { path = "../quasi-webview", version = "0.25.0" }
|
|
25 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.26.0" }
|
| 26 |
26 |
|
# The doctest names a concrete `Runtime`, and `Wry` is behind a default feature
|
| 27 |
27 |
|
# this crate does not otherwise ask for. Only the example needs it: nothing in
|
| 28 |
28 |
|
# the test module builds a window, which is what keeps them runnable with no
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-tui"
|
| 3 |
|
- |
version = "0.25.0"
|
|
3 |
+ |
version = "0.26.0"
|
| 4 |
4 |
|
description = "The terminal renderer for quasi: a screen description in, cells in a ratatui buffer 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.25.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.26.0" }
|
| 17 |
17 |
|
makeover-layout = "0.28.2"
|
| 18 |
18 |
|
# The depth palette, the theme bridge and the table. Everything else this crate
|
| 19 |
19 |
|
# draws is written here first and lifted upstream once a second consumer wants
|