Browse docs
Browse docs
Released 2026-05-16 · First public beta
First public beta of @dashforge/tw, the Tailwind ecosystem of Dashforge.
Sixteen components shipped across forms (10), layout (4), and providers (2)
— every component is bridge-integrated, RBAC-aware, StrictMode-safe, and
covered by unit + perf + re-render budget tests (317 tests total at
release).
This is the starting line for the TW catalogue. The Foundation layer
(Typography, Box, Stack, Grid, Container, Divider, AspectRatio,
VisuallyHidden) lands in 0.2.0-beta.
All three TW companion packages went from private: true (workspace
scaffolding) to publishable at this release.
| Package | What changed |
|---|---|
@dashforge/tw | First public release. 16 components: Button, TextField, Checkbox, Switch (Tier-1) + RadioGroup, Textarea, NumberField, OTPField (Tier-2) + Autocomplete, DateTimePicker (Tier-3) + Breadcrumbs, LeftNav, TopBar, AppShell (Layout) + ConfirmDialogProvider, SnackbarProvider (Providers). |
@dashforge/tw-theme | First public release at 0.1.0-beta. dashforgePreset() Tailwind preset + <DashforgeTailwindProvider> runtime (Valtio store + CSS-vars injection on <html>). |
@dashforge/tw-tokens | First public release at 0.1.0-beta. TypeScript-only token surface: TWTheme, TWColorScale (50–950 per intent), TWSpacingScale, TWRadiusTokens, TWFontSizeTokens, defaults for light + dark. |
Bridge layer + MUI side were on the coordinated 0.2.3-beta release of the
same day (see 0.2.3-beta + tw 0.1.0-beta entry in the top-level CHANGELOG for the full picture).
Button (F3) — variant + size + color
matrix, polymorphic asChild slot, RBAC access prop,
loading/disabled states.TextField (F3) —
bridge-integrated single-line input with 7-slot taxonomy, stacked /
inline layouts, error gating via Form Closure v1.Checkbox (F3) — Radix Checkbox
primitive, bridge wiring, RBAC + visibility.Switch (F3) — Radix Switch
primitive, same contract as Checkbox.RadioGroup (F4) — Radix RadioGroup with row / stacked layouts.Textarea (F4) — multi-line variant of TextField, vertical resize
support.NumberField (F4) — locale-aware number input, optional stepper
buttons, min / max / step constraints.OTPField (F4) — segmented one-time-code input (numeric /
alphanumeric), sanitized paste.Autocomplete (F5-A → F5-A-bis) — single + multi-select combobox;
generic option shape via getOptionValue / getOptionLabel; free-solo
(Enter / blur commits typed text); async runtime via
loadOptions(query) with debounce + loading row + race-safe fetch
generation. Custom pure-React implementation (no
react-aria-components) for deterministic state ownership.DateTimePicker (F5-B) — native HTML5 inputs (date / time /
datetime-local), min / max / step forwarded, ISO 8601 ⇔
native input value conversion, color-scheme: light dark for OS-icon
legibility in dark mode.Breadcrumbs (F6) — router-agnostic crumb trail with
middle-collapse (maxItems, itemsBeforeCollapse,
itemsAfterCollapse), polymorphic linkComponent,
aria-current="page" on the active crumb.LeftNav (F6) — sidebar with flat items + collapsible groups;
rail mode (collapsed + sr-only labels + tooltips); per-row RBAC;
controlled / uncontrolled group expansion; brand + footer slots.TopBar (F6) — sticky <header> with start / center / end
slots; renders as <header> (banner landmark) or <div> via
asDiv.AppShell (F6) — top-level orchestrator wiring header + nav
(desktop inline + mobile drawer) + main + footer; body
scroll-lock + Escape close + backdrop click; responsive switch at
the md breakpoint.ConfirmDialogProvider + useConfirm() (F7) — imperative
Promise<boolean> confirmation modal on the native <dialog>
element + showModal() (AAA-grade a11y + focus trap + Escape free
from the browser); FIFO request queue.SnackbarProvider + useSnackbar() (F7) — transient
notifications with severity intent, auto-dismiss, dedup, position
control.private: true removed from all three TW packages in nx.json
release.projects so they join the publishable set. Versioned
independently from the bridge group + MUI side from this release on.@dashforge/forms +
@dashforge/rbac + @dashforge/ui-core) with the MUI side. Tokens,
theme runtime, and components are duplicated intentionally — no
shared "lowest common denominator" headless layer.tailwind-variants; MUI components use Emotion via the
MUI v9 styling system.First public release — no migration. Install:
pnpm add @dashforge/tw @dashforge/tw-theme @dashforge/tw-tokensConfigure your tailwind.config.js per
Installation, mount
<DashforgeTailwindProvider> at the app root, and import components
from @dashforge/tw.
Source links: per-package CHANGELOG · top-level CHANGELOG · npm · git tag @dashforge/[email protected]