0.7.0: describe a board's columns as peers
RegionKind::Columns, over makeover-layout 0.25.0's Region::Columns. Peer
regions across, all equals, which is the shape Split is not: a split's two
panes stand in master-detail where the left chooses what the right shows.
Measured against goingson's tasks-kanban.js before it was added. Every card
fact was already sayable -- title, project, due, the blocked and unblocks
badges, subtask progress, the open action and the context menu are Row's
existing parts, and a column is a heading, a count and a list. The one thing
nothing could say was that the columns are peers. A board described as
list-detail is a lie about the screen, and list-detail and sidebar-content
were the only arrangements there were.
Dragging a card between columns never entered into it. A drop's effect is
"set status", a discrete action Row's menu already carries; the drag is
affordance and stays the host's, the same answer the day view got.
quasi-webview emits the class and nothing else, because regions are laid out
by the consumer's stylesheet the way band, sidebar and pane already are. A
test asserts no share, no count and no order index reach the markup: every
one of those would be a renderer deciding something peers settle by being
peers. A second test holds columns and split apart, since the one place
their difference is visible is the class name.
quasi-tui needs no arm. It matches Band, Sidebar and Modal and lets
everything else stack, so a board reads as its columns one after another --
which is the terminal honouring this member rather than degrading it.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
13 files changed,
+111 insertions,
-50 deletions
| 2296 |
2296 |
|
|
| 2297 |
2297 |
|
[[package]]
|
| 2298 |
2298 |
|
name = "makeover-immediate"
|
| 2299 |
|
- |
version = "0.22.0"
|
|
2299 |
+ |
version = "0.23.0"
|
| 2300 |
2300 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 2301 |
|
- |
checksum = "2535b06fbfe15197c9871543a1c270e3744803132d68d391e4a19dbb7e4e942a"
|
|
2301 |
+ |
checksum = "cf5a321862c506ee387d2cff5b8ccf29e8f4f26e736e889eeb3c9c8d8db4c3d4"
|
| 2302 |
2302 |
|
dependencies = [
|
| 2303 |
2303 |
|
"egui",
|
| 2304 |
2304 |
|
"egui_extras",
|
| 2307 |
2307 |
|
|
| 2308 |
2308 |
|
[[package]]
|
| 2309 |
2309 |
|
name = "makeover-layout"
|
| 2310 |
|
- |
version = "0.24.0"
|
|
2310 |
+ |
version = "0.25.0"
|
| 2311 |
2311 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 2312 |
|
- |
checksum = "d7e8857e635b4b23c21bbea360a4b33eefb4c6ff252a4cf4b3564a55de55d19e"
|
|
2312 |
+ |
checksum = "f7480bdecd1ccca99dbfd744327f5598d67dd9be3157c48928466b5e20d4aed3"
|
| 2313 |
2313 |
|
|
| 2314 |
2314 |
|
[[package]]
|
| 2315 |
2315 |
|
name = "makeover-touch"
|
| 2316 |
|
- |
version = "0.16.0"
|
|
2316 |
+ |
version = "0.17.0"
|
| 2317 |
2317 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 2318 |
|
- |
checksum = "af562d05e17947bb8fe7f3ce45d8f9b803627ae14b8931ebf578e12ddae85bdc"
|
|
2318 |
+ |
checksum = "bd1cac03a0e0b912a16f07044a79099c5bf8be3741403cd2b980d0aa4e57adac"
|
| 2319 |
2319 |
|
dependencies = [
|
| 2320 |
2320 |
|
"makeover-geometry",
|
| 2321 |
2321 |
|
"makeover-layout",
|
| 2323 |
2323 |
|
|
| 2324 |
2324 |
|
[[package]]
|
| 2325 |
2325 |
|
name = "makeover-tui"
|
| 2326 |
|
- |
version = "0.22.0"
|
|
2326 |
+ |
version = "0.23.0"
|
| 2327 |
2327 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 2328 |
|
- |
checksum = "027e2be8f603b034a809ac2a7be7dc055ac7d3a864a3fa6f1a4418b8d976ad4f"
|
|
2328 |
+ |
checksum = "d2c1f0eb73f3d89511a1a731b0f7e6705c39c7e06a7c944fcde1cbc7aebe5604"
|
| 2329 |
2329 |
|
dependencies = [
|
| 2330 |
2330 |
|
"makeover",
|
| 2331 |
2331 |
|
"makeover-layout",
|
| 2334 |
2334 |
|
|
| 2335 |
2335 |
|
[[package]]
|
| 2336 |
2336 |
|
name = "makeover-webview"
|
| 2337 |
|
- |
version = "0.42.0"
|
|
2337 |
+ |
version = "0.43.0"
|
| 2338 |
2338 |
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 2339 |
|
- |
checksum = "6937a91744ab84f225f36656819a9db4b0a08d5adfb65a7f71f0b03b1281cd0e"
|
|
2339 |
+ |
checksum = "1fc6f622ba5546e4ce0b8393addbb23c905dad5b1888ee7b588f04c696fecca4"
|
| 2340 |
2340 |
|
dependencies = [
|
| 2341 |
2341 |
|
"makeover-geometry",
|
| 2342 |
2342 |
|
"makeover-layout",
|
| 3025 |
3025 |
|
|
| 3026 |
3026 |
|
[[package]]
|
| 3027 |
3027 |
|
name = "quasi"
|
| 3028 |
|
- |
version = "0.6.0"
|
|
3028 |
+ |
version = "0.7.0"
|
| 3029 |
3029 |
|
|
| 3030 |
3030 |
|
[[package]]
|
| 3031 |
3031 |
|
name = "quasi-axum"
|
| 3032 |
|
- |
version = "0.6.0"
|
|
3032 |
+ |
version = "0.7.0"
|
| 3033 |
3033 |
|
dependencies = [
|
| 3034 |
3034 |
|
"axum",
|
| 3035 |
3035 |
|
"http",
|
| 3043 |
3043 |
|
|
| 3044 |
3044 |
|
[[package]]
|
| 3045 |
3045 |
|
name = "quasi-basics"
|
| 3046 |
|
- |
version = "0.6.0"
|
|
3046 |
+ |
version = "0.7.0"
|
| 3047 |
3047 |
|
dependencies = [
|
| 3048 |
3048 |
|
"makeover-layout",
|
| 3049 |
3049 |
|
"quasi-http",
|
| 3053 |
3053 |
|
|
| 3054 |
3054 |
|
[[package]]
|
| 3055 |
3055 |
|
name = "quasi-http"
|
| 3056 |
|
- |
version = "0.6.0"
|
|
3056 |
+ |
version = "0.7.0"
|
| 3057 |
3057 |
|
dependencies = [
|
| 3058 |
3058 |
|
"form_urlencoded",
|
| 3059 |
3059 |
|
"http",
|
| 3062 |
3062 |
|
|
| 3063 |
3063 |
|
[[package]]
|
| 3064 |
3064 |
|
name = "quasi-immediate"
|
| 3065 |
|
- |
version = "0.6.0"
|
|
3065 |
+ |
version = "0.7.0"
|
| 3066 |
3066 |
|
dependencies = [
|
| 3067 |
3067 |
|
"docengine",
|
| 3068 |
3068 |
|
"egui",
|
| 3072 |
3072 |
|
|
| 3073 |
3073 |
|
[[package]]
|
| 3074 |
3074 |
|
name = "quasi-router"
|
| 3075 |
|
- |
version = "0.6.0"
|
|
3075 |
+ |
version = "0.7.0"
|
| 3076 |
3076 |
|
dependencies = [
|
| 3077 |
3077 |
|
"makeover-layout",
|
| 3078 |
3078 |
|
]
|
| 3089 |
3089 |
|
|
| 3090 |
3090 |
|
[[package]]
|
| 3091 |
3091 |
|
name = "quasi-tauri"
|
| 3092 |
|
- |
version = "0.6.0"
|
|
3092 |
+ |
version = "0.7.0"
|
| 3093 |
3093 |
|
dependencies = [
|
| 3094 |
3094 |
|
"http",
|
| 3095 |
3095 |
|
"quasi-http",
|
| 3100 |
3100 |
|
|
| 3101 |
3101 |
|
[[package]]
|
| 3102 |
3102 |
|
name = "quasi-tui"
|
| 3103 |
|
- |
version = "0.6.0"
|
|
3103 |
+ |
version = "0.7.0"
|
| 3104 |
3104 |
|
dependencies = [
|
| 3105 |
3105 |
|
"docengine",
|
| 3106 |
3106 |
|
"makeover",
|
| 3112 |
3112 |
|
|
| 3113 |
3113 |
|
[[package]]
|
| 3114 |
3114 |
|
name = "quasi-webview"
|
| 3115 |
|
- |
version = "0.6.0"
|
|
3115 |
+ |
version = "0.7.0"
|
| 3116 |
3116 |
|
dependencies = [
|
| 3117 |
3117 |
|
"docengine",
|
| 3118 |
3118 |
|
"makeover-layout",
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-axum"
|
| 3 |
|
- |
version = "0.6.0"
|
|
3 |
+ |
version = "0.7.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.6.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.6.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.7.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.6.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.7.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.6.0"
|
|
3 |
+ |
version = "0.7.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.6.0" }
|
| 17 |
|
- |
makeover-layout = "0.24.0"
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.0" }
|
|
17 |
+ |
makeover-layout = "0.25.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.6.0" }
|
| 24 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.6.0" }
|
|
23 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.7.0" }
|
|
24 |
+ |
quasi-http = { path = "../quasi-http", version = "0.7.0" }
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-http"
|
| 3 |
|
- |
version = "0.6.0"
|
|
3 |
+ |
version = "0.7.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.6.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.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.6.0"
|
|
3 |
+ |
version = "0.7.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"
|
| 10 |
10 |
|
categories = ["gui"]
|
| 11 |
11 |
|
|
| 12 |
12 |
|
[dependencies]
|
| 13 |
|
- |
quasi-router = { path = "../quasi-router", version = "0.6.0" }
|
|
13 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.0" }
|
| 14 |
14 |
|
# The node drawing, which is the makeover layer's and not this crate's. Every
|
| 15 |
15 |
|
# widget here that is not a container comes from it: a screen walk that painted
|
| 16 |
16 |
|
# its own meter would be the divergence the suite exists to end, one copy per
|
| 17 |
17 |
|
# renderer instead of one copy per app.
|
| 18 |
|
- |
makeover-immediate = "0.22.0"
|
|
18 |
+ |
makeover-immediate = "0.23.0"
|
| 19 |
19 |
|
egui = { version = "0.35", default-features = false }
|
| 20 |
20 |
|
# Markdown to text for `Node::Rich`. The same crate the webview renderer takes,
|
| 21 |
21 |
|
# reading the same source: what differs is that it can emit markup and this
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-router"
|
| 3 |
|
- |
version = "0.6.0"
|
|
3 |
+ |
version = "0.7.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.24.0"
|
|
16 |
+ |
makeover-layout = "0.25.0"
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-tauri"
|
| 3 |
|
- |
version = "0.6.0"
|
|
3 |
+ |
version = "0.7.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.6.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.6.0" }
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.7.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.6.0" }
|
|
25 |
+ |
quasi-webview = { path = "../quasi-webview", version = "0.7.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.6.0"
|
|
3 |
+ |
version = "0.7.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.6.0" }
|
| 17 |
|
- |
makeover-layout = "0.24.0"
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.0" }
|
|
17 |
+ |
makeover-layout = "0.25.0"
|
| 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
|
| 20 |
20 |
|
# it, which is the order the suite has always moved in: the constrained consumer
|
| 21 |
21 |
|
# finds the shape, and the shared crate takes it after it is known rather than
|
| 22 |
22 |
|
# before.
|
| 23 |
|
- |
makeover-tui = { version = "0.22.0", features = ["theme"] }
|
|
23 |
+ |
makeover-tui = { version = "0.23.0", features = ["theme"] }
|
| 24 |
24 |
|
ratatui = { version = "0.30", default-features = false }
|
| 25 |
25 |
|
# `Node::Rich` carries markdown source. A terminal has no markup to hand it to,
|
| 26 |
26 |
|
# so it takes the runs: `render_runs` is the words with the marks that were over
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "quasi-webview"
|
| 3 |
|
- |
version = "0.6.0"
|
|
3 |
+ |
version = "0.7.0"
|
| 4 |
4 |
|
description = "The webview renderer for quasi: a screen description in, an htmx document 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.6.0" }
|
| 17 |
|
- |
quasi-http = { path = "../quasi-http", version = "0.6.0" }
|
| 18 |
|
- |
makeover-layout = "0.24.0"
|
| 19 |
|
- |
makeover-webview = "0.42.0"
|
|
16 |
+ |
quasi-router = { path = "../quasi-router", version = "0.7.0" }
|
|
17 |
+ |
quasi-http = { path = "../quasi-http", version = "0.7.0" }
|
|
18 |
+ |
makeover-layout = "0.25.0"
|
|
19 |
+ |
makeover-webview = "0.43.0"
|
| 20 |
20 |
|
# `Node::Rich` carries markdown source and this is what turns it into markup.
|
| 21 |
21 |
|
# Sanitising comes with it, which is why the node can carry what a user typed.
|
| 22 |
22 |
|
#
|