UNPKG

@atlaskit/motion

Version:

A set of utilities to apply motion in your application.

37 lines (36 loc) 1.45 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useIsReducedMotion = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _bindEventListener = require("bind-event-listener"); var _isMatchMediaAvailable = require("./is-match-media-available"); var _isReducedMotion = require("./is-reduced-motion"); /** * A React hook version of {@link isReducedMotion}. * Useful for React components that need to re-render if the user's motion * preference changes at runtime. */ var useIsReducedMotion = exports.useIsReducedMotion = function useIsReducedMotion() { var _useState = (0, _react.useState)(_isReducedMotion.isReducedMotion), _useState2 = (0, _slicedToArray2.default)(_useState, 2), prefersReducedMotion = _useState2[0], setPrefersReducedMotion = _useState2[1]; (0, _react.useEffect)(function () { if (!(0, _isMatchMediaAvailable.isMatchMediaAvailable)()) { return; } var mediaQueryList = window.matchMedia('(prefers-reduced-motion: reduce)'); var onChange = function onChange(event) { return setPrefersReducedMotion(event.matches); }; return (0, _bindEventListener.bind)(mediaQueryList, { type: 'change', listener: onChange }); }, []); return prefersReducedMotion; };