useReducedMotion
ericts-ui/use-reduced-motionFreeHook
A client-safe React hook for reading prefers-reduced-motion and reacting to preference changes.
Install it
npx shadcn@latest add https://ui.ericts.com/r/use-reduced-motion.jsonSource
1"use client";23import { useSyncExternalStore } from "react";45const REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";67function subscribe(onStoreChange: () => void): () => void {8 const mediaQuery = window.matchMedia(REDUCED_MOTION_QUERY);910 mediaQuery.addEventListener("change", onStoreChange);1112 return () => {13 mediaQuery.removeEventListener("change", onStoreChange);14 };15}1617function getSnapshot(): boolean {18 return window.matchMedia(REDUCED_MOTION_QUERY).matches;19}2021function getServerSnapshot(): boolean {22 return false;23}2425export function useReducedMotion(): boolean {26 return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);27}
Files it writes
More from ericts-ui
All 43 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| useElementHeightuse-element-height | ericts-ui | Hooks | Free | no deps | |
| useElementSizeMapuse-element-size-map | ericts-ui | Hooks | Free | no deps | |
| useScrollAnchoruse-scroll-anchor | ericts-ui | Hooks | Free | no deps | |
| useScrollProgressuse-scroll-progress | ericts-ui | Hooks | Free | no deps | |
| useSequencePlayeruse-sequence-player | ericts-ui | Hooks | Free | no deps | |
| useSwipeNavigationuse-swipe-navigation | ericts-ui | Hooks | Free | no deps |
