@ohif/app 3.9.0-beta.2 → 3.9.0-beta.21

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 (46) hide show
  1. package/dist/{117.bundle.a80b1511ef4b302fb7cc.js → 117.bundle.772ce244eee25d9b7316.js} +50 -15
  2. package/dist/{121.bundle.a6063e0272df61cefccc.js → 121.bundle.b582314ec0024fdf2d15.js} +1 -0
  3. package/dist/{164.bundle.1da1cadb56951caef1d6.js → 164.bundle.3221590f5e6855086889.js} +318 -41
  4. package/dist/{236.bundle.4ca7987e1d57f60ec13a.js → 236.bundle.d3a631d79ee8952e3c60.js} +388 -55
  5. package/dist/{188.bundle.b31173cb165eb21c3ec6.js → 243.bundle.866dc990219240efa81f.js} +8 -8
  6. package/dist/{325.bundle.47f5b8a085837ee6b512.js → 325.bundle.d8bf863ddebb832dcaab.js} +10 -11
  7. package/dist/{342.bundle.340982440de15f540a89.js → 342.bundle.67c49f2e52829a5696a4.js} +7 -0
  8. package/dist/{473.bundle.6cd4be953853f35b29c3.js → 367.bundle.6a0746aeca702ae6eba6.js} +279 -29
  9. package/dist/{806.bundle.50e039eb624382ee1fce.js → 370.bundle.baa389d217c390b0e92b.js} +81 -10
  10. package/dist/{206.bundle.e98e6ba9bfd9f36dc508.js → 390.bundle.504391bda56219cc9ef9.js} +37 -26
  11. package/dist/{448.bundle.94a6da9fac68fc69f8c2.js → 448.bundle.67539d1552db51aaca85.js} +2 -2
  12. package/dist/{483.bundle.a353efc5a5dd563c903c.js → 483.bundle.016de3c3ec209d9fa42a.js} +16 -3
  13. package/dist/{487.bundle.71a2893d94d214741e13.js → 487.bundle.3f0e64e16189f92fcebc.js} +2 -2
  14. package/dist/{35.bundle.0168d78bfad0cb784112.js → 501.bundle.7d5003758fa3ffbb344b.js} +750 -247
  15. package/dist/{530.bundle.207b38c15c4c01e4db0e.js → 530.bundle.17b9a34fefff133e5379.js} +3 -3
  16. package/dist/{544.bundle.b005b8c8b9b08aaa3324.js → 544.bundle.4d1fb477b572f50f4220.js} +3 -3
  17. package/dist/{321.bundle.07e853e559665d6e15b6.js → 550.bundle.41e6a1eacc49db2358c5.js} +50 -19
  18. package/dist/{574.bundle.88b619217339b5e93d3e.js → 574.bundle.0bcd9d70f4b1eea48082.js} +35 -32
  19. package/dist/{41.bundle.faaf3b05d1083e3c8831.js → 682.bundle.066197792e6a0d01b669.js} +26 -6
  20. package/dist/{699.bundle.8210579412d62beafa91.js → 699.bundle.428f20dd60662f1e5edd.js} +32 -3
  21. package/dist/{669.bundle.84745782e36f25eb05bc.js → 721.bundle.d21827d733e8811e0b18.js} +73 -73
  22. package/dist/{722.bundle.2547630541b670f10d6e.js → 722.bundle.1242e0348afc63ca4f5e.js} +10 -4
  23. package/dist/{724.bundle.519141a0c4d0d1a3192a.js → 776.bundle.981d8227b59f97f11dd8.js} +17 -12
  24. package/dist/{862.bundle.4a0bd82b803ba158018f.js → 862.bundle.7a102f04ef4d12686894.js} +1 -1
  25. package/dist/{889.bundle.9fbab4f0bbf643306879.js → 889.bundle.ed8937ba0c5455ed894d.js} +8 -8
  26. package/dist/{905.bundle.7e940707e10096970ca1.js → 905.bundle.b101088a20887c27945d.js} +2 -2
  27. package/dist/{907.bundle.f5aa0414d0f77e575a1f.js → 907.bundle.e8d22a858051cd255c9c.js} +2 -2
  28. package/dist/{94.bundle.ecaaba845625d93bad6b.js → 94.bundle.b4f45b237188a8550a35.js} +38 -8
  29. package/dist/{961.bundle.ff7da8afd7d8495d0bbe.js → 961.bundle.b86b71c712fa83e526d3.js} +2 -2
  30. package/dist/{7.bundle.3a17fe8266b2149334a6.js → 981.bundle.7b03f5a200c7dbcbaf1d.js} +10 -9
  31. package/dist/{594.bundle.01b124740b2b3f8a6d20.js → 989.bundle.e81da55a6954a12e5ea1.js} +5 -5
  32. package/dist/{633.bundle.ff1a1d0bdb0d1ef143af.js → 998.bundle.37015da90e590043cda0.js} +7 -7
  33. package/dist/app-config.js +5 -1
  34. package/dist/{app.bundle.c53b289734d5f7178a39.js → app.bundle.a6bfec031243c17f92e9.js} +686 -555
  35. package/dist/app.bundle.css +1 -1
  36. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  37. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  38. package/dist/google.js +1 -0
  39. package/dist/index.html +1 -1
  40. package/dist/{polySeg.bundle.1799686b019040500219.js → polySeg.bundle.b0392069f29e128b4efa.js} +3 -3
  41. package/dist/{suv-peak-worker.bundle.25f8b85eab9ec06da48d.js → suv-peak-worker.bundle.f823d84fae4ce6865f9a.js} +3 -3
  42. package/dist/sw.js +1 -1
  43. package/package.json +20 -19
  44. /package/dist/{321.css → 550.css} +0 -0
  45. /package/dist/{783.bundle.86c38ee55f4d01b111ca.js → 783.bundle.c5b7e2433ecb9d8e2541.js} +0 -0
  46. /package/dist/{633.css → 998.css} +0 -0
@@ -1,4 +1,4 @@
1
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[806],{
1
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[370],{
2
2
 
3
3
  /***/ 93858:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
@@ -1840,6 +1840,40 @@ function wheelListener(evt) {
1840
1840
  /* harmony default export */ const wheel_wheelListener = (wheelListener);
1841
1841
 
1842
1842
 
1843
+ /***/ }),
1844
+
1845
+ /***/ 99595:
1846
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1847
+
1848
+ "use strict";
1849
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1850
+ /* harmony export */ Q: () => (/* binding */ checkAndDefineTextBoxProperty),
1851
+ /* harmony export */ d: () => (/* binding */ checkAndDefineCachedStatsProperty)
1852
+ /* harmony export */ });
1853
+ const checkAndDefineTextBoxProperty = (annotation) => {
1854
+ if (!annotation.data) {
1855
+ annotation.data = {};
1856
+ }
1857
+ if (!annotation.data.handles) {
1858
+ annotation.data.handles = {};
1859
+ }
1860
+ if (!annotation.data.handles.textBox) {
1861
+ annotation.data.handles.textBox = {};
1862
+ }
1863
+ return annotation;
1864
+ };
1865
+ const checkAndDefineCachedStatsProperty = (annotation) => {
1866
+ if (!annotation.data) {
1867
+ annotation.data = {};
1868
+ }
1869
+ if (!annotation.data.cachedStats) {
1870
+ annotation.data.cachedStats = {};
1871
+ }
1872
+ return annotation;
1873
+ };
1874
+
1875
+
1876
+
1843
1877
  /***/ }),
1844
1878
 
1845
1879
  /***/ 95778:
@@ -2522,7 +2556,7 @@ class AdvancedMagnifyViewportManager {
2522
2556
  /* harmony export */ });
2523
2557
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92136);
2524
2558
  /* harmony import */ var _distancePointToContour__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7783);
2525
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2746);
2559
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49574);
2526
2560
  /* harmony import */ var _utilities_math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(73047);
2527
2561
 
2528
2562
 
@@ -3836,7 +3870,7 @@ function registerOpenContourEndEditLoop(toolInstance) {
3836
3870
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3837
3871
  /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
3838
3872
  /* harmony export */ });
3839
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2746);
3873
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(49574);
3840
3874
  /* harmony import */ var _utilities_math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73047);
3841
3875
  /* harmony import */ var _findOpenUShapedContourVectorToPeak__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51051);
3842
3876
  /* harmony import */ var _utilities_contours__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75534);
@@ -4009,10 +4043,42 @@ function renderOpenContourBeingEdited(enabledElement, svgDrawingHelper, annotati
4009
4043
  const polylineUIDToRender = 'preview-1';
4010
4044
  (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_0__.drawPolyline)(svgDrawingHelper, annotation.annotationUID, polylineUIDToRender, fusedCanvasPoints, options);
4011
4045
  }
4046
+ function renderPointContourWithMarker(enabledElement, svgDrawingHelper, annotation) {
4047
+ if (annotation.parentAnnotationUID) {
4048
+ return;
4049
+ }
4050
+ const { viewport } = enabledElement;
4051
+ const options = this._getRenderingOptions(enabledElement, annotation);
4052
+ const canvasPolyline = annotation.data.contour.polyline.map((worldPos) => viewport.worldToCanvas(worldPos));
4053
+ const childContours = (0,_utilities_contours__WEBPACK_IMPORTED_MODULE_3__.getContourHolesDataCanvas)(annotation, viewport);
4054
+ const polylineUID = '1';
4055
+ const center = canvasPolyline[0];
4056
+ const radius = 6;
4057
+ const numberOfPoints = 100;
4058
+ const circlePoints = [];
4059
+ for (let i = 0; i < numberOfPoints; i++) {
4060
+ const angle = (i / numberOfPoints) * 2 * Math.PI;
4061
+ const x = center[0] + radius * Math.cos(angle);
4062
+ const y = center[1] + radius * Math.sin(angle);
4063
+ circlePoints.push([x, y]);
4064
+ }
4065
+ const crosshair = [
4066
+ [center[0] - radius * 2, center[1]],
4067
+ [center[0] + radius * 2, center[1]],
4068
+ [center[0], center[1] - radius * 2],
4069
+ [center[0], center[1] + radius * 2],
4070
+ ];
4071
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_0__.drawPath)(svgDrawingHelper, annotation.annotationUID, polylineUID + '-crosshair_v', [crosshair[0], crosshair[1]], options);
4072
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_0__.drawPath)(svgDrawingHelper, annotation.annotationUID, polylineUID + '-crosshair_h', [crosshair[2], crosshair[3]], options);
4073
+ const allContours = [circlePoints, ...childContours];
4074
+ (0,_drawingSvg__WEBPACK_IMPORTED_MODULE_0__.drawPath)(svgDrawingHelper, annotation.annotationUID, polylineUID, allContours, options);
4075
+ }
4012
4076
  function registerRenderMethods(toolInstance) {
4013
4077
  toolInstance.renderContour = renderContour.bind(toolInstance);
4014
4078
  toolInstance.renderClosedContour = renderClosedContour.bind(toolInstance);
4015
4079
  toolInstance.renderOpenContour = renderOpenContour.bind(toolInstance);
4080
+ toolInstance.renderPointContourWithMarker =
4081
+ renderPointContourWithMarker.bind(toolInstance);
4016
4082
  toolInstance.renderOpenUShapedContour =
4017
4083
  renderOpenUShapedContour.bind(toolInstance);
4018
4084
  toolInstance.renderContourBeingDrawn =
@@ -4738,8 +4804,8 @@ var stateManagement_segmentation = __webpack_require__(63421);
4738
4804
  var enums = __webpack_require__(84901);
4739
4805
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/stateManagement/annotation/annotationState.js
4740
4806
  var annotationState = __webpack_require__(38296);
4741
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/index.js + 17 modules
4742
- var drawingSvg = __webpack_require__(2746);
4807
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/drawingSvg/index.js + 18 modules
4808
+ var drawingSvg = __webpack_require__(49574);
4743
4809
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/base/AnnotationTool.js
4744
4810
  var AnnotationTool = __webpack_require__(52454);
4745
4811
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/contours/index.js
@@ -5149,6 +5215,8 @@ function deleteConfigCache(segmentationRepresentationUID) {
5149
5215
 
5150
5216
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/stateManagement/segmentation/index.js + 31 modules
5151
5217
  var stateManagement_segmentation = __webpack_require__(63421);
5218
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/annotationHydration.js
5219
+ var annotationHydration = __webpack_require__(25781);
5152
5220
  // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/CellArray.js
5153
5221
  var CellArray = __webpack_require__(24768);
5154
5222
  // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/Points.js
@@ -5218,6 +5286,7 @@ var contourSegmentation = __webpack_require__(7259);
5218
5286
 
5219
5287
 
5220
5288
 
5289
+
5221
5290
  function handleContourSegmentation(viewport, geometryIds, annotationUIDsMap, contourRepresentation, contourRepresentationConfig) {
5222
5291
  const addOrUpdateFn = annotationUIDsMap.size
5223
5292
  ? updateContourSets
@@ -5303,10 +5372,10 @@ function addContourSetsToElement(viewport, geometryIds, contourRepresentation, c
5303
5372
  highlighted: false,
5304
5373
  autoGenerated: false,
5305
5374
  invalidated: false,
5306
- isLocked: false,
5375
+ isLocked: true,
5307
5376
  isVisible: true,
5308
5377
  metadata: {
5309
- referencedImageId: viewport.getCurrentImageId(),
5378
+ referencedImageId: (0,annotationHydration/* getClosestImageIdForStackViewport */.x)(viewport, points[0], viewport.getCamera().viewPlaneNormal),
5310
5379
  toolName: 'PlanarFreehandContourSegmentationTool',
5311
5380
  FrameOfReferenceUID: viewport.getFrameOfReferenceUID(),
5312
5381
  viewPlaneNormal: viewport.getCamera().viewPlaneNormal,
@@ -7331,9 +7400,11 @@ function _addInterpolatedContour(interpolated3DPoints, handlePoints, sliceIndex,
7331
7400
  const points = interpolated3DPoints.points;
7332
7401
  const { viewport } = eventData;
7333
7402
  const interpolatedAnnotation = createPolylineToolData(points, handlePoints, referencedToolData);
7334
- const targetId = viewport.getReferenceId({ sliceIndex });
7335
- interpolatedAnnotation.metadata.referencedImageId = targetId;
7336
- interpolatedAnnotation.metadata.sliceIndex = sliceIndex;
7403
+ const viewRef = viewport.getViewReference({ sliceIndex });
7404
+ if (!viewRef) {
7405
+ throw new Error(`Can't find slice ${sliceIndex}`);
7406
+ }
7407
+ Object.assign(interpolatedAnnotation.metadata, viewRef);
7337
7408
  stateManagement_annotation.state.addAnnotation(interpolatedAnnotation, viewport.element);
7338
7409
  referencedToolData.onInterpolationComplete?.(interpolatedAnnotation, referencedToolData);
7339
7410
  const { parentAnnotationUID } = referencedToolData;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[206],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[390],{
3
3
 
4
- /***/ 7206:
4
+ /***/ 47390:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -32,8 +32,8 @@ __webpack_require__.d(utils_namespaceObject, {
32
32
 
33
33
  // EXTERNAL MODULE: ../../../node_modules/dicomweb-client/build/dicomweb-client.es.js
34
34
  var dicomweb_client_es = __webpack_require__(36922);
35
- // EXTERNAL MODULE: ../../core/src/index.ts + 70 modules
36
- var src = __webpack_require__(55411);
35
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
36
+ var src = __webpack_require__(8633);
37
37
  // EXTERNAL MODULE: ../../core/src/utils/sortStudy.ts
38
38
  var sortStudy = __webpack_require__(45476);
39
39
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomWebDataSource/qido.js
@@ -1345,9 +1345,9 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
1345
1345
  return xhrRequestHeaders;
1346
1346
  };
1347
1347
  generateWadoHeader = () => {
1348
- let authorizationHeader = getAuthrorizationHeader();
1348
+ const authorizationHeader = getAuthrorizationHeader();
1349
1349
  //Generate accept header depending on config params
1350
- let formattedAcceptHeader = src.utils.generateAcceptHeader(dicomWebConfig.acceptHeader, dicomWebConfig.requestTransferSyntaxUID, dicomWebConfig.omitQuotationForMultipartRequest);
1350
+ const formattedAcceptHeader = src.utils.generateAcceptHeader(dicomWebConfig.acceptHeader, dicomWebConfig.requestTransferSyntaxUID, dicomWebConfig.omitQuotationForMultipartRequest);
1351
1351
  return {
1352
1352
  ...authorizationHeader,
1353
1353
  Accept: formattedAcceptHeader
@@ -1887,6 +1887,7 @@ function createDicomJSONApi(dicomJsonConfig) {
1887
1887
  },
1888
1888
  series: {
1889
1889
  metadata: async ({
1890
+ filters,
1890
1891
  StudyInstanceUID,
1891
1892
  madeInClient = false,
1892
1893
  customSort
@@ -1901,6 +1902,12 @@ function createDicomJSONApi(dicomJsonConfig) {
1901
1902
  } else {
1902
1903
  series = study.series;
1903
1904
  }
1905
+ const seriesKeys = ['SeriesInstanceUID', 'SeriesInstanceUIDs', 'seriesInstanceUID', 'seriesInstanceUIDs'];
1906
+ const seriesFilter = seriesKeys.find(key => filters[key]);
1907
+ if (seriesFilter) {
1908
+ const seriesUIDs = filters[seriesFilter];
1909
+ series = series.filter(s => seriesUIDs.includes(s.SeriesInstanceUID));
1910
+ }
1904
1911
  const seriesSummaryMetadata = series.map(series => {
1905
1912
  const seriesSummary = {
1906
1913
  StudyInstanceUID: study.StudyInstanceUID,
@@ -2253,7 +2260,7 @@ function createDicomLocalApi(dicomLocalConfig) {
2253
2260
  return src/* IWebApiDataSource */.pt.create(implementation);
2254
2261
  }
2255
2262
 
2256
- ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomWebProxyDataSource/index.js
2263
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomWebProxyDataSource/index.ts
2257
2264
 
2258
2265
 
2259
2266
 
@@ -2280,7 +2287,7 @@ function createDicomWebProxyApi(dicomWebProxyConfig, servicesManager) {
2280
2287
  throw new Error(`No url for '${name}'`);
2281
2288
  } else {
2282
2289
  const response = await fetch(url);
2283
- let data = await response.json();
2290
+ const data = await response.json();
2284
2291
  if (!data.servers?.dicomWeb?.[0]) {
2285
2292
  throw new Error('Invalid configuration returned by url');
2286
2293
  }
@@ -2750,8 +2757,8 @@ function ViewerHeader({
2750
2757
  hotkeyDefinitions,
2751
2758
  hotkeyDefaults
2752
2759
  } = hotkeysManager;
2753
- const versionNumber = "3.9.0-beta.2";
2754
- const commitHash = "730f4349100f21b4489a21707dbb2dca9dbfbba2";
2760
+ const versionNumber = "3.9.0-beta.21";
2761
+ const commitHash = "8960b89911a9342d93bf1a62bec97a696f101fd4";
2755
2762
  const menuOptions = [{
2756
2763
  title: t('Header:About'),
2757
2764
  icon: 'info',
@@ -3037,7 +3044,7 @@ ViewerLayout.propTypes = {
3037
3044
  getModuleEntry: (prop_types_default()).func.isRequired
3038
3045
  }).isRequired,
3039
3046
  commandsManager: prop_types_default().instanceOf(src/* CommandsManager */.Sp),
3040
- servicesManager: prop_types_default().instanceOf(src/* ServicesManager */.CS),
3047
+ servicesManager: (prop_types_default()).object.isRequired,
3041
3048
  // From modes
3042
3049
  leftPanels: (prop_types_default()).array,
3043
3050
  rightPanels: (prop_types_default()).array,
@@ -4013,7 +4020,7 @@ function PanelMeasurementTable({
4013
4020
  })));
4014
4021
  }
4015
4022
  PanelMeasurementTable.propTypes = {
4016
- servicesManager: prop_types_default().instanceOf(src/* ServicesManager */.CS).isRequired
4023
+ servicesManager: (prop_types_default()).object.isRequired
4017
4024
  };
4018
4025
  function _getMappedMeasurements(measurementService) {
4019
4026
  const measurements = measurementService.getMeasurements();
@@ -4745,7 +4752,6 @@ function ToolbarLayoutSelector_extends() { ToolbarLayoutSelector_extends = Objec
4745
4752
 
4746
4753
 
4747
4754
 
4748
-
4749
4755
  const defaultCommonPresets = [{
4750
4756
  icon: 'layout-common-1x1',
4751
4757
  commandOptions: {
@@ -4857,6 +4863,7 @@ function LayoutSelector({
4857
4863
  ...rest
4858
4864
  }) {
4859
4865
  const [isOpen, setIsOpen] = (0,react.useState)(false);
4866
+ const dropdownRef = (0,react.useRef)(null);
4860
4867
  const {
4861
4868
  customizationService
4862
4869
  } = servicesManager.services;
@@ -4864,15 +4871,21 @@ function LayoutSelector({
4864
4871
  const advancedPresets = customizationService.get('advancedPresets') || generateAdvancedPresets({
4865
4872
  servicesManager
4866
4873
  });
4867
- const closeOnOutsideClick = () => {
4868
- if (isOpen) {
4874
+ const closeOnOutsideClick = event => {
4875
+ if (isOpen && dropdownRef.current) {
4869
4876
  setIsOpen(false);
4870
4877
  }
4871
4878
  };
4872
4879
  (0,react.useEffect)(() => {
4873
- window.addEventListener('click', closeOnOutsideClick);
4880
+ if (!isOpen) {
4881
+ return;
4882
+ }
4883
+ setTimeout(() => {
4884
+ window.addEventListener('click', closeOnOutsideClick);
4885
+ }, 0);
4874
4886
  return () => {
4875
4887
  window.removeEventListener('click', closeOnOutsideClick);
4888
+ dropdownRef.current = null;
4876
4889
  };
4877
4890
  }, [isOpen]);
4878
4891
  const onInteractionHandler = () => {
@@ -4888,7 +4901,8 @@ function LayoutSelector({
4888
4901
  rounded: rest.rounded,
4889
4902
  disableToolTip: tooltipDisabled,
4890
4903
  dropdownContent: DropdownContent !== null && /*#__PURE__*/react.createElement("div", {
4891
- className: "flex "
4904
+ className: "flex",
4905
+ ref: dropdownRef
4892
4906
  }, /*#__PURE__*/react.createElement("div", {
4893
4907
  className: "bg-secondary-dark flex flex-col gap-2.5 p-2"
4894
4908
  }, /*#__PURE__*/react.createElement("div", {
@@ -4934,7 +4948,7 @@ LayoutSelector.propTypes = {
4934
4948
  rows: (prop_types_default()).number,
4935
4949
  columns: (prop_types_default()).number,
4936
4950
  onLayoutChange: (prop_types_default()).func,
4937
- servicesManager: prop_types_default().instanceOf(src/* ServicesManager */.CS)
4951
+ servicesManager: (prop_types_default()).object.isRequired
4938
4952
  };
4939
4953
  LayoutSelector.defaultProps = {
4940
4954
  columns: 4,
@@ -7241,9 +7255,6 @@ const defaultProtocol = {
7241
7255
  editableBy: {},
7242
7256
  protocolMatchingRules: [],
7243
7257
  toolGroupIds: ['default'],
7244
- hpInitiationCriteria: {
7245
- minSeriesLoaded: 1
7246
- },
7247
7258
  // -1 would be used to indicate active only, whereas other values are
7248
7259
  // the number of required priors referenced - so 0 means active with
7249
7260
  // 0 or more priors.
@@ -8014,7 +8025,7 @@ function getPTImageIdInstanceMetadata(imageId) {
8014
8025
  if (!dicomMetaData) {
8015
8026
  throw new Error('dicom metadata are required');
8016
8027
  }
8017
- if (dicomMetaData.SeriesDate === undefined || dicomMetaData.SeriesTime === undefined || dicomMetaData.CorrectedImage === undefined || dicomMetaData.Units === undefined || !dicomMetaData.RadiopharmaceuticalInformationSequence || dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose === undefined || dicomMetaData.DecayCorrection === undefined || dicomMetaData.AcquisitionDate === undefined || dicomMetaData.AcquisitionTime === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime === undefined && dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime === undefined) {
8028
+ if (dicomMetaData.SeriesDate === undefined || dicomMetaData.SeriesTime === undefined || dicomMetaData.CorrectedImage === undefined || dicomMetaData.Units === undefined || !dicomMetaData.RadiopharmaceuticalInformationSequence || dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose === undefined || dicomMetaData.DecayCorrection === undefined || dicomMetaData.AcquisitionDate === undefined || dicomMetaData.AcquisitionTime === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime === undefined && dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime === undefined) {
8018
8029
  throw new Error('required metadata are missing');
8019
8030
  }
8020
8031
  if (dicomMetaData.PatientWeight === undefined) {
@@ -8023,10 +8034,10 @@ function getPTImageIdInstanceMetadata(imageId) {
8023
8034
  const instanceMetadata = {
8024
8035
  CorrectedImage: dicomMetaData.CorrectedImage,
8025
8036
  Units: dicomMetaData.Units,
8026
- RadionuclideHalfLife: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife,
8027
- RadionuclideTotalDose: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose,
8028
- RadiopharmaceuticalStartDateTime: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime,
8029
- RadiopharmaceuticalStartTime: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime,
8037
+ RadionuclideHalfLife: dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife,
8038
+ RadionuclideTotalDose: dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose,
8039
+ RadiopharmaceuticalStartDateTime: dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime,
8040
+ RadiopharmaceuticalStartTime: dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime,
8030
8041
  DecayCorrection: dicomMetaData.DecayCorrection,
8031
8042
  PatientWeight: dicomMetaData.PatientWeight,
8032
8043
  SeriesDate: dicomMetaData.SeriesDate,
@@ -12,8 +12,8 @@ __webpack_require__.d(__webpack_exports__, {
12
12
  "default": () => (/* binding */ basic_test_mode_src)
13
13
  });
14
14
 
15
- // EXTERNAL MODULE: ../../core/src/index.ts + 70 modules
16
- var src = __webpack_require__(55411);
15
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
16
+ var src = __webpack_require__(8633);
17
17
  // EXTERNAL MODULE: ../../ui/src/index.js + 785 modules
18
18
  var ui_src = __webpack_require__(5085);
19
19
  ;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/toolbarButtons.ts
@@ -731,7 +731,7 @@ function getToolGroupsWithToolName(toolName) {
731
731
  /* harmony import */ var _planarFreehandROITool_openContourEndEditLoop__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(72702);
732
732
  /* harmony import */ var _planarFreehandROITool_renderMethods__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(11585);
733
733
  /* harmony import */ var _stateManagement_annotation_helpers_state__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(54177);
734
- /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(2746);
734
+ /* harmony import */ var _drawingSvg__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(49574);
735
735
  /* harmony import */ var _utilities_drawing__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(10910);
736
736
  /* harmony import */ var _utilities_math_polyline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(56634);
737
737
  /* harmony import */ var _utilities_pointInShapeCallback__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(75403);
@@ -800,6 +800,7 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
800
800
  enabled: false,
801
801
  epsilon: 0.1,
802
802
  },
803
+ displayOnePointAsCrosshairs: false,
803
804
  calculateStats: true,
804
805
  getTextLines: defaultGetTextLines,
805
806
  statsCalculator: _utilities_math_basic__WEBPACK_IMPORTED_MODULE_22__.BasicStatsCalculator,
@@ -1136,7 +1137,13 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
1136
1137
  const isEditingOpen = this.isEditingOpen;
1137
1138
  const isEditingClosed = this.isEditingClosed;
1138
1139
  if (!(isDrawing || isEditingOpen || isEditingClosed)) {
1139
- this.renderContour(enabledElement, svgDrawingHelper, annotation);
1140
+ if (this.configuration.displayOnePointAsCrosshairs &&
1141
+ annotation.data.contour.polyline.length === 1) {
1142
+ this.renderPointContourWithMarker(enabledElement, svgDrawingHelper, annotation);
1143
+ }
1144
+ else {
1145
+ this.renderContour(enabledElement, svgDrawingHelper, annotation);
1146
+ }
1140
1147
  }
1141
1148
  else {
1142
1149
  const activeAnnotationUID = this.commonData.annotation.annotationUID;
@@ -1155,7 +1162,13 @@ class PlanarFreehandROITool extends _base_ContourSegmentationBaseTool__WEBPACK_I
1155
1162
  }
1156
1163
  }
1157
1164
  else {
1158
- this.renderContour(enabledElement, svgDrawingHelper, annotation);
1165
+ if (this.configuration.displayOnePointAsCrosshairs &&
1166
+ annotation.data.contour.polyline.length === 1) {
1167
+ this.renderPointContourWithMarker(enabledElement, svgDrawingHelper, annotation);
1168
+ }
1169
+ else {
1170
+ this.renderContour(enabledElement, svgDrawingHelper, annotation);
1171
+ }
1159
1172
  }
1160
1173
  renderStatus = true;
1161
1174
  }
@@ -26,8 +26,8 @@ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-
26
26
  const id = package_namespaceObject.UU;
27
27
  const SOPClassHandlerName = 'dynamic-volume';
28
28
 
29
- // EXTERNAL MODULE: ../../core/src/index.ts + 70 modules
30
- var src = __webpack_require__(55411);
29
+ // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
30
+ var src = __webpack_require__(8633);
31
31
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 28 modules
32
32
  var esm = __webpack_require__(92136);
33
33
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js