Skip to content
Updated View as Markdown

tuika 0.10.0

Released 2026-08-17. crates.io · docs.rs · GitHub release

Released alongside tuika-charts 0.1.1, tuika-codeformatters 0.4.3, tuika-html 0.1.3, and tuika-mermaid 0.3.1. Their tuika dependency requirements now track 0.10.

Added

  • Components: ProgressBar::label_style styles the caption set by label, the same theme-by-default/explicit-override pattern as colors. The trailing NN% of percent stays separate chrome on the theme’s muted style.
  • Components: SelectionAnchor selects how Table and SelectList window themselves around the selection when they resolve their own window — Center (today’s recentering behavior, still the default) or Edge, which moves the window only when the selection would leave it.
  • Virtualization: VirtualWindow::keeping is the edge-following policy as a pure function of the caller’s current start; SelectViewportState::resolve now uses it, so the persistent and stateless paths share one implementation.
  • Charts: both axes carry tick labels, so a chart states its scale instead of leaving the reader to guess it. Ticks land on round values (a power of ten times 1, 2, 2.5, or 5) and label precision follows the tick step. Axis::format replaces the numeric formatter, Axis::ticks targets a tick count, and Axis::hidden opts an axis out. Labels are drawn as cells in both render modes — the graphics image covers the plot only — so the same numbers land in the same cells whether or not the terminal has graphics.

Changed

  • Breaking: Mouse capture is now opt-in in alternate-screen mode, preserving native OSC 8 link activation, terminal selection, and scrolling by default. Applications that need pointer or wheel events use ScreenMode::with_mouse_capture, MouseCapture::Enabled, or AltScreen::enter_with_mouse_capture; captured sessions may use runner selection and ctrl_click_url as application-side fallbacks.
  • MarkdownState::links preserves labeled and bare hyperlink targets across incremental updates, settled-prefix caching, wrapping, and resize, so hosts drawing streaming lines can apply native OSC 8 links without re-parsing.
  • Charts: Axis::categories names positions instead of measuring them, which is what most bar and area charts actually want. Chart::stack combines bar and area series — Stack::Normal sums them, Stack::Percent scales every position to 100 — while unstacked bar series split their category band into slots and sit side by side. Chart::horizontal swaps the axes so a category gets a whole row of width for its name. Series::markers and Series::labels annotate samples, Chart::focus marks one position and lists every series’ value there, and Series::donut with Chart::center draws a ring. A rule is drawn along zero whenever the value domain straddles it.
  • Breaking: chart axis labels are on by default, so a chart that previously filled its whole area now gives a few columns to the y-axis gutter. Chart::x_axis and Chart::y_axis with Axis::hidden restore the old geometry exactly; the x labels reuse the margin row the plot already reserved and cost no plot height. Aligning both renderers on one cell grid also removed the graphics path’s internal margins, so a graphics plot now covers the same data cells its portable counterpart does.

Fixed

  • Charts: graphics-mode plots are transparent where nothing is drawn rather than filled with the theme background, so cell-drawn text — value labels, a donut’s centre text — is no longer hidden by the image composited over it.
  • Charts: automatic y domains reach the zero baseline whenever a chart carries a bar or area series. These marks encode their value in the filled span, so a domain starting at the data minimum drew a bar of 1 beside a bar of 5 as a sliver beside a full column — a ratio the data never contained. Line, step, and scatter series are read as positions and keep the tighter domain that resolves their variation; Chart::y_domain still overrides both.
Navigation

Type to search…

↑↓ navigate↵ selectEsc close