@ohif/app 3.9.0-beta.45 → 3.9.0-beta.47

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 (89) hide show
  1. package/dist/031089e563a18ada8441.wasm +0 -0
  2. package/dist/{445.bundle.38c6d2af64e41cd7c614.js → 10.bundle.c626810bd199ab63f3a2.js} +3 -3
  3. package/dist/{501.bundle.2f703ca4598a3be0d748.js → 129.bundle.3102eccbd5c78524c3dd.js} +6036 -11592
  4. package/dist/{140.bundle.fcf29be726bb9dcea834.js → 153.bundle.d3732d0fdebb39e139b4.js} +7 -4
  5. package/dist/{139.bundle.09e5af0a9ae8a285af77.js → 169.bundle.eeb9614e7b06f896c70f.js} +65 -535
  6. package/dist/{139.css → 169.css} +0 -1
  7. package/dist/{164.bundle.2b23bfbcb23497d7c87a.js → 196.bundle.cf8c2311aafb5312bbf7.js} +15562 -8539
  8. package/dist/{342.bundle.fcb2038060a062129d34.js → 202.bundle.bb0e8196739bb896dc9e.js} +238 -276
  9. package/dist/{129.bundle.894f29369d609094208b.js → 210.bundle.d6d6cbd1b65e4f506ed1.js} +46 -46
  10. package/dist/{363.bundle.c7e38cf0c1fc7d19a701.js → 217.bundle.042317b439df47cd38b1.js} +2099 -195
  11. package/dist/{363.css → 217.css} +1 -0
  12. package/dist/{14.bundle.60eed1138c62b91572a7.js → 246.bundle.288317813cd5781e64f7.js} +11 -11
  13. package/dist/250.bundle.4743b359797751102600.js +663 -0
  14. package/dist/{944.bundle.baa0880e0bbde13fccc5.js → 281.bundle.5946cbee5150dec1532f.js} +241 -254
  15. package/dist/{727.bundle.7b7f3962207601643615.js → 286.bundle.985c5ebbb2158c7e59ab.js} +4 -4
  16. package/dist/29.bundle.976319462f33868497c2.js +12347 -0
  17. package/dist/{675.bundle.c9720f40fd7c7e9b7e54.js → 315.bundle.92d7aefc4dc9cfd951bd.js} +18 -18
  18. package/dist/{218.bundle.a1709956bc65c4f54874.js → 353.bundle.58b3ea80771ebaca956b.js} +8 -8
  19. package/dist/{799.bundle.33fc63add3b915d0c2b2.js → 360.bundle.81592d66456d25930928.js} +62 -62
  20. package/dist/{555.bundle.768f1594e1d40b707342.js → 372.bundle.5e3dc2539055ca5861e6.js} +50 -50
  21. package/dist/{211.bundle.194272cd32bedb302303.js → 376.bundle.45b94427174400b86d5d.js} +8 -8
  22. package/dist/{612.bundle.297a033523539e0b47f9.js → 412.bundle.836f106f6e2896dc42a5.js} +4 -4
  23. package/dist/{931.bundle.058f8de4606f27b31f4f.js → 417.bundle.abf8bcee0f246002acb9.js} +25 -25
  24. package/dist/{370.bundle.bd9884c274c26a54dfae.js → 428.bundle.744fc5865b2d747de88a.js} +829 -1511
  25. package/dist/{483.bundle.0f1848f6a2cf34829fef.js → 497.bundle.ee102d6243f984113f08.js} +141 -141
  26. package/dist/{323.bundle.955cc8f5eb5c01295118.js → 498.bundle.bb47c493dd02451f77ef.js} +17 -17
  27. package/dist/{552.bundle.0d11c419f675cb5a63b1.js → 502.bundle.857675fc2cbb2fbe3e47.js} +8 -9
  28. package/dist/{835.bundle.5d1951da8bbc6afdf3e0.js → 530.bundle.87f8b13ff55bf7b2a6d1.js} +28 -28
  29. package/dist/{121.bundle.57fe5a392b0910f33c2d.js → 552.bundle.95c0f28b051797242104.js} +733 -62
  30. package/dist/{265.bundle.61b0e1ce9d444704a976.js → 571.bundle.a80609c9815339516d77.js} +24 -24
  31. package/dist/{853.bundle.26b774ab3259f3e6087c.js → 591.bundle.1dca7dfd3e0490ea6dc1.js} +15 -14
  32. package/dist/604.bundle.83f50929b208c60e48da.js +1950 -0
  33. package/dist/610.min.worker.js +1 -1
  34. package/dist/610.min.worker.js.map +1 -1
  35. package/dist/{792.bundle.485ad2f98823a4b3feb1.js → 658.bundle.219ed199728759098008.js} +17 -17
  36. package/dist/{989.bundle.4be1e8f36734961852a8.js → 791.bundle.be08fa50f9a84244253b.js} +11 -11
  37. package/dist/{722.bundle.1242e0348afc63ca4f5e.js → 793.bundle.c92f52ddff0e3bf506e6.js} +13 -13
  38. package/dist/{914.bundle.e15be8089bf422ed7b51.js → 818.bundle.cda4e369fdee5459a544.js} +1239 -627
  39. package/dist/{726.bundle.90d63d40a19b058034ee.js → 831.bundle.9e1a3495947e5bb49756.js} +512 -512
  40. package/dist/{382.bundle.7cdad0f12b64f248dd28.js → 842.bundle.0664bcdeb7f153ab52bb.js} +11 -11
  41. package/dist/{806.bundle.1ec5fda0b16e053350d7.js → 888.bundle.2d02f805cedcf5d2ee7d.js} +14 -14
  42. package/dist/{702.bundle.963481fbf871984b646f.js → 909.bundle.1fbb8bb4c41d0bb2994d.js} +119 -381
  43. package/dist/{109.bundle.b4fee2a22b622839baf5.js → 931.bundle.f6fa2a436ace89ebf60f.js} +5036 -4642
  44. package/dist/{141.bundle.556b4c1e4cab770417ac.js → 937.bundle.cc709c922731f9496810.js} +86 -478
  45. package/dist/{444.bundle.75f58f53dab4d04db97d.js → 944.bundle.194f4f4e4e55ec466b78.js} +9 -10
  46. package/dist/945.min.worker.js +1 -1
  47. package/dist/945.min.worker.js.map +1 -1
  48. package/dist/{194.bundle.e6fb48f13f312eded76b.js → 962.bundle.225fcd92e6a5af66b6a2.js} +33 -37
  49. package/dist/{920.bundle.f75637a18563de8c8235.js → 978.bundle.4edc8c4615d7e3b4717a.js} +6 -6
  50. package/dist/{236.bundle.34db90a140e37d34fd71.js → 993.bundle.aa31ebda5a5f62c44de5.js} +2363 -2351
  51. package/dist/{717.bundle.3b84fbd289af82208a19.js → 994.bundle.269ce05b16fd6aa28006.js} +90 -164
  52. package/dist/app-config.js +58 -4
  53. package/dist/app.bundle.css +3 -3
  54. package/dist/{app.bundle.e2d3b6781252f9c7b2a3.js → app.bundle.ecc3736aff52e6abfd49.js} +52547 -36094
  55. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  56. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  57. package/dist/dicom-microscopy-viewer/5004fdc02f329ce53b69.wasm +0 -0
  58. package/dist/dicom-microscopy-viewer/c22b37c3488e1d6c3aa4.wasm +0 -0
  59. package/dist/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js +3 -0
  60. package/dist/{dicomMicroscopyViewer.min.js.LICENSE.txt → dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.LICENSE.txt} +11 -0
  61. package/dist/dicom-microscopy-viewer/index.worker.min.worker.js +2 -0
  62. package/dist/dicom-microscopy-viewer/index.worker.min.worker.js.map +1 -0
  63. package/dist/{histogram-worker.bundle.6b31e5ed4c4a7a6998f2.js → histogram-worker.bundle.e7e9fea2c3236b0e747a.js} +12 -16
  64. package/dist/index.html +1 -1
  65. package/dist/index.worker.5a5a581362c14598c3d9.worker.js +2 -0
  66. package/dist/index.worker.5a5a581362c14598c3d9.worker.js.map +1 -0
  67. package/dist/{polySeg.bundle.df492df5042827938ba4.js → polySeg.bundle.b25c61224998018d0f79.js} +24 -5
  68. package/dist/{suv-peak-worker.bundle.8f4b505fad3d371489fe.js → suv-peak-worker.bundle.eb11e71db02e52601ecf.js} +40 -21
  69. package/dist/sw.js +1 -1
  70. package/package.json +25 -33
  71. package/dist/117.bundle.1f7b56504d506e7259e3.js +0 -6552
  72. package/dist/172.bundle.e0ee762bee7496d6491e.js +0 -662
  73. package/dist/36785fbd89b0e17f6099.wasm +0 -0
  74. package/dist/62ab5d58a2bea7b5a1dc.wasm +0 -0
  75. package/dist/644.bundle.1e77691d2eeb96a423b0.js +0 -19159
  76. package/dist/75a0c2dfe07b824c7d21.wasm +0 -0
  77. package/dist/dicom-microscopy-viewer.bundle.d3a56dc9f62df5e11019.js +0 -13
  78. package/dist/dicomMicroscopyViewer.min.js +0 -3
  79. package/dist/index.worker.f4bda803c15bc6359d5f.worker.js +0 -2
  80. package/dist/index.worker.f4bda803c15bc6359d5f.worker.js.map +0 -1
  81. package/dist/index.worker.min.worker.js +0 -2
  82. package/dist/index.worker.min.worker.js.map +0 -1
  83. /package/dist/{129.css → 210.css} +0 -0
  84. /package/dist/{727.css → 286.css} +0 -0
  85. /package/dist/{172.css → 552.css} +0 -0
  86. /package/dist/{404.css → 757.css} +0 -0
  87. /package/dist/{717.css → 994.css} +0 -0
  88. /package/dist/{65916ef3def695744bda.wasm → dicom-microscopy-viewer/65916ef3def695744bda.wasm} +0 -0
  89. /package/dist/{b6b803111e2d06a825bd.wasm → dicom-microscopy-viewer/b6b803111e2d06a825bd.wasm} +0 -0
@@ -1,7 +1,673 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[121],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[552,757],{
3
3
 
4
- /***/ 67121:
4
+ /***/ 3094:
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 */ src_DicomMicroscopyViewport)
13
+ });
14
+
15
+ // EXTERNAL MODULE: ../../../node_modules/react/index.js
16
+ var react = __webpack_require__(43001);
17
+ // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
18
+ var prop_types = __webpack_require__(3827);
19
+ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20
+ // EXTERNAL MODULE: ../../ui/src/index.js + 784 modules
21
+ var src = __webpack_require__(38604);
22
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/DicomMicroscopyViewport.css
23
+ // extracted by mini-css-extract-plugin
24
+
25
+ // EXTERNAL MODULE: ../../../node_modules/classnames/index.js
26
+ var classnames = __webpack_require__(33901);
27
+ var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
28
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/components/ViewportOverlay/listComponentGenerator.tsx
29
+ const listComponentGenerator = props => {
30
+ const {
31
+ list,
32
+ itemGenerator
33
+ } = props;
34
+ if (!list) {
35
+ return;
36
+ }
37
+ return list.map(item => {
38
+ if (!item) {
39
+ return;
40
+ }
41
+ const generator = item.generator || itemGenerator;
42
+ if (!generator) {
43
+ throw new Error(`No generator for ${item}`);
44
+ }
45
+ return generator({
46
+ ...props,
47
+ item
48
+ });
49
+ });
50
+ };
51
+ /* harmony default export */ const ViewportOverlay_listComponentGenerator = (listComponentGenerator);
52
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/components/ViewportOverlay/ViewportOverlay.css
53
+ // extracted by mini-css-extract-plugin
54
+
55
+ // EXTERNAL MODULE: ../../../node_modules/moment/moment.js
56
+ var moment_moment = __webpack_require__(71271);
57
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
58
+ var esm = __webpack_require__(62709);
59
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/components/ViewportOverlay/utils.ts
60
+
61
+
62
+
63
+ /**
64
+ * Checks if value is valid.
65
+ *
66
+ * @param {number} value
67
+ * @returns {boolean} is valid.
68
+ */
69
+ function isValidNumber(value) {
70
+ return typeof value === 'number' && !isNaN(value);
71
+ }
72
+
73
+ /**
74
+ * Formats number precision.
75
+ *
76
+ * @param {number} number
77
+ * @param {number} precision
78
+ * @returns {number} formatted number.
79
+ */
80
+ function utils_formatNumberPrecision(number, precision) {
81
+ if (number !== null) {
82
+ return parseFloat(number).toFixed(precision);
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Formats DICOM date.
88
+ *
89
+ * @param {string} date
90
+ * @param {string} strFormat
91
+ * @returns {string} formatted date.
92
+ */
93
+ function utils_formatDICOMDate(date, strFormat = 'MMM D, YYYY') {
94
+ return moment(date, 'YYYYMMDD').format(strFormat);
95
+ }
96
+
97
+ /**
98
+ * DICOM Time is stored as HHmmss.SSS, where:
99
+ * HH 24 hour time:
100
+ * m mm 0..59 Minutes
101
+ * s ss 0..59 Seconds
102
+ * S SS SSS 0..999 Fractional seconds
103
+ *
104
+ * Goal: '24:12:12'
105
+ *
106
+ * @param {*} time
107
+ * @param {string} strFormat
108
+ * @returns {string} formatted name.
109
+ */
110
+ function utils_formatDICOMTime(time, strFormat = 'HH:mm:ss') {
111
+ return moment(time, 'HH:mm:ss').format(strFormat);
112
+ }
113
+
114
+ /**
115
+ * Formats a patient name for display purposes
116
+ *
117
+ * @param {string} name
118
+ * @returns {string} formatted name.
119
+ */
120
+ function utils_formatPN(name) {
121
+ if (!name) {
122
+ return;
123
+ }
124
+
125
+ // Convert the first ^ to a ', '. String.replace() only affects
126
+ // the first appearance of the character.
127
+ const commaBetweenFirstAndLast = name.replace('^', ', ');
128
+
129
+ // Replace any remaining '^' characters with spaces
130
+ const cleaned = commaBetweenFirstAndLast.replace(/\^/g, ' ');
131
+
132
+ // Trim any extraneous whitespace
133
+ return cleaned.trim();
134
+ }
135
+
136
+ /**
137
+ * Gets compression type
138
+ *
139
+ * @param {number} imageId
140
+ * @returns {string} compression type.
141
+ */
142
+ function getCompression(imageId) {
143
+ const generalImageModule = cornerstone.metaData.get('generalImageModule', imageId) || {};
144
+ const {
145
+ lossyImageCompression,
146
+ lossyImageCompressionRatio,
147
+ lossyImageCompressionMethod
148
+ } = generalImageModule;
149
+ if (lossyImageCompression === '01' && lossyImageCompressionRatio !== '') {
150
+ const compressionMethod = lossyImageCompressionMethod || 'Lossy: ';
151
+ const compressionRatio = utils_formatNumberPrecision(lossyImageCompressionRatio, 2);
152
+ return compressionMethod + compressionRatio + ' : 1';
153
+ }
154
+ return 'Lossless / Uncompressed';
155
+ }
156
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/components/ViewportOverlay/index.tsx
157
+
158
+
159
+
160
+
161
+
162
+ /**
163
+ *
164
+ * @param {*} config is a configuration object that defines four lists of elements,
165
+ * one topLeft, topRight, bottomLeft, bottomRight contents.
166
+ * @param {*} extensionManager is used to load the image data.
167
+ * @returns
168
+ */
169
+ const generateFromConfig = ({
170
+ topLeft = [],
171
+ topRight = [],
172
+ bottomLeft = [],
173
+ bottomRight = [],
174
+ itemGenerator = () => {}
175
+ }) => {
176
+ return props => {
177
+ const topLeftClass = 'top-viewport left-viewport text-primary-light';
178
+ const topRightClass = 'top-viewport right-viewport-scrollbar text-primary-light';
179
+ const bottomRightClass = 'bottom-viewport right-viewport-scrollbar text-primary-light';
180
+ const bottomLeftClass = 'bottom-viewport left-viewport text-primary-light';
181
+ const overlay = 'absolute pointer-events-none microscopy-viewport-overlay';
182
+ return /*#__PURE__*/react.createElement(react.Fragment, null, topLeft && topLeft.length > 0 && /*#__PURE__*/react.createElement("div", {
183
+ "data-cy": 'viewport-overlay-top-left',
184
+ className: classnames_default()(overlay, topLeftClass)
185
+ }, ViewportOverlay_listComponentGenerator({
186
+ ...props,
187
+ list: topLeft,
188
+ itemGenerator
189
+ })), topRight && topRight.length > 0 && /*#__PURE__*/react.createElement("div", {
190
+ "data-cy": 'viewport-overlay-top-right',
191
+ className: classnames_default()(overlay, topRightClass)
192
+ }, ViewportOverlay_listComponentGenerator({
193
+ ...props,
194
+ list: topRight,
195
+ itemGenerator
196
+ })), bottomRight && bottomRight.length > 0 && /*#__PURE__*/react.createElement("div", {
197
+ "data-cy": 'viewport-overlay-bottom-right',
198
+ className: classnames_default()(overlay, bottomRightClass)
199
+ }, ViewportOverlay_listComponentGenerator({
200
+ ...props,
201
+ list: bottomRight,
202
+ itemGenerator
203
+ })), bottomLeft && bottomLeft.length > 0 && /*#__PURE__*/react.createElement("div", {
204
+ "data-cy": 'viewport-overlay-bottom-left',
205
+ className: classnames_default()(overlay, bottomLeftClass)
206
+ }, ViewportOverlay_listComponentGenerator({
207
+ ...props,
208
+ list: bottomLeft,
209
+ itemGenerator
210
+ })));
211
+ };
212
+ };
213
+ const itemGenerator = props => {
214
+ const {
215
+ item
216
+ } = props;
217
+ const {
218
+ title,
219
+ value: valueFunc,
220
+ condition,
221
+ contents
222
+ } = item;
223
+ props.image = {
224
+ ...props.image,
225
+ ...props.metadata
226
+ };
227
+ props.formatDate = formatDICOMDate;
228
+ props.formatTime = formatDICOMTime;
229
+ props.formatPN = formatPN;
230
+ props.formatNumberPrecision = formatNumberPrecision;
231
+ if (condition && !condition(props)) {
232
+ return null;
233
+ }
234
+ if (!contents && !valueFunc) {
235
+ return null;
236
+ }
237
+ const value = valueFunc && valueFunc(props);
238
+ const contentsValue = contents && contents(props) || [{
239
+ className: 'mr-1',
240
+ value: title
241
+ }, {
242
+ classname: 'mr-1 font-light',
243
+ value
244
+ }];
245
+ return /*#__PURE__*/React.createElement("div", {
246
+ key: item.id,
247
+ className: "flex flex-row"
248
+ }, contentsValue.map((content, idx) => /*#__PURE__*/React.createElement("span", {
249
+ key: idx,
250
+ className: content.className
251
+ }, content.value)));
252
+ };
253
+ /* harmony default export */ const ViewportOverlay = (generateFromConfig({}));
254
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
255
+ var core_src = __webpack_require__(63810);
256
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 93 modules
257
+ var default_src = __webpack_require__(32281);
258
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/dicomWebClient.ts
259
+
260
+
261
+
262
+ /**
263
+ * create a DICOMwebClient object to be used by Dicom Microscopy Viewer
264
+ *
265
+ * Referenced the code from `/extensions/default/src/DicomWebDataSource/index.js`
266
+ *
267
+ * @param param0
268
+ * @returns
269
+ */
270
+ function getDicomWebClient({
271
+ extensionManager,
272
+ servicesManager
273
+ }) {
274
+ const dataSourceConfig = window.config.dataSources.find(ds => ds.sourceName === extensionManager.activeDataSource);
275
+ const {
276
+ userAuthenticationService
277
+ } = servicesManager.services;
278
+ const {
279
+ wadoRoot,
280
+ staticWado,
281
+ singlepart
282
+ } = dataSourceConfig.configuration;
283
+ const wadoConfig = {
284
+ url: wadoRoot || '/dicomlocal',
285
+ staticWado,
286
+ singlepart,
287
+ headers: userAuthenticationService.getAuthorizationHeader(),
288
+ errorInterceptor: core_src/* errorHandler */.Po.getHTTPErrorHandler()
289
+ };
290
+ const client = new default_src.StaticWadoClient(wadoConfig);
291
+ client.wadoURL = wadoConfig.url;
292
+ if (extensionManager.activeDataSource === 'dicomlocal') {
293
+ /**
294
+ * For local data source, override the retrieveInstanceFrames() method of the
295
+ * dicomweb-client to retrieve image data from memory cached metadata.
296
+ * Other methods of the client doesn't matter, as we are feeding the DMV
297
+ * with the series metadata already.
298
+ *
299
+ * @param {Object} options
300
+ * @param {String} options.studyInstanceUID - Study Instance UID
301
+ * @param {String} options.seriesInstanceUID - Series Instance UID
302
+ * @param {String} options.sopInstanceUID - SOP Instance UID
303
+ * @param {String} options.frameNumbers - One-based indices of Frame Items
304
+ * @param {Object} [options.queryParams] - HTTP query parameters
305
+ * @returns {ArrayBuffer[]} Rendered Frame Items as byte arrays
306
+ */
307
+ //
308
+ client.retrieveInstanceFrames = async options => {
309
+ if (!('studyInstanceUID' in options)) {
310
+ throw new Error('Study Instance UID is required for retrieval of instance frames');
311
+ }
312
+ if (!('seriesInstanceUID' in options)) {
313
+ throw new Error('Series Instance UID is required for retrieval of instance frames');
314
+ }
315
+ if (!('sopInstanceUID' in options)) {
316
+ throw new Error('SOP Instance UID is required for retrieval of instance frames');
317
+ }
318
+ if (!('frameNumbers' in options)) {
319
+ throw new Error('frame numbers are required for retrieval of instance frames');
320
+ }
321
+ console.log(`retrieve frames ${options.frameNumbers.toString()} of instance ${options.sopInstanceUID}`);
322
+ const instance = core_src.DicomMetadataStore.getInstance(options.studyInstanceUID, options.seriesInstanceUID, options.sopInstanceUID);
323
+ const frameNumbers = Array.isArray(options.frameNumbers) ? options.frameNumbers : options.frameNumbers.split(',');
324
+ return frameNumbers.map(fr => Array.isArray(instance.PixelData) ? instance.PixelData[+fr - 1] : instance.PixelData);
325
+ };
326
+ }
327
+ return client;
328
+ }
329
+ // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
330
+ var dcmjs_es = __webpack_require__(67540);
331
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/cleanDenaturalizedDataset.ts
332
+
333
+ function isPrimitive(v) {
334
+ return !(typeof v == 'object' || Array.isArray(v));
335
+ }
336
+ const vrNumerics = ['DS', 'FL', 'FD', 'IS', 'OD', 'OF', 'OL', 'OV', 'SL', 'SS', 'SV', 'UL', 'US', 'UV'];
337
+
338
+ /**
339
+ * Specialized for DICOM JSON format dataset cleaning.
340
+ * @param obj
341
+ * @returns
342
+ */
343
+ function cleanDenaturalizedDataset(obj, options) {
344
+ if (Array.isArray(obj)) {
345
+ const newAry = obj.map(o => isPrimitive(o) ? o : cleanDenaturalizedDataset(o, options));
346
+ return newAry;
347
+ } else if (isPrimitive(obj)) {
348
+ return obj;
349
+ } else {
350
+ Object.keys(obj).forEach(key => {
351
+ if (obj[key].Value === null && obj[key].vr) {
352
+ delete obj[key].Value;
353
+ } else if (Array.isArray(obj[key].Value) && obj[key].vr) {
354
+ if (obj[key].Value.length === 1 && obj[key].Value[0].BulkDataURI) {
355
+ default_src.dicomWebUtils.fixBulkDataURI(obj[key].Value[0], options, options.dataSourceConfig);
356
+ obj[key].BulkDataURI = obj[key].Value[0].BulkDataURI;
357
+
358
+ // prevent mixed-content blockage
359
+ if (window.location.protocol === 'https:' && obj[key].BulkDataURI.startsWith('http:')) {
360
+ obj[key].BulkDataURI = obj[key].BulkDataURI.replace('http:', 'https:');
361
+ }
362
+ delete obj[key].Value;
363
+ } else if (vrNumerics.includes(obj[key].vr)) {
364
+ obj[key].Value = obj[key].Value.map(v => +v);
365
+ } else {
366
+ obj[key].Value = obj[key].Value.map(entry => cleanDenaturalizedDataset(entry, options));
367
+ }
368
+ }
369
+ });
370
+ return obj;
371
+ }
372
+ }
373
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/DicomMicroscopyViewport.tsx
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+ class DicomMicroscopyViewport extends react.Component {
383
+ constructor(props) {
384
+ super(props);
385
+ this.state = {
386
+ error: null,
387
+ isLoaded: false
388
+ };
389
+ this.microscopyService = void 0;
390
+ this.viewer = null;
391
+ // dicom-microscopy-viewer instance
392
+ this.managedViewer = null;
393
+ // managed wrapper of microscopy-dicom extension
394
+ this.container = /*#__PURE__*/react.createRef();
395
+ this.overlayElement = /*#__PURE__*/react.createRef();
396
+ this.setViewportActiveHandler = () => {
397
+ const {
398
+ setViewportActive,
399
+ viewportId,
400
+ activeViewportId
401
+ } = this.props;
402
+ if (viewportId !== activeViewportId) {
403
+ setViewportActive(viewportId);
404
+ }
405
+ };
406
+ const {
407
+ microscopyService
408
+ } = this.props.servicesManager.services;
409
+ this.microscopyService = microscopyService;
410
+ }
411
+ /**
412
+ * Need to return this as a function to prevent webpack from munging it.
413
+ */
414
+ static getImportPath() {
415
+ return '/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js';
416
+ }
417
+
418
+ /**
419
+ * Get the nearest ROI from the mouse click point
420
+ *
421
+ * @param event
422
+ * @param autoselect
423
+ * @returns
424
+ */
425
+ getNearbyROI(event, autoselect = true) {
426
+ const symbols = Object.getOwnPropertySymbols(this.viewer);
427
+ const _drawingSource = symbols.find(p => p.description === 'drawingSource');
428
+ const _pyramid = symbols.find(p => p.description === 'pyramid');
429
+ const _map = symbols.find(p => p.description === 'map');
430
+ const _affine = symbols.find(p => p.description === 'affine');
431
+ const feature = this.viewer[_drawingSource].getClosestFeatureToCoordinate(this.viewer[_map].getEventCoordinate(event));
432
+ if (!feature) {
433
+ return null;
434
+ }
435
+ const roiAnnotation = this.viewer._getROIFromFeature(feature, this.viewer[_pyramid].metadata, this.viewer[_affine]);
436
+ if (roiAnnotation && autoselect) {
437
+ this.microscopyService.selectAnnotation(roiAnnotation);
438
+ }
439
+ return roiAnnotation;
440
+ }
441
+
442
+ // install the microscopy renderer into the web page.
443
+ // you should only do this once.
444
+ async installOpenLayersRenderer(container, displaySet) {
445
+ const loadViewer = async metadata => {
446
+ await import( /* webpackIgnore: true */DicomMicroscopyViewport.getImportPath());
447
+ const {
448
+ viewer: DicomMicroscopyViewer,
449
+ metadata: metadataUtils
450
+ } = window.dicomMicroscopyViewer;
451
+ const microscopyViewer = DicomMicroscopyViewer.VolumeImageViewer;
452
+ const client = getDicomWebClient({
453
+ extensionManager: this.props.extensionManager,
454
+ servicesManager: this.props.servicesManager
455
+ });
456
+
457
+ // Parse, format, and filter metadata
458
+ const volumeImages = [];
459
+
460
+ /**
461
+ * This block of code is the original way of loading DICOM into dicom-microscopy-viewer
462
+ * as in their documentation.
463
+ * But we have the metadata already loaded by our loaders.
464
+ * As the metadata for microscopy DIOM files tends to be big and we don't
465
+ * want to double load it, below we have the mechanism to reconstruct the
466
+ * DICOM JSON structure (denaturalized) from naturalized metadata.
467
+ * (NOTE: Our loaders cache only naturalized metadata, not the denaturalized.)
468
+ */
469
+ // {
470
+ // const retrieveOptions = {
471
+ // studyInstanceUID: metadata[0].StudyInstanceUID,
472
+ // seriesInstanceUID: metadata[0].SeriesInstanceUID,
473
+ // };
474
+ // metadata = await client.retrieveSeriesMetadata(retrieveOptions);
475
+ // // Parse, format, and filter metadata
476
+ // metadata.forEach(m => {
477
+ // if (
478
+ // volumeImages.length > 0 &&
479
+ // m['00200052'].Value[0] != volumeImages[0].FrameOfReferenceUID
480
+ // ) {
481
+ // console.warn(
482
+ // 'Expected FrameOfReferenceUID of difference instances within a series to be the same, found multiple different values',
483
+ // m['00200052'].Value[0]
484
+ // );
485
+ // m['00200052'].Value[0] = volumeImages[0].FrameOfReferenceUID;
486
+ // }
487
+ // NOTE: depending on different data source, image.ImageType sometimes
488
+ // is a string, not a string array.
489
+ // m['00080008'] = transformImageTypeUnnaturalized(m['00080008']);
490
+
491
+ // const image = new metadataUtils.VLWholeSlideMicroscopyImage({
492
+ // metadata: m,
493
+ // });
494
+ // const imageFlavor = image.ImageType[2];
495
+ // if (imageFlavor === 'VOLUME' || imageFlavor === 'THUMBNAIL') {
496
+ // volumeImages.push(image);
497
+ // }
498
+ // });
499
+ // }
500
+
501
+ metadata.forEach(m => {
502
+ // NOTE: depending on different data source, image.ImageType sometimes
503
+ // is a string, not a string array.
504
+ m.ImageType = typeof m.ImageType === 'string' ? m.ImageType.split('\\') : m.ImageType;
505
+ const inst = cleanDenaturalizedDataset(dcmjs_es["default"].data.DicomMetaDictionary.denaturalizeDataset(m), {
506
+ StudyInstanceUID: m.StudyInstanceUID,
507
+ SeriesInstanceUID: m.SeriesInstanceUID,
508
+ dataSourceConfig: this.props.dataSource.getConfig()
509
+ });
510
+ if (!inst['00480105']) {
511
+ // Optical Path Sequence, no OpticalPathIdentifier?
512
+ // NOTE: this is actually a not-well formatted DICOM VL Whole Slide Microscopy Image.
513
+ inst['00480105'] = {
514
+ vr: 'SQ',
515
+ Value: [{
516
+ '00480106': {
517
+ vr: 'SH',
518
+ Value: ['1']
519
+ }
520
+ }]
521
+ };
522
+ }
523
+ const image = new metadataUtils.VLWholeSlideMicroscopyImage({
524
+ metadata: inst
525
+ });
526
+ const imageFlavor = image.ImageType[2];
527
+ if (imageFlavor === 'VOLUME' || imageFlavor === 'THUMBNAIL') {
528
+ volumeImages.push(image);
529
+ }
530
+ });
531
+
532
+ // format metadata for microscopy-viewer
533
+ const options = {
534
+ client,
535
+ metadata: volumeImages,
536
+ retrieveRendered: false,
537
+ controls: ['overview', 'position']
538
+ };
539
+ this.viewer = new microscopyViewer(options);
540
+ if (this.overlayElement && this.overlayElement.current && this.viewer.addViewportOverlay) {
541
+ this.viewer.addViewportOverlay({
542
+ element: this.overlayElement.current,
543
+ coordinates: [0, 0],
544
+ // TODO: dicom-microscopy-viewer documentation says this can be false to be automatically, but it is not.
545
+ navigate: true,
546
+ className: 'OpenLayersOverlay'
547
+ });
548
+ }
549
+ this.viewer.render({
550
+ container
551
+ });
552
+ const {
553
+ StudyInstanceUID,
554
+ SeriesInstanceUID
555
+ } = displaySet;
556
+ this.managedViewer = this.microscopyService.addViewer(this.viewer, this.props.viewportId, container, StudyInstanceUID, SeriesInstanceUID);
557
+ this.managedViewer.addContextMenuCallback(event => {
558
+ // TODO: refactor this after Bill's changes on ContextMenu feature get merged
559
+ // const roiAnnotationNearBy = this.getNearbyROI(event);
560
+ });
561
+ };
562
+ this.microscopyService.clearAnnotations();
563
+ let smDisplaySet = displaySet;
564
+ if (displaySet.Modality === 'SR') {
565
+ // for SR displaySet, let's load the actual image displaySet
566
+ smDisplaySet = displaySet.getSourceDisplaySet();
567
+ }
568
+ console.log('Loading viewer metadata', smDisplaySet);
569
+ await loadViewer(smDisplaySet.others);
570
+ if (displaySet.Modality === 'SR') {
571
+ displaySet.load(smDisplaySet);
572
+ }
573
+ }
574
+ componentDidMount() {
575
+ const {
576
+ displaySets,
577
+ viewportOptions
578
+ } = this.props;
579
+ // Todo-rename: this is always getting the 0
580
+ const displaySet = displaySets[0];
581
+ this.installOpenLayersRenderer(this.container.current, displaySet).then(() => {
582
+ this.setState({
583
+ isLoaded: true
584
+ });
585
+ });
586
+ }
587
+ componentDidUpdate(prevProps, prevState, snapshot) {
588
+ if (this.managedViewer && prevProps.displaySets !== this.props.displaySets) {
589
+ const {
590
+ displaySets
591
+ } = this.props;
592
+ const displaySet = displaySets[0];
593
+ this.microscopyService.clearAnnotations();
594
+
595
+ // loading SR
596
+ if (displaySet.Modality === 'SR') {
597
+ const referencedDisplaySet = displaySet.getSourceDisplaySet();
598
+ displaySet.load(referencedDisplaySet);
599
+ }
600
+ }
601
+ }
602
+ componentWillUnmount() {
603
+ this.microscopyService.removeViewer(this.viewer);
604
+ }
605
+ render() {
606
+ const style = {
607
+ width: '100%',
608
+ height: '100%'
609
+ };
610
+ const displaySet = this.props.displaySets[0];
611
+ const firstInstance = displaySet.firstInstance || displaySet.instance;
612
+ return /*#__PURE__*/react.createElement("div", {
613
+ className: 'DicomMicroscopyViewer',
614
+ style: style,
615
+ onClick: this.setViewportActiveHandler
616
+ }, /*#__PURE__*/react.createElement("div", {
617
+ style: {
618
+ ...style,
619
+ display: 'none'
620
+ }
621
+ }, /*#__PURE__*/react.createElement("div", {
622
+ style: {
623
+ ...style
624
+ },
625
+ ref: this.overlayElement
626
+ }, /*#__PURE__*/react.createElement("div", {
627
+ style: {
628
+ position: 'relative',
629
+ height: '100%',
630
+ width: '100%'
631
+ }
632
+ }, displaySet && firstInstance.imageId && /*#__PURE__*/react.createElement(ViewportOverlay, {
633
+ displaySet: displaySet,
634
+ instance: displaySet.instance,
635
+ metadata: displaySet.metadata
636
+ })))), this.state.error ? /*#__PURE__*/react.createElement("h2", null, JSON.stringify(this.state.error)) : /*#__PURE__*/react.createElement("div", {
637
+ style: style,
638
+ ref: ref => {
639
+ this.container.current = ref;
640
+ this.props.resizeRef.current = ref;
641
+ }
642
+ }), this.state.isLoaded ? null : /*#__PURE__*/react.createElement(src/* LoadingIndicatorProgress */.LE, {
643
+ className: 'h-full w-full bg-black'
644
+ }));
645
+ }
646
+ }
647
+ DicomMicroscopyViewport.propTypes = {
648
+ viewportData: (prop_types_default()).object,
649
+ activeViewportId: (prop_types_default()).string,
650
+ setViewportActive: (prop_types_default()).func,
651
+ // props from OHIF Viewport Grid
652
+ displaySets: (prop_types_default()).array,
653
+ viewportId: (prop_types_default()).string,
654
+ viewportLabel: (prop_types_default()).string,
655
+ dataSource: (prop_types_default()).object,
656
+ viewportOptions: (prop_types_default()).object,
657
+ displaySetOptions: (prop_types_default()).array,
658
+ // other props from wrapping component
659
+ servicesManager: (prop_types_default()).object,
660
+ extensionManager: (prop_types_default()).object,
661
+ commandsManager: (prop_types_default()).object,
662
+ resizeRef: prop_types_default().oneOfType([(prop_types_default()).func, prop_types_default().shape({
663
+ current: (prop_types_default()).any
664
+ })])
665
+ };
666
+ /* harmony default export */ const src_DicomMicroscopyViewport = (DicomMicroscopyViewport);
667
+
668
+ /***/ }),
669
+
670
+ /***/ 82065:
5
671
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
672
 
7
673
  // ESM COMPAT FLAG
@@ -13,21 +679,21 @@ __webpack_require__.d(__webpack_exports__, {
13
679
  });
14
680
 
15
681
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/package.json
16
- const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-dicom-microscopy"}');
682
+ const package_namespaceObject = JSON.parse('{"u2":"@ohif/extension-dicom-microscopy"}');
17
683
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/id.js
18
684
 
19
- const id = package_namespaceObject.UU;
685
+ const id = package_namespaceObject.u2;
20
686
 
21
687
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
22
- var react = __webpack_require__(41766);
23
- // EXTERNAL MODULE: ../../ui/src/index.js + 782 modules
24
- var src = __webpack_require__(79047);
688
+ var react = __webpack_require__(43001);
689
+ // EXTERNAL MODULE: ../../ui/src/index.js + 784 modules
690
+ var src = __webpack_require__(38604);
25
691
  // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
26
- var core_src = __webpack_require__(75186);
692
+ var core_src = __webpack_require__(63810);
27
693
  // EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
28
- var es = __webpack_require__(80619);
29
- // EXTERNAL MODULE: ../../../node_modules/mathjs/lib/esm/index.js + 996 modules
30
- var esm = __webpack_require__(23109);
694
+ var es = __webpack_require__(69190);
695
+ // EXTERNAL MODULE: ../../../node_modules/mathjs/lib/esm/index.js + 1003 modules
696
+ var esm = __webpack_require__(5931);
31
697
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/coordinateFormatScoord3d2Geometry.js
32
698
 
33
699
 
@@ -117,9 +783,9 @@ function mapSlideCoord2PixelCoord(options) {
117
783
  }
118
784
  const point = options.point;
119
785
  const m = [[orientation[0] * spacing[1], orientation[3] * spacing[0], offset[0]], [orientation[1] * spacing[1], orientation[4] * spacing[0], offset[1]], [0, 0, 1]];
120
- const mInverted = (0,esm/* inv */.WCD)(m);
786
+ const mInverted = (0,esm/* inv */.JBn)(m);
121
787
  const vSlide = [[point[0]], [point[1]], [1]];
122
- const vImage = (0,esm/* multiply */.lwT)(mInverted, vSlide);
788
+ const vImage = (0,esm/* multiply */.JpY)(mInverted, vSlide);
123
789
  const row = Number(vImage[1][0].toFixed(4));
124
790
  const col = Number(vImage[0][0].toFixed(4));
125
791
  return [col, row];
@@ -212,7 +878,7 @@ const EVENTS = {
212
878
  * ViewerManager encapsulates the complexity of the third-party viewer and
213
879
  * expose only the features/behaviors that are relevant to the application
214
880
  */
215
- class ViewerManager extends core_src/* PubSubService */.Rc {
881
+ class ViewerManager extends core_src/* PubSubService */.hC {
216
882
  constructor(viewer, viewportId, container, studyInstanceUID, seriesInstanceUID) {
217
883
  super(EVENTS);
218
884
  this.viewer = viewer;
@@ -615,7 +1281,7 @@ const RoiAnnotation_EVENTS = {
615
1281
  /**
616
1282
  * Represents a single annotation for the Microscopy Viewer
617
1283
  */
618
- class RoiAnnotation extends core_src/* PubSubService */.Rc {
1284
+ class RoiAnnotation extends core_src/* PubSubService */.hC {
619
1285
  constructor(roiGraphic, studyInstanceUID, seriesInstanceUID, label = '', viewState = null) {
620
1286
  super(RoiAnnotation_EVENTS);
621
1287
  this.uid = roiGraphic.uid;
@@ -786,7 +1452,7 @@ const MicroscopyService_EVENTS = {
786
1452
  * viewers and handle their ROI graphics to create, remove and modify the
787
1453
  * ROI annotations relevant to the application
788
1454
  */
789
- class MicroscopyService extends core_src/* PubSubService */.Rc {
1455
+ class MicroscopyService extends core_src/* PubSubService */.hC {
790
1456
  constructor(servicesManager) {
791
1457
  super(MicroscopyService_EVENTS);
792
1458
  this.servicesManager = void 0;
@@ -1373,7 +2039,7 @@ MicroscopyService.REGISTRATION = servicesManager => {
1373
2039
  };
1374
2040
 
1375
2041
  // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
1376
- var dcmjs_es = __webpack_require__(31426);
2042
+ var dcmjs_es = __webpack_require__(67540);
1377
2043
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/callInputDialog.tsx
1378
2044
 
1379
2045
 
@@ -1416,7 +2082,7 @@ function callInputDialog({
1416
2082
  centralize: true,
1417
2083
  isDraggable: false,
1418
2084
  showOverlay: true,
1419
- content: src/* Dialog */.lG,
2085
+ content: src/* Dialog */.Vq,
1420
2086
  contentProps: {
1421
2087
  title: title,
1422
2088
  value: {
@@ -1429,18 +2095,18 @@ function callInputDialog({
1429
2095
  actions: [{
1430
2096
  id: 'cancel',
1431
2097
  text: 'Cancel',
1432
- type: src/* ButtonEnums.type */.Ny.NW.secondary
2098
+ type: src/* ButtonEnums.type */.LZ.dt.secondary
1433
2099
  }, {
1434
2100
  id: 'save',
1435
2101
  text: 'Save',
1436
- type: src/* ButtonEnums.type */.Ny.NW.primary
2102
+ type: src/* ButtonEnums.type */.LZ.dt.primary
1437
2103
  }],
1438
2104
  onSubmit: onSubmitHandler,
1439
2105
  body: ({
1440
2106
  value,
1441
2107
  setValue
1442
2108
  }) => {
1443
- return /*#__PURE__*/react.createElement(src/* Input */.pd, {
2109
+ return /*#__PURE__*/react.createElement(src/* Input */.II, {
1444
2110
  label: "Enter your annotation",
1445
2111
  labelClassName: "text-white text-[14px] leading-[1.2]",
1446
2112
  autoFocus: true,
@@ -1503,34 +2169,34 @@ function constructSR(metadata, {
1503
2169
  } = metadata;
1504
2170
 
1505
2171
  // construct Comprehensive3DSR dataset
1506
- const observationContext = new dcmjs_es/* default.sr */.Ay.sr.templates.ObservationContext({
1507
- observerPersonContext: new dcmjs_es/* default.sr */.Ay.sr.templates.ObserverContext({
1508
- observerType: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2172
+ const observationContext = new dcmjs_es["default"].sr.templates.ObservationContext({
2173
+ observerPersonContext: new dcmjs_es["default"].sr.templates.ObserverContext({
2174
+ observerType: new dcmjs_es["default"].sr.coding.CodedConcept({
1509
2175
  value: '121006',
1510
2176
  schemeDesignator: 'DCM',
1511
2177
  meaning: 'Person'
1512
2178
  }),
1513
- observerIdentifyingAttributes: new dcmjs_es/* default.sr */.Ay.sr.templates.PersonObserverIdentifyingAttributes({
2179
+ observerIdentifyingAttributes: new dcmjs_es["default"].sr.templates.PersonObserverIdentifyingAttributes({
1514
2180
  name: '@ohif/extension-dicom-microscopy'
1515
2181
  })
1516
2182
  }),
1517
- observerDeviceContext: new dcmjs_es/* default.sr */.Ay.sr.templates.ObserverContext({
1518
- observerType: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2183
+ observerDeviceContext: new dcmjs_es["default"].sr.templates.ObserverContext({
2184
+ observerType: new dcmjs_es["default"].sr.coding.CodedConcept({
1519
2185
  value: '121007',
1520
2186
  schemeDesignator: 'DCM',
1521
2187
  meaning: 'Device'
1522
2188
  }),
1523
- observerIdentifyingAttributes: new dcmjs_es/* default.sr */.Ay.sr.templates.DeviceObserverIdentifyingAttributes({
2189
+ observerIdentifyingAttributes: new dcmjs_es["default"].sr.templates.DeviceObserverIdentifyingAttributes({
1524
2190
  uid: DEVICE_OBSERVER_UID
1525
2191
  })
1526
2192
  }),
1527
- subjectContext: new dcmjs_es/* default.sr */.Ay.sr.templates.SubjectContext({
1528
- subjectClass: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2193
+ subjectContext: new dcmjs_es["default"].sr.templates.SubjectContext({
2194
+ subjectClass: new dcmjs_es["default"].sr.coding.CodedConcept({
1529
2195
  value: '121027',
1530
2196
  schemeDesignator: 'DCM',
1531
2197
  meaning: 'Specimen'
1532
2198
  }),
1533
- subjectClassSpecificContext: new dcmjs_es/* default.sr */.Ay.sr.templates.SubjectContextSpecimen({
2199
+ subjectClassSpecificContext: new dcmjs_es["default"].sr.templates.SubjectContextSpecimen({
1534
2200
  uid: SpecimenDescriptionSequence.SpecimenUID,
1535
2201
  identifier: SpecimenDescriptionSequence.SpecimenIdentifier || metadata.SeriesInstanceUID,
1536
2202
  containerIdentifier: metadata.ContainerIdentifier || metadata.SeriesInstanceUID
@@ -1562,14 +2228,14 @@ function constructSR(metadata, {
1562
2228
  const ConceptName = Array.isArray(measurement.ConceptNameCodeSequence) ? measurement.ConceptNameCodeSequence[0] : measurement.ConceptNameCodeSequence;
1563
2229
  const MeasuredValue = Array.isArray(measurement.MeasuredValueSequence) ? measurement.MeasuredValueSequence[0] : measurement.MeasuredValueSequence;
1564
2230
  const MeasuredValueUnits = Array.isArray(MeasuredValue.MeasurementUnitsCodeSequence) ? MeasuredValue.MeasurementUnitsCodeSequence[0] : MeasuredValue.MeasurementUnitsCodeSequence;
1565
- return new dcmjs_es/* default.sr */.Ay.sr.valueTypes.NumContentItem({
1566
- name: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2231
+ return new dcmjs_es["default"].sr.valueTypes.NumContentItem({
2232
+ name: new dcmjs_es["default"].sr.coding.CodedConcept({
1567
2233
  meaning: ConceptName.CodeMeaning,
1568
2234
  value: ConceptName.CodeValue,
1569
2235
  schemeDesignator: ConceptName.CodingSchemeDesignator
1570
2236
  }),
1571
2237
  value: MeasuredValue.NumericValue,
1572
- unit: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2238
+ unit: new dcmjs_es["default"].sr.coding.CodedConcept({
1573
2239
  value: MeasuredValueUnits.CodeValue,
1574
2240
  meaning: MeasuredValueUnits.CodeMeaning,
1575
2241
  schemeDesignator: MeasuredValueUnits.CodingSchemeDesignator
@@ -1580,8 +2246,8 @@ function constructSR(metadata, {
1580
2246
  /** Avoid incompatibility with dcmjs */
1581
2247
  evaluations = evaluations.map(evaluation => {
1582
2248
  const ConceptName = Array.isArray(evaluation.ConceptNameCodeSequence) ? evaluation.ConceptNameCodeSequence[0] : evaluation.ConceptNameCodeSequence;
1583
- return new dcmjs_es/* default.sr */.Ay.sr.valueTypes.TextContentItem({
1584
- name: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2249
+ return new dcmjs_es["default"].sr.valueTypes.TextContentItem({
2250
+ name: new dcmjs_es["default"].sr.coding.CodedConcept({
1585
2251
  value: ConceptName.CodeValue,
1586
2252
  meaning: ConceptName.CodeMeaning,
1587
2253
  schemeDesignator: ConceptName.CodingSchemeDesignator
@@ -1591,17 +2257,17 @@ function constructSR(metadata, {
1591
2257
  });
1592
2258
  });
1593
2259
  const identifier = `ROI #${i + 1}`;
1594
- const group = new dcmjs_es/* default.sr */.Ay.sr.templates.PlanarROIMeasurementsAndQualitativeEvaluations({
1595
- trackingIdentifier: new dcmjs_es/* default.sr */.Ay.sr.templates.TrackingIdentifier({
2260
+ const group = new dcmjs_es["default"].sr.templates.PlanarROIMeasurementsAndQualitativeEvaluations({
2261
+ trackingIdentifier: new dcmjs_es["default"].sr.templates.TrackingIdentifier({
1596
2262
  uid: roi.uid,
1597
2263
  identifier: presentationState ? identifier.concat(`(${JSON.stringify(presentationState)})`) : identifier
1598
2264
  }),
1599
- referencedRegion: new dcmjs_es/* default.sr */.Ay.sr.contentItems.ImageRegion3D({
2265
+ referencedRegion: new dcmjs_es["default"].sr.contentItems.ImageRegion3D({
1600
2266
  graphicType: roi.scoord3d.graphicType,
1601
2267
  graphicData: roi.scoord3d.graphicData,
1602
2268
  frameOfReferenceUID: roi.scoord3d.frameOfReferenceUID
1603
2269
  }),
1604
- findingType: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2270
+ findingType: new dcmjs_es["default"].sr.coding.CodedConcept({
1605
2271
  value: label,
1606
2272
  schemeDesignator: '@ohif/extension-dicom-microscopy',
1607
2273
  meaning: 'FREETEXT'
@@ -1612,23 +2278,23 @@ function constructSR(metadata, {
1612
2278
  });
1613
2279
  imagingMeasurements.push(...group);
1614
2280
  }
1615
- const measurementReport = new dcmjs_es/* default.sr */.Ay.sr.templates.MeasurementReport({
1616
- languageOfContentItemAndDescendants: new dcmjs_es/* default.sr */.Ay.sr.templates.LanguageOfContentItemAndDescendants({}),
2281
+ const measurementReport = new dcmjs_es["default"].sr.templates.MeasurementReport({
2282
+ languageOfContentItemAndDescendants: new dcmjs_es["default"].sr.templates.LanguageOfContentItemAndDescendants({}),
1617
2283
  observationContext,
1618
- procedureReported: new dcmjs_es/* default.sr */.Ay.sr.coding.CodedConcept({
2284
+ procedureReported: new dcmjs_es["default"].sr.coding.CodedConcept({
1619
2285
  value: '112703',
1620
2286
  schemeDesignator: 'DCM',
1621
2287
  meaning: 'Whole Slide Imaging'
1622
2288
  }),
1623
2289
  imagingMeasurements
1624
2290
  });
1625
- const dataset = new dcmjs_es/* default.sr */.Ay.sr.documents.Comprehensive3DSR({
2291
+ const dataset = new dcmjs_es["default"].sr.documents.Comprehensive3DSR({
1626
2292
  content: measurementReport[0],
1627
2293
  evidence: [metadata],
1628
- seriesInstanceUID: dcmjs_es/* default.data */.Ay.data.DicomMetaDictionary.uid(),
2294
+ seriesInstanceUID: dcmjs_es["default"].data.DicomMetaDictionary.uid(),
1629
2295
  seriesNumber: SeriesNumber,
1630
2296
  seriesDescription: SeriesDescription || 'Whole slide imaging structured report',
1631
- sopInstanceUID: dcmjs_es/* default.data */.Ay.data.DicomMetaDictionary.uid(),
2297
+ sopInstanceUID: dcmjs_es["default"].data.DicomMetaDictionary.uid(),
1632
2298
  instanceNumber: 1,
1633
2299
  manufacturer: 'dcmjs-org'
1634
2300
  });
@@ -1648,7 +2314,7 @@ function constructSR(metadata, {
1648
2314
  vr: 'UI'
1649
2315
  },
1650
2316
  ImplementationClassUID: {
1651
- Value: [dcmjs_es/* default.data */.Ay.data.DicomMetaDictionary.uid()],
2317
+ Value: [dcmjs_es["default"].data.DicomMetaDictionary.uid()],
1652
2318
  vr: 'UI'
1653
2319
  },
1654
2320
  ImplementationVersionName: {
@@ -1686,7 +2352,7 @@ function saveByteArray(buffer, filename) {
1686
2352
  let saving = false;
1687
2353
  const {
1688
2354
  datasetToBuffer
1689
- } = dcmjs_es/* default.data */.Ay.data;
2355
+ } = dcmjs_es["default"].data;
1690
2356
  const formatArea = area => {
1691
2357
  let mult = 1;
1692
2358
  let unit = 'mm';
@@ -1995,7 +2661,7 @@ function MicroscopyPanel(props) {
1995
2661
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
1996
2662
  className: "ohif-scrollbar overflow-y-auto overflow-x-hidden",
1997
2663
  "data-cy": 'measurements-panel'
1998
- }, /*#__PURE__*/react.createElement(src/* MeasurementTable */.V, {
2664
+ }, /*#__PURE__*/react.createElement(src/* MeasurementTable */.wt, {
1999
2665
  title: "Measurements",
2000
2666
  servicesManager: props.servicesManager,
2001
2667
  data: data,
@@ -2004,7 +2670,7 @@ function MicroscopyPanel(props) {
2004
2670
  onDelete: onMeasurementDeleteHandler
2005
2671
  })));
2006
2672
  }
2007
- const connectedMicroscopyPanel = (0,es/* withTranslation */.CI)(['MicroscopyTable', 'Common'])(MicroscopyPanel);
2673
+ const connectedMicroscopyPanel = (0,es/* withTranslation */.Zh)(['MicroscopyTable', 'Common'])(MicroscopyPanel);
2008
2674
  /* harmony default export */ const MicroscopyPanel_MicroscopyPanel = (connectedMicroscopyPanel);
2009
2675
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/getPanelModule.tsx
2010
2676
 
@@ -2025,7 +2691,7 @@ function getPanelModule({
2025
2691
  const [{
2026
2692
  activeViewportId,
2027
2693
  viewports
2028
- }] = (0,src/* useViewportGrid */.ih)();
2694
+ }] = (0,src/* useViewportGrid */.O_)();
2029
2695
  return /*#__PURE__*/react.createElement(MicroscopyPanel_MicroscopyPanel, {
2030
2696
  viewports: viewports,
2031
2697
  activeViewportId: activeViewportId,
@@ -2182,7 +2848,7 @@ function getCommandsModule({
2182
2848
 
2183
2849
  const {
2184
2850
  utils
2185
- } = core_src/* default */.Ay;
2851
+ } = core_src["default"];
2186
2852
  const SOP_CLASS_UIDS = {
2187
2853
  VL_WHOLE_SLIDE_MICROSCOPY_IMAGE_STORAGE: '1.2.840.10008.5.1.4.1.1.77.1.6'
2188
2854
  };
@@ -2305,11 +2971,14 @@ const DCM_CODE_VALUES = {
2305
2971
  function toArray(item) {
2306
2972
  return Array.isArray(item) ? item : [item];
2307
2973
  }
2308
- ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/loadSR.js
2974
+ // EXTERNAL MODULE: ../../../extensions/dicom-microscopy/src/DicomMicroscopyViewport.tsx + 7 modules
2975
+ var DicomMicroscopyViewport = __webpack_require__(3094);
2976
+ ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/loadSR.ts
2977
+
2309
2978
 
2310
2979
 
2311
2980
 
2312
- const MeasurementReport = dcmjs_es/* default.adapters */.Ay.adapters.DICOMMicroscopyViewer.MeasurementReport;
2981
+ const MeasurementReport = dcmjs_es["default"].adapters.DICOMMicroscopyViewer.MeasurementReport;
2313
2982
 
2314
2983
  // Define as async so that it returns a promise, expected by the ViewportGrid
2315
2984
  async function loadSR(microscopyService, microscopySRDisplaySet, referencedDisplaySet) {
@@ -2346,7 +3015,9 @@ async function loadSR(microscopyService, microscopySRDisplaySet, referencedDispl
2346
3015
  async function _getROIsFromToolState(naturalizedDataset, FrameOfReferenceUID) {
2347
3016
  const toolState = MeasurementReport.generateToolState(naturalizedDataset);
2348
3017
  const tools = Object.getOwnPropertyNames(toolState);
2349
- const DICOMMicroscopyViewer = await __webpack_require__.e(/* import() | dicom-microscopy-viewer */ 525).then(__webpack_require__.t.bind(__webpack_require__, 95226, 23));
3018
+ // Does a dynamic import to prevent webpack from rebuilding the library
3019
+ await import( /* webpackIgnore: true */DicomMicroscopyViewport["default"].getImportPath());
3020
+ const DICOMMicroscopyViewer = window.dicomMicroscopyViewer;
2350
3021
  const measurementGroupContentItems = _getMeasurementGroups(naturalizedDataset);
2351
3022
  const rois = [];
2352
3023
  const labels = [];
@@ -2480,7 +3151,7 @@ function getSourceDisplaySet(allDisplaySets, microscopySRDisplaySet) {
2480
3151
 
2481
3152
  const {
2482
3153
  utils: DicomMicroscopySRSopClassHandler_utils
2483
- } = core_src/* default */.Ay;
3154
+ } = core_src["default"];
2484
3155
  const DicomMicroscopySRSopClassHandler_SOP_CLASS_UIDS = {
2485
3156
  COMPREHENSIVE_3D_SR: '1.2.840.10008.5.1.4.1.1.88.34'
2486
3157
  };
@@ -2575,12 +3246,12 @@ function getDicomMicroscopySRSopClassHandler({
2575
3246
  };
2576
3247
  }
2577
3248
  // EXTERNAL MODULE: ../../../node_modules/react-resize-detector/build/index.esm.js
2578
- var index_esm = __webpack_require__(78668);
3249
+ var index_esm = __webpack_require__(7023);
2579
3250
  // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
2580
- var lodash_debounce = __webpack_require__(14771);
3251
+ var lodash_debounce = __webpack_require__(8324);
2581
3252
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
2582
3253
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/index.tsx
2583
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3254
+ 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); }
2584
3255
 
2585
3256
 
2586
3257
 
@@ -2592,7 +3263,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2592
3263
 
2593
3264
 
2594
3265
  const Component = /*#__PURE__*/react.lazy(() => {
2595
- return Promise.all(/* import() */[__webpack_require__.e(370), __webpack_require__.e(914), __webpack_require__.e(483), __webpack_require__.e(236), __webpack_require__.e(644), __webpack_require__.e(931), __webpack_require__.e(944), __webpack_require__.e(172)]).then(__webpack_require__.bind(__webpack_require__, 66921));
3266
+ return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 3094));
2596
3267
  });
2597
3268
  const MicroscopyViewport = props => {
2598
3269
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -2640,7 +3311,7 @@ const extension = {
2640
3311
  const {
2641
3312
  viewportOptions
2642
3313
  } = props;
2643
- const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.ih)();
3314
+ const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.O_)();
2644
3315
  const {
2645
3316
  activeViewportId
2646
3317
  } = viewportGrid;
@@ -2658,7 +3329,7 @@ const extension = {
2658
3329
  }, 100);
2659
3330
  const {
2660
3331
  ref: resizeRef
2661
- } = (0,index_esm/* useResizeDetector */.u)({
3332
+ } = (0,index_esm/* useResizeDetector */.N)({
2662
3333
  onResize,
2663
3334
  handleHeight: true,
2664
3335
  handleWidth: true