# chirp-ui 0.10.0

URL: https://lbliii.github.io/chirp-ui/releases/0.10.0/
Section: releases
Description: Release 0.10.0

---

> For a complete page index, fetch https://lbliii.github.io/chirp-ui/llms.txt.

## Install

```bash
pip install chirp-ui==0.10.0
# or
uv add chirp-ui==0.10.0
```

With Chirp:

```bash
pip install "bengal-chirp[ui]"
```

## What's New

### Server-driven data grid

The headline addition is **`data_grid`** — a citable interactive-grid composite
backed by a new typed, Chirp-agnostic Python helper, **`chirp_ui.grid_state`**
(`Column` / `GridSort` / `ColumnSort` / `SelectionState` plus `parse_sort`,
`sort_columns`, `selection_state`, `column_aria_sort`, and `sort_query`). The
helper projects each column's `aria-sort` and toggle URL so the server `ORDER BY`
and the rendered headers cannot drift. Sorting is a real `<button>`, selection is
a single idempotent `chirpuiGridSelection` Alpine factory with page-scoped
select-all, the first column can pin sticky, and rows load more via HTMX. Proven
end-to-end by `tests/browser/test_data_grid_gauntlet.py`.

`table()` gained additive `selectable` / `select_name` / `selection` / `row_id` /
`sticky_first_col` parameters (the legacy `sortable=` / `sort_url=` path is
byte-identical), and `data_table` was demoted stable → experimental, superseded
by `data_grid`.

### New interactive input primitives

- **`combobox`** — a WAI-ARIA typeahead autocomplete input, with a token-pill
  multi-select mode.
- **`context_menu`** — a right-click / keyboard context-menu primitive.
- **`date_picker`** — a client-rendered date and range picker.
- **Command palette** arrow-key result navigation with `aria-activedescendant`.

These ship experimental with keyboard / a11y browser gauntlets and degrade
gracefully without JavaScript.

### Application shell

- **Mobile nav drawer** — opt into `app_shell(nav_drawer=true)` for an accessible
  off-canvas slide-over below 48rem (focus trap, ESC, scrim, scroll lock, focus
  return). The controller is vanilla JS in `shell_runtime_script()` and
  repositions the *same* `<aside>` regions, so `aria-current` and OOB swaps keep
  working.
- **Route-context rail** — a route-aware secondary rail region with a
  content-swap protocol.
- The two shell entry points (macro and layout) were reconciled and hardened: a
  canonical `match`-driven `syncNav`, a non-anchor `topbar_leading` slot for
  back/menu affordances, and `shell_actions_bar(id_suffix=…)` to namespace ids
  when the bar renders twice.

### Alpine reliability

Chirp UI now emits a loud self-check when Alpine fails to load, and
`check_alpine_runtime` detects both a missing Alpine core and the CDN-URL footgun
that silently ships a non-browser build.

### Layout and control primitives

Eight new **stable** primitives round out the low-level toolkit: `aspect_ratio`
(fixed-ratio media frame), `item` (reusable row anatomy for lists, menus, and
command results), `kbd` (inline keyboard-key hint), `ui_label` (standalone label
for custom controls), `scroll_area` (contained overflow region), `separator`
(semantic or decorative divider), `slider` (native range-input wrapper), and
`toggle_group` (grouped single- or multiple-selection toggle buttons).

### Docs, theme, and contributor proof

- Learning Tracks, a notebook content type, an on-site component index generated
  from the manifest, and a steward network for cross-surface review.
- A live `examples/component-showcase` Chirp app deployed to Railway replaces the
  hand-maintained static gallery.
- A browser a11y gate, layout relationship contracts, and a maturity-honesty rule
  that blocks any thin composition wrapper from shipping `stable` without proof.
- Broad visual taste-floor passes across content media, data loading, headers,
  navigation disclosure, small controls, and special form controls.

See the [CHANGELOG](https://github.com/lbliii/chirp-ui/blob/main/CHANGELOG.md)
for the complete list of 53 entries.

## Changed

- The static component showcase is replaced by the live Railway-deployed
  `examples/component-showcase` app, reachable from the `/showcase/` docs route.
- `data_table` is now experimental (use `data_grid` for sortable / selectable
  grids); `workspace_shell` is experimental pending recipe-first promotion.
- Direct-shell view transitions, docs-nav folder disclosure, and a canonical
  shell active-sync land alongside the visual taste-floor passes.

## Fixed

- The form-field border no longer leaks onto the segmented-control pill
  (height regression).
- The data-grid load-more button refreshes / removes via an OOB sentinel.
- The changelog / releases timelines now sort chronologically and the authors
  profile renders a real authored-post feed instead of a self-referential card.
- Unique nav landmark names, reduced-motion back-to-top scroll, absolute SEO
  origins, and JSON-LD / RSS structured-data corrections.

## Upgrade Notes

This is a minor release: it adds new components and shell capabilities and
contains no breaking changes to existing public macros.

- New primitives (`combobox`, `context_menu`, `date_picker`) ship
  **experimental** — opt in deliberately and pin against churn.
- Prefer `data_grid` over `data_table` for any sortable or selectable table;
  `data_table` is now experimental.
- The mobile nav drawer and route-context rail are **opt-in and additive** —
  unset, the shell keeps its existing fallback behavior.
- **Behavior change:** match-less sidebar / navbar links are now
  server-authoritative for active state. If your shell relied on automatic
  client active-link highlighting across boosted navigation, set
  `match="prefix"` (or `match="exact"`) on those links to restore it (#197).
- **Contributors:** changelog fragments must use the flat, towncrier-discoverable
  form `changelog.d/+<slug>.<type>.md`. Fragments placed in a
  `changelog.d/<type>/` subdirectory are silently ignored by the build and are
  now rejected by the changelog gate.

## Verification

Release prep passed:

- `uv run poe ci`
- `uv run poe test-browser-chrome`
- `make release-preflight`

## Links

- [PyPI](https://pypi.org/project/chirp-ui/)
- [GitHub](https://github.com/lbliii/chirp-ui)
- [CHANGELOG](https://github.com/lbliii/chirp-ui/blob/main/CHANGELOG.md)
