@ohif/app 3.9.0-beta.65 → 3.9.0-beta.66

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.
Files changed (61) hide show
  1. package/dist/{169.bundle.ab6c1617324e8e5acbd0.js → 1169.bundle.a3d3d310f1d8d7e335bf.js} +6 -1
  2. package/dist/{202.bundle.567b7e2ac2f6c9213143.js → 1202.bundle.1468f0e71fea0c593081.js} +1 -1
  3. package/dist/{498.bundle.e8683e4faffd1f5666d0.js → 1498.bundle.d8f5281952d09c57ef87.js} +1 -1
  4. package/dist/{994.bundle.ceeeed48891cf977dd14.js → 1994.bundle.75d3e5b8c112b661cc3c.js} +3 -3
  5. package/dist/{65.bundle.9b25384f1dd15b04c099.js → 2065.bundle.ff1e86fe35569cf05343.js} +2 -2
  6. package/dist/{281.bundle.b8b7d64372d238b1bed7.js → 2281.bundle.f3aaec4290d1a8f2e08b.js} +4 -4
  7. package/dist/{412.bundle.836f106f6e2896dc42a5.js → 2412.bundle.e1abf9a60dcecb7f0c77.js} +1 -1
  8. package/dist/{417.bundle.abf8bcee0f246002acb9.js → 2417.bundle.4a0334c8c4047005979e.js} +1 -1
  9. package/dist/{650.bundle.a65389abf76ad921aa17.js → 2650.bundle.1f7d90198b9e361dfb9c.js} +2 -2
  10. package/dist/{791.bundle.4debb283e99b3c663b79.js → 2791.bundle.a44fa2a1e096cf150deb.js} +2 -2
  11. package/dist/{831.bundle.9e1a3495947e5bb49756.js → 2831.bundle.22245416b8edb6c9dc56.js} +1 -1
  12. package/dist/2898.bundle.21f0702e5d67b8aca5af.js +177 -0
  13. package/dist/{909.bundle.1fbb8bb4c41d0bb2994d.js → 2909.bundle.82cc76eeaed307d01b07.js} +1 -1
  14. package/dist/{117.bundle.403581eea72534ff9c7e.js → 3117.bundle.c83d0f403d17104a7c4c.js} +1 -1
  15. package/dist/{286.bundle.985c5ebbb2158c7e59ab.js → 3286.bundle.b9b3a165dc5a8b24b47f.js} +1 -1
  16. package/dist/{424.bundle.1caecbb1bbefc271b621.js → 3424.bundle.1b6101d721148c04242b.js} +1 -1
  17. package/dist/{497.bundle.bbc07cef12d598653a65.js → 3497.bundle.a04a2444975bf50fddf8.js} +1 -1
  18. package/dist/{658.bundle.358716d6aee4c190f2cd.js → 3658.bundle.ca4d24aa942995e51df2.js} +1 -1
  19. package/dist/{962.bundle.85a0fcaaf3c0aeeb6789.js → 3962.bundle.c67f7b557f3c96b55098.js} +1 -1
  20. package/dist/{210.bundle.257ad99561da3bcd8898.js → 4210.bundle.4284465882bec724b9c2.js} +2 -2
  21. package/dist/{353.bundle.35ad75ecf210b279b5d2.js → 4353.bundle.067a8a17c5d37f738bec.js} +1 -1
  22. package/dist/{530.bundle.87f8b13ff55bf7b2a6d1.js → 4530.bundle.ec12dfd2fbf9083b164e.js} +1 -1
  23. package/dist/{842.bundle.a18175a4463177477ae0.js → 4842.bundle.24e7ab8d7dacc2cf6f0d.js} +10 -2
  24. package/dist/{978.bundle.56bcd4d2eea3e8622913.js → 4978.bundle.6ee82dc2042be3013adc.js} +1 -1
  25. package/dist/{250.bundle.4743b359797751102600.js → 5250.bundle.6acf2b904f96c95065e3.js} +1 -1
  26. package/dist/{516.bundle.693f55fcf3bb54b40468.js → 5516.bundle.ee7bad33cf7d103bc637.js} +28 -14
  27. package/dist/{793.bundle.e4c759b5cdfcc3c7494f.js → 5793.bundle.eed3fe9019c31999efff.js} +1 -1
  28. package/dist/{888.bundle.f2989b50bdb1b0d4b5da.js → 5888.bundle.854e3cbe1693face9785.js} +9 -1
  29. package/dist/{931.bundle.f6fa2a436ace89ebf60f.js → 5931.bundle.f16bcd50591d83af9f7a.js} +1 -1
  30. package/dist/{10.bundle.c626810bd199ab63f3a2.js → 6010.bundle.a41bef6e63d1f8f8af7f.js} +1 -1
  31. package/dist/{591.bundle.93e22748fb59e587b62c.js → 6591.bundle.a3600d2f778f0681cace.js} +2 -2
  32. package/dist/{904.bundle.cf3367eab90aaef03406.js → 6904.bundle.27abf08c0f2e4fe5e06d.js} +1 -1
  33. package/dist/{246.bundle.fbf55ff25ff129a8803b.js → 7246.bundle.38819abe3c7a9949a93e.js} +1 -1
  34. package/dist/{360.bundle.e9046bdadd9127c4c283.js → 7360.bundle.50db910557a0c4d2d649.js} +2 -2
  35. package/dist/{376.bundle.c07661d7af53d348e9a6.js → 7376.bundle.f8cf588cfcbda94f2f44.js} +1 -1
  36. package/dist/{502.bundle.5ccd0605d5f7143e1a18.js → 7502.bundle.fe71b46247244ddf7dd8.js} +1 -1
  37. package/dist/{604.bundle.83f50929b208c60e48da.js → 7604.bundle.42d3f08efb3a9eae4581.js} +1 -1
  38. package/dist/{913.bundle.f982e2af9e7287fc3539.js → 7913.bundle.812eaa01b988dbccfad1.js} +2 -2
  39. package/dist/{315.bundle.f7f9e6c76811f8a6a30f.js → 8315.bundle.5066943ed0a18dd2ae4e.js} +1 -1
  40. package/dist/{714.bundle.9b2c17c05367d7c0d610.js → 8714.bundle.fb419b4e3c25ae85d9fb.js} +1 -1
  41. package/dist/{944.bundle.c6c7ffe0ac1321ccbcea.js → 8944.bundle.5e8fad0ede008bf83fa3.js} +2 -2
  42. package/dist/{993.bundle.f8af55eb5f3da10a9ee1.js → 8993.bundle.256bb3c84d2564a5f3cf.js} +2 -2
  43. package/dist/{579.bundle.0b78fc095924efac431d.js → 9579.bundle.7212d7a737a71bb61502.js} +1 -1
  44. package/dist/9824.bundle.82d734531cd5ae4b1b89.js +256 -0
  45. package/dist/9824.css +2 -0
  46. package/dist/{app.bundle.ebe09d60104c52d101df.js → app.bundle.c96ddb0091fde91b35e0.js} +58 -49
  47. package/dist/app.bundle.css +2 -2
  48. package/dist/{histogram-worker.bundle.89729ccb99d170ff2f2f.js → histogram-worker.bundle.d97bab3206c49329f64b.js} +5 -5
  49. package/dist/index.html +1 -1
  50. package/dist/{polySeg.bundle.316ddde0375abbd072e9.js → polySeg.bundle.40b9a8c9006bb15691ee.js} +4 -4
  51. package/dist/{suv-peak-worker.bundle.a27bcad90f8fe9252435.js → suv-peak-worker.bundle.a70e70b9ef87c18b896c.js} +5 -5
  52. package/dist/sw.js +1 -1
  53. package/package.json +18 -18
  54. /package/dist/{169.css → 1169.css} +0 -0
  55. /package/dist/{153.bundle.0ae1608ab0c459f10034.js → 153.bundle.a2d5a9a359f3c619c6ba.js} +0 -0
  56. /package/dist/{757.css → 1994.css} +0 -0
  57. /package/dist/{516.css → 2568.css} +0 -0
  58. /package/dist/{286.css → 3286.css} +0 -0
  59. /package/dist/{424.css → 3424.css} +0 -0
  60. /package/dist/{210.css → 4210.css} +0 -0
  61. /package/dist/{994.css → 4757.css} +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[169],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[1169],{
3
3
 
4
4
  /***/ 31169:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1741,6 +1741,11 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1741
1741
  throw new Error('Viewport ID is required');
1742
1742
  }
1743
1743
 
1744
+ // Make sure displaySetOptions has one object per displaySet
1745
+ while (displaySetOptions.length < displaySets.length) {
1746
+ displaySetOptions.push({});
1747
+ }
1748
+
1744
1749
  // Since we only have support for dynamic data in volume viewports, we should
1745
1750
  // handle this case here and set the viewportType to volume if any of the
1746
1751
  // displaySets are dynamic volumes
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[202],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[1202],{
2
2
 
3
3
  /***/ 91202:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[498],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[1498],{
3
3
 
4
4
  /***/ 11498:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[994,757],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[1994,4757],{
3
3
 
4
4
  /***/ 89859:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1807,7 +1807,7 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1807
1807
  });
1808
1808
  return [...thumbnailDisplaySets, ...thumbnailNoImageDisplaySets];
1809
1809
  }
1810
- const thumbnailNoImageModalities = ['SR', 'SEG', 'SM', 'RTSTRUCT', 'RTPLAN', 'RTDOSE', 'DOC', 'OT'];
1810
+ const thumbnailNoImageModalities = ['SR', 'SEG', 'SM', 'RTSTRUCT', 'RTPLAN', 'RTDOSE', 'DOC', 'OT', 'PMAP'];
1811
1811
  function _getComponentType(ds) {
1812
1812
  if (thumbnailNoImageModalities.includes(ds.Modality) || ds?.unsupported) {
1813
1813
  return 'thumbnailNoImage';
@@ -2266,7 +2266,7 @@ function getPanelModule({
2266
2266
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2267
2267
 
2268
2268
  const Component = /*#__PURE__*/react.lazy(() => {
2269
- return __webpack_require__.e(/* import() */ 498).then(__webpack_require__.bind(__webpack_require__, 11498));
2269
+ return __webpack_require__.e(/* import() */ 1498).then(__webpack_require__.bind(__webpack_require__, 11498));
2270
2270
  });
2271
2271
  const OHIFCornerstoneViewport = props => {
2272
2272
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[65],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2065],{
3
3
 
4
4
  /***/ 82065:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -2598,7 +2598,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
2598
2598
 
2599
2599
 
2600
2600
  const Component = /*#__PURE__*/react.lazy(() => {
2601
- return Promise.all(/* import() */[__webpack_require__.e(904), __webpack_require__.e(818), __webpack_require__.e(497), __webpack_require__.e(993), __webpack_require__.e(604), __webpack_require__.e(417), __webpack_require__.e(281), __webpack_require__.e(424)]).then(__webpack_require__.bind(__webpack_require__, 3094));
2601
+ return Promise.all(/* import() */[__webpack_require__.e(6904), __webpack_require__.e(818), __webpack_require__.e(3497), __webpack_require__.e(8993), __webpack_require__.e(7604), __webpack_require__.e(2417), __webpack_require__.e(2281), __webpack_require__.e(3424)]).then(__webpack_require__.bind(__webpack_require__, 3094));
2602
2602
  });
2603
2603
  const MicroscopyViewport = props => {
2604
2604
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[281],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2281],{
3
3
 
4
4
  /***/ 32281:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -2844,8 +2844,8 @@ function ViewerHeader({
2844
2844
  hotkeyDefinitions,
2845
2845
  hotkeyDefaults
2846
2846
  } = hotkeysManager;
2847
- const versionNumber = "3.9.0-beta.65";
2848
- const commitHash = "246ebab6ebf5431a704a1861a5804045b9644ba4";
2847
+ const versionNumber = "3.9.0-beta.66";
2848
+ const commitHash = "fc0064fd9d8cdc8fde81b81f0e71fd5d077ca22b";
2849
2849
  const menuOptions = [{
2850
2850
  title: t('Header:About'),
2851
2851
  icon: 'info',
@@ -5038,7 +5038,7 @@ function ToolbarSplitButtonWithServices({
5038
5038
  commands: item.commands
5039
5039
  });
5040
5040
  }
5041
- })), []);
5041
+ })), [groupId, onInteraction]);
5042
5042
  const PrimaryButtonComponent = toolbarService?.getButtonComponentForUIType(primary.uiType) ?? ui_src/* ToolbarButton */.hA;
5043
5043
  const listItemRenderer = renderer;
5044
5044
  return /*#__PURE__*/react.createElement(ui_src/* SplitButton */.aW, {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[412],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2412],{
3
3
 
4
4
  /***/ 12412:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[417],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2417],{
3
3
 
4
4
  /***/ 15747:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[650],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2650],{
2
2
 
3
3
  /***/ 36205:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -29164,7 +29164,7 @@ function registerPolySegWorker() {
29164
29164
  }
29165
29165
  registered = true;
29166
29166
  const workerFn = () => {
29167
- return new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(985), __webpack_require__.b), {
29167
+ return new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(1985), __webpack_require__.b), {
29168
29168
  name: 'polySeg',
29169
29169
  });
29170
29170
  };
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[791],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2791],{
3
3
 
4
4
  /***/ 62791:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -417,7 +417,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
417
417
 
418
418
 
419
419
  const Component = /*#__PURE__*/react.lazy(() => {
420
- return __webpack_require__.e(/* import() */ 658).then(__webpack_require__.bind(__webpack_require__, 43658));
420
+ return __webpack_require__.e(/* import() */ 3658).then(__webpack_require__.bind(__webpack_require__, 43658));
421
421
  });
422
422
  const OHIFCornerstoneRTViewport = props => {
423
423
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[831],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2831],{
2
2
 
3
3
  /***/ 82803:
4
4
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2898],{
3
+
4
+ /***/ 22898:
5
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
+
7
+ // ESM COMPAT FLAG
8
+ __webpack_require__.r(__webpack_exports__);
9
+
10
+ // EXPORTS
11
+ __webpack_require__.d(__webpack_exports__, {
12
+ "default": () => (/* binding */ viewports_OHIFCornerstonePMAPViewport)
13
+ });
14
+
15
+ // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
16
+ var prop_types = __webpack_require__(3827);
17
+ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
18
+ // EXTERNAL MODULE: ../../../node_modules/react/index.js
19
+ var react = __webpack_require__(43001);
20
+ // EXTERNAL MODULE: ../../ui/src/index.js + 784 modules
21
+ var src = __webpack_require__(38604);
22
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-pmap/src/utils/initPMAPToolGroup.ts
23
+ function createPMAPToolGroupAndAddTools(ToolGroupService, customizationService, toolGroupId) {
24
+ const {
25
+ tools
26
+ } = customizationService.get('cornerstone.overlayViewportTools') ?? {};
27
+ return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools);
28
+ }
29
+ /* harmony default export */ const initPMAPToolGroup = (createPMAPToolGroupAndAddTools);
30
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-pmap/src/viewports/OHIFCornerstonePMAPViewport.tsx
31
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
32
+
33
+
34
+
35
+
36
+ const PMAP_TOOLGROUP_BASE_NAME = 'PMAPToolGroup';
37
+ function OHIFCornerstonePMAPViewport(props) {
38
+ const {
39
+ displaySets,
40
+ viewportOptions,
41
+ displaySetOptions,
42
+ servicesManager,
43
+ extensionManager
44
+ } = props;
45
+ const viewportId = viewportOptions.viewportId;
46
+ const {
47
+ displaySetService,
48
+ toolGroupService,
49
+ customizationService
50
+ } = servicesManager.services;
51
+ const toolGroupId = `${PMAP_TOOLGROUP_BASE_NAME}-${viewportId}`;
52
+
53
+ // PMAP viewport will always have a single display set
54
+ if (displaySets.length !== 1) {
55
+ throw new Error('PMAP viewport must have a single display set');
56
+ }
57
+ const pmapDisplaySet = displaySets[0];
58
+ const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.O_)();
59
+ const referencedDisplaySetRef = (0,react.useRef)(null);
60
+ const {
61
+ viewports,
62
+ activeViewportId
63
+ } = viewportGrid;
64
+ const referencedDisplaySet = pmapDisplaySet.getReferenceDisplaySet();
65
+ const referencedDisplaySetMetadata = _getReferencedDisplaySetMetadata(referencedDisplaySet, pmapDisplaySet);
66
+ referencedDisplaySetRef.current = {
67
+ displaySet: referencedDisplaySet,
68
+ metadata: referencedDisplaySetMetadata
69
+ };
70
+ const getCornerstoneViewport = (0,react.useCallback)(() => {
71
+ const {
72
+ displaySet: referencedDisplaySet
73
+ } = referencedDisplaySetRef.current;
74
+ const {
75
+ component: Component
76
+ } = extensionManager.getModuleEntry('@ohif/extension-cornerstone.viewportModule.cornerstone');
77
+ displaySetOptions.unshift({});
78
+ const [pmapDisplaySetOptions] = displaySetOptions;
79
+
80
+ // Make sure `options` exists
81
+ pmapDisplaySetOptions.options = pmapDisplaySetOptions.options ?? {};
82
+ Object.assign(pmapDisplaySetOptions.options, {
83
+ colormap: {
84
+ name: 'rainbow',
85
+ opacity: [{
86
+ value: 0,
87
+ opacity: 0.5
88
+ }, {
89
+ value: 1,
90
+ opacity: 1
91
+ }]
92
+ }
93
+ });
94
+ return /*#__PURE__*/react.createElement(Component, _extends({}, props, {
95
+ // Referenced + PMAP displaySets must be passed as parameter in this order
96
+ displaySets: [referencedDisplaySet, pmapDisplaySet],
97
+ viewportOptions: {
98
+ viewportType: 'volume',
99
+ toolGroupId: toolGroupId,
100
+ orientation: viewportOptions.orientation,
101
+ viewportId: viewportOptions.viewportId
102
+ },
103
+ displaySetOptions: [{}, pmapDisplaySetOptions]
104
+ }));
105
+ }, [extensionManager, displaySetOptions, props, pmapDisplaySet, toolGroupId, viewportOptions.orientation, viewportOptions.viewportId]);
106
+
107
+ // Cleanup the PMAP viewport when the viewport is destroyed
108
+ (0,react.useEffect)(() => {
109
+ const onDisplaySetsRemovedSubscription = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SETS_REMOVED, ({
110
+ displaySetInstanceUIDs
111
+ }) => {
112
+ const activeViewport = viewports.get(activeViewportId);
113
+ if (displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)) {
114
+ viewportGridService.setDisplaySetsForViewport({
115
+ viewportId: activeViewportId,
116
+ displaySetInstanceUIDs: []
117
+ });
118
+ }
119
+ });
120
+ return () => {
121
+ onDisplaySetsRemovedSubscription.unsubscribe();
122
+ };
123
+ }, [activeViewportId, displaySetService, viewportGridService, viewports]);
124
+ (0,react.useEffect)(() => {
125
+ let toolGroup = toolGroupService.getToolGroup(toolGroupId);
126
+ if (toolGroup) {
127
+ return;
128
+ }
129
+
130
+ // This creates a custom tool group which has the lifetime of this view only
131
+ toolGroup = initPMAPToolGroup(toolGroupService, customizationService, toolGroupId);
132
+ return () => toolGroupService.destroyToolGroup(toolGroupId);
133
+ }, [customizationService, toolGroupId, toolGroupService]);
134
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
135
+ className: "relative flex h-full w-full flex-row overflow-hidden"
136
+ }, getCornerstoneViewport()));
137
+ }
138
+ OHIFCornerstonePMAPViewport.propTypes = {
139
+ displaySets: prop_types_default().arrayOf((prop_types_default()).object),
140
+ viewportId: (prop_types_default()).string.isRequired,
141
+ dataSource: (prop_types_default()).object,
142
+ children: (prop_types_default()).node
143
+ };
144
+ function _getReferencedDisplaySetMetadata(referencedDisplaySet, pmapDisplaySet) {
145
+ const {
146
+ SharedFunctionalGroupsSequence
147
+ } = pmapDisplaySet.instance;
148
+ const SharedFunctionalGroup = Array.isArray(SharedFunctionalGroupsSequence) ? SharedFunctionalGroupsSequence[0] : SharedFunctionalGroupsSequence;
149
+ const {
150
+ PixelMeasuresSequence
151
+ } = SharedFunctionalGroup;
152
+ const PixelMeasures = Array.isArray(PixelMeasuresSequence) ? PixelMeasuresSequence[0] : PixelMeasuresSequence;
153
+ const {
154
+ SpacingBetweenSlices,
155
+ SliceThickness
156
+ } = PixelMeasures;
157
+ const image0 = referencedDisplaySet.images[0];
158
+ const referencedDisplaySetMetadata = {
159
+ PatientID: image0.PatientID,
160
+ PatientName: image0.PatientName,
161
+ PatientSex: image0.PatientSex,
162
+ PatientAge: image0.PatientAge,
163
+ SliceThickness: image0.SliceThickness || SliceThickness,
164
+ StudyDate: image0.StudyDate,
165
+ SeriesDescription: image0.SeriesDescription,
166
+ SeriesInstanceUID: image0.SeriesInstanceUID,
167
+ SeriesNumber: image0.SeriesNumber,
168
+ ManufacturerModelName: image0.ManufacturerModelName,
169
+ SpacingBetweenSlices: image0.SpacingBetweenSlices || SpacingBetweenSlices
170
+ };
171
+ return referencedDisplaySetMetadata;
172
+ }
173
+ /* harmony default export */ const viewports_OHIFCornerstonePMAPViewport = (OHIFCornerstonePMAPViewport);
174
+
175
+ /***/ })
176
+
177
+ }]);
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[909],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[2909],{
2
2
 
3
3
  /***/ 91382:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[117,497],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3117,3497],{
2
2
 
3
3
  /***/ 49001:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[286],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3286],{
3
3
 
4
4
  /***/ 53286:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[424,757],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3424,4757],{
3
3
 
4
4
  /***/ 3094:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[497],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3497],{
2
2
 
3
3
  /***/ 10424:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[658],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3658],{
3
3
 
4
4
  /***/ 43658:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[962],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[3962],{
3
3
 
4
4
  /***/ 63962:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[210,757],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[4210,4757],{
3
3
 
4
4
  /***/ 18291:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1553,7 +1553,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
1553
1553
 
1554
1554
 
1555
1555
  const Component = /*#__PURE__*/react.lazy(() => {
1556
- return __webpack_require__.e(/* import() */ 315).then(__webpack_require__.bind(__webpack_require__, 88315));
1556
+ return __webpack_require__.e(/* import() */ 8315).then(__webpack_require__.bind(__webpack_require__, 88315));
1557
1557
  });
1558
1558
  const OHIFCornerstoneSEGViewport = props => {
1559
1559
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[353],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[4353],{
3
3
 
4
4
  /***/ 64353:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[530],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[4530],{
3
3
 
4
4
  /***/ 44530:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[842],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[4842],{
3
3
 
4
4
  /***/ 4842:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -748,6 +748,10 @@ const dicomSeg = {
748
748
  viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg',
749
749
  panel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation'
750
750
  };
751
+ const dicomPmap = {
752
+ sopClassHandler: '@ohif/extension-cornerstone-dicom-pmap.sopClassHandlerModule.dicom-pmap',
753
+ viewport: '@ohif/extension-cornerstone-dicom-pmap.viewportModule.dicom-pmap'
754
+ };
751
755
  const dicomRT = {
752
756
  viewport: '@ohif/extension-cornerstone-dicom-rt.viewportModule.dicom-rt',
753
757
  sopClassHandler: '@ohif/extension-cornerstone-dicom-rt.sopClassHandlerModule.dicom-rt'
@@ -759,6 +763,7 @@ const extensionDependencies = {
759
763
  '@ohif/extension-measurement-tracking': '^3.0.0',
760
764
  '@ohif/extension-cornerstone-dicom-sr': '^3.0.0',
761
765
  '@ohif/extension-cornerstone-dicom-seg': '^3.0.0',
766
+ '@ohif/extension-cornerstone-dicom-pmap': '^3.0.0',
762
767
  '@ohif/extension-cornerstone-dicom-rt': '^3.0.0',
763
768
  '@ohif/extension-dicom-pdf': '^3.0.1',
764
769
  '@ohif/extension-dicom-video': '^3.0.1'
@@ -896,6 +901,9 @@ function modeFactory({
896
901
  }, {
897
902
  namespace: dicomSeg.viewport,
898
903
  displaySetsToDisplay: [dicomSeg.sopClassHandler]
904
+ }, {
905
+ namespace: dicomPmap.viewport,
906
+ displaySetsToDisplay: [dicomPmap.sopClassHandler]
899
907
  }, {
900
908
  namespace: dicomRT.viewport,
901
909
  displaySetsToDisplay: [dicomRT.sopClassHandler]
@@ -911,7 +919,7 @@ function modeFactory({
911
919
  // the same sop class under different situations. In that case, the more
912
920
  // general handler needs to come last. For this case, the dicomvideo must
913
921
  // come first to remove video transfer syntax before ohif uses images
914
- sopClassHandlers: [dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, dicomRT.sopClassHandler],
922
+ sopClassHandlers: [dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, dicomPmap.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, dicomRT.sopClassHandler],
915
923
  hotkeys: [...src/* hotkeys */.dD.defaults.hotkeyBindings],
916
924
  ...modeConfiguration
917
925
  };
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[978],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[4978],{
3
3
 
4
4
  /***/ 24978:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[250],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[5250],{
3
3
 
4
4
  /***/ 8455:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[516],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[5516],{
3
3
 
4
4
  /***/ 34:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -734,6 +734,7 @@ __webpack_require__.d(__webpack_exports__, {
734
734
  ImageOverlayViewerTool: () => (/* reexport */ tools_ImageOverlayViewerTool),
735
735
  Types: () => (/* reexport */ types_namespaceObject),
736
736
  "default": () => (/* binding */ cornerstone_src),
737
+ dicomLoaderService: () => (/* reexport */ utils_dicomLoaderService),
737
738
  findNearbyToolData: () => (/* reexport */ findNearbyToolData),
738
739
  getActiveViewportEnabledElement: () => (/* reexport */ getActiveViewportEnabledElement),
739
740
  getEnabledElement: () => (/* reexport */ state/* getEnabledElement */.K8),
@@ -12805,6 +12806,11 @@ class CornerstoneCacheService {
12805
12806
 
12806
12807
  const volumeData = [];
12807
12808
  for (const displaySet of displaySets) {
12809
+ const {
12810
+ Modality
12811
+ } = displaySet;
12812
+ const isParametricMap = Modality === 'PMAP';
12813
+
12808
12814
  // Don't create volumes for the displaySets that have custom load
12809
12815
  // function (e.g., SEG, RT, since they rely on the reference volumes
12810
12816
  // and they take care of their own loading after they are created in their
@@ -12818,19 +12824,27 @@ class CornerstoneCacheService {
12818
12824
  await displaySet.load({
12819
12825
  headers
12820
12826
  });
12821
- volumeData.push({
12822
- studyInstanceUID: displaySet.StudyInstanceUID,
12823
- displaySetInstanceUID: displaySet.displaySetInstanceUID
12824
- });
12825
12827
 
12826
- // Todo: do some cache check and empty the cache if needed
12827
- continue;
12828
+ // Parametric maps have a `load` method but it should not be loaded in the
12829
+ // same way as SEG and RTSTRUCT but like a normal volume
12830
+ if (!isParametricMap) {
12831
+ volumeData.push({
12832
+ studyInstanceUID: displaySet.StudyInstanceUID,
12833
+ displaySetInstanceUID: displaySet.displaySetInstanceUID
12834
+ });
12835
+
12836
+ // Todo: do some cache check and empty the cache if needed
12837
+ continue;
12838
+ }
12828
12839
  }
12829
12840
  const volumeLoaderSchema = displaySet.volumeLoaderSchema ?? CornerstoneCacheService_VOLUME_LOADER_SCHEME;
12830
12841
  const volumeId = `${volumeLoaderSchema}:${displaySet.displaySetInstanceUID}`;
12831
12842
  let volumeImageIds = this.volumeImageIds.get(displaySet.displaySetInstanceUID);
12832
12843
  let volume = esm.cache.getVolume(volumeId);
12833
- if (!volumeImageIds || !volume) {
12844
+
12845
+ // Parametric maps do not have image ids but they already have volume data
12846
+ // therefore a new volume should not be created.
12847
+ if (!isParametricMap && (!volumeImageIds || !volume)) {
12834
12848
  volumeImageIds = this._getCornerstoneVolumeImageIds(displaySet, dataSource);
12835
12849
  volume = await esm.volumeLoader.createAndCacheVolume(volumeId, {
12836
12850
  imageIds: volumeImageIds
@@ -13910,10 +13924,10 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
13910
13924
  // load any secondary displaySets
13911
13925
  const displaySetInstanceUIDs = this.viewportsDisplaySets.get(viewport.id);
13912
13926
 
13913
- // can be SEG or RTSTRUCT for now
13914
- const overlayDisplaySet = displaySetInstanceUIDs.map(displaySetService.getDisplaySetByUID).find(displaySet => displaySet?.isOverlayDisplaySet);
13915
- if (overlayDisplaySet) {
13916
- this.addOverlayRepresentationForDisplaySet(overlayDisplaySet, viewport);
13927
+ // Can be SEG or RTSTRUCT for now but not PMAP
13928
+ const segOrRTSOverlayDisplaySet = displaySetInstanceUIDs.map(displaySetService.getDisplaySetByUID).find(displaySet => displaySet?.isOverlayDisplaySet && ['SEG', 'RTSTRUCT'].includes(displaySet.Modality));
13929
+ if (segOrRTSOverlayDisplaySet) {
13930
+ this.addOverlayRepresentationForDisplaySet(segOrRTSOverlayDisplaySet, viewport);
13917
13931
  } else {
13918
13932
  // If the displaySet is not a SEG displaySet we assume it is a primary displaySet
13919
13933
  // and we can look into hydrated segmentations to check if any of them are
@@ -14639,7 +14653,7 @@ const WorkerOptions = {
14639
14653
 
14640
14654
  // Register the task
14641
14655
  const workerFn = () => {
14642
- return new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(158), __webpack_require__.b), {
14656
+ return new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(2158), __webpack_require__.b), {
14643
14657
  name: 'histogram-worker' // name used by the browser to name the worker
14644
14658
  });
14645
14659
  };
@@ -15096,7 +15110,7 @@ const {
15096
15110
  imageRetrieveMetadataProvider
15097
15111
  } = esm.utilities;
15098
15112
  const Component = /*#__PURE__*/react.lazy(() => {
15099
- return __webpack_require__.e(/* import() */ 169).then(__webpack_require__.bind(__webpack_require__, 31169));
15113
+ return __webpack_require__.e(/* import() */ 1169).then(__webpack_require__.bind(__webpack_require__, 31169));
15100
15114
  });
15101
15115
  const OHIFCornerstoneViewport = props => {
15102
15116
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[793],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[5793],{
3
3
 
4
4
  /***/ 15793:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[888],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[5888],{
3
3
 
4
4
  /***/ 65888:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -742,6 +742,10 @@ const dicomSeg = {
742
742
  viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg',
743
743
  panel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation'
744
744
  };
745
+ const dicomPmap = {
746
+ sopClassHandler: '@ohif/extension-cornerstone-dicom-pmap.sopClassHandlerModule.dicom-pmap',
747
+ viewport: '@ohif/extension-cornerstone-dicom-pmap.viewportModule.dicom-pmap'
748
+ };
745
749
  const extensionDependencies = {
746
750
  // Can derive the versions at least process.env.from npm_package_version
747
751
  '@ohif/extension-default': '^3.0.0',
@@ -749,6 +753,7 @@ const extensionDependencies = {
749
753
  '@ohif/extension-measurement-tracking': '^3.0.0',
750
754
  '@ohif/extension-cornerstone-dicom-sr': '^3.0.0',
751
755
  '@ohif/extension-cornerstone-dicom-seg': '^3.0.0',
756
+ '@ohif/extension-cornerstone-dicom-pmap': '^3.0.0',
752
757
  '@ohif/extension-dicom-pdf': '^3.0.1',
753
758
  '@ohif/extension-dicom-video': '^3.0.1',
754
759
  '@ohif/extension-test': '^0.0.1'
@@ -847,6 +852,9 @@ function modeFactory() {
847
852
  }, {
848
853
  namespace: dicomSeg.viewport,
849
854
  displaySetsToDisplay: [dicomSeg.sopClassHandler]
855
+ }, {
856
+ namespace: dicomPmap.viewport,
857
+ displaySetsToDisplay: [dicomPmap.sopClassHandler]
850
858
  }]
851
859
  }
852
860
  };
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[931],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[5931],{
2
2
 
3
3
  /***/ 45730:
4
4
  /***/ (function(module, exports) {
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[10],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[6010],{
3
3
 
4
4
  /***/ 76010:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {