Changelog entry
V5 primitives pack B: form controls, loading/empty/error states (Issue #769)
2026-04-02
- Added `Input`, `Select`, `Textarea` React primitives sharing a `FORM_BASE` style constant — forms on migrated pages no longer fall back to browser-default chrome.
- Added `FormField` wrapper (label + hint/error slot) and `InlineError` (`role="alert"`) for consistent field-level error display.
- Added `EmptyState` component with optional icon, title, description, and action slots.
- Enhanced `LoadingSkeleton` with `count` (multi-row) and `variant` (`block`/`text`/`circle`) props and `aria-busy` for screen readers.
- Base CSS layer now gives all raw `<input>`, `<select>`, and `<textarea>` elements full token-based styling (border, radius, padding, placeholder, focus ring, disabled state).
- Added `prefers-reduced-motion` override to disable skeleton pulse animation and fall back to a static dimmed element.