ratatui_ruby v0.4.0 released

I am happy to announce the release of ratatui_ruby v0.4.0.

This is a major feature release.
It brings full parity with Ratatui 0.30.
Every widget now exposes the full upstream API.

What is new:

* **Ratatui 0.30.**
  The underlying library is now Ratatui 0.30.0.
  Layout caching is enabled by default for faster rendering.

* **RatatuiRuby.run.**
  The new lifecycle manager handles terminal setup and teardown.
  It yields control of the event loop to you.
  This replaces `main_loop`, which is now removed.

* **Hex Colors.**
  Style accepts hex strings like "#ff0000" for foreground and background.
  True color terminals render 24-bit color.

* **Duck-Typed Numerics.**
  Numeric parameters accept BigDecimal, Rational, and custom types.
  Any object responding to `to_f` or `to_int` works.

* **Draw Command API.**
  Custom widgets now return Draw commands.
  `render(area)` returns an array of `Draw.string` and `Draw.cell`.
  Ruby never holds pointers to Rust memory.
  Use-after-free bugs are eliminated by design.

* **Rich Text.**
  `Text::Span` and `Text::Line` enable word-level styling.
  Build paragraphs with inline formatting.

* **Block Enhancements.**
  Borders now support six types: plain, rounded, double, thick, quadrant_inside, quadrant_outside.
  Custom border characters are available through `border_set`.
  Multiple titles with individual alignment and position.
  Directional padding via integer or array.
  Nested `children` for composable structures.

* **New Widgets.**
  `RatatuiLogo` renders the Ratatui logo.
  `RatatuiMascot` renders Ferris.

* **LineGauge Widget.**
  Compact, character-based progress bars with customizable fill symbols.

* **Layout Improvements.**
  `Constraint.fill` distributes remaining space proportionally.
  `Constraint.max` caps maximum size.
  `Flex::SpaceEvenly` distributes space evenly around items.

* **Widget API Expansion.**
  Tables gain `column_highlight_style`, `cell_highlight_style`, and `selected_column`.
  Lists gain `scroll_padding`, `repeat_highlight_symbol`, and `direction`.
  Scrollbars gain full styling and all four orientation variants.
  Calendars gain `show_month_header`, `show_weekdays_header`, and event highlighting.
  Charts gain `legend_position` and full dataset styling.
  Gauges gain `gauge_style` and explicit unicode toggle.
  Sparklines gain `direction`, `bar_set`, and absent value handling.
  BarCharts gain grouped bar support and custom bar characters.

* **Typed Events.**
  `poll_event` returns typed objects: `Event::Key`, `Event::Mouse`, `Event::Resize`, `Event::Paste`, `Event::FocusGained`, `Event::FocusLost`.
  Predicate methods like `key?` and `ctrl?` simplify handlers.

* **Alpine Linux.**
  Builds now work on musl targets through proper static linking.

Breaking changes:
- `main_loop` removed. Use `RatatuiRuby.run` with explicit loop.
- `poll_event` returns typed objects, not hashes.
- `with_test_terminal` defaults to 80x24.
- `Calendar::show_month_header` defaults to false.
- `Gauge::style` no longer defaults to Style.default.
- Custom widget `render` returns Draw commands, not buffer writes.

Read the full changelog:
https://git.sr.ht/~kerrick/ratatui_ruby/tree/v0.4.0/item/CHANGELOG.md

Gem: https://rubygems.org/gems/ratatui_ruby
Source: https://git.sr.ht/~kerrick/ratatui_ruby