@micromag/viewer 0.3.181 → 0.3.182

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/es/index.js CHANGED
@@ -3,7 +3,7 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
3
3
  import PropTypes from 'prop-types';
4
4
  import React, { useEffect, useState, useCallback, useMemo, useRef } from 'react';
5
5
  import { Switch, Route, MemoryRouter } from 'react-router';
6
- import { BrowserRouter } from 'react-router-dom';
6
+ import { Link, BrowserRouter } from 'react-router-dom';
7
7
  import { PropTypes as PropTypes$1 } from '@micromag/core';
8
8
  import { usePlaybackContext, useViewerWebView, useViewerInteraction, VisitorProvider, ScreenSizeProvider, ViewerProvider, useRoutes, useRoutePush, GoogleKeysProvider, GoogleMapsClientProvider, FieldsProvider, ComponentsProvider, SCREENS_NAMESPACE, UserInteractionProvider, PlaybackProvider, TrackingProvider, RoutesProvider } from '@micromag/core/contexts';
9
9
  import fieldsManager from '@micromag/fields/manager';
@@ -15,9 +15,9 @@ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
15
15
  import classNames from 'classnames';
16
16
  import { Helmet } from 'react-helmet';
17
17
  import EventEmitter from 'wolfy87-eventemitter';
18
- import { IconButton, ScreenPreview, SlidingButtons, CloseButton, Screen, Button, Meta, FontFaces } from '@micromag/core/components';
18
+ import { Label, ScreenPreview, Screen, Button as Button$1, Meta, FontFaces } from '@micromag/core/components';
19
19
  import { useDimensionObserver, useTrackEvent, useDragProgress, useMediaProgress, useParsedStory, useLoadedFonts, useTrackScreenView, useScreenSizeFromElement, useFullscreen } from '@micromag/core/hooks';
20
- import { getStyleFromColor, getColorAsString, getDeviceScreens } from '@micromag/core/utils';
20
+ import { getStyleFromColor, easings, getColorAsString, getDeviceScreens } from '@micromag/core/utils';
21
21
  import { useIntl, FormattedMessage } from 'react-intl';
22
22
  import { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';
23
23
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -214,22 +214,230 @@ function useScreenInteraction() {
214
214
  };
215
215
  }
216
216
 
217
- var _excluded$5 = ["className", "onClick", "theme"];
218
- var propTypes$k = {
217
+ var styles$g = {"container":"micromag-viewer-buttons-button-container","asLink":"micromag-viewer-buttons-button-asLink","icon":"micromag-viewer-buttons-button-icon","label":"micromag-viewer-buttons-button-label","withIcon":"micromag-viewer-buttons-button-withIcon","right":"micromag-viewer-buttons-button-right","icon-right":"micromag-viewer-buttons-button-icon-right","withIconColumns":"micromag-viewer-buttons-button-withIconColumns","linkDisabled":"micromag-viewer-buttons-button-linkDisabled"};
218
+
219
+ var _excluded$8 = ["type", "theme", "size", "href", "external", "direct", "target", "label", "children", "focusable", "active", "icon", "iconPosition", "disabled", "loading", "disableOnLoading", "withoutTheme", "asLink", "onClick", "className", "iconClassName", "labelClassName", "refButton"];
220
+ var propTypes$n = {
221
+ type: PropTypes.string,
222
+ theme: PropTypes$1.buttonTheme,
223
+ size: PropTypes$1.buttonSize,
224
+ href: PropTypes.string,
225
+ external: PropTypes.bool,
226
+ direct: PropTypes.bool,
227
+ target: PropTypes.string,
228
+ label: PropTypes$1.label,
229
+ children: PropTypes$1.label,
230
+ focusable: PropTypes.bool,
231
+ active: PropTypes.bool,
232
+ icon: PropTypes.node,
233
+ iconPosition: PropTypes.oneOf(['left', 'right', 'inline']),
234
+ disabled: PropTypes.bool,
235
+ loading: PropTypes.bool,
236
+ disableOnLoading: PropTypes.bool,
237
+ withoutTheme: PropTypes.bool,
238
+ asLink: PropTypes.bool,
219
239
  className: PropTypes.string,
240
+ iconClassName: PropTypes.string,
241
+ labelClassName: PropTypes.string,
220
242
  onClick: PropTypes.func,
221
- theme: PropTypes$1.viewerTheme
243
+ refButton: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
244
+ current: PropTypes.any // eslint-disable-line
245
+
246
+ })])
222
247
  };
223
- var defaultProps$k = {
248
+ var defaultProps$n = {
249
+ type: 'button',
250
+ theme: null,
251
+ size: null,
252
+ href: null,
253
+ external: false,
254
+ direct: false,
255
+ target: '_blank',
256
+ label: null,
257
+ children: null,
258
+ focusable: true,
259
+ active: false,
260
+ icon: null,
261
+ iconPosition: 'inline',
262
+ disabled: false,
263
+ loading: false,
264
+ disableOnLoading: true,
265
+ withoutTheme: false,
266
+ asLink: false,
224
267
  className: null,
268
+ iconClassName: null,
269
+ labelClassName: null,
225
270
  onClick: null,
226
- theme: null
271
+ refButton: null
272
+ };
273
+
274
+ var Button = function Button(_ref) {
275
+ var _ref2;
276
+
277
+ var type = _ref.type,
278
+ theme = _ref.theme;
279
+ _ref.size;
280
+ var href = _ref.href,
281
+ external = _ref.external,
282
+ direct = _ref.direct,
283
+ target = _ref.target,
284
+ label = _ref.label,
285
+ children = _ref.children,
286
+ focusable = _ref.focusable;
287
+ _ref.active;
288
+ var icon = _ref.icon,
289
+ iconPosition = _ref.iconPosition,
290
+ disabled = _ref.disabled,
291
+ loading = _ref.loading,
292
+ disableOnLoading = _ref.disableOnLoading;
293
+ _ref.withoutTheme;
294
+ var asLink = _ref.asLink,
295
+ onClick = _ref.onClick,
296
+ className = _ref.className,
297
+ iconClassName = _ref.iconClassName,
298
+ labelClassName = _ref.labelClassName,
299
+ refButton = _ref.refButton,
300
+ props = _objectWithoutProperties(_ref, _excluded$8);
301
+
302
+ var finalLabel = label || children;
303
+ var text = finalLabel !== null ? /*#__PURE__*/React.createElement(Label, null, finalLabel) : null;
304
+ var hasChildren = label !== null && children !== null;
305
+ var hasIcon = icon !== null;
306
+ var hasInlineIcon = hasIcon && (iconPosition === 'inline' || text === null);
307
+ var hasIconColumns = hasIcon && !hasInlineIcon;
308
+ var buttonClassNames = classNames([styles$g.container, styles$g["icon-".concat(iconPosition)], (_ref2 = {}, _defineProperty(_ref2, styles$g.withIcon, hasIcon), _defineProperty(_ref2, styles$g.withIconColumns, hasIconColumns), _defineProperty(_ref2, styles$g.withText, text !== null), _defineProperty(_ref2, styles$g.isLink, href !== null), _defineProperty(_ref2, styles$g.asLink, asLink), _defineProperty(_ref2, styles$g.isDisabled, disabled), _defineProperty(_ref2, styles$g.isLoading, loading), _defineProperty(_ref2, className, className !== null), _ref2)]);
309
+
310
+ var _ref3 = theme || {},
311
+ _ref3$colors = _ref3.colors,
312
+ colors = _ref3$colors === void 0 ? null : _ref3$colors;
313
+
314
+ var _ref4 = colors || {},
315
+ _ref4$primary = _ref4.primary,
316
+ brandPrimaryColor = _ref4$primary === void 0 ? null : _ref4$primary;
317
+
318
+ var primaryColor = getStyleFromColor(brandPrimaryColor, 'color');
319
+
320
+ var buttonStyles = _objectSpread({}, primaryColor);
321
+
322
+ var content = /*#__PURE__*/React.createElement(React.Fragment, null, hasInlineIcon ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
323
+ className: classNames([styles$g.icon, _defineProperty({}, iconClassName, iconClassName !== null)])
324
+ }, icon), text !== null ? /*#__PURE__*/React.createElement("span", {
325
+ className: classNames([styles$g.label, _defineProperty({}, labelClassName, labelClassName !== null)])
326
+ }, text) : null) : null, hasIconColumns ? /*#__PURE__*/React.createElement(React.Fragment, null, iconPosition === 'left' ? /*#__PURE__*/React.createElement("span", {
327
+ className: classNames([styles$g.icon, styles$g.left, _defineProperty({}, iconClassName, iconClassName !== null && iconPosition === 'left')])
328
+ }, icon) : null, /*#__PURE__*/React.createElement("span", {
329
+ className: classNames([styles$g.center, styles$g.label, _defineProperty({}, labelClassName, labelClassName !== null)])
330
+ }, text), iconPosition === 'right' ? /*#__PURE__*/React.createElement("span", {
331
+ className: classNames([styles$g.icon, styles$g.right, _defineProperty({}, iconClassName, iconClassName !== null && iconPosition === 'right')])
332
+ }, icon) : null, hasChildren ? children : null) : null, !hasIcon ? text : null, hasChildren ? children : null);
333
+
334
+ if (href !== null) {
335
+ var linkClassNames = classNames([buttonClassNames, _defineProperty({
336
+ disabled: disabled
337
+ }, styles$g.linkDisabled, disabled)]);
338
+ return external || direct ? /*#__PURE__*/React.createElement("a", Object.assign({}, props, {
339
+ href: disabled ? null : href,
340
+ className: linkClassNames,
341
+ style: buttonStyles,
342
+ onClick: onClick,
343
+ target: external ? target : null,
344
+ ref: refButton,
345
+ tabIndex: focusable ? '' : '-1'
346
+ }), content) : /*#__PURE__*/React.createElement(Link, Object.assign({}, props, {
347
+ to: href,
348
+ className: linkClassNames,
349
+ style: buttonStyles,
350
+ onClick: onClick,
351
+ ref: refButton,
352
+ tabIndex: focusable ? '' : '-1'
353
+ }), content);
354
+ }
355
+
356
+ return /*#__PURE__*/React.createElement("button", Object.assign({}, props, {
357
+ type: type,
358
+ className: buttonClassNames,
359
+ style: buttonStyles,
360
+ onClick: onClick,
361
+ disabled: disabled || disableOnLoading && loading,
362
+ ref: refButton,
363
+ tabIndex: focusable ? '0' : '-1'
364
+ }), content);
365
+ };
366
+
367
+ Button.propTypes = propTypes$n;
368
+ Button.defaultProps = defaultProps$n;
369
+
370
+ var styles$f = {"container":"micromag-viewer-buttons-icon-button-container","icon":"micromag-viewer-buttons-icon-button-icon","label":"micromag-viewer-buttons-icon-button-label"};
371
+
372
+ var _excluded$7 = ["className"];
373
+ var propTypes$m = {
374
+ className: PropTypes.string
375
+ };
376
+ var defaultProps$m = {
377
+ className: null
378
+ };
379
+
380
+ var IconButton = function IconButton(_ref) {
381
+ var className = _ref.className,
382
+ props = _objectWithoutProperties(_ref, _excluded$7);
383
+
384
+ return /*#__PURE__*/React.createElement(Button, Object.assign({
385
+ className: classNames([styles$f.container, _defineProperty({}, className, className !== null)]),
386
+ labelClassName: styles$f.label,
387
+ iconClassName: styles$f.icon
388
+ }, props));
389
+ };
390
+
391
+ IconButton.propTypes = propTypes$m;
392
+ IconButton.defaultProps = defaultProps$m;
393
+
394
+ var _excluded$6 = ["className"];
395
+ var propTypes$l = {
396
+ className: PropTypes.string
397
+ };
398
+ var defaultProps$l = {
399
+ className: null
400
+ };
401
+
402
+ var CloseButton = function CloseButton(_ref) {
403
+ var className = _ref.className,
404
+ props = _objectWithoutProperties(_ref, _excluded$6);
405
+
406
+ var intl = useIntl();
407
+ return /*#__PURE__*/React.createElement(IconButton, Object.assign({
408
+ className: classNames([_defineProperty({}, className, className !== null)]),
409
+ label: intl.formatMessage({
410
+ id: "dj/p/q",
411
+ defaultMessage: [{
412
+ "type": 0,
413
+ "value": "Close"
414
+ }]
415
+ }),
416
+ icon: /*#__PURE__*/React.createElement("svg", {
417
+ xmlns: "http://www.w3.org/2000/svg",
418
+ width: "10",
419
+ height: "16",
420
+ viewBox: "0 0 10 16",
421
+ fill: "currentColor"
422
+ }, /*#__PURE__*/React.createElement("polygon", {
423
+ points: "9.95 4.11 8.89 3.05 5 6.94 1.11 3.05 0.05 4.11 3.94 8 0.05 11.89 1.11 12.95 5 9.06 8.89 12.95 9.95 11.89 6.06 8 9.95 4.11"
424
+ }))
425
+ }, props));
426
+ };
427
+
428
+ CloseButton.propTypes = propTypes$l;
429
+ CloseButton.defaultProps = defaultProps$l;
430
+
431
+ var _excluded$5 = ["className"];
432
+ var propTypes$k = {
433
+ className: PropTypes.string
434
+ };
435
+ var defaultProps$k = {
436
+ className: null
227
437
  };
228
438
 
229
439
  var MenuButton = function MenuButton(_ref) {
230
440
  var className = _ref.className,
231
- onClick = _ref.onClick,
232
- theme = _ref.theme,
233
441
  props = _objectWithoutProperties(_ref, _excluded$5);
234
442
 
235
443
  var intl = useIntl();
@@ -243,39 +451,32 @@ var MenuButton = function MenuButton(_ref) {
243
451
  }]
244
452
  }),
245
453
  iconPosition: "right",
246
- icon: /*#__PURE__*/React.createElement("svg", Object.assign({
454
+ icon: /*#__PURE__*/React.createElement("svg", {
247
455
  xmlns: "http://www.w3.org/2000/svg",
248
456
  width: "10",
249
457
  height: "16",
250
458
  viewBox: "0 0 10 16",
251
459
  fill: "currentColor"
252
- }, theme), /*#__PURE__*/React.createElement("rect", {
460
+ }, /*#__PURE__*/React.createElement("rect", {
253
461
  width: "10",
254
462
  height: "16"
255
- })),
256
- onClick: onClick
463
+ }))
257
464
  }, props));
258
465
  };
259
466
 
260
467
  MenuButton.propTypes = propTypes$k;
261
468
  MenuButton.defaultProps = defaultProps$k;
262
469
 
263
- var _excluded$4 = ["className", "onClick", "theme"];
470
+ var _excluded$4 = ["className"];
264
471
  var propTypes$j = {
265
- className: PropTypes.string,
266
- onClick: PropTypes.func,
267
- theme: PropTypes$1.viewerTheme
472
+ className: PropTypes.string
268
473
  };
269
474
  var defaultProps$j = {
270
- className: null,
271
- onClick: null,
272
- theme: null
475
+ className: null
273
476
  };
274
477
 
275
478
  var ShareButton = function ShareButton(_ref) {
276
479
  var className = _ref.className,
277
- onClick = _ref.onClick,
278
- theme = _ref.theme,
279
480
  props = _objectWithoutProperties(_ref, _excluded$4);
280
481
 
281
482
  var intl = useIntl();
@@ -289,32 +490,76 @@ var ShareButton = function ShareButton(_ref) {
289
490
  }]
290
491
  }),
291
492
  iconPosition: "left",
292
- icon: /*#__PURE__*/React.createElement("svg", Object.assign({
493
+ icon: /*#__PURE__*/React.createElement("svg", {
293
494
  xmlns: "http://www.w3.org/2000/svg",
294
495
  width: "10",
295
496
  height: "16",
296
497
  viewBox: "0 0 10 16",
297
498
  fill: "currentColor"
298
- }, theme), /*#__PURE__*/React.createElement("polygon", {
499
+ }, /*#__PURE__*/React.createElement("polygon", {
299
500
  points: "8.5 14.5 1.5 14.5 1.5 8 0 8 0 16 10 16 10 8 8.5 8 8.5 14.5"
300
501
  }), /*#__PURE__*/React.createElement("polygon", {
301
502
  points: "9.62 4.62 5 0 0.38 4.62 1.44 5.68 4.25 2.87 4.25 11.26 5.75 11.26 5.75 2.87 8.56 5.68 9.62 4.62"
302
- })),
303
- onClick: onClick
503
+ }))
304
504
  }, props));
305
505
  };
306
506
 
307
507
  ShareButton.propTypes = propTypes$j;
308
508
  ShareButton.defaultProps = defaultProps$j;
309
509
 
310
- var styles$d = {"container":"micromag-viewer-menus-menu-container-container","heightContainer":"micromag-viewer-menus-menu-container-heightContainer","inner":"micromag-viewer-menus-menu-container-inner"};
510
+ var styles$e = {"container":"micromag-viewer-buttons-toggle-button-container","normal":"micromag-viewer-buttons-toggle-button-normal","toggled":"micromag-viewer-buttons-toggle-button-toggled"};
311
511
 
312
512
  var propTypes$i = {
513
+ className: PropTypes.string,
514
+ toggled: PropTypes.number,
515
+ button: PropTypes.node,
516
+ toggledButton: PropTypes.node,
517
+ toggledButtonClassName: PropTypes.string
518
+ };
519
+ var defaultProps$i = {
520
+ className: null,
521
+ toggled: 0,
522
+ button: null,
523
+ toggledButton: null,
524
+ toggledButtonClassName: null
525
+ };
526
+
527
+ var ToggleButton = function ToggleButton(_ref) {
528
+ var className = _ref.className,
529
+ toggled = _ref.toggled,
530
+ button = _ref.button,
531
+ toggledButton = _ref.toggledButton,
532
+ toggledButtonClassName = _ref.toggledButtonClassName;
533
+ if (button === null) return false;
534
+
535
+ var getToggleButtonStyles = function getToggleButtonStyles(t) {
536
+ return {
537
+ transform: "translateY(".concat(t * -100, "%)")
538
+ };
539
+ };
540
+
541
+ return /*#__PURE__*/React.createElement("div", {
542
+ className: classNames([styles$e.container, _defineProperty({}, className, className !== null)])
543
+ }, /*#__PURE__*/React.createElement("div", {
544
+ className: styles$e.normal,
545
+ style: getToggleButtonStyles(toggled)
546
+ }, button), /*#__PURE__*/React.createElement("div", {
547
+ className: classNames([styles$e.toggled, _defineProperty({}, toggledButtonClassName, toggledButtonClassName !== null)]),
548
+ style: getToggleButtonStyles(toggled - 1)
549
+ }, toggledButton));
550
+ };
551
+
552
+ ToggleButton.propTypes = propTypes$i;
553
+ ToggleButton.defaultProps = defaultProps$i;
554
+
555
+ var styles$d = {"backdrop":"micromag-viewer-menus-menu-container-backdrop","container":"micromag-viewer-menus-menu-container-container","heightContainer":"micromag-viewer-menus-menu-container-heightContainer","inner":"micromag-viewer-menus-menu-container-inner"};
556
+
557
+ var propTypes$h = {
313
558
  className: PropTypes.string,
314
559
  transitionProgress: PropTypes.number,
315
560
  children: PropTypes.node
316
561
  };
317
- var defaultProps$i = {
562
+ var defaultProps$h = {
318
563
  className: null,
319
564
  transitionProgress: 0,
320
565
  children: null
@@ -334,19 +579,28 @@ var ViewerMenuContainer = function ViewerMenuContainer(_ref) {
334
579
  style: {
335
580
  height: "".concat(transitionProgress * 100, "%"),
336
581
  pointerEvents: transitionProgress < 0.25 ? 'none' : 'auto',
337
- zIndex: Math.round(2 - transitionProgress)
582
+ zIndex: Math.round(1 + transitionProgress)
338
583
  }
339
584
  }, /*#__PURE__*/React.createElement("div", {
340
- className: styles$d.inner
341
- }, children)));
585
+ className: styles$d.inner,
586
+ style: {
587
+ paddingTop: "".concat(3 * transitionProgress, "rem"),
588
+ paddingBottom: "".concat(0.5 * transitionProgress, "rem")
589
+ }
590
+ }, children)), /*#__PURE__*/React.createElement("div", {
591
+ className: styles$d.backdrop,
592
+ style: {
593
+ opacity: easings.easeOutQuint(transitionProgress)
594
+ }
595
+ }));
342
596
  };
343
597
 
344
- ViewerMenuContainer.propTypes = propTypes$i;
345
- ViewerMenuContainer.defaultProps = defaultProps$i;
598
+ ViewerMenuContainer.propTypes = propTypes$h;
599
+ ViewerMenuContainer.defaultProps = defaultProps$h;
346
600
 
347
- var styles$c = {"button":"micromag-viewer-menus-menu-dot-button","progress":"micromag-viewer-menus-menu-dot-progress","dot":"micromag-viewer-menus-menu-dot-dot","container":"micromag-viewer-menus-menu-dot-container","vertical":"micromag-viewer-menus-menu-dot-vertical","subDot":"micromag-viewer-menus-menu-dot-subDot","dots":"micromag-viewer-menus-menu-dot-dots","outlineBounce":"micromag-viewer-menus-menu-dot-outlineBounce"};
601
+ var styles$c = {"button":"micromag-viewer-menus-menu-dot-button","progress":"micromag-viewer-menus-menu-dot-progress","container":"micromag-viewer-menus-menu-dot-container","vertical":"micromag-viewer-menus-menu-dot-vertical","dot":"micromag-viewer-menus-menu-dot-dot","subDot":"micromag-viewer-menus-menu-dot-subDot","dots":"micromag-viewer-menus-menu-dot-dots","outlineBounce":"micromag-viewer-menus-menu-dot-outlineBounce"};
348
602
 
349
- var propTypes$h = {
603
+ var propTypes$g = {
350
604
  current: PropTypes.bool,
351
605
  active: PropTypes.bool,
352
606
  colors: PropTypes.shape({
@@ -359,7 +613,7 @@ var propTypes$h = {
359
613
  onClick: PropTypes.func,
360
614
  className: PropTypes.string
361
615
  };
362
- var defaultProps$h = {
616
+ var defaultProps$g = {
363
617
  current: false,
364
618
  active: false,
365
619
  colors: null,
@@ -431,13 +685,13 @@ var ViewerMenuDot = function ViewerMenuDot(_ref) {
431
685
  }))));
432
686
  };
433
687
 
434
- ViewerMenuDot.propTypes = propTypes$h;
435
- ViewerMenuDot.defaultProps = defaultProps$h;
688
+ ViewerMenuDot.propTypes = propTypes$g;
689
+ ViewerMenuDot.defaultProps = defaultProps$g;
436
690
 
437
691
  var styles$b = {"container":"micromag-viewer-menus-menu-dots-container","closeButton":"micromag-viewer-menus-menu-dots-closeButton","item":"micromag-viewer-menus-menu-dots-item","items":"micromag-viewer-menus-menu-dots-items","vertical":"micromag-viewer-menus-menu-dots-vertical"};
438
692
 
439
693
  var _excluded$3 = ["direction", "items", "onClickDot", "onClickScreensMenu", "colors", "closeable", "withItemClick", "withoutScreensMenu", "onClose", "className"];
440
- var propTypes$g = {
694
+ var propTypes$f = {
441
695
  direction: PropTypes.oneOf(['horizontal', 'vertical']),
442
696
  items: PropTypes$1.menuItems,
443
697
  onClickDot: PropTypes.func,
@@ -452,7 +706,7 @@ var propTypes$g = {
452
706
  onClose: PropTypes.func,
453
707
  className: PropTypes.string
454
708
  };
455
- var defaultProps$g = {
709
+ var defaultProps$f = {
456
710
  direction: 'horizontal',
457
711
  items: [],
458
712
  onClickDot: null,
@@ -574,23 +828,20 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
574
828
  }))) : null));
575
829
  };
576
830
 
577
- ViewerMenuDots.propTypes = propTypes$g;
578
- ViewerMenuDots.defaultProps = defaultProps$g;
831
+ ViewerMenuDots.propTypes = propTypes$f;
832
+ ViewerMenuDots.defaultProps = defaultProps$f;
579
833
 
580
- var propTypes$f = {
834
+ var propTypes$e = {
581
835
  className: PropTypes.string
582
836
  };
583
- var defaultProps$f = {
837
+ var defaultProps$e = {
584
838
  className: null
585
839
  };
586
840
 
587
841
  var StackIcon = function StackIcon(_ref) {
588
842
  var className = _ref.className;
589
843
  return /*#__PURE__*/React.createElement("svg", {
590
- xmlns: "http://www.w3.org/2000/svg" // width="32"
591
- // height="32"
592
- // viewBox="0 0 32 32"
593
- ,
844
+ xmlns: "http://www.w3.org/2000/svg",
594
845
  width: "11.5",
595
846
  height: "17.5",
596
847
  viewBox: "0 0 11.5 17.5",
@@ -603,12 +854,12 @@ var StackIcon = function StackIcon(_ref) {
603
854
  }));
604
855
  };
605
856
 
606
- StackIcon.propTypes = propTypes$f;
607
- StackIcon.defaultProps = defaultProps$f;
857
+ StackIcon.propTypes = propTypes$e;
858
+ StackIcon.defaultProps = defaultProps$e;
608
859
 
609
860
  var styles$a = {"button":"micromag-viewer-menus-menu-screen-button","container":"micromag-viewer-menus-menu-screen-container","isCurrent":"micromag-viewer-menus-menu-screen-isCurrent","pulse":"micromag-viewer-menus-menu-screen-pulse","inner":"micromag-viewer-menus-menu-screen-inner","subScreenBadge":"micromag-viewer-menus-menu-screen-subScreenBadge","subScreenCount":"micromag-viewer-menus-menu-screen-subScreenCount","subScreenIcon":"micromag-viewer-menus-menu-screen-subScreenIcon"};
610
861
 
611
- var propTypes$e = {
862
+ var propTypes$d = {
612
863
  className: PropTypes.string,
613
864
  item: PropTypes$1.menuItem,
614
865
  index: PropTypes.number,
@@ -616,7 +867,7 @@ var propTypes$e = {
616
867
  screenSize: PropTypes$1.screenSize,
617
868
  focusable: PropTypes.bool
618
869
  };
619
- var defaultProps$e = {
870
+ var defaultProps$d = {
620
871
  className: null,
621
872
  item: PropTypes$1.menuItem,
622
873
  index: 0,
@@ -696,12 +947,12 @@ var ViewerMenuScreen = function ViewerMenuScreen(_ref) {
696
947
  }) : null));
697
948
  };
698
949
 
699
- ViewerMenuScreen.propTypes = propTypes$e;
700
- ViewerMenuScreen.defaultProps = defaultProps$e;
950
+ ViewerMenuScreen.propTypes = propTypes$d;
951
+ ViewerMenuScreen.defaultProps = defaultProps$d;
701
952
 
702
- var styles$9 = {"scroll":"micromag-viewer-menus-menu-preview-scroll","container":"micromag-viewer-menus-menu-preview-container","disabled":"micromag-viewer-menus-menu-preview-disabled","screenButton":"micromag-viewer-menus-menu-preview-screenButton","buttons":"micromag-viewer-menus-menu-preview-buttons","organisation":"micromag-viewer-menus-menu-preview-organisation","icon":"micromag-viewer-menus-menu-preview-icon","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"};
953
+ var styles$9 = {"scroll":"micromag-viewer-menus-menu-preview-scroll","container":"micromag-viewer-menus-menu-preview-container","disabled":"micromag-viewer-menus-menu-preview-disabled","screenButton":"micromag-viewer-menus-menu-preview-screenButton","buttons":"micromag-viewer-menus-menu-preview-buttons","organisation":"micromag-viewer-menus-menu-preview-organisation","icon":"micromag-viewer-menus-menu-preview-icon","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","screen":"micromag-viewer-menus-menu-preview-screen","loading":"micromag-viewer-menus-menu-preview-loading","fillPulse":"micromag-viewer-menus-menu-preview-fillPulse"};
703
954
 
704
- var propTypes$d = {
955
+ var propTypes$c = {
705
956
  viewerTheme: PropTypes$1.viewerTheme,
706
957
  screenSize: PropTypes$1.screenSize,
707
958
  menuWidth: PropTypes.number,
@@ -709,13 +960,14 @@ var propTypes$d = {
709
960
  focusable: PropTypes.bool,
710
961
  onClickScreen: PropTypes.func,
711
962
  maxThumbsWidth: PropTypes.number,
712
- // shouldLoad: PropTypes.bool, // @todo still needed? to re-implement?
963
+ // @todo to reimplement:
964
+ // shouldLoad: PropTypes.bool,
713
965
  // toggleFullscreen: PropTypes.func,
714
966
  // fullscreenActive: PropTypes.bool,
715
967
  // fullscreenEnabled: PropTypes.bool,
716
968
  className: PropTypes.string
717
969
  };
718
- var defaultProps$d = {
970
+ var defaultProps$c = {
719
971
  viewerTheme: null,
720
972
  screenSize: null,
721
973
  menuWidth: null,
@@ -745,51 +997,33 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
745
997
  _useDimensionObserver2 = _useDimensionObserver.width,
746
998
  contentWidth = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2;
747
999
 
748
- var thumbsPerLine = Math.max(Math.floor(contentWidth / maxThumbsWidth), 3); // Viewer theme
749
- // @todo room for improvement here probably
750
- // @todo also re-implement!!
1000
+ var thumbsPerLine = Math.max(Math.floor(contentWidth / maxThumbsWidth), 3); // @note cool, should be in recipes
751
1001
 
752
1002
  var _ref2 = viewerTheme || {},
753
- _ref2$colors = _ref2.colors,
754
- colors = _ref2$colors === void 0 ? null : _ref2$colors,
755
1003
  _ref2$background = _ref2.background,
756
1004
  background = _ref2$background === void 0 ? null : _ref2$background;
757
1005
  _ref2.logo;
758
1006
 
759
- var _ref3 = colors || {};
760
- _ref3.primary;
761
- _ref3.secondary;
762
-
763
- var _ref4 = background || {},
764
- _ref4$color = _ref4.color,
765
- brandBackgroundColor = _ref4$color === void 0 ? null : _ref4$color,
766
- _ref4$image = _ref4.image,
767
- image = _ref4$image === void 0 ? null : _ref4$image;
768
-
769
- var _ref5 = image || {},
770
- _ref5$url = _ref5.url,
771
- brandImageUrl = _ref5$url === void 0 ? null : _ref5$url; // const borderPrimaryColorStyle = getStyleFromColor(brandPrimaryColor, 'borderColor');
772
- // const colorSecondaryColorStyle = getStyleFromColor(brandSecondaryColor, 'color');
1007
+ var _ref3 = background || {},
1008
+ _ref3$color = _ref3.color,
1009
+ brandBackgroundColor = _ref3$color === void 0 ? null : _ref3$color,
1010
+ _ref3$image = _ref3.image,
1011
+ image = _ref3$image === void 0 ? null : _ref3$image;
773
1012
 
1013
+ var _ref4 = image || {},
1014
+ _ref4$url = _ref4.url,
1015
+ brandImageUrl = _ref4$url === void 0 ? null : _ref4$url;
774
1016
 
775
- var backgroundColorStyle = getStyleFromColor(brandBackgroundColor, 'backgroundColor'); // const { url: brandLogoUrl = null } = brandLogo || {};
776
-
1017
+ var backgroundColorStyle = getStyleFromColor(brandBackgroundColor, 'backgroundColor');
777
1018
  var brandImageStyle = brandImageUrl !== null ? {
778
1019
  backgroundImage: "url(".concat(brandImageUrl, ")")
779
- } : null; // @todo could probably use some work to avoid the visual jump from 3 screens to all of them
780
-
781
- var finalItems = useMemo(function () {
782
- return !focusable ? items.map(function (s, i) {
783
- return i > 3 ? {
784
- screenId: s.screenId
785
- } : s;
786
- }) : items;
787
- }, [items, focusable]); // @todo bookmarks
788
- // const bookmarks = finalItems.reduce((acc, it) => {
789
- // const { screen = null } = it || {};
790
- // const { bookmark = null } = screen || {};
791
- // return bookmark !== null ? [...acc, bookmark] : acc; // merge with array or return original array
792
- // }, []);
1020
+ } : null; // @todo reimplement the brand logo
1021
+ // const { url: brandLogoUrl = null } = brandLogo || {};
1022
+ // @todo optimize all of this the proper way
1023
+ // const finalItems = useMemo(
1024
+ // () => (!focusable ? items.map((s, i) => (i > 6 ? { screenId: s.screenId } : s)) : items),
1025
+ // [items, focusable],
1026
+ // );
793
1027
 
794
1028
  return /*#__PURE__*/React.createElement("div", {
795
1029
  className: classNames([styles$9.container, _defineProperty({}, className, className !== null)]),
@@ -806,9 +1040,11 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
806
1040
  className: styles$9.nav
807
1041
  }, /*#__PURE__*/React.createElement("ul", {
808
1042
  className: styles$9.items
809
- }, finalItems.map(function (item, index) {
810
- var _ref7 = item || {},
811
- screenId = _ref7.screenId;
1043
+ }, items.map(function (item, index) {
1044
+ var _ref6 = item || {},
1045
+ screenId = _ref6.screenId,
1046
+ _ref6$screen = _ref6.screen,
1047
+ screen = _ref6$screen === void 0 ? null : _ref6$screen;
812
1048
 
813
1049
  var itemStyles = {
814
1050
  width: "".concat(100 / thumbsPerLine, "%")
@@ -817,30 +1053,43 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
817
1053
  key: "item-".concat(screenId),
818
1054
  className: styles$9.item,
819
1055
  style: itemStyles
820
- }, item === null ? 'loading' : /*#__PURE__*/React.createElement(ViewerMenuScreen, {
821
- className: styles$9.screenPreview,
1056
+ }, /*#__PURE__*/React.createElement("div", {
1057
+ className: styles$9.screen
1058
+ }, screen === null ? /*#__PURE__*/React.createElement("svg", {
1059
+ className: styles$9.loading,
1060
+ xmlns: "http://www.w3.org/2000/svg",
1061
+ width: "10",
1062
+ height: "16",
1063
+ viewBox: "0 0 10 16",
1064
+ style: {
1065
+ animationDelay: "".concat(index * -50, "ms")
1066
+ }
1067
+ }, /*#__PURE__*/React.createElement("rect", {
1068
+ width: "10",
1069
+ height: "16"
1070
+ })) : /*#__PURE__*/React.createElement(ViewerMenuScreen, {
822
1071
  item: item,
823
1072
  index: index,
824
1073
  screenSize: screenSize,
825
1074
  onClick: onClickScreen,
826
1075
  focusable: focusable
827
- }));
1076
+ })));
828
1077
  }))))));
829
1078
  };
830
1079
 
831
- ViewerMenuPreview.propTypes = propTypes$d;
832
- ViewerMenuPreview.defaultProps = defaultProps$d;
1080
+ ViewerMenuPreview.propTypes = propTypes$c;
1081
+ ViewerMenuPreview.defaultProps = defaultProps$c;
833
1082
 
834
1083
  var styles$8 = {"container":"micromag-viewer-partials-micromag-preview-container","cover":"micromag-viewer-partials-micromag-preview-cover","info":"micromag-viewer-partials-micromag-preview-info","url":"micromag-viewer-partials-micromag-preview-url","title":"micromag-viewer-partials-micromag-preview-title"};
835
1084
 
836
- var propTypes$c = {
1085
+ var propTypes$b = {
837
1086
  screen: PropTypes$1.item,
838
1087
  title: PropTypes.string,
839
1088
  url: PropTypes.string,
840
1089
  description: PropTypes.string,
841
1090
  className: PropTypes.string
842
1091
  };
843
- var defaultProps$c = {
1092
+ var defaultProps$b = {
844
1093
  screen: null,
845
1094
  title: null,
846
1095
  url: null,
@@ -872,12 +1121,12 @@ var MicromagPreview = function MicromagPreview(_ref) {
872
1121
  }, url) : null, /*#__PURE__*/React.createElement("p", null, description)));
873
1122
  };
874
1123
 
875
- MicromagPreview.propTypes = propTypes$c;
876
- MicromagPreview.defaultProps = defaultProps$c;
1124
+ MicromagPreview.propTypes = propTypes$b;
1125
+ MicromagPreview.defaultProps = defaultProps$b;
877
1126
 
878
- var styles$7 = {"scroll":"micromag-viewer-menus-menu-share-scroll","container":"micromag-viewer-menus-menu-share-container","disabled":"micromag-viewer-menus-menu-share-disabled","screenButton":"micromag-viewer-menus-menu-share-screenButton","organisation":"micromag-viewer-menus-menu-share-organisation","icon":"micromag-viewer-menus-menu-share-icon","header":"micromag-viewer-menus-menu-share-header","mode":"micromag-viewer-menus-menu-share-mode","bump":"micromag-viewer-menus-menu-share-bump","options":"micromag-viewer-menus-menu-share-options","optionButton":"micromag-viewer-menus-menu-share-optionButton","content":"micromag-viewer-menus-menu-share-content"};
1127
+ var styles$7 = {"scroll":"micromag-viewer-menus-menu-share-scroll","container":"micromag-viewer-menus-menu-share-container","disabled":"micromag-viewer-menus-menu-share-disabled","button":"micromag-viewer-menus-menu-share-button","organisation":"micromag-viewer-menus-menu-share-organisation","icon":"micromag-viewer-menus-menu-share-icon","header":"micromag-viewer-menus-menu-share-header","mode":"micromag-viewer-menus-menu-share-mode","bump":"micromag-viewer-menus-menu-share-bump","options":"micromag-viewer-menus-menu-share-options","content":"micromag-viewer-menus-menu-share-content"};
879
1128
 
880
- var propTypes$b = {
1129
+ var propTypes$a = {
881
1130
  viewerTheme: PropTypes$1.viewerTheme,
882
1131
  menuWidth: PropTypes.number,
883
1132
  title: PropTypes.string,
@@ -890,7 +1139,7 @@ var propTypes$b = {
890
1139
  onShare: PropTypes.func,
891
1140
  className: PropTypes.string
892
1141
  };
893
- var defaultProps$b = {
1142
+ var defaultProps$a = {
894
1143
  viewerTheme: null,
895
1144
  menuWidth: null,
896
1145
  title: null,
@@ -916,56 +1165,43 @@ var ViewerMenuShare = function ViewerMenuShare(_ref) {
916
1165
  className = _ref.className;
917
1166
 
918
1167
  // Viewer theme
919
- // @todo room for improvement here probably
920
1168
  var _ref2 = viewerTheme || {},
921
- _ref2$colors = _ref2.colors,
922
- colors = _ref2$colors === void 0 ? null : _ref2$colors,
923
1169
  _ref2$background = _ref2.background,
924
1170
  background = _ref2$background === void 0 ? null : _ref2$background;
925
- _ref2.logo;
926
- // @todo could get from theme provider? need to re-implement
927
-
928
-
929
- var _ref3 = colors || {};
930
- _ref3.primary;
931
- _ref3.secondary;
932
-
933
- var _ref4 = background || {},
934
- _ref4$color = _ref4.color,
935
- brandBackgroundColor = _ref4$color === void 0 ? null : _ref4$color,
936
- _ref4$image = _ref4.image,
937
- image = _ref4$image === void 0 ? null : _ref4$image;
938
-
939
- var _ref5 = image || {},
940
- _ref5$url = _ref5.url,
941
- brandImageUrl = _ref5$url === void 0 ? null : _ref5$url; // const borderPrimaryColorStyle = getStyleFromColor(brandPrimaryColor, 'borderColor');
942
- // const colorSecondaryColorStyle = getStyleFromColor(brandSecondaryColor, 'color');
943
1171
 
1172
+ var _ref3 = background || {},
1173
+ _ref3$color = _ref3.color,
1174
+ brandBackgroundColor = _ref3$color === void 0 ? null : _ref3$color,
1175
+ _ref3$image = _ref3.image,
1176
+ image = _ref3$image === void 0 ? null : _ref3$image;
944
1177
 
945
- var backgroundColorStyle = getStyleFromColor(brandBackgroundColor, 'backgroundColor'); // const { url: brandLogoUrl = null } = brandLogo || {};
1178
+ var _ref4 = image || {},
1179
+ _ref4$url = _ref4.url,
1180
+ brandImageUrl = _ref4$url === void 0 ? null : _ref4$url;
946
1181
 
1182
+ var backgroundColorStyle = getStyleFromColor(brandBackgroundColor, 'backgroundColor');
947
1183
  var brandImageStyle = brandImageUrl !== null ? {
948
1184
  backgroundImage: "url(".concat(brandImageUrl, ")")
949
1185
  } : null;
950
1186
  var coverScreen = useMemo(function () {
951
- var _ref6 = items[0] || {},
952
- _ref6$screen = _ref6.screen,
953
- screen = _ref6$screen === void 0 ? null : _ref6$screen;
1187
+ var _ref5 = items[0] || {},
1188
+ _ref5$screen = _ref5.screen,
1189
+ screen = _ref5$screen === void 0 ? null : _ref5$screen;
954
1190
 
955
1191
  return screen;
956
1192
  }, [items]);
957
1193
  var currentScreen = useMemo(function () {
958
1194
  var found = items.find(function (item) {
959
- var _ref7 = item || {},
960
- _ref7$current = _ref7.current,
961
- current = _ref7$current === void 0 ? false : _ref7$current;
1195
+ var _ref6 = item || {},
1196
+ _ref6$current = _ref6.current,
1197
+ current = _ref6$current === void 0 ? false : _ref6$current;
962
1198
 
963
1199
  return current;
964
1200
  });
965
1201
 
966
- var _ref8 = found || {},
967
- _ref8$screen = _ref8.screen,
968
- screen = _ref8$screen === void 0 ? null : _ref8$screen;
1202
+ var _ref7 = found || {},
1203
+ _ref7$screen = _ref7.screen,
1204
+ screen = _ref7$screen === void 0 ? null : _ref7$screen;
969
1205
 
970
1206
  return screen;
971
1207
  }, [items, currentScreenIndex, focusable]);
@@ -1029,16 +1265,17 @@ var ViewerMenuShare = function ViewerMenuShare(_ref) {
1029
1265
  url: finalShareUrl,
1030
1266
  focusable: focusable,
1031
1267
  onShare: onShare,
1268
+ theme: viewerTheme,
1032
1269
  shareCurrentScreen: shareCurrentScreen
1033
1270
  }))));
1034
1271
  };
1035
1272
 
1036
- ViewerMenuShare.propTypes = propTypes$b;
1037
- ViewerMenuShare.defaultProps = defaultProps$b;
1273
+ ViewerMenuShare.propTypes = propTypes$a;
1274
+ ViewerMenuShare.defaultProps = defaultProps$a;
1038
1275
 
1039
- var styles$6 = {"container":"micromag-viewer-container","screenContainer":"micromag-viewer-screenContainer","screensFrame":"micromag-viewer-screensFrame","landscape":"micromag-viewer-landscape","hideMenu":"micromag-viewer-hideMenu","menuNavContainer":"micromag-viewer-menuNavContainer","dots":"micromag-viewer-dots","menuTopContainer":"micromag-viewer-menuTopContainer","content":"micromag-viewer-content","fadeMenu":"micromag-viewer-fadeMenu","withShadow":"micromag-viewer-withShadow","isOpened":"micromag-viewer-isOpened","menuItem":"micromag-viewer-menuItem","menuScreens":"micromag-viewer-menuScreens","slidingButton":"micromag-viewer-slidingButton","menuButton":"micromag-viewer-menuButton","isHidden":"micromag-viewer-isHidden","navButton":"micromag-viewer-navButton","previous":"micromag-viewer-previous","next":"micromag-viewer-next","isDragging":"micromag-viewer-isDragging","withoutGestures":"micromag-viewer-withoutGestures","screen":"micromag-viewer-screen","current":"micromag-viewer-current","playbackControls":"micromag-viewer-playbackControls","webView":"micromag-viewer-webView"};
1276
+ var styles$6 = {"container":"micromag-viewer-container","screenContainer":"micromag-viewer-screenContainer","screensFrame":"micromag-viewer-screensFrame","landscape":"micromag-viewer-landscape","hideMenu":"micromag-viewer-hideMenu","menuNavContainer":"micromag-viewer-menuNavContainer","dots":"micromag-viewer-dots","menuTopContainer":"micromag-viewer-menuTopContainer","content":"micromag-viewer-content","withoutGestures":"micromag-viewer-withoutGestures","fadeMenu":"micromag-viewer-fadeMenu","withShadow":"micromag-viewer-withShadow","isOpened":"micromag-viewer-isOpened","menuItem":"micromag-viewer-menuItem","menuItemScreens":"micromag-viewer-menuItemScreens","menuButton":"micromag-viewer-menuButton","slidingButton":"micromag-viewer-slidingButton","screensMenuButtonToggled":"micromag-viewer-screensMenuButtonToggled","isHidden":"micromag-viewer-isHidden","navButton":"micromag-viewer-navButton","previous":"micromag-viewer-previous","next":"micromag-viewer-next","screen":"micromag-viewer-screen","current":"micromag-viewer-current","playbackControls":"micromag-viewer-playbackControls","arrowHint":"micromag-viewer-arrowHint","webView":"micromag-viewer-webView"};
1040
1277
 
1041
- var propTypes$a = {
1278
+ var propTypes$9 = {
1042
1279
  story: PropTypes$1.story.isRequired,
1043
1280
  currentScreenIndex: PropTypes.number,
1044
1281
  toggleFullscreen: PropTypes.func,
@@ -1062,7 +1299,7 @@ var propTypes$a = {
1062
1299
 
1063
1300
  })
1064
1301
  };
1065
- var defaultProps$a = {
1302
+ var defaultProps$9 = {
1066
1303
  currentScreenIndex: 0,
1067
1304
  toggleFullscreen: null,
1068
1305
  fullscreenActive: false,
@@ -1084,7 +1321,7 @@ var defaultProps$a = {
1084
1321
  };
1085
1322
 
1086
1323
  var ViewerMenu = function ViewerMenu(_ref) {
1087
- var _ref9;
1324
+ var _ref11;
1088
1325
 
1089
1326
  var story = _ref.story,
1090
1327
  currentScreenIndex = _ref.currentScreenIndex,
@@ -1181,7 +1418,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1181
1418
  var base = typeof window !== 'undefined' ? window.location.host : '';
1182
1419
  var path = shareBasePath !== null ? "".concat(base).concat(shareBasePath) : base;
1183
1420
  return path;
1184
- }, [shareBasePath]); // @todo sorta not super good here
1421
+ }, [shareBasePath]); // @note possible to extract some of that logic
1185
1422
 
1186
1423
  var onOpenMenu = useCallback(function () {
1187
1424
  setMenuOpened(true);
@@ -1238,11 +1475,30 @@ var ViewerMenu = function ViewerMenu(_ref) {
1238
1475
  }
1239
1476
 
1240
1477
  return progress;
1241
- }, [menuOpened, onOpenShare]);
1478
+ }, [onOpenShare]);
1479
+ var computeShareProgressClose = useCallback(function (_ref8) {
1480
+ var active = _ref8.active,
1481
+ _ref8$direction = _slicedToArray(_ref8.direction, 2),
1482
+ dy = _ref8$direction[1],
1483
+ _ref8$movement = _slicedToArray(_ref8.movement, 2),
1484
+ my = _ref8$movement[1],
1485
+ _ref8$velocity = _slicedToArray(_ref8.velocity, 2),
1486
+ vy = _ref8$velocity[1];
1487
+
1488
+ var progress = Math.max(0, my) / (window.innerHeight * 0.8);
1489
+ var reachedThreshold = (vy > 0.3 || Math.abs(progress) > 0.3) && dy !== -1;
1490
+
1491
+ if (!active) {
1492
+ if (reachedThreshold) onCloseShare();
1493
+ return reachedThreshold ? 0 : 1;
1494
+ }
1495
+
1496
+ return 1 - progress;
1497
+ }, [onCloseShare]);
1242
1498
 
1243
1499
  var _useDragProgress = useDragProgress({
1244
1500
  progress: shareOpened ? 1 : 0,
1245
- computeProgress: computeShareProgress,
1501
+ computeProgress: shareOpened ? computeShareProgressClose : computeShareProgress,
1246
1502
  springParams: {
1247
1503
  config: {
1248
1504
  tension: 300,
@@ -1251,17 +1507,16 @@ var ViewerMenu = function ViewerMenu(_ref) {
1251
1507
  }
1252
1508
  }),
1253
1509
  bindShareDrag = _useDragProgress.bind,
1254
- isDraggingShare = _useDragProgress.dragging,
1255
1510
  shareOpenedProgress = _useDragProgress.progress;
1256
1511
 
1257
- var computeMenuProgress = useCallback(function (_ref8) {
1258
- var active = _ref8.active,
1259
- _ref8$direction = _slicedToArray(_ref8.direction, 2),
1260
- dy = _ref8$direction[1],
1261
- _ref8$movement = _slicedToArray(_ref8.movement, 2),
1262
- my = _ref8$movement[1],
1263
- _ref8$velocity = _slicedToArray(_ref8.velocity, 2),
1264
- vy = _ref8$velocity[1];
1512
+ var computeMenuProgress = useCallback(function (_ref9) {
1513
+ var active = _ref9.active,
1514
+ _ref9$direction = _slicedToArray(_ref9.direction, 2),
1515
+ dy = _ref9$direction[1],
1516
+ _ref9$movement = _slicedToArray(_ref9.movement, 2),
1517
+ my = _ref9$movement[1],
1518
+ _ref9$velocity = _slicedToArray(_ref9.velocity, 2),
1519
+ vy = _ref9$velocity[1];
1265
1520
 
1266
1521
  var progress = Math.max(0, my) / (window.innerHeight * 0.8);
1267
1522
  var reachedThreshold = (vy > 0.3 || Math.abs(progress) > 0.3) && dy !== -1;
@@ -1272,11 +1527,30 @@ var ViewerMenu = function ViewerMenu(_ref) {
1272
1527
  }
1273
1528
 
1274
1529
  return progress;
1275
- }, [menuOpened, onOpenMenu]);
1530
+ }, [onOpenMenu]);
1531
+ var computeMenuProgressClose = useCallback(function (_ref10) {
1532
+ var active = _ref10.active,
1533
+ _ref10$direction = _slicedToArray(_ref10.direction, 2),
1534
+ dy = _ref10$direction[1],
1535
+ _ref10$movement = _slicedToArray(_ref10.movement, 2),
1536
+ my = _ref10$movement[1],
1537
+ _ref10$velocity = _slicedToArray(_ref10.velocity, 2),
1538
+ vy = _ref10$velocity[1];
1539
+
1540
+ var progress = Math.max(0, my) / (window.innerHeight * 0.8);
1541
+ var reachedThreshold = (vy > 0.3 || Math.abs(progress) > 0.3) && dy !== -1;
1542
+
1543
+ if (!active) {
1544
+ if (reachedThreshold) onCloseMenu();
1545
+ return reachedThreshold ? 0 : 1;
1546
+ }
1547
+
1548
+ return 1 - progress;
1549
+ }, [onCloseMenu]);
1276
1550
 
1277
1551
  var _useDragProgress2 = useDragProgress({
1278
1552
  progress: menuOpened ? 1 : 0,
1279
- computeProgress: computeMenuProgress,
1553
+ computeProgress: menuOpened ? computeMenuProgressClose : computeMenuProgress,
1280
1554
  springParams: {
1281
1555
  config: {
1282
1556
  tension: 300,
@@ -1285,7 +1559,6 @@ var ViewerMenu = function ViewerMenu(_ref) {
1285
1559
  }
1286
1560
  }),
1287
1561
  bindMenuDrag = _useDragProgress2.bind,
1288
- isDraggingMenu = _useDragProgress2.dragging,
1289
1562
  menuOpenedProgress = _useDragProgress2.progress;
1290
1563
 
1291
1564
  var keyboardShortcuts = useMemo(function () {
@@ -1302,7 +1575,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1302
1575
 
1303
1576
  var dotsOpacity = Math.min(1, Math.max(0, 1 - (menuOpenedProgress + shareOpenedProgress)));
1304
1577
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1305
- className: classNames([styles$6.menuNavContainer, (_ref9 = {}, _defineProperty(_ref9, styles$6.withShadow, withShadow), _defineProperty(_ref9, styles$6.isOpened, menuOpened || shareOpened), _ref9)]),
1578
+ className: classNames([styles$6.menuNavContainer, (_ref11 = {}, _defineProperty(_ref11, styles$6.withShadow, withShadow), _defineProperty(_ref11, styles$6.isOpened, menuOpened || shareOpened), _ref11)]),
1306
1579
  ref: refDots,
1307
1580
  style: {
1308
1581
  width: menuWidth
@@ -1311,47 +1584,43 @@ var ViewerMenu = function ViewerMenu(_ref) {
1311
1584
  className: styles$6.menuTopContainer
1312
1585
  }, !withoutShareMenu ? /*#__PURE__*/React.createElement("div", Object.assign({
1313
1586
  className: classNames([styles$6.menuItem, styles$6.menuShare])
1314
- }, bindShareDrag()), /*#__PURE__*/React.createElement(SlidingButtons, {
1587
+ }, bindShareDrag()), /*#__PURE__*/React.createElement(ToggleButton, {
1315
1588
  className: styles$6.slidingButton,
1316
- current: shareOpenedProgress,
1317
- immediate: isDraggingShare,
1318
- buttons: [ShareButton, CloseButton],
1319
- buttonsProps: [{
1320
- key: 'share',
1589
+ button: /*#__PURE__*/React.createElement(ShareButton, {
1321
1590
  className: styles$6.menuButton,
1322
1591
  onClick: onOpenShare,
1323
- theme: menuTheme
1324
- }, {
1325
- key: 'close-share',
1592
+ theme: menuTheme,
1593
+ iconPosition: "left"
1594
+ }),
1595
+ toggledButton: /*#__PURE__*/React.createElement(CloseButton, {
1326
1596
  className: styles$6.menuButton,
1327
1597
  onClick: onCloseShare,
1328
1598
  theme: menuTheme,
1329
- iconPosition: 'left'
1330
- }]
1599
+ iconPosition: "left"
1600
+ }),
1601
+ toggled: shareOpenedProgress
1331
1602
  })) : null, !withoutScreensMenu ? /*#__PURE__*/React.createElement("div", Object.assign({
1332
- className: classNames([styles$6.menuItem, styles$6.menuScreens])
1333
- }, bindMenuDrag()), /*#__PURE__*/React.createElement(SlidingButtons, {
1603
+ className: classNames([styles$6.menuItem, styles$6.menuItemScreens])
1604
+ }, bindMenuDrag()), /*#__PURE__*/React.createElement(ToggleButton, {
1334
1605
  className: styles$6.slidingButton,
1335
- current: menuOpenedProgress,
1336
- immediate: isDraggingMenu,
1337
- buttons: [MenuButton, CloseButton],
1338
- buttonsProps: [{
1339
- key: 'menu',
1606
+ button: /*#__PURE__*/React.createElement(MenuButton, {
1340
1607
  className: styles$6.menuButton,
1341
1608
  onClick: onOpenMenu,
1342
1609
  theme: menuTheme
1343
- }, {
1344
- key: 'close-menu',
1610
+ }),
1611
+ toggledButton: /*#__PURE__*/React.createElement(CloseButton, {
1345
1612
  className: styles$6.menuButton,
1346
1613
  onClick: onCloseMenu,
1347
1614
  theme: menuTheme,
1348
- iconPosition: 'right'
1349
- }]
1615
+ iconPosition: "right"
1616
+ }),
1617
+ toggled: menuOpenedProgress,
1618
+ toggledButtonClassName: styles$6.screensMenuButtonToggled
1350
1619
  })) : null), /*#__PURE__*/React.createElement(ViewerMenuDots, Object.assign({}, menuTheme, {
1351
1620
  direction: "horizontal",
1352
1621
  items: items,
1353
1622
  onClickDot: onClickScreen,
1354
- onClickMenu: onOpenMenu,
1623
+ onClickScreensMenu: onOpenMenu,
1355
1624
  closeable: closeable,
1356
1625
  withItemClick: withDotItemClick,
1357
1626
  withoutScreensMenu: withoutScreensMenu,
@@ -1359,12 +1628,14 @@ var ViewerMenu = function ViewerMenu(_ref) {
1359
1628
  onClose: onClickCloseViewer,
1360
1629
  className: styles$6.dots,
1361
1630
  style: {
1362
- opacity: dotsOpacity
1631
+ opacity: Math.pow(dotsOpacity, 5),
1632
+ // @note this is like a "quint" easing, meaning it'll go towards 1 slowly first and then fast as it approaches 1
1633
+ pointerEvents: dotsOpacity < 1 ? 'none' : 'auto'
1363
1634
  }
1364
1635
  }))), /*#__PURE__*/React.createElement(ViewerMenuContainer, {
1365
1636
  className: styles$6.menuContainerShare,
1366
1637
  transitionProgress: shareOpenedProgress
1367
- }, /*#__PURE__*/React.createElement(ViewerMenuShare, {
1638
+ }, shareOpenedProgress > 0 ? /*#__PURE__*/React.createElement(ViewerMenuShare, {
1368
1639
  viewerTheme: viewerTheme,
1369
1640
  className: styles$6.menuShare,
1370
1641
  title: title,
@@ -1376,15 +1647,14 @@ var ViewerMenu = function ViewerMenu(_ref) {
1376
1647
  shareUrl: shareUrl,
1377
1648
  onShare: onShare,
1378
1649
  onClose: onCloseShare
1379
- })), /*#__PURE__*/React.createElement(ViewerMenuContainer, {
1650
+ }) : null), /*#__PURE__*/React.createElement(ViewerMenuContainer, {
1380
1651
  className: styles$6.menuContainerScreens,
1381
1652
  transitionProgress: menuOpenedProgress
1382
- }, /*#__PURE__*/React.createElement(ViewerMenuPreview, {
1653
+ }, menuOpenedProgress > 0 ? /*#__PURE__*/React.createElement(ViewerMenuPreview, {
1383
1654
  viewerTheme: viewerTheme,
1384
1655
  className: styles$6.menuPreview,
1385
1656
  screenSize: screenSize,
1386
1657
  menuWidth: menuWidth,
1387
- focusable: menuOpened,
1388
1658
  items: items,
1389
1659
  currentScreenIndex: currentScreenIndex,
1390
1660
  shareUrl: shareUrl,
@@ -1394,67 +1664,15 @@ var ViewerMenu = function ViewerMenu(_ref) {
1394
1664
  toggleFullscreen: toggleFullscreen,
1395
1665
  fullscreenActive: fullscreenActive,
1396
1666
  fullscreenEnabled: fullscreenEnabled
1397
- })));
1398
- };
1399
-
1400
- ViewerMenu.propTypes = propTypes$a;
1401
- ViewerMenu.defaultProps = defaultProps$a;
1402
-
1403
- var styles$5 = {"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"};
1404
-
1405
- var propTypes$9 = {
1406
- color: PropTypes.string,
1407
- className: PropTypes.string
1408
- };
1409
- var defaultProps$9 = {
1410
- color: 'currentColor',
1411
- className: null
1667
+ }) : null));
1412
1668
  };
1413
1669
 
1414
- var HandIcon = function HandIcon(_ref) {
1415
- var color = _ref.color,
1416
- className = _ref.className;
1417
- return /*#__PURE__*/React.createElement("svg", {
1418
- className: className,
1419
- xmlns: "http://www.w3.org/2000/svg",
1420
- viewBox: "0 0 367.24 482.87"
1421
- }, /*#__PURE__*/React.createElement("path", {
1422
- d: "M488.84,255.91a44.68,44.68,0,0,0-19.15,4.3A44.77,44.77,0,0,0,406,226.49a44.75,44.75,0,0,0-62.67-32.66V105.4a44.81,44.81,0,1,0-89.61,0V265.17l-1.15-2.7a44.78,44.78,0,1,0-82.84,34.06l64.87,157.76.34.73a156.29,156.29,0,0,0,141.42,88.44c86.7,0,157.24-70.53,157.24-157.26V300.7a44.82,44.82,0,0,0-44.78-44.79ZM507.46,386.2c0,72.3-58.78,131.1-131.07,131.1a130.29,130.29,0,0,1-117.73-73.36L193.93,286.61a18.64,18.64,0,1,1,34.53-14.07L279.91,394V105.4a18.64,18.64,0,1,1,37.28,0v196a13.08,13.08,0,0,0,26.16,0V234.56a18.64,18.64,0,0,1,37.27,0v89.95a13.07,13.07,0,1,0,26.13,0V266.86a18.64,18.64,0,1,1,37.28,0v80.71h0s0,.08,0,.11a13.08,13.08,0,0,0,26.15,0v-47a18.63,18.63,0,1,1,37.26,0v85.5Z",
1423
- transform: "translate(-166.38 -60.59)",
1424
- fill: color,
1425
- fillRule: "evenodd"
1426
- }));
1427
- };
1670
+ ViewerMenu.propTypes = propTypes$9;
1671
+ ViewerMenu.defaultProps = defaultProps$9;
1428
1672
 
1429
- HandIcon.propTypes = propTypes$9;
1430
- HandIcon.defaultProps = defaultProps$9;
1673
+ var styles$5 = {"container":"micromag-viewer-screen-container","navigationHint":"micromag-viewer-screen-navigationHint"};
1431
1674
 
1432
1675
  var propTypes$8 = {
1433
- className: PropTypes.string
1434
- };
1435
- var defaultProps$8 = {
1436
- className: null
1437
- };
1438
-
1439
- var HandTap = function HandTap(_ref) {
1440
- var className = _ref.className;
1441
- return /*#__PURE__*/React.createElement("div", {
1442
- className: classNames([styles$5.container, _defineProperty({}, className, className !== null)])
1443
- }, /*#__PURE__*/React.createElement("div", {
1444
- className: styles$5.inner
1445
- }, /*#__PURE__*/React.createElement("div", {
1446
- className: styles$5.circle
1447
- }), /*#__PURE__*/React.createElement(HandIcon, {
1448
- className: styles$5.hand
1449
- })));
1450
- };
1451
-
1452
- HandTap.propTypes = propTypes$8;
1453
- HandTap.defaultProps = defaultProps$8;
1454
-
1455
- var styles$4 = {"container":"micromag-viewer-screen-container","handTap":"micromag-viewer-screen-handTap"};
1456
-
1457
- var propTypes$7 = {
1458
1676
  screen: PropTypes$1.screenComponent,
1459
1677
  renderContext: PropTypes$1.renderContext,
1460
1678
  screenState: PropTypes.string,
@@ -1464,10 +1682,10 @@ var propTypes$7 = {
1464
1682
  width: PropTypes.number,
1465
1683
  height: PropTypes.number,
1466
1684
  scale: PropTypes.number,
1467
- withNavigationHint: PropTypes.bool,
1685
+ // withNavigationHint: PropTypes.bool, // @todo
1468
1686
  className: PropTypes.string
1469
1687
  };
1470
- var defaultProps$7 = {
1688
+ var defaultProps$8 = {
1471
1689
  screen: null,
1472
1690
  renderContext: null,
1473
1691
  screenState: null,
@@ -1477,7 +1695,7 @@ var defaultProps$7 = {
1477
1695
  width: null,
1478
1696
  height: null,
1479
1697
  scale: null,
1480
- withNavigationHint: false,
1698
+ // withNavigationHint: false,
1481
1699
  className: null
1482
1700
  };
1483
1701
 
@@ -1491,10 +1709,9 @@ function ViewerScreen(_ref) {
1491
1709
  width = _ref.width,
1492
1710
  height = _ref.height,
1493
1711
  scale = _ref.scale,
1494
- withNavigationHint = _ref.withNavigationHint,
1495
1712
  className = _ref.className;
1496
1713
  return /*#__PURE__*/React.createElement("div", {
1497
- className: classNames([styles$4.container, _defineProperty({}, className, className !== null)])
1714
+ className: classNames([styles$5.container, _defineProperty({}, className, className !== null)])
1498
1715
  }, /*#__PURE__*/React.createElement("div", {
1499
1716
  style: {
1500
1717
  width: width,
@@ -1509,22 +1726,20 @@ function ViewerScreen(_ref) {
1509
1726
  active: active,
1510
1727
  current: current,
1511
1728
  mediaRef: mediaRef
1512
- })), withNavigationHint ? /*#__PURE__*/React.createElement(HandTap, {
1513
- className: styles$4.handTap
1514
- }) : null);
1729
+ })));
1515
1730
  }
1516
1731
 
1517
- ViewerScreen.propTypes = propTypes$7;
1518
- ViewerScreen.defaultProps = defaultProps$7;
1732
+ ViewerScreen.propTypes = propTypes$8;
1733
+ ViewerScreen.defaultProps = defaultProps$8;
1519
1734
 
1520
- var styles$3 = {"arrow":"micromag-viewer-buttons-navigation-button-arrow","next":"micromag-viewer-buttons-navigation-button-next","previous":"micromag-viewer-buttons-navigation-button-previous"};
1735
+ var styles$4 = {"arrow":"micromag-viewer-buttons-navigation-button-arrow","next":"micromag-viewer-buttons-navigation-button-next","previous":"micromag-viewer-buttons-navigation-button-previous"};
1521
1736
 
1522
- var propTypes$6 = {
1737
+ var propTypes$7 = {
1523
1738
  direction: PropTypes.oneOf(['previous', 'next']),
1524
1739
  onClick: PropTypes.func,
1525
1740
  className: PropTypes.string
1526
1741
  };
1527
- var defaultProps$6 = {
1742
+ var defaultProps$7 = {
1528
1743
  direction: 'next',
1529
1744
  onClick: null,
1530
1745
  className: null
@@ -1534,12 +1749,12 @@ var NavigationButton = function NavigationButton(_ref) {
1534
1749
  var direction = _ref.direction,
1535
1750
  onClick = _ref.onClick,
1536
1751
  className = _ref.className;
1537
- return /*#__PURE__*/React.createElement(Button, {
1538
- className: classNames([styles$3.container, styles$3[direction], _defineProperty({}, className, className !== null)]),
1752
+ return /*#__PURE__*/React.createElement(IconButton, {
1753
+ className: classNames([styles$4.container, styles$4[direction], _defineProperty({}, className, className !== null)]),
1539
1754
  onClick: onClick,
1540
1755
  iconPosition: direction === 'next' ? 'right' : 'left',
1541
1756
  icon: /*#__PURE__*/React.createElement("svg", {
1542
- className: styles$3.arrow,
1757
+ className: styles$4.arrow,
1543
1758
  xmlns: "http://www.w3.org/2000/svg",
1544
1759
  width: "10",
1545
1760
  height: "16",
@@ -1566,11 +1781,62 @@ var NavigationButton = function NavigationButton(_ref) {
1566
1781
  });
1567
1782
  };
1568
1783
 
1569
- NavigationButton.propTypes = propTypes$6;
1570
- NavigationButton.defaultProps = defaultProps$6;
1784
+ NavigationButton.propTypes = propTypes$7;
1785
+ NavigationButton.defaultProps = defaultProps$7;
1786
+
1787
+ var styles$3 = {"container":"micromag-viewer-partials-arrow-hint-container","inner":"micromag-viewer-partials-arrow-hint-inner","shadowFade":"micromag-viewer-partials-arrow-hint-shadowFade","arrow":"micromag-viewer-partials-arrow-hint-arrow","panX":"micromag-viewer-partials-arrow-hint-panX"};
1788
+
1789
+ var propTypes$6 = {
1790
+ className: PropTypes.string
1791
+ };
1792
+ var defaultProps$6 = {
1793
+ className: null
1794
+ };
1795
+
1796
+ var ArrowHint = function ArrowHint(_ref) {
1797
+ var className = _ref.className;
1798
+ return /*#__PURE__*/React.createElement("div", {
1799
+ className: classNames([styles$3.container, _defineProperty({}, className, className !== null)])
1800
+ }, /*#__PURE__*/React.createElement("div", {
1801
+ className: styles$3.inner
1802
+ }, /*#__PURE__*/React.createElement("svg", {
1803
+ className: styles$3.arrow,
1804
+ xmlns: "http://www.w3.org/2000/svg",
1805
+ width: "10",
1806
+ height: "16",
1807
+ viewBox: "0 0 10 16",
1808
+ fill: "currentColor"
1809
+ }, /*#__PURE__*/React.createElement("polygon", {
1810
+ points: "9.62 4.62 5 0 0.38 4.62 1.44 5.68 4.25 2.87 4.25 14.39 5.75 14.39 5.75 2.87 8.56 5.68 9.62 4.62"
1811
+ }))));
1812
+ };
1813
+
1814
+ ArrowHint.propTypes = propTypes$6;
1815
+ ArrowHint.defaultProps = defaultProps$6;
1571
1816
 
1572
1817
  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","scrubbedTime":"micromag-viewer-partials-seek-bar-scrubbedTime","showTimestamp":"micromag-viewer-partials-seek-bar-showTimestamp"};
1573
1818
 
1819
+ var stopDragEventsPropagation = {
1820
+ onTouchMove: function onTouchMove(e) {
1821
+ return e.stopPropagation();
1822
+ },
1823
+ onTouchStart: function onTouchStart(e) {
1824
+ return e.stopPropagation();
1825
+ },
1826
+ onTouchEnd: function onTouchEnd(e) {
1827
+ return e.stopPropagation();
1828
+ },
1829
+ onPointerMove: function onPointerMove(e) {
1830
+ return e.stopPropagation();
1831
+ },
1832
+ onPointerUp: function onPointerUp(e) {
1833
+ return e.stopPropagation();
1834
+ },
1835
+ onPointerDown: function onPointerDown(e) {
1836
+ return e.stopPropagation();
1837
+ }
1838
+ };
1839
+
1574
1840
  function getFormattedTimestamp(s) {
1575
1841
  var withMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1576
1842
  var sparts = withMilliseconds ? "".concat(s).split('.') : [];
@@ -1638,16 +1904,14 @@ var SeekBar = function SeekBar(_ref) {
1638
1904
  setShowTimestamp = _useState2[1];
1639
1905
 
1640
1906
  var onDrag = useCallback(function (_ref3) {
1641
- var event = _ref3.event,
1642
- _ref3$xy = _slicedToArray(_ref3.xy, 1),
1907
+ _ref3.event;
1908
+ var _ref3$xy = _slicedToArray(_ref3.xy, 1),
1643
1909
  x = _ref3$xy[0],
1644
1910
  elapsedTime = _ref3.elapsedTime,
1645
1911
  active = _ref3.active,
1646
1912
  tap = _ref3.tap,
1647
1913
  currentTarget = _ref3.currentTarget;
1648
1914
 
1649
- event.stopPropagation();
1650
-
1651
1915
  if (!active && elapsedTime > 300) {
1652
1916
  return;
1653
1917
  }
@@ -1662,14 +1926,12 @@ var SeekBar = function SeekBar(_ref) {
1662
1926
  onSeek(newProgress, tap);
1663
1927
  }
1664
1928
  }, [onSeek]);
1665
- var onDragStart = useCallback(function (event) {
1929
+ var onDragStart = useCallback(function () {
1666
1930
  setShowTimestamp(true);
1667
1931
 
1668
1932
  if (onSeekStart !== null) {
1669
1933
  onSeekStart();
1670
1934
  }
1671
-
1672
- event.stopPropagation();
1673
1935
  }, [onSeekStart, setShowTimestamp]);
1674
1936
  var onDragEnd = useCallback(function () {
1675
1937
  if (onSeekEnd !== null) {
@@ -1687,9 +1949,9 @@ var SeekBar = function SeekBar(_ref) {
1687
1949
  filterTaps: true
1688
1950
  }
1689
1951
  });
1690
- return /*#__PURE__*/React.createElement("div", {
1952
+ return /*#__PURE__*/React.createElement("div", Object.assign({
1691
1953
  className: classNames([styles$2.container, (_ref4 = {}, _defineProperty(_ref4, className, className !== null), _defineProperty(_ref4, styles$2.withSeekHead, withSeekHead), _defineProperty(_ref4, styles$2.showTimestamp, showTimestamp), _ref4)])
1692
- }, /*#__PURE__*/React.createElement("div", {
1954
+ }, stopDragEventsPropagation), /*#__PURE__*/React.createElement("div", {
1693
1955
  className: styles$2.inner
1694
1956
  }, /*#__PURE__*/React.createElement("div", {
1695
1957
  className: styles$2.progressBar,
@@ -1853,7 +2115,7 @@ function PlaybackControls(_ref) {
1853
2115
  var isCollapsed = controls && !controlsVisible && playing || !controls && mediaHasAudio;
1854
2116
  return /*#__PURE__*/React.createElement("div", {
1855
2117
  className: classNames([styles$1.container, (_ref4 = {}, _defineProperty(_ref4, className, className !== null), _defineProperty(_ref4, styles$1.withPlayPause, controls && !seekBarOnly), _defineProperty(_ref4, styles$1.withMute, hasMedia || controls), _defineProperty(_ref4, styles$1.withSeekBar, controls), _defineProperty(_ref4, styles$1.withSeekBarOnly, seekBarOnly), _defineProperty(_ref4, styles$1.isCollapsed, isCollapsed), _defineProperty(_ref4, styles$1.isMuted, muted), _defineProperty(_ref4, collapsedClassName, collapsedClassName !== null && isCollapsed), _ref4)])
1856
- }, /*#__PURE__*/React.createElement(Button, {
2118
+ }, /*#__PURE__*/React.createElement(Button$1, {
1857
2119
  className: styles$1.playPauseButton,
1858
2120
  style: {
1859
2121
  color: color
@@ -1911,7 +2173,7 @@ function PlaybackControls(_ref) {
1911
2173
  withSeekHead: !isCollapsed && !seekBarOnly,
1912
2174
  backgroundColor: color,
1913
2175
  progressColor: progressColor
1914
- }), /*#__PURE__*/React.createElement(Button, {
2176
+ }), /*#__PURE__*/React.createElement(Button$1, {
1915
2177
  className: styles$1.muteButton,
1916
2178
  style: {
1917
2179
  color: color
@@ -2074,10 +2336,10 @@ var propTypes$2 = {
2074
2336
  visitor: PropTypes$1.visitor,
2075
2337
  onScreenChange: PropTypes.func,
2076
2338
  tapNextScreenWidthPercent: PropTypes.number,
2077
- neighborScreensActive: PropTypes.number,
2078
2339
  storyIsParsed: PropTypes.bool,
2079
- // landscapeScreenMargin: PropTypes.number,
2080
- // landscapeSmallScreenScale: PropTypes.number,
2340
+ neighborScreensActive: PropTypes.number,
2341
+ neighborScreenOffset: PropTypes.number,
2342
+ neighborScreenScale: PropTypes.number,
2081
2343
  withMetadata: PropTypes.bool,
2082
2344
  withoutGestures: PropTypes.bool,
2083
2345
  withoutMenu: PropTypes.bool,
@@ -2118,10 +2380,10 @@ var defaultProps$2 = {
2118
2380
  visitor: null,
2119
2381
  onScreenChange: null,
2120
2382
  tapNextScreenWidthPercent: 0.8,
2121
- neighborScreensActive: 1,
2122
2383
  storyIsParsed: false,
2123
- // landscapeScreenMargin: 20,
2124
- // landscapeSmallScreenScale: 0.9,
2384
+ neighborScreensActive: 2,
2385
+ neighborScreenOffset: 105,
2386
+ neighborScreenScale: 0.8,
2125
2387
  withMetadata: false,
2126
2388
  withNeighborScreens: false,
2127
2389
  withNavigationHint: false,
@@ -2160,8 +2422,10 @@ var Viewer = function Viewer(_ref) {
2160
2422
  renderContext = _ref.renderContext,
2161
2423
  visitor = _ref.visitor,
2162
2424
  tapNextScreenWidthPercent = _ref.tapNextScreenWidthPercent,
2163
- neighborScreensActive = _ref.neighborScreensActive,
2164
2425
  storyIsParsed = _ref.storyIsParsed,
2426
+ neighborScreensActive = _ref.neighborScreensActive,
2427
+ neighborScreenOffset = _ref.neighborScreenOffset,
2428
+ neighborScreenScale = _ref.neighborScreenScale,
2165
2429
  withMetadata = _ref.withMetadata,
2166
2430
  withoutGestures = _ref.withoutGestures,
2167
2431
  withoutMenu = _ref.withoutMenu,
@@ -2169,9 +2433,9 @@ var Viewer = function Viewer(_ref) {
2169
2433
  withoutShareMenu = _ref.withoutShareMenu,
2170
2434
  withoutMenuShadow = _ref.withoutMenuShadow;
2171
2435
  _ref.withoutFullscreen;
2172
- var withoutNavigationArrow = _ref.withoutNavigationArrow;
2173
- _ref.withoutTransitions;
2174
- var withNeighborScreens = _ref.withNeighborScreens,
2436
+ var withoutNavigationArrow = _ref.withoutNavigationArrow,
2437
+ withoutTransitions = _ref.withoutTransitions,
2438
+ withNeighborScreens = _ref.withNeighborScreens,
2175
2439
  withNavigationHint = _ref.withNavigationHint,
2176
2440
  withoutPlaybackControls = _ref.withoutPlaybackControls,
2177
2441
  menuIsScreenWidth = _ref.menuIsScreenWidth,
@@ -2467,7 +2731,7 @@ var Viewer = function Viewer(_ref) {
2467
2731
 
2468
2732
  var _useDragProgress = useDragProgress({
2469
2733
  progress: screenIndex,
2470
- disabled: !isView,
2734
+ disabled: !isView || withoutTransitions,
2471
2735
  dragDisabled: withoutGestures,
2472
2736
  computeProgress: computeScreenProgress,
2473
2737
  onProgress: onScreenProgress,
@@ -2498,7 +2762,7 @@ var Viewer = function Viewer(_ref) {
2498
2762
  var clamped = Math.min(1, Math.max(0, Math.abs(t)));
2499
2763
  return {
2500
2764
  opacity: 1 - 0.75 * clamped,
2501
- transform: "translateX(".concat(t * 105, "%) scale(").concat(1 - 0.2 * clamped, ")"),
2765
+ transform: "translateX(".concat(t * neighborScreenOffset, "%) scale(").concat(1 - (1 - neighborScreenScale) * clamped, ")"),
2502
2766
  zIndex: screensCount - index
2503
2767
  };
2504
2768
  };
@@ -2593,6 +2857,7 @@ var Viewer = function Viewer(_ref) {
2593
2857
  shareBasePath: basePath,
2594
2858
  screenSize: screenSize,
2595
2859
  menuWidth: menuIsScreenWidth ? screenContainerWidth : null,
2860
+ theme: viewerTheme,
2596
2861
  trackingEnabled: trackingEnabled,
2597
2862
  onClickScreen: onClickScreen,
2598
2863
  onClickCloseViewer: onCloseViewer,
@@ -2614,7 +2879,6 @@ var Viewer = function Viewer(_ref) {
2614
2879
  overflow: !withNeighborScreens ? 'hidden' : null
2615
2880
  }
2616
2881
  }, screens.map(function (screen, i) {
2617
- // const current = i === parseInt(screenIndex, 10);
2618
2882
  var current = i === Math.round(screenIndexProgress); // base current on transition
2619
2883
 
2620
2884
  var active = i >= screenIndex - neighborScreensActive && i <= screenIndex + neighborScreensActive;
@@ -2639,8 +2903,7 @@ var Viewer = function Viewer(_ref) {
2639
2903
  renderContext: renderContext,
2640
2904
  width: screenWidth,
2641
2905
  height: screenHeight,
2642
- scale: screenScale,
2643
- withNavigationHint: withNavigationHint && !withNeighborScreens && current && screenIndex === 0 && !hasInteracted
2906
+ scale: screenScale
2644
2907
  }) : null);
2645
2908
  })), !withoutNavigationArrow && !withNeighborScreens && screenIndex < screens.length - 1 ? /*#__PURE__*/React.createElement(NavigationButton, {
2646
2909
  direction: "next",
@@ -2651,7 +2914,9 @@ var Viewer = function Viewer(_ref) {
2651
2914
  ref: playbackControlsContainerRef
2652
2915
  }, /*#__PURE__*/React.createElement(PlaybackControls, {
2653
2916
  className: styles$6.controls
2654
- })) : null) : null, /*#__PURE__*/React.createElement(WebViewContainer, {
2917
+ })) : null, withNavigationHint && !withNeighborScreens && screenIndex === 0 && !hasInteracted ? /*#__PURE__*/React.createElement(ArrowHint, {
2918
+ className: styles$6.arrowHint
2919
+ }) : null) : null, /*#__PURE__*/React.createElement(WebViewContainer, {
2655
2920
  className: styles$6.webView,
2656
2921
  style: {
2657
2922
  maxWidth: Math.max(screenContainerWidth, 600)