@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.
Files changed (48) hide show
  1. package/Accordion/components/AccordionContent/index.js +51 -2
  2. package/Accordion/components/AccordionContent/spec.js +32 -1
  3. package/Accordion/components/AccordionContent/style.js +9 -1
  4. package/Accordion/index.js +90 -2
  5. package/Accordion/spec.js +39 -1
  6. package/Accordion/style.js +47 -1
  7. package/AppBar/components/Below/index.js +24 -2
  8. package/AppBar/components/Center/index.js +24 -2
  9. package/AppBar/components/Field/index.js +39 -3
  10. package/AppBar/components/Field/style.js +14 -1
  11. package/AppBar/components/Icon/index.js +43 -3
  12. package/AppBar/components/Icon/style.js +14 -1
  13. package/AppBar/components/Left/index.js +24 -2
  14. package/AppBar/components/Right/index.js +24 -2
  15. package/AppBar/components/Title/index.js +37 -3
  16. package/AppBar/components/Title/style.js +11 -1
  17. package/AppBar/index.js +87 -3
  18. package/AppBar/style.js +21 -1
  19. package/BaseDialog/components/Buttons/index.js +28 -2
  20. package/BaseDialog/components/Buttons/spec.js +28 -1
  21. package/BaseDialog/components/Content/index.js +21 -2
  22. package/BaseDialog/components/Content/spec.js +17 -1
  23. package/BaseDialog/components/Title/index.js +29 -2
  24. package/BaseDialog/components/Title/spec.js +17 -1
  25. package/BaseDialog/index.js +39 -2
  26. package/BaseDialog/spec.js +39 -1
  27. package/BaseDialog/style.js +64 -1
  28. package/FloatingActionButton/index.js +56 -3
  29. package/FloatingActionButton/style.js +33 -1
  30. package/NavDrawer/components/Divider/index.js +10 -2
  31. package/NavDrawer/components/Divider/spec.js +9 -1
  32. package/NavDrawer/components/Divider/style.js +12 -2
  33. package/NavDrawer/components/Item/index.js +72 -6
  34. package/NavDrawer/components/Item/style.js +49 -1
  35. package/NavDrawer/components/Section/index.js +29 -2
  36. package/NavDrawer/components/Title/index.js +23 -2
  37. package/NavDrawer/components/Title/style.js +8 -1
  38. package/NavDrawer/index.js +132 -10
  39. package/NavDrawer/spec.js +35 -1
  40. package/NavDrawer/style.js +26 -1
  41. package/NavDrawer/transition.js +20 -1
  42. package/SnackBar/index.js +158 -23
  43. package/SnackBar/style.js +64 -2
  44. package/colors.js +4 -1
  45. package/icons/ShareIcon.js +11 -2
  46. package/index.js +5 -1
  47. package/jest.config.js +1 -1
  48. package/package.json +2 -2
@@ -1,12 +1,78 @@
1
- function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component}from'react';import PropTypes from'prop-types';import{UIEvents}from'@shopgate/pwa-core';import{withForwardedRef}from'@shopgate/engage/core';import{I18n}from'@shopgate/engage/components';import styles from"./style";/**
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
- */var NavDrawerItem=/*#__PURE__*/function(_Component){function NavDrawerItem(){var _this2;_classCallCheck(this,NavDrawerItem);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this2=_callSuper(this,NavDrawerItem,[].concat(args));/**
4
- * Handles an Item click by executing it's href.
5
- */_defineProperty(_this2,"handleClick",function(){UIEvents.emit('navdrawer_close');setTimeout(_this2.props.onClick,300);});return _this2;}_inherits(NavDrawerItem,_Component);return _createClass(NavDrawerItem,[{key:"shouldComponentUpdate",value:/**
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
- */function shouldComponentUpdate(nextProps){return this.props.label!==nextProps.label||this.props['aria-label']!==nextProps['aria-label'];}},{key:"render",value:/**
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
- */function render(){var _this$props=this.props,ariaHidden=_this$props['aria-hidden'],ariaLabel=_this$props['aria-label'],Badge=_this$props.badge,forwardedRef=_this$props.forwardedRef,Icon=_this$props.icon,label=_this$props.label,srOnly=_this$props.srOnly,style=_this$props.style,testId=_this$props.testId;return React.createElement("button",{ref:forwardedRef,className:srOnly?styles.srOnly:styles.button,"data-test-id":testId,onClick:this.handleClick,style:style,type:"button","aria-hidden":ariaHidden,"aria-label":ariaLabel,tabIndex:"0"},React.createElement("div",{className:styles.iconWrapper},Icon&&React.createElement(Icon,{className:styles.icon,size:24})),React.createElement(I18n.Text,{className:styles.label,string:label}),Badge&&React.createElement(Badge,null));}}]);}(Component);_defineProperty(NavDrawerItem,"defaultProps",{'aria-hidden':null,'aria-label':null,badge:null,forwardedRef:null,icon:null,onClick:function onClick(){},srOnly:false,style:{},testId:null});export default withForwardedRef(NavDrawerItem);
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{css}from'glamor';import{themeColors}from'@shopgate/pwa-common/helpers/config';var srOnly=css({clip:'rect(1px, 1px, 1px, 1px)',height:'1px',margin:0,overflow:'hidden',padding:0,position:'absolute',whiteSpace:'nowrap',width:'1px',zIndex:-1000,':first-child':{marginTop:'calc(16px + var(--safe-area-inset-top))'}}).toString();var button=css({alignItems:'flex-start',color:'inherit',display:'flex',fontWeight:500,outline:0,padding:'16px 8px 16px 0',position:'relative',width:'100%',':first-child':{paddingTop:'calc(16px + var(--safe-area-inset-top))'}}).toString();var label=css({marginTop:2,textAlign:'left'}).toString();var iconWrapper=css({width:56,flexShrink:0}).toString();var icon=css({boxSizing:'content-box',color:themeColors.gray,padding:'0 32px 0 16px'}).toString();export default{srOnly:srOnly,button:button,label:label,iconWrapper:iconWrapper,icon:icon};
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';import PropTypes from'prop-types';import Title from"../Title";import Item from"../Item";import Divider from"../Divider";/**
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
- */var NavDrawerSection=function NavDrawerSection(_ref){var children=_ref.children,title=_ref.title,dividerTop=_ref.dividerTop,dividerBottom=_ref.dividerBottom;if(!children){return null;}return React.createElement(Fragment,null,dividerTop&&React.createElement(Divider,null),React.createElement(Title,{text:title}),children,dividerBottom&&React.createElement(Divider,null));};NavDrawerSection.Item=Item;NavDrawerSection.defaultProps={children:null,dividerBottom:false,dividerTop:true,title:''};export default NavDrawerSection;
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';import PropTypes from'prop-types';import I18n from'@shopgate/pwa-common/components/I18n';import styles from"./style";/**
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
- */var NavDrawerTitle=function NavDrawerTitle(_ref){var text=_ref.text;if(!text.length){return null;}return React.createElement("div",{className:styles},React.createElement(I18n.Text,{string:text}));};NavDrawerTitle.defaultProps={text:''};export default NavDrawerTitle;
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';import{themeColors}from'@shopgate/pwa-common/helpers/config';export default css({color:themeColors.shade11,fontSize:'0.875rem',fontWeight:500,margin:'16px 0 0 16px'});
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
+ });
@@ -1,16 +1,138 @@
1
- function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component,Fragment}from'react';import PropTypes from'prop-types';import noop from'lodash/noop';import Transition from'react-transition-group/Transition';import{Backdrop}from'@shopgate/engage/components';import{ModalStateTracker}from'@shopgate/engage/a11y/components';import{UIEvents}from'@shopgate/pwa-core';import Divider from"./components/Divider";import Item from"./components/Item";import Section from"./components/Section";import Title from"./components/Title";import{contentStyle,drawerStyle}from"./style";import transition from"./transition";var OPEN='navdrawer_open';var CLOSE='navdrawer_close';/**
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
- */var NavDrawer=/*#__PURE__*/function(_Component){function NavDrawer(props){var _this2;_classCallCheck(this,NavDrawer);_this2=_callSuper(this,NavDrawer,[props]);_defineProperty(_this2,"onEntering",function(){_this2.props.onOpen();});_defineProperty(_this2,"onEntered",function(){if(_this2.a11yCloseRef.current){_this2.a11yCloseRef.current.focus();}});_defineProperty(_this2,"onExited",function(){_this2.contentRef.current.scrollTop=0;if(_this2.triggerElement&&typeof _this2.triggerElement.focus==='function'){// Focus the element that triggered the NavDrawer after it closes
4
- _this2.triggerElement.focus();}});_defineProperty(_this2,"onExiting",function(){_this2.props.onClose();});_defineProperty(_this2,"open",function(){// Save a reference to the element that triggered the NavDrawer
5
- _this2.triggerElement=document.activeElement;_this2.setState({open:true});});_defineProperty(_this2,"close",function(){_this2.setState({open:false});});_this2.contentRef=React.createRef();_this2.a11yCloseRef=React.createRef();_this2.state={open:false};// Save a reference to the element that triggered the NavDrawer
6
- _this2.triggerElement=null;UIEvents.addListener(OPEN,_this2.open);UIEvents.addListener(CLOSE,_this2.close);return _this2;}/**
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
- */_inherits(NavDrawer,_Component);return _createClass(NavDrawer,[{key:"shouldComponentUpdate",value:function shouldComponentUpdate(nextProps,nextState){return this.state.open!==nextState.open;}/**
72
+ */
73
+ shouldComponentUpdate(nextProps, nextState) {
74
+ return this.state.open !== nextState.open;
75
+ }
76
+
77
+ /**
11
78
  * The unmount lifecycle hook
12
- */},{key:"componentWillUnmount",value:function componentWillUnmount(){UIEvents.removeListener(OPEN,this.open);UIEvents.removeListener(CLOSE,this.close);}},{key:"render",value:/**
79
+ */
80
+ componentWillUnmount() {
81
+ UIEvents.removeListener(OPEN, this.open);
82
+ UIEvents.removeListener(CLOSE, this.close);
83
+ }
84
+ /**
13
85
  * @returns {JSX}
14
- */function render(){var _this3=this;return React.createElement(Fragment,null,React.createElement(Transition,{onEntering:this.onEntering,onEntered:this.onEntered,onExited:this.onExited,onExiting:this.onExiting,"in":this.state.open,timeout:300},function(state){var ariaHidden=_this3.props['aria-hidden']||state==='exited';return React.createElement(ModalStateTracker,{isVisible:_this3.state.open},React.createElement("section",{className:"".concat(drawerStyle," ui-material__nav-drawer"),"data-test-id":"NavDrawer",style:transition[state],"aria-hidden":ariaHidden,tabIndex:"-1"},React.createElement(Item,{label:"common.close",ref:_this3.a11yCloseRef,srOnly:true}),React.createElement("nav",{className:contentStyle,ref:_this3.contentRef},_this3.props.children)));}),React.createElement(Backdrop,{isVisible:this.state.open,level:4,onClick:this.close,opacity:20}));}}]);}(Component);_defineProperty(NavDrawer,"close",function(){UIEvents.emit(CLOSE);});_defineProperty(NavDrawer,"open",function(){UIEvents.emit(OPEN);});_defineProperty(NavDrawer,"EVENT_OPEN",OPEN);_defineProperty(NavDrawer,"EVENT_CLOSE",CLOSE);_defineProperty(NavDrawer,"Divider",Divider);_defineProperty(NavDrawer,"Item",Item);_defineProperty(NavDrawer,"Section",Section);_defineProperty(NavDrawer,"Title",Title);_defineProperty(NavDrawer,"defaultProps",{'aria-hidden':false,onClose:noop,onOpen:noop/**
15
- * @param {Object} props The component props.
16
- */});export default NavDrawer;
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';import{shallow,mount}from'enzyme';import NavDrawer from"./index";jest.unmock('@shopgate/pwa-core');jest.mock('@shopgate/engage/components');jest.mock('@shopgate/engage/a11y/components');describe('NavDrawer',function(){it('should match the snapshot',function(){var wrapper=shallow(React.createElement(NavDrawer,null,"Content"));expect(wrapper).toMatchSnapshot();});it('should open and close with an event',function(){var onOpen=jest.fn();var onClose=jest.fn();var wrapper=mount(React.createElement(NavDrawer,{onOpen:onOpen,onClose:onClose},"Content"));NavDrawer.open();expect(wrapper.state().open).toEqual(true);expect(onOpen).toHaveBeenCalled();expect(onClose).not.toHaveBeenCalled();NavDrawer.close();expect(wrapper.state().open).toEqual(false);expect(onClose).toHaveBeenCalled();});it('should close when Backdrop is clicked',function(){var wrapper=shallow(React.createElement(NavDrawer,null,"Content"));var backdrop=wrapper.find('Backdrop');NavDrawer.open();expect(wrapper.state().open).toEqual(true);backdrop.simulate('click');expect(wrapper.state().open).toEqual(false);});});
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
+ });
@@ -1 +1,26 @@
1
- import{css}from'glamor';import{themeShadows,themeColors}from'@shopgate/pwa-common/helpers/config';export var contentStyle=css({fontSize:14,height:'100%',overflowY:'scroll',paddingBottom:'var(--safe-area-inset-bottom)',WebkitOverflowScrolling:'touch'});export var drawerStyle=css({background:themeColors.light,boxShadow:themeShadows.navDrawer,color:themeColors.dark,height:'100vh',left:0,maxWidth:'300px',position:'fixed',top:0,transition:'transform 300ms cubic-bezier(0.25, 0.1, 0.25, 1)',width:'100%',willChange:'transform',zIndex:50,'@media(max-width: 480px)':{maxWidth:'67vw'}});
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
+ });
@@ -1 +1,20 @@
1
- export default{entering:{transform:'translate3d(0, 0, 0)',visibility:'visible'},entered:{transform:'translate3d(0, 0, 0)',visibility:'visible'},exiting:{boxShadow:'none',transform:'translate3d(-100%, 0, 0)',visibility:'visible'},exited:{boxShadow:'none',transform:'translate3d(-100%, 0, 0)',visibility:'hidden'}};
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
+ };