@mui/x-charts
Version:
The community edition of the Charts components (MUI X).
42 lines (39 loc) • 1.53 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useReducedMotion = void 0;
var _web = require("@react-spring/web");
/**
* Returns `boolean` or `null`, used to automatically
* set skipAnimations to the value of the user's
* `prefers-reduced-motion` query.
*
* The return value, post-effect, is the value of their preferred setting
*/
const useReducedMotion = () => {
// Taken from: https://github.com/pmndrs/react-spring/blob/02ec877bbfab0df46da0e4a47d5f68d3e731206a/packages/shared/src/hooks/useReducedMotion.ts#L13
(0, _web.useIsomorphicLayoutEffect)(() => {
if (!window.matchMedia) {
// skip animation in environments where `window.matchMedia` would not be available (i.e. test/jsdom)
_web.Globals.assign({
skipAnimation: true
});
return () => {};
}
const mql = window.matchMedia('(prefers-reduced-motion)');
const handleMediaChange = event => {
_web.Globals.assign({
// Modification such the react-spring implementation such that this hook can remove animation but never activate animation.
skipAnimation: event.matches || undefined
});
};
handleMediaChange(mql);
// MatchMedia is not fully supported in all environments, so we need to check if it exists before calling addEventListener
mql.addEventListener?.('change', handleMediaChange);
return () => {
mql.removeEventListener?.('change', handleMediaChange);
};
}, []);
};
exports.useReducedMotion = useReducedMotion;
;