Skip to main content

max / alloy_tui

Release alloy_tui v3.0.0 A major, forced by `Theme`: it gained `bevel_light` and `bevel_dark` as public fields and was not `#[non_exhaustive]`, so the addition is a breaking change for anyone constructing or matching one. `#[non_exhaustive]` goes on in the same release, which is the whole reason to do it here. The struct gains a field every time makeover gains an intent, and each of those would otherwise be another major. Nothing outside this crate builds a Theme field-by-field -- from_theme is the only sane way to get one -- so this is the last moment the attribute is free. Since 2.0.0: - the bevel pair as Theme fields, read through makeover's resolve() - ColorDepth::Ansi256, and src/bevel.rs (Elevation, two-pass Block) - AlloyButton; drop shadows on AlloyModal and AlloyPicker - keys::RESERVED beside classify(), and src/help.rs (AlloyKeymap) - src/geometry.rs: the spacing vocabulary, and the answer to makeover-geometry's open question about non-square cells - border_subtle / border_strong / mix_linear_srgb made public, so the Alloy image's desktop skeleton derives its borders from the same two functions the console renders with - MSRV 1.88, for ratatui 0.30.2's Block::shadow Both [patch.crates-io] stanzas this crate needed are gone: makeover 2.2.0 and makeover-geometry 0.1.0 are published, and it now packages from a clean checkout with no path deps.
Author: Max Johnson <me@maxj.phd> · 2026-07-27 03:04 UTC
Signed with PGP, not checked
Commit: c8f23001fd9e411d2de2efc1a49918a5cff477d1
Parent: fa456ff
2 files changed, +16 insertions, -1 deletion
M Cargo.toml +1 -1
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "alloy_tui"
3 - version = "2.0.0"
3 + version = "3.0.0"
4 4 description = "Alloy design system: makeover intents rendered as ratatui Color/Style, plus themed widgets for the alloy console and siblings."
5 5 edition = "2024"
6 6 # 1.88 is ratatui 0.30.2's floor, and 0.30.2 is where `Block::shadow` lands.
M src/theme.rs +15
@@ -25,7 +25,22 @@
25 25 HighContrast,
26 26 }
27 27
28 + /// A theme's intents, resolved to the colors ratatui draws with.
29 + ///
30 + /// `#[non_exhaustive]` because this struct gains a field every time makeover
31 + /// gains an intent, and without the attribute each one of those is a major here.
32 + /// 3.0.0 is itself that major, forced by the bevel pair; the attribute is what
33 + /// stops the next token from forcing another. Added in this release because it
34 + /// is the last moment it is free — nothing outside this crate builds a `Theme`
35 + /// field-by-field today, since [`Theme::from_theme`] is the only sane way to get
36 + /// one and a partial theme is an error rather than a default.
37 + ///
38 + /// The cost is real and accepted: a downstream crate can no longer construct one
39 + /// literally or match it exhaustively. For a palette that is *defined* as
40 + /// however many intents makeover currently has, neither is a thing a consumer
41 + /// should be doing.
28 42 #[derive(Debug, Clone, Copy)]
43 + #[non_exhaustive]
29 44 pub struct Theme {
30 45 pub mode: Mode,
31 46