@ohif/app 3.8.0-beta.70 → 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 (28) hide show
  1. package/dist/{41.bundle.6ec0794a483e9a30eb94.js → 41.bundle.b5a6c70f88cf565cad3e.js} +47 -4
  2. package/dist/{448.bundle.9177b9d909654efbc8d5.js → 448.bundle.599d81471e1d7f7962bc.js} +47 -2
  3. package/dist/{574.bundle.83afbc7922736fc6846d.js → 574.bundle.b262cbe9f2afd7275271.js} +68 -46
  4. package/dist/{595.bundle.1c1a50c4ff87763b786a.js → 595.bundle.c25147a450c67defb3d5.js} +31 -3
  5. package/dist/{699.bundle.db05df7b8e2ad605e928.js → 699.bundle.02c15c3cc4c04dbf7f51.js} +20 -2
  6. package/dist/{90.bundle.f41c8c4fc78cdfd4de30.js → 90.bundle.27637ef740946d5c8948.js} +3 -4
  7. package/dist/app.bundle.css +1 -1
  8. package/dist/{app.bundle.e21e5afd46fb064cb5de.js → app.bundle.d1c8b09ab30d221fddf0.js} +607 -244
  9. package/dist/index.html +1 -1
  10. package/dist/{polySeg.bundle.e7b4c29fb9173e8567b8.js → polySeg.bundle.01449e456b7d4a737d4f.js} +1 -1
  11. package/dist/sw.js +1 -1
  12. package/package.json +17 -17
  13. /package/dist/{155.bundle.0dabe8513b605b01ac3d.js → 155.bundle.091ace1591aff1f6b679.js} +0 -0
  14. /package/dist/{164.bundle.0b1a2be351543c1433e8.js → 164.bundle.fcc94cd4e142a409769d.js} +0 -0
  15. /package/dist/{188.bundle.81e83b073b6fd4ae0058.js → 188.bundle.0081530bd886a18676eb.js} +0 -0
  16. /package/dist/{191.bundle.7d89c921abefd1140d50.js → 191.bundle.ef35ed1f90a988b3952b.js} +0 -0
  17. /package/dist/{2.bundle.04dbbf67a52fe109749c.js → 2.bundle.ab8937194aad592bc7b4.js} +0 -0
  18. /package/dist/{342.bundle.6e49f63ea7cea4645c0a.js → 342.bundle.9be178d7555a64de203a.js} +0 -0
  19. /package/dist/{425.bundle.ffcdde2143a5757926b9.js → 425.bundle.e44cfce041ba5209a878.js} +0 -0
  20. /package/dist/{504.bundle.993d7e2dec36257d4ce4.js → 504.bundle.5ccd6d4269fa77a0a7e7.js} +0 -0
  21. /package/dist/{559.bundle.4f111410af43324629ca.js → 559.bundle.fb8ac10c41eb734e2f3d.js} +0 -0
  22. /package/dist/{594.bundle.ffeebda1bb9a81182a80.js → 594.bundle.b70ca7a91d85ebd5d8c4.js} +0 -0
  23. /package/dist/{724.bundle.eada9d6c23678a5a2947.js → 724.bundle.d50ce9fb0ab01b9378b7.js} +0 -0
  24. /package/dist/{862.bundle.959ef65b18c1d3b5e2b4.js → 862.bundle.809c87a7ba9da6fb29c8.js} +0 -0
  25. /package/dist/{889.bundle.67c6e5f988c9b1d289ef.js → 889.bundle.1c17d0d13e157ac21d38.js} +0 -0
  26. /package/dist/{905.bundle.eb821474b36b96b897f9.js → 905.bundle.206e44c3bbd1df1a900b.js} +0 -0
  27. /package/dist/{907.bundle.ca904d9747480a0e4bf1.js → 907.bundle.11700f7af989b5af8bc3.js} +0 -0
  28. /package/dist/{961.bundle.65967b1a4af002af1d1d.js → 961.bundle.a1ffb667eb04cbe07210.js} +0 -0
@@ -93,14 +93,22 @@ function initDefaultToolGroup(extensionManager, toolGroupService, commandsManage
93
93
  toolName: toolNames.Angle
94
94
  }, {
95
95
  toolName: toolNames.CobbAngle
96
- }, {
97
- toolName: toolNames.PlanarFreehandROI
98
96
  }, {
99
97
  toolName: toolNames.Magnify
100
98
  }, {
101
99
  toolName: toolNames.SegmentationDisplay
102
100
  }, {
103
101
  toolName: toolNames.CalibrationLine
102
+ }, {
103
+ toolName: toolNames.AdvancedMagnify
104
+ }, {
105
+ toolName: toolNames.UltrasoundDirectional
106
+ }, {
107
+ toolName: toolNames.PlanarFreehandROI
108
+ }, {
109
+ toolName: toolNames.SplineROI
110
+ }, {
111
+ toolName: toolNames.LivewireContour
104
112
  }],
105
113
  // enabled
106
114
  enabled: [{
@@ -359,6 +367,27 @@ const toolbarButtons = [{
359
367
  tooltip: 'Circle Tool',
360
368
  commands: setToolActiveToolbar,
361
369
  evaluate: 'evaluate.cornerstoneTool'
370
+ }), createButton({
371
+ id: 'PlanarFreehandROI',
372
+ icon: 'icon-tool-freehand-roi',
373
+ label: 'Freehand ROI',
374
+ tooltip: 'Freehand ROI',
375
+ commands: setToolActiveToolbar,
376
+ evaluate: 'evaluate.cornerstoneTool'
377
+ }), createButton({
378
+ id: 'SplineROI',
379
+ icon: 'icon-tool-spline-roi',
380
+ label: 'Spline ROI',
381
+ tooltip: 'Spline ROI',
382
+ commands: setToolActiveToolbar,
383
+ evaluate: 'evaluate.cornerstoneTool'
384
+ }), createButton({
385
+ id: 'LivewireContour',
386
+ icon: 'icon-tool-livewire',
387
+ label: 'Livewire tool',
388
+ tooltip: 'Livewire tool',
389
+ commands: setToolActiveToolbar,
390
+ evaluate: 'evaluate.cornerstoneTool'
362
391
  })]
363
392
  }
364
393
  }, {
@@ -561,7 +590,7 @@ const moreTools = [{
561
590
  commands: 'invertViewport',
562
591
  evaluate: 'evaluate.viewportProperties.toggle'
563
592
  }), moreTools_createButton({
564
- id: 'Probe',
593
+ id: 'DragProbe',
565
594
  icon: 'tool-probe',
566
595
  label: 'Probe',
567
596
  tooltip: 'Probe',
@@ -604,10 +633,24 @@ const moreTools = [{
604
633
  evaluate: 'evaluate.cornerstoneTool'
605
634
  }), moreTools_createButton({
606
635
  id: 'TagBrowser',
607
- icon: 'list-bullets',
636
+ icon: 'dicom-tag-browser',
608
637
  label: 'Dicom Tag Browser',
609
638
  tooltip: 'Dicom Tag Browser',
610
639
  commands: 'openDICOMTagViewer'
640
+ }), moreTools_createButton({
641
+ id: 'AdvancedMagnify',
642
+ icon: 'icon-tool-loupe',
643
+ label: 'Loupe',
644
+ tooltip: 'Loupe',
645
+ commands: setToolActiveToolbar,
646
+ evaluate: 'evaluate.cornerstoneTool'
647
+ }), moreTools_createButton({
648
+ id: 'UltrasoundDirectionalTool',
649
+ icon: 'icon-tool-ultrasound-bidirectional',
650
+ label: 'Ultrasound Directional',
651
+ tooltip: 'Ultrasound Directional',
652
+ commands: setToolActiveToolbar,
653
+ evaluate: ['evaluate.cornerstoneTool', 'evaluate.isUS']
611
654
  })]
612
655
  }
613
656
  }];
@@ -108,6 +108,27 @@ const toolbarButtons = [{
108
108
  tooltip: 'Circle Tool',
109
109
  commands: setToolActiveToolbar,
110
110
  evaluate: 'evaluate.cornerstoneTool'
111
+ }), createButton({
112
+ id: 'PlanarFreehandROI',
113
+ icon: 'icon-tool-freehand-roi',
114
+ label: 'Freehand ROI',
115
+ tooltip: 'Freehand ROI',
116
+ commands: setToolActiveToolbar,
117
+ evaluate: 'evaluate.cornerstoneTool'
118
+ }), createButton({
119
+ id: 'SplineROI',
120
+ icon: 'icon-tool-spline-roi',
121
+ label: 'Spline ROI',
122
+ tooltip: 'Spline ROI',
123
+ commands: setToolActiveToolbar,
124
+ evaluate: 'evaluate.cornerstoneTool'
125
+ }), createButton({
126
+ id: 'LivewireContour',
127
+ icon: 'icon-tool-livewire',
128
+ label: 'Livewire tool',
129
+ tooltip: 'Livewire tool',
130
+ commands: setToolActiveToolbar,
131
+ evaluate: 'evaluate.cornerstoneTool'
111
132
  })]
112
133
  }
113
134
  }, {
@@ -278,6 +299,16 @@ function initDefaultToolGroup(extensionManager, toolGroupService, commandsManage
278
299
  toolName: toolNames.Magnify
279
300
  }, {
280
301
  toolName: toolNames.SegmentationDisplay
302
+ }, {
303
+ toolName: toolNames.AdvancedMagnify
304
+ }, {
305
+ toolName: toolNames.UltrasoundDirectional
306
+ }, {
307
+ toolName: toolNames.PlanarFreehandROI
308
+ }, {
309
+ toolName: toolNames.SplineROI
310
+ }, {
311
+ toolName: toolNames.LivewireContour
281
312
  }],
282
313
  // enabled
283
314
  enabled: [{
@@ -567,7 +598,7 @@ const moreTools = [{
567
598
  commands: 'invertViewport',
568
599
  evaluate: 'evaluate.viewportProperties.toggle'
569
600
  }), moreTools_createButton({
570
- id: 'Probe',
601
+ id: 'DragProbe',
571
602
  icon: 'tool-probe',
572
603
  label: 'Probe',
573
604
  tooltip: 'Probe',
@@ -610,10 +641,24 @@ const moreTools = [{
610
641
  evaluate: 'evaluate.cornerstoneTool'
611
642
  }), moreTools_createButton({
612
643
  id: 'TagBrowser',
613
- icon: 'list-bullets',
644
+ icon: 'dicom-tag-browser',
614
645
  label: 'Dicom Tag Browser',
615
646
  tooltip: 'Dicom Tag Browser',
616
647
  commands: 'openDICOMTagViewer'
648
+ }), moreTools_createButton({
649
+ id: 'AdvancedMagnify',
650
+ icon: 'icon-tool-loupe',
651
+ label: 'Loupe',
652
+ tooltip: 'Loupe',
653
+ commands: setToolActiveToolbar,
654
+ evaluate: 'evaluate.cornerstoneTool'
655
+ }), moreTools_createButton({
656
+ id: 'UltrasoundDirectionalTool',
657
+ icon: 'icon-tool-ultrasound-bidirectional',
658
+ label: 'Ultrasound Directional',
659
+ tooltip: 'Ultrasound Directional',
660
+ commands: setToolActiveToolbar,
661
+ evaluate: ['evaluate.cornerstoneTool', 'evaluate.isUS']
617
662
  })]
618
663
  }
619
664
  }];
@@ -295,9 +295,9 @@ function CustomizableViewportOverlay({
295
295
  const topRightCustomization = customizationService.getModeCustomization('cornerstoneOverlayTopRight');
296
296
  const bottomLeftCustomization = customizationService.getModeCustomization('cornerstoneOverlayBottomLeft');
297
297
  const bottomRightCustomization = customizationService.getModeCustomization('cornerstoneOverlayBottomRight');
298
- const instance = (0,react.useMemo)(() => {
298
+ const instances = (0,react.useMemo)(() => {
299
299
  if (viewportData != null) {
300
- return _getViewportInstance(viewportData, imageIndex);
300
+ return _getViewportInstances(viewportData);
301
301
  } else {
302
302
  return null;
303
303
  }
@@ -383,7 +383,7 @@ function CustomizableViewportOverlay({
383
383
  formatTime: formatDICOMTime,
384
384
  formatNumberPrecision: formatNumberPrecision
385
385
  },
386
- instance,
386
+ instance: instances ? instances[item?.instanceIndex] : null,
387
387
  voi,
388
388
  scale,
389
389
  instanceNumber
@@ -403,47 +403,60 @@ function CustomizableViewportOverlay({
403
403
  return renderItem.content(overlayItemProps);
404
404
  }
405
405
  }
406
- }, [element, viewportData, imageSliceData, viewportId, servicesManager, customizationService, instance, voi, scale, instanceNumber]);
406
+ }, [element, viewportData, imageSliceData, viewportId, servicesManager, customizationService, instances, voi, scale, instanceNumber]);
407
407
  const getContent = (0,react.useCallback)((customization, defaultItems, keyPrefix) => {
408
408
  const items = customization?.items ?? defaultItems;
409
409
  return /*#__PURE__*/react.createElement(react.Fragment, null, items.map((item, index) => /*#__PURE__*/react.createElement("div", {
410
410
  key: `${keyPrefix}_${index}`
411
411
  }, item?.condition ? item.condition({
412
- instance,
412
+ instance: instances ? instances[item?.instanceIndex] : null,
413
413
  formatters: {
414
414
  formatDate: formatDICOMDate
415
415
  }
416
416
  }) ? _renderOverlayItem(item) : null : _renderOverlayItem(item))));
417
417
  }, [_renderOverlayItem]);
418
+ const studyDateItem = {
419
+ id: 'StudyDate',
420
+ customizationType: 'ohif.overlayItem',
421
+ label: '',
422
+ title: 'Study date',
423
+ condition: ({
424
+ instance
425
+ }) => instance && instance.StudyDate,
426
+ contentF: ({
427
+ instance,
428
+ formatters: {
429
+ formatDate
430
+ }
431
+ }) => formatDate(instance.StudyDate)
432
+ };
433
+ const seriesDescriptionItem = {
434
+ id: 'SeriesDescription',
435
+ customizationType: 'ohif.overlayItem',
436
+ label: '',
437
+ title: 'Series description',
438
+ attribute: 'SeriesDescription',
439
+ condition: ({
440
+ instance
441
+ }) => {
442
+ return instance && instance.SeriesDescription;
443
+ }
444
+ };
445
+ const topLeftItems = instances ? instances.map((instance, index) => {
446
+ return [{
447
+ ...studyDateItem,
448
+ instanceIndex: index
449
+ }, {
450
+ ...seriesDescriptionItem,
451
+ instanceIndex: index
452
+ }];
453
+ }).flat() : [];
418
454
  return /*#__PURE__*/react.createElement(ui_src/* ViewportOverlay */.pU, {
419
455
  topLeft:
420
456
  /**
421
457
  * Inline default overlay items for a more standard expansion
422
458
  */
423
- getContent(topLeftCustomization, [{
424
- id: 'StudyDate',
425
- customizationType: 'ohif.overlayItem',
426
- label: '',
427
- title: 'Study date',
428
- condition: ({
429
- instance
430
- }) => instance && instance.StudyDate,
431
- contentF: ({
432
- instance,
433
- formatters: {
434
- formatDate
435
- }
436
- }) => formatDate(instance.StudyDate)
437
- }, {
438
- id: 'SeriesDescription',
439
- customizationType: 'ohif.overlayItem',
440
- label: '',
441
- title: 'Series description',
442
- attribute: 'SeriesDescription',
443
- condition: ({
444
- instance
445
- }) => instance && instance.SeriesDescription
446
- }], 'topLeftOverlayItem'),
459
+ getContent(topLeftCustomization, [...topLeftItems], 'topLeftOverlayItem'),
447
460
  topRight: getContent(topRightCustomization, [], 'topRightOverlayItem'),
448
461
  bottomLeft: getContent(bottomLeftCustomization, [{
449
462
  id: 'WindowLevel',
@@ -462,18 +475,25 @@ function CustomizableViewportOverlay({
462
475
  }], 'bottomRightOverlayItem')
463
476
  });
464
477
  }
465
- function _getViewportInstance(viewportData, imageIndex) {
466
- let imageId = null;
478
+ function _getViewportInstances(viewportData) {
479
+ const imageIds = [];
467
480
  if (viewportData.viewportType === dist_esm.Enums.ViewportType.STACK) {
468
- imageId = viewportData.data.imageIds[imageIndex];
481
+ imageIds.push(viewportData.data.imageIds[0]);
469
482
  } else if (viewportData.viewportType === dist_esm.Enums.ViewportType.ORTHOGRAPHIC) {
470
483
  const volumes = viewportData.data;
471
- if (volumes && volumes.length == 1) {
472
- const volume = volumes[0];
473
- imageId = volume.imageIds[imageIndex];
474
- }
484
+ volumes.forEach(volume => {
485
+ if (!volume?.imageIds) {
486
+ return;
487
+ }
488
+ imageIds.push(volume.imageIds[0]);
489
+ });
475
490
  }
476
- return imageId ? dist_esm.metaData.get('instance', imageId) || {} : {};
491
+ const instances = [];
492
+ imageIds.forEach(imageId => {
493
+ const instance = dist_esm.metaData.get('instance', imageId) || {};
494
+ instances.push(instance);
495
+ });
496
+ return instances;
477
497
  }
478
498
  const getInstanceNumber = (viewportData, viewportId, imageIndex, cornerstoneViewportService) => {
479
499
  let instanceNumber;
@@ -482,7 +502,7 @@ const getInstanceNumber = (viewportData, viewportId, imageIndex, cornerstoneView
482
502
  instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex);
483
503
  break;
484
504
  case dist_esm.Enums.ViewportType.ORTHOGRAPHIC:
485
- instanceNumber = _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService);
505
+ instanceNumber = _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService, imageIndex);
486
506
  break;
487
507
  }
488
508
  return instanceNumber ?? null;
@@ -507,14 +527,16 @@ function _getInstanceNumberFromStack(viewportData, imageIndex) {
507
527
  // Since volume viewports can be in any view direction, they can render
508
528
  // a reconstructed image which don't have imageIds; therefore, no instance and instanceNumber
509
529
  // Here we check if viewport is in the acquisition direction and if so, we get the instanceNumber
510
- function _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService) {
511
- const volumes = viewportData.volumes;
512
-
513
- // Todo: support fusion of acquisition plane which has instanceNumber
514
- if (!volumes || volumes.length > 1) {
530
+ function _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService, imageIndex) {
531
+ const volumes = viewportData.data;
532
+ if (!volumes) {
515
533
  return;
516
534
  }
517
- const volume = volumes[0];
535
+
536
+ // Todo: support fusion of acquisition plane which has instanceNumber
537
+ const {
538
+ volume
539
+ } = volumes[0];
518
540
  const {
519
541
  direction,
520
542
  imageIds
@@ -610,9 +632,9 @@ function InstanceNumberOverlayItem({
610
632
  style: {
611
633
  color: customization && customization.color || undefined
612
634
  }
613
- }, /*#__PURE__*/react.createElement("span", {
635
+ }, /*#__PURE__*/react.createElement("span", null, instanceNumber !== undefined && instanceNumber !== null ? /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("span", {
614
636
  className: "mr-1 shrink-0"
615
- }, "I:"), /*#__PURE__*/react.createElement("span", null, instanceNumber !== undefined && instanceNumber !== null ? `${instanceNumber} (${imageIndex + 1}/${numberOfSlices})` : `${imageIndex + 1}/${numberOfSlices}`));
637
+ }, "I:"), /*#__PURE__*/react.createElement("span", null, `${instanceNumber} (${imageIndex + 1}/${numberOfSlices})`)) : `${imageIndex + 1}/${numberOfSlices}`));
616
638
  }
617
639
  CustomizableViewportOverlay.propTypes = {
618
640
  viewportData: (prop_types_default()).object,
@@ -843,7 +843,6 @@ function initCornerstoneTools(configuration = {}) {
843
843
  (0,dist_esm.addTool)(dist_esm.DragProbeTool);
844
844
  (0,dist_esm.addTool)(dist_esm.AngleTool);
845
845
  (0,dist_esm.addTool)(dist_esm.CobbAngleTool);
846
- (0,dist_esm.addTool)(dist_esm.PlanarFreehandROITool);
847
846
  (0,dist_esm.addTool)(dist_esm.MagnifyTool);
848
847
  (0,dist_esm.addTool)(dist_esm.CrosshairsTool);
849
848
  (0,dist_esm.addTool)(dist_esm.SegmentationDisplayTool);
@@ -854,6 +853,11 @@ function initCornerstoneTools(configuration = {}) {
854
853
  (0,dist_esm.addTool)(dist_esm.RectangleScissorsTool);
855
854
  (0,dist_esm.addTool)(dist_esm.SphereScissorsTool);
856
855
  (0,dist_esm.addTool)(tools_ImageOverlayViewerTool);
856
+ (0,dist_esm.addTool)(dist_esm.AdvancedMagnifyTool);
857
+ (0,dist_esm.addTool)(dist_esm.UltrasoundDirectionalTool);
858
+ (0,dist_esm.addTool)(dist_esm.PlanarFreehandROITool);
859
+ (0,dist_esm.addTool)(dist_esm.SplineROITool);
860
+ (0,dist_esm.addTool)(dist_esm.LivewireContourTool);
857
861
 
858
862
  // Modify annotation tools to use dashed lines on SR
859
863
  const annotationStyle = {
@@ -886,7 +890,6 @@ const toolNames = {
886
890
  Bidirectional: dist_esm.BidirectionalTool.toolName,
887
891
  Angle: dist_esm.AngleTool.toolName,
888
892
  CobbAngle: dist_esm.CobbAngleTool.toolName,
889
- PlanarFreehandROI: dist_esm.PlanarFreehandROITool.toolName,
890
893
  Magnify: dist_esm.MagnifyTool.toolName,
891
894
  Crosshairs: dist_esm.CrosshairsTool.toolName,
892
895
  SegmentationDisplay: dist_esm.SegmentationDisplayTool.toolName,
@@ -896,7 +899,12 @@ const toolNames = {
896
899
  CircleScissors: dist_esm.CircleScissorsTool.toolName,
897
900
  RectangleScissors: dist_esm.RectangleScissorsTool.toolName,
898
901
  SphereScissors: dist_esm.SphereScissorsTool.toolName,
899
- ImageOverlayViewer: tools_ImageOverlayViewerTool.toolName
902
+ ImageOverlayViewer: tools_ImageOverlayViewerTool.toolName,
903
+ AdvancedMagnify: dist_esm.AdvancedMagnifyTool.toolName,
904
+ UltrasoundDirectional: dist_esm.UltrasoundDirectionalTool.toolName,
905
+ SplineROI: dist_esm.SplineROITool.toolName,
906
+ LivewireContour: dist_esm.LivewireContourTool.toolName,
907
+ PlanarFreehandROI: dist_esm.PlanarFreehandROITool.toolName
900
908
  };
901
909
 
902
910
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/constants/supportedTools.js
@@ -7290,6 +7298,26 @@ function getToolbarModule({
7290
7298
  };
7291
7299
  }
7292
7300
  }
7301
+ }, {
7302
+ name: 'evaluate.isUS',
7303
+ evaluate: ({
7304
+ viewportId,
7305
+ disabledText
7306
+ }) => {
7307
+ const displaySetUIDs = viewportGridService.getDisplaySetsUIDsForViewport(viewportId);
7308
+ if (!displaySetUIDs?.length) {
7309
+ return;
7310
+ }
7311
+ const displaySets = displaySetUIDs.map(displaySetService.getDisplaySetByUID);
7312
+ const isUS = displaySets.some(displaySet => displaySet.Modality === 'US');
7313
+ if (!isUS) {
7314
+ return {
7315
+ disabled: true,
7316
+ className: '!text-common-bright ohif-disabled',
7317
+ disabledText: disabledText ?? 'Not available on the current viewport'
7318
+ };
7319
+ }
7320
+ }
7293
7321
  }, {
7294
7322
  name: 'evaluate.viewportProperties.toggle',
7295
7323
  evaluate: ({
@@ -212,7 +212,7 @@ const toolbarButtons = [{
212
212
  commands: 'invertViewport',
213
213
  evaluate: 'evaluate.viewportProperties.toggle'
214
214
  }), createButton({
215
- id: 'Probe',
215
+ id: 'DragProbe',
216
216
  icon: 'tool-probe',
217
217
  label: 'Probe',
218
218
  tooltip: 'Probe',
@@ -255,10 +255,24 @@ const toolbarButtons = [{
255
255
  evaluate: 'evaluate.cornerstoneTool'
256
256
  }), createButton({
257
257
  id: 'TagBrowser',
258
- icon: 'list-bullets',
258
+ icon: 'dicom-tag-browser',
259
259
  label: 'Dicom Tag Browser',
260
260
  tooltip: 'Dicom Tag Browser',
261
261
  commands: 'openDICOMTagViewer'
262
+ }), createButton({
263
+ id: 'AdvancedMagnify',
264
+ icon: 'icon-tool-loupe',
265
+ label: 'Loupe',
266
+ tooltip: 'Loupe',
267
+ commands: setToolActiveToolbar,
268
+ evaluate: 'evaluate.cornerstoneTool'
269
+ }), createButton({
270
+ id: 'UltrasoundDirectionalTool',
271
+ icon: 'icon-tool-ultrasound-bidirectional',
272
+ label: 'Ultrasound Directional',
273
+ tooltip: 'Ultrasound Directional',
274
+ commands: setToolActiveToolbar,
275
+ evaluate: ['evaluate.cornerstoneTool', 'evaluate.isUS']
262
276
  })]
263
277
  }
264
278
  }];
@@ -538,6 +552,10 @@ function createTools(utilityModule) {
538
552
  toolName: toolNames.Magnify
539
553
  }, {
540
554
  toolName: toolNames.SegmentationDisplay
555
+ }, {
556
+ toolName: toolNames.AdvancedMagnify
557
+ }, {
558
+ toolName: toolNames.UltrasoundDirectional
541
559
  }],
542
560
  disabled: [{
543
561
  toolName: toolNames.ReferenceLines
@@ -2529,8 +2529,7 @@ function Toolbar({
2529
2529
  servicesManager: servicesManager
2530
2530
  }, componentProps));
2531
2531
  return /*#__PURE__*/react.createElement("div", {
2532
- key: id,
2533
- className: "mr-1"
2532
+ key: id
2534
2533
  }, tool);
2535
2534
  }));
2536
2535
  }
@@ -2589,8 +2588,8 @@ function ViewerHeader({
2589
2588
  hotkeyDefinitions,
2590
2589
  hotkeyDefaults
2591
2590
  } = hotkeysManager;
2592
- const versionNumber = "3.8.0-beta.70";
2593
- const commitHash = "56b1eae6356a6534960df1196bdd1e95b0a9a470";
2591
+ const versionNumber = "3.8.0-beta.71";
2592
+ const commitHash = "cea27d438d1de2c1ec90cbaefdc2b31a1d9980a1";
2594
2593
  const menuOptions = [{
2595
2594
  title: t('Header:About'),
2596
2595
  icon: 'info',