Skip to content

v0.11.0

Choose a tag to compare

@ibrmad ibrmad released this 31 Mar 12:33
· 2 commits to main since this release

Comprehensive UI quality pass

Hardening

  • Fix URL encoding bug in filter-utils (relative date values with colons)
  • Fix hsl() wrapping OKLCH in sidebar outline variant
  • Fix duplicate @layer base in globals.css
  • Add prefers-reduced-motion global rule
  • Add keyboard accessibility to DataTable clickable rows
  • Standardize focus rings on Dialog/Sheet close buttons
  • Add aria-labels to FilterBuilder, FilterMenu, FilterChip controls
  • Fix calendar overflow in FilterMenu popover
  • Add date value editing to FilterChip (was empty dropdown)
  • Auto-close DateRangePicker when both dates selected
  • Add searchable prop to Combobox
  • Replace span role=button with native button in Combobox badges
  • Replace hand-rolled spinners with Spinner component in dialogs
  • Add entityLabel prop to DeleteConfirmationDialog
  • Expand CopyButton touch target
  • Fix useIsMobile SSR hydration flash
  • Throttle useWindowSize via requestAnimationFrame
  • Alias use-sync-external-store/shim to React 19 native export (fixes Vite 8 / Rolldown require() error)

Normalization

  • Convert Tabs from forwardRef to function declarations + data-slot
  • Convert Descriptions from forwardRef to function components + CSS variable grid
  • Remove "use client" from all library files
  • Standardize icon sizing to size-N across 30+ instances
  • Use Button size="icon-sm" in DataTablePagination
  • Align StatusBadge border-radius with design system (rounded-md)
  • Replace transition-all with specific properties on Button, Switch, Tabs, InputOTP, Sidebar

Color & design

  • Brand-green hover/active states on sidebar items with left-edge indicator
  • Brand-tinted active Tabs trigger, selected table rows, Combobox items
  • Brand-green operator pill on FilterChip
  • Brand-tinted ::selection, thin scrollbars, smooth focus ring transitions
  • More tactile button active state

Responsive

  • Fix useIsMobile breakpoint 768→640 to match Tailwind sm:
  • Responsive grid utility for Descriptions (single column on mobile)
  • DateRangePicker: single month + stacked presets on mobile
  • Touch target expansion on FilterBuilder, FilterMenu, FilterChip, Pagination
  • Responsive padding on menu items, search inputs, SelectItem
  • Popover max-width viewport guard
  • Dialog responsive padding + close button min size
  • DetailRow stacks vertically on mobile

Copy & clarity

  • CopyButton: specific toast messages
  • ConfirmationDialog: default variant changed to non-destructive
  • DeleteConfirmationDialog: fix uppercase ambiguity, clearer label
  • FilterMenu: "Filter..." → "Search...", "Pick a date..." → "Custom date"
  • Sidebar: dynamic aria-label based on open/closed state

Simplification

  • Delete icons.tsx (dead Ant Design migration shim)
  • Remove StatusType danger/purple/cyan/pink
  • Remove FieldTitle (zero usages, data-slot collision)
  • Remove DataTable __chevron__ special-case
  • Rename Loader fullScreen → centered (deprecated alias kept)

Build

  • Upgrade Vite 7 → 8
  • Add use-sync-external-store ESM shim (fixes Rolldown CJS require() error)
  • Move react-hook-form from dependencies to peerDependencies

Docs

  • Add .impeccable.md design context
  • Update CLAUDE.md with design context reference

Breaking changes

  • StatusType removed: danger, purple, cyan, pink — use error or pass className
  • FieldTitle removed — use FieldLabel
  • icons.tsx deleted — import icons from lucide-react directly
  • react-hook-form moved to peerDependencies
  • DetailRow colon removed by default — pass showColon to restore