@micromag/viewer 0.3.496 → 0.3.497

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
@@ -14,12 +14,13 @@ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
14
14
  import { animated } from '@react-spring/web';
15
15
  import classNames from 'classnames';
16
16
  import { Helmet } from 'react-helmet';
17
+ import { useIntl, FormattedMessage } from 'react-intl';
17
18
  import EventEmitter from 'wolfy87-eventemitter';
18
19
  import { Label, CloseIcon, ScreenPreview, Screen, ArrowIcon, Button as Button$2, PlayIcon, Spinner, UnmuteIcon, MuteIcon, PauseIcon, Meta, FontFaces } from '@micromag/core/components';
19
20
  import { useDimensionObserver, useTrackEvent, useDragProgress, useMediaProgress, useMediaReady, useMediaState, useParsedStory, useLoadedFonts, useTrackScreenView, useScreenSizeFromElement, useFullscreen } from '@micromag/core/hooks';
20
21
  import { getStyleFromColor, easings, getStyleFromText, getColorAsString, getDeviceScreens } from '@micromag/core/utils';
21
22
  import { ShareIncentive } from '@micromag/elements/all';
22
- import { useIntl, FormattedMessage } from 'react-intl';
23
+ import FocusLock from 'react-focus-lock';
23
24
  import { useSpring } from '@react-spring/core';
24
25
  import Scroll from '@micromag/element-scroll';
25
26
  import ShareOptions from '@micromag/element-share-options';
@@ -194,9 +195,34 @@ function useScreenInteraction() {
194
195
  };
195
196
  }
196
197
 
197
- 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"};
198
+ function checkDraggable(el) {
199
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
200
+ var parentDistance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
201
+ var _ref = options || {},
202
+ _ref$maxParentDistanc = _ref.maxParentDistance,
203
+ maxParentDistance = _ref$maxParentDistanc === void 0 ? 5 : _ref$maxParentDistanc;
204
+ var _ref2 = el || {},
205
+ _ref2$tagName = _ref2.tagName,
206
+ tagName = _ref2$tagName === void 0 ? null : _ref2$tagName,
207
+ _ref2$parentNode = _ref2.parentNode,
208
+ parentNode = _ref2$parentNode === void 0 ? null : _ref2$parentNode,
209
+ _ref2$dataset = _ref2.dataset,
210
+ dataset = _ref2$dataset === void 0 ? {} : _ref2$dataset;
211
+ if (tagName === 'BODY') {
212
+ return false;
213
+ }
214
+ if (typeof dataset.draggable !== 'undefined') {
215
+ return true;
216
+ }
217
+ if (parentDistance < maxParentDistance) {
218
+ return checkDraggable(parentNode, options, parentDistance + 1);
219
+ }
220
+ return false;
221
+ }
222
+
223
+ 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","focus-visible":"micromag-viewer-buttons-button-focus-visible"};
198
224
 
199
- var _excluded$9 = ["type", "theme", "size", "href", "external", "direct", "target", "label", "children", "focusable", "active", "icon", "iconPosition", "disabled", "loading", "disableOnLoading", "withoutTheme", "asLink", "onClick", "className", "iconClassName", "labelClassName", "refButton"];
225
+ var _excluded$a = ["type", "theme", "size", "href", "external", "direct", "target", "label", "children", "focusable", "active", "icon", "iconPosition", "disabled", "loading", "disableOnLoading", "withoutTheme", "asLink", "ariaLabel", "onClick", "className", "iconClassName", "labelClassName", "refButton"];
200
226
  var propTypes$n = {
201
227
  type: PropTypes.string,
202
228
  theme: PropTypes$1.buttonTheme,
@@ -216,6 +242,7 @@ var propTypes$n = {
216
242
  disableOnLoading: PropTypes.bool,
217
243
  withoutTheme: PropTypes.bool,
218
244
  asLink: PropTypes.bool,
245
+ ariaLabel: PropTypes.string,
219
246
  className: PropTypes.string,
220
247
  iconClassName: PropTypes.string,
221
248
  labelClassName: PropTypes.string,
@@ -243,6 +270,7 @@ var defaultProps$n = {
243
270
  disableOnLoading: true,
244
271
  withoutTheme: false,
245
272
  asLink: false,
273
+ ariaLabel: null,
246
274
  className: null,
247
275
  iconClassName: null,
248
276
  labelClassName: null,
@@ -268,12 +296,13 @@ var Button = function Button(_ref) {
268
296
  disableOnLoading = _ref.disableOnLoading;
269
297
  _ref.withoutTheme;
270
298
  var asLink = _ref.asLink,
299
+ ariaLabel = _ref.ariaLabel,
271
300
  onClick = _ref.onClick,
272
301
  className = _ref.className,
273
302
  iconClassName = _ref.iconClassName,
274
303
  labelClassName = _ref.labelClassName,
275
304
  refButton = _ref.refButton,
276
- props = _objectWithoutProperties(_ref, _excluded$9);
305
+ props = _objectWithoutProperties(_ref, _excluded$a);
277
306
  var finalLabel = label || children;
278
307
  var text = finalLabel !== null ? /*#__PURE__*/React.createElement(Label, null, finalLabel) : null;
279
308
  var hasChildren = label !== null && children !== null;
@@ -328,6 +357,7 @@ var Button = function Button(_ref) {
328
357
  onClick: onClick,
329
358
  disabled: disabled || disableOnLoading && loading,
330
359
  ref: refButton,
360
+ "aria-label": ariaLabel,
331
361
  tabIndex: focusable ? '0' : '-1'
332
362
  }), content);
333
363
  };
@@ -335,9 +365,9 @@ Button.propTypes = propTypes$n;
335
365
  Button.defaultProps = defaultProps$n;
336
366
  var Button$1 = Button;
337
367
 
338
- var styles$f = {"container":"micromag-viewer-buttons-icon-button-container","label":"micromag-viewer-buttons-icon-button-label","icon":"micromag-viewer-buttons-icon-button-icon"};
368
+ var styles$f = {"container":"micromag-viewer-buttons-icon-button-container","label":"micromag-viewer-buttons-icon-button-label","icon":"micromag-viewer-buttons-icon-button-icon","focus-visible":"micromag-viewer-buttons-icon-button-focus-visible"};
339
369
 
340
- var _excluded$8 = ["iconClassName", "className"];
370
+ var _excluded$9 = ["iconClassName", "className"];
341
371
  var propTypes$m = {
342
372
  iconClassName: PropTypes.string,
343
373
  className: PropTypes.string
@@ -349,7 +379,7 @@ var defaultProps$m = {
349
379
  var IconButton = function IconButton(_ref) {
350
380
  var iconClassName = _ref.iconClassName,
351
381
  className = _ref.className,
352
- props = _objectWithoutProperties(_ref, _excluded$8);
382
+ props = _objectWithoutProperties(_ref, _excluded$9);
353
383
  return /*#__PURE__*/React.createElement(Button$1, Object.assign({
354
384
  className: classNames([styles$f.container, _defineProperty({}, className, className !== null)]),
355
385
  labelClassName: styles$f.label,
@@ -360,7 +390,7 @@ IconButton.propTypes = propTypes$m;
360
390
  IconButton.defaultProps = defaultProps$m;
361
391
  var IconButton$1 = IconButton;
362
392
 
363
- var _excluded$7 = ["single", "className"];
393
+ var _excluded$8 = ["single", "className"];
364
394
  var propTypes$l = {
365
395
  single: PropTypes.bool,
366
396
  className: PropTypes.string
@@ -372,7 +402,7 @@ var defaultProps$l = {
372
402
  var CloseMenuButton = function CloseMenuButton(_ref) {
373
403
  var single = _ref.single,
374
404
  className = _ref.className,
375
- props = _objectWithoutProperties(_ref, _excluded$7);
405
+ props = _objectWithoutProperties(_ref, _excluded$8);
376
406
  var intl = useIntl();
377
407
  return /*#__PURE__*/React.createElement(IconButton$1, Object.assign({
378
408
  className: classNames([_defineProperty({}, className, className !== null)]),
@@ -419,7 +449,7 @@ CloseMenuButton.propTypes = propTypes$l;
419
449
  CloseMenuButton.defaultProps = defaultProps$l;
420
450
  var CloseMenuButton$1 = CloseMenuButton;
421
451
 
422
- var _excluded$6 = ["className", "iconClassName"];
452
+ var _excluded$7 = ["className", "iconClassName"];
423
453
  var propTypes$k = {
424
454
  className: PropTypes.string,
425
455
  iconClassName: PropTypes.string
@@ -431,7 +461,7 @@ var defaultProps$k = {
431
461
  var MenuButton = function MenuButton(_ref) {
432
462
  var className = _ref.className;
433
463
  _ref.iconClassName;
434
- var props = _objectWithoutProperties(_ref, _excluded$6);
464
+ var props = _objectWithoutProperties(_ref, _excluded$7);
435
465
  var intl = useIntl();
436
466
  return /*#__PURE__*/React.createElement(IconButton$1, Object.assign({
437
467
  className: classNames([_defineProperty({}, className, className !== null)]),
@@ -472,7 +502,7 @@ MenuButton.propTypes = propTypes$k;
472
502
  MenuButton.defaultProps = defaultProps$k;
473
503
  var MenuButton$1 = MenuButton;
474
504
 
475
- var _excluded$5 = ["className"];
505
+ var _excluded$6 = ["className"];
476
506
  var propTypes$j = {
477
507
  className: PropTypes.string
478
508
  };
@@ -481,7 +511,7 @@ var defaultProps$j = {
481
511
  };
482
512
  var ShareButton = function ShareButton(_ref) {
483
513
  var className = _ref.className,
484
- props = _objectWithoutProperties(_ref, _excluded$5);
514
+ props = _objectWithoutProperties(_ref, _excluded$6);
485
515
  var intl = useIntl();
486
516
  return /*#__PURE__*/React.createElement(IconButton$1, Object.assign({
487
517
  className: classNames([_defineProperty({}, className, className !== null)]),
@@ -621,7 +651,7 @@ ViewerMenuContainer.propTypes = propTypes$h;
621
651
  ViewerMenuContainer.defaultProps = defaultProps$h;
622
652
  var MenuContainer = ViewerMenuContainer;
623
653
 
624
- 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"};
654
+ 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","focus-visible":"micromag-viewer-menus-menu-dot-focus-visible","subDot":"micromag-viewer-menus-menu-dot-subDot","dots":"micromag-viewer-menus-menu-dot-dots","outlineBounce":"micromag-viewer-menus-menu-dot-outlineBounce"};
625
655
 
626
656
  var propTypes$g = {
627
657
  current: PropTypes.bool,
@@ -715,7 +745,7 @@ var MenuDot = ViewerMenuDot;
715
745
 
716
746
  var styles$b = {"container":"micromag-viewer-menus-menu-dots-container","closeButton":"micromag-viewer-menus-menu-dots-closeButton","focus-visible":"micromag-viewer-menus-menu-dots-focus-visible","items":"micromag-viewer-menus-menu-dots-items","item":"micromag-viewer-menus-menu-dots-item","buttons":"micromag-viewer-menus-menu-dots-buttons","vertical":"micromag-viewer-menus-menu-dots-vertical"};
717
747
 
718
- var _excluded$4 = ["direction", "items", "onClickDot", "onClickScreensMenu", "colors", "closeable", "buttons", "withItemClick", "withoutScreensMenu", "onClose", "className"];
748
+ var _excluded$5 = ["direction", "items", "onClickDot", "onClickScreensMenu", "colors", "closeable", "buttons", "withItemClick", "withoutScreensMenu", "onClose", "className"];
719
749
  var propTypes$f = {
720
750
  direction: PropTypes.oneOf(['horizontal', 'vertical']),
721
751
  items: PropTypes$1.menuItems,
@@ -757,7 +787,7 @@ var ViewerMenuDots = function ViewerMenuDots(_ref) {
757
787
  withoutScreensMenu = _ref.withoutScreensMenu,
758
788
  onClose = _ref.onClose,
759
789
  className = _ref.className,
760
- props = _objectWithoutProperties(_ref, _excluded$4);
790
+ props = _objectWithoutProperties(_ref, _excluded$5);
761
791
  var _ref2 = colors || {},
762
792
  _ref2$primary = _ref2.primary,
763
793
  primary = _ref2$primary === void 0 ? 'rgba(255, 255, 255, 1)' : _ref2$primary;
@@ -876,7 +906,7 @@ StackIcon.propTypes = propTypes$e;
876
906
  StackIcon.defaultProps = defaultProps$e;
877
907
  var StackIcon$1 = StackIcon;
878
908
 
879
- var styles$a = {"button":"micromag-viewer-menus-menu-screen-button","container":"micromag-viewer-menus-menu-screen-container","focus-visible":"micromag-viewer-menus-menu-screen-focus-visible","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"};
909
+ var styles$a = {"button":"micromag-viewer-menus-menu-screen-button","container":"micromag-viewer-menus-menu-screen-container","focus-visible":"micromag-viewer-menus-menu-screen-focus-visible","isCurrent":"micromag-viewer-menus-menu-screen-isCurrent","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","screen":"micromag-viewer-menus-menu-screen-screen","pulse":"micromag-viewer-menus-menu-screen-pulse"};
880
910
 
881
911
  var propTypes$d = {
882
912
  className: PropTypes.string,
@@ -972,7 +1002,7 @@ var MenuScreen = ViewerMenuScreen;
972
1002
 
973
1003
  var styles$9 = {"scroll":"micromag-viewer-menus-menu-preview-scroll","container":"micromag-viewer-menus-menu-preview-container","disabled":"micromag-viewer-menus-menu-preview-disabled","screenButton":"micromag-viewer-menus-menu-preview-screenButton","content":"micromag-viewer-menus-menu-preview-content","buttons":"micromag-viewer-menus-menu-preview-buttons","organisation":"micromag-viewer-menus-menu-preview-organisation","icon":"micromag-viewer-menus-menu-preview-icon","titleContainer":"micromag-viewer-menus-menu-preview-titleContainer","headerContainer":"micromag-viewer-menus-menu-preview-headerContainer","badge":"micromag-viewer-menus-menu-preview-badge","title":"micromag-viewer-menus-menu-preview-title","nav":"micromag-viewer-menus-menu-preview-nav","items":"micromag-viewer-menus-menu-preview-items","item":"micromag-viewer-menus-menu-preview-item","inner":"micromag-viewer-menus-menu-preview-inner","frame":"micromag-viewer-menus-menu-preview-frame","screen":"micromag-viewer-menus-menu-preview-screen","intro":"micromag-viewer-menus-menu-preview-intro"};
974
1004
 
975
- var _excluded$3 = ["textAlign"];
1005
+ var _excluded$4 = ["textAlign"];
976
1006
  var propTypes$c = {
977
1007
  viewerTheme: PropTypes$1.viewerTheme,
978
1008
  header: PropTypes.node,
@@ -1054,7 +1084,7 @@ var ViewerMenuPreview = function ViewerMenuPreview(_ref) {
1054
1084
  // eslint-disable-next-line no-unused-vars
1055
1085
  var _ref6 = titleStyles || {};
1056
1086
  _ref6.textAlign;
1057
- var otherTitleStyles = _objectWithoutProperties(_ref6, _excluded$3);
1087
+ var otherTitleStyles = _objectWithoutProperties(_ref6, _excluded$4);
1058
1088
  var finalTitleStyles = titleStyles !== null ? getStyleFromText(otherTitleStyles) : null;
1059
1089
  // const { url: brandLogoUrl = null } = brandLogo || {};
1060
1090
  var _useState = useState([]),
@@ -1331,7 +1361,7 @@ ViewerMenuShare.propTypes = propTypes$a;
1331
1361
  ViewerMenuShare.defaultProps = defaultProps$a;
1332
1362
  var MenuShare = ViewerMenuShare;
1333
1363
 
1334
- var styles$6 = {"container":"micromag-viewer-container","screenContainer":"micromag-viewer-screenContainer","screensFrame":"micromag-viewer-screensFrame","menuShare":"micromag-viewer-menuShare","menuPreview":"micromag-viewer-menuPreview","menuContainer":"micromag-viewer-menuContainer","focus-visible":"micromag-viewer-focus-visible","landscape":"micromag-viewer-landscape","hideMenu":"micromag-viewer-hideMenu","menuNavContainer":"micromag-viewer-menuNavContainer","menuTopContainer":"micromag-viewer-menuTopContainer","dots":"micromag-viewer-dots","disableMenu":"micromag-viewer-disableMenu","content":"micromag-viewer-content","withoutGestures":"micromag-viewer-withoutGestures","fadeMenu":"micromag-viewer-fadeMenu","withShadow":"micromag-viewer-withShadow","isOpened":"micromag-viewer-isOpened","menuItem":"micromag-viewer-menuItem","menuButton":"micromag-viewer-menuButton","slidingButton":"micromag-viewer-slidingButton","screensMenuButtonToggled":"micromag-viewer-screensMenuButtonToggled","navButton":"micromag-viewer-navButton","previous":"micromag-viewer-previous","next":"micromag-viewer-next","screen":"micromag-viewer-screen","current":"micromag-viewer-current","playbackControls":"micromag-viewer-playbackControls","arrowHint":"micromag-viewer-arrowHint","webView":"micromag-viewer-webView","shareIncentiveContainer":"micromag-viewer-shareIncentiveContainer","shareIncentive":"micromag-viewer-shareIncentive","shareIncentiveVisible":"micromag-viewer-shareIncentiveVisible"};
1364
+ var styles$6 = {"container":"micromag-viewer-container","screenContainer":"micromag-viewer-screenContainer","screensFrame":"micromag-viewer-screensFrame","menuShare":"micromag-viewer-menuShare","menuPreview":"micromag-viewer-menuPreview","menuContainer":"micromag-viewer-menuContainer","focus-visible":"micromag-viewer-focus-visible","landscape":"micromag-viewer-landscape","hideMenu":"micromag-viewer-hideMenu","menuNavContainer":"micromag-viewer-menuNavContainer","menuTopContainer":"micromag-viewer-menuTopContainer","dots":"micromag-viewer-dots","disableMenu":"micromag-viewer-disableMenu","content":"micromag-viewer-content","withoutGestures":"micromag-viewer-withoutGestures","ariaAnnouncement":"micromag-viewer-ariaAnnouncement","accessibilityLinks":"micromag-viewer-accessibilityLinks","accessibilityButton":"micromag-viewer-accessibilityButton","disabled":"micromag-viewer-disabled","tooltip":"micromag-viewer-tooltip","fadeMenu":"micromag-viewer-fadeMenu","withShadow":"micromag-viewer-withShadow","isOpened":"micromag-viewer-isOpened","menuItem":"micromag-viewer-menuItem","menuButton":"micromag-viewer-menuButton","slidingButton":"micromag-viewer-slidingButton","screensMenuButtonToggled":"micromag-viewer-screensMenuButtonToggled","navButton":"micromag-viewer-navButton","previous":"micromag-viewer-previous","next":"micromag-viewer-next","screen":"micromag-viewer-screen","current":"micromag-viewer-current","playbackControls":"micromag-viewer-playbackControls","arrowHint":"micromag-viewer-arrowHint","webView":"micromag-viewer-webView","shareIncentiveContainer":"micromag-viewer-shareIncentiveContainer","shareIncentive":"micromag-viewer-shareIncentive","shareIncentiveVisible":"micromag-viewer-shareIncentiveVisible"};
1335
1365
 
1336
1366
  var propTypes$9 = {
1337
1367
  story: PropTypes$1.story.isRequired,
@@ -1580,8 +1610,11 @@ var ViewerMenu = function ViewerMenu(_ref) {
1580
1610
  progress: shareOpened ? 1 : 0,
1581
1611
  computeProgress: shareOpened ? computeShareProgressClose : computeShareProgress,
1582
1612
  springParams: springParams,
1583
- drapOptions: {
1584
- axis: 'y'
1613
+ dragOptions: {
1614
+ axis: 'y',
1615
+ pointer: {
1616
+ keys: false
1617
+ }
1585
1618
  }
1586
1619
  }),
1587
1620
  bindShareDrag = _useDragProgress.bind,
@@ -1624,7 +1657,10 @@ var ViewerMenu = function ViewerMenu(_ref) {
1624
1657
  computeProgress: menuOpened ? computeMenuProgressClose : computeMenuProgress,
1625
1658
  springParams: springParams,
1626
1659
  drapOptions: {
1627
- axis: 'y'
1660
+ axis: 'y',
1661
+ pointer: {
1662
+ keys: false
1663
+ }
1628
1664
  }
1629
1665
  }),
1630
1666
  bindMenuDrag = _useDragProgress2.bind,
@@ -1677,14 +1713,18 @@ var ViewerMenu = function ViewerMenu(_ref) {
1677
1713
  iconPosition: "left",
1678
1714
  focusable: !shareOpened
1679
1715
  }),
1680
- toggledButton: /*#__PURE__*/React.createElement(CloseMenuButton$1, {
1716
+ toggledButton: /*#__PURE__*/React.createElement(FocusLock, {
1717
+ group: "share",
1718
+ disabled: !shareOpened,
1719
+ returnFocus: true
1720
+ }, /*#__PURE__*/React.createElement(CloseMenuButton$1, {
1681
1721
  className: styles$6.menuButton,
1682
1722
  onClick: onCloseShare,
1683
1723
  theme: menuTheme,
1684
1724
  iconPosition: "left",
1685
1725
  focusable: shareOpened,
1686
1726
  single: true
1687
- }),
1727
+ })),
1688
1728
  progressSpring: shareOpenedProgress
1689
1729
  }) : null, afterShareMenuButton) : null, !withoutScreensMenu || beforeScreensMenuButton !== null ? /*#__PURE__*/React.createElement("div", Object.assign({
1690
1730
  className: styles$6.menuItem
@@ -1697,13 +1737,17 @@ var ViewerMenu = function ViewerMenu(_ref) {
1697
1737
  theme: menuTheme,
1698
1738
  focusable: !menuOpened
1699
1739
  }),
1700
- toggledButton: /*#__PURE__*/React.createElement(CloseMenuButton$1, {
1740
+ toggledButton: /*#__PURE__*/React.createElement(FocusLock, {
1741
+ group: "screens",
1742
+ disabled: !menuOpened,
1743
+ returnFocus: true
1744
+ }, /*#__PURE__*/React.createElement(CloseMenuButton$1, {
1701
1745
  className: styles$6.menuButton,
1702
1746
  onClick: onCloseMenu,
1703
1747
  theme: menuTheme,
1704
1748
  iconPosition: "right",
1705
1749
  focusable: menuOpened
1706
- }),
1750
+ })),
1707
1751
  progressSpring: menuOpenedProgress,
1708
1752
  toggledButtonClassName: styles$6.screensMenuButtonToggled
1709
1753
  }) : null) : null), /*#__PURE__*/React.createElement(MenuDots, Object.assign({}, menuTheme, {
@@ -1722,7 +1766,11 @@ var ViewerMenu = function ViewerMenu(_ref) {
1722
1766
  className: styles$6.menuContainer,
1723
1767
  progressSpring: shareOpenedProgress,
1724
1768
  theme: viewerTheme
1725
- }, draggingShare || shareOpened ? /*#__PURE__*/React.createElement(MenuShare, {
1769
+ }, draggingShare || shareOpened ? /*#__PURE__*/React.createElement(FocusLock, {
1770
+ group: "share",
1771
+ disabled: !shareOpened,
1772
+ returnFocus: true
1773
+ }, /*#__PURE__*/React.createElement(MenuShare, {
1726
1774
  viewerTheme: viewerTheme,
1727
1775
  className: styles$6.menuShare,
1728
1776
  title: title,
@@ -1735,11 +1783,15 @@ var ViewerMenu = function ViewerMenu(_ref) {
1735
1783
  shareUrl: shareUrl,
1736
1784
  onShare: onShare,
1737
1785
  onClose: onCloseShare
1738
- }) : null), /*#__PURE__*/React.createElement(MenuContainer, {
1786
+ })) : null), /*#__PURE__*/React.createElement(MenuContainer, {
1739
1787
  className: styles$6.menuContainer,
1740
1788
  progressSpring: menuOpenedProgress,
1741
1789
  theme: viewerTheme
1742
- }, menuMounted ? /*#__PURE__*/React.createElement(MenuPreview, {
1790
+ }, menuMounted ? /*#__PURE__*/React.createElement(FocusLock, {
1791
+ group: "screens",
1792
+ disabled: !menuOpened,
1793
+ returnFocus: true
1794
+ }, /*#__PURE__*/React.createElement(MenuPreview, {
1743
1795
  viewerTheme: viewerTheme,
1744
1796
  header: previewHeader,
1745
1797
  footer: previewFooter,
@@ -1758,7 +1810,7 @@ var ViewerMenu = function ViewerMenu(_ref) {
1758
1810
  toggleFullscreen: toggleFullscreen,
1759
1811
  fullscreenActive: fullscreenActive,
1760
1812
  fullscreenEnabled: fullscreenEnabled
1761
- }) : null));
1813
+ })) : null));
1762
1814
  };
1763
1815
  ViewerMenu.propTypes = propTypes$9;
1764
1816
  ViewerMenu.defaultProps = defaultProps$9;
@@ -1847,8 +1899,9 @@ function ViewerScreen(_ref) {
1847
1899
  ViewerScreen.propTypes = propTypes$8;
1848
1900
  ViewerScreen.defaultProps = defaultProps$8;
1849
1901
 
1850
- var styles$4 = {"arrow":"micromag-viewer-buttons-navigation-button-arrow","next":"micromag-viewer-buttons-navigation-button-next","previous":"micromag-viewer-buttons-navigation-button-previous"};
1902
+ var styles$4 = {"container":"micromag-viewer-buttons-navigation-button-container","arrow":"micromag-viewer-buttons-navigation-button-arrow","next":"micromag-viewer-buttons-navigation-button-next","previous":"micromag-viewer-buttons-navigation-button-previous"};
1851
1903
 
1904
+ var _excluded$3 = ["direction", "onClick", "className"];
1852
1905
  var propTypes$7 = {
1853
1906
  direction: PropTypes.oneOf(['previous', 'next']),
1854
1907
  onClick: PropTypes.func,
@@ -1862,8 +1915,9 @@ var defaultProps$7 = {
1862
1915
  var NavigationButton = function NavigationButton(_ref) {
1863
1916
  var direction = _ref.direction,
1864
1917
  _onClick = _ref.onClick,
1865
- className = _ref.className;
1866
- return /*#__PURE__*/React.createElement(IconButton$1, {
1918
+ className = _ref.className,
1919
+ props = _objectWithoutProperties(_ref, _excluded$3);
1920
+ return /*#__PURE__*/React.createElement(IconButton$1, Object.assign({
1867
1921
  className: classNames([styles$4.container, styles$4[direction], _defineProperty({}, className, className !== null)]),
1868
1922
  onClick: function onClick(e) {
1869
1923
  e.stopPropagation();
@@ -1879,23 +1933,8 @@ var NavigationButton = function NavigationButton(_ref) {
1879
1933
  fill: "currentColor"
1880
1934
  }, /*#__PURE__*/React.createElement("polygon", {
1881
1935
  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"
1882
- })),
1883
- label: /*#__PURE__*/React.createElement("span", {
1884
- className: "sr-only"
1885
- }, direction === 'previous' ? /*#__PURE__*/React.createElement(FormattedMessage, {
1886
- id: "zYH/31",
1887
- defaultMessage: [{
1888
- "type": 0,
1889
- "value": "Go to previous screen"
1890
- }]
1891
- }) : /*#__PURE__*/React.createElement(FormattedMessage, {
1892
- id: "v9bqYj",
1893
- defaultMessage: [{
1894
- "type": 0,
1895
- "value": "Go to next screen"
1896
- }]
1897
1936
  }))
1898
- });
1937
+ }, props));
1899
1938
  };
1900
1939
  NavigationButton.propTypes = propTypes$7;
1901
1940
  NavigationButton.defaultProps = defaultProps$7;
@@ -1923,7 +1962,7 @@ ArrowHint.propTypes = propTypes$6;
1923
1962
  ArrowHint.defaultProps = defaultProps$6;
1924
1963
  var ArrowHint$1 = ArrowHint;
1925
1964
 
1926
- var styles$2 = {"track":"micromag-viewer-partials-seek-bar-track","progress":"micromag-viewer-partials-seek-bar-progress","inner":"micromag-viewer-partials-seek-bar-inner","progressBarContainer":"micromag-viewer-partials-seek-bar-progressBarContainer","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"};
1965
+ var styles$2 = {"track":"micromag-viewer-partials-seek-bar-track","progress":"micromag-viewer-partials-seek-bar-progress","inner":"micromag-viewer-partials-seek-bar-inner","progressBarContainer":"micromag-viewer-partials-seek-bar-progressBarContainer","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","focus-visible":"micromag-viewer-partials-seek-bar-focus-visible"};
1927
1966
 
1928
1967
  var stopDragEventsPropagation = {
1929
1968
  onTouchMove: function onTouchMove(e) {
@@ -2020,10 +2059,15 @@ var SeekBar = function SeekBar(_ref3) {
2020
2059
  _useState2 = _slicedToArray(_useState, 2),
2021
2060
  showTimestamp = _useState2[0],
2022
2061
  setShowTimestamp = _useState2[1];
2023
- var onDrag = useCallback(function (_ref5) {
2062
+ var startProgressRef = useRef(progress);
2063
+ var onDrag = useCallback(
2064
+ // eslint-disable-next-line no-unused-vars
2065
+ function (_ref5) {
2024
2066
  var _ref5$xy = _slicedToArray(_ref5.xy, 1),
2025
- x = _ref5$xy[0],
2026
- elapsedTime = _ref5.elapsedTime,
2067
+ xOffset = _ref5$xy[0],
2068
+ _ref5$movement = _slicedToArray(_ref5.movement, 1);
2069
+ _ref5$movement[0];
2070
+ var elapsedTime = _ref5.elapsedTime,
2027
2071
  active = _ref5.active,
2028
2072
  tap = _ref5.tap,
2029
2073
  currentTarget = _ref5.currentTarget;
@@ -2035,21 +2079,28 @@ var SeekBar = function SeekBar(_ref3) {
2035
2079
  return;
2036
2080
  }
2037
2081
  var _currentTarget$getBou = currentTarget.getBoundingClientRect(),
2038
- _currentTarget$getBou2 = _currentTarget$getBou.left,
2039
- elX = _currentTarget$getBou2 === void 0 ? 0 : _currentTarget$getBou2,
2040
- _currentTarget$getBou3 = _currentTarget$getBou.width,
2041
- elWidth = _currentTarget$getBou3 === void 0 ? 0 : _currentTarget$getBou3;
2042
- var newProgress = Math.max(0, Math.min(1, (x - elX) / elWidth));
2082
+ _currentTarget$getBou2 = _currentTarget$getBou.width,
2083
+ elWidth = _currentTarget$getBou2 === void 0 ? 0 : _currentTarget$getBou2,
2084
+ _currentTarget$getBou3 = _currentTarget$getBou.x,
2085
+ xGap = _currentTarget$getBou3 === void 0 ? null : _currentTarget$getBou3;
2086
+ var newProgress = null;
2087
+ if (tap) {
2088
+ newProgress = Math.max(0, Math.min(1, (xOffset - xGap) / elWidth));
2089
+ } else {
2090
+ // startProgressRef.current + xMovement
2091
+ newProgress = Math.max(0, Math.min(1, (xOffset - xGap) / elWidth));
2092
+ }
2043
2093
  if (onSeek !== null) {
2044
2094
  onSeek(newProgress, tap);
2045
2095
  }
2046
2096
  }, [onSeek, onClick, collapsed]);
2047
2097
  var onDragStart = useCallback(function () {
2098
+ startProgressRef.current = progress;
2048
2099
  setShowTimestamp(true);
2049
2100
  if (onSeekStart !== null) {
2050
2101
  onSeekStart();
2051
2102
  }
2052
- }, [onSeekStart, setShowTimestamp]);
2103
+ }, [progress, onSeekStart, setShowTimestamp]);
2053
2104
  var onDragEnd = useCallback(function () {
2054
2105
  if (onSeekEnd !== null) {
2055
2106
  setShowTimestamp(false);
@@ -2096,6 +2147,27 @@ var SeekBar = function SeekBar(_ref3) {
2096
2147
  }
2097
2148
  })), /*#__PURE__*/React.createElement("button", Object.assign({}, bind(), {
2098
2149
  type: "button",
2150
+ role: "slider",
2151
+ "aria-valuemin": 0,
2152
+ "aria-valuemax": 100,
2153
+ "aria-valuenow": progress,
2154
+ "aria-valuetext": intl.formatMessage({
2155
+ id: "C1VUEY",
2156
+ defaultMessage: [{
2157
+ "type": 1,
2158
+ "value": "current"
2159
+ }, {
2160
+ "type": 0,
2161
+ "value": " of "
2162
+ }, {
2163
+ "type": 1,
2164
+ "value": "duration"
2165
+ }]
2166
+ }, {
2167
+ current: getFormattedTimestamp(currentTime, duration < SHOW_MILLISECONDS_THRESHOLD),
2168
+ duration: getFormattedTimestamp(duration, duration < SHOW_MILLISECONDS_THRESHOLD)
2169
+ }),
2170
+ "data-draggable": true,
2099
2171
  className: styles$2.track,
2100
2172
  title: intl.formatMessage({
2101
2173
  id: "G1Gyjn",
@@ -2105,10 +2177,10 @@ var SeekBar = function SeekBar(_ref3) {
2105
2177
  }]
2106
2178
  }),
2107
2179
  "aria-label": intl.formatMessage({
2108
- id: "G1Gyjn",
2180
+ id: "2prwZ7",
2109
2181
  defaultMessage: [{
2110
2182
  "type": 0,
2111
- "value": "Seek"
2183
+ "value": "Progress slider"
2112
2184
  }]
2113
2185
  }),
2114
2186
  tabIndex: focusable ? '0' : '-1'
@@ -2118,7 +2190,7 @@ SeekBar.propTypes = propTypes$5;
2118
2190
  SeekBar.defaultProps = defaultProps$5;
2119
2191
  var SeekBar$1 = SeekBar;
2120
2192
 
2121
- var styles$1 = {"suggest":"micromag-viewer-partials-playback-controls-suggest","playPauseButton":"micromag-viewer-partials-playback-controls-playPauseButton","muteButton":"micromag-viewer-partials-playback-controls-muteButton","container":"micromag-viewer-partials-playback-controls-container","icon":"micromag-viewer-partials-playback-controls-icon","offset":"micromag-viewer-partials-playback-controls-offset","spinner":"micromag-viewer-partials-playback-controls-spinner","withPlayPause":"micromag-viewer-partials-playback-controls-withPlayPause","withSuggestPlay":"micromag-viewer-partials-playback-controls-withSuggestPlay","isCollapsed":"micromag-viewer-partials-playback-controls-isCollapsed","loading":"micromag-viewer-partials-playback-controls-loading","hidden":"micromag-viewer-partials-playback-controls-hidden","notPlaying":"micromag-viewer-partials-playback-controls-notPlaying","isMuted":"micromag-viewer-partials-playback-controls-isMuted","withMute":"micromag-viewer-partials-playback-controls-withMute","withSeekBar":"micromag-viewer-partials-playback-controls-withSeekBar","seekBar":"micromag-viewer-partials-playback-controls-seekBar","withSeekBarOnly":"micromag-viewer-partials-playback-controls-withSeekBarOnly"};
2193
+ var styles$1 = {"suggest":"micromag-viewer-partials-playback-controls-suggest","playPauseButton":"micromag-viewer-partials-playback-controls-playPauseButton","muteButton":"micromag-viewer-partials-playback-controls-muteButton","container":"micromag-viewer-partials-playback-controls-container","icon":"micromag-viewer-partials-playback-controls-icon","offset":"micromag-viewer-partials-playback-controls-offset","spinner":"micromag-viewer-partials-playback-controls-spinner","withPlayPause":"micromag-viewer-partials-playback-controls-withPlayPause","withSuggestPlay":"micromag-viewer-partials-playback-controls-withSuggestPlay","isCollapsed":"micromag-viewer-partials-playback-controls-isCollapsed","loading":"micromag-viewer-partials-playback-controls-loading","hidden":"micromag-viewer-partials-playback-controls-hidden","focus-visible":"micromag-viewer-partials-playback-controls-focus-visible","notPlaying":"micromag-viewer-partials-playback-controls-notPlaying","isMuted":"micromag-viewer-partials-playback-controls-isMuted","withMute":"micromag-viewer-partials-playback-controls-withMute","withSeekBar":"micromag-viewer-partials-playback-controls-withSeekBar","seekBar":"micromag-viewer-partials-playback-controls-seekBar","withSeekBarOnly":"micromag-viewer-partials-playback-controls-withSeekBarOnly"};
2122
2194
 
2123
2195
  var propTypes$4 = {
2124
2196
  defaultColor: PropTypes.shape({
@@ -2186,6 +2258,9 @@ function PlaybackControls(_ref) {
2186
2258
  buffering = _useMediaState.buffering,
2187
2259
  playing = _useMediaState.playing,
2188
2260
  muted = _useMediaState.muted;
2261
+
2262
+ // console.log(controlsVisible);
2263
+
2189
2264
  useEffect(function () {
2190
2265
  var id = null;
2191
2266
  setShowLoading(false);
@@ -2252,7 +2327,9 @@ function PlaybackControls(_ref) {
2252
2327
  setPlaying(false);
2253
2328
  }
2254
2329
  }, [playing, setWasPlaying, setPlaying]);
2255
- var onSeek = useCallback(function (progress) {
2330
+ var onSeek = useCallback(
2331
+ // eslint-disable-next-line no-unused-vars
2332
+ function (progress) {
2256
2333
  if (mediaElement !== null) {
2257
2334
  mediaElement.currentTime = progress * mediaElement.duration;
2258
2335
  }
@@ -2282,21 +2359,8 @@ function PlaybackControls(_ref) {
2282
2359
  }) : /*#__PURE__*/React.createElement(PlayIcon, {
2283
2360
  className: styles$1.icon
2284
2361
  });
2285
- var playLabel = playing ? intl.formatMessage({
2286
- id: "mTqcmA",
2287
- defaultMessage: [{
2288
- "type": 0,
2289
- "value": "Pause"
2290
- }]
2291
- }) : intl.formatMessage({
2292
- id: "ahSpiH",
2293
- defaultMessage: [{
2294
- "type": 0,
2295
- "value": "Play"
2296
- }]
2297
- });
2298
2362
  return /*#__PURE__*/React.createElement("div", {
2299
- className: classNames([styles$1.container, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, className, className !== null), styles$1.withPlayPause, controls && (!seekBarOnly || !playing)), styles$1.withSuggestPlay, controlsSuggestPlay), styles$1.withMute, hasMedia || controls), styles$1.withSeekBar, controls), styles$1.withSeekBarOnly, seekBarOnly), styles$1.isCollapsed, isCollapsed), styles$1.isMuted, muted), collapsedClassName, collapsedClassName !== null && isCollapsed)])
2363
+ className: classNames([styles$1.container, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, className, className !== null), styles$1.withPlayPause, controlsVisible && controls && (!seekBarOnly || !playing)), styles$1.withSuggestPlay, controlsSuggestPlay), styles$1.withMute, hasMedia || controls), styles$1.withSeekBar, controls), styles$1.withSeekBarOnly, seekBarOnly), styles$1.isCollapsed, isCollapsed), styles$1.isMuted, muted), collapsedClassName, collapsedClassName !== null && isCollapsed)])
2300
2364
  }, controlsSuggestPlay && !finalShowLoading ? /*#__PURE__*/React.createElement(Button$2, {
2301
2365
  className: classNames([styles$1.suggest]),
2302
2366
  style: {
@@ -2307,32 +2371,40 @@ function PlaybackControls(_ref) {
2307
2371
  icon: /*#__PURE__*/React.createElement(PlayIcon, {
2308
2372
  className: classNames([styles$1.icon, styles$1.offset])
2309
2373
  }),
2374
+ "aria-pressed": !playing,
2310
2375
  "aria-label": intl.formatMessage({
2311
- id: "ahSpiH",
2376
+ id: "mTqcmA",
2312
2377
  defaultMessage: [{
2313
2378
  "type": 0,
2314
- "value": "Play"
2379
+ "value": "Pause"
2315
2380
  }]
2316
2381
  }),
2317
2382
  withoutBootstrapStyles: true
2318
2383
  }) : null, /*#__PURE__*/React.createElement(Button$2, {
2319
- className: classNames([styles$1.playPauseButton, _defineProperty(_defineProperty({}, styles$1.hidden, controlsSuggestPlay && !controls), styles$1.loading, finalShowLoading)]),
2384
+ className: classNames([styles$1.playPauseButton, _defineProperty(_defineProperty({}, styles$1.hidden, !controlsVisible || controlsSuggestPlay && !controls), styles$1.loading, finalShowLoading)]),
2320
2385
  style: {
2321
2386
  color: color
2322
2387
  },
2323
2388
  onClick: playing ? onPause : onPlay,
2324
- focusable: controlsVisible,
2389
+ focusable: controls && controlsVisible && (!seekBarOnly || !playing),
2325
2390
  disabled: finalShowLoading,
2326
2391
  icon: finalShowLoading ? /*#__PURE__*/React.createElement(Spinner, {
2327
2392
  className: classNames([styles$1.spinner, styles$1.offset])
2328
2393
  }) : playIcon,
2394
+ "aria-pressed": !playing,
2329
2395
  "aria-label": finalShowLoading ? intl.formatMessage({
2330
2396
  id: "YyYrXp",
2331
2397
  defaultMessage: [{
2332
2398
  "type": 0,
2333
2399
  "value": "Loading"
2334
2400
  }]
2335
- }) : playLabel,
2401
+ }) : intl.formatMessage({
2402
+ id: "mTqcmA",
2403
+ defaultMessage: [{
2404
+ "type": 0,
2405
+ "value": "Pause"
2406
+ }]
2407
+ }),
2336
2408
  withoutBootstrapStyles: true
2337
2409
  }), /*#__PURE__*/React.createElement(SeekBar$1, {
2338
2410
  className: styles$1.seekBar,
@@ -2342,7 +2414,7 @@ function PlaybackControls(_ref) {
2342
2414
  onSeek: onSeek,
2343
2415
  onSeekStart: onSeekStart,
2344
2416
  onSeekEnd: onSeekEnd,
2345
- focusable: playing,
2417
+ focusable: controls && controlsVisible && !seekBarOnly,
2346
2418
  collapsed: isCollapsed,
2347
2419
  withSeekHead: !isCollapsed && !seekBarOnly,
2348
2420
  backgroundColor: color,
@@ -2359,18 +2431,13 @@ function PlaybackControls(_ref) {
2359
2431
  }) : /*#__PURE__*/React.createElement(MuteIcon, {
2360
2432
  className: styles$1.icon
2361
2433
  }),
2362
- "aria-label": muted ? intl.formatMessage({
2434
+ "aria-pressed": !muted,
2435
+ "aria-label": intl.formatMessage({
2363
2436
  id: "RK/QEY",
2364
2437
  defaultMessage: [{
2365
2438
  "type": 0,
2366
2439
  "value": "Unmute"
2367
2440
  }]
2368
- }) : intl.formatMessage({
2369
- id: "vzg8Es",
2370
- defaultMessage: [{
2371
- "type": 0,
2372
- "value": "Mute"
2373
- }]
2374
2441
  }),
2375
2442
  withoutBootstrapStyles: true
2376
2443
  }));
@@ -2378,19 +2445,22 @@ function PlaybackControls(_ref) {
2378
2445
  PlaybackControls.propTypes = propTypes$4;
2379
2446
  PlaybackControls.defaultProps = defaultProps$4;
2380
2447
 
2381
- var styles = {"container":"micromag-viewer-partials-web-view-container","opened":"micromag-viewer-partials-web-view-opened"};
2448
+ var styles = {"container":"micromag-viewer-partials-web-view-container","focusLock":"micromag-viewer-partials-web-view-focusLock","opened":"micromag-viewer-partials-web-view-opened"};
2382
2449
 
2383
2450
  var _excluded$2 = ["opened", "close", "open", "update", "url"];
2384
2451
  var propTypes$3 = {
2452
+ onChange: PropTypes.func,
2385
2453
  className: PropTypes.string,
2386
2454
  style: PropTypes.object
2387
2455
  };
2388
2456
  var defaultProps$3 = {
2457
+ onChange: null,
2389
2458
  className: null,
2390
2459
  style: null
2391
2460
  };
2392
2461
  function WebViewContainer(_ref) {
2393
- var className = _ref.className,
2462
+ var onChange = _ref.onChange,
2463
+ className = _ref.className,
2394
2464
  style = _ref.style;
2395
2465
  var _useViewerWebView = useViewerWebView(),
2396
2466
  opened = _useViewerWebView.opened,
@@ -2405,13 +2475,15 @@ function WebViewContainer(_ref) {
2405
2475
  enableInteraction = _useViewerInteraction.enableInteraction;
2406
2476
  var _usePlaybackContext = usePlaybackContext(),
2407
2477
  playing = _usePlaybackContext.playing,
2408
- setPlaying = _usePlaybackContext.setPlaying;
2478
+ setPlaying = _usePlaybackContext.setPlaying,
2479
+ hideControls = _usePlaybackContext.hideControls,
2480
+ showControls = _usePlaybackContext.showControls;
2409
2481
  var wasPlayingRef = useRef(playing);
2410
2482
  var _useState = useState(url),
2411
2483
  _useState2 = _slicedToArray(_useState, 2),
2412
2484
  currentUrl = _useState2[0],
2413
2485
  setCurrentUrl = _useState2[1];
2414
- var iframeRef = useRef(null);
2486
+ var ref = useRef(null);
2415
2487
 
2416
2488
  // Handle current webview url
2417
2489
  useEffect(function () {
@@ -2423,35 +2495,47 @@ function WebViewContainer(_ref) {
2423
2495
  if (url === null) {
2424
2496
  setCurrentUrl(null);
2425
2497
  }
2426
- }, [url]);
2498
+ if (onChange !== null) {
2499
+ onChange(opened);
2500
+ }
2501
+ }, [url, setCurrentUrl, onChange]);
2427
2502
 
2428
2503
  // Disable interaction and pause playback
2429
2504
  useEffect(function () {
2430
2505
  if (opened) {
2431
2506
  disableInteraction();
2507
+ hideControls();
2432
2508
  wasPlayingRef.current = playing;
2433
2509
  if (playing) {
2434
2510
  setPlaying(false);
2435
2511
  }
2436
- iframeRef.current.focus();
2437
2512
  } else {
2438
2513
  enableInteraction();
2514
+ showControls();
2439
2515
  if (wasPlayingRef.current && !playing) {
2440
2516
  wasPlayingRef.current = false;
2441
2517
  setPlaying(true);
2442
2518
  }
2443
2519
  }
2444
2520
  }, [opened]);
2521
+ var keyboardShortcuts = useMemo(function () {
2522
+ return {
2523
+ escape: function escape() {
2524
+ close();
2525
+ }
2526
+ };
2527
+ }, [close]);
2528
+ useKeyboardShortcuts(keyboardShortcuts);
2445
2529
  return /*#__PURE__*/React.createElement("div", {
2446
2530
  className: classNames([styles.container, _defineProperty(_defineProperty({}, styles.opened, opened), className, className !== null)]),
2447
2531
  style: style,
2448
- onTransitionEnd: onTransitionEnd
2532
+ onTransitionEnd: onTransitionEnd,
2533
+ ref: ref
2449
2534
  }, /*#__PURE__*/React.createElement(WebView, Object.assign({
2450
2535
  url: url || currentUrl
2451
2536
  }, webViewProps, {
2452
2537
  closeable: opened,
2453
2538
  focusable: opened,
2454
- iframeRef: iframeRef,
2455
2539
  className: styles.webView,
2456
2540
  onClose: close
2457
2541
  })));
@@ -2614,6 +2698,7 @@ var Viewer = function Viewer(_ref) {
2614
2698
  screensMedias = _ref.screensMedias,
2615
2699
  screenSizeOptions = _ref.screenSizeOptions,
2616
2700
  className = _ref.className;
2701
+ var intl = useIntl();
2617
2702
  /**
2618
2703
  * Screen Data + Processing
2619
2704
  */
@@ -2665,13 +2750,20 @@ var Viewer = function Viewer(_ref) {
2665
2750
  * Screen Layout
2666
2751
  */
2667
2752
  var _ref5 = viewerTheme || {},
2668
- textStyles = _ref5.textStyles;
2669
- var _ref6 = textStyles || {},
2670
- _ref6$title = _ref6.title,
2671
- themeTextStyle = _ref6$title === void 0 ? null : _ref6$title;
2672
- var _ref7 = themeTextStyle || {},
2673
- _ref7$fontFamily = _ref7.fontFamily,
2674
- themeFont = _ref7$fontFamily === void 0 ? null : _ref7$fontFamily;
2753
+ textStyles = _ref5.textStyles,
2754
+ colors = _ref5.colors;
2755
+ var _ref6 = colors || {},
2756
+ _ref6$primary = _ref6.primary,
2757
+ primaryColor = _ref6$primary === void 0 ? null : _ref6$primary,
2758
+ _ref6$focus = _ref6.focus,
2759
+ focusColor = _ref6$focus === void 0 ? null : _ref6$focus;
2760
+ var finalFocusColor = getColorAsString(focusColor || primaryColor);
2761
+ var _ref7 = textStyles || {},
2762
+ _ref7$title = _ref7.title,
2763
+ themeTextStyle = _ref7$title === void 0 ? null : _ref7$title;
2764
+ var _ref8 = themeTextStyle || {},
2765
+ _ref8$fontFamily = _ref8.fontFamily,
2766
+ themeFont = _ref8$fontFamily === void 0 ? null : _ref8$fontFamily;
2675
2767
 
2676
2768
  // Fonts
2677
2769
  var finalFonts = useMemo(function () {
@@ -2688,8 +2780,9 @@ var Viewer = function Viewer(_ref) {
2688
2780
  var isEditor = renderContext === 'edit';
2689
2781
  var withoutScreensTransforms = isStatic || isCapture;
2690
2782
  var _usePlaybackContext = usePlaybackContext(),
2691
- playing = _usePlaybackContext.playing,
2692
- _usePlaybackContext$c = _usePlaybackContext.controls,
2783
+ playing = _usePlaybackContext.playing;
2784
+ _usePlaybackContext.setControls;
2785
+ var _usePlaybackContext$c = _usePlaybackContext.controls,
2693
2786
  playbackControls = _usePlaybackContext$c === void 0 ? false : _usePlaybackContext$c,
2694
2787
  _usePlaybackContext$c2 = _usePlaybackContext.controlsVisible,
2695
2788
  playbackcontrolsVisible = _usePlaybackContext$c2 === void 0 ? false : _usePlaybackContext$c2,
@@ -2710,15 +2803,15 @@ var Viewer = function Viewer(_ref) {
2710
2803
  viewerHeight = _useScreenSizeFromEle.fullHeight,
2711
2804
  screenSize = _useScreenSizeFromEle.screenSize,
2712
2805
  screenScale = _useScreenSizeFromEle.scale;
2713
- var _ref8 = screenSize || {},
2714
- _ref8$width = _ref8.width,
2715
- screenWidth = _ref8$width === void 0 ? null : _ref8$width,
2716
- _ref8$height = _ref8.height,
2717
- screenHeight = _ref8$height === void 0 ? null : _ref8$height,
2718
- _ref8$landscape = _ref8.landscape,
2719
- landscape = _ref8$landscape === void 0 ? false : _ref8$landscape,
2720
- _ref8$menuOverScreen = _ref8.menuOverScreen,
2721
- menuOverScreen = _ref8$menuOverScreen === void 0 ? false : _ref8$menuOverScreen;
2806
+ var _ref9 = screenSize || {},
2807
+ _ref9$width = _ref9.width,
2808
+ screenWidth = _ref9$width === void 0 ? null : _ref9$width,
2809
+ _ref9$height = _ref9.height,
2810
+ screenHeight = _ref9$height === void 0 ? null : _ref9$height,
2811
+ _ref9$landscape = _ref9.landscape,
2812
+ landscape = _ref9$landscape === void 0 ? false : _ref9$landscape,
2813
+ _ref9$menuOverScreen = _ref9.menuOverScreen,
2814
+ menuOverScreen = _ref9$menuOverScreen === void 0 ? false : _ref9$menuOverScreen;
2722
2815
  var screenContainerWidth = screenScale !== null ? screenWidth * screenScale : screenWidth;
2723
2816
  var screenContainerHeight = screenScale !== null ? screenHeight * screenScale : screenHeight;
2724
2817
  var hasSize = screenWidth > 0 && screenHeight > 0;
@@ -2738,6 +2831,16 @@ var Viewer = function Viewer(_ref) {
2738
2831
  }
2739
2832
  }, [ready, landscape, menuOverScreen, onViewModeChange]);
2740
2833
 
2834
+ // CSS variable
2835
+ useEffect(function () {
2836
+ if (containerRef.current === null) {
2837
+ return;
2838
+ }
2839
+ if (finalFocusColor !== null) {
2840
+ containerRef.current.style.setProperty('--micromag-focus-color', finalFocusColor);
2841
+ }
2842
+ }, [finalFocusColor]);
2843
+
2741
2844
  /**
2742
2845
  * Screen Transitions
2743
2846
  */
@@ -2757,11 +2860,11 @@ var Viewer = function Viewer(_ref) {
2757
2860
  onScreenChange(screens[index], index);
2758
2861
  }
2759
2862
  }, [screenIndex, screens, onScreenChange]);
2760
- var onScreenNavigate = useCallback(function (_ref9) {
2761
- var index = _ref9.index,
2762
- newIndex = _ref9.newIndex,
2763
- end = _ref9.end,
2764
- direction = _ref9.direction;
2863
+ var onScreenNavigate = useCallback(function (_ref10) {
2864
+ var index = _ref10.index,
2865
+ newIndex = _ref10.newIndex,
2866
+ end = _ref10.end,
2867
+ direction = _ref10.direction;
2765
2868
  if (end && onEnd !== null) {
2766
2869
  onEnd();
2767
2870
  }
@@ -2809,13 +2912,13 @@ var Viewer = function Viewer(_ref) {
2809
2912
  currentScreenInteractionEnabled = _useScreenInteraction.currentScreenInteractionEnabled,
2810
2913
  enableInteraction = _useScreenInteraction.enableInteraction,
2811
2914
  disableInteraction = _useScreenInteraction.disableInteraction;
2812
- var onTap = useCallback(function (_ref10) {
2813
- var currentTarget = _ref10.currentTarget,
2814
- event = _ref10.event,
2815
- target = _ref10.target,
2816
- _ref10$xy = _slicedToArray(_ref10.xy, 2),
2817
- x = _ref10$xy[0],
2818
- y = _ref10$xy[1];
2915
+ var onTap = useCallback(function (_ref11) {
2916
+ var currentTarget = _ref11.currentTarget,
2917
+ event = _ref11.event,
2918
+ target = _ref11.target,
2919
+ _ref11$xy = _slicedToArray(_ref11.xy, 2),
2920
+ x = _ref11$xy[0],
2921
+ y = _ref11$xy[1];
2819
2922
  if (event) {
2820
2923
  event.stopPropagation();
2821
2924
  }
@@ -2828,12 +2931,12 @@ var Viewer = function Viewer(_ref) {
2828
2931
  y: y
2829
2932
  });
2830
2933
  }, [interactWithScreen, screenIndex]);
2831
- var computeScreenProgress = useCallback(function (_ref11) {
2832
- var active = _ref11.active,
2833
- _ref11$movement = _slicedToArray(_ref11.movement, 1),
2834
- mx = _ref11$movement[0],
2835
- _ref11$velocity = _slicedToArray(_ref11.velocity, 1),
2836
- vx = _ref11$velocity[0];
2934
+ var computeScreenProgress = useCallback(function (_ref12) {
2935
+ var active = _ref12.active,
2936
+ _ref12$movement = _slicedToArray(_ref12.movement, 1),
2937
+ mx = _ref12$movement[0],
2938
+ _ref12$velocity = _slicedToArray(_ref12.velocity, 1),
2939
+ vx = _ref12$velocity[0];
2837
2940
  var p = mx / screenContainerWidth; // drag "ratio": how much of the screen width has been swiped?
2838
2941
  var forwards = mx < 0; // true if swiping to left (to navigate forwards)
2839
2942
  var newIndex = !forwards ? screenIndex - 1 : screenIndex + 1; // which item index are we moving towards?
@@ -2846,8 +2949,8 @@ var Viewer = function Viewer(_ref) {
2846
2949
  }
2847
2950
  return screenIndex - progress;
2848
2951
  }, [screenContainerWidth, screenIndex]);
2849
- var onScreenProgress = useCallback(function (progress, _ref12) {
2850
- var active = _ref12.active;
2952
+ var onScreenProgress = useCallback(function (progress, _ref13) {
2953
+ var active = _ref13.active;
2851
2954
  var delta = Math.abs(progress - screenIndex);
2852
2955
  var reachedBounds = progress < 0 || progress >= screensCount; // have we reached the end of the stack?
2853
2956
  if (!active && delta === 1 && !reachedBounds) {
@@ -2884,9 +2987,12 @@ var Viewer = function Viewer(_ref) {
2884
2987
  onProgress: onScreenProgress,
2885
2988
  onTap: onTap,
2886
2989
  springParams: springParams,
2887
- drapOptions: {
2990
+ dragOptions: {
2888
2991
  filterTaps: true,
2889
- axis: 'x'
2992
+ axis: 'x',
2993
+ pointer: {
2994
+ keys: false
2995
+ }
2890
2996
  }
2891
2997
  }),
2892
2998
  isDragging = _useDragProgress.dragging,
@@ -2943,11 +3049,11 @@ var Viewer = function Viewer(_ref) {
2943
3049
  menuDotsContainerRef = _useDimensionObserver3.ref,
2944
3050
  _useDimensionObserver4 = _useDimensionObserver3.height,
2945
3051
  menuDotsContainerHeight = _useDimensionObserver4 === void 0 ? 0 : _useDimensionObserver4;
2946
- var onClickScreen = useCallback(function (_ref13) {
2947
- var itemScreenId = _ref13.screenId;
3052
+ var onClickScreen = useCallback(function (_ref14) {
3053
+ var itemScreenId = _ref14.screenId;
2948
3054
  onInteractionPrivate();
2949
- var index = screens.findIndex(function (_ref14) {
2950
- var id = _ref14.id;
3055
+ var index = screens.findIndex(function (_ref15) {
3056
+ var id = _ref15.id;
2951
3057
  return id === itemScreenId;
2952
3058
  });
2953
3059
  changeIndex(index);
@@ -2970,19 +3076,43 @@ var Viewer = function Viewer(_ref) {
2970
3076
  return toggleFullscreen();
2971
3077
  },
2972
3078
  arrowleft: function arrowleft() {
2973
- return gotoPreviousScreen();
3079
+ if (!checkDraggable(document.activeElement)) {
3080
+ gotoPreviousScreen();
3081
+ }
2974
3082
  },
2975
3083
  arrowright: function arrowright() {
2976
- return gotoNextScreen();
2977
- },
2978
- ' ': function _() {
2979
- return gotoNextScreen();
3084
+ if (!checkDraggable(document.activeElement)) {
3085
+ gotoNextScreen();
3086
+ }
2980
3087
  }
3088
+ // ' ': () => gotoNextScreen(),
2981
3089
  };
2982
3090
  }, [gotoPreviousScreen, gotoNextScreen]);
2983
3091
  useKeyboardShortcuts(keyboardShortcuts, {
2984
3092
  disabled: renderContext !== 'view'
2985
3093
  });
3094
+
3095
+ // const onClickSkipToContent = useCallback(() => {
3096
+ // const contentElement = document.getElementById('content') || null;
3097
+ // if (contentElement !== null) {
3098
+ // contentElement.focus();
3099
+ // }
3100
+ // }, []);
3101
+
3102
+ var onClickSkipToPlaybackControls = useCallback(function () {
3103
+ var controlsElement = document.getElementById('controls');
3104
+ if (controlsElement) {
3105
+ var buttons = controlsElement.querySelectorAll('button[tabindex]');
3106
+ var firstFocusableButton = Array.from(buttons).find(function (button) {
3107
+ return button.tabIndex >= 0;
3108
+ });
3109
+ if (firstFocusableButton) {
3110
+ firstFocusableButton.focus({
3111
+ preventScroll: true
3112
+ });
3113
+ }
3114
+ }
3115
+ }, []);
2986
3116
  var _useState5 = useState(null),
2987
3117
  _useState6 = _slicedToArray(_useState5, 2),
2988
3118
  currentShareIncentive = _useState6[0],
@@ -2991,26 +3121,26 @@ var Viewer = function Viewer(_ref) {
2991
3121
  _useState8 = _slicedToArray(_useState7, 2),
2992
3122
  shareIncentiveVisible = _useState8[0],
2993
3123
  setShareIncentiveVisible = _useState8[1];
2994
- var _ref15 = currentScreen || {},
2995
- _ref15$header = _ref15.header,
2996
- header = _ref15$header === void 0 ? null : _ref15$header;
2997
- var _ref16 = header || {},
2998
- _ref16$shareIncentive = _ref16.shareIncentive,
2999
- shareIncentive = _ref16$shareIncentive === void 0 ? null : _ref16$shareIncentive;
3000
- var _ref17 = shareIncentive || {},
3001
- _ref17$active = _ref17.active,
3002
- hasShareIncentive = _ref17$active === void 0 ? false : _ref17$active,
3003
- _ref17$label = _ref17.label,
3004
- shareIncentiveLabel = _ref17$label === void 0 ? null : _ref17$label;
3005
- var _ref18 = currentShareIncentive || {},
3124
+ var _ref16 = currentScreen || {},
3125
+ _ref16$header = _ref16.header,
3126
+ header = _ref16$header === void 0 ? null : _ref16$header;
3127
+ var _ref17 = header || {},
3128
+ _ref17$shareIncentive = _ref17.shareIncentive,
3129
+ shareIncentive = _ref17$shareIncentive === void 0 ? null : _ref17$shareIncentive;
3130
+ var _ref18 = shareIncentive || {},
3131
+ _ref18$active = _ref18.active,
3132
+ hasShareIncentive = _ref18$active === void 0 ? false : _ref18$active,
3006
3133
  _ref18$label = _ref18.label,
3007
- currentShareIncentiveLabel = _ref18$label === void 0 ? null : _ref18$label;
3008
- var _ref19 = shareIncentiveLabel || {},
3009
- _ref19$body = _ref19.body,
3010
- incentiveLabel = _ref19$body === void 0 ? null : _ref19$body;
3011
- var _ref20 = currentShareIncentiveLabel || {},
3134
+ shareIncentiveLabel = _ref18$label === void 0 ? null : _ref18$label;
3135
+ var _ref19 = currentShareIncentive || {},
3136
+ _ref19$label = _ref19.label,
3137
+ currentShareIncentiveLabel = _ref19$label === void 0 ? null : _ref19$label;
3138
+ var _ref20 = shareIncentiveLabel || {},
3012
3139
  _ref20$body = _ref20.body,
3013
- currentIncentiveLabel = _ref20$body === void 0 ? null : _ref20$body;
3140
+ incentiveLabel = _ref20$body === void 0 ? null : _ref20$body;
3141
+ var _ref21 = currentShareIncentiveLabel || {},
3142
+ _ref21$body = _ref21.body,
3143
+ currentIncentiveLabel = _ref21$body === void 0 ? null : _ref21$body;
3014
3144
  useEffect(function () {
3015
3145
  setShareIncentiveVisible(true);
3016
3146
  if (hasShareIncentive && shareIncentiveLabel !== currentShareIncentiveLabel) {
@@ -3079,7 +3209,62 @@ var Viewer = function Viewer(_ref) {
3079
3209
  }), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles$6.landscape, landscape), styles$6.withoutGestures, withoutGestures), styles$6.hideMenu, !menuVisible), styles$6.disableMenu, navigationDisabled), styles$6.fadeMenu, playing && playbackControls && !playbackcontrolsVisible), styles$6.ready, ready || withoutScreensTransforms), styles$6.hasInteracted, hasInteracted), styles$6.isDragging, isDragging), className, className)]),
3080
3210
  ref: containerRef,
3081
3211
  onContextMenu: onContextMenu
3082
- }, !withoutMenu ? /*#__PURE__*/React.createElement(ViewerMenu$1, {
3212
+ }, /*#__PURE__*/React.createElement("div", {
3213
+ className: styles$6.ariaAnnouncement,
3214
+ id: "announce",
3215
+ "aria-live": "polite"
3216
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3217
+ id: "AIr8rM",
3218
+ defaultMessage: [{
3219
+ "type": 0,
3220
+ "value": "Screen "
3221
+ }, {
3222
+ "type": 1,
3223
+ "value": "current"
3224
+ }, {
3225
+ "type": 0,
3226
+ "value": " of "
3227
+ }, {
3228
+ "type": 1,
3229
+ "value": "length"
3230
+ }],
3231
+ values: {
3232
+ current: screenIndex + 1,
3233
+ length: screens.length
3234
+ }
3235
+ })), /*#__PURE__*/React.createElement("nav", {
3236
+ "aria-label": intl.formatMessage({
3237
+ id: "gfZs4J",
3238
+ defaultMessage: [{
3239
+ "type": 0,
3240
+ "value": "Skip Links"
3241
+ }]
3242
+ }),
3243
+ className: styles$6.accessibilityLinks
3244
+ }, /*#__PURE__*/React.createElement(Button$1, {
3245
+ onClick: onClickSkipToPlaybackControls,
3246
+ "aria-disabled": withoutPlaybackControls || !playbackcontrolsVisible,
3247
+ "aria-describedby": "disabledReason",
3248
+ className: classNames([styles$6.accessibilityButton, _defineProperty({}, styles$6.disabled, withoutPlaybackControls || !playbackcontrolsVisible)])
3249
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3250
+ id: "CnVj9r",
3251
+ defaultMessage: [{
3252
+ "type": 0,
3253
+ "value": "Skip to controls"
3254
+ }]
3255
+ })), withoutPlaybackControls || !playbackcontrolsVisible ? /*#__PURE__*/React.createElement("div", {
3256
+ role: "tooltip",
3257
+ className: styles$6.tooltipBox,
3258
+ id: "disabledReason"
3259
+ }, /*#__PURE__*/React.createElement("span", {
3260
+ className: styles$6.tooltip
3261
+ }, /*#__PURE__*/React.createElement(FormattedMessage, {
3262
+ id: "YXhRxW",
3263
+ defaultMessage: [{
3264
+ "type": 0,
3265
+ "value": "No controls available"
3266
+ }]
3267
+ }))) : null), !withoutMenu ? /*#__PURE__*/React.createElement(ViewerMenu$1, {
3083
3268
  story: parsedStory,
3084
3269
  currentScreenIndex: screenIndex,
3085
3270
  withShadow: menuOverScreen && !withoutMenuShadow,
@@ -3109,7 +3294,14 @@ var Viewer = function Viewer(_ref) {
3109
3294
  }, dragContentBind()), !withoutNavigationArrow && !withNeighborScreens && !navigationDisabled && screenIndex > 0 && screens.length > 1 ? /*#__PURE__*/React.createElement(NavigationButton$1, {
3110
3295
  direction: "previous",
3111
3296
  className: classNames([styles$6.navButton, styles$6.previous]),
3112
- onClick: gotoPreviousScreen
3297
+ onClick: gotoPreviousScreen,
3298
+ ariaLabel: intl.formatMessage({
3299
+ id: "zYH/31",
3300
+ defaultMessage: [{
3301
+ "type": 0,
3302
+ "value": "Go to previous screen"
3303
+ }]
3304
+ })
3113
3305
  }) : null, /*#__PURE__*/React.createElement("div", {
3114
3306
  className: styles$6.screensFrame,
3115
3307
  style: {
@@ -3123,7 +3315,10 @@ var Viewer = function Viewer(_ref) {
3123
3315
  var screenStyles = getScreenStylesByIndex(i, progressSpring);
3124
3316
  return /*#__PURE__*/React.createElement(animated.div, {
3125
3317
  key: "screen-viewer-".concat(screen.id || '', "-").concat(i + 1),
3318
+ id: current ? 'content' : null,
3319
+ "aria-hidden": !current,
3126
3320
  style: screenStyles,
3321
+ tabIndex: current ? 0 : -1,
3127
3322
  className: classNames([styles$6.screenContainer, _defineProperty({}, styles$6.current, current)])
3128
3323
  }, screen !== null ? /*#__PURE__*/React.createElement(ViewerScreen, {
3129
3324
  className: styles$6.screen,
@@ -3144,9 +3339,17 @@ var Viewer = function Viewer(_ref) {
3144
3339
  })), !withoutNavigationArrow && !withNeighborScreens && !navigationDisabled && screenIndex < screens.length - 1 ? /*#__PURE__*/React.createElement(NavigationButton$1, {
3145
3340
  direction: "next",
3146
3341
  className: classNames([styles$6.navButton, styles$6.next]),
3147
- onClick: gotoNextScreen
3342
+ onClick: gotoNextScreen,
3343
+ ariaLabel: intl.formatMessage({
3344
+ id: "v9bqYj",
3345
+ defaultMessage: [{
3346
+ "type": 0,
3347
+ "value": "Go to next screen"
3348
+ }]
3349
+ })
3148
3350
  }) : null, !withoutPlaybackControls ? /*#__PURE__*/React.createElement("div", {
3149
3351
  className: styles$6.playbackControls,
3352
+ id: "controls",
3150
3353
  ref: playbackControlsContainerRef
3151
3354
  }, /*#__PURE__*/React.createElement(PlaybackControls, {
3152
3355
  className: styles$6.controls