@shopgate/pwa-ui-material 7.30.0-alpha.7 → 7.30.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Accordion/components/AccordionContent/index.js +51 -2
- package/Accordion/components/AccordionContent/spec.js +32 -1
- package/Accordion/components/AccordionContent/style.js +9 -1
- package/Accordion/index.js +90 -2
- package/Accordion/spec.js +39 -1
- package/Accordion/style.js +47 -1
- package/AppBar/components/Below/index.js +24 -2
- package/AppBar/components/Center/index.js +24 -2
- package/AppBar/components/Field/index.js +39 -3
- package/AppBar/components/Field/style.js +14 -1
- package/AppBar/components/Icon/index.js +43 -3
- package/AppBar/components/Icon/style.js +14 -1
- package/AppBar/components/Left/index.js +24 -2
- package/AppBar/components/Right/index.js +24 -2
- package/AppBar/components/Title/index.js +37 -3
- package/AppBar/components/Title/style.js +11 -1
- package/AppBar/index.js +87 -3
- package/AppBar/style.js +21 -1
- package/BaseDialog/components/Buttons/index.js +28 -2
- package/BaseDialog/components/Buttons/spec.js +28 -1
- package/BaseDialog/components/Content/index.js +21 -2
- package/BaseDialog/components/Content/spec.js +17 -1
- package/BaseDialog/components/Title/index.js +29 -2
- package/BaseDialog/components/Title/spec.js +17 -1
- package/BaseDialog/index.js +39 -2
- package/BaseDialog/spec.js +39 -1
- package/BaseDialog/style.js +64 -1
- package/FloatingActionButton/index.js +56 -3
- package/FloatingActionButton/style.js +33 -1
- package/NavDrawer/components/Divider/index.js +10 -2
- package/NavDrawer/components/Divider/spec.js +9 -1
- package/NavDrawer/components/Divider/style.js +12 -2
- package/NavDrawer/components/Item/index.js +72 -6
- package/NavDrawer/components/Item/style.js +49 -1
- package/NavDrawer/components/Section/index.js +29 -2
- package/NavDrawer/components/Title/index.js +23 -2
- package/NavDrawer/components/Title/style.js +8 -1
- package/NavDrawer/index.js +132 -10
- package/NavDrawer/spec.js +35 -1
- package/NavDrawer/style.js +26 -1
- package/NavDrawer/transition.js +20 -1
- package/SnackBar/index.js +158 -23
- package/SnackBar/style.js +64 -2
- package/colors.js +4 -1
- package/icons/ShareIcon.js +11 -2
- package/index.js +5 -1
- package/jest.config.js +1 -1
- package/package.json +2 -2
|
@@ -1,12 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { UIEvents } from '@shopgate/pwa-core';
|
|
4
|
+
import { withForwardedRef } from '@shopgate/engage/core';
|
|
5
|
+
import { I18n } from '@shopgate/engage/components';
|
|
6
|
+
import styles from "./style";
|
|
7
|
+
|
|
8
|
+
/**
|
|
2
9
|
* The NavDrawerItem component.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
|
|
10
|
+
*/
|
|
11
|
+
class NavDrawerItem extends Component {
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
/**
|
|
15
|
+
* Handles an Item click by executing it's href.
|
|
16
|
+
*/
|
|
17
|
+
this.handleClick = () => {
|
|
18
|
+
UIEvents.emit('navdrawer_close');
|
|
19
|
+
setTimeout(this.props.onClick, 300);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
6
23
|
* Only re-render when the label prop changes.
|
|
7
24
|
* @param {Object} nextProps The next component props.
|
|
8
25
|
* @returns {boolean}
|
|
9
|
-
*/
|
|
26
|
+
*/
|
|
27
|
+
shouldComponentUpdate(nextProps) {
|
|
28
|
+
return this.props.label !== nextProps.label || this.props['aria-label'] !== nextProps['aria-label'];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
10
31
|
* Renders the component.
|
|
11
32
|
* @returns {JSX}
|
|
12
|
-
*/
|
|
33
|
+
*/
|
|
34
|
+
render() {
|
|
35
|
+
const {
|
|
36
|
+
'aria-hidden': ariaHidden,
|
|
37
|
+
'aria-label': ariaLabel,
|
|
38
|
+
badge: Badge,
|
|
39
|
+
forwardedRef,
|
|
40
|
+
icon: Icon,
|
|
41
|
+
label,
|
|
42
|
+
srOnly,
|
|
43
|
+
style,
|
|
44
|
+
testId
|
|
45
|
+
} = this.props;
|
|
46
|
+
return /*#__PURE__*/React.createElement("button", {
|
|
47
|
+
ref: forwardedRef,
|
|
48
|
+
className: srOnly ? styles.srOnly : styles.button,
|
|
49
|
+
"data-test-id": testId,
|
|
50
|
+
onClick: this.handleClick,
|
|
51
|
+
style: style,
|
|
52
|
+
type: "button",
|
|
53
|
+
"aria-hidden": ariaHidden,
|
|
54
|
+
"aria-label": ariaLabel,
|
|
55
|
+
tabIndex: "0"
|
|
56
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
57
|
+
className: styles.iconWrapper
|
|
58
|
+
}, Icon && /*#__PURE__*/React.createElement(Icon, {
|
|
59
|
+
className: styles.icon,
|
|
60
|
+
size: 24
|
|
61
|
+
})), /*#__PURE__*/React.createElement(I18n.Text, {
|
|
62
|
+
className: styles.label,
|
|
63
|
+
string: label
|
|
64
|
+
}), Badge && /*#__PURE__*/React.createElement(Badge, null));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
NavDrawerItem.defaultProps = {
|
|
68
|
+
'aria-hidden': null,
|
|
69
|
+
'aria-label': null,
|
|
70
|
+
badge: null,
|
|
71
|
+
forwardedRef: null,
|
|
72
|
+
icon: null,
|
|
73
|
+
onClick: () => {},
|
|
74
|
+
srOnly: false,
|
|
75
|
+
style: {},
|
|
76
|
+
testId: null
|
|
77
|
+
};
|
|
78
|
+
export default withForwardedRef(NavDrawerItem);
|
|
@@ -1 +1,49 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { css } from 'glamor';
|
|
2
|
+
import { themeColors } from '@shopgate/pwa-common/helpers/config';
|
|
3
|
+
const srOnly = css({
|
|
4
|
+
clip: 'rect(1px, 1px, 1px, 1px)',
|
|
5
|
+
height: '1px',
|
|
6
|
+
margin: 0,
|
|
7
|
+
overflow: 'hidden',
|
|
8
|
+
padding: 0,
|
|
9
|
+
position: 'absolute',
|
|
10
|
+
whiteSpace: 'nowrap',
|
|
11
|
+
width: '1px',
|
|
12
|
+
zIndex: -1000,
|
|
13
|
+
':first-child': {
|
|
14
|
+
marginTop: 'calc(16px + var(--safe-area-inset-top))'
|
|
15
|
+
}
|
|
16
|
+
}).toString();
|
|
17
|
+
const button = css({
|
|
18
|
+
alignItems: 'flex-start',
|
|
19
|
+
color: 'inherit',
|
|
20
|
+
display: 'flex',
|
|
21
|
+
fontWeight: 500,
|
|
22
|
+
outline: 0,
|
|
23
|
+
padding: '16px 8px 16px 0',
|
|
24
|
+
position: 'relative',
|
|
25
|
+
width: '100%',
|
|
26
|
+
':first-child': {
|
|
27
|
+
paddingTop: 'calc(16px + var(--safe-area-inset-top))'
|
|
28
|
+
}
|
|
29
|
+
}).toString();
|
|
30
|
+
const label = css({
|
|
31
|
+
marginTop: 2,
|
|
32
|
+
textAlign: 'left'
|
|
33
|
+
}).toString();
|
|
34
|
+
const iconWrapper = css({
|
|
35
|
+
width: 56,
|
|
36
|
+
flexShrink: 0
|
|
37
|
+
}).toString();
|
|
38
|
+
const icon = css({
|
|
39
|
+
boxSizing: 'content-box',
|
|
40
|
+
color: themeColors.gray,
|
|
41
|
+
padding: '0 32px 0 16px'
|
|
42
|
+
}).toString();
|
|
43
|
+
export default {
|
|
44
|
+
srOnly,
|
|
45
|
+
button,
|
|
46
|
+
label,
|
|
47
|
+
iconWrapper,
|
|
48
|
+
icon
|
|
49
|
+
};
|
|
@@ -1,5 +1,32 @@
|
|
|
1
|
-
import React,{Fragment}from'react';
|
|
1
|
+
import React, { Fragment } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import Title from "../Title";
|
|
4
|
+
import Item from "../Item";
|
|
5
|
+
import Divider from "../Divider";
|
|
6
|
+
|
|
7
|
+
/**
|
|
2
8
|
* The NavDrawerSectionComponent.
|
|
3
9
|
* @param {Object} props The component props.
|
|
4
10
|
* @returns {JSX}
|
|
5
|
-
*/
|
|
11
|
+
*/
|
|
12
|
+
const NavDrawerSection = ({
|
|
13
|
+
children,
|
|
14
|
+
title,
|
|
15
|
+
dividerTop,
|
|
16
|
+
dividerBottom
|
|
17
|
+
}) => {
|
|
18
|
+
if (!children) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return /*#__PURE__*/React.createElement(Fragment, null, dividerTop && /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Title, {
|
|
22
|
+
text: title
|
|
23
|
+
}), children, dividerBottom && /*#__PURE__*/React.createElement(Divider, null));
|
|
24
|
+
};
|
|
25
|
+
NavDrawerSection.Item = Item;
|
|
26
|
+
NavDrawerSection.defaultProps = {
|
|
27
|
+
children: null,
|
|
28
|
+
dividerBottom: false,
|
|
29
|
+
dividerTop: true,
|
|
30
|
+
title: ''
|
|
31
|
+
};
|
|
32
|
+
export default NavDrawerSection;
|
|
@@ -1,4 +1,25 @@
|
|
|
1
|
-
import React from'react';
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import I18n from '@shopgate/pwa-common/components/I18n';
|
|
4
|
+
import styles from "./style";
|
|
5
|
+
|
|
6
|
+
/**
|
|
2
7
|
* @param {Object} props The component props.
|
|
3
8
|
* @returns {JSX}
|
|
4
|
-
*/
|
|
9
|
+
*/
|
|
10
|
+
const NavDrawerTitle = ({
|
|
11
|
+
text
|
|
12
|
+
}) => {
|
|
13
|
+
if (!text.length) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
17
|
+
className: styles
|
|
18
|
+
}, /*#__PURE__*/React.createElement(I18n.Text, {
|
|
19
|
+
string: text
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
NavDrawerTitle.defaultProps = {
|
|
23
|
+
text: ''
|
|
24
|
+
};
|
|
25
|
+
export default NavDrawerTitle;
|
|
@@ -1 +1,8 @@
|
|
|
1
|
-
import{css}from'glamor';
|
|
1
|
+
import { css } from 'glamor';
|
|
2
|
+
import { themeColors } from '@shopgate/pwa-common/helpers/config';
|
|
3
|
+
export default css({
|
|
4
|
+
color: themeColors.shade11,
|
|
5
|
+
fontSize: '0.875rem',
|
|
6
|
+
fontWeight: 500,
|
|
7
|
+
margin: '16px 0 0 16px'
|
|
8
|
+
});
|
package/NavDrawer/index.js
CHANGED
|
@@ -1,16 +1,138 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { Component, Fragment } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import noop from 'lodash/noop';
|
|
4
|
+
import Transition from 'react-transition-group/Transition';
|
|
5
|
+
import { Backdrop } from '@shopgate/engage/components';
|
|
6
|
+
import { ModalStateTracker } from '@shopgate/engage/a11y/components';
|
|
7
|
+
import { UIEvents } from '@shopgate/pwa-core';
|
|
8
|
+
import Divider from "./components/Divider";
|
|
9
|
+
import Item from "./components/Item";
|
|
10
|
+
import Section from "./components/Section";
|
|
11
|
+
import Title from "./components/Title";
|
|
12
|
+
import { contentStyle, drawerStyle } from "./style";
|
|
13
|
+
import transition from "./transition";
|
|
14
|
+
const OPEN = 'navdrawer_open';
|
|
15
|
+
const CLOSE = 'navdrawer_close';
|
|
16
|
+
|
|
17
|
+
/**
|
|
2
18
|
* The NavDrawer component
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
19
|
+
*/
|
|
20
|
+
class NavDrawer extends Component {
|
|
21
|
+
/**
|
|
22
|
+
* @param {Object} props The component props.
|
|
23
|
+
*/
|
|
24
|
+
constructor(props) {
|
|
25
|
+
super(props);
|
|
26
|
+
this.onEntering = () => {
|
|
27
|
+
this.props.onOpen();
|
|
28
|
+
};
|
|
29
|
+
this.onEntered = () => {
|
|
30
|
+
if (this.a11yCloseRef.current) {
|
|
31
|
+
this.a11yCloseRef.current.focus();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
this.onExited = () => {
|
|
35
|
+
this.contentRef.current.scrollTop = 0;
|
|
36
|
+
if (this.triggerElement && typeof this.triggerElement.focus === 'function') {
|
|
37
|
+
// Focus the element that triggered the NavDrawer after it closes
|
|
38
|
+
this.triggerElement.focus();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
this.onExiting = () => {
|
|
42
|
+
this.props.onClose();
|
|
43
|
+
};
|
|
44
|
+
this.open = () => {
|
|
45
|
+
// Save a reference to the element that triggered the NavDrawer
|
|
46
|
+
this.triggerElement = document.activeElement;
|
|
47
|
+
this.setState({
|
|
48
|
+
open: true
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
this.close = () => {
|
|
52
|
+
this.setState({
|
|
53
|
+
open: false
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
this.contentRef = /*#__PURE__*/React.createRef();
|
|
57
|
+
this.a11yCloseRef = /*#__PURE__*/React.createRef();
|
|
58
|
+
this.state = {
|
|
59
|
+
open: false
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Save a reference to the element that triggered the NavDrawer
|
|
63
|
+
this.triggerElement = null;
|
|
64
|
+
UIEvents.addListener(OPEN, this.open);
|
|
65
|
+
UIEvents.addListener(CLOSE, this.close);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
7
69
|
* @param {Object} nextProps The next component props.
|
|
8
70
|
* @param {Object} nextState The next component state.
|
|
9
71
|
* @returns {JSX}
|
|
10
|
-
*/
|
|
72
|
+
*/
|
|
73
|
+
shouldComponentUpdate(nextProps, nextState) {
|
|
74
|
+
return this.state.open !== nextState.open;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
11
78
|
* The unmount lifecycle hook
|
|
12
|
-
*/
|
|
79
|
+
*/
|
|
80
|
+
componentWillUnmount() {
|
|
81
|
+
UIEvents.removeListener(OPEN, this.open);
|
|
82
|
+
UIEvents.removeListener(CLOSE, this.close);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
13
85
|
* @returns {JSX}
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
|
|
86
|
+
*/
|
|
87
|
+
render() {
|
|
88
|
+
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Transition, {
|
|
89
|
+
onEntering: this.onEntering,
|
|
90
|
+
onEntered: this.onEntered,
|
|
91
|
+
onExited: this.onExited,
|
|
92
|
+
onExiting: this.onExiting,
|
|
93
|
+
in: this.state.open,
|
|
94
|
+
timeout: 300
|
|
95
|
+
}, state => {
|
|
96
|
+
const ariaHidden = this.props['aria-hidden'] || state === 'exited';
|
|
97
|
+
return /*#__PURE__*/React.createElement(ModalStateTracker, {
|
|
98
|
+
isVisible: this.state.open
|
|
99
|
+
}, /*#__PURE__*/React.createElement("section", {
|
|
100
|
+
className: `${drawerStyle} ui-material__nav-drawer`,
|
|
101
|
+
"data-test-id": "NavDrawer",
|
|
102
|
+
style: transition[state],
|
|
103
|
+
"aria-hidden": ariaHidden,
|
|
104
|
+
tabIndex: "-1"
|
|
105
|
+
}, /*#__PURE__*/React.createElement(Item, {
|
|
106
|
+
label: "common.close",
|
|
107
|
+
ref: this.a11yCloseRef,
|
|
108
|
+
srOnly: true
|
|
109
|
+
}), /*#__PURE__*/React.createElement("nav", {
|
|
110
|
+
className: contentStyle,
|
|
111
|
+
ref: this.contentRef
|
|
112
|
+
}, this.props.children)));
|
|
113
|
+
}), /*#__PURE__*/React.createElement(Backdrop, {
|
|
114
|
+
isVisible: this.state.open,
|
|
115
|
+
level: 4,
|
|
116
|
+
onClick: this.close,
|
|
117
|
+
opacity: 20
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
NavDrawer.close = () => {
|
|
122
|
+
UIEvents.emit(CLOSE);
|
|
123
|
+
};
|
|
124
|
+
NavDrawer.open = () => {
|
|
125
|
+
UIEvents.emit(OPEN);
|
|
126
|
+
};
|
|
127
|
+
NavDrawer.EVENT_OPEN = OPEN;
|
|
128
|
+
NavDrawer.EVENT_CLOSE = CLOSE;
|
|
129
|
+
NavDrawer.Divider = Divider;
|
|
130
|
+
NavDrawer.Item = Item;
|
|
131
|
+
NavDrawer.Section = Section;
|
|
132
|
+
NavDrawer.Title = Title;
|
|
133
|
+
NavDrawer.defaultProps = {
|
|
134
|
+
'aria-hidden': false,
|
|
135
|
+
onClose: noop,
|
|
136
|
+
onOpen: noop
|
|
137
|
+
};
|
|
138
|
+
export default NavDrawer;
|
package/NavDrawer/spec.js
CHANGED
|
@@ -1 +1,35 @@
|
|
|
1
|
-
import React from'react';
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { shallow, mount } from 'enzyme';
|
|
3
|
+
import NavDrawer from "./index";
|
|
4
|
+
jest.unmock('@shopgate/pwa-core');
|
|
5
|
+
jest.mock('@shopgate/engage/components');
|
|
6
|
+
jest.mock('@shopgate/engage/a11y/components');
|
|
7
|
+
describe('NavDrawer', () => {
|
|
8
|
+
it('should match the snapshot', () => {
|
|
9
|
+
const wrapper = shallow(/*#__PURE__*/React.createElement(NavDrawer, null, "Content"));
|
|
10
|
+
expect(wrapper).toMatchSnapshot();
|
|
11
|
+
});
|
|
12
|
+
it('should open and close with an event', () => {
|
|
13
|
+
const onOpen = jest.fn();
|
|
14
|
+
const onClose = jest.fn();
|
|
15
|
+
const wrapper = mount(/*#__PURE__*/React.createElement(NavDrawer, {
|
|
16
|
+
onOpen: onOpen,
|
|
17
|
+
onClose: onClose
|
|
18
|
+
}, "Content"));
|
|
19
|
+
NavDrawer.open();
|
|
20
|
+
expect(wrapper.state().open).toEqual(true);
|
|
21
|
+
expect(onOpen).toHaveBeenCalled();
|
|
22
|
+
expect(onClose).not.toHaveBeenCalled();
|
|
23
|
+
NavDrawer.close();
|
|
24
|
+
expect(wrapper.state().open).toEqual(false);
|
|
25
|
+
expect(onClose).toHaveBeenCalled();
|
|
26
|
+
});
|
|
27
|
+
it('should close when Backdrop is clicked', () => {
|
|
28
|
+
const wrapper = shallow(/*#__PURE__*/React.createElement(NavDrawer, null, "Content"));
|
|
29
|
+
const backdrop = wrapper.find('Backdrop');
|
|
30
|
+
NavDrawer.open();
|
|
31
|
+
expect(wrapper.state().open).toEqual(true);
|
|
32
|
+
backdrop.simulate('click');
|
|
33
|
+
expect(wrapper.state().open).toEqual(false);
|
|
34
|
+
});
|
|
35
|
+
});
|
package/NavDrawer/style.js
CHANGED
|
@@ -1 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { css } from 'glamor';
|
|
2
|
+
import { themeShadows, themeColors } from '@shopgate/pwa-common/helpers/config';
|
|
3
|
+
export const contentStyle = css({
|
|
4
|
+
fontSize: 14,
|
|
5
|
+
height: '100%',
|
|
6
|
+
overflowY: 'scroll',
|
|
7
|
+
paddingBottom: 'var(--safe-area-inset-bottom)',
|
|
8
|
+
WebkitOverflowScrolling: 'touch'
|
|
9
|
+
});
|
|
10
|
+
export const drawerStyle = css({
|
|
11
|
+
background: themeColors.light,
|
|
12
|
+
boxShadow: themeShadows.navDrawer,
|
|
13
|
+
color: themeColors.dark,
|
|
14
|
+
height: '100vh',
|
|
15
|
+
left: 0,
|
|
16
|
+
maxWidth: '300px',
|
|
17
|
+
position: 'fixed',
|
|
18
|
+
top: 0,
|
|
19
|
+
transition: 'transform 300ms cubic-bezier(0.25, 0.1, 0.25, 1)',
|
|
20
|
+
width: '100%',
|
|
21
|
+
willChange: 'transform',
|
|
22
|
+
zIndex: 50,
|
|
23
|
+
'@media(max-width: 480px)': {
|
|
24
|
+
maxWidth: '67vw'
|
|
25
|
+
}
|
|
26
|
+
});
|
package/NavDrawer/transition.js
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
|
-
export default
|
|
1
|
+
export default {
|
|
2
|
+
entering: {
|
|
3
|
+
transform: 'translate3d(0, 0, 0)',
|
|
4
|
+
visibility: 'visible'
|
|
5
|
+
},
|
|
6
|
+
entered: {
|
|
7
|
+
transform: 'translate3d(0, 0, 0)',
|
|
8
|
+
visibility: 'visible'
|
|
9
|
+
},
|
|
10
|
+
exiting: {
|
|
11
|
+
boxShadow: 'none',
|
|
12
|
+
transform: 'translate3d(-100%, 0, 0)',
|
|
13
|
+
visibility: 'visible'
|
|
14
|
+
},
|
|
15
|
+
exited: {
|
|
16
|
+
boxShadow: 'none',
|
|
17
|
+
transform: 'translate3d(-100%, 0, 0)',
|
|
18
|
+
visibility: 'hidden'
|
|
19
|
+
}
|
|
20
|
+
};
|