@micromag/viewer 0.3.150 → 0.3.154

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,462 @@ 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","icon":"micromag-viewer-partials-playback-controls-icon","withPlayPause":"micromag-viewer-partials-playback-controls-withPlayPause","isCollapsed":"micromag-viewer-partials-playback-controls-isCollapsed","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
+ withSeekHead: !isCollapsed && !seekBarOnly,
1740
+ backgroundColor: color,
1741
+ progressColor: progressColor
1742
+ }), /*#__PURE__*/React__default["default"].createElement("button", {
1743
+ type: "button",
1744
+ className: classNames__default["default"]([styles$1.muteButton, _defineProperty__default["default"]({}, styles$1.isMuted, muted)]),
1745
+ style: {
1746
+ color: color
1747
+ },
1748
+ onClick: muted ? onUnmute : onMute,
1749
+ title: intl.formatMessage({
1750
+ id: "vzg8Es",
1751
+ defaultMessage: [{
1752
+ "type": 0,
1753
+ "value": "Mute"
1754
+ }]
1755
+ }),
1756
+ "aria-label": intl.formatMessage({
1757
+ id: "vzg8Es",
1758
+ defaultMessage: [{
1759
+ "type": 0,
1760
+ "value": "Mute"
1761
+ }]
1762
+ }),
1763
+ tabIndex: controlsVisible ? '0' : '-1'
1764
+ }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
1765
+ className: styles$1.icon,
1766
+ icon: faVolumeUp.faVolumeUp
1521
1767
  })));
1768
+ }
1769
+
1770
+ PlaybackControls.propTypes = propTypes$4;
1771
+ PlaybackControls.defaultProps = defaultProps$4;
1772
+
1773
+ var styles = {"container":"micromag-viewer-partials-web-view-container","opened":"micromag-viewer-partials-web-view-opened"};
1774
+
1775
+ var _excluded$2 = ["opened", "close", "open", "update", "url"];
1776
+ var propTypes$3 = {
1777
+ className: PropTypes__default["default"].string,
1778
+ style: PropTypes__default["default"].object
1779
+ };
1780
+ var defaultProps$3 = {
1781
+ className: null,
1782
+ style: null
1522
1783
  };
1523
1784
 
1524
- HandTap.propTypes = propTypes$3;
1525
- HandTap.defaultProps = defaultProps$3;
1785
+ function WebViewContainer(_ref) {
1786
+ var _ref2;
1787
+
1788
+ var className = _ref.className,
1789
+ style = _ref.style;
1790
+
1791
+ var _useViewerWebView = contexts.useViewerWebView(),
1792
+ opened = _useViewerWebView.opened,
1793
+ close = _useViewerWebView.close;
1794
+ _useViewerWebView.open;
1795
+ _useViewerWebView.update;
1796
+ var _useViewerWebView$url = _useViewerWebView.url,
1797
+ url = _useViewerWebView$url === void 0 ? null : _useViewerWebView$url,
1798
+ webViewProps = _objectWithoutProperties__default["default"](_useViewerWebView, _excluded$2);
1799
+
1800
+ var _useViewerInteraction = contexts.useViewerInteraction(),
1801
+ disableInteraction = _useViewerInteraction.disableInteraction,
1802
+ enableInteraction = _useViewerInteraction.enableInteraction;
1803
+
1804
+ var _useState = React.useState(url),
1805
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1806
+ currentUrl = _useState2[0],
1807
+ setCurrentUrl = _useState2[1];
1808
+
1809
+ React.useEffect(function () {
1810
+ if (url !== null) {
1811
+ setCurrentUrl(url);
1812
+ }
1813
+ }, [url, setCurrentUrl]);
1814
+ React.useEffect(function () {
1815
+ if (opened) {
1816
+ disableInteraction();
1817
+ } else {
1818
+ enableInteraction();
1819
+ }
1820
+
1821
+ return function () {
1822
+ enableInteraction();
1823
+ };
1824
+ }, [opened]);
1825
+ var onTransitionEnd = React.useCallback(function () {
1826
+ if (url === null) {
1827
+ setCurrentUrl(null);
1828
+ }
1829
+ }, [url]);
1830
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1831
+ className: classNames__default["default"]([styles.container, (_ref2 = {}, _defineProperty__default["default"](_ref2, styles.opened, opened), _defineProperty__default["default"](_ref2, className, className !== null), _ref2)]),
1832
+ style: style,
1833
+ onTransitionEnd: onTransitionEnd
1834
+ }, /*#__PURE__*/React__default["default"].createElement(WebView__default["default"], Object.assign({
1835
+ url: url || currentUrl
1836
+ }, webViewProps, {
1837
+ closeable: true,
1838
+ className: styles.webView,
1839
+ onClose: close
1840
+ })));
1841
+ }
1842
+
1843
+ WebViewContainer.propTypes = propTypes$3;
1844
+ WebViewContainer.defaultProps = defaultProps$3;
1526
1845
 
1527
1846
  var propTypes$2 = {
1528
1847
  story: core$1.PropTypes.story,
@@ -1601,7 +1920,7 @@ var defaultProps$2 = {
1601
1920
  };
1602
1921
 
1603
1922
  var Viewer = function Viewer(_ref) {
1604
- var _ref12;
1923
+ var _ref14;
1605
1924
 
1606
1925
  var story = _ref.story,
1607
1926
  basePath = _ref.basePath,
@@ -1613,7 +1932,6 @@ var Viewer = function Viewer(_ref) {
1613
1932
  deviceScreens = _ref.deviceScreens,
1614
1933
  renderContext = _ref.renderContext,
1615
1934
  visitor = _ref.visitor,
1616
- onScreenChange = _ref.onScreenChange,
1617
1935
  tapNextScreenWidthPercent = _ref.tapNextScreenWidthPercent,
1618
1936
  neighborScreensActive = _ref.neighborScreensActive,
1619
1937
  neighborScreensMounted = _ref.neighborScreensMounted,
@@ -1631,6 +1949,7 @@ var Viewer = function Viewer(_ref) {
1631
1949
  onCloseViewer = _ref.onClose,
1632
1950
  onInteraction = _ref.onInteraction,
1633
1951
  onEnd = _ref.onEnd,
1952
+ onScreenChange = _ref.onScreenChange,
1634
1953
  onViewModeChange = _ref.onViewModeChange,
1635
1954
  currentScreenMedia = _ref.currentScreenMedia,
1636
1955
  screensMedias = _ref.screensMedias,
@@ -1678,6 +1997,16 @@ var Viewer = function Viewer(_ref) {
1678
1997
  var isStatic = renderContext === 'static';
1679
1998
  var isCapture = renderContext === 'capture';
1680
1999
  var withoutScreensTransforms = isStatic || isCapture;
2000
+
2001
+ var _usePlaybackContext = contexts.usePlaybackContext(),
2002
+ playing = _usePlaybackContext.playing,
2003
+ _usePlaybackContext$c = _usePlaybackContext.controls,
2004
+ playbackControls = _usePlaybackContext$c === void 0 ? false : _usePlaybackContext$c,
2005
+ _usePlaybackContext$c2 = _usePlaybackContext.controlsVisible,
2006
+ playbackcontrolsVisible = _usePlaybackContext$c2 === void 0 ? false : _usePlaybackContext$c2,
2007
+ _usePlaybackContext$m = _usePlaybackContext.media,
2008
+ playbackMedia = _usePlaybackContext$m === void 0 ? null : _usePlaybackContext$m;
2009
+
1681
2010
  var trackScreenView = hooks.useTrackScreenView();
1682
2011
  var contentRef = React.useRef(null); // Get screen size
1683
2012
 
@@ -1708,10 +2037,11 @@ var Viewer = function Viewer(_ref) {
1708
2037
  React.useEffect(function () {
1709
2038
  if (ready && onViewModeChange !== null) {
1710
2039
  onViewModeChange({
1711
- landscape: landscape
2040
+ landscape: landscape,
2041
+ menuOverScreen: menuOverScreen
1712
2042
  });
1713
2043
  }
1714
- }, [ready, landscape, onViewModeChange]);
2044
+ }, [ready, landscape, menuOverScreen, onViewModeChange]);
1715
2045
  var screensMediasRef = React.useRef([]); // Screen index
1716
2046
 
1717
2047
  var screenIndex = React.useMemo(function () {
@@ -1721,7 +2051,7 @@ var Viewer = function Viewer(_ref) {
1721
2051
  }, [screenId, screens]);
1722
2052
 
1723
2053
  if (currentScreenMedia !== null) {
1724
- currentScreenMedia.current = screensMediasRef.current[screenIndex];
2054
+ currentScreenMedia.current = screensMediasRef.current[screenIndex] || null;
1725
2055
  }
1726
2056
 
1727
2057
  if (screensMedias !== null) {
@@ -1752,12 +2082,10 @@ var Viewer = function Viewer(_ref) {
1752
2082
 
1753
2083
  var currentScreenRef = React.useRef(null);
1754
2084
  var gotoPreviousScreen = React.useCallback(function () {
1755
- changeIndex(Math.max(0, screenIndex - 1));
1756
- currentScreenRef.current.focus();
2085
+ changeIndex(Math.max(0, screenIndex - 1)); // currentScreenRef.current.focus();
1757
2086
  }, [changeIndex]);
1758
2087
  var gotoNextScreen = React.useCallback(function () {
1759
- changeIndex(Math.min(screens.length - 1, screenIndex + 1));
1760
- currentScreenRef.current.focus();
2088
+ changeIndex(Math.min(screens.length - 1, screenIndex + 1)); // currentScreenRef.current.focus();
1761
2089
  }, [changeIndex]);
1762
2090
  var screensCount = screens.length;
1763
2091
 
@@ -1775,45 +2103,107 @@ var Viewer = function Viewer(_ref) {
1775
2103
  setHasInteracted(true);
1776
2104
  }
1777
2105
  }, [onInteraction, hasInteracted, setHasInteracted]);
2106
+ var onScreenNavigate = React.useCallback(function (_ref6) {
2107
+ var index = _ref6.index,
2108
+ newIndex = _ref6.newIndex,
2109
+ end = _ref6.end,
2110
+ direction = _ref6.direction;
2111
+
2112
+ if (end && onEnd !== null) {
2113
+ onEnd();
2114
+ }
2115
+
2116
+ changeIndex(newIndex);
2117
+ eventsManager.emit('navigate', {
2118
+ newIndex: newIndex,
2119
+ index: index,
2120
+ direction: direction,
2121
+ end: end
2122
+ });
2123
+
2124
+ if (end) {
2125
+ eventsManager.emit('navigate_end');
2126
+ } else {
2127
+ eventsManager.emit("navigate_".concat(direction), newIndex);
2128
+ }
2129
+ }, [onEnd, changeIndex]);
1778
2130
 
1779
2131
  var _useScreenInteraction = useScreenInteraction({
1780
2132
  screens: screens,
1781
2133
  screenIndex: screenIndex,
1782
2134
  screenWidth: screenContainerWidth,
1783
- isView: isView,
2135
+ disableCurrentScreenNavigation: !isView,
1784
2136
  clickOnSiblings: landscape && withLandscapeSiblingsScreens,
1785
2137
  nextScreenWidthPercent: tapNextScreenWidthPercent,
1786
- eventsManager: eventsManager,
1787
- onClick: onInteractionPrivate,
1788
- onEnd: onEnd,
1789
- onChangeScreen: changeIndex
2138
+ onInteract: onInteractionPrivate,
2139
+ onNavigate: onScreenNavigate
1790
2140
  }),
1791
- onScreenClick = _useScreenInteraction.onClick,
2141
+ interactWithScreen = _useScreenInteraction.interact,
1792
2142
  currentScreenInteractionEnabled = _useScreenInteraction.currentScreenInteractionEnabled,
1793
2143
  enableInteraction = _useScreenInteraction.enableInteraction,
1794
- disableInteraction = _useScreenInteraction.disableInteraction;
1795
-
1796
- var onClickContent = React.useCallback(function (e) {
1797
- if (withLandscapeSiblingsScreens || e.target !== contentRef.current) {
1798
- return;
2144
+ disableInteraction = _useScreenInteraction.disableInteraction; // Handle tap on screens
2145
+
2146
+
2147
+ var onDragScreen = React.useCallback(function (_ref7) {
2148
+ var _ref7$args = _slicedToArray__default["default"](_ref7.args, 1),
2149
+ tapScreenIndex = _ref7$args[0],
2150
+ event = _ref7.event,
2151
+ target = _ref7.target,
2152
+ currentTarget = _ref7.currentTarget,
2153
+ tap = _ref7.tap,
2154
+ _ref7$xy = _slicedToArray__default["default"](_ref7.xy, 2),
2155
+ x = _ref7$xy[0],
2156
+ y = _ref7$xy[1];
2157
+
2158
+ if (tap) {
2159
+ interactWithScreen({
2160
+ event: event,
2161
+ target: target,
2162
+ currentTarget: currentTarget,
2163
+ index: tapScreenIndex,
2164
+ x: x,
2165
+ y: y
2166
+ });
1799
2167
  }
2168
+ }, [interactWithScreen]);
2169
+ var dragScreenBind = react.useDrag(onDragScreen, {
2170
+ filterTaps: true
2171
+ }); // Handles tap when landscape (space around current screen)
1800
2172
 
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);
2173
+ var onDragContent = React.useCallback(function (_ref8) {
2174
+ var tap = _ref8.tap,
2175
+ target = _ref8.target,
2176
+ currentTarget = _ref8.currentTarget,
2177
+ _ref8$xy = _slicedToArray__default["default"](_ref8.xy, 1),
2178
+ x = _ref8$xy[0];
1810
2179
 
1811
- if (eventsManager !== null) {
1812
- eventsManager.emit('change_screen', nextIndex);
2180
+ if (!landscape || withLandscapeSiblingsScreens || target !== contentRef.current) {
2181
+ return;
1813
2182
  }
1814
2183
 
1815
- changeIndex(nextIndex);
1816
- }, [withLandscapeSiblingsScreens, screenIndex, tapNextScreenWidthPercent, changeIndex, eventsManager, screensCount]); // swipe menu open
2184
+ if (tap) {
2185
+ var _currentTarget$getBou = currentTarget.getBoundingClientRect(),
2186
+ _currentTarget$getBou2 = _currentTarget$getBou.left,
2187
+ contentX = _currentTarget$getBou2 === void 0 ? 0 : _currentTarget$getBou2,
2188
+ _currentTarget$getBou3 = _currentTarget$getBou.width,
2189
+ contentWidth = _currentTarget$getBou3 === void 0 ? 0 : _currentTarget$getBou3;
2190
+
2191
+ var hasTappedLeft = x - contentX < contentWidth * 0.5;
2192
+ var nextIndex = hasTappedLeft ? Math.max(0, screenIndex - 1) : Math.min(screensCount - 1, screenIndex + 1);
2193
+ onScreenNavigate({
2194
+ index: screenIndex,
2195
+ newIndex: nextIndex
2196
+ });
2197
+ }
2198
+ }, [screenIndex, screensCount, landscape, withLandscapeSiblingsScreens]);
2199
+ var dragContentBind = react.useDrag(onDragContent, {
2200
+ filterTaps: true
2201
+ });
2202
+ var onScreenKeyUp = React.useCallback(function (e, i) {
2203
+ if (e.key === 'Enter' && withLandscapeSiblingsScreens && landscape && i !== screenIndex) {
2204
+ changeIndex(i);
2205
+ }
2206
+ }, [withLandscapeSiblingsScreens, changeIndex, landscape, screenIndex]); // swipe menu open
1817
2207
 
1818
2208
  var menuVisible = screensCount === 0 || currentScreenInteractionEnabled;
1819
2209
 
@@ -1832,11 +2222,11 @@ var Viewer = function Viewer(_ref) {
1832
2222
  onInteractionPrivate();
1833
2223
  setMenuOpened(true);
1834
2224
  }, [changeIndex, onInteractionPrivate, setMenuOpened]);
1835
- var onClickMenuItem = React.useCallback(function (_ref6) {
1836
- var itemScreenId = _ref6.screenId;
2225
+ var onClickMenuItem = React.useCallback(function (_ref9) {
2226
+ var itemScreenId = _ref9.screenId;
1837
2227
  onInteractionPrivate();
1838
- var index = screens.findIndex(function (_ref7) {
1839
- var id = _ref7.id;
2228
+ var index = screens.findIndex(function (_ref10) {
2229
+ var id = _ref10.id;
1840
2230
  return id === itemScreenId;
1841
2231
  });
1842
2232
  changeIndex(index);
@@ -1889,32 +2279,34 @@ var Viewer = function Viewer(_ref) {
1889
2279
  disabled: renderContext !== 'view'
1890
2280
  });
1891
2281
 
1892
- var _ref8 = currentScreen || {},
1893
- screenParameters = _ref8.parameters;
2282
+ var _ref11 = currentScreen || {},
2283
+ screenParameters = _ref11.parameters;
1894
2284
 
1895
- var _ref9 = screenParameters || {},
1896
- screenMetadata = _ref9.metadata;
2285
+ var _ref12 = screenParameters || {},
2286
+ screenMetadata = _ref12.metadata;
1897
2287
 
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;
2288
+ var _ref13 = screenMetadata || {},
2289
+ _ref13$title = _ref13.title,
2290
+ screenTitle = _ref13$title === void 0 ? null : _ref13$title,
2291
+ _ref13$description = _ref13.description,
2292
+ screenDescription = _ref13$description === void 0 ? null : _ref13$description;
1903
2293
 
1904
2294
  var finalTitle = screenTitle !== null ? screenTitle : title;
1905
2295
  var finalMetadata = React.useMemo(function () {
1906
2296
  return screenDescription !== null ? _objectSpread__default["default"](_objectSpread__default["default"]({}, metadata), {}, {
1907
2297
  description: screenDescription
1908
2298
  }) : metadata;
1909
- }, [metadata]);
2299
+ }, [metadata]); // Get element height
1910
2300
 
1911
- var _useResizeObserver = hooks.useResizeObserver(),
1912
- menuDotsContainerRef = _useResizeObserver.ref,
1913
- menuDotsContainerRect = _useResizeObserver.entry.contentRect;
2301
+ var _useDimensionObserver = hooks.useDimensionObserver(),
2302
+ menuDotsContainerRef = _useDimensionObserver.ref,
2303
+ _useDimensionObserver2 = _useDimensionObserver.height,
2304
+ menuDotsContainerHeight = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2;
1914
2305
 
1915
- var _ref11 = menuDotsContainerRect || {},
1916
- _ref11$height = _ref11.height,
1917
- menuDotsContainerHeight = _ref11$height === void 0 ? 0 : _ref11$height;
2306
+ var _useDimensionObserver3 = hooks.useDimensionObserver(),
2307
+ playbackControlsContainerRef = _useDimensionObserver3.ref,
2308
+ _useDimensionObserver4 = _useDimensionObserver3.height,
2309
+ playbackControlsContainerHeight = _useDimensionObserver4 === void 0 ? 0 : _useDimensionObserver4;
1918
2310
 
1919
2311
  var _useMemo = React.useMemo(function () {
1920
2312
  return neighborScreensMounted !== null ? {
@@ -1931,14 +2323,17 @@ var Viewer = function Viewer(_ref) {
1931
2323
  var mountedScreens = React.useMemo(function () {
1932
2324
  return neighborScreensMounted != null ? screens.slice(mountedScreenStartIndex, mountedScreenEndIndex) : screens;
1933
2325
  }, [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, {
2326
+ return /*#__PURE__*/React__default["default"].createElement(contexts.VisitorProvider, {
1937
2327
  visitor: visitor
2328
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.ScreenSizeProvider, {
2329
+ size: screenSize
1938
2330
  }, /*#__PURE__*/React__default["default"].createElement(contexts.ViewerProvider, {
1939
2331
  events: eventsManager,
1940
2332
  menuVisible: menuVisible,
1941
- menuSize: menuDotsContainerHeight,
2333
+ menuOverScreen: menuOverScreen,
2334
+ topHeight: menuOverScreen && currentScreenInteractionEnabled ? menuDotsContainerHeight / screenScale : 0,
2335
+ bottomHeight: playbackControls && (playbackcontrolsVisible || !playing) && currentScreenInteractionEnabled ? playbackControlsContainerHeight / screenScale : 0,
2336
+ bottomSidesWidth: (playbackcontrolsVisible || !playing || playbackMedia !== null) && currentScreenInteractionEnabled ? 60 / screenScale : 0,
1942
2337
  gotoPreviousScreen: gotoPreviousScreen,
1943
2338
  gotoNextScreen: gotoNextScreen,
1944
2339
  disableInteraction: disableInteraction,
@@ -1949,9 +2344,9 @@ var Viewer = function Viewer(_ref) {
1949
2344
  }, overscrollStyle) : /*#__PURE__*/React__default["default"].createElement(reactHelmet.Helmet, null, overscrollStyle), /*#__PURE__*/React__default["default"].createElement(components.FontFaces, {
1950
2345
  fonts: finalFonts
1951
2346
  }), /*#__PURE__*/React__default["default"].createElement("div", {
1952
- className: classNames__default["default"]([styles$8.container, screenSize.screens.map(function (screenName) {
2347
+ className: classNames__default["default"]([styles$5.container, screenSize.screens.map(function (screenName) {
1953
2348
  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)]),
2349
+ }), (_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
2350
  ref: containerRef,
1956
2351
  onContextMenu: onContextMenu
1957
2352
  }, !withoutMenu ? /*#__PURE__*/React__default["default"].createElement(ViewerMenu, {
@@ -1975,14 +2370,11 @@ var Viewer = function Viewer(_ref) {
1975
2370
  withDotItemClick: screenContainerWidth > 400,
1976
2371
  withoutScreensMenu: withoutScreensMenu,
1977
2372
  refDots: menuDotsContainerRef
1978
- }) : null, ready || withoutScreensTransforms ? /*#__PURE__*/React__default["default"].createElement("div", {
2373
+ }) : null, ready || withoutScreensTransforms ? /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
1979
2374
  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;
2375
+ className: styles$5.content
2376
+ }, dragContentBind()), mountedScreens.map(function (scr, mountedIndex) {
2377
+ var _ref15;
1986
2378
 
1987
2379
  var i = mountedScreenStartIndex + mountedIndex;
1988
2380
  var current = i === parseInt(screenIndex, 10);
@@ -1994,12 +2386,8 @@ var Viewer = function Viewer(_ref) {
1994
2386
  index: i,
1995
2387
  current: current,
1996
2388
  active: active,
1997
- onPrevious: gotoPreviousScreen,
1998
- onNext: gotoNextScreen,
1999
- enableInteraction: enableInteraction,
2000
- disableInteraction: disableInteraction,
2001
- getMediaRef: function getMediaRef(mediaRef) {
2002
- screensMediasRef.current[i] = mediaRef;
2389
+ mediaRef: function mediaRef(ref) {
2390
+ screensMediasRef.current[i] = ref;
2003
2391
  }
2004
2392
  });
2005
2393
  var key = "screen-viewer-".concat(scr.id || '', "-").concat(i + 1);
@@ -2013,7 +2401,7 @@ var Viewer = function Viewer(_ref) {
2013
2401
 
2014
2402
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
2015
2403
  key: key
2016
- }, /*#__PURE__*/React__default["default"].createElement("div", {
2404
+ }, /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
2017
2405
  ref: current ? currentScreenRef : null,
2018
2406
  style: {
2019
2407
  // width: landscape ? screenWidth : null,
@@ -2022,7 +2410,7 @@ var Viewer = function Viewer(_ref) {
2022
2410
  height: screenContainerHeight,
2023
2411
  transform: !withoutScreensTransforms ? screenTransform : null
2024
2412
  },
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)]),
2413
+ 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
2414
  tabIndex: active ? '0' : '-1'
2027
2415
  /* eslint-disable-line */
2028
2416
  ,
@@ -2040,26 +2428,10 @@ var Viewer = function Viewer(_ref) {
2040
2428
  index: i + 1
2041
2429
  }),
2042
2430
  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,
2431
+ return onScreenKeyUp(e, i);
2432
+ }
2433
+ }, dragScreenBind(i)), /*#__PURE__*/React__default["default"].createElement("div", {
2434
+ className: styles$5.scaler,
2063
2435
  style: {
2064
2436
  width: screenWidth,
2065
2437
  height: screenHeight,
@@ -2068,10 +2440,10 @@ var Viewer = function Viewer(_ref) {
2068
2440
  }
2069
2441
  }, current && screenIndex > 0 ? /*#__PURE__*/React__default["default"].createElement("button", {
2070
2442
  type: "button",
2071
- className: classNames__default["default"]([styles$8.navButton, styles$8.previous]),
2443
+ className: classNames__default["default"]([styles$5.navButton, styles$5.previous]),
2072
2444
  onClick: gotoPreviousScreen
2073
2445
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
2074
- className: styles$8.arrow,
2446
+ className: styles$5.arrow,
2075
2447
  icon: faArrowLeft.faArrowLeft
2076
2448
  }), /*#__PURE__*/React__default["default"].createElement("span", {
2077
2449
  className: "sr-only"
@@ -2083,10 +2455,10 @@ var Viewer = function Viewer(_ref) {
2083
2455
  }]
2084
2456
  }))) : null, viewerScreen, current && screenIndex < screens.length - 1 ? /*#__PURE__*/React__default["default"].createElement("button", {
2085
2457
  type: "button",
2086
- className: classNames__default["default"]([styles$8.navButton, styles$8.next]),
2458
+ className: classNames__default["default"]([styles$5.navButton, styles$5.next]),
2087
2459
  onClick: gotoNextScreen
2088
2460
  }, /*#__PURE__*/React__default["default"].createElement(reactFontawesome.FontAwesomeIcon, {
2089
- className: styles$8.arrow,
2461
+ className: styles$5.arrow,
2090
2462
  icon: faArrowRight.faArrowRight
2091
2463
  }), /*#__PURE__*/React__default["default"].createElement("span", {
2092
2464
  className: "sr-only"
@@ -2105,9 +2477,24 @@ var Viewer = function Viewer(_ref) {
2105
2477
  "value": "Go to next screen"
2106
2478
  }]
2107
2479
  }))) : null), withNavigationHint && !withLandscapeSiblingsScreens && current && screenIndex === 0 ? /*#__PURE__*/React__default["default"].createElement(HandTap, {
2108
- className: styles$8.handTap
2480
+ className: styles$5.handTap
2109
2481
  }) : null));
2110
- })) : null))));
2482
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
2483
+ className: classNames__default["default"]([styles$5.playbackControls, _defineProperty__default["default"]({}, styles$5.isCollapsed, playbackControls && !playbackcontrolsVisible && playing)]),
2484
+ ref: playbackControlsContainerRef
2485
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2486
+ className: styles$5.playbackControlsContainer,
2487
+ style: {
2488
+ width: screenContainerWidth
2489
+ }
2490
+ }, /*#__PURE__*/React__default["default"].createElement(PlaybackControls, {
2491
+ className: styles$5.controls
2492
+ })))) : null, /*#__PURE__*/React__default["default"].createElement(WebViewContainer, {
2493
+ className: styles$5.webView,
2494
+ style: {
2495
+ maxWidth: Math.max(screenContainerWidth, 600)
2496
+ }
2497
+ })))));
2111
2498
  };
2112
2499
 
2113
2500
  Viewer.propTypes = propTypes$2;
@@ -2183,6 +2570,13 @@ var ViewerRoutes = function ViewerRoutes(_ref) {
2183
2570
  ViewerRoutes.propTypes = propTypes$1;
2184
2571
  ViewerRoutes.defaultProps = defaultProps$1;
2185
2572
 
2573
+ var home = "/";
2574
+ var screen = "/:screen";
2575
+ var defaultRoutes = {
2576
+ home: home,
2577
+ screen: screen
2578
+ };
2579
+
2186
2580
  var _excluded = ["story", "screenComponents", "memoryRouter", "basePath", "routes", "withoutRouter", "googleApiKey", "trackingVariables", "locale", "locales", "translations", "pathWithIndex"];
2187
2581
  var propTypes = {
2188
2582
  story: core$1.PropTypes.story,
@@ -2274,7 +2668,7 @@ var ViewerContainer = function ViewerContainer(_ref) {
2274
2668
  }, /*#__PURE__*/React__default["default"].createElement(screens.ScreensProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.ComponentsProvider, {
2275
2669
  namespace: contexts.SCREENS_NAMESPACE,
2276
2670
  components: screenComponents || {}
2277
- }, /*#__PURE__*/React__default["default"].createElement(contexts.UserInteractionProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.TrackingProvider, {
2671
+ }, /*#__PURE__*/React__default["default"].createElement(contexts.UserInteractionProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.PlaybackProvider, null, /*#__PURE__*/React__default["default"].createElement(contexts.TrackingProvider, {
2278
2672
  variables: finalTrackingVariables
2279
2673
  }, withoutRouter ? /*#__PURE__*/React__default["default"].createElement(Viewer, Object.assign({
2280
2674
  story: story,
@@ -2283,7 +2677,7 @@ var ViewerContainer = function ViewerContainer(_ref) {
2283
2677
  story: story,
2284
2678
  basePath: basePath,
2285
2679
  pathWithIndex: pathWithIndex
2286
- }, otherProps))))))))));
2680
+ }, otherProps)))))))))));
2287
2681
  return withoutRouter ? content : /*#__PURE__*/React__default["default"].createElement(Router, {
2288
2682
  basename: !memoryRouter ? basePath : null
2289
2683
  }, /*#__PURE__*/React__default["default"].createElement(contexts.RoutesProvider, {