alouette
Version:
A modern, customizable design system built on top of NativeWind v5 with configurable defaults
27 lines (23 loc) • 903 B
text/typescript
import { useEffect, useState } from "react";
import { AccessibilityInfo } from "react-native";
import { useReducedMotion as useReducedMotionAtLaunch } from "react-native-reanimated";
/**
* The OS reduce-motion setting, live. Starts from the value Reanimated reads
* synchronously at launch, so the first render does not animate while an
* async `AccessibilityInfo.isReduceMotionEnabled()` would still be pending;
* the change event covers the setting toggled afterwards.
*/
export function useSystemReducedMotion(): boolean {
const reducedMotionAtLaunch = useReducedMotionAtLaunch();
const [reducedMotion, setReducedMotion] = useState(reducedMotionAtLaunch);
useEffect(() => {
const subscription = AccessibilityInfo.addEventListener(
"reduceMotionChanged",
setReducedMotion,
);
return () => {
subscription.remove();
};
}, []);
return reducedMotion;
}