@micromag/viewer 0.3.250 → 0.3.251

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/lib/index.js CHANGED
@@ -16,7 +16,6 @@ var screens = require('@micromag/screens');
16
16
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
17
17
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
18
18
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
19
- var web = require('@react-spring/web');
20
19
  var classNames = require('classnames');
21
20
  var reactHelmet = require('react-helmet');
22
21
  var EventEmitter = require('wolfy87-eventemitter');
@@ -27,6 +26,7 @@ var reactIntl = require('react-intl');
27
26
  var faTimes = require('@fortawesome/free-solid-svg-icons/faTimes');
28
27
  var reactFontawesome = require('@fortawesome/react-fontawesome');
29
28
  var core$1 = require('@react-spring/core');
29
+ var web = require('@react-spring/web');
30
30
  var Scroll = require('@micromag/element-scroll');
31
31
  var ShareOptions = require('@micromag/element-share-options');
32
32
  var react = require('@use-gesture/react');
@@ -134,7 +134,6 @@ function useScreenInteraction() {
134
134
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
135
135
  screens = _ref.screens,
136
136
  screenIndex = _ref.screenIndex,
137
- screenWidth = _ref.screenWidth,
138
137
  _ref$disableCurrentSc = _ref.disableCurrentScreenNavigation,
139
138
  disableCurrentScreenNavigation = _ref$disableCurrentSc === void 0 ? false : _ref$disableCurrentSc,
140
139
  _ref$clickOnSiblings = _ref.clickOnSiblings,
@@ -204,14 +203,13 @@ function useScreenInteraction() {
204
203
  }
205
204
 
206
205
  var _currentTarget$getBou = currentTarget.getBoundingClientRect(),
206
+ left = _currentTarget$getBou.left,
207
207
  width = _currentTarget$getBou.width;
208
208
 
209
- var margin = (width - screenWidth) / 2;
210
- var screenPreviousZone = screenWidth * (1 - nextScreenWidthPercent);
211
- var previousZone = margin + screenPreviousZone;
212
- var direction = x < previousZone ? 'previous' : 'next';
209
+ var relativeX = x - left;
210
+ var direction = relativeX < width * (1 - nextScreenWidthPercent) ? 'previous' : 'next';
213
211
  var lastIndex = screensCount - 1;
214
- var nextIndex = index;
212
+ var nextIndex = index; // @todo investigate what clickOnSiblings is doing
215
213
 
216
214
  if (direction === 'previous' && !clickOnSiblings) {
217
215
  nextIndex = Math.max(0, screenIndex - 1);
@@ -533,14 +531,14 @@ var styles$e = {"container":"micromag-viewer-buttons-toggle-button-container","n
533
531
 
534
532
  var propTypes$i = {
535
533
  className: PropTypes__default["default"].string,
536
- progressSpring: PropTypes__default["default"].number,
534
+ toggled: PropTypes__default["default"].number,
537
535
  button: PropTypes__default["default"].node,
538
536
  toggledButton: PropTypes__default["default"].node,
539
537
  toggledButtonClassName: PropTypes__default["default"].string
540
538
  };
541
539
  var defaultProps$i = {
542
540
  className: null,
543
- progressSpring: 0,
541
+ toggled: 0,
544
542
  button: null,
545
543
  toggledButton: null,
546
544
  toggledButtonClassName: null
@@ -548,27 +546,26 @@ var defaultProps$i = {
548
546
 
549
547
  var ToggleButton = function ToggleButton(_ref) {
550
548
  var className = _ref.className,
551
- progressSpring = _ref.progressSpring,
549
+ toggled = _ref.toggled,
552
550
  button = _ref.button,
553
551
  toggledButton = _ref.toggledButton,
554
552
  toggledButtonClassName = _ref.toggledButtonClassName;
555
553
  if (button === null) return false;
554
+
555
+ var getToggleButtonStyles = function getToggleButtonStyles(t) {
556
+ return {
557
+ transform: "translateY(".concat(t * -100, "%)")
558
+ };
559
+ };
560
+
556
561
  return /*#__PURE__*/React__default["default"].createElement("div", {
557
562
  className: classNames__default["default"]([styles$e.container, _defineProperty__default["default"]({}, className, className !== null)])
558
- }, /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
563
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
559
564
  className: styles$e.normal,
560
- style: {
561
- transform: progressSpring.to(function (p) {
562
- return "translateY(".concat(p * -100, "%)");
563
- })
564
- }
565
- }, button), /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
565
+ style: getToggleButtonStyles(toggled)
566
+ }, button), /*#__PURE__*/React__default["default"].createElement("div", {
566
567
  className: classNames__default["default"]([styles$e.toggled, _defineProperty__default["default"]({}, toggledButtonClassName, toggledButtonClassName !== null)]),
567
- style: {
568
- transform: progressSpring.to(function (p) {
569
- return "translateY(".concat((p - 1) * -100, "%)");
570
- })
571
- }
568
+ style: getToggleButtonStyles(toggled - 1)
572
569
  }, toggledButton));
573
570
  };
574
571
 
@@ -579,20 +576,20 @@ var styles$d = {"backdrop":"micromag-viewer-menus-menu-container-backdrop","heig
579
576
 
580
577
  var propTypes$h = {
581
578
  className: PropTypes__default["default"].string,
582
- progressSpring: PropTypes__default["default"].number,
579
+ transitionProgress: PropTypes__default["default"].number,
583
580
  theme: core.PropTypes.viewerTheme,
584
581
  children: PropTypes__default["default"].node
585
582
  };
586
583
  var defaultProps$h = {
587
584
  className: null,
588
- progressSpring: 0,
585
+ transitionProgress: 0,
589
586
  theme: null,
590
587
  children: null
591
588
  };
592
589
 
593
590
  var ViewerMenuContainer = function ViewerMenuContainer(_ref) {
594
591
  var className = _ref.className,
595
- progressSpring = _ref.progressSpring,
592
+ transitionProgress = _ref.transitionProgress,
596
593
  viewerTheme = _ref.theme,
597
594
  children = _ref.children;
598
595
 
@@ -610,26 +607,17 @@ var ViewerMenuContainer = function ViewerMenuContainer(_ref) {
610
607
  style: {
611
608
  pointerEvents: 'none'
612
609
  }
613
- }, /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
610
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
614
611
  className: styles$d.heightContainer,
615
612
  style: _objectSpread__default["default"]({
616
- opacity: progressSpring,
617
- transform: progressSpring.to(function (p) {
618
- return "translateY(".concat((1 - p) * -2, "rem)");
619
- }),
620
- pointerEvents: progressSpring.to(function (p) {
621
- return p < 0.25 ? 'none' : 'auto';
622
- }),
623
- zIndex: progressSpring.to(function (p) {
624
- return Math.round(2 + p);
625
- })
613
+ height: "".concat(transitionProgress * 100, "%"),
614
+ pointerEvents: transitionProgress < 0.25 ? 'none' : 'auto',
615
+ zIndex: Math.round(2 + transitionProgress)
626
616
  }, backgroundColorStyle)
627
- }, children), /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
617
+ }, children), /*#__PURE__*/React__default["default"].createElement("div", {
628
618
  className: styles$d.backdrop,
629
619
  style: {
630
- opacity: progressSpring.to(function (p) {
631
- return utils.easings.easeOutQuint(p);
632
- })
620
+ opacity: utils.easings.easeOutQuint(transitionProgress)
633
621
  }
634
622
  }));
635
623
  };
@@ -956,10 +944,7 @@ var ViewerMenuScreen = function ViewerMenuScreen(_ref) {
956
944
  }]
957
945
  })) : '');
958
946
  return /*#__PURE__*/React__default["default"].createElement("div", {
959
- className: classNames__default["default"]([styles$a.container, (_ref4 = {}, _defineProperty__default["default"](_ref4, className, className !== null), _defineProperty__default["default"](_ref4, styles$a.isCurrent, current), _ref4)]),
960
- style: {
961
- paddingBottom: "".concat(screenHeight / screenWidth * 100, "%")
962
- }
947
+ className: classNames__default["default"]([styles$a.container, (_ref4 = {}, _defineProperty__default["default"](_ref4, className, className !== null), _defineProperty__default["default"](_ref4, styles$a.isCurrent, current), _ref4)])
963
948
  }, /*#__PURE__*/React__default["default"].createElement("button", {
964
949
  type: "button",
965
950
  className: styles$a.button,
@@ -992,7 +977,7 @@ var ViewerMenuScreen = function ViewerMenuScreen(_ref) {
992
977
  ViewerMenuScreen.propTypes = propTypes$d;
993
978
  ViewerMenuScreen.defaultProps = defaultProps$d;
994
979
 
995
- var styles$9 = {"scroll":"micromag-viewer-menus-menu-preview-scroll","container":"micromag-viewer-menus-menu-preview-container","disabled":"micromag-viewer-menus-menu-preview-disabled","screenButton":"micromag-viewer-menus-menu-preview-screenButton","content":"micromag-viewer-menus-menu-preview-content","buttons":"micromag-viewer-menus-menu-preview-buttons","organisation":"micromag-viewer-menus-menu-preview-organisation","icon":"micromag-viewer-menus-menu-preview-icon","title":"micromag-viewer-menus-menu-preview-title","nav":"micromag-viewer-menus-menu-preview-nav","item":"micromag-viewer-menus-menu-preview-item","items":"micromag-viewer-menus-menu-preview-items","inner":"micromag-viewer-menus-menu-preview-inner","frame":"micromag-viewer-menus-menu-preview-frame","screen":"micromag-viewer-menus-menu-preview-screen","intro":"micromag-viewer-menus-menu-preview-intro"};
980
+ var styles$9 = {"scroll":"micromag-viewer-menus-menu-preview-scroll","container":"micromag-viewer-menus-menu-preview-container","disabled":"micromag-viewer-menus-menu-preview-disabled","screenButton":"micromag-viewer-menus-menu-preview-screenButton","buttons":"micromag-viewer-menus-menu-preview-buttons","content":"micromag-viewer-menus-menu-preview-content","organisation":"micromag-viewer-menus-menu-preview-organisation","icon":"micromag-viewer-menus-menu-preview-icon","title":"micromag-viewer-menus-menu-preview-title","nav":"micromag-viewer-menus-menu-preview-nav","item":"micromag-viewer-menus-menu-preview-item","items":"micromag-viewer-menus-menu-preview-items","screen":"micromag-viewer-menus-menu-preview-screen","loading":"micromag-viewer-menus-menu-preview-loading","fillPulse":"micromag-viewer-menus-menu-preview-fillPulse"};
996
981
 
997
982
  var propTypes$c = {
998
983
  viewerTheme: core.PropTypes.viewerTheme,
@@ -1003,7 +988,6 @@ var propTypes$c = {
1003
988
  onClickScreen: PropTypes__default["default"].func,
1004
989
  maxThumbsWidth: PropTypes__default["default"].number,
1005
990
  paddingTop: PropTypes__default["default"].number,
1006
- scrollDisabled: PropTypes__default["default"].bool,
1007
991
  // @todo to reimplement:
1008
992
  // shouldLoad: PropTypes.bool,
1009
993
  // toggleFullscreen: PropTypes.func,
@@ -1021,7 +1005,6 @@ var defaultProps$c = {
1021
1005
  onClickScreen: null,
1022
1006
  maxThumbsWidth: 140,
1023
1007
  paddingTop: null,
1024
- scrollDisabled: false,
1025
1008
  // toggleFullscreen: null,
1026
1009
  // fullscreenActive: false,
1027
1010
  // fullscreenEnabled: false,
@@ -1037,7 +1020,6 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1037
1020
  onClickScreen = _ref.onClickScreen,
1038
1021
  maxThumbsWidth = _ref.maxThumbsWidth,
1039
1022
  paddingTop = _ref.paddingTop,
1040
- scrollDisabled = _ref.scrollDisabled,
1041
1023
  className = _ref.className;
1042
1024
 
1043
1025
  var _useDimensionObserver = hooks.useDimensionObserver(),
@@ -1064,29 +1046,12 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1064
1046
  var brandImageStyle = brandImageUrl !== null ? {
1065
1047
  backgroundImage: "url(".concat(brandImageUrl, ")")
1066
1048
  } : null; // const { url: brandLogoUrl = null } = brandLogo || {};
1067
-
1068
- var _useState = React.useState([]),
1069
- _useState2 = _slicedToArray__default["default"](_useState, 2),
1070
- screensMounted = _useState2[0],
1071
- setScreensMounted = _useState2[1]; // @todo optimize all of this the proper way
1049
+ // @todo optimize all of this the proper way
1072
1050
  // const finalItems = useMemo(
1073
1051
  // () => (!focusable ? items.map((s, i) => (i > 6 ? { screenId: s.screenId } : s)) : items),
1074
1052
  // [items, focusable],
1075
1053
  // );
1076
1054
 
1077
-
1078
- React.useEffect(function () {
1079
- if (items.length === screensMounted.length) {
1080
- return null;
1081
- }
1082
-
1083
- var timeout = setTimeout(function () {
1084
- setScreensMounted([].concat(_toConsumableArray__default["default"](screensMounted), [true]));
1085
- }, 40);
1086
- return function () {
1087
- clearTimeout(timeout);
1088
- };
1089
- }, [items, screensMounted, setScreensMounted]);
1090
1055
  return /*#__PURE__*/React__default["default"].createElement("div", {
1091
1056
  className: classNames__default["default"]([styles$9.container, _defineProperty__default["default"]({}, className, className !== null)]),
1092
1057
  style: _objectSpread__default["default"](_objectSpread__default["default"]({}, brandImageStyle), {}, {
@@ -1097,8 +1062,7 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1097
1062
  className: styles$9.content,
1098
1063
  ref: containerRef
1099
1064
  }, /*#__PURE__*/React__default["default"].createElement(Scroll__default["default"], {
1100
- className: styles$9.scroll,
1101
- disabled: scrollDisabled
1065
+ className: styles$9.scroll
1102
1066
  }, /*#__PURE__*/React__default["default"].createElement("nav", {
1103
1067
  className: styles$9.nav,
1104
1068
  style: {
@@ -1108,36 +1072,38 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1108
1072
  className: styles$9.items
1109
1073
  }, items.map(function (item, index) {
1110
1074
  var _ref6 = item || {},
1111
- screenId = _ref6.screenId;
1075
+ screenId = _ref6.screenId,
1076
+ _ref6$screen = _ref6.screen,
1077
+ screen = _ref6$screen === void 0 ? null : _ref6$screen;
1112
1078
 
1113
1079
  var itemStyles = {
1114
1080
  width: "".concat(100 / thumbsPerLine, "%")
1115
1081
  };
1116
-
1117
- var _ref7 = screenSize || {},
1118
- screenWidth = _ref7.width,
1119
- screenHeight = _ref7.height;
1120
-
1121
- var screenMounted = screensMounted[index] || false;
1122
1082
  return /*#__PURE__*/React__default["default"].createElement("li", {
1123
1083
  key: "item-".concat(screenId),
1124
1084
  className: styles$9.item,
1125
1085
  style: itemStyles
1126
1086
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1127
- className: styles$9.inner
1128
- }, /*#__PURE__*/React__default["default"].createElement("div", {
1129
- className: classNames__default["default"]([styles$9.frame, _defineProperty__default["default"]({}, styles$9.isLoading, !screenMounted)]),
1087
+ className: styles$9.screen
1088
+ }, screen === null ? /*#__PURE__*/React__default["default"].createElement("svg", {
1089
+ className: styles$9.loading,
1090
+ xmlns: "http://www.w3.org/2000/svg",
1091
+ width: "10",
1092
+ height: "16",
1093
+ viewBox: "0 0 10 16",
1130
1094
  style: {
1131
- paddingBottom: "".concat(screenHeight / screenWidth * 100, "%")
1095
+ animationDelay: "".concat(index * -50, "ms")
1132
1096
  }
1133
- }, screenMounted ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuScreen, {
1134
- className: styles$9.screen,
1097
+ }, /*#__PURE__*/React__default["default"].createElement("rect", {
1098
+ width: "10",
1099
+ height: "16"
1100
+ })) : /*#__PURE__*/React__default["default"].createElement(ViewerMenuScreen, {
1135
1101
  item: item,
1136
1102
  index: index,
1137
1103
  screenSize: screenSize,
1138
1104
  onClick: onClickScreen,
1139
1105
  focusable: focusable
1140
- }) : null)));
1106
+ })));
1141
1107
  }))))));
1142
1108
  };
1143
1109
 
@@ -1197,6 +1163,7 @@ var propTypes$a = {
1197
1163
  description: PropTypes__default["default"].string,
1198
1164
  items: core.PropTypes.menuItems,
1199
1165
  focusable: PropTypes__default["default"].bool,
1166
+ // shouldLoad: PropTypes.bool, // @todo still needed? to re-implement?
1200
1167
  paddingTop: PropTypes__default["default"].number,
1201
1168
  currentScreenIndex: PropTypes__default["default"].number,
1202
1169
  shareUrl: PropTypes__default["default"].string,
@@ -1286,7 +1253,7 @@ var ViewerMenuShare = function ViewerMenuShare(_ref) {
1286
1253
  setFinalShareUrl = _useState4[1];
1287
1254
 
1288
1255
  React.useEffect(function () {
1289
- setFinalShareUrl(shareCurrentScreen && currentScreenIndex !== 0 ? "".concat(shareUrl, "/").concat(currentScreenIndex + 1) : shareUrl);
1256
+ setFinalShareUrl(shareCurrentScreen && currentScreenIndex !== 0 ? "".concat(shareUrl, "/").concat(currentScreenIndex) : shareUrl);
1290
1257
  }, [shareCurrentScreen, currentScreenIndex, setFinalShareUrl]);
1291
1258
  return /*#__PURE__*/React__default["default"].createElement("div", {
1292
1259
  className: classNames__default["default"]([styles$7.container, _defineProperty__default["default"]({}, className, className !== null)]),
@@ -1341,7 +1308,7 @@ var ViewerMenuShare = function ViewerMenuShare(_ref) {
1341
1308
  ViewerMenuShare.propTypes = propTypes$a;
1342
1309
  ViewerMenuShare.defaultProps = defaultProps$a;
1343
1310
 
1344
- var styles$6 = {"container":"micromag-viewer-container","menuContainer":"micromag-viewer-menuContainer","menuPreview":"micromag-viewer-menuPreview","menuShare":"micromag-viewer-menuShare","screenContainer":"micromag-viewer-screenContainer","screensFrame":"micromag-viewer-screensFrame","landscape":"micromag-viewer-landscape","hideMenu":"micromag-viewer-hideMenu","menuNavContainer":"micromag-viewer-menuNavContainer","dots":"micromag-viewer-dots","menuTopContainer":"micromag-viewer-menuTopContainer","content":"micromag-viewer-content","withoutGestures":"micromag-viewer-withoutGestures","fadeMenu":"micromag-viewer-fadeMenu","withShadow":"micromag-viewer-withShadow","isOpened":"micromag-viewer-isOpened","menuItem":"micromag-viewer-menuItem","menuButton":"micromag-viewer-menuButton","slidingButton":"micromag-viewer-slidingButton","screensMenuButtonToggled":"micromag-viewer-screensMenuButtonToggled","navButton":"micromag-viewer-navButton","previous":"micromag-viewer-previous","next":"micromag-viewer-next","screen":"micromag-viewer-screen","current":"micromag-viewer-current","playbackControls":"micromag-viewer-playbackControls","arrowHint":"micromag-viewer-arrowHint","webView":"micromag-viewer-webView"};
1311
+ var styles$6 = {"container":"micromag-viewer-container","menuContainer":"micromag-viewer-menuContainer","menuPreview":"micromag-viewer-menuPreview","screenContainer":"micromag-viewer-screenContainer","screensFrame":"micromag-viewer-screensFrame","landscape":"micromag-viewer-landscape","hideMenu":"micromag-viewer-hideMenu","menuNavContainer":"micromag-viewer-menuNavContainer","dots":"micromag-viewer-dots","menuTopContainer":"micromag-viewer-menuTopContainer","content":"micromag-viewer-content","withoutGestures":"micromag-viewer-withoutGestures","fadeMenu":"micromag-viewer-fadeMenu","withShadow":"micromag-viewer-withShadow","isOpened":"micromag-viewer-isOpened","menuItem":"micromag-viewer-menuItem","menuItemScreens":"micromag-viewer-menuItemScreens","menuButton":"micromag-viewer-menuButton","slidingButton":"micromag-viewer-slidingButton","screensMenuButtonToggled":"micromag-viewer-screensMenuButtonToggled","isHidden":"micromag-viewer-isHidden","navButton":"micromag-viewer-navButton","previous":"micromag-viewer-previous","next":"micromag-viewer-next","screen":"micromag-viewer-screen","current":"micromag-viewer-current","playbackControls":"micromag-viewer-playbackControls","arrowHint":"micromag-viewer-arrowHint","webView":"micromag-viewer-webView"};
1345
1312
 
1346
1313
  var propTypes$9 = {
1347
1314
  story: core.PropTypes.story.isRequired,
@@ -1446,11 +1413,6 @@ var ViewerMenu = function ViewerMenu(_ref) {
1446
1413
  shareOpened = _useState4[0],
1447
1414
  setShareOpened = _useState4[1];
1448
1415
 
1449
- var _useState5 = React.useState(false),
1450
- _useState6 = _slicedToArray__default["default"](_useState5, 2),
1451
- menuMounted = _useState6[0],
1452
- setMenuMounted = _useState6[1];
1453
-
1454
1416
  var _useDimensionObserver = hooks.useDimensionObserver(),
1455
1417
  navContainerRef = _useDimensionObserver.ref,
1456
1418
  _useDimensionObserver2 = _useDimensionObserver.height,
@@ -1499,7 +1461,8 @@ var ViewerMenu = function ViewerMenu(_ref) {
1499
1461
  var base = typeof window !== 'undefined' ? window.location.host : '';
1500
1462
  var path = shareBasePath !== null ? "".concat(base).concat(shareBasePath) : base;
1501
1463
  return path;
1502
- }, [shareBasePath]);
1464
+ }, [shareBasePath]); // @note possible to extract some of that logic
1465
+
1503
1466
  var onOpenMenu = React.useCallback(function () {
1504
1467
  setMenuOpened(true);
1505
1468
  setShareOpened(false);
@@ -1590,7 +1553,6 @@ var ViewerMenu = function ViewerMenu(_ref) {
1590
1553
  springParams: springParams
1591
1554
  }),
1592
1555
  bindShareDrag = _useDragProgress.bind,
1593
- draggingShare = _useDragProgress.dragging,
1594
1556
  shareOpenedProgress = _useDragProgress.progress;
1595
1557
 
1596
1558
  var computeMenuProgress = React.useCallback(function (_ref9) {
@@ -1638,7 +1600,6 @@ var ViewerMenu = function ViewerMenu(_ref) {
1638
1600
  springParams: springParams
1639
1601
  }),
1640
1602
  bindMenuDrag = _useDragProgress2.bind,
1641
- draggingMenu = _useDragProgress2.dragging,
1642
1603
  menuOpenedProgress = _useDragProgress2.progress;
1643
1604
 
1644
1605
  var keyboardShortcuts = React.useMemo(function () {
@@ -1654,13 +1615,6 @@ var ViewerMenu = function ViewerMenu(_ref) {
1654
1615
  useKeyboardShortcuts(keyboardShortcuts); // should be zero if either screens menu or share menu is opened
1655
1616
 
1656
1617
  var dotsOpacity = Math.min(1, Math.max(0, 1 - (menuOpenedProgress + shareOpenedProgress)));
1657
- React.useEffect(function () {
1658
- if ((menuOpened || draggingMenu) && !menuMounted) {
1659
- setMenuMounted(true);
1660
- } else if (!menuOpened && !draggingMenu && menuMounted) {
1661
- setMenuMounted(false);
1662
- }
1663
- }, [menuOpened, draggingMenu, menuMounted, setMenuMounted]);
1664
1618
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
1665
1619
  className: classNames__default["default"]([styles$6.menuNavContainer, (_ref11 = {}, _defineProperty__default["default"](_ref11, styles$6.withShadow, withShadow), _defineProperty__default["default"](_ref11, styles$6.isOpened, menuOpened || shareOpened), _ref11)]),
1666
1620
  ref: refDots,
@@ -1671,42 +1625,38 @@ var ViewerMenu = function ViewerMenu(_ref) {
1671
1625
  className: styles$6.menuTopContainer,
1672
1626
  ref: navContainerRef
1673
1627
  }, !withoutShareMenu ? /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1674
- className: styles$6.menuItem
1628
+ className: classNames__default["default"]([styles$6.menuItem, styles$6.menuShare])
1675
1629
  }, bindShareDrag()), /*#__PURE__*/React__default["default"].createElement(ToggleButton, {
1676
1630
  className: styles$6.slidingButton,
1677
1631
  button: /*#__PURE__*/React__default["default"].createElement(ShareButton, {
1678
1632
  className: styles$6.menuButton,
1679
1633
  onClick: onOpenShare,
1680
1634
  theme: menuTheme,
1681
- iconPosition: "left",
1682
- focusable: !shareOpened
1635
+ iconPosition: "left"
1683
1636
  }),
1684
1637
  toggledButton: /*#__PURE__*/React__default["default"].createElement(CloseButton, {
1685
1638
  className: styles$6.menuButton,
1686
1639
  onClick: onCloseShare,
1687
1640
  theme: menuTheme,
1688
- iconPosition: "left",
1689
- focusable: shareOpened
1641
+ iconPosition: "left"
1690
1642
  }),
1691
- progressSpring: shareOpenedProgress
1643
+ toggled: shareOpenedProgress
1692
1644
  })) : null, !withoutScreensMenu ? /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1693
- className: styles$6.menuItem
1645
+ className: classNames__default["default"]([styles$6.menuItem, styles$6.menuItemScreens])
1694
1646
  }, bindMenuDrag()), /*#__PURE__*/React__default["default"].createElement(ToggleButton, {
1695
1647
  className: styles$6.slidingButton,
1696
1648
  button: /*#__PURE__*/React__default["default"].createElement(MenuButton, {
1697
1649
  className: styles$6.menuButton,
1698
1650
  onClick: onOpenMenu,
1699
- theme: menuTheme,
1700
- focusable: !menuOpened
1651
+ theme: menuTheme
1701
1652
  }),
1702
1653
  toggledButton: /*#__PURE__*/React__default["default"].createElement(CloseButton, {
1703
1654
  className: styles$6.menuButton,
1704
1655
  onClick: onCloseMenu,
1705
1656
  theme: menuTheme,
1706
- iconPosition: "right",
1707
- focusable: menuOpened
1657
+ iconPosition: "right"
1708
1658
  }),
1709
- progressSpring: menuOpenedProgress,
1659
+ toggled: menuOpenedProgress,
1710
1660
  toggledButtonClassName: styles$6.screensMenuButtonToggled
1711
1661
  })) : null), /*#__PURE__*/React__default["default"].createElement(ViewerMenuDots, Object.assign({}, menuTheme, {
1712
1662
  direction: "horizontal",
@@ -1720,14 +1670,15 @@ var ViewerMenu = function ViewerMenu(_ref) {
1720
1670
  onClose: onClickCloseViewer,
1721
1671
  className: styles$6.dots,
1722
1672
  style: {
1723
- opacity: Math.pow(dotsOpacity, 5) // @note this is like a "quint" easing, meaning it'll go towards 1 slowly first and then fast as it approaches 1
1724
-
1673
+ opacity: Math.pow(dotsOpacity, 5),
1674
+ // @note this is like a "quint" easing, meaning it'll go towards 1 slowly first and then fast as it approaches 1
1675
+ pointerEvents: dotsOpacity < 1 ? 'none' : 'auto'
1725
1676
  }
1726
1677
  }))), /*#__PURE__*/React__default["default"].createElement(ViewerMenuContainer, {
1727
1678
  className: styles$6.menuContainer,
1728
- progressSpring: shareOpenedProgress,
1679
+ transitionProgress: shareOpenedProgress,
1729
1680
  theme: viewerTheme
1730
- }, draggingShare || shareOpened ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuShare, {
1681
+ }, shareOpenedProgress > 0 ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuShare, {
1731
1682
  viewerTheme: viewerTheme,
1732
1683
  className: styles$6.menuShare,
1733
1684
  title: title,
@@ -1742,9 +1693,9 @@ var ViewerMenu = function ViewerMenu(_ref) {
1742
1693
  onClose: onCloseShare
1743
1694
  }) : null), /*#__PURE__*/React__default["default"].createElement(ViewerMenuContainer, {
1744
1695
  className: styles$6.menuContainer,
1745
- progressSpring: menuOpenedProgress,
1696
+ transitionProgress: menuOpenedProgress,
1746
1697
  theme: viewerTheme
1747
- }, menuMounted ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuPreview, {
1698
+ }, menuOpenedProgress > 0 ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuPreview, {
1748
1699
  viewerTheme: viewerTheme,
1749
1700
  className: styles$6.menuPreview,
1750
1701
  screenSize: screenSize,
@@ -1756,7 +1707,6 @@ var ViewerMenu = function ViewerMenu(_ref) {
1756
1707
  onShare: onShare,
1757
1708
  onClickScreen: onClickScreen,
1758
1709
  onClose: onCloseMenu,
1759
- scrollDisabled: draggingMenu,
1760
1710
  toggleFullscreen: toggleFullscreen,
1761
1711
  fullscreenActive: fullscreenActive,
1762
1712
  fullscreenEnabled: fullscreenEnabled
@@ -1765,9 +1715,8 @@ var ViewerMenu = function ViewerMenu(_ref) {
1765
1715
 
1766
1716
  ViewerMenu.propTypes = propTypes$9;
1767
1717
  ViewerMenu.defaultProps = defaultProps$9;
1768
- var ViewerMenu$1 = /*#__PURE__*/React__default["default"].memo(ViewerMenu);
1769
1718
 
1770
- var styles$5 = {"container":"micromag-viewer-screen-container","inner":"micromag-viewer-screen-inner","navigationHint":"micromag-viewer-screen-navigationHint"};
1719
+ var styles$5 = {"container":"micromag-viewer-screen-container","navigationHint":"micromag-viewer-screen-navigationHint"};
1771
1720
 
1772
1721
  var propTypes$8 = {
1773
1722
  screen: core.PropTypes.screenComponent,
@@ -1777,7 +1726,6 @@ var propTypes$8 = {
1777
1726
  active: PropTypes__default["default"].bool,
1778
1727
  mediaRef: PropTypes__default["default"].func,
1779
1728
  width: PropTypes__default["default"].number,
1780
- index: PropTypes__default["default"].number,
1781
1729
  height: PropTypes__default["default"].number,
1782
1730
  scale: PropTypes__default["default"].number,
1783
1731
  // withNavigationHint: PropTypes.bool, // @todo
@@ -1789,7 +1737,6 @@ var defaultProps$8 = {
1789
1737
  screenState: null,
1790
1738
  current: false,
1791
1739
  active: true,
1792
- index: null,
1793
1740
  mediaRef: null,
1794
1741
  width: null,
1795
1742
  height: null,
@@ -1801,7 +1748,6 @@ var defaultProps$8 = {
1801
1748
  function ViewerScreen(_ref) {
1802
1749
  var screen = _ref.screen,
1803
1750
  renderContext = _ref.renderContext,
1804
- index = _ref.index,
1805
1751
  screenState = _ref.screenState,
1806
1752
  active = _ref.active,
1807
1753
  current = _ref.current,
@@ -1810,47 +1756,23 @@ function ViewerScreen(_ref) {
1810
1756
  height = _ref.height,
1811
1757
  scale = _ref.scale,
1812
1758
  className = _ref.className;
1813
-
1814
- var _useState = React.useState(active || current),
1815
- _useState2 = _slicedToArray__default["default"](_useState, 2),
1816
- mounted = _useState2[0],
1817
- setMounted = _useState2[1];
1818
-
1819
- React.useEffect(function () {
1820
- var timeout = null;
1821
-
1822
- if (active !== mounted) {
1823
- timeout = setTimeout(function () {
1824
- setMounted(active);
1825
- }, 200);
1826
- }
1827
-
1828
- return function () {
1829
- if (timeout !== null) {
1830
- clearTimeout(timeout);
1831
- }
1832
- };
1833
- }, [active, mounted, setMounted, index]);
1834
1759
  return /*#__PURE__*/React__default["default"].createElement("div", {
1835
1760
  className: classNames__default["default"]([styles$5.container, _defineProperty__default["default"]({}, className, className !== null)])
1836
1761
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1837
- className: styles$5.inner,
1838
1762
  style: {
1839
1763
  width: width,
1840
1764
  height: height,
1841
1765
  transform: scale !== null ? "scale(".concat(scale, ")") : null,
1842
- transformOrigin: scale !== null ? '0 0' : null,
1843
- opacity: mounted ? 1 : null
1766
+ transformOrigin: scale !== null ? '0 0' : null
1844
1767
  }
1845
- }, mounted ? /*#__PURE__*/React__default["default"].createElement(components.Screen, {
1768
+ }, /*#__PURE__*/React__default["default"].createElement(components.Screen, {
1846
1769
  screen: screen,
1847
1770
  renderContext: renderContext,
1848
1771
  screenState: screenState,
1849
- index: index,
1850
1772
  active: active,
1851
1773
  current: current,
1852
1774
  mediaRef: mediaRef
1853
- }) : null));
1775
+ })));
1854
1776
  }
1855
1777
 
1856
1778
  ViewerScreen.propTypes = propTypes$8;
@@ -1963,10 +1885,9 @@ var stopDragEventsPropagation = {
1963
1885
 
1964
1886
  function getFormattedTimestamp(s) {
1965
1887
  var withMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1966
- var parts = "".concat(s).split('.');
1967
- var seconds = parts[0];
1968
- var ms = withMilliseconds && parts.length > 1 ? ":".concat(parts[1].substring(0, 3)) : '';
1969
- return (s - (s %= 60)) / 60 + (9 < seconds ? ':' : ':0') + ~~s + ms; // eslint-disable-line
1888
+ var sparts = withMilliseconds ? "".concat(s).split('.') : [];
1889
+ var ms = sparts.length > 1 ? ":".concat(sparts[1].substring(0, 3)) : '';
1890
+ return (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + ~~s + ms; // eslint-disable-line
1970
1891
  }
1971
1892
 
1972
1893
  var SHOW_MILLISECONDS_THRESHOLD = 5; // show milliseconds when scrubbing if length of video is shorter than 5 seconds
@@ -2460,6 +2381,7 @@ var propTypes$2 = {
2460
2381
  screenState: PropTypes__default["default"].string,
2461
2382
  deviceScreens: core.PropTypes.deviceScreens,
2462
2383
  renderContext: core.PropTypes.renderContext,
2384
+ visitor: core.PropTypes.visitor,
2463
2385
  onScreenChange: PropTypes__default["default"].func,
2464
2386
  tapNextScreenWidthPercent: PropTypes__default["default"].number,
2465
2387
  storyIsParsed: PropTypes__default["default"].bool,
@@ -2503,10 +2425,11 @@ var defaultProps$2 = {
2503
2425
  screenState: null,
2504
2426
  deviceScreens: utils.getDeviceScreens(),
2505
2427
  renderContext: 'view',
2428
+ visitor: null,
2506
2429
  onScreenChange: null,
2507
2430
  tapNextScreenWidthPercent: 0.8,
2508
2431
  storyIsParsed: false,
2509
- neighborScreensActive: 1,
2432
+ neighborScreensActive: 2,
2510
2433
  neighborScreenOffset: 105,
2511
2434
  neighborScreenScale: 0.8,
2512
2435
  withMetadata: false,
@@ -2545,6 +2468,7 @@ var Viewer = function Viewer(_ref) {
2545
2468
  screenState = _ref.screenState,
2546
2469
  deviceScreens = _ref.deviceScreens,
2547
2470
  renderContext = _ref.renderContext,
2471
+ visitor = _ref.visitor,
2548
2472
  tapNextScreenWidthPercent = _ref.tapNextScreenWidthPercent,
2549
2473
  storyIsParsed = _ref.storyIsParsed,
2550
2474
  neighborScreensActive = _ref.neighborScreensActive,
@@ -2865,48 +2789,34 @@ var Viewer = function Viewer(_ref) {
2865
2789
  springParams: springParams
2866
2790
  }),
2867
2791
  isDragging = _useDragProgress.dragging,
2868
- progressSpring = _useDragProgress.progress,
2792
+ screenIndexProgress = _useDragProgress.progress,
2869
2793
  dragContentBind = _useDragProgress.bind;
2870
2794
 
2871
- var getScreenStylesByIndex = function getScreenStylesByIndex(index, spring) {
2795
+ var getScreenStylesByIndex = function getScreenStylesByIndex(index, progress) {
2872
2796
  if (transitionType === 'stack') {
2797
+ var _t = index - progress;
2798
+
2799
+ var _clamped = Math.min(1, Math.max(0, _t));
2800
+
2801
+ var invert = Math.min(1, Math.max(0, -_t));
2802
+ var opacity = Math.max(0, 1 - 0.75 * invert + (_t + 1)); // just hide other screens
2803
+
2804
+ if (Math.abs(_t) > neighborScreensActive) return {
2805
+ opacity: 0
2806
+ };
2873
2807
  return {
2874
- zIndex: index,
2875
- opacity: spring.to(function (progress) {
2876
- var t = index - progress;
2877
- var invert = Math.min(1, Math.max(0, -t));
2878
- if (Math.abs(t) > neighborScreensActive) return 0;
2879
- return Math.max(0, 1 - 0.75 * invert + (t + 1));
2880
- }),
2881
- transform: spring.to(function (progress) {
2882
- var t = index - progress;
2883
- var clamped = Math.min(1, Math.max(0, t));
2884
- var invert = Math.min(1, Math.max(0, -t));
2885
- if (Math.abs(t) > neighborScreensActive) return 'translateX(100%)';
2886
- return "translateX(".concat(clamped * 100, "%) scale(").concat(1 - 0.2 * invert, ")");
2887
- }),
2888
- boxShadow: spring.to(function (progress) {
2889
- var t = index - progress;
2890
- if (Math.abs(t) > neighborScreensActive) return null;
2891
- var clamped = Math.min(1, Math.max(0, t));
2892
- return "0 0 ".concat(4 * (1 - clamped), "rem ").concat(-0.5 * (1 - clamped), "rem black");
2893
- })
2808
+ opacity: opacity,
2809
+ transform: "translateX(".concat(_clamped * 100, "%) scale(").concat(1 - 0.2 * invert, ")"),
2810
+ boxShadow: "0 0 ".concat(4 * (1 - _clamped), "rem ").concat(-0.5 * (1 - _clamped), "rem black"),
2811
+ zIndex: index
2894
2812
  };
2895
2813
  }
2896
2814
 
2815
+ var t = index - progress;
2816
+ var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2897
2817
  return {
2898
- opacity: spring.to(function (progress) {
2899
- var t = index - progress;
2900
- if (Math.abs(t) > neighborScreensActive) return 0;
2901
- var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2902
- return 1 - 0.75 * clamped;
2903
- }),
2904
- transform: spring.to(function (progress) {
2905
- var t = index - progress;
2906
- if (Math.abs(t) > neighborScreensActive) return "translate(100%)";
2907
- var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2908
- return "translateX(".concat(t * neighborScreenOffset, "%) scale(").concat(1 - (1 - neighborScreenScale) * clamped, ")");
2909
- }),
2818
+ opacity: 1 - 0.75 * clamped,
2819
+ transform: "translateX(".concat(t * neighborScreenOffset, "%) scale(").concat(1 - (1 - neighborScreenScale) * clamped, ")"),
2910
2820
  zIndex: screensCount - index
2911
2821
  };
2912
2822
  };
@@ -2963,8 +2873,8 @@ var Viewer = function Viewer(_ref) {
2963
2873
  useKeyboardShortcuts(keyboardShortcuts, {
2964
2874
  disabled: renderContext !== 'view'
2965
2875
  });
2966
- return /*#__PURE__*/React__default["default"].createElement(contexts.StoryProvider, {
2967
- story: parsedStory
2876
+ return /*#__PURE__*/React__default["default"].createElement(contexts.VisitorProvider, {
2877
+ visitor: visitor
2968
2878
  }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenSizeProvider, {
2969
2879
  size: screenSize
2970
2880
  }, /*#__PURE__*/React__default["default"].createElement(contexts.ViewerProvider, {
@@ -2992,7 +2902,7 @@ var Viewer = function Viewer(_ref) {
2992
2902
  }), (_ref15 = {}, _defineProperty__default["default"](_ref15, styles$6.landscape, landscape), _defineProperty__default["default"](_ref15, styles$6.withoutGestures, withoutGestures), _defineProperty__default["default"](_ref15, styles$6.hideMenu, !menuVisible), _defineProperty__default["default"](_ref15, styles$6.fadeMenu, playing && playbackControls && !playbackcontrolsVisible), _defineProperty__default["default"](_ref15, styles$6.ready, ready || withoutScreensTransforms), _defineProperty__default["default"](_ref15, styles$6.hasInteracted, hasInteracted), _defineProperty__default["default"](_ref15, styles$6.isDragging, isDragging), _defineProperty__default["default"](_ref15, className, className), _ref15)]),
2993
2903
  ref: containerRef,
2994
2904
  onContextMenu: onContextMenu
2995
- }, !withoutMenu ? /*#__PURE__*/React__default["default"].createElement(ViewerMenu$1, {
2905
+ }, !withoutMenu ? /*#__PURE__*/React__default["default"].createElement(ViewerMenu, {
2996
2906
  story: parsedStory,
2997
2907
  currentScreenIndex: screenIndex,
2998
2908
  withShadow: menuOverScreen && !withoutMenuShadow,
@@ -3027,12 +2937,12 @@ var Viewer = function Viewer(_ref) {
3027
2937
  }, screens.map(function (screen, i) {
3028
2938
  var current = screenIndex === i;
3029
2939
  var active = i >= screenIndex - neighborScreensActive && i <= screenIndex + neighborScreensActive;
3030
- var screenStyles = getScreenStylesByIndex(i, progressSpring);
3031
- return /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
2940
+ var screenStyles = getScreenStylesByIndex(i, screenIndexProgress);
2941
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3032
2942
  key: "screen-viewer-".concat(screen.id || '', "-").concat(i + 1),
3033
2943
  style: screenStyles,
3034
2944
  className: classNames__default["default"]([styles$6.screenContainer, _defineProperty__default["default"]({}, styles$6.current, current)])
3035
- }, screen !== null ? /*#__PURE__*/React__default["default"].createElement(ViewerScreen, {
2945
+ }, screen !== null && active ? /*#__PURE__*/React__default["default"].createElement(ViewerScreen, {
3036
2946
  className: styles$6.screen,
3037
2947
  screen: screen,
3038
2948
  screenState: current ? screenState : null,
@@ -3146,7 +3056,7 @@ var defaultRoutes = {
3146
3056
  screen: screen
3147
3057
  };
3148
3058
 
3149
- var _excluded = ["story", "screenComponents", "memoryRouter", "basePath", "routes", "withoutRouter", "googleApiKey", "visitor", "trackingVariables", "locale", "locales", "translations", "pathWithIndex"];
3059
+ var _excluded = ["story", "screenComponents", "memoryRouter", "basePath", "routes", "withoutRouter", "googleApiKey", "trackingVariables", "locale", "locales", "translations", "pathWithIndex"];
3150
3060
  var propTypes = {
3151
3061
  story: core.PropTypes.story,
3152
3062
  screen: PropTypes__default["default"].string,
@@ -3156,7 +3066,6 @@ var propTypes = {
3156
3066
  routes: routes,
3157
3067
  withoutRouter: PropTypes__default["default"].bool,
3158
3068
  googleApiKey: PropTypes__default["default"].string,
3159
- visitor: core.PropTypes.visitor,
3160
3069
  trackingVariables: core.PropTypes.trackingVariables,
3161
3070
  locale: PropTypes__default["default"].string,
3162
3071
  locales: PropTypes__default["default"].arrayOf(PropTypes__default["default"].string),
@@ -3173,7 +3082,6 @@ var defaultProps = {
3173
3082
  routes: defaultRoutes,
3174
3083
  withoutRouter: false,
3175
3084
  googleApiKey: null,
3176
- visitor: null,
3177
3085
  trackingVariables: null,
3178
3086
  locale: 'en',
3179
3087
  locales: ['fr', 'en'],
@@ -3190,7 +3098,6 @@ var ViewerContainer = function ViewerContainer(_ref) {
3190
3098
  routes = _ref.routes,
3191
3099
  withoutRouter = _ref.withoutRouter,
3192
3100
  googleApiKey = _ref.googleApiKey,
3193
- visitor = _ref.visitor,
3194
3101
  trackingVariables = _ref.trackingVariables,
3195
3102
  locale = _ref.locale,
3196
3103
  locales = _ref.locales,
@@ -3240,9 +3147,7 @@ var ViewerContainer = function ViewerContainer(_ref) {
3240
3147
  }, /*#__PURE__*/React__default["default"].createElement(screens.ScreensProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.ComponentsProvider, {
3241
3148
  namespace: contexts.SCREENS_NAMESPACE,
3242
3149
  components: screenComponents || {}
3243
- }, /*#__PURE__*/React__default["default"].createElement(contexts.VisitorProvider, {
3244
- visitor: visitor
3245
- }, /*#__PURE__*/React__default["default"].createElement(contexts.PlaybackProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.TrackingProvider, {
3150
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.UserInteractionProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.PlaybackProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.TrackingProvider, {
3246
3151
  variables: finalTrackingVariables
3247
3152
  }, withoutRouter ? /*#__PURE__*/React__default["default"].createElement(Viewer, Object.assign({
3248
3153
  story: story,