@ohif/app 3.8.0-beta.63 → 3.8.0-beta.65
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.
- package/dist/{121.bundle.f6c25e845985d96c423c.js → 121.bundle.fda405f29003c308ce09.js} +4 -4
- package/dist/{155.bundle.9e3dd18c9a3961232504.js → 155.bundle.a57744809d0f46030ee0.js} +12 -7
- package/dist/{188.bundle.528e9ad81159c776affa.js → 188.bundle.c448aed48915741e9f97.js} +2 -2
- package/dist/{270.bundle.fd387adff5b064fca506.js → 270.bundle.16ac8114c5c4ce006f4a.js} +51 -28
- package/dist/{295.bundle.c132f53e1397ef9d432a.js → 295.bundle.57700cd41fd87e1521b4.js} +4 -4
- package/dist/{339.bundle.591a0a6075220b14c249.js → 339.bundle.57dac3644803cefe3e3d.js} +27 -69
- package/dist/{68.bundle.efc5ba2a44aa2b96ee1a.js → 41.bundle.58b85dd990fb6fac615e.js} +280 -494
- package/dist/{250.bundle.d8b502b7ef6afc79a87e.js → 448.bundle.d195aba3aef25ec286d1.js} +284 -388
- package/dist/{530.bundle.ef1ea9d98f7b377a9d3a.js → 530.bundle.72d9812f117036615a38.js} +2 -2
- package/dist/{544.bundle.05b543f28d0c124950ef.js → 544.bundle.c3009e245ceb1554c70a.js} +5 -17
- package/dist/{559.bundle.fc08eab02848a451ed34.js → 559.bundle.05bd51e94422a2cab116.js} +6 -10
- package/dist/{594.bundle.3a5fa2e7d5636ddccb32.js → 594.bundle.14b122ab995e4b13e652.js} +147 -188
- package/dist/{50.bundle.55ad62f1f656f5fd5a36.js → 638.bundle.a63003e18bed65f227bb.js} +159 -395
- package/dist/699.bundle.efc67171e6d212f25a24.js +774 -0
- package/dist/{963.bundle.874395d7b2d80f9e5831.js → 701.bundle.bc40f1a7d5d6b1a4dd38.js} +554 -215
- package/dist/{724.bundle.294a41af83a5af33f3cc.js → 724.bundle.3945f8d2e9c8b0b23628.js} +86 -164
- package/dist/{862.bundle.c8eba798644149650775.js → 862.bundle.d787dac01f4567560a42.js} +2 -2
- package/dist/{889.bundle.a776c87be9e3580f3437.js → 889.bundle.ffc727aa6d1a74f2138d.js} +180 -207
- package/dist/{704.bundle.842ada45436f1fb029aa.js → 90.bundle.abde898ebd3c74f521f9.js} +323 -334
- package/dist/{905.bundle.73a711d0255cb988fa6e.js → 905.bundle.6b5b42b2403e4676bb3a.js} +119 -89
- package/dist/{907.bundle.6932f0458b9e0143c18a.js → 907.bundle.fbd5768fa5b53f9d3f86.js} +2 -14
- package/dist/{961.bundle.6cf1599ed3a2871c040f.js → 961.bundle.8bb5a713fc5a3817c6a6.js} +2 -15
- package/dist/{987.bundle.e7c041a6dfb4ddb41813.js → 987.bundle.91d4867efedd5b4d84cb.js} +5 -1
- package/dist/{app.bundle.22ffa6050ebef98b2066.js → app.bundle.0c24b249dc8b631916ef.js} +2234 -980
- package/dist/app.bundle.css +1 -1
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.99be036bab9b7f011b0c.js → polySeg.bundle.c1cec6312eb6c6dc3701.js} +1 -1
- package/dist/sw.js +1 -1
- package/package.json +17 -17
- package/dist/317.bundle.dd0879c5035c4b90fad3.js +0 -562
- /package/dist/{164.bundle.710b5db3fef4d536a59f.js → 164.bundle.ff12d6019a627cda2a6c.js} +0 -0
- /package/dist/{50.css → 638.css} +0 -0
- /package/dist/{963.css → 701.css} +0 -0
|
@@ -23,10 +23,10 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
|
|
|
23
23
|
var esm = __webpack_require__(20767);
|
|
24
24
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 383 modules
|
|
25
25
|
var dist_esm = __webpack_require__(50719);
|
|
26
|
-
// EXTERNAL MODULE: ../../core/src/index.ts +
|
|
27
|
-
var src = __webpack_require__(
|
|
28
|
-
// EXTERNAL MODULE: ../../ui/src/index.js +
|
|
29
|
-
var ui_src = __webpack_require__(
|
|
26
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 67 modules
|
|
27
|
+
var src = __webpack_require__(78198);
|
|
28
|
+
// EXTERNAL MODULE: ../../ui/src/index.js + 497 modules
|
|
29
|
+
var ui_src = __webpack_require__(58046);
|
|
30
30
|
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
|
|
31
31
|
var state = __webpack_require__(71353);
|
|
32
32
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.css
|
|
@@ -262,78 +262,11 @@ function getCompression(imageId) {
|
|
|
262
262
|
|
|
263
263
|
|
|
264
264
|
const EPSILON = 1e-4;
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
customization
|
|
271
|
-
}) {
|
|
272
|
-
const {
|
|
273
|
-
windowWidth,
|
|
274
|
-
windowCenter
|
|
275
|
-
} = voi;
|
|
276
|
-
if (typeof windowCenter !== 'number' || typeof windowWidth !== 'number') {
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
return /*#__PURE__*/react.createElement("div", {
|
|
280
|
-
className: "overlay-item flex flex-row",
|
|
281
|
-
style: {
|
|
282
|
-
color: customization && customization.color || undefined
|
|
283
|
-
}
|
|
284
|
-
}, /*#__PURE__*/react.createElement("span", {
|
|
285
|
-
className: "mr-1 shrink-0"
|
|
286
|
-
}, "W:"), /*#__PURE__*/react.createElement("span", {
|
|
287
|
-
className: "ml-1 mr-2 shrink-0 font-light"
|
|
288
|
-
}, windowWidth.toFixed(0)), /*#__PURE__*/react.createElement("span", {
|
|
289
|
-
className: "mr-1 shrink-0"
|
|
290
|
-
}, "L:"), /*#__PURE__*/react.createElement("span", {
|
|
291
|
-
className: "ml-1 shrink-0 font-light"
|
|
292
|
-
}, windowCenter.toFixed(0)));
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/**
|
|
296
|
-
* Zoom Level Overlay item
|
|
297
|
-
*/
|
|
298
|
-
function ZoomOverlayItem({
|
|
299
|
-
scale,
|
|
300
|
-
customization
|
|
301
|
-
}) {
|
|
302
|
-
return /*#__PURE__*/react.createElement("div", {
|
|
303
|
-
className: "overlay-item flex flex-row",
|
|
304
|
-
style: {
|
|
305
|
-
color: customization && customization.color || undefined
|
|
306
|
-
}
|
|
307
|
-
}, /*#__PURE__*/react.createElement("span", {
|
|
308
|
-
className: "mr-1 shrink-0"
|
|
309
|
-
}, "Zoom:"), /*#__PURE__*/react.createElement("span", {
|
|
310
|
-
className: "font-light"
|
|
311
|
-
}, scale.toFixed(2), "x"));
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* Instance Number Overlay Item
|
|
316
|
-
*/
|
|
317
|
-
function InstanceNumberOverlayItem({
|
|
318
|
-
instanceNumber,
|
|
319
|
-
imageSliceData,
|
|
320
|
-
customization
|
|
321
|
-
}) {
|
|
322
|
-
const {
|
|
323
|
-
imageIndex,
|
|
324
|
-
numberOfSlices
|
|
325
|
-
} = imageSliceData;
|
|
326
|
-
return /*#__PURE__*/react.createElement("div", {
|
|
327
|
-
className: "overlay-item flex flex-row",
|
|
328
|
-
style: {
|
|
329
|
-
color: customization && customization.color || undefined
|
|
330
|
-
}
|
|
331
|
-
}, /*#__PURE__*/react.createElement("span", {
|
|
332
|
-
className: "mr-1 shrink-0"
|
|
333
|
-
}, "I:"), /*#__PURE__*/react.createElement("span", {
|
|
334
|
-
className: "font-light"
|
|
335
|
-
}, instanceNumber !== undefined && instanceNumber !== null ? `${instanceNumber} (${imageIndex + 1}/${numberOfSlices})` : `${imageIndex + 1}/${numberOfSlices}`));
|
|
336
|
-
}
|
|
265
|
+
const OverlayItemComponents = {
|
|
266
|
+
'ohif.overlayItem.windowLevel': VOIOverlayItem,
|
|
267
|
+
'ohif.overlayItem.zoomLevel': ZoomOverlayItem,
|
|
268
|
+
'ohif.overlayItem.instanceNumber': InstanceNumberOverlayItem
|
|
269
|
+
};
|
|
337
270
|
|
|
338
271
|
/**
|
|
339
272
|
* Customizable Viewport Overlay
|
|
@@ -346,16 +279,15 @@ function CustomizableViewportOverlay({
|
|
|
346
279
|
servicesManager
|
|
347
280
|
}) {
|
|
348
281
|
const {
|
|
349
|
-
toolbarService,
|
|
350
282
|
cornerstoneViewportService,
|
|
351
|
-
customizationService
|
|
283
|
+
customizationService,
|
|
284
|
+
toolGroupService
|
|
352
285
|
} = servicesManager.services;
|
|
353
286
|
const [voi, setVOI] = (0,react.useState)({
|
|
354
287
|
windowCenter: null,
|
|
355
288
|
windowWidth: null
|
|
356
289
|
});
|
|
357
290
|
const [scale, setScale] = (0,react.useState)(1);
|
|
358
|
-
const [activeTools, setActiveTools] = (0,react.useState)([]);
|
|
359
291
|
const {
|
|
360
292
|
imageIndex
|
|
361
293
|
} = imageSliceData;
|
|
@@ -363,26 +295,8 @@ function CustomizableViewportOverlay({
|
|
|
363
295
|
const topRightCustomization = customizationService.getModeCustomization('cornerstoneOverlayTopRight');
|
|
364
296
|
const bottomLeftCustomization = customizationService.getModeCustomization('cornerstoneOverlayBottomLeft');
|
|
365
297
|
const bottomRightCustomization = customizationService.getModeCustomization('cornerstoneOverlayBottomRight');
|
|
366
|
-
const instance = (0,react.useMemo)(() =>
|
|
367
|
-
|
|
368
|
-
return _getViewportInstance(viewportData, imageIndex);
|
|
369
|
-
} else {
|
|
370
|
-
return null;
|
|
371
|
-
}
|
|
372
|
-
}, [viewportData, imageIndex]);
|
|
373
|
-
const instanceNumber = (0,react.useMemo)(() => {
|
|
374
|
-
if (viewportData != null) {
|
|
375
|
-
return _getInstanceNumber(viewportData, viewportId, imageIndex, cornerstoneViewportService);
|
|
376
|
-
}
|
|
377
|
-
return null;
|
|
378
|
-
}, [viewportData, viewportId, imageIndex, cornerstoneViewportService]);
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Initial toolbar state
|
|
382
|
-
*/
|
|
383
|
-
(0,react.useEffect)(() => {
|
|
384
|
-
setActiveTools(toolbarService.getActiveTools());
|
|
385
|
-
}, []);
|
|
298
|
+
const instance = (0,react.useMemo)(() => viewportData ? getViewportInstance(viewportData, imageIndex) : null, [viewportData, imageIndex]);
|
|
299
|
+
const instanceNumber = (0,react.useMemo)(() => viewportData ? getInstanceNumber(viewportData, viewportId, imageIndex, cornerstoneViewportService) : null, [viewportData, viewportId, imageIndex, cornerstoneViewportService]);
|
|
386
300
|
|
|
387
301
|
/**
|
|
388
302
|
* Updating the VOI when the viewport changes its voi
|
|
@@ -449,21 +363,6 @@ function CustomizableViewportOverlay({
|
|
|
449
363
|
element.removeEventListener(dist_esm.Enums.Events.CAMERA_MODIFIED, updateScale);
|
|
450
364
|
};
|
|
451
365
|
}, [viewportId, viewportData, cornerstoneViewportService, element]);
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* Updating the active tools when the toolbar changes
|
|
455
|
-
*/
|
|
456
|
-
// Todo: this should act on the toolGroups instead of the toolbar state
|
|
457
|
-
(0,react.useEffect)(() => {
|
|
458
|
-
const {
|
|
459
|
-
unsubscribe
|
|
460
|
-
} = toolbarService.subscribe(toolbarService.EVENTS.TOOL_BAR_STATE_MODIFIED, () => {
|
|
461
|
-
setActiveTools(toolbarService.getActiveTools());
|
|
462
|
-
});
|
|
463
|
-
return () => {
|
|
464
|
-
unsubscribe();
|
|
465
|
-
};
|
|
466
|
-
}, [toolbarService]);
|
|
467
366
|
const _renderOverlayItem = (0,react.useCallback)(item => {
|
|
468
367
|
const overlayItemProps = {
|
|
469
368
|
element,
|
|
@@ -479,17 +378,19 @@ function CustomizableViewportOverlay({
|
|
|
479
378
|
formatNumberPrecision: formatNumberPrecision
|
|
480
379
|
},
|
|
481
380
|
instance,
|
|
482
|
-
// calculated
|
|
483
381
|
voi,
|
|
484
382
|
scale,
|
|
485
383
|
instanceNumber
|
|
486
384
|
};
|
|
487
|
-
if (item
|
|
488
|
-
return
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
385
|
+
if (!item) {
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
const {
|
|
389
|
+
customizationType
|
|
390
|
+
} = item;
|
|
391
|
+
const OverlayItemComponent = OverlayItemComponents[customizationType];
|
|
392
|
+
if (OverlayItemComponent) {
|
|
393
|
+
return /*#__PURE__*/react.createElement(OverlayItemComponent, overlayItemProps);
|
|
493
394
|
} else {
|
|
494
395
|
const renderItem = customizationService.transform(item);
|
|
495
396
|
if (typeof renderItem.content === 'function') {
|
|
@@ -497,68 +398,68 @@ function CustomizableViewportOverlay({
|
|
|
497
398
|
}
|
|
498
399
|
}
|
|
499
400
|
}, [element, viewportData, imageSliceData, viewportId, servicesManager, customizationService, instance, voi, scale, instanceNumber]);
|
|
500
|
-
const
|
|
501
|
-
const items =
|
|
401
|
+
const getContent = (0,react.useCallback)((customization, defaultItems, keyPrefix) => {
|
|
402
|
+
const items = customization?.items ?? defaultItems;
|
|
403
|
+
return /*#__PURE__*/react.createElement(react.Fragment, null, items.map((item, index) => /*#__PURE__*/react.createElement("div", {
|
|
404
|
+
key: `${keyPrefix}_${index}`
|
|
405
|
+
}, item?.condition ? item.condition() ? _renderOverlayItem(item) : null : _renderOverlayItem(item))));
|
|
406
|
+
}, [_renderOverlayItem]);
|
|
407
|
+
return /*#__PURE__*/react.createElement(ui_src/* ViewportOverlay */.pU, {
|
|
408
|
+
topLeft:
|
|
409
|
+
/**
|
|
410
|
+
* Inline default overlay items for a more standard expansion
|
|
411
|
+
*/
|
|
412
|
+
getContent(topLeftCustomization, [{
|
|
502
413
|
id: 'WindowLevel',
|
|
503
414
|
customizationType: 'ohif.overlayItem.windowLevel'
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
415
|
+
}, {
|
|
416
|
+
id: 'ZoomLevel',
|
|
417
|
+
customizationType: 'ohif.overlayItem.zoomLevel',
|
|
418
|
+
condition: () => {
|
|
419
|
+
const activeToolName = toolGroupService.getActiveToolForViewport(viewportId);
|
|
420
|
+
return activeToolName === 'Zoom';
|
|
421
|
+
}
|
|
422
|
+
}], 'topLeftOverlayItem'),
|
|
423
|
+
topRight: getContent(topRightCustomization, [{
|
|
424
|
+
id: 'InstanceNumber',
|
|
512
425
|
customizationType: 'ohif.overlayItem.instanceNumber'
|
|
513
|
-
}]
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
}, _renderOverlayItem(item))));
|
|
517
|
-
}, [topRightCustomization, _renderOverlayItem]);
|
|
518
|
-
const getBottomLeftContent = (0,react.useCallback)(() => {
|
|
519
|
-
const items = bottomLeftCustomization?.items || [];
|
|
520
|
-
return /*#__PURE__*/react.createElement(react.Fragment, null, items.map((item, i) => /*#__PURE__*/react.createElement("div", {
|
|
521
|
-
key: `bottomLeftOverlayItem_${i}`
|
|
522
|
-
}, _renderOverlayItem(item))));
|
|
523
|
-
}, [bottomLeftCustomization, _renderOverlayItem]);
|
|
524
|
-
const getBottomRightContent = (0,react.useCallback)(() => {
|
|
525
|
-
const items = bottomRightCustomization?.items || [];
|
|
526
|
-
return /*#__PURE__*/react.createElement(react.Fragment, null, items.map((item, i) => /*#__PURE__*/react.createElement("div", {
|
|
527
|
-
key: `bottomRightOverlayItem_${i}`
|
|
528
|
-
}, _renderOverlayItem(item))));
|
|
529
|
-
}, [bottomRightCustomization, _renderOverlayItem]);
|
|
530
|
-
return /*#__PURE__*/react.createElement(ui_src/* ViewportOverlay */.pU, {
|
|
531
|
-
topLeft: getTopLeftContent(),
|
|
532
|
-
topRight: getTopRightContent(),
|
|
533
|
-
bottomLeft: getBottomLeftContent(),
|
|
534
|
-
bottomRight: getBottomRightContent()
|
|
426
|
+
}], 'topRightOverlayItem'),
|
|
427
|
+
bottomLeft: getContent(bottomLeftCustomization, [null], 'bottomLeftOverlayItem'),
|
|
428
|
+
bottomRight: getContent(bottomRightCustomization, [null], 'bottomRightOverlayItem')
|
|
535
429
|
});
|
|
536
430
|
}
|
|
537
|
-
|
|
431
|
+
const getViewportInstance = (viewportData, imageIndex) => {
|
|
432
|
+
const {
|
|
433
|
+
viewportType,
|
|
434
|
+
data
|
|
435
|
+
} = viewportData;
|
|
538
436
|
let imageId = null;
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
437
|
+
switch (viewportType) {
|
|
438
|
+
case dist_esm.Enums.ViewportType.STACK:
|
|
439
|
+
imageId = data.imageIds[imageIndex];
|
|
440
|
+
break;
|
|
441
|
+
case dist_esm.Enums.ViewportType.ORTHOGRAPHIC:
|
|
442
|
+
if (data?.length === 1) {
|
|
443
|
+
imageId = data[0].imageIds[imageIndex];
|
|
444
|
+
}
|
|
445
|
+
break;
|
|
446
|
+
default:
|
|
447
|
+
break;
|
|
547
448
|
}
|
|
548
449
|
return imageId ? dist_esm.metaData.get('instance', imageId) || {} : {};
|
|
549
|
-
}
|
|
550
|
-
|
|
450
|
+
};
|
|
451
|
+
const getInstanceNumber = (viewportData, viewportId, imageIndex, cornerstoneViewportService) => {
|
|
551
452
|
let instanceNumber;
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
453
|
+
switch (viewportData.viewportType) {
|
|
454
|
+
case dist_esm.Enums.ViewportType.STACK:
|
|
455
|
+
instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex);
|
|
456
|
+
break;
|
|
457
|
+
case dist_esm.Enums.ViewportType.ORTHOGRAPHIC:
|
|
458
|
+
instanceNumber = _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService);
|
|
459
|
+
break;
|
|
559
460
|
}
|
|
560
|
-
return instanceNumber;
|
|
561
|
-
}
|
|
461
|
+
return instanceNumber ?? null;
|
|
462
|
+
};
|
|
562
463
|
function _getInstanceNumberFromStack(viewportData, imageIndex) {
|
|
563
464
|
const imageIds = viewportData.data.imageIds;
|
|
564
465
|
const imageId = imageIds[imageIndex];
|
|
@@ -617,6 +518,79 @@ function _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewp
|
|
|
617
518
|
return parseInt(instanceNumber);
|
|
618
519
|
}
|
|
619
520
|
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Window Level / Center Overlay item
|
|
524
|
+
*/
|
|
525
|
+
function VOIOverlayItem({
|
|
526
|
+
voi,
|
|
527
|
+
customization
|
|
528
|
+
}) {
|
|
529
|
+
const {
|
|
530
|
+
windowWidth,
|
|
531
|
+
windowCenter
|
|
532
|
+
} = voi;
|
|
533
|
+
if (typeof windowCenter !== 'number' || typeof windowWidth !== 'number') {
|
|
534
|
+
return null;
|
|
535
|
+
}
|
|
536
|
+
return /*#__PURE__*/react.createElement("div", {
|
|
537
|
+
className: "overlay-item flex flex-row",
|
|
538
|
+
style: {
|
|
539
|
+
color: customization && customization.color || undefined
|
|
540
|
+
}
|
|
541
|
+
}, /*#__PURE__*/react.createElement("span", {
|
|
542
|
+
className: "mr-1 shrink-0"
|
|
543
|
+
}, "W:"), /*#__PURE__*/react.createElement("span", {
|
|
544
|
+
className: "ml-1 mr-2 shrink-0 font-light"
|
|
545
|
+
}, windowWidth.toFixed(0)), /*#__PURE__*/react.createElement("span", {
|
|
546
|
+
className: "mr-1 shrink-0"
|
|
547
|
+
}, "L:"), /*#__PURE__*/react.createElement("span", {
|
|
548
|
+
className: "ml-1 shrink-0 font-light"
|
|
549
|
+
}, windowCenter.toFixed(0)));
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Zoom Level Overlay item
|
|
554
|
+
*/
|
|
555
|
+
function ZoomOverlayItem({
|
|
556
|
+
scale,
|
|
557
|
+
customization
|
|
558
|
+
}) {
|
|
559
|
+
return /*#__PURE__*/react.createElement("div", {
|
|
560
|
+
className: "overlay-item flex flex-row",
|
|
561
|
+
style: {
|
|
562
|
+
color: customization && customization.color || undefined
|
|
563
|
+
}
|
|
564
|
+
}, /*#__PURE__*/react.createElement("span", {
|
|
565
|
+
className: "mr-1 shrink-0"
|
|
566
|
+
}, "Zoom:"), /*#__PURE__*/react.createElement("span", {
|
|
567
|
+
className: "font-light"
|
|
568
|
+
}, scale.toFixed(2), "x"));
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Instance Number Overlay Item
|
|
573
|
+
*/
|
|
574
|
+
function InstanceNumberOverlayItem({
|
|
575
|
+
instanceNumber,
|
|
576
|
+
imageSliceData,
|
|
577
|
+
customization
|
|
578
|
+
}) {
|
|
579
|
+
const {
|
|
580
|
+
imageIndex,
|
|
581
|
+
numberOfSlices
|
|
582
|
+
} = imageSliceData;
|
|
583
|
+
return /*#__PURE__*/react.createElement("div", {
|
|
584
|
+
className: "overlay-item flex flex-row",
|
|
585
|
+
style: {
|
|
586
|
+
color: customization && customization.color || undefined
|
|
587
|
+
}
|
|
588
|
+
}, /*#__PURE__*/react.createElement("span", {
|
|
589
|
+
className: "mr-1 shrink-0"
|
|
590
|
+
}, "I:"), /*#__PURE__*/react.createElement("span", {
|
|
591
|
+
className: "font-light"
|
|
592
|
+
}, instanceNumber !== undefined && instanceNumber !== null ? `${instanceNumber} (${imageIndex + 1}/${numberOfSlices})` : `${imageIndex + 1}/${numberOfSlices}`));
|
|
593
|
+
}
|
|
620
594
|
CustomizableViewportOverlay.propTypes = {
|
|
621
595
|
viewportData: (prop_types_default()).object,
|
|
622
596
|
imageIndex: (prop_types_default()).number,
|
|
@@ -965,33 +939,20 @@ function WrappedCinePlayer({
|
|
|
965
939
|
servicesManager
|
|
966
940
|
}) {
|
|
967
941
|
const {
|
|
968
|
-
toolbarService,
|
|
969
942
|
customizationService,
|
|
970
943
|
displaySetService,
|
|
971
|
-
viewportGridService
|
|
972
|
-
cineService
|
|
944
|
+
viewportGridService
|
|
973
945
|
} = servicesManager.services;
|
|
974
946
|
const [{
|
|
975
947
|
isCineEnabled,
|
|
976
948
|
cines
|
|
977
|
-
}] = (0,ui_src/* useCine */.tq)();
|
|
949
|
+
}, api] = (0,ui_src/* useCine */.tq)();
|
|
978
950
|
const [newStackFrameRate, setNewStackFrameRate] = (0,react.useState)(24);
|
|
979
951
|
const [appConfig] = (0,state_0/* useAppConfig */.r)();
|
|
952
|
+
const isMountedRef = (0,react.useRef)(null);
|
|
980
953
|
const {
|
|
981
954
|
component: CinePlayerComponent = ui_src/* CinePlayer */.F0
|
|
982
955
|
} = customizationService.get('cinePlayer') ?? {};
|
|
983
|
-
const handleCineClose = () => {
|
|
984
|
-
toolbarService.recordInteraction({
|
|
985
|
-
groupId: 'MoreTools',
|
|
986
|
-
interactionType: 'toggle',
|
|
987
|
-
commands: [{
|
|
988
|
-
commandName: 'toggleCine',
|
|
989
|
-
commandOptions: {},
|
|
990
|
-
toolName: 'cine',
|
|
991
|
-
context: 'CORNERSTONE'
|
|
992
|
-
}]
|
|
993
|
-
});
|
|
994
|
-
};
|
|
995
956
|
const cineHandler = () => {
|
|
996
957
|
if (!cines || !cines[viewportId] || !enabledVPElement) {
|
|
997
958
|
return;
|
|
@@ -1001,11 +962,11 @@ function WrappedCinePlayer({
|
|
|
1001
962
|
const frameRate = cine.frameRate || 24;
|
|
1002
963
|
const validFrameRate = Math.max(frameRate, 1);
|
|
1003
964
|
if (isPlaying) {
|
|
1004
|
-
|
|
965
|
+
api.playClip(enabledVPElement, {
|
|
1005
966
|
framesPerSecond: validFrameRate
|
|
1006
967
|
});
|
|
1007
968
|
} else {
|
|
1008
|
-
|
|
969
|
+
api.stopClip(enabledVPElement);
|
|
1009
970
|
}
|
|
1010
971
|
};
|
|
1011
972
|
const newStackCineHandler = (0,react.useCallback)(() => {
|
|
@@ -1027,19 +988,22 @@ function WrappedCinePlayer({
|
|
|
1027
988
|
}
|
|
1028
989
|
});
|
|
1029
990
|
if (isPlaying) {
|
|
1030
|
-
|
|
991
|
+
api.setIsCineEnabled(isPlaying);
|
|
1031
992
|
}
|
|
1032
|
-
|
|
993
|
+
api.setCine({
|
|
1033
994
|
id: viewportId,
|
|
1034
995
|
isPlaying,
|
|
1035
996
|
frameRate
|
|
1036
997
|
});
|
|
1037
998
|
setNewStackFrameRate(frameRate);
|
|
1038
|
-
}, [
|
|
999
|
+
}, [displaySetService, viewportId, viewportGridService, cines]);
|
|
1039
1000
|
(0,react.useEffect)(() => {
|
|
1001
|
+
isMountedRef.current = true;
|
|
1040
1002
|
dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, newStackCineHandler);
|
|
1041
1003
|
return () => {
|
|
1042
|
-
|
|
1004
|
+
isMountedRef.current = false;
|
|
1005
|
+
api.stopClip(enabledVPElement);
|
|
1006
|
+
api.setCine({
|
|
1043
1007
|
id: viewportId,
|
|
1044
1008
|
isPlaying: false
|
|
1045
1009
|
});
|
|
@@ -1047,28 +1011,35 @@ function WrappedCinePlayer({
|
|
|
1047
1011
|
};
|
|
1048
1012
|
}, [enabledVPElement, newStackCineHandler]);
|
|
1049
1013
|
(0,react.useEffect)(() => {
|
|
1050
|
-
if (!cines || !cines[viewportId] || !enabledVPElement) {
|
|
1014
|
+
if (!cines || !cines[viewportId] || !enabledVPElement || !isMountedRef.current) {
|
|
1051
1015
|
return;
|
|
1052
1016
|
}
|
|
1053
1017
|
cineHandler();
|
|
1054
1018
|
return () => {
|
|
1055
|
-
|
|
1056
|
-
cineService.stopClip(enabledVPElement);
|
|
1057
|
-
}
|
|
1019
|
+
api.stopClip(enabledVPElement);
|
|
1058
1020
|
};
|
|
1059
|
-
}, [cines, viewportId,
|
|
1021
|
+
}, [cines, viewportId, enabledVPElement, cineHandler]);
|
|
1060
1022
|
const cine = cines[viewportId];
|
|
1061
1023
|
const isPlaying = cine && cine.isPlaying || false;
|
|
1062
1024
|
return isCineEnabled && /*#__PURE__*/react.createElement(CinePlayerComponent, {
|
|
1063
1025
|
className: "absolute left-1/2 bottom-3 -translate-x-1/2",
|
|
1064
1026
|
frameRate: newStackFrameRate,
|
|
1065
1027
|
isPlaying: isPlaying,
|
|
1066
|
-
onClose:
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1028
|
+
onClose: () => {
|
|
1029
|
+
// also stop the clip
|
|
1030
|
+
api.setCine({
|
|
1031
|
+
id: viewportId,
|
|
1032
|
+
isPlaying: false
|
|
1033
|
+
});
|
|
1034
|
+
api.setIsCineEnabled(false);
|
|
1035
|
+
},
|
|
1036
|
+
onPlayPauseChange: isPlaying => {
|
|
1037
|
+
api.setCine({
|
|
1038
|
+
id: viewportId,
|
|
1039
|
+
isPlaying
|
|
1040
|
+
});
|
|
1041
|
+
},
|
|
1042
|
+
onFrameRateChange: frameRate => api.setCine({
|
|
1072
1043
|
id: viewportId,
|
|
1073
1044
|
frameRate
|
|
1074
1045
|
})
|
|
@@ -1161,7 +1132,8 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1161
1132
|
// Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation
|
|
1162
1133
|
// of the imageData in the OHIFCornerstoneViewport. This prop is used
|
|
1163
1134
|
// to set the initial state of the viewport's first image to render
|
|
1164
|
-
initialImageIndex
|
|
1135
|
+
initialImageIndex,
|
|
1136
|
+
onReady
|
|
1165
1137
|
} = props;
|
|
1166
1138
|
const viewportId = viewportOptions.viewportId;
|
|
1167
1139
|
const [scrollbarHeight, setScrollbarHeight] = (0,react.useState)('100px');
|
|
@@ -1222,6 +1194,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1222
1194
|
}
|
|
1223
1195
|
if (onElementEnabled) {
|
|
1224
1196
|
onElementEnabled(evt);
|
|
1197
|
+
onReady?.(evt);
|
|
1225
1198
|
}
|
|
1226
1199
|
}, [viewportId, onElementEnabled, toolGroupService]);
|
|
1227
1200
|
|