Skip to content

Fire UI 0.6.0

Pre-release
Pre-release

Choose a tag to compare

@sobir-git sobir-git released this 08 Sep 16:31
· 16 commits to master since this release

Ambient values keyed by type, a compact instrument theme, and the widget cleanups
that exposed. Breaking throughout; consumers update directly.

Ambient values. A node's environment was a single slot of a single type, so
publishing one type to a child evicted whatever it had inherited and blocked that
type from reaching it ever again. A virtual list publishes selection to each row,
which quietly cost every row its view of the theme: after a theme change, rows that
existed beforehand kept the old one and a list showed two label insets at once.
Values are now a small type-keyed map. Publishing replaces one type and leaves the
rest, inheritance stops per type at the node that publishes it, and nodes share one
map until something publishes its own — so installing a value for a subtree still
allocates once for the subtree rather than once per node.

A second scale. Palette::slate_dark is cool graphite with a signal-blue
accent; Scale::compact halves the rhythm — smaller type, tighter padding, squarer
corners, shorter controls. Theme::compact pairs them. Palette and scale remain
independent axes, so any pairing works, and nothing in the framework prefers a
shipped pair. Changing only the palette repaints; changing the scale relays.

Widgets. VirtualList takes a RowHeight: a number, or a rule read from the
theme so rows tighten with it. Scrollbar geometry takes the strip width rather than
a theme, so a scrolling widget remembers two floats instead of a palette.
Lifecycle::Inherited now reaches every widget whose inherited environment changed,
which is what a widget deciding which children to own needs and cannot get from
layout alone.

Composability, now under test. A custom widget that never mentions a theme; a
shipped control with none installed; and a palette whose surfaces are transparent,
which is how a control is asked for behaviour without chrome. The core itself has no
theme concept at all — theming lives entirely in the optional widgets crate.

Full notes in
CHANGELOG.md.

Known gap: a virtual list publishes itself but not per-row list items, so rows reach
assistive technology as their own content rather than as selectable entries.

Verified: cargo fmt, cargo test --workspace, cargo clippy -D warnings including
each native feature independently, cargo doc and cargo package. The native probe
passes end to end under Xvfb, including AT-SPI activation and all six EditableText
methods. Idle, paused and post-theme-swap CPU all record zero ticks.