@hmcts/media-viewer 2.9.5 → 2.10.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 (475) hide show
  1. package/assets/all.scss +1 -1
  2. package/assets/sass/tags.scss +1 -1
  3. package/esm2020/hmcts-media-viewer.mjs +5 -0
  4. package/esm2020/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +116 -0
  5. package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +109 -0
  6. package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +75 -0
  7. package/esm2020/lib/annotations/annotation-set/annotation-set.component.mjs +50 -0
  8. package/esm2020/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +94 -0
  9. package/esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +116 -0
  10. package/esm2020/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +118 -0
  11. package/esm2020/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +87 -0
  12. package/esm2020/lib/annotations/annotations.module.mjs +158 -0
  13. package/esm2020/lib/annotations/comment-set/comment/comment.component.mjs +176 -0
  14. package/esm2020/lib/annotations/comment-set/comment/comment.service.mjs +50 -0
  15. package/esm2020/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +47 -0
  16. package/esm2020/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +31 -0
  17. package/esm2020/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +91 -0
  18. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +61 -0
  19. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +53 -0
  20. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +68 -0
  21. package/esm2020/lib/annotations/comment-set/comment-set-render.service.mjs +54 -0
  22. package/esm2020/lib/annotations/comment-set/comment-set.component.mjs +123 -0
  23. package/esm2020/lib/annotations/comments-summary/comments-summary.component.mjs +113 -0
  24. package/esm2020/lib/annotations/pipes/date/date.pipe.mjs +26 -0
  25. package/esm2020/lib/annotations/pipes/filter/filter.pipe.mjs +32 -0
  26. package/esm2020/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +16 -0
  27. package/esm2020/lib/annotations/services/annotation-api/annotation-api.service.mjs +58 -0
  28. package/esm2020/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +45 -0
  29. package/esm2020/lib/annotations/services/tags/tags.services.mjs +41 -0
  30. package/esm2020/lib/annotations/tags/tags.component.mjs +53 -0
  31. package/esm2020/lib/bookmark/components/bookmark-icons.component.mjs +25 -0
  32. package/esm2020/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +22 -0
  33. package/esm2020/lib/icp/icp-follower.service.mjs +60 -0
  34. package/esm2020/lib/icp/icp-presenter.service.mjs +55 -0
  35. package/esm2020/lib/icp/icp-session-api.service.mjs +21 -0
  36. package/esm2020/lib/icp/icp-update.service.mjs +57 -0
  37. package/esm2020/lib/icp/icp.service.mjs +93 -0
  38. package/esm2020/lib/icp/participants-list/participants-list.component.mjs +30 -0
  39. package/esm2020/lib/icp/socket.service.mjs +118 -0
  40. package/esm2020/lib/media-viewer.component.mjs +244 -0
  41. package/esm2020/lib/media-viewer.module.mjs +151 -0
  42. package/{esm2015/lib/print.service.js → esm2020/lib/print.service.mjs} +9 -7
  43. package/esm2020/lib/redaction/components/redaction.component.mjs +91 -0
  44. package/esm2020/lib/redaction/services/redaction-api.service.mjs +50 -0
  45. package/esm2020/lib/shared/gov-uk-date/gov-uk-date.component.mjs +28 -0
  46. package/esm2020/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +34 -0
  47. package/esm2020/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +63 -0
  48. package/esm2020/lib/shared/gov-uk-label/gov-uk-label.component.mjs +44 -0
  49. package/esm2020/lib/shared/shared.module.mjs +53 -0
  50. package/esm2020/lib/shared/util/services/number.helper.service.mjs +23 -0
  51. package/{esm2015/lib/store/bookmarks-store-utils.js → esm2020/lib/store/bookmarks-store-utils.mjs} +1 -3
  52. package/esm2020/lib/store/effects/annotation.effects.mjs +44 -0
  53. package/esm2020/lib/store/effects/bookmarks.effects.mjs +44 -0
  54. package/esm2020/lib/store/effects/document.effects.mjs +44 -0
  55. package/esm2020/lib/store/effects/icp.effects.mjs +26 -0
  56. package/esm2020/lib/store/effects/redaction.effects.mjs +67 -0
  57. package/esm2020/lib/store/reducers/annotations.reducer.mjs +183 -0
  58. package/esm2020/lib/store/reducers/bookmarks.reducer.mjs +116 -0
  59. package/esm2020/lib/store/reducers/document.reducer.mjs +135 -0
  60. package/esm2020/lib/store/reducers/icp.reducer.mjs +56 -0
  61. package/esm2020/lib/store/reducers/redaction.reducer.mjs +116 -0
  62. package/esm2020/lib/store/reducers/tags.reducer.mjs +93 -0
  63. package/esm2020/lib/store/selectors/annotation.selectors.mjs +81 -0
  64. package/esm2020/lib/store/selectors/bookmark.selectors.mjs +36 -0
  65. package/{esm2015/lib/store/selectors/document.selectors.js → esm2020/lib/store/selectors/document.selectors.mjs} +3 -6
  66. package/esm2020/lib/store/selectors/icp.selectors.mjs +13 -0
  67. package/{esm2015/lib/store/selectors/redaction.selectors.js → esm2020/lib/store/selectors/redaction.selectors.mjs} +6 -10
  68. package/{esm2015/lib/store/selectors/tag.selectors.js → esm2020/lib/store/selectors/tag.selectors.mjs} +4 -7
  69. package/esm2020/lib/store/store-utils.mjs +131 -0
  70. package/esm2020/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +41 -0
  71. package/esm2020/lib/toolbar/main-toolbar/main-toolbar.component.mjs +188 -0
  72. package/esm2020/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +199 -0
  73. package/esm2020/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +66 -0
  74. package/esm2020/lib/toolbar/search-bar/search-bar.component.mjs +105 -0
  75. package/esm2020/lib/toolbar/toolbar-button-visibility.service.mjs +94 -0
  76. package/{esm2015/lib/toolbar/toolbar-event.service.js → esm2020/lib/toolbar/toolbar-event.service.mjs} +7 -5
  77. package/esm2020/lib/toolbar/toolbar.module.mjs +67 -0
  78. package/esm2020/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +78 -0
  79. package/esm2020/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +22 -0
  80. package/esm2020/lib/viewers/grab-n-drag.directive.mjs +57 -0
  81. package/esm2020/lib/viewers/image-viewer/image-viewer.component.mjs +166 -0
  82. package/esm2020/lib/viewers/multimedia-player/multimedia-player.component.mjs +58 -0
  83. package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +193 -0
  84. package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +40 -0
  85. package/esm2020/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +230 -0
  86. package/esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +192 -0
  87. package/esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +49 -0
  88. package/esm2020/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +77 -0
  89. package/esm2020/lib/viewers/rotation-persist/rotation-api.service.mjs +27 -0
  90. package/esm2020/lib/viewers/rotation-persist/rotation-persist.directive.mjs +64 -0
  91. package/esm2020/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +49 -0
  92. package/esm2020/lib/viewers/viewer-event.service.mjs +30 -0
  93. package/esm2020/lib/viewers/viewer-util.service.mjs +20 -0
  94. package/esm2020/public_api.mjs +32 -0
  95. package/fesm2015/hmcts-media-viewer.mjs +6602 -0
  96. package/fesm2015/hmcts-media-viewer.mjs.map +1 -0
  97. package/fesm2020/hmcts-media-viewer.mjs +6893 -0
  98. package/fesm2020/hmcts-media-viewer.mjs.map +1 -0
  99. package/hmcts-media-viewer.d.ts.map +1 -1
  100. package/index.d.ts +6 -0
  101. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +3 -0
  102. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +1 -1
  103. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts +3 -0
  104. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts.map +1 -1
  105. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts +3 -0
  106. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts.map +1 -1
  107. package/lib/annotations/annotation-set/annotation-set.component.d.ts +3 -0
  108. package/lib/annotations/annotation-set/annotation-set.component.d.ts.map +1 -1
  109. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +3 -0
  110. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts.map +1 -1
  111. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +5 -2
  112. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts.map +1 -1
  113. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +3 -0
  114. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts.map +1 -1
  115. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +3 -0
  116. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts.map +1 -1
  117. package/lib/annotations/annotations.module.d.ts +32 -0
  118. package/lib/annotations/annotations.module.d.ts.map +1 -1
  119. package/lib/annotations/comment-set/comment/comment.component.d.ts +3 -0
  120. package/lib/annotations/comment-set/comment/comment.component.d.ts.map +1 -1
  121. package/lib/annotations/comment-set/comment/comment.service.d.ts +5 -2
  122. package/lib/annotations/comment-set/comment/comment.service.d.ts.map +1 -1
  123. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +3 -0
  124. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts.map +1 -1
  125. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts +3 -0
  126. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts.map +1 -1
  127. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +3 -0
  128. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts.map +1 -1
  129. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts +6 -3
  130. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts.map +1 -1
  131. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +3 -0
  132. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts.map +1 -1
  133. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +3 -0
  134. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts.map +1 -1
  135. package/lib/annotations/comment-set/comment-set-render.service.d.ts +3 -0
  136. package/lib/annotations/comment-set/comment-set-render.service.d.ts.map +1 -1
  137. package/lib/annotations/comment-set/comment-set.component.d.ts +3 -0
  138. package/lib/annotations/comment-set/comment-set.component.d.ts.map +1 -1
  139. package/lib/annotations/comments-summary/comments-summary.component.d.ts +6 -3
  140. package/lib/annotations/comments-summary/comments-summary.component.d.ts.map +1 -1
  141. package/lib/annotations/pipes/date/date.pipe.d.ts +3 -0
  142. package/lib/annotations/pipes/date/date.pipe.d.ts.map +1 -1
  143. package/lib/annotations/pipes/filter/filter.pipe.d.ts +3 -0
  144. package/lib/annotations/pipes/filter/filter.pipe.d.ts.map +1 -1
  145. package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts +3 -0
  146. package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts.map +1 -1
  147. package/lib/annotations/services/annotation-api/annotation-api.service.d.ts +3 -0
  148. package/lib/annotations/services/annotation-api/annotation-api.service.d.ts.map +1 -1
  149. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts +3 -0
  150. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts.map +1 -1
  151. package/lib/annotations/services/tags/tags.services.d.ts +3 -0
  152. package/lib/annotations/services/tags/tags.services.d.ts.map +1 -1
  153. package/lib/annotations/tags/tags.component.d.ts +6 -3
  154. package/lib/annotations/tags/tags.component.d.ts.map +1 -1
  155. package/lib/bookmark/components/bookmark-icons.component.d.ts +3 -0
  156. package/lib/bookmark/components/bookmark-icons.component.d.ts.map +1 -1
  157. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +3 -0
  158. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +1 -1
  159. package/lib/icp/icp-follower.service.d.ts +3 -0
  160. package/lib/icp/icp-follower.service.d.ts.map +1 -1
  161. package/lib/icp/icp-presenter.service.d.ts +3 -0
  162. package/lib/icp/icp-presenter.service.d.ts.map +1 -1
  163. package/lib/icp/icp-session-api.service.d.ts +3 -0
  164. package/lib/icp/icp-session-api.service.d.ts.map +1 -1
  165. package/lib/icp/icp-update.service.d.ts +3 -0
  166. package/lib/icp/icp-update.service.d.ts.map +1 -1
  167. package/lib/icp/icp.service.d.ts +3 -0
  168. package/lib/icp/icp.service.d.ts.map +1 -1
  169. package/lib/icp/participants-list/participants-list.component.d.ts +3 -0
  170. package/lib/icp/participants-list/participants-list.component.d.ts.map +1 -1
  171. package/lib/icp/socket.service.d.ts +3 -0
  172. package/lib/icp/socket.service.d.ts.map +1 -1
  173. package/lib/media-viewer.component.d.ts +3 -0
  174. package/lib/media-viewer.component.d.ts.map +1 -1
  175. package/lib/media-viewer.module.d.ts +31 -0
  176. package/lib/media-viewer.module.d.ts.map +1 -1
  177. package/lib/print.service.d.ts +3 -0
  178. package/lib/print.service.d.ts.map +1 -1
  179. package/lib/redaction/components/redaction.component.d.ts +3 -0
  180. package/lib/redaction/components/redaction.component.d.ts.map +1 -1
  181. package/lib/redaction/services/redaction-api.service.d.ts +3 -0
  182. package/lib/redaction/services/redaction-api.service.d.ts.map +1 -1
  183. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +3 -0
  184. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts.map +1 -1
  185. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +3 -0
  186. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts.map +1 -1
  187. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +3 -0
  188. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts.map +1 -1
  189. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +3 -0
  190. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts.map +1 -1
  191. package/lib/shared/shared.module.d.ts +11 -0
  192. package/lib/shared/shared.module.d.ts.map +1 -1
  193. package/lib/shared/util/services/number.helper.service.d.ts +3 -0
  194. package/lib/shared/util/services/number.helper.service.d.ts.map +1 -1
  195. package/lib/store/actions/annotation.actions.d.ts +1 -1
  196. package/lib/store/actions/annotation.actions.d.ts.map +1 -1
  197. package/lib/store/actions/bookmark.actions.d.ts +1 -1
  198. package/lib/store/actions/bookmark.actions.d.ts.map +1 -1
  199. package/lib/store/actions/document.actions.d.ts +1 -1
  200. package/lib/store/actions/document.actions.d.ts.map +1 -1
  201. package/lib/store/actions/icp.actions.d.ts +1 -1
  202. package/lib/store/actions/icp.actions.d.ts.map +1 -1
  203. package/lib/store/actions/redaction.actions.d.ts +1 -1
  204. package/lib/store/actions/redaction.actions.d.ts.map +1 -1
  205. package/lib/store/actions/tag.actions.d.ts +1 -1
  206. package/lib/store/actions/tag.actions.d.ts.map +1 -1
  207. package/lib/store/effects/annotation.effects.d.ts +6 -3
  208. package/lib/store/effects/annotation.effects.d.ts.map +1 -1
  209. package/lib/store/effects/bookmarks.effects.d.ts +8 -5
  210. package/lib/store/effects/bookmarks.effects.d.ts.map +1 -1
  211. package/lib/store/effects/document.effects.d.ts +6 -3
  212. package/lib/store/effects/document.effects.d.ts.map +1 -1
  213. package/lib/store/effects/icp.effects.d.ts +5 -2
  214. package/lib/store/effects/icp.effects.d.ts.map +1 -1
  215. package/lib/store/effects/redaction.effects.d.ts +9 -6
  216. package/lib/store/effects/redaction.effects.d.ts.map +1 -1
  217. package/lib/store/selectors/annotation.selectors.d.ts +70 -27
  218. package/lib/store/selectors/annotation.selectors.d.ts.map +1 -1
  219. package/lib/store/selectors/bookmark.selectors.d.ts +18 -10
  220. package/lib/store/selectors/bookmark.selectors.d.ts.map +1 -1
  221. package/lib/store/selectors/document.selectors.d.ts +13 -11
  222. package/lib/store/selectors/document.selectors.d.ts.map +1 -1
  223. package/lib/store/selectors/icp.selectors.d.ts +9 -8
  224. package/lib/store/selectors/icp.selectors.d.ts.map +1 -1
  225. package/lib/store/selectors/redaction.selectors.d.ts +17 -11
  226. package/lib/store/selectors/redaction.selectors.d.ts.map +1 -1
  227. package/lib/store/selectors/tag.selectors.d.ts +14 -12
  228. package/lib/store/selectors/tag.selectors.d.ts.map +1 -1
  229. package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts +3 -0
  230. package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts.map +1 -1
  231. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +3 -0
  232. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -1
  233. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts +5 -2
  234. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts.map +1 -1
  235. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +3 -0
  236. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +1 -1
  237. package/lib/toolbar/search-bar/search-bar.component.d.ts +3 -0
  238. package/lib/toolbar/search-bar/search-bar.component.d.ts.map +1 -1
  239. package/lib/toolbar/toolbar-button-visibility.service.d.ts +3 -0
  240. package/lib/toolbar/toolbar-button-visibility.service.d.ts.map +1 -1
  241. package/lib/toolbar/toolbar-event.service.d.ts +5 -2
  242. package/lib/toolbar/toolbar-event.service.d.ts.map +1 -1
  243. package/lib/toolbar/toolbar.module.d.ts +13 -0
  244. package/lib/toolbar/toolbar.module.d.ts.map +1 -1
  245. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +3 -0
  246. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts.map +1 -1
  247. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts +3 -0
  248. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts.map +1 -1
  249. package/lib/viewers/grab-n-drag.directive.d.ts +3 -0
  250. package/lib/viewers/grab-n-drag.directive.d.ts.map +1 -1
  251. package/lib/viewers/image-viewer/image-viewer.component.d.ts +3 -0
  252. package/lib/viewers/image-viewer/image-viewer.component.d.ts.map +1 -1
  253. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +3 -0
  254. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts.map +1 -1
  255. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts +3 -0
  256. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts.map +1 -1
  257. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +3 -0
  258. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts.map +1 -1
  259. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +5 -2
  260. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts.map +1 -1
  261. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +3 -0
  262. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts.map +1 -1
  263. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +3 -0
  264. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts.map +1 -1
  265. package/lib/viewers/rotation-persist/rotation-api.service.d.ts +3 -0
  266. package/lib/viewers/rotation-persist/rotation-api.service.d.ts.map +1 -1
  267. package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts +3 -0
  268. package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts.map +1 -1
  269. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +3 -0
  270. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts.map +1 -1
  271. package/lib/viewers/viewer-event.service.d.ts +3 -0
  272. package/lib/viewers/viewer-event.service.d.ts.map +1 -1
  273. package/lib/viewers/viewer-util.service.d.ts +3 -0
  274. package/lib/viewers/viewer-util.service.d.ts.map +1 -1
  275. package/package.json +34 -22
  276. package/public_api.d.ts +1 -0
  277. package/public_api.d.ts.map +1 -1
  278. package/bundles/hmcts-media-viewer.umd.js +0 -7552
  279. package/bundles/hmcts-media-viewer.umd.js.map +0 -1
  280. package/bundles/hmcts-media-viewer.umd.min.js +0 -2
  281. package/bundles/hmcts-media-viewer.umd.min.js.map +0 -1
  282. package/esm2015/hmcts-media-viewer.js +0 -64
  283. package/esm2015/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.js +0 -113
  284. package/esm2015/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.js +0 -111
  285. package/esm2015/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.js +0 -61
  286. package/esm2015/lib/annotations/annotation-set/annotation-set.component.js +0 -47
  287. package/esm2015/lib/annotations/annotation-set/annotation-view/annotation-view.component.js +0 -86
  288. package/esm2015/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.js +0 -108
  289. package/esm2015/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.js +0 -107
  290. package/esm2015/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.js +0 -81
  291. package/esm2015/lib/annotations/annotations.module.js +0 -103
  292. package/esm2015/lib/annotations/comment-set/comment/comment.component.js +0 -162
  293. package/esm2015/lib/annotations/comment-set/comment/comment.service.js +0 -47
  294. package/esm2015/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.js +0 -48
  295. package/esm2015/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.js +0 -31
  296. package/esm2015/lib/annotations/comment-set/comment-navigate/comments-navigate.component.js +0 -95
  297. package/esm2015/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.js +0 -60
  298. package/esm2015/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.js +0 -53
  299. package/esm2015/lib/annotations/comment-set/comment-set-header/comment-set-header.component.js +0 -68
  300. package/esm2015/lib/annotations/comment-set/comment-set-render.service.js +0 -51
  301. package/esm2015/lib/annotations/comment-set/comment-set.component.js +0 -110
  302. package/esm2015/lib/annotations/comments-summary/comments-summary.component.js +0 -106
  303. package/esm2015/lib/annotations/pipes/date/date.pipe.js +0 -22
  304. package/esm2015/lib/annotations/pipes/filter/filter.pipe.js +0 -28
  305. package/esm2015/lib/annotations/pipes/unsnake/unsnake.pipe.js +0 -12
  306. package/esm2015/lib/annotations/services/annotation-api/annotation-api.service.js +0 -59
  307. package/esm2015/lib/annotations/services/bookmarks-api/bookmarks-api.service.js +0 -46
  308. package/esm2015/lib/annotations/services/tags/tags.services.js +0 -36
  309. package/esm2015/lib/annotations/tags/tags.component.js +0 -52
  310. package/esm2015/lib/bookmark/components/bookmark-icons.component.js +0 -26
  311. package/esm2015/lib/icp/confirm-exit/confirm-action-dialog.component.js +0 -25
  312. package/esm2015/lib/icp/icp-follower.service.js +0 -63
  313. package/esm2015/lib/icp/icp-presenter.service.js +0 -57
  314. package/esm2015/lib/icp/icp-session-api.service.js +0 -22
  315. package/esm2015/lib/icp/icp-update.service.js +0 -56
  316. package/esm2015/lib/icp/icp.service.js +0 -98
  317. package/esm2015/lib/icp/participants-list/participants-list.component.js +0 -32
  318. package/esm2015/lib/icp/socket.service.js +0 -117
  319. package/esm2015/lib/media-viewer.component.js +0 -210
  320. package/esm2015/lib/media-viewer.module.js +0 -102
  321. package/esm2015/lib/redaction/components/redaction.component.js +0 -97
  322. package/esm2015/lib/redaction/services/redaction-api.service.js +0 -51
  323. package/esm2015/lib/shared/gov-uk-date/gov-uk-date.component.js +0 -21
  324. package/esm2015/lib/shared/gov-uk-error-message/gov-uk-error-message.component.js +0 -27
  325. package/esm2015/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.js +0 -42
  326. package/esm2015/lib/shared/gov-uk-label/gov-uk-label.component.js +0 -32
  327. package/esm2015/lib/shared/shared.module.js +0 -34
  328. package/esm2015/lib/shared/util/services/number.helper.service.js +0 -23
  329. package/esm2015/lib/store/effects/annotation.effects.js +0 -58
  330. package/esm2015/lib/store/effects/bookmarks.effects.js +0 -66
  331. package/esm2015/lib/store/effects/document.effects.js +0 -59
  332. package/esm2015/lib/store/effects/icp.effects.js +0 -37
  333. package/esm2015/lib/store/effects/redaction.effects.js +0 -94
  334. package/esm2015/lib/store/reducers/annotations.reducer.js +0 -115
  335. package/esm2015/lib/store/reducers/bookmarks.reducer.js +0 -80
  336. package/esm2015/lib/store/reducers/document.reducer.js +0 -100
  337. package/esm2015/lib/store/reducers/icp.reducer.js +0 -40
  338. package/esm2015/lib/store/reducers/redaction.reducer.js +0 -75
  339. package/esm2015/lib/store/reducers/tags.reducer.js +0 -67
  340. package/esm2015/lib/store/selectors/annotation.selectors.js +0 -84
  341. package/esm2015/lib/store/selectors/bookmark.selectors.js +0 -41
  342. package/esm2015/lib/store/selectors/icp.selectors.js +0 -18
  343. package/esm2015/lib/store/store-utils.js +0 -105
  344. package/esm2015/lib/toolbar/icp-toolbar/icp-toolbar.component.js +0 -43
  345. package/esm2015/lib/toolbar/main-toolbar/main-toolbar.component.js +0 -175
  346. package/esm2015/lib/toolbar/redaction-search-bar/redaction-search-bar.component.js +0 -201
  347. package/esm2015/lib/toolbar/redaction-toolbar/redaction-toolbar.component.js +0 -70
  348. package/esm2015/lib/toolbar/search-bar/search-bar.component.js +0 -102
  349. package/esm2015/lib/toolbar/toolbar-button-visibility.service.js +0 -92
  350. package/esm2015/lib/toolbar/toolbar.module.js +0 -45
  351. package/esm2015/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.js +0 -72
  352. package/esm2015/lib/viewers/convertible-content-viewer/document-conversion-api.service.js +0 -23
  353. package/esm2015/lib/viewers/grab-n-drag.directive.js +0 -51
  354. package/esm2015/lib/viewers/image-viewer/image-viewer.component.js +0 -164
  355. package/esm2015/lib/viewers/multimedia-player/multimedia-player.component.js +0 -54
  356. package/esm2015/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.js +0 -203
  357. package/esm2015/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.js +0 -43
  358. package/esm2015/lib/viewers/pdf-viewer/pdf-viewer.component.js +0 -220
  359. package/esm2015/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.js +0 -179
  360. package/esm2015/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.js +0 -44
  361. package/esm2015/lib/viewers/pdf-viewer/side-bar/side-bar.component.js +0 -72
  362. package/esm2015/lib/viewers/rotation-persist/rotation-api.service.js +0 -28
  363. package/esm2015/lib/viewers/rotation-persist/rotation-persist.directive.js +0 -67
  364. package/esm2015/lib/viewers/unsupported-viewer/unsupported-viewer.component.js +0 -47
  365. package/esm2015/lib/viewers/viewer-event.service.js +0 -30
  366. package/esm2015/lib/viewers/viewer-util.service.js +0 -23
  367. package/esm2015/public_api.js +0 -31
  368. package/fesm2015/hmcts-media-viewer.js +0 -6585
  369. package/fesm2015/hmcts-media-viewer.js.map +0 -1
  370. package/hmcts-media-viewer.d.ts +0 -69
  371. package/hmcts-media-viewer.metadata.json +0 -1
  372. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.ngfactory.d.ts.map +0 -1
  373. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.ngfactory.d.ts.map +0 -1
  374. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.ngfactory.d.ts.map +0 -1
  375. package/lib/annotations/annotation-set/annotation-set.component.ngfactory.d.ts.map +0 -1
  376. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.ngfactory.d.ts.map +0 -1
  377. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.ngfactory.d.ts.map +0 -1
  378. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.ngfactory.d.ts.map +0 -1
  379. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.ngfactory.d.ts.map +0 -1
  380. package/lib/annotations/annotations.module.ngfactory.d.ts.map +0 -1
  381. package/lib/annotations/comment-set/comment/comment.component.ngfactory.d.ts.map +0 -1
  382. package/lib/annotations/comment-set/comment/comment.service.ngfactory.d.ts.map +0 -1
  383. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.ngfactory.d.ts.map +0 -1
  384. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.ngfactory.d.ts.map +0 -1
  385. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.ngfactory.d.ts.map +0 -1
  386. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.ngfactory.d.ts.map +0 -1
  387. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.ngfactory.d.ts.map +0 -1
  388. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.ngfactory.d.ts.map +0 -1
  389. package/lib/annotations/comment-set/comment-set-render.service.ngfactory.d.ts.map +0 -1
  390. package/lib/annotations/comment-set/comment-set.component.ngfactory.d.ts.map +0 -1
  391. package/lib/annotations/comments-summary/comments-summary.component.ngfactory.d.ts.map +0 -1
  392. package/lib/annotations/pipes/date/date.pipe.ngfactory.d.ts.map +0 -1
  393. package/lib/annotations/pipes/filter/filter.pipe.ngfactory.d.ts.map +0 -1
  394. package/lib/annotations/pipes/unsnake/unsnake.pipe.ngfactory.d.ts.map +0 -1
  395. package/lib/annotations/services/annotation-api/annotation-api.service.ngfactory.d.ts.map +0 -1
  396. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.ngfactory.d.ts.map +0 -1
  397. package/lib/annotations/services/tags/tags.services.ngfactory.d.ts.map +0 -1
  398. package/lib/annotations/tags/tags.component.ngfactory.d.ts.map +0 -1
  399. package/lib/bookmark/components/bookmark-icons.component.ngfactory.d.ts.map +0 -1
  400. package/lib/icp/confirm-exit/confirm-action-dialog.component.ngfactory.d.ts.map +0 -1
  401. package/lib/icp/icp-follower.service.ngfactory.d.ts.map +0 -1
  402. package/lib/icp/icp-presenter.service.ngfactory.d.ts.map +0 -1
  403. package/lib/icp/icp-session-api.service.ngfactory.d.ts.map +0 -1
  404. package/lib/icp/icp-update.service.ngfactory.d.ts.map +0 -1
  405. package/lib/icp/icp.service.ngfactory.d.ts.map +0 -1
  406. package/lib/icp/participants-list/participants-list.component.ngfactory.d.ts.map +0 -1
  407. package/lib/icp/socket.service.ngfactory.d.ts.map +0 -1
  408. package/lib/media-viewer.component.ngfactory.d.ts.map +0 -1
  409. package/lib/media-viewer.module.ngfactory.d.ts.map +0 -1
  410. package/lib/print.service.ngfactory.d.ts.map +0 -1
  411. package/lib/redaction/components/redaction.component.ngfactory.d.ts.map +0 -1
  412. package/lib/redaction/services/redaction-api.service.ngfactory.d.ts.map +0 -1
  413. package/lib/shared/gov-uk-date/gov-uk-date.component.ngfactory.d.ts.map +0 -1
  414. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.ngfactory.d.ts.map +0 -1
  415. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.ngfactory.d.ts.map +0 -1
  416. package/lib/shared/gov-uk-label/gov-uk-label.component.ngfactory.d.ts.map +0 -1
  417. package/lib/shared/shared.module.ngfactory.d.ts.map +0 -1
  418. package/lib/shared/util/services/number.helper.service.ngfactory.d.ts.map +0 -1
  419. package/lib/store/effects/annotation.effects.ngfactory.d.ts.map +0 -1
  420. package/lib/store/effects/bookmarks.effects.ngfactory.d.ts.map +0 -1
  421. package/lib/store/effects/document.effects.ngfactory.d.ts.map +0 -1
  422. package/lib/store/effects/icp.effects.ngfactory.d.ts.map +0 -1
  423. package/lib/store/effects/redaction.effects.ngfactory.d.ts.map +0 -1
  424. package/lib/toolbar/icp-toolbar/icp-toolbar.component.ngfactory.d.ts.map +0 -1
  425. package/lib/toolbar/main-toolbar/main-toolbar.component.ngfactory.d.ts.map +0 -1
  426. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.ngfactory.d.ts.map +0 -1
  427. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.scss.shim.ngstyle.d.ts.map +0 -1
  428. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.ngfactory.d.ts.map +0 -1
  429. package/lib/toolbar/search-bar/search-bar.component.ngfactory.d.ts.map +0 -1
  430. package/lib/toolbar/toolbar-button-visibility.service.ngfactory.d.ts.map +0 -1
  431. package/lib/toolbar/toolbar-event.service.ngfactory.d.ts.map +0 -1
  432. package/lib/toolbar/toolbar.module.ngfactory.d.ts.map +0 -1
  433. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.ngfactory.d.ts.map +0 -1
  434. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.ngfactory.d.ts.map +0 -1
  435. package/lib/viewers/grab-n-drag.directive.ngfactory.d.ts.map +0 -1
  436. package/lib/viewers/image-viewer/image-viewer.component.ngfactory.d.ts.map +0 -1
  437. package/lib/viewers/multimedia-player/multimedia-player.component.ngfactory.d.ts.map +0 -1
  438. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.ngfactory.d.ts.map +0 -1
  439. package/lib/viewers/pdf-viewer/pdf-viewer.component.ngfactory.d.ts.map +0 -1
  440. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.ngfactory.d.ts.map +0 -1
  441. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.ngfactory.d.ts.map +0 -1
  442. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.ngfactory.d.ts.map +0 -1
  443. package/lib/viewers/rotation-persist/rotation-api.service.ngfactory.d.ts.map +0 -1
  444. package/lib/viewers/rotation-persist/rotation-persist.directive.ngfactory.d.ts.map +0 -1
  445. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.ngfactory.d.ts.map +0 -1
  446. package/lib/viewers/viewer-event.service.ngfactory.d.ts.map +0 -1
  447. package/lib/viewers/viewer-util.service.ngfactory.d.ts.map +0 -1
  448. /package/{esm2015/lib/annotations/annotation-set/annotation-set.model.js → esm2020/lib/annotations/annotation-set/annotation-set.model.mjs} +0 -0
  449. /package/{esm2015/lib/annotations/annotation-set/annotation-view/annotation.model.js → esm2020/lib/annotations/annotation-set/annotation-view/annotation.model.mjs} +0 -0
  450. /package/{esm2015/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.js → esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.mjs} +0 -0
  451. /package/{esm2015/lib/annotations/comment-set/comment/comment.model.js → esm2020/lib/annotations/comment-set/comment/comment.model.mjs} +0 -0
  452. /package/{esm2015/lib/annotations/models/api-persisted.model.js → esm2020/lib/annotations/models/api-persisted.model.mjs} +0 -0
  453. /package/{esm2015/lib/annotations/models/event-select.model.js → esm2020/lib/annotations/models/event-select.model.mjs} +0 -0
  454. /package/{esm2015/lib/annotations/models/tags.model.js → esm2020/lib/annotations/models/tags.model.mjs} +0 -0
  455. /package/{esm2015/lib/annotations/models/user.model.js → esm2020/lib/annotations/models/user.model.mjs} +0 -0
  456. /package/{esm2015/lib/icp/icp.events.js → esm2020/lib/icp/icp.events.mjs} +0 -0
  457. /package/{esm2015/lib/icp/icp.interfaces.js → esm2020/lib/icp/icp.interfaces.mjs} +0 -0
  458. /package/{esm2015/lib/redaction/services/redaction.model.js → esm2020/lib/redaction/services/redaction.model.mjs} +0 -0
  459. /package/{esm2015/lib/shared/util/helpers/html-templates.helper.js → esm2020/lib/shared/util/helpers/html-templates.helper.mjs} +0 -0
  460. /package/{esm2015/lib/store/actions/annotation.actions.js → esm2020/lib/store/actions/annotation.actions.mjs} +0 -0
  461. /package/{esm2015/lib/store/actions/bookmark.actions.js → esm2020/lib/store/actions/bookmark.actions.mjs} +0 -0
  462. /package/{esm2015/lib/store/actions/document.actions.js → esm2020/lib/store/actions/document.actions.mjs} +0 -0
  463. /package/{esm2015/lib/store/actions/icp.actions.js → esm2020/lib/store/actions/icp.actions.mjs} +0 -0
  464. /package/{esm2015/lib/store/actions/redaction.actions.js → esm2020/lib/store/actions/redaction.actions.mjs} +0 -0
  465. /package/{esm2015/lib/store/actions/tag.actions.js → esm2020/lib/store/actions/tag.actions.mjs} +0 -0
  466. /package/{esm2015/lib/store/effects/index.js → esm2020/lib/store/effects/index.mjs} +0 -0
  467. /package/{esm2015/lib/store/models/bookmarks.interface.js → esm2020/lib/store/models/bookmarks.interface.mjs} +0 -0
  468. /package/{esm2015/lib/store/models/filters.interface.js → esm2020/lib/store/models/filters.interface.mjs} +0 -0
  469. /package/{esm2015/lib/store/reducers/reducers.js → esm2020/lib/store/reducers/reducers.mjs} +0 -0
  470. /package/{esm2015/lib/toolbar/icp-event.service.js → esm2020/lib/toolbar/icp-event.service.mjs} +0 -0
  471. /package/{esm2015/lib/toolbar/redaction-search-bar/redaction-search.model.js → esm2020/lib/toolbar/redaction-search-bar/redaction-search.model.mjs} +0 -0
  472. /package/{esm2015/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.js → esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.mjs} +0 -0
  473. /package/{esm2015/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.js → esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.mjs} +0 -0
  474. /package/{esm2015/lib/viewers/rotation-persist/rotation.model.js → esm2020/lib/viewers/rotation-persist/rotation.model.mjs} +0 -0
  475. /package/{esm2015/lib/viewers/viewer-exception.model.js → esm2020/lib/viewers/viewer-exception.model.mjs} +0 -0
@@ -0,0 +1,166 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
2
+ import { ResponseType, ViewerException } from '../viewer-exception.model';
3
+ import * as fromDocument from '../../store/actions/document.actions';
4
+ import * as fromAnnotationActions from '../../store/actions/annotation.actions';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ngrx/store";
7
+ import * as i2 from "../../print.service";
8
+ import * as i3 from "../viewer-util.service";
9
+ import * as i4 from "../../toolbar/toolbar-event.service";
10
+ import * as i5 from "../../toolbar/toolbar-button-visibility.service";
11
+ import * as i6 from "../viewer-event.service";
12
+ import * as i7 from "@angular/common";
13
+ import * as i8 from "../../annotations/comment-set/comment-set.component";
14
+ import * as i9 from "../../annotations/comment-set/comment-set-header/comment-set-header.component";
15
+ import * as i10 from "../../annotations/annotation-set/metadata-layer/metadata-layer.component";
16
+ import * as i11 from "../grab-n-drag.directive";
17
+ import * as i12 from "../../redaction/components/redaction.component";
18
+ export class ImageViewerComponent {
19
+ constructor(store, printService, viewerUtilService, toolbarEvents, toolbarButtons, viewerEvents) {
20
+ this.store = store;
21
+ this.printService = printService;
22
+ this.viewerUtilService = viewerUtilService;
23
+ this.toolbarEvents = toolbarEvents;
24
+ this.toolbarButtons = toolbarButtons;
25
+ this.viewerEvents = viewerEvents;
26
+ this.mediaLoadStatus = new EventEmitter();
27
+ this.imageViewerException = new EventEmitter();
28
+ this.rotation = 0;
29
+ this.zoom = 1;
30
+ this.subscriptions = [];
31
+ this.enableGrabNDrag = false;
32
+ }
33
+ ngOnInit() {
34
+ this.subscriptions.push(this.toolbarEvents.rotateSubject.subscribe(rotation => this.rotateImage(rotation)), this.toolbarEvents.zoomSubject.subscribe(zoom => this.setZoom(zoom)), this.toolbarEvents.stepZoomSubject.subscribe(zoom => this.stepZoom(zoom)), this.toolbarEvents.printSubject.subscribe(() => this.printService.printDocumentNatively(this.url)), this.toolbarEvents.downloadSubject.subscribe(() => this.download()), this.toolbarEvents.grabNDrag.subscribe(grabNDrag => this.enableGrabNDrag = grabNDrag), this.toolbarEvents.commentsPanelVisible.subscribe(toggle => this.showCommentsPanel = toggle));
35
+ }
36
+ onImageViewerClick(event) {
37
+ const classNme = event.target.className;
38
+ if (classNme.startsWith('pageContainer')) {
39
+ this.store.dispatch(new fromAnnotationActions.SelectedAnnotation({
40
+ annotationId: '',
41
+ selected: false,
42
+ editable: false,
43
+ }));
44
+ this.viewerEvents.clearCtxToolbar();
45
+ }
46
+ }
47
+ ngOnDestroy() {
48
+ this.subscriptions.filter(subscription => !subscription.closed)
49
+ .forEach(subscription => subscription.unsubscribe());
50
+ if (this.response) {
51
+ this.response.unsubscribe();
52
+ }
53
+ }
54
+ ngOnChanges(changes) {
55
+ if (changes.url) {
56
+ this.errorMessage = null;
57
+ this.toolbarEvents.reset();
58
+ }
59
+ }
60
+ rotateImage(rotation) {
61
+ this.rotation = (this.rotation + rotation) % 360;
62
+ this.initAnnoPage(this.img.nativeElement);
63
+ }
64
+ async setZoom(zoomFactor) {
65
+ if (!isNaN(zoomFactor)) {
66
+ await this.setZoomValue(this.calculateZoomValue(zoomFactor));
67
+ this.img.nativeElement.width = this.img.nativeElement.naturalWidth * this.zoom;
68
+ this.initAnnoPage(this.img.nativeElement);
69
+ }
70
+ }
71
+ async stepZoom(zoomFactor) {
72
+ if (!isNaN(zoomFactor)) {
73
+ await this.setZoomValue(this.calculateZoomValue(this.zoom, zoomFactor));
74
+ this.img.nativeElement.width = this.img.nativeElement.naturalWidth * this.zoom;
75
+ this.initAnnoPage(this.img.nativeElement);
76
+ }
77
+ }
78
+ download() {
79
+ const a = document.createElement('a');
80
+ document.body.appendChild(a);
81
+ a.setAttribute('style', 'display: none');
82
+ a.href = this.url;
83
+ a.download = this.downloadFileName;
84
+ a.click();
85
+ a.remove();
86
+ }
87
+ // the returned promise is a work-around
88
+ setZoomValue(zoomValue) {
89
+ return new Promise((resolve) => {
90
+ this.zoom = zoomValue;
91
+ this.toolbarEvents.zoomValueSubject.next(zoomValue);
92
+ resolve(true);
93
+ });
94
+ }
95
+ calculateZoomValue(zoomValue, increment = 0) {
96
+ const newZoomValue = zoomValue + increment;
97
+ if (newZoomValue > 5) {
98
+ return 5;
99
+ }
100
+ if (newZoomValue < 0.1) {
101
+ return 0.1;
102
+ }
103
+ return +newZoomValue.toFixed(2);
104
+ }
105
+ onLoadError(url) {
106
+ this.response = this.viewerUtilService.validateFile(url)
107
+ .subscribe(next => next, error => {
108
+ this.viewerException = new ViewerException(error.name, { httpResponseCode: error.status, message: error.message });
109
+ });
110
+ this.errorMessage = `Could not load the image "${this.url}"`;
111
+ this.mediaLoadStatus.emit(ResponseType.FAILURE);
112
+ this.imageViewerException.emit(this.viewerException);
113
+ }
114
+ onLoad(img) {
115
+ this.mediaLoadStatus.emit(ResponseType.SUCCESS);
116
+ this.initAnnoPage(img);
117
+ }
118
+ initAnnoPage(img) {
119
+ this.imageHeight = this.rotation % 180 !== 0 ? img.offsetWidth : img.offsetHeight;
120
+ this.imageWidth = this.rotation % 180 !== 0 ? img.offsetHeight : img.offsetWidth;
121
+ this.imageLeft = this.rotation % 180 !== 0 ? img.offsetTop : img.offsetLeft;
122
+ this.imageTop = this.rotation % 180 !== 0 ? img.offsetLeft : img.offsetTop;
123
+ const payload = [{
124
+ div: {
125
+ scrollHeight: this.imageHeight,
126
+ scrollWidth: this.imageWidth,
127
+ offsetLeft: this.imageLeft,
128
+ },
129
+ pageNumber: 1,
130
+ scale: this.zoom,
131
+ rotation: this.rotation,
132
+ id: 1
133
+ }];
134
+ this.store.dispatch(new fromDocument.AddPages(payload));
135
+ }
136
+ toggleCommentsSummary() {
137
+ this.toolbarEvents.toggleCommentsSummary(!this.toolbarEvents.showCommentSummary.getValue());
138
+ }
139
+ }
140
+ /** @nocollapse */ ImageViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ImageViewerComponent, deps: [{ token: i1.Store }, { token: i2.PrintService }, { token: i3.ViewerUtilService }, { token: i4.ToolbarEventService }, { token: i5.ToolbarButtonVisibilityService }, { token: i6.ViewerEventService }], target: i0.ɵɵFactoryTarget.Component });
141
+ /** @nocollapse */ ImageViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ImageViewerComponent, selector: "mv-image-viewer", inputs: { url: "url", downloadFileName: "downloadFileName", enableAnnotations: "enableAnnotations", annotationSet: "annotationSet", height: "height" }, outputs: { mediaLoadStatus: "mediaLoadStatus", imageViewerException: "imageViewerException" }, host: { listeners: { "mousedown": "onImageViewerClick($event)" } }, viewQueries: [{ propertyName: "img", first: true, predicate: ["img"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mv-comment-set-header [ngClass]=\"{'show-comments-panel': showCommentsPanel}\"\n [showCommentSummary]=\"toolbarButtons.showCommentSummary\"\n (showCommentSummaryDialog)=\"toggleCommentsSummary()\">\n</mv-comment-set-header>\n<div id=\"viewer-wrapper\"\n [ngStyle]=\"{ height: height }\"\n [ngClass]=\"{ 'grabNDrag': enableGrabNDrag }\"\n *ngIf=\"url && !errorMessage\">\n <div #imageContainer id=\"image-container\"\n mvGrabNDrag [dragX]=\"imageContainer\" [dragEnabled]=\"enableGrabNDrag\"\n (scroll)=\"$event\"\n [ngClass]=\"{ 'image-container': true, 'annotations': enableAnnotations, 'show-comments-panel': showCommentsPanel }\">\n <img #img\n [src]=\"url\"\n [ngClass]=\"'rot' + rotation\"\n (error)=\"onLoadError(url)\"\n (load)=\"onLoad(img)\"/>\n <mv-redactions *ngIf=\"(toolbarEvents.redactionMode | async) === true;else annotationTemplate\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n ></mv-redactions>\n <ng-template #annotationTemplate>\n <mv-metadata-layer *ngIf=\"enableAnnotations && annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\">\n </mv-metadata-layer>\n </ng-template>\n </div>\n\n <mv-comment-set [contentScrollTop]=\"imageContainer.scrollTop\"\n *ngIf=\"enableAnnotations && annotationSet && (toolbarEvents.redactionMode | async) !== true\"\n [annotationSet]=\"annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n [height]=\"imageHeight\">\n </mv-comment-set>\n</div>\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i8.CommentSetComponent, selector: "mv-comment-set", inputs: ["annotationSet", "zoom", "rotate", "height", "pageHeights", "contentScrollTop"] }, { kind: "component", type: i9.CommentSetHeaderComponent, selector: "mv-comment-set-header", inputs: ["showCommentSummary"], outputs: ["showCommentSummaryDialog"] }, { kind: "component", type: i10.MetadataLayerComponent, selector: "mv-metadata-layer", inputs: ["zoom", "rotate"] }, { kind: "directive", type: i11.GrabNDragDirective, selector: "[mvGrabNDrag]", inputs: ["dragEnabled", "dragX"] }, { kind: "component", type: i12.RedactionComponent, selector: "mv-redactions", inputs: ["zoom", "rotate"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] });
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ImageViewerComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'mv-image-viewer', template: "<mv-comment-set-header [ngClass]=\"{'show-comments-panel': showCommentsPanel}\"\n [showCommentSummary]=\"toolbarButtons.showCommentSummary\"\n (showCommentSummaryDialog)=\"toggleCommentsSummary()\">\n</mv-comment-set-header>\n<div id=\"viewer-wrapper\"\n [ngStyle]=\"{ height: height }\"\n [ngClass]=\"{ 'grabNDrag': enableGrabNDrag }\"\n *ngIf=\"url && !errorMessage\">\n <div #imageContainer id=\"image-container\"\n mvGrabNDrag [dragX]=\"imageContainer\" [dragEnabled]=\"enableGrabNDrag\"\n (scroll)=\"$event\"\n [ngClass]=\"{ 'image-container': true, 'annotations': enableAnnotations, 'show-comments-panel': showCommentsPanel }\">\n <img #img\n [src]=\"url\"\n [ngClass]=\"'rot' + rotation\"\n (error)=\"onLoadError(url)\"\n (load)=\"onLoad(img)\"/>\n <mv-redactions *ngIf=\"(toolbarEvents.redactionMode | async) === true;else annotationTemplate\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n ></mv-redactions>\n <ng-template #annotationTemplate>\n <mv-metadata-layer *ngIf=\"enableAnnotations && annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\">\n </mv-metadata-layer>\n </ng-template>\n </div>\n\n <mv-comment-set [contentScrollTop]=\"imageContainer.scrollTop\"\n *ngIf=\"enableAnnotations && annotationSet && (toolbarEvents.redactionMode | async) !== true\"\n [annotationSet]=\"annotationSet\"\n [zoom]=\"zoom\"\n [rotate]=\"rotation\"\n [height]=\"imageHeight\">\n </mv-comment-set>\n</div>\n" }]
145
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PrintService }, { type: i3.ViewerUtilService }, { type: i4.ToolbarEventService }, { type: i5.ToolbarButtonVisibilityService }, { type: i6.ViewerEventService }]; }, propDecorators: { url: [{
146
+ type: Input
147
+ }], downloadFileName: [{
148
+ type: Input
149
+ }], enableAnnotations: [{
150
+ type: Input
151
+ }], annotationSet: [{
152
+ type: Input
153
+ }], height: [{
154
+ type: Input
155
+ }], mediaLoadStatus: [{
156
+ type: Output
157
+ }], imageViewerException: [{
158
+ type: Output
159
+ }], img: [{
160
+ type: ViewChild,
161
+ args: ['img', { static: false }]
162
+ }], onImageViewerClick: [{
163
+ type: HostListener,
164
+ args: ['mousedown', ['$event']]
165
+ }] } });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvaW1hZ2Utdmlld2VyL2ltYWdlLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi92aWV3ZXJzL2ltYWdlLXZpZXdlci9pbWFnZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLMUUsT0FBTyxLQUFLLFlBQVksTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEtBQUsscUJBQXFCLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBT2hGLE1BQU0sT0FBTyxvQkFBb0I7SUE4Qi9CLFlBQ1UsS0FBMEMsRUFDakMsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3JDLGFBQWtDLEVBQ2xDLGNBQThDLEVBQ3RELFlBQWdDO1FBTGhDLFVBQUssR0FBTCxLQUFLLENBQXFDO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDckMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQztRQUN0RCxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUExQmhDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDbkQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFLckUsYUFBUSxHQUFHLENBQUMs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LENBQUMsVUFBVTtvQkFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUMzQjtnQkFDRCxVQUFVLEVBQUUsQ0FBQztnQkFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsRUFBRSxFQUFFLENBQUM7YUFDTixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQzs7b0lBektVLG9CQUFvQjt3SEFBcEIsb0JBQW9CLG1lQzlCakMsZ3NEQXFDQTsyRkRQYSxvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0UsaUJBQWlCO3VRQUtsQixHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFJNEIsR0FBRztzQkFBckMsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQXFDakMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByaW50U2VydmljZSB9IGZyb20gJy4uLy4uL3ByaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblNldCB9IGZyb20gJy4uLy4uL2Fubm90YXRpb25zL2Fubm90YXRpb24tc2V0L2Fubm90YXRpb24tc2V0Lm1vZGVsJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXNwb25zZVR5cGUsIFZpZXdlckV4Y2VwdGlvbiB9IGZyb20gJy4uL3ZpZXdlci1leGNlcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgVmlld2VyVXRpbFNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1idXR0b24tdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0ICogYXMgZnJvbVN0b3JlIGZyb20gJy4uLy4uL3N0b3JlL3JlZHVjZXJzL3JlZHVjZXJzJztcbmltcG9ydCAqIGFzIGZyb21Eb2N1bWVudCBmcm9tICcuLi8uLi9zdG9yZS9hY3Rpb25zL2RvY3VtZW50LmFjdGlvbnMnO1xuaW1wb3J0ICogYXMgZnJvbUFubm90YXRpb25BY3Rpb25zIGZyb20gJy4uLy4uL3N0b3JlL2FjdGlvbnMvYW5ub3RhdGlvbi5hY3Rpb25zJztcbmltcG9ydCB7IFZpZXdlckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3ZpZXdlci1ldmVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtaW1hZ2Utdmlld2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLXZpZXdlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSB1cmw6IHN0cmluZztcbiAgQElucHV0KCkgZG93bmxvYWRGaWxlTmFtZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGVuYWJsZUFubm90YXRpb25zOiBib29sZWFuO1xuICBASW5wdXQoKSBhbm5vdGF0aW9uU2V0OiBBbm5vdGF0aW9uU2V0IHwgbnVsbDtcblxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgbWVkaWFMb2FkU3RhdHVzID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNwb25zZVR5cGU+KCk7XG4gIEBPdXRwdXQoKSBpbWFnZVZpZXdlckV4Y2VwdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Vmlld2VyRXhjZXB0aW9uPigpO1xuXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ2ltZycsIHtzdGF0aWM6IGZhbHNlfSkgaW1nOiBFbGVtZW50UmVmO1xuICByb3RhdGlvbiA9IDA7XG4gIHpvb20gPSAxO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSB2aWV3ZXJFeGNlcHRpb246IFZpZXdlckV4Y2VwdGlvbjtcbiAgcHJpdmF0ZSByZXNwb25zZTogU3Vic2NyaXB0aW9uO1xuXG4gIHNob3dDb21tZW50c1BhbmVsOiBib29sZWFuO1xuICBlbmFibGVHcmFiTkRyYWcgPSBmYWxzZTtcbiAgaW1hZ2VIZWlnaHQ6IG51bWJlcjtcbiAgaW1hZ2VXaWR0aDogbnVtYmVyO1xuICBpbWFnZUxlZnQ6IG51bWJlcjtcbiAgaW1hZ2VUb3A6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxmcm9tU3RvcmUuQW5ub3RhdGlvblNldFN0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW50U2VydmljZTogUHJpbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld2VyVXRpbFNlcnZpY2U6IFZpZXdlclV0aWxTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSB0b29sYmFyRXZlbnRzOiBUb29sYmFyRXZlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSB0b29sYmFyQnV0dG9uczogVG9vbGJhckJ1dHRvblZpc2liaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyRXZlbnRzOiBWaWV3ZXJFdmVudFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucm90YXRlU3ViamVjdC5zdWJzY3JpYmUocm90YXRpb24gPT4gdGhpcy5yb3RhdGVJbWFnZShyb3RhdGlvbikpLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnpvb21TdWJqZWN0LnN1YnNjcmliZSh6b29tID0+IHRoaXMuc2V0Wm9vbSh6b29tKSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc3RlcFpvb21TdWJqZWN0LnN1YnNjcmliZSh6b29tID0+IHRoaXMuc3RlcFpvb20oem9vbSkpLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnByaW50U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcmludFNlcnZpY2UucHJpbnREb2N1bWVudE5hdGl2ZWx5KHRoaXMudXJsKSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuZG93bmxvYWRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB0aGlzLmRvd25sb2FkKCkpLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLmdyYWJORHJhZy5zdWJzY3JpYmUoZ3JhYk5EcmFnID0+IHRoaXMuZW5hYmxlR3JhYk5EcmFnID0gZ3JhYk5EcmFnKSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5jb21tZW50c1BhbmVsVmlzaWJsZS5zdWJzY3JpYmUodG9nZ2xlID0+IHRoaXMuc2hvd0NvbW1lbnRzUGFuZWwgPSB0b2dnbGUpXG4gICAgKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uSW1hZ2VWaWV3ZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNsYXNzTm1lID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbGFzc05hbWU7XG4gICAgaWYgKGNsYXNzTm1lLnN0YXJ0c1dpdGgoJ3BhZ2VDb250YWluZXInKSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgbmV3IGZyb21Bbm5vdGF0aW9uQWN0aW9ucy5TZWxlY3RlZEFubm90YXRpb24oe1xuICAgICAgICAgIGFubm90YXRpb25JZDogJycsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnZpZXdlckV2ZW50cy5jbGVhckN0eFRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZmlsdGVyKHN1YnNjcmlwdGlvbiA9PiAhc3Vic2NyaXB0aW9uLmNsb3NlZClcbiAgICAgIC5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgaWYgKHRoaXMucmVzcG9uc2UpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMudXJsKSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdGF0ZUltYWdlKHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnJvdGF0aW9uID0gKHRoaXMucm90YXRpb24gKyByb3RhdGlvbikgJSAzNjA7XG4gICAgdGhpcy5pbml0QW5ub1BhZ2UodGhpcy5pbWcubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFpvb20oem9vbUZhY3RvcjogbnVtYmVyKSB7XG4gICAgaWYgKCFpc05hTih6b29tRmFjdG9yKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRab29tVmFsdWUodGhpcy5jYWxjdWxhdGVab29tVmFsdWUoem9vbUZhY3RvcikpO1xuICAgICAgdGhpcy5pbWcubmF0aXZlRWxlbWVudC53aWR0aCA9IHRoaXMuaW1nLm5hdGl2ZUVsZW1lbnQubmF0dXJhbFdpZHRoICogdGhpcy56b29tO1xuICAgICAgdGhpcy5pbml0QW5ub1BhZ2UodGhpcy5pbWcubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGVwWm9vbSh6b29tRmFjdG9yOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHpvb21GYWN0b3IpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFpvb21WYWx1ZSh0aGlzLmNhbGN1bGF0ZVpvb21WYWx1ZSh0aGlzLnpvb20sIHpvb21GYWN0b3IpKTtcbiAgICAgIHRoaXMuaW1nLm5hdGl2ZUVsZW1lbnQud2lkdGggPSB0aGlzLmltZy5uYXRpdmVFbGVtZW50Lm5hdHVyYWxXaWR0aCAqIHRoaXMuem9vbTtcbiAgICAgIHRoaXMuaW5pdEFubm9QYWdlKHRoaXMuaW1nLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWQoKSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgYS5ocmVmID0gdGhpcy51cmw7XG4gICAgYS5kb3dubG9hZCA9IHRoaXMuZG93bmxvYWRGaWxlTmFtZTtcbiAgICBhLmNsaWNrKCk7XG4gICAgYS5yZW1vdmUoKTtcbiAgfVxuXG4gIC8vIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIGEgd29yay1hcm91bmRcbiAgc2V0Wm9vbVZhbHVlKHpvb21WYWx1ZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy56b29tID0gem9vbVZhbHVlO1xuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnpvb21WYWx1ZVN1YmplY3QubmV4dCh6b29tVmFsdWUpO1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVpvb21WYWx1ZSh6b29tVmFsdWUsIGluY3JlbWVudCA9IDApIHtcbiAgICBjb25zdCBuZXdab29tVmFsdWUgPSB6b29tVmFsdWUgKyBpbmNyZW1lbnQ7XG4gICAgaWYgKG5ld1pvb21WYWx1ZSA+IDUpIHsgcmV0dXJuIDU7IH1cbiAgICBpZiAobmV3Wm9vbVZhbHVlIDwgMC4xKSB7IHJldHVybiAwLjE7IH1cbiAgICByZXR1cm4gK25ld1pvb21WYWx1ZS50b0ZpeGVkKDIpO1xuICB9XG5cbiAgb25Mb2FkRXJyb3IodXJsKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHRoaXMudmlld2VyVXRpbFNlcnZpY2UudmFsaWRhdGVGaWxlKHVybClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIG5leHQgPT4gbmV4dCxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMudmlld2VyRXhjZXB0aW9uID0gbmV3IFZpZXdlckV4Y2VwdGlvbihlcnJvci5uYW1lLFxuICAgICAgICAgICAgeyBodHRwUmVzcG9uc2VDb2RlOiBlcnJvci5zdGF0dXMsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBgQ291bGQgbm90IGxvYWQgdGhlIGltYWdlIFwiJHt0aGlzLnVybH1cImA7XG4gICAgdGhpcy5tZWRpYUxvYWRTdGF0dXMuZW1pdChSZXNwb25zZVR5cGUuRkFJTFVSRSk7XG4gICAgdGhpcy5pbWFnZVZpZXdlckV4Y2VwdGlvbi5lbWl0KHRoaXMudmlld2VyRXhjZXB0aW9uKTtcbiAgfVxuXG4gIG9uTG9hZChpbWc6IGFueSkge1xuICAgIHRoaXMubWVkaWFMb2FkU3RhdHVzLmVtaXQoUmVzcG9uc2VUeXBlLlNVQ0NFU1MpO1xuICAgIHRoaXMuaW5pdEFubm9QYWdlKGltZyk7XG4gIH1cblxuICBpbml0QW5ub1BhZ2UoaW1nOiBhbnkpIHtcbiAgICB0aGlzLmltYWdlSGVpZ2h0ID0gdGhpcy5yb3RhdGlvbiAlIDE4MCAhPT0gMCA/IGltZy5vZmZzZXRXaWR0aCA6IGltZy5vZmZzZXRIZWlnaHQ7XG4gICAgdGhpcy5pbWFnZVdpZHRoID0gdGhpcy5yb3RhdGlvbiAlIDE4MCAhPT0gMCA/IGltZy5vZmZzZXRIZWlnaHQgOiBpbWcub2Zmc2V0V2lkdGg7XG4gICAgdGhpcy5pbWFnZUxlZnQgPSB0aGlzLnJvdGF0aW9uICUgMTgwICE9PSAwID8gaW1nLm9mZnNldFRvcCA6IGltZy5vZmZzZXRMZWZ0O1xuICAgIHRoaXMuaW1hZ2VUb3AgPSB0aGlzLnJvdGF0aW9uICUgMTgwICE9PSAwID8gaW1nLm9mZnNldExlZnQgOiBpbWcub2Zmc2V0VG9wO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IFt7XG4gICAgICBkaXY6IHtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiB0aGlzLmltYWdlSGVpZ2h0LFxuICAgICAgICBzY3JvbGxXaWR0aDogdGhpcy5pbWFnZVdpZHRoLFxuICAgICAgICBvZmZzZXRMZWZ0OiB0aGlzLmltYWdlTGVmdCxcbiAgICAgIH0sXG4gICAgICBwYWdlTnVtYmVyOiAxLFxuICAgICAgc2NhbGU6IHRoaXMuem9vbSxcbiAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLFxuICAgICAgaWQ6IDFcbiAgICB9XTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IGZyb21Eb2N1bWVudC5BZGRQYWdlcyhwYXlsb2FkKSk7XG4gIH1cblxuICB0b2dnbGVDb21tZW50c1N1bW1hcnkoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnRvZ2dsZUNvbW1lbnRzU3VtbWFyeSghdGhpcy50b29sYmFyRXZlbnRzLnNob3dDb21tZW50U3VtbWFyeS5nZXRWYWx1ZSgpKTtcbiAgfVxufVxuIiwiPG12LWNvbW1lbnQtc2V0LWhlYWRlciBbbmdDbGFzc109XCJ7J3Nob3ctY29tbWVudHMtcGFuZWwnOiBzaG93Q29tbWVudHNQYW5lbH1cIlxuICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbW1lbnRTdW1tYXJ5XT1cInRvb2xiYXJCdXR0b25zLnNob3dDb21tZW50U3VtbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChzaG93Q29tbWVudFN1bW1hcnlEaWFsb2cpPVwidG9nZ2xlQ29tbWVudHNTdW1tYXJ5KClcIj5cbjwvbXYtY29tbWVudC1zZXQtaGVhZGVyPlxuPGRpdiBpZD1cInZpZXdlci13cmFwcGVyXCJcbiAgICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCB9XCJcbiAgICAgW25nQ2xhc3NdPVwieyAnZ3JhYk5EcmFnJzogZW5hYmxlR3JhYk5EcmFnIH1cIlxuICAgICAqbmdJZj1cInVybCAmJiAhZXJyb3JNZXNzYWdlXCI+XG4gIDxkaXYgI2ltYWdlQ29udGFpbmVyIGlkPVwiaW1hZ2UtY29udGFpbmVyXCJcbiAgICAgICBtdkdyYWJORHJhZyBbZHJhZ1hdPVwiaW1hZ2VDb250YWluZXJcIiBbZHJhZ0VuYWJsZWRdPVwiZW5hYmxlR3JhYk5EcmFnXCJcbiAgICAgICAoc2Nyb2xsKT1cIiRldmVudFwiXG4gICAgICAgW25nQ2xhc3NdPVwieyAnaW1hZ2UtY29udGFpbmVyJzogdHJ1ZSwgJ2Fubm90YXRpb25zJzogZW5hYmxlQW5ub3RhdGlvbnMsICdzaG93LWNvbW1lbnRzLXBhbmVsJzogc2hvd0NvbW1lbnRzUGFuZWwgfVwiPlxuICAgIDxpbWcgI2ltZ1xuICAgICAgICAgW3NyY109XCJ1cmxcIlxuICAgICAgICAgW25nQ2xhc3NdPVwiJ3JvdCcgKyByb3RhdGlvblwiXG4gICAgICAgICAoZXJyb3IpPVwib25Mb2FkRXJyb3IodXJsKVwiXG4gICAgICAgICAobG9hZCk9XCJvbkxvYWQoaW1nKVwiLz5cbiAgICA8bXYtcmVkYWN0aW9ucyAqbmdJZj1cIih0b29sYmFyRXZlbnRzLnJlZGFjdGlvbk1vZGUgfCBhc3luYykgPT09IHRydWU7ZWxzZSBhbm5vdGF0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgIFt6b29tXT1cInpvb21cIlxuICAgICAgICAgICAgICAgICAgIFtyb3RhdGVdPVwicm90YXRpb25cIlxuICAgID48L212LXJlZGFjdGlvbnM+XG4gICAgPG5nLXRlbXBsYXRlICNhbm5vdGF0aW9uVGVtcGxhdGU+XG4gICAgICA8bXYtbWV0YWRhdGEtbGF5ZXIgKm5nSWY9XCJlbmFibGVBbm5vdGF0aW9ucyAmJiBhbm5vdGF0aW9uU2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbem9vbV09XCJ6b29tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm90YXRlXT1cInJvdGF0aW9uXCI+XG4gICAgICA8L212LW1ldGFkYXRhLWxheWVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gICAgPG12LWNvbW1lbnQtc2V0IFtjb250ZW50U2Nyb2xsVG9wXT1cImltYWdlQ29udGFpbmVyLnNjcm9sbFRvcFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlQW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvblNldCAmJiAodG9vbGJhckV2ZW50cy5yZWRhY3Rpb25Nb2RlIHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Fubm90YXRpb25TZXRdPVwiYW5ub3RhdGlvblNldFwiXG4gICAgICAgICAgICAgICAgICAgIFt6b29tXT1cInpvb21cIlxuICAgICAgICAgICAgICAgICAgICBbcm90YXRlXT1cInJvdGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJpbWFnZUhlaWdodFwiPlxuICAgIDwvbXYtY29tbWVudC1zZXQ+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,58 @@
1
+ import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
2
+ import { ResponseType } from '../viewer-exception.model';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../toolbar/toolbar-event.service";
5
+ import * as i2 from "@angular/common";
6
+ export class MultimediaPlayerComponent {
7
+ constructor(toolbarEvents) {
8
+ this.toolbarEvents = toolbarEvents;
9
+ this.loadStatus = new EventEmitter();
10
+ this.playbackMsg = 'loading';
11
+ }
12
+ ngOnInit() {
13
+ this.subscription = this.toolbarEvents.downloadSubject
14
+ .subscribe(() => this.downloadLink.nativeElement.click());
15
+ this.loadStatus.emit(ResponseType.SUCCESS);
16
+ }
17
+ ngOnChanges(changes) {
18
+ if (changes.url) {
19
+ this.reloadVideo();
20
+ }
21
+ }
22
+ ngOnDestroy() {
23
+ this.subscription.unsubscribe();
24
+ }
25
+ reloadVideo() {
26
+ if (this.videoPlayer) {
27
+ this.playbackMsg = 'loading';
28
+ this.videoPlayer.nativeElement.load();
29
+ }
30
+ }
31
+ onSuccess() {
32
+ this.playbackMsg = 'success';
33
+ }
34
+ onError() {
35
+ this.playbackMsg = 'error';
36
+ }
37
+ }
38
+ /** @nocollapse */ MultimediaPlayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultimediaPlayerComponent, deps: [{ token: i1.ToolbarEventService }], target: i0.ɵɵFactoryTarget.Component });
39
+ /** @nocollapse */ MultimediaPlayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MultimediaPlayerComponent, selector: "mv-multimedia-player", inputs: { url: "url", downloadFileName: "downloadFileName", multimediaOn: "multimediaOn" }, outputs: { loadStatus: "loadStatus" }, viewQueries: [{ propertyName: "downloadLink", first: true, predicate: ["downloadLink"], descendants: true }, { propertyName: "videoPlayer", first: true, predicate: ["videoPlayer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"govuk-width-container\">\n <div class=\"govuk-notification-banner__content\">\n <p>\n <span *ngIf=\"multimediaOn && playbackMsg === 'loading'\">Loading multimedia content ... </span>\n <span *ngIf=\"!multimediaOn\">Multimedia playback is not enabled, </span>\n <span *ngIf=\"multimediaOn && playbackMsg === 'success'\">Use the player to play to the file or </span>\n <span *ngIf=\"multimediaOn && playbackMsg === 'error'\">Mime type not supported. </span>\n <a *ngIf=\"!multimediaOn || playbackMsg !== 'loading'\" #downloadLink\n [href]=\"url\" [download]=\"downloadFileName\">Click here to download</a>\n </p>\n <video #videoPlayer *ngIf=\"multimediaOn\"\n width=\"100%\" height=\"100%\" preload=\"auto\" (canplay)=\"onSuccess()\" controls>\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/mp4\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/mp4; codecs='avc1, av01, hvc1, hev1, mp4v, mp4a.40.2, opus'\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/ogg\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/ogg; codecs='theora, vp8, vp9, flac, opus, vorbis'\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/webm\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/webm; codecs='vp8, vp9, vorbis, opus'\">\n </video>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MultimediaPlayerComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'mv-multimedia-player', template: "<div class=\"govuk-width-container\">\n <div class=\"govuk-notification-banner__content\">\n <p>\n <span *ngIf=\"multimediaOn && playbackMsg === 'loading'\">Loading multimedia content ... </span>\n <span *ngIf=\"!multimediaOn\">Multimedia playback is not enabled, </span>\n <span *ngIf=\"multimediaOn && playbackMsg === 'success'\">Use the player to play to the file or </span>\n <span *ngIf=\"multimediaOn && playbackMsg === 'error'\">Mime type not supported. </span>\n <a *ngIf=\"!multimediaOn || playbackMsg !== 'loading'\" #downloadLink\n [href]=\"url\" [download]=\"downloadFileName\">Click here to download</a>\n </p>\n <video #videoPlayer *ngIf=\"multimediaOn\"\n width=\"100%\" height=\"100%\" preload=\"auto\" (canplay)=\"onSuccess()\" controls>\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/mp4\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/mp4; codecs='avc1, av01, hvc1, hev1, mp4v, mp4a.40.2, opus'\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/ogg\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/ogg; codecs='theora, vp8, vp9, flac, opus, vorbis'\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/webm\">\n <source (error)=\"onError()\" [src]=\"url\" type=\"video/webm; codecs='vp8, vp9, vorbis, opus'\">\n </video>\n </div>\n</div>\n" }]
43
+ }], ctorParameters: function () { return [{ type: i1.ToolbarEventService }]; }, propDecorators: { url: [{
44
+ type: Input
45
+ }], downloadFileName: [{
46
+ type: Input
47
+ }], multimediaOn: [{
48
+ type: Input
49
+ }], loadStatus: [{
50
+ type: Output
51
+ }], downloadLink: [{
52
+ type: ViewChild,
53
+ args: ['downloadLink', { static: false }]
54
+ }], videoPlayer: [{
55
+ type: ViewChild,
56
+ args: ['videoPlayer', { static: false }]
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGltZWRpYS1wbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdmlld2Vycy9tdWx0aW1lZGlhLXBsYXllci9tdWx0aW1lZGlhLXBsYXllci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi92aWV3ZXJzL211bHRpbWVkaWEtcGxheWVyL211bHRpbWVkaWEtcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUdiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQU16RCxNQUFNLE9BQU8seUJBQXlCO0lBZXBDLFlBQ2tCLGFBQWtDO1FBQWxDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQVYxQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFLeEQsZ0JBQVcsR0FBRyxTQUFTLENBQUM7SUFNckIsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTthQUNuRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDN0IsQ0FBQzs7eUlBaERVLHlCQUF5Qjs2SEFBekIseUJBQXlCLCtaQ3BCdEMsKzNDQXFCQTsyRkREYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0Usc0JBQXNCOzBHQUt2QixHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFcUMsWUFBWTtzQkFBdkQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUNDLFdBQVc7c0JBQXJELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9vbGJhci90b29sYmFyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXNwb25zZVR5cGUgfSBmcm9tICcuLi92aWV3ZXItZXhjZXB0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtbXVsdGltZWRpYS1wbGF5ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGltZWRpYS1wbGF5ZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpbWVkaWFQbGF5ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSB1cmw6IHN0cmluZztcbiAgQElucHV0KCkgZG93bmxvYWRGaWxlTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBtdWx0aW1lZGlhT246IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIGxvYWRTdGF0dXMgPSBuZXcgRXZlbnRFbWl0dGVyPFJlc3BvbnNlVHlwZT4oKTtcblxuICBAVmlld0NoaWxkKCdkb3dubG9hZExpbmsnLCB7c3RhdGljOiBmYWxzZX0pIGRvd25sb2FkTGluazogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndmlkZW9QbGF5ZXInLCB7c3RhdGljOiBmYWxzZX0pIHZpZGVvUGxheWVyOiBFbGVtZW50UmVmO1xuXG4gIHBsYXliYWNrTXNnID0gJ2xvYWRpbmcnO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRvb2xiYXJFdmVudHMuZG93bmxvYWRTdWJqZWN0XG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuZG93bmxvYWRMaW5rLm5hdGl2ZUVsZW1lbnQuY2xpY2soKSk7XG4gICAgdGhpcy5sb2FkU3RhdHVzLmVtaXQoUmVzcG9uc2VUeXBlLlNVQ0NFU1MpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy51cmwpIHtcbiAgICAgIHRoaXMucmVsb2FkVmlkZW8oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVsb2FkVmlkZW8oKSB7XG4gICAgaWYgKHRoaXMudmlkZW9QbGF5ZXIpIHtcbiAgICAgIHRoaXMucGxheWJhY2tNc2cgPSAnbG9hZGluZyc7XG4gICAgICB0aGlzLnZpZGVvUGxheWVyLm5hdGl2ZUVsZW1lbnQubG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VjY2VzcygpIHtcbiAgICB0aGlzLnBsYXliYWNrTXNnID0gJ3N1Y2Nlc3MnO1xuICB9XG5cbiAgb25FcnJvcigpIHtcbiAgICB0aGlzLnBsYXliYWNrTXNnID0gJ2Vycm9yJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstbm90aWZpY2F0aW9uLWJhbm5lcl9fY29udGVudFwiPlxuICAgIDxwPlxuICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aW1lZGlhT24gJiYgcGxheWJhY2tNc2cgPT09ICdsb2FkaW5nJ1wiPkxvYWRpbmcgbXVsdGltZWRpYSBjb250ZW50IC4uLiA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFtdWx0aW1lZGlhT25cIj5NdWx0aW1lZGlhIHBsYXliYWNrIGlzIG5vdCBlbmFibGVkLCA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIm11bHRpbWVkaWFPbiAmJiBwbGF5YmFja01zZyA9PT0gJ3N1Y2Nlc3MnXCI+VXNlIHRoZSBwbGF5ZXIgdG8gcGxheSB0byB0aGUgZmlsZSBvciA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIm11bHRpbWVkaWFPbiAmJiBwbGF5YmFja01zZyA9PT0gJ2Vycm9yJ1wiPk1pbWUgdHlwZSBub3Qgc3VwcG9ydGVkLiA8L3NwYW4+XG4gICAgICA8YSAqbmdJZj1cIiFtdWx0aW1lZGlhT24gfHwgcGxheWJhY2tNc2cgIT09ICdsb2FkaW5nJ1wiICNkb3dubG9hZExpbmtcbiAgICAgICAgIFtocmVmXT1cInVybFwiIFtkb3dubG9hZF09XCJkb3dubG9hZEZpbGVOYW1lXCI+Q2xpY2sgaGVyZSB0byBkb3dubG9hZDwvYT5cbiAgICA8L3A+XG4gICAgPHZpZGVvICN2aWRlb1BsYXllciAqbmdJZj1cIm11bHRpbWVkaWFPblwiXG4gICAgICAgICAgIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBwcmVsb2FkPVwiYXV0b1wiIChjYW5wbGF5KT1cIm9uU3VjY2VzcygpXCIgY29udHJvbHM+XG4gICAgICA8c291cmNlIChlcnJvcik9XCJvbkVycm9yKClcIiBbc3JjXT1cInVybFwiIHR5cGU9XCJ2aWRlby9tcDRcIj5cbiAgICAgIDxzb3VyY2UgKGVycm9yKT1cIm9uRXJyb3IoKVwiIFtzcmNdPVwidXJsXCIgdHlwZT1cInZpZGVvL21wNDsgY29kZWNzPSdhdmMxLCBhdjAxLCBodmMxLCBoZXYxLCBtcDR2LCBtcDRhLjQwLjIsIG9wdXMnXCI+XG4gICAgICA8c291cmNlIChlcnJvcik9XCJvbkVycm9yKClcIiBbc3JjXT1cInVybFwiIHR5cGU9XCJ2aWRlby9vZ2dcIj5cbiAgICAgIDxzb3VyY2UgKGVycm9yKT1cIm9uRXJyb3IoKVwiIFtzcmNdPVwidXJsXCIgdHlwZT1cInZpZGVvL29nZzsgY29kZWNzPSd0aGVvcmEsIHZwOCwgdnA5LCBmbGFjLCBvcHVzLCB2b3JiaXMnXCI+XG4gICAgICA8c291cmNlIChlcnJvcik9XCJvbkVycm9yKClcIiBbc3JjXT1cInVybFwiIHR5cGU9XCJ2aWRlby93ZWJtXCI+XG4gICAgICA8c291cmNlIChlcnJvcik9XCJvbkVycm9yKClcIiBbc3JjXT1cInVybFwiIHR5cGU9XCJ2aWRlby93ZWJtOyBjb2RlY3M9J3ZwOCwgdnA5LCB2b3JiaXMsIG9wdXMnXCI+XG4gICAgPC92aWRlbz5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,193 @@
1
+ import * as pdfjsLib from 'pdfjs-dist';
2
+ import 'pdfjs-dist/build/pdf.worker';
3
+ pdfjsLib.GlobalWorkerOptions.workerSrc = '/assets/build/pdf.worker.min.js';
4
+ /**
5
+ * Values of the state field returned by the find events
6
+ */
7
+ var FindState;
8
+ (function (FindState) {
9
+ FindState[FindState["FOUND"] = 0] = "FOUND";
10
+ FindState[FindState["NOT_FOUND"] = 1] = "NOT_FOUND";
11
+ FindState[FindState["WRAPPED"] = 2] = "WRAPPED";
12
+ FindState[FindState["PENDING"] = 3] = "PENDING";
13
+ })(FindState || (FindState = {}));
14
+ export class PdfJsWrapper {
15
+ constructor(pdfViewer, downloadManager, toolbarEvents, documentLoadInit, documentLoadProgress, documentLoaded, outlineLoaded, documentLoadFailed, pageRendered, positionUpdated) {
16
+ this.pdfViewer = pdfViewer;
17
+ this.downloadManager = downloadManager;
18
+ this.toolbarEvents = toolbarEvents;
19
+ this.documentLoadInit = documentLoadInit;
20
+ this.documentLoadProgress = documentLoadProgress;
21
+ this.documentLoaded = documentLoaded;
22
+ this.outlineLoaded = outlineLoaded;
23
+ this.documentLoadFailed = documentLoadFailed;
24
+ this.pageRendered = pageRendered;
25
+ this.positionUpdated = positionUpdated;
26
+ this.pdfViewer.eventBus.on('updateviewarea', e => positionUpdated.next(e));
27
+ this.pdfViewer.eventBus.on('pagechanging', e => this.toolbarEvents.setCurrentPageInputValueSubject.next(e.pageNumber));
28
+ this.pdfViewer.eventBus.on('pagesinit', () => this.pdfViewer.currentScaleValue = '1');
29
+ this.pdfViewer.eventBus.on('pagerendered', e => { }); // not used left for future convenience
30
+ this.pdfViewer.eventBus.on('pagesloaded', (e) => this.emitDocumentInfo(e));
31
+ this.pdfViewer.eventBus.on('scalechanging', (e) => this.emitDocumentInfo(e));
32
+ this.pdfViewer.eventBus.on('rotationchanging', (e) => this.emitDocumentInfo(e));
33
+ this.pdfViewer.eventBus.on('updatefindcontrolstate', event => {
34
+ this.sendSearchDetails(event);
35
+ });
36
+ this.pdfViewer.eventBus.on('updatefindmatchescount', event => {
37
+ this.toolbarEvents.searchResultsCountSubject.next(event.matchesCount);
38
+ });
39
+ this.zoomValue = 1;
40
+ }
41
+ sendSearchDetails(event) {
42
+ if (event.state !== FindState.PENDING) {
43
+ this.toolbarEvents.searchResultsCountSubject.next(event.matchesCount);
44
+ if (event?.source?.selected?.pageIdx !== -1 && event.matchesCount.total > 0) {
45
+ this.toolbarEvents.redactionSerachSubject.next({
46
+ page: event?.source?.selected?.pageIdx,
47
+ matchedIndex: event?.source?.selected?.matchIdx,
48
+ matchesCount: event.matchesCount.total
49
+ });
50
+ }
51
+ }
52
+ }
53
+ emitDocumentInfo(e) {
54
+ const allPages = [...this.pdfViewer._pages].map(page => {
55
+ return {
56
+ div: page.div,
57
+ scale: page.scale,
58
+ rotation: page.rotation,
59
+ id: page.id,
60
+ viewportScale: page.viewport.scale
61
+ };
62
+ });
63
+ this.pageRendered.next(allPages);
64
+ }
65
+ async loadDocument(documentUrl) {
66
+ const loadingTask = this.createLoadingTask(documentUrl);
67
+ loadingTask.onProgress = ({ loaded, total }) => {
68
+ this.documentLoadProgress.next({ loaded, total });
69
+ };
70
+ this.documentLoadInit.next(documentUrl);
71
+ try {
72
+ const pdfDocument = await loadingTask.promise;
73
+ this.documentLoaded.next(pdfDocument);
74
+ this.toolbarEvents.pageCountSubject.next(pdfDocument.numPages);
75
+ this.pdfViewer.setDocument(pdfDocument);
76
+ this.pdfViewer.linkService.setDocument(pdfDocument, null);
77
+ const outline = await pdfDocument.getOutline();
78
+ if (outline) {
79
+ await this.setOutlinePageNumbers(pdfDocument, outline);
80
+ }
81
+ this.documentOutline = outline;
82
+ this.outlineLoaded.next(this.documentOutline);
83
+ const pdfMetaData = await pdfDocument.getMetadata();
84
+ this.setCurrentPDFTitle(pdfMetaData.info.Title);
85
+ }
86
+ catch (e) {
87
+ this.documentLoadFailed.next(e);
88
+ }
89
+ }
90
+ createLoadingTask(documentUrl) {
91
+ return pdfjsLib.getDocument({
92
+ url: documentUrl,
93
+ cMapUrl: 'assets/minified/cmaps',
94
+ cMapPacked: true,
95
+ withCredentials: true
96
+ });
97
+ }
98
+ async setOutlinePageNumbers(pdfDocument, outlineArray) {
99
+ outlineArray.forEach(async (outline) => {
100
+ await this.setNestedOutlinePageNumbers(pdfDocument, outline);
101
+ });
102
+ }
103
+ async setNestedOutlinePageNumbers(pdfDocument, outline) {
104
+ outline.pageNumber = await this.getOutlinePageNumber(pdfDocument, outline);
105
+ outline.items.forEach(async (outlineItem) => {
106
+ outlineItem.pageNumber = await this.getOutlinePageNumber(pdfDocument, outlineItem);
107
+ this.setNestedOutlinePageNumbers(pdfDocument, outlineItem);
108
+ });
109
+ }
110
+ async getOutlinePageNumber(pdfDocument, outline) {
111
+ const dest = outline.dest;
112
+ const pageIndex = await pdfDocument.getPageIndex(dest[0]);
113
+ return Number(pageIndex) + 1;
114
+ }
115
+ downloadFile(url, filename) {
116
+ this.downloadManager.downloadUrl(url, filename);
117
+ }
118
+ setPageNumber(pageNumber) {
119
+ this.pdfViewer.currentPageNumber = pageNumber;
120
+ }
121
+ getPageNumber() {
122
+ return this.pdfViewer.currentPageNumber;
123
+ }
124
+ changePageNumber(numPages) {
125
+ this.pdfViewer.currentPageNumber += numPages;
126
+ }
127
+ search(operation) {
128
+ const command = operation.reset ? 'find' : 'findagain';
129
+ this.pdfViewer.findController.executeCommand(command, {
130
+ query: operation.searchTerm,
131
+ phraseSearch: true,
132
+ caseSensitive: operation.matchCase,
133
+ entireWord: operation.wholeWord,
134
+ highlightAll: operation.highlightAll,
135
+ findPrevious: operation.previous,
136
+ });
137
+ }
138
+ clearSearch() {
139
+ this.pdfViewer.eventBus.dispatch('findbarclose');
140
+ }
141
+ navigateTo(destination) {
142
+ if (destination instanceof Object) {
143
+ if (!destination[1].name.includes('XYZ')) {
144
+ destination[1] = { name: 'XYZ' };
145
+ destination[2] = destination[2] || null;
146
+ destination[3] = destination[3] || null;
147
+ }
148
+ destination[4] = this.zoomValue;
149
+ }
150
+ this.pdfViewer.linkService.navigateTo(destination);
151
+ }
152
+ setZoom(zoomValue) {
153
+ this.pdfViewer.currentScaleValue = this.getZoomValue(zoomValue);
154
+ this.zoomValue = this.pdfViewer.currentScaleValue;
155
+ this.toolbarEvents.zoomValueSubject.next(this.pdfViewer.currentScaleValue);
156
+ }
157
+ stepZoom(zoomValue) {
158
+ this.pdfViewer.currentScaleValue = +this.getZoomValue((+this.pdfViewer.currentScaleValue) + zoomValue);
159
+ this.zoomValue = this.pdfViewer.currentScaleValue;
160
+ this.toolbarEvents.zoomValueSubject.next(this.pdfViewer.currentScaleValue);
161
+ }
162
+ getZoomValue(zoomValue) {
163
+ if (isNaN(zoomValue)) {
164
+ return this.zoomValue;
165
+ }
166
+ if (zoomValue > 5) {
167
+ return 5;
168
+ }
169
+ if (zoomValue < 0.1) {
170
+ return 0.1;
171
+ }
172
+ return +zoomValue.toFixed(2);
173
+ }
174
+ rotate(rotation) {
175
+ return this.pdfViewer.pagesRotation = (this.pdfViewer.pagesRotation + rotation) % 360;
176
+ }
177
+ resetRotation(rotation) {
178
+ return this.pdfViewer.pagesRotation = rotation;
179
+ }
180
+ getNormalisedPagesRotation() {
181
+ return this.pdfViewer.pagesRotation;
182
+ }
183
+ getCurrentPDFZoomValue() {
184
+ return this.pdfViewer.currentScaleValue;
185
+ }
186
+ setCurrentPDFTitle(title) {
187
+ this.documentTitle = title;
188
+ }
189
+ getCurrentPDFTitle() {
190
+ return this.documentTitle;
191
+ }
192
+ }
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWpzLXdyYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi92aWV3ZXJzL3BkZi12aWV3ZXIvcGRmLWpzL3BkZi1qcy13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxRQUFRLE1BQU0sWUFBWSxDQUFDO0FBRXZDLE9BQU8sNkJBQTZCLENBQUM7QUFNckMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxpQ0FBaUMsQ0FBQztBQUUzRTs7R0FFRztBQUNILElBQUssU0FLSjtBQUxELFdBQUssU0FBUztJQUNaLDJDQUFTLENBQUE7SUFDVCxtREFBYSxDQUFBO0lBQ2IsK0NBQVcsQ0FBQTtJQUNYLCtDQUFXLENBQUE7QUFDYixDQUFDLEVBTEksU0FBUyxLQUFULFNBQVMsUUFLYjtBQUVELE1BQU0sT0FBTyxZQUFZO0lBTXZCLFlBQ21CLFNBQW9CLEVBQ3BCLGVBQWdDLEVBQ2hDLGFBQWtDLEVBQ25DLGdCQUFpQyxFQUNqQyxvQkFBbUQsRUFDbkQsY0FBNEIsRUFDNUIsYUFBK0IsRUFDL0Isa0JBQWtDLEVBQ2xDLFlBQWtDLEVBQ2xDLGVBQW1EO1FBVGxELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUNuQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBK0I7UUFDbkQsbUJBQWMsR0FBZCxjQUFjLENBQWM7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBZ0I7UUFDbEMsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFvQztRQUVuRSxJQUFJLENBQUMsU0FBUyxDQUFD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QyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUM7SUFDMUMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQWE7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVkYWN0aW9uU2VhcmNoIH0gZnJvbSAnLi8uLi8uLi8uLi90b29sYmFyL3JlZGFjdGlvbi1zZWFyY2gtYmFyL3JlZGFjdGlvbi1zZWFyY2gubW9kZWwnO1xuaW1wb3J0ICogYXMgcGRmanNMaWIgZnJvbSAncGRmanMtZGlzdCc7XG5pbXBvcnQgeyBEb3dubG9hZE1hbmFnZXIsIFBERlZpZXdlciB9IGZyb20gJ3BkZmpzLWRpc3Qvd2ViL3BkZl92aWV3ZXInO1xuaW1wb3J0ICdwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VhcmNoT3BlcmF0aW9uLCBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdG9vbGJhci90b29sYmFyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3V0bGluZSB9IGZyb20gJy4uL3NpZGUtYmFyL291dGxpbmUtaXRlbS9vdXRsaW5lLm1vZGVsJztcbmltcG9ydCB7IFBkZlBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvZG9jdW1lbnQucmVkdWNlcic7XG5cbnBkZmpzTGliLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjID0gJy9hc3NldHMvYnVpbGQvcGRmLndvcmtlci5taW4uanMnO1xuXG4vKipcbiAqIFZhbHVlcyBvZiB0aGUgc3RhdGUgZmllbGQgcmV0dXJuZWQgYnkgdGhlIGZpbmQgZXZlbnRzXG4gKi9cbmVudW0gRmluZFN0YXRlIHtcbiAgRk9VTkQgPSAwLFxuICBOT1RfRk9VTkQgPSAxLFxuICBXUkFQUEVEID0gMixcbiAgUEVORElORyA9IDMsXG59XG5cbmV4cG9ydCBjbGFzcyBQZGZKc1dyYXBwZXIge1xuXG4gIHByaXZhdGUgem9vbVZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgZG9jdW1lbnRUaXRsZTogc3RyaW5nO1xuICBwcml2YXRlIGRvY3VtZW50T3V0bGluZTogT3V0bGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBkZlZpZXdlcjogUERGVmlld2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG93bmxvYWRNYW5hZ2VyOiBEb3dubG9hZE1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b29sYmFyRXZlbnRzOiBUb29sYmFyRXZlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBkb2N1bWVudExvYWRJbml0OiBTdWJqZWN0PHN0cmluZz4sXG4gICAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50TG9hZFByb2dyZXNzOiBTdWJqZWN0PERvY3VtZW50TG9hZFByb2dyZXNzPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRMb2FkZWQ6IFN1YmplY3Q8YW55PixcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0bGluZUxvYWRlZDogU3ViamVjdDxPdXRsaW5lPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRMb2FkRmFpbGVkOiBTdWJqZWN0PEVycm9yPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFnZVJlbmRlcmVkOiBTdWJqZWN0PFBhZ2VFdmVudFtdPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb25VcGRhdGVkOiBTdWJqZWN0PHsgbG9jYXRpb246IFBkZlBvc2l0aW9uIH0+XG4gICkge1xuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLm9uKCd1cGRhdGV2aWV3YXJlYScsIGUgPT4gcG9zaXRpb25VcGRhdGVkLm5leHQoZSkpO1xuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLm9uKCdwYWdlY2hhbmdpbmcnLCBlID0+IHRoaXMudG9vbGJhckV2ZW50cy5zZXRDdXJyZW50UGFnZUlucHV0VmFsdWVTdWJqZWN0Lm5leHQoZS5wYWdlTnVtYmVyKSk7XG4gICAgdGhpcy5wZGZWaWV3ZXIuZXZlbnRCdXMub24oJ3BhZ2VzaW5pdCcsICgpID0+IHRoaXMucGRmVmlld2VyLmN1cnJlbnRTY2FsZVZhbHVlID0gJzEnKTtcblxuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLm9uKCdwYWdlcmVuZGVyZWQnLCBlID0+IHsgfSk7IC8vIG5vdCB1c2VkIGxlZnQgZm9yIGZ1dHVyZSBjb252ZW5pZW5jZVxuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLm9uKCdwYWdlc2xvYWRlZCcsIChlKSA9PiB0aGlzLmVtaXREb2N1bWVudEluZm8oZSkpO1xuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLm9uKCdzY2FsZWNoYW5naW5nJywgKGUpID0+IHRoaXMuZW1pdERvY3VtZW50SW5mbyhlKSk7XG4gICAgdGhpcy5wZGZWaWV3ZXIuZXZlbnRCdXMub24oJ3JvdGF0aW9uY2hhbmdpbmcnLCAoZSkgPT4gdGhpcy5lbWl0RG9jdW1lbnRJbmZvKGUpKTtcblxuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLm9uKCd1cGRhdGVmaW5kY29udHJvbHN0YXRlJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5zZW5kU2VhcmNoRGV0YWlscyhldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5wZGZWaWV3ZXIuZXZlbnRCdXMub24oJ3VwZGF0ZWZpbmRtYXRjaGVzY291bnQnLCBldmVudCA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoUmVzdWx0c0NvdW50U3ViamVjdC5uZXh0KGV2ZW50Lm1hdGNoZXNDb3VudCk7XG4gICAgfSk7XG4gICAgdGhpcy56b29tVmFsdWUgPSAxO1xuICB9XG5cbiAgc2VuZFNlYXJjaERldGFpbHMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudC5zdGF0ZSAhPT0gRmluZFN0YXRlLlBFTkRJTkcpIHtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hSZXN1bHRzQ291bnRTdWJqZWN0Lm5leHQoZXZlbnQubWF0Y2hlc0NvdW50KTtcbiAgICAgIGlmIChldmVudD8uc291cmNlPy5zZWxlY3RlZD8ucGFnZUlkeCAhPT0gLTEgJiYgZXZlbnQubWF0Y2hlc0NvdW50LnRvdGFsID4gMCkge1xuICAgICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0aW9uU2VyYWNoU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICBwYWdlOiBldmVudD8uc291cmNlPy5zZWxlY3RlZD8ucGFnZUlkeCxcbiAgICAgICAgICBtYXRjaGVkSW5kZXg6IGV2ZW50Py5zb3VyY2U/LnNlbGVjdGVkPy5tYXRjaElkeCxcbiAgICAgICAgICBtYXRjaGVzQ291bnQ6IGV2ZW50Lm1hdGNoZXNDb3VudC50b3RhbFxuICAgICAgICB9IGFzIFJlZGFjdGlvblNlYXJjaFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdERvY3VtZW50SW5mbyhlKSB7XG4gICAgY29uc3QgYWxsUGFnZXM6IFBhZ2VFdmVudFtdID0gWy4uLnRoaXMucGRmVmlld2VyLl9wYWdlc10ubWFwKHBhZ2UgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBwYWdlLmRpdixcbiAgICAgICAgc2NhbGU6IHBhZ2Uuc2NhbGUsXG4gICAgICAgIHJvdGF0aW9uOiBwYWdlLnJvdGF0aW9uLFxuICAgICAgICBpZDogcGFnZS5pZCxcbiAgICAgICAgdmlld3BvcnRTY2FsZTogcGFnZS52aWV3cG9ydC5zY2FsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnBhZ2VSZW5kZXJlZC5uZXh0KGFsbFBhZ2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkRG9jdW1lbnQoZG9jdW1lbnRVcmw6IHN0cmluZykge1xuICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gdGhpcy5jcmVhdGVMb2FkaW5nVGFzayhkb2N1bWVudFVybCk7XG5cbiAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzID0gKHsgbG9hZGVkLCB0b3RhbCB9KSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50TG9hZFByb2dyZXNzLm5leHQoeyBsb2FkZWQsIHRvdGFsIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLmRvY3VtZW50TG9hZEluaXQubmV4dChkb2N1bWVudFVybCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGRmRG9jdW1lbnQgPSBhd2FpdCBsb2FkaW5nVGFzay5wcm9taXNlO1xuICAgICAgdGhpcy5kb2N1bWVudExvYWRlZC5uZXh0KHBkZkRvY3VtZW50KTtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5wYWdlQ291bnRTdWJqZWN0Lm5leHQocGRmRG9jdW1lbnQubnVtUGFnZXMpO1xuXG4gICAgICB0aGlzLnBkZlZpZXdlci5zZXREb2N1bWVudChwZGZEb2N1bWVudCk7XG4gICAgICB0aGlzLnBkZlZpZXdlci5saW5rU2VydmljZS5zZXREb2N1bWVudChwZGZEb2N1bWVudCwgbnVsbCk7XG5cbiAgICAgIGNvbnN0IG91dGxpbmUgPSBhd2FpdCBwZGZEb2N1bWVudC5nZXRPdXRsaW5lKCk7XG5cbiAgICAgIGlmIChvdXRsaW5lKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0T3V0bGluZVBhZ2VOdW1iZXJzKHBkZkRvY3VtZW50LCBvdXRsaW5lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kb2N1bWVudE91dGxpbmUgPSBvdXRsaW5lO1xuICAgICAgdGhpcy5vdXRsaW5lTG9hZGVkLm5leHQodGhpcy5kb2N1bWVudE91dGxpbmUpO1xuICAgICAgY29uc3QgcGRmTWV0YURhdGEgPSBhd2FpdCBwZGZEb2N1bWVudC5nZXRNZXRhZGF0YSgpO1xuICAgICAgdGhpcy5zZXRDdXJyZW50UERGVGl0bGUocGRmTWV0YURhdGEuaW5mby5UaXRsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5kb2N1bWVudExvYWRGYWlsZWQubmV4dChlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvYWRpbmdUYXNrKGRvY3VtZW50VXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGRmanNMaWIuZ2V0RG9jdW1lbnQoe1xuICAgICAgdXJsOiBkb2N1bWVudFVybCxcbiAgICAgIGNNYXBVcmw6ICdhc3NldHMvbWluaWZpZWQvY21hcHMnLFxuICAgICAgY01hcFBhY2tlZDogdHJ1ZSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRPdXRsaW5lUGFnZU51bWJlcnMocGRmRG9jdW1lbnQsIG91dGxpbmVBcnJheTogT3V0bGluZVtdKSB7XG4gICAgb3V0bGluZUFycmF5LmZvckVhY2goYXN5bmMgKG91dGxpbmU6IE91dGxpbmUpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0TmVzdGVkT3V0bGluZVBhZ2VOdW1iZXJzKHBkZkRvY3VtZW50LCBvdXRsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0TmVzdGVkT3V0bGluZVBhZ2VOdW1iZXJzKHBkZkRvY3VtZW50LCBvdXRsaW5lOiBPdXRsaW5lKSB7XG4gICAgb3V0bGluZS5wYWdlTnVtYmVyID0gYXdhaXQgdGhpcy5nZXRPdXRsaW5lUGFnZU51bWJlcihwZGZEb2N1bWVudCwgb3V0bGluZSk7XG4gICAgb3V0bGluZS5pdGVtcy5mb3JFYWNoKGFzeW5jIChvdXRsaW5lSXRlbTogT3V0bGluZSkgPT4ge1xuICAgICAgb3V0bGluZUl0ZW0ucGFnZU51bWJlciA9IGF3YWl0IHRoaXMuZ2V0T3V0bGluZVBhZ2VOdW1iZXIocGRmRG9jdW1lbnQsIG91dGxpbmVJdGVtKTtcbiAgICAgIHRoaXMuc2V0TmVzdGVkT3V0bGluZVBhZ2VOdW1iZXJzKHBkZkRvY3VtZW50LCBvdXRsaW5lSXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE91dGxpbmVQYWdlTnVtYmVyKHBkZkRvY3VtZW50LCBvdXRsaW5lOiBPdXRsaW5lKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBkZXN0ID0gb3V0bGluZS5kZXN0O1xuICAgIGNvbnN0IHBhZ2VJbmRleCA9IGF3YWl0IHBkZkRvY3VtZW50LmdldFBhZ2VJbmRleChkZXN0WzBdKTtcbiAgICByZXR1cm4gTnVtYmVyKHBhZ2VJbmRleCkgKyAxO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkRmlsZSh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkVXJsKHVybCwgZmlsZW5hbWUpO1xuICB9XG5cbiAgcHVibGljIHNldFBhZ2VOdW1iZXIocGFnZU51bWJlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wZGZWaWV3ZXIuY3VycmVudFBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyO1xuICB9XG4gIHB1YmxpYyBnZXRQYWdlTnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyO1xuICB9XG4gIHB1YmxpYyBjaGFuZ2VQYWdlTnVtYmVyKG51bVBhZ2VzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBkZlZpZXdlci5jdXJyZW50UGFnZU51bWJlciArPSBudW1QYWdlcztcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2gob3BlcmF0aW9uOiBTZWFyY2hPcGVyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjb21tYW5kID0gb3BlcmF0aW9uLnJlc2V0ID8gJ2ZpbmQnIDogJ2ZpbmRhZ2Fpbic7XG5cbiAgICB0aGlzLnBkZlZpZXdlci5maW5kQ29udHJvbGxlci5leGVjdXRlQ29tbWFuZChjb21tYW5kLCB7XG4gICAgICBxdWVyeTogb3BlcmF0aW9uLnNlYXJjaFRlcm0sXG4gICAgICBwaHJhc2VTZWFyY2g6IHRydWUsXG4gICAgICBjYXNlU2Vuc2l0aXZlOiBvcGVyYXRpb24ubWF0Y2hDYXNlLFxuICAgICAgZW50aXJlV29yZDogb3BlcmF0aW9uLndob2xlV29yZCxcbiAgICAgIGhpZ2hsaWdodEFsbDogb3BlcmF0aW9uLmhpZ2hsaWdodEFsbCxcbiAgICAgIGZpbmRQcmV2aW91czogb3BlcmF0aW9uLnByZXZpb3VzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMucGRmVmlld2VyLmV2ZW50QnVzLmRpc3BhdGNoKCdmaW5kYmFyY2xvc2UnKTtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvKGRlc3RpbmF0aW9uOiBvYmplY3QgfCBudW1iZXIpIHtcbiAgICBpZiAoZGVzdGluYXRpb24gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIGlmICghZGVzdGluYXRpb25bMV0ubmFtZS5pbmNsdWRlcygnWFlaJykpIHtcbiAgICAgICAgZGVzdGluYXRpb25bMV0gPSB7IG5hbWU6ICdYWVonIH07XG4gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gZGVzdGluYXRpb25bMl0gfHwgbnVsbDtcbiAgICAgICAgZGVzdGluYXRpb25bM10gPSBkZXN0aW5hdGlvblszXSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgZGVzdGluYXRpb25bNF0gPSB0aGlzLnpvb21WYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5wZGZWaWV3ZXIubGlua1NlcnZpY2UubmF2aWdhdGVUbyhkZXN0aW5hdGlvbik7XG4gIH1cblxuICBwdWJsaWMgc2V0Wm9vbSh6b29tVmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGRmVmlld2VyLmN1cnJlbnRTY2FsZVZhbHVlID0gdGhpcy5nZXRab29tVmFsdWUoem9vbVZhbHVlKTtcbiAgICB0aGlzLnpvb21WYWx1ZSA9IHRoaXMucGRmVmlld2VyLmN1cnJlbnRTY2FsZVZhbHVlO1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0Lm5leHQodGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHN0ZXBab29tKHpvb21WYWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWUgPSArdGhpcy5nZXRab29tVmFsdWUoKCt0aGlzLnBkZlZpZXdlci5jdXJyZW50U2NhbGVWYWx1ZSkgKyB6b29tVmFsdWUpO1xuICAgIHRoaXMuem9vbVZhbHVlID0gdGhpcy5wZGZWaWV3ZXIuY3VycmVudFNjYWxlVmFsdWU7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnpvb21WYWx1ZVN1YmplY3QubmV4dCh0aGlzLnBkZlZpZXdlci5jdXJyZW50U2NhbGVWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFpvb21WYWx1ZSh6b29tVmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGlzTmFOKHpvb21WYWx1ZSkpIHsgcmV0dXJuIHRoaXMuem9vbVZhbHVlOyB9XG4gICAgaWYgKHpvb21WYWx1ZSA+IDUpIHsgcmV0dXJuIDU7IH1cbiAgICBpZiAoem9vbVZhbHVlIDwgMC4xKSB7IHJldHVybiAwLjE7IH1cblxuICAgIHJldHVybiArem9vbVZhbHVlLnRvRml4ZWQoMik7XG4gIH1cblxuICBwdWJsaWMgcm90YXRlKHJvdGF0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBkZlZpZXdlci5wYWdlc1JvdGF0aW9uID0gKHRoaXMucGRmVmlld2VyLnBhZ2VzUm90YXRpb24gKyByb3RhdGlvbikgJSAzNjA7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRSb3RhdGlvbihyb3RhdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wZGZWaWV3ZXIucGFnZXNSb3RhdGlvbiA9IHJvdGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldE5vcm1hbGlzZWRQYWdlc1JvdGF0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGRmVmlld2VyLnBhZ2VzUm90YXRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFBERlpvb21WYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBkZlZpZXdlci5jdXJyZW50U2NhbGVWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDdXJyZW50UERGVGl0bGUodGl0bGU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnRUaXRsZSA9IHRpdGxlO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRQREZUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50VGl0bGU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudExvYWRQcm9ncmVzcyB7XG4gIGxvYWRlZDogbnVtYmVyO1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VFdmVudCB7XG4gIGRpdjogb2JqZWN0O1xuICBzY2FsZTogbnVtYmVyO1xuICByb3RhdGlvbjogbnVtYmVyO1xuICBpZDogc3RyaW5nO1xuICB2aWV3cG9ydFNjYWxlOiBudW1iZXI7XG59XG4iXX0=
@@ -0,0 +1,40 @@
1
+ import * as pdfjsViewer from 'pdfjs-dist/web/pdf_viewer';
2
+ import { Injectable } from '@angular/core';
3
+ import { PdfJsWrapper } from './pdf-js-wrapper';
4
+ import { Subject } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../toolbar/toolbar-event.service";
7
+ export class PdfJsWrapperFactory {
8
+ constructor(toolbarEvents) {
9
+ this.toolbarEvents = toolbarEvents;
10
+ this.linkService = new pdfjsViewer.PDFLinkService();
11
+ this.eventBus = new pdfjsViewer.EventBus();
12
+ }
13
+ create(container) {
14
+ const pdfFindController = new pdfjsViewer.PDFFindController({
15
+ linkService: this.linkService,
16
+ eventBus: this.eventBus
17
+ });
18
+ const pdfViewer = new pdfjsViewer.PDFViewer({
19
+ container: container.nativeElement,
20
+ linkService: this.linkService,
21
+ findController: pdfFindController,
22
+ eventBus: this.eventBus,
23
+ imageResourcesPath: '/assets/images/',
24
+ textLayerMode: 2
25
+ });
26
+ this.linkService.setViewer(pdfViewer);
27
+ this.pdfJsWrapper = new PdfJsWrapper(pdfViewer, new pdfjsViewer.DownloadManager({}), this.toolbarEvents, new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject());
28
+ return this.pdfJsWrapper;
29
+ }
30
+ pdfWrapper() {
31
+ return this.pdfJsWrapper;
32
+ }
33
+ }
34
+ /** @nocollapse */ PdfJsWrapperFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PdfJsWrapperFactory, deps: [{ token: i1.ToolbarEventService }], target: i0.ɵɵFactoryTarget.Injectable });
35
+ /** @nocollapse */ PdfJsWrapperFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PdfJsWrapperFactory, providedIn: 'root' });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PdfJsWrapperFactory, decorators: [{
37
+ type: Injectable,
38
+ args: [{ providedIn: 'root' }]
39
+ }], ctorParameters: function () { return [{ type: i1.ToolbarEventService }]; } });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLWpzLXdyYXBwZXIucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi92aWV3ZXJzL3BkZi12aWV3ZXIvcGRmLWpzL3BkZi1qcy13cmFwcGVyLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxXQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQWtDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQU0vQixNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLFlBQTZCLGFBQWtDO1FBQWxDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFxQjtRQUNqQyxNQUFNLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLGlCQUFpQixDQUFDO1lBQzFELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDO1lBQzFDLFNBQVMsRUFBRSxTQUFTLENBQUMsYUFBYTtZQUNsQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsY0FBYyxFQUFFLGlCQUFpQjtZQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsa0JBQWtCLEVBQUUsaUJBQWlCO1lBQ3JDLGFBQWEsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQ2xDLFNBQVMsRUFDVCxJQUFJLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQ25DLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksT0FBTyxFQUFVLEVBQ3JCLElBQUksT0FBTyxFQUF3QixFQUNuQyxJQUFJLE9BQU8sRUFBTyxFQUNsQixJQUFJLE9BQU8sRUFBVyxFQUN0QixJQUFJLE9BQU8sRUFBRSxFQUNiLElBQUksT0FBTyxFQUFlLEVBQzFCLElBQUksT0FBTyxFQUE2QixDQUN6QyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7O21JQTlDVSxtQkFBbUI7dUlBQW5CLG1CQUFtQixjQURQLE1BQU07MkZBQ2xCLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwZGZqc1ZpZXdlciBmcm9tICdwZGZqcy1kaXN0L3dlYi9wZGZfdmlld2VyJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRMb2FkUHJvZ3Jlc3MsIFBhZ2VFdmVudCwgUGRmSnNXcmFwcGVyfSBmcm9tICcuL3BkZi1qcy13cmFwcGVyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90b29sYmFyL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBPdXRsaW5lIH0gZnJvbSAnLi4vc2lkZS1iYXIvb3V0bGluZS1pdGVtL291dGxpbmUubW9kZWwnO1xuaW1wb3J0IHsgUGRmUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9yZWR1Y2Vycy9kb2N1bWVudC5yZWR1Y2VyJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGRmSnNXcmFwcGVyRmFjdG9yeSB7XG5cbiAgcHJpdmF0ZSBsaW5rU2VydmljZTogcGRmanNWaWV3ZXIuUERGTGlua1NlcnZpY2U7XG4gIHByaXZhdGUgZXZlbnRCdXM6IHBkZmpzVmlld2VyLkV2ZW50QnVzO1xuICBwcml2YXRlIHBkZkpzV3JhcHBlcjogUGRmSnNXcmFwcGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSkge1xuICAgIHRoaXMubGlua1NlcnZpY2UgPSBuZXcgcGRmanNWaWV3ZXIuUERGTGlua1NlcnZpY2UoKTtcbiAgICB0aGlzLmV2ZW50QnVzID0gbmV3IHBkZmpzVmlld2VyLkV2ZW50QnVzKCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlKGNvbnRhaW5lcjogRWxlbWVudFJlZik6IFBkZkpzV3JhcHBlciB7XG4gICAgY29uc3QgcGRmRmluZENvbnRyb2xsZXIgPSBuZXcgcGRmanNWaWV3ZXIuUERGRmluZENvbnRyb2xsZXIoe1xuICAgICAgbGlua1NlcnZpY2U6IHRoaXMubGlua1NlcnZpY2UsXG4gICAgICBldmVudEJ1czogdGhpcy5ldmVudEJ1c1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGRmVmlld2VyID0gbmV3IHBkZmpzVmlld2VyLlBERlZpZXdlcih7XG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LFxuICAgICAgbGlua1NlcnZpY2U6IHRoaXMubGlua1NlcnZpY2UsXG4gICAgICBmaW5kQ29udHJvbGxlcjogcGRmRmluZENvbnRyb2xsZXIsXG4gICAgICBldmVudEJ1czogdGhpcy5ldmVudEJ1cyxcbiAgICAgIGltYWdlUmVzb3VyY2VzUGF0aDogJy9hc3NldHMvaW1hZ2VzLycsXG4gICAgICB0ZXh0TGF5ZXJNb2RlOiAyXG4gICAgfSk7XG5cbiAgICB0aGlzLmxpbmtTZXJ2aWNlLnNldFZpZXdlcihwZGZWaWV3ZXIpO1xuXG4gICAgdGhpcy5wZGZKc1dyYXBwZXIgPSBuZXcgUGRmSnNXcmFwcGVyKFxuICAgICAgcGRmVmlld2VyLFxuICAgICAgbmV3IHBkZmpzVmlld2VyLkRvd25sb2FkTWFuYWdlcih7fSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMsXG4gICAgICBuZXcgU3ViamVjdDxzdHJpbmc+KCksXG4gICAgICBuZXcgU3ViamVjdDxEb2N1bWVudExvYWRQcm9ncmVzcz4oKSxcbiAgICAgIG5ldyBTdWJqZWN0PGFueT4oKSxcbiAgICAgIG5ldyBTdWJqZWN0PE91dGxpbmU+KCksXG4gICAgICBuZXcgU3ViamVjdCgpLFxuICAgICAgbmV3IFN1YmplY3Q8UGFnZUV2ZW50W10+KCksXG4gICAgICBuZXcgU3ViamVjdDx7IGxvY2F0aW9uOiBQZGZQb3NpdGlvbiB9PigpXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnBkZkpzV3JhcHBlcjtcbiAgfVxuXG4gIHBkZldyYXBwZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmSnNXcmFwcGVyO1xuICB9XG59XG4iXX0=