@atlaskit/media-viewer 48.2.14 → 48.3.0

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.
Files changed (55) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/analytics/events/screen/passwordPdf.js +14 -0
  3. package/dist/cjs/analytics/events/screen/pdfPasswordInput.js +14 -0
  4. package/dist/cjs/analytics/index.js +1 -1
  5. package/dist/cjs/analytics/ufoExperiences.js +1 -1
  6. package/dist/cjs/domain/outcome.js +5 -22
  7. package/dist/cjs/item-viewer.js +23 -17
  8. package/dist/cjs/media-viewer.js +2 -1
  9. package/dist/cjs/navigation.js +4 -2
  10. package/dist/cjs/v2/item-viewer-v2.js +10 -10
  11. package/dist/cjs/viewers/doc/index.js +50 -67
  12. package/dist/cjs/viewers/doc/pdfPasswordInput.js +100 -0
  13. package/dist/cjs/viewers/doc/pdfRenderer.js +114 -21
  14. package/dist/cjs/viewers/image/index.js +17 -17
  15. package/dist/es2019/analytics/events/screen/passwordPdf.js +6 -0
  16. package/dist/es2019/analytics/events/screen/pdfPasswordInput.js +6 -0
  17. package/dist/es2019/analytics/index.js +1 -1
  18. package/dist/es2019/analytics/ufoExperiences.js +1 -1
  19. package/dist/es2019/domain/outcome.js +5 -18
  20. package/dist/es2019/item-viewer.js +14 -9
  21. package/dist/es2019/media-viewer.js +2 -1
  22. package/dist/es2019/navigation.js +4 -2
  23. package/dist/es2019/v2/item-viewer-v2.js +10 -10
  24. package/dist/es2019/viewers/doc/index.js +20 -17
  25. package/dist/es2019/viewers/doc/pdfPasswordInput.js +85 -0
  26. package/dist/es2019/viewers/doc/pdfRenderer.js +98 -75
  27. package/dist/es2019/viewers/image/index.js +4 -4
  28. package/dist/esm/analytics/events/screen/passwordPdf.js +8 -0
  29. package/dist/esm/analytics/events/screen/pdfPasswordInput.js +8 -0
  30. package/dist/esm/analytics/index.js +1 -1
  31. package/dist/esm/analytics/ufoExperiences.js +1 -1
  32. package/dist/esm/domain/outcome.js +5 -22
  33. package/dist/esm/item-viewer.js +23 -17
  34. package/dist/esm/media-viewer.js +2 -1
  35. package/dist/esm/navigation.js +4 -2
  36. package/dist/esm/v2/item-viewer-v2.js +10 -10
  37. package/dist/esm/viewers/doc/index.js +50 -62
  38. package/dist/esm/viewers/doc/pdfPasswordInput.js +90 -0
  39. package/dist/esm/viewers/doc/pdfRenderer.js +115 -22
  40. package/dist/esm/viewers/image/index.js +18 -18
  41. package/dist/types/analytics/events/index.d.ts +3 -1
  42. package/dist/types/analytics/events/screen/passwordPdf.d.ts +3 -0
  43. package/dist/types/analytics/events/screen/pdfPasswordInput.d.ts +3 -0
  44. package/dist/types/domain/outcome.d.ts +5 -6
  45. package/dist/types/viewers/doc/index.d.ts +0 -3
  46. package/dist/types/viewers/doc/pdfPasswordInput.d.ts +11 -0
  47. package/dist/types/viewers/doc/pdfRenderer.d.ts +4 -3
  48. package/dist/types-ts4.5/analytics/events/index.d.ts +3 -1
  49. package/dist/types-ts4.5/analytics/events/screen/passwordPdf.d.ts +3 -0
  50. package/dist/types-ts4.5/analytics/events/screen/pdfPasswordInput.d.ts +3 -0
  51. package/dist/types-ts4.5/domain/outcome.d.ts +5 -6
  52. package/dist/types-ts4.5/viewers/doc/index.d.ts +0 -3
  53. package/dist/types-ts4.5/viewers/doc/pdfPasswordInput.d.ts +11 -0
  54. package/dist/types-ts4.5/viewers/doc/pdfRenderer.d.ts +4 -3
  55. package/package.json +16 -7
@@ -20,7 +20,7 @@ import { InteractiveImg } from '../viewers/image/interactive-img';
20
20
  import ArchiveViewerLoader from '../viewers/archiveSidebar/archiveViewerLoader';
21
21
  import { getRandomHex } from '@atlaskit/media-common';
22
22
  import { startMediaFileUfoExperience, succeedMediaFileUfoExperience } from '../analytics/ufoExperiences';
23
- var ImageViewer = Loadable({
23
+ var ImageViewerV2 = Loadable({
24
24
  loader: function loader() {
25
25
  return import( /* webpackChunkName: "@atlaskit-internal_imageViewer" */'../viewers/image').then(function (mod) {
26
26
  return mod.ImageViewer;
@@ -30,7 +30,7 @@ var ImageViewer = Loadable({
30
30
  return /*#__PURE__*/React.createElement(Spinner, null);
31
31
  }
32
32
  });
33
- var VideoViewer = Loadable({
33
+ var VideoViewerV2 = Loadable({
34
34
  loader: function loader() {
35
35
  return import( /* webpackChunkName: "@atlaskit-internal_videoViewer" */'../viewers/video').then(function (mod) {
36
36
  return mod.VideoViewer;
@@ -40,7 +40,7 @@ var VideoViewer = Loadable({
40
40
  return /*#__PURE__*/React.createElement(Spinner, null);
41
41
  }
42
42
  });
43
- var AudioViewer = Loadable({
43
+ var AudioViewerV2 = Loadable({
44
44
  loader: function loader() {
45
45
  return import( /* webpackChunkName: "@atlaskit-internal_audioViewer" */'../viewers/audio').then(function (mod) {
46
46
  return mod.AudioViewer;
@@ -50,7 +50,7 @@ var AudioViewer = Loadable({
50
50
  return /*#__PURE__*/React.createElement(Spinner, null);
51
51
  }
52
52
  });
53
- var DocViewer = Loadable({
53
+ var DocViewerV2 = Loadable({
54
54
  loader: function loader() {
55
55
  return import( /* webpackChunkName: "@atlaskit-internal_docViewer" */'../viewers/doc').then(function (mod) {
56
56
  return mod.DocViewer;
@@ -60,7 +60,7 @@ var DocViewer = Loadable({
60
60
  return /*#__PURE__*/React.createElement(Spinner, null);
61
61
  }
62
62
  });
63
- var CodeViewer = Loadable({
63
+ var CodeViewerV2 = Loadable({
64
64
  loader: function loader() {
65
65
  return import( /* webpackChunkName: "@atlaskit-internal_codeViewer" */'../viewers/codeViewer').then(function (mod) {
66
66
  return mod.CodeViewer;
@@ -239,7 +239,7 @@ export var ItemViewerV2Base = function ItemViewerV2Base(_ref) {
239
239
  if (fileItem.size > MAX_FILE_SIZE_SUPPORTED_BY_CODEVIEWER) {
240
240
  return renderError(new MediaViewerError('codeviewer-file-size-exceeds'), fileItem);
241
241
  }
242
- return /*#__PURE__*/React.createElement(CodeViewer, _extends({
242
+ return /*#__PURE__*/React.createElement(CodeViewerV2, _extends({
243
243
  onSuccess: onSuccess,
244
244
  onError: onLoadFail
245
245
  }, viewerProps));
@@ -247,26 +247,26 @@ export var ItemViewerV2Base = function ItemViewerV2Base(_ref) {
247
247
  var mediaType = fileItem.mediaType;
248
248
  switch (mediaType) {
249
249
  case 'image':
250
- return /*#__PURE__*/React.createElement(ImageViewer, _extends({
250
+ return /*#__PURE__*/React.createElement(ImageViewerV2, _extends({
251
251
  onLoad: onSuccess,
252
252
  onError: onLoadFail,
253
253
  contextId: contextId,
254
254
  traceContext: traceContext.current
255
255
  }, viewerProps));
256
256
  case 'audio':
257
- return /*#__PURE__*/React.createElement(AudioViewer, _extends({
257
+ return /*#__PURE__*/React.createElement(AudioViewerV2, _extends({
258
258
  showControls: showControls,
259
259
  onCanPlay: onSuccess,
260
260
  onError: onLoadFail
261
261
  }, viewerProps));
262
262
  case 'video':
263
- return /*#__PURE__*/React.createElement(VideoViewer, _extends({
263
+ return /*#__PURE__*/React.createElement(VideoViewerV2, _extends({
264
264
  showControls: showControls,
265
265
  onCanPlay: onSuccess,
266
266
  onError: onLoadFail
267
267
  }, viewerProps));
268
268
  case 'doc':
269
- return /*#__PURE__*/React.createElement(DocViewer, _extends({
269
+ return /*#__PURE__*/React.createElement(DocViewerV2, _extends({
270
270
  onSuccess: onSuccess,
271
271
  onError: onLoadFail
272
272
  }, viewerProps));
@@ -11,17 +11,9 @@ import React from 'react';
11
11
  import { isPreviewableFileState } from '@atlaskit/media-client';
12
12
  import { Outcome } from '../../domain';
13
13
  import { MediaViewerError } from '../../errors';
14
- import { Spinner } from '../../loading';
14
+ import { PDFRenderer } from './pdfRenderer';
15
15
  import { BaseViewer } from '../base-viewer';
16
16
  import { getObjectUrlFromFileState } from '../../utils/getObjectUrlFromFileState';
17
- var moduleLoader = function moduleLoader() {
18
- return import( /* webpackChunkName: "@atlaskit-internal_media-pdf-viewer" */'./pdfRenderer');
19
- };
20
- var componentLoader = function componentLoader() {
21
- return moduleLoader().then(function (module) {
22
- return module.PDFRenderer;
23
- });
24
- };
25
17
  export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
26
18
  _inherits(DocViewer, _BaseViewer);
27
19
  var _super = _createSuper(DocViewer);
@@ -40,59 +32,52 @@ export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
40
32
  key: "init",
41
33
  value: function () {
42
34
  var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
43
- var _this$props, item, mediaClient, collectionName, onError, src, _src, docError;
35
+ var _this$props, item, mediaClient, collectionName, onError, src, _src, docError, _src2, _docError;
44
36
  return _regeneratorRuntime.wrap(function _callee$(_context) {
45
37
  while (1) switch (_context.prev = _context.next) {
46
38
  case 0:
47
- if (DocViewer.PDFComponent) {
48
- _context.next = 3;
49
- break;
50
- }
51
- _context.next = 3;
52
- return this.loadDocViewer();
53
- case 3:
54
39
  _this$props = this.props, item = _this$props.item, mediaClient = _this$props.mediaClient, collectionName = _this$props.collectionName, onError = _this$props.onError;
55
40
  if (!isPreviewableFileState(item)) {
56
- _context.next = 14;
41
+ _context.next = 11;
57
42
  break;
58
43
  }
59
- _context.next = 7;
44
+ _context.next = 4;
60
45
  return getObjectUrlFromFileState(item);
61
- case 7:
46
+ case 4:
62
47
  src = _context.sent;
63
48
  if (src) {
64
- _context.next = 11;
49
+ _context.next = 8;
65
50
  break;
66
51
  }
67
52
  this.setState({
68
53
  content: Outcome.pending()
69
54
  });
70
55
  return _context.abrupt("return");
71
- case 11:
56
+ case 8:
72
57
  this.setState({
73
58
  content: Outcome.successful(src)
74
59
  });
75
- _context.next = 28;
60
+ _context.next = 41;
76
61
  break;
77
- case 14:
62
+ case 11:
78
63
  if (!(item.status === 'processed')) {
79
- _context.next = 28;
64
+ _context.next = 27;
80
65
  break;
81
66
  }
82
- _context.prev = 15;
83
- _context.next = 18;
67
+ _context.prev = 12;
68
+ _context.next = 15;
84
69
  return mediaClient.file.getArtifactURL(item.artifacts, 'document.pdf', collectionName);
85
- case 18:
70
+ case 15:
86
71
  _src = _context.sent;
87
72
  this.onMediaDisplayed();
88
73
  this.setState({
89
74
  content: Outcome.successful(_src)
90
75
  });
91
- _context.next = 28;
76
+ _context.next = 25;
92
77
  break;
93
- case 23:
94
- _context.prev = 23;
95
- _context.t0 = _context["catch"](15);
78
+ case 20:
79
+ _context.prev = 20;
80
+ _context.t0 = _context["catch"](12);
96
81
  docError = new MediaViewerError('docviewer-fetch-url', _context.t0 instanceof Error ? _context.t0 : undefined);
97
82
  this.setState({
98
83
  content: Outcome.failed(docError)
@@ -100,40 +85,47 @@ export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
100
85
  if (onError) {
101
86
  onError(docError);
102
87
  }
103
- case 28:
88
+ case 25:
89
+ _context.next = 41;
90
+ break;
91
+ case 27:
92
+ if (!(item.status === 'failed-processing')) {
93
+ _context.next = 41;
94
+ break;
95
+ }
96
+ _context.prev = 28;
97
+ _context.next = 31;
98
+ return mediaClient.file.getFileBinaryURL(item.id, collectionName, 2940 // 2940 seconds ~= 50 mins
99
+ );
100
+ case 31:
101
+ _src2 = _context.sent;
102
+ this.onMediaDisplayed();
103
+ this.setState({
104
+ content: Outcome.successful(_src2)
105
+ });
106
+ _context.next = 41;
107
+ break;
108
+ case 36:
109
+ _context.prev = 36;
110
+ _context.t1 = _context["catch"](28);
111
+ _docError = new MediaViewerError('docviewer-fetch-url', _context.t1 instanceof Error ? _context.t1 : undefined);
112
+ this.setState({
113
+ content: Outcome.failed(_docError)
114
+ });
115
+ if (onError) {
116
+ onError(_docError);
117
+ }
118
+ case 41:
104
119
  case "end":
105
120
  return _context.stop();
106
121
  }
107
- }, _callee, this, [[15, 23]]);
122
+ }, _callee, this, [[12, 20], [28, 36]]);
108
123
  }));
109
124
  function init() {
110
125
  return _init.apply(this, arguments);
111
126
  }
112
127
  return init;
113
128
  }()
114
- }, {
115
- key: "loadDocViewer",
116
- value: function () {
117
- var _loadDocViewer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
118
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
119
- while (1) switch (_context2.prev = _context2.next) {
120
- case 0:
121
- _context2.next = 2;
122
- return componentLoader();
123
- case 2:
124
- DocViewer.PDFComponent = _context2.sent;
125
- this.forceUpdate();
126
- case 4:
127
- case "end":
128
- return _context2.stop();
129
- }
130
- }, _callee2, this);
131
- }));
132
- function loadDocViewer() {
133
- return _loadDocViewer.apply(this, arguments);
134
- }
135
- return loadDocViewer;
136
- }()
137
129
  }, {
138
130
  key: "release",
139
131
  value: function release() {
@@ -151,11 +143,7 @@ export var DocViewer = /*#__PURE__*/function (_BaseViewer) {
151
143
  onClose = _this$props2.onClose,
152
144
  onSuccess = _this$props2.onSuccess,
153
145
  onError = _this$props2.onError;
154
- var PDFComponent = DocViewer.PDFComponent;
155
- if (!PDFComponent) {
156
- return /*#__PURE__*/React.createElement(Spinner, null);
157
- }
158
- return /*#__PURE__*/React.createElement(PDFComponent, {
146
+ return /*#__PURE__*/React.createElement(PDFRenderer, {
159
147
  item: item,
160
148
  src: content,
161
149
  onSuccess: onSuccess,
@@ -0,0 +1,90 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import React, { useEffect, useRef, useState } from 'react';
4
+ import LoadingButton from '@atlaskit/button/loading-button';
5
+ import TextField from '@atlaskit/textfield';
6
+ import LockIcon from '@atlaskit/icon/glyph/lock';
7
+ import Form, { ErrorMessage, Field } from '@atlaskit/form';
8
+ import { FormattedMessage, useIntl } from 'react-intl-next';
9
+ import { messages } from '@atlaskit/media-ui';
10
+ import Heading from '@atlaskit/heading';
11
+ import { xcss, Box, Flex } from '@atlaskit/primitives';
12
+ var headerStyles = xcss({
13
+ textAlign: 'center',
14
+ marginTop: 'space.300',
15
+ marginBottom: 'space.100'
16
+ });
17
+ var inputStyle = xcss({
18
+ width: '330px'
19
+ });
20
+ var footerStyles = xcss({
21
+ marginTop: 'space.200',
22
+ display: 'flex',
23
+ justifyContent: 'center'
24
+ });
25
+ export var PDFPasswordInput = function PDFPasswordInput(_ref) {
26
+ var onSubmit = _ref.onSubmit,
27
+ hasPasswordError = _ref.hasPasswordError,
28
+ onRender = _ref.onRender;
29
+ var passwordInputRef = useRef(null);
30
+ var onRenderRef = useRef(onRender);
31
+ var _useState = useState(hasPasswordError),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ formError = _useState2[0],
34
+ setFormError = _useState2[1];
35
+ var intl = useIntl();
36
+ useEffect(function () {
37
+ var _onRenderRef$current;
38
+ (_onRenderRef$current = onRenderRef.current) === null || _onRenderRef$current === void 0 || _onRenderRef$current.call(onRenderRef);
39
+ }, []);
40
+ useEffect(function () {
41
+ if (hasPasswordError) {
42
+ var _passwordInputRef$cur;
43
+ setFormError(true);
44
+ (_passwordInputRef$cur = passwordInputRef.current) === null || _passwordInputRef$cur === void 0 || _passwordInputRef$cur.focus();
45
+ }
46
+ }, [hasPasswordError]);
47
+ return /*#__PURE__*/React.createElement(Form, {
48
+ onSubmit: onSubmit
49
+ }, function (_ref2) {
50
+ var formProps = _ref2.formProps,
51
+ submitting = _ref2.submitting;
52
+ return /*#__PURE__*/React.createElement("form", formProps, /*#__PURE__*/React.createElement(Flex, {
53
+ justifyContent: "center",
54
+ "aria-hidden": true
55
+ }, /*#__PURE__*/React.createElement(LockIcon, {
56
+ label: "forbidden-lock-icon",
57
+ size: "xlarge",
58
+ primaryColor: "var(--ds-text, #c7d1db)"
59
+ })), /*#__PURE__*/React.createElement(Box, {
60
+ xcss: headerStyles
61
+ }, /*#__PURE__*/React.createElement(Heading, {
62
+ as: "h1",
63
+ level: "h200"
64
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.password_protected_pdf))), /*#__PURE__*/React.createElement(Field, {
65
+ "aria-required": true,
66
+ name: "password",
67
+ label: "Password",
68
+ isRequired: true
69
+ }, function (_ref3) {
70
+ var fieldProps = _ref3.fieldProps;
71
+ return /*#__PURE__*/React.createElement(Box, {
72
+ xcss: inputStyle
73
+ }, /*#__PURE__*/React.createElement(TextField, _extends({}, fieldProps, {
74
+ type: "password",
75
+ placeholder: intl.formatMessage(messages.enter_password),
76
+ ref: passwordInputRef,
77
+ onChange: function onChange(value) {
78
+ fieldProps.onChange(value);
79
+ setFormError(false);
80
+ }
81
+ })), formError && /*#__PURE__*/React.createElement(ErrorMessage, null, /*#__PURE__*/React.createElement(FormattedMessage, messages.incorrect_password)));
82
+ }), /*#__PURE__*/React.createElement(Box, {
83
+ xcss: footerStyles
84
+ }, /*#__PURE__*/React.createElement(LoadingButton, {
85
+ appearance: "primary",
86
+ type: "submit",
87
+ isLoading: submitting
88
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.submit))));
89
+ });
90
+ };
@@ -2,12 +2,12 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
4
  import _createClass from "@babel/runtime/helpers/createClass";
5
- import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
6
- var _templateObject;
5
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
6
  import _regeneratorRuntime from "@babel/runtime/regenerator";
8
7
  import React, { useEffect, useRef, useState } from 'react';
9
8
  import { PDFViewer, EventBus, PDFLinkService, NullL10n } from 'pdfjs-dist/legacy/web/pdf_viewer';
10
- import { getDocument, GlobalWorkerOptions, CMapCompressionType } from 'pdfjs-dist/legacy/build/pdf';
9
+ import { getDocument, GlobalWorkerOptions, CMapCompressionType, PasswordResponses } from 'pdfjs-dist/legacy/build/pdf';
10
+ import { withAnalyticsEvents } from '@atlaskit/analytics-next';
11
11
  import { cmap } from './cmaps';
12
12
  import { css, Global } from '@emotion/react';
13
13
  import { ZoomControls } from '../../zoomControls';
@@ -20,14 +20,67 @@ import { ZoomLevel } from '../../domain/zoomLevel';
20
20
  import { processError } from './processError';
21
21
  import { pdfJs } from './pdfJs';
22
22
  import { extractCompressedBase64 } from './extractCompressedBase64';
23
+ import { PDFPasswordInput } from './pdfPasswordInput';
24
+ import { fireAnalytics } from '../../analytics';
25
+ import { createPdfPasswordInputScreenEvent } from '../../analytics/events/screen/pdfPasswordInput';
26
+ import { createPasswordPdfScreenEvent } from '../../analytics/events/screen/passwordPdf';
23
27
  export var pdfViewerClassName = 'pdfViewer';
24
28
 
25
29
  // Styles are partially copied from https://github.com/mozilla/pdfjs-dist/blob/v2.9.359/web/pdf_viewer.css
26
30
  /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
27
31
  /* eslint-disable @atlaskit/design-system/ensure-design-token-usage/preview */
28
- var globalStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .", " {\n margin-top: ", ";\n margin-bottom: ", ";\n\n .page {\n margin: 1px auto ", " auto;\n border: 9px solid transparent;\n position: relative;\n }\n\n .canvasWrapper {\n overflow: hidden;\n }\n\n .textLayer {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n opacity: 0.2;\n line-height: 1;\n }\n\n .textLayer span,\n .textLayer br {\n color: transparent;\n position: absolute;\n white-space: pre;\n cursor: text;\n transform-origin: 0% 0%;\n }\n\n .textLayer ::-moz-selection {\n background: rgba(0, 0, 255, 1);\n }\n\n .textLayer ::selection {\n background: rgba(0, 0, 255, 1);\n }\n\n .annotationLayer section {\n position: absolute;\n text-align: initial;\n }\n\n .annotationLayer .linkAnnotation > a,\n .annotationLayer .buttonWidgetAnnotation.pushButton > a {\n position: absolute;\n font-size: 1em;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .annotationLayer .linkAnnotation > a:hover,\n .annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {\n opacity: 0.2;\n background: rgba(255, 255, 0, 1);\n box-shadow: 0 2px 10px rgba(255, 255, 0, 1);\n }\n }\n"])), pdfViewerClassName, "var(--ds-space-800, 64px)", "var(--ds-space-800, 64px)", "var(--ds-space-negative-100, -8px)");
29
- /* eslint-enable @atlaskit/design-system/ensure-design-token-usage/preview */
30
- /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
32
+ var globalStyles = css(_defineProperty({}, ".".concat(pdfViewerClassName), {
33
+ marginTop: "var(--ds-space-800, 64px)",
34
+ marginBottom: "var(--ds-space-800, 64px)",
35
+ '.page': {
36
+ margin: "1px auto ".concat("var(--ds-space-negative-100, -8px)", " auto"),
37
+ border: '9px solid transparent',
38
+ position: 'relative'
39
+ },
40
+ '.canvasWrapper': {
41
+ overflow: 'hidden'
42
+ },
43
+ '.textLayer': {
44
+ position: 'absolute',
45
+ left: 0,
46
+ top: 0,
47
+ right: 0,
48
+ bottom: 0,
49
+ overflow: 'hidden',
50
+ opacity: 0.2,
51
+ lineHeight: 1
52
+ },
53
+ '.textLayer span, .textLayer br': {
54
+ color: 'transparent',
55
+ position: 'absolute',
56
+ whiteSpace: 'pre',
57
+ cursor: 'text',
58
+ transformOrigin: '0% 0%'
59
+ },
60
+ '.textLayer ::-moz-selection': {
61
+ background: 'rgba(0, 0, 255, 1)'
62
+ },
63
+ '.textLayer ::selection': {
64
+ background: 'rgba(0, 0, 255, 1)'
65
+ },
66
+ '.annotationLayer section': {
67
+ position: 'absolute',
68
+ textAlign: 'initial'
69
+ },
70
+ '.annotationLayer .linkAnnotation > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a': {
71
+ position: 'absolute',
72
+ fontSize: '1em',
73
+ top: 0,
74
+ left: 0,
75
+ width: '100%',
76
+ height: '100%'
77
+ },
78
+ '.annotationLayer .linkAnnotation > a:hover, .annotationLayer .buttonWidgetAnnotation.pushButton > a:hover': {
79
+ opacity: 0.2,
80
+ background: 'rgba(255, 255, 0, 1)',
81
+ boxShadow: '0 2px 10px rgba(255, 255, 0, 1)'
82
+ }
83
+ }));
31
84
  var CmapFacotry = /*#__PURE__*/function () {
32
85
  function CmapFacotry() {
33
86
  _classCallCheck(this, CmapFacotry);
@@ -69,13 +122,14 @@ var CmapFacotry = /*#__PURE__*/function () {
69
122
  return CmapFacotry;
70
123
  }();
71
124
  var defaultWorkerUrl = '';
72
- export var PDFRenderer = function PDFRenderer(_ref2) {
125
+ var PDFRendererBase = function PDFRendererBase(_ref2) {
73
126
  var src = _ref2.src,
74
127
  onClose = _ref2.onClose,
75
128
  onSuccess = _ref2.onSuccess,
76
129
  onError = _ref2.onError,
77
130
  workerUrl = _ref2.workerUrl,
78
- item = _ref2.item;
131
+ item = _ref2.item,
132
+ createAnalyticsEvent = _ref2.createAnalyticsEvent;
79
133
  var _useState = useState(new ZoomLevel(1)),
80
134
  _useState2 = _slicedToArray(_useState, 2),
81
135
  zoomLevel = _useState2[0],
@@ -84,18 +138,28 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
84
138
  _useState4 = _slicedToArray(_useState3, 2),
85
139
  docOutcome = _useState4[0],
86
140
  setDocOutcome = _useState4[1];
141
+ var isPasswordPdfRef = useRef(false);
142
+ var _useState5 = useState(false),
143
+ _useState6 = _slicedToArray(_useState5, 2),
144
+ passwordProtected = _useState6[0],
145
+ setPasswordProtected = _useState6[1];
146
+ var _useState7 = useState(false),
147
+ _useState8 = _slicedToArray(_useState7, 2),
148
+ hasPasswordError = _useState8[0],
149
+ setHasPasswordError = _useState8[1];
87
150
  var pdfWrapperRef = useRef();
88
151
  var docRef = useRef();
89
152
  var pdfViewerRef = useRef();
90
153
  var onSuccessRef = useRef(onSuccess);
91
154
  onSuccessRef.current = onSuccess;
155
+ var updatePasswordRef = useRef(undefined);
92
156
  var onErrorRef = useRef(onError);
93
157
  onErrorRef.current = onError;
94
158
  useEffect(function () {
95
159
  var isSubscribed = true;
96
160
  var fetchDoc = /*#__PURE__*/function () {
97
161
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
98
- var blob, pdfError;
162
+ var blob, getDocumentTask, pdfError;
99
163
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
100
164
  while (1) switch (_context2.prev = _context2.next) {
101
165
  case 0:
@@ -111,29 +175,39 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
111
175
  defaultWorkerUrl = URL.createObjectURL(blob);
112
176
  case 6:
113
177
  GlobalWorkerOptions.workerSrc = workerUrl !== null && workerUrl !== void 0 ? workerUrl : defaultWorkerUrl;
114
- _context2.next = 9;
115
- return getDocument({
178
+ getDocumentTask = getDocument({
116
179
  url: src,
117
180
  CMapReaderFactory: CmapFacotry
118
- }).promise;
119
- case 9:
181
+ });
182
+ getDocumentTask.onPassword = function (updatePassword, e) {
183
+ updatePasswordRef.current = updatePassword;
184
+ if (e === PasswordResponses.NEED_PASSWORD) {
185
+ isPasswordPdfRef.current = true;
186
+ setPasswordProtected(true);
187
+ } else {
188
+ setHasPasswordError(true);
189
+ }
190
+ };
191
+ _context2.next = 11;
192
+ return getDocumentTask.promise;
193
+ case 11:
120
194
  docRef.current = _context2.sent;
121
195
  isSubscribed && setDocOutcome(Outcome.successful(docRef.current));
122
- _context2.next = 18;
196
+ _context2.next = 20;
123
197
  break;
124
- case 13:
125
- _context2.prev = 13;
198
+ case 15:
199
+ _context2.prev = 15;
126
200
  _context2.t0 = _context2["catch"](0);
127
201
  pdfError = processError(_context2.t0);
128
202
  isSubscribed && setDocOutcome(Outcome.failed(pdfError));
129
203
  if (onErrorRef.current) {
130
204
  onErrorRef.current(pdfError);
131
205
  }
132
- case 18:
206
+ case 20:
133
207
  case "end":
134
208
  return _context2.stop();
135
209
  }
136
- }, _callee2, null, [[0, 13]]);
210
+ }, _callee2, null, [[0, 15]]);
137
211
  }));
138
212
  return function fetchDoc() {
139
213
  return _ref3.apply(this, arguments);
@@ -165,10 +239,13 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
165
239
  pdfViewerRef.current.setDocument(docRef.current);
166
240
  pdfLinkService.setDocument(docRef.current, null);
167
241
  pdfViewerRef.current.firstPagePromise.then(scaleToFit);
242
+ if (isPasswordPdfRef.current) {
243
+ fireAnalytics(createPasswordPdfScreenEvent(), createAnalyticsEvent);
244
+ }
168
245
  if (onSuccessRef.current) {
169
246
  onSuccessRef.current();
170
247
  }
171
- }, [docOutcome]);
248
+ }, [createAnalyticsEvent, docOutcome]);
172
249
  var savePdfElement = function savePdfElement(el) {
173
250
  pdfWrapperRef.current = el;
174
251
  };
@@ -184,7 +261,18 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
184
261
  };
185
262
  return docOutcome.match({
186
263
  pending: function pending() {
187
- return /*#__PURE__*/React.createElement(Spinner, null);
264
+ return passwordProtected ? /*#__PURE__*/React.createElement(PDFPasswordInput, {
265
+ onRender: function onRender() {
266
+ return fireAnalytics(createPdfPasswordInputScreenEvent(), createAnalyticsEvent);
267
+ },
268
+ onSubmit: function onSubmit(data) {
269
+ var _updatePasswordRef$cu;
270
+ // Reset hasPasswordError on each submission
271
+ hasPasswordError && setHasPasswordError(false);
272
+ (_updatePasswordRef$cu = updatePasswordRef.current) === null || _updatePasswordRef$cu === void 0 || _updatePasswordRef$cu.call(updatePasswordRef, data.password);
273
+ },
274
+ hasPasswordError: hasPasswordError
275
+ }) : /*#__PURE__*/React.createElement(Spinner, null);
188
276
  },
189
277
  successful: function successful() {
190
278
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Global, {
@@ -192,7 +280,10 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
192
280
  }), /*#__PURE__*/React.createElement(PDFWrapper, {
193
281
  "data-testid": "media-viewer-pdf-content",
194
282
  ref: savePdfElement
195
- }, /*#__PURE__*/React.createElement("div", {
283
+ },
284
+ /*#__PURE__*/
285
+ // eslint-disable-next-line @atlaskit/design-system/prefer-primitives
286
+ React.createElement("div", {
196
287
  className: pdfViewerClassName,
197
288
  onClick: closeOnDirectClick(onClose)
198
289
  }), /*#__PURE__*/React.createElement(ZoomControls, {
@@ -209,4 +300,6 @@ export var PDFRenderer = function PDFRenderer(_ref2) {
209
300
  });
210
301
  }
211
302
  });
212
- };
303
+ };
304
+
305
+ export var PDFRenderer = withAnalyticsEvents()(PDFRendererBase);