@ohif/app 3.8.0-beta.7 → 3.8.0-beta.71

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 (93) hide show
  1. package/dist/{220.bundle.f7e1c96c94245e70f2be.js → 109.bundle.b4fee2a22b622839baf5.js} +4466 -3715
  2. package/dist/{471.bundle.49c8d281adbae4a2c4df.js → 121.bundle.21827fec690c01ee9ab3.js} +85 -112
  3. package/dist/{19.bundle.e5579df6d7b74af50b1d.js → 155.bundle.091ace1591aff1f6b679.js} +334 -287
  4. package/dist/{687.bundle.9d0330ea5d61fe3117da.js → 164.bundle.fcc94cd4e142a409769d.js} +22 -38
  5. package/dist/17dd54813d5acc10bf8f.wasm +0 -0
  6. package/dist/{506.bundle.ab8226d3d81abe874544.js → 188.bundle.0081530bd886a18676eb.js} +23 -28
  7. package/dist/191.bundle.ef35ed1f90a988b3952b.js +30360 -0
  8. package/dist/{221.bundle.c2dc03d8fa4235dc1285.js → 2.bundle.ab8937194aad592bc7b4.js} +351 -546
  9. package/dist/20fc4c659b85ccd2a9c0.wasm +0 -0
  10. package/dist/290.bundle.952de53057f98e2c5ef0.js +8883 -0
  11. package/dist/{451.bundle.57c21db5d003c75e9d61.js → 295.bundle.3a0d5062d65296c4bf5d.js} +102 -127
  12. package/dist/{125.bundle.253395f320b72180da63.js → 297.bundle.194d8985ab974839b5b6.js} +7 -8
  13. package/dist/{202.bundle.d3490836f71e001dd30f.js → 342.bundle.9be178d7555a64de203a.js} +544 -860
  14. package/dist/41.bundle.b5a6c70f88cf565cad3e.js +874 -0
  15. package/dist/425.bundle.e44cfce041ba5209a878.js +2957 -0
  16. package/dist/425.css +2 -0
  17. package/dist/{126.bundle.42df2dafc9c0310da188.js → 448.bundle.599d81471e1d7f7962bc.js} +361 -427
  18. package/dist/{957.bundle.9ea4506963ef8b2d84ba.js → 504.bundle.5ccd6d4269fa77a0a7e7.js} +14338 -27291
  19. package/dist/{886.bundle.c8dd3ecc42a4253de278.js → 530.bundle.566bfd08dccb4cf6d98b.js} +75 -105
  20. package/dist/{250.bundle.aea3335667054bdefe36.js → 544.bundle.1110b24e96863d719a95.js} +39 -56
  21. package/dist/{663.bundle.9f359963019cd8ccf8f9.js → 559.bundle.fb8ac10c41eb734e2f3d.js} +151 -147
  22. package/dist/{181.bundle.a62b9f0ec692299acb35.js → 574.bundle.b262cbe9f2afd7275271.js} +1286 -307
  23. package/dist/{181.css → 574.css} +1 -1
  24. package/dist/{410.bundle.38c9d3820e152e89288e.js → 594.bundle.b70ca7a91d85ebd5d8c4.js} +183 -221
  25. package/dist/{776.bundle.004382036bdbd8ee2b95.js → 595.bundle.c25147a450c67defb3d5.js} +3157 -1029
  26. package/dist/{774.bundle.4b2dc46a35012b898e1a.js → 644.bundle.1e77691d2eeb96a423b0.js} +1852 -8945
  27. package/dist/699.bundle.02c15c3cc4c04dbf7f51.js +785 -0
  28. package/dist/{359.bundle.8abe0036a7bf6b5fd115.js → 724.bundle.d50ce9fb0ab01b9378b7.js} +130 -254
  29. package/dist/{757.bundle.ec8301d8e70d2b990f65.js → 726.bundle.c8de818cf1a3ff0cf7d2.js} +512 -879
  30. package/dist/{530.bundle.a03b6f942ace3e1baa1e.js → 835.bundle.15aff0b7433bb0dd6d6d.js} +37 -30
  31. package/dist/{822.bundle.82cdc418f8f56da6060b.js → 862.bundle.809c87a7ba9da6fb29c8.js} +77 -96
  32. package/dist/{236.bundle.c9e70d55e7b2574c1ecd.js → 889.bundle.1c17d0d13e157ac21d38.js} +198 -197
  33. package/dist/{342.bundle.d9668551811e3a88aaa4.js → 90.bundle.27637ef740946d5c8948.js} +1429 -1055
  34. package/dist/{281.bundle.16a2933086a57e60c96c.js → 905.bundle.206e44c3bbd1df1a900b.js} +155 -122
  35. package/dist/{814.bundle.a1aba9c1e3d336008351.js → 907.bundle.11700f7af989b5af8bc3.js} +16 -30
  36. package/dist/{417.bundle.af0a207c29b109f84159.js → 931.bundle.d270a1fda9a2836c3cc5.js} +26 -26
  37. package/dist/{686.bundle.dccef1f36e4bc79bcc48.js → 939.bundle.9d93b2e47c52338747a2.js} +7 -8
  38. package/dist/{12.bundle.37a8b47d2ae587cb9226.js → 961.bundle.a1ffb667eb04cbe07210.js} +16 -31
  39. package/dist/987.bundle.6bdfb3cd8762b8889632.js +122950 -0
  40. package/dist/app-config.js +1 -0
  41. package/dist/app.bundle.css +15 -13
  42. package/dist/{app.bundle.437d085e13599d1e1ced.js → app.bundle.d1c8b09ab30d221fddf0.js} +148259 -61821
  43. package/dist/assets/images/CT-AAA.png +0 -0
  44. package/dist/assets/images/CT-AAA2.png +0 -0
  45. package/dist/assets/images/CT-Air.png +0 -0
  46. package/dist/assets/images/CT-Bone.png +0 -0
  47. package/dist/assets/images/CT-Bones.png +0 -0
  48. package/dist/assets/images/CT-Cardiac.png +0 -0
  49. package/dist/assets/images/CT-Cardiac2.png +0 -0
  50. package/dist/assets/images/CT-Cardiac3.png +0 -0
  51. package/dist/assets/images/CT-Chest-Contrast-Enhanced.png +0 -0
  52. package/dist/assets/images/CT-Chest-Vessels.png +0 -0
  53. package/dist/assets/images/CT-Coronary-Arteries-2.png +0 -0
  54. package/dist/assets/images/CT-Coronary-Arteries-3.png +0 -0
  55. package/dist/assets/images/CT-Coronary-Arteries.png +0 -0
  56. package/dist/assets/images/CT-Cropped-Volume-Bone.png +0 -0
  57. package/dist/assets/images/CT-Fat.png +0 -0
  58. package/dist/assets/images/CT-Liver-Vasculature.png +0 -0
  59. package/dist/assets/images/CT-Lung.png +0 -0
  60. package/dist/assets/images/CT-MIP.png +0 -0
  61. package/dist/assets/images/CT-Muscle.png +0 -0
  62. package/dist/assets/images/CT-Pulmonary-Arteries.png +0 -0
  63. package/dist/assets/images/CT-Soft-Tissue.png +0 -0
  64. package/dist/assets/images/DTI-FA-Brain.png +0 -0
  65. package/dist/assets/images/MR-Angio.png +0 -0
  66. package/dist/assets/images/MR-Default.png +0 -0
  67. package/dist/assets/images/MR-MIP.png +0 -0
  68. package/dist/assets/images/MR-T2-Brain.png +0 -0
  69. package/dist/assets/images/VolumeRendering.png +0 -0
  70. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  71. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  72. package/dist/{dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js → dicom-microscopy-viewer.bundle.d3a56dc9f62df5e11019.js} +3 -3
  73. package/dist/index.html +1 -1
  74. package/dist/{index.worker.e62ecca63f1a2e124230.worker.js → index.worker.64c896c4316fcd506666.worker.js} +2 -2
  75. package/dist/index.worker.64c896c4316fcd506666.worker.js.map +1 -0
  76. package/dist/polySeg.bundle.01449e456b7d4a737d4f.js +252 -0
  77. package/dist/serve.json +12 -0
  78. package/dist/sw.js +1 -1
  79. package/package.json +25 -22
  80. package/dist/23.bundle.e008ad788170f2ed5569.js +0 -900
  81. package/dist/604.bundle.a51f83e64004bca5f497.js +0 -1848
  82. package/dist/613.bundle.aed640a7900dbcb688f5.js +0 -532
  83. package/dist/743.bundle.489f7df3a089d4d374e1.js +0 -78007
  84. package/dist/75788f12450d4c5ed494.wasm +0 -0
  85. package/dist/775.bundle.2285e7e0e67878948c0d.js +0 -1009
  86. package/dist/788.bundle.dcd53828d1bb2ac64d04.js +0 -2682
  87. package/dist/82.bundle.5a94dd7645e5c5476f59.js +0 -1049
  88. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
  89. /package/dist/{19.css → 155.css} +0 -0
  90. /package/dist/{221.css → 2.css} +0 -0
  91. /package/dist/{579.css → 481.css} +0 -0
  92. /package/dist/{250.css → 544.css} +0 -0
  93. /package/dist/{776.css → 595.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([[155,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 + 542 modules
24
+ var src = __webpack_require__(48804);
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 => {
@@ -430,19 +501,20 @@ const promptTrackNewSeries_RESPONSE = {
430
501
  SET_STUDY_AND_SERIES: 3,
431
502
  NO_NOT_FOR_SERIES: 4
432
503
  };
433
- function promptTrackNewSeries(_ref, ctx, evt) {
434
- let {
435
- servicesManager,
436
- extensionManager
437
- } = _ref;
504
+ function promptTrackNewSeries({
505
+ servicesManager,
506
+ extensionManager
507
+ }, ctx, evt) {
438
508
  const {
439
509
  UIViewportDialogService
440
510
  } = servicesManager.services;
511
+ // When the state change happens after a promise, the state machine sends the retult in evt.data;
512
+ // In case of direct transition to the state, the state machine sends the data in evt;
441
513
  const {
442
514
  viewportId,
443
515
  StudyInstanceUID,
444
516
  SeriesInstanceUID
445
- } = evt;
517
+ } = evt.data || evt;
446
518
  return new Promise(async function (resolve, reject) {
447
519
  let promptResult = await _askShouldAddMeasurements(UIViewportDialogService, viewportId);
448
520
  if (promptResult === promptTrackNewSeries_RESPONSE.CREATE_REPORT) {
@@ -461,15 +533,15 @@ function _askShouldAddMeasurements(uiViewportDialogService, viewportId) {
461
533
  return new Promise(function (resolve, reject) {
462
534
  const message = 'Do you want to add this measurement to the existing report?';
463
535
  const actions = [{
464
- type: src/* ButtonEnums.type */.LZ.dt.secondary,
536
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
465
537
  text: 'Cancel',
466
538
  value: promptTrackNewSeries_RESPONSE.CANCEL
467
539
  }, {
468
- type: src/* ButtonEnums.type */.LZ.dt.primary,
540
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
469
541
  text: 'Create new report',
470
542
  value: promptTrackNewSeries_RESPONSE.CREATE_REPORT
471
543
  }, {
472
- type: src/* ButtonEnums.type */.LZ.dt.primary,
544
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
473
545
  text: 'Add to existing report',
474
546
  value: promptTrackNewSeries_RESPONSE.ADD_SERIES
475
547
  }];
@@ -525,6 +597,7 @@ function _askSaveDiscardOrCancel(UIViewportDialogService, viewportId) {
525
597
  }
526
598
  /* harmony default export */ const TrackedMeasurementsContext_promptTrackNewSeries = (promptTrackNewSeries);
527
599
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js
600
+
528
601
  const promptTrackNewStudy_RESPONSE = {
529
602
  NO_NEVER: -1,
530
603
  CANCEL: 0,
@@ -533,19 +606,20 @@ const promptTrackNewStudy_RESPONSE = {
533
606
  SET_STUDY_AND_SERIES: 3,
534
607
  NO_NOT_FOR_SERIES: 4
535
608
  };
536
- function promptTrackNewStudy(_ref, ctx, evt) {
537
- let {
538
- servicesManager,
539
- extensionManager
540
- } = _ref;
609
+ function promptTrackNewStudy({
610
+ servicesManager,
611
+ extensionManager
612
+ }, ctx, evt) {
541
613
  const {
542
614
  UIViewportDialogService
543
615
  } = servicesManager.services;
616
+ // When the state change happens after a promise, the state machine sends the retult in evt.data;
617
+ // In case of direct transition to the state, the state machine sends the data in evt;
544
618
  const {
545
619
  viewportId,
546
620
  StudyInstanceUID,
547
621
  SeriesInstanceUID
548
- } = evt;
622
+ } = evt.data || evt;
549
623
  return new Promise(async function (resolve, reject) {
550
624
  let promptResult = await promptTrackNewStudy_askTrackMeasurements(UIViewportDialogService, viewportId);
551
625
  if (promptResult === promptTrackNewStudy_RESPONSE.SET_STUDY_AND_SERIES) {
@@ -562,18 +636,18 @@ function promptTrackNewStudy(_ref, ctx, evt) {
562
636
  }
563
637
  function promptTrackNewStudy_askTrackMeasurements(UIViewportDialogService, viewportId) {
564
638
  return new Promise(function (resolve, reject) {
565
- const message = 'Track measurements for this series?';
639
+ const message = i18next/* default */.A.t('MeasurementTable:Track measurements for this series?');
566
640
  const actions = [{
567
641
  type: 'cancel',
568
- text: 'No',
642
+ text: i18next/* default */.A.t('MeasurementTable:No'),
569
643
  value: promptTrackNewStudy_RESPONSE.CANCEL
570
644
  }, {
571
645
  type: 'secondary',
572
- text: 'No, do not ask again for this series',
646
+ text: i18next/* default */.A.t('MeasurementTable:No, do not ask again'),
573
647
  value: promptTrackNewStudy_RESPONSE.NO_NOT_FOR_SERIES
574
648
  }, {
575
649
  type: 'primary',
576
- text: 'Yes',
650
+ text: i18next/* default */.A.t('MeasurementTable:Yes'),
577
651
  value: promptTrackNewStudy_RESPONSE.SET_STUDY_AND_SERIES
578
652
  }];
579
653
  const onSubmit = result => {
@@ -627,8 +701,8 @@ function promptTrackNewStudy_askSaveDiscardOrCancel(UIViewportDialogService, vie
627
701
  });
628
702
  }
629
703
  /* harmony default export */ const TrackedMeasurementsContext_promptTrackNewStudy = (promptTrackNewStudy);
630
- // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 76 modules
631
- var default_src = __webpack_require__(56342);
704
+ // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 78 modules
705
+ var default_src = __webpack_require__(54090);
632
706
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/_shared/getNextSRSeriesNumber.js
633
707
  const MIN_SR_SERIES_NUMBER = 4700;
634
708
  function getNextSRSeriesNumber(displaySetService) {
@@ -652,12 +726,11 @@ const PROMPT_RESPONSES_RESPONSE = {
652
726
 
653
727
 
654
728
 
655
- function promptSaveReport(_ref, ctx, evt) {
656
- let {
657
- servicesManager,
658
- commandsManager,
659
- extensionManager
660
- } = _ref;
729
+ function promptSaveReport({
730
+ servicesManager,
731
+ commandsManager,
732
+ extensionManager
733
+ }, ctx, evt) {
661
734
  const {
662
735
  uiDialogService,
663
736
  measurementService,
@@ -718,7 +791,7 @@ function promptSaveReport(_ref, ctx, evt) {
718
791
  }
719
792
  /* harmony default export */ const TrackedMeasurementsContext_promptSaveReport = (promptSaveReport);
720
793
  // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/index.tsx + 15 modules
721
- var cornerstone_dicom_sr_src = __webpack_require__(42170);
794
+ var cornerstone_dicom_sr_src = __webpack_require__(89559);
722
795
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js
723
796
 
724
797
 
@@ -731,12 +804,11 @@ const promptHydrateStructuredReport_RESPONSE = {
731
804
  NO_NOT_FOR_SERIES: 4,
732
805
  HYDRATE_REPORT: 5
733
806
  };
734
- function promptHydrateStructuredReport(_ref, ctx, evt) {
735
- let {
736
- servicesManager,
737
- extensionManager,
738
- appConfig
739
- } = _ref;
807
+ function promptHydrateStructuredReport({
808
+ servicesManager,
809
+ extensionManager,
810
+ appConfig
811
+ }, ctx, evt) {
740
812
  const {
741
813
  uiViewportDialogService,
742
814
  displaySetService
@@ -775,11 +847,11 @@ function promptHydrateStructuredReport_askTrackMeasurements(uiViewportDialogServ
775
847
  return new Promise(function (resolve, reject) {
776
848
  const message = 'Do you want to continue tracking measurements for this study?';
777
849
  const actions = [{
778
- type: src/* ButtonEnums.type */.LZ.dt.secondary,
850
+ type: src/* ButtonEnums.type */.Ny.NW.secondary,
779
851
  text: 'No',
780
852
  value: promptHydrateStructuredReport_RESPONSE.CANCEL
781
853
  }, {
782
- type: src/* ButtonEnums.type */.LZ.dt.primary,
854
+ type: src/* ButtonEnums.type */.Ny.NW.primary,
783
855
  text: 'Yes',
784
856
  value: promptHydrateStructuredReport_RESPONSE.HYDRATE_REPORT
785
857
  }];
@@ -803,11 +875,11 @@ function promptHydrateStructuredReport_askTrackMeasurements(uiViewportDialogServ
803
875
  /* harmony default export */ const TrackedMeasurementsContext_promptHydrateStructuredReport = (promptHydrateStructuredReport);
804
876
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/hydrateStructuredReport.tsx
805
877
 
806
- function hydrateStructuredReport(_ref, ctx, evt) {
807
- let {
808
- servicesManager,
809
- extensionManager
810
- } = _ref;
878
+ function hydrateStructuredReport({
879
+ servicesManager,
880
+ extensionManager,
881
+ appConfig
882
+ }, ctx, evt) {
811
883
  const {
812
884
  displaySetService
813
885
  } = servicesManager.services;
@@ -819,7 +891,8 @@ function hydrateStructuredReport(_ref, ctx, evt) {
819
891
  return new Promise((resolve, reject) => {
820
892
  const hydrationResult = (0,cornerstone_dicom_sr_src.hydrateStructuredReport)({
821
893
  servicesManager,
822
- extensionManager
894
+ extensionManager,
895
+ appConfig
823
896
  }, displaySetInstanceUID);
824
897
  const StudyInstanceUID = hydrationResult.StudyInstanceUID;
825
898
  const SeriesInstanceUIDs = hydrationResult.SeriesInstanceUIDs;
@@ -834,7 +907,41 @@ function hydrateStructuredReport(_ref, ctx, evt) {
834
907
  }
835
908
  /* harmony default export */ const TrackedMeasurementsContext_hydrateStructuredReport = (hydrateStructuredReport);
836
909
  // EXTERNAL MODULE: ./state/index.js + 1 modules
837
- var state = __webpack_require__(62657);
910
+ var state = __webpack_require__(15575);
911
+ ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptLabelAnnotation.js
912
+ function promptLabelAnnotation({
913
+ servicesManager,
914
+ extensionManager
915
+ }, ctx, evt) {
916
+ const {
917
+ measurementService,
918
+ customizationService
919
+ } = servicesManager.services;
920
+ const {
921
+ viewportId,
922
+ StudyInstanceUID,
923
+ SeriesInstanceUID,
924
+ measurementId
925
+ } = evt;
926
+ const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
927
+ const {
928
+ showLabelAnnotationPopup
929
+ } = utilityModule.exports;
930
+ return new Promise(async function (resolve) {
931
+ const labelConfig = customizationService.get('measurementLabels');
932
+ const measurement = measurementService.getMeasurement(measurementId);
933
+ const value = await showLabelAnnotationPopup(measurement, servicesManager.services.uiDialogService, labelConfig);
934
+ measurementService.update(measurementId, {
935
+ ...value
936
+ }, true);
937
+ resolve({
938
+ StudyInstanceUID,
939
+ SeriesInstanceUID,
940
+ viewportId
941
+ });
942
+ });
943
+ }
944
+ /* harmony default export */ const TrackedMeasurementsContext_promptLabelAnnotation = (promptLabelAnnotation);
838
945
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx
839
946
 
840
947
 
@@ -849,6 +956,7 @@ var state = __webpack_require__(62657);
849
956
 
850
957
 
851
958
 
959
+
852
960
  const TrackedMeasurementsContext = /*#__PURE__*/react.createContext();
853
961
  TrackedMeasurementsContext.displayName = 'TrackedMeasurementsContext';
854
962
  const useTrackedMeasurements = () => (0,react.useContext)(TrackedMeasurementsContext);
@@ -858,26 +966,26 @@ const SR_SOPCLASSHANDLERID = '@ohif/extension-cornerstone-dicom-sr.sopClassHandl
858
966
  *
859
967
  * @param {*} param0
860
968
  */
861
- function TrackedMeasurementsContextProvider(_ref, // Bound by consumer
862
- _ref2 // Component props
969
+ function TrackedMeasurementsContextProvider({
970
+ servicesManager,
971
+ commandsManager,
972
+ extensionManager
973
+ },
974
+ // Bound by consumer
975
+ {
976
+ children
977
+ } // Component props
863
978
  ) {
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_)();
979
+ const [appConfig] = (0,state/* useAppConfig */.r)();
980
+ const [viewportGrid, viewportGridService] = (0,src/* useViewportGrid */.ih)();
874
981
  const {
875
982
  activeViewportId,
876
983
  viewports
877
984
  } = viewportGrid;
878
985
  const {
879
986
  measurementService,
880
- displaySetService
987
+ displaySetService,
988
+ customizationService
881
989
  } = servicesManager.services;
882
990
  const machineOptions = Object.assign({}, defaultOptions);
883
991
  machineOptions.actions = Object.assign({}, machineOptions.actions, {
@@ -974,8 +1082,22 @@ _ref2 // Component props
974
1082
  servicesManager,
975
1083
  extensionManager,
976
1084
  appConfig
1085
+ }),
1086
+ promptLabelAnnotation: TrackedMeasurementsContext_promptLabelAnnotation.bind(null, {
1087
+ servicesManager,
1088
+ extensionManager
977
1089
  })
978
1090
  });
1091
+ machineOptions.guards = Object.assign({}, machineOptions.guards, {
1092
+ isLabelOnMeasure: (ctx, evt, condMeta) => {
1093
+ const labelConfig = customizationService.get('measurementLabels');
1094
+ return labelConfig?.labelOnMeasure;
1095
+ },
1096
+ isLabelOnMeasureAndShouldKillMachine: (ctx, evt, condMeta) => {
1097
+ const labelConfig = customizationService.get('measurementLabels');
1098
+ return evt.data && evt.data.userResponse === RESPONSE.NO_NEVER && labelConfig?.labelOnMeasure;
1099
+ }
1100
+ });
979
1101
 
980
1102
  // TODO: IMPROVE
981
1103
  // - Add measurement_updated to cornerstone; debounced? (ext side, or consumption?)
@@ -986,8 +1108,8 @@ _ref2 // Component props
986
1108
  // - Fix viewport border resize
987
1109
  // - created/destroyed hooks for extensions (cornerstone measurement subscriptions in it's `init`)
988
1110
 
989
- const measurementTrackingMachine = (0,es/* Machine */.J)(machineConfiguration, machineOptions);
990
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,react_es/* useMachine */.eO)(measurementTrackingMachine);
1111
+ const measurementTrackingMachine = (0,es/* Machine */.u5)(machineConfiguration, machineOptions);
1112
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,react_es/* useMachine */.zl)(measurementTrackingMachine);
991
1113
  (0,react.useEffect)(() => {
992
1114
  // Update the state machine with the active viewport ID
993
1115
  sendTrackedMeasurementsEvent('UPDATE_ACTIVE_VIEWPORT_ID', {
@@ -1060,12 +1182,11 @@ TrackedMeasurementsContextProvider.propTypes = {
1060
1182
 
1061
1183
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/getContextModule.tsx
1062
1184
 
1063
- function getContextModule(_ref) {
1064
- let {
1065
- servicesManager,
1066
- extensionManager,
1067
- commandsManager
1068
- } = _ref;
1185
+ function getContextModule({
1186
+ servicesManager,
1187
+ extensionManager,
1188
+ commandsManager
1189
+ }) {
1069
1190
  const BoundTrackedMeasurementsContextProvider = TrackedMeasurementsContextProvider.bind(null, {
1070
1191
  servicesManager,
1071
1192
  extensionManager,
@@ -1082,7 +1203,7 @@ function getContextModule(_ref) {
1082
1203
 
1083
1204
  /***/ }),
1084
1205
 
1085
- /***/ 28030:
1206
+ /***/ 63934:
1086
1207
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1087
1208
 
1088
1209
  // ESM COMPAT FLAG
@@ -1093,21 +1214,21 @@ __webpack_require__.d(__webpack_exports__, {
1093
1214
  "default": () => (/* binding */ measurement_tracking_src)
1094
1215
  });
1095
1216
 
1096
- // EXTERNAL MODULE: ../../../extensions/measurement-tracking/src/getContextModule.tsx + 12 modules
1097
- var getContextModule = __webpack_require__(41832);
1217
+ // EXTERNAL MODULE: ../../../extensions/measurement-tracking/src/getContextModule.tsx + 13 modules
1218
+ var getContextModule = __webpack_require__(219);
1098
1219
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
1099
- var react = __webpack_require__(43001);
1220
+ var react = __webpack_require__(41766);
1100
1221
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
1101
- var prop_types = __webpack_require__(3827);
1222
+ var prop_types = __webpack_require__(11374);
1102
1223
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
1103
1224
  // EXTERNAL MODULE: ../node_modules/react-router-dom/dist/index.js
1104
- var dist = __webpack_require__(62474);
1225
+ var dist = __webpack_require__(37396);
1105
1226
  // 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);
1227
+ var es = __webpack_require__(80619);
1228
+ // EXTERNAL MODULE: ../../core/src/index.ts + 68 modules
1229
+ var src = __webpack_require__(85073);
1230
+ // EXTERNAL MODULE: ../../ui/src/index.js + 542 modules
1231
+ var ui_src = __webpack_require__(48804);
1111
1232
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx
1112
1233
 
1113
1234
 
@@ -1124,36 +1245,35 @@ const {
1124
1245
  *
1125
1246
  * @param {*} param0
1126
1247
  */
1127
- function PanelStudyBrowserTracking(_ref) {
1128
- let {
1129
- servicesManager,
1130
- getImageSrc,
1131
- getStudiesForPatientByMRN,
1132
- requestDisplaySetCreationForStudy,
1133
- dataSource
1134
- } = _ref;
1248
+ function PanelStudyBrowserTracking({
1249
+ servicesManager,
1250
+ getImageSrc,
1251
+ getStudiesForPatientByMRN,
1252
+ requestDisplaySetCreationForStudy,
1253
+ dataSource
1254
+ }) {
1135
1255
  const {
1136
1256
  displaySetService,
1137
1257
  uiDialogService,
1138
1258
  hangingProtocolService,
1139
1259
  uiNotificationService
1140
1260
  } = servicesManager.services;
1141
- const navigate = (0,dist/* useNavigate */.s0)();
1261
+ const navigate = (0,dist/* useNavigate */.Zp)();
1142
1262
  const {
1143
1263
  t
1144
- } = (0,es/* useTranslation */.$G)('Common');
1264
+ } = (0,es/* useTranslation */.Bd)('Common');
1145
1265
 
1146
1266
  // Normally you nest the components so the tree isn't so deep, and the data
1147
1267
  // doesn't have to have such an intense shape. This works well enough for now.
1148
1268
  // Tabs --> Studies --> DisplaySets --> Thumbnails
1149
1269
  const {
1150
1270
  StudyInstanceUIDs
1151
- } = (0,ui_src/* useImageViewer */.zG)();
1271
+ } = (0,ui_src/* useImageViewer */.Bz)();
1152
1272
  const [{
1153
1273
  activeViewportId,
1154
1274
  viewports
1155
- }, viewportGridService] = (0,ui_src/* useViewportGrid */.O_)();
1156
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.I)();
1275
+ }, viewportGridService] = (0,ui_src/* useViewportGrid */.ih)();
1276
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
1157
1277
  const [activeTabName, setActiveTabName] = (0,react.useState)('primary');
1158
1278
  const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = (0,react.useState)([...StudyInstanceUIDs]);
1159
1279
  const [studyDisplayList, setStudyDisplayList] = (0,react.useState)([]);
@@ -1369,7 +1489,7 @@ function PanelStudyBrowserTracking(_ref) {
1369
1489
  setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
1370
1490
  }
1371
1491
  }, [expandedStudyInstanceUIDs, jumpToDisplaySet, tabs]);
1372
- return /*#__PURE__*/react.createElement(ui_src/* StudyBrowser */.eX, {
1492
+ return /*#__PURE__*/react.createElement(ui_src/* StudyBrowser */.M4, {
1373
1493
  tabs: tabs,
1374
1494
  servicesManager: servicesManager,
1375
1495
  activeTabName: activeTabName,
@@ -1432,14 +1552,6 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1432
1552
  const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID];
1433
1553
  const componentType = _getComponentType(ds);
1434
1554
  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
1555
  const array = componentType === 'thumbnailTracked' ? thumbnailDisplaySets : thumbnailNoImageDisplaySets;
1444
1556
  const {
1445
1557
  displaySetInstanceUID
@@ -1461,10 +1573,8 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1461
1573
  displaySetInstanceUID
1462
1574
  // .. Any other data to pass
1463
1575
  },
1464
-
1465
1576
  isTracked: trackedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID),
1466
- isHydratedForDerivedDisplaySet: ds.isHydrated,
1467
- viewportIdentificator
1577
+ isHydratedForDerivedDisplaySet: ds.isHydrated
1468
1578
  };
1469
1579
  if (componentType === 'thumbnailNoImage') {
1470
1580
  if (dataSource.reject && dataSource.reject.series) {
@@ -1475,7 +1585,7 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1475
1585
  centralize: true,
1476
1586
  isDraggable: false,
1477
1587
  showOverlay: true,
1478
- content: ui_src/* Dialog */.Vq,
1588
+ content: ui_src/* Dialog */.lG,
1479
1589
  contentProps: {
1480
1590
  title: 'Delete Report',
1481
1591
  body: () => /*#__PURE__*/react.createElement("div", {
@@ -1486,11 +1596,11 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1486
1596
  actions: [{
1487
1597
  id: 'cancel',
1488
1598
  text: 'Cancel',
1489
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary
1599
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary
1490
1600
  }, {
1491
1601
  id: 'yes',
1492
1602
  text: 'Yes',
1493
- type: ui_src/* ButtonEnums.type */.LZ.dt.primary,
1603
+ type: ui_src/* ButtonEnums.type */.Ny.NW.primary,
1494
1604
  classes: ['reject-yes-button']
1495
1605
  }],
1496
1606
  onClose: () => uiDialogService.dismiss({
@@ -1500,10 +1610,9 @@ viewportGridService, dataSource, displaySetService, uiDialogService, uiNotificat
1500
1610
  const yesButton = document.querySelector('.reject-yes-button');
1501
1611
  yesButton.focus();
1502
1612
  },
1503
- onSubmit: async _ref2 => {
1504
- let {
1505
- action
1506
- } = _ref2;
1613
+ onSubmit: async ({
1614
+ action
1615
+ }) => {
1507
1616
  switch (action.id) {
1508
1617
  case 'yes':
1509
1618
  try {
@@ -1657,6 +1766,11 @@ function _findTabAndStudyOfDisplaySet(displaySetInstanceUID, tabs) {
1657
1766
  function getImageSrcFromImageId(cornerstone, imageId) {
1658
1767
  return new Promise((resolve, reject) => {
1659
1768
  const canvas = document.createElement('canvas');
1769
+ // Note: the default width and height of the canvas is 300x150
1770
+ // but we need to set the width and height to the same number since
1771
+ // the thumbnails are usually square and we want to maintain the aspect ratio
1772
+ canvas.width = 128 / window.devicePixelRatio;
1773
+ canvas.height = 128 / window.devicePixelRatio;
1660
1774
  cornerstone.utilities.loadImageToCanvas({
1661
1775
  canvas,
1662
1776
  imageId
@@ -1699,16 +1813,15 @@ function _getStudyForPatientUtility(extensionManager) {
1699
1813
  * @param {object} commandsManager
1700
1814
  * @param {object} extensionManager
1701
1815
  */
1702
- function WrappedPanelStudyBrowserTracking(_ref) {
1703
- let {
1704
- commandsManager,
1705
- extensionManager,
1706
- servicesManager
1707
- } = _ref;
1816
+ function WrappedPanelStudyBrowserTracking({
1817
+ commandsManager,
1818
+ extensionManager,
1819
+ servicesManager
1820
+ }) {
1708
1821
  const dataSource = extensionManager.getActiveDataSource()[0];
1709
1822
  const getStudiesForPatientByMRN = _getStudyForPatientUtility(extensionManager);
1710
1823
  const _getStudiesForPatientByMRN = getStudiesForPatientByMRN.bind(null, dataSource);
1711
- const _getImageSrcFromImageId = _createGetImageSrcFromImageIdFn(extensionManager);
1824
+ const _getImageSrcFromImageId = (0,react.useCallback)(_createGetImageSrcFromImageIdFn(extensionManager), []);
1712
1825
  const _requestDisplaySetCreationForStudy = PanelStudyBrowserTracking_requestDisplaySetCreationForStudy.bind(null, dataSource);
1713
1826
  return /*#__PURE__*/react.createElement(PanelStudyBrowserTracking_PanelStudyBrowserTracking, {
1714
1827
  servicesManager: servicesManager,
@@ -1746,31 +1859,32 @@ WrappedPanelStudyBrowserTracking.propTypes = {
1746
1859
  };
1747
1860
  /* harmony default export */ const panels_PanelStudyBrowserTracking = (WrappedPanelStudyBrowserTracking);
1748
1861
  // EXTERNAL MODULE: ./hooks/index.js + 1 modules
1749
- var hooks = __webpack_require__(10800);
1862
+ var hooks = __webpack_require__(25103);
1863
+ // EXTERNAL MODULE: ./state/index.js + 1 modules
1864
+ var state = __webpack_require__(15575);
1750
1865
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/ActionButtons.tsx
1751
1866
 
1752
1867
 
1753
1868
 
1754
1869
 
1755
- function ActionButtons(_ref) {
1756
- let {
1757
- onExportClick,
1758
- onCreateReportClick,
1759
- disabled
1760
- } = _ref;
1870
+ function ActionButtons({
1871
+ onExportClick,
1872
+ onCreateReportClick,
1873
+ disabled
1874
+ }) {
1761
1875
  const {
1762
1876
  t
1763
- } = (0,es/* useTranslation */.$G)('MeasurementTable');
1764
- return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(ui_src/* Button */.zx, {
1877
+ } = (0,es/* useTranslation */.Bd)('MeasurementTable');
1878
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(ui_src/* Button */.$n, {
1765
1879
  onClick: onExportClick,
1766
1880
  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, {
1881
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary,
1882
+ size: ui_src/* ButtonEnums.size */.Ny.Ej.small
1883
+ }, t('Export')), /*#__PURE__*/react.createElement(ui_src/* Button */.$n, {
1770
1884
  className: "ml-2",
1771
1885
  onClick: onCreateReportClick,
1772
- type: ui_src/* ButtonEnums.type */.LZ.dt.secondary,
1773
- size: ui_src/* ButtonEnums.size */.LZ.dp.small,
1886
+ type: ui_src/* ButtonEnums.type */.Ny.NW.secondary,
1887
+ size: ui_src/* ButtonEnums.size */.Ny.Ej.small,
1774
1888
  disabled: disabled
1775
1889
  }, t('Create Report')));
1776
1890
  }
@@ -1786,7 +1900,7 @@ ActionButtons.defaultProps = {
1786
1900
  };
1787
1901
  /* harmony default export */ const PanelMeasurementTableTracking_ActionButtons = (ActionButtons);
1788
1902
  // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
1789
- var lodash_debounce = __webpack_require__(8324);
1903
+ var lodash_debounce = __webpack_require__(14771);
1790
1904
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
1791
1905
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/index.tsx
1792
1906
 
@@ -1797,6 +1911,7 @@ var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce
1797
1911
 
1798
1912
 
1799
1913
 
1914
+
1800
1915
  const {
1801
1916
  downloadCSVReport
1802
1917
  } = src.utils;
@@ -1812,21 +1927,20 @@ const DISPLAY_STUDY_SUMMARY_INITIAL_VALUE = {
1812
1927
  // 'CT',
1813
1928
  description: '' // 'CHEST/ABD/PELVIS W CONTRAST',
1814
1929
  };
1815
-
1816
- function PanelMeasurementTableTracking(_ref) {
1817
- let {
1818
- servicesManager,
1819
- extensionManager
1820
- } = _ref;
1821
- const [viewportGrid] = (0,ui_src/* useViewportGrid */.O_)();
1930
+ function PanelMeasurementTableTracking({
1931
+ servicesManager,
1932
+ extensionManager
1933
+ }) {
1934
+ const [viewportGrid] = (0,ui_src/* useViewportGrid */.ih)();
1822
1935
  const [measurementChangeTimestamp, setMeasurementsUpdated] = (0,react.useState)(Date.now().toString());
1823
- const debouncedMeasurementChangeTimestamp = (0,hooks/* useDebounce */.N)(measurementChangeTimestamp, 200);
1936
+ const debouncedMeasurementChangeTimestamp = (0,hooks/* useDebounce */.d)(measurementChangeTimestamp, 200);
1824
1937
  const {
1825
1938
  measurementService,
1826
1939
  uiDialogService,
1827
- displaySetService
1940
+ displaySetService,
1941
+ customizationService
1828
1942
  } = servicesManager.services;
1829
- const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.I)();
1943
+ const [trackedMeasurements, sendTrackedMeasurementsEvent] = (0,getContextModule/* useTrackedMeasurements */.B)();
1830
1944
  const {
1831
1945
  trackedStudy,
1832
1946
  trackedSeries
@@ -1834,6 +1948,7 @@ function PanelMeasurementTableTracking(_ref) {
1834
1948
  const [displayStudySummary, setDisplayStudySummary] = (0,react.useState)(DISPLAY_STUDY_SUMMARY_INITIAL_VALUE);
1835
1949
  const [displayMeasurements, setDisplayMeasurements] = (0,react.useState)([]);
1836
1950
  const measurementsPanelRef = (0,react.useRef)(null);
1951
+ const [appConfig] = (0,state/* useAppConfig */.r)();
1837
1952
  (0,react.useEffect)(() => {
1838
1953
  const measurements = measurementService.getMeasurements();
1839
1954
  const filteredMeasurements = measurements.filter(m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID));
@@ -1909,109 +2024,40 @@ function PanelMeasurementTableTracking(_ref) {
1909
2024
  const trackedMeasurements = measurements.filter(m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID));
1910
2025
  downloadCSVReport(trackedMeasurements, measurementService);
1911
2026
  }
1912
- const jumpToImage = _ref2 => {
1913
- let {
1914
- uid,
1915
- isActive
1916
- } = _ref2;
2027
+ const jumpToImage = ({
2028
+ uid,
2029
+ isActive
2030
+ }) => {
1917
2031
  measurementService.jumpToMeasurement(viewportGrid.activeViewportId, uid);
1918
2032
  onMeasurementItemClickHandler({
1919
2033
  uid,
1920
2034
  isActive
1921
2035
  });
1922
2036
  };
1923
- const onMeasurementItemEditHandler = _ref3 => {
1924
- let {
1925
- uid,
1926
- isActive
1927
- } = _ref3;
1928
- const measurement = measurementService.getMeasurement(uid);
2037
+ const onMeasurementItemEditHandler = ({
2038
+ uid,
2039
+ isActive
2040
+ }) => {
1929
2041
  jumpToImage({
1930
2042
  uid,
1931
2043
  isActive
1932
2044
  });
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
- }
2045
+ const labelConfig = customizationService.get('measurementLabels');
2046
+ const measurement = measurementService.getMeasurement(uid);
2047
+ const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
2048
+ const {
2049
+ showLabelAnnotationPopup
2050
+ } = utilityModule.exports;
2051
+ showLabelAnnotationPopup(measurement, uiDialogService, labelConfig).then(val => {
2052
+ measurementService.update(uid, {
2053
+ ...val
2054
+ }, true);
2008
2055
  });
2009
2056
  };
2010
- const onMeasurementItemClickHandler = _ref6 => {
2011
- let {
2012
- uid,
2013
- isActive
2014
- } = _ref6;
2057
+ const onMeasurementItemClickHandler = ({
2058
+ uid,
2059
+ isActive
2060
+ }) => {
2015
2061
  if (!isActive) {
2016
2062
  const measurements = [...displayMeasurements];
2017
2063
  const measurement = measurements.find(m => m.uid === uid);
@@ -2026,23 +2072,23 @@ function PanelMeasurementTableTracking(_ref) {
2026
2072
  className: "invisible-scrollbar overflow-y-auto overflow-x-hidden",
2027
2073
  ref: measurementsPanelRef,
2028
2074
  "data-cy": 'trackedMeasurements-panel'
2029
- }, displayStudySummary.key && /*#__PURE__*/react.createElement(ui_src/* StudySummary */.YL, {
2075
+ }, displayStudySummary.key && /*#__PURE__*/react.createElement(ui_src/* StudySummary */.u3, {
2030
2076
  date: PanelMeasurementTableTracking_formatDate(displayStudySummary.date),
2031
2077
  modality: displayStudySummary.modality,
2032
2078
  description: displayStudySummary.description
2033
- }), /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.wt, {
2079
+ }), /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.V, {
2034
2080
  title: "Measurements",
2035
2081
  data: displayMeasurementsWithoutFindings,
2036
2082
  servicesManager: servicesManager,
2037
2083
  onClick: jumpToImage,
2038
2084
  onEdit: onMeasurementItemEditHandler
2039
- }), additionalFindings.length !== 0 && /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.wt, {
2085
+ }), additionalFindings.length !== 0 && /*#__PURE__*/react.createElement(ui_src/* MeasurementTable */.V, {
2040
2086
  title: "Additional Findings",
2041
2087
  data: additionalFindings,
2042
2088
  servicesManager: servicesManager,
2043
2089
  onClick: jumpToImage,
2044
2090
  onEdit: onMeasurementItemEditHandler
2045
- })), /*#__PURE__*/react.createElement("div", {
2091
+ })), !appConfig?.disableEditing && /*#__PURE__*/react.createElement("div", {
2046
2092
  className: "flex justify-center p-4"
2047
2093
  }, /*#__PURE__*/react.createElement(PanelMeasurementTableTracking_ActionButtons, {
2048
2094
  onExportClick: exportReport,
@@ -2123,24 +2169,26 @@ function _mapMeasurementToDisplay(measurement, types, displaySetService) {
2123
2169
 
2124
2170
 
2125
2171
 
2172
+ // EXTERNAL MODULE: ../../../node_modules/i18next/dist/esm/i18next.js
2173
+ var i18next = __webpack_require__(92344);
2126
2174
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/getPanelModule.tsx
2127
2175
 
2128
2176
 
2177
+
2129
2178
  // TODO:
2130
2179
  // - No loading UI exists yet
2131
2180
  // - cancel promises when component is destroyed
2132
2181
  // - show errors in UI for thumbnails if promise fails
2133
- function getPanelModule(_ref) {
2134
- let {
2135
- commandsManager,
2136
- extensionManager,
2137
- servicesManager
2138
- } = _ref;
2182
+ function getPanelModule({
2183
+ commandsManager,
2184
+ extensionManager,
2185
+ servicesManager
2186
+ }) {
2139
2187
  return [{
2140
2188
  name: 'seriesList',
2141
2189
  iconName: 'tab-studies',
2142
2190
  iconLabel: 'Studies',
2143
- label: 'Studies',
2191
+ label: i18next/* default */.A.t('SidePanel:Studies'),
2144
2192
  component: panels_PanelStudyBrowserTracking.bind(null, {
2145
2193
  commandsManager,
2146
2194
  extensionManager,
@@ -2150,7 +2198,7 @@ function getPanelModule(_ref) {
2150
2198
  name: 'trackedMeasurements',
2151
2199
  iconName: 'tab-linear',
2152
2200
  iconLabel: 'Measure',
2153
- label: 'Measurements',
2201
+ label: i18next/* default */.A.t('SidePanel:Measurements'),
2154
2202
  component: panels_PanelMeasurementTableTracking.bind(null, {
2155
2203
  commandsManager,
2156
2204
  extensionManager,
@@ -2163,19 +2211,18 @@ function getPanelModule(_ref) {
2163
2211
  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
2212
 
2165
2213
  const Component = /*#__PURE__*/react.lazy(() => {
2166
- return __webpack_require__.e(/* import() */ 822).then(__webpack_require__.bind(__webpack_require__, 86822));
2214
+ return __webpack_require__.e(/* import() */ 862).then(__webpack_require__.bind(__webpack_require__, 49862));
2167
2215
  });
2168
2216
  const OHIFCornerstoneViewport = props => {
2169
2217
  return /*#__PURE__*/react.createElement(react.Suspense, {
2170
2218
  fallback: /*#__PURE__*/react.createElement("div", null, "Loading...")
2171
2219
  }, /*#__PURE__*/react.createElement(Component, props));
2172
2220
  };
2173
- function getViewportModule(_ref) {
2174
- let {
2175
- servicesManager,
2176
- commandsManager,
2177
- extensionManager
2178
- } = _ref;
2221
+ function getViewportModule({
2222
+ servicesManager,
2223
+ commandsManager,
2224
+ extensionManager
2225
+ }) {
2179
2226
  const ExtendedOHIFCornerstoneTrackingViewport = props => {
2180
2227
  return /*#__PURE__*/react.createElement(OHIFCornerstoneViewport, _extends({
2181
2228
  servicesManager: servicesManager,
@@ -2190,10 +2237,10 @@ function getViewportModule(_ref) {
2190
2237
  }
2191
2238
  /* harmony default export */ const src_getViewportModule = (getViewportModule);
2192
2239
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/package.json
2193
- const package_namespaceObject = JSON.parse('{"u2":"@ohif/extension-measurement-tracking"}');
2240
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-measurement-tracking"}');
2194
2241
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/id.js
2195
2242
 
2196
- const id = package_namespaceObject.u2;
2243
+ const id = package_namespaceObject.UU;
2197
2244
 
2198
2245
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/index.tsx
2199
2246
 
@@ -2205,7 +2252,7 @@ const measurementTrackingExtension = {
2205
2252
  * Only required property. Should be a unique value across all extensions.
2206
2253
  */
2207
2254
  id: id,
2208
- getContextModule: getContextModule/* default */.Z,
2255
+ getContextModule: getContextModule/* default */.A,
2209
2256
  getPanelModule: src_getPanelModule,
2210
2257
  getViewportModule: src_getViewportModule
2211
2258
  };