@ohif/app 3.12.0-beta.90 → 3.12.0-beta.92

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 (45) hide show
  1. package/dist/{1037.bundle.87a5adb8c92bd5bf53f5.js → 1037.bundle.dd9098a9a640f0d0ef0f.js} +129 -96
  2. package/dist/{1608.bundle.3d904bc76f5d5f78ff21.js → 1608.bundle.f855c4bdb7f00eb66fca.js} +1 -1
  3. package/dist/{1903.bundle.f0505c6e927d0bef5589.js → 1903.bundle.9a291597f23ebaa3371c.js} +49 -47
  4. package/dist/{1604.bundle.4f01a6b0b8d5b1cbc294.js → 1933.bundle.a5d41c04da5425d06694.js} +13 -26
  5. package/dist/{2018.bundle.59c7c4cb3f79f63bab68.js → 2018.bundle.4527f2b0c1c8ff75f568.js} +18 -43
  6. package/dist/{306.bundle.f9faa2b3cdd7e86b5869.js → 306.bundle.a0af0889477845729c6a.js} +23 -1
  7. package/dist/{3461.bundle.458597198f24359ec78f.js → 3461.bundle.3cac685ef19f883a0f9d.js} +27 -8
  8. package/dist/{4019.bundle.1be1cdd0805ad2c59d65.js → 4019.bundle.03029c488a02493cb7f3.js} +17 -1
  9. package/dist/{2518.bundle.644302643ac0790e7374.js → 4033.bundle.1609f8751de2a6aff280.js} +457 -303
  10. package/dist/{4819.bundle.f187a4c0517c85e37ab0.js → 4819.bundle.14344bf9acf5c5f6d123.js} +3 -3
  11. package/dist/{5028.bundle.6003ab9178779929462f.js → 5028.bundle.c61b7cd88172e2d589d5.js} +2 -2
  12. package/dist/{5400.bundle.c3a3fe8867efa2edfa94.js → 5400.bundle.428fdd2dc347a7fda9e6.js} +96 -92
  13. package/dist/5457.bundle.af893cd38fdaeafd5c2a.js +89 -0
  14. package/dist/{5485.bundle.2ee096f57ff7e51d4c23.js → 5485.bundle.929d9add8bdf90a4f3c7.js} +8 -0
  15. package/dist/{5802.bundle.8922caf16c088b10cdb0.js → 5802.bundle.756d2ed511c06ee8b461.js} +2 -2
  16. package/dist/{6991.bundle.46bc04720d99fbb06785.js → 6991.bundle.7d091de815571097b96e.js} +8 -10
  17. package/dist/{7412.bundle.34fe5e72833e857edc0a.js → 7412.bundle.dfe01ae3e53107abe53d.js} +80 -57
  18. package/dist/{8305.bundle.8ea926425cdffaf84fe3.js → 8305.bundle.08ba73235df90e099838.js} +75 -55
  19. package/dist/{8558.bundle.c9ffb4f942dbbbff1849.js → 8558.bundle.705446f4883e84021bf4.js} +29 -11
  20. package/dist/{8583.bundle.7715397a42e8f00a9e3e.js → 8583.bundle.0288cadf5cf8401446b1.js} +12 -13
  21. package/dist/{874.bundle.92ddc54408fef9debee7.js → 874.bundle.7e543ec9343c9a718e3d.js} +35 -42
  22. package/dist/{3613.bundle.6157004e0592003c0800.js → 8802.bundle.4958d8ba1d0d521a002a.js} +131 -76
  23. package/dist/{9548.bundle.7be4f24aeadd0ad4f16c.js → 9195.bundle.70afccd0f802b78c279a.js} +75 -104
  24. package/dist/{9845.bundle.7e4db5e31b28d73fdac2.js → 9845.bundle.0d22f2210c1d5ac18882.js} +1 -1
  25. package/dist/{app.bundle.bdd8a45996ed4ca28560.js → app.bundle.2b7e40349f89ffdfd96c.js} +1055 -219
  26. package/dist/{compute.bundle.f3ca9fb0e7ce9e885b9c.js → compute.bundle.4c0ef8b919cbe5eef44d.js} +3 -3
  27. package/dist/index.html +1 -1
  28. package/dist/{polySeg.bundle.7b8d1bb21d442a48da1d.js → polySeg.bundle.75f37f2780c5375e161e.js} +3 -3
  29. package/dist/sw.js +1 -1
  30. package/package.json +22 -22
  31. package/dist/5457.bundle.535bae0c872c1ca0c2cb.js +0 -1358
  32. /package/dist/{1459.bundle.0481573ae1bde12b24ee.js → 1459.bundle.c4acfc6df383fc187e9e.js} +0 -0
  33. /package/dist/{147.bundle.6fc65a239d1ae1c6a918.js → 147.bundle.c191ca0b67633f707aff.js} +0 -0
  34. /package/dist/{1515.bundle.73d415797a677ae5261e.js → 1515.bundle.3f81b326242dd945ecdb.js} +0 -0
  35. /package/dist/{1604.css → 1933.css} +0 -0
  36. /package/dist/{213.bundle.9b152cd4d202cae43af2.js → 213.bundle.33092c23ffe1d81ae242.js} +0 -0
  37. /package/dist/{2243.bundle.25ca9faa6d0776355adf.js → 2243.bundle.e37c80996a222167dc14.js} +0 -0
  38. /package/dist/{2424.bundle.57b7484a3b1b1e5a1722.js → 2424.bundle.45583fc64208a2821aa3.js} +0 -0
  39. /package/dist/{319.bundle.4ea0dbcfeb553c900206.js → 319.bundle.febb2a63634488c11db6.js} +0 -0
  40. /package/dist/{6027.bundle.06ab1f1cd27f93f826e5.js → 6027.bundle.b2942a0dd2c583374d7b.js} +0 -0
  41. /package/dist/{7431.bundle.55dd86000e66bee467e2.js → 7431.bundle.b80819b8eb28d2ee897d.js} +0 -0
  42. /package/dist/{7639.bundle.a89f4a8c6e8b2593d7a4.js → 7639.bundle.2ad4b6cd132d87439fa6.js} +0 -0
  43. /package/dist/{85.bundle.f3a9149485e3fcf652f0.js → 85.bundle.a772983604a0f9514e33.js} +0 -0
  44. /package/dist/{9862.bundle.0456a2d473895bf2916e.js → 9862.bundle.eca4ea8821bb040a44c1.js} +0 -0
  45. /package/dist/{9927.bundle.d7051dac659d827d62d3.js → 9927.bundle.775cb41458de4c28a9ba.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[9548],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[9195],{
3
3
 
4
4
  /***/ 52675:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -564,7 +564,7 @@ function _mapDisplaySets(displaySets, displaySetLoadingState, thumbnailImageSrcM
564
564
  seriesNumber: ds.SeriesNumber,
565
565
  modality: ds.Modality,
566
566
  seriesDate: formatDate(ds.SeriesDate),
567
- numInstances: ds.numImageFrames,
567
+ numInstances: ds.numImageFrames ?? ds.instances?.length,
568
568
  loadingProgress,
569
569
  countIcon: ds.countIcon,
570
570
  messages: ds.messages,
@@ -749,7 +749,7 @@ function Toolbar({
749
749
 
750
750
  /***/ }),
751
751
 
752
- /***/ 39548:
752
+ /***/ 39195:
753
753
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
754
754
 
755
755
  // ESM COMPAT FLAG
@@ -4662,8 +4662,35 @@ function _createGetImageSrcFromImageIdFn(extensionManager) {
4662
4662
  var PROMPT_RESPONSES = __webpack_require__(96357);
4663
4663
  ;// ../../../extensions/default/src/Panels/createReportDialogPrompt.tsx
4664
4664
 
4665
+
4666
+ /**
4667
+ * Creates and shows a report dialog prompt.
4668
+ * The input for this is:
4669
+ * - `title` shown in the dialog
4670
+ * - `modality` being stored, used to query existing series
4671
+ * - `minSeriesNumber` is the start of new series of this modality type.
4672
+ * Will get set to 4000 if not determined by the modality
4673
+ * - predecessorImageId is the image id that this series was currently loaded
4674
+ * from. That allows defaulting the dialog to show the specified series instead
4675
+ * of always creating a new series.
4676
+ *
4677
+ * The response is:
4678
+ * - `value`, the default name of the object/series being created
4679
+ * - `dataSourceName`, where to store the object to
4680
+ * - `series`, is the series to store do, as referenced by a predecessorImageId value.
4681
+ * - `priorSeriesNumber` is the previously lowest series number at least minSeriesNumber
4682
+ * of all the seris of the given modality type.
4683
+ *
4684
+ * This should be provided to the DICOM encoder, which will get the predecessor
4685
+ * sequence from the metaData provider so that the saved series will replace
4686
+ * the existing instance in the same series.
4687
+ * This will be falsy for a new series.
4688
+ */
4665
4689
  function CreateReportDialogPrompt({
4666
4690
  title = 'Create Report',
4691
+ modality = 'SR',
4692
+ minSeriesNumber = 0,
4693
+ predecessorImageId,
4667
4694
  extensionManager,
4668
4695
  servicesManager
4669
4696
  }) {
@@ -4674,22 +4701,28 @@ function CreateReportDialogPrompt({
4674
4701
  const dataSources = extensionManager.getDataSourcesForUI();
4675
4702
  const ReportDialog = customizationService.getCustomization('ohif.createReportDialog');
4676
4703
  const allowMultipleDataSources = window.config.allowMultiSelectExport;
4677
- return new Promise(function (resolve, reject) {
4704
+ minSeriesNumber ||= modality === 'SR' && 3000 || modality === 'SEG' && 3100 || modality === 'RTSTRUCT' && 3200 || 4000;
4705
+ return new Promise(function (resolve) {
4678
4706
  uiDialogService.show({
4679
4707
  id: 'report-dialog',
4680
4708
  title,
4681
4709
  content: ReportDialog,
4682
4710
  contentProps: {
4683
4711
  dataSources: allowMultipleDataSources ? dataSources : undefined,
4712
+ predecessorImageId,
4713
+ minSeriesNumber,
4714
+ modality,
4684
4715
  onSave: async ({
4685
4716
  reportName,
4686
4717
  dataSource: selectedDataSource,
4687
- series
4718
+ series,
4719
+ priorSeriesNumber
4688
4720
  }) => {
4689
4721
  resolve({
4690
4722
  value: reportName,
4691
4723
  dataSourceName: selectedDataSource,
4692
4724
  series,
4725
+ priorSeriesNumber,
4693
4726
  action: PROMPT_RESPONSES/* default */.A.CREATE_REPORT
4694
4727
  });
4695
4728
  },
@@ -5047,7 +5080,8 @@ function getDisplaySetsFromUnsupportedSeries(instances) {
5047
5080
  SOPClassUID: instance.SOPClassUID,
5048
5081
  SeriesDescription: instance.SeriesDescription || '',
5049
5082
  Modality: instance.Modality,
5050
- numImageFrames: instances.length,
5083
+ instances,
5084
+ instance: instances[instance.length - 1],
5051
5085
  unsupported: true,
5052
5086
  SOPClassHandlerId: 'unsupported',
5053
5087
  isReconstructable: false,
@@ -7539,84 +7573,11 @@ async function createReportAsync({
7539
7573
  }
7540
7574
  }
7541
7575
  /* harmony default export */ const Actions_createReportAsync = (createReportAsync);
7542
- ;// ../../../extensions/default/src/utils/getSRSeriesAndInstanceNumber.js
7543
- const MIN_SR_SERIES_NUMBER = 4700;
7544
- function getNextSeriesNumber({
7545
- displaySetService,
7546
- modality,
7547
- minSeriesNumber
7548
- }) {
7549
- const activeDisplaySets = displaySetService.getActiveDisplaySets();
7550
- const modalityDisplaySets = activeDisplaySets.filter(ds => ds.Modality === modality);
7551
- const modalitySeriesNumbers = modalityDisplaySets.map(ds => ds.SeriesNumber);
7552
- const maxSeriesNumber = Math.max(...modalitySeriesNumbers, minSeriesNumber);
7553
- const allSeriesNumbers = activeDisplaySets.map(ds => ds.SeriesNumber);
7554
- let finalSeriesNumber = maxSeriesNumber + 1;
7555
- while (allSeriesNumbers.includes(finalSeriesNumber)) {
7556
- finalSeriesNumber++;
7557
- }
7558
- return {
7559
- SeriesNumber: finalSeriesNumber,
7560
- InstanceNumber: 1
7561
- };
7562
- }
7563
- function getSRSeriesAndInstanceNumber({
7564
- displaySetService,
7565
- SeriesInstanceUid
7566
- }) {
7567
- if (!SeriesInstanceUid) {
7568
- return getNextSeriesNumber({
7569
- displaySetService,
7570
- modality: 'SR',
7571
- minSeriesNumber: MIN_SR_SERIES_NUMBER
7572
- });
7573
- }
7574
- const displaySetsMap = displaySetService.getDisplaySetCache();
7575
- const displaySets = Array.from(displaySetsMap.values());
7576
- const srDisplaySet = displaySets.find(ds => ds.Modality === 'SR' && ds.SeriesInstanceUID === SeriesInstanceUid);
7577
- const InstanceNumber = srDisplaySet.instances?.length + 1;
7578
- if (!srDisplaySet?.SeriesNumber || !InstanceNumber) {
7579
- return getNextSeriesNumber({
7580
- displaySetService,
7581
- modality: 'SR',
7582
- minSeriesNumber: MIN_SR_SERIES_NUMBER
7583
- });
7584
- }
7585
- return {
7586
- SeriesNumber: srDisplaySet.SeriesNumber,
7587
- InstanceNumber,
7588
- referenceDisplaySet: srDisplaySet
7589
- };
7590
- }
7591
- ;// ../../../extensions/default/src/utils/getCurrentDicomDateTime.ts
7592
- const getSeriesDateTime = (jsDate = new Date()) => {
7593
- const dicomDateTime = getDicomDateTime(jsDate);
7594
- return {
7595
- SeriesDate: dicomDateTime.date,
7596
- SeriesTime: dicomDateTime.time
7597
- };
7598
- };
7599
- const getDicomDateTime = (jsDate = new Date()) => {
7600
- const month = String(jsDate.getUTCMonth() + 1).padStart(2, '0');
7601
- const day = String(jsDate.getUTCDate()).padStart(2, '0');
7602
- const year = String(jsDate.getUTCFullYear()).padStart(4, '0');
7603
- const date = `${year}${month}${day}`;
7604
- const hours = String(jsDate.getUTCHours()).padStart(2, '0');
7605
- const minutes = String(jsDate.getUTCMinutes()).padStart(2, '0');
7606
- const seconds = String(jsDate.getUTCSeconds()).padStart(2, '0');
7607
- const time = `${hours}${minutes}${seconds}`;
7608
- return {
7609
- date,
7610
- time
7611
- };
7612
- };
7613
7576
  ;// ../../../extensions/default/src/utils/promptSaveReport.tsx
7614
7577
 
7615
7578
 
7616
7579
 
7617
7580
 
7618
-
7619
-
7620
7581
  const {
7621
7582
  filterAnd,
7622
7583
  filterMeasurementsByStudyUID,
@@ -7644,29 +7605,25 @@ async function promptSaveReport({
7644
7605
  defaultSaveTitle = 'Create Report'
7645
7606
  } = ctx;
7646
7607
  let displaySetInstanceUIDs;
7608
+ const measurementData = measurementService.getMeasurements(measurementFilter);
7609
+ const predecessorImageId = findPredecessorImageId(measurementData);
7647
7610
  try {
7648
7611
  const promptResult = await CreateReportDialogPrompt({
7649
7612
  title: defaultSaveTitle,
7613
+ predecessorImageId,
7614
+ minSeriesNumber: 3000,
7650
7615
  extensionManager,
7651
7616
  servicesManager
7652
7617
  });
7653
7618
  if (promptResult.action === PROMPT_RESPONSES/* default */.A.CREATE_REPORT) {
7654
7619
  const dataSources = extensionManager.getDataSources(promptResult.dataSourceName);
7655
7620
  const dataSource = dataSources[0];
7656
- const measurementData = measurementService.getMeasurements(measurementFilter);
7657
- const SeriesDescription = promptResult.value || defaultSaveTitle;
7658
7621
  const {
7659
- SeriesNumber,
7660
- InstanceNumber,
7661
- referenceDisplaySet
7662
- } = getSRSeriesAndInstanceNumber({
7663
- displaySetService,
7664
- SeriesInstanceUid: promptResult.series
7665
- });
7666
- const {
7667
- SeriesDate,
7668
- SeriesTime
7669
- } = referenceDisplaySet ?? getSeriesDateTime();
7622
+ series,
7623
+ priorSeriesNumber,
7624
+ value: reportName
7625
+ } = promptResult;
7626
+ const SeriesDescription = reportName || defaultSaveTitle;
7670
7627
  const getReport = async () => {
7671
7628
  return commandsManager.runCommand('storeMeasurements', {
7672
7629
  measurementData,
@@ -7674,11 +7631,8 @@ async function promptSaveReport({
7674
7631
  additionalFindingTypes: ['ArrowAnnotate'],
7675
7632
  options: {
7676
7633
  SeriesDescription,
7677
- SeriesNumber,
7678
- InstanceNumber,
7679
- SeriesInstanceUID: promptResult.series,
7680
- SeriesDate,
7681
- SeriesTime
7634
+ SeriesNumber: 1 + priorSeriesNumber,
7635
+ predecessorImageId: series
7682
7636
  }
7683
7637
  }, 'CORNERSTONE_STRUCTURED_REPORT');
7684
7638
  };
@@ -7703,6 +7657,17 @@ async function promptSaveReport({
7703
7657
  return null;
7704
7658
  }
7705
7659
  }
7660
+ function findPredecessorImageId(annotations) {
7661
+ let predecessorImageId;
7662
+ for (const annotation of annotations) {
7663
+ if (predecessorImageId && annotation.predecessorImageId && annotation.predecessorImageId !== predecessorImageId) {
7664
+ console.warn('Found multiple source predecessors, not defaulting to same series');
7665
+ return;
7666
+ }
7667
+ predecessorImageId ||= annotation.predecessorImageId;
7668
+ }
7669
+ return predecessorImageId;
7670
+ }
7706
7671
  /* harmony default export */ const utils_promptSaveReport = (promptSaveReport);
7707
7672
  ;// ../../../extensions/default/src/commandsModule.ts
7708
7673
 
@@ -10435,8 +10400,8 @@ function AboutModalDefault() {
10435
10400
  name
10436
10401
  } = (0,browser_detect_es5/* default */.A)();
10437
10402
  const browser = `${name[0].toUpperCase()}${name.substr(1)} ${version}`;
10438
- const versionNumber = "3.12.0-beta.90";
10439
- const commitHash = "62d6bf437b167ac3e60a0f134869c9f96d199d0f";
10403
+ const versionNumber = "3.12.0-beta.92";
10404
+ const commitHash = "29cfb2c29999c08b52bf1ed46531e21ae85ea667";
10440
10405
  const [main, beta] = versionNumber.split('-');
10441
10406
  return /*#__PURE__*/react.createElement(ui_next_src/* AboutModal */.VTU, {
10442
10407
  className: "w-[400px]"
@@ -10561,6 +10526,9 @@ function UserPreferencesModalDefault({
10561
10526
 
10562
10527
  function ReportDialog({
10563
10528
  dataSources,
10529
+ modality = 'SR',
10530
+ predecessorImageId,
10531
+ minSeriesNumber = 3000,
10564
10532
  hide,
10565
10533
  onSave,
10566
10534
  onCancel
@@ -10569,25 +10537,27 @@ function ReportDialog({
10569
10537
  servicesManager
10570
10538
  } = (0,src/* useSystem */.Jg)();
10571
10539
  const [selectedDataSource, setSelectedDataSource] = (0,react.useState)(dataSources?.[0]?.value ?? null);
10572
- const [selectedSeries, setSelectedSeries] = (0,react.useState)(null);
10573
- const [reportName, setReportName] = (0,react.useState)('');
10574
10540
  const {
10575
10541
  displaySetService
10576
10542
  } = servicesManager.services;
10543
+ const [selectedSeries, setSelectedSeries] = (0,react.useState)(predecessorImageId || null);
10544
+ const [reportName, setReportName] = (0,react.useState)('');
10577
10545
  const seriesOptions = (0,react.useMemo)(() => {
10578
10546
  const displaySetsMap = displaySetService.getDisplaySetCache();
10579
10547
  const displaySets = Array.from(displaySetsMap.values());
10580
- const options = displaySets.filter(ds => ds.Modality === 'SR').map(ds => ({
10581
- value: ds.SeriesInstanceUID,
10548
+ const options = displaySets.filter(ds => ds.Modality === modality).map(ds => ({
10549
+ value: ds.predecessorImageId || ds.SeriesInstanceUID,
10550
+ seriesNumber: isFinite(ds.SeriesNumber) ? ds.SeriesNumber : minSeriesNumber,
10582
10551
  description: ds.SeriesDescription,
10583
10552
  label: `${ds.SeriesDescription} ${ds.SeriesDate}/${ds.SeriesTime} ${ds.SeriesNumber}`
10584
10553
  }));
10585
10554
  return [{
10586
10555
  value: null,
10587
10556
  description: null,
10557
+ seriesNumber: minSeriesNumber,
10588
10558
  label: 'Create new series'
10589
10559
  }, ...options];
10590
- }, [displaySetService]);
10560
+ }, [displaySetService, modality]);
10591
10561
  (0,react.useEffect)(() => {
10592
10562
  const seriesOption = seriesOptions.find(s => s.value === selectedSeries);
10593
10563
  const newReportName = selectedSeries && seriesOption?.description ? seriesOption.description : '';
@@ -10597,6 +10567,7 @@ function ReportDialog({
10597
10567
  onSave({
10598
10568
  reportName,
10599
10569
  dataSource: selectedDataSource,
10570
+ priorSeriesNumber: Math.max(...seriesOptions.map(it => it.seriesNumber)),
10600
10571
  series: selectedSeries
10601
10572
  });
10602
10573
  hide();
@@ -179,7 +179,7 @@ function OHIFCornerstoneSEGViewport(props) {
179
179
  const {
180
180
  unsubscribe
181
181
  } = segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_LOADING_COMPLETE, evt => {
182
- if (evt.segDisplaySet.displaySetInstanceUID === segDisplaySet.displaySetInstanceUID) {
182
+ if (evt.segDisplaySet?.displaySetInstanceUID === segDisplaySet?.displaySetInstanceUID) {
183
183
  setSegIsLoading(false);
184
184
  }
185
185
  if (segDisplaySet?.firstSegmentedSliceImageId && viewportOptions?.presentationIds) {