@atlaskit/media-document-viewer 0.1.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.
- package/CHANGELOG.md +1 -0
- package/LICENSE.md +11 -0
- package/README.md +9 -0
- package/dist/cjs/documentViewer.compiled.css +9 -0
- package/dist/cjs/documentViewer.js +56 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/page.compiled.css +11 -0
- package/dist/cjs/page.js +162 -0
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/usePageContent.js +81 -0
- package/dist/cjs/utils/getDocumentRoot.js +20 -0
- package/dist/cjs/utils/useCachedGetImage.js +57 -0
- package/dist/cjs/utils/useIntersectionObserver.js +65 -0
- package/dist/cjs/utils/useStaticCallback.js +14 -0
- package/dist/es2019/documentViewer.compiled.css +9 -0
- package/dist/es2019/documentViewer.js +46 -0
- package/dist/es2019/index.js +2 -0
- package/dist/es2019/page.compiled.css +11 -0
- package/dist/es2019/page.js +146 -0
- package/dist/es2019/types.js +0 -0
- package/dist/es2019/usePageContent.js +47 -0
- package/dist/es2019/utils/getDocumentRoot.js +14 -0
- package/dist/es2019/utils/useCachedGetImage.js +20 -0
- package/dist/es2019/utils/useIntersectionObserver.js +55 -0
- package/dist/es2019/utils/useStaticCallback.js +6 -0
- package/dist/esm/documentViewer.compiled.css +9 -0
- package/dist/esm/documentViewer.js +47 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/page.compiled.css +11 -0
- package/dist/esm/page.js +153 -0
- package/dist/esm/types.js +0 -0
- package/dist/esm/usePageContent.js +74 -0
- package/dist/esm/utils/getDocumentRoot.js +14 -0
- package/dist/esm/utils/useCachedGetImage.js +50 -0
- package/dist/esm/utils/useIntersectionObserver.js +58 -0
- package/dist/esm/utils/useStaticCallback.js +8 -0
- package/dist/types/documentViewer.d.ts +10 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/page.d.ts +16 -0
- package/dist/types/types.d.ts +42 -0
- package/dist/types/usePageContent.d.ts +15 -0
- package/dist/types/utils/getDocumentRoot.d.ts +2 -0
- package/dist/types/utils/useCachedGetImage.d.ts +1 -0
- package/dist/types/utils/useIntersectionObserver.d.ts +5 -0
- package/dist/types/utils/useStaticCallback.d.ts +1 -0
- package/dist/types-ts4.5/documentViewer.d.ts +10 -0
- package/dist/types-ts4.5/index.d.ts +2 -0
- package/dist/types-ts4.5/page.d.ts +16 -0
- package/dist/types-ts4.5/types.d.ts +42 -0
- package/dist/types-ts4.5/usePageContent.d.ts +15 -0
- package/dist/types-ts4.5/utils/getDocumentRoot.d.ts +2 -0
- package/dist/types-ts4.5/utils/useCachedGetImage.d.ts +1 -0
- package/dist/types-ts4.5/utils/useIntersectionObserver.d.ts +5 -0
- package/dist/types-ts4.5/utils/useStaticCallback.d.ts +1 -0
- package/package.json +92 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @atlaskit/media-document-viewer
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Copyright 2023 Atlassian Pty Ltd
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
|
|
4
|
+
compliance with the License. You may obtain a copy of the License at
|
|
5
|
+
|
|
6
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
|
|
8
|
+
Unless required by applicable law or agreed to in writing, software distributed under the License is
|
|
9
|
+
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
10
|
+
implied. See the License for the specific language governing permissions and limitations under the
|
|
11
|
+
License.
|
package/README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# MediaDocumentViewer
|
|
2
|
+
|
|
3
|
+
Modern and fast document viewer
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
`import MediaDocumentViewer from '@atlaskit/media-document-viewer';`
|
|
8
|
+
|
|
9
|
+
Detailed docs and example usage can be found [here](https://atlaskit.atlassian.com/packages/media/media-document-viewer).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
._zulputpp{gap:var(--ds-space-150,9pt)}._18m91wug{overflow-y:auto}
|
|
3
|
+
._19pkxncg{margin-top:var(--ds-space-800,4pc)}
|
|
4
|
+
._1bah1h6o{justify-content:center}
|
|
5
|
+
._1e0c1txw{display:flex}
|
|
6
|
+
._1reo1wug{overflow-x:auto}
|
|
7
|
+
._1ul91osq{min-width:100%}
|
|
8
|
+
._2lx21bp4{flex-direction:column}
|
|
9
|
+
._4cvr1h6o{align-items:center}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* documentViewer.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.DocumentViewer = void 0;
|
|
10
|
+
require("./documentViewer.compiled.css");
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _runtime = require("@compiled/react/runtime");
|
|
13
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
14
|
+
var _page = require("./page");
|
|
15
|
+
var _usePageContent2 = require("./usePageContent");
|
|
16
|
+
var _useCachedGetImage = require("./utils/useCachedGetImage");
|
|
17
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
18
|
+
var documentViewerStyles = null;
|
|
19
|
+
var DEFAULT_PAGINATION_SIZE = 50;
|
|
20
|
+
var DocumentViewer = exports.DocumentViewer = function DocumentViewer(_ref) {
|
|
21
|
+
var _documentMetadata$pag;
|
|
22
|
+
var getContent = _ref.getContent,
|
|
23
|
+
getPageImageUrl = _ref.getPageImageUrl,
|
|
24
|
+
_ref$paginationSize = _ref.paginationSize,
|
|
25
|
+
paginationSize = _ref$paginationSize === void 0 ? DEFAULT_PAGINATION_SIZE : _ref$paginationSize,
|
|
26
|
+
zoom = _ref.zoom;
|
|
27
|
+
var _usePageContent = (0, _usePageContent2.usePageContent)(getContent, paginationSize),
|
|
28
|
+
getPageContent = _usePageContent.getPageContent,
|
|
29
|
+
loadPageContent = _usePageContent.loadPageContent,
|
|
30
|
+
documentMetadata = _usePageContent.documentMetadata;
|
|
31
|
+
var getImageUrl = (0, _useCachedGetImage.useCachedGetImage)(getPageImageUrl);
|
|
32
|
+
var style = {
|
|
33
|
+
'--document-viewer-zoom': zoom
|
|
34
|
+
};
|
|
35
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
36
|
+
"data-testid": "document-viewer",
|
|
37
|
+
style: style,
|
|
38
|
+
className: (0, _runtime.ax)(["_zulputpp _1reo1wug _18m91wug _19pkxncg _1ul91osq _1e0c1txw _2lx21bp4 _4cvr1h6o _1bah1h6o"])
|
|
39
|
+
}, (0, _toConsumableArray2.default)(Array((_documentMetadata$pag = documentMetadata.pageCount) !== null && _documentMetadata$pag !== void 0 ? _documentMetadata$pag : 4)).map(function (_, i) {
|
|
40
|
+
var _getPageContent = getPageContent(i),
|
|
41
|
+
page = _getPageContent.page,
|
|
42
|
+
fonts = _getPageContent.fonts;
|
|
43
|
+
return /*#__PURE__*/React.createElement(_page.Page, {
|
|
44
|
+
key: i,
|
|
45
|
+
getPageSrc: getImageUrl,
|
|
46
|
+
pageIndex: i,
|
|
47
|
+
zoom: zoom,
|
|
48
|
+
defaultDimensions: documentMetadata.defaultDimensions,
|
|
49
|
+
onVisible: function onVisible() {
|
|
50
|
+
return loadPageContent(i);
|
|
51
|
+
},
|
|
52
|
+
fonts: fonts,
|
|
53
|
+
content: page
|
|
54
|
+
});
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "DOCUMENT_SCROLL_ROOT_ID", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _getDocumentRoot.DOCUMENT_SCROLL_ROOT_ID;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "DocumentViewer", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _documentViewer.DocumentViewer;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _documentViewer = require("./documentViewer");
|
|
19
|
+
var _getDocumentRoot = require("./utils/getDocumentRoot");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
._154iidpf{top:0}
|
|
2
|
+
._1kemd8h4{image-rendering:pixelated}
|
|
3
|
+
._1ltvidpf{left:0}
|
|
4
|
+
._80om1kdv{cursor:text}
|
|
5
|
+
._bfhku67f{background-color:#fff}
|
|
6
|
+
._kqswh2mm{position:relative}
|
|
7
|
+
._kqswstnw{position:absolute}
|
|
8
|
+
._lswu1j28{fill:transparent}
|
|
9
|
+
._o572qvpr{white-space:pre}
|
|
10
|
+
._uizt1kdv{-webkit-user-select:text;-ms-user-select:text;user-select:text}
|
|
11
|
+
._uiztglyw{-webkit-user-select:none;-ms-user-select:none;user-select:none}
|
package/dist/cjs/page.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/* page.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.Page = void 0;
|
|
10
|
+
require("./page.compiled.css");
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var React = _react;
|
|
13
|
+
var _runtime = require("@compiled/react/runtime");
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var _getDocumentRoot = require("./utils/getDocumentRoot");
|
|
17
|
+
var _useIntersectionObserver = require("./utils/useIntersectionObserver");
|
|
18
|
+
var _useStaticCallback = require("./utils/useStaticCallback");
|
|
19
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
20
|
+
var Span = function Span(_ref) {
|
|
21
|
+
var span = _ref.span,
|
|
22
|
+
font = _ref.font;
|
|
23
|
+
var width = span.l;
|
|
24
|
+
var height = span.h;
|
|
25
|
+
if (width <= 0) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return /*#__PURE__*/React.createElement("tspan", {
|
|
29
|
+
lengthAdjust: "spacingAndGlyphs",
|
|
30
|
+
x: span.x,
|
|
31
|
+
y: "-".concat(span.y),
|
|
32
|
+
height: height,
|
|
33
|
+
textLength: width,
|
|
34
|
+
style: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, 'fontFamily', "".concat(font.name)), 'fontSize', "".concat(font.size === 1 ? height : font.size, "px"))
|
|
35
|
+
}, span.text);
|
|
36
|
+
};
|
|
37
|
+
var textStyles = null;
|
|
38
|
+
var Line = function Line() {
|
|
39
|
+
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
40
|
+
spans: [],
|
|
41
|
+
rotation: 0,
|
|
42
|
+
fonts: []
|
|
43
|
+
},
|
|
44
|
+
spans = _ref3.spans,
|
|
45
|
+
rotation = _ref3.rotation,
|
|
46
|
+
fonts = _ref3.fonts,
|
|
47
|
+
dataTestId = _ref3.dataTestId;
|
|
48
|
+
return /*#__PURE__*/React.createElement("text", {
|
|
49
|
+
opacity: "0.5",
|
|
50
|
+
// eslint-disable-next-line react/no-unknown-property
|
|
51
|
+
"transform-origin": "".concat(spans[0].x, " -").concat(spans[0].y),
|
|
52
|
+
style: {
|
|
53
|
+
transform: "rotate(".concat(rotation, "rad)")
|
|
54
|
+
},
|
|
55
|
+
"data-testid": dataTestId,
|
|
56
|
+
className: (0, _runtime.ax)(["_o572qvpr"])
|
|
57
|
+
}, spans.map(function (span, i) {
|
|
58
|
+
return /*#__PURE__*/React.createElement(Span, {
|
|
59
|
+
span: span,
|
|
60
|
+
font: fonts[span.fi],
|
|
61
|
+
key: i
|
|
62
|
+
});
|
|
63
|
+
}));
|
|
64
|
+
};
|
|
65
|
+
var pageSvgStyles = null;
|
|
66
|
+
var pageImageStyles = null;
|
|
67
|
+
var pageWrapperStyles = null;
|
|
68
|
+
var PageView = /*#__PURE__*/(0, _react.forwardRef)(function (_ref4, ref) {
|
|
69
|
+
var dimensions = _ref4.dimensions,
|
|
70
|
+
imageSrc = _ref4.imageSrc,
|
|
71
|
+
content = _ref4.content,
|
|
72
|
+
fonts = _ref4.fonts,
|
|
73
|
+
pageIndex = _ref4.pageIndex,
|
|
74
|
+
zoom = _ref4.zoom,
|
|
75
|
+
onImageLoad = _ref4.onImageLoad;
|
|
76
|
+
var style = {
|
|
77
|
+
width: dimensions ? "calc(var(--document-viewer-zoom) * ".concat(dimensions.width, "px)") : 'initial',
|
|
78
|
+
height: dimensions ? "calc(var(--document-viewer-zoom) * ".concat(dimensions.height, "px)") : 'initial'
|
|
79
|
+
};
|
|
80
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
81
|
+
ref: ref,
|
|
82
|
+
style: style,
|
|
83
|
+
"data-testid": "page-".concat(pageIndex),
|
|
84
|
+
className: (0, _runtime.ax)(["_kqswh2mm _bfhku67f"])
|
|
85
|
+
}, imageSrc && /*#__PURE__*/React.createElement("img", {
|
|
86
|
+
style: style,
|
|
87
|
+
"data-testid": "page-".concat(pageIndex, "-image"),
|
|
88
|
+
"data-zoom": zoom,
|
|
89
|
+
src: imageSrc,
|
|
90
|
+
alt: "",
|
|
91
|
+
onLoad: onImageLoad,
|
|
92
|
+
className: (0, _runtime.ax)(["_kqswstnw _154iidpf _1ltvidpf _uiztglyw _1kemd8h4"])
|
|
93
|
+
}), content && /*#__PURE__*/React.createElement("svg", {
|
|
94
|
+
"data-testid": "page-".concat(pageIndex, "-text-layer"),
|
|
95
|
+
style: style,
|
|
96
|
+
viewBox: "0 -".concat(content.height, " ").concat(content.width, " ").concat(content.height),
|
|
97
|
+
className: (0, _runtime.ax)(["_kqswstnw _154iidpf _1ltvidpf _uizt1kdv _80om1kdv _lswu1j28"])
|
|
98
|
+
}, content.lines.map(function (line, i) {
|
|
99
|
+
return /*#__PURE__*/React.createElement(Line, {
|
|
100
|
+
dataTestId: "page-".concat(pageIndex, "-line-").concat(i),
|
|
101
|
+
spans: line.spans,
|
|
102
|
+
rotation: line.r,
|
|
103
|
+
fonts: fonts,
|
|
104
|
+
key: i
|
|
105
|
+
});
|
|
106
|
+
})));
|
|
107
|
+
});
|
|
108
|
+
var Page = exports.Page = function Page(_ref5) {
|
|
109
|
+
var _ref6;
|
|
110
|
+
var getPageSrc = _ref5.getPageSrc,
|
|
111
|
+
content = _ref5.content,
|
|
112
|
+
fonts = _ref5.fonts,
|
|
113
|
+
pageIndex = _ref5.pageIndex,
|
|
114
|
+
zoom = _ref5.zoom,
|
|
115
|
+
defaultDimensions = _ref5.defaultDimensions,
|
|
116
|
+
onVisible = _ref5.onVisible;
|
|
117
|
+
var _useState = (0, _react.useState)(),
|
|
118
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
119
|
+
imageSrc = _useState2[0],
|
|
120
|
+
setImageSrc = _useState2[1];
|
|
121
|
+
var _useIntersectionObser = (0, _useIntersectionObserver.useIntersectionObserver)({
|
|
122
|
+
root: (0, _getDocumentRoot.getDocumentRoot)(),
|
|
123
|
+
// this will load the page 3 pages before or after the current page
|
|
124
|
+
// ensuring that the page is loaded before the user scrolls to it
|
|
125
|
+
rootMargin: '300%',
|
|
126
|
+
threshold: 0.1
|
|
127
|
+
}, function () {
|
|
128
|
+
onVisible();
|
|
129
|
+
getPageSrc(pageIndex, zoom).then(setImageSrc);
|
|
130
|
+
}),
|
|
131
|
+
observedRef = _useIntersectionObser.observedRef,
|
|
132
|
+
isVisibleRef = _useIntersectionObser.isVisibleRef;
|
|
133
|
+
var _useState3 = (0, _react.useState)(),
|
|
134
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
135
|
+
dimensions = _useState4[0],
|
|
136
|
+
setDimensions = _useState4[1];
|
|
137
|
+
var onImageLoad = (0, _useStaticCallback.useStaticCallback)(function (event) {
|
|
138
|
+
var image = event.currentTarget;
|
|
139
|
+
if (!content) {
|
|
140
|
+
var _zoom = image.dataset.zoom ? Number(image.dataset.zoom) : 1;
|
|
141
|
+
setDimensions({
|
|
142
|
+
width: image.width / _zoom,
|
|
143
|
+
height: image.height / _zoom
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
(0, _react.useEffect)(function () {
|
|
148
|
+
if (isVisibleRef.current) {
|
|
149
|
+
getPageSrc(pageIndex, zoom).then(setImageSrc);
|
|
150
|
+
}
|
|
151
|
+
}, [isVisibleRef, pageIndex, zoom, getPageSrc]);
|
|
152
|
+
return /*#__PURE__*/React.createElement(PageView, {
|
|
153
|
+
ref: observedRef,
|
|
154
|
+
dimensions: (_ref6 = content !== null && content !== void 0 ? content : dimensions) !== null && _ref6 !== void 0 ? _ref6 : defaultDimensions,
|
|
155
|
+
imageSrc: imageSrc,
|
|
156
|
+
content: content,
|
|
157
|
+
fonts: fonts,
|
|
158
|
+
pageIndex: pageIndex,
|
|
159
|
+
zoom: zoom,
|
|
160
|
+
onImageLoad: onImageLoad
|
|
161
|
+
});
|
|
162
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.usePageContent = usePageContent;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
var _useStaticCallback = require("./utils/useStaticCallback");
|
|
14
|
+
function usePageContent(getContent, paginationSize) {
|
|
15
|
+
var _useState = (0, _react.useState)([]),
|
|
16
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
17
|
+
contentRanges = _useState2[0],
|
|
18
|
+
setContentRanges = _useState2[1];
|
|
19
|
+
var contentRangesRequestRef = (0, _react.useRef)({});
|
|
20
|
+
var loadPageContent = (0, _useStaticCallback.useStaticCallback)( /*#__PURE__*/function () {
|
|
21
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(pageInd) {
|
|
22
|
+
var _contentRangesRequest, _contentRangesRequest2;
|
|
23
|
+
var contentRangeInd, startIndex, endIndex, content;
|
|
24
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
25
|
+
while (1) switch (_context.prev = _context.next) {
|
|
26
|
+
case 0:
|
|
27
|
+
contentRangeInd = Math.floor(pageInd / paginationSize); // Content already loaded for this page range
|
|
28
|
+
if (!contentRanges[contentRangeInd]) {
|
|
29
|
+
_context.next = 3;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
return _context.abrupt("return");
|
|
33
|
+
case 3:
|
|
34
|
+
startIndex = contentRangeInd * paginationSize;
|
|
35
|
+
endIndex = startIndex + paginationSize;
|
|
36
|
+
(_contentRangesRequest2 = (_contentRangesRequest = contentRangesRequestRef.current)[contentRangeInd]) !== null && _contentRangesRequest2 !== void 0 ? _contentRangesRequest2 : _contentRangesRequest[contentRangeInd] = getContent(startIndex, endIndex);
|
|
37
|
+
_context.next = 8;
|
|
38
|
+
return contentRangesRequestRef.current[contentRangeInd];
|
|
39
|
+
case 8:
|
|
40
|
+
content = _context.sent;
|
|
41
|
+
setContentRanges(function (prev) {
|
|
42
|
+
var newRanges = (0, _toConsumableArray2.default)(prev);
|
|
43
|
+
newRanges[contentRangeInd] = content;
|
|
44
|
+
return newRanges;
|
|
45
|
+
});
|
|
46
|
+
case 10:
|
|
47
|
+
case "end":
|
|
48
|
+
return _context.stop();
|
|
49
|
+
}
|
|
50
|
+
}, _callee);
|
|
51
|
+
}));
|
|
52
|
+
return function (_x) {
|
|
53
|
+
return _ref.apply(this, arguments);
|
|
54
|
+
};
|
|
55
|
+
}());
|
|
56
|
+
function getPageContent(pageInd) {
|
|
57
|
+
var _contentRanges$conten, _contentRanges$conten2;
|
|
58
|
+
var contentRangeInd = Math.floor(pageInd / paginationSize);
|
|
59
|
+
var page = (_contentRanges$conten = contentRanges[contentRangeInd]) === null || _contentRanges$conten === void 0 ? void 0 : _contentRanges$conten.pages[pageInd % paginationSize];
|
|
60
|
+
var fonts = (_contentRanges$conten2 = contentRanges[contentRangeInd]) === null || _contentRanges$conten2 === void 0 ? void 0 : _contentRanges$conten2.fonts;
|
|
61
|
+
return {
|
|
62
|
+
page: page,
|
|
63
|
+
fonts: fonts
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
var documentMetadata = (0, _react.useMemo)(function () {
|
|
67
|
+
var _contentRanges$, _contentRanges$0$tota, _contentRanges$2;
|
|
68
|
+
return {
|
|
69
|
+
defaultDimensions: (_contentRanges$ = contentRanges[0]) !== null && _contentRanges$ !== void 0 && _contentRanges$.pages[0] ? {
|
|
70
|
+
height: contentRanges[0].pages[0].height,
|
|
71
|
+
width: contentRanges[0].pages[0].width
|
|
72
|
+
} : undefined,
|
|
73
|
+
pageCount: (_contentRanges$0$tota = (_contentRanges$2 = contentRanges[0]) === null || _contentRanges$2 === void 0 ? void 0 : _contentRanges$2.total_pages) !== null && _contentRanges$0$tota !== void 0 ? _contentRanges$0$tota : 4
|
|
74
|
+
};
|
|
75
|
+
}, [contentRanges]);
|
|
76
|
+
return {
|
|
77
|
+
getPageContent: getPageContent,
|
|
78
|
+
loadPageContent: loadPageContent,
|
|
79
|
+
documentMetadata: documentMetadata
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getDocumentRoot = exports.DOCUMENT_SCROLL_ROOT_ID = void 0;
|
|
7
|
+
var DOCUMENT_SCROLL_ROOT_ID = exports.DOCUMENT_SCROLL_ROOT_ID = 'document-scroll-root';
|
|
8
|
+
var getDocumentRoot = exports.getDocumentRoot = function getDocumentRoot() {
|
|
9
|
+
if (typeof window === 'undefined') {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (typeof window.document === 'undefined') {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
var root = document.getElementById(DOCUMENT_SCROLL_ROOT_ID);
|
|
16
|
+
if (root) {
|
|
17
|
+
return root;
|
|
18
|
+
}
|
|
19
|
+
return window.document;
|
|
20
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useCachedGetImage = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _useStaticCallback = require("./useStaticCallback");
|
|
12
|
+
var useCachedGetImage = exports.useCachedGetImage = function useCachedGetImage(getPageImageUrl) {
|
|
13
|
+
var imageUrlRefs = (0, _react.useRef)({});
|
|
14
|
+
var getImageUrl = (0, _useStaticCallback.useStaticCallback)( /*#__PURE__*/function () {
|
|
15
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(pageNumber, zoom) {
|
|
16
|
+
var key, url, isBlobUrl, blob;
|
|
17
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
18
|
+
while (1) switch (_context.prev = _context.next) {
|
|
19
|
+
case 0:
|
|
20
|
+
key = "".concat(pageNumber, "-").concat(zoom);
|
|
21
|
+
if (!imageUrlRefs.current[key]) {
|
|
22
|
+
_context.next = 3;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
return _context.abrupt("return", imageUrlRefs.current[key]);
|
|
26
|
+
case 3:
|
|
27
|
+
_context.next = 5;
|
|
28
|
+
return getPageImageUrl(pageNumber, zoom);
|
|
29
|
+
case 5:
|
|
30
|
+
url = _context.sent;
|
|
31
|
+
isBlobUrl = url.startsWith('blob:');
|
|
32
|
+
if (isBlobUrl) {
|
|
33
|
+
_context.next = 12;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
_context.next = 10;
|
|
37
|
+
return fetch(url).then(function (res) {
|
|
38
|
+
return res.blob();
|
|
39
|
+
});
|
|
40
|
+
case 10:
|
|
41
|
+
blob = _context.sent;
|
|
42
|
+
url = URL.createObjectURL(blob);
|
|
43
|
+
case 12:
|
|
44
|
+
imageUrlRefs.current[key] = url;
|
|
45
|
+
return _context.abrupt("return", url);
|
|
46
|
+
case 14:
|
|
47
|
+
case "end":
|
|
48
|
+
return _context.stop();
|
|
49
|
+
}
|
|
50
|
+
}, _callee);
|
|
51
|
+
}));
|
|
52
|
+
return function (_x, _x2) {
|
|
53
|
+
return _ref.apply(this, arguments);
|
|
54
|
+
};
|
|
55
|
+
}());
|
|
56
|
+
return getImageUrl;
|
|
57
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useIntersectionObserver = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _useStaticCallback = require("./useStaticCallback");
|
|
11
|
+
var useIntersectionObserver = exports.useIntersectionObserver = function useIntersectionObserver(options, onVisible) {
|
|
12
|
+
var staticOnVisible = (0, _useStaticCallback.useStaticCallback)(onVisible);
|
|
13
|
+
var observerRef = (0, _react.useRef)(null);
|
|
14
|
+
var timeoutRef = (0, _react.useRef)(null);
|
|
15
|
+
var isVisibleRef = (0, _react.useRef)(false);
|
|
16
|
+
var currentNodeRef = (0, _react.useRef)(null);
|
|
17
|
+
var observedRef = (0, _useStaticCallback.useStaticCallback)(function (node) {
|
|
18
|
+
currentNodeRef.current = node;
|
|
19
|
+
if (observerRef.current) {
|
|
20
|
+
observerRef.current.disconnect();
|
|
21
|
+
}
|
|
22
|
+
if (timeoutRef.current) {
|
|
23
|
+
clearTimeout(timeoutRef.current);
|
|
24
|
+
timeoutRef.current = null;
|
|
25
|
+
}
|
|
26
|
+
if (node) {
|
|
27
|
+
observerRef.current = new IntersectionObserver(function (_ref) {
|
|
28
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 1),
|
|
29
|
+
entry = _ref2[0];
|
|
30
|
+
if (entry.isIntersecting && !isVisibleRef.current) {
|
|
31
|
+
isVisibleRef.current = true;
|
|
32
|
+
timeoutRef.current = setTimeout(function () {
|
|
33
|
+
if (isVisibleRef.current) {
|
|
34
|
+
staticOnVisible();
|
|
35
|
+
timeoutRef.current = null;
|
|
36
|
+
}
|
|
37
|
+
}, 100);
|
|
38
|
+
}
|
|
39
|
+
if (!entry.isIntersecting && isVisibleRef.current) {
|
|
40
|
+
isVisibleRef.current = false;
|
|
41
|
+
}
|
|
42
|
+
if (!entry.isIntersecting && isVisibleRef.current && timeoutRef.current) {
|
|
43
|
+
isVisibleRef.current = false;
|
|
44
|
+
clearTimeout(timeoutRef.current);
|
|
45
|
+
timeoutRef.current = null;
|
|
46
|
+
}
|
|
47
|
+
}, options);
|
|
48
|
+
observerRef.current.observe(node);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
(0, _react.useEffect)(function () {
|
|
52
|
+
return function () {
|
|
53
|
+
if (observerRef.current) {
|
|
54
|
+
observerRef.current.disconnect();
|
|
55
|
+
}
|
|
56
|
+
if (timeoutRef.current) {
|
|
57
|
+
clearTimeout(timeoutRef.current);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}, []);
|
|
61
|
+
return {
|
|
62
|
+
observedRef: observedRef,
|
|
63
|
+
isVisibleRef: isVisibleRef
|
|
64
|
+
};
|
|
65
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useStaticCallback = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var useStaticCallback = exports.useStaticCallback = function useStaticCallback(callback) {
|
|
9
|
+
var callbackRef = (0, _react.useRef)(callback);
|
|
10
|
+
callbackRef.current = callback;
|
|
11
|
+
return (0, _react.useCallback)(function () {
|
|
12
|
+
return callbackRef.current.apply(callbackRef, arguments);
|
|
13
|
+
}, []);
|
|
14
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
._zulputpp{gap:var(--ds-space-150,9pt)}._18m91wug{overflow-y:auto}
|
|
3
|
+
._19pkxncg{margin-top:var(--ds-space-800,4pc)}
|
|
4
|
+
._1bah1h6o{justify-content:center}
|
|
5
|
+
._1e0c1txw{display:flex}
|
|
6
|
+
._1reo1wug{overflow-x:auto}
|
|
7
|
+
._1ul91osq{min-width:100%}
|
|
8
|
+
._2lx21bp4{flex-direction:column}
|
|
9
|
+
._4cvr1h6o{align-items:center}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* documentViewer.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
import "./documentViewer.compiled.css";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
5
|
+
import { Page } from './page';
|
|
6
|
+
import { usePageContent } from './usePageContent';
|
|
7
|
+
import { useCachedGetImage } from './utils/useCachedGetImage';
|
|
8
|
+
const documentViewerStyles = null;
|
|
9
|
+
const DEFAULT_PAGINATION_SIZE = 50;
|
|
10
|
+
export const DocumentViewer = ({
|
|
11
|
+
getContent,
|
|
12
|
+
getPageImageUrl,
|
|
13
|
+
paginationSize = DEFAULT_PAGINATION_SIZE,
|
|
14
|
+
zoom
|
|
15
|
+
}) => {
|
|
16
|
+
var _documentMetadata$pag;
|
|
17
|
+
const {
|
|
18
|
+
getPageContent,
|
|
19
|
+
loadPageContent,
|
|
20
|
+
documentMetadata
|
|
21
|
+
} = usePageContent(getContent, paginationSize);
|
|
22
|
+
const getImageUrl = useCachedGetImage(getPageImageUrl);
|
|
23
|
+
const style = {
|
|
24
|
+
'--document-viewer-zoom': zoom
|
|
25
|
+
};
|
|
26
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
"data-testid": "document-viewer",
|
|
28
|
+
style: style,
|
|
29
|
+
className: ax(["_zulputpp _1reo1wug _18m91wug _19pkxncg _1ul91osq _1e0c1txw _2lx21bp4 _4cvr1h6o _1bah1h6o"])
|
|
30
|
+
}, [...Array((_documentMetadata$pag = documentMetadata.pageCount) !== null && _documentMetadata$pag !== void 0 ? _documentMetadata$pag : 4)].map((_, i) => {
|
|
31
|
+
const {
|
|
32
|
+
page,
|
|
33
|
+
fonts
|
|
34
|
+
} = getPageContent(i);
|
|
35
|
+
return /*#__PURE__*/React.createElement(Page, {
|
|
36
|
+
key: i,
|
|
37
|
+
getPageSrc: getImageUrl,
|
|
38
|
+
pageIndex: i,
|
|
39
|
+
zoom: zoom,
|
|
40
|
+
defaultDimensions: documentMetadata.defaultDimensions,
|
|
41
|
+
onVisible: () => loadPageContent(i),
|
|
42
|
+
fonts: fonts,
|
|
43
|
+
content: page
|
|
44
|
+
});
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
._154iidpf{top:0}
|
|
2
|
+
._1kemd8h4{image-rendering:pixelated}
|
|
3
|
+
._1ltvidpf{left:0}
|
|
4
|
+
._80om1kdv{cursor:text}
|
|
5
|
+
._bfhku67f{background-color:#fff}
|
|
6
|
+
._kqswh2mm{position:relative}
|
|
7
|
+
._kqswstnw{position:absolute}
|
|
8
|
+
._lswu1j28{fill:transparent}
|
|
9
|
+
._o572qvpr{white-space:pre}
|
|
10
|
+
._uizt1kdv{-webkit-user-select:text;-ms-user-select:text;user-select:text}
|
|
11
|
+
._uiztglyw{-webkit-user-select:none;-ms-user-select:none;user-select:none}
|