@micromag/viewer 0.3.148 → 0.3.152

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
@@ -19,6 +19,7 @@ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
19
19
  var faArrowLeft = require('@fortawesome/free-solid-svg-icons/faArrowLeft');
20
20
  var faArrowRight = require('@fortawesome/free-solid-svg-icons/faArrowRight');
21
21
  var reactFontawesome = require('@fortawesome/react-fontawesome');
22
+ var react = require('@use-gesture/react');
22
23
  var classNames = require('classnames');
23
24
  var reactHelmet = require('react-helmet');
24
25
  var reactIntl = require('react-intl');
@@ -28,13 +29,16 @@ var hooks = require('@micromag/core/hooks');
28
29
  var utils = require('@micromag/core/utils');
29
30
  var core = require('@react-spring/core');
30
31
  var web = require('@react-spring/web');
31
- var react = require('@use-gesture/react');
32
32
  var faTimes = require('@fortawesome/free-solid-svg-icons/faTimes');
33
33
  var faCompress = require('@fortawesome/free-solid-svg-icons/faCompress');
34
34
  var faExpand = require('@fortawesome/free-solid-svg-icons/faExpand');
35
35
  var faShare = require('@fortawesome/free-solid-svg-icons/faShare');
36
36
  var Scroll = require('@micromag/element-scroll');
37
37
  var ShareOptions = require('@micromag/element-share-options');
38
+ var faPause = require('@fortawesome/free-solid-svg-icons/faPause');
39
+ var faPlay = require('@fortawesome/free-solid-svg-icons/faPlay');
40
+ var faVolumeUp = require('@fortawesome/free-solid-svg-icons/faVolumeUp');
41
+ var WebView = require('@micromag/element-webview');
38
42
 
39
43
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
40
44
 
@@ -50,13 +54,7 @@ var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
50
54
  var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
51
55
  var Scroll__default = /*#__PURE__*/_interopDefaultLegacy(Scroll);
52
56
  var ShareOptions__default = /*#__PURE__*/_interopDefaultLegacy(ShareOptions);
53
-
54
- var home = "/";
55
- var screen = "/:screen";
56
- var defaultRoutes = {
57
- home: home,
58
- screen: screen
59
- };
57
+ var WebView__default = /*#__PURE__*/_interopDefaultLegacy(WebView);
60
58
 
61
59
  var routes = PropTypes__default["default"].shape({
62
60
  home: PropTypes__default["default"].string.isRequired,
@@ -135,21 +133,16 @@ function useScreenInteraction() {
135
133
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
136
134
  screens = _ref.screens,
137
135
  screenIndex = _ref.screenIndex,
138
- screenWidth = _ref.screenWidth,
139
- _ref$isView = _ref.isView,
140
- isView = _ref$isView === void 0 ? false : _ref$isView,
136
+ _ref$disableCurrentSc = _ref.disableCurrentScreenNavigation,
137
+ disableCurrentScreenNavigation = _ref$disableCurrentSc === void 0 ? false : _ref$disableCurrentSc,
141
138
  _ref$clickOnSiblings = _ref.clickOnSiblings,
142
139
  clickOnSiblings = _ref$clickOnSiblings === void 0 ? false : _ref$clickOnSiblings,
143
140
  _ref$nextScreenWidthP = _ref.nextScreenWidthPercent,
144
141
  nextScreenWidthPercent = _ref$nextScreenWidthP === void 0 ? 0.5 : _ref$nextScreenWidthP,
145
- _ref$eventsManager = _ref.eventsManager,
146
- eventsManager = _ref$eventsManager === void 0 ? null : _ref$eventsManager,
147
- _ref$onClick = _ref.onClick,
148
- onClick = _ref$onClick === void 0 ? null : _ref$onClick,
149
- _ref$onEnd = _ref.onEnd,
150
- onEnd = _ref$onEnd === void 0 ? null : _ref$onEnd,
151
- _ref$onChangeScreen = _ref.onChangeScreen,
152
- onChangeScreen = _ref$onChangeScreen === void 0 ? null : _ref$onChangeScreen;
142
+ _ref$onInteract = _ref.onInteract,
143
+ onInteract = _ref$onInteract === void 0 ? null : _ref$onInteract,
144
+ _ref$onNavigate = _ref.onNavigate,
145
+ onNavigate = _ref$onNavigate === void 0 ? null : _ref$onNavigate;
153
146
 
154
147
  var _useState = React.useState(screens.reduce(function (map, _ref2) {
155
148
  var id = _ref2.id;
@@ -182,74 +175,69 @@ function useScreenInteraction() {
182
175
  var disableInteraction = React.useCallback(function () {
183
176
  return updateInteraction(false);
184
177
  }, [updateInteraction]);
185
- var onScreenClick = React.useCallback(function (e, index) {
186
- if (onClick !== null) {
187
- onClick(e, index);
178
+ var interact = React.useCallback(function (_ref5) {
179
+ var event = _ref5.event,
180
+ target = _ref5.target,
181
+ currentTarget = _ref5.currentTarget,
182
+ x = _ref5.x,
183
+ y = _ref5.y,
184
+ index = _ref5.index;
185
+
186
+ if (onInteract !== null) {
187
+ onInteract({
188
+ event: event,
189
+ target: target,
190
+ currentTarget: currentTarget,
191
+ index: index,
192
+ x: x,
193
+ y: y
194
+ });
188
195
  }
189
196
 
190
197
  var screensCount = screens.length;
191
198
  var tappedCurrent = screenIndex === index;
192
199
 
193
- if (eventsManager !== null) {
194
- eventsManager.emit('tap', e, index);
195
- }
196
-
197
- if (!isView && tappedCurrent || checkClickable(e.target) || tappedCurrent && !currentScreenInteractionEnabled) {
200
+ if (disableCurrentScreenNavigation && tappedCurrent || checkClickable(target) || tappedCurrent && !currentScreenInteractionEnabled) {
198
201
  return;
199
202
  }
200
203
 
201
- var nextIndex = screenIndex;
202
-
203
- var _e$currentTarget$getB = e.currentTarget.getBoundingClientRect(),
204
- _e$currentTarget$getB2 = _e$currentTarget$getB.left,
205
- contentX = _e$currentTarget$getB2 === void 0 ? 0 : _e$currentTarget$getB2;
206
-
207
- var tapX = e.clientX; // console.log(e.clientX, contentX, screenWidth);
208
-
209
- var hasTappedLeft = tappedCurrent ? tapX - contentX < screenWidth * (1 - nextScreenWidthPercent) : screenIndex > index;
210
-
211
- if (hasTappedLeft) {
212
- nextIndex = clickOnSiblings ? index : Math.max(0, screenIndex - 1);
204
+ var _currentTarget$getBou = currentTarget.getBoundingClientRect(),
205
+ left = _currentTarget$getBou.left,
206
+ width = _currentTarget$getBou.width;
213
207
 
214
- if (eventsManager !== null) {
215
- eventsManager.emit('tap_previous', nextIndex);
216
- }
217
- } else {
218
- nextIndex = clickOnSiblings ? index : Math.min(screensCount - 1, screenIndex + 1);
219
- var isLastScreen = screenIndex === screensCount - 1;
220
-
221
- if (isLastScreen && onEnd !== null) {
222
- onEnd();
208
+ var relativeX = x - left;
209
+ var direction = relativeX < width * (1 - nextScreenWidthPercent) ? 'previous' : 'next';
210
+ var lastIndex = screensCount - 1;
211
+ var nextIndex = index;
223
212
 
224
- if (eventsManager !== null) {
225
- eventsManager.emit('tap_end');
226
- }
227
- } else if (eventsManager) {
228
- eventsManager.emit('tap_next', nextIndex);
229
- }
213
+ if (direction === 'previous' && !clickOnSiblings) {
214
+ nextIndex = Math.max(0, screenIndex - 1);
215
+ } else if (direction === 'next' && !clickOnSiblings) {
216
+ nextIndex = Math.min(lastIndex, screenIndex + 1);
230
217
  }
231
218
 
232
- if (eventsManager !== null) {
233
- eventsManager.emit('change_screen', nextIndex);
219
+ if (onNavigate !== null) {
220
+ onNavigate({
221
+ index: index,
222
+ newIndex: nextIndex,
223
+ direction: direction,
224
+ end: index === nextIndex && nextIndex === lastIndex
225
+ });
234
226
  }
235
-
236
- onChangeScreen(nextIndex);
237
- }, [screenWidth, screens, screenIndex, eventsManager, onClick, onEnd, onChangeScreen, screenIndex, screensInteractionEnabled, currentScreenInteractionEnabled, nextScreenWidthPercent, isView, clickOnSiblings]);
227
+ }, [screens, screenIndex, screenIndex, screensInteractionEnabled, currentScreenInteractionEnabled, nextScreenWidthPercent, disableCurrentScreenNavigation, clickOnSiblings, onInteract, onNavigate]);
238
228
  return {
239
- onClick: onScreenClick,
229
+ interact: interact,
240
230
  currentScreenInteractionEnabled: currentScreenInteractionEnabled,
241
231
  enableInteraction: enableInteraction,
242
232
  disableInteraction: disableInteraction
243
233
  };
244
234
  }
245
235
 
246
- var styles$8 = {"container":"micromag-viewer-container","navButton":"micromag-viewer-navButton","menuPreview":"micromag-viewer-menuPreview","menuPreviewContainer":"micromag-viewer-menuPreviewContainer","screen":"micromag-viewer-screen","screenInner":"micromag-viewer-screenInner","content":"micromag-viewer-content","previous":"micromag-viewer-previous","next":"micromag-viewer-next","menuDotsContainer":"micromag-viewer-menuDotsContainer","menuDots":"micromag-viewer-menuDots","current":"micromag-viewer-current","handTap":"micromag-viewer-handTap","landscape":"micromag-viewer-landscape","visible":"micromag-viewer-visible","withSiblings":"micromag-viewer-withSiblings","hideMenu":"micromag-viewer-hideMenu","ready":"micromag-viewer-ready","hasInteracted":"micromag-viewer-hasInteracted"};
247
-
248
- var styles$7 = {"container":"micromag-viewer-menus-menu-dots-container","closeButton":"micromag-viewer-menus-menu-dots-closeButton","menuButton":"micromag-viewer-menus-menu-dots-menuButton","item":"micromag-viewer-menus-menu-dots-item","items":"micromag-viewer-menus-menu-dots-items","menu":"micromag-viewer-menus-menu-dots-menu","menuIcon":"micromag-viewer-menus-menu-dots-menuIcon","vertical":"micromag-viewer-menus-menu-dots-vertical","withShadow":"micromag-viewer-menus-menu-dots-withShadow"};
236
+ var styles$b = {"container":"micromag-viewer-menus-menu-dots-container","closeButton":"micromag-viewer-menus-menu-dots-closeButton","menuButton":"micromag-viewer-menus-menu-dots-menuButton","item":"micromag-viewer-menus-menu-dots-item","items":"micromag-viewer-menus-menu-dots-items","menu":"micromag-viewer-menus-menu-dots-menu","menuIcon":"micromag-viewer-menus-menu-dots-menuIcon","vertical":"micromag-viewer-menus-menu-dots-vertical","withShadow":"micromag-viewer-menus-menu-dots-withShadow"};
249
237
 
250
- var styles$6 = {"container":"micromag-viewer-menus-menu-dot-container","button":"micromag-viewer-menus-menu-dot-button","dot":"micromag-viewer-menus-menu-dot-dot","subDot":"micromag-viewer-menus-menu-dot-subDot","dots":"micromag-viewer-menus-menu-dot-dots","vertical":"micromag-viewer-menus-menu-dot-vertical"};
238
+ var styles$a = {"container":"micromag-viewer-menus-menu-dot-container","button":"micromag-viewer-menus-menu-dot-button","dot":"micromag-viewer-menus-menu-dot-dot","subDot":"micromag-viewer-menus-menu-dot-subDot","dots":"micromag-viewer-menus-menu-dot-dots","vertical":"micromag-viewer-menus-menu-dot-vertical"};
251
239
 
252
- var propTypes$e = {
240
+ var propTypes$g = {
253
241
  current: PropTypes__default["default"].bool,
254
242
  active: PropTypes__default["default"].bool,
255
243
  colors: PropTypes__default["default"].shape({
@@ -262,7 +250,7 @@ var propTypes$e = {
262
250
  onClick: PropTypes__default["default"].func,
263
251
  className: PropTypes__default["default"].string
264
252
  };
265
- var defaultProps$e = {
253
+ var defaultProps$g = {
266
254
  current: false,
267
255
  active: false,
268
256
  colors: null,
@@ -325,44 +313,44 @@ var ViewerMenuDot = function ViewerMenuDot(_ref) {
325
313
  });
326
314
  }, [playing, duration, currentTime, setSpringProps]);
327
315
  var inner = current && count > 1 ? /*#__PURE__*/React__default["default"].createElement("span", {
328
- className: styles$6.dots
316
+ className: styles$a.dots
329
317
  }, _toConsumableArray__default["default"](Array(count).keys()).map(function (i) {
330
318
  return /*#__PURE__*/React__default["default"].createElement("span", {
331
- className: classNames__default["default"]([styles$6.dot, styles$6.subDot]),
319
+ className: classNames__default["default"]([styles$a.dot, styles$a.subDot]),
332
320
  style: {
333
321
  width: "".concat(parseFloat(1 / count * 100).toFixed(2), "%"),
334
322
  backgroundColor: active && i <= subIndex ? primary : secondary
335
323
  }
336
324
  });
337
325
  })) : /*#__PURE__*/React__default["default"].createElement("span", {
338
- className: styles$6.dot,
326
+ className: styles$a.dot,
339
327
  style: {
340
328
  backgroundColor: active ? primary : secondary
341
329
  }
342
330
  });
343
331
  return /*#__PURE__*/React__default["default"].createElement("li", {
344
- className: classNames__default["default"]([styles$6.container, (_ref3 = {}, _defineProperty__default["default"](_ref3, styles$6.active, current), _defineProperty__default["default"](_ref3, styles$6.vertical, vertical), _defineProperty__default["default"](_ref3, className, className !== null), _ref3)]),
332
+ className: classNames__default["default"]([styles$a.container, (_ref3 = {}, _defineProperty__default["default"](_ref3, styles$a.active, current), _defineProperty__default["default"](_ref3, styles$a.vertical, vertical), _defineProperty__default["default"](_ref3, className, className !== null), _ref3)]),
345
333
  "aria-hidden": "true"
346
334
  }, /*#__PURE__*/React__default["default"].createElement("button", {
347
335
  type: "button",
348
- className: styles$6.button,
336
+ className: styles$a.button,
349
337
  onClick: onClick,
350
338
  tabIndex: "-1"
351
339
  }, inner));
352
340
  };
353
341
 
354
- ViewerMenuDot.propTypes = propTypes$e;
355
- ViewerMenuDot.defaultProps = defaultProps$e;
342
+ ViewerMenuDot.propTypes = propTypes$g;
343
+ ViewerMenuDot.defaultProps = defaultProps$g;
356
344
 
357
- var styles$5 = {};
345
+ var styles$9 = {};
358
346
 
359
- var propTypes$d = {
347
+ var propTypes$f = {
360
348
  size: PropTypes__default["default"].number,
361
349
  spacing: PropTypes__default["default"].number,
362
350
  color: PropTypes__default["default"].string,
363
351
  className: PropTypes__default["default"].string
364
352
  };
365
- var defaultProps$d = {
353
+ var defaultProps$f = {
366
354
  size: 100,
367
355
  spacing: 8,
368
356
  color: 'white',
@@ -376,7 +364,7 @@ var MenuIcon = function MenuIcon(_ref) {
376
364
  className = _ref.className;
377
365
  var squareSize = (size - 2 * spacing) / 3;
378
366
  return /*#__PURE__*/React__default["default"].createElement("svg", {
379
- className: classNames__default["default"]([styles$5.container, _defineProperty__default["default"]({}, className, className !== null)]),
367
+ className: classNames__default["default"]([styles$9.container, _defineProperty__default["default"]({}, className, className !== null)]),
380
368
  xmlns: "http://www.w3.org/2000/svg",
381
369
  viewBox: "0 0 ".concat(size, " ").concat(size),
382
370
  "aria-hidden": "true"
@@ -394,10 +382,10 @@ var MenuIcon = function MenuIcon(_ref) {
394
382
  }));
395
383
  };
396
384
 
397
- MenuIcon.propTypes = propTypes$d;
398
- MenuIcon.defaultProps = defaultProps$d;
385
+ MenuIcon.propTypes = propTypes$f;
386
+ MenuIcon.defaultProps = defaultProps$f;
399
387
 
400
- var propTypes$c = {
388
+ var propTypes$e = {
401
389
  direction: PropTypes__default["default"].oneOf(['horizontal', 'vertical']),
402
390
  withShadow: PropTypes__default["default"].bool,
403
391
  items: core$1.PropTypes.menuItems,
@@ -413,7 +401,7 @@ var propTypes$c = {
413
401
  onClose: PropTypes__default["default"].func,
414
402
  className: PropTypes__default["default"].string
415
403
  };
416
- var defaultProps$c = {
404
+ var defaultProps$e = {
417
405
  direction: 'horizontal',
418
406
  withShadow: false,
419
407
  items: [],
@@ -453,7 +441,7 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
453
441
  return current;
454
442
  });
455
443
  return /*#__PURE__*/React__default["default"].createElement("nav", {
456
- className: classNames__default["default"]([styles$7.container, (_ref4 = {}, _defineProperty__default["default"](_ref4, className, className !== null), _defineProperty__default["default"](_ref4, styles$7.vertical, direction === 'vertical'), _defineProperty__default["default"](_ref4, styles$7.withShadow, withShadow), _ref4)]),
444
+ className: classNames__default["default"]([styles$b.container, (_ref4 = {}, _defineProperty__default["default"](_ref4, className, className !== null), _defineProperty__default["default"](_ref4, styles$b.vertical, direction === 'vertical'), _defineProperty__default["default"](_ref4, styles$b.withShadow, withShadow), _ref4)]),
457
445
  "aria-label": intl.formatMessage({
458
446
  id: "bLYuuN",
459
447
  defaultMessage: [{
@@ -477,7 +465,7 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
477
465
  total: items.length
478
466
  })
479
467
  }, /*#__PURE__*/React__default["default"].createElement("ul", {
480
- className: styles$7.items
468
+ className: styles$b.items
481
469
  }, items.map(function (item, index) {
482
470
  var _ref5 = item || {},
483
471
  _ref5$current = _ref5.current,
@@ -504,9 +492,9 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
504
492
  vertical: direction === 'vertical'
505
493
  });
506
494
  }), !withoutScreensMenu ? /*#__PURE__*/React__default["default"].createElement("li", {
507
- className: styles$7.menu
495
+ className: styles$b.menu
508
496
  }, /*#__PURE__*/React__default["default"].createElement(MenuIcon, {
509
- className: styles$7.menuIcon,
497
+ className: styles$b.menuIcon,
510
498
  color: primary
511
499
  }), /*#__PURE__*/React__default["default"].createElement("button", {
512
500
  type: "button",
@@ -524,16 +512,16 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
524
512
  "value": "Menu"
525
513
  }]
526
514
  }),
527
- className: styles$7.menuButton,
515
+ className: styles$b.menuButton,
528
516
  onClick: onClickMenu
529
517
  })) : null, closeable ? /*#__PURE__*/React__default["default"].createElement("li", {
530
- className: styles$7.closeButton,
518
+ className: styles$b.closeButton,
531
519
  style: {
532
520
  color: primary
533
521
  }
534
522
  }, /*#__PURE__*/React__default["default"].createElement("button", {
535
523
  type: "button",
536
- className: styles$7.closeButton,
524
+ className: styles$b.closeButton,
537
525
  onClick: onClose,
538
526
  title: intl.formatMessage({
539
527
  id: "dj/p/q",
@@ -554,15 +542,13 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
554
542
  }))) : null));
555
543
  };
556
544
 
557
- ViewerMenuDots.propTypes = propTypes$c;
558
- ViewerMenuDots.defaultProps = defaultProps$c;
559
-
560
- var styles$4 = {"container":"micromag-viewer-menus-menu-preview-container","screenButton":"micromag-viewer-menus-menu-preview-screenButton","activeScreenBorder":"micromag-viewer-menus-menu-preview-activeScreenBorder","scroll":"micromag-viewer-menus-menu-preview-scroll","header":"micromag-viewer-menus-menu-preview-header","button":"micromag-viewer-menus-menu-preview-button","shareButton":"micromag-viewer-menus-menu-preview-shareButton","disabled":"micromag-viewer-menus-menu-preview-disabled","icon":"micromag-viewer-menus-menu-preview-icon","buttons":"micromag-viewer-menus-menu-preview-buttons","organisation":"micromag-viewer-menus-menu-preview-organisation","title":"micromag-viewer-menus-menu-preview-title","content":"micromag-viewer-menus-menu-preview-content","nav":"micromag-viewer-menus-menu-preview-nav","item":"micromag-viewer-menus-menu-preview-item","items":"micromag-viewer-menus-menu-preview-items","active":"micromag-viewer-menus-menu-preview-active","itemContent":"micromag-viewer-menus-menu-preview-itemContent","screenContainer":"micromag-viewer-menus-menu-preview-screenContainer","subScreenBadge":"micromag-viewer-menus-menu-preview-subScreenBadge","subScreenCount":"micromag-viewer-menus-menu-preview-subScreenCount","subScreenIcon":"micromag-viewer-menus-menu-preview-subScreenIcon","screenContent":"micromag-viewer-menus-menu-preview-screenContent"};
545
+ ViewerMenuDots.propTypes = propTypes$e;
546
+ ViewerMenuDots.defaultProps = defaultProps$e;
561
547
 
562
- var propTypes$b = {
548
+ var propTypes$d = {
563
549
  className: PropTypes__default["default"].string
564
550
  };
565
- var defaultProps$b = {
551
+ var defaultProps$d = {
566
552
  className: null
567
553
  };
568
554
 
@@ -579,47 +565,12 @@ var StackIcon = function StackIcon(_ref) {
579
565
  }));
580
566
  };
581
567
 
582
- StackIcon.propTypes = propTypes$b;
583
- StackIcon.defaultProps = defaultProps$b;
584
-
585
- var propTypes$a = {
586
- className: PropTypes__default["default"].string
587
- };
588
- var defaultProps$a = {
589
- className: null
590
- };
591
-
592
- var LinkIcon = function LinkIcon(_ref) {
593
- var className = _ref.className;
594
- return /*#__PURE__*/React__default["default"].createElement("svg", {
595
- xmlns: "http://www.w3.org/2000/svg",
596
- width: "32",
597
- height: "32",
598
- viewBox: "0 0 32 32",
599
- className: classNames__default["default"]([_defineProperty__default["default"]({}, className, className !== null)])
600
- }, /*#__PURE__*/React__default["default"].createElement("path", {
601
- d: "M13.13,17.44a7.18,7.18,0,0,0,10,1.45,6.34,6.34,0,0,0,.78-.68l4.31-4.31A7.18,7.18,0,0,0,18.2,3.65l-.09.09L15.65,6.2",
602
- fill: "none",
603
- stroke: "currentColor",
604
- strokeLinecap: "round",
605
- strokeLinejoin: "round",
606
- strokeWidth: "3"
607
- }), /*#__PURE__*/React__default["default"].createElement("path", {
608
- d: "M18.87,14.56a7.19,7.19,0,0,0-10-1.45,6.34,6.34,0,0,0-.78.68L3.73,18.1A7.18,7.18,0,1,0,13.8,28.35l.09-.09,2.45-2.46",
609
- fill: "none",
610
- stroke: "currentColor",
611
- strokeLinecap: "round",
612
- strokeLinejoin: "round",
613
- strokeWidth: "3"
614
- }));
615
- };
616
-
617
- LinkIcon.propTypes = propTypes$a;
618
- LinkIcon.defaultProps = defaultProps$a;
568
+ StackIcon.propTypes = propTypes$d;
569
+ StackIcon.defaultProps = defaultProps$d;
619
570
 
620
- var styles$3 = {"close":"micromag-viewer-partials-share-modal-close","copyUrlButton":"micromag-viewer-partials-share-modal-copyUrlButton","screenUrlInput":"micromag-viewer-partials-share-modal-screenUrlInput","container":"micromag-viewer-partials-share-modal-container","opened":"micromag-viewer-partials-share-modal-opened","modal":"micromag-viewer-partials-share-modal-modal","header":"micromag-viewer-partials-share-modal-header","heading":"micromag-viewer-partials-share-modal-heading","closeIcon":"micromag-viewer-partials-share-modal-closeIcon","shareOptions":"micromag-viewer-partials-share-modal-shareOptions","otherOptions":"micromag-viewer-partials-share-modal-otherOptions","copyLink":"micromag-viewer-partials-share-modal-copyLink","linkIcon":"micromag-viewer-partials-share-modal-linkIcon","successfulCopyMessage":"micromag-viewer-partials-share-modal-successfulCopyMessage","isLinkCopied":"micromag-viewer-partials-share-modal-isLinkCopied"};
571
+ var styles$8 = {"close":"micromag-viewer-partials-share-modal-close","container":"micromag-viewer-partials-share-modal-container","opened":"micromag-viewer-partials-share-modal-opened","modal":"micromag-viewer-partials-share-modal-modal","header":"micromag-viewer-partials-share-modal-header","heading":"micromag-viewer-partials-share-modal-heading","closeIcon":"micromag-viewer-partials-share-modal-closeIcon","shareOptions":"micromag-viewer-partials-share-modal-shareOptions"};
621
572
 
622
- var propTypes$9 = {
573
+ var propTypes$c = {
623
574
  url: PropTypes__default["default"].string,
624
575
  title: PropTypes__default["default"].string,
625
576
  opened: PropTypes__default["default"].bool,
@@ -627,7 +578,7 @@ var propTypes$9 = {
627
578
  onShare: PropTypes__default["default"].func,
628
579
  onCancel: PropTypes__default["default"].func
629
580
  };
630
- var defaultProps$9 = {
581
+ var defaultProps$c = {
631
582
  url: null,
632
583
  title: null,
633
584
  opened: false,
@@ -646,24 +597,6 @@ var ShareModal = function ShareModal(_ref) {
646
597
  onShare = _ref.onShare,
647
598
  onCancel = _ref.onCancel;
648
599
  var modalRef = React.useRef();
649
-
650
- var _useState = React.useState(false),
651
- _useState2 = _slicedToArray__default["default"](_useState, 2),
652
- linkCopied = _useState2[0],
653
- setLinkCopied = _useState2[1];
654
-
655
- var onClickCopy = React.useCallback(function () {
656
- utils.copyToClipboard(url).then(function () {
657
- setLinkCopied(true);
658
- setTimeout(function () {
659
- setLinkCopied(false);
660
- }, 2000);
661
- });
662
- }, [setLinkCopied]);
663
- var onClickLinkInput = React.useCallback(function (e) {
664
- var target = e.target;
665
- target.setSelectionRange(0, target.value.length);
666
- }, []);
667
600
  var onDocumentClick = React.useCallback(function (e) {
668
601
  var _ref2 = e || {},
669
602
  target = _ref2.target;
@@ -676,15 +609,15 @@ var ShareModal = function ShareModal(_ref) {
676
609
  }, [opened, onCancel]);
677
610
  hooks.useDocumentEvent('click', onDocumentClick, opened);
678
611
  return /*#__PURE__*/React__default["default"].createElement("div", {
679
- className: classNames__default["default"]([styles$3.container, (_ref3 = {}, _defineProperty__default["default"](_ref3, className, className), _defineProperty__default["default"](_ref3, styles$3.opened, opened), _ref3)]),
612
+ className: classNames__default["default"]([styles$8.container, (_ref3 = {}, _defineProperty__default["default"](_ref3, className, className), _defineProperty__default["default"](_ref3, styles$8.opened, opened), _ref3)]),
680
613
  "aria-hidden": opened ? null : '-1'
681
614
  }, /*#__PURE__*/React__default["default"].createElement("div", {
682
- className: styles$3.modal,
615
+ className: styles$8.modal,
683
616
  ref: modalRef
684
617
  }, /*#__PURE__*/React__default["default"].createElement("div", {
685
- className: styles$3.header
618
+ className: styles$8.header
686
619
  }, /*#__PURE__*/React__default["default"].createElement("h2", {
687
- className: styles$3.heading
620
+ className: styles$8.heading
688
621
  }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
689
622
  id: "oL4ueH",
690
623
  defaultMessage: [{
@@ -692,54 +625,30 @@ var ShareModal = function ShareModal(_ref) {
692
625
  "value": "Share"
693
626
  }]
694
627
  })), /*#__PURE__*/React__default["default"].createElement(components.Button, {
695
- className: styles$3.close,
628
+ className: styles$8.close,
696
629
  onClick: onCancel,
697
630
  focusable: opened
698
631
  }, /*#__PURE__*/React__default["default"].createElement(components.Close, {
699
- className: styles$3.closeIcon,
632
+ className: styles$8.closeIcon,
700
633
  border: "none"
701
634
  }))), /*#__PURE__*/React__default["default"].createElement("div", {
702
- className: styles$3.content
635
+ className: styles$8.content
703
636
  }, /*#__PURE__*/React__default["default"].createElement(ShareOptions__default["default"], {
704
- className: styles$3.shareOptions,
637
+ className: styles$8.shareOptions,
705
638
  title: title,
706
639
  url: url,
707
640
  focusable: opened,
708
641
  onShare: onShare,
709
642
  onClose: onCancel
710
- }), /*#__PURE__*/React__default["default"].createElement("div", {
711
- className: styles$3.otherOptions
712
- }, /*#__PURE__*/React__default["default"].createElement("div", {
713
- className: classNames__default["default"]([styles$3.copyLink, _defineProperty__default["default"]({}, styles$3.isLinkCopied, linkCopied)])
714
- }, /*#__PURE__*/React__default["default"].createElement("input", {
715
- className: styles$3.screenUrlInput,
716
- type: "text",
717
- value: url,
718
- onClick: onClickLinkInput,
719
- readOnly: true
720
- }), /*#__PURE__*/React__default["default"].createElement(components.Button, {
721
- className: styles$3.copyUrlButton,
722
- onClick: onClickCopy,
723
- focusable: opened
724
- }, /*#__PURE__*/React__default["default"].createElement(LinkIcon, {
725
- className: styles$3.linkIcon
726
- })), /*#__PURE__*/React__default["default"].createElement("div", {
727
- className: styles$3.successfulCopyMessage
728
- }, /*#__PURE__*/React__default["default"].createElement(reactIntl.FormattedMessage, {
729
- id: "XRmkEh",
730
- defaultMessage: [{
731
- "type": 0,
732
- "value": "Link copied to clipboard!"
733
- }]
734
- })))))));
643
+ }))));
735
644
  };
736
645
 
737
- ShareModal.propTypes = propTypes$9;
738
- ShareModal.defaultProps = defaultProps$9;
646
+ ShareModal.propTypes = propTypes$c;
647
+ ShareModal.defaultProps = defaultProps$c;
739
648
 
740
- var styles$2 = {"container":"micromag-viewer-partials-share-button-container"};
649
+ var styles$7 = {"container":"micromag-viewer-partials-share-button-container"};
741
650
 
742
- var propTypes$8 = {
651
+ var propTypes$b = {
743
652
  title: PropTypes__default["default"].string,
744
653
  url: PropTypes__default["default"].string,
745
654
  className: PropTypes__default["default"].string,
@@ -748,7 +657,7 @@ var propTypes$8 = {
748
657
  children: PropTypes__default["default"].node,
749
658
  focusable: PropTypes__default["default"].bool
750
659
  };
751
- var defaultProps$8 = {
660
+ var defaultProps$b = {
752
661
  title: null,
753
662
  url: null,
754
663
  className: null,
@@ -777,7 +686,7 @@ var ShareButton = function ShareButton(_ref) {
777
686
  setStoryShareModalOpened(function (opened) {
778
687
  return !opened;
779
688
  });
780
- }, [setStoryShareModalOpened]);
689
+ }, [setStoryShareModalOpened, storyShareModalOpened]);
781
690
  var onStoryShared = React.useCallback(function (type) {
782
691
  setStoryShareModalOpened(false);
783
692
 
@@ -789,7 +698,7 @@ var ShareButton = function ShareButton(_ref) {
789
698
  setStoryShareModalOpened(false);
790
699
  }, [setStoryShareModalOpened]);
791
700
  return /*#__PURE__*/React__default["default"].createElement("div", {
792
- className: classNames__default["default"]([styles$2.container, _defineProperty__default["default"]({}, className, className !== null)])
701
+ className: classNames__default["default"]([styles$7.container, _defineProperty__default["default"]({}, className, className !== null)])
793
702
  }, /*#__PURE__*/React__default["default"].createElement(components.Button, {
794
703
  className: classNames__default["default"]([_defineProperty__default["default"]({}, buttonClassName, buttonClassName !== null)]),
795
704
  onClick: onShareIconClick,
@@ -809,7 +718,7 @@ var ShareButton = function ShareButton(_ref) {
809
718
  }),
810
719
  focusable: focusable
811
720
  }, children), /*#__PURE__*/React__default["default"].createElement(ShareModal, {
812
- className: styles$2.shareModal,
721
+ className: styles$7.shareModal,
813
722
  opened: storyShareModalOpened,
814
723
  title: title,
815
724
  url: url,
@@ -818,10 +727,12 @@ var ShareButton = function ShareButton(_ref) {
818
727
  }));
819
728
  };
820
729
 
821
- ShareButton.propTypes = propTypes$8;
822
- ShareButton.defaultProps = defaultProps$8;
730
+ ShareButton.propTypes = propTypes$b;
731
+ ShareButton.defaultProps = defaultProps$b;
823
732
 
824
- var propTypes$7 = {
733
+ var styles$6 = {"container":"micromag-viewer-menus-menu-preview-container","screenButton":"micromag-viewer-menus-menu-preview-screenButton","activeScreenBorder":"micromag-viewer-menus-menu-preview-activeScreenBorder","scroll":"micromag-viewer-menus-menu-preview-scroll","header":"micromag-viewer-menus-menu-preview-header","button":"micromag-viewer-menus-menu-preview-button","shareButton":"micromag-viewer-menus-menu-preview-shareButton","disabled":"micromag-viewer-menus-menu-preview-disabled","icon":"micromag-viewer-menus-menu-preview-icon","buttons":"micromag-viewer-menus-menu-preview-buttons","organisation":"micromag-viewer-menus-menu-preview-organisation","title":"micromag-viewer-menus-menu-preview-title","content":"micromag-viewer-menus-menu-preview-content","nav":"micromag-viewer-menus-menu-preview-nav","item":"micromag-viewer-menus-menu-preview-item","items":"micromag-viewer-menus-menu-preview-items","active":"micromag-viewer-menus-menu-preview-active","itemContent":"micromag-viewer-menus-menu-preview-itemContent","screenContainer":"micromag-viewer-menus-menu-preview-screenContainer","subScreenBadge":"micromag-viewer-menus-menu-preview-subScreenBadge","subScreenCount":"micromag-viewer-menus-menu-preview-subScreenCount","subScreenIcon":"micromag-viewer-menus-menu-preview-subScreenIcon","screenContent":"micromag-viewer-menus-menu-preview-screenContent"};
734
+
735
+ var propTypes$a = {
825
736
  viewerTheme: core$1.PropTypes.viewerTheme,
826
737
  screenSize: core$1.PropTypes.screenSize,
827
738
  menuWidth: PropTypes__default["default"].number,
@@ -839,7 +750,7 @@ var propTypes$7 = {
839
750
  fullscreenEnabled: PropTypes__default["default"].bool,
840
751
  className: PropTypes__default["default"].string
841
752
  };
842
- var defaultProps$7 = {
753
+ var defaultProps$a = {
843
754
  viewerTheme: null,
844
755
  screenSize: null,
845
756
  menuWidth: null,
@@ -880,61 +791,55 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
880
791
  screenWidth = _ref2.width,
881
792
  screenHeight = _ref2.height;
882
793
 
883
- var _useResizeObserver = hooks.useResizeObserver(),
884
- firstScreenContainerRef = _useResizeObserver.ref,
885
- firstScreenContentRect = _useResizeObserver.entry.contentRect;
794
+ var _useDimensionObserver = hooks.useDimensionObserver(),
795
+ firstScreenContainerRef = _useDimensionObserver.ref,
796
+ _useDimensionObserver2 = _useDimensionObserver.width,
797
+ thumbWidth = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2;
886
798
 
887
- var _useResizeObserver2 = hooks.useResizeObserver(),
888
- containerRef = _useResizeObserver2.ref,
889
- containerRect = _useResizeObserver2.entry.contentRect;
890
-
891
- var _ref3 = firstScreenContentRect || {},
892
- _ref3$width = _ref3.width,
893
- thumbWidth = _ref3$width === void 0 ? 0 : _ref3$width;
894
-
895
- var _ref4 = containerRect || {},
896
- _ref4$width = _ref4.width,
897
- contentWidth = _ref4$width === void 0 ? 0 : _ref4$width;
799
+ var _useDimensionObserver3 = hooks.useDimensionObserver(),
800
+ containerRef = _useDimensionObserver3.ref,
801
+ _useDimensionObserver4 = _useDimensionObserver3.width,
802
+ contentWidth = _useDimensionObserver4 === void 0 ? 0 : _useDimensionObserver4;
898
803
 
899
804
  var thumbsPerLine = Math.max(Math.floor(contentWidth / maxThumbsWidth), 3); // Viewer theme
900
805
 
901
- var _ref5 = viewerTheme || {},
902
- _ref5$colors = _ref5.colors,
903
- colors = _ref5$colors === void 0 ? null : _ref5$colors,
904
- _ref5$background = _ref5.background,
905
- background = _ref5$background === void 0 ? null : _ref5$background,
906
- _ref5$textStyles = _ref5.textStyles,
907
- textStyles = _ref5$textStyles === void 0 ? null : _ref5$textStyles,
908
- _ref5$logo = _ref5.logo,
909
- brandLogo = _ref5$logo === void 0 ? null : _ref5$logo;
910
-
911
- var _ref6 = textStyles || {},
912
- _ref6$title = _ref6.title,
913
- brandTextStyle = _ref6$title === void 0 ? null : _ref6$title;
914
-
915
- var _ref7 = colors || {},
916
- _ref7$primary = _ref7.primary,
917
- brandPrimaryColor = _ref7$primary === void 0 ? null : _ref7$primary,
918
- _ref7$secondary = _ref7.secondary,
919
- brandSecondaryColor = _ref7$secondary === void 0 ? null : _ref7$secondary;
920
-
921
- var _ref8 = background || {},
922
- _ref8$color = _ref8.color,
923
- brandBackgroundColor = _ref8$color === void 0 ? null : _ref8$color,
924
- _ref8$image = _ref8.image,
925
- image = _ref8$image === void 0 ? null : _ref8$image;
926
-
927
- var _ref9 = image || {},
928
- _ref9$url = _ref9.url,
929
- brandImageUrl = _ref9$url === void 0 ? null : _ref9$url;
806
+ var _ref3 = viewerTheme || {},
807
+ _ref3$colors = _ref3.colors,
808
+ colors = _ref3$colors === void 0 ? null : _ref3$colors,
809
+ _ref3$background = _ref3.background,
810
+ background = _ref3$background === void 0 ? null : _ref3$background,
811
+ _ref3$textStyles = _ref3.textStyles,
812
+ textStyles = _ref3$textStyles === void 0 ? null : _ref3$textStyles,
813
+ _ref3$logo = _ref3.logo,
814
+ brandLogo = _ref3$logo === void 0 ? null : _ref3$logo;
815
+
816
+ var _ref4 = textStyles || {},
817
+ _ref4$title = _ref4.title,
818
+ brandTextStyle = _ref4$title === void 0 ? null : _ref4$title;
819
+
820
+ var _ref5 = colors || {},
821
+ _ref5$primary = _ref5.primary,
822
+ brandPrimaryColor = _ref5$primary === void 0 ? null : _ref5$primary,
823
+ _ref5$secondary = _ref5.secondary,
824
+ brandSecondaryColor = _ref5$secondary === void 0 ? null : _ref5$secondary;
825
+
826
+ var _ref6 = background || {},
827
+ _ref6$color = _ref6.color,
828
+ brandBackgroundColor = _ref6$color === void 0 ? null : _ref6$color,
829
+ _ref6$image = _ref6.image,
830
+ image = _ref6$image === void 0 ? null : _ref6$image;
831
+
832
+ var _ref7 = image || {},
833
+ _ref7$url = _ref7.url,
834
+ brandImageUrl = _ref7$url === void 0 ? null : _ref7$url;
930
835
 
931
836
  var borderPrimaryColorStyle = utils.getStyleFromColor(brandPrimaryColor, 'borderColor');
932
837
  var colorSecondaryColorStyle = utils.getStyleFromColor(brandSecondaryColor, 'color');
933
838
  var backgroundColorStyle = utils.getStyleFromColor(brandBackgroundColor, 'backgroundColor');
934
839
 
935
- var _ref10 = brandLogo || {},
936
- _ref10$url = _ref10.url,
937
- brandLogoUrl = _ref10$url === void 0 ? null : _ref10$url;
840
+ var _ref8 = brandLogo || {},
841
+ _ref8$url = _ref8.url,
842
+ brandLogoUrl = _ref8$url === void 0 ? null : _ref8$url;
938
843
 
939
844
  var brandImageStyle = brandImageUrl !== null ? {
940
845
  backgroundImage: "url(".concat(brandImageUrl, ")")
@@ -946,11 +851,11 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
946
851
  scrolledBottom = _useState2[0],
947
852
  setScrolledBottom = _useState2[1];
948
853
 
949
- var dragBind = react.useDrag(function (_ref11) {
950
- var _ref11$direction = _slicedToArray__default["default"](_ref11.direction, 2),
951
- dy = _ref11$direction[1],
952
- last = _ref11.last,
953
- tap = _ref11.tap;
854
+ var dragBind = react.useDrag(function (_ref9) {
855
+ var _ref9$direction = _slicedToArray__default["default"](_ref9.direction, 2),
856
+ dy = _ref9$direction[1],
857
+ last = _ref9.last,
858
+ tap = _ref9.tap;
954
859
 
955
860
  if (!tap && last && scrolledBottom && dy < 0 && onClose !== null) {
956
861
  onClose();
@@ -971,36 +876,36 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
971
876
  return !focusable ? items.slice(0, 3) : items;
972
877
  }, [items, focusable]);
973
878
  return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
974
- className: classNames__default["default"]([styles$4.container, _defineProperty__default["default"]({}, className, className !== null)]),
879
+ className: classNames__default["default"]([styles$6.container, _defineProperty__default["default"]({}, className, className !== null)]),
975
880
  style: _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, backgroundColorStyle), brandImageStyle), {}, {
976
881
  width: menuWidth
977
882
  }),
978
883
  "aria-hidden": focusable ? null : 'true'
979
884
  }, dragBind()), /*#__PURE__*/React__default["default"].createElement("div", {
980
- className: styles$4.header
885
+ className: styles$6.header
981
886
  }, brandLogoUrl !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
982
- className: styles$4.organisation,
887
+ className: styles$6.organisation,
983
888
  style: {
984
889
  backgroundImage: "url(".concat(brandLogoUrl, ")")
985
890
  }
986
891
  }) : null, /*#__PURE__*/React__default["default"].createElement("div", {
987
- className: styles$4.title,
892
+ className: styles$6.title,
988
893
  style: titleStyle
989
894
  }, title), /*#__PURE__*/React__default["default"].createElement("div", {
990
- className: styles$4.buttons,
895
+ className: styles$6.buttons,
991
896
  style: colorSecondaryColorStyle
992
897
  }, /*#__PURE__*/React__default["default"].createElement(ShareButton, {
993
- className: styles$4.shareButton,
994
- buttonClassName: styles$4.button,
898
+ className: styles$6.shareButton,
899
+ buttonClassName: styles$6.button,
995
900
  onShare: onShare,
996
901
  url: shareUrl,
997
902
  title: title,
998
903
  focusable: focusable
999
904
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1000
- className: styles$4.icon,
905
+ className: styles$6.icon,
1001
906
  icon: faShare.faShare
1002
907
  })), fullscreenEnabled ? /*#__PURE__*/React__default["default"].createElement(components.Button, {
1003
- className: styles$4.button,
908
+ className: styles$6.button,
1004
909
  onClick: toggleFullscreen,
1005
910
  title: intl.formatMessage({
1006
911
  id: "AuxqcG",
@@ -1018,10 +923,10 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1018
923
  }),
1019
924
  focusable: focusable
1020
925
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1021
- className: styles$4.icon,
926
+ className: styles$6.icon,
1022
927
  icon: fullscreenActive ? faCompress.faCompress : faExpand.faExpand
1023
928
  })) : null, /*#__PURE__*/React__default["default"].createElement(components.Button, {
1024
- className: styles$4.button,
929
+ className: styles$6.button,
1025
930
  onClick: onClose,
1026
931
  title: intl.formatMessage({
1027
932
  id: "dj/p/q",
@@ -1039,19 +944,19 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1039
944
  }),
1040
945
  focusable: focusable
1041
946
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1042
- className: styles$4.icon,
947
+ className: styles$6.icon,
1043
948
  icon: faTimes.faTimes
1044
949
  })))), /*#__PURE__*/React__default["default"].createElement("div", {
1045
- className: styles$4.content,
950
+ className: styles$6.content,
1046
951
  ref: containerRef
1047
952
  }, /*#__PURE__*/React__default["default"].createElement(Scroll__default["default"], {
1048
- className: styles$4.scroll,
953
+ className: styles$6.scroll,
1049
954
  onScrolledBottom: onScrolledBottom,
1050
955
  onScrolledNotBottom: onScrolledNotBottom
1051
956
  }, /*#__PURE__*/React__default["default"].createElement("nav", {
1052
- className: styles$4.nav
957
+ className: styles$6.nav
1053
958
  }, /*#__PURE__*/React__default["default"].createElement("ul", {
1054
- className: styles$4.items
959
+ className: styles$6.items
1055
960
  }, finalItems.map(function (item, index) {
1056
961
  var screenId = item.screenId,
1057
962
  _item$current = item.current,
@@ -1078,22 +983,22 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1078
983
  }]
1079
984
  })) : '');
1080
985
  return /*#__PURE__*/React__default["default"].createElement("li", {
1081
- className: classNames__default["default"]([styles$4.item, _defineProperty__default["default"]({}, styles$4.active, current)]),
986
+ className: classNames__default["default"]([styles$6.item, _defineProperty__default["default"]({}, styles$6.active, current)]),
1082
987
  key: "item-".concat(screenId),
1083
988
  style: {
1084
989
  width: "".concat(100 / thumbsPerLine, "%")
1085
990
  }
1086
991
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1087
- className: styles$4.itemContent
992
+ className: styles$6.itemContent
1088
993
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1089
- className: styles$4.screenContainer,
994
+ className: styles$6.screenContainer,
1090
995
  ref: index === 0 ? firstScreenContainerRef : null
1091
996
  }, count > 1 ? /*#__PURE__*/React__default["default"].createElement("div", {
1092
- className: styles$4.subScreenBadge
997
+ className: styles$6.subScreenBadge
1093
998
  }, /*#__PURE__*/React__default["default"].createElement("span", {
1094
- className: styles$4.subScreenCount
999
+ className: styles$6.subScreenCount
1095
1000
  }, count), /*#__PURE__*/React__default["default"].createElement(StackIcon, {
1096
- className: styles$4.subScreenIcon
1001
+ className: styles$6.subScreenIcon
1097
1002
  })) : null, screenWidth > 0 && screenHeight > 0 ? /*#__PURE__*/React__default["default"].createElement(components.ScreenPreview, {
1098
1003
  screenWidth: screenWidth,
1099
1004
  screenHeight: screenHeight,
@@ -1103,11 +1008,11 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1103
1008
  active: focusable,
1104
1009
  withSize: true
1105
1010
  }) : null, current ? /*#__PURE__*/React__default["default"].createElement("div", {
1106
- className: styles$4.activeScreenBorder,
1011
+ className: styles$6.activeScreenBorder,
1107
1012
  style: borderPrimaryColorStyle
1108
1013
  }) : null)), /*#__PURE__*/React__default["default"].createElement("button", {
1109
1014
  type: "button",
1110
- className: styles$4.screenButton,
1015
+ className: styles$6.screenButton,
1111
1016
  onClick: function onClick() {
1112
1017
  if (onClickItem !== null) {
1113
1018
  onClickItem(item);
@@ -1124,10 +1029,12 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1124
1029
  }))))));
1125
1030
  };
1126
1031
 
1127
- ViewerMenuPreview.propTypes = propTypes$7;
1128
- ViewerMenuPreview.defaultProps = defaultProps$7;
1032
+ ViewerMenuPreview.propTypes = propTypes$a;
1033
+ ViewerMenuPreview.defaultProps = defaultProps$a;
1129
1034
 
1130
- var propTypes$6 = {
1035
+ var styles$5 = {"container":"micromag-viewer-container","navButton":"micromag-viewer-navButton","menuPreview":"micromag-viewer-menuPreview","menuPreviewContainer":"micromag-viewer-menuPreviewContainer","screen":"micromag-viewer-screen","screenInner":"micromag-viewer-screenInner","content":"micromag-viewer-content","previous":"micromag-viewer-previous","next":"micromag-viewer-next","menuDotsContainer":"micromag-viewer-menuDotsContainer","menuDots":"micromag-viewer-menuDots","current":"micromag-viewer-current","handTap":"micromag-viewer-handTap","landscape":"micromag-viewer-landscape","visible":"micromag-viewer-visible","withSiblings":"micromag-viewer-withSiblings","playbackControlsContainer":"micromag-viewer-playbackControlsContainer","playbackControls":"micromag-viewer-playbackControls","isCollapsed":"micromag-viewer-isCollapsed","webView":"micromag-viewer-webView","hideMenu":"micromag-viewer-hideMenu","ready":"micromag-viewer-ready","hasInteracted":"micromag-viewer-hasInteracted"};
1036
+
1037
+ var propTypes$9 = {
1131
1038
  story: core$1.PropTypes.story.isRequired,
1132
1039
  currentScreenIndex: PropTypes__default["default"].number,
1133
1040
  opened: PropTypes__default["default"].bool,
@@ -1153,7 +1060,7 @@ var propTypes$6 = {
1153
1060
 
1154
1061
  })
1155
1062
  };
1156
- var defaultProps$6 = {
1063
+ var defaultProps$9 = {
1157
1064
  currentScreenIndex: 0,
1158
1065
  opened: false,
1159
1066
  toggleFullscreen: null,
@@ -1275,29 +1182,26 @@ var ViewerMenu = function ViewerMenu(_ref) {
1275
1182
  });
1276
1183
  }, [opened]);
1277
1184
 
1278
- var _useResizeObserver = hooks.useResizeObserver(),
1279
- menuPreviewContainerRef = _useResizeObserver.ref,
1280
- menuPreviewContainerRect = _useResizeObserver.entry.contentRect;
1281
-
1282
- var _ref4 = menuPreviewContainerRect || {},
1283
- _ref4$height = _ref4.height,
1284
- menuPreviewContainerHeight = _ref4$height === void 0 ? 0 : _ref4$height;
1185
+ var _useDimensionObserver = hooks.useDimensionObserver(),
1186
+ menuPreviewContainerRef = _useDimensionObserver.ref,
1187
+ _useDimensionObserver2 = _useDimensionObserver.height,
1188
+ menuPreviewContainerHeight = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2;
1285
1189
 
1286
1190
  var menuPreviewStyle = {
1287
1191
  transform: menuY.to(function (y) {
1288
1192
  return "translateY(".concat(y * menuPreviewContainerHeight, "px)");
1289
1193
  })
1290
1194
  };
1291
- var menuDragBind = react.useDrag(function (_ref5) {
1292
- var _ref5$movement = _slicedToArray__default["default"](_ref5.movement, 2),
1293
- my = _ref5$movement[1],
1294
- first = _ref5.first,
1295
- last = _ref5.last,
1296
- _ref5$direction = _slicedToArray__default["default"](_ref5.direction, 2),
1297
- dy = _ref5$direction[1],
1298
- cancel = _ref5.cancel,
1299
- canceled = _ref5.canceled,
1300
- tap = _ref5.tap;
1195
+ var menuDragBind = react.useDrag(function (_ref4) {
1196
+ var _ref4$movement = _slicedToArray__default["default"](_ref4.movement, 2),
1197
+ my = _ref4$movement[1],
1198
+ first = _ref4.first,
1199
+ last = _ref4.last,
1200
+ _ref4$direction = _slicedToArray__default["default"](_ref4.direction, 2),
1201
+ dy = _ref4$direction[1],
1202
+ cancel = _ref4.cancel,
1203
+ canceled = _ref4.canceled,
1204
+ tap = _ref4.tap;
1301
1205
 
1302
1206
  if (canceled || tap) {
1303
1207
  return;
@@ -1348,8 +1252,8 @@ var ViewerMenu = function ViewerMenu(_ref) {
1348
1252
  customOnClickItem(item);
1349
1253
  }
1350
1254
 
1351
- var index = items.findIndex(function (_ref6) {
1352
- var id = _ref6.id;
1255
+ var index = items.findIndex(function (_ref5) {
1256
+ var id = _ref5.id;
1353
1257
  return id === screenId;
1354
1258
  });
1355
1259
  trackScreenEvent('viewer_menu', 'click_screen_change', "Screen ".concat(index + 1));
@@ -1366,12 +1270,12 @@ var ViewerMenu = function ViewerMenu(_ref) {
1366
1270
  return trackScreenEvent('viewer_menu', 'click_share', type);
1367
1271
  }, [trackScreenEvent]);
1368
1272
 
1369
- var _ref7 = viewerTheme || {},
1370
- _ref7$menuTheme = _ref7.menuTheme,
1371
- menuTheme = _ref7$menuTheme === void 0 ? null : _ref7$menuTheme;
1273
+ var _ref6 = viewerTheme || {},
1274
+ _ref6$menuTheme = _ref6.menuTheme,
1275
+ menuTheme = _ref6$menuTheme === void 0 ? null : _ref6$menuTheme;
1372
1276
 
1373
1277
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1374
- className: styles$8.menuDotsContainer,
1278
+ className: styles$5.menuDotsContainer,
1375
1279
  ref: refDots,
1376
1280
  style: {
1377
1281
  width: menuWidth
@@ -1386,16 +1290,16 @@ var ViewerMenu = function ViewerMenu(_ref) {
1386
1290
  withItemClick: withDotItemClick,
1387
1291
  withoutScreensMenu: withoutScreensMenu,
1388
1292
  onClose: onClickCloseViewer,
1389
- className: styles$8.menuDots
1293
+ className: styles$5.menuDots
1390
1294
  }))), /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
1391
- className: styles$8.menuPreviewContainer,
1295
+ className: styles$5.menuPreviewContainer,
1392
1296
  style: menuPreviewStyle,
1393
1297
  ref: menuPreviewContainerRef
1394
1298
  }, /*#__PURE__*/React__default["default"].createElement(ViewerMenuPreview, {
1395
1299
  viewerTheme: viewerTheme,
1396
1300
  title: title,
1397
1301
  shareUrl: shareUrl,
1398
- className: styles$8.menuPreview,
1302
+ className: styles$5.menuPreview,
1399
1303
  screenSize: screenSize,
1400
1304
  menuWidth: menuWidth,
1401
1305
  focusable: opened,
@@ -1409,34 +1313,26 @@ var ViewerMenu = function ViewerMenu(_ref) {
1409
1313
  })));
1410
1314
  };
1411
1315
 
1412
- ViewerMenu.propTypes = propTypes$6;
1413
- ViewerMenu.defaultProps = defaultProps$6;
1316
+ ViewerMenu.propTypes = propTypes$9;
1317
+ ViewerMenu.defaultProps = defaultProps$9;
1414
1318
 
1415
- var styles$1 = {"container":"micromag-viewer-screen-container","current":"micromag-viewer-screen-current"};
1319
+ var styles$4 = {"container":"micromag-viewer-screen-container","current":"micromag-viewer-screen-current"};
1416
1320
 
1417
- var propTypes$5 = {
1321
+ var propTypes$8 = {
1418
1322
  screen: core$1.PropTypes.screenComponent,
1419
1323
  renderContext: core$1.PropTypes.renderContext,
1420
1324
  screenState: PropTypes__default["default"].string,
1421
1325
  current: PropTypes__default["default"].bool,
1422
1326
  active: PropTypes__default["default"].bool,
1423
- onPrevious: PropTypes__default["default"].func,
1424
- onNext: PropTypes__default["default"].func,
1425
- enableInteraction: PropTypes__default["default"].func,
1426
- disableInteraction: PropTypes__default["default"].func,
1427
- getMediaRef: PropTypes__default["default"].func
1327
+ mediaRef: PropTypes__default["default"].func
1428
1328
  };
1429
- var defaultProps$5 = {
1329
+ var defaultProps$8 = {
1430
1330
  screen: null,
1431
1331
  renderContext: null,
1432
1332
  screenState: null,
1433
1333
  current: false,
1434
1334
  active: true,
1435
- onPrevious: null,
1436
- onNext: null,
1437
- enableInteraction: null,
1438
- disableInteraction: null,
1439
- getMediaRef: null
1335
+ mediaRef: null
1440
1336
  };
1441
1337
 
1442
1338
  var ViewerScreen = function ViewerScreen(_ref) {
@@ -1447,13 +1343,9 @@ var ViewerScreen = function ViewerScreen(_ref) {
1447
1343
  screenState = _ref.screenState,
1448
1344
  active = _ref.active,
1449
1345
  current = _ref.current,
1450
- onPrevious = _ref.onPrevious,
1451
- onNext = _ref.onNext,
1452
- enableInteraction = _ref.enableInteraction,
1453
- disableInteraction = _ref.disableInteraction,
1454
- getMediaRef = _ref.getMediaRef;
1346
+ mediaRef = _ref.mediaRef;
1455
1347
  return screen !== null ? /*#__PURE__*/React__default["default"].createElement("div", {
1456
- className: classNames__default["default"]([styles$1.container, (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$1.active, active), _defineProperty__default["default"](_ref2, styles$1.current, current), _ref2)]),
1348
+ className: classNames__default["default"]([styles$4.container, (_ref2 = {}, _defineProperty__default["default"](_ref2, styles$4.active, active), _defineProperty__default["default"](_ref2, styles$4.current, current), _ref2)]),
1457
1349
  "aria-hidden": current ? null : 'true'
1458
1350
  }, /*#__PURE__*/React__default["default"].createElement(components.Screen, {
1459
1351
  screen: screen,
@@ -1461,24 +1353,20 @@ var ViewerScreen = function ViewerScreen(_ref) {
1461
1353
  screenState: screenState,
1462
1354
  active: active,
1463
1355
  current: current,
1464
- onPrevious: onPrevious,
1465
- onNext: onNext,
1466
- enableInteraction: enableInteraction,
1467
- disableInteraction: disableInteraction,
1468
- getMediaRef: getMediaRef
1356
+ mediaRef: mediaRef
1469
1357
  })) : null;
1470
1358
  };
1471
1359
 
1472
- ViewerScreen.propTypes = propTypes$5;
1473
- ViewerScreen.defaultProps = defaultProps$5;
1360
+ ViewerScreen.propTypes = propTypes$8;
1361
+ ViewerScreen.defaultProps = defaultProps$8;
1474
1362
 
1475
- var styles = {"container":"micromag-viewer-partials-hand-tap-container","circle":"micromag-viewer-partials-hand-tap-circle","pulse":"micromag-viewer-partials-hand-tap-pulse","hand":"micromag-viewer-partials-hand-tap-hand","panY":"micromag-viewer-partials-hand-tap-panY","inner":"micromag-viewer-partials-hand-tap-inner","shadowFade":"micromag-viewer-partials-hand-tap-shadowFade"};
1363
+ var styles$3 = {"container":"micromag-viewer-partials-hand-tap-container","circle":"micromag-viewer-partials-hand-tap-circle","pulse":"micromag-viewer-partials-hand-tap-pulse","hand":"micromag-viewer-partials-hand-tap-hand","panY":"micromag-viewer-partials-hand-tap-panY","inner":"micromag-viewer-partials-hand-tap-inner","shadowFade":"micromag-viewer-partials-hand-tap-shadowFade"};
1476
1364
 
1477
- var propTypes$4 = {
1365
+ var propTypes$7 = {
1478
1366
  color: PropTypes__default["default"].string,
1479
1367
  className: PropTypes__default["default"].string
1480
1368
  };
1481
- var defaultProps$4 = {
1369
+ var defaultProps$7 = {
1482
1370
  color: 'currentColor',
1483
1371
  className: null
1484
1372
  };
@@ -1498,31 +1386,463 @@ var HandIcon = function HandIcon(_ref) {
1498
1386
  }));
1499
1387
  };
1500
1388
 
1501
- HandIcon.propTypes = propTypes$4;
1502
- HandIcon.defaultProps = defaultProps$4;
1389
+ HandIcon.propTypes = propTypes$7;
1390
+ HandIcon.defaultProps = defaultProps$7;
1503
1391
 
1504
- var propTypes$3 = {
1392
+ var propTypes$6 = {
1505
1393
  className: PropTypes__default["default"].string
1506
1394
  };
1507
- var defaultProps$3 = {
1395
+ var defaultProps$6 = {
1508
1396
  className: null
1509
1397
  };
1510
1398
 
1511
1399
  var HandTap = function HandTap(_ref) {
1512
1400
  var className = _ref.className;
1513
1401
  return /*#__PURE__*/React__default["default"].createElement("div", {
1514
- className: classNames__default["default"]([styles.container, _defineProperty__default["default"]({}, className, className !== null)])
1402
+ className: classNames__default["default"]([styles$3.container, _defineProperty__default["default"]({}, className, className !== null)])
1515
1403
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1516
- className: styles.inner
1404
+ className: styles$3.inner
1517
1405
  }, /*#__PURE__*/React__default["default"].createElement("div", {
1518
- className: styles.circle
1406
+ className: styles$3.circle
1519
1407
  }), /*#__PURE__*/React__default["default"].createElement(HandIcon, {
1520
- className: styles.hand
1408
+ className: styles$3.hand
1409
+ })));
1410
+ };
1411
+
1412
+ HandTap.propTypes = propTypes$6;
1413
+ HandTap.defaultProps = defaultProps$6;
1414
+
1415
+ var styles$2 = {"track":"micromag-viewer-partials-seek-bar-track","progress":"micromag-viewer-partials-seek-bar-progress","inner":"micromag-viewer-partials-seek-bar-inner","progressBar":"micromag-viewer-partials-seek-bar-progressBar","playHead":"micromag-viewer-partials-seek-bar-playHead","withSeekHead":"micromag-viewer-partials-seek-bar-withSeekHead","time":"micromag-viewer-partials-seek-bar-time"};
1416
+
1417
+ var propTypes$5 = {
1418
+ media: PropTypes__default["default"].node,
1419
+ currentTime: PropTypes__default["default"].number,
1420
+ duration: PropTypes__default["default"].number,
1421
+ playing: PropTypes__default["default"].bool,
1422
+ backgroundColor: core$1.PropTypes.color,
1423
+ progressColor: core$1.PropTypes.color,
1424
+ onSeek: PropTypes__default["default"].func,
1425
+ onSeekStart: PropTypes__default["default"].func,
1426
+ onSeekEnd: PropTypes__default["default"].func,
1427
+ focusable: PropTypes__default["default"].bool,
1428
+ className: PropTypes__default["default"].string,
1429
+ withSeekHead: PropTypes__default["default"].bool
1430
+ };
1431
+ var defaultProps$5 = {
1432
+ media: null,
1433
+ currentTime: null,
1434
+ duration: null,
1435
+ playing: false,
1436
+ backgroundColor: null,
1437
+ progressColor: null,
1438
+ onSeek: null,
1439
+ onSeekStart: null,
1440
+ onSeekEnd: null,
1441
+ focusable: true,
1442
+ className: null,
1443
+ withSeekHead: true
1444
+ };
1445
+
1446
+ var SeekBar = function SeekBar(_ref) {
1447
+ var _ref3;
1448
+
1449
+ var media = _ref.media,
1450
+ currentTime = _ref.currentTime,
1451
+ duration = _ref.duration,
1452
+ playing = _ref.playing,
1453
+ backgroundColor = _ref.backgroundColor,
1454
+ progressColor = _ref.progressColor,
1455
+ onSeek = _ref.onSeek,
1456
+ onSeekStart = _ref.onSeekStart,
1457
+ onSeekEnd = _ref.onSeekEnd,
1458
+ focusable = _ref.focusable,
1459
+ className = _ref.className,
1460
+ withSeekHead = _ref.withSeekHead;
1461
+ var intl = reactIntl.useIntl();
1462
+
1463
+ var _useSpring = core.useSpring(function () {
1464
+ return {
1465
+ x: currentTime !== null && duration !== null ? currentTime / duration : 0,
1466
+ config: {
1467
+ duration: 0
1468
+ }
1469
+ };
1470
+ }),
1471
+ _useSpring2 = _slicedToArray__default["default"](_useSpring, 2),
1472
+ springProps = _useSpring2[0],
1473
+ setSpringProps = _useSpring2[1];
1474
+
1475
+ var lastMediaRef = React.useRef(media);
1476
+ var mediaChanged = lastMediaRef.current !== media;
1477
+ lastMediaRef.current = media;
1478
+
1479
+ var _useDimensionObserver = hooks.useDimensionObserver(),
1480
+ elRef = _useDimensionObserver.ref,
1481
+ _useDimensionObserver2 = _useDimensionObserver.width,
1482
+ elWidth = _useDimensionObserver2 === void 0 ? null : _useDimensionObserver2;
1483
+
1484
+ React.useEffect(function () {
1485
+ if (currentTime === null || duration === null) {
1486
+ return;
1487
+ }
1488
+
1489
+ var progress = duration > 0 ? currentTime / duration : 0;
1490
+ setSpringProps.start({
1491
+ reset: true,
1492
+ immediate: !playing || mediaChanged,
1493
+ from: {
1494
+ x: progress
1495
+ },
1496
+ to: {
1497
+ x: playing ? 1 : progress
1498
+ },
1499
+ config: {
1500
+ duration: (duration - currentTime) * 1000
1501
+ }
1502
+ });
1503
+ }, [playing, duration, currentTime, mediaChanged, setSpringProps]); // User events
1504
+
1505
+ var seekFromX = React.useCallback(function (x) {
1506
+ var elX = elRef.current.getBoundingClientRect().left;
1507
+ var progress = Math.max(0, Math.min(1, (x - elX) / elWidth));
1508
+ setSpringProps.start({
1509
+ immediate: true,
1510
+ to: {
1511
+ x: progress
1512
+ }
1513
+ });
1514
+
1515
+ if (onSeek !== null && duration !== null) {
1516
+ onSeek(progress * duration);
1517
+ }
1518
+ }, [duration, playing, onSeek]);
1519
+ var bind = react.useGesture({
1520
+ onDrag: function onDrag(_ref2) {
1521
+ var _ref2$xy = _slicedToArray__default["default"](_ref2.xy, 1),
1522
+ x = _ref2$xy[0],
1523
+ elapsedTime = _ref2.elapsedTime,
1524
+ active = _ref2.active;
1525
+
1526
+ if (!active && elapsedTime > 300) {
1527
+ return;
1528
+ }
1529
+
1530
+ seekFromX(x);
1531
+ },
1532
+ onPointerDown: function onPointerDown() {
1533
+ if (onSeekStart !== null) {
1534
+ onSeekStart();
1535
+ }
1536
+ },
1537
+ onPointerUp: function onPointerUp() {
1538
+ if (onSeekEnd !== null) {
1539
+ onSeekEnd();
1540
+ }
1541
+ }
1542
+ }, {
1543
+ drag: {
1544
+ axis: 'x',
1545
+ filterTaps: true
1546
+ }
1547
+ });
1548
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1549
+ className: classNames__default["default"]([styles$2.container, (_ref3 = {}, _defineProperty__default["default"](_ref3, className, className !== null), _defineProperty__default["default"](_ref3, styles$2.withSeekHead, withSeekHead), _ref3)])
1550
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1551
+ className: styles$2.inner
1552
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1553
+ className: styles$2.progressBar,
1554
+ style: {
1555
+ backgroundColor: backgroundColor
1556
+ }
1557
+ }, /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
1558
+ className: styles$2.playHead,
1559
+ style: {
1560
+ left: springProps.x.to(function (x) {
1561
+ return "".concat(x * 100, "%");
1562
+ }),
1563
+ backgroundColor: progressColor
1564
+ }
1565
+ }), /*#__PURE__*/React__default["default"].createElement(web.animated.div, {
1566
+ className: styles$2.progress,
1567
+ style: {
1568
+ transform: springProps.x.to(function (x) {
1569
+ return "scaleX(".concat(x, ")");
1570
+ }),
1571
+ backgroundColor: progressColor
1572
+ }
1573
+ })), /*#__PURE__*/React__default["default"].createElement("button", Object.assign({
1574
+ ref: elRef
1575
+ }, bind(), {
1576
+ type: "button",
1577
+ className: styles$2.track,
1578
+ title: intl.formatMessage({
1579
+ id: "G1Gyjn",
1580
+ defaultMessage: [{
1581
+ "type": 0,
1582
+ "value": "Seek"
1583
+ }]
1584
+ }),
1585
+ "aria-label": intl.formatMessage({
1586
+ id: "G1Gyjn",
1587
+ defaultMessage: [{
1588
+ "type": 0,
1589
+ "value": "Seek"
1590
+ }]
1591
+ }),
1592
+ tabIndex: focusable ? '0' : '-1'
1593
+ }))));
1594
+ };
1595
+
1596
+ SeekBar.propTypes = propTypes$5;
1597
+ SeekBar.defaultProps = defaultProps$5;
1598
+
1599
+ var styles$1 = {"muteButton":"micromag-viewer-partials-playback-controls-muteButton","playPauseButton":"micromag-viewer-partials-playback-controls-playPauseButton","container":"micromag-viewer-partials-playback-controls-container","isCollapsed":"micromag-viewer-partials-playback-controls-isCollapsed","icon":"micromag-viewer-partials-playback-controls-icon","withPlayPause":"micromag-viewer-partials-playback-controls-withPlayPause","isMuted":"micromag-viewer-partials-playback-controls-isMuted","withMute":"micromag-viewer-partials-playback-controls-withMute","seekBar":"micromag-viewer-partials-playback-controls-seekBar","withSeekBar":"micromag-viewer-partials-playback-controls-withSeekBar"};
1600
+
1601
+ var propTypes$4 = {
1602
+ className: PropTypes__default["default"].string
1603
+ };
1604
+ var defaultProps$4 = {
1605
+ className: null
1606
+ };
1607
+
1608
+ function PlaybackControls(_ref) {
1609
+ var _ref4;
1610
+
1611
+ var className = _ref.className;
1612
+ var intl = reactIntl.useIntl();
1613
+
1614
+ var _usePlaybackContext = contexts.usePlaybackContext(),
1615
+ _usePlaybackContext$m = _usePlaybackContext.media,
1616
+ mediaElement = _usePlaybackContext$m === void 0 ? null : _usePlaybackContext$m,
1617
+ _usePlaybackContext$p = _usePlaybackContext.playing,
1618
+ playing = _usePlaybackContext$p === void 0 ? false : _usePlaybackContext$p,
1619
+ _usePlaybackContext$m2 = _usePlaybackContext.muted,
1620
+ muted = _usePlaybackContext$m2 === void 0 ? true : _usePlaybackContext$m2,
1621
+ setPlaying = _usePlaybackContext.setPlaying,
1622
+ setMuted = _usePlaybackContext.setMuted,
1623
+ controls = _usePlaybackContext.controls,
1624
+ controlsVisible = _usePlaybackContext.controlsVisible,
1625
+ controlsTheme = _usePlaybackContext.controlsTheme,
1626
+ showControls = _usePlaybackContext.showControls;
1627
+
1628
+ var duration = hooks.useMediaDuration(mediaElement);
1629
+ var currentTime = hooks.useMediaCurrentTime(mediaElement, {
1630
+ disabled: !playing,
1631
+ updateInterval: 100
1632
+ });
1633
+
1634
+ var _useState = React.useState(null),
1635
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1636
+ customControlsTheme = _useState2[0],
1637
+ setCustomControlsTheme = _useState2[1];
1638
+
1639
+ var _useState3 = React.useState(false),
1640
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
1641
+ wasPlaying = _useState4[0],
1642
+ setWasPlaying = _useState4[1];
1643
+
1644
+ React.useEffect(function () {
1645
+ var _ref2 = controlsTheme || {},
1646
+ color = _ref2.color,
1647
+ progressColor = _ref2.progressColor,
1648
+ seekBarOnly = _ref2.seekBarOnly;
1649
+
1650
+ setCustomControlsTheme({
1651
+ color: utils.getColorAsString(color),
1652
+ progressColor: utils.getColorAsString(progressColor),
1653
+ seekBarOnly: seekBarOnly
1654
+ });
1655
+ }, [controlsTheme, setCustomControlsTheme]);
1656
+ var onPlay = React.useCallback(function () {
1657
+ setPlaying(true);
1658
+
1659
+ if (!controlsVisible) {
1660
+ showControls();
1661
+ }
1662
+ }, [setPlaying, controlsVisible, showControls]);
1663
+ var onPause = React.useCallback(function () {
1664
+ setPlaying(false);
1665
+
1666
+ if (!controlsVisible) {
1667
+ showControls();
1668
+ }
1669
+ }, [setPlaying, controlsVisible, showControls]);
1670
+ var onMute = React.useCallback(function () {
1671
+ setMuted(true);
1672
+
1673
+ if (!controlsVisible && controls) {
1674
+ showControls();
1675
+ }
1676
+ }, [setMuted, controlsVisible, showControls]);
1677
+ var onUnmute = React.useCallback(function () {
1678
+ setMuted(false);
1679
+
1680
+ if (!controlsVisible && controls) {
1681
+ showControls();
1682
+ }
1683
+ }, [setMuted, controlsVisible, showControls]);
1684
+ var onSeekStart = React.useCallback(function () {
1685
+ setWasPlaying(playing);
1686
+ if (playing) setPlaying(false);
1687
+ }, [playing, setWasPlaying]);
1688
+ var onSeek = React.useCallback(function (time) {
1689
+ mediaElement.currentTime = time;
1690
+ showControls();
1691
+ }, [mediaElement, setWasPlaying, playing, setPlaying, showControls]);
1692
+ var onSeekEnd = React.useCallback(function () {
1693
+ if (wasPlaying) setPlaying(true);
1694
+ }, [playing, setPlaying, wasPlaying]);
1695
+
1696
+ var _ref3 = customControlsTheme || {},
1697
+ color = _ref3.color,
1698
+ progressColor = _ref3.progressColor,
1699
+ seekBarOnly = _ref3.seekBarOnly;
1700
+
1701
+ var isCollapsed = controls && !controlsVisible && playing || !controls && mediaElement !== null;
1702
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1703
+ className: classNames__default["default"]([styles$1.container, (_ref4 = {}, _defineProperty__default["default"](_ref4, className, className !== null), _defineProperty__default["default"](_ref4, styles$1.withPlayPause, controls && !seekBarOnly), _defineProperty__default["default"](_ref4, styles$1.withMute, mediaElement !== null || controls), _defineProperty__default["default"](_ref4, styles$1.withSeekBar, controls), _defineProperty__default["default"](_ref4, styles$1.isCollapsed, isCollapsed), _ref4)])
1704
+ }, /*#__PURE__*/React__default["default"].createElement("button", {
1705
+ type: "button",
1706
+ className: styles$1.playPauseButton,
1707
+ style: {
1708
+ color: color
1709
+ },
1710
+ onClick: playing ? onPause : onPlay,
1711
+ title: intl.formatMessage({
1712
+ id: "ahSpiH",
1713
+ defaultMessage: [{
1714
+ "type": 0,
1715
+ "value": "Play"
1716
+ }]
1717
+ }),
1718
+ "aria-label": intl.formatMessage({
1719
+ id: "ahSpiH",
1720
+ defaultMessage: [{
1721
+ "type": 0,
1722
+ "value": "Play"
1723
+ }]
1724
+ }),
1725
+ tabIndex: controlsVisible ? '0' : '-1'
1726
+ }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1727
+ className: styles$1.icon,
1728
+ icon: playing ? faPause.faPause : faPlay.faPlay
1729
+ })), /*#__PURE__*/React__default["default"].createElement(SeekBar, {
1730
+ className: styles$1.seekBar,
1731
+ duration: duration,
1732
+ currentTime: currentTime,
1733
+ playing: playing,
1734
+ media: mediaElement,
1735
+ onSeek: onSeek,
1736
+ onSeekStart: onSeekStart,
1737
+ onSeekEnd: onSeekEnd,
1738
+ focusable: playing,
1739
+ isCollapsed: isCollapsed,
1740
+ withSeekHead: controlsVisible && !seekBarOnly,
1741
+ backgroundColor: color,
1742
+ progressColor: progressColor
1743
+ }), /*#__PURE__*/React__default["default"].createElement("button", {
1744
+ type: "button",
1745
+ className: classNames__default["default"]([styles$1.muteButton, _defineProperty__default["default"]({}, styles$1.isMuted, muted)]),
1746
+ style: {
1747
+ color: color
1748
+ },
1749
+ onClick: muted ? onUnmute : onMute,
1750
+ title: intl.formatMessage({
1751
+ id: "vzg8Es",
1752
+ defaultMessage: [{
1753
+ "type": 0,
1754
+ "value": "Mute"
1755
+ }]
1756
+ }),
1757
+ "aria-label": intl.formatMessage({
1758
+ id: "vzg8Es",
1759
+ defaultMessage: [{
1760
+ "type": 0,
1761
+ "value": "Mute"
1762
+ }]
1763
+ }),
1764
+ tabIndex: controlsVisible ? '0' : '-1'
1765
+ }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1766
+ className: styles$1.icon,
1767
+ icon: faVolumeUp.faVolumeUp
1521
1768
  })));
1769
+ }
1770
+
1771
+ PlaybackControls.propTypes = propTypes$4;
1772
+ PlaybackControls.defaultProps = defaultProps$4;
1773
+
1774
+ var styles = {"container":"micromag-viewer-partials-web-view-container","opened":"micromag-viewer-partials-web-view-opened"};
1775
+
1776
+ var _excluded$2 = ["opened", "close", "open", "update", "url"];
1777
+ var propTypes$3 = {
1778
+ className: PropTypes__default["default"].string,
1779
+ style: PropTypes__default["default"].object
1780
+ };
1781
+ var defaultProps$3 = {
1782
+ className: null,
1783
+ style: null
1522
1784
  };
1523
1785
 
1524
- HandTap.propTypes = propTypes$3;
1525
- HandTap.defaultProps = defaultProps$3;
1786
+ function WebViewContainer(_ref) {
1787
+ var _ref2;
1788
+
1789
+ var className = _ref.className,
1790
+ style = _ref.style;
1791
+
1792
+ var _useViewerWebView = contexts.useViewerWebView(),
1793
+ opened = _useViewerWebView.opened,
1794
+ close = _useViewerWebView.close;
1795
+ _useViewerWebView.open;
1796
+ _useViewerWebView.update;
1797
+ var _useViewerWebView$url = _useViewerWebView.url,
1798
+ url = _useViewerWebView$url === void 0 ? null : _useViewerWebView$url,
1799
+ webViewProps = _objectWithoutProperties__default["default"](_useViewerWebView, _excluded$2);
1800
+
1801
+ var _useViewerInteraction = contexts.useViewerInteraction(),
1802
+ disableInteraction = _useViewerInteraction.disableInteraction,
1803
+ enableInteraction = _useViewerInteraction.enableInteraction;
1804
+
1805
+ var _useState = React.useState(url),
1806
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1807
+ currentUrl = _useState2[0],
1808
+ setCurrentUrl = _useState2[1];
1809
+
1810
+ React.useEffect(function () {
1811
+ if (url !== null) {
1812
+ setCurrentUrl(url);
1813
+ }
1814
+ }, [url, setCurrentUrl]);
1815
+ React.useEffect(function () {
1816
+ if (opened) {
1817
+ disableInteraction();
1818
+ } else {
1819
+ enableInteraction();
1820
+ }
1821
+
1822
+ return function () {
1823
+ enableInteraction();
1824
+ };
1825
+ }, [opened]);
1826
+ var onTransitionEnd = React.useCallback(function () {
1827
+ if (url === null) {
1828
+ setCurrentUrl(null);
1829
+ }
1830
+ }, [url]);
1831
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1832
+ className: classNames__default["default"]([styles.container, (_ref2 = {}, _defineProperty__default["default"](_ref2, styles.opened, opened), _defineProperty__default["default"](_ref2, className, className !== null), _ref2)]),
1833
+ style: style,
1834
+ onTransitionEnd: onTransitionEnd
1835
+ }, /*#__PURE__*/React__default["default"].createElement(WebView__default["default"], Object.assign({
1836
+ url: url || currentUrl
1837
+ }, webViewProps, {
1838
+ closeable: true,
1839
+ className: styles.webView,
1840
+ onClose: close
1841
+ })));
1842
+ }
1843
+
1844
+ WebViewContainer.propTypes = propTypes$3;
1845
+ WebViewContainer.defaultProps = defaultProps$3;
1526
1846
 
1527
1847
  var propTypes$2 = {
1528
1848
  story: core$1.PropTypes.story,
@@ -1601,7 +1921,7 @@ var defaultProps$2 = {
1601
1921
  };
1602
1922
 
1603
1923
  var Viewer = function Viewer(_ref) {
1604
- var _ref12;
1924
+ var _ref14;
1605
1925
 
1606
1926
  var story = _ref.story,
1607
1927
  basePath = _ref.basePath,
@@ -1613,7 +1933,6 @@ var Viewer = function Viewer(_ref) {
1613
1933
  deviceScreens = _ref.deviceScreens,
1614
1934
  renderContext = _ref.renderContext,
1615
1935
  visitor = _ref.visitor,
1616
- onScreenChange = _ref.onScreenChange,
1617
1936
  tapNextScreenWidthPercent = _ref.tapNextScreenWidthPercent,
1618
1937
  neighborScreensActive = _ref.neighborScreensActive,
1619
1938
  neighborScreensMounted = _ref.neighborScreensMounted,
@@ -1631,6 +1950,7 @@ var Viewer = function Viewer(_ref) {
1631
1950
  onCloseViewer = _ref.onClose,
1632
1951
  onInteraction = _ref.onInteraction,
1633
1952
  onEnd = _ref.onEnd,
1953
+ onScreenChange = _ref.onScreenChange,
1634
1954
  onViewModeChange = _ref.onViewModeChange,
1635
1955
  currentScreenMedia = _ref.currentScreenMedia,
1636
1956
  screensMedias = _ref.screensMedias,
@@ -1678,6 +1998,14 @@ var Viewer = function Viewer(_ref) {
1678
1998
  var isStatic = renderContext === 'static';
1679
1999
  var isCapture = renderContext === 'capture';
1680
2000
  var withoutScreensTransforms = isStatic || isCapture;
2001
+
2002
+ var _usePlaybackContext = contexts.usePlaybackContext(),
2003
+ playing = _usePlaybackContext.playing,
2004
+ _usePlaybackContext$c = _usePlaybackContext.controlsVisible,
2005
+ playbackcontrolsVisible = _usePlaybackContext$c === void 0 ? false : _usePlaybackContext$c,
2006
+ _usePlaybackContext$m = _usePlaybackContext.media,
2007
+ playbackMedia = _usePlaybackContext$m === void 0 ? null : _usePlaybackContext$m;
2008
+
1681
2009
  var trackScreenView = hooks.useTrackScreenView();
1682
2010
  var contentRef = React.useRef(null); // Get screen size
1683
2011
 
@@ -1708,10 +2036,11 @@ var Viewer = function Viewer(_ref) {
1708
2036
  React.useEffect(function () {
1709
2037
  if (ready && onViewModeChange !== null) {
1710
2038
  onViewModeChange({
1711
- landscape: landscape
2039
+ landscape: landscape,
2040
+ menuOverScreen: menuOverScreen
1712
2041
  });
1713
2042
  }
1714
- }, [ready, landscape, onViewModeChange]);
2043
+ }, [ready, landscape, menuOverScreen, onViewModeChange]);
1715
2044
  var screensMediasRef = React.useRef([]); // Screen index
1716
2045
 
1717
2046
  var screenIndex = React.useMemo(function () {
@@ -1721,7 +2050,7 @@ var Viewer = function Viewer(_ref) {
1721
2050
  }, [screenId, screens]);
1722
2051
 
1723
2052
  if (currentScreenMedia !== null) {
1724
- currentScreenMedia.current = screensMediasRef.current[screenIndex];
2053
+ currentScreenMedia.current = screensMediasRef.current[screenIndex] || null;
1725
2054
  }
1726
2055
 
1727
2056
  if (screensMedias !== null) {
@@ -1752,12 +2081,10 @@ var Viewer = function Viewer(_ref) {
1752
2081
 
1753
2082
  var currentScreenRef = React.useRef(null);
1754
2083
  var gotoPreviousScreen = React.useCallback(function () {
1755
- changeIndex(Math.max(0, screenIndex - 1));
1756
- currentScreenRef.current.focus();
2084
+ changeIndex(Math.max(0, screenIndex - 1)); // currentScreenRef.current.focus();
1757
2085
  }, [changeIndex]);
1758
2086
  var gotoNextScreen = React.useCallback(function () {
1759
- changeIndex(Math.min(screens.length - 1, screenIndex + 1));
1760
- currentScreenRef.current.focus();
2087
+ changeIndex(Math.min(screens.length - 1, screenIndex + 1)); // currentScreenRef.current.focus();
1761
2088
  }, [changeIndex]);
1762
2089
  var screensCount = screens.length;
1763
2090
 
@@ -1775,45 +2102,107 @@ var Viewer = function Viewer(_ref) {
1775
2102
  setHasInteracted(true);
1776
2103
  }
1777
2104
  }, [onInteraction, hasInteracted, setHasInteracted]);
2105
+ var onScreenNavigate = React.useCallback(function (_ref6) {
2106
+ var index = _ref6.index,
2107
+ newIndex = _ref6.newIndex,
2108
+ end = _ref6.end,
2109
+ direction = _ref6.direction;
2110
+
2111
+ if (end && onEnd !== null) {
2112
+ onEnd();
2113
+ }
2114
+
2115
+ changeIndex(newIndex);
2116
+ eventsManager.emit('navigate', {
2117
+ newIndex: newIndex,
2118
+ index: index,
2119
+ direction: direction,
2120
+ end: end
2121
+ });
2122
+
2123
+ if (end) {
2124
+ eventsManager.emit('navigate_end');
2125
+ } else {
2126
+ eventsManager.emit("navigate_".concat(direction), newIndex);
2127
+ }
2128
+ }, [onEnd, changeIndex]);
1778
2129
 
1779
2130
  var _useScreenInteraction = useScreenInteraction({
1780
2131
  screens: screens,
1781
2132
  screenIndex: screenIndex,
1782
2133
  screenWidth: screenContainerWidth,
1783
- isView: isView,
2134
+ disableCurrentScreenNavigation: !isView,
1784
2135
  clickOnSiblings: landscape && withLandscapeSiblingsScreens,
1785
2136
  nextScreenWidthPercent: tapNextScreenWidthPercent,
1786
- eventsManager: eventsManager,
1787
- onClick: onInteractionPrivate,
1788
- onEnd: onEnd,
1789
- onChangeScreen: changeIndex
2137
+ onInteract: onInteractionPrivate,
2138
+ onNavigate: onScreenNavigate
1790
2139
  }),
1791
- onScreenClick = _useScreenInteraction.onClick,
2140
+ interactWithScreen = _useScreenInteraction.interact,
1792
2141
  currentScreenInteractionEnabled = _useScreenInteraction.currentScreenInteractionEnabled,
1793
2142
  enableInteraction = _useScreenInteraction.enableInteraction,
1794
- disableInteraction = _useScreenInteraction.disableInteraction;
1795
-
1796
- var onClickContent = React.useCallback(function (e) {
1797
- if (withLandscapeSiblingsScreens || e.target !== contentRef.current) {
1798
- return;
2143
+ disableInteraction = _useScreenInteraction.disableInteraction; // Handle tap on screens
2144
+
2145
+
2146
+ var onDragScreen = React.useCallback(function (_ref7) {
2147
+ var _ref7$args = _slicedToArray__default["default"](_ref7.args, 1),
2148
+ tapScreenIndex = _ref7$args[0],
2149
+ event = _ref7.event,
2150
+ target = _ref7.target,
2151
+ currentTarget = _ref7.currentTarget,
2152
+ tap = _ref7.tap,
2153
+ _ref7$xy = _slicedToArray__default["default"](_ref7.xy, 2),
2154
+ x = _ref7$xy[0],
2155
+ y = _ref7$xy[1];
2156
+
2157
+ if (tap) {
2158
+ interactWithScreen({
2159
+ event: event,
2160
+ target: target,
2161
+ currentTarget: currentTarget,
2162
+ index: tapScreenIndex,
2163
+ x: x,
2164
+ y: y
2165
+ });
1799
2166
  }
2167
+ }, [interactWithScreen]);
2168
+ var dragScreenBind = react.useDrag(onDragScreen, {
2169
+ filterTaps: true
2170
+ }); // Handles tap when landscape (space around current screen)
1800
2171
 
1801
- var _e$currentTarget$getB = e.currentTarget.getBoundingClientRect(),
1802
- _e$currentTarget$getB2 = _e$currentTarget$getB.left,
1803
- contentX = _e$currentTarget$getB2 === void 0 ? 0 : _e$currentTarget$getB2,
1804
- _e$currentTarget$getB3 = _e$currentTarget$getB.width,
1805
- contentWidth = _e$currentTarget$getB3 === void 0 ? 0 : _e$currentTarget$getB3;
1806
-
1807
- var tapX = e.clientX;
1808
- var hasTappedLeft = tapX - contentX < contentWidth * 0.5;
1809
- var nextIndex = hasTappedLeft ? Math.max(0, screenIndex - 1) : Math.min(screensCount - 1, screenIndex + 1);
2172
+ var onDragContent = React.useCallback(function (_ref8) {
2173
+ var tap = _ref8.tap,
2174
+ target = _ref8.target,
2175
+ currentTarget = _ref8.currentTarget,
2176
+ _ref8$xy = _slicedToArray__default["default"](_ref8.xy, 1),
2177
+ x = _ref8$xy[0];
1810
2178
 
1811
- if (eventsManager !== null) {
1812
- eventsManager.emit('change_screen', nextIndex);
2179
+ if (!landscape || withLandscapeSiblingsScreens || target !== contentRef.current) {
2180
+ return;
1813
2181
  }
1814
2182
 
1815
- changeIndex(nextIndex);
1816
- }, [withLandscapeSiblingsScreens, screenIndex, tapNextScreenWidthPercent, changeIndex, eventsManager, screensCount]); // swipe menu open
2183
+ if (tap) {
2184
+ var _currentTarget$getBou = currentTarget.getBoundingClientRect(),
2185
+ _currentTarget$getBou2 = _currentTarget$getBou.left,
2186
+ contentX = _currentTarget$getBou2 === void 0 ? 0 : _currentTarget$getBou2,
2187
+ _currentTarget$getBou3 = _currentTarget$getBou.width,
2188
+ contentWidth = _currentTarget$getBou3 === void 0 ? 0 : _currentTarget$getBou3;
2189
+
2190
+ var hasTappedLeft = x - contentX < contentWidth * 0.5;
2191
+ var nextIndex = hasTappedLeft ? Math.max(0, screenIndex - 1) : Math.min(screensCount - 1, screenIndex + 1);
2192
+ onScreenNavigate({
2193
+ index: screenIndex,
2194
+ newIndex: nextIndex
2195
+ });
2196
+ }
2197
+ }, [screenIndex, screensCount, landscape, withLandscapeSiblingsScreens]);
2198
+ var dragContentBind = react.useDrag(onDragContent, {
2199
+ filterTaps: true
2200
+ });
2201
+ var onScreenKeyUp = React.useCallback(function (e, i) {
2202
+ if (e.key === 'Enter' && withLandscapeSiblingsScreens && landscape && i !== screenIndex) {
2203
+ changeIndex(i);
2204
+ }
2205
+ }, [withLandscapeSiblingsScreens, changeIndex, landscape, screenIndex]); // swipe menu open
1817
2206
 
1818
2207
  var menuVisible = screensCount === 0 || currentScreenInteractionEnabled;
1819
2208
 
@@ -1832,11 +2221,11 @@ var Viewer = function Viewer(_ref) {
1832
2221
  onInteractionPrivate();
1833
2222
  setMenuOpened(true);
1834
2223
  }, [changeIndex, onInteractionPrivate, setMenuOpened]);
1835
- var onClickMenuItem = React.useCallback(function (_ref6) {
1836
- var itemScreenId = _ref6.screenId;
2224
+ var onClickMenuItem = React.useCallback(function (_ref9) {
2225
+ var itemScreenId = _ref9.screenId;
1837
2226
  onInteractionPrivate();
1838
- var index = screens.findIndex(function (_ref7) {
1839
- var id = _ref7.id;
2227
+ var index = screens.findIndex(function (_ref10) {
2228
+ var id = _ref10.id;
1840
2229
  return id === itemScreenId;
1841
2230
  });
1842
2231
  changeIndex(index);
@@ -1889,32 +2278,34 @@ var Viewer = function Viewer(_ref) {
1889
2278
  disabled: renderContext !== 'view'
1890
2279
  });
1891
2280
 
1892
- var _ref8 = currentScreen || {},
1893
- screenParameters = _ref8.parameters;
2281
+ var _ref11 = currentScreen || {},
2282
+ screenParameters = _ref11.parameters;
1894
2283
 
1895
- var _ref9 = screenParameters || {},
1896
- screenMetadata = _ref9.metadata;
2284
+ var _ref12 = screenParameters || {},
2285
+ screenMetadata = _ref12.metadata;
1897
2286
 
1898
- var _ref10 = screenMetadata || {},
1899
- _ref10$title = _ref10.title,
1900
- screenTitle = _ref10$title === void 0 ? null : _ref10$title,
1901
- _ref10$description = _ref10.description,
1902
- screenDescription = _ref10$description === void 0 ? null : _ref10$description;
2287
+ var _ref13 = screenMetadata || {},
2288
+ _ref13$title = _ref13.title,
2289
+ screenTitle = _ref13$title === void 0 ? null : _ref13$title,
2290
+ _ref13$description = _ref13.description,
2291
+ screenDescription = _ref13$description === void 0 ? null : _ref13$description;
1903
2292
 
1904
2293
  var finalTitle = screenTitle !== null ? screenTitle : title;
1905
2294
  var finalMetadata = React.useMemo(function () {
1906
2295
  return screenDescription !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, metadata), {}, {
1907
2296
  description: screenDescription
1908
2297
  }) : metadata;
1909
- }, [metadata]);
2298
+ }, [metadata]); // Get element height
1910
2299
 
1911
- var _useResizeObserver = hooks.useResizeObserver(),
1912
- menuDotsContainerRef = _useResizeObserver.ref,
1913
- menuDotsContainerRect = _useResizeObserver.entry.contentRect;
2300
+ var _useDimensionObserver = hooks.useDimensionObserver(),
2301
+ menuDotsContainerRef = _useDimensionObserver.ref,
2302
+ _useDimensionObserver2 = _useDimensionObserver.height,
2303
+ menuDotsContainerHeight = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2;
1914
2304
 
1915
- var _ref11 = menuDotsContainerRect || {},
1916
- _ref11$height = _ref11.height,
1917
- menuDotsContainerHeight = _ref11$height === void 0 ? 0 : _ref11$height;
2305
+ var _useDimensionObserver3 = hooks.useDimensionObserver(),
2306
+ playbackControlsContainerRef = _useDimensionObserver3.ref,
2307
+ _useDimensionObserver4 = _useDimensionObserver3.height,
2308
+ playbackControlsContainerHeight = _useDimensionObserver4 === void 0 ? 0 : _useDimensionObserver4;
1918
2309
 
1919
2310
  var _useMemo = React.useMemo(function () {
1920
2311
  return neighborScreensMounted !== null ? {
@@ -1931,14 +2322,17 @@ var Viewer = function Viewer(_ref) {
1931
2322
  var mountedScreens = React.useMemo(function () {
1932
2323
  return neighborScreensMounted != null ? screens.slice(mountedScreenStartIndex, mountedScreenEndIndex) : screens;
1933
2324
  }, [screens, mountedScreenStartIndex, mountedScreenEndIndex, neighborScreensActive, neighborScreensMounted]);
1934
- return /*#__PURE__*/React__default["default"].createElement(contexts.ScreenSizeProvider, {
1935
- size: screenSize
1936
- }, /*#__PURE__*/React__default["default"].createElement(contexts.VisitorProvider, {
2325
+ return /*#__PURE__*/React__default["default"].createElement(contexts.VisitorProvider, {
1937
2326
  visitor: visitor
2327
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenSizeProvider, {
2328
+ size: screenSize
1938
2329
  }, /*#__PURE__*/React__default["default"].createElement(contexts.ViewerProvider, {
1939
2330
  events: eventsManager,
1940
2331
  menuVisible: menuVisible,
1941
- menuSize: menuDotsContainerHeight,
2332
+ menuOverScreen: menuOverScreen,
2333
+ topHeight: menuOverScreen && currentScreenInteractionEnabled ? menuDotsContainerHeight / screenScale : 0,
2334
+ bottomHeight: (playbackcontrolsVisible || !playing) && currentScreenInteractionEnabled ? playbackControlsContainerHeight / screenScale : 0,
2335
+ bottomSidesWidth: (playbackcontrolsVisible || !playing || playbackMedia !== null) && currentScreenInteractionEnabled ? 60 / screenScale : 0,
1942
2336
  gotoPreviousScreen: gotoPreviousScreen,
1943
2337
  gotoNextScreen: gotoNextScreen,
1944
2338
  disableInteraction: disableInteraction,
@@ -1949,9 +2343,9 @@ var Viewer = function Viewer(_ref) {
1949
2343
  }, overscrollStyle) : /*#__PURE__*/React__default["default"].createElement(reactHelmet.Helmet, null, overscrollStyle), /*#__PURE__*/React__default["default"].createElement(components.FontFaces, {
1950
2344
  fonts: finalFonts
1951
2345
  }), /*#__PURE__*/React__default["default"].createElement("div", {
1952
- className: classNames__default["default"]([styles$8.container, screenSize.screens.map(function (screenName) {
2346
+ className: classNames__default["default"]([styles$5.container, screenSize.screens.map(function (screenName) {
1953
2347
  return "story-screen-".concat(screenName);
1954
- }), (_ref12 = {}, _defineProperty__default["default"](_ref12, styles$8.landscape, landscape), _defineProperty__default["default"](_ref12, styles$8.withSiblings, withLandscapeSiblingsScreens), _defineProperty__default["default"](_ref12, styles$8.hideMenu, !menuVisible), _defineProperty__default["default"](_ref12, styles$8.ready, ready || withoutScreensTransforms), _defineProperty__default["default"](_ref12, styles$8.hasInteracted, hasInteracted), _defineProperty__default["default"](_ref12, className, className), _ref12)]),
2348
+ }), (_ref14 = {}, _defineProperty__default["default"](_ref14, styles$5.landscape, landscape), _defineProperty__default["default"](_ref14, styles$5.withSiblings, withLandscapeSiblingsScreens), _defineProperty__default["default"](_ref14, styles$5.hideMenu, !menuVisible), _defineProperty__default["default"](_ref14, styles$5.ready, ready || withoutScreensTransforms), _defineProperty__default["default"](_ref14, styles$5.hasInteracted, hasInteracted), _defineProperty__default["default"](_ref14, className, className), _ref14)]),
1955
2349
  ref: containerRef,
1956
2350
  onContextMenu: onContextMenu
1957
2351
  }, !withoutMenu ? /*#__PURE__*/React__default["default"].createElement(ViewerMenu, {
@@ -1975,14 +2369,11 @@ var Viewer = function Viewer(_ref) {
1975
2369
  withDotItemClick: screenContainerWidth > 400,
1976
2370
  withoutScreensMenu: withoutScreensMenu,
1977
2371
  refDots: menuDotsContainerRef
1978
- }) : null, ready || withoutScreensTransforms ? /*#__PURE__*/React__default["default"].createElement("div", {
2372
+ }) : null, ready || withoutScreensTransforms ? /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1979
2373
  ref: contentRef,
1980
- className: styles$8.content,
1981
- onClick: onClickContent // onPointerDown={detectPointerEvents.hasApi ? onClickContent : null}
1982
- // onMouseDown={detectPointerEvents.hasApi ? onClickContent : null}
1983
-
1984
- }, mountedScreens.map(function (scr, mountedIndex) {
1985
- var _ref13;
2374
+ className: styles$5.content
2375
+ }, dragContentBind()), mountedScreens.map(function (scr, mountedIndex) {
2376
+ var _ref15;
1986
2377
 
1987
2378
  var i = mountedScreenStartIndex + mountedIndex;
1988
2379
  var current = i === parseInt(screenIndex, 10);
@@ -1994,12 +2385,8 @@ var Viewer = function Viewer(_ref) {
1994
2385
  index: i,
1995
2386
  current: current,
1996
2387
  active: active,
1997
- onPrevious: gotoPreviousScreen,
1998
- onNext: gotoNextScreen,
1999
- enableInteraction: enableInteraction,
2000
- disableInteraction: disableInteraction,
2001
- getMediaRef: function getMediaRef(mediaRef) {
2002
- screensMediasRef.current[i] = mediaRef;
2388
+ mediaRef: function mediaRef(ref) {
2389
+ screensMediasRef.current[i] = ref;
2003
2390
  }
2004
2391
  });
2005
2392
  var key = "screen-viewer-".concat(scr.id || '', "-").concat(i + 1);
@@ -2013,7 +2400,7 @@ var Viewer = function Viewer(_ref) {
2013
2400
 
2014
2401
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
2015
2402
  key: key
2016
- }, /*#__PURE__*/React__default["default"].createElement("div", {
2403
+ }, /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
2017
2404
  ref: current ? currentScreenRef : null,
2018
2405
  style: {
2019
2406
  // width: landscape ? screenWidth : null,
@@ -2022,7 +2409,7 @@ var Viewer = function Viewer(_ref) {
2022
2409
  height: screenContainerHeight,
2023
2410
  transform: !withoutScreensTransforms ? screenTransform : null
2024
2411
  },
2025
- className: classNames__default["default"]([styles$8.screen, (_ref13 = {}, _defineProperty__default["default"](_ref13, styles$8.current, current), _defineProperty__default["default"](_ref13, styles$8.visible, current || withLandscapeSiblingsScreens), _ref13)]),
2412
+ className: classNames__default["default"]([styles$5.screen, (_ref15 = {}, _defineProperty__default["default"](_ref15, styles$5.current, current), _defineProperty__default["default"](_ref15, styles$5.visible, current || withLandscapeSiblingsScreens), _ref15)]),
2026
2413
  tabIndex: active ? '0' : '-1'
2027
2414
  /* eslint-disable-line */
2028
2415
  ,
@@ -2040,26 +2427,10 @@ var Viewer = function Viewer(_ref) {
2040
2427
  index: i + 1
2041
2428
  }),
2042
2429
  onKeyUp: function onKeyUp(e) {
2043
- if (e.key === 'Enter') {
2044
- onScreenClick(e, i);
2045
- }
2046
- },
2047
- onClick: function onClick(e) {
2048
- return onScreenClick(e, i);
2049
- } // @todo: this was to make the experience “snappier” when switching screens
2050
- // onPointerDown={
2051
- // detectPointerEvents.hasApi
2052
- // ? (e) => onScreenClick(e, i)
2053
- // : null
2054
- // }
2055
- // onMouseDown={
2056
- // !detectPointerEvents.hasApi
2057
- // ? (e) => onScreenClick(e, i)
2058
- // : null
2059
- // }
2060
-
2061
- }, /*#__PURE__*/React__default["default"].createElement("div", {
2062
- className: styles$8.scaler,
2430
+ return onScreenKeyUp(e, i);
2431
+ }
2432
+ }, dragScreenBind(i)), /*#__PURE__*/React__default["default"].createElement("div", {
2433
+ className: styles$5.scaler,
2063
2434
  style: {
2064
2435
  width: screenWidth,
2065
2436
  height: screenHeight,
@@ -2068,10 +2439,10 @@ var Viewer = function Viewer(_ref) {
2068
2439
  }
2069
2440
  }, current && screenIndex > 0 ? /*#__PURE__*/React__default["default"].createElement("button", {
2070
2441
  type: "button",
2071
- className: classNames__default["default"]([styles$8.navButton, styles$8.previous]),
2442
+ className: classNames__default["default"]([styles$5.navButton, styles$5.previous]),
2072
2443
  onClick: gotoPreviousScreen
2073
2444
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
2074
- className: styles$8.arrow,
2445
+ className: styles$5.arrow,
2075
2446
  icon: faArrowLeft.faArrowLeft
2076
2447
  }), /*#__PURE__*/React__default["default"].createElement("span", {
2077
2448
  className: "sr-only"
@@ -2083,10 +2454,10 @@ var Viewer = function Viewer(_ref) {
2083
2454
  }]
2084
2455
  }))) : null, viewerScreen, current && screenIndex < screens.length - 1 ? /*#__PURE__*/React__default["default"].createElement("button", {
2085
2456
  type: "button",
2086
- className: classNames__default["default"]([styles$8.navButton, styles$8.next]),
2457
+ className: classNames__default["default"]([styles$5.navButton, styles$5.next]),
2087
2458
  onClick: gotoNextScreen
2088
2459
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
2089
- className: styles$8.arrow,
2460
+ className: styles$5.arrow,
2090
2461
  icon: faArrowRight.faArrowRight
2091
2462
  }), /*#__PURE__*/React__default["default"].createElement("span", {
2092
2463
  className: "sr-only"
@@ -2105,9 +2476,24 @@ var Viewer = function Viewer(_ref) {
2105
2476
  "value": "Go to next screen"
2106
2477
  }]
2107
2478
  }))) : null), withNavigationHint && !withLandscapeSiblingsScreens && current && screenIndex === 0 ? /*#__PURE__*/React__default["default"].createElement(HandTap, {
2108
- className: styles$8.handTap
2479
+ className: styles$5.handTap
2109
2480
  }) : null));
2110
- })) : null))));
2481
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
2482
+ className: classNames__default["default"]([styles$5.playbackControls, _defineProperty__default["default"]({}, styles$5.isCollapsed, !playbackcontrolsVisible)]),
2483
+ ref: playbackControlsContainerRef
2484
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2485
+ className: styles$5.playbackControlsContainer,
2486
+ style: {
2487
+ width: screenContainerWidth
2488
+ }
2489
+ }, /*#__PURE__*/React__default["default"].createElement(PlaybackControls, {
2490
+ className: styles$5.controls
2491
+ })))) : null, /*#__PURE__*/React__default["default"].createElement(WebViewContainer, {
2492
+ className: styles$5.webView,
2493
+ style: {
2494
+ maxWidth: Math.max(screenContainerWidth, 600)
2495
+ }
2496
+ })))));
2111
2497
  };
2112
2498
 
2113
2499
  Viewer.propTypes = propTypes$2;
@@ -2183,6 +2569,13 @@ var ViewerRoutes = function ViewerRoutes(_ref) {
2183
2569
  ViewerRoutes.propTypes = propTypes$1;
2184
2570
  ViewerRoutes.defaultProps = defaultProps$1;
2185
2571
 
2572
+ var home = "/";
2573
+ var screen = "/:screen";
2574
+ var defaultRoutes = {
2575
+ home: home,
2576
+ screen: screen
2577
+ };
2578
+
2186
2579
  var _excluded = ["story", "screenComponents", "memoryRouter", "basePath", "routes", "withoutRouter", "googleApiKey", "trackingVariables", "locale", "locales", "translations", "pathWithIndex"];
2187
2580
  var propTypes = {
2188
2581
  story: core$1.PropTypes.story,
@@ -2274,7 +2667,7 @@ var ViewerContainer = function ViewerContainer(_ref) {
2274
2667
  }, /*#__PURE__*/React__default["default"].createElement(screens.ScreensProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.ComponentsProvider, {
2275
2668
  namespace: contexts.SCREENS_NAMESPACE,
2276
2669
  components: screenComponents || {}
2277
- }, /*#__PURE__*/React__default["default"].createElement(contexts.UserInteractionProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.TrackingProvider, {
2670
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.UserInteractionProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.PlaybackProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.TrackingProvider, {
2278
2671
  variables: finalTrackingVariables
2279
2672
  }, withoutRouter ? /*#__PURE__*/React__default["default"].createElement(Viewer, Object.assign({
2280
2673
  story: story,
@@ -2283,7 +2676,7 @@ var ViewerContainer = function ViewerContainer(_ref) {
2283
2676
  story: story,
2284
2677
  basePath: basePath,
2285
2678
  pathWithIndex: pathWithIndex
2286
- }, otherProps))))))))));
2679
+ }, otherProps)))))))))));
2287
2680
  return withoutRouter ? content : /*#__PURE__*/React__default["default"].createElement(Router, {
2288
2681
  basename: !memoryRouter ? basePath : null
2289
2682
  }, /*#__PURE__*/React__default["default"].createElement(contexts.RoutesProvider, {