@hmcts/media-viewer 2.9.4-RC.8 → 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 (477) hide show
  1. package/assets/all.scss +1 -1
  2. package/assets/sass/tags.scss +1 -1
  3. package/assets/sass/toolbar/main-toolbar.scss +7 -6
  4. package/esm2020/hmcts-media-viewer.mjs +5 -0
  5. package/esm2020/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +116 -0
  6. package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +109 -0
  7. package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +75 -0
  8. package/esm2020/lib/annotations/annotation-set/annotation-set.component.mjs +50 -0
  9. package/esm2020/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +94 -0
  10. package/esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +116 -0
  11. package/esm2020/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +118 -0
  12. package/esm2020/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +87 -0
  13. package/esm2020/lib/annotations/annotations.module.mjs +158 -0
  14. package/esm2020/lib/annotations/comment-set/comment/comment.component.mjs +176 -0
  15. package/esm2020/lib/annotations/comment-set/comment/comment.service.mjs +50 -0
  16. package/esm2020/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +47 -0
  17. package/esm2020/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +31 -0
  18. package/esm2020/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +91 -0
  19. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +61 -0
  20. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +53 -0
  21. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +68 -0
  22. package/esm2020/lib/annotations/comment-set/comment-set-render.service.mjs +54 -0
  23. package/esm2020/lib/annotations/comment-set/comment-set.component.mjs +123 -0
  24. package/esm2020/lib/annotations/comments-summary/comments-summary.component.mjs +113 -0
  25. package/esm2020/lib/annotations/pipes/date/date.pipe.mjs +26 -0
  26. package/esm2020/lib/annotations/pipes/filter/filter.pipe.mjs +32 -0
  27. package/esm2020/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +16 -0
  28. package/esm2020/lib/annotations/services/annotation-api/annotation-api.service.mjs +58 -0
  29. package/esm2020/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +45 -0
  30. package/esm2020/lib/annotations/services/tags/tags.services.mjs +41 -0
  31. package/esm2020/lib/annotations/tags/tags.component.mjs +53 -0
  32. package/esm2020/lib/bookmark/components/bookmark-icons.component.mjs +25 -0
  33. package/esm2020/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +22 -0
  34. package/esm2020/lib/icp/icp-follower.service.mjs +60 -0
  35. package/esm2020/lib/icp/icp-presenter.service.mjs +55 -0
  36. package/esm2020/lib/icp/icp-session-api.service.mjs +21 -0
  37. package/esm2020/lib/icp/icp-update.service.mjs +57 -0
  38. package/esm2020/lib/icp/icp.service.mjs +93 -0
  39. package/esm2020/lib/icp/participants-list/participants-list.component.mjs +30 -0
  40. package/esm2020/lib/icp/socket.service.mjs +118 -0
  41. package/esm2020/lib/media-viewer.component.mjs +244 -0
  42. package/esm2020/lib/media-viewer.module.mjs +151 -0
  43. package/esm2020/lib/print.service.mjs +30 -0
  44. package/esm2020/lib/redaction/components/redaction.component.mjs +91 -0
  45. package/esm2020/lib/redaction/services/redaction-api.service.mjs +50 -0
  46. package/esm2020/lib/shared/gov-uk-date/gov-uk-date.component.mjs +28 -0
  47. package/esm2020/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +34 -0
  48. package/esm2020/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +63 -0
  49. package/esm2020/lib/shared/gov-uk-label/gov-uk-label.component.mjs +44 -0
  50. package/esm2020/lib/shared/shared.module.mjs +53 -0
  51. package/esm2020/lib/shared/util/services/number.helper.service.mjs +23 -0
  52. package/{esm2015/lib/store/bookmarks-store-utils.js → esm2020/lib/store/bookmarks-store-utils.mjs} +1 -3
  53. package/esm2020/lib/store/effects/annotation.effects.mjs +44 -0
  54. package/esm2020/lib/store/effects/bookmarks.effects.mjs +44 -0
  55. package/esm2020/lib/store/effects/document.effects.mjs +44 -0
  56. package/esm2020/lib/store/effects/icp.effects.mjs +26 -0
  57. package/esm2020/lib/store/effects/redaction.effects.mjs +67 -0
  58. package/esm2020/lib/store/reducers/annotations.reducer.mjs +183 -0
  59. package/esm2020/lib/store/reducers/bookmarks.reducer.mjs +116 -0
  60. package/esm2020/lib/store/reducers/document.reducer.mjs +135 -0
  61. package/esm2020/lib/store/reducers/icp.reducer.mjs +56 -0
  62. package/esm2020/lib/store/reducers/redaction.reducer.mjs +116 -0
  63. package/esm2020/lib/store/reducers/tags.reducer.mjs +93 -0
  64. package/esm2020/lib/store/selectors/annotation.selectors.mjs +81 -0
  65. package/esm2020/lib/store/selectors/bookmark.selectors.mjs +36 -0
  66. package/{esm2015/lib/store/selectors/document.selectors.js → esm2020/lib/store/selectors/document.selectors.mjs} +3 -6
  67. package/esm2020/lib/store/selectors/icp.selectors.mjs +13 -0
  68. package/{esm2015/lib/store/selectors/redaction.selectors.js → esm2020/lib/store/selectors/redaction.selectors.mjs} +6 -10
  69. package/{esm2015/lib/store/selectors/tag.selectors.js → esm2020/lib/store/selectors/tag.selectors.mjs} +4 -7
  70. package/esm2020/lib/store/store-utils.mjs +131 -0
  71. package/esm2020/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +41 -0
  72. package/esm2020/lib/toolbar/main-toolbar/main-toolbar.component.mjs +188 -0
  73. package/esm2020/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +199 -0
  74. package/esm2020/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +66 -0
  75. package/esm2020/lib/toolbar/search-bar/search-bar.component.mjs +105 -0
  76. package/esm2020/lib/toolbar/toolbar-button-visibility.service.mjs +94 -0
  77. package/{esm2015/lib/toolbar/toolbar-event.service.js → esm2020/lib/toolbar/toolbar-event.service.mjs} +7 -5
  78. package/esm2020/lib/toolbar/toolbar.module.mjs +67 -0
  79. package/esm2020/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +78 -0
  80. package/esm2020/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +22 -0
  81. package/esm2020/lib/viewers/grab-n-drag.directive.mjs +57 -0
  82. package/esm2020/lib/viewers/image-viewer/image-viewer.component.mjs +166 -0
  83. package/esm2020/lib/viewers/multimedia-player/multimedia-player.component.mjs +58 -0
  84. package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +193 -0
  85. package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +40 -0
  86. package/esm2020/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +230 -0
  87. package/esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +192 -0
  88. package/esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +49 -0
  89. package/esm2020/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +77 -0
  90. package/esm2020/lib/viewers/rotation-persist/rotation-api.service.mjs +27 -0
  91. package/esm2020/lib/viewers/rotation-persist/rotation-persist.directive.mjs +64 -0
  92. package/esm2020/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +49 -0
  93. package/esm2020/lib/viewers/viewer-event.service.mjs +30 -0
  94. package/esm2020/lib/viewers/viewer-util.service.mjs +20 -0
  95. package/esm2020/public_api.mjs +32 -0
  96. package/fesm2015/hmcts-media-viewer.mjs +6602 -0
  97. package/fesm2015/hmcts-media-viewer.mjs.map +1 -0
  98. package/fesm2020/hmcts-media-viewer.mjs +6893 -0
  99. package/fesm2020/hmcts-media-viewer.mjs.map +1 -0
  100. package/hmcts-media-viewer.d.ts.map +1 -1
  101. package/index.d.ts +6 -0
  102. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +3 -0
  103. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +1 -1
  104. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts +3 -0
  105. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts.map +1 -1
  106. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts +3 -0
  107. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts.map +1 -1
  108. package/lib/annotations/annotation-set/annotation-set.component.d.ts +3 -0
  109. package/lib/annotations/annotation-set/annotation-set.component.d.ts.map +1 -1
  110. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +3 -0
  111. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts.map +1 -1
  112. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +5 -2
  113. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts.map +1 -1
  114. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +3 -0
  115. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts.map +1 -1
  116. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +3 -0
  117. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts.map +1 -1
  118. package/lib/annotations/annotations.module.d.ts +32 -0
  119. package/lib/annotations/annotations.module.d.ts.map +1 -1
  120. package/lib/annotations/comment-set/comment/comment.component.d.ts +3 -0
  121. package/lib/annotations/comment-set/comment/comment.component.d.ts.map +1 -1
  122. package/lib/annotations/comment-set/comment/comment.service.d.ts +5 -2
  123. package/lib/annotations/comment-set/comment/comment.service.d.ts.map +1 -1
  124. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +3 -0
  125. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts.map +1 -1
  126. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts +3 -0
  127. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts.map +1 -1
  128. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +3 -0
  129. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts.map +1 -1
  130. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts +6 -3
  131. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts.map +1 -1
  132. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +3 -0
  133. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts.map +1 -1
  134. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +3 -0
  135. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts.map +1 -1
  136. package/lib/annotations/comment-set/comment-set-render.service.d.ts +3 -0
  137. package/lib/annotations/comment-set/comment-set-render.service.d.ts.map +1 -1
  138. package/lib/annotations/comment-set/comment-set.component.d.ts +3 -0
  139. package/lib/annotations/comment-set/comment-set.component.d.ts.map +1 -1
  140. package/lib/annotations/comments-summary/comments-summary.component.d.ts +6 -3
  141. package/lib/annotations/comments-summary/comments-summary.component.d.ts.map +1 -1
  142. package/lib/annotations/pipes/date/date.pipe.d.ts +3 -0
  143. package/lib/annotations/pipes/date/date.pipe.d.ts.map +1 -1
  144. package/lib/annotations/pipes/filter/filter.pipe.d.ts +3 -0
  145. package/lib/annotations/pipes/filter/filter.pipe.d.ts.map +1 -1
  146. package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts +3 -0
  147. package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts.map +1 -1
  148. package/lib/annotations/services/annotation-api/annotation-api.service.d.ts +3 -0
  149. package/lib/annotations/services/annotation-api/annotation-api.service.d.ts.map +1 -1
  150. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts +3 -0
  151. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts.map +1 -1
  152. package/lib/annotations/services/tags/tags.services.d.ts +3 -0
  153. package/lib/annotations/services/tags/tags.services.d.ts.map +1 -1
  154. package/lib/annotations/tags/tags.component.d.ts +6 -3
  155. package/lib/annotations/tags/tags.component.d.ts.map +1 -1
  156. package/lib/bookmark/components/bookmark-icons.component.d.ts +3 -0
  157. package/lib/bookmark/components/bookmark-icons.component.d.ts.map +1 -1
  158. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +3 -0
  159. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +1 -1
  160. package/lib/icp/icp-follower.service.d.ts +3 -0
  161. package/lib/icp/icp-follower.service.d.ts.map +1 -1
  162. package/lib/icp/icp-presenter.service.d.ts +3 -0
  163. package/lib/icp/icp-presenter.service.d.ts.map +1 -1
  164. package/lib/icp/icp-session-api.service.d.ts +3 -0
  165. package/lib/icp/icp-session-api.service.d.ts.map +1 -1
  166. package/lib/icp/icp-update.service.d.ts +3 -0
  167. package/lib/icp/icp-update.service.d.ts.map +1 -1
  168. package/lib/icp/icp.service.d.ts +3 -0
  169. package/lib/icp/icp.service.d.ts.map +1 -1
  170. package/lib/icp/participants-list/participants-list.component.d.ts +3 -0
  171. package/lib/icp/participants-list/participants-list.component.d.ts.map +1 -1
  172. package/lib/icp/socket.service.d.ts +3 -0
  173. package/lib/icp/socket.service.d.ts.map +1 -1
  174. package/lib/media-viewer.component.d.ts +3 -0
  175. package/lib/media-viewer.component.d.ts.map +1 -1
  176. package/lib/media-viewer.module.d.ts +31 -0
  177. package/lib/media-viewer.module.d.ts.map +1 -1
  178. package/lib/print.service.d.ts +3 -0
  179. package/lib/print.service.d.ts.map +1 -1
  180. package/lib/redaction/components/redaction.component.d.ts +3 -0
  181. package/lib/redaction/components/redaction.component.d.ts.map +1 -1
  182. package/lib/redaction/services/redaction-api.service.d.ts +3 -0
  183. package/lib/redaction/services/redaction-api.service.d.ts.map +1 -1
  184. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +3 -0
  185. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts.map +1 -1
  186. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +3 -0
  187. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts.map +1 -1
  188. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +3 -0
  189. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts.map +1 -1
  190. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +3 -0
  191. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts.map +1 -1
  192. package/lib/shared/shared.module.d.ts +11 -0
  193. package/lib/shared/shared.module.d.ts.map +1 -1
  194. package/lib/shared/util/services/number.helper.service.d.ts +3 -0
  195. package/lib/shared/util/services/number.helper.service.d.ts.map +1 -1
  196. package/lib/store/actions/annotation.actions.d.ts +1 -1
  197. package/lib/store/actions/annotation.actions.d.ts.map +1 -1
  198. package/lib/store/actions/bookmark.actions.d.ts +1 -1
  199. package/lib/store/actions/bookmark.actions.d.ts.map +1 -1
  200. package/lib/store/actions/document.actions.d.ts +1 -1
  201. package/lib/store/actions/document.actions.d.ts.map +1 -1
  202. package/lib/store/actions/icp.actions.d.ts +1 -1
  203. package/lib/store/actions/icp.actions.d.ts.map +1 -1
  204. package/lib/store/actions/redaction.actions.d.ts +1 -1
  205. package/lib/store/actions/redaction.actions.d.ts.map +1 -1
  206. package/lib/store/actions/tag.actions.d.ts +1 -1
  207. package/lib/store/actions/tag.actions.d.ts.map +1 -1
  208. package/lib/store/effects/annotation.effects.d.ts +6 -3
  209. package/lib/store/effects/annotation.effects.d.ts.map +1 -1
  210. package/lib/store/effects/bookmarks.effects.d.ts +8 -5
  211. package/lib/store/effects/bookmarks.effects.d.ts.map +1 -1
  212. package/lib/store/effects/document.effects.d.ts +6 -3
  213. package/lib/store/effects/document.effects.d.ts.map +1 -1
  214. package/lib/store/effects/icp.effects.d.ts +5 -2
  215. package/lib/store/effects/icp.effects.d.ts.map +1 -1
  216. package/lib/store/effects/redaction.effects.d.ts +9 -6
  217. package/lib/store/effects/redaction.effects.d.ts.map +1 -1
  218. package/lib/store/selectors/annotation.selectors.d.ts +70 -27
  219. package/lib/store/selectors/annotation.selectors.d.ts.map +1 -1
  220. package/lib/store/selectors/bookmark.selectors.d.ts +18 -10
  221. package/lib/store/selectors/bookmark.selectors.d.ts.map +1 -1
  222. package/lib/store/selectors/document.selectors.d.ts +13 -11
  223. package/lib/store/selectors/document.selectors.d.ts.map +1 -1
  224. package/lib/store/selectors/icp.selectors.d.ts +9 -8
  225. package/lib/store/selectors/icp.selectors.d.ts.map +1 -1
  226. package/lib/store/selectors/redaction.selectors.d.ts +17 -11
  227. package/lib/store/selectors/redaction.selectors.d.ts.map +1 -1
  228. package/lib/store/selectors/tag.selectors.d.ts +14 -12
  229. package/lib/store/selectors/tag.selectors.d.ts.map +1 -1
  230. package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts +3 -0
  231. package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts.map +1 -1
  232. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +4 -0
  233. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -1
  234. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts +5 -2
  235. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts.map +1 -1
  236. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +3 -0
  237. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +1 -1
  238. package/lib/toolbar/search-bar/search-bar.component.d.ts +3 -0
  239. package/lib/toolbar/search-bar/search-bar.component.d.ts.map +1 -1
  240. package/lib/toolbar/toolbar-button-visibility.service.d.ts +3 -0
  241. package/lib/toolbar/toolbar-button-visibility.service.d.ts.map +1 -1
  242. package/lib/toolbar/toolbar-event.service.d.ts +5 -2
  243. package/lib/toolbar/toolbar-event.service.d.ts.map +1 -1
  244. package/lib/toolbar/toolbar.module.d.ts +13 -0
  245. package/lib/toolbar/toolbar.module.d.ts.map +1 -1
  246. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +3 -0
  247. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts.map +1 -1
  248. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts +3 -0
  249. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts.map +1 -1
  250. package/lib/viewers/grab-n-drag.directive.d.ts +3 -0
  251. package/lib/viewers/grab-n-drag.directive.d.ts.map +1 -1
  252. package/lib/viewers/image-viewer/image-viewer.component.d.ts +3 -0
  253. package/lib/viewers/image-viewer/image-viewer.component.d.ts.map +1 -1
  254. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +3 -0
  255. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts.map +1 -1
  256. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts +3 -0
  257. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts.map +1 -1
  258. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +3 -0
  259. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts.map +1 -1
  260. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +5 -2
  261. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts.map +1 -1
  262. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +3 -0
  263. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts.map +1 -1
  264. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +3 -0
  265. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts.map +1 -1
  266. package/lib/viewers/rotation-persist/rotation-api.service.d.ts +3 -0
  267. package/lib/viewers/rotation-persist/rotation-api.service.d.ts.map +1 -1
  268. package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts +3 -0
  269. package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts.map +1 -1
  270. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +3 -0
  271. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts.map +1 -1
  272. package/lib/viewers/viewer-event.service.d.ts +3 -0
  273. package/lib/viewers/viewer-event.service.d.ts.map +1 -1
  274. package/lib/viewers/viewer-util.service.d.ts +3 -0
  275. package/lib/viewers/viewer-util.service.d.ts.map +1 -1
  276. package/package.json +34 -22
  277. package/public_api.d.ts +1 -0
  278. package/public_api.d.ts.map +1 -1
  279. package/bundles/hmcts-media-viewer.umd.js +0 -7539
  280. package/bundles/hmcts-media-viewer.umd.js.map +0 -1
  281. package/bundles/hmcts-media-viewer.umd.min.js +0 -2
  282. package/bundles/hmcts-media-viewer.umd.min.js.map +0 -1
  283. package/esm2015/hmcts-media-viewer.js +0 -64
  284. package/esm2015/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.js +0 -113
  285. package/esm2015/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.js +0 -111
  286. package/esm2015/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.js +0 -61
  287. package/esm2015/lib/annotations/annotation-set/annotation-set.component.js +0 -47
  288. package/esm2015/lib/annotations/annotation-set/annotation-view/annotation-view.component.js +0 -86
  289. package/esm2015/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.js +0 -108
  290. package/esm2015/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.js +0 -107
  291. package/esm2015/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.js +0 -81
  292. package/esm2015/lib/annotations/annotations.module.js +0 -103
  293. package/esm2015/lib/annotations/comment-set/comment/comment.component.js +0 -162
  294. package/esm2015/lib/annotations/comment-set/comment/comment.service.js +0 -47
  295. package/esm2015/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.js +0 -48
  296. package/esm2015/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.js +0 -31
  297. package/esm2015/lib/annotations/comment-set/comment-navigate/comments-navigate.component.js +0 -95
  298. package/esm2015/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.js +0 -60
  299. package/esm2015/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.js +0 -53
  300. package/esm2015/lib/annotations/comment-set/comment-set-header/comment-set-header.component.js +0 -68
  301. package/esm2015/lib/annotations/comment-set/comment-set-render.service.js +0 -51
  302. package/esm2015/lib/annotations/comment-set/comment-set.component.js +0 -110
  303. package/esm2015/lib/annotations/comments-summary/comments-summary.component.js +0 -106
  304. package/esm2015/lib/annotations/pipes/date/date.pipe.js +0 -22
  305. package/esm2015/lib/annotations/pipes/filter/filter.pipe.js +0 -28
  306. package/esm2015/lib/annotations/pipes/unsnake/unsnake.pipe.js +0 -12
  307. package/esm2015/lib/annotations/services/annotation-api/annotation-api.service.js +0 -59
  308. package/esm2015/lib/annotations/services/bookmarks-api/bookmarks-api.service.js +0 -46
  309. package/esm2015/lib/annotations/services/tags/tags.services.js +0 -36
  310. package/esm2015/lib/annotations/tags/tags.component.js +0 -52
  311. package/esm2015/lib/bookmark/components/bookmark-icons.component.js +0 -26
  312. package/esm2015/lib/icp/confirm-exit/confirm-action-dialog.component.js +0 -25
  313. package/esm2015/lib/icp/icp-follower.service.js +0 -63
  314. package/esm2015/lib/icp/icp-presenter.service.js +0 -57
  315. package/esm2015/lib/icp/icp-session-api.service.js +0 -22
  316. package/esm2015/lib/icp/icp-update.service.js +0 -56
  317. package/esm2015/lib/icp/icp.service.js +0 -98
  318. package/esm2015/lib/icp/participants-list/participants-list.component.js +0 -32
  319. package/esm2015/lib/icp/socket.service.js +0 -117
  320. package/esm2015/lib/media-viewer.component.js +0 -210
  321. package/esm2015/lib/media-viewer.module.js +0 -102
  322. package/esm2015/lib/print.service.js +0 -25
  323. package/esm2015/lib/redaction/components/redaction.component.js +0 -97
  324. package/esm2015/lib/redaction/services/redaction-api.service.js +0 -51
  325. package/esm2015/lib/shared/gov-uk-date/gov-uk-date.component.js +0 -21
  326. package/esm2015/lib/shared/gov-uk-error-message/gov-uk-error-message.component.js +0 -27
  327. package/esm2015/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.js +0 -42
  328. package/esm2015/lib/shared/gov-uk-label/gov-uk-label.component.js +0 -32
  329. package/esm2015/lib/shared/shared.module.js +0 -34
  330. package/esm2015/lib/shared/util/services/number.helper.service.js +0 -23
  331. package/esm2015/lib/store/effects/annotation.effects.js +0 -55
  332. package/esm2015/lib/store/effects/bookmarks.effects.js +0 -66
  333. package/esm2015/lib/store/effects/document.effects.js +0 -59
  334. package/esm2015/lib/store/effects/icp.effects.js +0 -37
  335. package/esm2015/lib/store/effects/redaction.effects.js +0 -94
  336. package/esm2015/lib/store/reducers/annotations.reducer.js +0 -115
  337. package/esm2015/lib/store/reducers/bookmarks.reducer.js +0 -80
  338. package/esm2015/lib/store/reducers/document.reducer.js +0 -100
  339. package/esm2015/lib/store/reducers/icp.reducer.js +0 -40
  340. package/esm2015/lib/store/reducers/redaction.reducer.js +0 -75
  341. package/esm2015/lib/store/reducers/tags.reducer.js +0 -67
  342. package/esm2015/lib/store/selectors/annotation.selectors.js +0 -84
  343. package/esm2015/lib/store/selectors/bookmark.selectors.js +0 -39
  344. package/esm2015/lib/store/selectors/icp.selectors.js +0 -18
  345. package/esm2015/lib/store/store-utils.js +0 -105
  346. package/esm2015/lib/toolbar/icp-toolbar/icp-toolbar.component.js +0 -43
  347. package/esm2015/lib/toolbar/main-toolbar/main-toolbar.component.js +0 -170
  348. package/esm2015/lib/toolbar/redaction-search-bar/redaction-search-bar.component.js +0 -201
  349. package/esm2015/lib/toolbar/redaction-toolbar/redaction-toolbar.component.js +0 -70
  350. package/esm2015/lib/toolbar/search-bar/search-bar.component.js +0 -102
  351. package/esm2015/lib/toolbar/toolbar-button-visibility.service.js +0 -92
  352. package/esm2015/lib/toolbar/toolbar.module.js +0 -45
  353. package/esm2015/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.js +0 -72
  354. package/esm2015/lib/viewers/convertible-content-viewer/document-conversion-api.service.js +0 -23
  355. package/esm2015/lib/viewers/grab-n-drag.directive.js +0 -51
  356. package/esm2015/lib/viewers/image-viewer/image-viewer.component.js +0 -164
  357. package/esm2015/lib/viewers/multimedia-player/multimedia-player.component.js +0 -54
  358. package/esm2015/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.js +0 -203
  359. package/esm2015/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.js +0 -43
  360. package/esm2015/lib/viewers/pdf-viewer/pdf-viewer.component.js +0 -220
  361. package/esm2015/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.js +0 -179
  362. package/esm2015/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.js +0 -44
  363. package/esm2015/lib/viewers/pdf-viewer/side-bar/side-bar.component.js +0 -72
  364. package/esm2015/lib/viewers/rotation-persist/rotation-api.service.js +0 -28
  365. package/esm2015/lib/viewers/rotation-persist/rotation-persist.directive.js +0 -67
  366. package/esm2015/lib/viewers/unsupported-viewer/unsupported-viewer.component.js +0 -47
  367. package/esm2015/lib/viewers/viewer-event.service.js +0 -30
  368. package/esm2015/lib/viewers/viewer-util.service.js +0 -23
  369. package/esm2015/public_api.js +0 -31
  370. package/fesm2015/hmcts-media-viewer.js +0 -6572
  371. package/fesm2015/hmcts-media-viewer.js.map +0 -1
  372. package/hmcts-media-viewer.d.ts +0 -69
  373. package/hmcts-media-viewer.metadata.json +0 -1
  374. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.ngfactory.d.ts.map +0 -1
  375. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.ngfactory.d.ts.map +0 -1
  376. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.ngfactory.d.ts.map +0 -1
  377. package/lib/annotations/annotation-set/annotation-set.component.ngfactory.d.ts.map +0 -1
  378. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.ngfactory.d.ts.map +0 -1
  379. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.ngfactory.d.ts.map +0 -1
  380. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.ngfactory.d.ts.map +0 -1
  381. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.ngfactory.d.ts.map +0 -1
  382. package/lib/annotations/annotations.module.ngfactory.d.ts.map +0 -1
  383. package/lib/annotations/comment-set/comment/comment.component.ngfactory.d.ts.map +0 -1
  384. package/lib/annotations/comment-set/comment/comment.service.ngfactory.d.ts.map +0 -1
  385. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.ngfactory.d.ts.map +0 -1
  386. package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.ngfactory.d.ts.map +0 -1
  387. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.ngfactory.d.ts.map +0 -1
  388. package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.ngfactory.d.ts.map +0 -1
  389. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.ngfactory.d.ts.map +0 -1
  390. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.ngfactory.d.ts.map +0 -1
  391. package/lib/annotations/comment-set/comment-set-render.service.ngfactory.d.ts.map +0 -1
  392. package/lib/annotations/comment-set/comment-set.component.ngfactory.d.ts.map +0 -1
  393. package/lib/annotations/comments-summary/comments-summary.component.ngfactory.d.ts.map +0 -1
  394. package/lib/annotations/pipes/date/date.pipe.ngfactory.d.ts.map +0 -1
  395. package/lib/annotations/pipes/filter/filter.pipe.ngfactory.d.ts.map +0 -1
  396. package/lib/annotations/pipes/unsnake/unsnake.pipe.ngfactory.d.ts.map +0 -1
  397. package/lib/annotations/services/annotation-api/annotation-api.service.ngfactory.d.ts.map +0 -1
  398. package/lib/annotations/services/bookmarks-api/bookmarks-api.service.ngfactory.d.ts.map +0 -1
  399. package/lib/annotations/services/tags/tags.services.ngfactory.d.ts.map +0 -1
  400. package/lib/annotations/tags/tags.component.ngfactory.d.ts.map +0 -1
  401. package/lib/bookmark/components/bookmark-icons.component.ngfactory.d.ts.map +0 -1
  402. package/lib/icp/confirm-exit/confirm-action-dialog.component.ngfactory.d.ts.map +0 -1
  403. package/lib/icp/icp-follower.service.ngfactory.d.ts.map +0 -1
  404. package/lib/icp/icp-presenter.service.ngfactory.d.ts.map +0 -1
  405. package/lib/icp/icp-session-api.service.ngfactory.d.ts.map +0 -1
  406. package/lib/icp/icp-update.service.ngfactory.d.ts.map +0 -1
  407. package/lib/icp/icp.service.ngfactory.d.ts.map +0 -1
  408. package/lib/icp/participants-list/participants-list.component.ngfactory.d.ts.map +0 -1
  409. package/lib/icp/socket.service.ngfactory.d.ts.map +0 -1
  410. package/lib/media-viewer.component.ngfactory.d.ts.map +0 -1
  411. package/lib/media-viewer.module.ngfactory.d.ts.map +0 -1
  412. package/lib/print.service.ngfactory.d.ts.map +0 -1
  413. package/lib/redaction/components/redaction.component.ngfactory.d.ts.map +0 -1
  414. package/lib/redaction/services/redaction-api.service.ngfactory.d.ts.map +0 -1
  415. package/lib/shared/gov-uk-date/gov-uk-date.component.ngfactory.d.ts.map +0 -1
  416. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.ngfactory.d.ts.map +0 -1
  417. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.ngfactory.d.ts.map +0 -1
  418. package/lib/shared/gov-uk-label/gov-uk-label.component.ngfactory.d.ts.map +0 -1
  419. package/lib/shared/shared.module.ngfactory.d.ts.map +0 -1
  420. package/lib/shared/util/services/number.helper.service.ngfactory.d.ts.map +0 -1
  421. package/lib/store/effects/annotation.effects.ngfactory.d.ts.map +0 -1
  422. package/lib/store/effects/bookmarks.effects.ngfactory.d.ts.map +0 -1
  423. package/lib/store/effects/document.effects.ngfactory.d.ts.map +0 -1
  424. package/lib/store/effects/icp.effects.ngfactory.d.ts.map +0 -1
  425. package/lib/store/effects/redaction.effects.ngfactory.d.ts.map +0 -1
  426. package/lib/toolbar/icp-toolbar/icp-toolbar.component.ngfactory.d.ts.map +0 -1
  427. package/lib/toolbar/main-toolbar/main-toolbar.component.ngfactory.d.ts.map +0 -1
  428. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.ngfactory.d.ts.map +0 -1
  429. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.scss.shim.ngstyle.d.ts.map +0 -1
  430. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.ngfactory.d.ts.map +0 -1
  431. package/lib/toolbar/search-bar/search-bar.component.ngfactory.d.ts.map +0 -1
  432. package/lib/toolbar/toolbar-button-visibility.service.ngfactory.d.ts.map +0 -1
  433. package/lib/toolbar/toolbar-event.service.ngfactory.d.ts.map +0 -1
  434. package/lib/toolbar/toolbar.module.ngfactory.d.ts.map +0 -1
  435. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.ngfactory.d.ts.map +0 -1
  436. package/lib/viewers/convertible-content-viewer/document-conversion-api.service.ngfactory.d.ts.map +0 -1
  437. package/lib/viewers/grab-n-drag.directive.ngfactory.d.ts.map +0 -1
  438. package/lib/viewers/image-viewer/image-viewer.component.ngfactory.d.ts.map +0 -1
  439. package/lib/viewers/multimedia-player/multimedia-player.component.ngfactory.d.ts.map +0 -1
  440. package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.ngfactory.d.ts.map +0 -1
  441. package/lib/viewers/pdf-viewer/pdf-viewer.component.ngfactory.d.ts.map +0 -1
  442. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.ngfactory.d.ts.map +0 -1
  443. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.ngfactory.d.ts.map +0 -1
  444. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.ngfactory.d.ts.map +0 -1
  445. package/lib/viewers/rotation-persist/rotation-api.service.ngfactory.d.ts.map +0 -1
  446. package/lib/viewers/rotation-persist/rotation-persist.directive.ngfactory.d.ts.map +0 -1
  447. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.ngfactory.d.ts.map +0 -1
  448. package/lib/viewers/viewer-event.service.ngfactory.d.ts.map +0 -1
  449. package/lib/viewers/viewer-util.service.ngfactory.d.ts.map +0 -1
  450. /package/{esm2015/lib/annotations/annotation-set/annotation-set.model.js → esm2020/lib/annotations/annotation-set/annotation-set.model.mjs} +0 -0
  451. /package/{esm2015/lib/annotations/annotation-set/annotation-view/annotation.model.js → esm2020/lib/annotations/annotation-set/annotation-view/annotation.model.mjs} +0 -0
  452. /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
  453. /package/{esm2015/lib/annotations/comment-set/comment/comment.model.js → esm2020/lib/annotations/comment-set/comment/comment.model.mjs} +0 -0
  454. /package/{esm2015/lib/annotations/models/api-persisted.model.js → esm2020/lib/annotations/models/api-persisted.model.mjs} +0 -0
  455. /package/{esm2015/lib/annotations/models/event-select.model.js → esm2020/lib/annotations/models/event-select.model.mjs} +0 -0
  456. /package/{esm2015/lib/annotations/models/tags.model.js → esm2020/lib/annotations/models/tags.model.mjs} +0 -0
  457. /package/{esm2015/lib/annotations/models/user.model.js → esm2020/lib/annotations/models/user.model.mjs} +0 -0
  458. /package/{esm2015/lib/icp/icp.events.js → esm2020/lib/icp/icp.events.mjs} +0 -0
  459. /package/{esm2015/lib/icp/icp.interfaces.js → esm2020/lib/icp/icp.interfaces.mjs} +0 -0
  460. /package/{esm2015/lib/redaction/services/redaction.model.js → esm2020/lib/redaction/services/redaction.model.mjs} +0 -0
  461. /package/{esm2015/lib/shared/util/helpers/html-templates.helper.js → esm2020/lib/shared/util/helpers/html-templates.helper.mjs} +0 -0
  462. /package/{esm2015/lib/store/actions/annotation.actions.js → esm2020/lib/store/actions/annotation.actions.mjs} +0 -0
  463. /package/{esm2015/lib/store/actions/bookmark.actions.js → esm2020/lib/store/actions/bookmark.actions.mjs} +0 -0
  464. /package/{esm2015/lib/store/actions/document.actions.js → esm2020/lib/store/actions/document.actions.mjs} +0 -0
  465. /package/{esm2015/lib/store/actions/icp.actions.js → esm2020/lib/store/actions/icp.actions.mjs} +0 -0
  466. /package/{esm2015/lib/store/actions/redaction.actions.js → esm2020/lib/store/actions/redaction.actions.mjs} +0 -0
  467. /package/{esm2015/lib/store/actions/tag.actions.js → esm2020/lib/store/actions/tag.actions.mjs} +0 -0
  468. /package/{esm2015/lib/store/effects/index.js → esm2020/lib/store/effects/index.mjs} +0 -0
  469. /package/{esm2015/lib/store/models/bookmarks.interface.js → esm2020/lib/store/models/bookmarks.interface.mjs} +0 -0
  470. /package/{esm2015/lib/store/models/filters.interface.js → esm2020/lib/store/models/filters.interface.mjs} +0 -0
  471. /package/{esm2015/lib/store/reducers/reducers.js → esm2020/lib/store/reducers/reducers.mjs} +0 -0
  472. /package/{esm2015/lib/toolbar/icp-event.service.js → esm2020/lib/toolbar/icp-event.service.mjs} +0 -0
  473. /package/{esm2015/lib/toolbar/redaction-search-bar/redaction-search.model.js → esm2020/lib/toolbar/redaction-search-bar/redaction-search.model.mjs} +0 -0
  474. /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
  475. /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
  476. /package/{esm2015/lib/viewers/rotation-persist/rotation.model.js → esm2020/lib/viewers/rotation-persist/rotation.model.mjs} +0 -0
  477. /package/{esm2015/lib/viewers/viewer-exception.model.js → esm2020/lib/viewers/viewer-exception.model.mjs} +0 -0
@@ -0,0 +1,199 @@
1
+ import { Component, HostListener, ViewChild } from '@angular/core';
2
+ import { select } from '@ngrx/store';
3
+ import * as fromDocument from '../../store/selectors/document.selectors';
4
+ import * as fromRedactionActions from '../../store/actions/redaction.actions';
5
+ import uuid from 'uuid';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ngrx/store";
8
+ import * as i2 from "../toolbar-button-visibility.service";
9
+ import * as i3 from "../toolbar-event.service";
10
+ import * as i4 from "../../annotations/annotation-set/annotation-create/highlight-create/highlight-create.service";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "@angular/forms";
13
+ export class RedactionSearchBarComponent {
14
+ constructor(store, toolbarButtons, toolbarEvents, highlightService) {
15
+ this.store = store;
16
+ this.toolbarButtons = toolbarButtons;
17
+ this.toolbarEvents = toolbarEvents;
18
+ this.highlightService = highlightService;
19
+ this.highlightAll = true;
20
+ this.matchCase = false;
21
+ this.wholeWord = false;
22
+ this.resultsText = '';
23
+ this.searchText = '';
24
+ this.resultCount = 0;
25
+ this.redactElements = [];
26
+ this.advancedSearchVisible = false;
27
+ }
28
+ ngOnInit() {
29
+ this.subscription = this.toolbarEvents.redactionSerachSubject.subscribe((results) => this.redactAllSearched(results));
30
+ this.subscription.add(this.store.pipe(select(fromDocument.getDocumentId)).subscribe(docId => this.documentId = docId));
31
+ this.subscription.add(this.store.pipe(select(fromDocument.getPages)).subscribe((pages) => {
32
+ if (pages[1]) {
33
+ this.allPages = pages;
34
+ }
35
+ }));
36
+ this.subscription.add(this.toolbarEvents.searchResultsCountSubject.subscribe(results => this.setSearchResultsCount(results)));
37
+ this.subscription.add(this.toolbarEvents.openRedactionSearch.subscribe(isOpen => this.openSearchModal = isOpen));
38
+ this.subscription.add(this.toolbarEvents.redactAllInProgressSubject
39
+ .subscribe(inProgress => this.redactAllInProgress = inProgress));
40
+ }
41
+ ngOnDestroy() {
42
+ this.subscription.unsubscribe();
43
+ }
44
+ onWindowKeyDown(e) {
45
+ if (e.code === 'F3' || (e.ctrlKey && e.code === 'KeyF')) {
46
+ e.preventDefault();
47
+ this.toolbarEvents.searchBarHidden.next(false);
48
+ setTimeout(() => this.findInput.nativeElement.focus(), 200);
49
+ }
50
+ }
51
+ search(reset = true) {
52
+ this.redactAll = !reset;
53
+ if (this.redactAll) {
54
+ this.toolbarEvents.redactAllInProgressSubject.next(true);
55
+ }
56
+ if (reset) {
57
+ this.redactElements = [];
58
+ }
59
+ this.toolbarEvents.search({
60
+ searchTerm: this.searchText,
61
+ highlightAll: this.highlightAll,
62
+ matchCase: this.matchCase,
63
+ wholeWord: this.wholeWord,
64
+ previous: false,
65
+ reset
66
+ });
67
+ }
68
+ saveRedaction(redactRectangle) {
69
+ const redaction = redactRectangle.map(ele => {
70
+ return { page: ele.page, rectangles: ele.rectangles, redactionId: uuid(), documentId: this.documentId };
71
+ });
72
+ this.store.dispatch(new fromRedactionActions.SaveBulkRedaction({ searchRedactions: redaction }));
73
+ }
74
+ existInRedactElements(pageNumber, matechedIndex, rectangles) {
75
+ if (this.redactElements && this.redactElements.length > 0) {
76
+ const pagesFound = this.redactElements.find(re => re.page === pageNumber && re.matchedIndex === matechedIndex);
77
+ const pageRectangles = pagesFound?.rectangles;
78
+ if (!pageRectangles || pageRectangles.length <= 0) {
79
+ return false;
80
+ }
81
+ let matchesRectangles = 0;
82
+ for (let rectIndx = 0; rectIndx < pageRectangles.length; rectIndx++) {
83
+ const rectangle = pageRectangles[rectIndx];
84
+ const foundRectangle = rectangles.find(re => re.width === rectangle.width &&
85
+ re.height === rectangle.height && re.x === rectangle.x && re.y === rectangle.y);
86
+ if (foundRectangle) {
87
+ matchesRectangles++;
88
+ }
89
+ }
90
+ return pageRectangles.length === matchesRectangles;
91
+ }
92
+ return false;
93
+ }
94
+ onCloseSearchModal() {
95
+ this.toolbarEvents.openRedactionSearch.next(false);
96
+ }
97
+ setSearchResultsCount(results) {
98
+ this.resultCount = results.total;
99
+ this.resultsText = this.resultCount > 0
100
+ ? `${results.total} results founds`
101
+ : 'No results found';
102
+ }
103
+ redactAllSearched(results) {
104
+ const $this = this;
105
+ const intervalId = setInterval(() => {
106
+ const highlightElement = document.getElementsByClassName('highlight selected');
107
+ if (highlightElement && highlightElement.length > 0) {
108
+ clearInterval(intervalId);
109
+ $this.redactAllSearchedTick(results);
110
+ }
111
+ }, 100);
112
+ }
113
+ redactAllSearchedTick(results) {
114
+ const highlightElement = document.getElementsByClassName('highlight selected');
115
+ if (highlightElement && highlightElement.length > 0) {
116
+ this.resultCount = results.matchesCount;
117
+ const pageNumber = results.page + 1;
118
+ const rectangles = this.getRectangles(pageNumber);
119
+ if (rectangles && this.redactElements.length <= this.resultCount
120
+ && !this.existInRedactElements(pageNumber, results.matchedIndex, rectangles)) {
121
+ this.redactElements.push({ page: pageNumber, matchedIndex: results?.matchedIndex, rectangles });
122
+ this.CreateRedactAllText();
123
+ }
124
+ if (this.redactAll && this.resultCount && this.resultCount > 0
125
+ && rectangles && this.redactElements.length < this.resultCount) {
126
+ this.search(false);
127
+ }
128
+ if (this.redactAll && this.resultCount && this.redactElements.length === this.resultCount) {
129
+ this.redactAll = false;
130
+ this.redactAllText = null;
131
+ this.saveRedaction(this.redactElements);
132
+ }
133
+ }
134
+ }
135
+ CreateRedactAllText() {
136
+ this.redactAllText = `${this.redactElements.length} of ${this.resultCount}`;
137
+ }
138
+ onEscapeKeyPress(e) {
139
+ this.toolbarEvents.searchBarHidden.next(true);
140
+ }
141
+ onEnterKeyPress(e) {
142
+ this.search();
143
+ }
144
+ toggleSearchBar() {
145
+ this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());
146
+ }
147
+ getRectangles(page) {
148
+ this.pageHeight = this.allPages[page].styles.height;
149
+ this.pageWidth = this.allPages[page].styles.width;
150
+ this.zoom = parseFloat(this.allPages[page].scaleRotation.scale);
151
+ this.rotate = parseInt(this.allPages[page].scaleRotation.rotation, 10);
152
+ const selectedHighLightedElements = document.getElementsByClassName('highlight selected');
153
+ if (selectedHighLightedElements && selectedHighLightedElements.length > 0) {
154
+ const docRange = document.createRange();
155
+ docRange.selectNodeContents(selectedHighLightedElements[0]);
156
+ const selection = window.getSelection();
157
+ selection?.removeAllRanges();
158
+ selection?.addRange(docRange);
159
+ if (selection.rangeCount && !selection.isCollapsed) {
160
+ const range = selection.getRangeAt(0).cloneRange();
161
+ const clientRects = range.getClientRects();
162
+ if (clientRects) {
163
+ const parentRect = selectedHighLightedElements[0].parentElement.parentElement.getBoundingClientRect();
164
+ const selectionRectangles = [];
165
+ for (let i = 0; i < clientRects.length; i++) {
166
+ const selectionRectangle = this.createTextRectangle(clientRects[i], parentRect);
167
+ const findSelecttionRectangle = selectionRectangles.find((rect) => rect.width === selectionRectangle.width && rect.x === selectionRectangle.x);
168
+ if (!findSelecttionRectangle) {
169
+ selectionRectangles.push(selectionRectangle);
170
+ }
171
+ }
172
+ return selectionRectangles;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ createTextRectangle(rect, parentRect) {
178
+ const height = rect.bottom - rect.top;
179
+ const width = rect.right - rect.left;
180
+ const top = rect.top - parentRect.top;
181
+ const left = rect.left - parentRect.left;
182
+ let rectangle = this.highlightService.applyRotation(this.pageHeight, this.pageWidth, height, width, top, left, this.rotate, this.zoom);
183
+ rectangle = { id: uuid(), ...rectangle };
184
+ return rectangle;
185
+ }
186
+ }
187
+ /** @nocollapse */ RedactionSearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedactionSearchBarComponent, deps: [{ token: i1.Store }, { token: i2.ToolbarButtonVisibilityService }, { token: i3.ToolbarEventService }, { token: i4.HighlightCreateService }], target: i0.ɵɵFactoryTarget.Component });
188
+ /** @nocollapse */ RedactionSearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RedactionSearchBarComponent, selector: "mv-redaction-search-bar", host: { listeners: { "window:keydown": "onWindowKeyDown($event)" } }, viewQueries: [{ propertyName: "findInput", first: true, predicate: ["findInput"], descendants: true, static: true }], ngImport: i0, template: "<div\n *ngIf=\"openSearchModal\"\n class=\"searchbar redaction-search-bar govuk-!-padding-3\"\n>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-!-padding-right-0\">\n <div class=\"redaction-search-buttons-area\">\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button searchbar-button--close\"\n title=\"Close Search\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onCloseSearchModal()\"\n ></button>\n </div>\n <input\n id=\"search_input\"\n class=\"govuk-input govuk-!-width-three-quarters govuk-!-display-inline-block govuk-!-margin-top-5\"\n type=\"text\"\n aria-label=\"Find in document\"\n #findInput\n title=\"Find in document\"\n placeholder=\"Redact from search...\"\n tabindex=\"0\"\n data-l10n-id=\"search_input\"\n [(ngModel)]=\"searchText\"\n (keydown.escape)=\"onEscapeKeyPress($event)\"\n (keydown.enter)=\"onEnterKeyPress($event)\"\n />\n <div class=\"redaction-search-buttons-area\">\n <button\n id=\"mvSearchAllBtn\"\n class=\"govuk-button govuk-!-margin-bottom-0\"\n data-module=\"govuk-button\"\n (click)=\"search()\"\n [disabled]=\"redactAllInProgress\"\n >\n Search\n </button>\n <button\n id=\"mvRedactAllBtn\"\n class=\"govuk-button govuk-!-margin-left-2 govuk-!-margin-bottom-0\"\n data-module=\"govuk-button\"\n (click)=\"search(false)\"\n [disabled]=\"redactAllInProgress\"\n >\n Redact all\n </button>\n </div>\n <div\n class=\"govuk-grid-column-three-quarters govuk-!-padding-left-0 govuk-!-padding-top-2 redaction-status-text\"\n >\n <span\n id=\"findRedactResultsCount\"\n class=\"govuk-grid-column-full govuk-!-margin-right-4 govuk-!-margin-left-0 govuk-!-padding-left-0\"\n ><h4\n class=\"govuk-!-display-inline-block govuk-!-margin-top-0 govuk-!-margin-bottom-1\"\n *ngIf=\"redactAllInProgress\"\n >\n Redacting in progress\n </h4>\n {{ redactAllInProgress ? \"\" : resultsText }}</span\n >\n <span>\n <h5\n id=\"redactAllInProgressCount\"\n class=\"govuk-!-display-inline-block govuk-!-margin-top-0 govuk-!-margin-bottom-1\"\n >\n {{ redactAllInProgress ? redactAllText : \"\" }}\n </h5>\n </span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".redaction-search-buttons-area{display:flex;flex-direction:row;padding-top:.5rem}.redaction-search-bar{width:20rem;left:73%;top:2%}.redaction-status-text{height:2.6rem}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedactionSearchBarComponent, decorators: [{
190
+ type: Component,
191
+ args: [{ selector: 'mv-redaction-search-bar', template: "<div\n *ngIf=\"openSearchModal\"\n class=\"searchbar redaction-search-bar govuk-!-padding-3\"\n>\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-!-padding-right-0\">\n <div class=\"redaction-search-buttons-area\">\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button searchbar-button--close\"\n title=\"Close Search\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onCloseSearchModal()\"\n ></button>\n </div>\n <input\n id=\"search_input\"\n class=\"govuk-input govuk-!-width-three-quarters govuk-!-display-inline-block govuk-!-margin-top-5\"\n type=\"text\"\n aria-label=\"Find in document\"\n #findInput\n title=\"Find in document\"\n placeholder=\"Redact from search...\"\n tabindex=\"0\"\n data-l10n-id=\"search_input\"\n [(ngModel)]=\"searchText\"\n (keydown.escape)=\"onEscapeKeyPress($event)\"\n (keydown.enter)=\"onEnterKeyPress($event)\"\n />\n <div class=\"redaction-search-buttons-area\">\n <button\n id=\"mvSearchAllBtn\"\n class=\"govuk-button govuk-!-margin-bottom-0\"\n data-module=\"govuk-button\"\n (click)=\"search()\"\n [disabled]=\"redactAllInProgress\"\n >\n Search\n </button>\n <button\n id=\"mvRedactAllBtn\"\n class=\"govuk-button govuk-!-margin-left-2 govuk-!-margin-bottom-0\"\n data-module=\"govuk-button\"\n (click)=\"search(false)\"\n [disabled]=\"redactAllInProgress\"\n >\n Redact all\n </button>\n </div>\n <div\n class=\"govuk-grid-column-three-quarters govuk-!-padding-left-0 govuk-!-padding-top-2 redaction-status-text\"\n >\n <span\n id=\"findRedactResultsCount\"\n class=\"govuk-grid-column-full govuk-!-margin-right-4 govuk-!-margin-left-0 govuk-!-padding-left-0\"\n ><h4\n class=\"govuk-!-display-inline-block govuk-!-margin-top-0 govuk-!-margin-bottom-1\"\n *ngIf=\"redactAllInProgress\"\n >\n Redacting in progress\n </h4>\n {{ redactAllInProgress ? \"\" : resultsText }}</span\n >\n <span>\n <h5\n id=\"redactAllInProgressCount\"\n class=\"govuk-!-display-inline-block govuk-!-margin-top-0 govuk-!-margin-bottom-1\"\n >\n {{ redactAllInProgress ? redactAllText : \"\" }}\n </h5>\n </span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".redaction-search-buttons-area{display:flex;flex-direction:row;padding-top:.5rem}.redaction-search-bar{width:20rem;left:73%;top:2%}.redaction-status-text{height:2.6rem}\n"] }]
192
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.ToolbarButtonVisibilityService }, { type: i3.ToolbarEventService }, { type: i4.HighlightCreateService }]; }, propDecorators: { findInput: [{
193
+ type: ViewChild,
194
+ args: ['findInput', { static: true }]
195
+ }], onWindowKeyDown: [{
196
+ type: HostListener,
197
+ args: ['window:keydown', ['$event']]
198
+ }] } });
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkYWN0aW9uLXNlYXJjaC1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdG9vbGJhci9yZWRhY3Rpb24tc2VhcmNoLWJhci9yZWRhY3Rpb24tc2VhcmNoLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3JlZGFjdGlvbi1zZWFyY2gtYmFyL3JlZGFjdGlvbi1zZWFyY2gtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUE2QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJMUcsT0FBTyxFQUFTLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1QyxPQUFPLEtBQUssWUFBWSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sS0FBSyxvQkFBb0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBUXhCLE1BQU0sT0FBTywyQkFBMkI7SUEwQnRDLFlBQ1UsS0FBNkIsRUFDckIsY0FBOEMsRUFDOUMsYUFBa0MsRUFDbEMsZ0JBQXdDO1FBSGhELFVBQUssR0FBTCxLQUFLLENBQXdCO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQztRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQTFCMUQsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxDQUFD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U0FBUyxFQUFFLENBQUM7UUFFekMsT0FBTyxTQUFzQixDQUFDO0lBQ2hDLENBQUM7OzJJQWxPVSwyQkFBMkI7K0hBQTNCLDJCQUEyQiwyUENwQnhDLHNsRkE0RUE7MkZEeERhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx5QkFBeUI7Z05BTU8sU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQW9EakMsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1bGtSZWRhY3Rpb24sIFJlZGFjdGlvbiB9IGZyb20gJy4vLi4vLi4vcmVkYWN0aW9uL3NlcnZpY2VzL3JlZGFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHRzQ291bnQgfSBmcm9tICcuLy4uL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBSZWRhY3Rpb25TZWFyY2gsIFJlZGFjdFJlY3RhbmdsZSB9IGZyb20gJy4vcmVkYWN0aW9uLXNlYXJjaC5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItYnV0dG9uLXZpc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JlLCBzZWxlY3QgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgKiBhcyBmcm9tU3RvcmUgZnJvbSAnLi4vLi4vc3RvcmUvcmVkdWNlcnMvcmVkdWNlcnMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi12aWV3L3JlY3RhbmdsZS9yZWN0YW5nbGUubW9kZWwnO1xuaW1wb3J0ICogYXMgZnJvbURvY3VtZW50IGZyb20gJy4uLy4uL3N0b3JlL3NlbGVjdG9ycy9kb2N1bWVudC5zZWxlY3RvcnMnO1xuaW1wb3J0ICogYXMgZnJvbVJlZGFjdGlvbkFjdGlvbnMgZnJvbSAnLi4vLi4vc3RvcmUvYWN0aW9ucy9yZWRhY3Rpb24uYWN0aW9ucyc7XG5pbXBvcnQgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IEhpZ2hsaWdodENyZWF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9ucy9hbm5vdGF0aW9uLXNldC9hbm5vdGF0aW9uLWNyZWF0ZS9oaWdobGlnaHQtY3JlYXRlL2hpZ2hsaWdodC1jcmVhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LXJlZGFjdGlvbi1zZWFyY2gtYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZGFjdGlvbi1zZWFyY2gtYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVkYWN0aW9uLXNlYXJjaC1iYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWRhY3Rpb25TZWFyY2hCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnZmluZElucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgZmluZElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIGhpZ2hsaWdodEFsbCA9IHRydWU7XG4gIG1hdGNoQ2FzZSA9IGZhbHNlO1xuICB3aG9sZVdvcmQgPSBmYWxzZTtcbiAgcmVzdWx0c1RleHQgPSAnJztcbiAgc2VhcmNoVGV4dCA9ICcnO1xuICByZXN1bHRDb3VudCA9IDA7XG4gIHJlZGFjdEVsZW1lbnRzOiBSZWRhY3RSZWN0YW5nbGVbXSA9IFtdO1xuICBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIHBhZ2VXaWR0aDogbnVtYmVyO1xuICB6b29tOiBudW1iZXI7XG4gIHJvdGF0ZTogbnVtYmVyO1xuICBhbGxQYWdlczogb2JqZWN0O1xuICByZWRhY3RBbGw6IGJvb2xlYW47XG4gIG9wZW5TZWFyY2hNb2RhbDogYm9vbGVhbjtcbiAgcmVkYWN0QWxsSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgcmVkYWN0QWxsVGV4dD86IHN0cmluZztcblxuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZG9jdW1lbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2hWaXNpYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8ZnJvbVN0b3JlLlN0YXRlPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckJ1dHRvbnM6IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGlnaGxpZ2h0U2VydmljZTogSGlnaGxpZ2h0Q3JlYXRlU2VydmljZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0aW9uU2VyYWNoU3ViamVjdC5zdWJzY3JpYmUoKHJlc3VsdHM6IFJlZGFjdGlvblNlYXJjaCkgPT4gdGhpcy5yZWRhY3RBbGxTZWFyY2hlZChyZXN1bHRzKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbURvY3VtZW50LmdldERvY3VtZW50SWQpKS5zdWJzY3JpYmUoZG9jSWQgPT4gdGhpcy5kb2N1bWVudElkID0gZG9jSWQpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5zdG9yZS5waXBlKHNlbGVjdChmcm9tRG9jdW1lbnQuZ2V0UGFnZXMpKS5zdWJzY3JpYmUoKHBhZ2VzKSA9PiB7XG4gICAgICBpZiAocGFnZXNbMV0pIHtcbiAgICAgICAgdGhpcy5hbGxQYWdlcyA9IHBhZ2VzO1xuICAgICAgfVxuICAgIH0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoUmVzdWx0c0NvdW50U3ViamVjdC5zdWJzY3JpYmUocmVzdWx0cyA9PiB0aGlzLnNldFNlYXJjaFJlc3VsdHNDb3VudChyZXN1bHRzKSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRvb2xiYXJFdmVudHMub3BlblJlZGFjdGlvblNlYXJjaC5zdWJzY3JpYmUoaXNPcGVuID0+IHRoaXMub3BlblNlYXJjaE1vZGFsID0gaXNPcGVuKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMudG9vbGJhckV2ZW50cy5yZWRhY3RBbGxJblByb2dyZXNzU3ViamVjdFxuICAgICAgLnN1YnNjcmliZShpblByb2dyZXNzID0+IHRoaXMucmVkYWN0QWxsSW5Qcm9ncmVzcyA9IGluUHJvZ3Jlc3MpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbldpbmRvd0tleURvd24oZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChlLmNvZGUgPT09ICdGMycgfHwgKGUuY3RybEtleSAmJiBlLmNvZGUgPT09ICdLZXlGJykpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4ubmV4dChmYWxzZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZmluZElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBzZWFyY2gocmVzZXQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5yZWRhY3RBbGwgPSAhcmVzZXQ7XG4gICAgaWYgKHRoaXMucmVkYWN0QWxsKSB7XG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0QWxsSW5Qcm9ncmVzc1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKHJlc2V0KSB7XG4gICAgICB0aGlzLnJlZGFjdEVsZW1lbnRzID0gW107XG4gICAgfVxuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2goe1xuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgaGlnaGxpZ2h0QWxsOiB0aGlzLmhpZ2hsaWdodEFsbCxcbiAgICAgIG1hdGNoQ2FzZTogdGhpcy5tYXRjaENhc2UsXG4gICAgICB3aG9sZVdvcmQ6IHRoaXMud2hvbGVXb3JkLFxuICAgICAgcHJldmlvdXM6IGZhbHNlLFxuICAgICAgcmVzZXRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVJlZGFjdGlvbihyZWRhY3RSZWN0YW5nbGU6IFJlZGFjdFJlY3RhbmdsZVtdKSB7XG4gICAgY29uc3QgcmVkYWN0aW9uID0gcmVkYWN0UmVjdGFuZ2xlLm1hcChlbGUgPT4ge1xuICAgICAgcmV0dXJuIHsgcGFnZTogZWxlLnBhZ2UsIHJlY3RhbmdsZXM6IGVsZS5yZWN0YW5nbGVzLCByZWRhY3Rpb25JZDogdXVpZCgpLCBkb2N1bWVudElkOiB0aGlzLmRvY3VtZW50SWQgfSBhcyBSZWRhY3Rpb247XG4gICAgfSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgZnJvbVJlZGFjdGlvbkFjdGlvbnMuU2F2ZUJ1bGtSZWRhY3Rpb24oeyBzZWFyY2hSZWRhY3Rpb25zOiByZWRhY3Rpb24gfSBhcyBCdWxrUmVkYWN0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGV4aXN0SW5SZWRhY3RFbGVtZW50cyhwYWdlTnVtYmVyOiBudW1iZXIsIG1hdGVjaGVkSW5kZXg6IG51bWJlciwgcmVjdGFuZ2xlczogUmVjdGFuZ2xlW10pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5yZWRhY3RFbGVtZW50cyAmJiB0aGlzLnJlZGFjdEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhZ2VzRm91bmQgPSB0aGlzLnJlZGFjdEVsZW1lbnRzLmZpbmQocmUgPT4gcmUucGFnZSA9PT0gcGFnZU51bWJlciAmJiByZS5tYXRjaGVkSW5kZXggPT09IG1hdGVjaGVkSW5kZXgpO1xuICAgICAgY29uc3QgcGFnZVJlY3RhbmdsZXMgPSBwYWdlc0ZvdW5kPy5yZWN0YW5nbGVzO1xuICAgICAgaWYgKCFwYWdlUmVjdGFuZ2xlcyB8fCBwYWdlUmVjdGFuZ2xlcy5sZW5ndGggPD0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgbWF0Y2hlc1JlY3RhbmdsZXMgPSAwO1xuICAgICAgZm9yIChsZXQgcmVjdEluZHggPSAwOyByZWN0SW5keCA8IHBhZ2VSZWN0YW5nbGVzLmxlbmd0aDsgcmVjdEluZHgrKykge1xuICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBwYWdlUmVjdGFuZ2xlc1tyZWN0SW5keF07XG4gICAgICAgIGNvbnN0IGZvdW5kUmVjdGFuZ2xlID0gcmVjdGFuZ2xlcy5maW5kKHJlID0+IHJlLndpZHRoID09PSByZWN0YW5nbGUud2lkdGggJiZcbiAgICAgICAgICByZS5oZWlnaHQgPT09IHJlY3RhbmdsZS5oZWlnaHQgJiYgcmUueCA9PT0gcmVjdGFuZ2xlLnggJiYgcmUueSA9PT0gcmVjdGFuZ2xlLnkpO1xuICAgICAgICBpZiAoZm91bmRSZWN0YW5nbGUpIHtcbiAgICAgICAgICBtYXRjaGVzUmVjdGFuZ2xlcysrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFnZVJlY3RhbmdsZXMubGVuZ3RoID09PSBtYXRjaGVzUmVjdGFuZ2xlcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb25DbG9zZVNlYXJjaE1vZGFsKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5vcGVuUmVkYWN0aW9uU2VhcmNoLm5leHQoZmFsc2UpO1xuICB9XG5cblxuICBwcml2YXRlIHNldFNlYXJjaFJlc3VsdHNDb3VudChyZXN1bHRzOiBTZWFyY2hSZXN1bHRzQ291bnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlc3VsdENvdW50ID0gcmVzdWx0cy50b3RhbDtcbiAgICB0aGlzLnJlc3VsdHNUZXh0ID0gdGhpcy5yZXN1bHRDb3VudCA+IDBcbiAgICAgID8gYCR7cmVzdWx0cy50b3RhbH0gcmVzdWx0cyBmb3VuZHNgXG4gICAgICA6ICdObyByZXN1bHRzIGZvdW5kJztcbiAgfVxuXG4gIHByaXZhdGUgcmVkYWN0QWxsU2VhcmNoZWQocmVzdWx0czogUmVkYWN0aW9uU2VhcmNoKTogdm9pZCB7XG4gICAgY29uc3QgJHRoaXMgPSB0aGlzO1xuICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBoaWdobGlnaHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGlnaGxpZ2h0IHNlbGVjdGVkJyk7XG4gICAgICBpZiAoaGlnaGxpZ2h0RWxlbWVudCAmJiBoaWdobGlnaHRFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgJHRoaXMucmVkYWN0QWxsU2VhcmNoZWRUaWNrKHJlc3VsdHMpO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cblxuXG4gIHByaXZhdGUgcmVkYWN0QWxsU2VhcmNoZWRUaWNrKHJlc3VsdHM6IFJlZGFjdGlvblNlYXJjaCk6IHZvaWQge1xuICAgIGNvbnN0IGhpZ2hsaWdodEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHQgc2VsZWN0ZWQnKTtcbiAgICBpZiAoaGlnaGxpZ2h0RWxlbWVudCAmJiBoaWdobGlnaHRFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzdWx0Q291bnQgPSByZXN1bHRzLm1hdGNoZXNDb3VudDtcbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSByZXN1bHRzLnBhZ2UgKyAxO1xuICAgICAgY29uc3QgcmVjdGFuZ2xlcyA9IHRoaXMuZ2V0UmVjdGFuZ2xlcyhwYWdlTnVtYmVyKTtcbiAgICAgIGlmIChyZWN0YW5nbGVzICYmIHRoaXMucmVkYWN0RWxlbWVudHMubGVuZ3RoIDw9IHRoaXMucmVzdWx0Q291bnRcbiAgICAgICAgJiYgIXRoaXMuZXhpc3RJblJlZGFjdEVsZW1lbnRzKHBhZ2VOdW1iZXIsIHJlc3VsdHMubWF0Y2hlZEluZGV4LCByZWN0YW5nbGVzKSkge1xuICAgICAgICB0aGlzLnJlZGFjdEVsZW1lbnRzLnB1c2goeyBwYWdlOiBwYWdlTnVtYmVyLCBtYXRjaGVkSW5kZXg6IHJlc3VsdHM/Lm1hdGNoZWRJbmRleCwgcmVjdGFuZ2xlcyB9IGFzIFJlZGFjdFJlY3RhbmdsZSk7XG4gICAgICAgIHRoaXMuQ3JlYXRlUmVkYWN0QWxsVGV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVkYWN0QWxsICYmIHRoaXMucmVzdWx0Q291bnQgJiYgdGhpcy5yZXN1bHRDb3VudCA+IDBcbiAgICAgICAgJiYgcmVjdGFuZ2xlcyAmJiB0aGlzLnJlZGFjdEVsZW1lbnRzLmxlbmd0aCA8IHRoaXMucmVzdWx0Q291bnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2goZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yZWRhY3RBbGwgJiYgdGhpcy5yZXN1bHRDb3VudCAmJiB0aGlzLnJlZGFjdEVsZW1lbnRzLmxlbmd0aCA9PT0gdGhpcy5yZXN1bHRDb3VudCkge1xuICAgICAgICB0aGlzLnJlZGFjdEFsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlZGFjdEFsbFRleHQgPSBudWxsO1xuICAgICAgICB0aGlzLnNhdmVSZWRhY3Rpb24odGhpcy5yZWRhY3RFbGVtZW50cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVSZWRhY3RBbGxUZXh0KCkge1xuICAgIHRoaXMucmVkYWN0QWxsVGV4dCA9IGAke3RoaXMucmVkYWN0RWxlbWVudHMubGVuZ3RofSBvZiAke3RoaXMucmVzdWx0Q291bnR9YDtcbiAgfVxuXG4gIHB1YmxpYyBvbkVzY2FwZUtleVByZXNzKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25FbnRlcktleVByZXNzKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaCgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlYXJjaEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLm5leHQoIXRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4uZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RhbmdsZXMocGFnZTogbnVtYmVyKTogUmVjdGFuZ2xlW10ge1xuICAgIHRoaXMucGFnZUhlaWdodCA9IHRoaXMuYWxsUGFnZXNbcGFnZV0uc3R5bGVzLmhlaWdodDtcbiAgICB0aGlzLnBhZ2VXaWR0aCA9IHRoaXMuYWxsUGFnZXNbcGFnZV0uc3R5bGVzLndpZHRoO1xuICAgIHRoaXMuem9vbSA9IHBhcnNlRmxvYXQodGhpcy5hbGxQYWdlc1twYWdlXS5zY2FsZVJvdGF0aW9uLnNjYWxlKTtcbiAgICB0aGlzLnJvdGF0ZSA9IHBhcnNlSW50KHRoaXMuYWxsUGFnZXNbcGFnZV0uc2NhbGVSb3RhdGlvbi5yb3RhdGlvbiwgMTApO1xuICAgIGNvbnN0IHNlbGVjdGVkSGlnaExpZ2h0ZWRFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodCBzZWxlY3RlZCcpO1xuICAgIGlmIChzZWxlY3RlZEhpZ2hMaWdodGVkRWxlbWVudHMgJiYgc2VsZWN0ZWRIaWdoTGlnaHRlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRvY1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGRvY1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhzZWxlY3RlZEhpZ2hMaWdodGVkRWxlbWVudHNbMF0gYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UoZG9jUmFuZ2UpO1xuICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ICYmICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICAgICAgICBpZiAoY2xpZW50UmVjdHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRSZWN0ID0gc2VsZWN0ZWRIaWdoTGlnaHRlZEVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25SZWN0YW5nbGVzOiBSZWN0YW5nbGVbXSA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xpZW50UmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IHRoaXMuY3JlYXRlVGV4dFJlY3RhbmdsZShjbGllbnRSZWN0c1tpXSwgcGFyZW50UmVjdCk7XG4gICAgICAgICAgICBjb25zdCBmaW5kU2VsZWN0dGlvblJlY3RhbmdsZSA9IHNlbGVjdGlvblJlY3RhbmdsZXMuZmluZChcbiAgICAgICAgICAgICAgKHJlY3QpID0+IHJlY3Qud2lkdGggPT09IHNlbGVjdGlvblJlY3RhbmdsZS53aWR0aCAmJiByZWN0LnggPT09IHNlbGVjdGlvblJlY3RhbmdsZS54XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFmaW5kU2VsZWN0dGlvblJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0YW5nbGVzLnB1c2goc2VsZWN0aW9uUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uUmVjdGFuZ2xlcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGV4dFJlY3RhbmdsZShyZWN0OiBET01SZWN0LCBwYXJlbnRSZWN0OiBhbnkpOiBSZWN0YW5nbGUge1xuICAgIGNvbnN0IGhlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7XG4gICAgY29uc3Qgd2lkdGggPSByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IHJlY3QudG9wIC0gcGFyZW50UmVjdC50b3A7XG4gICAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdDtcblxuICAgIGxldCByZWN0YW5nbGUgPSB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuYXBwbHlSb3RhdGlvbihcbiAgICAgIHRoaXMucGFnZUhlaWdodCxcbiAgICAgIHRoaXMucGFnZVdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgd2lkdGgsXG4gICAgICB0b3AsXG4gICAgICBsZWZ0LFxuICAgICAgdGhpcy5yb3RhdGUsXG4gICAgICB0aGlzLnpvb21cbiAgICApO1xuICAgIHJlY3RhbmdsZSA9IHsgaWQ6IHV1aWQoKSwgLi4ucmVjdGFuZ2xlIH07XG5cbiAgICByZXR1cm4gcmVjdGFuZ2xlIGFzIFJlY3RhbmdsZTtcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cIm9wZW5TZWFyY2hNb2RhbFwiXG4gIGNsYXNzPVwic2VhcmNoYmFyIHJlZGFjdGlvbi1zZWFyY2gtYmFyIGdvdnVrLSEtcGFkZGluZy0zXCJcbj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstIS1wYWRkaW5nLXJpZ2h0LTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWRhY3Rpb24tc2VhcmNoLWJ1dHRvbnMtYXJlYVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgaWQ9XCJtdkNsb3NlQnRuXCJcbiAgICAgICAgICAjbXZDbG9zZUJ0blxuICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIHNlYXJjaGJhci1idXR0b24tLWNsb3NlXCJcbiAgICAgICAgICB0aXRsZT1cIkNsb3NlIFNlYXJjaFwiXG4gICAgICAgICAgZGF0YS1sMTBuLWlkPVwibXZSZWRhY3RCdG5cIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlU2VhcmNoTW9kYWwoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwic2VhcmNoX2lucHV0XCJcbiAgICAgICAgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay0hLXdpZHRoLXRocmVlLXF1YXJ0ZXJzIGdvdnVrLSEtZGlzcGxheS1pbmxpbmUtYmxvY2sgZ292dWstIS1tYXJnaW4tdG9wLTVcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJGaW5kIGluIGRvY3VtZW50XCJcbiAgICAgICAgI2ZpbmRJbnB1dFxuICAgICAgICB0aXRsZT1cIkZpbmQgaW4gZG9jdW1lbnRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlJlZGFjdCBmcm9tIHNlYXJjaC4uLlwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGRhdGEtbDEwbi1pZD1cInNlYXJjaF9pbnB1dFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJvbkVzY2FwZUtleVByZXNzKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzcz1cInJlZGFjdGlvbi1zZWFyY2gtYnV0dG9ucy1hcmVhXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBpZD1cIm12U2VhcmNoQWxsQnRuXCJcbiAgICAgICAgICBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiXG4gICAgICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICA+XG4gICAgICAgICAgU2VhcmNoXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgaWQ9XCJtdlJlZGFjdEFsbEJ0blwiXG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1idXR0b24gZ292dWstIS1tYXJnaW4tbGVmdC0yIGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCJcbiAgICAgICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlYXJjaChmYWxzZSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgPlxuICAgICAgICAgIFJlZGFjdCBhbGxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10aHJlZS1xdWFydGVycyBnb3Z1ay0hLXBhZGRpbmctbGVmdC0wIGdvdnVrLSEtcGFkZGluZy10b3AtMiByZWRhY3Rpb24tc3RhdHVzLXRleHRcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGlkPVwiZmluZFJlZGFjdFJlc3VsdHNDb3VudFwiXG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTQgZ292dWstIS1tYXJnaW4tbGVmdC0wIGdvdnVrLSEtcGFkZGluZy1sZWZ0LTBcIlxuICAgICAgICAgID48aDRcbiAgICAgICAgICAgIGNsYXNzPVwiZ292dWstIS1kaXNwbGF5LWlubGluZS1ibG9jayBnb3Z1ay0hLW1hcmdpbi10b3AtMCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMVwiXG4gICAgICAgICAgICAqbmdJZj1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFJlZGFjdGluZyBpbiBwcm9ncmVzc1xuICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAge3sgcmVkYWN0QWxsSW5Qcm9ncmVzcyA/IFwiXCIgOiByZXN1bHRzVGV4dCB9fTwvc3BhblxuICAgICAgICA+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxoNVxuICAgICAgICAgICAgaWQ9XCJyZWRhY3RBbGxJblByb2dyZXNzQ291bnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJnb3Z1ay0hLWRpc3BsYXktaW5saW5lLWJsb2NrIGdvdnVrLSEtbWFyZ2luLXRvcC0wIGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyByZWRhY3RBbGxJblByb2dyZXNzID8gcmVkYWN0QWxsVGV4dCA6IFwiXCIgfX1cbiAgICAgICAgICA8L2g1PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,66 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { select } from '@ngrx/store';
3
+ import * as fromRedactSelectors from '../../store/selectors/redaction.selectors';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../toolbar-event.service";
6
+ import * as i2 from "../toolbar-button-visibility.service";
7
+ import * as i3 from "@ngrx/store";
8
+ import * as i4 from "@angular/common";
9
+ export class RedactionToolbarComponent {
10
+ constructor(toolbarEventService, toolbarButtons, store) {
11
+ this.toolbarEventService = toolbarEventService;
12
+ this.toolbarButtons = toolbarButtons;
13
+ this.store = store;
14
+ this.preview = false;
15
+ this.hasRedactions = false;
16
+ this.subscriptions = [];
17
+ }
18
+ ngOnInit() {
19
+ this.subscriptions.push(this.store.pipe(select(fromRedactSelectors.getRedactionArray)).subscribe(redactions => {
20
+ this.hasRedactions = !!redactions.redactions.length;
21
+ }));
22
+ this.subscriptions.push(this.toolbarEventService.redactAllInProgressSubject.subscribe(inprogress => {
23
+ this.redactionAllInProgress = inprogress;
24
+ }));
25
+ }
26
+ onRedactAllSearch() {
27
+ this.toolbarEventService.openRedactionSearch.next(true);
28
+ }
29
+ toggleTextRedactionMode() {
30
+ this.toolbarEventService.highlightModeSubject.next(true);
31
+ }
32
+ toggleDrawMode() {
33
+ this.toolbarEventService.drawModeSubject.next(true);
34
+ }
35
+ togglePreview() {
36
+ this.preview = !this.preview;
37
+ this.toolbarEventService.toggleRedactionPreview(this.preview);
38
+ }
39
+ unmarkAll() {
40
+ this.toolbarEventService.unmarkAll();
41
+ }
42
+ redact() {
43
+ this.toolbarEventService.applyRedactionToDocument();
44
+ }
45
+ toggleRedactBar() {
46
+ this.toolbarEventService.toggleRedactionMode();
47
+ }
48
+ redactPage() {
49
+ this.toolbarEventService.drawModeSubject.next(true);
50
+ this.toolbarEventService.redactPage();
51
+ }
52
+ ngOnDestroy() {
53
+ for (const subscription of this.subscriptions) {
54
+ subscription.unsubscribe();
55
+ }
56
+ }
57
+ }
58
+ /** @nocollapse */ RedactionToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedactionToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }, { token: i3.Store }], target: i0.ɵɵFactoryTarget.Component });
59
+ /** @nocollapse */ RedactionToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RedactionToolbarComponent, selector: "mv-redaction-toolbar", inputs: { showRedactSearch: "showRedactSearch" }, ngImport: i0, template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >Redaction options</label\n >\n <button\n id=\"toggleDrawButton\"\n class=\"mv-button redaction-button--draw\"\n title=\"Draw a box\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"toggleDrawMode()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"toggleDrawButton_label\">Draw a box</span>\n </button>\n\n <button\n id=\"redactPageButton\"\n class=\"mv-button redaction-button--redact-page\"\n title=\"Redact Page\"\n data-l10n-id=\"redactPageButton\"\n (click)=\"redactPage()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"redactPageButton_label\">Redact page</span>\n </button>\n <button\n *ngIf=\"showRedactSearch\"\n id=\"mvRedactFromSearchBtn\"\n title=\"From search\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search\"\n (click)=\"onRedactAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >From search</span\n >\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n id=\"toggleHighlightButton\"\n class=\"mv-button redaction-button--redact\"\n aria-pressed=\"false\"\n title=\"Redact text\"\n data-l10n-id=\"toggleTextRedactionButton\"\n (click)=\"toggleTextRedactionMode()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"toggleTextRedactionButton_label\">Redact text</span>\n </button>\n\n <button\n [disabled]=\"!hasRedactions || redactionAllInProgress\"\n id=\"mvClearBtn\"\n #mvClearBtn\n class=\"mv-button redaction-button--clear\"\n aria-pressed=\"false\"\n title=\"Clear all\"\n data-l10n-id=\"toggleClearAllButton\"\n (click)=\"unmarkAll()\"\n >\n <span data-l10n-id=\"Clear all\">Clear all</span>\n </button>\n\n <button\n [disabled]=\"!hasRedactions || redactionAllInProgress\"\n id=\"mvPreviewBtn\"\n class=\"mv-button\"\n [class.redaction-button--preview]=\"!preview\"\n [class.redaction-button--hide-preview]=\"preview\"\n redaction-button--preview\n aria-pressed=\"false\"\n title=\"Preview\"\n data-l10n-id=\"togglePreviewButton\"\n (click)=\"togglePreview()\"\n >\n <span *ngIf=\"!preview\" data-l10n-id=\"redaction-preview_label\">Preview</span>\n <span *ngIf=\"preview\" data-l10n-id=\"redaction-hide-preview_label\"\n >Hide preview</span\n >\n </button>\n\n <button\n [disabled]=\"!hasRedactions || redactionAllInProgress\"\n id=\"mvRedactBtn\"\n class=\"mv-button redaction-button--download\"\n aria-pressed=\"false\"\n title=\"Redact\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"redact()\"\n >\n <span data-l10n-id=\"Save Document\">Save document</span>\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close\"\n title=\"Close Redaction\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"toggleRedactBar()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">Close Redaction</span>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedactionToolbarComponent, decorators: [{
61
+ type: Component,
62
+ args: [{ selector: 'mv-redaction-toolbar', template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >Redaction options</label\n >\n <button\n id=\"toggleDrawButton\"\n class=\"mv-button redaction-button--draw\"\n title=\"Draw a box\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"toggleDrawMode()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"toggleDrawButton_label\">Draw a box</span>\n </button>\n\n <button\n id=\"redactPageButton\"\n class=\"mv-button redaction-button--redact-page\"\n title=\"Redact Page\"\n data-l10n-id=\"redactPageButton\"\n (click)=\"redactPage()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"redactPageButton_label\">Redact page</span>\n </button>\n <button\n *ngIf=\"showRedactSearch\"\n id=\"mvRedactFromSearchBtn\"\n title=\"From search\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search\"\n (click)=\"onRedactAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >From search</span\n >\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n id=\"toggleHighlightButton\"\n class=\"mv-button redaction-button--redact\"\n aria-pressed=\"false\"\n title=\"Redact text\"\n data-l10n-id=\"toggleTextRedactionButton\"\n (click)=\"toggleTextRedactionMode()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"toggleTextRedactionButton_label\">Redact text</span>\n </button>\n\n <button\n [disabled]=\"!hasRedactions || redactionAllInProgress\"\n id=\"mvClearBtn\"\n #mvClearBtn\n class=\"mv-button redaction-button--clear\"\n aria-pressed=\"false\"\n title=\"Clear all\"\n data-l10n-id=\"toggleClearAllButton\"\n (click)=\"unmarkAll()\"\n >\n <span data-l10n-id=\"Clear all\">Clear all</span>\n </button>\n\n <button\n [disabled]=\"!hasRedactions || redactionAllInProgress\"\n id=\"mvPreviewBtn\"\n class=\"mv-button\"\n [class.redaction-button--preview]=\"!preview\"\n [class.redaction-button--hide-preview]=\"preview\"\n redaction-button--preview\n aria-pressed=\"false\"\n title=\"Preview\"\n data-l10n-id=\"togglePreviewButton\"\n (click)=\"togglePreview()\"\n >\n <span *ngIf=\"!preview\" data-l10n-id=\"redaction-preview_label\">Preview</span>\n <span *ngIf=\"preview\" data-l10n-id=\"redaction-hide-preview_label\"\n >Hide preview</span\n >\n </button>\n\n <button\n [disabled]=\"!hasRedactions || redactionAllInProgress\"\n id=\"mvRedactBtn\"\n class=\"mv-button redaction-button--download\"\n aria-pressed=\"false\"\n title=\"Redact\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"redact()\"\n >\n <span data-l10n-id=\"Save Document\">Save document</span>\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close\"\n title=\"Close Redaction\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"toggleRedactBar()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">Close Redaction</span>\n </button>\n</div>\n" }]
63
+ }], ctorParameters: function () { return [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }, { type: i3.Store }]; }, propDecorators: { showRedactSearch: [{
64
+ type: Input
65
+ }] } });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdG9vbGJhci9yZWRhY3Rpb24tdG9vbGJhci9yZWRhY3Rpb24tdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3JlZGFjdGlvbi10b29sYmFyL3JlZGFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7O0FBVWpGLE1BQU0sT0FBTyx5QkFBeUI7SUFVcEMsWUFBNEIsbUJBQXdDLEVBQ2xELGNBQThDLEVBQ3RELEtBQTBDO1FBRnhCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDbEQsbUJBQWMsR0FBZCxjQUFjLENBQWdDO1FBQ3RELFVBQUssR0FBTCxLQUFLLENBQXFDO1FBUnBELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFZCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFLYSxDQUFDO0lBRXpELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1RyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzdDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7O3lJQTdEVSx5QkFBeUI7NkhBQXpCLHlCQUF5Qiw4R0NidEMsNnJHQTJHQTsyRkQ5RmEseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLHNCQUFzQjsyS0FLdkIsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCAqIGFzIGZyb21SZWRhY3RTZWxlY3RvcnMgZnJvbSAnLi4vLi4vc3RvcmUvc2VsZWN0b3JzL3JlZGFjdGlvbi5zZWxlY3RvcnMnO1xuaW1wb3J0ICogYXMgZnJvbVN0b3JlIGZyb20gJy4uLy4uL3N0b3JlL3JlZHVjZXJzL3JlZHVjZXJzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVG9vbGJhckJ1dHRvblZpc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1idXR0b24tdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IFRoaXNSZWNlaXZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtcmVkYWN0aW9uLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVkYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFJlZGFjdGlvblRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgc2hvd1JlZGFjdFNlYXJjaDogYm9vbGVhbjtcblxuICBwcmV2aWV3ID0gZmFsc2U7XG4gIGhhc1JlZGFjdGlvbnMgPSBmYWxzZTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHJlZGFjdGlvbkFsbEluUHJvZ3Jlc3M6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudFNlcnZpY2U6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJCdXR0b25zOiBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8ZnJvbVN0b3JlLkFubm90YXRpb25TZXRTdGF0ZT4pIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbVJlZGFjdFNlbGVjdG9ycy5nZXRSZWRhY3Rpb25BcnJheSkpLnN1YnNjcmliZShyZWRhY3Rpb25zID0+IHtcbiAgICAgIHRoaXMuaGFzUmVkYWN0aW9ucyA9ICEhcmVkYWN0aW9ucy5yZWRhY3Rpb25zLmxlbmd0aDtcbiAgICB9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLnJlZGFjdEFsbEluUHJvZ3Jlc3NTdWJqZWN0LnN1YnNjcmliZShpbnByb2dyZXNzID0+IHtcbiAgICAgIHRoaXMucmVkYWN0aW9uQWxsSW5Qcm9ncmVzcyA9IGlucHJvZ3Jlc3M7XG4gICAgfSkpO1xuICB9XG5cbiAgb25SZWRhY3RBbGxTZWFyY2goKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLm9wZW5SZWRhY3Rpb25TZWFyY2gubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZVRleHRSZWRhY3Rpb25Nb2RlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5oaWdobGlnaHRNb2RlU3ViamVjdC5uZXh0KHRydWUpO1xuICB9XG5cbiAgdG9nZ2xlRHJhd01vZGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLmRyYXdNb2RlU3ViamVjdC5uZXh0KHRydWUpO1xuICB9XG5cbiAgdG9nZ2xlUHJldmlldygpIHtcbiAgICB0aGlzLnByZXZpZXcgPSAhdGhpcy5wcmV2aWV3O1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS50b2dnbGVSZWRhY3Rpb25QcmV2aWV3KHRoaXMucHJldmlldyk7XG4gIH1cblxuICB1bm1hcmtBbGwoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLnVubWFya0FsbCgpO1xuICB9XG5cbiAgcmVkYWN0KCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5hcHBseVJlZGFjdGlvblRvRG9jdW1lbnQoKTtcbiAgfVxuXG4gIHRvZ2dsZVJlZGFjdEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UudG9nZ2xlUmVkYWN0aW9uTW9kZSgpO1xuICB9XG5cbiAgcmVkYWN0UGFnZSgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UuZHJhd01vZGVTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLnJlZGFjdFBhZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicmVkYWN0aW9uXCI+XG4gIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIHJlZGFjdGlvbi10aXRsZVwiIGRhdGEtbDEwbi1pZD1cInJlZGFjdGlvbl9vcHRpb25zXCJcbiAgICA+UmVkYWN0aW9uIG9wdGlvbnM8L2xhYmVsXG4gID5cbiAgPGJ1dHRvblxuICAgIGlkPVwidG9nZ2xlRHJhd0J1dHRvblwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gcmVkYWN0aW9uLWJ1dHRvbi0tZHJhd1wiXG4gICAgdGl0bGU9XCJEcmF3IGEgYm94XCJcbiAgICBkYXRhLWwxMG4taWQ9XCJ0b2dnbGVEcmF3QnV0dG9uXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRHJhd01vZGUoKVwiXG4gICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkFsbEluUHJvZ3Jlc3NcIlxuICA+XG4gICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwidG9nZ2xlRHJhd0J1dHRvbl9sYWJlbFwiPkRyYXcgYSBib3g8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBpZD1cInJlZGFjdFBhZ2VCdXR0b25cIlxuICAgIGNsYXNzPVwibXYtYnV0dG9uIHJlZGFjdGlvbi1idXR0b24tLXJlZGFjdC1wYWdlXCJcbiAgICB0aXRsZT1cIlJlZGFjdCBQYWdlXCJcbiAgICBkYXRhLWwxMG4taWQ9XCJyZWRhY3RQYWdlQnV0dG9uXCJcbiAgICAoY2xpY2spPVwicmVkYWN0UGFnZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJyZWRhY3RQYWdlQnV0dG9uX2xhYmVsXCI+UmVkYWN0IHBhZ2U8L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJzaG93UmVkYWN0U2VhcmNoXCJcbiAgICBpZD1cIm12UmVkYWN0RnJvbVNlYXJjaEJ0blwiXG4gICAgdGl0bGU9XCJGcm9tIHNlYXJjaFwiXG4gICAgZGF0YS1sMTBuLWlkPVwiZnJvbVNlYXJjaEJ1dHRvblwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gcmVkYWN0aW9uLWJ1dHRvbi0tc2VhcmNoXCJcbiAgICAoY2xpY2spPVwib25SZWRhY3RBbGxTZWFyY2goKVwiXG4gICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkFsbEluUHJvZ3Jlc3NcIlxuICA+XG4gICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogNXJlbVwiIGRhdGEtbDEwbi1pZD1cImZyb21TZWFyY2hCdXR0b25fbGFiZWxcIlxuICAgICAgPkZyb20gc2VhcmNoPC9zcGFuXG4gICAgPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93SGlnaGxpZ2h0QnV0dG9uXCJcbiAgICBpZD1cInRvZ2dsZUhpZ2hsaWdodEJ1dHRvblwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gcmVkYWN0aW9uLWJ1dHRvbi0tcmVkYWN0XCJcbiAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgdGl0bGU9XCJSZWRhY3QgdGV4dFwiXG4gICAgZGF0YS1sMTBuLWlkPVwidG9nZ2xlVGV4dFJlZGFjdGlvbkJ1dHRvblwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZVRleHRSZWRhY3Rpb25Nb2RlKClcIlxuICAgIFtkaXNhYmxlZF09XCJyZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgPlxuICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cInRvZ2dsZVRleHRSZWRhY3Rpb25CdXR0b25fbGFiZWxcIj5SZWRhY3QgdGV4dDwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCIhaGFzUmVkYWN0aW9ucyB8fCByZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgICBpZD1cIm12Q2xlYXJCdG5cIlxuICAgICNtdkNsZWFyQnRuXG4gICAgY2xhc3M9XCJtdi1idXR0b24gcmVkYWN0aW9uLWJ1dHRvbi0tY2xlYXJcIlxuICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICB0aXRsZT1cIkNsZWFyIGFsbFwiXG4gICAgZGF0YS1sMTBuLWlkPVwidG9nZ2xlQ2xlYXJBbGxCdXR0b25cIlxuICAgIChjbGljayk9XCJ1bm1hcmtBbGwoKVwiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJDbGVhciBhbGxcIj5DbGVhciBhbGw8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBbZGlzYWJsZWRdPVwiIWhhc1JlZGFjdGlvbnMgfHwgcmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gICAgaWQ9XCJtdlByZXZpZXdCdG5cIlxuICAgIGNsYXNzPVwibXYtYnV0dG9uXCJcbiAgICBbY2xhc3MucmVkYWN0aW9uLWJ1dHRvbi0tcHJldmlld109XCIhcHJldmlld1wiXG4gICAgW2NsYXNzLnJlZGFjdGlvbi1idXR0b24tLWhpZGUtcHJldmlld109XCJwcmV2aWV3XCJcbiAgICByZWRhY3Rpb24tYnV0dG9uLS1wcmV2aWV3XG4gICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgIHRpdGxlPVwiUHJldmlld1wiXG4gICAgZGF0YS1sMTBuLWlkPVwidG9nZ2xlUHJldmlld0J1dHRvblwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZVByZXZpZXcoKVwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cIiFwcmV2aWV3XCIgZGF0YS1sMTBuLWlkPVwicmVkYWN0aW9uLXByZXZpZXdfbGFiZWxcIj5QcmV2aWV3PC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwicHJldmlld1wiIGRhdGEtbDEwbi1pZD1cInJlZGFjdGlvbi1oaWRlLXByZXZpZXdfbGFiZWxcIlxuICAgICAgPkhpZGUgcHJldmlldzwvc3BhblxuICAgID5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCIhaGFzUmVkYWN0aW9ucyB8fCByZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgICBpZD1cIm12UmVkYWN0QnRuXCJcbiAgICBjbGFzcz1cIm12LWJ1dHRvbiByZWRhY3Rpb24tYnV0dG9uLS1kb3dubG9hZFwiXG4gICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgIHRpdGxlPVwiUmVkYWN0XCJcbiAgICBkYXRhLWwxMG4taWQ9XCJtdlJlZGFjdEJ0blwiXG4gICAgKGNsaWNrKT1cInJlZGFjdCgpXCJcbiAgPlxuICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cIlNhdmUgRG9jdW1lbnRcIj5TYXZlIGRvY3VtZW50PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgaWQ9XCJtdkNsb3NlQnRuXCJcbiAgICAjbXZDbG9zZUJ0blxuICAgIGNsYXNzPVwibXYtYnV0dG9uIHJlZGFjdGlvbi1idXR0b24tLWNsb3NlXCJcbiAgICB0aXRsZT1cIkNsb3NlIFJlZGFjdGlvblwiXG4gICAgZGF0YS1sMTBuLWlkPVwibXZSZWRhY3RCdG5cIlxuICAgIChjbGljayk9XCJ0b2dnbGVSZWRhY3RCYXIoKVwiXG4gICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkFsbEluUHJvZ3Jlc3NcIlxuICA+XG4gICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiQ2xvc2UgUmVkYWN0aW9uXCI+Q2xvc2UgUmVkYWN0aW9uPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,105 @@
1
+ import { Component, HostListener, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../toolbar-button-visibility.service";
4
+ import * as i2 from "../toolbar-event.service";
5
+ import * as i3 from "@angular/common";
6
+ import * as i4 from "@angular/forms";
7
+ import * as i5 from "@angular/router";
8
+ export class SearchBarComponent {
9
+ constructor(toolbarButtons, toolbarEvents) {
10
+ this.toolbarButtons = toolbarButtons;
11
+ this.toolbarEvents = toolbarEvents;
12
+ this.highlightAll = true;
13
+ this.matchCase = false;
14
+ this.wholeWord = false;
15
+ this.resultsText = '';
16
+ this.searchText = '';
17
+ this.resultCount = 0;
18
+ this.subscriptions = [];
19
+ this.advancedSearchVisible = false;
20
+ }
21
+ ngOnInit() {
22
+ this.subscriptions.push(this.toolbarEvents.searchResultsCountSubject.subscribe(results => this.setSearchResultsCount(results)));
23
+ }
24
+ ngOnDestroy() {
25
+ for (const subscription of this.subscriptions) {
26
+ subscription.unsubscribe();
27
+ }
28
+ }
29
+ onWindowKeyDown(e) {
30
+ if (e.code === 'F3' || (e.ctrlKey && e.code === 'KeyF')) {
31
+ e.preventDefault();
32
+ this.toolbarEvents.searchBarHidden.next(false);
33
+ setTimeout(() => this.findInput.nativeElement.focus(), 200);
34
+ }
35
+ }
36
+ searchNext() {
37
+ this.toolbarEvents.search({
38
+ searchTerm: this.searchText,
39
+ highlightAll: this.highlightAll,
40
+ matchCase: this.matchCase,
41
+ wholeWord: this.wholeWord,
42
+ previous: false,
43
+ reset: false
44
+ });
45
+ }
46
+ searchPrev() {
47
+ this.toolbarEvents.search({
48
+ searchTerm: this.searchText,
49
+ highlightAll: this.highlightAll,
50
+ matchCase: this.matchCase,
51
+ wholeWord: this.wholeWord,
52
+ previous: true,
53
+ reset: false
54
+ });
55
+ }
56
+ search() {
57
+ this.toolbarEvents.search({
58
+ searchTerm: this.searchText,
59
+ highlightAll: this.highlightAll,
60
+ matchCase: this.matchCase,
61
+ wholeWord: this.wholeWord,
62
+ previous: false,
63
+ reset: true
64
+ });
65
+ }
66
+ setSearchResultsCount(results) {
67
+ this.resultCount = results.total;
68
+ this.resultsText = this.resultCount > 0
69
+ ? `Found ${results.current} of ${results.total}`
70
+ : 'No results found';
71
+ if (this.resultCount && this.resultCount > 0) {
72
+ setTimeout(() => {
73
+ this.findNext.nativeElement.focus();
74
+ }, 1000);
75
+ }
76
+ }
77
+ onEscapeKeyPress(e) {
78
+ this.toolbarEvents.searchBarHidden.next(true);
79
+ }
80
+ onEnterKeyPress(e) {
81
+ this.search();
82
+ }
83
+ toggleAdvancedSearch() {
84
+ this.advancedSearchVisible = !this.advancedSearchVisible;
85
+ }
86
+ toggleSearchBar() {
87
+ this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());
88
+ }
89
+ }
90
+ /** @nocollapse */ SearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SearchBarComponent, deps: [{ token: i1.ToolbarButtonVisibilityService }, { token: i2.ToolbarEventService }], target: i0.ɵɵFactoryTarget.Component });
91
+ /** @nocollapse */ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SearchBarComponent, selector: "mv-search-bar", host: { listeners: { "window:keydown": "onWindowKeyDown($event)" } }, viewQueries: [{ propertyName: "findInput", first: true, predicate: ["findInput"], descendants: true, static: true }, { propertyName: "findNext", first: true, predicate: ["findNext"], descendants: true }], ngImport: i0, template: "<div class=\"searchbar govuk-!-padding-3\" [hidden]=\"toolbarEvents.searchBarHidden | async\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <input class=\"govuk-input govuk-!-display-inline-block govuk-!-width-three-quarters govuk-!-margin-bottom-5 govuk-!-margin-top-5\"\n type=\"text\" aria-label=\"Find in document\" #findInput [(ngModel)]=\"searchText\" (keydown.escape)=\"onEscapeKeyPress($event)\" (keydown.enter)=\"onEnterKeyPress($event)\" title=\"Find in document\"\n placeholder=\"Find in document\u2026\" tabindex=\"0\" data-l10n-id=\"find_input\" />\n <button class=\"govuk-button govuk-!-display-inline-block govuk-!-margin-bottom-4\" data-module=\"govuk-button\"\n (click)=\"search()\" style=\" position: absolute; top: 40px; right: 10px; \">\n Search\n </button>\n <button id=\"mvCloseBtn\" #mvCloseBtn class=\"mv-button searchbar-button--close\" title=\"Close Search\" data-l10n-id=\"mvRedactBtn\"\n (click)=\"toggleSearchBar()\">\n </button>\n </div>\n </div>\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-three-quarters\">\n <span id=\"findResultsCount\" class=\"govuk-!-display-inline-block govuk-!-margin-right-4\">{{resultsText}}</span>\n <a *ngIf=\"resultCount > 0\" [routerLink]=\"[]\" class=\"govuk-link govuk-link--no-visited-state govuk-!-margin-right-2\"\n (click)=\"searchPrev()\" title=\"Find the previous occurrence of the phrase\" data-l10n-id=\"find_previous\">Prev</a>\n <a *ngIf=\"resultCount > 0\" [routerLink]=\"[]\" #findNext class=\"govuk-link govuk-link--no-visited-state\" (click)=\"searchNext()\"\n title=\"Find the next occurrence of the phrase\" data-l10n-id=\"find_next\">Next</a>\n </div>\n <div class=\"govuk-grid-column-one-quarter\">\n <a [routerLink]=\"[]\" class=\"govuk-link govuk-link--no-visited-state\" (click)=\"toggleAdvancedSearch()\" title=\"Advanced\"\n data-l10n-id=\"find_advanced\" style=\" position: absolute; top: 95px; right: 15px; \">Advanced</a>\n </div>\n </div>\n\n <div class=\"govuk-grid-row\" *ngIf=\"advancedSearchVisible\">\n <div class=\"govuk-grid-column-full\">\n <div class=\"govuk-form-group govuk-!-margin-top-3 govuk-!-margin-bottom-1\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"advanced\">\n <div class=\"govuk-checkboxes\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"findHighlightAll\" name=\"findHighlightAll\" type=\"checkbox\"\n (change)=\"highlightAll = !highlightAll; search()\" [checked]=\"highlightAll\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"findHighlightAll\" data-l10n-id=\"find_highlight\">\n Highlight all\n </label>\n </div>\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"findMatchCase\" name=\"findMatchCase\" type=\"checkbox\"\n (change)=\"matchCase = !matchCase; search()\" [checked]=\"matchCase\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"findMatchCase\"\n data-l10n-id=\"find_match_case_label\">\n Match text (exact case)\n </label>\n </div>\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"findEntireWord\" name=\"findMatchCase\" type=\"checkbox\"\n (change)=\"wholeWord = !wholeWord; search()\" [checked]=\"wholeWord\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"findEntireWord\"\n data-l10n-id=\"find_entire_word_label\">\n Match whole words or sentences\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SearchBarComponent, decorators: [{
93
+ type: Component,
94
+ args: [{ selector: 'mv-search-bar', template: "<div class=\"searchbar govuk-!-padding-3\" [hidden]=\"toolbarEvents.searchBarHidden | async\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <input class=\"govuk-input govuk-!-display-inline-block govuk-!-width-three-quarters govuk-!-margin-bottom-5 govuk-!-margin-top-5\"\n type=\"text\" aria-label=\"Find in document\" #findInput [(ngModel)]=\"searchText\" (keydown.escape)=\"onEscapeKeyPress($event)\" (keydown.enter)=\"onEnterKeyPress($event)\" title=\"Find in document\"\n placeholder=\"Find in document\u2026\" tabindex=\"0\" data-l10n-id=\"find_input\" />\n <button class=\"govuk-button govuk-!-display-inline-block govuk-!-margin-bottom-4\" data-module=\"govuk-button\"\n (click)=\"search()\" style=\" position: absolute; top: 40px; right: 10px; \">\n Search\n </button>\n <button id=\"mvCloseBtn\" #mvCloseBtn class=\"mv-button searchbar-button--close\" title=\"Close Search\" data-l10n-id=\"mvRedactBtn\"\n (click)=\"toggleSearchBar()\">\n </button>\n </div>\n </div>\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-three-quarters\">\n <span id=\"findResultsCount\" class=\"govuk-!-display-inline-block govuk-!-margin-right-4\">{{resultsText}}</span>\n <a *ngIf=\"resultCount > 0\" [routerLink]=\"[]\" class=\"govuk-link govuk-link--no-visited-state govuk-!-margin-right-2\"\n (click)=\"searchPrev()\" title=\"Find the previous occurrence of the phrase\" data-l10n-id=\"find_previous\">Prev</a>\n <a *ngIf=\"resultCount > 0\" [routerLink]=\"[]\" #findNext class=\"govuk-link govuk-link--no-visited-state\" (click)=\"searchNext()\"\n title=\"Find the next occurrence of the phrase\" data-l10n-id=\"find_next\">Next</a>\n </div>\n <div class=\"govuk-grid-column-one-quarter\">\n <a [routerLink]=\"[]\" class=\"govuk-link govuk-link--no-visited-state\" (click)=\"toggleAdvancedSearch()\" title=\"Advanced\"\n data-l10n-id=\"find_advanced\" style=\" position: absolute; top: 95px; right: 15px; \">Advanced</a>\n </div>\n </div>\n\n <div class=\"govuk-grid-row\" *ngIf=\"advancedSearchVisible\">\n <div class=\"govuk-grid-column-full\">\n <div class=\"govuk-form-group govuk-!-margin-top-3 govuk-!-margin-bottom-1\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"advanced\">\n <div class=\"govuk-checkboxes\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"findHighlightAll\" name=\"findHighlightAll\" type=\"checkbox\"\n (change)=\"highlightAll = !highlightAll; search()\" [checked]=\"highlightAll\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"findHighlightAll\" data-l10n-id=\"find_highlight\">\n Highlight all\n </label>\n </div>\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"findMatchCase\" name=\"findMatchCase\" type=\"checkbox\"\n (change)=\"matchCase = !matchCase; search()\" [checked]=\"matchCase\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"findMatchCase\"\n data-l10n-id=\"find_match_case_label\">\n Match text (exact case)\n </label>\n </div>\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"findEntireWord\" name=\"findMatchCase\" type=\"checkbox\"\n (change)=\"wholeWord = !wholeWord; search()\" [checked]=\"wholeWord\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"findEntireWord\"\n data-l10n-id=\"find_entire_word_label\">\n Match whole words or sentences\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n</div>\n" }]
95
+ }], ctorParameters: function () { return [{ type: i1.ToolbarButtonVisibilityService }, { type: i2.ToolbarEventService }]; }, propDecorators: { findInput: [{
96
+ type: ViewChild,
97
+ args: ['findInput', { static: true }]
98
+ }], findNext: [{
99
+ type: ViewChild,
100
+ args: ['findNext', { static: false }]
101
+ }], onWindowKeyDown: [{
102
+ type: HostListener,
103
+ args: ['window:keydown', ['$event']]
104
+ }] } });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFTbEcsTUFBTSxPQUFPLGtCQUFrQjtJQWdCN0IsWUFDa0IsY0FBOEMsRUFDOUMsYUFBa0M7UUFEbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdDO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQWJwRCxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVSLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUVwQywwQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFLakMsQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDdkcsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsYUFB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UUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDOztrSUF2R1Usa0JBQWtCO3NIQUFsQixrQkFBa0Isd1VDVC9CLHE0SEFnRUE7MkZEdkRhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxlQUFlO3VKQUtpQixTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQStCakMsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWJ1dHRvbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0c0NvdW50LCBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1zZWFyY2gtYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1iYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdmaW5kSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaW5kSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2ZpbmROZXh0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGZpbmROZXh0OiBFbGVtZW50UmVmPEhUTUxBbmNob3JFbGVtZW50PjtcblxuICBoaWdobGlnaHRBbGwgPSB0cnVlO1xuICBtYXRjaENhc2UgPSBmYWxzZTtcbiAgd2hvbGVXb3JkID0gZmFsc2U7XG4gIHJlc3VsdHNUZXh0ID0gJyc7XG4gIHNlYXJjaFRleHQgPSAnJztcbiAgcmVzdWx0Q291bnQgPSAwO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2hWaXNpYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJCdXR0b25zOiBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoUmVzdWx0c0NvdW50U3ViamVjdC5zdWJzY3JpYmUocmVzdWx0cyA9PiB0aGlzLnNldFNlYXJjaFJlc3VsdHNDb3VudChyZXN1bHRzKSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbldpbmRvd0tleURvd24oZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChlLmNvZGUgPT09ICdGMycgfHwgKGUuY3RybEtleSAmJiBlLmNvZGUgPT09ICdLZXlGJykpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnNlYXJjaEJhckhpZGRlbi5uZXh0KGZhbHNlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5maW5kSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpLCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hOZXh0KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2goe1xuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgaGlnaGxpZ2h0QWxsOiB0aGlzLmhpZ2hsaWdodEFsbCxcbiAgICAgIG1hdGNoQ2FzZTogdGhpcy5tYXRjaENhc2UsXG4gICAgICB3aG9sZVdvcmQ6IHRoaXMud2hvbGVXb3JkLFxuICAgICAgcHJldmlvdXM6IGZhbHNlLFxuICAgICAgcmVzZXQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoUHJldigpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoKHtcbiAgICAgIHNlYXJjaFRlcm06IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgIGhpZ2hsaWdodEFsbDogdGhpcy5oaWdobGlnaHRBbGwsXG4gICAgICBtYXRjaENhc2U6IHRoaXMubWF0Y2hDYXNlLFxuICAgICAgd2hvbGVXb3JkOiB0aGlzLndob2xlV29yZCxcbiAgICAgIHByZXZpb3VzOiB0cnVlLFxuICAgICAgcmVzZXQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2goe1xuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgaGlnaGxpZ2h0QWxsOiB0aGlzLmhpZ2hsaWdodEFsbCxcbiAgICAgIG1hdGNoQ2FzZTogdGhpcy5tYXRjaENhc2UsXG4gICAgICB3aG9sZVdvcmQ6IHRoaXMud2hvbGVXb3JkLFxuICAgICAgcHJldmlvdXM6IGZhbHNlLFxuICAgICAgcmVzZXQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VhcmNoUmVzdWx0c0NvdW50KHJlc3VsdHM6IFNlYXJjaFJlc3VsdHNDb3VudCk6IHZvaWQge1xuICAgIHRoaXMucmVzdWx0Q291bnQgPSByZXN1bHRzLnRvdGFsO1xuICAgIHRoaXMucmVzdWx0c1RleHQgPSB0aGlzLnJlc3VsdENvdW50ID4gMFxuICAgICAgPyBgRm91bmQgJHtyZXN1bHRzLmN1cnJlbnR9IG9mICR7cmVzdWx0cy50b3RhbH1gXG4gICAgICA6ICdObyByZXN1bHRzIGZvdW5kJztcbiAgICBpZiAodGhpcy5yZXN1bHRDb3VudCAmJiB0aGlzLnJlc3VsdENvdW50ID4gMCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmluZE5leHQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRXNjYXBlS2V5UHJlc3MoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4ubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVudGVyS2V5UHJlc3MoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoKCk7XG4gIH1cblxuXG4gIHB1YmxpYyB0b2dnbGVBZHZhbmNlZFNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoVmlzaWJsZSA9ICF0aGlzLmFkdmFuY2VkU2VhcmNoVmlzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWFyY2hCYXIoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnNlYXJjaEJhckhpZGRlbi5uZXh0KCF0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLmdldFZhbHVlKCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2VhcmNoYmFyIGdvdnVrLSEtcGFkZGluZy0zXCIgW2hpZGRlbl09XCJ0b29sYmFyRXZlbnRzLnNlYXJjaEJhckhpZGRlbiB8IGFzeW5jXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay0hLWRpc3BsYXktaW5saW5lLWJsb2NrIGdvdnVrLSEtd2lkdGgtdGhyZWUtcXVhcnRlcnMgZ292dWstIS1tYXJnaW4tYm90dG9tLTUgZ292dWstIS1tYXJnaW4tdG9wLTVcIlxuICAgICAgICB0eXBlPVwidGV4dFwiIGFyaWEtbGFiZWw9XCJGaW5kIGluIGRvY3VtZW50XCIgI2ZpbmRJbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiAoa2V5ZG93bi5lc2NhcGUpPVwib25Fc2NhcGVLZXlQcmVzcygkZXZlbnQpXCIgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcktleVByZXNzKCRldmVudClcIiB0aXRsZT1cIkZpbmQgaW4gZG9jdW1lbnRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbmQgaW4gZG9jdW1lbnTigKZcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWwxMG4taWQ9XCJmaW5kX2lucHV0XCIgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJnb3Z1ay1idXR0b24gZ292dWstIS1kaXNwbGF5LWlubGluZS1ibG9jayBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNFwiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCIgc3R5bGU9XCIgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDQwcHg7IHJpZ2h0OiAxMHB4OyBcIj5cbiAgICAgICAgU2VhcmNoXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gaWQ9XCJtdkNsb3NlQnRuXCIgI212Q2xvc2VCdG4gY2xhc3M9XCJtdi1idXR0b24gc2VhcmNoYmFyLWJ1dHRvbi0tY2xvc2VcIiB0aXRsZT1cIkNsb3NlIFNlYXJjaFwiIGRhdGEtbDEwbi1pZD1cIm12UmVkYWN0QnRuXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJhcigpXCI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXRocmVlLXF1YXJ0ZXJzXCI+XG4gICAgICA8c3BhbiBpZD1cImZpbmRSZXN1bHRzQ291bnRcIiBjbGFzcz1cImdvdnVrLSEtZGlzcGxheS1pbmxpbmUtYmxvY2sgZ292dWstIS1tYXJnaW4tcmlnaHQtNFwiPnt7cmVzdWx0c1RleHR9fTwvc3Bhbj5cbiAgICAgIDxhICpuZ0lmPVwicmVzdWx0Q291bnQgPiAwXCIgW3JvdXRlckxpbmtdPVwiW11cIiBjbGFzcz1cImdvdnVrLWxpbmsgZ292dWstbGluay0tbm8tdmlzaXRlZC1zdGF0ZSBnb3Z1ay0hLW1hcmdpbi1yaWdodC0yXCJcbiAgICAgICAgKGNsaWNrKT1cInNlYXJjaFByZXYoKVwiIHRpdGxlPVwiRmluZCB0aGUgcHJldmlvdXMgb2NjdXJyZW5jZSBvZiB0aGUgcGhyYXNlXCIgZGF0YS1sMTBuLWlkPVwiZmluZF9wcmV2aW91c1wiPlByZXY8L2E+XG4gICAgICA8YSAqbmdJZj1cInJlc3VsdENvdW50ID4gMFwiIFtyb3V0ZXJMaW5rXT1cIltdXCIgI2ZpbmROZXh0IGNsYXNzPVwiZ292dWstbGluayBnb3Z1ay1saW5rLS1uby12aXNpdGVkLXN0YXRlXCIgKGNsaWNrKT1cInNlYXJjaE5leHQoKVwiXG4gICAgICAgIHRpdGxlPVwiRmluZCB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBwaHJhc2VcIiBkYXRhLWwxMG4taWQ9XCJmaW5kX25leHRcIj5OZXh0PC9hPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1vbmUtcXVhcnRlclwiPlxuICAgICAgPGEgW3JvdXRlckxpbmtdPVwiW11cIiBjbGFzcz1cImdvdnVrLWxpbmsgZ292dWstbGluay0tbm8tdmlzaXRlZC1zdGF0ZVwiIChjbGljayk9XCJ0b2dnbGVBZHZhbmNlZFNlYXJjaCgpXCIgdGl0bGU9XCJBZHZhbmNlZFwiXG4gICAgICAgIGRhdGEtbDEwbi1pZD1cImZpbmRfYWR2YW5jZWRcIiBzdHlsZT1cIiBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogOTVweDsgcmlnaHQ6IDE1cHg7IFwiPkFkdmFuY2VkPC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIiAqbmdJZj1cImFkdmFuY2VkU2VhcmNoVmlzaWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cCBnb3Z1ay0hLW1hcmdpbi10b3AtMyBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMVwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJnb3Z1ay1maWVsZHNldFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJhZHZhbmNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstY2hlY2tib3hlc19faXRlbVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pbnB1dFwiIGlkPVwiZmluZEhpZ2hsaWdodEFsbFwiIG5hbWU9XCJmaW5kSGlnaGxpZ2h0QWxsXCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhpZ2hsaWdodEFsbCA9ICFoaWdobGlnaHRBbGw7IHNlYXJjaCgpXCIgW2NoZWNrZWRdPVwiaGlnaGxpZ2h0QWxsXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLWNoZWNrYm94ZXNfX2xhYmVsXCIgZm9yPVwiZmluZEhpZ2hsaWdodEFsbFwiIGRhdGEtbDEwbi1pZD1cImZpbmRfaGlnaGxpZ2h0XCI+XG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0IGFsbFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstY2hlY2tib3hlc19faXRlbVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pbnB1dFwiIGlkPVwiZmluZE1hdGNoQ2FzZVwiIG5hbWU9XCJmaW5kTWF0Y2hDYXNlXCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm1hdGNoQ2FzZSA9ICFtYXRjaENhc2U7IHNlYXJjaCgpXCIgW2NoZWNrZWRdPVwibWF0Y2hDYXNlXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLWNoZWNrYm94ZXNfX2xhYmVsXCIgZm9yPVwiZmluZE1hdGNoQ2FzZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiZmluZF9tYXRjaF9jYXNlX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgTWF0Y2ggdGV4dCAoZXhhY3QgY2FzZSlcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWNoZWNrYm94ZXNfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstY2hlY2tib3hlc19faW5wdXRcIiBpZD1cImZpbmRFbnRpcmVXb3JkXCIgbmFtZT1cImZpbmRNYXRjaENhc2VcIiB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwid2hvbGVXb3JkID0gIXdob2xlV29yZDsgc2VhcmNoKClcIiBbY2hlY2tlZF09XCJ3aG9sZVdvcmRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstY2hlY2tib3hlc19fbGFiZWxcIiBmb3I9XCJmaW5kRW50aXJlV29yZFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiZmluZF9lbnRpcmVfd29yZF9sYWJlbFwiPlxuICAgICAgICAgICAgICAgIE1hdGNoIHdob2xlIHdvcmRzIG9yIHNlbnRlbmNlc1xuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==