@hmcts/media-viewer 4.1.2 → 4.1.3-redactions-rc1

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 (26) hide show
  1. package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +5 -4
  2. package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +4 -2
  3. package/esm2022/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +4 -3
  4. package/esm2022/lib/annotations/comment-set/comment/comment.component.mjs +3 -2
  5. package/esm2022/lib/annotations/comment-set/comment-set-render.service.mjs +3 -2
  6. package/esm2022/lib/media-viewer.component.mjs +3 -2
  7. package/esm2022/lib/shared/util/helpers/html-templates.helper.mjs +12 -1
  8. package/esm2022/lib/store/reducers/document.reducer.mjs +35 -6
  9. package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +4 -3
  10. package/esm2022/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +3 -2
  11. package/esm2022/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +4 -2
  12. package/fesm2022/hmcts-media-viewer.mjs +80 -36
  13. package/fesm2022/hmcts-media-viewer.mjs.map +1 -1
  14. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +1 -1
  15. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts.map +1 -1
  16. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts.map +1 -1
  17. package/lib/annotations/comment-set/comment/comment.component.d.ts.map +1 -1
  18. package/lib/annotations/comment-set/comment-set-render.service.d.ts.map +1 -1
  19. package/lib/media-viewer.component.d.ts.map +1 -1
  20. package/lib/shared/util/helpers/html-templates.helper.d.ts +1 -0
  21. package/lib/shared/util/helpers/html-templates.helper.d.ts.map +1 -1
  22. package/lib/store/reducers/document.reducer.d.ts.map +1 -1
  23. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -1
  24. package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts.map +1 -1
  25. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts.map +1 -1
  26. package/package.json +1 -1
@@ -31,7 +31,9 @@ export class SideBarComponent {
31
31
  this.sidebarOpen = toggle;
32
32
  }));
33
33
  this.subscriptions.push(this.store.pipe(select(bookmarksSelectors.getScrollTop)).subscribe(scrollTopValue => {
34
- this.sidebarDiv.nativeElement.scrollTop = scrollTopValue;
34
+ if (this.sidebarDiv?.nativeElement) {
35
+ this.sidebarDiv.nativeElement.scrollTop = scrollTopValue;
36
+ }
35
37
  }));
36
38
  }
37
39
  ngOnChanges(changes) {
@@ -94,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
94
96
  type: ViewChild,
95
97
  args: ['sidebar']
96
98
  }] } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdmlld2Vycy9wZGYtdmlld2VyL3NpZGUtYmFyL3NpZGUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9zaWRlLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBNEIsS0FBSyxFQUErQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEosT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEtBQUssa0JBQWtCLE1BQU0sNkNBQTZDLENBQUM7QUFFbEYsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU14RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7OztBQU1yRSxNQUFNLE9BQU8sZ0JBQWdCO0lBb0IzQixZQUFvQixZQUFnQyxFQUMxQyxLQUE0QixFQUNuQixhQUFrQztRQUZqQyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDMUMsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBWHJELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBS2pCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQU12QyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNu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QztJQUVELFdBQVcsQ0FBQyxJQUFhO1FBQ3ZCLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hFLENBQUM7a0lBbkZVLGdCQUFnQjtzSEFBaEIsZ0JBQWdCLDRQQVNoQixrQkFBa0IsNkpDM0IvQix5dUVBa0VBOzs0RkRoRGEsZ0JBQWdCO2tCQUo1QixTQUFTOytCQUNFLGFBQWE7NklBS2Qsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR04sU0FBUztzQkFEUixTQUFTO3VCQUFDLGtCQUFrQjtnQkFTUCxVQUFVO3NCQUEvQixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3V0bGluZSB9IGZyb20gJy4vb3V0bGluZS1pdGVtL291dGxpbmUubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0ICogYXMgYm9va21hcmtzU2VsZWN0b3JzIGZyb20gJy4uLy4uLy4uL3N0b3JlL3NlbGVjdG9ycy9ib29rbWFyay5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgQm9va21hcmtOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbW9kZWxzL2Jvb2ttYXJrcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3JlYXRlQm9va21hcmssIExvYWRCb29rbWFya3MgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9hY3Rpb25zL2Jvb2ttYXJrLmFjdGlvbnMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFZpZXdlckV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3ZpZXdlci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJvb2ttYXJrc1N0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvYm9va21hcmtzLnJlZHVjZXInO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJvb2ttYXJrc0NvbXBvbmVudCB9IGZyb20gJy4vYm9va21hcmtzL2Jvb2ttYXJrcy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1zaWRlLWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWRlLWJhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2lkZUJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGFubm90YXRpb25zRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgb3V0bGluZTogT3V0bGluZTtcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHpvb206IG51bWJlcjtcbiAgQElucHV0KCkgcm90YXRlOiBudW1iZXI7XG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlTnVtYmVyOiBudW1iZXI7XG5cbiAgQFZpZXdDaGlsZChCb29rbWFya3NDb21wb25lbnQpXG4gIGJvb2ttYXJrczogQm9va21hcmtzQ29tcG9uZW50O1xuICB0cmVlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZpZXcgPSAnb3V0bGluZSc7XG4gIGJvb2ttYXJrTm9kZXMkOiBPYnNlcnZhYmxlPEJvb2ttYXJrTm9kZVtdPjtcbiAgc2Nyb2xsVG9wOiBhbnk7XG4gIHNpZGViYXJPcGVuOiBhbnk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBAVmlld0NoaWxkKCdzaWRlYmFyJykgc2lkZWJhckRpdjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZpZXdlckV2ZW50czogVmlld2VyRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPEJvb2ttYXJrc1N0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ib29rbWFya05vZGVzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3QoYm9va21hcmtzU2VsZWN0b3JzLmdldEJvb2ttYXJrTm9kZXMpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGJvb2ttYXJrc1NlbGVjdG9ycy5nZXRFZGl0YWJsZUJvb2ttYXJrKSlcbiAgICAgIC5zdWJzY3JpYmUoZWRpdGFibGUgPT4gdGhpcy5zZWxlY3RlZFZpZXcgPSBlZGl0YWJsZSA/ICdib29rbWFya3MnIDogdGhpcy5zZWxlY3RlZFZpZXcpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3V0bGluZVZpZXcuc3Vic2NyaWJlKHRvZ2dsZSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdG9nZ2xlID8gJ291dGxpbmUnIDogJ2Jvb2ttYXJrcyc7XG4gICAgICB9KSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3Blbi5zdWJzY3JpYmUodG9nZ2xlID0+IHtcbiAgICAgICAgdGhpcy5zaWRlYmFyT3BlbiA9IHRvZ2dsZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGJvb2ttYXJrc1NlbGVjdG9ycy5nZXRTY3JvbGxUb3ApKS5zdWJzY3JpYmUoc2Nyb2xsVG9wVmFsdWUgPT4ge1xuICAgICAgdGhpcy5zaWRlYmFyRGl2Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wVmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnVybCAmJiB0aGlzLnVybCkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZEJvb2ttYXJrcygpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJlZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9wID0gZXZlbnQuc3JjRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgfVxuICAgIHRoaXMudHJlZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGdvVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbjogYW55W10pIHtcbiAgICB0aGlzLnZpZXdlckV2ZW50cy5nb1RvRGVzdGluYXRpb24oZGVzdGluYXRpb24pO1xuICB9XG5cbiAgaGFzVHJlZUNoYW5nZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRyZWVDaGFuZ2VkID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVTaWRlYmFyVmlldyhzaWRlYmFyVmlldzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBzaWRlYmFyVmlldztcbiAgfVxuXG4gIGlzVmlld2VkSXRlbShjdXJyZW50OiBPdXRsaW5lLCBuZXh0OiBPdXRsaW5lKTogYm9vbGVhbiB7XG4gICAgaWYgKGN1cnJlbnQucGFnZU51bWJlciA9PT0gdGhpcy5jdXJyZW50UGFnZU51bWJlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBuZXh0ID09PSB1bmRlZmluZWQgPyBjdXJyZW50LnBhZ2VOdW1iZXIgPD0gdGhpcy5jdXJyZW50UGFnZU51bWJlciA6XG4gICAgICBjdXJyZW50LnBhZ2VOdW1iZXIgPD0gdGhpcy5jdXJyZW50UGFnZU51bWJlciAmJiAobmV4dC5wYWdlTnVtYmVyID4gdGhpcy5jdXJyZW50UGFnZU51bWJlcik7XG4gIH1cblxuICBmaW5kRW5kUGFnZShuZXh0OiBPdXRsaW5lKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV4dCA9PT0gdW5kZWZpbmVkID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBuZXh0LnBhZ2VOdW1iZXI7XG4gIH1cbn1cbiIsIjxkaXYgaWQ9XCJ0b29sYmFyU2lkZWJhclwiPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJhbm5vdGF0aW9uc0VuYWJsZWQgJiYgc2VsZWN0ZWRWaWV3ID09PSAnYm9va21hcmtzJ1wiXG4gICAgY2xhc3M9XCJzcGxpdFRvb2xiYXJCdXR0b24gdG9nZ2xlZFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBpZD1cInNvcnRCb29rbWFya1Bvc2l0aW9uXCJcbiAgICAgIGNsYXNzPVwic3BsaXRUb29sYmFyQnV0dG9uIGxlZnQgYm9va21hcmtfX3NvcnRfX3Bvc2l0aW9uXCJcbiAgICAgIChjbGljayk9XCJib29rbWFya3Muc29ydChib29rbWFya3MucG9zaXRpb25Tb3J0KVwiXG4gICAgICB0aXRsZT1cIk9yZGVyIGJ5IHBsYWNlIGluIGRvY3VtZW50XCJcbiAgICAgIGFyaWEtcHJlc3NlZD1cInRydWVcIlxuICAgID48L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBpZD1cInNvcnRCb29rbWFya0N1c3RvbVwiXG4gICAgICBjbGFzcz1cInNwbGl0VG9vbGJhckJ1dHRvbiBsZWZ0IGJvb2ttYXJrX19zb3J0X19jdXN0b21cIlxuICAgICAgKGNsaWNrKT1cImJvb2ttYXJrcy5zb3J0KGJvb2ttYXJrcy5jdXN0b21Tb3J0KVwiXG4gICAgICB0aXRsZT1cIk9yZGVyIG1hbnVhbGx5XCJcbiAgICAgIGFyaWEtcHJlc3NlZD1cInRydWVcIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzcGxpdFRvb2xiYXJCdXR0b25TZXBhcmF0b3JcIj48L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiYW5ub3RhdGlvbnNFbmFibGVkICYmIHNlbGVjdGVkVmlldyA9PT0gJ2Jvb2ttYXJrcydcIlxuICAgIGNsYXNzPVwic3BsaXRUb29sYmFyQnV0dG9uIHJpZ2h0XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGlkPVwiYWRkQm9va21hcmtcIlxuICAgICAgY2xhc3M9XCJ0b29sYmFyQnV0dG9uIGFkZEJvb2ttYXJrXCJcbiAgICAgIChjbGljayk9XCJib29rbWFya3Mub25BZGRCb29rbWFya0NsaWNrKClcIlxuICAgICAgdGl0bGU9XCJBZGQgYm9va21hcmtcIlxuICAgICAgdGFiaW5kZXg9XCIzXCJcbiAgICAgIGRhdGEtbDEwbi1pZD1cImFkZEJvb2ttYXJrXCJcbiAgICA+XG4gICAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJhZGRCb29rbWFya19sYWJlbFwiPnt7XG4gICAgICAgIFwiQWRkIGJvb2ttYXJrXCIgfCBycHhUcmFuc2xhdGVcbiAgICAgIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAjc2lkZWJhciBpZD1cInNpZGViYXJDb250ZW50XCIgY2RrU2Nyb2xsYWJsZSAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIiBbaGlkZGVuXT1cIiFzaWRlYmFyT3BlblwiPlxuICA8ZGl2IGlkPVwib3V0bGluZVZpZXdcIiBjbGFzcz1cIm91dGxpbmVXaXRoRGVlcE5lc3RpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwib3V0bGluZUl0ZW1cIiAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gJ291dGxpbmUnXCI+XG4gICAgICA8bXYtb3V0bGluZS1pdGVtXG4gICAgICAgICpuZ0Zvcj1cImxldCBvdXRsaW5lSXRlbSBvZiBvdXRsaW5lOyBpbmRleCBhcyBpXCJcbiAgICAgICAgW291dGxpbmVdPVwib3V0bGluZUl0ZW1cIlxuICAgICAgICBbY3VycmVudFBhZ2VOdW1iZXJdPVwiY3VycmVudFBhZ2VOdW1iZXJcIlxuICAgICAgICBbaXNDdXJyZW50U2VjdGlvbl09XCJpc1ZpZXdlZEl0ZW0ob3V0bGluZUl0ZW0sIG91dGxpbmVbaSArIDFdKVwiXG4gICAgICAgIFtlbmRQYWdlXT1cImZpbmRFbmRQYWdlKG91dGxpbmVbaSArIDFdKVwiXG4gICAgICAgIChuYXZpZ2F0aW9uRXZlbnQpPVwiZ29Ub0Rlc3RpbmF0aW9uKCRldmVudClcIlxuICAgICAgPjwvbXYtb3V0bGluZS1pdGVtPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiYW5ub3RhdGlvbnNFbmFibGVkICYmIHNlbGVjdGVkVmlldyA9PT0gJ2Jvb2ttYXJrcydcIlxuICAgICAgaWQ9XCJib29rbWFya0NvbnRhaW5lclwiXG4gICAgPlxuICAgICAgPG12LWJvb2ttYXJrc1xuICAgICAgICBbYm9va21hcmtOb2Rlc109XCJib29rbWFya05vZGVzJCB8IGFzeW5jXCJcbiAgICAgICAgW3pvb21dPVwiem9vbVwiXG4gICAgICAgIFtyb3RhdGVdPVwicm90YXRlXCJcbiAgICAgICAgW3BhcmVudFNjcm9sbFRvcF09XCJzY3JvbGxUb3BcIlxuICAgICAgICAoZ29Ub0Rlc3RpbmF0aW9uKT1cImdvVG9EZXN0aW5hdGlvbigkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVIYXNDaGFuZ2VkKT1cImhhc1RyZWVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgPjwvbXYtYm9va21hcmtzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdmlld2Vycy9wZGYtdmlld2VyL3NpZGUtYmFyL3NpZGUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9zaWRlLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBNEIsS0FBSyxFQUErQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEosT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEtBQUssa0JBQWtCLE1BQU0sNkNBQTZDLENBQUM7QUFFbEYsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU14RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7OztBQU1yRSxNQUFNLE9BQU8sZ0JBQWdCO0lBb0IzQixZQUFvQixZQUFnQyxFQUMxQyxLQUE0QixFQUNuQixhQUFrQztRQUZqQyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDMUMsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBWHJELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBS2pCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQU12QyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNu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LElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFhO1FBQ3ZCLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hFLENBQUM7a0lBckZVLGdCQUFnQjtzSEFBaEIsZ0JBQWdCLDRQQVNoQixrQkFBa0IsNkpDM0IvQix5dUVBa0VBOzs0RkRoRGEsZ0JBQWdCO2tCQUo1QixTQUFTOytCQUNFLGFBQWE7NklBS2Qsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR04sU0FBUztzQkFEUixTQUFTO3VCQUFDLGtCQUFrQjtnQkFTUCxVQUFVO3NCQUEvQixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3V0bGluZSB9IGZyb20gJy4vb3V0bGluZS1pdGVtL291dGxpbmUubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0ICogYXMgYm9va21hcmtzU2VsZWN0b3JzIGZyb20gJy4uLy4uLy4uL3N0b3JlL3NlbGVjdG9ycy9ib29rbWFyay5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgQm9va21hcmtOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbW9kZWxzL2Jvb2ttYXJrcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3JlYXRlQm9va21hcmssIExvYWRCb29rbWFya3MgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9hY3Rpb25zL2Jvb2ttYXJrLmFjdGlvbnMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFZpZXdlckV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3ZpZXdlci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJvb2ttYXJrc1N0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvYm9va21hcmtzLnJlZHVjZXInO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJvb2ttYXJrc0NvbXBvbmVudCB9IGZyb20gJy4vYm9va21hcmtzL2Jvb2ttYXJrcy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1zaWRlLWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWRlLWJhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2lkZUJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGFubm90YXRpb25zRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgb3V0bGluZTogT3V0bGluZTtcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHpvb206IG51bWJlcjtcbiAgQElucHV0KCkgcm90YXRlOiBudW1iZXI7XG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlTnVtYmVyOiBudW1iZXI7XG5cbiAgQFZpZXdDaGlsZChCb29rbWFya3NDb21wb25lbnQpXG4gIGJvb2ttYXJrczogQm9va21hcmtzQ29tcG9uZW50O1xuICB0cmVlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZpZXcgPSAnb3V0bGluZSc7XG4gIGJvb2ttYXJrTm9kZXMkOiBPYnNlcnZhYmxlPEJvb2ttYXJrTm9kZVtdPjtcbiAgc2Nyb2xsVG9wOiBhbnk7XG4gIHNpZGViYXJPcGVuOiBhbnk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBAVmlld0NoaWxkKCdzaWRlYmFyJykgc2lkZWJhckRpdjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZpZXdlckV2ZW50czogVmlld2VyRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPEJvb2ttYXJrc1N0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ib29rbWFya05vZGVzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3QoYm9va21hcmtzU2VsZWN0b3JzLmdldEJvb2ttYXJrTm9kZXMpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGJvb2ttYXJrc1NlbGVjdG9ycy5nZXRFZGl0YWJsZUJvb2ttYXJrKSlcbiAgICAgIC5zdWJzY3JpYmUoZWRpdGFibGUgPT4gdGhpcy5zZWxlY3RlZFZpZXcgPSBlZGl0YWJsZSA/ICdib29rbWFya3MnIDogdGhpcy5zZWxlY3RlZFZpZXcpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3V0bGluZVZpZXcuc3Vic2NyaWJlKHRvZ2dsZSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdG9nZ2xlID8gJ291dGxpbmUnIDogJ2Jvb2ttYXJrcyc7XG4gICAgICB9KSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3Blbi5zdWJzY3JpYmUodG9nZ2xlID0+IHtcbiAgICAgICAgdGhpcy5zaWRlYmFyT3BlbiA9IHRvZ2dsZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGJvb2ttYXJrc1NlbGVjdG9ycy5nZXRTY3JvbGxUb3ApKS5zdWJzY3JpYmUoc2Nyb2xsVG9wVmFsdWUgPT4ge1xuICAgICAgaWYgKHRoaXMuc2lkZWJhckRpdj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNpZGViYXJEaXYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3BWYWx1ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy51cmwgJiYgdGhpcy51cmwpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IExvYWRCb29rbWFya3MoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyZWVDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvcCA9IGV2ZW50LnNyY0VsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIH1cbiAgICB0aGlzLnRyZWVDaGFuZ2VkID0gZmFsc2U7XG4gIH1cblxuICBnb1RvRGVzdGluYXRpb24oZGVzdGluYXRpb246IGFueVtdKSB7XG4gICAgdGhpcy52aWV3ZXJFdmVudHMuZ29Ub0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKTtcbiAgfVxuXG4gIGhhc1RyZWVDaGFuZ2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy50cmVlQ2hhbmdlZCA9IHZhbHVlO1xuICB9XG5cbiAgdG9nZ2xlU2lkZWJhclZpZXcoc2lkZWJhclZpZXc6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gc2lkZWJhclZpZXc7XG4gIH1cblxuICBpc1ZpZXdlZEl0ZW0oY3VycmVudDogT3V0bGluZSwgbmV4dDogT3V0bGluZSk6IGJvb2xlYW4ge1xuICAgIGlmIChjdXJyZW50LnBhZ2VOdW1iZXIgPT09IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCA9PT0gdW5kZWZpbmVkID8gY3VycmVudC5wYWdlTnVtYmVyIDw9IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgOlxuICAgICAgY3VycmVudC5wYWdlTnVtYmVyIDw9IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgJiYgKG5leHQucGFnZU51bWJlciA+IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIpO1xuICB9XG5cbiAgZmluZEVuZFBhZ2UobmV4dDogT3V0bGluZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5leHQgPT09IHVuZGVmaW5lZCA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogbmV4dC5wYWdlTnVtYmVyO1xuICB9XG59XG4iLCI8ZGl2IGlkPVwidG9vbGJhclNpZGViYXJcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiYW5ub3RhdGlvbnNFbmFibGVkICYmIHNlbGVjdGVkVmlldyA9PT0gJ2Jvb2ttYXJrcydcIlxuICAgIGNsYXNzPVwic3BsaXRUb29sYmFyQnV0dG9uIHRvZ2dsZWRcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgaWQ9XCJzb3J0Qm9va21hcmtQb3NpdGlvblwiXG4gICAgICBjbGFzcz1cInNwbGl0VG9vbGJhckJ1dHRvbiBsZWZ0IGJvb2ttYXJrX19zb3J0X19wb3NpdGlvblwiXG4gICAgICAoY2xpY2spPVwiYm9va21hcmtzLnNvcnQoYm9va21hcmtzLnBvc2l0aW9uU29ydClcIlxuICAgICAgdGl0bGU9XCJPcmRlciBieSBwbGFjZSBpbiBkb2N1bWVudFwiXG4gICAgICBhcmlhLXByZXNzZWQ9XCJ0cnVlXCJcbiAgICA+PC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgaWQ9XCJzb3J0Qm9va21hcmtDdXN0b21cIlxuICAgICAgY2xhc3M9XCJzcGxpdFRvb2xiYXJCdXR0b24gbGVmdCBib29rbWFya19fc29ydF9fY3VzdG9tXCJcbiAgICAgIChjbGljayk9XCJib29rbWFya3Muc29ydChib29rbWFya3MuY3VzdG9tU29ydClcIlxuICAgICAgdGl0bGU9XCJPcmRlciBtYW51YWxseVwiXG4gICAgICBhcmlhLXByZXNzZWQ9XCJ0cnVlXCJcbiAgICA+PC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic3BsaXRUb29sYmFyQnV0dG9uU2VwYXJhdG9yXCI+PC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cImFubm90YXRpb25zRW5hYmxlZCAmJiBzZWxlY3RlZFZpZXcgPT09ICdib29rbWFya3MnXCJcbiAgICBjbGFzcz1cInNwbGl0VG9vbGJhckJ1dHRvbiByaWdodFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBpZD1cImFkZEJvb2ttYXJrXCJcbiAgICAgIGNsYXNzPVwidG9vbGJhckJ1dHRvbiBhZGRCb29rbWFya1wiXG4gICAgICAoY2xpY2spPVwiYm9va21hcmtzLm9uQWRkQm9va21hcmtDbGljaygpXCJcbiAgICAgIHRpdGxlPVwiQWRkIGJvb2ttYXJrXCJcbiAgICAgIHRhYmluZGV4PVwiM1wiXG4gICAgICBkYXRhLWwxMG4taWQ9XCJhZGRCb29rbWFya1wiXG4gICAgPlxuICAgICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiYWRkQm9va21hcmtfbGFiZWxcIj57e1xuICAgICAgICBcIkFkZCBib29rbWFya1wiIHwgcnB4VHJhbnNsYXRlXG4gICAgICB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgI3NpZGViYXIgaWQ9XCJzaWRlYmFyQ29udGVudFwiIGNka1Njcm9sbGFibGUgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCIgW2hpZGRlbl09XCIhc2lkZWJhck9wZW5cIj5cbiAgPGRpdiBpZD1cIm91dGxpbmVWaWV3XCIgY2xhc3M9XCJvdXRsaW5lV2l0aERlZXBOZXN0aW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cIm91dGxpbmVJdGVtXCIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09ICdvdXRsaW5lJ1wiPlxuICAgICAgPG12LW91dGxpbmUtaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgb3V0bGluZUl0ZW0gb2Ygb3V0bGluZTsgaW5kZXggYXMgaVwiXG4gICAgICAgIFtvdXRsaW5lXT1cIm91dGxpbmVJdGVtXCJcbiAgICAgICAgW2N1cnJlbnRQYWdlTnVtYmVyXT1cImN1cnJlbnRQYWdlTnVtYmVyXCJcbiAgICAgICAgW2lzQ3VycmVudFNlY3Rpb25dPVwiaXNWaWV3ZWRJdGVtKG91dGxpbmVJdGVtLCBvdXRsaW5lW2kgKyAxXSlcIlxuICAgICAgICBbZW5kUGFnZV09XCJmaW5kRW5kUGFnZShvdXRsaW5lW2kgKyAxXSlcIlxuICAgICAgICAobmF2aWdhdGlvbkV2ZW50KT1cImdvVG9EZXN0aW5hdGlvbigkZXZlbnQpXCJcbiAgICAgID48L212LW91dGxpbmUtaXRlbT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImFubm90YXRpb25zRW5hYmxlZCAmJiBzZWxlY3RlZFZpZXcgPT09ICdib29rbWFya3MnXCJcbiAgICAgIGlkPVwiYm9va21hcmtDb250YWluZXJcIlxuICAgID5cbiAgICAgIDxtdi1ib29rbWFya3NcbiAgICAgICAgW2Jvb2ttYXJrTm9kZXNdPVwiYm9va21hcmtOb2RlcyQgfCBhc3luY1wiXG4gICAgICAgIFt6b29tXT1cInpvb21cIlxuICAgICAgICBbcm90YXRlXT1cInJvdGF0ZVwiXG4gICAgICAgIFtwYXJlbnRTY3JvbGxUb3BdPVwic2Nyb2xsVG9wXCJcbiAgICAgICAgKGdvVG9EZXN0aW5hdGlvbik9XCJnb1RvRGVzdGluYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICh0cmVlSGFzQ2hhbmdlZCk9XCJoYXNUcmVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgID48L212LWJvb2ttYXJrcz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -304,19 +304,48 @@ function docReducer(state = initialDocumentState, action) {
304
304
  let pageHeight;
305
305
  let pageWidth;
306
306
  let hasDifferentPageSize = state.hasDifferentPageSize;
307
+ // we store the first page, as this has been rendered we can use this to get the rounding value
308
+ const pageNumberInput = document.getElementById('pageNumber');
309
+ const pageIndex = pageNumberInput ? parseInt(pageNumberInput.value, 10) : 0;
310
+ console.log('pageIndex', pageIndex);
311
+ const loadedPage = payload[pageIndex] && payload[pageIndex].div && payload[pageIndex].div['attributes'] && payload[pageIndex].div['attributes'].style
312
+ ? payload[pageIndex].div['attributes'].style.value
313
+ : '';
307
314
  payload.forEach(page => {
315
+ const sizingValue = page.div && page.div['attributes'] && page.div['attributes'].style
316
+ ? page.div['attributes'].style.value
317
+ : '';
318
+ const widthMatch = sizingValue.match(/width:\s*round\(down,\s*var\(--scale-factor\)\s*\*\s*([\d.]+)px,.*var\(--scale-round-x, ([\d.]+)px\)\)/);
319
+ const heightMatch = sizingValue.match(/height:\s*round\(down,\s*var\(--scale-factor\)\s*\*\s*([\d.]+)px,.*var\(--scale-round-y, ([\d.]+)px\)\)/);
320
+ const scaleRoundXMatch = loadedPage.match(/--scale-round-x:\s*([\d.]+)px/);
321
+ const scaleRoundYMatch = loadedPage.match(/--scale-round-y:\s*([\d.]+)px/);
322
+ const scaleFactor = page.viewportScale ?? 1;
323
+ const scaleRoundX = scaleRoundXMatch ? parseFloat(scaleRoundXMatch[1]) : 1;
324
+ const scaleRoundY = scaleRoundYMatch ? parseFloat(scaleRoundYMatch[1]) : 1;
325
+ const baseWidth = widthMatch ? parseFloat(widthMatch[1]) : undefined;
326
+ const baseHeight = heightMatch ? parseFloat(heightMatch[1]) : undefined;
327
+ function roundDown(value, step) {
328
+ return Math.floor(value / step) * step;
329
+ }
330
+ const computedWidth = baseWidth !== undefined
331
+ ? roundDown(scaleFactor * baseWidth, scaleRoundX)
332
+ : page.div['clientWidth'];
333
+ const computedHeight = baseHeight !== undefined
334
+ ? roundDown(scaleFactor * baseHeight, scaleRoundY)
335
+ : page.div['clientHeight'];
336
+ console.log(computedHeight, computedWidth);
308
337
  if (!hasDifferentPageSize && pageHeight && pageWidth &&
309
- (pageHeight !== page.div['clientHeight'] || pageWidth !== page.div['clientWidth'])) {
338
+ (pageHeight !== computedHeight || pageWidth !== computedWidth)) {
310
339
  hasDifferentPageSize = true;
311
340
  }
312
341
  else {
313
- pageHeight = page.div['clientHeight'];
314
- pageWidth = page.div['clientWidth'];
342
+ pageHeight = computedHeight;
343
+ pageWidth = computedWidth;
315
344
  }
316
345
  const styles = {
317
346
  left: page.div['offsetLeft'],
318
- height: page.div['clientHeight'],
319
- width: page.div['clientWidth']
347
+ height: computedHeight,
348
+ width: computedWidth
320
349
  };
321
350
  const scaleRotation = {
322
351
  scale: page.scale,
@@ -2511,6 +2540,35 @@ const defaultUnsupportedOptions = {
2511
2540
  showPrint: true
2512
2541
  };
2513
2542
 
2543
+ /**
2544
+ * Helper Class
2545
+ * Used for dynamic templates manipulation
2546
+ * */
2547
+ class HtmlTemplatesHelper {
2548
+ static setDescribedBy(errorMessage, config) {
2549
+ if (!errorMessage) {
2550
+ return config.hint ? `${config.id}-hint` : null;
2551
+ }
2552
+ else if (errorMessage && errorMessage.isInvalid) {
2553
+ return config.hint ? `${config.id}-hint ${config.id}-error` : `${config.id}-error`;
2554
+ }
2555
+ else {
2556
+ return config.hint ? `${config.id}-hint` : null;
2557
+ }
2558
+ }
2559
+ static getAdjustedBoundingRect(element, log = true) {
2560
+ const viewportX = window.visualViewport.offsetLeft;
2561
+ const viewportY = window.visualViewport.offsetTop;
2562
+ const viewportScale = window.visualViewport.scale;
2563
+ const viewportPageX = window.visualViewport.pageLeft;
2564
+ const viewportPageY = window.visualViewport.pageTop;
2565
+ if (log && viewportX || viewportY || (viewportScale != 1) || viewportPageX || viewportPageY) {
2566
+ console.log(`Element: ${element.id} Viewport X: ${viewportX}, Y: ${viewportY}, Scale: ${viewportScale}, PageX: ${viewportPageX}, PageY: ${viewportPageY}`);
2567
+ }
2568
+ return element.getBoundingClientRect();
2569
+ }
2570
+ }
2571
+
2514
2572
  const getTagsRootState = createSelector(getMVState, (state) => state.tags);
2515
2573
  const getTagEntities = createSelector(getTagsRootState, getTagNameEnt);
2516
2574
  const getTagFilters = createSelector(getTagsRootState, getFilters);
@@ -2872,7 +2930,7 @@ class RedactionSearchBarComponent {
2872
2930
  const range = selection.getRangeAt(0).cloneRange();
2873
2931
  const clientRects = range.getClientRects();
2874
2932
  if (clientRects) {
2875
- const parentRect = selectedHighLightedElements[0].parentElement.parentElement.getBoundingClientRect();
2933
+ const parentRect = HtmlTemplatesHelper.getAdjustedBoundingRect(selectedHighLightedElements[0]?.parentElement?.parentElement);
2876
2934
  const selectionRectangles = [];
2877
2935
  for (let i = 0; i < clientRects.length; i++) {
2878
2936
  const selectionRectangle = this.createTextRectangle(clientRects[i], parentRect);
@@ -2998,7 +3056,7 @@ class CommentSetRenderService {
2998
3056
  }
2999
3057
  }
3000
3058
  height(element) {
3001
- return element.form.nativeElement.getBoundingClientRect().height;
3059
+ return HtmlTemplatesHelper.getAdjustedBoundingRect(element.form.nativeElement)?.height | 0;
3002
3060
  }
3003
3061
  difference(a, b) { return Math.abs(a - b); }
3004
3062
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CommentSetRenderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -3314,7 +3372,7 @@ class CommentComponent {
3314
3372
  return this.totalPrevPagesHeight + (this.rectTop * this.zoom);
3315
3373
  }
3316
3374
  get height() {
3317
- return this.form.nativeElement.getBoundingClientRect().height / this.zoom;
3375
+ return HtmlTemplatesHelper.getAdjustedBoundingRect(this.form.nativeElement).height / this.zoom;
3318
3376
  }
3319
3377
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CommentComponent, deps: [{ token: i1.Store }, { token: CommentService }, { token: TagsServices }], target: i0.ɵɵFactoryTarget.Component }); }
3320
3378
  /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CommentComponent, selector: "mv-anno-comment", inputs: { rotate: "rotate", zoom: "zoom", index: "index", page: "page", comment: "comment", annotation: "annotation" }, outputs: { commentClick: "commentClick", renderComments: "renderComments", delete: "delete", updated: "updated", changes: "changes" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "editableComment", first: true, predicate: ["editableComment"], descendants: true }], ngImport: i0, template: "<div\n #form\n (click)=\"onCommentClick()\"\n class=\"aui-comment\"\n [ngClass]=\"{ stylestoggle: (marginToComment$ | async) }\"\n [style.top.px]=\"commentTop\"\n [style.zIndex]=\"selected ? 100 : 0\"\n>\n <div id=\"detailsWrapper {{ index }}\" class=\"aui-comment__header\">\n <span *ngIf=\"author && !editor\" class=\"aui-comment__author\">\n {{ author.forename }} {{ author.surname }}\n </span>\n <span *ngIf=\"editor\" class=\"aui-comment__author\">\n {{ editor.forename }} {{ editor.surname }}\n </span>\n <time [hidden]=\"!selected && !this.editable\" class=\"aui-comment__meta\">\n {{ lastUpdate | momentDate : \"d MMMM y h:mm a\" }}\n </time>\n </div>\n <mv-tags\n [tagItems]=\"tagItems\"\n [userId]=\"createdBy\"\n [editable]=\"editable\"\n [annoId]=\"_comment.annotationId\"\n >\n </mv-tags>\n <textarea\n *ngIf=\"selected && editable\"\n #editableComment\n mvTextAreaAutoExpand\n type=\"text\"\n required\n name=\"content\"\n [maxlength]=\"CHAR_LIMIT\"\n class=\"aui-comment__content form-control mimic-focus edit-mode expanded\"\n [ngModel]=\"fullComment\"\n (ngModelChange)=\"fullComment = $event; reRenderComments(); onCommentChange($event)\"\n aria-label=\"comment\"\n >\n </textarea>\n <p\n *ngIf=\"!editable\"\n mvTextHighlight\n class=\"commentText\"\n [textToHighlight]=\"searchString\"\n >\n {{ fullComment }}\n </p>\n <div\n *ngIf=\"\n selected ||\n this.editable ||\n (!fullComment.length && tagItems && !tagItems.length)\n \"\n class=\"aui-comment__footer commentBtns\"\n >\n <button\n class=\"govuk-button\"\n type=\"button\"\n role=\"button\"\n (click)=\"editOrSave()\"\n >\n {{ !editable ? (\"Edit\" | rpxTranslate) : (\"Save\" | rpxTranslate) }}\n </button>\n <button\n type=\"button\"\n role=\"button\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"deleteOrCancel()\"\n >\n {{ !editable ? (\"Delete\" | rpxTranslate) : (\"Cancel\" | rpxTranslate) }}\n </button>\n </div>\n <span class=\"aui-comment__private\">{{ \"private\" | rpxTranslate }}</span>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TextHighlightDirective, selector: "[mvTextHighlight]", inputs: ["textToHighlight"] }, { kind: "directive", type: TextareaAutoExpandDirective, selector: "[mvTextAreaAutoExpand]" }, { kind: "component", type: TagsComponent, selector: "mv-tags", inputs: ["tagItems", "userId", "editable", "annoId"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.RpxTranslatePipe, name: "rpxTranslate" }, { kind: "pipe", type: MomentDatePipe, name: "momentDate" }] }); }
@@ -3807,7 +3865,7 @@ class BoxHighlightCreateComponent {
3807
3865
  this.highlightPage();
3808
3866
  return;
3809
3867
  }
3810
- const rect = event.target.getBoundingClientRect(), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top;
3868
+ const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top;
3811
3869
  console.log(`initHighlight: rect=${JSON.stringify(rect)}, clientX=${event.clientX}, clientY=${event.clientY}, offsetX=${offsetX}, offsetY=${offsetY}`);
3812
3870
  this.position = 'absolute';
3813
3871
  this.backgroundColor = 'yellow';
@@ -3832,8 +3890,7 @@ class BoxHighlightCreateComponent {
3832
3890
  }
3833
3891
  }
3834
3892
  updateHighlight(event) {
3835
- const rect = event.target.getBoundingClientRect(), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top;
3836
- console.log(`updateHighlight: rect=${JSON.stringify(rect)}, clientX=${event.clientX}, clientY=${event.clientY}, offsetX=${offsetX}, offsetY=${offsetY}`);
3893
+ const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target, false), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top;
3837
3894
  if (this.drawStartX > 0 && this.drawStartY > 0) {
3838
3895
  this.height = Math.abs(offsetY - this.drawStartY);
3839
3896
  this.width = Math.abs(offsetX - this.drawStartX);
@@ -3846,6 +3903,7 @@ class BoxHighlightCreateComponent {
3846
3903
  let rectangle = this.highlightService
3847
3904
  .applyRotation(this.pageHeight, this.pageWidth, this.height, this.width, this.top, this.left, this.rotate, this.zoom);
3848
3905
  rectangle = { id: v4(), ...rectangle };
3906
+ console.log(`createHighlight: rectangle=${JSON.stringify(rectangle)}`);
3849
3907
  this.saveSelection.emit({ rectangles: [rectangle], page: this.page });
3850
3908
  this.resetHighlight();
3851
3909
  }
@@ -4035,10 +4093,11 @@ class CtxToolbarComponent {
4035
4093
  addOrEditComment() {
4036
4094
  this.addOrEditCommentEvent.emit();
4037
4095
  setTimeout(() => {
4096
+ // This hack to wait until the element is rendered seems to be unreliable,
4038
4097
  if (!location.hash) {
4039
- document.getElementById('viewerContainer').scrollBy(0, 1);
4098
+ document.getElementById('viewerContainer')?.scrollBy(0, 1);
4040
4099
  }
4041
- }, 10);
4100
+ }, 20);
4042
4101
  }
4043
4102
  createBookmark() {
4044
4103
  this.createBookmarkEvent.emit(this.rectangle);
@@ -4740,7 +4799,9 @@ class SideBarComponent {
4740
4799
  this.sidebarOpen = toggle;
4741
4800
  }));
4742
4801
  this.subscriptions.push(this.store.pipe(select(getScrollTop)).subscribe(scrollTopValue => {
4743
- this.sidebarDiv.nativeElement.scrollTop = scrollTopValue;
4802
+ if (this.sidebarDiv?.nativeElement) {
4803
+ this.sidebarDiv.nativeElement.scrollTop = scrollTopValue;
4804
+ }
4744
4805
  }));
4745
4806
  }
4746
4807
  ngOnChanges(changes) {
@@ -4917,7 +4978,8 @@ class HighlightCreateDirective {
4917
4978
  const range = selection.getRangeAt(0).cloneRange();
4918
4979
  const clientRects = range.getClientRects();
4919
4980
  if (clientRects) {
4920
- const parentRect = localElement.closest(".textLayer").getBoundingClientRect();
4981
+ const parentRect = HtmlTemplatesHelper
4982
+ .getAdjustedBoundingRect(localElement.closest(".textLayer"));
4921
4983
  const selectionRectangles = [];
4922
4984
  for (let i = 0; i < clientRects.length; i++) {
4923
4985
  const selectionRectangle = this.createTextRectangle(clientRects[i], parentRect);
@@ -5756,8 +5818,8 @@ class MainToolbarComponent {
5756
5818
  }
5757
5819
  }
5758
5820
  ngAfterViewInit() {
5759
- Array.from(this.mvToolbarMain.nativeElement.children).forEach(button => {
5760
- this.allButtonsWidth += button.getBoundingClientRect().width;
5821
+ Array.from(this.mvToolbarMain.nativeElement.children).forEach((button) => {
5822
+ this.allButtonsWidth += HtmlTemplatesHelper.getAdjustedBoundingRect(button).width;
5761
5823
  this.widthRequiredForBtn[button.id] = this.allButtonsWidth;
5762
5824
  });
5763
5825
  this.cdr.detectChanges();
@@ -6058,24 +6120,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
6058
6120
  type: Input
6059
6121
  }] } });
6060
6122
 
6061
- /**
6062
- * Helper Class
6063
- * Used for dynamic templates manipulation
6064
- * */
6065
- class HtmlTemplatesHelper {
6066
- static setDescribedBy(errorMessage, config) {
6067
- if (!errorMessage) {
6068
- return config.hint ? `${config.id}-hint` : null;
6069
- }
6070
- else if (errorMessage && errorMessage.isInvalid) {
6071
- return config.hint ? `${config.id}-hint ${config.id}-error` : `${config.id}-error`;
6072
- }
6073
- else {
6074
- return config.hint ? `${config.id}-hint` : null;
6075
- }
6076
- }
6077
- }
6078
-
6079
6123
  /*
6080
6124
  * Gov Uk Fieldset Component
6081
6125
  * Used to wrap group fieldset elements
@@ -6558,7 +6602,7 @@ class MediaViewerComponent {
6558
6602
  return;
6559
6603
  }
6560
6604
  if (!this.height) {
6561
- const compOffsetTop = this.elRef.nativeElement.getBoundingClientRect().top;
6605
+ const compOffsetTop = HtmlTemplatesHelper.getAdjustedBoundingRect(this.elRef.nativeElement).top;
6562
6606
  const viewerOffsetTop = this.viewerRef.nativeElement.offsetTop;
6563
6607
  const offset = compOffsetTop + viewerOffsetTop;
6564
6608
  if (this.prevOffset !== offset) {