{"version":3,"file":"empaia-slide-viewer.mjs","sources":["../../../../libs/slide-viewer/src/lib/material/material.module.ts","../../../../libs/slide-viewer/src/lib/tools/tile-resolver.ts","../../../../libs/slide-viewer/src/lib/models/annotation-type.ts","../../../../libs/slide-viewer/src/lib/models/annotation.ts","../../../../libs/slide-viewer/src/lib/models/file-format.ts","../../../../libs/slide-viewer/src/lib/config/module-config.ts","../../../../libs/slide-viewer/src/lib/tools/logger.ts","../../../../libs/slide-viewer/src/lib/store/slide/slide.actions.ts","../../../../libs/slide-viewer/src/lib/store/meta.reducer.ts","../../../../libs/slide-viewer/src/lib/store/annotations/annotation.actions.ts","../../../../libs/slide-viewer/src/lib/entity/models/caching.constants.ts","../../../../libs/slide-viewer/src/lib/entity/state/caching-state.ts","../../../../libs/slide-viewer/src/lib/entity/selectors/caching-selectors.ts","../../../../libs/slide-viewer/src/lib/entity/adapter/caching-adapter.ts","../../../../libs/slide-viewer/src/lib/store/annotations/annotation.reducer.ts","../../../../libs/slide-viewer/src/lib/store/slide/slide.reducer.ts","../../../../libs/slide-viewer/src/lib/models/interaction.ts","../../../../libs/slide-viewer/src/lib/models/ui.ts","../../../../libs/slide-viewer/src/lib/store/ui/ui.actions.ts","../../../../libs/slide-viewer/src/lib/config/annotation-highlight.config.ts","../../../../libs/slide-viewer/src/lib/store/ui/ui.reducer.ts","../../../../libs/slide-viewer/src/lib/store/cluster/cluster.actions.ts","../../../../libs/slide-viewer/src/lib/store/cluster/cluster.reducer.ts","../../../../libs/slide-viewer/src/lib/store/character-config/character-config.actions.ts","../../../../libs/slide-viewer/src/lib/store/character-config/character-config.reducer.ts","../../../../libs/slide-viewer/src/lib/store/pixel-maps/pixel-maps.actions.ts","../../../../libs/slide-viewer/src/lib/store/pixel-maps/pixel-maps.reducer.ts","../../../../libs/slide-viewer/src/lib/store/features/features.actions.ts","../../../../libs/slide-viewer/src/lib/store/features/features.reducer.ts","../../../../libs/slide-viewer/src/lib/store/store.keys.ts","../../../../libs/slide-viewer/src/lib/store/module.state.ts","../../../../libs/slide-viewer/src/lib/store/slide/slide.selectors.ts","../../../../libs/slide-viewer/src/lib/store/slide/slide.effects.ts","../../../../libs/slide-viewer/src/lib/store/annotations/annotation.selectors.ts","../../../../libs/slide-viewer/src/lib/services/annotation-mapping.service.ts","../../../../libs/slide-viewer/src/lib/store/annotations/annotation.effects.ts","../../../../libs/slide-viewer/src/lib/store/ui/ui.selectors.ts","../../../../libs/slide-viewer/src/lib/store/ui/ui.effects.ts","../../../../libs/slide-viewer/src/lib/store/cluster/cluster.selectors.ts","../../../../libs/slide-viewer/src/lib/store/character-config/character-config.selectors.ts","../../../../libs/slide-viewer/src/lib/store/pixel-maps/pixel-maps.selectors.ts","../../../../libs/slide-viewer/src/lib/store/pixel-maps/pixel-maps.effects.ts","../../../../libs/slide-viewer/src/lib/store/features/features.selectors.ts","../../../../libs/slide-viewer/src/lib/services/feature-style-service.ts","../../../../libs/slide-viewer/src/lib/models/feature-style.ts","../../../../libs/slide-viewer/src/lib/store/features/features.effects.ts","../../../../libs/slide-viewer/src/lib/models/rxjs-operations.ts","../../../../libs/slide-viewer/src/lib/models/pixelmap.ts","../../../../libs/slide-viewer/src/lib/components/pixel-map-opacity-menu/pixel-map-opacity-menu.component.ts","../../../../libs/slide-viewer/src/lib/components/pixel-map-opacity-menu/pixel-map-opacity-menu.component.html","../../../../libs/slide-viewer/src/lib/directives/close-element.directive.ts","../../../../libs/slide-viewer/src/lib/components/toolbar/toolbar.component.ts","../../../../libs/slide-viewer/src/lib/components/toolbar/toolbar.component.html","../../../../libs/slide-viewer/src/lib/services/map-id.service.ts","../../../../libs/slide-viewer/src/lib/services/map.service.ts","../../../../libs/slide-viewer/src/lib/models/types.ts","../../../../libs/slide-viewer/src/lib/services/slide-source.ts","../../../../libs/slide-viewer/src/lib/tools/axis-converter.ts","../../../../libs/slide-viewer/src/lib/services/viewer-calculations.service.ts","../../../../libs/slide-viewer/src/lib/components/viewer/viewer.component.ts","../../../../libs/slide-viewer/src/lib/components/viewer/viewer.component.html","../../../../libs/slide-viewer/src/lib/services/resizable-element.service.ts","../../../../libs/slide-viewer/src/lib/components/ext-overview/ext-overview.component.ts","../../../../libs/slide-viewer/src/lib/components/ext-overview/ext-overview.component.html","../../../../libs/slide-viewer/src/lib/components/scale-line/scale-line.component.ts","../../../../libs/slide-viewer/src/lib/components/scale-line/scale-line.component.html","../../../../libs/slide-viewer/src/lib/components/ext-zoom-slider/ext-zoom-slider.component.ts","../../../../libs/slide-viewer/src/lib/components/ext-zoom-slider/ext-zoom-slider.component.html","../../../../libs/slide-viewer/src/lib/components/dnd-container/dnd-container.component.ts","../../../../libs/slide-viewer/src/lib/components/dnd-container/dnd-container.component.html","../../../../libs/slide-viewer/src/lib/tools/annotation-to-olfeature.ts","../../../../libs/slide-viewer/src/lib/models/errors.ts","../../../../libs/slide-viewer/src/lib/components/annotation-layer/annotation-layer.component.ts","../../../../libs/slide-viewer/src/lib/components/annotation-layer/annotation-layer.component.html","../../../../libs/slide-viewer/src/lib/models/geometry.ts","../../../../libs/slide-viewer/src/lib/tools/ol-draw-factory.ts","../../../../libs/slide-viewer/src/lib/models/form-errors.ts","../../../../libs/slide-viewer/src/lib/models/error-matcher.ts","../../../../libs/slide-viewer/src/lib/components/create-annotation-card/create-annotation-card.component.ts","../../../../libs/slide-viewer/src/lib/components/create-annotation-card/create-annotation-card.component.html","../../../../libs/slide-viewer/src/lib/tools/geometry-to-annotation.ts","../../../../libs/slide-viewer/src/lib/components/annotation-create/annotation-create.component.ts","../../../../libs/slide-viewer/src/lib/components/annotation-create/annotation-create.component.html","../../../../libs/slide-viewer/src/lib/services/cluster-style.service.ts","../../../../libs/slide-viewer/src/lib/components/annotation-cluster-layer/annotation-cluster-layer.component.ts","../../../../libs/slide-viewer/src/lib/components/annotation-cluster-layer/annotation-cluster-layer.component.html","../../../../libs/slide-viewer/src/lib/components/pixel-map-layer/pixel-map-layer.component.ts","../../../../libs/slide-viewer/src/lib/components/pixel-map-layer/pixel-map-layer.component.html","../../../../libs/slide-viewer/src/lib/containers/slide-view-container/slide-view-container.component.ts","../../../../libs/slide-viewer/src/lib/containers/slide-view-container/slide-view-container.component.html","../../../../libs/slide-viewer/src/lib/containers/slide-viewer/slide-viewer.component.ts","../../../../libs/slide-viewer/src/lib/containers/slide-viewer/slide-viewer.component.html","../../../../libs/slide-viewer/src/lib/store/svm-store.module.ts","../../../../libs/slide-viewer/src/lib/components/measurement-tool/measurement-tool.component.ts","../../../../libs/slide-viewer/src/lib/components/measurement-tool/measurement-tool.component.html","../../../../libs/slide-viewer/src/lib/models/creator.ts","../../../../libs/slide-viewer/src/lib/slide-viewer.module.ts","../../../../libs/slide-viewer/src/empaia-slide-viewer.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSelectModule } from '@angular/material/select';\n\nconst MATERIAL_MODULES = [\n  MatSidenavModule,\n  MatListModule,\n  MatIconModule,\n  MatInputModule,\n  MatFormFieldModule,\n  MatSliderModule,\n  MatTooltipModule,\n  MatRadioModule,\n  MatExpansionModule,\n  MatDividerModule,\n  MatCardModule,\n  MatButtonModule,\n  MatButtonToggleModule,\n  MatTreeModule,\n  MatCheckboxModule,\n  MatSnackBarModule,\n  MatSelectModule,\n];\n\n@NgModule({\n  imports: [MATERIAL_MODULES],\n  exports: [MATERIAL_MODULES],\n})\nexport class MaterialModule {}\n","import { ImageTile, Tile } from 'ol';\nimport { ImageInfo, TileResolverInterface } from '../models/slide';\nimport { TileConnector } from '../models/tile-connector';\nimport { firstValueFrom } from 'rxjs';\n\nexport class TileResolver implements TileResolverInterface {\n\n  constructor(\n    private loader: TileConnector,\n    public imageId: string,\n    public imageInfo: ImageInfo,\n    public hasArtificialLevel = false,\n    // public multichannel: boolean = false,\n  ) {  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public tileResolverFn: any = null;\n\n  public tileLoaderFn = async (tile: Tile) => {\n    const tileCoords = tile.getTileCoord();\n    let level = this.imageInfo.numberOfLevels - tileCoords[0] - (this.hasArtificialLevel ? 0 : 1);\n\n    if (isNaN(level)) {\n      throw new Error('Error in Tile Resolver - Tile level invalid!');\n    }\n\n    if (level < 0) {\n      level = 0;\n    }\n    const x = tileCoords[1];\n    const y = tileCoords[2];\n\n    // if (this.multichannel) {\n    //   const tileData: RawMultichannelData = await this.loader.getSlideTileMultichannel(level, x, y);\n    //   const resultImageData = processData(tileData.data, this.imageInfo.channels);\n    //   return ((tile as ImageTile).getImage() as HTMLImageElement).src = getUriFromImageData(resultImageData);\n    // } else {\n    //   const blob: Blob = await this.loader.getSlideTileBlob(level, x, y);\n    //   return ((tile as ImageTile).getImage() as HTMLImageElement).src = URL.createObjectURL(blob);\n    // }\n\n    const blob = await firstValueFrom(this.loader.getSlideTileBlob(level, x, y), { defaultValue: new Blob() });\n    return ((tile as ImageTile).getImage() as HTMLImageElement).src = URL.createObjectURL(blob);\n  };\n}\n","// put enum in own file to mitigate https://github.com/kulshekhar/ts-jest/issues/944\n\nenum AnnotationType {\n  CIRCLE = 'circle',\n  RECTANGLE = 'rectangle',\n  POLYGON = 'polygon',\n  POINT = 'point',\n  // the following types are not yet implemented!\n  ARROW = 'arrow',\n  LINE = 'line',\n}\nexport { AnnotationType };\n","import { AnnotationType } from './annotation-type';\nimport { Class } from './class';\nimport { DataCreatorType } from './creator';\n\n// export enum AnnotationType {\n//   CIRCLE = 'circle',\n//   RECTANGLE = 'rectangle',\n//   POLYGON = 'polygon',\n//   POINT = 'point',\n//   // the following types are not yet implemented!\n//   ARROW = 'arrow',\n//   LINE = 'line',\n// }\n\nexport enum AnnotationReferenceType {\n  Wsi = 'wsi',\n}\n\n/**\n * public interface - defines a base Annotation\n * concrete Annotation classes should implement an\n * extended interface of this base interface\n *\n * App needs to define a conversion between Annotation API types and\n * SlideViewer Annotation types\n * see file: annotation-conversion.ts in demo app for example\n */\nexport interface IAnnotation {\n  id?: string | null; // set by api\n  createdAt?: Date; // set by api\n  updatedAt?: Date; // set by api\n\n  name?: string; // titel - set in pop up after drawing an annotation\n  description?: string | null; // set in pop up after drawing an annotation\n  creatorId?: string; // creatorID must be present in creators input property\n  creatorType?: DataCreatorType;\n  referenceId?: string; // currently referenceId is assumed to be a slideId\n  nppCreated?: number;\n  nppViewing?: number[] | null;\n  centroid?: number[] | null;\n\n  annotationType: AnnotationType;\n  center?: number[]; // expects an array with 2 elements\n\n  classes?: Array<Class>;\n  referenceType?: string;\n\n  isLocked?: boolean | null;\n}\n\n/**\n * public interface - defines a circular Annotation\n */\nexport interface IAnnotationCircle extends IAnnotation {\n  radius: number;\n}\n\n/**\n * public interface - defines a rectangular Annotation\n */\nexport interface IAnnotationRectangle extends IAnnotation {\n  coordinates: number[][]; // 2d array - number[][]\n}\n\n/**\n * public interface - defines a polygonal Annotation\n */\nexport interface IAnnotationPolygon extends IAnnotation {\n  coordinates: number[][]; // 2d array - number[][]\n}\n\n/**\n * public interface - defines a point Annotation\n */\nexport interface IAnnotationPoint extends IAnnotation {\n  coordinates: number[]; // 1d array - number[]\n}\n\n/**\n * implementation of Annotation interface\n * sets all base properties via constructor parameter\n */\nexport class Annotation implements IAnnotation {\n  constructor(opt: Annotation) {\n    this.name = opt.name;\n    this.description = opt.description;\n    this.creatorId = opt.creatorId;\n    this.creatorType = opt.creatorType;\n    this.referenceId = opt.referenceId;\n    this.annotationType = opt.annotationType;\n    this.center = opt.center;\n\n    this.referenceType = opt.referenceType;\n    this.nppCreated = opt.nppCreated;\n    // this.classIds = opt.classIds;\n    this.classes = opt.classes;\n    this.isLocked = opt.isLocked;\n  }\n  id?: string;\n  createdAt?: Date;\n  updatedAt?: Date;\n  name?: string;\n  description?: string;\n  creatorId?: string;\n  creatorType?: DataCreatorType;\n  referenceId?: string;\n  nppCreated?: number;\n  nppViewing?: number[];\n  centroid?: number[];\n  annotationType: AnnotationType;\n  center?: number[];\n  classes?: Class[];\n  referenceType?: string;\n  isLocked?: boolean;\n}\n\n/**\n * Circle annotation implementation\n */\nexport class AnnotationCircle extends Annotation {\n  constructor(opt: AnnotationCircle) {\n    super(opt);\n    this.annotationType = AnnotationType.CIRCLE;\n    this.radius = opt.radius;\n  }\n  radius: number;\n}\n\n/**\n * Rectangle annotation implementation\n */\nexport class AnnotationRectangle extends Annotation {\n  constructor(opt: AnnotationRectangle) {\n    super(opt);\n    this.annotationType = AnnotationType.RECTANGLE;\n    this.coordinates = opt.coordinates;\n  }\n  coordinates: number[][];\n}\n\n/**\n * Polygon annotation implementation\n */\nexport class AnnotationPolygon extends Annotation {\n  constructor(opt: AnnotationPolygon) {\n    super(opt);\n    this.annotationType = AnnotationType.POLYGON;\n    this.coordinates = opt.coordinates;\n  }\n  coordinates: number[][];\n}\n\n/**\n * Point annotation implementation\n */\nexport class AnnotationPoint extends Annotation {\n  constructor(opt: AnnotationPoint) {\n    super(opt);\n    this.annotationType = AnnotationType.POINT;\n    this.coordinates = opt.coordinates;\n  }\n  coordinates: number[];\n}\n\n/**\n * That's for annotation from the api\n * in certain occasions we need the id\n * set\n */\nexport interface AnnotationEntity extends Annotation {\n  id: string;\n}\n\nexport interface AnnotationsWithUpdates {\n  annotations: Annotation[];\n  updatedAnnotationIds: string[];\n}\n","export enum WSIFileFormat {\n  TIF = 'tif',\n  TIFF = 'tiff',\n  JPG = 'jpg',\n}\n","import { Injectable } from '@angular/core';\n\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SlideViewerModuleConfiguration {\n  logging = false;\n}\n\nexport interface SlideViewerModuleConfigurationParams {\n  logging?: boolean;\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\nexport enum LOG_LEVEL {\n  NONE = 0,\n  ASSERT = 1,\n  ERROR = 2,\n  WARN = 3,\n  INFO = 4,\n  DEBUG = 5,\n  VERBOSE = 6,\n}\n\nabstract class Logger {\n  log: any;\n  info: any;\n  warn: any;\n  error: any;\n  table: any;\n}\n\nconst consoleMethods = [\n  'debug',\n  'error',\n  'info',\n  'log',\n  'warn',\n] as const;\ntype ConsoleMethods = typeof consoleMethods[number];\n\nclass LoggerService implements Logger {\n  log: any;\n  info: any;\n  warn: any;\n  error: any;\n  table: any;\n  invokeConsoleMethod(type: string, args?: any): void { }\n}\n\nconst noop = (): any => undefined;\n\nclass ConsoleLoggerService implements Logger {\n  private loggingLevel = 0;\n\n  constructor(logLevel: LOG_LEVEL) {\n    this.setLevel(logLevel);\n  }\n  invokeConsoleMethod(type: ConsoleMethods, args?: any): void {\n    const logFn = console[type] || console.log || noop;\n    const enhancedArgs = args.map((arg: any) => JSON.stringify(arg, null, 2));\n    logFn.apply(console, [enhancedArgs]);\n  }\n\n  public setLevel(level: number) {\n    this.loggingLevel = level;\n  }\n\n  get log(): any {\n    return this.loggingLevel >= LOG_LEVEL.VERBOSE\n      ? console.log.bind(console)\n      : noop;\n  }\n\n  get info(): any {\n    return this.loggingLevel >= LOG_LEVEL.INFO\n      ? console.info.bind(console)\n      : noop;\n  }\n\n  get warn(): any {\n    return this.loggingLevel >= LOG_LEVEL.WARN\n      ? console.warn.bind(console)\n      : noop;\n  }\n\n  get error(): any {\n    return this.loggingLevel >= LOG_LEVEL.ERROR\n      ? console.error.bind(console)\n      : noop;\n  }\n\n  get table(): any {\n    return this.loggingLevel >= LOG_LEVEL.VERBOSE\n      ? console.table.bind(console)\n      : noop;\n  }\n\n  get assert(): any {\n    return this.loggingLevel >= LOG_LEVEL.ASSERT\n      ? console.assert.bind(console)\n      : noop;\n  }\n}\n\nexport const logger = new ConsoleLoggerService(LOG_LEVEL.NONE);\n","import { createAction, props } from '@ngrx/store';\nimport { Slide } from '../../models/slide';\n\nexport const addSlide = createAction(\n  '[SVM Slide] Add Slide',\n  props<{ slide: Slide }>()\n);\n\nexport const addSlideReady = createAction(\n  '[SVM Slide] Add Slide Ready',\n  props<{ slide: Slide }>()\n);\n\nexport const selectSlideId = createAction(\n  '[SVM Slide] Select Slide Id',\n  props<{ slideId: string }>()\n);\n\nexport const selectedSlideChanged = createAction(\n  '[SVM Slide] Selected Slide Changed',\n  props<{ slide: Slide }>()\n);\n","import { Action, ActionReducer, createAction } from '@ngrx/store';\nimport { ModuleState } from './module.state';\n\n// clear state on module destroy - triggered in ngDestroy\nexport const CLEAR_STORE = createAction(\n  '[SVM] CLEAR STORE',\n);\nexport function clearState(reducer: ActionReducer<ModuleState>) {\n  return function (state: ModuleState, action: Action): ModuleState {\n    if (action.type === CLEAR_STORE.type) {\n      state = undefined;\n    }\n    return reducer(state, action);\n  };\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { AnnotationEntity } from '../../models/annotation';\n\nexport const setAnnotationIds = createAction(\n  '[SVM Annotation] Set Annotation Ids',\n  props<{ annotationIds: string[] }>()\n);\n\nexport const setAnnotationIdsReady = createAction(\n  '[SVM Annotation] Set Annotation Ids Ready',\n);\n\nexport const addAnnotation = createAction(\n  '[SVM Annotation] Add Annotation',\n  props<{ annotation: AnnotationEntity }>()\n);\n\nexport const setAnnotations = createAction(\n  '[SVM Annotation] Set Annotations',\n  props<{ annotations: AnnotationEntity[] }>()\n);\n\nexport const clearAnnotations = createAction(\n  '[SVM Annotation] Clear Annotations'\n);\n\nexport const highlightAnnotations = createAction(\n  '[SVM Annotation] Highlight Annotations',\n  props<{ ids: string[] }>()\n);\n\nexport const focusAnnotation = createAction(\n  '[SVM Annotation] Focus Annotation',\n  props<{ id: string }>()\n);\n\nexport const setCentroids = createAction(\n  '[SVM Annotation] Set Annotation Centroids',\n  props<{ centroids: number[][] }>()\n);\n\nexport const discardAnnotations = createAction(\n  '[SVM Annotation] Discard Annotations',\n  props<{ annotationIds: string[] }>()\n);\n\nexport const hideAnnotations = createAction(\n  '[SVM Annotation] Hide Annotations',\n  props<{ hiddenIds: string[] }>()\n);\n","export const DEFAULT_ENTITY_CACHE_SIZE = 100000;\n","import { EntityCachingState } from '../models/caching.models';\nimport { DEFAULT_ENTITY_CACHE_SIZE } from '../models/caching.constants';\n\nexport class CachingState<T> implements EntityCachingState<T>{\n  addedEntityIds: string[] | undefined = undefined;\n  updatedEntityIds: string[] | undefined = undefined;\n  cacheSizeSoftConstraint: number;\n  entityCache: Map<string, T> = new Map<string, T>();\n\n  constructor(cacheSize?: number) {\n    this.cacheSizeSoftConstraint = cacheSize ? cacheSize : DEFAULT_ENTITY_CACHE_SIZE;\n  }\n}\n","import { EntityCachingSelectors, EntityCachingState } from '../models/caching.models';\n\nexport class CachingSelectors<T, V extends EntityCachingState<T>> implements EntityCachingSelectors<T, V>{\n  selectAll(state: V): T[] {\n    const values: T[] = [];\n    for (const value of state.entityCache.values()) {\n      values.push(value);\n    }\n    return values;\n  }\n\n  selectIds(state: V): string[] {\n    const ids: string[] = [];\n    for (const id of state.entityCache.keys()) {\n      ids.push(id);\n    }\n    return ids;\n  }\n\n  selectTotal(state: V): number {\n    return state.entityCache.size;\n  }\n}\n","import {\n  EntityCachingAdapter,\n  EntityCachingSelectors,\n  EntityCachingState,\n  MinimalEntity,\n} from '../models/caching.models';\nimport { CachingState } from '../state/caching-state';\nimport { CachingSelectors } from '../selectors/caching-selectors';\nimport { IdSelector } from '@ngrx/entity';\n\nexport class CachingAdapter<T> implements EntityCachingAdapter<T> {\n\n  constructor(selectedId?: IdSelector<T>) {\n    const select = Object.assign({selectedId: (instance: MinimalEntity) => instance.id}, {selectedId: selectedId});\n    this.selectedId = select.selectedId;\n  }\n\n  selectedId: IdSelector<T>;\n\n  addMany<S extends EntityCachingState<T>>(entities: T[], state: S): S {\n    const newState = { ...state };\n    newState.addedEntityIds = [];\n    newState.updatedEntityIds = [];\n    for (const entity of entities) {\n      const id = this.selectedId(entity) as string;\n      if (!newState.entityCache.has(id)) {\n        newState.entityCache.set(id, entity);\n        newState.addedEntityIds.push(id);\n      }\n    }\n    return newState;\n  }\n\n  addOne<S extends EntityCachingState<T>>(entity: T, state: S): S {\n    const newState = { ...state };\n    newState.addedEntityIds = [];\n    newState.updatedEntityIds = [];\n    const id = this.selectedId(entity) as string;\n    if (!newState.entityCache.has(id)) {\n      newState.entityCache.set(id, entity);\n      newState.addedEntityIds.push(id);\n    }\n    return newState;\n  }\n\n  upsertMany<S extends EntityCachingState<T>>(entities: T[], state: S): S {\n    const newState = { ...state };\n    newState.addedEntityIds = [];\n    newState.updatedEntityIds = [];\n    for (const entity of entities) {\n      const id = this.selectedId(entity) as string;\n      if (!newState.entityCache.has(id)) {\n        newState.addedEntityIds.push(id);\n      } else {\n        newState.updatedEntityIds.push(id);\n      }\n      newState.entityCache.set(id, entity);\n    }\n    return newState;\n  }\n\n  upsertOne<S extends EntityCachingState<T>>(entity: T, state: S): S {\n    const newState = { ...state };\n    newState.addedEntityIds = [];\n    newState.updatedEntityIds = [];\n    const id = this.selectedId(entity) as string;\n    if (!newState.entityCache.has(id)) {\n      newState.addedEntityIds.push(id);\n    } else {\n      newState.updatedEntityIds.push(id);\n    }\n    newState.entityCache.set(id, entity);\n    return newState;\n  }\n\n  getInitialState(cacheSize?: number): EntityCachingState<T>;\n  getInitialState<S>(state: S, cacheSize?: number): EntityCachingState<T> & S;\n  getInitialState<S>(state?: S, cacheSize?: number): EntityCachingState<T> {\n    const cachingState = new CachingState<T>(cacheSize);\n    return state ? { ...cachingState, ...state } : cachingState;\n  }\n\n  getSelectors(): EntityCachingSelectors<T, EntityCachingState<T>> {\n    return new CachingSelectors<T, EntityCachingState<T>>();\n  }\n\n  removeAll<S extends EntityCachingState<T>>(state: S): S {\n    const newState = { ...state };\n    newState.addedEntityIds = [];\n    newState.updatedEntityIds = [];\n    newState.entityCache.clear();\n    return newState;\n  }\n\n  removeMany<S extends EntityCachingState<T>>(keys: string[], state: S): S {\n    const newState = { ...state };\n    keys.forEach(key => newState.entityCache.delete(key));\n    return newState;\n  }\n\n  removeToIndex<S extends EntityCachingState<T>>(index: number, state: S): S {\n    const newState = { ...state };\n    Array.from(newState.entityCache.keys())\n      .splice(0, index)\n      .forEach(key => newState.entityCache.delete(key));\n    return newState;\n  }\n\n  removeOne<S extends EntityCachingState<T>>(key: string, state: S): S {\n    const newState = { ...state };\n    newState.entityCache.delete(key);\n    return newState;\n  }\n}\n\nexport function createEntityCachingAdapter<T>(selectedId?: IdSelector<T>): EntityCachingAdapter<T> {\n  return new CachingAdapter<T>(selectedId);\n}\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { AnnotationEntity } from '../../models/annotation';\nimport * as AnnotationActions from './annotation.actions';\nimport {\n  EntityCachingAdapter,\n  EntityCachingState,\n  createEntityCachingAdapter\n} from '../../entity';\n\nexport interface State extends EntityCachingState<AnnotationEntity> {\n  // additional entities state properties\n  addAnnotationIds: string[];\n  highlighted: Array<string>;\n  focus: string;\n  centroids: number[][];\n  discardedIds: string[];\n  hiddenIds: string[];\n  clear: boolean;\n}\n\nexport const annotationAdapter: EntityCachingAdapter<AnnotationEntity> = createEntityCachingAdapter<AnnotationEntity>(\n  (annotation) => annotation.id\n);\n\nexport const initialState: State = annotationAdapter.getInitialState({\n  // externally set annotation features that should be highlighted\n  addAnnotationIds: [],\n  highlighted: [],\n  focus: undefined,\n  centroids: [],\n  discardedIds: [],\n  hiddenIds: [],\n  clear: false,\n});\n\nconst annotationReducer = createReducer(\n  initialState,\n  on(AnnotationActions.addAnnotation, (state, { annotation }): State =>\n    annotationAdapter.addOne(annotation, {\n      ...state,\n      clear: false,\n    })\n  ),\n  on(AnnotationActions.setAnnotations, (state, { annotations }): State =>\n    annotationAdapter.upsertMany(annotations, {\n      ...state,\n      clear: false,\n    })\n  ),\n  on(AnnotationActions.clearAnnotations, (state): State =>\n    annotationAdapter.removeAll({\n      ...state,\n      ...initialState,\n      clear: true,\n    })\n  ),\n  on(AnnotationActions.highlightAnnotations, (state, { ids }): State => ({\n    ...state,\n    highlighted: ids,\n    clear: false,\n  })),\n  on(AnnotationActions.focusAnnotation, (state, { id }): State => ({\n    ...state,\n    focus: id,\n    clear: false,\n  })),\n  on(AnnotationActions.setCentroids, (state, { centroids }): State => ({\n    ...state,\n    centroids,\n    clear: false,\n  })),\n  on(AnnotationActions.setAnnotationIds, (state, { annotationIds }): State => ({\n    ...state,\n    addAnnotationIds: annotationIds,\n    clear: false,\n  })),\n  on(AnnotationActions.discardAnnotations, (state, { annotationIds }): State =>\n    annotationAdapter.removeMany(annotationIds, {\n      ...state,\n      discardedIds: annotationIds,\n      clear: false,\n    })\n  ),\n  on(AnnotationActions.hideAnnotations, (state, { hiddenIds }): State => ({\n    ...state,\n    hiddenIds,\n    clear: false,\n  }))\n);\n\n// a reducer creator wrapper function - Only needed if using View Engine AOT\nexport function reducer(state: State | undefined, action: Action) {\n  return annotationReducer(state, action);\n}\n\n\nexport const {\n  selectIds,\n  selectAll,\n  selectTotal,\n} = annotationAdapter.getSelectors();\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { Slide } from '../../models/slide';\nimport * as SlideActions from './slide.actions';\n\nexport interface State {\n  slide: Slide;\n  slideId: string;\n  loaded: boolean;\n}\n\nexport const initialState: State = {\n  slide: null,\n  slideId: undefined,\n  loaded: false,\n};\n\nconst slideReducer = createReducer(\n  initialState,\n\n  on(SlideActions.addSlideReady, (state, { slide }): State => ({\n    ...state,\n    slide,\n  })),\n\n  on(SlideActions.selectSlideId, (state, { slideId }): State => ({\n    ...state,\n    slideId,\n  }))\n\n  // on(SlideActions.loadSlides, (state): State => state),\n  // on(SlideActions.loadSlidesSuccess, (state, _action): State => state),\n  // on(SlideActions.loadSlidesFailure, (state, _action): State => state)\n);\n\n// a reducer creator wrapper function - Only needed if using View Engine AOT\nexport function reducer(state: State | undefined, action: Action) {\n  return slideReducer(state, action);\n}\n\nexport const selectSlide = (state: State) => state.slide;\n// export const selectTileSource = (state: State) => state.slideTileSource;\nexport const selectSlideLoaded = (state: State) => state.loaded;\n","export enum DrawType {\n  Circle = 'circle',\n  Rectangle = 'rectangle',\n  LineString = 'lineString',\n  Polygon = 'polygon',\n  PolygonAlternative = 'polygonAlternative',\n  Point = 'point',\n}\n\nexport enum InteractionType {\n  Move = 'move',\n  Measure = 'measure',\n  Select = 'select', // TODO: implement\n}\n\nexport enum MouseButtonType {\n  None,\n  Left,\n  Right,\n}\n\nexport type ToolbarInteractionType = DrawType | InteractionType;\n\nexport interface MouseInteractionType {\n  left?: ToolbarInteractionType | undefined;\n  right?: ToolbarInteractionType | undefined;\n}\n","import { Coordinate } from 'ol/coordinate';\nimport { Extent } from 'ol/extent';\n\nexport interface CurrentView {\n  extent: Extent;\n  zoom: number;\n  nppCurrent: number;\n  nppMin: number;\n  nppMax: number;\n  nppBase: number;\n}\n\nexport interface ZoomView {\n  extent: Extent;\n  resolution: number;\n  sender: ViewObserver;\n  receivers: ViewObserver[];\n}\n\nexport enum ViewObserver {\n  None,\n  MainMap,\n  OverviewMap,\n  ZoomSlider,\n}\n\n/**\n * UNUSED\n * public interface to configure viewer\n * TODO: Implement behavior of the viewer depending on this interface\n */\nexport interface ViewerConfig {\n  numWindows: number;\n  showSlideNavigation: boolean;\n  showClassView: boolean;\n}\n\nexport interface IAnnotationCard {\n  titel: string;\n  description?: string;\n}\n\n/**\n *\n */\nexport class Popup {\n  private id: number;\n  constructor(private coordinates: Coordinate, private element: HTMLElement) {}\n  getElement() {\n    return this.element;\n  }\n  getCoordinates(): Coordinate {\n    return this.coordinates;\n  }\n  getId(): number {\n    return this.id;\n  }\n}\n\nexport type AnnotationStyleMode = \"DEFAULT\" | \"DRAWING\" | \"HOVER\";\n","import { createAction, props } from '@ngrx/store';\nimport { MouseInteractionType, ToolbarInteractionType } from '../../models/interaction';\nimport { CurrentView, ZoomView } from '../../models/ui';\nimport { UiConfig } from '../../models/viewer-config';\nimport { AnnotationHighlightConfig } from '../../config/annotation-highlight.config';\n\nexport const setUiToolMode = createAction(\n  '[SVM Ui] Set Tool Mode',\n  props<{ toolMode: MouseInteractionType }>()\n);\n\nexport const viewportChanged = createAction(\n  '[SVM Ui] Viewport Changed',\n  props<{ view: CurrentView }>()\n);\n\nexport const zoomviewChanged = createAction(\n  '[SVM Ui] Zoomview Changed',\n  props<{ zoomview: ZoomView }>()\n);\n\nexport const setUIConfig = createAction(\n  '[SVM Ui] Set Ui Config',\n  props<{ uiConfig: UiConfig }>()\n);\n\nexport const setAnnotationBarVisibility = createAction(\n  '[SVM Ui] Set AnnotationBar Visibility',\n  props<{ showAnnotationBar: boolean }>()\n);\n\nexport const setAutoAnnotationTitle = createAction(\n  '[SVM Ui] Set Auto Annotation Title',\n  props<{ autoSetAnnotationTitle: boolean }>()\n);\n\nexport const setRenderHideNavigationButton = createAction(\n  '[SVM Ui] Set Render Hide Navigation Button',\n  props<{ renderHideNavigationButton: boolean }>()\n);\n\nexport const setUpdateViewer = createAction(\n  '[SVM Ui] Update Viewer',\n  props<{ update: number }>()\n);\n\nexport const setAllowedInteractionTypes = createAction(\n  '[SVM Ui] Set Allowed Draw Types',\n  props<{ allowedTypes: ToolbarInteractionType[] | undefined }>()\n);\n\nexport const setExaminationState = createAction(\n  '[SVM Ui] Set Examination State',\n  props<{ examinationClosed: boolean }>()\n);\n\nexport const setAnnotationHighlightConfig = createAction(\n  '[SVM Ui] Set Annotation Hover Config',\n  props<{ annotationHighlightConfig: AnnotationHighlightConfig }>()\n);\n\nexport const setAnnotationStrokeWidth = createAction(\n  '[SVM Ui] Set Annotation Stroke Width',\n  props<{ annotationStrokeWidth: number }>(),\n);\n","enum HighlightType {\n  CLICK,\n  OVER,\n}\n\ninterface AnnotationHighlightConfig {\n  highlightType: HighlightType;\n}\n\nconst DEFAULT_ANNOTATION_HIGHLIGHT_CONFIG: AnnotationHighlightConfig = {\n  highlightType: HighlightType.OVER,\n};\n\nexport {\n  HighlightType,\n  AnnotationHighlightConfig,\n  DEFAULT_ANNOTATION_HIGHLIGHT_CONFIG,\n};\n","import { Action, createReducer, on } from '@ngrx/store';\nimport {\n  InteractionType,\n  MouseInteractionType,\n  ToolbarInteractionType,\n} from '../../models/interaction';\nimport { ViewObserver, ZoomView } from '../../models/ui';\nimport { UiConfig } from '../../models/viewer-config';\nimport * as UiActions from './ui.actions';\nimport { AnnotationHighlightConfig, DEFAULT_ANNOTATION_HIGHLIGHT_CONFIG } from '../../config/annotation-highlight.config';\n\nexport interface State {\n  config: UiConfig;\n  interactionMode: MouseInteractionType;\n  zoomView: ZoomView;\n  updateViewer: number;\n  allowedTypes: ToolbarInteractionType[] | undefined;\n  examinationClosed: boolean | undefined;\n  annotationHighlightConfig: AnnotationHighlightConfig;\n  annotationStrokeWidth: number;\n}\n\nexport const initialState: State = {\n  config: {\n    showAnnotationBar: true,\n    autoSetAnnotationTitle: false,\n    renderHideNavigationButton: false,\n  },\n  interactionMode: {\n    left: InteractionType.Move,\n    right: InteractionType.Move,\n  },\n  zoomView: {\n    extent: [0, 0, 0, 0],\n    resolution: 0,\n    sender: ViewObserver.MainMap,\n    receivers: [ViewObserver.None],\n  },\n  updateViewer: undefined,\n  allowedTypes: undefined,\n  examinationClosed: undefined,\n  annotationHighlightConfig: DEFAULT_ANNOTATION_HIGHLIGHT_CONFIG,\n  annotationStrokeWidth: 3,\n};\n\nconst uiReducer = createReducer(\n  initialState,\n\n  on(UiActions.setUiToolMode, (state, action): State => ({\n    ...state,\n    interactionMode: action.toolMode,\n  })),\n  on(UiActions.zoomviewChanged, (state, { zoomview }): State => ({\n    ...state,\n    zoomView: zoomview,\n  })),\n\n  on(UiActions.setUIConfig, (state, { uiConfig }): State => ({\n    ...state,\n    config: uiConfig\n  })),\n\n  on(UiActions.setAnnotationBarVisibility, (state, { showAnnotationBar }): State => ({\n    ...state,\n    config: {\n      ...state.config,\n      showAnnotationBar: showAnnotationBar,\n    },\n  })),\n\n  on(UiActions.setAutoAnnotationTitle, (state, { autoSetAnnotationTitle }): State => ({\n    ...state,\n    config: {\n      ...state.config,\n      autoSetAnnotationTitle\n    },\n  })),\n  on(UiActions.setRenderHideNavigationButton, (state, { renderHideNavigationButton }): State => ({\n    ...state,\n    config: {\n      ...state.config,\n      renderHideNavigationButton,\n    },\n  })),\n  on(UiActions.setUpdateViewer, (state, { update }): State => ({\n    ...state,\n    updateViewer: update,\n  })),\n  on(UiActions.setAllowedInteractionTypes, (state, { allowedTypes }): State => ({\n    ...state,\n    allowedTypes\n  })),\n  on(UiActions.setExaminationState, (state, { examinationClosed }): State => ({\n    ...state,\n    examinationClosed\n  })),\n  on(UiActions.setAnnotationHighlightConfig, (state, { annotationHighlightConfig }): State => ({\n    ...state,\n    annotationHighlightConfig,\n  })),\n  on(UiActions.setAnnotationStrokeWidth, (state, { annotationStrokeWidth }): State => ({\n    ...state,\n    annotationStrokeWidth,\n  })),\n);\n\n// a reducer creator wrapper function - Only needed if using View Engine AOT\nexport function reducer(state: State | undefined, action: Action) {\n  return uiReducer(state, action);\n}\n","import { createAction, props } from '@ngrx/store';\n\nexport const setClusterDistance = createAction(\n  '[SVM Cluster] Set Cluster Distance',\n  props<{ clusterDistance: number }>()\n);\n","import { Action, createReducer, on } from '@ngrx/store';\nimport * as ClusterActions from './cluster.actions';\n\nexport interface State {\n  clusterDistance: number;\n}\n\nexport const initialState: State = {\n  clusterDistance: undefined,\n};\n\n\nconst clusterReducer = createReducer(\n  initialState,\n  on(ClusterActions.setClusterDistance, (state, { clusterDistance }): State => ({\n    ...state,\n    clusterDistance\n  })),\n);\n\nexport function reducer(state: State | undefined, action: Action) {\n  return clusterReducer(state, action);\n}\n","import { createAction, props } from '@ngrx/store';\nimport { CharacterLimit } from '../../models/character-limit';\n\nexport const setCharacterConfig = createAction(\n  '[SVM CharacterConfig] Set Character Config',\n  props<{ config: CharacterLimit }>()\n);\n\n\n\n\n","import { Action, createReducer, on } from '@ngrx/store';\nimport * as CharacterConfigActions from './character-config.actions';\nimport { CharacterLimit } from '../../models/character-limit';\n\nexport interface State {\n  config: CharacterLimit;\n}\n\nexport const initialState: State = {\n  config: {},\n};\n\n\nexport const characterConfigReducer = createReducer(\n  initialState,\n  on(CharacterConfigActions.setCharacterConfig, (state, { config }): State => ({\n    ...state,\n    config\n  })),\n);\n\nexport function reducer(state: State | undefined, action: Action) {\n  return characterConfigReducer(state, action);\n}\n","import { createActionGroup, props } from '@ngrx/store';\nimport { OpacityChange, PixelMapInput, PixelMapUpdate, ZoomToLevel } from '../../models/pixelmap';\n\nexport const PixelMapsActions = createActionGroup({\n  source: 'SVM Pixel Maps Actions',\n  events: {\n    'SVM Set Pixel Map Input': props<{ pixelMapInput?: PixelMapInput }>(),\n    'SVM Update Pixel Map': props<{ pixelMapUpdate: PixelMapUpdate }>(),\n    'SVM Set Channel Opacity': props<{ channelOpacity?: OpacityChange }>(),\n    'SVM Zoom To Pixel Map Level': props<{ zoomToLevel: ZoomToLevel }>(),\n    'SVM Zoom To Pixel Map Level Success': props<{ zoomToLevel: ZoomToLevel }>(),\n  }\n});\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { OpacityChange, PixelMapInput, PixelMapUpdate, ZoomToLevel } from '../../models/pixelmap';\nimport { PixelMapsActions } from './pixel-maps.actions';\n\nexport interface State {\n  pixelMapInput?: PixelMapInput | undefined;\n  pixelMapUpdate?: PixelMapUpdate | undefined;\n  channelOpacity?: OpacityChange | undefined;\n  zoomToLevel?: ZoomToLevel | undefined;\n}\n\nexport const initialState: State = {\n  pixelMapInput: undefined,\n  pixelMapUpdate: undefined,\n  channelOpacity: undefined,\n  zoomToLevel: undefined,\n};\n\nexport const slideMapReducer = createReducer(\n  initialState,\n  on(PixelMapsActions.sVMSetPixelMapInput, (state, { pixelMapInput }): State => ({\n    ...state,\n    pixelMapInput,\n  })),\n  on(PixelMapsActions.sVMUpdatePixelMap, (state, { pixelMapUpdate }): State => ({\n    ...state,\n    pixelMapUpdate,\n  })),\n  on(PixelMapsActions.sVMSetChannelOpacity, (state, { channelOpacity }): State => ({\n    ...state,\n    channelOpacity,\n  })),\n  on(PixelMapsActions.sVMZoomToPixelMapLevelSuccess, (state, { zoomToLevel }): State => ({\n    ...state,\n    zoomToLevel,\n  })),\n);\n\nexport function reducer(state: State | undefined, action: Action): State {\n  return slideMapReducer(state, action);\n}\n","import { createActionGroup, emptyProps, props } from '@ngrx/store';\nimport { ClassColorMapping, FeatureStyleMapping } from '../../models/feature-style';\n\nexport const FeaturesActions = createActionGroup({\n  source: '[SVM] Features Actions',\n  events: {\n    'Set Class Color Mapping': props<{ classColorMapping: ClassColorMapping }>(),\n    'Set Feature Style Mapping': props<{ featureStyleMapping: FeatureStyleMapping }>(),\n    'Clear Features': emptyProps(),\n  }\n});\n","import { Action, createReducer, on } from '@ngrx/store';\nimport { FeatureStyleMapping } from '../../models/feature-style';\nimport { FeaturesActions } from './features.actions';\n\n\nexport interface State {\n  featureStyleMapping: FeatureStyleMapping;\n}\n\nexport const initialState: State = {\n  featureStyleMapping: {}\n};\n\nconst featureReducer = createReducer(\n  initialState,\n  on(FeaturesActions.setFeatureStyleMapping, (state, { featureStyleMapping }): State => ({\n    ...state,\n    featureStyleMapping,\n  })),\n  on(FeaturesActions.clearFeatures, (state): State => ({\n    ...state,\n    ...initialState,\n  }))\n);\n\nexport function reducer(state: State | undefined, action: Action): State {\n  return featureReducer(state, action);\n}\n","export const SVM_FEATURE_KEY = 'SlideViewerModuleStore';\n\nexport const SVM_SLIDE_FEATURE_KEY = 'svmSlide';\nexport const SVM_ANNOTATIONS_FEATURE_KEY = 'svmAnnotations';\nexport const SVM_UI_FEATURE_KEY = 'svmUiState';\nexport const SVN_CLUSTER_FEATURE_KEY = 'svmCluster';\nexport const SVM_CHARACTER_CONFIG_KEY = 'svmCharacterConfig';\nexport const SVM_PIXEL_MAPS_FEATURE_KEY = 'svmPixelMaps';\nexport const SVM_FEATURES_FEATURE_KEY = 'svmFeatures';\n","import {\n  Action,\n  combineReducers,\n  createFeatureSelector,\n  MetaReducer,\n} from '@ngrx/store';\n\nimport { clearState } from './meta.reducer';\n\nimport * as  AnnotationFeature from './annotations/annotation.reducer';\nimport * as  SlideFeature from './slide/slide.reducer';\nimport * as  UiFeature from './ui/ui.reducer';\nimport * as ClusterFeature from './cluster/cluster.reducer';\nimport * as CharacterConfigFeature from './character-config/character-config.reducer';\nimport * as PixelMapsFeature from './pixel-maps/pixel-maps.reducer';\nimport * as FeaturesFeature from './features/features.reducer';\n\nimport {\n  SVM_ANNOTATIONS_FEATURE_KEY,\n  SVM_FEATURE_KEY,\n  SVM_SLIDE_FEATURE_KEY,\n  SVM_UI_FEATURE_KEY,\n  SVN_CLUSTER_FEATURE_KEY,\n  SVM_CHARACTER_CONFIG_KEY,\n  SVM_PIXEL_MAPS_FEATURE_KEY,\n  SVM_FEATURES_FEATURE_KEY,\n} from './store.keys';\n\nexport const selectModuleFeatureState = createFeatureSelector<ModuleState>(\n  SVM_FEATURE_KEY\n);\n\nexport interface ModuleState {\n  [SVM_SLIDE_FEATURE_KEY]: SlideFeature.State;\n  [SVM_ANNOTATIONS_FEATURE_KEY]: AnnotationFeature.State;\n  [SVM_UI_FEATURE_KEY]: UiFeature.State;\n  [SVN_CLUSTER_FEATURE_KEY]: ClusterFeature.State;\n  [SVM_CHARACTER_CONFIG_KEY]: CharacterConfigFeature.State;\n  [SVM_PIXEL_MAPS_FEATURE_KEY]: PixelMapsFeature.State;\n  [SVM_FEATURES_FEATURE_KEY]: FeaturesFeature.State;\n}\n\n// make AOT compiler in prod mode happy - see https://github.com/ngrx/platform/issues/2193\nexport function reducersSVM(state: ModuleState | undefined, action: Action) {\n  return combineReducers({\n    [SVM_SLIDE_FEATURE_KEY]: SlideFeature.reducer,\n    [SVM_ANNOTATIONS_FEATURE_KEY]: AnnotationFeature.reducer,\n    [SVM_UI_FEATURE_KEY]: UiFeature.reducer,\n    [SVN_CLUSTER_FEATURE_KEY]: ClusterFeature.reducer,\n    [SVM_CHARACTER_CONFIG_KEY]: CharacterConfigFeature.reducer,\n    [SVM_PIXEL_MAPS_FEATURE_KEY]: PixelMapsFeature.reducer,\n    [SVM_FEATURES_FEATURE_KEY]: FeaturesFeature.reducer,\n  })(state, action);\n}\n\n// clear state on module destroy\nexport const metaReducers: MetaReducer<ModuleState>[] = [clearState];\n\nexport const selectModuleState = createFeatureSelector<ModuleState>(SVM_FEATURE_KEY);\n\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState, ModuleState } from '../module.state';\nimport * as fromSlide from './slide.reducer';\n\nexport const selectSlideFeatureState = createSelector(\n  selectModuleFeatureState,\n  (state: ModuleState) => state.svmSlide\n);\n\nexport const selectSlide = createSelector(\n  selectSlideFeatureState,\n  (state: fromSlide.State) => {\n    return state?.slide;\n  }\n);\n\nexport const selectSlideSourceReady = createSelector(\n  selectSlideFeatureState,\n  (state: fromSlide.State) => state.loaded\n);\n\nexport const selectSlideId = createSelector(\n  selectSlideFeatureState,\n  (state) => state.slideId\n);\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport * as SlideActions from './slide.actions';\nimport * as SlideSelectors from './slide.selectors';\nimport { filter, map, switchMap } from 'rxjs/operators';\n\n@Injectable()\nexport class SlideEffects {\n\n  // only set an new slide when the selected slide id\n  // differs from the one that is in memory\n  addSlide$ = createEffect(() => {\n    return this.action$.pipe(\n      ofType(SlideActions.addSlide),\n      map(action => action.slide),\n      filter(slide => !!slide),\n      concatLatestFrom(() => [\n        this.store.select(SlideSelectors.selectSlide),\n        this.store.select(SlideSelectors.selectSlideId),\n      ]),\n      filter(([slide, selectedSlide, selectedId]) =>\n        !selectedId\n        || selectedSlide?.slideId !== selectedId\n        || selectedId !== slide.slideId\n      ),\n      switchMap(([slide]) => [\n        SlideActions.selectedSlideChanged({ slide }),\n        SlideActions.addSlideReady({ slide })\n      ])\n    );\n  });\n\n  // clear current slide when the selected slide id is undefined\n  clearSlide$ = createEffect(() => {\n    return this.action$.pipe(\n      ofType(SlideActions.selectSlideId),\n      map(action => action.slideId),\n      filter(slideId => !slideId),\n      map(() => SlideActions.addSlideReady({ slide: undefined }))\n    );\n  });\n\n  constructor(\n    private readonly action$: Actions,\n    private readonly store: Store,\n  ) {}\n}\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState, ModuleState } from '../module.state';\nimport {\n  selectAll,\n  selectTotal,\n} from './annotation.reducer';\nimport { IAnnotation, AnnotationsWithUpdates } from '../../models/annotation';\n\n\nexport const selectAnnotationFeatureState = createSelector(\n  selectModuleFeatureState,\n  (state: ModuleState) => state.svmAnnotations\n);\n\nexport const selectAnnotations = createSelector(\n  selectAnnotationFeatureState,\n  selectAll\n);\n\nexport const selectHighlighted = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.highlighted\n);\n\nexport const selectFocused = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.focus\n);\n\nexport const selectCentroids = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.centroids\n);\n\nexport const selectAddedAnnotationIds = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.addAnnotationIds\n);\n\nexport const selectUpdatedAnnotationIds = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.updatedEntityIds\n);\n\nexport const selectRenderAnnotations = createSelector(\n  selectAnnotationFeatureState,\n  selectAddedAnnotationIds,\n  (state, annotationIds) => {\n    const cachedAnnotations: IAnnotation[] = [];\n    let annotation: IAnnotation | undefined;\n    for (const id of annotationIds) {\n      annotation = state.entityCache.get(id);\n      if (annotation) {\n        cachedAnnotations.push(annotation);\n      } else {\n        return undefined;\n      }\n    }\n    return cachedAnnotations;\n  }\n);\n\nexport const selectRenderAnnotationsWithUpdate = createSelector(\n  selectRenderAnnotations,\n  selectUpdatedAnnotationIds,\n  (annotations, updatedAnnotationIds) => ({ annotations, updatedAnnotationIds } as AnnotationsWithUpdates)\n);\n\nexport const selectAddedAnnotations = createSelector(\n  selectAnnotationFeatureState,\n  (state) => {\n    const addedAnnotations: IAnnotation[] = [];\n    let annotation: IAnnotation | undefined;\n    for (const id of state.addedEntityIds) {\n      annotation = state.entityCache.get(id);\n      if (annotation) {\n        addedAnnotations.push(annotation);\n      } else {\n        return undefined;\n      }\n    }\n    return addedAnnotations;\n  }\n);\n\nexport const selectDiscardAnnotationIds = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.discardedIds\n);\n\nexport const selectClearState = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.clear\n);\n\nexport const selectHiddenAnnotationIds = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.hiddenIds\n);\n\nexport const selectMissingCachedAnnotations = createSelector(\n  selectAnnotationFeatureState,\n  selectAddedAnnotationIds,\n  (state, addedAnnotationIds) => {\n    //there is nothing cached yet\n    if (!state.entityCache || state.entityCache.size < 1) {\n      return {\n        missingAnnotations: addedAnnotationIds,\n        cachedAnnotations: [],\n      };\n    }\n    // we check out cache for uncached and already cached annotations\n    const missing: string[] = [];\n    const keep: string[] = [];\n    addedAnnotationIds.forEach(id => {\n      if(!state.entityCache.has(id)) {\n        missing.push(id);\n      } else {\n        keep.push(id);\n      }\n    });\n\n    return {\n      missingAnnotations: missing,\n      cachedAnnotations: keep,\n    };\n  }\n);\n\nexport const selectCurrentAnnotationCacheSize = createSelector(\n  selectAnnotationFeatureState,\n  selectTotal\n);\n\nexport const selectMaxAnnotationCacheSize = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.cacheSizeSoftConstraint\n);\n\nexport const selectAnnotationCache = createSelector(\n  selectAnnotationFeatureState,\n  (state) => state.entityCache\n);\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AnnotationMappingService {\n  private annotationIdCache: Set<string> = new Set<string>();\n\n  getAll(): Set<string> {\n    return this.annotationIdCache;\n  }\n\n  add(id: string): void {\n    this.annotationIdCache.delete(id);\n    this.annotationIdCache.add(id);\n  }\n\n  addMany(ids: string[]): void {\n    for (const id of ids) {\n      this.add(id);\n    }\n  }\n\n  discard(count: number): string[] {\n    const discard = Array.from(this.annotationIdCache).splice(0, count);\n    for (const id of discard) {\n      this.annotationIdCache.delete(id);\n    }\n    return discard;\n  }\n\n  clear(): void {\n    this.annotationIdCache.clear();\n  }\n}\n","import { AnnotationMappingService } from './../../services/annotation-mapping.service';\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport * as AnnotationsActions from './annotation.actions';\nimport * as AnnotationsSelectors from './annotation.selectors';\nimport { Store } from '@ngrx/store';\nimport { filter, map } from 'rxjs/operators';\n\n@Injectable()\nexport class AnnotationEffects {\n\n  addAnnotationIds$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(AnnotationsActions.setAnnotationIds),\n      map(action => action.annotationIds),\n      map(ids => this.annotationIdSet.addMany(ids)),\n      map(() => AnnotationsActions.setAnnotationIdsReady())\n    );\n  });\n\n  // we need to make place for the newly requested annotations, so we clean up the cache if needed\n  checkCleanUpCache$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(AnnotationsActions.setAnnotationIdsReady),\n      concatLatestFrom(() => [\n        this.store.select(AnnotationsSelectors.selectMissingCachedAnnotations),\n        this.store.select(AnnotationsSelectors.selectCurrentAnnotationCacheSize),\n        this.store.select(AnnotationsSelectors.selectMaxAnnotationCacheSize)\n      ]),\n      filter(([_action, cache, cacheSize, maxSize]) => cacheSize + cache.missingAnnotations.length > maxSize),\n      map(([_action, cache, cacheSize]) => cacheSize - cache.cachedAnnotations.length),\n      filter(index => index > 0),\n      map(index => this.annotationIdSet.discard(index)),\n      map(annotationIds => AnnotationsActions.discardAnnotations({ annotationIds }))\n    );\n  });\n\n  clearAnnotations$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(AnnotationsActions.clearAnnotations),\n      map(() => this.annotationIdSet.clear())\n    );\n  }, { dispatch: false });\n\n  constructor(\n    private actions$: Actions,\n    private store: Store,\n    private annotationIdSet: AnnotationMappingService,\n  ) {}\n}\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState, ModuleState } from '../module.state';\nimport { DrawType, MouseInteractionType } from '../../models/interaction';\n\nexport const selectUiFeatureState = createSelector(\n  selectModuleFeatureState,\n  (state: ModuleState) => state.svmUiState\n);\n\nexport const selectUiTool = createSelector(\n  selectUiFeatureState,\n  (state) => state?.interactionMode\n);\n\nexport const selectUiDrawTool = createSelector(\n  selectUiTool,\n  // (tool) => Object.values(DrawType).includes(tool as DrawType) ? tool : undefined\n  // tool => Object.values(DrawType).includes(tool.left as DrawType) ? tool : undefined\n  tool => {\n    const mouseInteraction: MouseInteractionType = {\n      left: Object.values(DrawType).includes(tool.left as DrawType) ? tool.left : undefined,\n      right: Object.values(DrawType).includes(tool.right as DrawType) ? tool.right : undefined,\n    };\n    return mouseInteraction;\n  }\n);\n\n/* export const selectIsMeasuring = pipe(\n  select(selectUiTool),\n  map((tool) => (tool === InteractionType.Measure))\n); */\n\nexport const selectZoomView = createSelector(\n  selectUiFeatureState,\n  (state) => state?.zoomView\n);\n\nexport const selectUiConfig = createSelector(\n  selectUiFeatureState,\n  (state) => state.config\n);\n\nexport const selectAnnotationBarVisibility = createSelector(\n  selectUiFeatureState,\n  (state) => state.config?.showAnnotationBar\n);\n\nexport const selectAutoAnnotationTitle = createSelector(\n  selectUiFeatureState,\n  (state) => state.config?.autoSetAnnotationTitle\n);\n\nexport const selectRenderHideNavigationButton = createSelector(\n  selectUiFeatureState,\n  (state) => state.config?.renderHideNavigationButton\n);\n\nexport const selectUpdateViewer = createSelector(\n  selectUiFeatureState,\n  (state) => state?.updateViewer\n);\n\nexport const selectAllowedInteractionTypes = createSelector(\n  selectUiFeatureState,\n  (state) => state.allowedTypes\n);\n\nexport const selectExaminationState = createSelector(\n  selectUiFeatureState,\n  (state) => state.examinationClosed\n);\n\nexport const selectAnnotationHighlightConfig = createSelector(\n  selectUiFeatureState,\n  (state) => state.annotationHighlightConfig\n);\n\nexport const selectAnnotationStrokeWidth = createSelector(\n  selectUiFeatureState,\n  (state) => state.annotationStrokeWidth\n);\n","\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\n\nimport { map } from 'rxjs/operators';\nimport { focusAnnotation } from '../annotations/annotation.actions';\n\nimport * as UiActions from './ui.actions';\nimport { SlideActions } from '../slide';\nimport { InteractionType } from '../../models/interaction';\n\n@Injectable()\nexport class UiEffects {\n  loadUis$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(UiActions.viewportChanged),\n      // invalidate focused annotation if viewport is moved\n      map(() => focusAnnotation({ id: undefined }))\n    );\n  });\n\n  // reset interaction mode to move when slide was added\n  resetInteraction$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(SlideActions.selectedSlideChanged),\n      map(() => UiActions.setUiToolMode({\n        toolMode: {\n          left: InteractionType.Move\n        }\n      })),\n    );\n  });\n\n  constructor(private actions$: Actions) { }\n}\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState, ModuleState } from '../module.state';\n\nexport const selectClusterFeatureState = createSelector(\n  selectModuleFeatureState,\n  (state: ModuleState) => state.svmCluster\n);\n\nexport const selectClusterDistance = createSelector(\n  selectClusterFeatureState,\n  (state) => state.clusterDistance\n);\n\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState, ModuleState } from '../module.state';\n\nexport const selectCharacterConfigState = createSelector(\n  selectModuleFeatureState,\n  (state: ModuleState) => state.svmCharacterConfig\n);\n\nexport const selectCharacterConfig = createSelector(\n  selectCharacterConfigState,\n  (state) => state.config\n);\n\nexport const selectAnnotationCharacterConfig = createSelector(\n  selectCharacterConfigState,\n  (state) => state.config.annotation\n);\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState } from '../module.state';\nimport { SVM_PIXEL_MAPS_FEATURE_KEY } from '../store.keys';\n\nexport const selectPixelMapsState = createSelector(\n  selectModuleFeatureState,\n  (state) => state[SVM_PIXEL_MAPS_FEATURE_KEY]\n);\n\nexport const selectPixelMapInput = createSelector(\n  selectPixelMapsState,\n  (state) => state.pixelMapInput\n);\n\nexport const selectPixelMapUpdate = createSelector(\n  selectPixelMapsState,\n  (state) => state.pixelMapUpdate\n);\n\nexport const selectChannelOpacity = createSelector(\n  selectPixelMapsState,\n  (state) => state.channelOpacity\n);\n\nexport const selectZoomToLevel = createSelector(\n  selectPixelMapsState,\n  (state) => state.zoomToLevel\n);\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { Store } from '@ngrx/store';\nimport { PixelMapsActions } from './pixel-maps.actions';\nimport { filter, map } from 'rxjs/operators';\nimport * as SlideSelectors from '../slide/slide.selectors';\nimport { ZoomToLevel } from '../../models/pixelmap';\n\n\n\n@Injectable()\nexport class PixelMapsEffects {\n\n  // convert zoom level to openlayers zoom level\n  convertZoomToLevel$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(PixelMapsActions.sVMZoomToPixelMapLevel),\n      map(action => action.zoomToLevel),\n      concatLatestFrom(() => [\n        this.store.select(SlideSelectors.selectSlide)\n      ]),\n      filter(([zoomToLevel, slide]) => !!zoomToLevel && !!slide),\n      map(([zoomToLevel, slide]) => {\n        const olZoomTo: ZoomToLevel = {\n          level: slide.imageInfo.numberOfLevels - zoomToLevel.level - (slide.resolver.hasArtificialLevel ? 0 : 1)\n        };\n        return olZoomTo;\n      }),\n      map(zoomToLevel => PixelMapsActions.sVMZoomToPixelMapLevelSuccess({ zoomToLevel }))\n    );\n  });\n\n  constructor(\n    private readonly store: Store,\n    private readonly actions$: Actions\n  ) {}\n}\n","import { createSelector } from '@ngrx/store';\nimport { selectModuleFeatureState } from '../module.state';\nimport { SVM_FEATURES_FEATURE_KEY } from '../store.keys';\n\nexport const selectFeaturesState = createSelector(\n  selectModuleFeatureState,\n  (state) => state[SVM_FEATURES_FEATURE_KEY]\n);\n\nexport const selectFeatureStyleMapping = createSelector(\n  selectFeaturesState,\n  (state) => state.featureStyleMapping\n);\n","import { Injectable } from '@angular/core';\nimport { Fill, Stroke, Style } from 'ol/style';\nimport { Circle as CircleStyle } from 'ol/style';\nimport {\n  ClassColorMapping,\n  ColorState,\n  FeatureStyle,\n  FeatureStyleEntry,\n  FeatureStyleMapping,\n} from '../models/feature-style';\nimport { Color } from 'ol/color';\nimport { ColorLike } from 'ol/colorlike';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FeatureStyleService {\n\n  private calculateCircleStrokeWidth(strokeWidth: number): number {\n    return Math.max(2, strokeWidth);\n  }\n\n  private createStyle(color: string | Color | ColorLike, transparentFill: Fill, strokeWidth: number): Style {\n    return new Style({\n      fill: transparentFill,\n      stroke: new Stroke({ color, width: strokeWidth }),\n    });\n  }\n\n  private createCircleStyle(color: string | Color | ColorLike, transparentFill: Fill, circleRadius: number, strokeWidth: number): Style {\n    return new Style({\n      image: new CircleStyle({\n        fill: transparentFill,\n        radius: circleRadius,\n        stroke: new Stroke({ color, width: this.calculateCircleStrokeWidth(strokeWidth) }),\n      })\n    });\n  }\n\n  private createStyleEntryColor(color: string | Color | ColorLike, transparentFill: Fill, circleRadius: number, strokeWidth: number): FeatureStyleEntry {\n    return [\n      this.createStyle(color, transparentFill, strokeWidth),\n      this.createCircleStyle(color, transparentFill, circleRadius, strokeWidth)\n    ];\n  }\n\n  private createFeatureStyle(colorState: ColorState, transparentFill: Fill, circleRadius: number, strokeWidth: number): FeatureStyle {\n    return {\n      DEFAULT: this.createStyleEntryColor(colorState.color, transparentFill, circleRadius, strokeWidth),\n      HOVER: this.createStyleEntryColor(colorState.colorHover, transparentFill, circleRadius, strokeWidth),\n      SELECTION: this.createStyleEntryColor(colorState.colorSelection, transparentFill, circleRadius, strokeWidth),\n    };\n  }\n\n  public createFeatureStyleMapping(classColorMapping: ClassColorMapping, transparentFill: Fill, strokeWidth = 1, circleRadius = 5): FeatureStyleMapping {\n    return Object\n      .entries(classColorMapping)\n      .reduce((acc, curr) => ({\n        ...acc,\n        [curr[0]]: this.createFeatureStyle(curr[1], transparentFill, circleRadius, strokeWidth)\n      }), {});\n  }\n\n  public updateFeatureStyle(featureStyle: FeatureStyle, transparentFill: Fill, strokeWidth: number, circleRadius: number): FeatureStyle {\n    return {\n      DEFAULT: this.createStyleEntryColor(featureStyle.DEFAULT[0].getStroke().getColor(), transparentFill, circleRadius, strokeWidth),\n      HOVER: this.createStyleEntryColor(featureStyle.HOVER[0].getStroke().getColor(), transparentFill, circleRadius, strokeWidth),\n      SELECTION: this.createStyleEntryColor(featureStyle.SELECTION[0].getStroke().getColor(), transparentFill, circleRadius, strokeWidth),\n    };\n  }\n\n  public updateFeatureStyleMapping(featureStyleMapping: FeatureStyleMapping, transparentFill: Fill, strokeWidth = 1, circleRadius = 5): FeatureStyleMapping {\n    // we have to create a new feature style map, because the old one and all its entries\n    // are read only due to the state management of ngrx\n    return Object\n      .entries(featureStyleMapping)\n      .reduce((acc, curr) => ({\n        ...acc,\n        [curr[0]]: this.updateFeatureStyle(curr[1], transparentFill, strokeWidth, circleRadius)\n      }), {});\n  }\n}\n","import { Fill, Style } from 'ol/style';\n\n// export type ColorName = 'blue'|'turquoise'|'dark_green'|'light_green'|'red'|'magenta'|'dark_orange'|'orange'|'yellow'|'light_gray';\n// export type ColorSequenceRecord = Record<ColorName, Array<string>>;\n\n// export interface AnnotationPalette {\n//   hover: string;\n//   roi: string;\n//   drawing: string;\n//   disabled: string;\n//   annotationClasses: string[];\n// }\n\nexport const featureStyleMode = [\n  'DEFAULT',\n  'HOVER',\n  'SELECTION',\n] as const;\nexport type FeatureStyleMode = typeof featureStyleMode[number];\n// export type FeatureStyleMode = 'DEFAULT'|'DRAWING'|'HOVER'| 'DISABLED' |'ANNOTATION_CLASSES';\nexport type FeatureStyleEntry = [Style, Style];\nexport type FeatureStylesList = Array<FeatureStyleEntry>;\nexport type FeatureStyle = Record<FeatureStyleMode, FeatureStyleEntry>;\n\nexport interface FeatureStyleMapping {\n  [key: string]: FeatureStyle;\n}\n\nexport interface ColorState {\n  color: string;\n  colorSelection: string;\n  colorHover: string;\n}\n\nexport interface ClassColorMapping {\n  [key: string]: ColorState;\n}\n\nexport const DEFAULT_TRANSPARENT_FILL = new Fill({ color: 'rgba(255, 255, 255, 0)' });\n\n// for our v2 apps and the pdl1 app augment the annotations with no classes to\n// classes: [ 'null' ]\n// instead of using null in the v2 apps use 'null' as a string\n// when sending it to the backend in a query parse it with JSON.parse()\n// JSON.parse('null') --> null\n// Do that in annotation conversation fromApi method. This way we don't have\n// any performance losses\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { FeatureStyleService } from '../../services/feature-style-service';\nimport { FeaturesActions } from './features.actions';\nimport * as UiActions from '../ui/ui.actions';\nimport * as FeaturesSelectors from './features.selectors';\nimport * as UiSelectors from '../ui/ui.selectors';\nimport { map } from 'rxjs/operators';\nimport { DEFAULT_TRANSPARENT_FILL } from '../../models/feature-style';\nimport { Store } from '@ngrx/store';\n\n\n\n@Injectable()\nexport class FeaturesEffects {\n\n  convertColorToFeatureMapping$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(FeaturesActions.setClassColorMapping),\n      map(action => action.classColorMapping),\n      concatLatestFrom(() => [\n        this.store.select(UiSelectors.selectAnnotationStrokeWidth)\n      ]),\n      map(([classColorMapping, strokeWidth]) =>\n        this.featureStyleService.createFeatureStyleMapping(classColorMapping, DEFAULT_TRANSPARENT_FILL, strokeWidth)\n      ),\n      map(featureStyleMapping => FeaturesActions.setFeatureStyleMapping({ featureStyleMapping }))\n    );\n  });\n\n  // update feature style mapping when annotation\n  // stroke width was changed\n  updateFeatureStyleMapping$ = createEffect(() => {\n    return this.actions$.pipe(\n      ofType(UiActions.setAnnotationStrokeWidth),\n      map(action => action.annotationStrokeWidth),\n      concatLatestFrom(() => [\n        this.store.select(FeaturesSelectors.selectFeatureStyleMapping)\n      ]),\n      map(([annotationStrokeWidth, featureStyleMapping]) =>\n        this.featureStyleService.updateFeatureStyleMapping(featureStyleMapping, DEFAULT_TRANSPARENT_FILL, annotationStrokeWidth)\n      ),\n      map(featureStyleMapping => FeaturesActions.setFeatureStyleMapping({ featureStyleMapping }))\n    );\n  });\n\n  constructor(\n    private readonly actions$: Actions,\n    private readonly store: Store,\n    private readonly featureStyleService: FeatureStyleService,\n  ) {}\n}\n","export function compareDistinct<T>(prev: T[], curr:T[]): boolean {\n  return prev.length === curr.length && prev.every((val, index) => val === curr[index]);\n}\n","import Tile from 'ol/Tile';\n\nexport interface PixelMapTileRequesterInterface {\n  tileLoadFunction(tile: Tile): void;\n}\n\nexport interface ChannelClassMapping {\n  class_value: string;\n  number_value: number;\n  name: string;\n}\n\nexport interface PixelMapInput {\n  tileSize: number;\n  tileRequesters: PixelMapTileRequesterInterface[];\n  channelClassMapping?: ChannelClassMapping[];\n}\n\nexport interface PixelMapUpdate {\n  channels: number[];\n}\n\nexport interface OpacityChange {\n  channel: number;\n  opacity: number;\n}\n\nexport interface ZoomToLevel {\n  level: number;\n}\n\nexport const DEFAULT_LAYER_OPACITY = 0.5;\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { DEFAULT_LAYER_OPACITY, OpacityChange, PixelMapInput } from '../../models/pixelmap';\nimport { MatSliderDragEvent } from '@angular/material/slider';\n\n@Component({\n  selector: 'svm-pixel-map-opacity-menu',\n  templateUrl: './pixel-map-opacity-menu.component.html',\n  styleUrls: ['./pixel-map-opacity-menu.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PixelMapOpacityMenuComponent {\n  public pixelMapInput = input.required<PixelMapInput>();\n\n  public channelOpacityChanged = output<OpacityChange>();\n\n  public readonly DEFAULT_OPACITY = DEFAULT_LAYER_OPACITY;\n\n  public onLayerChannelOpacityChanged(channel: number, event: MatSliderDragEvent): void {\n    this.channelOpacityChanged.emit({\n      channel,\n      opacity: event.value,\n    });\n  }\n}\n","@if (pixelMapInput() && pixelMapInput().tileRequesters?.length) {\n  <mat-card class=\"svm-pixel-map-controls\">\n    @if (pixelMapInput().channelClassMapping) {\n      @for (channel of pixelMapInput().channelClassMapping; track $index; let i = $index) {\n        <div class=\"opacity-container\">\n          <mat-label class=\"label-text\">{{channel.name}}</mat-label>\n          <mat-slider color=\"primary\" min=\"0\" max=\"1\" step=\"0.1\" discrete (click)=\"$event.stopPropagation()\">\n            <input matSliderThumb [value]=\"DEFAULT_OPACITY\" (dragEnd)=\"onLayerChannelOpacityChanged(i, $event)\">\n          </mat-slider>\n        </div>\n      }\n    }\n    @else {\n      @for (tileRequester of pixelMapInput().tileRequesters; track $index; let i = $index) {\n        <div class=\"opacity-container\">\n          <mat-label class=\"label-text\">Channel: {{tileRequester.channel}}</mat-label>\n          <mat-slider color=\"primary\" min=\"0\" max=\"1\" step=\"0.1\" discrete (click)=\"$event.stopPropagation()\">\n            <input matSliderThumb [value]=\"DEFAULT_OPACITY\" (dragEnd)=\"onLayerChannelOpacityChanged(i, $event)\">\n          </mat-slider>\n        </div>\n      }\n    }\n  </mat-card>\n}\n","import { Directive, HostListener, input, output } from '@angular/core';\n\n@Directive({\n  selector: '[svmCloseElement]'\n})\nexport class CloseElementDirective {\n  public open = input<boolean>(false);\n  public closeElement = output<void>();\n  private isOutSide = true;\n\n  @HostListener('window:click')\n  public onMouseClick(): void {\n    if (this.open() && this.isOutSide) {\n      this.closeElement.emit();\n    }\n  }\n\n  @HostListener('mouseenter')\n  public onMouseEnter(): void {\n    this.isOutSide = false;\n  }\n\n  @HostListener('mouseleave')\n  public onMouseLeave(): void {\n    this.isOutSide = true;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  input,\n  model,\n  OnDestroy,\n  output,\n  ViewChild\n} from '@angular/core';\nimport {\n  DrawType,\n  InteractionType,\n  ToolbarInteractionType,\n} from '../../models/interaction';\nimport { AfterViewInit } from '@angular/core';\nimport { MatMenuTrigger } from \"@angular/material/menu\";\nimport { MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { Subject, takeUntil } from 'rxjs';\nimport { OpacityChange, PixelMapInput } from '../../models/pixelmap';\n\n@Component({\n  selector: 'svm-toolbar',\n  templateUrl: './toolbar.component.html',\n  styleUrls: ['./toolbar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ToolbarComponent implements AfterViewInit, OnDestroy {\n  public renderHideNavigationButton = input<boolean>();\n  public activeTool = model<ToolbarInteractionType>(InteractionType.Move);\n  public allowedTools = input<ToolbarInteractionType[] | undefined>(undefined);\n  public isExaminationClosed = input<boolean | undefined>(undefined);\n\n  public pixelMapInput = input.required<PixelMapInput>();\n  public annotationStrokeWidth = input.required<number>();\n\n  public selectedTool = output<ToolbarInteractionType>();\n  public toggleAppNavigation = output<void>();\n  public channelOpacityChanged = output<OpacityChange>();\n  public strokeWidthChanged = output<number>();\n\n  public allowedToolsSet = computed<Set<ToolbarInteractionType>>(() => {\n    const allowedTools = this.allowedTools();\n    return new Set<ToolbarInteractionType>(allowedTools);\n  });\n\n  private destroy$ = new Subject();\n\n  public navigationHidden = false;\n  public annotationClassesPalettesMenuVisible = false;\n  public pixelMapOpacityMenuVisible = false;\n\n  readonly DrawType = DrawType;\n  readonly InteractionType = InteractionType;\n\n  @ViewChild('hideNavigation') hideNavigationButton!: ElementRef;\n  @ViewChild('annotationClassesPalettesTrigger') annotationTrigger: MatMenuTrigger;\n  @ViewChild('pixelMapOpacityTrigger') pixelMapTrigger: MatMenuTrigger;\n\n  public ngAfterViewInit(): void {\n    this.hideNavigationButton.nativeElement.style.display = this.renderHideNavigationButton() ? 'block' : 'none';\n    this.annotationTrigger.menuOpened.pipe(takeUntil(this.destroy$)).subscribe(() =>\n      this.annotationClassesPalettesMenuVisible = true\n    );\n    this.annotationTrigger.menuClosed.pipe(takeUntil(this.destroy$)).subscribe(() =>\n      this.annotationClassesPalettesMenuVisible = false\n    );\n    this.pixelMapTrigger.menuOpened.pipe(takeUntil(this.destroy$)).subscribe(() =>\n      this.pixelMapOpacityMenuVisible = true\n    );\n    this.pixelMapTrigger.menuClosed.pipe(takeUntil(this.destroy$)).subscribe(() =>\n      this.pixelMapOpacityMenuVisible = false\n    );\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next(null);\n  }\n\n  public onToggleSelectionChange(event: MatButtonToggleChange): void {\n    this.activeTool.set(event.value);\n    this.selectedTool.emit(this.activeTool());\n  }\n\n  public toggleNavigation() {\n    this.navigationHidden = !this.navigationHidden;\n    this.toggleAppNavigation.emit();\n  }\n\n  public annotationStrokeWidthSliderChanged(value: number): void {\n    this.strokeWidthChanged.emit(value);\n  }\n\n  // isCurrentAnnotationColorPalette(annotationPalette: AnnotationPalette): boolean {\n  //   const index = this.featureStyleService.getAnnotationPalettes().indexOf(annotationPalette);\n  //   return index === this.featureStyleService.getAnnotationPaletteIndex();\n  // }\n\n  // activateAnnotationColorPalette(annotationPalette: AnnotationPalette, $event: MouseEvent): void {\n  //   $event.stopPropagation();\n  //   const index = this.featureStyleService.getAnnotationPalettes().indexOf(annotationPalette);\n  //   this.featureStyleService.setAnnotationPaletteIndex(index);\n  // }\n\n  public onClosePalette(): void {\n    if (this.annotationTrigger.menuOpen) {\n      this.annotationTrigger.closeMenu();\n    }\n  }\n\n  public onCloseOpacity(): void {\n    if (this.pixelMapTrigger.menuOpen) {\n      this.pixelMapTrigger.closeMenu();\n    }\n  }\n}\n","<div class=\"annotation-toggles\">\n  <div #hideNavigation>\n    <mat-button-toggle-group\n      vertical=\"false\"\n      hideSingleSelectionIndicator\n      [value]=\"navigationHidden\">\n      <mat-button-toggle\n        class=\"toggle-blue\"\n        (click)=\"toggleNavigation()\"\n        matTooltip=\"Show / hide navigation panels\">\n        <mat-icon>{{ navigationHidden ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\n      </mat-button-toggle>\n    </mat-button-toggle-group>\n  </div>\n  <mat-button-toggle-group\n    vertical=\"false\"\n    hideSingleSelectionIndicator\n    matTooltip=\"Examination is closed, annotation drawing is not possible!\"\n    [matTooltipDisabled]=\"!isExaminationClosed()\"\n    [value]=\"activeTool()\"\n    (change)=\"onToggleSelectionChange($event)\">\n    <mat-button-toggle\n      data-cy=\"annotation-move-button\"\n      class=\"toggle-blue\"\n      [value]=\"InteractionType.Move\"\n      [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(InteractionType.Move) : false\"\n      matTooltip=\"Move\"\n      [matTooltipPosition]=\"isExaminationClosed() ? 'left' : 'below'\">\n      <mat-icon class=\"material-icons-outlined\">back_hand</mat-icon>\n    </mat-button-toggle>\n    <mat-button-toggle\n      data-cy=\"annotation-point-button\"\n      class=\"toggle-blue\"\n      [value]=\"DrawType.Point\"\n      [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(DrawType.Point) : false\"\n      matTooltip=\"Create point annotation\"\n      [matTooltipDisabled]=\"isExaminationClosed()\">\n      <svg\n        width=\"24\"\n        height=\"24\"\n        fill=\"currentColor\"\n        viewBox=\"0 0 24 24\">\n        <circle\n          r=\"6\"\n          cx=\"12\"\n          cy=\"12\"\n          fill=\"currentColor\"></circle>\n      </svg>\n    </mat-button-toggle>\n    <mat-button-toggle\n      data-cy=\"annotation-circle-button\"\n      class=\"toggle-blue\"\n      [value]=\"DrawType.Circle\"\n      [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(DrawType.Circle) : false\"\n      matTooltip=\"Draw circular annotation\"\n      [matTooltipDisabled]=\"isExaminationClosed()\"\n      data-testid=\"tool-circle\">\n      <svg\n        width=\"24\"\n        height=\"24\"\n        fill=\"currentColor\"\n        viewBox=\"0 0 24 24\">\n        <path d=\"M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\"></path>\n      </svg>\n    </mat-button-toggle>\n    <mat-button-toggle\n      data-cy=\"annotation-rectangle-button\"\n      class=\"toggle-blue\"\n      [value]=\"DrawType.Rectangle\"\n      [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(DrawType.Rectangle) : false\"\n      matTooltip=\"Draw rectangular annotation\"\n      [matTooltipDisabled]=\"isExaminationClosed()\">\n      <svg\n        width=\"24\"\n        height=\"24\"\n        fill=\"currentColor\"\n        viewBox=\"0 0 24 24\">\n        <path d=\"M18,18H6V6H18M18,4H6A2,2 0 0,0 4,6V18A2,2 0 0,0 6,20H18A2,2 0 0,0 20,18V6C20,4.89 19.1,4 18,4Z\"></path>\n      </svg>\n    </mat-button-toggle>\n    <mat-button-toggle\n      data-cy=\"annotation-polygon-button\"\n      class=\"toggle-blue\"\n      [value]=\"DrawType.Polygon\"\n      [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(DrawType.Polygon) : false\"\n      matTooltip=\"Draw polygonal annotation\"\n      [matTooltipDisabled]=\"isExaminationClosed()\">\n      <mat-icon class=\"material-icons-outlined\">linear_scale</mat-icon>\n    </mat-button-toggle>\n    <mat-button-toggle\n      data-cy=\"annotation-polygon-alternative-button\"\n      class=\"toggle-blue\"\n      [value]=\"DrawType.PolygonAlternative\"\n      [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(DrawType.PolygonAlternative) : false\"\n      matTooltip=\"Draw polygon annotation via multiple clicks\"\n      [matTooltipDisabled]=\"isExaminationClosed()\">\n      <mat-icon class=\"material-icons-outlined\">hexagon</mat-icon>\n    </mat-button-toggle>\n    @if (false) {\n      <mat-button-toggle\n        class=\"toggle-blue\"\n        [value]=\"DrawType.LineString\"\n        [disabled]=\"allowedToolsSet().size ? !allowedToolsSet().has(DrawType.LineString) : false\"\n        matTooltip=\"Use ruler to measure\">\n        <!-- source of image: https://www.svgrepo.com/svg/137569/scale -->\n        <svg\n          width=\"24\"\n          height=\"24\"\n          fill=\"currentColor\"\n          viewBox=\"0 0 203.544 203.544\">\n          <path\n            style=\"fill:#010002;\"\n            d=\"M41.717,0L0.002,41.722l161.821,161.821l41.719-41.719L41.717,0z M41.717,8.049l153.78,153.776\n        l-33.673,33.673l-4.452-4.459l23.245-23.255c0.92-0.913,0.92-2.391,0-3.303c-0.913-0.913-2.391-0.923-3.303,0l-23.255,23.245\n        l-7.233-7.226l14.974-14.977c0.916-0.913,0.916-2.394,0-3.307c-0.92-0.923-2.387-0.923-3.307,0l-14.977,14.97l-5.973-5.98\n        l14.974-14.967c0.905-0.913,0.905-2.405,0-3.314c-0.923-0.913-2.405-0.913-3.321,0l-14.967,14.967l-5.73-5.726l14.97-14.97\n        c0.916-0.913,0.916-2.391,0-3.303c-0.913-0.923-2.391-0.923-3.31,0l-14.974,14.97l-6.471-6.488l23.252-23.245\n        c0.913-0.923,0.913-2.405,0-3.314c-0.923-0.913-2.398-0.913-3.314,0l-23.248,23.255l-4.477-4.481l15.729-15.718\n        c0.913-0.913,0.913-2.391-0.011-3.314c-0.909-0.913-2.387-0.913-3.303,0l-15.725,15.729l-5.977-5.98l15.722-15.729\n        c0.916-0.913,0.916-2.391,0-3.303c-0.913-0.923-2.391-0.923-3.303,0l-15.729,15.718l-5.726-5.726l15.722-15.718\n        c0.916-0.923,0.916-2.401,0-3.314c-0.916-0.913-2.398-0.913-3.31,0l-15.725,15.718l-6.546-6.546L106,93.147\n        c0.913-0.913,0.905-2.391-0.011-3.303c-0.913-0.913-2.394-0.913-3.303-0.011l-23.255,23.259l-7.226-7.229l14.967-14.977\n        c0.916-0.913,0.916-2.391-0.011-3.303c-0.902-0.923-2.384-0.913-3.296,0l-14.974,14.967l-5.984-5.98l14.977-14.967\n        c0.905-0.913,0.905-2.401,0-3.303c-0.916-0.923-2.394-0.923-3.307-0.011L59.611,93.265l-5.73-5.737l14.963-14.967\n        c0.92-0.913,0.913-2.391,0-3.314c-0.905-0.909-2.387-0.909-3.303,0L50.575,84.225l-6.481-6.474l23.255-23.259\n        c0.905-0.913,0.905-2.401-0.004-3.314c-0.916-0.913-2.398-0.913-3.314,0L40.786,74.433l-4.47-4.477l15.718-15.718\n        c0.913-0.913,0.913-2.391,0-3.303c-0.916-0.923-2.394-0.923-3.314,0L32.999,66.653l-5.973-5.977l15.718-15.718\n        c0.916-0.923,0.916-2.401,0-3.314c-0.913-0.913-2.391-0.913-3.31,0L23.722,57.362l-5.737-5.726l15.722-15.729\n        c0.916-0.902,0.916-2.384,0-3.303c-0.916-0.913-2.394-0.913-3.307,0L14.672,48.332l-6.617-6.628L41.717,8.049z\"></path>\n        </svg>\n      </mat-button-toggle>\n    }\n  </mat-button-toggle-group>\n  <mat-button-toggle-group\n    hideSingleSelectionIndicator\n    [value]=\"annotationClassesPalettesMenuVisible\">\n    <mat-button-toggle\n      #annotationClassesPalettesTrigger=\"matMenuTrigger\"\n      class=\"toggle-annotation-classes-palettes-menu\"\n      matTooltip=\"Annotation Stroke Width\"\n      [matMenuTriggerFor]=\"annotationClassesPalettesMenu\"\n      [value]=\"true\"\n      (click)=\"$event.stopPropagation()\">\n      <mat-icon>border_color</mat-icon>\n      <mat-icon>{{ annotationClassesPalettesMenuVisible ? 'expand_more' : 'chevron_right' }}</mat-icon>\n    </mat-button-toggle>\n  </mat-button-toggle-group>\n  <mat-menu\n    #annotationClassesPalettesMenu=\"matMenu\"\n    yPosition=\"below\"\n    class=\"annotationClassesPalettesMenu\"\n    hasBackdrop=\"false\">\n    <div\n      svmCloseElement\n      class=\"annotation-slider-padding\"\n      [open]=\"annotationClassesPalettesMenuVisible\"\n      (closeElement)=\"onClosePalette()\">\n      <mat-slider class=\"annotationStrokeWidthSlider\"\n                  min=\"1\"\n                  max=\"6\"\n                  step=\"1\"\n                  color=\"primary\"\n                  showTickMarks\n                  (click)=\"$event.stopPropagation()\">\n                  <input\n                    matSliderThumb\n                    [value]=\"annotationStrokeWidth()\"\n                    (valueChange)=\"annotationStrokeWidthSliderChanged($event)\" />\n      </mat-slider>\n    </div>\n  </mat-menu>\n  <mat-button-toggle-group [ngStyle]=\"{'visibility': pixelMapInput() ? 'visible' : 'collapse'}\" [value]=\"pixelMapOpacityMenuVisible\">\n    <mat-button-toggle\n      #pixelMapOpacityTrigger=\"matMenuTrigger\"\n      class=\"toggle-annotation-classes-palettes-menu\"\n      matTooltip=\"Pixelmap channel opacity\"\n      [matMenuTriggerFor]=\"pixelMapOpacityMenu\"\n      [value]=\"true\"\n      (click)=\"$event.stopPropagation()\">\n      <mat-icon>flip_to_back</mat-icon>\n      <mat-icon>{{ pixelMapOpacityMenuVisible ? 'expand_more' : 'chevron_right' }}</mat-icon>\n    </mat-button-toggle>\n  </mat-button-toggle-group>\n  <mat-menu\n    #pixelMapOpacityMenu=\"matMenu\"\n    class=\"pixelMapOpacityMenu\"\n    yPosition=\"below\"\n    hasBackdrop=\"false\">\n    <div\n      svmCloseElement\n      [open]=\"pixelMapOpacityMenuVisible\"\n      (closeElement)=\"onCloseOpacity()\">\n      <svm-pixel-map-opacity-menu\n        [pixelMapInput]=\"pixelMapInput()\"\n        (channelOpacityChanged)=\"channelOpacityChanged.emit($event)\">\n      </svm-pixel-map-opacity-menu>\n    </div>\n  </mat-menu>\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class MapIdService {\n  /**\n   * The current id\n   */\n  private id: string;\n\n  // constructor() {}\n\n  /**\n   * Get Id of the map, default 'map'\n   */\n  getId(): string {\n    return this.id;\n  }\n\n  /**\n   * Set Id\n   */\n  setId(id: string = null) {\n    this.id = id;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Control } from 'ol/control';\nimport OlMap from 'ol/Map';\nimport { MapIdService } from './map-id.service';\nimport { defaults, DragPan } from 'ol/interaction';\nimport { noModifierKeys } from 'ol/events/condition';\nimport { Kinetic } from 'ol';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MapService {\n  /**\n   * List of Openlayer map objects [ol.Map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)\n   */\n  private olMaps = new Map<string, OlMap>();\n  private usedImageSources = new Map<string, Array<string>>();\n\n  /**\n   * Create an empty map\n   *\n   * @param id map id\n   * @returns [ol.Map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html) the map\n   */\n  private createMap(id: string): OlMap {\n    const map = new OlMap({\n      target: id,\n      controls: new Array<Control>(),\n      interactions: defaults({ dragPan: false })\n        .extend([\n          new DragPan({\n            condition: noModifierKeys,\n            // default kinetic values from openlayers\n            // found under: node_modules/ol/interaction.js line 84\n            kinetic: new Kinetic(-0.005, 0.05, 100)\n          })\n        ])\n    });\n    return map;\n  }\n\n  /**\n   * Get a map. If it doesn't exist it will be created.\n   *\n   * @param id id of the map or an objet with a getId method (from mapid service), default 'map'\n   */\n  getMap(id: string | MapIdService): OlMap | undefined {\n    id = (id instanceof MapIdService ? id.getId() : id) || 'map';\n\n    // Create map if not exist\n    if (!this.olMaps.has(id)) {\n      this.olMaps.set(id, this.createMap(id));\n      this.usedImageSources.set(id, []);\n    }\n    // return the map\n    return this.olMaps.get(id);\n  }\n\n  getImageSources(id: string | MapIdService): Array<string> | undefined {\n    id = (id instanceof MapIdService ? id.getId() : id) || 'map';\n\n    // return the image source ids\n    return this.usedImageSources.get(id);\n  }\n\n  setImageSources(mapId: string | MapIdService, sourceId: string) {\n    mapId = mapId instanceof MapIdService ? mapId.getId() : mapId;\n\n    this.usedImageSources.set(mapId, [sourceId]);\n  }\n\n  /** Get all maps\n   * NB: to access the complete list of maps you should use the ngAfterViewInit() method to have all maps instanced.\n   *\n   * @return the list of maps\n   */\n  getMaps(): Map<string, OlMap> {\n    return this.olMaps;\n  }\n\n  /** Get all maps\n   * NB: to access the complete list of maps you should use the ngAfterViewInit() method to have all maps instanced.\n   *\n   * @return array of maps\n   */\n  getArrayMaps(): Array<OlMap> {\n    return Object.values(this.olMaps.values());\n  }\n}\n","// import { InfoBar } from './ui';\n\nexport const PROJECTION_KEY = 'pixels';\nexport const PROJECTION_M_TO_NM = 1e9; // 1000000000.0  - from meters to nanometers\nexport const PROJECTION_NM_TO_M = 1e-9;  // 0.000000001 - from nm to m\n// used in ext-overview\nexport const ZOOMBOX_ID = 'zoombox';\nexport const VIEW_MOVED_BY = 'movedBy';\n\nexport const NPP_MIN_RANGE_FACTOR = 0.75;\nexport const NPP_MAX_RANGE_FACTOR = 1.5;\n","import { TileDebug, XYZ } from 'ol/source';\nimport TileGrid from 'ol/tilegrid/TileGrid';\nimport { PROJECTION_KEY } from '../models/types';\nimport { Slide } from '../models/slide';\n\n/**\n *\n */\nexport class SlideSourceLoader {\n  //public id: string; // slide id\n  private static createTileGrid(slide: Slide): TileGrid {\n    if (!slide.imageInfo.width || !slide.imageInfo.height) {\n      throw new Error('Unable to load images size');\n    }\n\n    const minZoom = slide.imageInfo.resolutions.length\n      - slide.imageInfo.numberOfLevels\n      - (slide.resolver.hasArtificialLevel ? 1 : 0)\n      - (slide.imageInfo.numberOfOverZoomLevels - 1) ?? 0;\n    const tileGrid = new TileGrid({\n      resolutions: slide.imageInfo.resolutions,\n      extent: [0, -slide.imageInfo.height, slide.imageInfo.width, 0],\n      origin: [0, 0],\n      tileSizes: slide.imageInfo.tileSizes,\n      minZoom,\n    });\n\n    return tileGrid;\n  }\n\n  public static createXYZSource(slide: Slide): XYZ {\n    const tileGrid = this.createTileGrid(slide);\n\n    const source = new XYZ({\n      tileGrid,\n      projection: PROJECTION_KEY,\n      url: 'DUMMY_URL', // there needs to be something set here to use tileLoadFn\n      transition: 0,\n    });\n\n    if (slide.resolver.tileResolverFn) {\n      source.setTileUrlFunction(slide.resolver.tileResolverFn);\n    } else if (slide.resolver.tileLoaderFn) {\n      source.setTileLoadFunction(slide.resolver.tileLoaderFn);\n    } else {\n      throw new Error('No function to load tiles set. \\n Implement either tileResolverFn or tileLoadFn');\n    }\n\n    return source;\n  }\n\n  // create an tile grid with outlines and coordinates for debugging\n  public static createTileDebug(slide: Slide): TileDebug {\n    const tileGrid = this.createTileGrid(slide);\n\n    const debugSource = new TileDebug({\n      tileGrid,\n      projection: PROJECTION_KEY,\n    });\n\n    return debugSource;\n  }\n}\n","import { Extent } from 'ol/extent';\n\n// DO NOT REMOVE @dynamic comment: fixes production build bug  - https://github.com/ng-packagr/ng-packagr/issues/641\n\n// @dynamic\nexport class AxisConverter {\n  public static invertYAxisOfArray(coordinates: number[][]): number[][] {\n    return coordinates.map(c => this.invertYAxis(c));\n  }\n\n  public static invertYAxis(coordinates: number[]): number[] {\n    if (coordinates.length !== 2) {\n      throw new Error('AxisConverter unexpected Array length');\n    }\n    return [coordinates[0], -coordinates[1]];\n  }\n\n  public static invertYAxisOfExtent(extent: Extent): Extent {\n    // inverts negative y values\n    const tmp: Extent = [\n      extent[0],\n      -extent[1],\n      extent[2],\n      -extent[3]\n    ];\n    // extent must be reordered to fit the extent requirements\n    // [minX, minY, maxX, maxY]\n    const reordered: Extent = [\n      Math.min(tmp[0], tmp[2]),\n      Math.min(tmp[1], tmp[3]),\n      Math.max(tmp[2], tmp[0]),\n      Math.max(tmp[3], tmp[1])\n    ];\n    return reordered;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport {\n  PROJECTION_M_TO_NM\n} from '../models/types';\nimport { Collection, View } from 'ol';\nimport { Circle, Geometry, Point, Polygon } from 'ol/geom';\nimport BaseLayer from 'ol/layer/Base';\nimport { Extent } from 'ol/extent';\nimport TileLayer from 'ol/layer/Tile';\nimport { Coordinate } from 'ol/coordinate';\nimport { AxisConverter } from '../tools/axis-converter';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ViewerCalculationsService {\n\n  private calculateNppBase(view: View): number {\n    return view.getProjection().getMetersPerUnit() * PROJECTION_M_TO_NM;\n  }\n\n  nppForView(view: View): number {\n    const nppBase = this.calculateNppBase(view);\n    const npp = nppBase * view.getResolution();\n    return npp;\n  }\n\n  nppExtrema(view: View): number[] {\n    const nppBase = this.calculateNppBase(view);\n    const nppMin = view.getMinResolution() * nppBase;\n    const nppMax = view.getMaxResolution() * nppBase;\n    return [nppMin, nppMax];\n  }\n\n  getImageExtentFromSourceLayers(layerArray: Collection<BaseLayer>): Extent {\n    const tileLayer = layerArray.getArray().find(elem => elem instanceof TileLayer);\n    return tileLayer.getProperties()?.['source'].getTileGrid().getExtent();\n  }\n\n  isGeometryInExtent(geometry: Geometry, extent: Extent): boolean {\n    const featureExtent = geometry.getExtent();\n    return featureExtent[0] >= extent[0]\n      && featureExtent[1] >= extent[1]\n      && featureExtent[2] <= extent[2]\n      && featureExtent[3] <= extent[3];\n  }\n\n  isCoordinateInExtent(coordinates: Coordinate, extent: Extent): boolean {\n    return coordinates[0] >= extent[0]\n      && coordinates[1] >= extent[1]\n      && coordinates[0] <= extent[2]\n      && coordinates[1] <= extent[3];\n  }\n\n  rearrangeOutOfBoundsCoordinate(coordinate: Coordinate, extent: Extent): Coordinate {\n    coordinate[0] = coordinate[0] <= extent[0] ? extent[0] : coordinate[0] >= extent[2] ? extent[2] : coordinate[0];\n    coordinate[1] = coordinate[1] <= extent[1] ? extent[1] : coordinate[1] >= extent[3] ? extent[3] : coordinate[1];\n\n    return coordinate;\n  }\n\n  rearrangeOutOfBoundsPolygonVertices(polygon: Polygon, extent: Extent): Polygon {\n    const newPolygon = polygon.clone();\n    const coordinates = newPolygon.getCoordinates();\n\n    for (let i = 0; i < coordinates.length; i++) {\n      for (let j = 0; j < coordinates[i].length; j++) {\n        if (!this.isCoordinateInExtent(coordinates[i][j], extent)) {\n          coordinates[i][j] = this.rearrangeOutOfBoundsCoordinate(coordinates[i][j], extent);\n        }\n      }\n    }\n\n    newPolygon.setCoordinates(coordinates);\n\n    return newPolygon;\n  }\n\n  centroidForGeometry(geometry: Geometry) : Coordinate {\n    let result: Coordinate;\n    if (geometry instanceof Circle) {\n      result = AxisConverter.invertYAxis((geometry as Circle).getCenter().map(p => Math.round(p)));\n    } else if (geometry instanceof Point) {\n      result = AxisConverter.invertYAxis((geometry as Point).getCoordinates().map(p => Math.round(p)));\n    } else if (geometry instanceof Polygon) {\n      const invertedCoordinates = AxisConverter.invertYAxisOfArray(geometry.getCoordinates()[0]);\n      result = this.centroidForCoordinates(invertedCoordinates);\n    } else {\n      throw new Error('Invalid geometry object.');\n    }\n    return result;\n  }\n\n  centroidForCoordinates(coordinates: number[][]): number[] {\n    const centroid = [0, 0];\n    let area = 0, x0 = 0, y0 = 0, x1 = 0, y1 = 0, tempArea = 0;\n\n    for (let i = 0; i < coordinates.length - 1; ++i) {\n      x0 = coordinates[i][0];\n      y0 = coordinates[i][1];\n      x1 = coordinates[i + 1][0];\n      y1 = coordinates[i + 1][1];\n      tempArea = x0 * y1 - x1 * y0;\n      area += tempArea;\n      centroid[0] = centroid[0] + (x0 + x1) * tempArea;\n      centroid[1] = centroid[1] + (y0 + y1) * tempArea;\n    }\n\n    // we calculate the last partial area outside the loop\n    // to avoid expensive modulo divisions\n    x0 = coordinates[coordinates.length - 1][0];\n    y0 = coordinates[coordinates.length - 1][1];\n    x1 = coordinates[0][0];\n    y1 = coordinates[0][1];\n    tempArea = x0 * y1 - x1 * y0;\n    area += tempArea;\n    centroid[0] = centroid[0] + (x0 + x1) * tempArea;\n    centroid[1] = centroid[1] + (y0 + y1) * tempArea;\n\n    area = area * 0.5;\n    centroid[0] = Math.round(centroid[0] / (6 * area));\n    centroid[1] = Math.round(centroid[1] / (6 * area));\n\n    return centroid;\n  }\n\n  polygonIsSelfIntersecting(polygon: Polygon): boolean {\n    const coordinates = polygon.getCoordinates()[0];\n    const partialSections = [];\n    for (let i = 0; i < coordinates.length - 1; i++) {\n      partialSections.push(coordinates[i], coordinates[i+1]);\n    }\n\n    for (let i = 0; i < partialSections.length - 1; i++) {\n      for (let j = 1; j < partialSections.length - 2; j++) {\n        const p1 = partialSections[i];\n        const p2 = partialSections[i + 1];\n        const p3 = partialSections[j];\n        const p4 = partialSections[j + 1];\n        if(this.checkLineIntersection(p1, p2, p3, p4)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  checkLineIntersection(p1c: Coordinate, p2c: Coordinate, p3c: Coordinate, p4c: Coordinate) : boolean {\n    // see https://stackoverflow.com/questions/13999249/uibezierpath-intersect/14301701#14301701\n    let denominator = (p4c[1] - p3c[1]) * (p2c[0] - p1c[0]) - (p4c[0] - p3c[0]) * (p2c[1] - p1c[1]);\n    let ua = (p4c[0] - p3c[0]) * (p1c[1] - p3c[1]) - (p4c[1] - p3c[1]) * (p1c[0] - p3c[0]);\n    let ub = (p2c[0] - p1c[0]) * (p1c[1] - p3c[1]) - (p2c[1] - p1c[1]) * (p1c[0] - p3c[0]);\n    if (denominator < 0) {\n      ua = -ua;\n      ub = -ub;\n      denominator = -denominator;\n    }\n    return (ua > 0.0 && ua <= denominator && ub > 0.0 && ub <= denominator);\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  HostListener,\n  input,\n  model,\n  OnDestroy,\n  OnInit,\n  output,\n} from '@angular/core';\n\nimport { Map, MapBrowserEvent, MapEvent, View } from 'ol';\nimport TileLayer from 'ol/layer/Tile';\nimport { getCenter } from 'ol/extent';\nimport { XYZ } from 'ol/source';\nimport Projection from 'ol/proj/Projection';\nimport { addProjection as olAddProjection } from 'ol/proj';\n\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { Slide } from '../../models/slide';\nimport { CurrentView, ViewObserver, ZoomView } from '../../models/ui';\nimport { PROJECTION_KEY, PROJECTION_NM_TO_M, VIEW_MOVED_BY } from '../../models/types';\nimport { SlideSourceLoader } from '../../services/slide-source';\nimport { ViewerCalculationsService } from '../../services/viewer-calculations.service';\nimport { AxisConverter } from '../../tools/axis-converter';\nimport { DoubleClickZoom, DragPan } from 'ol/interaction';\nimport { noModifierKeys } from 'ol/events/condition';\nimport { MouseButtonType } from '../../models/interaction';\n\n@Component({\n  selector: 'svm-viewer',\n  templateUrl: './viewer.component.html',\n  styleUrls: ['./viewer.component.scss'],\n  providers: [MapIdService],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ViewerComponent implements OnInit, AfterViewInit, OnDestroy {\n  public map: Map;\n  public layer: TileLayer<XYZ>;\n\n  public elementHeight = '100%';\n  public elementWidth = '100%';\n\n  public mapId = model<string>();\n\n  public slide = input<Slide, Slide>(undefined, {\n    transform: (val: Slide): Slide => {\n      if (val) {\n        this.initSlide(val);\n      } else {\n        this.clearSlide();\n      }\n      return val;\n    }\n  });\n\n  public updateViewer = input<number, number>(undefined, {\n    transform: (val: number): number => {\n      if (val !== undefined && this.map) {\n        // TODO: fix using timeout - this behavior depends on speed of host system (slow system could take longer than 200ms to register changes)\n        setTimeout(() => this.map.updateSize(), 200);\n      }\n      return val;\n    }\n  });\n\n  public zoomView = input<ZoomView, ZoomView>(undefined, {\n    transform: (val: ZoomView): ZoomView => {\n      if (val) {\n        this.updateMapByZoomView(val);\n      }\n      return val;\n    }\n  });\n\n  public readonly moveEnd = output<CurrentView>();\n  public readonly moveEndZoomView = output<ZoomView>();\n  public readonly doubleClick = output<MapBrowserEvent<UIEvent>>();\n\n  constructor(\n    private host: ElementRef,\n    private mapService: MapService,\n    private mapIdService: MapIdService,\n    private viewerCalculationsService: ViewerCalculationsService,\n  ) {\n  }\n\n  public ngOnInit(): void {\n    this.mapIdService.setId(this.mapId());\n    this.map = this.mapService.getMap(this.mapId());\n\n    if (!this.mapId()) {\n      this.mapId.set('map');\n    }\n    this.map.setTarget(this.host.nativeElement.firstElementChild);\n\n    this.addLeftAndRightMouseButtonToMove();\n\n    this.removeDoubleClickToZoomInteraction();\n\n    this.map.on('pointerdrag', (event: MapBrowserEvent<UIEvent>) => {\n      this.pointerDragEventCallback(event);\n    });\n    this.map.on('moveend', (event: MapEvent) => {\n      this.moveEndDragEventCallback(event);\n      this.moveEndEventCallback(event);\n    });\n    this.map.on('dblclick', (event: MapBrowserEvent<UIEvent>) => {\n      this.doubleClick.emit(event);\n    });\n  }\n\n  public ngAfterViewInit(): void {\n    /**\n     * on 'remount' we need to init the slide again\n     * to make the map layer fit inside the viewport\n     * TODO: find a more elegant way to solve this\n     * without running the whole re-initialization process\n     */\n    if (this.slide()) {\n      this.initSlide(this.slide());\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.clearSlide();\n\n    // TODO: do we need to remove event listeners?\n    // this.map.removeEventListener\n  }\n\n  // prevent the default context menu from opening\n  @HostListener('contextmenu', ['$event'])\n  public onRightClick(event: MouseEvent): void {\n    event.preventDefault();\n  }\n\n  private mouseInteractionCondition(event: MapBrowserEvent<UIEvent>): boolean {\n    return noModifierKeys(event)\n      && (\n        (event.originalEvent as MouseEvent)?.buttons === MouseButtonType.Left\n        || (event.originalEvent as MouseEvent)?.buttons === MouseButtonType.Right\n      );\n  }\n\n  public addLeftAndRightMouseButtonToMove(): void {\n    this.map.addInteraction(new DragPan({\n      condition: this.mouseInteractionCondition,\n    }));\n  }\n\n  public removeDoubleClickToZoomInteraction(): void {\n    const dblClick = this.map.getInteractions().getArray().find((interaction) => {\n      return interaction instanceof DoubleClickZoom;\n    });\n    this.map.removeInteraction(dblClick);\n  }\n\n  public updateMapByZoomView(v: ZoomView): void {\n    if (v.sender === ViewObserver.OverviewMap) {\n      this.map.getView().set(VIEW_MOVED_BY + ViewObserver[v.sender], true);\n      this.map.getView().fit(v.extent);\n      this.map.updateSize();\n    } else if (v.sender === ViewObserver.ZoomSlider) {\n      this.map.getView().set(VIEW_MOVED_BY + ViewObserver[v.sender], true);\n      this.map.getView().setResolution(v.resolution);\n      //this.map.getView().animate({ resolution: v.resolution, duration: 200 });\n      this.map.updateSize();\n    }\n  }\n\n  public pointerDragEventCallback(event: MapBrowserEvent<UIEvent>): void {\n    const extent = event.map.getView().calculateExtent(event.map.getSize());\n    const resolution = event.map.getView().getResolution();\n    this.moveEndZoomView.emit({\n      extent,\n      resolution: resolution,\n      sender: ViewObserver.MainMap,\n      receivers: [ViewObserver.OverviewMap]\n    });\n  }\n\n  public moveEndDragEventCallback(event: MapEvent): void {\n    const extent = event.map.getView().calculateExtent(event.map.getSize());\n    const resolution = event.map.getView().getResolution();\n\n    // alternative to using the ngrx store for view updates\n    // const overview = this.map.get('ext-overview') as ExtZoomSliderComponent;\n    // if(overview){\n    //   overview.updateZoomSlider({\n    //     receivers: [ViewObserver.ZoomSlider],\n    //     resolution,\n    //     sender: ViewObserver.MainMap,\n    //     extent,\n    //   });\n    // }\n\n    if (this.map.getView().get(VIEW_MOVED_BY + ViewObserver[ViewObserver.OverviewMap]) === true) {\n      // only update the zoom slider\n      this.moveEndZoomView.emit({\n        extent,\n        resolution,\n        sender: ViewObserver.MainMap,\n        receivers: [ViewObserver.ZoomSlider],\n      });\n      this.map.getView().set(VIEW_MOVED_BY + ViewObserver[ViewObserver.OverviewMap], false);\n    } else if (this.map.getView().get(VIEW_MOVED_BY + ViewObserver[ViewObserver.ZoomSlider]) === true) {\n      // only update the overview map\n      this.moveEndZoomView.emit({\n        extent,\n        resolution,\n        sender: ViewObserver.MainMap,\n        receivers: [ViewObserver.OverviewMap],\n      });\n      this.map.getView().set(VIEW_MOVED_BY + ViewObserver[ViewObserver.ZoomSlider], false);\n    } else {\n      // update both controls (native move on main map)\n      this.moveEndZoomView.emit({\n        extent,\n        resolution,\n        sender: ViewObserver.MainMap,\n        receivers: [ViewObserver.OverviewMap, ViewObserver.ZoomSlider],\n      });\n    }\n  }\n\n  public moveEndEventCallback(event: MapEvent): void {\n    const extent = AxisConverter.invertYAxisOfExtent(\n      event.map.getView().calculateExtent(event.map.getSize())\n    );\n    const view = event.map.getView();\n    const zoom = view.getZoom();\n    const nppCurrent = this.viewerCalculationsService.nppForView(view);\n    const [nppMin, nppMax] = this.viewerCalculationsService.nppExtrema(view);\n    const currentView: CurrentView = { extent, zoom, nppCurrent, nppMin, nppMax, nppBase: this.slide().imageInfo.npp };\n    this.moveEnd.emit(currentView);\n  }\n\n  // ngAfterViewInit(): void {\n  //   // this.slideContainer.nativeElement.id = this.targetId;\n  //   // this.map.setTarget(this.slideContainer.nativeElement);\n  //   // this.mapService.setImageSources(this.mapId, this.slideId);\n  //   // this.map.updateSize();\n  // }\n\n  public initSlide(slide: Slide): void {\n    if (!this.map) {\n      this.mapIdService.setId(this.mapId());\n      this.map = this.mapService.getMap(this.mapId());\n    }\n    this.mapService.setImageSources(this.mapId(), slide.slideId);\n    this.map.updateSize();\n    this.setNewSource(slide);\n  }\n\n  /* currently only used for Debugging */\n  //onMapClick(event: MapBrowserEvent<UIEvent>): void {\n  //  const curZoom = event.map.getView().getZoom();\n  //}\n\n  public setNewSource(slide: Slide): void {\n    this.mapService.setImageSources(this.mapId(), slide.slideId);\n\n    this.clearSlide();\n    const source = SlideSourceLoader.createXYZSource(slide);\n\n\n    this.layer = new TileLayer({\n      source,\n      // extent: projectionExtent\n      preload: Infinity,\n    });\n\n    // Use for showing the debug grid of the\n    // slide layer\n    // const debugLayer = new TileLayer({\n    //   source: SlideSourceLoader.createTileDebug(slide),\n    //   preload: Infinity\n    // });\n\n    this.map.addLayer(this.layer);\n    // Use for showing the debug grid of the\n    // slide layer\n    //this.map.addLayer(debugLayer);\n\n    const projectionCode = this.createPixelProjection(slide.imageInfo.npp);\n    const view = this.createView(source, projectionCode);\n\n    this.map.setView(view);\n    this.fitToExtend(source, this.map);\n    this.map.render();\n  }\n\n  public fitToExtend(source: XYZ, map: Map): void {\n    const extent = source.getTileGrid().getExtent();\n    this.map.getView().fit(extent, { size: map.getSize() });\n  }\n\n  public createView(source: XYZ, projectionCode: string): View {\n    const extent = source.getTileGrid().getExtent();\n    return new View({\n      resolutions: source.getTileGrid().getResolutions(),\n      extent,\n      center: getCenter(extent),\n      enableRotation: false,\n      constrainOnlyCenter: true,\n      showFullExtent: true,\n      projection: projectionCode,\n    });\n  }\n\n  public createPixelProjection(npp: number): string {\n    const projectionCode = PROJECTION_KEY;\n    const projection = new Projection({\n      code: PROJECTION_KEY,\n      units: 'pixels',\n      metersPerUnit: npp * PROJECTION_NM_TO_M,\n      getPointResolution: (resolution) => resolution,\n    });\n\n    olAddProjection(projection);\n    return projectionCode;\n  }\n\n  private clearSlide(): void {\n    if (this.layer) {\n      this.map.removeLayer(this.layer);\n    }\n    this.removeListeners('moveend');\n    this.removeListeners('pointerdrag');\n    this.removeListeners('dbclick');\n  }\n\n  private removeListeners(listenerType: string): void {\n    this.map.getListeners(listenerType)?.forEach(listener =>\n      this.map.removeEventListener(listenerType, listener)\n    );\n  }\n}\n","<div\n  #slide\n  class=\"svm-slide-background\"\n  [id]=\"mapId()\"\n  [style.width]=\"elementWidth\"\n  [style.height]=\"elementHeight\">\n</div>\n<ng-content></ng-content>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface ElementSize {\n  width: number;\n  height: number;\n}\n\n@Injectable()\nexport class ResizableElementService {\n  private elementSize$ = new BehaviorSubject<ElementSize | undefined>(\n    undefined\n  );\n\n  setStyle(e: ElementSize) {\n    this.elementSize$.next(e);\n  }\n\n  get style(): Observable<ElementSize> {\n    return this.elementSize$.asObservable();\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Host,\n  input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  output,\n} from '@angular/core';\n\nimport Feature from 'ol/Feature';\nimport { fromExtent } from 'ol/geom/Polygon';\nimport { getCenter, containsCoordinate, Extent } from 'ol/extent';\nimport { View, Map, MapBrowserEvent } from 'ol';\nimport { XYZ } from 'ol/source';\nimport { Style, Stroke, Fill } from 'ol/style';\nimport TileLayer from 'ol/layer/Tile';\nimport VectorLayer from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\n\nimport {\n  ElementSize,\n  ResizableElementService\n} from '../../services/resizable-element.service';\nimport { Slide } from '../../models/slide';\nimport { ViewObserver, ZoomView } from '../../models/ui';\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { PROJECTION_KEY, ZOOMBOX_ID } from '../../models/types';\nimport { SlideSourceLoader } from '../../services/slide-source';\n\nimport { filter } from 'rxjs/operators';\nimport { Observable, Subscription } from 'rxjs';\nimport { Geometry } from 'ol/geom';\n\n@Component({\n  selector: 'svm-ext-overview',\n  templateUrl: './ext-overview.component.html',\n  styleUrls: ['./ext-overview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExtOverviewComponent implements OnInit, OnDestroy, AfterViewInit {\n  public mapId = input<string>();\n\n  public slide = input<Slide, Slide>(undefined, {\n    transform: (val: Slide): Slide => {\n      if (val) {\n        this.initializeSource(val);\n      }\n      return val;\n    }\n  });\n\n  public zoomView = input<ZoomView, ZoomView>(undefined, {\n    transform: (val: ZoomView): ZoomView => {\n      if (val) {\n        this.updateBoundingBox(val);\n      }\n      return val;\n    }\n  });\n\n  public readonly zoomViewUpdated = output<ZoomView>();\n\n  private viewerHost: Map;\n  private overviewMap: Map;\n  private source: XYZ;\n\n  private elementSize$: Observable<ElementSize>;\n  private elementSizeSub$: Subscription;\n\n  private layer: TileLayer<XYZ>;\n  // rectangle indicating current viewport\n  private zoomBoxFeature: Feature<Geometry>;\n  // vector layer to draw viewport indicator on\n  private vectorLayer: VectorLayer<VectorSource>;\n\n  private readonly viewPadding = 15;\n\n  constructor(\n    private mapService: MapService,\n    @Host()\n    @Optional()\n    private mapIdService: MapIdService,\n    private elementRef: ElementRef,\n    @Host()\n    @Optional()\n    private sizeService: ResizableElementService,\n  ) {\n    this.elementSize$ = this.sizeService ? this.sizeService.style : null;\n  }\n\n  public ngOnInit(): void {\n    const target = this.elementRef.nativeElement.parentElement ? this.elementRef.nativeElement.firstElementChild : null;\n\n    this.overviewMap = new Map({\n      controls: [],\n      target: target,\n    });\n\n    this.overviewMap.getInteractions().forEach(i => {\n      i.setActive(false);\n    });\n\n    this.elementSizeSub$ = this.elementSize$?.pipe(\n      filter(p => p !== undefined),\n      filter(() => !!this.overviewMap),\n    ).subscribe((s) => {\n      this.updateSize(s.width, s.height);\n    });\n  }\n\n  public ngAfterViewInit(): void {\n    const id = this.mapIdService || this.mapId();\n    this.viewerHost = this.mapService.getMap(id);\n\n    // initialize on remount as setter runs before map layer can initialize\n    this.initializeSource(this.slide());\n  }\n\n  public ngOnDestroy(): void {\n    this.clearOverview();\n\n    if(this.elementSizeSub$) {\n      this.elementSizeSub$.unsubscribe();\n    }\n  }\n\n  public initializeSource(slide: Slide): void {\n    if (slide) {\n      this.source = SlideSourceLoader.createXYZSource(slide);\n      this.createInstanceFromSource(this.source);\n    } else {\n      this.source = undefined;\n      if (this.overviewMap) {\n        this.clearOverview();\n      }\n    }\n  }\n\n  private updateBoundingBox(zoomView: ZoomView) {\n    if (this.vectorLayer !== undefined && zoomView.receivers.includes(ViewObserver.OverviewMap)) {\n      this.zoomBoxFeature?.setGeometry(fromExtent(zoomView.extent));\n    }\n  }\n\n  private updateSize(width: number, height: number) {\n    if (this.overviewMap) {\n      this.overviewMap.getTargetElement().style.height\n        = `${height - this.viewPadding}px`;\n      this.overviewMap.getTargetElement().style.width\n        = `${width - this.viewPadding}px`;\n\n      this.overviewMap.setSize([width, height]);\n      this.overviewMap.updateSize();\n    }\n  }\n\n  private clearOverview(): void {\n    this.overviewMap.getControls().forEach(control => {\n      this.overviewMap.removeControl(control);\n    });\n    // we need to make a copy here to prevent reindexing of map layers\n    const layers = [...this.overviewMap.getLayers().getArray()];\n    layers.forEach((layer) => this.overviewMap.removeLayer(layer));\n\n    this.removeListeners('pointerdrag');\n    this.removeListeners('singleclick');\n  }\n\n  private createInstanceFromSource(source: XYZ) {\n    if (!this.viewerHost) { return; }\n\n    // view\n    this.clearOverview();\n    const extent = source.getTileGrid().getExtent();\n\n    this.overviewMap.setView(new View({\n      center: getCenter(extent),\n      extent: extent,\n      projection: PROJECTION_KEY,\n      enableRotation: false,\n      constrainResolution: true,\n      showFullExtent: true,\n      resolution: source.getTileGrid().getResolution(1),\n    }));\n\n    // events\n    this.overviewMap.on('pointerdrag', (event: MapBrowserEvent<UIEvent>) => this.dragZoomBox(event));\n    this.overviewMap.on('singleclick', (event: MapBrowserEvent<UIEvent>) => this.dragZoomBox(event));\n\n    // create tile and vector layer\n    this.layer = new TileLayer({\n      source,\n      preload: Infinity,\n    });\n    this.layer.getSource().refresh();\n\n    const darkStroke = new Style({\n      fill: new Fill({\n        color: [255, 255, 255, 0]\n      }),\n      stroke: new Stroke({\n        color: [255, 0, 0, 0.9],\n        width: 1,\n        //lineDash: [2,4]\n      }),\n    });\n    this.vectorLayer = new VectorLayer({\n      source: new VectorSource(),\n      style: [darkStroke],\n    });\n    this.vectorLayer.getSource().refresh();\n\n    this.vectorLayer.setVisible(true);\n    this.overviewMap.addLayer(this.layer);\n    this.overviewMap.addLayer(this.vectorLayer);\n\n    // create and add zoombox to vector layer\n    this.zoomBoxFeature = new Feature({ id: ZOOMBOX_ID, geometry: fromExtent(extent) });\n    this.zoomBoxFeature.setId(ZOOMBOX_ID);\n    this.vectorLayer.getSource().addFeature(this.zoomBoxFeature);\n\n    this.overviewMap.getView().fit(extent, { size: this.overviewMap.getSize() });\n    setTimeout(() => this.overviewMap.updateSize(), 200);\n  }\n\n  private dragZoomBox(event: MapBrowserEvent<UIEvent>): void {\n    const featureExtent = this.zoomBoxFeature?.getGeometry().getExtent();\n    if (featureExtent !== undefined) {\n      const featureCenter = getCenter(featureExtent);\n      const extent = this.source.getTileGrid().getExtent();\n      if (containsCoordinate(extent, event.coordinate)) {\n        // we are inside the extent so we have to adjust x an y\n        const deltaX = event.coordinate[0] - featureCenter[0];\n        const deltaY = event.coordinate[1] - featureCenter[1];\n        this.zoomBoxFeature?.getGeometry().translate(deltaX, deltaY);\n      } else {\n        // cursor ist outside the extent\n        let deltaX = 0, deltaY = 0;\n        if (event.coordinate[0] < extent[0] || event.coordinate[0] > extent[2]) {\n          // we left the x boundaries\n          deltaY = event.coordinate[1] - featureCenter[1];\n        }\n        if (event.coordinate[1] < extent[1] || event.coordinate[1] > extent[3]) {\n          // we left the y boundaries\n          deltaX = event.coordinate[0] - featureCenter[0];\n        }\n        if (deltaX != 0 && deltaY != 0) {\n          // we need to set it back to zero, if we are out of bounds in x and y direction\n          deltaX = 0;\n          deltaY = 0;\n        }\n        this.zoomBoxFeature?.getGeometry().translate(deltaX, deltaY);\n      }\n      this.emitZoomView(featureExtent);\n    }\n  }\n\n  public onMouseWheelEvent(event: WheelEvent) {\n    const featureExtent = this.zoomBoxFeature?.getGeometry()?.getExtent();\n\n    if (!featureExtent) { return; } //abort zoom if no slide loaded\n\n    if (event.deltaY < 0) {\n      // we do not want to go beyond layer zero; 1024px in each direction seems o be a good choice here\n      if ((Math.abs(featureExtent[2] - featureExtent[0]) > 1024\n        && Math.abs(featureExtent[3] - featureExtent[1]) > 1024)) {\n        // zoom in by 25%\n        this.zoomBoxFeature?.getGeometry().scale(0.75);\n        this.emitZoomView(featureExtent);\n      }\n    } else {\n      // zoom out by 25%\n      this.zoomBoxFeature?.getGeometry().scale(1.25);\n      this.emitZoomView(featureExtent);\n    }\n  }\n\n  private emitZoomView(featureExtent: Extent) {\n\n    this.viewerHost.getView().fit(featureExtent);\n    this.viewerHost.updateSize();\n\n    // this.zoomViewUpdated.emit({\n    //   extent: [\n    //     featureExtent[0],\n    //     featureExtent[1],\n    //     featureExtent[2],\n    //     featureExtent[3]\n    //   ],\n    //   resolution: this.overviewMap.getView().getResolution(),\n    //   sender: ViewObserver.OverviewMap,\n    //   receivers: [ViewObserver.MainMap],\n    // });\n  }\n\n  private removeListeners(listenerType: string): void {\n    this.overviewMap.getListeners(listenerType)?.forEach(listener =>\n      this.overviewMap.removeEventListener(listenerType, listener)\n    );\n  }\n}\n","<!--  (wheel)=\"onMouseWheelEvent($event)\" -->\n<div\n  class=\"svm-slide-background\"></div>\n<!-- <ng-content></ng-content> -->\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Host,\n  input,\n  Optional,\n} from '@angular/core';\nimport { ScaleLine } from 'ol/control';\nimport { Map } from 'ol';\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\n\n@Component({\n  selector: 'svm-scale-line',\n  templateUrl: './scale-line.component.html',\n  styleUrls: ['./scale-line.component.scss'],\n})\nexport class ScaleLineComponent implements AfterViewInit {\n  public mapId = input<string>();\n\n  private instance: ScaleLine;\n  private viewerHost: Map;\n\n  constructor(\n    private elementRef: ElementRef,\n    @Host()\n    @Optional()\n    private mapIdService: MapIdService,\n    private mapService: MapService\n  ) { }\n\n  ngAfterViewInit(): void {\n    // if control is outside of viewer component id has to be set\n    // if (this.mapId) {\n    //   this.viewerHost = this.mapService.getMap(this.mapId)\n    // } else if (this.viewerComponent) {\n    //   this.viewerHost = this.viewerComponent.map;\n    // } else {\n    //   throw new Error('No Map instance set in ScaleLineComponent')\n    // }\n    // // this.instance = new ScaleLine({ ...this, bar: true, className: 'z-high', target: this.targetId });\n    // this.instance = new ScaleLine();\n    // this.viewerHost.addControl(this.instance);\n    this.init();\n  }\n\n  init(): void {\n    const id = this.mapIdService || this.mapId();\n    this.viewerHost = this.mapService.getMap(id);\n\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const target = this.elementRef.nativeElement.parentElement\n      ? this.elementRef.nativeElement\n      : null;\n\n    this.instance = new ScaleLine({\n      // className: 'custom-scale-line .ol-scale-line .ol-scale-line-inner',\n      minWidth: 100,\n      target\n    });\n\n    this.viewerHost.addControl(this.instance);\n  }\n}\n","","import {\n  AfterViewInit,\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport OlMap from 'ol/Map';\nimport { Slide } from '../../models/slide';\nimport { ViewObserver, ZoomView } from '../../models/ui';\nimport { MapIdService } from '../../services/map-id.service';\nimport { MapService } from '../../services/map.service';\n\n@Component({\n  selector: 'svm-ext-zoom-slider',\n  templateUrl: './ext-zoom-slider.component.html',\n  styleUrls: ['./ext-zoom-slider.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExtZoomSliderComponent implements AfterViewInit {\n  public mapId = input<string>();\n\n  public zoomValue = signal<number>(0);\n  public zoomMax = signal<number>(0);\n  public zoomMin = signal<number>(0);\n  public zoomLevels = signal<number[]>([]);\n\n  public readonly zoomViewUpdated = output<ZoomView>();\n\n  public zoomView = input<ZoomView, ZoomView>(undefined, {\n    transform: (val: ZoomView): ZoomView => {\n      if (val) {\n        this.updateZoomSlider(val);\n      }\n      return val;\n    }\n  });\n\n  public slide = input<Slide, Slide>(undefined, {\n    transform: (val: Slide): Slide => {\n      this.setMinMaxZoom(val);\n      return val;\n    }\n  });\n\n  private viewerHost: OlMap;\n\n  constructor(\n    private mapService: MapService,\n    private mapIdService: MapIdService,\n  ) { }\n\n\n  public ngAfterViewInit(): void {\n    this.viewerHost = this.mapService.getMap(this.mapIdService || this.mapId());\n    // alternative to using the ngrx store for view updates\n    // this.viewerHost.set('ext-overview',this);\n\n    // initialize on remount as setter runs before map layer can initialize\n    this.setMinMaxZoom(this.slide());\n  }\n\n  public setMinMaxZoom(slide: Slide): void {\n    if (slide) {\n      this.zoomMin.set(0);\n      // calculate resolutions inbetween with step length 2^n\n      this.zoomLevels.set([]);\n      for (let i = 0; 2 ** i <= Math.max.apply(null, slide.imageInfo.resolutions); i++) {\n        this.zoomLevels.update(value => {\n          value.push(2 ** i);\n          return value;\n        });\n      }\n      this.zoomMax.set(this.zoomLevels().length - 1);\n    }\n  }\n\n  public updateZoomSlider(zoomView: ZoomView): void {\n    if (zoomView.receivers.includes(ViewObserver.ZoomSlider)) {\n      const log2n = Math.log(zoomView.resolution) / Math.log(2);\n      this.zoomValue.set(log2n);//zoomView.resolution;\n    }\n  }\n\n  public zoomIn(): void {\n    if (this.zoomLevels()) {\n      const zoomInLevels = this.zoomLevels().filter(x => x < (2 ** this.zoomValue()));\n      if (zoomInLevels.length > 0) {\n        const log2n = Math.log(zoomInLevels[zoomInLevels.length - 1]) / Math.log(2);\n        this.zoomValue.set(log2n);\n        const resolution = zoomInLevels[zoomInLevels.length - 1];\n        // this.updateMapByResolution(resolution);\n        this.setViewerHostResolution(resolution);\n      }\n    }\n  }\n\n  public zoomOut(): void {\n    if (this.zoomLevels()) {\n      const zoomOutLevels = this.zoomLevels()?.filter(x => x > (2 ** this.zoomValue()));\n      if (zoomOutLevels.length > 0) {\n        const log2n = Math.log(zoomOutLevels[0]) / Math.log(2);\n        this.zoomValue.set(log2n);\n        const resolution = zoomOutLevels[0];\n        // this.updateMapByResolution(resolution);\n        // update host map directly\n        this.setViewerHostResolution(resolution);\n      }\n    }\n  }\n\n  public sliderChanged(event: { value: number }): void {\n    this.zoomValue.set(event.value);\n    const resolution = 2 ** event.value;\n    // this.updateMapByResolution(resolution);\n    // update host map directly\n    this.setViewerHostResolution(resolution);\n  }\n\n  public setViewerHostResolution(resolution: number): void {\n    this.viewerHost.getView().setResolution(resolution);\n  }\n}\n","<div class=\"ext-zoom-slider-container ext-zoom-slider-border\">\n  <div class=\"inner-div\">\n    <button\n      class=\"zoom-button left-button\"\n      mat-flat-button\n      (click)=\"zoomIn()\">\n      <mat-icon>add</mat-icon>\n    </button>\n  </div>\n  <div class=\"inner-div\">\n    <mat-slider\n      class=\"slider-margin\"\n      [max]=\"zoomMax()\"\n      [min]=\"zoomMin()\"\n      [step]=\"0.1\" #ngSlider>\n      <input\n        matSliderThumb\n        [value]=\"zoomValue()\"\n        (input)=\"sliderChanged({value: ngSliderThumb.value})\"\n        #ngSliderThumb=\"matSliderThumb\" />\n    </mat-slider>\n  </div>\n  <div class=\"inner-div\">\n    <button\n      class=\"zoom-button right-button\"\n      mat-flat-button\n      (click)=\"zoomOut()\">\n      <mat-icon>remove</mat-icon>\n    </button>\n  </div>\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  ViewChild,\n} from '@angular/core';\n\nimport { ResizeEvent, Edges } from 'angular-resizable-element';\nimport {\n  ElementSize,\n  ResizableElementService,\n} from '../../services/resizable-element.service';\n\n@Component({\n  selector: 'svm-dnd-container',\n  templateUrl: './dnd-container.component.html',\n  styleUrls: ['./dnd-container.component.scss'],\n  providers: [ResizableElementService],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DndContainerComponent implements AfterViewInit {\n  readonly MIN_WIDTH = 50;\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  public style: object = {};\n  public resizeEdges: Edges = {\n    bottom: true,\n    right: true,\n    top: true,\n    left: true,\n  };\n\n  // TODO: clean solution for this\n  public resetSize = input<string>();\n\n  @ViewChild('dndContainer') containerDiv!: HTMLDivElement;\n\n  public isMinimized = false;\n\n  constructor(private sizeService: ResizableElementService) { }\n\n  public ngAfterViewInit(): void {\n    const initial: ElementSize = {\n      width: 256,\n      height: 256,\n    };\n    this.sizeService.setStyle(initial);\n  }\n\n  public onResizing(event: ResizeEvent): void {\n\n    this.style = {\n      position: 'fixed',\n      left: `${event.rectangle.left}px`,\n      top: `${event.rectangle.top}px`,\n      width: `${event.rectangle.width}px`,\n      height: `${event.rectangle.height}px`,\n    };\n    this.sizeService.setStyle({\n      width: event.rectangle.width,\n      height: event.rectangle.height,\n    });\n  }\n\n  public validate(event: ResizeEvent): boolean {\n    const MIN_DIMENSIONS_PX = 50;\n    if (\n      event.rectangle.width &&\n      event.rectangle.height &&\n      (event.rectangle.width < MIN_DIMENSIONS_PX ||\n        event.rectangle.height < MIN_DIMENSIONS_PX)\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  // TODO: implement container minimize\n  public minimize(): void {\n    // if (this.isMinimized) {\n    //   this.style = { ...this.restoreStyle };\n    //   this.isMinimized = false;\n    //   this.sizeService.setStyle({\n    //     width: parseInt(this.style.width, 10),\n    //     height: parseInt(this.style.height, 10),\n    //   });\n    // } else {\n    //   this.isMinimized = true;\n    //   this.restoreStyle = { ...this.style };\n    //   const width = 68;\n    //   const height = 24;\n    //   this.style = {\n    //     ...this.style,\n    //     width: `${width} px`,\n    //     height: `${height} px`\n    //   };\n    //   this.sizeService.setStyle({\n    //     width: width,\n    //     height: height\n    //   });\n    // }\n  }\n}\n","<div\n  class=\"svm-overview-drag-box mat-app-background\"\n  cdkDrag\n  cdkDragBoundary=\".example-boundary\"\n  #dndContainer\n  mwlResizable\n  [enableGhostResize]=\"false\"\n  (resizing)=\"onResizing($event)\"\n  [validateResize]=\"validate\"\n  [ngStyle]=\"style\">\n  <div mwlResizeHandle class=\"resize-handle-top\" [resizeEdges]=\"{ top: resizeEdges.top }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-bottom\" [resizeEdges]=\"{ bottom: resizeEdges.bottom }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-left\" [resizeEdges]=\"{ left: resizeEdges.left }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-right\" [resizeEdges]=\"{ right: resizeEdges.right }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-top-left\" [resizeEdges]=\"{ top: resizeEdges.top, left: resizeEdges.left }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-top-right\" [resizeEdges]=\"{ top: resizeEdges.top, right: resizeEdges.right }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-bottom-left\" [resizeEdges]=\"{ bottom: resizeEdges.bottom, left: resizeEdges.left }\"></div>\n  <div mwlResizeHandle class=\"resize-handle-bottom-right\" [resizeEdges]=\"{ bottom: resizeEdges.bottom, right: resizeEdges.right }\"></div>\n  <div>\n    <ng-content></ng-content>\n  </div>\n  <div\n    class=\"drag-handle\"\n    cdkDragHandle>\n    <svg\n      width=\"24px\"\n      fill=\"currentColor\"\n      viewBox=\"0 0 24 24\">\n      <path d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\"></path>\n      <path\n        d=\"M0 0h24v24H0z\"\n        fill=\"none\"></path>\n    </svg>\n  </div>\n  <!-- TODO: implement minimize container function -->\n   @if (false) {\n    <div\n      class=\"minimize\"\n      (click)=\"minimize()\">\n      <!-- Minimize icon -->\n       @if (!isMinimized) {\n        <svg\n          width=\"24\"\n          height=\"24\"\n          viewBox=\"0 0 24 24\"\n          fill=\"currentColor\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\">\n          <polyline points=\"4 14 10 14 10 20\"></polyline>\n          <polyline points=\"20 10 14 10 14 4\"></polyline>\n          <line\n            x1=\"14\"\n            y1=\"10\"\n            x2=\"21\"\n            y2=\"3\"></line>\n          <line\n            x1=\"3\"\n            y1=\"21\"\n            x2=\"10\"\n            y2=\"14\"></line>\n        </svg>\n       }\n      <!-- Maximize icon -->\n       @if (isMinimized) {\n        <svg\n          width=\"24\"\n          height=\"24\"\n          viewBox=\"0 0 24 24\"\n          fill=\"currentColor\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\">\n          <polyline points=\"15 3 21 3 21 9\"></polyline>\n          <polyline points=\"9 21 3 21 3 15\"></polyline>\n          <line\n            x1=\"21\"\n            y1=\"3\"\n            x2=\"14\"\n            y2=\"10\"></line>\n          <line\n            x1=\"3\"\n            y1=\"21\"\n            x2=\"10\"\n            y2=\"14\"></line>\n        </svg>\n       }\n    </div>\n   }\n</div>\n","import { Feature } from 'ol';\nimport { Coordinate } from 'ol/coordinate';\nimport { Circle, Geometry, Point, Polygon } from 'ol/geom';\nimport {\n  IAnnotation,\n  AnnotationCircle,\n  AnnotationPoint,\n  AnnotationPolygon,\n  AnnotationRectangle,\n} from '../models/annotation';\nimport { AnnotationType } from '../models/annotation-type';\nimport { AxisConverter } from './axis-converter';\n\nexport class AnnotationToOlFeature {\n  public static annotationToFeature(annotation: IAnnotation): Feature<Geometry> {\n    switch (annotation.annotationType) {\n      case AnnotationType.CIRCLE:\n        return this.annotationToCircleFeat(annotation as AnnotationCircle);\n      case AnnotationType.RECTANGLE:\n        return this.annotationToPolygonFeat(annotation as AnnotationRectangle);\n      case AnnotationType.POLYGON:\n        return this.annotationToPolygonFeat(annotation as AnnotationPolygon);\n      case AnnotationType.POINT:\n        return this.annotationToPointFeat(annotation as AnnotationPoint);\n      default: {\n        throw new Error(\n          `[LayerComponent] Unknown Annotation in annotationToFeature ${annotation?.annotationType}`\n        );\n      }\n    }\n  }\n\n  public static annotationToCircleFeat(a: AnnotationCircle): Feature<Geometry> {\n    return new Feature({\n      geometry: new Circle(\n        AxisConverter.invertYAxis(a.center),\n        a.radius\n      ),\n    });\n  }\n\n  public static annotationToPolygonFeat(\n    a: AnnotationRectangle | AnnotationPolygon,\n  ): Feature<Geometry> {\n    /**\n     * OL expects following array shape:\n     * [[[x0, y0], [x1, y1], [x2, y2], [x3, y3]]]\n     */\n    const coords: Coordinate[][] = [...[...[AxisConverter.invertYAxisOfArray(a.coordinates)]]];\n    // logger.log(`[Layer Component] Poly coords`, coords);\n    const feature = new Feature({\n      geometry: new Polygon(coords),\n    });\n    return feature;\n  }\n\n  public static annotationToPointFeat(a: AnnotationPoint): Feature<Geometry> {\n    return new Feature({\n      geometry: new Point(AxisConverter.invertYAxis(a.coordinates)),\n    });\n  }\n\n  public static addAnnotationInfoToFeature(\n    a: IAnnotation,\n    f: Feature<Geometry>\n  ): void {\n    f.setId(a.id);\n    f.setProperties({ annotation: { ...a } });\n  }\n}\n","export const ANNOTATION_FOCUS_ERROR_MSG = 'Cannot focus annotation! Annotation is outside of image boundaries.';\nexport const ANNOTATION_CREATION_ERROR_MSG = 'Cannot create annotation! Annotation is outside of image boundaries.';\nexport const ANNOTATION_INTERSECT_ERROR_MSG = 'Annotation is self intersecting.';\n\nexport type SvmErrorMessage =\n  | typeof ANNOTATION_FOCUS_ERROR_MSG\n  | typeof ANNOTATION_CREATION_ERROR_MSG\n  | typeof ANNOTATION_INTERSECT_ERROR_MSG\n  ;","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Host,\n  input,\n  OnDestroy,\n  output,\n} from '@angular/core';\nimport { Feature, Map as OlMap, MapBrowserEvent } from 'ol';\nimport { FeatureLike } from 'ol/Feature';\nimport VectorSource from 'ol/source/Vector';\nimport VectorImageLayer from 'ol/layer/VectorImage';\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { IAnnotation, AnnotationsWithUpdates } from '../../models/annotation';\nimport { logger } from '../../tools/logger';\nimport { AnnotationToOlFeature } from '../../tools/annotation-to-olfeature';\nimport { ViewerCalculationsService } from '../../services/viewer-calculations.service';\nimport { ANNOTATION_FOCUS_ERROR_MSG, SvmErrorMessage } from '../../models/errors';\nimport { Geometry } from 'ol/geom';\nimport { FeatureStyleEntry, FeatureStyleMapping } from '../../models/feature-style';\nimport { AnnotationHighlightConfig, DEFAULT_ANNOTATION_HIGHLIGHT_CONFIG, HighlightType } from '../../config/annotation-highlight.config';\nimport { Subject } from 'rxjs';\nimport { Style } from 'ol/style';\n\n/**\n * Layer that displays annotations on a Slide.\n * Reacts to hide/show/hover events of Annotation List.\n * Handles Zooming to an annotation\n */\n@Component({\n  selector: 'svm-annotation-layer',\n  templateUrl: './annotation-layer.component.html',\n  styleUrls: ['./annotation-layer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnnotationLayerComponent implements AfterViewInit, OnDestroy {\n  private viewerHost: OlMap;\n  private source: VectorSource;\n  private layer: VectorImageLayer<VectorSource>;\n\n  // viewer hover (internal)\n  private _hoveredFeaturesList = new Array<Feature<Geometry>>();\n  // viewer selection (internal)\n  private _selectedFeaturesList = new Array<Feature<Geometry>>();\n\n  private destroy$ = new Subject();\n\n  // set parameter of EventEmitter to true to trigger the change detection\n  // and avoiding ExpressionChangedAfterItHasBeenCheckedError\n  public errorMessage = output<SvmErrorMessage>();\n\n  public addAnnotations = input<AnnotationsWithUpdates, AnnotationsWithUpdates>(undefined, {\n    transform: (val: AnnotationsWithUpdates): AnnotationsWithUpdates => {\n      if (val?.annotations?.length) {\n        this.addNewAnnotations(val.annotations, val.updatedAnnotationIds);\n      }\n      return val;\n    }\n  });\n\n  public removeAnnotations = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      if (val?.length) {\n        this.removeFeatures(val);\n      }\n      return val;\n    }\n  });\n\n  public clearAnnotations = input<boolean, boolean>(undefined, {\n    transform: (val: boolean): boolean => {\n      if (val) {\n        this.removeAllFeatures();\n      }\n      return val;\n    }\n  });\n\n  public hideAnnotations = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      if (val?.length) {\n        this.removeFeatures(val);\n      }\n      return val;\n    }\n  });\n\n  public featureStyleMapping = input<FeatureStyleMapping, FeatureStyleMapping>(undefined, {\n    transform: (val: FeatureStyleMapping): FeatureStyleMapping => {\n      if (val && this.layer) {\n        this.onFeatureStyleChange();\n      }\n      return val;\n    }\n  });\n\n  public highlightedFeatures = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      if (val) {\n        this.highlightFeatures(val);\n      } else {\n        this.resetStyleOfClickedFeatures();\n        this.resetStyleOfHoverFeatures();\n      }\n      return val;\n    }\n  });\n\n  public focusFeature = input<string, string>(undefined, {\n    transform: (val: string): string => {\n      if (val) {\n        this.zoomToAnnotation(val);\n      }\n      return val;\n    }\n  });\n\n  public highlightConfig = input<AnnotationHighlightConfig>(DEFAULT_ANNOTATION_HIGHLIGHT_CONFIG);\n\n  public readonly hoveredFeatures = output<string[]>();\n  public readonly clickedFeature = output<string[]>();\n\n  constructor(\n    private mapService: MapService,\n    @Host()\n    private mapIdService: MapIdService,\n    private viewerCalculationService: ViewerCalculationsService,\n  ) { }\n\n\n  public ngAfterViewInit(): void {\n    const id = this.mapIdService;\n    this.viewerHost = this.mapService.getMap(id);\n    this.initializeLayer();\n\n    this.initializeEventListener();\n  }\n\n  public ngOnDestroy(): void {\n    this.removeAllFeatures();\n    this.destroy$.next(null);\n  }\n\n  private initializeLayer() {\n    this.source = new VectorSource({\n      useSpatialIndex: false,\n      wrapX: false,\n    });\n\n    const styleFeature = (feature: FeatureLike): void | Style | Style[] => {\n      let style: FeatureStyleEntry;\n      const annotationClass = feature.get('annotation')?.['classes']?.[0]?.['value'];\n      if (annotationClass) {\n        style = this.featureStyleMapping()[annotationClass].DEFAULT;\n        style = [style[0].clone(), style[1].clone()];\n      }\n      return style;\n    };\n\n    this.layer = new VectorImageLayer({\n      renderBuffer: 10,\n      source: this.source,\n      style: styleFeature.bind(this),\n    });\n\n    this.layer.setZIndex(101);\n    this.viewerHost.addLayer(this.layer);\n  }\n\n  private initializeEventListener() {\n    switch(this.highlightConfig().highlightType) {\n      case HighlightType.CLICK:\n        this.setHighlightOnClickEventListener();\n        break;\n      case HighlightType.OVER:\n        this.setHighlightOnHoverEventListener();\n        break;\n      default:\n        this.setHighlightOnHoverEventListener();\n    }\n  }\n\n  private setHighlightOnHoverEventListener(): void {\n    let throttleFlag = true;\n    this.viewerHost.on('pointermove', (event: MapBrowserEvent<UIEvent>) => {\n      if(!event.dragging) {\n        // we trigger hover function every 50ms to reduce computational expensive operations\n        if(throttleFlag) {\n          this.onFeatureHover(event);\n          throttleFlag = false;\n          setTimeout(() => throttleFlag = true, 50);\n        }\n      }\n      return true;\n    });\n    this.viewerHost.on('singleclick', (event: MapBrowserEvent<UIEvent>) => {\n      this.onFeatureClick(event);\n      return true;\n    });\n  }\n\n  private setHighlightOnClickEventListener(): void {\n    this.viewerHost.on('singleclick', (event: MapBrowserEvent<UIEvent>) => {\n      this.onFeatureClick(event);\n      return true;\n    });\n  }\n\n  public addNewAnnotations(annotationList: Array<IAnnotation>, updatedAnnotationIds: string[]): void {\n    if (!this.source) {\n      return;\n    }\n\n    // only remove annotations we want to update\n    this.removeFeatures(updatedAnnotationIds);\n    const features = this.transformAnnotationsToFeatures(annotationList);\n    this.source.addFeatures(features);\n  }\n\n  public transformAnnotationsToFeatures(annotations: IAnnotation[]): Feature<Geometry>[] {\n    return annotations.map(annotation => {\n      const feature = AnnotationToOlFeature.annotationToFeature(annotation);\n      AnnotationToOlFeature.addAnnotationInfoToFeature(annotation, feature);\n      return feature;\n    });\n  }\n\n  public highlightFeatures(annotationIds: string[]) {\n    switch (this.highlightConfig().highlightType) {\n      case HighlightType.CLICK:\n        this.resetStyleOfClickedFeatures();\n        this.highlightClickAnnotation(annotationIds[0]);\n        break;\n      case HighlightType.OVER:\n        this.resetStyleOfHoverFeatures();\n        this.highlightHoverAnnotations(annotationIds);\n        break;\n      default:\n        this.resetStyleOfHoverFeatures();\n        this.highlightHoverAnnotations(annotationIds);\n    }\n  }\n\n  private highlightHoverAnnotations(ids: string[]): void {\n    ids.forEach((id) => {\n      if (id && this.source) {\n        const feature = this.source.getFeatureById(id) as Feature<Geometry>;\n        if (feature) {\n          this._hoveredFeaturesList.push(feature);\n          const annotationClass = feature.get('annotation')?.['classes']?.[0]?.['value'];\n          let style = this.featureStyleMapping()[annotationClass]?.HOVER;\n          if (style) {\n            style = [style[0].clone(), style[1].clone()];\n          }\n          feature.setStyle(style);\n        }\n      }\n    });\n  }\n\n  public removeAllFeatures(): void {\n    if (!this.source) {\n      return;\n    }\n    this.source.clear(true);\n  }\n\n  public removeFeatures(annotationIds: string[]): void {\n    annotationIds.forEach(annotationId => {\n      const feature = this.source.getFeatureById(annotationId) as Feature<Geometry>;\n      if (feature) {\n        this.source.removeFeature(feature);\n      }\n    });\n  }\n\n  private zoomToAnnotation(annotationId: string): void {\n    if (annotationId) {\n      const feat = this.source.getFeatureById(annotationId) as Feature<Geometry>;\n      // if the feature is found zoom to it\n      if (feat) {\n        const featGeometry = feat.getGeometry();\n        const imageExtent = this.viewerCalculationService.getImageExtentFromSourceLayers(this.viewerHost.getLayers());\n\n        if (this.viewerCalculationService.isGeometryInExtent(featGeometry, imageExtent)) {\n          const view = this.viewerHost.getView();\n          view.fit(featGeometry.getExtent());\n        } else {\n          // annotation is outside the image boundaries\n          this.errorMessage.emit(ANNOTATION_FOCUS_ERROR_MSG);\n        }\n      } else {\n        logger.error(\n          '[LayerComponent] Focused annotation not Found! id:',\n          annotationId\n        );\n      }\n    }\n  }\n\n  private onFeatureStyleChange(): void {\n    this.layer.changed();\n  }\n\n  private onFeatureHover(event: MapBrowserEvent<UIEvent>): void {\n    const prev = new Set<string>(\n      this._hoveredFeaturesList.map((f) => f.getId() as string)\n    );\n    const curr = new Set<string>();\n\n    try {\n      this.viewerHost.forEachFeatureAtPixel(event.pixel, (feat: FeatureLike) => {\n        // the point indicating that we are in draw mode does not have a id set\n        // every other annotation should have an id set via addAnnotationInfoToFeature function\n        const id = feat.getId() as string;\n        if (id) {\n          curr.add(id);\n        }\n      });\n    } catch (ignoreError) {\n      // the hover method has no possibility to check whether a feature was discarded\n      // or is still on the map. if the feature does not exist, it will throw a\n      // type error that will be ignored.\n    }\n\n    const same = this.sameHighlightSets(prev, curr);\n    if (same) {\n      return;\n    }\n\n    this.resetStyleOfHoverFeatures();\n    this.highlightHoverAnnotations(Array.from(curr));\n\n    // notify sidenav annotation list about hovered annotation\n    this.hoveredFeatures.emit(curr.size > 0 ? [...curr] : []);\n  }\n\n  private sameHighlightSets(prev: Set<string>, current: Set<string>): boolean {\n    if (prev.size !== current.size) {\n      return false;\n    }\n    for (const a of prev) {\n      if (!current.has(a)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private onFeatureClick(event: MapBrowserEvent<UIEvent>): void {\n    this.resetStyleOfClickedFeatures();\n    // only add features to annotation with an id. Otherwise it's a cluster\n    this._selectedFeaturesList = this.viewerHost.getFeaturesAtPixel(event.pixel).filter(f => f.getId()) as Feature<Geometry>[];\n    const annotationId = this._selectedFeaturesList[0]?.getId() as string;\n    this.highlightClickAnnotation(annotationId);\n    const annotations = new Set<string>(\n      this._selectedFeaturesList.map(f => f.getId() as string)\n    );\n    this.clickedFeature.emit(annotations.size ? [...annotations] : []);\n  }\n\n  private highlightClickAnnotation(id: string): void {\n    if (id && this.source) {\n      const feature = this.source.getFeatureById(id) as Feature<Geometry>;\n      const annotationClass = feature?.get('annotation')?.['classes']?.[0]?.['value'];\n      let style = this.featureStyleMapping()[annotationClass]?.SELECTION;\n      if (style) {\n        style = [style[0].clone(), style[1].clone()];\n      }\n      feature?.setStyle(style);\n      this._selectedFeaturesList.push(feature);\n    }\n  }\n\n  private resetStyleOfHoverFeatures(): void {\n    this._hoveredFeaturesList.forEach(f => f?.setStyle());\n    this._hoveredFeaturesList = [];\n  }\n\n  private resetStyleOfClickedFeatures(): void {\n    this._selectedFeaturesList.forEach(f => f?.setStyle());\n    this._selectedFeaturesList = [];\n  }\n}\n","<!-- <p>\n  layer works!\n</p> -->\n","export enum GeometryType {\n  POINT = 'Point',\n  LINE_STRING = 'LineString',\n  LINEAR_RING = 'LinearRing',\n  POLYGON = 'Polygon',\n  MULTI_POINT = 'MultiPoint',\n  MULTI_LINE_STRING = 'MultiLineString',\n  MULTI_POLYGON = 'MultiPolygon',\n  GEOMETRY_COLLECTION = 'GeometryCollection',\n  CIRCLE = 'Circle'\n}\n","import Draw, { createBox } from 'ol/interaction/Draw';\nimport { GeometryType } from '../models/geometry';\nimport VectorSource from 'ol/source/Vector';\nimport { DrawType, MouseButtonType, MouseInteractionType } from '../models/interaction';\nimport { MapBrowserEvent } from 'ol';\nimport { always } from 'ol/events/condition';\n\nfunction drawCondition(\n  event: MapBrowserEvent<UIEvent>,\n  mouse: MouseInteractionType,\n  geometryType: string\n): boolean {\n  const left = mouseButtonCondition(event, MouseButtonType.Left, mouse.left as DrawType | undefined, geometryType);\n  const right = mouseButtonCondition(event, MouseButtonType.Right, mouse.right as DrawType | undefined, geometryType);\n  return left || right;\n}\n\nfunction drawFreehandCondition(\n  event: MapBrowserEvent<UIEvent>,\n  mouse: MouseInteractionType,\n  geometryType: string,\n): boolean {\n  const left = mouseButtonFreehandCondition(event, MouseButtonType.Left, mouse.left as DrawType | undefined, geometryType);\n  const right = mouseButtonFreehandCondition(event, MouseButtonType.Right, mouse.right as DrawType | undefined, geometryType);\n  return always() && (left || right);\n}\n\nfunction mouseButtonCondition(\n  event: MapBrowserEvent<UIEvent>,\n  mouseType: MouseButtonType,\n  drawType: DrawType | undefined,\n  geometryType: string\n): boolean {\n  return (event.originalEvent as MouseEvent)?.buttons === mouseType &&\n    (drawType?.toLowerCase() === geometryType.toLowerCase()\n      || drawType === DrawType.PolygonAlternative && geometryType === GeometryType.POLYGON\n    );\n}\n\nfunction mouseButtonFreehandCondition(\n  event: MapBrowserEvent<UIEvent>,\n  mouseType: MouseButtonType,\n  drawType: DrawType | undefined,\n  geometryType: string\n): boolean {\n  return (event.originalEvent as MouseEvent)?.buttons !== mouseType && drawType?.toLowerCase() !== geometryType.toLowerCase();\n}\n\nexport default interface OpenLayersDraw {\n  source: VectorSource;\n  mouse: MouseInteractionType;\n  getDraw(): Draw;\n}\n\nclass OpenLayersDrawCircle implements OpenLayersDraw {\n  constructor(\n    public source: VectorSource,\n    public mouse: MouseInteractionType\n  ) {}\n  public getDraw = (): Draw => {\n    const d = new Draw({\n      type: GeometryType.CIRCLE,\n      source: this.source,\n      condition: event => drawCondition(event, this.mouse, GeometryType.CIRCLE),\n      freehandCondition: event => drawFreehandCondition(event, this.mouse, GeometryType.CIRCLE),\n    });\n    return d;\n  };\n}\n\nclass OpenLayersDrawRectangle implements OpenLayersDraw {\n  constructor(\n    public source: VectorSource,\n    public mouse: MouseInteractionType\n  ) {}\n  public getDraw = (): Draw => {\n    const d = new Draw({\n      type: GeometryType.CIRCLE,\n      geometryFunction: createBox(),\n      source: this.source,\n      condition: event => drawCondition(event, this.mouse, DrawType.Rectangle),\n      freehandCondition: event => drawFreehandCondition(event, this.mouse, DrawType.Rectangle),\n    });\n    return d;\n  };\n}\n\nclass OpenLayersDrawPolygon implements OpenLayersDraw {\n  constructor(\n    public source: VectorSource,\n    public mouse: MouseInteractionType,\n    public freehand: boolean\n  ) {}\n  public getDraw = (): Draw => {\n    const d = new Draw({\n      type: GeometryType.POLYGON,\n      condition: event => drawCondition(event, this.mouse, GeometryType.POLYGON),\n      freehandCondition: this.freehand ? event => drawFreehandCondition(event, this.mouse, GeometryType.POLYGON) : () => false,\n      source: this.source,\n    });\n    return d;\n  };\n}\n\nclass OpenLayersDrawLineString implements OpenLayersDraw {\n  constructor(\n    public source: VectorSource,\n    public mouse: MouseInteractionType\n  ) {}\n  public getDraw = (): Draw => {\n    const d = new Draw({\n      type: GeometryType.LINE_STRING,\n      source: this.source,\n      condition: event => drawCondition(event, this.mouse, GeometryType.LINE_STRING),\n      freehandCondition: event => drawFreehandCondition(event, this.mouse, GeometryType.LINE_STRING),\n      stopClick: true,\n    });\n    return d;\n  };\n}\n\nclass OpenLayersDrawPoint implements OpenLayersDraw {\n  constructor(public source: VectorSource, public mouse: MouseInteractionType) {}\n  public getDraw = (): Draw => {\n    const d = new Draw({\n      type: GeometryType.POINT,\n      source: this.source,\n      condition: event => drawCondition(event, this.mouse, GeometryType.POINT),\n    });\n    return d;\n  };\n}\n\nexport class OpenLayersDrawFactory {\n  public static fromDrawType(\n    drawType: DrawType,\n    source: VectorSource,\n    mouse: MouseInteractionType\n  ): OpenLayersDraw {\n    switch (drawType) {\n      case DrawType.Circle:\n        return new OpenLayersDrawCircle(source, mouse);\n      case DrawType.Rectangle:\n        return new OpenLayersDrawRectangle(source, mouse);\n      case DrawType.Polygon:\n        return new OpenLayersDrawPolygon(source, mouse, true);\n      case DrawType.PolygonAlternative:\n        return new OpenLayersDrawPolygon(source, mouse, false);\n      case DrawType.LineString:\n        return new OpenLayersDrawLineString(source, mouse);\n      case DrawType.Point:\n        return new OpenLayersDrawPoint(source, mouse);\n      default:\n        throw new Error('Draw Type not supported by OpenLayers');\n    }\n  }\n}\n","interface ErrorAttributes {\n  [key: string]: string;\n}\n\nexport interface FormErrors {\n  [key: string]: ErrorAttributes;\n}\n\nexport const ANNOTATION_FORM_ERROR_MESSAGES: FormErrors = {\n  title: {\n    required: 'Annotation must contain a title',\n    maxlength: 'The title exceeds the maximum character length',\n  },\n  description: {\n    maxlength: 'The description exceeds the maximum character length',\n  }\n};\n","import { ErrorStateMatcher } from '@angular/material/core';\nimport { UntypedFormControl, FormGroupDirective, NgForm } from '@angular/forms';\n\nexport class AnnotationCardErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: UntypedFormControl | null, _form: FormGroupDirective | NgForm | null): boolean {\n    const required = control.hasError('required');\n    return required ? !!(control && control.invalid && control.touched) : !!(control && control.invalid && control.dirty);\n  }\n}\n","import {\n  Component,\n  OnInit,\n  ElementRef,\n  ViewChild,\n  ChangeDetectionStrategy,\n  input,\n  output,\n} from '@angular/core';\nimport {\n  UntypedFormBuilder,\n  UntypedFormControl,\n  Validators,\n  UntypedFormGroup,\n  AbstractControl,\n} from '@angular/forms';\nimport { AnnotationCharacterLimit } from '../../models/character-limit';\nimport { IAnnotationCard } from '../../models/ui';\nimport { ANNOTATION_FORM_ERROR_MESSAGES } from '../../models/form-errors';\nimport { AnnotationCardErrorStateMatcher } from '../../models/error-matcher';\n\n@Component({\n  selector: 'svm-create-annotation-card',\n  templateUrl: './create-annotation-card.component.html',\n  styleUrls: ['./create-annotation-card.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CreateAnnotationCardComponent implements OnInit {\n  public annotationCharacterConfig = input<AnnotationCharacterLimit | undefined>(undefined);\n  public defaultTitle = input<string | undefined>(undefined);\n\n  public cancelClick = output<void>();\n  public saveClick = output<IAnnotationCard>();\n\n  private formBuilder = new UntypedFormBuilder();\n  public formGroup!: UntypedFormGroup;\n  public matcher = new AnnotationCardErrorStateMatcher();\n\n  public ngOnInit(): void {\n    this.formGroup = this.formBuilder.group({\n      title: new UntypedFormControl(\n        this.defaultTitle() ?? '',\n        this.annotationCharacterConfig()\n          ? [Validators.required, Validators.maxLength(this.annotationCharacterConfig().name)]\n          : Validators.required\n      ),\n      description: new UntypedFormControl(\n        '',\n        this.annotationCharacterConfig()\n          ? [Validators.maxLength(this.annotationCharacterConfig().description)]\n          : undefined\n      ),\n    });\n  }\n\n  @ViewChild('inputAutoFocus', { static: false })\n  public set inputAutoFocus(element: ElementRef<HTMLInputElement>) {\n    if (element) {\n      element.nativeElement.focus();\n    }\n  }\n\n  public saveAnnotationClick(): void {\n    this.saveClick.emit({\n      titel: this.title.value,\n      description: this.description.value,\n    });\n  }\n\n  public get title(): UntypedFormControl {\n    return this.formGroup?.get('title') as UntypedFormControl;\n  }\n\n  public get description(): UntypedFormControl {\n    return this.formGroup?.get('description') as UntypedFormControl;\n  }\n\n  public getErrors(control: AbstractControl, name: string): string[] | null {\n    const messages = ANNOTATION_FORM_ERROR_MESSAGES[name];\n    return Object.keys(control.errors).map(error => messages[error]);\n  }\n}\n","\n<mat-card\n  appearance=\"outlined\"\n  class=\"flex-card-300\"\n  (keyup.esc)=\"cancelClick.emit()\">\n  <mat-card-header>\n    <p>Create Annotation</p>\n  </mat-card-header>\n  <mat-card-content>\n    <form\n      [formGroup]=\"formGroup\"\n      (keyup.enter)=\"saveAnnotationClick()\">\n      <mat-form-field\n        class=\"width-100 form-field-margin\"\n        appearance=\"outline\">\n        <mat-label>Title</mat-label>\n        <input\n          data-cy=\"annotation-creation-title\"\n          [errorStateMatcher]=\"matcher\"\n          #inputAutoFocus\n          matInput\n          placeholder=\"Title\"\n          floatLabel=\"always\"\n          [formControl]=\"title\"\n          required>\n          @if (annotationCharacterConfig()) {\n            <mat-hint>{{annotationCharacterConfig().name - title.value.length}} characters left</mat-hint>\n          }\n          @if (title.errors) {\n            <mat-error>{{getErrors(title, 'title')}}</mat-error>\n          }\n      </mat-form-field>\n      <mat-form-field\n        class=\"width-100 form-field-margin\"\n        appearance=\"outline\">\n        <mat-label>Description</mat-label>\n        <textarea\n          [errorStateMatcher]=\"matcher\"\n          matInput\n          placeholder=\"Description\"\n          floatLabel=\"always\"\n          [formControl]=\"description\">\n        </textarea>\n        @if (annotationCharacterConfig()) {\n          <mat-hint>{{annotationCharacterConfig().description - description.value.length}} characters left</mat-hint>\n        }\n        @if (description.errors) {\n          <mat-error>{{getErrors(description, 'description')}}</mat-error>\n        }\n      </mat-form-field>\n      <!-- <mat-error style=\"height: 1em;\">\n        <div>{{registerResult|async}}</div>\n      </mat-error> -->\n      <span class=\"action-button-container\">\n        <button\n          class=\"action-button\"\n          mat-stroked-button\n          type=\"button\"\n          (click)=\"cancelClick.emit()\">\n          Cancel\n        </button>\n        <button\n          data-cy=\"annotation-save-button\"\n          class=\"action-button\"\n          mat-flat-button\n          style=\"margin-left: 8px;\"\n          color=\"accent\"\n          (click)=\"saveAnnotationClick()\"\n          [disabled]=\"!formGroup?.valid\">\n          Save\n        </button>\n      </span>\n    </form>\n  </mat-card-content>\n</mat-card>\n","import { Coordinate } from 'ol/coordinate';\nimport { getCenter } from 'ol/extent';\nimport { Circle, Geometry, Point, Polygon } from 'ol/geom';\nimport {\n  IAnnotation,\n  AnnotationCircle,\n  AnnotationPoint,\n  AnnotationPolygon,\n  AnnotationRectangle,\n  AnnotationReferenceType,\n} from '../models/annotation';\nimport { AnnotationType } from '../models/annotation-type';\nimport { DrawType } from '../models/interaction';\nimport { logger } from './logger';\nimport { AxisConverter } from './axis-converter';\n\nexport class GeometryToAnnotation {\n  private static fakeAnnotationData: Partial<IAnnotation> = {\n    name: 'INVALID-name',\n    description: 'INVALID-desc',\n    creatorId: 'INVALID-user_id',\n    creatorType: undefined,\n    referenceId: 'INVALID-ref_id',\n    referenceType: AnnotationReferenceType.Wsi,\n    nppCreated: -1,\n    annotationType: undefined,\n    // classes: {}\n  };\n\n  static geometryToAnnotation(\n    geometry: Geometry,\n    drawMode: DrawType\n  ): IAnnotation {\n    let annotation: IAnnotation;\n    if (geometry instanceof Circle) {\n      const [x, y] = geometry.getCenter().map(Math.round);\n      const radius = Math.round(geometry.getRadius());\n      annotation = new AnnotationCircle({\n        ...GeometryToAnnotation.fakeAnnotationData,\n        annotationType: AnnotationType.CIRCLE,\n        center: [x, -y],\n        radius,\n      });\n    } else if (geometry instanceof Point) {\n      const coordinates = AxisConverter.invertYAxis(\n        geometry.getCoordinates().map(Math.round)\n      );\n      annotation = new AnnotationPoint({\n        ...GeometryToAnnotation.fakeAnnotationData,\n        annotationType: AnnotationType.POINT,\n        center: coordinates,\n        coordinates,\n      });\n    } else if (geometry instanceof Polygon) {\n      let coordinates = AxisConverter\n        .invertYAxisOfArray(\n          geometry\n            .getCoordinates()[0]\n            .map((items: Coordinate) => items.map(Math.round))\n        );\n      const extend = geometry.getExtent();\n      // no need for subpixel accuracy -> round to nearest int\n      const center = AxisConverter.invertYAxis(\n        getCenter(extend).map((items) => Math.round(items))\n      );\n\n      if (drawMode === DrawType.Rectangle) {\n        coordinates = this.rearrangeRectangle(coordinates);\n        annotation = new AnnotationRectangle({\n          ...GeometryToAnnotation.fakeAnnotationData,\n          annotationType: AnnotationType.RECTANGLE,\n          center,\n          coordinates,\n        });\n        logger.info(`Box annotation ${annotation}`);\n      } else if (drawMode === DrawType.Polygon || drawMode === DrawType.PolygonAlternative) {\n        // based on the DICOM standard we remove the last coordinate here\n        // which is equal to the first coordinate of a polygon in ol\n        coordinates = coordinates.slice(0, -1);\n        annotation = new AnnotationPolygon({\n          ...this.fakeAnnotationData,\n          annotationType: AnnotationType.POLYGON,\n          center,\n          coordinates,\n        });\n      }\n    } else {\n      throw new Error('geometry object not implemented');\n    }\n    return annotation;\n  }\n\n  /**\n   * Rearrange coordinates of a rectangle so it starts at the upper left corner\n   * and follows the contour clockwise\n   * @param coordinates, All coordinate pairs of the rectangle\n   * @returns coordinates, Rearranged coordinates\n   */\n  private static rearrangeRectangle(coordinates: number[][]): number[][] {\n    if (coordinates.length !== 5) {\n      throw new Error(`GeometryToAnnotation - rearrangeRectangle: Expected Array of length 5 - got array length ${coordinates.length}`);\n    }\n    // Reordering the rectangle coordinates, so it can start on the upper left corner\n    // and follows the contour clockwise\n    return [\n      coordinates[3],\n      coordinates[2],\n      coordinates[1],\n      coordinates[0],\n      coordinates[3]\n    ];\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentFactoryResolver,\n  ComponentRef,\n  Host, HostListener,\n  input,\n  OnDestroy,\n  Optional,\n  output,\n  Renderer2,\n  ViewContainerRef,\n  ɵINPUT_SIGNAL_BRAND_WRITE_TYPE,\n} from '@angular/core';\nimport { Feature, Overlay } from 'ol';\nimport OlMap from 'ol/Map';\nimport { Draw } from 'ol/interaction';\nimport VectorLayer from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\n\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { DrawType, MouseInteractionType } from '../../models/interaction';\nimport { OpenLayersDrawFactory } from '../../tools/ol-draw-factory';\nimport { DrawEvent } from 'ol/interaction/Draw';\nimport { IAnnotationCard, Popup } from '../../models/ui';\nimport { IAnnotation, AnnotationReferenceType } from '../../models/annotation';\nimport { CreateAnnotationCardComponent } from '../create-annotation-card/create-annotation-card.component';\nimport { GeometryToAnnotation } from '../../tools/geometry-to-annotation';\nimport { ViewerCalculationsService } from '../../services/viewer-calculations.service';\nimport { ANNOTATION_CREATION_ERROR_MSG, ANNOTATION_INTERSECT_ERROR_MSG, SvmErrorMessage } from '../../models/errors';\nimport { AxisConverter } from '../../tools/axis-converter';\nimport { Geometry, Polygon } from 'ol/geom';\nimport { AnnotationCharacterLimit } from '../../models/character-limit';\nimport { FeatureStyleMapping } from '../../models/feature-style';\n\n@Component({\n  selector: 'svm-annotation-create',\n  templateUrl: './annotation-create.component.html',\n  styleUrls: ['./annotation-create.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnnotationCreateComponent implements AfterViewInit, OnDestroy {\n  public mapId = input<string>();\n  public slideId = input<string>();\n  public autoSetAnnotationTitle = input<boolean>();\n\n  public drawMode = input<MouseInteractionType, MouseInteractionType>(undefined, {\n    transform: (val: MouseInteractionType): MouseInteractionType => {\n      this.setDrawMode(val);\n      return val;\n    }\n  });\n\n  public featureStyleMapping = input<FeatureStyleMapping>();\n\n  public annotationCharacterConfig = input<AnnotationCharacterLimit | undefined>();\n\n  public annotationCreated = output<Partial<IAnnotation>>();\n  public errorMessage = output<SvmErrorMessage>();\n  public toggleAlternateDrawMode = output<boolean>();\n\n  private viewerHost: OlMap;\n  private drawLeft: Draw; // OlDraw\n  private drawRight: Draw; // OlDraw\n  private source: VectorSource;\n  private layer: VectorLayer<VectorSource>;\n  private cardOverlay: Overlay;\n  private tempFeature: Feature<Geometry>;\n\n  private currentDrawMode: MouseInteractionType;\n\n  private cardRef: ComponentRef<CreateAnnotationCardComponent>;\n\n  private roiCount = 0;\n\n  constructor(\n    private mapService: MapService,\n    @Host()\n    @Optional()\n    private mapIdService: MapIdService,\n    private calculations: ViewerCalculationsService,\n    private renderer: Renderer2,\n    private viewContainerRef: ViewContainerRef,\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private changeDetectorRef: ChangeDetectorRef,\n  ) { }\n\n  public ngAfterViewInit(): void {\n    this.viewerHost = this.mapService.getMap(this.mapIdService || this.mapId());\n    // this.instance = new Draw({});\n    this.createLayerSource();\n  }\n\n  public ngOnDestroy() {\n    // set draw mode to undefined, so the openlayers draw mode\n    // is set to move when changing slides\n    this.setDrawMode(undefined);\n  }\n\n  private createLayerSource(): void {\n    this.source = new VectorSource({ wrapX: false });\n    this.layer = new VectorLayer({\n      source: this.source,\n    });\n\n    // this.viewerHost = this.mapService.getMap(this.mapIdService || this.mapId);\n\n    this.layer.setVisible(true);\n    this.layer.setZIndex(10);\n\n    this.viewerHost.addLayer(this.layer);\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  public onKeyPressed(event: KeyboardEvent): void {\n    if (event.code === 'Escape' && this.drawLeft && this.drawLeft.getActive()) {\n      this.drawLeft.abortDrawing();\n    }\n\n    if (event.code === 'Escape' && this.drawRight && this.drawRight.getActive()) {\n      this.drawRight.abortDrawing();\n    }\n  }\n\n  private setDrawMode(mode: MouseInteractionType): void {\n    // clear previous interaction before setting new draw mode\n    this.disableDraw();\n\n    this.currentDrawMode = mode;\n    if (!mode?.left && !mode?.right) {\n      return;\n    }\n\n    if (mode.left) {\n      const openLayersDrawLeft = OpenLayersDrawFactory.fromDrawType(\n        mode.left as DrawType,\n        this.source,\n        mode\n      );\n      this.drawLeft = openLayersDrawLeft.getDraw();\n      this.viewerHost.addInteraction(this.drawLeft);\n    }\n\n    if (mode.right) {\n      const openLayersDrawRight = OpenLayersDrawFactory.fromDrawType(\n        mode.right as DrawType,\n        this.source,\n        mode\n      );\n      this.drawRight = openLayersDrawRight.getDraw();\n      this.viewerHost.addInteraction(this.drawRight);\n    }\n\n    this.drawLeft.on('drawend', (event: DrawEvent) => this.onDrawEnd(event));\n  }\n\n  private disableDraw(): void {\n\n    if (this.viewerHost) {\n      this.viewerHost.removeInteraction(this.drawLeft);\n    }\n\n    if (this.drawLeft) {\n      this.drawLeft.abortDrawing();\n      this.drawLeft.setActive(false);\n    }\n\n    if (this.drawRight) {\n      this.drawRight.abortDrawing();\n      this.drawRight.setActive(false);\n    }\n\n    if (this.tempFeature && this.source.hasFeature(this.tempFeature)) {\n      this.source.removeFeature(this.tempFeature);\n    }\n    // this.source.clear();\n    if (this.cardRef) {\n      this.cardRef.destroy();\n      this.cardRef = undefined;\n    }\n  }\n\n  public onDrawEnd(event: DrawEvent): void {\n    /**\n     * user should not be able to start two drawings at once\n     * so we remove the interaction until annotation creation\n     * is finished(pop up window is closed)\n     * */\n    this.viewerHost.removeInteraction(this.drawLeft);\n    this.viewerHost.removeInteraction(this.drawRight);\n    this.tempFeature = event.feature;\n    const annotationClasses = Object\n      .keys(this.featureStyleMapping())\n      .filter(c => c.toLowerCase().endsWith('roi') || c.toLowerCase().endsWith('null'))\n      .sort((a, _b) => a.toLowerCase().endsWith('roi') ? -1 : 1);\n    const style = this.featureStyleMapping()[annotationClasses[0]]?.DEFAULT;\n    this.tempFeature.setStyle(style);\n\n    let geometry = event.feature.getGeometry();\n    const extent = this.calculations.getImageExtentFromSourceLayers(this.viewerHost.getLayers());\n\n    // rearrange polygon vertices if they're out of bounds\n    if (geometry instanceof Polygon && !this.calculations.isGeometryInExtent(geometry, extent)) {\n      geometry = this.calculations.rearrangeOutOfBoundsPolygonVertices(geometry, extent);\n    }\n\n    if (geometry instanceof Polygon && this.calculations.polygonIsSelfIntersecting(geometry)) {\n      this.emitAnnotationErrorMessage(ANNOTATION_INTERSECT_ERROR_MSG);\n      return;\n    }\n\n    if (!this.calculations.isGeometryInExtent(geometry, extent)) {\n      this.emitAnnotationErrorMessage(ANNOTATION_CREATION_ERROR_MSG);\n      return;\n    }\n\n    // if the both mouse buttons should draw different annotations, it must be differentiated which button drew\n    // which kind of DrawType\n    const annotation = GeometryToAnnotation.geometryToAnnotation(geometry, this.currentDrawMode.left as DrawType);\n    annotation.nppCreated = this.calculations.nppForView(this.viewerHost.getView());\n    annotation.nppViewing = this.calculations.nppExtrema(this.viewerHost.getView());\n    annotation.centroid = this.calculations.centroidForGeometry(geometry);\n\n    const cardParentElement = this.createAnnotationCard(annotation, event);\n\n    const popUp = new Popup(\n      // because the y-axis is already converted, but the coordinate system\n      // needs negative y-values\n      AxisConverter.invertYAxis(annotation.center),\n      cardParentElement\n    );\n    this.addOverlayPopup(popUp);\n\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private emitAnnotationErrorMessage(error: SvmErrorMessage) {\n    this.layer.dispose();\n    this.createLayerSource();\n    this.errorMessage.emit(error);\n    this.setDrawMode(this.drawMode());\n  }\n\n  private createAnnotationCard(annotation: IAnnotation, event: DrawEvent) {\n    const cardParentElement = this.renderer.createElement('div') as HTMLDivElement;\n\n    this.cardRef = this.createCard();\n\n    this.renderer.appendChild(\n      cardParentElement,\n      this.cardRef.location.nativeElement\n    );\n\n    this.cardRef.instance.cancelClick.subscribe(() => {\n      this.cardRef.destroy();\n    });\n    this.cardRef.instance.saveClick.subscribe((value: IAnnotationCard) => {\n      this.setAnnotationCredentials(annotation, value.titel, value.description);\n      this.cardRef.destroy();\n    });\n    this.cardRef.onDestroy(() => {\n      // destroys the overlay(popup) of this card\n      this.viewerHost.removeOverlay(this.cardOverlay);\n      // let user use same draw type again after closing pop up\n      this.viewerHost.addInteraction(this.drawLeft);\n      // remove feature from draw layer as it should be in annotation layer after saving\n      if (this.source.hasFeature(event.feature)) {\n        this.source.removeFeature(event.feature);\n      }\n    });\n    return cardParentElement;\n  }\n\n  private createCard(): ComponentRef<CreateAnnotationCardComponent> {\n    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(\n      CreateAnnotationCardComponent\n    );\n    const componentRef = this.viewContainerRef.createComponent(\n      componentFactory\n    );\n    componentRef.instance.annotationCharacterConfig[ɵINPUT_SIGNAL_BRAND_WRITE_TYPE] = this.annotationCharacterConfig();\n    if (this.autoSetAnnotationTitle()) {\n      componentRef.instance.defaultTitle[ɵINPUT_SIGNAL_BRAND_WRITE_TYPE] = 'ROI_' + this.roiCount++;\n    }\n\n    return componentRef;\n  }\n\n  public addOverlayPopup(popup: Popup) {\n    // const popupAlreadyExists = this.overlays.has(popup.getId());\n    if (this.cardOverlay) {\n      this.viewerHost.removeOverlay(this.cardOverlay);\n    }\n\n    this.cardOverlay = new Overlay({\n      element: popup.getElement(),\n      autoPan: {\n        animation: {\n          duration: 250,\n        }\n      },\n      position: popup.getCoordinates(),\n      positioning: 'center-center'\n    });\n\n    this.viewerHost.addOverlay(this.cardOverlay);\n    // this.overlays.set(popup.getId(), overlay);\n  }\n\n  private setAnnotationCredentials(annotation: IAnnotation, title: string, description: string): void {\n    annotation.name = title;\n    annotation.description = description;\n    annotation.referenceId = this.slideId();\n    annotation.referenceType = AnnotationReferenceType.Wsi;\n    this.annotationCreated.emit(annotation);\n    this.tempFeature = undefined;\n  }\n}\n","<!-- <p>\n  annotation-create works!\n</p> -->\n","import { Injectable } from '@angular/core';\nimport {\n  Circle as CircleStyle,\n  Fill,\n  Stroke,\n  Style,\n  Text\n} from 'ol/style';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClusterStyleService {\n  private styleCache: Style[] = [];\n\n  public getClusterStyle(size: number): Style | undefined {\n    return this.styleCache[size];\n  }\n\n  public setClusterStyle(size: number): void {\n    this.styleCache[size] = this.createCluster(size);\n  }\n\n  private createCluster(size: number): Style {\n    return new Style({\n      image: new CircleStyle({\n        radius: 15,\n        stroke: new Stroke({\n          color: '#57d09a',\n          width: 2,\n        }),\n        fill: new Fill({\n          color: 'rgba(255, 255, 255, 0.2)',\n        }),\n      }),\n      text: new Text({\n        text: size.toString(),\n        fill: new Fill({\n          color: 'rgba(0, 0, 0, 1.0)',\n        }),\n      }),\n    });\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Host,\n  input,\n  OnDestroy\n} from '@angular/core';\nimport { Feature, Map } from 'ol';\nimport VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\nimport { Cluster } from 'ol/source';\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { ClusterStyleService } from '../../services/cluster-style.service';\nimport { Geometry, Point } from 'ol/geom';\nimport { AxisConverter } from '../../tools/axis-converter';\n\n@Component({\n  selector: 'svm-annotation-cluster-layer',\n  templateUrl: './annotation-cluster-layer.component.html',\n  styleUrls: ['./annotation-cluster-layer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnnotationClusterLayerComponent implements AfterViewInit, OnDestroy {\n  private viewerHost: Map;\n  private source: VectorSource;\n  private layer: VectorLayer<VectorSource>;\n  private cluster: Cluster;\n\n  public clusterDistance = input<number, number>(undefined, {\n    transform: (val: number): number => {\n      if (val) {\n        this.setClusterDistance(val);\n      }\n      return val;\n    }\n  });\n\n  public annotationCentroids = input<number[][], number[][]>(undefined, {\n    transform: (val: number[][]): number[][] => {\n      this.removeAllFeatures();\n      if (val && val.length) {\n        this.addClusters(val);\n      }\n      return val;\n    }\n  });\n\n  constructor(\n    private mapService: MapService,\n    @Host()\n    private mapIdService: MapIdService,\n    private clusterStyleService: ClusterStyleService,\n  ) { }\n\n  public ngAfterViewInit(): void {\n    const id = this.mapIdService;\n    this.viewerHost = this.mapService.getMap(id);\n    this.initialiseLayer();\n  }\n\n  public ngOnDestroy(): void {\n    this.removeAllFeatures();\n  }\n\n  private initialiseLayer(): void {\n    this.source = new VectorSource({\n      wrapX: false\n    });\n    this.cluster = new Cluster({\n      distance: this.clusterDistance(),\n      source: this.source,\n    });\n\n    this.layer = new VectorLayer({\n      source: this.cluster,\n      style: (feature) => {\n        const size = feature.get('features').length;\n        const style = this.clusterStyleService.getClusterStyle(size);\n        if (!style) {\n          this.clusterStyleService.setClusterStyle(size);\n        }\n        return this.clusterStyleService.getClusterStyle(size);\n      }\n    });\n    this.layer.setZIndex(101);\n    this.viewerHost.addLayer(this.layer);\n  }\n\n  private addClusters(clusters: number[][]): void {\n    if (!this.source) {\n      return;\n    }\n    const features = clusters.map(this.convertCoordinatesToFeature);\n    this.source.addFeatures(features);\n  }\n\n  private removeAllFeatures(): void {\n    if (!this.source) {\n      return;\n    }\n    this.source.clear(true);\n  }\n\n  private setClusterDistance(distance: number): void {\n    if (!this.cluster) {\n      return;\n    }\n    this.cluster.setDistance(distance);\n  }\n\n  private convertCoordinatesToFeature(coordinates: number[]): Feature<Geometry> {\n    return new Feature(new Point(AxisConverter.invertYAxis(coordinates)));\n  }\n}\n","<!--<p>annotation-cluster-layer works!</p>-->\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { AfterViewInit, ChangeDetectionStrategy, Component, input, model, OnDestroy, OnInit } from '@angular/core';\nimport { Map } from 'ol';\nimport TileLayer from 'ol/layer/Tile';\nimport { XYZ } from 'ol/source';\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { PROJECTION_KEY } from '../../models/types';\nimport TileGrid from 'ol/tilegrid/TileGrid';\nimport { Slide } from '../../models/slide';\nimport { DEFAULT_LAYER_OPACITY, OpacityChange, PixelMapInput, PixelMapTileRequesterInterface, PixelMapUpdate, ZoomToLevel } from '../../models/pixelmap';\n\n\n@Component({\n  selector: 'svm-pixel-map-layer',\n  templateUrl: './pixel-map-layer.component.html',\n  styleUrls: ['./pixel-map-layer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PixelMapLayerComponent implements OnInit, AfterViewInit, OnDestroy {\n  private map: Map;\n  private layers: TileLayer<XYZ>[] = [];\n\n  public mapId = model<string>();\n\n  public slide = input<Slide, Slide>(undefined, {\n    transform: (val: Slide): Slide => {\n      if (val && this.pixelMapInput()) {\n        this.initSlideMap(val, this.pixelMapInput());\n      } else {\n        this.removeLayers();\n      }\n      return val;\n    }\n  });\n\n  public pixelMapInput = input<PixelMapInput, PixelMapInput>(undefined, {\n    transform: (val: PixelMapInput): PixelMapInput => {\n      if (val && this.slide()) {\n        this.initSlideMap(this.slide(), val);\n      } else {\n        this.removeLayers();\n      }\n      return val;\n    }\n  });\n\n  public pixelMapUpdate = input<PixelMapUpdate, PixelMapUpdate>(undefined, {\n    transform: (val: PixelMapUpdate): PixelMapUpdate => {\n      if (val) {\n        val.channels.forEach(channel => this.layers[channel]?.getSource().refresh());\n      }\n      return val;\n    }\n  });\n\n  public channelOpacity = input<OpacityChange, OpacityChange>(undefined, {\n    transform: (val: OpacityChange): OpacityChange => {\n      if (val) {\n        this.layers[val.channel].setOpacity(val.opacity);\n      }\n      return val;\n    }\n  });\n\n  public zoomToLevel = input<ZoomToLevel, ZoomToLevel>(undefined, {\n    transform: (val: ZoomToLevel): ZoomToLevel => {\n      if (val && this.map) {\n        this.map.getView().setZoom(val.level);\n      }\n      return val;\n    }\n  });\n\n  constructor(\n    private mapService: MapService,\n    private mapIdService: MapIdService,\n  ) {}\n\n  public ngOnInit(): void {\n    this.mapIdService.setId(this.mapId());\n    this.map = this.mapService.getMap(this.mapId());\n\n    if (!this.mapId()) {\n      this.mapId.set('map');\n    }\n  }\n\n  public ngAfterViewInit(): void {\n    if (this.slide() && this.pixelMapInput()) {\n      this.initSlideMap(this.slide(), this.pixelMapInput());\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.removeLayers();\n  }\n\n  private initSlideMap(slide: Slide, pixelMapInput: PixelMapInput): void {\n    if (!this.map) {\n      this.mapIdService.setId(this.mapId());\n      this.map = this.mapService.getMap(this.mapId());\n    }\n\n    this.setNewSources(slide, pixelMapInput);\n\n    this.map.render();\n  }\n\n  private setNewSources(slide: Slide, pixelMapInput: PixelMapInput): void {\n    this.mapService.setImageSources(this.mapId(), slide.slideId);\n    this.removeLayers();\n\n    pixelMapInput.tileRequesters.forEach((tileRequester, i) => {\n      const source = this.createXYZSource(slide, pixelMapInput.tileSize, tileRequester);\n\n      const layer = new TileLayer<XYZ>({\n        source,\n        preload: Infinity,\n      });\n\n      layer.setZIndex(i + 1);\n      layer.setOpacity(DEFAULT_LAYER_OPACITY);\n      this.map.addLayer(layer);\n      this.layers.push(layer);\n    });\n  }\n\n  private createXYZSource(slide: Slide, tileSize: number, tileRequester: PixelMapTileRequesterInterface): XYZ {\n    if (!slide.imageInfo.width || !slide.imageInfo.height || !tileSize) {\n      throw new Error('Unable to load image size!');\n    }\n\n    const minZoom = slide.imageInfo.resolutions.length - slide.imageInfo.numberOfLevels - (slide.resolver.hasArtificialLevel ? 1 : 0);\n    const tileGrid = new TileGrid({\n      resolutions: slide.imageInfo.resolutions,\n      extent: [0, -slide.imageInfo.height, slide.imageInfo.width, 0],\n      origin: [0, 0],\n      tileSize: tileSize,\n      minZoom,\n    });\n\n    return new XYZ({\n      tileGrid,\n      projection: PROJECTION_KEY,\n      url: 'DUMMY_URL',\n      transition: 0,\n      tileLoadFunction: tileRequester.tileLoadFunction.bind(tileRequester),\n    });\n  }\n\n  private removeLayer(channel: number): void {\n    if (this.layers) {\n      this.map.removeLayer(this.layers[channel]);\n      this.layers.splice(channel, 1);\n    }\n  }\n\n  private removeLayers(): void {\n    if (this.layers) {\n      this.layers.forEach(layer => this.map.removeLayer(layer));\n      this.layers = [];\n    }\n  }\n}\n","","import { Component, ChangeDetectionStrategy, ViewChild, NgZone, output } from '@angular/core';\nimport { asyncScheduler, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, observeOn } from 'rxjs/operators';\nimport { IAnnotation, AnnotationsWithUpdates } from '../../models/annotation';\nimport { Store } from '@ngrx/store';\n\nimport {\n  AnnotationSelectors,\n} from '../../store/annotations';\nimport { SlideSelectors } from '../../store/slide';\nimport { MouseInteractionType, ToolbarInteractionType } from '../../models/interaction';\nimport { UiActions, UiSelectors } from '../../store/ui';\nimport { ClusterSelectors } from '../../store/cluster';\nimport { CurrentView, ZoomView } from '../../models/ui';\nimport { Slide } from '../../models/slide';\nimport { SvmErrorMessage } from '../../models/errors';\nimport { CharacterLimit } from '../../models/character-limit';\nimport { CharacterConfigSelectors } from '../../store/character-config';\nimport { compareDistinct } from '../../models/rxjs-operations';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { ToolbarComponent } from '../../components/toolbar/toolbar.component';\nimport { AnnotationHighlightConfig } from '../../config/annotation-highlight.config';\nimport { OpacityChange, PixelMapInput, PixelMapUpdate, ZoomToLevel } from '../../models/pixelmap';\nimport { PixelMapsActions, PixelMapsSelectors } from '../../store/pixel-maps';\nimport { FeatureStyleMapping } from '../../models/feature-style';\nimport { FeaturesSelectors } from '../../store/features';\n\n@Component({\n  selector: 'svm-slide-view-container',\n  templateUrl: './slide-view-container.component.html',\n  styleUrls: ['./slide-view-container.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlideViewContainerComponent {\n  public slide$: Observable<Slide>;\n\n  public annotations$: Observable<AnnotationsWithUpdates>;\n  public discardAnnotations$: Observable<string[]>;\n  public clearAnnotations$: Observable<boolean>;\n  public highlightedAnnotations$: Observable<Array<string>>;\n  public focusedAnnotationId$: Observable<string>;\n  public hiddenAnnotationIds$: Observable<string[]>;\n\n  public selectedDrawTool$: Observable<MouseInteractionType>;\n  public currentUiTool$: Observable<MouseInteractionType>;\n  public deactivateToolbar$: Observable<boolean>;\n  public showAnnotationBar$: Observable<boolean>;\n  public annotationStrokeWidth$: Observable<number>;\n  public featureStyleMapping$: Observable<FeatureStyleMapping>;\n\n  public zoomView$: Observable<ZoomView>;\n  public updateViewer$: Observable<number>;\n\n  public clusterDistance$: Observable<number>;\n  public annotationCentroids$: Observable<number[][]>;\n\n  public autoSetAnnotationTitle$: Observable<boolean>;\n  public renderHideNavigationButton$: Observable<boolean>;\n\n  public allowedInteractionTypes$: Observable<ToolbarInteractionType[] | undefined>;\n\n  public characterConfig$: Observable<CharacterLimit | undefined>;\n  public annotationHighlightConfig$: Observable<AnnotationHighlightConfig>;\n\n  public examinationState$: Observable<boolean | undefined>;\n\n  public pixelMapInput$: Observable<PixelMapInput>;\n  public pixelMapUpdate$: Observable<PixelMapUpdate>;\n  public channelOpacity$: Observable<OpacityChange | undefined>;\n  public zoomToPixelMapLevel$: Observable<ZoomToLevel>;\n\n  public viewerDoubleClicked = output<void>();\n  public annotationCreated = output<IAnnotation>();\n  public annotationHover = output<string[]>();\n  public errorMessage = output<SvmErrorMessage>();\n  public moveEnd = output<CurrentView>();\n  public toolSelected = output<ToolbarInteractionType>();\n  public annotationClick = output<string[]>();\n\n  public id = 'map1'; // Math.random().toString();\n  public id2 = 'map2';\n\n  @ViewChild(ToolbarComponent) toolbar!: ToolbarComponent;\n  private readonly TOOLBAR_TOGGLE_TIMEOUT = 50;\n\n  constructor(\n    private store: Store,\n    private ngZone: NgZone,\n  ) {\n    this.slide$ = this.store.select(SlideSelectors.selectSlide).pipe(\n      distinctUntilChanged((prev, curr) => prev?.slideId === curr?.slideId),\n    );\n\n    this.zoomView$ = this.store.select(UiSelectors.selectZoomView);\n\n    this.annotations$ = this.store\n      .select(AnnotationSelectors.selectRenderAnnotationsWithUpdate)\n      .pipe(\n        filter(a => !!a.annotations),\n      );\n\n    this.discardAnnotations$ = this.store.select(AnnotationSelectors.selectDiscardAnnotationIds);\n\n    this.clearAnnotations$ = this.store.select(AnnotationSelectors.selectClearState).pipe(\n      observeOn(asyncScheduler)\n    );\n\n    this.highlightedAnnotations$ = this.store.select(AnnotationSelectors.selectHighlighted);\n\n    this.focusedAnnotationId$ = this.store.select(AnnotationSelectors.selectFocused);\n\n    this.hiddenAnnotationIds$ = this.store\n      .select(AnnotationSelectors.selectHiddenAnnotationIds)\n      .pipe(\n        distinctUntilChanged(\n          compareDistinct\n        )\n      );\n\n    this.currentUiTool$ = this.store.select(UiSelectors.selectUiTool);\n\n    this.selectedDrawTool$ = this.store.select(UiSelectors.selectUiDrawTool);\n\n    this.clusterDistance$ = this.store.select(ClusterSelectors.selectClusterDistance);\n\n    this.annotationCentroids$ = this.store.select(AnnotationSelectors.selectCentroids);\n\n    this.showAnnotationBar$ = this.store.select(UiSelectors.selectAnnotationBarVisibility);\n\n    this.updateViewer$ = this.store.select(UiSelectors.selectUpdateViewer);\n\n    this.autoSetAnnotationTitle$ = this.store.select(UiSelectors.selectAutoAnnotationTitle);\n\n    this.renderHideNavigationButton$ = this.store.select(UiSelectors.selectRenderHideNavigationButton);\n\n    this.allowedInteractionTypes$ = this.store.select(UiSelectors.selectAllowedInteractionTypes);\n\n    this.characterConfig$ = this.store.select(CharacterConfigSelectors.selectCharacterConfig);\n\n    this.annotationHighlightConfig$ = this.store.select(UiSelectors.selectAnnotationHighlightConfig);\n\n    this.examinationState$ = this.store.select(UiSelectors.selectExaminationState);\n\n    this.pixelMapInput$ = this.store.select(PixelMapsSelectors.selectPixelMapInput);\n\n    this.pixelMapUpdate$ = this.store.select(PixelMapsSelectors.selectPixelMapUpdate);\n\n    this.channelOpacity$ = this.store.select(PixelMapsSelectors.selectChannelOpacity);\n\n    this.annotationStrokeWidth$ = this.store.select(UiSelectors.selectAnnotationStrokeWidth);\n\n    this.featureStyleMapping$ = this.store.select(FeaturesSelectors.selectFeatureStyleMapping);\n\n    this.zoomToPixelMapLevel$ = this.store.select(PixelMapsSelectors.selectZoomToLevel);\n  }\n\n  public featureHover(ids: string[]): void {\n    this.annotationHover.emit(ids);\n    // TODO: Check if necessary\n    // this.store.dispatch(AnnotationActions.highlightAnnotations({ ids }));\n  }\n\n  public annotationCreate(annotation: IAnnotation): void {\n    this.annotationCreated.emit(annotation);\n  }\n\n  public toolSelectionChanged(mode: ToolbarInteractionType): void {\n    this.toolSelected.emit(mode);\n    this.store.dispatch(UiActions.setUiToolMode({ toolMode: { left: mode } }));\n  }\n\n  public viewChanged(view: CurrentView): void {\n    this.moveEnd.emit(view);\n  }\n\n  public zoomViewChanged(view: ZoomView): void {\n    this.store.dispatch(UiActions.zoomviewChanged({ zoomview: view }));\n  }\n\n  public onErrorMessage(message: SvmErrorMessage): void {\n    this.errorMessage.emit(message);\n  }\n\n  public onViewerToolbarChange(): void {\n    setTimeout(\n      (triggers: MatMenuTrigger[]) => {\n        triggers?.forEach(t => t?.updatePosition());\n      },\n      this.TOOLBAR_TOGGLE_TIMEOUT,\n      [this.toolbar?.annotationTrigger, this.toolbar?.pixelMapTrigger]\n    );\n    this.viewerDoubleClicked.emit();\n  }\n\n  public onChannelOpacityChanged(channelOpacity: OpacityChange): void {\n    this.ngZone.run(() => {\n      this.store.dispatch(PixelMapsActions.sVMSetChannelOpacity({ channelOpacity }));\n    });\n  }\n\n  public onAnnotationStrokeWidthChanged(annotationStrokeWidth: number): void {\n    this.ngZone.run(() => {\n      this.store.dispatch(UiActions.setAnnotationStrokeWidth({ annotationStrokeWidth }));\n    });\n  }\n}\n","<div class=\"example-boundary\">\n  <div class=\"flex-100\">\n    @if (slide$|async; as slide) {\n      <svm-viewer\n        [mapId]=\"id\"\n        [slide]=\"slide\"\n        [updateViewer]=\"(updateViewer$|async)\"\n        [zoomView]=\"(zoomView$|async)\"\n        (moveEnd)=\"viewChanged($event)\"\n        (moveEndZoomView)=\"zoomViewChanged($event)\"\n        (doubleClick)=\"onViewerToolbarChange()\">\n        <div class=\"tools-container click-trough\">\n          <div class=\"svm-toolbar-container\">\n            <div class=\"svm-toolbar\">\n              @if ((showAnnotationBar$ | async)) {\n                <svm-toolbar\n                  class=\"clickable\"\n                  [renderHideNavigationButton]=\"(renderHideNavigationButton$|async)\"\n                  [activeTool]=\"(currentUiTool$|async)?.left\"\n                  [allowedTools]=\"(allowedInteractionTypes$|async)\"\n                  [isExaminationClosed]=\"(examinationState$|async)\"\n                  [pixelMapInput]=\"(pixelMapInput$|async)\"\n                  [annotationStrokeWidth]=\"(annotationStrokeWidth$|async)\"\n                  (selectedTool)=\"toolSelectionChanged($event)\"\n                  (toggleAppNavigation)=\"onViewerToolbarChange()\"\n                  (channelOpacityChanged)=\"onChannelOpacityChanged($event)\"\n                  (strokeWidthChanged)=\"onAnnotationStrokeWidthChanged($event)\">\n                </svm-toolbar>\n              }\n              <!-- If you want to create a ui for multi channel with user color choice, use  \"@angular-material-components/color-picker\" -->\n            </div>\n          </div>\n          <div class=\"svm-overview-container\">\n            <div class=\"svm-overview\">\n              <svm-dnd-container\n                class=\"clickable\"\n                [resetSize]=\"slide?.slideId\">\n                <svm-ext-overview\n                  [slide]=\"slide\"\n                  [zoomView]=\"(zoomView$|async)\"></svm-ext-overview>\n              </svm-dnd-container>\n            </div>\n          </div>\n        </div>\n        <div class=\"svm-zoom-scale-container click-trough\">\n          <svm-ext-zoom-slider\n            class=\"svm-zoom-slider clickable\"\n            [slide]=\"slide\"\n            [zoomView]=\"(zoomView$|async)\"></svm-ext-zoom-slider>\n          <svm-scale-line class=\"svm-scale-line\"></svm-scale-line>\n        </div>\n        <!-- <svm-measurement-tool [isActive]=\"(isMeasuring$|async)\"></svm-measurement-tool> -->\n        <svm-annotation-create\n          (annotationCreated)=\"annotationCreate($event)\"\n          (errorMessage)=\"onErrorMessage($event)\"\n          [slideId]=\"slide?.slideId\"\n          [autoSetAnnotationTitle]=\"(autoSetAnnotationTitle$ | async)\"\n          [annotationCharacterConfig]=\"(characterConfig$ | async).annotation\"\n          [drawMode]=\"(selectedDrawTool$|async)\"\n          [featureStyleMapping]=\"(featureStyleMapping$|async)\">\n        </svm-annotation-create>\n        <svm-annotation-layer\n          (hoveredFeatures)=\"featureHover($event)\"\n          (clickedFeature)=\"annotationClick.emit($event)\"\n          (errorMessage)=\"onErrorMessage($event)\"\n          [addAnnotations]=\"(annotations$|async)\"\n          [removeAnnotations]=\"(discardAnnotations$|async)\"\n          [clearAnnotations]=\"(clearAnnotations$|async)\"\n          [hideAnnotations]=\"(hiddenAnnotationIds$|async)\"\n          [highlightedFeatures]=\"(highlightedAnnotations$|async)\"\n          [focusFeature]=\"(focusedAnnotationId$|async)\"\n          [highlightConfig]=\"(annotationHighlightConfig$|async)\"\n          [featureStyleMapping]=\"(featureStyleMapping$|async)\">\n        </svm-annotation-layer>\n        <svm-annotation-cluster-layer\n          [clusterDistance]=\"(clusterDistance$ | async)\"\n          [annotationCentroids]=\"(annotationCentroids$ | async)\">\n        </svm-annotation-cluster-layer>\n        <div class=\"tools-container click-trough\">\n          <div class=\"svm-pixel-map\">\n            <svm-pixel-map-layer\n              [mapId]=\"id\"\n              [slide]=\"slide\"\n              [pixelMapInput]=\"(pixelMapInput$|async)\"\n              [pixelMapUpdate]=\"(pixelMapUpdate$|async)\"\n              [channelOpacity]=\"(channelOpacity$|async)\"\n              [zoomToLevel]=\"(zoomToPixelMapLevel$|async)\">\n            </svm-pixel-map-layer>\n          </div>\n        </div>\n        <!-- <svm-overview></svm-overview> -->\n        <!-- <svm-ext-overview></svm-ext-overview> -->\n      </svm-viewer>\n    }\n  </div>\n  <!-- for Testing a second parallel opened Slide -->\n  <!-- <div>\n    <svm-viewer\n      [mapId]=\"id2\"\n      [slideId]=\"'fakeSlideId03'\">\n    </svm-viewer>\n  </div> -->\n</div>\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  OnDestroy,\n  output,\n  input,\n} from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Slide } from '../../models/slide';\nimport { IAnnotation, AnnotationEntity } from '../../models/annotation';\nimport { CurrentView } from '../../models/ui';\nimport { logger, LOG_LEVEL } from '../../tools/logger';\n\nimport { Store } from '@ngrx/store';\nimport { SlideActions } from '../../store/slide';\nimport {\n  AnnotationActions,\n  AnnotationSelectors\n} from '../../store/annotations';\nimport { UiActions } from '../../store/ui';\nimport { SlideViewerModuleConfiguration } from '../../config/module-config';\nimport { CLEAR_STORE } from '../../store/meta.reducer';\nimport { ToolbarInteractionType } from '../../models/interaction';\nimport { ClusterActions } from '../../store/cluster';\nimport { UiConfig } from '../../models/viewer-config';\nimport { CharacterLimit } from '../../models/character-limit';\nimport { CharacterConfigActions } from '../../store/character-config';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { AnnotationHighlightConfig } from '../../config/annotation-highlight.config';\nimport { PixelMapsActions } from '../../store/pixel-maps';\nimport { ClassColorMapping } from '../../models/feature-style';\nimport { PixelMapInput, PixelMapUpdate, ZoomToLevel } from '../../models/pixelmap';\nimport { FeaturesActions } from '../../store/features';\n\n@UntilDestroy()\n@Component({\n  selector: 'svm-slide-viewer',\n  templateUrl: './slide-viewer.component.html',\n  styleUrls: ['./slide-viewer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlideViewerComponent implements OnDestroy {\n  private destroy$ = new Subject();\n\n  public annotationAdded = output<Partial<IAnnotation>>();\n  public annotationHover = output<string[]>();\n  public annotationClick = output<string[]>();\n  public annotationErrorMessage = output<string>();\n\n  public slideMoveEnd = output<CurrentView>();\n  // @Output() public selectedSlideChanged = new EventEmitter<string>();\n  public doubleClicked = output<void>();\n  public toolSelected = output<ToolbarInteractionType>();\n  public requestAnnotations = output<string[]>();\n\n  public slide = input<Slide, Slide>(undefined, {\n    transform: (val: Slide): Slide => {\n      this.store.dispatch(SlideActions.addSlide({ slide: val }));\n      return val;\n    }\n  });\n\n  public selectedSlideId = input<string, string>(undefined, {\n    transform: (val: string): string => {\n      this.store.dispatch(SlideActions.selectSlideId({ slideId: val }));\n      return val;\n    }\n  });\n\n  public annotationIds = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      this.store.dispatch(\n        AnnotationActions.setAnnotationIds({ annotationIds: val })\n      );\n      return val;\n    }\n  });\n\n  public annotations = input<AnnotationEntity[], AnnotationEntity[]>(undefined, {\n    transform: (val: AnnotationEntity[]): AnnotationEntity[] => {\n      if (val?.length) {\n        this.store.dispatch(\n          AnnotationActions.setAnnotations({ annotations: val })\n        );\n      }\n      return val;\n    }\n  });\n\n  public hideAnnotationIds = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      if (val) {\n        this.store.dispatch(AnnotationActions.hideAnnotations({ hiddenIds: val }));\n      }\n      return val;\n    }\n  });\n\n  public removeAnnotations = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      if (val) {\n        this.store.dispatch(AnnotationActions.hideAnnotations({ hiddenIds: val }));\n      }\n      return val;\n    }\n  });\n\n  public clearAnnotations = input<boolean, boolean>(undefined, {\n    transform: (val: boolean): boolean => {\n      if (val) {\n        this.store.dispatch(AnnotationActions.clearAnnotations());\n      }\n      return val;\n    }\n  });\n\n  public highlightAnnotations = input<string[], string[]>(undefined, {\n    transform: (val: string[]): string[] => {\n      if (val) {\n        this.store.dispatch(AnnotationActions.highlightAnnotations({ ids: val }));\n      }\n      return val;\n    }\n  });\n\n  public focusAnnotation = input<string, string>(undefined, {\n    transform: (val: string): string => {\n      this.store.dispatch(AnnotationActions.focusAnnotation({ id: val }));\n      return val;\n    }\n  });\n\n  public clusterDistance = input<number, number>(undefined, {\n    transform: (val: number): number => {\n      if (val) {\n        this.store.dispatch(\n          ClusterActions.setClusterDistance({ clusterDistance: val })\n        );\n      }\n      return val;\n    }\n  });\n\n  public annotationCentroidsForClustering = input<number[][], number[][]>(undefined, {\n    transform: (val: number[][]): number[][] => {\n      if (val) {\n        this.store.dispatch(\n          AnnotationActions.setCentroids({\n            centroids: val\n          })\n        );\n      }\n      return val;\n    }\n  });\n\n  public uiConfig = input<UiConfig, UiConfig>(undefined, {\n    transform: (val: UiConfig): UiConfig => {\n      if (val) {\n        this.store.dispatch(\n          UiActions.setUIConfig({\n            uiConfig: val\n          })\n        );\n      }\n      return val;\n    }\n  });\n\n  public updateSlideViewer = input<number, number>(undefined, {\n    transform: (val: number): number => {\n      this.store.dispatch(UiActions.setUpdateViewer({ update: val }));\n      return val;\n    }\n  });\n\n  public interactionType = input<ToolbarInteractionType, ToolbarInteractionType>(undefined, {\n    transform: (val: ToolbarInteractionType): ToolbarInteractionType => {\n      this.store.dispatch(UiActions.setUiToolMode({ toolMode: { left: val } }));\n      return val;\n    }\n  });\n\n  public allowedInteractionTypes = input<ToolbarInteractionType[], ToolbarInteractionType[]>(undefined, {\n    transform: (val: ToolbarInteractionType[]): ToolbarInteractionType[] => {\n      this.store.dispatch(UiActions.setAllowedInteractionTypes({ allowedTypes: val }));\n      return val;\n    }\n  });\n\n  public characterConfig = input<CharacterLimit, CharacterLimit>(undefined, {\n    transform: (val: CharacterLimit): CharacterLimit => {\n      this.store.dispatch(CharacterConfigActions.setCharacterConfig({ config: val }));\n      return val;\n    }\n  });\n\n  public examinationState = input<boolean, boolean>(undefined, {\n    transform: (val: boolean): boolean => {\n      if (val !== null && val !== undefined) {\n        this.store.dispatch(UiActions.setExaminationState({ examinationClosed: val }));\n      }\n      return val;\n    }\n  });\n\n  public annotationHighlightConfig = input<AnnotationHighlightConfig, AnnotationHighlightConfig>(undefined, {\n    transform: (val: AnnotationHighlightConfig): AnnotationHighlightConfig => {\n      this.store.dispatch(UiActions.setAnnotationHighlightConfig({ annotationHighlightConfig: val }));\n      return val;\n    }\n  });\n\n  public pixelMapInput = input<PixelMapInput, PixelMapInput>(undefined, {\n    transform: (val: PixelMapInput): PixelMapInput => {\n      this.store.dispatch(PixelMapsActions.sVMSetPixelMapInput({ pixelMapInput: val }));\n      return val;\n    }\n  });\n\n  public pixelMapUpdate = input<PixelMapUpdate, PixelMapUpdate>(undefined, {\n    transform: (val: PixelMapUpdate): PixelMapUpdate => {\n      if (val) {\n        this.store.dispatch(PixelMapsActions.sVMUpdatePixelMap({ pixelMapUpdate: val }));\n      }\n      return val;\n    }\n  });\n\n  public classColorMapping = input<ClassColorMapping, ClassColorMapping>(undefined, {\n    transform: (val: ClassColorMapping): ClassColorMapping => {\n      if (val) {\n        this.store.dispatch(FeaturesActions.setClassColorMapping({ classColorMapping: val }));\n      }\n      return val;\n    }\n  });\n\n  public zoomToPixelMapLevel = input<ZoomToLevel, ZoomToLevel>(undefined, {\n    transform: (val: ZoomToLevel): ZoomToLevel => {\n      if (val) {\n        this.store.dispatch(PixelMapsActions.sVMZoomToPixelMapLevel({ zoomToLevel: val }));\n      }\n      return val;\n    }\n  });\n\n  constructor(\n    private store: Store,\n    public config: SlideViewerModuleConfiguration,\n  ) {\n    this.store\n      .select(AnnotationSelectors.selectMissingCachedAnnotations)\n      .pipe(\n        takeUntil(this.destroy$),\n        filter(ids => !!ids.missingAnnotations.length)\n      )\n      .subscribe(ids => this.requestAnnotations.emit(ids.missingAnnotations));\n\n    if (config.logging === true) {\n      logger.setLevel(LOG_LEVEL.VERBOSE);\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next(null);\n    this.store.dispatch(CLEAR_STORE());\n  }\n\n}\n","<div class=\"example-boundary\">\n  <svm-slide-view-container\n    (viewerDoubleClicked)=\"doubleClicked.emit()\"\n    (annotationCreated)=\"annotationAdded.emit($event)\"\n    (annotationHover)=\"annotationHover.emit($event)\"\n    (annotationClick)=\"annotationClick.emit($event)\"\n    (errorMessage)=\"annotationErrorMessage.emit($event)\"\n    (moveEnd)=\"slideMoveEnd.emit($event)\"\n    (toolSelected)=\"toolSelected.emit($event)\"\n    >\n  </svm-slide-view-container>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport * as fromStore from './module.state';\nimport { SVM_FEATURE_KEY } from './store.keys';\nimport { AnnotationEffects } from './annotations';\nimport { SlideEffects } from './slide';\nimport { UiEffects } from './ui';\nimport { FeaturesEffects } from './features';\nimport { PixelMapsEffects } from './pixel-maps';\n@NgModule({\n  imports: [\n    CommonModule,\n    /**\n     * StoreModule.forFeature is used for composing state\n     * from feature modules. These modules can be loaded\n     * eagerly or lazily and will be dynamically added to\n     * the existing state.\n     */\n    StoreModule.forFeature(\n      SVM_FEATURE_KEY,\n      fromStore.reducersSVM,\n      { metaReducers: fromStore.metaReducers }\n    ),\n\n    /**\n     * Effects.forFeature is used to register effects\n     * from feature modules. Effects can be loaded\n     * eagerly or lazily and will be started immediately.\n     *\n     * All Effects will only be instantiated once regardless of\n     * whether they are registered once or multiple times.\n     */\n    EffectsModule.forFeature([\n      SlideEffects,\n      AnnotationEffects,\n      UiEffects,\n      FeaturesEffects,\n      PixelMapsEffects,\n    ]),\n  ],\n  // declarations: [],\n})\nexport class SvmStoreModule { }\n","import { AfterViewInit, Component, ElementRef, input, Renderer2, } from '@angular/core';\nimport { DrawEvent } from 'ol/interaction/Draw';\nimport Overlay from 'ol/Overlay';\nimport { EventsKey } from 'ol/events';\nimport OlMap from 'ol/Map';\nimport { Draw } from 'ol/interaction';\nimport VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\nimport { MapService } from '../../services/map.service';\nimport { MapIdService } from '../../services/map-id.service';\nimport { DrawType, InteractionType } from '../../models/interaction';\nimport BaseEvent from 'ol/events/Event';\nimport { Geometry, LineString } from 'ol/geom';\nimport { Feature } from 'ol';\nimport { OpenLayersDrawFactory } from '../../tools/ol-draw-factory';\nimport { unByKey } from 'ol/Observable';\nimport { Fill, Stroke, Style } from 'ol/style';\nimport { PROJECTION_M_TO_NM } from '../../models/types';\n\n@Component({\n  selector: 'svm-measurement-tool',\n  templateUrl: './measurement-tool.component.html',\n  styleUrls: ['./measurement-tool.component.scss'],\n  // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n  host: {\n    '(document:keydown)': 'onKeyPressed($event)',\n  },\n})\nexport class MeasurementToolComponent implements  AfterViewInit {\n  private viewerHost: OlMap;\n  private draw: Draw;\n  private source: VectorSource;\n  private layer: VectorLayer<VectorSource>;\n  private measureTooltip: Overlay;\n  private listener: EventsKey;\n  private sketch: Feature<Geometry>;\n\n  public isActive = input<boolean, boolean>(undefined, {\n    transform: (val: boolean): boolean => {\n      if (val) {\n        this.setMeasureActive();\n      } else {\n        this.disableDraw();\n      }\n      return val;\n    }\n  });\n\n  private measureStyle = new Style({\n    fill: new Fill({\n      color: 'rgba(255, 255, 255, 0.2)',\n    }),\n    stroke: new Stroke({\n      color: 'rgba(0, 0, 0, 0.5)',\n      lineDash: [10, 10],\n      width: 3,\n    }),\n  });\n\n  constructor(\n    private mapService: MapService,\n    private mapIdService: MapIdService,\n    private renderer: Renderer2,\n    private measureTooltipElement: ElementRef\n  ) {}\n\n\n  public ngAfterViewInit(): void {\n    this.initDraw();\n  }\n\n  public initDraw(): void {\n    this.source = new VectorSource({ wrapX: false });\n    this.layer = new VectorLayer({\n      source: this.source,\n      style: this.measureStyle,\n    });\n    this.viewerHost = this.mapService.getMap(this.mapIdService);\n\n    this.layer.setVisible(true);\n    this.layer.setZIndex(10);\n\n    this.viewerHost.addLayer(this.layer);\n    this.createMeasureTooltip();\n  }\n\n  public setMeasureActive(): void {\n    if (!this.viewerHost) {\n      return;\n    }\n\n    const mode = DrawType.LineString;\n    this.disableDraw();\n    const openLayersDraw = OpenLayersDrawFactory.fromDrawType(\n      mode,\n      this.source,\n      { left: InteractionType.Measure },\n    );\n    this.draw = openLayersDraw.getDraw();\n\n    this.viewerHost.addInteraction(this.draw);\n\n    this.draw.on('drawstart', (event: DrawEvent) => this.onMeasureStart(event));\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    this.draw.on('drawabort', (event: DrawEvent) => this.onMeasureAbort());\n    this.draw.on('drawend', (event: DrawEvent) => this.onMeasureEnd(event));\n  }\n\n  public disableDraw(): void {\n    if (!this.viewerHost) {\n      return;\n    }\n\n    this.viewerHost.removeInteraction(this.draw);\n    if (this.draw) {\n      this.draw.abortDrawing();\n      this.draw.setActive(false);\n    }\n  }\n\n  public onMeasureStart(event: DrawEvent): void {\n    this.sketch = event.feature;\n    this.listener = this.sketch.getGeometry().on('change', (evt: BaseEvent) => {\n      const geometry = evt.target;\n      if (geometry instanceof LineString) {\n        const output = this.formatLength(geometry);\n        const coordinates = geometry.getLastCoordinate();\n        this.measureTooltipElement.nativeElement.innerHTML = output;\n        this.measureTooltip.setPosition(coordinates);\n      }\n    });\n  }\n\n  public onMeasureAbort(): void {\n    this.createMeasureTooltip();\n  }\n\n  public onMeasureEnd(event: DrawEvent): void {\n    this.viewerHost.removeInteraction(this.draw);\n    this.sketch = event.feature;\n    const geometry = event.feature.getGeometry();\n    if (geometry instanceof LineString) {\n      this.measureTooltipElement.nativeElement.className =\n        'ol-tooltip ol-tooltip-static';\n      this.measureTooltip.setOffset([0, -7]);\n      this.measureTooltipElement.nativeElement = null;\n      this.createMeasureTooltip();\n      this.sketch = undefined;\n    }\n\n    unByKey(this.listener);\n  }\n\n  public onKeyPressed(event: KeyboardEvent): void {\n    if (event.code === 'Escape' && this.draw && this.draw.getActive()) {\n      this.draw.abortDrawing();\n    }\n  }\n\n  private formatLength(line: LineString): string {\n    const npp =\n      this.viewerHost.getView().getProjection().getMetersPerUnit() * PROJECTION_M_TO_NM;\n    const length = line.getLength() * npp;\n\n    let output: string;\n    if (length >= 1e7) {\n      output = (length / 1e7).toFixed(2) + ' cm';\n    } else if (length >= 1e6) {\n      output = (length / 1e6).toFixed(2) + ' mm';\n    } else if (length >= 1e3) {\n      output = (length / 1e3).toFixed(2) + ' \\u00b5m';\n    } else {\n      output = length.toFixed(2) + ' nm';\n    }\n    return output;\n  }\n\n  private createMeasureTooltip(): void {\n    if (this.measureTooltipElement.nativeElement) {\n      this.measureTooltipElement.nativeElement.parentNode.removeChild(\n        this.measureTooltipElement.nativeElement\n      );\n      this.measureTooltipElement.nativeElement = this.renderer.createElement(\n        'div'\n      ) as HTMLDivElement;\n      this.measureTooltipElement.nativeElement.className =\n        'ol-tooltip ol-tooltip-measure';\n      this.measureTooltip = new Overlay({\n        element: this.measureTooltipElement.nativeElement,\n        offset: [0, -15],\n        positioning: 'bottom-center',\n      });\n      this.viewerHost.addOverlay(this.measureTooltip);\n    }\n  }\n}\n","<!-- <p>measurement-tool works!</p> -->\n","\nexport enum DataCreatorType {\n  Job = 'job',\n  User = 'user',\n  Scope = 'scope'\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MaterialModule } from './material/material.module';\nimport { ResizableModule } from 'angular-resizable-element';\nimport {\n  TileResolverInterface,\n  Slide,\n  ImageInfo,\n  Level,\n  Channel,\n  ChannelInfo,\n  Color\n} from './models/slide';\nimport {\n  PixelMapTileRequesterInterface,\n  PixelMapInput,\n  PixelMapUpdate,\n  ChannelClassMapping,\n  ZoomToLevel,\n} from './models/pixelmap';\nimport { TileResolver } from './tools/tile-resolver';\nimport {\n  IAnnotation,\n  IAnnotationCircle,\n  IAnnotationPoint,\n  IAnnotationPolygon,\n  IAnnotationRectangle,\n  AnnotationRectangle,\n  AnnotationCircle,\n  AnnotationPolygon,\n  AnnotationPoint,\n  AnnotationReferenceType,\n  AnnotationEntity,\n} from './models/annotation';\nimport { UiConfig } from './models/viewer-config';\nimport { TileConnector, RawMultichannelData } from './models/tile-connector';\nimport { WSIFileFormat } from './models/file-format';\nimport {\n  AnnotationCharacterLimit,\n  CharacterLimit,\n} from './models/character-limit';\n\n\n/** module config */\nimport {\n  SlideViewerModuleConfigurationParams,\n  SlideViewerModuleConfiguration\n} from './config/module-config';\n\n/* containers */\nimport { SlideViewerComponent } from './containers/slide-viewer/slide-viewer.component';\nimport { SlideViewContainerComponent } from './containers/slide-view-container/slide-view-container.component';\n\n/* view components */\n//import { OverviewComponent } from './components/overview/overview.component';\nimport { ScaleLineComponent } from './components/scale-line/scale-line.component';\n//import { ZoomSliderComponent } from './components/zoom-slider/zoom-slider.component';\nimport { ViewerComponent } from './components/viewer/viewer.component';\nimport { ExtOverviewComponent } from './components/ext-overview/ext-overview.component';\nimport { DndContainerComponent } from './components/dnd-container/dnd-container.component';\nimport { CreateAnnotationCardComponent } from './components/create-annotation-card/create-annotation-card.component';\nimport { ToolbarComponent } from './components/toolbar/toolbar.component';\nimport { AnnotationLayerComponent } from './components/annotation-layer/annotation-layer.component';\nimport { CurrentView, ZoomView } from './models/ui';\n\nimport { StoreModule } from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { SvmStoreModule } from './store/svm-store.module';\nimport { AnnotationCreateComponent } from './components/annotation-create/annotation-create.component';\nimport { MeasurementToolComponent } from './components/measurement-tool/measurement-tool.component';\nimport { AnnotationType } from './models/annotation-type';\nimport { LetDirective, PushPipe } from '@ngrx/component';\nimport { ExtZoomSliderComponent } from './components/ext-zoom-slider/ext-zoom-slider.component';\nimport { AnnotationClusterLayerComponent } from './components/annotation-cluster-layer/annotation-cluster-layer.component';\nimport { ToolbarInteractionType, InteractionType, DrawType } from './models/interaction';\nimport { DataCreatorType } from './models/creator';\nimport { Class } from './models/class';\nimport { CloseElementDirective } from './directives/close-element.directive';\nimport { AnnotationHighlightConfig, HighlightType } from './config/annotation-highlight.config';\nimport { PixelMapLayerComponent } from './components/pixel-map-layer/pixel-map-layer.component';\nimport { PixelMapOpacityMenuComponent } from './components/pixel-map-opacity-menu/pixel-map-opacity-menu.component';\nimport { ClassColorMapping, ColorState } from './models/feature-style';\n\nexport {\n  /**\n   * Component exports\n   * TODO: do not export components that are not for the public api\n   */\n  SlideViewerComponent,\n  /**\n   * Interface exports\n   * TODO: do not export interfaces that are not for the public api\n   */\n  TileResolverInterface,\n  TileResolver,\n  PixelMapTileRequesterInterface,\n  ChannelClassMapping,\n  PixelMapInput,\n  PixelMapUpdate,\n  ZoomToLevel,\n  IAnnotation as Annotation,\n  AnnotationCircle,\n  AnnotationRectangle,\n  AnnotationPolygon,\n  AnnotationPoint,\n  AnnotationType,\n  AnnotationReferenceType,\n  AnnotationEntity,\n  IAnnotationCircle,\n  IAnnotationPoint,\n  IAnnotationPolygon,\n  IAnnotationRectangle,\n  Class,\n  DataCreatorType,\n  Slide,\n  Channel,\n  ChannelInfo,\n  ImageInfo,\n  Level,\n  Color,\n  TileConnector,\n  RawMultichannelData,\n  WSIFileFormat,\n  CurrentView,\n  ZoomView,\n  ToolbarInteractionType,\n  InteractionType,\n  DrawType,\n  UiConfig,\n  AnnotationCharacterLimit,\n  CharacterLimit,\n  AnnotationHighlightConfig,\n  HighlightType,\n  ColorState,\n  ClassColorMapping,\n};\n\n/**\n * Module Components\n */\nconst COMPONENTS = [\n  SlideViewContainerComponent,\n  ViewerComponent,\n  //OverviewComponent,\n  ExtOverviewComponent,\n  ScaleLineComponent,\n  //ZoomSliderComponent,\n  ExtZoomSliderComponent,\n  DndContainerComponent,\n  CreateAnnotationCardComponent,\n  ToolbarComponent,\n  AnnotationLayerComponent,\n  AnnotationCreateComponent,\n  SlideViewerComponent,\n  MeasurementToolComponent,\n  AnnotationClusterLayerComponent,\n  PixelMapLayerComponent,\n  PixelMapOpacityMenuComponent,\n];\n\n@NgModule({\n  declarations: [...COMPONENTS, CloseElementDirective,],\n  imports: [\n    CommonModule,\n    MaterialModule,\n    MatMenuModule,\n    ReactiveFormsModule,\n    DragDropModule,\n    ResizableModule,\n    SvmStoreModule,\n    StoreModule.forRoot({\n      /* EMPTY Root store */\n    }),\n    StoreDevtoolsModule.instrument({\n      name: 'Slide Viewer Module'\n      // In a production build you would want to disable the Store Devtools\n      // logOnly: environment.production,\n      ,connectInZone: true}),\n    LetDirective,\n    PushPipe,\n  ],\n  exports: [\n    SlideViewerComponent\n  ],\n  providers: [\n    SlideViewerModuleConfiguration,\n  ]\n})\nexport class SlideViewerModule {\n  static forRoot(params: SlideViewerModuleConfigurationParams = {}): ModuleWithProviders<SlideViewerModule> {\n    return {\n      ngModule: SlideViewerModule,\n      providers: [\n        {\n          provide: SlideViewerModuleConfiguration,\n          useValue: params\n        }\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["selectSlideId","initialState","AnnotationActions.addAnnotation","AnnotationActions.setAnnotations","AnnotationActions.clearAnnotations","AnnotationActions.highlightAnnotations","AnnotationActions.focusAnnotation","AnnotationActions.setCentroids","AnnotationActions.setAnnotationIds","AnnotationActions.discardAnnotations","AnnotationActions.hideAnnotations","reducer","SlideActions.addSlideReady","SlideActions.selectSlideId","selectSlide","UiActions.setUiToolMode","UiActions.zoomviewChanged","UiActions.setUIConfig","UiActions.setAnnotationBarVisibility","UiActions.setAutoAnnotationTitle","UiActions.setRenderHideNavigationButton","UiActions.setUpdateViewer","UiActions.setAllowedInteractionTypes","UiActions.setExaminationState","UiActions.setAnnotationHighlightConfig","UiActions.setAnnotationStrokeWidth","ClusterActions.setClusterDistance","CharacterConfigActions.setCharacterConfig","SlideFeature.reducer","AnnotationFeature.reducer","UiFeature.reducer","ClusterFeature.reducer","CharacterConfigFeature.reducer","PixelMapsFeature.reducer","FeaturesFeature.reducer","SlideActions.addSlide","SlideSelectors.selectSlide","SlideSelectors.selectSlideId","SlideActions.selectedSlideChanged","i2","AnnotationsActions.setAnnotationIds","AnnotationsActions.setAnnotationIdsReady","AnnotationsSelectors.selectMissingCachedAnnotations","AnnotationsSelectors.selectCurrentAnnotationCacheSize","AnnotationsSelectors.selectMaxAnnotationCacheSize","AnnotationsActions.discardAnnotations","AnnotationsActions.clearAnnotations","i3.AnnotationMappingService","UiActions.viewportChanged","i1","CircleStyle","UiSelectors.selectAnnotationStrokeWidth","FeaturesSelectors.selectFeatureStyleMapping","i3.FeatureStyleService","i3","i7.PixelMapOpacityMenuComponent","i8.CloseElementDirective","Circle","olAddProjection","i1.MapService","i2.MapIdService","i3.ViewerCalculationsService","Map","i3.ResizableElementService","i1.MapIdService","i2.MapService","i4","i5","i1.ResizableElementService","Feature","ɵINPUT_SIGNAL_BRAND_WRITE_TYPE","i3.ClusterStyleService","UiSelectors.selectZoomView","AnnotationSelectors.selectRenderAnnotationsWithUpdate","AnnotationSelectors.selectDiscardAnnotationIds","AnnotationSelectors.selectClearState","AnnotationSelectors.selectHighlighted","AnnotationSelectors.selectFocused","AnnotationSelectors.selectHiddenAnnotationIds","UiSelectors.selectUiTool","UiSelectors.selectUiDrawTool","ClusterSelectors.selectClusterDistance","AnnotationSelectors.selectCentroids","UiSelectors.selectAnnotationBarVisibility","UiSelectors.selectUpdateViewer","UiSelectors.selectAutoAnnotationTitle","UiSelectors.selectRenderHideNavigationButton","UiSelectors.selectAllowedInteractionTypes","CharacterConfigSelectors.selectCharacterConfig","UiSelectors.selectAnnotationHighlightConfig","UiSelectors.selectExaminationState","PixelMapsSelectors.selectPixelMapInput","PixelMapsSelectors.selectPixelMapUpdate","PixelMapsSelectors.selectChannelOpacity","PixelMapsSelectors.selectZoomToLevel","i2.ViewerComponent","i3.ExtOverviewComponent","i4.ScaleLineComponent","i5.ExtZoomSliderComponent","i6.DndContainerComponent","i7.ToolbarComponent","i8.AnnotationLayerComponent","i9.AnnotationCreateComponent","i10.AnnotationClusterLayerComponent","i11.PixelMapLayerComponent","i12","AnnotationSelectors.selectMissingCachedAnnotations","takeUntil","i2.SlideViewerModuleConfiguration","i3.SlideViewContainerComponent","fromStore.reducersSVM","fromStore.metaReducers","Overlay"],"mappings":"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"}