@ohif/app 3.8.0-beta.8 → 3.8.0-beta.81

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 (99) hide show
  1. package/dist/{220.bundle.f7e1c96c94245e70f2be.js → 109.bundle.b4fee2a22b622839baf5.js} +4466 -3715
  2. package/dist/{471.bundle.49c8d281adbae4a2c4df.js → 121.bundle.47f05840a5b3cdf75543.js} +94 -113
  3. package/dist/141.bundle.556b4c1e4cab770417ac.js +8620 -0
  4. package/dist/{687.bundle.9065db35c01823286f08.js → 164.bundle.fadc7c5d634402c73b5f.js} +22 -38
  5. package/dist/17dd54813d5acc10bf8f.wasm +0 -0
  6. package/dist/183.bundle.a3e238998be71c4b2af8.js +30410 -0
  7. package/dist/{506.bundle.5731bb4349e266491225.js → 188.bundle.51dc4b37920f45594393.js} +23 -28
  8. package/dist/{342.bundle.e7c3d500f86fdfcc62b5.js → 206.bundle.fcaa081a0d1f68095c31.js} +1991 -1145
  9. package/dist/20fc4c659b85ccd2a9c0.wasm +0 -0
  10. package/dist/217.bundle.d44bbaa50b6fa563fe15.js +115126 -0
  11. package/dist/{451.bundle.57c21db5d003c75e9d61.js → 295.bundle.5ace95771ced62bdcab8.js} +111 -128
  12. package/dist/{125.bundle.253395f320b72180da63.js → 297.bundle.194d8985ab974839b5b6.js} +7 -8
  13. package/dist/{19.bundle.f77c5787b6d8ac0b638b.js → 325.bundle.fd8e0c18db4708d03a91.js} +477 -373
  14. package/dist/335.bundle.8400aa5a88697a6b9d53.js +2590 -0
  15. package/dist/{202.bundle.d3490836f71e001dd30f.js → 342.bundle.e6d0bba29351b5650a8c.js} +566 -868
  16. package/dist/{776.bundle.a2dedb405a12ffd7699b.js → 41.bundle.0905b258a90a7c6437bb.js} +7453 -3624
  17. package/dist/422.bundle.c6fd037b075dd54f1ba7.js +865 -0
  18. package/dist/{957.bundle.9ea4506963ef8b2d84ba.js → 433.bundle.e0018820758f5a86fa7f.js} +14797 -27561
  19. package/dist/445.bundle.38c6d2af64e41cd7c614.js +7835 -0
  20. package/dist/{126.bundle.6e7111d58bcc937ffd80.js → 448.bundle.5e6da31477887bf53016.js} +356 -430
  21. package/dist/487.bundle.89d973049defb3ba6cb7.js +1876 -0
  22. package/dist/{886.bundle.c8dd3ecc42a4253de278.js → 530.bundle.207b38c15c4c01e4db0e.js} +104 -121
  23. package/dist/{250.bundle.aea3335667054bdefe36.js → 544.bundle.1c1f57118560046649c1.js} +37 -62
  24. package/dist/574.bundle.d648fea691d6709bf2b4.js +2652 -0
  25. package/dist/{181.css → 574.css} +1 -1
  26. package/dist/{410.bundle.15c855b0ff4a1a674fb8.js → 594.bundle.84076375b127b9c7f673.js} +183 -221
  27. package/dist/{221.bundle.aef554202c58483cb34e.js → 633.bundle.acab89baaa06a299d679.js} +365 -553
  28. package/dist/{774.bundle.4b2dc46a35012b898e1a.js → 644.bundle.1e77691d2eeb96a423b0.js} +1852 -8945
  29. package/dist/{663.bundle.d7be28450db14266cdd0.js → 669.bundle.b17e8a621e38d92c653f.js} +310 -265
  30. package/dist/699.bundle.9367d7ef9f7615b2e733.js +772 -0
  31. package/dist/702.bundle.963481fbf871984b646f.js +8426 -0
  32. package/dist/722.bundle.afab1fe6bfcd569130ac.js +1083 -0
  33. package/dist/{359.bundle.45ecb3d28e8c22142606.js → 724.bundle.55f9f49816de931af91a.js} +165 -260
  34. package/dist/{757.bundle.ec8301d8e70d2b990f65.js → 726.bundle.0b3d9277d22fe7e15b89.js} +512 -879
  35. package/dist/{530.bundle.a03b6f942ace3e1baa1e.js → 835.bundle.15aff0b7433bb0dd6d6d.js} +37 -30
  36. package/dist/{822.bundle.82cdc418f8f56da6060b.js → 862.bundle.d32ab08e64806b2e964d.js} +81 -97
  37. package/dist/{236.bundle.4e9924934a747afac132.js → 889.bundle.8ef8b723d0163d5d135c.js} +207 -199
  38. package/dist/{281.bundle.deb7492d143e7768d8bf.js → 905.bundle.8a96e1a75b7cfe5ec093.js} +157 -124
  39. package/dist/{814.bundle.c8c951d20039b63b865a.js → 907.bundle.5c88ed911bed18582da4.js} +16 -30
  40. package/dist/{417.bundle.af0a207c29b109f84159.js → 931.bundle.d270a1fda9a2836c3cc5.js} +26 -26
  41. package/dist/{686.bundle.dccef1f36e4bc79bcc48.js → 939.bundle.9d93b2e47c52338747a2.js} +7 -8
  42. package/dist/94.bundle.f5f2479c214180d05d42.js +778 -0
  43. package/dist/{12.bundle.b5ca13e5363f170ecb3b.js → 961.bundle.f4e52bc76d3044d05372.js} +20 -33
  44. package/dist/app-config.js +1 -0
  45. package/dist/app.bundle.css +16 -13
  46. package/dist/{app.bundle.a978edc59b9d82f2eb22.js → app.bundle.ed937512f7d19d61c411.js} +183396 -87682
  47. package/dist/assets/images/CT-AAA.png +0 -0
  48. package/dist/assets/images/CT-AAA2.png +0 -0
  49. package/dist/assets/images/CT-Air.png +0 -0
  50. package/dist/assets/images/CT-Bone.png +0 -0
  51. package/dist/assets/images/CT-Bones.png +0 -0
  52. package/dist/assets/images/CT-Cardiac.png +0 -0
  53. package/dist/assets/images/CT-Cardiac2.png +0 -0
  54. package/dist/assets/images/CT-Cardiac3.png +0 -0
  55. package/dist/assets/images/CT-Chest-Contrast-Enhanced.png +0 -0
  56. package/dist/assets/images/CT-Chest-Vessels.png +0 -0
  57. package/dist/assets/images/CT-Coronary-Arteries-2.png +0 -0
  58. package/dist/assets/images/CT-Coronary-Arteries-3.png +0 -0
  59. package/dist/assets/images/CT-Coronary-Arteries.png +0 -0
  60. package/dist/assets/images/CT-Cropped-Volume-Bone.png +0 -0
  61. package/dist/assets/images/CT-Fat.png +0 -0
  62. package/dist/assets/images/CT-Liver-Vasculature.png +0 -0
  63. package/dist/assets/images/CT-Lung.png +0 -0
  64. package/dist/assets/images/CT-MIP.png +0 -0
  65. package/dist/assets/images/CT-Muscle.png +0 -0
  66. package/dist/assets/images/CT-Pulmonary-Arteries.png +0 -0
  67. package/dist/assets/images/CT-Soft-Tissue.png +0 -0
  68. package/dist/assets/images/DTI-FA-Brain.png +0 -0
  69. package/dist/assets/images/MR-Angio.png +0 -0
  70. package/dist/assets/images/MR-Default.png +0 -0
  71. package/dist/assets/images/MR-MIP.png +0 -0
  72. package/dist/assets/images/MR-T2-Brain.png +0 -0
  73. package/dist/assets/images/VolumeRendering.png +0 -0
  74. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  75. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  76. package/dist/{dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js → dicom-microscopy-viewer.bundle.d3a56dc9f62df5e11019.js} +3 -3
  77. package/dist/histogram-worker.bundle.829e14ec12c2b41a4323.js +359 -0
  78. package/dist/index.html +1 -1
  79. package/dist/{index.worker.e62ecca63f1a2e124230.worker.js → index.worker.64c896c4316fcd506666.worker.js} +2 -2
  80. package/dist/index.worker.64c896c4316fcd506666.worker.js.map +1 -0
  81. package/dist/polySeg.bundle.f1a6ece1396dc1385155.js +249 -0
  82. package/dist/serve.json +12 -0
  83. package/dist/sw.js +1 -1
  84. package/package.json +26 -22
  85. package/dist/181.bundle.a62b9f0ec692299acb35.js +0 -1527
  86. package/dist/23.bundle.e008ad788170f2ed5569.js +0 -900
  87. package/dist/604.bundle.a51f83e64004bca5f497.js +0 -1848
  88. package/dist/613.bundle.9e7072e5b575354fe51e.js +0 -532
  89. package/dist/743.bundle.489f7df3a089d4d374e1.js +0 -78007
  90. package/dist/75788f12450d4c5ed494.wasm +0 -0
  91. package/dist/775.bundle.2285e7e0e67878948c0d.js +0 -1009
  92. package/dist/788.bundle.207ac23c0dfa70cbe3fb.js +0 -2682
  93. package/dist/82.bundle.d6fdcca0f67540bb226a.js +0 -1049
  94. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
  95. /package/dist/{19.css → 325.css} +0 -0
  96. /package/dist/{776.css → 41.css} +0 -0
  97. /package/dist/{579.css → 481.css} +0 -0
  98. /package/dist/{250.css → 544.css} +0 -0
  99. /package/dist/{221.css → 633.css} +0 -0
@@ -1,27 +1,27 @@
1
1
  "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[19,579],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[325,481],{
3
3
 
4
- /***/ 41832:
4
+ /***/ 219:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
 
8
8
  // EXPORTS
9
9
  __webpack_require__.d(__webpack_exports__, {
10
- Z: () => (/* binding */ src_getContextModule),
11
- I: () => (/* reexport */ useTrackedMeasurements)
10
+ A: () => (/* binding */ src_getContextModule),
11
+ B: () => (/* reexport */ useTrackedMeasurements)
12
12
  });
13
13
 
14
14
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
15
- var react = __webpack_require__(43001);
15
+ var react = __webpack_require__(41766);
16
16
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
17
- var prop_types = __webpack_require__(3827);
17
+ var prop_types = __webpack_require__(11374);
18
18
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
19
19
  // EXTERNAL MODULE: ../../../node_modules/xstate/es/index.js + 22 modules
20
- var es = __webpack_require__(261);
20
+ var es = __webpack_require__(57593);
21
21
  // EXTERNAL MODULE: ../../../node_modules/@xstate/react/es/index.js + 8 modules
22
- var react_es = __webpack_require__(44530);
23
- // EXTERNAL MODULE: ../../ui/src/index.js + 486 modules
24
- var src = __webpack_require__(22582);
22
+ var react_es = __webpack_require__(6835);
23
+ // EXTERNAL MODULE: ../../ui/src/index.js + 785 modules
24
+ var src = __webpack_require__(5085);
25
25
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js
26
26
 
27
27
  const RESPONSE = {
@@ -53,10 +53,27 @@ const machineConfiguration = {
53
53
  off: {
54
54
  type: 'final'
55
55
  },
56
+ labellingOnly: {
57
+ on: {
58
+ TRACK_SERIES: [{
59
+ target: 'promptLabelAnnotation',
60
+ actions: ['setPreviousState']
61
+ }, {
62
+ target: 'off'
63
+ }]
64
+ }
65
+ },
56
66
  idle: {
57
67
  entry: 'clearContext',
58
68
  on: {
59
- TRACK_SERIES: 'promptBeginTracking',
69
+ TRACK_SERIES: [{
70
+ target: 'promptLabelAnnotation',
71
+ cond: 'isLabelOnMeasure',
72
+ actions: ['setPreviousState']
73
+ }, {
74
+ target: 'promptBeginTracking',
75
+ actions: ['setPreviousState']
76
+ }],
60
77
  // Unused? We may only do PROMPT_HYDRATE_SR now?
61
78
  SET_TRACKED_SERIES: [{
62
79
  target: 'tracking',
@@ -69,7 +86,7 @@ const machineConfiguration = {
69
86
  RESTORE_PROMPT_HYDRATE_SR: 'promptHydrateStructuredReport',
70
87
  HYDRATE_SR: 'hydrateStructuredReport',
71
88
  UPDATE_ACTIVE_VIEWPORT_ID: {
72
- actions: (0,es/* assign */.f0)({
89
+ actions: (0,es/* assign */.kp)({
73
90
  activeViewportId: (_, event) => event.activeViewportId
74
91
  })
75
92
  }
@@ -82,6 +99,9 @@ const machineConfiguration = {
82
99
  target: 'tracking',
83
100
  actions: ['setTrackedStudyAndSeries', 'setIsDirty'],
84
101
  cond: 'shouldSetStudyAndSeries'
102
+ }, {
103
+ target: 'labellingOnly',
104
+ cond: 'isLabelOnMeasureAndShouldKillMachine'
85
105
  }, {
86
106
  target: 'off',
87
107
  cond: 'shouldKillMachine'
@@ -96,6 +116,10 @@ const machineConfiguration = {
96
116
  tracking: {
97
117
  on: {
98
118
  TRACK_SERIES: [{
119
+ target: 'promptLabelAnnotation',
120
+ cond: 'isLabelOnMeasure',
121
+ actions: ['setPreviousState']
122
+ }, {
99
123
  target: 'promptTrackNewStudy',
100
124
  cond: 'isNewStudy'
101
125
  }, {
@@ -224,6 +248,29 @@ const machineConfiguration = {
224
248
  target: 'idle'
225
249
  }
226
250
  }
251
+ },
252
+ promptLabelAnnotation: {
253
+ invoke: {
254
+ src: 'promptLabelAnnotation',
255
+ onDone: [{
256
+ target: 'labellingOnly',
257
+ cond: 'wasLabellingOnly'
258
+ }, {
259
+ target: 'promptBeginTracking',
260
+ cond: 'wasIdle'
261
+ }, {
262
+ target: 'promptTrackNewStudy',
263
+ cond: 'wasTrackingAndIsNewStudy'
264
+ }, {
265
+ target: 'promptTrackNewSeries',
266
+ cond: 'wasTrackingAndIsNewSeries'
267
+ }, {
268
+ target: 'tracking',
269
+ cond: 'wasTracking'
270
+ }, {
271
+ target: 'off'
272
+ }]
273
+ }
227
274
  }
228
275
  },
229
276
  strict: true
@@ -253,7 +300,7 @@ const defaultOptions = {
253
300
  showStructuredReportDisplaySetInActiveViewport: (ctx, evt) => {
254
301
  console.warn('showStructuredReportDisplaySetInActiveViewport: not implemented');
255
302
  },
256
- clearContext: (0,es/* assign */.f0)({
303
+ clearContext: (0,es/* assign */.kp)({
257
304
  trackedStudy: '',
258
305
  trackedSeries: [],
259
306
  ignoredSeries: [],
@@ -262,7 +309,7 @@ const defaultOptions = {
262
309
  prevIgnoredSeries: []
263
310
  }),
264
311
  // Promise resolves w/ `evt.data.*`
265
- setTrackedStudyAndSeries: (0,es/* assign */.f0)((ctx, evt) => ({
312
+ setTrackedStudyAndSeries: (0,es/* assign */.kp)((ctx, evt) => ({
266
313
  prevTrackedStudy: ctx.trackedStudy,
267
314
  prevTrackedSeries: ctx.trackedSeries.slice(),
268
315
  prevIgnoredSeries: ctx.ignoredSeries.slice(),
@@ -271,7 +318,7 @@ const defaultOptions = {
271
318
  trackedSeries: [evt.data.SeriesInstanceUID],
272
319
  ignoredSeries: []
273
320
  })),
274
- setTrackedStudyAndMultipleSeries: (0,es/* assign */.f0)((ctx, evt) => {
321
+ setTrackedStudyAndMultipleSeries: (0,es/* assign */.kp)((ctx, evt) => {
275
322
  const studyInstanceUID = evt.StudyInstanceUID || evt.data.StudyInstanceUID;
276
323
  const seriesInstanceUIDs = evt.SeriesInstanceUIDs || evt.data.SeriesInstanceUIDs;
277
324
  return {
@@ -284,27 +331,32 @@ const defaultOptions = {
284
331
  ignoredSeries: []
285
332
  };
286
333
  }),
287
- setIsDirtyToClean: (0,es/* assign */.f0)((ctx, evt) => ({
334
+ setIsDirtyToClean: (0,es/* assign */.kp)((ctx, evt) => ({
288
335
  isDirty: false
289
336
  })),
290
- setIsDirty: (0,es/* assign */.f0)((ctx, evt) => ({
337
+ setIsDirty: (0,es/* assign */.kp)((ctx, evt) => ({
291
338
  isDirty: true
292
339
  })),
293
- ignoreSeries: (0,es/* assign */.f0)((ctx, evt) => ({
340
+ ignoreSeries: (0,es/* assign */.kp)((ctx, evt) => ({
294
341
  prevIgnoredSeries: [...ctx.ignoredSeries],
295
342
  ignoredSeries: [...ctx.ignoredSeries, evt.data.SeriesInstanceUID]
296
343
  })),
297
- ignoreHydrationForSRSeries: (0,es/* assign */.f0)((ctx, evt) => ({
344
+ ignoreHydrationForSRSeries: (0,es/* assign */.kp)((ctx, evt) => ({
298
345
  ignoredSRSeriesForHydration: [...ctx.ignoredSRSeriesForHydration, evt.data.srSeriesInstanceUID]
299
346
  })),
300
- addTrackedSeries: (0,es/* assign */.f0)((ctx, evt) => ({
347
+ addTrackedSeries: (0,es/* assign */.kp)((ctx, evt) => ({
301
348
  prevTrackedSeries: [...ctx.trackedSeries],
302
349
  trackedSeries: [...ctx.trackedSeries, evt.data.SeriesInstanceUID]
303
350
  })),
304
- removeTrackedSeries: (0,es/* assign */.f0)((ctx, evt) => ({
351
+ removeTrackedSeries: (0,es/* assign */.kp)((ctx, evt) => ({
305
352
  prevTrackedSeries: ctx.trackedSeries.slice().filter(ser => ser !== evt.SeriesInstanceUID),
306
353
  trackedSeries: ctx.trackedSeries.slice().filter(ser => ser !== evt.SeriesInstanceUID)
307
- }))
354
+ })),
355
+ setPreviousState: (0,es/* assign */.kp)((ctx, evt, meta) => {
356
+ return {
357
+ prevState: meta.state.value
358
+ };
359
+ })
308
360
  },
309
361
  guards: {
310
362
  // We set dirty any time we performan an action that:
@@ -330,6 +382,21 @@ const defaultOptions = {
330
382
  evt.SeriesInstanceUID === undefined || ctx.trackedSeries.includes(evt.SeriesInstanceUID)
331
383
  );
332
384
  },
385
+ wasLabellingOnly: (ctx, evt, condMeta) => {
386
+ return ctx.prevState === 'labellingOnly';
387
+ },
388
+ wasIdle: (ctx, evt, condMeta) => {
389
+ return ctx.prevState === 'idle';
390
+ },
391
+ wasTracking: (ctx, evt, condMeta) => {
392
+ return ctx.prevState === 'tracking';
393
+ },
394
+ wasTrackingAndIsNewStudy: (ctx, evt, condMeta) => {
395
+ return ctx.prevState === 'tracking' && !ctx.ignoredSeries.includes(evt.data.SeriesInstanceUID) && ctx.trackedStudy !== evt.data.StudyInstanceUID;
396
+ },
397
+ wasTrackingAndIsNewSeries: (ctx, evt, condMeta) => {
398
+ return ctx.prevState === 'tracking' && !ctx.ignoredSeries.includes(evt.data.SeriesInstanceUID) && !ctx.trackedSeries.includes(evt.data.SeriesInstanceUID);
399
+ },
333
400
  shouldKillMachine: (ctx, evt) => evt.data && evt.data.userResponse === RESPONSE.NO_NEVER,
334
401
  shouldAddSeries: (ctx, evt) => evt.data && evt.data.userResponse === RESPONSE.ADD_SERIES,
335
402
  shouldSetStudyAndSeries: (ctx, evt) => evt.data && evt.data.userResponse === RESPONSE.SET_STUDY_AND_SERIES,
@@ -350,8 +417,11 @@ const defaultOptions = {
350
417
  }
351
418
  };
352
419
 
420
+ // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
421
+ var i18next = __webpack_require__(92344);
353
422
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptBeginTracking.js
354
423
 
424
+
355
425
  const promptBeginTracking_RESPONSE = {
356
426
  NO_NEVER: -1,
357
427
  CANCEL: 0,
@@ -359,19 +429,20 @@ const promptBeginTracking_RESPONSE = {
359
429
  ADD_SERIES: 2,
360
430
  SET_STUDY_AND_SERIES: 3
361
431
  };
362
- function promptBeginTracking(_ref, ctx, evt) {
363
- let {
364
- servicesManager,
365
- extensionManager
366
- } = _ref;
432
+ function promptBeginTracking({
433
+ servicesManager,
434
+ extensionManager
435
+ }, ctx, evt) {
367
436
  const {
368
437
  uiViewportDialogService
369
438
  } = servicesManager.services;
439
+ // When the state change happens after a promise, the state machine sends the retult in evt.data;
440
+ // In case of direct transition to the state, the state machine sends the data in evt;
370
441
  const {
371
442
  viewportId,
372
443
  StudyInstanceUID,
373
444
  SeriesInstanceUID
374
- } = evt;
445
+ } = evt.data || evt;
375
446
  return new Promise(async function (resolve, reject) {
376
447
  let promptResult = await _askTrackMeasurements(uiViewportDialogService, viewportId);
377
448
  resolve({
@@ -384,21 +455,21 @@ function promptBeginTracking(_ref, ctx, evt) {
384
455
  }
385
456
  function _askTrackMeasurements(uiViewportDialogService, viewportId) {
386
457
  return new Promise(function (resolve, reject) {
387
- const message = 'Track measurements for this series?';
458
+ const message = i18next/* default */.A.t('MeasurementTable:Track measurements for this series?');
388
459
  const actions = [{
389
460
  id: 'prompt-begin-tracking-cancel',
390
- type: src/* ButtonEnums.type */.LZ.dt.secondary,
391
- text: 'No',
461
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
462
+ text: i18next/* default */.A.t('Common:No'),
392
463
  value: promptBeginTracking_RESPONSE.CANCEL
393
464
  }, {
394
465
  id: 'prompt-begin-tracking-no-do-not-ask-again',
395
- type: src/* ButtonEnums.type */.LZ.dt.secondary,
396
- text: 'No, do not ask again',
466
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
467
+ text: i18next/* default */.A.t('MeasurementTable:No, do not ask again'),
397
468
  value: promptBeginTracking_RESPONSE.NO_NEVER
398
469
  }, {
399
470
  id: 'prompt-begin-tracking-yes',
400
- type: src/* ButtonEnums.type */.LZ.dt.primary,
401
- text: 'Yes',
471
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
472
+ text: i18next/* default */.A.t('Common:Yes'),
402
473
  value: promptBeginTracking_RESPONSE.SET_STUDY_AND_SERIES
403
474
  }];
404
475
  const onSubmit = result => {
@@ -415,6 +486,12 @@ function _askTrackMeasurements(uiViewportDialogService, viewportId) {
415
486
  onOutsideClick: () => {
416
487
  uiViewportDialogService.hide();
417
488
  resolve(promptBeginTracking_RESPONSE.CANCEL);
489
+ },
490
+ onKeyPress: event => {
491
+ if (event.key === 'Enter') {
492
+ const action = actions.find(action => action.id === 'prompt-begin-tracking-yes');
493
+ onSubmit(action.value);
494
+ }
418
495
  }
419
496
  });
420
497
  });
@@ -430,19 +507,20 @@ const promptTrackNewSeries_RESPONSE = {
430
507
  SET_STUDY_AND_SERIES: 3,
431
508
  NO_NOT_FOR_SERIES: 4
432
509
  };
433
- function promptTrackNewSeries(_ref, ctx, evt) {
434
- let {
435
- servicesManager,
436
- extensionManager
437
- } = _ref;
510
+ function promptTrackNewSeries({
511
+ servicesManager,
512
+ extensionManager
513
+ }, ctx, evt) {
438
514
  const {
439
515
  UIViewportDialogService
440
516
  } = servicesManager.services;
517
+ // When the state change happens after a promise, the state machine sends the retult in evt.data;
518
+ // In case of direct transition to the state, the state machine sends the data in evt;
441
519
  const {
442
520
  viewportId,
443
521
  StudyInstanceUID,
444
522
  SeriesInstanceUID
445
- } = evt;
523
+ } = evt.data || evt;
446
524
  return new Promise(async function (resolve, reject) {
447
525
  let promptResult = await _askShouldAddMeasurements(UIViewportDialogService, viewportId);
448
526
  if (promptResult === promptTrackNewSeries_RESPONSE.CREATE_REPORT) {
@@ -461,15 +539,15 @@ function _askShouldAddMeasurements(uiViewportDialogService, viewportId) {
461
539
  return new Promise(function (resolve, reject) {
462
540
  const message = 'Do you want to add this measurement to the existing report?';
463
541
  const actions = [{
464
- type: src/* ButtonEnums.type */.LZ.dt.secondary,
542
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
465
543
  text: 'Cancel',
466
544
  value: promptTrackNewSeries_RESPONSE.CANCEL
467
545
  }, {
468
- type: src/* ButtonEnums.type */.LZ.dt.primary,
546
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
469
547
  text: 'Create new report',
470
548
  value: promptTrackNewSeries_RESPONSE.CREATE_REPORT
471
549
  }, {
472
- type: src/* ButtonEnums.type */.LZ.dt.primary,
550
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
473
551
  text: 'Add to existing report',
474
552
  value: promptTrackNewSeries_RESPONSE.ADD_SERIES
475
553
  }];
@@ -525,6 +603,7 @@ function _askSaveDiscardOrCancel(UIViewportDialogService, viewportId) {
525
603
  }
526
604
  /* harmony default export */ const TrackedMeasurementsContext_promptTrackNewSeries = (promptTrackNewSeries);
527
605
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js
606
+
528
607
  const promptTrackNewStudy_RESPONSE = {
529
608
  NO_NEVER: -1,
530
609
  CANCEL: 0,
@@ -533,19 +612,20 @@ const promptTrackNewStudy_RESPONSE = {
533
612
  SET_STUDY_AND_SERIES: 3,
534
613
  NO_NOT_FOR_SERIES: 4
535
614
  };
536
- function promptTrackNewStudy(_ref, ctx, evt) {
537
- let {
538
- servicesManager,
539
- extensionManager
540
- } = _ref;
615
+ function promptTrackNewStudy({
616
+ servicesManager,
617
+ extensionManager
618
+ }, ctx, evt) {
541
619
  const {
542
620
  UIViewportDialogService
543
621
  } = servicesManager.services;
622
+ // When the state change happens after a promise, the state machine sends the retult in evt.data;
623
+ // In case of direct transition to the state, the state machine sends the data in evt;
544
624
  const {
545
625
  viewportId,
546
626
  StudyInstanceUID,
547
627
  SeriesInstanceUID
548
- } = evt;
628
+ } = evt.data || evt;
549
629
  return new Promise(async function (resolve, reject) {
550
630
  let promptResult = await promptTrackNewStudy_askTrackMeasurements(UIViewportDialogService, viewportId);
551
631
  if (promptResult === promptTrackNewStudy_RESPONSE.SET_STUDY_AND_SERIES) {
@@ -562,18 +642,18 @@ function promptTrackNewStudy(_ref, ctx, evt) {
562
642
  }
563
643
  function promptTrackNewStudy_askTrackMeasurements(UIViewportDialogService, viewportId) {
564
644
  return new Promise(function (resolve, reject) {
565
- const message = 'Track measurements for this series?';
645
+ const message = i18next/* default */.A.t('MeasurementTable:Track measurements for this series?');
566
646
  const actions = [{
567
647
  type: 'cancel',
568
- text: 'No',
648
+ text: i18next/* default */.A.t('MeasurementTable:No'),
569
649
  value: promptTrackNewStudy_RESPONSE.CANCEL
570
650
  }, {
571
651
  type: 'secondary',
572
- text: 'No, do not ask again for this series',
652
+ text: i18next/* default */.A.t('MeasurementTable:No, do not ask again'),
573
653
  value: promptTrackNewStudy_RESPONSE.NO_NOT_FOR_SERIES
574
654
  }, {
575
655
  type: 'primary',
576
- text: 'Yes',
656
+ text: i18next/* default */.A.t('MeasurementTable:Yes'),
577
657
  value: promptTrackNewStudy_RESPONSE.SET_STUDY_AND_SERIES
578
658
  }];
579
659
  const onSubmit = result => {
@@ -589,6 +669,12 @@ function promptTrackNewStudy_askTrackMeasurements(UIViewportDialogService, viewp
589
669
  onOutsideClick: () => {
590
670
  UIViewportDialogService.hide();
591
671
  resolve(promptTrackNewStudy_RESPONSE.CANCEL);
672
+ },
673
+ onKeyPress: event => {
674
+ if (event.key === 'Enter') {
675
+ const action = actions.find(action => action.value === promptTrackNewStudy_RESPONSE.SET_STUDY_AND_SERIES);
676
+ onSubmit(action.value);
677
+ }
592
678
  }
593
679
  });
594
680
  });
@@ -627,8 +713,8 @@ function promptTrackNewStudy_askSaveDiscardOrCancel(UIViewportDialogService, vie
627
713
  });
628
714
  }
629
715
  /* harmony default export */ const TrackedMeasurementsContext_promptTrackNewStudy = (promptTrackNewStudy);
630
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 76 modules
631
- var default_src = __webpack_require__(56342);
716
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 85 modules
717
+ var default_src = __webpack_require__(7206);
632
718
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/_shared/getNextSRSeriesNumber.js
633
719
  const MIN_SR_SERIES_NUMBER = 4700;
634
720
  function getNextSRSeriesNumber(displaySetService) {
@@ -652,12 +738,11 @@ const PROMPT_RESPONSES_RESPONSE = {
652
738
 
653
739
 
654
740
 
655
- function promptSaveReport(_ref, ctx, evt) {
656
- let {
657
- servicesManager,
658
- commandsManager,
659
- extensionManager
660
- } = _ref;
741
+ function promptSaveReport({
742
+ servicesManager,
743
+ commandsManager,
744
+ extensionManager
745
+ }, ctx, evt) {
661
746
  const {
662
747
  uiDialogService,
663
748
  measurementService,
@@ -717,8 +802,8 @@ function promptSaveReport(_ref, ctx, evt) {
717
802
  });
718
803
  }
719
804
  /* harmony default export */ const TrackedMeasurementsContext_promptSaveReport = (promptSaveReport);
720
- // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/index.tsx + 15 modules
721
- var cornerstone_dicom_sr_src = __webpack_require__(42170);
805
+ // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/index.tsx + 14 modules
806
+ var cornerstone_dicom_sr_src = __webpack_require__(61669);
722
807
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js
723
808
 
724
809
 
@@ -731,12 +816,11 @@ const promptHydrateStructuredReport_RESPONSE = {
731
816
  NO_NOT_FOR_SERIES: 4,
732
817
  HYDRATE_REPORT: 5
733
818
  };
734
- function promptHydrateStructuredReport(_ref, ctx, evt) {
735
- let {
736
- servicesManager,
737
- extensionManager,
738
- appConfig
739
- } = _ref;
819
+ function promptHydrateStructuredReport({
820
+ servicesManager,
821
+ extensionManager,
822
+ appConfig
823
+ }, ctx, evt) {
740
824
  const {
741
825
  uiViewportDialogService,
742
826
  displaySetService
@@ -775,11 +859,11 @@ function promptHydrateStructuredReport_askTrackMeasurements(uiViewportDialogServ
775
859
  return new Promise(function (resolve, reject) {
776
860
  const message = 'Do you want to continue tracking measurements for this study?';
777
861
  const actions = [{
778
- type: src/* ButtonEnums.type */.LZ.dt.secondary,
862
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
779
863
  text: 'No',
780
864
  value: promptHydrateStructuredReport_RESPONSE.CANCEL
781
865
  }, {
782
- type: src/* ButtonEnums.type */.LZ.dt.primary,
866
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
783
867
  text: 'Yes',
784
868
  value: promptHydrateStructuredReport_RESPONSE.HYDRATE_REPORT
785
869
  }];
@@ -796,6 +880,12 @@ function promptHydrateStructuredReport_askTrackMeasurements(uiViewportDialogServ
796
880
  onOutsideClick: () => {
797
881
  uiViewportDialogService.hide();
798
882
  resolve(promptHydrateStructuredReport_RESPONSE.CANCEL);
883
+ },
884
+ onKeyPress: event => {
885
+ if (event.key === 'Enter') {
886
+ const action = actions.find(action => action.value === promptHydrateStructuredReport_RESPONSE.HYDRATE_REPORT);
887
+ onSubmit(action.value);
888
+ }
799
889
  }
800
890
  });
801
891
  });
@@ -803,11 +893,11 @@ function promptHydrateStructuredReport_askTrackMeasurements(uiViewportDialogServ
803
893
  /* harmony default export */ const TrackedMeasurementsContext_promptHydrateStructuredReport = (promptHydrateStructuredReport);
804
894
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/hydrateStructuredReport.tsx
805
895
 
806
- function hydrateStructuredReport(_ref, ctx, evt) {
807
- let {
808
- servicesManager,
809
- extensionManager
810
- } = _ref;
896
+ function hydrateStructuredReport({
897
+ servicesManager,
898
+ extensionManager,
899
+ appConfig
900
+ }, ctx, evt) {
811
901
  const {
812
902
  displaySetService
813
903
  } = servicesManager.services;
@@ -819,7 +909,8 @@ function hydrateStructuredReport(_ref, ctx, evt) {
819
909
  return new Promise((resolve, reject) => {
820
910
  const hydrationResult = (0,cornerstone_dicom_sr_src.hydrateStructuredReport)({
821
911
  servicesManager,
822
- extensionManager
912
+ extensionManager,
913
+ appConfig
823
914
  }, displaySetInstanceUID);
824
915
  const StudyInstanceUID = hydrationResult.StudyInstanceUID;
825
916
  const SeriesInstanceUIDs = hydrationResult.SeriesInstanceUIDs;
@@ -834,7 +925,41 @@ function hydrateStructuredReport(_ref, ctx, evt) {
834
925
  }
835
926
  /* harmony default export */ const TrackedMeasurementsContext_hydrateStructuredReport = (hydrateStructuredReport);
836
927
  // EXTERNAL MODULE: ./state/index.js + 1 modules
837
- var state = __webpack_require__(62657);
928
+ var state = __webpack_require__(15575);
929
+ ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptLabelAnnotation.js
930
+ function promptLabelAnnotation({
931
+ servicesManager,
932
+ extensionManager
933
+ }, ctx, evt) {
934
+ const {
935
+ measurementService,
936
+ customizationService
937
+ } = servicesManager.services;
938
+ const {
939
+ viewportId,
940
+ StudyInstanceUID,
941
+ SeriesInstanceUID,
942
+ measurementId
943
+ } = evt;
944
+ const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
945
+ const {
946
+ showLabelAnnotationPopup
947
+ } = utilityModule.exports;
948
+ return new Promise(async function (resolve) {
949
+ const labelConfig = customizationService.get('measurementLabels');
950
+ const measurement = measurementService.getMeasurement(measurementId);
951
+ const value = await showLabelAnnotationPopup(measurement, servicesManager.services.uiDialogService, labelConfig);
952
+ measurementService.update(measurementId, {
953
+ ...value
954
+ }, true);
955
+ resolve({
956
+ StudyInstanceUID,
957
+ SeriesInstanceUID,
958
+ viewportId
959
+ });
960
+ });
961
+ }
962
+ /* harmony default export */ const TrackedMeasurementsContext_promptLabelAnnotation = (promptLabelAnnotation);
838
963
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx
839
964
 
840
965
 
@@ -849,6 +974,7 @@ var state = __webpack_require__(62657);
849
974
 
850
975
 
851
976
 
977
+
852
978
  const TrackedMeasurementsContext = /*#__PURE__*/react.createContext();
853
979
  TrackedMeasurementsContext.displayName = 'TrackedMeasurementsContext';
854
980
  const useTrackedMeasurements = () => (0,react.useContext)(TrackedMeasurementsContext);
@@ -858,26 +984,26 @@ const SR_SOPCLASSHANDLERID = '@ohif/extension-cornerstone-dicom-sr.sopClassHandl
858
984
  *
859
985
  * @param {*} param0
860
986
  */
861
- function TrackedMeasurementsContextProvider(_ref, // Bound by consumer
862
- _ref2 // Component props
987
+ function TrackedMeasurementsContextProvider({
988
+ servicesManager,
989
+ commandsManager,
990
+ extensionManager
991
+ },
992
+ // Bound by consumer
993
+ {
994
+ children
995
+ } // Component props
863
996
  ) {
864
- let {
865
- servicesManager,
866
- commandsManager,
867
- extensionManager
868
- } = _ref;
869
- let {
870
- children
871
- } = _ref2;
872
- const [appConfig] = (0,state/* useAppConfig */.M)();
873
- const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.O_)();
997
+ const [appConfig] = (0,state/* useAppConfig */.r)();
998
+ const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.ih)();
874
999
  const {
875
1000
  activeViewportId,
876
1001
  viewports
877
1002
  } = viewportGrid;
878
1003
  const {
879
1004
  measurementService,
880
- displaySetService
1005
+ displaySetService,
1006
+ customizationService
881
1007
  } = servicesManager.services;
882
1008
  const machineOptions = Object.assign({}, defaultOptions);
883
1009
  machineOptions.actions = Object.assign({}, machineOptions.actions, {
@@ -974,8 +1100,22 @@ _ref2 // Component props
974
1100
  servicesManager,
975
1101
  extensionManager,
976
1102
  appConfig
1103
+ }),
1104
+ promptLabelAnnotation: TrackedMeasurementsContext_promptLabelAnnotation.bind(null, {
1105
+ servicesManager,
1106
+ extensionManager
977
1107
  })
978
1108
  });
1109
+ machineOptions.guards = Object.assign({}, machineOptions.guards, {
1110
+ isLabelOnMeasure: (ctx, evt, condMeta) => {
1111
+ const labelConfig = customizationService.get('measurementLabels');
1112
+ return labelConfig?.labelOnMeasure;
1113
+ },
1114
+ isLabelOnMeasureAndShouldKillMachine: (ctx, evt, condMeta) => {
1115
+ const labelConfig = customizationService.get('measurementLabels');
1116
+ return evt.data && evt.data.userResponse === RESPONSE.NO_NEVER && labelConfig?.labelOnMeasure;
1117
+ }
1118
+ });
979
1119
 
980
1120
  // TODO: IMPROVE
981
1121
  // - Add measurement_updated to cornerstone; debounced? (ext side, or consumption?)
@@ -986,8 +1126,8 @@ _ref2 // Component props
986
1126
  // - Fix viewport border resize
987
1127
  // - created/destroyed hooks for extensions (cornerstone measurement subscriptions in it's `init`)
988
1128
 
989
- const measurementTrackingMachine = (0,es/* Machine */.J)(machineConfiguration, machineOptions);
990
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,react_es/* useMachine */.eO)(measurementTrackingMachine);
1129
+ const measurementTrackingMachine = (0,es/* Machine */.u5)(machineConfiguration, machineOptions);
1130
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,react_es/* useMachine */.zl)(measurementTrackingMachine);
991
1131
  (0,react.useEffect)(() => {
992
1132
  // Update the state machine with the active viewport ID
993
1133
  sendTrackedMeasurementsEvent('UPDATE_ACTIVE_VIEWPORT_ID', {
@@ -997,51 +1137,54 @@ _ref2 // Component props
997
1137
 
998
1138
  // ~~ Listen for changes to ViewportGrid for potential SRs hung in panes when idle
999
1139
  (0,react.useEffect)(() => {
1000
- if (viewports.size > 0) {
1001
- const activeViewport = viewports.get(activeViewportId);
1002
- if (!activeViewport || !activeViewport?.displaySetInstanceUIDs?.length) {
1003
- return;
1004
- }
1140
+ const triggerPromptHydrateFlow = async () => {
1141
+ if (viewports.size > 0) {
1142
+ const activeViewport = viewports.get(activeViewportId);
1143
+ if (!activeViewport || !activeViewport?.displaySetInstanceUIDs?.length) {
1144
+ return;
1145
+ }
1005
1146
 
1006
- // Todo: Getting the first displaySetInstanceUID is wrong, but we don't have
1007
- // tracking fusion viewports yet. This should change when we do.
1008
- const {
1009
- displaySetService
1010
- } = servicesManager.services;
1011
- const displaySet = displaySetService.getDisplaySetByUID(activeViewport.displaySetInstanceUIDs[0]);
1012
- if (!displaySet) {
1013
- return;
1014
- }
1147
+ // Todo: Getting the first displaySetInstanceUID is wrong, but we don't have
1148
+ // tracking fusion viewports yet. This should change when we do.
1149
+ const {
1150
+ displaySetService
1151
+ } = servicesManager.services;
1152
+ const displaySet = displaySetService.getDisplaySetByUID(activeViewport.displaySetInstanceUIDs[0]);
1153
+ if (!displaySet) {
1154
+ return;
1155
+ }
1015
1156
 
1016
- // If this is an SR produced by our SR SOPClassHandler,
1017
- // and it hasn't been loaded yet, do that now so we
1018
- // can check if it can be rehydrated or not.
1019
- //
1020
- // Note: This happens:
1021
- // - If the viewport is not currently an OHIFCornerstoneSRViewport
1022
- // - If the displaySet has never been hung
1023
- //
1024
- // Otherwise, the displaySet will be loaded by the useEffect handler
1025
- // listening to displaySet changes inside OHIFCornerstoneSRViewport.
1026
- // The issue here is that this handler in TrackedMeasurementsContext
1027
- // ends up occurring before the Viewport is created, so the displaySet
1028
- // is not loaded yet, and isRehydratable is undefined unless we call load().
1029
- if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && !displaySet.isLoaded && displaySet.load) {
1030
- displaySet.load();
1031
- }
1157
+ // If this is an SR produced by our SR SOPClassHandler,
1158
+ // and it hasn't been loaded yet, do that now so we
1159
+ // can check if it can be rehydrated or not.
1160
+ //
1161
+ // Note: This happens:
1162
+ // - If the viewport is not currently an OHIFCornerstoneSRViewport
1163
+ // - If the displaySet has never been hung
1164
+ //
1165
+ // Otherwise, the displaySet will be loaded by the useEffect handler
1166
+ // listening to displaySet changes inside OHIFCornerstoneSRViewport.
1167
+ // The issue here is that this handler in TrackedMeasurementsContext
1168
+ // ends up occurring before the Viewport is created, so the displaySet
1169
+ // is not loaded yet, and isRehydratable is undefined unless we call load().
1170
+ if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && !displaySet.isLoaded && displaySet.load) {
1171
+ await displaySet.load();
1172
+ }
1032
1173
 
1033
- // Magic string
1034
- // load function added by our sopClassHandler module
1035
- if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && displaySet.isRehydratable === true) {
1036
- console.log('sending event...', trackedMeasurements);
1037
- sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', {
1038
- displaySetInstanceUID: displaySet.displaySetInstanceUID,
1039
- SeriesInstanceUID: displaySet.SeriesInstanceUID,
1040
- viewportId: activeViewportId
1041
- });
1174
+ // Magic string
1175
+ // load function added by our sopClassHandler module
1176
+ if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && displaySet.isRehydratable === true) {
1177
+ console.log('sending event...', trackedMeasurements);
1178
+ sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', {
1179
+ displaySetInstanceUID: displaySet.displaySetInstanceUID,
1180
+ SeriesInstanceUID: displaySet.SeriesInstanceUID,
1181
+ viewportId: activeViewportId
1182
+ });
1183
+ }
1042
1184
  }
1043
- }
1044
- }, [activeViewportId, sendTrackedMeasurementsEvent, servicesManager.services, viewports]);
1185
+ };
1186
+ triggerPromptHydrateFlow();
1187
+ }, [trackedMeasurements, activeViewportId, sendTrackedMeasurementsEvent, servicesManager.services, viewports]);
1045
1188
  return /*#__PURE__*/react.createElement(TrackedMeasurementsContext.Provider, {
1046
1189
  value: [trackedMeasurements, sendTrackedMeasurementsEvent]
1047
1190
  }, children);
@@ -1060,12 +1203,11 @@ TrackedMeasurementsContextProvider.propTypes = {
1060
1203
 
1061
1204
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/getContextModule.tsx
1062
1205
 
1063
- function getContextModule(_ref) {
1064
- let {
1065
- servicesManager,
1066
- extensionManager,
1067
- commandsManager
1068
- } = _ref;
1206
+ function getContextModule({
1207
+ servicesManager,
1208
+ extensionManager,
1209
+ commandsManager
1210
+ }) {
1069
1211
  const BoundTrackedMeasurementsContextProvider = TrackedMeasurementsContextProvider.bind(null, {
1070
1212
  servicesManager,
1071
1213
  extensionManager,
@@ -1082,7 +1224,7 @@ function getContextModule(_ref) {
1082
1224
 
1083
1225
  /***/ }),
1084
1226
 
1085
- /***/ 28030:
1227
+ /***/ 84284:
1086
1228
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1087
1229
 
1088
1230
  // ESM COMPAT FLAG
@@ -1093,21 +1235,21 @@ __webpack_require__.d(__webpack_exports__, {
1093
1235
  "default": () => (/* binding */ measurement_tracking_src)
1094
1236
  });
1095
1237
 
1096
- // EXTERNAL MODULE: ../../../extensions/measurement-tracking/src/getContextModule.tsx + 12 modules
1097
- var getContextModule = __webpack_require__(41832);
1238
+ // EXTERNAL MODULE: ../../../extensions/measurement-tracking/src/getContextModule.tsx + 13 modules
1239
+ var getContextModule = __webpack_require__(219);
1098
1240
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
1099
- var react = __webpack_require__(43001);
1241
+ var react = __webpack_require__(41766);
1100
1242
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
1101
- var prop_types = __webpack_require__(3827);
1243
+ var prop_types = __webpack_require__(11374);
1102
1244
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
1103
1245
  // EXTERNAL MODULE: ../node_modules/react-router-dom/dist/index.js
1104
- var dist = __webpack_require__(62474);
1246
+ var dist = __webpack_require__(37396);
1105
1247
  // EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
1106
- var es = __webpack_require__(69190);
1107
- // EXTERNAL MODULE: ../../core/src/index.ts + 65 modules
1108
- var src = __webpack_require__(71771);
1109
- // EXTERNAL MODULE: ../../ui/src/index.js + 486 modules
1110
- var ui_src = __webpack_require__(22582);
1248
+ var es = __webpack_require__(80619);
1249
+ // EXTERNAL MODULE: ../../core/src/index.ts + 70 modules
1250
+ var src = __webpack_require__(55411);
1251
+ // EXTERNAL MODULE: ../../ui/src/index.js + 785 modules
1252
+ var ui_src = __webpack_require__(5085);
1111
1253
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx
1112
1254
 
1113
1255
 
@@ -1124,36 +1266,36 @@ const {
1124
1266
  *
1125
1267
  * @param {*} param0
1126
1268
  */
1127
- function PanelStudyBrowserTracking(_ref) {
1128
- let {
1129
- servicesManager,
1130
- getImageSrc,
1131
- getStudiesForPatientByMRN,
1132
- requestDisplaySetCreationForStudy,
1133
- dataSource
1134
- } = _ref;
1269
+ function PanelStudyBrowserTracking({
1270
+ servicesManager,
1271
+ getImageSrc,
1272
+ getStudiesForPatientByMRN,
1273
+ requestDisplaySetCreationForStudy,
1274
+ dataSource
1275
+ }) {
1135
1276
  const {
1136
1277
  displaySetService,
1137
1278
  uiDialogService,
1138
1279
  hangingProtocolService,
1139
- uiNotificationService
1280
+ uiNotificationService,
1281
+ measurementService
1140
1282
  } = servicesManager.services;
1141
- const navigate = (0,dist/* useNavigate */.s0)();
1283
+ const navigate = (0,dist/* useNavigate */.Zp)();
1142
1284
  const {
1143
1285
  t
1144
- } = (0,es/* useTranslation */.$G)('Common');
1286
+ } = (0,es/* useTranslation */.Bd)('Common');
1145
1287
 
1146
1288
  // Normally you nest the components so the tree isn't so deep, and the data
1147
1289
  // doesn't have to have such an intense shape. This works well enough for now.
1148
1290
  // Tabs --> Studies --> DisplaySets --> Thumbnails
1149
1291
  const {
1150
1292
  StudyInstanceUIDs
1151
- } = (0,ui_src/* useImageViewer */.zG)();
1293
+ } = (0,ui_src/* useImageViewer */.Bz)();
1152
1294
  const [{
1153
1295
  activeViewportId,
1154
1296
  viewports
1155
- }, viewportGridService] = (0,ui_src/* useViewportGrid */.O_)();
1156
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.I)();
1297
+ }, viewportGridService] = (0,ui_src/* useViewportGrid */.ih)();
1298
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
1157
1299
  const [activeTabName, setActiveTabName] = (0,react.useState)('primary');
1158
1300
  const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = (0,react.useState)([...StudyInstanceUIDs]);
1159
1301
  const [studyDisplayList, setStudyDisplayList] = (0,react.useState)([]);
@@ -1236,7 +1378,7 @@ function PanelStudyBrowserTracking(_ref) {
1236
1378
  const newImageSrcEntry = {};
1237
1379
  const displaySet = displaySetService.getDisplaySetByUID(dSet.displaySetInstanceUID);
1238
1380
  const imageIds = dataSource.getImageIdsForDisplaySet(displaySet);
1239
- const imageId = imageIds[Math.floor(imageIds.length / 2)];
1381
+ const imageId = getImageIdForThumbnail(displaySet, imageIds);
1240
1382
 
1241
1383
  // TODO: Is it okay that imageIds are not returned here for SR displaySets?
1242
1384
  if (!imageId || displaySet?.unsupported) {
@@ -1283,7 +1425,7 @@ function PanelStudyBrowserTracking(_ref) {
1283
1425
  setJumpToDisplaySet(displaySetInstanceUID);
1284
1426
  }
1285
1427
  const imageIds = dataSource.getImageIdsForDisplaySet(displaySet);
1286
- const imageId = imageIds[Math.floor(imageIds.length / 2)];
1428
+ const imageId = getImageIdForThumbnail(displaySet, imageIds);
1287
1429
 
1288
1430
  // TODO: Is it okay that imageIds are not returned here for SR displaysets?
1289
1431
  if (!imageId) {
@@ -1369,7 +1511,66 @@ function PanelStudyBrowserTracking(_ref) {
1369
1511
  setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
1370
1512
  }
1371
1513
  }, [expandedStudyInstanceUIDs, jumpToDisplaySet, tabs]);
1372
- return /*#__PURE__*/react.createElement(ui_src/* StudyBrowser */.eX, {
1514
+ const onClickUntrack = displaySetInstanceUID => {
1515
+ const onConfirm = () => {
1516
+ const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
1517
+ sendTrackedMeasurementsEvent('UNTRACK_SERIES', {
1518
+ SeriesInstanceUID: displaySet.SeriesInstanceUID
1519
+ });
1520
+ const measurements = measurementService.getMeasurements();
1521
+ measurements.forEach(m => {
1522
+ if (m.referenceSeriesUID === displaySet.SeriesInstanceUID) {
1523
+ measurementService.remove(m.uid);
1524
+ }
1525
+ });
1526
+ };
1527
+ uiDialogService.create({
1528
+ id: 'untrack-series',
1529
+ centralize: true,
1530
+ isDraggable: false,
1531
+ showOverlay: true,
1532
+ content: ui_src/* Dialog */.lG,
1533
+ contentProps: {
1534
+ title: 'Untrack Series',
1535
+ body: () => /*#__PURE__*/react.createElement("div", {
1536
+ className: "bg-primary-dark p-4 text-white"
1537
+ }, /*#__PURE__*/react.createElement("p", null, "Are you sure you want to untrack this series?"), /*#__PURE__*/react.createElement("p", {
1538
+ className: "mt-2"
1539
+ }, "This action cannot be undone and will delete all your existing measurements.")),
1540
+ actions: [{
1541
+ id: 'cancel',
1542
+ text: 'Cancel',
1543
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary
1544
+ }, {
1545
+ id: 'yes',
1546
+ text: 'Yes',
1547
+ type: ui_src/* ButtonEnums.type */.Ny.NW.primary,
1548
+ classes: ['untrack-yes-button']
1549
+ }],
1550
+ onClose: () => uiDialogService.dismiss({
1551
+ id: 'untrack-series'
1552
+ }),
1553
+ onSubmit: async ({
1554
+ action
1555
+ }) => {
1556
+ switch (action.id) {
1557
+ case 'yes':
1558
+ onConfirm();
1559
+ uiDialogService.dismiss({
1560
+ id: 'untrack-series'
1561
+ });
1562
+ break;
1563
+ case 'cancel':
1564
+ uiDialogService.dismiss({
1565
+ id: 'untrack-series'
1566
+ });
1567
+ break;
1568
+ }
1569
+ }
1570
+ }
1571
+ });
1572
+ };
1573
+ return /*#__PURE__*/react.createElement(ui_src/* StudyBrowser */.M4, {
1373
1574
  tabs: tabs,
1374
1575
  servicesManager: servicesManager,
1375
1576
  activeTabName: activeTabName,
@@ -1379,12 +1580,7 @@ function PanelStudyBrowserTracking(_ref) {
1379
1580
  setActiveTabName(clickedTabName);
1380
1581
  },
1381
1582
  onClickUntrack: displaySetInstanceUID => {
1382
- const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
1383
- // TODO: shift this somewhere else where we're centralizing this logic?
1384
- // Potentially a helper from displaySetInstanceUID to this
1385
- sendTrackedMeasurementsEvent('UNTRACK_SERIES', {
1386
- SeriesInstanceUID: displaySet.SeriesInstanceUID
1387
- });
1583
+ onClickUntrack(displaySetInstanceUID);
1388
1584
  },
1389
1585
  onClickThumbnail: () => {},
1390
1586
  onDoubleClickThumbnail: onDoubleClickThumbnailHandler,
@@ -1401,6 +1597,18 @@ PanelStudyBrowserTracking.propTypes = {
1401
1597
  requestDisplaySetCreationForStudy: (prop_types_default()).func.isRequired
1402
1598
  };
1403
1599
  /* harmony default export */ const PanelStudyBrowserTracking_PanelStudyBrowserTracking = (PanelStudyBrowserTracking);
1600
+ function getImageIdForThumbnail(displaySet, imageIds) {
1601
+ let imageId;
1602
+ if (displaySet.isDynamicVolume) {
1603
+ const timePoints = displaySet.dynamicVolumeInfo.timePoints;
1604
+ const middleIndex = Math.floor(timePoints.length / 2);
1605
+ const middleTimePointImageIds = timePoints[middleIndex];
1606
+ imageId = middleTimePointImageIds[Math.floor(middleTimePointImageIds.length / 2)];
1607
+ } else {
1608
+ imageId = imageIds[Math.floor(imageIds.length / 2)];
1609
+ }
1610
+ return imageId;
1611
+ }
1404
1612
 
1405
1613
  /**
1406
1614
  * Maps from the DataSource's format to a naturalized object
@@ -1432,14 +1640,6 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1432
1640
  const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID];
1433
1641
  const componentType = _getComponentType(ds);
1434
1642
  const numPanes = viewportGridService.getNumViewportPanes();
1435
- const viewportIdentificator = [];
1436
- if (numPanes !== 1) {
1437
- viewports.forEach(viewportData => {
1438
- if (viewportData?.displaySetInstanceUIDs?.includes(ds.displaySetInstanceUID)) {
1439
- viewportIdentificator.push(viewportData.viewportLabel);
1440
- }
1441
- });
1442
- }
1443
1643
  const array = componentType === 'thumbnailTracked' ? thumbnailDisplaySets : thumbnailNoImageDisplaySets;
1444
1644
  const {
1445
1645
  displaySetInstanceUID
@@ -1461,10 +1661,8 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1461
1661
  displaySetInstanceUID
1462
1662
  // .. Any other data to pass
1463
1663
  },
1464
-
1465
1664
  isTracked: trackedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID),
1466
- isHydratedForDerivedDisplaySet: ds.isHydrated,
1467
- viewportIdentificator
1665
+ isHydratedForDerivedDisplaySet: ds.isHydrated
1468
1666
  };
1469
1667
  if (componentType === 'thumbnailNoImage') {
1470
1668
  if (dataSource.reject && dataSource.reject.series) {
@@ -1475,7 +1673,7 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1475
1673
  centralize: true,
1476
1674
  isDraggable: false,
1477
1675
  showOverlay: true,
1478
- content: ui_src/* Dialog */.Vq,
1676
+ content: ui_src/* Dialog */.lG,
1479
1677
  contentProps: {
1480
1678
  title: 'Delete Report',
1481
1679
  body: () => /*#__PURE__*/react.createElement("div", {
@@ -1486,11 +1684,11 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1486
1684
  actions: [{
1487
1685
  id: 'cancel',
1488
1686
  text: 'Cancel',
1489
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary
1687
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary
1490
1688
  }, {
1491
1689
  id: 'yes',
1492
1690
  text: 'Yes',
1493
- type: ui_src/* ButtonEnums.type */.LZ.dt.primary,
1691
+ type: ui_src/* ButtonEnums.type */.Ny.NW.primary,
1494
1692
  classes: ['reject-yes-button']
1495
1693
  }],
1496
1694
  onClose: () => uiDialogService.dismiss({
@@ -1500,10 +1698,9 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1500
1698
  const yesButton = document.querySelector('.reject-yes-button');
1501
1699
  yesButton.focus();
1502
1700
  },
1503
- onSubmit: async _ref2 => {
1504
- let {
1505
- action
1506
- } = _ref2;
1701
+ onSubmit: async ({
1702
+ action
1703
+ }) => {
1507
1704
  switch (action.id) {
1508
1705
  case 'yes':
1509
1706
  try {
@@ -1659,7 +1856,8 @@ function getImageSrcFromImageId(cornerstone, imageId) {
1659
1856
  const canvas = document.createElement('canvas');
1660
1857
  cornerstone.utilities.loadImageToCanvas({
1661
1858
  canvas,
1662
- imageId
1859
+ imageId,
1860
+ thumbnail: true
1663
1861
  }).then(imageId => {
1664
1862
  resolve(canvas.toDataURL());
1665
1863
  }).catch(reject);
@@ -1699,16 +1897,15 @@ function _getStudyForPatientUtility(extensionManager) {
1699
1897
  * @param {object} commandsManager
1700
1898
  * @param {object} extensionManager
1701
1899
  */
1702
- function WrappedPanelStudyBrowserTracking(_ref) {
1703
- let {
1704
- commandsManager,
1705
- extensionManager,
1706
- servicesManager
1707
- } = _ref;
1900
+ function WrappedPanelStudyBrowserTracking({
1901
+ commandsManager,
1902
+ extensionManager,
1903
+ servicesManager
1904
+ }) {
1708
1905
  const dataSource = extensionManager.getActiveDataSource()[0];
1709
1906
  const getStudiesForPatientByMRN = _getStudyForPatientUtility(extensionManager);
1710
1907
  const _getStudiesForPatientByMRN = getStudiesForPatientByMRN.bind(null, dataSource);
1711
- const _getImageSrcFromImageId = _createGetImageSrcFromImageIdFn(extensionManager);
1908
+ const _getImageSrcFromImageId = (0,react.useCallback)(_createGetImageSrcFromImageIdFn(extensionManager), []);
1712
1909
  const _requestDisplaySetCreationForStudy = PanelStudyBrowserTracking_requestDisplaySetCreationForStudy.bind(null, dataSource);
1713
1910
  return /*#__PURE__*/react.createElement(PanelStudyBrowserTracking_PanelStudyBrowserTracking, {
1714
1911
  servicesManager: servicesManager,
@@ -1746,47 +1943,11 @@ WrappedPanelStudyBrowserTracking.propTypes = {
1746
1943
  };
1747
1944
  /* harmony default export */ const panels_PanelStudyBrowserTracking = (WrappedPanelStudyBrowserTracking);
1748
1945
  // EXTERNAL MODULE: ./hooks/index.js + 1 modules
1749
- var hooks = __webpack_require__(10800);
1750
- ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/ActionButtons.tsx
1751
-
1752
-
1753
-
1754
-
1755
- function ActionButtons(_ref) {
1756
- let {
1757
- onExportClick,
1758
- onCreateReportClick,
1759
- disabled
1760
- } = _ref;
1761
- const {
1762
- t
1763
- } = (0,es/* useTranslation */.$G)('MeasurementTable');
1764
- return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(ui_src/* Button */.zx, {
1765
- onClick: onExportClick,
1766
- disabled: disabled,
1767
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary,
1768
- size: ui_src/* ButtonEnums.size */.LZ.dp.small
1769
- }, t('Export')), /*#__PURE__*/react.createElement(ui_src/* Button */.zx, {
1770
- className: "ml-2",
1771
- onClick: onCreateReportClick,
1772
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary,
1773
- size: ui_src/* ButtonEnums.size */.LZ.dp.small,
1774
- disabled: disabled
1775
- }, t('Create Report')));
1776
- }
1777
- ActionButtons.propTypes = {
1778
- onExportClick: (prop_types_default()).func,
1779
- onCreateReportClick: (prop_types_default()).func,
1780
- disabled: (prop_types_default()).bool
1781
- };
1782
- ActionButtons.defaultProps = {
1783
- onExportClick: () => alert('Export'),
1784
- onCreateReportClick: () => alert('Create Report'),
1785
- disabled: false
1786
- };
1787
- /* harmony default export */ const PanelMeasurementTableTracking_ActionButtons = (ActionButtons);
1946
+ var hooks = __webpack_require__(25103);
1947
+ // EXTERNAL MODULE: ./state/index.js + 1 modules
1948
+ var state = __webpack_require__(15575);
1788
1949
  // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
1789
- var lodash_debounce = __webpack_require__(8324);
1950
+ var lodash_debounce = __webpack_require__(14771);
1790
1951
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
1791
1952
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/index.tsx
1792
1953
 
@@ -1797,6 +1958,7 @@ var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce
1797
1958
 
1798
1959
 
1799
1960
 
1961
+
1800
1962
  const {
1801
1963
  downloadCSVReport
1802
1964
  } = src.utils;
@@ -1812,21 +1974,23 @@ const DISPLAY_STUDY_SUMMARY_INITIAL_VALUE = {
1812
1974
  // 'CT',
1813
1975
  description: '' // 'CHEST/ABD/PELVIS W CONTRAST',
1814
1976
  };
1815
-
1816
- function PanelMeasurementTableTracking(_ref) {
1817
- let {
1818
- servicesManager,
1819
- extensionManager
1820
- } = _ref;
1821
- const [viewportGrid] = (0,ui_src/* useViewportGrid */.O_)();
1977
+ function PanelMeasurementTableTracking({
1978
+ servicesManager,
1979
+ extensionManager
1980
+ }) {
1981
+ const [viewportGrid] = (0,ui_src/* useViewportGrid */.ih)();
1982
+ const {
1983
+ t
1984
+ } = (0,es/* useTranslation */.Bd)('MeasurementTable');
1822
1985
  const [measurementChangeTimestamp, setMeasurementsUpdated] = (0,react.useState)(Date.now().toString());
1823
- const debouncedMeasurementChangeTimestamp = (0,hooks/* useDebounce */.N)(measurementChangeTimestamp, 200);
1986
+ const debouncedMeasurementChangeTimestamp = (0,hooks/* useDebounce */.d)(measurementChangeTimestamp, 200);
1824
1987
  const {
1825
1988
  measurementService,
1826
1989
  uiDialogService,
1827
- displaySetService
1990
+ displaySetService,
1991
+ customizationService
1828
1992
  } = servicesManager.services;
1829
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.I)();
1993
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
1830
1994
  const {
1831
1995
  trackedStudy,
1832
1996
  trackedSeries
@@ -1834,6 +1998,7 @@ function PanelMeasurementTableTracking(_ref) {
1834
1998
  const [displayStudySummary, setDisplayStudySummary] = (0,react.useState)(DISPLAY_STUDY_SUMMARY_INITIAL_VALUE);
1835
1999
  const [displayMeasurements, setDisplayMeasurements] = (0,react.useState)([]);
1836
2000
  const measurementsPanelRef = (0,react.useRef)(null);
2001
+ const [appConfig] = (0,state/* useAppConfig */.r)();
1837
2002
  (0,react.useEffect)(() => {
1838
2003
  const measurements = measurementService.getMeasurements();
1839
2004
  const filteredMeasurements = measurements.filter(m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID));
@@ -1909,109 +2074,40 @@ function PanelMeasurementTableTracking(_ref) {
1909
2074
  const trackedMeasurements = measurements.filter(m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID));
1910
2075
  downloadCSVReport(trackedMeasurements, measurementService);
1911
2076
  }
1912
- const jumpToImage = _ref2 => {
1913
- let {
1914
- uid,
1915
- isActive
1916
- } = _ref2;
2077
+ const jumpToImage = ({
2078
+ uid,
2079
+ isActive
2080
+ }) => {
1917
2081
  measurementService.jumpToMeasurement(viewportGrid.activeViewportId, uid);
1918
2082
  onMeasurementItemClickHandler({
1919
2083
  uid,
1920
2084
  isActive
1921
2085
  });
1922
2086
  };
1923
- const onMeasurementItemEditHandler = _ref3 => {
1924
- let {
1925
- uid,
1926
- isActive
1927
- } = _ref3;
1928
- const measurement = measurementService.getMeasurement(uid);
2087
+ const onMeasurementItemEditHandler = ({
2088
+ uid,
2089
+ isActive
2090
+ }) => {
1929
2091
  jumpToImage({
1930
2092
  uid,
1931
2093
  isActive
1932
2094
  });
1933
- const onSubmitHandler = _ref4 => {
1934
- let {
1935
- action,
1936
- value
1937
- } = _ref4;
1938
- switch (action.id) {
1939
- case 'save':
1940
- {
1941
- measurementService.update(uid, {
1942
- ...measurement,
1943
- ...value
1944
- }, true);
1945
- }
1946
- }
1947
- uiDialogService.dismiss({
1948
- id: 'enter-annotation'
1949
- });
1950
- };
1951
- uiDialogService.create({
1952
- id: 'enter-annotation',
1953
- centralize: true,
1954
- isDraggable: false,
1955
- showOverlay: true,
1956
- content: ui_src/* Dialog */.Vq,
1957
- contentProps: {
1958
- title: 'Annotation',
1959
- noCloseButton: true,
1960
- value: {
1961
- label: measurement.label || ''
1962
- },
1963
- body: _ref5 => {
1964
- let {
1965
- value,
1966
- setValue
1967
- } = _ref5;
1968
- const onChangeHandler = event => {
1969
- event.persist();
1970
- setValue(value => ({
1971
- ...value,
1972
- label: event.target.value
1973
- }));
1974
- };
1975
- const onKeyPressHandler = event => {
1976
- if (event.key === 'Enter') {
1977
- onSubmitHandler({
1978
- value,
1979
- action: {
1980
- id: 'save'
1981
- }
1982
- });
1983
- }
1984
- };
1985
- return /*#__PURE__*/react.createElement(ui_src/* Input */.II, {
1986
- label: "Enter your annotation",
1987
- labelClassName: "text-white grow text-[14px] leading-[1.2]",
1988
- autoFocus: true,
1989
- id: "annotation",
1990
- className: "border-primary-main bg-black",
1991
- type: "text",
1992
- value: value.label,
1993
- onChange: onChangeHandler,
1994
- onKeyPress: onKeyPressHandler
1995
- });
1996
- },
1997
- actions: [{
1998
- id: 'cancel',
1999
- text: 'Cancel',
2000
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary
2001
- }, {
2002
- id: 'save',
2003
- text: 'Save',
2004
- type: ui_src/* ButtonEnums.type */.LZ.dt.primary
2005
- }],
2006
- onSubmit: onSubmitHandler
2007
- }
2095
+ const labelConfig = customizationService.get('measurementLabels');
2096
+ const measurement = measurementService.getMeasurement(uid);
2097
+ const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
2098
+ const {
2099
+ showLabelAnnotationPopup
2100
+ } = utilityModule.exports;
2101
+ showLabelAnnotationPopup(measurement, uiDialogService, labelConfig).then(val => {
2102
+ measurementService.update(uid, {
2103
+ ...val
2104
+ }, true);
2008
2105
  });
2009
2106
  };
2010
- const onMeasurementItemClickHandler = _ref6 => {
2011
- let {
2012
- uid,
2013
- isActive
2014
- } = _ref6;
2107
+ const onMeasurementItemClickHandler = ({
2108
+ uid,
2109
+ isActive
2110
+ }) => {
2015
2111
  if (!isActive) {
2016
2112
  const measurements = [...displayMeasurements];
2017
2113
  const measurement = measurements.find(m => m.uid === uid);
@@ -2022,37 +2118,44 @@ function PanelMeasurementTableTracking(_ref) {
2022
2118
  };
2023
2119
  const displayMeasurementsWithoutFindings = displayMeasurements.filter(dm => dm.measurementType !== measurementService.VALUE_TYPES.POINT);
2024
2120
  const additionalFindings = displayMeasurements.filter(dm => dm.measurementType === measurementService.VALUE_TYPES.POINT);
2121
+ const disabled = additionalFindings.length === 0 && displayMeasurementsWithoutFindings.length === 0;
2025
2122
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
2026
2123
  className: "invisible-scrollbar overflow-y-auto overflow-x-hidden",
2027
2124
  ref: measurementsPanelRef,
2028
2125
  "data-cy": 'trackedMeasurements-panel'
2029
- }, displayStudySummary.key && /*#__PURE__*/react.createElement(ui_src/* StudySummary */.YL, {
2126
+ }, displayStudySummary.key && /*#__PURE__*/react.createElement(ui_src/* StudySummary */.u3, {
2030
2127
  date: PanelMeasurementTableTracking_formatDate(displayStudySummary.date),
2031
2128
  modality: displayStudySummary.modality,
2032
2129
  description: displayStudySummary.description
2033
- }), /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.wt, {
2130
+ }), /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.V, {
2034
2131
  title: "Measurements",
2035
2132
  data: displayMeasurementsWithoutFindings,
2036
2133
  servicesManager: servicesManager,
2037
2134
  onClick: jumpToImage,
2038
2135
  onEdit: onMeasurementItemEditHandler
2039
- }), additionalFindings.length !== 0 && /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.wt, {
2136
+ }), additionalFindings.length !== 0 && /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.V, {
2040
2137
  title: "Additional Findings",
2041
2138
  data: additionalFindings,
2042
2139
  servicesManager: servicesManager,
2043
2140
  onClick: jumpToImage,
2044
2141
  onEdit: onMeasurementItemEditHandler
2045
- })), /*#__PURE__*/react.createElement("div", {
2142
+ })), !appConfig?.disableEditing && /*#__PURE__*/react.createElement("div", {
2046
2143
  className: "flex justify-center p-4"
2047
- }, /*#__PURE__*/react.createElement(PanelMeasurementTableTracking_ActionButtons, {
2048
- onExportClick: exportReport,
2049
- onCreateReportClick: () => {
2050
- sendTrackedMeasurementsEvent('SAVE_REPORT', {
2051
- viewportId: viewportGrid.activeViewportId,
2052
- isBackupSave: true
2053
- });
2054
- },
2055
- disabled: additionalFindings.length === 0 && displayMeasurementsWithoutFindings.length === 0
2144
+ }, /*#__PURE__*/react.createElement(ui_src/* ActionButtons */.wr, {
2145
+ t: t,
2146
+ actions: [{
2147
+ label: 'Export',
2148
+ onClick: exportReport
2149
+ }, {
2150
+ label: 'Create Report',
2151
+ onClick: () => {
2152
+ sendTrackedMeasurementsEvent('SAVE_REPORT', {
2153
+ viewportId: viewportGrid.activeViewportId,
2154
+ isBackupSave: true
2155
+ });
2156
+ }
2157
+ }],
2158
+ disabled: disabled
2056
2159
  })));
2057
2160
  }
2058
2161
  PanelMeasurementTableTracking.propTypes = {
@@ -2123,24 +2226,26 @@ function _mapMeasurementToDisplay(measurement, types, displaySetService) {
2123
2226
 
2124
2227
 
2125
2228
 
2229
+ // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
2230
+ var i18next = __webpack_require__(92344);
2126
2231
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/getPanelModule.tsx
2127
2232
 
2128
2233
 
2234
+
2129
2235
  // TODO:
2130
2236
  // - No loading UI exists yet
2131
2237
  // - cancel promises when component is destroyed
2132
2238
  // - show errors in UI for thumbnails if promise fails
2133
- function getPanelModule(_ref) {
2134
- let {
2135
- commandsManager,
2136
- extensionManager,
2137
- servicesManager
2138
- } = _ref;
2239
+ function getPanelModule({
2240
+ commandsManager,
2241
+ extensionManager,
2242
+ servicesManager
2243
+ }) {
2139
2244
  return [{
2140
2245
  name: 'seriesList',
2141
2246
  iconName: 'tab-studies',
2142
2247
  iconLabel: 'Studies',
2143
- label: 'Studies',
2248
+ label: i18next/* default */.A.t('SidePanel:Studies'),
2144
2249
  component: panels_PanelStudyBrowserTracking.bind(null, {
2145
2250
  commandsManager,
2146
2251
  extensionManager,
@@ -2150,7 +2255,7 @@ function getPanelModule(_ref) {
2150
2255
  name: 'trackedMeasurements',
2151
2256
  iconName: 'tab-linear',
2152
2257
  iconLabel: 'Measure',
2153
- label: 'Measurements',
2258
+ label: i18next/* default */.A.t('SidePanel:Measurements'),
2154
2259
  component: panels_PanelMeasurementTableTracking.bind(null, {
2155
2260
  commandsManager,
2156
2261
  extensionManager,
@@ -2163,19 +2268,18 @@ function getPanelModule(_ref) {
2163
2268
  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); }
2164
2269
 
2165
2270
  const Component = /*#__PURE__*/react.lazy(() => {
2166
- return __webpack_require__.e(/* import() */ 822).then(__webpack_require__.bind(__webpack_require__, 86822));
2271
+ return __webpack_require__.e(/* import() */ 862).then(__webpack_require__.bind(__webpack_require__, 49862));
2167
2272
  });
2168
2273
  const OHIFCornerstoneViewport = props => {
2169
2274
  return /*#__PURE__*/react.createElement(react.Suspense, {
2170
2275
  fallback: /*#__PURE__*/react.createElement("div", null, "Loading...")
2171
2276
  }, /*#__PURE__*/react.createElement(Component, props));
2172
2277
  };
2173
- function getViewportModule(_ref) {
2174
- let {
2175
- servicesManager,
2176
- commandsManager,
2177
- extensionManager
2178
- } = _ref;
2278
+ function getViewportModule({
2279
+ servicesManager,
2280
+ commandsManager,
2281
+ extensionManager
2282
+ }) {
2179
2283
  const ExtendedOHIFCornerstoneTrackingViewport = props => {
2180
2284
  return /*#__PURE__*/react.createElement(OHIFCornerstoneViewport, _extends({
2181
2285
  servicesManager: servicesManager,
@@ -2190,10 +2294,10 @@ function getViewportModule(_ref) {
2190
2294
  }
2191
2295
  /* harmony default export */ const src_getViewportModule = (getViewportModule);
2192
2296
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/package.json
2193
- const package_namespaceObject = JSON.parse('{"u2":"@ohif/extension-measurement-tracking"}');
2297
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-measurement-tracking"}');
2194
2298
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/id.js
2195
2299
 
2196
- const id = package_namespaceObject.u2;
2300
+ const id = package_namespaceObject.UU;
2197
2301
 
2198
2302
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/index.tsx
2199
2303
 
@@ -2205,7 +2309,7 @@ const measurementTrackingExtension = {
2205
2309
  * Only required property. Should be a unique value across all extensions.
2206
2310
  */
2207
2311
  id: id,
2208
- getContextModule: getContextModule/* default */.Z,
2312
+ getContextModule: getContextModule/* default */.A,
2209
2313
  getPanelModule: src_getPanelModule,
2210
2314
  getViewportModule: src_getViewportModule
2211
2315
  };