Releases: wavedotso/wave-ui
v0.5.0
Minor Changes
-
650d6cc: A complete, token-driven motion system — and the cleanups behind it.
Every overlay and interactive control now animates through a small set of CSS recipes instead of ad-hoc
tw-animate-cssclasses. They're pure CSS (no JS), driven by Base UI'sdata-starting-style/data-ending-stylelifecycle, share one easing curve (circ-out), and fully collapse underprefers-reduced-motion:motion-slide— flyouts that open from a trigger (tooltip, popover, menu + submenu, select, context-menu + submenu, autocomplete, combobox popup): fade + blur + a directional slide keyed to the trigger'sdata-[side].motion-scale— fade + blur + scale. Powers dialog & alert-dialog content (a subtle zoom-in) and the combobox chevron ↔ clear cross-fade.motion-fade— fade + blur, no movement. A general-purpose "fade in place" for any surface that should carry the blur signature without sliding or scaling. (Available as a utility; not wired to a component by default.)motion-scrim— opacity only, for full-screen backdrops. Animating blur across the whole viewport janks, so the dim just fades; the frosted-glass look comes from a staticbackdrop-filterfaded by this opacity.motion-color— interaction-state transitions on controls (hover / focus / pressed / checked): color, background, border, ring.
They read from one set of overridable
:roottokens —--duration,--ease,--blur,--scale,--offset,--stagger— so you can retune the whole library's feel from your own:root. (Small icon targets pin an absolute blur via--motion-scale-blur, so they stay crisp no matter how you set the surface--blur.)Behavior changes to know about
- Popups animate differently now. Every flyout uses the recipes above (blur + directional slide / scale / fade) instead of the old zoom-and-slide, and dialogs now zoom in. If you targeted the old
data-open:animate-in/zoom-in-95/slide-in-from-*classes, they're gone. transition-allremoved library-wide. Controls transition only the properties that actually change (color, background, border, ring), so unrelated changes — layout, or transitions you add viaclassName— no longer animate by accident.Progressanimateswidth; theSidebarrail is timed to the panel it borders.Animatedefaults changed.AnimateInis snappier (4px / 0.15s);AnimateOnViewis tuned for scroll reveals (16px / 0.4s). The opt-inspringprop keeps its overshoot. Pass props to override.- Disabled
Sliderfixed. A disabled slider no longer shows a hover ring and now showscursor-not-allowed— it was keyed off:disabledon a non-form element, which never matched. The enabled thumb uses the--cursor-clickablecursor. Select—alignItemWithTriggernow animates on open like the other modes (the open animation is no longer suppressed).
v0.4.1
Patch Changes
-
5df74c3: Replace
transition-allwith explicit per-element transition properties across Button, Badge, Toggle, Switch, Tabs, Accordion, InputOTP, Progress, and the Sidebar rail.Interactive controls now transition only
color,background-color,border-color, andbox-shadow, so focus-ring and hover feedback still animate but unrelated property changes (e.g. layout shifts, or transitions a consumer adds viaclassName) no longer animate unexpectedly. Progress now animateswidth; the Sidebar rail's motion is synced to the panel it borders. This also lets the library's motion recipes (motion-fade/motion-scale/motion-rise) own theirtransitiondirectly, since nothing in the utilities layer clobbers it anymore.
v0.4.0
v0.3.0
Minor Changes
-
9ed70d5: Interactive elements now use a
pointercursor by default, via a single--cursor-clickabletoken. Buttons, toggles, menu/select/combobox/autocomplete/context-menu items, accordion & collapsible triggers, tabs, checkbox, switch, and radio all share it.For native / HIG behavior, set it back in your global CSS. One line flips the whole library with
root { --cursor-clickable: default; }.Real links keep their own pointer regardless and disabled controls keep not-allowed.
v0.2.0
Minor Changes
-
aab9fa8: Correctness fixes, accessibility fixes, and a few consumer-facing contract changes.
Breaking
- Sidebar: removed the
data-stateattribute — now uses Collapsible's nativedata-open/data-closed. Migrate selectors:[data-state=collapsed]→[data-closed],[data-state=expanded]→[data-open]. - Table: a selected
TableRownow styles offaria-selectedinstead ofdata-state="selected". Setaria-selected="true"on selected rows. - Accordion:
[data-slot="accordion-content"]now targets the inner content region; the outer animated panel is[data-slot="accordion-panel"]. - Alert: the icon layout is triggered by
data-iconon the icon, not auto-detected. Adddata-icon="inline-start"to the alert's leading icon. - Tooltip:
TooltipProviderno longer forcesdelay={0}; it inherits Base UI's 600ms hover-intent delay. Passdelayto customize.
Fixed
- Drawer: swipe-to-dismiss and touch scroll-lock now work (missing
Drawer.Viewportwrapper). - RSC:
Badge,Breadcrumb,ButtonGroup,Itemnow declare"use client"(they use theuseRenderhook and threw in server trees). - Combobox: dropdown no longer clips long options — grows from trigger width up to available width.
- Select: keyboard-highlighted items now style correctly (uses
data-highlighted). - Context menu: submenus position/size consistently with regular menu submenus and merge a passed
className. - Removed dead Radix-style
data-[state=*]CSS intooltip/toggle(toggle now usesdata-pressed); unified overlay backdrop animations acrossdialog/alert-dialog/drawer. - Corrected the misleading
disablePointerDismissalJSDoc onDialog.
Added
- New
data-slotstyling hooks:context-menu-positioner,context-menu-checkbox-item-indicator,context-menu-radio-item-indicator,tooltip-positioner,select-item-text,select-item-indicator,combobox-item-indicator,accordion-panel,drawer-drag-handle.
- Sidebar: removed the