What's new

Changelog

v1.1.2Latest2026-06-02
Fixed
  • Reflection jank on Safari desktop — reflection container is now promoted to a GPU compositing layer via translateZ(0) and will-change: transform, eliminating per-frame rasterization of the gradient mask
  • SVG reflection filter (feTurbulence) auto-disabled on Safari to avoid GPU stall
  • Cards overflow on mobile — the component now measures its container via ResizeObserver and auto-scales itemWidth, itemHeight, stackSpacing, and centerGap proportionally so the carousel fits within the available width. Desktop layout is unchanged (scale is capped at 1).
  • Division-by-zero guard added to the scale calculation when itemWidth={0} is passed.
v1.1.12026-05-29
Fixed
  • Major mobile lag on iOS Safari/Brave caused by the SVG feTurbulence reflection filter — now auto-disabled on touch/narrow screens
  • Mobile still renders a CSS-only mirrored reflection (gradient mask, no SVG filter, no blend mode) when enableReflection is on
v1.1.02026-05-28
Added
  • enableAudio prop — procedural click sound with stereo panning and velocity sensitivity
  • reduceMotion prop — pass true to disable all 3D transforms and animations, false to always enable them, or omit to let the OS accessibility setting decide
  • SSR-safe AudioContext with webkit fallback
Improved
  • Smoother drag tracking during fast swipes
  • Debounced wheel scroll to prevent multi-step skipping
  • Drag handlers now use scrollX.get() instead of springX.get() for more accurate position tracking during fast drags
  • onIndexChange no longer fires on initial mount
v1.0.02026-05-25
Added
  • renderImage prop for custom image rendering in the registry component
  • AI assistant dropdown for component documentation
Improved
  • Performance optimizations: React.memo, flattened useTransform chains, useCallback/useMemo on handlers, lazy image loading on non-active cards
  • AnimatePresence replaces key-based title remount for smoother transitions
  • Fixed initialIndex stale closure via ref
  • Docs page restructured from /get-started into a dedicated /docs route
Chore
  • Added sync:npm script to keep npm package in sync
v0.3.02026-02-15
Changed
  • Renamed scrollSensitivity to scrollThreshold for clarity.
  • scrollThreshold now clearly represents the wheel delta required before snapping.
v0.2.02026-02-15
Added
  • enableScroll prop (enabled by default) for horizontal wheel-based snapping
  • scrollSensitivity prop (default 100) to control wheel delta threshold before snapping
Improved
  • /get-started usage examples now include enableScroll and scrollSensitivity
  • /get-started props table now documents the new scroll props and defaults
  • Interactive playground now includes enableScroll toggle and scrollSensitivity slider controls
Fixed
  • Stable wheel effect dependency handling to avoid changing useEffect dependency array size between renders
v0.1.42026-02-09
Added
  • enableClickToSnap prop (enabled by default)
  • Click-to-snap interaction support
Notes
  • Users can disable click snapping by setting enableClickToSnap={false}
v0.1.32026-02-03
Improved
  • Performance optimizations
  • Smoother motion handling
v0.1.22026-02-02
Fixed
  • Minor bugs
Improved
  • README documentation clarity
v0.1.12026-02-02
Initial Release
  • Spring-based motion system
  • Keyboard, touch, and drag support
  • Hardware-accelerated 3D transforms
  • Zero layout shift architecture
  • Tailwind CSS styling
  • Dark mode compatibility
  • shadcn CLI and npm install support