{"version":3,"file":"ng-cornerstone.mjs","sources":["../../../projects/ng-cornerstone/src/lib/core/config/types.ts","../../../projects/ng-cornerstone/src/lib/core/util/convert.ts","../../../projects/ng-cornerstone/src/lib/core/provider/ptScalingMetaDataProvider.ts","../../../projects/ng-cornerstone/src/lib/core/init/initProviders.ts","../../../projects/ng-cornerstone/src/lib/core/init/initVolumeLoader.js","../../../projects/ng-cornerstone/src/lib/core/init/cornerstone.service.ts","../../../projects/ng-cornerstone/src/lib/core/provider/getPixelSpacingInformation.ts","../../../projects/ng-cornerstone/src/lib/core/provider/getPTImageIdInstanceMetadata.ts","../../../projects/ng-cornerstone/src/lib/core/provider/image-id.service.ts","../../../projects/ng-cornerstone/src/lib/core/provider/setCtTransferFunctionForVolumeActor.ts","../../../projects/ng-cornerstone/src/lib/core/provider/setStackForViewports.ts","../../../projects/ng-cornerstone/src/lib/core/config/layout.ts","../../../projects/ng-cornerstone/src/lib/components/icon/icon.component.ts","../../../projects/ng-cornerstone/src/lib/components/button/button.component.ts","../../../projects/ng-cornerstone/src/lib/components/button/button.component.html","../../../projects/ng-cornerstone/src/lib/components/button/button-group.component.ts","../../../projects/ng-cornerstone/src/lib/components/icon/icon.service.ts","../../../projects/ng-cornerstone/src/lib/components/icon/icon.module.ts","../../../projects/ng-cornerstone/src/lib/components/button/button.module.ts","../../../projects/ng-cornerstone/src/lib/tool/tool.types.ts","../../../projects/ng-cornerstone/src/lib/tool/tool.config.ts","../../../projects/ng-cornerstone/src/lib/tool/tool-bar.component.ts","../../../projects/ng-cornerstone/src/lib/tool/tool-bar.component.html","../../../projects/ng-cornerstone/src/lib/tool/tool.module.ts","../../../projects/ng-cornerstone/src/lib/viewport/base-viewport.component.ts","../../../projects/ng-cornerstone/src/lib/viewport/viewport.component.ts","../../../projects/ng-cornerstone/src/lib/viewport/stack-viewport.component.ts","../../../projects/ng-cornerstone/src/lib/viewport/volume3d-viewport.component.ts","../../../projects/ng-cornerstone/src/lib/viewport/orthographic-viewport.component.ts","../../../projects/ng-cornerstone/src/lib/viewport/viewport.module.ts","../../../projects/ng-cornerstone/src/lib/viewer/viewer.component.ts","../../../projects/ng-cornerstone/src/lib/viewer/viewer.component.html","../../../projects/ng-cornerstone/src/lib/viewer/viewer.module.ts","../../../projects/ng-cornerstone/src/ng-cornerstone.ts"],"sourcesContent":["import { Enums as csCoreEnum } from '@cornerstonejs/core';\nimport { Enums as csToolEnum } from '@cornerstonejs/tools';\n\nexport type SafeAny = any;\nexport type FunctionProp<T> = (...args: SafeAny[]) => T;\n\nexport enum RequestSchema {\n  wadoRs = 'wadors:',\n  wadoUri = 'wadouri:',\n  nifti = 'nifti:',\n}\n\nexport enum VolumeLoaderSchema {\n  stream = 'cornerstoneStreamingImageVolume',\n  dynamicStream = 'cornerstoneStreamingDynamicImageVolume',\n  nifti = 'nifti',\n}\n\nexport interface ImageInfo {\n  imageIds?: string[]; // Auto-filled property, used for stack viewport\n  volumeId?: string; // Auto-filled property, used for volume3d viewport\n  studyInstanceUID?: string;\n  seriesInstanceUID?: string;\n  sopInstanceUIDs?: string[];\n  urlRoot: string;\n  schema: RequestSchema;\n  viewportType: csCoreEnum.ViewportType;\n  segmentType?: csToolEnum.SegmentationRepresentations;\n}\n\nexport function imageInfoToUniqueId(imageInfo: ImageInfo): string {\n  if (imageInfo) {\n    if (imageInfo.schema === RequestSchema.wadoRs) {\n      return RequestSchema.wadoRs + imageInfo?.studyInstanceUID + imageInfo?.seriesInstanceUID;\n    } else if (imageInfo.schema === RequestSchema.nifti) {\n      return RequestSchema.nifti + imageInfo.urlRoot;\n    } else {\n      console.error('Unsupported request schema');\n      return '';\n    }\n  }\n  return '';\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { _isNumberValue, coerceBooleanProperty, coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { FunctionProp, SafeAny } from '../config/types';\n\nexport function toBoolean(value: boolean | string): boolean {\n  return coerceBooleanProperty(value);\n}\n\nexport function toNumber(value: number | string): number;\nexport function toNumber<D>(value: number | string, fallback: D): number | D;\nexport function toNumber(value: number | string, fallbackValue: number = 0): number {\n  return _isNumberValue(value) ? Number(value) : fallbackValue;\n}\n\nexport function toCssPixel(value: number | string): string {\n  return coerceCssPixelValue(value);\n}\n\n// eslint-disable  no-invalid-this\n\n/**\n * Get the function-property type's value\n */\nexport function valueFunctionProp<T>(prop: FunctionProp<T> | T, ...args: SafeAny[]): T {\n  return typeof prop === 'function' ? (prop as FunctionProp<T>)(...args) : prop;\n}\n\nfunction propDecoratorFactory<T, D>(name: string, fallback: (v: T) => D): (target: SafeAny, propName: string) => void {\n  function propDecorator(\n    target: SafeAny,\n    propName: string,\n    originalDescriptor?: TypedPropertyDescriptor<SafeAny>,\n  ): SafeAny {\n    const privatePropName = `$$__zorroPropDecorator__${propName}`;\n\n    if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {\n      console.warn(`The prop \"${privatePropName}\" is already exist, it will be overrided by ${name} decorator.`);\n    }\n\n    Object.defineProperty(target, privatePropName, {\n      configurable: true,\n      writable: true,\n    });\n\n    return {\n      get(): string {\n        return originalDescriptor && originalDescriptor.get\n          ? originalDescriptor.get.bind(this)()\n          : this[privatePropName];\n      },\n      set(value: T): void {\n        if (originalDescriptor && originalDescriptor.set) {\n          originalDescriptor.set.bind(this)(fallback(value));\n        }\n        this[privatePropName] = fallback(value);\n      },\n    };\n  }\n\n  return propDecorator;\n}\n\n/**\n * Input decorator that handle a prop to do get/set automatically with toBoolean\n *\n * Why not using @InputBoolean alone without @Input? AOT needs @Input to be visible\n *\n * @howToUse\n * ```\n * @Input() @InputBoolean() visible: boolean = false;\n *\n * // Act as below:\n * // @Input()\n * // get visible() { return this.__visible; }\n * // set visible(value) { this.__visible = value; }\n * // __visible = false;\n * ```\n */\nexport function InputBoolean(): SafeAny {\n  return propDecoratorFactory('InputBoolean', toBoolean);\n}\n\nexport function InputCssPixel(): SafeAny {\n  return propDecoratorFactory('InputCssPixel', toCssPixel);\n}\n\nexport function InputNumber(fallbackValue?: SafeAny): SafeAny {\n  return propDecoratorFactory('InputNumber', (value: string | number) => toNumber(value, fallbackValue));\n}\n","import { utilities as csUtils } from '@cornerstonejs/core';\n\nconst scalingPerImageId = {};\n\nfunction addInstance(imageId, scalingMetaData) {\n  const imageURI = csUtils.imageIdToURI(imageId);\n  scalingPerImageId[imageURI] = scalingMetaData;\n}\n\nfunction get(type, imageId) {\n  if (type === 'scalingModule') {\n    const imageURI = csUtils.imageIdToURI(imageId);\n    return scalingPerImageId[imageURI];\n  }\n}\n\nexport default { addInstance, get };\n","import * as cornerstone from '@cornerstonejs/core';\nimport ptScalingMetaDataProvider from '../provider/ptScalingMetaDataProvider';\n\nconst { calibratedPixelSpacingMetadataProvider } = cornerstone.utilities;\n\nexport default function initProviders() {\n  cornerstone.metaData.addProvider(ptScalingMetaDataProvider.get.bind(ptScalingMetaDataProvider), 10000);\n  cornerstone.metaData.addProvider(\n    calibratedPixelSpacingMetadataProvider.get.bind(calibratedPixelSpacingMetadataProvider),\n    11000,\n  );\n}\n","import { cornerstoneNiftiImageLoader } from '@cornerstonejs/nifti-volume-loader';\nimport { VolumeLoaderSchema } from '../config/types';\nimport {\n  imageLoader,\n  volumeLoader,\n  cornerstoneStreamingImageVolumeLoader,\n  cornerstoneStreamingDynamicImageVolumeLoader,\n} from '@cornerstonejs/core';\n\nexport default function initVolumeLoader() {\n  volumeLoader.registerUnknownVolumeLoader(cornerstoneStreamingImageVolumeLoader);\n  volumeLoader.registerVolumeLoader(VolumeLoaderSchema.stream, cornerstoneStreamingImageVolumeLoader);\n  volumeLoader.registerVolumeLoader(VolumeLoaderSchema.dynamicStream, cornerstoneStreamingDynamicImageVolumeLoader);\n  imageLoader.registerImageLoader(VolumeLoaderSchema.nifti, cornerstoneNiftiImageLoader);\n}\n","import initProviders from './initProviders';\nimport initVolumeLoader from './initVolumeLoader';\nimport {\n  cache,\n  eventTarget,\n  imageLoader,\n  init as csRenderInit,\n  metaData,\n  RenderingEngine,\n  Types as csCoreTypes,\n} from '@cornerstonejs/core';\nimport * as polySeg from '@cornerstonejs/polymorphic-segmentation';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { init as csToolInit, Types as csToolTypes, destroy } from '@cornerstonejs/tools';\nimport { Subject } from 'rxjs';\nimport cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CornerstoneService implements OnDestroy {\n  private renderingEngineId = 'RENDERING_ENGINE_ID';\n  private renderingEngine!: RenderingEngine;\n  private toolGroup!: csToolTypes.IToolGroup;\n  private initialized = false;\n\n  constructor() {}\n\n  async init() {\n    try {\n      if (this.initialized) {\n        return;\n      }\n\n      initProviders();\n      cornerstoneDICOMImageLoader.init();\n      initVolumeLoader();\n      await Promise.all([\n        csRenderInit(),\n        csToolInit({\n          addons: {\n            polySeg: polySeg as any,\n          },\n        }),\n      ]);\n\n      this.renderingEngine = new RenderingEngine(this.renderingEngineId);\n\n      this.initialized = true;\n      console.debug('CornerstoneService initialized');\n    } catch (error) {\n      console.error('Failed to initialize CornerstoneService:', error);\n      throw error;\n    }\n  }\n\n  private checkInitialized() {\n    if (!this.initialized) {\n      throw new Error('CornerstoneService not initialized');\n    }\n  }\n\n  setToolGroup(toolGroup: csToolTypes.IToolGroup) {\n    this.toolGroup = toolGroup;\n  }\n\n  getRenderingEngine() {\n    this.checkInitialized();\n    return this.renderingEngine;\n  }\n\n  getRenderingEngineId() {\n    return this.renderingEngineId;\n  }\n\n  getToolGroup() {\n    return this.toolGroup;\n  }\n\n  ngOnDestroy(): void {\n    this.renderingEngine.destroy();\n    eventTarget.reset();\n    cache.purgeCache();\n    destroy();\n    metaData.removeAllProviders();\n    imageLoader.unregisterAllImageLoaders();\n    console.debug('cs service destroyed');\n  }\n}\n","// See https://github.com/OHIF/Viewers/blob/94a9067fe3d291d30e25a1bda5913511388edea2/platform/core/src/utils/metadataProvider/getPixelSpacingInformation.js\n\nexport default function getPixelSpacingInformation(instance) {\n  // See http://gdcm.sourceforge.net/wiki/index.php/Imager_Pixel_Spacing\n\n  // TODO: Add Ultrasound region spacing\n  // TODO: Add manual calibration\n\n  // TODO: Use ENUMS from dcmjs\n  const projectionRadiographSOPClassUIDs = [\n    '1.2.840.10008.5.1.4.1.1.1', //\tCR Image Storage\n    '1.2.840.10008.5.1.4.1.1.1.1', //\tDigital X-Ray Image Storage – for Presentation\n    '1.2.840.10008.5.1.4.1.1.1.1.1', //\tDigital X-Ray Image Storage – for Processing\n    '1.2.840.10008.5.1.4.1.1.1.2', //\tDigital Mammography X-Ray Image Storage – for Presentation\n    '1.2.840.10008.5.1.4.1.1.1.2.1', //\tDigital Mammography X-Ray Image Storage – for Processing\n    '1.2.840.10008.5.1.4.1.1.1.3', //\tDigital Intra – oral X-Ray Image Storage – for Presentation\n    '1.2.840.10008.5.1.4.1.1.1.3.1', //\tDigital Intra – oral X-Ray Image Storage – for Processing\n    '1.2.840.10008.5.1.4.1.1.12.1', //\tX-Ray Angiographic Image Storage\n    '1.2.840.10008.5.1.4.1.1.12.1.1', //\tEnhanced XA Image Storage\n    '1.2.840.10008.5.1.4.1.1.12.2', //\tX-Ray Radiofluoroscopic Image Storage\n    '1.2.840.10008.5.1.4.1.1.12.2.1', //\tEnhanced XRF Image Storage\n    '1.2.840.10008.5.1.4.1.1.12.3', // X-Ray Angiographic Bi-plane Image Storage\tRetired\n  ];\n\n  const {\n    PixelSpacing,\n    ImagerPixelSpacing,\n    SOPClassUID,\n    PixelSpacingCalibrationType,\n    PixelSpacingCalibrationDescription,\n    EstimatedRadiographicMagnificationFactor,\n    SequenceOfUltrasoundRegions,\n  } = instance;\n\n  const isProjection = projectionRadiographSOPClassUIDs.includes(SOPClassUID);\n\n  const TYPES = {\n    NOT_APPLICABLE: 'NOT_APPLICABLE',\n    UNKNOWN: 'UNKNOWN',\n    CALIBRATED: 'CALIBRATED',\n    DETECTOR: 'DETECTOR',\n  };\n\n  if (!isProjection) {\n    return PixelSpacing;\n  }\n\n  if (isProjection && !ImagerPixelSpacing) {\n    // If only Pixel Spacing is present, and this is a projection radiograph,\n    // PixelSpacing should be used, but the user should be informed that\n    // what it means is unknown\n    return {\n      PixelSpacing,\n      type: TYPES.UNKNOWN,\n      isProjection,\n    };\n  } else if (PixelSpacing && ImagerPixelSpacing && PixelSpacing === ImagerPixelSpacing) {\n    // If Imager Pixel Spacing and Pixel Spacing are present and they have the same values,\n    // then the user should be informed that the measurements are at the detector plane\n    return {\n      PixelSpacing,\n      type: TYPES.DETECTOR,\n      isProjection,\n    };\n  } else if (PixelSpacing && ImagerPixelSpacing && PixelSpacing !== ImagerPixelSpacing) {\n    // If Imager Pixel Spacing and Pixel Spacing are present and they have different values,\n    // then the user should be informed that these are \"calibrated\"\n    // (in some unknown manner if Pixel Spacing Calibration Type and/or\n    // Pixel Spacing Calibration Description are absent)\n    return {\n      PixelSpacing,\n      type: TYPES.CALIBRATED,\n      isProjection,\n      PixelSpacingCalibrationType,\n      PixelSpacingCalibrationDescription,\n    };\n  } else if (!PixelSpacing && ImagerPixelSpacing) {\n    let CorrectedImagerPixelSpacing = ImagerPixelSpacing;\n    if (EstimatedRadiographicMagnificationFactor) {\n      // Note that in IHE Mammo profile compliant displays, the value of Imager Pixel Spacing is required to be corrected by\n      // Estimated Radiographic Magnification Factor and the user informed of that.\n      // TODO: should this correction be done before all of this logic?\n      CorrectedImagerPixelSpacing = ImagerPixelSpacing.map(\n        (pixelSpacing) => pixelSpacing / EstimatedRadiographicMagnificationFactor,\n      );\n    } else {\n      console.warn('EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing.');\n    }\n\n    return {\n      PixelSpacing: CorrectedImagerPixelSpacing,\n      isProjection,\n    };\n  } else if (SequenceOfUltrasoundRegions && typeof SequenceOfUltrasoundRegions === 'object') {\n    const { PhysicalDeltaX, PhysicalDeltaY } = SequenceOfUltrasoundRegions;\n    const USPixelSpacing = [PhysicalDeltaX * 10, PhysicalDeltaY * 10];\n\n    return {\n      PixelSpacing: USPixelSpacing,\n    };\n  } else if (\n    SequenceOfUltrasoundRegions &&\n    Array.isArray(SequenceOfUltrasoundRegions) &&\n    SequenceOfUltrasoundRegions.length > 1\n  ) {\n    console.warn(\n      'Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.',\n    );\n  } else if (!isProjection && !ImagerPixelSpacing) {\n    // If only Pixel Spacing is present, and this is not a projection radiograph,\n    // we can stop here\n    return {\n      PixelSpacing,\n      type: TYPES.NOT_APPLICABLE,\n      isProjection,\n    };\n  }\n\n  console.warn('Unknown combination of PixelSpacing and ImagerPixelSpacing identified. Unable to determine spacing.');\n}\n","import { metaData } from '@cornerstonejs/core';\nimport type { InstanceMetadata } from '@cornerstonejs/calculate-suv';\n\nexport default function getPTImageIdInstanceMetadata(imageId: string): InstanceMetadata {\n  const petSequenceModule = metaData.get('petIsotopeModule', imageId);\n  const generalSeriesModule = metaData.get('generalSeriesModule', imageId);\n  const patientStudyModule = metaData.get('patientStudyModule', imageId);\n\n  const ptSeriesModule = metaData.get('petSeriesModule', imageId);\n  const ptImageModule = metaData.get('petImageModule', imageId);\n\n  if (!petSequenceModule) {\n    throw new Error('petSequenceModule metadata is required');\n  }\n\n  const radiopharmaceuticalInfo = petSequenceModule.radiopharmaceuticalInfo;\n\n  const { seriesDate, seriesTime, acquisitionDate, acquisitionTime } = generalSeriesModule;\n  const { patientWeight } = patientStudyModule;\n  const { correctedImage, units, decayCorrection } = ptSeriesModule;\n\n  if (\n    seriesDate === undefined ||\n    seriesTime === undefined ||\n    patientWeight === undefined ||\n    acquisitionDate === undefined ||\n    acquisitionTime === undefined ||\n    correctedImage === undefined ||\n    units === undefined ||\n    decayCorrection === undefined ||\n    radiopharmaceuticalInfo.radionuclideTotalDose === undefined ||\n    radiopharmaceuticalInfo.radionuclideHalfLife === undefined ||\n    (radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime === undefined &&\n      seriesDate === undefined &&\n      radiopharmaceuticalInfo.radiopharmaceuticalStartTime === undefined)\n    //\n  ) {\n    throw new Error('required metadata are missing');\n  }\n\n  const instanceMetadata: InstanceMetadata = {\n    CorrectedImage: correctedImage,\n    Units: units,\n    RadionuclideHalfLife: radiopharmaceuticalInfo.radionuclideHalfLife,\n    RadionuclideTotalDose: radiopharmaceuticalInfo.radionuclideTotalDose,\n    DecayCorrection: decayCorrection,\n    PatientWeight: patientWeight,\n    SeriesDate: seriesDate,\n    SeriesTime: seriesTime,\n    AcquisitionDate: acquisitionDate,\n    AcquisitionTime: acquisitionTime,\n  };\n\n  if (\n    radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime &&\n    radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== undefined &&\n    typeof radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime === 'string'\n  ) {\n    instanceMetadata.RadiopharmaceuticalStartDateTime = radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime;\n  }\n\n  if (\n    radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime &&\n    radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== undefined &&\n    typeof radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== 'string'\n  ) {\n    const dateString = convertInterfaceDateToString(radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime);\n    instanceMetadata.RadiopharmaceuticalStartDateTime = dateString;\n  }\n\n  if (\n    instanceMetadata.AcquisitionDate &&\n    instanceMetadata.AcquisitionDate !== undefined &&\n    typeof instanceMetadata.AcquisitionDate !== 'string'\n  ) {\n    const dateString = convertInterfaceDateToString(instanceMetadata.AcquisitionDate);\n    instanceMetadata.AcquisitionDate = dateString;\n  }\n\n  if (\n    instanceMetadata.SeriesDate &&\n    instanceMetadata.SeriesDate !== undefined &&\n    typeof instanceMetadata.SeriesDate !== 'string'\n  ) {\n    const dateString = convertInterfaceDateToString(instanceMetadata.SeriesDate);\n    instanceMetadata.SeriesDate = dateString;\n  }\n\n  if (\n    radiopharmaceuticalInfo.radiopharmaceuticalStartTime &&\n    radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== undefined &&\n    typeof radiopharmaceuticalInfo.radiopharmaceuticalStartTime === 'string'\n  ) {\n    instanceMetadata.RadiopharmaceuticalStartTime = radiopharmaceuticalInfo.radiopharmaceuticalStartTime;\n  }\n\n  if (\n    radiopharmaceuticalInfo.radiopharmaceuticalStartTime &&\n    radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== undefined &&\n    typeof radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== 'string'\n  ) {\n    const timeString = convertInterfaceTimeToString(radiopharmaceuticalInfo.radiopharmaceuticalStartTime);\n    instanceMetadata.RadiopharmaceuticalStartTime = timeString;\n  }\n\n  if (\n    instanceMetadata.AcquisitionTime &&\n    instanceMetadata.AcquisitionTime !== undefined &&\n    typeof instanceMetadata.AcquisitionTime !== 'string'\n  ) {\n    const timeString = convertInterfaceTimeToString(instanceMetadata.AcquisitionTime);\n    instanceMetadata.AcquisitionTime = timeString;\n  }\n\n  if (\n    instanceMetadata.SeriesTime &&\n    instanceMetadata.SeriesTime !== undefined &&\n    typeof instanceMetadata.SeriesTime !== 'string'\n  ) {\n    const timeString = convertInterfaceTimeToString(instanceMetadata.SeriesTime);\n    instanceMetadata.SeriesTime = timeString;\n  }\n\n  if (ptImageModule.frameReferenceTime && ptImageModule.frameReferenceTime !== undefined) {\n    instanceMetadata.FrameReferenceTime = ptImageModule.frameReferenceTime;\n  }\n\n  if (ptImageModule.actualFrameDuration && ptImageModule.actualFrameDuration !== undefined) {\n    instanceMetadata.ActualFrameDuration = ptImageModule.actualFrameDuration;\n  }\n\n  if (patientStudyModule.patientSex && patientStudyModule.patientSex !== undefined) {\n    instanceMetadata.PatientSex = patientStudyModule.patientSex;\n  }\n\n  if (patientStudyModule.patientSize && patientStudyModule.patientSize !== undefined) {\n    instanceMetadata.PatientSize = patientStudyModule.patientSize;\n  }\n\n  // Todo: add private tags\n  // if (\n  //   dicomMetaData['70531000'] ||\n  //   dicomMetaData['70531000'] !== undefined ||\n  //   dicomMetaData['70531009'] ||\n  //   dicomMetaData['70531009'] !== undefined\n  // ) {\n  //   const philipsPETPrivateGroup: PhilipsPETPrivateGroup = {\n  //     SUVScaleFactor: dicomMetaData['70531000'],\n  //     ActivityConcentrationScaleFactor: dicomMetaData['70531009'],\n  //   };\n  //   instanceMetadata.PhilipsPETPrivateGroup = philipsPETPrivateGroup;\n  // }\n\n  // if (dicomMetaData['0009100d'] && dicomMetaData['0009100d'] !== undefined) {\n  //   instanceMetadata.GEPrivatePostInjectionDateTime = dicomMetaData['0009100d'];\n  // }\n\n  return instanceMetadata;\n}\n\nfunction convertInterfaceTimeToString(time): string {\n  const hours = `${time.hours || '00'}`.padStart(2, '0');\n  const minutes = `${time.minutes || '00'}`.padStart(2, '0');\n  const seconds = `${time.seconds || '00'}`.padStart(2, '0');\n\n  const fractionalSeconds = `${time.fractionalSeconds || '000000'}`.padEnd(6, '0');\n\n  const timeString = `${hours}${minutes}${seconds}.${fractionalSeconds}`;\n  return timeString;\n}\n\nfunction convertInterfaceDateToString(date): string {\n  const month = `${date.month}`.padStart(2, '0');\n  const day = `${date.day}`.padStart(2, '0');\n  const dateString = `${date.year}${month}${day}`;\n  return dateString;\n}\n\nexport { getPTImageIdInstanceMetadata };\n","import { Injectable } from '@angular/core';\nimport { metaData, utilities } from '@cornerstonejs/core';\nimport { api } from 'dicomweb-client';\nimport cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';\nimport dcmjs from 'dcmjs';\nimport getPixelSpacingInformation from './getPixelSpacingInformation';\nimport { calculateSUVScalingFactors, InstanceMetadata } from '@cornerstonejs/calculate-suv';\nimport { ImageInfo, RequestSchema } from '../config/types';\nimport { getPTImageIdInstanceMetadata } from './getPTImageIdInstanceMetadata';\nimport ptScalingMetaDataProvider from './ptScalingMetaDataProvider';\n\nconst { DicomMetaDictionary } = dcmjs.data;\n@Injectable({\n  providedIn: 'root',\n})\nexport class ImageIdService {\n  constructor() {}\n\n  async wadoRsCreateImageIdsAndCacheMetaData(imageInfo: ImageInfo): Promise<string[]> {\n    const MODALITY = '00080060';\n    const SOP_INSTANCE_UID = '00080018';\n    const { urlRoot, studyInstanceUID, seriesInstanceUID } = imageInfo;\n    const client = new api.DICOMwebClient({ url: urlRoot });\n    const instances = await client.retrieveSeriesMetadata({\n      studyInstanceUID,\n      seriesInstanceUID,\n    });\n    const modality = instances[0][MODALITY].Value[0];\n    let sopInstanceUIDSet;\n    if (imageInfo?.sopInstanceUIDs && imageInfo?.sopInstanceUIDs.length >= 0) {\n      sopInstanceUIDSet = new Set<string>(imageInfo?.sopInstanceUIDs);\n    } else {\n      const instanceUIDs = instances.map((instanceMetaData) => {\n        return instanceMetaData[SOP_INSTANCE_UID].Value[0];\n      });\n      sopInstanceUIDSet = new Set<string>(instanceUIDs);\n      imageInfo.sopInstanceUIDs = instanceUIDs;\n    }\n    let imageIds: string[] = [];\n    instances.forEach((instanceMetaData) => {\n      const sopInstanceUID = instanceMetaData[SOP_INSTANCE_UID].Value[0];\n      if (sopInstanceUIDSet.has(sopInstanceUID)) {\n        const imageId = ImageIdService.wadoRsCreateImageIds({\n          ...imageInfo,\n          sopInstanceUIDs: [sopInstanceUID],\n        });\n        imageIds.push(...imageId); // only one image id\n        cornerstoneDICOMImageLoader.wadors.metaDataManager.add(imageId[0], instanceMetaData);\n      }\n    });\n    imageIds = this.convertMultiframeImageIds(imageIds);\n\n    this.pixelSpacingProvider(imageIds);\n\n    if (modality === 'PT') {\n      this.ptProvider(imageIds);\n    }\n    return imageIds;\n  }\n\n  static createImageIds(imageInfo: ImageInfo) {\n    if (imageInfo?.schema === RequestSchema.wadoRs) {\n      return ImageIdService.wadoRsCreateImageIds(imageInfo);\n    } else if (imageInfo?.schema === RequestSchema.wadoUri) {\n      return ImageIdService.wadoURICreateImageIds(imageInfo);\n    }\n    return [];\n  }\n\n  static wadoURICreateImageIds(imageInfo: ImageInfo): string[] {\n    if (!imageInfo.sopInstanceUIDs || imageInfo.sopInstanceUIDs.length === 0) {\n      console.error('Invalid image info', imageInfo);\n      return [];\n    }\n    const { urlRoot, studyInstanceUID, seriesInstanceUID, sopInstanceUIDs } = imageInfo;\n    const wadoURIRoot = `${RequestSchema.wadoUri}${urlRoot}?requestType=WADO&studyUID=${studyInstanceUID}&seriesUID=${seriesInstanceUID}&contentType=application%2Fdicom`;\n    return sopInstanceUIDs!.map((uid) => {\n      return `${wadoURIRoot}&objectUID=${uid}`;\n    });\n  }\n\n  static wadoRsCreateImageIds(imageInfo: ImageInfo): string[] {\n    if (!imageInfo.sopInstanceUIDs || imageInfo.sopInstanceUIDs.length === 0) {\n      console.error('Invalid image info', imageInfo);\n      return [];\n    }\n    const { urlRoot, studyInstanceUID, seriesInstanceUID, sopInstanceUIDs } = imageInfo;\n    const wadoURIRoot = `${RequestSchema.wadoRs}${urlRoot}/studies/${studyInstanceUID}/series/${seriesInstanceUID}`;\n    return sopInstanceUIDs!.map((uid) => {\n      return `${wadoURIRoot}/instances/${uid}/frames/1`;\n    });\n  }\n\n  convertMultiframeImageIds(imageIds: string[]): string[] {\n    const newImageIds: string[] = [];\n    imageIds.forEach((imageId) => {\n      const { imageIdFrameless } = this.getFrameInformation(imageId);\n      const instanceMetaData = metaData.get('multiframeModule', imageId);\n      if (instanceMetaData && instanceMetaData.NumberOfFrames && instanceMetaData.NumberOfFrames > 1) {\n        const NumberOfFrames = instanceMetaData.NumberOfFrames;\n        for (let i = 0; i < NumberOfFrames; i++) {\n          const newImageId = imageIdFrameless + (i + 1);\n          newImageIds.push(newImageId);\n        }\n      } else newImageIds.push(imageId);\n    });\n    return newImageIds;\n  }\n\n  getFrameInformation(imageId): {\n    frameIndex: number;\n    imageIdFrameless: string;\n  } {\n    if (imageId.includes('wadors:')) {\n      const frameIndex = imageId.indexOf('/frames/');\n      const imageIdFrameless = frameIndex > 0 ? imageId.slice(0, frameIndex + 8) : imageId;\n      return {\n        frameIndex,\n        imageIdFrameless,\n      };\n    } else {\n      const frameIndex = imageId.indexOf('&frame=');\n      let imageIdFrameless = frameIndex > 0 ? imageId.slice(0, frameIndex + 7) : imageId;\n      if (!imageIdFrameless.includes('&frame=')) {\n        imageIdFrameless = imageIdFrameless + '&frame=';\n      }\n      return {\n        frameIndex,\n        imageIdFrameless,\n      };\n    }\n  }\n\n  pixelSpacingProvider(imageIds: string[]): void {\n    imageIds.forEach((imageId) => {\n      let instanceMetaData = cornerstoneDICOMImageLoader.wadors.metaDataManager.get(imageId);\n\n      // It was using JSON.parse(JSON.stringify(...)) before but it is 8x slower\n      instanceMetaData = this.removeInvalidTags(instanceMetaData);\n\n      if (instanceMetaData) {\n        // Add calibrated pixel spacing\n        const metadata = DicomMetaDictionary.naturalizeDataset(instanceMetaData);\n        const pixelSpacing = getPixelSpacingInformation(metadata);\n\n        if (pixelSpacing) {\n          utilities.calibratedPixelSpacingMetadataProvider.add(\n            imageId,\n            pixelSpacing.map((s) => parseFloat(s)),\n          );\n        }\n      }\n    });\n  }\n  ptProvider(imageIds: string[]): void {\n    const instanceMetadataArray: InstanceMetadata[] = [];\n    imageIds.forEach((imageId) => {\n      const instanceMetadata = getPTImageIdInstanceMetadata(imageId);\n\n      // TODO: Temporary fix because static-wado is producing a string, not an array of values\n      // (or maybe dcmjs isn't parsing it correctly?)\n      // It's showing up like 'DECY\\\\ATTN\\\\SCAT\\\\DTIM\\\\RAN\\\\RADL\\\\DCAL\\\\SLSENS\\\\NORM'\n      // but calculate-suv expects ['DECY', 'ATTN', ...]\n      if (typeof instanceMetadata.CorrectedImage === 'string') {\n        instanceMetadata.CorrectedImage = (instanceMetadata.CorrectedImage as string).split('\\\\');\n      }\n\n      if (instanceMetadata) {\n        instanceMetadataArray.push(instanceMetadata);\n      }\n    });\n    if (instanceMetadataArray.length) {\n      const suvScalingFactors = calculateSUVScalingFactors(instanceMetadataArray);\n      instanceMetadataArray.forEach((instanceMetadata, index) => {\n        ptScalingMetaDataProvider.addInstance(imageIds[index], suvScalingFactors[index]);\n      });\n    }\n  }\n\n  removeInvalidTags(srcMetadata) {\n    // Object.create(null) make it ~9% faster\n    const dstMetadata = Object.create(null);\n    const tagIds = Object.keys(srcMetadata);\n    let tagValue;\n\n    tagIds.forEach((tagId) => {\n      tagValue = srcMetadata[tagId];\n\n      if (tagValue !== undefined && tagValue !== null) {\n        dstMetadata[tagId] = tagValue;\n      }\n    });\n\n    return dstMetadata;\n  }\n}\n","const windowWidth = 400;\nconst windowCenter = 40;\n\nconst lower = windowCenter - windowWidth / 2.0;\nconst upper = windowCenter + windowWidth / 2.0;\n\nconst ctVoiRange = { lower, upper };\n\nfunction setCtTransferFunctionForVolumeActor({ volumeActor }) {\n  volumeActor.getProperty().getRGBTransferFunction(0).setMappingRange(lower, upper);\n}\n\nexport { ctVoiRange, setCtTransferFunctionForVolumeActor };\n","/**\n * Similar to {@link addVolumesToViewports} it adds volumes to viewports; however,\n * this method will Set the volumes on the viewports which means that the previous\n * volumes will be removed.\n *\n * @param renderingEngine - The rendering engine to use to get viewports from\n * @param volumeInputs - Array of volume inputs including volumeId. Other properties\n * such as visibility, callback, blendMode, slabThickness are optional\n * @param viewportIds - Array of viewport IDs to add the volume to\n * @param immediateRender - If true, the volumes will be rendered immediately\n * @returns A promise that resolves when all volumes have been added\n */\nimport { StackViewport, Types } from '@cornerstonejs/core';\nimport { ctVoiRange } from './setCtTransferFunctionForVolumeActor';\n\nasync function setStacksForViewports(\n  renderingEngine: Types.IRenderingEngine,\n  viewportIds: Array<string>,\n  imageIds: Array<string>,\n  currentImageIdIndex?: number,\n): Promise<void> {\n  // Check if all viewports are StackViewport\n  viewportIds.forEach((viewportId) => {\n    const viewport = renderingEngine.getViewport(viewportId);\n    if (!viewport) {\n      throw new Error(`Viewport with Id ${viewportId} does not exist`);\n    }\n    // if not instance of VolumeViewport, throw\n    if (!(viewport instanceof StackViewport)) {\n      throw new Error('setStacksForViewports only supports StackViewport');\n    }\n  });\n\n  const setStackPromises = viewportIds.map(async (viewportId) => {\n    const viewport = renderingEngine.getViewport(viewportId) as Types.IStackViewport;\n    await viewport.setStack(imageIds, currentImageIdIndex);\n    // Set the VOI of the stack\n    viewport.setProperties({ voiRange: ctVoiRange });\n    // Render the image\n    viewport.render();\n  });\n\n  await Promise.all(setStackPromises);\n\n  return;\n}\n\nexport { setStacksForViewports };\n","import { Enums as csCoreEnum, Types } from '@cornerstonejs/core';\nimport { ImageInfo } from './types';\n\nexport enum LayoutEnum {\n  LAYOUT_1x1, // Single viewport layout\n  LAYOUT_1x2, // 1 row 2 columns layout\n  LAYOUT_1x3, // 1 row 3 columns layout\n  LAYOUT_2x2, // 2 rows 2 columns layout\n}\n\nexport const STACK_VIEWPORT_INPUTS: Partial<Types.PublicViewportInput>[] = [\n  {\n    viewportId: 'viewport-stack',\n    type: csCoreEnum.ViewportType.STACK,\n    defaultOptions: {\n      background: <Types.Point3>[0, 0, 0],\n    },\n  },\n];\n\nexport const SAGITTAL_VIEWPORT_INPUTS: Partial<Types.PublicViewportInput>[] = [\n  {\n    viewportId: 'viewport-mpr-sagittal',\n    type: csCoreEnum.ViewportType.ORTHOGRAPHIC,\n    defaultOptions: {\n      background: <Types.Point3>[0, 0, 0],\n      orientation: csCoreEnum.OrientationAxis.SAGITTAL,\n    },\n  },\n];\n\nexport const CORONAL_VIEWPORT_INPUTS: Partial<Types.PublicViewportInput>[] = [\n  {\n    viewportId: 'viewport-mpr-coronal',\n    type: csCoreEnum.ViewportType.ORTHOGRAPHIC,\n    defaultOptions: {\n      background: <Types.Point3>[0, 0, 0],\n      orientation: csCoreEnum.OrientationAxis.CORONAL,\n    },\n  },\n];\n\nexport const AXIAL_VIEWPORT_INPUTS: Partial<Types.PublicViewportInput>[] = [\n  {\n    viewportId: 'viewport-mpr-axial',\n    type: csCoreEnum.ViewportType.ORTHOGRAPHIC,\n    defaultOptions: {\n      background: <Types.Point3>[0, 0, 0],\n      orientation: csCoreEnum.OrientationAxis.AXIAL,\n    },\n  },\n];\n\nexport const VOLUME_3D_VIEWPORT_INPUTS: Partial<Types.PublicViewportInput>[] = [\n  {\n    viewportId: 'viewport-volume',\n    type: csCoreEnum.ViewportType.VOLUME_3D,\n    defaultOptions: {\n      background: <Types.Point3>[0.2, 0, 0.2],\n    },\n  },\n];\n\nexport function generateViewportInputs(\n  layout: LayoutEnum,\n  suffix: string,\n  imageInfo?: ImageInfo,\n): Partial<Types.PublicViewportInput>[] {\n  const viewportType = imageInfo?.viewportType || csCoreEnum.ViewportType.STACK;\n  const isStack = viewportType === csCoreEnum.ViewportType.STACK;\n  const result: Partial<Types.PublicViewportInput>[] = [];\n\n  switch (layout) {\n    case LayoutEnum.LAYOUT_1x1:\n      // 1x1 layout: set viewportType according to imageType\n      if (viewportType === csCoreEnum.ViewportType.STACK) {\n        const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]);\n        viewportInput.viewportId = `viewport-stack-${suffix}`;\n        result.push(viewportInput);\n      } else if (viewportType === csCoreEnum.ViewportType.VOLUME_3D) {\n        const viewportInput = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]);\n        viewportInput.viewportId = `viewport-volume-${suffix}`;\n        result.push(viewportInput);\n      } else {\n        const viewportInput = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]);\n        viewportInput.viewportId = `viewport-sagittal-${suffix}`;\n        result.push(viewportInput);\n      }\n      break;\n\n    case LayoutEnum.LAYOUT_1x2:\n      // 1x2 layout: all stack when imageType is stack, otherwise one volume3D one sagittal\n      if (isStack) {\n        for (let i = 0; i < 2; i++) {\n          const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]);\n          viewportInput.viewportId = `viewport-stack-${i + 1}${suffix}`;\n          result.push(viewportInput);\n        }\n      } else {\n        const sagittalViewport = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]);\n        sagittalViewport.viewportId = `viewport-sagittal-${suffix}`;\n        result.push(sagittalViewport);\n\n        const volumeViewport = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]);\n        volumeViewport.viewportId = `viewport-volume-${suffix}`;\n        result.push(volumeViewport);\n      }\n      break;\n\n    case LayoutEnum.LAYOUT_1x3:\n      // 1x3 layout: all stack when imageType is stack, otherwise one volume3D one sagittal one axial\n      if (isStack) {\n        for (let i = 0; i < 3; i++) {\n          const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]);\n          viewportInput.viewportId = `viewport-stack-${i + 1}${suffix}`;\n          result.push(viewportInput);\n        }\n      } else {\n        const sagittalViewport = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]);\n        sagittalViewport.viewportId = `viewport-sagittal-${suffix}`;\n        result.push(sagittalViewport);\n\n        const axialViewport = structuredClone(AXIAL_VIEWPORT_INPUTS[0]);\n        axialViewport.viewportId = `viewport-axial-${suffix}`;\n        result.push(axialViewport);\n\n        const volumeViewport = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]);\n        volumeViewport.viewportId = `viewport-volume-${suffix}`;\n        result.push(volumeViewport);\n      }\n      break;\n\n    case LayoutEnum.LAYOUT_2x2:\n      // 2x2 layout: all stack when imageType is stack, otherwise one volume3D one sagittal one axial one coronal\n      if (isStack) {\n        for (let i = 0; i < 4; i++) {\n          const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]);\n          viewportInput.viewportId = `viewport-stack-${i + 1}${suffix}`;\n          result.push(viewportInput);\n        }\n      } else {\n        const sagittalViewport = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]);\n        sagittalViewport.viewportId = `viewport-sagittal-${suffix}`;\n        result.push(sagittalViewport);\n\n        const axialViewport = structuredClone(AXIAL_VIEWPORT_INPUTS[0]);\n        axialViewport.viewportId = `viewport-axial-${suffix}`;\n        result.push(axialViewport);\n\n        const coronalViewport = structuredClone(CORONAL_VIEWPORT_INPUTS[0]);\n        coronalViewport.viewportId = `viewport-coronal-${suffix}`;\n        result.push(coronalViewport);\n\n        const volumeViewport = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]);\n        volumeViewport.viewportId = `viewport-volume-${suffix}`;\n        result.push(volumeViewport);\n      }\n      break;\n  }\n\n  return result;\n}\n\nexport function generateRandomString(length = 6) {\n  const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n  let result = '';\n  for (let i = 0; i < length; i++) {\n    const randomIndex = Math.floor(Math.random() * characters.length);\n    result += characters[randomIndex];\n  }\n  return '-' + result;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'i[nc-icon]',\n  template: `\n    <svg class=\"icon\" aria-hidden=\"true\">\n      <use attr.xlink:href=\"#{{ iconfont }}\"></use>\n    </svg>\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-block;\n        line-height: 0;\n      }\n\n      .icon {\n        fill: currentColor;\n        height: 1em;\n        overflow: hidden;\n        vertical-align: -0.15em;\n        width: 1em;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent {\n  @Input() iconfont: string | null = '';\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { InputBoolean } from '../../core';\nimport { Observable, Subject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nexport type ButtonType = 'primary' | 'default';\nexport type ButtonContent = 'icon-text' | 'icon' | 'text' | 'default';\nexport type ButtonShape = 'circle' | 'round' | 'default';\nexport type ButtonSize = 'large' | 'default' | 'small';\nexport interface ButtonToggleChange {\n  source: ButtonComponent;\n  pressed: boolean;\n}\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'button[nc-button], a[nc-button]',\n  exportAs: 'ncButton',\n  templateUrl: './button.component.html',\n  styleUrls: ['./button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n  host: {\n    class: 'nc-btn',\n    '[class.btn-type-primary]': `type === 'primary'`,\n    '[class.btn-type-default]': `type === 'default'`,\n    '[class.btn-content-icon-text]': `content === 'icon-text'`,\n    '[class.btn-content-icon]': `content === 'icon'`,\n    '[class.btn-content-text]': `content === 'text'`,\n    '[class.btn-shape-round]': `shape === 'round'`,\n    '[class.btn-shape-circle]': `shape === 'circle'`,\n    '[class.btn-size-lg]': `size === 'large'`,\n    '[class.btn-size-sm]': `size === 'small'`,\n    '[attr.tabindex]': 'disabled ? -1 : (tabIndex === null ? null : tabIndex)',\n    '[attr.disabled]': 'disabled || null',\n  },\n})\nexport class ButtonComponent implements OnDestroy {\n  @Input() @InputBoolean() disabled = false;\n  @Input() tabIndex: number | string | null = null;\n  @Input() type: ButtonType = 'default';\n  @Input() shape: ButtonShape = 'default';\n  @Input() content: ButtonContent = 'default';\n  @Input() size: ButtonSize = 'default';\n  @Input() @InputBoolean() isToggle = false;\n  @Input() icon: string | null = null;\n  @Input() text: string | null = null;\n  @Input() value: any;\n\n  @HostListener('click', ['$event'])\n  onClick(event) {\n    if (this.disabled) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    } else if (this.isToggle) {\n      this.pressed = !this.pressed;\n    }\n  }\n  /**\n   * Emits whenever button pressed state change\n   **/\n  @Output() readonly pressedChange = new EventEmitter<boolean>();\n  protected readonly _pressedChange$ = new Subject<ButtonToggleChange>();\n  get pressedChange$(): Observable<ButtonToggleChange> {\n    return this._pressedChange$.asObservable();\n  }\n  /**\n   * Controls button pressed state\n   **/\n  @HostBinding('class.pressed')\n  get pressed(): boolean {\n    return this._pressed;\n  }\n  set pressed(value: boolean) {\n    if (this.pressed !== coerceBooleanProperty(value)) {\n      this._pressed = !this.pressed;\n      this.pressedChange.emit(this.pressed);\n      this._pressedChange$.next({ source: this, pressed: this.pressed });\n    }\n  }\n  protected _pressed: boolean = false;\n  static ngAcceptInputType_pressed: BooleanInput;\n\n  private destroy$ = new Subject<void>();\n\n  constructor(public _elementRef: ElementRef, private cd: ChangeDetectorRef) {}\n\n  _getHostElement() {\n    return this._elementRef.nativeElement;\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * @docs-private\n   */\n  _updatePressed(value: boolean) {\n    this.pressed = value;\n    this.cd.markForCheck();\n  }\n}\n","<ng-container [ngSwitch]=\"content\">\n  <ng-container *ngSwitchCase=\"'icon-text'\">\n    <i nc-icon [iconfont]=\"icon\"></i>\n    <span class=\"text\">{{ text }}</span>\n  </ng-container>\n  <div *ngSwitchCase=\"'text'\">\n    <span>{{ text }}</span>\n  </div>\n  <div *ngSwitchCase=\"'icon'\">\n    <i nc-icon [iconfont]=\"icon\"></i>\n  </div>\n  <ng-content *ngSwitchDefault></ng-content>\n</ng-container>\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n} from '@angular/core';\nimport { debounceTime, filter, from, merge, Observable, startWith, Subject } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\nimport { ButtonComponent, ButtonToggleChange } from './button.component';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { InputBoolean } from '../../core';\n\n@Component({\n  selector: 'nc-button-group',\n  template: ` <ng-content></ng-content> `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonGroupComponent implements AfterContentInit, OnDestroy {\n  protected lastEmittedValue: any[] = [];\n\n  protected readonly destroy$: Subject<void> = new Subject<void>();\n  protected readonly buttonsChange$ = new Subject<ButtonComponent[]>();\n\n  @ContentChildren(ButtonComponent)\n  readonly buttons!: QueryList<ButtonComponent>;\n\n  @Input()\n  @InputBoolean()\n  protected disabled = false;\n  static ngAcceptInputType_disabled: BooleanInput;\n\n  /**\n   * Allows to keep multiple button toggles pressed. Off by default.\n   */\n  @Input()\n  @InputBoolean()\n  protected multiple: boolean = false;\n  static ngAcceptInputType_multiple: BooleanInput;\n\n  /**\n   * Emits when `nbButtonToggle` pressed state change. `$event` contains an array of the currently pressed button\n   * toggles.\n   */\n  @Output() valueChange = new EventEmitter<any[]>();\n\n  @HostBinding('attr.role') role = 'group';\n\n  constructor(protected cd: ChangeDetectorRef) {}\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  ngAfterContentInit(): void {\n    this.buttonsChange$.pipe(takeUntil(this.destroy$)).subscribe((buttons: ButtonComponent[]) => {\n      this.listenButtonPressedState(buttons);\n    });\n\n    this.buttons.changes\n      .pipe(\n        // `buttons.changes` emit during change detection run after projected content already was initialized.\n        // So at this time, it's too late to update projected buttons properties as updating bindings after\n        // initialization doesn't make sense. Changes won't be picked up and should cause an \"expression changed\" error.\n        // Instead, we wrap the new buttons list into a promise to defer update to the following microtask and also to\n        // trigger change detection one more time.\n        switchMap((buttons: QueryList<ButtonComponent>) => from(Promise.resolve(buttons.toArray()))),\n        takeUntil(this.destroy$),\n      )\n      .subscribe((value) => this.buttonsChange$.next(value));\n\n    this.buttonsChange$.next(this.buttons.toArray());\n  }\n\n  protected listenButtonPressedState(buttons: ButtonComponent[]): void {\n    const toggleButtons: ButtonComponent[] = buttons.filter((button: ButtonComponent) => {\n      return button.isToggle;\n    });\n\n    if (!toggleButtons.length) {\n      return;\n    }\n\n    const buttonsPressedChange$: Observable<ButtonToggleChange>[] = toggleButtons.map(\n      (button: ButtonComponent) => button.pressedChange$,\n    );\n\n    merge(...buttonsPressedChange$)\n      .pipe(\n        filter(({ pressed }: ButtonToggleChange) => !this.multiple && pressed),\n        takeUntil(merge(this.buttonsChange$, this.destroy$)),\n      )\n      .subscribe(({ source }: ButtonToggleChange) => {\n        toggleButtons\n          .filter((button: ButtonComponent) => button !== source)\n          .forEach((button: ButtonComponent) => button._updatePressed(false));\n      });\n\n    merge(...buttonsPressedChange$)\n      .pipe(\n        // Use startWith to emit if some buttons are initially pressed.\n        startWith(''),\n        // Use debounce to emit change once when pressed state change in multiple button toggles.\n        debounceTime(0),\n        takeUntil(merge(this.buttonsChange$, this.destroy$)),\n      )\n      .subscribe(() => this.emitCurrentValue(toggleButtons));\n  }\n\n  protected emitCurrentValue(toggleButtons: ButtonComponent[]): void {\n    const pressedToggleValues = toggleButtons\n      .filter((b: ButtonComponent) => b.pressed && typeof b.value !== 'undefined')\n      .map((b: ButtonComponent) => b.value);\n\n    // Prevent multiple emissions of empty value.\n    if (pressedToggleValues.length === 0 && this.lastEmittedValue.length === 0) {\n      return;\n    }\n\n    this.valueChange.emit(pressedToggleValues);\n    this.lastEmittedValue = pressedToggleValues;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable, Optional, RendererFactory2 } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NcIconService {\r\n  private initialized = false;\r\n\r\n  constructor(\r\n    private rendererFactory2: RendererFactory2,\r\n    @Inject(DOCUMENT) private doc: any,\r\n    @Optional() @Inject('ICON_URL') iconfontUrl: string,\r\n  ) {\r\n    console.debug('NcIconService init');\r\n    this.init(iconfontUrl);\r\n  }\r\n\r\n  init(iconfontUrl?: string) {\r\n    if (iconfontUrl && !this.initialized) {\r\n      const renderer = this.rendererFactory2.createRenderer(null, null);\r\n      const script = renderer.createElement('script');\r\n      renderer.setAttribute(script, 'src', iconfontUrl);\r\n      renderer.setAttribute(script, 'data-namespace', iconfontUrl);\r\n      renderer.appendChild(this.doc.body, script);\r\n      this.initialized = true;\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { IconComponent } from './icon.component';\r\nimport { NcIconService } from './icon.service';\r\n\r\n@NgModule({\r\n  declarations: [IconComponent],\r\n  imports: [CommonModule],\r\n  exports: [IconComponent],\r\n})\r\nexport class IconModule {\r\n  static forRoot(iconfontUrl: string): ModuleWithProviders<IconModule> {\r\n    return {\r\n      ngModule: IconModule,\r\n      providers: [{ provide: 'ICON_URL', useValue: iconfontUrl }, NcIconService],\r\n    };\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconModule } from '../icon';\r\nimport { ButtonComponent } from './button.component';\r\nimport { ButtonGroupComponent } from './button-group.component';\r\n\r\n@NgModule({\r\n  declarations: [ButtonComponent, ButtonGroupComponent],\r\n  imports: [CommonModule, IconModule],\r\n  exports: [ButtonComponent, ButtonGroupComponent],\r\n})\r\nexport class ButtonModule {}\r\n","import { Enums } from '@cornerstonejs/core';\r\n\r\nexport enum ToolEnum {\r\n  Reset,\r\n  BaseToo,\r\n  PanTool,\r\n  TrackballRotateTool,\r\n  DragProbeTool,\r\n  WindowLevelTool,\r\n  ZoomTool,\r\n  StackScrollTool,\r\n  StackScrollMouseWheelTool,\r\n  VolumeRotateMouseWheelTool,\r\n  MIPJumpToClickTool,\r\n  LengthTool,\r\n  CrosshairsTool,\r\n  ProbeTool,\r\n  RectangleROITool,\r\n  EllipticalROITool,\r\n  BidirectionalTool,\r\n  PlanarFreehandROITool,\r\n  ArrowAnnotateTool,\r\n  AngleTool,\r\n  MagnifyTool,\r\n  SegmentationDisplayTool,\r\n  RectangleScissorsTool,\r\n  CircleScissorsTool,\r\n  SphereScissorsTool,\r\n  RectangleROIThresholdTool,\r\n  RectangleROIStartEndThresholdTool,\r\n  BrushTool,\r\n  FlipV,\r\n  FlipH,\r\n  Rotate,\r\n  Next,\r\n  Previous,\r\n  Coronal,\r\n  Axial,\r\n  Sagittal,\r\n}\r\n\r\nexport interface ToolConfig {\r\n  label: string;\r\n  icon: string;\r\n  name: string;\r\n  tool?: any;\r\n  callback?: (renderingEngineId: string, viewportId: string, options?: any) => void;\r\n  options?: any;\r\n  types: Enums.ViewportType[];\r\n  disabled?: boolean;\r\n}\r\n","import {\n  AngleTool,\n  ArrowAnnotateTool,\n  EllipticalROITool,\n  LengthTool,\n  PanTool,\n  RectangleROITool,\n  StackScrollTool,\n  TrackballRotateTool,\n  WindowLevelTool,\n  ZoomTool,\n} from '@cornerstonejs/tools';\nimport { Enums, getRenderingEngine, Types } from '@cornerstonejs/core';\nimport { ToolConfig, ToolEnum } from './tool.types';\n\nfunction reset(renderingEngineId: string, viewportId: string): void {\n  // Get the rendering engine\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  // Get the volume viewport\n  const viewport = <Types.IVolumeViewport>renderingEngine?.getViewport(viewportId);\n  // Resets the viewport's camera\n  viewport.resetCamera();\n  viewport.render();\n}\n\nfunction flipV(renderingEngineId: string, viewportId: string): void {\n  // Get the rendering engine\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  // Get the stack viewport\n  const viewport = <Types.IStackViewport>renderingEngine?.getViewport(viewportId);\n  const { flipVertical } = viewport.getCamera();\n  viewport.setCamera({ flipVertical: !flipVertical });\n  viewport.render();\n}\n\nfunction flipH(renderingEngineId: string, viewportId: string): void {\n  // Get the rendering engine\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  // Get the stack viewport\n  const viewport = <Types.IStackViewport>renderingEngine?.getViewport(viewportId);\n  const { flipHorizontal } = viewport.getCamera();\n  viewport.setCamera({ flipHorizontal: !flipHorizontal });\n  viewport.render();\n}\n\nfunction rotate(renderingEngineId: string, viewportId: string): void {\n  // Get the rendering engine\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  // Get the stack viewport\n  const viewport = <Types.IStackViewport>renderingEngine?.getViewport(viewportId);\n  const { rotation = 0 } = viewport.getViewPresentation();\n  viewport.setViewPresentation({ rotation: rotation + 15 });\n  viewport.render();\n}\n\nfunction next(renderingEngineId: string, viewportId: string): void {\n  // Get the rendering engine\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  // Get the stack viewport\n  const viewport = <Types.IStackViewport>renderingEngine?.getViewport(viewportId);\n  // Get the current index of the image displayed\n  const currentImageIdIndex = viewport.getCurrentImageIdIndex();\n  // Increment the index, clamping to the last image if necessary\n  const numImages = viewport.getImageIds().length;\n  let newImageIdIndex = currentImageIdIndex + 1;\n  newImageIdIndex = Math.min(newImageIdIndex, numImages - 1);\n  // Set the new image index, the viewport itself does a re-render\n  viewport.setImageIdIndex(newImageIdIndex);\n}\n\nfunction previous(renderingEngineId: string, viewportId: string): void {\n  // Get the rendering engine\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  // Get the stack viewport\n  const viewport = <Types.IStackViewport>renderingEngine?.getViewport(viewportId);\n  // Get the current index of the image displayed\n  const currentImageIdIndex = viewport.getCurrentImageIdIndex();\n  // Increment the index, clamping to the first image if necessary\n  let newImageIdIndex = currentImageIdIndex - 1;\n  newImageIdIndex = Math.max(newImageIdIndex, 0);\n  // Set the new image index, the viewport itself does a re-render\n  viewport.setImageIdIndex(newImageIdIndex);\n}\n\nfunction changeOrientation(renderingEngineId: string, viewportId: string, options: any) {\n  const renderingEngine = getRenderingEngine(renderingEngineId);\n  const viewport = renderingEngine!.getViewport(viewportId) as Types.IVolumeViewport;\n  const { orientation } = options;\n  // Set the new orientation\n  viewport.setOrientation(orientation);\n  // Reset the camera after the normal changes\n  viewport.resetCamera();\n  viewport.render();\n}\n\nexport const TOOL_CONFIG_MAP: { [key in ToolEnum]?: ToolConfig } = {\n  [ToolEnum.Reset]: {\n    icon: 'dmv-recover',\n    label: 'Reset',\n    name: 'reset',\n    callback: reset,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC, Enums.ViewportType.VOLUME_3D],\n  },\n  [ToolEnum.FlipV]: {\n    icon: 'dmv-fliph',\n    label: 'Flip-H',\n    name: 'fliph',\n    callback: flipH,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.FlipH]: {\n    icon: 'dmv-flipv',\n    label: 'Flip-V',\n    name: 'flipV',\n    callback: flipV,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.Rotate]: {\n    icon: 'dmv-rotate',\n    label: 'Rotate',\n    name: 'rotate',\n    callback: rotate,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC, Enums.ViewportType.VOLUME_3D],\n  },\n  [ToolEnum.Sagittal]: {\n    icon: 'dmv-sagittal',\n    label: 'Sagittal',\n    name: 'sagittal',\n    callback: changeOrientation,\n    options: { orientation: Enums.OrientationAxis.SAGITTAL },\n    types: [Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.Coronal]: {\n    icon: 'dmv-coronal',\n    label: 'Coronal',\n    name: 'coronal',\n    callback: changeOrientation,\n    options: { orientation: Enums.OrientationAxis.CORONAL },\n    types: [Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.Axial]: {\n    icon: 'dmv-axial',\n    label: 'Axial',\n    name: 'axial',\n    callback: changeOrientation,\n    options: { orientation: Enums.OrientationAxis.AXIAL },\n    types: [Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.Next]: {\n    icon: 'dmv-right',\n    label: 'Next',\n    name: 'next',\n    callback: next,\n    types: [Enums.ViewportType.STACK],\n  },\n  [ToolEnum.Previous]: {\n    icon: 'dmv-left',\n    label: 'Previous',\n    name: 'previous',\n    callback: previous,\n    types: [Enums.ViewportType.STACK],\n  },\n  [ToolEnum.ArrowAnnotateTool]: {\n    icon: 'dmv-annotation',\n    label: 'Arrow',\n    tool: ArrowAnnotateTool,\n    name: ArrowAnnotateTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.AngleTool]: {\n    icon: 'dmv-angle',\n    label: 'Angle',\n    tool: AngleTool,\n    name: AngleTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.LengthTool]: {\n    icon: 'dmv-ruler',\n    label: 'Ruler',\n    tool: LengthTool,\n    name: LengthTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.RectangleROITool]: {\n    icon: 'dmv-rectangle',\n    label: 'Rectangle',\n    tool: RectangleROITool,\n    name: RectangleROITool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.EllipticalROITool]: {\n    icon: 'dmv-ellipse',\n    label: 'Ellipse',\n    tool: EllipticalROITool,\n    name: EllipticalROITool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n  [ToolEnum.TrackballRotateTool]: {\n    icon: 'dmv-rotate',\n    label: 'Trackball',\n    tool: TrackballRotateTool,\n    name: TrackballRotateTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC, Enums.ViewportType.VOLUME_3D],\n  },\n  [ToolEnum.ZoomTool]: {\n    icon: 'dmv-zoom',\n    label: 'Zoom',\n    tool: ZoomTool,\n    name: ZoomTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC, Enums.ViewportType.VOLUME_3D],\n  },\n  [ToolEnum.PanTool]: {\n    icon: 'dmv-pan',\n    label: 'Pan',\n    tool: PanTool,\n    name: PanTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC, Enums.ViewportType.VOLUME_3D],\n  },\n  [ToolEnum.WindowLevelTool]: {\n    icon: 'dmv-window-level',\n    label: 'WL',\n    tool: WindowLevelTool,\n    name: WindowLevelTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC, Enums.ViewportType.VOLUME_3D],\n  },\n  [ToolEnum.StackScrollTool]: {\n    icon: 'dmv-layer',\n    label: 'Scroll',\n    tool: StackScrollTool,\n    name: StackScrollTool.toolName,\n    types: [Enums.ViewportType.STACK, Enums.ViewportType.ORTHOGRAPHIC],\n  },\n};\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TOOL_CONFIG_MAP } from './tool.config';\nimport { addTool, Enums as csToolsEnums, state, Types as csToolTypes, ToolGroupManager } from '@cornerstonejs/tools';\nimport { ToolConfig, ToolEnum } from './tool.types';\nimport { CornerstoneService } from '../core';\n\n@Component({\n  selector: 'nc-tool-bar',\n  exportAs: 'ncToolBar',\n  templateUrl: './tool-bar.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolBarComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {\n  private destroy$ = new Subject<void>();\n\n  @Input()\n  toolGroupId!: string;\n\n  @Input()\n  toolList: ToolEnum[] = [];\n\n  @Input()\n  activeViewportId: string | undefined;\n\n  @Output() toolbarInit = new EventEmitter<string>();\n  @Output() toolbarDestroy = new EventEmitter<string>();\n\n  private toolGroup!: csToolTypes.IToolGroup;\n\n  segmentationRepresentationUIDs: string[] | undefined;\n\n  toolConfigList: ToolConfig[] = [];\n  cameraList: ToolConfig[] = [];\n  currentTool?: ToolConfig;\n\n  constructor(private csService: CornerstoneService, private cdr: ChangeDetectorRef) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { toolList, activeViewportId } = changes;\n    if (toolList && !toolList.isFirstChange()) {\n      this.updateToolList();\n    }\n    if (activeViewportId && !activeViewportId.isFirstChange()) {\n      this.updateActiveViewport(this.activeViewportId);\n    }\n  }\n\n  ngOnInit(): void {\n    console.debug('Toolbar register:', this.toolGroupId);\n    this.toolGroup = ToolGroupManager.createToolGroup(this.toolGroupId)!;\n    this.updateToolList();\n  }\n\n  ngAfterViewInit(): void {\n    this.toolbarInit.emit();\n    this.csService.setToolGroup(this.toolGroup);\n  }\n\n  get renderingEngineId() {\n    return this.csService.getRenderingEngineId();\n  }\n\n  get renderingEngine() {\n    return this.csService.getRenderingEngine();\n  }\n\n  registerViewport(viewportId: string) {\n    console.debug('Toolbar register viewport:', viewportId);\n    this.toolGroup.addViewport(viewportId, this.renderingEngineId);\n  }\n\n  unregisterViewport(viewportId: string) {\n    console.debug('Toolbar unregister viewport:', viewportId);\n    this.toolGroup.removeViewports(this.renderingEngineId, viewportId);\n  }\n\n  updateToolList() {\n    if (!this.toolGroup) {\n      return;\n    }\n    const toolConfigList: ToolConfig[] = [];\n    const cameraList: ToolConfig[] = [];\n    this.toolList.forEach((toolEnum) => {\n      const config = TOOL_CONFIG_MAP[toolEnum]!;\n      config.disabled = false;\n      if (config.tool) {\n        toolConfigList.push(config);\n        const toolName = config.tool.toolName;\n        const toolAlreadyAdded = state.tools[toolName] !== undefined;\n        if (!toolAlreadyAdded) {\n          addTool(config.tool);\n        }\n        if (!this.toolGroup.hasTool(config.name)) {\n          this.toolGroup.addTool(config.name);\n        }\n      } else if (config.callback) {\n        cameraList.push(config);\n      }\n    });\n    for (let i = 0; i < toolConfigList.length; i++) {\n      const toolConfig = toolConfigList[i];\n      if (toolConfig.name) {\n        this.toolGroup.setToolPassive(toolConfig.name);\n      }\n    }\n    this.toolConfigList = toolConfigList;\n    this.cameraList = cameraList;\n  }\n\n  updateActiveViewport(inputActiveViewportId?: string) {\n    const activeViewportId = inputActiveViewportId;\n    if (!activeViewportId) {\n      return;\n    }\n\n    // 保存旧的activeViewportId\n    const previousViewportId = this.activeViewportId;\n\n    // 更新当前的activeViewportId\n    this.activeViewportId = activeViewportId;\n\n    const viewport = this.renderingEngine.getViewport(this.activeViewportId!);\n    if (viewport) {\n      const viewportType = viewport.type;\n      this.toolConfigList.forEach((toolConfig) => {\n        if (toolConfig.types.includes(viewportType)) {\n          toolConfig.disabled = false;\n        } else {\n          toolConfig.disabled = true;\n        }\n      });\n      this.cameraList.map((cameraConfig) => {\n        if (cameraConfig.types.includes(viewportType)) {\n          cameraConfig.disabled = false;\n        } else {\n          cameraConfig.disabled = true;\n        }\n      });\n\n      // 确保新的viewport已添加到toolGroup中\n      if (!this.toolGroup.getViewportIds().includes(this.activeViewportId)) {\n        this.registerViewport(this.activeViewportId);\n      }\n\n      // 重新激活当前工具，确保它能在新的viewport上操作\n      if (previousViewportId !== this.activeViewportId && this.currentTool) {\n        // 先移除其他绑定，以确保工具干净地应用于新viewport\n        const toolNames = this.toolConfigList.map((config) => config.name);\n        toolNames.forEach((name) => {\n          if (name !== this.currentTool?.name) {\n            this.toolGroup.setToolPassive(name);\n          }\n        });\n\n        // 重新激活当前工具\n        this.toolGroup.setToolActive(this.currentTool.name, {\n          bindings: [{ mouseButton: csToolsEnums.MouseBindings.Primary }],\n        });\n\n        // 确保工具应用于当前viewport\n        this.toolGroup.setViewportsCursorByToolName(this.currentTool.name);\n      }\n\n      this.cdr.detectChanges();\n    }\n  }\n\n  activeTool(names: any[]) {\n    if (!names || names.length === 0) {\n      return;\n    }\n    const pressedTool = this.toolConfigList.find((toolConfig) => toolConfig.name === names[0]);\n    if (!pressedTool) {\n      return;\n    }\n    if (pressedTool.tool) {\n      if (this.currentTool) {\n        this.toolGroup.setToolPassive(this.currentTool.name);\n      }\n      this.currentTool = pressedTool;\n      this.toolGroup.setToolActive(pressedTool.name, {\n        bindings: [{ mouseButton: csToolsEnums.MouseBindings.Primary }],\n      });\n      this.toolGroup.setViewportsCursorByToolName(pressedTool.name);\n    }\n  }\n\n  changeCamera(name: string) {\n    if (!name) {\n      return;\n    }\n    const cameraTool = this.cameraList.find((toolConfig) => toolConfig.name === name);\n    if (cameraTool?.callback) {\n      cameraTool.callback(this.renderingEngineId, this.activeViewportId!, cameraTool.options);\n    }\n  }\n\n  ngOnDestroy(): void {\n    console.debug('Toolbar destroy: ', this.toolGroupId);\n    this.toolbarDestroy.emit(this.toolGroupId);\n    ToolGroupManager.destroyToolGroup(this.toolGroupId);\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","<nc-button-group (valueChange)=\"activeTool($event)\">\n  <button\n    nc-button\n    *ngFor=\"let config of toolConfigList\"\n    [isToggle]=\"!!config.tool\"\n    [content]=\"'icon-text'\"\n    [icon]=\"config.icon\"\n    [text]=\"config.label\"\n    [value]=\"config.name\"\n    [disabled]=\"config.disabled ?? false\"\n  ></button>\n</nc-button-group>\n<nc-button-group>\n  <button\n    nc-button\n    *ngFor=\"let config of cameraList\"\n    (click)=\"changeCamera(config.name)\"\n    [content]=\"'icon-text'\"\n    [icon]=\"config.icon\"\n    [text]=\"config.label\"\n    [disabled]=\"config.disabled ?? false\"\n  ></button>\n</nc-button-group>\n","import { NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { ToolBarComponent } from './tool-bar.component';\r\nimport { IconModule, NcIconService } from '../components/icon';\r\nimport { ButtonModule } from '../components/button/button.module';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n  declarations: [ToolBarComponent],\r\n  imports: [CommonModule, IconModule.forRoot('./assets/font/iconfont.js'), ButtonModule],\r\n  exports: [ToolBarComponent],\r\n})\r\nexport class ToolModule {\r\n  constructor(private iconService: NcIconService, @SkipSelf() @Optional() parent?: ToolModule) {\r\n    if (parent) {\r\n      throw new Error('ToolBarModule should be imported only once!');\r\n    }\r\n  }\r\n}\r\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  Directive,\n  NgZone,\n  OnInit,\n} from '@angular/core';\nimport { Types, Enums } from '@cornerstonejs/core';\nimport { CornerstoneService, ImageInfo, imageInfoToUniqueId } from '../core';\n\n@Directive()\nexport class BaseViewportComponent implements OnInit, OnChanges, OnDestroy {\n  @Input()\n  viewportInput?: Partial<Types.PublicViewportInput>;\n\n  @Input()\n  imageInfo?: ImageInfo;\n\n  @Input()\n  segmentInfo?: ImageInfo;\n\n  @ViewChild('imageBox', { read: ElementRef, static: true })\n  viewportElementRef!: ElementRef<HTMLElement>;\n\n  @Input()\n  @HostBinding('class.active')\n  active: boolean = false;\n\n  @Output() viewportUpdated = new EventEmitter<string>();\n  @Output() viewportDestroy = new EventEmitter<string>();\n\n  viewport!: Types.IViewport;\n\n  constructor(protected csService: CornerstoneService, protected zone: NgZone) {}\n\n  ngOnInit(): void {\n    this.updateViewport();\n    if (this.imageInfo) {\n      this.zone.runOutsideAngular(() => {\n        this.renderImage(this.imageInfo!);\n      });\n    }\n    if (this.imageInfo && this.segmentInfo) {\n      this.zone.runOutsideAngular(() => {\n        this.renderSegment(this.imageInfo as ImageInfo, this.segmentInfo!);\n      });\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { imageInfo, segmentInfo } = changes;\n\n    if (imageInfo && !imageInfo.isFirstChange() && this.imageInfo) {\n      this.zone.runOutsideAngular(() => {\n        this.renderImage(this.imageInfo!);\n      });\n    }\n\n    if (segmentInfo && !segmentInfo.isFirstChange() && this.segmentInfo) {\n      this.zone.runOutsideAngular(() => {\n        this.renderSegment(this.imageInfo as ImageInfo, this.segmentInfo!);\n      });\n    }\n  }\n\n  get renderingEngineId() {\n    return this.csService.getRenderingEngineId();\n  }\n\n  get renderingEngine() {\n    return this.csService.getRenderingEngine();\n  }\n\n  get toolGroup() {\n    return this.csService.getToolGroup();\n  }\n\n  protected updateViewport() {\n    console.log('update viewport: ', this.viewportInput?.viewportId);\n\n    if (!this.viewportInput || !this.viewportInput.viewportId) {\n      console.warn('No viewport input provided');\n      return;\n    }\n\n    try {\n      this.viewportInput.element = this.viewportElementRef.nativeElement as HTMLDivElement;\n      this.renderingEngine.enableElement(this.viewportInput as Types.PublicViewportInput);\n      this.viewport = this.renderingEngine.getViewport(this.viewportInput.viewportId);\n      this.viewportUpdated.emit(this.viewportInput?.viewportId);\n    } catch (error) {\n      console.error('Failed to update viewport:', error);\n    }\n  }\n\n  protected renderImage(image: ImageInfo): void {\n    console.warn('Render method not implemented in base viewport component');\n  }\n\n  protected renderSegment(image: ImageInfo, segment: ImageInfo): void {\n    console.warn('Render method not implemented in base viewport component');\n  }\n\n  ngOnDestroy(): void {\n    if (this.viewportInput?.viewportId) {\n      this.renderingEngine.disableElement(this.viewportInput.viewportId);\n      this.viewportDestroy.emit(this.viewportInput.viewportId);\n    }\n  }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { CornerstoneService, ImageIdService, ImageInfo } from '../core';\nimport { BaseViewportComponent } from './base-viewport.component';\nimport { NgZone } from '@angular/core';\n\n@Component({\n  selector: 'nc-viewport',\n  exportAs: 'ncViewport',\n  template: ` <div #imageBox class=\"dicom-viewer-viewport-container\"></div>`,\n  styleUrls: ['./viewport.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ViewportComponent extends BaseViewportComponent {\n  constructor(protected override csService: CornerstoneService, zone: NgZone) {\n    super(csService, zone);\n  }\n\n  /**\n   * 基础渲染方法 - 默认实现只是显示一个警告\n   * 子类会重写这个方法提供特定的渲染逻辑\n   */\n  override renderImage(image: ImageInfo): void {\n    console.warn('Render method not implemented in base viewport component');\n    // 虽然默认组件没有特定的渲染逻辑，但我们可以记录一些调试信息\n    if (image) {\n      console.debug('Image info provided:', image.viewportType);\n    }\n  }\n\n  override renderSegment(image: ImageInfo, segment: ImageInfo): void {\n    console.warn('Render method not implemented in base viewport component');\n    // 虽然默认组件没有特定的渲染逻辑，但我们可以记录一些调试信息\n    if (image) {\n      console.debug('Image info provided:', image.viewportType);\n    }\n    if (segment) {\n      console.debug('Segment info provided:', segment.segmentType);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit, SimpleChanges, OnChanges } from '@angular/core';\nimport { CONSTANTS, Enums, Types, utilities, volumeLoader } from '@cornerstonejs/core';\nimport { Enums as csToolEnum, segmentation } from '@cornerstonejs/tools';\nimport { CornerstoneService, ImageIdService, ctVoiRange, imageInfoToUniqueId, ImageInfo } from '../core';\nimport { BaseViewportComponent } from './base-viewport.component';\nimport { IStackViewport } from '@cornerstonejs/core/dist/esm/types';\nimport { NgZone } from '@angular/core';\n\n@Component({\n  selector: 'nc-stack-viewport',\n  template: `<div #imageBox class=\"dicom-viewer-viewport-container\"></div>`,\n  styleUrls: ['./viewport.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StackViewportComponent extends BaseViewportComponent implements OnInit, OnChanges {\n  constructor(protected override csService: CornerstoneService, private imageIdService: ImageIdService, zone: NgZone) {\n    super(csService, zone);\n  }\n\n  override ngOnInit(): void {\n    // 确保视口类型设置为STACK\n    if (this.viewportInput) {\n      this.viewportInput.type = Enums.ViewportType.STACK;\n    }\n    super.ngOnInit();\n  }\n\n  override async renderImage(image: ImageInfo): Promise<void> {\n    console.log('render stack Image');\n    if (!image || !this.viewport || !this.viewportInput?.viewportId) {\n      return;\n    }\n\n    try {\n      // 获取ImageIds\n      const imageIds = image.imageIds || [];\n      // 设置Stack\n      await (this.viewport as IStackViewport).setStack(imageIds);\n\n      // 设置VOI范围\n      (this.viewport as IStackViewport).setProperties({ voiRange: ctVoiRange });\n\n      // 渲染视口\n      this.renderingEngine.renderViewport(this.viewport.id);\n    } catch (error) {\n      console.error('Failed to render stack viewport:', error);\n    }\n  }\n\n  override async renderSegment(image: ImageInfo, segment: ImageInfo): Promise<void> {\n    if (!segment || !image || !this.viewport || !this.viewportInput?.viewportId) {\n      return;\n    }\n\n    try {\n      // 获取ImageIds\n      const segmentationId = imageInfoToUniqueId(segment);\n      segmentation.addSegmentationRepresentations(this.viewportInput.viewportId, [\n        {\n          segmentationId: segmentationId,\n          type: csToolEnum.SegmentationRepresentations.Labelmap,\n        },\n      ]);\n    } catch (error) {\n      console.error('Failed to render segment in stack viewport:', error);\n    }\n  }\n\n  private get toolGroupId(): string {\n    return `${this.viewportInput?.viewportId}_toolgroup`;\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit, SimpleChanges } from '@angular/core';\nimport { CONSTANTS, Enums, Types, setVolumesForViewports, utilities } from '@cornerstonejs/core';\nimport { Enums as csToolEnum, segmentation } from '@cornerstonejs/tools';\nimport { CornerstoneService, ImageInfo, imageInfoToUniqueId } from '../core';\nimport { BaseViewportComponent } from './base-viewport.component';\nimport { NgZone } from '@angular/core';\n\n@Component({\n  selector: 'nc-volume3d-viewport',\n  template: `<div #imageBox class=\"dicom-viewer-viewport-container\"></div>`,\n  styleUrls: ['./viewport.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Volume3DViewportComponent extends BaseViewportComponent implements OnInit {\n  @Input() volumeId?: string;\n\n  constructor(protected override csService: CornerstoneService, zone: NgZone) {\n    super(csService, zone);\n  }\n\n  override ngOnInit(): void {\n    if (this.viewportInput) {\n      this.viewportInput.type = Enums.ViewportType.VOLUME_3D;\n    }\n    super.ngOnInit();\n  }\n\n  override async renderImage(image: ImageInfo): Promise<void> {\n    if (!image || !this.viewport || !this.viewportInput?.viewportId) return;\n\n    try {\n      await setVolumesForViewports(this.renderingEngine, [{ volumeId: image.volumeId! }], [this.viewport.id]);\n      const actor = this.viewport.getDefaultActor().actor as Types.VolumeActor;\n      utilities.applyPreset(\n        actor,\n        CONSTANTS.VIEWPORT_PRESETS.find((preset) => preset.name === 'CT-Chest-Contrast-Enhanced')!,\n      );\n    } catch (error) {\n      console.error('Failed to render volume in volume3d viewport:', error);\n    }\n  }\n\n  override async renderSegment(image: ImageInfo, segment: ImageInfo): Promise<void> {\n    if (!segment || !image || !this.viewport || !this.viewportInput?.viewportId) {\n      return;\n    }\n    const segmentationId = imageInfoToUniqueId(segment);\n\n    if (!segmentationId) {\n      console.error('Invalid segmentation or reference volume data');\n      return;\n    }\n\n    try {\n      if (this.viewportInput.viewportId) {\n        segmentation.addSegmentationRepresentations(this.viewportInput.viewportId, [\n          {\n            segmentationId,\n            type: csToolEnum.SegmentationRepresentations.Surface,\n          },\n        ]);\n      }\n    } catch (error) {\n      console.error('Failed to render segment in orthographic viewport:', error);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { CONSTANTS, Enums, Types, setVolumesForViewports, utilities } from '@cornerstonejs/core';\nimport { Enums as csToolEnum, segmentation } from '@cornerstonejs/tools';\nimport { CornerstoneService, ImageInfo, imageInfoToUniqueId } from '../core';\nimport { BaseViewportComponent } from './base-viewport.component';\nimport { NgZone } from '@angular/core';\n\n@Component({\n  selector: 'nc-orthographic-viewport',\n  template: `<div #imageBox class=\"dicom-viewer-viewport-container\"></div>`,\n  styleUrls: ['./viewport.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OrthographicViewportComponent extends BaseViewportComponent implements OnInit {\n  constructor(protected override csService: CornerstoneService, zone: NgZone) {\n    super(csService, zone);\n  }\n\n  override ngOnInit(): void {\n    if (this.viewportInput) {\n      this.viewportInput.type = Enums.ViewportType.ORTHOGRAPHIC;\n    }\n    super.ngOnInit();\n  }\n\n  protected override async renderImage(image: ImageInfo): Promise<void> {\n    if (!image || !this.viewport || !this.viewportInput?.viewportId) return;\n\n    try {\n      const volumeId = image.volumeId || imageInfoToUniqueId(image);\n      await setVolumesForViewports(this.renderingEngine, [{ volumeId }], [this.viewportInput.viewportId]);\n      this.renderingEngine.renderViewport(this.viewportInput.viewportId);\n    } catch (error) {\n      console.error('Failed to render volume in orthographic viewport:', error);\n    }\n  }\n\n  protected override async renderSegment(image: ImageInfo, segment: ImageInfo): Promise<void> {\n    if (!segment || !image || !this.viewport || !this.viewportInput?.viewportId) {\n      return;\n    }\n\n    // 获取分段ID和引用体积ID\n    const segmentationId = imageInfoToUniqueId(segment);\n\n    if (!segmentationId) {\n      console.error('Invalid segmentation or reference volume data');\n      return;\n    }\n\n    try {\n      // 将分段添加到视口\n      if (this.viewportInput.viewportId) {\n        segmentation.addSegmentationRepresentations(this.viewportInput.viewportId, [\n          {\n            segmentationId,\n            type: csToolEnum.SegmentationRepresentations.Labelmap,\n          },\n        ]);\n      }\n    } catch (error) {\n      console.error('Failed to render segment in orthographic viewport:', error);\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ViewportComponent } from './viewport.component';\nimport { StackViewportComponent } from './stack-viewport.component';\nimport { Volume3DViewportComponent } from './volume3d-viewport.component';\nimport { OrthographicViewportComponent } from './orthographic-viewport.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [ViewportComponent, StackViewportComponent, Volume3DViewportComponent, OrthographicViewportComponent],\n  exports: [ViewportComponent, StackViewportComponent, Volume3DViewportComponent, OrthographicViewportComponent],\n})\nexport class ViewportModule {}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n  ViewEncapsulation,\n  Output,\n  EventEmitter,\n  AfterViewInit,\n} from '@angular/core';\nimport { Enums as csCoreEnum, imageLoader, Types, volumeLoader } from '@cornerstonejs/core';\nimport { Enums as csToolEnum, segmentation } from '@cornerstonejs/tools';\n\nimport { BehaviorSubject, combineLatest, debounceTime, filter, map, Subject } from 'rxjs';\n\nimport { ToolBarComponent, ToolEnum } from '../tool';\nimport {\n  CornerstoneService,\n  generateRandomString,\n  generateViewportInputs,\n  ImageIdService,\n  ImageInfo,\n  imageInfoToUniqueId,\n  LayoutEnum,\n  RequestSchema,\n} from '../core';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseViewportComponent } from '../viewport';\nimport { createNiftiImageIdsAndCacheMetadata } from '@cornerstonejs/nifti-volume-loader';\n\n@Component({\n  selector: 'nc-viewer',\n  exportAs: 'ncViewer',\n  templateUrl: './viewer.component.html',\n  styleUrls: ['./viewer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ViewerComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n  Layout = LayoutEnum;\n  toolGroupId = 'TOOL_GROUP_ID';\n  viewportInputs: Partial<Types.PublicViewportInput>[] = [];\n  activeViewportId: string = '';\n\n  private resizeObserver!: ResizeObserver;\n  private resizeSubject = new Subject<void>();\n  private destroy$ = new Subject<void>();\n\n  // 跟踪需要渲染的状态\n  private pendingImageRender$ = new BehaviorSubject<boolean>(false);\n  private pendingSegmentRender$ = new BehaviorSubject<boolean>(false);\n\n  // 跟踪已初始化的viewport\n  private initializedViewports = new Set<string>();\n  private viewportsToInit = new Set<string>();\n  private viewportInitialized$ = new BehaviorSubject<string>('');\n  private viewportDestroyed$ = new Subject<string>();\n\n  // 跟踪viewport是否全部已初始化\n  private allViewportsInitialized$ = new BehaviorSubject<boolean>(false);\n\n  // 跟踪工具栏是否已初始化\n  private toolbarInitialized$ = new BehaviorSubject<boolean>(false);\n\n  // 跟踪所有组件（工具栏和视口）是否都已初始化\n  private allComponentsInitialized$ = new BehaviorSubject<boolean>(false);\n\n  // 跟踪上一次的viewportType\n  private previousViewportType?: csCoreEnum.ViewportType;\n\n  @Input()\n  layout?: LayoutEnum;\n\n  @Input()\n  imageInfo?: ImageInfo;\n\n  @Input()\n  segmentInfo?: ImageInfo;\n\n  // 新增加的属性：用于存储已加载的图像和分段信息\n  loadedImageInfo?: ImageInfo;\n  loadedSegmentInfo?: ImageInfo;\n\n  @ViewChild(ToolBarComponent)\n  toolBarComponent!: ToolBarComponent;\n\n  @ViewChildren(BaseViewportComponent)\n  viewportComponentList!: QueryList<BaseViewportComponent>;\n\n  @Input()\n  toolList: ToolEnum[] = [];\n\n  @Output() viewportActivated = new EventEmitter<string>();\n  @Output() imageLoaded = new EventEmitter<void>();\n\n  get renderingEngine() {\n    return this.csService.getRenderingEngine();\n  }\n\n  get viewportIds() {\n    return this.viewportInputs.map((value) => value.viewportId!);\n  }\n\n  constructor(\n    private elementRef: ElementRef,\n    private imageIdService: ImageIdService,\n    private csService: CornerstoneService,\n    private cdr: ChangeDetectorRef,\n  ) {}\n\n  ngOnInit(): void {\n    // 初始化时记录当前的viewportType\n    this.initResizeObserver();\n    this.previousViewportType = this.imageInfo?.viewportType;\n    this.initComponentsTracking();\n    // this.generateViewports();\n\n    // 设置初始化标志，等待viewport初始化后再渲染\n    if (this.imageInfo) {\n      this.pendingImageRender$.next(true);\n    }\n\n    if (this.segmentInfo) {\n      this.pendingSegmentRender$.next(true);\n    }\n  }\n\n  ngAfterViewInit(): void {\n    // ViewChild已经完成初始化\n    if (this.toolBarComponent) {\n      // 订阅工具栏的初始化事件\n      this.toolBarComponent.toolbarInit.pipe(takeUntil(this.destroy$)).subscribe(() => {\n        console.debug('Toolbar initialized');\n        this.toolbarInitialized$.next(true);\n      });\n\n      // 订阅工具栏的销毁事件\n      this.toolBarComponent.toolbarDestroy.pipe(takeUntil(this.destroy$)).subscribe(() => {\n        console.debug('Toolbar destroyed');\n        this.toolbarInitialized$.next(false);\n      });\n    } else {\n      console.warn('ToolBarComponent not found in view children');\n    }\n  }\n\n  private initResizeObserver(): void {\n    this.resizeObserver = new ResizeObserver((entries) => {\n      for (let entry of entries) {\n        this.resizeSubject.next();\n      }\n    });\n    this.resizeObserver.observe(this.elementRef.nativeElement);\n\n    // Add debounce time\n    this.resizeSubject\n      .pipe(\n        debounceTime(300), // Set debounce time to 300ms\n        takeUntil(this.destroy$), // Unsubscribe when component is destroyed\n      )\n      .subscribe(() => {\n        const renderingEngine = this.csService.getRenderingEngine();\n        if (renderingEngine) {\n          renderingEngine.resize(true, false);\n        }\n      });\n  }\n\n  private initComponentsTracking(): void {\n    // 初始化视口跟踪\n    this.initViewportTracking();\n\n    // 监听工具栏初始化状态变化\n    this.toolbarInitialized$.pipe(takeUntil(this.destroy$)).subscribe((initialized) => {\n      if (initialized && this.toolBarComponent) {\n        // 当toolbar初始化后，注册所有已初始化的viewport\n        console.debug(`Toolbar initialized, registering all viewports`);\n        this.initializedViewports.forEach((viewportId) => {\n          this.toolBarComponent.registerViewport(viewportId);\n        });\n      }\n    });\n\n    // 监听工具栏和视口的初始化状态\n    combineLatest([this.toolbarInitialized$, this.allViewportsInitialized$])\n      .pipe(\n        takeUntil(this.destroy$),\n        map(([toolbarInitialized, viewportsInitialized]) => toolbarInitialized && viewportsInitialized),\n      )\n      .subscribe((allInitialized) => {\n        console.debug(`All components initialized: ${allInitialized}`);\n        this.allComponentsInitialized$.next(allInitialized);\n      });\n\n    // 当所有组件都初始化完成且有待处理的渲染任务时执行渲染\n    combineLatest([this.allComponentsInitialized$, this.pendingImageRender$, this.pendingSegmentRender$])\n      .pipe(\n        takeUntil(this.destroy$),\n        filter(([allInitialized, pendingImage, pendingSegment]) => allInitialized && (pendingImage || pendingSegment)),\n      )\n      .subscribe(([_, pendingImage, pendingSegment]) => {\n        console.debug('All components ready, processing pending renders');\n        if (pendingImage && this.imageInfo) {\n          this.loadedImageInfo = undefined;\n          this.loadedSegmentInfo = undefined;\n          segmentation.state.removeAllSegmentations();\n          this.retrieveImage(false);\n          this.pendingImageRender$.next(false);\n        }\n\n        if (pendingSegment && this.segmentInfo) {\n          this.loadedSegmentInfo = undefined;\n          segmentation.state.removeAllSegmentations();\n          this.retrieveImage(true);\n          this.pendingSegmentRender$.next(false);\n        }\n      });\n  }\n\n  private initViewportTracking(): void {\n    // 处理viewport初始化事件\n    this.viewportInitialized$.pipe(takeUntil(this.destroy$)).subscribe((viewportId) => {\n      console.debug(`Viewport initialized: ${viewportId}`);\n      this.initializedViewports.add(viewportId);\n\n      // 如果toolbar已初始化，直接注册viewport\n      if (this.toolbarInitialized$.value && this.toolBarComponent) {\n        this.toolBarComponent.registerViewport(viewportId);\n      }\n\n      this.checkAllViewportsInitialized();\n    });\n\n    // 处理viewport销毁事件\n    this.viewportDestroyed$.pipe(takeUntil(this.destroy$)).subscribe((viewportId) => {\n      console.debug(`Viewport destroyed: ${viewportId}`);\n      this.initializedViewports.delete(viewportId);\n      this.viewportsToInit.delete(viewportId);\n\n      // 仅当toolbar已初始化时才注销viewport\n      if (this.toolbarInitialized$.value && this.toolBarComponent) {\n        this.toolBarComponent.unregisterViewport(viewportId);\n      }\n\n      this.checkAllViewportsInitialized();\n    });\n  }\n\n  private checkAllViewportsInitialized(): void {\n    const allInitialized =\n      this.viewportsToInit.size > 0 && this.initializedViewports.size === this.viewportsToInit.size;\n    console.debug(`Checking viewports initialized: ${this.initializedViewports.size}/${this.viewportsToInit.size}`);\n    this.allViewportsInitialized$.next(allInitialized);\n\n    // 设置默认的active viewport，如果所有viewport都初始化完成且尚未设置\n    if (allInitialized && !this.activeViewportId && this.viewportIds.length > 0) {\n      this.activeViewportId = this.viewportIds[0];\n      this.cdr.detectChanges();\n    }\n  }\n\n  onViewportInit(viewportId: string) {\n    console.debug('Viewport initialized event received:', viewportId);\n    this.viewportInitialized$.next(viewportId);\n  }\n\n  onViewportDestroy(viewportId: string) {\n    console.debug('Viewport destroyed event received:', viewportId);\n    this.viewportDestroyed$.next(viewportId);\n  }\n\n  onToolbarInit() {\n    console.debug('ToolBar initialized event received');\n    this.toolbarInitialized$.next(true);\n    // 注册逻辑已移到toolbarInitialized$订阅中处理\n  }\n\n  onToolbarDestroy() {\n    console.debug('ToolBar destroyed event received');\n    this.toolbarInitialized$.next(false);\n    // 销毁逻辑已移到toolbarInitialized$订阅中处理\n  }\n\n  generateViewports() {\n    // 重置viewport跟踪\n    this.initializedViewports.clear();\n    this.viewportsToInit.clear();\n    this.allViewportsInitialized$.next(false);\n\n    if (this.layout !== undefined && this.imageInfo?.viewportType) {\n      const suffix = generateRandomString();\n      this.viewportInputs = generateViewportInputs(this.layout, suffix, this.imageInfo);\n      this.viewportInputs.forEach((viewport) => {\n        if (viewport.viewportId) {\n          this.viewportsToInit.add(viewport.viewportId);\n        }\n      });\n      // Reset activeViewportId\n      this.activeViewportId = '';\n    }\n    console.debug(`Generated ${this.viewportsToInit.size} viewports to initialize`);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { imageInfo, segmentInfo, layout } = changes;\n    let viewportTypeChanged = false;\n\n    // 检查imageInfo的viewportType是否变更\n    if (imageInfo && this.imageInfo) {\n      const currentViewportType = this.imageInfo.viewportType;\n\n      // 使用SimpleChanges提供的previousValue和currentValue进行比较\n      if (imageInfo.previousValue?.viewportType !== imageInfo.currentValue?.viewportType) {\n        viewportTypeChanged = true;\n      }\n      // 如果SimpleChanges没有提供足够信息，使用我们自己跟踪的previousViewportType\n      else if (this.previousViewportType !== currentViewportType) {\n        viewportTypeChanged = true;\n      }\n\n      // 更新记录的viewportType\n      this.previousViewportType = currentViewportType;\n    }\n\n    // 布局发生变化或viewportType变更时重新生成viewport\n    if ((layout && !layout.isFirstChange()) || viewportTypeChanged) {\n      console.debug(`Layout or ViewportType changed, regenerating viewports`);\n      this.generateViewports();\n\n      // 设置标志表示需要在viewport初始化后渲染\n      if (this.imageInfo) {\n        this.pendingImageRender$.next(true);\n      }\n      if (this.segmentInfo) {\n        this.pendingSegmentRender$.next(true);\n      }\n    } else {\n      // 其他变化情况处理\n      if (imageInfo && this.imageInfo) {\n        this.pendingImageRender$.next(true);\n      }\n\n      if (segmentInfo && this.segmentInfo) {\n        this.pendingSegmentRender$.next(true);\n      }\n\n      // 如果所有组件已初始化，触发状态检查以执行渲染\n      if (this.allComponentsInitialized$.value) {\n        // 重新检查所有组件的初始化状态\n        this.checkAllViewportsInitialized();\n      }\n    }\n\n    // Change detection - refresh view\n    this.cdr.detectChanges();\n  }\n\n  onViewportClick(viewportId: string | undefined) {\n    if (viewportId) {\n      this.activeViewportId = viewportId;\n      this.viewportActivated.emit(viewportId);\n    }\n  }\n\n  /**\n   * Retrieve image data without rendering\n   * Rendering is handled by each viewport component\n   */\n  async retrieveImage(isSegment: boolean = false): Promise<void> {\n    const imageInfo = isSegment ? this.segmentInfo : this.imageInfo;\n    if (!imageInfo) {\n      return;\n    }\n\n    let imageIds: string[] = [];\n\n    // 根据不同schema获取imageIds\n    if (imageInfo.schema === RequestSchema.wadoRs) {\n      imageIds = await this.imageIdService.wadoRsCreateImageIdsAndCacheMetaData(imageInfo);\n    } else if (imageInfo.schema === RequestSchema.nifti) {\n      imageIds = await createNiftiImageIdsAndCacheMetadata({ url: imageInfo.urlRoot });\n    } else {\n      console.error('Unsupported request schema');\n      return;\n    }\n\n    // 准备分段和图像数据的处理函数\n    const processSegmentation = async (labelImages: any[], uniqueId: string) => {\n      const derivedSegmentationImages = await imageLoader.createAndCacheDerivedLabelmapImages(imageIds);\n      const derivedSegmentationImageIds = derivedSegmentationImages.map((image) => image.imageId);\n\n      // 处理标签数据\n      for (let i = 0; i < derivedSegmentationImages.length; i++) {\n        const voxelManager = derivedSegmentationImages[i].voxelManager!;\n        const scalarData = voxelManager.getScalarData();\n        const labelImage = labelImages[i];\n        if (labelImage) {\n          scalarData.set(labelImage.getPixelData());\n          voxelManager.setScalarData(scalarData);\n        }\n      }\n\n      // Check if segmentation already exists and remove it\n      const existingSegmentation = segmentation.state.getSegmentation(uniqueId);\n      if (existingSegmentation && segmentation.removeSegmentation) {\n        segmentation.removeSegmentation(uniqueId);\n      }\n\n      // Add new segmentation\n      segmentation.addSegmentations([\n        {\n          segmentationId: uniqueId,\n          representation: {\n            type: csToolEnum.SegmentationRepresentations.Labelmap,\n            data: {\n              imageIds: derivedSegmentationImageIds,\n            },\n          },\n        },\n      ]);\n\n      return derivedSegmentationImageIds;\n    };\n\n    // Process data based on viewport type\n    if (imageInfo.viewportType !== csCoreEnum.ViewportType.STACK) {\n      // Volume rendering processing\n      const volumeId = imageInfoToUniqueId(imageInfo);\n      const volume = await volumeLoader.createAndCacheVolume(volumeId, { imageIds });\n\n      await volume.load(async () => {\n        if (isSegment) {\n          const labelImages = volume.getCornerstoneImages();\n          const uniqueId = imageInfoToUniqueId(imageInfo);\n          const derivedSegmentationImageIds = await processSegmentation(labelImages, uniqueId);\n          // 更新 loadedSegmentInfo 而不是直接修改输入的 segmentInfo\n          this.loadedSegmentInfo = { ...imageInfo!, imageIds: derivedSegmentationImageIds };\n        } else {\n          // 更新 loadedImageInfo 而不是直接修改输入的 imageInfo\n          this.loadedImageInfo = { ...imageInfo!, volumeId, imageIds };\n        }\n        this.cdr.detectChanges();\n        this.imageLoaded.emit();\n      });\n    } else {\n      // Plane image processing\n      const images = await imageLoader.loadAndCacheImages(imageIds);\n\n      if (isSegment) {\n        const uniqueId = imageInfoToUniqueId(imageInfo);\n        const derivedSegmentationImageIds = await processSegmentation(await Promise.all(images), uniqueId);\n        // 更新 loadedSegmentInfo 而不是直接修改输入的 segmentInfo\n        this.loadedSegmentInfo = { ...imageInfo!, imageIds: derivedSegmentationImageIds };\n      } else {\n        // 更新 loadedImageInfo 而不是直接修改输入的 imageInfo\n        this.loadedImageInfo = { ...imageInfo!, imageIds };\n      }\n\n      this.cdr.detectChanges();\n      this.imageLoaded.emit();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver.disconnect();\n    this.destroy$.next();\n    this.destroy$.complete();\n    console.debug('viewer destroyed');\n  }\n}\n","<nc-tool-bar\n  class=\"dicom-viewer-tool\"\n  [toolGroupId]=\"toolGroupId\"\n  [toolList]=\"toolList\"\n  [activeViewportId]=\"activeViewportId\"\n  (toolbarInit)=\"onToolbarInit()\"\n  (toolbarDestroy)=\"onToolbarDestroy()\"\n>\n</nc-tool-bar>\n\n<div\n  class=\"dicom-viewer-container\"\n  [ngClass]=\"{\n    'layout-11': layout === Layout.LAYOUT_1x1,\n    'layout-12': layout === Layout.LAYOUT_1x2,\n    'layout-13': layout === Layout.LAYOUT_1x3,\n    'layout-22': layout === Layout.LAYOUT_2x2,\n  }\"\n>\n  <!-- 动态选择合适的视口组件类型 -->\n  <ng-container *ngFor=\"let viewport of viewportInputs\">\n    <ng-container [ngSwitch]=\"viewport.type\">\n      <!-- Stack视口 -->\n      <nc-stack-viewport\n        class=\"dicom-viewer-viewport\"\n        *ngSwitchCase=\"'stack'\"\n        [viewportInput]=\"viewport\"\n        [active]=\"viewport.viewportId === activeViewportId\"\n        [imageInfo]=\"loadedImageInfo\"\n        [segmentInfo]=\"loadedSegmentInfo\"\n        (viewportUpdated)=\"onViewportInit($event)\"\n        (viewportDestroy)=\"onViewportDestroy($event)\"\n        (click)=\"onViewportClick(viewport.viewportId)\"\n      >\n      </nc-stack-viewport>\n\n      <!-- Volume3D视口 -->\n      <nc-volume3d-viewport\n        class=\"dicom-viewer-viewport\"\n        *ngSwitchCase=\"'volume3d'\"\n        [viewportInput]=\"viewport\"\n        [active]=\"viewport.viewportId === activeViewportId\"\n        [imageInfo]=\"loadedImageInfo\"\n        [segmentInfo]=\"loadedSegmentInfo\"\n        (viewportUpdated)=\"onViewportInit($event)\"\n        (viewportDestroy)=\"onViewportDestroy($event)\"\n        (click)=\"onViewportClick(viewport.viewportId)\"\n      >\n      </nc-volume3d-viewport>\n\n      <!-- Orthographic视口 -->\n      <nc-orthographic-viewport\n        class=\"dicom-viewer-viewport\"\n        *ngSwitchCase=\"'orthographic'\"\n        [viewportInput]=\"viewport\"\n        [active]=\"viewport.viewportId === activeViewportId\"\n        [imageInfo]=\"loadedImageInfo\"\n        [segmentInfo]=\"loadedSegmentInfo\"\n        (viewportUpdated)=\"onViewportInit($event)\"\n        (viewportDestroy)=\"onViewportDestroy($event)\"\n        (click)=\"onViewportClick(viewport.viewportId)\"\n      >\n      </nc-orthographic-viewport>\n\n      <!-- 默认视口（兼容性保障） -->\n      <nc-viewport\n        class=\"dicom-viewer-viewport\"\n        *ngSwitchDefault\n        [viewportInput]=\"viewport\"\n        [active]=\"viewport.viewportId === activeViewportId\"\n        [imageInfo]=\"loadedImageInfo\"\n        [segmentInfo]=\"loadedSegmentInfo\"\n        (viewportUpdated)=\"onViewportInit($event)\"\n        (viewportDestroy)=\"onViewportDestroy($event)\"\n        (click)=\"onViewportClick(viewport.viewportId)\"\n      >\n      </nc-viewport>\n    </ng-container>\n  </ng-container>\n</div>\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ViewerComponent } from './viewer.component';\nimport { CornerstoneService } from '../core';\nimport { ToolModule } from '../tool';\nimport { ViewportModule } from '../viewport/viewport.module';\nimport { CommonModule } from '@angular/common';\n\nexport function initializeLib(libService: CornerstoneService) {\n  return () => libService.init();\n}\n@NgModule({\n  declarations: [ViewerComponent],\n  imports: [CommonModule, ToolModule, ViewportModule],\n  exports: [ViewerComponent],\n})\nexport class ViewerModule {\n  static forRoot(): ModuleWithProviders<ViewerModule> {\n    return {\n      ngModule: ViewerModule,\n      providers: [\n        CornerstoneService,\n        {\n          provide: APP_INITIALIZER,\n          useFactory: initializeLib,\n          deps: [CornerstoneService],\n          multi: true,\n        },\n      ],\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["csUtils","csRenderInit","csToolInit","csCoreEnum","i1","i2.IconComponent","csToolsEnums","i1.CornerstoneService","i3.ButtonComponent","i4.ButtonGroupComponent","i1.NcIconService","i2.IconModule","csToolEnum","i1.ImageIdService","i3.ToolBarComponent","i4.ViewportComponent","i5.StackViewportComponent","i6.Volume3DViewportComponent","i7.OrthographicViewportComponent"],"mappings":"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"}