Skip to main content

· v0.7.0

RTL-ready props and flash-free themes

Consistent variant and RTL prop names, server-resolved theme palettes, and hardened overlays, focus, and keyboard handling.

New features

  • Added onModeChange and attributes to ThemeScope, and onColorModeChange to VortexProvider.
  • Added the flare theme override, which also themes primary buttons.
  • Exported DrawerSnapPoint.

Improvements

  • Resolved ThemeScope palettes in server-rendered markup, and saved and system color modes before hydration, so themed scopes no longer flash on load.
  • Made a controlled colorMode own its boundary. Setters rendered beneath it have no effect.
  • Changed focus rings to an outline with a transparent gap. Inset rings use currentColor.
  • Improved Drawer keyboard access, focus order, snap offsets, and nested release. Drawer warns in development when a handle is misplaced or duplicated.
  • Improved ZoomImage focus: it manages dialog focus, focuses the close button during keyboard navigation, and uses the custom image renderer in its overlay.
  • Gave the Toast region an accessible name. Toast actions keep keyboard handling and focus visibility.
  • Improved Interactive semantics: it honors explicit roles, keeps native semantics and focus rings, and resolves type only when rendering a <button>.

Bug fixes

  • Fixed Interactive links activating with Space.
  • Fixed Badge action and dismiss controls sharing one control. Unrecognised attributes stay on the badge root.
  • Fixed Card firing duplicate click callbacks.
  • Fixed Floating attribute forwarding, style precedence, rem-based spacing, and trigger-width measurement. Open callbacks no longer fire while disabled.
  • Fixed Select, TextField, and TextArea focus, disabled, and placeholder styling. The multi-select search input keeps a minimum width while closed.
  • Fixed Avatar fallback fill bleeding around photos. Its border now paints above the image.
  • Fixed keyboard shortcuts not dispatching outside unrelated scopes.
  • Fixed body-xs font weights and the heading-sm desktop line height. The primary border color now uses brandPrimary500.

Breaking changes

  • Required React 19. The react and react-dom peer dependencies are now ^19.
  • Required Node >=22.12.0 for the vortex CLI.
  • Renamed the visual type prop to variant on Avatar, Badge, BreakpointsIndicator, Select, Shortcut, TextArea, and TextField, and to layout on Alert and Toast.
Before → after
<Badge type="outline" />
<Badge variant="outline" />

<Alert type="inline" />
<Alert layout="inline" />
Before → after
<Button leftIcon={Bolt} rightIcon={Arrow} />
<Button startIcon={Bolt} endIcon={Arrow} />

<Link href="" isExternal />
<Link href="" openInNewTab />
  • Renamed Floating positions left-* and right-* to start-* and end-*. They now mirror in RTL, and submenus default to end-top.
  • Removed forcePosition from Floating, Popover, and DropdownMenu. Use fallbackPositions={false} instead. Removed fallbackMinWidth, which had no effect.
  • Removed TextField.Field, TextField.StartSlot, and TextField.EndSlot, along with their prop types.
  • Restricted Drawer snap points to numbers or px strings. "50%" previously rendered as 50px.
  • Limited Drawer.Close render-prop attributes to onClick.
  • Renamed the themes/overrides/reddit/* export to themes/overrides/flare/*.