larvitar 4.0.0-alpha.6 → 4.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,8 +52,9 @@ declare const setDefaultToolsProps: (newProps: Partial<ToolConfig>[]) => void;
52
52
  * Register a custom tool
53
53
  * @param {String} toolName - The name of the tool
54
54
  * @param {Object} toolClass - The tool class
55
+ * @param {String} toolVersion - The version of the tool, can be "MPR", "3D" (to be used with cs3D) or "" (default - cs legacy)
55
56
  * NOTE: toolName must be unique
56
57
  * NOTE: toolClass must be a valid cornerstone tool
57
58
  */
58
- declare const registerExternalTool: (toolName: string, toolClass: any) => void;
59
+ declare const registerExternalTool: (toolName: string, toolClass: any, toolVersion?: "MPR" | "3D" | "") => void;
59
60
  export { DEFAULT_TOOLS, DEFAULT_TOOLS_3D, DEFAULT_TOOLS_MPR, DEFAULT_STYLE, DEFAULT_SETTINGS, DEFAULT_MOUSE_KEYS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool };
@@ -0,0 +1,43 @@
1
+ import { BaseTool } from "@cornerstonejs/tools";
2
+ import * as EventTypes from "@cornerstonejs/tools/dist/esm/types/EventTypes";
3
+ /**
4
+ * WindowLevel tool manipulates the windowLevel applied to a viewport. It
5
+ * provides a way to set the windowCenter and windowWidth of a viewport
6
+ * by dragging mouse over the image.
7
+ *
8
+ */
9
+ declare class CustomWWWLTool extends BaseTool {
10
+ static toolName: string;
11
+ constructor(toolProps?: {}, defaultToolProps?: {
12
+ supportedInteractionTypes: string[];
13
+ });
14
+ touchDragCallback(evt: EventTypes.InteractionEventType): void;
15
+ mouseDragCallback(evt: EventTypes.InteractionEventType): void;
16
+ getPTScaledNewRange({ deltaPointsCanvas, lower, upper, clientHeight, viewport, volumeId, isPreScaled }: {
17
+ deltaPointsCanvas: any;
18
+ lower: any;
19
+ upper: any;
20
+ clientHeight: any;
21
+ viewport: any;
22
+ volumeId: any;
23
+ isPreScaled: any;
24
+ }): {
25
+ lower: any;
26
+ upper: any;
27
+ };
28
+ getNewRange({ viewport, deltaPointsCanvas, volumeId, lower, upper }: {
29
+ viewport: any;
30
+ deltaPointsCanvas: any;
31
+ volumeId: any;
32
+ lower: any;
33
+ upper: any;
34
+ }): {
35
+ lower: number;
36
+ upper: number;
37
+ };
38
+ _getMultiplierFromDynamicRange(viewport: any, volumeId: any): number;
39
+ _getImageDynamicRangeFromViewport(viewport: any): number;
40
+ _getImageDynamicRangeFromMiddleSlice: (scalarData: any, dimensions: any) => number;
41
+ private _getMinMax;
42
+ }
43
+ export default CustomWWWLTool;
@@ -2,6 +2,7 @@
2
2
  * @desc This file provides functionalities
3
3
  * for initializing tools and stacks
4
4
  */
5
+ import * as cornerstone from "@cornerstonejs/core";
5
6
  import * as cornerstoneTools from "@cornerstonejs/tools";
6
7
  import type { ToolConfig, ToolSettings, ToolStyle } from "../../imaging/tools/types";
7
8
  import type { RenderingEngine } from "@cornerstonejs/core";
@@ -41,8 +42,32 @@ export declare const setToolDisabled: (toolName: string, groupId?: string, reset
41
42
  /**
42
43
  * @function syncViewportsCamera
43
44
  * @desc Synchronizes the camera position of two (volume) viewports
45
+ * @param id - unique id for the synchronizer @default "default"
44
46
  * @param targetViewportId - the id of the target viewport where the camera will be synced
45
47
  * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
46
48
  */
47
- export declare const syncViewportsCamera: (targetViewportId: string, sourceViewportId: string) => void;
48
- export declare const createToolGroup: (groupId?: string, viewports?: string[], tools?: string[]) => cornerstoneTools.Types.IToolGroup | undefined;
49
+ export declare const syncViewportsCamera: (id: string | undefined, targetViewportId: string, sourceViewportId: string) => void;
50
+ /**
51
+ * Create a tool group and add the specified viewports and tools to it.
52
+ * @function createToolGroup
53
+ * @param groupId - The id of the tool group to create. @default "default"
54
+ * @param viewports
55
+ * @param tools
56
+ * @returns toolGroup - The created tool group.
57
+ */
58
+ export declare const createToolGroup: (groupId?: string, viewports?: string[], tools?: any[]) => cornerstoneTools.Types.IToolGroup | undefined;
59
+ /**
60
+ * Set slab thickness and mode for a given viewport
61
+ * @function setSlab
62
+ * @param slabThickness - The thickness of the slab [in mm].
63
+ * @param slabMode - The blend mode to use for the slab.
64
+ * @param viewportId - The id of the viewport where the slab will be set.
65
+ */
66
+ export declare const setSlab: (slabThickness: number, slabMode: cornerstone.Enums.BlendModes, viewportId: string) => void;
67
+ /**
68
+ * Set the window width and level for a given viewport
69
+ * @param ww - window width
70
+ * @param wl - window level
71
+ * @param viewportId - The id of the viewport where the window width and level will be set.
72
+ */
73
+ export declare const setWWWL: (ww: number, wl: number, viewportId: string) => void;
package/dist/index.d.ts CHANGED
@@ -49,9 +49,10 @@ import { renderImage as _renderImage } from "./imaging3d/imageRendering";
49
49
  import { renderMpr as _renderMpr } from "./imaging3d/imageRendering";
50
50
  import { prefetchMetadataInformation as _prefetchMetadataInformation } from "./imaging3d/multiframe";
51
51
  import { convertMultiframeImageIds as _convertMultiframeImageIds } from "./imaging3d/multiframe";
52
- import { addDefaultTools as _addDefaultTools, initializeCSTools as _initializeCSTools, addTool as _addTool, setToolActive as _setToolActive, setToolPassive as _setToolPassive, setToolEnabled as _setToolEnabled, setToolDisabled as _setToolDisabled, syncViewportsCamera as _syncViewportsCamera, createToolGroup as _createToolGroup } from "./imaging3d/tools/main";
52
+ import { addDefaultTools as _addDefaultTools, initializeCSTools as _initializeCSTools, addTool as _addTool, setToolActive as _setToolActive, setToolPassive as _setToolPassive, setToolEnabled as _setToolEnabled, setToolDisabled as _setToolDisabled, syncViewportsCamera as _syncViewportsCamera, createToolGroup as _createToolGroup, setSlab as _setSlab } from "./imaging3d/tools/main";
53
+ import _CustomWWWLTool from "./imaging3d/tools/custom/exampleCustomTool";
53
54
  import { updateImageManager, populateImageManager, getImageManager, resetImageManager, removeDataFromImageManager, getDataFromImageManager, getSopInstanceUIDFromImageManager, getImageTracker, populateGSPSManager, getGSPSManager, resetGSPSManager, getFileManager, resetFileManager, populateFileManager, getDataFromFileManager } from "./imaging/imageManagers";
54
- export { _cornerstone, _cornerstoneDICOMImageLoader, _cornerstoneTools, _initializeCSTools, _initializeImageLoader, _readFiles, _renderImage, _renderMpr, _registerStreamingImageVolume, _convertMetadata, _loadAndCacheMetadata, _prefetchMetadataInformation, _convertMultiframeImageIds, _addDefaultTools, _addTool, _setToolActive, _setToolPassive, _setToolEnabled, _setToolDisabled, _syncViewportsCamera, _createToolGroup, VERSION, cornerstone, cornerstoneTools, parseDicom, cornerstoneFileImageLoader, segModule, cornerstoneDICOMImageLoader, checkAndClearMemory, checkMemoryAllocation, getUsedMemory, getAvailableMemory, getPerformanceMonitor, activatePerformanceMonitor, deactivatePerformanceMonitor, store, parseECG, renderECG, unrenderECG, syncECGFrame, updateECGMarker, updateECGTotalTime, getDefaultECGLayout, getImagePresets, setImagePreset, setImageCustomPreset, getNormalOrientation, getMinPixelValue, getMaxPixelValue, getPixelRepresentation, getTypedArrayFromDataType, getSortedStack, randomId, getMeanValue, getReslicedMetadata, getReslicedPixeldata, getDistanceBetweenSlices, getImageMetadata, buildHeader, getCachedPixelData, buildData, buildDataAsync, importNRRDImage, exportImageToBase64, exportImageToBase64OriginalSizes, anonymize, customizeByteArray, buildLayer, updateLayer, getActiveLayer, setActiveLayer, initializeImageLoader, initializeWebImageLoader, initializeFileImageLoader, registerNRRDImageLoader, registerResliceLoader, registerMultiFrameImageLoader, registerSingleFrameImageLoader, registerDsaImageLoader, updateLoadedStack, reset, readFile, readFiles, parseDataSet, clearImageParsing, convertQidoMetadata, clearImageCache, clearStandardImageCache, clearDSAImageCache, loadAndCacheImages, renderFileImage, renderDICOMPDF, renderWebImage, disableViewport, unloadViewport, resizeViewport, renderImage, redrawImage, resetViewports, updateViewportData, toggleMouseToolsListeners, storeViewportData, invertImage, flipImageHorizontal, flipImageVertical, rotateImageLeft, rotateImageRight, updateImageManager, populateImageManager, getImageManager, resetImageManager, removeDataFromImageManager, getDataFromImageManager, getSopInstanceUIDFromImageManager, getImageTracker, populateGSPSManager, getGSPSManager, resetGSPSManager, populateFileManager, getFileManager, resetFileManager, getDataFromFileManager, resliceSeries, getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB, parseContours, getImageFrame, buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions, loadReslicedImage, getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, loadAndCacheDsaImageStack, loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache, setSingleFrameCache, clearSingleFrameCache, loadSingleFrameImage, populateDsaImageIds, resetFileLoader, getFileCustomImageId, applyDSAShift, addDiameterTool, addContoursTool, addMaskEditingTool, getCurrentMaskData, addStackStateToElement, addSeedsTool, clearMeasurements, getToolState, clearToolStateByName, updateDiameterTool, addToolStateSingleSlice, clearCornerstoneElements, syncToolStack, updateStackToolState, setSegmentationConfig, csToolsUpdateStack, initializeCSTools, setToolsStyle, addDefaultTools, addTool, setToolActive, setToolDisabled, setToolEnabled, setToolPassive, DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool, addMouseKeyHandlers, removeMouseKeyHandlers, initSegmentationModule, addSegmentationMask, setActiveLabelmap, setActiveSegment, undoLastStroke, redoLastStroke, setBrushProps, hexToRgb, rgbToHex, clearSegmentationState, deleteMask, enableBrushTool, disableBrushTool, toggleContourMode, toggleVisibility, getActiveLabelmapBuffer, updateTemporalViewportData, logger, setLogLevel };
55
+ export { _cornerstone, _cornerstoneDICOMImageLoader, _cornerstoneTools, _initializeCSTools, _initializeImageLoader, _readFiles, _renderImage, _renderMpr, _registerStreamingImageVolume, _convertMetadata, _loadAndCacheMetadata, _prefetchMetadataInformation, _convertMultiframeImageIds, _addDefaultTools, _addTool, _setToolActive, _setToolPassive, _setToolEnabled, _setToolDisabled, _syncViewportsCamera, _createToolGroup, _setSlab, _CustomWWWLTool, VERSION, cornerstone, cornerstoneTools, parseDicom, cornerstoneFileImageLoader, segModule, cornerstoneDICOMImageLoader, checkAndClearMemory, checkMemoryAllocation, getUsedMemory, getAvailableMemory, getPerformanceMonitor, activatePerformanceMonitor, deactivatePerformanceMonitor, store, parseECG, renderECG, unrenderECG, syncECGFrame, updateECGMarker, updateECGTotalTime, getDefaultECGLayout, getImagePresets, setImagePreset, setImageCustomPreset, getNormalOrientation, getMinPixelValue, getMaxPixelValue, getPixelRepresentation, getTypedArrayFromDataType, getSortedStack, randomId, getMeanValue, getReslicedMetadata, getReslicedPixeldata, getDistanceBetweenSlices, getImageMetadata, buildHeader, getCachedPixelData, buildData, buildDataAsync, importNRRDImage, exportImageToBase64, exportImageToBase64OriginalSizes, anonymize, customizeByteArray, buildLayer, updateLayer, getActiveLayer, setActiveLayer, initializeImageLoader, initializeWebImageLoader, initializeFileImageLoader, registerNRRDImageLoader, registerResliceLoader, registerMultiFrameImageLoader, registerSingleFrameImageLoader, registerDsaImageLoader, updateLoadedStack, reset, readFile, readFiles, parseDataSet, clearImageParsing, convertQidoMetadata, clearImageCache, clearStandardImageCache, clearDSAImageCache, loadAndCacheImages, renderFileImage, renderDICOMPDF, renderWebImage, disableViewport, unloadViewport, resizeViewport, renderImage, redrawImage, resetViewports, updateViewportData, toggleMouseToolsListeners, storeViewportData, invertImage, flipImageHorizontal, flipImageVertical, rotateImageLeft, rotateImageRight, updateImageManager, populateImageManager, getImageManager, resetImageManager, removeDataFromImageManager, getDataFromImageManager, getSopInstanceUIDFromImageManager, getImageTracker, populateGSPSManager, getGSPSManager, resetGSPSManager, populateFileManager, getFileManager, resetFileManager, getDataFromFileManager, resliceSeries, getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB, parseContours, getImageFrame, buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions, loadReslicedImage, getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, loadAndCacheDsaImageStack, loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache, setSingleFrameCache, clearSingleFrameCache, loadSingleFrameImage, populateDsaImageIds, resetFileLoader, getFileCustomImageId, applyDSAShift, addDiameterTool, addContoursTool, addMaskEditingTool, getCurrentMaskData, addStackStateToElement, addSeedsTool, clearMeasurements, getToolState, clearToolStateByName, updateDiameterTool, addToolStateSingleSlice, clearCornerstoneElements, syncToolStack, updateStackToolState, setSegmentationConfig, csToolsUpdateStack, initializeCSTools, setToolsStyle, addDefaultTools, addTool, setToolActive, setToolDisabled, setToolEnabled, setToolPassive, DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool, addMouseKeyHandlers, removeMouseKeyHandlers, initSegmentationModule, addSegmentationMask, setActiveLabelmap, setActiveSegment, undoLastStroke, redoLastStroke, setBrushProps, hexToRgb, rgbToHex, clearSegmentationState, deleteMask, enableBrushTool, disableBrushTool, toggleContourMode, toggleVisibility, getActiveLabelmapBuffer, updateTemporalViewportData, logger, setLogLevel };
55
56
  export declare const updateLarvitarManager: (...args: any) => any;
56
57
  export declare const populateLarvitarManager: (...args: any) => any;
57
58
  export declare const getLarvitarManager: (...args: any) => any;
package/dist/larvitar.js CHANGED
@@ -83603,6 +83603,7 @@ __webpack_require__.d(__webpack_exports__, {
83603
83603
  DEFAULT_TOOLS: () => (/* reexport */ index_DEFAULT_TOOLS),
83604
83604
  HSVToRGB: () => (/* reexport */ index_HSVToRGB),
83605
83605
  VERSION: () => (/* binding */ index_VERSION),
83606
+ _CustomWWWLTool: () => (/* reexport */ index_exampleCustomTool),
83606
83607
  _addDefaultTools: () => (/* reexport */ index_main_addDefaultTools),
83607
83608
  _addTool: () => (/* reexport */ index_main_addTool),
83608
83609
  _convertMetadata: () => (/* reexport */ index_convertMetadata),
@@ -83619,6 +83620,7 @@ __webpack_require__.d(__webpack_exports__, {
83619
83620
  _registerStreamingImageVolume: () => (/* reexport */ index_registerStreamingImageVolume),
83620
83621
  _renderImage: () => (/* reexport */ index_imageRendering_renderImage),
83621
83622
  _renderMpr: () => (/* reexport */ index_renderMpr),
83623
+ _setSlab: () => (/* reexport */ index_setSlab),
83622
83624
  _setToolActive: () => (/* reexport */ index_main_setToolActive),
83623
83625
  _setToolDisabled: () => (/* reexport */ index_main_setToolDisabled),
83624
83626
  _setToolEnabled: () => (/* reexport */ index_main_setToolEnabled),
@@ -85549,7 +85551,7 @@ __webpack_require__.d(index_dist_esm_constants_namespaceObject, {
85549
85551
  });
85550
85552
 
85551
85553
  ;// ./package.json
85552
- const index_package_namespaceObject = /*#__PURE__*/JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"4.0.0-alpha.6","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts","imaging3d/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","format":"prettier --write \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","format:check":"prettier --check \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","postinstall":"patch-package","build":"webpack --config ./bundler/webpack.prod.debug.js","dev":"webpack --progress --config ./bundler/webpack.dev.js","docs:dev":"vuepress dev docs","docs:build":"vuepress build docs","cypress":"cypress open","cypress:run":"cypress run","cypress:run:headless":"cypress run --headless"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@cornerstonejs/core":"^3.12.1","@cornerstonejs/dicom-image-loader":"^3.12.1","@cornerstonejs/nifti-volume-loader":"^3.12.1","@cornerstonejs/tools":"^3.12.1","@hyzyla/pdfium":"^2.1.2","@icr/polyseg-wasm":"^0.4.0","consola":"^3.4.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dcmjs":"^0.34.0","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@rollup/plugin-commonjs":"^28.0.3","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","@vuepress/bundler-vite":"^2.0.0-rc.18","@vuepress/plugin-slimsearch":"^2.0.0-rc.68","@vuepress/theme-default":"^2.0.0-rc.60","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","cypress":"^14.2.0","cypress-image-snapshot":"^4.0.1","cypress-mochawesome-reporter":"^3.8.2","cypress-multi-reporters":"^2.0.5","eslint":"^9.17.0","html-loader":"^4.2.0","html-webpack-plugin":"^5.6.0","jsdom":"^26.0.0","lodash-webpack-plugin":"^0.11.6","mocha-json-reporter":"^1.0.0-1","patch-package":"^8.0.0","prettier":"^3.5.3","sass-embedded":"^1.80.7","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","vuepress":"^2.0.0-rc.18","webpack":"^5.76.3","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');
85554
+ const index_package_namespaceObject = /*#__PURE__*/JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"4.0.0-alpha.7","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts","imaging3d/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","format":"prettier --write \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","format:check":"prettier --check \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","postinstall":"patch-package","build":"webpack --config ./bundler/webpack.prod.debug.js","dev":"webpack --progress --config ./bundler/webpack.dev.js","docs:dev":"vuepress dev docs","docs:build":"vuepress build docs","cypress":"cypress open","cypress:run":"cypress run","cypress:run:headless":"cypress run --headless"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@cornerstonejs/core":"^3.12.1","@cornerstonejs/dicom-image-loader":"^3.12.1","@cornerstonejs/nifti-volume-loader":"^3.12.1","@cornerstonejs/tools":"^3.12.1","@hyzyla/pdfium":"^2.1.2","@icr/polyseg-wasm":"^0.4.0","consola":"^3.4.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dcmjs":"^0.34.0","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@rollup/plugin-commonjs":"^28.0.3","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","@vuepress/bundler-vite":"^2.0.0-rc.18","@vuepress/plugin-slimsearch":"^2.0.0-rc.68","@vuepress/theme-default":"^2.0.0-rc.60","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","cypress":"^14.2.0","cypress-image-snapshot":"^4.0.1","cypress-mochawesome-reporter":"^3.8.2","cypress-multi-reporters":"^2.0.5","eslint":"^9.17.0","html-loader":"^4.2.0","html-webpack-plugin":"^5.6.0","jsdom":"^26.0.0","lodash-webpack-plugin":"^0.11.6","mocha-json-reporter":"^1.0.0-1","patch-package":"^8.0.0","prettier":"^3.5.3","sass-embedded":"^1.80.7","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","vuepress":"^2.0.0-rc.18","webpack":"^5.76.3","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');
85553
85555
  // EXTERNAL MODULE: ./node_modules/cornerstone-core/dist/cornerstone.js
85554
85556
  var index_dist_cornerstone = __webpack_require__(1198);
85555
85557
  var index_cornerstone_default = /*#__PURE__*/__webpack_require__.n(index_dist_cornerstone);
@@ -98019,15 +98021,21 @@ const index_setDefaultToolsProps = function (newProps) {
98019
98021
  * Register a custom tool
98020
98022
  * @param {String} toolName - The name of the tool
98021
98023
  * @param {Object} toolClass - The tool class
98024
+ * @param {String} toolVersion - The version of the tool, can be "MPR", "3D" (to be used with cs3D) or "" (default - cs legacy)
98022
98025
  * NOTE: toolName must be unique
98023
98026
  * NOTE: toolClass must be a valid cornerstone tool
98024
98027
  */
98025
- const index_registerExternalTool = function (toolName, toolClass) {
98028
+ const index_registerExternalTool = function (toolName, toolClass, toolVersion = "") {
98026
98029
  if (index_dvTools[toolName] || index_DEFAULT_TOOLS[toolName]) {
98027
98030
  index_logger_logger.debug(`${toolName} already exists, it will be replaced`);
98028
98031
  }
98032
+ const targetTools = toolVersion === "MPR"
98033
+ ? index_DEFAULT_TOOLS_MPR
98034
+ : toolVersion === "3D"
98035
+ ? index_DEFAULT_TOOLS_3D
98036
+ : index_DEFAULT_TOOLS;
98029
98037
  index_dvTools[toolClass.name] = toolClass;
98030
- index_DEFAULT_TOOLS[toolName] = {
98038
+ targetTools[toolName] = {
98031
98039
  name: toolName,
98032
98040
  class: toolClass.name,
98033
98041
  viewports: "all",
@@ -284142,9 +284150,9 @@ var index_main_awaiter = (undefined && undefined.__awaiter) || function (thisArg
284142
284150
  */
284143
284151
  const index_main_initializeCSTools = function (settings, style) {
284144
284152
  return index_main_awaiter(this, void 0, void 0, function* () {
284145
- // TODO proper config
284153
+ // TODO proper config (eg style, settings, etc)
284146
284154
  yield index_init_init();
284147
- index_logger_logger.warn("initializeCSTools is not implemented yet");
284155
+ index_logger_logger.warn("initializeCSTools is not fully implemented yet");
284148
284156
  });
284149
284157
  };
284150
284158
  /**
@@ -284177,7 +284185,8 @@ const index_main_addTool = function (toolName, customConfig, groupId) {
284177
284185
  if (!toolClassName) {
284178
284186
  throw new Error(`Tool ${toolName} class not found. Please check tools/default or pass a valid tool class name in the configuration object.`);
284179
284187
  }
284180
- const toolClass = index_dist_esm_namespaceObject[toolClassName];
284188
+ const toolClass = index_dvTools[toolClassName] ||
284189
+ index_dist_esm_namespaceObject[toolClassName];
284181
284190
  index_addTool_addTool(toolClass);
284182
284191
  if (groupId) {
284183
284192
  const toolGroup = index_ToolGroupManager_getToolGroup(groupId);
@@ -284311,33 +284320,53 @@ const index_main_setToolDisabled = function (toolName, groupId = "default", rese
284311
284320
  /**
284312
284321
  * @function syncViewportsCamera
284313
284322
  * @desc Synchronizes the camera position of two (volume) viewports
284323
+ * @param id - unique id for the synchronizer @default "default"
284314
284324
  * @param targetViewportId - the id of the target viewport where the camera will be synced
284315
284325
  * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
284316
284326
  */
284317
- const index_syncViewportsCamera = function (targetViewportId, sourceViewportId) {
284318
- const renderingEngines = index_getRenderingEngines(); // TODO pass rendering engine as param ?
284319
- if (!renderingEngines || renderingEngines.length === 0) {
284320
- index_logger_logger.error("syncViewportsCamera: no rendering engine found");
284321
- return;
284322
- }
284323
- let cameraSync = index_SynchronizerManager_getSynchronizer('default');
284327
+ const index_syncViewportsCamera = function (id = "default", // unique id for the synchronizer
284328
+ targetViewportId, sourceViewportId) {
284329
+ var _a, _b, _c, _d;
284330
+ let cameraSync = index_SynchronizerManager_getSynchronizer(id);
284324
284331
  if (!cameraSync) {
284325
- cameraSync = index_createCameraPositionSynchronizer('default'); // TODO group by uniqueUID?
284332
+ cameraSync =
284333
+ index_createCameraPositionSynchronizer(id);
284326
284334
  }
284327
284335
  else if (cameraSync) {
284328
284336
  // cameraSync.getSourceViewports().forEach((viewportId) => {
284329
284337
  // cameraSync!.removeSource(viewportId);
284330
284338
  // });
284331
- index_SynchronizerManager_destroySynchronizer('default');
284332
- cameraSync = index_createCameraPositionSynchronizer('default');
284339
+ index_SynchronizerManager_destroySynchronizer(id);
284340
+ cameraSync =
284341
+ index_createCameraPositionSynchronizer(id);
284342
+ }
284343
+ const targetRenderingEngineId = (_a = index_getEnabledElementByViewportId(targetViewportId)) === null || _a === void 0 ? void 0 : _a.renderingEngineId;
284344
+ const sourceRenderingEngineId = (_b = index_getEnabledElementByViewportId(sourceViewportId)) === null || _b === void 0 ? void 0 : _b.renderingEngineId;
284345
+ if (!targetRenderingEngineId || !sourceRenderingEngineId) {
284346
+ index_logger_logger.error("syncViewportsCamera: no rendering engine found for one of the viewports");
284347
+ return;
284348
+ }
284349
+ // get plane and position from the source viewport and set to target viewport
284350
+ // TODO why the sync does not work first time ?
284351
+ const sourceViewport = (_c = index_getEnabledElementByViewportId(sourceViewportId)) === null || _c === void 0 ? void 0 : _c.viewport;
284352
+ if (!sourceViewport) {
284353
+ index_logger_logger.error("syncViewportsCamera: source viewport not found");
284354
+ return;
284355
+ }
284356
+ const sourceViewRef = sourceViewport.getViewReference();
284357
+ const targetViewport = (_d = index_getEnabledElementByViewportId(targetViewportId)) === null || _d === void 0 ? void 0 : _d.viewport;
284358
+ if (!targetViewport) {
284359
+ index_logger_logger.error("syncViewportsCamera: target viewport not found");
284360
+ return;
284333
284361
  }
284334
- cameraSync.addSource({
284335
- renderingEngineId: renderingEngines[0].id,
284336
- viewportId: sourceViewportId,
284362
+ targetViewport.setViewReference(sourceViewRef);
284363
+ cameraSync.add({
284364
+ renderingEngineId: sourceRenderingEngineId,
284365
+ viewportId: sourceViewportId
284337
284366
  });
284338
- cameraSync.addTarget({
284339
- renderingEngineId: renderingEngines[0].id,
284340
- viewportId: targetViewportId,
284367
+ cameraSync.add({
284368
+ renderingEngineId: targetRenderingEngineId,
284369
+ viewportId: targetViewportId
284341
284370
  });
284342
284371
  const targetElement = index_getEnabledElementByViewportId(targetViewportId);
284343
284372
  targetElement.viewport.render();
@@ -284346,33 +284375,310 @@ const index_syncViewportsCamera = function (targetViewportId, sourceViewportId)
284346
284375
  index_logger_logger.debug(`Camera sync added from ${sourceViewportId} to ${targetViewportId}`);
284347
284376
  // FIXME: how to force a refresh of the viewport?
284348
284377
  };
284349
- const index_main_createToolGroup = function (groupId = "default", viewports = [], tools = []) {
284350
- const renderingEngines = index_getRenderingEngines(); // TODO pass rendering engine as param ?
284351
- if (!renderingEngines || renderingEngines.length === 0) {
284352
- index_logger_logger.error("syncViewportsCamera: no rendering engine found");
284353
- return;
284354
- }
284378
+ /**
284379
+ * Create a tool group and add the specified viewports and tools to it.
284380
+ * @function createToolGroup
284381
+ * @param groupId - The id of the tool group to create. @default "default"
284382
+ * @param viewports
284383
+ * @param tools
284384
+ * @returns toolGroup - The created tool group.
284385
+ */
284386
+ const index_main_createToolGroup = function (groupId = "default", viewports = [], tools = [] // TODO type this properly
284387
+ ) {
284355
284388
  const toolGroup = index_ToolGroupManager_createToolGroup(groupId);
284356
284389
  if (!toolGroup) {
284357
284390
  index_logger_logger.error("createToolGroup: tool group not created");
284358
284391
  return;
284359
284392
  }
284360
284393
  viewports.forEach(vp => {
284361
- // needed ?
284362
- // const element = renderingEngine.getViewport(vps.viewportId).element;
284363
- // element.oncontextmenu = (e) => e.preventDefault();
284364
- // const viewport = renderingEngine.getViewport(element.id);
284365
- // csTools.utilities.stackPrefetch.enable(viewport.element);
284366
- if (vp === "MPR") {
284394
+ var _a;
284395
+ const renderingEngineId = (_a = index_getEnabledElementByViewportId(vp)) === null || _a === void 0 ? void 0 : _a.renderingEngineId;
284396
+ if (!renderingEngineId) {
284397
+ index_logger_logger.error(`createToolGroup: rendering engine not found for viewport ${vp}`);
284367
284398
  return;
284368
284399
  }
284369
- toolGroup.addViewport(vp, renderingEngines[0].id);
284400
+ toolGroup.addViewport(vp, renderingEngineId);
284401
+ });
284402
+ tools.forEach(tool => {
284403
+ index_main_addTool(tool.name, tool.configuration, groupId);
284404
+ index_logger_logger.debug(`Tool ${tool.name} added to group:`, groupId);
284370
284405
  });
284371
284406
  return toolGroup;
284372
284407
  };
284373
- // TODO a function to create groups (es createToolGroup(groupId, viewportIds[]))
284374
- // TODO function to enable/disable MIP-AIP-MinIP
284375
- // TODO function to control slab
284408
+ /**
284409
+ * Set slab thickness and mode for a given viewport
284410
+ * @function setSlab
284411
+ * @param slabThickness - The thickness of the slab [in mm].
284412
+ * @param slabMode - The blend mode to use for the slab.
284413
+ * @param viewportId - The id of the viewport where the slab will be set.
284414
+ */
284415
+ const index_setSlab = function (slabThickness, slabMode, viewportId) {
284416
+ const viewport = index_getEnabledElementByViewportId(viewportId).viewport;
284417
+ if (!viewport || viewport instanceof index_RenderingEngine_StackViewport) {
284418
+ index_logger_logger.error("setSlab: viewport not found");
284419
+ return;
284420
+ }
284421
+ viewport.setBlendMode(slabMode);
284422
+ viewport.setProperties({ slabThickness });
284423
+ viewport.render();
284424
+ };
284425
+ /**
284426
+ * Set the window width and level for a given viewport
284427
+ * @param ww - window width
284428
+ * @param wl - window level
284429
+ * @param viewportId - The id of the viewport where the window width and level will be set.
284430
+ */
284431
+ const index_setWWWL = function (ww, wl, viewportId) {
284432
+ const viewport = index_getEnabledElementByViewportId(viewportId).viewport;
284433
+ if (!viewport || viewport instanceof index_RenderingEngine_StackViewport) {
284434
+ index_logger_logger.error("setWWWL: viewport not found");
284435
+ return;
284436
+ }
284437
+ viewport.setProperties({ voiRange: { lower: wl - ww / 2, upper: wl + ww / 2 } });
284438
+ viewport.render();
284439
+ };
284440
+
284441
+ ;// ./imaging3d/tools/custom/exampleCustomTool.ts
284442
+
284443
+
284444
+ // Todo: should move to configuration
284445
+ const index_exampleCustomTool_DEFAULT_MULTIPLIER = 4;
284446
+ const index_exampleCustomTool_DEFAULT_IMAGE_DYNAMIC_RANGE = 1024;
284447
+ const index_exampleCustomTool_PT = "PT";
284448
+ /**
284449
+ * WindowLevel tool manipulates the windowLevel applied to a viewport. It
284450
+ * provides a way to set the windowCenter and windowWidth of a viewport
284451
+ * by dragging mouse over the image.
284452
+ *
284453
+ */
284454
+ class index_CustomWWWLTool extends index_base_BaseTool {
284455
+ constructor(toolProps = {}, defaultToolProps = {
284456
+ supportedInteractionTypes: ["Mouse", "Touch"]
284457
+ }) {
284458
+ super(toolProps, defaultToolProps);
284459
+ // @ts-ignore
284460
+ this._getImageDynamicRangeFromMiddleSlice = (scalarData, dimensions) => {
284461
+ const middleSliceIndex = Math.floor(dimensions[2] / 2);
284462
+ const frameLength = dimensions[0] * dimensions[1];
284463
+ let bytesPerVoxel;
284464
+ let TypedArrayConstructor;
284465
+ if (scalarData instanceof Float32Array) {
284466
+ bytesPerVoxel = 4;
284467
+ TypedArrayConstructor = Float32Array;
284468
+ }
284469
+ else if (scalarData instanceof Uint8Array) {
284470
+ bytesPerVoxel = 1;
284471
+ TypedArrayConstructor = Uint8Array;
284472
+ }
284473
+ else if (scalarData instanceof Uint16Array) {
284474
+ bytesPerVoxel = 2;
284475
+ TypedArrayConstructor = Uint16Array;
284476
+ }
284477
+ else if (scalarData instanceof Int16Array) {
284478
+ bytesPerVoxel = 2;
284479
+ TypedArrayConstructor = Int16Array;
284480
+ }
284481
+ const buffer = scalarData.buffer;
284482
+ // @ts-ignore
284483
+ const byteOffset = middleSliceIndex * frameLength * bytesPerVoxel;
284484
+ // @ts-ignore
284485
+ const frame = new TypedArrayConstructor(buffer, byteOffset, frameLength);
284486
+ // @ts-ignore
284487
+ const { max, min } = this._getMinMax(frame, frameLength);
284488
+ return max - min;
284489
+ };
284490
+ }
284491
+ touchDragCallback(evt) {
284492
+ this.mouseDragCallback(evt);
284493
+ }
284494
+ mouseDragCallback(evt) {
284495
+ var _a, _b;
284496
+ const { element, deltaPoints } = evt.detail;
284497
+ const enabledElement = index_getEnabledElement(element);
284498
+ if (!enabledElement) {
284499
+ throw new Error("Enabled element not found");
284500
+ }
284501
+ const { viewport } = enabledElement;
284502
+ let volumeId, lower, upper, modality, newRange, viewportsContainingVolumeUID;
284503
+ let isPreScaled = false;
284504
+ const properties = viewport.getProperties();
284505
+ if (viewport instanceof index_RenderingEngine_VolumeViewport) {
284506
+ volumeId = viewport.getVolumeId();
284507
+ viewportsContainingVolumeUID =
284508
+ index_utilities_getViewportsWithVolumeId(volumeId);
284509
+ // @ts-ignore
284510
+ ({ lower, upper } = properties.voiRange);
284511
+ const volume = index_esm_cache_cache.getVolume(volumeId);
284512
+ if (!volume) {
284513
+ throw new Error("Volume not found " + volumeId);
284514
+ }
284515
+ modality = volume.metadata.Modality;
284516
+ isPreScaled = volume.scaling && Object.keys(volume.scaling).length > 0;
284517
+ }
284518
+ else if (properties.voiRange) {
284519
+ modality = viewport.modality;
284520
+ ({ lower, upper } = properties.voiRange);
284521
+ const { preScale = { scaled: false } } = ((_a = viewport.getImageData) === null || _a === void 0 ? void 0 : _a.call(viewport)) || {};
284522
+ // @ts-ignore
284523
+ isPreScaled =
284524
+ preScale.scaled && ((_b = preScale.scalingParameters) === null || _b === void 0 ? void 0 : _b.suvbw) !== undefined;
284525
+ }
284526
+ else {
284527
+ throw new Error("Viewport is not a valid type");
284528
+ }
284529
+ // If modality is PT an the viewport is pre-scaled (SUV),
284530
+ // treat it special to not include the canvas delta in
284531
+ // the x direction. For other modalities, use the canvas delta in both
284532
+ // directions, and if the viewport is a volumeViewport, the multiplier
284533
+ // is calculate using the volume min and max.
284534
+ if (modality === index_exampleCustomTool_PT && isPreScaled) {
284535
+ newRange = this.getPTScaledNewRange({
284536
+ deltaPointsCanvas: deltaPoints.canvas,
284537
+ lower,
284538
+ upper,
284539
+ clientHeight: element.clientHeight,
284540
+ isPreScaled,
284541
+ viewport,
284542
+ volumeId
284543
+ });
284544
+ }
284545
+ else {
284546
+ newRange = this.getNewRange({
284547
+ viewport,
284548
+ deltaPointsCanvas: deltaPoints.canvas,
284549
+ volumeId,
284550
+ lower,
284551
+ upper
284552
+ });
284553
+ }
284554
+ // If the range is not valid. Do nothing
284555
+ if (newRange.lower >= newRange.upper) {
284556
+ return;
284557
+ }
284558
+ viewport.setProperties({
284559
+ voiRange: newRange
284560
+ });
284561
+ viewport.render();
284562
+ if (viewport instanceof index_RenderingEngine_VolumeViewport) {
284563
+ viewportsContainingVolumeUID.forEach(vp => {
284564
+ if (viewport !== vp) {
284565
+ vp.render();
284566
+ }
284567
+ });
284568
+ return;
284569
+ }
284570
+ }
284571
+ // @ts-ignore
284572
+ getPTScaledNewRange({ deltaPointsCanvas, lower, upper, clientHeight, viewport, volumeId, isPreScaled }) {
284573
+ let multiplier = index_exampleCustomTool_DEFAULT_MULTIPLIER;
284574
+ if (isPreScaled) {
284575
+ multiplier = 5 / clientHeight;
284576
+ }
284577
+ else {
284578
+ multiplier =
284579
+ this._getMultiplierFromDynamicRange(viewport, volumeId) ||
284580
+ index_exampleCustomTool_DEFAULT_MULTIPLIER;
284581
+ }
284582
+ const deltaY = deltaPointsCanvas[1];
284583
+ const wcDelta = deltaY * multiplier;
284584
+ upper -= wcDelta;
284585
+ upper = isPreScaled ? Math.max(upper, 0.1) : upper;
284586
+ return { lower, upper };
284587
+ }
284588
+ // @ts-ignore
284589
+ getNewRange({ viewport, deltaPointsCanvas, volumeId, lower, upper }) {
284590
+ const multiplier = this._getMultiplierFromDynamicRange(viewport, volumeId) ||
284591
+ index_exampleCustomTool_DEFAULT_MULTIPLIER;
284592
+ const wwDelta = deltaPointsCanvas[0] * multiplier;
284593
+ const wcDelta = deltaPointsCanvas[1] * multiplier;
284594
+ let { windowWidth, windowCenter } = index_toWindowLevel(lower, upper);
284595
+ windowWidth += wwDelta;
284596
+ windowCenter += wcDelta;
284597
+ windowWidth = Math.max(windowWidth, 1);
284598
+ const voiLutFunction = viewport.getProperties().VOILUTFunction;
284599
+ // Convert back to range
284600
+ return index_toLowHighRange(windowWidth, windowCenter, voiLutFunction);
284601
+ }
284602
+ // @ts-ignore
284603
+ _getMultiplierFromDynamicRange(viewport, volumeId) {
284604
+ var _a;
284605
+ let imageDynamicRange;
284606
+ if (volumeId) {
284607
+ const imageVolume = index_esm_cache_cache.getVolume(volumeId);
284608
+ const { voxelManager } = viewport.getImageData();
284609
+ const middleSlicePixelData = voxelManager.getMiddleSliceData();
284610
+ const calculatedDynamicRange = middleSlicePixelData.reduce(
284611
+ // @ts-ignore
284612
+ (acc, pixel) => {
284613
+ return [Math.min(acc[0], pixel), Math.max(acc[1], pixel)];
284614
+ }, [Infinity, -Infinity]);
284615
+ const BitsStored = (_a = imageVolume === null || imageVolume === void 0 ? void 0 : imageVolume.metadata) === null || _a === void 0 ? void 0 : _a.BitsStored;
284616
+ const metadataDynamicRange = BitsStored ? 2 ** BitsStored : Infinity;
284617
+ // Burned in Pixels often use pixel values above the BitsStored.
284618
+ // This results in a multiplier which is way higher than what you would
284619
+ // want in practice. Thus we take the min between the metadata dynamic
284620
+ // range and actual middle slice dynamic range.
284621
+ imageDynamicRange = Math.min(calculatedDynamicRange, metadataDynamicRange);
284622
+ }
284623
+ else {
284624
+ imageDynamicRange = this._getImageDynamicRangeFromViewport(viewport);
284625
+ }
284626
+ const ratio = imageDynamicRange / index_exampleCustomTool_DEFAULT_IMAGE_DYNAMIC_RANGE;
284627
+ return ratio > 1 ? Math.round(ratio) : ratio;
284628
+ }
284629
+ // @ts-ignore
284630
+ _getImageDynamicRangeFromViewport(viewport) {
284631
+ const { imageData, voxelManager } = viewport.getImageData();
284632
+ // this should address the case where the voxelManager is used
284633
+ // for the new volume viewport model
284634
+ if (voxelManager === null || voxelManager === void 0 ? void 0 : voxelManager.getRange) {
284635
+ const range = voxelManager.getRange();
284636
+ return range[1] - range[0];
284637
+ }
284638
+ const dimensions = imageData.getDimensions();
284639
+ if (imageData.getRange) {
284640
+ const imageDataRange = imageData.getRange();
284641
+ return imageDataRange[1] - imageDataRange[0];
284642
+ }
284643
+ let scalarData;
284644
+ // if getScalarData is a method on imageData
284645
+ if (imageData.getScalarData) {
284646
+ scalarData = imageData.getScalarData();
284647
+ }
284648
+ else {
284649
+ scalarData = imageData.getPointData().getScalars().getData();
284650
+ }
284651
+ if (dimensions[2] !== 1) {
284652
+ return this._getImageDynamicRangeFromMiddleSlice(scalarData, dimensions);
284653
+ }
284654
+ let range;
284655
+ if (scalarData.getRange) {
284656
+ range = scalarData.getRange();
284657
+ }
284658
+ else {
284659
+ const { min, max } = this._getMinMax(scalarData, scalarData.length);
284660
+ range = [min, max];
284661
+ }
284662
+ return range[1] - range[0];
284663
+ }
284664
+ _getMinMax(frame, frameLength) {
284665
+ let min = Infinity;
284666
+ let max = -Infinity;
284667
+ for (let i = 0; i < frameLength; i++) {
284668
+ const voxel = frame[i];
284669
+ if (voxel < min) {
284670
+ min = voxel;
284671
+ }
284672
+ if (voxel > max) {
284673
+ max = voxel;
284674
+ }
284675
+ }
284676
+ return { max, min };
284677
+ }
284678
+ }
284679
+ index_CustomWWWLTool.toolName = "CustomWWWLTool";
284680
+ index_CustomWWWLTool.toolName = "CustomWWWLTool";
284681
+ /* harmony default export */ const index_exampleCustomTool = (index_CustomWWWLTool);
284376
284682
 
284377
284683
  ;// ./index.ts
284378
284684
 
@@ -284447,6 +284753,7 @@ console.groupEnd();
284447
284753
 
284448
284754
 
284449
284755
 
284756
+
284450
284757
  // alias for backward compatibility
284451
284758
  // deprecate in future release
284452
284759
  const index_updateLarvitarManager = index_createAliasWithWarning(index_updateImageManager, "updateImageManager", "updateLarvitarManager");
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "medical",
7
7
  "cornerstone"
8
8
  ],
9
- "version": "4.0.0-alpha.6",
9
+ "version": "4.0.0-alpha.7",
10
10
  "description": "typescript library for parsing, loading, rendering and interacting with DICOM images",
11
11
  "repository": {
12
12
  "url": "https://github.com/dvisionlab/Larvitar.git",