aura-glass
Version:
A comprehensive glassmorphism design system for React applications with 142+ production-ready components
59 lines (56 loc) • 1.71 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { useState, useEffect, useContext, createContext } from 'react';
const defaultContextValue = {
reducedMotion: false,
setReducedMotion: () => {},
defaultSpring: {
stiffness: 100,
damping: 10,
mass: 1
}
};
const AnimationContext = /*#__PURE__*/createContext(defaultContextValue);
const AnimationProvider = ({
children,
defaultReducedMotion = false,
defaultSpring = {
stiffness: 100,
damping: 10,
mass: 1
}
}) => {
const [reducedMotion, setReducedMotion] = useState(defaultReducedMotion);
// Check for prefers-reduced-motion
useEffect(() => {
if (typeof window !== 'undefined') {
const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
setReducedMotion(mediaQuery.matches);
const handleChange = e => {
setReducedMotion(e.matches);
};
mediaQuery.addEventListener('change', handleChange);
return () => mediaQuery.removeEventListener('change', handleChange);
}
}, []);
const contextValue = {
reducedMotion,
setReducedMotion,
defaultSpring
};
return jsx(AnimationContext.Provider, {
value: contextValue,
children: children
});
};
const useAnimation = () => {
const context = useContext(AnimationContext);
if (!context) {
// Instead of throwing, return default values to prevent crashes
console.warn('useAnimation must be used within an AnimationProvider. Using default values.');
return defaultContextValue;
}
return context;
};
const useAnimationContext = useAnimation;
export { AnimationContext, AnimationProvider, useAnimation, useAnimationContext };
//# sourceMappingURL=AnimationContext.js.map