Minor Changes
- b7122c0: feat(DST-1641): add
ErrorState, the error sibling ofEmptyState: same anatomy (title,description,action,headingLevel), plus typed DOM passthrough (role,tabIndex,ref) for error-boundary fallbacks.
Patch Changes
-
b7122c0: fix(DST-1666):
DateFormatapplies its documentedtabulardefault.What changed:
tabularnow defaults totrue, so<DateFormat value={date} />renders withtabular-nums. Previously the prop was destructured without a default, so it wasundefinedunless passed explicitly and the class was never applied.- Opting out with
tabular={false}no longer leaves an emptyclass=""attribute behind, matchingNumericFormat.
Why:
Three places already documented the default as
true— the@default trueJSDoc that feeds the docs site props table, the prose in theDateFormatdocs ("To disable it, settabular={false}"), andNumericFormat, which has always defaulted it correctly. Only the implementation disagreed, so consumers reading the docs and relying on the default got misaligned digits in table columns with no indication why.Impact:
This is a visible rendering change anywhere
DateFormatis used without an explicittabularprop, which in practice is everywhere — no call site in this repo passed it. Digits shift to uniform width, which is what the documentation always promised. Passtabular={false}to keep proportional digits. -
b7122c0: feat(DST-1609): two-level sidebar navigation with
Sidebar.RailandSidebar.RailItemAdds a two-level navigation mode to the sidebar: a persistent rail of icon-first
top-level destinations next to a panel showing the active section's sub-navigation.
ASidebar.RailItemwrapping aSidebar.Navis a section that shows a panel. One with
only anhrefis a direct link, and one insideSidebar.Footerpins to the bottom of the
rail. Itsactiveprop overrides href matching for pages the URL can't identify.
Collapsing (toggle or Cmd/Ctrl+B) hides the panel while the rail narrows to an icon
strip, so top-level navigation always stays available. On small screens the rail
renders as the same single-column drawer as the plain sidebar: sections drill in
(opened at the active section) and links close the drawer.<AppShell>switches to a full-width top bar automatically when a rail is present
(pure CSS via:has()), so the brand never moves when the panel collapses.Sidebar.Togglegainsvariant="rail"for its top-bar placement between the
brand and the breadcrumbs.- New theme tokens:
--spacing-topbar(the shell's shared vertical datum for the top bar
height, sidebar brand row, and rail sticky offset), the rail column widths
--spacing-rail/--spacing-rail-collapsed/--spacing-rail-panel, and
--spacing-touch-target(44px minimum row height on small screens, shared by the
drawer's nav rows and the existing Tray-mode ListBox/Menu options). - Idle single-column nav labels darken a step (new
--color-secondary-boldtoken,
charcoal-700) so they clearly out-rank the quiet group-label captions. - Keyboard: the rail supports arrow-key (and Home/End) movement on top of its flat
tab order, and the section panel's tab stop re-syncs to the current page when the
route changes, so Tab re-enters at the active item. - The
TopNavigationbottom edge is now an always-on border. The non-reusable
ui-scroll-edgeandui-sidebar-seam-headerutilities are removed, so the sticky
bar and the sidebar header carry a plain border instead. - The
AppShellheader row is now sizedauto(was a fixed3.5rem), so a shell
without aTopNavigationno longer reserves an empty header band, so the row
collapses to the height of its content. - The shell's viewport-height claims (
AppShellgrid, sidebar and rail asides) read
the new--ui-viewport-heightcustom property with a100dvhfallback. Set it on a
wrapper to render the shell inside a bounded container (embedded previews, demos)
instead of the browser viewport. Nothing changes when it is unset.
-
b7122c0: fix(DST-1434): suppress React hydration warnings for
DateFormatandNumericFormatoutput. Intl formatting can legitimately differ between server and client (locale detection, ICU version differences in range separators), so the mismatch is expected and no longer fails hydration.