cozy-viewer 1.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.
Files changed (250) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +21 -0
  3. package/Readme.md +44 -0
  4. package/babel.config.js +23 -0
  5. package/dist/Footer/BottomSheetContent.d.ts +12 -0
  6. package/dist/Footer/BottomSheetContent.js +45 -0
  7. package/dist/Footer/DownloadButton.d.ts +16 -0
  8. package/dist/Footer/DownloadButton.js +113 -0
  9. package/dist/Footer/FooterActionButtons.d.ts +13 -0
  10. package/dist/Footer/FooterActionButtons.js +33 -0
  11. package/dist/Footer/FooterActionButtons.spec.d.ts +1 -0
  12. package/dist/Footer/FooterContent.d.ts +16 -0
  13. package/dist/Footer/FooterContent.js +120 -0
  14. package/dist/Footer/ForwardButton.d.ts +20 -0
  15. package/dist/Footer/ForwardButton.js +177 -0
  16. package/dist/Footer/ForwardButton.spec.d.ts +1 -0
  17. package/dist/Footer/ForwardOrDownloadButton.d.ts +11 -0
  18. package/dist/Footer/ForwardOrDownloadButton.js +42 -0
  19. package/dist/Footer/Sharing.d.ts +16 -0
  20. package/dist/Footer/Sharing.js +79 -0
  21. package/dist/Footer/helpers.d.ts +8 -0
  22. package/dist/Footer/helpers.js +179 -0
  23. package/dist/Footer/helpers.spec.d.ts +1 -0
  24. package/dist/NoViewer/DownloadButton.d.ts +2 -0
  25. package/dist/NoViewer/DownloadButton.js +52 -0
  26. package/dist/NoViewer/FileIcon.d.ts +4 -0
  27. package/dist/NoViewer/FileIcon.js +76 -0
  28. package/dist/NoViewer/NoViewer.d.ts +18 -0
  29. package/dist/NoViewer/NoViewer.js +64 -0
  30. package/dist/NoViewer/NoViewer.spec.d.ts +1 -0
  31. package/dist/NoViewer/index.d.ts +1 -0
  32. package/dist/NoViewer/index.js +15 -0
  33. package/dist/Panel/ActionMenuDesktop.d.ts +3 -0
  34. package/dist/Panel/ActionMenuDesktop.js +91 -0
  35. package/dist/Panel/ActionMenuMobile.d.ts +20 -0
  36. package/dist/Panel/ActionMenuMobile.js +95 -0
  37. package/dist/Panel/ActionMenuWrapper.d.ts +3 -0
  38. package/dist/Panel/ActionMenuWrapper.js +155 -0
  39. package/dist/Panel/Certifications.d.ts +2 -0
  40. package/dist/Panel/Certifications.js +80 -0
  41. package/dist/Panel/PanelContent.d.ts +2 -0
  42. package/dist/Panel/PanelContent.js +71 -0
  43. package/dist/Panel/Qualification.d.ts +2 -0
  44. package/dist/Panel/Qualification.js +148 -0
  45. package/dist/Panel/QualificationListItemContact.d.ts +10 -0
  46. package/dist/Panel/QualificationListItemContact.js +123 -0
  47. package/dist/Panel/QualificationListItemDate.d.ts +3 -0
  48. package/dist/Panel/QualificationListItemDate.js +90 -0
  49. package/dist/Panel/QualificationListItemInformation.d.ts +3 -0
  50. package/dist/Panel/QualificationListItemInformation.js +84 -0
  51. package/dist/Panel/QualificationListItemInformation.spec.d.ts +1 -0
  52. package/dist/Panel/QualificationListItemOther.d.ts +3 -0
  53. package/dist/Panel/QualificationListItemOther.js +78 -0
  54. package/dist/Panel/QualificationListItemText.d.ts +13 -0
  55. package/dist/Panel/QualificationListItemText.js +42 -0
  56. package/dist/Panel/getPanelBlocks.d.ts +26 -0
  57. package/dist/Panel/getPanelBlocks.js +79 -0
  58. package/dist/Panel/getPanelBlocks.spec.d.ts +1 -0
  59. package/dist/Viewer.d.ts +39 -0
  60. package/dist/Viewer.js +191 -0
  61. package/dist/ViewerContainer.d.ts +22 -0
  62. package/dist/ViewerContainer.js +221 -0
  63. package/dist/ViewerExposer.d.ts +2 -0
  64. package/dist/ViewerExposer.js +13 -0
  65. package/dist/ViewerInformationsWrapper.d.ts +20 -0
  66. package/dist/ViewerInformationsWrapper.js +68 -0
  67. package/dist/ViewerInformationsWrapper.spec.d.ts +1 -0
  68. package/dist/ViewerWithCustomPanelAndFooter.d.ts +2 -0
  69. package/dist/ViewerWithCustomPanelAndFooter.js +78 -0
  70. package/dist/ViewersByFile/AudioViewer.d.ts +74 -0
  71. package/dist/ViewersByFile/AudioViewer.js +57 -0
  72. package/dist/ViewersByFile/AudioViewer.spec.d.ts +1 -0
  73. package/dist/ViewersByFile/BlankPaperViewer.d.ts +2 -0
  74. package/dist/ViewersByFile/BlankPaperViewer.js +97 -0
  75. package/dist/ViewersByFile/ImageViewer.d.ts +31 -0
  76. package/dist/ViewersByFile/ImageViewer.js +385 -0
  77. package/dist/ViewersByFile/ImageViewer.spec.d.ts +1 -0
  78. package/dist/ViewersByFile/NoNetworkViewer.d.ts +2 -0
  79. package/dist/ViewersByFile/NoNetworkViewer.js +54 -0
  80. package/dist/ViewersByFile/OnlyOfficeViewer.d.ts +2 -0
  81. package/dist/ViewersByFile/OnlyOfficeViewer.js +46 -0
  82. package/dist/ViewersByFile/PdfJsViewer.d.ts +31 -0
  83. package/dist/ViewersByFile/PdfJsViewer.js +283 -0
  84. package/dist/ViewersByFile/PdfJsViewer.spec.d.ts +1 -0
  85. package/dist/ViewersByFile/PdfMobileViewer.d.ts +4 -0
  86. package/dist/ViewersByFile/PdfMobileViewer.js +185 -0
  87. package/dist/ViewersByFile/PdfMobileViewer.spec.d.ts +1 -0
  88. package/dist/ViewersByFile/ShortcutViewer.d.ts +2 -0
  89. package/dist/ViewersByFile/ShortcutViewer.js +61 -0
  90. package/dist/ViewersByFile/ShortcutViewer.spec.d.ts +4 -0
  91. package/dist/ViewersByFile/TextViewer.d.ts +90 -0
  92. package/dist/ViewersByFile/TextViewer.js +250 -0
  93. package/dist/ViewersByFile/TextViewer.spec.d.ts +1 -0
  94. package/dist/ViewersByFile/VideoViewer.d.ts +74 -0
  95. package/dist/ViewersByFile/VideoViewer.js +46 -0
  96. package/dist/ViewersByFile/VideoViewer.spec.d.ts +1 -0
  97. package/dist/assets/IlluGenericNewPage.svg +10 -0
  98. package/dist/components/ExpirationAlert.d.ts +2 -0
  99. package/dist/components/ExpirationAlert.js +129 -0
  100. package/dist/components/ExpirationAnnotation.d.ts +10 -0
  101. package/dist/components/ExpirationAnnotation.js +56 -0
  102. package/dist/components/Footer.d.ts +4 -0
  103. package/dist/components/Footer.js +41 -0
  104. package/dist/components/InformationPanel.d.ts +12 -0
  105. package/dist/components/InformationPanel.js +36 -0
  106. package/dist/components/Navigation.d.ts +18 -0
  107. package/dist/components/Navigation.js +63 -0
  108. package/dist/components/PdfToolbarButton.d.ts +16 -0
  109. package/dist/components/PdfToolbarButton.js +40 -0
  110. package/dist/components/PrintButton.d.ts +16 -0
  111. package/dist/components/PrintButton.js +163 -0
  112. package/dist/components/Toolbar.d.ts +2 -0
  113. package/dist/components/Toolbar.js +146 -0
  114. package/dist/components/ToolbarButtons.d.ts +5 -0
  115. package/dist/components/ToolbarButtons.js +20 -0
  116. package/dist/components/ToolbarFilePath.d.ts +3 -0
  117. package/dist/components/ToolbarFilePath.js +92 -0
  118. package/dist/components/ViewerByFile.d.ts +7 -0
  119. package/dist/components/ViewerByFile.js +137 -0
  120. package/dist/components/ViewerByFile.spec.d.ts +1 -0
  121. package/dist/components/ViewerControls.d.ts +9 -0
  122. package/dist/components/ViewerControls.js +251 -0
  123. package/dist/components/ViewerControls.spec.d.ts +1 -0
  124. package/dist/components/ViewerSpinner.d.ts +2 -0
  125. package/dist/components/ViewerSpinner.js +31 -0
  126. package/dist/docs/DemoProvider.d.ts +6 -0
  127. package/dist/docs/DemoProvider.js +159 -0
  128. package/dist/helpers.d.ts +37 -0
  129. package/dist/helpers.js +190 -0
  130. package/dist/helpers.spec.d.ts +1 -0
  131. package/dist/hoc/withFileUrl.d.ts +75 -0
  132. package/dist/hoc/withFileUrl.js +231 -0
  133. package/dist/hoc/withViewerLocales.d.ts +1 -0
  134. package/dist/hoc/withViewerLocales.js +15 -0
  135. package/dist/hooks/useReferencedContactName.d.ts +5 -0
  136. package/dist/hooks/useReferencedContactName.js +45 -0
  137. package/dist/index.d.ts +10 -0
  138. package/dist/index.js +75 -0
  139. package/dist/locales/index.d.ts +6 -0
  140. package/dist/locales/index.js +18 -0
  141. package/dist/proptypes.d.ts +7 -0
  142. package/dist/proptypes.js +25 -0
  143. package/dist/providers/ActionMenuProvider.d.ts +13 -0
  144. package/dist/providers/ActionMenuProvider.js +47 -0
  145. package/dist/providers/EncryptedProvider.d.ts +8 -0
  146. package/dist/providers/EncryptedProvider.js +43 -0
  147. package/dist/queries.d.ts +15 -0
  148. package/dist/queries.js +40 -0
  149. package/dist/stylesheet.css +218 -0
  150. package/jest.config.js +23 -0
  151. package/package.json +62 -0
  152. package/preprocess.js +16 -0
  153. package/src/Footer/BottomSheetContent.jsx +30 -0
  154. package/src/Footer/DownloadButton.jsx +66 -0
  155. package/src/Footer/FooterActionButtons.jsx +22 -0
  156. package/src/Footer/FooterActionButtons.spec.jsx +30 -0
  157. package/src/Footer/FooterContent.jsx +102 -0
  158. package/src/Footer/ForwardButton.jsx +95 -0
  159. package/src/Footer/ForwardButton.spec.jsx +87 -0
  160. package/src/Footer/ForwardOrDownloadButton.jsx +24 -0
  161. package/src/Footer/Sharing.jsx +59 -0
  162. package/src/Footer/helpers.js +106 -0
  163. package/src/Footer/helpers.spec.js +77 -0
  164. package/src/NoViewer/DownloadButton.jsx +28 -0
  165. package/src/NoViewer/FileIcon.jsx +46 -0
  166. package/src/NoViewer/NoViewer.jsx +30 -0
  167. package/src/NoViewer/NoViewer.spec.jsx +44 -0
  168. package/src/NoViewer/__snapshots__/NoViewer.spec.jsx.snap +82 -0
  169. package/src/NoViewer/index.jsx +1 -0
  170. package/src/Panel/ActionMenuDesktop.jsx +69 -0
  171. package/src/Panel/ActionMenuMobile.jsx +76 -0
  172. package/src/Panel/ActionMenuWrapper.jsx +104 -0
  173. package/src/Panel/Certifications.jsx +63 -0
  174. package/src/Panel/PanelContent.jsx +50 -0
  175. package/src/Panel/Qualification.jsx +114 -0
  176. package/src/Panel/QualificationListItemContact.jsx +85 -0
  177. package/src/Panel/QualificationListItemDate.jsx +78 -0
  178. package/src/Panel/QualificationListItemInformation.jsx +68 -0
  179. package/src/Panel/QualificationListItemInformation.spec.jsx +73 -0
  180. package/src/Panel/QualificationListItemOther.jsx +61 -0
  181. package/src/Panel/QualificationListItemText.jsx +30 -0
  182. package/src/Panel/getPanelBlocks.jsx +56 -0
  183. package/src/Panel/getPanelBlocks.spec.jsx +79 -0
  184. package/src/Panel/styles.styl +13 -0
  185. package/src/Readme.md +352 -0
  186. package/src/Viewer.jsx +135 -0
  187. package/src/ViewerContainer.jsx +170 -0
  188. package/src/ViewerExposer.js +3 -0
  189. package/src/ViewerInformationsWrapper.jsx +70 -0
  190. package/src/ViewerInformationsWrapper.spec.jsx +63 -0
  191. package/src/ViewerWithCustomPanelAndFooter.jsx +57 -0
  192. package/src/ViewersByFile/AudioViewer.jsx +22 -0
  193. package/src/ViewersByFile/AudioViewer.spec.jsx +40 -0
  194. package/src/ViewersByFile/BlankPaperViewer.jsx +47 -0
  195. package/src/ViewersByFile/ImageViewer.jsx +331 -0
  196. package/src/ViewersByFile/ImageViewer.spec.jsx +73 -0
  197. package/src/ViewersByFile/NoNetworkViewer.jsx +18 -0
  198. package/src/ViewersByFile/OnlyOfficeViewer.jsx +29 -0
  199. package/src/ViewersByFile/PdfJsViewer.jsx +210 -0
  200. package/src/ViewersByFile/PdfJsViewer.spec.jsx +161 -0
  201. package/src/ViewersByFile/PdfMobileViewer.jsx +106 -0
  202. package/src/ViewersByFile/PdfMobileViewer.spec.jsx +76 -0
  203. package/src/ViewersByFile/ShortcutViewer.jsx +38 -0
  204. package/src/ViewersByFile/ShortcutViewer.spec.jsx +32 -0
  205. package/src/ViewersByFile/TextViewer.jsx +126 -0
  206. package/src/ViewersByFile/TextViewer.spec.jsx +118 -0
  207. package/src/ViewersByFile/VideoViewer.jsx +13 -0
  208. package/src/ViewersByFile/VideoViewer.spec.jsx +40 -0
  209. package/src/ViewersByFile/__snapshots__/AudioViewer.spec.jsx.snap +43 -0
  210. package/src/ViewersByFile/__snapshots__/ShortcutViewer.spec.jsx.snap +57 -0
  211. package/src/ViewersByFile/__snapshots__/TextViewer.spec.jsx.snap +100 -0
  212. package/src/ViewersByFile/__snapshots__/VideoViewer.spec.jsx.snap +19 -0
  213. package/src/ViewersByFile/styles.styl +87 -0
  214. package/src/assets/IlluGenericNewPage.svg +10 -0
  215. package/src/components/ExpirationAlert.jsx +86 -0
  216. package/src/components/ExpirationAnnotation.jsx +39 -0
  217. package/src/components/Footer.jsx +14 -0
  218. package/src/components/InformationPanel.jsx +26 -0
  219. package/src/components/Navigation.jsx +40 -0
  220. package/src/components/PdfToolbarButton.jsx +26 -0
  221. package/src/components/PrintButton.jsx +89 -0
  222. package/src/components/Toolbar.jsx +111 -0
  223. package/src/components/ToolbarButtons.jsx +11 -0
  224. package/src/components/ToolbarFilePath.jsx +61 -0
  225. package/src/components/ViewerByFile.jsx +112 -0
  226. package/src/components/ViewerByFile.spec.jsx +100 -0
  227. package/src/components/ViewerControls.jsx +191 -0
  228. package/src/components/ViewerControls.spec.jsx +54 -0
  229. package/src/components/ViewerSpinner.jsx +17 -0
  230. package/src/components/styles.styl +93 -0
  231. package/src/docs/DemoProvider.jsx +90 -0
  232. package/src/helpers.js +131 -0
  233. package/src/helpers.spec.js +136 -0
  234. package/src/hoc/withFileUrl.jsx +93 -0
  235. package/src/hoc/withViewerLocales.jsx +5 -0
  236. package/src/hooks/useReferencedContactName.jsx +26 -0
  237. package/src/index.jsx +12 -0
  238. package/src/locales/en.json +66 -0
  239. package/src/locales/fr.json +66 -0
  240. package/src/locales/index.js +4 -0
  241. package/src/proptypes.js +12 -0
  242. package/src/providers/ActionMenuProvider.jsx +35 -0
  243. package/src/providers/EncryptedProvider.jsx +25 -0
  244. package/src/queries.js +20 -0
  245. package/src/styles.styl +22 -0
  246. package/src/vars.styl +6 -0
  247. package/test/__mocks__/fileMock.js +3 -0
  248. package/test/jestLib/setup.js +5 -0
  249. package/tsconfig-build.json +13 -0
  250. package/tsconfig.json +34 -0
@@ -0,0 +1,385 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _hammerjs = _interopRequireDefault(require("hammerjs"));
25
+
26
+ var _react = _interopRequireWildcard(require("react"));
27
+
28
+ var _FileImageLoader = _interopRequireDefault(require("cozy-ui/transpiled/react/FileImageLoader"));
29
+
30
+ var _NoNetworkViewer = _interopRequireDefault(require("./NoNetworkViewer"));
31
+
32
+ var _ViewerSpinner = _interopRequireDefault(require("../components/ViewerSpinner"));
33
+
34
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
+
36
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
+
38
+ 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; }
39
+
40
+ 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; }
41
+
42
+ 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); }; }
43
+
44
+ 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; } }
45
+
46
+ var styles = {
47
+ "viewer-imageviewer": "styles__viewer-imageviewer___2O8pW",
48
+ "viewer-noviewer": "styles__viewer-noviewer___3HRGf",
49
+ "viewer-audioviewer": "styles__viewer-audioviewer___dpxUM",
50
+ "viewer-videoviewer": "styles__viewer-videoviewer___3yUQ5",
51
+ "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
52
+ "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
53
+ "viewer-canceled": "styles__viewer-canceled___3KRBk",
54
+ "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
55
+ "viewer-filename": "styles__viewer-filename___1-DIz",
56
+ "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
57
+ "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
58
+ "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
59
+ "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
60
+ "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
61
+ };
62
+ var MIN_SCALE = 1;
63
+ var MAX_SCALE = 6;
64
+ var MASS = 10; // If a paning gesture is released while the finger is still moving, the photo will keep paning for a little longer (a if you threw the photo). MASS determines how much the photo will keep paning (the higher the number, the more it will keep going)
65
+
66
+ var FRICTION = 0.9; // When the photo is paning after a pan gesture ended suddenly, FRICTION determines how quickly the movement slows down. 0 would stop it imediately, 1 doesn't slow it down at all.
67
+
68
+ var clamp = function clamp(min, value, max) {
69
+ return Math.max(min, Math.min(max, value));
70
+ };
71
+
72
+ var ImageViewer = /*#__PURE__*/function (_Component) {
73
+ (0, _inherits2.default)(ImageViewer, _Component);
74
+
75
+ var _super = _createSuper(ImageViewer);
76
+
77
+ function ImageViewer(props) {
78
+ var _this;
79
+
80
+ (0, _classCallCheck2.default)(this, ImageViewer);
81
+ _this = _super.call(this, props);
82
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "reload", function () {
83
+ _this.setState(function (state) {
84
+ return _objectSpread(_objectSpread({}, state), {}, {
85
+ loading: true,
86
+ canceled: false
87
+ });
88
+ });
89
+ });
90
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageError", function () {
91
+ _this.setState(function (state) {
92
+ return _objectSpread(_objectSpread({}, state), {}, {
93
+ loading: false,
94
+ canceled: true
95
+ });
96
+ });
97
+ });
98
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageLoad", function () {
99
+ _this.setState(function (state) {
100
+ return _objectSpread(_objectSpread({}, state), {}, {
101
+ loading: false
102
+ });
103
+ });
104
+ });
105
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSwipe", function (e) {
106
+ // when a swipe happens while zoomed into an image, it's most likely a pan gesture and not a swipe
107
+ if (_this.state.scale > 1) return; // a pan event is triggered after the swipe and may trigger a getBoundingClientRect error
108
+
109
+ _this.gestures.off('pan');
110
+
111
+ _this.gestures.off('panend');
112
+
113
+ _this.props.onSwipe(e);
114
+ });
115
+ _this.state = {
116
+ loading: true,
117
+ canceled: false,
118
+ scale: 1,
119
+ offsetX: 0,
120
+ offsetY: 0,
121
+ initialOffset: {
122
+ x: 0,
123
+ y: 0
124
+ },
125
+ initialScale: 0,
126
+ momentum: {
127
+ x: 0,
128
+ y: 0
129
+ }
130
+ };
131
+ return _this;
132
+ }
133
+
134
+ (0, _createClass2.default)(ImageViewer, [{
135
+ key: "UNSAFE_componentWillReceiveProps",
136
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
137
+ if (nextProps.file && this.props.file && nextProps.file.id !== this.props.file.id) {
138
+ this.tearDownGestures();
139
+ this.setState({
140
+ loading: true,
141
+ canceled: false,
142
+ scale: 1,
143
+ offsetX: 0,
144
+ offsetY: 0
145
+ });
146
+ }
147
+ }
148
+ }, {
149
+ key: "componentDidMount",
150
+ value: function componentDidMount() {
151
+ if (this.props.gestures) this.initGestures();
152
+ }
153
+ }, {
154
+ key: "componentDidUpdate",
155
+ value: function componentDidUpdate(prevProps, prevState) {
156
+ var wasLoading = prevState.loading && !this.state.loading && !this.state.canceled;
157
+ if (!prevProps.gestures) this.initGestures();
158
+ if (wasLoading) this.setupGestures();
159
+ }
160
+ }, {
161
+ key: "componentWillUnmount",
162
+ value: function componentWillUnmount() {
163
+ this.tearDownGestures();
164
+ }
165
+ }, {
166
+ key: "tearDownGestures",
167
+ value: function tearDownGestures() {
168
+ if (this.gestures) {
169
+ this.gestures.off('swipe');
170
+ this.gestures.on('swipe', this.props.onSwipe);
171
+ this.gestures.off('panstart');
172
+ this.gestures.off('pinchstart');
173
+ this.gestures.off('pinchend');
174
+ this.gestures.off('pan');
175
+ this.gestures.off('pinch');
176
+ this.gestures.off('panend');
177
+ }
178
+ }
179
+ }, {
180
+ key: "initGestures",
181
+ value: function initGestures() {
182
+ this.gestures = this.props.gestures;
183
+ this.viewer = this.props.gesturesRef;
184
+ }
185
+ }, {
186
+ key: "setupGestures",
187
+ value: function setupGestures() {
188
+ var _this2 = this;
189
+
190
+ // We replace the swipe handler by ours
191
+ this.gestures.off('swipe');
192
+ this.gestures.on('swipe', this.onSwipe);
193
+ this.gestures.get('pinch').set({
194
+ enable: true
195
+ });
196
+ this.gestures.get('pan').set({
197
+ direction: _hammerjs.default.DIRECTION_ALL
198
+ }); // During a gesture, everything is computed with a base value (the state of the image when the gesture starts) and a delta (a translation / zoom, described by the gesture). When a gesture starts, we record the current state of the image.
199
+
200
+ this.gestures.on('panstart', this.prepareForGesture.bind(this));
201
+ this.gestures.on('pinchstart', this.prepareForGesture.bind(this)); // It frequently happens that at the end of a pinch gesture, a pan gesture is detected — because the fingers don't come off the screen at exactly the same time. Reseting the values at the end of the pinch makes sure the values are correct for the (accidental) pan event.
202
+
203
+ this.gestures.on('pinchend', this.prepareForGesture.bind(this)); // during a pan, we add the gestures delta to the initial offset to get the new offset. The new offset is then scaled : if the pan distance was 100px, but the image was scaled 2x, the actual offset should only be 50px. FInally, this value is clamped to make sure the user can't pan further than the edges.
204
+
205
+ this.gestures.on('pan', function (e) {
206
+ _this2.setState(function (state) {
207
+ var maxOffset = _this2.computeMaxOffset();
208
+
209
+ return {
210
+ offsetX: clamp(-maxOffset.x, state.initialOffset.x + e.deltaX / state.scale, maxOffset.x),
211
+ offsetY: clamp(-maxOffset.y, state.initialOffset.y + e.deltaY / state.scale, maxOffset.y)
212
+ };
213
+ });
214
+ }); // pinching / zooming / scaling is a bit more complicated, because the gesture's center has to be taken into account
215
+
216
+ this.gestures.on('pinch', function (e) {
217
+ if (e.isFinal) return; // hard to reproduce, but the final event seems to be causing problems and since it's just replaying the previous event, it can safely be discared
218
+
219
+ _this2.setState(function (state) {
220
+ // first we compute the scale factor: this is the number by which we will multiply the initial scale (as it was before the gesture started) to get the final scaling value. So if the initial scale is 2, and the scale factor is 1.5, the final scale will be 3.
221
+ // this value is clamped so so it stays within reasonable zoom limits.
222
+ var scaleFactor = clamp(MIN_SCALE / state.initialScale, e.scale, MAX_SCALE / state.initialScale); // When the user is zooming in or out, we want that the origin point of the gesture to stay in exactly the same place. The scaling origin is in the center of the viewer.
223
+ // If the gesture's origin is the same as the scaling origin, this works "out of the box" — you can imagine the pixels on all sides being "pushed" towards the outside. But if the gesture's origin is not in the center, we need to offset the whole image to produce the illusion that the scaling center is there.
224
+ // compute the center of the viewer
225
+
226
+ var wrapperBoundaries = _this2.viewer.getBoundingClientRect();
227
+
228
+ var viewerCenter = {
229
+ x: (wrapperBoundaries.right - wrapperBoundaries.left) / 2,
230
+ y: (wrapperBoundaries.bottom - wrapperBoundaries.top) / 2
231
+ }; // Compute the delta between the viewer's center and the gesture's center. This value is scaled back to the "natural" size — if the delta is 100px but the image is currently scale 2x, the real offset value is only 50px.
232
+
233
+ var offsetBeforeScale = {
234
+ x: (viewerCenter.x - e.center.x) / state.scale,
235
+ y: (viewerCenter.y - e.center.y) / state.scale
236
+ }; // Now we compute what this offset will be once we apply the new scale
237
+
238
+ var offsetAfterScale = {
239
+ x: offsetBeforeScale.x * scaleFactor,
240
+ y: offsetBeforeScale.y * scaleFactor
241
+ }; // finally, we compute the actual offset we want to apply. This is the difference between the offset *after* scaling and the offset *before* scaling. We also add any existing offset to preserve it (otherwise it is reset to the center each time)
242
+
243
+ var finalOffset = {
244
+ x: offsetAfterScale.x - offsetBeforeScale.x + state.initialOffset.x,
245
+ y: offsetAfterScale.y - offsetBeforeScale.y + state.initialOffset.y
246
+ }; // last thing: the offsets are clamped to make sure the offsetting doesn't go further than the edges
247
+
248
+ var maxOffset = _this2.computeMaxOffset();
249
+
250
+ return {
251
+ scale: state.initialScale * scaleFactor,
252
+ offsetX: clamp(-maxOffset.x, finalOffset.x, maxOffset.x),
253
+ offsetY: clamp(-maxOffset.y, finalOffset.y, maxOffset.y)
254
+ };
255
+ });
256
+ });
257
+ this.gestures.on('panend', function (e) {
258
+ // convert the remaining velocity into momentum
259
+ _this2.setState({
260
+ momentum: {
261
+ x: e.velocityX * MASS,
262
+ y: e.velocityY * MASS
263
+ }
264
+ }, _this2.applyMomentum.bind(_this2));
265
+ });
266
+ }
267
+ }, {
268
+ key: "render",
269
+ value: function render() {
270
+ var _this3 = this;
271
+
272
+ if (this.state.canceled) {
273
+ return /*#__PURE__*/_react.default.createElement(_NoNetworkViewer.default, {
274
+ onReload: this.reload
275
+ });
276
+ }
277
+
278
+ var _this$props = this.props,
279
+ file = _this$props.file,
280
+ url = _this$props.url;
281
+ var _this$state = this.state,
282
+ scale = _this$state.scale,
283
+ offsetX = _this$state.offsetX,
284
+ offsetY = _this$state.offsetY,
285
+ loading = _this$state.loading;
286
+ var style = {
287
+ transform: "scale(".concat(scale, ") translate(").concat(offsetX, "px, ").concat(offsetY, "px)")
288
+ };
289
+ return /*#__PURE__*/_react.default.createElement("div", {
290
+ className: styles['viewer-imageviewer']
291
+ }, loading && /*#__PURE__*/_react.default.createElement(_ViewerSpinner.default, null), file && /*#__PURE__*/_react.default.createElement(_FileImageLoader.default, {
292
+ file: file,
293
+ url: url,
294
+ linkType: "large",
295
+ onError: this.onImageError,
296
+ key: file.id,
297
+ render: function render(src) {
298
+ return /*#__PURE__*/_react.default.createElement("img", {
299
+ ref: function ref(photo) {
300
+ return _this3.photo = photo;
301
+ },
302
+ style: style,
303
+ alt: file.name,
304
+ src: src,
305
+ onLoad: _this3.onImageLoad
306
+ });
307
+ }
308
+ }));
309
+ }
310
+ /**
311
+ * Things to do when a gesture starts:
312
+ * - saves the current scale and offset, which will be used as base values for calculations
313
+ * - kill any remaining momentum from previous gestures
314
+ * - hide the actions
315
+ */
316
+
317
+ }, {
318
+ key: "prepareForGesture",
319
+ value: function prepareForGesture() {
320
+ this.setState(function (state) {
321
+ return {
322
+ initialScale: state.scale,
323
+ initialOffset: {
324
+ x: state.offsetX,
325
+ y: state.offsetY
326
+ },
327
+ momentum: {
328
+ x: 0,
329
+ y: 0
330
+ }
331
+ };
332
+ });
333
+ }
334
+ /**
335
+ * Gradually applies the momentum after a pan end
336
+ */
337
+
338
+ }, {
339
+ key: "applyMomentum",
340
+ value: function applyMomentum() {
341
+ var _this4 = this;
342
+
343
+ this.setState(function (state) {
344
+ var maxOffset = _this4.computeMaxOffset();
345
+
346
+ return {
347
+ offsetX: clamp(-maxOffset.x, state.offsetX + state.momentum.x, maxOffset.x),
348
+ offsetY: clamp(-maxOffset.y, state.offsetY + state.momentum.y, maxOffset.y),
349
+ momentum: {
350
+ x: state.momentum.x * FRICTION,
351
+ y: state.momentum.y * FRICTION
352
+ }
353
+ };
354
+ }, function () {
355
+ if (Math.abs(_this4.state.momentum.x) > 0.1 || Math.abs(_this4.state.momentum.y) > 0.1) requestAnimationFrame(_this4.applyMomentum.bind(_this4));
356
+ });
357
+ }
358
+ /**
359
+ * Compute the maximum offset that can be applied to the photo on each axis before it goes over the edges
360
+ * @returns {object} A point with an x and y property
361
+ */
362
+
363
+ }, {
364
+ key: "computeMaxOffset",
365
+ value: function computeMaxOffset() {
366
+ if (this.viewer && this.photo) {
367
+ var wrapperBoundaries = this.viewer.getBoundingClientRect();
368
+ var photoBoundaries = this.photo.getBoundingClientRect();
369
+ return {
370
+ x: Math.max(photoBoundaries.width / 2 - wrapperBoundaries.width / 2, 0) / this.state.scale,
371
+ y: Math.max(photoBoundaries.height / 2 - wrapperBoundaries.height / 2, 0) / this.state.scale
372
+ };
373
+ } else {
374
+ return {
375
+ x: 0,
376
+ y: 0
377
+ };
378
+ }
379
+ }
380
+ }]);
381
+ return ImageViewer;
382
+ }(_react.Component);
383
+
384
+ var _default = ImageViewer;
385
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ declare var _default: any;
2
+ export default _default;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _Icon = _interopRequireDefault(require("cozy-ui/transpiled/react/Icon"));
13
+
14
+ var _CloudBroken = _interopRequireDefault(require("cozy-ui/transpiled/react/Icons/CloudBroken"));
15
+
16
+ var _Button = _interopRequireDefault(require("cozy-ui/transpiled/react/deprecated/Button"));
17
+
18
+ var _withViewerLocales = require("../hoc/withViewerLocales");
19
+
20
+ var styles = {
21
+ "viewer-imageviewer": "styles__viewer-imageviewer___2O8pW",
22
+ "viewer-noviewer": "styles__viewer-noviewer___3HRGf",
23
+ "viewer-audioviewer": "styles__viewer-audioviewer___dpxUM",
24
+ "viewer-videoviewer": "styles__viewer-videoviewer___3yUQ5",
25
+ "viewer-pdfviewer": "styles__viewer-pdfviewer___3MJPk",
26
+ "viewer-textviewer": "styles__viewer-textviewer___1fl1c",
27
+ "viewer-canceled": "styles__viewer-canceled___3KRBk",
28
+ "viewer-textviewer-content": "styles__viewer-textviewer-content___30dhP",
29
+ "viewer-filename": "styles__viewer-filename___1-DIz",
30
+ "viewer-pdfviewer-pdf": "styles__viewer-pdfviewer-pdf___3R4jL",
31
+ "viewer-pdfviewer-page": "styles__viewer-pdfviewer-page___VvOF3",
32
+ "viewer-pdfviewer-toolbar": "styles__viewer-pdfviewer-toolbar___2Eat3",
33
+ "viewer-pdfMobile": "styles__viewer-pdfMobile___ym7we",
34
+ "viewer-pdfMobile--image": "styles__viewer-pdfMobile--image___3_zsS"
35
+ };
36
+
37
+ var NoNetworkViewer = function NoNetworkViewer(_ref) {
38
+ var t = _ref.t,
39
+ onReload = _ref.onReload;
40
+ return /*#__PURE__*/_react.default.createElement("div", {
41
+ className: styles['viewer-canceled']
42
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
43
+ icon: _CloudBroken.default,
44
+ width: 160,
45
+ height: 140
46
+ }), /*#__PURE__*/_react.default.createElement("h2", null, t('Viewer.error.network')), /*#__PURE__*/_react.default.createElement(_Button.default, {
47
+ onClick: onReload,
48
+ label: t('Viewer.retry')
49
+ }));
50
+ };
51
+
52
+ var _default = (0, _withViewerLocales.withViewerLocales)(NoNetworkViewer);
53
+
54
+ exports.default = _default;
@@ -0,0 +1,2 @@
1
+ declare var _default: any;
2
+ export default _default;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _Button = _interopRequireDefault(require("cozy-ui/transpiled/react/deprecated/Button"));
15
+
16
+ var _proptypes = require("cozy-ui/transpiled/react/proptypes");
17
+
18
+ var _NoViewer = _interopRequireDefault(require("../NoViewer"));
19
+
20
+ var _withViewerLocales = require("../hoc/withViewerLocales");
21
+
22
+ var OnlyOfficeViewer = function OnlyOfficeViewer(_ref) {
23
+ var file = _ref.file,
24
+ onlyOfficeOpener = _ref.onlyOfficeOpener,
25
+ t = _ref.t;
26
+ return /*#__PURE__*/_react.default.createElement(_NoViewer.default, {
27
+ file: file,
28
+ renderFallbackExtraContent: function renderFallbackExtraContent() {
29
+ return /*#__PURE__*/_react.default.createElement(_Button.default, {
30
+ label: t('Viewer.openInOnlyOffice'),
31
+ onClick: function onClick() {
32
+ return onlyOfficeOpener(file);
33
+ }
34
+ });
35
+ }
36
+ });
37
+ };
38
+
39
+ OnlyOfficeViewer.propTypes = {
40
+ file: _proptypes.FileDoctype,
41
+ onlyOfficeOpener: _propTypes.default.func.isRequired
42
+ };
43
+
44
+ var _default = (0, _withViewerLocales.withViewerLocales)(OnlyOfficeViewer);
45
+
46
+ exports.default = _default;
@@ -0,0 +1,31 @@
1
+ export const MIN_SCALE: 0.25;
2
+ export const MAX_SCALE: 3;
3
+ export const MAX_PAGES: 3;
4
+ export class PdfJsViewer extends React.Component<any, any, any> {
5
+ constructor(props: Readonly<any>);
6
+ constructor(props: any, context?: any);
7
+ resizeListener: import("lodash").DebouncedFunc<() => void> | undefined;
8
+ onKeyUp: (e: any) => void;
9
+ toggleGestures(enable: any): void;
10
+ setWrapperSize: () => void;
11
+ onLoadSuccess: ({ numPages }: {
12
+ numPages: any;
13
+ }) => void;
14
+ onLoadError: (error: any) => void;
15
+ nextPage: () => void;
16
+ previousPage: () => void;
17
+ scaleUp: () => void;
18
+ scaleDown: () => void;
19
+ wrapper: HTMLDivElement | null | undefined;
20
+ }
21
+ export namespace PdfJsViewer {
22
+ namespace propTypes {
23
+ const url: PropTypes.Validator<string>;
24
+ const gestures: PropTypes.Requireable<object>;
25
+ const renderFallbackExtraContent: PropTypes.Requireable<(...args: any[]) => any>;
26
+ }
27
+ }
28
+ declare var _default: any;
29
+ export default _default;
30
+ import React from "react";
31
+ import PropTypes from "prop-types";