@ohif/app 3.10.0-beta.92 → 3.10.0-beta.94

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 (26) hide show
  1. package/dist/{6341.bundle.d397825d1134dbb7fb6e.js → 6341.bundle.1927f8abecd2d4897e36.js} +0 -3
  2. package/dist/{8228.bundle.defa94df3888aae6baf5.js → 8228.bundle.58198b11ccbdc65b468f.js} +153 -210
  3. package/dist/{8549.bundle.93160186ae7d63c4b032.js → 8549.bundle.b126b50ff944e7bbeae0.js} +3 -2
  4. package/dist/{app.bundle.954624feb131f1cad14c.js → app.bundle.d9f82bca23e61db2b7e3.js} +4 -4
  5. package/dist/index.html +1 -1
  6. package/dist/sw.js +1 -1
  7. package/package.json +18 -18
  8. /package/dist/{1919.bundle.51215a737c42fc41be2e.js → 1919.bundle.e1830bf8cd586821ae74.js} +0 -0
  9. /package/dist/{213.bundle.1bdf5de31e3626e2f0e9.js → 213.bundle.0033a13c72512f555012.js} +0 -0
  10. /package/dist/{2424.bundle.25fea8de9a0736d82963.js → 2424.bundle.921601b552715feeb32b.js} +0 -0
  11. /package/dist/{2825.bundle.03054504f63ee767c25d.js → 2825.bundle.86ca7f57ea3ccfbe4e5d.js} +0 -0
  12. /package/dist/{4834.bundle.7a55de9ac085ec03ea6a.js → 4834.bundle.387e6bce3cfe1c33e028.js} +0 -0
  13. /package/dist/{5770.bundle.7b3f458a71ede7628f4e.js → 5770.bundle.85b63b43f7327e225bd6.js} +0 -0
  14. /package/dist/{6027.bundle.76f16e253641d127333c.js → 6027.bundle.f575a083175589ddd9e2.js} +0 -0
  15. /package/dist/{6201.bundle.a4555f8142fb1bbd805e.js → 6201.bundle.93739a2e9ce18e94608c.js} +0 -0
  16. /package/dist/{6734.bundle.0b2759bd496b3494a29e.js → 6734.bundle.0d2d9b95b92f3036a5c1.js} +0 -0
  17. /package/dist/{7197.bundle.25e9d299e8c26e7d8880.js → 7197.bundle.ce2597ca0467f72c5d77.js} +0 -0
  18. /package/dist/{7490.bundle.76ac5a625bc346186f9b.js → 7490.bundle.25a7bbafea104bf1f610.js} +0 -0
  19. /package/dist/{7955.bundle.40601486cdfe881a1944.js → 7955.bundle.ac8c559a3c3a040a9797.js} +0 -0
  20. /package/dist/{8008.bundle.42111a8c574bc7a4c860.js → 8008.bundle.b3fae0a4e2c2d816975e.js} +0 -0
  21. /package/dist/{810.bundle.456dc7247f9b2be1c075.js → 810.bundle.74b50077d3ccca3ce52b.js} +0 -0
  22. /package/dist/{8259.bundle.e434fd61e4a1882ed4e9.js → 8259.bundle.65edfbb943853edf7ace.js} +0 -0
  23. /package/dist/{8558.bundle.2795cf3e1071590ec5a9.js → 8558.bundle.cb9401193638d3f07538.js} +0 -0
  24. /package/dist/{870.bundle.68bf67c8d8015a1242df.js → 870.bundle.57a9f64c8a29c6f5de21.js} +0 -0
  25. /package/dist/{9026.bundle.ac576fa6a4d22df6b84d.js → 9026.bundle.9e6c0ebd714977ba67e5.js} +0 -0
  26. /package/dist/{9551.bundle.3846cf9b3b86e80a27a3.js → 9551.bundle.c7e34b5f7e53e4c92e6c.js} +0 -0
@@ -2485,9 +2485,6 @@ const extension = {
2485
2485
  });
2486
2486
  return /*#__PURE__*/react.createElement(MicroscopyViewport, _extends({
2487
2487
  key: displaySetsKey,
2488
- servicesManager: servicesManager,
2489
- extensionManager: extensionManager,
2490
- commandsManager: commandsManager,
2491
2488
  activeViewportId: activeViewportId,
2492
2489
  setViewportActive: viewportId => {
2493
2490
  viewportGridService.setActiveViewportId(viewportId);
@@ -14,9 +14,6 @@ __webpack_require__.d(__webpack_exports__, {
14
14
 
15
15
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
16
16
  var react = __webpack_require__(86326);
17
- // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
18
- var prop_types = __webpack_require__(97598);
19
- var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20
17
  // EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 142 modules
21
18
  var src = __webpack_require__(38549);
22
19
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/DicomMicroscopyViewport.css
@@ -53,7 +50,8 @@ const listComponentGenerator = props => {
53
50
  // extracted by mini-css-extract-plugin
54
51
 
55
52
  // EXTERNAL MODULE: ../../../node_modules/moment/moment.js
56
- var moment_moment = __webpack_require__(14867);
53
+ var moment = __webpack_require__(14867);
54
+ var moment_default = /*#__PURE__*/__webpack_require__.n(moment);
57
55
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js
58
56
  var esm = __webpack_require__(81985);
59
57
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/components/ViewportOverlay/utils.ts
@@ -77,7 +75,7 @@ function isValidNumber(value) {
77
75
  * @param {number} precision
78
76
  * @returns {number} formatted number.
79
77
  */
80
- function utils_formatNumberPrecision(number, precision) {
78
+ function formatNumberPrecision(number, precision) {
81
79
  if (number !== null) {
82
80
  return parseFloat(number).toFixed(precision);
83
81
  }
@@ -90,8 +88,8 @@ function utils_formatNumberPrecision(number, precision) {
90
88
  * @param {string} strFormat
91
89
  * @returns {string} formatted date.
92
90
  */
93
- function utils_formatDICOMDate(date, strFormat = 'MMM D, YYYY') {
94
- return moment(date, 'YYYYMMDD').format(strFormat);
91
+ function formatDICOMDate(date, strFormat = 'MMM D, YYYY') {
92
+ return moment_default()(date, 'YYYYMMDD').format(strFormat);
95
93
  }
96
94
 
97
95
  /**
@@ -107,8 +105,8 @@ function utils_formatDICOMDate(date, strFormat = 'MMM D, YYYY') {
107
105
  * @param {string} strFormat
108
106
  * @returns {string} formatted name.
109
107
  */
110
- function utils_formatDICOMTime(time, strFormat = 'HH:mm:ss') {
111
- return moment(time, 'HH:mm:ss').format(strFormat);
108
+ function formatDICOMTime(time, strFormat = 'HH:mm:ss') {
109
+ return moment_default()(time, 'HH:mm:ss').format(strFormat);
112
110
  }
113
111
 
114
112
  /**
@@ -126,7 +124,7 @@ function getCompression(imageId) {
126
124
  } = generalImageModule;
127
125
  if (lossyImageCompression === '01' && lossyImageCompressionRatio !== '') {
128
126
  const compressionMethod = lossyImageCompressionMethod || 'Lossy: ';
129
- const compressionRatio = utils_formatNumberPrecision(lossyImageCompressionRatio, 2);
127
+ const compressionRatio = formatNumberPrecision(lossyImageCompressionRatio, 2);
130
128
  return compressionMethod + compressionRatio + ' : 1';
131
129
  }
132
130
  return 'Lossless / Uncompressed';
@@ -151,48 +149,50 @@ const {
151
149
  * @returns
152
150
  */
153
151
  const generateFromConfig = ({
154
- topLeft = [],
155
- topRight = [],
156
- bottomLeft = [],
157
- bottomRight = [],
158
- itemGenerator = () => {}
152
+ config,
153
+ overlayData,
154
+ ...props
159
155
  }) => {
160
- return props => {
161
- const topLeftClass = 'top-viewport left-viewport text-primary-light';
162
- const topRightClass = 'top-viewport right-viewport-scrollbar text-primary-light';
163
- const bottomRightClass = 'bottom-viewport right-viewport-scrollbar text-primary-light';
164
- const bottomLeftClass = 'bottom-viewport left-viewport text-primary-light';
165
- const overlay = 'absolute pointer-events-none microscopy-viewport-overlay';
166
- return /*#__PURE__*/react.createElement(react.Fragment, null, topLeft && topLeft.length > 0 && /*#__PURE__*/react.createElement("div", {
167
- "data-cy": 'viewport-overlay-top-left',
168
- className: classnames_default()(overlay, topLeftClass)
169
- }, ViewportOverlay_listComponentGenerator({
170
- ...props,
171
- list: topLeft,
172
- itemGenerator
173
- })), topRight && topRight.length > 0 && /*#__PURE__*/react.createElement("div", {
174
- "data-cy": 'viewport-overlay-top-right',
175
- className: classnames_default()(overlay, topRightClass)
176
- }, ViewportOverlay_listComponentGenerator({
177
- ...props,
178
- list: topRight,
179
- itemGenerator
180
- })), bottomRight && bottomRight.length > 0 && /*#__PURE__*/react.createElement("div", {
181
- "data-cy": 'viewport-overlay-bottom-right',
182
- className: classnames_default()(overlay, bottomRightClass)
183
- }, ViewportOverlay_listComponentGenerator({
184
- ...props,
185
- list: bottomRight,
186
- itemGenerator
187
- })), bottomLeft && bottomLeft.length > 0 && /*#__PURE__*/react.createElement("div", {
188
- "data-cy": 'viewport-overlay-bottom-left',
189
- className: classnames_default()(overlay, bottomLeftClass)
190
- }, ViewportOverlay_listComponentGenerator({
191
- ...props,
192
- list: bottomLeft,
193
- itemGenerator
194
- })));
195
- };
156
+ const {
157
+ topLeft = [],
158
+ topRight = [],
159
+ bottomLeft = [],
160
+ bottomRight = []
161
+ } = overlayData ?? {};
162
+ const topLeftClass = 'top-viewport left-viewport text-primary-light';
163
+ const topRightClass = 'top-viewport right-viewport-scrollbar text-primary-light';
164
+ const bottomRightClass = 'bottom-viewport right-viewport-scrollbar text-primary-light';
165
+ const bottomLeftClass = 'bottom-viewport left-viewport text-primary-light';
166
+ const overlay = 'absolute pointer-events-none microscopy-viewport-overlay';
167
+ return /*#__PURE__*/react.createElement(react.Fragment, null, topLeft && topLeft.length > 0 && /*#__PURE__*/react.createElement("div", {
168
+ "data-cy": 'viewport-overlay-top-left',
169
+ className: classnames_default()(overlay, topLeftClass)
170
+ }, ViewportOverlay_listComponentGenerator({
171
+ ...props,
172
+ list: topLeft,
173
+ itemGenerator
174
+ })), topRight && topRight.length > 0 && /*#__PURE__*/react.createElement("div", {
175
+ "data-cy": 'viewport-overlay-top-right',
176
+ className: classnames_default()(overlay, topRightClass)
177
+ }, ViewportOverlay_listComponentGenerator({
178
+ ...props,
179
+ list: topRight,
180
+ itemGenerator
181
+ })), bottomRight && bottomRight.length > 0 && /*#__PURE__*/react.createElement("div", {
182
+ "data-cy": 'viewport-overlay-bottom-right',
183
+ className: classnames_default()(overlay, bottomRightClass)
184
+ }, ViewportOverlay_listComponentGenerator({
185
+ ...props,
186
+ list: bottomRight,
187
+ itemGenerator
188
+ })), bottomLeft && bottomLeft.length > 0 && /*#__PURE__*/react.createElement("div", {
189
+ "data-cy": 'viewport-overlay-bottom-left',
190
+ className: classnames_default()(overlay, bottomLeftClass)
191
+ }, ViewportOverlay_listComponentGenerator({
192
+ ...props,
193
+ list: bottomLeft,
194
+ itemGenerator
195
+ })));
196
196
  };
197
197
  const itemGenerator = props => {
198
198
  const {
@@ -226,15 +226,15 @@ const itemGenerator = props => {
226
226
  classname: 'mr-1 font-light',
227
227
  value
228
228
  }];
229
- return /*#__PURE__*/React.createElement("div", {
229
+ return /*#__PURE__*/react.createElement("div", {
230
230
  key: item.id,
231
231
  className: "flex flex-row"
232
- }, contentsValue.map((content, idx) => /*#__PURE__*/React.createElement("span", {
232
+ }, contentsValue.map((content, idx) => /*#__PURE__*/react.createElement("span", {
233
233
  key: idx,
234
234
  className: content.className
235
235
  }, content.value)));
236
236
  };
237
- /* harmony default export */ const ViewportOverlay = (generateFromConfig({}));
237
+ /* harmony default export */ const ViewportOverlay = (generateFromConfig);
238
238
  ;// CONCATENATED MODULE: ../../../extensions/dicom-microscopy/src/utils/dicomWebClient.ts
239
239
 
240
240
 
@@ -316,75 +316,42 @@ var dcmjs_es = __webpack_require__(5842);
316
316
 
317
317
 
318
318
 
319
- class DicomMicroscopyViewport extends react.Component {
320
- constructor(props) {
321
- super(props);
322
- this.state = {
323
- error: null,
324
- isLoaded: false
325
- };
326
- this.microscopyService = void 0;
327
- this.customizationService = void 0;
328
- this.viewer = null;
329
- // dicom-microscopy-viewer instance
330
- this.managedViewer = null;
331
- // managed wrapper of microscopy-dicom extension
332
- this.container = /*#__PURE__*/react.createRef();
333
- this.overlayElement = /*#__PURE__*/react.createRef();
334
- this.setViewportActiveHandler = () => {
335
- const {
336
- setViewportActive,
337
- viewportId,
338
- activeViewportId
339
- } = this.props;
340
- if (viewportId !== activeViewportId) {
341
- setViewportActive(viewportId);
342
- }
343
- };
344
- const {
345
- microscopyService,
346
- customizationService
347
- } = this.props.servicesManager.services;
348
- this.microscopyService = microscopyService;
349
- this.customizationService = customizationService;
350
- }
351
- /**
352
- * Get the nearest ROI from the mouse click point
353
- *
354
- * @param event
355
- * @param autoselect
356
- * @returns
357
- */
358
- getNearbyROI(event, autoselect = true) {
359
- const symbols = Object.getOwnPropertySymbols(this.viewer);
360
- const _drawingSource = symbols.find(p => p.description === 'drawingSource');
361
- const _pyramid = symbols.find(p => p.description === 'pyramid');
362
- const _map = symbols.find(p => p.description === 'map');
363
- const _affine = symbols.find(p => p.description === 'affine');
364
- const feature = this.viewer[_drawingSource].getClosestFeatureToCoordinate(this.viewer[_map].getEventCoordinate(event));
365
- if (!feature) {
366
- return null;
367
- }
368
- const roiAnnotation = this.viewer._getROIFromFeature(feature, this.viewer[_pyramid].metadata, this.viewer[_affine]);
369
- if (roiAnnotation && autoselect) {
370
- this.microscopyService.selectAnnotation(roiAnnotation);
371
- }
372
- return roiAnnotation;
373
- }
319
+ function DicomMicroscopyViewport({
320
+ activeViewportId,
321
+ setViewportActive,
322
+ displaySets,
323
+ viewportId,
324
+ dataSource,
325
+ resizeRef
326
+ }) {
327
+ const {
328
+ servicesManager,
329
+ extensionManager
330
+ } = (0,core_src/* useSystem */.Jg)();
331
+ const [isLoaded, setIsLoaded] = (0,react.useState)(false);
332
+ const [viewer, setViewer] = (0,react.useState)(null);
333
+ const [managedViewer, setManagedViewer] = (0,react.useState)(null);
334
+ const overlayElement = (0,react.useRef)();
335
+ const container = (0,react.useRef)();
336
+ const {
337
+ microscopyService,
338
+ customizationService
339
+ } = servicesManager.services;
340
+ const overlayData = customizationService.getCustomization('microscopyViewport.overlay');
374
341
 
375
342
  // install the microscopy renderer into the web page.
376
343
  // you should only do this once.
377
- async installOpenLayersRenderer(container, displaySet) {
344
+ const installOpenLayersRenderer = (0,react.useCallback)(async (container, displaySet) => {
378
345
  const loadViewer = async metadata => {
379
- const dicomMicroscopyModule = await this.microscopyService.importDicomMicroscopyViewer();
346
+ const dicomMicroscopyModule = await microscopyService.importDicomMicroscopyViewer();
380
347
  const {
381
348
  viewer: DicomMicroscopyViewer,
382
349
  metadata: metadataUtils
383
350
  } = dicomMicroscopyModule;
384
351
  const microscopyViewer = DicomMicroscopyViewer.VolumeImageViewer;
385
352
  const client = getDicomWebClient({
386
- extensionManager: this.props.extensionManager,
387
- servicesManager: this.props.servicesManager
353
+ extensionManager,
354
+ servicesManager
388
355
  });
389
356
 
390
357
  // Parse, format, and filter metadata
@@ -438,7 +405,7 @@ class DicomMicroscopyViewport extends react.Component {
438
405
  const inst = (0,src.cleanDenaturalizedDataset)(dcmjs_es/* default.data */.Ay.data.DicomMetaDictionary.denaturalizeDataset(m), {
439
406
  StudyInstanceUID: m.StudyInstanceUID,
440
407
  SeriesInstanceUID: m.SeriesInstanceUID,
441
- dataSourceConfig: this.props.dataSource.getConfig()
408
+ dataSourceConfig: dataSource.getConfig()
442
409
  });
443
410
  if (!inst['00480105']) {
444
411
  // Optical Path Sequence, no OpticalPathIdentifier?
@@ -469,30 +436,32 @@ class DicomMicroscopyViewport extends react.Component {
469
436
  retrieveRendered: false,
470
437
  controls: ['overview', 'position']
471
438
  };
472
- this.viewer = new microscopyViewer(options);
473
- if (this.overlayElement && this.overlayElement.current && this.viewer.addViewportOverlay) {
474
- this.viewer.addViewportOverlay({
475
- element: this.overlayElement.current,
439
+ const viewer = new microscopyViewer(options);
440
+ if (overlayElement && overlayElement.current && viewer.addViewportOverlay) {
441
+ viewer.addViewportOverlay({
442
+ element: overlayElement.current,
476
443
  coordinates: [0, 0],
477
444
  // TODO: dicom-microscopy-viewer documentation says this can be false to be automatically, but it is not.
478
445
  navigate: true,
479
446
  className: 'OpenLayersOverlay'
480
447
  });
481
448
  }
482
- this.viewer.render({
449
+ viewer.render({
483
450
  container
484
451
  });
485
452
  const {
486
453
  StudyInstanceUID,
487
454
  SeriesInstanceUID
488
455
  } = displaySet;
489
- this.managedViewer = this.microscopyService.addViewer(this.viewer, this.props.viewportId, container, StudyInstanceUID, SeriesInstanceUID);
490
- this.managedViewer.addContextMenuCallback(event => {
456
+ const managedViewer = microscopyService.addViewer(viewer, viewportId, container, StudyInstanceUID, SeriesInstanceUID);
457
+ managedViewer.addContextMenuCallback(event => {
491
458
  // TODO: refactor this after Bill's changes on ContextMenu feature get merged
492
459
  // const roiAnnotationNearBy = this.getNearbyROI(event);
493
460
  });
461
+ setViewer(viewer);
462
+ setManagedViewer(managedViewer);
494
463
  };
495
- this.microscopyService.clearAnnotations();
464
+ microscopyService.clearAnnotations();
496
465
  let smDisplaySet = displaySet;
497
466
  if (displaySet.Modality === 'SR') {
498
467
  // for SR displaySet, let's load the actual image displaySet
@@ -503,100 +472,74 @@ class DicomMicroscopyViewport extends react.Component {
503
472
  if (displaySet.Modality === 'SR') {
504
473
  displaySet.load(smDisplaySet);
505
474
  }
506
- }
507
- componentDidMount() {
508
- const {
509
- displaySets,
510
- viewportOptions
511
- } = this.props;
512
- // Todo-rename: this is always getting the 0
475
+ }, [dataSource, extensionManager, microscopyService, servicesManager, viewportId]);
476
+ (0,react.useEffect)(() => {
513
477
  const displaySet = displaySets[0];
514
- this.installOpenLayersRenderer(this.container.current, displaySet).then(() => {
515
- this.setState({
516
- isLoaded: true
517
- });
478
+ installOpenLayersRenderer(container.current, displaySet).then(() => {
479
+ setIsLoaded(true);
518
480
  });
519
- }
520
- componentDidUpdate(prevProps, prevState, snapshot) {
521
- if (this.managedViewer && prevProps.displaySets !== this.props.displaySets) {
522
- const {
523
- displaySets
524
- } = this.props;
525
- const displaySet = displaySets[0];
526
- this.microscopyService.clearAnnotations();
527
-
528
- // loading SR
529
- if (displaySet.Modality === 'SR') {
530
- const referencedDisplaySet = displaySet.getSourceDisplaySet();
531
- displaySet.load(referencedDisplaySet);
481
+ return () => {
482
+ if (viewer) {
483
+ microscopyService.removeViewer(viewer);
532
484
  }
533
- }
534
- }
535
- componentWillUnmount() {
536
- this.microscopyService.removeViewer(this.viewer);
537
- }
538
- render() {
539
- const style = {
540
- width: '100%',
541
- height: '100%'
542
485
  };
543
- const displaySet = this.props.displaySets[0];
544
- const firstInstance = displaySet.firstInstance || displaySet.instance;
545
- const LoadingIndicatorProgress = this.customizationService.getCustomization('ui.loadingIndicatorProgress');
546
- return /*#__PURE__*/react.createElement("div", {
547
- className: 'DicomMicroscopyViewer',
548
- style: style,
549
- onClick: this.setViewportActiveHandler
550
- }, /*#__PURE__*/react.createElement("div", {
551
- style: {
552
- ...style,
553
- display: 'none'
554
- }
555
- }, /*#__PURE__*/react.createElement("div", {
556
- style: {
557
- ...style
558
- },
559
- ref: this.overlayElement
560
- }, /*#__PURE__*/react.createElement("div", {
561
- style: {
562
- position: 'relative',
563
- height: '100%',
564
- width: '100%'
565
- }
566
- }, displaySet && firstInstance.imageId && /*#__PURE__*/react.createElement(ViewportOverlay, {
567
- displaySet: displaySet,
568
- instance: displaySet.instance,
569
- metadata: displaySet.metadata
570
- })))), this.state.error ? /*#__PURE__*/react.createElement("h2", null, JSON.stringify(this.state.error)) : /*#__PURE__*/react.createElement("div", {
571
- style: style,
572
- ref: ref => {
573
- this.container.current = ref;
574
- this.props.resizeRef.current = ref;
486
+ }, []);
487
+ (0,react.useEffect)(() => {
488
+ const displaySet = displaySets[0];
489
+ microscopyService.clearAnnotations();
490
+
491
+ // loading SR
492
+ if (displaySet.Modality === 'SR') {
493
+ const referencedDisplaySet = displaySet.getSourceDisplaySet();
494
+ displaySet.load(referencedDisplaySet);
495
+ }
496
+ }, [managedViewer, displaySets, microscopyService]);
497
+ const style = {
498
+ width: '100%',
499
+ height: '100%'
500
+ };
501
+ const displaySet = displaySets[0];
502
+ const firstInstance = displaySet.firstInstance || displaySet.instance;
503
+ const LoadingIndicatorProgress = customizationService.getCustomization('ui.loadingIndicatorProgress');
504
+ return /*#__PURE__*/react.createElement("div", {
505
+ className: 'DicomMicroscopyViewer',
506
+ style: style,
507
+ onClick: () => {
508
+ if (viewportId !== activeViewportId) {
509
+ setViewportActive(viewportId);
575
510
  }
576
- }), this.state.isLoaded ? null : /*#__PURE__*/react.createElement(LoadingIndicatorProgress, {
577
- className: 'h-full w-full bg-black'
578
- }));
579
- }
511
+ }
512
+ }, /*#__PURE__*/react.createElement("div", {
513
+ style: {
514
+ ...style,
515
+ display: 'none'
516
+ }
517
+ }, /*#__PURE__*/react.createElement("div", {
518
+ style: {
519
+ ...style
520
+ },
521
+ ref: overlayElement
522
+ }, /*#__PURE__*/react.createElement("div", {
523
+ style: {
524
+ position: 'relative',
525
+ height: '100%',
526
+ width: '100%'
527
+ }
528
+ }, displaySet && firstInstance.imageId && /*#__PURE__*/react.createElement(ViewportOverlay, {
529
+ overlayData: overlayData,
530
+ displaySet: displaySet,
531
+ instance: displaySet.instance,
532
+ metadata: displaySet.metadata
533
+ })))), /*#__PURE__*/react.createElement("div", {
534
+ style: style,
535
+ ref: ref => {
536
+ container.current = ref;
537
+ resizeRef.current = ref;
538
+ }
539
+ }), isLoaded ? null : /*#__PURE__*/react.createElement(LoadingIndicatorProgress, {
540
+ className: 'h-full w-full bg-black'
541
+ }));
580
542
  }
581
- DicomMicroscopyViewport.propTypes = {
582
- viewportData: (prop_types_default()).object,
583
- activeViewportId: (prop_types_default()).string,
584
- setViewportActive: (prop_types_default()).func,
585
- // props from OHIF Viewport Grid
586
- displaySets: (prop_types_default()).array,
587
- viewportId: (prop_types_default()).string,
588
- viewportLabel: (prop_types_default()).string,
589
- dataSource: (prop_types_default()).object,
590
- viewportOptions: (prop_types_default()).object,
591
- displaySetOptions: (prop_types_default()).array,
592
- // other props from wrapping component
593
- servicesManager: (prop_types_default()).object,
594
- extensionManager: (prop_types_default()).object,
595
- commandsManager: (prop_types_default()).object,
596
- resizeRef: prop_types_default().oneOfType([(prop_types_default()).func, prop_types_default().shape({
597
- current: (prop_types_default()).any
598
- })])
599
- };
600
543
  /* harmony default export */ const src_DicomMicroscopyViewport = (DicomMicroscopyViewport);
601
544
 
602
545
  /***/ })
@@ -3074,8 +3074,8 @@ function ViewerHeader({
3074
3074
  hotkeyDefinitions,
3075
3075
  hotkeyDefaults
3076
3076
  } = hotkeysManager;
3077
- const versionNumber = "3.10.0-beta.92";
3078
- const commitHash = "149d6d049cd333b9e5846576b403ff387558a66f";
3077
+ const versionNumber = "3.10.0-beta.94";
3078
+ const commitHash = "084a10f7835acab6a851922850c474bc9c7b864b";
3079
3079
  const menuOptions = [{
3080
3080
  title: t('Header:About'),
3081
3081
  icon: 'info',
@@ -3811,6 +3811,7 @@ const getMenuItemsDefault = ({
3811
3811
  item
3812
3812
  }) => /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._2, {
3813
3813
  onClick: () => item.onClick({
3814
+ commandsManager,
3814
3815
  ...props
3815
3816
  })
3816
3817
  }, /*#__PURE__*/react.createElement("div", {
@@ -101832,8 +101832,8 @@ function WorkList({
101832
101832
  };
101833
101833
  });
101834
101834
  const hasStudies = numOfStudies > 0;
101835
- const versionNumber = "3.10.0-beta.92";
101836
- const commitHash = "149d6d049cd333b9e5846576b403ff387558a66f";
101835
+ const versionNumber = "3.10.0-beta.94";
101836
+ const commitHash = "084a10f7835acab6a851922850c474bc9c7b864b";
101837
101837
  const menuOptions = [{
101838
101838
  title: t('Header:About'),
101839
101839
  icon: 'info',
@@ -121533,7 +121533,7 @@ const detectionOptions = {
121533
121533
  }
121534
121534
  });
121535
121535
  ;// CONCATENATED MODULE: ../../i18n/package.json
121536
- const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.10.0-beta.91"}');
121536
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.10.0-beta.93"}');
121537
121537
  ;// CONCATENATED MODULE: ../../i18n/src/utils.js
121538
121538
  const languagesMap = {
121539
121539
  ar: 'Arabic',
@@ -414227,7 +414227,7 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
414227
414227
  /******/ // This function allow to reference async chunks
414228
414228
  /******/ __webpack_require__.u = (chunkId) => {
414229
414229
  /******/ // return url for filenames based on template
414230
- /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"213":"1bdf5de31e3626e2f0e9","572":"3f5527cde0d61e88a0fd","732":"6978ac30a1e36abf06db","810":"456dc7247f9b2be1c075","870":"68bf67c8d8015a1242df","1919":"51215a737c42fc41be2e","1927":"3b172968ee6878d78f9e","2424":"25fea8de9a0736d82963","2701":"641b8e4299d8370e861b","2825":"03054504f63ee767c25d","3054":"6b0dbbdb168d711efad4","3334":"95de16b9f8539a9195e5","3584":"37f95e5799f2410313bc","4202":"add83801fbc8227d551b","4526":"11b8a5b32121744ae056","4533":"f66373fbe5a0c349b0a9","4759":"0d60078f58f5a56c0157","4834":"7a55de9ac085ec03ea6a","4991":"aa561005b9bff1f391af","5038":"63e0dcf0360ed9ab6525","5261":"5454fb98c87e3e21b419","5674":"05e639d0871778c8093a","5770":"7b3f458a71ede7628f4e","6027":"76f16e253641d127333c","6201":"a4555f8142fb1bbd805e","6341":"d397825d1134dbb7fb6e","6734":"0b2759bd496b3494a29e","6896":"ca9b905abe733f279387","6939":"35a07bed912bc04c9d75","7159":"1761513105b61524f649","7197":"25e9d299e8c26e7d8880","7490":"76ac5a625bc346186f9b","7955":"40601486cdfe881a1944","8008":"42111a8c574bc7a4c860","8094":"5c44190a325ac23e3e5c","8228":"defa94df3888aae6baf5","8259":"e434fd61e4a1882ed4e9","8402":"fc21a5ee7809ad1cf9b1","8549":"93160186ae7d63c4b032","8558":"2795cf3e1071590ec5a9","9026":"ac576fa6a4d22df6b84d","9551":"3846cf9b3b86e80a27a3","9862":"a4ccc41bcff91a46d37e","9890":"10620379d01f950951bc"}[chunkId] + ".js";
414230
+ /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"213":"0033a13c72512f555012","572":"3f5527cde0d61e88a0fd","732":"6978ac30a1e36abf06db","810":"74b50077d3ccca3ce52b","870":"57a9f64c8a29c6f5de21","1919":"e1830bf8cd586821ae74","1927":"3b172968ee6878d78f9e","2424":"921601b552715feeb32b","2701":"641b8e4299d8370e861b","2825":"86ca7f57ea3ccfbe4e5d","3054":"6b0dbbdb168d711efad4","3334":"95de16b9f8539a9195e5","3584":"37f95e5799f2410313bc","4202":"add83801fbc8227d551b","4526":"11b8a5b32121744ae056","4533":"f66373fbe5a0c349b0a9","4759":"0d60078f58f5a56c0157","4834":"387e6bce3cfe1c33e028","4991":"aa561005b9bff1f391af","5038":"63e0dcf0360ed9ab6525","5261":"5454fb98c87e3e21b419","5674":"05e639d0871778c8093a","5770":"85b63b43f7327e225bd6","6027":"f575a083175589ddd9e2","6201":"93739a2e9ce18e94608c","6341":"1927f8abecd2d4897e36","6734":"0d2d9b95b92f3036a5c1","6896":"ca9b905abe733f279387","6939":"35a07bed912bc04c9d75","7159":"1761513105b61524f649","7197":"ce2597ca0467f72c5d77","7490":"25a7bbafea104bf1f610","7955":"ac8c559a3c3a040a9797","8008":"b3fae0a4e2c2d816975e","8094":"5c44190a325ac23e3e5c","8228":"58198b11ccbdc65b468f","8259":"65edfbb943853edf7ace","8402":"fc21a5ee7809ad1cf9b1","8549":"b126b50ff944e7bbeae0","8558":"cb9401193638d3f07538","9026":"9e6c0ebd714977ba67e5","9551":"c7e34b5f7e53e4c92e6c","9862":"a4ccc41bcff91a46d37e","9890":"10620379d01f950951bc"}[chunkId] + ".js";
414231
414231
  /******/ };
414232
414232
  /******/ })();
414233
414233
  /******/
package/dist/index.html CHANGED
@@ -3,4 +3,4 @@
3
3
  return import(moduleId);
4
4
  }
5
5
 
6
- window.PUBLIC_URL = '/';</script><script defer="defer" src="/app.bundle.954624feb131f1cad14c.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="react-portal"></div><div id="root"></div></body></html>
6
+ window.PUBLIC_URL = '/';</script><script defer="defer" src="/app.bundle.d9f82bca23e61db2b7e3.js"></script><link href="/app.bundle.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="react-portal"></div><div id="root"></div></body></html>
package/dist/sw.js CHANGED
@@ -50,7 +50,7 @@ self.addEventListener('message', event => {
50
50
  }
51
51
  }
52
52
  });
53
- workbox.precaching.precacheAndRoute([{'revision':null,'url':'/031089e563a18ada8441.wasm'},{'revision':null,'url':'/17dd54813d5acc10bf8f.wasm'},{'revision':null,'url':'/1919.bundle.51215a737c42fc41be2e.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/1919.css'},{'revision':null,'url':'/1927.bundle.3b172968ee6878d78f9e.js'},{'revision':null,'url':'/2045.bundle.aaa10dff6d93bec47a45.js'},{'revision':null,'url':'/213.bundle.1bdf5de31e3626e2f0e9.js'},{'revision':null,'url':'/2424.bundle.25fea8de9a0736d82963.js'},{'revision':null,'url':'/2701.bundle.641b8e4299d8370e861b.js'},{'revision':null,'url':'/2825.bundle.03054504f63ee767c25d.js'},{'revision':null,'url':'/3334.bundle.95de16b9f8539a9195e5.js'},{'revision':null,'url':'/3353.bundle.4f0b079518d4e63a38d7.js'},{'revision':null,'url':'/3677.bundle.22ecea02fae99fc4b073.js'},{'revision':null,'url':'/4202.bundle.add83801fbc8227d551b.js'},{'revision':null,'url':'/4526.bundle.11b8a5b32121744ae056.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/4526.css'},{'revision':null,'url':'/4533.bundle.f66373fbe5a0c349b0a9.js'},{'revision':null,'url':'/4759.bundle.0d60078f58f5a56c0157.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/4759.css'},{'revision':null,'url':'/4834.bundle.7a55de9ac085ec03ea6a.js'},{'revision':null,'url':'/4991.bundle.aa561005b9bff1f391af.js'},{'revision':null,'url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/5038.bundle.63e0dcf0360ed9ab6525.js'},{'revision':null,'url':'/5261.bundle.5454fb98c87e3e21b419.js'},{'revision':null,'url':'/5674.bundle.05e639d0871778c8093a.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/5674.css'},{'revision':null,'url':'/573.bundle.ae0bd4f3e1f4eac8ae43.js'},{'revision':null,'url':'/5770.bundle.7b3f458a71ede7628f4e.js'},{'revision':null,'url':'/5915.bundle.4ab1911d28bfd2abffab.js'},{'revision':null,'url':'/6027.bundle.76f16e253641d127333c.js'},{'revision':null,'url':'/6201.bundle.a4555f8142fb1bbd805e.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/6201.css'},{'revision':null,'url':'/6341.bundle.d397825d1134dbb7fb6e.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/6341.css'},{'revision':null,'url':'/6734.bundle.0b2759bd496b3494a29e.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/6734.css'},{'revision':null,'url':'/6896.bundle.ca9b905abe733f279387.js'},{'revision':null,'url':'/6939.bundle.35a07bed912bc04c9d75.js'},{'revision':null,'url':'/7159.bundle.1761513105b61524f649.js'},{'revision':'20a92cf14c2d8be6cd580f68780cc7fa','url':'/7159.css'},{'revision':null,'url':'/7197.bundle.25e9d299e8c26e7d8880.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/7197.css'},{'revision':null,'url':'/732.bundle.6978ac30a1e36abf06db.js'},{'revision':null,'url':'/7490.bundle.76ac5a625bc346186f9b.js'},{'revision':null,'url':'/7758.bundle.c8d106364298e7d288f0.js'},{'revision':null,'url':'/7955.bundle.40601486cdfe881a1944.js'},{'revision':null,'url':'/8008.bundle.42111a8c574bc7a4c860.js'},{'revision':null,'url':'/8094.bundle.5c44190a325ac23e3e5c.js'},{'revision':null,'url':'/810.bundle.456dc7247f9b2be1c075.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/810.css'},{'revision':null,'url':'/8228.bundle.defa94df3888aae6baf5.js'},{'revision':'bb0e0995c77e6df671bd2988a2aaa018','url':'/8228.css'},{'revision':null,'url':'/8259.bundle.e434fd61e4a1882ed4e9.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/8402.css'},{'revision':null,'url':'/8549.bundle.93160186ae7d63c4b032.js'},{'revision':null,'url':'/8558.bundle.2795cf3e1071590ec5a9.js'},{'revision':null,'url':'/870.bundle.68bf67c8d8015a1242df.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/870.css'},{'revision':null,'url':'/8888.bundle.7f49f53d289b49a00977.js'},{'revision':null,'url':'/9026.bundle.ac576fa6a4d22df6b84d.js'},{'revision':'a04a2f233dc569826f5f6e21b65bc87b','url':'/9026.css'},{'revision':null,'url':'/9551.bundle.3846cf9b3b86e80a27a3.js'},{'revision':null,'url':'/9862.bundle.a4ccc41bcff91a46d37e.js'},{'revision':null,'url':'/9890.bundle.10620379d01f950951bc.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/9890.css'},{'revision':'d41d8cd98f00b204e9800998ecf8427e','url':'/_headers'},{'revision':'e3bf0f3e9c34f51ad59836ae8e8eaf43','url':'/_redirects'},{'revision':null,'url':'/a957c5cd315f89b6feb1.wasm'},{'revision':'5f16cab45ca38d2d35ff37603677c0a6','url':'/app-config.js'},{'revision':null,'url':'/app.bundle.954624feb131f1cad14c.js'},{'revision':'4f57df0a5c6de673e13432207fb1e14f','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':'2547879ee2928a5fd56dca483bcbd967','url':'/assets/images/CT-AAA.png'},{'revision':'245628fb9d18d6c5cd529615079f8e86','url':'/assets/images/CT-AAA2.png'},{'revision':'997a9c8b57e7b4e46d8f01fb49d078c6','url':'/assets/images/CT-Air.png'},{'revision':'e7ed89711f63348d49898da3a2b73ab9','url':'/assets/images/CT-Bone.png'},{'revision':'09d1dc6efebb10a60cdf85ed74a10214','url':'/assets/images/CT-Bones.png'},{'revision':'f8ae9bafd3b90ba3efbdcbe8901db187','url':'/assets/images/CT-Cardiac.png'},{'revision':'ed0cc538aba90d6a1c029923ca9b47db','url':'/assets/images/CT-Cardiac2.png'},{'revision':'dfdaf4e4889aefbf09514545f45726bb','url':'/assets/images/CT-Cardiac3.png'},{'revision':'5d4b9a331136a1a5d7ce7ccf7dfcca36','url':'/assets/images/CT-Chest-Contrast-Enhanced.png'},{'revision':'5fb264499a5bb42487663b00e42d1513','url':'/assets/images/CT-Chest-Vessels.png'},{'revision':'ab8f0e569c972388ddaaa61b92449fac','url':'/assets/images/CT-Coronary-Arteries-2.png'},{'revision':'e4e7e2e3cc09bc8c4fb03b6441bd2845','url':'/assets/images/CT-Coronary-Arteries-3.png'},{'revision':'79a2962a2d3cbe4bd3b675b5ca83c659','url':'/assets/images/CT-Coronary-Arteries.png'},{'revision':'6502a6bdab1c70e2188c3bf12ce5d4e4','url':'/assets/images/CT-Cropped-Volume-Bone.png'},{'revision':'e28ad3cf5ed2006fc5a7cffd602736fc','url':'/assets/images/CT-Fat.png'},{'revision':'ca1c5be76053edee27e68ffbf9105101','url':'/assets/images/CT-Liver-Vasculature.png'},{'revision':'d6c9ab857ed2ad19f1ff20bea02b6655','url':'/assets/images/CT-Lung.png'},{'revision':'ddb599c6a163bdf28ece8de1a337470a','url':'/assets/images/CT-MIP.png'},{'revision':'0b0dcf7940a555e2a9a0900f7f84d4d3','url':'/assets/images/CT-Muscle.png'},{'revision':'6082d383f9ce375a5873e2a00fc4d372','url':'/assets/images/CT-Pulmonary-Arteries.png'},{'revision':'b317366149ee2607bec95d63eb4d7661','url':'/assets/images/CT-Soft-Tissue.png'},{'revision':'4b0cd5a673ebb71da22a91ed608d6695','url':'/assets/images/DTI-FA-Brain.png'},{'revision':'3ea1cbee022af5b94710b73726308832','url':'/assets/images/MR-Angio.png'},{'revision':'bd25ca7b166193547f34950eed440e5c','url':'/assets/images/MR-Default.png'},{'revision':'2e50a49b859aeb316a1c23f911fce9ad','url':'/assets/images/MR-MIP.png'},{'revision':'6ba74de6961e08652ff9e2f1871b473d','url':'/assets/images/MR-T2-Brain.png'},{'revision':'42406bb474f0f87cf04a5afbbcd5e389','url':'/assets/images/VolumeRendering.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':null,'url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/dicom-microscopy-viewer/5004fdc02f329ce53b69.wasm'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/dicom-microscopy-viewer/65916ef3def695744bda.wasm'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/dicom-microscopy-viewer/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/dicom-microscopy-viewer/c22b37c3488e1d6c3aa4.wasm'},{'revision':'eaa70476e800651625c9e5de4501edef','url':'/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js'},{'revision':'18464c31a0a171555ad626dc059cce2d','url':'/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'254380a19b838537d422eaf69c116b45','url':'/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.map'},{'revision':'91e3d8268b5314586d6f30676b2fab6c','url':'/dicom-microscopy-viewer/index.worker.min.worker.js'},{'revision':'8f4b222d2efaaf0f1c6372a33b2ee132','url':'/dicom-microscopy-viewer/index.worker.min.worker.js.map'},{'revision':'4acdd19a35d759ec2669f1ba9490937d','url':'/es6-shim.min.js'},{'revision':'966afc6cb727ef212a75802f2020834e','url':'/google.js'},{'revision':null,'url':'/histogram-worker.bundle.6b0dbbdb168d711efad4.js'},{'revision':'83c59e3dcd7407b106ee1516c3aaee90','url':'/index.html'},{'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':null,'url':'/polySeg.bundle.3f5527cde0d61e88a0fd.js'},{'revision':'a1aef5311245f5864315443d12246c37','url':'/polyfill.min.js'},{'revision':'981ac7f7543b8330e3826aff72c33382','url':'/serve.json'},{'revision':'b1e488d9955b62bd2858874df11d5223','url':'/silent-refresh.html'},{'revision':null,'url':'/suv-peak-worker.bundle.37f95e5799f2410313bc.js'}]);
53
+ workbox.precaching.precacheAndRoute([{'revision':null,'url':'/031089e563a18ada8441.wasm'},{'revision':null,'url':'/17dd54813d5acc10bf8f.wasm'},{'revision':null,'url':'/1919.bundle.e1830bf8cd586821ae74.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/1919.css'},{'revision':null,'url':'/1927.bundle.3b172968ee6878d78f9e.js'},{'revision':null,'url':'/2045.bundle.aaa10dff6d93bec47a45.js'},{'revision':null,'url':'/213.bundle.0033a13c72512f555012.js'},{'revision':null,'url':'/2424.bundle.921601b552715feeb32b.js'},{'revision':null,'url':'/2701.bundle.641b8e4299d8370e861b.js'},{'revision':null,'url':'/2825.bundle.86ca7f57ea3ccfbe4e5d.js'},{'revision':null,'url':'/3334.bundle.95de16b9f8539a9195e5.js'},{'revision':null,'url':'/3353.bundle.4f0b079518d4e63a38d7.js'},{'revision':null,'url':'/3677.bundle.22ecea02fae99fc4b073.js'},{'revision':null,'url':'/4202.bundle.add83801fbc8227d551b.js'},{'revision':null,'url':'/4526.bundle.11b8a5b32121744ae056.js'},{'revision':'185e5e0a10fa6ab2fc7b3c38e63d550b','url':'/4526.css'},{'revision':null,'url':'/4533.bundle.f66373fbe5a0c349b0a9.js'},{'revision':null,'url':'/4759.bundle.0d60078f58f5a56c0157.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/4759.css'},{'revision':null,'url':'/4834.bundle.387e6bce3cfe1c33e028.js'},{'revision':null,'url':'/4991.bundle.aa561005b9bff1f391af.js'},{'revision':null,'url':'/5004fdc02f329ce53b69.wasm'},{'revision':null,'url':'/5038.bundle.63e0dcf0360ed9ab6525.js'},{'revision':null,'url':'/5261.bundle.5454fb98c87e3e21b419.js'},{'revision':null,'url':'/5674.bundle.05e639d0871778c8093a.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/5674.css'},{'revision':null,'url':'/573.bundle.ae0bd4f3e1f4eac8ae43.js'},{'revision':null,'url':'/5770.bundle.85b63b43f7327e225bd6.js'},{'revision':null,'url':'/5915.bundle.4ab1911d28bfd2abffab.js'},{'revision':null,'url':'/6027.bundle.f575a083175589ddd9e2.js'},{'revision':null,'url':'/6201.bundle.93739a2e9ce18e94608c.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/6201.css'},{'revision':null,'url':'/6341.bundle.1927f8abecd2d4897e36.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/6341.css'},{'revision':null,'url':'/6734.bundle.0d2d9b95b92f3036a5c1.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/6734.css'},{'revision':null,'url':'/6896.bundle.ca9b905abe733f279387.js'},{'revision':null,'url':'/6939.bundle.35a07bed912bc04c9d75.js'},{'revision':null,'url':'/7159.bundle.1761513105b61524f649.js'},{'revision':'20a92cf14c2d8be6cd580f68780cc7fa','url':'/7159.css'},{'revision':null,'url':'/7197.bundle.ce2597ca0467f72c5d77.js'},{'revision':'aa1d1f3e32367e42fe90399144d94577','url':'/7197.css'},{'revision':null,'url':'/732.bundle.6978ac30a1e36abf06db.js'},{'revision':null,'url':'/7490.bundle.25a7bbafea104bf1f610.js'},{'revision':null,'url':'/7758.bundle.c8d106364298e7d288f0.js'},{'revision':null,'url':'/7955.bundle.ac8c559a3c3a040a9797.js'},{'revision':null,'url':'/8008.bundle.b3fae0a4e2c2d816975e.js'},{'revision':null,'url':'/8094.bundle.5c44190a325ac23e3e5c.js'},{'revision':null,'url':'/810.bundle.74b50077d3ccca3ce52b.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/810.css'},{'revision':null,'url':'/8228.bundle.58198b11ccbdc65b468f.js'},{'revision':'bb0e0995c77e6df671bd2988a2aaa018','url':'/8228.css'},{'revision':null,'url':'/8259.bundle.65edfbb943853edf7ace.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/8402.css'},{'revision':null,'url':'/8549.bundle.b126b50ff944e7bbeae0.js'},{'revision':null,'url':'/8558.bundle.cb9401193638d3f07538.js'},{'revision':null,'url':'/870.bundle.57a9f64c8a29c6f5de21.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/870.css'},{'revision':null,'url':'/8888.bundle.7f49f53d289b49a00977.js'},{'revision':null,'url':'/9026.bundle.9e6c0ebd714977ba67e5.js'},{'revision':'a04a2f233dc569826f5f6e21b65bc87b','url':'/9026.css'},{'revision':null,'url':'/9551.bundle.c7e34b5f7e53e4c92e6c.js'},{'revision':null,'url':'/9862.bundle.a4ccc41bcff91a46d37e.js'},{'revision':null,'url':'/9890.bundle.10620379d01f950951bc.js'},{'revision':'a830ec2b444e65dae7d802e69df419f0','url':'/9890.css'},{'revision':'d41d8cd98f00b204e9800998ecf8427e','url':'/_headers'},{'revision':'e3bf0f3e9c34f51ad59836ae8e8eaf43','url':'/_redirects'},{'revision':null,'url':'/a957c5cd315f89b6feb1.wasm'},{'revision':'5f16cab45ca38d2d35ff37603677c0a6','url':'/app-config.js'},{'revision':'4f57df0a5c6de673e13432207fb1e14f','url':'/app.bundle.css'},{'revision':null,'url':'/app.bundle.d9f82bca23e61db2b7e3.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':'2547879ee2928a5fd56dca483bcbd967','url':'/assets/images/CT-AAA.png'},{'revision':'245628fb9d18d6c5cd529615079f8e86','url':'/assets/images/CT-AAA2.png'},{'revision':'997a9c8b57e7b4e46d8f01fb49d078c6','url':'/assets/images/CT-Air.png'},{'revision':'e7ed89711f63348d49898da3a2b73ab9','url':'/assets/images/CT-Bone.png'},{'revision':'09d1dc6efebb10a60cdf85ed74a10214','url':'/assets/images/CT-Bones.png'},{'revision':'f8ae9bafd3b90ba3efbdcbe8901db187','url':'/assets/images/CT-Cardiac.png'},{'revision':'ed0cc538aba90d6a1c029923ca9b47db','url':'/assets/images/CT-Cardiac2.png'},{'revision':'dfdaf4e4889aefbf09514545f45726bb','url':'/assets/images/CT-Cardiac3.png'},{'revision':'5d4b9a331136a1a5d7ce7ccf7dfcca36','url':'/assets/images/CT-Chest-Contrast-Enhanced.png'},{'revision':'5fb264499a5bb42487663b00e42d1513','url':'/assets/images/CT-Chest-Vessels.png'},{'revision':'ab8f0e569c972388ddaaa61b92449fac','url':'/assets/images/CT-Coronary-Arteries-2.png'},{'revision':'e4e7e2e3cc09bc8c4fb03b6441bd2845','url':'/assets/images/CT-Coronary-Arteries-3.png'},{'revision':'79a2962a2d3cbe4bd3b675b5ca83c659','url':'/assets/images/CT-Coronary-Arteries.png'},{'revision':'6502a6bdab1c70e2188c3bf12ce5d4e4','url':'/assets/images/CT-Cropped-Volume-Bone.png'},{'revision':'e28ad3cf5ed2006fc5a7cffd602736fc','url':'/assets/images/CT-Fat.png'},{'revision':'ca1c5be76053edee27e68ffbf9105101','url':'/assets/images/CT-Liver-Vasculature.png'},{'revision':'d6c9ab857ed2ad19f1ff20bea02b6655','url':'/assets/images/CT-Lung.png'},{'revision':'ddb599c6a163bdf28ece8de1a337470a','url':'/assets/images/CT-MIP.png'},{'revision':'0b0dcf7940a555e2a9a0900f7f84d4d3','url':'/assets/images/CT-Muscle.png'},{'revision':'6082d383f9ce375a5873e2a00fc4d372','url':'/assets/images/CT-Pulmonary-Arteries.png'},{'revision':'b317366149ee2607bec95d63eb4d7661','url':'/assets/images/CT-Soft-Tissue.png'},{'revision':'4b0cd5a673ebb71da22a91ed608d6695','url':'/assets/images/DTI-FA-Brain.png'},{'revision':'3ea1cbee022af5b94710b73726308832','url':'/assets/images/MR-Angio.png'},{'revision':'bd25ca7b166193547f34950eed440e5c','url':'/assets/images/MR-Default.png'},{'revision':'2e50a49b859aeb316a1c23f911fce9ad','url':'/assets/images/MR-MIP.png'},{'revision':'6ba74de6961e08652ff9e2f1871b473d','url':'/assets/images/MR-T2-Brain.png'},{'revision':'42406bb474f0f87cf04a5afbbcd5e389','url':'/assets/images/VolumeRendering.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':null,'url':'/c22b37c3488e1d6c3aa4.wasm'},{'revision':'c377e1f5fe4a207d270c3f7a8dd3e3ca','url':'/dicom-microscopy-viewer/5004fdc02f329ce53b69.wasm'},{'revision':'ce10eced3ce34e663d86569b27f5bffb','url':'/dicom-microscopy-viewer/65916ef3def695744bda.wasm'},{'revision':'52b9a07fe0541fe8c313d9788550bf51','url':'/dicom-microscopy-viewer/b6b803111e2d06a825bd.wasm'},{'revision':'7edb59d2be7c993050cb31ded36afa31','url':'/dicom-microscopy-viewer/c22b37c3488e1d6c3aa4.wasm'},{'revision':'eaa70476e800651625c9e5de4501edef','url':'/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js'},{'revision':'18464c31a0a171555ad626dc059cce2d','url':'/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.LICENSE.txt'},{'revision':'254380a19b838537d422eaf69c116b45','url':'/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.map'},{'revision':'91e3d8268b5314586d6f30676b2fab6c','url':'/dicom-microscopy-viewer/index.worker.min.worker.js'},{'revision':'8f4b222d2efaaf0f1c6372a33b2ee132','url':'/dicom-microscopy-viewer/index.worker.min.worker.js.map'},{'revision':'4acdd19a35d759ec2669f1ba9490937d','url':'/es6-shim.min.js'},{'revision':'966afc6cb727ef212a75802f2020834e','url':'/google.js'},{'revision':null,'url':'/histogram-worker.bundle.6b0dbbdb168d711efad4.js'},{'revision':'73f70c7762624f9960ae2cf793f521e7','url':'/index.html'},{'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':null,'url':'/polySeg.bundle.3f5527cde0d61e88a0fd.js'},{'revision':'a1aef5311245f5864315443d12246c37','url':'/polyfill.min.js'},{'revision':'981ac7f7543b8330e3826aff72c33382','url':'/serve.json'},{'revision':'b1e488d9955b62bd2858874df11d5223','url':'/silent-refresh.html'},{'revision':null,'url':'/suv-peak-worker.bundle.37f95e5799f2410313bc.js'}]);
54
54
 
55
55
  // TODO: Cache API
56
56
  // 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.10.0-beta.92",
3
+ "version": "3.10.0-beta.94",
4
4
  "productVersion": "3.4.0",
5
5
  "description": "OHIF Viewer",
6
6
  "author": "OHIF Contributors",
@@ -56,23 +56,23 @@
56
56
  "@cornerstonejs/codec-openjph": "^2.4.5",
57
57
  "@cornerstonejs/dicom-image-loader": "^2.19.3",
58
58
  "@emotion/serialize": "^1.1.3",
59
- "@ohif/core": "3.10.0-beta.92",
60
- "@ohif/extension-cornerstone": "3.10.0-beta.92",
61
- "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.92",
62
- "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.92",
63
- "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.92",
64
- "@ohif/extension-default": "3.10.0-beta.92",
65
- "@ohif/extension-dicom-microscopy": "3.10.0-beta.92",
66
- "@ohif/extension-dicom-pdf": "3.10.0-beta.92",
67
- "@ohif/extension-dicom-video": "3.10.0-beta.92",
68
- "@ohif/extension-test": "3.10.0-beta.92",
69
- "@ohif/i18n": "3.10.0-beta.92",
70
- "@ohif/mode-basic-dev-mode": "3.10.0-beta.92",
71
- "@ohif/mode-longitudinal": "3.10.0-beta.92",
72
- "@ohif/mode-microscopy": "3.10.0-beta.92",
73
- "@ohif/mode-test": "3.10.0-beta.92",
74
- "@ohif/ui": "3.10.0-beta.92",
75
- "@ohif/ui-next": "3.10.0-beta.92",
59
+ "@ohif/core": "3.10.0-beta.94",
60
+ "@ohif/extension-cornerstone": "3.10.0-beta.94",
61
+ "@ohif/extension-cornerstone-dicom-rt": "3.10.0-beta.94",
62
+ "@ohif/extension-cornerstone-dicom-seg": "3.10.0-beta.94",
63
+ "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.94",
64
+ "@ohif/extension-default": "3.10.0-beta.94",
65
+ "@ohif/extension-dicom-microscopy": "3.10.0-beta.94",
66
+ "@ohif/extension-dicom-pdf": "3.10.0-beta.94",
67
+ "@ohif/extension-dicom-video": "3.10.0-beta.94",
68
+ "@ohif/extension-test": "3.10.0-beta.94",
69
+ "@ohif/i18n": "3.10.0-beta.94",
70
+ "@ohif/mode-basic-dev-mode": "3.10.0-beta.94",
71
+ "@ohif/mode-longitudinal": "3.10.0-beta.94",
72
+ "@ohif/mode-microscopy": "3.10.0-beta.94",
73
+ "@ohif/mode-test": "3.10.0-beta.94",
74
+ "@ohif/ui": "3.10.0-beta.94",
75
+ "@ohif/ui-next": "3.10.0-beta.94",
76
76
  "@svgr/webpack": "^8.1.0",
77
77
  "@types/react": "^18.3.3",
78
78
  "classnames": "^2.3.2",