@ohif/app 3.7.0-beta.88 → 3.7.0-beta.89

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 (22) hide show
  1. package/dist/{342.bundle.bbd694ebb39e249c17fb.js → 342.bundle.ee39d39568324dade9e8.js} +4 -4
  2. package/dist/{348.bundle.4064fd63611ef2ad7da9.js → 370.bundle.0fd9e32c33d620c25c0f.js} +47 -46
  3. package/dist/{967.bundle.536ce534cd768626602b.js → 877.bundle.835fa27a8b3a2a9359d3.js} +144 -155
  4. package/dist/{128.bundle.54e4f60b7c2402baa852.js → 99.bundle.e5cdaa188d44d58dbd16.js} +46 -47
  5. package/dist/{app.bundle.8cec805607b1723ace9e.js → app.bundle.ebe908553f4d102750ff.js} +93 -46
  6. package/dist/index.html +1 -1
  7. package/dist/sw.js +1 -1
  8. package/package.json +17 -17
  9. /package/dist/{12.bundle.ee9edd90752119b5aa50.js → 12.bundle.00e9504be71ad6df95fe.js} +0 -0
  10. /package/dist/{19.bundle.31ffc81d2f96a605bf44.js → 19.bundle.ac29a85034c388d491e5.js} +0 -0
  11. /package/dist/{221.bundle.7315b2accee2e8ef1173.js → 221.bundle.4345e4b6760ad26609ab.js} +0 -0
  12. /package/dist/{236.bundle.259f024b8471405c4763.js → 236.bundle.ae586686f216bb35c71c.js} +0 -0
  13. /package/dist/{281.bundle.d73dc63fc7c2a7a5a02d.js → 281.bundle.8230dfc98567e1f931eb.js} +0 -0
  14. /package/dist/{359.bundle.111dec9dab4bea81631b.js → 359.bundle.070ca05beb969580f284.js} +0 -0
  15. /package/dist/{410.bundle.2494129ec5627c0f5692.js → 410.bundle.b6969e97e86fe583dbae.js} +0 -0
  16. /package/dist/{506.bundle.2b33565f930da54ff584.js → 506.bundle.1ec326a29a83b749c7bf.js} +0 -0
  17. /package/dist/{613.bundle.3763f97feb0f9c8da315.js → 613.bundle.adf71ee20cedc7e40f9c.js} +0 -0
  18. /package/dist/{663.bundle.9c60dae218ab6565bc9c.js → 663.bundle.0a8d83e79a119b1d9e0e.js} +0 -0
  19. /package/dist/{687.bundle.7087fed4c4fb7e0024bf.js → 687.bundle.dfe3e1758a5159e90e4c.js} +0 -0
  20. /package/dist/{782.bundle.3fd7eed9e607265f3fab.js → 782.bundle.a9956a661eafe2530e90.js} +0 -0
  21. /package/dist/{814.bundle.9268e58c124ae8617045.js → 814.bundle.2c85fbeb75306553fc7b.js} +0 -0
  22. /package/dist/{967.css → 877.css} +0 -0
@@ -2166,8 +2166,8 @@ function ViewerHeader(_ref) {
2166
2166
  hotkeyDefinitions,
2167
2167
  hotkeyDefaults
2168
2168
  } = hotkeysManager;
2169
- const versionNumber = "3.7.0-beta.88";
2170
- const commitHash = "1129c155d2c7d46c98a5df7c09879aa3d459fa7e";
2169
+ const versionNumber = "3.7.0-beta.89";
2170
+ const commitHash = "e36a6043315e900eeb6ce183772c7f852f478e96";
2171
2171
  const menuOptions = [{
2172
2172
  title: t('Header:About'),
2173
2173
  icon: 'info',
@@ -3806,7 +3806,7 @@ function getDisplaySetMessages(instances, isReconstructable) {
3806
3806
  }
3807
3807
  const firstInstance = instances[0];
3808
3808
  // Due to current requirements, LOCALIZER series doesn't have any messages
3809
- if (firstInstance.ImageType.includes('LOCALIZER')) {
3809
+ if (firstInstance?.ImageType?.includes('LOCALIZER')) {
3810
3810
  return messages;
3811
3811
  }
3812
3812
  const Modality = firstInstance.Modality;
@@ -5529,7 +5529,7 @@ const commandsModule = _ref => {
5529
5529
  stageId
5530
5530
  } = hpCommand.commandOptions;
5531
5531
  const isActive = (!protocolId || protocolId === protocol.id) && (stageIndex === undefined || stageIndex === toggleStageIndex) && (!stageId || stageId === stage.id);
5532
- toolbarService.setActive(button.id, isActive);
5532
+ toolbarService.setToggled(button.id, isActive);
5533
5533
  };
5534
5534
  Object.values(toolbarService.getButtons()).forEach(enableListener);
5535
5535
  },
@@ -1,9 +1,9 @@
1
- "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[348],{
1
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[370],{
3
2
 
4
- /***/ 14348:
3
+ /***/ 71522:
5
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
5
 
6
+ "use strict";
7
7
  // ESM COMPAT FLAG
8
8
  __webpack_require__.r(__webpack_exports__);
9
9
 
@@ -18,36 +18,20 @@ __webpack_require__.d(__webpack_exports__, {
18
18
  var src = __webpack_require__(67869);
19
19
  // EXTERNAL MODULE: ../../ui/src/index.js + 485 modules
20
20
  var ui_src = __webpack_require__(71783);
21
- ;// CONCATENATED MODULE: ../../../modes/longitudinal/src/toolbarButtons.js
21
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 331 modules
22
+ var esm = __webpack_require__(3743);
23
+ ;// CONCATENATED MODULE: ../../../modes/longitudinal/src/toolbarButtons.ts
22
24
  // TODO: torn, can either bake this here; or have to create a whole new button type
23
25
  // Only ways that you can pass in a custom React component for render :l
24
26
 
25
27
 
28
+
26
29
  const {
27
30
  windowLevelPresets
28
31
  } = src.defaults;
29
- /**
30
- *
31
- * @param {*} type - 'tool' | 'action' | 'toggle'
32
- * @param {*} id
33
- * @param {*} icon
34
- * @param {*} label
35
- */
36
- function _createButton(type, id, icon, label, commands, tooltip, uiType, isActive) {
37
- return {
38
- id,
39
- icon,
40
- label,
41
- type,
42
- commands,
43
- tooltip,
44
- uiType,
45
- isActive
46
- };
47
- }
48
- const _createActionButton = _createButton.bind(null, 'action');
49
- const _createToggleButton = _createButton.bind(null, 'toggle');
50
- const _createToolButton = _createButton.bind(null, 'tool');
32
+ const _createActionButton = src/* ToolbarService */.Ok._createButton.bind(null, 'action');
33
+ const _createToggleButton = src/* ToolbarService */.Ok._createButton.bind(null, 'toggle');
34
+ const _createToolButton = src/* ToolbarService */.Ok._createButton.bind(null, 'tool');
51
35
 
52
36
  /**
53
37
  *
@@ -89,6 +73,16 @@ function _createSetToolActiveCommands(toolName) {
89
73
  }));
90
74
  return temp;
91
75
  }
76
+ const ReferenceLinesCommands = [{
77
+ commandName: 'setSourceViewportForReferenceLinesTool',
78
+ context: 'CORNERSTONE'
79
+ }, {
80
+ commandName: 'setToolActive',
81
+ commandOptions: {
82
+ toolName: 'ReferenceLines'
83
+ },
84
+ context: 'CORNERSTONE'
85
+ }];
92
86
  const toolbarButtons = [
93
87
  // Measurement
94
88
  {
@@ -319,32 +313,32 @@ const toolbarButtons = [
319
313
  commandOptions: {},
320
314
  context: 'CORNERSTONE'
321
315
  }], 'Flip Horizontal'), _createToggleButton('StackImageSync', 'link', 'Stack Image Sync', [{
322
- commandName: 'toggleStackImageSync',
323
- commandOptions: {},
324
- context: 'CORNERSTONE'
325
- }]), _createToggleButton('ReferenceLines', 'tool-referenceLines',
316
+ commandName: 'toggleStackImageSync'
317
+ }], 'Enable position synchronization on stack viewports', {
318
+ listeners: {
319
+ [esm.EVENTS.STACK_VIEWPORT_NEW_STACK]: {
320
+ commandName: 'toggleStackImageSync',
321
+ commandOptions: {
322
+ toggledState: true
323
+ }
324
+ }
325
+ }
326
+ }), _createToggleButton('ReferenceLines', 'tool-referenceLines',
326
327
  // change this with the new icon
327
- 'Reference Lines',
328
- // two commands for the reference lines tool:
329
- // - the first to set the source viewport for the tool when it is enabled
330
- // - the second to toggle the tool
331
- [{
332
- commandName: 'setSourceViewportForReferenceLinesTool',
333
- commandOptions: {},
334
- context: 'CORNERSTONE'
335
- }, {
336
- commandName: 'setToolActive',
337
- commandOptions: {
338
- toolName: 'ReferenceLines'
339
- },
340
- context: 'CORNERSTONE'
341
- }]), _createToggleButton('ImageOverlayViewer', 'toggle-dicom-overlay', 'Image Overlay', [{
328
+ 'Reference Lines', ReferenceLinesCommands, 'Show Reference Lines', {
329
+ listeners: {
330
+ [esm.EVENTS.STACK_VIEWPORT_NEW_STACK]: ReferenceLinesCommands,
331
+ [esm.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: ReferenceLinesCommands
332
+ }
333
+ }), _createToggleButton('ImageOverlayViewer', 'toggle-dicom-overlay', 'Image Overlay', [{
342
334
  commandName: 'setToolActive',
343
335
  commandOptions: {
344
336
  toolName: 'ImageOverlayViewer'
345
337
  },
346
338
  context: 'CORNERSTONE'
347
- }], 'Image Overlay', null, true), _createToolButton('StackScroll', 'tool-stack-scroll', 'Stack Scroll', [{
339
+ }], 'Image Overlay', {
340
+ isActive: true
341
+ }), _createToolButton('StackScroll', 'tool-stack-scroll', 'Stack Scroll', [{
348
342
  commandName: 'setToolActive',
349
343
  commandOptions: {
350
344
  toolName: 'StackScroll'
@@ -902,6 +896,13 @@ const mode = {
902
896
  /* harmony default export */ const longitudinal_src = (mode);
903
897
 
904
898
 
899
+ /***/ }),
900
+
901
+ /***/ 78753:
902
+ /***/ (() => {
903
+
904
+ /* (ignored) */
905
+
905
906
  /***/ })
906
907
 
907
908
  }]);
@@ -1,6 +1,6 @@
1
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[967],{
1
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[877],{
2
2
 
3
- /***/ 94004:
3
+ /***/ 94848:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5
5
 
6
6
  "use strict";
@@ -485,6 +485,8 @@ class ImageOverlayViewerTool extends dist_esm.AnnotationDisplayTool {
485
485
  let pixelData = null;
486
486
  if (overlay.pixelData.Value) {
487
487
  pixelData = overlay.pixelData.Value;
488
+ } else if (overlay.pixelData instanceof Array) {
489
+ pixelData = overlay.pixelData[0];
488
490
  } else if (overlay.pixelData.retrieveBulkData) {
489
491
  pixelData = await overlay.pixelData.retrieveBulkData();
490
492
  }
@@ -3468,6 +3470,7 @@ async function init(_ref) {
3468
3470
  cornerstoneViewportService,
3469
3471
  hangingProtocolService,
3470
3472
  toolGroupService,
3473
+ toolbarService,
3471
3474
  viewportGridService,
3472
3475
  stateSyncService
3473
3476
  } = servicesManager.services;
@@ -3558,11 +3561,51 @@ async function init(_ref) {
3558
3561
  customizationService,
3559
3562
  commandsManager
3560
3563
  });
3561
- const newStackCallback = evt => {
3564
+
3565
+ /**
3566
+ * When a viewport gets a new display set, this call will go through all the
3567
+ * active tools in the toolbar, and call any commands registered in the
3568
+ * toolbar service with a callback to re-enable on displaying the viewport.
3569
+ */
3570
+ const toolbarEventListener = evt => {
3562
3571
  const {
3563
3572
  element
3564
3573
  } = evt.detail;
3565
- dist_esm.utilities.stackPrefetch.enable(element);
3574
+ const activeTools = toolbarService.getActiveTools();
3575
+ activeTools.forEach(tool => {
3576
+ const toolData = toolbarService.getNestedButton(tool);
3577
+ const commands = toolData?.listeners?.[evt.type];
3578
+ commandsManager.run(commands, {
3579
+ element,
3580
+ evt
3581
+ });
3582
+ });
3583
+ };
3584
+
3585
+ /** Listens for active viewport events and fires the toolbar listeners */
3586
+ const activeViewportEventListener = evt => {
3587
+ const {
3588
+ viewportId
3589
+ } = evt;
3590
+ const toolGroup = toolGroupService.getToolGroupForViewport(viewportId);
3591
+ const activeTools = toolbarService.getActiveTools();
3592
+ activeTools.forEach(tool => {
3593
+ if (!toolGroup?._toolInstances?.[tool]) {
3594
+ return;
3595
+ }
3596
+
3597
+ // check if tool is active on the new viewport
3598
+ const toolEnabled = toolGroup._toolInstances[tool].mode === dist_esm.Enums.ToolModes.Enabled;
3599
+ if (!toolEnabled) {
3600
+ return;
3601
+ }
3602
+ const button = toolbarService.getNestedButton(tool);
3603
+ const commands = button?.listeners?.[evt.type];
3604
+ commandsManager.run(commands, {
3605
+ viewportId,
3606
+ evt
3607
+ });
3608
+ });
3566
3609
  };
3567
3610
  const resetCrosshairs = evt => {
3568
3611
  const {
@@ -3585,12 +3628,18 @@ async function init(_ref) {
3585
3628
  toolGroup.setToolEnabled('Crosshairs');
3586
3629
  }
3587
3630
  };
3631
+ esm.eventTarget.addEventListener(esm.EVENTS.STACK_VIEWPORT_NEW_STACK, evt => {
3632
+ const {
3633
+ element
3634
+ } = evt.detail;
3635
+ dist_esm.utilities.stackContextPrefetch.enable(element);
3636
+ });
3588
3637
  function elementEnabledHandler(evt) {
3589
3638
  const {
3590
3639
  element
3591
3640
  } = evt.detail;
3592
3641
  element.addEventListener(esm.EVENTS.CAMERA_RESET, resetCrosshairs);
3593
- esm.eventTarget.addEventListener(esm.EVENTS.STACK_VIEWPORT_NEW_STACK, newStackCallback);
3642
+ esm.eventTarget.addEventListener(esm.EVENTS.STACK_VIEWPORT_NEW_STACK, toolbarEventListener);
3594
3643
  }
3595
3644
  function elementDisabledHandler(evt) {
3596
3645
  const {
@@ -3607,29 +3656,7 @@ async function init(_ref) {
3607
3656
 
3608
3657
  esm.eventTarget.addEventListener(esm.EVENTS.ELEMENT_ENABLED, elementEnabledHandler.bind(null));
3609
3658
  esm.eventTarget.addEventListener(esm.EVENTS.ELEMENT_DISABLED, elementDisabledHandler.bind(null));
3610
- viewportGridService.subscribe(viewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED, _ref2 => {
3611
- let {
3612
- viewportId
3613
- } = _ref2;
3614
- const toolGroup = toolGroupService.getToolGroupForViewport(viewportId);
3615
- if (!toolGroup || !toolGroup._toolInstances?.['ReferenceLines']) {
3616
- return;
3617
- }
3618
-
3619
- // check if reference lines are active
3620
- const referenceLinesEnabled = toolGroup._toolInstances['ReferenceLines'].mode === dist_esm.Enums.ToolModes.Enabled;
3621
- if (!referenceLinesEnabled) {
3622
- return;
3623
- }
3624
- toolGroup.setToolConfiguration(dist_esm.ReferenceLinesTool.toolName, {
3625
- sourceViewportId: viewportId
3626
- }, true // overwrite
3627
- );
3628
-
3629
- // make sure to set it to enabled again since we want to recalculate
3630
- // the source-target lines
3631
- toolGroup.setToolEnabled(dist_esm.ReferenceLinesTool.toolName);
3632
- });
3659
+ viewportGridService.subscribe(viewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED, activeViewportEventListener);
3633
3660
  }
3634
3661
  function CPUModal() {
3635
3662
  return /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("p", null, "Your computer does not have enough GPU power to support the default GPU rendering mode. OHIF has switched to CPU rendering mode. Please note that CPU rendering does not support all features such as Volume Rendering, Multiplanar Reconstruction, and Segmentation Overlays."));
@@ -4449,13 +4476,18 @@ const CornerstoneViewportDownloadForm = _ref => {
4449
4476
  const imageId = viewport.getCurrentImageId();
4450
4477
  const properties = viewport.getProperties();
4451
4478
  downloadViewport.setStack([imageId]).then(() => {
4452
- downloadViewport.setProperties(properties);
4453
- const newWidth = Math.min(width || image.width, MAX_TEXTURE_SIZE);
4454
- const newHeight = Math.min(height || image.height, MAX_TEXTURE_SIZE);
4455
- resolve({
4456
- width: newWidth,
4457
- height: newHeight
4458
- });
4479
+ try {
4480
+ downloadViewport.setProperties(properties);
4481
+ const newWidth = Math.min(width || image.width, MAX_TEXTURE_SIZE);
4482
+ const newHeight = Math.min(height || image.height, MAX_TEXTURE_SIZE);
4483
+ resolve({
4484
+ width: newWidth,
4485
+ height: newHeight
4486
+ });
4487
+ } catch (e) {
4488
+ // Happens on clicking the cancel button
4489
+ console.warn('Unable to set properties', e);
4490
+ }
4459
4491
  });
4460
4492
  } else if (downloadViewport instanceof esm.VolumeViewport) {
4461
4493
  const actors = viewport.getActors();
@@ -4535,143 +4567,93 @@ CornerstoneViewportDownloadForm.propTypes = {
4535
4567
  activeViewportId: (prop_types_default()).string.isRequired
4536
4568
  };
4537
4569
  /* harmony default export */ const utils_CornerstoneViewportDownloadForm = (CornerstoneViewportDownloadForm);
4538
- ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/stackSync/calculateViewportRegistrations.ts
4539
-
4540
- function calculateViewportRegistrations(viewports) {
4541
- const viewportPairs = _getViewportPairs(viewports);
4542
- for (const [viewport, nextViewport] of viewportPairs) {
4543
- // check if they are in the same Frame of Reference
4544
- const renderingEngine1 = (0,esm.getRenderingEngine)(viewport.renderingEngineId);
4545
- const renderingEngine2 = (0,esm.getRenderingEngine)(nextViewport.renderingEngineId);
4546
- const csViewport1 = renderingEngine1.getViewport(viewport.viewportId);
4547
- const csViewport2 = renderingEngine2.getViewport(nextViewport.viewportId);
4548
- esm.utilities.calculateViewportsSpatialRegistration(csViewport1, csViewport2);
4549
- }
4550
- }
4551
- const _getViewportPairs = viewports => {
4552
- const viewportPairs = [];
4553
- for (let i = 0; i < viewports.length; i++) {
4554
- for (let j = i + 1; j < viewports.length; j++) {
4555
- viewportPairs.push([viewports[i], viewports[j]]);
4556
- }
4557
- }
4558
- return viewportPairs;
4559
- };
4560
4570
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/stackSync/toggleStackImageSync.ts
4561
-
4562
-
4563
- // [ {
4564
- // synchronizerId: string,
4565
- // viewports: [ { viewportId: string, renderingEngineId: string, index: number } , ...]
4566
- // ]}
4567
- let STACK_IMAGE_SYNC_GROUPS_INFO = [];
4571
+ const STACK_SYNC_NAME = 'stackImageSync';
4568
4572
  function toggleStackImageSync(_ref) {
4569
4573
  let {
4570
4574
  toggledState,
4571
4575
  servicesManager,
4572
- getEnabledElement
4576
+ viewports: providedViewports
4573
4577
  } = _ref;
4578
+ if (!toggledState) {
4579
+ return disableSync(STACK_SYNC_NAME, servicesManager);
4580
+ }
4574
4581
  const {
4575
4582
  syncGroupService,
4576
4583
  viewportGridService,
4577
4584
  displaySetService,
4578
4585
  cornerstoneViewportService
4579
4586
  } = servicesManager.services;
4580
- if (!toggledState) {
4581
- STACK_IMAGE_SYNC_GROUPS_INFO.forEach(syncGroupInfo => {
4582
- const {
4583
- viewports,
4584
- synchronizerId
4585
- } = syncGroupInfo;
4586
- viewports.forEach(_ref2 => {
4587
- let {
4588
- viewportId,
4589
- renderingEngineId
4590
- } = _ref2;
4591
- syncGroupService.removeViewportFromSyncGroup(viewportId, renderingEngineId, synchronizerId);
4592
- });
4593
- });
4594
- return;
4595
- }
4596
- STACK_IMAGE_SYNC_GROUPS_INFO = [];
4587
+ const viewports = providedViewports || getReconstructableStackViewports(viewportGridService, displaySetService);
4597
4588
 
4598
- // create synchronization groups and add viewports
4589
+ // create synchronization group and add the viewports to it.
4590
+ viewports.forEach(gridViewport => {
4591
+ const {
4592
+ viewportId
4593
+ } = gridViewport.viewportOptions;
4594
+ const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
4595
+ if (!viewport) {
4596
+ return;
4597
+ }
4598
+ syncGroupService.addViewportToSyncGroup(viewportId, viewport.getRenderingEngine().id, {
4599
+ type: 'stackimage',
4600
+ id: STACK_SYNC_NAME,
4601
+ source: true,
4602
+ target: true
4603
+ });
4604
+ });
4605
+ }
4606
+ function disableSync(syncName, servicesManager) {
4599
4607
  const {
4608
+ syncGroupService,
4609
+ viewportGridService,
4610
+ displaySetService,
4611
+ cornerstoneViewportService
4612
+ } = servicesManager.services;
4613
+ const viewports = getReconstructableStackViewports(viewportGridService, displaySetService);
4614
+ viewports.forEach(gridViewport => {
4615
+ const {
4616
+ viewportId
4617
+ } = gridViewport.viewportOptions;
4618
+ const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
4619
+ if (!viewport) {
4620
+ return;
4621
+ }
4622
+ syncGroupService.removeViewportFromSyncGroup(viewport.id, viewport.getRenderingEngine().id, syncName);
4623
+ });
4624
+ }
4625
+ ;
4626
+
4627
+ /**
4628
+ * Gets the consistent spacing stack viewport types, which are the ones which
4629
+ * can be navigated using the stack image sync right now.
4630
+ */
4631
+ function getReconstructableStackViewports(viewportGridService, displaySetService) {
4632
+ let {
4600
4633
  viewports
4601
4634
  } = viewportGridService.getState();
4602
-
4635
+ viewports = [...viewports.values()];
4603
4636
  // filter empty viewports
4604
- const viewportsArray = Array.from(viewports.values()).filter(viewport => viewport.displaySetInstanceUIDs?.length)
4637
+ viewports = viewports.filter(viewport => viewport.displaySetInstanceUIDs && viewport.displaySetInstanceUIDs.length);
4638
+
4605
4639
  // filter reconstructable viewports
4606
- .filter(viewport => {
4640
+ viewports = viewports.filter(viewport => {
4607
4641
  const {
4608
4642
  displaySetInstanceUIDs
4609
4643
  } = viewport;
4610
4644
  for (const displaySetInstanceUID of displaySetInstanceUIDs) {
4611
4645
  const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
4612
- return !!displaySet?.isReconstructable;
4613
- }
4614
- });
4615
- const viewportsByOrientation = viewportsArray.reduce((acc, viewport) => {
4616
- const {
4617
- viewportId,
4618
- viewportType
4619
- } = viewport.viewportOptions;
4620
- if (viewportType !== 'stack') {
4621
- console.warn('Viewport is not a stack, cannot sync images yet');
4622
- return acc;
4623
- }
4624
- const {
4625
- element
4626
- } = cornerstoneViewportService.getViewportInfo(viewportId);
4627
- const {
4628
- viewport: csViewport,
4629
- renderingEngineId
4630
- } = getEnabledElement(element);
4631
- const {
4632
- viewPlaneNormal
4633
- } = csViewport.getCamera();
4634
4646
 
4635
- // Should we round here? I guess so, but not sure how much precision we need
4636
- const orientation = viewPlaneNormal.map(v => Math.round(v)).join(',');
4637
- if (!acc[orientation]) {
4638
- acc[orientation] = [];
4647
+ // TODO - add a better test than isReconstructable
4648
+ if (displaySet && displaySet.isReconstructable) {
4649
+ return true;
4650
+ }
4651
+ return false;
4639
4652
  }
4640
- acc[orientation].push({
4641
- viewportId,
4642
- renderingEngineId
4643
- });
4644
- return acc;
4645
- }, {});
4646
-
4647
- // create synchronizer for each group
4648
- Object.values(viewportsByOrientation).map(viewports => {
4649
- let synchronizerId = viewports.map(_ref3 => {
4650
- let {
4651
- viewportId
4652
- } = _ref3;
4653
- return viewportId;
4654
- }).join(',');
4655
- synchronizerId = `imageSync_${synchronizerId}`;
4656
- calculateViewportRegistrations(viewports);
4657
- viewports.forEach(_ref4 => {
4658
- let {
4659
- viewportId,
4660
- renderingEngineId
4661
- } = _ref4;
4662
- syncGroupService.addViewportToSyncGroup(viewportId, renderingEngineId, {
4663
- type: 'stackimage',
4664
- id: synchronizerId,
4665
- source: true,
4666
- target: true
4667
- });
4668
- });
4669
- STACK_IMAGE_SYNC_GROUPS_INFO.push({
4670
- synchronizerId,
4671
- viewports
4672
- });
4673
4653
  });
4654
+ return viewports;
4674
4655
  }
4656
+ ;
4675
4657
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/utils/selection.ts
4676
4658
 
4677
4659
 
@@ -4980,6 +4962,11 @@ function commandsModule(_ref) {
4980
4962
  toolbarServiceRecordInteraction: props => {
4981
4963
  toolbarService.recordInteraction(props);
4982
4964
  },
4965
+ // Enable or disable a toggleable command, without calling the activation
4966
+ // Used to setup already active tools from hanging protocols
4967
+ setToolbarToggled: props => {
4968
+ toolbarService.setToggled(props.toolId, props.isActive ?? true);
4969
+ },
4983
4970
  setToolActive: _ref9 => {
4984
4971
  let {
4985
4972
  toolName,
@@ -5302,20 +5289,21 @@ function commandsModule(_ref) {
5302
5289
  toggledState
5303
5290
  } = _ref17;
5304
5291
  toggleStackImageSync({
5305
- getEnabledElement: esm.getEnabledElement,
5306
5292
  servicesManager,
5307
5293
  toggledState
5308
5294
  });
5309
5295
  },
5310
5296
  setSourceViewportForReferenceLinesTool: _ref18 => {
5311
5297
  let {
5312
- toggledState
5298
+ toggledState,
5299
+ viewportId
5313
5300
  } = _ref18;
5314
- const {
5315
- activeViewportId
5316
- } = viewportGridService.getState();
5317
- const viewportInfo = cornerstoneViewportService.getViewportInfo(activeViewportId);
5318
- const viewportId = viewportInfo.getViewportId();
5301
+ if (!viewportId) {
5302
+ const {
5303
+ activeViewportId
5304
+ } = viewportGridService.getState();
5305
+ viewportId = activeViewportId;
5306
+ }
5319
5307
  const toolGroup = toolGroupService.getToolGroupForViewport(viewportId);
5320
5308
  toolGroup.setToolConfiguration(dist_esm.ReferenceLinesTool.toolName, {
5321
5309
  sourceViewportId: viewportId
@@ -5471,9 +5459,10 @@ function commandsModule(_ref) {
5471
5459
  commandFn: actions.setSourceViewportForReferenceLinesTool
5472
5460
  },
5473
5461
  storePresentation: {
5474
- commandFn: actions.storePresentation,
5475
- storeContexts: [],
5476
- options: {}
5462
+ commandFn: actions.storePresentation
5463
+ },
5464
+ setToolbarToggled: {
5465
+ commandFn: actions.setToolbarToggled
5477
5466
  }
5478
5467
  };
5479
5468
  return {
@@ -1,9 +1,9 @@
1
- "use strict";
2
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[128],{
1
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[99],{
3
2
 
4
- /***/ 59128:
3
+ /***/ 7395:
5
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
5
 
6
+ "use strict";
7
7
  // ESM COMPAT FLAG
8
8
  __webpack_require__.r(__webpack_exports__);
9
9
 
@@ -16,46 +16,20 @@ __webpack_require__.d(__webpack_exports__, {
16
16
  var src = __webpack_require__(67869);
17
17
  // EXTERNAL MODULE: ../../ui/src/index.js + 485 modules
18
18
  var ui_src = __webpack_require__(71783);
19
- ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/toolbarButtons.js
19
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 331 modules
20
+ var esm = __webpack_require__(3743);
21
+ ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/toolbarButtons.ts
20
22
  // TODO: torn, can either bake this here; or have to create a whole new button type
21
23
  // Only ways that you can pass in a custom React component for render :l
22
24
 
23
25
 
26
+
24
27
  const {
25
28
  windowLevelPresets
26
29
  } = src.defaults;
27
- /**
28
- *
29
- * @param {*} type - 'tool' | 'action' | 'toggle'
30
- * @param {*} id
31
- * @param {*} icon
32
- * @param {*} label
33
- */
34
- function _createButton(type, id, icon, label, commands, tooltip, uiType) {
35
- return {
36
- id,
37
- icon,
38
- label,
39
- type,
40
- commands,
41
- tooltip,
42
- uiType
43
- };
44
- }
45
- function _createCommands(commandName, toolName, toolGroupIds) {
46
- return toolGroupIds.map(toolGroupId => ({
47
- /* It's a command that is being run when the button is clicked. */
48
- commandName,
49
- commandOptions: {
50
- toolName,
51
- toolGroupId
52
- },
53
- context: 'CORNERSTONE'
54
- }));
55
- }
56
- const _createActionButton = _createButton.bind(null, 'action');
57
- const _createToggleButton = _createButton.bind(null, 'toggle');
58
- const _createToolButton = _createButton.bind(null, 'tool');
30
+ const _createActionButton = src/* ToolbarService */.Ok._createButton.bind(null, 'action');
31
+ const _createToggleButton = src/* ToolbarService */.Ok._createButton.bind(null, 'toggle');
32
+ const _createToolButton = src/* ToolbarService */.Ok._createButton.bind(null, 'tool');
59
33
 
60
34
  /**
61
35
  *
@@ -78,6 +52,16 @@ function _createWwwcPreset(preset, title, subtitle) {
78
52
  }]
79
53
  };
80
54
  }
55
+ const ReferenceLinesCommands = [{
56
+ commandName: 'setSourceViewportForReferenceLinesTool',
57
+ context: 'CORNERSTONE'
58
+ }, {
59
+ commandName: 'setToolActive',
60
+ commandOptions: {
61
+ toolName: 'ReferenceLines'
62
+ },
63
+ context: 'CORNERSTONE'
64
+ }];
81
65
  const toolbarButtons = [
82
66
  // Measurement
83
67
  {
@@ -391,16 +375,24 @@ const toolbarButtons = [
391
375
  commandOptions: {},
392
376
  context: 'CORNERSTONE'
393
377
  }], 'Flip Horizontal'), _createToggleButton('StackImageSync', 'link', 'Stack Image Sync', [{
394
- commandName: 'toggleStackImageSync',
395
- commandOptions: {},
396
- context: 'CORNERSTONE'
397
- }]), _createToggleButton('ReferenceLines', 'tool-referenceLines',
378
+ commandName: 'toggleStackImageSync'
379
+ }], 'Enable position synchronization on stack viewports', {
380
+ listeners: {
381
+ [esm.EVENTS.STACK_VIEWPORT_NEW_STACK]: {
382
+ commandName: 'toggleStackImageSync',
383
+ commandOptions: {
384
+ toggledState: true
385
+ }
386
+ }
387
+ }
388
+ }), _createToggleButton('ReferenceLines', 'tool-referenceLines',
398
389
  // change this with the new icon
399
- 'Reference Lines', [{
400
- commandName: 'toggleReferenceLines',
401
- commandOptions: {},
402
- context: 'CORNERSTONE'
403
- }]), _createToolButton('StackScroll', 'tool-stack-scroll', 'Stack Scroll', [{
390
+ 'Reference Lines', ReferenceLinesCommands, 'Show Reference Lines', {
391
+ listeners: {
392
+ [esm.EVENTS.STACK_VIEWPORT_NEW_STACK]: ReferenceLinesCommands,
393
+ [esm.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED]: ReferenceLinesCommands
394
+ }
395
+ }), _createToolButton('StackScroll', 'tool-stack-scroll', 'Stack Scroll', [{
404
396
  commandName: 'setToolActive',
405
397
  commandOptions: {
406
398
  toolName: 'StackScroll'
@@ -451,7 +443,7 @@ const package_namespaceObject = JSON.parse('{"u2":"@ohif/mode-test"}');
451
443
 
452
444
  const id = package_namespaceObject.u2;
453
445
 
454
- ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/initToolGroups.js
446
+ ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/initToolGroups.ts
455
447
  function initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, toolGroupId) {
456
448
  const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.tools');
457
449
  const {
@@ -654,7 +646,7 @@ function initToolGroups(extensionManager, toolGroupService, commandsManager) {
654
646
  initMPRToolGroup(extensionManager, toolGroupService, commandsManager);
655
647
  }
656
648
  /* harmony default export */ const src_initToolGroups = (initToolGroups);
657
- ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/index.js
649
+ ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/index.ts
658
650
 
659
651
 
660
652
 
@@ -841,6 +833,13 @@ const mode = {
841
833
  };
842
834
  /* harmony default export */ const basic_test_mode_src = (mode);
843
835
 
836
+ /***/ }),
837
+
838
+ /***/ 78753:
839
+ /***/ (() => {
840
+
841
+ /* (ignored) */
842
+
844
843
  /***/ })
845
844
 
846
845
  }]);
@@ -968,8 +968,8 @@ function WorkList(_ref) {
968
968
  };
969
969
  });
970
970
  const hasStudies = numOfStudies > 0;
971
- const versionNumber = "3.7.0-beta.88";
972
- const commitHash = "1129c155d2c7d46c98a5df7c09879aa3d459fa7e";
971
+ const versionNumber = "3.7.0-beta.89";
972
+ const commitHash = "e36a6043315e900eeb6ce183772c7f852f478e96";
973
973
  const menuOptions = [{
974
974
  title: t('Header:About'),
975
975
  icon: 'info',
@@ -1926,7 +1926,7 @@ async function loadModule(module) {
1926
1926
  return imported.default;
1927
1927
  }
1928
1928
  if (module === "@ohif/extension-cornerstone") {
1929
- const imported = await Promise.all(/* import() */[__webpack_require__.e(743), __webpack_require__.e(775), __webpack_require__.e(957), __webpack_require__.e(604), __webpack_require__.e(774), __webpack_require__.e(967)]).then(__webpack_require__.bind(__webpack_require__, 94004));
1929
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(743), __webpack_require__.e(775), __webpack_require__.e(957), __webpack_require__.e(604), __webpack_require__.e(774), __webpack_require__.e(877)]).then(__webpack_require__.bind(__webpack_require__, 94848));
1930
1930
  return imported.default;
1931
1931
  }
1932
1932
  if (module === "@ohif/extension-measurement-tracking") {
@@ -1966,7 +1966,7 @@ async function loadModule(module) {
1966
1966
  return imported.default;
1967
1967
  }
1968
1968
  if (module === "@ohif/mode-longitudinal") {
1969
- const imported = await __webpack_require__.e(/* import() */ 348).then(__webpack_require__.bind(__webpack_require__, 14348));
1969
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(743), __webpack_require__.e(775), __webpack_require__.e(370)]).then(__webpack_require__.bind(__webpack_require__, 71522));
1970
1970
  return imported.default;
1971
1971
  }
1972
1972
  if (module === "@ohif/mode-segmentation") {
@@ -1982,14 +1982,14 @@ async function loadModule(module) {
1982
1982
  return imported.default;
1983
1983
  }
1984
1984
  if (module === "@ohif/mode-test") {
1985
- const imported = await __webpack_require__.e(/* import() */ 128).then(__webpack_require__.bind(__webpack_require__, 59128));
1985
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(743), __webpack_require__.e(775), __webpack_require__.e(99)]).then(__webpack_require__.bind(__webpack_require__, 7395));
1986
1986
  return imported.default;
1987
1987
  }
1988
1988
  if (module === "@ohif/mode-basic-dev-mode") {
1989
1989
  const imported = await __webpack_require__.e(/* import() */ 410).then(__webpack_require__.bind(__webpack_require__, 15410));
1990
1990
  return imported.default;
1991
1991
  }
1992
- return (await __webpack_require__(76118)(module)).default;
1992
+ return (await import( /* webpackIgnore: true */module)).default;
1993
1993
  }
1994
1994
 
1995
1995
  // Import a list of items (modules or string names)
@@ -8659,7 +8659,7 @@ const detectionOptions = {
8659
8659
  }
8660
8660
  });
8661
8661
  ;// CONCATENATED MODULE: ../../i18n/package.json
8662
- const package_namespaceObject = JSON.parse('{"i8":"3.7.0-beta.87"}');
8662
+ const package_namespaceObject = JSON.parse('{"i8":"3.7.0-beta.88"}');
8663
8663
  ;// CONCATENATED MODULE: ../../i18n/src/utils.js
8664
8664
  const languagesMap = {
8665
8665
  ar: 'Arabic',
@@ -32100,6 +32100,7 @@ function LayoutSelector(_ref) {
32100
32100
  border: '1px solid white',
32101
32101
  backgroundColor: isHovered(index) ? '#5acce6' : '#0b1a42'
32102
32102
  },
32103
+ "data-cy": `Layout-${index % columns}-${Math.floor(index / columns)}`,
32103
32104
  className: "cursor-pointer",
32104
32105
  onClick: () => {
32105
32106
  const x = index % columns;
@@ -53481,6 +53482,17 @@ const ToolbarService_EVENTS = {
53481
53482
  TOOL_BAR_STATE_MODIFIED: 'event::toolBarService:toolBarStateModified'
53482
53483
  };
53483
53484
  class ToolbarService extends pubSubServiceInterface/* PubSubService */.h {
53485
+ static _createButton(type, id, icon, label, commands, tooltip, extraOptions) {
53486
+ return {
53487
+ id,
53488
+ icon,
53489
+ label,
53490
+ type,
53491
+ commands,
53492
+ tooltip,
53493
+ ...extraOptions
53494
+ };
53495
+ }
53484
53496
  constructor(commandsManager) {
53485
53497
  super(ToolbarService_EVENTS);
53486
53498
  this.buttons = {};
@@ -53644,12 +53656,18 @@ class ToolbarService extends pubSubServiceInterface/* PubSubService */.h {
53644
53656
  return this.buttons;
53645
53657
  }
53646
53658
  getActiveTools() {
53647
- return [this.state.primaryToolId, ...Object.keys(this.state.toggles)];
53659
+ const activeTools = [this.state.primaryToolId];
53660
+ Object.keys(this.state.toggles).forEach(key => {
53661
+ if (this.state.toggles[key]) {
53662
+ activeTools.push(key);
53663
+ }
53664
+ });
53665
+ return activeTools;
53648
53666
  }
53649
53667
 
53650
- /** Sets the toggle state of a button to the isActive state */
53651
- setActive(id, isActive) {
53652
- if (isActive) {
53668
+ /** Sets the toggle state of a button to the isToggled state */
53669
+ setToggled(id, isToggled) {
53670
+ if (isToggled) {
53653
53671
  this.state.toggles[id] = true;
53654
53672
  } else {
53655
53673
  delete this.state.toggles[id];
@@ -53668,6 +53686,26 @@ class ToolbarService extends pubSubServiceInterface/* PubSubService */.h {
53668
53686
  getButton(id) {
53669
53687
  return this.buttons[id];
53670
53688
  }
53689
+
53690
+ /** Gets a nested button, found in the items/props for the children */
53691
+ getNestedButton(id) {
53692
+ if (this.buttons[id]) {
53693
+ return this.buttons[id];
53694
+ }
53695
+ for (const buttonId of Object.keys(this.buttons)) {
53696
+ const {
53697
+ primary,
53698
+ items
53699
+ } = this.buttons[buttonId].props || {};
53700
+ if (primary?.id === id) {
53701
+ return primary;
53702
+ }
53703
+ const found = items?.find(childButton => childButton.id === id);
53704
+ if (found) {
53705
+ return found;
53706
+ }
53707
+ }
53708
+ }
53671
53709
  setButtons(buttons) {
53672
53710
  this.buttons = buttons;
53673
53711
  this._broadcastEvent(this.EVENTS.TOOL_BAR_MODIFIED, {
@@ -53725,20 +53763,19 @@ class ToolbarService extends pubSubServiceInterface/* PubSubService */.h {
53725
53763
  if (!this.buttons[button.id]) {
53726
53764
  this.buttons[button.id] = button;
53727
53765
  }
53728
- this._setTogglesForButtonItems(button.props?.items);
53729
53766
  });
53767
+ this._setTogglesForButtonItems(buttons);
53730
53768
  this._broadcastEvent(this.EVENTS.TOOL_BAR_MODIFIED, {});
53731
53769
  }
53732
- _setTogglesForButtonItems(buttonItems) {
53733
- if (!buttonItems) {
53770
+ _setTogglesForButtonItems(buttons) {
53771
+ if (!buttons) {
53734
53772
  return;
53735
53773
  }
53736
- buttonItems.forEach(buttonItem => {
53774
+ buttons.forEach(buttonItem => {
53737
53775
  if (buttonItem.type === 'toggle') {
53738
- this.state.toggles[buttonItem.id] = buttonItem.isActive;
53739
- } else {
53740
- this._setTogglesForButtonItems(buttonItem.props?.items);
53776
+ this.setToggled(buttonItem.id, buttonItem.isActive);
53741
53777
  }
53778
+ this._setTogglesForButtonItems(buttonItem.props?.items);
53742
53779
  });
53743
53780
  }
53744
53781
 
@@ -58176,7 +58213,9 @@ class MetadataProvider {
58176
58213
  }
58177
58214
  _getCornerstoneDICOMImageLoaderTag(wadoImageLoaderTag, instance) {
58178
58215
  let metadata = WADO_IMAGE_LOADER[wadoImageLoaderTag]?.(instance);
58179
- if (metadata) return metadata;
58216
+ if (metadata) {
58217
+ return metadata;
58218
+ }
58180
58219
  switch (wadoImageLoaderTag) {
58181
58220
  case WADO_IMAGE_LOADER_TAGS.GENERAL_SERIES_MODULE:
58182
58221
  const {
@@ -58314,12 +58353,39 @@ class MetadataProvider {
58314
58353
  const ROIMeanTag = `${groupStr}1302`;
58315
58354
  const ROIStandardDeviationTag = `${groupStr}1303`;
58316
58355
  const OverlayOrigin = instance[OverlayOriginTag];
58356
+ let rows = 0;
58357
+ if (instance[OverlayRowsTag] instanceof Array) {
58358
+ // The DICOM VR for overlay rows is US (unsigned short).
58359
+ const rowsInt16Array = new Uint16Array(instance[OverlayRowsTag][0]);
58360
+ rows = rowsInt16Array[0];
58361
+ } else {
58362
+ rows = instance[OverlayRowsTag];
58363
+ }
58364
+ let columns = 0;
58365
+ if (instance[OverlayColumnsTag] instanceof Array) {
58366
+ // The DICOM VR for overlay columns is US (unsigned short).
58367
+ const columnsInt16Array = new Uint16Array(instance[OverlayColumnsTag][0]);
58368
+ columns = columnsInt16Array[0];
58369
+ } else {
58370
+ columns = instance[OverlayColumnsTag];
58371
+ }
58372
+ let x = 0;
58373
+ let y = 0;
58374
+ if (OverlayOrigin.length === 1) {
58375
+ // The DICOM VR for overlay origin is SS (signed short) with a multiplicity of 2.
58376
+ const originInt16Array = new Int16Array(OverlayOrigin[0]);
58377
+ x = originInt16Array[0];
58378
+ y = originInt16Array[1];
58379
+ } else {
58380
+ x = OverlayOrigin[0];
58381
+ y = OverlayOrigin[1];
58382
+ }
58317
58383
  const overlay = {
58318
- rows: instance[OverlayRowsTag],
58319
- columns: instance[OverlayColumnsTag],
58384
+ rows: rows,
58385
+ columns: columns,
58320
58386
  type: instance[OverlayType],
58321
- x: OverlayOrigin[0],
58322
- y: OverlayOrigin[1],
58387
+ x,
58388
+ y,
58323
58389
  pixelData: OverlayData,
58324
58390
  description: instance[OverlayDescriptionTag],
58325
58391
  label: instance[OverlayLabelTag],
@@ -58453,7 +58519,7 @@ class MetadataProvider {
58453
58519
  // remove &frame=number from imageId
58454
58520
  imageURI = imageURI.split('&frame=')[0];
58455
58521
  const uids = this.imageURIToUIDs.get(imageURI);
58456
- let frameNumber = this.getFrameInformationFromURL(imageId) || '1';
58522
+ const frameNumber = this.getFrameInformationFromURL(imageId) || '1';
58457
58523
  if (uids && frameNumber !== undefined) {
58458
58524
  return {
58459
58525
  ...uids,
@@ -155460,25 +155526,6 @@ function createMemoryRouter(routes, opts) {
155460
155526
 
155461
155527
 
155462
155528
 
155463
- /***/ }),
155464
-
155465
- /***/ 76118:
155466
- /***/ ((module) => {
155467
-
155468
- function webpackEmptyAsyncContext(req) {
155469
- // Here Promise.resolve().then() is used instead of new Promise() to prevent
155470
- // uncaught exception popping up in devtools
155471
- return Promise.resolve().then(() => {
155472
- var e = new Error("Cannot find module '" + req + "'");
155473
- e.code = 'MODULE_NOT_FOUND';
155474
- throw e;
155475
- });
155476
- }
155477
- webpackEmptyAsyncContext.keys = () => ([]);
155478
- webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;
155479
- webpackEmptyAsyncContext.id = 76118;
155480
- module.exports = webpackEmptyAsyncContext;
155481
-
155482
155529
  /***/ }),
155483
155530
 
155484
155531
  /***/ 32155:
@@ -159134,7 +159181,7 @@ var selectOrdinal = function selectOrdinal() {
159134
159181
  /******/ // This function allow to reference async chunks
159135
159182
  /******/ __webpack_require__.u = (chunkId) => {
159136
159183
  /******/ // return url for filenames based on template
159137
- /******/ return "" + (chunkId === 18 ? "dicom-microscopy-viewer" : chunkId) + ".bundle." + {"12":"ee9edd90752119b5aa50","18":"2c146384eb9466d02ff8","19":"31ffc81d2f96a605bf44","23":"e008ad788170f2ed5569","125":"253395f320b72180da63","128":"54e4f60b7c2402baa852","181":"73fc96c6b3ab1fabedc8","202":"96bbb4547a346fe3921f","220":"f7e1c96c94245e70f2be","221":"7315b2accee2e8ef1173","236":"259f024b8471405c4763","250":"4bebed43526c7e06344f","281":"d73dc63fc7c2a7a5a02d","342":"bbd694ebb39e249c17fb","348":"4064fd63611ef2ad7da9","359":"111dec9dab4bea81631b","410":"2494129ec5627c0f5692","417":"af0a207c29b109f84159","451":"1c714bfb8b66d3a5adfb","471":"4aaec34d87b0c93687c1","506":"2b33565f930da54ff584","530":"a03b6f942ace3e1baa1e","579":"8fc434a0c13d3f662d42","604":"a51f83e64004bca5f497","613":"3763f97feb0f9c8da315","663":"9c60dae218ab6565bc9c","686":"dccef1f36e4bc79bcc48","687":"7087fed4c4fb7e0024bf","743":"4bfe6e562ffb2c22708f","774":"7528cba56a1407357144","775":"2285e7e0e67878948c0d","782":"3fd7eed9e607265f3fab","814":"9268e58c124ae8617045","822":"00de6455c18be0307b41","831":"83658f62fcc769043605","886":"7324d84913daffb6a4c4","957":"8c09a01840ab8aa32734","967":"536ce534cd768626602b"}[chunkId] + ".js";
159184
+ /******/ return "" + (chunkId === 18 ? "dicom-microscopy-viewer" : chunkId) + ".bundle." + {"12":"00e9504be71ad6df95fe","18":"2c146384eb9466d02ff8","19":"ac29a85034c388d491e5","23":"e008ad788170f2ed5569","99":"e5cdaa188d44d58dbd16","125":"253395f320b72180da63","181":"73fc96c6b3ab1fabedc8","202":"96bbb4547a346fe3921f","220":"f7e1c96c94245e70f2be","221":"4345e4b6760ad26609ab","236":"ae586686f216bb35c71c","250":"4bebed43526c7e06344f","281":"8230dfc98567e1f931eb","342":"ee39d39568324dade9e8","359":"070ca05beb969580f284","370":"0fd9e32c33d620c25c0f","410":"b6969e97e86fe583dbae","417":"af0a207c29b109f84159","451":"1c714bfb8b66d3a5adfb","471":"4aaec34d87b0c93687c1","506":"1ec326a29a83b749c7bf","530":"a03b6f942ace3e1baa1e","579":"8fc434a0c13d3f662d42","604":"a51f83e64004bca5f497","613":"adf71ee20cedc7e40f9c","663":"0a8d83e79a119b1d9e0e","686":"dccef1f36e4bc79bcc48","687":"dfe3e1758a5159e90e4c","743":"4bfe6e562ffb2c22708f","774":"7528cba56a1407357144","775":"2285e7e0e67878948c0d","782":"a9956a661eafe2530e90","814":"2c85fbeb75306553fc7b","822":"00de6455c18be0307b41","831":"83658f62fcc769043605","877":"835fa27a8b3a2a9359d3","886":"7324d84913daffb6a4c4","957":"8c09a01840ab8aa32734"}[chunkId] + ".js";
159138
159185
  /******/ };
159139
159186
  /******/ })();
159140
159187
  /******/
@@ -159297,7 +159344,7 @@ var selectOrdinal = function selectOrdinal() {
159297
159344
  /******/ };
159298
159345
  /******/
159299
159346
  /******/ __webpack_require__.f.miniCss = (chunkId, promises) => {
159300
- /******/ var cssChunks = {"19":1,"181":1,"221":1,"250":1,"579":1,"967":1};
159347
+ /******/ var cssChunks = {"19":1,"181":1,"221":1,"250":1,"579":1,"877":1};
159301
159348
  /******/ if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
159302
159349
  /******/ else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
159303
159350
  /******/ promises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {
@@ -159439,7 +159486,7 @@ var selectOrdinal = function selectOrdinal() {
159439
159486
  /******/ "814": [
159440
159487
  /******/ 125
159441
159488
  /******/ ],
159442
- /******/ "967": [
159489
+ /******/ "877": [
159443
159490
  /******/ 23,
159444
159491
  /******/ 181
159445
159492
  /******/ ]
package/dist/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><meta name="mobile-web-app-capable" content="yes"/><meta name="application-name" content="OHIF Viewer"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta name="apple-mobile-web-app-title" content="@ohif/app"/><meta name="msapplication-TileColor" content="#fff"/><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"/><meta name="msapplication-config" content="/assets/browserconfig.xml"/><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/assets/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"/><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"/><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"/><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png"/><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png"/><link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png"/><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"/><script>window.PUBLIC_URL = '/';</script><script rel="preload" as="script" src="/app-config.js"></script><script rel="preload" as="script" type="module" src="/init-service-worker.js"></script><title>OHIF Viewer</title><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link href="https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap" rel="stylesheet" rel="preload" as="style"/><script defer="defer" src="/app.bundle.8cec805607b1723ace9e.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><meta name="mobile-web-app-capable" content="yes"/><meta name="application-name" content="OHIF Viewer"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta name="apple-mobile-web-app-title" content="@ohif/app"/><meta name="msapplication-TileColor" content="#fff"/><meta name="msapplication-TileImage" content="/assets/mstile-144x144.png"/><meta name="msapplication-config" content="/assets/browserconfig.xml"/><link rel="manifest" href="/manifest.json"/><link rel="shortcut icon" href="/assets/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"/><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"/><link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png"/><link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png"/><link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png"/><link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png"/><link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png"/><link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png"/><link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png"/><link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png"/><link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png"/><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png"/><link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png"/><link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png"/><link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png"/><link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png"/><link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png"/><link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png"/><link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json"/><script>window.PUBLIC_URL = '/';</script><script rel="preload" as="script" src="/app-config.js"></script><script rel="preload" as="script" type="module" src="/init-service-worker.js"></script><title>OHIF Viewer</title><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link href="https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap" rel="stylesheet" rel="preload" as="style"/><script defer="defer" src="/app.bundle.ebe908553f4d102750ff.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
package/dist/sw.js CHANGED
@@ -51,7 +51,7 @@ self.addEventListener('message', event => {
51
51
  }
52
52
  }
53
53
  });
54
- workbox.precaching.precacheAndRoute([{'revision':null,'url':'/12.bundle.ee9edd90752119b5aa50.js'},{'revision':null,'url':'/125.bundle.253395f320b72180da63.js'},{'revision':null,'url':'/128.bundle.54e4f60b7c2402baa852.js'},{'revision':null,'url':'/181.bundle.73fc96c6b3ab1fabedc8.js'},{'revision':'8079c6447e119ba0680e8fab5875745d','url':'/181.css'},{'revision':null,'url':'/19.bundle.31ffc81d2f96a605bf44.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/19.css'},{'revision':null,'url':'/202.bundle.96bbb4547a346fe3921f.js'},{'revision':null,'url':'/220.bundle.f7e1c96c94245e70f2be.js'},{'revision':null,'url':'/221.bundle.7315b2accee2e8ef1173.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/221.css'},{'revision':null,'url':'/23.bundle.e008ad788170f2ed5569.js'},{'revision':null,'url':'/236.bundle.259f024b8471405c4763.js'},{'revision':null,'url':'/250.bundle.4bebed43526c7e06344f.js'},{'revision':'0afb25509c7f072fbd7eda42c6895dbf','url':'/250.css'},{'revision':null,'url':'/281.bundle.d73dc63fc7c2a7a5a02d.js'},{'revision':null,'url':'/342.bundle.bbd694ebb39e249c17fb.js'},{'revision':null,'url':'/348.bundle.4064fd63611ef2ad7da9.js'},{'revision':null,'url':'/359.bundle.111dec9dab4bea81631b.js'},{'revision':'c4ea120c6da08aa75348edfa3e57ece9','url':'/36785fbd89b0e17f6099.wasm'},{'revision':null,'url':'/410.bundle.2494129ec5627c0f5692.js'},{'revision':null,'url':'/417.bundle.af0a207c29b109f84159.js'},{'revision':null,'url':'/451.bundle.1c714bfb8b66d3a5adfb.js'},{'revision':null,'url':'/471.bundle.4aaec34d87b0c93687c1.js'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/506.bundle.2b33565f930da54ff584.js'},{'revision':null,'url':'/530.bundle.a03b6f942ace3e1baa1e.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/579.css'},{'revision':null,'url':'/604.bundle.a51f83e64004bca5f497.js'},{'revision':'62b4ae8445d191d5aab5503ce475724d','url':'/610.min.worker.js'},{'revision':'3c2206525c18cd87dd28082949a4e43e','url':'/610.min.worker.js.map'},{'revision':null,'url':'/613.bundle.3763f97feb0f9c8da315.js'},{'revision':'5800265b6831396572fb5d32c6bd8eef','url':'/62ab5d58a2bea7b5a1dc.wasm'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/65916ef3def695744bda.wasm'},{'revision':null,'url':'/663.bundle.9c60dae218ab6565bc9c.js'},{'revision':null,'url':'/686.bundle.dccef1f36e4bc79bcc48.js'},{'revision':null,'url':'/687.bundle.7087fed4c4fb7e0024bf.js'},{'revision':null,'url':'/743.bundle.4bfe6e562ffb2c22708f.js'},{'revision':'cf3e4d4fa8884275461c195421812256','url':'/75788f12450d4c5ed494.wasm'},{'revision':'cc4a3a4da4ac1b863a714f93c66c6ef2','url':'/75a0c2dfe07b824c7d21.wasm'},{'revision':null,'url':'/774.bundle.7528cba56a1407357144.js'},{'revision':null,'url':'/775.bundle.2285e7e0e67878948c0d.js'},{'revision':null,'url':'/782.bundle.3fd7eed9e607265f3fab.js'},{'revision':null,'url':'/814.bundle.9268e58c124ae8617045.js'},{'revision':null,'url':'/822.bundle.00de6455c18be0307b41.js'},{'revision':null,'url':'/831.bundle.83658f62fcc769043605.js'},{'revision':null,'url':'/886.bundle.7324d84913daffb6a4c4.js'},{'revision':'74c9647440e51f149ad12923d6ead952','url':'/945.min.worker.js'},{'revision':'cdf6f0457d4af2cef04fc41816241bc1','url':'/945.min.worker.js.map'},{'revision':null,'url':'/957.bundle.8c09a01840ab8aa32734.js'},{'revision':null,'url':'/967.bundle.536ce534cd768626602b.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/967.css'},{'revision':'d1895aa7a4595dc279c382e5a31ef9f4','url':'/_headers'},{'revision':'e3bf0f3e9c34f51ad59836ae8e8eaf43','url':'/_redirects'},{'revision':'41bb4b36a914c2db5c383a627162b3da','url':'/app-config.js'},{'revision':'b087b338ae8c00e6585d8ed93cd9915e','url':'/app.bundle.css'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/android-chrome-144x144.png'},{'revision':'5cde390de8a619ebe55a669d2ac3effd','url':'/assets/android-chrome-192x192.png'},{'revision':'e7466a67e90471de05401e53b8fe20be','url':'/assets/android-chrome-256x256.png'},{'revision':'9bbe9b80156e930d19a4e1725aa9ddae','url':'/assets/android-chrome-36x36.png'},{'revision':'5698b2ac0c82fe06d84521fc5482df04','url':'/assets/android-chrome-384x384.png'},{'revision':'56bef3fceec344d9747f8abe9c0bba27','url':'/assets/android-chrome-48x48.png'},{'revision':'3e8b8a01290992e82c242557417b0596','url':'/assets/android-chrome-512x512.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/android-chrome-72x72.png'},{'revision':'4c3289bc690f8519012686888e08da71','url':'/assets/android-chrome-96x96.png'},{'revision':'cf464289183184df09292f581df0fb4f','url':'/assets/apple-touch-icon-1024x1024.png'},{'revision':'0857c5282c594e4900e8b31e3bade912','url':'/assets/apple-touch-icon-114x114.png'},{'revision':'4208f41a28130a67e9392a9dfcee6011','url':'/assets/apple-touch-icon-120x120.png'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/apple-touch-icon-144x144.png'},{'revision':'977d293982af7e9064ba20806b45cf35','url':'/assets/apple-touch-icon-152x152.png'},{'revision':'6de91b4d2a30600b410758405cb567b4','url':'/assets/apple-touch-icon-167x167.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-180x180.png'},{'revision':'647386c34e75f1213830ea9a38913525','url':'/assets/apple-touch-icon-57x57.png'},{'revision':'0c200fe83953738b330ea431083e7a86','url':'/assets/apple-touch-icon-60x60.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/apple-touch-icon-72x72.png'},{'revision':'c9989a807bb18633f6dcf254b5b56124','url':'/assets/apple-touch-icon-76x76.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-precomposed.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon.png'},{'revision':'05fa74ea9c1c0c3931ba96467999081d','url':'/assets/apple-touch-startup-image-1182x2208.png'},{'revision':'9e2cd03e1e6fd0520eea6846f4278018','url':'/assets/apple-touch-startup-image-1242x2148.png'},{'revision':'5591e3a1822cbc8439b99c1a40d53425','url':'/assets/apple-touch-startup-image-1496x2048.png'},{'revision':'337de578c5ca04bd7d2be19d24d83821','url':'/assets/apple-touch-startup-image-1536x2008.png'},{'revision':'cafb4ab4eafe6ef946bd229a1d88e7de','url':'/assets/apple-touch-startup-image-320x460.png'},{'revision':'d9bb9e558d729eeac5efb8be8d6111cc','url':'/assets/apple-touch-startup-image-640x1096.png'},{'revision':'038b5b02bac8b82444bf9a87602ac216','url':'/assets/apple-touch-startup-image-640x920.png'},{'revision':'2177076eb07b1d64d663d7c03268be00','url':'/assets/apple-touch-startup-image-748x1024.png'},{'revision':'4fc097443815fe92503584c4bd73c630','url':'/assets/apple-touch-startup-image-750x1294.png'},{'revision':'2e29914062dce5c5141ab47eea2fc5d9','url':'/assets/apple-touch-startup-image-768x1004.png'},{'revision':'f692ec286b3a332c17985f4ed38b1076','url':'/assets/browserconfig.xml'},{'revision':'f3d9a3b647853c45b0e132e4acd0cc4a','url':'/assets/coast-228x228.png'},{'revision':'ad6e1def5c66193d649a31474bbfe45d','url':'/assets/favicon-16x16.png'},{'revision':'84d1dcdb6cdfa55e2f46be0c80fa5698','url':'/assets/favicon-32x32.png'},{'revision':'95fb44c4998a46109e49d724c060db24','url':'/assets/favicon.ico'},{'revision':'5df2a5b0cee399ac0bc40af74ba3c2cb','url':'/assets/firefox_app_128x128.png'},{'revision':'11fd9098c4b07c8a07e1d2a1e309e046','url':'/assets/firefox_app_512x512.png'},{'revision':'27cddfc922dca3bfa27b4a00fc2f5e36','url':'/assets/firefox_app_60x60.png'},{'revision':'2017d95fae79dcf34b5a5b52586d4763','url':'/assets/manifest.webapp'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/mstile-144x144.png'},{'revision':'334895225e16a7777e45d81964725a97','url':'/assets/mstile-150x150.png'},{'revision':'e295cca4af6ed0365cf7b014d91b0e9d','url':'/assets/mstile-310x150.png'},{'revision':'cbefa8c42250e5f2443819fe2c69d91e','url':'/assets/mstile-310x310.png'},{'revision':'aa411a69df2b33a1362fa38d1257fa9d','url':'/assets/mstile-70x70.png'},{'revision':'5609af4f69e40e33471aee770ea1d802','url':'/assets/yandex-browser-50x50.png'},{'revision':'dd001f21b3970d5a7f3e245cc10d21df','url':'/assets/yandex-browser-manifest.json'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'5f5a189af3f93caac4d97cf63347d7df','url':'/cornerstoneDICOMImageLoader.min.js'},{'revision':'346733bc702ee77bf7243351d99974f8','url':'/cornerstoneDICOMImageLoader.min.js.map'},{'revision':null,'url':'/dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js'},{'revision':'9d8c85b42d04bb117a3b583d654fbb08','url':'/dicomMicroscopyViewer.min.js'},{'revision':'450494c199cf8dd8e8c34d5e98bf5334','url':'/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'4acdd19a35d759ec2669f1ba9490937d','url':'/es6-shim.min.js'},{'revision':'791565db341e8852807303918f5f9939','url':'/google.js'},{'revision':'8cd0085b9ac456666c71c3f88e427ded','url':'/index.html'},{'revision':'feee2d4ed9d00c64f0e4d6a46608fecf','url':'/index.worker.e62ecca63f1a2e124230.worker.js'},{'revision':'beaf37c564436e46bbcd825f0330cdbf','url':'/index.worker.e62ecca63f1a2e124230.worker.js.map'},{'revision':'71cec55513e051f0778ad89be760c11a','url':'/index.worker.min.worker.js'},{'revision':'fd1116add443fee52a935df926396e0f','url':'/index.worker.min.worker.js.map'},{'revision':'31c0367ca4160b2c6373e905739c5719','url':'/init-service-worker.js'},{'revision':'74fc9658b62903be2048c1f82a22b4d4','url':'/manifest.json'},{'revision':'3fa71aa0af3e34b4ebd9a71eee0f4bdd','url':'/ohif-logo-light.svg'},{'revision':'7e81da785c63e75650101db6c5d7560e','url':'/ohif-logo.svg'},{'revision':'eadf8bf1d85032a029e2c0df4b8938b0','url':'/oidc-client.min.js'},{'revision':'a1aef5311245f5864315443d12246c37','url':'/polyfill.min.js'},{'revision':'b1e488d9955b62bd2858874df11d5223','url':'/silent-refresh.html'}]);
54
+ workbox.precaching.precacheAndRoute([{'revision':null,'url':'/12.bundle.00e9504be71ad6df95fe.js'},{'revision':null,'url':'/125.bundle.253395f320b72180da63.js'},{'revision':null,'url':'/181.bundle.73fc96c6b3ab1fabedc8.js'},{'revision':'8079c6447e119ba0680e8fab5875745d','url':'/181.css'},{'revision':null,'url':'/19.bundle.ac29a85034c388d491e5.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/19.css'},{'revision':null,'url':'/202.bundle.96bbb4547a346fe3921f.js'},{'revision':null,'url':'/220.bundle.f7e1c96c94245e70f2be.js'},{'revision':null,'url':'/221.bundle.4345e4b6760ad26609ab.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/221.css'},{'revision':null,'url':'/23.bundle.e008ad788170f2ed5569.js'},{'revision':null,'url':'/236.bundle.ae586686f216bb35c71c.js'},{'revision':null,'url':'/250.bundle.4bebed43526c7e06344f.js'},{'revision':'0afb25509c7f072fbd7eda42c6895dbf','url':'/250.css'},{'revision':null,'url':'/281.bundle.8230dfc98567e1f931eb.js'},{'revision':null,'url':'/342.bundle.ee39d39568324dade9e8.js'},{'revision':null,'url':'/359.bundle.070ca05beb969580f284.js'},{'revision':'c4ea120c6da08aa75348edfa3e57ece9','url':'/36785fbd89b0e17f6099.wasm'},{'revision':null,'url':'/370.bundle.0fd9e32c33d620c25c0f.js'},{'revision':null,'url':'/410.bundle.b6969e97e86fe583dbae.js'},{'revision':null,'url':'/417.bundle.af0a207c29b109f84159.js'},{'revision':null,'url':'/451.bundle.1c714bfb8b66d3a5adfb.js'},{'revision':null,'url':'/471.bundle.4aaec34d87b0c93687c1.js'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/506.bundle.1ec326a29a83b749c7bf.js'},{'revision':null,'url':'/530.bundle.a03b6f942ace3e1baa1e.js'},{'revision':'51b8ed55f5b8d448837222f03bdd6de8','url':'/579.css'},{'revision':null,'url':'/604.bundle.a51f83e64004bca5f497.js'},{'revision':'62b4ae8445d191d5aab5503ce475724d','url':'/610.min.worker.js'},{'revision':'3c2206525c18cd87dd28082949a4e43e','url':'/610.min.worker.js.map'},{'revision':null,'url':'/613.bundle.adf71ee20cedc7e40f9c.js'},{'revision':'5800265b6831396572fb5d32c6bd8eef','url':'/62ab5d58a2bea7b5a1dc.wasm'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/65916ef3def695744bda.wasm'},{'revision':null,'url':'/663.bundle.0a8d83e79a119b1d9e0e.js'},{'revision':null,'url':'/686.bundle.dccef1f36e4bc79bcc48.js'},{'revision':null,'url':'/687.bundle.dfe3e1758a5159e90e4c.js'},{'revision':null,'url':'/743.bundle.4bfe6e562ffb2c22708f.js'},{'revision':'cf3e4d4fa8884275461c195421812256','url':'/75788f12450d4c5ed494.wasm'},{'revision':'cc4a3a4da4ac1b863a714f93c66c6ef2','url':'/75a0c2dfe07b824c7d21.wasm'},{'revision':null,'url':'/774.bundle.7528cba56a1407357144.js'},{'revision':null,'url':'/775.bundle.2285e7e0e67878948c0d.js'},{'revision':null,'url':'/782.bundle.a9956a661eafe2530e90.js'},{'revision':null,'url':'/814.bundle.2c85fbeb75306553fc7b.js'},{'revision':null,'url':'/822.bundle.00de6455c18be0307b41.js'},{'revision':null,'url':'/831.bundle.83658f62fcc769043605.js'},{'revision':null,'url':'/877.bundle.835fa27a8b3a2a9359d3.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/877.css'},{'revision':null,'url':'/886.bundle.7324d84913daffb6a4c4.js'},{'revision':'74c9647440e51f149ad12923d6ead952','url':'/945.min.worker.js'},{'revision':'cdf6f0457d4af2cef04fc41816241bc1','url':'/945.min.worker.js.map'},{'revision':null,'url':'/957.bundle.8c09a01840ab8aa32734.js'},{'revision':null,'url':'/99.bundle.e5cdaa188d44d58dbd16.js'},{'revision':'d1895aa7a4595dc279c382e5a31ef9f4','url':'/_headers'},{'revision':'e3bf0f3e9c34f51ad59836ae8e8eaf43','url':'/_redirects'},{'revision':'41bb4b36a914c2db5c383a627162b3da','url':'/app-config.js'},{'revision':'b087b338ae8c00e6585d8ed93cd9915e','url':'/app.bundle.css'},{'revision':null,'url':'/app.bundle.ebe908553f4d102750ff.js'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/android-chrome-144x144.png'},{'revision':'5cde390de8a619ebe55a669d2ac3effd','url':'/assets/android-chrome-192x192.png'},{'revision':'e7466a67e90471de05401e53b8fe20be','url':'/assets/android-chrome-256x256.png'},{'revision':'9bbe9b80156e930d19a4e1725aa9ddae','url':'/assets/android-chrome-36x36.png'},{'revision':'5698b2ac0c82fe06d84521fc5482df04','url':'/assets/android-chrome-384x384.png'},{'revision':'56bef3fceec344d9747f8abe9c0bba27','url':'/assets/android-chrome-48x48.png'},{'revision':'3e8b8a01290992e82c242557417b0596','url':'/assets/android-chrome-512x512.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/android-chrome-72x72.png'},{'revision':'4c3289bc690f8519012686888e08da71','url':'/assets/android-chrome-96x96.png'},{'revision':'cf464289183184df09292f581df0fb4f','url':'/assets/apple-touch-icon-1024x1024.png'},{'revision':'0857c5282c594e4900e8b31e3bade912','url':'/assets/apple-touch-icon-114x114.png'},{'revision':'4208f41a28130a67e9392a9dfcee6011','url':'/assets/apple-touch-icon-120x120.png'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/apple-touch-icon-144x144.png'},{'revision':'977d293982af7e9064ba20806b45cf35','url':'/assets/apple-touch-icon-152x152.png'},{'revision':'6de91b4d2a30600b410758405cb567b4','url':'/assets/apple-touch-icon-167x167.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-180x180.png'},{'revision':'647386c34e75f1213830ea9a38913525','url':'/assets/apple-touch-icon-57x57.png'},{'revision':'0c200fe83953738b330ea431083e7a86','url':'/assets/apple-touch-icon-60x60.png'},{'revision':'517925e91e2ce724432d296b687d25e2','url':'/assets/apple-touch-icon-72x72.png'},{'revision':'c9989a807bb18633f6dcf254b5b56124','url':'/assets/apple-touch-icon-76x76.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon-precomposed.png'},{'revision':'87bff140e3773bd7479a620501c4aa5c','url':'/assets/apple-touch-icon.png'},{'revision':'05fa74ea9c1c0c3931ba96467999081d','url':'/assets/apple-touch-startup-image-1182x2208.png'},{'revision':'9e2cd03e1e6fd0520eea6846f4278018','url':'/assets/apple-touch-startup-image-1242x2148.png'},{'revision':'5591e3a1822cbc8439b99c1a40d53425','url':'/assets/apple-touch-startup-image-1496x2048.png'},{'revision':'337de578c5ca04bd7d2be19d24d83821','url':'/assets/apple-touch-startup-image-1536x2008.png'},{'revision':'cafb4ab4eafe6ef946bd229a1d88e7de','url':'/assets/apple-touch-startup-image-320x460.png'},{'revision':'d9bb9e558d729eeac5efb8be8d6111cc','url':'/assets/apple-touch-startup-image-640x1096.png'},{'revision':'038b5b02bac8b82444bf9a87602ac216','url':'/assets/apple-touch-startup-image-640x920.png'},{'revision':'2177076eb07b1d64d663d7c03268be00','url':'/assets/apple-touch-startup-image-748x1024.png'},{'revision':'4fc097443815fe92503584c4bd73c630','url':'/assets/apple-touch-startup-image-750x1294.png'},{'revision':'2e29914062dce5c5141ab47eea2fc5d9','url':'/assets/apple-touch-startup-image-768x1004.png'},{'revision':'f692ec286b3a332c17985f4ed38b1076','url':'/assets/browserconfig.xml'},{'revision':'f3d9a3b647853c45b0e132e4acd0cc4a','url':'/assets/coast-228x228.png'},{'revision':'ad6e1def5c66193d649a31474bbfe45d','url':'/assets/favicon-16x16.png'},{'revision':'84d1dcdb6cdfa55e2f46be0c80fa5698','url':'/assets/favicon-32x32.png'},{'revision':'95fb44c4998a46109e49d724c060db24','url':'/assets/favicon.ico'},{'revision':'5df2a5b0cee399ac0bc40af74ba3c2cb','url':'/assets/firefox_app_128x128.png'},{'revision':'11fd9098c4b07c8a07e1d2a1e309e046','url':'/assets/firefox_app_512x512.png'},{'revision':'27cddfc922dca3bfa27b4a00fc2f5e36','url':'/assets/firefox_app_60x60.png'},{'revision':'2017d95fae79dcf34b5a5b52586d4763','url':'/assets/manifest.webapp'},{'revision':'cb4f64534cdf8dd88f1d7219d44490db','url':'/assets/mstile-144x144.png'},{'revision':'334895225e16a7777e45d81964725a97','url':'/assets/mstile-150x150.png'},{'revision':'e295cca4af6ed0365cf7b014d91b0e9d','url':'/assets/mstile-310x150.png'},{'revision':'cbefa8c42250e5f2443819fe2c69d91e','url':'/assets/mstile-310x310.png'},{'revision':'aa411a69df2b33a1362fa38d1257fa9d','url':'/assets/mstile-70x70.png'},{'revision':'5609af4f69e40e33471aee770ea1d802','url':'/assets/yandex-browser-50x50.png'},{'revision':'dd001f21b3970d5a7f3e245cc10d21df','url':'/assets/yandex-browser-manifest.json'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'5f5a189af3f93caac4d97cf63347d7df','url':'/cornerstoneDICOMImageLoader.min.js'},{'revision':'346733bc702ee77bf7243351d99974f8','url':'/cornerstoneDICOMImageLoader.min.js.map'},{'revision':null,'url':'/dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js'},{'revision':'9d8c85b42d04bb117a3b583d654fbb08','url':'/dicomMicroscopyViewer.min.js'},{'revision':'450494c199cf8dd8e8c34d5e98bf5334','url':'/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'4acdd19a35d759ec2669f1ba9490937d','url':'/es6-shim.min.js'},{'revision':'791565db341e8852807303918f5f9939','url':'/google.js'},{'revision':'da8ad7f5b807960f26b42a0d2f8e481a','url':'/index.html'},{'revision':'feee2d4ed9d00c64f0e4d6a46608fecf','url':'/index.worker.e62ecca63f1a2e124230.worker.js'},{'revision':'beaf37c564436e46bbcd825f0330cdbf','url':'/index.worker.e62ecca63f1a2e124230.worker.js.map'},{'revision':'71cec55513e051f0778ad89be760c11a','url':'/index.worker.min.worker.js'},{'revision':'fd1116add443fee52a935df926396e0f','url':'/index.worker.min.worker.js.map'},{'revision':'31c0367ca4160b2c6373e905739c5719','url':'/init-service-worker.js'},{'revision':'74fc9658b62903be2048c1f82a22b4d4','url':'/manifest.json'},{'revision':'3fa71aa0af3e34b4ebd9a71eee0f4bdd','url':'/ohif-logo-light.svg'},{'revision':'7e81da785c63e75650101db6c5d7560e','url':'/ohif-logo.svg'},{'revision':'eadf8bf1d85032a029e2c0df4b8938b0','url':'/oidc-client.min.js'},{'revision':'a1aef5311245f5864315443d12246c37','url':'/polyfill.min.js'},{'revision':'b1e488d9955b62bd2858874df11d5223','url':'/silent-refresh.html'}]);
55
55
 
56
56
  // TODO: Cache API
57
57
  // https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/cache-api
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohif/app",
3
- "version": "3.7.0-beta.88",
3
+ "version": "3.7.0-beta.89",
4
4
  "productVersion": "3.4.0",
5
5
  "description": "OHIF Viewer",
6
6
  "author": "OHIF Contributors",
@@ -51,22 +51,22 @@
51
51
  "@cornerstonejs/codec-openjpeg": "^1.2.2",
52
52
  "@cornerstonejs/codec-openjph": "^2.4.2",
53
53
  "@cornerstonejs/dicom-image-loader": "^1.19.3",
54
- "@ohif/core": "3.7.0-beta.88",
55
- "@ohif/extension-cornerstone": "3.7.0-beta.88",
56
- "@ohif/extension-cornerstone-dicom-rt": "3.7.0-beta.88",
57
- "@ohif/extension-cornerstone-dicom-seg": "3.7.0-beta.88",
58
- "@ohif/extension-cornerstone-dicom-sr": "3.7.0-beta.88",
59
- "@ohif/extension-default": "3.7.0-beta.88",
60
- "@ohif/extension-dicom-microscopy": "3.7.0-beta.88",
61
- "@ohif/extension-dicom-pdf": "3.7.0-beta.88",
62
- "@ohif/extension-dicom-video": "3.7.0-beta.88",
63
- "@ohif/extension-test": "3.7.0-beta.88",
64
- "@ohif/i18n": "3.7.0-beta.88",
65
- "@ohif/mode-basic-dev-mode": "3.7.0-beta.88",
66
- "@ohif/mode-longitudinal": "3.7.0-beta.88",
67
- "@ohif/mode-microscopy": "3.7.0-beta.88",
68
- "@ohif/mode-test": "3.7.0-beta.88",
69
- "@ohif/ui": "3.7.0-beta.88",
54
+ "@ohif/core": "3.7.0-beta.89",
55
+ "@ohif/extension-cornerstone": "3.7.0-beta.89",
56
+ "@ohif/extension-cornerstone-dicom-rt": "3.7.0-beta.89",
57
+ "@ohif/extension-cornerstone-dicom-seg": "3.7.0-beta.89",
58
+ "@ohif/extension-cornerstone-dicom-sr": "3.7.0-beta.89",
59
+ "@ohif/extension-default": "3.7.0-beta.89",
60
+ "@ohif/extension-dicom-microscopy": "3.7.0-beta.89",
61
+ "@ohif/extension-dicom-pdf": "3.7.0-beta.89",
62
+ "@ohif/extension-dicom-video": "3.7.0-beta.89",
63
+ "@ohif/extension-test": "3.7.0-beta.89",
64
+ "@ohif/i18n": "3.7.0-beta.89",
65
+ "@ohif/mode-basic-dev-mode": "3.7.0-beta.89",
66
+ "@ohif/mode-longitudinal": "3.7.0-beta.89",
67
+ "@ohif/mode-microscopy": "3.7.0-beta.89",
68
+ "@ohif/mode-test": "3.7.0-beta.89",
69
+ "@ohif/ui": "3.7.0-beta.89",
70
70
  "@types/react": "^17.0.38",
71
71
  "classnames": "^2.3.2",
72
72
  "core-js": "^3.16.1",
File without changes