{"version":3,"file":"ngx-dicom.mjs","sources":["../../../projects/ngx-dicom-lib/src/lib/ngx-dicom.component.ts","../../../projects/ngx-dicom-lib/src/lib/ngx-dicom.component.html","../../../projects/ngx-dicom-lib/src/lib/ngx-dicom.module.ts","../../../projects/ngx-dicom-lib/src/lib/models.ts","../../../projects/ngx-dicom-lib/src/public-api.ts","../../../projects/ngx-dicom-lib/src/ngx-dicom.ts"],"sourcesContent":["import {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  ViewChild\r\n} from '@angular/core';\r\n\r\n// @ts-ignore\r\nimport * as cornerstone from 'cornerstone-core';\r\n// @ts-ignore\r\nimport * as cornerstoneMath from 'cornerstone-math';\r\n// @ts-ignore\r\nimport * as cornerstoneTools from 'cornerstone-tools';\r\n// @ts-ignore\r\nimport Hammer from 'hammerjs';\r\n// @ts-ignore\r\nimport cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';\r\nimport { IDicomConfig, IStack, IViewerProvider } from './models';\r\n\r\n@Component({\r\n  selector: 'ngx-dicom',\r\n  templateUrl: './ngx-dicom.component.html',\r\n  styleUrls: ['./ngx-dicom.component.scss']\r\n})\r\nexport class NgxDicomComponent implements AfterViewInit {\r\n  @Input() config: IDicomConfig;\r\n  @Output() initialized = new EventEmitter<IViewerProvider>();\r\n\r\n  @ViewChild('dicomViewport') viewport: ElementRef;\r\n\r\n  private element: Element;\r\n  private stack: IStack;\r\n  private provider: IViewerProvider = {\r\n    element: null,\r\n    cornerstoneTools,\r\n    cornerstone\r\n  };\r\n  private isMultiFrame: boolean;\r\n  private playClipActive: boolean;\r\n\r\n  constructor() {\r\n    cornerstoneTools.external.cornerstone = cornerstone;\r\n    cornerstoneTools.external.cornerstoneMath = cornerstoneMath;\r\n    cornerstoneTools.external.Hammer = Hammer;\r\n    cornerstoneWADOImageLoader.external.cornerstone = cornerstone;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.element = this.viewport.nativeElement;\r\n    cornerstoneTools.init(\r\n      {\r\n        showSVGCursors: true,\r\n      }\r\n    );\r\n    cornerstone.enable(this.element);\r\n    this.registerImageLoader();\r\n  }\r\n\r\n  private registerImageLoader(): void {\r\n    const schema = this.config.fileUrl.split(':')[0];\r\n    cornerstone.registerImageLoader(schema, cornerstoneWADOImageLoader.wadouri.loadImage);\r\n    this.load();\r\n  }\r\n\r\n  private load(): void {\r\n    cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.load(\r\n      this.config.fileUrl,\r\n      cornerstoneWADOImageLoader.internal.xhrRequest\r\n    ).then((dataSet: any) => {\r\n      const numFrames = dataSet.intString('x00280008');\r\n      if (!numFrames) {\r\n        this.loadImage(this.config.fileUrl);\r\n      } else {\r\n        this.isMultiFrame = true;\r\n        this.loadWithMultiFrame(numFrames);\r\n      }\r\n    });\r\n  }\r\n\r\n  private loadWithMultiFrame(numFrames: number): void {\r\n    const imageIds = [];\r\n    const imageIdRoot = 'wadouri:' + this.config.fileUrl;\r\n\r\n    for (let i = 0; i < numFrames; i++) {\r\n      const imageId = imageIdRoot + \"?frame=\" + i;\r\n      imageIds.push(imageId);\r\n    }\r\n\r\n    this.stack = {\r\n      currentImageIdIndex: 0,\r\n      imageIds: imageIds\r\n    };\r\n\r\n    // cornerstoneTools.setElementToolStateManager(this.element, cornerstoneTools.newStackSpecificToolStateManager);\r\n    cornerstoneTools.addStackStateManager(this.element, ['stack']);\r\n    cornerstoneTools.addToolState(this.element, 'stack', this.stack);\r\n    this.loadImage(imageIds[0]);\r\n  }\r\n\r\n  private loadImage(url: string): void {\r\n    cornerstone.loadAndCacheImage(url).then((image: any) => {\r\n      cornerstone.displayImage(this.element, image);\r\n      this.initTools();\r\n      cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.unload(url);\r\n      this.initializeProvider();\r\n    });\r\n  }\r\n\r\n  private initTools(): void {\r\n    if (this.config.tools) {\r\n      this.config.tools.forEach((tool) => {\r\n        const apiTool = cornerstoneTools[`${tool.name}Tool`];\r\n        cornerstoneTools.addTool(apiTool);\r\n        cornerstoneTools[`setTool${tool.mode}`](tool.name, tool.options);\r\n        if (tool.state) {\r\n          cornerstoneTools.addToolState(this.element, tool.name, tool.state);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  private initializeProvider(): void {\r\n    if (this.isMultiFrame) {\r\n      this.provider.playClip = {\r\n        play: (frameRate => {\r\n          if (!this.playClipActive) {\r\n            cornerstoneTools.playClip(this.element, frameRate);\r\n            this.playClipActive = true;\r\n          }\r\n        }),\r\n        stop: () => {\r\n          if (this.playClipActive) {\r\n            cornerstoneTools.stopClip(this.element);\r\n            this.playClipActive = false;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    this.provider.element = this.element;\r\n    this.initialized.emit(this.provider);\r\n  }\r\n}\r\n","<div [classList]=\"config.classList\" #dicomViewport></div>\r\n","import { NgModule } from '@angular/core';\r\nimport { NgxDicomComponent } from './ngx-dicom.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    NgxDicomComponent\r\n  ],\r\n  imports: [\r\n  ],\r\n  exports: [\r\n    NgxDicomComponent,\r\n  ],\r\n})\r\nexport class NgxDicomModule { }\r\n","export interface IDicomConfig {\r\n  fileUrl: string;\r\n  tools?: ITool[];\r\n  classList?: string;\r\n}\r\n\r\nexport interface IStack {\r\n  currentImageIdIndex: number;\r\n  imageIds: string[];\r\n}\r\n\r\nexport interface IViewerProvider {\r\n  element: any;\r\n  cornerstoneTools: any;\r\n  cornerstone: any;\r\n  playClip?: {\r\n    play(frameRate: number): void;\r\n    stop(): void;\r\n  };\r\n}\r\n\r\nexport interface ITool {\r\n  name: string;\r\n  options: any;\r\n  mode: ToolModeEnum;\r\n  state?: any;\r\n}\r\n\r\nexport enum ToolModeEnum {\r\n  Active = 'Active',\r\n  Passive = 'Passive',\r\n  Enabled = 'Enabled',\r\n  Disabled  = 'Disabled'\r\n}\r\n","/*\r\n * Public API Surface of ngx-dicom-lib\r\n */\r\n\r\nexport * from './lib/ngx-dicom.component';\r\nexport * from './lib/ngx-dicom.module';\r\nexport * from './lib/models';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}