diff --git a/package.json b/package.json
index fc8f058b..73b29f47 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,15 @@
"stylelint": {
"extends": "stylelint-config-recommended-scss",
"rules": {
- "no-descending-specificity": null
+ "no-descending-specificity": null,
+ "media-feature-name-no-unknown": [
+ true,
+ {
+ "ignoreMediaFeatureNames": [
+ "prefers-reduced-motion"
+ ]
+ }
+ ]
}
},
"eslintConfig": {
diff --git a/src/components/layers/Collapse.jsx b/src/components/layers/Collapse.jsx
new file mode 100644
index 00000000..aeaa09b0
--- /dev/null
+++ b/src/components/layers/Collapse.jsx
@@ -0,0 +1,30 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import Collapse from 'react-collapse'
+import accessibility from '../../libs/accessibility'
+
+
+export default class CollapseAlt extends React.Component {
+ static propTypes = {
+ isActive: PropTypes.bool.isRequired,
+ children: PropTypes.element.isRequired
+ }
+
+ render() {
+ if (accessibility.reducedMotionEnabled()) {
+ return (
+
+ {this.props.children}
+
+ )
+ }
+ else {
+ return (
+
+ {this.props.children}
+
+ )
+ }
+ }
+}
+
diff --git a/src/components/layers/LayerEditorGroup.jsx b/src/components/layers/LayerEditorGroup.jsx
index 46788769..e132dd59 100644
--- a/src/components/layers/LayerEditorGroup.jsx
+++ b/src/components/layers/LayerEditorGroup.jsx
@@ -1,7 +1,8 @@
import React from 'react'
import PropTypes from 'prop-types'
-import Collapse from 'react-collapse'
import Collapser from './Collapser'
+import Collapse from './Collapse'
+
export default class LayerEditorGroup extends React.Component {
static propTypes = {
@@ -22,7 +23,7 @@ export default class LayerEditorGroup extends React.Component {
-
+
{this.props.children}
diff --git a/src/libs/accessibility.js b/src/libs/accessibility.js
new file mode 100644
index 00000000..095e9538
--- /dev/null
+++ b/src/libs/accessibility.js
@@ -0,0 +1,12 @@
+import lodash from 'lodash'
+
+
+// Throttle for 3 seconds so when a user enables it they don't have to refresh the page.
+const reducedMotionEnabled = lodash.throttle(() => {
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches
+}, 3000);
+
+
+export default {
+ reducedMotionEnabled
+}
diff --git a/src/styles/_input.scss b/src/styles/_input.scss
index da3cccff..90e84ed3 100644
--- a/src/styles/_input.scss
+++ b/src/styles/_input.scss
@@ -125,6 +125,10 @@
border-width: 2px;
border-color: $color-gray;
transition: background-color 0.1s ease-out;
+
+ @media screen and (prefers-reduced-motion: reduce) {
+ transition-duration: 0ms;
+ }
}
&-icon {
diff --git a/src/styles/_layer.scss b/src/styles/_layer.scss
index 08cbd457..e3855eab 100644
--- a/src/styles/_layer.scss
+++ b/src/styles/_layer.scss
@@ -43,6 +43,10 @@
-webkit-transition: opacity 600ms, visibility 600ms;
transition: opacity 600ms, visibility 600ms;
+ @media screen and (prefers-reduced-motion: reduce) {
+ transition-duration: 0;
+ }
+
@include flex-row;
}