@atlaskit/media-viewer 48.0.7 → 48.0.9

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/media-viewer
2
2
 
3
+ ## 48.0.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 48.0.8
10
+
11
+ ### Patch Changes
12
+
13
+ - [`5953474fd5f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/5953474fd5f) - [ux] [MEX-2514] Prevent the body (i.e. the background) from scrolling when Media Viewer is open to improve the user experience
14
+
3
15
  ## 48.0.7
4
16
 
5
17
  ### Patch Changes
@@ -12,7 +12,7 @@ var componentName = 'mediaViewer';
12
12
  exports.component = exports.componentName = componentName;
13
13
  var packageName = "@atlaskit/media-viewer";
14
14
  exports.packageName = packageName;
15
- var packageVersion = "48.0.7";
15
+ var packageVersion = "48.0.9";
16
16
  exports.packageVersion = packageVersion;
17
17
  function getFileAttributes(fileState) {
18
18
  if (!fileState) {
@@ -12,7 +12,7 @@ var _mediaCommon = require("@atlaskit/media-common");
12
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
14
  var packageName = "@atlaskit/media-viewer";
15
- var packageVersion = "48.0.7";
15
+ var packageVersion = "48.0.9";
16
16
  var ufoExperience;
17
17
  var getExperience = function getExperience() {
18
18
  if (!ufoExperience) {
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.MediaViewerComponent = exports.MediaViewer = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
11
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
@@ -25,6 +26,8 @@ var _content = require("./content");
25
26
  var _styleWrappers = require("./styleWrappers");
26
27
  var _perfMarks = require("perf-marks");
27
28
  var _classnames = require("./classnames");
29
+ var _reactScrolllock = _interopRequireDefault(require("react-scrolllock"));
30
+ var _reactFocusLock = _interopRequireDefault(require("react-focus-lock"));
28
31
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
29
32
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
30
33
  var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
@@ -106,9 +109,12 @@ var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
106
109
  items = _this$props2.items,
107
110
  extensions = _this$props2.extensions,
108
111
  contextId = _this$props2.contextId,
109
- featureFlags = _this$props2.featureFlags;
112
+ featureFlags = _this$props2.featureFlags,
113
+ innerRef = _this$props2.innerRef;
110
114
  var isSidebarVisible = this.state.isSidebarVisible;
111
- var content = /*#__PURE__*/_react.default.createElement(_styleWrappers.Blanket, {
115
+ var content = /*#__PURE__*/_react.default.createElement("div", {
116
+ ref: innerRef
117
+ }, /*#__PURE__*/_react.default.createElement(_styleWrappers.Blanket, {
112
118
  "data-testid": "media-viewer-popup",
113
119
  className: _classnames.mediaViewerPopupClass
114
120
  }, /*#__PURE__*/_react.default.createElement(_mediaUi.Shortcut, {
@@ -128,7 +134,7 @@ var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
128
134
  isSidebarVisible: isSidebarVisible,
129
135
  contextId: contextId,
130
136
  featureFlags: featureFlags
131
- })), this.renderSidebar());
137
+ })), this.renderSidebar()));
132
138
  return this.props.intl ? content : /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
133
139
  locale: "en"
134
140
  }, content);
@@ -137,12 +143,23 @@ var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
137
143
  return MediaViewerComponent;
138
144
  }(_react.default.Component);
139
145
  exports.MediaViewerComponent = MediaViewerComponent;
146
+ var MediaViewerWithRef = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
147
+ return /*#__PURE__*/_react.default.createElement(MediaViewerComponent, (0, _extends2.default)({}, props, {
148
+ innerRef: ref
149
+ }));
150
+ });
151
+ var MediaViewerWithScrollLock = function MediaViewerWithScrollLock(props) {
152
+ return /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, {
153
+ autoFocus: true,
154
+ returnFocus: true
155
+ }, /*#__PURE__*/_react.default.createElement(_reactScrolllock.default, null), /*#__PURE__*/_react.default.createElement(MediaViewerWithRef, props));
156
+ };
140
157
  var MediaViewer = (0, _mediaCommon.withMediaAnalyticsContext)({
141
158
  packageName: _analytics.packageName,
142
159
  packageVersion: _analytics.packageVersion,
143
160
  component: _analytics.component,
144
161
  componentName: _analytics.componentName
145
- })((0, _analyticsNext.withAnalyticsEvents)()((0, _reactIntlNext.injectIntl)(MediaViewerComponent, {
162
+ })((0, _analyticsNext.withAnalyticsEvents)()((0, _reactIntlNext.injectIntl)(MediaViewerWithScrollLock, {
146
163
  enforceContext: false
147
164
  })));
148
165
  exports.MediaViewer = MediaViewer;
@@ -1,12 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.ZoomWrapper = exports.ZoomLevelIndicator = exports.ZoomControlsWrapper = exports.Video = exports.SpinnerWrapper = exports.SidebarWrapper = exports.RightWrapper = exports.RightHeader = exports.PDFWrapper = exports.MetadataWrapper = exports.MetadataSubText = exports.MetadataIconWrapper = exports.MetadataFileName = exports.MedatadataTextWrapper = exports.ListWrapper = exports.LeftWrapper = exports.LeftHeader = exports.Img = exports.ImageWrapper = exports.HeaderWrapper = exports.Header = exports.HDIconWrapper = exports.HDIconGroupWrapper = exports.FormattedMessageWrapper = exports.ErrorMessageWrapper = exports.ErrorImage = exports.DownloadButtonWrapper = exports.DefaultCoverWrapper = exports.CustomVideoPlayerWrapper = exports.CustomAudioPlayerWrapper = exports.ContentWrapper = exports.CloseButtonWrapper = exports.Blanket = exports.BaselineExtend = exports.AudioPlayer = exports.AudioCover = exports.Audio = exports.ArrowsWrapper = exports.Arrow = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
9
  var _react = require("@emotion/react");
8
10
  var _react2 = require("react");
9
11
  var _styles = require("./styles");
12
+ var _reactScrolllock = require("react-scrolllock");
13
+ var _useCallbackRef = require("use-callback-ref");
10
14
  /** @jsx jsx */
11
15
 
12
16
  var Blanket = function Blanket(_ref) {
@@ -140,15 +144,22 @@ var Video = function Video(_ref14) {
140
144
  );
141
145
  };
142
146
  exports.Video = Video;
143
- var PDFWrapper = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref15, ref) {
144
- var datatestId = _ref15['data-testid'],
147
+ var PDFWrapperBody = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref15, ref) {
148
+ var innerRef = _ref15.innerRef,
149
+ datatestId = _ref15['data-testid'],
145
150
  children = _ref15.children;
151
+ var bodyRef = (0, _useCallbackRef.useMergeRefs)([ref, innerRef]);
146
152
  return (0, _react.jsx)("div", {
147
153
  css: _styles.pdfWrapperStyles,
148
- ref: ref,
154
+ ref: bodyRef,
149
155
  "data-testid": datatestId
150
156
  }, children);
151
157
  });
158
+ var PDFWrapper = /*#__PURE__*/(0, _react2.forwardRef)(function (props, ref) {
159
+ return (0, _react.jsx)(_reactScrolllock.TouchScrollable, null, (0, _react.jsx)(PDFWrapperBody, (0, _extends2.default)({
160
+ innerRef: ref
161
+ }, props)));
162
+ });
152
163
  exports.PDFWrapper = PDFWrapper;
153
164
  var Arrow = function Arrow(_ref16) {
154
165
  var className = _ref16.className,
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SidebarItemWrapper = exports.SidebarHeaderWrapper = exports.SidebarHeaderIcon = exports.SidebarHeaderEntry = exports.Separator = exports.ArchiveViewerWrapper = exports.ArchiveSidebarFolderWrapper = exports.ArchiveSidebarFileEntryWrapper = exports.ArchiveSideBar = exports.ArchiveLayout = exports.ArchiveItemViewerWrapper = exports.ArchiveDownloadButtonWrapper = void 0;
7
7
  var _react = require("@emotion/react");
8
8
  var _styles = require("./styles");
9
+ var _reactScrolllock = require("react-scrolllock");
9
10
  /** @jsx jsx */
10
11
 
11
12
  var ArchiveItemViewerWrapper = function ArchiveItemViewerWrapper(_ref) {
@@ -17,9 +18,9 @@ var ArchiveItemViewerWrapper = function ArchiveItemViewerWrapper(_ref) {
17
18
  exports.ArchiveItemViewerWrapper = ArchiveItemViewerWrapper;
18
19
  var ArchiveSideBar = function ArchiveSideBar(_ref2) {
19
20
  var children = _ref2.children;
20
- return (0, _react.jsx)("div", {
21
+ return (0, _react.jsx)(_reactScrolllock.TouchScrollable, null, (0, _react.jsx)("div", {
21
22
  css: _styles.archiveSideBarStyles
22
- }, children);
23
+ }, children));
23
24
  };
24
25
  exports.ArchiveSideBar = ArchiveSideBar;
25
26
  var ArchiveSidebarFolderWrapper = function ArchiveSidebarFolderWrapper(_ref3) {
@@ -23,6 +23,7 @@ var _errorMessage = _interopRequireDefault(require("../../errorMessage"));
23
23
  var _errors = require("../../errors");
24
24
  var _util = require("./util");
25
25
  var _styles = require("./styles");
26
+ var _reactScrolllock = require("react-scrolllock");
26
27
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
27
28
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** @jsx jsx */
28
29
  // Based on some basic benchmarking with @atlaskit/code it was found that ~10,000 lines took around ~5secs to render, which locks the main thread.
@@ -35,10 +36,10 @@ var MAX_FILE_SIZE_USE_CODE_VIEWER = 5 * 1024 * 1024;
35
36
  var CodeViewWrapper = function CodeViewWrapper(_ref) {
36
37
  var children = _ref.children,
37
38
  testId = _ref['data-testid'];
38
- return (0, _react.jsx)("div", {
39
+ return (0, _react.jsx)(_reactScrolllock.TouchScrollable, null, (0, _react.jsx)("div", {
39
40
  css: _styles.codeViewWrapperStyles,
40
41
  "data-testid": testId
41
- }, children);
42
+ }, children));
42
43
  };
43
44
  exports.CodeViewWrapper = CodeViewWrapper;
44
45
  var CodeViewerHeaderBar = function CodeViewerHeaderBar() {
@@ -1,7 +1,7 @@
1
1
  import { ANALYTICS_MEDIA_CHANNEL } from '@atlaskit/media-common';
2
2
  const componentName = 'mediaViewer';
3
3
  const packageName = "@atlaskit/media-viewer";
4
- const packageVersion = "48.0.7";
4
+ const packageVersion = "48.0.9";
5
5
  export { packageName, packageVersion, componentName, componentName as component };
6
6
  export function getFileAttributes(fileState) {
7
7
  if (!fileState) {
@@ -2,7 +2,7 @@ import { UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atl
2
2
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
3
3
  import { getFeatureFlagKeysAllProducts } from '@atlaskit/media-common';
4
4
  const packageName = "@atlaskit/media-viewer";
5
- const packageVersion = "48.0.7";
5
+ const packageVersion = "48.0.9";
6
6
  let ufoExperience;
7
7
  const getExperience = () => {
8
8
  if (!ufoExperience) {
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
3
  import React from 'react';
3
4
  import { withMediaAnalyticsContext } from '@atlaskit/media-common';
@@ -12,6 +13,8 @@ import { Content } from './content';
12
13
  import { Blanket, SidebarWrapper } from './styleWrappers';
13
14
  import { start } from 'perf-marks';
14
15
  import { mediaViewerPopupClass } from './classnames';
16
+ import ScrollLock from 'react-scrolllock';
17
+ import FocusLock from 'react-focus-lock';
15
18
  export class MediaViewerComponent extends React.Component {
16
19
  constructor(...args) {
17
20
  super(...args);
@@ -85,12 +88,15 @@ export class MediaViewerComponent extends React.Component {
85
88
  items,
86
89
  extensions,
87
90
  contextId,
88
- featureFlags
91
+ featureFlags,
92
+ innerRef
89
93
  } = this.props;
90
94
  const {
91
95
  isSidebarVisible
92
96
  } = this.state;
93
- const content = /*#__PURE__*/React.createElement(Blanket, {
97
+ const content = /*#__PURE__*/React.createElement("div", {
98
+ ref: innerRef
99
+ }, /*#__PURE__*/React.createElement(Blanket, {
94
100
  "data-testid": "media-viewer-popup",
95
101
  className: mediaViewerPopupClass
96
102
  }, /*#__PURE__*/React.createElement(Shortcut, {
@@ -110,17 +116,28 @@ export class MediaViewerComponent extends React.Component {
110
116
  isSidebarVisible: isSidebarVisible,
111
117
  contextId: contextId,
112
118
  featureFlags: featureFlags
113
- })), this.renderSidebar());
119
+ })), this.renderSidebar()));
114
120
  return this.props.intl ? content : /*#__PURE__*/React.createElement(IntlProvider, {
115
121
  locale: "en"
116
122
  }, content);
117
123
  }
118
124
  }
125
+ const MediaViewerWithRef = /*#__PURE__*/React.forwardRef((props, ref) => {
126
+ return /*#__PURE__*/React.createElement(MediaViewerComponent, _extends({}, props, {
127
+ innerRef: ref
128
+ }));
129
+ });
130
+ const MediaViewerWithScrollLock = props => {
131
+ return /*#__PURE__*/React.createElement(FocusLock, {
132
+ autoFocus: true,
133
+ returnFocus: true
134
+ }, /*#__PURE__*/React.createElement(ScrollLock, null), /*#__PURE__*/React.createElement(MediaViewerWithRef, props));
135
+ };
119
136
  export const MediaViewer = withMediaAnalyticsContext({
120
137
  packageName,
121
138
  packageVersion,
122
139
  component,
123
140
  componentName
124
- })(withAnalyticsEvents()(injectIntl(MediaViewerComponent, {
141
+ })(withAnalyticsEvents()(injectIntl(MediaViewerWithScrollLock, {
125
142
  enforceContext: false
126
143
  })));
@@ -1,7 +1,10 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  /** @jsx jsx */
2
3
  import { jsx } from '@emotion/react';
3
4
  import { forwardRef, useMemo } from 'react';
4
5
  import { arrowStyles, arrowsWrapperStyles, audioCoverStyles, audioPlayerStyles, audioStyles, baselineExtendStyles, blanketStyles, closeButtonWrapperStyles, contentWrapperStyles, customAudioPlayerWrapperStyles, customVideoPlayerWrapperStyles, defaultCoverWrapperStyles, downloadButtonWrapperStyles, errorImageStyles, errorMessageWrapperStyles, formattedMessageWrapperStyles, hdIconGroupWrapperStyles, hdIconWrapperStyles, headerStyles, headerWrapperStyles, imageWrapperStyles, imgStyles, leftHeaderStyles, leftWrapperStyles, listWrapperStyles, medatadataTextWrapperStyles, metadataFileNameStyles, metadataIconWrapperStyles, metadataSubTextStyles, metadataWrapperStyles, pdfWrapperStyles, rightHeaderStyles, rightWrapperStyles, sidebarWrapperStyles, spinnerWrapperStyles, videoStyles, zoomControlsWrapperStyles, zoomLevelIndicatorStyles, zoomWrapperStyles } from './styles';
6
+ import { TouchScrollable } from 'react-scrolllock';
7
+ import { useMergeRefs } from 'use-callback-ref';
5
8
  export const Blanket = ({
6
9
  'data-testid': datatestId,
7
10
  className,
@@ -106,14 +109,23 @@ jsx("video", {
106
109
  controls: controls,
107
110
  src: src
108
111
  });
109
- export const PDFWrapper = /*#__PURE__*/forwardRef(({
112
+ const PDFWrapperBody = /*#__PURE__*/forwardRef(({
113
+ innerRef,
110
114
  'data-testid': datatestId,
111
115
  children
112
- }, ref) => jsx("div", {
113
- css: pdfWrapperStyles,
114
- ref: ref,
115
- "data-testid": datatestId
116
- }, children));
116
+ }, ref) => {
117
+ const bodyRef = useMergeRefs([ref, innerRef]);
118
+ return jsx("div", {
119
+ css: pdfWrapperStyles,
120
+ ref: bodyRef,
121
+ "data-testid": datatestId
122
+ }, children);
123
+ });
124
+ export const PDFWrapper = /*#__PURE__*/forwardRef((props, ref) => {
125
+ return jsx(TouchScrollable, null, jsx(PDFWrapperBody, _extends({
126
+ innerRef: ref
127
+ }, props)));
128
+ });
117
129
  export const Arrow = ({
118
130
  className,
119
131
  children
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { jsx } from '@emotion/react';
4
4
  import { archiveDownloadButtonWrapperStyles, archiveItemViewerWrapperStyles, archiveLayoutStyles, archiveSidebarFileEntryWrapperStyles, archiveSidebarFolderWrapperStyles, archiveSideBarStyles, archiveViewerWrapperStyles, separatorStyles, sidebarHeaderEntryStyles, sidebarHeaderIconStyles, sidebarHeaderWrapperStyles, sidebarItemWrapperStyles } from './styles';
5
+ import { TouchScrollable } from 'react-scrolllock';
5
6
  export const ArchiveItemViewerWrapper = ({
6
7
  children
7
8
  }) => {
@@ -12,9 +13,9 @@ export const ArchiveItemViewerWrapper = ({
12
13
  export const ArchiveSideBar = ({
13
14
  children
14
15
  }) => {
15
- return jsx("div", {
16
+ return jsx(TouchScrollable, null, jsx("div", {
16
17
  css: archiveSideBarStyles
17
- }, children);
18
+ }, children));
18
19
  };
19
20
  export const ArchiveSidebarFolderWrapper = ({
20
21
  children
@@ -9,6 +9,7 @@ import ErrorMessage from '../../errorMessage';
9
9
  import { MediaViewerError } from '../../errors';
10
10
  import { lineCount } from './util';
11
11
  import { codeViewerHeaderBarStyles, codeViewWrapperStyles, codeViewerHTMLStyles } from './styles';
12
+ import { TouchScrollable } from 'react-scrolllock';
12
13
 
13
14
  // Based on some basic benchmarking with @atlaskit/code it was found that ~10,000 lines took around ~5secs to render, which locks the main thread.
14
15
  // Therefore we set a hard limit on the amount of lines which we apply formatting to,
@@ -21,10 +22,10 @@ export const CodeViewWrapper = ({
21
22
  children,
22
23
  'data-testid': testId
23
24
  }) => {
24
- return jsx("div", {
25
+ return jsx(TouchScrollable, null, jsx("div", {
25
26
  css: codeViewWrapperStyles,
26
27
  "data-testid": testId
27
- }, children);
28
+ }, children));
28
29
  };
29
30
  export const CodeViewerHeaderBar = () => {
30
31
  return jsx("div", {
@@ -1,7 +1,7 @@
1
1
  import { ANALYTICS_MEDIA_CHANNEL } from '@atlaskit/media-common';
2
2
  var componentName = 'mediaViewer';
3
3
  var packageName = "@atlaskit/media-viewer";
4
- var packageVersion = "48.0.7";
4
+ var packageVersion = "48.0.9";
5
5
  export { packageName, packageVersion, componentName, componentName as component };
6
6
  export function getFileAttributes(fileState) {
7
7
  if (!fileState) {
@@ -5,7 +5,7 @@ import { UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atl
5
5
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
6
6
  import { getFeatureFlagKeysAllProducts } from '@atlaskit/media-common';
7
7
  var packageName = "@atlaskit/media-viewer";
8
- var packageVersion = "48.0.7";
8
+ var packageVersion = "48.0.9";
9
9
  var ufoExperience;
10
10
  var getExperience = function getExperience() {
11
11
  if (!ufoExperience) {
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
3
  import _createClass from "@babel/runtime/helpers/createClass";
3
4
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
@@ -20,6 +21,8 @@ import { Content } from './content';
20
21
  import { Blanket, SidebarWrapper } from './styleWrappers';
21
22
  import { start } from 'perf-marks';
22
23
  import { mediaViewerPopupClass } from './classnames';
24
+ import ScrollLock from 'react-scrolllock';
25
+ import FocusLock from 'react-focus-lock';
23
26
  export var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
24
27
  _inherits(MediaViewerComponent, _React$Component);
25
28
  var _super = _createSuper(MediaViewerComponent);
@@ -99,9 +102,12 @@ export var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
99
102
  items = _this$props2.items,
100
103
  extensions = _this$props2.extensions,
101
104
  contextId = _this$props2.contextId,
102
- featureFlags = _this$props2.featureFlags;
105
+ featureFlags = _this$props2.featureFlags,
106
+ innerRef = _this$props2.innerRef;
103
107
  var isSidebarVisible = this.state.isSidebarVisible;
104
- var content = /*#__PURE__*/React.createElement(Blanket, {
108
+ var content = /*#__PURE__*/React.createElement("div", {
109
+ ref: innerRef
110
+ }, /*#__PURE__*/React.createElement(Blanket, {
105
111
  "data-testid": "media-viewer-popup",
106
112
  className: mediaViewerPopupClass
107
113
  }, /*#__PURE__*/React.createElement(Shortcut, {
@@ -121,7 +127,7 @@ export var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
121
127
  isSidebarVisible: isSidebarVisible,
122
128
  contextId: contextId,
123
129
  featureFlags: featureFlags
124
- })), this.renderSidebar());
130
+ })), this.renderSidebar()));
125
131
  return this.props.intl ? content : /*#__PURE__*/React.createElement(IntlProvider, {
126
132
  locale: "en"
127
133
  }, content);
@@ -129,11 +135,22 @@ export var MediaViewerComponent = /*#__PURE__*/function (_React$Component) {
129
135
  }]);
130
136
  return MediaViewerComponent;
131
137
  }(React.Component);
138
+ var MediaViewerWithRef = /*#__PURE__*/React.forwardRef(function (props, ref) {
139
+ return /*#__PURE__*/React.createElement(MediaViewerComponent, _extends({}, props, {
140
+ innerRef: ref
141
+ }));
142
+ });
143
+ var MediaViewerWithScrollLock = function MediaViewerWithScrollLock(props) {
144
+ return /*#__PURE__*/React.createElement(FocusLock, {
145
+ autoFocus: true,
146
+ returnFocus: true
147
+ }, /*#__PURE__*/React.createElement(ScrollLock, null), /*#__PURE__*/React.createElement(MediaViewerWithRef, props));
148
+ };
132
149
  export var MediaViewer = withMediaAnalyticsContext({
133
150
  packageName: packageName,
134
151
  packageVersion: packageVersion,
135
152
  component: component,
136
153
  componentName: componentName
137
- })(withAnalyticsEvents()(injectIntl(MediaViewerComponent, {
154
+ })(withAnalyticsEvents()(injectIntl(MediaViewerWithScrollLock, {
138
155
  enforceContext: false
139
156
  })));
@@ -1,7 +1,10 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  /** @jsx jsx */
2
3
  import { jsx } from '@emotion/react';
3
4
  import { forwardRef, useMemo } from 'react';
4
5
  import { arrowStyles, arrowsWrapperStyles, audioCoverStyles, audioPlayerStyles, audioStyles, baselineExtendStyles, blanketStyles, closeButtonWrapperStyles, contentWrapperStyles, customAudioPlayerWrapperStyles, customVideoPlayerWrapperStyles, defaultCoverWrapperStyles, downloadButtonWrapperStyles, errorImageStyles, errorMessageWrapperStyles, formattedMessageWrapperStyles, hdIconGroupWrapperStyles, hdIconWrapperStyles, headerStyles, headerWrapperStyles, imageWrapperStyles, imgStyles, leftHeaderStyles, leftWrapperStyles, listWrapperStyles, medatadataTextWrapperStyles, metadataFileNameStyles, metadataIconWrapperStyles, metadataSubTextStyles, metadataWrapperStyles, pdfWrapperStyles, rightHeaderStyles, rightWrapperStyles, sidebarWrapperStyles, spinnerWrapperStyles, videoStyles, zoomControlsWrapperStyles, zoomLevelIndicatorStyles, zoomWrapperStyles } from './styles';
6
+ import { TouchScrollable } from 'react-scrolllock';
7
+ import { useMergeRefs } from 'use-callback-ref';
5
8
  export var Blanket = function Blanket(_ref) {
6
9
  var datatestId = _ref['data-testid'],
7
10
  className = _ref.className,
@@ -119,15 +122,22 @@ export var Video = function Video(_ref14) {
119
122
  })
120
123
  );
121
124
  };
122
- export var PDFWrapper = /*#__PURE__*/forwardRef(function (_ref15, ref) {
123
- var datatestId = _ref15['data-testid'],
125
+ var PDFWrapperBody = /*#__PURE__*/forwardRef(function (_ref15, ref) {
126
+ var innerRef = _ref15.innerRef,
127
+ datatestId = _ref15['data-testid'],
124
128
  children = _ref15.children;
129
+ var bodyRef = useMergeRefs([ref, innerRef]);
125
130
  return jsx("div", {
126
131
  css: pdfWrapperStyles,
127
- ref: ref,
132
+ ref: bodyRef,
128
133
  "data-testid": datatestId
129
134
  }, children);
130
135
  });
136
+ export var PDFWrapper = /*#__PURE__*/forwardRef(function (props, ref) {
137
+ return jsx(TouchScrollable, null, jsx(PDFWrapperBody, _extends({
138
+ innerRef: ref
139
+ }, props)));
140
+ });
131
141
  export var Arrow = function Arrow(_ref16) {
132
142
  var className = _ref16.className,
133
143
  children = _ref16.children;
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { jsx } from '@emotion/react';
4
4
  import { archiveDownloadButtonWrapperStyles, archiveItemViewerWrapperStyles, archiveLayoutStyles, archiveSidebarFileEntryWrapperStyles, archiveSidebarFolderWrapperStyles, archiveSideBarStyles, archiveViewerWrapperStyles, separatorStyles, sidebarHeaderEntryStyles, sidebarHeaderIconStyles, sidebarHeaderWrapperStyles, sidebarItemWrapperStyles } from './styles';
5
+ import { TouchScrollable } from 'react-scrolllock';
5
6
  export var ArchiveItemViewerWrapper = function ArchiveItemViewerWrapper(_ref) {
6
7
  var children = _ref.children;
7
8
  return jsx("div", {
@@ -10,9 +11,9 @@ export var ArchiveItemViewerWrapper = function ArchiveItemViewerWrapper(_ref) {
10
11
  };
11
12
  export var ArchiveSideBar = function ArchiveSideBar(_ref2) {
12
13
  var children = _ref2.children;
13
- return jsx("div", {
14
+ return jsx(TouchScrollable, null, jsx("div", {
14
15
  css: archiveSideBarStyles
15
- }, children);
16
+ }, children));
16
17
  };
17
18
  export var ArchiveSidebarFolderWrapper = function ArchiveSidebarFolderWrapper(_ref3) {
18
19
  var children = _ref3.children;
@@ -19,6 +19,7 @@ import ErrorMessage from '../../errorMessage';
19
19
  import { MediaViewerError } from '../../errors';
20
20
  import { lineCount } from './util';
21
21
  import { codeViewerHeaderBarStyles, codeViewWrapperStyles, codeViewerHTMLStyles } from './styles';
22
+ import { TouchScrollable } from 'react-scrolllock';
22
23
 
23
24
  // Based on some basic benchmarking with @atlaskit/code it was found that ~10,000 lines took around ~5secs to render, which locks the main thread.
24
25
  // Therefore we set a hard limit on the amount of lines which we apply formatting to,
@@ -30,10 +31,10 @@ var MAX_FILE_SIZE_USE_CODE_VIEWER = 5 * 1024 * 1024;
30
31
  export var CodeViewWrapper = function CodeViewWrapper(_ref) {
31
32
  var children = _ref.children,
32
33
  testId = _ref['data-testid'];
33
- return jsx("div", {
34
+ return jsx(TouchScrollable, null, jsx("div", {
34
35
  css: codeViewWrapperStyles,
35
36
  "data-testid": testId
36
- }, children);
37
+ }, children));
37
38
  };
38
39
  export var CodeViewerHeaderBar = function CodeViewerHeaderBar() {
39
40
  return jsx("div", {
@@ -13,6 +13,7 @@ export type Props = {
13
13
  items: Identifier[];
14
14
  extensions?: MediaViewerExtensions;
15
15
  contextId?: string;
16
+ innerRef?: React.Ref<HTMLDivElement>;
16
17
  } & WithAnalyticsEventsProps;
17
18
  export interface State {
18
19
  isSidebarVisible: boolean;
@@ -48,7 +48,7 @@ type VideoProps = {
48
48
  autoPlay: boolean;
49
49
  };
50
50
  export declare const Video: ({ autoPlay, controls, src }: VideoProps) => jsx.JSX.Element;
51
- export declare const PDFWrapper: import("react").ForwardRefExoticComponent<DataTestID & Children & import("react").RefAttributes<unknown>>;
51
+ export declare const PDFWrapper: import("react").ForwardRefExoticComponent<DataTestID & Children & import("react").RefAttributes<HTMLDivElement>>;
52
52
  export declare const Arrow: ({ className, children }: ClassName & Children) => jsx.JSX.Element;
53
53
  export type LeftWrapperProps = {
54
54
  isArchiveSideBarVisible: boolean;
@@ -13,6 +13,7 @@ export type Props = {
13
13
  items: Identifier[];
14
14
  extensions?: MediaViewerExtensions;
15
15
  contextId?: string;
16
+ innerRef?: React.Ref<HTMLDivElement>;
16
17
  } & WithAnalyticsEventsProps;
17
18
  export interface State {
18
19
  isSidebarVisible: boolean;
@@ -48,7 +48,7 @@ type VideoProps = {
48
48
  autoPlay: boolean;
49
49
  };
50
50
  export declare const Video: ({ autoPlay, controls, src }: VideoProps) => jsx.JSX.Element;
51
- export declare const PDFWrapper: import("react").ForwardRefExoticComponent<DataTestID & Children & import("react").RefAttributes<unknown>>;
51
+ export declare const PDFWrapper: import("react").ForwardRefExoticComponent<DataTestID & Children & import("react").RefAttributes<HTMLDivElement>>;
52
52
  export declare const Arrow: ({ className, children }: ClassName & Children) => jsx.JSX.Element;
53
53
  export type LeftWrapperProps = {
54
54
  isArchiveSideBarVisible: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-viewer",
3
- "version": "48.0.7",
3
+ "version": "48.0.9",
4
4
  "description": "MediaViewer is Atlassian's powerful solution for viewing files on the web. It's both powerful and extendable yet easy-to-integrate",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -36,14 +36,14 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@atlaskit/analytics-next": "^9.1.0",
39
- "@atlaskit/button": "^16.8.0",
39
+ "@atlaskit/button": "^16.9.0",
40
40
  "@atlaskit/code": "^14.6.0",
41
41
  "@atlaskit/icon": "^21.12.0",
42
42
  "@atlaskit/icon-file-type": "^6.4.0",
43
43
  "@atlaskit/media-client": "^23.1.0",
44
44
  "@atlaskit/media-common": "^8.0.0",
45
- "@atlaskit/media-ui": "^23.2.0",
46
- "@atlaskit/side-navigation": "^1.10.0",
45
+ "@atlaskit/media-ui": "^23.3.0",
46
+ "@atlaskit/side-navigation": "^2.0.0",
47
47
  "@atlaskit/spinner": "^15.5.0",
48
48
  "@atlaskit/theme": "^12.5.0",
49
49
  "@atlaskit/tokens": "^1.14.0",
@@ -54,8 +54,11 @@
54
54
  "mime": "^2.4.6",
55
55
  "pdfjs-dist": "2.0.943",
56
56
  "perf-marks": "^1.5.0",
57
+ "react-focus-lock": "^2.5.2",
57
58
  "react-loadable": "^5.1.0",
58
- "unzipit": "^1.3.0"
59
+ "react-scrolllock": "^5.0.1",
60
+ "unzipit": "^1.3.0",
61
+ "use-callback-ref": "^1.2.3"
59
62
  },
60
63
  "peerDependencies": {
61
64
  "@emotion/react": "^11.7.1",
@@ -63,7 +66,7 @@
63
66
  "react-intl-next": "npm:react-intl@^5.18.1"
64
67
  },
65
68
  "devDependencies": {
66
- "@atlaskit/button": "^16.8.0",
69
+ "@atlaskit/button": "^16.9.0",
67
70
  "@atlaskit/media-card": "^76.1.0",
68
71
  "@atlaskit/media-core": "^34.1.0",
69
72
  "@atlaskit/media-integration-test-helpers": "^3.0.0",
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@atlaskit/media-viewer",
3
- "version": "48.0.7",
4
- "sideEffects": false
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@atlaskit/media-viewer",
3
- "version": "48.0.7",
4
- "sideEffects": false
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@atlaskit/media-viewer",
3
- "version": "48.0.7",
4
- "sideEffects": false
5
- }