@micromag/viewer 0.3.207 → 0.3.213

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
@@ -18,6 +18,7 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
18
18
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
19
19
  var classNames = require('classnames');
20
20
  var reactHelmet = require('react-helmet');
21
+ var web = require('@react-spring/web');
21
22
  var EventEmitter = require('wolfy87-eventemitter');
22
23
  var components = require('@micromag/core/components');
23
24
  var hooks = require('@micromag/core/hooks');
@@ -26,7 +27,6 @@ var reactIntl = require('react-intl');
26
27
  var faTimes = require('@fortawesome/free-solid-svg-icons/faTimes');
27
28
  var reactFontawesome = require('@fortawesome/react-fontawesome');
28
29
  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');
@@ -531,14 +531,14 @@ var styles$e = {"container":"micromag-viewer-buttons-toggle-button-container","n
531
531
 
532
532
  var propTypes$i = {
533
533
  className: PropTypes__default["default"].string,
534
- toggled: PropTypes__default["default"].number,
534
+ progressSpring: PropTypes__default["default"].number,
535
535
  button: PropTypes__default["default"].node,
536
536
  toggledButton: PropTypes__default["default"].node,
537
537
  toggledButtonClassName: PropTypes__default["default"].string
538
538
  };
539
539
  var defaultProps$i = {
540
540
  className: null,
541
- toggled: 0,
541
+ progressSpring: 0,
542
542
  button: null,
543
543
  toggledButton: null,
544
544
  toggledButtonClassName: null
@@ -546,26 +546,27 @@ var defaultProps$i = {
546
546
 
547
547
  var ToggleButton = function ToggleButton(_ref) {
548
548
  var className = _ref.className,
549
- toggled = _ref.toggled,
549
+ progressSpring = _ref.progressSpring,
550
550
  button = _ref.button,
551
551
  toggledButton = _ref.toggledButton,
552
552
  toggledButtonClassName = _ref.toggledButtonClassName;
553
553
  if (button === null) return false;
554
-
555
- var getToggleButtonStyles = function getToggleButtonStyles(t) {
556
- return {
557
- transform: "translateY(".concat(t * -100, "%)")
558
- };
559
- };
560
-
561
554
  return /*#__PURE__*/React__default["default"].createElement("div", {
562
555
  className: classNames__default["default"]([styles$e.container, _defineProperty__default["default"]({}, className, className !== null)])
563
- }, /*#__PURE__*/React__default["default"].createElement("div", {
556
+ }, /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
564
557
  className: styles$e.normal,
565
- style: getToggleButtonStyles(toggled)
566
- }, button), /*#__PURE__*/React__default["default"].createElement("div", {
558
+ style: {
559
+ transform: progressSpring.to(function (p) {
560
+ return "translateY(".concat(p * -100, "%)");
561
+ })
562
+ }
563
+ }, button), /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
567
564
  className: classNames__default["default"]([styles$e.toggled, _defineProperty__default["default"]({}, toggledButtonClassName, toggledButtonClassName !== null)]),
568
- style: getToggleButtonStyles(toggled - 1)
565
+ style: {
566
+ transform: progressSpring.to(function (p) {
567
+ return "translateY(".concat((p - 1) * -100, "%)");
568
+ })
569
+ }
569
570
  }, toggledButton));
570
571
  };
571
572
 
@@ -576,20 +577,20 @@ var styles$d = {"backdrop":"micromag-viewer-menus-menu-container-backdrop","heig
576
577
 
577
578
  var propTypes$h = {
578
579
  className: PropTypes__default["default"].string,
579
- transitionProgress: PropTypes__default["default"].number,
580
+ progressSpring: PropTypes__default["default"].number,
580
581
  theme: core.PropTypes.viewerTheme,
581
582
  children: PropTypes__default["default"].node
582
583
  };
583
584
  var defaultProps$h = {
584
585
  className: null,
585
- transitionProgress: 0,
586
+ progressSpring: 0,
586
587
  theme: null,
587
588
  children: null
588
589
  };
589
590
 
590
591
  var ViewerMenuContainer = function ViewerMenuContainer(_ref) {
591
592
  var className = _ref.className,
592
- transitionProgress = _ref.transitionProgress,
593
+ progressSpring = _ref.progressSpring,
593
594
  viewerTheme = _ref.theme,
594
595
  children = _ref.children;
595
596
 
@@ -607,17 +608,25 @@ var ViewerMenuContainer = function ViewerMenuContainer(_ref) {
607
608
  style: {
608
609
  pointerEvents: 'none'
609
610
  }
610
- }, /*#__PURE__*/React__default["default"].createElement("div", {
611
+ }, /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
611
612
  className: styles$d.heightContainer,
612
613
  style: _objectSpread__default["default"]({
613
- height: "".concat(transitionProgress * 100, "%"),
614
- pointerEvents: transitionProgress < 0.25 ? 'none' : 'auto',
615
- zIndex: Math.round(2 + transitionProgress)
614
+ opacity: progressSpring,
615
+ // transform: progressSpring.to((p) => `translateY(${(1 - p) * -100}%)`),
616
+ // height: progressSpring.to((p) => `${p * 100}%`),
617
+ pointerEvents: progressSpring.to(function (p) {
618
+ return p < 0.25 ? 'none' : 'auto';
619
+ }),
620
+ zIndex: progressSpring.to(function (p) {
621
+ return Math.round(2 + p);
622
+ })
616
623
  }, backgroundColorStyle)
617
- }, children), /*#__PURE__*/React__default["default"].createElement("div", {
624
+ }, children), /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
618
625
  className: styles$d.backdrop,
619
626
  style: {
620
- opacity: utils.easings.easeOutQuint(transitionProgress)
627
+ opacity: progressSpring.to(function (p) {
628
+ return utils.easings.easeOutQuint(p);
629
+ })
621
630
  }
622
631
  }));
623
632
  };
@@ -944,7 +953,10 @@ var ViewerMenuScreen = function ViewerMenuScreen(_ref) {
944
953
  }]
945
954
  })) : '');
946
955
  return /*#__PURE__*/React__default["default"].createElement("div", {
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)])
956
+ className: classNames__default["default"]([styles$a.container, (_ref4 = {}, _defineProperty__default["default"](_ref4, className, className !== null), _defineProperty__default["default"](_ref4, styles$a.isCurrent, current), _ref4)]),
957
+ style: {
958
+ paddingBottom: "".concat(screenHeight / screenWidth * 100, "%")
959
+ }
948
960
  }, /*#__PURE__*/React__default["default"].createElement("button", {
949
961
  type: "button",
950
962
  className: styles$a.button,
@@ -977,7 +989,7 @@ var ViewerMenuScreen = function ViewerMenuScreen(_ref) {
977
989
  ViewerMenuScreen.propTypes = propTypes$d;
978
990
  ViewerMenuScreen.defaultProps = defaultProps$d;
979
991
 
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"};
992
+ 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","inner":"micromag-viewer-menus-menu-preview-inner","frame":"micromag-viewer-menus-menu-preview-frame","fillPulse":"micromag-viewer-menus-menu-preview-fillPulse","isLoading":"micromag-viewer-menus-menu-preview-isLoading","screen":"micromag-viewer-menus-menu-preview-screen","intro":"micromag-viewer-menus-menu-preview-intro"};
981
993
 
982
994
  var propTypes$c = {
983
995
  viewerTheme: core.PropTypes.viewerTheme,
@@ -988,6 +1000,7 @@ var propTypes$c = {
988
1000
  onClickScreen: PropTypes__default["default"].func,
989
1001
  maxThumbsWidth: PropTypes__default["default"].number,
990
1002
  paddingTop: PropTypes__default["default"].number,
1003
+ scrollDisabled: PropTypes__default["default"].bool,
991
1004
  // @todo to reimplement:
992
1005
  // shouldLoad: PropTypes.bool,
993
1006
  // toggleFullscreen: PropTypes.func,
@@ -1005,6 +1018,7 @@ var defaultProps$c = {
1005
1018
  onClickScreen: null,
1006
1019
  maxThumbsWidth: 140,
1007
1020
  paddingTop: null,
1021
+ scrollDisabled: false,
1008
1022
  // toggleFullscreen: null,
1009
1023
  // fullscreenActive: false,
1010
1024
  // fullscreenEnabled: false,
@@ -1020,6 +1034,7 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1020
1034
  onClickScreen = _ref.onClickScreen,
1021
1035
  maxThumbsWidth = _ref.maxThumbsWidth,
1022
1036
  paddingTop = _ref.paddingTop,
1037
+ scrollDisabled = _ref.scrollDisabled,
1023
1038
  className = _ref.className;
1024
1039
 
1025
1040
  var _useDimensionObserver = hooks.useDimensionObserver(),
@@ -1046,12 +1061,29 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1046
1061
  var brandImageStyle = brandImageUrl !== null ? {
1047
1062
  backgroundImage: "url(".concat(brandImageUrl, ")")
1048
1063
  } : null; // const { url: brandLogoUrl = null } = brandLogo || {};
1049
- // @todo optimize all of this the proper way
1064
+
1065
+ var _useState = React.useState([]),
1066
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1067
+ screensMounted = _useState2[0],
1068
+ setScreensMounted = _useState2[1]; // @todo optimize all of this the proper way
1050
1069
  // const finalItems = useMemo(
1051
1070
  // () => (!focusable ? items.map((s, i) => (i > 6 ? { screenId: s.screenId } : s)) : items),
1052
1071
  // [items, focusable],
1053
1072
  // );
1054
1073
 
1074
+
1075
+ React.useEffect(function () {
1076
+ if (items.length === screensMounted.length) {
1077
+ return null;
1078
+ }
1079
+
1080
+ var timeout = setTimeout(function () {
1081
+ setScreensMounted([].concat(_toConsumableArray__default["default"](screensMounted), [true]));
1082
+ }, 40);
1083
+ return function () {
1084
+ clearTimeout(timeout);
1085
+ };
1086
+ }, [items, screensMounted, setScreensMounted]);
1055
1087
  return /*#__PURE__*/React__default["default"].createElement("div", {
1056
1088
  className: classNames__default["default"]([styles$9.container, _defineProperty__default["default"]({}, className, className !== null)]),
1057
1089
  style: _objectSpread__default["default"](_objectSpread__default["default"]({}, brandImageStyle), {}, {
@@ -1062,7 +1094,8 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1062
1094
  className: styles$9.content,
1063
1095
  ref: containerRef
1064
1096
  }, /*#__PURE__*/React__default["default"].createElement(Scroll__default["default"], {
1065
- className: styles$9.scroll
1097
+ className: styles$9.scroll,
1098
+ disabled: scrollDisabled
1066
1099
  }, /*#__PURE__*/React__default["default"].createElement("nav", {
1067
1100
  className: styles$9.nav,
1068
1101
  style: {
@@ -1072,38 +1105,36 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1072
1105
  className: styles$9.items
1073
1106
  }, items.map(function (item, index) {
1074
1107
  var _ref6 = item || {},
1075
- screenId = _ref6.screenId,
1076
- _ref6$screen = _ref6.screen,
1077
- screen = _ref6$screen === void 0 ? null : _ref6$screen;
1108
+ screenId = _ref6.screenId;
1078
1109
 
1079
1110
  var itemStyles = {
1080
1111
  width: "".concat(100 / thumbsPerLine, "%")
1081
1112
  };
1113
+
1114
+ var _ref7 = screenSize || {},
1115
+ screenWidth = _ref7.width,
1116
+ screenHeight = _ref7.height;
1117
+
1118
+ var screenMounted = screensMounted[index] || false;
1082
1119
  return /*#__PURE__*/React__default["default"].createElement("li", {
1083
1120
  key: "item-".concat(screenId),
1084
1121
  className: styles$9.item,
1085
1122
  style: itemStyles
1086
1123
  }, /*#__PURE__*/React__default["default"].createElement("div", {
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",
1124
+ className: styles$9.inner
1125
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1126
+ className: classNames__default["default"]([styles$9.frame, _defineProperty__default["default"]({}, styles$9.isLoading, !screenMounted)]),
1094
1127
  style: {
1095
- animationDelay: "".concat(index * -50, "ms")
1128
+ paddingBottom: "".concat(screenHeight / screenWidth * 100, "%")
1096
1129
  }
1097
- }, /*#__PURE__*/React__default["default"].createElement("rect", {
1098
- width: "10",
1099
- height: "16"
1100
- })) : /*#__PURE__*/React__default["default"].createElement(ViewerMenuScreen, {
1130
+ }, screenMounted ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuScreen, {
1131
+ className: styles$9.screen,
1101
1132
  item: item,
1102
1133
  index: index,
1103
1134
  screenSize: screenSize,
1104
1135
  onClick: onClickScreen,
1105
1136
  focusable: focusable
1106
- })));
1137
+ }) : null)));
1107
1138
  }))))));
1108
1139
  };
1109
1140
 
@@ -1413,6 +1444,11 @@ var ViewerMenu = function ViewerMenu(_ref) {
1413
1444
  shareOpened = _useState4[0],
1414
1445
  setShareOpened = _useState4[1];
1415
1446
 
1447
+ var _useState5 = React.useState(false),
1448
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
1449
+ menuMounted = _useState6[0],
1450
+ setMenuMounted = _useState6[1];
1451
+
1416
1452
  var _useDimensionObserver = hooks.useDimensionObserver(),
1417
1453
  navContainerRef = _useDimensionObserver.ref,
1418
1454
  _useDimensionObserver2 = _useDimensionObserver.height,
@@ -1553,6 +1589,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1553
1589
  springParams: springParams
1554
1590
  }),
1555
1591
  bindShareDrag = _useDragProgress.bind,
1592
+ draggingShare = _useDragProgress.dragging,
1556
1593
  shareOpenedProgress = _useDragProgress.progress;
1557
1594
 
1558
1595
  var computeMenuProgress = React.useCallback(function (_ref9) {
@@ -1600,6 +1637,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1600
1637
  springParams: springParams
1601
1638
  }),
1602
1639
  bindMenuDrag = _useDragProgress2.bind,
1640
+ draggingMenu = _useDragProgress2.dragging,
1603
1641
  menuOpenedProgress = _useDragProgress2.progress;
1604
1642
 
1605
1643
  var keyboardShortcuts = React.useMemo(function () {
@@ -1615,6 +1653,13 @@ var ViewerMenu = function ViewerMenu(_ref) {
1615
1653
  useKeyboardShortcuts(keyboardShortcuts); // should be zero if either screens menu or share menu is opened
1616
1654
 
1617
1655
  var dotsOpacity = Math.min(1, Math.max(0, 1 - (menuOpenedProgress + shareOpenedProgress)));
1656
+ React.useEffect(function () {
1657
+ if ((menuOpened || draggingMenu) && !menuMounted) {
1658
+ setMenuMounted(true);
1659
+ } else if (!menuOpened && !draggingMenu && menuMounted) {
1660
+ setMenuMounted(false);
1661
+ }
1662
+ }, [menuOpened, draggingMenu, menuMounted, setMenuMounted]);
1618
1663
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
1619
1664
  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)]),
1620
1665
  ref: refDots,
@@ -1640,7 +1685,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1640
1685
  theme: menuTheme,
1641
1686
  iconPosition: "left"
1642
1687
  }),
1643
- toggled: shareOpenedProgress
1688
+ progressSpring: shareOpenedProgress
1644
1689
  })) : null, !withoutScreensMenu ? /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1645
1690
  className: classNames__default["default"]([styles$6.menuItem, styles$6.menuItemScreens])
1646
1691
  }, bindMenuDrag()), /*#__PURE__*/React__default["default"].createElement(ToggleButton, {
@@ -1656,7 +1701,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1656
1701
  theme: menuTheme,
1657
1702
  iconPosition: "right"
1658
1703
  }),
1659
- toggled: menuOpenedProgress,
1704
+ progressSpring: menuOpenedProgress,
1660
1705
  toggledButtonClassName: styles$6.screensMenuButtonToggled
1661
1706
  })) : null), /*#__PURE__*/React__default["default"].createElement(ViewerMenuDots, Object.assign({}, menuTheme, {
1662
1707
  direction: "horizontal",
@@ -1676,9 +1721,9 @@ var ViewerMenu = function ViewerMenu(_ref) {
1676
1721
  }
1677
1722
  }))), /*#__PURE__*/React__default["default"].createElement(ViewerMenuContainer, {
1678
1723
  className: styles$6.menuContainer,
1679
- transitionProgress: shareOpenedProgress,
1724
+ progressSpring: shareOpenedProgress,
1680
1725
  theme: viewerTheme
1681
- }, shareOpenedProgress > 0 ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuShare, {
1726
+ }, draggingShare || shareOpened ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuShare, {
1682
1727
  viewerTheme: viewerTheme,
1683
1728
  className: styles$6.menuShare,
1684
1729
  title: title,
@@ -1693,9 +1738,9 @@ var ViewerMenu = function ViewerMenu(_ref) {
1693
1738
  onClose: onCloseShare
1694
1739
  }) : null), /*#__PURE__*/React__default["default"].createElement(ViewerMenuContainer, {
1695
1740
  className: styles$6.menuContainer,
1696
- transitionProgress: menuOpenedProgress,
1741
+ progressSpring: menuOpenedProgress,
1697
1742
  theme: viewerTheme
1698
- }, menuOpenedProgress > 0 ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuPreview, {
1743
+ }, menuMounted ? /*#__PURE__*/React__default["default"].createElement(ViewerMenuPreview, {
1699
1744
  viewerTheme: viewerTheme,
1700
1745
  className: styles$6.menuPreview,
1701
1746
  screenSize: screenSize,
@@ -1707,6 +1752,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1707
1752
  onShare: onShare,
1708
1753
  onClickScreen: onClickScreen,
1709
1754
  onClose: onCloseMenu,
1755
+ scrollDisabled: draggingMenu,
1710
1756
  toggleFullscreen: toggleFullscreen,
1711
1757
  fullscreenActive: fullscreenActive,
1712
1758
  fullscreenEnabled: fullscreenEnabled
@@ -1715,6 +1761,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1715
1761
 
1716
1762
  ViewerMenu.propTypes = propTypes$9;
1717
1763
  ViewerMenu.defaultProps = defaultProps$9;
1764
+ var ViewerMenu$1 = /*#__PURE__*/React__default["default"].memo(ViewerMenu);
1718
1765
 
1719
1766
  var styles$5 = {"container":"micromag-viewer-screen-container","navigationHint":"micromag-viewer-screen-navigationHint"};
1720
1767
 
@@ -2789,34 +2836,48 @@ var Viewer = function Viewer(_ref) {
2789
2836
  springParams: springParams
2790
2837
  }),
2791
2838
  isDragging = _useDragProgress.dragging,
2792
- screenIndexProgress = _useDragProgress.progress,
2839
+ progressSpring = _useDragProgress.progress,
2793
2840
  dragContentBind = _useDragProgress.bind;
2794
2841
 
2795
- var getScreenStylesByIndex = function getScreenStylesByIndex(index, progress) {
2842
+ var getScreenStylesByIndex = function getScreenStylesByIndex(index, spring) {
2796
2843
  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
- };
2807
2844
  return {
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
2845
+ zIndex: index,
2846
+ opacity: spring.to(function (progress) {
2847
+ var t = index - progress;
2848
+ var invert = Math.min(1, Math.max(0, -t));
2849
+ if (Math.abs(t) > neighborScreensActive) return 0;
2850
+ return Math.max(0, 1 - 0.75 * invert + (t + 1));
2851
+ }),
2852
+ transform: spring.to(function (progress) {
2853
+ var t = index - progress;
2854
+ var clamped = Math.min(1, Math.max(0, t));
2855
+ var invert = Math.min(1, Math.max(0, -t));
2856
+ if (Math.abs(t) > neighborScreensActive) return 'translateX(100%)';
2857
+ return "translateX(".concat(clamped * 100, "%) scale(").concat(1 - 0.2 * invert, ")");
2858
+ }),
2859
+ boxShadow: spring.to(function (progress) {
2860
+ var t = index - progress;
2861
+ if (Math.abs(t) > neighborScreensActive) return null;
2862
+ var clamped = Math.min(1, Math.max(0, t));
2863
+ return "0 0 ".concat(4 * (1 - clamped), "rem ").concat(-0.5 * (1 - clamped), "rem black");
2864
+ })
2812
2865
  };
2813
2866
  }
2814
2867
 
2815
- var t = index - progress;
2816
- var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2817
2868
  return {
2818
- opacity: 1 - 0.75 * clamped,
2819
- transform: "translateX(".concat(t * neighborScreenOffset, "%) scale(").concat(1 - (1 - neighborScreenScale) * clamped, ")"),
2869
+ opacity: spring.to(function (progress) {
2870
+ var t = index - progress;
2871
+ if (Math.abs(t) > neighborScreensActive) return 0;
2872
+ var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2873
+ return 1 - 0.75 * clamped;
2874
+ }),
2875
+ transform: spring.to(function (progress) {
2876
+ var t = index - progress;
2877
+ if (Math.abs(t) > neighborScreensActive) return "translate(100%)";
2878
+ var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2879
+ return "translateX(".concat(t * neighborScreenOffset, "%) scale(").concat(1 - (1 - neighborScreenScale) * clamped, ")");
2880
+ }),
2820
2881
  zIndex: screensCount - index
2821
2882
  };
2822
2883
  };
@@ -2902,7 +2963,7 @@ var Viewer = function Viewer(_ref) {
2902
2963
  }), (_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)]),
2903
2964
  ref: containerRef,
2904
2965
  onContextMenu: onContextMenu
2905
- }, !withoutMenu ? /*#__PURE__*/React__default["default"].createElement(ViewerMenu, {
2966
+ }, !withoutMenu ? /*#__PURE__*/React__default["default"].createElement(ViewerMenu$1, {
2906
2967
  story: parsedStory,
2907
2968
  currentScreenIndex: screenIndex,
2908
2969
  withShadow: menuOverScreen && !withoutMenuShadow,
@@ -2937,8 +2998,8 @@ var Viewer = function Viewer(_ref) {
2937
2998
  }, screens.map(function (screen, i) {
2938
2999
  var current = screenIndex === i;
2939
3000
  var active = i >= screenIndex - neighborScreensActive && i <= screenIndex + neighborScreensActive;
2940
- var screenStyles = getScreenStylesByIndex(i, screenIndexProgress);
2941
- return /*#__PURE__*/React__default["default"].createElement("div", {
3001
+ var screenStyles = getScreenStylesByIndex(i, progressSpring);
3002
+ return /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
2942
3003
  key: "screen-viewer-".concat(screen.id || '', "-").concat(i + 1),
2943
3004
  style: screenStyles,
2944
3005
  className: classNames__default["default"]([styles$6.screenContainer, _defineProperty__default["default"]({}, styles$6.current, current)])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/viewer",
3
- "version": "0.3.207",
3
+ "version": "0.3.213",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -59,14 +59,14 @@
59
59
  "@fortawesome/fontawesome-svg-core": "^1.2.32",
60
60
  "@fortawesome/free-solid-svg-icons": "^5.15.1",
61
61
  "@fortawesome/react-fontawesome": "^0.1.13",
62
- "@micromag/core": "^0.3.207",
63
- "@micromag/element-scroll": "^0.3.207",
64
- "@micromag/element-share-options": "^0.3.207",
65
- "@micromag/element-webview": "^0.3.207",
66
- "@micromag/elements": "^0.3.207",
67
- "@micromag/fields": "^0.3.207",
68
- "@micromag/intl": "^0.3.207",
69
- "@micromag/screens": "^0.3.207",
62
+ "@micromag/core": "^0.3.213",
63
+ "@micromag/element-scroll": "^0.3.213",
64
+ "@micromag/element-share-options": "^0.3.213",
65
+ "@micromag/element-webview": "^0.3.213",
66
+ "@micromag/elements": "^0.3.213",
67
+ "@micromag/fields": "^0.3.213",
68
+ "@micromag/intl": "^0.3.213",
69
+ "@micromag/screens": "^0.3.213",
70
70
  "@react-spring/core": "^9.1.1",
71
71
  "@react-spring/web": "^9.1.1",
72
72
  "@use-gesture/react": "^10.2.4",
@@ -79,10 +79,11 @@
79
79
  "react-router": "^5.2.0",
80
80
  "react-router-dom": "^5.2.0",
81
81
  "react-share": "^4.3.1",
82
+ "react-spring": "^9.5.2",
82
83
  "wolfy87-eventemitter": "^5.2.9"
83
84
  },
84
85
  "publishConfig": {
85
86
  "access": "public"
86
87
  },
87
- "gitHead": "e7e2958bb7e9e222cc8621b44a90f1e974dd93b6"
88
+ "gitHead": "e7dcbfd9c59763758e35c37bacf6749e95c1cbac"
88
89
  }