Skip to main content

Crate tatara_ui

Crate tatara_ui 

Source
Expand description

§tatara-ui — Nord-themed CLI UX for the tatara toolchain

Three layers, every one content-addressable:

  1. Palette (palette) — canonical Nord values + semantic Role vocabulary mapped via RoleMap::default().
  2. Sigils (sigil) — typed Unicode glyphs (❄ ✓ ✗ ⟡ → ● ◇ ⚡ ⚙ …) each bound to a default Role.
  3. Events (event) — UiEvent is a typed enum that serializes to tatara-lisp Sexps. A whole run is an EventStream; BLAKE3 of the stream JSON is the run-identity hash that tatara replay <hash> uses.

Plus the cache-aware fun:

  • Themes are derivations: (deftheme nord-arctic …) parses via #[derive(TataraDomain)]; ThemeSpec::id() is a BLAKE3 of the spec.
  • Every artifact line shows ⚡ cached or ⚙ built 5.3s next to a ◇ blake3:cxx3i50 short hash, so cache hits tell a visual story.
  • Summary banner at the end shows the content-root hash + {built, cached, failed, total} counts.
(deftheme nord-arctic
  :description "the canonical tatara look"
  :semantic    (:primary "#88C0D0"
                :success "#A3BE8C"
                :warn    "#EBCB8B"
                :error   "#BF616A"))

Re-exports§

pub use event::ArtifactState;
pub use event::Cell;
pub use event::EventStream;
pub use event::LogLevel;
pub use event::ShortHash;
pub use event::UiEvent;
pub use palette::Rgb;
pub use palette::Role;
pub use palette::RoleMap;
pub use palette::NORD;
pub use render::should_color;
pub use render::Renderer;
pub use sigil::Sigil;
pub use theme::SemanticOverrides;
pub use theme::ThemeId;
pub use theme::ThemeRegistry;
pub use theme::ThemeSpec;

Modules§

event
UiEvent — every runtime event that the renderer may paint.
palette
Nord palette — canonical hex values from https://www.nordtheme.com, matched to pleme-io’s starship + irodori conventions.
render
ANSI renderer — turns an EventStream into colored text with Nord styling.
sigil
Sigils — typed Unicode glyphs that carry a default semantic role.
theme
ThemeSpec — the Lisp-authorable, content-addressable theme.