{"version":3,"file":"hmcts-media-viewer.mjs","sources":["../../../projects/media-viewer/src/lib/viewers/viewer-exception.model.ts","../../../projects/media-viewer/src/lib/store/actions/document.actions.ts","../../../projects/media-viewer/src/lib/store/actions/tag.actions.ts","../../../projects/media-viewer/src/lib/store/actions/icp.actions.ts","../../../projects/media-viewer/src/lib/store/reducers/document.reducer.ts","../../../projects/media-viewer/src/lib/store/actions/annotation.actions.ts","../../../projects/media-viewer/src/lib/store/store-utils.ts","../../../projects/media-viewer/src/lib/store/reducers/annotations.reducer.ts","../../../projects/media-viewer/src/lib/store/reducers/tags.reducer.ts","../../../projects/media-viewer/src/lib/store/actions/bookmark.actions.ts","../../../projects/media-viewer/src/lib/store/bookmarks-store-utils.ts","../../../projects/media-viewer/src/lib/store/reducers/bookmarks.reducer.ts","../../../projects/media-viewer/src/lib/store/actions/redaction.actions.ts","../../../projects/media-viewer/src/lib/store/reducers/redaction.reducer.ts","../../../projects/media-viewer/src/lib/store/reducers/icp.reducer.ts","../../../projects/media-viewer/src/lib/store/reducers/reducers.ts","../../../projects/media-viewer/src/lib/store/selectors/document.selectors.ts","../../../projects/media-viewer/src/lib/shared/util/helpers/html-templates.helper.ts","../../../projects/media-viewer/src/lib/toolbar/icp-event.service.ts","../../../projects/media-viewer/src/lib/toolbar/toolbar-event.service.ts","../../../projects/media-viewer/src/lib/viewers/viewer-event.service.ts","../../../projects/media-viewer/src/lib/store/selectors/tag.selectors.ts","../../../projects/media-viewer/src/lib/store/selectors/annotation.selectors.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.ts","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.ts","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.ts","../../../projects/media-viewer/src/lib/print.service.ts","../../../projects/media-viewer/src/lib/store/selectors/icp.selectors.ts","../../../projects/media-viewer/src/lib/icp/icp.events.ts","../../../projects/media-viewer/src/lib/icp/socket.service.ts","../../../projects/media-viewer/src/lib/icp/icp-update.service.ts","../../../projects/media-viewer/src/lib/icp/icp-presenter.service.ts","../../../projects/media-viewer/src/lib/icp/icp-follower.service.ts","../../../projects/media-viewer/src/lib/icp/icp.service.ts","../../../projects/media-viewer/src/lib/toolbar/toolbar-button-visibility.service.ts","../../../projects/media-viewer/src/lib/toolbar/redaction-search-bar/redaction-search-bar.component.ts","../../../projects/media-viewer/src/lib/toolbar/redaction-search-bar/redaction-search-bar.component.html","../../../projects/media-viewer/src/lib/annotations/comment-set/comment/comment.service.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-render.service.ts","../../../projects/media-viewer/src/lib/annotations/services/tags/tags.services.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.ts","../../../projects/media-viewer/src/lib/annotations/tags/tags.component.ts","../../../projects/media-viewer/src/lib/annotations/tags/tags.component.html","../../../projects/media-viewer/src/lib/annotations/pipes/date/date.pipe.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment/comment.component.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment/comment.component.html","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set.component.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set.component.html","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-navigate/comments-navigate.component.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-navigate/comments-navigate.component.html","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.html","../../../projects/media-viewer/src/lib/annotations/pipes/filter/filter.pipe.ts","../../../projects/media-viewer/src/lib/annotations/pipes/unsnake/unsnake.pipe.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.html","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-header/comment-set-header.component.ts","../../../projects/media-viewer/src/lib/annotations/comment-set/comment-set-header/comment-set-header.component.html","../../../projects/media-viewer/src/lib/store/selectors/bookmark.selectors.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.html","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/box-highlight-create/keyboard-box-draw.directive.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.html","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-view/rectangle/keyboard-box-move.directive.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.html","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-view/annotation-view.component.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-view/annotation-view.component.html","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-set.component.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-set.component.html","../../../projects/media-viewer/src/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.html","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.ts","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.html","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.ts","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.html","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/side-bar/side-bar.component.ts","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/side-bar/side-bar.component.html","../../../projects/media-viewer/src/lib/viewers/grab-n-drag.directive.ts","../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/highlight-create/keyboard-text-highlight.directive.ts","../../../projects/media-viewer/src/lib/store/selectors/redaction.selectors.ts","../../../projects/media-viewer/src/lib/redaction/components/redaction.component.ts","../../../projects/media-viewer/src/lib/redaction/components/redaction.component.html","../../../projects/media-viewer/src/lib/bookmark/components/bookmark-icons.component.ts","../../../projects/media-viewer/src/lib/bookmark/components/bookmark-icons.component.html","../../../projects/media-viewer/src/lib/icp/participants-list/participants-list.component.ts","../../../projects/media-viewer/src/lib/icp/participants-list/participants-list.component.html","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/pdf-viewer.component.ts","../../../projects/media-viewer/src/lib/viewers/pdf-viewer/pdf-viewer.component.html","../../../projects/media-viewer/src/lib/viewers/viewer-util.service.ts","../../../projects/media-viewer/src/lib/viewers/image-viewer/image-viewer.component.ts","../../../projects/media-viewer/src/lib/viewers/image-viewer/image-viewer.component.html","../../../projects/media-viewer/src/lib/viewers/unsupported-viewer/unsupported-viewer.component.ts","../../../projects/media-viewer/src/lib/viewers/unsupported-viewer/unsupported-viewer.component.html","../../../projects/media-viewer/src/lib/annotations/services/annotation-api/annotation-api.service.ts","../../../projects/media-viewer/src/lib/shared/util/services/number.helper.service.ts","../../../projects/media-viewer/src/lib/toolbar/toolbar-focus.service.ts","../../../projects/media-viewer/src/lib/shared/directives/keyboard-nav.directive.ts","../../../projects/media-viewer/src/lib/toolbar/search-bar/search-bar.component.ts","../../../projects/media-viewer/src/lib/toolbar/search-bar/search-bar.component.html","../../../projects/media-viewer/src/lib/shared/directives/tooltip-dismiss.directive.ts","../../../projects/media-viewer/src/lib/toolbar/main-toolbar/main-toolbar.component.ts","../../../projects/media-viewer/src/lib/toolbar/main-toolbar/main-toolbar.component.html","../../../projects/media-viewer/src/lib/toolbar/redaction-toolbar/redaction-toolbar.component.ts","../../../projects/media-viewer/src/lib/toolbar/redaction-toolbar/redaction-toolbar.component.html","../../../projects/media-viewer/src/lib/toolbar/icp-toolbar/icp-toolbar.component.ts","../../../projects/media-viewer/src/lib/toolbar/icp-toolbar/icp-toolbar.component.html","../../../projects/media-viewer/src/lib/toolbar/highlight-toolbar/highlight-toolbar.component.ts","../../../projects/media-viewer/src/lib/toolbar/highlight-toolbar/highlight-toolbar.component.html","../../../projects/media-viewer/src/lib/shared/gov-uk-error-message/gov-uk-error-message.component.ts","../../../projects/media-viewer/src/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.ts","../../../projects/media-viewer/src/lib/shared/gov-uk-label/gov-uk-label.component.ts","../../../projects/media-viewer/src/lib/shared/gov-uk-date/gov-uk-date.component.ts","../../../projects/media-viewer/src/lib/shared/gov-uk-date/gov-uk-date.component.html","../../../projects/media-viewer/src/lib/annotations/comments-summary/comments-summary.component.ts","../../../projects/media-viewer/src/lib/annotations/comments-summary/comments-summary.component.html","../../../projects/media-viewer/src/lib/viewers/multimedia-player/multimedia-player.component.ts","../../../projects/media-viewer/src/lib/viewers/multimedia-player/multimedia-player.component.html","../../../projects/media-viewer/src/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.ts","../../../projects/media-viewer/src/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.html","../../../projects/media-viewer/src/lib/viewers/rotation-persist/rotation-persist.directive.ts","../../../projects/media-viewer/src/lib/icp/confirm-exit/confirm-action-dialog.component.ts","../../../projects/media-viewer/src/lib/icp/confirm-exit/confirm-action-dialog.component.html","../../../projects/media-viewer/src/lib/media-viewer.component.ts","../../../projects/media-viewer/src/lib/media-viewer.component.html","../../../projects/media-viewer/src/lib/shared/shared.module.ts","../../../projects/media-viewer/src/lib/toolbar/toolbar.module.ts","../../../projects/media-viewer/src/lib/annotations/services/bookmarks-api/bookmarks-api.service.ts","../../../projects/media-viewer/src/lib/annotations/annotations.module.ts","../../../projects/media-viewer/src/lib/store/effects/annotation.effects.ts","../../../projects/media-viewer/src/lib/store/effects/bookmarks.effects.ts","../../../projects/media-viewer/src/lib/redaction/services/redaction-api.service.ts","../../../projects/media-viewer/src/lib/store/effects/redaction.effects.ts","../../../projects/media-viewer/src/lib/viewers/convertible-content-viewer/document-conversion-api.service.ts","../../../projects/media-viewer/src/lib/viewers/rotation-persist/rotation-api.service.ts","../../../projects/media-viewer/src/lib/store/effects/document.effects.ts","../../../projects/media-viewer/src/lib/icp/icp-session-api.service.ts","../../../projects/media-viewer/src/lib/store/effects/icp.effects.ts","../../../projects/media-viewer/src/lib/store/effects/index.ts","../../../projects/media-viewer/src/lib/media-viewer.module.ts","../../../projects/media-viewer/src/public_api.ts","../../../projects/media-viewer/src/hmcts-media-viewer.ts"],"sourcesContent":["export enum ResponseType {\n  SUCCESS = 'SUCCESS',\n  FAILURE = 'FAILURE',\n  UNSUPPORTED = 'UNSUPPORTED'\n}\n\nexport interface ExceptionDetail {\n  httpResponseCode?: string;\n  message?: string;\n}\n\nexport class ViewerException {\n  exceptionType?: string;\n  detail?: ExceptionDetail;\n\n  constructor(exceptionType?: string, detail?: ExceptionDetail) {\n    this.exceptionType = exceptionType;\n    this.detail = detail;\n  }\n}\n","import { Action } from '@ngrx/store';\nimport { PageEvent } from '../../viewers/pdf-viewer/pdf-js/pdf-js-wrapper';\nimport { Rotation } from '../../viewers/rotation-persist/rotation.model';\nimport { PdfPosition } from '../reducers/document.reducer';\n\nexport const SET_DOCUMENT_ID = '[Document] Set Document Id';\nexport const POSITION_UPDATED = '[Document] Position Updated';\nexport const ADD_PAGES = '[Document] Add Pages';\nexport const CONVERT = '[Document] Convert';\nexport const CONVERT_SUCCESS = '[Document] Convert Success';\nexport const CONVERT_FAIL = '[Document] Convert Fail';\nexport const CLEAR_CONVERT_DOC_URL = '[Document] Clear Convert Doc Url';\n\nexport const LOAD_ROTATION = '[Document] Load Rotation';\nexport const LOAD_ROTATION_SUCCESS = '[Document] Load Rotation Success';\nexport const LOAD_ROTATION_FAIL = '[Document] Load Rotation Fail';\nexport const SAVE_ROTATION = '[Document] Save Rotation';\nexport const SAVE_ROTATION_SUCCESS = '[Document] Save Rotation Success';\nexport const SAVE_ROTATION_FAIL = '[Document] Save Rotation Fail';\n\nexport class SetDocumentId implements Action {\n  readonly type = SET_DOCUMENT_ID;\n  constructor(public payload: string) { }\n}\n\nexport class AddPages implements Action {\n  readonly type = ADD_PAGES;\n  constructor(public payload: PageEvent[]) { }\n}\n\nexport class PdfPositionUpdate implements Action {\n  readonly type = POSITION_UPDATED;\n  constructor(public payload: PdfPosition) {}\n}\n\nexport class Convert implements Action {\n  readonly type = CONVERT;\n  constructor(public payload: string ) {}\n}\n\nexport class ConvertSuccess implements Action {\n  readonly type = CONVERT_SUCCESS;\n  constructor(public payload: string ) {}\n}\n\nexport class ConvertFailure implements Action {\n  readonly type = CONVERT_FAIL;\n  constructor(public payload: string) {}\n}\n\nexport class ClearConvertDocUrl implements Action {\n  readonly type = CLEAR_CONVERT_DOC_URL;\n}\n\nexport class LoadRotation implements Action {\n  readonly type = LOAD_ROTATION;\n  constructor(public payload: string) {\n  }\n}\n\nexport class LoadRotationSuccess implements Action {\n  readonly type = LOAD_ROTATION_SUCCESS;\n  constructor(public payload: { rotationAngle: number }) {\n  }\n}\n\nexport class LoadRotationFailure implements Action {\n  readonly type = LOAD_ROTATION_FAIL;\n  constructor(public payload: Error) {\n  }\n}\n\nexport class SaveRotation implements Action {\n  readonly type = SAVE_ROTATION;\n  constructor(public payload: Rotation) {\n  }\n}\n\nexport class SaveRotationSuccess implements Action {\n  readonly type = SAVE_ROTATION_SUCCESS;\n  constructor(public payload: { rotationAngle: number }) {\n  }\n}\n\nexport class SaveRotationFailure implements Action {\n  readonly type = SAVE_ROTATION_FAIL;\n  constructor(public payload: Error) {\n  }\n}\n\nexport type DocumentActions =\n  | AddPages | SetDocumentId | Convert\n  | ConvertSuccess | ConvertFailure | ClearConvertDocUrl\n  | PdfPositionUpdate | LoadRotation | LoadRotationSuccess\n  | LoadRotationFailure | SaveRotation | SaveRotationSuccess\n  | SaveRotationFailure;\n","import { Action } from '@ngrx/store';\nimport {TagsModel} from '../../annotations/models/tags.model';\nexport const UPDATE_TAGS = '[Tags] Update Tags';\nexport const ADD_FILTER_TAGS = '[Tags] Add Filter Tags';\nexport const CLEAR_FILTER_TAGS = '[Tags] Clear Filter Tags';\n\nexport class UpdateTags implements Action {\n  readonly type = UPDATE_TAGS;\n  constructor(public payload: {tags: TagsModel[]; annoId: string}) {}\n}\n\nexport class AddFilterTags implements Action {\n  readonly type = ADD_FILTER_TAGS;\n  constructor(public payload: {[id: string]: boolean}) {}\n}\n\nexport class ClearFilterTags implements Action {\n  readonly type = CLEAR_FILTER_TAGS;\n}\n\n\nexport type TagsActions =\n  | UpdateTags\n  | AddFilterTags\n  | ClearFilterTags;\n","import { Action } from '@ngrx/store';\nimport { IcpParticipant, IcpSession } from '../../icp/icp.interfaces';\n\nexport const SET_CASE_ID = '[Icp] Set Case Id';\nexport const LOAD_ICP_SESSION = '[Icp] Load Session';\nexport const LOAD_ICP_SESSION_FAIL = '[Icp] Load Session Failure';\nexport const JOIN_ICP_SOCKET_SESSION = '[Icp] Join Socket Session';\nexport const ICP_SOCKET_SESSION_JOINED = '[Icp] Socket Session Joined';\nexport const LEAVE_ICP_SOCKET_SESSION = '[Icp] Leave Socket Session';\nexport const ICP_PRESENTER_UPDATED = '[Icp] Presenter Updated';\nexport const ICP_PARTICIPANT_LIST_UPDATED = '[Icp] Participant List Updated';\n\nexport class SetCaseId implements Action {\n  readonly type = SET_CASE_ID;\n  constructor(public payload: string) { }\n}\n\nexport class LoadIcpSession implements Action {\n  readonly type = LOAD_ICP_SESSION;\n  constructor(public payload: { caseId: string, documentId: string }) { }\n}\n\nexport class LoadIcpSessionFailure implements Action {\n  readonly type = LOAD_ICP_SESSION_FAIL;\n  constructor(public payload: Error) { }\n}\n\nexport class JoinIcpSocketSession implements Action {\n  readonly type = JOIN_ICP_SOCKET_SESSION;\n  constructor(public payload: { username: string, session: IcpSession }) { }\n}\n\nexport class IcpSocketSessionJoined implements Action {\n  readonly type = ICP_SOCKET_SESSION_JOINED;\n  constructor(public payload: { session: IcpSession, participantInfo: { client: IcpParticipant, presenter: IcpParticipant } }) { }\n}\n\nexport class LeaveIcpSocketSession implements Action {\n  readonly type = LEAVE_ICP_SOCKET_SESSION;\n  constructor() { }\n}\n\nexport class IcpPresenterUpdated implements Action {\n  readonly type = ICP_PRESENTER_UPDATED;\n  constructor(public payload: IcpParticipant) { }\n}\n\nexport class IcpParticipantListUpdated implements Action {\n  readonly type = ICP_PARTICIPANT_LIST_UPDATED;\n  constructor(public payload: any) { }\n}\n\nexport type IcpActions =\n  | SetCaseId\n  | LoadIcpSession\n  | LoadIcpSessionFailure\n  | JoinIcpSocketSession\n  | IcpSocketSessionJoined\n  | LeaveIcpSocketSession\n  | IcpPresenterUpdated\n  | IcpParticipantListUpdated;\n","import * as fromActions from '../actions/document.actions';\n\nexport interface DocumentState {\n  convertedDocument: {\n    url: string;\n    error: string;\n  };\n  documentId: string;\n  pdfPosition: PdfPosition;\n  pages: {[id: string]: DocumentPages};\n  hasDifferentPageSize: boolean;\n  rotation: number;\n  rotationLoaded: boolean;\n  loaded: boolean;\n  loading: boolean;\n}\n\nexport interface DocumentPages {\n numberOfPages: number;\n styles: { left: number, height: number, width: number };\n scaleRotation: { scale: string; rotation: string };\n viewportScale: number;\n}\n\nexport interface PdfPosition {\n  pageNumber: number;\n  scale: number;\n  top: number;\n  left: number;\n  rotation: number;\n}\n\nexport const initialDocumentState: DocumentState = {\n  convertedDocument: undefined,\n  documentId: undefined,\n  pdfPosition: undefined,\n  pages: {},\n  hasDifferentPageSize: false,\n  rotation: undefined,\n  rotationLoaded: false,\n  loading: false,\n  loaded: false\n};\n\nexport function docReducer (state = initialDocumentState,\n                            action: fromActions.DocumentActions): DocumentState {\n\n  switch (action.type) {\n\n    case fromActions.CONVERT_SUCCESS: {\n      const convertedDocument = {\n        url: action.payload,\n        error: undefined\n      };\n      return {\n        ...state,\n        convertedDocument\n      };\n    }\n\n    case fromActions.CONVERT_FAIL: {\n      const convertedDocument = {\n        url: undefined,\n        error: action.payload\n      };\n      return {\n        ...state,\n        convertedDocument\n      };\n    }\n\n    case fromActions.CLEAR_CONVERT_DOC_URL: {\n      const convertedDocument = undefined;\n      return {\n        ...state,\n        convertedDocument\n      };\n    }\n\n    case fromActions.LOAD_ROTATION: {\n      return {\n        ...state,\n        rotationLoaded: false\n      };\n    }\n\n    case fromActions.LOAD_ROTATION_SUCCESS: {\n      const metadata = action.payload;\n      const rotation = metadata ? metadata.rotationAngle : 0;\n      return {\n        ...state,\n        rotation,\n        rotationLoaded: true\n      };\n    }\n\n    case fromActions.LOAD_ROTATION_FAIL: {\n      return {\n        ...state,\n        rotation: 0,\n        rotationLoaded: true\n      };\n    }\n\n    case fromActions.SAVE_ROTATION_SUCCESS: {\n      const metadata = action.payload;\n      const rotation = metadata.rotationAngle;\n      return {\n        ...state,\n        rotation\n      };\n    }\n\n    case fromActions.SET_DOCUMENT_ID : {\n      return {\n        ...state,\n        documentId: action.payload\n      };\n    }\n\n    case fromActions.ADD_PAGES: {\n      const payload = action.payload;\n      let pages = {};\n      let pageHeight;\n      let pageWidth;\n      let hasDifferentPageSize = state.hasDifferentPageSize;\n      const pageNumberInput = document.getElementById('pageNumber') as HTMLInputElement;\n      const pageIndex = pageNumberInput?.value ? parseInt(pageNumberInput.value, 10) - 1 : 0;\n      const loadedPage = payload[pageIndex]?.div['attributes']?.style?.value ?? '';\n      payload.forEach(page => {\n        const sizingValue = page.div?.['attributes']?.style?.value ?? '';\n        const widthMatch  = sizingValue.match(/width:\\s*round\\(down,\\s*var\\(--scale-factor\\)\\s*\\*\\s*([\\d.]+)([a-z%]+)?,.*var\\(--scale-round-x, ([\\d.]+)([a-z%]+)?\\)\\)/);\n        const heightMatch = sizingValue.match(/height:\\s*round\\(down,\\s*var\\(--scale-factor\\)\\s*\\*\\s*([\\d.]+)([a-z%]+)?,.*var\\(--scale-round-y, ([\\d.]+)([a-z%]+)?\\)\\)/);\n        const scaleRoundXMatch = loadedPage.match(/--scale-round-x:\\s*([\\d.]+)([a-z%]+)?/);\n        const scaleRoundYMatch = loadedPage.match(/--scale-round-y:\\s*([\\d.]+)([a-z%]+)?/);\n        // You can now use widthUnit, heightUnit, scaleRoundXUnit, scaleRoundYUnit as needed\n        const scaleFactor = page.viewportScale ?? 1;\n        const scaleRoundX = scaleRoundXMatch ? parseFloat(scaleRoundXMatch[1]) : 1;\n        const scaleRoundY = scaleRoundYMatch ? parseFloat(scaleRoundYMatch[1]) : 1;\n        const baseWidth = widthMatch ? parseFloat(widthMatch[1]) : undefined;\n        const baseHeight = heightMatch ? parseFloat(heightMatch[1]) : undefined;\n        function roundDown(value: number, step: number): number {\n          return Math.floor(value / step) * step;\n        }\n        const computedWidth = baseWidth !== undefined\n          ? roundDown(scaleFactor * baseWidth, scaleRoundX)\n          : page.div['clientWidth'];\n        const computedHeight = baseHeight !== undefined\n          ? roundDown(scaleFactor * baseHeight, scaleRoundY)\n          : page.div['clientHeight'];\n\n        if (!hasDifferentPageSize && pageHeight && pageWidth &&\n          (pageHeight !== computedHeight || pageWidth !== computedWidth)) {\n          hasDifferentPageSize = true;\n        } else {\n          pageHeight = computedHeight;\n          pageWidth = computedWidth;\n        }\n        const styles = {\n          left: page.div['offsetLeft'],\n          height: computedHeight,\n          width: computedWidth\n        };\n\n        const scaleRotation = {\n          scale: page.scale,\n          rotation: page.rotation\n        };\n\n        const p = {\n          styles,\n          scaleRotation,\n          viewportScale: page.viewportScale\n        };\n\n        pages = {\n          ...pages,\n          [page.id]: p\n        };\n\n      });\n      return {\n        ...state,\n        pages,\n        hasDifferentPageSize\n      };\n    }\n\n    case fromActions.POSITION_UPDATED: {\n      const pdfPosition = action.payload;\n      return {\n        ...state,\n        pdfPosition\n      };\n    }\n  }\n  return state;\n}\nexport const getDocPages = (state: DocumentState) => state.pages;\nexport const getDocId = (state: DocumentState) => state.documentId;\nexport const getPdfPos = (state: DocumentState) => state.pdfPosition;\nexport const getHasDifferentPageSizes = (state: DocumentState) => state.hasDifferentPageSize;\nexport const getRotation = (state: DocumentState) => state.rotation;\nexport const rotationLoaded = (state: DocumentState) => state.rotationLoaded;\nexport const getConvertedDocument = (state: DocumentState) => state.convertedDocument;\n","import { Action } from '@ngrx/store';\nimport { Annotation } from '../../annotations/annotation-set/annotation-view/annotation.model';\nimport { SelectionAnnotation } from '../../annotations/models/event-select.model';\nimport { AnnotationSet } from '../../annotations/annotation-set/annotation-set.model';\nimport { Filters } from '../models/filters.interface';\nimport { Comment } from '../../annotations/comment-set/comment/comment.model';\n\nexport const LOAD_ANNOTATION_SET = '[Annotations] Load Annotation Set';\nexport const LOAD_ANNOTATION_SET_SUCCESS = '[Annotations] Load Annotation Set Success';\nexport const LOAD_ANNOTATION_SET_FAIL = '[Annotations] Load Annotation Set Fail';\n\nexport const SAVE_ANNOTATION_SET = '[Annotations] Save Annotation Set';\nexport const SAVE_ANNOTATION_SET_SUCCESS = '[Annotations] Save Annotation Set Success';\nexport const SAVE_ANNOTATION_SET_FAIL = '[Annotations] Save Annotation Set Fail';\n\nexport const SAVE_ANNOTATION = '[Annotations] Save Annotation';\nexport const SAVE_ANNOTATION_SUCCESS = '[Annotations] Save Annotation Success';\nexport const SAVE_ANNOTATION_FAIL = '[Annotations] Save Annotation Fail';\nexport const ADD_OR_EDIT_COMMENT = '[Annotations] Add or Edit Comment';\n\nexport const DELETE_ANNOTATION = '[Annotations] Delete Annotation';\nexport const DELETE_ANNOTATION_SUCCESS = '[Annotations] Delete Annotation Success';\nexport const DELETE_ANNOTATION_FAIL = '[Annotations] Delete Annotation Fail';\n\nexport const SELECT_ANNOTATION = '[Annotations] Select Annotation';\nexport const SEARCH_COMMENT = '[Comments] Search Comments';\nexport const APPLY_COMMENT_SUMMARY_FILTER = '[Comments] Apply Comment Summary Filter';\nexport const CLEAR_COMMENT_SUMMARY_FILTER = '[Comments] Clear Comment Summary Filter';\n\nexport class LoadAnnotationSet implements Action {\n  readonly type = LOAD_ANNOTATION_SET;\n  constructor(public payload: string) { }\n}\n\nexport class SaveAnnotationSet implements Action {\n  readonly type = SAVE_ANNOTATION_SET;\n  constructor(public payload: AnnotationSet) { }\n}\n\nexport class LoadAnnotationSetSucess implements Action {\n  readonly type = LOAD_ANNOTATION_SET_SUCCESS;\n  constructor(public payload: { status: number, body: AnnotationSet }) { }\n}\n\nexport class SaveAnnotationSetSuccess implements Action {\n  readonly type = SAVE_ANNOTATION_SET_SUCCESS;\n  constructor(public payload: AnnotationSet) { }\n}\n\nexport class LoadAnnotationSetFail implements Action {\n  readonly type = LOAD_ANNOTATION_SET_FAIL;\n  constructor(public payload: { status: number, body: any }) { }\n}\n\nexport class SaveAnnotationSetFail implements Action {\n  readonly type = SAVE_ANNOTATION_SET_FAIL;\n  constructor(public payload: { status: number, body: any }) { }\n}\n\nexport class SaveAnnotation implements Action {\n  readonly type = SAVE_ANNOTATION;\n  constructor(public payload: Annotation, public autoSelect?: boolean) { }\n}\n\nexport class SaveAnnotationSuccess implements Action {\n  readonly type = SAVE_ANNOTATION_SUCCESS;\n  constructor(public payload: any) { }\n}\n\nexport class SaveAnnotationFail implements Action {\n  readonly type = SAVE_ANNOTATION_FAIL;\n  constructor(public payload: Error) { }\n}\n\nexport class AddOrEditComment implements Action {\n  readonly type = ADD_OR_EDIT_COMMENT;\n  constructor(public payload: Comment) { }\n}\n\nexport class DeleteAnnotation implements Action {\n  readonly type = DELETE_ANNOTATION;\n  constructor(public payload: string) { }\n}\n\nexport class DeleteAnnotationSuccess implements Action {\n  readonly type = DELETE_ANNOTATION_SUCCESS;\n  constructor(public payload: string) { }\n}\n\nexport class DeleteAnnotationFail implements Action {\n  readonly type = DELETE_ANNOTATION_FAIL;\n  constructor(public payload: Error) { }\n}\n\nexport class SelectedAnnotation implements Action {\n  readonly type = SELECT_ANNOTATION;\n  constructor(public payload: SelectionAnnotation) { }\n}\n\nexport class SearchComment implements Action {\n  readonly type = SEARCH_COMMENT;\n  constructor(public payload: string) { }\n}\n\nexport class ApplyCommentSymmaryFilter implements Action {\n  readonly type = APPLY_COMMENT_SUMMARY_FILTER;\n  constructor(public payload: Filters) { }\n}\n\nexport class ClearCommentSummaryFilters implements Action {\n  readonly type = CLEAR_COMMENT_SUMMARY_FILTER;\n}\n\nexport type AnnotationsActions =\n  | LoadAnnotationSet\n  | LoadAnnotationSetSucess\n  | LoadAnnotationSetFail\n  | SaveAnnotation\n  | SaveAnnotationSuccess\n  | SaveAnnotationFail\n  | SaveAnnotationSetSuccess\n  | AddOrEditComment\n  | DeleteAnnotation\n  | DeleteAnnotationSuccess\n  | DeleteAnnotationFail\n  | SelectedAnnotation\n  | SearchComment\n  | ApplyCommentSymmaryFilter\n  | ClearCommentSummaryFilters;\n","import { Annotation } from '../annotations/annotation-set/annotation-view/annotation.model';\nimport moment from 'moment-timezone';\nimport { Redaction } from '../redaction/services/redaction.model';\nimport { Filters } from './models/filters.interface';\nimport { Comment } from '../annotations/comment-set/comment/comment.model';\n\n/*\n  @dynamic\n  marking class as dynamic to stop compiler throwing error for lambda in static function\n  see https://github.com/angular/angular/issues/19698#issuecomment-338340211\n */\nexport class StoreUtils {\n\n  static groupByKeyEntities(annotations, key): {[id: string]: any[]} {\n    return annotations.reduce((h, obj) =>\n      Object.assign(h, { [obj[key]]: ( h[obj[key]] || [] ).concat(obj) }), {});\n  }\n\n  static generateCommentsEntities(annotations): {[id: string]: Comment} {\n     return annotations.reduce(\n      (commentEntities: { [id: string]: Annotation }, annotation: Annotation) => {\n        if (annotation.comments.length) {\n          const comment = {\n            ...annotation.comments[0] || '',\n            tags: [...annotation.tags || []]\n          };\n          return {\n            ...commentEntities,\n            [annotation.id]: comment\n          };\n        }\n        return {\n          ...commentEntities\n        };\n      }, {});\n  }\n\n  static genTagNameEntities(annotations) {\n    const filterAnnoWithoutCommentsTags = annotations.filter(a => (a.comments.length && a.tags.length));\n    const allTags = filterAnnoWithoutCommentsTags.map(anno => this.groupByKeyEntities(anno.tags, 'name'));\n    const groupedByName = allTags.reduce(\n      (tagEntitiy: { [id: string]: Annotation }, tagItem) => {\n        return {\n          ...tagEntitiy,\n          ...tagItem\n        };\n      }, {});\n\n    return this.genNameEnt(annotations, groupedByName);\n  }\n\n  static genNameEnt(annos, groupedByName) {\n     return Object.keys(groupedByName).reduce(\n      (tagNameEnt, key) => {\n        const readyAnno = annos.filter(anno => anno.tags.find(tag => tag.name === key))\n          .map(anno => anno.id)\n          .reduce((obj: {[id: string]: string}, anno: string) => ({ ...obj, [anno]: anno }), {});\n\n        return {\n          ...tagNameEnt,\n          [key]: readyAnno\n        };\n      }, {});\n\n  }\n\n  static generateAnnotationEntities(anno): {[id: string]: Annotation} {\n    return anno.reduce(\n      (annoEntities: { [id: string]: Annotation }, annotation: Annotation) => {\n        const annot = {\n          ...annotation,\n          positionTop: annotation.rectangles[0].y // todo remove this\n        };\n        return {\n          ...annoEntities,\n          [annotation.id]: annot\n        };\n      }, {});\n  }\n\n  static generateRedactionEntities(redactions: Redaction[]): { [id: string]: Redaction } {\n    return redactions.reduce(\n      (redactEntities: { [id: string]: Redaction }, redaction: Redaction) => {\n        return {\n          ...redactEntities,\n          [redaction.redactionId]: redaction\n        };\n      }, {});\n  }\n\n  static resetCommentEntSelect(ent: { [id: string]: Comment }) {\n    return Object.keys(ent).reduce((object, key) => {\n      object[key] = {\n        ...ent[key],\n        editable: false,\n        selected: false\n      };\n      return object;\n    }, {});\n  }\n\n  static filterCommentsSummary(comments: Array<Comment>, filters: Filters) {\n    if (Object.keys(filters).length) {\n      const tagFilterApplied = Object.keys(filters.tagFilters)\n        .filter(key => filters.tagFilters[key] === true).length;\n      const dateFilterApplied = (filters.dateRangeFrom || filters.dateRangeTo);\n      const filteredComments = comments.filter(comment => {\n        let hasTagFilter = false;\n        let hasDateFilter = false;\n        // check tags\n        if (filters.hasOwnProperty('tagFilters')) {\n          Object.keys(filters.tagFilters).forEach(filter => {\n            const label = filters.tagFilters[filter];\n            if (label) {\n              return comment.tags.forEach(tag => {\n                if (tag.name === filter && !hasTagFilter) {\n                  hasTagFilter = true;\n                }\n              });\n            }});\n        }\n        // check for dates\n        if (dateFilterApplied) {\n          const commentDate = moment(comment.lastModifiedDate);\n          const dateFrom =  filters.dateRangeFrom !== null ? moment(filters.dateRangeFrom) : undefined;\n          const dateTo = filters.dateRangeTo !== null ? moment(filters.dateRangeTo) : undefined;\n\n          if (dateTo && dateFrom) {\n            if (commentDate > dateFrom && commentDate < dateTo) {\n              hasDateFilter = true;\n            }\n          }\n          if (dateTo && !dateFrom) {\n            if (commentDate <= dateTo) {\n              hasDateFilter = true;\n            }\n          }\n          if (dateFrom && !dateTo) {\n            if (commentDate > dateFrom) {\n              hasDateFilter = true;\n            }\n          }\n        }\n\n        return (hasTagFilter || hasDateFilter);\n      });\n      return (tagFilterApplied || dateFilterApplied) ? filteredComments : comments;\n    } else {\n      return comments;\n    }\n  }\n}\n","import { v4 as uuid } from 'uuid';\nimport * as fromAnnotations from '../actions/annotation.actions';\nimport { Annotation } from '../../annotations/annotation-set/annotation-view/annotation.model';\nimport { Comment } from '../../annotations/comment-set/comment/comment.model';\nimport { StoreUtils } from '../store-utils';\nimport { SelectionAnnotation } from '../../annotations/models/event-select.model';\nimport { Filters } from '../models/filters.interface';\n\nexport interface AnnotationSetState {\n  annotationSet: any;\n  annotationEntities: { [id: string]: any };\n  annotationPageEntities: { [id: string]: Annotation[] };\n  commentEntities: { [id: string]: Comment };\n  selectedAnnotation: SelectionAnnotation;\n  commentSearchQueries: { commentSearch: string };\n  commentSummaryFilters: { hasFilter: boolean; filters: Filters };\n  loaded: boolean;\n  loading: boolean;\n}\n\nexport const initialState: AnnotationSetState = {\n  annotationSet: {},\n  annotationEntities: {},\n  commentEntities: {},\n  annotationPageEntities: {},\n  selectedAnnotation: null,\n  commentSearchQueries: { commentSearch: '' },\n  commentSummaryFilters: { hasFilter: false, filters: {} },\n  loading: false,\n  loaded: false,\n};\n\nexport function reducer(\n  state = initialState,\n  action: fromAnnotations.AnnotationsActions\n): AnnotationSetState {\n  switch (action.type) {\n\n    case fromAnnotations.LOAD_ANNOTATION_SET: {\n      const annotationSet = {\n        ...state.annotationSet,\n        documentId: action.payload\n      };\n      return {\n        ...initialState,\n        annotationSet,\n        loading: true\n      };\n    }\n    case fromAnnotations.LOAD_ANNOTATION_SET_SUCCESS:\n    case fromAnnotations.LOAD_ANNOTATION_SET_FAIL: {\n      const annotationSet = action.payload.status === 200 ? action.payload.body :\n        {\n          ...state.annotationSet,\n          annotations: [],\n          id: uuid()\n        };\n      const annotationEntities = StoreUtils.generateAnnotationEntities(annotationSet.annotations);\n      const annotationPageEntities = StoreUtils.groupByKeyEntities(annotationSet.annotations, 'page');\n      const commentEntities = StoreUtils.generateCommentsEntities(annotationSet.annotations);\n      return {\n        ...state,\n        annotationSet,\n        annotationEntities,\n        annotationPageEntities,\n        commentEntities,\n        loading: false,\n        loaded: true\n      };\n    }\n\n    case fromAnnotations.SAVE_ANNOTATION_SET_SUCCESS: {\n      const anno = action.payload.annotations;\n      const annEntities = {\n        ...state.annotationEntities,\n        ...anno\n      };\n      const annotArray = Object.keys(annEntities).map(key => annEntities[key]);\n      const annotationEntities = StoreUtils.generateAnnotationEntities(annotArray);\n      const annotationPageEntities = StoreUtils.groupByKeyEntities(annotArray, 'page');\n      const commentEntities = StoreUtils.generateCommentsEntities(annotArray);\n      const selectedAnnotation = {\n        ...state.selectedAnnotation,\n        ...anno,\n        editable: false\n      };\n      return {\n        ...state,\n        annotationEntities,\n        annotationPageEntities,\n        commentEntities,\n        selectedAnnotation,\n        loading: false,\n        loaded: true\n      };\n\n    }\n\n    case fromAnnotations.SAVE_ANNOTATION_SUCCESS: {\n      const anno = action.payload;\n      const annEntities = {\n        ...state.annotationEntities,\n        [anno.id]: anno\n      };\n      const annotArray = Object.keys(annEntities).map(key => annEntities[key]);\n      const annotationEntities = StoreUtils.generateAnnotationEntities(annotArray);\n      const annotationPageEntities = StoreUtils.groupByKeyEntities(annotArray, 'page');\n      const commentEntities = StoreUtils.generateCommentsEntities(annotArray);\n      const selectedAnnotation = {\n        ...state.selectedAnnotation,\n        annotationId: anno.id,\n        editable: false\n      };\n      return {\n        ...state,\n        annotationEntities,\n        annotationPageEntities,\n        commentEntities,\n        selectedAnnotation,\n        loading: false,\n        loaded: true\n      };\n    }\n\n    case fromAnnotations.DELETE_ANNOTATION_SUCCESS: {\n      const id = action.payload;\n      const page = state.annotationEntities[id].page;\n      const annotationEntities = {\n        ...state.annotationEntities\n      };\n      delete annotationEntities[id];\n      const pageAnnotationsRemoved = [\n        ...state.annotationPageEntities[page].filter(anno => anno.id !== id)\n      ];\n      const annotationPageEntities = {\n        ...state.annotationPageEntities,\n        [page]: pageAnnotationsRemoved\n      };\n      const commentEntities = {\n        ...state.commentEntities\n      };\n      if (state.commentEntities[id]) {\n        delete commentEntities[id];\n      }\n      return {\n        ...state,\n        annotationEntities,\n        annotationPageEntities,\n        commentEntities\n      };\n    }\n\n    case fromAnnotations.ADD_OR_EDIT_COMMENT: {\n      const comment = {\n        [action.payload.annotationId]: action.payload\n      };\n      const comments = {\n        ...state.commentEntities,\n        ...comment\n      };\n      return {\n        ...state,\n        commentEntities: comments\n      };\n    }\n\n    case fromAnnotations.SELECT_ANNOTATION: {\n      const payload = action.payload;\n      const commentEntity = {\n        ...state.commentEntities[payload.annotationId],\n        editable: payload.editable,\n        selected: payload.selected\n      };\n\n      const resetCommentEntSelect = StoreUtils.resetCommentEntSelect({ ...state.commentEntities });\n\n      const commentEntities = payload.annotationId && state.commentEntities[payload.annotationId] ? {\n        ...resetCommentEntSelect,\n        [payload.annotationId]: commentEntity\n      } : { ...resetCommentEntSelect };\n\n      return {\n        ...state,\n        commentEntities,\n        selectedAnnotation: action.payload\n      };\n    }\n\n    case fromAnnotations.SEARCH_COMMENT: {\n      const commentSearchQueries = {\n        ...state.commentSearchQueries,\n        commentSearch: action.payload\n      };\n\n      const commentEntities = StoreUtils.resetCommentEntSelect({ ...state.commentEntities });\n      return {\n        ...state,\n        commentEntities,\n        commentSearchQueries\n      };\n    }\n\n    case fromAnnotations.APPLY_COMMENT_SUMMARY_FILTER: {\n      const payload = action.payload;\n      const hasTagFilter = () => {\n        let isFiltered = false;\n        if (payload.tagFilters) {\n          Object.keys(payload.tagFilters).map(filter => {\n            if (payload.tagFilters[filter] && !isFiltered) {\n              isFiltered = true;\n            }\n          });\n        }\n        return isFiltered;\n      };\n      const hasFilter = (hasTagFilter() || !!payload.dateRangeFrom || !!payload.dateRangeTo);\n      const commentSummaryFilters = {\n        hasFilter,\n        filters: payload\n      };\n      return {\n        ...state,\n        commentSummaryFilters: commentSummaryFilters\n      };\n    }\n\n    case fromAnnotations.CLEAR_COMMENT_SUMMARY_FILTER: {\n\n      return {\n        ...state,\n        commentSummaryFilters: { ...initialState.commentSummaryFilters }\n      };\n    }\n  }\n\n\n  return state;\n}\n\nexport const getAnnoSet = (state: AnnotationSetState) => state.annotationSet;\nexport const getCommentEnts = (state: AnnotationSetState) => state.commentEntities;\nexport const getAnnoPageEnt = (state: AnnotationSetState) => state.annotationPageEntities;\nexport const getAnnoEnt = (state: AnnotationSetState) => state.annotationEntities;\nexport const getSelectedAnno = (state: AnnotationSetState) => state.selectedAnnotation;\nexport const commentSearchQ = (state: AnnotationSetState) => state.commentSearchQueries;\nexport const getSummaryFilters = (state: AnnotationSetState) => state.commentSummaryFilters;\n","import * as fromAnnotations from '../actions/annotation.actions';\nimport * as fromTags from '../actions/tag.actions';\nimport {StoreUtils} from '../store-utils';\nimport {Annotation} from '../../annotations/annotation-set/annotation-view/annotation.model';\n\nexport interface TagsState {\n  tagNameEnt: {[id: string]: string[]};\n  filteredComments: {[id: string]: string[]};\n  filteredPageEntities: {[id: string]: Annotation[]};\n  annotations: Annotation[];\n  formFilterState: {[id: string]: boolean};\n  filters: string[];\n}\n\nexport const initialTagState: TagsState = {\n  tagNameEnt: {},\n  annotations: [],\n  filteredPageEntities: {},\n  filteredComments: {},\n  formFilterState: {},\n  filters: []\n};\n\nexport function tagsReducer (\n  state = initialTagState,\n  action: fromAnnotations.AnnotationsActions | fromTags.TagsActions\n): TagsState {\n  switch (action.type) {\n    case fromAnnotations.LOAD_ANNOTATION_SET: {\n\n      return {\n        ...state,\n        ...initialTagState\n      };\n    }\n    case fromAnnotations.LOAD_ANNOTATION_SET_SUCCESS: {\n      const annotations = action.payload.body.annotations;\n      const tagNameEnt = StoreUtils.genTagNameEntities(annotations);\n      return {\n        ...state,\n        tagNameEnt,\n        annotations\n      };\n    }\n\n    case fromAnnotations.SAVE_ANNOTATION_SUCCESS: {\n      const payload = action.payload;\n\n      const anno = [...state.annotations].filter(a => a.id !== payload.id) || [];\n      const annotations = [...anno, payload];\n      const tagNameEnt =  StoreUtils.genTagNameEntities(annotations);\n      return {\n        ...state,\n        annotations,\n        tagNameEnt\n      };\n    }\n\n    case fromAnnotations.DELETE_ANNOTATION_SUCCESS: {\n      const id = action.payload;\n      const annotations = [...state.annotations].filter(a => a.id !== id);\n      const tagNameEnt =  StoreUtils.genTagNameEntities(annotations);\n      const filteredPageEntities = StoreUtils.groupByKeyEntities(annotations, 'page');\n      const filteredComments = {\n        ...state.filteredComments\n      };\n      delete filteredComments[id];\n      return {\n        ...state,\n        annotations,\n        tagNameEnt,\n        filteredComments,\n        filteredPageEntities,\n        filters: []\n      };\n    }\n\n\n    case fromTags.ADD_FILTER_TAGS: {\n      const formFilterState = action.payload;\n\n      const filters = Object.keys(formFilterState).reduce((arr: string[], key: string) => {\n        return formFilterState[key] ? [...arr, key] : arr;\n      }, []);\n\n      const filteredComments = filters.reduce((obj: {[id: string]: any}, f) => {\n        return {\n          ...obj,\n          ...state.tagNameEnt[f]\n        };\n      }, {});\n\n      const annotations = Object.keys(filteredComments).map(key => state.annotations.filter(a => a.id === key)[0]);\n      const filteredPageEntities = StoreUtils.groupByKeyEntities(annotations, 'page');\n      return {\n        ...state,\n        filters,\n        filteredComments,\n        filteredPageEntities,\n      };\n    }\n\n    case fromTags.CLEAR_FILTER_TAGS: {\n      return {\n        ...state,\n        filters: [],\n        filteredComments: {},\n        filteredPageEntities: {},\n      };\n    }\n\n  }\n\n  return state;\n}\n\nexport const getTagNameEnt = (state: TagsState) => state.tagNameEnt;\nexport const getFilters = (state: TagsState) => state.filters;\nexport const getFilteredComments = (state: TagsState) => state.filteredComments;\nexport const getFilteredPageEnt = (state: TagsState) => state.filteredPageEntities;\n","import { Action } from '@ngrx/store';\nimport { Bookmark } from '../../viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces';\n\nexport const LOAD_BOOKMARKS = '[Bookmarks] Load Bookmarks';\nexport const LOAD_BOOKMARKS_SUCCESS = '[Bookmarks] Load Bookmarks Success';\nexport const LOAD_BOOKMARKS_FAIL = '[Bookmarks] Load Bookmarks Failure';\nexport const CREATE_BOOKMARK = '[Bookmarks] Create Bookmark';\nexport const CREATE_BOOKMARK_SUCCESS = '[Bookmarks] Create Bookmark Success';\nexport const CREATE_BOOKMARK_FAIL = '[Bookmarks] Create Bookmark Failure';\nexport const DELETE_BOOKMARK = '[Bookmarks] Delete Bookmark';\nexport const DELETE_BOOKMARK_SUCCESS = '[Bookmarks] Delete Bookmark Success';\nexport const DELETE_BOOKMARK_FAIL = '[Bookmarks] Delete Bookmark Failure';\nexport const MOVE_BOOKMARK = '[Bookmarks] Move Bookmark';\nexport const MOVE_BOOKMARK_SUCCESS = '[Bookmarks] Move Bookmark Success';\nexport const MOVE_BOOKMARK_FAIL = '[Bookmarks] Move Bookmark Failure';\nexport const UPDATE_BOOKMARK = '[Bookmarks] Update Bookmark';\nexport const UPDATE_BOOKMARK_SUCCESS = '[Bookmarks] Update Bookmark Success';\nexport const UPDATE_BOOKMARK_FAIL = '[Bookmarks] Update Bookmark Failure';\nexport const UPDATE_BOOKMARK_SCROLL_TOP = '[Bookmarks] Update Bookmark Scroll Top'\n\nexport class LoadBookmarks implements Action {\n  readonly type = LOAD_BOOKMARKS;\n  constructor() { }\n}\n\nexport class LoadBookmarksSuccess implements Action {\n  readonly type = LOAD_BOOKMARKS_SUCCESS;\n  constructor(public payload: { body: Bookmark[], status: number }) { }\n}\n\nexport class LoadBookmarksFailure implements Action {\n  readonly type = LOAD_BOOKMARKS_FAIL;\n  constructor(public payload: { body: any, status: number }) { }\n}\n\nexport class CreateBookmark implements Action {\n  readonly type = CREATE_BOOKMARK;\n  constructor(public payload: Bookmark) { }\n}\n\nexport class CreateBookmarkSuccess implements Action {\n  readonly type = CREATE_BOOKMARK_SUCCESS;\n  constructor(public payload: Bookmark) { }\n}\n\nexport class CreateBookmarkFailure implements Action {\n  readonly type = CREATE_BOOKMARK_FAIL;\n  constructor(public payload: Bookmark) { }\n}\n\nexport class DeleteBookmark implements Action {\n  readonly type = DELETE_BOOKMARK;\n  constructor(public payload: { deleted: string[], updated: Bookmark }) { }\n}\n\nexport class DeleteBookmarkSuccess implements Action {\n  readonly type = DELETE_BOOKMARK_SUCCESS;\n  constructor(public payload: string[]) { }\n}\n\nexport class DeleteBookmarkFailure implements Action {\n  readonly type = DELETE_BOOKMARK_FAIL;\n  constructor(public payload: string) { }\n}\n\nexport class MoveBookmark implements Action {\n  readonly type = MOVE_BOOKMARK;\n  constructor(public payload: Bookmark[]) { }\n}\n\nexport class MoveBookmarkSuccess implements Action {\n  readonly type = MOVE_BOOKMARK_SUCCESS;\n  constructor(public payload: Bookmark[]) { }\n}\n\nexport class MoveBookmarkFailure implements Action {\n  readonly type = MOVE_BOOKMARK_FAIL;\n  constructor(public payload: string) { }\n}\n\nexport class UpdateBookmark implements Action {\n  readonly type = UPDATE_BOOKMARK;\n  constructor(public payload: Bookmark) { }\n}\n\nexport class UpdateBookmarkSuccess implements Action {\n  readonly type = UPDATE_BOOKMARK_SUCCESS;\n  constructor(public payload: Bookmark) { }\n}\n\nexport class UpdateBookmarkFailure implements Action {\n  readonly type = UPDATE_BOOKMARK_FAIL;\n  constructor(public payload: Bookmark) { }\n}\n\nexport class UpdateBookmarkScrollTop implements Action {\n  readonly type = UPDATE_BOOKMARK_SCROLL_TOP;\n  constructor(public payload: number) { }\n}\n\n\nexport type BookmarksActions =\n  | LoadBookmarks | LoadBookmarksSuccess | LoadBookmarksFailure\n  | CreateBookmark | CreateBookmarkSuccess | CreateBookmarkFailure\n  | DeleteBookmark | DeleteBookmarkSuccess | DeleteBookmarkFailure\n  | UpdateBookmark | UpdateBookmarkSuccess | UpdateBookmarkFailure\n  | MoveBookmark | MoveBookmarkSuccess | MoveBookmarkFailure | UpdateBookmarkScrollTop;\n","import { Bookmark } from '../viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces';\n\nexport const getBookmarkChildren = (bookmarks: Bookmark[]) => {\n  if (bookmarks) {\n    return bookmarks.reduce((childIds, bookmark) => {\n      if (bookmark.children && bookmark.children.length > 0) {\n        return [...childIds, bookmark.id, ...getBookmarkChildren(bookmark.children)];\n      }\n      return [...childIds, bookmark.id];\n    }, []);\n  } else {\n    return [];\n  }\n};\n\nexport const generateBookmarkEntities = (bookmarks: Bookmark[]): {[id: string]: Bookmark} => {\n  return bookmarks.reduce(\n    (bookmarkEntities, bookmark) =>\n      Object.assign(bookmarkEntities, { [bookmark.id]: bookmark }),\n    {});\n};\n\nconst indexEntities = (entities: { [id: string]: Bookmark }) => {\n  const entityIds = Object.keys(entities);\n  for (let index = 0; entityIds.length > 0; index++) {\n    let keysToRemove = [];\n    entityIds.forEach(key => {\n      if (!entities[key].previous || !entityIds.includes(entities[key].previous.toString())) {\n        entities[key].index = index;\n        keysToRemove.push(key);\n      }\n    });\n    keysToRemove.forEach(key => entityIds.splice(entityIds.indexOf(key), 1));\n    keysToRemove = [];\n  }\n};\n\nexport const generateBookmarkNodes = (entities: { [id: string]: Bookmark }) => {\n  const bookmarkEntities = JSON.parse(JSON.stringify(entities));\n  indexEntities(bookmarkEntities);\n  return Object.keys(bookmarkEntities).reduce((nodes, bookmarkId) => {\n    const bookmarkEntity = bookmarkEntities[bookmarkId];\n    if (bookmarkEntity.parent) {\n      const parentEntity = bookmarkEntities[bookmarkEntity.parent];\n      if (!parentEntity.children) {\n        parentEntity.children = [];\n      }\n      parentEntity.children[bookmarkEntity.index] = bookmarkEntity;\n    } else {\n      nodes[bookmarkEntity.index] = bookmarkEntity;\n    }\n    return nodes;\n  }, []);\n};\n","import * as fromBookmarks from '../actions/bookmark.actions';\nimport { Bookmark } from '../../viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces';\nimport { StoreUtils } from '../store-utils';\nimport { generateBookmarkEntities } from '../bookmarks-store-utils';\n\nexport interface BookmarksState {\n  bookmarks: Bookmark[];\n  bookmarkEntities: { [id: string]: Bookmark };\n  bookmarkPageEntities: { [id: string]: any };\n  editableBookmark: string;\n  loaded: boolean;\n  loading: boolean;\n  scrollTop?: number;\n}\n\nexport const initialBookmarksState: BookmarksState = {\n  bookmarks: [],\n  bookmarkEntities: {},\n  bookmarkPageEntities: {},\n  editableBookmark: undefined,\n  loaded: false,\n  loading: false,\n  scrollTop: null,\n};\n\nexport function bookmarksReducer(state = initialBookmarksState,\n  action: fromBookmarks.BookmarksActions): BookmarksState {\n\n  switch (action.type) {\n\n    case fromBookmarks.LOAD_BOOKMARKS: {\n      return {\n        ...state,\n        loading: true\n      };\n    }\n\n    case fromBookmarks.LOAD_BOOKMARKS_SUCCESS:\n    case fromBookmarks.LOAD_BOOKMARKS_FAIL: {\n      const bookmarks = action.payload.status === 200 ? action.payload.body : [];\n      const bookmarkEntities = generateBookmarkEntities(bookmarks);\n      const bookmarkPageEntities = StoreUtils.groupByKeyEntities(bookmarks, 'pageNumber');\n\n      return {\n        ...state,\n        bookmarks,\n        bookmarkEntities,\n        bookmarkPageEntities,\n        loaded: true\n      };\n    }\n\n    case fromBookmarks.CREATE_BOOKMARK_SUCCESS: {\n      const bookmark: Bookmark = action.payload;\n      const bookmarkEntities = {\n        ...state.bookmarkEntities,\n        [bookmark.id]: bookmark,\n      };\n      const bookmarkArray = Object.keys(bookmarkEntities).map(key => bookmarkEntities[key]);\n      const bookmarkPageEntities = StoreUtils.groupByKeyEntities(bookmarkArray, 'pageNumber');\n      const editableBookmark = bookmark.id;\n      return {\n        ...state,\n        bookmarkEntities,\n        editableBookmark,\n        bookmarkPageEntities,\n        loading: false,\n        loaded: true\n      };\n    }\n\n    case fromBookmarks.MOVE_BOOKMARK_SUCCESS: {\n      const movedBookmarks = generateBookmarkEntities(action.payload);\n      const bookmarkEntities = {\n        ...state.bookmarkEntities,\n        ...movedBookmarks\n      };\n      return {\n        ...state,\n        bookmarkEntities,\n        loading: false,\n        loaded: true\n      };\n    }\n\n    case fromBookmarks.DELETE_BOOKMARK_SUCCESS: {\n      const bookmarkIds: string[] = action.payload;\n      const bookmarkEntities = { ...state.bookmarkEntities };\n      const bookmarkPageEntities = { ...state.bookmarkPageEntities };\n      const removeBookmarksByPage: { [pageNumber: number]: string[] } = {};\n      bookmarkIds.forEach(bookmarkId => {\n        if (removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber] !== undefined &&\n          removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber].length > 0) {\n          removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber].push(bookmarkId);\n        } else {\n          removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber] = [bookmarkId];\n        }\n        delete bookmarkEntities[bookmarkId];\n      });\n\n      Object.entries(removeBookmarksByPage).forEach(\n        ([pageNumber, bmrkIds]) => {\n          bookmarkPageEntities[pageNumber]\n            = bookmarkPageEntities[pageNumber].filter(bookmark => !bmrkIds.includes(bookmark.id));\n        }\n      );\n\n      return {\n        ...state,\n        bookmarkEntities,\n        bookmarkPageEntities,\n        loading: false,\n        loaded: true\n      };\n    }\n\n    case fromBookmarks.UPDATE_BOOKMARK_SUCCESS: {\n      const bookmark: Bookmark = action.payload;\n      const bookmarkEntities = {\n        ...state.bookmarkEntities,\n        [bookmark.id]: { ...bookmark }\n      };\n      const bookmarkArray = Object.keys(bookmarkEntities).map(key => bookmarkEntities[key]);\n      const bookmarkPageEntities = StoreUtils.groupByKeyEntities(bookmarkArray, 'pageNumber');\n      const editableBookmark = undefined;\n      return {\n        ...state,\n        bookmarkEntities,\n        editableBookmark,\n        bookmarkPageEntities,\n        loading: false,\n        loaded: true\n      };\n    }\n    case fromBookmarks.UPDATE_BOOKMARK_SCROLL_TOP: {\n      const scrollTop: number = action.payload;\n      return {\n        ...state,\n        scrollTop: scrollTop\n      }\n    }\n  }\n  return state;\n}\n\nexport const getBookmarks = (state: BookmarksState) => state.bookmarks;\nexport const getBookmarkEnts = (state: BookmarksState) => state.bookmarkEntities;\nexport const getBookmarkPageEnt = (state: BookmarksState) => state.bookmarkPageEntities;\nexport const getEditBookmark = (state: BookmarksState) => state.editableBookmark;\nexport const getScrollTop = (state: BookmarksState) => state.scrollTop;","import { Action } from '@ngrx/store';\nimport { BulkRedaction, Redaction } from '../../redaction/services/redaction.model';\nimport { Annotation } from '../../annotations/annotation-set/annotation-view/annotation.model';\n\nexport const LOAD_REDACTIONS = '[Redaction] Load Redaction';\nexport const LOAD_REDACTION_SUCCESS = '[Redaction] Load Redaction Success';\nexport const LOAD_REDACTION_FAIL = '[Redaction] Load Redaction Fail';\n\nexport const SAVE_REDACTION = '[Redaction] Save Redaction';\nexport const SAVE_REDACTION_SUCCESS = '[Redaction] Save Redaction Success';\nexport const SAVE_REDACTION_FAIL = '[Redaction] Save Redaction Fail';\n\nexport const SAVE_BULK_REDACTION = '[Redaction] Save bulk Redaction';\nexport const SAVE_BULK_REDACTION_SUCCESS = '[Redaction] Save bulk Redaction Success';\nexport const SAVE_BULK_REDACTION_FAIL = '[Redaction] Save bulk Redaction Fail';\n\nexport const DELETE_REDACTION = '[Redaction] Delete Redaction';\nexport const DELETE_REDACTION_SUCCESS = '[Redaction] Delete Redaction Success';\nexport const DELETE_REDACTION_FAIL = '[Redaction] Delete Redaction Fail';\n\nexport const SELECT_REDACTION = '[Redaction] Select Redaction';\n\nexport const REDACT = '[Redaction] Redact';\nexport const REDACT_SUCCESS = '[Redaction] Redact Success';\nexport const REDACT_FAIL = '[Redaction] Redact Fail';\nexport const RESET_REDACTED_DOCUMENT = '[Redaction] Reset Redacted Document';\n\nexport const UNMARK_ALL = '[Redaction] Unmark All';\nexport const UNMARK_ALL_SUCCESS = '[Redaction] Unmark All Success';\n\n\nexport class LoadRedactions implements Action {\n  readonly type = LOAD_REDACTIONS;\n  constructor(public payload: any) { }\n}\n\nexport class LoadRedactionSuccess implements Action {\n  readonly type = LOAD_REDACTION_SUCCESS;\n  constructor(public payload: Redaction[]) { }\n}\n\nexport class LoadRedactionFailure implements Action {\n  readonly type = LOAD_REDACTION_FAIL;\n  constructor(public payload: any) { }\n}\n\nexport class SaveRedaction implements Action {\n  readonly type = SAVE_REDACTION;\n  constructor(public payload: Redaction) { }\n}\n\nexport class SaveRedactionSuccess implements Action {\n  readonly type = SAVE_REDACTION_SUCCESS;\n  constructor(public payload: Redaction) { }\n}\n\nexport class SaveRedactionFailure implements Action {\n  readonly type = SAVE_REDACTION_FAIL;\n  constructor(public payload: any) { }\n}\n\nexport class SaveBulkRedactionFailure implements Action {\n  readonly type = SAVE_BULK_REDACTION_FAIL;\n  constructor(public payload: any) { }\n}\n\nexport class SaveBulkRedaction implements Action {\n  readonly type = SAVE_BULK_REDACTION;\n  constructor(public payload: BulkRedaction) { }\n}\n\nexport class SaveBulkRedactionSuccess implements Action {\n  readonly type = SAVE_BULK_REDACTION_SUCCESS;\n  constructor(public payload: BulkRedaction) { }\n}\n\nexport class DeleteRedaction implements Action {\n  readonly type = DELETE_REDACTION;\n  constructor(public payload: Annotation) { }\n}\n\nexport class DeleteRedactionSuccess implements Action {\n  readonly type = DELETE_REDACTION_SUCCESS;\n  constructor(public payload: any) { }\n}\n\nexport class DeleteRedactionFailure implements Action {\n  readonly type = DELETE_REDACTION_FAIL;\n  constructor(public payload: any) { }\n}\n\nexport class SelectRedaction implements Action {\n  readonly type = SELECT_REDACTION;\n  constructor(public payload: any) { }\n}\n\nexport class Redact implements Action {\n  readonly type = REDACT;\n  constructor(public payload: { redactions: Redaction[], documentId: string }) { }\n}\n\nexport class RedactSuccess implements Action {\n  readonly type = REDACT_SUCCESS;\n  constructor(public payload: { blob: Blob, filename: string }) { }\n}\n\nexport class RedactFailure implements Action {\n  readonly type = REDACT_FAIL;\n  constructor(public payload: any) { }\n}\n\nexport class ResetRedactedDocument implements Action {\n  readonly type = RESET_REDACTED_DOCUMENT;\n}\n\n\nexport class UnmarkAll implements Action {\n  readonly type = UNMARK_ALL;\n  constructor(public payload: string) { }\n}\n\nexport class UnmarkAllSuccess implements Action {\n  readonly type = UNMARK_ALL_SUCCESS;\n}\n\nexport type RedactionActions =\n  | LoadRedactions | LoadRedactionSuccess | LoadRedactionFailure\n  | SaveRedaction | SaveRedactionSuccess | SaveRedactionFailure\n  | DeleteRedaction | DeleteRedactionSuccess | DeleteRedactionFailure\n  | SelectRedaction\n  | Redact | RedactSuccess | RedactFailure | ResetRedactedDocument\n  | UnmarkAll | UnmarkAllSuccess | SaveBulkRedactionSuccess;\n","import { map } from 'rxjs/operators';\nimport * as fromRedaction from '../actions/redaction.actions';\nimport * as fromAnnotations from '../actions/annotation.actions';\nimport { StoreUtils } from '../store-utils';\nimport { SelectionAnnotation } from '../../annotations/models/event-select.model';\nimport { Redaction } from '../../redaction/services/redaction.model'; // todo rename\n\n\nexport interface RedactionState {\n  redactionEntities: { [id: string]: Redaction };\n  redactionPageEntities: { [id: string]: any };\n  selectedRedaction: SelectionAnnotation | {};\n  redactedDocumentInfo: { blob: Blob, filename: string };\n  documentId: string;\n}\n\nexport const initialRedactionState: RedactionState = {\n  redactionEntities: {},\n  redactionPageEntities: {},\n  selectedRedaction: {},\n  redactedDocumentInfo: undefined,\n  documentId: undefined\n};\n\nexport function redactionReducer(\n  state = initialRedactionState,\n  action: fromRedaction.RedactionActions | fromAnnotations.AnnotationsActions\n): RedactionState {\n  switch (action.type) {\n\n    case fromRedaction.LOAD_REDACTIONS: {\n      return {\n        ...state,\n        ...initialRedactionState\n      };\n    }\n\n    case fromRedaction.LOAD_REDACTION_SUCCESS: {\n      const payload = action.payload;\n      if (payload) {\n        const redactionEntities = StoreUtils.generateRedactionEntities(payload);\n        const redactionPageEntities = StoreUtils.groupByKeyEntities(payload, 'page');\n        return {\n          ...state,\n          redactionEntities,\n          redactionPageEntities\n        };\n      }\n      return {\n        ...state\n      };\n    }\n\n    case fromRedaction.SAVE_REDACTION_SUCCESS: {\n      const { payload } = action;\n      const redactionEntities = {\n        ...state.redactionEntities,\n        [payload.redactionId]: payload\n      };\n      const redactionArray = Object.keys(redactionEntities).map(key => redactionEntities[key]);\n      const redactionPageEntities = StoreUtils.groupByKeyEntities(redactionArray, 'page');\n      return {\n        ...state,\n        redactionEntities,\n        redactionPageEntities\n      };\n    }\n    case fromRedaction.SAVE_BULK_REDACTION_SUCCESS: {\n      const payloadResult = Object.assign({}, ...action.payload.searchRedactions.map((x) => ({ [x.redactionId]: x })));\n      const redactionEntities = {\n        ...state.redactionEntities,\n        ...payloadResult\n      };\n      const redactionArray = Object.keys(redactionEntities).map(key => redactionEntities[key]);\n      const redactionPageEntities = StoreUtils.groupByKeyEntities(redactionArray, 'page');\n      return {\n        ...state,\n        redactionEntities,\n        redactionPageEntities\n      };\n    }\n    case fromRedaction.SELECT_REDACTION:\n    case fromAnnotations.SELECT_ANNOTATION: {\n      return {\n        ...state,\n        selectedRedaction: action.payload\n      };\n    }\n\n    case fromRedaction.DELETE_REDACTION_SUCCESS: {\n      const page = action.payload.page;\n      const id = action.payload.redactionId;\n      const redactionEntities = {\n        ...state.redactionEntities\n      };\n      delete redactionEntities[id];\n      const pageRedactionRemoved = [\n        ...state.redactionPageEntities[page].filter(redaction => redaction.redactionId !== id)\n      ];\n      const redactionPageEntities = {\n        ...state.redactionPageEntities,\n        [page]: pageRedactionRemoved\n      };\n\n      return {\n        ...state,\n        redactionPageEntities,\n        redactionEntities,\n      };\n    }\n\n    case fromRedaction.REDACT_SUCCESS: {\n      const redactedDocumentInfo = action.payload;\n      return {\n        ...state,\n        ...initialRedactionState,\n        redactedDocumentInfo\n      };\n    }\n\n    case fromRedaction.RESET_REDACTED_DOCUMENT: {\n      return {\n        ...state,\n        redactedDocumentInfo: undefined\n      };\n    }\n\n    case fromRedaction.UNMARK_ALL_SUCCESS: {\n      return {\n        ...state,\n        ...initialRedactionState\n      };\n    }\n  }\n\n  return state;\n}\n\n\nexport const getRedactionEnt = (state: RedactionState) => state.redactionEntities;\nexport const getPageEnt = (state: RedactionState) => state.redactionPageEntities;\nexport const getSelectedRedaction = (state: RedactionState) => state.selectedRedaction;\nexport const getRedactedDocInfo = (state: RedactionState) => state.redactedDocumentInfo;\n","import * as fromIcpActions from '../actions/icp.actions';\nimport { IcpSession, IcpState } from '../../icp/icp.interfaces';\n\nexport const initialIcpSessionState: IcpState = {\n  session: null,\n  presenter: null,\n  client: null,\n  participants: []\n};\n\nexport function icpReducer (state = initialIcpSessionState,\n                                  action: fromIcpActions.IcpActions): IcpState {\n\n  switch (action.type) {\n\n    case fromIcpActions.SET_CASE_ID: {\n      const caseId = action.payload;\n      const session = {...state.session, caseId};\n      return {\n        ...state,\n        session\n      };\n    }\n\n    case fromIcpActions.ICP_SOCKET_SESSION_JOINED: {\n      const session: IcpSession = action.payload.session;\n      const participantInfo = action.payload.participantInfo;\n      return {\n        ...state,\n        session,\n        client: participantInfo.client,\n        presenter: participantInfo.presenter,\n      };\n    }\n\n    case fromIcpActions.ICP_PARTICIPANT_LIST_UPDATED: {\n      const updatedParticipants: any = action.payload;\n      const participants = Object.keys(updatedParticipants)\n        .map(id => ({ id: id, username: updatedParticipants[id] }));\n      return {\n        ...state,\n        participants\n      };\n    }\n\n    case fromIcpActions.ICP_PRESENTER_UPDATED: {\n      const presenter = action.payload;\n      return {\n        ...state, presenter\n      };\n    }\n\n    case fromIcpActions.LEAVE_ICP_SOCKET_SESSION: {\n      return {\n        ...state,\n        ...initialIcpSessionState\n      };\n    }\n  }\n  return state;\n}\n\nexport const getIcpSession = (state: IcpState) => state.session;\nexport const getPresenter = (state: IcpState) => state.presenter;\nexport const getClient = (state: IcpState) => state.client;\nexport const getParticipants = (state: IcpState) => state.participants;\n","import { ActionReducerMap, createFeatureSelector } from '@ngrx/store';\nimport * as fromDocument from './document.reducer';\nimport * as fromAnnotation from './annotations.reducer';\nimport * as fromTags from './tags.reducer';\nimport * as fromBookmarks from './bookmarks.reducer';\nimport * as fromRedaction from './redaction.reducer';\nimport * as fromIcp from './icp.reducer';\nimport { IcpState } from '../../icp/icp.interfaces';\n\nexport interface State {\n  document: fromDocument.DocumentState;\n  annotations: fromAnnotation.AnnotationSetState;\n  tags: fromTags.TagsState;\n  bookmarks: fromBookmarks.BookmarksState;\n  redactions: fromRedaction.RedactionState;\n  icp: IcpState;\n}\n\nexport const reducers: ActionReducerMap<State> = {\n  document: fromDocument.docReducer,\n  annotations: fromAnnotation.reducer,\n  tags: fromTags.tagsReducer,\n  bookmarks: fromBookmarks.bookmarksReducer,\n  redactions: fromRedaction.redactionReducer,\n  icp: fromIcp.icpReducer,\n};\n\nexport const getMVState = createFeatureSelector<State>('media-viewer');\n\nexport * from './document.reducer';\nexport * from './annotations.reducer';\nexport * from './tags.reducer';\nexport * from './bookmarks.reducer';\nexport * from './redaction.reducer';\nexport * from './icp.reducer';\n","import { createSelector } from '@ngrx/store';\n\nimport * as fromFeature from '../reducers/reducers';\nimport * as fromDocument from '../reducers/document.reducer';\n\nexport const getDocumentState = createSelector(\n  fromFeature.getMVState,\n  (state: fromFeature.State) => state.document\n);\n\nexport const getPages = createSelector(\n  getDocumentState,\n  fromDocument.getDocPages\n);\n\nexport const getPageList = createSelector(\n  getPages,\n  (pages) => Object.values(pages)\n);\n\nexport const getDocumentId = createSelector(\n  getDocumentState,\n  fromDocument.getDocId\n);\n\nexport const getPdfPosition = createSelector(\n  getDocumentState,\n  fromDocument.getPdfPos\n);\n\nexport const getPageDifference = createSelector(\n  getDocumentState,\n  fromDocument.getHasDifferentPageSizes\n);\n\nexport const getConvertedDocument = createSelector(\n  getDocumentState,\n  fromDocument.getConvertedDocument\n);\n\nexport const getRotation = createSelector(\n  getDocumentState,\n  fromDocument.getRotation\n);\n\nexport const rotationLoaded = createSelector(\n  getDocumentState,\n  fromDocument.rotationLoaded\n);\n","/**\n * Helper Class\n * Used for dynamic templates manipulation\n * */\n\nexport class HtmlTemplatesHelper {\n\n  static setDescribedBy(errorMessage, config) {\n    if (!errorMessage) {\n      return config.hint ? `${config.id}-hint` : null;\n    } else if (errorMessage && errorMessage.isInvalid) {\n      return  config.hint ? `${config.id}-hint ${config.id}-error` : `${config.id}-error`;\n    } else {\n      return config.hint ? `${config.id}-hint` : null;\n    }\n  }\n\n  static getAdjustedBoundingRect(element: HTMLElement, log: boolean = true): DOMRect {\n    const viewportX = window.visualViewport.offsetLeft\n    const viewportY = window.visualViewport.offsetTop;\n    const viewportScale = window.visualViewport.scale;\n    const viewportPageX  = window.visualViewport.pageLeft;\n    const viewportPageY  = window.visualViewport.pageTop;\n    if (log && viewportX || viewportY || (viewportScale != 1)  || viewportPageX || viewportPageY) {\n      console.log(`Element: ${element.id} Viewport X: ${viewportX}, Y: ${viewportY}, Scale: ${viewportScale}, PageX: ${viewportPageX}, PageY: ${viewportPageY}`);\n    }\n    return element.getBoundingClientRect();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IcpEventService {\n\n  enabled = new BehaviorSubject(false);\n  sessionLaunch = new Subject<void>();\n  becomingPresenter = new Subject<void>();\n  stoppingPresenting = new Subject<void>();\n  leavingSession = new BehaviorSubject(false);\n  sessionExitConfirmed = new Subject<void>();\n  participantsListVisible = new BehaviorSubject(false);\n\n  constructor() { }\n\n  launchSession = () => {\n    this.sessionLaunch.next();\n  };\n\n  enable = () => {\n    this.enabled.next(true);\n    this.launchSession();\n  };\n\n  becomePresenter = () => {\n    this.becomingPresenter.next();\n  };\n\n  stopPresenting = () => {\n    this.stoppingPresenting.next();\n  };\n\n  leaveSession = () => {\n    this.leavingSession.next(true);\n  };\n\n  confirmExit = () => {\n    this.sessionExitConfirmed.next();\n    this.participantsListVisible.next(false);\n    this.enabled.next(false);\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n// import * as icpEvents from './icp-event.service';\n// import { participantsListVisible } from './icp-event.service';\nimport { RedactionSearch } from './redaction-search-bar/redaction-search.model';\nimport { IcpEventService } from './icp-event.service';\n\n// Toolbar Custom-Event Types\nexport type HighlightMode = boolean;\nexport type DrawMode = boolean;\nexport interface SearchOperation {\n  searchTerm: string;\n  highlightAll: boolean;\n  matchCase: boolean;\n  wholeWord: boolean;\n  previous: boolean;\n  reset: boolean;\n}\nexport interface SearchResultsCount {\n  current: number;\n  total: number;\n  isPrevious: boolean;\n}\n\nexport enum SearchType {\n  Redact = 'Redact',\n  Highlight = 'Highlight',\n}\n\nexport interface SearchMode {\n  modeType: SearchType;\n  isOpen: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarEventService {\n\n  constructor(private icpEventService: IcpEventService) {}\n\n  public readonly highlightModeSubject = new BehaviorSubject<HighlightMode>(false);\n  public readonly highlightToolbarSubject = new BehaviorSubject<HighlightMode>(false);\n  public readonly drawModeSubject = new BehaviorSubject<DrawMode>(false);\n  public readonly rotateSubject = new Subject<number>();\n  public readonly searchSubject = new Subject<SearchOperation>();\n  public readonly searchResultsCountSubject = new Subject<SearchResultsCount>();\n  public readonly zoomSubject = new Subject<number>();\n  public readonly stepZoomSubject = new Subject<number>();\n  public readonly zoomValueSubject = new BehaviorSubject<number>(1);\n  public readonly pageCountSubject = new Subject<number>();\n  public readonly printSubject = new Subject<void>();\n  public readonly downloadSubject = new Subject<void>();\n  public readonly setCurrentPageSubject = new Subject<number>();\n  public readonly setCurrentPageInputValueSubject = new BehaviorSubject<number>(1);\n  public readonly changePageByDeltaSubject = new Subject<number>();\n  public readonly showCommentSummary = new BehaviorSubject<boolean>(false);\n  public readonly grabNDrag = new BehaviorSubject<boolean>(false);\n  public readonly saveRotationSubject = new Subject<void>();\n\n  public readonly redactionMode = new BehaviorSubject(false);\n  public readonly redactionPreview = new Subject<boolean>();\n  public readonly applyRedactToDocument = new Subject<void>();\n\n  public readonly clearAllRedactMarkers = new Subject<void>();\n  public readonly redactWholePage = new Subject<void>();\n  public readonly redactionSerachSubject = new Subject<RedactionSearch>();\n  public readonly redactAllInProgressSubject = new BehaviorSubject(false);\n  public readonly openRedactionSearch = new BehaviorSubject<SearchMode | null>(null);\n\n  public readonly sidebarOpen = new BehaviorSubject(false);\n  public readonly sidebarOutlineView = new BehaviorSubject(true);\n\n  public readonly searchBarHidden = new BehaviorSubject(true);\n  public readonly commentsPanelVisible = new BehaviorSubject(false);\n\n  /**\n   * Reset the stateful behaviour subjects\n   */\n  public reset(): void {\n    this.setCurrentPageSubject.next(1);\n    this.setCurrentPageInputValueSubject.next(1);\n    this.zoomValueSubject.next(1);\n    this.highlightModeSubject.next(false);\n    this.highlightToolbarSubject.next(false);\n    this.drawModeSubject.next(false);\n    this.showCommentSummary.next(false);\n    this.grabNDrag.next(false);\n  }\n\n  // Function to inform Observers that highlightMode has been enabled\n  public toggleHighlightMode(): void {\n    // Highlight and Draw states are mutually exclusive\n    if (this.highlightModeSubject.getValue() === false) {\n      this.drawModeSubject.next(false);\n      this.grabNDrag.next(false);\n      this.highlightModeSubject.next(true);\n    } else {\n      this.highlightModeSubject.next(false);\n    }\n  }\n\n  // Function to inform Observers that ToggleMode has been enabled\n  public toggleDrawMode(): void {\n    if (this.drawModeSubject.getValue() === false) {\n      this.highlightModeSubject.next(false);\n      this.grabNDrag.next(false);\n      this.drawModeSubject.next(true);\n    } else {\n      this.drawModeSubject.next(false);\n    }\n  }\n\n  public toggleHighlightToolbar(): void {\n    const isOpening = !this.highlightToolbarSubject.getValue();\n    this.highlightToolbarSubject.next(isOpening);\n    if (!isOpening) {\n      this.highlightModeSubject.next(false);\n      this.drawModeSubject.next(false);\n    }\n  }\n\n  public rotate(angle: number): void {\n    this.rotateSubject.next(angle);\n  }\n\n  public search(phrase: SearchOperation): void {\n    this.searchSubject.next(phrase);\n  }\n\n  public getSearchResultsCount(): Observable<SearchResultsCount> {\n    return this.searchResultsCountSubject.asObservable();\n  }\n\n  public zoom(value: number): void {\n    this.zoomSubject.next(value);\n  }\n\n  public stepZoom(value: number): void {\n    this.stepZoomSubject.next(value);\n  }\n\n  public getZoomValue(): Observable<number> {\n    return this.zoomValueSubject.asObservable();\n  }\n\n  public getPageCount(): Observable<number> {\n    return this.pageCountSubject.asObservable();\n  }\n\n  public print(): void {\n    this.printSubject.next();\n  }\n\n  public download(): void {\n    this.downloadSubject.next();\n  }\n\n  public setPage(value: number): void {\n    this.setCurrentPageSubject.next(value);\n  }\n\n  public incrementPage(value: number): void {\n    this.changePageByDeltaSubject.next(value);\n  }\n\n  public getCurrentPageNumber(): Observable<number> {\n    return this.setCurrentPageInputValueSubject.asObservable();\n  }\n\n  public getShowCommentSummary(): Observable<boolean> {\n    return this.showCommentSummary.asObservable();\n  }\n\n  public toggleCommentsSummary(value: boolean): void {\n    this.showCommentSummary.next(value);\n  }\n\n  public saveRotation(): void {\n    this.saveRotationSubject.next();\n  }\n\n  public toggleGrabNDrag(): void {\n    this.grabNDrag.next(!this.grabNDrag.getValue());\n  }\n\n  toggleSideBar(toggle: boolean) {\n    this.sidebarOpen.next(toggle);\n  }\n\n  toggleSideBarView(toggle: boolean) {\n    this.sidebarOutlineView.next(toggle);\n  }\n\n  public toggleRedactionMode(): void {\n    if (this.redactionMode.getValue() === false) {\n      this.highlightToolbarSubject.next(false);\n      this.highlightModeSubject.next(false);\n      this.drawModeSubject.next(false);\n      this.grabNDrag.next(false);\n      this.redactionMode.next(true);\n    } else {\n      this.highlightModeSubject.next(false);\n      this.drawModeSubject.next(false);\n      this.redactionMode.next(false);\n    }\n    this.openRedactionSearch.next({ modeType: SearchType.Redact, isOpen: false });\n  }\n\n  public toggleRedactionPreview(viewMode: boolean): void {\n    this.redactionPreview.next(viewMode);\n  }\n\n  public unmarkAll(): void {\n    this.clearAllRedactMarkers.next();\n  }\n\n  public applyRedactionToDocument(): void {\n    this.applyRedactToDocument.next();\n  }\n\n  public redactPage(): void {\n    this.redactWholePage.next();\n  }\n\n  public toggleCommentsPanel(isVisible: boolean) {\n    if (isVisible) {\n      this.toggleParticipantsList(!isVisible);\n    }\n    this.commentsPanelVisible.next(isVisible);\n  }\n\n  public toggleParticipantsList(isVisible: boolean) {\n    if (isVisible) {\n      this.toggleCommentsPanel(!isVisible);\n    }\n    this.icpEventService.participantsListVisible.next(isVisible);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Rectangle } from '../annotations/annotation-set/annotation-view/rectangle/rectangle.model';\n\nexport interface Highlight {\n  page: number;\n  rectangles: Rectangle[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ViewerEventService {\n\n  public readonly textHighlight = new Subject<Highlight>();\n  public readonly boxHighlight = new Subject<Highlight>();\n  public readonly ctxToolbarCleared = new Subject<void>();\n  public readonly navigationEvent = new Subject<any[]>();\n  public readonly navigationEventICP = new Subject<any[]>();\n\n  constructor() { }\n\n  public textSelected(selectionData: Highlight): void {\n    this.textHighlight.next(selectionData);\n  }\n\n  public boxSelected(selectionData: Highlight): void {\n    this.boxHighlight.next(selectionData);\n  }\n\n  public clearCtxToolbar(): void {\n    this.ctxToolbarCleared.next();\n  }\n\n\n  public goToDestination(destination: any[]) {\n    this.navigationEvent.next(destination);\n  }\n\n  public goToDestinationICP(destination: any[]) {\n    this.navigationEventICP.next(destination);\n  }\n}\n","import {createSelector} from '@ngrx/store';\nimport * as fromFeature from '../reducers/reducers';\nimport * as fromTags from '../reducers/tags.reducer';\n\nexport const getTagsRootState = createSelector(\n  fromFeature.getMVState,\n  (state: fromFeature.State) =>  state.tags\n);\n\nexport const getTagEntities = createSelector(\n  getTagsRootState,\n  fromTags.getTagNameEnt\n);\n\nexport const getTagFilters = createSelector(\n  getTagsRootState,\n  fromTags.getFilters\n);\n\nexport const getTagFiltered = createSelector(\n  getTagsRootState,\n  fromTags.getFilteredComments\n);\n\nexport const getFilteredPageEntities = createSelector(\n  getTagsRootState,\n  fromTags.getFilteredPageEnt\n);\n\nexport const getAllTagsArr = createSelector(\n  getTagEntities,\n  (tagEnt) => Object.keys(tagEnt).map(key => {\n    return {\n      key,\n      length: Object.keys(tagEnt[key]).length\n    };\n  })\n);\n","import {createSelector} from '@ngrx/store';\n\nimport * as fromFeature from '../reducers/reducers';\nimport * as fromAnnotations from '../reducers/annotations.reducer';\nimport * as fromTags from './tag.selectors';\nimport * as fromDocument from './document.selectors';\nimport {StoreUtils} from '../store-utils';\nimport moment from 'moment-timezone';\nexport const getAnnotationsSetState = createSelector(\n  fromFeature.getMVState,\n  (state: fromFeature.State) =>  state.annotations\n);\n\nexport const getAnnotationEntities = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.getAnnoEnt\n);\n\nexport const getSet = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.getAnnoSet\n);\n\nexport const getDocumentIdSetId = createSelector(\n  getSet,\n  (annoSet) => {\n    return {\n      documentId: annoSet.documentId,\n      annotationSetId: annoSet.id\n    };\n  }\n);\n\nexport const getAnnotationSet = createSelector(\n  getAnnotationEntities,\n  getSet,\n  (entities, set) => {\n    return {\n      ...set,\n      annotations: Object.keys(entities).map(key => entities[key])\n    };\n  }\n);\n\nexport const getSelectedAnnotation = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.getSelectedAnno\n);\n\nexport const getCommentEntities = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.getCommentEnts\n);\n\n\nexport const getPageEntities = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.getAnnoPageEnt\n);\n\nexport const getComponentSearchQueries = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.commentSearchQ\n);\n\nexport const getComponentSearchText = createSelector(\n  getComponentSearchQueries,\n  (queries) => queries.commentSearch\n);\n\nexport const getCommentSummaryFilters = createSelector(\n  getAnnotationsSetState,\n  fromAnnotations.getSummaryFilters\n);\n\nexport const getAnnoPerPage = createSelector(\n  fromDocument.getPages,\n  getPageEntities,\n  fromTags.getFilteredPageEntities,\n  (pages, pageEnt, filteredPageEnt) => {\n    const isFiltered: boolean = !!Object.keys(filteredPageEnt).length;\n    const entities = isFiltered ? filteredPageEnt : pageEnt;\n    if (pages) {\n      const arr = [];\n      Object.keys(pages).forEach(key => {\n        arr.push({\n          anno: entities[key] ? entities[key] : [],\n          styles: pages[key].styles\n        });\n      });\n      return arr;\n    }\n  }\n);\n\nexport const getCommentsArray = createSelector(\n  getCommentEntities,\n  fromDocument.getPages,\n  getAnnotationEntities,\n  fromTags.getTagFiltered,\n  (commentEnts, pages, annoEnts, filtered) => {\n    if (commentEnts && annoEnts && pages[1]) {\n        const isFiltered: boolean = !!Object.keys(filtered).length;\n        const com = isFiltered ? filtered : commentEnts;\n        return Object.keys(com).map(key => {\n          const page = annoEnts[key].page;\n          return {\n            ...commentEnts[key],\n            page,\n            pages\n          };\n        });\n    }\n  }\n);\n\nexport const getCommentSummary = createSelector(\n  getCommentsArray,\n  getCommentSummaryFilters,\n  (commentSummary = [], filters) => {\n    const comments = StoreUtils.filterCommentsSummary(commentSummary, filters.filters);\n    if (comments.length) {\n      const savedComments  = comments.filter((comment) => {\n        return comment.createdByDetails !== undefined;\n      }\n      );\n      return savedComments.map((comment) => {\n        return {\n          page: comment.page,\n          user: comment.createdByDetails.forename.concat(' ').concat(comment.createdByDetails.surname),\n          date: moment(comment.lastModifiedDate).format('D MMMM YYYY'),\n          tags: comment.tags,\n          comment: comment.content\n        };\n      });\n    }\n    return [''];\n  }\n);\n\n\nexport const getFilteredAnnotations = createSelector(\n  getAnnotationEntities,\n  fromTags.getTagFiltered,\n  (annoEnt, filters) => {\n    const isFiltered: boolean = !!Object.keys(filters).length;\n    const anno = isFiltered ? filters : annoEnt;\n    return Object.keys(anno).map(key => annoEnt[key])\n      .filter(annotation => annotation.comments && annotation.comments.length > 0);\n  }\n);\n","import { ToolbarEventService } from './../../../../toolbar/toolbar-event.service';\nimport { Injectable } from '@angular/core';\nimport { take} from 'rxjs/operators';\nimport { select, Store } from '@ngrx/store';\nimport { v4 as uuid } from 'uuid';\nimport moment from 'moment-timezone';\n\n\nimport { Rectangle } from '../../annotation-view/rectangle/rectangle.model';\nimport * as fromStore from '../../../../store/reducers/reducers';\nimport * as fromSelectors from '../../../../store/selectors/annotation.selectors';\nimport * as fromActions from '../../../../store/actions/annotation.actions';\nimport { Annotation } from '../../annotation-view/annotation.model';\nimport { RedactRectangle } from '../../../../toolbar/redaction-search-bar/redaction-search.model';\nimport { AnnotationSet } from '../../annotation-set.model';\n\n@Injectable({ providedIn: 'root' })\nexport class HighlightCreateService {\n\n  constructor(private toolBarEvents: ToolbarEventService,\n    private store: Store<fromStore.AnnotationSetState>) { }\n\n  saveAnnotation(rectangles: Rectangle[], page: number, annotationId?: string) {\n    this.store.pipe(select(fromSelectors.getDocumentIdSetId), take(1)).subscribe(anoSetDocId => {\n      const anno: Annotation = {\n        id: annotationId || uuid(),\n        color: 'FFFF00',\n        comments: [],\n        page: page,\n        rectangles: rectangles,\n        type: 'highlight',\n        ...anoSetDocId,\n        createdBy: '',\n        createdByDetails: undefined,\n        createdDate: moment.utc().tz('Europe/London').toISOString(),\n        lastModifiedBy: '',\n        lastModifiedByDetails: undefined,\n        lastModifiedDate: '',\n        tags: [],\n      };\n      this.store.dispatch(new fromActions.SaveAnnotation(anno, !!annotationId));\n    });\n  }\n\n  saveAnnotationSet(searchRectangles: RedactRectangle[]) {\n    this.store.pipe(select(fromSelectors.getDocumentIdSetId), take(1)).subscribe(anoSetDocId => {\n      const annoSet = searchRectangles.map(x => {\n        return {\n          id: uuid(),\n          color: 'FFFF00',\n          comments: [],\n          page: x.page,\n          rectangles: x.rectangles,\n          type: 'highlight',\n          ...anoSetDocId,\n          createdBy: '',\n          createdByDetails: undefined,\n          createdDate: moment.utc().tz('Europe/London').toISOString(),\n          lastModifiedBy: '',\n          lastModifiedByDetails: undefined,\n          lastModifiedDate: '',\n          tags: [],\n        } as Annotation;\n      });\n      this.store.dispatch(new fromActions.SaveAnnotationSet({\n        id: anoSetDocId.annotationSetId, annotations: annoSet, documentId: anoSetDocId.documentId } as AnnotationSet));\n    });\n  }\n\n\n  applyRotation(pageHeight, pageWidth, offsetHeight, offsetWidth, offsetTop, offsetLeft, rotate, zoom) {\n    const { x, y, width, height } = {\n      x: +(offsetLeft / zoom).toFixed(2),\n      y: +(offsetTop / zoom).toFixed(2),\n      width: +(offsetWidth / zoom).toFixed(2),\n      height: +(offsetHeight / zoom).toFixed(2)\n    };\n    const rectangle = { x, y, width, height };\n    switch (rotate) {\n      case 90:\n        rectangle.width = height;\n        rectangle.height = width;\n        rectangle.x = y;\n        rectangle.y = +(pageWidth / zoom - x - width).toFixed(2);\n        break;\n      case 180:\n        rectangle.x = +(pageWidth / zoom - x - width).toFixed(2);\n        rectangle.y = +(pageHeight / zoom - y - height).toFixed(2);\n        break;\n      case 270:\n        rectangle.width = height;\n        rectangle.height = width;\n        rectangle.x = +(pageHeight / zoom - y - height).toFixed(2);\n        rectangle.y = x;\n        break;\n    }\n    return rectangle as any;\n  }\n\n  resetHighlight() {\n    window.getSelection().removeAllRanges();\n    this.toolBarEvents.highlightModeSubject.next(false);\n  }\n}\n","import { Directive, ElementRef, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { Store } from '@ngrx/store';\nimport { debounceTime, filter, Subscription } from 'rxjs';\n\nimport { Rectangle } from '../../annotation-view/rectangle/rectangle.model';\nimport * as fromStore from '../../../../store/reducers/reducers';\nimport * as fromDocument from '../../../../store/selectors/document.selectors';\nimport { ViewerEventService } from '../../../../viewers/viewer-event.service';\nimport * as fromAnnotationActions from '../../../../store/actions/annotation.actions';\nimport { HighlightCreateService } from './highlight-create.service';\nimport { ToolbarEventService } from '../../../../toolbar/toolbar-event.service';\nimport { HtmlTemplatesHelper } from '../../../../shared/util/helpers/html-templates.helper';\n\n@Directive({\n    selector: '[mvCreateTextHighlight]',\n    standalone: false\n})\nexport class HighlightCreateDirective implements OnInit, OnDestroy {\n  pageHeight: number;\n  pageWidth: number;\n  zoom: number;\n  rotate: number;\n  allPages: object;\n\n  private $subscriptions: Subscription[] = [];\n\n  constructor(\n    private element: ElementRef<HTMLElement>,\n    private toolbarEvents: ToolbarEventService,\n    private viewerEvents: ViewerEventService,\n    private highlightService: HighlightCreateService,\n    private store: Store<fromStore.AnnotationSetState>\n  ) { }\n\n  ngOnInit() {\n    this.$subscriptions.push(this.store.select(fromDocument.getPages).subscribe((pages) => {\n      if (pages[1]) {\n        this.allPages = pages;\n      }\n    }));\n\n    this.$subscriptions.push(\n      this.toolbarEvents.highlightModeSubject.pipe(\n        filter(enabled => enabled && !!this.element.nativeElement),\n        debounceTime(100)\n      ).subscribe(() => {\n        this.focusWithoutScrolling(this.element.nativeElement);\n      })\n    );\n  }\n\n  ngOnDestroy() {\n    this.$subscriptions.forEach(sub => sub.unsubscribe());\n  }\n\n  private focusWithoutScrolling(element: HTMLElement): void {\n    try {\n      element.focus({ preventScroll: true });\n    } catch {\n      element.focus();\n    }\n  }\n\n  @HostListener('mouseup', ['$event'])\n  onMouseUp(mouseEvent: MouseEvent) {\n    let page: number;\n    let currentElement = mouseEvent.target as HTMLElement;\n    while (currentElement.offsetParent) {\n      currentElement = currentElement.offsetParent as HTMLElement;\n      if (currentElement.getAttribute) {\n        page = parseInt(currentElement.getAttribute('data-page-number'), 10);\n        if (page) {\n          break;\n        }\n      }\n    }\n    if (this.toolbarEvents.highlightModeSubject.getValue()) {\n      const rectangles = this.getRectangles(mouseEvent, page);\n      this.viewerEvents.textSelected({ page, rectangles });\n    }\n  }\n\n  public onKeyboardSelectionConfirmed(): void {\n    if (this.toolbarEvents.highlightModeSubject.getValue()) {\n      const selection = window.getSelection();\n      if (selection && selection.rangeCount && !selection.isCollapsed) {\n        const page = this.getCurrentPageFromSelection(selection);\n        const rectangles = this.getRectanglesFromSelection(selection, page);\n        if (rectangles && rectangles.length > 0) {\n          this.viewerEvents.textSelected({ page, rectangles });\n        }\n      }\n    }\n  }\n\n  private getCurrentPageFromSelection(selection: Selection): number {\n    const range = selection.getRangeAt(0);\n    let currentElement = range.startContainer as HTMLElement;\n\n    if (currentElement.nodeType === Node.TEXT_NODE) {\n      currentElement = currentElement.parentElement;\n    }\n\n    while (currentElement && currentElement.offsetParent) {\n      currentElement = currentElement.offsetParent as HTMLElement;\n      if (currentElement.getAttribute) {\n        const page = parseInt(currentElement.getAttribute('data-page-number'), 10);\n        if (page) {\n          return page;\n        }\n      }\n    }\n    return 1;\n  }\n\n  private getRectanglesFromSelection(selection: Selection, page: number): Rectangle[] {\n    if (!this.allPages || !this.allPages[page]) {\n      return [];\n    }\n\n    this.setPageProperties(page);\n\n    const range = selection.getRangeAt(0).cloneRange();\n    const clientRects = range.getClientRects();\n\n    if (!clientRects || clientRects.length === 0) {\n      return [];\n    }\n\n    let textLayerElement = range.startContainer as HTMLElement;\n    if (textLayerElement.nodeType === Node.TEXT_NODE) {\n      textLayerElement = textLayerElement.parentElement;\n    }\n    const textLayer = textLayerElement.closest('.textLayer') as HTMLElement;\n\n    if (!textLayer) {\n      return [];\n    }\n\n    this.removeEnhancedTextModeStyling(textLayerElement);\n\n    return this.processClientRects(clientRects, textLayer);\n  }\n\n  @HostListener('mousedown', ['$event'])\n  onPdfViewerClick(event: MouseEvent) {\n    this.store.dispatch(\n      new fromAnnotationActions.SelectedAnnotation({\n        annotationId: '',\n        selected: false,\n        editable: false,\n      })\n    );\n    this.viewerEvents.clearCtxToolbar();\n  }\n\n  private getRectangles(event: MouseEvent, page) {\n    this.setPageProperties(page);\n\n    const selection = window.getSelection();\n    if (selection) {\n      const localElement = <HTMLElement>event.target;\n\n      this.removeEnhancedTextModeStyling(localElement);\n\n      if (selection.rangeCount && !selection.isCollapsed) {\n        const range = selection.getRangeAt(0).cloneRange();\n        const clientRects = range.getClientRects();\n\n        if (clientRects) {\n          const textLayer = localElement.closest(\".textLayer\") as HTMLElement;\n          return this.processClientRects(clientRects, textLayer);\n        }\n      }\n    }\n  }\n\n  private createTextRectangle(rect: any, parentRect: any): Rectangle {\n    const height = rect.bottom - rect.top;\n    const width = rect.right - rect.left;\n    const top = rect.top - parentRect.top;\n    const left = rect.left - parentRect.left;\n    let rectangle = this.highlightService.applyRotation(\n      this.pageHeight,\n      this.pageWidth,\n      height,\n      width,\n      top,\n      left,\n      this.rotate,\n      this.zoom\n    );\n    rectangle = { id: uuid(), ...rectangle };\n\n    return rectangle as Rectangle;\n  }\n\n  private removeEnhancedTextModeStyling(element: HTMLElement) {\n    if (element.parentElement.children) {\n      for (let i = 0; i < element.parentElement.children.length; i++) {\n        const child = <HTMLElement>element.parentElement.children[i];\n\n        child.style.padding = '0';\n        // regex will be targeting the translate style in string\n        // e.g. scaleX(0.969918) translateX(-110.684px) translateY(-105.274px) will become scaleX(0.969918)\n        const translateCSSRegex = /translate[XYZ]\\(-?\\d*(\\.\\d+)?(px)?\\)/g;\n        child.style.transform = child.style.transform.replace(translateCSSRegex, '').trim();\n      }\n    }\n  }\n\n  private setPageProperties(page: number): void {\n    this.pageHeight = this.allPages[page].styles.height;\n    this.pageWidth = this.allPages[page].styles.width;\n    this.zoom = parseFloat(this.allPages[page].scaleRotation.scale);\n    this.rotate = parseInt(this.allPages[page].scaleRotation.rotation, 10);\n  }\n\n  private processClientRects(clientRects: DOMRectList, textLayer: HTMLElement): Rectangle[] {\n    const parentRect = HtmlTemplatesHelper.getAdjustedBoundingRect(textLayer);\n    const selectionRectangles: Rectangle[] = [];\n\n    for (let i = 0; i < clientRects.length; i++) {\n      const selectionRectangle = this.createTextRectangle(clientRects[i], parentRect);\n      const findSelectionRectangle = selectionRectangles.find(\n        (rect) => rect.width === selectionRectangle.width && rect.x === selectionRectangle.x\n      );\n      if (!findSelectionRectangle) {\n        selectionRectangles.push(selectionRectangle);\n      }\n    }\n\n    return selectionRectangles;\n  }\n}\n","import { Outline } from './../side-bar/outline-item/outline.model';\nimport { RedactionSearch } from './../../../toolbar/redaction-search-bar/redaction-search.model';\nimport * as pdfjs from 'pdfjs-dist';\nimport { DownloadManager, PDFLinkService, PDFViewer } from 'pdfjs-dist/web/pdf_viewer.mjs';\nimport 'pdfjs-dist/build/pdf.worker';\nimport 'pdfjs-dist/build/pdf.mjs';\nimport { Subject } from 'rxjs';\nimport { SearchOperation, SearchResultsCount, ToolbarEventService } from '../../../toolbar/toolbar-event.service';\nimport { PdfPosition } from '../../../store/reducers/document.reducer';\n\npdfjs.GlobalWorkerOptions.workerSrc = '/assets/build/pdf.worker.min.js';\n\n/**\n * Values of the state field returned by the find events\n */\nenum FindState {\n  FOUND = 0,\n  NOT_FOUND = 1,\n  WRAPPED = 2,\n  PENDING = 3,\n}\n\nexport class PdfJsWrapper {\n\n  private zoomValue: number;\n  private documentTitle: string;\n  private documentOutline: Outline[];\n  public redactionPages: { start: number, end: number }[];\n\n  constructor(\n    private readonly pdfViewer: PDFViewer,\n    private readonly downloadManager: DownloadManager,\n    private readonly toolbarEvents: ToolbarEventService,\n    public readonly documentLoadInit: Subject<string>,\n    public readonly documentLoadProgress: Subject<DocumentLoadProgress>,\n    public readonly documentLoaded: Subject<any>,\n    public readonly outlineLoaded: Subject<Outline[]>,\n    public readonly documentLoadFailed: Subject<Error>,\n    public readonly pageRendered: Subject<PageEvent[]>,\n    public readonly positionUpdated: Subject<{ location: PdfPosition }>\n  ) {\n    this.pdfViewer.eventBus.on('updateviewarea', e => positionUpdated.next(e));\n    this.pdfViewer.eventBus.on('pagechanging', e => this.toolbarEvents.setCurrentPageInputValueSubject.next(e.pageNumber));\n    this.pdfViewer.eventBus.on('pagechanging', e => this.drawMissingPages(e));\n    this.pdfViewer.eventBus.on('pagesinit', () => this.pdfViewer.currentScaleValue = '1');\n\n    this.pdfViewer.eventBus.on('pagerendered', e => { }); // not used left for future convenience\n    this.pdfViewer.eventBus.on('pagesloaded', (e) => this.emitDocumentInfo(e));\n    this.pdfViewer.eventBus.on('scalechanging', (e) => this.emitDocumentInfo(e));\n    this.pdfViewer.eventBus.on('rotationchanging', (e) => this.emitDocumentInfo(e));\n\n    this.pdfViewer.eventBus.on('updatefindcontrolstate', event => {\n      this.sendSearchDetails(event);\n    });\n    this.pdfViewer.eventBus.on('updatefindmatchescount', event => {\n      const result = { ...event.matchesCount, isPrevious: event?.source?.state?.findPrevious } as SearchResultsCount\n      this.toolbarEvents.searchResultsCountSubject.next(result);\n    });\n    this.zoomValue = 1;\n    this.redactionPages = []\n    // Subscribe to redactionMode changes and run a function when it changes\n    this.toolbarEvents.redactionMode.subscribe((redactionModeValue) => {\n      this.onRedactionModeChanged(redactionModeValue);\n    });\n  }\n\n  sendSearchDetails(event: any) {\n    if (event.state !== FindState.PENDING) {\n      const result = { ...event.matchesCount, isPrevious: event?.source?.state?.findPrevious } as SearchResultsCount\n      this.toolbarEvents.searchResultsCountSubject.next(result);\n      if (event?.source?.selected?.pageIdx !== -1 && event.matchesCount.total > 0) {\n        this.toolbarEvents.redactionSerachSubject.next({\n          page: event?.source?.selected?.pageIdx,\n          matchedIndex: event?.source?.selected?.matchIdx,\n          matchesCount: event.matchesCount.total\n        } as RedactionSearch\n        );\n      }\n    }\n  }\n\n  // in the event a user fast scrolls or navigates to a specific page, \n  // we need to render the missing pages so redaction box is in right place\n  drawMissingPages(e) {\n    const redactionMode = this.toolbarEvents.redactionMode.getValue();\n    const { pageNumber, previous: previousPageNumber } = e;\n    if (!previousPageNumber || pageNumber < previousPageNumber || Math.abs(pageNumber - previousPageNumber) <= 1) {\n      return;\n    }\n    const start = previousPageNumber + 1;\n    const end = pageNumber;\n    // if the redaction mode is on render the pages now\n    if (redactionMode) {\n      for (let i = start; i < end; i++) {\n        const page = this.pdfViewer._pages[i - 1];\n        if (page && !page.renderingState) {\n          page.draw();\n        }\n      }\n    } else {\n      // keep track of pages as if a user skips to a page we need to render all the missing pages\n      console.log('Adding redaction pages to queue:', start, end);\n      this.redactionPages.push({ start, end });\n    }\n  }\n\n  public onRedactionModeChanged(redactionMode: boolean) {\n    if (redactionMode && this.redactionPages.length) {\n      this.redactionPages.forEach(({ start, end }) => {\n        console.log('Drawing redaction pages from queue:', start, end);\n        for (let i = start; i < end; i++) {\n          const page = this.pdfViewer._pages[i - 1];\n          if (page && !page.renderingState) {\n            page.draw();\n          }\n        }\n      });\n      this.redactionPages = [];\n    }\n  }\n\n  private emitDocumentInfo(e) {\n    const allPages: PageEvent[] = [...this.pdfViewer._pages].map(page => {\n      return {\n        div: page.div,\n        scale: page.scale,\n        rotation: page.rotation,\n        id: page.id,\n        viewportScale: page.viewport.scale\n      };\n    });\n    this.pageRendered.next(allPages);\n  }\n\n  public async loadDocument(documentUrl: string) {\n    const loadingTask = this.createLoadingTask(documentUrl);\n\n    loadingTask.onProgress = ({ loaded, total }) => {\n      this.documentLoadProgress.next({ loaded, total });\n    };\n\n    this.documentLoadInit.next(documentUrl);\n\n    try {\n      const pdfDocument = await loadingTask.promise;\n      this.documentLoaded.next(pdfDocument);\n      this.toolbarEvents.pageCountSubject.next(pdfDocument.numPages);\n\n      this.pdfViewer.setDocument(pdfDocument);\n      if (this.pdfViewer.linkService instanceof PDFLinkService) {\n        const linkservice: PDFLinkService = this.pdfViewer.linkService;\n        linkservice.setDocument(pdfDocument, null);\n      }\n\n      const outlineNode = await pdfDocument.getOutline();\n      const outline = outlineNode ? outlineNode.map(x => {\n        return {\n          bold: x.bold,\n          color: x.color,\n          count: x.count,\n          dest: x.dest,\n          italic: x.italic,\n          items: x.items,\n          newWindow: x.newWindow,\n          title: x.title,\n          unsafeUrl: x.unsafeUrl,\n          url: x.url\n        } as Outline\n      }) : null;\n\n\n\n      if (outline) {\n        await this.setOutlinePageNumbers(pdfDocument, outline);\n      }\n\n      this.documentOutline = outline;\n      this.outlineLoaded.next(this.documentOutline);\n      const pdfMetaData = await pdfDocument.getMetadata();\n      this.setCurrentPDFTitle((pdfMetaData.info as any)?.Title);\n    } catch (e) {\n      this.documentLoadFailed.next(e);\n    }\n  }\n\n  private createLoadingTask(documentUrl: string) {\n    return pdfjs.getDocument({\n      url: documentUrl,\n      cMapUrl: 'assets/minified/cmaps',\n      cMapPacked: true,\n      withCredentials: true,\n      isEvalSupported: false\n    });\n  }\n\n  private async setOutlinePageNumbers(pdfDocument, outlineArray: Outline[]) {\n    outlineArray.forEach(async (outline: Outline) => {\n      await this.setNestedOutlinePageNumbers(pdfDocument, outline);\n    });\n  }\n\n  private async setNestedOutlinePageNumbers(pdfDocument, outline: Outline) {\n    outline.pageNumber = await this.getOutlinePageNumber(pdfDocument, outline);\n    outline.items.forEach(async (outlineItem: Outline) => {\n      outlineItem.pageNumber = await this.getOutlinePageNumber(pdfDocument, outlineItem);\n      this.setNestedOutlinePageNumbers(pdfDocument, outlineItem);\n    });\n  }\n\n  private async getOutlinePageNumber(pdfDocument, outline: Outline): Promise<number> {\n    const dest = outline.dest;\n    const pageIndex = await pdfDocument.getPageIndex(dest[0]);\n    return Number(pageIndex) + 1;\n  }\n\n  public downloadFile(url: string, filename: string): void {\n    this.downloadManager.download(null, url, filename);\n  }\n\n  public setPageNumber(pageNumber: number): void {\n    this.pdfViewer.currentPageNumber = pageNumber;\n  }\n  public getPageNumber(): number {\n    return this.pdfViewer.currentPageNumber;\n  }\n  public changePageNumber(numPages: number): void {\n    this.pdfViewer.currentPageNumber += numPages;\n  }\n\n  public search(operation: SearchOperation): void {\n    const command = operation.reset ? '' : 'again';\n    const data = {\n      source: this.pdfViewer,\n      type: command,\n      query: operation.searchTerm,\n      phraseSearch: true,\n      caseSensitive: operation.matchCase,\n      entireWord: operation.wholeWord,\n      highlightAll: operation.highlightAll,\n      findPrevious: operation.previous,\n    };\n\n    this.pdfViewer.eventBus.dispatch('find', data);\n  }\n\n  public clearSearch(): void {\n    this.pdfViewer.eventBus.dispatch('findbarclose', {});\n  }\n\n  public navigateTo(destination: string | any[]) {\n    if (destination instanceof Object) {\n      if (!destination[1].name.includes('XYZ')) {\n        destination[1] = { name: 'XYZ' };\n        destination[2] = destination[2] || null;\n        destination[3] = destination[3] || null;\n      }\n      destination[4] = this.zoomValue;\n    }\n    this.nativeNavigate(destination);\n  }\n\n  public nativeNavigate(destination: string | any[]) {\n    this.pdfViewer.linkService.goToDestination(destination);\n  }\n\n  public setZoom(zoomValue: number): void {\n    this.pdfViewer.currentScaleValue = this.getZoomValue(zoomValue).toString();\n    this.zoomValue = +this.pdfViewer.currentScaleValue;\n    this.toolbarEvents.zoomValueSubject.next(this.zoomValue);\n  }\n\n  public stepZoom(zoomValue: number): void {\n    this.pdfViewer.currentScaleValue = this.getZoomValue((+this.pdfViewer.currentScaleValue) + zoomValue).toString();\n    this.zoomValue = +this.pdfViewer.currentScaleValue;\n    this.toolbarEvents.zoomValueSubject.next(this.zoomValue);\n  }\n\n  private getZoomValue(zoomValue: number): number {\n    if (isNaN(zoomValue)) { return this.zoomValue; }\n    if (zoomValue > 5) { return 5; }\n    if (zoomValue < 0.1) { return 0.1; }\n\n    return +zoomValue.toFixed(2);\n  }\n\n  public rotate(rotation: number): number {\n    return this.pdfViewer.pagesRotation = (this.pdfViewer.pagesRotation + rotation) % 360;\n  }\n\n  public resetRotation(rotation: number): number {\n    return this.pdfViewer.pagesRotation = rotation;\n  }\n\n  public getNormalisedPagesRotation(): number {\n    return this.pdfViewer.pagesRotation;\n  }\n\n  public getCurrentPDFZoomValue(): number {\n    return +this.pdfViewer.currentScaleValue;\n  }\n\n  public setCurrentPDFTitle(title: string) {\n    this.documentTitle = title;\n  }\n\n  public getCurrentPDFTitle(): string {\n    return this.documentTitle;\n  }\n}\n\nexport interface DocumentLoadProgress {\n  loaded: number;\n  total: number;\n}\n\nexport interface PageEvent {\n  div: object;\n  scale: number;\n  rotation: number;\n  id: string;\n  viewportScale: number;\n}\n","import 'pdfjs-dist/build/pdf.mjs';\nimport * as pdfjsViewer from 'pdfjs-dist/web/pdf_viewer.mjs';\nimport { ElementRef, Injectable } from '@angular/core';\nimport { DocumentLoadProgress, PageEvent, PdfJsWrapper } from './pdf-js-wrapper';\nimport { Subject } from 'rxjs';\nimport { ToolbarEventService } from '../../../toolbar/toolbar-event.service';\nimport { Outline } from '../side-bar/outline-item/outline.model';\nimport { PdfPosition } from '../../../store/reducers/document.reducer';\n\n@Injectable({ providedIn: 'root' })\nexport class PdfJsWrapperFactory {\n\n  private linkService: pdfjsViewer.PDFLinkService;\n  private eventBus: pdfjsViewer.EventBus;\n  private pdfJsWrapper: PdfJsWrapper;\n\n  constructor(private readonly toolbarEvents: ToolbarEventService) {\n    this.linkService = new pdfjsViewer.PDFLinkService();\n    this.eventBus = new pdfjsViewer.EventBus();\n  }\n\n  public create(container: ElementRef): PdfJsWrapper {\n    const pdfFindController = new pdfjsViewer.PDFFindController({\n      linkService: this.linkService,\n      eventBus: this.eventBus\n    });\n\n    const pdfViewer = new pdfjsViewer.PDFViewer({\n      container: container.nativeElement,\n      linkService: this.linkService,\n      findController: pdfFindController,\n      eventBus: this.eventBus,\n      imageResourcesPath: '/assets/images/',\n    });\n\n    this.linkService.setViewer(pdfViewer);\n\n    this.pdfJsWrapper = new PdfJsWrapper(\n      pdfViewer,\n      new pdfjsViewer.DownloadManager(),\n      this.toolbarEvents,\n      new Subject<string>(),\n      new Subject<DocumentLoadProgress>(),\n      new Subject<any>(),\n      new Subject<Outline[]>(),\n      new Subject(),\n      new Subject<PageEvent[]>(),\n      new Subject<{ location: PdfPosition }>()\n    );\n\n    return this.pdfJsWrapper;\n  }\n\n  pdfWrapper() {\n    return this.pdfJsWrapper;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PrintService {\n\n  printDocumentNatively(url: string): void {\n\n    const printWindow = window.open(url);\n    printWindow.focus();\n\n    setTimeout((printer) => {\n      printer.print();\n    }, 3000, printWindow);\n  }\n\n  printElementNatively(element: HTMLElement, width: number, height: number): void {\n    const printWindow = window.open('', '', `left=0,top=0,width=${width},height=${height},toolbar=0,scrollbars=0,status=0`);\n    const documentHead = document.head;\n    printWindow.document.body.appendChild(documentHead.cloneNode(true));\n    printWindow.document.body.appendChild(element.cloneNode(true));\n    printWindow.document.close();\n    printWindow.focus();\n    printWindow.print();\n    setTimeout((printer) => {\n      printer.close();\n    }, 1000, printWindow);\n  }\n}\n","import { createSelector } from '@ngrx/store';\nimport * as fromFeature from '../reducers/reducers';\nimport * as fromIcp from '../reducers/icp.reducer';\n\nexport const getIcpState = createSelector(\n  fromFeature.getMVState,\n  (state: fromFeature.State) =>  state.icp\n);\n\nexport const getIcpSession = createSelector(\n  getIcpState,\n  fromIcp.getIcpSession\n);\n\nexport const getCaseId = createSelector(\n  getIcpSession,\n  session => session === null ? null : session.caseId\n);\n\nexport const getPresenter = createSelector(\n  getIcpState,\n  fromIcp.getPresenter\n);\n\nexport const getPresenterName = createSelector(\n  getPresenter,\n  presenter => presenter === null ? null : presenter.username\n);\n\nexport const getClient = createSelector(\n  getIcpState,\n  fromIcp.getClient\n);\n\nexport const isPresenter = createSelector(\n  getPresenter,\n  getClient,\n  (presenter, client) => presenter === null ? undefined : presenter.id === client.id // isPresenter is called when = false.\n);\n\nexport const getParticipants = createSelector(\n  getIcpState,\n  fromIcp.getParticipants\n);\n","export enum IcpEvents {\n  SESSION_JOINED = 'IcpClientJoinedSession',\n  CLIENT_DISCONNECTED = 'IcpClientDisconnectedFromSession',\n  NEW_PARTICIPANT_JOINED = 'IcpNewParticipantJoinedSession',\n  REMOVE_PARTICIPANT = 'IcpRemoveParticipantFromList',\n  PARTICIPANTS_UPDATED = 'IcpParticipantsListUpdated',\n  UPDATE_PRESENTER = 'IcpNewPresenterStartsPresenting',\n  PRESENTER_UPDATED = 'IcpPresenterUpdated',\n  UPDATE_SCREEN = 'IcpUpdateScreen',\n  SCREEN_UPDATED = 'IcpScreenUpdated',\n  SESSION_JOIN = 'IcpClientJoinSession',\n  SESSION_LEAVE = 'IcpClientLeaveSession',\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, from, Observable, of, Subject, Subscription } from 'rxjs';\nimport { IcpEvents } from './icp.events';\nimport { IcpParticipant, IcpSession } from './icp.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class SocketService implements OnDestroy {\n\n  private socket: WebSocket;\n  subscription: Subscription;\n  connected$ = new BehaviorSubject<boolean>(false);\n  sessionJoined$ = new Subject<void>();\n  presenterUpdated$ = new Subject<void>();\n  clientDisconnected$ = new Subject<void>();\n  participantUpdated$ = new Subject<void>();\n  newParticipantJoined$ = new Subject<void>();\n  screenUpdated$ = new Subject<void>();\n\n  constructor() { }\n\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n\n  connect(url: string, session: IcpSession) {\n    const socketUrl = new URL(url);\n    socketUrl.searchParams.append('sessionId', `${session.sessionId}`);\n    socketUrl.searchParams.append('caseId', `${session.caseId}`);\n    socketUrl.searchParams.append('documentId', `${session.documentId}`);\n    this.subscription = this.getSocketClient(socketUrl.toString()).subscribe((socket: WebSocket) => {\n\n      socket.onopen = (event: Event) => {\n        this.connected$.next(true);\n      };\n\n      socket.onmessage = (event: MessageEvent) => {\n        console.log('onmessage');\n        const eventData = JSON.parse(event.data);\n        if (eventData.data && eventData.data.eventName) {\n          this.messageEventHandller(eventData.data.eventName, eventData.data.data);\n        }\n      };\n\n      socket.onerror = (event: Event) => {\n        console.log('onerror');\n      };\n\n      socket.onclose = (event: CloseEvent) => {\n        console.log('onclose');\n      };\n    });\n  }\n\n  connected(): Observable<boolean> {\n    return this.connected$.asObservable();\n  }\n\n  join(session) {\n    this.emit(IcpEvents.SESSION_JOIN, session);\n  }\n\n  leave(session) {\n    this.emit(IcpEvents.SESSION_LEAVE, session);\n    this.subscription.unsubscribe();\n  }\n\n  emit(event: string, data: any) {\n    if (this.socket && this.socket.readyState === WebSocket.OPEN) {\n      this.socket.send(JSON.stringify({\n        type: 'event',\n        event,\n        data\n      }));\n    } else {\n      console.warn('WebSocket is not open. Ready state is:', this.socket ? this.socket.readyState : 'no socket');\n    }\n  }\n\n  listen(event: IcpEvents): Observable<any> {\n    switch (event) {\n      case IcpEvents.SESSION_JOINED: {\n        return this.sessionJoined$.asObservable();\n      }\n      case IcpEvents.PRESENTER_UPDATED: {\n        return this.presenterUpdated$.asObservable();\n      }\n      case IcpEvents.CLIENT_DISCONNECTED: {\n        return this.clientDisconnected$.asObservable();\n      }\n      case IcpEvents.PARTICIPANTS_UPDATED: {\n        return this.participantUpdated$.asObservable();\n      }\n      case IcpEvents.NEW_PARTICIPANT_JOINED: {\n        return this.newParticipantJoined$.asObservable();\n      }\n      case IcpEvents.SCREEN_UPDATED: {\n        return this.screenUpdated$.asObservable();\n      }\n      default: {\n        break;\n      }\n    }\n  }\n\n  messageEventHandller(eventName: string, data: any) {\n    switch (eventName) {\n      case IcpEvents.SESSION_JOINED: {\n        this.sessionJoined$.next(data);\n        break;\n      }\n      case IcpEvents.PRESENTER_UPDATED: {\n        this.presenterUpdated$.next(data);\n        break;\n      }\n      case IcpEvents.CLIENT_DISCONNECTED: {\n        this.clientDisconnected$.next();\n        break;\n      }\n      case IcpEvents.PARTICIPANTS_UPDATED: {\n        this.participantUpdated$.next(data);\n        break;\n      }\n      case IcpEvents.NEW_PARTICIPANT_JOINED: {\n        this.newParticipantJoined$.next();\n        break;\n      }\n      case IcpEvents.SCREEN_UPDATED: {\n        this.screenUpdated$.next(data);\n        break;\n      }\n    }\n  }\n\n  getSocketClient(url: string): Observable<WebSocket> {\n    this.socket = new WebSocket(url, 'json.webpubsub.azure.v1');\n    return of(this.socket);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { SocketService } from './socket.service';\nimport { IcpParticipant, IcpScreenUpdate, IcpSession } from './icp.interfaces';\nimport { IcpEvents } from './icp.events';\n\n@Injectable({ providedIn: 'root' })\nexport class IcpUpdateService {\n\n  session: IcpSession;\n\n  constructor(private socket: SocketService) { }\n\n  private joinSessionSubscription: any;\n\n  joinSession(username: string, session: IcpSession, token: string) {\n    this.session = session;\n    this.socket.connect(`${session.connectionUrl}?access_token=${token}`, session);\n    if (this.joinSessionSubscription) {\n      this.joinSessionSubscription.unsubscribe();\n    }\n    this.joinSessionSubscription = this.socket.connected().subscribe(isConnected => {\n      if (isConnected) {\n        this.socket.join({ ...this.session, username });\n      }\n    });\n    return this.socket.listen(IcpEvents.SESSION_JOINED);\n  }\n\n  leaveSession() {\n    if (this.joinSessionSubscription) {\n      this.joinSessionSubscription.unsubscribe();\n      this.joinSessionSubscription = null;\n    }\n    this.socket.leave(this.session);\n  }\n\n  newParticipantJoined() {\n    return this.socket.listen(IcpEvents.NEW_PARTICIPANT_JOINED);\n  }\n\n  clientDisconnected() {\n    return this.socket.listen(IcpEvents.CLIENT_DISCONNECTED);\n  }\n\n  removeParticipant(participantId) {\n    this.socket.emit(IcpEvents.REMOVE_PARTICIPANT, {\n      participantId: participantId,\n      caseId: this.session.caseId,\n      documentId: this.session.documentId\n    });\n  }\n\n  participantListUpdated() {\n    return this.socket.listen(IcpEvents.PARTICIPANTS_UPDATED);\n  }\n\n  updatePresenter(presenter: IcpParticipant) {\n    this.socket.emit(IcpEvents.UPDATE_PRESENTER, {\n      ...this.session,\n      presenterId: presenter.id,\n      presenterName: presenter.username\n    });\n  }\n\n  presenterUpdated() {\n    return this.socket.listen(IcpEvents.PRESENTER_UPDATED);\n  }\n\n  updateScreen(screen: IcpScreenUpdate) {\n    const update = {\n      body: screen,\n      caseId: this.session.caseId,\n      documentId: this.session.documentId\n    };\n    this.socket.emit(IcpEvents.UPDATE_SCREEN, update);\n  }\n\n  screenUpdated() {\n    return this.socket.listen(IcpEvents.SCREEN_UPDATED);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ToolbarEventService } from '../toolbar/toolbar-event.service';\nimport { select, Store } from '@ngrx/store';\nimport * as fromDocSelectors from '../store/selectors/document.selectors';\nimport { distinctUntilChanged, Subscription, take } from 'rxjs';\nimport { IcpUpdateService } from './icp-update.service';\nimport { IcpState, IcpScreenUpdate, IcpSession, IcpParticipant } from './icp.interfaces';\nimport * as fromIcpSelectors from '../store/selectors/icp.selectors';\nimport { PdfPosition } from '../store/reducers/document.reducer';\n\n@Injectable({ providedIn: 'root' })\nexport class IcpPresenterService {\n\n  session: IcpSession;\n  presenter: IcpParticipant;\n  pdfPosition: PdfPosition;\n\n  $subscription: Subscription;\n\n  constructor(private readonly toolbarEvents: ToolbarEventService,\n              private readonly socketService: IcpUpdateService,\n              private store: Store<IcpState>) {}\n\n  update(isPresenter: boolean) {\n    if (isPresenter) {\n      this.subscribe();\n    } else {\n      this.unsubscribe();\n    }\n  }\n\n  subscribe() {\n    if (!this.$subscription) {\n      this.$subscription = this.store.pipe(select(fromDocSelectors.getPdfPosition)).subscribe(pdfPosition => {\n          this.pdfPosition = pdfPosition;\n          this.onPositionUpdate(pdfPosition);\n        });\n      this.$subscription.add(this.store.pipe(select(fromIcpSelectors.getPresenter)).subscribe(presenter => {\n        this.presenter = presenter;\n      }));\n      this.$subscription.add(this.socketService.newParticipantJoined().subscribe(() => this.onNewParticipantJoined()));\n    }\n  }\n\n  unsubscribe() {\n    if (this.$subscription) {\n      this.$subscription.unsubscribe();\n      this.$subscription = undefined;\n    }\n  }\n\n  onPositionUpdate(pdfPosition: PdfPosition) {\n    const screen: IcpScreenUpdate = { pdfPosition, document: undefined };\n    this.socketService.updateScreen(screen);\n  }\n\n  onNewParticipantJoined() {\n    this.onPositionUpdate(this.pdfPosition);\n    this.socketService.updatePresenter(this.presenter);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ToolbarEventService } from '../toolbar/toolbar-event.service';\nimport { select, Store } from '@ngrx/store';\nimport { Subscription } from 'rxjs';\nimport { IcpUpdateService } from './icp-update.service';\nimport { ViewerEventService } from '../viewers/viewer-event.service';\nimport { distinctUntilChanged, take } from 'rxjs/operators';\nimport { IcpState, IcpSession } from './icp.interfaces';\nimport * as fromDocSelectors from '../store/selectors/document.selectors';\n\n@Injectable({ providedIn: 'root' })\nexport class IcpFollowerService {\n\n  session: IcpSession;\n  private previousRotation: number|null = null;\n  $subscription: Subscription;\n\n  constructor(private readonly toolbarEvents: ToolbarEventService,\n    private readonly viewerEvents: ViewerEventService,\n    private readonly socketService: IcpUpdateService,\n    private store: Store<IcpState>) { }\n\n\n  update(isFollower: boolean) {\n    if (isFollower) {\n      this.subscribe();\n    } else {\n      this.unsubscribe();\n    }\n  }\n\n  subscribe() {\n    if (!this.$subscription) {\n      this.$subscription = this.socketService.screenUpdated()\n        .subscribe(screen => this.followScreenUpdate(screen));\n    }\n  }\n\n  unsubscribe() {\n    if (this.$subscription) {\n      this.$subscription.unsubscribe();\n      this.$subscription = undefined;\n    }\n  }\n\n  followScreenUpdate({ pdfPosition }) {\n    if (pdfPosition) {\n      this.viewerEvents.goToDestinationICP([\n        pdfPosition.pageNumber - 1,\n        { 'name': 'XYZ' },\n        pdfPosition.left,\n        pdfPosition.top\n      ]);\n    }\n    this.store.pipe(\n      select(fromDocSelectors.getPdfPosition), \n      take(1), \n      distinctUntilChanged(undefined, a => a.rotation))\n      .subscribe(position => {\n        if (this.previousRotation === pdfPosition.rotation) {\n          return;\n        }\n        const rotationDelta = (pdfPosition.rotation - position.rotation) % 360;\n        if (rotationDelta && rotationDelta !== 0) {\n          this.toolbarEvents.rotate(rotationDelta);\n        }\n      });\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { IcpParticipant, IcpState } from './icp.interfaces';\nimport { Subscription } from 'rxjs';\nimport { ToolbarEventService } from '../toolbar/toolbar-event.service';\nimport { ViewerEventService } from '../viewers/viewer-event.service';\nimport { IcpUpdateService } from './icp-update.service';\nimport { IcpPresenterService } from './icp-presenter.service';\nimport { IcpFollowerService } from './icp-follower.service';\nimport { select, Store } from '@ngrx/store';\nimport * as fromIcpActions from '../store/actions/icp.actions';\nimport * as fromIcpSelectors from '../store/selectors/icp.selectors';\nimport * as fromDocument from '../store/selectors/document.selectors';\nimport { filter, take } from 'rxjs/operators';\nimport { IcpEventService } from '../toolbar/icp-event.service';\n\n@Injectable({ providedIn: 'root' })\nexport class IcpService implements OnDestroy {\n\n  caseId: string;\n  client: IcpParticipant;\n  presenter: IcpParticipant;\n  isPresenter: boolean;\n  documentId: string;\n\n  subscription: Subscription;\n  sessionSubscription: Subscription;\n\n  constructor(private readonly toolbarEvents: ToolbarEventService,\n    private readonly viewerEvents: ViewerEventService,\n    private readonly socketService: IcpUpdateService,\n    private readonly presenterSubscriptions: IcpPresenterService,\n    private readonly followerSubscriptions: IcpFollowerService,\n    private store: Store<IcpState>,\n    private readonly icpEventService: IcpEventService) {\n    this.subscription = this.store.pipe(select(fromIcpSelectors.getCaseId), filter(value => !!value)).subscribe(caseId => {\n      this.caseId = caseId;\n    });\n    this.subscription.add(this.store.pipe(select(fromDocument.getDocumentId)).subscribe(docId => this.documentId = docId));\n    this.subscription.add(this.icpEventService.sessionLaunch.subscribe(() => {\n\n      if (this.caseId && this.documentId) { this.launchSession(); }\n    }));\n  }\n\n  ngOnDestroy() {\n    this.unsubscribeSession();\n    this.subscription.unsubscribe();\n  }\n\n  launchSession() {\n    this.store.dispatch(new fromIcpActions.LoadIcpSession({ caseId: this.caseId, documentId: this.documentId }));\n    this.subscription.add(this.store.pipe(select(fromIcpSelectors.getIcpSession),\n      filter(value => !!value && Object.keys(value).length > 1),\n      take(1)).subscribe(() => { this.setUpSessionSubscriptions(); }));\n  }\n\n  setUpSessionSubscriptions() {\n    this.sessionSubscription = this.icpEventService.becomingPresenter.subscribe(() => this.becomePresenter());\n    this.sessionSubscription.add(this.icpEventService.stoppingPresenting.subscribe(() => this.stopPresenting()));\n    this.sessionSubscription.add(this.icpEventService.sessionExitConfirmed.subscribe(() => this.leavePresentation()));\n    this.sessionSubscription.add(\n      this.store.pipe(select(fromIcpSelectors.getPresenter)).subscribe(presenter => this.presenter = presenter)\n    );\n    this.sessionSubscription.add(this.store.pipe(select(fromIcpSelectors.getClient)).subscribe(client => this.client = client));\n    this.sessionSubscription.add(this.store.pipe(select(fromIcpSelectors.isPresenter)).subscribe(isPresenter => {\n      this.isPresenter = isPresenter;\n      this.presenterSubscriptions.update(isPresenter);\n      this.followerSubscriptions.update(!isPresenter);\n    }));\n    this.sessionSubscription.add(this.socketService.clientDisconnected().subscribe(cli => this.clientDisconnected(cli)));\n    this.sessionSubscription.add(this.socketService.presenterUpdated().subscribe(pres => {\n      this.store.dispatch(new fromIcpActions.IcpPresenterUpdated(pres));\n    }));\n    this.sessionSubscription.add(this.socketService.participantListUpdated().subscribe(participants => {\n      this.store.dispatch(new fromIcpActions.IcpParticipantListUpdated(participants));\n    }));\n  }\n\n  unsubscribeSession() {\n    this.presenterSubscriptions.update(false);\n    this.followerSubscriptions.update(false);\n    this.sessionSubscription.unsubscribe();\n  }\n\n  leavePresentation() {\n    if (this.isPresenter) {\n      this.stopPresenting();\n    }\n    this.removeParticipant(this.client.id);\n    this.socketService.leaveSession();\n    this.store.dispatch(new fromIcpActions.LeaveIcpSocketSession());\n    this.unsubscribeSession();\n  }\n\n  stopPresenting() {\n    const presenter: IcpParticipant = { username: '', id: '' };\n    this.socketService.updatePresenter(presenter);\n  }\n\n  becomePresenter() {\n    this.socketService.updatePresenter(this.client);\n  }\n\n  clientDisconnected(client) {\n    if (client === this.presenter.id) {\n      this.stopPresenting();\n    }\n    this.removeParticipant(client);\n  }\n\n  removeParticipant(participantId) {\n    this.socketService.removeParticipant(participantId);\n  }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class ToolbarButtonVisibilityService {\n\n  public showPrint = false;\n  public showDownload = false;\n  public showNavigation = false;\n  public showZoom = false;\n  public showRotate = false;\n  public showPresentationMode = false;\n  public showRedact = false;\n  public showOpenFile = false;\n  public showBookmark = false;\n  public showHighlightButton = false;\n  public showDrawButton = false;\n  public showSearchBar = false;\n  public showSidebar = false;\n  public showCommentSummary = false;\n  public showGrabNDragButton = false;\n  public showSaveRotationButton = false;\n\n  /**\n   * Reset the visibility of all buttons to false then set the value from the options\n   */\n  public setup(options: Partial<ToolbarButtonVisibilityService>): void {\n    this.showPrint = false;\n    this.showDownload = false;\n    this.showNavigation = false;\n    this.showZoom = false;\n    this.showRotate = false;\n    this.showPresentationMode = false;\n    this.showRedact = false;\n    this.showOpenFile = false;\n    this.showBookmark = false;\n    this.showHighlightButton = false;\n    this.showDrawButton = false;\n    this.showSearchBar = false;\n    this.showSidebar = false;\n    this.showCommentSummary = false;\n    this.showGrabNDragButton = false;\n    this.showSaveRotationButton = false;\n\n    for (const key in options) {\n      this[key] = options[key];\n    }\n  }\n}\n\n/**\n * Default toolbar state for the PDF viewer\n */\nexport const defaultPdfOptions = {\n  showPrint: true,\n  showDownload: true,\n  showNavigation: true,\n  showZoom: true,\n  showRotate: true,\n  showSearchBar: true,\n  showSidebar: true,\n  showGrabNDragButton: true,\n  showCommentSummary: true,\n  showPresentationMode: true,\n  showRedact: true\n};\n\n/**\n * Default toolbar state for the image viewer\n */\nexport const defaultImageOptions = {\n  showPrint: true,\n  showDownload: true,\n  showZoom: true,\n  showRotate: true,\n  showGrabNDragButton: true,\n  showCommentSummary: true,\n  showRedact: true\n};\n\n/**\n * Default toolbar state for multimedia\n */\nexport const defaultMultimediaOptions = {\n  showDownload: true\n};\n\n/**\n * Default toolbar state for unsupported media\n */\nexport const defaultUnsupportedOptions = {\n  showDownload: true,\n  showPrint: true\n};\n","import { BulkRedaction, Redaction } from './../../redaction/services/redaction.model';\nimport { SearchMode, SearchResultsCount, SearchType } from './../toolbar-event.service';\nimport { RedactionSearch, RedactRectangle } from './redaction-search.model';\nimport { Component, ElementRef, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ToolbarButtonVisibilityService } from '../toolbar-button-visibility.service';\nimport { ToolbarEventService } from '../toolbar-event.service';\nimport { Store, select } from '@ngrx/store';\nimport * as fromStore from '../../store/reducers/reducers';\nimport { Rectangle } from '../../annotations/annotation-set/annotation-view/rectangle/rectangle.model';\nimport * as fromDocument from '../../store/selectors/document.selectors';\nimport * as fromRedactionActions from '../../store/actions/redaction.actions';\nimport { v4 as uuid } from 'uuid';\nimport { HighlightCreateService } from '../../annotations/annotation-set/annotation-create/highlight-create/highlight-create.service';\nimport { some } from 'lodash';\nimport { HtmlTemplatesHelper } from '../../shared/util/helpers/html-templates.helper';\n\n@Component({\n    selector: 'mv-redaction-search-bar',\n    templateUrl: './redaction-search-bar.component.html',\n    styleUrls: ['./redaction-search-bar.component.scss'],\n    standalone: false\n})\nexport class RedactionSearchBarComponent implements OnInit, OnDestroy {\n\n  @ViewChild('findInput', { static: true }) findInput: ElementRef<HTMLInputElement>;\n\n  highlightAll = true;\n  matchCase = false;\n  wholeWord = false;\n  resultsText = '';\n  searchText = '';\n  resultCount = 0;\n  redactElements: RedactRectangle[] = [];\n  pageHeight: number;\n  pageWidth: number;\n  zoom: number;\n  rotate: number;\n  allPages: object;\n  redactAll: boolean;\n  openSearchModal: boolean;\n  redactAllInProgress: boolean;\n  redactAllText?: string;\n  searchType: SearchType;\n  inProgressText: string;\n  titleText: string;\n\n\n  private subscription: Subscription;\n  private documentId: string;\n  public advancedSearchVisible = false;\n\n\n  constructor(\n    private store: Store<fromStore.State>,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    public readonly toolbarEvents: ToolbarEventService,\n    public readonly highlightService: HighlightCreateService,\n  ) { }\n\n  public ngOnInit(): void {\n    this.subscription = this.toolbarEvents.redactionSerachSubject.subscribe((results: RedactionSearch) => this.redactAllSearched(results));\n    this.subscription.add(this.store.pipe(select(fromDocument.getDocumentId)).subscribe(docId => this.documentId = docId));\n    this.subscription.add(this.store.pipe(select(fromDocument.getPages)).subscribe((pages) => {\n      if (pages[1]) {\n        this.allPages = pages;\n      }\n    }));\n    this.subscription.add(\n      this.toolbarEvents.searchResultsCountSubject.subscribe(results => this.setSearchResultsCount(results))\n    );\n    this.subscription.add(this.toolbarEvents.openRedactionSearch.subscribe((searchMode: SearchMode) => {\n      if (searchMode) {\n        this.openSearchModal = searchMode.isOpen;\n        this.searchType = searchMode.modeType;\n        this.modeText();\n      }\n    }));\n    this.subscription.add(this.toolbarEvents.redactAllInProgressSubject\n      .subscribe(inProgress => this.redactAllInProgress = inProgress));\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  @HostListener('window:keydown', ['$event'])\n  public onWindowKeyDown(e: KeyboardEvent): void {\n    if (e.code === 'F3' || (e.ctrlKey && e.code === 'KeyF')) {\n      e.preventDefault();\n      this.toolbarEvents.searchBarHidden.next(false);\n      setTimeout(() => this.findInput.nativeElement.focus(), 200);\n    }\n  }\n\n  search(reset: boolean = true): void {\n    this.redactAll = !reset;\n    if (this.redactAll) {\n      this.toolbarEvents.redactAllInProgressSubject.next(true);\n    }\n    if (reset) {\n      this.redactElements = [];\n    }\n    this.toolbarEvents.search({\n      searchTerm: this.searchText,\n      highlightAll: this.highlightAll,\n      matchCase: this.matchCase,\n      wholeWord: this.wholeWord,\n      previous: false,\n      reset\n    });\n  }\n\n  modeText(): void {\n    if (this.searchType === SearchType.Highlight) {\n      this.inProgressText = 'Highlighting';\n      this.titleText = 'Highlight';\n    } else if (this.searchType === SearchType.Redact) {\n      this.inProgressText = 'Redacting';\n      this.titleText = 'Redact';\n    }\n  }\n\n  private saveRedaction(redactRectangle: RedactRectangle[]) {\n    const redaction = redactRectangle.map(ele => {\n      return { page: ele.page, rectangles: ele.rectangles, redactionId: uuid(), documentId: this.documentId } as Redaction;\n    });\n    this.store.dispatch(new fromRedactionActions.SaveBulkRedaction({ searchRedactions: redaction } as BulkRedaction));\n  }\n\n  private existInRedactElements(pageNumber: number, matechedIndex: number, rectangles: Rectangle[]): boolean {\n    if (this.redactElements && this.redactElements.length > 0) {\n      const pagesFound = this.redactElements.find(re => re.page === pageNumber && re.matchedIndex === matechedIndex);\n      const pageRectangles = pagesFound?.rectangles;\n      if (!pageRectangles || pageRectangles.length <= 0) {\n        return false;\n      }\n      let matchesRectangles = 0;\n      for (let rectIndx = 0; rectIndx < pageRectangles.length; rectIndx++) {\n        const rectangle = pageRectangles[rectIndx];\n        const foundRectangle = rectangles.find(re => re.width === rectangle.width &&\n          re.height === rectangle.height && re.x === rectangle.x && re.y === rectangle.y);\n        if (foundRectangle) {\n          matchesRectangles++;\n        }\n      }\n      return pageRectangles.length === matchesRectangles;\n    }\n    return false;\n  }\n\n  onCloseSearchModal() {\n    this.toolbarEvents.openRedactionSearch.next({ isOpen: false, modeType: this.searchType });\n  }\n\n\n  private setSearchResultsCount(results: SearchResultsCount): void {\n    this.resultCount = results.total;\n    this.resultsText = this.resultCount > 0\n      ? `${results.total} results founds`\n      : 'No results found';\n  }\n\n  private redactAllSearched(results: RedactionSearch): void {\n    const $this = this;\n    const intervalId = setInterval(() => {\n      const highlightElement = document.getElementsByClassName('highlight selected');\n      if (highlightElement && highlightElement.length > 0) {\n        clearInterval(intervalId);\n        $this.redactAllSearchedTick(results);\n      }\n    }, 100);\n  }\n\n\n  private redactAllSearchedTick(results: RedactionSearch): void {\n    const highlightElement = document.getElementsByClassName('highlight selected');\n    if (highlightElement && highlightElement.length > 0) {\n      this.resultCount = results.matchesCount;\n      const pageNumber = results.page + 1;\n      const rectangles = this.getRectangles(pageNumber);\n      if (rectangles && this.redactElements.length <= this.resultCount\n        && !this.existInRedactElements(pageNumber, results.matchedIndex, rectangles)) {\n        this.redactElements.push({ page: pageNumber, matchedIndex: results?.matchedIndex, rectangles } as RedactRectangle);\n        this.CreateRedactAllText();\n      }\n      if (this.redactAll && this.resultCount && this.resultCount > 0\n        && rectangles && this.redactElements.length < this.resultCount) {\n        this.search(false);\n      }\n\n      if (this.redactAll && this.resultCount && this.redactElements.length === this.resultCount) {\n        this.redactAll = false;\n        this.redactAllText = null;\n        if (this.searchType === SearchType.Redact) {\n          this.saveRedaction(this.redactElements);\n        } else if (this.searchType === SearchType.Highlight) {\n          this.highlightService.saveAnnotationSet(this.redactElements);\n          this.cleanUpPostSave();\n        }\n      }\n    }\n  }\n\n  private cleanUpPostSave() {\n    this.toolbarEvents.redactAllInProgressSubject.next(false);\n    this.searchText = '';\n    this.search();\n  }\n\n  private CreateRedactAllText() {\n    this.redactAllText = `${this.redactElements.length} of ${this.resultCount}`;\n  }\n\n  public onEscapeKeyPress(e: KeyboardEvent): void {\n    this.toolbarEvents.searchBarHidden.next(true);\n  }\n\n  public onEnterKeyPress(e: KeyboardEvent): void {\n    this.search();\n  }\n\n  public toggleSearchBar() {\n    this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());\n  }\n\n  private getRectangles(page: number): Rectangle[] {\n    this.pageHeight = this.allPages[page].styles.height;\n    this.pageWidth = this.allPages[page].styles.width;\n    this.zoom = parseFloat(this.allPages[page].scaleRotation.scale);\n    this.rotate = parseInt(this.allPages[page].scaleRotation.rotation, 10);\n    const selectedHighLightedElements = document.getElementsByClassName('highlight selected');\n    if (selectedHighLightedElements && selectedHighLightedElements.length > 0) {\n      const docRange = document.createRange();\n      if (some(selectedHighLightedElements, element => element.className === 'highlight begin selected' || element.className === 'highlight end selected')) {\n        docRange.setStart(selectedHighLightedElements[0], 0);\n        const endNode = selectedHighLightedElements[selectedHighLightedElements.length - 1];\n        docRange.setEnd(endNode, endNode.childNodes.length);\n      }\n      else {\n        docRange.selectNodeContents(selectedHighLightedElements[0] as HTMLElement);\n      }\n      const selection = window.getSelection();\n      selection?.removeAllRanges();\n      selection?.addRange(docRange);\n      if (selection.rangeCount && !selection.isCollapsed) {\n        const range = selection.getRangeAt(0).cloneRange();\n        const clientRects = range.getClientRects();\n\n        if (clientRects) {\n          const parentRect = HtmlTemplatesHelper.getAdjustedBoundingRect(selectedHighLightedElements[0]?.parentElement?.parentElement);\n          const selectionRectangles: Rectangle[] = [];\n          for (let i = 0; i < clientRects.length; i++) {\n            const selectionRectangle = this.createTextRectangle(clientRects[i], parentRect);\n            const findSelecttionRectangle = selectionRectangles.find(\n              (rect) => rect.width === selectionRectangle.width && rect.x === selectionRectangle.x\n            );\n            if (!findSelecttionRectangle) {\n              selectionRectangles.push(selectionRectangle);\n            }\n          }\n\n          return selectionRectangles;\n        }\n      }\n    }\n  }\n\n  private createTextRectangle(rect: DOMRect, parentRect: any): Rectangle {\n    const height = rect.bottom - rect.top;\n    const width = rect.right - rect.left;\n    const top = rect.top - parentRect.top;\n    const left = rect.left - parentRect.left;\n\n    let rectangle = this.highlightService.applyRotation(\n      this.pageHeight,\n      this.pageWidth,\n      height,\n      width,\n      top,\n      left,\n      this.rotate,\n      this.zoom\n    );\n    rectangle = { id: uuid(), ...rectangle };\n\n    return rectangle as Rectangle;\n  }\n}\n","<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          [attr.aria-label]=\"'Close Search' | rpxTranslate\"\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=\"Redact from search\"\n        #findInput\n        title=\"Redact from search\"\n        placeholder=\"{{ titleText + ' from search...' | rpxTranslate }}\"\n        data-l10n-id=\"search_input\"\n        [ngModel]=\"searchText\"\n        (ngModelChange)=\"searchText = $event\"\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\" | rpxTranslate }}\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 || resultCount <= 0\"\n        >\n          {{ titleText + \" all\" | rpxTranslate }}\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            {{ inProgressText + \" in progress\" | rpxTranslate }}\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","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport type { CommentSetComponent } from '../comment-set.component';\nimport { Annotation } from '../../annotation-set/annotation-view/annotation.model';\nimport type { CommentComponent } from './comment.component';\n\n// TODO: replace by NgRx\n@Injectable()\nexport class CommentService {\n\n  public readonly unsavedChanges = new Subject<boolean>();\n  public readonly marginToCommentEmitter = new BehaviorSubject<boolean>(false);\n  commentSetComponent: CommentSetComponent;\n\n  setCommentSet(commentSetComponent) {\n    this.commentSetComponent = commentSetComponent;\n  }\n\n  onCommentChange(changes: boolean): void {\n    this.unsavedChanges.next(changes);\n  }\n\n  getUnsavedChanges(): Observable<boolean> {\n    return this.unsavedChanges.asObservable();\n  }\n\n  hasUnsavedComments(annotation: Annotation): boolean {\n    if (annotation.comments.length > 0) {\n      const comment = this.getComment(annotation);\n      return comment.hasUnsavedChanges;\n    }\n    return false;\n  }\n\n  updateUnsavedCommentsStatus(annotation: Annotation, hasUnsavedChanges: boolean): void {\n    const comment = this.getComment(annotation);\n    comment.hasUnsavedChanges = hasUnsavedChanges;\n    this.allCommentsSaved();\n  }\n\n  getComment(annotation: Annotation): CommentComponent {\n    return this.commentSetComponent.commentComponents\n      .find(c => c.comment.annotationId === annotation.comments[0].annotationId);\n  }\n\n  resetCommentSet(): void {\n    this.commentSetComponent = null;\n  }\n\n  allCommentsSaved(): void {\n    this.onCommentChange(this.commentSetComponent.commentComponents.some(comment => comment.hasUnsavedChanges === true));\n  }\n\n  createMarginToCommentEvent(margin: boolean) {\n    this.marginToCommentEmitter.next(margin);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CommentComponent } from './comment/comment.component';\nimport { HtmlTemplatesHelper } from '../../shared/util/helpers/html-templates.helper';\n\n@Injectable()\nexport class CommentSetRenderService {\n\n  redrawComponents(commentComponents: CommentComponent[], pageHeights: any[], rotate: number, zoom: number) {\n    let prevComment: CommentComponent;\n    this.sortComponents(commentComponents, pageHeights, rotate, zoom).forEach((comment: CommentComponent) => {\n      this.adjustIfOverlapping(comment, prevComment, zoom);\n      prevComment = comment;\n    });\n  }\n\n  sortComponents(commentComponents: CommentComponent[], pageHeights: any[], rotate: number, zoom: number) {\n    return commentComponents.sort((a: CommentComponent, b: CommentComponent) => {\n      a.rectTop = this.top(a._rectangle, pageHeights[a.page - 1], rotate, zoom);\n      b.rectTop = this.top(b._rectangle, pageHeights[b.page - 1], rotate, zoom);\n      return this.processSort(a, b);\n    });\n  }\n\n  private adjustIfOverlapping(comment: CommentComponent, prevComment: CommentComponent, zoom: number): void {\n    if (prevComment) {\n      const endOfPrevComment = prevComment.commentTop + this.height(prevComment);\n      if (comment.commentTop <= endOfPrevComment) {\n        comment.rectTop = (endOfPrevComment - comment.totalPrevPagesHeight) / zoom;\n      }\n    }\n  }\n\n  private processSort(a: CommentComponent, b: CommentComponent): number {\n    if (this.onSameLine(a, b)) {\n      return a.rectLeft >= b.rectLeft ? 1 : -1;\n    }\n    return a.commentTop >= b.commentTop ? 1 : -1;\n  }\n\n  private onSameLine(a: CommentComponent, b: CommentComponent): boolean {\n    return this.difference(a.commentTop, b.commentTop) === 0;\n  }\n\n  private top(rectangle: { x, y, height, width }, height: number, rotate: number, zoom: number) {\n    const actualHeight = height / zoom;\n    switch (rotate) {\n      case 90: return rectangle.x;\n      case 180: return actualHeight - (rectangle.y + rectangle.height);\n      case 270: return actualHeight - (rectangle.x + rectangle.width);\n      default: return rectangle.y;\n    }\n  }\n\n  private height(element: any) {\n    return HtmlTemplatesHelper.getAdjustedBoundingRect(element.form.nativeElement)?.height | 0;\n  }\n\n  private difference(a: number, b: number): number { return Math.abs(a - b); }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { TagsModel } from '../../models/tags.model';\n\n@Injectable()\nexport class TagsServices {\n\n  public tagItems: {[id: string]: TagsModel[]};\n\n  constructor(private http: HttpClient) {}\n\n  public getAllTags(createdBy: string): Observable<TagsModel[]> {\n    const url = `/em-anno/tags/${createdBy}`;\n    return this.http.get<TagsModel[]>(url);\n  }\n\n  // @TODO: Move everything below this to NgRx store\n  getNewTags(annoid: string): TagsModel[] {\n    return this.tagItems ? this.tagItems[annoid] : [];\n  }\n\n  updateTagItems(items: Array<TagsModel>, annoId: string) {\n    const snakeCased = items.map(item => {\n      return {\n        ...item,\n        name: this.snakeCase(item.name)\n      };\n    });\n\n    this.tagItems = {\n      ...this.tagItems,\n      [annoId]: snakeCased\n    };\n  }\n\n  private snakeCase = string => {\n    // transform string_to_snake_case\n    return string.replace(/ +/g, ' ')  // find space\n      .split(/ |\\B(?=[A-Z])/) // split it into array\n      .map(word => word.toLowerCase()) // transform to lover case\n      .join('_'); // trun array into sting using _\n  }\n}\n","import { AfterViewChecked, Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n    selector: '[mvTextHighlight]',\n    standalone: false\n})\nexport class TextHighlightDirective implements AfterViewChecked {\n\n  @Input() textToHighlight: string;\n\n  constructor(private element: ElementRef<HTMLElement>) {}\n\n  ngAfterViewChecked(): void {\n    if (this.textToHighlight) {\n      this.highlightInputText(this.textToHighlight);\n    }\n  }\n\n  highlightInputText(textToHighlight: string) {\n    this.resetHighlight();\n    this.textToHighlight = textToHighlight;\n    const searchPattern = new RegExp(textToHighlight, 'gi');\n    const hostElement = this.element.nativeElement;\n    if (hostElement.innerHTML.match(searchPattern)) {\n      hostElement.innerHTML = hostElement.innerHTML\n        .replace(searchPattern, this.highlightPattern('$&'));\n    }\n    this.textToHighlight = undefined;\n  }\n\n  resetHighlight() {\n    const hostElement = this.element.nativeElement;\n    const searchPattern = new RegExp(this.highlightPattern('(.*?)'), 'gi');\n    while (hostElement.innerHTML.match(searchPattern)) {\n      const matchGroups = searchPattern.exec(hostElement.innerHTML);\n      if (matchGroups) {\n        hostElement.innerHTML = hostElement.innerHTML.replace(matchGroups[0], matchGroups[1]);\n      }\n    }\n  }\n\n  private highlightPattern(dynamicText: string) {\n    return '<span class=\"mvTextHighlight\">' + dynamicText + '</span>';\n  }\n}\n","import { AfterContentChecked, Directive, ElementRef, HostListener } from '@angular/core';\n\n@Directive({\n    selector: '[mvTextAreaAutoExpand]',\n    standalone: false\n})\nexport class TextareaAutoExpandDirective implements AfterContentChecked {\n\n  constructor(private el: ElementRef) {\n  }\n\n  ngAfterContentChecked(): void {\n    this.adjustHeight();\n  }\n\n  @HostListener('input') onMouseDown() {\n    this.adjustHeight();\n  }\n\n  adjustHeight(): void {\n    const nativeElement = this.el.nativeElement;\n    nativeElement.style.overflow = 'hidden';\n    nativeElement.style.height = 'auto';\n    nativeElement.style.height = nativeElement.scrollHeight - 5 + 'px';\n  }\n\n}\n","import {Component, Input, ViewEncapsulation} from '@angular/core';\nimport {TagsModel} from '../models/tags.model';\nimport {TagsServices} from '../services/tags/tags.services';\nimport {UntypedFormControl} from '@angular/forms';\nimport {Observable} from 'rxjs';\n\n@Component({\n    selector: 'mv-tags',\n    templateUrl: './tags.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class TagsComponent {\n  @Input() tagItems: TagsModel[];\n  @Input() userId: string;\n  @Input() editable: boolean;\n  @Input() annoId: string;\n\n  public validators = [this.minLength, this.maxLength20];\n  public errorMessages: {[id: string]: string} = {\n    'minLength': 'Minimum of 2 characters',\n    'maxLength20': 'Maximum of 20 characters'\n  };\n\n  constructor(private tagsServices: TagsServices) {}\n\n  onUpdateTags(value) {\n    this.tagsServices.updateTagItems(value, this.annoId);\n  }\n\n  public requestAutocompleteItems = (text: string): Observable<any[]> => {\n    return this.tagsServices.getAllTags(this.userId);\n  }\n\n  private minLength(control: UntypedFormControl) {\n    if (control.value.length < 2) {\n      return {\n        'minLength': true\n      };\n    }\n    return null;\n  }\n\n  private maxLength20(control: UntypedFormControl) {\n    if (control.value.length >= 20) {\n      return {\n        'maxLength20': true\n      };\n    }\n    return null;\n  }\n}\n","<div class=\"tags\">\n  <tag-input\n    *ngIf=\"editable\" class=\"tags__edit\"\n    [maxItems]=\"10\"\n    [ngModel]=\"tagItems\"\n    (ngModelChange)=\"tagItems = $event; onUpdateTags($event)\"\n    [ngModelOptions]=\"{standalone:true}\"\n    [placeholder]=\"'Add tag'\"\n    [displayBy]=\"'label'\"\n    [identifyBy]=\"'name'\"\n    [onTextChangeDebounce]=\"250\"\n    [secondaryPlaceholder]=\"'Search or add tags'\"\n    [validators]=\"validators\"\n    [errorMessages]=\"errorMessages\"\n    [onlyFromAutocomplete]=\"false\">\n    <tag-input-dropdown\n      [autocompleteObservable]=\"requestAutocompleteItems\"\n      [displayBy]=\"'label'\"\n      [identifyBy]=\"'name'\"\n      [zIndex]=\"10000\"\n      [minimumTextLength]=\"2\">\n      <ng-template let-item=\"item\" let-index=\"index\">\n        {{ item.label }}\n      </ng-template>\n    </tag-input-dropdown>\n  </tag-input>\n\n  <div class=\"tags__renderer\" *ngIf=\"!editable && (tagItems && tagItems.length)\">\n    <span *ngFor=\"let tag of tagItems\" class=\"tags__item hmcts-badge\">\n      {{tag.label}}\n    </span>\n  </div>\n</div>\n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport moment from 'moment-timezone';\n/**\n * A moment timezone pipe to support parsing based on time zone abbreviations\n * covers all cases of offset variation due to daylight saving.\n *\n * Same API as DatePipe with additional timezone abbreviation support\n * Official date pipe dropped support for abbreviations names from Angular V5\n */\n@Pipe({\n    name: 'momentDate',\n    standalone: false\n})\nexport class MomentDatePipe extends DatePipe implements PipeTransform {\n\n  transform(\n    value: string | Date,\n    format: string = 'mediumDate',\n    timezone: string = 'Europe/London'\n  ): any {\n    const timezoneOffset = moment(value).tz(timezone).format('Z');\n    return super.transform(value, format, timezoneOffset);\n  }\n}\n","import {\n  AfterContentInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {Comment} from './comment.model';\nimport {User} from '../../models/user.model';\nimport {Rectangle} from '../../annotation-set/annotation-view/rectangle/rectangle.model';\nimport {SelectionAnnotation} from '../../models/event-select.model';\nimport {CommentService} from './comment.service';\nimport {TagsModel} from '../../models/tags.model';\nimport {TagsServices} from '../../services/tags/tags.services';\nimport { Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport * as fromStore from '../../../store/reducers/reducers';\nimport * as fromSelector from '../../../store/selectors/annotation.selectors';\nimport { AnnotationSet } from '../../annotation-set/annotation-set.model';\nimport { Annotation } from '../../annotation-set/annotation-view/annotation.model';\nimport { HtmlTemplatesHelper } from '../../../shared/util/helpers/html-templates.helper';\n\n@Component({\n    selector: 'mv-anno-comment',\n    templateUrl: './comment.component.html',\n    standalone: false\n})\nexport class CommentComponent implements OnInit, OnDestroy, AfterContentInit {\n\n  CHAR_LIMIT = 5000;\n  lastUpdate: string;\n  originalComment: string;\n  fullComment: string;\n  author: User;\n  createdBy: string;\n  editor: User;\n  _comment: Comment;\n  _editable: boolean;\n  _rectangle;\n  totalPrevPagesHeight = 0;\n  rectTop;\n  rectLeft;\n  pageHeight: number;\n  hasUnsavedChanges = false;\n  selected: boolean;\n  searchString: string;\n  public tagItems: TagsModel[];\n  marginToComment$: Observable<boolean> ;\n\n\n\n  @Output() commentClick = new EventEmitter<SelectionAnnotation>();\n  @Output() renderComments = new EventEmitter<Comment>();\n  @Output() delete = new EventEmitter<Comment>();\n  @Output() updated = new EventEmitter<{comment: Comment, tags: TagsModel[]}>();\n  @Output() changes = new EventEmitter<boolean>();\n  @Input() rotate = 0;\n  @Input() zoom = 1;\n  @Input() index: number;\n  @Input() page: number;\n\n  @ViewChild('form', {static: false}) form: ElementRef;\n  @ViewChild('editableComment', {static: false}) editableComment: ElementRef<HTMLElement>;\n\n  private subscriptions: Subscription;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    private readonly commentService: CommentService,\n    private tagsServices: TagsServices\n  ) {}\n\n\n  ngOnInit(): void {\n    this.subscriptions = this.store.select(fromSelector.getComponentSearchText)\n      .pipe(distinctUntilChanged()).subscribe(searchString => this.searchString = searchString);\n    this.reRenderComments();\n    this.marginToComment$ = this.commentService.marginToCommentEmitter.asObservable();\n  }\n\n  ngAfterContentInit(): void {\n    if (this.tagItems && this.tagItems.length) {\n      this.tagsServices.updateTagItems(this.tagItems, this._comment.annotationId);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  @Input()\n  set comment(comment: Comment) {\n    this._comment = {...comment};\n    this.page = this._comment.page;\n    this.lastUpdate = comment.lastModifiedDate ? comment.lastModifiedDate : comment.createdDate;\n    this.author = comment.createdByDetails;\n    this.createdBy = comment.createdBy;\n    this.editor = comment.lastModifiedByDetails;\n    this.originalComment = comment.content;\n    this.fullComment = this.originalComment;\n    this.selected = this._comment.selected;\n    this._editable = this._comment.editable;\n    this.tagItems = this._comment.tags;\n    const pageMarginBottom = 10;\n    this.totalPrevPagesHeight = 0;\n    for (let i = 0; i < this.page - 1; i++) {\n      const height = this._comment.pages[i + 1] ? this._comment.pages[i + 1].styles.height : undefined;\n      if (height) {\n        this.totalPrevPagesHeight += height + pageMarginBottom;\n      }\n    }\n\n  }\n\n  get comment() {\n    return this._comment;\n  }\n\n  @Input()\n  set annotation(annotation: Annotation) {\n    this._rectangle = annotation.rectangles\n      .reduce((prev, current) => prev.y < current.y ? prev : current);\n    const actualHeight = this._comment.pages[this.page].styles.height / this.zoom;\n    switch (this.rotate) {\n      case 90: this.rectTop = this._rectangle.x;\n      break;\n      case 180: this.rectTop = actualHeight - (this._rectangle.y + this._rectangle.height);\n      break;\n      case 270: this.rectTop = actualHeight - (this._rectangle.x + this._rectangle.width);\n      break;\n      default: this.rectTop = this._rectangle.y;\n    }\n    this.rectLeft = this._rectangle.x;\n  }\n\n  get editable(): boolean {\n    return this._editable;\n  }\n\n  onCommentChange(updatedComment) {\n    this.hasUnsavedChanges =\n      this.originalComment.substring(0, this.CHAR_LIMIT) !== updatedComment.substring(0, this.CHAR_LIMIT);\n    this.commentService.onCommentChange(this.hasUnsavedChanges);\n  }\n\n  deleteOrCancel() {\n    if (!this.editable) {\n      this.delete.emit(this._comment);\n    } else {\n      this.hasUnsavedChanges = false;\n      this._editable = false;\n      this.fullComment = this.originalComment;\n      this.changes.emit(false);\n      if (!this.author && !this.fullComment) {\n        this.delete.emit(this._comment);\n      }\n    }\n  }\n\n  public editOrSave() {\n    if (!this.editable) {\n      this._editable = true;\n    } else {\n      this._comment.content = this.fullComment.substring(0, this.CHAR_LIMIT);\n      const tags = this.tagsServices.getNewTags(this._comment.annotationId);\n      const payload = {\n        comment: this._comment,\n        tags\n      };\n      this.updated.emit(payload);\n      this.hasUnsavedChanges = false;\n      this._editable = false;\n      this.changes.emit(false);\n    }\n  }\n\n  onCommentClick() {\n    if (!this.selected) {\n      this.selected = true;\n      this._editable = false;\n      this.commentClick.emit({ annotationId: this._comment.annotationId, editable: this._editable, selected: true });\n    }\n  }\n\n  reRenderComments() {\n    this.renderComments.emit(this._comment);\n  }\n\n  get commentTop(): number {\n    return this.totalPrevPagesHeight + (this.rectTop * this.zoom);\n  }\n\n\n  get height() {\n    return HtmlTemplatesHelper.getAdjustedBoundingRect(this.form.nativeElement).height / this.zoom;\n  }\n}\n","<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","import {\n  Component,\n  ElementRef,\n  Input, OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList, SimpleChanges,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\n\nimport { AnnotationSet } from '../annotation-set/annotation-set.model';\nimport { Annotation } from '../annotation-set/annotation-view/annotation.model';\nimport { Comment } from './comment/comment.model';\nimport { CommentComponent } from './comment/comment.component';\nimport { CommentService } from './comment/comment.service';\nimport { CommentSetRenderService } from './comment-set-render.service';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromActions from '../../store/actions/annotation.actions';\nimport * as fromSelectors from '../../store/selectors/annotation.selectors';\nimport { TagsModel } from '../models/tags.model';\nimport { SelectionAnnotation } from '../models/event-select.model';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\n\n@Component({\n    selector: 'mv-comment-set',\n    templateUrl: './comment-set.component.html',\n    standalone: false\n})\nexport class CommentSetComponent implements OnInit, OnDestroy, OnChanges {\n\n  @Input() annotationSet: AnnotationSet;\n  @Input() zoom: number;\n  @Input() rotate: number;\n  @Input() height: number;\n  @Input() pageHeights = [];\n  @Input() contentScrollTop: number;\n\n  comments: Comment[];\n  tags: TagsModel[];\n  private subscriptions: Subscription[] = [];\n  public comments$: Observable<Annotation[]>;\n  public annoEntities$: Observable<{ [id: string]: Annotation }>;\n\n  @ViewChild('container', {static: false}) container: ElementRef<HTMLDivElement>;\n  @ViewChild('panel', {static: false}) panel: ElementRef<HTMLDivElement>;\n  @ViewChildren('commentComponent') commentComponents: QueryList<CommentComponent>;\n\n  showCommentsPanel: boolean;\n\n  constructor(private store: Store<fromStore.AnnotationSetState>,\n              private readonly commentService: CommentService,\n              private readonly renderService: CommentSetRenderService,\n              private readonly toolbarEvents: ToolbarEventService) {\n    this.clearSelection();\n  }\n\n  ngOnInit() {\n    this.comments$ = this.store.pipe(select(fromSelectors.getCommentsArray));\n    this.annoEntities$ = this.store.pipe(select(fromSelectors.getAnnotationEntities));\n    this.subscriptions.push(\n      this.toolbarEvents.commentsPanelVisible.subscribe(toggle => {\n        this.redrawComments();\n        this.showCommentsPanel = toggle;\n      })\n    );\n    this.subscriptions.push(this.toolbarEvents.rotateSubject.subscribe(rotate => this.rotateDocument()));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.annotationSet) {\n      this.commentService.setCommentSet(this);\n    }\n    if (changes.contentScrollTop) {\n      if (this.container) {\n        this.container.nativeElement.scrollTo(0, this.contentScrollTop);\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.subscriptions.length > 0) {\n      this.subscriptions.forEach(subscription => subscription.unsubscribe());\n    }\n  }\n\n  public onSelect(annotationId: SelectionAnnotation) {\n    this.store.dispatch(new fromActions.SelectedAnnotation(annotationId));\n  }\n\n  public onCommentDelete(comment: Comment) {\n    const annotation = this.annotationSet.annotations.find(anno => anno.id === comment.annotationId);\n    const comments = [];\n    const annot = {\n      ...annotation,\n      comments\n    };\n    this.onAnnotationUpdate(annot);\n    this.redrawComments();\n  }\n\n  redrawComments() {\n    setTimeout(() => {\n      const componentList: CommentComponent[] = this.commentComponents.map(comment => comment);\n        this.renderService.redrawComponents(componentList, this.pageHeights, this.rotate, this.zoom);\n    }, 0);\n  }\n\n  private rotateDocument() {\n    if (this.panel) {\n      this.panel.nativeElement.style.height = '0';\n    }\n  }\n\n  public onCommentUpdate(payload: {comment: Comment, tags: TagsModel[]} ) {\n    const annotation = this.annotationSet.annotations.find(anno => anno.id === payload.comment.annotationId);\n    const comments = [payload.comment];\n    const tags = payload.tags;\n    const annot = {\n      ...annotation,\n      comments,\n      tags\n    };\n    this.onAnnotationUpdate(annot);\n  }\n\n  public onAnnotationUpdate(annotation: Annotation) {\n    this.store.dispatch(new fromActions.SaveAnnotation(annotation));\n  }\n\n  onContainerClick(e) {\n    if (e.path && e.path[0] === this.panel.nativeElement) {\n      this.clearSelection();\n    }\n  }\n\n  clearSelection() {\n    this.store.dispatch(new fromActions.SelectedAnnotation({ annotationId: '', editable: false, selected: false}));\n  }\n\n  allCommentsSaved() {\n    this.commentService.allCommentsSaved();\n  }\n}\n","<div #container [ngClass]=\"{'comments': showCommentsPanel}\">\n  <div #panel [ngClass]=\"{ 'comments-panel comment-container': true, 'expanded': showCommentsPanel }\"\n     [style.height.px]=\"height\"\n     (click)=\"onContainerClick($event)\">\n    <ng-container *ngFor=\"let comment of (comments$ | async); let i = index;\">\n      <mv-anno-comment\n        [ngStyle]=\"showCommentsPanel ? {} : {'display':'none'}\"\n        #commentComponent\n        (commentClick)=\"onSelect($event)\"\n        (delete)=\"onCommentDelete($event)\"\n        (updated)=\"onCommentUpdate($event)\"\n        (changes)=\"allCommentsSaved()\"\n        [zoom]=\"zoom\"\n        [rotate]=\"rotate\"\n        [index]=\"i\"\n        [page]=\"comment.page\"\n        [comment]=\"comment\"\n        [annotation]=\"(annoEntities$ | async)[comment.annotationId]\"\n        (renderComments)=\"redrawComments()\">\n      </mv-anno-comment>\n    </ng-container>\n  </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { Rectangle } from '../../annotation-set/annotation-view/rectangle/rectangle.model';\nimport { Annotation } from '../../annotation-set/annotation-view/annotation.model';\nimport {Store} from '@ngrx/store';\nimport * as fromStore from '../../../store/reducers/reducers';\nimport * as fromActions from '../../../store/actions/annotation.actions';\nimport {ToolbarEventService} from '../../../toolbar/toolbar-event.service';\n\n@Component({\n    selector: 'mv-comments-navigate',\n    templateUrl: './comments-navigate.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class CommentsNavigateComponent implements OnChanges {\n\n  @Input() public annotationList: Annotation[];\n  @Input() autoSelect = false;\n\n  navigationList: any[] = [];\n  index = 0;\n\n  constructor(private store: Store<fromStore.AnnotationSetState>, public readonly toolbarEvents: ToolbarEventService) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.annotationList) {\n      this.initNavigationList();\n    }\n  }\n\n  initNavigationList(): void {\n    this.index = 0;\n    this.navigationList = [...this.annotationList || []]\n      .map(annotation => ({\n        content: annotation.comments[0].content,\n        annotationId: annotation.id,\n        page: annotation.page,\n        rectangle: this.upperRectangle(annotation.rectangles),\n      }))\n      .sort(this.sortComments);\n\n    if (this.autoSelect) {\n      this.toolbarEvents.setPage(Number.parseInt(this.navigationList[0].page, 0));\n      this.store.dispatch(new fromActions.SelectedAnnotation({\n        annotationId: this.navigationList[0].annotationId,\n        editable: false,\n        selected: true\n      }));\n    }\n  }\n\n  sortComments(mappedCommentA, mappedCommentB) {\n    if (mappedCommentA.page !== mappedCommentB.page) {\n      return mappedCommentA.page - mappedCommentB.page;\n    } else {\n      const rectA = mappedCommentA.rectangle;\n      const rectB = mappedCommentB.rectangle;\n      if (rectA.y !== rectB.y) {\n        return rectA.y - rectB.y;\n      } else {\n        return rectA.x - rectB.x;\n      }\n    }\n  }\n\n  nextItem() {\n    this.index += 1;\n    if (this.index === this.annotationList.length) {\n      this.index = 0;\n    }\n\n    this.toolbarEvents.setPage(Number.parseInt(this.navigationList[this.index].page, 0));\n    this.store.dispatch(new fromActions.SelectedAnnotation({\n      annotationId: this.navigationList[this.index].annotationId, editable: false, selected: true\n    }));\n  }\n\n\n  prevItem() {\n    this.index -= 1;\n    if (this.index < 0) {\n      this.index = this.navigationList.length - 1;\n    }\n    this.toolbarEvents.setPage(Number.parseInt(this.navigationList[this.index].page, 0));\n    this.store.dispatch(new fromActions.SelectedAnnotation({\n      annotationId: this.navigationList[this.index].annotationId,\n      editable: false,\n      selected: true\n    }));\n  }\n\n  upperRectangle(rectangles: Rectangle[]) {\n    [...rectangles].sort((rect1, rect2) => rect1.y - rect2.y);\n    return { x: rectangles[0].x, y: rectangles[0].y };\n  }\n}\n","<p class=\"comment-search\">\n  <span class=\"comment-search__item\">\n    Showing {{ index + 1 }} of {{ navigationList.length }}\n  </span>\n  <a [routerLink]=\"[]\"\n     class=\"comment-search__item\"\n     title=\"Previous comment\"\n     [attr.aria-label]=\"'Previous comment' | rpxTranslate\"\n     (click)=\"prevItem()\">Prev</a>\n  <a [routerLink]=\"[]\"\n     class=\"comment-search__item\"\n     title=\"Next comment'\"\n     [attr.aria-label]=\"'Next comment' | rpxTranslate\"\n     (click)=\"nextItem()\">Next</a>\n</p>\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Annotation } from '../../../annotation-set/annotation-view/annotation.model';\nimport { Store } from '@ngrx/store';\nimport * as fromStore from '../../../../store/reducers/reducers';\nimport * as fromActions from '../../../../store/actions/annotation.actions';\n\n@Component({\n    selector: 'mv-comment-search',\n    templateUrl: './comment-search.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class CommentSearchComponent implements AfterViewInit, OnDestroy {\n\n  @Input() public annotations: Annotation[];\n\n  @ViewChild('searchInput', {static: false}) searchInput: ElementRef<HTMLInputElement>;\n\n  searchString: string;\n  searchResults: Annotation[] = [];\n  searchIndex = 0;\n\n  constructor(private store: Store<fromStore.AnnotationSetState>) {}\n\n  ngAfterViewInit(): void {\n    if (this.searchInput) {\n      this.searchInput.nativeElement.focus();\n    }\n  }\n\n  ngOnDestroy(): void {\n    // TODO workaround for tab error\n    setTimeout(() => {this.store.dispatch(new fromActions.SearchComment('')); }, 250);\n  }\n\n  searchComments(searchText: string): void {\n    this.clearSearch();\n    if (searchText.length > 2) {\n      this.searchString = searchText;\n      this.searchResults = this.annotations\n        .filter(annotation => annotation.comments.length > 0)\n        .filter(annotation =>\n          annotation.comments[0].content.toLowerCase().includes(this.searchString.toLowerCase()));\n      if (this.searchResults.length > 0) {\n        this.store.dispatch(new fromActions.SearchComment(searchText));\n      }\n    }\n  }\n\n  clearSearch() {\n    this.searchString = undefined;\n    this.searchResults = [];\n    this.searchIndex = 0;\n    this.store.dispatch(new fromActions.SearchComment(''));\n  }\n}\n","<input\n  #searchInput\n  type=\"text\"\n  class=\"govuk-input comment-search__item\"\n  id=\"search-comments-input\"\n  name=\"searchString\"\n  aria-label=\"search comments input\"\n  [ngModel]=\"searchString\"\n  (ngModelChange)=\"searchString = $event\"\n/>\n<button\n  type=\"button\"\n  [class.govuk-button--disabled]=\"searchInput?.value.length <= 2\"\n  class=\"govuk-button comment-search__item\"\n  (click)=\"searchComments(searchInput.value.trim())\"\n>\n  {{ \"Search\" | rpxTranslate }}\n</button>\n<ng-container *ngIf=\"searchResults.length > 0\">\n  <mv-comments-navigate [annotationList]=\"searchResults\"></mv-comments-navigate>\n</ng-container>\n<ng-container *ngIf=\"searchString && searchResults?.length === 0\">\n  <p class=\"comment-search__item\">\n    {{ \"No matches have been found\" | rpxTranslate }}\n  </p>\n</ng-container>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'filter',\n    standalone: false\n})\nexport class FilterPipe implements PipeTransform {\n\n  transform(items: any[], searchText: string, fieldName: string): any[] {\n\n    if (!items) {\n      return [];\n    }\n\n    if (!searchText) {\n      return items;\n    }\n\n    return items.filter(item => {\n      if (item) {\n        if (item[fieldName]) {\n          return item[fieldName].toLowerCase().includes(searchText.toLowerCase());\n        } else {\n          return item.toLowerCase().includes(searchText.toLowerCase());\n        }\n      }\n      return false;\n    });\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'unsnake',\n    standalone: false\n})\nexport class UnsnakePipe implements PipeTransform {\n\n  transform(items: string): string {\n    return items.split('_').join(' ');\n  }\n\n}\n","import {Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\n\nimport {select, Store} from '@ngrx/store';\nimport * as fromStore from '../../../../store/reducers/reducers';\nimport * as fromSelectors from '../../../../store/selectors/tag.selectors';\nimport * as fromActions from '../../../../store/actions/tag.actions';\nimport {Observable, Subscription} from 'rxjs';\nimport {UntypedFormGroup, UntypedFormBuilder, UntypedFormControl} from '@angular/forms';\nimport {auditTime, tap} from 'rxjs/operators';\n\n\n@Component({\n    selector: 'mv-comment-filter',\n    templateUrl: './comment-filter.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class CommentFilterComponent implements OnInit, OnDestroy {\n  tagGroup: UntypedFormGroup;\n  $subscriptions: Subscription;\n  filter$: Observable<string[]>;\n  allTags$: Observable<any>;\n  searchValue: string;\n  isPreview = false;\n  constructor(\n    private store: Store<fromStore.State>,\n    private fb: UntypedFormBuilder) {}\n\n  ngOnInit(): void {\n    this.tagGroup = this.fb.group({\n      'tagFilters': this.fb.group({}),\n    });\n    this.filter$ = this.store.pipe(select(fromSelectors.getTagFilters));\n    this.$subscriptions = this.tagGroup.valueChanges.pipe(auditTime(5)).subscribe(value => {\n      const tagFilters = value['tagFilters'];\n      this.store.dispatch(new fromActions.AddFilterTags(tagFilters));\n    });\n    this.buildFrom();\n\n  }\n\n  buildFrom() {\n    const checkboxes = <UntypedFormGroup>this.tagGroup.get('tagFilters');\n    this.allTags$ = this.store.pipe(select(fromSelectors.getAllTagsArr)).pipe(tap(tags => {\n      this.tagGroup.reset();\n      tags.forEach((value) => {\n        checkboxes.addControl(value.key, new UntypedFormControl(false));\n      });\n    }));\n  }\n\n  onClearFilters() {\n    this.tagGroup.reset();\n    this.store.dispatch(new fromActions.ClearFilterTags());\n  }\n\n  ngOnDestroy(): void {\n    this.$subscriptions.unsubscribe();\n  }\n\n  onRemoveFilter(tagName) {\n    const checkboxes = <UntypedFormGroup>this.tagGroup.get('tagFilters');\n    checkboxes.controls[tagName].setValue(false);\n  }\n\n  onToggleFilterView() {\n    this.isPreview = !this.isPreview;\n  }\n\n\n}\n","<div class=\"comment-filter\">\n  <div class=\"hmcts-filter__content\">\n    <div class=\"hmcts-filter__toggle-filters\">\n      <p\n        class=\"hmcts-filter__toggle-filters-link\"\n        [ngClass]=\"{ 'govuk-accordion__section--expanded': isPreview }\"\n        (click)=\"onToggleFilterView()\"\n      >\n        <strong>{{ \"Filter options\" | rpxTranslate }}</strong\n        ><span class=\"govuk-accordion__icon\"></span>\n      </p>\n    </div>\n\n    <ng-container *ngIf=\"filter$ | async as filters\">\n      <div class=\"hmcts-filter__selected-heading\" *ngIf=\"filters.length\">\n        <div class=\"hmcts-filter__heading-action\">\n          <p>\n            <a\n              (click)=\"onClearFilters()\"\n              class=\"govuk-link govuk-link--no-visited-state\"\n              [routerLink]=\"[]\"\n              >{{ \"Clear filters\" | rpxTranslate }}</a\n            >\n          </p>\n        </div>\n      </div>\n\n      <h4\n        class=\"govuk-heading-s govuk-!-margin-bottom-0\"\n        *ngIf=\"filters.length\"\n      >\n        {{ \"Tag filters\" | rpxTranslate }}\n      </h4>\n\n      <ul class=\"hmcts-filter-tags\" *ngIf=\"filters.length\">\n        <li *ngFor=\"let tagName of filters\">\n          <a\n            class=\"hmcts-filter__tag\"\n            [routerLink]=\"[]\"\n            (click)=\"onRemoveFilter(tagName)\"\n          >\n            <span class=\"govuk-visually-hidden\">{{\n              \"Remove this filter\" | rpxTranslate\n            }}</span\n            >{{ tagName | unsnake }}</a\n          >\n        </li>\n      </ul>\n    </ng-container>\n\n    <div class=\"hmcts-filter__options\" [ngClass]=\"{ isVisible: isPreview }\">\n      <div class=\"govuk-form-group\">\n        <label class=\"govuk-label govuk-label--s\" for=\"keywords\">\n          {{ \"Search Tags\" | rpxTranslate }}\n        </label>\n        <input\n          class=\"govuk-input\"\n          id=\"keywords\"\n          name=\"keywords\"\n          type=\"text\"\n          [ngModel]=\"searchValue\"\n          (ngModelChange)=\"searchValue = $event\"\n        />\n      </div>\n\n      <div class=\"govuk-form-group\">\n        <div [formGroup]=\"tagGroup\">\n          <fieldset class=\"govuk-fieldset\" formGroupName=\"tagFilters\">\n            <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--s\">\n              Tags\n            </legend>\n            <div class=\"govuk-checkboxes--scroll\">\n              <div class=\"govuk-checkboxes govuk-checkboxes--small\">\n                <div\n                  class=\"govuk-checkboxes__item\"\n                  *ngFor=\"\n                    let item of allTags$ | async | filter : searchValue : 'key'\n                  \"\n                >\n                  <input\n                    [formControlName]=\"item.key\"\n                    [id]=\"item.key\"\n                    class=\"govuk-checkboxes__input\"\n                    [value]=\"false\"\n                    [attr.aria-describedby]=\"item.key\"\n                    type=\"checkbox\"\n                  />\n                  <label\n                    class=\"govuk-label govuk-checkboxes__label\"\n                    [for]=\"item.key\"\n                  >\n                    {{ item.key | unsnake }} ({{ item.length }})\n                  </label>\n                </div>\n              </div>\n            </div>\n          </fieldset>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { Annotation } from '../../annotation-set/annotation-view/annotation.model';\nimport { select, Store } from '@ngrx/store';\nimport * as fromStore from '../../../store/reducers/reducers';\nimport * as fromTagSelectors from '../../../store/selectors/tag.selectors';\nimport * as fromAnnoSelector from '../../../store/selectors/annotation.selectors';\nimport { combineLatest, Subscription } from 'rxjs';\nimport { ToolbarEventService } from '../../../toolbar/toolbar-event.service';\nimport { CommentService } from '../comment/comment.service';\nimport { IcpEventService } from '../../../toolbar/icp-event.service';\n\n@Component({\n    selector: 'mv-comment-set-header',\n    templateUrl: './comment-set-header.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class CommentSetHeaderComponent implements OnInit, OnDestroy {\n\n  @Input() public showCommentSummary: boolean;\n  @Input() public isHidden: boolean;\n  @Output() public readonly showCommentSummaryDialog = new EventEmitter();\n\n  marginToComment: boolean;\n  tabs: {isFiltered?: boolean; label: string}[] = [];\n  tabSelected = '';\n  isFiltered: boolean;\n  navigationList: Annotation[];\n  $subscriptions: Subscription;\n\n  constructor(private store: Store<fromStore.State>,\n              private commentService: CommentService,\n              public toolbarEvents: ToolbarEventService,\n              public readonly icpEventService: IcpEventService) {}\n\n  ngOnInit(): void {\n    const tagFilter$ = this.store.pipe(select(fromTagSelectors.getTagFilters));\n    const filteredAnnotation$ = this.store.pipe(select(fromAnnoSelector.getFilteredAnnotations));\n\n    this.$subscriptions = combineLatest([tagFilter$, filteredAnnotation$]).subscribe(([formData, filteredAnno]) => {\n      this.navigationList = filteredAnno;\n      this.tabs = this.navigationList.length > 0 ?\n        [{label: 'comments'}, {label: 'filter'}, {label: 'search'}] : [{label: 'comments'}];\n      this.isFiltered = !formData.length;\n      this.tabs = [...this.tabs].map((tab) => {\n        return !this.isFiltered && tab.label === 'filter' ? {...tab, isFiltered: true} : {...tab, isFiltered: false};\n      });\n    });\n  }\n\n  public toggleCommentsSummary(): void {\n    this.showCommentSummaryDialog.emit();\n  }\n\n  selectTab(tab: string) {\n    this.tabSelected = tab !== this.tabSelected ? tab : undefined;\n    if (this.tabSelected) {\n      this.marginToComment = true;\n      this.commentService.createMarginToCommentEvent(this.marginToComment);\n    } else {\n      this.marginToComment = false;\n      this.commentService.createMarginToCommentEvent(this.marginToComment);\n    }\n  }\n\n  public toggleCommentsPanel() {\n    this.toolbarEvents.toggleCommentsPanel(!this.toolbarEvents.commentsPanelVisible.getValue());\n  }\n\n  ngOnDestroy(): void {\n    this.$subscriptions.unsubscribe();\n  }\n}\n","<div class=\"govuk-tabs commentSummaryHeader\" [ngClass]=\"{'icp-mode': icpEventService.enabled | async}\" data-module=\"govuk-tabs\">\n  <ul class=\"govuk-tabs__list\">\n    <li *ngFor=\"let tab of tabs; let i = index\" class=\"govuk-tabs__list-item govuk-tabs__list-item\"\n        [ngClass]=\"{'govuk-tabs__list-item--selected': tabSelected === tab.label}\">\n      <a id=\"commentSubPane{{ i }}\" (click)=\"selectTab(tab.label)\" [routerLink]=\"[]\" [ngClass]=\"{'govuk-tabs__list-item--filtered': tab.isFiltered}\"\n         class=\"govuk-tabs__tab\" [hidden]=\"isHidden\">\n        {{ tab.label | titlecase }}\n      </a>\n    </li>\n    <li>\n      <button id=\"mvCloseBtn\" #mvCloseBtn class=\"mv-button commentSummaryHeader-button--close\"\n        title=\"Close Comments\" [attr.aria-label]=\"'Close Comments' | rpxTranslate\"\n        (click)=\"toggleCommentsPanel()\" [hidden]=\"isHidden\">\n      </button>\n    </li>\n  </ul>\n  <div class=\"govuk-tabs__panel\" [hidden]=\"!tabSelected\">\n    <ng-container *ngIf=\"tabSelected === 'comments'\">\n      <div style=\"width: 100%\">\n        <div class=\"hmcts-banner\" *ngIf=\"navigationList?.length === 0\">\n          <svg alt=\"\" class=\"hmcts-banner__icon\" fill=\"currentColor\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n            <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\nC13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\" /></svg>\n          <div class=\"hmcts-banner__message\">\n            <span class=\"hmcts-banner__assistive\">information</span>\n            Select text to add a comment or highlight.\n          </div>\n        </div>\n        <button type=\"button\" class=\"govuk-button\"\n                id=\"commentSummary\" tabindex=\"0\"\n                data-l10n-id=\"commentSummary\"\n                title=\"Open collate summary\"\n                [attr.aria-label]=\"'Open collate summary' | rpxTranslate\"\n                (click)=\"toggleCommentsSummary()\">Collate comments</button>\n      </div>\n      <ng-container *ngIf=\"navigationList?.length > 0\">\n        <mv-comments-navigate\n          [annotationList]=\"navigationList\">\n        </mv-comments-navigate>\n      </ng-container>\n      <p class=\"aui-comment__private-text\">\n        <span class=\"aui-comment__private\">private</span>\n        All comments can only be seen by you\n      </p>\n    </ng-container>\n    <div [hidden]=\"tabSelected !== 'filter'\">\n      <div class=\"govuk-tabs__panel--container\">\n        <mv-comment-filter></mv-comment-filter>\n        <mv-comments-navigate\n          *ngIf=\"navigationList?.length > 0\"\n          [annotationList]=\"navigationList\">\n        </mv-comments-navigate>\n      </div>\n    </div>\n\n    <div [hidden]=\"tabSelected !== 'search'\">\n      <mv-comment-search [annotations]=\"navigationList\"></mv-comment-search>\n    </div>\n  </div>\n</div>\n","import { createSelector } from '@ngrx/store';\n\nimport * as fromFeature from '../reducers/reducers';\nimport * as fromBookmarks from '../reducers/bookmarks.reducer';\nimport { generateBookmarkNodes } from '../bookmarks-store-utils';\nimport * as fromDocument from './document.selectors';\n\nexport const getBookmarkState = createSelector(\n  fromFeature.getMVState,\n  (state: fromFeature.State) => state.bookmarks\n);\n\nexport const getBookmarkPages = createSelector(\n  getBookmarkState,\n  fromBookmarks.getBookmarkPageEnt\n);\n\nexport const getBookmarkEntities = createSelector(\n  getBookmarkState,\n  fromBookmarks.getBookmarkEnts\n);\n\nexport const getBookmarkNodes = createSelector(\n  getBookmarkEntities,\n  (entities) => generateBookmarkNodes(entities)\n);\n\nexport const getEditableBookmark = createSelector(\n  getBookmarkState,\n  fromBookmarks.getEditBookmark\n);\n\nexport const getScrollTop = createSelector(\n  getBookmarkState,\n  fromBookmarks.getScrollTop\n);\n\nexport const getBookmarkInfo = createSelector(\n  getBookmarkNodes,\n  fromDocument.getDocumentId,\n  fromDocument.getPdfPosition,\n  fromDocument.getPages,\n  (bookmarkNodes, docId, pdfPosition, pages) => {\n    return {\n      pageNumber: pdfPosition.pageNumber - 1,\n      xCoordinate: pdfPosition.left,\n      yCoordinate: ((pages[pdfPosition.pageNumber].styles.height)\n        - (pdfPosition.top * (pages[pdfPosition.pageNumber].viewportScale)))\n        / parseFloat(pages[pdfPosition.pageNumber].scaleRotation.scale),\n      previous: bookmarkNodes.length > 0 ? bookmarkNodes.sort((a, b) => a.index - b.index)[bookmarkNodes.length - 1].id : undefined,\n      documentId: docId\n    };\n  }\n);\n\nexport const getBookmarksPerPage = createSelector(\n  fromDocument.getPages,\n  getBookmarkPages,\n  (pages, pageEnt) => {\n    if (pages && pageEnt) {\n      const arr = [];\n      Object.keys(pages).forEach(key => {\n        const pageIdx = Number(key) - 1; // -1 as the thisPages array is 0 indexed\n        const thisPage = pageEnt[pageIdx];\n        arr.push({\n          bookmark: thisPage ? thisPage : [],\n          styles: pages[key].styles\n        });\n      });\n      return arr;\n    }\n  }\n);\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { Rectangle } from '../annotation-view/rectangle/rectangle.model';\n\n@Component({\n    selector: 'mv-ctx-toolbar',\n    templateUrl: './ctx-toolbar.component.html',\n    standalone: false\n})\nexport class CtxToolbarComponent implements OnChanges {\n\n  readonly defaultHeight;\n  readonly defaultWidth;\n\n  @ViewChild('toolbarContainer', { static: false }) toolbarContainer: ElementRef<HTMLDivElement>;\n\n  @Input() zoom;\n  @Input() rotate;\n  @Input() pageHeight: number;\n  @Input() pageWidth: number;\n\n  @Input() canHighlight: boolean;\n  @Input() canBookmark: boolean;\n  @Input() canComment: boolean;\n  @Input() canDelete: boolean;\n\n  @Output() createHighlightEvent = new EventEmitter();\n  @Output() deleteHighlightEvent = new EventEmitter();\n  @Output() addOrEditCommentEvent = new EventEmitter();\n  @Output() createBookmarkEvent = new EventEmitter<Rectangle>();\n  @Output() cancelEvent = new EventEmitter();\n\n  rectangle: Rectangle;\n  _rectangles: Rectangle[];\n  top: number;\n  left: number;\n\n  constructor() {\n    this.defaultHeight = 70;\n    this.defaultWidth = 300;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.setRectangle();\n    this.top = this.popupTop();\n    this.left = this.popupLeft();\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    if (this.rectangle) {\n      event.stopPropagation();\n      event.preventDefault();\n      this.rectangle = undefined;\n      this.cancelEvent.emit();\n    }\n  }\n\n  @Input() set rectangles(rectangles: Rectangle[]) {\n    if (rectangles) {\n      this._rectangles = rectangles;\n      this.setRectangle();\n    }\n  }\n\n  get rectangles() {\n    return this._rectangles;\n  }\n\n  createHighlight() {\n    this.createHighlightEvent.emit();\n    this.rectangle = undefined;\n  }\n\n  deleteHighlight() {\n    this.deleteHighlightEvent.emit();\n  }\n\n  addOrEditComment() {\n    this.addOrEditCommentEvent.emit();\n    setTimeout(() => {\n      // This hack to wait until the element is rendered seems to be unreliable,\n      if (!location.hash) {\n        document.getElementById('viewerContainer')?.scrollBy(0, 1);\n      }\n    }, 20);\n  }\n\n  createBookmark() {\n    this.createBookmarkEvent.emit(this.rectangle);\n    this.rectangle = undefined;\n  }\n\n  setRectangle() {\n    const rectangle = this.rectangles\n      .reduce((prev, current) => prev.y < current.y ? prev : current);\n    this.rectangle =  { ...rectangle };\n    switch (this.rotate) {\n      case 90:\n        this.rectangle.width = rectangle.height;\n        this.rectangle.height = rectangle.width;\n        this.rectangle.x = (this.pageWidth / this.zoom) - rectangle.y - rectangle.height;\n        this.rectangle.y = rectangle.x;\n        break;\n      case 180:\n        this.rectangle.x = (this.pageWidth / this.zoom) - rectangle.x - rectangle.width;\n        this.rectangle.y = (this.pageHeight / this.zoom) - rectangle.y - rectangle.height;\n        break;\n      case 270:\n        this.rectangle.width = rectangle.height;\n        this.rectangle.height = rectangle.width;\n        this.rectangle.x = rectangle.y;\n        this.rectangle.y = (this.pageHeight / this.zoom) - rectangle.x - rectangle.width;\n        break;\n    }\n  }\n\n  popupTop() {\n    const popupTop = this.rectangle.y * this.zoom - this.defaultHeight;\n    return popupTop <= 0 ? this.defaultHeight : popupTop;\n  }\n\n  popupLeft() {\n    const popupLeft = (this.rectangle.x + (this.rectangle.width / 2)) * this.zoom - (this.defaultWidth / 2);\n    if (popupLeft <= 0) {\n      return 0;\n    } else if (popupLeft >= this.pageWidth - this.defaultWidth) {\n      return this.pageWidth - this.defaultWidth;\n    } else {\n      return popupLeft;\n    }\n  }\n\n  focusToolbar(): void {\n    if (this.toolbarContainer?.nativeElement) {\n      const firstButton = this.toolbarContainer.nativeElement.querySelector('button');\n      \n      if (firstButton) {\n        setTimeout(() => firstButton.focus(), 0);\n        return;\n      } \n    }\n  }\n}\n","<div #toolbarContainer class=\"toolbar\" *ngIf=\"rectangle\"\n     [style.top.px]=\"top\"\n     [style.left.px]=\"left\">\n  <button *ngIf=\"canHighlight\"\n          type=\"button\"\n          title=\"Highlight\"\n          [attr.aria-label]=\"'Highlight' | rpxTranslate\"\n          class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn leftButton aui__toolbar-button-highlight\"\n          (mousedown)=\"createHighlight()\"\n          (keydown.enter)=\"createHighlight()\">\n    <span aria-hidden=\"true\">Highlight</span>\n  </button>\n  <button *ngIf=\"canDelete\"\n          type=\"button\"\n          title=\"Delete\"\n          [attr.aria-label]=\"'Delete' | rpxTranslate\"\n          class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn leftButton\"\n          (mousedown)=\"deleteHighlight()\"\n          (keydown.enter)=\"deleteHighlight()\">\n    <span aria-hidden=\"true\">Remove</span>\n  </button>\n  <button *ngIf=\"canComment\"\n          type=\"button\"\n          title=\"Comment\"\n          [attr.aria-label]=\"'Comment' | rpxTranslate\"\n          class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn rightButton aui__toolbar-button-comment\"\n          (mousedown)=\"addOrEditComment()\"\n          (keydown.enter)=\"addOrEditComment()\">\n    <span aria-hidden=\"true\">Comment</span></button>\n  <button *ngIf=\"canBookmark\"\n          type=\"button\"\n          title=\"Bookmark\"\n          [attr.aria-label]=\"'Bookmark' | rpxTranslate\"\n          class=\"aui__toolbar-button aui__toolbar-button--comments contextual-btn rightButton aui__toolbar-button-bookmark\"\n          id=\"bookmarkButton\"\n          (mousedown)=\"createBookmark()\"\n          (keydown.enter)=\"createBookmark()\">\n    <span aria-hidden=\"true\">Bookmark</span></button>\n  <div class=\"arrow-down\">\n    <div class=\"inner-triangle\"></div>\n  </div>\n</div>\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core';\n\nexport interface KeyboardBoxDrawEvent {\n  startX: number;\n  startY: number;\n  width: number;\n  height: number;\n}\n\nexport interface CursorPosition {\n  x: number;\n  y: number;\n  visible: boolean;\n}\n\n@Directive({\n  selector: '[mvKeyboardBoxDraw]',\n  standalone: false\n})\nexport class KeyboardBoxDrawDirective implements OnDestroy {\n\n  @Input() set enabled(value: boolean) {\n    const wasEnabled = this._enabled;\n    this._enabled = value;\n\n    if (!value && wasEnabled) {\n      this.reset();\n      return;\n    }\n\n    if (value && !wasEnabled && KeyboardBoxDrawDirective.lastInteractionWasKeyboard && !this.showCursor) {\n      if (typeof document !== 'undefined' && this.elementRef.nativeElement === document.activeElement) {\n        this.initializeCursorForKeyboard();\n      }\n    }\n  }\n  get enabled(): boolean {\n    return this._enabled;\n  }\n  private _enabled = false;\n\n  @Input() minBoxSize = 10;\n  @Input() incrementSmall = 1;\n  @Input() incrementMedium = 5;\n  @Input() incrementLarge = 10; \n\n  @Output() drawingStarted = new EventEmitter<KeyboardBoxDrawEvent>();\n  @Output() drawingUpdated = new EventEmitter<KeyboardBoxDrawEvent>();\n  @Output() drawingConfirmed = new EventEmitter<KeyboardBoxDrawEvent>();\n  @Output() drawingCancelled = new EventEmitter<void>();\n  @Output() cursorPositionChanged = new EventEmitter<CursorPosition>();\n\n  private isDrawing = false;\n  private cursorX: number;\n  private cursorY: number;\n  private showCursor = false;\n  private drawStartX: number;\n  private drawStartY: number;\n  private currentWidth: number;\n  private currentHeight: number;\n  private static lastInteractionWasKeyboard = false;\n\n  constructor(private elementRef: ElementRef<HTMLElement>) {\n    if (typeof window !== 'undefined') {\n      window.addEventListener('keydown', KeyboardBoxDrawDirective.onGlobalKeyDown, { capture: true });\n      window.addEventListener('mousedown', KeyboardBoxDrawDirective.onGlobalMouseDown, { capture: true });\n    }\n  }\n\n  private static onGlobalKeyDown(): void {\n    KeyboardBoxDrawDirective.lastInteractionWasKeyboard = true;\n  }\n\n  private static onGlobalMouseDown(): void {\n    KeyboardBoxDrawDirective.lastInteractionWasKeyboard = false;\n  }\n\n  ngOnDestroy(): void {\n    this.cleanup();\n  }\n\n  private initializeCursorForKeyboard(): void {\n    if (this.enabled && !this.showCursor && !this.isDrawing) {\n      const rect = this.elementRef.nativeElement.getBoundingClientRect();\n      if (rect.width > 0 && rect.height > 0) {\n        this.cursorX = rect.width / 2;\n        this.cursorY = rect.height / 2;\n        this.showCursor = true;\n        this.emitCursorPosition();\n      }\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    if (!this.enabled) {\n      return;\n    }\n\n    if (event.key === 'Tab') {\n      if (this.isDrawing) {\n        this.cancelDrawing();\n      } else {\n        if (this.showCursor) {\n          this.hideCursor();\n        }\n        this.drawingCancelled.emit();\n      }\n      return;\n    }\n\n    if (['Shift', 'Alt', 'Control'].includes(event.key)) {\n      return;\n    }\n\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!this.isDrawing) {\n        this.startDrawing();\n      } else {\n        this.confirmDrawing();\n      }\n      return;\n    }\n\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.isDrawing) {\n        this.cancelDrawing();\n      } else {\n        if (this.showCursor) {\n          this.hideCursor();\n        }\n        this.drawingCancelled.emit();\n      }\n      return;\n    }\n\n    if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.isDrawing) {\n        this.resizeBox(event);\n      } else {\n        this.moveCursor(event);\n      }\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  @HostListener('blur')\n  onBlur(): void {\n    if (this.showCursor && !this.isDrawing) {\n      this.hideCursor();\n    }\n  }\n\n  @HostListener('focus')\n  onFocus(): void {\n    if (!this.enabled || !KeyboardBoxDrawDirective.lastInteractionWasKeyboard) {\n      return;\n    }\n\n    this.initializeCursorForKeyboard();\n  }\n\n  private moveCursor(event: KeyboardEvent): void {\n    const increment = event.shiftKey ? this.incrementLarge : this.incrementMedium;\n\n    if (!this.showCursor) {\n      const rect = this.elementRef.nativeElement.getBoundingClientRect();\n      this.cursorX = rect.width / 2;\n      this.cursorY = rect.height / 2;\n      this.showCursor = true;\n\n      this.emitCursorPosition();\n      return;\n    }\n\n    const rect = this.elementRef.nativeElement.getBoundingClientRect();\n\n    switch (event.key) {\n      case 'ArrowUp':\n        this.cursorY = Math.max(0, this.cursorY - increment);\n        break;\n      case 'ArrowDown':\n        this.cursorY = Math.min(rect.height, this.cursorY + increment);\n        break;\n      case 'ArrowLeft':\n        this.cursorX = Math.max(0, this.cursorX - increment);\n        break;\n      case 'ArrowRight':\n        this.cursorX = Math.min(rect.width, this.cursorX + increment);\n        break;\n    }\n\n    this.emitCursorPosition();\n  }\n\n  private startDrawing(): void {\n    let startX: number;\n    let startY: number;\n\n    if (this.showCursor) {\n      startX = this.cursorX;\n      startY = this.cursorY;\n      this.showCursor = false;\n      this.emitCursorPosition();\n    } else {\n      // default to center\n      const rect = this.elementRef.nativeElement.getBoundingClientRect();\n      startX = rect.width / 2;\n      startY = rect.height / 2;\n    }\n\n    this.isDrawing = true;\n    this.drawStartX = startX;\n    this.drawStartY = startY;\n    this.currentWidth = this.minBoxSize;\n    this.currentHeight = this.minBoxSize;\n\n    this.emitDrawingStarted();\n  }\n\n  private resizeBox(event: KeyboardEvent): void {\n    const increment = event.shiftKey ? this.incrementLarge : this.incrementSmall;\n    const rect = this.elementRef.nativeElement.getBoundingClientRect();\n\n    switch (event.key) {\n      case 'ArrowRight':\n        const maxWidth = rect.width - this.drawStartX;\n        this.currentWidth = Math.min(maxWidth, this.currentWidth + increment);\n        break;\n      case 'ArrowLeft':\n        this.currentWidth = Math.max(this.minBoxSize, this.currentWidth - increment);\n        break;\n      case 'ArrowDown':\n        const maxHeight = rect.height - this.drawStartY;\n        this.currentHeight = Math.min(maxHeight, this.currentHeight + increment);\n        break;\n      case 'ArrowUp':\n        this.currentHeight = Math.max(this.minBoxSize, this.currentHeight - increment);\n        break;\n    }\n\n    this.emitDrawingUpdated();\n  }\n\n  private confirmDrawing(): void {\n    this.emitDrawingConfirmed();\n    this.cleanup();\n  }\n\n  private cancelDrawing(): void {\n    this.drawingCancelled.emit();\n    this.cleanup();\n  }\n\n  private hideCursor(): void {\n    this.showCursor = false;\n    this.emitCursorPosition();\n  }\n\n  private cleanup(): void {\n    this.isDrawing = false;\n    this.showCursor = false;\n    this.cursorX = undefined;\n    this.cursorY = undefined;\n    this.drawStartX = undefined;\n    this.drawStartY = undefined;\n    this.currentWidth = undefined;\n    this.currentHeight = undefined;\n  }\n\n  private emitCursorPosition(): void {\n    this.cursorPositionChanged.emit({\n      x: this.cursorX,\n      y: this.cursorY,\n      visible: this.showCursor\n    });\n  }\n\n  private emitDrawingStarted(): void {\n    this.drawingStarted.emit({\n      startX: this.drawStartX,\n      startY: this.drawStartY,\n      width: this.currentWidth,\n      height: this.currentHeight\n    });\n  }\n\n  private emitDrawingUpdated(): void {\n    this.drawingUpdated.emit({\n      startX: this.drawStartX,\n      startY: this.drawStartY,\n      width: this.currentWidth,\n      height: this.currentHeight\n    });\n  }\n\n  private emitDrawingConfirmed(): void {\n    this.drawingConfirmed.emit({\n      startX: this.drawStartX,\n      startY: this.drawStartY,\n      width: this.currentWidth,\n      height: this.currentHeight\n    });\n  }\n\n  public reset(): void {\n    this.cleanup();\n    this.emitCursorPosition();\n  }\n}","import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { Subscription } from 'rxjs';\nimport { Rectangle } from '../../annotation-view/rectangle/rectangle.model';\nimport { HighlightCreateService } from '../highlight-create/highlight-create.service';\nimport { ToolbarEventService } from '../../../../toolbar/toolbar-event.service';\nimport { HtmlTemplatesHelper } from '../../../../shared/util/helpers/html-templates.helper';\nimport { KeyboardBoxDrawEvent, CursorPosition } from './keyboard-box-draw.directive';\n\n@Component({\n    selector: 'mv-box-highlight-create',\n    templateUrl: './box-highlight-create.component.html',\n    standalone: false\n})\nexport class BoxHighlightCreateComponent implements OnInit, OnDestroy {\n\n  @Input() page: number;\n  @Input() pageHeight: number;\n  @Input() pageWidth: number;\n  @Input() rotate: number;\n  @Input() zoom: number;\n  @Input() container: { top: number, left: number };\n\n  @Output() saveSelection = new EventEmitter<{ rectangles: Rectangle[], page: number, annotationId?: string }>();\n\n  @ViewChild('boxHighlight', { static: false }) highlight: ElementRef;\n  @ViewChild('drawingContainer', { static: false }) drawingContainer: ElementRef;\n\n  drawStartX = -1;\n  drawStartY = -1;\n\n  top: number;\n  left: number;\n  height: number;\n  width: number;\n  display: string;\n  position: string;\n  backgroundColor = 'none';\n\n  drawMode: boolean;\n  defaultHeight: string;\n  defaultWidth: string;\n  wholePage: boolean;\n  isCurrentPage = false;\n\n  keyboardDrawingMode = false;\n  cursorX: number;\n  cursorY: number;\n  showCursor = false;\n\n  private subscriptions: Subscription[] = [];\n\n  constructor(private readonly toolbarEvents: ToolbarEventService,\n    private readonly highlightService: HighlightCreateService) { }\n\n  ngOnInit(): void {\n    this.subscriptions = [\n      this.toolbarEvents.drawModeSubject.subscribe(drawMode => {\n        this.defaultHeight = drawMode ? '100%' : '0px';\n        this.defaultWidth = drawMode ? '100%' : '0px';\n        this.drawMode = drawMode;\n        if (drawMode && this.isCurrentPage) {\n          this.focusDrawingContainer();\n        }\n      }),\n      this.toolbarEvents.redactWholePage.subscribe(() => {\n        this.wholePage = true;\n      }),\n      this.toolbarEvents.setCurrentPageInputValueSubject.subscribe(pageNumber => {\n        this.isCurrentPage = this.page === pageNumber;\n        if (this.drawMode && this.isCurrentPage) {\n          this.focusDrawingContainer();\n        }\n      })\n    ];\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach(subscription => {\n      subscription.unsubscribe();\n    });\n  }\n\n  private isElementInViewport(el: HTMLElement): boolean {\n    const rect = el.getBoundingClientRect();\n    const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n    const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n\n    const verticallyVisible = rect.bottom > 0 && rect.top < windowHeight;\n    const horizontallyVisible = rect.right > 0 && rect.left < windowWidth;\n\n    return verticallyVisible && horizontallyVisible;\n  }\n\n  private focusDrawingContainer(): void {\n    setTimeout(() => {\n      if (this.drawingContainer?.nativeElement && this.isElementInViewport(this.drawingContainer.nativeElement)) {\n        try {\n          this.drawingContainer.nativeElement.focus({ preventScroll: true });\n        } catch {\n          this.drawingContainer.nativeElement.focus();\n        }\n      }\n    }, 100);\n  }\n\n  initHighlight(event: MouseEvent) {\n    if (this.wholePage) {\n      this.highlightPage();\n      return;\n    }\n\n    const rect = HtmlTemplatesHelper.getAdjustedBoundingRect((event.target as HTMLElement)),\n    offsetX = event.clientX - rect.left,\n    offsetY = event.clientY - rect.top;\n\n    this.position = 'absolute';\n    this.backgroundColor = 'yellow';\n    this.drawStartX = offsetX;\n    this.drawStartY = offsetY;\n\n    this.display = 'block';\n    this.height = 50;\n    this.width = 50;\n    this.top = this.drawStartY;\n    this.left = this.drawStartX;\n\n    this.adjustForRotation();\n  }\n\n  updateHighlight(event: MouseEvent) {\n    const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target as HTMLElement, false),\n      offsetX = event.clientX - rect.left,\n      offsetY = event.clientY - rect.top;\n  \n    if (this.drawStartX > 0 && this.drawStartY > 0) {\n      this.height = Math.abs(offsetY - this.drawStartY);\n      this.width = Math.abs(offsetX - this.drawStartX);\n      this.top = Math.min(offsetY, this.drawStartY);\n      this.left = Math.min(offsetX, this.drawStartX);\n    }\n  }\n\n  createHighlight() {\n    if (this.height / this.zoom > 5 || this.width / this.zoom > 5) {\n      let rectangle = this.highlightService\n        .applyRotation(this.pageHeight, this.pageWidth, this.height, this.width, this.top, this.left, this.rotate, this.zoom);\n      const annotationId = uuid();\n      rectangle = { id: annotationId, ...rectangle } as any;\n      this.saveSelection.emit({ rectangles: [rectangle], page: this.page, annotationId });\n      this.resetHighlight();\n    }\n  }\n\n  onCursorPositionChanged(position: CursorPosition): void {\n    this.cursorX = position.x;\n    this.cursorY = position.y;\n    this.showCursor = position.visible;\n  }\n\n  onDrawingStarted(event: KeyboardBoxDrawEvent): void {\n    this.keyboardDrawingMode = true;\n    this.position = 'absolute';\n    this.backgroundColor = 'yellow';\n    this.display = 'block';\n\n    this.drawStartX = event.startX;\n    this.drawStartY = event.startY;\n    this.width = event.width;\n    this.height = event.height;\n    this.top = this.drawStartY;\n    this.left = this.drawStartX;\n\n    this.adjustForRotation();\n  }\n\n  onDrawingUpdated(event: KeyboardBoxDrawEvent): void {\n    this.width = event.width;\n    this.height = event.height;\n  }\n\n  onDrawingConfirmed(event: KeyboardBoxDrawEvent): void {\n    this.keyboardDrawingMode = false;\n    this.createHighlight();\n  }\n\n  onDrawingCancelled(): void {\n    this.keyboardDrawingMode = false;\n    this.resetHighlight();\n    this.toolbarEvents.drawModeSubject.next(false);\n  }\n\n  private adjustForRotation(): void {\n    switch (this.rotate) {\n      case 90:\n        this.top = this.drawStartY - this.height;\n        break;\n      case 180:\n        this.top = this.drawStartY - this.height;\n        this.left = this.drawStartX - this.width;\n        break;\n      case 270:\n        this.left = this.drawStartX - this.width;\n        break;\n    }\n  }\n\n  private resetHighlight() {\n    this.drawStartX = -1;\n    this.drawStartY = -1;\n    this.display = 'none';\n    this.width = 0;\n    this.height = 0;\n    this.backgroundColor = 'none';\n    this.position = 'initial';\n    this.wholePage = false;\n  }\n\n  private highlightPage() {\n    this.height = this.pageHeight;\n    this.width = this.pageWidth;\n    this.top = 0;\n    this.left = 0;\n    this.createHighlight();\n  }\n}\n","<div #drawingContainer\n  [style.height]=\"defaultHeight\"\n  [style.width]=\"defaultWidth\"\n  [tabindex]=\"drawMode && isCurrentPage ? 0 : -1\"\n  mvKeyboardBoxDraw\n  [enabled]=\"drawMode && isCurrentPage\"\n  (cursorPositionChanged)=\"onCursorPositionChanged($event)\"\n  (drawingStarted)=\"onDrawingStarted($event)\"\n  (drawingUpdated)=\"onDrawingUpdated($event)\"\n  (drawingConfirmed)=\"onDrawingConfirmed($event)\"\n  (drawingCancelled)=\"onDrawingCancelled()\"\n  (mousedown)=\"initHighlight($event)\"\n  (mousemove)=\"updateHighlight($event)\"\n  (mouseup)=\"createHighlight()\">\n\n  <div *ngIf=\"showCursor\"\n    class=\"drawing-cursor\"\n    [style.position]=\"'absolute'\"\n    [style.top]=\"cursorY + 'px'\"\n    [style.left]=\"cursorX + 'px'\">\n  </div>\n\n  <div #boxHighlight\n    class=\"box-highlight\"\n    [style.display]=\"display\"\n    [style.position]=\"position\"\n    [style.background-color]=\"backgroundColor\"\n    [style.height]=\"height ? height + 'px' : '100%'\"\n    [style.width]=\"width ? width + 'px' : '100%'\"\n    [style.top]=\"top + 'px'\"\n    [style.left]=\"left + 'px'\">\n  </div>\n</div>\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nexport interface BoxMovementBounds {\n  containerWidth: number;\n  containerHeight: number;\n}\n\n@Directive({\n  selector: '[mvKeyboardBoxMove]',\n  standalone: false\n})\nexport class KeyboardBoxMoveDirective implements OnDestroy {\n\n  @Input() enabled = true;\n  @Input() incrementSmall = 1;\n  @Input() incrementLarge = 10;\n  @Input() movementBounds: BoxMovementBounds;\n\n  @Output() keyboardMovingChange = new EventEmitter<boolean>();\n  @Output() boxDelete = new EventEmitter<void>();\n\n  private moveSubject = new Subject<void>();\n  private moveSubscription: Subscription;\n  private isMoving = false;\n\n  constructor(private elementRef: ElementRef<HTMLElement>) {\n    this.moveSubscription = this.moveSubject\n      .pipe(debounceTime(500))\n      .subscribe(() => {\n        this.setMoving(false);\n        this.emitStoppedEvent();\n      });\n  }\n\n  ngOnDestroy(): void {\n    if (this.moveSubscription) {\n      this.moveSubscription.unsubscribe();\n    }\n    this.moveSubject.complete();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    if (event.key === 'Delete' || event.key === 'Backspace') {\n      event.preventDefault();\n      event.stopPropagation();\n      this.boxDelete.emit();\n      return;\n    }\n\n    if (!this.enabled) {\n      return;\n    }\n\n    if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.moveBox(event);\n    }\n  }\n\n  private moveBox(event: KeyboardEvent): void {\n    const element = this.elementRef.nativeElement;\n    const increment = event.shiftKey ? this.incrementLarge : this.incrementSmall;\n\n    if (!this.isMoving) {\n      this.setMoving(true);\n    }\n\n    const currentTop = parseFloat(element.style.top) || 0;\n    const currentLeft = parseFloat(element.style.left) || 0;\n    const currentWidth = element.offsetWidth;\n    const currentHeight = element.offsetHeight;\n\n    let newTop = currentTop;\n    let newLeft = currentLeft;\n\n    switch (event.key) {\n      case 'ArrowUp':\n        newTop = currentTop - increment;\n        break;\n      case 'ArrowDown':\n        newTop = currentTop + increment;\n        break;\n      case 'ArrowLeft':\n        newLeft = currentLeft - increment;\n        break;\n      case 'ArrowRight':\n        newLeft = currentLeft + increment;\n        break;\n    }\n\n    if (this.movementBounds) {\n      newTop = Math.max(0, Math.min(newTop, this.movementBounds.containerHeight - currentHeight));\n      newLeft = Math.max(0, Math.min(newLeft, this.movementBounds.containerWidth - currentWidth));\n    }\n\n    element.style.top = `${newTop}px`;\n    element.style.left = `${newLeft}px`;\n\n    this.moveSubject.next();\n  }\n\n  private setMoving(moving: boolean): void {\n    if (this.isMoving !== moving) {\n      this.isMoving = moving;\n      this.keyboardMovingChange.emit(moving);\n    }\n  }\n\n  private emitStoppedEvent(): void {\n    const element = this.elementRef.nativeElement;\n\n    const wasFocused = document.activeElement === element;\n\n    const stoppedEvent = new CustomEvent('stopped', {\n      detail: element,\n      bubbles: true\n    });\n    element.dispatchEvent(stoppedEvent);\n\n    if (wasFocused) {\n      setTimeout(() => {\n        element.focus();\n      }, 50);\n    }\n  }\n}","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { Rectangle } from './rectangle.model';\nimport { Subscription } from 'rxjs';\nimport { ToolbarEventService } from '../../../../toolbar/toolbar-event.service';\nimport { HighlightCreateService } from '../../annotation-create/highlight-create/highlight-create.service';\nimport { BoxMovementBounds } from './keyboard-box-move.directive';\n\n@Component({\n    selector: 'mv-anno-rectangle',\n    templateUrl: './rectangle.component.html',\n    standalone: false\n})\nexport class RectangleComponent implements OnChanges, AfterViewInit, OnDestroy {\n\n  @Input() color: String;\n  @Input() zoom: number;\n  @Input() rotate: number;\n  @Input() editable: boolean;\n  @Input() pageHeight: number;\n  @Input() pageWidth: number;\n  @Input() rectangleTabIndex: number = 0;\n\n  @Output() selectEvent = new EventEmitter<Rectangle>();\n  @Output() updateEvent = new EventEmitter<Rectangle>();\n  @Output() deleteEvent = new EventEmitter<Rectangle>();\n  @Output() keyboardMovingChange = new EventEmitter<boolean>();\n  @Output() tabToToolbar = new EventEmitter<KeyboardEvent>();\n\n  @ViewChild('rectElement', {static: false}) viewRect: ElementRef;\n\n  private subscriptions: Subscription[] = [];\n  _selected: boolean;\n  enableGrabNDrag = false;\n\n  height: number;\n  width: number;\n  top: number;\n  left: number;\n\n  movementBounds: BoxMovementBounds;\n\n  _annoRect: Rectangle;\n  @Input()\n  set annoRect(annoRect: Rectangle) {\n    this._annoRect = { ...annoRect };\n    this.height = +(annoRect.height * this.zoom).toFixed(2);\n    this.width = +(annoRect.width * this.zoom).toFixed(2);\n    this.left = +(annoRect.x * this.zoom).toFixed(2);\n    this.top = +(annoRect.y * this.zoom).toFixed(2);\n  }\n\n  get annoRect() {\n    return this._annoRect;\n  }\n\n\n  constructor(private readonly toolbarEvents: ToolbarEventService,\n              private readonly highlightService: HighlightCreateService) {}\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.rotate) {\n      this.adjustForRotation(this.rotate);\n    }\n    if (changes.pageHeight || changes.pageWidth) {\n      this.updateMovementBounds();\n    }\n  }\n\n  ngAfterViewInit() {\n    this.subscriptions.push(\n      this.toolbarEvents.grabNDrag.subscribe(grabNDrag => this.enableGrabNDrag = grabNDrag)\n    );\n    setTimeout(() => this.updateMovementBounds(), 0);\n\n    if (this._selected && this.viewRect) {\n      this.viewRect.nativeElement.focus();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.filter(subscription => !subscription.closed)\n      .forEach(subscription => subscription.unsubscribe());\n  }\n\n  @Input()\n  set selected(selected: boolean) {\n    this._selected = selected;\n    if (this._selected && this.viewRect) {\n      this.viewRect.nativeElement.focus()\n    }\n  }\n\n  get selected() {\n    return this._selected;\n  }\n\n  onClick() {\n    this.selectEvent.emit(this.annoRect);\n  }\n\n  onFocus() {\n    this.selectEvent.emit(this.annoRect);\n  }\n\n  onUpdate(viewRect: any) {\n    const { offsetHeight, offsetWidth, offsetTop, offsetLeft } = viewRect;\n    if (this.hasRectangleChanged(viewRect)) {\n      let rectangle = this.highlightService\n        .applyRotation(this.pageHeight, this.pageWidth, offsetHeight, offsetWidth, offsetTop, offsetLeft, this.rotate, this.zoom);\n      rectangle = { ...this.annoRect, ...rectangle };\n      this.updateEvent.emit({ ...rectangle });\n    }\n  }\n\n  adjustForRotation(rotation: number) {\n    const { top, left, height, width } = this;\n    switch (rotation) {\n      case 90:\n        this.width = height;\n        this.height = width;\n        this.left = this.pageWidth  - top - height;\n        this.top = left;\n        break;\n      case 180:\n        this.left = this.pageWidth - left - width;\n        this.top = this.pageHeight - top - height;\n        break;\n      case 270:\n        this.width = height;\n        this.height = width;\n        this.left = top;\n        this.top = this.pageHeight - left - width;\n        break;\n    }\n  }\n\n  hasRectangleChanged(viewRect): boolean {\n    return Math.round(this.left) !== viewRect.offsetLeft ||\n      Math.round(this.top) !== viewRect.offsetTop ||\n      Math.round(this.width) !== viewRect.offsetWidth ||\n      Math.round(this.height) !== viewRect.offsetHeight;\n  }\n\n  private updateMovementBounds(): void {\n    if (this.pageHeight && this.pageWidth) {\n      this.movementBounds = {\n        containerHeight: this.pageHeight,\n        containerWidth: this.pageWidth\n      };\n    }\n  }\n\n  onKeyboardMovingChange(isMoving: boolean): void {\n    this.keyboardMovingChange.emit(isMoving);\n  }\n\n  onDelete(): void {\n    if (this._selected) {\n      this.deleteEvent.emit(this.annoRect);\n    }\n  }\n\n  onTab(event: KeyboardEvent): void {\n    if (!this._selected) {\n      return;\n    }\n\n    this.tabToToolbar.emit(event);\n  }\n}\n","<div *ngIf=\"editable; else nonEditable\">\n  <div #rectElement\n       class=\"rectangle\"\n       draggable\n       resizable\n       mvKeyboardBoxMove\n       [tabindex]=\"rectangleTabIndex\"\n       [ngClass]=\"{ 'selected': selected, 'grabNDrag': enableGrabNDrag }\"\n       [style.backgroundColor]=\"'#' + color\"\n       [style.width]=\"width + 'px'\"\n       [style.height]=\"height + 'px'\"\n       [style.left]=\"left + 'px'\"\n       [style.top]=\"top + 'px'\"\n       [rotate]=\"0\"\n       [selected]=\"selected\"\n       [movementBounds]=\"movementBounds\"\n       (click)=\"onClick()\"\n       (focus)=\"onFocus()\"\n       (keydown.tab)=\"onTab($event)\"\n       (stopped)=\"onUpdate(rectElement)\"\n       (keyboardMovingChange)=\"onKeyboardMovingChange($event)\"\n       (boxDelete)=\"onDelete()\">\n  </div>\n</div>\n<ng-template #nonEditable>\n  <div #rectElement\n       class=\"rectangle\"\n       mvKeyboardBoxMove\n       [tabindex]=\"rectangleTabIndex\"\n       [ngClass]=\"{ 'selected': selected }\"\n       [style.backgroundColor]=\"'#' + color\"\n       [style.width]=\"width + 'px'\"\n       [style.height]=\"height+ 'px'\"\n       [style.left]=\"left + 'px'\"\n       [style.top]=\"top + 'px'\"\n       [enabled]=\"false\"\n       (click)=\"onClick()\"\n       (focus)=\"onFocus()\"\n       (keydown.tab)=\"onTab($event)\"\n       (boxDelete)=\"onDelete()\">\n  </div>\n</ng-template>\n","import { Component, EventEmitter, Input, Output, ViewChild, ElementRef, OnDestroy } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { Annotation } from './annotation.model';\nimport { Rectangle } from './rectangle/rectangle.model';\nimport moment from 'moment-timezone';\nimport { Store } from '@ngrx/store';\nimport * as fromStore from '../../../store/reducers/reducers';\nimport * as fromActions from '../../../store/actions/annotation.actions';\nimport { SelectionAnnotation } from '../../models/event-select.model';\nimport { ToolbarEventService } from '../../../toolbar/toolbar-event.service';\nimport { Comment } from '../../comment-set/comment/comment.model';\nimport { asyncScheduler, observeOn, Subject } from 'rxjs';\n\nconst FOCUSABLE_SELECTOR = [\n  'a[href]',\n  'button:not([disabled])',\n  'textarea:not([disabled])',\n  'input:not([disabled])',\n  'select:not([disabled])',\n  '[tabindex]:not([tabindex=\"-1\"])',\n  '[contenteditable=\"true\"]'\n].join(',');\n\n@Component({\n    selector: 'mv-annotation',\n    templateUrl: './annotation-view.component.html',\n    standalone: false\n})\nexport class AnnotationViewComponent implements OnDestroy {  // todo rename this to selection vew c\n\n  @Input() set annotation(value) {\n    this.anno = { ...value };\n  }\n  anno: Annotation;\n  selected: boolean;\n  isKeyboardMoving = false;\n  showToolbar = false;\n  private showToolbarSubject = new Subject<boolean>();\n\n  @Input() zoom: number;\n  @Input() rotate: number;\n  @Input() set selectedAnnoId(selectedId: { annotationId: string }) {\n    if (selectedId) {\n      const id = this.anno.id || this.anno.redactionId; // todo make it unique\n      this.selected = selectedId.annotationId ? (selectedId.annotationId === id) : false;\n      if (this.selected && !this.isKeyboardMoving) {\n        this.showToolbarSubject.next(true);\n      } else {\n        this.showToolbarSubject.next(false);\n      }\n    }\n  }\n  @Input() pageHeight: number;\n  @Input() pageWidth: number;\n  @Output() update = new EventEmitter<Annotation>();\n  @Output() delete = new EventEmitter<Annotation>();\n  @Output() annotationClick = new EventEmitter<SelectionAnnotation>();\n\n  @ViewChild('container', { static: false }) container: ElementRef;\n  @ViewChild('ctxToolbar', { static: false, read: ElementRef }) ctxToolbar: ElementRef<HTMLElement>;\n  private lastFocusedRectangle: HTMLElement | null = null;\n  private nextTabTarget: HTMLElement | null = null;\n\n  constructor(\n    private readonly toolbarEvents: ToolbarEventService,\n    private store: Store<fromStore.AnnotationSetState>\n  ) {\n    this.showToolbarSubject\n      .pipe(observeOn(asyncScheduler))\n      .subscribe(show => {\n        this.showToolbar = show;\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.showToolbarSubject.complete();\n  }\n\n  private setShowToolbar(show: boolean): void {\n    this.showToolbarSubject.next(show);\n  }\n\n  public onSelect() {\n    const annotationId = this.anno.id || this.anno.redactionId;\n    this.annotationClick.emit({ annotationId, editable: false, selected: true });\n\n    if (!this.isKeyboardMoving) {\n      this.setShowToolbar(true);\n    }\n  }\n\n  public onRectangleUpdate(rectangle: Rectangle) {\n    const annotation = { ...this.anno };\n    annotation.rectangles = annotation.rectangles.filter(r => r.id !== rectangle.id);\n    annotation.rectangles.push(rectangle);\n    this.update.emit(annotation);\n  }\n\n  public deleteHighlight() {\n    this.delete.emit(this.anno);\n  }\n\n  public addOrEditComment() {\n    if (this.anno.comments.length === 0) {\n      const comment: Comment = {\n        annotationId: this.anno.id,\n        content: '',\n        createdBy: this.anno.createdBy,\n        createdByDetails: undefined,\n        createdDate: moment.utc().tz('Europe/London').toISOString(),\n        id: uuid(),\n        lastModifiedBy: '',\n        lastModifiedByDetails: undefined,\n        lastModifiedDate: '',\n        tags: [],\n        page: null,\n        pages: {},\n        pageHeight: null,\n        selected: false,\n        editable: false\n      };\n      this.store.dispatch(new fromActions.AddOrEditComment(comment));\n\n    }\n    this.selected = true;\n    this.annotationClick.emit({ annotationId: this.anno.id, editable: true, selected: true });\n    this.toolbarEvents.toggleCommentsPanel(true);\n  }\n\n  public onKeyboardMovingChange(isMoving: boolean): void {\n    this.isKeyboardMoving = isMoving;\n\n    if (isMoving) {\n      this.showToolbar = false;\n      this.showToolbarSubject.next(false);\n    } else if (this.selected) {\n      this.setShowToolbar(true);\n    }\n  }\n\n  public onTabToToolbar(event: KeyboardEvent): void {\n    if (event.shiftKey) {\n      return;\n    }\n\n    const toolbarElement = this.ctxToolbar?.nativeElement;\n    if (!toolbarElement) {\n      return;\n    }\n\n    const firstButton = toolbarElement.querySelector('button') as HTMLElement | null;\n    if (!firstButton) {\n      return;\n    }\n\n    this.lastFocusedRectangle = event.target as HTMLElement;\n    this.nextTabTarget = this.getNextTabTarget(this.lastFocusedRectangle);\n\n    event.preventDefault();\n    event.stopPropagation();\n    firstButton.focus();\n  }\n\n  public onToolbarKeydown(event: KeyboardEvent): void {\n    const toolbarElement = this.ctxToolbar?.nativeElement;\n    if (!toolbarElement) {\n      return;\n    }\n\n    const buttons = Array.from(toolbarElement.querySelectorAll('button')) as HTMLElement[];\n    if (buttons.length === 0) {\n      return;\n    }\n\n    if (event.key === 'Tab' && event.shiftKey && this.lastFocusedRectangle && event.target === buttons[0]) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.lastFocusedRectangle.focus();\n      return;\n    }\n\n    if (event.key !== 'Tab' || event.shiftKey) {\n      return;\n    }\n\n    const lastButton = buttons[buttons.length - 1];\n    if (event.target !== lastButton) {\n      return;\n    }\n\n    if (!this.nextTabTarget) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    this.nextTabTarget.focus();\n    this.nextTabTarget = null;\n  }\n\n  private getNextTabTarget(current: HTMLElement | null): HTMLElement | null {\n    if (!current || typeof document === 'undefined') {\n      return null;\n    }\n\n    const ordered = Array.from(document.querySelectorAll(FOCUSABLE_SELECTOR))\n      .filter(el => !(el as HTMLElement).closest('mv-ctx-toolbar'))\n      .filter(el => (el as HTMLElement).getClientRects().length > 0)\n      .filter(el => (el as HTMLElement).tabIndex >= 0) as HTMLElement[];\n\n    ordered.sort((a, b) => {\n      const aPositive = a.tabIndex > 0;\n      const bPositive = b.tabIndex > 0;\n\n      if (aPositive && bPositive) {\n        return (a.tabIndex - b.tabIndex) || this.compareDocumentPosition(a, b);\n      }\n\n      if (aPositive) {\n        return -1;\n      }\n\n      if (bPositive) {\n        return 1;\n      }\n\n      return this.compareDocumentPosition(a, b);\n    });\n    const index = ordered.indexOf(current);\n    if (index === -1) {\n      return null;\n    }\n\n    return ordered[index + 1] ?? null;\n  }\n\n  private compareDocumentPosition(a: HTMLElement, b: HTMLElement): number {\n    if (a === b) {\n      return 0;\n    }\n\n    const position = a.compareDocumentPosition(b);\n    if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n      return -1;\n    }\n    if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n      return 1;\n    }\n\n    return 0;\n  }\n}\n","<div #container [tabindex]=\"-1\">\n  <mv-ctx-toolbar #ctxToolbar *ngIf=\"selected && showToolbar\"\n                  [canDelete]=\"true\" [canComment]=\"true\"\n                  [rectangles]=\"anno.rectangles\"\n                  [zoom]=\"zoom\"\n                  [rotate]=\"rotate\"\n                  [pageHeight]=\"pageHeight\"\n                  [pageWidth]=\"pageWidth\"\n                  (deleteHighlightEvent)=\"deleteHighlight()\"\n                  (addOrEditCommentEvent)=\"addOrEditComment()\"\n                  (keydown)=\"onToolbarKeydown($event)\">\n  </mv-ctx-toolbar>\n  <ng-container *ngFor=\"let rectangle of anno.rectangles; let i = index\">\n    <mv-anno-rectangle\n      (selectEvent)=\"onSelect()\"\n      (updateEvent)=\"onRectangleUpdate($event)\"\n      (keyboardMovingChange)=\"onKeyboardMovingChange($event)\"\n      (deleteEvent)=\"deleteHighlight()\"\n      (tabToToolbar)=\"onTabToToolbar($event)\"\n      [selected]=\"selected\"\n      [zoom]=\"zoom\"\n      [rotate]=\"rotate\"\n      [pageHeight]=\"pageHeight\"\n      [pageWidth]=\"pageWidth\"\n      [editable]=\"anno.rectangles.length <= 1\"\n      [annoRect]=\"rectangle\"\n      [rectangleTabIndex]=\"i + 1\"\n      [color]=\"anno.color\">\n    </mv-anno-rectangle>\n  </ng-container>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Annotation } from './annotation-view/annotation.model';\nimport { Observable } from 'rxjs';\nimport { SelectionAnnotation } from '../models/event-select.model';\nimport { CommentService } from '../comment-set/comment/comment.service';\nimport { select, Store } from '@ngrx/store';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromActions from '../../store/actions/annotation.actions';\nimport * as fromSelectors from '../../store/selectors/annotation.selectors';\n\n@Component({\n    selector: 'mv-annotation-set',\n    templateUrl: './annotation-set.component.html',\n    standalone: false\n})\nexport class AnnotationSetComponent implements OnInit {\n\n  @Input() page: number;\n  @Input() annotations: Annotation[] = [];\n  @Input() zoom: number;\n  @Input() rotate: number;\n  @Input() pageHeight: number;\n  @Input() pageWidth: number;\n\n  selectedAnnotation$: Observable<SelectionAnnotation>;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    private readonly commentService: CommentService\n  ) {}\n\n  ngOnInit(): void {\n    this.selectedAnnotation$ = this.store.pipe(select(fromSelectors.getSelectedAnnotation));\n  }\n\n  public onAnnotationUpdate(annotation: Annotation) {\n    this.store.dispatch(new fromActions.SaveAnnotation(annotation));\n  }\n\n  public onAnnotationDelete(annotation: Annotation) {\n    if (annotation.comments.length > 0) {\n      this.commentService.updateUnsavedCommentsStatus(annotation, false);\n    }\n    this.store.dispatch(new fromActions.DeleteAnnotation(annotation.id));\n  }\n\n  selectAnnotation(selectedAnnotation: SelectionAnnotation) {\n    this.store.dispatch(new fromActions.SelectedAnnotation(selectedAnnotation));\n  }\n}\n","<ng-container *ngFor=\"let annotation of annotations\">\n  <mv-annotation [annotation]=\"annotation\"\n                 [zoom]=\"zoom\"\n                 [rotate]=\"rotate\"\n                 [selectedAnnoId]=\"selectedAnnotation$ | async\"\n                 [pageHeight]=\"pageHeight\"\n                 [pageWidth]=\"pageWidth\"\n                 (update)=\"onAnnotationUpdate($event)\"\n                 (delete)=\"onAnnotationDelete($event)\"\n                 (annotationClick)=\"selectAnnotation($event)\">\n  </mv-annotation>\n</ng-container>\n","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { select, Store } from '@ngrx/store';\nimport { v4 as uuid } from 'uuid';\n\nimport * as fromStore from '../../../store/reducers/reducers';\nimport * as fromDocument from '../../../store/selectors/document.selectors';\nimport * as fromSelectors from '../../../store/selectors/annotation.selectors';\nimport { HighlightCreateService } from '../annotation-create/highlight-create/highlight-create.service';\nimport { Rectangle } from '../annotation-view/rectangle/rectangle.model';\nimport { CreateBookmark } from '../../../store/actions/bookmark.actions';\nimport * as fromBookmarks from '../../../store/selectors/bookmark.selectors';\nimport { ToolbarEventService } from '../../../toolbar/toolbar-event.service';\nimport { Highlight, ViewerEventService } from '../../../viewers/viewer-event.service';\nimport { CtxToolbarComponent } from '../ctx-toolbar/ctx-toolbar.component';\n\n@Component({\n    selector: 'mv-metadata-layer',\n    templateUrl: './metadata-layer.component.html',\n    standalone: false\n})\nexport class MetadataLayerComponent implements OnInit, OnDestroy {\n\n  @Input() zoom: number;\n  @Input() rotate: number;\n\n  @ViewChild(CtxToolbarComponent, { static: false }) ctxToolbar: CtxToolbarComponent;\n\n  pages: any[] = []; // todo add type\n  annoPages$: Observable<any>; // todo add type\n\n  drawMode = false;\n  highlightPage: number;\n  rectangles: Rectangle[];\n\n  private $subscriptions: Subscription;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    private readonly highlightService: HighlightCreateService,\n    private readonly toolbarEvents: ToolbarEventService,\n    private readonly viewerEvents: ViewerEventService) { }\n\n  ngOnInit(): void {\n    this.$subscriptions = this.store.pipe(select(fromDocument.getPages))\n      .subscribe(pages => this.pages = Object.values(pages));\n    this.annoPages$ = this.store.pipe(select(fromSelectors.getPageEntities));\n\n    this.$subscriptions.add(this.toolbarEvents.drawModeSubject.subscribe(drawMode => this.drawMode = drawMode));\n    this.$subscriptions.add(this.viewerEvents.textHighlight.subscribe(highlight => this.showContextToolbar(highlight)));\n    this.$subscriptions.add(this.viewerEvents.ctxToolbarCleared.subscribe(() => this.clearContextToolbar()));\n  }\n\n  ngOnDestroy(): void {\n    this.$subscriptions.unsubscribe();\n  }\n\n  showContextToolbar(highlight: Highlight) {\n    this.highlightPage = highlight.page;\n    this.rectangles = highlight.rectangles;\n    if (this.rectangles) {\n      this.toolbarEvents.highlightModeSubject.next(false);\n      setTimeout(() => this.ctxToolbar.focusToolbar(), 0);\n    }\n  }\n\n  clearContextToolbar() {\n    this.rectangles = undefined;\n  }\n\n  cancelContextToolbar() {\n    const selection = window.getSelection();\n    if (selection) {\n      selection.removeAllRanges();\n    }\n    this.rectangles = undefined;\n    this.toolbarEvents.highlightModeSubject.next(true);\n  }\n\n  createHighlight() {\n    this.highlightService.saveAnnotation(this.rectangles, this.highlightPage);\n    this.highlightService.resetHighlight();\n    this.rectangles = undefined;\n  }\n\n  createBookmark(rectangle: Rectangle) {\n    this.store.pipe(select(fromBookmarks.getBookmarkInfo), take(1))\n      .subscribe((bookmarkInfo) => {\n        const selection = window.getSelection().toString();\n        this.store.dispatch(new CreateBookmark({\n          ...bookmarkInfo,\n          name: selection.length > 0 ? selection.substr(0, 30) : 'new bookmark',\n          id: uuid(),\n          pageNumber: this.highlightPage - 1,\n          xCoordinate: rectangle.x,\n          yCoordinate: rectangle.y\n        } as any));\n        this.toolbarEvents.toggleSideBar(true);\n        this.toolbarEvents.toggleSideBarView(false);\n        this.highlightService.resetHighlight();\n        this.rectangles = undefined;\n\n      });\n  }\n\n  saveAnnotation({ rectangles, page, annotationId }: { rectangles: Rectangle[], page: any, annotationId?: string }) {\n    this.highlightService.saveAnnotation(rectangles, page, annotationId);\n    this.toolbarEvents.drawModeSubject.next(false);\n  }\n}\n","<div class=\"pageContainer\">\n  <div  *ngFor=\"let page of pages;  index as i\"\n       class=\"pageContainer__page\"\n       [ngStyle]=\"{\n       'width.px': page.styles.width,\n       'height.px': page.styles.height\n       }\"\n       [ngClass]=\"{ 'pageContainer__page--draw' : drawMode }\">\n    <mv-box-highlight-create\n      [page]=\"i + 1\"\n      [pageHeight]=\"page.styles.height\"\n      [pageWidth]=\"page.styles.width\"\n      [rotate]=\"rotate\"\n      [zoom]=\"zoom\"\n      (saveSelection)=\"saveAnnotation($event)\">\n    </mv-box-highlight-create>\n    <mv-ctx-toolbar *ngIf=\"rectangles && highlightPage === (i + 1)\"\n                    [rectangles]=\"rectangles\"\n                    [canBookmark]=\"true\" [canHighlight]=\"true\"\n                    [zoom]=\"zoom\"\n                    [rotate]=\"rotate\"\n                    [pageHeight]=\"page.styles.height\"\n                    [pageWidth]=\"page.styles.width\"\n                    (createBookmarkEvent)=\"createBookmark($event)\"\n                    (createHighlightEvent)=\"createHighlight()\"\n                    (cancelEvent)=\"cancelContextToolbar()\">\n    </mv-ctx-toolbar>\n    <div class=\"pageContainer__page-item\">\n      <mv-annotation-set *ngIf=\"(annoPages$ | async) as annoPages\"\n                         [zoom]=\"zoom\"\n                         [rotate]=\"rotate\"\n                         [pageHeight]=\"page.styles.height\"\n                         [pageWidth]=\"page.styles.width\"\n                         [page]=\"i\" [annotations]=\"annoPages[i + 1]\"></mv-annotation-set>\n    </div>\n  </div>\n</div>\n","import { Bookmark } from './../../../../store/models/bookmarks.interface';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subscription, from } from 'rxjs';\n\nimport { CreateBookmark, DeleteBookmark, MoveBookmark, UpdateBookmark, UpdateBookmarkScrollTop } from '../../../../store/actions/bookmark.actions';\nimport * as bookmarksSelectors from '../../../../store/selectors/bookmark.selectors';\nimport { AnnotationSetState } from '../../../../store/reducers/annotations.reducer';\nimport { DocumentPages } from '../../../../store/reducers/document.reducer';\nimport * as fromDocument from '../../../../store/selectors/document.selectors';\nimport * as fromBookmarks from '../../../../store/reducers/bookmarks.reducer';\nimport { getBookmarkChildren } from '../../../../store/bookmarks-store-utils';\nimport { take } from 'rxjs/operators';\nimport { v4 as uuid } from 'uuid';\nimport { ArrayDataSource, SelectionModel } from '@angular/cdk/collections';\nimport { FlatTreeControl, NestedTreeControl } from '@angular/cdk/tree';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\n\n@Component({\n    selector: 'mv-bookmarks',\n    templateUrl: './bookmarks.component.html',\n    standalone: false\n})\n\nexport class BookmarksComponent implements OnInit, OnDestroy, OnChanges {\n\n  @Input()\n  set bookmarkNodes(value: Bookmark[]) {\n    this.rebuildTreeForData(value);\n    if (this._bookmarkNodes && this.sortMode !== this.customSort) {\n      this.sortBookmarks();\n    }\n  };\n\n  get bookmarkNodes() {\n    return this._bookmarkNodes;\n  };\n\n  @Input() zoom: number;\n  @Input() rotate: number;\n  @Input() parentScrollTop: number;\n  @Output() goToDestination = new EventEmitter<any[]>();\n  @Output() treeHasChanged = new EventEmitter<boolean>()\n\n  private _bookmarkNodes: Bookmark[] = [];\n  datasource: ArrayDataSource<Bookmark>;\n  treeControl: FlatTreeControl<Bookmark>;\n  hoveredNode: Bookmark;\n  hoverHtmlElement: HTMLElement;\n  // expansion model tracks expansion state\n  expansionModel = new SelectionModel<Bookmark>(true);\n  isDraggingOn = false;\n  isUserdragging = false;\n  expandTimeout: any;\n  expandDelay = 1000;\n  dragNodeInsertToParent: boolean;\n\n  pageLookup: { [pageId: number]: DocumentPages } = {};\n  editableBookmark: string;\n  BOOKMARK_CHAR_LIMIT = 30;\n\n  dragNode: any;\n  dragNodeExpandOverWaitTimeMs = 300;\n  dragNodeExpandOverNode: any;\n  dragNodeExpandOverTime: number;\n  dragNodeExpandOverArea: number;\n\n\n  options = {\n    allowDrag: true,\n    allowDrop: true\n  };\n\n  $subscription: Subscription;\n\n  private sortMode: string;\n\n  private readonly _customSort = 'CUSTOM';\n  private readonly _positionSort = 'POSITION';\n\n  constructor(private store: Store<fromBookmarks.BookmarksState | AnnotationSetState>) { }\n\n  ngOnInit(): void {\n    this.sortMode = this.customSort;\n    this.$subscription = this.store.pipe(select(bookmarksSelectors.getEditableBookmark))\n      .subscribe(editableId => this.editableBookmark = editableId);\n    this.$subscription.add(this.store.select(fromDocument.getPages)\n      .subscribe(pages => {\n\n        Object.keys(pages).map(key => {\n          this.pageLookup[key] = pages[key];\n        });\n\n      }));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes?.bookmarkNodes) {\n      setTimeout(() => {\n        this.store.dispatch(new UpdateBookmarkScrollTop(this.parentScrollTop));\n      }, 200);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.$subscription.unsubscribe();\n  }\n\n  editBookmark(id) {\n    this.editableBookmark = id;\n  }\n\n  onAddBookmarkClick() {\n    this.store.pipe(select(bookmarksSelectors.getBookmarkInfo), take(1))\n      .subscribe((bookmarkInfo) => {\n        this.store.dispatch(new CreateBookmark({\n          ...bookmarkInfo, name: '', id: uuid()\n        } as any));\n      });\n  }\n\n  deleteBookmark2(node: Bookmark) {\n    this.customSortBookmarks();\n    let next: Bookmark;\n\n    const changedData = JSON.parse(JSON.stringify(this.bookmarkNodes));\n    const siblings = this.findNodeSiblings(changedData, node.id);\n    if (siblings && siblings.length > node.index + 1) {\n      next = siblings[node.index + 1];\n      next.previous = node.previous;\n    }\n    const toDelete = [node.id, ...getBookmarkChildren(node.children)];\n    this.store.dispatch(new DeleteBookmark({\n      deleted: toDelete, updated: next\n    }));\n  }\n\n  updateBookmark(bookmark: Bookmark, name) {\n    const editedBookmark = {\n      ...bookmark,\n      name\n    };\n    if (name) {\n      this.store.dispatch(new UpdateBookmark(editedBookmark));\n      this.editableBookmark = undefined;\n    }\n  }\n\n  goToBookmark(bookmark: Bookmark) {\n    const thisPage = this.pageLookup[bookmark.pageNumber + 1];\n    const defaultHeight = thisPage.styles.height;\n    const defaultScaleY = this.scaledY(bookmark.yCoordinate, defaultHeight, thisPage);\n\n    let top = 0, left = 0;\n    switch (this.rotate) {\n      case 90:\n        left = - defaultScaleY;\n        break;\n      case 180:\n        top = this.scaledY(bookmark.yCoordinate, (defaultHeight - (24 * this.zoom)), thisPage);\n        break;\n      case 270:\n        left = defaultScaleY;\n        break;\n      default:\n        top = defaultScaleY;\n    }\n\n    this.goToDestination.emit([\n      bookmark.pageNumber,\n      { 'name': 'XYZ' },\n      left,\n      top\n    ]);\n  }\n\n  get customSort() {\n    return this._customSort;\n  }\n\n  get positionSort() {\n    return this._positionSort;\n  }\n\n  sort(mode: string) {\n    this.sortMode = mode;\n    this.sortBookmarks();\n  }\n\n  private sortBookmarks() {\n    switch (this.sortMode) {\n      case this.customSort: {\n        this.customSortBookmarks();\n        break;\n      }\n      case this.positionSort: {\n        this.positionSortBookmarks();\n        break;\n      }\n      default: {\n        this.customSortBookmarks();\n        break;\n      }\n    }\n  }\n\n  private positionSortBookmarks() {\n    this.bookmarkNodes.sort((a, b) => a.pageNumber === b.pageNumber ? a.yCoordinate - b.yCoordinate : a.pageNumber - b.pageNumber);\n    this.isDraggingOn = false;\n    this.rebuildTreeForData(this.bookmarkNodes);\n  }\n\n  private customSortBookmarks() {\n    if (this.bookmarkNodes.length > 1) {\n      this.bookmarkNodes.sort((a, b) => a.index - b.index);\n    }\n    this.isDraggingOn = true;\n    this.rebuildTreeForData(this.bookmarkNodes);\n  }\n\n  private scaledY(yCoordinate: number, height: number, page: DocumentPages): number {\n    const viewportScale = page.viewportScale / this.zoom;\n    return ((height / this.zoom) - yCoordinate) / viewportScale;\n  }\n\n  hasChild = (_: number, node: Bookmark) => {\n    return node.children && node.children.length > 0;\n  }\n\n  getNode(bookmarks, parentId) {\n    if (typeof bookmarks !== 'undefined') {\n      for (let i = 0; i < bookmarks.length; i++) {\n        if (bookmarks[i].id === parentId) {\n          return [bookmarks[i]];\n        }\n        const a = this.getNode(bookmarks[i].children, parentId);\n        if (a !== null) {\n          return a;\n        }\n      }\n    }\n    return null;\n  }\n\n  drop(event: CdkDragDrop<Bookmark>) {\n\n    if (!event.isPointerOverContainer || (event.previousIndex === event.currentIndex)) return;\n\n    const hasMovedUpTheTree = event.previousIndex > event.currentIndex;\n    const bookmarkNodesString = JSON.stringify(this._bookmarkNodes);\n    const changedData = JSON.parse(bookmarkNodesString);\n    const visibleNodes = this.visibleNodes(this._bookmarkNodes);\n    const toNode = visibleNodes[event.currentIndex] as Bookmark;\n    const toNodeSiblings = this.findNodeSiblings(changedData, toNode.id);\n\n    const toNodeParent = toNodeSiblings[0].parent;\n    const toIndex = toNodeSiblings.findIndex(s => s.id === toNode.id);\n\n    const fromNode = event.item.data as Bookmark;\n    const fromNodeSiblings = this.findNodeSiblings(changedData, fromNode.id);\n    const fromIndex = fromNodeSiblings.findIndex(n => n.id === fromNode.id);\n\n    if (this.isToNodeChildOfFromNode(fromNode?.children, toNode)) return;\n\n    if (this.dragNodeInsertToParent) {\n\n      const indexOfParent = toNodeSiblings.findIndex(element => element.id === toNode.id);\n      const parentNode = toNodeSiblings[indexOfParent];\n      const firstChild = parentNode?.children && parentNode?.children.length > 0 ? parentNode.children[0] : null;\n      let movedBookmarksWithParent = [{ ...fromNode, parent: parentNode.id, previous: null }];\n\n      if (firstChild) {\n        movedBookmarksWithParent = [...movedBookmarksWithParent, { ...firstChild, previous: fromNode.id }];\n      }\n\n      let fromNodeSibling = this.getSiblingFromAllSibliings(fromNodeSiblings, fromIndex + 1);\n      const nextFromindexforParent = fromIndex + 1;\n      fromNodeSibling = fromNodeSibling && fromNodeSibling.id === fromNode.previous ? this.getSiblingFromAllSibliings(fromNodeSiblings, nextFromindexforParent + 1) : fromNodeSibling;\n\n      if (fromNodeSibling && fromNodeSibling.id !== parentNode.id) {\n        movedBookmarksWithParent = [...movedBookmarksWithParent, { ...fromNodeSibling, previous: fromNode.previous }];\n      }\n\n      let previousSiblingForParentIndex = toIndex - 1;\n      let parentNodeSibling = this.getSiblingFromAllSibliings(toNodeSiblings, previousSiblingForParentIndex);\n\n      if (parentNodeSibling && parentNodeSibling.id == fromNode.id) {\n        previousSiblingForParentIndex = previousSiblingForParentIndex - 1;\n        if (previousSiblingForParentIndex >= 0) {\n          parentNodeSibling = this.getSiblingFromAllSibliings(toNodeSiblings, previousSiblingForParentIndex);\n        }\n        else {\n          parentNodeSibling = null;\n        }\n      }\n\n      movedBookmarksWithParent = [...movedBookmarksWithParent, { ...parentNode, previous: parentNodeSibling?.id }];\n\n      const hasParentDups = (movedBookmarksWithParent as Bookmark[]).map(x => x.id).some(function (value, index, array) {                            // .some will break as soon as duplicate found (no need to itterate over all array)\n        return array.indexOf(value) !== array.lastIndexOf(value);   // comparing first and last indexes of the same value\n      })\n      if (hasParentDups || movedBookmarksWithParent && movedBookmarksWithParent.length <= 1) return;\n\n      this.store.dispatch(new MoveBookmark(movedBookmarksWithParent));\n      return;\n    }\n\n    if (!toNodeSiblings) return;\n\n    const fromNodePrevious = hasMovedUpTheTree ? toNode.previous : toNode.id;\n    let movedBookmarks = [{\n      ...fromNode,\n      previous: toNode.index > 0 ? fromNodePrevious : undefined,\n      parent: toNodeParent\n    }];\n\n    let fromNodeSibling = this.getSiblingFromAllSibliings(fromNodeSiblings, fromIndex + 1);\n    const nextFromindex = fromIndex + 1;\n    fromNodeSibling = fromNodeSibling && fromNodeSibling.id === fromNode.previous ? this.getSiblingFromAllSibliings(fromNodeSiblings, nextFromindex + 1) : fromNodeSibling;\n\n    if (fromNodeSibling) {\n      movedBookmarks = [...movedBookmarks, { ...fromNodeSibling, previous: fromNode.previous }];\n    }\n\n\n    let toNodeSiblingIndex = hasMovedUpTheTree ? toIndex : toIndex + 1;\n    let toNodeSibling = this.getSiblingFromAllSibliings(toNodeSiblings, toNodeSiblingIndex);\n\n    if (toNodeSibling) {\n      movedBookmarks = [...movedBookmarks, { ...toNodeSibling, previous: fromNode.id }];\n    }\n\n    const hasDups = (movedBookmarks as Bookmark[]).map(x => x.id).some(function (value, index, array) {\n      return array.indexOf(value) !== array.lastIndexOf(value);   // comparing first and last indexes of the same value\n    })\n    if (hasDups || movedBookmarks && movedBookmarks.length <= 1) return;\n\n    this.store.dispatch(new MoveBookmark(movedBookmarks));\n  }\n\n  private getSiblingFromAllSibliings(sibling: Bookmark[], index) {\n    return sibling.length > index ? sibling[index] : undefined;\n  }\n\n  dragStart() {\n    this.dragNodeInsertToParent = false;\n    this.hoveredNode = null;\n    this.isUserdragging = true;\n  }\n\n  dragEnd() {\n    this.isUserdragging = false;\n    if (this.hoverHtmlElement?.style) {\n      this.hoverHtmlElement.style.borderRight = '';\n    }\n  }\n\n  dragHover(event: any, node: Bookmark) {\n    if (this.isUserdragging) {\n      const newEvent: any = event;\n      const percentageX = newEvent.offsetX / newEvent.target.clientWidth;\n      if (percentageX > .55) {\n        this.hoveredNode = node;\n        if (this.hoverHtmlElement?.style) {\n          this.hoverHtmlElement.style.borderRight = '';\n        }\n        this.hoverHtmlElement = event.currentTarget;\n        this.hoverHtmlElement.style.borderRight = '5px solid #007bff';\n        this.dragNodeInsertToParent = true;\n      } else {\n        this.hoveredNode = null;\n        if (this.hoverHtmlElement?.style) {\n          this.hoverHtmlElement.style.borderRight = '';\n        }\n        this.dragNodeInsertToParent = false;\n      }\n    }\n  }\n\n  dragHoverEnd(event: any, node: Bookmark) {\n    if (this.isUserdragging) {\n      if (!node || this.hoveredNode?.id !== node.id) {\n        this.dragNodeInsertToParent = false;\n        if (this.hoverHtmlElement?.style) {\n          this.hoverHtmlElement.style.borderRight = '';\n        }\n        this.hoveredNode = null;\n      }\n    }\n  }\n\n  onNodeExpand(node: Bookmark) {\n    const isExpanded = this.treeControl.isExpanded(node);\n    return isExpanded ? \"toggle-children-wrapper-expanded\" : \"toggle-children-wrapper-collapsed\";\n  }\n\n  visibleNodes(bookmarks: Bookmark[]): Bookmark[] {\n    const result = [];\n\n    function addExpandedChildren(node: Bookmark, expanded: Bookmark[]) {\n      result.push(node);\n      if (expanded.some(bookmark => bookmark && bookmark.id === node.id) && node.children) {\n        node.children.map((child) => addExpandedChildren(child, expanded));\n      }\n    }\n    bookmarks.forEach((node) => {\n      addExpandedChildren(node, this.treeControl.expansionModel.selected);\n    });\n    return result;\n  }\n\n  findNodeSiblings(arr: Array<any>, id: string): Array<any> {\n    let result, subResult;\n    arr.forEach((item, i) => {\n      if (item.id === id) {\n        result = arr;\n      } else if (item?.children) {\n        subResult = this.findNodeSiblings(item.children, id);\n        if (subResult) result = subResult;\n      }\n    });\n    return result;\n  }\n\n  rebuildTreeForData(data: any) {\n    this._bookmarkNodes = data ?? [];\n    this.datasource = new ArrayDataSource(this._bookmarkNodes);\n    this.treeControl = new NestedTreeControl<Bookmark>(node => node.children);\n    this.treeControl.dataNodes = this._bookmarkNodes;\n    this.expansionModel.selected.forEach((bookmark) => {\n      const node = this.treeControl.dataNodes.find((n) => n.id === bookmark.id);\n      this.treeControl.expand(node);\n    });\n    this.treeHasChanged.emit(true);\n  }\n\n  isToNodeChildOfFromNode(fromNodeChildren: Bookmark[], toNode: Bookmark) {\n\n    if (!fromNodeChildren) {\n      return false;\n    }\n\n    const result = this.getNode(fromNodeChildren, toNode.id);\n    return result ? true : false;\n  }\n}\n","<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n  >No bookmarks created yet</a\n>\n<cdk-tree\n  cdkDropList\n  [cdkDropListDisabled]=\"!isDraggingOn\"\n  class=\"bookmarks-tree\"\n  *ngIf=\"datasource\"\n  [dataSource]=\"datasource\"\n  [treeControl]=\"treeControl\"\n  (cdkDropListDropped)=\"drop($event)\"\n>\n  <!-- This is the tree node template for leaf nodes -->\n  <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n    <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n      <div\n        class=\"node-content-wrapper nested-tree-node nest-tree-node-padding\"\n        cdkDrag\n        cdkDragBoundary=\".bookmarks-tree\"\n        [cdkDragData]=\"node\"\n        (mouseenter)=\"dragHover($event, node)\"\n        (mouseleave)=\"dragHoverEnd($event, node)\"\n        (cdkDragStarted)=\"dragStart()\"\n        (cdkDragReleased)=\"dragEnd()\"\n      >\n        <div class=\"outlineItem\">\n          <a (click)=\"goToBookmark(node)\">\n            {{ node.name }}\n          </a>\n        </div>\n        <button\n          class=\"bookmark__rename\"\n          (click)=\"editBookmark(node.id)\"\n        ></button>\n        <button\n          class=\"bookmark__delete\"\n          (click)=\"deleteBookmark2(node)\"\n        ></button>\n      </div>\n      <!-- <div class=\"node-drop-slot\"></div> -->\n    </div>\n    <ng-template #inputBookmark>\n      <input\n        #bookmarkName\n        class=\"bookmark__input\"\n        [value]=\"node.name\"\n        [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n      />\n      <button\n        class=\"bookmark__save\"\n        (click)=\"updateBookmark(node, bookmarkName.value)\"\n      ></button>\n    </ng-template>\n  </cdk-nested-tree-node>\n  <!-- This is the tree node template for expandable nodes -->\n  <cdk-nested-tree-node\n    class=\"node-wrapper\"\n    *cdkTreeNodeDef=\"let node; when: hasChild\"\n  >\n    <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n      <div\n        class=\"node-content-wrapper nested-tree-node\"\n        cdkDrag\n        [cdkDragData]=\"node\"\n        (mouseenter)=\"dragHover($event, node)\"\n        (mouseleave)=\"dragHoverEnd($event, node)\"\n        (cdkDragStarted)=\"dragStart()\"\n        (cdkDragReleased)=\"dragEnd()\"\n      >\n        <div class=\"outlineItem\">\n          <span\n            cdkTreeNodeToggle\n            class=\"toggle-children-wrapper\"\n            [ngClass]=\"onNodeExpand(node)\"\n            ><span class=\"toggle-children\"></span\n          ></span>\n          <a (click)=\"goToBookmark(node)\">\n            {{ node.name }}\n          </a>\n        </div>\n        <button\n          class=\"bookmark__rename\"\n          (click)=\"editBookmark(node.id)\"\n        ></button>\n        <button\n          class=\"bookmark__delete\"\n          (click)=\"deleteBookmark2(node)\"\n        ></button>\n      </div>\n      <!-- <div class=\"node-drop-slot\"></div> -->\n    </div>\n    <ng-template #inputBookmark2>\n      <input\n        #bookmarkName\n        class=\"bookmark__input\"\n        [value]=\"node.name\"\n        [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n      />\n      <button\n        class=\"bookmark__save\"\n        (click)=\"updateBookmark(node, bookmarkName.value)\"\n      ></button>\n    </ng-template>\n    <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n      <ng-container cdkTreeNodeOutlet></ng-container>\n    </div>\n  </cdk-nested-tree-node>\n</cdk-tree>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Outline } from './outline.model';\n\n@Component({\n    selector: 'mv-outline-item',\n    templateUrl: './outline-item.component.html',\n    standalone: false\n})\nexport class OutlineItemComponent implements OnInit {\n\n  @Input() outline: Outline;\n  @Input() currentPageNumber: number;\n  @Input() isCurrentSection: boolean;\n  @Input() endPage: number;\n  @Output() navigationEvent = new EventEmitter();\n\n  showOutlineItems: boolean;\n\n  ngOnInit() {\n    this.showOutlineItems = true;\n  }\n\n  goToDestination(destination: any) {\n    if (destination) {\n      this.navigationEvent.emit(destination);\n    }\n  }\n\n  toggleOutline() {\n    this.showOutlineItems = !this.showOutlineItems;\n  }\n\n  isViewedItem(current: Outline, next: Outline): boolean {\n    if (current.pageNumber === this.currentPageNumber) {\n      return true;\n    }\n    return next === undefined ? current.pageNumber <= this.currentPageNumber && this.endPage > this.currentPageNumber :\n      current.pageNumber <= this.currentPageNumber && (next.pageNumber > this.currentPageNumber);\n  }\n\n  findEndPage(next: Outline): number {\n    return next === undefined ? this.endPage : next.pageNumber;\n  }\n\n  showHighlightOutlineCss() {\n    return this.isCurrentSection ? 'highlightedOutlineItem' : 'outlineItem';\n  }\n}\n","<div class=\"outlineItem\">\n  <div *ngIf=\"outline.items.length > 0\"\n       [ngClass]=\"{ 'outlineItemToggler': true, 'outlineItemsHidden': !showOutlineItems }\"\n       (click)=\"toggleOutline()\"\n       (keyup.enter)=\"toggleOutline()\" tabindex=\"0\"></div>\n  <a (click)=\"goToDestination(outline?.dest)\"\n     (keyup.enter)=\"goToDestination(outline?.dest)\"\n     [style.font-weight]=\"outline.bold ? 'bold' : ''\"\n     [style.font-style]=\"outline.italic ? 'italic' : ''\"\n     [ngClass]=\"showHighlightOutlineCss()\"\n     tabindex=\"0\">\n    <div style=\"text-align:left;\" [ngClass]=\"showHighlightOutlineCss()\">\n      {{ outline.title }}\n      <span style=\"float:right;\">\n        {{ outline.pageNumber }}\n      </span>\n    </div>\n  </a>\n  \n  <div *ngIf=\"outline.items.length > 0\" class=\"outlineItems\">\n    <div *ngFor=\"let outlineItem of outline.items; index as i\">\n      <mv-outline-item\n        [outline]=\"outlineItem\" \n        [currentPageNumber]= \"currentPageNumber\" \n        [isCurrentSection]= \"isViewedItem(outlineItem, outline.items[i+1])\"\n        [endPage]=\"findEndPage(outline.items[i+1])\"\n        (navigationEvent)=\"goToDestination($event)\">\n      </mv-outline-item>\n    </div>\n  </div>\n</div>\n\n","import { AfterViewInit, Component, ElementRef, HostListener, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { Outline } from './outline-item/outline.model';\nimport { Observable, Subscription } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport * as bookmarksSelectors from '../../../store/selectors/bookmark.selectors';\nimport { BookmarkNode } from '../../../store/models/bookmarks.interface';\nimport { CreateBookmark, LoadBookmarks } from '../../../store/actions/bookmark.actions';\nimport { take } from 'rxjs/operators';\nimport { v4 as uuid } from 'uuid';\nimport { ViewerEventService } from '../../viewer-event.service';\nimport { BookmarksState } from '../../../store/reducers/bookmarks.reducer';\nimport { ToolbarEventService } from '../../../toolbar/toolbar-event.service';\nimport { BookmarksComponent } from './bookmarks/bookmarks.component';\n\n@Component({\n    selector: 'mv-side-bar',\n    templateUrl: './side-bar.component.html',\n    standalone: false\n})\nexport class SideBarComponent implements OnInit, OnChanges, OnDestroy {\n\n  @Input() annotationsEnabled: boolean;\n  @Input() outline: Outline;\n  @Input() url: string;\n  @Input() zoom: number;\n  @Input() rotate: number;\n  @Input() currentPageNumber: number;\n\n  @ViewChild(BookmarksComponent)\n  bookmarks: BookmarksComponent;\n  treeChanged: boolean = false;\n  selectedView = 'outline';\n  bookmarkNodes$: Observable<BookmarkNode[]>;\n  scrollTop: any;\n  sidebarOpen: any;\n\n  private subscriptions: Subscription[] = [];\n  @ViewChild('sidebar') sidebarDiv;\n\n  constructor(private viewerEvents: ViewerEventService,\n    private store: Store<BookmarksState>,\n    private readonly toolbarEvents: ToolbarEventService,\n  ) { }\n\n  ngOnInit(): void {\n    this.bookmarkNodes$ = this.store.pipe(select(bookmarksSelectors.getBookmarkNodes));\n    this.subscriptions.push(this.store.pipe(select(bookmarksSelectors.getEditableBookmark))\n      .subscribe(editable => this.selectedView = editable ? 'bookmarks' : this.selectedView));\n    this.subscriptions.push(\n      this.toolbarEvents.sidebarOutlineView.subscribe(toggle => {\n        this.selectedView = toggle ? 'outline' : 'bookmarks';\n      }),\n      this.toolbarEvents.sidebarOpen.subscribe(toggle => {\n        this.sidebarOpen = toggle;\n      })\n    );\n    this.subscriptions.push(this.store.pipe(select(bookmarksSelectors.getScrollTop)).subscribe(scrollTopValue => {\n      if (this.sidebarDiv?.nativeElement) {\n        this.sidebarDiv.nativeElement.scrollTop = scrollTopValue\n      }\n    }));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.url && this.url) {\n      this.store.dispatch(new LoadBookmarks());\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.subscriptions.length > 0) {\n      this.subscriptions.forEach(subscription => subscription.unsubscribe());\n    }\n  }\n\n  public onScroll(event: any): void {\n    if (!this.treeChanged) {\n      this.scrollTop = event.srcElement.scrollTop;\n    }\n    this.treeChanged = false;\n  }\n\n  goToDestination(destination: any[]) {\n    this.viewerEvents.goToDestination(destination);\n  }\n\n  hasTreeChanged(value: boolean) {\n    this.treeChanged = value;\n  }\n\n  toggleSidebarView(sidebarView: string) {\n    this.selectedView = sidebarView;\n  }\n\n  isViewedItem(current: Outline, next: Outline): boolean {\n    if (current.pageNumber === this.currentPageNumber) {\n      return true;\n    }\n    return next === undefined ? current.pageNumber <= this.currentPageNumber :\n      current.pageNumber <= this.currentPageNumber && (next.pageNumber > this.currentPageNumber);\n  }\n\n  findEndPage(next: Outline): number {\n    return next === undefined ? Number.MAX_SAFE_INTEGER : next.pageNumber;\n  }\n}\n","<div id=\"toolbarSidebar\">\n  <div\n    *ngIf=\"annotationsEnabled && selectedView === 'bookmarks'\"\n    class=\"splitToolbarButton toggled\"\n  >\n    <button\n      id=\"sortBookmarkPosition\"\n      class=\"splitToolbarButton left bookmark__sort__position\"\n      (click)=\"bookmarks.sort(bookmarks.positionSort)\"\n      [attr.aria-label]=\"'Order by place in document' | rpxTranslate\"\n      aria-pressed=\"true\"\n    ></button>\n    <button\n      id=\"sortBookmarkCustom\"\n      class=\"splitToolbarButton left bookmark__sort__custom\"\n      (click)=\"bookmarks.sort(bookmarks.customSort)\"\n      [attr.aria-label]=\"'Order manually' | rpxTranslate\"\n      aria-pressed=\"true\"\n    ></button>\n  </div>\n  <div class=\"splitToolbarButtonSeparator\"></div>\n  <div\n    *ngIf=\"annotationsEnabled && selectedView === 'bookmarks'\"\n    class=\"splitToolbarButton right\"\n  >\n    <button\n      id=\"addBookmark\"\n      class=\"toolbarButton addBookmark\"\n      (click)=\"bookmarks.onAddBookmarkClick()\"\n      [attr.aria-label]=\"'Add bookmark' | rpxTranslate\"\n      tabindex=\"3\"\n      data-l10n-id=\"addBookmark\"\n    >\n      <span data-l10n-id=\"addBookmark_label\" aria-hidden=\"true\">{{\n        \"Add bookmark\" | rpxTranslate\n      }}</span>\n    </button>\n  </div>\n</div>\n<div #sidebar id=\"sidebarContent\" cdkScrollable (scroll)=\"onScroll($event)\" [hidden]=\"!sidebarOpen\">\n  <div id=\"outlineView\" class=\"outlineWithDeepNesting\">\n    <div class=\"outlineItem\" *ngIf=\"selectedView === 'outline'\">\n      <mv-outline-item\n        *ngFor=\"let outlineItem of outline; index as i\"\n        [outline]=\"outlineItem\"\n        [currentPageNumber]=\"currentPageNumber\"\n        [isCurrentSection]=\"isViewedItem(outlineItem, outline[i + 1])\"\n        [endPage]=\"findEndPage(outline[i + 1])\"\n        (navigationEvent)=\"goToDestination($event)\"\n      ></mv-outline-item>\n    </div>\n    <div\n      *ngIf=\"annotationsEnabled && selectedView === 'bookmarks'\"\n      id=\"bookmarkContainer\"\n    >\n      <mv-bookmarks\n        [bookmarkNodes]=\"bookmarkNodes$ | async\"\n        [zoom]=\"zoom\"\n        [rotate]=\"rotate\"\n        [parentScrollTop]=\"scrollTop\"\n        (goToDestination)=\"goToDestination($event)\"\n        (treeHasChanged)=\"hasTreeChanged($event)\"\n      ></mv-bookmarks>\n    </div>\n  </div>\n</div>\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n\n@Directive({\n    selector: '[mvGrabNDrag]',\n    standalone: false\n})\nexport class GrabNDragDirective {\n\n  originalPosition: { left: number; top: number };\n  private pointerDown = false;\n\n  @Input() dragEnabled = false;\n  @Input() dragX: Element;\n\n  constructor(private el: ElementRef) {\n  }\n\n  @HostListener('pointerdown', ['$event'])\n  onPointerDown(event: PointerEvent) {\n    if (this.dragEnabled) {\n      event.preventDefault();\n      this.pointerDown = true;\n      this.originalPosition = {\n        left: event.clientX + this.el.nativeElement.scrollLeft,\n        top: event.clientY + this.el.nativeElement.scrollTop,\n      };\n    }\n  }\n\n  @HostListener('window:pointermove', ['$event'])\n  onPointerMove(event: PointerEvent) {\n    if (this.pointerDown && this.dragEnabled) {\n      event.preventDefault();\n      const scrollDiff = {\n        left: this.originalPosition.left - (event.clientX + this.el.nativeElement.scrollLeft),\n        top: this.originalPosition.top - (event.clientY + this.el.nativeElement.scrollTop)\n      };\n      if (this.dragEnabled) {\n        this.dragX.scrollLeft += scrollDiff.left;\n        this.el.nativeElement.scrollTop += scrollDiff.top;\n      }\n    }\n  }\n\n  @HostListener('window:pointerup') onWindowPointerUp() {\n    this.pointerDown = false;\n  }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core';\n\nexport interface KeyboardTextHighlightEvent {\n  page: number;\n  startX: number;\n  startY: number;\n  endX: number;\n  endY: number;\n}\n\nexport interface CursorPosition {\n  x: number;\n  y: number;\n  visible: boolean;\n}\n\n@Directive({\n  selector: '[mvKeyboardTextHighlight]',\n  standalone: false\n})\nexport class KeyboardTextHighlightDirective implements OnDestroy {\n\n  @Input() set enabled(value: boolean) {\n    const wasEnabled = this._enabled;\n    this._enabled = value;\n  }\n  get enabled(): boolean {\n    return this._enabled;\n  }\n  private _enabled = false;\n\n  @Input() incrementSmall = 5;\n  @Input() incrementMedium = 10;\n  @Input() incrementLarge = 20;\n\n  @Output() selectionStarted = new EventEmitter<void>();\n  @Output() selectionUpdated = new EventEmitter<KeyboardTextHighlightEvent>();\n  @Output() selectionConfirmed = new EventEmitter<void>();\n  @Output() selectionCancelled = new EventEmitter<void>();\n  @Output() cursorPositionChanged = new EventEmitter<CursorPosition>();\n  @Output() selectionCursorPositionChanged = new EventEmitter<CursorPosition>();\n\n  private isSelecting = false;\n  private cursorX: number;\n  private cursorY: number;\n  private showCursor = false;\n  private selectionStartX: number;\n  private selectionStartY: number;\n  private selectionEndX: number;\n  private selectionEndY: number;\n  private currentPage: number;\n  private lastValidEndNode: Node | null = null;\n  private lastValidEndOffset: number = 0;\n  private static lastInteractionWasKeyboard = false;\n\n  constructor(private elementRef: ElementRef<HTMLElement>) {\n    if (typeof window !== 'undefined') {\n      window.addEventListener('keydown', KeyboardTextHighlightDirective.onGlobalKeyDown, { capture: true });\n      window.addEventListener('mousedown', KeyboardTextHighlightDirective.onGlobalMouseDown, { capture: true });\n    }\n  }\n\n  private static onGlobalKeyDown(): void {\n    KeyboardTextHighlightDirective.lastInteractionWasKeyboard = true;\n  }\n\n  private static onGlobalMouseDown(): void {\n    KeyboardTextHighlightDirective.lastInteractionWasKeyboard = false;\n  }\n\n  ngOnDestroy(): void {\n    this.cleanup();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    if (!this.enabled) {\n      return;\n    }\n\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!this.isSelecting) {\n        this.startTextSelection();\n      } else {\n        this.confirmTextSelection();\n      }\n      return;\n    }\n\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.isSelecting) {\n        this.cancelTextSelection();\n      } else if (this.showCursor) {\n        this.hideCursor();\n      }\n      return;\n    }\n\n    if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.isSelecting) {\n        this.expandTextSelection(event);\n      } else {\n        this.moveCursor(event);\n      }\n    }\n  }\n\n  @HostListener('blur')\n  onBlur(): void {\n    if (this.showCursor && !this.isSelecting) {\n      this.hideCursor();\n    }\n  }\n\n  private moveCursor(event: KeyboardEvent): void {\n    const increment = event.shiftKey ? this.incrementLarge : this.incrementMedium;\n\n    if (!this.showCursor) {\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n\n      this.cursorX = viewportWidth / 2;\n      this.cursorY = viewportHeight / 2;\n      this.showCursor = true;\n\n      this.emitCursorPosition();\n      return;\n    }\n\n    const viewportWidth = window.innerWidth;\n    const viewportHeight = window.innerHeight;\n\n    switch (event.key) {\n      case 'ArrowUp':\n        this.cursorY = Math.max(0, this.cursorY - increment);\n        break;\n      case 'ArrowDown':\n        this.cursorY = Math.min(viewportHeight, this.cursorY + increment);\n        break;\n      case 'ArrowLeft':\n        this.cursorX = Math.max(0, this.cursorX - increment);\n        break;\n      case 'ArrowRight':\n        this.cursorX = Math.min(viewportWidth, this.cursorX + increment);\n        break;\n    }\n\n    this.emitCursorPosition();\n  }\n\n  private startTextSelection(): void {\n    if (this.showCursor) {\n      this.selectionStartX = this.cursorX;\n      this.selectionStartY = this.cursorY;\n      this.selectionEndX = this.cursorX;\n      this.selectionEndY = this.cursorY;\n      this.showCursor = false;\n      this.emitCursorPosition();\n    } else {\n      // default to center\n      this.selectionStartX = window.innerWidth / 2;\n      this.selectionStartY = window.innerHeight / 2;\n      this.selectionEndX = this.selectionStartX;\n      this.selectionEndY = this.selectionStartY;\n    }\n\n    this.isSelecting = true;\n    this.currentPage = this.getCurrentPageNumber();\n    this.lastValidEndNode = null;\n    this.lastValidEndOffset = 0;\n\n    this.selectionCursorPositionChanged.emit({\n      x: this.selectionEndX,\n      y: this.selectionEndY,\n      visible: true\n    });\n\n    this.createTextSelectionAtPoint(this.selectionStartX, this.selectionStartY);\n\n    this.selectionStarted.emit();\n  }\n\n  private expandTextSelection(event: KeyboardEvent): void {\n    const increment = event.shiftKey ? this.incrementLarge : this.incrementSmall;\n\n    const viewportWidth = window.innerWidth;\n    const viewportHeight = window.innerHeight;\n\n    switch (event.key) {\n      case 'ArrowRight':\n        this.selectionEndX = Math.min(viewportWidth, this.selectionEndX + increment);\n        break;\n      case 'ArrowLeft':\n        this.selectionEndX = Math.max(0, this.selectionEndX - increment);\n        break;\n      case 'ArrowDown':\n        this.selectionEndY = Math.min(viewportHeight, this.selectionEndY + increment);\n        break;\n      case 'ArrowUp':\n        this.selectionEndY = Math.max(0, this.selectionEndY - increment);\n        break;\n    }\n\n    this.selectionCursorPositionChanged.emit({\n      x: this.selectionEndX,\n      y: this.selectionEndY,\n      visible: true\n    });\n\n    this.updateTextSelection();\n\n    this.emitSelectionUpdated();\n  }\n\n  private createTextSelectionAtPoint(viewportX: number, viewportY: number): void {\n    const selection = window.getSelection();\n\n    // get precise caret position at the coordinates\n    // caretPositionFromPoint is standard but not supported in all browsers\n    // caretRangeFromPoint is older and supported in more browsers\n    let range: Range | null = null;\n\n    if ((document as any).caretPositionFromPoint) {\n      const caretPosition = (document as any).caretPositionFromPoint(viewportX, viewportY);\n      if (caretPosition) {\n        range = document.createRange();\n        range.setStart(caretPosition.offsetNode, caretPosition.offset);\n        range.collapse(true);\n      }\n    } else if ((document as any).caretRangeFromPoint) {\n      range = (document as any).caretRangeFromPoint(viewportX, viewportY);\n    }\n\n    if (range) {\n      selection.removeAllRanges();\n      selection.addRange(range);\n    }\n  }\n\n  private updateTextSelection(): void {\n    const selection = window.getSelection();\n    if (!selection || selection.rangeCount === 0) {\n      return;\n    }\n\n    const range = selection.getRangeAt(0);\n    const startNode = range.startContainer;\n    const startOffset = range.startOffset;\n\n    let endNode: Node | null = null;\n    let endOffset = 0;\n\n    if ((document as any).caretPositionFromPoint) {\n      const caretPosition = (document as any).caretPositionFromPoint(this.selectionEndX, this.selectionEndY);\n      if (caretPosition) {\n        endNode = caretPosition.offsetNode;\n        endOffset = caretPosition.offset;\n      }\n    } else if ((document as any).caretRangeFromPoint) {\n      const caretRange = (document as any).caretRangeFromPoint(this.selectionEndX, this.selectionEndY);\n      if (caretRange) {\n        endNode = caretRange.startContainer;\n        endOffset = caretRange.startOffset;\n      }\n    }\n\n    if (endNode) {\n      const range = document.createRange();\n      range.setStart(startNode, startOffset);\n      range.setEnd(endNode, endOffset);\n\n      const isBackward = range.collapsed && (startNode !== endNode || endOffset < startOffset);\n      const comparison = startNode.compareDocumentPosition(endNode);\n      const endBeforeStart = (comparison & Node.DOCUMENT_POSITION_PRECEDING) !== 0;\n\n      if (isBackward || endBeforeStart) {\n        if (this.lastValidEndNode) {\n          endNode = this.lastValidEndNode;\n          endOffset = this.lastValidEndOffset;\n        } else {\n          endNode = startNode;\n          endOffset = startOffset;\n        }\n      } else {\n        this.lastValidEndNode = endNode;\n        this.lastValidEndOffset = endOffset;\n      }\n\n      selection.setBaseAndExtent(\n        startNode,\n        startOffset,\n        endNode,\n        endOffset\n      );\n    }\n  }\n\n  private confirmTextSelection(): void {\n    this.selectionConfirmed.emit();\n    this.selectionCursorPositionChanged.emit({\n      x: this.selectionEndX,\n      y: this.selectionEndY,\n      visible: false\n    });\n    this.cleanup();\n  }\n\n  private cancelTextSelection(): void {\n    const selection = window.getSelection();\n    if (selection) {\n      selection.removeAllRanges();\n    }\n\n    this.selectionCancelled.emit();\n    this.selectionCursorPositionChanged.emit({\n      x: this.selectionEndX,\n      y: this.selectionEndY,\n      visible: false\n    });\n    this.cleanup();\n  }\n\n  private hideCursor(): void {\n    this.showCursor = false;\n    this.emitCursorPosition();\n  }\n\n  private cleanup(): void {\n    this.isSelecting = false;\n    this.showCursor = false;\n    this.cursorX = undefined;\n    this.cursorY = undefined;\n    this.selectionStartX = undefined;\n    this.selectionStartY = undefined;\n    this.selectionEndX = undefined;\n    this.selectionEndY = undefined;\n    this.currentPage = undefined;\n    this.lastValidEndNode = null;\n    this.lastValidEndOffset = 0;\n  }\n\n  private getCurrentPageNumber(): number {\n    let currentElement = this.elementRef.nativeElement;\n    while (currentElement && currentElement.offsetParent) {\n      currentElement = currentElement.offsetParent as HTMLElement;\n      if (currentElement.getAttribute) {\n        const page = parseInt(currentElement.getAttribute('data-page-number'), 10);\n        if (page) {\n          return page;\n        }\n      }\n    }\n    return 1;\n  }\n\n  private emitCursorPosition(): void {\n    const position = {\n      x: this.cursorX,\n      y: this.cursorY,\n      visible: this.showCursor\n    };\n    this.cursorPositionChanged.emit(position);\n  }\n\n  private emitSelectionUpdated(): void {\n    this.selectionUpdated.emit({\n      page: this.currentPage,\n      startX: this.selectionStartX,\n      startY: this.selectionStartY,\n      endX: this.selectionEndX,\n      endY: this.selectionEndY\n    });\n  }\n\n  public reset(): void {\n    this.cleanup();\n    this.emitCursorPosition();\n  }\n}","import {createSelector} from '@ngrx/store';\nimport * as fromFeature from '../reducers/reducers';\nimport * as fromRedactions from '../reducers/redaction.reducer';\nimport * as fromDocument from './document.selectors';\n\nexport const getRedactionState = createSelector(\n  fromFeature.getMVState,\n  (state: fromFeature.State) =>  state.redactions\n);\n\nexport const getRedactionPages = createSelector(\n  getRedactionState,\n  fromRedactions.getPageEnt\n);\n\nexport const getSelected = createSelector(\n  getRedactionState,\n  fromRedactions.getSelectedRedaction\n);\n\nexport const getRedactedDocumentInfo = createSelector(\n  getRedactionState,\n  fromRedactions.getRedactedDocInfo\n);\n\nexport const getRedactionEnt = createSelector(\n  getRedactionState,\n  fromRedactions.getRedactionEnt\n);\n\nexport const getRedactionArray = createSelector(\n  getRedactionEnt,\n  fromDocument.getDocumentId,\n  (ent, documentId) => {\n    const redactions = Object.keys(ent).map(key => ent[key]);\n    return { redactions, documentId };\n  }\n);\n\nexport const getRedactionsPerPage = createSelector(\n  fromDocument.getPages,\n  getRedactionPages,\n  (pages, pageEnt) => {\n    if (pages && pageEnt) {\n      const arr = [];\n      Object.keys(pages).forEach(key => {\n        arr.push({\n          anno: pageEnt[key] ? pageEnt[key] : [],\n          styles: pages[key].styles\n        });\n      });\n\n      return arr;\n    }\n  }\n);\n\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport { v4 as uuid } from 'uuid';\nimport { filter, take } from 'rxjs/operators';\n\nimport { Rectangle } from '../../annotations/annotation-set/annotation-view/rectangle/rectangle.model';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromSelectors from '../../store/selectors/redaction.selectors';\nimport * as fromRedaSelectors from '../../store/selectors/redaction.selectors';\nimport * as fromDocument from '../../store/selectors/document.selectors';\nimport * as fromActions from '../../store/actions/redaction.actions';\nimport * as fromRedactionActions from '../../store/actions/redaction.actions';\nimport * as fromRedaActions from '../../store/actions/redaction.actions';\nimport { SelectionAnnotation } from '../../annotations/models/event-select.model';\nimport { ViewerEventService } from '../../viewers/viewer-event.service';\nimport { Redaction } from '../services/redaction.model';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\n\n@Component({\n    selector: 'mv-redactions',\n    templateUrl: './redaction.component.html',\n    standalone: false\n})\nexport class RedactionComponent implements OnInit, OnDestroy {\n\n  @Input() zoom: number;\n  @Input() rotate: number;\n\n  redactionsPerPage$: Observable<any>; // todo add type\n  selectedRedaction$: Observable<SelectionAnnotation | {}>;\n  rectangles: Rectangle[];\n  drawMode: boolean;\n  documentId: string;\n\n  private $subscription: Subscription;\n\n  constructor(private store: Store<fromStore.State>,\n    private readonly viewerEvents: ViewerEventService,\n    private toolbarEvents: ToolbarEventService) { }\n\n  ngOnInit(): void {\n    this.redactionsPerPage$ = this.store.pipe(select(fromSelectors.getRedactionsPerPage));\n    this.selectedRedaction$ = this.store.pipe(select(fromSelectors.getSelected));\n    this.$subscription = this.toolbarEvents.drawModeSubject.subscribe(drawMode => this.drawMode = drawMode);\n    this.$subscription.add(this.store.pipe(select(fromSelectors.getRedactedDocumentInfo), filter(value => !!value))\n      .subscribe(redactedDocInfo => this.downloadDocument(redactedDocInfo)));\n    this.$subscription.add(this.store.pipe(select(fromDocument.getDocumentId)).subscribe(docId => this.documentId = docId));\n    this.$subscription.add(this.viewerEvents.textHighlight.subscribe(highlight => this.markTextRedaction(highlight)));\n    this.toolbarEvents.applyRedactToDocument.subscribe(() => {\n      this.store.pipe(select(fromRedaSelectors.getRedactionArray), take(1)).subscribe(redactions => {\n        this.store.dispatch(new fromRedaActions.Redact(redactions));\n      });\n    });\n    this.toolbarEvents.clearAllRedactMarkers.subscribe(() => {\n      this.store.dispatch(new fromRedaActions.UnmarkAll(this.documentId));\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.$subscription.unsubscribe();\n  }\n\n  markTextRedaction(highlight) {\n    const redactionHighlight = highlight.rectangles;\n    if (redactionHighlight && redactionHighlight.length) {\n      this.saveRedaction(highlight.page, [...redactionHighlight]);\n    }\n    this.toolbarEvents.highlightModeSubject.next(false);\n  }\n\n  markBoxRedaction({ rectangles, page }) {\n    this.saveRedaction(page, rectangles);\n    this.toolbarEvents.drawModeSubject.next(false);\n  }\n\n  saveRedaction(page: number, rectangles: Rectangle[]) {\n    const redaction = { page, rectangles, redactionId: uuid(), documentId: this.documentId };\n    this.store.dispatch(new fromRedactionActions.SaveRedaction(redaction));\n  }\n\n  onMarkerDelete(event) {\n    this.store.dispatch(new fromActions.DeleteRedaction(event));\n  }\n\n  selectRedaction(event) {\n    this.store.dispatch(new fromActions.SelectRedaction(event));\n  }\n\n  onMarkerUpdate(redaction: Redaction) {\n    this.store.dispatch(new fromActions.SaveRedaction(redaction));\n  }\n\n  downloadDocument({ blob, filename }) {\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    document.body.appendChild(a);\n    a.setAttribute('style', 'display: none');\n    a.href = url;\n    a.download = filename;\n    a.click();\n    a.remove();\n    URL.revokeObjectURL(url);\n    this.store.dispatch(new fromRedactionActions.ResetRedactedDocument());\n  }\n}\n","<div class=\"pageContainer\">\n  <div *ngFor=\"let redaction of (redactionsPerPage$ | async);  index as i\"\n       class=\"pageContainer__page\"\n       [ngStyle]=\"{\n       'width.px': redaction.styles.width,\n       'height.px': redaction.styles.height\n       }\"\n      [attr.redaction-page-num]=\"i+1\"\n       [ngClass]=\"{ 'pageContainer__page--draw' : drawMode }\">\n    <mv-box-highlight-create\n      [page]=\"i + 1\"\n      [pageHeight]=\"redaction.styles.height\"\n      [pageWidth]=\"redaction.styles.width\"\n      [rotate]=\"rotate\"\n      [zoom]=\"zoom\"\n      (saveSelection)=\"markBoxRedaction($event)\">\n    </mv-box-highlight-create>\n    <div class=\"pageContainer__page-item\">\n      <ng-container *ngFor=\"let anno of redaction.anno\">\n        <!--  TODO rename this to selection -->\n        <mv-annotation [annotation]=\"anno\"\n                       [zoom]=\"zoom\"\n                       [rotate]=\"rotate\"\n                       [selectedAnnoId]=\"selectedRedaction$ | async\"\n                       [pageHeight]=\"redaction.styles.height\"\n                       [pageWidth]=\"redaction.styles.width\"\n                       (update)=\"onMarkerUpdate($event)\"\n                       (delete)=\"onMarkerDelete($event)\"\n                       (annotationClick)=\"selectRedaction($event)\">\n        </mv-annotation>\n      </ng-container>\n    </div>\n  </div>\n</div>\n","import {Bookmark, BookmarksPerPage} from '../../viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces';\nimport {Component, Input, OnInit} from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromSelectors from '../../store/selectors/bookmark.selectors';\nimport { Observable } from 'rxjs';\n\n@Component({\n    selector: 'mv-bookmark-icons',\n    templateUrl: './bookmark-icons.component.html',\n    standalone: false\n})\nexport class BookmarkIconsComponent implements OnInit {\n\n  @Input() zoom: number;\n  @Input() rotate: number;\n  bookmarksPerPage$: Observable<BookmarksPerPage[]>;\n  bookmarks: Bookmark[];\n  documentId: string;\n\n  constructor(private store: Store<fromStore.State>) {}\n\n  ngOnInit(): void {\n    this.bookmarksPerPage$ = this.store.pipe(select(fromSelectors.getBookmarksPerPage));\n  }\n\n}\n","<div class=\"pageContainer\">\n  <div *ngFor=\"let bookmarks of (bookmarksPerPage$ | async);  index as i\"\n       class=\"pageContainer__page\"\n       [ngStyle]=\"{\n         'width.px': bookmarks.styles.width,\n         'height.px': bookmarks.styles.height\n       }\">\n    <div class=\"pageContainer__page-item\">\n      <ng-container *ngFor=\"let bMrk of bookmarks.bookmark\">\n        <div class=\"bookmark__here\"\n           [style.width]=\"16 * zoom + 'px'\"\n           [style.height]=\"24 * zoom + 'px'\"\n           [style.top]=\"bMrk.yCoordinate * zoom + 'px'\"\n           [title]=\"bMrk.name\">\n        </div>\n      </ng-container>\n    </div>\n  </div>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport { IcpParticipant, IcpState } from '../icp.interfaces';\nimport { select, Store } from '@ngrx/store';\nimport * as fromSelectors from '../../store/selectors/icp.selectors';\nimport { IcpEventService } from '../../toolbar/icp-event.service';\n\n@Component({\n    selector: 'mv-participants-list',\n    templateUrl: './participants-list.component.html',\n    standalone: false\n})\nexport class ParticipantsListComponent implements OnInit, OnDestroy {\n\n  subscription: Subscription;\n  participants$: Observable<IcpParticipant[]>;\n  presenter$: Observable<IcpParticipant>;\n  isPresenter$: Observable<boolean>;\n\n  showParticipantsList = false;\n\n  constructor(private readonly toolbarEvents: ToolbarEventService,\n              private store: Store<IcpState>,\n              private readonly icpEventService: IcpEventService) {}\n\n  ngOnInit() {\n    this.participants$ = this.store.pipe(select(fromSelectors.getParticipants));\n    this.presenter$ = this.store.pipe(select(fromSelectors.getPresenter));\n    this.isPresenter$ = this.store.pipe(select(fromSelectors.isPresenter));\n\n    this.subscription = this.icpEventService.participantsListVisible.subscribe(isVisible => this.showParticipantsList = isVisible);\n  }\n\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n}\n","<div class=\"comments-panel comment-container icp-mode\" [ngClass]=\"{'expanded': showParticipantsList }\">\n\n  <div class=\"participant__card no-shadow\">\n    <p class=\"participant__name\">All Participants</p>\n  </div>\n\n  <div *ngIf=\"(presenter$ | async)?.username !== ''\" class=\"participant__card\">\n    <div class=\"participant__header\"> Presenting </div>\n    <p class=\"participant__name\">{{(presenter$ | async)?.username}}</p>\n  </div>\n\n  <div *ngIf=\"(participants$ | async).length > 1\" class=\"participant__card\">\n    <div class=\"participant__header\">Following</div>\n    <ng-container *ngFor=\"let participant of (participants$ | async)\">\n        <p *ngIf=\"participant.id !== (presenter$ | async)?.id\" class=\"participant__name\">{{participant.username}}</p>\n    </ng-container>\n  </div>\n</div>\n","import {\n  AfterContentInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { asyncScheduler, BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { debounceTime, filter, tap, throttleTime } from 'rxjs/operators';\nimport { select, Store } from '@ngrx/store';\n\nimport { DocumentLoadProgress, PageEvent, PdfJsWrapper } from './pdf-js/pdf-js-wrapper';\nimport { PdfJsWrapperFactory } from './pdf-js/pdf-js-wrapper.provider';\nimport { AnnotationSet } from '../../annotations/annotation-set/annotation-set.model';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport { PrintService } from '../../print.service';\nimport { ResponseType, ViewerException } from '../viewer-exception.model';\nimport { ToolbarButtonVisibilityService } from '../../toolbar/toolbar-button-visibility.service';\nimport { CommentSetComponent } from '../../annotations/comment-set/comment-set.component';\nimport { Outline } from './side-bar/outline-item/outline.model';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromDocumentActions from '../../store/actions/document.actions';\nimport { PdfPositionUpdate } from '../../store/actions/document.actions';\nimport * as fromTagActions from '../../store/actions/tag.actions';\nimport { SetCaseId } from '../../store/actions/icp.actions';\nimport * as fromDocumentsSelector from '../../store/selectors/document.selectors';\nimport { IcpState } from '../../icp/icp.interfaces';\nimport { ViewerEventService } from '../viewer-event.service';\nimport { IcpService } from '../../icp/icp.service';\nimport { IcpEventService } from '../../toolbar/icp-event.service';\nimport { HighlightCreateDirective } from '../../annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive';\n\n@Component({\n    selector: 'mv-pdf-viewer',\n    templateUrl: './pdf-viewer.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class PdfViewerComponent implements AfterContentInit, OnChanges, OnDestroy {\n\n  @Output() mediaLoadStatus = new EventEmitter<ResponseType>();\n  @Output() pdfViewerException = new EventEmitter<ViewerException>();\n  @Output() documentTitle = new EventEmitter<string>();\n\n  @Input() downloadUrl: string;\n  @Input() url: string;\n  @Input() downloadFileName: string;\n\n  @Input() enableAnnotations: boolean;\n  @Input() enableRedactions: boolean;\n  @Input() enableICP: boolean;\n  @Input() annotationSet: AnnotationSet | null;\n  @Input() enableRedactSearch: AnnotationSet | null;\n\n  @Input() height: string;\n  pageHeights = [];\n  rotation = 0;\n  zoom = 1;\n\n  @Input() caseId: string;\n\n  highlightMode: Observable<boolean>;\n  drawMode: BehaviorSubject<boolean>;\n\n  documentOutline: Outline[];\n  loadingDocument = false;\n  loadingDocumentProgress: number;\n  errorMessage: string;\n  hasDifferentPageSize = false;\n\n  @ViewChild('viewerContainer', { static: true }) viewerContainer: ElementRef<HTMLDivElement>;\n  @ViewChild('pdfViewer', { static: false }) pdfViewer: ElementRef<HTMLDivElement>;\n  @ViewChild(HighlightCreateDirective, { static: false }) highlightCreateDirective: HighlightCreateDirective;\n\n  private pdfWrapper: PdfJsWrapper;\n  private $subscription: Subscription;\n  private viewerException: ViewerException;\n  showCommentsPanel: boolean;\n  showIcpParticipantsList: boolean;\n  enableGrabNDrag = false;\n\n  showSelectionStartCursor = false;\n  selectionStartCursorX: number;\n  selectionStartCursorY: number;\n\n  showSelectionEndCursor = false;\n  selectionEndCursorX: number;\n  selectionEndCursorY: number;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    private icpStore: Store<IcpState>,\n    private readonly pdfJsWrapperFactory: PdfJsWrapperFactory,\n    private readonly printService: PrintService,\n    public readonly toolbarEvents: ToolbarEventService,\n    private readonly viewerEvents: ViewerEventService,\n    private icpService: IcpService,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    private readonly icpEventService: IcpEventService\n  ) {\n    this.highlightMode = toolbarEvents.highlightModeSubject.pipe(tap(() => {\n      this.store.dispatch(new fromTagActions.ClearFilterTags());\n    }));\n    this.drawMode = toolbarEvents.drawModeSubject;\n  }\n\n  async ngAfterContentInit(): Promise<void> {\n    this.pdfWrapper.documentLoadProgress.subscribe(v => this.onDocumentLoadProgress(v));\n    this.pdfWrapper.documentLoaded.subscribe(() => this.onDocumentLoaded());\n    this.pdfWrapper.documentLoadFailed.subscribe((error) => this.onDocumentLoadFailed(error));\n    this.pdfWrapper.outlineLoaded.subscribe(outline => this.documentOutline = outline);\n    this.pdfWrapper.pageRendered.subscribe((event) => this.updatePages(event));\n    this.$subscription = this.toolbarEvents.printSubject\n      .subscribe(() => this.printService.printDocumentNatively(this.url));\n    this.$subscription.add(this.toolbarEvents.downloadSubject.subscribe(() =>\n      this.pdfWrapper.downloadFile(this.downloadUrl || this.url, this.downloadFileName)\n    ));\n    this.$subscription.add(this.toolbarEvents.rotateSubject.subscribe(rotate => this.rotateDocument(rotate)));\n    this.$subscription.add(this.toolbarEvents.zoomSubject.subscribe(zoom => this.setZoom(zoom)));\n    this.$subscription.add(this.toolbarEvents.stepZoomSubject.subscribe(zoom => this.stepZoom(zoom)));\n    this.$subscription.add(this.toolbarEvents.searchSubject.subscribe(search => this.pdfWrapper.search(search)));\n    this.$subscription.add(\n      this.toolbarEvents.setCurrentPageSubject.subscribe(pageNumber => this.pdfWrapper.setPageNumber(pageNumber))\n    );\n    this.$subscription.add(\n      this.toolbarEvents.changePageByDeltaSubject.subscribe(pageNumber => this.pdfWrapper.changePageNumber(pageNumber))\n    );\n    this.$subscription.add(this.toolbarEvents.grabNDrag.subscribe(grabNDrag => this.enableGrabNDrag = grabNDrag));\n    this.$subscription.add(this.toolbarEvents.commentsPanelVisible.subscribe(toggle => {\n      this.showCommentsPanel = toggle;\n    })\n    );\n    this.$subscription.add(this.viewerEvents.navigationEvent.subscribe(dest => this.goToDestination(dest)));\n    this.$subscription.add(this.viewerEvents.navigationEventICP.subscribe(destination => this.goToDestinationICP(destination)));\n    this.$subscription.add(\n      this.icpEventService.participantsListVisible.subscribe(toggle => this.showIcpParticipantsList = toggle)\n    );\n    this.$subscription.add(this.pdfWrapper.positionUpdated.asObservable()\n      .pipe(throttleTime(500, asyncScheduler, { leading: true, trailing: true }))\n      .subscribe(event => this.store.dispatch(new PdfPositionUpdate(event.location)))\n    );\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (!this.pdfWrapper) {\n      this.pdfWrapper = this.pdfJsWrapperFactory.create(this.viewerContainer);\n    }\n    if (changes.url && this.pdfWrapper) {\n      await this.loadDocument();\n      if (this.enableRedactions) {\n        this.toolbarEvents.redactionMode.pipe(filter(value => !!value))\n          .subscribe(() => this.resetRotation());\n      }\n    }\n    if (changes.caseId) {\n      this.icpStore.dispatch(new SetCaseId(this.caseId));\n    }\n  }\n\n  resetRotation() {\n    if (this.hasDifferentPageSize) {\n      this.pdfWrapper.resetRotation(0);\n      this.rotation = 0;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.$subscription.unsubscribe();\n  }\n\n  private async loadDocument() {\n    this.initDocumentProgress();\n    await this.pdfWrapper.loadDocument(this.url);\n    this.documentTitle.emit(this.pdfWrapper.getCurrentPDFTitle());\n    this.setPageHeights();\n    this.$subscription.add(this.store.pipe(select(fromDocumentsSelector.getPageDifference))\n      .subscribe(hasDifferentPageSie => this.hasDifferentPageSize = hasDifferentPageSie));\n  }\n\n  private onDocumentLoadProgress(progress: DocumentLoadProgress) {\n    if (progress.total) {\n      this.loadingDocumentProgress = Math.min(100, Math.ceil(progress.loaded / progress.total * 100));\n    }\n  }\n\n  private onDocumentLoaded() {\n    this.loadingDocument = false;\n    this.mediaLoadStatus.emit(ResponseType.SUCCESS);\n  }\n\n  private onDocumentLoadFailed(error: Error) {\n    this.loadingDocument = false;\n    this.viewerException = new ViewerException(error.name, { message: error.message });\n    this.errorMessage = `Could not load the document \"${this.url}\"`;\n\n    this.mediaLoadStatus.emit(ResponseType.FAILURE);\n    this.pdfViewerException.emit(this.viewerException);\n  }\n\n  private updatePages(event: PageEvent[]) {\n    if (this.enableAnnotations) {\n      this.store.dispatch(new fromDocumentActions.AddPages(event));\n    }\n  }\n\n  @Input()\n  set searchBarHidden(hidden: boolean) {\n    if (this.pdfWrapper && hidden) {\n      this.pdfWrapper.clearSearch();\n    }\n  }\n\n  toggleCommentsSummary() {\n    this.toolbarEvents.toggleCommentsSummary(!this.toolbarEvents.showCommentSummary.getValue());\n  }\n\n  private rotateDocument(rotation: number) {\n    const pageNumber = this.pdfWrapper.getPageNumber();\n    this.pdfWrapper.rotate(rotation);\n    this.pdfWrapper.setPageNumber(pageNumber);\n    this.rotation = (this.rotation + rotation) % 360;\n    this.setPageHeights();\n  }\n\n  private initDocumentProgress() {\n    this.loadingDocument = true;\n    this.loadingDocumentProgress = null;\n    this.errorMessage = null;\n  }\n\n  private setZoom(zoomFactor: number) {\n    if (!isNaN(zoomFactor)) {\n      this.pdfWrapper.setZoom(zoomFactor);\n      this.zoom = this.calculateZoomValue(zoomFactor);\n      this.setPageHeights();\n    }\n  }\n\n  private stepZoom(zoomFactor: number) {\n    if (!isNaN(zoomFactor)) {\n      this.pdfWrapper.stepZoom(zoomFactor);\n      this.zoom = this.calculateZoomValue(this.zoom, zoomFactor);\n      this.setPageHeights();\n    }\n  }\n\n  setPageHeights() {\n    this.pageHeights = [];\n    const pdfViewerChildren = this.pdfViewer.nativeElement.children;\n    for (let i = 0; i < pdfViewerChildren.length; i++) {\n      this.pageHeights.push(pdfViewerChildren[i].clientHeight);\n    }\n  }\n\n  calculateZoomValue(zoomValue, increment = 0) {\n    const newZoomValue = zoomValue + increment;\n    if (newZoomValue > 5) {\n      return 5;\n    }\n    if (newZoomValue < 0.1) {\n      return 0.1;\n    }\n    return +newZoomValue.toFixed(2);\n  }\n\n  private goToDestination(destination: any[]) {\n    const currentRotation = this.rotation;\n    this.rotateDocument(360 - this.rotation);\n    this.pdfWrapper.navigateTo(destination);\n    setTimeout(() => {\n      this.rotateDocument(currentRotation);\n    }, 10);\n  }\n\n  private goToDestinationICP(destination: any[]) {\n    this.pdfWrapper.nativeNavigate(destination);\n  }\n\n  getCurrentPageNumber(): number {\n    return this.pdfWrapper.getPageNumber();\n  }\n\n  onKeyboardTextSelectionConfirmed(): void {\n    if (this.highlightCreateDirective) {\n      this.highlightCreateDirective.onKeyboardSelectionConfirmed();\n    }\n  }\n\n  onKeyboardTextSelectionCancelled(): void {\n    const selection = window.getSelection();\n    if (selection) {\n      selection.removeAllRanges();\n    }\n  }\n\n  onSelectionStartCursorChanged(position: { x: number, y: number, visible: boolean }): void {\n    if (position.visible) {\n      this.selectionStartCursorX = position.x;\n      this.selectionStartCursorY = position.y;\n      this.showSelectionStartCursor = true;\n    } else {\n      this.showSelectionStartCursor = false;\n    }\n  }\n\n  onSelectionEndCursorChanged(position: { x: number, y: number, visible: boolean }): void {\n    if (position.visible) {\n      this.selectionEndCursorX = position.x;\n      this.selectionEndCursorY = position.y;\n      this.showSelectionEndCursor = true;\n    } else {\n      this.showSelectionEndCursor = false;\n    }\n  }\n  \n  onViewerContainerFocusIn(event: FocusEvent): void {\n    const elementFrom = event.relatedTarget as HTMLElement;\n    const elementTo = event.target as HTMLElement;\n\n    const comingFromSidebar = !!(\n      elementFrom?.closest('#sidebarContainer') || \n      elementFrom?.closest('#sidebarContent')\n    );\n    const goingToViewer = !!elementTo?.closest('#viewerContainer');\n\n    if (!comingFromSidebar || !goingToViewer) {\n      return;\n    }\n\n    const isTextLayer = elementTo?.classList.contains('textLayer');\n\n    if (isTextLayer) {\n      const focusedPageElement = elementTo.closest('[data-page-number]');\n      const focusedPageNumber = focusedPageElement ? parseInt(focusedPageElement.getAttribute('data-page-number')) : null;\n      const currentPage = this.getCurrentPageNumber();\n\n      if (focusedPageNumber !== null && focusedPageNumber !== currentPage) {\n        const currentPageElement = this.viewerContainer.nativeElement.querySelector(`[data-page-number='${currentPage}']`);\n\n        if (currentPageElement) {\n          const currentPageTextLayer = currentPageElement.querySelector('.textLayer') as HTMLElement;\n          if (currentPageTextLayer) {\n            currentPageTextLayer.focus();\n          }\n        }\n      }\n    }\n  }\n}\n","<mv-side-bar\n  *ngIf=\"toolbarEvents.sidebarOpen\"\n  id=\"sidebarContainer\"\n  [url]=\"url\"\n  [zoom]=\"zoom\"\n  [rotate]=\"rotation\"\n  [outline]=\"documentOutline\"\n  [annotationsEnabled]=\"enableAnnotations\"\n  [currentPageNumber]=\"getCurrentPageNumber()\"\n>\n</mv-side-bar>\n<mv-comment-set-header\n  *ngIf=\"enableAnnotations\"\n  [ngClass]=\"{ 'show-comments-panel': showCommentsPanel }\"\n  [isHidden]=\"!showCommentsPanel\"\n  [showCommentSummary]=\"toolbarButtons.showCommentSummary\"\n  (showCommentSummaryDialog)=\"toggleCommentsSummary()\"\n>\n</mv-comment-set-header>\n<mv-participants-list></mv-participants-list>\n<div\n  class=\"pdfContainer\"\n  [ngStyle]=\"{ height: height }\"\n  [ngClass]=\"{ pdfContainer: true, hidden: errorMessage }\"\n>\n  <mv-redaction-search-bar></mv-redaction-search-bar>\n  <div\n    #viewerContainer\n    mvGrabNDrag\n    [dragX]=\"viewerContainer\"\n    [dragEnabled]=\"enableGrabNDrag\"\n    id=\"viewerContainer\"\n    class=\"viewer-container\"\n    [class.annotations]=\"enableAnnotations\"\n    [class.show-comments-panel]=\"\n      (showCommentsPanel || showIcpParticipantsList) &&\n      (toolbarEvents.redactionMode | async) !== true\n    \"\n    [class.grabNDrag]=\"enableGrabNDrag\"\n    (focusin)=\"onViewerContainerFocusIn($event)\"\n  >\n    <div\n      #pdfViewer\n      class=\"pdfViewer\"\n      mvCreateTextHighlight\n      mvKeyboardTextHighlight\n      [enabled]=\"highlightMode | async\"\n      [tabindex]=\"(highlightMode | async) ? 0 : -1\"\n      (selectionConfirmed)=\"onKeyboardTextSelectionConfirmed()\"\n      (selectionCancelled)=\"onKeyboardTextSelectionCancelled()\"\n      (cursorPositionChanged)=\"onSelectionStartCursorChanged($event)\"\n      (selectionCursorPositionChanged)=\"onSelectionEndCursorChanged($event)\"\n      [ngClass]=\"{\n        hidden: false,\n        highlightMode: highlightMode | async,\n        drawMode: drawMode | async\n      }\"\n    ></div>\n    <div *ngIf=\"showSelectionStartCursor\"\n      class=\"selection-start-cursor\"\n      [style.position]=\"'fixed'\"\n      [style.top]=\"selectionStartCursorY + 'px'\"\n      [style.left]=\"selectionStartCursorX + 'px'\">\n    </div>\n    <div *ngIf=\"showSelectionEndCursor\"\n      class=\"selection-end-cursor\"\n      [style.position]=\"'fixed'\"\n      [style.top]=\"selectionEndCursorY + 'px'\"\n      [style.left]=\"selectionEndCursorX + 'px'\">\n    </div>\n    <mv-redactions\n      *ngIf=\"toolbarEvents.redactionMode | async; else annotationTemplate\"\n      [zoom]=\"zoom\"\n      [rotate]=\"rotation\"\n    ></mv-redactions>\n    <ng-template #annotationTemplate>\n      <mv-metadata-layer\n        *ngIf=\"enableAnnotations && annotationSet\"\n        [zoom]=\"zoom\"\n        [rotate]=\"rotation\"\n      >\n      </mv-metadata-layer>\n      <mv-bookmark-icons [zoom]=\"zoom\" [rotate]=\"rotation\"> </mv-bookmark-icons>\n    </ng-template>\n  </div>\n  <mv-comment-set\n    [contentScrollTop]=\"viewerContainer.scrollTop\"\n    *ngIf=\"\n      enableAnnotations &&\n      annotationSet &&\n      (toolbarEvents.redactionMode | async) !== true\n    \"\n    [annotationSet]=\"annotationSet\"\n    [zoom]=\"zoom\"\n    [rotate]=\"rotation\"\n    [height]=\"pdfViewer.offsetHeight\"\n    [pageHeights]=\"pageHeights\"\n  >\n  </mv-comment-set>\n  <div class=\"loadingMessage\" *ngIf=\"loadingDocument\">\n    <h3 class=\"govuk-heading-m\">\n      {{ \"Loading...\" | rpxTranslate}}{{\n        loadingDocumentProgress ? loadingDocumentProgress + \"%\" : \"\"\n      }}\n    </h3>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ViewerUtilService {\n  constructor(\n    private http: HttpClient) {\n  }\n\n  public validateFile(url: string) {\n    return this.http.head(url);\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrintService } from '../../print.service';\nimport { AnnotationSet } from '../../annotations/annotation-set/annotation-set.model';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport { ResponseType, ViewerException } from '../viewer-exception.model';\nimport { ViewerUtilService } from '../viewer-util.service';\nimport { ToolbarButtonVisibilityService } from '../../toolbar/toolbar-button-visibility.service';\nimport { Store } from '@ngrx/store';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromDocument from '../../store/actions/document.actions';\nimport * as fromAnnotationActions from '../../store/actions/annotation.actions';\nimport { ViewerEventService } from '../viewer-event.service';\n\n@Component({\n    selector: 'mv-image-viewer',\n    templateUrl: './image-viewer.component.html',\n    standalone: false\n})\nexport class ImageViewerComponent implements OnInit, OnDestroy, OnChanges {\n\n  @Input() url: string;\n  @Input() downloadFileName: string;\n\n  @Input() enableAnnotations: boolean;\n  @Input() annotationSet: AnnotationSet | null;\n\n  @Input() height: string;\n\n  @Output() mediaLoadStatus = new EventEmitter<ResponseType>();\n  @Output() imageViewerException = new EventEmitter<ViewerException>();\n\n  errorMessage: string;\n\n  @ViewChild('img', {static: false}) img: ElementRef;\n  rotation = 0;\n  zoom = 1;\n\n  private subscriptions: Subscription[] = [];\n  private viewerException: ViewerException;\n  private response: Subscription;\n\n  showCommentsPanel: boolean;\n  enableGrabNDrag = false;\n  imageHeight: number;\n  imageWidth: number;\n  imageLeft: number;\n  imageTop: number;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    private readonly printService: PrintService,\n    private readonly viewerUtilService: ViewerUtilService,\n    public readonly toolbarEvents: ToolbarEventService,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    private viewerEvents: ViewerEventService\n  ) { }\n\n  ngOnInit(): void {\n    this.subscriptions.push(\n      this.toolbarEvents.rotateSubject.subscribe(rotation => this.rotateImage(rotation)),\n      this.toolbarEvents.zoomSubject.subscribe(zoom => this.setZoom(zoom)),\n      this.toolbarEvents.stepZoomSubject.subscribe(zoom => this.stepZoom(zoom)),\n      this.toolbarEvents.printSubject.subscribe(() => this.printService.printDocumentNatively(this.url)),\n      this.toolbarEvents.downloadSubject.subscribe(() => this.download()),\n      this.toolbarEvents.grabNDrag.subscribe(grabNDrag => this.enableGrabNDrag = grabNDrag),\n      this.toolbarEvents.commentsPanelVisible.subscribe(toggle => this.showCommentsPanel = toggle)\n    );\n  }\n\n  @HostListener('mousedown', ['$event'])\n  onImageViewerClick(event: MouseEvent) {\n    const classNme = (event.target as Element).className;\n    if (classNme.startsWith('pageContainer')) {\n      this.store.dispatch(\n        new fromAnnotationActions.SelectedAnnotation({\n          annotationId: '',\n          selected: false,\n          editable: false,\n        })\n      );\n      this.viewerEvents.clearCtxToolbar();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.filter(subscription => !subscription.closed)\n      .forEach(subscription => subscription.unsubscribe());\n    if (this.response) {\n      this.response.unsubscribe();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.url) {\n      this.errorMessage = null;\n      this.toolbarEvents.reset();\n    }\n  }\n\n  private rotateImage(rotation: number) {\n    this.rotation = (this.rotation + rotation) % 360;\n    this.initAnnoPage(this.img.nativeElement);\n  }\n\n  private async setZoom(zoomFactor: number) {\n    if (!isNaN(zoomFactor)) {\n      await this.setZoomValue(this.calculateZoomValue(zoomFactor));\n      this.img.nativeElement.width = this.img.nativeElement.naturalWidth * this.zoom;\n      this.initAnnoPage(this.img.nativeElement);\n    }\n  }\n\n  private async stepZoom(zoomFactor: number) {\n    if (!isNaN(zoomFactor)) {\n      await this.setZoomValue(this.calculateZoomValue(this.zoom, zoomFactor));\n      this.img.nativeElement.width = this.img.nativeElement.naturalWidth * this.zoom;\n      this.initAnnoPage(this.img.nativeElement);\n    }\n  }\n\n  private download() {\n    const a = document.createElement('a');\n    document.body.appendChild(a);\n    a.setAttribute('style', 'display: none');\n    a.href = this.url;\n    a.download = this.downloadFileName;\n    a.click();\n    a.remove();\n  }\n\n  // the returned promise is a work-around\n  setZoomValue(zoomValue) {\n    return new Promise((resolve) => {\n      this.zoom = zoomValue;\n      this.toolbarEvents.zoomValueSubject.next(zoomValue);\n      resolve(true);\n    });\n  }\n\n  calculateZoomValue(zoomValue, increment = 0) {\n    const newZoomValue = zoomValue + increment;\n    if (newZoomValue > 5) { return 5; }\n    if (newZoomValue < 0.1) { return 0.1; }\n    return +newZoomValue.toFixed(2);\n  }\n\n  onLoadError(url) {\n    this.response = this.viewerUtilService.validateFile(url)\n      .subscribe(\n        next => next,\n        error => {\n          this.viewerException = new ViewerException(error.name,\n            { httpResponseCode: error.status, message: error.message });\n        });\n\n    this.errorMessage = `Could not load the image \"${this.url}\"`;\n    this.mediaLoadStatus.emit(ResponseType.FAILURE);\n    this.imageViewerException.emit(this.viewerException);\n  }\n\n  onLoad(img: any) {\n    this.mediaLoadStatus.emit(ResponseType.SUCCESS);\n    this.initAnnoPage(img);\n  }\n\n  initAnnoPage(img: any) {\n    this.imageHeight = this.rotation % 180 !== 0 ? img.offsetWidth : img.offsetHeight;\n    this.imageWidth = this.rotation % 180 !== 0 ? img.offsetHeight : img.offsetWidth;\n    this.imageLeft = this.rotation % 180 !== 0 ? img.offsetTop : img.offsetLeft;\n    this.imageTop = this.rotation % 180 !== 0 ? img.offsetLeft : img.offsetTop;\n    const payload: any = [{\n      div: {\n        scrollHeight: this.imageHeight,\n        scrollWidth: this.imageWidth,\n        offsetLeft: this.imageLeft,\n      },\n      pageNumber: 1,\n      scale: this.zoom,\n      rotation: this.rotation,\n      id: 1\n    }];\n\n    this.store.dispatch(new fromDocument.AddPages(payload));\n  }\n\n  toggleCommentsSummary() {\n    this.toolbarEvents.toggleCommentsSummary(!this.toolbarEvents.showCommentSummary.getValue());\n  }\n}\n","<mv-comment-set-header\n  [ngClass]=\"{ 'show-comments-panel': showCommentsPanel }\"\n  [isHidden]=\"!showCommentsPanel\"\n  [showCommentSummary]=\"toolbarButtons.showCommentSummary\"\n  (showCommentSummaryDialog)=\"toggleCommentsSummary()\"\n>\n</mv-comment-set-header>\n<div\n  id=\"viewer-wrapper\"\n  [ngStyle]=\"{ height: height }\"\n  [ngClass]=\"{ grabNDrag: enableGrabNDrag }\"\n  *ngIf=\"url && !errorMessage\"\n>\n  <div\n    #imageContainer\n    id=\"image-container\"\n    mvGrabNDrag\n    [dragX]=\"imageContainer\"\n    [dragEnabled]=\"enableGrabNDrag\"\n    (scroll)=\"($event)\"\n    [ngClass]=\"{\n      'image-container': true,\n      annotations: enableAnnotations,\n      'show-comments-panel': showCommentsPanel\n    }\"\n  >\n    <img\n      #img\n      alt=\"\"\n      [src]=\"url\"\n      [ngClass]=\"'rot' + rotation\"\n      (error)=\"onLoadError(url)\"\n      (load)=\"onLoad(img)\"\n    />\n    <mv-redactions\n      *ngIf=\"toolbarEvents.redactionMode | async; else annotationTemplate\"\n      [zoom]=\"zoom\"\n      [rotate]=\"rotation\"\n    ></mv-redactions>\n    <ng-template #annotationTemplate>\n      <mv-metadata-layer\n        *ngIf=\"enableAnnotations && annotationSet\"\n        [zoom]=\"zoom\"\n        [rotate]=\"rotation\"\n      >\n      </mv-metadata-layer>\n    </ng-template>\n  </div>\n\n  <mv-comment-set\n    [contentScrollTop]=\"imageContainer.scrollTop\"\n    *ngIf=\"\n      enableAnnotations &&\n      annotationSet &&\n      (toolbarEvents.redactionMode | async) !== true\n    \"\n    [annotationSet]=\"annotationSet\"\n    [zoom]=\"zoom\"\n    [rotate]=\"rotation\"\n    [height]=\"imageHeight\"\n  >\n  </mv-comment-set>\n</div>\n","import { Component, ElementRef, Input, OnInit, ViewChild, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport { Subscription } from 'rxjs';\nimport { ResponseType, ViewerException } from '../viewer-exception.model';\nimport { ViewerUtilService } from '../viewer-util.service';\n\n@Component({\n    selector: 'mv-unsupported-viewer',\n    templateUrl: './unsupported-viewer.component.html',\n    standalone: false\n})\nexport class UnsupportedViewerComponent implements OnInit, OnDestroy {\n\n  @Input() url: string;\n  @Input() downloadFileName: string;\n  @Input() typeException: boolean;\n\n  @Output() loadStatus = new EventEmitter<ResponseType>();\n  @Output() unsupportedViewerException = new EventEmitter<ViewerException>();\n\n  @ViewChild('downloadLink', {static: false}) downloadLink: ElementRef;\n\n  private subscriptions: Subscription[] = [];\n  private viewerException: ViewerException;\n\n  constructor(\n    public readonly toolbarEvents: ToolbarEventService,\n    private readonly viewerUtilService: ViewerUtilService,\n  ) {}\n\n  public ngOnInit(): void {\n    this.subscriptions.push(\n      this.toolbarEvents.downloadSubject.subscribe(() => this.downloadLink.nativeElement.click()),\n      this.viewerUtilService.validateFile(this.url).subscribe(\n        next => next,\n        error => {\n          this.viewerException = new ViewerException(error.name,\n            { httpResponseCode: error.status, message: error.message });\n        }\n      )\n    );\n\n    this.loadStatus.emit(ResponseType.UNSUPPORTED);\n\n    if (!this.typeException) {\n      this.unsupportedViewerException.emit(this.viewerException);\n    }\n  }\n\n  ngOnDestroy(): void {\n    for (const subscription of this.subscriptions) {\n      subscription.unsubscribe();\n    }\n  }\n\n}\n","<div class=\"govuk-width-container\">\n  <div class=\"govuk-notification-banner__content\">\n    <p>\n      <span *ngIf=\"typeException, else unsupported\">The document could not be displayed, or the file type is unsupported.</span>\n      Please <a #downloadLink [href]=\"url\" [download]=\"downloadFileName\">click here to download</a>.\n    </p>\n    <ng-template #unsupported>\n      <span>This file type is not supported by this viewer.</span>\n    </ng-template>\n  </div>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { AnnotationSet } from '../../annotation-set/annotation-set.model';\nimport { Annotation } from '../../annotation-set/annotation-view/annotation.model';\nimport { Comment } from '../../comment-set/comment/comment.model';\n\n@Injectable()\nexport class AnnotationApiService {\n\n  public annotationApiUrl = '/em-anno';\n\n  private annotationSetBaseUrl = '/annotation-sets';\n  private annotationBaseUrl = '/annotations';\n\n  constructor(\n    private readonly httpClient: HttpClient\n  ) { }\n\n  public getAnnotationSet(documentId: string): Observable<any> { // todo add model\n    const fixedUrl = `${this.annotationSetsFullUrl}/filter?documentId=${documentId}`;\n    return this.httpClient\n      .get<AnnotationSet>(fixedUrl, { observe: 'response', withCredentials: true });\n  }\n\n  public postAnnotationSet(body: Partial<AnnotationSet>): Observable<AnnotationSet> {\n    return this.httpClient\n      .post<AnnotationSet>(this.annotationSetsFullUrl, body, { observe: 'response', withCredentials: true })\n      .pipe(\n        map(response => response.body),\n        catchError(() => [])\n      );\n  }\n\n  public getComments(annotationSet: Observable<AnnotationSet>): Observable<Comment[]> {\n    return annotationSet\n      .pipe(\n        map(this.sortAnnotations),\n        map(this.extractComments)\n      );\n  }\n\n  /**\n   * Sort the annotations in the response by page and then y position of their first rectangle\n   */\n  private sortAnnotations(r: AnnotationSet): Annotation[] {\n    return r.annotations.sort((a, b) => a.page !== b.page ? a.page - b.page : a.rectangles[0].y - b.rectangles[0].y);\n  }\n\n  private extractComments(annotations: Annotation[]) {\n    return [].concat(...annotations.map(a => a.comments));\n  }\n\n  public deleteAnnotation(annotationId: string): Observable<null> {\n    const url = `${this.annotationFullsUrl}/${annotationId}`;\n\n    return this.httpClient\n      .delete<null>(url, { observe: 'response', withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public postAnnotation(annotation: Partial<Annotation>): Observable<Annotation> {\n    return this.httpClient\n      .post<Annotation>(this.annotationFullsUrl, annotation, { observe: 'response', withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  get annotationSetsFullUrl() {\n    return this.annotationApiUrl + this.annotationSetBaseUrl;\n  }\n\n  get annotationFullsUrl() {\n    return this.annotationApiUrl + this.annotationBaseUrl;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Number Helper Service\n * */\n@Injectable({\n    providedIn: 'root'\n})\n\nexport class NumberHelperService {\n    constructor() { }\n\n    public isNumber(value: string | number): boolean {\n        return (\n            value !== null\n            && value !== undefined\n            && value !== ''\n            && !isNaN(Number(value.toString()))\n        );\n    }\n  }\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ToolbarFocusService {\n  focusToolbarButton(toolbarSelector: string, buttonId?: string, delay = 0): void {\n    setTimeout(() => {\n      const element = document.querySelector(toolbarSelector);\n      if (!element) {\n        return;\n      }\n\n      if (buttonId) {\n        const button = document.querySelector(`#${buttonId}`) as HTMLElement;\n        if (button) {\n          this.focusWithoutScrolling(button);\n          return;\n        }\n      }\n\n      if (element.tagName === 'BUTTON') {\n        this.focusWithoutScrolling(element as HTMLElement);\n        return;\n      }\n\n      const tabbableButton = element.querySelector('button[tabindex=\"0\"]') as HTMLElement;\n      if (tabbableButton) {\n        this.focusWithoutScrolling(tabbableButton);\n      }\n    }, delay);\n  }\n\n  private focusWithoutScrolling(element: HTMLElement): void {\n    try {\n      element.focus({ preventScroll: true });\n    } catch {\n      element.focus();\n    }\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\n\nexport type KeyboardNavOrientation = 'horizontal' | 'vertical';\n\n@Directive({\n  selector: '[mvKeyboardNav]',\n  standalone: false\n})\nexport class KeyboardNavDirective implements OnInit, OnDestroy {\n  @Input('mvKeyboardNav') orientation: KeyboardNavOrientation = 'horizontal';\n  @Output() itemFocused = new EventEmitter<HTMLElement>();\n  @Output() itemActivated = new EventEmitter<HTMLElement>();\n\n  private focusableItems: HTMLElement[] = [];\n  private currentFocusIndex = -1;\n  private mutationObserver: MutationObserver;\n  private isUsingArrowKeys = false;\n\n  constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n  ngOnInit(): void {\n    this.updateFocusableItems();\n    this.setupMutationObserver();\n  }\n\n  ngOnDestroy(): void {\n    if (this.mutationObserver) {\n      this.mutationObserver.disconnect();\n    }\n  }\n\n  private setupMutationObserver(): void {\n    this.mutationObserver = new MutationObserver(() => {\n      this.updateFocusableItems();\n    });\n\n    this.mutationObserver.observe(this.elementRef.nativeElement, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: ['class', 'disabled', 'hidden']\n    });\n  }\n\n  private updateFocusableItems(): void {\n    const allItems = Array.from(\n      this.elementRef.nativeElement.querySelectorAll<HTMLElement>('button:not([disabled])')\n    );\n\n    this.focusableItems = allItems.filter(item => this.isVisible(item));\n\n    if (this.isUsingArrowKeys) {\n      this.applyArrowKeyTabindex();\n    } else {\n      this.focusableItems.forEach(item => {\n        if (!item.hasAttribute('tabindex') || item.getAttribute('tabindex') === '-1') {\n          item.setAttribute('tabindex', '0');\n        }\n      });\n    }\n  }\n\n  private isVisible(element: HTMLElement): boolean {\n    if (!element) {\n      return false;\n    }\n\n    if (element.hasAttribute('disabled')) {\n      return false;\n    }\n\n    const computedStyle = window.getComputedStyle(element);\n    if (computedStyle.display === 'none' || computedStyle.visibility === 'hidden') {\n      return false;\n    }\n\n    // check if any parent element is hidden (up to the directive's host element)\n    let parent = element.parentElement;\n    while (parent && parent !== this.elementRef.nativeElement) {\n      const parentStyle = window.getComputedStyle(parent);\n      if (parentStyle.display === 'none' || parentStyle.visibility === 'hidden') {\n        return false;\n      }\n      parent = parent.parentElement;\n    }\n\n    return true;\n  }\n\n  private applyArrowKeyTabindex(): void {\n    if (this.focusableItems.length === 0) {\n      return;\n    }\n\n    let indexToMakeTabbable = 0;\n\n    if (this.currentFocusIndex >= 0 && this.currentFocusIndex < this.focusableItems.length) {\n      indexToMakeTabbable = this.currentFocusIndex;\n    } else {\n      const focusedElement = document.activeElement as HTMLElement;\n      const focusedIndex = this.focusableItems.indexOf(focusedElement);\n      if (focusedIndex !== -1) {\n        indexToMakeTabbable = focusedIndex;\n        this.currentFocusIndex = focusedIndex;\n      }\n    }\n\n    this.focusableItems.forEach((item, index) => {\n      item.setAttribute('tabindex', index === indexToMakeTabbable ? '0' : '-1');\n    });\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    const target = event.target as HTMLElement;\n    const currentIndex = this.focusableItems.indexOf(target);\n\n    if (currentIndex === -1) {\n      return;\n    }\n\n    let handled = false;\n    let isArrowKey = false;\n\n    switch (event.key) {\n      case 'Tab':\n        if (this.isUsingArrowKeys) {\n          this.isUsingArrowKeys = false;\n          this.focusableItems.forEach(item => {\n            item.setAttribute('tabindex', '0');\n          });\n        }\n        return;\n      case 'ArrowRight':\n        if (this.orientation === 'horizontal') {\n          isArrowKey = true;\n          if (!this.isUsingArrowKeys) {\n            this.isUsingArrowKeys = true;\n            this.applyArrowKeyTabindex();\n          }\n          this.focusNext(currentIndex);\n          handled = true;\n        }\n        break;\n\n      case 'ArrowLeft':\n        if (this.orientation === 'horizontal') {\n          isArrowKey = true;\n          if (!this.isUsingArrowKeys) {\n            this.isUsingArrowKeys = true;\n            this.applyArrowKeyTabindex();\n          }\n          this.focusPrevious(currentIndex);\n          handled = true;\n        }\n        break;\n\n      case 'ArrowDown':\n        if (this.orientation === 'vertical') {\n          isArrowKey = true;\n          if (!this.isUsingArrowKeys) {\n            this.isUsingArrowKeys = true;\n            this.applyArrowKeyTabindex();\n          }\n          this.focusNext(currentIndex);\n          handled = true;\n        }\n        break;\n\n      case 'ArrowUp':\n        if (this.orientation === 'vertical') {\n          isArrowKey = true;\n          if (!this.isUsingArrowKeys) {\n            this.isUsingArrowKeys = true;\n            this.applyArrowKeyTabindex();\n          }\n          this.focusPrevious(currentIndex);\n          handled = true;\n        }\n        break;\n\n      case 'Home':\n        isArrowKey = true;\n        if (!this.isUsingArrowKeys) {\n          this.isUsingArrowKeys = true;\n          this.applyArrowKeyTabindex();\n        }\n        this.focusFirst();\n        handled = true;\n        break;\n\n      case 'End':\n        isArrowKey = true;\n        if (!this.isUsingArrowKeys) {\n          this.isUsingArrowKeys = true;\n          this.applyArrowKeyTabindex();\n        }\n        this.focusLast();\n        handled = true;\n        break;\n\n      case 'Enter':\n      case ' ':\n        this.activateItem(target);\n        handled = true;\n        break;\n    }\n\n    if (handled) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n\n  private focusNext(currentIndex: number): void {\n    if (this.focusableItems.length === 0) {\n      return;\n    }\n\n    let nextIndex = currentIndex + 1;\n\n    if (nextIndex >= this.focusableItems.length) {\n      nextIndex = 0;\n    }\n\n    this.focusItemAtIndex(nextIndex);\n  }\n\n  private focusPrevious(currentIndex: number): void {\n    if (this.focusableItems.length === 0) {\n      return;\n    }\n\n    let previousIndex = currentIndex - 1;\n\n    if (previousIndex < 0) {\n      previousIndex = this.focusableItems.length - 1;\n    }\n\n    this.focusItemAtIndex(previousIndex);\n  }\n\n  private focusFirst(): void {\n    if (this.focusableItems.length > 0) {\n      this.focusItemAtIndex(0);\n    }\n  }\n\n  private focusLast(): void {\n    if (this.focusableItems.length > 0) {\n      this.focusItemAtIndex(this.focusableItems.length - 1);\n    }\n  }\n\n  private focusItemAtIndex(index: number): void {\n    if (index < 0 || index >= this.focusableItems.length) {\n      return;\n    }\n\n    this.currentFocusIndex = index;\n\n    this.focusableItems.forEach((item, i) => {\n      item.setAttribute('tabindex', i === index ? '0' : '-1');\n    });\n\n    this.focusableItems[index].focus();\n    this.itemFocused.emit(this.focusableItems[index]);\n  }\n\n  private activateItem(item: HTMLElement): void {\n    item.click();\n    this.itemActivated.emit(item);\n  }\n}\n","import { Component, ElementRef, HostListener, OnInit, ViewChild, OnDestroy, AfterViewInit } from '@angular/core';\nimport { ToolbarButtonVisibilityService } from '../toolbar-button-visibility.service';\nimport { SearchResultsCount, ToolbarEventService } from '../toolbar-event.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'mv-search-bar',\n    templateUrl: './search-bar.component.html',\n    standalone: false\n})\nexport class SearchBarComponent implements OnInit, OnDestroy, AfterViewInit {\n\n  @ViewChild('findInput', { static: true }) findInput: ElementRef<HTMLInputElement>;\n  @ViewChild('findNext', { static: false }) findNext: ElementRef<HTMLAnchorElement>;\n\n  highlightAll = true;\n  matchCase = false;\n  wholeWord = false;\n  resultsText = '';\n  searchText = '';\n  resultCount = 0;\n\n  private subscriptions: Subscription[] = [];\n\n  public advancedSearchVisible = false;\n\n  constructor(\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    public readonly toolbarEvents: ToolbarEventService\n  ) { }\n\n  public ngOnInit(): void {\n    this.subscriptions.push(\n      this.toolbarEvents.searchResultsCountSubject.subscribe(results => this.setSearchResultsCount(results))\n    );\n  }\n\n  ngAfterViewInit(): void {\n    this.findInput.nativeElement.focus();\n  }\n\n  ngOnDestroy(): void {\n    for (const subscription of this.subscriptions) {\n      subscription.unsubscribe();\n    }\n  }\n\n  @HostListener('window:keydown', ['$event'])\n  public onWindowKeyDown(e: KeyboardEvent): void {\n    if (e.code === 'F3' || (e.ctrlKey && e.code === 'KeyF')) {\n      e.preventDefault();\n\n      this.toolbarEvents.searchBarHidden.next(false);\n      setTimeout(() => this.findInput.nativeElement.focus(), 200);\n    }\n  }\n\n  public searchNext(): void {\n    this.toolbarEvents.search({\n      searchTerm: this.searchText,\n      highlightAll: this.highlightAll,\n      matchCase: this.matchCase,\n      wholeWord: this.wholeWord,\n      previous: false,\n      reset: false\n    });\n  }\n\n  public searchPrev(): void {\n    this.toolbarEvents.search({\n      searchTerm: this.searchText,\n      highlightAll: this.highlightAll,\n      matchCase: this.matchCase,\n      wholeWord: this.wholeWord,\n      previous: true,\n      reset: false\n    });\n  }\n\n  public search(): void {\n    this.toolbarEvents.search({\n      searchTerm: this.searchText,\n      highlightAll: this.highlightAll,\n      matchCase: this.matchCase,\n      wholeWord: this.wholeWord,\n      previous: false,\n      reset: true\n    });\n  }\n\n  private setSearchResultsCount(results: SearchResultsCount): void {\n    this.resultCount = results.total;\n    this.resultsText = this.resultCount > 0\n      ? `Found ${results.current} of ${results.total}`\n      : 'No results found';\n    if (this.resultCount && this.resultCount > 0 && !results.isPrevious) {\n      setTimeout(() => {\n        this.findNext.nativeElement.focus();\n      }, 1000);\n    }\n  }\n\n  public onEscapeKeyPress(e: KeyboardEvent): void {\n    this.toolbarEvents.searchBarHidden.next(true);\n  }\n\n  public onEnterKeyPress(e: KeyboardEvent): void {\n    this.search();\n  }\n\n\n  public toggleAdvancedSearch(): void {\n    this.advancedSearchVisible = !this.advancedSearchVisible;\n  }\n\n  public toggleSearchBar() {\n    this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());\n  }\n}\n","<div\n  class=\"searchbar govuk-!-padding-3\"\n  [hidden]=\"toolbarEvents.searchBarHidden | async\"\n>\n  <div class=\"govuk-grid-row\">\n    <div class=\"govuk-grid-column-full\">\n      <input\n        class=\"govuk-input govuk-!-display-inline-block govuk-!-width-three-quarters govuk-!-margin-bottom-5 govuk-!-margin-top-5\"\n        type=\"text\"\n        aria-label=\"Search document\"\n        #findInput\n        [ngModel]=\"searchText\"\n        (ngModelChange)=\"searchText = $event\"\n        (keydown.escape)=\"onEscapeKeyPress($event)\"\n        (keydown.enter)=\"onEnterKeyPress($event)\"\n        title=\"Search document\"\n        placeholder=\"Search document for…\"\n        tabindex=\"0\"\n        data-l10n-id=\"find_input\"\n      />\n      <button\n        class=\"govuk-button govuk-!-display-inline-block govuk-!-margin-bottom-4\"\n        data-module=\"govuk-button\"\n        (click)=\"search()\"\n        style=\"position: absolute; top: 40px; right: 10px\"\n      >\n        Search\n      </button>\n    </div>\n  </div>\n\n  <div class=\"govuk-grid-row\">\n    <div class=\"govuk-grid-column-three-quarters\">\n      <span\n        id=\"findResultsCount\"\n        class=\"govuk-!-display-inline-block govuk-!-margin-right-4\"\n        role=\"status\"\n        >{{ resultsText }}</span\n      >\n      <a\n        *ngIf=\"resultCount > 0\"\n        id=\"findPrevious\"\n        [routerLink]=\"[]\"\n        role=\"button\"\n        class=\"govuk-link govuk-link--no-visited-state govuk-!-margin-right-2\"\n        (click)=\"searchPrev()\"\n        title=\"Find the previous occurrence of the phrase\"\n        [attr.aria-label]=\"'Find the previous occurrence of the phrase' | rpxTranslate\"\n        data-l10n-id=\"find_previous\"\n        >{{ \"Prev\" | rpxTranslate }}</a\n      >\n      <a\n        *ngIf=\"resultCount > 0\"\n        id=\"findNext\"\n        #findNext\n        [routerLink]=\"[]\"\n        role=\"button\"\n        class=\"govuk-link govuk-link--no-visited-state\"\n        (click)=\"searchNext()\"\n        title=\"Find the next occurrence of the phrase\"\n        [attr.aria-label]=\"'Find the next occurrence of the phrase' | rpxTranslate\"\n        data-l10n-id=\"find_next\"\n        >{{ \"Next\" | rpxTranslate }}</a\n      >\n    </div>\n    <div class=\"govuk-grid-column-one-quarter\">\n      <a\n        [routerLink]=\"[]\"\n        class=\"govuk-link govuk-link--no-visited-state\"\n        role=\"button\"\n        (click)=\"toggleAdvancedSearch()\"\n        title=\"Advanced\"\n        [attr.aria-label]=\"'Advanced search options' | rpxTranslate\"\n        [attr.aria-expanded]=\"advancedSearchVisible\"\n        aria-controls=\"advancedSearchVisible\"\n        data-l10n-id=\"find_advanced\"\n        style=\"position: absolute; top: 95px; right: 15px\"\n        >{{ \"Advanced\" | rpxTranslate }}</a\n      >\n    </div>\n  </div>\n\n  <div\n    id=\"advancedSearchVisible\"\n    class=\"govuk-grid-row\"\n    *ngIf=\"advancedSearchVisible\"\n  >\n    <div class=\"govuk-grid-column-full\">\n      <div\n        class=\"govuk-form-group govuk-!-margin-top-3 govuk-!-margin-bottom-1\"\n      >\n        <fieldset class=\"govuk-fieldset\" aria-describedby=\"advanced\">\n          <div class=\"govuk-checkboxes\">\n            <div class=\"govuk-checkboxes__item\">\n              <input\n                class=\"govuk-checkboxes__input\"\n                id=\"findHighlightAll\"\n                name=\"findHighlightAll\"\n                type=\"checkbox\"\n                (change)=\"highlightAll = !highlightAll; search()\"\n                [checked]=\"highlightAll\"\n              />\n              <label\n                class=\"govuk-label govuk-checkboxes__label\"\n                for=\"findHighlightAll\"\n                data-l10n-id=\"find_highlight\"\n              >\n                {{ \"Highlight all\" | rpxTranslate }}\n              </label>\n            </div>\n            <div class=\"govuk-checkboxes__item\">\n              <input\n                class=\"govuk-checkboxes__input\"\n                id=\"findMatchCase\"\n                name=\"findMatchCase\"\n                type=\"checkbox\"\n                (change)=\"matchCase = !matchCase; search()\"\n                [checked]=\"matchCase\"\n              />\n              <label\n                class=\"govuk-label govuk-checkboxes__label\"\n                for=\"findMatchCase\"\n                data-l10n-id=\"find_match_case_label\"\n              >\n                {{ \"Match text (exact case)\" | rpxTranslate }}\n              </label>\n            </div>\n            <div class=\"govuk-checkboxes__item\">\n              <input\n                class=\"govuk-checkboxes__input\"\n                id=\"findEntireWord\"\n                name=\"findMatchCase\"\n                type=\"checkbox\"\n                (change)=\"wholeWord = !wholeWord; search()\"\n                [checked]=\"wholeWord\"\n              />\n              <label\n                class=\"govuk-label govuk-checkboxes__label\"\n                for=\"findEntireWord\"\n                data-l10n-id=\"find_entire_word_label\"\n              >\n                {{ \"Match whole words or sentences\" | rpxTranslate }}\n              </label>\n            </div>\n          </div>\n        </fieldset>\n      </div>\n    </div>\n  </div>\n  <div>\n    <button\n      id=\"mvCloseBtn\"\n      #mvCloseBtn\n      class=\"mv-button searchbar-button--close\"\n      title=\"Close Search\"\n      [attr.aria-label]=\"'Close Search' | rpxTranslate\"\n      data-l10n-id=\"mvRedactBtn\"\n      (click)=\"toggleSearchBar()\"\n    ></button>\n  </div>\n</div>\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\n@Directive({\n  selector: '.mv-tooltip, [mvTooltipDismiss]',\n  standalone: false\n})\nexport class TooltipDismissDirective {\n  constructor(private el: ElementRef) {}\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeDismissTooltip() {\n    const element = this.el.nativeElement as HTMLElement;\n    element.setAttribute('data-tooltip-dismissed', 'true');\n  }\n\n  @HostListener('mouseenter')\n  @HostListener('focus')\n  @HostListener('focusin')\n  onShowTooltip() {\n    const element = this.el.nativeElement as HTMLElement;\n    element.removeAttribute('data-tooltip-dismissed');\n  }\n\n}","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ToolbarEventService } from '../toolbar-event.service';\nimport { ToolbarButtonVisibilityService } from '../toolbar-button-visibility.service';\nimport { NumberHelperService } from '../../../lib/shared/util/services/number.helper.service';\nimport { IcpEventService } from '../icp-event.service';\nimport { ToolbarFocusService } from '../toolbar-focus.service';\nimport { HtmlTemplatesHelper } from '../../shared/util/helpers/html-templates.helper';\n\n@Component({\n    selector: 'mv-main-toolbar',\n    templateUrl: './main-toolbar.component.html',\n    standalone: false\n})\nexport class MainToolbarComponent implements OnInit, OnDestroy, AfterViewInit {\n\n  @Input() enableAnnotations = false;\n  @Input() enableRedactions = false;\n  @Input() enableICP = false;\n  @Input() contentType = null;\n\n  @ViewChild('zoomSelect', { static: false }) public zoomSelect: ElementRef;\n  @ViewChild('mvToolbarMain', { static: false }) public mvToolbarMain: ElementRef<HTMLElement>;\n  @ViewChild('dropdownMenu', { static: false }) public mvMenuItems: ElementRef<HTMLElement>;\n\n  private readonly subscriptions: Subscription[] = [];\n\n  public icpEnabled = false;\n  public redactionEnabled = false;\n  public showCommentsPanel: boolean;\n  public redactAllInProgress: boolean;\n\n  public pageNumber = 1;\n  public pageCount = 0;\n  public isDropdownMenuOpen = false;\n  public isBookmarksOpen = false;\n  public isIndexOpen = false;\n  public isRedactOpen = false;\n  public isCommentsOpen = false;\n  public isHighlightOpen = false;\n  public dropdownMenuPositions = [\n    new ConnectionPositionPair(\n      {\n        originX: 'end',\n        originY: 'bottom'\n      },\n      {\n        overlayX: 'end',\n        overlayY: 'top'\n      },\n      0,\n      3)\n  ];\n\n  public zoomScales = [0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 2.5, 3, 5];\n\n  allButtonsWidth = 0;\n  widthRequiredForBtn: { [id: string]: number } = {};\n\n  public constructor(\n    public readonly toolbarEvents: ToolbarEventService,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    private readonly cdr: ChangeDetectorRef,\n    private readonly numberHelper: NumberHelperService,\n    private readonly icpEventService: IcpEventService,\n    private readonly toolbarFocusService: ToolbarFocusService\n  ) {\n  }\n\n  public ngOnInit() {\n    this.subscriptions.push(\n      this.toolbarEvents.setCurrentPageSubject.subscribe(pageNumber => this.setCurrentPage(pageNumber)),\n      this.toolbarEvents.setCurrentPageInputValueSubject.subscribe(pageNumber => this.pageNumber = pageNumber),\n      this.toolbarEvents.getPageCount().subscribe(count => this.pageCount = count),\n      this.icpEventService.enabled.subscribe(enabled => {\n        this.icpEnabled = enabled;\n        if (this.icpEnabled) {\n          this.toolbarEvents.toggleCommentsPanel(!enabled);\n          this.toolbarEvents.sidebarOpen.next(false);\n        }\n      }),\n      this.toolbarEvents.redactionMode.subscribe(enabled => {\n        this.redactionEnabled = enabled;\n        this.isRedactOpen = enabled;\n      }),\n      this.toolbarEvents.redactAllInProgressSubject.subscribe(disable => {\n        this.redactAllInProgress = disable;\n      }),\n      this.toolbarEvents.highlightToolbarSubject.subscribe(isOpen => {\n        this.isHighlightOpen = isOpen;\n      })\n    );\n  }\n\n  public ngOnDestroy(): void {\n    for (const subscription of this.subscriptions) {\n      subscription.unsubscribe();\n    }\n  }\n\n  public ngAfterViewInit() {\n    Array.from(this.mvToolbarMain.nativeElement.children).forEach((button: HTMLElement) => {\n      this.allButtonsWidth += HtmlTemplatesHelper.getAdjustedBoundingRect(button).width;\n      this.widthRequiredForBtn[button.id] = this.allButtonsWidth;\n    });\n    this.cdr.detectChanges();\n  }\n\n  @HostListener('window:resize', [])\n  public onResize() {\n    this.cdr.detectChanges();\n  }\n\n  @HostListener('document:keydown.control.p', ['$event'])\n  @HostListener('document:keydown.meta.p', ['$event'])\n  public onControlPrint(event: KeyboardEvent) {\n    event.preventDefault();\n    this.printFile();\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  public onEscapeKey(event: KeyboardEvent) {\n    const activeElement = document.activeElement as HTMLElement | null;\n    const targetElement = (event.target as HTMLElement | null) ?? activeElement;\n    const targetId = targetElement?.id || activeElement?.id;\n    const stopEvent = () => {\n      event.preventDefault();\n      event.stopPropagation();\n    };\n    const isInDropdown = this.isEventWithin(event, '.dropdown-menu');\n    const isInSearchBar = this.isEventWithin(event, 'mv-search-bar');\n    const isInSidebar = this.isEventWithin(event, '#sidebarContainer');\n\n    if (this.isDropdownMenuOpen && (isInDropdown || targetId === 'mvMoreOptionsBtn')) {\n      stopEvent();\n      this.isDropdownMenuOpen = false;\n      this.toolbarFocusService.focusToolbarButton('#mvToolbarMain', 'mvMoreOptionsBtn', 50);\n      return;\n    }\n\n    if (isInSearchBar) {\n      stopEvent();\n      this.closeSearchBarAndFocus();\n      return;\n    }\n\n    if (isInSidebar && this.toolbarEvents.sidebarOpen.getValue()) {\n      const sidebarContainer = document.getElementById('sidebarContainer');\n      const hasBookmarksContainer = !!sidebarContainer?.querySelector('#bookmarkContainer');\n      stopEvent();\n      this.toolbarEvents.toggleSideBar(false);\n      this.isIndexOpen = false;\n      this.isBookmarksOpen = false;\n      this.toolbarFocusService.focusToolbarButton('#mvToolbarMain', hasBookmarksContainer ? 'mvBookmarksBtn' : 'mvIndexBtn', 50);\n      return;\n    }\n\n    let didClose = false;\n\n    switch (targetId) {\n      case 'mvSearchBtn':\n        if (!this.toolbarEvents.searchBarHidden.getValue()) {\n          this.closeSearchBarAndFocus();\n          didClose = true;\n        }\n        break;\n      case 'mvIndexBtn':\n        if (this.isIndexOpen) {\n          this.toolbarEvents.toggleSideBar(false);\n          this.isIndexOpen = false;\n          didClose = true;\n        }\n        break;\n      case 'mvBookmarksBtn':\n        if (this.isBookmarksOpen) {\n          this.toolbarEvents.toggleSideBar(false);\n          this.isBookmarksOpen = false;\n          didClose = true;\n        }\n        break;\n      case 'mvHighlightBtn':\n        if (this.isHighlightOpen) {\n          this.toolbarEvents.toggleHighlightToolbar();\n          didClose = true;\n        }\n        break;\n      case 'mvRedactBtn':\n        if (this.isRedactOpen) {\n          this.toggleRedactBar();\n          didClose = true;\n        }\n        break;\n      case 'mvCommentsBtn':\n      case 'commentSubPane0':\n        if (this.isCommentsOpen) {\n          this.toggleCommentsPanel();\n          didClose = true;\n        }\n        break;\n    }\n\n    if (didClose) {\n      stopEvent();\n    }\n  }\n\n  private closeSearchBarAndFocus(): void {\n    this.toolbarEvents.searchBarHidden\n      .pipe(\n        filter(hidden => hidden),\n        take(1)\n      )\n      .subscribe(() => {\n        this.toolbarFocusService.focusToolbarButton('#mvToolbarMain', 'mvSearchBtn');\n      });\n    this.toolbarEvents.searchBarHidden.next(true);\n  }\n\n  private isEventWithin(event: KeyboardEvent, selector: string): boolean {\n    const target = (event.target as Element | null) ?? (document.activeElement as Element | null);\n    if (target instanceof Element && target.closest(selector)) {\n      return true;\n    }\n    const path = typeof event.composedPath === 'function' ? event.composedPath() : [];\n    return path.some(node => node instanceof Element && node.matches(selector));\n  }\n\n  public onMoreOptionsKeyDown(event: KeyboardEvent) {\n    if (event.key === 'ArrowDown' && !this.isDropdownMenuOpen) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.toggleMoreOptions();\n    }\n  }\n\n  public onHighlightKeyDown(event: KeyboardEvent) {\n    if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      event.stopPropagation();\n      if (!this.isHighlightOpen) {\n        this.openHighlightToolbarAndFocus();\n      } else {\n        this.focusHighlightButton();\n      }\n    }\n  }\n\n  public onClickHighlightToggle() {\n    this.toolbarEvents.toggleHighlightToolbar();\n  }\n\n  private openHighlightToolbarAndFocus() {\n    if (!this.isHighlightOpen) {\n      this.toolbarEvents.toggleHighlightToolbar();\n      this.focusHighlightButton();\n    }\n  }\n\n  private focusHighlightButton() {\n    this.toolbarFocusService.focusToolbarButton('.redaction');\n  }\n\n  public onClickDrawToggle() {\n    this.toolbarEvents.toggleDrawMode();\n  }\n\n  public toggleIndexSideBar() {\n    const sidebarOpen = this.toolbarEvents.sidebarOpen.getValue();\n    const sidebarView = this.toolbarEvents.sidebarOutlineView.getValue();\n    if (!(sidebarOpen && !sidebarView)) {\n      this.toolbarEvents.toggleSideBar(!sidebarOpen);\n    }\n    this.toolbarEvents.toggleSideBarView(true);\n    this.isIndexOpen = !this.isIndexOpen;\n  }\n\n  public onToolBarOffSetChange(buttonId: string) {\n    if (this.mvToolbarMain && this.mvToolbarMain.nativeElement.offsetWidth < this.widthRequiredForBtn[buttonId]) {\n      return \"button-hidden-on-toolbar\";\n\n    }\n    return \"button-hidden-on-dropdown\";\n  }\n\n  public toggleBookmarksSideBar() {\n    const sidebarOpen = this.toolbarEvents.sidebarOpen.getValue();\n    const sidebarView = this.toolbarEvents.sidebarOutlineView.getValue();\n    if (!(sidebarOpen && sidebarView)) {\n      this.toolbarEvents.toggleSideBar(!sidebarOpen);\n    }\n    this.toolbarEvents.toggleSideBarView(false);\n    this.isBookmarksOpen = !this.isBookmarksOpen;\n  }\n\n  public togglePresentBar() {\n    this.toolbarEvents.searchBarHidden.next(true);\n    this.icpEventService.enable();\n  }\n\n  public increasePageNumber() {\n    this.toolbarEvents.incrementPage(1);\n  }\n\n  public decreasePageNumber() {\n    this.toolbarEvents.incrementPage(-1);\n  }\n\n  public onPageNumberInputChange(pageNumber: string) {\n    if (Number(pageNumber) < 1) {\n      pageNumber = '1';\n    }\n    if (Number(pageNumber) > this.pageCount) {\n      pageNumber = this.pageCount.toString();\n    }\n\n    this.toolbarEvents.setPage(Number.parseInt(pageNumber, 10));\n  }\n\n  private setCurrentPage(pageNumber: number) {\n    this.pageNumber = pageNumber;\n  }\n\n  public rotate(rotation: number) {\n    this.toolbarEvents.rotate(rotation);\n  }\n\n  public printFile() {\n    this.toolbarEvents.print();\n  }\n\n  public downloadFile() {\n    this.toolbarEvents.download();\n  }\n\n  public zoom(zoomFactor: string) {\n    this.toolbarEvents.zoom(+zoomFactor);\n  }\n\n  public stepZoom(zoomFactor: number) {\n    this.toolbarEvents.stepZoom(zoomFactor);\n    this.zoomSelect.nativeElement.selected = 'selected';\n  }\n\n  public toggleCommentsPanel() {\n    this.toolbarEvents.toggleCommentsPanel(!this.toolbarEvents.commentsPanelVisible.getValue());\n    this.isCommentsOpen = !this.isCommentsOpen;\n  }\n\n  public toggleRedactBar() {\n    this.toolbarEvents.toggleRedactionMode();\n  }\n\n  public onRedactKeyDown(event: KeyboardEvent) {\n    if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      event.stopPropagation();\n      if (!this.isRedactOpen) {\n        this.openRedactToolbarAndFocus();\n      } else {\n        this.focusRedactButton();\n      }\n    }\n  }\n\n  private openRedactToolbarAndFocus() {\n    if (!this.isRedactOpen) {\n      this.toolbarEvents.toggleRedactionMode();\n      this.focusRedactButton();\n    }\n  }\n\n  private focusRedactButton() {\n    this.toolbarFocusService.focusToolbarButton('mv-redaction-toolbar .redaction');\n  }\n\n  public toggleGrabNDrag() {\n    this.toolbarEvents.toggleGrabNDrag();\n  }\n\n  public isPdf() {\n    return this.contentType === 'pdf';\n  }\n\n  public toggleSearchBar() {\n    this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());\n  }\n\n  public toggleMoreOptions() {\n    this.isDropdownMenuOpen = !this.isDropdownMenuOpen;\n    if (this.isDropdownMenuOpen) {\n      this.toolbarFocusService.focusToolbarButton('.cdk-overlay-pane .dropdown-menu');\n    }\n  }\n}\n","<div class=\"toolbar\">\n  <div id=\"toolbarContainer\">\n    <div class=\"mv-toolbar__container\">\n      <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\" [mvKeyboardNav]=\"'horizontal'\">\n        <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n        <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n          <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n        </div>\n        <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n            The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n        <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n          <button\n            id=\"mvMoreOptionsBtn\"\n            class=\"mv-button mv-toolbar__menu-button--more-options mv-tooltip\"\n            [class.mv-toolbar__menu-button--more-options__hidden]=\"\n              mvToolbar.offsetWidth >= allButtonsWidth\n            \"\n            [attr.aria-expanded]=\"isDropdownMenuOpen\"\n            [attr.data-tooltip]=\"'More options' | rpxTranslate\"\n            [attr.aria-label]=\"'More options' | rpxTranslate\"\n            (click)=\"toggleMoreOptions()\"\n            (keydown)=\"onMoreOptionsKeyDown($event)\"\n            cdkOverlayOrigin\n            #trigger=\"cdkOverlayOrigin\"\n            [disabled]=\"redactAllInProgress\"\n          >\n            <span aria-hidden=\"true\">{{ \"More options\" | rpxTranslate }}</span>\n          </button>\n          <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n          <ng-template\n            cdkConnectedOverlay\n            [cdkConnectedOverlayOrigin]=\"trigger\"\n            [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n            [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n          >\n            <div class=\"dropdown-menu\" #dropdownMenu [mvKeyboardNav]=\"'vertical'\">\n              <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n            </div>\n          </ng-template>\n        </div>\n      </div>\n      <div id=\"mvMenuItems\" #mvMenuItems>\n        <ng-template #menuItems>\n          <button\n            *ngIf=\"toolbarButtons.showSidebar\"\n            id=\"mvIndexBtn\"\n            data-l10n-id=\"index\"\n            [attr.data-tooltip]=\"'Index' | rpxTranslate\"\n            [attr.aria-label]=\"'Index' | rpxTranslate\"\n            #mvIndexBtn\n            class=\"mv-button mv-toolbar__menu-button--index mv-tooltip\"\n            [class.button-hidden-on-toolbar]=\"\n              mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n            \"\n            [class.button-hidden-on-dropdown]=\"\n              mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n            \"\n            [attr.aria-expanded]=\"isIndexOpen\"\n            [disabled]=\"redactAllInProgress\"\n            (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Index\" | rpxTranslate }}</span>\n          </button>\n\n          <button\n            *ngIf=\"toolbarButtons.showSidebar\"\n            id=\"mvBookmarksBtn\"\n            data-l10n-id=\"bookmarks\"\n            [attr.data-tooltip]=\"'Bookmarks' | rpxTranslate\"\n            [attr.aria-label]=\"'Bookmarks' | rpxTranslate\"\n            #mvBookmarksBtn\n            [ngClass]=\"{\n              'mv-button mv-tooltip mv-toolbar__menu-button--bookmarks': true,\n              'button-hidden-on-toolbar':\n                mvToolbarMain.offsetWidth <\n                widthRequiredForBtn['mvBookmarksBtn'],\n              'button-hidden-on-dropdown':\n                mvToolbarMain.offsetWidth >=\n                widthRequiredForBtn['mvBookmarksBtn']\n            }\"\n            [attr.aria-expanded]=\"isBookmarksOpen\"\n            [disabled]=\"redactAllInProgress\"\n            (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Bookmarks\" | rpxTranslate }}</span>\n          </button>\n\n          <button\n            *ngIf=\"toolbarButtons.showDrawButton\"\n            [disabled]=\"icpEnabled || redactionEnabled\"\n            id=\"mvDrawBtn\"\n            #mvDrawBtn\n            class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n            [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n            [attr.aria-label]=\"'Draw a box' | rpxTranslate\"\n            [class.button-hidden-on-toolbar]=\"\n              mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n            \"\n            [class.button-hidden-on-dropdown]=\"\n              mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n            \"\n            [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n            aria-pressed=\"false\"\n            data-l10n-id=\"toggleDrawButton\"\n            (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n          >\n            <span data-l10n-id=\"draw_label\" aria-hidden=\"true\">{{\n              \"Draw a box\" | rpxTranslate\n            }}</span>\n          </button>\n\n          <button\n            *ngIf=\"toolbarButtons.showHighlightButton\"\n            [disabled]=\"icpEnabled || redactionEnabled\"\n            id=\"mvHighlightBtn\"\n            #mvHighlightBtn\n            class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n            [attr.data-tooltip]=\"'Highlight' | rpxTranslate\"\n            [attr.aria-label]=\"'Highlight' | rpxTranslate\"\n            [class.button-hidden-on-toolbar]=\"\n              mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n            \"\n            [class.button-hidden-on-dropdown]=\"\n              mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n            \"\n            [class.toggled]=\"toolbarEvents.highlightToolbarSubject | async\"\n            aria-pressed=\"false\"\n            (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n            (keydown)=\"onHighlightKeyDown($event)\"\n            data-l10n-id=\"toggleHighlightButton\"\n          >\n            <span data-l10n-id=\"highlight_label\" aria-hidden=\"true\">{{\n              \"Highlight\" | rpxTranslate\n            }}</span>\n          </button>\n\n          <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n            <div\n              id=\"mvPageBtn\"\n              #mvPageBtn\n              class=\"mv-toolbar__menu-button--page\"\n              [attr.data-tooltip]=\"'Page' | rpxTranslate\"\n              [class.button-hidden-on-toolbar]=\"\n                mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n              \"\n              [class.button-hidden-on-dropdown]=\"\n                mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n              \"\n            >\n              <span>{{ \"Page\" | rpxTranslate }}</span>\n\n              <button\n                id=\"mvUpBtn\"\n                [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n                [attr.data-tooltip]=\"'Previous page' | rpxTranslate\"\n                [attr.aria-label]=\"'Previous page' | rpxTranslate\"\n                class=\"mv-toolbar__menu-button--up button-image mv-tooltip\"\n                data-l10n-id=\"previous\"\n                (click)=\"decreasePageNumber()\"\n                [disabled]=\"redactAllInProgress\"\n              >\n                <span></span>\n              </button>\n              <button\n                id=\"mvDownBtn\"\n                [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n                [attr.data-tooltip]=\"'Next page' | rpxTranslate\"\n                [attr.aria-label]=\"'Next page' | rpxTranslate\"\n                class=\"mv-toolbar__menu-button--down button-image mv-tooltip\"\n                data-l10n-id=\"next\"\n                (click)=\"increasePageNumber()\"\n              >\n                <span></span>\n              </button>\n\n              <span class=\"mv-tooltip\" [attr.data-tooltip]=\"'Page number' | rpxTranslate\">\n                <input\n                  type=\"number\"\n                  id=\"pageNumber\"\n                  class=\"hmcts-toolbar-input govuk-input--width-2\"\n                  [attr.aria-label]=\"'Page number' | rpxTranslate\"\n                  value=\"1\"\n                  size=\"4\"\n                  min=\"1\"\n                  [value]=\"pageNumber\"\n                  tabindex=\"0\"\n                  data-l10n-id=\"page\"\n                  (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n                  [disabled]=\"redactAllInProgress\"\n                  #pageNumberInput\n                />\n              </span>\n              <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n            </div>\n          </ng-container>\n\n          <ng-container *ngIf=\"toolbarButtons.showZoom\">\n            <div\n              id=\"mvZoomBtn\"\n              #mvZoomBtn\n              class=\"mv-toolbar__menu-button--zoom\"\n              aria-pressed=\"false\"\n              [class.button-hidden-on-toolbar]=\"\n                mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n              \"\n              [class.button-hidden-on-dropdown]=\"\n                mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n              \"\n            >\n              <button\n                [disabled]=\"\n                  toolbarEvents.zoomValueSubject.value === 0.1 ||\n                  redactAllInProgress\n                \"\n                id=\"mvMinusBtn\"\n                class=\"mv-toolbar__menu-button--zoom-out button-image mv-tooltip\"\n                [attr.data-tooltip]=\"'Zoom out' | rpxTranslate\"\n                [attr.aria-label]=\"'Zoom out' | rpxTranslate\"\n                data-l10n-id=\"zoom_out\"\n                (click)=\"stepZoom(-0.1)\"\n              >\n                <span class=\"mv-toolbar__menu-button--zoom-out-text\" aria-hidden=\"true\">{{\n                  \"Zoom Out\" | rpxTranslate\n                }}</span>\n              </button>\n              <span class=\"mv-tooltip\" [attr.data-tooltip]=\"'Zoom' | rpxTranslate\"> \n                <select\n                  id=\"scaleSelect\"\n                  class=\"hmcts-toolbar-select\"\n                  data-l10n-id=\"zoom\"\n                  (change)=\"zoom($event.target.value)\"\n                  tabindex=\"0\"\n                  [disabled]=\"redactAllInProgress\"\n                >\n                  <option\n                    #zoomSelect\n                    id=\"customScaleOption\"\n                    title=\"\"\n                    [value]=\"toolbarEvents.zoomValueSubject.value\"\n                  >\n                    {{\n                      toolbarEvents.zoomValueSubject.value * 100\n                        | number : \"1.0-0\"\n                    }}%\n                  </option>\n                  <option\n                    *ngFor=\"let zoomScale of zoomScales\"\n                    title=\"\"\n                    [value]=\"zoomScale\"\n                    [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n                  >\n                    {{ zoomScale * 100 }}%\n                  </option>\n                </select>\n              </span>\n              <button\n                [disabled]=\"\n                  toolbarEvents.zoomValueSubject.value === 5 ||\n                  redactAllInProgress\n                \"\n                id=\"mvPlusBtn\"\n                class=\"mv-toolbar__menu-button--zoom-in button-image mv-tooltip\"\n                (click)=\"stepZoom(0.1)\"\n                [attr.data-tooltip]=\"'Zoom in' | rpxTranslate\"\n                [attr.aria-label]=\"'Zoom in' | rpxTranslate\"\n                data-l10n-id=\"zoom_in\"\n              >\n                <span class=\"mv-toolbar__menu-button--zoom-out-text\" aria-hidden=\"true\">{{\n                  \"Zoom In\" | rpxTranslate\n                }}</span>\n              </button>\n            </div>\n          </ng-container>\n\n          <div\n            *ngIf=\"toolbarButtons.showRotate\"\n            id=\"mvRotateBtn\"\n            #mvRotateBtn\n            class=\"mv-toolbar__menu-button--rotate\"\n            [class.button-hidden-on-toolbar]=\"\n              mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n            \"\n            [class.button-hidden-on-dropdown]=\"\n              mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n            \"\n          >\n            <button\n              id=\"mvRotateLeftBtn\"\n              class=\"mv-toolbar__menu-button--rotate_left button-image mv-tooltip\"\n              [attr.aria-label]=\"'Rotate counterclockwise' | rpxTranslate\"\n              [attr.data-tooltip]=\"'Rotate counterclockwise' | rpxTranslate\"\n              data-l10n-id=\"page_rotate_ccw\"\n              (click)=\"rotate(270)\"\n              [disabled]=\"redactAllInProgress\"\n            >\n              <span></span>\n            </button>\n            <button\n              id=\"mvRotateRightBtn\"\n              class=\"mv-toolbar__menu-button--rotate_right button-image mv-tooltip\"\n              [attr.aria-label]=\"'Rotate clockwise' | rpxTranslate\"\n              [attr.data-tooltip]=\"'Rotate clockwise' | rpxTranslate\"\n              data-l10n-id=\"page_rotate_cw\"\n              (click)=\"rotate(90)\"\n              [disabled]=\"redactAllInProgress\"\n            >\n              <span></span>\n            </button>\n            <span>{{ \"Rotate\" | rpxTranslate }}</span>\n          </div>\n\n          <button\n            *ngIf=\"toolbarButtons.showSearchBar\"\n            [disabled]=\"icpEnabled || redactAllInProgress\"\n            id=\"mvSearchBtn\"\n            #mvSearchBtn\n            [attr.data-tooltip]=\"'Search' | rpxTranslate\"\n            [attr.aria-label]=\"'Search' | rpxTranslate\"\n            data-l10n-id=\"searchbar\"\n            class=\"mv-button mv-toolbar__menu-button--search mv-tooltip\"\n            [class.button-hidden-on-toolbar]=\"\n              mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n            \"\n            [class.button-hidden-on-dropdown]=\"\n              mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n            \"\n            aria-pressed=\"false\"\n            (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Search\" | rpxTranslate }}</span>\n          </button>\n          <mv-search-bar\n            *ngIf=\"!toolbarEvents.searchBarHidden.getValue()\"\n          ></mv-search-bar>\n\n          <button\n            *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n            [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n            id=\"mvPresentBtn\"\n            #mvPresentBtn\n            class=\"mv-button mv-toolbar__menu-button--present mv-tooltip\"\n            [attr.data-tooltip]=\"'In-Court presentation mode' | rpxTranslate\"\n            [attr.aria-label]=\"'Present' | rpxTranslate\"\n            data-l10n-id=\"icpMode_label\"\n            [ngClass]=\"onToolBarOffSetChange('mvPresentBtn')\"\n            aria-pressed=\"false\"\n            (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n          >\n            <span data-l10n-id=\"icpMode_label\" aria-hidden=\"true\">{{\n              \"Present\" | rpxTranslate\n            }}</span>\n          </button>\n\n          <button\n            *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n            [disabled]=\"icpEnabled || redactAllInProgress\"\n            id=\"mvRedactBtn\"\n            #mvRedactBtn\n            [attr.data-tooltip]=\"'Redact' | rpxTranslate\"\n            [attr.aria-label]=\"'Redact' | rpxTranslate\"\n            data-l10n-id=\"redact\"\n            class=\"mv-button mv-toolbar__menu-button--redact mv-tooltip\"\n            [ngClass]=\"onToolBarOffSetChange('mvRedactBtn')\"\n            [attr.aria-expanded]=\"isRedactOpen\"\n            (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n            (keydown)=\"onRedactKeyDown($event)\"\n          >\n            <span aria-hidden=\"true\">{{ \"Redact\" | rpxTranslate }}</span>\n          </button>\n\n          <button\n            *ngIf=\"toolbarButtons.showGrabNDragButton\"\n            [disabled]=\"icpEnabled || redactAllInProgress\"\n            id=\"mvGrabBtn\"\n            #mvGrabBtn\n            class=\"mv-button mv-toolbar__menu-button--grab mv-tooltip\"\n            data-tooltip=\"Grab and drag\"\n            [attr.aria-label]=\"'Grab and drag' | rpxTranslate\"\n            [ngClass]=\"onToolBarOffSetChange('mvGrabBtn')\"\n            aria-pressed=\"false\"\n            (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Grab and drag\" | rpxTranslate }}</span>\n          </button>\n\n          <button\n            *ngIf=\"toolbarButtons.showDownload\"\n            [disabled]=\"icpEnabled || redactionEnabled\"\n            id=\"mvDownloadBtn\"\n            #mvDownloadBtn\n            class=\"mv-button mv-toolbar__menu-button--download mv-tooltip\"\n            [attr.data-tooltip]=\"'Download' | rpxTranslate\"\n            [attr.aria-label]=\"'Download' | rpxTranslate\"\n            data-l10n-id=\"download\"\n            [ngClass]=\"onToolBarOffSetChange('mvDownloadBtn')\"\n            aria-pressed=\"false\"\n            (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Download\" | rpxTranslate }}</span>\n          </button>\n\n          <button\n            *ngIf=\"toolbarButtons.showPrint\"\n            [disabled]=\"icpEnabled || redactionEnabled\"\n            id=\"mvPrintBtn\"\n            #mvPrintBtn\n            [attr.data-tooltip]=\"'Print' | rpxTranslate\"\n            [attr.aria-label]=\"'Print' | rpxTranslate\"\n            data-l10n-id=\"print\"\n            class=\"mv-button mv-toolbar__menu-button--print mv-tooltip\"\n            [ngClass]=\"onToolBarOffSetChange('mvPrintBtn')\"\n            aria-pressed=\"false\"\n            (click)=\"printFile(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Print\" | rpxTranslate }}</span>\n          </button>\n\n          <button\n            *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n            [disabled]=\"redactionEnabled\"\n            id=\"mvCommentsBtn\"\n            #mvCommentsBtn\n            class=\"mv-button mv-toolbar__menu-button--comments mv-tooltip\"\n            [attr.data-tooltip]=\"'Comments' | rpxTranslate\"\n            [attr.aria-label]=\"'Comments' | rpxTranslate\"\n            data-l10n-id=\"comments\"\n            [ngClass]=\"onToolBarOffSetChange('mvCommentsBtn')\"\n            [attr.aria-expanded]=\"isCommentsOpen\"\n            (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n          >\n            <span aria-hidden=\"true\">{{ \"Comments\" | rpxTranslate }}</span>\n          </button>\n        </ng-template>\n      </div>\n    </div>\n\n    <div id=\"loadingBar\">\n      <div class=\"progress\">\n        <div class=\"glimmer\"></div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\nimport { SearchType, ToolbarEventService } from '../toolbar-event.service';\nimport { select, Store } from '@ngrx/store';\nimport * as fromRedactSelectors from '../../store/selectors/redaction.selectors';\nimport * as fromStore from '../../store/reducers/reducers';\nimport { Subscription } from 'rxjs';\nimport { ToolbarButtonVisibilityService } from '../toolbar-button-visibility.service';\nimport { ToolbarFocusService } from '../toolbar-focus.service';\n\n\n@Component({\n    selector: 'mv-redaction-toolbar',\n    templateUrl: './redaction-toolbar.component.html',\n    standalone: false\n})\nexport class RedactionToolbarComponent implements OnInit, OnDestroy {\n\n  @Input() showRedactSearch: boolean;\n\n  preview = false;\n  hasRedactions = false;\n\n  private subscriptions: Subscription[] = [];\n  redactionAllInProgress: boolean;\n\n  constructor(public readonly toolbarEventService: ToolbarEventService,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    private store: Store<fromStore.AnnotationSetState>,\n    private readonly toolbarFocusService: ToolbarFocusService\n  ) { }\n\n  ngOnInit(): void {\n    this.subscriptions.push(this.store.pipe(select(fromRedactSelectors.getRedactionArray)).subscribe(redactions => {\n      this.hasRedactions = !!redactions.redactions.length;\n    }));\n    this.subscriptions.push(this.toolbarEventService.redactAllInProgressSubject.subscribe(inprogress => {\n      this.redactionAllInProgress = inprogress;\n    }));\n  }\n\n  onRedactAllSearch() {\n    this.toolbarEventService.openRedactionSearch.next({ modeType: SearchType.Redact, isOpen: true });\n  }\n\n  toggleTextRedactionMode() {\n    this.toolbarEventService.highlightModeSubject.next(true);\n  }\n\n  toggleDrawMode() {\n    this.toolbarEventService.drawModeSubject.next(true);\n  }\n\n  togglePreview() {\n    this.preview = !this.preview;\n    this.toolbarEventService.toggleRedactionPreview(this.preview);\n  }\n\n  unmarkAll() {\n    this.toolbarEventService.unmarkAll();\n  }\n\n  redact() {\n    this.toolbarEventService.applyRedactionToDocument();\n  }\n\n  toggleRedactBar() {\n    this.toolbarEventService.toggleRedactionMode();\n  }\n\n  redactPage() {\n    this.toolbarEventService.drawModeSubject.next(true);\n    this.toolbarEventService.redactPage();\n  }\n\n  @HostListener('keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.toggleRedactBar();\n    this.returnFocusToMainToolbar();\n  }\n\n  @HostListener('keydown.arrowup', ['$event'])\n  onArrowUp(event: KeyboardEvent) {\n    const target = event.target as HTMLElement;\n    const redactionToolbar = target.closest('.redaction');\n    if (redactionToolbar) {\n      this.returnFocusToMainToolbar();\n    }\n  }\n\n  private returnFocusToMainToolbar() {\n    this.toolbarFocusService.focusToolbarButton('#mvRedactBtn');\n  }\n\n  ngOnDestroy(): void {\n    for (const subscription of this.subscriptions) {\n      subscription.unsubscribe();\n    }\n  }\n}\n","<div class=\"redaction\" [mvKeyboardNav]=\"'horizontal'\">\n  <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\">{{\n    \"Redaction options\" | rpxTranslate\n  }}</label>\n  <button\n    id=\"toggleDrawButton\"\n    class=\"mv-button redaction-button--draw mv-tooltip\"\n    [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n    [attr.aria-label]=\"'Draw a box' | rpxTranslate\"\n    data-l10n-id=\"toggleDrawButton\"\n    (click)=\"toggleDrawMode()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"toggleDrawButton_label\" aria-hidden=\"true\">{{\n      \"Draw a box\" | rpxTranslate\n    }}</span>\n  </button>\n  <button\n    id=\"redactPageButton\"\n    class=\"mv-button redaction-button--redact-page mv-tooltip\"\n    [attr.data-tooltip]=\"'Redact page' | rpxTranslate\"\n    [attr.aria-label]=\"'Redact page' | rpxTranslate\"\n    data-l10n-id=\"redactPageButton\"\n    (click)=\"redactPage()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"redactPageButton_label\" aria-hidden=\"true\">{{\n      \"Redact page\" | rpxTranslate\n    }}</span>\n  </button>\n  <button\n    *ngIf=\"showRedactSearch\"\n    id=\"mvRedactFromSearchBtn\"\n    class=\"mv-button redaction-button--search mv-tooltip\"\n    [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n    [attr.aria-label]=\"'From search' | rpxTranslate\"\n    data-l10n-id=\"fromSearchButton\"\n    (click)=\"onRedactAllSearch()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\" aria-hidden=\"true\">{{\n      \"From search\" | rpxTranslate\n    }}</span>\n  </button>\n\n  <button\n    *ngIf=\"toolbarButtons.showHighlightButton\"\n    id=\"toggleHighlightButton\"\n    class=\"mv-button redaction-button--redact mv-tooltip\"\n    aria-pressed=\"false\"\n    [attr.data-tooltip]=\"'Redact text' | rpxTranslate\"\n    [attr.aria-label]=\"'Redact text' | rpxTranslate\"\n    data-l10n-id=\"toggleTextRedactionButton\"\n    (click)=\"toggleTextRedactionMode()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"toggleTextRedactionButton_label\" aria-hidden=\"true\">{{\n      \"Redact text\" | rpxTranslate\n    }}</span>\n  </button>\n\n  <button\n    [disabled]=\"!hasRedactions || redactionAllInProgress\"\n    id=\"mvClearBtn\"\n    #mvClearBtn\n    class=\"mv-button redaction-button--clear mv-tooltip\"\n    aria-pressed=\"false\"\n    [attr.data-tooltip]=\"'Clear all' | rpxTranslate\"\n    [attr.aria-label]=\"'Clear all' | rpxTranslate\"\n    data-l10n-id=\"toggleClearAllButton\"\n    (click)=\"unmarkAll()\"\n  >\n    <span data-l10n-id=\"Clear all\" aria-hidden=\"true\">{{ \"Clear all\" | rpxTranslate }}</span>\n  </button>\n\n  <button\n    [disabled]=\"!hasRedactions || redactionAllInProgress\"\n    id=\"mvPreviewBtn\"\n    class=\"mv-button mv-tooltip\"\n    [class.redaction-button--preview]=\"!preview\"\n    [class.redaction-button--hide-preview]=\"preview\"\n    redaction-button--preview\n    aria-pressed=\"false\"\n    [attr.data-tooltip]=\"preview ? ('Hide preview' | rpxTranslate) : ('Preview' | rpxTranslate)\"\n    [attr.aria-label]=\"preview ? ('Hide preview' | rpxTranslate) : ('Preview' | rpxTranslate)\"\n    data-l10n-id=\"togglePreviewButton\"\n    (click)=\"togglePreview()\"\n  >\n    <span *ngIf=\"!preview\" data-l10n-id=\"redaction-preview_label\" aria-hidden=\"true\">{{\n      \"Preview\" | rpxTranslate\n    }}</span>\n    <span *ngIf=\"preview\" data-l10n-id=\"redaction-hide-preview_label\" aria-hidden=\"true\">{{\n      \"Hide preview\" | rpxTranslate\n    }}</span>\n  </button>\n\n  <button\n    [disabled]=\"!hasRedactions || redactionAllInProgress\"\n    id=\"mvRedactBtn\"\n    class=\"mv-button redaction-button--download mv-tooltip\"\n    aria-pressed=\"false\"\n    [attr.data-tooltip]=\"'Save document' | rpxTranslate\"\n    [attr.aria-label]=\"'Save document' | rpxTranslate\"\n    data-l10n-id=\"mvRedactBtn\"\n    (click)=\"redact()\"\n  >\n    <span data-l10n-id=\"Save Document\" aria-hidden=\"true\">{{\n      \"Save document\" | rpxTranslate\n    }}</span>\n  </button>\n\n  <button\n    id=\"mvCloseBtn\"\n    #mvCloseBtn\n    class=\"mv-button redaction-button--close mv-tooltip\"\n    [attr.data-tooltip]=\"'Close Redaction' | rpxTranslate\"\n    [attr.aria-label]=\"'Close Redaction' | rpxTranslate\"\n    data-l10n-id=\"mvRedactBtn\"\n    (click)=\"toggleRedactBar()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"Close Redaction\" aria-hidden=\"true\">{{\n      \"Close Redaction\" | rpxTranslate\n    }}</span>\n  </button>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ToolbarEventService } from '../toolbar-event.service';\nimport { select, Store } from '@ngrx/store';\nimport * as fromIcpSelectors from '../../store/selectors/icp.selectors';\nimport { Subscription } from 'rxjs';\nimport { IcpState } from '../../icp/icp.interfaces';\nimport { IcpEventService } from '../icp-event.service';\n\n@Component({\n    selector: 'mv-icp-toolbar',\n    templateUrl: './icp-toolbar.component.html',\n    standalone: false\n})\nexport class IcpToolbarComponent implements OnInit, OnDestroy {\n\n  presenterName: string;\n  isPresenter: boolean;\n\n  private $subscription: Subscription;\n\n  constructor(public readonly toolbarEventService: ToolbarEventService,\n              private store: Store<IcpState>, \n              public readonly icpEventService:IcpEventService) {}\n\n  ngOnInit() {\n    this.$subscription = this.store.pipe(select(fromIcpSelectors.isPresenter))\n      .subscribe(isPresenter => this.isPresenter = isPresenter);\n    this.$subscription.add(this.store.pipe(select(fromIcpSelectors.getPresenterName))\n      .subscribe(name => this.presenterName = name));\n  }\n\n  ngOnDestroy() {\n    this.$subscription.unsubscribe();\n  }\n\n  present() {\n    this.icpEventService.becomePresenter();\n  }\n\n  stopPresenting() {\n    this.icpEventService.stopPresenting();\n  }\n\n  leaveIcpSession() {\n    this.icpEventService.leaveSession();\n  }\n\n  showParticipantsList() {\n    this.toolbarEventService.toggleParticipantsList(!this.icpEventService.participantsListVisible.getValue());\n  }\n}\n","<div id=\"icp-toolbar\" class=\"icpMode\">\n  <div id=\"toolbar-title\">\n    <label class=\"govuk-label\" data-l10n-id=\"digitalEvidence_label\">Digital evidence presentation</label>\n  </div>\n\n  <div id=\"presentation-mode\">\n    <div class=\"item-label\">\n      <label class=\"govuk-label\" data-l10n-id=\"icpInfo_label\">You are in presentation mode</label>\n    </div>\n    <div class=\"item-button\">\n      <button class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\" tabindex=\"0\"\n        title=\"Leave presentation\" [attr.aria-label]=\"'Leave presentation' | rpxTranslate\" (click)=\"leaveIcpSession()\">\n        <span data-l10n-id=\"icp-leave-presentation_label\" aria-hidden=\"true\">Leave presentation</span>\n      </button>\n    </div>\n  </div>\n\n  <div id=\"presenter-info\">\n    <div class=\"item-label\">\n      <label class=\"govuk-label\" *ngIf=\"!presenterName\" data-l10n-id=\"noPresenter_label\">Waiting for presenter</label>\n      <label class=\"govuk-label\" *ngIf=\"presenterName && isPresenter\" data-l10n-id=\"isPresenter_label\">You are\n        presenting</label>\n      <label class=\"govuk-label\" *ngIf=\"presenterName && !isPresenter\"\n        data-l10n-id=\"otherPresenter_label\">{{ presenterName | titlecase }}\n        is presenting</label>\n    </div>\n    <div class=\"item-button\">\n      <button *ngIf=\"!presenterName\" class=\"govuk-button\" id=\"icp-present\" tabindex=\"0\" [attr.aria-label]=\"'Start presenting' | rpxTranslate\"\n        (click)=\"present()\">\n        <span data-l10n-id=\"icp-present_label\" aria-hidden=\"true\">Start presenting</span>\n      </button>\n      <button *ngIf=\"isPresenter\" class=\"govuk-button  govuk-button--warning\" id=\"icp-stop-presenting\" tabindex=\"0\"\n        [attr.aria-label]=\"'Stop presenting' | rpxTranslate\" (click)=\"stopPresenting()\">\n        <span data-l10n-id=\"icp-stop-presenting_label\" aria-hidden=\"true\">Stop Presenting</span>\n      </button>\n    </div>\n  </div>\n\n  <div id=\"participant-list\">\n    <button class=\"govuk-button govuk-button--secondary\" id=\"icp-participants-list\" tabindex=\"0\"\n      [attr.aria-label]=\"'Participants list' | rpxTranslate\" (click)=\"showParticipantsList()\">\n      <span\n        data-l10n-id=\"icp-stop-presenting_label\" aria-hidden=\"true\">{{(icpEventService.participantsListVisible | async) ? 'Hide': 'Show'}}\n        participants</span>\n    </button>\n  </div>\n</div>","import { Component, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport { SearchMode, SearchType, ToolbarEventService } from '../toolbar-event.service';\nimport { ToolbarButtonVisibilityService } from '../toolbar-button-visibility.service';\nimport { ToolbarFocusService } from '../toolbar-focus.service';\nimport * as fromStore from '../../store/reducers/reducers';\nimport { Store, select } from '@ngrx/store';\nimport { Subscription } from 'rxjs';\nimport * as fromRedactSelectors from '../../store/selectors/redaction.selectors';\n\n@Component({\n    selector: 'mv-highlight-toolbar',\n    templateUrl: './highlight-toolbar.component.html',\n    styleUrls: ['./highlight-toolbar.component.scss'],\n    standalone: false\n})\nexport class HighlightToolbarComponent implements OnInit, OnDestroy {\n\n  private subscriptions: Subscription[] = [];\n  redactionAllInProgress: boolean;\n\n  constructor(public readonly toolbarEventService: ToolbarEventService,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    private readonly toolbarFocusService: ToolbarFocusService\n  ) { }\n\n  ngOnInit(): void {\n    this.subscriptions.push(this.toolbarEventService.redactAllInProgressSubject.subscribe(inprogress => {\n      this.redactionAllInProgress = inprogress;\n    }));\n  }\n\n  onAllSearch() {\n    this.toolbarEventService.openRedactionSearch.next({ modeType: SearchType.Highlight, isOpen: true } as SearchMode);\n  }\n\n  onHighlight() {\n    this.toolbarEventService.toggleHighlightMode();\n  }\n\n  onClickDrawToggle() {\n    this.toolbarEventService.toggleDrawMode();\n  }\n\n  onClose() {\n    this.toolbarEventService.highlightToolbarSubject.next(false);\n    this.toolbarEventService.highlightModeSubject.next(false);\n    this.toolbarEventService.drawModeSubject.next(false);\n    this.toolbarEventService.openRedactionSearch.next({ modeType: SearchType.Highlight, isOpen: false } as SearchMode);\n  }\n\n  @HostListener('keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.closeAndReturnFocus();\n  }\n\n  @HostListener('keydown.arrowup', ['$event'])\n  onArrowUp(event: KeyboardEvent) {\n    const target = event.target as HTMLElement;\n    const highlightToolbar = target.closest('.redaction');\n    if (highlightToolbar) {\n      this.returnFocusToMainToolbar();\n    }\n  }\n\n  private closeAndReturnFocus() {\n    this.onClose();\n    this.returnFocusToMainToolbar();\n  }\n\n  private returnFocusToMainToolbar() {\n      this.toolbarFocusService.focusToolbarButton('#mvHighlightBtn');\n  }\n\n  ngOnDestroy(): void {\n    for (const subscription of this.subscriptions) {\n      subscription.unsubscribe();\n    }\n  }\n\n}\n","<div class=\"redaction\" [mvKeyboardNav]=\"'horizontal'\">\n  <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n    >{{ \"Highlight options\" | rpxTranslate }}</label\n  >\n\n  <button\n    id=\"mvDrawBtn\"\n    #mvDrawBtn\n    class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n    [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n    [attr.aria-label]=\"'Draw a box' | rpxTranslate\"\n    [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n    aria-pressed=\"false\"\n    data-l10n-id=\"mvDrawBtn\"\n    (click)=\"onClickDrawToggle()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"draw_label\" aria-hidden=\"true\">{{ \"Draw a box\" | rpxTranslate }}</span>\n  </button>\n\n  <button\n    id=\"highlightTextBtn\"\n    class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n    [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n    [attr.aria-label]=\"'Highlight text' | rpxTranslate\"\n    data-l10n-id=\"highlightTextBtn\"\n    (click)=\"onHighlight()\"\n    [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"highlightTextBtn_label\" aria-hidden=\"true\">{{ \"Highlight text\" | rpxTranslate }}</span>\n  </button>\n\n  <button\n    id=\"mvHighlightFromSearchBtn\"\n    [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n    [attr.aria-label]=\"'From search' | rpxTranslate\"\n    data-l10n-id=\"fromSearchButton\"\n    class=\"mv-button redaction-button--search mv-tooltip\"\n    (click)=\"onAllSearch()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\" aria-hidden=\"true\"\n      >{{ \"From search\" | rpxTranslate }}</span\n    >\n  </button>\n\n  <button\n    id=\"mvCloseBtn\"\n    #mvCloseBtn\n    class=\"mv-button redaction-button--close mv-tooltip\"\n    [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n    [attr.aria-label]=\"'Close highlight' | rpxTranslate\"\n    data-l10n-id=\"mvRedactBtn\"\n    (click)=\"onClose()\"\n    [disabled]=\"redactionAllInProgress\"\n  >\n    <span data-l10n-id=\"Close Redaction\" aria-hidden=\"true\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n  </button>\n</div>\n","import {Component, Directive, Input} from '@angular/core';\n/*\n* Gov UK Error Message\n* Responsible for displaying in-line error messages\n* @prop config - obj with properties\n* @prop errorMessage - all error bject with messages property that is arry of strings.\n* */\n@Component({\n    selector: ' mv-gov-uk-error-message',\n    template: `\n    <span class=\"govuk-error-message\" [id]=\"config.id + '-error'\" *ngFor=\"let message of errorMessage?.messages\">\n      <span class=\"govuk-visually-hidden\">Error:</span>{{message}}\n    </span>\n  `,\n    standalone: false\n})\nexport class GovUkErrorMessageComponent {\n  constructor () { }\n  @Input() config: { id: string };\n  @Input() errorMessage;\n}\n","import {Component, Input} from '@angular/core';\nimport {HtmlTemplatesHelper} from '../util/helpers/html-templates.helper';\n/*\n* Gov Uk Fieldset Component\n* Used to wrap group fieldset elements\n* it can conditionally display h1 tag\n* @param config\n* @param isHeading\n* @param errorMessage - used for aria tag\n* */\n@Component({\n    selector: 'mv-gov-uk-fieldset',\n    template: `\n      <fieldset class=\"govuk-fieldset\" [attr.aria-describedby]=\"setDescribedBy()\">\n        <legend [class]=\"config.classes + ' govuk-fieldset__legend'\" *ngIf=\"!isHeading\">\n          {{config.legend}}\n        </legend>\n\n        <legend [class]=\"config.classes + ' govuk-fieldset__legend'\" *ngIf=\"isHeading\">\n          <h1>{{config.legend}}</h1>\n        </legend>\n\n        <span [id]=\"config.id+'-hint'\" class=\"govuk-hint\" *ngIf=\"config.hint\">\n          {{config.hint}}\n        </span>\n        <ng-content></ng-content>\n      </fieldset>\n  `,\n    standalone: false\n})\nexport class GovUkFieldsetComponent {\n  @Input() config: {legend: string; classes: string, id: string, hint: string, key: string};\n  @Input() isHeading: boolean;\n  @Input() errorMessage: string[];\n\n  setDescribedBy(): string {\n    return HtmlTemplatesHelper.setDescribedBy(this.errorMessage, this.config);\n  }\n}\n","import {Component, Input} from '@angular/core';\n\n/*\n* Gov UK Label component\n* Responsible for displaying label tag\n* @prop isPageHading - boolean to display h1\n* @prop config - obj with properties\n* */\n@Component({\n    selector: 'mv-gov-label',\n    template: `<h1 *ngIf=\"config.isPageHeading else noHeading\">\n          <label *ngIf=\"config.label\" [class]=\"config.classes + ' govuk-label'\"\n                 [for]=\"config.id\" [innerHTML]=\"config.label\">\n          </label>\n        </h1>\n        <ng-template #noHeading>\n          <label *ngIf=\"config.label\" [class]=\"config.classes + ' govuk-label'\"\n                 [for]=\"config.id\" [innerHTML]=\"config.label\">\n          </label>\n        </ng-template>\n  `,\n    standalone: false\n})\nexport class GovUkLabelComponent {\n  constructor () { }\n  @Input() config: { label: string, name: string; id: string, isPageHeading, classes: string };\n\n}\n","import {Component, Input} from '@angular/core';\n/*\n* Gov UK Date Component\n* Responsible for displaying 3 input fields:\n* day / month / year\n* displaying errorMessage messages\n* */\n@Component({\n    selector: 'mv-gov-uk-date',\n    templateUrl: './gov-uk-date.component.html',\n    standalone: false\n})\nexport class GovUkDateComponent {\n  @Input() config: { id: string; legend: string };\n  @Input() errorMessage: {isInvalid: boolean; messages: string[]};\n  @Input() formGroup;\n}\n","<div\n  class=\"govuk-form-group\"\n  [ngClass]=\"{ 'govuk-form-group--error': errorMessage?.isInvalid }\"\n  [formGroup]=\"formGroup\"\n>\n  <mv-gov-uk-fieldset\n    [config]=\"{\n      legend: config.legend,\n      classes: 'govuk-label--m',\n      id: config.id,\n      hint: ' For example, 12 11 2007'\n    }\"\n    [isHeading]=\"false\"\n    [errorMessage]=\"errorMessage\"\n  >\n    <mv-gov-uk-error-message\n      [config]=\"{ id: 'passport' }\"\n      *ngIf=\"errorMessage.isInvalid\"\n      [errorMessage]=\"errorMessage\"\n    >\n    </mv-gov-uk-error-message>\n\n    <div class=\"govuk-date-input\" [id]=\"config.id + '-date'\">\n      <div class=\"govuk-date-input__item\">\n        <div class=\"govuk-form-group\">\n          <mv-gov-label\n            [config]=\"{\n              label: 'Day',\n              name: config.id,\n              id: config.id + '-day',\n              classes: 'govuk-date-input__label'\n            }\"\n          >\n          </mv-gov-label>\n          <input\n            class=\"govuk-input govuk-date-input__input govuk-input--width-2\"\n            [ngClass]=\"{ 'govuk-input--error': errorMessage?.isInvalid }\"\n            [id]=\"config.id + '-day'\"\n            [name]=\"config.id + '-day'\"\n            type=\"number\"\n            value=\"\"\n            pattern=\"[0-9]*\"\n            [formControlName]=\"'day'\"\n          />\n        </div>\n      </div>\n      <div class=\"govuk-date-input__item\">\n        <div class=\"govuk-form-group\">\n          <mv-gov-label\n            [config]=\"{\n              label: 'Month',\n              name: config.id + '-month',\n              id: config.id + '-month',\n              classes: 'govuk-date-input__label'\n            }\"\n          >\n          </mv-gov-label>\n          <input\n            class=\"govuk-input govuk-date-input__input govuk-input--width-2\"\n            [ngClass]=\"{ 'govuk-input--error': errorMessage?.isInvalid }\"\n            [id]=\"config.id + '-month'\"\n            [name]=\"config.id + '-month'\"\n            type=\"number\"\n            value=\"\"\n            pattern=\"[0-9]*\"\n            [formControlName]=\"'month'\"\n          />\n        </div>\n      </div>\n      <div class=\"govuk-date-input__item\">\n        <div class=\"govuk-form-group\">\n          <mv-gov-label\n            [config]=\"{\n              label: 'Year',\n              name: config.id + '-year',\n              id: config.id + '-year',\n              classes: 'govuk-date-input__label'\n            }\"\n          >\n          </mv-gov-label>\n          <input\n            class=\"govuk-input govuk-date-input__input govuk-input--width-4\"\n            [ngClass]=\"{ 'govuk-input--error': errorMessage?.isInvalid }\"\n            [id]=\"config.id + '-year'\"\n            [name]=\"config.id + '-year'\"\n            type=\"number\"\n            value=\"\"\n            pattern=\"[0-9]*\"\n            [formControlName]=\"'year'\"\n          />\n        </div>\n      </div>\n    </div>\n  </mv-gov-uk-fieldset>\n</div>\n","import { Component, Input, ViewChild, ElementRef, OnInit, OnDestroy } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\n\nimport { PrintService } from '../../print.service';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport * as fromSelectors from '../../store/selectors/annotation.selectors';\nimport * as fromStore from '../../store/reducers/reducers';\nimport * as fromAnnoActions from '../../store/actions/annotation.actions';\nimport * as fromTagSelectors from '../../store/selectors/tag.selectors';\n\n@Component({\n    selector: 'mv-comments-summary',\n    templateUrl: './comments-summary.component.html',\n    standalone: false\n})\nexport class CommentsSummaryComponent implements OnInit, OnDestroy {\n\n  @Input() title: string;\n  @Input() contentType: string;\n  @ViewChild('outerContainer', { static: true }) container: ElementRef;\n  @ViewChild('commentContainer', { static: false }) commentsTable: ElementRef;\n  public comments$: Observable<any>;\n  public filtersFg: FormGroup;\n  private $subscriptions: Subscription;\n  allTags$: Observable<{ key: string; length: number }[]>;\n  showFilters = false;\n  hasFilter = false;\n  fromFilterValid: boolean = true;\n  toFilterValid: boolean = true;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    private readonly printService: PrintService,\n    private readonly toolbarEvents: ToolbarEventService,\n    private fb: FormBuilder\n  ) { }\n\n  ngOnInit(): void {\n    this.filtersFg = this.fb.group({\n      dateRangeFrom: new FormGroup({\n        day: new FormControl('', [Validators.required]),\n        month: new FormControl('', [Validators.required]),\n        year: new FormControl('', [Validators.required])\n      }),\n      dateRangeTo: new FormGroup({\n        day: new FormControl('', [Validators.required]),\n        month: new FormControl('', [Validators.required]),\n        year: new FormControl('', [Validators.required])\n      }),\n      tagFilters: this.fb.group({}),\n    });\n    this.comments$ = this.store.pipe(select(fromSelectors.getCommentSummary));\n    this.buildCheckBoxForm();\n    this.container.nativeElement.focus();\n  }\n\n  buildCheckBoxForm() {\n    this.filtersFg.reset();\n    const checkboxes = <FormGroup>this.filtersFg.get('tagFilters');\n    const filters$ = this.store.pipe(select(fromSelectors.getCommentSummaryFilters));\n    this.allTags$ = this.store.pipe(select(fromTagSelectors.getAllTagsArr));\n    this.$subscriptions = combineLatest([this.allTags$, filters$]).subscribe(([tags, filters]) => {\n      this.hasFilter = filters.hasFilter;\n      tags.forEach((val) => {\n        const checkBoxValue = (filters.filters.tagFilters &&\n          filters.filters.tagFilters.hasOwnProperty(val.key)) ?\n          filters.filters.tagFilters[val.key] : false;\n        checkboxes.addControl(val.key, new FormControl(checkBoxValue));\n      });\n      this.filtersFg.updateValueAndValidity();\n    });\n  }\n\n  onClearFilters() {\n    this.store.dispatch(new fromAnnoActions.ClearCommentSummaryFilters());\n    this.buildCheckBoxForm();\n  }\n\n  onFilter() {\n    const { value } = this.filtersFg;\n\n\n    const hasDateFrom = (value.dateRangeFrom.year && value.dateRangeFrom.month && value.dateRangeFrom.day);\n    const hasDateTo = (value.dateRangeTo.year && value.dateRangeTo.month && value.dateRangeTo.day);\n    const dateRangeFrom = hasDateFrom ?\n      new Date(value.dateRangeFrom.year, value.dateRangeFrom.month - 1, value.dateRangeFrom.day).getTime() : null;\n    const dateRangeTo = hasDateTo ?\n      new Date(value.dateRangeTo.year, value.dateRangeTo.month - 1, value.dateRangeTo.day).getTime() : null;\n\n    this.fromFilterValid = hasDateFrom ? true : false;\n    this.toFilterValid = hasDateTo ? true : false;\n\n    if (this.filtersFg.valid) {\n      this.store.dispatch(new fromAnnoActions.ApplyCommentSymmaryFilter({ ...value, dateRangeFrom, dateRangeTo }));\n    }\n  }\n\n  onFiltersToggle() {\n    this.showFilters = !this.showFilters;\n  }\n\n  public onClose(): void {\n    this.toolbarEvents.toggleCommentsSummary(false);\n  }\n\n  public onPrint(): void {\n    this.printService.printElementNatively(this.commentsTable.nativeElement, 1000, 900);\n  }\n\n  navigateToPage(pageNumber: number) {\n    if (this.contentType === 'pdf') {\n      this.toolbarEvents.setPage(pageNumber);\n    }\n    this.toolbarEvents.toggleCommentsSummary(false);\n    this.toolbarEvents.toggleCommentsPanel(true);\n  }\n\n  ngOnDestroy(): void {\n    this.$subscriptions.unsubscribe();\n  }\n}\n","<div id=\"modal-background\" class=\"modal\" (click)=\"onClose()\">\n  <div\n    #outerContainer\n    id=\"modal\"\n    class=\"modal-content govuk-width-container clearfix\"\n    (click)=\"$event.stopPropagation()\"\n    cdkTrapFocus\n    tabindex=\"0\"\n  >\n    <div id=\"comment-container\" class=\"comment-container\" #commentContainer>\n      <h2 class=\"govuk-heading-m\">{{ title }}</h2>\n      <ng-container *ngIf=\"comments$ | async as comments\">\n        <ng-container *ngIf=\"comments.length\">\n          <button\n            type=\"submit\"\n            class=\"govuk-button govuk-!-margin-right-1\"\n            (click)=\"onFiltersToggle()\"\n          >\n            {{\n              !showFilters\n                ? (\"Show Filters\" | rpxTranslate)\n                : (\"Hide Filters\" | rpxTranslate)\n            }}\n          </button>\n          <button\n            type=\"submit\"\n            class=\"govuk-button govuk-button--secondary\"\n            (click)=\"onClearFilters()\"\n            *ngIf=\"hasFilter\"\n          >\n            {{ \"Clear Filters\" | rpxTranslate }}\n          </button>\n          <ng-container *ngIf=\"showFilters\">\n            <form [formGroup]=\"filtersFg\" (ngSubmit)=\"onFilter()\">\n              <div class=\"dates\">\n                <div class=\"dates__from\">\n                  <mv-gov-uk-date\n                    [config]=\"{ id: 'dateRangeFrom', legend: 'From' }\"\n                    [formGroup]=\"filtersFg.controls['dateRangeFrom']\"\n                    [errorMessage]=\"{\n                      isInvalid: !fromFilterValid,\n                      messages: ['From date is required']\n                    }\"\n                  ></mv-gov-uk-date>\n                </div>\n                <div class=\"dates__to\">\n                  <mv-gov-uk-date\n                    [config]=\"{ id: 'dateRangeTo', legend: 'To' }\"\n                    [formGroup]=\"filtersFg.controls['dateRangeTo']\"\n                    [errorMessage]=\"{\n                      isInvalid: !toFilterValid,\n                      messages: ['To date is required']\n                    }\"\n                  ></mv-gov-uk-date>\n                </div>\n                <div class=\"dates__tags\">\n                  <mv-gov-uk-fieldset\n                    [config]=\"{\n                      legend: 'Tags',\n                      classes: 'govuk-label--m',\n                      id: 'filters'\n                    }\"\n                    [isHeading]=\"false\"\n                  >\n                    <div\n                      class=\"govuk-checkboxes--scroll\"\n                      [formGroup]=\"filtersFg.controls['tagFilters']\"\n                    >\n                      <div class=\"govuk-checkboxes govuk-checkboxes--small\">\n                        <div\n                          class=\"govuk-checkboxes__item\"\n                          *ngFor=\"let item of allTags$ | async\"\n                        >\n                          <input\n                            [formControlName]=\"item.key\"\n                            class=\"govuk-checkboxes__input\"\n                            [value]=\"false\"\n                            type=\"checkbox\"\n                          />\n                          <label class=\"govuk-label govuk-checkboxes__label\">\n                            {{ item.key | unsnake }} ({{ item.length }})\n                          </label>\n                        </div>\n                      </div>\n                    </div>\n                  </mv-gov-uk-fieldset>\n                </div>\n                <div class=\"dates__cta\">\n                  <button type=\"submit\" class=\"govuk-button\">\n                    {{ \"Filter comments\" | rpxTranslate }}\n                  </button>\n                </div>\n              </div>\n            </form>\n          </ng-container>\n          <ng-container *ngIf=\"comments[0]\">\n            <ngx-datatable\n              [rows]=\"comments\"\n              rowHeight=\"auto\"\n              headerHeight=\"auto\"\n              [columnMode]=\"'flex'\"\n              [sorts]=\"[{ prop: 'date', dir: 'desc' }]\"\n            >\n              <ngx-datatable-column\n                name=\"{{ 'User' | rpxTranslate }}\"\n                [flexGrow]=\"1\"\n                [sortable]=\"false\"\n              ></ngx-datatable-column>\n              <ngx-datatable-column\n                name=\"{{ 'Page' | rpxTranslate }}\"\n                [flexGrow]=\"1\"\n              >\n                <ng-template ngx-datatable-cell-template let-value=\"value\">\n                  <a\n                    [routerLink]=\"[]\"\n                    class=\"comment-summary_pages\"\n                    (click)=\"navigateToPage(value)\"\n                    >{{ value }}</a\n                  >\n                </ng-template>\n              </ngx-datatable-column>\n              <ngx-datatable-column\n                name=\"{{ 'Date' | rpxTranslate }}\"\n                [flexGrow]=\"1\"\n              ></ngx-datatable-column>\n              <ngx-datatable-column\n                name=\"{{ 'Comment' | rpxTranslate }}\"\n                [flexGrow]=\"3\"\n                [sortable]=\"false\"\n              ></ngx-datatable-column>\n              <ngx-datatable-column\n                name=\"{{ 'Tags' | rpxTranslate }}\"\n                [flexGrow]=\"1\"\n                [sortable]=\"false\"\n              >\n                <ng-template ngx-datatable-cell-template let-value=\"value\">\n                  <span class=\"hmcts-badge\" *ngFor=\"let tag of value\">{{\n                    tag.label\n                  }}</span>\n                </ng-template>\n              </ngx-datatable-column>\n            </ngx-datatable>\n          </ng-container>\n        </ng-container>\n        <ng-container *ngIf=\"!comments[0]\">\n          <h3 class=\"govuk-heading-s\">\n            {{\n              \"No comments available. Select text to add a highlight or comment.\"\n                | rpxTranslate\n            }}\n          </h3>\n        </ng-container>\n      </ng-container>\n    </div>\n\n    <div class=\"button-container\">\n      <button (click)=\"onPrint()\" class=\"govuk-button govuk-button--secondary\">\n        {{ \"Print\" | rpxTranslate }}\n      </button>\n      <button id=\"modal-close-button\" (click)=\"onClose()\" class=\"govuk-button\">\n        {{ \"Close\" | rpxTranslate }}\n      </button>\n    </div>\n  </div>\n</div>\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnInit,\n  ViewChild,\n  OnDestroy,\n  Output,\n  EventEmitter,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport { Subscription } from 'rxjs';\nimport { ResponseType } from '../viewer-exception.model';\n\n@Component({\n    selector: 'mv-multimedia-player',\n    templateUrl: './multimedia-player.component.html',\n    standalone: false\n})\nexport class MultimediaPlayerComponent implements OnInit, OnChanges, OnDestroy {\n\n  @Input() url: string;\n  @Input() downloadFileName: string;\n  @Input() multimediaOn: boolean;\n\n  @Output() loadStatus = new EventEmitter<ResponseType>();\n\n  @ViewChild('downloadLink', {static: false}) downloadLink: ElementRef;\n  @ViewChild('videoPlayer', {static: false}) videoPlayer: ElementRef;\n\n  playbackMsg = 'loading';\n\n  private subscription: Subscription;\n\n  constructor(\n    public readonly toolbarEvents: ToolbarEventService,\n  ) {}\n\n  public ngOnInit(): void {\n    this.subscription = this.toolbarEvents.downloadSubject\n      .subscribe(() => this.downloadLink.nativeElement.click());\n    this.loadStatus.emit(ResponseType.SUCCESS);\n  }\n\n  public ngOnChanges(changes: SimpleChanges) {\n    if (changes.url) {\n      this.reloadVideo();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  reloadVideo() {\n    if (this.videoPlayer) {\n      this.playbackMsg = 'loading';\n      this.videoPlayer.nativeElement.load();\n    }\n  }\n\n  onSuccess() {\n    this.playbackMsg = 'success';\n  }\n\n  onError() {\n    this.playbackMsg = 'error';\n  }\n}\n","<div class=\"govuk-width-container\">\n  <div class=\"govuk-notification-banner__content\">\n    <p>\n      <span *ngIf=\"multimediaOn && playbackMsg === 'loading'\">{{\n        \"Loading multimedia content ...\" | rpxTranslate\n      }}</span>\n      <span *ngIf=\"!multimediaOn\"\n        >{{ \"Multimedia playback is not enabled, \" | rpxTranslate }}\n      </span>\n      <span *ngIf=\"multimediaOn && playbackMsg === 'success'\"\n        >{{ \"Use the player to play to the file or\" | rpxTranslate }}\n      </span>\n      <span *ngIf=\"multimediaOn && playbackMsg === 'error'\"\n        >{{ \"Mime type not supported.\" | rpxTranslate }}\n      </span>\n      <a\n        *ngIf=\"!multimediaOn || playbackMsg !== 'loading'\"\n        #downloadLink\n        [href]=\"url\"\n        [download]=\"downloadFileName\"\n        >{{ \"Click here to download\" | rpxTranslate }}</a\n      >\n    </p>\n    <video\n      #videoPlayer\n      *ngIf=\"multimediaOn\"\n      width=\"100%\"\n      height=\"100%\"\n      preload=\"auto\"\n      (canplay)=\"onSuccess()\"\n      controls\n    >\n      <source (error)=\"onError()\" [src]=\"url\" type=\"video/mp4\" />\n      <source\n        (error)=\"onError()\"\n        [src]=\"url\"\n        type=\"video/mp4; codecs='avc1, av01, hvc1, hev1, mp4v, mp4a.40.2, opus'\"\n      />\n      <source (error)=\"onError()\" [src]=\"url\" type=\"video/ogg\" />\n      <source\n        (error)=\"onError()\"\n        [src]=\"url\"\n        type=\"video/ogg; codecs='theora, vp8, vp9, flac, opus, vorbis'\"\n      />\n      <source (error)=\"onError()\" [src]=\"url\" type=\"video/webm\" />\n      <source\n        (error)=\"onError()\"\n        [src]=\"url\"\n        type=\"video/webm; codecs='vp8, vp9, vorbis, opus'\"\n      />\n    </video>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { ResponseType, ViewerException } from '../viewer-exception.model';\nimport { select, Store } from '@ngrx/store';\nimport * as fromStore from '../../store/reducers/document.reducer';\nimport * as fromDocumentActions from '../../store/actions/document.actions';\nimport { Subscription } from 'rxjs';\nimport * as fromSelectors from '../../store/selectors/document.selectors';\nimport { AnnotationSet } from '../../annotations/annotation-set/annotation-set.model';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n    selector: 'mv-conversion-viewer',\n    templateUrl: './convertible-content-viewer.component.html',\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class ConvertibleContentViewerComponent implements OnInit, OnDestroy, OnChanges {\n\n  @Input() originalUrl;\n  @Input() downloadFileName: string;\n\n  @Input() height;\n\n  @Input() enableAnnotations: boolean;\n  @Input() enableRedactions: boolean;\n  @Input() annotationSet: AnnotationSet | null;\n\n\n  @Output() mediaLoadStatus = new EventEmitter<ResponseType>();\n  @Output() viewerException = new EventEmitter<ViewerException>();\n  @Output() documentTitle = new EventEmitter<string>();\n\n  private $subscription: Subscription;\n  convertedUrl: string;\n\n  constructor(private store: Store<fromStore.DocumentState>) {\n  }\n\n  ngOnInit(): void {\n    this.$subscription = this.store.pipe(select(fromSelectors.getConvertedDocument), filter(value => !!value))\n      .subscribe((docInfo) => {\n        if (docInfo.url) {\n          this.convertedUrl = docInfo.url;\n          this.store.dispatch(new fromDocumentActions.ClearConvertDocUrl());\n        } else {\n          this.onLoadException(new ViewerException(docInfo.error));\n        }\n      });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.originalUrl?.currentValue && changes.originalUrl.currentValue !== changes.originalUrl.previousValue) {\n      this.store.dispatch(new fromDocumentActions.Convert(this.extractDMStoreDocId(this.originalUrl)));\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.$subscription.unsubscribe();\n  }\n\n  onMediaLoad(status: ResponseType) {\n    this.mediaLoadStatus.emit(status);\n  }\n\n  onLoadException(exception: ViewerException) {\n    this.viewerException.emit(exception);\n  }\n\n  onDocumentTitleChange(title: string) {\n    this.documentTitle.emit(title);\n  }\n\n  // todo move this to common place for media viewer and pdf\n  private extractDMStoreDocId(url: string): string {\n\n    if (url.includes('/documents/')) {\n      url = url.split('/documents/')[1];\n    } else if (url.includes('/documentsv2/')) {\n      url = url.split('/documentsv2/')[1];\n    }\n    return url.replace('/binary', '');\n  }\n}\n","<mv-pdf-viewer *ngIf=\"convertedUrl\"\n               (mediaLoadStatus)=\"onMediaLoad($event)\"\n               (pdfViewerException)=\"onLoadException($event)\"\n               (documentTitle)=\"onDocumentTitleChange($event)\"\n               [url]=\"convertedUrl\"\n               [downloadUrl]=\"originalUrl\"\n               [enableAnnotations]=\"enableAnnotations\"\n               [enableRedactions]=\"enableRedactions\"\n               [annotationSet]=\"enableAnnotations ? annotationSet : null\"\n               [downloadFileName]=\"downloadFileName\"\n               [height]=\"height\">\n</mv-pdf-viewer>\n","import { Directive, ElementRef, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport * as fromDocumentActions from '../../store/actions/document.actions';\nimport { select, Store } from '@ngrx/store';\nimport * as fromDocuments from '../../store/selectors/document.selectors';\nimport { distinctUntilChanged, filter, take } from 'rxjs/operators';\nimport { Rotation } from './rotation.model';\nimport { ResponseType } from '../viewer-exception.model';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\nimport * as fromStore from '../../store/reducers/reducers';\nimport { ToolbarButtonVisibilityService } from '../../toolbar/toolbar-button-visibility.service';\nimport { Subscription } from 'rxjs';\n\n\n@Directive({\n    selector: '[mvRotationPersist]',\n    standalone: false\n})\nexport class RotationPersistDirective implements OnInit, OnDestroy {\n\n  documentId: string;\n  rotation = 0;\n  savedRotation = 0;\n\n  $subscriptions: Subscription;\n\n  constructor(private el: ElementRef,\n    private store: Store<fromStore.DocumentState>,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    private toolbarEvents: ToolbarEventService) {\n  }\n\n  ngOnInit() {\n    this.$subscriptions = this.toolbarEvents.rotateSubject.pipe(distinctUntilChanged()).subscribe(rotation => this.onRotate(rotation));\n\n    this.$subscriptions.add(this.toolbarEvents.saveRotationSubject.subscribe(() => this.saveRotation()));\n    this.$subscriptions.add(this.store.pipe(select(fromDocuments.getRotation)).subscribe(rotation => this.savedRotation = rotation));\n    this.$subscriptions.add(this.store.pipe(select(fromDocuments.getDocumentId)).subscribe(documentId => this.documentId = documentId));\n  }\n\n  ngOnDestroy() {\n    this.$subscriptions.unsubscribe();\n  }\n\n  @HostListener('mediaLoadStatus', ['$event'])\n  onMediaLoad(status: ResponseType) {\n    this.rotation = 0;\n    this.store.dispatch(new fromDocumentActions.LoadRotation(this.documentId));\n    this.store.pipe(select(fromDocuments.rotationLoaded),\n      filter(value => !!value),\n      take(1))\n      .subscribe(() => {\n        if (this.savedRotation) {\n          this.toolbarEvents.rotateSubject.next(this.savedRotation);\n        }\n      });\n  }\n\n  private onRotate(rotation: number) {\n    this.rotation = (this.rotation + rotation) % 360;\n    this.toolbarButtons.showSaveRotationButton = this.savedRotation !== this.rotation;\n  }\n\n  private saveRotation() {\n    const payload: Rotation = {\n      documentId: this.documentId,\n      rotationAngle: this.rotation\n    };\n    this.store.dispatch(new fromDocumentActions.SaveRotation(payload));\n  }\n}\n","import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport { IcpEventService } from '../../toolbar/icp-event.service';\n\n@Component({\n    selector: 'mv-confirm-action',\n    templateUrl: './confirm-action-dialog.component.html',\n    standalone: false\n})\nexport class ConfirmActionDialogComponent implements AfterViewInit {\n  @ViewChild('modalContainer') modalContainer: ElementRef;\n\n  constructor(private icpEventService: IcpEventService) {}\n\n  ngAfterViewInit(): void {\n    if (this.modalContainer) {\n      this.modalContainer.nativeElement.focus();\n    }\n  }\n\n  onCancel() {\n    this.icpEventService.leavingSession.next(false);\n  }\n\n  onConfirm() {\n    this.icpEventService.confirmExit();\n    this.icpEventService.leavingSession.next(false);\n  }\n}\n","<div id=\"modal-background\" class=\"modal\" (click)=\"onCancel()\">\n  <div id=\"modal\" \n    class=\"modal-content govuk-width-container clearfix\"\n    (click)=\"$event.stopPropagation()\"\n    #modalContainer\n    tabIndex=\"-1\"\n    role=\"dialog\"\n    aria-modal=\"true\"\n  >\n    <h2 class=\"govuk-heading-s\">Are you sure you want to leave the presentation?</h2>\n    <div class=\"button-container\">\n      <button id=\"modal-close-button\" (click)=\"onConfirm()\" class=\"govuk-button\">Confirm</button>\n      <button (click)=\"onCancel()\" class=\"govuk-button govuk-button--secondary\">Cancel</button>\n    </div>\n  </div>\n</div>\n","import {\n  AfterContentInit, AfterViewChecked,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { delay, filter, Observable, Subscription, take } from 'rxjs';\nimport {\n  defaultImageOptions, defaultMultimediaOptions,\n  defaultPdfOptions,\n  defaultUnsupportedOptions,\n  ToolbarButtonVisibilityService\n} from './toolbar/toolbar-button-visibility.service';\nimport { AnnotationSet } from './annotations/annotation-set/annotation-set.model';\nimport { ToolbarEventService } from './toolbar/toolbar-event.service';\nimport { AnnotationApiService } from './annotations/services/annotation-api/annotation-api.service';\nimport { ResponseType, ViewerException } from './viewers/viewer-exception.model';\nimport { CommentService } from './annotations/comment-set/comment/comment.service';\nimport { select, Store } from '@ngrx/store';\nimport * as fromStore from './store/reducers/reducers';\nimport * as fromAnnoSelectors from './store/selectors/annotation.selectors';\nimport * as fromDocumentsSelector from './store/selectors/document.selectors';\nimport * as fromAnnoActions from './store/actions/annotation.actions';\nimport * as fromRedactActions from './store/actions/redaction.actions';\nimport * as fromDocumentActions from './store/actions/document.actions';\nimport { IcpEventService } from './toolbar/icp-event.service';\nimport { HtmlTemplatesHelper } from './shared/util/helpers/html-templates.helper';\n\nenum CoreContentTypes {\n  PDF = 'pdf',\n  IMAGE = 'image'\n}\n\nenum MultimediaContentTypes {\n  MP4 = 'mp4',\n  MP3 = 'mp3',\n}\n\nenum ConvertibleContentTypes {\n  EXCEL = 'excel',\n  WORD = 'word',\n  POWERPOINT = 'powerpoint',\n  TXT = 'txt',\n  RTF = 'rtf'\n}\n\n@Component({\n    selector: 'mv-media-viewer',\n    templateUrl: './media-viewer.component.html',\n    styleUrls: ['./media-viewer.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class MediaViewerComponent implements OnChanges, OnDestroy, AfterContentInit, AfterViewChecked {\n\n  @ViewChild('viewerRef', {static: false}) viewerRef: ElementRef;\n\n  @Input() url;\n  @Input() downloadFileName: string;\n  @Input() contentType: string;\n\n  @Input() showToolbar = true;\n  @Input() toolbarButtonOverrides: any = {};\n\n  @Input()\n  public height: string;\n  public viewerHeight: string;\n\n  @Input() width = '100%';\n\n  @Output() mediaLoadStatus = new EventEmitter<ResponseType>();\n  @Output() viewerException = new EventEmitter<ViewerException>();\n  @Output() toolbarEventsOutput = new EventEmitter<ToolbarEventService>();\n  @Output() unsavedChanges = new EventEmitter<boolean>();\n\n  @Input() enableAnnotations = false;\n  @Input() annotationApiUrl;\n\n  @Input() enableRedactions = false;\n  @Input() enableICP = false;\n  @Input() multimediaPlayerEnabled = false;\n  @Input() enableRedactSearch = false;\n\n\n  @Input() caseId: string;\n\n  multimediaContent = false;\n  convertibleContent = false;\n  unsupportedContent = false;\n\n  documentTitle: string;\n  showCommentSummary: boolean;\n  annotationSet$: Observable<AnnotationSet | {}>;\n  hasScrollBar: boolean;\n  typeException = false;\n  hasDifferentPageSize$: Observable<boolean>;\n  documentId: string;\n\n  private $subscriptions: Subscription;\n  private prevOffset: number;\n  private currentRegionIndex = -1;\n\n  constructor(\n    private store: Store<fromStore.AnnotationSetState>,\n    public readonly toolbarButtons: ToolbarButtonVisibilityService,\n    public readonly toolbarEvents: ToolbarEventService,\n    private readonly api: AnnotationApiService,\n    private readonly commentService: CommentService,\n    private elRef: ElementRef,\n    private cdr: ChangeDetectorRef,\n    public icpEventService: IcpEventService\n  ) {\n    if (this.annotationApiUrl) {\n      api.annotationApiUrl = this.annotationApiUrl;\n    }\n  }\n\n  ngAfterContentInit() {\n    this.annotationSet$ = this.store.pipe(select(fromAnnoSelectors.getAnnotationSet));\n    this.hasDifferentPageSize$ = this.store.pipe(select(fromDocumentsSelector.getPageDifference));\n    this.setToolbarButtons();\n    this.toolbarEventsOutput.emit(this.toolbarEvents);\n    this.$subscriptions = this.commentService.getUnsavedChanges()\n      .subscribe(changes => this.onCommentChange(changes));\n    this.$subscriptions.add(this.toolbarEvents.getShowCommentSummary()\n      .subscribe(changes => this.showCommentSummary = changes));\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.height && this.viewerHeight !== this.height) {\n      this.viewerHeight = this.height;\n      this.cdr.detectChanges();\n      return;\n    }\n\n    if (!this.height) {\n      const compOffsetTop = HtmlTemplatesHelper.getAdjustedBoundingRect(this.elRef.nativeElement).top;\n      const viewerOffsetTop = this.viewerRef.nativeElement.offsetTop;\n      const offset = compOffsetTop + viewerOffsetTop;\n\n      if (this.prevOffset !== offset) {\n        this.viewerHeight = `calc(100vh - ${offset}px)`;\n        this.prevOffset = offset;\n        this.cdr.detectChanges();\n      }\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.annotationApiUrl) {\n      this.api.annotationApiUrl = this.annotationApiUrl;\n    }\n\n    if (changes.contentType) {\n      this.convertibleContent = this.needsConverting();\n      this.multimediaContent = this.isMultimedia();\n      this.unsupportedContent = !this.isSupported();\n    }\n\n    if (changes.url) {\n      this.toolbarEvents.reset();\n      this.commentService.resetCommentSet();\n      this.documentId = this.extractDMStoreDocId(this.url);\n      this.store.dispatch(new fromDocumentActions.SetDocumentId(this.documentId));\n      if (this.enableAnnotations && !(this.multimediaContent || this.unsupportedContent)) {\n        this.store.dispatch(new fromAnnoActions.LoadAnnotationSet(this.documentId));\n      }\n      if (this.enableRedactions && !(this.multimediaContent || this.unsupportedContent) && this.documentId) {\n        this.store.dispatch(new fromRedactActions.LoadRedactions(this.documentId));\n      }\n      if (this.contentType === 'image') {\n        this.documentTitle = null;\n      }\n    }\n\n    this.setToolbarButtons();\n    this.detectOs();\n    this.typeException = false;\n  }\n\n  ngOnDestroy() {\n    this.$subscriptions.unsubscribe();\n  }\n\n  needsConverting(): boolean {\n    return this.contentType !== null && Object.keys(ConvertibleContentTypes).includes(this.contentType.toUpperCase());\n  }\n\n  isMultimedia(): boolean {\n    return this.contentType !== null && Object.keys(MultimediaContentTypes).includes(this.contentType.toUpperCase());\n  }\n\n  isSupported(): boolean {\n    const supportedTypes = Object.assign({}, MultimediaContentTypes, ConvertibleContentTypes, CoreContentTypes);\n    return this.contentType !== null && Object.keys(supportedTypes).includes(this.contentType.toUpperCase());\n  }\n\n  onMediaLoad(status: ResponseType) {\n    this.mediaLoadStatus.emit(status);\n  }\n\n  setToolbarButtons() {\n    if (this.contentType === CoreContentTypes.PDF || this.needsConverting()) {\n      this.toolbarButtons.setup({\n        ...defaultPdfOptions, showHighlightButton: this.enableAnnotations, showDrawButton: false,\n        ...this.toolbarButtonOverrides\n      });\n    } else if (this.contentType === CoreContentTypes.IMAGE) {\n      this.toolbarButtons.setup({\n        ...defaultImageOptions, showDrawButton: this.enableAnnotations,\n        ...this.toolbarButtonOverrides\n      });\n    } else if (this.isMultimedia()) {\n      this.toolbarButtons.setup({\n        ...defaultMultimediaOptions,\n        ...this.toolbarButtonOverrides\n      });\n    } else {\n      this.toolbarButtons.setup({\n        ...defaultUnsupportedOptions,\n        ...this.toolbarButtonOverrides\n      });\n    }\n  }\n\n  onLoadException(exception: ViewerException) {\n    this.viewerException.emit(exception);\n    if (!this.isSupported()) {\n      this.typeException = false;\n    } else {\n      this.typeException = true;\n      this.contentType = null;\n      this.setToolbarButtons();\n    }\n  }\n\n  onCommentChange(changes: boolean) {\n    this.unsavedChanges.emit(changes);\n  }\n\n  onDocumentTitleChange(title: string) {\n    this.documentTitle = title;\n  }\n\n  // If secure mode is enabled (which adds \"documentsv2\" to the documentId), get rid of it\n  private extractDMStoreDocId(url: string): string {\n    url = url.includes('/documents/') ? url.split('/documents/')[1] : url;\n    url = url.includes('/documentsv2/') ? url.split('/documentsv2/')[1] : url;\n    return url.replace('/binary', '');\n  }\n\n  detectOs() {\n    this.hasScrollBar = window.navigator.userAgent.indexOf('Win') !== -1;\n  }\n\n  skipToSidebar(event: Event): void {\n    event.preventDefault();\n\n    this.openSidebarAndWait(() => {\n        const element = document.querySelector<HTMLElement>('#sidebarContent');\n        if (element) {\n          if (!element.hasAttribute('tabindex')) {\n            element.setAttribute('tabindex', '-1');\n          }\n          element.focus();\n        }\n    });\n  }\n\n  private openSidebarAndWait(callback: () => void): void {\n    const isOpen = this.toolbarEvents.sidebarOpen.getValue();\n    if (!isOpen) {\n      this.toolbarEvents.toggleSideBar(true);\n    }\n\n    this.toolbarEvents.sidebarOpen.pipe(\n      filter(open => open === true),\n      take(1),\n      delay(0)\n    ).subscribe(() => {\n      callback();\n    });\n  }\n\n  skipToViewer(event: Event): void {\n    event.preventDefault();\n\n    const element = document.querySelector<HTMLElement>('#viewerContainer');\n    if (element) {\n      element.focus();\n    }\n  }\n\n  @HostListener('document:keydown.F6', ['$event'])\n  handleF6Forward(event: KeyboardEvent): void {\n    event.preventDefault();\n    this.cycleRegion('forward');\n  }\n\n  @HostListener('document:keydown.shift.F6', ['$event'])\n  handleF6Backward(event: KeyboardEvent): void {\n    event.preventDefault();\n    this.cycleRegion('backward');\n  }\n\n  private cycleRegion(direction: 'forward' | 'backward'): void {\n    const regions = [\n      { selector: '#toolbarContainer', label: 'Main toolbar', isVisible: () => this.showToolbar },\n      { selector: '#sidebarContent', label: 'Index menu', isVisible: () => true },\n      { selector: '#viewerContainer', label: 'Document viewer', isVisible: () => true }\n    ];\n\n    const visibleRegions = regions.filter(r => r.isVisible());\n    if (visibleRegions.length === 0) return;\n\n    const previousRegion = visibleRegions[this.currentRegionIndex];\n\n    if (direction === 'forward') {\n      this.currentRegionIndex = (this.currentRegionIndex + 1) % visibleRegions.length;\n    } else {\n      this.currentRegionIndex = this.currentRegionIndex <= 0\n        ? visibleRegions.length - 1\n        : this.currentRegionIndex - 1;\n    }\n\n    const currentRegion = visibleRegions[this.currentRegionIndex];\n\n    if (previousRegion?.selector === '#sidebarContent' && currentRegion.selector !== '#sidebarContent') {\n      const isOpen = this.toolbarEvents.sidebarOpen.getValue();\n      if (isOpen) {\n        this.toolbarEvents.toggleSideBar(false);\n      }\n    }\n    \n    if (currentRegion.selector === '#sidebarContent') {\n      this.openSidebarAndWait(() => {\n        this.focusRegion(currentRegion);\n      });\n    } else {\n      this.focusRegion(currentRegion);\n    }\n  }\n\n  private focusRegion(region: { selector: string; label: string }): void {\n    const element = document.querySelector<HTMLElement>(region.selector);\n    if (!element) {\n      return;\n    }\n\n    const firstFocusable = element.querySelector<HTMLElement>(\n      'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n    );\n\n    if (firstFocusable) {\n      firstFocusable.focus();\n    } else {\n      if (!element.hasAttribute('tabindex')) {\n        element.setAttribute('tabindex', '-1');\n      }\n      element.focus();\n    }\n  }\n}\n","<div\n  id=\"outerContainer\"\n  [ngClass]=\"{\n    'has-redact-bar': toolbarEvents.redactionMode | async,\n    'icp-mode': icpEventService.enabled | async,\n    'is-redaction-preview': toolbarEvents.redactionPreview | async,\n    sidebarOpen: toolbarEvents.sidebarOpen | async,\n    'has-scroll-bar': hasScrollBar,\n    'has-different-page-size': hasDifferentPageSize$ | async\n  }\"\n  [ngStyle]=\"{ width: width }\"\n>\n  <div class=\"govuk-skip-link-container\">\n    <a href=\"#sidebarContent\" class=\"mv-govuk-skip-link\" (click)=\"skipToSidebar($event)\">Skip to index menu</a>\n    <a href=\"#viewerContainer\" class=\"mv-govuk-skip-link\" (click)=\"skipToViewer($event)\">Skip to document</a>\n  </div>\n  <mv-comments-summary\n    *ngIf=\"showCommentSummary\"\n    [title]=\"documentTitle || 'Comment Summary'\"\n    [contentType]=\"contentType\"\n  >\n  </mv-comments-summary>\n\n  <mv-confirm-action\n    *ngIf=\"icpEventService.leavingSession | async\"\n  ></mv-confirm-action>\n\n  <div id=\"mainContainer\">\n    <mv-main-toolbar\n      *ngIf=\"showToolbar\"\n      [enableAnnotations]=\"enableAnnotations\"\n      [enableICP]=\"enableICP\"\n      [enableRedactions]=\"enableRedactions\"\n      [contentType]=\"contentType\"\n    >\n    </mv-main-toolbar>\n    <mv-redaction-toolbar\n      [showRedactSearch]=\"enableRedactSearch\"\n      *ngIf=\"toolbarEvents.redactionMode | async\"\n    ></mv-redaction-toolbar>\n    <mv-highlight-toolbar\n      *ngIf=\"toolbarEvents.highlightToolbarSubject | async\"\n    ></mv-highlight-toolbar>\n    <mv-icp-toolbar *ngIf=\"icpEventService.enabled | async\"></mv-icp-toolbar>\n\n    <div #viewerRef>\n      <mv-conversion-viewer\n        *ngIf=\"convertibleContent\"\n        (documentTitle)=\"onDocumentTitleChange($event)\"\n        (mediaLoadStatus)=\"onMediaLoad($event)\"\n        (viewerException)=\"onLoadException($event)\"\n        [enableAnnotations]=\"enableAnnotations\"\n        [enableRedactions]=\"enableRedactions\"\n        [annotationSet]=\"enableAnnotations ? (annotationSet$ | async) : null\"\n        [originalUrl]=\"url\"\n        [downloadFileName]=\"downloadFileName\"\n        [height]=\"viewerHeight\"\n        mvRotationPersist\n      >\n      </mv-conversion-viewer>\n      <mv-pdf-viewer\n        *ngIf=\"contentType === 'pdf'\"\n        #pdfViewer\n        (mediaLoadStatus)=\"onMediaLoad($event)\"\n        (pdfViewerException)=\"onLoadException($event)\"\n        (documentTitle)=\"onDocumentTitleChange($event)\"\n        [url]=\"url\"\n        [enableAnnotations]=\"enableAnnotations\"\n        [enableRedactions]=\"enableRedactions\"\n        [enableICP]=\"enableICP\"\n        [annotationSet]=\"enableAnnotations ? (annotationSet$ | async) : null\"\n        [downloadFileName]=\"downloadFileName\"\n        [height]=\"viewerHeight\"\n        [caseId]=\"caseId\"\n        mvRotationPersist\n      >\n      </mv-pdf-viewer>\n      <mv-image-viewer\n        *ngIf=\"contentType === 'image'\"\n        (mediaLoadStatus)=\"onMediaLoad($event)\"\n        (imageViewerException)=\"onLoadException($event)\"\n        [url]=\"url\"\n        [enableAnnotations]=\"enableAnnotations\"\n        [annotationSet]=\"enableAnnotations ? (annotationSet$ | async) : null\"\n        [downloadFileName]=\"downloadFileName\"\n        [height]=\"viewerHeight\"\n        mvRotationPersist\n      >\n      </mv-image-viewer>\n      <mv-multimedia-player\n        *ngIf=\"multimediaContent\"\n        [multimediaOn]=\"multimediaPlayerEnabled\"\n        [url]=\"url\"\n        [downloadFileName]=\"downloadFileName\"\n        (loadStatus)=\"onMediaLoad($event)\"\n      >\n      </mv-multimedia-player>\n      <mv-unsupported-viewer\n        *ngIf=\"unsupportedContent\"\n        [url]=\"url\"\n        [typeException]=\"typeException\"\n        [downloadFileName]=\"downloadFileName\"\n        (loadStatus)=\"onMediaLoad($event)\"\n        (unsupportedViewerException)=\"onLoadException($event)\"\n      >\n      </mv-unsupported-viewer>\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GovUkDateComponent } from './gov-uk-date/gov-uk-date.component';\nimport { GovUkErrorMessageComponent } from './gov-uk-error-message/gov-uk-error-message.component';\nimport { GovUkFieldsetComponent } from './gov-uk-fieldset/gov-uk-fieldset.component';\nimport { GovUkLabelComponent } from './gov-uk-label/gov-uk-label.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { KeyboardNavDirective } from './directives/keyboard-nav.directive';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    CommonModule,\n    RouterModule\n  ],\n  declarations: [\n    GovUkDateComponent,\n    GovUkErrorMessageComponent,\n    GovUkFieldsetComponent,\n    GovUkLabelComponent,\n    KeyboardNavDirective\n  ],\n  exports: [\n    GovUkDateComponent,\n    GovUkErrorMessageComponent,\n    GovUkFieldsetComponent,\n    GovUkLabelComponent,\n    KeyboardNavDirective\n  ]\n})\nexport class SharedModule {}\n","import { RedactionSearchBarComponent } from './redaction-search-bar/redaction-search-bar.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MainToolbarComponent } from './main-toolbar/main-toolbar.component';\nimport { SearchBarComponent } from './search-bar/search-bar.component';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarButtonVisibilityService } from './toolbar-button-visibility.service';\nimport { ToolbarFocusService } from './toolbar-focus.service';\nimport { RedactionToolbarComponent } from './redaction-toolbar/redaction-toolbar.component';\nimport { IcpToolbarComponent } from './icp-toolbar/icp-toolbar.component';\nexport { ToolbarButtonVisibilityService } from './toolbar-button-visibility.service';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { RouterModule } from '@angular/router';\nimport { HighlightToolbarComponent } from './highlight-toolbar/highlight-toolbar.component';\nimport { RpxTranslationModule } from 'rpx-xui-translation';\nimport { TooltipDismissDirective } from '../shared/directives/tooltip-dismiss.directive';\nimport { SharedModule } from '../shared/shared.module';\n\n\n@NgModule({\n  declarations: [\n    SearchBarComponent,\n    MainToolbarComponent,\n    RedactionToolbarComponent,\n    IcpToolbarComponent,\n    RedactionSearchBarComponent,\n    HighlightToolbarComponent,\n    TooltipDismissDirective\n  ],\n  providers: [\n    ToolbarButtonVisibilityService,\n    ToolbarFocusService\n  ],\n  exports: [\n    MainToolbarComponent,\n    SearchBarComponent,\n    RedactionToolbarComponent,\n    IcpToolbarComponent,\n    RedactionSearchBarComponent,\n    HighlightToolbarComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    OverlayModule,\n    RouterModule,\n    RpxTranslationModule.forChild(),\n    SharedModule\n  ]\n})\nexport class ToolbarModule { }\n","import { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Bookmark } from '../../../viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces';\n\n@Injectable()\nexport class BookmarksApiService {\n\n  private readonly ANNOTATIONS_API = '/em-anno';\n\n  constructor(\n    private readonly httpClient: HttpClient\n  ) {}\n\n  public getBookmarks(documentId: string): Observable<any> {\n    return this.httpClient\n      .get(`${this.ANNOTATIONS_API}/${documentId}/bookmarks`,\n        { observe: 'response' , withCredentials: true });\n  }\n\n  public createBookmark(bookmark: Partial<Bookmark>): Observable<Bookmark> {\n    return this.httpClient\n      .post<Bookmark>(`${this.ANNOTATIONS_API}/bookmarks`,\n        bookmark, { observe: 'response' , withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public updateBookmark(bookmark: Partial<Bookmark>): Observable<Bookmark> {\n    return this.httpClient\n      .put<Bookmark>(`${this.ANNOTATIONS_API}/bookmarks`,\n        bookmark, { observe: 'response' , withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public updateMultipleBookmarks(bookmarks: Partial<Bookmark[]>): Observable<Bookmark[]> {\n    return this.httpClient\n      .put<Bookmark[]>(`${this.ANNOTATIONS_API}/bookmarks_multiple`,\n        bookmarks, { observe: 'response' , withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public deleteBookmark(bookmarkId: string): Observable<void> {\n    return this.httpClient\n      .delete<void>(`${this.ANNOTATIONS_API}/bookmarks/${bookmarkId}`,\n        { observe: 'response' , withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public deleteMultipleBookmarks(payload: { deleted: string[], updated: Bookmark }): Observable<void> {\n    return this.httpClient\n      .request<void>('DELETE', `${this.ANNOTATIONS_API}/bookmarks_multiple`,\n        { body: payload, observe: 'response' , withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { RouterModule } from '@angular/router';\n\nimport { MutableDivModule } from 'mutable-div';\nimport { TagInputModule } from 'ngx-chips';\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\n\nimport { AnnotationApiService } from './services/annotation-api/annotation-api.service';\nimport { AnnotationViewComponent } from './annotation-set/annotation-view/annotation-view.component';\nimport { AnnotationSetComponent } from './annotation-set/annotation-set.component';\nimport { RectangleComponent } from './annotation-set/annotation-view/rectangle/rectangle.component';\nimport { CommentComponent } from './comment-set/comment/comment.component';\nimport { CtxToolbarComponent } from './annotation-set/ctx-toolbar/ctx-toolbar.component';\nimport { CommentSetComponent } from './comment-set/comment-set.component';\nimport { TextareaAutoExpandDirective } from './comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive';\nimport { CommentsSummaryComponent } from './comments-summary/comments-summary.component';\nimport { CommentSetRenderService } from './comment-set/comment-set-render.service';\nimport { BoxHighlightCreateComponent } from './annotation-set/annotation-create/box-highlight-create/box-highlight-create.component';\nimport { HighlightCreateService } from './annotation-set/annotation-create/highlight-create/highlight-create.service';\nimport { CommentSetHeaderComponent } from './comment-set/comment-set-header/comment-set-header.component';\nimport { CommentSearchComponent } from './comment-set/comment-set-header/comment-search/comment-search.component';\nimport { TextHighlightDirective } from './comment-set/comment/text-highlight/text-highlight.directive';\nimport { TagsComponent } from './tags/tags.component';\nimport { TagsServices } from './services/tags/tags.services';\nimport { CommentsNavigateComponent } from './comment-set/comment-navigate/comments-navigate.component';\nimport { CommentFilterComponent } from './comment-set/comment-set-header/comment-filter/comment-filter.component';\nimport { MomentDatePipe } from './pipes/date/date.pipe';\nimport { BookmarksApiService } from './services/bookmarks-api/bookmarks-api.service';\nimport { FilterPipe } from './pipes/filter/filter.pipe';\nimport { UnsnakePipe } from './pipes/unsnake/unsnake.pipe';\nimport { SharedModule } from '../shared/shared.module';\nimport { MetadataLayerComponent } from './annotation-set/metadata-layer/metadata-layer.component';\nimport { CommentService } from './comment-set/comment/comment.service';\nimport { RpxTranslationModule } from 'rpx-xui-translation';\nimport { KeyboardBoxDrawDirective } from './annotation-set/annotation-create/box-highlight-create/keyboard-box-draw.directive';\nimport { KeyboardBoxMoveDirective } from './annotation-set/annotation-view/rectangle/keyboard-box-move.directive';\n\n@NgModule({\n  imports: [\n    A11yModule,\n    CommonModule,\n    FormsModule,\n    HttpClientModule,\n    MutableDivModule,\n    TagInputModule,\n    RouterModule,\n    ReactiveFormsModule,\n    NgxDatatableModule,\n    SharedModule,\n    RpxTranslationModule.forChild()\n  ],\n  declarations: [\n    MetadataLayerComponent,\n    AnnotationViewComponent,\n    BoxHighlightCreateComponent,\n    AnnotationSetComponent,\n    RectangleComponent,\n    CommentComponent,\n    CommentSetHeaderComponent,\n    CommentSearchComponent,\n    TextHighlightDirective,\n    CtxToolbarComponent,\n    CommentSetComponent,\n    CommentsNavigateComponent,\n    TextareaAutoExpandDirective,\n    CommentsSummaryComponent,\n    TagsComponent,\n    MomentDatePipe,\n    CommentFilterComponent,\n    FilterPipe,\n    UnsnakePipe,\n    KeyboardBoxDrawDirective,\n    KeyboardBoxMoveDirective\n  ],\n  providers: [\n    AnnotationApiService,\n    BookmarksApiService,\n    CommentSetRenderService,\n    HighlightCreateService,\n    CommentService,\n    TagsServices\n  ],\n  exports: [\n    AnnotationViewComponent,\n    BoxHighlightCreateComponent,\n    AnnotationSetComponent,\n    CommentSetComponent,\n    CommentSetHeaderComponent,\n    CommentSearchComponent,\n    CommentsSummaryComponent,\n    TagsComponent,\n    CommentFilterComponent,\n    MomentDatePipe,\n    FilterPipe,\n    UnsnakePipe,\n    MetadataLayerComponent\n  ]\n})\nexport class AnnotationsModule { }\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, concatMap, exhaustMap, map, switchMap, filter, delay } from 'rxjs/operators';\nimport { of } from 'rxjs';\nimport { AnnotationApiService } from '../../annotations/services/annotation-api/annotation-api.service';\nimport * as annotationsActions from '../actions/annotation.actions';\n\n@Injectable()\nexport class AnnotationEffects {\n  constructor(\n    private actions$: Actions,\n    private annotationApiService: AnnotationApiService,\n  ) { }\n\n  loadAnnotation$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(annotationsActions.LOAD_ANNOTATION_SET),\n    map((action: annotationsActions.LoadAnnotationSet) => action.payload),\n    switchMap((documentId) => {\n      return this.annotationApiService.getAnnotationSet(documentId).pipe(\n        map(res => {\n          if (res.status === 204) {\n            return new annotationsActions.LoadAnnotationSetFail(res);\n          }\n          return new annotationsActions.LoadAnnotationSetSucess(res);\n        }),\n        catchError(error => {\n          return of(new annotationsActions.LoadAnnotationSetFail(error));\n        }));\n    }))\n  );\n\n  postAnnotation$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(annotationsActions.SAVE_ANNOTATION),\n    concatMap((action: annotationsActions.SaveAnnotation) => {\n      return this.annotationApiService.postAnnotation(action.payload).pipe(\n        map(annotations => {\n          const successAction = new annotationsActions.SaveAnnotationSuccess(annotations);\n          (successAction as any).autoSelect = action.autoSelect;\n          (successAction as any).annotationId = action.payload.id;\n          return successAction;\n        }),\n        catchError(error => {\n          return of(new annotationsActions.LoadAnnotationSetFail(error));\n        }));\n    }))\n  );\n\n  deleteAnnotation$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(annotationsActions.DELETE_ANNOTATION),\n    map((action: annotationsActions.DeleteAnnotation) => action.payload),\n    exhaustMap((annotation) => {\n      return this.annotationApiService.deleteAnnotation(annotation).pipe(\n        map(result => {\n          return new annotationsActions.DeleteAnnotationSuccess(annotation);\n        }),\n        catchError(error => {\n          return of(new annotationsActions.DeleteAnnotationFail(error));\n        }));\n    }))\n  );\n\n  saveAnnotationSet$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(annotationsActions.SAVE_ANNOTATION_SET),\n    map((action: annotationsActions.SaveAnnotationSet) => action.payload),\n    switchMap((annotationSet) => {\n      return this.annotationApiService.postAnnotationSet(annotationSet).pipe(\n        map(res => {\n          return new annotationsActions.SaveAnnotationSetSuccess(res);\n        }),\n        catchError(error => {\n          return of(new annotationsActions.SaveAnnotationSetFail(error));\n        }));\n    }))\n  );\n\n  autoSelectAnnotation$ = createEffect(() =>\n    this.actions$.pipe(\n      ofType(annotationsActions.SAVE_ANNOTATION_SUCCESS),\n      filter((action: any) => action.autoSelect === true && action.annotationId),\n      map((action: any) => {\n        return new annotationsActions.SelectedAnnotation({\n          annotationId: action.annotationId,\n          editable: false,\n          selected: true\n        });\n      })\n    )\n  );\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, exhaustMap, map, switchMap, withLatestFrom } from 'rxjs/operators';\nimport { of } from 'rxjs';\nimport { BookmarksApiService } from '../../annotations/services/bookmarks-api/bookmarks-api.service';\nimport * as bookmarksActions from '../actions/bookmark.actions';\nimport { select, Store } from '@ngrx/store';\nimport * as fromDocument from '../selectors/document.selectors';\nimport * as fromBookmarks from '../reducers/bookmarks.reducer';\nimport * as fromStore from '../reducers/reducers';\n\n@Injectable()\nexport class BookmarksEffects {\n\n  constructor(private actions$: Actions,\n              private store: Store<fromStore.AnnotationSetState|fromBookmarks.BookmarksState>,\n              private bookmarksApiService: BookmarksApiService) {}\n\n  loadBookmarks$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(bookmarksActions.LOAD_BOOKMARKS),\n    withLatestFrom(this.store.pipe(select(fromDocument.getDocumentId))),\n    map(([, documentId]) => documentId),\n    exhaustMap((documentId) =>\n      this.bookmarksApiService.getBookmarks(documentId)\n        .pipe(\n          map(res => new bookmarksActions.LoadBookmarksSuccess(res)),\n          catchError(err => of(new bookmarksActions.LoadBookmarksFailure(err)))\n        )\n    ))\n  );\n\n  createBookmark$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(bookmarksActions.CREATE_BOOKMARK),\n    map((action: bookmarksActions.CreateBookmark) => action.payload),\n    exhaustMap((bookmark) =>\n      this.bookmarksApiService.createBookmark(bookmark)\n        .pipe(\n          map(bmrk => new bookmarksActions.CreateBookmarkSuccess(bmrk)),\n          catchError(error => of(new bookmarksActions.CreateBookmarkFailure(error)))\n        )\n    ))\n  );\n\n  moveBookmark$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(bookmarksActions.MOVE_BOOKMARK),\n    map((action: bookmarksActions.MoveBookmark) => action.payload),\n    exhaustMap((bookmarks) =>\n      this.bookmarksApiService.updateMultipleBookmarks(bookmarks)\n        .pipe(\n          map(bmrks => new bookmarksActions.MoveBookmarkSuccess(bmrks)),\n          catchError(error => of(new bookmarksActions.MoveBookmarkFailure(error)))\n        )\n    ))\n  );\n\n  deleteBookmark$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(bookmarksActions.DELETE_BOOKMARK),\n    map((action: bookmarksActions.DeleteBookmark) => action.payload),\n    exhaustMap(({ deleted, updated }) =>\n      this.bookmarksApiService.deleteMultipleBookmarks({ deleted, updated })\n        .pipe(\n          switchMap(() => {\n            if (updated) {\n              return [\n                new bookmarksActions.DeleteBookmarkSuccess(deleted),\n                new bookmarksActions.UpdateBookmarkSuccess(updated)\n              ];\n            } else {\n              return [new bookmarksActions.DeleteBookmarkSuccess(deleted)];\n            }\n          }),\n          catchError(error => of(new bookmarksActions.DeleteBookmarkFailure(error)))\n        )\n    ))\n  );\n\n  updateBookmark$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(bookmarksActions.UPDATE_BOOKMARK),\n    map((action: bookmarksActions.UpdateBookmark) => action.payload),\n    switchMap((bookmark) =>\n      this.bookmarksApiService.updateBookmark(bookmark)\n        .pipe(\n          map(bmrk => new bookmarksActions.UpdateBookmarkSuccess(bmrk)),\n          catchError(error => of(new bookmarksActions.UpdateBookmarkFailure(error)))\n        )\n    ))\n  );\n}\n","import { Observable } from 'rxjs';\nimport { HttpClient, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, map } from 'rxjs/operators';\nimport { BulkRedaction, Redaction } from './redaction.model';\n\n@Injectable()\nexport class RedactionApiService {\n\n  private markupsApiUrl = '/api/markups';\n  private redactApiUrl = '/api/redaction';\n  private markupsSearchApiUrl = '/api/markups/search';\n  constructor(\n    private readonly httpClient: HttpClient\n  ) { }\n\n  public getRedactions(documentId: string): Observable<HttpResponse<Redaction[]>> {\n    const fixedUrl = `${this.markupsApiUrl}/${documentId}`;\n    return this.httpClient\n      .get<Redaction[]>(fixedUrl, { observe: 'response', withCredentials: true });\n  }\n\n  public saveRedaction(body): Observable<Redaction> {\n    return this.httpClient\n      .post<Redaction>(this.markupsApiUrl, body, { observe: 'response', withCredentials: true })\n      .pipe(\n        map(response => response.body),\n        catchError(() => [])\n      );\n  }\n\n  public saveBulkRedaction(body): Observable<BulkRedaction> {\n    return this.httpClient\n      .post<BulkRedaction>(this.markupsSearchApiUrl, body, { observe: 'response', withCredentials: true })\n      .pipe(\n        map(response => response.body),\n        catchError(() => [])\n      );\n  }\n\n  public deleteRedaction(payload): Observable<null> {\n    const url = `${this.markupsApiUrl}/${payload.documentId}/${payload.redactionId}`;\n    return this.httpClient\n      .delete<null>(url, { observe: 'response', withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public deleteAllMarkers(documentId): Observable<null> {\n    const url = `${this.markupsApiUrl}/${documentId}`;\n\n    return this.httpClient\n      .delete<null>(url, { observe: 'response', withCredentials: true })\n      .pipe(map(response => response.body));\n  }\n\n  public redact(payload): Observable<HttpResponse<Blob>> {\n    return this.httpClient\n      .post<Blob>(this.redactApiUrl, payload, { observe: 'response', withCredentials: true, responseType: 'blob' as 'json' })\n      .pipe(\n        map(response => response),\n        catchError(() => [])\n      );\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, exhaustMap, map, switchMap, tap } from 'rxjs/operators';\nimport { of } from 'rxjs';\nimport { RedactionApiService } from '../../redaction/services/redaction-api.service';\nimport * as redactionActions from '../actions/redaction.actions';\nimport { HttpResponse } from '@angular/common/http';\nimport { ToolbarEventService } from '../../toolbar/toolbar-event.service';\n\n@Injectable()\nexport class RedactionEffects {\n  constructor(\n    private actions$: Actions,\n    private redactionApiService: RedactionApiService,\n    private toolbarEvents: ToolbarEventService\n  ) { }\n\n  loadRedactions$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(redactionActions.LOAD_REDACTIONS),\n    map((action: redactionActions.LoadRedactions) => action.payload),\n    switchMap((documentId) => {\n      return this.redactionApiService.getRedactions(documentId).pipe(\n        map(resp => {\n          return new redactionActions.LoadRedactionSuccess(resp.body);\n        }),\n        catchError(error => {\n          return of(new redactionActions.LoadRedactionFailure(error));\n        }));\n    }))\n  );\n\n  saveRedaction$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(redactionActions.SAVE_REDACTION),\n    map((action: redactionActions.SaveRedaction) => action.payload),\n    exhaustMap((redaction) => {\n      return this.redactionApiService.saveRedaction(redaction).pipe(\n        map(resp => {\n          return new redactionActions.SaveRedactionSuccess(resp);\n        }),\n        catchError(error => {\n          return of(new redactionActions.SaveRedactionFailure(error));\n        }));\n    }))\n  );\n\n  saveBulkRedaction$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(redactionActions.SAVE_BULK_REDACTION),\n    map((action: redactionActions.SaveRedaction) => action.payload),\n    exhaustMap((redaction) => {\n      return this.redactionApiService.saveBulkRedaction(redaction).pipe(\n        tap(() => this.toolbarEvents.redactAllInProgressSubject.next(false))).pipe(map(resp => {\n          return new redactionActions.SaveBulkRedactionSuccess(resp);\n        }),\n          catchError(error => {\n            return of(new redactionActions.SaveBulkRedactionFailure(error));\n          }));\n    }))\n  );\n\n  deleteRedaction$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(redactionActions.DELETE_REDACTION),\n    map((action: redactionActions.DeleteRedaction) => action.payload),\n    exhaustMap((redactionPayload) => {\n      return this.redactionApiService.deleteRedaction(redactionPayload).pipe(\n        map(() => {\n          return new redactionActions.DeleteRedactionSuccess(redactionPayload);\n        }),\n        catchError(error => {\n          return of(new redactionActions.DeleteRedactionFailure(error));\n        }));\n    }))\n  );\n\n  redact$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(redactionActions.REDACT),\n    map((action: redactionActions.Redact) => action.payload),\n    exhaustMap((redactionPayload) => {\n      return this.redactionApiService.redact(redactionPayload).pipe(\n        map((result: HttpResponse<Blob>) => {\n          const header = result.headers.get('content-disposition').split('filename=');\n          const filename = header.length > 1 ? header[1].replace(/\"/g, '')\n            : `redacted-document-${redactionPayload.documentId}`;\n          return new redactionActions.RedactSuccess({ blob: result.body, filename });\n        }),\n        catchError(error => {\n          return of(new redactionActions.RedactFailure(error));\n        }));\n    }))\n  );\n\n  unmarkAll$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(redactionActions.UNMARK_ALL),\n    map((action: redactionActions.UnmarkAll) => action.payload),\n    exhaustMap((documentId) => {\n      return this.redactionApiService.deleteAllMarkers(documentId).pipe(\n        map(result => {\n          return new redactionActions.UnmarkAllSuccess();\n        }),\n        catchError(error => {\n          return of(new redactionActions.DeleteRedactionFailure(error));\n        }));\n    }))\n  );\n}\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpResponse } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\n@Injectable()\nexport class DocumentConversionApiService {\n\n  private documentConversionUrl = '/doc-assembly/convert';\n\n  constructor(private readonly httpClient: HttpClient) {}\n\n  public convert(documentId): Observable<HttpResponse<Blob>> {\n    return this.httpClient\n      .post<Blob>(`${this.documentConversionUrl}/${documentId}`, {},\n        { observe: 'response' , withCredentials: true, responseType: 'blob' as 'json' })\n      .pipe(\n        map(response => response),\n        catchError(error => of(error))\n      );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Rotation } from './rotation.model';\n\n@Injectable()\nexport class RotationApiService {\n\n  public rotationApiUrl = '/em-anno/metadata';\n\n  constructor(\n    private readonly httpClient: HttpClient\n  ) {}\n\n  public getRotation(documentId: string): Observable<HttpResponse<Rotation>> {\n    const fixedUrl = `${this.rotationApiUrl}/${documentId}`;\n    return this.httpClient\n      .get<Rotation>(fixedUrl, { observe: 'response' , withCredentials: true });\n  }\n\n  public saveRotation(payload: Rotation): Observable<HttpResponse<Rotation>> {\n    const fixedUrl = `${this.rotationApiUrl}/`;\n    return this.httpClient\n      .post<any>(fixedUrl, payload, { observe: 'response' , withCredentials: true })\n      .pipe(\n        map(response => response),\n        catchError(() => [])\n      );\n  }\n\n}\n","import { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Injectable } from '@angular/core';\nimport { HttpResponse } from '@angular/common/http';\nimport { catchError, exhaustMap, map, switchMap } from 'rxjs/operators';\nimport { DocumentConversionApiService } from '../../viewers/convertible-content-viewer/document-conversion-api.service';\nimport { RotationApiService } from '../../viewers/rotation-persist/rotation-api.service';\nimport { of } from 'rxjs';\nimport * as documentActions from '../actions/document.actions';\n\n@Injectable()\nexport class DocumentEffects {\n  constructor(\n    private actions$: Actions,\n    private documentConversionService: DocumentConversionApiService,\n    private rotationApiService: RotationApiService,\n  ) { }\n\n  convert$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(documentActions.CONVERT),\n    map((action: documentActions.Convert) => action.payload),\n    exhaustMap((documentId) => {\n      return this.documentConversionService.convert(documentId).pipe(\n        map((result: HttpResponse<Blob>) => {\n          const url = URL.createObjectURL(result.body);\n          return new documentActions.ConvertSuccess(url);\n        }),\n        catchError(error => {\n          return of(new documentActions.ConvertFailure(error));\n        }));\n    }))\n  );\n\n  loadRotation$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(documentActions.LOAD_ROTATION),\n    map((action: documentActions.LoadRotation) => action.payload),\n    switchMap((documentId) => {\n      return this.rotationApiService.getRotation(documentId).pipe(\n        map(resp => {\n          return new documentActions.LoadRotationSuccess(resp.body);\n        }),\n        catchError(error => {\n          return of(new documentActions.LoadRotationFailure(error));\n        }));\n    }))\n  );\n\n  saveRotation$ = createEffect(() =>\n    this.actions$.pipe(\n    ofType(documentActions.SAVE_ROTATION),\n    map((action: documentActions.SaveRotation) => action.payload),\n    switchMap((payload) => {\n      return this.rotationApiService.saveRotation(payload).pipe(\n        map(resp => {\n          return new documentActions.SaveRotationSuccess(resp.body);\n        }),\n        catchError(error => {\n          return of(new documentActions.SaveRotationFailure(error));\n        }));\n    }))\n  );\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { IcpSession } from './icp.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class IcpSessionApiService {\n\n  public ICP_SESSION_API = '/icp/sessions';\n\n  constructor(private readonly httpClient: HttpClient) { }\n\n  public loadSession(payload: { caseId: string, documentId: string }): Observable<any> {\n    return this.httpClient\n      .get<{ username: string, session: IcpSession }>(`${this.ICP_SESSION_API}/${payload.caseId}/${payload.documentId}`,\n        { observe: 'response', withCredentials: true })\n      .pipe(map(response => {\n        const token = response.headers.get('X-Access-Token');\n        return { \n          ...response.body, \n          token\n        };\n      }));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, exhaustMap, map, switchMap } from 'rxjs/operators';\nimport { of } from 'rxjs';\nimport { IcpSessionApiService } from '../../icp/icp-session-api.service';\nimport { IcpUpdateService } from '../../icp/icp-update.service';\nimport * as icpActions from '../actions/icp.actions';\nimport { IcpSession } from '../../icp/icp.interfaces';\n\n@Injectable()\nexport class IcpEffects {\n\n  constructor(private actions$: Actions,\n    private icpApiService: IcpSessionApiService,\n    private icpUpdateService: IcpUpdateService) { }\n\n  loadIcpSession$ = createEffect(() =>\n    this.actions$.pipe(\n      ofType(icpActions.LOAD_ICP_SESSION),\n      map((action: icpActions.LoadIcpSession) => action.payload),\n      exhaustMap((payload: { caseId: string, documentId: string }) =>\n        this.icpApiService.loadSession(payload)\n          .pipe(\n            map(res => new icpActions.JoinIcpSocketSession(res)),\n            catchError(error => of(new icpActions.LoadIcpSessionFailure(error)))\n          )\n      ))\n  );\n\n\n  joinIcpSocketSession$ = createEffect(() =>\n    this.actions$.pipe(\n      ofType(icpActions.JOIN_ICP_SOCKET_SESSION),\n      map((action: icpActions.JoinIcpSocketSession) => action.payload),\n      switchMap((res: { username: string, session: IcpSession, token: string }) =>\n        this.icpUpdateService.joinSession(res.username, res.session, res.token)\n          .pipe(map(participants => new icpActions.IcpSocketSessionJoined({ session: res.session, participantInfo: participants })))\n      ))\n  );\n}\n","import { AnnotationEffects } from './annotation.effects';\nimport { BookmarksEffects } from './bookmarks.effects';\nimport { RedactionEffects } from './redaction.effects';\nimport { DocumentEffects } from './document.effects';\nimport { IcpEffects } from './icp.effects';\n\nexport const effects: any[] =  [AnnotationEffects, BookmarksEffects, RedactionEffects, DocumentEffects, IcpEffects];\n","import { RpxTranslationModule } from 'rpx-xui-translation';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\nimport { PdfViewerComponent } from './viewers/pdf-viewer/pdf-viewer.component';\nimport { ImageViewerComponent } from './viewers/image-viewer/image-viewer.component';\nimport { UnsupportedViewerComponent } from './viewers/unsupported-viewer/unsupported-viewer.component';\nimport { MediaViewerComponent } from './media-viewer.component';\nimport { ToolbarModule } from './toolbar/toolbar.module';\nimport { PdfJsWrapperFactory } from './viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider';\nimport { AnnotationsModule } from './annotations/annotations.module';\nimport { CommentService } from './annotations/comment-set/comment/comment.service';\nimport { GrabNDragDirective } from './viewers/grab-n-drag.directive';\nimport { SideBarComponent } from './viewers/pdf-viewer/side-bar/side-bar.component';\nimport { OutlineItemComponent } from './viewers/pdf-viewer/side-bar/outline-item/outline-item.component';\nimport { TagInputModule } from 'ngx-chips';\nimport { RouterModule } from '@angular/router';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { RedactionComponent } from './redaction/components/redaction.component';\nimport { IcpSessionApiService } from './icp/icp-session-api.service';\nimport { IcpUpdateService } from './icp/icp-update.service';\nimport { IcpService } from './icp/icp.service';\nimport { SocketService } from './icp/socket.service';\nimport { reducers } from './store/reducers/reducers';\nimport { effects } from './store/effects/index';\nimport { BookmarksComponent } from './viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component';\nimport { RedactionApiService } from './redaction/services/redaction-api.service';\nimport { MutableDivModule } from 'mutable-div';\nimport { ConvertibleContentViewerComponent } from './viewers/convertible-content-viewer/convertible-content-viewer.component';\nimport { DocumentConversionApiService } from './viewers/convertible-content-viewer/document-conversion-api.service';\nimport { IcpPresenterService } from './icp/icp-presenter.service';\nimport { IcpFollowerService } from './icp/icp-follower.service';\nimport { ConfirmActionDialogComponent } from './icp/confirm-exit/confirm-action-dialog.component';\nimport { BookmarkIconsComponent } from './bookmark/components/bookmark-icons.component';\nimport { RotationApiService } from './viewers/rotation-persist/rotation-api.service';\nimport { RotationPersistDirective } from './viewers/rotation-persist/rotation-persist.directive';\nimport { ParticipantsListComponent } from './icp/participants-list/participants-list.component';\nimport { HighlightCreateDirective } from './annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive';\nimport { KeyboardTextHighlightDirective } from './annotations/annotation-set/annotation-create/highlight-create/keyboard-text-highlight.directive';\nimport { MultimediaPlayerComponent } from './viewers/multimedia-player/multimedia-player.component';\nimport { CdkTreeModule } from '@angular/cdk/tree';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    HttpClientModule,\n    ToolbarModule,\n    AnnotationsModule,\n    TagInputModule,\n    FormsModule,\n    ReactiveFormsModule,\n    RouterModule,\n    StoreModule.forFeature('media-viewer', reducers),\n    EffectsModule.forFeature(effects),\n    MutableDivModule,\n    CdkTreeModule,\n    DragDropModule,\n    RpxTranslationModule.forChild()\n  ],\n  declarations: [\n    PdfViewerComponent,\n    SideBarComponent,\n    BookmarksComponent,\n    OutlineItemComponent,\n    ImageViewerComponent,\n    UnsupportedViewerComponent,\n    MultimediaPlayerComponent,\n    MediaViewerComponent,\n    ConvertibleContentViewerComponent,\n    GrabNDragDirective,\n    RotationPersistDirective,\n    HighlightCreateDirective,\n    KeyboardTextHighlightDirective,\n    ConfirmActionDialogComponent,\n    RedactionComponent,\n    BookmarkIconsComponent,\n    ParticipantsListComponent\n  ],\n  providers: [\n    PdfJsWrapperFactory,\n    CommentService,\n    RedactionApiService,\n    DocumentConversionApiService,\n    RotationApiService,\n  ],\n  exports: [\n    MediaViewerComponent\n  ]\n})\nexport class MediaViewerModule { }\n","/*\n * Public API Surface of media-viewer\n */\n\nexport * from './lib/media-viewer.module';\nexport * from './lib/toolbar/toolbar.module';\nexport * from './lib/annotations/services/annotation-api/annotation-api.service';\nexport * from './lib/annotations/annotations.module';\nexport * from './lib/viewers/viewer-exception.model';\nexport * from './lib/store/reducers/annotations.reducer';\nexport * from './lib/store/selectors/annotation.selectors';\nexport * from './lib/store/actions/annotation.actions';\nexport * from './lib/store/effects/annotation.effects';\nexport * from './lib/media-viewer.component';\nexport * from './lib/toolbar/highlight-toolbar/highlight-toolbar.component';\nexport * from './lib/toolbar/main-toolbar/main-toolbar.component';\nexport * from './lib/toolbar/search-bar/search-bar.component';\nexport * from './lib/toolbar/redaction-toolbar/redaction-toolbar.component';\nexport * from './lib/toolbar/redaction-search-bar/redaction-search-bar.component';\nexport * from './lib/toolbar/icp-toolbar/icp-toolbar.component';\nexport * from './lib/annotations/annotation-set/annotation-view/annotation-view.component';\nexport * from './lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component';\nexport * from './lib/annotations/annotation-set/annotation-set.component';\nexport * from './lib/annotations/comment-set/comment-set.component';\nexport * from './lib/annotations/comment-set/comment-set-header/comment-set-header.component';\nexport * from './lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component';\nexport * from './lib/annotations/comments-summary/comments-summary.component';\nexport * from './lib/annotations/tags/tags.component';\nexport * from './lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component';\nexport * from './lib/annotations/annotation-set/metadata-layer/metadata-layer.component';\nexport * from './lib/annotations/pipes/filter/filter.pipe';\nexport * from './lib/annotations/pipes/unsnake/unsnake.pipe';\nexport * from './lib/annotations/pipes/date/date.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["fromActions.CONVERT_SUCCESS","fromActions.CONVERT_FAIL","fromActions.CLEAR_CONVERT_DOC_URL","fromActions.LOAD_ROTATION","fromActions.LOAD_ROTATION_SUCCESS","fromActions.LOAD_ROTATION_FAIL","fromActions.SAVE_ROTATION_SUCCESS","fromActions.SET_DOCUMENT_ID","fromActions.ADD_PAGES","fromActions.POSITION_UPDATED","getRotation","rotationLoaded","getConvertedDocument","fromAnnotations.LOAD_ANNOTATION_SET","fromAnnotations.LOAD_ANNOTATION_SET_SUCCESS","fromAnnotations.LOAD_ANNOTATION_SET_FAIL","uuid","fromAnnotations.SAVE_ANNOTATION_SET_SUCCESS","fromAnnotations.SAVE_ANNOTATION_SUCCESS","fromAnnotations.DELETE_ANNOTATION_SUCCESS","fromAnnotations.ADD_OR_EDIT_COMMENT","fromAnnotations.SELECT_ANNOTATION","fromAnnotations.SEARCH_COMMENT","fromAnnotations.APPLY_COMMENT_SUMMARY_FILTER","fromAnnotations.CLEAR_COMMENT_SUMMARY_FILTER","fromTags.ADD_FILTER_TAGS","fromTags.CLEAR_FILTER_TAGS","fromBookmarks.LOAD_BOOKMARKS","fromBookmarks.LOAD_BOOKMARKS_SUCCESS","fromBookmarks.LOAD_BOOKMARKS_FAIL","fromBookmarks.CREATE_BOOKMARK_SUCCESS","fromBookmarks.MOVE_BOOKMARK_SUCCESS","fromBookmarks.DELETE_BOOKMARK_SUCCESS","fromBookmarks.UPDATE_BOOKMARK_SUCCESS","fromBookmarks.UPDATE_BOOKMARK_SCROLL_TOP","getScrollTop","fromRedaction.LOAD_REDACTIONS","fromRedaction.LOAD_REDACTION_SUCCESS","fromRedaction.SAVE_REDACTION_SUCCESS","fromRedaction.SAVE_BULK_REDACTION_SUCCESS","fromRedaction.SELECT_REDACTION","fromRedaction.DELETE_REDACTION_SUCCESS","fromRedaction.REDACT_SUCCESS","fromRedaction.RESET_REDACTED_DOCUMENT","fromRedaction.UNMARK_ALL_SUCCESS","getRedactionEnt","fromIcpActions.SET_CASE_ID","fromIcpActions.ICP_SOCKET_SESSION_JOINED","fromIcpActions.ICP_PARTICIPANT_LIST_UPDATED","fromIcpActions.ICP_PRESENTER_UPDATED","fromIcpActions.LEAVE_ICP_SOCKET_SESSION","getIcpSession","getPresenter","getClient","getParticipants","fromDocument.docReducer","fromAnnotation.reducer","fromTags.tagsReducer","fromBookmarks.bookmarksReducer","fromRedaction.redactionReducer","fromIcp.icpReducer","fromFeature.getMVState","fromDocument.getDocPages","fromDocument.getDocId","fromDocument.getPdfPos","fromDocument.getHasDifferentPageSizes","fromDocument.getConvertedDocument","fromDocument.getRotation","fromDocument.rotationLoaded","i1.IcpEventService","fromTags.getTagNameEnt","fromTags.getFilters","fromTags.getFilteredComments","fromTags.getFilteredPageEnt","fromAnnotations.getAnnoEnt","fromAnnotations.getAnnoSet","fromAnnotations.getSelectedAnno","fromAnnotations.getCommentEnts","fromAnnotations.getAnnoPageEnt","fromAnnotations.commentSearchQ","fromAnnotations.getSummaryFilters","fromDocument.getPages","fromTags.getFilteredPageEntities","fromTags.getTagFiltered","fromSelectors.getDocumentIdSetId","fromActions.SaveAnnotation","fromActions.SaveAnnotationSet","i1.ToolbarEventService","i2","fromAnnotationActions.SelectedAnnotation","i2.ViewerEventService","i3.HighlightCreateService","i4","fromIcp.getIcpSession","fromIcp.getPresenter","fromIcp.getClient","fromIcp.getParticipants","i1.SocketService","fromDocSelectors.getPdfPosition","fromIcpSelectors.getPresenter","i2.IcpUpdateService","i3","i3.IcpUpdateService","fromIcpSelectors.getCaseId","filter","fromDocument.getDocumentId","fromIcpActions.LoadIcpSession","fromIcpSelectors.getIcpSession","fromIcpSelectors.getClient","fromIcpSelectors.isPresenter","fromIcpActions.IcpPresenterUpdated","fromIcpActions.IcpParticipantListUpdated","fromIcpActions.LeaveIcpSocketSession","i4.IcpPresenterService","i5.IcpFollowerService","i6","i7.IcpEventService","fromRedactionActions.SaveBulkRedaction","i2.ToolbarButtonVisibilityService","i3.ToolbarEventService","i4.HighlightCreateService","i5","i7","i1","i1.TagsServices","fromSelector.getComponentSearchText","i2.CommentService","i3.TagsServices","i6.TextHighlightDirective","i7.TextareaAutoExpandDirective","i8.TagsComponent","i9","i10.MomentDatePipe","fromSelectors.getCommentsArray","fromSelectors.getAnnotationEntities","fromActions.SelectedAnnotation","i3.CommentSetRenderService","i4.ToolbarEventService","i6.CommentComponent","i2.ToolbarEventService","fromActions.SearchComment","i4.CommentsNavigateComponent","fromSelectors.getTagFilters","fromActions.AddFilterTags","fromSelectors.getAllTagsArr","fromActions.ClearFilterTags","i6.FilterPipe","i7.UnsnakePipe","fromTagSelectors.getTagFilters","fromAnnoSelector.getFilteredAnnotations","i4.IcpEventService","i7.CommentSearchComponent","i8.CommentsNavigateComponent","i9.CommentFilterComponent","i10","fromBookmarks.getBookmarkPageEnt","fromBookmarks.getBookmarkEnts","fromBookmarks.getEditBookmark","fromBookmarks.getScrollTop","fromDocument.getPdfPosition","i2.HighlightCreateService","i4.KeyboardBoxDrawDirective","debounceTime","i5.KeyboardBoxMoveDirective","fromActions.AddOrEditComment","i4.RectangleComponent","i5.CtxToolbarComponent","fromSelectors.getSelectedAnnotation","fromActions.DeleteAnnotation","i4.AnnotationViewComponent","fromSelectors.getPageEntities","fromBookmarks.getBookmarkInfo","i4.ViewerEventService","i6.BoxHighlightCreateComponent","i7.AnnotationSetComponent","i8.CtxToolbarComponent","bookmarksSelectors.getEditableBookmark","bookmarksSelectors.getBookmarkInfo","bookmarksSelectors.getBookmarkNodes","bookmarksSelectors.getScrollTop","i1.ViewerEventService","i6.BookmarksComponent","i7.OutlineItemComponent","i8","fromRedactions.getPageEnt","fromRedactions.getSelectedRedaction","fromRedactions.getRedactedDocInfo","fromRedactions.getRedactionEnt","fromSelectors.getRedactionsPerPage","fromSelectors.getSelected","fromSelectors.getRedactedDocumentInfo","fromRedaSelectors.getRedactionArray","fromRedaActions.Redact","fromRedaActions.UnmarkAll","fromRedactionActions.SaveRedaction","fromActions.DeleteRedaction","fromActions.SelectRedaction","fromActions.SaveRedaction","fromRedactionActions.ResetRedactedDocument","i5.AnnotationViewComponent","fromSelectors.getBookmarksPerPage","fromSelectors.getParticipants","fromSelectors.getPresenter","fromSelectors.isPresenter","i3.IcpEventService","fromTagActions.ClearFilterTags","fromDocumentsSelector.getPageDifference","fromDocumentActions.AddPages","i2.PdfJsWrapperFactory","i3.PrintService","i5.ViewerEventService","i6.IcpService","i7.ToolbarButtonVisibilityService","i8.IcpEventService","i10.RedactionSearchBarComponent","i11.CommentSetComponent","i12.CommentSetHeaderComponent","i13.MetadataLayerComponent","i14.SideBarComponent","i15.GrabNDragDirective","i16.HighlightCreateDirective","i17.KeyboardTextHighlightDirective","i18.RedactionComponent","i19.BookmarkIconsComponent","i20.ParticipantsListComponent","i21","fromDocument.AddPages","i2.PrintService","i3.ViewerUtilService","i5.ToolbarButtonVisibilityService","i6.ViewerEventService","i8.CommentSetComponent","i9.CommentSetHeaderComponent","i10.MetadataLayerComponent","i11.GrabNDragDirective","i12.RedactionComponent","i2.ViewerUtilService","i1.ToolbarButtonVisibilityService","i3.NumberHelperService","i5.ToolbarFocusService","i9.KeyboardNavDirective","i10.SearchBarComponent","i11.TooltipDismissDirective","i12","fromRedactSelectors.getRedactionArray","i4.ToolbarFocusService","i6.KeyboardNavDirective","i7.TooltipDismissDirective","fromIcpSelectors.getPresenterName","i3.ToolbarFocusService","i4.KeyboardNavDirective","i5.TooltipDismissDirective","i3.GovUkErrorMessageComponent","i4.GovUkFieldsetComponent","i5.GovUkLabelComponent","fromSelectors.getCommentSummary","fromSelectors.getCommentSummaryFilters","fromTagSelectors.getAllTagsArr","fromAnnoActions.ClearCommentSummaryFilters","fromAnnoActions.ApplyCommentSymmaryFilter","i9.GovUkDateComponent","i10.GovUkFieldsetComponent","i11","i12.UnsnakePipe","fromSelectors.getConvertedDocument","fromDocumentActions.ClearConvertDocUrl","fromDocumentActions.Convert","i3.PdfViewerComponent","fromDocuments.getRotation","fromDocuments.getDocumentId","fromDocumentActions.LoadRotation","fromDocuments.rotationLoaded","fromDocumentActions.SaveRotation","fromAnnoSelectors.getAnnotationSet","fromDocumentActions.SetDocumentId","fromAnnoActions.LoadAnnotationSet","fromRedactActions.LoadRedactions","take","i4.AnnotationApiService","i5.CommentService","i6.IcpEventService","i8.MainToolbarComponent","i9.RedactionToolbarComponent","i10.IcpToolbarComponent","i11.HighlightToolbarComponent","i12.CommentsSummaryComponent","i13.PdfViewerComponent","i14.ImageViewerComponent","i15.UnsupportedViewerComponent","i16.MultimediaPlayerComponent","i17.ConvertibleContentViewerComponent","i18.RotationPersistDirective","i19.ConfirmActionDialogComponent","annotationsActions.LOAD_ANNOTATION_SET","annotationsActions.LoadAnnotationSetFail","annotationsActions.LoadAnnotationSetSucess","annotationsActions.SAVE_ANNOTATION","annotationsActions.SaveAnnotationSuccess","annotationsActions.DELETE_ANNOTATION","annotationsActions.DeleteAnnotationSuccess","annotationsActions.DeleteAnnotationFail","annotationsActions.SAVE_ANNOTATION_SET","annotationsActions.SaveAnnotationSetSuccess","annotationsActions.SaveAnnotationSetFail","annotationsActions.SAVE_ANNOTATION_SUCCESS","annotationsActions.SelectedAnnotation","i2.AnnotationApiService","bookmarksActions.LOAD_BOOKMARKS","bookmarksActions.LoadBookmarksSuccess","bookmarksActions.LoadBookmarksFailure","bookmarksActions.CREATE_BOOKMARK","bookmarksActions.CreateBookmarkSuccess","bookmarksActions.CreateBookmarkFailure","bookmarksActions.MOVE_BOOKMARK","bookmarksActions.MoveBookmarkSuccess","bookmarksActions.MoveBookmarkFailure","bookmarksActions.DELETE_BOOKMARK","bookmarksActions.DeleteBookmarkSuccess","bookmarksActions.UpdateBookmarkSuccess","bookmarksActions.DeleteBookmarkFailure","bookmarksActions.UPDATE_BOOKMARK","bookmarksActions.UpdateBookmarkFailure","i3.BookmarksApiService","redactionActions.LOAD_REDACTIONS","redactionActions.LoadRedactionSuccess","redactionActions.LoadRedactionFailure","redactionActions.SAVE_REDACTION","redactionActions.SaveRedactionSuccess","redactionActions.SaveRedactionFailure","redactionActions.SAVE_BULK_REDACTION","redactionActions.SaveBulkRedactionSuccess","redactionActions.SaveBulkRedactionFailure","redactionActions.DELETE_REDACTION","redactionActions.DeleteRedactionSuccess","redactionActions.DeleteRedactionFailure","redactionActions.REDACT","redactionActions.RedactSuccess","redactionActions.RedactFailure","redactionActions.UNMARK_ALL","redactionActions.UnmarkAllSuccess","i2.RedactionApiService","documentActions.CONVERT","documentActions.ConvertSuccess","documentActions.ConvertFailure","documentActions.LOAD_ROTATION","documentActions.LoadRotationSuccess","documentActions.LoadRotationFailure","documentActions.SAVE_ROTATION","documentActions.SaveRotationSuccess","documentActions.SaveRotationFailure","i2.DocumentConversionApiService","i3.RotationApiService","icpActions.LOAD_ICP_SESSION","icpActions.JoinIcpSocketSession","icpActions.LoadIcpSessionFailure","icpActions.JOIN_ICP_SOCKET_SESSION","icpActions.IcpSocketSessionJoined","i2.IcpSessionApiService"],"mappings":"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"}