@workspace/ui
Every change, on the record.
Every consumer-facing change to Faber UI, generated from changesets on release. Each entry links to the commit and pull request that shipped it.
- Latest
- v0.3.0
- Released
- Sep 29, 2026
- Releases
- 5
- Changes
- 38
38 of 38 changes
v0.3.0
LatestminorMinor changes6
Calendar keeps day buttons mounted across renders and renders week numbers as row headers.
CalendarDayButtonno longer takes alocaleprop, and itsdata-dayattribute is now the ISO date (2026-09-28) instead of a locale-formatted string that could differ between server and browser.NavigationMenu drops the broken
NavigationMenuIndicatorexport, highlights active links throughdata-active, and times its popup with the kit motion tokens.NavigationMenuIndicatorwrapped the trigger icon part and styled attributes Base UI never sets, so it rendered nothing useful. Remove any import of it.Popover, DropdownMenu, ContextMenu, Menubar, Select, Combobox, HoverCard, Tooltip, Dialog and AlertDialog enter and exit with interruptible transitions on the kit easing tokens, and
tw-animate-cssis no longer a dependency.A popup closed halfway through opening now reverses from where it is instead of restarting. Anchored popups scale from their trigger with
motion-popup, dialogs usemotion-modaland their overlaysmotion-backdrop, exits run faster than entrances, and reduced motion now collapses the scale and travel of every popup. Select skips the animation while its list is aligned over the trigger. If you target the oldanimate-in,fade-in-0orzoom-in-95classes, move your overrides todata-starting-styleanddata-ending-style.Every component now installs the
themeitem, so the tokens and utilities it relies on reach your project instead of silently doing nothing.The first
shadcn addcopies the stylesheet intostyles/faber/. Import it once from your global CSS, after Tailwind:@import "tailwindcss"; @import "shadcn/tailwind.css"; @import "../styles/faber/index.css";Remove the default
:root,.darkand@theme inlineblocks thatshadcn initgenerated, or keep them after the import only to override values.TooltipProvider now waits 400ms before the first tooltip opens, and tooltips opened right after it appear instantly with no animation.
Pass
delay={0}toTooltipProviderto keep the previous behavior.Button, Toggle, Tabs and NavigationMenu ship their style configs from
@workspace/ui/lib/*-variantsso component files export only components.buttonVariants,toggleVariants,tabsListVariantsandnavigationMenuTriggerStyleare no longer exported from the component modules. Update imports:import { Button } from "@/components/ui/button"; import { buttonVariants } from "@/lib/button-variants";shadcn addinstalls the matchinglib/*-variantsfile alongside the component.
Patch changes25
Accordion panels open and close with an interruptible height transition on the kit tokens.
Button presses scale to
--scale-presswith thepressutility instead of shifting down a pixel.Carousel follows the document direction, maps arrow keys to its orientation, and leaves arrow keys alone inside inputs within a slide.
ChartContainer accepts only color values made of safe characters, closing an injection path through the generated style tag.
CommandDialog opens and closes without animation, as a keyboard-invoked palette should, and its accessible title renders inside the dialog.
ContextMenu highlights a submenu trigger while its submenu is open.
The
darkvariant matches with zero specificity, so hover and state classes such ashover:bg-input/50on the outline Button also apply in dark mode.Checkbox, RadioGroup and Label show their disabled styles, which previously never applied because the controls render a
span.BreadcrumbEllipsis and PaginationEllipsis expose their "More" labels to screen readers.
The font tokens fall back to the system stacks when
--font-sans-src,--font-mono-srcor--font-serif-srcis not defined.Input, Textarea, NativeSelect, CommandInput and ComboboxChipsInput use 16px text on small screens so iOS Safari no longer zooms the page on focus.
MessageAvatar lines up with the last bubble when a MessageFooter is present, instead of sitting 8px too high.
MessageFooter now has a fixed
16pxline height and the avatar shifts by exactly the footer plus the content gap.Transitions using
transition-controlnow animate, Drawer and Sheet use the drawer curve, the Sidebar collapse eases instead of moving linearly, and MessageScroller exits faster than it enters.transition-controlset onlytransition-property, so the colors it covered changed instantly. It now readsduration-*andease-*like the built-in transition utilities.Tabs and ToggleGroup pass
orientationto Base UI, so vertical layouts getaria-orientationand Up/Down arrow navigation.Spinner and other
animate-spinloaders pulse under reduced motion instead of stopping after one turn, and the new--travel-smand--travel-lgtokens collapse movement to zero.Registry components import from your own aliases, such as
@/components/ui/buttonand@/lib/utils, instead of the unresolvable@workspace/ui/...paths.Sheet, Drawer and Sidebar keep the border and the slide direction on the side named by
side, which were reversed in right-to-left layouts.Nested
data-brandanddata-neutralscopes now re-theme semantic tokens such as--primary, and a nested neutral no longer resets the brand around it.SidebarProvider ignores the toggle shortcut while typing in a field, accepts it with Shift or Caps Lock, and no longer re-subscribes on every toggle; Sidebar forwards
classNameand props on mobile.Slider renders a single thumb when
valueordefaultValueis a number.Slider thumb is a solid circle at every radius preset, filled with
foregroundin dark mode instead of rendering as a dark hollow square.The thumb used
rounded-md, which only looks round when--radiusis large; at the default0.3remit rendered as a rounded square. It now usesrounded-full, matching the Switch thumb.KbdGroup is typed as a
kbdelement, Combobox imports its Base UI subpath, themotionlib mirrors theexiteasing andtraveltokens, and thechartitem declares itsreact-ispeer.Unused classes that Base UI and Sonner never target were removed from Toggle, ResizablePanelGroup, Toaster and InputOTP, along with the unused
hairline,mask-fade-t,press-subtleandtransition-control-transformutilities.Translucent menu surfaces keep their background blur while a long list scrolls.
Switch sits at a whole-pixel
16pxheight, so its thumb is inset1pxon every side instead of rendering off-center.The default size was
16.6pxtall, which left a fractional vertical gap that browsers rounded unevenly. Thesmsize keeps its dimensions.useIsMobile reads the viewport through
useSyncExternalStore, so Sidebar no longer mismatches on hydration when a page loads on a phone.
- minor
- patch
- patch
- minor
Minor changes2
Registry items now publish exact dependency versions. Previously every item listed bare package names, so
shadcn addinstalled the latest release of@base-ui/react,recharts, and twelve others — versions the components were never tested against. The registry build now reads versions frompackages/ui/package.json, and warns when a component imports a package that is not declared there.Accessibility, correctness, and token fixes across the kit, from a full code-smell audit.
Calendar no longer remounts its subcomponents on every render (
Root,ChevronandWeekNumberare hoisted; theDayButtonwrapper is memoized), formats the month dropdown withdate-fnsinstead of the runtime locale, and focuses days without scrolling. Carousel removes itsreInitlistener on unmount.SidebarMenuSkeletonwidths are deterministic across server and client,SidebarRailis keyboard-focusable with its accessible name intact, and the sidebar cookie is nowSameSite=Lax(+Secureon https).Overlays resolve through the new
bg-overlaytoken instead of a fixedbg-black/80, the slider thumb usesbg-background, and new--secondary-hover,--muted-hoverand--bubble-tinted(-hover)semantic tokens replace inlinecolor-mix()/oklch()in Button and Bubble.Tableis a Server Component again withscope="col"headers,Fieldonly setsrole="group"when labelled, andEmptyDescriptionrenders thepits type always promised.ChartStylesanitizes config keys/colors and the chart id, and the recharts overrides target stable shape classes instead of default presentation attributes.durationSecderives fromduration, the deprecatedComponentPropsWithRefis gone, and the unusedzoddependency is removed.
Patch changes2
Restore open and close animations on every menu-family popup.
animate-none!compiled toanimation: none !important, which beat the non-importantanimationshorthand thatdata-open:animate-insets, so DropdownMenu, ContextMenu, Menubar, Select and Combobox opened and closed as hard cuts. MenubarContent additionally had no exit classes at all, and Dialog now uses the same 200ms as the shadcn reference rather than 120ms.HoverCard was the only component with a non-zero
alignOffset. Withalign="center"Base UI maps it onto Floating UI'scrossAxis, so the card sat 4px off-centre from its trigger on every open.Interactive elements built from divs now get a pointer cursor: the base rule only covered
buttonand[role="button"], while menu items, options, tabs and switch/checkbox/radio roles either inherited the default arrow or explicitly setcursor-default.Also removes eight dead
data-[motion=*]classes from NavigationMenu. Those are Radix attributes that Base UI never emits, and they compiled to twelve CSS rules that could never match.Reformat component sources to match the repository Prettier configuration, and add a
format:checkscript so drift is caught in CI rather than accumulating.
No changes match this filter.
Generated from packages/ui/CHANGELOG.md. Versioning follows semver: minor releases carry changes consumers must adapt to, patches are fixes and additions.