@cornerstonejs/tools 2.0.0-beta.21 → 2.0.0-beta.22

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 (249) hide show
  1. package/dist/esm/cursors/elementCursor.d.ts +1 -1
  2. package/dist/esm/cursors/elementCursor.js +1 -1
  3. package/dist/esm/drawingSvg/getSvgDrawingHelper.js +1 -1
  4. package/dist/esm/eventDispatchers/keyboardEventHandlers/keyDown.js +2 -2
  5. package/dist/esm/eventDispatchers/keyboardEventHandlers/keyUp.js +2 -2
  6. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDown.js +1 -1
  7. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownActivate.js +1 -1
  8. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDownAnnotationAction.js +1 -1
  9. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseDrag.js +1 -1
  10. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseMove.js +1 -1
  11. package/dist/esm/eventDispatchers/mouseEventHandlers/mouseWheel.js +1 -1
  12. package/dist/esm/eventDispatchers/shared/customCallbackHandler.js +3 -2
  13. package/dist/esm/eventDispatchers/shared/getActiveToolForKeyboardEvent.js +2 -2
  14. package/dist/esm/eventDispatchers/shared/getActiveToolForMouseEvent.js +2 -2
  15. package/dist/esm/eventDispatchers/shared/getActiveToolForTouchEvent.js +3 -3
  16. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForKeyboardEvents.js +2 -2
  17. package/dist/esm/eventDispatchers/shared/getToolsWithActionsForMouseEvent.js +2 -2
  18. package/dist/esm/eventDispatchers/shared/getToolsWithModesForMouseEvent.js +2 -2
  19. package/dist/esm/eventDispatchers/shared/getToolsWithModesForTouchEvent.js +2 -2
  20. package/dist/esm/eventDispatchers/touchEventHandlers/touchDrag.js +1 -1
  21. package/dist/esm/eventDispatchers/touchEventHandlers/touchStart.js +1 -1
  22. package/dist/esm/eventDispatchers/touchEventHandlers/touchStartActivate.js +1 -1
  23. package/dist/esm/eventListeners/annotations/annotationSelectionListener.js +1 -1
  24. package/dist/esm/eventListeners/annotations/contourSegmentation/contourSegmentationCompleted.js +21 -20
  25. package/dist/esm/eventListeners/segmentation/imageChangeEventListener.js +8 -6
  26. package/dist/esm/eventListeners/segmentation/segmentationDataModifiedEventListener.js +1 -1
  27. package/dist/esm/eventListeners/segmentation/segmentationModifiedEventListener.js +1 -1
  28. package/dist/esm/eventListeners/segmentation/segmentationRepresentationModifiedEventListener.js +1 -1
  29. package/dist/esm/eventListeners/segmentation/segmentationRepresentationRemovedEventListener.js +1 -1
  30. package/dist/esm/index.d.ts +2 -1
  31. package/dist/esm/index.js +2 -1
  32. package/dist/esm/init.js +2 -2
  33. package/dist/esm/stateManagement/annotation/FrameOfReferenceSpecificAnnotationManager.js +0 -2
  34. package/dist/esm/stateManagement/annotation/annotationSelection.js +1 -1
  35. package/dist/esm/stateManagement/annotation/annotationState.d.ts +2 -2
  36. package/dist/esm/stateManagement/annotation/annotationState.js +4 -6
  37. package/dist/esm/stateManagement/annotation/annotationVisibility.js +1 -1
  38. package/dist/esm/stateManagement/annotation/getAnnotation.d.ts +2 -0
  39. package/dist/esm/stateManagement/annotation/getAnnotation.js +6 -0
  40. package/dist/esm/stateManagement/index.d.ts +0 -2
  41. package/dist/esm/stateManagement/index.js +2 -1
  42. package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.d.ts +3 -1
  43. package/dist/esm/stateManagement/segmentation/SegmentationRenderingEngine.js +13 -6
  44. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.d.ts +17 -1
  45. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +46 -4
  46. package/dist/esm/stateManagement/segmentation/activeSegmentation.js +6 -4
  47. package/dist/esm/stateManagement/segmentation/addColorLUT.d.ts +2 -0
  48. package/dist/esm/stateManagement/segmentation/addColorLUT.js +5 -0
  49. package/dist/esm/stateManagement/segmentation/addRepresentationData.js +1 -1
  50. package/dist/esm/stateManagement/segmentation/addSegmentation.d.ts +2 -0
  51. package/dist/esm/stateManagement/segmentation/addSegmentation.js +11 -0
  52. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentation.js +29 -8
  53. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.d.ts +2 -0
  54. package/dist/esm/stateManagement/segmentation/addSegmentationRepresentationState.js +10 -0
  55. package/dist/esm/stateManagement/segmentation/config/segmentationColor.js +8 -6
  56. package/dist/esm/stateManagement/segmentation/config/segmentationConfig.js +14 -9
  57. package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +8 -5
  58. package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.d.ts +0 -8
  59. package/dist/esm/stateManagement/segmentation/convertVolumeToStackSegmentation.js +3 -33
  60. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationDataModified.d.ts +1 -0
  61. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationDataModified.js +11 -0
  62. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationModified.d.ts +1 -0
  63. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationModified.js +18 -0
  64. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRemoved.d.ts +1 -0
  65. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRemoved.js +8 -0
  66. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.d.ts +1 -0
  67. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationModified.js +8 -0
  68. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.d.ts +1 -0
  69. package/dist/esm/stateManagement/segmentation/events/triggerSegmentationRepresentationRemoved.js +8 -0
  70. package/dist/esm/stateManagement/segmentation/getActiveSegmentIndex.d.ts +1 -0
  71. package/dist/esm/stateManagement/segmentation/getActiveSegmentIndex.js +7 -0
  72. package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.d.ts +2 -0
  73. package/dist/esm/stateManagement/segmentation/getActiveSegmentationRepresentation.js +5 -0
  74. package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.d.ts +2 -0
  75. package/dist/esm/stateManagement/segmentation/getAllSegmentationRepresentations.js +6 -0
  76. package/dist/esm/stateManagement/segmentation/getColorLUT.d.ts +2 -0
  77. package/dist/esm/stateManagement/segmentation/getColorLUT.js +5 -0
  78. package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.d.ts +1 -0
  79. package/dist/esm/stateManagement/segmentation/getCurrentLabelmapImageIdForViewport.js +5 -0
  80. package/dist/esm/stateManagement/segmentation/getGlobalConfig.d.ts +2 -0
  81. package/dist/esm/stateManagement/segmentation/getGlobalConfig.js +5 -0
  82. package/dist/esm/stateManagement/segmentation/getNextColorLUTIndex.d.ts +1 -0
  83. package/dist/esm/stateManagement/segmentation/getNextColorLUTIndex.js +5 -0
  84. package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.d.ts +2 -0
  85. package/dist/esm/stateManagement/segmentation/getPerSegmentConfig.js +5 -0
  86. package/dist/esm/stateManagement/segmentation/getSegmentation.d.ts +2 -0
  87. package/dist/esm/stateManagement/segmentation/getSegmentation.js +5 -0
  88. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.d.ts +2 -0
  89. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentation.js +5 -0
  90. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.d.ts +2 -0
  91. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationConfig.js +5 -0
  92. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.d.ts +7 -0
  93. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationViewportStates.js +6 -0
  94. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.d.ts +1 -0
  95. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationVisibility.js +5 -0
  96. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.d.ts +2 -0
  97. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentations.js +12 -0
  98. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.d.ts +2 -0
  99. package/dist/esm/stateManagement/segmentation/getSegmentationRepresentationsForSegmentation.js +5 -0
  100. package/dist/esm/stateManagement/segmentation/getSegmentations.d.ts +2 -0
  101. package/dist/esm/stateManagement/segmentation/getSegmentations.js +6 -0
  102. package/dist/esm/stateManagement/segmentation/getViewportIdsWithSegmentation.d.ts +1 -0
  103. package/dist/esm/stateManagement/segmentation/getViewportIdsWithSegmentation.js +10 -0
  104. package/dist/esm/stateManagement/segmentation/helpers/clipAndCacheSurfacesForViewport.js +1 -1
  105. package/dist/esm/stateManagement/segmentation/helpers/updateStackSegmentationState.d.ts +8 -0
  106. package/dist/esm/stateManagement/segmentation/helpers/updateStackSegmentationState.js +31 -0
  107. package/dist/esm/stateManagement/segmentation/index.d.ts +1 -1
  108. package/dist/esm/stateManagement/segmentation/index.js +1 -1
  109. package/dist/esm/stateManagement/segmentation/polySeg/Contour/contourComputationStrategies.js +3 -2
  110. package/dist/esm/stateManagement/segmentation/polySeg/Contour/utils/createAndAddContourSegmentationsFromClippedSurfaces.js +1 -1
  111. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/convertContourToLabelmap.js +1 -1
  112. package/dist/esm/stateManagement/segmentation/polySeg/Labelmap/labelmapComputationStrategies.js +3 -3
  113. package/dist/esm/stateManagement/segmentation/polySeg/Surface/convertLabelmapToSurface.js +2 -3
  114. package/dist/esm/stateManagement/segmentation/polySeg/Surface/createAndCacheSurfacesFromRaw.js +2 -1
  115. package/dist/esm/stateManagement/segmentation/polySeg/Surface/surfaceComputationStrategies.js +2 -2
  116. package/dist/esm/stateManagement/segmentation/polySeg/Surface/updateSurfaceData.js +2 -3
  117. package/dist/esm/stateManagement/segmentation/polySeg/canComputeRequestedRepresentation.js +3 -2
  118. package/dist/esm/stateManagement/segmentation/polySeg/computeAndAddRepresentation.js +1 -1
  119. package/dist/esm/stateManagement/segmentation/removeColorLUT.d.ts +1 -0
  120. package/dist/esm/stateManagement/segmentation/removeColorLUT.js +5 -0
  121. package/dist/esm/stateManagement/segmentation/removeRepresentation.d.ts +1 -0
  122. package/dist/esm/stateManagement/segmentation/removeRepresentation.js +9 -0
  123. package/dist/esm/stateManagement/segmentation/removeSegmentation.d.ts +1 -0
  124. package/dist/esm/stateManagement/segmentation/removeSegmentation.js +7 -0
  125. package/dist/esm/stateManagement/segmentation/removeSegmentationRepresentations.js +2 -2
  126. package/dist/esm/stateManagement/segmentation/segmentIndex.d.ts +2 -2
  127. package/dist/esm/stateManagement/segmentation/segmentIndex.js +5 -9
  128. package/dist/esm/stateManagement/segmentation/segmentLocking.js +1 -1
  129. package/dist/esm/stateManagement/segmentation/segmentationState.d.ts +29 -38
  130. package/dist/esm/stateManagement/segmentation/segmentationState.js +29 -157
  131. package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.d.ts +1 -0
  132. package/dist/esm/stateManagement/segmentation/setActiveSegmentationRepresentation.js +9 -0
  133. package/dist/esm/stateManagement/segmentation/setGlobalConfig.d.ts +2 -0
  134. package/dist/esm/stateManagement/segmentation/setGlobalConfig.js +9 -0
  135. package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.d.ts +2 -0
  136. package/dist/esm/stateManagement/segmentation/setPerSegmentConfig.js +9 -0
  137. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.d.ts +2 -0
  138. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationConfig.js +9 -0
  139. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.d.ts +1 -0
  140. package/dist/esm/stateManagement/segmentation/setSegmentationRepresentationVisibility.js +5 -0
  141. package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.d.ts +5 -5
  142. package/dist/esm/stateManagement/segmentation/triggerSegmentationEvents.js +5 -45
  143. package/dist/esm/stateManagement/segmentation/updateLabelmapSegmentationImageReferences.d.ts +1 -0
  144. package/dist/esm/stateManagement/segmentation/updateLabelmapSegmentationImageReferences.js +5 -0
  145. package/dist/esm/store/SynchronizerManager/createSynchronizer.js +1 -1
  146. package/dist/esm/store/SynchronizerManager/destroy.js +1 -1
  147. package/dist/esm/store/SynchronizerManager/destroySynchronizer.js +1 -1
  148. package/dist/esm/store/SynchronizerManager/getAllSynchronizers.js +1 -1
  149. package/dist/esm/store/SynchronizerManager/getSynchronizer.js +1 -1
  150. package/dist/esm/store/SynchronizerManager/getSynchronizersForViewport.js +1 -1
  151. package/dist/esm/store/ToolGroupManager/ToolGroup.js +7 -6
  152. package/dist/esm/store/ToolGroupManager/createToolGroup.js +1 -1
  153. package/dist/esm/store/ToolGroupManager/destroy.js +3 -3
  154. package/dist/esm/store/ToolGroupManager/destroyToolGroup.js +1 -2
  155. package/dist/esm/store/ToolGroupManager/getAllToolGroups.js +1 -1
  156. package/dist/esm/store/ToolGroupManager/getToolGroup.js +1 -1
  157. package/dist/esm/store/ToolGroupManager/getToolGroupForViewport.js +1 -1
  158. package/dist/esm/store/ToolGroupManager/getToolGroupsWithToolName.js +1 -1
  159. package/dist/esm/store/addTool.d.ts +1 -0
  160. package/dist/esm/store/addTool.js +3 -0
  161. package/dist/esm/store/index.d.ts +1 -2
  162. package/dist/esm/store/index.js +1 -2
  163. package/dist/esm/tools/AdvancedMagnifyTool.d.ts +93 -2
  164. package/dist/esm/tools/AdvancedMagnifyTool.js +506 -4
  165. package/dist/esm/tools/AnnotationEraserTool.js +2 -2
  166. package/dist/esm/tools/CrosshairsTool.js +1 -1
  167. package/dist/esm/tools/MagnifyTool.js +1 -1
  168. package/dist/esm/tools/SculptorTool.js +3 -3
  169. package/dist/esm/tools/WindowLevelRegionTool.js +1 -1
  170. package/dist/esm/tools/annotation/AngleTool.js +4 -3
  171. package/dist/esm/tools/annotation/ArrowAnnotateTool.js +1 -1
  172. package/dist/esm/tools/annotation/BidirectionalTool.js +2 -3
  173. package/dist/esm/tools/annotation/CircleROITool.js +7 -8
  174. package/dist/esm/tools/annotation/CobbAngleTool.js +1 -1
  175. package/dist/esm/tools/annotation/EllipticalROITool.js +5 -6
  176. package/dist/esm/tools/annotation/HeightTool.js +2 -3
  177. package/dist/esm/tools/annotation/KeyImageTool.js +1 -1
  178. package/dist/esm/tools/annotation/LengthTool.js +2 -3
  179. package/dist/esm/tools/annotation/LivewireContourTool.js +3 -2
  180. package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts +1 -2
  181. package/dist/esm/tools/annotation/PlanarFreehandROITool.js +7 -7
  182. package/dist/esm/tools/annotation/ProbeTool.js +3 -4
  183. package/dist/esm/tools/annotation/RectangleROITool.js +5 -6
  184. package/dist/esm/tools/annotation/SplineROITool.js +7 -4
  185. package/dist/esm/tools/annotation/UltrasoundDirectionalTool.js +6 -7
  186. package/dist/esm/tools/annotation/VideoRedactionTool.js +1 -1
  187. package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +1 -1
  188. package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js +1 -1
  189. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js +2 -2
  190. package/dist/esm/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js +1 -1
  191. package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js +1 -1
  192. package/dist/esm/tools/base/ContourBaseTool.js +2 -2
  193. package/dist/esm/tools/base/ContourSegmentationBaseTool.js +24 -15
  194. package/dist/esm/tools/displayTools/Contour/contourDisplay.js +9 -8
  195. package/dist/esm/tools/displayTools/Contour/contourHandler/handleContourSegmentation.js +3 -3
  196. package/dist/esm/tools/displayTools/Labelmap/addLabelmapToElement.js +2 -1
  197. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.d.ts +1 -8
  198. package/dist/esm/tools/displayTools/Labelmap/labelmapDisplay.js +19 -25
  199. package/dist/esm/tools/displayTools/Surface/surfaceDisplay.js +10 -7
  200. package/dist/esm/tools/segmentation/BrushTool.js +10 -8
  201. package/dist/esm/tools/segmentation/CircleROIStartEndThresholdTool.js +4 -5
  202. package/dist/esm/tools/segmentation/RectangleROIStartEndThresholdTool.js +7 -9
  203. package/dist/esm/tools/segmentation/SegmentSelectTool.js +1 -1
  204. package/dist/esm/tools/segmentation/strategies/compositions/preview.js +4 -4
  205. package/dist/esm/utilities/annotationHydration.js +1 -1
  206. package/dist/esm/utilities/contourSegmentation/addContourSegmentationAnnotation.js +1 -1
  207. package/dist/esm/utilities/contourSegmentation/removeContourSegmentationAnnotation.js +2 -2
  208. package/dist/esm/utilities/contours/generateContourSetsFromLabelmap.js +1 -1
  209. package/dist/esm/utilities/contours/getContourHolesDataWorld.js +1 -1
  210. package/dist/esm/utilities/contours/index.d.ts +1 -2
  211. package/dist/esm/utilities/contours/index.js +1 -2
  212. package/dist/esm/utilities/contours/updateContourPolyline.js +1 -1
  213. package/dist/esm/utilities/getToolsWithModesForElement.js +2 -2
  214. package/dist/esm/utilities/index.d.ts +1 -2
  215. package/dist/esm/utilities/index.js +1 -2
  216. package/dist/esm/utilities/math/line/distanceToPointSquaredInfo.js +3 -3
  217. package/dist/esm/utilities/math/polyline/isClosed.js +2 -2
  218. package/dist/esm/utilities/planarFreehandROITool/smoothAnnotation.js +3 -3
  219. package/dist/esm/utilities/segmentation/brushSizeForToolGroup.js +1 -1
  220. package/dist/esm/utilities/segmentation/brushThresholdForToolGroup.js +1 -1
  221. package/dist/esm/utilities/segmentation/getBrushToolInstances.d.ts +1 -0
  222. package/dist/esm/utilities/segmentation/getBrushToolInstances.js +17 -0
  223. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.d.ts +0 -2
  224. package/dist/esm/utilities/segmentation/getUniqueSegmentIndices.js +3 -22
  225. package/dist/esm/utilities/segmentation/index.d.ts +2 -2
  226. package/dist/esm/utilities/segmentation/index.js +2 -2
  227. package/dist/esm/utilities/segmentation/invalidateBrushCursor.js +1 -4
  228. package/dist/esm/utilities/segmentation/rectangleROIThresholdVolumeByRange.js +2 -1
  229. package/dist/esm/utilities/segmentation/segmentContourAction.js +5 -5
  230. package/dist/esm/utilities/segmentation/utilities.d.ts +4 -1
  231. package/dist/esm/utilities/segmentation/utilities.js +23 -17
  232. package/dist/esm/utilities/viewportFilters/filterViewportsWithToolEnabled.js +2 -2
  233. package/dist/umd/985.index.js.map +1 -1
  234. package/dist/umd/index.js +2 -1
  235. package/dist/umd/index.js.LICENSE.txt +6 -0
  236. package/dist/umd/index.js.map +1 -1
  237. package/package.json +5 -4
  238. package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.d.ts +0 -17
  239. package/dist/esm/stateManagement/segmentation/convertStackToVolumeSegmentation.js +0 -50
  240. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationRepresentationRenderingConfig.d.ts +0 -2
  241. package/dist/esm/stateManagement/segmentation/helpers/getSegmentationRepresentationRenderingConfig.js +0 -11
  242. package/dist/esm/tools/AdvancedMagnifyViewport.d.ts +0 -76
  243. package/dist/esm/tools/AdvancedMagnifyViewport.js +0 -351
  244. package/dist/esm/tools/AdvancedMagnifyViewportManager.d.ts +0 -38
  245. package/dist/esm/tools/AdvancedMagnifyViewportManager.js +0 -161
  246. package/dist/esm/utilities/contours/interpolation/index.d.ts +0 -2
  247. package/dist/esm/utilities/contours/interpolation/index.js +0 -2
  248. package/dist/esm/utilities/segmentation/triggerSegmentationRender.d.ts +0 -3
  249. package/dist/esm/utilities/segmentation/triggerSegmentationRender.js +0 -8
package/dist/umd/index.js CHANGED
@@ -1,2 +1,3 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader")):"function"==typeof define&&define.amd?define(["gl-matrix","@cornerstonejs/core","@kitware/vtk.js/Common/DataModel/PiecewiseFunction","@kitware/vtk.js/Rendering/Core/ColorTransferFunction","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Common/Core/CellArray","@kitware/vtk.js/Common/Core/Points","@kitware/vtk.js/Common/DataModel/PolyData","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Common/Core/MatrixBuilder","@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget","@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor","@kitware/vtk.js/Rendering/Core/AxesActor","@kitware/vtk.js/IO/XML/XMLPolyDataReader"],t):"object"==typeof exports?exports.cornerstoneTools3D=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader")):e.cornerstoneTools3D=t(e.window,e.cornerstone3D,e["@kitware/vtk.js/Common/DataModel/PiecewiseFunction"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction"],e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Common/Core/CellArray"],e["@kitware/vtk.js/Common/Core/Points"],e["@kitware/vtk.js/Common/DataModel/PolyData"],e["@kitware/vtk.js/Rendering/Core/Mapper"],e["@kitware/vtk.js/Rendering/Core/Actor"],e["@kitware/vtk.js/Common/Core/MatrixBuilder"],e["@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"],e["@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"],e["@kitware/vtk.js/Rendering/Core/AxesActor"],e["@kitware/vtk.js/IO/XML/XMLPolyDataReader"])}(self,((e,t,n,i,o,a,r,s,l,d,c,h,u,g,m,v,p,f)=>(()=>{var w={907:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",o=9007199254740991,a="[object Arguments]",r="[object Boolean]",s="[object Date]",l="[object Function]",d="[object GeneratorFunction]",c="[object Map]",h="[object Number]",u="[object Object]",g="[object Promise]",m="[object RegExp]",v="[object Set]",p="[object String]",f="[object Symbol]",w="[object WeakMap]",I="[object ArrayBuffer]",E="[object DataView]",C="[object Float32Array]",_="[object Float64Array]",b="[object Int8Array]",T="[object Int16Array]",D="[object Int32Array]",S="[object Uint8Array]",y="[object Uint8ClampedArray]",x="[object Uint16Array]",M="[object Uint32Array]",O=/\w*$/,P=/^\[object .+?Constructor\]$/,A=/^(?:0|[1-9]\d*)$/,R={};R[a]=R["[object Array]"]=R[I]=R[E]=R[r]=R[s]=R[C]=R[_]=R[b]=R[T]=R[D]=R[c]=R[h]=R[u]=R[m]=R[v]=R[p]=R[f]=R[S]=R[y]=R[x]=R[M]=!0,R["[object Error]"]=R[l]=R[w]=!1;var L="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,N="object"==typeof self&&self&&self.Object===Object&&self,U=L||N||Function("return this")(),k=t&&!t.nodeType&&t,V=k&&e&&!e.nodeType&&e,W=V&&V.exports===k;function B(e,t){return e.set(t[0],t[1]),e}function H(e,t){return e.add(t),e}function F(e,t,n,i){var o=-1,a=e?e.length:0;for(i&&a&&(n=e[++o]);++o<a;)n=t(n,e[o],o,e);return n}function G(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function $(e){var t=-1,n=Array(e.size);return e.forEach((function(e,i){n[++t]=[i,e]})),n}function q(e,t){return function(n){return e(t(n))}}function z(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}var j,K=Array.prototype,Y=Function.prototype,X=Object.prototype,J=U["__core-js_shared__"],Z=(j=/[^.]+$/.exec(J&&J.keys&&J.keys.IE_PROTO||""))?"Symbol(src)_1."+j:"",Q=Y.toString,ee=X.hasOwnProperty,te=X.toString,ne=RegExp("^"+Q.call(ee).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ie=W?U.Buffer:void 0,oe=U.Symbol,ae=U.Uint8Array,re=q(Object.getPrototypeOf,Object),se=Object.create,le=X.propertyIsEnumerable,de=K.splice,ce=Object.getOwnPropertySymbols,he=ie?ie.isBuffer:void 0,ue=q(Object.keys,Object),ge=Ue(U,"DataView"),me=Ue(U,"Map"),ve=Ue(U,"Promise"),pe=Ue(U,"Set"),fe=Ue(U,"WeakMap"),we=Ue(Object,"create"),Ie=He(ge),Ee=He(me),Ce=He(ve),_e=He(pe),be=He(fe),Te=oe?oe.prototype:void 0,De=Te?Te.valueOf:void 0;function Se(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function ye(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function xe(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Me(e){this.__data__=new ye(e)}function Oe(e,t,n){var i=e[t];ee.call(e,t)&&Fe(i,n)&&(void 0!==n||t in e)||(e[t]=n)}function Pe(e,t){for(var n=e.length;n--;)if(Fe(e[n][0],t))return n;return-1}function Ae(e,t,n,i,o,g,w){var P;if(i&&(P=g?i(e,o,g,w):i(e)),void 0!==P)return P;if(!je(e))return e;var A=Ge(e);if(A){if(P=function(e){var t=e.length,n=e.constructor(t);return t&&"string"==typeof e[0]&&ee.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!t)return function(e,t){var n=-1,i=e.length;for(t||(t=Array(i));++n<i;)t[n]=e[n];return t}(e,P)}else{var L=Ve(e),N=L==l||L==d;if(qe(e))return function(e,t){if(t)return e.slice();var n=new e.constructor(e.length);return e.copy(n),n}(e,t);if(L==u||L==a||N&&!g){if(G(e))return g?e:{};if(P=function(e){return"function"!=typeof e.constructor||Be(e)?{}:je(t=re(e))?se(t):{};var t}(N?{}:e),!t)return function(e,t){return Le(e,ke(e),t)}(e,function(e,t){return e&&Le(t,Ke(t),e)}(P,e))}else{if(!R[L])return g?e:{};P=function(e,t,n,i){var o,a=e.constructor;switch(t){case I:return Re(e);case r:case s:return new a(+e);case E:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,i);case C:case _:case b:case T:case D:case S:case y:case x:case M:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}(e,i);case c:return function(e,t,n){return F(t?n($(e),!0):$(e),B,new e.constructor)}(e,i,n);case h:case p:return new a(e);case m:return function(e){var t=new e.constructor(e.source,O.exec(e));return t.lastIndex=e.lastIndex,t}(e);case v:return function(e,t,n){return F(t?n(z(e),!0):z(e),H,new e.constructor)}(e,i,n);case f:return o=e,De?Object(De.call(o)):{}}}(e,L,Ae,t)}}w||(w=new Me);var U=w.get(e);if(U)return U;if(w.set(e,P),!A)var k=n?function(e){return function(e,t,n){var i=t(e);return Ge(e)?i:function(e,t){for(var n=-1,i=t.length,o=e.length;++n<i;)e[o+n]=t[n];return e}(i,n(e))}(e,Ke,ke)}(e):Ke(e);return function(e,t){for(var n=-1,i=e?e.length:0;++n<i&&!1!==t(e[n],n););}(k||e,(function(o,a){k&&(o=e[a=o]),Oe(P,a,Ae(o,t,n,i,a,e,w))})),P}function Re(e){var t=new e.constructor(e.byteLength);return new ae(t).set(new ae(e)),t}function Le(e,t,n,i){n||(n={});for(var o=-1,a=t.length;++o<a;){var r=t[o],s=i?i(n[r],e[r],r,n,e):void 0;Oe(n,r,void 0===s?e[r]:s)}return n}function Ne(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function Ue(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!je(e)||(t=e,Z&&Z in t))&&(ze(e)||G(e)?ne:P).test(He(e));var t}(n)?n:void 0}Se.prototype.clear=function(){this.__data__=we?we(null):{}},Se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},Se.prototype.get=function(e){var t=this.__data__;if(we){var n=t[e];return n===i?void 0:n}return ee.call(t,e)?t[e]:void 0},Se.prototype.has=function(e){var t=this.__data__;return we?void 0!==t[e]:ee.call(t,e)},Se.prototype.set=function(e,t){return this.__data__[e]=we&&void 0===t?i:t,this},ye.prototype.clear=function(){this.__data__=[]},ye.prototype.delete=function(e){var t=this.__data__,n=Pe(t,e);return!(n<0||(n==t.length-1?t.pop():de.call(t,n,1),0))},ye.prototype.get=function(e){var t=this.__data__,n=Pe(t,e);return n<0?void 0:t[n][1]},ye.prototype.has=function(e){return Pe(this.__data__,e)>-1},ye.prototype.set=function(e,t){var n=this.__data__,i=Pe(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},xe.prototype.clear=function(){this.__data__={hash:new Se,map:new(me||ye),string:new Se}},xe.prototype.delete=function(e){return Ne(this,e).delete(e)},xe.prototype.get=function(e){return Ne(this,e).get(e)},xe.prototype.has=function(e){return Ne(this,e).has(e)},xe.prototype.set=function(e,t){return Ne(this,e).set(e,t),this},Me.prototype.clear=function(){this.__data__=new ye},Me.prototype.delete=function(e){return this.__data__.delete(e)},Me.prototype.get=function(e){return this.__data__.get(e)},Me.prototype.has=function(e){return this.__data__.has(e)},Me.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var i=n.__data__;if(!me||i.length<199)return i.push([e,t]),this;n=this.__data__=new xe(i)}return n.set(e,t),this};var ke=ce?q(ce,Object):function(){return[]},Ve=function(e){return te.call(e)};function We(e,t){return!!(t=null==t?o:t)&&("number"==typeof e||A.test(e))&&e>-1&&e%1==0&&e<t}function Be(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||X)}function He(e){if(null!=e){try{return Q.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Fe(e,t){return e===t||e!=e&&t!=t}(ge&&Ve(new ge(new ArrayBuffer(1)))!=E||me&&Ve(new me)!=c||ve&&Ve(ve.resolve())!=g||pe&&Ve(new pe)!=v||fe&&Ve(new fe)!=w)&&(Ve=function(e){var t=te.call(e),n=t==u?e.constructor:void 0,i=n?He(n):void 0;if(i)switch(i){case Ie:return E;case Ee:return c;case Ce:return g;case _e:return v;case be:return w}return t});var Ge=Array.isArray;function $e(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=o}(e.length)&&!ze(e)}var qe=he||function(){return!1};function ze(e){var t=je(e)?te.call(e):"";return t==l||t==d}function je(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ke(e){return $e(e)?function(e,t){var n=Ge(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&$e(e)}(e)&&ee.call(e,"callee")&&(!le.call(e,"callee")||te.call(e)==a)}(e)?function(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}(e.length,String):[],i=n.length,o=!!i;for(var r in e)!t&&!ee.call(e,r)||o&&("length"==r||We(r,i))||n.push(r);return n}(e):function(e){if(!Be(e))return ue(e);var t=[];for(var n in Object(e))ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}e.exports=function(e){return Ae(e,!0,!0)}},485:(e,t,n)=>{var i,o="__lodash_hash_undefined__",a=1/0,r="[object Function]",s="[object GeneratorFunction]",l="[object Symbol]",d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,h=/^\./,u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,g=/\\(\\)?/g,m=/^\[object .+?Constructor\]$/,v="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,f=v||p||Function("return this")(),w=Array.prototype,I=Function.prototype,E=Object.prototype,C=f["__core-js_shared__"],_=(i=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"",b=I.toString,T=E.hasOwnProperty,D=E.toString,S=RegExp("^"+b.call(T).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=f.Symbol,x=w.splice,M=V(f,"Map"),O=V(Object,"create"),P=y?y.prototype:void 0,A=P?P.toString:void 0;function R(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function L(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function N(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function U(e,t){for(var n,i,o=e.length;o--;)if((n=e[o][0])===(i=t)||n!=n&&i!=i)return o;return-1}function k(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function V(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!G(e)||_&&_ in e)return!1;var t=function(e){var t=G(e)?D.call(e):"";return t==r||t==s}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?S:m;return t.test(function(e){if(null!=e){try{return b.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(n)?n:void 0}R.prototype.clear=function(){this.__data__=O?O(null):{}},R.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},R.prototype.get=function(e){var t=this.__data__;if(O){var n=t[e];return n===o?void 0:n}return T.call(t,e)?t[e]:void 0},R.prototype.has=function(e){var t=this.__data__;return O?void 0!==t[e]:T.call(t,e)},R.prototype.set=function(e,t){return this.__data__[e]=O&&void 0===t?o:t,this},L.prototype.clear=function(){this.__data__=[]},L.prototype.delete=function(e){var t=this.__data__,n=U(t,e);return!(n<0||(n==t.length-1?t.pop():x.call(t,n,1),0))},L.prototype.get=function(e){var t=this.__data__,n=U(t,e);return n<0?void 0:t[n][1]},L.prototype.has=function(e){return U(this.__data__,e)>-1},L.prototype.set=function(e,t){var n=this.__data__,i=U(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},N.prototype.clear=function(){this.__data__={hash:new R,map:new(M||L),string:new R}},N.prototype.delete=function(e){return k(this,e).delete(e)},N.prototype.get=function(e){return k(this,e).get(e)},N.prototype.has=function(e){return k(this,e).has(e)},N.prototype.set=function(e,t){return k(this,e).set(e,t),this};var W=H((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if($(e))return A?A.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return h.test(e)&&n.push(""),e.replace(u,(function(e,t,i,o){n.push(i?o.replace(g,"$1"):t||e)})),n}));function B(e){if("string"==typeof e||$(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function H(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var i=arguments,o=t?t.apply(this,i):i[0],a=n.cache;if(a.has(o))return a.get(o);var r=e.apply(this,i);return n.cache=a.set(o,r),r};return n.cache=new(H.Cache||N),n}H.Cache=N;var F=Array.isArray;function G(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function $(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&D.call(e)==l}e.exports=function(e,t,n){var i=null==e?void 0:function(e,t){var n;t=function(e,t){if(F(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!$(e))||c.test(e)||!d.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:F(n=t)?n:W(n);for(var i=0,o=t.length;null!=e&&i<o;)e=e[B(t[i++])];return i&&i==o?e:void 0}(e,t);return void 0===i?n:i}},396:e=>{"use strict";e.exports=l},785:e=>{"use strict";e.exports=r},807:e=>{"use strict";e.exports=o},847:e=>{"use strict";e.exports=g},348:e=>{"use strict";e.exports=d},283:e=>{"use strict";e.exports=s},441:e=>{"use strict";e.exports=n},70:e=>{"use strict";e.exports=c},543:e=>{"use strict";e.exports=a},614:e=>{"use strict";e.exports=f},518:e=>{"use strict";e.exports=m},474:e=>{"use strict";e.exports=u},744:e=>{"use strict";e.exports=v},424:e=>{"use strict";e.exports=p},795:e=>{"use strict";e.exports=i},610:e=>{"use strict";e.exports=h},953:e=>{"use strict";e.exports=t},976:t=>{"use strict";t.exports=e}},I={};function E(e){var t=I[e];if(void 0!==t)return t.exports;var n=I[e]={id:e,loaded:!1,exports:{}};return w[e](n,n.exports,E),n.loaded=!0,n.exports}E.m=w,E.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return E.d(t,{a:t}),t},E.d=(e,t)=>{for(var n in t)E.o(t,n)&&!E.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},E.u=e=>e+".index.js",E.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),E.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),E.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},E.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;E.g.importScripts&&(e=E.g.location+"");var t=E.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!e;)e=n[i--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),E.p=e})(),E.b=document.baseURI||self.location.href;var C={};return(()=>{"use strict";E.r(C),E.d(C,{AdvancedMagnifyTool:()=>LI,AngleTool:()=>hI,AnnotationDisplayTool:()=>Hr,AnnotationTool:()=>Gr,ArrowAnnotateTool:()=>lI,BaseTool:()=>Ia,BidirectionalTool:()=>$s,BrushTool:()=>_r,CONSTANTS:()=>z,CircleROIStartEndThresholdTool:()=>lE,CircleROITool:()=>Rw,CircleScissorsTool:()=>eE,CobbAngleTool:()=>vI,CrosshairsTool:()=>uw,DragProbeTool:()=>Pf,EllipticalROITool:()=>yw,Enums:()=>ne,EraserTool:()=>jI,HeightTool:()=>iw,KeyImageTool:()=>bI,LengthTool:()=>Qf,LivewireContourSegmentationTool:()=>oI,LivewireContourTool:()=>nI,MIPJumpToClickTool:()=>Yf,MagnifyTool:()=>SI,OrientationMarkerTool:()=>IE,OverlayGridTool:()=>ww,PaintFillTool:()=>DE,PanTool:()=>_f,PlanarFreehandContourSegmentationTool:()=>Kh,PlanarFreehandROITool:()=>zh,PlanarRotateTool:()=>Ff,ProbeTool:()=>xf,RectangleROIStartEndThresholdTool:()=>Es,RectangleROIThresholdTool:()=>gs,RectangleROITool:()=>hs,RectangleScissorsTool:()=>ZI,ReferenceCursors:()=>UI,ReferenceLines:()=>vw,ReferenceLinesTool:()=>vw,ScaleOverlayTool:()=>WI,SculptorTool:()=>qI,SegmentSelectTool:()=>CE,SegmentationIntersectionTool:()=>_w,SphereScissorsTool:()=>nE,SplineContourSegmentationTool:()=>Kw,SplineROITool:()=>zw,StackScrollMouseWheelTool:()=>$f,StackScrollTool:()=>Wf,Synchronizer:()=>lp,SynchronizerManager:()=>$,ToolGroupManager:()=>q,TrackballRotateTool:()=>Tf,Types:()=>X,UltrasoundDirectionalTool:()=>II,VideoRedactionTool:()=>yE,VolumeRotateMouseWheelTool:()=>jf,WindowLevelRegionTool:()=>Nf,WindowLevelTool:()=>Rf,ZoomTool:()=>kf,addTool:()=>Go,annotation:()=>Z,cancelActiveManipulations:()=>ap,cursors:()=>Y,destroy:()=>np,drawing:()=>K,init:()=>tp,removeTool:()=>$o,segmentation:()=>te,state:()=>je,synchronizers:()=>j,utilities:()=>H});var e={};E.r(e),E.d(e,{checkAndDefineIsLockedProperty:()=>me,getAnnotationsLocked:()=>he,getAnnotationsLockedCount:()=>ge,isAnnotationLocked:()=>ue,setAnnotationLocked:()=>de,unlockAllAnnotations:()=>ce});var t={};E.r(t),E.d(t,{deselectAnnotation:()=>_e,getAnnotationsSelected:()=>be,getAnnotationsSelectedByToolName:()=>Te,getAnnotationsSelectedCount:()=>Se,isAnnotationSelected:()=>De,setAnnotationSelected:()=>Ce});var n={};E.r(n),E.d(n,{checkAndDefineIsVisibleProperty:()=>Le,isAnnotationVisible:()=>Re,setAnnotationVisibility:()=>Pe,showAllAnnotations:()=>Ae});var i={};E.r(i),E.d(i,{addAnnotation:()=>gt,addChildAnnotation:()=>ct,clearParentAnnotation:()=>dt,getAllAnnotations:()=>lt,getAnnotation:()=>pt,getAnnotationManager:()=>ot,getAnnotations:()=>st,getChildAnnotations:()=>ut,getNumberOfAnnotations:()=>mt,getParentAnnotation:()=>ht,invalidateAnnotation:()=>It,removeAllAnnotations:()=>ft,removeAnnotation:()=>vt,removeAnnotations:()=>wt,resetAnnotationManager:()=>rt,setAnnotationManager:()=>at});var o={};E.r(o),E.d(o,{triggerSegmentationDataModified:()=>on,triggerSegmentationModified:()=>nn,triggerSegmentationRemoved:()=>Qt,triggerSegmentationRepresentationModified:()=>tn,triggerSegmentationRepresentationRemoved:()=>en});var a={};E.r(a),E.d(a,{addColorLUT:()=>un,getSegmentIndexColor:()=>mn,setColorLUT:()=>gn,setSegmentIndexColor:()=>vn});var r={};E.r(r),E.d(r,{InterpolationManager:()=>ua});var s={};E.r(s),E.d(s,{AnnotationToPointData:()=>Hi,acceptAutogeneratedInterpolations:()=>ma,areCoplanarContours:()=>_i,calculatePerimeter:()=>fa,contourFinder:()=>Si,detectContourHoles:()=>xi,findHandlePolylineIndex:()=>pa,generateContourSetsFromLabelmap:()=>Ui,getContourHolesDataCanvas:()=>Gi,getContourHolesDataWorld:()=>Fi,getDeduplicatedVTKPolyDataPoints:()=>yi,interpolation:()=>r,updateContourPolyline:()=>Ji});var l={};E.r(l),E.d(l,{hideElementCursor:()=>cr,initElementCursor:()=>sr,resetElementCursor:()=>dr,setElementCursor:()=>lr});var d={};E.r(d),E.d(d,{getActiveSegmentation:()=>gr,getActiveSegmentationRepresentation:()=>ur,setActiveSegmentationRepresentation:()=>mr});var c={};E.r(c),E.d(c,{getLockedSegmentIndices:()=>fr,isSegmentIndexLocked:()=>vr,setSegmentIndexLocked:()=>pr});var h={};E.r(h),E.d(h,{getActiveSegmentIndex:()=>Er,setActiveSegmentIndex:()=>Ir});var u={};E.r(u),E.d(u,{contourAndFindLargestBidirectional:()=>ks,createBidirectionalToolData:()=>Vs,createLabelmapVolumeForViewport:()=>ys,createMergedLabelmapForIndex:()=>Ts,floodFill:()=>Sa,getBrushSizeForToolGroup:()=>Ms,getBrushThresholdForToolGroup:()=>Ps,getBrushToolInstances:()=>br,getDefaultRepresentationConfig:()=>Ss,getHoveredContourSegmentationAnnotation:()=>Qs,getSegmentIndexAtLabelmapBorder:()=>Js,getSegmentIndexAtWorldPoint:()=>Xs,getUniqueSegmentIndices:()=>Zt,invalidateBrushCursor:()=>wr,isValidRepresentationConfig:()=>Ds,rectangleROIThresholdVolumeByRange:()=>bs,segmentContourAction:()=>qs,setBrushSizeForToolGroup:()=>xs,setBrushThresholdForToolGroup:()=>Os,thresholdSegmentationByRange:()=>As,thresholdVolumeByRange:()=>Sr,triggerSegmentationRender:()=>yu,triggerSegmentationRenderBySegmentationId:()=>xu});var g={};E.r(g),E.d(g,{getTextBoxCoordsCanvas:()=>Zr});var m={};E.r(m),E.d(m,{distanceToPoint:()=>tl,distanceToPointSquared:()=>el,intersectAABB:()=>so});var v={};E.r(v),E.d(v,{BasicStatsCalculator:()=>rs,Calculator:()=>is});var p={};E.r(p),E.d(p,{getCanvasEllipseCorners:()=>Ra,pointInEllipse:()=>La,precalculatePointInEllipse:()=>Na});var f={};E.r(f),E.d(f,{distanceToPoint:()=>Xr,distanceToPointSquared:()=>zi,distanceToPointSquaredInfo:()=>qi,intersectLine:()=>Bs,isPointOnLineSegment:()=>Eo});var w={};E.r(w),E.d(w,{distanceToPoint:()=>nl,distanceToPointSquared:()=>$i,mirror:()=>il});var I={};E.r(I),E.d(I,{addCanvasPointsToArray:()=>hl,containsPoint:()=>vo,containsPoints:()=>po,decimate:()=>Ki,getAABB:()=>kn,getArea:()=>ol,getClosestLineSegmentIntersection:()=>sl,getFirstLineSegmentIntersectionIndexes:()=>uo,getLineSegmentIntersectionsCoordinates:()=>rl,getLineSegmentIntersectionsIndexes:()=>fo,getNormal2:()=>wo,getNormal3:()=>al,getSignedArea:()=>Yi,getSubPixelSpacingAndXYDirections:()=>dl,getWindingDirection:()=>Xi,intersectPolyline:()=>go,isClosed:()=>mo,isPointInsidePolyline3D:()=>Ys,mergePolylines:()=>Mo,pointCanProjectOnLine:()=>ul,pointsAreWithinCloseContourProximity:()=>cl,projectTo2D:()=>Ks,subtractPolylines:()=>Oo});var _={};E.r(_),E.d(_,{distanceToPoint:()=>Jr});var b={};E.r(b),E.d(b,{findClosestPoint:()=>Kr,liangBarksyClip:()=>fl});var T={};E.r(T),E.d(T,{BasicStatsCalculator:()=>v,aabb:()=>m,ellipse:()=>p,lineSegment:()=>f,point:()=>w,polyline:()=>I,rectangle:()=>_,vec2:()=>b});var D={};E.r(D),E.d(D,{default:()=>bl,filterAnnotationsForDisplay:()=>Lr,filterAnnotationsWithinSamePlane:()=>ps,filterAnnotationsWithinSlice:()=>Rr,getPointInLineOfSightWithCriteria:()=>El,getWorldWidthAndHeightFromCorners:()=>Qr,isPlaneIntersectingAABB:()=>_l});var S={};E.r(S),E.d(S,{filterViewportsWithFrameOfReferenceUID:()=>Po,filterViewportsWithParallelNormals:()=>ko,filterViewportsWithToolEnabled:()=>No,getViewportIdsWithToolToRender:()=>Vo});var y={};E.r(y),E.d(y,{getOrientationStringLPS:()=>Tl,invertOrientationStringLPS:()=>Dl});var x={};E.r(x),E.d(x,{Events:()=>yl,addToolState:()=>Ml,getToolState:()=>Ol,playClip:()=>Nl,stopClip:()=>Ul});var M={};E.r(M),E.d(M,{extend2DBoundingBoxInViewAxis:()=>Cs,getBoundingBoxAroundShape:()=>hi,getBoundingBoxAroundShapeIJK:()=>hi,getBoundingBoxAroundShapeWorld:()=>ui});var O={};E.r(O),E.d(O,{default:()=>jl,smoothAnnotation:()=>zl});var P={};E.r(P),E.d(P,{getBoundsIJKFromRectangleAnnotations:()=>_s,isAxisAlignedRectangle:()=>Xl});var A={};E.r(A),E.d(A,{isViewportPreScaled:()=>ts,jumpToSlice:()=>li,jumpToWorld:()=>wd});var R={};E.r(R),E.d(R,{copyPoints:()=>Td,copyPointsList:()=>bd,getDeltaDistance:()=>Ed,getDeltaDistanceBetweenIPoints:()=>_d,getDeltaPoints:()=>Id,getDeltaRotation:()=>Cd,getMeanPoints:()=>Dd,getMeanTouchPoints:()=>Sd});var L={};E.r(L),E.d(L,{generateImageFromTimeData:()=>Rd,getDataInTime:()=>Pd});var N={};E.r(N),E.d(N,{getPoint:()=>Ld,getPolyDataPointIndexes:()=>Nd,getPolyDataPoints:()=>Ud});var U={};E.r(U),E.d(U,{ColorbarRangeTextPosition:()=>kd});var k={};E.r(k),E.d(k,{Colorbar:()=>Kd,Enums:()=>U,ViewportColorbar:()=>Jd});var V={};E.r(V),E.d(V,{calculateMinMaxMean:()=>Qd,extractWindowLevelRegionToolData:()=>ec,getLuminanceFromRegion:()=>Zd});var W={};E.r(W),E.d(W,{colorbar:()=>k,windowLevel:()=>V});var B={};E.r(B),E.d(B,{addContourSegmentationAnnotation:()=>Fo,areSameSegment:()=>Bo,isContourSegmentationAnnotation:()=>Wo,removeContourSegmentationAnnotation:()=>Ho});var H={};E.r(H),E.d(H,{annotationFrameRange:()=>vi,annotationHydration:()=>Ii,boundingBox:()=>M,calibrateImageSpacing:()=>qn,cine:()=>x,clip:()=>Gn,contourSegmentation:()=>B,contours:()=>s,debounce:()=>rn,drawing:()=>g,dynamicVolume:()=>L,getAnnotationNearPoint:()=>Wn,getAnnotationNearPointOnEnabledElement:()=>Bn,getCalibratedAspect:()=>Un,getCalibratedLengthUnitsAndScale:()=>Ln,getCalibratedProbeUnitsAndValue:()=>Nn,getClosestImageIdForStackViewport:()=>Ci,getSphereBoundsInfo:()=>mi,getViewportForAnnotation:()=>wi,isObject:()=>an,jumpToSlice:()=>li,math:()=>T,orientation:()=>y,planar:()=>D,planarFreehandROITool:()=>O,pointToString:()=>Ut,polyDataUtils:()=>N,rectangleROITool:()=>P,roundNumber:()=>tc,scroll:()=>si,segmentation:()=>u,stackContextPrefetch:()=>fd,stackPrefetch:()=>hd,throttle:()=>Fn,touch:()=>R,triggerAnnotationRender:()=>ni,triggerAnnotationRenderForToolGroupIds:()=>ri,triggerAnnotationRenderForViewportIds:()=>oi,triggerEvent:()=>ie.triggerEvent,viewport:()=>A,viewportFilters:()=>S,voi:()=>W});var F={};E.r(F),E.d(F,{getHiddenSegmentIndices:()=>xh,getSegmentIndexVisibility:()=>yh,getSegmentationRepresentationVisibility:()=>Th,setSegmentIndexVisibility:()=>Sh,setSegmentIndicesVisibility:()=>Dh,setSegmentationRepresentationVisibility:()=>bh});var G={};E.r(G),E.d(G,{addColorLUT:()=>ng,addSegmentation:()=>ku,addSegmentationRepresentation:()=>Ku,getActiveSegmentationRepresentation:()=>ag,getAllSegmentationRepresentations:()=>Vu,getColorLUT:()=>eg,getCurrentLabelmapImageIdForViewport:()=>sg,getDefaultSegmentationStateManager:()=>Lu,getGlobalConfig:()=>Yu,getNextColorLUTIndex:()=>tg,getPerSegmentConfig:()=>Gu,getSegmentation:()=>Nu,getSegmentationRepresentation:()=>Wu,getSegmentationRepresentationConfig:()=>Hu,getSegmentationRepresentationViewportStates:()=>ju,getSegmentationRepresentationVisibility:()=>ig,getSegmentationRepresentations:()=>zu,getSegmentationRepresentationsForSegmentation:()=>Bu,getSegmentations:()=>Uu,getViewportIdsWithSegmentation:()=>qu,removeColorLUT:()=>Qu,removeRepresentation:()=>Zu,removeSegmentation:()=>Ju,setActiveSegmentationRepresentation:()=>rg,setGlobalConfig:()=>Xu,setPerSegmentConfig:()=>$u,setSegmentationRepresentationConfig:()=>Fu,setSegmentationRepresentationVisibility:()=>og,updateLabelmapSegmentationImageReferences:()=>lg});var $={};E.r($),E.d($,{createSynchronizer:()=>dp,destroy:()=>cp,destroySynchronizer:()=>gp,getAllSynchronizers:()=>up,getSynchronizer:()=>hp,getSynchronizersForViewport:()=>Hv});var q={};E.r(q),E.d(q,{createToolGroup:()=>Hp,destroy:()=>Qv,destroyToolGroup:()=>Zv,getAllToolGroups:()=>Fp,getToolGroup:()=>ai,getToolGroupForViewport:()=>Vn,getToolGroupsWithToolName:()=>Je});var z={};E.r(z),E.d(z,{COLOR_LUT:()=>gu});var j={};E.r(j),E.d(j,{createCameraPositionSynchronizer:()=>qp,createImageSliceSynchronizer:()=>af,createPresentationViewSynchronizer:()=>Kp,createSlabThicknessSynchronizer:()=>lf,createStackImageSynchronizer:()=>df,createVOISynchronizer:()=>Xp,createZoomPanSynchronizer:()=>Qp});var K={};E.r(K),E.d(K,{draw:()=>Xn,drawArrow:()=>gf,drawCircle:()=>er,drawEllipse:()=>hf,drawEllipseByCoordinates:()=>cf,drawHandle:()=>yr,drawHandles:()=>xr,drawHeight:()=>uf,drawLine:()=>jr,drawLinkedTextBox:()=>Yr,drawPath:()=>ch,drawPolyline:()=>hh,drawRect:()=>Or,drawRectByCoordinates:()=>Mr,drawRedactionRect:()=>mf,drawTextBox:()=>zr,setAttributesIfNecessary:()=>Za,setNewAttributesIfValid:()=>Qa});var Y={};E.r(Y),E.d(Y,{CursorNames:()=>pf,CursorSVG:()=>Tp,ImageMouseCursor:()=>pp,MouseCursor:()=>ir,SVGMouseCursor:()=>Op,elementCursor:()=>l,registerCursor:()=>Sp,setCursorForElement:()=>vf});var X={};E.r(X);var J={};E.r(J),E.d(J,{getFont:()=>ff,getState:()=>Wr,style:()=>Nr});var Z={};E.r(Z),E.d(Z,{AnnotationGroup:()=>wf,FrameOfReferenceSpecificAnnotationManager:()=>Fe,config:()=>J,locking:()=>e,selection:()=>t,state:()=>i,visibility:()=>n});var Q={};E.r(Q),E.d(Q,{color:()=>a,getGlobalConfig:()=>Mh,getGlobalRepresentationConfig:()=>Ph,getPerSegmentConfig:()=>Uh,getSegmentIndexConfig:()=>Vh,getSegmentationRepresentationConfig:()=>Rh,setGlobalConfig:()=>Oh,setGlobalRepresentationConfig:()=>Ah,setPerSegmentConfig:()=>Nh,setSegmentIndexConfig:()=>kh,setSegmentationRepresentationConfig:()=>Lh,visibility:()=>F});var ee={};E.r(ee),E.d(ee,{canComputeRequestedRepresentation:()=>jt,computeAndAddContourRepresentation:()=>Xh,computeAndAddLabelmapRepresentation:()=>pu,computeAndAddSurfaceRepresentation:()=>En});var te={};E.r(te),E.d(te,{activeSegmentation:()=>d,addRepresentationData:()=>Kt,addSegmentationRepresentations:()=>mu,addSegmentations:()=>Ef,config:()=>Q,convertStackToVolumeSegmentation:()=>Ou,convertVolumeToStackSegmentation:()=>vu,polySeg:()=>ee,removeSegmentationRepresentations:()=>If,segmentIndex:()=>h,segmentLocking:()=>c,state:()=>G,triggerSegmentationEvents:()=>o});var ne={};E.r(ne),E.d(ne,{AnnotationStyleStates:()=>Vr,ChangeTypes:()=>$e,Events:()=>se,KeyboardBindings:()=>sc,MouseBindings:()=>rc,SegmentationRepresentations:()=>Ct,StrategyCallbacks:()=>Ca,Swipe:()=>em,ToolModes:()=>Ye,WorkerTypes:()=>Nt});var ie=E(953);function oe(e){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oe(e)}function ae(e,t,n){return(t=function(e){var t=function(e){if("object"!==oe(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!==oe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===oe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re=function(e){return e.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",e.TOOLGROUP_VIEWPORT_ADDED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_ADDED",e.TOOLGROUP_VIEWPORT_REMOVED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_REMOVED",e.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",e.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",e.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",e.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",e.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",e.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",e.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",e.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",e.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",e.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",e.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",e.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",e.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",e.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",e.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",e.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",e.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",e.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",e.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",e.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",e.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",e.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",e.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",e.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",e.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",e.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",e.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",e.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",e.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",e.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",e.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",e.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",e.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",e.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE",e}(re||{});const se=re,le=new Set;function de(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=ve();e&&(t?function(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}(e,le,n):pe(e,le,n)),fe(n,le)}function ce(){const e=ve();!function(e,t){e.forEach((n=>{pe(n,e,t)}))}(le,e),fe(e,le)}function he(){return Array.from(le)}function ue(e){return le.has(e)}function ge(){return le.size}function me(e){if(e){const t=!!e.isLocked;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isLocked");return t?t.configurable&&(t.set!==we||t.get!==Ie):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:we,get:Ie}),de(e,t)}}function ve(){return Object.freeze({added:[],removed:[],locked:[]})}function pe(e,t,n){t.delete(e)&&n.removed.push(e)}function fe(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.locked.push(t)})),(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_LOCK_CHANGE,e))}function we(e){de(this,e)}function Ie(){return ue(this)}const Ee=new Set;function Ce(e){arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?_e(e):function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=ye();t||xe(Ee,n),e&&!Ee.has(e)&&(Ee.add(e),n.added.push(e)),Me(n,Ee)}(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function _e(e){const t=ye();e?Ee.delete(e)&&t.removed.push(e):xe(Ee,t),Me(t,Ee)}function be(){return Array.from(Ee)}function Te(e){return be().filter((t=>{const n=pt(t);return n?.metadata?.toolName===e}))}function De(e){return Ee.has(e)}function Se(){return Ee.size}function ye(){return Object.freeze({added:[],removed:[],selection:[]})}function xe(e,t){e.forEach((n=>{e.delete(n)&&t.removed.push(n)}))}function Me(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.selection.push(t)})),(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_SELECTION_CHANGE,e))}const Oe=new Set;function Pe(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=Ne();e&&(t?Ue(e,Oe,n):function(e,t,n){t.has(e)||(t.add(e),De(e)&&_e(e),n.lastHidden.push(e))}(e,Oe,n)),ke(n)}function Ae(){const e=Ne();Oe.forEach((t=>{Ue(t,Oe,e)})),ke(e)}function Re(e){if(pt(e))return!Oe.has(e)}function Le(e){if(e){const t=e.isVisible??!0;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isVisible");return t?t.configurable&&(t.set!==Ve||t.get!==We):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:Ve,get:We}),Pe(e.annotationUID,t)}}function Ne(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function Ue(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function ke(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(Oe.forEach((t=>{e.hidden.push(t)})),(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_VISIBILITY_CHANGE,e))}function Ve(e){Pe(this.annotationUID,e)}function We(){return Re(this.annotationUID)}class Be{constructor(e){ae(this,"annotations",void 0),ae(this,"uid",void 0),ae(this,"getGroupKey",(e=>{if("string"==typeof e)return e;const t=e,n=(0,ie.getEnabledElement)(t);if(!n)throw new Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return n.FrameOfReferenceUID})),ae(this,"_imageVolumeModifiedHandler",(e=>{const t=e.detail,{FrameOfReferenceUID:n}=t,i=this.annotations[n];i&&Object.keys(i).forEach((e=>{i[e].forEach((e=>{void 0!==e.invalidated&&(e.invalidated=!0)}))}))})),ae(this,"getFramesOfReference",(()=>Object.keys(this.annotations))),ae(this,"getAnnotations",((e,t)=>{const n=this.annotations;return n[e]?t?n[e][t]?n[e][t]:[]:n[e]:[]})),ae(this,"getAnnotation",(e=>{const t=this.annotations;for(const n in t){const i=t[n];for(const t in i){const n=i[t];for(const t of n)if(e===t.annotationUID)return t}}})),ae(this,"getNumberOfAnnotations",((e,t)=>{const n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let i=0;for(const e in n)i+=n[e].length;return i})),ae(this,"addAnnotation",((e,t)=>{const{metadata:n}=e,{FrameOfReferenceUID:i,toolName:o}=n;t=t||i;const a=this.annotations;let r=a[t];r||(a[t]={},r=a[t]);let s=r[o];s||(r[o]=[],s=r[o]),s.push(e),me(e),Le(e),(e=>{e.data||(e.data={}),e.data.handles||(e.data.handles={}),e.data.handles.textBox||(e.data.handles.textBox={})})(e),(e=>{e.data||(e.data={}),e.data.cachedStats||(e.data.cachedStats={})})(e)})),ae(this,"removeAnnotation",(e=>{const{annotations:t}=this;for(const n in t){const i=t[n];for(const t in i){const n=i[t],o=n.findIndex((t=>t.annotationUID===e));-1!==o&&(n.splice(o,1),0===n.length&&delete i[t])}0===Object.keys(i).length&&delete t[n]}})),ae(this,"removeAnnotations",((e,t)=>{const n=this.annotations,i=[];if(!n[e])return i;if(t){const o=n[e][t];for(const e of o)this.removeAnnotation(e.annotationUID),i.push(e)}else for(const t in n[e]){const o=n[e][t];for(const e of o)this.removeAnnotation(e.annotationUID),i.push(e)}return i})),ae(this,"saveAnnotations",((e,t)=>{const n=this.annotations;if(e&&t){const i=n[e];if(!i)return;const o=i[t];return structuredClone(o)}if(e){const t=n[e];return structuredClone(t)}return structuredClone(n)})),ae(this,"restoreAnnotations",((e,t,n)=>{const i=this.annotations;if(t&&n){let o=i[t];o||(i[t]={},o=i[t]),o[n]=e}else t?i[t]=e:this.annotations=structuredClone(e)})),ae(this,"getAllAnnotations",(()=>Object.values(this.annotations).map((e=>Object.values(e))).flat(2))),ae(this,"getNumberOfAllAnnotations",(()=>{let e=0;const t=this.annotations;for(const n in t){const i=t[n];for(const t in i)e+=i[t].length}return e})),ae(this,"removeAllAnnotations",(()=>{const e=[];for(const t of this.getAllAnnotations())this.removeAnnotation(t.annotationUID),e.push(t);return e})),e||(e=ie.utilities.uuidv4()),this.annotations={},this.uid=e,ie.eventTarget.addEventListener(ie.Enums.Events.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}}const He=new Be("DEFAULT"),Fe=Be;var Ge=function(e){return e.Interaction="Interaction",e.HandlesUpdated="HandlesUpdated",e.StatsUpdated="StatsUpdated",e.InitialSetup="InitialSetup",e.Completed="Completed",e.InterpolationUpdated="InterpolationUpdated",e}(Ge||{});const $e=Ge;let qe={};const ze={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:qe,enabledElements:[],handleRadius:6};let je={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:qe,enabledElements:[],handleRadius:6};var Ke=function(e){return e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled",e}(Ke||{});const Ye=Ke,Xe=[Ye.Active,Ye.Passive,Ye.Enabled],Je=function(e){return je.toolGroups.filter((t=>{let{toolOptions:n}=t;const i=Object.keys(n);for(let t=0;t<i.length;t++)if(e===i[t]&&n[e]&&Xe.includes(n[e].mode))return!0;return!1}))};function Ze(e){const t=se.ANNOTATION_REMOVED;(0,ie.triggerEvent)(ie.eventTarget,t,e)}function Qe(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:$e.HandlesUpdated;const i=(0,ie.getEnabledElement)(t),{viewportId:o,renderingEngineId:a}=i,r=se.ANNOTATION_MODIFIED,s={annotation:e,viewportId:o,renderingEngineId:a,changeType:n};(0,ie.triggerEvent)(ie.eventTarget,r,s)}function et(e){nt({annotation:e})}function tt(e){nt({annotation:e,contourHoleProcessingEnabled:arguments.length>1&&void 0!==arguments[1]&&arguments[1]})}function nt(e){const t=se.ANNOTATION_COMPLETED;(0,ie.triggerEvent)(ie.eventTarget,t,e)}let it=He;function ot(){return it}function at(e){it=e}function rt(){it=He}function st(e,t){const n=ot(),i=n.getGroupKey(t);return n.getAnnotations(i,e)}function lt(){return ot().getAllAnnotations()}function dt(e){const{annotationUID:t,parentAnnotationUID:n}=e;if(!n)return;const i=pt(n),o=i.childAnnotationUIDs.indexOf(t);i.childAnnotationUIDs.splice(o,1),e.parentAnnotationUID=void 0}function ct(e,t){const{annotationUID:n}=e,{annotationUID:i}=t;dt(t),e.childAnnotationUIDs||(e.childAnnotationUIDs=[]),e.childAnnotationUIDs.includes(i)||(e.childAnnotationUIDs.push(i),t.parentAnnotationUID=n)}function ht(e){return e.parentAnnotationUID?pt(e.parentAnnotationUID):void 0}function ut(e){return e.childAnnotationUIDs?.map((e=>pt(e)))??[]}function gt(e,t){e.annotationUID||(e.annotationUID=ie.utilities.uuidv4());const n=ot();if(t instanceof HTMLDivElement){const i=n.getGroupKey(t);n.addAnnotation(e,i),function(e,t){const n=(0,ie.getEnabledElement)(t),{renderingEngine:i,viewportId:o}=n,a=se.ANNOTATION_ADDED,r={annotation:e,viewportId:o,renderingEngineId:i.id};(0,ie.triggerEvent)(ie.eventTarget,a,r)}(e,t)}else n.addAnnotation(e),function(e){const{toolName:t}=e.metadata,n=Je(t);if(!n.length)return;const i=[];n.forEach((t=>{t.viewportsInfo.forEach((t=>{const{renderingEngineId:n,viewportId:o}=t,{FrameOfReferenceUID:a}=(0,ie.getEnabledElementByIds)(o,n);e.metadata.FrameOfReferenceUID===a&&i.push(t)}))}));const o=se.ANNOTATION_ADDED,a={annotation:e};i.length?i.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;a.viewportId=n,a.renderingEngineId=t,(0,ie.triggerEvent)(ie.eventTarget,o,a)})):(0,ie.triggerEvent)(ie.eventTarget,o,a)}(e);return e.annotationUID}function mt(e,t){const n=ot(),i=n.getGroupKey(t);return n.getNumberOfAnnotations(i,e)}function vt(e){if(!e)return;const t=ot(),n=t.getAnnotation(e);n&&(n.childAnnotationUIDs?.forEach((e=>vt(e))),t.removeAnnotation(e),Ze({annotation:n,annotationManagerUID:t.uid}))}function pt(e){return ot().getAnnotation(e)}function ft(){const e=ot(),t=e.removeAllAnnotations();for(const n of t)Ze({annotation:n,annotationManagerUID:e.uid})}function wt(e,t){const n=ot(),i=n.getGroupKey(t),o=n.removeAnnotations(i,e);for(const e of o)Ze({annotation:e,annotationManagerUID:n.uid})}function It(e){let t=e;for(;t;)t.invalidated=!0,t=t.parentAnnotationUID?pt(t.parentAnnotationUID):void 0}var Et=function(e){return e.Labelmap="LABELMAP",e.Contour="CONTOUR",e.Surface="SURFACE",e}(Et||{});const Ct=Et,_t={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidthActive:1,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDashActive:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3},bt={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85},Tt=function(){return bt},Dt={renderFill:!0,fillAlpha:1};var St=E(610),yt=E.n(St),xt=E(474),Mt=E.n(xt),Ot=E(70),Pt=E.n(Ot),At=E(396),Rt=E.n(At),Lt=function(e){return e.POLYSEG_CONTOUR_TO_LABELMAP="polySeg/convertContourToVolumeLabelmap",e.POLYSEG_SURFACE_TO_LABELMAP="polySeg/convertSurfacesToVolumeLabelmap",e.POLYSEG_CONTOUR_TO_SURFACE="polySeg/convertContourToSurface",e.POLYSEG_LABELMAP_TO_SURFACE="polySeg/convertLabelmapToSurface",e.SURFACE_CLIPPING="surfaceClipping",e}(Lt||{});const Nt=Lt;function Ut(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return parseFloat(e[0]).toFixed(t)+","+parseFloat(e[1]).toFixed(t)+","+parseFloat(e[2]).toFixed(t)+","}let kt=!1;function Vt(){kt||(kt=!0,(0,ie.getWebWorkerManager)().registerWorker("polySeg",(()=>new Worker(new URL(E.p+E.u(985),E.b),{name:"polySeg",type:void 0})),{maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:2e3}}))}const Wt=(0,ie.getWebWorkerManager)(),Bt=new Map,Ht=new Map,Ft=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Nt.SURFACE_CLIPPING})};async function Gt(e,t,n){Vt();const i=t.getSlicesClippingPlanes?.();if(!i)return;const o=t.getSliceIndex();i.sort(((e,t)=>Math.abs(e.sliceIndex-o)-Math.abs(t.sliceIndex-o))),Ft(ie.eventTarget,0),await async function(e){const t=e.filter((e=>!Ht.has(e.id)));if(!t.length)return;(await Wt.executeTask("polySeg","getSurfacesAABBs",{surfacesInfo:t},{callbacks:[e=>{let{progress:t}=e;Ft(ie.eventTarget,t)}]})).forEach(((e,t)=>{Ht.set(t,e)}))}(e);const a=new Map;e.forEach((e=>{a.set(e.id,Ht.get(e.id))}));const r=t.getCamera();return await Wt.executeTask("polySeg","cutSurfacesIntoPlanes",{surfacesInfo:e,planesInfo:i,surfacesAABB:a},{callbacks:[e=>{let{progress:t}=e;Ft(ie.eventTarget,t)},e=>{let{sliceIndex:i,polyDataResults:o}=e;o.forEach(((e,o)=>{const a=`${n}_${o}`,s=function(e,t,n){return`${e.id}-${Ut(t)}-${n}`}(t,r.viewPlaneNormal,i);!function(e,t,n){const{points:i,lines:o,numberOfCells:a}=n;let r=Bt.get(e);r||(r=new Map,Bt.set(e,r)),r.set(t,{points:i,lines:o,numberOfCells:a})}(a,s,e)}))}]}).catch((e=>{console.error(e)})),Ft(ie.eventTarget,1),Bt}function $t(e){if("volumeId"in e){if(!ie.cache.getVolume(e.volumeId))throw new Error(`volumeId of ${e.volumeId} not found in cache, you should load and cache volume before adding segmentation`)}else{if(!("imageIds"in e))throw new Error("The segmentationInput.representationData is undefined, please provide a valid representationData");if(!e.imageIds)throw new Error("The segmentationInput.representationData.imageIds is undefined, please provide a valid representationData.imageIds for stack data")}}function qt(e){$t(e)}const zt=new Map([[Ct.Labelmap,new Set([Ct.Surface,Ct.Contour])],[Ct.Contour,new Set([Ct.Labelmap,Ct.Surface])],[Ct.Surface,new Set([Ct.Labelmap])]]);function jt(e){const t=Wu(e),{type:n,polySeg:i}=t;if(!i||!i.enabled)return!1;const{representationData:o}=Nu(t.segmentationId),a=function(e){const t=[];return Object.keys(e).forEach((n=>{const i=e[n];let o;if(n===Ct.Labelmap&&(o=qt),o)try{o(i),t.push(n)}catch(e){console.warn(`Validation failed for labelmap of type ${n}`)}else t.push(n)})),t}(o);return a.some((e=>async function(e,t){return zt.get(e)?.has(t)||!1}(e,n)))}const Kt=function(e){let{segmentationId:t,type:n,data:i}=e;const o=Nu(t);switch(o.representationData[n]&&console.warn(`Representation data of type ${n} already exists for segmentation ${t}, overwriting it.`),n){case Ct.Labelmap:case Ct.Contour:case Ct.Surface:i&&(o.representationData[n]=i);break;default:throw new Error(`Invalid representation type ${n}`)}};function Yt(e,t){const{imageIds:n}=e,{volumeId:i}=e;return!(!i||n)||!(n&&!i)&&t instanceof ie.VolumeViewport}const Xt=new Map,Jt=e=>{const t=Xt.get(e);t&&(t.isDirty=!0)};function Zt(e){const t=function(e){const t=Xt.get(e);return t&&!t.isDirty?t.indices:null}(e);if(t)return t;const n=Nu(e);if(!n)throw new Error(`No segmentation found for segmentationId ${e}`);let i;switch(n.type){case Ct.Labelmap:i=function(e,t){const n=e.representationData[Ct.Labelmap],i=new Set;return Yt(n)?function(e,t){ie.cache.getVolume(t).voxelManager.forEach((t=>{let{value:n}=t;0!==n&&e.add(n)}))}(i,t):function(e,t){t.forEach((t=>{ie.cache.getImage(t).voxelManager.getScalarData().forEach((t=>{0!==t&&e.add(t)}))}))}(i,n.imageIds),Array.from(i).map(Number).sort(((e,t)=>e-t))}(n,e);break;case Ct.Contour:i=function(e){const{annotationUIDsMap:t,geometryIds:n}=e.representationData.CONTOUR||{};if(!n)throw new Error(`No geometryIds found for segmentationId ${e.segmentationId}`);const i=new Set([...t.keys()]);return n.forEach((e=>{const t=ie.cache.getGeometry(e);i.add(t.data.getSegmentIndex())})),Array.from(i).sort(((e,t)=>e-t))}(n);break;case Ct.Surface:i=function(e){const t=e.representationData.SURFACE?.geometryIds??[];return Array.from(t.keys()).map(Number).sort(((e,t)=>e-t))}(n);break;default:throw new Error(`Unsupported segmentation type: ${n.type}`)}return Xt.set(e,{indices:i,isDirty:!1}),i}function Qt(e){const t={segmentationId:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_REMOVED,t)}function en(e){const t={segmentationRepresentationUID:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_REPRESENTATION_REMOVED,t)}function tn(e){const t={segmentationRepresentationUID:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_REPRESENTATION_MODIFIED,t)}function nn(e){let t;t=e?[e]:Uu().map((e=>{let{segmentationId:t}=e;return t})),t.forEach((e=>{const t={segmentationId:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_MODIFIED,t)}))}function on(e,t){const n={segmentationId:e,modifiedSlicesToUse:t};Jt(e),(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_DATA_MODIFIED,n)}const an=function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)},rn=function(e,t,n){let i,o,a,r,s,l,d=0,c=!1,h=!1,u=!0;const g=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){const n=i,a=o;return i=o=void 0,d=t,r=e.apply(a,n),r}function v(e,t){return g?window.requestAnimationFrame(e):setTimeout(e,t)}function p(e){const n=e-l;return void 0===l||n>=t||n<0||h&&e-d>=a}function f(){const e=Date.now();if(p(e))return w(e);s=v(f,function(e){const n=e-d,i=t-(e-l);return h?Math.min(i,a-n):i}(e))}function w(e){return s=void 0,u&&i?m(e):(i=o=void 0,r)}function I(){const e=Date.now(),n=p(e);for(var a=arguments.length,u=new Array(a),g=0;g<a;g++)u[g]=arguments[g];if(i=u,o=this,l=e,n){if(void 0===s)return function(e){return d=e,s=v(f,t),c?m(e):r}(l);if(h)return s=v(f,t),m(l)}return void 0===s&&(s=v(f,t)),r}return t=Number(t)||0,an(n)&&(c=Boolean(n.leading),h="maxWait"in n,a=h?Math.max(Number(n.maxWait)||0,t):a,u="trailing"in n?Boolean(n.trailing):u),I.cancel=function(){void 0!==s&&function(e){if(g)return window.cancelAnimationFrame(e);clearTimeout(e)}(s),d=0,i=l=o=s=void 0},I.flush=function(){return void 0===s?r:w(Date.now())},I.pending=function(){return void 0!==s},I},sn=new Map;async function ln(e,t,n,i){Vt();const o=await n();Kt({segmentationId:e,type:t,data:o}),sn.has(e)||sn.set(e,[]);const a=sn.get(e);return a.includes(t)||a.push(t),function(e){e._debouncedUpdateFunction=t=>{dn(t,e)},ie.eventTarget.removeEventListener(se.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction),ie.eventTarget.addEventListener(se.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction)}(i),nn(e),o}const dn=rn(((e,t)=>{const n=e.detail.segmentationId,i=sn.get(n);i&&i.length&&(t(n),i.length&&nn(n))}),300),cn=(0,ie.getWebWorkerManager)(),hn=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Nt.POLYSEG_CONTOUR_TO_SURFACE})};function un(e,t){if(!e)throw new Error("addColorLUT: colorLUT is required");ie.utilities.isEqual(e[0],[0,0,0,0])||(console.warn("addColorLUT: [0, 0, 0, 0] color is not provided for the background color (segmentIndex =0), automatically adding it"),e.unshift([0,0,0,0])),ng(e,t)}function gn(e,t){const n=Wu(e);if(!n)throw new Error(`setColorLUT: could not find segmentation representation with UID ${e}`);if(!eg(t))throw new Error(`setColorLUT: could not find colorLUT with index ${t}`);n.colorLUTIndex=t,tn(e)}function mn(e,t){const n=Wu(e);if(!n)throw new Error(`segmentation representation with UID ${e} does not exist`);const{colorLUTIndex:i}=n,o=eg(i);let a=o[t];if(!a){if("number"!=typeof t)throw new Error(`Can't create colour for LUT index ${t}`);a=o[t]=[0,0,0,0]}return a}function vn(e,t,n){const i=mn(e,t);for(let e=0;e<n.length;e++)i[e]=n[e];tn(e)}async function pn(e,t){let n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.segmentationRepresentationUID&&(n=Wu(i.segmentationRepresentationUID));const o=Nu(e),a=new Map,r=Object.keys(t).map((async e=>{const i=t[e],r=i.segmentIndex,s=n;if(mn(n.segmentationRepresentationUID,r).slice(0,3),!s)throw new Error("No color found for segment index, unable to create surface");const l={id:`segmentation_${o.segmentationId}_surface_${r}`,color:s,frameOfReferenceUID:"test-frameOfReferenceUID",data:{points:i.data.points,polys:i.data.polys}},d=l.id;return a.set(r,d),ie.geometryLoader.createAndCacheGeometry(d,{type:ie.Enums.GeometryType.SURFACE,geometryData:l})}));return await Promise.all(r),{geometryIds:a}}const fn=(0,ie.getWebWorkerManager)(),wn=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Nt.POLYSEG_LABELMAP_TO_SURFACE})};async function In(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Nu(e);if(!n?.representationData?.LABELMAP)return void console.warn("Only support surface update from labelmaps");const i=Yt(n.representationData.LABELMAP),o=n.representationData.LABELMAP,a=t.segmentIndices||Zt(e),r=a.map((e=>{const t=async function(e,t){let n;if(arguments.length>2&&void 0!==arguments[2]&&!arguments[2]){const{imageIds:t}=e;({volumeId:n}=await Mu({imageIds:t}))}else n=e.volumeId;const i=ie.cache.getVolume(n),o=i.voxelManager.getCompleteScalarDataArray(),{dimensions:a,spacing:r,origin:s,direction:l}=i;wn(ie.eventTarget,0);const d=await fn.executeTask("polySeg","convertLabelmapToSurface",{scalarData:o,dimensions:a,spacing:r,origin:s,direction:l,segmentIndex:t},{callbacks:[e=>{wn(ie.eventTarget,e)}]});return wn(ie.eventTarget,1),d}(o,e,i);return t})),s=await Promise.allSettled(r),l=s.filter((e=>"rejected"===e.status));if(l.length>0)throw console.error(l),new Error("Failed to convert labelmap to surface");return s.map(((e,t)=>{if("fulfilled"===e.status)return{segmentIndex:a[t],data:e.value}})).filter(Boolean)}function En(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ln(e,Ct.Surface,(()=>async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.segmentIndices?.length?t.segmentIndices:Zt(e);let i;const o=Nu(e),a=o.representationData;try{a.CONTOUR?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Nu(e).representationData.CONTOUR,i=(t.segmentIndices||Zt(e)).map((async e=>{const t=await async function(e,t){const{annotationUIDsMap:n}=e,i=[],o=[],a=n.get(t);for(const e of a){const t=pt(e),{polyline:n}=t.data.contour;o.push(n.length),n.forEach((e=>i.push(...e)))}hn(ie.eventTarget,0);const r=await cn.executeTask("polySeg","convertContourToSurface",{polylines:i,numPointsArray:o},{callbacks:[e=>{hn(ie.eventTarget,e)}]});return hn(ie.eventTarget,1),r}(n,e);return{segmentIndex:e,data:t}}));return await Promise.all(i)}(e,{segmentIndices:n,...t}):a.LABELMAP&&(i=await In(o.segmentationId,{segmentIndices:n,...t}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return await pn(e,i,t)}(e,t)),(()=>async function(e){const t=await In(e);if(!t)return;const n=Nu(e),i=Zt(e);if(!i.length)return n.representationData.SURFACE.geometryIds.forEach((e=>{const t=ie.cache.getGeometry(e).data;t.setPoints([]),t.setPolys([])})),void nn(e);const o=t.map((t=>{let{data:o,segmentIndex:a}=t;const r=`segmentation_${e}_surface_${a}`,s=ie.cache.getGeometry(r);if(!s)return qu(e).map((t=>zu(t).map((t=>{if(t.type===Ct.Surface)return n.representationData.SURFACE.geometryIds.set(a,r),pn(e,[{segmentIndex:a,data:o}],{segmentationRepresentationUID:t.segmentationRepresentationUID})}))));if(i.includes(a)){const e=s.data;e.setPoints(o.points),e.setPolys(o.polys)}else{const e=s.data;e.setPoints([]),e.setPolys([])}}));await Promise.all(o),nn(e)}(e)))}const Cn={render:async function(e,t){const{colorLUTIndex:n,segmentationId:i,segmentationRepresentationUID:o}=t,a=Nu(i);if(!a)return;if(!(e instanceof ie.VolumeViewport3D))throw new Error("Surface rendering is only supported in 3D viewports, if you need to visualize the surface cuts in 2D viewports, you can use the Contour representation, see polySeg converters");let r=a.representationData[Ct.Surface];if(!r&&jt(o)&&(r=await En(i,{segmentationRepresentationUID:o}),!r))throw new Error(`No Surface data found for segmentationId ${i}.`);const{geometryIds:s}=r;s?.size||console.warn(`No Surfaces found for segmentationId ${i}. Skipping render.`);const l=eg(n),d=[];s.forEach(((t,n)=>{const i=ie.cache.getGeometry(t);if(!i?.data)return void console.warn(`No Surfaces found for geometryId ${t}. Skipping render.`);const a=i.data,r=l[n];a.setColor(r.slice(0,3)),function(e,t,n){const i=function(e,t){return`${e}_${t}`}(n,t.id),o=(0,ie.getEnabledElement)(e),{viewport:a}=o,r=a.getActor(i)?.actor;if(r){const e=r.getMapper(),n=e.getInputData(),i=t.getPoints(),o=t.getPolys(),s=n.getPoints().getData(),l=n.getPolys().getData();if(i.length===s.length&&o.length===l.length)return;const d=Pt().newInstance();d.getPoints().setData(i,3);const c=Rt().newInstance({values:Float32Array.from(o)});return d.setPolys(c),e.setInputData(d),e.modified(),void setTimeout((()=>{a.getRenderer().resetCameraClippingRange()}),0)}const s=t.getPoints(),l=t.getPolys(),d=t.getColor(),c=Pt().newInstance();c.getPoints().setData(s,3);const h=Rt().newInstance({values:Float32Array.from(l)});c.setPolys(h);const u=yt().newInstance({});u.setInputData(c);const g=Mt().newInstance();g.setMapper(u),g.getProperty().setColor(d[0]/255,d[1]/255,d[2]/255),g.getProperty().setLineWidth(2),a.addActor({actor:g,uid:i,clippingFilter:void 0}),a.resetCamera(),a.render(),setTimeout((()=>{a.getRenderer().resetCameraClippingRange()}),0)}(e.element,a,o),d.push(a)})),e.render()},removeRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;(function(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=i.getActors().map((e=>{let{uid:n}=e;return n.startsWith(t)?n:void 0})).filter(Boolean);i.removeActors(o)})(o.element,t),Zu(t),n&&o.render()}},_n=new Map;function bn(e){return _n.get(e)}function Tn(e,t){_n.set(e,t)}function Dn(e,t){const n=new Map;for(const[i,o]of e){const e=i.split("_")[1];for(const[i,a]of o){if(!a)continue;const i=Number(e)||t?.get(e);i&&(n.has(i)||n.set(i,[]),n.get(i).push(a))}}return n}var Sn=E(976);const{CalibrationTypes:yn}=ie.Enums,xn="px",Mn=[1],On=["3,3"],Pn=["4,3"],An={0:"px",1:"percent",2:"dB",3:"cm",4:"seconds",5:"hertz",6:"dB/seconds",7:"cm/sec",8:"cm²",9:"cm²/s",12:"degrees"},Rn="²",Ln=(e,t)=>{const{calibration:n,hasPixelSpacing:i}=e;let o=i?"mm":xn,a=o+Rn,r=1,s="";if(!n||!n.type&&!n.sequenceOfUltrasoundRegions)return{lengthUnits:o,areaUnits:a,scale:r};if(n.type===yn.UNCALIBRATED)return{lengthUnits:xn,areaUnits:xn+Rn,scale:r};if(n.sequenceOfUltrasoundRegions){let e,i;if(Array.isArray(t)&&2===t.length)[e,i]=t;else if("function"==typeof t){const n=t();e=n[0],i=n[1]}let l=n.sequenceOfUltrasoundRegions.filter((t=>e[0]>=t.regionLocationMinX0&&e[0]<=t.regionLocationMaxX1&&e[1]>=t.regionLocationMinY0&&e[1]<=t.regionLocationMaxY1&&i[0]>=t.regionLocationMinX0&&i[0]<=t.regionLocationMaxX1&&i[1]>=t.regionLocationMinY0&&i[1]<=t.regionLocationMaxY1));if(!l?.length)return{lengthUnits:o,areaUnits:a,scale:r};if(l=l.filter((e=>Mn.includes(e.regionDataType)&&On.includes(`${e.physicalUnitsXDirection},${e.physicalUnitsYDirection}`))),!l.length)return{lengthUnits:xn,areaUnits:xn+Rn,scale:r};const d=l[0],c=Math.abs(d.physicalDeltaX),h=Math.abs(d.physicalDeltaY);if(!ie.utilities.isEqual(c,h,.001))return{lengthUnits:xn,areaUnits:xn+Rn,scale:r};r=1/c,s="US Region",o=An[d.physicalUnitsXDirection]||"unknown",a=o+Rn}else n.scale&&(r=n.scale);return[yn.ERMF,yn.USER,yn.ERROR,yn.PROJECTION].includes(n?.type)&&(s=n.type),{lengthUnits:o+(s?` ${s}`:""),areaUnits:a+(s?` ${s}`:""),scale:r}},Nn=(e,t)=>{const[n]=t,{calibration:i}=e;let o=["raw"],a=[null],r="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:o,values:a};if(i.sequenceOfUltrasoundRegions){const e=i.sequenceOfUltrasoundRegions.filter((e=>Mn.includes(e.regionDataType)&&Pn.includes(`${e.physicalUnitsXDirection},${e.physicalUnitsYDirection}`)));if(!e?.length)return{units:o,values:a};const t=e.find((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1));if(!t)return{units:o,values:a};const{referencePixelX0:s=0,referencePixelY0:l=0}=t,{physicalDeltaX:d,physicalDeltaY:c}=t,h=(n[1]-t.regionLocationMinY0-l)*c;r="US Region",a=[(n[0]-t.regionLocationMinX0-s)*d,h],o=[An[t.physicalUnitsXDirection],An[t.physicalUnitsYDirection]]}return{units:o,values:a,calibrationType:r}},Un=e=>e.calibration?.aspect||1;function kn(e,t){let n=e;const i=t?.numDimensions||2,o=3===i;if(!Array.isArray(e[0])){const t=e,a=t.length/i;n=new Array(t.length/i);for(let e=0,r=a;e<r;e++)n[e]=[t[e*i],t[e*i+1]],o&&n[e].push(t[e*i+2])}let a=1/0,r=1/0,s=-1/0,l=-1/0,d=1/0,c=-1/0;for(let e=0,t=n.length;e<t;e++){const[t,i,h]=n[e];a=a<t?a:t,r=r<i?r:i,s=s>t?s:t,l=l>i?l:i,o&&(d=d<h?d:h,c=c>h?c:h)}return o?{minX:a,maxX:s,minY:r,maxY:l,minZ:d,maxZ:c}:{minX:a,maxX:s,minY:r,maxY:l}}const Vn=function(e,t){t||(t=(0,ie.getRenderingEngines)().find((t=>t.getViewports().find((t=>t.id===e))))?.id);const n=je.toolGroups.filter((n=>n.viewportsInfo.some((n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)))));if(n.length){if(n.length>1)throw new Error(`Multiple tool groups found for renderingEngineId: ${t} and viewportId: ${e}. You should only\n have one tool group per viewport in a renderingEngine.`);return n[0]}};function Wn(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;const i=(0,ie.getEnabledElement)(e);if(!i)throw new Error("getAnnotationNearPoint: enabledElement not found");return Bn(i,t,n)}function Bn(e,t,n){const{renderingEngineId:i,viewportId:o}=e,a=Vn(o,i);if(!a)return null;const{_toolInstances:r}=a;for(const i in r){const o=Hn(r[i],e,t,n);if(o)return o}return null}function Hn(e,t,n,i){const{viewport:o}=t,a=st(e.constructor.toolName,o?.element),r=o?.getCurrentImageId?.();if(a?.length){const{element:o}=t.viewport;for(const t of a){const a=t.metadata?.referencedImageId;if(!(r&&a&&r!==a||!e.isPointNearTool)&&(e.isPointNearTool(o,t,n,i,"")||e.getHandleNearImagePoint(o,t,n,i)))return t}}return null}const Fn=function(e,t,n){let i=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return an(n)&&(i="leading"in n?Boolean(n.leading):i,o="trailing"in n?Boolean(n.trailing):o),rn(e,t,{leading:i,trailing:o,maxWait:t})};const Gn=function(e,t,n){return Math.min(Math.max(t,e),n)},{calibratedPixelSpacingMetadataProvider:$n}=ie.utilities;function qn(e,t,n){"number"==typeof n&&(n={type:ie.Enums.CalibrationTypes.USER,scale:n}),$n.add(e,n),t.getStackViewports().forEach((t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)}))}function zn(e,t){if(je.svgNodeCache[e])return je.svgNodeCache[e][t]?je.svgNodeCache[e][t].domRef:void 0}function jn(e,t,n,i){if(!je.svgNodeCache[t])return null;je.svgNodeCache[t][i]={touched:!0,domRef:n},e.appendChild(n)}function Kn(e,t){je.svgNodeCache[e]&&je.svgNodeCache[e][t]&&(je.svgNodeCache[e][t].touched=!0)}function Yn(e,t){je.svgNodeCache[t]&&Object.keys(je.svgNodeCache[t]).forEach((n=>{const i=je.svgNodeCache[t][n];!i.touched&&i.domRef&&(e.removeChild(i.domRef),delete je.svgNodeCache[t][n])}))}const Xn=function(e,t){const n=function(e){const t=(0,ie.getEnabledElement)(e),{viewportId:n,renderingEngineId:i}=t,o=`${n}:${i}`,a=function(e){const t=e.querySelector(".viewport-element"),n=t?.querySelector(":scope > .svg-layer");return n}(e);return Object.keys(je.svgNodeCache[o]).forEach((e=>{je.svgNodeCache[o][e].touched=!1})),{svgLayerElement:a,svgNodeCacheForCanvas:je.svgNodeCache,getSvgNode:zn.bind(this,o),appendNode:jn.bind(this,a,o),setNodeTouched:Kn.bind(this,o),clearUntouched:Yn.bind(this,a,o)}}(e);t(n),n.clearUntouched()};function Jn(e,t){const n=(0,ie.getEnabledElement)(e),{renderingEngineId:i,viewportId:o}=n,a=Vn(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n];if(i&&t.includes(i.mode)){const e=a.getToolInstance(n);r.push(e)}}return r}const{Active:Zn,Passive:Qn,Enabled:ei}=Ye,ti=new class{constructor(){ae(this,"hasBeenDestroyed",void 0),ae(this,"_needsRender",new Set),ae(this,"_animationFrameSet",!1),ae(this,"_animationFrameHandle",null),ae(this,"_viewportElements",void 0),ae(this,"_renderFlaggedViewports",(()=>{this._throwIfDestroyed();const e=Array.from(this._viewportElements.values());for(let t=0;t<e.length;t++){const n=e[t];if(this._needsRender.has(n)&&(this._triggerRender(n),this._needsRender.delete(n),0===this._needsRender.size))break}this._animationFrameSet=!1,this._animationFrameHandle=null,this._render()})),this._viewportElements=new Map}addViewportElement(e,t){this._viewportElements.set(e,t)}removeViewportElement(e,t){this._viewportElements.delete(e),this._needsRender.delete(t),this._reset()}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setAllViewportsToBeRenderedNextFrame(){[...this._viewportElements.values()].forEach((e=>{this._needsRender.add(e)})),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){const t=[...this._viewportElements.values()];e.forEach((e=>{-1!==t.indexOf(e)&&this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}_triggerRender(e){const t=(0,ie.getEnabledElement)(e);if(!t)return;if(!(0,ie.getRenderingEngine)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");const n=Jn(e,[Zn,Qn,ei]),{renderingEngineId:i,viewportId:o}=t,a={element:e,renderingEngineId:i,viewportId:o};Xn(e,(i=>{let o=!1;n.forEach((e=>{if(e.renderAnnotation){const n=e.renderAnnotation(t,i);o=o||n}})),o&&(0,ie.triggerEvent)(e,se.ANNOTATION_RENDERED,{...a})}))}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}},ni=function(e){ti.renderViewport(e)};function ii(e){e.length&&e.forEach((e=>{const t=(0,ie.getEnabledElementByViewportId)(e);if(!t)return void console.warn(`Viewport not available for ${e}`);const{viewport:n}=t;if(!n)return void console.warn(`Viewport not available for ${e}`);const i=n.element;ni(i)}))}const oi=ii,ai=function(e){return je.toolGroups.find((t=>t.id===e))},ri=function(e){e.forEach((e=>{const t=ai(e);t?t.getViewportsInfo().forEach((e=>{const{renderingEngineId:t,viewportId:n}=e,i=(0,ie.getRenderingEngine)(t);if(!i)return void console.warn(`RenderingEngine not available for ${t}`);const o=i.getViewport(n);ni(o.element)})):console.warn(`ToolGroup not available for ${e}`)}))};function si(e,t){if(!(0,ie.getEnabledElement)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof ie.StackViewport&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{volumeId:n,delta:i,scrollSlabs:o}=t;e instanceof ie.VolumeViewport?function(e,t,n){const i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],{numScrollSteps:o,currentStepIndex:a,sliceRangeInfo:r}=ie.utilities.getVolumeViewportScrollInfo(e,t,i);if(!r)return;const{sliceRange:s,spacingInNormalDirection:l,camera:d}=r,{focalPoint:c,viewPlaneNormal:h,position:u}=d,{newFocalPoint:g,newPosition:m}=ie.utilities.snapFocalPointToSlice(c,u,s,h,l,n);e.setCamera({focalPoint:g,position:m}),e.render();const v=a+n,p={volumeId:t,viewport:e,delta:n,desiredStepIndex:v,currentStepIndex:a,numScrollSteps:o,currentImageId:e.getCurrentImageId()};(v>o||v<0)&&e.getCurrentImageId()?ie.utilities.triggerEvent(ie.eventTarget,ie.EVENTS.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS,p):ie.utilities.triggerEvent(ie.eventTarget,ie.EVENTS.VOLUME_VIEWPORT_SCROLL,p)}(e,n,i,o):e.scroll(i,t.debounceLoading,t.loop)}const li=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageIndex:n,debounceLoading:i,volumeId:o}=t,a=(0,ie.getEnabledElement)(e);if(!a)throw new Error("Element has been disabled");const{viewport:r}=a,{imageIndex:s,numberOfSlices:l}=function(e,t){return e instanceof ie.StackViewport?{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()}:{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getSliceIndex()}}(r,i),d=function(e,t){return Gn(t,0,e-1)}(l,n);si(r,{delta:d-s,debounceLoading:i,volumeId:o})},{EPSILON:di}=ie.CONSTANTS;function ci(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=1/0,o=n?-1/0:0,a=1/0,r=n?-1/0:0,s=1/0,l=n?-1/0:0;const d=3===e[0]?.length;for(let t=0;t<e.length;t++){const n=e[t];i=Math.min(n[0],i),o=Math.max(n[0],o),a=Math.min(n[1],a),r=Math.max(n[1],r),d&&(s=Math.min(n[2]??s,s),l=Math.max(n[2]??l,l))}return t?(i=Math.max(n?t[0]+di:0,i),o=Math.min(n?t[0]-di:t[0]-1,o),a=Math.max(n?t[1]+di:0,a),r=Math.min(n?t[1]-di:t[1]-1,r),d&&3===t.length&&(s=Math.max(n?t[2]+di:0,s),l=Math.min(n?t[2]-di:t[2]-1,l))):n||(i=Math.max(0,i),o=Math.min(1/0,o),a=Math.max(0,a),r=Math.min(1/0,r),d&&(s=Math.max(0,s),l=Math.min(1/0,l))),d?[[i,o],[a,r],[s,l]]:[[i,o],[a,r],null]}function hi(e,t){return ci(e,t,!1)}function ui(e,t){return ci(e,t,!0)}const{transformWorldToIndex:gi}=ie.utilities;function mi(e,t,n){const[i,o]=e,a=Sn.vec3.fromValues((i[0]+o[0])/2,(i[1]+o[1])/2,(i[2]+o[2])/2),r=Sn.vec3.distance(i,o)/2;if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=function(e,t,n,i,o){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),d=Sn.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),c=Sn.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=Sn.vec3.create();Sn.vec3.cross(h,d,c);const u=Sn.vec3.create(),g=Sn.vec3.create();Sn.vec3.scaleAndAdd(u,r,c,o),Sn.vec3.scaleAndAdd(g,a,c,-o),Sn.vec3.scaleAndAdd(u,u,h,-o),Sn.vec3.scaleAndAdd(g,g,h,o);return{boundsIJK:hi([gi(e,u),gi(e,g),...n.map((t=>gi(e,t)))],s),topLeftWorld:u,bottomRightWorld:g}}(t,n,e,0,r);return{boundsIJK:s,centerWorld:a,radiusWorld:r,topLeftWorld:l,bottomRightWorld:d}}class vi{static imageIdToFrames(e){const t=e.match(this.frameRangeExtractor);if(!t||!t[2])return null;const n=t[2].split("-").map((e=>Number(e)));return 1===n.length?n[0]:n}static framesToString(e){return Array.isArray(e)?`${e[0]}-${e[1]}`:String(e)}static framesToImageId(e,t){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const i=this.framesToString(t);return e.replace(this.frameRangeExtractor,`${n[1]}${i}`)}static setFrameRange(e,t,n){const{referencedImageId:i}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(i,t);const o={...n,annotation:e};(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_MODIFIED,o)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}ae(vi,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const{isEqual:pi}=ie.utilities;function fi(e){const{metadata:t}=e;return(0,ie.getEnabledElements)().filter((e=>{if(e.FrameOfReferenceUID===t.FrameOfReferenceUID){const n=e.viewport,{viewPlaneNormal:i,viewUp:o}=n.getCamera();return pi(i,t.viewPlaneNormal)&&(!t.viewUp||pi(o,t.viewUp))}})).map((e=>e.viewport))}function wi(e){const t=fi(e);return t.length?t[0]:void 0}function Ii(e,t,n,i){const o=e.getViewReference(),{viewPlaneNormal:a,FrameOfReferenceUID:r}=o,s={annotationUID:i?.annotationUID||ie.utilities.uuidv4(),data:{handles:{points:n}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:t,viewPlaneNormal:a,FrameOfReferenceUID:r,referencedImageId:Ei(e,n[0],a),...i}};return gt(s,e.element),s}function Ei(e,t,n){let i;if(e instanceof ie.StackViewport)i=Ci(e,t,n);else{if(!(e instanceof ie.BaseVolumeViewport))throw new Error("getReferencedImageId: viewport must be a StackViewport or BaseVolumeViewport");{const o=function(e){const t=e.getViewReferenceId?.();if(t)return t;if(e instanceof ie.BaseVolumeViewport)return`volumeId:${function(e){const t=e.getActors();if(t)return t.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid}(e)}`;throw new Error("getTargetId: viewport must have a getTargetId method")}(e),a=ie.utilities.getVolumeId(o),r=ie.cache.getVolume(a);i=ie.utilities.getClosestImageId(r,t,n)}}return i}function Ci(e,t,n){const i=e.getImageIds();if(!i||!i.length)return;const o=i.map((e=>{const{imagePositionPatient:i}=ie.metaData.get("imagePlaneModule",e),o=function(e,t,n){const i=Sn.vec3.create();Sn.vec3.sub(i,e,t);const o=Sn.vec3.dot(i,n);return Math.abs(o)}(t,i,n);return{imageId:e,distance:o}}));return o.sort(((e,t)=>e.distance-t.distance)),o[0].imageId}function _i(e,t){const{viewPlaneNormal:n}=e.metadata,{viewPlaneNormal:i}=t.metadata,o=Sn.vec3.dot(n,i);if(!Sn.glMatrix.equals(1,Math.abs(o)))return!1;const{polyline:a}=e.data.contour,{polyline:r}=t.data.contour,s=Sn.vec3.dot(n,a[0]),l=Sn.vec3.dot(n,r[0]);return Sn.glMatrix.equals(s,l)}function bi(e,t,n){let i=-1;if(t.forEach(((t,n)=>{i>=0||t.a==e.b&&(i=n)})),i>=0){const e=t[i];return t.splice(i,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:bi(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function Ti(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const i=bi(n,e,t);if(0==i.remainingLines.length)return[{type:i.type,contourPoints:i.contourPoints}];{const e=Ti(i.remainingLines);return e.push({type:i.type,contourPoints:i.contourPoints}),e}}function Di(e){return Ti(e)}const Si={findContours:Ti,findContoursFromReducedSet:Di};function yi(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.getPoints(),i=e.getLines(),o=new Array(n.getNumberOfPoints()).fill(0).map(((e,t)=>n.getPoint(t).slice())),a=new Array(i.getNumberOfCells()).fill(0).map(((e,t)=>{const n=i.getCell(3*t).slice();return{a:n[0],b:n[1]}}));if(t)return{points:o,lines:a};const r=[];for(const[e,t]of o.entries()){const n=r.findIndex((e=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]));if(n>=0)a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)));else{const n=r.length;r.push(t),a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)))}}return{points:r,lines:a.filter((e=>e.a!==e.b))}}const xi={processContourHoles:function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=e.filter((e=>"CLOSED_PLANAR"!==e.type)),o=e.filter((e=>"CLOSED_PLANAR"===e.type)),a=[];let r=[];return o.forEach(((e,n)=>{const i=[];o.forEach(((o,a)=>{n!=a&&function(e,t,n){const i=[];e.contourPoints.forEach((e=>{i.push([n[e][0],n[e][1]])}));let o=0;return t.contourPoints.forEach((e=>{((e,t)=>{const n=e[0],i=e[1];let o=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){const r=t[e][0],s=t[e][1],l=t[a][0],d=t[a][1];s>i!=d>i&&n<(l-r)*(i-s)/(d-s)+r&&(o=!o)}return o})([n[e][0],n[e][1]],i)||o++})),0===o}(e,o,t)&&i.push(a)})),i.length>0?a.push({contour:e,holes:i}):r.push(n)})),n&&(a.forEach((e=>{e.contour.type="CLOSEDPLANAR_XOR",i.push(e.contour),e.holes.forEach((e=>{o[e].type="CLOSEDPLANAR_XOR",i.push(o[e]),r=r.filter((t=>t!==e))}))})),r.forEach((e=>{i.push(o[e])}))),i}};var Mi=E(543),Oi=E.n(Mi),Pi=E(785),Ai=E.n(Pi),Ri=E(283),Li=E.n(Ri);const{Labelmap:Ni}=Ct;function Ui(e){let{segmentations:t}=e;const{representationData:n,segments:i=[0,1]}=t,{volumeId:o}=n[Ni],a=ie.cache.getVolume(o);if(!a)return void console.warn(`No volume found for ${o}`);const r=a.dimensions[2],s=a.imageData.getPointData().getScalars().getData(),l=a.dimensions[0]*a.dimensions[1];for(let e=0;e<r;e++)for(let t=0;t<a.dimensions[1];t++){const n=t*a.dimensions[0]+e*l;s[n]=0,s[n+a.dimensions[0]-1]=0}const d=[],{FrameOfReferenceUID:c}=a.metadata,h=i.length;for(let e=0;e<h;e++){const t=i[e];if(!t)continue;const n=[],o=Ai().newInstance({name:"Scalars",numberOfComponents:1,size:l*r,dataType:"Uint8Array"}),{containedSegmentIndices:h}=t;for(let t=0;t<r;t++){if(ki(t,s,l,e))continue;const i=t*l;try{for(let t=0;t<l;t++){const n=s[t+i];n===e||h?.has(n)?o.setValue(t+i,1):o.setValue(t,0)}const r=Oi().newInstance({slice:t}),d=Li().newInstance();d.shallowCopy(a.imageData),d.getPointData().setScalars(o),r.setInputData(d);const u=[1];r.setContourValues(u),r.setMergePoints(!1);const g=yi(r.getOutputData());if(g.points?.length){const e=Di(g.lines);n.push({contours:e,polyData:g,FrameNumber:t+1,sliceIndex:t,FrameOfReferenceUID:c})}}catch(e){console.warn(t),console.warn(e)}}const u={FrameOfReferenceUID:c},g={label:t.label,color:t.color,metadata:u,sliceContours:n};d.push(g)}return d}function ki(e,t,n,i){const o=e*n,a=o+n;for(let e=o;e<a;e++)if(t[e]===i)return!1;return!0}class Vi{constructor(){}static getContourSequence(e,t){const{data:n}=e,{projectionPoints:i,projectionPointsImageIds:o}=n.cachedStats;return i.map(((e,n)=>{const i=function(e){const t=[...e[0],...e[1],...e[3],...e[2]].flat().map((e=>e.toFixed(2)));return t}(e),a=function(e,t){const n=t.get("sopCommonModule",e);return{ReferencedSOPClassUID:n.sopClassUID,ReferencedSOPInstanceUID:n.sopInstanceUID}}(o[n],t);return{NumberOfContourPoints:i.length/3,ContourImageSequence:a,ContourGeometricType:"CLOSED_PLANAR",ContourData:i}}))}}ae(Vi,"toolName",void 0),Vi.toolName="RectangleROIStartEndThreshold";const Wi=Vi;class Bi{constructor(){}static convert(e,t,n){!function(e){if(!e?.data)throw new Error("Tool data is empty");if(!e.metadata||e.metadata.referencedImageId)throw new Error("Tool data is not associated with any imageId")}(e);const{toolName:i}=e.metadata,o=Bi.TOOL_NAMES[i];if(!o)throw new Error(`Unknown tool type: ${i}, cannot convert to RTSSReport`);const a=o.getContourSequence(e,n);return{ReferencedROINumber:t+1,ROIDisplayColor:[Math.floor(255*Math.random()),Math.floor(255*Math.random()),Math.floor(255*Math.random())],ContourSequence:a}}static register(e){Bi.TOOL_NAMES[e.toolName]=e}}ae(Bi,"TOOL_NAMES",{}),Bi.register(Wi);const Hi=Bi;function Fi(e){return(e.childAnnotationUIDs??[]).map((e=>pt(e).data.contour.polyline))}function Gi(e,t){const n=Fi(e),i=[];return n.forEach((e=>{const n=e.length,o=new Array(n);for(let i=0;i<n;i++)o[i]=t.worldToCanvas(e[i]);i.push(o)})),i}function $i(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,i,o=0]=e,[a,r,s=0]=t,l=a-n,d=r-i,c=s-o;return l*l+d*d+c*c}function qi(e,t,n){let i;const o=$i(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(i=e),!i){const a=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/o;i=a<0?e:a>1?t:[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}return{point:[...i],distanceSquared:$i(n,i)}}function zi(e,t,n){return qi(e,t,n).distanceSquared}const ji=.1;function Ki(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ji;const n=e.length;if(n<3)return e;const i=t*t,o=[[0,n-1]],a=new Array(n).fill(!1);let r=2;for(a[0]=!0,a[n-1]=!0;o.length;){const[t,n]=o.pop();if(n-t==1)continue;const s=e[t],l=e[n];let d=-1/0,c=-1;for(let i=t+1;i<n;i++){const t=zi(s,l,e[i]);t>d&&(d=t,c=i)}d<i||(a[c]=!0,r++,o.push([c,n]),o.push([t,c]))}const s=new Array(r);for(let t=0,i=0;t<n;t++)a[t]&&(s[i++]=e[t]);return s}function Yi(e){if(e.length<3)return 0;const t=e[0];let n=0;for(let i=0,o=e.length;i<o;i++){const a=e[i],r=e[i===o-1?0:i+1],s=a[0]-t[0],l=a[1]-t[1],d=r[0]-t[0];n+=s*(r[1]-t[1])-l*d}return n*=.5,n}function Xi(e){return Yi(e)>=0?1:-1}function Ji(e,t,n,i){const{canvasToWorld:o,worldToCanvas:a}=n,{data:r}=e,{targetWindingDirection:s}=t;let{points:l}=t;i?.decimate?.enabled&&(l=Ki(t.points,i?.decimate?.epsilon));let{closed:d}=t;const c=l.length,h=new Array(c),u=Xi(l),g=ht(e);if(void 0===d){let e=!1;if(l.length>3){const t=$i(l[0],l[c-1]);e=ie.utilities.isEqual(0,t)}d=e}let m=g?-1*g.data.contour.windingDirection:s;void 0===m&&(m=u),m!==u&&l.reverse();const v=r.handles.points.map((e=>a(e)));v.length>2&&Xi(v)!==m&&r.handles.points.reverse();for(let e=0;e<c;e++)h[e]=o(l[e]);r.contour.polyline=h,r.contour.closed=d,r.contour.windingDirection=m,It(e)}const Zi="PlanarFreehandContourSegmentationTool";function Qi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const{viewport:n,sliceData:i,annotation:o}=e,a=new Map,{toolName:r,originalToolName:s}=o.metadata,l=s||r,d=(st(l,n.element)||[]).filter((e=>!e.metadata.originalToolName||e.metadata.originalToolName===l));if(l!==Zi){const e=st(Zi,n.element);e?.length&&e.forEach((e=>{const{metadata:t}=e;t.originalToolName===l&&t.originalToolName!==t.toolName&&d.push(e)}))}if(!d?.length)return a;for(let e=0;e<i.numberOfSlices;e++){const n=d.filter((t=>t.metadata.sliceIndex===e));if(!n?.length)continue;const i=n.filter((e=>t.every((t=>{const n=t.parentKey?t.parentKey(e):e,i=n?.[t.key];return Array.isArray(i)?i.every(((e,n)=>e===t.value[n])):i===t.value}))));i.length&&a.set(e,i)}return a}function eo(e,t,n){const i=ie.utilities.deepMerge({data:{},metadata:{}},n);return Object.assign(i,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(i.data,{handles:{points:t.points||t||[],interpolationSources:t.sources,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{...n.data.contour,polyline:e}}),i}function to(e,t){const n=e.get(t);return!n?.length||1===n.length&&n[0].autoGenerated}function no(e,t,n){const[i]=e;t[i]||={pair:e,list:[]},t[i].list.push(n)}function io(e,t,n){const i=[];let o=!0;for(let a=e-1;a>=t[0];a--){const e=n.get(a);if(e?.length){if(e[0].autoGenerated)continue;e.length>1&&(o=!1),i.push(a);break}}if(o&&i.length){for(let a=e+1;a<=t[1];a++){const e=n.get(a);if(e?.length){if(e[0].autoGenerated)continue;e.length>1&&(o=!1),i.push(a);break}}if(o&&!(i.length<2))return i}}const{PointsManager:oo}=ie.utilities;function ao(e,t,n,i,o){n<t&&(n+=o);const a=n-t,r=Math.ceil(a/i);if(r<=0)return e[e.length-1]!==n&&e.push(ro(n,o)),n;for(let n=1;n<=r;n++){const i=ro(t+n*a/r,o);e.push(i)}return e[e.length-1]}function ro(e,t){return(Math.round(e)+t)%t}function so(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function lo(e,t,n,i){let o=!1;const a=e[0]<t[0]?e[0]:t[0],r=e[1]<t[1]?e[1]:t[1],s=e[0]>t[0]?e[0]:t[0],l=e[1]>t[1]?e[1]:t[1],d=n[0]<i[0]?n[0]:i[0],c=n[1]<i[1]?n[1]:i[1],h=n[0]>i[0]?n[0]:i[0],u=n[1]>i[1]?n[1]:i[1];if(a>h||s<d||r>u||l<c)return!1;const g=[co(e,t,n),co(e,t,i),co(n,i,e),co(n,i,t)];return g[0]!==g[1]&&g[2]!==g[3]||((0===g[0]&&ho(e,n,t)||0===g[1]&&ho(e,i,t)||0===g[2]&&ho(n,e,i)||0===g[3]&&ho(n,t,i))&&(o=!0),o)}function co(e,t,n){const i=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===i?0:i>0?1:2}function ho(e,t,n){return t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1])}function uo(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);for(let a=i;a<e.length;a++){if(lo(t,n,e[o],e[a]))return[o,a];o=a}}function go(e,t){for(let n=0,i=e.length;n<i;n++){const o=uo(t,e[n],e[n===i-1?0:n+1]);if(2===o?.length)return!0}return!1}function mo(e){if(e.length<3)return!1;const t=e.length,n=$i(e[0],e[t-1]);return Sn.glMatrix.equals(0,n)}function vo(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{closed:void 0};if(e.length<3)return!1;const i=e.length;let o=0;const{closed:a,holes:r}=n;if(r?.length)for(const e of r)if(vo(e,t))return!1;const s=!(void 0===a?mo(e):a),l=e.length-(s?1:2);for(let n=0;n<=l;n++){const a=e[n],r=e[n===i-1?0:n+1],s=a[0]>=r[0]?a[0]:r[0],l=a[1]>=r[1]?a[1]:r[1],d=a[1]<=r[1]?a[1]:r[1];if(t[0]<=s&&t[1]>=d&&t[1]<l){let e=a[0]===r[0];if(!e){const n=(t[1]-a[1])*(r[0]-a[0])/(r[1]-a[1])+a[0];e=t[0]<=n}o+=e?1:0}}return!!(o%2)}function po(e,t){for(let n=0,i=t.length;n<i;n++)if(!vo(e,t[n]))return!1;return!0}function fo(e,t,n){let i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const o=[],a=e.length,r=a-(i?1:2);for(let i=0;i<=r;i++){const r=i===a-1?0:i+1;lo(t,n,e[i],e[r])&&o.push([i,r])}return o}function wo(e){const t=Yi(e);return[0,0,t/Math.abs(t)]}const Io=.01;function Eo(e,t,n){const i=e[0]<=t[0]?e[0]:t[0],o=e[0]>=t[0]?e[0]:t[0],a=e[1]<=t[1]?e[1]:t[1],r=e[1]>=t[1]?e[1]:t[1];if(!(n[0]>=i-Io&&n[0]<=o+Io&&n[1]>=a-Io&&n[1]<=r+Io))return!1;const s=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return(s>=0?s:-s)<=Io}const Co=.01;function _o(e,t,n,i){const o=[t[0]-e[0],t[1]-e[1]],a=[i[0]-n[0],i[1]-n[1]],r=a[1]*o[0]-a[0]*o[1];if((r>=0?r:-r)<Co){const o=[e[0]<t[0]?e[0]:t[0],e[0]>t[0]?e[0]:t[0],e[1]<t[1]?e[1]:t[1],e[1]>t[1]?e[1]:t[1]],a=[n[0]<i[0]?n[0]:i[0],n[0]>i[0]?n[0]:i[0],n[1]<i[1]?n[1]:i[1],n[1]>i[1]?n[1]:i[1]];if(!(o[0]<=a[1]&&o[1]>=a[0]&&o[2]<=a[3]&&o[3]>=a[2]))return;if(!(Eo(e,t,n)||Eo(e,t,i)||Eo(n,i,e)))return;return[.5*((o[0]>a[0]?o[0]:a[0])+(o[1]<a[1]?o[1]:a[1])),.5*((o[2]>a[2]?o[2]:a[2])+(o[3]<a[3]?o[3]:a[3]))]}let s=e[1]-n[1],l=e[0]-n[0];const d=o[0]*s-o[1]*l;return s=(a[0]*s-a[1]*l)/r,l=d/r,[e[0]+s*o[0],e[1]+s*o[1]]}var bo=function(e){return e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection",e}(bo||{}),To=function(e){return e[e.Outside=-1]="Outside",e[e.Edge=0]="Edge",e[e.Inside=1]="Inside",e}(To||{}),Do=function(e){return e[e.Exiting=-1]="Exiting",e[e.Unknown=0]="Unknown",e[e.Entering=1]="Entering",e}(Do||{});function So(e){for(let t=0,n=e.length;t<n;t++){const i=e[t];i.next||(i.next=e[t===n-1?0:t+1])}}function yo(e,t){const n=[],i=[],o=new Map;let a=vo(t,e[0])?Do.Exiting:Do.Entering;for(let i=0,r=e.length;i<r;i++){const s=e[i],l=vo(t,s),d={type:bo.Vertex,coordinates:s,position:l?To.Inside:To.Outside,visited:!1,next:null};n.push(d);const c=e[i===r-1?0:i+1],h=fo(t,s,c).map((e=>{const n=e[0],i=t[e[0]],o=t[e[1]],a=_o(s,c,i,o);return{sourceLineSegmentId:n,coordinate:a,targetStartPointDistSquared:$i(s,a)}}));h.sort(((e,t)=>e.targetStartPointDistSquared-t.targetStartPointDistSquared)),h.forEach((e=>{const{sourceLineSegmentId:t,coordinate:i}=e,r={type:bo.Intersection,coordinates:i,position:To.Edge,direction:a,visited:!1,next:null},s={...r,direction:Do.Unknown,cloned:!0};a===Do.Entering?r.next=s:s.next=r;let l=o.get(t);l||(l=[],o.set(t,l)),n.push(r),l.push(s),a*=-1}))}for(let e=0,n=t.length;e<n;e++){const n=e,a=t[e],r={type:bo.Vertex,coordinates:a,visited:!1,next:null};i.push(r);const s=o.get(n);s?.length&&s.map((e=>({intersectionPoint:e,lineSegStartDistSquared:$i(a,e.coordinates)}))).sort(((e,t)=>e.lineSegStartDistSquared-t.lineSegStartDistSquared)).map((e=>{let{intersectionPoint:t}=e;return t})).forEach((e=>i.push(e)))}return So(n),So(i),{targetPolylinePoints:n,sourcePolylinePoints:i}}function xo(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];if(!n.visited&&n.position===To.Outside)return n}}function Mo(e,t){const n=wo(e),i=wo(t),o=Sn.vec3.dot(i,n);Sn.glMatrix.equals(1,o)||(t=t.slice().reverse());const{targetPolylinePoints:a}=yo(e,t),r=xo(a);if(!r)return e.slice();const s=[r.coordinates];let l=r.next;for(;l!==r;)l.type===bo.Intersection&&l.cloned||s.push(l.coordinates),l=l.next;return s}function Oo(e,t){const n=wo(e),i=wo(t),o=Sn.vec3.dot(i,n);Sn.glMatrix.equals(-1,o)||(t=t.slice().reverse());const{targetPolylinePoints:a}=yo(e,t);let r=null;const s=[];for(;r=xo(a);){const e=[r.coordinates];let t=r.next;for(r.visited=!0;t!==r;)t.visited=!0,t.type===bo.Intersection&&t.cloned||e.push(t.coordinates),t=t.next;s.push(e)}return s}function Po(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o];n.getFrameOfReferenceUID()===t&&i.push(n)}return i}const{Active:Ao,Passive:Ro,Enabled:Lo}=Ye;function No(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o],a=Vn(n.id,n.renderingEngineId);a&&(Uo(a,t)&&i.push(n))}return i}function Uo(e,t){const{toolOptions:n}=e,i=n[t];if(!i)return!1;const o=i.mode;return o===Ao||o===Ro||o===Lo}const ko=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.999;return e.filter((e=>{const i=e.getCamera();return Math.abs(Sn.vec3.dot(i.viewPlaneNormal,t.viewPlaneNormal))>n}))};function Vo(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=(0,ie.getEnabledElement)(e),{renderingEngine:o,FrameOfReferenceUID:a}=i;let r=o.getViewports();r=Po(r,a),r=No(r,t);const s=o.getViewport(i.viewportId);return n&&(r=ko(r,s.getCamera())),r.map((e=>e.id))}function Wo(e){return!!e.data?.segmentation}function Bo(e,t){const{segmentation:n}=e.data,{segmentation:i}=t.data;return n.segmentationId===i.segmentationId&&n.segmentIndex===i.segmentIndex}function Ho(e){if(!e.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,i=Nu(t),{annotationUIDsMap:o}=i?.representationData.CONTOUR||{},a=o?.get(n);a&&(a.delete(e.annotationUID),a.size||o.delete(n))}function Fo(e){if(e.parentAnnotationUID)return;if(!e.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,i=Nu(t);i.representationData.CONTOUR||(i.representationData.CONTOUR={annotationUIDsMap:new Map});const{annotationUIDsMap:o}=i.representationData.CONTOUR;let a=o.get(n);a||(a=new Set,o.set(n,a)),o.set(n,a.add(e.annotationUID))}function Go(e){const t=e.toolName;if(je.tools[t],!t)throw new Error(`No Tool Found for the ToolClass ${e.name}`);je.tools[t]={toolClass:e}}function $o(e){const t=e.toolName;if(!t)throw new Error(`No tool found for: ${e.name}`);if(void 0===!je.tools[t])throw new Error(`${t} cannot be removed because it has not been added`);delete je.tools[t]}let qo=function(e){return e[e.CounterClockwise=-1]="CounterClockwise",e[e.Unknown=0]="Unknown",e[e.Clockwise=1]="Clockwise",e}({});const zo="PlanarFreehandContourSegmentationTool";function jo(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{toolName:n}=Kh,i=Vn(e.id,e.renderingEngineId);let o;return i.hasTool(n)?i.getToolOptions(n)||(o=`Tool ${n} must be in active/passive state`):o=`Tool ${n} not added to ${i.id} toolGroup`,o&&!t&&console.warn(o),!o}function Ko(e,t){const n=e.length,i=new Array(n);for(let o=0;o<n;o++)i[o]=t.worldToCanvas(e[o]);return i}function Yo(e,t,n){const{windingDirection:i}=t.data.contour,{windingDirection:o}=n.data.contour;ct(t,n),Ho(n);const{contour:a}=n.data;Ji(n,{points:Ko(a.polyline,e),closed:a.closed},e);const{element:r}=e,s=new Set([zo,t.metadata.toolName,n.metadata.toolName]);for(const e of s.values()){const t=Vo(r,e);oi(t)}}const{PointsManager:Xo}=ie.utilities;function Jo(e,t,n,i){const o=n.get(t[0])[0],a=n.get(t[1])[0],r=ra(o.data.contour.polyline),s=ra(a.data.contour.polyline),{c1Interp:l,c2Interp:d}=function(e,t){const n=aa(e),i=aa(t),o=Math.max(Math.ceil(n[n.length-1]/.2),Math.ceil(i[i.length-1]/.2)),a=oa(n),r=oa(i),s=o+t.x.length,l=o+e.x.length,d=ia(s,a),c=ia(l,r),h=na(s-2,e.x.length),u=na(l-2,t.x.length),g=ta(d,h),m=ta(c,u),v=ea(e,g),p=ea(t,m);return function(e,t){const n=e.x.length,i={startingNode:0,totalSquaredXYLengths:1/0};for(let o=0;o<n;o++){let a=o,r=0;for(let i=0;i<n;i++)r+=(e.x[a]-t.x[i])**2+(e.y[a]-t.y[i])**2+(e.z[a]-t.z[i])**2,a++,a===n&&(a=0);r<i.totalSquaredXYLengths&&(i.totalSquaredXYLengths=r,i.startingNode=o)}const o=i.startingNode;Qo(e.x,o),Qo(e.y,o),Qo(e.z,o),Qo(e.I,o)}(v,p),function(e,t){const n={x:[],y:[],z:[],I:[]},i={x:[],y:[],z:[],I:[]};for(let o=0;o<e.x.length;o++)(e.I[o]||t.I[o])&&(n.x.push(e.x[o]),n.y.push(e.y[o]),n.z.push(e.z[o]),n.I.push(e.I[o]),i.x.push(t.x[o]),i.y.push(t.y[o]),i.z.push(t.z[o]),i.I.push(t.I[o]));return{c1Interp:n,c2Interp:i}}(v,p)}(r,s);l.kIndex=t[0],d.kIndex=t[1],e.forEach((function(e){!function(e,t,n,i,o,a,r){const[s,l]=i,d=(n-s)/(l-s),c=o.get(s)[0],h=o.get(l)[0],u=function(e,t,n,i){const o=i?e.I:t.I,a=Xo.fromXYZ(e),r=Xo.fromXYZ(t),{length:s}=a,l=Xo.create3(s),d=Sn.vec3.create(),c=Sn.vec3.create(),h=Xo.create3(s);h.kIndex=e.kIndex;const u=Xo.create3(s);u.kIndex=t.kIndex;for(let t=0;t<e.x.length;t++)if(o[t]){const e=a.getPoint(t),i=r.getPoint(t);h.push(e),u.push(i),Sn.vec3.sub(d,i,e),l.push(Sn.vec3.scaleAndAdd(c,e,d,n))}return l.sources=[h,u],l}(e,t,d,a),g=d>.5?h:c,m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12;const n=oo.create3(t);n.sources=[];const{sources:i}=n,{length:o,sources:a=[]}=e;if(o<15)return e.subselect(t);const r=Math.floor(Math.max(2*o/t,10));a.forEach((()=>i.push(oo.create3(t))));const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const{length:n}=e,i=Sn.vec3.create(),o=Sn.vec3.create(),a=new Float32Array(n);for(let r=0;r<n;r++){const s=e.getPoint(r),l=e.getPoint(r-t),d=e.getPoint((r+t)%n);Sn.vec3.sub(i,s,l),Sn.vec3.sub(o,d,s);const c=Sn.vec3.dot(i,o)/(Sn.vec3.len(i)*Sn.vec3.len(o));a[r]=c}return a}(e,5),l=function(e,t){const{max:n,deviation:i}=function(e){const{length:t}=e;let n=0,i=1/0,o=-1/0,a=0;for(let a=0;a<t;a++){const t=e[a];n+=t,i=Math.min(i,t),o=Math.max(o,t)}const r=n/t;for(let n=0;n<t;n++){const t=e[n]-r;a+=t*t}return{mean:r,max:o,min:i,sumSq:a,deviation:Math.sqrt(a/t)}}(e),{length:o}=e;if(i<.01||o<3*t)return[];const a=[];let r,s=null,l=0;for(let t=0;t<o;t++){const o=e[t];o<n-i?s?(s[2]=t,o<r&&(r=o,l=t),s[1]=l):(r=o,l=t,s=[t,t,t]):s&&(a.push(s),s=null)}return s&&(0===a[0][0]?a[0][0]=s[0]:(s[1]=l,s[2]=o-1,a.push(s))),a}(s,t),d=[];if(l?.length>2){let e=-1;const t=r/3;l.forEach((n=>{const[i,,a]=n,s=Math.ceil((i+a)/2);a-e<t||(s-i>2*t?(ao(d,e,i,r,o),e=ao(d,i,s,r,o)):e=ao(d,e,s,r,o),a-e>t&&(e=ao(d,e,a,r,o)))}));const n=d[0];ro(n+o-e,o)>2*t&&ao(d,e,n-t,r,o)}else{const e=Math.floor(o/t);ao(d,-1,o-e,e,o)}return d.forEach((t=>{const o=e.getPointArray(t);n.push(o),a.forEach(((e,n)=>i[n].push(e.getPoint(t))))})),n}(u);o.has(n)?function(e,t,n,i,o){const a=Zo(i,n,o),r=eo(e.points,t,a);Object.assign(a,{metadata:r.metadata,data:r.data})}(u,m,n,g,r):function(e,t,n,i,o){const a=e.points,{viewport:r}=o,s=eo(a,t,i),l=r.getViewReference({sliceIndex:n});if(!l)throw new Error(`Can't find slice ${n}`);Object.assign(s.metadata,l),gt(s,r.element),i.onInterpolationComplete?.(s,i);const{parentAnnotationUID:d}=i;d&&Yo(r,Zo(pt(d),n,o),s)}(u,m,n,g,r)}(l,d,e,t,n,r.x.length>s.x.length,i)}))}function Zo(e,t,n){const{viewport:i}=n,o=st(e.metadata.toolName,i.element);for(let n=0;n<o.length;n++){const i=o[n];if(i.interpolationUID===e.interpolationUID&&i.metadata.sliceIndex===t)return i}}function Qo(e,t){t-=e.length*Math.floor(t/e.length);const n=e.splice(0,t);return e.push(...n),e}function ea(e,t){const n={x:[],y:[],z:[],I:[]};for(let i=0;i<e.x.length-1;i++){n.x.push(e.x[i]),n.y.push(e.y[i]),n.z.push(e.z[i]),n.I.push(!0);const o=(e.x[i+1]-e.x[i])/(t[i]+1),a=(e.y[i+1]-e.y[i])/(t[i]+1),r=(e.z[i+1]-e.z[i])/(t[i]+1);for(let e=0;e<t[i]-1;e++)n.x.push(n.x[n.x.length-1]+o),n.y.push(n.y[n.y.length-1]+a),n.z.push(n.z[n.z.length-1]+r),n.I.push(!1)}return n}function ta(e,t){const n=[];for(let t=0;t<e.length;++t)n[t]=t;n.sort((function(t,n){return e[t]<e[n]?-1:1}));const i=[];for(let e=0;e<t.length;e++)i.push(t[n[e]]);const o=i.reduce((function(e,t,n){return t&&e.push(n),e}),[]),a=[];for(let e=0;e<o.length-1;e++)a.push(o[e+1]-o[e]);return a}function na(e,t){const n=new Array(e+t);return n.fill(!1,0,e),n.fill(!0,e,e+t),n}function ia(e,t){const n=1/(e-1),i=[n];for(let t=1;t<e-2;t++)i.push(i[i.length-1]+n);return i.concat(t)}function oa(e){const t=[];for(let n=0;n<e.length;n++)t.push(e[n]/e[e.length-1]);return t}function aa(e){const t=[0];for(let n=1;n<e.x.length;n++){const i=Math.sqrt((e.x[n]-e.x[n-1])**2+(e.y[n]-e.y[n-1])**2+(e.z[n]-e.z[n-1])**2);t.push(t[n-1]+i)}return t}function ra(e){const t={x:[],y:[],z:[]};for(let n=0;n<e.length;n++)t.x[n]=e[n][0],t.y[n]=e[n][1],t.z[n]=e[n][2];return t.x.push(t.x[0]),t.y.push(t.y[0]),t.z.push(t.z[0]),t}const sa=function(e){if(!e.annotation)return;const{isInterpolationUpdate:t,annotation:n}=e;queueMicrotask((()=>{try{t&&(n.isInterpolationUpdate=!0,n.autoGenerated=!1),function(e){const{annotation:t}=e;!function(e){const{parentAnnotationUID:t,annotationUID:n}=e;if(!t)return e.interpolationUID;const i=pt(t),{interpolationUID:o}=i,a=i.childAnnotationUIDs.indexOf(n);e.interpolationUID=`${o}-${a}`,e.interpolationUID}(t);const{interpolationData:n,interpolationList:i}=function(e,t){const n=Qi(t,[{key:"interpolationUID",value:t.interpolationUID}]),i=function(e){let t=1/0,n=-1/0,i=!1;for(const[o,a]of e.entries())a.length&&(t=Math.min(o,t),n=Math.max(o,n),i=!0);if(i)return[t,n]}(n);if(!i)return void console.warn("No annotations found to interpolate",n);const o=function(e,t){for(const[n,i]of e)for(let e=0;e<i.length;e++)if(i[e].annotationUID===t)return n}(n,e.annotationUID),a=[];for(let e=i[0]+1;e<i[1];e++)if(to(n,e)){const t=io(e,i,n);t?.[0]!==o&&t?.[1]!==o||no(t,a,e)}return{interpolationData:n,interpolationList:a}}(t,e)||{};if(!n||!i)return;const o={toolName:t.metadata.toolName,toolType:t.metadata.toolName,viewport:e.viewport};for(let e=0;e<i.length;e++)i[e]&&Jo(i[e].list,i[e].pair,n,o);const{id:a,renderingEngineId:r,element:s}=e.viewport,l={annotation:t,element:s,viewportId:a,renderingEngineId:r};i.length&&(0,ie.triggerEvent)(e.viewport.element,se.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,l)}(e)}finally{t&&(n.autoGenerated=!0)}}))};function la(e){const{annotation:t}=e,n=Qi(e,[{key:"interpolationUID",value:e.interpolationUID}]),i=t.metadata.sliceIndex;let o=-1,a=e.sliceData.numberOfSlices;for(const[e,t]of n.entries()){if(e===i)continue;const n=t.find((e=>!e.autoGenerated));n&&(e<i?o=Math.max(e,o):a=Math.min(e,a))}const r=[];for(const[e,t]of n.entries())e<=o||e>=a||e===i||t.forEach((e=>{e.autoGenerated&&(vt(e.annotationUID),r.push(e))}));if(r.length){const t={annotations:r,element:e.viewport.element,viewportId:e.viewport.id,renderingEngineId:e.viewport.getRenderingEngine().id};(0,ie.triggerEvent)(e.viewport.element,se.INTERPOLATED_ANNOTATIONS_REMOVED,t)}if(o>=0&&a<e.sliceData.numberOfSlices){const t=n.get(a)[0],i={viewport:e.viewport,sliceData:{numberOfSlices:e.sliceData.numberOfSlices,imageIndex:t.metadata.sliceIndex},annotation:t,interpolationUID:t.interpolationUID};sa(i)}}var da;const{uuidv4:ca}=ie.utilities,ha=[$e.HandlesUpdated,$e.InterpolationUpdated];class ua{static addTool(e){this.toolNames.includes(e)||this.toolNames.push(e)}static acceptAutoGenerated(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{toolNames:n,segmentationId:i,segmentIndex:o,sliceIndex:a}=t;for(const t of n||ua.toolNames){const n=st(t,e);if(n?.length)for(const e of n){const{interpolationUID:t,data:n,autoGenerated:r,metadata:s}=e;t&&(e.interpolationCompleted=!0),r&&(o&&o!==n.segmentation.segmentIndex||void 0!==a&&s&&a!==s.sliceIndex||i&&i!==n.segmentation.segmentationId||(Fo(e),e.autoGenerated=!1))}}}}function ga(e){return{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getCurrentImageIdIndex()}}function ma(e,t){ua.acceptAutoGenerated(e,t)}da=ua,ae(ua,"toolNames",[]),ae(ua,"handleAnnotationCompleted",(e=>{const t=e.detail.annotation;if(!t?.metadata)return;const{toolName:n,originalToolName:i}=t.metadata;if(!da.toolNames.includes(n)&&!da.toolNames.includes(i))return;const o=wi(t);if(!o)return void console.warn("Unable to find viewport for",t);const a={viewport:o,sliceData:ga(o),annotation:t,interpolationUID:t.interpolationUID},r=!!t.interpolationUID;if(t.autoGenerated=!1,r)return la(a),void sa(a);const s=[{key:"segmentIndex",value:t.data.segmentation.segmentIndex,parentKey:e=>e.data.segmentation},{key:"viewPlaneNormal",value:t.metadata.viewPlaneNormal,parentKey:e=>e.metadata},{key:"viewUp",value:t.metadata.viewUp,parentKey:e=>e.metadata}];let l=function(e,t){const n=Qi(e,t),i=[];if(!n?.size)return i;for(const e of n.values())e.forEach((e=>{i.push(e)}));return i}(a,s);const{sliceIndex:d}=t.metadata,c=new Set;l.forEach((e=>{if(e.interpolationCompleted||e.metadata.sliceIndex===d){const{interpolationUID:t}=e;c.add(t)}})),l=l.filter((e=>!c.has(e.interpolationUID))),t.interpolationUID=l[0]?.interpolationUID||ca(),a.interpolationUID=t.interpolationUID,sa(a)})),ae(ua,"handleAnnotationUpdate",(e=>{const t=e.detail.annotation,{changeType:n=$e.HandlesUpdated}=e.detail;if(!t?.metadata)return;const{toolName:i,originalToolName:o}=t.metadata;if(!da.toolNames.includes(i)&&!da.toolNames.includes(o)||!ha.includes(n))return;const a=wi(t);if(!a)return void console.warn("Unable to find matching viewport for annotation interpolation",t);t.autoGenerated&&(Fo(t),t.autoGenerated=!1);const r={viewport:a,sliceData:ga(a),annotation:t,interpolationUID:t.interpolationUID,isInterpolationUpdate:n===$e.InterpolationUpdated};sa(r)})),ae(ua,"handleAnnotationDelete",(e=>{const t=e.detail.annotation;if(!t?.metadata)return;const{toolName:n}=t.metadata;if(!da.toolNames.includes(n)||t.autoGenerated)return;const i=wi(t);if(!i)return void console.warn("No viewport, can't delete interpolated results",t);const o={viewport:i,sliceData:ga(i),annotation:t,interpolationUID:t.interpolationUID};t.autoGenerated=!1,la(o)}));const{isEqual:va}=ie.utilities;function pa(e,t){const{polyline:n}=e.data.contour,{points:i}=e.data.handles,{length:o}=i;if(t===o)return n.length;if(t<0&&(t=(t+o)%o),0===t)return 0;const a=i[t],r=n.findIndex((e=>va(a,e)));if(-1!==r)return r;let s=1/0;return n.reduce(((e,t,n)=>{const i=Sn.vec3.squaredDistance(t,a);return i<s?(s=i,n):e}),-1)}const fa=function(e,t){let n=0;for(let t=0;t<e.length-1;t++){const i=e[t],o=e[t+1];n+=Math.sqrt(Math.pow(o[0]-i[0],2)+Math.pow(o[1]-i[1],2))}if(t){const t=e[0],i=e[e.length-1];n+=Math.sqrt(Math.pow(i[0]-t[0],2)+Math.pow(i[1]-t[1],2))}return n};class wa{constructor(e,t){ae(this,"supportedInteractionTypes",void 0),ae(this,"configuration",void 0),ae(this,"toolGroupId",void 0),ae(this,"mode",void 0);const n=ie.utilities.deepMerge(t,e),{configuration:i={},supportedInteractionTypes:o,toolGroupId:a}=n;i.strategies||(i.strategies={},i.defaultStrategy=void 0,i.activeStrategy=void 0,i.strategyOptions={}),this.toolGroupId=a,this.supportedInteractionTypes=o||[],this.configuration=Object.assign({},i),this.mode=Ye.Disabled}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){const{strategies:n,activeStrategy:i}=this.configuration;return n[i]?.call(this,e,t)}applyActiveStrategyCallback(e,t,n){const{strategies:i,activeStrategy:o}=this.configuration;if(!i[o])throw new Error(`applyActiveStrategyCallback: active strategy ${o} not found, check tool configuration or spellings`);return i[o][n]?.call(this,e,t)}setConfiguration(e){this.configuration=ie.utilities.deepMerge(this.configuration,e)}setActiveStrategy(e){this.setConfiguration({activeStrategy:e})}getTargetVolumeId(e){if(this.configuration.volumeId)return this.configuration.volumeId;const t=e.getActors();return t?t.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid:void 0}getTargetIdImage(e,t){if(e.startsWith("imageId:")){const n=e.split("imageId:")[1],i=ie.utilities.imageIdToURI(n);let o=ie.utilities.getViewportsWithImageURI(i,t.id);if(!o||!o.length)return;if(o=o.filter((e=>e.getCurrentImageId()===n)),!o||!o.length)return;return o[0].getImageData()}if(e.startsWith("volumeId:")){const n=ie.utilities.getVolumeId(e),i=ie.utilities.getViewportsWithVolumeId(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}if(e.startsWith("videoId:")){const n=ie.utilities.imageIdToURI(e),i=ie.utilities.getViewportsWithImageURI(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){const t=e.getViewReferenceId?.();if(t)return t;if(e instanceof ie.BaseVolumeViewport)return`volumeId:${this.getTargetVolumeId(e)}`;throw new Error("getTargetId: viewport must have a getReferenceId method")}}ae(wa,"toolName",void 0),wa.toolName="BaseTool";const Ia=wa;var Ea=function(e){return e.OnInteractionStart="onInteractionStart",e.OnInteractionEnd="onInteractionEnd",e.Preview="preview",e.RejectPreview="rejectPreview",e.AcceptPreview="acceptPreview",e.Fill="fill",e.StrategyFunction="strategyFunction",e.CreateIsInThreshold="createIsInThreshold",e.Initialize="initialize",e.INTERNAL_setValue="setValue",e.ComputeInnerCircleRadius="computeInnerCircleRadius",e}(Ea||{});const Ca=Ea,_a={[Ca.Initialize]:e=>{const{strategySpecificConfiguration:t}=e;if(!t)return;const{centerSegmentIndex:n}=t;n&&(e.segmentIndex=n.segmentIndex)},[Ca.OnInteractionStart]:e=>{const{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:i,centerIJK:o,strategySpecificConfiguration:a,imageVoxelManager:r,segmentationImageData:s,preview:l}=e;if(!a?.useCenterSegmentIndex)return;delete a.centerSegmentIndex;let d=!1,c=!1;if(r.forEach((e=>{let{value:i}=e;d||=i===t,c||=i===n}),{imageData:s,isInObject:r.isInObject,boundsIJK:i.boundsIJK}),!d&&!c)return;let h=i.getAtIJKPoint(o);if(h===n){if(!l)return;h=l.segmentIndex}else c&&(h=null);e.segmentIndex=h,a.centerSegmentIndex={segmentIndex:h}}},ba={[Ca.Initialize]:e=>{const{operationName:t,centerIJK:n,strategySpecificConfiguration:i,segmentationVoxelManager:o,imageVoxelManager:a,segmentIndex:r}=e,{THRESHOLD:s}=i;if(!s?.isDynamic||!n||!r)return;if(t===Ca.RejectPreview||t===Ca.OnInteractionEnd)return;const{boundsIJK:l}=o,{threshold:d,dynamicRadius:c=0}=s,h=d?0:c,u=l.map(((e,t)=>{const[i,o]=e;return[Math.max(i,n[t]-h),Math.min(o,n[t]+h)]})),g=d||[1/0,-1/0];a.forEach((e=>{let{value:t}=e;const n=Array.isArray(t)?Sn.vec3.len(t):t;g[0]=Math.min(n,g[0]),g[1]=Math.max(n,g[1])}),{boundsIJK:u}),e.strategySpecificConfiguration.THRESHOLD.threshold=g},[Ca.OnInteractionStart]:e=>{const{strategySpecificConfiguration:t,preview:n}=e;(t?.THRESHOLD?.isDynamic||n)&&(t.THRESHOLD.threshold=null)},[Ca.ComputeInnerCircleRadius]:e=>{const{configuration:t,viewport:n}=e,{THRESHOLD:{dynamicRadius:i=0}={}}=t.strategySpecificConfiguration||{};if(0===i)return;const o=n.getImageData();if(!o)return;const{spacing:a}=o,r=[n.element.clientWidth/2,n.element.clientHeight/2],s=i*a[0],l=n.canvasToWorld(r).map((e=>e+s)),d=n.worldToCanvas(l),c=Math.abs(r[0]-d[0]),{strategySpecificConfiguration:h,activeStrategy:u}=t;h[u]||(h[u]={}),h[u].dynamicRadiusInCanvas=c}},Ta={[Ca.Initialize]:e=>{e.segmentIndex=0}};function Da(e,t,n){return(new Array(n+1).join(t)+e).slice(-n)}const Sa=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=n.onFlood,o=n.onBoundary,a=n.equals,r=n.diagonals||!1,s=m(t),l=function(e){const t=[],n=function(e){return e.split("").map((function(e){return parseInt(e,10)-1}))};for(let i=0;i<Math.pow(3,e);i+=1){const o=Da(i.toString(3),"0",e);t.push(n(o))}return t}(t.length).filter((function(e){const t=function(e){let t=0;for(let n=0;n<e.length;n+=1)0!==e[n]&&(t+=1);return t}(e);return 0!==t&&(1===t||r)})),d=[],c=[],h=new Set,u=new Map;for(d.push({currentArgs:t});d.length>0;)g(d.pop());return{flooded:c,boundaries:function(){const e=Array.from(u.values());return e.reverse(),e}()};function g(e){const t=e.currentArgs,n=e.previousArgs;(function(e){const[t,n,i=0]=e,o=t+32768+65536*(n+32768+65536*(i+32768));return h.has(o)})(t)||(function(e){const[t,n,i=0]=e,o=t+32768+65536*(n+32768+65536*(i+32768));h.add(o)}(t),function(e){const t=m(e);return a?a(t,s):t===s}(t)?(function(e){c.push(e),i&&i(...e)}(t),function(e){for(let t=0;t<l.length;t+=1){const n=l[t],i=e.slice(0);for(let t=0;t<e.length;t+=1)i[t]+=n[t];d.push({currentArgs:i,previousArgs:e})}}(t)):function(e){const[t,n,i=0]=e,a=t+32768+65536*(n+32768+65536*(i+32768));u.set(a,e),o&&o(...e)}(n))}function m(t){return e(...t)}},ya={determineSegmentIndex:_a,dynamicThreshold:ba,erase:Ta,islandRemoval:{[Ca.OnInteractionEnd]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n,strategySpecificConfiguration:i,previewSegmentIndex:o,segmentIndex:a}=e;if(!i.THRESHOLD||null===a)return;const r=t.getPoints();if(!r?.length)return;if(void 0===o)return;const s=t.getBoundsIJK().map(((e,t)=>[Math.min(e[0],...r.map((e=>e[t]))),Math.max(e[1],...r.map((e=>e[t])))]));if(s.find((e=>e[0]<0||e[1]>65535)))return;const l=new Set,d=(e,t,i)=>{if(e<s[0][0]||e>s[0][1]||t<s[1][0]||t>s[1][1]||i<s[2][0]||i>s[2][1])return-1;const r=n.toIndex([e,t,i]);if(l.has(r))return-2;const d=n.getAtIndex(r),c=d===o||d===a?1:0;return c||n.addPoint(r),c};let c=0;const h=(e,i,a)=>{const r=n.toIndex([e,i,a]);l.has(r)||(t.setAtIJK(e,i,a,o),l.add(r),c++)};r.forEach((e=>{1===d(...e)&&Sa(d,e,{onFlood:h,diagonals:!0})}));let u=0,g=0;t.forEach((e=>{let{index:i,pointIJK:r,value:s}=e;const d=n.getAtIndex(i);if(l.has(i)){g++;const e=s===a?a:o;t.setAtIJKPoint(r,e)}else if(d===o){u++;const e=s??0;t.setAtIJKPoint(r,e)}}),{}),c-g!=0&&console.warn("There were flooded=",c,"cleared=",u,"preview count=",g,"not handled",c-g);const m=new Set(n.points||[]);l.clear();for(const e of m.keys()){if(l.has(e))continue;let n=!0;const i=new Set,a=(e,o,a)=>{const r=t.toIndex([e,o,a]);l.add(r),(s[0][0]===s[0][1]||e!==s[0][0]&&e!==s[0][1])&&(s[1][0]===s[1][1]||o!==s[1][0]&&o!==s[1][1])&&(s[2][0]===s[2][1]||a!==s[2][0]&&a!==s[2][1])||(n=!1),n&&i.add(r)},r=t.toIJK(e);if(0===d(...r)&&(Sa(d,r,{onFlood:a,diagonals:!1}),n))for(const e of i)t.setAtIndex(e,o)}on(e.segmentationId,t.getArrayOfSlices())}},preview:{[Ca.Preview]:function(e){const{previewColors:t,strategySpecificConfiguration:n,enabledElement:i}=e;if(!t||!n)return;e.preview&&delete e.preview,delete n.centerSegmentIndex,this.onInteractionStart?.(i,e);const o=this.fill(i,e);return o&&(o.isPreviewFromHover=!0,e.preview=o,this.onInteractionEnd?.(i,e)),o},[Ca.Initialize]:e=>{const{toolGroupId:t,segmentIndex:n,segmentationRepresentationUID:i,previewSegmentIndex:o,previewColors:a,preview:r}=e;if(void 0===a)return;if(r&&(r.previewVoxelManager.sourceVoxelManager=e.segmentationVoxelManager,e.previewVoxelManager=r.previewVoxelManager),null===n||!o)return;const s=a?.[n],l=mn(i,n);(s||l)&&vn(i,o,s||function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.4;return[Math.round(e+(255-e)*o),Math.round(t+(255-t)*o),Math.round(n+(255-n)*o),i]}(...l))},[Ca.AcceptPreview]:e=>{const{segmentationVoxelManager:t,previewVoxelManager:n,previewSegmentIndex:i,preview:o}=e||{};if(void 0===i)return;const a=o?.segmentIndex??e.segmentIndex,r=n;r&&0!==r.modifiedSlices.size&&(r.forEach((e=>{let{index:n}=e;t.getAtIndex(n)===i&&t.setAtIndex(n,a)}),{}),on(e.segmentationId,r.getArrayOfSlices()),r.clear())},[Ca.RejectPreview]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n}=e;0!==t.modifiedSlices.size&&(t.forEach((e=>{let{index:t,value:i}=e;n.setAtIndex(t,i)})),on(e.segmentationId,t.getArrayOfSlices()),t.clear())}},regionFill:{[Ca.Fill]:e=>{const{segmentsLocked:t,segmentationImageData:n,segmentationVoxelManager:i,previewVoxelManager:o,imageVoxelManager:a,brushStrategy:r,centerIJK:s}=e,l=r.createIsInThreshold?.(e),{setValue:d}=r,c=l?n=>{const{value:i,index:o}=n;!t.includes(i)&&l(o)&&d(e,n)}:t=>d(e,t);a.forEach(c,{imageData:n,isInObject:a?.isInObject||i.isInObject,boundsIJK:i.boundsIJK}),o.addPoint(s)}},setValue:{[Ca.INTERNAL_setValue]:(e,t)=>{let{value:n,index:i}=t;const{segmentsLocked:o,segmentIndex:a,previewVoxelManager:r,previewSegmentIndex:s,segmentationVoxelManager:l}=e,d=l.getAtIndex(i);if(null===a){const e=r.getAtIndex(i);return void(void 0!==e&&r.setAtIndex(i,e))}if(d===a||o.includes(n))return;if(d===s){if(void 0!==r.getAtIndex(i))return;l.setAtIndex(i,a)}const c=s??a;r.setAtIndex(i,c)}},threshold:{[Ca.CreateIsInThreshold]:e=>{const{imageVoxelManager:t,strategySpecificConfiguration:n,segmentIndex:i}=e;if(n&&i)return e=>{const{THRESHOLD:i,THRESHOLD_INSIDE_CIRCLE:o}=n,a=t.getAtIndex(e),r=Array.isArray(a)?Sn.vec3.length(a):a,{threshold:s}=i||o||{};return!s?.length||s[0]<=r&&r<=s[1]}}}};function xa(e){let t,n,i,o,a,{operationData:r,viewport:s}=e;if(Yt(r,s)){const{volumeId:e,referencedVolumeId:n}=r,i=ie.cache.getVolume(e);if(!i)return;a=i.voxelManager,n&&(o=ie.cache.getVolume(n).voxelManager),({imageData:t}=i)}else{const{segmentationRepresentationUID:e,segmentationId:l}=r,d=sg(s.id,l);if(!d)return;const c=s.getCurrentImageId();if(!c)return;const h=s.getActor(e);if(!h)return;const u=ie.cache.getImage(d);t=h.actor.getMapper().getInputData(),a=u.voxelManager;const g=r.imageId,m=ie.cache.getImage(g);if(!m)return;n=m.getPixelData?.();const v=ie.cache.getImage(c),p=v?null:s.getImageData();i=v?.getPixelData()||p.getScalarData(),o=v?.voxelManager}return{segmentationImageData:t,segmentationScalarData:n,imageScalarData:i,segmentationVoxelManager:a,imageVoxelManager:o}}const{VoxelManager:Ma}=ie.utilities;class Oa{constructor(e){ae(this,"compositions",void 0),ae(this,"strategyFunction",void 0),ae(this,"configurationName",void 0),ae(this,"_initialize",[]),ae(this,"_fill",[]),ae(this,"_acceptPreview",void 0),ae(this,"_onInteractionStart",[]),ae(this,"fill",((e,t)=>{const n=this.initialize(e,t,Ca.Fill);if(!n)return;const{strategySpecificConfiguration:i={},centerIJK:o}=n;if(ie.utilities.isEqual(o,i.centerIJK))return t.preview;i.centerIJK=o,this._fill.forEach((e=>e(n)));const{segmentationVoxelManager:a,previewVoxelManager:r,previewSegmentIndex:s}=n;return on(n.segmentationId,a.getArrayOfSlices()),s&&r.modifiedSlices.size?n.preview||n:null})),ae(this,"onInteractionStart",((e,t)=>{const{preview:n}=t;if(n?.isPreviewFromHover)return void(n.isPreviewFromHover=!1);const i=this.initialize(e,t);i&&this._onInteractionStart.forEach((e=>e.call(this,i)))})),ae(this,"onInteractionEnd",void 0),ae(this,"rejectPreview",void 0),ae(this,"acceptPreview",void 0),ae(this,"preview",void 0),ae(this,"setValue",void 0),ae(this,"createIsInThreshold",void 0),this.configurationName=e;for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this.compositions=n,n.forEach((e=>{const t="function"==typeof e?e():e;if(t)for(const e in t){if(!Oa.childFunctions[e])throw new Error(`Didn't find ${e} as a brush strategy`);Oa.childFunctions[e](this,t[e])}})),this.strategyFunction=(e,t)=>this.fill(e,t);for(const e of Object.keys(Oa.childFunctions))this.strategyFunction[e]=this[e]}initialize(e,t,n){const{viewport:i}=e,o=xa({operationData:t,viewport:i});if(!o)return console.warn("No data found for BrushStrategy"),t.preview;const{imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s}=o,l=t.preview?.previewVoxelManager||Ma.createHistoryVoxelManager({sourceVoxelManager:r}),d={operationName:n,previewSegmentIndex:t.previewColors?255:void 0,...t,enabledElement:e,imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s,previewVoxelManager:l,viewport:i,centerWorld:null,brushStrategy:this};return this._initialize.forEach((e=>e(d))),d}}function Pa(e,t){const n=`_${e}`;return(i,o)=>{i[n]||=[],i[n].push(o),i[e]||=t?(o,a)=>{const r=i[t](o,a,e);i[n].forEach((e=>e.call(i,r)))}:e=>{i[n].forEach((t=>t.call(i,e)))}}}function Aa(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(n,i)=>{if(n[e])throw new Error(`The singleton method ${e} already exists`);n[e]=t?i:(e,t)=>(t.enabledElement=e,i.call(n,t))}}function Ra(e){const[t,n,i,o]=e;return[[i[0],n[1]],[o[0],t[1]]]}function La(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.precalculated||Na(e,n),n.precalculated(t)}ae(Oa,"COMPOSITIONS",ya),ae(Oa,"childFunctions",{[Ca.OnInteractionStart]:Pa(Ca.OnInteractionStart,Ca.Initialize),[Ca.OnInteractionEnd]:Pa(Ca.OnInteractionEnd,Ca.Initialize),[Ca.Fill]:Pa(Ca.Fill),[Ca.Initialize]:Pa(Ca.Initialize),[Ca.CreateIsInThreshold]:Aa(Ca.CreateIsInThreshold),[Ca.AcceptPreview]:Pa(Ca.AcceptPreview,Ca.Initialize),[Ca.RejectPreview]:Pa(Ca.RejectPreview,Ca.Initialize),[Ca.INTERNAL_setValue]:Aa(Ca.INTERNAL_setValue),[Ca.Preview]:Aa(Ca.Preview,!1),[Ca.ComputeInnerCircleRadius]:Pa(Ca.ComputeInnerCircleRadius),compositions:null});const Na=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xRadius:n,yRadius:i,zRadius:o}=e;void 0!==t.invXRadiusSq&&void 0!==t.invYRadiusSq&&void 0!==t.invZRadiusSq||(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==i?1/i**2:0,t.invZRadiusSq=0!==o?1/o**2:0);const{invXRadiusSq:a,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[d,c,h]=l;return t.precalculated=e=>{const t=e[0]-d;let n=t*t*a;if(n>1)return!1;const i=e[1]-c;if(n+=i*i*r,n>1)return!1;const o=e[2]-h;return n+=o*o*s,n<=1},t},{transformWorldToIndex:Ua,isEqual:ka}=ie.utilities,Va={[Ca.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=Sn.vec3.fromValues(0,0,0);t.forEach((e=>{Sn.vec3.add(r,r,e)})),Sn.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Ua(o,r);const s=t.map((e=>i.worldToCanvas(e))),[l,d]=Ra(s),c=i.canvasToWorld(l),h=i.canvasToWorld(d),u=hi(t.map((e=>Ua(o,e))),o.getDimensions());a.boundsIJK=u,n.isInObject=Wa({topLeftWorld:c,bottomRightWorld:h,center:r})}};function Wa(e){const{topLeftWorld:t,bottomRightWorld:n,center:i}=e,o=Math.abs(t[0]-n[0])/2,a=Math.abs(t[1]-n[1])/2,r=Math.abs(t[2]-n[2])/2,s=Math.max(o,a,r);if(ka(o,s)&&ka(a,s)&&ka(r,s)){const e={center:i,radius:s,radius2:s*s};return t=>function(e,t){const{center:n,radius:i}=e,o=e.radius2||i*i;return(t[0]-n[0])*(t[0]-n[0])+(t[1]-n[1])*(t[1]-n[1])+(t[2]-n[2])*(t[2]-n[2])<=o}(e,t)}const l={center:i,xRadius:o,yRadius:a,zRadius:r},{precalculated:d}=Na(l,{});return d}const Ba=new Oa("Circle",ya.regionFill,ya.setValue,Va,ya.determineSegmentIndex,ya.preview),Ha=new Oa("CircleThreshold",ya.regionFill,ya.setValue,Va,ya.determineSegmentIndex,ya.dynamicThreshold,ya.threshold,ya.preview,ya.islandRemoval),Fa=Ba.strategyFunction,Ga=Ha.strategyFunction,{transformWorldToIndex:$a}=ie.utilities,qa={[Ca.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=Sn.vec3.fromValues(0,0,0);t.forEach((e=>{Sn.vec3.add(r,r,e)})),Sn.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=$a(o,r);const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=mi(t.slice(0,2),o,i);a.boundsIJK=s,n?n.isInObject=Wa({topLeftWorld:l,bottomRightWorld:d,center:r}):a.isInObject=Wa({topLeftWorld:l,bottomRightWorld:d,center:r})}},za=new Oa("Sphere",ya.regionFill,ya.setValue,qa,ya.determineSegmentIndex,ya.preview),ja=za.strategyFunction,Ka=new Oa("SphereThreshold",...za.compositions,ya.dynamicThreshold,ya.threshold,ya.islandRemoval).strategyFunction,Ya=new Oa("EraseSphere",ya.erase,...za.compositions).strategyFunction,Xa=new Oa("EraseCircle",ya.erase,...Ba.compositions).strategyFunction,Ja=function(e,t,n){return`${e}::${t}::${n}`},Za=function(e,t){Object.keys(e).forEach((n=>{const i=t.getAttribute(n),o=e[n];void 0===o||""===o?t.removeAttribute(n):i!==o&&t.setAttribute(n,o)}))},Qa=function(e,t){Object.keys(e).forEach((n=>{const i=e[n];void 0!==i&&""!==i&&t.setAttribute(n,i)}))},er=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const{color:s,fill:l,width:d,lineWidth:c,lineDash:h,fillOpacity:u,strokeOpacity:g}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},a),m=c||d,v=Ja(t,"circle",n),p=e.getSvgNode(v),f={cx:`${i[0]}`,cy:`${i[1]}`,r:`${o}`,stroke:s,fill:l,"stroke-width":m,"stroke-dasharray":h,"fill-opacity":u,"stroke-opacity":g};if(p)Za(f,p),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),Qa(f,t),e.appendNode(t,v)}},tr=Symbol("DefinedCursors"),nr=new Set(["alias","all-scroll","auto","cell","col-resize","context-menu","copy","crosshair","default","e-resize","ew-resize","grab","grabbing","help","move","ne-resize","nesw-resize","no-drop","none","not-allowed","n-resize","ns-resize","nw-resize","nwse-resize","pointer","progress","row-resize","se-resize","s-resize","sw-resize","text","vertical-text","wait","w-resize","zoom-in","zoom-out"]);class ir{constructor(e,t){ae(this,"name",void 0),ae(this,"fallback",void 0),this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){const{fallback:t}=this;return t instanceof ir?`${e}, ${t.getStyleProperty()}`:e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){const t=or(ir,tr);let n=t.get(e);return n instanceof ir?n:nr.has(e)?(n=new ir(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof ir&&(or(ir,tr).set(e,t),!0)}}function or(e,t){let n=e[t];return n instanceof Map||(n=new Map,Object.defineProperty(e,t,{value:n})),n}const ar=nr.values(),rr=Symbol("ElementCursorsMap");function sr(e,t){hr(e)[0]=t,lr(e,t)}function lr(e,t){const n=hr(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof ir?t:ir.getDefinedCursor("auto")).getStyleProperty()}function dr(e){lr(e,hr(e)[1])}function cr(e){lr(e,ir.getDefinedCursor("none"))}function hr(e){let t=hr[rr];t instanceof WeakMap||(t=new WeakMap,Object.defineProperty(hr,rr,{value:t}));let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}function ur(e){return ag(e)}function gr(e){const t=ur(e);return t?Nu(t.segmentationId):null}function mr(e,t){rg(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function vr(e,t){const n=Nu(e);if(!n)throw new Error(`No segmentation state found for ${e}`);const{segmentsLocked:i}=n;return i.has(t)}function pr(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=Nu(e);if(!i)throw new Error(`No segmentation state found for ${e}`);const{segmentsLocked:o}=i;n?o.add(t):o.delete(t),nn(e)}function fr(e){const t=Nu(e);if(!t)throw new Error(`No segmentation state found for ${e}`);const{segmentsLocked:n}=t;return Array.from(n)}function wr(e){const t=ai(e);if(void 0===t)return;br(e).forEach((e=>{e.invalidateBrushCursor()}));const n=t.getViewportsInfo(),i=Object.keys(n).map((e=>n[e]));if(!i.length)return;const{renderingEngineId:o}=i[0],a=t.getViewportIds();(0,ie.getRenderingEngine)(o),oi(a)}function Ir(e,t){const n=Nu(e);"string"==typeof t&&(console.warn("segmentIndex is a string, converting to number"),t=Number(t)),n?.activeSegmentIndex!==t&&(n.activeSegmentIndex=t,nn(e)),qu(e).forEach((e=>{wr(Vn(e).id)}))}function Er(e){const t=Nu(e);if(t)return t.activeSegmentIndex}class Cr extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:Fa,ERASE_INSIDE_CIRCLE:Xa,FILL_INSIDE_SPHERE:ja,ERASE_INSIDE_SPHERE:Ya,THRESHOLD_INSIDE_CIRCLE:Ga,THRESHOLD_INSIDE_SPHERE:Ka},strategySpecificConfiguration:{THRESHOLD:{threshold:[-150,-70]}},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",thresholdVolumeId:null,brushSize:25,preview:{enabled:!1,previewColors:{},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[Ca.AcceptPreview]:{method:Ca.AcceptPreview,bindings:[{key:"Enter"}]},[Ca.RejectPreview]:{method:Ca.RejectPreview,bindings:[{key:"Escape"}]}}}}),ae(this,"_editData",void 0),ae(this,"_hoverData",void 0),ae(this,"_previewData",{preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}),ae(this,"onSetToolPassive",(e=>{this.disableCursor()})),ae(this,"onSetToolEnabled",(()=>{this.disableCursor()})),ae(this,"onSetToolDisabled",(e=>{this.disableCursor()})),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n);this._editData=this.createEditData(n),this._activateDraw(n),cr(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const o=this._hoverData||this.createHoverData(n);oi(o.viewportIdsToRender);const a=this.getOperationData(n);return this.applyActiveStrategyCallback(i,a,Ca.OnInteractionStart),!0})),ae(this,"mouseMoveCallback",(e=>{if(this.mode===Ye.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:i}=this.configuration.preview,{currentPoints:o,element:a}=e.detail,{canvas:r}=o,{preview:s,startPoint:l,timer:d,timerStart:c,isDrag:h}=this._previewData,u=Sn.vec2.distance(r,l),g=Date.now()-c;if((u>n||g>t&&u>i)&&(d&&(window.clearTimeout(d),this._previewData.timer=null),s&&!h&&this.rejectPreview(a)),!this._previewData.timer){const e=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:e,startPoint:r,element:a})}}})),ae(this,"previewCallback",(()=>{this._previewData.preview||(this._previewData.timer=null,this._previewData.preview=this.applyActiveStrategyCallback((0,ie.getEnabledElement)(this._previewData.element),this.getOperationData(this._previewData.element),Ca.Preview))})),ae(this,"_dragCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,ie.getEnabledElement)(n),{renderingEngine:a}=o;this.updateCursor(e);const{viewportIdsToRender:r}=this._hoverData;oi(r);const s=Sn.vec2.distance(i.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:d}=this.configuration.preview;!this._previewData.isDrag&&this._previewData.preview&&Date.now()-this._previewData.timerStart<l&&s<d||(this._previewData.preview=this.applyActiveStrategy(o,this.getOperationData(n)),this._previewData.element=n,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=i.canvas)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),o=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(i,o),this._deactivateDraw(n),dr(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(i,o,Ca.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback)}))}disableCursor(){this._hoverData=void 0,this.rejectPreview()}createEditData(e){const t=(0,ie.getEnabledElement)(e),{viewport:n}=t,i=ur(n.id);if(!i)throw new Error("No active segmentation detected, create a segmentation representation before using the brush tool");const{segmentationId:o,type:a}=i;if(a===Ct.Contour)throw new Error("Not implemented yet");const r=fr(o),{representationData:s}=Nu(o);if(Yt(s[Ct.Labelmap],n)){const{volumeId:e}=s[a],t=n.getActors();if(n instanceof ie.StackViewport){const e=new CustomEvent(ie.Enums.Events.ERROR_EVENT,{detail:{type:"Segmentation",message:"Cannot perform brush operation on the selected viewport"},cancelable:!0});return ie.eventTarget.dispatchEvent(e),null}const i=t.map((e=>ie.cache.getVolume(e.referencedId))),o=ie.cache.getVolume(e),l=i.find((e=>ie.utilities.isEqual(e.dimensions,o.dimensions)))?.volumeId||i[0]?.volumeId;return{volumeId:e,referencedVolumeId:this.configuration.thresholdVolumeId??l,segmentsLocked:r}}{const e=sg(n.id,o);if(!e)return;if(this.configuration.activeStrategy.includes("SPHERE"))throw new Error("Sphere manipulation is not supported for stacks of image segmentations yet");return{imageId:e,segmentsLocked:r}}}createHoverData(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=i.getCamera(),{viewPlaneNormal:a,viewUp:r}=o,s=[i.id],{segmentIndex:l,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h}=this.getActiveSegmentationData(i)||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...r],FrameOfReferenceUID:i.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:h},data:{}},centerCanvas:t,segmentIndex:l,viewport:i,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h,viewportIdsToRender:s}}getActiveSegmentationData(e){const t=ur(e.id);if(!t)return void console.warn("No active segmentation detected, create one before using the brush tool");const{segmentationId:n,segmentationRepresentationUID:i}=t,o=Er(n);return{segmentIndex:o,segmentationId:n,segmentationRepresentationUID:i,segmentColor:mn(i,o)}}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas;this._hoverData=this.createHoverData(n,o),this._calculateCursor(n,o),this._hoverData&&oi(this._hoverData.viewportIdsToRender)}getOperationData(e){const t=this._editData||this.createEditData(e),{segmentIndex:n,segmentationId:i,segmentationRepresentationUID:o,brushCursor:a}=this._hoverData||this.createHoverData(e),{data:r,metadata:s={}}=a||{},{viewPlaneNormal:l,viewUp:d}=s;return{...t,points:r?.handles?.points,segmentIndex:n,previewColors:this.configuration.preview.enabled?this.configuration.preview.previewColors:null,viewPlaneNormal:l,toolGroupId:this.toolGroupId,segmentationId:i,segmentationRepresentationUID:o,viewUp:d,strategySpecificConfiguration:this.configuration.strategySpecificConfiguration,preview:this._previewData?.preview}}_calculateCursor(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,{canvasToWorld:o}=i,a=i.getCamera(),{brushSize:r}=this.configuration,s=Sn.vec3.fromValues(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=Sn.vec3.fromValues(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),d=Sn.vec3.create();Sn.vec3.cross(d,s,l);const c=o([t[0],t[1]]),h=Sn.vec3.create(),u=Sn.vec3.create(),g=Sn.vec3.create(),m=Sn.vec3.create();for(let e=0;e<=2;e++)h[e]=c[e]-s[e]*r,u[e]=c[e]+s[e]*r,g[e]=c[e]-d[e]*r,m[e]=c[e]+d[e]*r;if(!this._hoverData)return;const{brushCursor:v}=this._hoverData,{data:p}=v;void 0===p.handles&&(p.handles={}),p.handles.points=[h,u,g,m];const f=this.configuration.activeStrategy,w=this.configuration.strategies[f];"function"==typeof w.computeInnerCircleRadius&&w.computeInnerCircleRadius({configuration:this.configuration,viewport:i}),p.invalidated=!1}rejectPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e||!this._previewData.preview)return;const t=(0,ie.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Ca.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e)return;const t=(0,ie.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Ca.AcceptPreview),this._previewData.isDrag=!1,this._previewData.preview=null}invalidateBrushCursor(){if(void 0===this._hoverData)return;const{data:e}=this._hoverData.brushCursor,{viewport:t}=this._hoverData;e.invalidated=!0;const{segmentColor:n}=this.getActiveSegmentationData(t)||{};this._hoverData.brushCursor.metadata.segmentColor=n}renderAnnotation(e,t){if(!this._hoverData)return;const{viewport:n}=e;if(!this._hoverData.viewportIdsToRender.includes(n.id))return;const i=this._hoverData.brushCursor;if(!0===i.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=n;this._calculateCursor(t,e)}const o=i.metadata;if(!o)return;const a=o.brushCursorUID,r=i.data,{points:s}=r.handles,l=s.map((e=>n.worldToCanvas(e))),d=l[0],c=l[1],h=[Math.floor((d[0]+c[0])/2),Math.floor((d[1]+c[1])/2)],u=Math.abs(d[1]-Math.floor((d[1]+c[1])/2)),g=`rgb(${o.segmentColor?.slice(0,3)||[0,0,0]})`;if(!n.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");er(t,a,"0",h,u,{color:g});const m=this.configuration.activeStrategy,{dynamicRadiusInCanvas:v}=this.configuration.strategySpecificConfiguration[m]||{dynamicRadiusInCanvas:0};v&&er(t,a,"1",h,v,{color:g})}}ae(Cr,"toolName",void 0),Cr.toolName="Brush";const _r=Cr;function br(e,t){const n=ai(e);if(void 0===n)return;const i=n._toolInstances;return Object.keys(i).length?t&&i[t]?[i[t]]:Object.values(i).filter((e=>e instanceof _r)):void 0}function Tr(e,t,n,i){const o=[];for(let e=0;e<2;e++)for(let t=0;t<2;t++)for(let a=0;a<2;a++){const r=[...i];r[0]=r[0]+(2*e-1)*n[0]/2,r[1]=r[1]+(2*t-1)*n[1]/2,r[2]=r[2]+(2*a-1)*n[2]/2,o.push(r)}return hi(o.map((t=>ie.utilities.transformWorldToIndex(e,t))),t)}function Dr(e,t){const{spacing:n}=e,i=e.voxelManager.getScalarDataLength(),o=[];let a=0;for(let e=0;e<t.length;e++){const{imageData:l,spacing:d,dimensions:c,voxelManager:h}=t[e].volume,u=t[e].volume.voxelManager.getScalarDataLength();u===i&&(r=d,s=n,JSON.stringify(r)===JSON.stringify(s))&&(a=e);const g=t[e].lower,m=t[e].upper;o.push({imageData:l,lower:g,upper:m,spacing:d,dimensions:c,volumeSize:u,voxelManager:h})}var r,s;return{volumeInfoList:o,baseVolumeIdx:a}}const Sr=function(e,t,n){const{imageData:i}=e,{overwrite:o,boundsIJK:a}=n,r=n?.overlapType||0,s=e.voxelManager,l=e.voxelManager.getScalarDataLength();if(o)for(let e=0;e<l;e++)s.setAtIndex(e,0);const{baseVolumeIdx:d,volumeInfoList:c}=Dr(e,t);let h,u,g;const m=(e,t,n)=>{const{imageData:i,dimensions:o,lower:a,upper:s}=e,l=Tr(i,o,t,n);u=0,h=0,g={lower:a,upper:s};let d=!1;const{voxelManager:c}=i.get("voxelManager");return c.forEach((e=>{let{value:t}=e;u+=1,t>=g.lower&&t<=g.upper&&(h+=1)}),{imageData:i,boundsIJK:l}),0===r?d=h>0:1==r&&(d=h===u),d},v=(e,t)=>{const{imageData:n,lower:i,upper:o}=e,a=n.get("voxelManager").voxelManager,r=a.toIndex(t),s=a.getAtIndex(r);return!(s<=i||s>=o)};return e.voxelManager.forEach((e=>{let{index:t,pointIJK:i,pointLPS:o}=e,a=c.length>0;for(let e=0;e<c.length&&(a=c[e].volumeSize===l?v(c[e],i):m(c[e],c[d].spacing,o),a);e++);a&&s.setAtIndex(t,n.segmentIndex||1)}),{imageData:i,boundsIJK:a}),on(e.volumeId),e},yr=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5?arguments[5]:void 0;const{color:r,handleRadius:s,width:l,lineWidth:d,fill:c,type:h,opacity:u}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},o),g=d||l,m=Ja(t,"handle",`hg-${n}-index-${a}`);let v;if("circle"===h)v={cx:`${i[0]}`,cy:`${i[1]}`,r:s,stroke:r,fill:c,"stroke-width":g,opacity:u};else{if("rect"!==h)throw new Error(`Unsupported handle type: ${h}`);{const e=1.5*parseFloat(s);v={x:""+(i[0]-.5*e),y:""+(i[1]-.5*e),width:`${e}`,height:`${e}`,stroke:r,fill:c,"stroke-width":g,rx:""+.1*e,opacity:u}}}const p=e.getSvgNode(m);if(p)Za(v,p),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg",h);Qa(v,t),e.appendNode(t,m)}},xr=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};i.forEach(((i,a)=>{yr(e,t,n,i,o,a)}))};function Mr(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),c=l||s,h=Ja(t,"rect",n),u=e.getSvgNode(h),[g,m,v,p]=i,f=Math.hypot(g[0]-m[0],g[1]-m[1]),w=Math.hypot(g[0]-v[0],g[1]-v[1]),I=[(p[0]+g[0])/2,(p[1]+g[1])/2],E=[(v[0]+g[0])/2,(v[1]+g[1])/2],C=180*Math.atan2(I[1]-E[1],I[0]-E[0])/Math.PI,_={x:""+(I[0]-f/2),y:""+(I[1]-w/2),width:`${f}`,height:`${w}`,stroke:r,fill:"transparent",transform:`rotate(${C} ${I[0]} ${I[1]})`,"stroke-width":c,"stroke-dasharray":d};if(u)Za(_,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==a&&t.setAttribute("data-id",a),Qa(_,t),e.appendNode(t,h)}}function Or(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";Mr(e,t,n,[[i[0],i[1]],[o[0],i[1]],[i[0],o[1]],[o[0],o[1]]],a,r)}const{EPSILON:Pr}=ie.CONSTANTS,Ar=1-Pr;function Rr(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=ie.metaData.get("imagePlaneModule",n),o=Sn.vec3.fromValues(i[0],i[1],i[2]),a=Sn.vec3.fromValues(i[3],i[4],i[5]);t=Sn.vec3.create(),Sn.vec3.cross(t,o,a),e.metadata.viewPlaneNormal=t}const n=Math.abs(Sn.vec3.dot(i,t))>Ar;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.handles.points[0];if(!e.isVisible)continue;const n=Sn.vec3.create();Sn.vec3.sub(n,r,t);const o=Sn.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}function Lr(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e instanceof ie.VolumeViewport){const n=e.getCamera(),{spacingInNormalDirection:i}=ie.utilities.getTargetVolumeAndSpacingInNormalDir(e,n);return Rr(t,n,i)}if(e instanceof ie.StackViewport){const t=e.getCurrentImageId(),i=t.indexOf(":");n.imageURI=t.substring(i+1)}return t.filter((t=>!!t.isVisible&&(!!t.data.isCanvasAnnotation||e.isReferenceViewable(t.metadata,n))))}const Nr=new class{constructor(){ae(this,"config",void 0),this._initializeConfig({color:"rgb(255, 255, 0)",colorHighlighted:"rgb(0, 255, 0)",colorSelected:"rgb(0, 220, 0)",colorLocked:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"",shadow:!0,textBoxVisibility:!0,textBoxFontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",textBoxFontSize:"14px",textBoxColor:"rgb(255, 255, 0)",textBoxColorHighlighted:"rgb(0, 255, 0)",textBoxColorSelected:"rgb(0, 255, 0)",textBoxColorLocked:"rgb(255, 255, 0)",textBoxBackground:"",textBoxLinkLineWidth:"1",textBoxLinkLineDash:"2,3",textBoxShadow:!0})}getAnnotationToolStyles(e){return this.config.annotations&&this.config.annotations[e]}getViewportToolStyles(e){return this.config.viewports&&this.config.viewports[e]}getToolGroupToolStyles(e){return this.config.toolGroups&&this.config.toolGroups[e]}getDefaultToolStyles(){return this.config.default}setAnnotationStyles(e,t){let n=this.config.annotations;n||(this.config={...this.config,annotations:{}},n=this.config.annotations),n[e]=t}setViewportToolStyles(e,t){let n=this.config.viewports;n||(this.config={...this.config,viewports:{}},n=this.config.viewports),n[e]=t}setToolGroupToolStyles(e,t){let n=this.config.toolGroups;n||(this.config={...this.config,toolGroups:{}},n=this.config.toolGroups),n[e]=t}setDefaultToolStyles(e){this.config.default=e}getStyleProperty(e,t){const{annotationUID:n,viewportId:i,toolGroupId:o,toolName:a}=t;return this._getToolStyle(e,n,i,o,a)}_getToolStyle(e,t,n,i,o){if(t){const n=this.getAnnotationToolStyles(t);if(n&&void 0!==n[e])return n[e]}if(n){const t=this.getViewportToolStyles(n);if(t){if(t[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(i){const t=this.getToolGroupToolStyles(i);if(t){if(t[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}const a=this.getDefaultToolStyles();return a[o]&&void 0!==a[o][e]?a[o][e]:a.global&&void 0!==a.global[e]?a.global[e]:void 0}_initializeConfig(e){const t={};for(const n in e)t[n]=e[n];this.config={default:{global:t}}}};function Ur(e,t,n,i){const o=function(e,t,n){const i=[`${e}`];return t&&i.push(`${i[0]}${t}`),n&&i.push(`${i[i.length-1]}${n}`),i}(e,n,i);for(let e=o.length-1;e>=0;--e){const n=Nr.getStyleProperty(o[e],t);if(void 0!==n)return n}}var kr=function(e){return e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e.AutoGenerated="AutoGenerated",e}(kr||{});const Vr=kr,Wr=function(e){if(e){if(e.data&&e.highlighted)return Vr.Highlighted;if(De(e.annotationUID))return Vr.Selected;if(ue(e))return Vr.Locked;if(e.data&&e.autoGenerated)return Vr.AutoGenerated}return Vr.Default};class Br extends Ia{constructor(){super(...arguments),ae(this,"onImageSpacingCalibrated",(e=>{const{element:t,imageId:n}=e.detail,i=ie.utilities.imageIdToURI(n),o=ot();o.getFramesOfReference().forEach((e=>{const n=o.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach((e=>{e.metadata?.referencedImageId&&ie.utilities.imageIdToURI(e.metadata.referencedImageId)===i&&(e.invalidated=!0,e.data.cachedStats={})})),ni(t))}))}))}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ie.getEnabledElement)(e),{viewport:i}=n;return Lr(i,t)}getReferencedImageId(e,t,n,i){const o=this.getTargetId(e);let a=o.split(/^[a-zA-Z]+:/)[1];if(e instanceof ie.BaseVolumeViewport){const e=ie.utilities.getVolumeId(o),i=ie.cache.getVolume(e);a=ie.utilities.getClosestImageId(i,t,n)}return a}getStyle(e,t,n){return Ur(e,t,Wr(n),this.mode)}}ae(Br,"toolName",void 0),Br.toolName="AnnotationDisplayTool";const Hr=Br;class Fr extends Hr{static createAnnotation(){let e={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.toolName},data:{text:"",handles:{points:new Array,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];for(const t of n)e=ie.utilities.deepMerge(e,t);return e}static createAnnotationForViewport(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return this.createAnnotation({metadata:e.getViewReference()},...n)}static createAndAddAnnotation(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];const o=this.createAnnotationForViewport(e,...n);gt(o,e.element),Qe(o,e.element)}constructor(e,t){super(e,t),ae(this,"mouseMoveCallback",((e,t)=>{if(!t)return!1;const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(const e of t){if(ue(e)||!Re(e.annotationUID))continue;const{data:t}=e,i=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,o,6),s=r&&!e.highlighted,l=!r&&e.highlighted;s||l?(e.highlighted=!e.highlighted,a=!0):t.handles&&t.handles.activeHandleIndex!==i&&(a=!0)}return a})),e.configuration?.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),e.configuration?.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{isCanvasAnnotation:s}=r,{points:l,textBox:d}=r.handles;if(d){const{worldBoundingBox:e}=d;if(e){const t={topLeft:a.worldToCanvas(e.topLeft),topRight:a.worldToCanvas(e.topRight),bottomLeft:a.worldToCanvas(e.bottomLeft),bottomRight:a.worldToCanvas(e.bottomRight)};if(n[0]>=t.topLeft[0]&&n[0]<=t.bottomRight[0]&&n[1]>=t.topLeft[1]&&n[1]<=t.bottomRight[1])return r.handles.activeHandleIndex=null,d}}for(let e=0;e<l?.length;e++){const t=l[e],o=s?t.slice(0,2):a.worldToCanvas(t);if(!0==Sn.vec2.distance(n,o)<i)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null}getLinkedTextBoxStyle(e,t){return{visibility:this.getStyle("textBoxVisibility",e,t),fontFamily:this.getStyle("textBoxFontFamily",e,t),fontSize:this.getStyle("textBoxFontSize",e,t),color:this.getStyle("textBoxColor",e,t),shadow:this.getStyle("textBoxShadow",e,t),background:this.getStyle("textBoxBackground",e,t),lineWidth:this.getStyle("textBoxLinkLineWidth",e,t),lineDash:this.getStyle("textBoxLinkLineDash",e,t)}}isSuvScaled(e,t,n){if(e instanceof ie.BaseVolumeViewport){const e=ie.utilities.getVolumeId(t),n=ie.cache.getVolume(e);return void 0!==n?.scaling?.PT}const i=n&&ie.metaData.get("scalingModule",n);return"number"==typeof i?.suvbw}getAnnotationStyle(e){const{annotation:t,styleSpecifier:n}=e,i=e=>this.getStyle(e,n,t),{annotationUID:o}=t,a=Re(o),r=ue(t),s=i("lineWidth"),l=i("lineDash"),d=i("color");return{visibility:a,locked:r,color:d,lineWidth:s,lineDash:l,lineOpacity:1,fillColor:d,fillOpacity:0,shadow:i("shadow"),textbox:this.getLinkedTextBoxStyle(n,t)}}_imagePointNearToolOrHandle(e,t,n,i){return!!this.getHandleNearImagePoint(e,t,n,i)||(!!this.isPointNearTool(e,t,n,i,"mouse")||void 0)}}ae(Fr,"toolName",void 0),Fr.toolName="AnnotationTool";const Gr=Fr;function $r(e){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");return t.setAttribute("x","0"),t.setAttribute("dy","1.2em"),t.textContent=e,t}function qr(e,t){let n=e.querySelector("rect.background");if(!t)return n&&e.removeChild(n),e.getBBox();n||(n=document.createElementNS("http://www.w3.org/2000/svg","rect"),n.setAttribute("class","background"),e.insertBefore(n,e.firstChild));const i=e.getBBox(),o={x:`${i.x}`,y:`${i.y}`,width:`${i.width}`,height:`${i.height}`,fill:t};return Za(o,n),i}const zr=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return function(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""],o=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;const{padding:r,color:s,fontFamily:l,fontSize:d,background:c}=a;let h;const[u,g]=[o[0]+r,o[1]+r],m=Ja(t,"text",n),v=e.getSvgNode(m);if(v){const t=v.querySelector("text"),n=Array.from(t.children);for(let e=0;e<n.length;e++){const t=n[e],o=i[e]||"";t.textContent=o}if(i.length>n.length){for(let e=0;e<i.length-n.length;e++){const o=$r(i[e+n.length]);t.appendChild(o)}v.appendChild(t),e.appendNode(v,m)}const o={transform:`translate(${u} ${g})`};Za({fill:s,"font-size":d,"font-family":l},t),Za(o,v),h=qr(v,c),e.setNodeTouched(m)}else{const t=document.createElementNS("http://www.w3.org/2000/svg","g");t.setAttribute("transform",`translate(${u} ${g})`);const n=function(e,t){const{color:n,fontFamily:i,fontSize:o}=t,a=document.createElementNS("http://www.w3.org/2000/svg","text"),r=`user-select: none; pointer-events: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0);${`filter:url(#shadow-${e.svgLayerElement.id});`}`;return a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("fill",n),a.setAttribute("font-family",i),a.setAttribute("font-size",o),a.setAttribute("style",r),a}(e,a);for(let e=0;e<i.length;e++){const t=$r(i[e]);n.appendChild(t)}t.appendChild(n),e.appendNode(t,m),h=qr(t,c)}return Object.assign({},h,{x:u,y:g,height:h.height+r,width:h.width+r})}(e,t,n,i,o,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},a))};function jr(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:s,width:l,lineWidth:d,lineDash:c,shadow:h}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0,shadow:void 0},a),u=d||l,g=Ja(t,"line",n),m=e.getSvgNode(g),v=h?`filter:url(#shadow-${e.svgLayerElement.id});`:"",p={x1:`${i[0]}`,y1:`${i[1]}`,x2:`${o[0]}`,y2:`${o[1]}`,stroke:s,style:v,"stroke-width":u,"stroke-dasharray":c};if(m)Za(p,m),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),Qa(p,t),e.appendNode(t,g)}}function Kr(e,t){let n=[0,0],i=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){const o=function(e,t){const[n,i]=e,[o,a]=t;return Math.sqrt(Math.pow(n-o,2)+Math.pow(i-a,2))}(t,e);o<i&&(i=o,n=[...e])})),n}const Yr=function(e,t,n,i,o,a,r){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};const l=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},s),d=zr(e,t,n,i,o,l);return function(e,t,n,i,o,a){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};const s=i.length>0?Kr(i,o):o,l=function(e){const{x:t,y:n,height:i,width:o}=e,a=o/2,r=i/2;return[[t+a,n],[t,n+r],[t+a,n+i],[t+o,n+r]]}(a);jr(e,t,`link-${n}`,s,Kr(l,s),Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r))}(e,t,n,a,o,d,l),d};function Xr(e,t,n){if(2!==e.length||2!==t.length||2!==n.length)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(zi(e,t,n))}function Jr(e,t){if(4!==e.length||2!==t.length)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[n,i,o,a]=e;let r=655535;const s=function(e,t,n,i){return{top:[[e,t],[e+n,t]],right:[[e+n,t],[e+n,t+i]],bottom:[[e+n,t+i],[e,t+i]],left:[[e,t+i],[e,t]]}}(n,i,o,a);return Object.keys(s).forEach((e=>{const[n,i]=s[e],o=Xr(n,i,t);o<r&&(r=o)})),r}function Zr(e){const t=function(e){const t=[e[0],e[1]].sort((function(e,t){return e[0]<t[0]?-1:1})),n=[e[0],e[1]].sort((function(e,t){return e[1]<t[1]?-1:1})),i=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:i}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function Qr(e,t,n,i){const o=Sn.vec3.create();Sn.vec3.cross(o,t,e);const a=Sn.vec3.fromValues(...n),r=Sn.vec3.fromValues(...i),s=Sn.vec3.create();Sn.vec3.subtract(s,a,r);const l=Sn.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=Sn.vec3.dot(s,o)/(l*Sn.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}function es(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";const n=ie.metaData.get("generalSeriesModule",e);if("PT"===n?.modality){const t=ie.metaData.get("petSeriesModule",e);return t?.units||"unitless"}return"unknown"}(t,n):""}function ts(e,t){if(e instanceof ie.BaseVolumeViewport){const e=ie.utilities.getVolumeId(t),n=ie.cache.getVolume(e);return!!n?.scaling&&Object.keys(n.scaling).length>0}if(e instanceof ie.StackViewport){const{preScale:t}=e.getImageData()||{};return!!t?.scaled}return!1}class ns{}ae(ns,"run",void 0),ae(ns,"getStatistics",void 0);const is=ns;var os;const{PointsManager:as}=ie.utilities;class rs extends is{static statsInit(e){e.storePointData||(rs.pointsInShape=null)}}function ss(e){return 1===e.length?e[0]:e}os=rs,ae(rs,"max",[-1/0]),ae(rs,"min",[1/0]),ae(rs,"sum",[0]),ae(rs,"count",0),ae(rs,"runMean",[0]),ae(rs,"m2",[0]),ae(rs,"pointsInShape",as.create3(1024)),ae(rs,"statsCallback",(e=>{let{value:t,pointLPS:n=null}=e;Array.isArray(t)&&t.length>1&&1===os.max.length&&(os.max.push(os.max[0],os.max[0]),os.min.push(os.min[0],os.min[0]),os.sum.push(os.sum[0],os.sum[0]),os.runMean.push(0,0),os.m2.push(os.m2[0],os.m2[0])),os.pointsInShape?.push(n);const i=Array.isArray(t)?t:[t];os.count+=1,os.max.map(((e,t)=>{const n=i[t],o=n-os.runMean[t];os.sum[t]+=n,os.runMean[t]+=o/os.count;const a=n-os.runMean[t];os.m2[t]+=o*a,os.min[t]=Math.min(os.min[t],n),os.max[t]=Math.max(e,n)}))})),ae(rs,"getStatistics",(e=>{const t=os.sum.map((e=>e/os.count)),n=os.m2.map((e=>Math.sqrt(e/os.count))),i=e?.unit||null,o={max:{name:"max",label:"Max Pixel",value:ss(os.max),unit:i},min:{name:"min",label:"Min Pixel",value:ss(os.min),unit:i},mean:{name:"mean",label:"Mean Pixel",value:ss(t),unit:i},stdDev:{name:"stdDev",label:"Standard Deviation",value:ss(n),unit:i},count:{name:"count",label:"Pixel Count",value:os.count,unit:null},pointsInShape:os.pointsInShape,array:[]};return o.array.push(o.max,o.mean,o.stdDev,o.stdDev,o.count),os.max=[-1/0],os.min=[1/0],os.sum=[0],os.m2=[0],os.runMean=[0],os.count=0,os.pointsInShape=as.create3(1024),o}));const{transformWorldToIndex:ls}=ie.utilities;class ds extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,getTextLines:cs,statsCalculator:rs}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{label:"",handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},cachedStats:{}}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:u,top:g,width:m,height:v}=c;return Jr([u,g,m,v],h)<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),cr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:o}=s.handles;o.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,o=(0,ie.getEnabledElement)(n),{worldToCanvas:r,canvasToWorld:l}=o.viewport,d=e.world,{points:c}=s.handles;let h,u,g,m,v,p,f,w;switch(c[a]=[...d],a){case 0:case 3:h=r(c[0]),m=r(c[3]),u=[m[0],h[1]],g=[h[0],m[1]],p=l(u),f=l(g),c[1]=p,c[2]=f;break;case 1:case 2:u=r(c[1]),g=r(c[2]),h=[g[0],u[1]],m=[u[0],g[1]],v=l(h),w=l(m),c[0]=v,c[3]=w}i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles,m=u.map((e=>i.worldToCanvas(e)));l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),{viewPlaneNormal:w,viewUp:I}=i.getCamera();if(h.cachedStats[r]&&null!=h.cachedStats[r].areaUnits){if(d.invalidated&&(this._throttledCalculateCachedStats(d,w,I,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null},this._calculateCachedStats(d,w,I,s,e);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let E;if(!Re(c))continue;ue(d)||this.editData||null===g||(E=[m[g]]),E&&xr(t,c,"0",E,{color:v}),Mr(t,c,"0",m,{color:v,lineDash:f,lineWidth:p},`${c}-rect`),n=!0;const C=this.getLinkedTextBoxStyle(l,d);if(!C.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const _=this.configuration.getTextLines(h,r);if(!_||0===_.length)continue;if(!h.handles.textBox.hasMoved){const e=Zr(m);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const b=i.worldToCanvas(h.handles.textBox.worldPosition),T=Yr(t,c,"1",_,b,m,{},C),{x:D,y:S,width:y,height:x}=T;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([D,S]),topRight:i.canvasToWorld([D+y,S]),bottomLeft:i.canvasToWorld([D,S+x]),bottomRight:i.canvasToWorld([D+y,S+x])}}return n})),ae(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),ae(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewport:r}=o,{element:s}=r,l=a.handles.points[0],d=a.handles.points[3],{cachedStats:c}=a,h=Object.keys(c);for(let o=0;o<h.length;o++){const a=h[o],s=this.getTargetIdImage(a,i);if(!s)continue;const{dimensions:u,imageData:g,metadata:m,voxelManager:v}=s,p=ls(g,l);p[0]=Math.floor(p[0]),p[1]=Math.floor(p[1]),p[2]=Math.floor(p[2]);const f=ls(g,d);if(f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(f[2]),this._isInsideVolume(p,f,u)){this.isHandleOutsideImage=!1;const i=[[Math.min(p[0],f[0]),Math.max(p[0],f[0])],[Math.min(p[1],f[1]),Math.max(p[1],f[1])],[Math.min(p[2],f[2]),Math.max(p[2],f[2])]],{worldWidth:o,worldHeight:h}=Qr(t,n,l,d),u=[p,f],{scale:w,areaUnits:I}=Ln(s,u),E=Math.abs(o*h)/(w*w),C={isPreScaled:ts(r,a),isSuvScaled:this.isSuvScaled(r,a,e.metadata.referencedImageId)},_=es(m.Modality,e.metadata.referencedImageId,C),b=v.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:i,imageData:g,returnPoints:this.configuration.storePointData}),T=this.configuration.statsCalculator.getStatistics();c[a]={Modality:m.Modality,area:E,mean:T.mean?.value,stdDev:T.stdDev?.value,max:T.max?.value,statsArray:T.array,pointsInShape:b,areaUnits:I,pixelValueUnits:_}}else this.isHandleOutsideImage=!0,c[a]={Modality:m.Modality}}return e.invalidated=!1,Qe(e,s),c})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}}function cs(e,t){const n=e.cachedStats[t],{area:i,mean:o,max:a,stdDev:r,areaUnits:s,pixelValueUnits:l}=n;if(void 0===o)return;const d=[];return d.push(`Area: ${tc(i)} ${s}`),d.push(`Mean: ${tc(o)} ${l}`),d.push(`Max: ${tc(a)} ${l}`),d.push(`Std Dev: ${tc(r)} ${l}`),d}ae(ds,"toolName",void 0),ds.toolName="RectangleROI";const hs=ds;class us extends hs{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getTargetId(r);let u,g;if(r instanceof ie.StackViewport)u=h.split("imageId:")[1];else{g=ie.utilities.getVolumeId(h);const e=ie.cache.getVolume(g);u=ie.utilities.getClosestImageId(e,o,d)}const m=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:m,referencedImageId:u,toolName:this.getToolName(),volumeId:g},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},segmentationId:null}};gt(v,i);const p=Vo(i,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:p,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(p),v})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const s=a[e],{annotationUID:l,data:d}=s,{points:c,activeHandleIndex:h}=d.handles,u=c.map((e=>i.worldToCanvas(e)));r.annotationUID=l;const g=this.getStyle("lineWidth",r,s),m=this.getStyle("lineDash",r,s),v=this.getStyle("color",r,s);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let p;(Qe(s,o),Re(l))&&(ue(s)||this.editData||null===h||(p=[u[h]]),p&&xr(t,l,"0",p,{color:v}),Or(t,l,"0",u[0],u[3],{color:v,lineDash:m,lineWidth:g}),n=!0)}return n}))}}ae(us,"toolName",void 0),us.toolName="RectangleROIThreshold";const gs=us,{EPSILON:ms}=ie.CONSTANTS,vs=1-ms;function ps(e,t){const{viewPlaneNormal:n}=t,i=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=ie.metaData.get("imagePlaneModule",n),o=Sn.vec3.fromValues(i[0],i[1],i[2]),a=Sn.vec3.fromValues(i[3],i[4],i[5]);t=Sn.vec3.create(),Sn.vec3.cross(t,o,a),e.metadata.viewPlaneNormal=t}const i=Math.abs(Sn.vec3.dot(n,t))>vs;return t&&i}));return i.length?i:[]}const{transformWorldToIndex:fs}=ie.utilities;class ws extends hs{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{storePointData:!1,numSlicesToPropagate:10,computePointsInsideVolume:!1,getTextLines:Is,statsCalculator:rs,showTextBox:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l;let h,u,g;if(r instanceof ie.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ie.utilities.getVolumeId(e),u=ie.cache.getVolume(g),h=ie.utilities.getClosestImageId(u,o,d)}const m=ie.utilities.getSpacingInNormalDirection(u,d),v=this._getStartCoordinate(o,d),p=this._getEndCoordinate(o,m,d),f=r.getFrameOfReferenceUID(),w={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:f,referencedImageId:h,toolName:this.getToolName(),volumeId:g,spacingInNormal:m},data:{label:"",startCoordinate:v,endCoordinate:p,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[h],statistics:[]},handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(w,u),gt(w,i);const I=Vo(i,this.getToolName());return this.editData={annotation:w,viewportIdsToRender:I,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(I),w})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID);const d=this.getTargetId(l.viewport),c=ie.cache.getVolume(d.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(i,d,c,l),oi(o),a&&et(i)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;let o=st(this.getToolName(),i.element);if(!o?.length)return n;o=ps(o,i.getCamera());const a={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let r=0;r<o.length;r++){const s=o[r],{annotationUID:l,data:d}=s,{startCoordinate:c,endCoordinate:h}=d,{points:u,activeHandleIndex:g}=d.handles,m=u.map((e=>i.worldToCanvas(e)));a.annotationUID=l;const v=this.getStyle("lineWidth",a,s),p=this.getStyle("lineDash",a,s),f=this.getStyle("color",a,s),w=i.getCamera().focalPoint,I=i.getCamera().viewPlaneNormal;let E=c,C=h;Array.isArray(c)&&(E=this._getCoordinateForViewplaneNormal(E,I)),Array.isArray(h)&&(C=this._getCoordinateForViewplaneNormal(C,I));const _=ie.utilities.roundToPrecision(E),b=ie.utilities.roundToPrecision(C),T=this._getCoordinateForViewplaneNormal(w,I),D=ie.utilities.roundToPrecision(T);if(D<Math.min(_,b)||D>Math.max(_,b))continue;s.invalidated&&this._throttledCalculateCachedStats(s,e);let S,y=!1;if(D!==_&&D!==b||(y=!0),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Re(l))continue;ue(s)||this.editData||null===g||!y||(S=[m[g]]),S&&xr(t,l,"0",S,{color:f});let x=p;if(y||(x=2),Or(t,l,"0",m[0],m[3],{color:f,lineDash:x,lineWidth:v}),n=!0,this.configuration.showTextBox&&this.configuration.calculatePointsInsideVolume){const e=this.getLinkedTextBoxStyle(a,s);if(!e.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const n=this.configuration.getTextLines(d);if(!n||0===n.length)continue;if(!d.handles.textBox.hasMoved){const e=Zr(m);d.handles.textBox.worldPosition=i.canvasToWorld(e)}const o=i.worldToCanvas(d.handles.textBox.worldPosition),r=Yr(t,l,"1",n,o,m,{},e),{x:c,y:h,width:u,height:g}=r;d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([c,h]),topRight:i.canvasToWorld([c+u,h]),bottomLeft:i.canvasToWorld([c,h+g]),bottomRight:i.canvasToWorld([c+u,h+g])}}}return n})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:r}=t,{startCoordinate:s,endCoordinate:l}=n,{points:d}=n.handles,c=fs(r,d[0]),h=fs(r,d[0]),u=Sn.vec3.create();r.indexToWorldVec3(c,u);const g=Sn.vec3.create();r.indexToWorldVec3(h,g),2==this._getIndexOfCoordinatesForViewplaneNormal(o)?(u[2]=s,g[2]=l):0==this._getIndexOfCoordinatesForViewplaneNormal(o)?(u[0]=s,g[0]=l):1==this._getIndexOfCoordinatesForViewplaneNormal(o)&&(u[1]=s,g[1]=l);const m=Sn.vec3.distance(u,g),v=[];for(let e=0;e<m;e+=a)v.push(d.map((t=>{const n=Sn.vec3.create();return Sn.vec3.scaleAndAdd(n,t,o,e),Array.from(n)})));n.cachedStats.projectionPoints=v}_computePointsInsideVolume(e,t,n,i){const{data:o,metadata:a}=e,{viewPlaneNormal:r,viewUp:s}=a,{viewport:l,renderingEngine:d}=i,c=o.cachedStats.projectionPoints,h=[[]],u=this.getTargetIdImage(t,d),g=o.handles.points[0],m=o.handles.points[3],{worldWidth:v,worldHeight:p}=Qr(r,s,g,m),f=Ln(u,o.habdles),w=Math.abs(v*p)/(f.scale*f.scale),I={isPreScaled:ts(l,t),isSuvScaled:this.isSuvScaled(l,t,e.metadata.referencedImageId)},E=es(a.Modality,e.metadata.referencedImageId,I);for(let e=0;e<c.length;e++){if(!n)continue;const t=c[e][0],{dimensions:i,imageData:o,voxelManager:a}=n,s=fs(o,g),l=fs(o,t),d=this._getIndexOfCoordinatesForViewplaneNormal(r);s[0]=Math.floor(s[0]),s[1]=Math.floor(s[1]),s[2]=Math.floor(s[2]),s[d]=l[d];const u=fs(o,m);if(u[0]=Math.floor(u[0]),u[1]=Math.floor(u[1]),u[2]=Math.floor(u[2]),u[d]=l[d],this._isInsideVolume(s,u,i)){this.isHandleOutsideImage=!1;const e=[[Math.min(s[0],u[0]),Math.max(s[0],u[0])],[Math.min(s[1],u[1]),Math.max(s[1],u[1])],[Math.min(s[2],u[2]),Math.max(s[2],u[2])]],t=a.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:e,imageData:o,returnPoints:this.configuration.storePointData});h.push(t)}}const C=this.configuration.statsCalculator.getStatistics();o.cachedStats.pointsInVolume=h,o.cachedStats.statistics={Modality:a.Modality,area:w,mean:C.mean?.value,stdDev:C.stdDev?.value,max:C.max?.value,statsArray:C.array,areaUnits:f.areaUnits,pixelValueUnits:E}}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:i}=t,{cachedStats:o}=n,a=this.getTargetId(i),r=ie.cache.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),e.invalidated=!1,Qe(e,i.element),o}_getStartCoordinate(e,t){const n=e;return this._getCoordinateForViewplaneNormal(n,t)}_getEndCoordinate(e,t,n){const i=this.configuration.numSlicesToPropagate,o=Sn.vec3.create();return Sn.vec3.scaleAndAdd(o,e,n,i*t),this._getCoordinateForViewplaneNormal(o,n)}_getIndexOfCoordinatesForViewplaneNormal(e){const t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t.indexOf(Math.max(...t))}_getCoordinateForViewplaneNormal(e,t){return e[this._getIndexOfCoordinatesForViewplaneNormal(t)]}}function Is(e){const t=e.cachedStats.statistics,{area:n,mean:i,max:o,stdDev:a,areaUnits:r,pixelValueUnits:s}=t;if(void 0===i)return;const l=[];return l.push(`Area: ${tc(n)} ${r}`),l.push(`Mean: ${tc(i)} ${s}`),l.push(`Max: ${tc(o)} ${s}`),l.push(`Std Dev: ${tc(a)} ${s}`),l}ae(ws,"toolName",void 0),ws.toolName="RectangleROIStartEndThreshold";const Es=ws,Cs=function(e,t){const n=e.findIndex((e=>{let[t,n]=e;return t===n}));if(-1===n)throw new Error("3D bounding boxes not supported in an oblique plane");return e[n][0]-=t,e[n][1]+=t,e},_s=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=[];return e.forEach((e=>{const{data:o}=e,{points:a}=o.handles,{imageData:r,dimensions:s}=t;let l=a;if(o.cachedStats?.projectionPoints){const{projectionPoints:e}=o.cachedStats;l=[].concat(...e)}let d=hi(l.map((e=>ie.utilities.transformWorldToIndex(r,e))),s);n.numSlicesToProject&&!o.cachedStats?.projectionPoints&&(d=Cs(d,n.numSlicesToProject)),i.push(d)})),1===i.length?i[0]:i.reduce(((e,t)=>({iMin:Math.min(e.iMin,t.iMin),jMin:Math.min(e.jMin,t.jMin),kMin:Math.min(e.kMin,t.kMin),iMax:Math.max(e.iMax,t.iMax),jMax:Math.max(e.jMax,t.jMax),kMax:Math.max(e.kMax,t.kMax)})),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})},bs=function(e,t,n,i){const o=e.map((e=>pt(e)));let a;!function(e){const t=[gs.toolName,Es.toolName];for(const n of e){const e=n.metadata.toolName;if(!t.includes(e))throw new Error("rectangleROIThresholdVolumeByRange only supports RectangleROIThreshold and RectangleROIStartEndThreshold annotations")}}(o);for(let e=0;e<n.length;e++)n[e].volume.voxelManager.getScalarDataLength()!==t.voxelManager.getScalarDataLength()&&0!==e||(a=_s(o,n[e].volume,i));const r=Sr(t,n,{...i,boundsIJK:a});return r.modified(),r},Ts=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mergedLabelmap";e.forEach((t=>{let{direction:n,dimensions:i,origin:o,spacing:a}=t;if(!(ie.utilities.isEqual(i,e[0].dimensions)&&ie.utilities.isEqual(n,e[0].direction)&&ie.utilities.isEqual(a,e[0].spacing)&&ie.utilities.isEqual(o,e[0].origin)))throw new Error("labelmaps must have the same size and shape")}));const i=e[0],o=new(i.voxelManager.getConstructor())(i.voxelManager.getScalarDataLength());e.forEach((e=>{const n=e.voxelManager,i=n.getScalarDataLength();for(let e=0;e<i;e++)n.getAtIndex(e)===t&&(o[e]=t)}));const a={scalarData:o,metadata:i.metadata,spacing:i.spacing,origin:i.origin,direction:i.direction,dimensions:i.dimensions};return ie.volumeLoader.createLocalVolume(n,a)};function Ds(e,t){if(e===Ct.Labelmap)return function(e){return e&&"boolean"==typeof e.renderOutline&&"number"==typeof e.outlineWidthActive&&"number"==typeof e.outlineWidthInactive&&"number"==typeof e.activeSegmentOutlineWidthDelta&&"boolean"==typeof e.renderFill&&"boolean"==typeof e.renderFillInactive&&"number"==typeof e.fillAlpha&&"number"==typeof e.fillAlphaInactive&&"number"==typeof e.outlineOpacity&&"number"==typeof e.outlineOpacityInactive}(t);throw new Error(`Unknown representation type: ${e}`)}function Ss(e){const{type:t}=e;if(t===Ct.Labelmap)return Tt();throw new Error(`Unknown representation type: ${t}`)}async function ys(e){const{viewportId:t,renderingEngineId:n,options:i}=e;let{segmentationId:o}=e;const a=(0,ie.getEnabledElementByIds)(t,n);if(!a)throw new Error("element disabled");const{viewport:r}=a;if(!(r instanceof ie.VolumeViewport))throw new Error("Segmentation only supports VolumeViewport");const{uid:s}=r.getDefaultActor();if(void 0===o&&(o=`${s}-based-segmentation-${i?.volumeId??ie.utilities.uuidv4().slice(0,8)}`),i){const e=structuredClone(i);await ie.volumeLoader.createLocalVolume(o,e)}else{const{uid:e}=r.getDefaultActor();await ie.volumeLoader.createAndCacheDerivedSegmentationVolume(e,{volumeId:o})}return o}function xs(e,t,n){const i=ai(e);if(void 0===i)return;br(e,n).forEach((e=>{e.configuration.brushSize=t,e.invalidateBrushCursor()}));const o=i.getViewportsInfo(),a=Object.keys(o).map((e=>o[e]));if(!a.length)return;const{renderingEngineId:r}=a[0],s=i.getViewportIds();(0,ie.getRenderingEngine)(r),oi(s)}function Ms(e,t){const n=ai(e);if(void 0===n)return;const i=n._toolInstances;if(!Object.keys(i).length)return;const o=br(e,t)[0];return o?o.configuration.brushSize:void 0}function Os(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{isDynamic:!1};const i=ai(e);if(void 0===i)return;const o=br(e),a={...n,...void 0!==t&&{threshold:t}};o.forEach((e=>{e.configuration.strategySpecificConfiguration.THRESHOLD={...e.configuration.strategySpecificConfiguration.THRESHOLD,...a}}));const r=i.getViewportsInfo();if(!r.length)return;const{renderingEngineId:s}=r[0],l=i.getViewportIds();(0,ie.getRenderingEngine)(s),oi(l)}function Ps(e){const t=ai(e);if(void 0===t)return;const n=t._toolInstances;if(!Object.keys(n).length)return;const i=br(e)[0];return i?i.configuration.strategySpecificConfiguration.THRESHOLD.threshold:void 0}const As=function(e,t,n,i){const{baseVolumeIdx:o,volumeInfoList:a}=Dr(e,n),{voxelManager:r}=a[o],s=r,l=e.voxelManager.getScalarDataLength(),d=e.voxelManager;return a.forEach((e=>{const{volumeSize:n}=e;n===l?function(e,t,n,i){const{lower:o,upper:a}=i,r=e.getScalarDataLength();for(let i=0;i<r;i++)if(e.getAtIndex[i]===n){const r=t.getAtIndex(i);e.setAtIndex(i,r>=o&&r<=a?n:0)}}(d,s,t,e):function(e,t,n,i,o,a,r){const{imageData:s,lower:l,upper:d,dimensions:c}=i;let h,u,g;const m=e.getScalarDataLength();for(let t=0;t<m;t++)if(m.getAtIndex(t)===n){const i=Tr(s,c,o[a].spacing,o[a].imageData.getPoint(t)),m=e=>{let{value:t}=e;h+=1,t>=g.lower&&t<=g.upper&&(u+=1)};h=0,u=0,g={lower:l,upper:d};let v=!1;e.forEach(m,{imageData:s,boundsIJK:i}),v=0===r?u>0:u===h,e.setAtIndex(t,v?n:0)}}(d,0,t,e,a,o,i)})),on(e.volumeId),e};function Rs(e,t,n){const i=n.toIJK(e),o=n.toIJK(t),a=Sn.vec3.create(),{testIJK:r}=n,s=Sn.vec3.sub(Sn.vec3.create(),i,o),l=Math.round(Math.max(...s.map(Math.abs)));if(l<2)return!0;const d=Sn.vec3.scale(Sn.vec3.create(),s,1/l);for(let e=1;e<l;e++)if(Sn.vec3.scaleAndAdd(a,o,d,e),!r(a))return!1;return!0}const Ls=.01;function Ns(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{maxMajor:0,maxMinor:0};const{points:i}=e.polyData,{maxMinor:o,maxMajor:a}=n;let r,s=a*a,l=o*o;for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],d=Sn.vec3.sqrDist(o,a);d<s||d-Ls<s+Ls&&r||t.testCenter(o,a)&&Rs(o,a,t)&&(s=d-Ls,r=[e,n],l=0)}if(!r)return;s=Math.sqrt(s+Ls);const d=i[r[0]],c=i[r[1]],h=Sn.vec3.sub(Sn.vec3.create(),d,c);let u;Sn.vec3.scale(h,h,1/s);for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],r=Sn.vec3.sqrDist(o,a);if(r<=l)continue;const s=Sn.vec3.sub(Sn.vec3.create(),o,a);Math.abs(Sn.vec3.dot(s,h))/Math.sqrt(r)>Ls||t.testCenter(o,a)&&Rs(o,a,t)&&(l=r,u=[e,n])}return u?(l=Math.sqrt(l),{majorAxis:[d,c],minorAxis:[i[u[0]],i[u[1]]],maxMajor:s,maxMinor:l,...e}):void 0}const{Labelmap:Us}=Ct;function ks(e){const t=Ui({segmentations:e});if(!t?.length||!t[0].sliceContours.length)return;const{representationData:n,segments:i=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,{volumeId:o}=n[Us],a=i.findIndex((e=>!!e));return-1!==a?(i[a].segmentIndex=a,function(e,t,n){const{sliceContours:i}=e,{segmentIndex:o,containedSegmentIndices:a}=n;let r;const s=function(e,t,n){const i=ie.cache.getVolume(e);if(!i)return void console.warn(`No volume found for ${e}`);const o=i.imageData.getPointData().getScalars().getData(),a=i.dimensions[0],r=a*i.dimensions[1];return{testCenter:(e,s)=>{const l=Sn.vec3.add(Sn.vec3.create(),e,s).map((e=>e/2)),d=i.imageData.worldToIndex(l).map(Math.round),[c,h,u]=d,g=o[c+h*a+u*r];return g===t||n?.has(g)},toIJK:e=>i.imageData.worldToIndex(e),testIJK:e=>{const[i,s,l]=e,d=Math.round(i)+Math.round(s)*a+Math.round(l)*r,c=o[d];return c===t||n?.has(c)}}}(t,o,a);for(const e of i){const t=Ns(e,s,r);t&&(r=t)}return r&&Object.assign(r,n),r}(t[0],o,i[a])):void 0}function Vs(e,t){const{majorAxis:n,minorAxis:i,label:o="",sliceIndex:a}=e,[r,s]=n,[l,d]=i,c=[r,s,l,d];return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...t.getViewReference({sliceIndex:a})},data:{handles:{points:c,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:o,cachedStats:{}},isLocked:!1,isVisible:!0}}function Ws(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function Bs(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,u=s-a,g=o-r,m=r*a-o*s,v=u*l+g*d+m,p=u*c+g*h+m;if(0!==v&&0!==p&&Ws(v)===Ws(p))return;const f=h-d,w=l-c,I=c*d-l*h,E=f*o+w*a+I,C=f*r+w*s+I;if(0!==E&&0!==C&&Ws(E)===Ws(C))return;const _=u*w-f*g;let b;b=g*I-w*m;const T=b/_;return b=f*m-u*I,[T,b/_]}const{transformWorldToIndex:Hs}=ie.utilities;class Fs extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Gs}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preventHandleOutsideImage",void 0),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;let l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[1]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=Xr([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]);return h<=i||(l=a.worldToCanvas(s[2]),d=a.worldToCanvas(s[3]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=Xr([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]),h<=i)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),cr(i),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=t.data;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());cr(o),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);if(void 0!==this.editData.handleIndex){const{points:e}=s.handles,t=Sn.vec3.distance(e[0],e[1]);if(Sn.vec3.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],i=[...e[1]],o=Sn.vec2.create();Sn.vec2.set(o,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=Sn.vec2.create();Sn.vec2.set(a,-o[1],o[0]);const r=Sn.vec2.create();let l;Sn.vec2.set(r,i[0]-n[0],i[1]-n[0]),l=Sn.vec2.dot(r,a)>0?[n,i]:[i,n],s.handles.points=[t[0],t[1],l[0],l[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=(0,ie.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,{worldToCanvas:s}=r,{annotation:l,viewportIdsToRender:d,handleIndex:c}=this.editData,{data:h}=l,u=n.world;h.handles.points[c]=[...u];const g=h.handles.points.map(s),m={x:g[0][0],y:g[0][1]},v={x:g[1][0],y:g[1][1]},p=(g[2][0],g[2][1],g[3][0],g[3][1],Sn.vec2.distance(g[0],g[1])/3),f=m.x-v.x,w=m.y-v.y,I=Math.sqrt(f*f+w*w),E=f/I,C=w/I,_=(m.x+v.x)/2,b=(m.y+v.y)/2,T=_+p*C,D=b-p*E,S=_-p*C,y=b+p*E;h.handles.points[2]=r.canvasToWorld([T,D]),h.handles.points[3]=r.canvasToWorld([S,y]),l.invalidated=!0,oi(d),this.editData.hasMoved=!0})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{renderingEngine:o}=i,{annotation:a,viewportIdsToRender:r,handleIndex:s,movingTextBox:l}=this.editData,{data:d}=a;if(l){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===s){const{deltaPoints:e}=t,n=e.world;d.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),a.invalidated=!0}else this._dragModifyHandle(e),a.invalidated=!0;oi(r)})),ae(this,"_dragModifyHandle",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,ie.getEnabledElement)(i),{viewport:a}=o,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,d=n.world,c=[a.worldToCanvas(l.handles.points[0]),a.worldToCanvas(l.handles.points[1]),a.worldToCanvas(l.handles.points[2]),a.worldToCanvas(l.handles.points[3])],h={start:{x:c[0][0],y:c[0][1]},end:{x:c[1][0],y:c[1][1]}},u={start:{x:c[2][0],y:c[2][1]},end:{x:c[3][0],y:c[3][1]}},g=[...d],m=a.worldToCanvas(g);if(0===s||1===s){const e=c[0===s?1:0],t=Sn.vec2.set(Sn.vec2.create(),m[0]-e[0],m[1]-e[1]),n=Sn.vec2.set(Sn.vec2.create(),c[s][0]-e[0],c[s][1]-e[1]);Sn.vec2.normalize(t,t),Sn.vec2.normalize(n,n);const i={start:{x:e[0],y:e[1]},end:{x:m[0],y:m[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(i,u))return;const o=e,r=this._getSignedAngle(n,t);let d=c[2][0],h=c[2][1],v=c[3][0],p=c[3][1];d-=o[0],h-=o[1],v-=o[0],p-=o[1];const f=d*Math.cos(r)-h*Math.sin(r),w=d*Math.sin(r)+h*Math.cos(r),I=v*Math.cos(r)-p*Math.sin(r),E=v*Math.sin(r)+p*Math.cos(r);d=f+o[0],h=w+o[1],v=I+o[0],p=E+o[1];const C=a.canvasToWorld([d,h]),_=a.canvasToWorld([v,p]);l.handles.points[s]=g,l.handles.points[2]=C,l.handles.points[3]=_}else{const e=2===s?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:u.start,end:u.end}},n=Sn.vec2.subtract(Sn.vec2.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),i=Sn.vec2.normalize(Sn.vec2.create(),n),o=Sn.vec2.subtract(Sn.vec2.create(),[m[0],m[1]],[c[s][0],c[s][1]]),r=Sn.vec2.length(o),d=this._getSignedAngle(i,o),v=Math.cos(d)*r,p=Sn.vec2.scaleAndAdd(Sn.vec2.create(),[c[e][0],c[e][1]],i,v);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:m[0],y:m[1]},end:{x:p[0],y:p[1]}},{start:{x:t.longLineSegment.start.x,y:t.longLineSegment.start.y},end:{x:t.longLineSegment.end.x,y:t.longLineSegment.end.y}}))return;if(!Bs([m[0],m[1]],[p[0],p[1]],[h.start.x,h.start.y],[h.end.x,h.end.y]))return;l.handles.points[e]=a.canvasToWorld(p),l.handles.points[s]=g}})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragDrawCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragDrawCallback)})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!0;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles,m=u.map((e=>i.worldToCanvas(e)));l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f,shadow:w}=this.getAnnotationStyle({annotation:d,styleSpecifier:l});if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={length:null,width:null,unit:null},this._calculateCachedStats(d,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let I;if(!Re(c))continue;ue(d)||this.editData||null===g||(I=[m[g]]),I&&xr(t,c,"0",I,{color:v});const E=`${c}-line-1`,C=`${c}-line-2`;jr(t,c,"0",m[0],m[1],{color:v,lineDash:f,lineWidth:p,shadow:w},E),jr(t,c,"1",m[2],m[3],{color:v,lineDash:f,lineWidth:p,shadow:w},C),n=!0;const _=this.getLinkedTextBoxStyle(l,d);if(!_.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const b=this.configuration.getTextLines(h,r);if(!b||0===b.length)continue;let T;h.handles.textBox.hasMoved||(T=Zr(m),h.handles.textBox.worldPosition=i.canvasToWorld(T));const D=i.worldToCanvas(h.handles.textBox.worldPosition),S=Yr(t,c,"1",b,D,m,{},_),{x:y,y:x,width:M,height:O}=S;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([y,x]),topRight:i.canvasToWorld([y+M,x]),bottomLeft:i.canvasToWorld([y,x+O]),bottomRight:i.canvasToWorld([y+M,x+O])}}return n})),ae(this,"_movingLongAxisWouldPutItThroughShortAxis",((e,t)=>{const n=Sn.vec2.create();Sn.vec2.set(n,t.end.x-t.start.x,t.end.y-t.start.y),Sn.vec2.normalize(n,n);const i={start:{x:t.start.x-10*n[0],y:t.start.y-10*n[1]},end:{x:t.end.x+10*n[0],y:t.end.y+10*n[1]}};return!Bs([i.start.x,i.start.y],[i.end.x,i.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])})),ae(this,"_calculateCachedStats",((e,t,n)=>{const{data:i}=e,{element:o}=n.viewport,a=i.handles.points[0],r=i.handles.points[1],s=i.handles.points[2],l=i.handles.points[3],{cachedStats:d}=i,c=Object.keys(d);for(let e=0;e<c.length;e++){const n=c[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:h}=i,u=Hs(o,a),g=Hs(o,r),m=Hs(o,s),v=Hs(o,l),p=[u,g],f=[m,v],{scale:w,lengthUnits:I}=Ln(i,p),{scale:E,lengthUnits:C}=Ln(i,f),_=this._calculateLength(a,r)/w,b=this._calculateLength(s,l)/E,T=_>b?_:b,D=_>b?b:_,S=_>b?I:C,y=_>b?C:I;this._isInsideVolume(u,g,m,v,h)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,d[n]={length:T,width:D,lengthUnits:S,widthUnit:y}}return e.invalidated=!1,Qe(e,o),d})),ae(this,"_isInsideVolume",((e,t,n,i,o)=>ie.utilities.indexWithinDimensions(e,o)&&ie.utilities.indexWithinDimensions(t,o)&&ie.utilities.indexWithinDimensions(n,o)&&ie.utilities.indexWithinDimensions(i,o))),ae(this,"_getSignedAngle",((e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]))),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(m),g}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}}function Gs(e,t){const{cachedStats:n,label:i}=e,{length:o,width:a,unit:r,lengthUnits:s,widthUnit:l}=n[t],d=[];return i&&d.push(i),void 0===o||d.push(`L: ${tc(o)} ${s||r}`,`W: ${tc(a)} ${l||r}`),d}ae(Fs,"toolName",void 0),Fs.toolName="Bidirectional";const $s=Fs;function qs(e,t){const{data:n}=t,i=(0,ie.getEnabledElement)(e),o=(n.getSegment||zs)(i,n);if(!o)return;const a=i.viewport.getFrameOfReferenceUID(),r=Uu(),{segmentIndex:s,segmentationId:l}=o,d=st(this.toolName||$s.toolName,a);let c=!1;const h=d.filter((e=>{const t=e.data.segment;return!!t&&(t.segmentationId===l&&t.segmentIndex===s&&(c=!0,e.data.segment=t),!0)}));let u;if(c||h.push({data:{segment:o}}),h.forEach((e=>{const t=[],n=e.data.segment,{segmentIndex:s,segmentationId:l}=n;t[s]=n,vt(e.annotationUID);const d=ks({...r.find((e=>e.segmentationId===l)),segments:t});if(!d)return;const c=Vs(d,i.viewport);c.annotationUID=e.annotationUID,c.data.segment=n;const h=gt(c,a);if(n.segmentIndex===o.segmentIndex&&n.segmentationId===o.segmentationId){u=d;const{style:e}=o;e&&Nr.setAnnotationStyles(h,e)}})),u){const{sliceIndex:t}=u,n=i.viewport.getImageIds();li(e,{imageIndex:n.length-1-t}),i.viewport.render()}else console.warn("No bidirectional found");return u}function zs(e,t){const n=Uu();if(!n.length)return;const i=t.segmentationId||n[0].segmentationId,o=t.segmentIndex??Er(i);if(!o)return;const a=t.segmentData?.get(o);return{label:`Segment ${o}`,segmentIndex:o,segmentationId:i,...a}}const js=1e-6;function Ks(e){let t;const n=ie.utilities.getRandomSampleFromArray(e,50);for(let e=0;e<3;e++)if(n.every(((t,n,i)=>Math.abs(t[e]-i[0][e])<js))){t=e;break}if(void 0===t)throw new Error("Cannot find a shared dimension index for polyline, probably oblique plane");const i=[],o=(t+1)%3,a=(t+2)%3;for(let t=0;t<e.length;t++)i.push([e[t][o],e[t][a]]);return{sharedDimensionIndex:t,projectedPolyline:i}}function Ys(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{sharedDimensionIndex:i,projectedPolyline:o}=Ks(t),{holes:a}=n,r=[];if(a)for(let e=0;e<a.length;e++){const t=a[e],n=[];for(let e=0;e<t.length;e++)n.push([t[e][(i+1)%3],t[e][(i+2)%3]]);r.push(n)}return vo(o,[e[(i+1)%3],e[(i+2)%3]],{holes:r})}function Xs(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=Nu(e),o=i.representationData,a=n?.representationType??Object.keys(o)[0];if(!a)throw new Error(`Segmentation ${e} does not have any representations`);switch(a){case Ct.Labelmap:return function(e,t,n){let{viewport:i}=n;const o=e.representationData.LABELMAP;if(Yt(o)){const{volumeId:e}=o,n=ie.cache.getVolume(e);if(!n)return;return n.imageData.getScalarValueFromWorld(t)}const a=sg(i.id,e.segmentationId);if(!ie.cache.getImage(a))return;const r=Bu(e.segmentationId),{segmentationRepresentationUID:s}=r[0],l=i.getActor(s),d=l?.actor.getMapper().getInputData(),c=ie.utilities.transformWorldToIndex(d,t),h=d.getDimensions();return(d.voxelManager||ie.utilities.VoxelManager.createScalarVolumeVoxelManager({dimensions:h,scalarData:d.getPointData().getScalars().getData()})).getAtIJKPoint(c)}(i,t,n);case Ct.Contour:return function(e,t,n){let{viewport:i}=n;const o=e.representationData.CONTOUR,a=Array.from(o.annotationUIDsMap.keys()),{viewPlaneNormal:r}=i.getCamera();for(const e of a){const n=o.annotationUIDsMap.get(e);if(n)for(const i of n){const n=pt(i);if(!n)continue;const{polyline:o}=n.data.contour;if(ie.utilities.isEqual(r,n.metadata.viewPlaneNormal)&&Ys(t,o))return Number(e)}}}(i,t,n);default:return}}function Js(e,t,n){let{viewport:i,searchRadius:o}=n;const a=Nu(e),r=a.representationData.LABELMAP;if(Yt(r)){const{volumeId:e}=r,n=ie.cache.getVolume(e);if(!n)return;const a=n.imageData,s=a.getScalarValueFromWorld(t),l=function(e,t,n,i,o){return Zs(((t,o)=>{const a=[e[0]+t,e[1]+o],r=n.canvasToWorld(a);return i.getScalarValueFromWorld(r)}),t,o)}(i.worldToCanvas(t),s,i,a,o);return l?s:void 0}const s=sg(i.id,e);if(i.getCurrentImageId(),!ie.cache.getImage(s))return;const l=Bu(a.segmentationId),{segmentationRepresentationUID:d}=l[0],c=i.getActor(d),h=c?.actor.getMapper().getInputData(),u=ie.utilities.transformWorldToIndex(h,t),g=h.getDimensions(),m=h.voxelManager||ie.utilities.VoxelManager.createScalarVolumeVoxelManager({dimensions:g,scalarData:h.getPointData().getScalars().getData()}),v=m.getAtIJKPoint(u),p=function(e,t,n,i){return Zs(((t,i,o)=>{const a=[e[0]+t,e[1]+i,e[2]+o];return n.getAtIJK(a[0],a[1],a[2])}),i,void 0)}(u,0,m,v);return p?v:void 0}function Zs(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const i=Array.from({length:2*n+1},((e,t)=>t-n));for(const n of i)for(const o of i)for(const a of i){if(0===n&&0===o&&0===a)continue;const i=e(n,o,a);if(void 0!==i&&t!==i)return!0}return!1}function Qs(e){const t=Nu(e),{annotationUIDsMap:n}=t.representationData.CONTOUR;for(const[e,t]of n.entries())if(Array.from(t).find((e=>pt(e).highlighted)))return e}function el(e,t){const n=e.maxX-e.minX,i=e.maxY-e.minY,o=[n,i],a=[e.minX+n/2,e.minY+i/2],r=[Math.abs(t[0]-a[0]),Math.abs(t[1]-a[1])],s=r[0]-.5*o[0],l=r[1]-.5*o[1];if(s>0&&l>0)return s*s+l*l;const d=Math.max(s,0)+Math.max(l,0);return d*d}function tl(e,t){return Math.sqrt(el(e,t))}function nl(e,t){return Math.sqrt($i(e,t))}function il(e,t){const[n,i]=e,[o,a]=t;return[2*o-n,2*a-i]}function ol(e){const t=e.length;let n=0,i=t-1;for(let o=0;o<t;o++)n+=(e[i][0]+e[o][0])*(e[i][1]-e[o][1]),i=o;return Math.abs(n/2)}function al(e){const t=function(e){const t=Sn.vec3.create(),n=e[0];for(let i=0,o=e.length;i<o;i++){const a=e[i],r=e[i===o-1?0:i+1],s=a[0]-n[0],l=a[1]-n[1],d=a[2]-n[2],c=r[0]-n[0],h=r[1]-n[1],u=r[2]-n[2];t[0]+=l*u-d*h,t[1]+=d*c-s*u,t[2]+=s*h-l*c}return Sn.vec3.scale(t,t,.5),t}(e);return Sn.vec3.normalize(t,t)}function rl(e,t,n){const i=[],o=fo(e,t,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);for(let a=0;a<o.length;a++){const r=_o(t,n,e[o[a][0]],e[o[a][1]]);i.push(r)}return i}function sl(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);const a=[];for(let r=i;r<e.length;r++){const i=e[o],s=e[r];lo(t,n,i,s)&&a.push([o,r]),o=r}if(0===a.length)return;const r=[];a.forEach((n=>{const i=[e[n[0]],e[n[1]]],o=[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];r.push(Sn.vec2.distance(o,t))}));const s=Math.min(...r);return{segment:a[r.indexOf(s)],distance:s}}const ll=.001,dl=(e,t)=>{let n,i,o;if(e instanceof ie.StackViewport){const t=e.getImageData();i=t.direction.slice(0,3),o=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:a,spacing:r}=t,{viewPlaneNormal:s,viewUp:l}=e.getCamera(),d=a.slice(0,3),c=a.slice(3,6),h=a.slice(6,9),u=Sn.vec3.create();Sn.vec3.cross(u,l,s);const g=Math.abs(Sn.vec3.dot(u,d)),m=Math.abs(Sn.vec3.dot(u,c)),v=Math.abs(Sn.vec3.dot(u,h));let p;if(Math.abs(1-g)<ll)p=r[0],i=d;else if(Math.abs(1-m)<ll)p=r[1],i=c;else{if(!(Math.abs(1-v)<ll))throw new Error("No support yet for oblique plane planar contours");p=r[2],i=h}const f=Math.abs(Sn.vec3.dot(l,d)),w=Math.abs(Sn.vec3.dot(l,c)),I=Math.abs(Sn.vec3.dot(l,h));let E;if(Math.abs(1-f)<ll)E=r[0],o=d;else if(Math.abs(1-w)<ll)E=r[1],o=c;else{if(!(Math.abs(1-I)<ll))throw new Error("No support yet for oblique plane planar contours");E=r[2],o=h}n=[p,E]}return{spacing:[n[0]/t,n[1]/t],xDir:i,yDir:o}},cl=(e,t,n)=>Sn.vec2.dist(e,t)<n,hl=(e,t,n,i)=>{const{xDir:o,yDir:a,spacing:r}=i,s=(0,ie.getEnabledElement)(e),{viewport:l}=s;if(!t.length)return t.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;const d=l.canvasToWorld(t[t.length-1]),c=l.canvasToWorld(n),h=Sn.vec3.create();Sn.vec3.subtract(h,c,d);const u=Math.abs(Sn.vec3.dot(h,o)),g=Math.abs(Sn.vec3.dot(h,a)),m=Math.max(Math.floor(u/r[0]),Math.floor(g/r[0]));if(m>1){const e=t[t.length-1],i=Sn.vec2.dist(e,n),o=Sn.vec2.create();Sn.vec2.subtract(o,n,e),Sn.vec2.set(o,o[0]/i,o[1]/i);const a=i/m;for(let n=1;n<=m;n++)t.push([e[0]+a*o[0]*n,e[1]+a*o[1]*n])}else t.push(n);return m},ul=(e,t,n,i)=>{const o=[e[0]-t[0],e[1]-t[1]],a=[n[0]-t[0],n[1]-t[1]],r=o[0]*a[0]+o[1]*a[1];if(r<0)return!1;const s=Math.sqrt(a[0]*a[0]+a[1]*a[1]);if(0===s)return!1;const l=r/s,d=[a[0]/s,a[1]/s],c=[d[0]*l,d[1]*l],h=[t[0]+c[0],t[1]+c[1]];return!(Sn.vec2.distance(e,h)>i||Sn.vec2.distance(t,h)>Sn.vec2.distance(t,n))},gl=1e-6,ml=1,vl=0;function pl(e,t,n){const[i,o]=n;if(Math.abs(t)<gl)return e<0;const a=e/t;if(t>0){if(a>o)return 0;a>i&&(n[0]=a)}else{if(a<i)return 0;a<o&&(n[1]=a)}return 1}function fl(e,t,n,i,o){const[a,r]=e,[s,l]=t,d=s-a,c=l-r;if(void 0===i||void 0===o?(i=e,o=t):(i[0]=e[0],i[1]=e[1],o[0]=t[0],o[1]=t[1]),Math.abs(d)<gl&&Math.abs(c)<gl&&a>=n[0]&&a<=n[2]&&r>=n[1]&&r<=n[3])return ml;const h=[0,1];if(pl(n[0]-a,d,h)&&pl(a-n[2],-d,h)&&pl(n[1]-r,c,h)&&pl(r-n[3],-c,h)){const[e,t]=h;return t<1&&(o[0]=a+t*d,o[1]=r+t*c),e>0&&(i[0]+=e*d,i[1]+=e*c),ml}return vl}var wl=E(807),Il=E.n(wl);function El(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.25;const a=e.getCamera(),{position:r}=a,{spacingInNormalDirection:s}=ie.utilities.getTargetVolumeAndSpacingInNormalDir(e,a,n),l=s*o,d=e.getBounds(),c=d[0],h=d[1],u=[0,0,0];let g,m=[0,0,0];Il().subtract(t,r,u);for(let t=c;t<=h;t+=l){m=[t,0,0];const n=(t-r[0])/u[0];if(m[1]=n*u[1]+r[1],m[2]=n*u[2]+r[2],Cl(m,d)){const t=i(e.getIntensityFromWorld(m),m);t&&(g=t)}}return g}const Cl=function(e,t){const[n,i,o,a,r,s]=t;return e[0]>n&&e[0]<i&&e[1]>o&&e[1]<a&&e[2]>r&&e[2]<s},_l=(e,t,n,i,o,a,r,s)=>{const l=[Sn.vec3.fromValues(n,i,o),Sn.vec3.fromValues(a,i,o),Sn.vec3.fromValues(n,r,o),Sn.vec3.fromValues(a,r,o),Sn.vec3.fromValues(n,i,s),Sn.vec3.fromValues(a,i,s),Sn.vec3.fromValues(n,r,s),Sn.vec3.fromValues(a,r,s)],d=Sn.vec3.fromValues(t[0],t[1],t[2]),c=Sn.vec3.fromValues(e[0],e[1],e[2]),h=-Sn.vec3.dot(d,c);let u=null;for(const e of l){const t=Sn.vec3.dot(d,e)+h;if(null===u)u=Math.sign(t);else if(Math.sign(t)!==u)return!0}return!1},bl={filterAnnotationsWithinSlice:Rr,getWorldWidthAndHeightFromCorners:Qr,filterAnnotationsForDisplay:Lr,getPointInLineOfSightWithCriteria:El,isPlaneIntersectingAABB:_l,filterAnnotationsWithinSamePlane:ps};function Tl(e){let t="";const n=e[0]<0?"R":"L",i=e[1]<0?"A":"P",o=e[2]<0?"F":"H",a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=1e-4;for(let e=0;e<3;e++)if(a[0]>r&&a[0]>a[1]&&a[0]>a[2])t+=n,a[0]=0;else if(a[1]>r&&a[1]>a[0]&&a[1]>a[2])t+=i,a[1]=0;else if(a[2]>r&&a[2]>a[0]&&a[2]>a[1])t+=o,a[2]=0;else if(a[0]>r&&a[1]>r&&a[0]===a[1])t+=n+i,a[0]=0,a[1]=0;else if(a[0]>r&&a[2]>r&&a[0]===a[2])t+=n+o,a[0]=0,a[2]=0;else{if(!(a[1]>r&&a[2]>r&&a[1]===a[2]))break;t+=i+o,a[1]=0,a[2]=0}return t}function Dl(e){let t=e.replace("H","f");return t=t.replace("F","h"),t=t.replace("R","l"),t=t.replace("L","r"),t=t.replace("A","p"),t=t.replace("P","a"),t=t.toUpperCase(),t}var Sl=function(e){return e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED",e}(Sl||{});const yl=Sl,xl={};function Ml(e,t){const n=(0,ie.getEnabledElement)(e),{viewportId:i}=n;xl[i]=t}function Ol(e){const t=(0,ie.getEnabledElement)(e),{viewportId:n}=t;return xl[n]}const{ViewportStatus:Pl}=ie.Enums,{triggerEvent:Al}=ie.utilities,Rl=!0,Ll=new Map;function Nl(e,t){let n,i;if(void 0===e)throw new Error("playClip: element must not be undefined");const o=(0,ie.getEnabledElement)(e);if(!o)throw new Error("playClip: element must be a valid Cornerstone enabled element");t||(t={}),t.dynamicCineEnabled=t.dynamicCineEnabled??!0;const{viewport:a}=o,r=Bl(a),s=function(e,t){if(e instanceof ie.StackViewport)return function(e,t){const n=e.getImageIds();return{get numScrollSteps(){return n.length},get currentStepIndex(){return e.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){this.waitForRenderedCount<=t&&e.viewportStatus!==Pl.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,si(e,{delta:n,debounceLoading:Rl}))}}}(e,t.waitForRendered??30);if(e instanceof ie.VolumeViewport){const n=Bl(e);return t.dynamicCineEnabled&&n?.isDynamicVolume()?function(e){return{get numScrollSteps(){return e.numTimePoints},get currentStepIndex(){return e.timePointIndex},get frameTimeVectorEnabled(){return!1},scroll(t){e.scroll(t)}}}(n):function(e,t){const{volumeId:n}=t,i={viewPlaneNormal:Sn.vec3.create(),scrollInfo:null},o=()=>{const t=e.getCamera();if(!i.scrollInfo||!Sn.vec3.equals(t.viewPlaneNormal,i.viewPlaneNormal)){const o=ie.utilities.getVolumeViewportScrollInfo(e,n);i.viewPlaneNormal=t.viewPlaneNormal,i.scrollInfo=o}return i.scrollInfo};return{get numScrollSteps(){return o().numScrollSteps},get currentStepIndex(){return o().currentStepIndex},get frameTimeVectorEnabled(){const n=e.getCamera(),i=t.direction.slice(6,9).map((e=>-e)),o=Sn.vec3.dot(i,n.viewPlaneNormal);return Sn.glMatrix.equals(o,1)},scroll(t){o().currentStepIndex+=t,si(e,{delta:t})}}}(e,n)}if(e instanceof ie.VideoViewport)return function(e,t){return{get numScrollSteps(){return e.getNumberOfSlices()},get currentStepIndex(){return e.getSliceIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){this.waitForRenderedCount<=t&&e.viewportStatus!==Pl.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,si(e,{delta:n,debounceLoading:Rl}))},play:t=>(t&&e.setPlaybackRate(t/24),e.play(),e.getFrameRate())}}(e,t.waitForRendered??30);throw new Error("Unknown viewport type")}(a,t);let l=Ol(e);const d=t.dynamicCineEnabled&&r?.isDynamicVolume();if(d&&Vl(e),l?kl(e,{stopDynamicCine:!d,viewportId:a.id}):(l={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:t.frameTimeVector??void 0,speed:t.frameTimeVectorSpeedMultiplier??1,reverse:t.reverse??!1,loop:t.loop??!0},Ml(e,l)),l.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(l.framesPerSecond=Number(t.framesPerSecond),l.reverse=l.framesPerSecond<0,l.ignoreFrameTimeVector=!0),!0!==l.ignoreFrameTimeVector&&l.frameTimeVector&&l.frameTimeVector.length===s.numScrollSteps&&s.frameTimeVectorEnabled){const{timeouts:e,isTimeVarying:t}=function(e,t){let n,i,o,a=0;const r=e.length,s=[];let l=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;n++)o=Number(e[n])/t|0,s.push(o),1===n?i=o:o!==i&&(l=!0),a+=o;return s.length>0&&(o=l?a/s.length|0:s[0],s.push(o)),{timeouts:s,isTimeVarying:l}}(l.frameTimeVector,l.speed);n=e,i=t}const c=()=>{const{numScrollSteps:t,currentStepIndex:n}=s;let i=n+(l.reverse?-1:1);const o=i<0||i>=t;if(!l.loop&&o){kl(e,{stopDynamicCine:!d,viewportId:a.id});const t={element:e};return void Al(e,yl.CLIP_STOPPED,t)}i>=t?i=0:i<0&&(i=t-1);const r=i-n;if(r)try{s.scroll(r)}catch(t){return console.warn("Play clip not scrolling",t),Wl(l),void Al(e,yl.CLIP_STOPPED,h)}};d&&Ll.set(r.volumeId,e),s.play?l.framesPerSecond=s.play(t.framesPerSecond):n&&n.length>0&&i?(l.usingFrameTimeVector=!0,l.intervalId=window.setTimeout((function e(){l.intervalId=window.setTimeout(e,n[s.currentStepIndex]),c()}),0)):(l.usingFrameTimeVector=!1,l.intervalId=window.setInterval(c,1e3/Math.abs(l.framesPerSecond)));const h={element:e};Al(e,yl.CLIP_STARTED,h)}function Ul(e){kl(e,{stopDynamicCine:!0,...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}})}function kl(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{stopDynamicCine:!0,viewportId:void 0};const{stopDynamicCine:n,viewportId:i}=t,o=(0,ie.getEnabledElement)(e);let a;const r=o?.viewport;if(o){const{viewport:e}=o;a=Ol(e.element)}else{if(!i)return;a=function(e){return xl[e]}(i)}a&&Wl(a),r instanceof ie.VideoViewport?r.pause():n&&r instanceof ie.BaseVolumeViewport&&Vl(e)}function Vl(e){const{viewport:t}=(0,ie.getEnabledElement)(e),n=Bl(t);if(n?.isDynamicVolume()){const t=Ll.get(n.volumeId);Ll.delete(n.volumeId),t&&t!==e&&Ul(t)}}function Wl(e){const t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}function Bl(e){const t=function(e){return e.getActors().map((e=>ie.cache.getVolume(e.uid))).filter((e=>!!e))}(e);return t.find((e=>e.isDynamicVolume()))??t[0]}function Hl(e){var t=e.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[i],a=e[i+1],r=i>0?e[i-1]:2*o-a,s=i<t-1?e[i+2]:2*a-o;return function(e,t,n,i,o){var a=e*e,r=a*e;return((1-3*e+3*a-r)*t+(4-6*a+3*r)*n+(1+3*e+3*a-3*r)*i+r*o)/6}((n-i/t)*t,r,o,a,s)}}function Fl(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e(i/(t-1));return n}function Gl(e){return e.length}function $l(){return function(e){if(!(o=e.length))return[];for(var t=-1,n=function(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let i=-1;for(let o of e)null!=(o=t(o,++i,e))&&(n>o||void 0===n&&o>=o)&&(n=o)}return n}(e,Gl),i=new Array(n);++t<n;)for(var o,a=-1,r=i[t]=new Array(o);++a<o;)r[a]=e[a][t];return i}(arguments)}function ql(e,t,n,i){const o=n-t+1,a=Math.floor(i/100*o)??1,r=Math.floor(o/a)??1;if(isNaN(o)||!o||!r)return e;if(o/r<2)return e;const s=Math.max(0,t),l=Math.min(e.length-1,n),d=e.slice(0,s),c=e.slice(l+1,e.length),h=function(e,t){if(!t||0===t.length||t.length===e.length)return e;const n=t[t.length-1]-t[0]+1,i=Hl(t.map((t=>e[t][0]))),o=Hl(t.map((t=>e[t][1])));if(a=e,3===a[0]?.length){const a=Hl(t.map((t=>e[t][2])));return $l(Fl(i,n),Fl(o,n),Fl(a,n))}return $l(Fl(i,n),Fl(o,n));var a}(e,function(e,t){const n=[],[i,o]=t,a=o-i+1,r=Math.floor(a/e);let s=0,l=Math.round((a-1)/(r-1)*s)+i;for(;l<=o;)n.push(l),s++,l=Math.round((a-1)/(r-1)*s)+i;return n}(r,[s,l]));return[...d,...h,...c]}function zl(e,t,n){if(function(e,t,n){if(!t?.data?.polyline||n<=0)return!0;if(!e.viewport)return!0;const{renderingEngineId:i,viewportId:o,FrameOfReferenceUID:a}=e,r=Vn(o,i);if(t.metadata.FrameOfReferenceUID!==a)return!0;if(!r)return!0;const s=r.getToolInstance(t.metadata.toolName);return!(s instanceof zh)||s.isDrawing||s.isEditingOpen||s.isEditingClosed}(e,t,n))return!1;const{viewport:i}=e,o=t.data.contour.polyline.map(i.worldToCanvas),a=ql(o,0,o.length,n);return a!==o&&(t.data.contour.polyline=a.map(i.canvasToWorld),!0)}const jl={smoothAnnotation:zl},{isEqual:Kl}=ie.utilities,Yl=[Sn.vec3.fromValues(1,0,0),Sn.vec3.fromValues(0,1,0),Sn.vec3.fromValues(0,0,1)];function Xl(e){const t=Sn.vec3.subtract(Sn.vec3.create(),e[0],e[1]),n=Sn.vec3.subtract(Sn.vec3.create(),e[0],e[2]);return[...Jl(t,Yl),...Jl(n,Yl)].every((e=>Kl(e,0)||Kl(e,90)||Kl(e,180)||Kl(e,270)))}function Jl(e,t){return t.map((t=>180*Sn.vec3.angle(e,t)/Math.PI))}const Zl={};function Ql(e,t){const n=(0,ie.getEnabledElement)(e),{viewportId:i}=n;Zl[i]=t}function ed(e){const t=(0,ie.getEnabledElement)(e),{viewportId:n}=t;return Zl[n]}const td=ie.Enums.RequestType.Prefetch,nd=0;function id(e,t){e=Math.round(e)||0;const n=[];let i=(t=Math.round(t)||0)-e+1;if(i<=0)return n;for(;i--;)n[i]=t--;return n}function od(e){const t=(0,ie.getEnabledElement)(e);if(!t)return null;const{viewport:n}=t;return n instanceof ie.StackViewport?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:null}function ad(e){return function(t){const n=t.detail;let i;try{i=od(e)}catch(e){return}if(!i||!i.imageIds||0===i.imageIds.length)return;const o=i.imageIds.indexOf(n.imageId);if(o<0)return;const a=ed(e);a&&a.indicesToRequest&&a.indicesToRequest.length&&a.indicesToRequest.push(o)}}const rd=e=>{const t=new Set(e.imageIds);return e=>e.type!==td||!t.has(e.additionalDetails.imageId)};let sd,ld={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function dd(e){const t=ed(e);if(!t)return;const n=t||{},i=od(e);if(!i?.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:o}=i;if(n.enabled=n.enabled&&(n.indicesToRequest?.length??0)>0,!1===n.enabled)return;if(t.indicesToRequest.sort(((e,t)=>e-t)),n.indicesToRequest.slice().forEach((function(e){const t=i.imageIds[e];t&&(Math.abs(o-e)<6?ie.cache.getImageLoadObject(t):ie.cache.isLoaded(t))&&function(e){const t=n.indicesToRequest.indexOf(e);t>-1&&n.indicesToRequest.splice(t,1)}(e)})),!n.indicesToRequest.length)return;ld.preserveExistingPool||ie.imageLoadPoolManager.clearRequestStack(td);const a=function(e,t){let n=0,i=e.length-1;return e.forEach(((e,o)=>{e<t?n=Math.max(o,n):e>t&&(i=Math.min(o,i))})),{low:n,high:i}}(n.indicesToRequest,i.currentImageIdIndex);let r,s,l=a.low,d=a.high;const c=[];for(;l>=0||d<n.indicesToRequest.length;){const e=i.currentImageIdIndex,t=!(e-n.indicesToRequest[l]>ld.maxImagesToPrefetch)&&l>=0,o=!(n.indicesToRequest[d]-e>ld.maxImagesToPrefetch)&&d<n.indicesToRequest.length;if(!o&&!t)break;t&&(s=n.indicesToRequest[l--],r=i.imageIds[s],c.push(r)),o&&(s=n.indicesToRequest[d++],r=i.imageIds[s],c.push(r))}const h=(e,t)=>ie.imageLoader.loadAndCacheImage(e,t);c.forEach((e=>{const t={requestType:td};ie.imageLoadPoolManager.addRequest(h.bind(null,e,t),td,{imageId:e},nd)}))}function cd(e){clearTimeout(sd),sd=setTimeout((function(){const t=e.target;try{dd(t)}catch(e){return}}),10)}const hd={enable:function(e){const t=od(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n={indicesToRequest:id(0,t.imageIds.length-1),enabled:!0,direction:1},i=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(i,1),Ql(e,n),dd(e),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,cd),e.addEventListener(ie.Enums.Events.STACK_NEW_IMAGE,cd);const o=ad(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o),ie.eventTarget.addEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o)},disable:function(e){clearTimeout(sd),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,cd);const t=ad(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=ed(e);n&&n.indicesToRequest.length&&(n.enabled=!1,ie.imageLoadPoolManager.clearRequestStack(td))},getConfiguration:function(){return ld},setConfiguration:function(e){ld=e}};let ud,gd={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1};function md(e){const t=od(e);if(!t)return;if(!t?.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n=ed(e);if(!n)return;const i=n||{};if(i.enabled=i.enabled&&(i.indicesToRequest?.length??0)>0,!1===i.enabled)return;function o(e){const t=i.indicesToRequest.indexOf(e);t>-1&&i.indicesToRequest.splice(t,1)}const a=i.indicesToRequest.slice(),{currentImageIdIndex:r}=t;if(a.forEach((e=>{const n=t.imageIds[e];n&&(Math.abs(r-e)<6?ie.cache.getImageLoadObject(n):ie.cache.isLoaded(n))&&o(e)})),!i.indicesToRequest.length)return;gd.preserveExistingPool||ie.imageLoadPoolManager.filterRequests(rd(t));const s=(n,a)=>ie.imageLoader.loadAndCacheImage(n,a).then((()=>function(n){o(t.imageIds.indexOf(n));const a=ie.cache.getCachedImageBasedOnImageURI(n),{stats:r}=i,s=a?.image?.decodeTimeInMS||0;if(s){r.imageIds.set(n,s),r.decodeTimeInMS+=s;const e=a?.image?.loadTimeInMS||0;r.loadTimeInMS+=e}if(!i.indicesToRequest.length&&a?.sizeInBytes){const{sizeInBytes:t}=a,n=ie.cache.getMaxCacheSize()/4/t;if(i.cacheFill){if(r.imageIds.size){r.fillTime=Date.now()-r.start;const{size:e}=r.imageIds;r.fillSize=e}}else r.initialTime=Date.now()-r.start,r.initialSize=r.imageIds.size,pd(e,n),md(e)}}(n)));i.indicesToRequest.forEach((e=>{const n=t.imageIds[e],i={requestType:td};ie.imageLoadPoolManager.addRequest(s.bind(null,n,i),td,{imageId:n},nd)}))}function vd(e){clearTimeout(ud),ud=setTimeout((function(){const t=e.target;try{pd(t),md(t)}catch(e){return}}),5)}const pd=(e,t)=>{const n=od(e);if(!n)return;if(!n.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:i}=n;let{maxAfter:o=2,minBefore:a=2}=gd;const{directionExtraImages:r=10}=gd,s=ed(e)||{indicesToRequest:[],currentImageIdIndex:i,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},l=i-s.currentImageIdIndex;if(s.direction=l<0?-1:1,s.currentImageIdIndex=i,s.enabled=!0,s.stackCount<100&&(s.stackCount+=r),Math.abs(l)>o||!l)if(s.stackCount=0,t){const e=i/n.imageIds.length;a=Math.ceil(t*e),o=Math.ceil(t*(1-e)),s.cacheFill=!0}else s.cacheFill=!1;else l<0?(a+=s.stackCount,o=0):(o+=s.stackCount,a=0);const d=Math.max(0,i-a),c=Math.min(n.imageIds.length-1,i+o),h=[];for(let e=i+1;e<=c;e++)h.push(e);for(let e=i-1;e>=d;e--)h.push(e);s.indicesToRequest=h,Ql(e,s)},fd={enable:e=>{const t=od(e);if(!t)return;if(!t.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");pd(e),md(e),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,vd),e.addEventListener(ie.Enums.Events.STACK_NEW_IMAGE,vd);const n=ad(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n),ie.eventTarget.addEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n)},disable:function(e){clearTimeout(ud),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,vd);const t=ad(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=ed(e);n&&(n.enabled=!1)},getConfiguration:function(){return gd},setConfiguration:function(e){gd=e}};function wd(e,t){if(!(e instanceof ie.VolumeViewport))return;const{focalPoint:n}=e.getCamera(),i=[0,0,0];return Sn.vec3.sub(i,t,n),function(e,t){const n=e.getCamera(),i=n.viewPlaneNormal,o=Sn.vec3.dot(t,i),a=Sn.vec3.fromValues(i[0],i[1],i[2]);if(Sn.vec3.scale(a,a,o),Math.abs(a[0])>.001||Math.abs(a[1])>.001||Math.abs(a[2])>.001){const t=[0,0,0],i=[0,0,0];Sn.vec3.add(t,n.focalPoint,a),Sn.vec3.add(i,n.position,a),e.setCamera({focalPoint:t,position:i}),e.render()}}(e,i),!0}function Id(e,t){const n=Dd(e),i=Dd(t);return{page:yd(n.page,i.page),client:yd(n.client,i.client),canvas:yd(n.canvas,i.canvas),world:(o=n.world,a=i.world,[o[0]-a[0],o[1]-a[1],o[2]-a[2]])};var o,a}function Ed(e,t){const n=Dd(e),i=Dd(t);return{page:Md(n.page,i.page),client:Md(n.client,i.client),canvas:Md(n.canvas,i.canvas),world:Od(n.world,i.world)}}function Cd(e,t){}function _d(e,t){const n=xd(e),i=xd(t);return{page:n.page-i.page,client:n.client-i.client,canvas:n.canvas-i.canvas,world:n.world-i.world}}function bd(e){return JSON.parse(JSON.stringify(e))}function Td(e){return JSON.parse(JSON.stringify(e))}function Dd(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length]})),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function Sd(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length],touch:{identifier:null,radiusX:t.touch.radiusX+n.touch.radiusX/e.length,radiusY:t.touch.radiusY+n.touch.radiusY/e.length,force:t.touch.force+n.touch.force/e.length,rotationAngle:t.touch.rotationAngle+n.touch.rotationAngle/e.length}})),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0],touch:{identifier:null,radiusX:0,radiusY:0,force:0,rotationAngle:0}})}function yd(e,t){return[e[0]-t[0],e[1]-t[1]]}function xd(e){const t=[];for(let n=0;n<e.length;n++)for(let i=0;i<e.length;i++)n<i&&t.push({page:Md(e[n].page,e[i].page),client:Md(e[n].client,e[i].client),canvas:Md(e[n].canvas,e[i].canvas),world:Od(e[n].world,e[i].world)});return t.reduce(((e,n)=>({page:e.page+n.page/t.length,client:e.client+n.client/t.length,canvas:e.canvas+n.canvas/t.length,world:e.world+n.world/t.length})),{page:0,client:0,canvas:0,world:0})}function Md(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function Od(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)+Math.pow(e[2]-t[2],2))}const Pd=function(e,t){const n=t.frameNumbers||[...Array(e.numTimePoints).keys()];if(!t.maskVolumeId&&!t.worldCoordinate)throw new Error("You should provide either maskVolumeId or imageCoordinate");if(t.maskVolumeId&&t.worldCoordinate)throw new Error("You can only use one of maskVolumeId or imageCoordinate");if(t.maskVolumeId){const i=ie.cache.getVolume(t.maskVolumeId),[o,a]=function(e,t,n){const{imageData:i}=n,o=n.voxelManager,a=o.getScalarDataLength(),r=[];r.length=a;const s=[],l=n.dimensions;let d=0;for(let e=0,t=a;e<t;e++)0!==o.getAtIndex(e)&&(s.push([e%l[0],Math.floor(e/l[0]%l[1]),Math.floor(e/(l[0]*l[1]))]),r[d++]=e);r.length=d;const c=t.getScalarDataArrays(),h=[];if(c[0].length===a&&JSON.stringify(t.spacing)===JSON.stringify(n.spacing)){for(let t=0;t<r.length;t++){const n=[];e.forEach((e=>{const i=c[e];n.push(i[r[t]])})),h.push(n)}return[h,s]}const{voxelManager:u}=i.get("voxelManager");return u.forEach((n=>{let{pointLPS:i,value:o,pointIJK:a}=n;if(0===o)return;const r=Tr(t.imageData,t.dimensions,t.spacing,i);let l=0;const d=new Map;e.forEach((e=>d.set(e,0)));t.voxelManager.forEach((t=>{let{index:n}=t;for(let t=0;t<e.length;t++){const i=c[t][n],o=e[t];d.set(o,d.get(o)+i)}l++}),{imageData:t.imageData,boundsIJK:r});const u=[];d.forEach((e=>{u.push(e/l)})),s.push(a),h.push(u)}),{imageData:i}),[h,s]}(n,e,i);return[o,a]}if(t.worldCoordinate){const i=function(e,t,n){const{dimensions:i,imageData:o}=n,a=o.worldToIndex(t);if(a[0]=Math.floor(a[0]),a[1]=Math.floor(a[1]),a[2]=Math.floor(a[2]),!ie.utilities.indexWithinDimensions(a,i))throw new Error("outside bounds");const r=i[0],s=i[0]*i[1],l=n.getScalarDataArrays(),d=[];return e.forEach((e=>{const t=l[e],n=a[2]*s+a[1]*r+a[0];d.push(t[n])})),d}(n,t.worldCoordinate,e);return i}},Ad={[ie.Enums.GenerateImageType.SUM]:(e,t,n)=>{const i=new Float32Array(n);for(const o of t)for(let t=0;t<n;t++)i[t]+=e.getAtIndexAndTimePoint(t,o);return i},[ie.Enums.GenerateImageType.SUBTRACT]:(e,t,n)=>{if(2!==t.length)throw new Error("Please provide only 2 time points for subtraction.");const i=new Float32Array(n);for(let o=0;o<n;o++)i[o]=e.getAtIndexAndTimePoint(o,t[0])-e.getAtIndexAndTimePoint(o,t[1]);return i},[ie.Enums.GenerateImageType.AVERAGE]:(e,t,n)=>{const i=new Float32Array(n);for(const o of t)for(let t=0;t<n;t++)i[t]+=e.getAtIndexAndTimePoint(t,o);for(let e=0;e<n;e++)i[e]/=t.length;return i}},Rd=function(e,t,n){const i=n||[...Array(e.numTimePoints).keys()];if(i.length<=1)throw new Error("Please provide two or more time points");const o=e.voxelManager,a=o.getScalarDataLength(),r=Ad[t];if(!r)throw new Error(`Unsupported operation: ${t}`);return r(o,i,a)};function Ld(e,t){const n=3*t;if(n<e.length)return Sn.vec3.fromValues(e[n],e[n+1],e[n+2])}function Nd(e){const t=e.getLines().getData();let n=0;const i=new Map;for(;n<t.length;){const e=t[n++],o=[];for(let i=0;i<e;i++)o.push(t[n+i]);i.set(o[0],o),n+=e}const o=[],a=e=>{for(const[t,n]of e.entries())if(void 0!==n)return t;return-1};let r=a(i);for(;-1!==r;){const e=[r];for(;i.has(r);){const t=i.get(r)[1];i.has(t)&&e.push(t),i.delete(r),r=t}o.push(e),r=a(i)}return o.length?o:void 0}function Ud(e){const t=Nd(e);if(!t)return;const n=e.getPoints().getData();return t.map((e=>e.map((e=>Ld(n,e)))))}let kd=function(e){return e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right",e}({});const Vd=e=>e&&e.upper>e.lower,Wd=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,Bd=e=>!!e&&e.width>0&&e.height>0,Hd=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:Fd}=ie.utilities;class Gd{constructor(e){ae(this,"_canvas",void 0),ae(this,"_imageRange",void 0),ae(this,"_voiRange",void 0),ae(this,"_colormap",void 0),ae(this,"_showFullImageRange",void 0),Gd.validateProps(e);const{colormap:t,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:o={lower:0,upper:1},container:a,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=i,this._voiRange=o,this._showFullImageRange=r,this._canvas=this._createRootElement(n),a&&this.appendTo(a)}get colormap(){return this._colormap}set colormap(e){this._colormap=e,this.render()}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Bd(e)&&!Hd(t,e)&&(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Vd(e)&&!Wd(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Vd(e)&&!Wd(e,this._voiRange)&&(this._voiRange=e,this.render())}get showFullImageRange(){return this._showFullImageRange}set showFullImageRange(e){e!==this._showFullImageRange&&(this._showFullImageRange=e,this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}dispose(){const{_canvas:e}=this,{parentElement:t}=e;t?.removeChild(e)}static validateProps(e){const{size:t,imageRange:n,voiRange:i}=e;if(t&&!Bd(t))throw new Error('Invalid "size"');if(n&&!Vd(n))throw new Error('Invalid "imageRange"');if(i&&!Vd(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createRootElement(e){const t=document.createElement("canvas");return Object.assign(t.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(t,e),t}render(){if(!this._canvas.isConnected)return;const{_colormap:e}=this,{RGBPoints:t}=e,n=t.length/4,i=e=>{const i=4*e;if(!(e<0||e>=n))return{index:e,position:t[i],color:[t[i+1],t[i+2],t[i+3]]}},{width:o,height:a}=this._canvas,r=this._canvas.getContext("2d"),s=o>a,l=s?o:a,{_voiRange:d}=this,c=this._showFullImageRange?this._imageRange:{...d},{windowWidth:h}=ie.utilities.windowLevel.toWindowLevel(d.lower,d.upper);let u,g=i(0);const m=(c.upper-c.lower)/(l-1);let v=c.lower;for(let e=0;e<l;e++){const t=(v-d.lower)/h;if(g)for(let e=g.index;e<n&&!(t<=g.position);e++)u=g,g=i(e+1);let l;if(u)if(g){const e=(t-u.position)/(g.position-u.position);p=u.color,f=g.color,w=e,l=[p[0]*(1-w)+f[0]*w,p[1]*(1-w)+f[1]*w,p[2]*(1-w)+f[2]*w]}else l=[...u.color];else l=[...g.color];const c=l.map((e=>Fd(Math.round(255*e),0,255)));r.fillStyle=`rgb(${c[0]}, ${c[1]}, ${c[2]})`,s?r.fillRect(e,0,1,a):r.fillRect(0,a-e-1,o,1),v+=m}var p,f,w}}const $d={FONT:"10px Arial",COLOR:"white",TICK_SIZE:5,TICK_WIDTH:1,TICK_LABEL_MARGIN:3,MAX_NUM_TICKS:8,TICKS_STEPS:[1,2.5,5,10]};class qd{constructor(e){ae(this,"_canvas",void 0),ae(this,"_imageRange",void 0),ae(this,"_voiRange",void 0),ae(this,"_color",void 0),ae(this,"_tickSize",void 0),ae(this,"_tickWidth",void 0),ae(this,"_labelMargin",void 0),ae(this,"_maxNumTicks",void 0),ae(this,"_rangeTextPosition",void 0),ae(this,"_showFullPixelValueRange",void 0),ae(this,"_font",void 0),qd.validateProps(e);const{top:t=0,left:n=0,size:i={width:20,height:100},imageRange:o={lower:0,upper:1},voiRange:a={lower:0,upper:1},ticks:r,container:s,showFullPixelValueRange:l=!1}=e,{style:d,position:c}=r??{};this._imageRange=o,this._voiRange=a,this._font=d?.font??$d.FONT,this._color=d?.color??$d.COLOR,this._tickSize=d?.tickSize??$d.TICK_SIZE,this._tickWidth=d?.tickWidth??$d.TICK_WIDTH,this._labelMargin=d?.labelMargin??$d.TICK_LABEL_MARGIN,this._maxNumTicks=d?.maxNumTicks??$d.MAX_NUM_TICKS,this._rangeTextPosition=c??kd.Right,this._showFullPixelValueRange=l,this._canvas=this._createCanvasElement(i,t,n),s&&this.appendTo(s)}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Bd(e)&&!Hd(t,e)&&(this._setCanvasSize(t,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){const{_canvas:t}=this;e!==this.top&&(t.style.top=`${e}px`,this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){const{_canvas:t}=this;e!==this.left&&(t.style.left=`${e}px`,this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Vd(e)&&!Wd(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Vd(e)&&!Wd(e,this._voiRange)&&(this._voiRange=e,this.render())}get tickSize(){return this._tickSize}set tickSize(e){e!==this._tickSize&&(this._tickSize=e,this.render())}get tickWidth(){return this._tickWidth}set tickWidth(e){e!==this._tickWidth&&(this._tickWidth=e,this.render())}get color(){return this._color}set color(e){e!==this._color&&(this._color=e,this.render())}get showFullPixelValueRange(){return this._showFullPixelValueRange}set showFullPixelValueRange(e){e!==this._showFullPixelValueRange&&(this._showFullPixelValueRange=e,this.render())}get visible(){return"block"===this._canvas.style.display}set visible(e){e!==this.visible&&(this._canvas.style.display=e?"block":"none",e&&this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}static validateProps(e){const{size:t,imageRange:n,voiRange:i}=e;if(t&&!Bd(t))throw new Error('Invalid "size"');if(n&&!Vd(n))throw new Error('Invalid "imageRange"');if(i&&!Vd(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createCanvasElement(e,t,n){const i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:`${t}px`,left:`${n}px`}),this._setCanvasSize(i,e),i}_getTicks(e){const{lower:t,upper:n}=e,i=(n-t)/(this._maxNumTicks-1),o=Math.pow(10,-Math.floor(Math.log10(Math.abs(i)))),a=i*o,r=$d.TICKS_STEPS.find((e=>e>=a))/o,s=Math.ceil(n/r)*r,l=Math.floor(t/r)*r,d=Math.round((s-l)/r)+1,c=[];for(let e=0;e<d;e++)c.push(l+e*r);return{scaleMin:l,scaleMax:s,step:r,ticks:c}}_getLeftTickInfo(e){let{position:t,labelMeasure:n}=e;const{width:i}=this._canvas;return{labelPoint:[i-this.tickSize-n.width-this._labelMargin,t],tickPoints:{start:[i-this._tickSize,t],end:[i,t]}}}_getRightTickInfo(e){let{position:t}=e;return{labelPoint:[this._tickSize+this._labelMargin,t],tickPoints:{start:[0,t],end:[this._tickSize,t]}}}_getTopTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}_getBottomTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}render(){const{_canvas:e}=this;if(!e.isConnected||!this.visible)return;const{width:t,height:n}=e,i=t>=n,o=i?t:n,a=e.getContext("2d"),{_voiRange:r}=this,s=this._showFullPixelValueRange?this._imageRange:{...r},l=s.upper-s.lower,{ticks:d}=this._getTicks(s);a.clearRect(0,0,t,n),a.font=this._font,a.textBaseline="middle",a.fillStyle=this._color,a.strokeStyle=this._color,a.lineWidth=this.tickWidth,d.forEach((e=>{let t=Math.round(o*((e-s.lower)/l));if(i||(t=n-t),t<0||t>o)return;const r=e.toString(),d=a.measureText(r);let c;c=i?this._rangeTextPosition===kd.Top?this._getTopTickInfo({position:t,labelMeasure:d}):this._getBottomTickInfo({position:t,labelMeasure:d}):this._rangeTextPosition===kd.Left?this._getLeftTickInfo({position:t,labelMeasure:d}):this._getRightTickInfo({position:t});const{labelPoint:h,tickPoints:u}=c,{start:g,end:m}=u;return a.beginPath(),a.moveTo(g[0],g[1]),a.lineTo(m[0],m[1]),a.fillText(r,h[0],h[1]),a.stroke(),t}))}}class zd{constructor(e){let{id:t,container:n}=e;ae(this,"_id",void 0),ae(this,"_rootElement",void 0),ae(this,"_containerSize",void 0),ae(this,"_containerResizeObserver",void 0),ae(this,"_containerResizeCallback",(e=>{let t,n;const{contentRect:i,contentBoxSize:o}=e[0];i?(t=i.width,n=i.height):o?.length&&(t=o[0].inlineSize,n=o[0].blockSize),this._containerSize={width:t,height:n},this.onContainerResize()})),this._id=t,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(t),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),n&&this.appendTo(n)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){const{_rootElement:t,_containerResizeObserver:n}=this,{parentElement:i}=t;e&&e!==i&&(i&&n.unobserve(i),e.appendChild(t),n.observe(e))}destroy(){const{_rootElement:e,_containerResizeObserver:t}=this,{parentElement:n}=e;n?.removeChild(e),t.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){const t=document.createElement("div");return t.id=e,t.classList.add("widget"),Object.assign(t.style,{width:"100%",height:"100%"}),t}onContainerResize(){}}const jd={MULTIPLIER:1,RANGE_TEXT_POSITION:kd.Right,TICKS_BAR_SIZE:50};class Kd extends zd{constructor(e){super(e),ae(this,"_colormaps",void 0),ae(this,"_activeColormapName",void 0),ae(this,"_eventListenersManager",void 0),ae(this,"_canvas",void 0),ae(this,"_ticksBar",void 0),ae(this,"_rangeTextPosition",void 0),ae(this,"_isMouseOver",!1),ae(this,"_isInteracting",!1),ae(this,"_mouseOverCallback",(e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()})),ae(this,"_mouseOutCallback",(e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()})),ae(this,"_mouseDownCallback",(e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()})),ae(this,"_mouseDragCallback",((e,t)=>{const n=this.getVOIMultipliers(),i=this._getPointsFromMouseEvent(e),{points:o,voiRange:a}=t,r=Sn.vec2.sub(Sn.vec2.create(),i.local,o.local),s=r[0]*n[0],l=r[1]*n[1];if(!s&&!l)return;const{lower:d,upper:c}=a;let{windowWidth:h,windowCenter:u}=ie.utilities.windowLevel.toWindowLevel(d,c);h=Math.max(h+s,1),u+=l;const g=ie.utilities.windowLevel.toLowHighRange(h,u);this.voiRange=g,e.stopPropagation(),e.preventDefault()})),ae(this,"_mouseUpCallback",(e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()})),this._eventListenersManager=new ie.utilities.eventListener.MultiTargetEventListenerManager,this._colormaps=Kd.getColormapsMap(e),this._activeColormapName=Kd.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=e.ticks?.position??jd.RANGE_TEXT_POSITION,this._canvas.appendTo(this.rootElement),this._ticksBar.appendTo(this.rootElement),this._addRootElementEventListeners()}get activeColormapName(){return this._activeColormapName}set activeColormapName(e){if(e===this._activeColormapName)return;const t=this._colormaps.get(e);t?(this._activeColormapName=e,this._canvas.colormap=t):console.warn(`Invalid colormap name (${e})`)}get imageRange(){return this._canvas.imageRange}set imageRange(e){this._canvas.imageRange=e,this._ticksBar.imageRange=e}get voiRange(){return this._canvas.voiRange}set voiRange(e){const{voiRange:t}=this._canvas;Vd(e)&&!Wd(e,t)&&(this._canvas.voiRange=e,this._ticksBar.voiRange=e,this.onVoiChange(e))}get showFullImageRange(){return this._canvas.showFullImageRange}set showFullImageRange(e){this._canvas.showFullImageRange=e,this._ticksBar.showFullPixelValueRange=e}destroy(){super.destroy(),this._eventListenersManager.reset()}createRootElement(){const e=document.createElement("div");return Object.assign(e.style,{position:"relative",fontSize:"0",width:"100%",height:"100%"}),e}onContainerResize(){super.onContainerResize(),this.updateTicksBar(),this._canvas.size=this.containerSize}getVOIMultipliers(){return[jd.MULTIPLIER,jd.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){const{colormaps:t}=e;return t.reduce(((e,t)=>e.set(t.Name,t)),new Map)}static getInitialColormapName(e){const{activeColormapName:t,colormaps:n}=e;return t&&n.some((e=>e.Name===t))?t:n[0].Name}_createCanvas(e){const{imageRange:t,voiRange:n,showFullPixelValueRange:i}=e,o=this._colormaps.get(this._activeColormapName);return new Gd({colormap:o,imageRange:t,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){const t=e.ticks;return new qd({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:t}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],o=t.getBoundingClientRect();return{client:n,page:i,local:[i[0]-o.left-window.pageXOffset,i[1]-o.top-window.pageYOffset]}}updateTicksBar(){const{width:e,height:t}=this.containerSize;if(0===e&&0===t)return;const{_ticksBar:n,_rangeTextPosition:i}=this,o=e>=t,a=o?e:jd.TICKS_BAR_SIZE,r=o?jd.TICKS_BAR_SIZE:t;if(!function(e,t,n){return(e>=t?[kd.Top,kd.Bottom]:[kd.Left,kd.Right]).includes(n)}(e,t,i))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let s,l;n.size={width:a,height:r},o?(l=0,s=i===kd.Top?-r:t):(s=0,l=i===kd.Left?-a:e),n.top=s,n.left=l}_addRootElementEventListeners(){const{_eventListenersManager:e}=this,{rootElement:t}=this;e.addEventListener(t,"mouseover",this._mouseOverCallback),e.addEventListener(t,"mouseout",this._mouseOutCallback),e.addEventListener(t,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){const{_eventListenersManager:t}=this,n={points:this._getPointsFromMouseEvent(e),voiRange:{...this._canvas.voiRange}};this._removeVOIEventListeners(),t.addEventListener(document,"voi.mouseup",this._mouseUpCallback),t.addEventListener(document,"voi.mousemove",(e=>this._mouseDragCallback(e,n)))}_removeVOIEventListeners(){const{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}const{Events:Yd}=ie.Enums,Xd={lower:-1e3,upper:1e3};class Jd extends Kd{constructor(e){const{element:t,volumeId:n}=e,i=Jd._getImageRange(t,n),o=Jd._getVOIRange(t,n);super({...e,imageRange:i,voiRange:o}),ae(this,"_element",void 0),ae(this,"_volumeId",void 0),ae(this,"_hideTicksTime",void 0),ae(this,"_hideTicksTimeoutId",void 0),ae(this,"autoHideTicks",(()=>{if(this._hideTicksTimeoutId)return;const e=this._hideTicksTime-Date.now();e<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout((()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()}),e)})),ae(this,"_stackNewImageCallback",(()=>{this.imageRange=Jd._getImageRange(this._element)})),ae(this,"_imageVolumeModifiedCallback",(e=>{const{volumeId:t}=e.detail;if(t!==this._volumeId)return;const{_element:n}=this;this.imageRange=Jd._getImageRange(n,t)})),ae(this,"_viewportVOIModifiedCallback",(e=>{const{viewportId:t,volumeId:n,range:i,colormap:o}=e.detail,{viewport:a}=this.enabledElement;t===a.id&&n===this._volumeId&&(this.voiRange=i,o&&(this.activeColormapName=o.name),this.showAndAutoHideTicks())})),ae(this,"_viewportColormapModifiedCallback",(e=>{const{viewportId:t,colormap:n,volumeId:i}=e.detail,{viewport:o}=this.enabledElement;t===o.id&&i===this._volumeId&&(this.activeColormapName=n.name)})),this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,ie.getEnabledElement)(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return function(e,t){if("PT"===ie.utilities.getViewportModality(e,t)){const{clientWidth:n,clientHeight:i}=e.element,o=5/Math.max(n,i),a=ts(e,t),{fixedPTWindowWidth:r=!0}={},s=r?0:o;return a?[s,o]:[s,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:t}=this.enabledElement;if(t instanceof ie.StackViewport)t.setProperties({voiRange:e}),t.render();else if(t instanceof ie.VolumeViewport){const{_volumeId:n}=this,i=ie.utilities.getViewportsWithVolumeId(n,t.renderingEngineId);t.setProperties({voiRange:e},n),i.forEach((e=>e.render()))}}static _getImageRange(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o)return Xd;const a=o.actor.getMapper().getInputData().getPointData().getScalars().getRange();return 0===a[0]&&0===a[1]?Xd:{lower:a[0],upper:a[1]}}static _getVOIRange(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o||!ie.utilities.isImageActor(o))return Xd;const a=o.actor.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?Xd:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){const{_element:e}=this;ie.eventTarget.addEventListener(Yd.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(Yd.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(Yd.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(Yd.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}function Zd(e,t,n,i,o){const a=[];let r=0;const s=e.scalarData;let l,d,c;if(e.color)for(d=0;d<o;d++)for(c=0;c<i;c++){l=4*((d+n)*e.columns+(c+t));const i=s[l],o=s[l+1],h=s[l+2];a[r++]=.2126*i+.7152*o+.0722*h}else for(d=0;d<o;d++)for(c=0;c<i;c++)l=(d+n)*e.columns+(c+t),a[r++]=s[l];return a}function Qd(e,t,n){const i=e.length;let o=n,a=t,r=0;if(i<2)return{min:o,max:a,mean:(t+n)/2};for(let t=0;t<i;t++){const n=e[t];o=Math.min(o,n),a=Math.max(a,n),r+=n}return{min:o,max:a,mean:r/i}}function ec(e){if(e instanceof ie.VolumeViewport)return function(e){const{scalarData:t,width:n,height:i}=ie.utilities.getCurrentVolumeViewportSlice(e),{min:o,max:a}=ie.utilities.getMinMax(t);return{scalarData:t,minPixelValue:o,maxPixelValue:a,width:n,height:i,rows:n,columns:i}}(e);if(e instanceof ie.StackViewport)return function(e){const t=e.getImageData(),{scalarData:n}=t,{min:i,max:o}=ie.utilities.getMinMax(n),a=t.dimensions[0],r=t.dimensions[1],{rows:s,columns:l,color:d}=e.getCornerstoneImage();return{scalarData:n,width:a,height:r,minPixelValue:i,maxPixelValue:o,rows:s,columns:l,color:d}}(e);throw new Error("Viewport not supported")}const tc=ie.utilities.roundNumber;function nc(e,t){return!t?.autoGenerated&&(!0===e?.smoothing?.smoothOnAdd||!0===e?.smoothing?.smoothOnEdit)}function ic(e,t,n){return(e+t+n)%t}function oc(e,t,n,i){const[,o,a]=e,[,r,s]=t,l=a.length,d=s.length;let c=e[0],h=t[0];if(!(a[c]&&s[h]&&a[o]&&s[r]))return[void 0,void 0];for(;c!==o&&h!==r;){if(n(s[h],a[c]))return[c,h];c=ic(c,l,i),h=ic(h,d,i)}return[void 0,void 0]}function ac(e,t,n){const{interpolation:i,smoothing:o}=e,a=t;if(i){const{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:i,smoothOnAdd:a=!1,smoothOnEdit:r=!1}=o,s=n?i:e;if(n?r:a){const[e,i]=n?function(e,t){const[n,i]=function(e,t){for(let n=0;n<e.length;n++)for(let i=0;i<t.length;i++)if(0===nl(e[n],t[i]))return[n,i]}(e,t)||[],o=(e,t)=>!1===function(e,t){return nl(e,t)<.001}(e,t),[a,r]=oc([ic(n,e.length,1),n,e],[ic(i,t.length,1),i,t],o,1),[s]=oc([ic(a,e.length,-1),a,e],[ic(r,t.length,-1),r,t],o,-1);return[a,s]}(t,n):[0,t.length-1];return t[e]&&t[i]?ql(t,e,i,s):t}}return a}var rc=function(e){return e[e.Primary=1]="Primary",e[e.Secondary=2]="Secondary",e[e.Primary_And_Secondary=3]="Primary_And_Secondary",e[e.Auxiliary=4]="Auxiliary",e[e.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",e[e.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",e[e.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",e[e.Fourth_Button=8]="Fourth_Button",e[e.Fifth_Button=16]="Fifth_Button",e[e.Wheel=524288]="Wheel",e[e.Wheel_Primary=524289]="Wheel_Primary",e}(rc||{}),sc=function(e){return e[e.Shift=16]="Shift",e[e.Ctrl=17]="Ctrl",e[e.Alt=18]="Alt",e[e.Meta=91]="Meta",e[e.ShiftCtrl=1617]="ShiftCtrl",e[e.ShiftAlt=1618]="ShiftAlt",e[e.ShiftMeta=1691]="ShiftMeta",e[e.CtrlAlt=1718]="CtrlAlt",e[e.CtrlMeta=1791]="CtrlMeta",e[e.AltMeta=1891]="AltMeta",e}(sc||{});const lc=e=>e.shiftKey?e.ctrlKey?sc.ShiftCtrl:e.altKey?sc.ShiftAlt:e.metaKey?sc.ShiftMeta:sc.Shift:e.ctrlKey?e.altKey?sc.CtrlAlt:e.metaKey?sc.CtrlMeta:sc.Ctrl:e.altKey?e.metaKey&&sc.AltMeta||sc.Alt:e.metaKey?sc.Meta:void 0;function dc(e,t){const n=e[0],i=e[e.length-1],o=Sn.vec2.create();Sn.vec2.set(o,i[0]-n[0],i[1]-n[1]),Sn.vec2.normalize(o,o);const a=Sn.vec2.create(),r=Sn.vec2.create();Sn.vec2.set(a,-o[1],o[0]),Sn.vec2.set(r,o[1],-o[0]);const s=[(n[0]+i[0])/2,(n[1]+i[1])/2],l={dist:0,index:null};for(let t=0;t<e.length;t++){const n=e[t],i=Sn.vec2.dist(n,s);i>l.dist&&(l.dist=i,l.index=t)}return[e[l.index],s].map(t.canvasToWorld)}const{addCanvasPointsToArray:cc,pointsAreWithinCloseContourProximity:hc,getFirstLineSegmentIntersectionIndexes:uc,getSubPixelSpacingAndXYDirections:gc}=I;function mc(e,t,n){this.isDrawing=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,ie.getEnabledElement)(a),{viewport:l}=s,d=lc(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:c,xDir:h,yDir:u}=gc(l,this.configuration.subPixelResolution);this.drawData={canvasPoints:[r],polylineIndex:0,contourHoleProcessingEnabled:d},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:u,movingTextBox:!1},je.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpDrawCallback),cr(a)}function vc(e){je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(se.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(se.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(se.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(se.TOUCH_TAP,this.mouseUpDrawCallback),dr(e)}function pc(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{annotation:d,viewportIdsToRender:c,xDir:h,yDir:u,spacing:g,movingTextBox:m}=this.commonData,{polylineIndex:v,canvasPoints:p}=this.drawData,f=p[p.length-1],w=l.canvasToWorld(f),I=Sn.vec3.create();Sn.vec3.subtract(I,o,w);const E=Math.abs(Sn.vec3.dot(I,h)),C=Math.abs(Sn.vec3.dot(I,u));if(!(E<=g[0]&&C<=g[1])){if(m){this.isDrawing=!1;const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.data.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else{const t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{const e=cc(i,p,a,this.commonData);this.drawData.polylineIndex=v+e}}oi(c)}}function fc(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:i}=this.drawData,o=n[0],a=n[n.length-1],r=e.detail,{element:s}=r;t&&!hc(o,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(s,{contourHoleProcessingEnabled:i}):this.completeDrawClosedContour(s,{contourHoleProcessingEnabled:i})}function wc(e,t){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:i,minPointsToSave:o}=t??{};if(o&&n.length<o)return!1;if(this.haltDrawing(e,n))return!1;const{annotation:a,viewportIdsToRender:r}=this.commonData,s=(0,ie.getEnabledElement)(e),{viewport:l,renderingEngine:d}=s;cc(e,n,n[0],this.commonData),n.pop();const c=nc(this.configuration,a)?ac(this.configuration,n):n;this.updateContourPolyline(a,{points:c,closed:!0,targetWindingDirection:qo.Clockwise},l);const{textBox:h}=a.data.handles;return h?.hasMoved||tt(a,i),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,oi(r),this.deactivateDraw(e),!0}function Ic(){const{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],i=e.slice(0,-1).slice(1),o=uc(i,n[0],n[1],!1);if(o){const t=o[1];this.drawData.canvasPoints=1===t?e.splice(1):e.splice(0,t)}}function Ec(e,t){const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:i}=t??{};if(this.haltDrawing(e,n))return!1;const{annotation:o,viewportIdsToRender:a}=this.commonData,r=(0,ie.getEnabledElement)(e),{viewport:s,renderingEngine:l}=r,d=nc(this.configuration,o)?ac(this.configuration,n):n;this.updateContourPolyline(o,{points:d,closed:!1},s);const{textBox:c}=o.data.handles,h=o.data.contour.polyline;return o.data.handles.points=[h[0],h[h.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=dc(n,s)),c.hasMoved||tt(o,i),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,oi(a),this.deactivateDraw(e),!0}function Cc(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{canvasPoints:r}=this.drawData,s=r.slice(0,-1),l=uc(s,o,a,!1);if(void 0!==l)return l[0]}function _c(e,t){const n=e.detail,{element:i}=n,{canvasPoints:o,contourHoleProcessingEnabled:a}=this.drawData,{annotation:r,viewportIdsToRender:s}=this.commonData;cc(i,o,o[t],this.commonData),o.pop();const l=ol(o.slice(t));if(ie.utilities.isEqual(l,0))return void o.splice(t+1);o.splice(0,t);const d={contourHoleProcessingEnabled:a,minPointsToSave:3};this.completeDrawClosedContour(i,d)&&this.activateClosedContourEdit(e,r,s)}function bc(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:i}=this.drawData,o=n[0],a=n[n.length-1];t&&!hc(o,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e,{contourHoleProcessingEnabled:i}):this.completeDrawClosedContour(e,{contourHoleProcessingEnabled:i})}function Tc(e,t){const{subPixelResolution:n}=this.configuration;if(function(e,t){const n=Math.max(3*t,3);return e.length<n}(t,n)){const{annotation:t,viewportIdsToRender:n}=this.commonData,i=(0,ie.getEnabledElement)(e),{renderingEngine:o}=i;return vt(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,oi(n),this.deactivateDraw(e),!0}return!1}const Dc=function(e){e.activateDraw=mc.bind(e),e.deactivateDraw=vc.bind(e),e.applyCreateOnCross=_c.bind(e),e.findCrossingIndexDuringCreate=Cc.bind(e),e.completeDrawOpenContour=Ec.bind(e),e.removeCrossedLinesOnCompleteDraw=Ic.bind(e),e.mouseDragDrawCallback=pc.bind(e),e.mouseUpDrawCallback=fc.bind(e),e.completeDrawClosedContour=wc.bind(e),e.cancelDrawing=bc.bind(e),e.haltDrawing=Tc.bind(e)},{addCanvasPointsToArray:Sc,getFirstLineSegmentIntersectionIndexes:yc}=I;function xc(e,t){const n=e.detail,{element:i,currentPoints:o,lastPoints:a}=n,r=o.canvas,s=a.canvas,{editCanvasPoints:l,prevCanvasPoints:d}=this.editData,c=yc(d,r,s,t);if(c)this.editData.startCrossingIndex=c[0],this.removePointsUpUntilFirstCrossing(t);else if(d.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){const e=l[0],t=[];for(let n=0;n<d.length;n++){const i=d[n],o=Sn.vec2.distance(i,e);t.push({distance:o,index:n})}t.sort(((e,t)=>e.distance-t.distance));const n=[t[0],t[1]],i=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=i}else{const e=Sn.vec2.create();Sn.vec2.subtract(e,l[1],l[0]),Sn.vec2.normalize(e,e);const n=6,o=[l[0][0]-e[0]*n,l[0][1]-e[1]*n],a=yc(d,o,l[0],t);if(a){const e=[o];Sc(i,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function Mc(e){const{editCanvasPoints:t,prevCanvasPoints:n}=this.editData;let i=0;for(let o=0;o<t.length-1;o++){const a=[t[o],t[o+1]];if(i++,yc(n,a[0],a[1],e))break}t.splice(0,i),this.editData.editIndex=t.length-1}function Oc(e,t){const n=e.detail,{currentPoints:i,lastPoints:o}=n,a=i.canvas,r=o.canvas,{prevCanvasPoints:s}=this.editData;return!!yc(s,a,r,t)}function Pc(e){const{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let i=n.length-1;i>0;i--){const o=[n[i],n[i-1]],a=!!yc(t,o[0],o[1],e);if(n.pop(),a)break}}function Ac(){const{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;const i=e[e.length-1],o=[];for(let e=0;e<t.length;e++){const n=t[e],a=Sn.vec2.distance(n,i);o.push({distance:a,index:e})}o.sort(((e,t)=>e.distance-t.distance));const a=e.slice(0,-1);for(let n=0;n<o.length;n++){const{index:i}=o[n],r=t[i],s=e[e.length-1];if(!yc(a,r,s,!1))return i}return-1}function Rc(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{editCanvasPoints:r}=this.editData,s=r.slice(0,-2),l=yc(s,o,a,!1);if(!l)return;const d=l[0],c=r.length-d;for(let e=0;e<c;e++)r.pop()}const Lc=function(e){e.checkForFirstCrossing=xc.bind(e),e.removePointsUpUntilFirstCrossing=Mc.bind(e),e.checkForSecondCrossing=Oc.bind(e),e.findSnapIndex=Ac.bind(e),e.removePointsAfterSecondCrossing=Pc.bind(e),e.checkAndRemoveCrossesOnEditLine=Rc.bind(e)},{getSubPixelSpacingAndXYDirections:Nc,addCanvasPointsToArray:Uc,getArea:kc}=I;function Vc(e,t,n){this.isEditingClosed=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,ie.getEnabledElement)(a);if(!s)return;const{viewport:l}=s,d=t.data.contour.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:u}=Nc(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:u,movingTextBox:!1},je.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(se.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpClosedContourEditCallback),cr(a)}function Wc(e){je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(se.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(se.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(se.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(se.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(se.TOUCH_TAP,this.mouseUpClosedContourEditCallback),dr(e)}function Bc(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:m,startCrossingIndex:v}=this.editData,p=m[m.length-1],f=l.canvasToWorld(p),w=Sn.vec3.create();Sn.vec3.subtract(w,o,f);const I=Math.abs(Sn.vec3.dot(w,c)),E=Math.abs(Sn.vec3.dot(w,h));if(I<=u[0]&&E<=u[1])return;void 0!==v&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+Uc(i,m,a,this.commonData);this.editData.editIndex=C,void 0===v&&m.length>1&&this.checkForFirstCrossing(e,!0),this.editData.snapIndex=this.findSnapIndex(),-1!==this.editData.snapIndex?(this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(e),void 0!==v&&this.checkForSecondCrossing(e,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(e)),oi(d)):this.finishEditAndStartNewEdit(e)}function Hc(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData;Ji(r,{points:l,closed:!0,targetWindingDirection:qo.Clockwise},o),r.autoGenerated&&(r.autoGenerated=!1),Qe(r,n);const c=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[c],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0},oi(s)}function Fc(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;Uc(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=Sn.vec2.distance(t[l],s[0]),h=Sn.vec2.distance(t[l],s[s.length-1]),u=Sn.vec2.distance(t[d],s[0]),g=Sn.vec2.distance(t[d],s[s.length-1]),m=[];for(let e=0;e<l;e++){const n=t[e];m.push([n[0],n[1]])}let v=c+g,p=h+u;if(v<p)for(let e=0;e<s.length;e++){const t=s[e];m.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];m.push([t[0],t[1]])}for(let e=d;e<t.length;e++){const n=t[e];m.push([n[0],n[1]])}const f=[];for(let e=l;e<d;e++){const n=t[e];f.push([n[0],n[1]])}if(v=u+h,p=g+c,v<p)for(let e=0;e<s.length;e++){const t=s[e];f.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];f.push([t[0],t[1]])}return kc(m)>kc(f)?m:f}function Gc(e){const t=e.detail,{element:n}=t;this.completeClosedContourEdit(n)}function $c(e){const t=(0,ie.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const t=nc(this.configuration,o)?ac(this.configuration,r,s):r,i=this.configuration?.decimate||{};Ji(o,{points:t,closed:!0,targetWindingDirection:qo.Clockwise},n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}}),o.autoGenerated&&(o.autoGenerated=!1),Qe(o,e)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,oi(a),this.deactivateClosedContourEdit(e)}function qc(e){this.completeClosedContourEdit(e)}const zc=function(e){e.activateClosedContourEdit=Vc.bind(e),e.deactivateClosedContourEdit=Wc.bind(e),e.mouseDragClosedContourEditCallback=Bc.bind(e),e.mouseUpClosedContourEditCallback=Gc.bind(e),e.finishEditAndStartNewEdit=Hc.bind(e),e.fuseEditPointsWithClosedContour=Fc.bind(e),e.cancelClosedContourEdit=qc.bind(e),e.completeClosedContourEdit=$c.bind(e)},{addCanvasPointsToArray:jc,getSubPixelSpacingAndXYDirections:Kc}=I;function Yc(e,t,n){this.isEditingOpen=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,ie.getEnabledElement)(a),{viewport:l}=s,d=t.data.contour.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:u}=Kc(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:u,movingTextBox:!1},je.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(se.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpOpenContourEditCallback),cr(a)}function Xc(e){je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(se.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(se.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(se.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(se.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(se.TOUCH_TAP,this.mouseUpOpenContourEditCallback),dr(e)}function Jc(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:m,startCrossingIndex:v}=this.editData,p=m[m.length-1],f=l.canvasToWorld(p),w=Sn.vec3.create();Sn.vec3.subtract(w,o,f);const I=Math.abs(Sn.vec3.dot(w,c)),E=Math.abs(Sn.vec3.dot(w,h));if(I<=u[0]&&E<=u[1])return;void 0!==v&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+jc(i,m,a,this.commonData);this.editData.editIndex=C,void 0===v&&m.length>1&&this.checkForFirstCrossing(e,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(e),void 0!==v&&this.checkForSecondCrossing(e,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(e)):this.checkIfShouldOverwriteAnEnd(e)&&this.openContourEditOverwriteEnd(e),oi(d)}function Zc(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o}=i,{annotation:a,viewportIdsToRender:r}=this.commonData;Ji(a,{points:this.fuseEditPointsForOpenContourEndEdit(),closed:!1},o);const s=a.data.contour.polyline;a.data.handles.points=[s[0],s[s.length-1]],a.data.handles.activeHandleIndex=1,Qe(a,n),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(e,a,r,null)}function Qc(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{snapIndex:r,prevCanvasPoints:s,startCrossingIndex:l}=this.editData;if(void 0===l||void 0===r)return!1;if(-1===r)return!0;if(0!==r&&r!==s.length-1)return!1;const d=o,c=a,h=s[r],u=Sn.vec2.create(),g=Sn.vec2.create();Sn.vec2.set(u,d[0]-c[0],d[1]-c[1]),Sn.vec2.set(g,d[0]-h[0],d[1]-h[1]);const m=Sn.vec2.dot(u,g),v=Math.sqrt(u[0]*u[0]+u[1]*u[1]),p=Math.sqrt(g[0]*g[0]+g[1]*g[1]);return Math.acos(m/(v*p))<Math.PI/2}function eh(){const{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i}=this.editData,o=[];if(0===e)for(let e=t.length-1;e>=i;e--){const n=t[e];o.push([n[0],n[1]])}else for(let e=0;e<i;e++){const n=t[e];o.push([n[0],n[1]])}if(Sn.vec2.distance(t[i],n[0])<Sn.vec2.distance(t[i],n[n.length-1]))for(let e=0;e<n.length;e++){const t=n[e];o.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){const t=n[e];o.push([t[0],t[1]])}return o}function th(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;jc(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=Sn.vec2.distance(t[l],s[0]),h=Sn.vec2.distance(t[l],s[s.length-1]),u=Sn.vec2.distance(t[d],s[0]),g=Sn.vec2.distance(t[d],s[s.length-1]),m=[];for(let e=0;e<l;e++){const n=t[e];m.push([n[0],n[1]])}if(c+g<h+u)for(let e=0;e<s.length;e++){const t=s[e];m.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];m.push([t[0],t[1]])}for(let e=d;e<t.length;e++){const n=t[e];m.push([n[0],n[1]])}return m}function nh(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData;Ji(r,{points:l,closed:!1},o);const c=r.data.contour.polyline;r.data.handles.points=[c[0],c[c.length-1]],Qe(r,n);const h=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0},oi(s)}function ih(e){const t=e.detail,{element:n}=t;this.completeOpenContourEdit(n)}function oh(e){const t=(0,ie.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const t=nc(this.configuration)?ac(this.configuration,r,s):r,i=this.configuration?.decimate||{};Ji(o,{points:t,closed:!1},n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}});const a=o.data.contour.polyline;o.data.handles.points=[a[0],a[a.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=dc(r,n)),Qe(o,e)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,oi(a),this.deactivateOpenContourEdit(e)}function ah(e){this.completeOpenContourEdit(e)}const rh=function(e){e.activateOpenContourEdit=Yc.bind(e),e.deactivateOpenContourEdit=Xc.bind(e),e.mouseDragOpenContourEditCallback=Jc.bind(e),e.mouseUpOpenContourEditCallback=ih.bind(e),e.fuseEditPointsWithOpenContour=th.bind(e),e.finishEditOpenOnSecondCrossing=nh.bind(e),e.checkIfShouldOverwriteAnEnd=Qc.bind(e),e.fuseEditPointsForOpenContourEndEdit=eh.bind(e),e.openContourEditOverwriteEnd=Zc.bind(e),e.cancelOpenContourEdit=ah.bind(e),e.completeOpenContourEdit=oh.bind(e)},{getSubPixelSpacingAndXYDirections:sh}=I;function lh(e,t,n,i){this.isDrawing=!0;const o=e.detail,{element:a}=o,r=(0,ie.getEnabledElement)(a),{viewport:s}=r,{spacing:l,xDir:d,yDir:c}=sh(s,this.configuration.subPixelResolution),h=t.data.contour.polyline.map(s.worldToCanvas);0===t.data.handles.activeHandleIndex&&h.reverse();let u=!1;i?.worldPosition&&(u=!0),this.drawData={canvasPoints:h,polylineIndex:h.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:l,xDir:d,yDir:c,movingTextBox:u},je.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpDrawCallback),cr(a)}const dh=function(e){e.activateOpenContourEndEdit=lh.bind(e)};function ch(e,t,n,i,o){const a=i.length&&i[0].length&&Array.isArray(i[0][0])?i:[i],{color:r="rgb(0, 255, 0)",width:s=10,fillColor:l="none",fillOpacity:d=0,lineWidth:c,lineDash:h,closePath:u=!1}=o,g=c||s,m=Ja(t,"path",n),v=e.getSvgNode(m);let p="";for(let e=0,t=a.length;e<t;e++){const t=a[e],n=t.length;if(!(n<2)){for(let e=0;e<n;e++){const n=t[e];p+=`${e?"L":"M"} ${n[0].toFixed(1)}, ${n[1].toFixed(1)} `}u&&(p+="Z ")}}if(!p)return;const f={d:p,stroke:r,fill:l,"fill-opacity":d,"stroke-width":g,"stroke-dasharray":h};if(v)Za(f,v),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg","path");Qa(f,t),e.appendNode(t,m)}}function hh(e,t,n,i,o){if(i.length<2)return;const{color:a="rgb(0, 255, 0)",width:r=10,fillColor:s="none",fillOpacity:l=0,lineWidth:d,lineDash:c,closePath:h=!1}=o,u=d||r,g=Ja(t,"polyline",n),m=e.getSvgNode(g);let v="";for(const e of i)v+=`${e[0].toFixed(1)}, ${e[1].toFixed(1)} `;if(h){const e=i[0];v+=`${e[0]}, ${e[1]}`}const p={points:v,stroke:a,fill:s,"fill-opacity":l,"stroke-width":u,"stroke-dasharray":c};if(m)Za(p,m),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","polyline");Qa(p,t),e.appendNode(t,g)}}const{pointsAreWithinCloseContourProximity:uh}=I;function gh(e,t){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},{lineWidth:i,lineDash:o,color:a,fillColor:r,fillOpacity:s}=this.getAnnotationStyle({annotation:t,styleSpecifier:n}),{closed:l}=t.data.contour;return{color:a,width:i,lineDash:o,fillColor:r,fillOpacity:s,closePath:l}}function mh(e,t,n){e?.viewport?.getImageData()&&(n.data.contour.closed?this.renderClosedContour(e,t,n):n.data.isOpenUShapeContour?(function(e,t){t.data.openUShapeContourVectorToPeak||(t.data.openUShapeContourVectorToPeak=function(e,t){const{viewport:n}=e;return dc(t.data.contour.polyline.map(n.worldToCanvas),n)}(e,t))}(e,n),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n))}function vh(e,t,n){if(n.parentAnnotationUID)return;const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=[n.data.contour.polyline.map((e=>i.worldToCanvas(e))),...Gi(n,i)];ch(t,n.annotationUID,"1",a,o)}function ph(e,t,n){const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=n.data.contour.polyline.map((e=>i.worldToCanvas(e)));hh(t,n.annotationUID,"1",a,o);const r=n.data.handles.activeHandleIndex;if(!0===this.configuration.alwaysRenderOpenContourHandles?.enabled){const e=this.configuration.alwaysRenderOpenContourHandles.radius,i="0",s=[a[0],a[a.length-1]];0===r?s.shift():1===r&&s.pop(),xr(t,n.annotationUID,i,s,{color:o.color,handleRadius:e})}if(null!==r){const e="1",i=a[0===r?0:a.length-1];xr(t,n.annotationUID,e,[i],{color:o.color})}}function fh(e,t,n){const{viewport:i}=e,{openUShapeContourVectorToPeak:o}=n.data,{polyline:a}=n.data.contour;if(this.renderOpenContour(e,t,n),!o)return;const r=i.worldToCanvas(a[0]),s=i.worldToCanvas(a[a.length-1]),l=[i.worldToCanvas(o[0]),i.worldToCanvas(o[1])],d=this._getRenderingOptions(e,n);hh(t,n.annotationUID,"first-to-last",[r,s],{color:d.color,width:d.width,closePath:!1,lineDash:"2,2"}),hh(t,n.annotationUID,"midpoint-to-open-contour",[l[0],l[1]],{color:d.color,width:d.width,closePath:!1,lineDash:"2,2"})}function wh(e,t,n){const i=this._getRenderingOptions(e,n),{allowOpenContours:o}=this.configuration,{canvasPoints:a}=this.drawData;if(i.closePath=!1,hh(t,n.annotationUID,"1",a,i),o){const e=a[0],o=a[a.length-1];if(uh(e,o,this.configuration.closeContourProximity))hh(t,n.annotationUID,"2",[o,e],i);else{const o="0";xr(t,n.annotationUID,o,[e],{color:i.color,handleRadius:2})}}}function Ih(e,t,n){const{viewport:i}=e,{fusedCanvasPoints:o}=this.editData;if(void 0===o)return void this.renderClosedContour(e,t,n);const a=[o,...Gi(n,i)],r=this._getRenderingOptions(e,n);n.parentAnnotationUID&&r.fillOpacity&&(r.fillOpacity=0),ch(t,n.annotationUID,"preview-1",a,r)}function Eh(e,t,n){const{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderOpenContour(e,t,n);const o=this._getRenderingOptions(e,n);hh(t,n.annotationUID,"preview-1",i,o)}function Ch(e,t,n){if(n.parentAnnotationUID)return;const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=n.data.contour.polyline.map((e=>i.worldToCanvas(e))),r=Gi(n,i),s=a[0],l=[];for(let e=0;e<100;e++){const t=e/100*2*Math.PI,n=s[0]+6*Math.cos(t),i=s[1]+6*Math.sin(t);l.push([n,i])}const d=[[s[0]-12,s[1]],[s[0]+12,s[1]],[s[0],s[1]-12],[s[0],s[1]+12]];ch(t,n.annotationUID,"1-crosshair_v",[d[0],d[1]],o),ch(t,n.annotationUID,"1-crosshair_h",[d[2],d[3]],o);const c=[l,...r];ch(t,n.annotationUID,"1",c,o)}const _h=function(e){e.renderContour=mh.bind(e),e.renderClosedContour=vh.bind(e),e.renderOpenContour=ph.bind(e),e.renderPointContourWithMarker=Ch.bind(e),e.renderOpenUShapedContour=fh.bind(e),e.renderContourBeingDrawn=wh.bind(e),e.renderClosedContourBeingEdited=Ih.bind(e),e.renderOpenContourBeingEdited=Eh.bind(e),e._getRenderingOptions=gh.bind(e)};function bh(e,t,n){Wu(t)&&(og(e,t,n),tn(t))}function Th(e,t){return ig(e,t)}function Dh(e,t,n,i){const o=xh(e,t);n.forEach((e=>{i?o.delete(e):o.add(e)})),tn(t)}function Sh(e,t,n,i){const o=xh(e,t);i?o.delete(n):o.add(n),tn(t)}function yh(e,t,n){return!xh(e,t).has(n)}function xh(e,t){const n=ju(e);return n?n[t]?.segmentsHidden??new Set:new Set}function Mh(){return Yu()}function Oh(e){Xu(e)}function Ph(e){return Mh().representations[e]}function Ah(e,t){const n=Mh();Oh({...n,representations:{...n.representations,[e]:{...n.representations[e],...t}}})}function Rh(e){return Hu(e)}function Lh(e,t){Fu(e,t)}function Nh(e,t){$u(e,t)}function Uh(e){return Gu(e)}function kh(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Gu(e)[t]=n,i||tn(e)}function Vh(e,t){const n=Gu(e);return n?.[t]}class Wh extends Gr{constructor(e,t){super(e,t)}renderAnnotation(e,t){let n=!1;const{viewport:i}=e,{element:o}=i;if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let i=0;i<a.length;i++){const o=a[i];s.annotationUID=o.annotationUID;const l=this.getAnnotationStyle({annotation:o,styleSpecifier:s});if(!l.visibility)continue;const d=this.renderAnnotationInstance({enabledElement:e,targetId:r,annotation:o,annotationStyle:l,svgDrawingHelper:t});n||=d,o.invalidated=!1}return n}createAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,{world:o}=n,a=(0,ie.getEnabledElement)(i),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l,viewUp:d,position:c}=s,h=this.getReferencedImageId(r,o,l,d),u=r.getViewReference({points:[o]});return{highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),...u,referencedImageId:h,viewUp:d,cameraPosition:c},data:{handles:{points:[],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{polyline:[],closed:!1}},interpolationUID:"",autoGenerated:!1}}addAnnotation(e,t){return gt(e,t)}cancelAnnotation(e){}moveAnnotation(e,t){const{points:n}=e.data.handles;for(let e=0,i=n.length;e<i;e++){const i=n[e];i[0]+=t[0],i[1]+=t[1],i[2]+=t[2]}e.invalidated=!0,ut(e).forEach((e=>this.moveAnnotation(e,t)))}updateContourPolyline(e,t,n){const i=this.configuration?.decimate||{};Ji(e,t,n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}})}getPolylinePoints(e){return e.data.contour?.polyline??e.data.polyline}renderAnnotationInstance(e){const{enabledElement:t,annotationStyle:n,svgDrawingHelper:i}=e,o=e.annotation;if(o.parentAnnotationUID)return;const{annotationUID:a}=o,{viewport:r}=t,{worldToCanvas:s}=r,l=this.getPolylinePoints(o).map((e=>s(e))),{lineWidth:d,lineDash:c,color:h,fillColor:u,fillOpacity:g}=n;return ch(i,a,"contourPolyline",[l,...Gi(o,r)],{color:h,lineDash:c,lineWidth:Math.max(.1,d),fillColor:u,fillOpacity:g}),!0}}class Bh extends Wh{constructor(e,t){super(e,t),this.configuration.interpolation?.enabled&&ua.addTool(this.getToolName())}isContourSegmentationTool(){return!0}createAnnotation(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n);if(!i)return;const{viewport:o}=i,a=super.createAnnotation(e);if(!this.isContourSegmentationTool())return a;const r=ur(o.id);if(!r)throw new Error("No active segmentation detected, create one before using scissors tool");const{type:s}=r;if(s!==Ct.Contour)throw new Error("A contour segmentation must be active");const{segmentationId:l}=r,d=Er(l);return ie.utilities.deepMerge(a,{data:{segmentation:{segmentationId:l,segmentIndex:d}}})}addAnnotation(e,t){const n=super.addAnnotation(e,t);return this.isContourSegmentationTool()&&Fo(e),n}cancelAnnotation(e){this.isContourSegmentationTool()&&Ho(e),super.cancelAnnotation(e)}getAnnotationStyle(e){const t=super.getAnnotationStyle(e);if(!this.isContourSegmentationTool())return t;const n=this._getContourSegmentationStyle(e);return ie.utilities.deepMerge(t,n)}renderAnnotationInstance(e){const{annotation:t}=e,{invalidated:n}=t,i=super.renderAnnotationInstance(e);if(n&&this.isContourSegmentationTool()){const{segmentationId:e}=t.data.segmentation;on(e);const n=qu(e).map((e=>Vn(e).id));ri(n)}return i}_getContourSegmentationStyle(e){const t=e.annotation,{segmentationId:n,segmentIndex:i}=t.data.segmentation,o=Nu(n),a=Bu(n);if(!a?.length)return{};const r=a.map((e=>e.segmentationRepresentationUID));let s;s=a.length>1?zu(e.styleSpecifier.viewportId).find((e=>e.segmentationId===n&&r.includes(e.segmentationRepresentationUID))):a[0];const{segmentationRepresentationUID:l}=s,{autoGenerated:d}=t,c=fr(n).includes(i),h=mn(l,i),u=e.styleSpecifier.viewportId,g=Th(u,l),m=Mh(),v=Rh(l),p=Vh(l,i),f=yh(u,l,i),w=ag(u).segmentationRepresentationUID===l,I=Object.assign({},m?.representations?.CONTOUR??{},v?.CONTOUR??{},p?.CONTOUR??{});let E,C=1,_=1,b=0;d?(C=I.outlineWidthAutoGenerated??C,E=I.outlineDashAutoGenerated??E,_=I.outlineOpacity??_,b=I.fillAlphaAutoGenerated??b):w?(C=I.outlineWidthActive??C,E=I.outlineDashActive??E,_=I.outlineOpacity??_,b=I.fillAlpha??b):(C=I.outlineWidthInactive??C,E=I.outlineDashInactive??E,_=I.outlineOpacityInactive??_,b=I.fillAlphaInactive??b),o.activeSegmentIndex===i&&(C+=I.activeSegmentOutlineWidthDelta),C=I.renderOutline?C:0,b=I.renderFill?b:0;const T=`rgba(${h[0]}, ${h[1]}, ${h[2]}, ${_})`;return{color:T,fillColor:`rgb(${h[0]}, ${h[1]}, ${h[2]})`,lineWidth:C,fillOpacity:b,lineDash:E,textbox:{color:T},visibility:g&&f,locked:c}}}const{pointCanProjectOnLine:Hh}=I,{EPSILON:Fh}=ie.CONSTANTS,Gh=1-Fh;class $h extends Bh{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:sc.Shift,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,makeClockWise:!0,subPixelResolution:4,smoothing:{smoothOnAdd:!1,smoothOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},interpolation:{enabled:!1,onInterpolationComplete:null},decimate:{enabled:!1,epsilon:.1},displayOnePointAsCrosshairs:!1,calculateStats:!0,getTextLines:qh,statsCalculator:rs}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"commonData",void 0),ae(this,"isDrawing",!1),ae(this,"isEditingClosed",!1),ae(this,"isEditingOpen",!1),ae(this,"activateDraw",void 0),ae(this,"activateClosedContourEdit",void 0),ae(this,"activateOpenContourEdit",void 0),ae(this,"activateOpenContourEndEdit",void 0),ae(this,"cancelDrawing",void 0),ae(this,"cancelClosedContourEdit",void 0),ae(this,"cancelOpenContourEdit",void 0),ae(this,"renderContour",void 0),ae(this,"renderContourBeingDrawn",void 0),ae(this,"renderClosedContourBeingEdited",void 0),ae(this,"renderOpenContourBeingEdited",void 0),ae(this,"renderPointContourWithMarker",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,i=this.createAnnotation(e);this.addAnnotation(i,n);const o=Vo(n,this.getToolName());return this.activateDraw(e,i,o),e.preventDefault(),oi(o),i})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=Vo(o,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n,o=Vo(i,this.getToolName());t.data.contour.closed?this.activateClosedContourEdit(e,t,o):this.activateOpenContourEdit(e,t,o),e.preventDefault()})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{polyline:r}=t.data.contour;let s=a.worldToCanvas(r[0]);for(let e=1;e<r.length;e++){const t=s,o=a.worldToCanvas(r[e]);if(Hh(n,t,o,i))return!0;s=o}if(!t.data.contour.closed)return!1;const l=a.worldToCanvas(r[0]),d=a.worldToCanvas(r[r.length-1]);return Hh(n,l,d,i)})),ae(this,"cancel",(e=>{const t=this.isDrawing,n=this.isEditingOpen,i=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):i&&this.cancelClosedContourEdit(e)})),ae(this,"_calculateCachedStats",((e,t,n,i)=>{const{data:o}=e,{cachedStats:a}=o,{polyline:r,closed:s}=o.contour,l=Object.keys(a);for(let i=0;i<l.length;i++){const d=l[i],c=this.getTargetIdImage(d,n);if(!c)continue;const{imageData:h,metadata:u}=c,g=r.map((e=>t.worldToCanvas(e))),m={isPreScaled:ts(t,d),isSuvScaled:this.isSuvScaled(t,d,e.metadata.referencedImageId)},v=es(u.Modality,e.metadata.referencedImageId,m),p=Ln(c,(()=>{const e=o.contour.polyline,n=e.length,i=new Array(n);for(let o=0;o<n;o++)i[o]=t.worldToCanvas(e[o]);const{maxX:a,maxY:r,minX:s,minY:l}=kn(i),d=t.canvasToWorld([s,l]),c=ie.utilities.transformWorldToIndex(h,d),u=t.canvasToWorld([a,r]);return[c,ie.utilities.transformWorldToIndex(h,u)]}));s?this.updateClosedCachedStats({targetId:d,viewport:t,canvasCoordinates:g,points:r,imageData:h,metadata:u,cachedStats:a,pixelValueUnits:v,calibratedScale:p}):this.updateOpenCachedStats({metadata:u,canvasCoordinates:g,targetId:d,cachedStats:a,pixelValueUnits:v,calibratedScale:p})}return Qe(e,i.viewport.element,$e.StatsUpdated),e.invalidated=!1,a})),ae(this,"_renderStats",((e,t,n,i)=>{const{data:o}=e,a=this.getTargetId(t),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},s=this.getLinkedTextBoxStyle(r,e);if(!s.visibility)return;const l=this.configuration.getTextLines(o,a);if(!l||0===l.length)return;const d=o.contour.polyline.map((e=>t.worldToCanvas(e)));if(!o.handles.textBox.hasMoved){const e=Zr(d);o.handles.textBox.worldPosition=t.canvasToWorld(e)}const c=t.worldToCanvas(o.handles.textBox.worldPosition),h=Yr(i,e.annotationUID??"","1",l,c,d,{},s),{x:u,y:g,width:m,height:v}=h;o.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([u,g]),topRight:t.canvasToWorld([u+m,g]),bottomLeft:t.canvasToWorld([u,g+v]),bottomRight:t.canvasToWorld([u+m,g+v])}})),Dc(this),Lc(this),zc(this),rh(this),dh(this),_h(this),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ie.getEnabledElement)(e),{viewport:i}=n;let o;if(i instanceof ie.VolumeViewport){const e=i.getCamera(),{spacingInNormalDirection:n}=ie.utilities.getTargetVolumeAndSpacingInNormalDir(i,e);o=this.filterAnnotationsWithinSlice(t,e,n)}else o=Lr(i,t);return o}filterAnnotationsWithinSlice(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{const t=e.metadata.viewPlaneNormal,n=Math.abs(Sn.vec3.dot(i,t))>Gh;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.contour.polyline[0];if(!e.isVisible)continue;const n=Sn.vec3.create();Sn.vec3.sub(n,r,t);const o=Sn.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}isContourSegmentationTool(){return!1}createAnnotation(e){const t=e.detail.currentPoints.world,n=super.createAnnotation(e);return ie.utilities.deepMerge(n,{data:{contour:{polyline:[[...t]]},label:"",cachedStats:{}},onInterpolationComplete:e=>{e.data.handles.points.length=0}})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){const{enabledElement:t,targetId:n,svgDrawingHelper:i}=e,o=e.annotation;let a=!1;const{viewport:r,renderingEngine:s}=t,l=this.isDrawing,d=this.isEditingOpen,c=this.isEditingClosed;if(l||d||c){const e=this.commonData.annotation.annotationUID;if(o.annotationUID===e)if(l)this.renderContourBeingDrawn(t,i,o);else if(c)this.renderClosedContourBeingEdited(t,i,o);else{if(!d)throw new Error(`Unknown ${this.getToolName()} annotation rendering state`);this.renderOpenContourBeingEdited(t,i,o)}else this.configuration.displayOnePointAsCrosshairs&&1===o.data.contour.polyline.length?this.renderPointContourWithMarker(t,i,o):this.renderContour(t,i,o);a=!0}else this.configuration.displayOnePointAsCrosshairs&&1===o.data.contour.polyline.length?this.renderPointContourWithMarker(t,i,o):this.renderContour(t,i,o);if(this.configuration.calculateStats)return this._calculateStatsIfActive(o,n,r,s,t),this._renderStats(o,r,t,i),a}_calculateStatsIfActive(e,t,n,i,o){const a=this.commonData?.annotation.annotationUID;if((e.annotationUID!==a||this.commonData?.movingTextBox)&&!this.commonData?.movingTextBox){const{data:a}=e;a.cachedStats[t]&&null!=a.cachedStats[t].areaUnits?e.invalidated&&this._throttledCalculateCachedStats(e,n,i,o):(a.cachedStats[t]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null},this._calculateCachedStats(e,n,i,o))}}updateClosedCachedStats(e){let{viewport:t,points:n,imageData:i,metadata:o,cachedStats:a,targetId:r,pixelValueUnits:s,canvasCoordinates:l,calibratedScale:d}=e;const{scale:c,areaUnits:h,units:u}=d,{voxelManager:g}=t.getImageData(),m=l[0],v=t.canvasToWorld(m),p=t.canvasToWorld([m[0]+1,m[1]]),f=t.canvasToWorld([m[0],m[1]+1]),w=Sn.vec3.distance(v,p),I=Sn.vec3.distance(v,f),E=ie.utilities.transformWorldToIndex(i,n[0]);E[0]=Math.floor(E[0]),E[1]=Math.floor(E[1]),E[2]=Math.floor(E[2]);let C=E[0],_=E[0],b=E[1],T=E[1],D=E[2],S=E[2];for(let e=1;e<n.length;e++){const t=ie.utilities.transformWorldToIndex(i,n[e]);t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),C=Math.min(C,t[0]),_=Math.max(_,t[0]),b=Math.min(b,t[1]),T=Math.max(T,t[1]),D=Math.min(D,t[2]),S=Math.max(S,t[2])}const y=ie.utilities.transformWorldToIndex(i,n[1]);y[0]=Math.floor(y[0]),y[1]=Math.floor(y[1]),y[2]=Math.floor(y[2]);let x=ol(l)/c/c;x*=w*I;const M=.01*(_-C),O=.01*(T-b),P=.01*(S-D);C=Math.floor(C-M),_=Math.ceil(_+M),b=Math.floor(b-O),T=Math.ceil(T+O),D=Math.floor(D-P),S=Math.ceil(S+P);const A=[[C,_],[b,T],[D,S]],R=i.indexToWorld([_,T,S]),L=t.worldToCanvas(R);let N=0,U=[],k=0;const V=g.forEach(this.configuration.statsCalculator.statsCallback,{imageData:i,isInObject:(e,n)=>{let i=!0;const o=t.worldToCanvas(e);return o[1]!=N&&(k=0,N=o[1],U=rl(l,o,[L[0],o[1]]),U.sort((function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}))),U.length&&o[0]>U[0][0]&&(U.shift(),k++),k%2==0&&(i=!1),i},boundsIJK:A,returnPoints:this.configuration.storePointData}),W=this.configuration.statsCalculator.getStatistics();a[r]={Modality:o.Modality,area:x,perimeter:fa(l,closed)/c,mean:W.mean?.value,max:W.max?.value,stdDev:W.stdDev?.value,statsArray:W.array,pointsInShape:V,areaUnits:h,pixelValueUnits:s,lengthUnits:u}}updateOpenCachedStats(e){let{targetId:t,metadata:n,canvasCoordinates:i,cachedStats:o,pixelValueUnits:a,calibratedScale:r}=e;const{scale:s,units:l}=r;o[t]={Modality:n.Modality,length:fa(i,!1)/s,pixelValueUnits:a,getPixelValueUnitunit:l}}}function qh(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,length:r,perimeter:s,max:l,isEmptyArea:d,lengthUnits:c,areaUnits:h,pixelValueUnits:u}=n||{},g=[];if(i){const e=d?"Area: Oblique not supported":`Area: ${tc(i)} ${h}`;g.push(e)}return o&&g.push(`Mean: ${tc(o)} ${u}`),Number.isFinite(l)&&g.push(`Max: ${tc(l)} ${u}`),a&&g.push(`Std Dev: ${tc(a)} ${u}`),s&&g.push(`Perimeter: ${tc(s)} ${c}`),r&&g.push(`${tc(r)} ${c}`),g}ae($h,"toolName",void 0),$h.toolName="PlanarFreehandROI";const zh=$h;class jh extends zh{constructor(e){super(ie.utilities.deepMerge({configuration:{calculateStats:!1,allowOpenContours:!1}},e))}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){const t=e.annotation,{invalidated:n}=t,i=super.renderAnnotationInstance(e);if(n){const{segmentationId:e}=t.data.segmentation;on(e)}return i}}ae(jh,"toolName",void 0),jh.toolName="PlanarFreehandContourSegmentationTool";const Kh=jh,Yh=e=>{const{numberOfCells:t,lines:n}=e,i=[],o=[];for(let e=0;e<n.length;){const a=n[e];if(o.push(a),i.push(n.slice(e+1,e+a+1)),e+=a+1,i.length===t)break}return{lineSegments:i,linesNumberOfPoints:o}};function Xh(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ln(e,Ct.Contour,(()=>async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.segmentIndices?.length?t.segmentIndices:Zt(e);let i;const o=Nu(e).representationData;try{o.SURFACE?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("Viewport is required to compute contour from surface");const{viewport:n,segmentationRepresentationUID:i}=t,o=t.segmentIndices?.length?t.segmentIndices:Zt(e),a=new Map,r=new Map,s=Nu(e).representationData.SURFACE,l=[];return s.geometryIds.forEach(((e,t)=>{if(o.includes(t)){a.set(t,e);const n=ie.cache.getGeometry(e)?.data;n&&l.push({id:e,points:n.getPoints(),polys:n.getPolys()})}})),a.forEach(((e,t)=>{r.set(e,t)})),Dn(await Gt(l,n,i),r)}(e,{segmentIndices:n,...t}):o.LABELMAP&&(i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("Viewport is required to compute contour from labelmap");const n=await In(e,t);if(!n?.length)return void console.error("Failed to convert labelmap to surface or labelmap is empty");const{viewport:i,segmentationRepresentationUID:o}=t,a=n.map((e=>({id:e.segmentIndex.toString(),points:e.data.points,polys:e.data.polys,segmentIndex:e.segmentIndex})));return Dn(await Gt(a,i,o))}(e,{segmentIndices:n,...t}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to contour, currently only support converting volume labelmap to contour if available");const{viewport:a,segmentationRepresentationUID:r}=t,s=function(e,t,n){const i=new Map;for(const[o,a]of e)for(const e of a){const{points:a}=e,{lineSegments:r,linesNumberOfPoints:s}=Yh(e);for(let e=0;e<r.length;e++){const l=r[e],d=[];for(let t=0;t<s[e];t++){const e=l[t];d.push([a[3*e],a[3*e+1],a[3*e+2]])}if(d.length<3)continue;const c={annotationUID:ie.utilities.uuidv4(),data:{contour:{closed:!0,polyline:d},segmentation:{segmentationId:n,segmentIndex:o},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:Kh.toolName,...t.getViewReference()}};gt(c,t.element);const h=i.get(o)||new Set;h.add(c.annotationUID),i.set(o,h)}}return i}(i,a,e);return Fu(r,{CONTOUR:{fillAlpha:0}}),{annotationUIDsMap:s}}(e,t)),(()=>{}))}function Jh(e,t,n){const{segmentationRepresentationUID:i,config:o}=n,a=o?.allSegments?.CONTOUR,r=Yu().representations.CONTOUR,s=ie.utilities.deepMerge(r,a),l=bn(i),d=s.outlineWidthActive;l?.outlineWidthActive!==d&&Tn(i,Object.assign({},l,{outlineWidthActive:d}));const c=[],h=[],u=xh(e.id,i);for(const e of u)l.segmentsHidden.has(e)||c.push(e);for(const e of l.segmentsHidden)u.has(e)||h.push(e);const g=Array.from(l.segmentsHidden).filter((e=>!h.includes(e))).concat(c),{segmentSpecificConfigs:m}=t.reduce(((e,t)=>{const n=ie.cache.getGeometry(t),{data:o}=n,a=o.getSegmentIndex(),r=Vh(i,a);return e.segmentSpecificConfigs[a]=r??{},e}),{contourSets:[],segmentSpecificConfigs:{}}),v=[...g,...h],p=Object.values(m).some((e=>Object.keys(e).length>0));(v.length||p)&&Tn(i,Object.assign({},l,{segmentsHidden:new Set(u)})),e.render()}function Zh(e,t,n){const{segmentationRepresentationUID:i,segmentationId:o}=n,a=new Map;t.forEach((t=>{const n=ie.cache.getGeometry(t);if(!n)return void console.warn(`No geometry found for geometryId ${t}. Skipping render.`);const r=n.data.getSegmentIndex();!function(e){if(!e)throw new Error(`No contours found for geometryId ${e.id}`);const t=e.id;if(e.type!==ie.Enums.GeometryType.CONTOUR)throw new Error(`Geometry type ${e.type} not supported for rendering.`);e.data||console.warn(`No contours found for geometryId ${t}. Skipping render.`)}(n);const s=Vh(i,r);n.data.contours.forEach((t=>{const{points:n,color:i,id:a}=t,s={annotationUID:ie.utilities.uuidv4(),data:{contour:{closed:!0,polyline:n},segmentation:{segmentationId:o,segmentIndex:r,color:i,id:a},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!0,isVisible:!0,metadata:{referencedImageId:Ci(e,n[0],e.getCamera().viewPlaneNormal),toolName:"PlanarFreehandContourSegmentationTool",FrameOfReferenceUID:e.getFrameOfReferenceUID(),viewPlaneNormal:e.getCamera().viewPlaneNormal}};gt(s,e.element),Fo(s)})),s&&a.set(r,s)}));const r=n.config?.allSegments.CONTOUR,s=Yu().representations.CONTOUR,l=ie.utilities.deepMerge(s,r).outlineWidthActive,d=xh(e.id,i);Tn(i,Object.assign({},bn(i),{segmentsHidden:new Set(d),segmentSpecificMap:a,outlineWidthActive:l})),e.resetCamera(),e.render()}E(348);let Qh=!1;const eu={render:async function(e,t){const{segmentationId:n}=t,i=Nu(n);if(!i)return;let o=i.representationData[Ct.Contour];o||!jt(t.segmentationRepresentationUID)||Qh||(Qh=!0,o=await Xh(n,{segmentationRepresentationUID:t.segmentationRepresentationUID,viewport:e})),o&&o?.geometryIds?.length&&function(e,t,n,i){(n.size?Jh:Zh)(e,t,i)}(e,o.geometryIds,o.annotationUIDsMap,t)},removeRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;Zu(t),function(e){_n.delete(e)}(t),n&&o.render()}};var tu=E(441),nu=E.n(tu),iu=E(795),ou=E.n(iu);const au=(0,ie.getWebWorkerManager)(),ru=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Nt.POLYSEG_CONTOUR_TO_LABELMAP})};async function su(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.viewport,i=n.getVolumeId();if(!ie.utilities.getViewportImageIds(n))throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");const o=ie.utilities.uuidv4(),a=ie.volumeLoader.createAndCacheDerivedSegmentationVolume(i,{volumeId:o}),{dimensions:r,origin:s,direction:l,spacing:d,voxelManager:c}=a,{segmentIndices:h,annotationUIDsInSegmentMap:u}=du(e,t);ru(ie.eventTarget,0);const g=await au.executeTask("polySeg","convertContourToVolumeLabelmap",{segmentIndices:h,dimensions:r,scalarData:c.getCompleteScalarDataArray?.(),origin:s,direction:l,spacing:d,annotationUIDsInSegmentMap:u},{callbacks:[e=>{ru(ie.eventTarget,e)}]});return ru(ie.eventTarget,1),c.setCompleteScalarDataArray(g),a.modified(),{volumeId:a.volumeId}}async function lu(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("No viewport provided, labelmap computation from contour requires viewports");const n=t.viewport.getImageIds();if(!n)throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");n.forEach((e=>{if(!ie.cache.getImageLoadObject(e))throw new Error("ImageIds must be cached before converting contour to labelmap")}));const i=(await ie.imageLoader.createAndCacheDerivedSegmentationImages(n)).map((e=>e.imageId)),{segmentIndices:o,annotationUIDsInSegmentMap:a}=du(e,t),r=new Map;i.forEach(((e,t)=>{const i=ie.cache.getImage(e),o=ie.metaData.get(ie.Enums.MetadataModules.IMAGE_PLANE,e);let{columnCosines:a,rowCosines:s,rowPixelSpacing:l,columnPixelSpacing:d,imagePositionPatient:c}=o;a=a??[0,1,0],s=s??[1,0,0],l=l??1,d=d??1,c=c??[0,0,0];const h=Sn.vec3.fromValues(s[0],s[1],s[2]),u=Sn.vec3.fromValues(a[0],a[1],a[2]),g=Sn.vec3.create();Sn.vec3.cross(g,h,u);const m=[...h,...u,...g],v=[l,d,1],p=c;r.set(n[t],{direction:m,spacing:v,origin:p,scalarData:i.voxelManager.getScalarData(),imageId:e,dimensions:[i.width,i.height,1]})})),ru(ie.eventTarget,0);const s=await au.executeTask("polySeg","convertContourToStackLabelmap",{segmentationsInfo:r,annotationUIDsInSegmentMap:a,segmentIndices:o},{callbacks:[e=>{ru(ie.eventTarget,e)}]});ru(ie.eventTarget,1);const l=[];return s.forEach(((e,t)=>{let{scalarData:n}=e;const i=r.get(t),{imageId:o}=i,a=ie.cache.getImage(o);a.voxelManager.getScalarData().set(n),a.imageFrame?.pixelData?.set(n),l.push(o)})),{imageIds:l}}function du(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.annotationUIDsMap,i=t.segmentIndices?.length?t.segmentIndices:Array.from(n.keys()),o=new Map;return i.forEach((e=>{const t=n.get(e);let i=Array.from(t);i=i.filter((e=>!pt(e).parentAnnotationUID));const a=i.map((e=>{const t=pt(e),n=t.childAnnotationUIDs?.length;return{polyline:t.data.contour.polyline,referencedImageId:t.metadata.referencedImageId,holesPolyline:n&&t.childAnnotationUIDs.map((e=>pt(e).data.contour.polyline))}}));o.set(e,a)})),{segmentIndices:i,annotationUIDsInSegmentMap:o}}const cu=(0,ie.getWebWorkerManager)(),hu=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Nt.POLYSEG_SURFACE_TO_LABELMAP})};function uu(e){const{type:t}=e;return t===Ct.Labelmap?wu():{}}const gu=[[0,0,0,0],[221,84,84,255],[77,228,121,255],[166,70,235,255],[189,180,116,255],[109,182,196,255],[204,101,157,255],[123,211,94,255],[93,87,218,255],[225,128,80,255],[73,232,172,255],[181,119,186,255],[176,193,112,255],[105,153,200,255],[208,97,120,255],[90,215,101,255],[135,83,222,255],[229,178,76,255],[122,183,181,255],[190,115,171,255],[149,197,108,255],[100,118,205,255],[212,108,93,255],[86,219,141,255],[183,79,226,255],[233,233,72,255],[118,167,187,255],[194,111,146,255],[116,201,104,255],[115,96,209,255],[216,147,89,255],[82,223,188,255],[230,75,224,255],[163,184,121,255],[114,143,191,255],[198,107,114,255],[99,206,122,255],[153,92,213,255],[220,192,85,255],[78,215,227,255],[234,71,173,255],[141,188,117,255],[110,113,195,255],[202,128,103,255],[95,210,157,255],[195,88,217,255],[206,224,81,255],[74,166,231,255],[185,120,139,255],[113,192,113,255],[133,106,199,255],[207,162,98,255],[91,214,198,255],[221,84,198,255],[159,228,77,255],[70,111,235,255],[189,119,116,255],[109,196,138,255],[165,101,204,255],[211,201,94,255],[87,191,218,255],[225,80,153,255],[106,232,73,255],[124,119,186,255],[193,142,112,255],[105,200,168,255],[203,97,208,255],[184,215,90,255],[83,147,222,255],[229,76,101,255],[122,183,130,255],[146,115,190,255],[197,171,108,255],[100,205,205,255],[212,93,177,255],[141,219,86,255],[79,97,226,255],[233,99,72,255],[118,187,150,255],[173,111,194,255],[197,201,104,255],[96,171,209,255],[216,89,137,255],[94,223,82,255],[107,75,230,255],[184,153,121,255],[114,191,175,255],[198,107,191,255],[166,206,99,255],[92,132,213,255],[220,85,91,255],[78,227,115,255],[159,71,234,255],[188,176,117,255],[110,185,195,255],[202,103,161,255],[129,210,95,255],[88,88,217,255],[224,123,81,255],[74,231,166,255],[177,120,185,255],[179,192,113,255],[106,156,199,255],[207,98,125,255],[91,214,96,255],[130,84,221,255],[228,171,77,255],[70,235,221,255],[189,116,174,255],[153,196,109,255],[101,123,204,255],[211,104,94,255],[87,218,136,255],[177,80,225,255],[232,225,73,255],[119,169,186,255],[193,112,149,255],[121,200,105,255],[111,97,208,255],[215,142,90,255],[83,222,181,255],[229,76,229,255],[165,183,122,255],[115,146,190,255],[197,108,119,255],[100,205,118,255],[148,93,212,255],[219,186,86,255],[79,220,226,255],[233,72,179,255],[144,187,118,255],[111,118,194,255],[201,124,104,255],[96,209,153,255],[189,89,216,255],[211,223,82,255],[75,172,230,255],[184,121,142,255],[117,191,114,255],[130,107,198,255],[206,157,99,255],[92,213,193,255],[220,85,203,255],[165,227,78,255],[71,118,234,255],[188,117,117,255],[110,195,135,255],[161,103,202,255],[210,195,95,255],[88,195,217,255],[224,81,158,255],[113,231,74,255],[123,120,185,255],[192,139,113,255],[106,199,164,255],[198,98,207,255],[188,214,91,255],[84,153,221,255],[228,77,108,255],[70,235,84,255],[143,116,189,255],[196,167,109,255],[101,204,199,255],[211,94,182,255],[147,218,87,255],[80,104,225,255],[232,93,73,255],[119,186,147,255],[170,112,193,255],[200,200,105,255],[97,175,208,255],[215,90,142,255],[100,222,83,255],[101,76,229,255],[183,150,122,255],[115,190,171,255],[197,108,194,255],[170,205,100,255],[93,138,212,255],[219,86,97,255],[79,226,110,255],[153,72,233,255],[187,173,118,255],[111,187,194,255],[201,104,165,255],[134,209,96,255],[89,95,216,255],[223,117,82,255],[75,230,159,255],[174,121,184,255],[182,191,114,255],[107,160,198,255],[206,99,130,255],[92,213,92,255],[124,85,220,255],[227,165,78,255],[71,234,214,255],[188,117,176,255],[156,195,110,255],[103,128,202,255],[210,100,95,255],[88,217,131,255],[170,81,224,255],[231,218,74,255],[120,172,185,255],[192,113,153,255],[125,199,106,255],[107,98,207,255],[214,137,91,255],[84,221,175,255],[222,77,228,255],[194,235,70,255],[116,149,189,255],[196,109,123,255],[101,204,114,255],[143,94,211,255],[218,180,87,255],[80,225,225,255],[232,73,186,255],[147,186,119,255],[112,122,193,255],[200,121,105,255],[97,208,148,255],[184,90,215,255],[216,222,83,255],[76,178,229,255],[183,122,145,255],[121,190,115,255],[126,108,197,255],[205,153,100,255],[93,212,187,255],[219,86,208,255],[171,226,79,255],[72,126,233,255],[187,118,121,255],[111,194,132,255],[157,104,201,255],[209,190,96,255],[89,200,216,255],[223,82,164,255],[120,230,75,255],[121,121,184,255],[191,136,114,255],[107,198,160,255],[192,99,206,255],[193,213,92,255],[85,158,220,255],[227,78,115,255],[71,234,78,255],[141,117,188,255],[195,163,110,255],[103,202,194,255],[210,95,186,255],[153,217,88,255],[81,111,224,255]];const mu=async function(e,t,n){const i=t.map((t=>async function(e,t,n){const{segmentationId:i,options:o={}}=t,a=t.options?.segmentationRepresentationUID||ie.utilities.uuidv4(),r=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).colorLUTOrIndex;let t;if("number"==typeof e)t=e;else{const n=tg();ng(Array.isArray(e)?e:gu,n),t=n}return t}(o);return Ku(e,{segmentationId:i,segmentationRepresentationUID:a,type:t.type,colorLUTIndex:r,rendering:uu(t),polySeg:o.polySeg,config:{allSegments:{},perSegment:{}}}),n&&Fu(a,n.representations),t.type===Ct.Contour&&oi([e]),nn(i),a}(e,t,n)));return await Promise.all(i)};async function vu(e){let{segmentationId:t,options:n}=e;const i=Nu(t),{volumeId:o}=i.representationData.LABELMAP,a=ie.cache.getVolume(o);await async function(e){let{segmentationId:t,viewportId:n,imageIds:i,options:o}=e;const a=Nu(t);if(o?.removeOriginal){const e=a.representationData.LABELMAP;ie.cache.getVolume(e.volumeId)&&ie.cache.removeVolumeLoadObject(e.volumeId),a.representationData.LABELMAP={imageIds:i}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,imageIds:i};await mu(n,[{segmentationId:t,type:Ct.Labelmap}]),yu(n),ie.eventTarget.addEventListenerOnce(se.SEGMENTATION_RENDERED,(()=>on(t)))}({segmentationId:t,viewportId:n.viewportId,imageIds:a.imageIds,options:n})}function pu(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ln(e,Ct.Labelmap,(()=>async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.segmentIndices?.length?t.segmentIndices:Zt(e);let i;const o=Nu(e),a=o.representationData;try{a.CONTOUR?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.viewport instanceof ie.VolumeViewport??!0;if(n&&!t.viewport)throw new Error("Cannot compute labelmap from contour segmentation without providing the viewport");const i=t.segmentIndices?.length?t.segmentIndices:Zt(e),o=Nu(e).representationData.CONTOUR,a=n?su:lu;return await a(o,{segmentIndices:i,segmentationRepresentationUID:t.segmentationRepresentationUID,viewport:t.viewport})}(e,{segmentIndices:n,...t}):a.SURFACE&&(i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{viewport:n}=t,i=n instanceof ie.VolumeViewport??!0,o=t.segmentIndices?.length?t.segmentIndices:Zt(e),a=Nu(e),r=new Map;if(a.representationData.SURFACE.geometryIds.forEach(((e,t)=>{o.includes(t)&&r.set(t,e)})),i&&!n)throw new Error("Cannot compute labelmap from surface segmentation without providing the viewport");let s;if(i){const e=n.getVolumeId();s=await ie.volumeLoader.createAndCacheDerivedSegmentationVolume(e)}else{const e=t.viewport.getImageIds(),n=ie.imageLoader.createAndCacheDerivedSegmentationImages(e).map((e=>e.imageId));s=await ie.volumeLoader.createAndCacheVolumeFromImages("generatedSegmentationVolumeId",n)}const l=await async function(e,t){const{geometryIds:n}=e;if(!n?.size)throw new Error("No geometry IDs found for surface representation");const i=new Map;n.forEach(((e,t)=>{const n=ie.cache.getGeometry(e).data,o=n.getPoints(),a=n.getPolys();i.set(t,{points:o,polys:a})}));const{dimensions:o,direction:a,origin:r,spacing:s,voxelManager:l}=t;hu(ie.eventTarget,0);const d=await cu.executeTask("polySeg","convertSurfacesToVolumeLabelmap",{segmentsInfo:i,dimensions:o,spacing:s,direction:a,origin:r},{callbacks:[e=>{hu(ie.eventTarget,e)}]});return hu(ie.eventTarget,1),l.setCompleteScalarDataArray(d),t.modified(),{volumeId:t.volumeId}}({geometryIds:r},s);return i?l:await async function(e){let{volumeId:t}=e;return{imageIds:ie.cache.getVolume(t).imageIds}}({volumeId:s.volumeId})}(o.segmentationId,{segmentIndices:n,...t}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return i}(e,t)),(()=>{}))}const fu=new Map;function wu(){const e=ou().newInstance(),t=nu().newInstance();return t.addPoint(0,0),{ofun:t,cfun:e}}let Iu=!1;function Eu(e,t,n){const i={...e,...n||{}};return{fillAlpha:t?i.fillAlpha:i.fillAlphaInactive,outlineWidth:t?i.outlineWidthActive:i.outlineWidthInactive,renderFill:t?i.renderFill:i.renderFillInactive,renderOutline:i.renderOutline,outlineOpacity:t?i.outlineOpacity:i.outlineOpacityInactive,activeSegmentOutlineWidthDelta:i.activeSegmentOutlineWidthDelta}}function Cu(e,t,n,i){let{fillAlpha:o,renderFill:a,renderOutline:r,segmentColor:s,outlineWidth:l}=i;const d=`${e}-${t}-${n}`,c=fu.get(d);if(!c)return fu.set(d,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice()}),{forceOpacityUpdate:!0,forceColorUpdate:!0};const{fillAlpha:h,renderFill:u,renderOutline:g,outlineWidth:m,segmentColor:v}=c,p=v[0]!==s[0]||v[1]!==s[1]||v[2]!==s[2],f=v[3]!==s[3]||h!==o||u!==a||g!==r||m!==l;return(f||p)&&fu.set(d,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice()}),{forceOpacityUpdate:f,forceColorUpdate:p}}async function _u(e,t,n){await async function(e,t,n){const i=(0,ie.getEnabledElement)(e),{renderingEngine:o,viewport:a}=i,{id:r}=a;if(Yt(t,a)){const e=[{volumeId:t.volumeId,actorUID:n,visibility:!0,blendMode:ie.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND}];await(0,ie.addVolumesToViewports)(o,e,[r],!1,!0)}else{const e=Wu(n),t=[{imageId:sg(a.id,e.segmentationId),actorUID:n}];await(0,ie.addImageSlicesToViewports)(o,t,[r])}}(e.element,t,n)}const bu={getSegmentationRepresentationRenderingConfig:wu,render:async function(e,t){const{segmentationId:n,segmentationRepresentationUID:i}=t,o=Nu(n);if(!o)return void console.warn("No segmentation found for segmentationId: ",n);let a=o.representationData[Ct.Labelmap],r=e.getActor(i);if(!a&&jt(i)&&!Iu){if(Iu=!0,a=await pu(n,{segmentationRepresentationUID:i,viewport:e}),!a)throw new Error(`No labelmap data found for segmentationId ${n}.`);Iu=!1}if(a){if(Yt(a,e)){if(e instanceof ie.StackViewport)return;const{volumeId:t}=a;if(!ie.cache.getVolume(t))throw new Error(`No Labelmap found for volumeId: ${t}`);if(!function(e,t){if(!t)return!0;const n=e.getDefaultActor();if(!n)return!1;const{uid:i}=n,o=ie.cache.getVolume(i);if(o){const e=ie.cache.getVolume(t);if(e&&o.metadata.FrameOfReferenceUID===e.metadata.FrameOfReferenceUID)return!0}return!1}(e,a?.referencedVolumeId))return;r||await _u(e,a,i),r=e.getActor(i)}else{if(e instanceof ie.VolumeViewport)return;if(!sg(e.id,n))return;r||await _u(e,a,i),r=e.getActor(i)}r&&function(e,t,n){const{rendering:i,config:o,colorLUTIndex:a}=n,r=ag(e)===n,{cfun:s,ofun:l}=i,{allSegments:d,perSegment:c}=o,h=Yu().representations[Ct.Labelmap],u=Yu().renderInactiveRepresentations,g={...h,...d[Ct.Labelmap]},m=eg(a),v=Math.min(256,m.length),{uid:p}=t,{outlineWidth:f,renderOutline:w,outlineOpacity:I,activeSegmentOutlineWidthDelta:E}=Eu(g,r),C=xh(e,n.segmentationRepresentationUID);for(let t=0;t<v;t++){const n=t,i=m[n],o=c?.[n]?.[Ct.Labelmap],{fillAlpha:a,outlineWidth:d,renderFill:h,renderOutline:u}=Eu(g,r,o),{forceOpacityUpdate:v,forceColorUpdate:f}=Cu(e,p,n,{fillAlpha:a,renderFill:h,renderOutline:u,segmentColor:i,outlineWidth:d});if(f&&s.addRGBPoint(n,i[0]/255,i[1]/255,i[2]/255),v)if(h){const e=C.has(n)?0:i[3]/255*a;l.removePoint(n),l.addPointLong(n,e,.5,1)}else l.addPointLong(n,.01,.5,1)}const _=t.actor;_.getProperty().setRGBTransferFunction(0,s),l.setClamping(!1),_.getProperty().setScalarOpacity(0,l),_.getProperty().setInterpolationTypeToNearest(),_.getProperty().setUseLabelOutline(w),_.getProperty().setLabelOutlineOpacity(I);const{activeSegmentIndex:b}=Nu(n.segmentationId),T=new Array(v-1);for(let e=1;e<v;e++)C.has(e)?T[e-1]=0:T[e-1]=e===b?f+E:f;_.getProperty().setLabelOutlineThickness(T);const D=r||u;_.setVisibility(D)}(e.id,r,t)}},removeRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;(function(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n;i.removeActors([t])})(o.element,t),Zu(t),n&&o.render()}},Tu={[Ct.Labelmap]:bu,[Ct.Contour]:eu,[Ct.Surface]:Cn},Du=Kh.toolName,Su=new class{constructor(){ae(this,"_needsRender",new Set),ae(this,"_animationFrameSet",!1),ae(this,"_animationFrameHandle",null),ae(this,"hasBeenDestroyed",void 0),ae(this,"_getAllViewports",(()=>(0,ie.getRenderingEngines)().flatMap((e=>e.getViewports())))),ae(this,"_renderFlaggedSegmentations",(()=>{this._throwIfDestroyed(),Array.from(this._needsRender).forEach((e=>{this._triggerRender(e)})),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}))}renderSegmentationsForViewport(e){const t=e?[e]:this._getViewportIdsForSegmentation();this._setViewportsToBeRenderedNextFrame(t)}renderSegmentation(e){const t=this._getViewportIdsForSegmentation(e);this._setViewportsToBeRenderedNextFrame(t)}_getViewportIdsForSegmentation(e){const t=this._getAllViewports(),n=[];for(const i of t){const t=i.id,o=zu(t);e?o.some((t=>t.segmentationId===e))&&n.push(t):o.length>0&&n.push(t)}return n}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setViewportsToBeRenderedNextFrame(e){e.forEach((e=>{this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedSegmentations),this._animationFrameSet=!0)}_triggerRender(e){const t=zu(e);if(!t?.length)return;const{viewport:n}=(0,ie.getEnabledElementByViewportId)(e),i=[],o=t.map((e=>{e.type===Ct.Contour&&this._addPlanarFreeHandToolIfAbsent(n);const t=Tu[e.type];try{const o=t.render(n,e);i.push(o)}catch(e){console.error(e)}return Promise.resolve()}));function a(e){const{element:t,viewportId:n}=e.detail;t.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,a);const i={viewportId:n};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_RENDERED,{...i})}Promise.allSettled(o).then((()=>{n.element.addEventListener(ie.Enums.Events.IMAGE_RENDERED,a),n.render()}))}_addPlanarFreeHandToolIfAbsent(e){Du in je.tools||Go(Kh);const t=Vn(e.id);t.hasTool(Du)||(t.addTool(Du),t.setToolPassive(Du))}};function yu(e){Su.renderSegmentationsForViewport(e)}function xu(e){Su.renderSegmentation(e)}async function Mu(e){let{imageIds:t,options:n}=e;const i=t,o=n?.volumeId??ie.utilities.uuidv4();return await ie.volumeLoader.createAndCacheVolumeFromImages(o,i),{volumeId:o}}async function Ou(e){let{segmentationId:t,options:n}=e;const i=Nu(t).representationData.LABELMAP,{volumeId:o}=await Mu({imageIds:i.imageIds,options:n});await async function(e){let{segmentationId:t,viewportId:n,volumeId:i,options:o}=e;const a=Nu(t);if(o?.removeOriginal){const e=a.representationData.LABELMAP,{imageIds:t}=e;t.forEach((e=>{ie.cache.removeImageLoadObject(e)})),a.representationData.LABELMAP={volumeId:i}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,volumeId:i};yu(n),ie.eventTarget.addEventListenerOnce(se.SEGMENTATION_RENDERED,(()=>on(t)))}({segmentationId:t,viewportId:n.viewportId,options:n,volumeId:o})}const Pu={colorLUT:[],segmentations:[],globalConfig:{renderInactiveRepresentations:!0,representations:{[Ct.Labelmap]:Tt(),[Ct.Contour]:_t,[Ct.Surface]:Dt}},representations:{},viewports:{}},Au=new class{constructor(e){ae(this,"state",void 0),ae(this,"uid",void 0),ae(this,"_stackLabelmapImageIdReferenceMap",new Map),e||(e=ie.utilities.uuidv4()),this.state=structuredClone(Pu),this.uid=e}getState(){return this.state}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this.state=structuredClone(Pu)}getSegmentation(e){return this.state.segmentations.find((t=>t.segmentationId===e))}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error(`Segmentation with id ${e.segmentationId} already exists`);if(e.representationData.LABELMAP&&"volumeId"in e.representationData.LABELMAP&&!("imageIds"in e.representationData.LABELMAP)){const t=this.getLabelmapImageIds(e.representationData);e.representationData.LABELMAP.imageIds=t}this.state.segmentations.push(e)}removeSegmentation(e){this.state.segmentations=this.state.segmentations.filter((t=>t.segmentationId!==e))}getSegmentationRepresentation(e){return this.state.representations[e]}addSegmentationRepresentationState(e){const{segmentationRepresentationUID:t}=e;this.state.representations[t]=e}addSegmentationRepresentationToViewport(e,t){const n=(0,ie.getEnabledElementByViewportId)(e);if(!n)return;this.state.viewports[e]||(this.state.viewports[e]={});const i=this.getSegmentationRepresentation(t);if(i.type!==Ct.Labelmap)return void this.setActiveSegmentationRepresentation(e,t);const o=n.viewport instanceof ie.BaseVolumeViewport,a=this.getSegmentation(i.segmentationId),{representationData:r}=a;if(!r.LABELMAP)return void this.setActiveSegmentationRepresentation(e,t);const s="volumeId"in r.LABELMAP;if(o){const e=n.viewport.getFrameOfReferenceUID();if(!s){const t=this.getLabelmapImageIds(a.representationData),n=ie.cache.getImage(t[0]);n?.FrameOfReferenceUID===e&&Ou(a)}}else s||this.updateLabelmapSegmentationImageReferences(e,a.segmentationId);this.setActiveSegmentationRepresentation(e,t)}updateLabelmapSegmentationImageReferences(e,t){const n=this.getSegmentation(t);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(t)||this._stackLabelmapImageIdReferenceMap.set(t,new Map);const{representationData:i}=n;if(!i.LABELMAP)return;const o=this.getLabelmapImageIds(i),a=(0,ie.getEnabledElementByViewportId)(e).viewport,r=a.getCurrentImageId();for(const e of o)a.isReferenceViewable({referencedImageId:e},{asOverlay:!0})&&this._stackLabelmapImageIdReferenceMap.get(t).set(r,e);return this._stackLabelmapImageIdReferenceMap.get(t).get(r)}getLabelmapImageIds(e){const t=e.LABELMAP;let n;if(t.imageIds)n=t.imageIds;else if(!n&&t.volumeId){const e=t.volumeId;n=ie.cache.getVolume(e).imageIds}return n}getCurrentLabelmapImageIdForViewport(e,t){const n=(0,ie.getEnabledElementByViewportId)(e);if(!n)return;if(!this._stackLabelmapImageIdReferenceMap.has(t))return;const i=n.viewport.getCurrentImageId();return this._stackLabelmapImageIdReferenceMap.get(t).get(i)}getSegmentationRepresentations(e){const t=this.state.viewports[e];return t?Object.keys(t).map((e=>this.getSegmentationRepresentation(e))):[]}removeRepresentation(e){delete this.state.representations[e],Object.keys(this.state.viewports).forEach((t=>{delete this.state.viewports[t][e]}))}setActiveSegmentationRepresentation(e,t){Object.keys(this.state.viewports[e]).forEach((t=>{this.state.viewports[e][t].active=!1})),this.state.viewports[e]||(this.state.viewports[e]={}),this.state.viewports[e][t]||(this.state.viewports[e][t]={active:!1,visible:!0,segmentsHidden:new Set}),this.state.viewports[e][t].active=!0}getActiveSegmentationRepresentation(e){if(!this.state.viewports?.[e])return;const t=Object.entries(this.state.viewports[e]).find((e=>{let[,t]=e;return t.active}));return t?this.getSegmentationRepresentation(t[0]):void 0}getGlobalConfig(){return this.state.globalConfig}setGlobalConfig(e){this.state.globalConfig=e}_getRepresentationConfig(e){const t=this.getSegmentationRepresentation(e);if(t)return t.config}getSegmentationRepresentationConfig(e){const t=this._getRepresentationConfig(e);if(t)return t.allSegments}getPerSegmentConfig(e){const t=this._getRepresentationConfig(e);if(t)return t.perSegment}setSegmentationRepresentationConfig(e,t){const n=this._getRepresentationConfig(e);n&&(n.allSegments=t)}setPerSegmentConfig(e,t){const n=this._getRepresentationConfig(e);n&&(n.perSegment=t)}getSegmentationRepresentationVisibility(e,t){const n=this.state.viewports[e];return n&&n[t]?.visible}setSegmentationRepresentationVisibility(e,t,n){this.state.viewports[e]||(this.state.viewports[e]={}),this.state.viewports[e][t].visible=n}addColorLUT(e,t){this.state.colorLUT[t]&&console.warn("Color LUT table already exists, overwriting"),this.state.colorLUT[t]=structuredClone(e)}removeColorLUT(e){delete this.state.colorLUT[e]}_getStackIdForImageIds(e){return e.map((e=>e.slice(-Math.round(.15*e.length)))).join("_")}}("DEFAULT"),Ru=function(e){const{segmentationId:t,representation:n}=e,i=n.type===Ct.Contour;let o=n.data?{...n.data}:null;if(o=!o&&i?{}:o,!o)throw new Error("Segmentation representation data may not be undefined");if(i){const e=o;e.geometryIds=e.geometryIds??[],e.annotationUIDsMap=e.annotationUIDsMap??new Map}return{segmentationId:t,cachedStats:{},segmentLabels:{},label:null,segmentsLocked:new Set,type:n.type,activeSegmentIndex:1,representationData:{[n.type]:{...o}}}};function Lu(){return Au}function Nu(e){return Lu().getSegmentation(e)}function Uu(){return Lu().getState().segmentations}function ku(e,t){const n=Lu(),i=Ru(e);n.addSegmentation(i),t||nn(i.segmentationId)}function Vu(){const e=Lu().getState();return Object.values(e.representations)}function Wu(e){return Lu().getSegmentationRepresentation(e)}function Bu(e){return Vu().filter((t=>t.segmentationId===e))}function Hu(e){return Lu().getSegmentationRepresentationConfig(e)}function Fu(e,t,n){Lu().setSegmentationRepresentationConfig(e,t),n||tn(e)}function Gu(e){return Lu().getPerSegmentConfig(e)}function $u(e,t,n){Lu().setPerSegmentConfig(e,t),n||tn(e)}function qu(e){const t=Lu().getState(),n=t.viewports;return Object.keys(n).filter((i=>{const o=n[i];return Object.keys(o).some((n=>t.representations[n].segmentationId===e))}))}function zu(e){const t=ju(e);return t?Object.keys(t).map((e=>Wu(e))).filter(Boolean):[]}function ju(e){const t=Lu().getState();return t.viewports?.[e]||{}}function Ku(e,t,n){const i=Lu();i.addSegmentationRepresentationState(t),i.addSegmentationRepresentationToViewport(e,t.segmentationRepresentationUID),n||tn(t.segmentationRepresentationUID)}function Yu(){return Lu().getGlobalConfig()}function Xu(e,t){Lu().setGlobalConfig(e),t||nn()}function Ju(e){Lu().removeSegmentation(e),Qt(e)}function Zu(e,t){Lu().removeRepresentation(e),t||en(e)}function Qu(e){Lu().removeColorLUT(e)}function eg(e){return Lu().getColorLUT(e)}function tg(){return Lu().getNextColorLUTIndex()}function ng(e,t){Lu().addColorLUT(e,t)}function ig(e,t){return Lu().getSegmentationRepresentationVisibility(e,t)}function og(e,t,n){Lu().setSegmentationRepresentationVisibility(e,t,n)}function ag(e){return Lu().getActiveSegmentationRepresentation(e)}function rg(e,t,n){Lu().setActiveSegmentationRepresentation(e,t),n||tn(t)}function sg(e,t){return Lu().getCurrentLabelmapImageIdForViewport(e,t)}function lg(e,t){Lu().updateLabelmapSegmentationImageReferences(e,t)}function dg(e,t){const n=t||e.currentTarget,{viewport:i}=(0,ie.getEnabledElement)(n)||{};if(!i)return;const o=function(e){return[e.clientX,e.clientY]}(e),a=function(e){return[e.pageX,e.pageY]}(e),r=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,a);return{page:a,client:o,canvas:r,world:i.canvasToWorld(r)}}const cg=function(e){const t=e.currentTarget,{viewportId:n,renderingEngineId:i}=(0,ie.getEnabledElement)(t),o=dg(e,t),a={event:e,eventName:se.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:i,camera:{},element:t,startPoints:o,lastPoints:o,currentPoints:o,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,ie.triggerEvent)(t,se.MOUSE_DOUBLE_CLICK,a)&&(e.stopImmediatePropagation(),e.preventDefault())},hg=se.MOUSE_MOVE,ug=function(e){const t=e.currentTarget,n=(0,ie.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=n,a={renderingEngineId:i,viewportId:o,camera:{},element:t,currentPoints:dg(e),eventName:hg,event:e};!(0,ie.triggerEvent)(t,hg,a)&&(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:gg,MOUSE_DOWN_ACTIVATE:mg,MOUSE_CLICK:vg,MOUSE_UP:pg,MOUSE_DRAG:fg}=se,wg=3,Ig={mouseButton:void 0,element:null,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};let Eg={mouseButton:void 0,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,element:null,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};const Cg={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function _g(e){const t=(0,ie.getEnabledElement)(Eg.element);if(!t?.viewport)return;const n=dg(e,Eg.element),i=Pg(Eg.element,Eg.lastPoints),o=Ag(n,i);if(Cg.doubleClickTimeout){if(!Dg(o.canvas))return;yg()}const a={event:e,eventName:fg,mouseButton:Eg.mouseButton,renderingEngineId:Eg.renderingEngineId,viewportId:Eg.viewportId,camera:{},element:Eg.element,startPoints:Og(Eg.startPoints),lastPoints:Og(i),currentPoints:n,deltaPoints:o};!(0,ie.triggerEvent)(Eg.element,fg,a)&&(e.stopImmediatePropagation(),e.preventDefault()),Eg.lastPoints=Og(n)}function bg(e){if(clearTimeout(Eg.preventClickTimeout),Cg.doubleClickTimeout)Cg.mouseUpEvent?Mg():(Cg.mouseUpEvent=e,Eg.element.addEventListener("mousemove",Tg));else{const t=Eg.isClickEvent?vg:pg,n=dg(e,Eg.element),i=Ag(n,Eg.lastPoints),o={event:e,eventName:t,mouseButton:Eg.mouseButton,element:Eg.element,renderingEngineId:Eg.renderingEngineId,viewportId:Eg.viewportId,camera:{},startPoints:Og(Eg.startPoints),lastPoints:Og(Eg.lastPoints),currentPoints:n,deltaPoints:i};(0,ie.triggerEvent)(o.element,t,o),Mg()}document.removeEventListener("mousemove",_g)}function Tg(e){Dg(Ag(dg(e,Eg.element),Pg(Eg.element,Eg.lastPoints)).canvas)&&(yg(),ug(e))}function Dg(e){return Math.abs(e[0])+Math.abs(e[1])>wg}function Sg(){Eg.isClickEvent=!1}function yg(){Cg.ignoreDoubleClick=!0;const e=Cg.mouseDownEvent,t=Cg.mouseUpEvent;xg(),function(e){const t=Ag(Eg.startPoints,Eg.startPoints),n={event:e,eventName:gg,element:Eg.element,mouseButton:Eg.mouseButton,renderingEngineId:Eg.renderingEngineId,viewportId:Eg.viewportId,camera:{},startPoints:Eg.startPoints,lastPoints:Eg.startPoints,currentPoints:Eg.startPoints,deltaPoints:t};Eg.lastPoints=Og(n.lastPoints),(0,ie.triggerEvent)(n.element,gg,n)&&(0,ie.triggerEvent)(n.element,mg,n)}(e),t&&bg(t)}function xg(){Cg.doubleClickTimeout&&(clearTimeout(Cg.doubleClickTimeout),Cg.doubleClickTimeout=null),Cg.mouseDownEvent=null,Cg.mouseUpEvent=null}function Mg(){document.removeEventListener("mouseup",bg),Eg.element?.removeEventListener("mousemove",Tg),Eg.element?.addEventListener("mousemove",ug),xg(),Eg=JSON.parse(JSON.stringify(Ig))}function Og(e){return JSON.parse(JSON.stringify(e))}function Pg(e,t){const{viewport:n}=(0,ie.getEnabledElement)(e)||{};if(!n)return t;const i=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:i}}function Ag(e,t){return{page:Rg(e.page,t.page),client:Rg(e.client,t.client),canvas:Rg(e.canvas,t.canvas),world:(n=e.world,i=t.world,[n[0]-i[0],n[1]-i[1],n[2]-i[2]])};var n,i}function Rg(e,t){return[e[0]-t[0],e[1]-t[1]]}function Lg(e){Cg.ignoreDoubleClick?(Cg.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):Mg()}const Ng=function(e){if(Cg.doubleClickTimeout){if(e.buttons===Cg.mouseDownEvent.buttons)return;return Cg.mouseDownEvent=e,void yg()}Cg.doubleClickTimeout=setTimeout(yg,1===e.buttons?400:150),Cg.mouseDownEvent=e,Cg.ignoreDoubleClick=!1,Eg.element=e.currentTarget,Eg.mouseButton=e.buttons;const t=(0,ie.getEnabledElement)(Eg.element),{renderingEngineId:n,viewportId:i}=t;Eg.renderingEngineId=n,Eg.viewportId=i,Eg.preventClickTimeout=setTimeout(Sg,Eg.clickDelay),Eg.element.removeEventListener("mousemove",ug);const o=dg(e,Eg.element);Eg.startPoints=Og(o),Eg.lastPoints=Og(o),document.addEventListener("mouseup",bg),document.addEventListener("mousemove",_g)};function Ug(e){e.removeEventListener("dblclick",cg),e.removeEventListener("mousedown",Ng),e.removeEventListener("mousemove",ug),e.removeEventListener("dblclick",Lg,{capture:!0})}const kg={enable:function(e){Ug(e),e.addEventListener("dblclick",cg),e.addEventListener("mousedown",Ng),e.addEventListener("mousemove",ug),e.addEventListener("dblclick",Lg,{capture:!0})},disable:Ug},Vg=function(e){const t=e.currentTarget,n=(0,ie.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=n;if(e.deltaY>-1&&e.deltaY<1)return;e.preventDefault();const{spinX:a,spinY:r,pixelX:s,pixelY:l}=function(e){let t=0,n=0,i=0,o=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),i=10*t,o=10*n,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||o)&&e.deltaMode&&(1===e.deltaMode?(i*=40,o*=40):(i*=800,o*=800)),i&&!t&&(t=i<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:o}}(e),d=r<0?-1:1,c={event:e,eventName:se.MOUSE_WHEEL,renderingEngineId:i,viewportId:o,element:t,camera:{},detail:e,wheel:{spinX:a,spinY:r,pixelX:s,pixelY:l,direction:d},points:dg(e)};(0,ie.triggerEvent)(t,se.MOUSE_WHEEL,c)};function Wg(e){e.removeEventListener("wheel",Vg)}const Bg={enable:function(e){Wg(e),e.addEventListener("wheel",Vg,{passive:!1})},disable:Wg},Hg=0,Fg=1;let Gg,$g;function qg(e,t){const n=Date.now();if(e!==Gg){if(n-$g<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;Gg=e}$g=n}const zg=qg.bind(null,Hg),jg=qg.bind(null,Fg);function Kg(e,t,n){const i=n?zg:jg;t.forEach((function(t){e.addEventListener(t,i,{passive:!1})}))}function Yg(e,t,n){const i=n?zg:jg;t.forEach((function(t){e.removeEventListener(t,i)}))}const Xg=["mousedown","mouseup","mousemove"],Jg=["touchstart","touchend"];function Zg(e){Yg(e,Xg,Hg),Yg(e,Jg,Fg)}const Qg={enable:function(e){Zg(e),Kg(e,Xg,Hg),Kg(e,Jg,Fg)},disable:Zg};var em=function(e){return e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT",e}(em||{});function tm(e,t){const n=t||e.currentTarget,i="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(i).map((e=>{const t=function(e){return[e.clientX,e.clientY]}(i[e]),o=function(e){return[e.pageX,e.pageY]}(i[e]),a=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,o),{viewport:r}=(0,ie.getEnabledElement)(n);return{page:o,client:t,canvas:a,world:r.canvasToWorld(a),touch:{identifier:e,radiusX:i[e].radiusX,radiusY:i[e].radiusY,force:i[e].force,rotationAngle:i[e].rotationAngle}}}))}ie.Settings.getRuntimeSettings();const{TOUCH_START:nm,TOUCH_START_ACTIVATE:im,TOUCH_PRESS:om,TOUCH_DRAG:am,TOUCH_END:rm,TOUCH_TAP:sm,TOUCH_SWIPE:lm}=se,dm={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},cm={page:0,client:0,canvas:0,world:0},hm={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...dm,touch:null}],lastPointsList:[{...dm,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:cm,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},um={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...dm,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let gm=JSON.parse(JSON.stringify(hm)),mm=JSON.parse(JSON.stringify(um));function vm(e,t,n){return(0,ie.triggerEvent)(e,t,n)}function pm(e){const t=tm(e,gm.element),n=wm(gm.element,gm.lastPointsList),i=t.length===n.length?Id(t,n):dm,o=t.length===n.length?_d(t,n):cm,a=t.length===n.length?Ed(t,gm.lastPointsList):cm;gm.accumulatedDistance={page:gm.accumulatedDistance.page+a.page,client:gm.accumulatedDistance.client+a.client,canvas:gm.accumulatedDistance.canvas+a.canvas,world:gm.accumulatedDistance.world+a.world};const r={event:e,eventName:am,renderingEngineId:gm.renderingEngineId,viewportId:gm.viewportId,camera:{},element:gm.element,startPoints:Sd(gm.startPointsList),lastPoints:Sd(n),currentPoints:Sd(t),startPointsList:bd(gm.startPointsList),lastPointsList:bd(n),currentPointsList:t,deltaPoints:i,deltaDistance:o};vm(gm.element,am,r),function(e,t){const n=(new Date).getTime(),i=gm.startTime.getTime();if(gm.swiped||n-i>gm.swipeToleranceMs)return;const[o,a]=t.canvas,r={event:e,eventName:lm,renderingEngineId:gm.renderingEngineId,viewportId:gm.viewportId,camera:{},element:gm.element,swipe:null};Math.abs(o)>gm.swipeDistanceThreshold&&(r.swipe=o>0?em.RIGHT:em.LEFT,vm(r.element,lm,r),gm.swiped=!0),Math.abs(a)>gm.swipeDistanceThreshold&&(r.swipe=a>0?em.DOWN:em.UP,vm(r.element,lm,r),gm.swiped=!0)}(e,i),gm.lastPointsList=bd(t)}function fm(e){clearTimeout(gm.pressTimeout);const t=tm(e,gm.element),n=wm(gm.element,gm.lastPointsList),i=t.length===n.length?Id(t,n):Id(t,t),o=t.length===n.length?_d(t,n):_d(t,t),a={event:e,eventName:rm,element:gm.element,renderingEngineId:gm.renderingEngineId,viewportId:gm.viewportId,camera:{},startPointsList:bd(gm.startPointsList),lastPointsList:bd(n),currentPointsList:t,startPoints:Sd(gm.startPointsList),lastPoints:Sd(n),currentPoints:Sd(t),deltaPoints:i,deltaDistance:o};vm(a.element,rm,a),function(e){if((new Date).getTime()-gm.startTime.getTime()>mm.tapToleranceMs)return;if(0===mm.taps&&(mm.element=gm.element,mm.renderingEngineId=gm.renderingEngineId,mm.viewportId=gm.viewportId,mm.startPointsList=gm.startPointsList),mm.taps>0&&(mm.element!=gm.element||mm.renderingEngineId!=gm.renderingEngineId||mm.viewportId!=gm.viewportId))return;const t=tm(e,mm.element);Ed(t,mm.startPointsList).canvas>mm.tapMaxDistance||(clearTimeout(mm.tapTimeout),mm.taps+=1,mm.tapTimeout=setTimeout((()=>{const n={event:e,eventName:sm,element:mm.element,renderingEngineId:mm.renderingEngineId,viewportId:mm.viewportId,camera:{},currentPointsList:t,currentPoints:Sd(t),taps:mm.taps};vm(n.element,sm,n),mm=JSON.parse(JSON.stringify(um))}),mm.tapToleranceMs))}(e),gm=JSON.parse(JSON.stringify(hm)),document.removeEventListener("touchmove",pm),document.removeEventListener("touchend",fm)}function wm(e,t){const{viewport:n}=(0,ie.getEnabledElement)(e);return t.map((e=>{const t=n.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:t,touch:e.touch}}))}const Im=function(e){gm.element=e.currentTarget;const t=(0,ie.getEnabledElement)(gm.element),{renderingEngineId:n,viewportId:i}=t;gm.renderingEngineId=n,gm.viewportId=i,gm.isTouchStart||(clearTimeout(gm.pressTimeout),gm.pressTimeout=setTimeout((()=>function(e){if(gm.accumulatedDistance.canvas>gm.pressMaxDistance)return;const t={event:e,eventName:om,renderingEngineId:gm.renderingEngineId,viewportId:gm.viewportId,camera:{},element:gm.element,startPointsList:bd(gm.startPointsList),lastPointsList:bd(gm.lastPointsList),startPoints:Td(Sd(gm.startPointsList)),lastPoints:Td(Sd(gm.lastPointsList))};vm(t.element,om,t)}(e)),gm.pressDelay),function(e){gm.isTouchStart=!0,gm.startTime=new Date;const t=tm(e,gm.element),n=Sd(t),i=dm,o=cm,a={event:e,eventName:nm,element:gm.element,renderingEngineId:gm.renderingEngineId,viewportId:gm.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:i,deltaDistance:o};gm.startPointsList=bd(a.startPointsList),gm.lastPointsList=bd(a.lastPointsList),vm(a.element,nm,a)&&vm(a.element,im,a)}(e),document.addEventListener("touchmove",pm),document.addEventListener("touchend",fm))};function Em(e){Qg.disable(e),e.removeEventListener("touchstart",Im)}const Cm={enable:function(e){Em(e),Qg.enable(e),e.addEventListener("touchstart",Im,{passive:!1})},disable:Em},_m={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let bm={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function Tm(e){bm.element=e.currentTarget;const t=(0,ie.getEnabledElement)(bm.element),{renderingEngineId:n,viewportId:i}=t;bm.renderingEngineId=n,bm.viewportId=i,bm.key=e.key,bm.keyCode=e.keyCode,e.preventDefault();const o={renderingEngineId:bm.renderingEngineId,viewportId:bm.viewportId,element:bm.element,key:bm.key,keyCode:bm.keyCode};(0,ie.triggerEvent)(o.element,se.KEY_DOWN,o),document.addEventListener("keyup",Sm),document.addEventListener("visibilitychange",Dm),bm.element.removeEventListener("keydown",Tm)}function Dm(){document.removeEventListener("visibilitychange",Dm),"hidden"===document.visibilityState&&ym()}function Sm(e){const t={renderingEngineId:bm.renderingEngineId,viewportId:bm.viewportId,element:bm.element,key:bm.key,keyCode:bm.keyCode};document.removeEventListener("keyup",Sm),document.removeEventListener("visibilitychange",Dm),bm.element.addEventListener("keydown",Tm),bm=structuredClone(_m),(0,ie.triggerEvent)(t.element,se.KEY_UP,t)}function ym(){bm.keyCode=void 0}const xm=Tm;function Mm(e){e.removeEventListener("keydown",xm)}const Om={enable:function(e){Mm(e),e.addEventListener("keydown",xm)},disable:Mm,getModifierKey:function(){return bm.keyCode}};function Pm(e){const t=e.detail,{viewportId:n,renderingEngineId:i}=t,{viewport:o}=(0,ie.getEnabledElementByIds)(n,i),a=zu(n);if(!a?.length)return;const r=a.filter((e=>e.type===Ct.Labelmap));if(!r.length)return;const s=o.getActors();r.forEach((e=>{const{segmentationId:t}=e;lg(n,t)})),s.filter((e=>r.some((t=>t.segmentationRepresentationUID===e.uid)))).forEach((e=>{r.find((t=>sg(n,t.segmentationId)===e.referencedId))||o.removeActors([e.uid])})),r.forEach((t=>{const{segmentationId:i}=t,a=o.getCurrentImageId(),r=sg(n,i);if(!r)return;const l=ie.cache.getImage(r);if(!l)return void console.warn("No derived image found in the cache for segmentation representation",t);const d=s.find((e=>e.referencedId===r));if(!d){const{dimensions:e,spacing:n,direction:i}=o.getImageDataMetadata(l),s=ie.cache.getImage(a)||{imageId:a},{origin:d}=o.getImageDataMetadata(s),c=d,h=Ai().newInstance({name:"Pixels",numberOfComponents:1,values:[...l.voxelManager.getScalarData()]}),u=Li().newInstance();return u.setDimensions(e[0],e[1],1),u.setSpacing(n),u.setDirection(i),u.setOrigin(c),u.getPointData().setScalars(h),u.modified(),o.addImages([{imageId:r,actorUID:t.segmentationRepresentationUID,callback:e=>{let{imageActor:t}=e;t.getMapper().setInputData(u)}}]),void yu()}{const e=d.actor.getMapper().getInputData();e.setDerivedImage?e.setDerivedImage(l):ie.utilities.updateVTKImageDataWithCornerstoneImage(e,l)}o.render(),e.type===ie.Enums.Events.IMAGE_RENDERED&&o.element.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,Pm)}))}new Map;const Am={enable:function(e){const{viewport:t}=(0,ie.getEnabledElement)(e);t instanceof ie.BaseVolumeViewport||(e.addEventListener(ie.Enums.Events.STACK_NEW_IMAGE,Pm),e.addEventListener(ie.Enums.Events.IMAGE_RENDERED,Pm))},disable:function(e){e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,Pm),e.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,Pm)}},Rm=function(e){ni(e.detail.element)},Lm={enable:function(e){e.addEventListener(ie.Enums.Events.IMAGE_RENDERED,Rm)},disable:function(e){e.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,Rm)}};function Nm(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=Vn(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.mouseButton===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:Um,Passive:km,Enabled:Vm}=Ye,Wm=function(e){Nm(e,[Um,km,Vm]).forEach((t=>{t.onCameraModified&&t.onCameraModified(e)}))},Bm={enable:function(e){e.addEventListener(ie.Enums.Events.CAMERA_MODIFIED,Wm)},disable:function(e){e.removeEventListener(ie.Enums.Events.CAMERA_MODIFIED,Wm)}},{Active:Hm,Passive:Fm,Enabled:Gm}=Ye,$m=function(e){Nm(e,[Hm,Fm,Gm]).forEach((t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)}))},qm={enable:function(e){e.addEventListener(ie.Enums.Events.IMAGE_SPACING_CALIBRATED,$m)},disable:function(e){e.removeEventListener(ie.Enums.Events.IMAGE_SPACING_CALIBRATED,$m)}},{Active:zm,Passive:jm,Enabled:Km}=Ye,Ym=function(e){Nm(e,[zm,jm,Km]).forEach((t=>{t.onResetCamera&&t.onResetCamera(e)}))},Xm={enable:function(e){e.addEventListener(ie.Enums.Events.CAMERA_RESET,Ym)},disable:function(e){e.removeEventListener(ie.Enums.Events.CAMERA_RESET,Ym)}},{Active:Jm}=Ye;function Zm(e,t,n){if(je.isInteractingWithTool)return!1;const{renderingEngineId:i,viewportId:o}=n.detail,a=Vn(o,i);if(!a)return!1;let r;const s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n],o=a.getToolInstance(n);if(i.mode===Jm&&"function"==typeof o[t]){r=a.getToolInstance(n);break}}r&&r[t](n)}const Qm=Zm.bind(null,"Mouse","mouseClickCallback");function ev(e,t,n){const i="touch"===(arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse")?36:6,o=[];return t.forEach((t=>{let{tool:a,annotations:r}=t;for(const t of r){if(t.isLocked||!t.isVisible)continue;const r=a.getHandleNearImagePoint(e,t,n,i);if(r){o.push({tool:a,annotation:t,handle:r});break}}})),o}function tv(e,t){const n=[];for(let i=0;i<t.length;i++){const o=t[i];if(!o){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let a=st(o.constructor.toolName,e);a?.length&&("function"==typeof o.filterInteractableAnnotationsForElement&&(a=o.filterInteractableAnnotationsForElement(e,a)),a.length>0&&n.push({tool:o,annotations:a}))}return n}function nv(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse";const o="touch"===i?36:6,a=[];return t.forEach((t=>{let{tool:r,annotations:s}=t;for(const t of s)if(!t.isLocked&&t.isVisible&&r.isPointNearTool(e,t,n,o,i)){a.push({tool:r,annotation:t});break}})),a}const{Active:iv}=Ye;function ov(e){const{renderingEngineId:t,viewportId:n,event:i}=e.detail,o=lc(i)||Om.getModifierKey(),a=Vn(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary(),l=e.detail.buttons??i?.buttons??s;for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t],i=n.bindings.length&&n.bindings.some((e=>e.mouseButton===l&&e.modifierKey===o));if(n.mode===iv&&i)return a.getToolInstance(t)}}const{Active:av,Passive:rv}=Ye;const{Active:sv,Passive:lv}=Ye;function dv(e){if(je.isInteractingWithTool)return;const t=ov(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;const n=1===e.detail.event.buttons,i=[...Nm(e,[sv],e.detail.event.buttons)||[],...(n?Nm(e,[lv]):void 0)||[]];if(function(e){if(je.isInteractingWithTool)return!1;const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{canvas:o}=t.currentPoints;if(!i)return!1;const a=function(e,t){const n=new Map,{renderingEngineId:i,viewportId:o}=e.detail,a=Vn(o,i);if(!a)return n;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary(),l=e.detail.event,d=l?.buttons??s,c=lc(l)||Om.getModifierKey();for(let e=0;e<r.length;e++){const i=r[e],o=a.getToolInstance(i),s=o.configuration?.actions??{},l=Object.values(s);if(!l?.length||!t.includes(o.mode))continue;const h=l.find((e=>e.bindings.length&&e.bindings.some((e=>e.mouseButton===d&&e.modifierKey===c))));h&&n.set(o,h)}return n}(e,[av,rv]),r=nv(n,tv(n,Array.from(a.keys())),o);if(r.length>0){const{tool:t,annotation:n}=r[0],i=a.get(t);return("string"==typeof i.method?t[i.method]:i.method).call(t,e,n),!0}return!1}(e))return;const o=e.detail,{element:a}=o,r=tv(a,i),s=o.currentPoints.canvas,l=ev(a,r,s,"mouse"),d=!!e.detail.event.shiftKey;if(l.length>0){const{tool:t,annotation:n,handle:i}=cv(l);return hv(n.annotationUID,d),void t.handleSelectedCallback(e,n,i,"Mouse")}const c=nv(a,r,s,"mouse");if(c.length>0){const{tool:t,annotation:n}=cv(c);return hv(n.annotationUID,d),void t.toolSelectedCallback(e,n,"Mouse",s)}!t||"function"!=typeof t.postMouseDownCallback||t.postMouseDownCallback(e)}function cv(e){return e.length>1&&e.find((e=>!ue(e.annotation)&&Re(e.annotation.annotationUID)))||e[0]}function hv(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?De(e)?Ce(e,!1):Ce(e,!0,!0):Ce(e,!0,!1)}function uv(e){if(je.isInteractingWithTool)return;const t=ov(e);t&&!je.isMultiPartToolActive&&t.addNewAnnotation&&Ce(t.addNewAnnotation(e,"mouse").annotationUID)}const gv=Zm.bind(null,"Mouse","doubleClickCallback");function mv(e){if(je.isInteractingWithTool)return;const t=ov(e);!t||"function"!=typeof t.mouseDragCallback||t.mouseDragCallback(e)}const{Active:vv,Passive:pv}=Ye;function fv(e){if(je.isInteractingWithTool||je.isMultiPartToolActive)return;const t=Nm(e,[vv,pv]),n=e.detail,{element:i}=n,o=tv(i,t),a=t.filter((e=>!o.some((t=>t.tool.getToolName()===e.getToolName()))));let r=!1;for(const{tool:t,annotations:n}of o)"function"==typeof t.mouseMoveCallback&&(r=t.mouseMoveCallback(e,n)||r);a.forEach((t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)})),!0===r&&ni(i)}const wv=Zm.bind(null,"Mouse","mouseUpCallback"),Iv=function(e){if(je.isInteractingWithTool)return;e.detail.buttons=rc.Wheel|(e.detail.event.buttons||0);const t=ov(e);return t?t.mouseWheelCallback(e):void 0},Ev={enable:function(e){e.addEventListener(se.MOUSE_CLICK,Qm),e.addEventListener(se.MOUSE_DOWN,dv),e.addEventListener(se.MOUSE_DOWN_ACTIVATE,uv),e.addEventListener(se.MOUSE_DOUBLE_CLICK,gv),e.addEventListener(se.MOUSE_DRAG,mv),e.addEventListener(se.MOUSE_MOVE,fv),e.addEventListener(se.MOUSE_UP,wv),e.addEventListener(se.MOUSE_WHEEL,Iv)},disable:function(e){e.removeEventListener(se.MOUSE_CLICK,Qm),e.removeEventListener(se.MOUSE_DOWN,dv),e.removeEventListener(se.MOUSE_DOWN_ACTIVATE,uv),e.removeEventListener(se.MOUSE_DOUBLE_CLICK,gv),e.removeEventListener(se.MOUSE_DRAG,mv),e.removeEventListener(se.MOUSE_MOVE,fv),e.removeEventListener(se.MOUSE_UP,wv),e.removeEventListener(se.MOUSE_WHEEL,Iv)}},{Active:Cv}=Ye;function _v(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=Eg.mouseButton,o=Om.getModifierKey(),a=Vn(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary();for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t];if(n.mode===Cv&&(n.bindings.length&&n.bindings.some((e=>e.mouseButton===(i??s)&&e.modifierKey===o))))return a.getToolInstance(t)}}function bv(e){const t=_v(e);if(t){const{renderingEngineId:n,viewportId:i}=e.detail,o=Vn(i,n),a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const n=function(e,t){const n=new Map,{renderingEngineId:i,viewportId:o}=e.detail,a=Vn(o,i);if(!a)return n;const r=Object.keys(a.toolOptions),s=e.detail.key;for(let e=0;e<r.length;e++){const i=r[e],o=a.getToolInstance(i),l=o.configuration?.actions;if(!l)continue;const d=Object.values(l);if(!d?.length||!t.includes(o.mode))continue;const c=d.find((e=>e.bindings.some((e=>e.key===s))));c&&n.set(o,c)}return n}(e,[Ye.Active]);if(n?.size){const{element:t}=e.detail;for(const[i,o]of[...n.entries()])("function"==typeof o.method?o.method:i[o.method]).call(i,t,o,e)}}function Tv(e){const t=_v(e);if(!t)return;const{renderingEngineId:n,viewportId:i}=e.detail,o=Vn(i,n);ym();const a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const Dv={enable:function(e){e.addEventListener(se.KEY_DOWN,bv),e.addEventListener(se.KEY_UP,Tv)},disable:function(e){e.removeEventListener(se.KEY_DOWN,bv),e.removeEventListener(se.KEY_UP,Tv)}},{Active:Sv}=Ye;function yv(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,o=Vn(n,t);if(!o)return null;const a=Object.keys(o.toolOptions),r=Object.keys(i.touches).length,s=lc(i)||Om.getModifierKey(),l=o.getDefaultMousePrimary();for(let e=0;e<a.length;e++){const t=a[e],n=o.toolOptions[t],i=n.bindings.length&&n.bindings.some((e=>(e.numTouchPoints===r||1===r&&e.mouseButton===l)&&e.modifierKey===s));if(n.mode===Sv&&i)return o.getToolInstance(t)}}function xv(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=Vn(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.numTouchPoints===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:Mv,Passive:Ov}=Ye;function Pv(e){if(je.isInteractingWithTool)return;const t=yv(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;const n=1===Object.keys(e.detail.event.touches).length,i=[...xv(e,[Mv],Object.keys(e.detail.event.touches).length)||[],...(n?xv(e,[Ov]):void 0)||[],t],o=e.detail,{element:a}=o,r=tv(a,i),s=o.currentPoints.canvas,l=ev(a,r,s,"touch"),d=!1;if(l.length>0){const{tool:t,annotation:n,handle:i}=Av(l);return Rv(n.annotationUID,d),void t.handleSelectedCallback(e,n,i,"Touch")}const c=nv(a,r,s,"touch");if(c.length>0){const{tool:t,annotation:n}=Av(c);return Rv(n.annotationUID,d),void t.toolSelectedCallback(e,n,"Touch")}!t||"function"!=typeof t.postTouchStartCallback||t.postTouchStartCallback(e)}function Av(e){return e.length>1&&e.find((e=>!ue(e.annotation)&&Re(e.annotation.annotationUID)))||e[0]}function Rv(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?De(e)?Ce(e,!1):Ce(e,!0,!0):Ce(e,!0,!1)}function Lv(e){if(je.isInteractingWithTool)return;const t=yv(e);t&&!je.isMultiPartToolActive&&t.addNewAnnotation&&Ce(t.addNewAnnotation(e,"touch").annotationUID)}function Nv(e){if(je.isInteractingWithTool)return;const t=yv(e);!t||"function"!=typeof t.touchDragCallback||t.touchDragCallback(e)}const Uv=Zm.bind(null,"Touch","touchEndCallback"),kv=Zm.bind(null,"Touch","touchTapCallback"),Vv=Zm.bind(null,"Touch","touchPressCallback"),Wv={enable:function(e){e.addEventListener(se.TOUCH_START,Pv),e.addEventListener(se.TOUCH_START_ACTIVATE,Lv),e.addEventListener(se.TOUCH_DRAG,Nv),e.addEventListener(se.TOUCH_END,Uv),e.addEventListener(se.TOUCH_TAP,kv),e.addEventListener(se.TOUCH_PRESS,Vv)},disable:function(e){e.removeEventListener(se.TOUCH_START,Pv),e.removeEventListener(se.TOUCH_START_ACTIVATE,Lv),e.removeEventListener(se.TOUCH_DRAG,Nv),e.removeEventListener(se.TOUCH_END,Uv),e.removeEventListener(se.TOUCH_PRESS,Vv)}};function Bv(e){const{element:t,viewportId:n}=e.detail,i=function(e){const t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),i=`svg-layer-${e}`;n.classList.add("svg-layer"),n.setAttribute("id",i),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.style.width="100%",n.style.height="100%",n.style.pointerEvents="none",n.style.position="absolute";const o=document.createElementNS(t,"defs"),a=document.createElementNS(t,"filter"),r=document.createElementNS(t,"feOffset"),s=document.createElementNS(t,"feColorMatrix"),l=document.createElementNS(t,"feBlend");return a.setAttribute("id",`shadow-${i}`),a.setAttribute("filterUnits","userSpaceOnUse"),r.setAttribute("result","offOut"),r.setAttribute("in","SourceGraphic"),r.setAttribute("dx","0.5"),r.setAttribute("dy","0.5"),s.setAttribute("result","matrixOut"),s.setAttribute("in","offOut"),s.setAttribute("in2","matrix"),s.setAttribute("values","0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0"),l.setAttribute("in","SourceGraphic"),l.setAttribute("in2","matrixOut"),l.setAttribute("mode","normal"),a.appendChild(r),a.appendChild(s),a.appendChild(l),o.appendChild(a),n.appendChild(o),n}(n);var o;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i=`${t}:${n}`;je.svgNodeCache[i]={}}(t),o=i,t.querySelector("div.viewport-element").appendChild(o),ti.addViewportElement(n,t),kg.enable(t),Bg.enable(t),Cm.enable(t),Om.enable(t),Am.enable(t),Lm.enable(t),Bm.enable(t),qm.enable(t),Xm.enable(t),Ev.enable(t),Dv.enable(t),Wv.enable(t),je.enabledElements.push(t)}const Hv=function(e,t){const n=[];if(!t&&!e)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let i=0;i<je.synchronizers.length;i++){const o=je.synchronizers[i],a=!o.isDisabled(),r=o.hasSourceViewport(t,e),s=o.hasTargetViewport(t,e);a&&(r||s)&&n.push(o)}return n},Fv=function(e){const{element:t,viewportId:n}=e.detail;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i=`${t}:${n}`;delete je.svgNodeCache[i]}(t),function(e){const t=e.querySelector("div.viewport-element"),n=t.querySelector("svg");n&&t.removeChild(n)}(t),ti.removeViewportElement(n,t),kg.disable(t),Bg.disable(t),Cm.disable(t),Om.disable(t),Am.disable(t),Lm.disable(t),Bm.disable(t),qm.disable(t),Xm.disable(t),Ev.disable(t),Dv.disable(t),Wv.disable(t),(e=>{const t=(0,ie.getEnabledElement)(e);Hv(t.viewportId,t.renderingEngineId).forEach((e=>{e.remove(t)}))})(t),(e=>{const{renderingEngineId:t,viewportId:n}=(0,ie.getEnabledElement)(e),i=Vn(n,t);i&&i.removeViewports(t,n)})(t),function(e){const t=je.enabledElements.findIndex((t=>t===e));t>-1&&je.enabledElements.splice(t,1)}(t)};function Gv(e){Wo(e.detail.annotation)&&async function(e){const t=e.detail.annotation;if(!Wo(t))return;const n=function(e){const t=fi(e),n=t.find((e=>jo(e,!0)));return n??t[0]}(t),i=function(e,t){const{annotationUID:n}=t;return lt().filter((i=>i.annotationUID&&i.annotationUID!==n&&Wo(i)&&Bo(i,t)&&e.isReferenceViewable(i.metadata)))}(n,t);if(!i.length)return;const o=Ko(t.data.contour.polyline,n),a=function(e,t,n){const i=kn(t);for(let o=0;o<n.length;o++){const a=n[o],r=Ko(a.data.contour.polyline,e),s=so(i,kn(r)),l=s&&go(t,r),d=s&&!l&&po(r,t);if(l||d)return{targetAnnotation:a,targetPolyline:r,isContourHole:d}}}(n,o,i);if(!a)return;const{targetAnnotation:r,targetPolyline:s,isContourHole:l}=a;if(l){const{contourHoleProcessingEnabled:i=!1}=e.detail;if(!i)return;Yo(n,r,t)}else!function(e,t,n,i,o){if(!function(e){const t=e.toolName;return!(!t||!je.tools[t])}(Kh))return void console.warn(`${Kh.toolName} is not registered in cornerstone`);if(!jo(e))return;const a=vo(n,o[0]),r=function(e,t){return ut(t).map((t=>({annotation:t,polyline:Ko(t.data.contour.polyline,e)})))}(e,t),s=new Set(r),l=new Map,d=(e,t)=>{let n=l.get(e);n||(n=[],l.set(e,n)),n.push(t),s.delete(t)},c=[];if(a){const e=Mo(n,o);c.push(e),Array.from(s.keys()).forEach((t=>d(e,t)))}else Oo(n,o).forEach((e=>{c.push(e),Array.from(s.keys()).forEach((t=>{po(e,t.polyline)&&(d(e,t),s.delete(t))}))}));Array.from(l.values()).forEach((e=>e.forEach((e=>dt(e.annotation)))));const{element:h}=e,u=(0,ie.getEnabledElement)(h),{metadata:g,data:m}=t,{handles:v,segmentation:p}=m,{textBox:f}=v;vt(i.annotationUID),vt(t.annotationUID);for(let n=0;n<c.length;n++){const i=c[n],o=e.canvasToWorld(i[0]),a=e.canvasToWorld(i[i.length-1]),r={metadata:{...g,toolName:zo,originalToolName:g.originalToolName||g.toolName},data:{cachedStats:{},handles:{points:[o,a],textBox:f?{...f}:void 0},contour:{polyline:[],closed:!0},spline:t.data.spline,segmentation:{...p}},annotationUID:ie.utilities.uuidv4(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};Ji(r,{points:i,closed:!0,targetWindingDirection:qo.Clockwise},e),gt(r,h),Fo(r),Qe(r,e.element),l.get(i)?.forEach((e=>ct(r,e.annotation)))}!function(e,t,n){const{viewport:i}=e,{element:o}=i,a=new Set([zo,t.metadata.toolName,n.metadata.toolName]);for(const e of a.values()){const t=Vo(o,e);oi(t)}new Promise((e=>window.requestAnimationFrame(e)))}(u,t,i)}(n,r,s,t,o)}(e)}const $v=function(e){const{viewportId:t}=e.detail;oi([t])},qv=function(e){e.detail.removed.length&&(0,ie.getRenderingEngines)().forEach((e=>{const t=e.getViewports().map((e=>e.id));oi(t)}))};function zv(e){Wo(e.detail.annotation)&&function(e){Ho(e.detail.annotation)}(e)}const jv=function(e){const{segmentationId:t}=e.detail;xu(t)},Kv=function(e){const{segmentationId:t}=e.detail,{type:n}=Nu(t);n===Ct.Labelmap&&function(e){const{segmentationId:t,modifiedSlicesToUse:n}=e.detail;let i=n;const{representationData:o,type:a}=Nu(t),r=o[a];"stack"in r&&"volumeId"in r&&(i=[]),"volumeId"in r&&function(e){let{modifiedSlicesToUse:t,representationData:n,type:i}=e;const o=ie.cache.getVolume(n[i].volumeId);if(!o)return void console.warn("segmentation not found in cache");const{imageData:a,vtkOpenGLTexture:r}=o;let s;if(t?.length>0)s=t;else{const e=a.getDimensions()[2];s=[...Array(e).keys()]}s.forEach((e=>{r.setUpdatedFrame(e)})),a.modified()}({modifiedSlicesToUse:i,representationData:o,type:a});const s=qu(t);"imageIds"in r&&function(e){let{viewportIds:t,segmentationId:n,representationData:i,type:o}=e;t.forEach((e=>{zu(e).forEach((t=>{if(t.segmentationId!==n)return;const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;if(o instanceof ie.VolumeViewport)return;const a=o.getActor(t.segmentationRepresentationUID);if(!a)return;const r=a.actor.getMapper().getInputData(),s=sg(e,t.segmentationId),l=ie.cache.getImage(s);r.modified(),ie.utilities.updateVTKImageDataWithCornerstoneImage(r,l)}))}))}({viewportIds:s,segmentationId:t,representationData:o,type:a})}(e),xu(t)},Yv=function(e){const{segmentationRepresentationUID:t}=e.detail,n=Wu?Wu(t):null;if(!n)return;const i=n?.segmentationId;xu(i)},Xv=function(e){const{segmentationRepresentationUID:t}=e.detail;xu(Wu(t).segmentationId)},Jv={enable:function(){ie.eventTarget.addEventListener(se.ANNOTATION_COMPLETED,ua.handleAnnotationCompleted),ie.eventTarget.addEventListener(se.ANNOTATION_MODIFIED,ua.handleAnnotationUpdate),ie.eventTarget.addEventListener(se.ANNOTATION_REMOVED,ua.handleAnnotationDelete)},disable:function(){ie.eventTarget.removeEventListener(se.ANNOTATION_COMPLETED,ua.handleAnnotationCompleted),ie.eventTarget.removeEventListener(se.ANNOTATION_MODIFIED,ua.handleAnnotationUpdate),ie.eventTarget.removeEventListener(se.ANNOTATION_REMOVED,ua.handleAnnotationDelete)}},Zv=function(e){const t=je.toolGroups.findIndex((t=>t.id===e));t>-1&&je.toolGroups.splice(t,1)},Qv=function(){const e=[...je.toolGroups];for(const t of e)Zv(t.id);je.toolGroups=[]};let ep=!1;function tp(){ep||(function(){ip();const e=ie.Enums.Events.ELEMENT_ENABLED,t=ie.Enums.Events.ELEMENT_DISABLED;ie.eventTarget.addEventListener(e,Bv),ie.eventTarget.addEventListener(t,Fv),Jv.enable()}(),op(),ie.eventTarget.addEventListener(se.ANNOTATION_COMPLETED,Gv),ie.eventTarget.addEventListener(se.ANNOTATION_MODIFIED,$v),ie.eventTarget.addEventListener(se.ANNOTATION_SELECTION_CHANGE,qv),ie.eventTarget.addEventListener(se.ANNOTATION_SELECTION_CHANGE,qv),ie.eventTarget.addEventListener(se.ANNOTATION_REMOVED,zv),ie.eventTarget.addEventListener(se.SEGMENTATION_MODIFIED,jv),ie.eventTarget.addEventListener(se.SEGMENTATION_DATA_MODIFIED,Kv),ie.eventTarget.addEventListener(se.SEGMENTATION_REPRESENTATION_MODIFIED,Yv),ie.eventTarget.addEventListener(se.SEGMENTATION_REPRESENTATION_REMOVED,Xv),ep=!0)}function np(){ip(),op(),Qv(),qe={},je={...structuredClone({...ze,svgNodeCache:{}}),svgNodeCache:{...ze.svgNodeCache}};const e=ot(),t=Lu();e.restoreAnnotations({}),t.resetState(),ep=!1}function ip(){const e=ie.Enums.Events.ELEMENT_ENABLED,t=ie.Enums.Events.ELEMENT_DISABLED;ie.eventTarget.removeEventListener(e,Bv),ie.eventTarget.removeEventListener(t,Fv),Jv.disable()}function op(){ie.eventTarget.removeEventListener(se.ANNOTATION_COMPLETED,Gv),ie.eventTarget.removeEventListener(se.ANNOTATION_MODIFIED,$v),ie.eventTarget.removeEventListener(se.ANNOTATION_SELECTION_CHANGE,qv),ie.eventTarget.removeEventListener(se.ANNOTATION_SELECTION_CHANGE,qv),ie.eventTarget.removeEventListener(se.SEGMENTATION_MODIFIED,jv),ie.eventTarget.removeEventListener(se.SEGMENTATION_DATA_MODIFIED,Kv),ie.eventTarget.removeEventListener(se.SEGMENTATION_REPRESENTATION_MODIFIED,Yv),ie.eventTarget.removeEventListener(se.SEGMENTATION_REPRESENTATION_REMOVED,Xv)}function ap(e){const t=tv(e,Jn(e,[Ye.Active,Ye.Passive]));for(const{tool:n}of t){const t=n.cancel(e);if(t)return t}}function rp(e,t){return e.findIndex((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))}function sp(e,t){return e.some((e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId))}const lp=class{constructor(e,t,n,i){ae(this,"_enabled",void 0),ae(this,"_eventName",void 0),ae(this,"_auxiliaryEventNames",void 0),ae(this,"_eventHandler",void 0),ae(this,"_ignoreFiredEvents",void 0),ae(this,"_sourceViewports",void 0),ae(this,"_targetViewports",void 0),ae(this,"_viewportOptions",{}),ae(this,"_options",void 0),ae(this,"id",void 0),ae(this,"_onEvent",(e=>{if(!0===this._ignoreFiredEvents)return;if(!this._targetViewports.length)return;const t=e.currentTarget,n=(0,ie.getEnabledElement)(t);if(!n)return;const{renderingEngineId:i,viewportId:o}=n;this._sourceViewports.find((e=>e.viewportId===o))&&this.fireEvent({renderingEngineId:i,viewportId:o},e)})),this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},this._auxiliaryEventNames=this._options.auxiliaryEventNames||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._viewportOptions[e]=t}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(sp(this._sourceViewports,e))return;const{renderingEngineId:t,viewportId:n}=e,i=(0,ie.getRenderingEngine)(t).getViewport(n);if(!i)return void console.warn(`Synchronizer.addSource: No viewport for ${t} ${n}`);const o=i.element;o.addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEventNames.length&&this._auxiliaryEventNames.forEach((e=>{o.addEventListener(e,this._onEvent.bind(this))})),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){sp(this._targetViewports,e)||(this._targetViewports.push(e),this._updateDisableHandlers())}getSourceViewports(){return this._sourceViewports}getTargetViewports(){return this._targetViewports}destroy(){this._sourceViewports.forEach((e=>this.removeSource(e))),this._targetViewports.forEach((e=>this.removeTarget(e)))}remove(e){this.removeTarget(e),this.removeSource(e)}removeSource(e){const t=rp(this._sourceViewports,e);if(-1===t)return;const n=function(e){const t=(0,ie.getRenderingEngine)(e.renderingEngineId);if(!t)throw new Error(`No RenderingEngine for Id: ${e.renderingEngineId}`);return t.getViewport(e.viewportId).element}(e);this._sourceViewports.splice(t,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEventNames&&this._auxiliaryEventNames.forEach((e=>{n.removeEventListener(e,this._eventHandler)})),this._updateDisableHandlers()}removeTarget(e){const t=rp(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return sp(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return sp(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let i=0;i<this._targetViewports.length;i++){const o=this._targetViewports[i];if(e.viewportId===o.viewportId)continue;const a=this._eventHandler(this,e,o,t,this._options);a instanceof Promise&&n.push(a)}}catch(e){console.warn(`Synchronizer, for: ${this._eventName}`,e)}finally{n.length?Promise.allSettled(n).then((()=>{this._ignoreFiredEvents=!1})):this._ignoreFiredEvents=!1}}_hasSourceElements(){return 0!==this._sourceViewports.length}_updateDisableHandlers(){const e=function(e,t){const n=[],i=e.concat(t);for(let e=0;e<i.length;e++){const t=i[e];n.some((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))||n.push(t)}return n}(this._sourceViewports,this._targetViewports),t=this.remove,n=e=>{t(e.detail.element)};e.forEach((function(e){const t=(0,ie.getRenderingEngine)(e.renderingEngineId);if(!t)return;const i=t.getViewport(e.viewportId);if(!i)return;const{element:o}=i;o.removeEventListener(ie.Enums.Events.ELEMENT_DISABLED,n),o.addEventListener(ie.Enums.Events.ELEMENT_DISABLED,n)}))}},dp=function(e,t,n,i){if(je.synchronizers.some((t=>t.id===e)))throw new Error(`Synchronizer with id '${e}' already exists.`);const o=new lp(e,t,n,i);return je.synchronizers.push(o),o},cp=function(){for(;je.synchronizers.length>0;)je.synchronizers.pop().destroy()},hp=function(e){return je.synchronizers.find((t=>t.id===e))},up=function(){return je.synchronizers},gp=function(e){const t=je.synchronizers.findIndex((t=>t.id===e));t>-1&&(je.synchronizers[t].destroy(),je.synchronizers.splice(t,1))};var mp=E(485),vp=E.n(mp);class pp extends ir{constructor(e,t,n,i,o){super(i||pp.getUniqueInstanceName("image-cursor"),o),ae(this,"url",void 0),ae(this,"x",void 0),ae(this,"y",void 0),this.url=e,this.x=Number(t)||0,this.y=Number(n)||0}getStyleProperty(){const{url:e,x:t,y:n}=this;let i=`url('${e}')`;return t>=0&&n>=0&&(t>0||n>0)&&(i+=` ${t} ${n}`),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return`${e}-${ie.utilities.getRuntimeId(pp)}`}}const fp={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:'\n <path stroke="{{color}}" d="M8 16L8 0"></path>\n <path stroke="{{color}}" d="M16 8L0 8"></path>\n '},wp={x:127,y:60},Ip='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n',Ep='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n<rect fill="{{color}}" x="95.84" y="9.38" width="15.85" height="47.14"/>\n',Cp='<path fill="{{color}}" d="M82.89,10a12.09,12.09,0,0,0-16.8-2.5l-27.5,20.4-8.5-6.3a2.93,2.93,0,0,1-1.1-3,14.66,14.66,0,0,0,.1-6.6,14.08,14.08,0,1,0-6.5,15.2,2.87,2.87,0,0,1,3.2.2l8.2,6.1-8.2,6.1a2.87,2.87,0,0,1-3.2.2,14.16,14.16,0,1,0,6.7,14.4,14,14,0,0,0-.3-5.8,2.93,2.93,0,0,1,1.1-3l8.5-6.3,27.5,20.4A11.91,11.91,0,0,0,82.89,57l-31.7-23.5ZM15.29,21a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,21Zm0,36.8a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,57.77Zm28.3-21.5a2.8,2.8,0,1,1,2.8-2.8A2.8,2.8,0,0,1,43.59,36.27Z" transform="translate(-1.17 -0.96)"/>',_p='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',bp='<path fill="{{color}}" d="M40.77,2.25A31.92,31.92,0,1,0,72.69,34.16,31.92,31.92,0,0,0,40.77,2.25Zm0,57.63A25.71,25.71,0,1,1,66.48,34.16,25.71,25.71,0,0,1,40.77,59.87Z" transform="translate(-8.86 -2.25)"/>',Tp={Angle:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50\n 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23\n 10l50 50q10 10 10 23z" />',viewBox:{x:1792,y:1792}}),ArrowAnnotate:Dp(fp,{iconContent:'<g id="arrowAnnotate-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="arrowAnnotate-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />\n </g>',viewBox:{x:24,y:24}}),Bidirectional:Dp(fp,{iconContent:'<g fill="{{color}}" stroke-width="3" stroke="{{color}}">\n <path d="M27.63 3.21L3.12 28.81"></path>\n <path d="M27.63 15.75L15.27 4.43"></path>\n <path d="M16.5 4.28C16.5 4.96 15.95 5.51 15.27 5.51C14.59 5.51 14.03 4.96 14.03 4.28C14.03 3.59 14.59 3.04 15.27 3.04C15.95 3.04 16.5 3.59 16.5 4.28Z" ></path>\n <path d="M28.87 3.19C28.87 3.87 28.31 4.43 27.63 4.43C26.95 4.43 26.4 3.87 26.4 3.19C26.4 2.51 26.95 1.95 27.63 1.95C28.31 1.95 28.87 2.51 28.87 3.19Z"></path>\n <path d="M28.87 15.75C28.87 16.43 28.31 16.99 27.63 16.99C26.95 16.99 26.4 16.43 26.4 15.75C26.4 15.07 26.95 14.51 27.63 14.51C28.31 14.51 28.87 15.07 28.87 15.75Z"></path>\n <path d="M4.73 28.44C4.73 29.12 4.17 29.68 3.49 29.68C2.81 29.68 2.25 29.12 2.25 28.44C2.25 27.76 2.81 27.2 3.49 27.2C4.17 27.2 4.73 27.76 4.73 28.44Z"></path>\n </g>',viewBox:{x:48,y:48}}),CobbAngle:Dp(fp,{iconContent:'<g stroke="{{color}}" stroke-width="3">\n <path d="M28.59 2.34L3.82 12.32"></path>\n <path d="M28.59 29.66L3.82 19.68"></path>\n <path stroke-dasharray="2" fill-opacity="0" d="M12.37\n 23.06C12.67 22.36 12.85 21.93 12.92 21.76C14.6 17.8 14.68 13.35 13.15\n 9.33C13.11 9.24 13.02 9 12.88 8.63">\n </path>\n </g>',viewBox:{x:32,y:32}}),CircleROI:Dp(fp,{iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:Dp(fp,{iconContent:'<path stroke="{{color}}" fill="none" stroke-width="3" d="M30.74 15.76C30.74 20.99 24.14 25.23 16\n 25.23C7.86 25.23 1.26 20.99 1.26 15.76C1.26 10.54 7.86 6.3 16 6.3C24.14\n 6.3 30.74 10.54 30.74 15.76Z" />',viewBox:{x:32,y:32}}),FreehandROI:Dp(fp,{iconContent:'<g fill="{{color}}" stroke="{{color}}" stroke-width="2">\n <ellipse ry="1" rx="1" id="svg_3" cy="4.240343" cx="14.306499"/>\n <line id="svg_4" y2="3.58462" x2="12.242186" y1="3.997482" x1="13.432202"/>\n <line id="svg_5" y2="3.268901" x2="10.857882" y1="3.608906" x1="12.387902"/>\n <line id="svg_6" y2="3.147471" x2="9.740724" y1="3.293187" x1="10.955026"/>\n <line id="svg_7" y2="3.147471" x2="8.089274" y1="3.196043" x1="9.983585"/>\n <line id="svg_8" y2="3.268901" x2="6.874972" y1="3.123185" x1="8.307848"/>\n <line id="svg_9" y2="3.657478" x2="5.587812" y1="3.220329" x1="7.020688"/>\n <line id="svg_10" y2="4.046054" x2="4.737801" y1="3.560334" x1="5.854959"/>\n <line id="svg_11" y2="4.337487" x2="4.300652" y1="3.997482" x1="4.834945"/>\n <line id="svg_12" y2="4.726063" x2="3.88779" y1="4.191771" x1="4.470655"/>\n <line id="svg_15" y2="5.3575" x2="3.377783" y1="4.604633" x1="3.960648"/>\n <line id="svg_16" y2="6.183226" x2="2.916348" y1="5.138926" x1="3.547785"/>\n <line id="svg_17" y2="6.960379" x2="2.770632" y1="5.867507" x1="3.037779"/>\n <line id="svg_18" y2="7.713246" x2="2.673488" y1="6.741804" x1="2.819204"/>\n <line id="svg_19" y2="8.684687" x2="2.697774" y1="7.616102" x1="2.673488"/>\n <line id="svg_20" y2="9.753273" x2="2.892062" y1="8.611829" x1="2.697774"/>\n <line id="svg_21" y2="10.724714" x2="3.134923" y1="9.534698" x1="2.84349"/>\n <line id="svg_23" y2="11.647583" x2="3.596357" y1="10.578998" x1="3.086351"/>\n <line id="svg_25" y2="12.521881" x2="4.276366" y1="11.501867" x1="3.499213"/>\n <line id="svg_26" y2="13.930471" x2="5.830673" y1="12.376165" x1="4.13065"/>\n <line id="svg_28" y2="14.707624" x2="7.263549" y1="13.881899" x1="5.733528"/>\n <line id="svg_29" y2="15.339061" x2="8.963571" y1="14.61048" x1="7.06926"/>\n <line id="svg_30" y2="15.581921" x2="10.882168" y1="15.314775" x1="8.817855"/>\n <line id="svg_31" y2="15.460491" x2="12.023612" y1="15.581921" x1="10.785024"/>\n <line id="svg_33" y2="15.120487" x2="13.092197" y1="15.484777" x1="11.877895"/>\n <line id="svg_34" y2="14.586194" x2="13.86935" y1="15.217631" x1="12.897909"/>\n <line id="svg_35" y2="13.833327" x2="14.597931" y1="14.756196" x1="13.699348"/>\n <line id="svg_37" y2="12.716169" x2="15.180796" y1="13.881899" x1="14.549359"/>\n <line id="svg_39" y2="11.429009" x2="15.520801" y1="12.813313" x1="15.15651"/>\n <ellipse ry="1" rx="1" id="svg_40" cy="10.967574" cx="15.520801"/>\n </g>',viewBox:{x:18,y:18}}),FreehandROISculptor:Dp(fp,{iconContent:'<g id="icon-freehand-sculpt" fill="none" stroke-width="1.5" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <line id="svg_1" y2="2.559367" x2="10.184807" y1="4.467781" x1="8.81711"/>\n <line id="svg_4" y2="1.493836" x2="11.727442" y1="2.766112" x1="10.089386"/>\n <line id="svg_7" y2="1.080346" x2="13.047428" y1="1.748291" x1="11.345759"/>\n <line id="svg_8" y2="1.000829" x2="14.351511" y1="1.112153" x1="12.77707"/>\n <line id="svg_9" y2="1.350705" x2="15.242104" y1="0.905408" x1="13.969828"/>\n <line id="svg_10" y2="2.098167" x2="15.862339" y1="1.14396" x1="14.955842"/>\n <line id="svg_11" y2="3.195505" x2="16.41896" y1="1.939133" x1="15.766918"/>\n <line id="svg_12" y2="4.292843" x2="16.530284" y1="2.925147" x1="16.387153"/>\n <line id="svg_16" y2="5.644637" x2="16.196311" y1="3.831643" x1="16.593898"/>\n <line id="svg_18" y2="7.266789" x2="15.623787" y1="5.19934" x1="16.275829"/>\n <line id="svg_19" y2="10.813258" x2="14.526449" y1="6.726071" x1="15.766918"/>\n <line id="svg_20" y2="5.056209" x2="8.085552" y1="4.181519" x1="8.976145"/>\n <line id="svg_23" y2="5.326568" x2="7.481221" y1="4.78585" x1="8.403621"/>\n <line id="svg_24" y2="5.565119" x2="6.749662" y1="5.294761" x1="7.624352"/>\n <line id="svg_25" y2="5.994512" x2="5.429675" y1="5.533312" x1="6.956407"/>\n <line id="svg_27" y2="6.551133" x2="4.284627" y1="5.962706" x1="5.572807"/>\n <line id="svg_28" y2="7.584858" x2="3.044158" y1="6.392099" x1="4.427758"/>\n <line id="svg_29" y2="8.84123" x2="2.185372" y1="7.489437" x1="3.219096"/>\n <line id="svg_31" y2="10.606513" x2="1.644654" y1="8.602678" x1="2.280792"/>\n <line id="svg_32" y2="13.214679" x2="1.48562" y1="10.352058" x1="1.724171"/>\n <line id="svg_33" y2="14.375631" x2="1.676461" y1="12.992031" x1="1.453813"/>\n <line id="svg_34" y2="15.298031" x2="2.264889" y1="14.152983" x1="1.517427"/>\n <line id="svg_35" y2="16.172721" x2="3.521261" y1="14.948155" x1="1.915013"/>\n <line id="svg_36" y2="16.824762" x2="5.207027" y1="15.997783" x1="3.28271"/>\n <line id="svg_38" y2="17.063314" x2="7.035924" y1="16.745245" x1="4.968475"/>\n <line id="svg_39" y2="16.888376" x2="9.278311" y1="17.047411" x1="6.733758"/>\n <line id="svg_40" y2="16.284045" x2="10.661911" y1="16.983797" x1="8.992048"/>\n <line id="svg_41" y2="15.313934" x2="11.647925" y1="16.395369" x1="10.455166"/>\n <line id="svg_44" y2="13.898527" x2="12.82478" y1="15.425259" x1="11.504794"/>\n <line id="svg_45" y2="12.037824" x2="14.144766" y1="14.312017" x1="12.522614"/>\n <line id="svg_47" y2="10.59061" x2="14.605966" y1="12.228665" x1="13.953925"/>\n <ellipse ry="1" rx="1" id="svg_48" cy="3.982726" cx="13.460918"/>\n </g>',viewBox:{x:18,y:18}}),Length:Dp(fp,{iconContent:'<g id="length-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="length-dashes" d="m22.5,6 -16.5,16.5" stroke-width="3" stroke-dasharray="0.6666,5" />\n </g>',viewBox:{x:24,y:24}}),Height:Dp(fp,{iconContent:'<path d="m 6 22 l 8.5 0 v -16 h 8" stroke-width="3" fill="none" stroke="{{color}}" />',viewBox:{x:24,y:24}}),Probe:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75\n 75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73\n 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5\n 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5\n 385.5-103 385.5 103 279.5 279.5 103 385.5z" />',viewBox:{x:1792,y:1792}}),RectangleROI:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47\n 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0\n 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119\n 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),TextMarker:Dp(fp,{iconContent:'<path fill="{{color}}" d="M789 559l-170 450q33 0 136.5 2t160.5 2q19 0\n 57-2-87-253-184-452zm-725 1105l2-79q23-7 56-12.5t57-10.5 49.5-14.5 44.5-29\n 31-50.5l237-616 280-724h128q8 14 11 21l205 480q33 78 106 257.5t114 274.5q15\n 34 58 144.5t72 168.5q20 45 35 57 19 15 88 29.5t84 20.5q6 38 6 57 0 5-.5\n 13.5t-.5 12.5q-63 0-190-8t-191-8q-76 0-215 7t-178 8q0-43 4-78l131-28q1 0\n 12.5-2.5t15.5-3.5 14.5-4.5 15-6.5 11-8 9-11\n 2.5-14q0-16-31-96.5t-72-177.5-42-100l-450-2q-26 58-76.5 195.5t-50.5 162.5q0\n 22 14 37.5t43.5 24.5 48.5 13.5 57 8.5 41 4q1 19 1 58 0 9-2 27-58\n 0-174.5-10t-174.5-10q-8 0-26.5 4t-21.5 4q-80 14-188 14z" />',viewBox:{x:1792,y:1792}}),Crosshairs:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1325 1024h-109q-26 0-45-19t-19-45v-128q0-26\n 19-45t45-19h109q-32-108-112.5-188.5t-188.5-112.5v109q0 26-19 45t-45\n 19h-128q-26 0-45-19t-19-45v-109q-108 32-188.5 112.5t-112.5 188.5h109q26\n 0 45 19t19 45v128q0 26-19 45t-45 19h-109q32 108 112.5 188.5t188.5\n 112.5v-109q0-26 19-45t45-19h128q26 0 45 19t19 45v109q108-32\n 188.5-112.5t112.5-188.5zm339-192v128q0 26-19 45t-45 19h-143q-37 161-154.5\n 278.5t-278.5 154.5v143q0 26-19 45t-45 19h-128q-26\n 0-45-19t-19-45v-143q-161-37-278.5-154.5t-154.5-278.5h-143q-26\n 0-45-19t-19-45v-128q0-26 19-45t45-19h143q37-161\n 154.5-278.5t278.5-154.5v-143q0-26 19-45t45-19h128q26 0 45 19t19 45v143q161\n 37 278.5 154.5t154.5 278.5h143q26 0 45 19t19 45z" />',viewBox:{x:1792,y:1792}}),Eraser:Dp(fp,{iconContent:'<path transform="translate(0,1792) scale(1,-1)" fill="{{color}}" d="M960 1408l336-384h-768l-336 384h768zm1013-1077q15\n 34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38\n 0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38\n 0 69.5 20.5t47.5 54.5z" />',viewBox:{x:2048,y:1792}}),Magnify:Dp(fp,{iconContent:'<path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />',viewBox:{x:512,y:512}}),Pan:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1411 541l-355 355 355 355 144-144q29-31 70-14 39 17\n 39 59v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39 14-69l144-144-355-355-355\n 355 144 144q31 30 14 69-17 40-59 40h-448q-26 0-45-19t-19-45v-448q0-42 40-59\n 39-17 69 14l144 144 355-355-355-355-144 144q-19 19-45 19-12\n 0-24-5-40-17-40-59v-448q0-26 19-45t45-19h448q42 0 59 40 17 39-14 69l-144\n 144 355 355 355-355-144-144q-31-30-14-69 17-40 59-40h448q26 0 45 19t19\n 45v448q0 42-39 59-13 5-25 5-26 0-45-19z" />',viewBox:{x:1792,y:1792}}),Rotate:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1664 256v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39\n 14-69l138-138q-148-137-349-137-104 0-198.5 40.5t-163.5 109.5-109.5\n 163.5-40.5 198.5 40.5 198.5 109.5 163.5 163.5 109.5 198.5 40.5q119 0\n 225-52t179-147q7-10 23-12 15 0 25 9l137 138q9 8 9.5 20.5t-7.5 22.5q-109\n 132-264 204.5t-327 72.5q-156 0-298-61t-245-164-164-245-61-298 61-298\n 164-245 245-164 298-61q147 0 284.5 55.5t244.5 156.5l130-129q29-31 70-14\n 39 17 39 59z" />',viewBox:{x:1792,y:1792}}),StackScroll:Dp(fp,{iconContent:'<path fill="{{color}}" d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0\n 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547\n 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z" />',viewBox:{x:24,y:28}}),WindowLevelRegion:Dp(fp,{iconContent:'<path fill="{{color}}" d="M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119\n 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5\n 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),WindowLevel:Dp(fp,{iconContent:'\n <path fill="{{color}}" d="M14.5,3.5 a1 1 0 0 1 -11,11 Z" stroke="none" opacity="0.8" />\n <circle cx="9" cy="9" r="8" fill="none" stroke-width="2" stroke="{{color}}" />',viewBox:{x:18,y:18}}),Zoom:Dp(fp,{iconContent:'\n <path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />\n <path fill="{{color}}" transform="scale(0.22,0.22) translate(1400,0)" d="M1216\n 320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19\n 19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26\n 0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z" />',viewBox:{x:640,y:512}}),SegmentationFreeHandEraseInside:Dp(fp,{iconContent:`${Cp} ${Ip}`,viewBox:wp}),SegmentationFreeHandFillInside:Dp(fp,{iconContent:`${Cp} ${Ep}`,viewBox:wp}),SegmentationFreeHandEraseOutside:Dp(fp,{iconContent:`${Cp} ${Ip}`,viewBox:wp}),SegmentationFreeHandFillOutside:Dp(fp,{iconContent:`${Cp} ${Ep}`,viewBox:wp}),SegmentationRectangleEraseInside:Dp(fp,{iconContent:`${_p} ${Ip}`,viewBox:wp}),RectangleScissor:Dp(fp,{iconContent:`${_p} ${Ep}`,viewBox:wp}),"RectangleScissor.FILL_INSIDE":Dp(fp,{iconContent:`${_p} ${Ep}`,viewBox:wp}),"RectangleScissor.FILL_OUTSIDE":Dp(fp,{iconContent:`${_p} ${Ep}`,viewBox:wp}),"RectangleScissor.ERASE_OUTSIDE":Dp(fp,{iconContent:`${_p} ${Ip}`,viewBox:wp}),"RectangleScissor.ERASE_INSIDE":Dp(fp,{iconContent:`${_p} ${Ip}`,viewBox:wp}),CircleScissor:Dp(fp,{iconContent:`${bp} ${Ep}`,viewBox:wp}),"CircleScissor.FILL_INSIDE":Dp(fp,{iconContent:`${bp} ${Ep}`,viewBox:wp}),"CircleScissor.ERASE_OUTSIDE":Dp(fp,{iconContent:`${bp} ${Ip}`,viewBox:wp}),"CircleScissor.FILL_OUTSIDE":Dp(fp,{iconContent:`${bp} ${Ep}`,viewBox:wp})};function Dp(e,t){return Object.assign(Object.create(e),t)}function Sp(e,t,n){Tp[e]=Dp(fp,{iconContent:t,viewBox:n})}const yp=Object.keys(Tp),xp=Vr.Highlighted,Mp=Ye.Active;class Op extends pp{constructor(e,t,n,i,o){super(e,t,n,i,o)}static getDefinedCursor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;n||(n=Ur("color",{},xp,Mp));const i=function(e,t,n){return`${t?"pointer":"cursor"}:${e}/${n}`}(e,t,n);let o=super.getDefinedCursor(i);if(!o){const a=function(e){return Tp[e]}(e);a&&(o=function(e,t,n,i,o){const{x:a,y:r}=e.mousePoint;return new Op(function(e,t,n){return URL.createObjectURL(function(e,t,n){const i=(t?Rp:Ap)(e,n);return new Blob([i],{type:"image/svg+xml"})}(e,t,n))}(e,n,{color:i}),a,r,t,o)}(a,i,t,n,super.getDefinedCursor("default")),super.setDefinedCursor(i,o))}return o}}function Pp(e,t){const n=Object(t),i=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,((e,t)=>i(t)?n[t]+"":""))}function Ap(e,t){const{iconContent:n,iconSize:i,viewBox:o}=e;return Pp(`\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="${i}" height="${i}" viewBox="0 0\n ${o.x} ${o.y}">\n ${n}\n </svg>`,t)}function Rp(e,t){const{iconContent:n,iconSize:i,viewBox:o,mousePointerGroupString:a}=e,r=16+i;return Pp(`\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="${r}" height="${r}" viewBox="0 0 ${r} ${r}">\n <g>${a}</g>\n <g transform="translate(16, 16) scale(${i/Math.max(o.x,o.y,1)})">${n}</g>\n </svg>`,t)}const{Active:Lp,Passive:Np,Enabled:Up,Disabled:kp}=Ye,Vp=[{mouseButton:rc.Primary}];class Wp{constructor(e){ae(this,"id",void 0),ae(this,"viewportsInfo",[]),ae(this,"toolOptions",{}),ae(this,"currentActivePrimaryToolName",null),ae(this,"prevActivePrimaryToolName",null),ae(this,"restoreToolOptions",{}),ae(this,"_toolInstances",{}),this.id=e}getViewportIds(){return this.viewportsInfo.map((e=>{let{viewportId:t}=e;return t}))}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){const t=this._toolInstances[e];if(t)return t;console.warn(`'${e}' is not registered with this toolGroup (${this.id}).`)}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=je.tools[e],i=void 0!==e&&""!==e,o=this.toolOptions[e];if(!i)return void console.warn("Tool with configuration did not produce a toolName: ",t);if(!n)return void console.warn(`'${e}' is not registered with the library. You need to use cornerstoneTools.addTool to register it.`);if(o)return void console.warn(`'${e}' is already registered for ToolGroup ${this.id}.`);const{toolClass:a}=n,r=new a({name:e,toolGroupId:this.id,configuration:t});this._toolInstances[e]=r}addToolInstance(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=je.tools[e]?.toolClass;if(!i){const n=je.tools[t].toolClass;class o extends n{}o.toolName=e,i=o,je.tools[e]={toolClass:o}}this.addTool(i.toolName,n)}addViewport(e,t){if("string"!=typeof e)throw new Error("viewportId must be defined and be a string");const n=(0,ie.getRenderingEngines)();if(0===n?.length)throw new Error("No rendering engines found.");if(n.length>1)throw new Error("Multiple rendering engines found. You must specify a renderingEngineId.");const i=t||n[0].id;this.viewportsInfo.some((t=>{let{viewportId:n}=t;return n===e}))||this.viewportsInfo.push({viewportId:e,renderingEngineId:i});const o=this.getActivePrimaryMouseButtonTool();ie.Settings.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(o);const a={toolGroupId:this.id,viewportId:e,renderingEngineId:i};(0,ie.triggerEvent)(ie.eventTarget,se.TOOLGROUP_VIEWPORT_ADDED,a)}removeViewports(e,t){const n=[];if(this.viewportsInfo.forEach(((i,o)=>{let a=!1;i.renderingEngineId===e&&(a=!0,t&&i.viewportId!==t&&(a=!1)),a&&n.push(o)})),n.length)for(let e=n.length-1;e>=0;e--)this.viewportsInfo.splice(n[e],1);const i={toolGroupId:this.id,viewportId:t,renderingEngineId:e};(0,ie.triggerEvent)(ie.eventTarget,se.TOOLGROUP_VIEWPORT_REMOVED,i)}setActiveStrategy(e,t){const n=this._toolInstances[e];void 0!==n?n.setActiveStrategy(t):console.warn(`Tool ${e} not added to toolGroup, can't set tool configuration.`)}setToolMode(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e?t!==Ye.Active?t!==Ye.Passive?t!==Ye.Enabled?t!==Ye.Disabled?console.warn("setToolMode: mode must be defined"):this.setToolDisabled(e):this.setToolEnabled(e):this.setToolPassive(e):this.setToolActive(e,n||this.restoreToolOptions[e]):console.warn("setToolMode: toolName must be defined")}setToolActive(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);if(!n)return void console.warn(`'${e}' instance ${n} is not registered with this toolGroup, can't set tool mode.`);const i={bindings:[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce(((e,t)=>{const n=void 0!==t.numTouchPoints,i=void 0!==t.mouseButton;return e.some((e=>Bp(e,t)))||!n&&!i||e.push(t),e}),[]),mode:Lp};this.toolOptions[e]=i,this._toolInstances[e].mode=Lp;const o=ie.Settings.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(t)&&o)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&o){const e=ir.getDefinedCursor("default");this._setCursorForViewports(e)}this._hasMousePrimaryButtonBinding(t)&&(null===this.prevActivePrimaryToolName?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();const a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,ie.triggerEvent)(ie.eventTarget,se.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,Lp,t)}setToolPassive(e,t){const n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);const i=this.getToolOptions(e),o=Object.assign({bindings:i?i.bindings:[]},i,{mode:Np}),a=Array.isArray(t?.removeAllBindings)?t.removeAllBindings:this.getDefaultPrimaryBindings();o.bindings=o.bindings.filter((e=>!0!==t?.removeAllBindings&&!a.some((t=>Bp(e,t)))));let r=Np;0!==o.bindings.length&&(r=Lp,o.mode=r),this.toolOptions[e]=o,n.mode=r,"function"==typeof n.onSetToolPassive&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Np)}setToolEnabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);const n={bindings:[],mode:Up};this.toolOptions[e]=n,t.mode=Up,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Up)}setToolDisabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);const n={bindings:[],mode:kp};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,t.mode=kp,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,kp)}getToolOptions(e){const t=this.toolOptions[e];if(void 0!==t)return t}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find((e=>{const t=this.toolOptions[e];return t.mode===Lp&&this._hasMousePrimaryButtonBinding(t)}))}setViewportsCursorByToolName(e,t){const n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,i;return t&&(n=`${e}.${t}`,i=Op.getDefinedCursor(n,!0),i)?i:(n=`${e}`,i=Op.getDefinedCursor(n,!0),i||(n=e,i=Op.getDefinedCursor(n,!0),i||ir.getDefinedCursor("default")))}_setCursorForViewports(e){this.viewportsInfo.forEach((t=>{let{renderingEngineId:n,viewportId:i}=t;const o=(0,ie.getEnabledElementByIds)(i,n);if(!o)return;const{viewport:a}=o;sr(a.element,e)}))}setToolConfiguration(e,t,n){const i=this._toolInstances[e];if(void 0===i)return console.warn(`Tool ${e} not present, can't set tool configuration.`),!1;let o;return o=n?t:Object.assign(i.configuration,t),i.configuration=o,"function"==typeof i.onSetToolConfiguration&&i.onSetToolConfiguration(),this._renderViewports(),!0}getDefaultMousePrimary(){return rc.Primary}getDefaultPrimaryBindings(){return Vp}getToolConfiguration(e,t){if(void 0===this._toolInstances[e])return void console.warn(`Tool ${e} not present, can't set tool configuration.`);const n=vp()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return structuredClone(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}setActivePrimaryTool(e){const t=this.getCurrentActivePrimaryToolName();this.setToolDisabled(t),this.setToolActive(e,{bindings:[{mouseButton:rc.Primary}]})}getCurrentActivePrimaryToolName(){return this.currentActivePrimaryToolName}clone(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=ai(e);return n?(console.warn(`ToolGroup ${e} already exists`),n):(n=Hp(e),t=t??(()=>!0),Object.keys(this._toolInstances).filter(t).forEach((e=>{const t=this._toolInstances[e],i=this.toolOptions[e],o=t.mode;n.addTool(e),n.setToolMode(e,o,{bindings:i.bindings??[]})})),n)}_hasMousePrimaryButtonBinding(e){const t=this.getDefaultPrimaryBindings();return e?.bindings?.some((e=>t.some((t=>Bp(e,t)))))}_renderViewports(){this.viewportsInfo.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;(0,ie.getRenderingEngine)(t).renderViewport(n)}))}_triggerToolModeChangedEvent(e,t,n){const i={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,ie.triggerEvent)(ie.eventTarget,se.TOOL_MODE_CHANGED,i)}}function Bp(e,t){return e.mouseButton===t.mouseButton&&e.numTouchPoints===t.numTouchPoints&&e.modifierKey===t.modifierKey}const Hp=function(e){if(je.toolGroups.some((t=>t.id===e)))return void console.warn(`'${e}' already exists.`);const t=new Wp(e);return je.toolGroups.push(t),t},Fp=function(){return je.toolGroups};function Gp(e,t,n,i){const{camera:o}=i.detail,a=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const r=a.getViewport(n.viewportId);r.setCamera(o),r.render()}const{CAMERA_MODIFIED:$p}=ie.Enums.Events;function qp(e){return dp(e,$p,Gp)}function zp(e,t,n,i,o){const a=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const r=a.getViewport(n.viewportId),s=a.getViewport(t.viewportId).getViewPresentation(o);r.setViewPresentation(s),r.render()}const{CAMERA_MODIFIED:jp}=ie.Enums.Events;function Kp(e,t){return dp(e,jp,zp,{viewPresentation:t})}function Yp(e,t,n,i,o){const a=i.detail,{volumeId:r,range:s,invertStateChanged:l,invert:d,colormap:c}=a,h=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!h)throw new Error(`Rendering Engine does not exist: ${n.renderingEngineId}`);const u=h.getViewport(n.viewportId),g={voiRange:s};if(o?.syncInvertState&&l&&(g.invert=d),o?.syncColormap&&c&&(g.colormap=c),u instanceof ie.BaseVolumeViewport)u._actors&&u._actors.size>1?u.setProperties(g,r):u.setProperties(g);else{if(!(u instanceof ie.StackViewport))throw new Error("Viewport type not supported.");u.setProperties(g)}u.render()}function Xp(e,t){return t=Object.assign({syncInvertState:!0,syncColormap:!0},t),dp(e,ie.Enums.Events.VOI_MODIFIED,Yp,{auxiliaryEventNames:[ie.Enums.Events.COLORMAP_MODIFIED],...t})}function Jp(e,t,n){const i=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const o=e.getOptions(n.viewportId),a=i.getViewport(n.viewportId),r=i.getViewport(t.viewportId);if(!1!==o?.syncZoom){const e=r.getZoom();a.setZoom(e)}if(!1!==o?.syncPan){const e=r.getPan();a.setPan(e)}a.render()}const{CAMERA_MODIFIED:Zp}=ie.Enums.Events;function Qp(e){return dp(e,Zp,Jp)}const ef=(e,t)=>ie.utilities.spatialRegistrationMetadataProvider.get("spatialRegistrationModule",e,t);async function tf(e,t,n){const i=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const o=i.getViewport(t.viewportId),a=e.getOptions(n.viewportId);if(a?.disabled)return;const r=i.getViewport(n.viewportId),s=o.getCurrentImageId(),l=ie.metaData.get("imagePlaneModule",s).imagePositionPatient,d=r.getImageIds();if(!function(e,t){const{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:i}=t.getCamera(),o=Sn.vec3.dot(n,i);return Math.abs(o)>.9}(o,r))return;let c=ef(n.viewportId,t.viewportId);if(!c&&(o.getFrameOfReferenceUID()===r.getFrameOfReferenceUID()&&!1!==a?.useInitialPosition?c=Sn.mat4.identity(Sn.mat4.create()):(ie.utilities.calculateViewportsSpatialRegistration(o,r),c=ef(n.viewportId,t.viewportId)),!c))return;const h=Sn.vec3.transformMat4(Sn.vec3.create(),l,c),u=(g=h,d.reduce(((e,t,n)=>{const{imagePositionPatient:i}=ie.metaData.get("imagePlaneModule",t),o=Sn.vec3.distance(i,g);return o<e.distance?{distance:o,index:n}:e}),{distance:1/0,index:-1}));var g;let m=u.index;r instanceof ie.VolumeViewport&&(m=d.length-u.index-1),-1!==u.index&&r.getCurrentImageIdIndex()!==u.index&&await li(r.element,{imageIndex:m})}const{STACK_NEW_IMAGE:nf,VOLUME_NEW_IMAGE:of}=ie.Enums.Events;function af(e){return dp(e,nf,tf,{auxiliaryEventNames:[of]})}function rf(e,t,n){const i=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const o=i.getViewport(n.viewportId),a=i.getViewport(t.viewportId),r=a.getSlabThickness?.();r&&(o.setSlabThickness?.(r),o.render())}const{CAMERA_MODIFIED:sf}=ie.Enums.Events;function lf(e){return dp(e,sf,rf)}const df=af,cf=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),c=l||s,h=Ja(t,"ellipse",n),u=e.getSvgNode(h),[g,m,v,p]=i,f=Math.hypot(v[0]-p[0],v[1]-p[1]),w=Math.hypot(m[0]-g[0],m[1]-g[1]),I=180*Math.atan2(v[1]-p[1],v[0]-p[0])/Math.PI,E=[(v[0]+p[0])/2,(m[1]+g[1])/2],C={cx:`${E[0]}`,cy:`${E[1]}`,rx:""+f/2,ry:""+w/2,stroke:r,fill:"transparent",transform:`rotate(${I} ${E[0]} ${E[1]})`,"stroke-width":c,"stroke-dasharray":d};if(u)Za(C,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==a&&t.setAttribute("data-id",a),Qa(C,t),e.appendNode(t,h)}},hf=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const s=[(i[0]+o[0])/2,i[1]],l=[(i[0]+o[0])/2,o[1]],d=[i[0],(i[1]+o[1])/2],c=[o[0],(i[1]+o[1])/2];cf(e,t,n,[l,s,d,c],a={},r="")};function uf(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),c=o[0]+(i[0]-o[0])/2,h=[c,i[1]],u=[c,o[1]],g={start:i,end:h},m={start:h,end:u},v={start:u,end:o};jr(e,t,"1",g.start,g.end,{color:r,width:s,lineWidth:l}),jr(e,t,"2",m.start,m.end,{color:r,width:s,lineWidth:l}),jr(e,t,"3",v.start,v.end,{color:r,width:s,lineWidth:l})}function gf(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a);jr(e,t,n,i,o,{color:r,width:s,lineWidth:l,lineDash:d});const c=Math.atan2(o[1]-i[1],o[0]-i[0]),h={start:[o[0]-10*Math.cos(c-Math.PI/7),o[1]-10*Math.sin(c-Math.PI/7)],end:o},u={start:[o[0]-10*Math.cos(c+Math.PI/7),o[1]-10*Math.sin(c+Math.PI/7)],end:o};jr(e,t,"2",h.start,h.end,{color:r,width:s,lineWidth:l}),jr(e,t,"3",u.start,u.end,{color:r,width:s,lineWidth:l})}function mf(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),c=l||s,h=Ja(t,"rect",n),u=e.getSvgNode(h),g=[Math.min(i[0],o[0]),Math.min(i[1],o[1])],m=Math.abs(i[0]-o[0]),v=Math.abs(i[1]-o[1]),p={x:`${g[0]}`,y:`${g[1]}`,width:`${m}`,height:`${v}`,stroke:r,fill:"black","stroke-width":c,"stroke-dasharray":d};if(u)Za(p,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");Qa(p,t),e.appendNode(t,h)}}const vf=function(e,t){let n=Op.getDefinedCursor(t,!0);n||(n=ir.getDefinedCursor(t)),n||(console.log(`Cursor ${t} is not defined either as SVG or as a standard cursor.`),n=ir.getDefinedCursor(t)),lr(e,n)},pf=[...yp,...ar],ff=function(e,t,n){return`${Ur("textBoxFontSize",e,t,n)}px ${Ur("textBoxFontFamily",e,t,n)}`};class wf{constructor(){ae(this,"annotationUIDs",new Set),ae(this,"_isVisible",!0),ae(this,"visibleFilter",void 0),this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach((i=>{const o=pt(i);if(!o)return void this.annotationUIDs.delete(i);if(o.isVisible===e)return;if(!e&&!1===n?.(i))return;o.isVisible=e;const a={...t,annotation:o};(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_MODIFIED,a)})))}get isVisible(){return this._isVisible}findNearby(e,t){const n=[...this.annotationUIDs];if(0===n.length)return null;if(!e)return n[1===t?0:n.length-1];const i=n.indexOf(e);return-1===i||i+t<0||i+t>=n.length?null:n[i+t]}add(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.add(e)))}remove(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.delete(e)))}clear(){this.annotationUIDs.clear()}}const If=function(e,t,n){t&&t.forEach((t=>{!function(e,t,n){const i=Wu(t),{type:o}=i;if(o===Ct.Labelmap)bu.removeRepresentation(e,t,n);else{if(o!==Ct.Contour)throw new Error(`The representation ${o} is not supported yet`);eu.removeRepresentation(e,t,n)}}(e,t,n)}))},Ef=function(e){(function(e){if(!e||0===e.length)throw new Error("The segmentationInputArray is undefined or an empty array");e.forEach((e=>{if(void 0===e.segmentationId)throw new Error("Undefined segmentationInput.segmentationId. Please provide a valid segmentationId");if(void 0===e.representation)throw new Error("Undefined segmentationInput.representation. Please provide a valid representation");e.representation.type===Ct.Labelmap&&function(e){if(!e.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");$t(e.representation.data)}(e)}))})(e),e.map((e=>{ku(structuredClone(e))}))};class Cf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]})}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),o=n.world;if(0===o[0]&&0===o[1]&&0===o[2])return;const a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ae(Cf,"toolName",void 0),Cf.toolName="Pan";const _f=Cf;class bf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2}}),ae(this,"touchDragCallback",void 0),ae(this,"mouseDragCallback",void 0),ae(this,"cleanUp",void 0),ae(this,"_resizeObservers",new Map),ae(this,"_viewportAddedListener",void 0),ae(this,"_hasResolutionChanged",!1),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o}=i,a=o.getDefaultActor().actor.getMapper();if(!("getSampleDistance"in a)&&!("getCurrentSampleDistance"in a))return!0;const r=a.getSampleDistance();return this._hasResolutionChanged||(a.setSampleDistance(2*r),this._hasResolutionChanged=!0,null!==this.cleanUp&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{a.setSampleDistance(r),o.render(),this._hasResolutionChanged=!1},document.addEventListener("mouseup",this.cleanUp,{once:!0})),!0})),ae(this,"_getViewportsInfo",(()=>ai(this.toolGroupId).viewportsInfo)),ae(this,"onSetToolActive",(()=>{const e=()=>{this._getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;if(!this._resizeObservers.has(t)){const{viewport:e}=(0,ie.getEnabledElementByIds)(t,n)||{viewport:null};if(!e)return;const{element:i}=e,o=new ResizeObserver((()=>{const e=(0,ie.getEnabledElementByIds)(t,n);if(!e)return;const{viewport:i}=e;i.resetCamera(),i.render()}));o.observe(i),this._resizeObservers.set(t,o)}}))};e(),this._viewportAddedListener=t=>{t.detail.toolGroupId===this.toolGroupId&&e()},ie.eventTarget.addEventListener(se.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener)})),ae(this,"onSetToolDisabled",(()=>{this._resizeObservers.forEach(((e,t)=>{e.disconnect(),this._resizeObservers.delete(t)})),this._viewportAddedListener&&(ie.eventTarget.removeEventListener(se.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._viewportAddedListener=null)})),ae(this,"rotateCamera",((e,t,n,i)=>{const o=e.getVtkActiveCamera(),a=o.getViewUp(),r=o.getFocalPoint(),s=o.getPosition(),l=[0,0,0],d=[0,0,0],c=[0,0,0],h=Sn.mat4.identity(new Float32Array(16));Sn.mat4.translate(h,h,t),Sn.mat4.rotate(h,h,i,n),Sn.mat4.translate(h,h,[-t[0],-t[1],-t[2]]),Sn.vec3.transformMat4(l,s,h),Sn.vec3.transformMat4(d,r,h),Sn.mat4.identity(h),Sn.mat4.rotate(h,h,i,n),Sn.vec3.transformMat4(c,a,h),e.setCamera({position:l,viewUp:c,focalPoint:d})})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,lastPoints:i}=e.detail,o=n.canvas,a=i.canvas,{rotateIncrementDegrees:r}=this.configuration,s=(0,ie.getEnabledElement)(t),{viewport:l}=s,d=l.getCamera(),c=t.clientWidth,h=t.clientHeight,u=[o[0]/c,o[1]/h],g=[a[0]/c,a[1]/h],m=[.5*c,.5*h],v=l.canvasToWorld(m),p=(1+Math.abs(.5))**2,f=[g[0],0,0],w=[u[0],0,0],I=f[0]**2,E=w[0]**2,C=I>p?0:Math.sqrt(p-I),_=E>p?0:Math.sqrt(p-E),b=[f[0],0,C];Il().normalize(b);const T=[w[0],0,_];Il().normalize(T);const D=Il().dot(b,T);if(Math.abs(D)>1e-4){const e=-2*Math.acos(Il().clampValue(D,-1,1))*Math.sign(u[0]-g[0])*r,t=d.viewUp,n=d.viewPlaneNormal,i=[0,0,0],o=[0,0,0];Il().cross(t,n,i),Il().normalize(i),Il().cross(n,i,o),Il().normalize(o),Il().normalize(t),this.rotateCamera(l,v,o,e);const a=(g[1]-u[1])*r;this.rotateCamera(l,v,i,a),l.render()}}}ae(bf,"toolName",void 0),bf.toolName="TrackballRotate";const Tf=bf,{transformWorldToIndex:Df}=ie.utilities;class Sf extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:yf}}),ae(this,"editData",void 0),ae(this,"eventDispatchDetail",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a;this.isDrawing=!0;const s=r.getCamera(),{viewPlaneNormal:l,viewUp:d}=s,c=this.getReferencedImageId(r,o,l),h=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...d],FrameOfReferenceUID:h,referencedImageId:c},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}};gt(u,i);const g=Vo(i,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:g},this._activateModify(i),cr(i),e.preventDefault(),oi(g),u})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{viewportId:r,renderingEngine:s}=(0,ie.getEnabledElement)(n);this.eventDispatchDetail={viewportId:r,renderingEngineId:s.id},this._deactivateModify(n),dr(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,{annotation:a,viewportIdsToRender:r}=this.editData,{data:s}=a;s.handles.points[0]=[...o],a.invalidated=!0;const l=(0,ie.getEnabledElement)(i),{renderingEngine:d}=l;oi(r)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],c=d.annotationUID,h=d.data,u=h.handles.points[0],g=i.worldToCanvas(u);l.annotationUID=c;const{color:m}=this.getAnnotationStyle({annotation:d,styleSpecifier:l});if(h.cachedStats||(h.cachedStats={}),h.cachedStats[r]&&null!=h.cachedStats[r].value){if(d.invalidated&&(this._calculateCachedStats(d,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,index:null,value:null},this._calculateCachedStats(d,s,e);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;xr(t,c,"0",[g],{color:m}),n=!0;const v=this.getLinkedTextBoxStyle(l,d);if(!v.visibility)continue;const p=this.configuration.getTextLines(h,r);if(p){const e=[g[0]+6,g[1]-6];zr(t,c,"0",p,[e[0],e[1]],v)}}return n}))}isPointNearTool(){return!1}toolSelectedCallback(){}getHandleNearImagePoint(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,s=r.handles.points[0],l=a.worldToCanvas(s);if(!0==Sn.vec2.distance(n,l)<i)return s}handleSelectedCallback(e,t){const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},this._activateModify(i),cr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{renderingEngineId:o,viewport:a}=n,{element:r}=a,s=i.handles.points[0],{cachedStats:l}=i,d=Object.keys(l);for(let n=0;n<d.length;n++){const i=d[n],c={isPreScaled:ts(a,i),isSuvScaled:this.isSuvScaled(a,i,e.metadata.referencedImageId)},h=this.getTargetIdImage(i,t);if(!h)continue;const{dimensions:u,imageData:g,metadata:m,voxelManager:v}=h,p=m.Modality;let f=Df(g,s);if(f=Sn.vec3.round(f,f),ie.utilities.indexWithinDimensions(f,u)){this.isHandleOutsideImage=!1;let t,n=v.getAtIJKPoint(f);if(i.startsWith("imageId:")){const e=i.split("imageId:")[1],t=ie.utilities.imageIdToURI(e),n=ie.utilities.getViewportsWithImageURI(t,o)[0];f[2]=n.getCurrentImageIdIndex()}if("US"===p){const e=Nn(h,[f]),i=e.values.every((e=>null!==e));n=i?e.values:n,t=i?e.units:"raw"}else t=es(p,e.metadata.referencedImageId,c);l[i]={index:f,value:n,Modality:p,pixelValueUnits:t}}else this.isHandleOutsideImage=!0,l[i]={index:f,Modality:p};e.invalidated=!1,Qe(e,r)}return l}}function yf(e,t){const n=e.cachedStats[t],{index:i,value:o,pixelValueUnits:a}=n;if(void 0===o)return;const r=[];if(r.push(`(${i[0]}, ${i[1]}, ${i[2]})`),o instanceof Array&&a instanceof Array)for(let e=0;e<o.length;e++)r.push(`${tc(o[e])} ${a[e]}`);else r.push(`${tc(o)} ${a}`);return r}ae(Sf,"toolName",void 0),Sf.toolName="Probe";const xf=Sf;class Mf extends xf{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:Of}}),ae(this,"editData",void 0),ae(this,"eventDispatchDetail",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"postMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}},g=Vo(i,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:g},this._activateModify(i),cr(i),e.preventDefault(),oi(g),u})),ae(this,"postTouchStartCallback",(e=>this.postMouseDownCallback(e))),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;if(!this.editData)return n;const o=this.filterInteractableAnnotationsForElement(i.element,[this.editData.annotation]);if(!o?.length)return n;const a=this.getTargetId(i),r=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,d=l.annotationUID,c=l.data,h=c.handles.points[0],u=i.worldToCanvas(h);s.annotationUID=d;const{color:g}=this.getAnnotationStyle({annotation:l,styleSpecifier:s});if(c.cachedStats[a]&&null!=c.cachedStats[a].value?l.invalidated&&this._calculateCachedStats(l,r,e):(c.cachedStats[a]={Modality:null,index:null,value:null},this._calculateCachedStats(l,r,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;xr(t,d,"0",[u],{color:g}),n=!0;const m=this.configuration.getTextLines(c,a);if(m){const e=[u[0]+6,u[1]-6];zr(t,d,"0",m,[e[0],e[1]],this.getLinkedTextBoxStyle(s,l))}return n}))}}function Of(e,t){const n=e.cachedStats[t],{index:i,value:o,pixelValueUnits:a}=n;if(void 0===o)return;const r=[];return r.push(`(${i[0]}, ${i[1]}, ${i[2]})`),r.push(`${o.toFixed(2)} ${a}`),r}ae(Mf,"toolName",void 0),Mf.toolName="DragProbe";const Pf=Mf;class Af extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ae(this,"_getImageDynamicRangeFromMiddleSlice",((e,t)=>{const n=Math.floor(t[2]/2),i=t[0]*t[1];let o,a;e instanceof Float32Array?(o=4,a=Float32Array):e instanceof Uint8Array?(o=1,a=Uint8Array):e instanceof Uint16Array?(o=2,a=Uint16Array):e instanceof Int16Array&&(o=2,a=Int16Array);const r=new a(e.buffer,n*i*o,i),{max:s,min:l}=this._getMinMax(r,i);return s-l}))}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),{renderingEngine:o,viewport:a}=i;let r,s,l,d,c,h,u=!1;const g=a.getProperties();if(a instanceof ie.VolumeViewport){r=this.getTargetVolumeId(a),h=ie.utilities.getViewportsWithVolumeId(r,o.id),({lower:s,upper:l}=g.voiRange);const e=ie.cache.getVolume(r);if(!e)throw new Error("Volume not found "+r);d=e.metadata.Modality,u=e.scaling&&Object.keys(e.scaling).length>0}else{if(!g.voiRange)throw new Error("Viewport is not a valid type");{d=a.modality,({lower:s,upper:l}=g.voiRange);const{preScale:e={scaled:!1}}=a.getImageData?.()||{};u=e.scaled&&void 0!==e.scalingParameters?.suvbw}}c="PT"===d&&u?this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:l,clientHeight:t.clientHeight,isPreScaled:u,viewport:a,volumeId:r}):this.getNewRange({viewport:a,deltaPointsCanvas:n.canvas,volumeId:r,lower:s,upper:l}),c.lower>=c.upper||(a.setProperties({voiRange:c}),a.render(),a instanceof ie.VolumeViewport&&h.forEach((e=>{a!==e&&e.render()})))}getPTScaledNewRange(e){let{deltaPointsCanvas:t,lower:n,upper:i,clientHeight:o,viewport:a,volumeId:r,isPreScaled:s}=e,l=4;return l=s?5/o:this._getMultiplierFromDynamicRange(a,r)||4,i-=t[1]*l,i=s?Math.max(i,.1):i,{lower:n,upper:i}}getNewRange(e){let{viewport:t,deltaPointsCanvas:n,volumeId:i,lower:o,upper:a}=e;const r=this._getMultiplierFromDynamicRange(t,i)||4,s=n[0]*r,l=n[1]*r;let{windowWidth:d,windowCenter:c}=ie.utilities.windowLevel.toWindowLevel(o,a);return d+=s,c+=l,d=Math.max(d,1),ie.utilities.windowLevel.toLowHighRange(d,c)}_getMultiplierFromDynamicRange(e,t){let n;if(t){const i=ie.cache.getVolume(t),{voxelManager:o}=e.getImageData(),a=o.getMiddleSliceData().reduce(((e,t)=>[Math.min(e[0],t),Math.max(e[1],t)]),[1/0,-1/0]),r=i?.metadata?.BitsStored,s=r?2**r:1/0;n=Math.min(a,s)}else n=this._getImageDynamicRangeFromViewport(e);const i=n/1024;return i>1?Math.round(i):i}_getImageDynamicRangeFromViewport(e){const{imageData:t,voxelManager:n}=e.getImageData();if(n?.getRange){const e=n.getRange();return e[1]-e[0]}const i=t.getDimensions();if(t.getRange){const e=t.getRange();return e[1]-e[0]}let o,a;if(o=t.getScalarData?t.getScalarData():t.getPointData().getScalars().getData(),1!==i[2])return this._getImageDynamicRangeFromMiddleSlice(o,i);if(o.getRange)a=o.getRange();else{const{min:e,max:t}=this._getMinMax(o,o.length);a=[e,t]}return a[1]-a[0]}_getMinMax(e,t){let n=1/0,i=-1/0;for(let o=0;o<t;o++){const t=e[o];t<n&&(n=t),t>i&&(i=t)}return{max:i,min:n}}}ae(Af,"toolName",void 0),Af.toolName="WindowLevel";const Rf=Af;class Lf extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{minWindowWidth:10}}),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a;this.isDrawing=!0;const s=r.getCamera(),{viewPlaneNormal:l,viewUp:d}=s,c=this.getReferencedImageId(r,o,l,d),h=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...d],FrameOfReferenceUID:h,referencedImageId:c},data:{handles:{points:[[...o],[...o],[...o],[...o]]},cachedStats:{}}};gt(u,i);const g=Vo(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g},this._activateDraw(i),cr(i),e.preventDefault(),oi(g),u})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o}=this.editData;this._deactivateDraw(n),dr(n),this.editData=null,this.isDrawing=!1,vt(i.annotationUID),oi(o),et(i),this.applyWindowLevelRegion(i,n)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o}=this.editData,{data:a}=i,{currentPoints:r}=t,s=(0,ie.getEnabledElement)(n),{worldToCanvas:l,canvasToWorld:d}=s.viewport,c=r.world,{points:h}=a.handles;h[3]=[...c];const u=l(h[0]),g=l(h[3]),m=[g[0],u[1]],v=[u[0],g[1]],p=d(m),f=d(v);h[1]=p,h[2]=f,i.invalidated=!0,oi(o)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const o=a[e],{annotationUID:s,data:l}=o,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e)));r.annotationUID=s;const{color:h,lineWidth:u,lineDash:g}=this.getAnnotationStyle({annotation:o,styleSpecifier:r});if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;const m=`${s}-rect`;Or(t,s,"0",c[0],c[3],{color:h,lineDash:g,lineWidth:u},m),n=!0}return n})),ae(this,"applyWindowLevelRegion",((e,t)=>{const n=(0,ie.getEnabledElement)(t),{viewport:i}=n,o=ec(i),{data:a}=e,{points:r}=a.handles,s=r.map((e=>i.worldToCanvas(e))),l=s[0],d=s[3];let c=Math.min(l[0],d[0]),h=Math.min(l[1],d[1]),u=Math.abs(l[0]-d[0]),g=Math.abs(l[1]-d[1]);c=Gn(c,0,o.width),h=Gn(h,0,o.height),u=Math.floor(Math.min(u,Math.abs(o.width-c))),g=Math.floor(Math.min(g,Math.abs(o.height-h)));const m=Qd(Zd(o,Math.round(c),Math.round(h),u,g),o.minPixelValue,o.maxPixelValue);void 0===this.configuration.minWindowWidth&&(this.configuration.minWindowWidth=10);const v=Math.max(Math.abs(m.max-m.min),this.configuration.minWindowWidth),p=m.mean,f=ie.utilities.windowLevel.toLowHighRange(v,p);i.setProperties({voiRange:f}),i.render()})),ae(this,"cancel",(()=>null)),ae(this,"isPointNearTool",(()=>null)),ae(this,"toolSelectedCallback",(()=>null)),ae(this,"handleSelectedCallback",(()=>null)),ae(this,"_activateModify",(()=>null)),ae(this,"_deactivateModify",(()=>null))}}ae(Lf,"toolName",void 0),Lf.toolName="WindowLevelRegion";const Nf=Lf;class Uf extends Ia{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.001,maxZoomScale:3e3,pinchToZoom:!0,pan:!0,invert:!1}}),e=this,ae(this,"touchDragCallback",void 0),ae(this,"mouseDragCallback",void 0),ae(this,"initialMousePosWorld",void 0),ae(this,"dirVec",void 0),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=i.world,a=(0,ie.getEnabledElement)(n).viewport.getCamera(),{focalPoint:r}=a;this.initialMousePosWorld=o;let s=Sn.vec3.fromValues(r[0]-o[0],r[1]-o[1],r[2]-o[2]);return s=Sn.vec3.normalize(Sn.vec3.create(),s),this.dirVec=s,!1})),ae(this,"preTouchStartCallback",(e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)})),ae(this,"_dragParallelProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:d,focalPoint:c,position:h}=i,u=s*(5/l[1])*(e.configuration.invert?-1:1),g=(1-u)*d;let m=c,v=h;if(!e.configuration.zoomToCenter){const t=Sn.vec3.distance(c,e.initialMousePosWorld);v=Sn.vec3.scaleAndAdd(Sn.vec3.create(),h,e.dirVec,-t*u),m=Sn.vec3.scaleAndAdd(Sn.vec3.create(),c,e.dirVec,-t*u)}const p=n.getImageData();let f=[1,1,1];p&&(f=p.spacing);const{minZoomScale:w,maxZoomScale:I}=e.configuration,E=a.clientHeight*f[1]*.5,C=E/g;let _=g,b=!1;p&&(C<w?(_=E/w,b=!0):C>=I&&(_=E/I,b=!0)),n.setCamera({parallelScale:_,focalPoint:b?c:m,position:b?h:v})})),ae(this,"_dragPerspectiveProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{position:d,focalPoint:c,viewPlaneNormal:h}=i,u=Il().distance2BetweenPoints(d,c),g=Math.sqrt(u)/l[1],m=[-h[0],-h[1],-h[2]],v=e.configuration.invert?s/g:s*g;let p=v*m[0];d[0]+=p,c[0]+=p,p=v*m[1],d[1]+=p,c[1]+=p,p=v*m[2],d[2]+=p,c[2]+=p,n.setCamera({position:d,focalPoint:c})})),this.initialMousePosWorld=[0,0,0],this.dirVec=[0,0,0],this.configuration.pinchToZoom?this.touchDragCallback=this._pinchCallback.bind(this):this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){const{element:t,currentPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o}=i,a=o.getCamera(),r=n.world,{focalPoint:s}=a;this.initialMousePosWorld=r;let l=Sn.vec3.fromValues(s[0]-r[0],s[1]-r[1],s[2]-r[2]);l=Sn.vec3.normalize(Sn.vec3.create(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,o,a,!0):this._dragPerspectiveProjection(e,o,a,!0),o.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:t}=e.detail,n=(0,ie.getEnabledElement)(t),{viewport:i}=n,o=i.getCamera();o.parallelProjection?this._dragParallelProjection(e,i,o):this._dragPerspectiveProjection(e,i,o),i.render()}_panCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),o=n.world,a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ae(Uf,"toolName",void 0),Uf.toolName="Zoom";const kf=Uf;class Vf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}),ae(this,"deltaY",void 0),this.deltaY=1}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:o}=this.configuration,{viewport:a}=(0,ie.getEnabledElement)(n),r=i*(o?-1:1),s=this.getTargetVolumeId(a);si(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:s,scrollSlabs:this.configuration.scrollSlabs})}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{deltaPoints:t,viewportId:n,renderingEngineId:i}=e.detail,{viewport:o}=(0,ie.getEnabledElementByIds)(n,i),{debounceIfNotLoaded:a,invert:r,loop:s}=this.configuration,l=t.canvas[1];let d;o instanceof ie.VolumeViewport&&(d=this.getTargetVolumeId(o));const c=this._getPixelPerImage(o),h=l+this.deltaY;if(c)if(Math.abs(h)>=c){const e=Math.round(h/c);si(o,{delta:r?-e:e,volumeId:d,debounceLoading:a,loop:s}),this.deltaY=h%c}else this.deltaY=h}_getPixelPerImage(e){const{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}ae(Vf,"toolName",void 0),Vf.toolName="StackScroll";const Wf=Vf;function Bf(e,t){return 3===e[0].length?function(e,t){const[n,i]=e,[o,a]=t,r=Sn.vec3.sub(Sn.vec3.create(),i,n),s=Sn.vec3.sub(Sn.vec3.create(),o,a),l=Sn.vec3.dot(r,s)/(Sn.vec3.length(r)*Sn.vec3.length(s));return 180*Math.acos(l)/Math.PI}(e,t):function(e,t){const[n,i]=e,[o,a]=t,r=Sn.vec2.sub(Sn.vec2.create(),i,n),s=Sn.vec2.sub(Sn.vec2.create(),o,a),l=Sn.vec2.dot(r,s)/(Sn.vec2.length(r)*Sn.vec2.length(s));return Math.acos(l)*(180/Math.PI)}(e,t)}class Hf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ae(this,"touchDragCallback",void 0),ae(this,"mouseDragCallback",void 0),ae(this,"mouseWheelCallback",(e=>{const{element:t,wheel:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o}=i,{invert:a}=this.configuration,r=10*n.direction*(a?-1:1);this.setAngle(o,r)})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,startPoints:i}=e.detail,o=n.world,a=i.world,r=(0,ie.getEnabledElement)(t),{viewport:s}=r,l=s.getCamera(),d=[.5*t.clientWidth,.5*t.clientHeight],c=s.canvasToWorld(d);let h=Bf([a,c],[c,o]);const{viewPlaneNormal:u}=l,g=Sn.vec3.sub(Sn.vec3.create(),c,a),m=Sn.vec3.sub(Sn.vec3.create(),c,o),v=Sn.vec3.cross(Sn.vec3.create(),g,m);Sn.vec3.dot(u,v)>0&&(h=-h),Number.isNaN(h)||this.setAngle(s,h)}setAngle(e,t){const{viewPlaneNormal:n,viewUp:i}=e.getCamera();if(e instanceof ie.BaseVolumeViewport){const o=(t+360)%360*Math.PI/180,a=Sn.mat4.identity(new Float32Array(16));Sn.mat4.rotate(a,a,o,n);const r=Sn.vec3.transformMat4(Sn.vec3.create(),i,a);e.setCamera({viewUp:r})}else{const{rotation:n}=e.getViewPresentation();e.setViewPresentation({rotation:(n+t+360)%360})}e.render()}}ae(Hf,"toolName",void 0),Hf.toolName="PlanarRotate";const Ff=Hf;class Gf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1,scrollSlabs:!1}})}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:o}=this.configuration,{viewport:a}=(0,ie.getEnabledElement)(n),r=i*(o?-1:1),s=this.getTargetVolumeId(a);si(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:s,scrollSlabs:this.configuration.scrollSlabs})}}ae(Gf,"toolName",void 0),Gf.toolName="StackScrollMouseWheel";const $f=Gf,qf={X:[1,0,0],Y:[0,1,0],Z:[0,0,1],CUSTOM:[]};class zf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:qf.Z,rotateIncrementDegrees:30}})}mouseWheelCallback(e){const{element:t,wheel:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o}=i,{direction:a,rotateIncrementDegrees:r}=this.configuration,s=o.getCamera(),{viewUp:l,position:d,focalPoint:c}=s,{direction:h}=n,[u,g,m]=c,[v,p,f]=a,w=h*(r*Math.PI)/180,I=[0,0,0],E=[0,0,0],C=[0,0,0],_=Sn.mat4.identity(new Float32Array(16));Sn.mat4.translate(_,_,[u,g,m]),Sn.mat4.rotate(_,_,w,[v,p,f]),Sn.mat4.translate(_,_,[-u,-g,-m]),Sn.vec3.transformMat4(I,d,_),Sn.vec3.transformMat4(E,c,_),Sn.mat4.identity(_),Sn.mat4.rotate(_,_,w,[v,p,f]),Sn.vec3.transformMat4(C,l,_),o.setCamera({position:I,viewUp:C,focalPoint:E}),o.render()}}ae(zf,"toolName",void 0),zf.toolName="VolumeRotateMouseWheel";const jf=zf;class Kf extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}})}mouseClickCallback(e){const{element:t,currentPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,r=this.getTargetVolumeId(o);if(!r)throw new Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");let s=-1/0;const l=El(o,n.world,r,((e,t)=>{if(e>s)return s=e,t}));if(!l||!l.length)return;const{targetViewportIds:d,toolGroupId:c}=this.configuration;a.getViewports().filter((e=>{if(d?.indexOf(e.id)>=0)return!0;const t=Vn(e.id,a.id);return!(!c||c!==t?.id)})).forEach((e=>{e instanceof ie.VolumeViewport?wd(e,l):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")}))}}ae(Kf,"toolName",void 0),Kf.toolName="MIPJumpToClickTool";const Yf=Kf,{transformWorldToIndex:Xf}=ie.utilities;class Jf extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Zf}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;cr(i),this.isDrawing=!0;const{viewPlaneNormal:l,viewUp:d,position:c}=r.getCamera(),h=this.getReferencedImageId(r,o,l,d),u={highlighted:!0,invalidated:!0,metadata:{...r.getViewReference({points:[o]}),toolName:this.getToolName(),referencedImageId:h,viewUp:d,cameraPosition:c},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};gt(u,i);const g=Vo(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),oi(g),u})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return Xr([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),cr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0,oi(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p,shadow:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=u.map((e=>i.worldToCanvas(e)));if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={length:null,unit:null},this._calculateCachedStats(d,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let I;if(!Re(c))continue;ue(d)||this.editData||null===g||(I=[w[g]]),I&&xr(t,c,"0",w,{color:m,lineDash:p,lineWidth:v});const E=`${c}-line`;if(jr(t,c,"1",w[0],w[1],{color:m,width:v,lineDash:p,shadow:f},E),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;const C=this.getLinkedTextBoxStyle(l,d);if(!C.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const _=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=Zr(w);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const b=i.worldToCanvas(h.handles.textBox.worldPosition),T=Yr(t,c,"1",_,b,w,{},C),{x:D,y:S,width:y,height:x}=T;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([D,S]),topRight:i.canvasToWorld([D+y,S]),bottomLeft:i.canvasToWorld([D,S+x]),bottomRight:i.canvasToWorld([D+y,S+x])}}return n})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],r=i.handles.points[1],{cachedStats:s}=i,l=Object.keys(s);for(let e=0;e<l.length;e++){const n=l[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:d}=i,c=Xf(o,a),h=Xf(o,r),u=[c,h],{scale:g,lengthUnits:m}=Ln(i,u),v=this._calculateLength(a,r)/g;this._isInsideVolume(c,h,d)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,s[n]={length:v,lengthUnits:m}}return e.invalidated=!1,Qe(e,o),s}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function Zf(e,t){const n=e.cachedStats[t],{length:i,lengthUnits:o}=n;if(null!=i&&!isNaN(i))return[`${tc(i)} ${o}`]}ae(Jf,"toolName",void 0),Jf.toolName="Length";const Qf=Jf,{transformWorldToIndex:ew}=ie.utilities;class tw extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:nw}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"midX",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;cr(i),this.isDrawing=!0;const{viewPlaneNormal:l,viewUp:d,position:c}=r.getCamera(),h=this.getReferencedImageId(r,o,l,d),u={highlighted:!0,invalidated:!0,metadata:{...r.getViewReference({points:[o]}),toolName:this.getToolName(),referencedImageId:h,viewUp:d,cameraPosition:c},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};gt(u,i);const g=Vo(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),oi(g),u})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return Xr([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),cr(i),(0,ie.getEnabledElement)(i),oi(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,(0,ie.getEnabledElement)(e),oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p,shadow:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=u.map((e=>i.worldToCanvas(e)));let I;if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={length:null,unit:null},this._calculateCachedStats(d,s,e)),!Re(c))continue;if(ue(d)||this.editData||null===g||(I=[w[g]]),I&&xr(t,c,"0",w,{color:m,lineDash:p,lineWidth:v}),uf(t,c,"0",w[0],w[1],{color:m,width:v,lineDash:p}),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;const E=this.getLinkedTextBoxStyle(l,d);if(!E.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const C=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=Zr(w);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const _=i.worldToCanvas(h.handles.textBox.worldPosition),b=Yr(t,c,"1",C,_,w,{},E),{x:T,y:D,width:S,height:y}=b;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([T,D]),topRight:i.canvasToWorld([T+S,D]),bottomLeft:i.canvasToWorld([T,D+y]),bottomRight:i.canvasToWorld([T+S,D+y])}}return n})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()}_calculateHeight(e,t){const n=t[0]-e[0],i=t[1]-e[1],o=t[2]-e[2];return 0==n?0!=i?Math.abs(o):0:0==i?Math.abs(o):0==o?Math.abs(i):void 0}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],r=i.handles.points[1],{cachedStats:s}=i,l=Object.keys(s);for(let e=0;e<l.length;e++){const n=l[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:d}=i,c=ew(o,a),h=ew(o,r),u=[c,h],{scale:g,lengthUnits:m}=Ln(i,u),v=this._calculateHeight(a,r)/g,p=this._isInsideVolume(c,h,d);this.isHandleOutsideImage=p,s[n]={height:v,lengthUnits:m}}return e.invalidated=!1,Qe(e,o),s}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function nw(e,t){const n=e.cachedStats[t],{height:i,lengthUnits:o}=n;if(null!=i&&!isNaN(i))return[`${tc(i)} ${o}`]}ae(tw,"toolName",void 0),tw.toolName="Height";const iw=tw;var ow=E(847),aw=E.n(ow);const{RENDERING_DEFAULTS:rw}=ie.CONSTANTS;function sw(){return"rgb(0, 200, 0)"}function lw(){return!0}function dw(){return!0}function cw(){return!0}class hw extends Gr{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!1,viewportIndicatorsConfig:{radius:5,x:null,y:null},autoPan:{enabled:!1,panSize:10},referenceLinesCenterGapRadius:20,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:ie.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}),ae(this,"toolCenter",[0,0,0]),ae(this,"_getReferenceLineColor",void 0),ae(this,"_getReferenceLineControllable",void 0),ae(this,"_getReferenceLineDraggableRotatable",void 0),ae(this,"_getReferenceLineSlabThicknessControlsOn",void 0),ae(this,"editData",void 0),ae(this,"initializeViewport",(e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,ie.getEnabledElementByIds)(n,t),{FrameOfReferenceUID:o,viewport:a}=i,{element:r}=a,{position:s,focalPoint:l,viewPlaneNormal:d}=a.getCamera();let c=this._getAnnotations(i);return c=this.filterInteractableAnnotationsForElement(r,c),c.length&&vt(c[0].annotationUID),gt({highlighted:!1,metadata:{cameraPosition:[...s],cameraFocalPoint:[...l],FrameOfReferenceUID:o,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:n}},r),{normal:d,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}})),ae(this,"_getViewportsInfo",(()=>ai(this.toolGroupId).viewportsInfo)),ae(this,"resetCrosshairs",(()=>{const e=this._getViewportsInfo();for(const t of e){const{viewportId:e,renderingEngineId:n}=t,i=(0,ie.getEnabledElementByIds)(e,n),o=i.viewport,a=!0,r=!0,s=!0,l=!0,d=!0;o.resetCamera({resetPan:a,resetZoom:r,resetToCenter:s,resetRotation:l,suppressEvents:d}),o.resetSlabThickness();const{element:c}=o;let h=this._getAnnotations(i);h=this.filterInteractableAnnotationsForElement(c,h),h.length&&vt(h[0].annotationUID),o.render()}this.computeToolCenter(e)})),ae(this,"computeToolCenter",(e=>{if(!e.length||1===e.length)return void console.warn("For crosshairs to operate, at least two viewports must be given.");const[t,n,i]=e,{normal:o,point:a}=this.initializeViewport(t),{normal:r,point:s}=this.initializeViewport(n);let l=[0,0,0],d=Sn.vec3.create();i?({normal:l,point:d}=this.initializeViewport(i)):(Sn.vec3.add(d,a,s),Sn.vec3.scale(d,d,.5),Sn.vec3.cross(l,o,r));const c=ie.utilities.planar.planeEquation(o,a),h=ie.utilities.planar.planeEquation(r,s),u=ie.utilities.planar.planeEquation(l,d);this.toolCenter=ie.utilities.planar.threePlaneIntersection(c,h,u),oi(e.map((e=>{let{viewportId:t}=e;return t})))})),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.world,a=(0,ie.getEnabledElement)(n),{viewport:r}=a;this._jump(a,o);const s=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(r.element,s),{data:d}=l[0],{rotationPoints:c}=d.handles,h=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],n=this._getReferenceLineControllable(t.id),i=this._getReferenceLineDraggableRotatable(t.id);n&&i&&(h.push(t.id),e++)}return d.activeViewportIds=[...h],d.handles.activeOperation=1,e.preventDefault(),cr(n),this._activateModify(n),l[0]})),ae(this,"cancel",(()=>{console.log("Not implemented yet")})),ae(this,"handleSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0,this._activateModify(i),cr(i),e.preventDefault()})),ae(this,"isPointNearTool",((e,t,n,i)=>!!this._pointNearTool(e,t,n,6))),ae(this,"toolSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i;t.highlighted=!0,this._activateModify(o),cr(o),e.preventDefault()})),ae(this,"onCameraModified",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{renderingEngine:o}=i,a=i.viewport,r=this._getAnnotations(i),s=this.filterInteractableAnnotationsForElement(n,r)[0];if(!s)return;const l=a.getCamera(),d=s.metadata.cameraPosition,c=[0,0,0];Il().subtract(l.position,d,c);const h=s.metadata.cameraFocalPoint,u=[0,0,0];Il().subtract(l.focalPoint,h,u),s.metadata.cameraPosition=[...l.position],s.metadata.cameraFocalPoint=[...l.focalPoint];const g=this._getReferenceLineControllable(a.id),m=this._getReferenceLineDraggableRotatable(a.id);if(!ie.utilities.isEqual(l.position,d,.001)&&g&&m){let e=!1;ie.utilities.isEqual(c,u,.001)||(e=!0);const t=Math.abs(Il().dot(c,l.viewPlaneNormal))<.01;e||t||(this.toolCenter[0]+=c[0],this.toolCenter[1]+=c[1],this.toolCenter[2]+=c[2])}this.configuration.autoPan?.enabled&&Vn(a.id,o.id).getViewportIds().filter((e=>e!==a.id)).forEach((e=>{this._autoPanViewportIfNecessary(e,o)}));const v=Vo(n,this.getToolName(),!1);oi(v)})),ae(this,"onResetCamera",(e=>{this.resetCrosshairs()})),ae(this,"mouseMoveCallback",((e,t)=>{const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(let e=0;e<t.length;e++){const i=t[e];if(ue(i))continue;const{data:r,highlighted:s}=i;if(!r.handles)continue;const l=r.handles.activeOperation,d=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let c=!1;c=!!this.getHandleNearImagePoint(n,i,o,6)||this._pointNearTool(n,i,o,6),c&&!s||!c&&s?(i.highlighted=!s,a=!0):r.handles.activeOperation===l&&this._areViewportIdArraysEqual(r.activeViewportIds,d)||(a=!0)}return a})),ae(this,"filterInteractableAnnotationsForElement",((e,t)=>{if(!t||!t.length)return[];const n=(0,ie.getEnabledElement)(e),{viewportId:i}=n;return t.filter((e=>e.data.viewportId===i))})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i,renderingEngine:o}=e,{element:a}=i,r=this._getAnnotations(e),s=i.getCamera(),l=this.filterInteractableAnnotationsForElement(a,r)[0];if(!r?.length||!l?.data)return n;const d=l.annotationUID,{clientWidth:c,clientHeight:h}=i.canvas,u=Math.sqrt(c*c+h*h),g=Math.min(c,h),m=l.data,v=i.worldToCanvas(this.toolCenter),p=this._filterAnnotationsByUniqueViewportOrientations(e,r),f=[],w=[0,0,c,h];p.forEach((e=>{const{data:t}=e;t.handles.toolCenter=this.toolCenter;const n=o.getViewport(t.viewportId),a=n.getCamera(),r=this._getReferenceLineControllable(n.id),l=this._getReferenceLineDraggableRotatable(n.id),d=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:c,clientHeight:h}=n.canvas,m=Math.sqrt(c*c+h*h),I=[.5*c,.5*h],E=n.canvasToWorld(I),C=[0,0,0];Il().cross(s.viewPlaneNormal,a.viewPlaneNormal,C),Il().normalize(C),Il().multiplyScalar(C,m);const _=[0,0,0];Il().add(E,C,_);const b=[0,0,0];Il().subtract(E,C,b);const T=i.worldToCanvas(_),D=i.worldToCanvas(E),S=Sn.vec2.create();Sn.vec2.subtract(S,T,D),Sn.vec2.normalize(S,S);const y=Sn.vec2.create();Sn.vec2.scale(y,S,100*u);const x=Sn.vec2.create();Sn.vec2.scale(x,S,.4*g);const M=Sn.vec2.create();Sn.vec2.scale(M,S,.2*g);const O=Sn.vec2.create(),P=this.configuration.referenceLinesCenterGapRadius;Sn.vec2.scale(O,S,2===p.length?P:0);const A=Sn.vec2.create(),R=Sn.vec2.create(),L=Sn.vec2.create(),N=Sn.vec2.create();let U=Sn.vec2.clone(v);l&&r||(U=Sn.vec2.clone(D)),Sn.vec2.add(A,U,O),Sn.vec2.add(R,U,y),Sn.vec2.subtract(L,U,O),Sn.vec2.subtract(N,U,y),fl(A,R,w),fl(L,N,w);const k=Sn.vec2.create();Sn.vec2.subtract(k,v,x);const V=Sn.vec2.create();Sn.vec2.add(V,v,x);let W=Sn.vec2.clone(v);!l&&d&&(W=Sn.vec2.clone(D));let B=[...this.toolCenter];!l&&d&&(B=[...E]);const H=[0,0,0];Il().subtract(_,b,H),Il().normalize(H);const{viewPlaneNormal:F}=s,{matrix:G}=aw().buildFromDegree().rotate(90,F),$=[0,0,0];Sn.vec3.transformMat4($,H,G);const q=n.getSlabThickness(),z=[...$];Il().multiplyScalar(z,q);const j=[0,0,0];Il().add(B,z,j);const K=i.worldToCanvas(j),Y=Sn.vec2.create();Sn.vec2.subtract(Y,W,K);const X=Sn.vec2.create();Sn.vec2.subtract(X,W,y),Sn.vec2.add(X,X,Y);const J=Sn.vec2.create();Sn.vec2.add(J,W,y),Sn.vec2.add(J,J,Y),fl(X,J,w);const Z=Sn.vec2.create();Sn.vec2.add(Z,W,y),Sn.vec2.subtract(Z,Z,Y);const Q=Sn.vec2.create();Sn.vec2.subtract(Q,W,y),Sn.vec2.subtract(Q,Q,Y),fl(Z,Q,w);const ee=Sn.vec2.create(),te=Sn.vec2.create(),ne=Sn.vec2.create(),ie=Sn.vec2.create();Sn.vec2.subtract(ee,W,M),Sn.vec2.add(ee,ee,Y),Sn.vec2.add(te,W,M),Sn.vec2.add(te,te,Y),Sn.vec2.subtract(ne,W,M),Sn.vec2.subtract(ne,ne,Y),Sn.vec2.add(ie,W,M),Sn.vec2.subtract(ie,ie,Y),f.push([n,A,R,L,N,X,J,Z,Q,k,V,ee,te,ne,ie])}));const I=[],E=[],C=this._getReferenceLineColor(i.id),_=void 0!==C?C:"rgb(200, 200, 200)";if(f.forEach(((e,n)=>{const o=e[0],a=this._getReferenceLineColor(o.id),r=this._getReferenceLineControllable(o.id),s=this._getReferenceLineDraggableRotatable(o.id)||this.configuration.mobile?.enabled,l=this._getReferenceLineSlabThicknessControlsOn(o.id)||this.configuration.mobile?.enabled,c=m.activeViewportIds.find((e=>e===o.id));let h=void 0!==a?a:"rgb(200, 200, 200)",u=1;const g=null!==m.handles.activeOperation&&1===m.handles.activeOperation&&c;g&&(u=2.5);let v=`${n}`;if(r&&s?(v=`${n}One`,jr(t,d,v,e[1],e[2],{color:h,lineWidth:u}),v=`${n}Two`,jr(t,d,v,e[3],e[4],{color:h,lineWidth:u})):jr(t,d,v,e[2],e[4],{color:h,lineWidth:u}),r){h=void 0!==a?a:"rgb(200, 200, 200)";const r=2===m.handles.activeOperation,u=[e[9],e[10]],p=[i.canvasToWorld(e[9]),o,e[1],e[2]],f=[i.canvasToWorld(e[10]),o,e[3],e[4]];I.push(p,f);const w=3===m.handles.activeOperation,C=[e[11],e[12],e[13],e[14]],_=[i.canvasToWorld(e[11]),o,e[5],e[6]],b=[i.canvasToWorld(e[12]),o,e[5],e[6]],T=[i.canvasToWorld(e[13]),o,e[7],e[8]],D=[i.canvasToWorld(e[14]),o,e[7],e[8]];if(E.push(_,b,T,D),(g||this.configuration.mobile?.enabled)&&!r&&!w&&s&&l){let e=`${n}One`;xr(t,d,e,u,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"circle"}),e=`${n}Two`,xr(t,d,e,C,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"rect"})}else g&&!r&&!w&&s?xr(t,d,`${n}`,u,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"circle"}):c&&!r&&!w&&l?xr(t,d,`${n}`,C,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"rect"}):r&&s?xr(t,d,`${n}`,u,{color:h,handleRadius:2,fill:h,type:"circle"}):w&&c&&l&&xr(t,d,v,C,{color:h,handleRadius:2,fill:h,type:"rect"});o.getSlabThickness()>.5&&l&&(v=`${n}STOne`,jr(t,d,v,e[5],e[6],{color:h,width:1,lineDash:[2,3]}),v=`${n}STTwo`,jr(t,d,v,e[7],e[8],{color:h,width:e,lineDash:[2,3]}))}})),n=!0,m.handles.rotationPoints=I,m.handles.slabThicknessPoints=E,this.configuration.viewportIndicators){const{viewportIndicatorsConfig:e}=this.configuration;er(t,d,"0",[c*(e?.xOffset||.95),h*(e?.yOffset||.05)],e?.circleRadius||.01*u,{color:_,fill:_})}return n})),ae(this,"_getAnnotations",(e=>{const{viewport:t}=e,n=st(this.getToolName(),t.element)||[],i=this._getViewportsInfo().map((e=>{let{viewportId:t}=e;return t}));return n.filter((e=>{const{data:t}=e;return i.includes(t.viewportId)}))})),ae(this,"_onNewVolume",(()=>{const e=this._getViewportsInfo();this.computeToolCenter(e)})),ae(this,"_areViewportIdArraysEqual",((e,t)=>e.length===t.length&&(e.forEach((e=>{let n=!1;for(let i=0;i<t.length;++i)if(e===t[i]){n=!0;break}if(!1===n)return!1})),!0))),ae(this,"_getAnnotationsForViewportsWithDifferentCameras",((e,t)=>{const{viewportId:n,renderingEngine:i,viewport:o}=e,a=t.filter((e=>e.data.viewportId!==n));if(!a||!a.length)return[];const r=o.getCamera(),{viewPlaneNormal:s,position:l}=r,d=a.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera();return!(ie.utilities.isEqual(n.viewPlaneNormal,s,.01)&&ie.utilities.isEqual(n.position,l,1))}));return d})),ae(this,"_filterViewportWithSameOrientation",((e,t,n)=>{const{renderingEngine:i}=e,{data:o}=t,a=i.getViewport(o.viewportId),r=n.filter((e=>{const{data:t}=e,n=i.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)}));if(!r||!r.length)return[];const s=a.getCamera(),l=s.viewPlaneNormal;return Il().normalize(l),r.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera(),o=n.viewPlaneNormal;return Il().normalize(o),ie.utilities.isEqual(l,o,.01)&&ie.utilities.isEqual(s.viewUp,n.viewUp,.01)}))})),ae(this,"_filterAnnotationsByUniqueViewportOrientations",((e,t)=>{const{renderingEngine:n,viewport:i}=e,o=i.getCamera().viewPlaneNormal;Il().normalize(o);const a=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0===a})),r=[];for(let e=0;e<a.length;++e){const t=a[e],{viewportId:i}=t.data,s=n.getViewport(i).getCamera(),l=s.viewPlaneNormal;if(Il().normalize(l),ie.utilities.isEqual(o,l,.01)||ie.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();ie.utilities.isEqual(o.viewPlaneNormal,s.viewPlaneNormal,.01)&&ie.utilities.isEqual(o.position,s.position,1)&&(d=!0)}d||r.push(t)}const s=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0!==a}));for(let e=0;e<s.length;++e){const t=s[e],{viewportId:i}=t.data,a=n.getViewport(i).getCamera(),l=a.viewPlaneNormal;if(Il().normalize(l),ie.utilities.isEqual(o,l,.01)||ie.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();ie.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&ie.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||r.push(t)}const l=this._getAnnotationsForViewportsWithDifferentCameras(e,t);for(let e=0;e<l.length;++e){const t=l[e];if(r.some((e=>e===t)))continue;const{viewportId:i}=t.data,a=n.getViewport(i).getCamera(),s=a.viewPlaneNormal;if(Il().normalize(s),ie.utilities.isEqual(o,s,.01)||ie.utilities.isOpposite(o,s,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();ie.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&ie.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||r.push(t)}return r})),ae(this,"_checkIfViewportsRenderingSameScene",((e,t)=>{const n=e.getActors(),i=t.getActors();let o=!0;return n.forEach((e=>{n.length===i.length&&void 0!==i.find((t=>{let{uid:n}=t;return n===e.uid}))||(o=!1)})),o})),ae(this,"_jump",((e,t)=>{je.isInteractingWithTool=!0;const{viewport:n,renderingEngine:i}=e,o=this._getAnnotations(e),a=[0,0,0];Il().subtract(t,this.toolCenter,a);const r=this._getAnnotationsForViewportsWithDifferentCameras(e,o).filter((e=>{const{data:t}=e,o=i.getViewport(t.viewportId),a=this._checkIfViewportsRenderingSameScene(n,o);return this._getReferenceLineControllable(o.id)&&this._getReferenceLineDraggableRotatable(o.id)&&a}));return 0===r.length?(je.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(i,r,a),je.isInteractingWithTool=!1,!0)})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!this.configuration.mobile?.enabled,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(n),dr(n),this.editData=null;const i=Vo(n,this.getToolName(),!1);oi(i)})),ae(this,"_dragCallback",(e=>{const t=e.detail,n=t.deltaPoints.world;if(Math.abs(n[0])<.001&&Math.abs(n[1])<.001&&Math.abs(n[2])<.001)return;const{element:i}=t,o=(0,ie.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,s=this._getAnnotations(o),l=this.filterInteractableAnnotationsForElement(i,s)[0];if(!l)return;const{handles:d}=l.data,{currentPoints:c}=e.detail,h=c.canvas;if(1===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));this._applyDeltaShiftToSelectedViewportCameras(a,e,n)}else if(2===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o})),n=Sn.vec2.create(),i=Sn.vec2.create(),l=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],d=r.worldToCanvas(l),c=t.currentPoints.canvas,h=Sn.vec2.create();Sn.vec2.sub(h,c,t.deltaPoints.canvas),Sn.vec2.sub(n,h,d),Sn.vec2.sub(i,c,d);let u=Sn.vec2.angle(n,i);this._isClockWise(d,h,c)&&(u*=-1),u=Math.round(100*u)/100;const g=r.getCamera().viewPlaneNormal,{matrix:m}=aw().buildFromRadian().translate(l[0],l[1],l[2]).rotate(u,g).translate(-l[0],-l[1],-l[2]),v=[];e.forEach((e=>{const{data:t}=e;t.handles.toolCenter=l;const n=a.getViewport(t.viewportId),i=n.getCamera(),{viewUp:o,position:r,focalPoint:s}=i;o[0]+=r[0],o[1]+=r[1],o[2]+=r[2],Sn.vec3.transformMat4(s,s,m),Sn.vec3.transformMat4(r,r,m),Sn.vec3.transformMat4(o,o,m),o[0]-=r[0],o[1]-=r[1],o[2]-=r[2],n.setCamera({position:r,viewUp:o,focalPoint:s}),v.push(n.id)})),a.renderViewports(v)}else if(3===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));if(0===e.length)return;const i=this._filterViewportWithSameOrientation(o,e[0],s),d=[];d.push(r.id),i.forEach((e=>{const{data:i}=e,o=a.getViewport(i.viewportId),s=o.getCamera().viewPlaneNormal,c=Il().dot(n,s),u=[...s];if(Il().multiplyScalar(u,c),Math.abs(u[0])>.001||Math.abs(u[1])>.001||Math.abs(u[2])>.001){const e=Math.sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]),n=t.lastPoints.world,i=[0,0,0],c=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(o.id)){const{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter((e=>e[1].uid===o.id));if(2===t.length){const e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);Il().add(e,n,c),Il().multiplyScalar(c,.5)}}Il().subtract(n,c,i);const g=Il().dot(i,s),m=[...s];Il().multiplyScalar(m,g);const v=[m[0],m[1],m[2]];Sn.vec3.normalize(v,v);const p=[u[0],u[1],u[2]];Sn.vec3.normalize(p,p);let f=o.getSlabThickness();ie.utilities.isOpposite(v,p,.001)?f-=e:f+=e,f=Math.abs(f),f=Math.max(rw.MINIMUM_SLAB_THICKNESS,f),this._pointNearReferenceLine(l,h,6,o)&&(f=rw.MINIMUM_SLAB_THICKNESS),Vn(o.id,a.id).getToolInstance(this.getToolName()).setSlabThickness(o,f),d.push(o.id)}})),a.renderViewports(d)}})),ae(this,"_pointNearReferenceLine",((e,t,n,i)=>{const{data:o}=e,{rotationPoints:a}=o.handles;for(let e=0;e<a.length-1;++e){const o=a[e][1];if(o.id!==i.id)continue;if(!this._getReferenceLineControllable(o.id))continue;const r={start:{x:a[e][2][0],y:a[e][2][1]},end:{x:a[e][3][0],y:a[e][3][1]}},s=Xr([r.start.x,r.start.y],[r.end.x,r.end.y],[t[0],t[1]]),l={start:{x:a[e+1][2][0],y:a[e+1][2][1]},end:{x:a[e+1][3][0],y:a[e+1][3][1]}},d=Xr([l.start.x,l.start.y],[l.end.x,l.end.y],[t[0],t[1]]);if(s<=n||d<=n)return!0;e++}return!1})),this._getReferenceLineColor=e.configuration?.getReferenceLineColor||sw,this._getReferenceLineControllable=e.configuration?.getReferenceLineControllable||lw,this._getReferenceLineDraggableRotatable=e.configuration?.getReferenceLineDraggableRotatable||dw,this._getReferenceLineSlabThicknessControlsOn=e.configuration?.getReferenceLineSlabThicknessControlsOn||cw}onSetToolActive(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this.computeToolCenter(e)}onSetToolPassive(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolEnabled(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolDisabled(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),e.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,ie.getEnabledElementByIds)(n,t);if(!i)return;const o=this._getAnnotations(i);o?.length&&o.forEach((e=>{vt(e.annotationUID)}))}))}getHandleNearImagePoint(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o;let r=this._getRotationHandleNearImagePoint(a,t,n,i);return null!==r?r:(r=this._getSlabThicknessHandleNearImagePoint(a,t,n,i),null!==r?r:void 0)}_unsubscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;o.removeEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_subscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;o.addEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_autoPanViewportIfNecessary(e,t){const n=t.getViewport(e),{clientWidth:i,clientHeight:o}=n.canvas,a=n.worldToCanvas(this.toolCenter),r=this.configuration.autoPan.panSize,s=[a[0],a[1]];if(a[0]<0?s[0]=r:a[0]>i&&(s[0]=i-r),a[1]<0?s[1]=r:a[1]>o&&(s[1]=o-r),s[0]===a[0]&&s[1]===a[1])return;const l=n.canvasToWorld(s),d=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],c=n.getCamera(),{focalPoint:h,position:u}=c,g=[u[0]-d[0],u[1]-d[1],u[2]-d[2]],m=[h[0]-d[0],h[1]-d[1],h[2]-d[2]];n.setCamera({focalPoint:m,position:g}),n.render()}setSlabThickness(e,t){let n;const{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let o=this.configuration.slabThicknessBlendMode;t===rw.MINIMUM_SLAB_THICKNESS&&(o=ie.Enums.BlendModes.COMPOSITE),e.setBlendMode(o,n,!1),e.setSlabThickness(t,n)}_isClockWise(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,t,n){t.forEach((t=>{this._applyDeltaShiftToViewportCamera(e,t,n)}))}_applyDeltaShiftToViewportCamera(e,t,n){const{data:i}=t,o=e.getViewport(i.viewportId),a=o.getCamera(),r=a.viewPlaneNormal,s=Il().dot(n,r),l=[...r];if(Il().multiplyScalar(l,s),Math.abs(l[0])>.001||Math.abs(l[1])>.001||Math.abs(l[2])>.001){const e=[0,0,0],t=[0,0,0];Il().add(a.focalPoint,l,e),Il().add(a.position,l,t),o.setCamera({focalPoint:e,position:t}),o.render()}}_getRotationHandleNearImagePoint(e,t,n,i){const{data:o}=t,{rotationPoints:a}=o.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineDraggableRotatable(l.id))continue;const d=e.worldToCanvas(s);if(Sn.vec2.distance(n,d)<i)return o.handles.activeOperation=2,this.editData={annotation:t},s}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,i){const{data:o}=t,{slabThicknessPoints:a}=o.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineSlabThicknessControlsOn(l.id))continue;const d=e.worldToCanvas(s);if(Sn.vec2.distance(n,d)<i)return o.handles.activeOperation=3,o.activeViewportIds=[l.id],this.editData={annotation:t},s}return null}_pointNearTool(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{clientWidth:r,clientHeight:s}=a.canvas,l=Math.sqrt(r*r+s*s),{data:d}=t,{rotationPoints:c}=d.handles,{slabThicknessPoints:h}=d.handles,u=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineDraggableRotatable(t.id);if(!o||!a)continue;const r={start:{x:c[e][2][0],y:c[e][2][1]},end:{x:c[e][3][0],y:c[e][3][1]}},s=Xr([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),l={start:{x:c[e+1][2][0],y:c[e+1][2][1]},end:{x:c[e+1][3][0],y:c[e+1][3][1]}},h=Xr([l.start.x,l.start.y],[l.end.x,l.end.y],[n[0],n[1]]);(s<=i||h<=i)&&(u.push(t.id),d.handles.activeOperation=1),e++}for(let e=0;e<h.length-1;++e){const t=h[e][1];if(u.find((e=>e===t.id)))continue;const o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!o||!a)continue;const r=h[e][2],s=h[e][3],c=Sn.vec2.create();Sn.vec2.add(c,r,s),Sn.vec2.scale(c,c,.5);const g=Sn.vec2.create();Sn.vec2.subtract(g,r,c),Sn.vec2.normalize(g,g);const m=Sn.vec2.create();Sn.vec2.scale(m,g,.05*l);const v=Sn.vec2.create(),p=Sn.vec2.create();Sn.vec2.add(v,c,m),Sn.vec2.subtract(p,c,m);const f={start:{x:v[0],y:v[1]},end:{x:r[0],y:r[1]}},w=Xr([f.start.x,f.start.y],[f.end.x,f.end.y],[n[0],n[1]]),I={start:{x:p[0],y:p[1]},end:{x:s[0],y:s[1]}},E=Xr([I.start.x,I.start.y],[I.end.x,I.end.y],[n[0],n[1]]);(w<=i||E<=i)&&(u.push(t.id),d.handles.activeOperation=null),e++}return d.activeViewportIds=[...u],this.editData={annotation:t},1===d.handles.activeOperation}}ae(hw,"toolName",void 0),hw.toolName="Crosshairs";const uw=hw,{EPSILON:gw}=ie.CONSTANTS;class mw extends Hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",showFullDimension:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",null),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"_init",(()=>{const e=(0,ie.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=No(t,this.getToolName());const n=e.getViewport(this.configuration.sourceViewportId);if(!n?.getImageData())return;const{element:i}=n,{viewUp:o,viewPlaneNormal:a}=n.getCamera(),r=ie.utilities.getViewportImageCornersInWorld(n);let s=this.editData.annotation;const l=n.getFrameOfReferenceUID();if(s)this.editData.annotation.data.handles.points=r;else{const e={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...a],viewUp:[...o],FrameOfReferenceUID:l,referencedImageId:null},data:{handles:{points:r}}};gt(e,i),s=e}this.editData={sourceViewportId:n.id,renderingEngine:e,annotation:s},oi(t.filter((e=>e.id!==n.id)).map((e=>e.id)))})),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onSetToolConfiguration",(()=>{this._init()})),ae(this,"onCameraModified",(e=>{this._init()})),ae(this,"renderAnnotation",((e,t)=>{const{viewport:n}=e,{annotation:i,sourceViewportId:o}=this.editData;let a=!1;const{viewport:r}=(0,ie.getEnabledElementByViewportId)(o)||{};if(!r)return a;if(r.id===n.id)return a;if(!i||!i?.data?.handles?.points)return a;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=i.data.handles.points[0],d=i.data.handles.points[1],c=i.data.handles.points[2],h=i.data.handles.points[3],{focalPoint:u,viewPlaneNormal:g,viewUp:m}=n.getCamera(),{viewPlaneNormal:v}=r.getCamera();if(this.isParallel(g,v))return a;const p=ie.utilities.planar.planeEquation(g,u),f=[l,c,d,h],w=[l,d,c,h];let I=f,E=Sn.vec3.subtract(Sn.vec3.create(),f[0],f[1]);E=Sn.vec3.normalize(Sn.vec3.create(),E);let C=Sn.vec3.subtract(Sn.vec3.create(),f[2],f[0]);C=Sn.vec3.normalize(Sn.vec3.create(),C);const _=Sn.vec3.cross(Sn.vec3.create(),E,C);if(this.isParallel(_,g))return a;this.isPerpendicular(E,g)&&(I=w);const b=ie.utilities.planar.linePlaneIntersection(I[0],I[1],p),T=ie.utilities.planar.linePlaneIntersection(I[2],I[3],p),{annotationUID:D}=i;s.annotationUID=D;const S=this.getStyle("lineWidth",s,i),y=this.getStyle("lineDash",s,i),x=this.getStyle("color",s,i),M=this.getStyle("shadow",s,i);let O=[b,T].map((e=>n.worldToCanvas(e)));if(this.configuration.showFullDimension&&(O=this.handleFullDimension(n,b,g,m,T,O)),O.length<2)return a;const P=`${D}-line`;return jr(t,D,"1",O[0],O[1],{color:x,width:S,lineDash:y,shadow:M},P),a=!0,a})),ae(this,"isPerpendicular",((e,t)=>{const n=Sn.vec3.dot(e,t);return Math.abs(n)<gw}))}handleFullDimension(e,t,n,i,o,a){const r=e.getRenderingEngine(),s=this.getTargetId(e),l=this.getTargetIdImage(s,r),d=this.getReferencedImageId(e,t,n,i);if(d&&l)try{const{imageData:n,dimensions:i}=l,[r,s,c,h]=[n.indexToWorld([0,0,0]),n.indexToWorld([i[0]-1,0,0]),n.indexToWorld([i[0]-1,i[1]-1,0]),n.indexToWorld([0,i[1]-1,0])].map((e=>ie.utilities.worldToImageCoords(d,e))),[u,g]=[t,o].map((e=>ie.utilities.worldToImageCoords(d,e)));a=[[r,s],[s,c],[h,c],[r,h]].map((e=>{let[t,n]=e;return this.intersectInfiniteLines(t,n,u,g)})).filter((e=>e&&this.isInBound(e,i))).map((t=>{const n=ie.utilities.imageToWorldCoords(d,t);return e.worldToCanvas(n)}))}catch(e){console.log(e)}return a}intersectInfiniteLines(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,u=s-a,g=o-r,m=r*a-o*s,v=h-d,p=l-c,f=c*d-l*h;if(!(Math.abs(u*p-v*g)<gw))return[(g*f-p*m)/(u*p-v*g),(v*m-u*f)/(u*p-v*g)]}isParallel(e,t){return Math.abs(Sn.vec3.dot(e,t))>1-gw}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}ae(mw,"toolName",void 0),mw.toolName="ReferenceLines";const vw=mw,{EPSILON:pw}=ie.CONSTANTS;class fw extends Hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onSetToolActive",(()=>{this._init()})),ae(this,"_init",(()=>{const e=this.configuration.sourceImageIds;if(!e?.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");const t=ie.metaData.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");const{frameOfReferenceUID:n}=t,i=ai(this.toolGroupId).viewportsInfo;if(!i?.length)return void console.warn("OverlayGridTool: No viewports found");const o=st(this.getToolName(),n);if(!o?.length){const t=e.map((e=>this.calculateImageIdPointSets(e)));gt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}oi(i.map((e=>{let{viewportId:t}=e;return t})))})),ae(this,"calculateImageIdPointSets",(e=>{const{imagePositionPatient:t,rows:n,columns:i,rowCosines:o,columnCosines:a,rowPixelSpacing:r,columnPixelSpacing:s}=ie.metaData.get("imagePlaneModule",e),l=[...t],d=[...t],c=[...t],h=[...t];return Sn.vec3.scaleAndAdd(d,t,a,i*s),Sn.vec3.scaleAndAdd(c,t,o,n*r),Sn.vec3.scaleAndAdd(h,c,a,i*s),{pointSet1:[l,c,d,h],pointSet2:[l,d,c,h]}})),ae(this,"renderAnnotation",((e,t)=>{const n=this.configuration.sourceImageIds;let i=!1;if(!n?.length)return i;const{viewport:o,FrameOfReferenceUID:a}=e;if(o.getImageIds().length<2)return i;const r=st(this.getToolName(),a);if(!r?.length)return i;const s=r[0],{annotationUID:l}=s,{focalPoint:d,viewPlaneNormal:c}=o.getCamera(),h={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},u=this.getImageIdNormal(n[0]);if(this.isParallel(c,u))return i;const g=ie.utilities.planar.planeEquation(c,d),m=s.data.pointSets,v=s.data.viewportData;for(let e=0;e<n.length;e++){const{pointSet1:n,pointSet2:i}=m[e],a=v.get(o.id)||this.initializeViewportData(v,o.id);if(!a.pointSetsToUse[e]){let t=n,o=Sn.vec3.subtract(Sn.vec3.create(),n[0],n[1]);o=Sn.vec3.normalize(Sn.vec3.create(),o),this.isPerpendicular(o,c)&&(t=i),a.pointSetsToUse[e]=t,a.lineStartsWorld[e]=ie.utilities.planar.linePlaneIntersection(t[0],t[1],g),a.lineEndsWorld[e]=ie.utilities.planar.linePlaneIntersection(t[2],t[3],g)}const r=a.lineStartsWorld[e],d=a.lineEndsWorld[e];h.annotationUID=l;const u=this.getStyle("lineWidth",h,s),p=this.getStyle("lineDash",h,s),f=this.getStyle("color",h,s),w=this.getStyle("shadow",h,s),I=[r,d].map((e=>o.worldToCanvas(e))),E=`${l}-line`;jr(t,l,`${e}`,I[0],I[1],{color:f,width:u,lineDash:p,shadow:w},E)}return i=!0,i})),ae(this,"initializeViewportData",((e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)))),ae(this,"isPerpendicular",((e,t)=>{const n=Sn.vec3.dot(e,t);return Math.abs(n)<pw}))}isParallel(e,t){return Math.abs(Sn.vec3.dot(e,t))>1-pw}getImageIdNormal(e){const{imageOrientationPatient:t}=ie.metaData.get("imagePlaneModule",e),n=Sn.vec3.fromValues(t[0],t[1],t[2]),i=Sn.vec3.fromValues(t[3],t[4],t[5]);return Sn.vec3.cross(Sn.vec3.create(),n,i)}}ae(fw,"toolName",void 0),fw.toolName="OverlayGrid";const ww=fw;class Iw extends Hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{opacity:.5}}),ae(this,"_init",(()=>{const e=ai(this.toolGroupId).viewportsInfo;if(!e?.length)return void console.warn(this.getToolName()+"Tool: No viewports found");const t=(0,ie.getRenderingEngine)(e[0].renderingEngineId)?.getViewport(e[0].viewportId);if(!t)return;const n=t.getFrameOfReferenceUID(),i=st(this.getToolName(),n);if(!i?.length){const t=new Map;!function(e,t){t.forEach((t=>{let{viewportId:n,renderingEngineId:i}=t;const o=(0,ie.getRenderingEngine)(i)?.getViewport(n);Ew(e,o)}))}(t,e),gt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{actorsWorldPointsMap:t}},n)}oi(e.map((e=>{let{viewportId:t}=e;return t})))})),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onCameraModified",(e=>{this._init()})),ae(this,"renderAnnotation",((e,t)=>{const{viewport:n,FrameOfReferenceUID:i}=e;let o=!1;const a=st(this.getToolName(),i);if(!a?.length)return o;const r=a[0],{annotationUID:s}=r,l=r.data.actorsWorldPointsMap;Ew(l,n);const d=n.getActors(),c=Cw(n);return d.forEach((e=>{if(!e?.clippingFilter)return;const i=l.get(e.uid);if(!i)return;if(!i.get(c))return;let o=1;const{worldPointsSet:a,color:r}=i.get(c);for(let i=0;i<a.length;i++){const l=a[i].map((e=>n.worldToCanvas(e))),d={color:r,fillColor:r,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2},c=e.uid+"#"+o;ch(t,s,c,l,d),o++}})),o=!0,o}))}}function Ew(e,t){const n=t.getActors(),i=Cw(t);n.forEach((t=>{if(!t?.clippingFilter)return;let n=e.get(t.uid);if(n||(n=new Map,e.set(t.uid,n)),!n.get(i)){const e=Ud(t.clippingFilter.getOutputData());if(!e)return;const o=function(e){function t(e){let t=Math.floor(255*e).toString(16);return 1===t.length&&(t="0"+t),t}return"#"+t(e[0])+t(e[1])+t(e[2])}(t.actor.getProperty().getColor());n.set(i,{worldPointsSet:e,color:o})}}))}function Cw(e){const{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return`${e.id}-${Ut(t)}-${n}`}ae(Iw,"toolName",void 0),Iw.toolName="SegmentationIntersection";const _w=Iw;function bw(e,t,n,i){const o=Sn.vec3.create();Sn.vec3.cross(o,t,e);const a=Sn.vec3.fromValues(...n),r=Sn.vec3.fromValues(...i),s=Sn.vec3.create();Sn.vec3.subtract(s,a,r);const l=Sn.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=Sn.vec3.dot(s,o)/(l*Sn.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}const{transformWorldToIndex:Tw}=ie.utilities;class Dw extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,getTextLines:Sw,statsCalculator:rs}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(n.canvas,(0,ie.getEnabledElement)(i)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},initialRotation:r.getRotation()}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,centerWorld:o,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=Ra(s.map((e=>a.worldToCanvas(e)))),[d,c]=l,h={left:Math.min(d[0],c[0])+i/2,top:Math.min(d[1],c[1])+i/2,width:Math.abs(d[0]-c[0])-i,height:Math.abs(d[1]-c[1])-i},u={left:Math.min(d[0],c[0])-i/2,top:Math.min(d[1],c[1])-i/2,width:Math.abs(d[0]-c[0])+i,height:Math.abs(d[1]-c[1])+i},g=this._pointInEllipseCanvas(h,n);return!(!this._pointInEllipseCanvas(u,n)||g)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},cr(i),this._activateModify(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s,l,d,c,h,u=!1;if(n.worldPosition)u=!0;else{const{points:e}=a.handles,{viewport:t}=(0,ie.getEnabledElement)(o),{worldToCanvas:i,canvasToWorld:u}=t;r=e.findIndex((e=>e===n));const g=e.map(i);h=g[r],d=Math.abs(g[2][0]-g[3][0]),c=Math.abs(g[0][1]-g[1][1]),s=[(g[2][0]+g[3][0])/2,(g[0][1]+g[1][1])/2],l=u(s)}const g=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:g,handleIndex:r,canvasWidth:d,canvasHeight:c,centerWorld:l,originalHandleCanvas:h,movingTextBox:u},this._activateModify(o),cr(o);const m=(0,ie.getEnabledElement)(o),{renderingEngine:v}=m;oi(g),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i)})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerWorld:h}=this.editData,u=s.worldToCanvas(h),{data:g}=d,m=Math.abs(o[0]-u[0]),v=Math.abs(o[1]-u[1]),p=[u[0],u[1]-v],f=[u[0],u[1]+v],w=[u[0]-m,u[1]],I=[u[0]+m,u[1]];g.handles.points=[l(p),l(f),l(w),l(I)],d.invalidated=!0,this.editData.hasMoved=!0,oi(c)})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,{viewport:i}=(0,ie.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i,{annotation:r,canvasWidth:s,canvasHeight:l,handleIndex:d,centerWorld:c,originalHandleCanvas:h}=this.editData,u=i.worldToCanvas(c),{data:g}=r,{points:m}=g.handles,{currentPoints:v}=t,p=v.canvas;if(0===d||1===d){const e=Math.abs(p[1]-u[1]),t=[u[0],u[1]-e],n=[u[0],u[1]+e];m[0]=o(t),m[1]=o(n);const i=s/2+(p[0]-h[0]),a=[u[0]-i,u[1]],r=[u[0]+i,u[1]];m[2]=o(a),m[3]=o(r)}else{const e=Math.abs(p[0]-u[0]),t=[u[0]-e,u[1]],n=[u[0]+e,u[1]];m[2]=o(t),m[3]=o(n);const i=l/2+(p[1]-h[1]),a=[u[0],u[1]-i],r=[u[0],u[1]+i];m[0]=o(a),m[1]=o(r)}})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{handles:u}=h,{points:g,activeHandleIndex:m}=u;l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=g.map((e=>i.worldToCanvas(e))),I=Ra(w),{centerPointRadius:E}=this.configuration;if(h.cachedStats[r]&&null!=h.cachedStats[r].areaUnits){if(d.invalidated&&(this._throttledCalculateCachedStats(d,i,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null},this._calculateCachedStats(d,i,s);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let C;if(!Re(c))continue;ue(d)||this.editData||null===m||(C=[w[m]]),C&&xr(t,c,"0",C,{color:v});const _="0";if(cf(t,c,_,w,{color:v,lineDash:f,lineWidth:p},`${c}-ellipse`),E>0&&Math.min(Math.abs(I[0][0]-I[1][0])/2,Math.abs(I[0][1]-I[1][1])/2)>3*E){const e=this._getCanvasEllipseCenter(w);er(t,c,`${_}-center`,e,E,{color:v,lineDash:f,lineWidth:p})}n=!0;const b=this.getLinkedTextBoxStyle(l,d);if(!b.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const T=this.configuration.getTextLines(h,r);if(!T||0===T.length)continue;let D;h.handles.textBox.hasMoved||(D=Zr(I),h.handles.textBox.worldPosition=i.canvasToWorld(D));const S=i.worldToCanvas(h.handles.textBox.worldPosition),y=Yr(t,c,"1",T,S,w,{},b),{x,y:M,width:O,height:P}=y;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([x,M]),topRight:i.canvasToWorld([x+O,M]),bottomLeft:i.canvasToWorld([x,M+P]),bottomRight:i.canvasToWorld([x+O,M+P])}}return n})),ae(this,"_calculateCachedStats",((e,t,n)=>{const i=e.data,{element:o}=t,{points:a}=i.handles,r=a.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:s,viewUp:l}=t.getCamera(),[d,c]=Ra(r),h=t.canvasToWorld(d),u=t.canvasToWorld(c),{cachedStats:g}=i,m=Object.keys(g),v=h,p=u;for(let i=0;i<m.length;i++){const o=m[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:d,metadata:c,voxelManager:f}=a,w=Tw(d,v);w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]);const I=Tw(d,p);I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]),this.isHandleOutsideImage=!this._isInsideVolume(w,I,r);const E=[[Math.min(w[0],I[0]),Math.max(w[0],I[0])],[Math.min(w[1],I[1]),Math.max(w[1],I[1])],[Math.min(w[2],I[2]),Math.max(w[2],I[2])]],C={center:[(h[0]+u[0])/2,(h[1]+u[1])/2,(h[2]+u[2])/2],xRadius:Math.abs(h[0]-u[0])/2,yRadius:Math.abs(h[1]-u[1])/2,zRadius:Math.abs(h[2]-u[2])/2},{worldWidth:_,worldHeight:b}=bw(s,l,v,p),T=0===_&&0===b,D=[w,I],{scale:S,areaUnits:y}=Ln(a,D),x=Math.abs(Math.PI*(_/2)*(b/2))/S/S,M={isPreScaled:ts(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},O=es(c.Modality,e.metadata.referencedImageId,M),P=f.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:E,imageData:d,isInObject:e=>La(C,e,{fast:!0}),returnPoints:this.configuration.storePointData}),A=this.configuration.statsCalculator.getStatistics();g[o]={Modality:c.Modality,area:x,mean:A.mean?.value,max:A.max?.value,stdDev:A.stdDev?.value,statsArray:A.array,pointsInShape:P,isEmptyArea:T,areaUnits:y,pixelValueUnits:O}}return e.invalidated=!1,Qe(e,o),g})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,t){const n=e.width/2,i=e.height/2;if(n<=0||i<=0)return!1;const o=[e.left+n,e.top+i],a=[t[0]-o[0],t[1]-o[1]];return a[0]*a[0]/(n*n)+a[1]*a[1]/(i*i)<=1}_getCanvasEllipseCenter(e){const[t,n,i,o]=e,a=[i[0],n[1]],r=[o[0],t[1]];return[(a[0]+r[0])/2,(a[1]+r[1])/2]}}function Sw(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,max:r,isEmptyArea:s,areaUnits:l,pixelValueUnits:d}=n,c=[];if(i){const e=s?"Area: Oblique not supported":`Area: ${tc(i)} ${l}`;c.push(e)}return o&&c.push(`Mean: ${tc(o)} ${d}`),r&&c.push(`Max: ${tc(r)} ${d}`),a&&c.push(`Std Dev: ${tc(a)} ${d}`),c}ae(Dw,"toolName",void 0),Dw.toolName="EllipticalROI";const yw=Dw;function xw(e){const[t,n]=e;return nl(t,n)}function Mw(e){const[t,n]=e,i=nl(t,n);return[[t[0]-i,t[1]-i],[t[0]+i,t[1]+i]]}const{transformWorldToIndex:Ow}=ie.utilities;class Pw extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,getTextLines:Aw,statsCalculator:rs}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o]],activeHandleIndex:null},cachedStats:{}}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),d=xw(l),c=xw([l[0],n]);return Math.abs(c-d)<i/2})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},cr(i),this._activateModify(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i)})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c}=this.editData,{data:h}=d;h.handles.points=[h.handles.points[0],l(o)],d.invalidated=!0,this.editData.hasMoved=!0,oi(c)})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i.viewport,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,{points:d}=l.handles,c=d.map((e=>a(e))),{currentPoints:h}=t,u=h.canvas;if(0===s){const e=u[0]-c[0][0],t=u[1]-c[0][1],n=u,i=[c[1][0]+e,c[1][1]+t];d[0]=o(n),d[1]=o(i)}else d[1]=o(u)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{handles:u}=h,{points:g,activeHandleIndex:m}=u;l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=g.map((e=>i.worldToCanvas(e))),I=w[0],E=xw(w),C=Mw(w),{centerPointRadius:_}=this.configuration;if(h.cachedStats[r]&&null!=h.cachedStats[r].areaUnits){if(d.invalidated&&(this._throttledCalculateCachedStats(d,i,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(d,i,s,e);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let b;if(!Re(c))continue;ue(d)||this.editData||null===m||(b=[w[m]]),b&&xr(t,c,"0",b,{color:v});const T="0";er(t,c,T,I,E,{color:v,lineDash:f,lineWidth:p},`${c}-circle`),_>0&&E>3*_&&er(t,c,`${T}-center`,I,_,{color:v,lineDash:f,lineWidth:p}),n=!0;const D=this.getLinkedTextBoxStyle(l,d);if(!D.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const S=this.configuration.getTextLines(h,r);if(!S||0===S.length)continue;let y;h.handles.textBox.hasMoved||(y=Zr(C),h.handles.textBox.worldPosition=i.canvasToWorld(y));const x=i.worldToCanvas(h.handles.textBox.worldPosition),M=Yr(t,c,"1",S,x,w,{},D),{x:O,y:P,width:A,height:R}=M;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([O,P]),topRight:i.canvasToWorld([O+A,P]),bottomLeft:i.canvasToWorld([O,P+R]),bottomRight:i.canvasToWorld([O+A,P+R])}}return n})),ae(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{element:a}=t,{points:r}=o.handles,s=r.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:l,viewUp:d}=t.getCamera(),[c,h]=Mw(s),u=t.canvasToWorld(c),g=t.canvasToWorld(h),{cachedStats:m}=o,v=Object.keys(m),p=u,f=g;for(let i=0;i<v.length;i++){const o=v[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:c,voxelManager:h}=a,w=Ow(s,p);w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]);const I=Ow(s,f);if(I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]),this._isInsideVolume(w,I,r)){const n=[[Math.min(w[0],I[0]),Math.max(w[0],I[0])],[Math.min(w[1],I[1]),Math.max(w[1],I[1])],[Math.min(w[2],I[2]),Math.max(w[2],I[2])]],i={center:[(u[0]+g[0])/2,(u[1]+g[1])/2,(u[2]+g[2])/2],xRadius:Math.abs(u[0]-g[0])/2,yRadius:Math.abs(u[1]-g[1])/2,zRadius:Math.abs(u[2]-g[2])/2},{worldWidth:r,worldHeight:v}=bw(l,d,p,f),E=0===r&&0===v,C=[w,I],{scale:_,lengthUnits:b,areaUnits:T}=Ln(a,C),D=Un(a),S=Math.abs(Math.PI*(r/_/2)*(v/D/_/2)),y={isPreScaled:ts(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},x=es(c.Modality,e.metadata.referencedImageId,y),M=h.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>La(i,e,{fast:!0}),boundsIJK:n,imageData:s,returnPoints:this.configuration.storePointData}),O=this.configuration.statsCalculator.getStatistics();m[o]={Modality:c.Modality,area:S,mean:O.mean?.value,max:O.max?.value,stdDev:O.stdDev?.value,statsArray:O.array,pointsInShape:M,isEmptyArea:E,areaUnits:T,radius:r/2/_,radiusUnit:b,perimeter:2*Math.PI*(r/2)/_,pixelValueUnits:x}}else this.isHandleOutsideImage=!0,m[o]={Modality:c.Modality}}return e.invalidated=!1,Qe(e,a),m})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}}function Aw(e,t){const n=e.cachedStats[t],{radius:i,radiusUnit:o,area:a,mean:r,stdDev:s,max:l,isEmptyArea:d,areaUnits:c,pixelValueUnits:h}=n,u=[];if(i){const e=d?"Radius: Oblique not supported":`Radius: ${tc(i)} ${o}`;u.push(e)}if(a){const e=d?"Area: Oblique not supported":`Area: ${tc(a)} ${c}`;u.push(e)}return r&&u.push(`Mean: ${tc(r)} ${h}`),l&&u.push(`Max: ${tc(l)} ${h}`),s&&u.push(`Std Dev: ${tc(s)} ${h}`),u}ae(Pw,"toolName",void 0),Pw.toolName="CircleROI";const Rw=Pw;class Lw{constructor(e){ae(this,"_controlPoints",[]),ae(this,"_resolution",void 0),ae(this,"_fixedResolution",void 0),ae(this,"_closed",void 0),ae(this,"_invalidated",!1),ae(this,"_curveSegments",void 0),ae(this,"_aabb",void 0),ae(this,"_length",0),this._controlPoints=[],this._resolution=e?.resolution??20,this._fixedResolution=e?.fixedResolution??!1,this._closed=e?.closed??!1,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._fixedResolution||this._resolution===e||(this._resolution=e,this.invalidated=!0)}get fixedResolution(){return this._fixedResolution}get closed(){return this._closed}set closed(e){this._closed!==e&&(this._closed=e,this.invalidated=!0)}get aabb(){return this._update(),this._aabb}get length(){return this._update(),this._length}get invalidated(){return this._invalidated}set invalidated(e){this._invalidated=e}hasTangentPoints(){return!1}addControlPoint(e){this._controlPoints.push([e[0],e[1]]),this.invalidated=!0}addControlPoints(e){e.forEach((e=>this.addControlPoint(e)))}addControlPointAtU(e){const t=this._getLineSegmentAt(e),{start:n,end:i}=t.points,o=Math.floor(e),a=this._curveSegments[o],r=e-Math.floor(o),s=[n[0]+r*(i[0]-n[0]),n[1]+r*(i[1]-n[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,s),this.invalidated=!0,{index:l,point:s}}deleteControlPointByIndex(e){const t=this._closed?3:1;return e>=0&&e<this._controlPoints.length&&this._controlPoints.length>t&&(this._controlPoints.splice(e,1),this.invalidated=!0,!0)}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,t){if(e<0||e>=this._controlPoints.length)throw new Error("Index out of bounds");this._controlPoints[e]=[...t],this.invalidated=!0}getControlPoints(){return this._controlPoints.map((e=>[e[0],e[1]]))}getClosestControlPoint(e){const t=this._controlPoints;let n=1/0,i=-1;for(let o=0,a=t.length;o<a;o++){const a=t[o],r=e[0]-a[0],s=e[1]-a[1],l=r*r+s*s;l<n&&(n=l,i=o)}return{index:i,point:-1===i?void 0:[...t[i]],distance:Math.sqrt(n)}}getClosestControlPointWithinDistance(e,t){const n=this.getClosestControlPoint(e);return n.distance<=t?n:void 0}getClosestPoint(e){this._update();const t=this._getCurveSegmmentsDistanceSquaredInfo(e);if(!t.length)return;let n;t.sort(((e,t)=>e.distanceSquared-t.distanceSquared));let i,o,a=-1,r=1/0;for(let s=0;s<t.length;s++){const l=t[s];if(l.distanceSquared>r)continue;const{curveSegmentIndex:d,curveSegment:c}=l,{lineSegments:h}=c;for(let t=0;t<h.length;t++){const s=h[t],{point:c,distanceSquared:u}=qi(s.points.start,s.points.end,e);u<r&&(o=s,a=d,i=l.curveSegment,n=c,r=u)}}return{point:n,uValue:a+(o.previousLineSegmentsLength+nl(o.points.start,n))/i.length,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){const t=[...this._controlPoints];if(this._closed&&t.push(this._controlPoints[0]),!t.length)return;let n,i=1/0,o=t[0];for(let a=1,r=t.length;a<r;a++){const r=t[a],{point:s,distanceSquared:l}=qi(o,r,e);l<i&&(n=s,i=l),o=r}return{point:n,distance:Math.sqrt(i)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();const n=this.getClosestControlPointWithinDistance(e,t),i=0===n?.index,o=this.getPreviewCurveSegments(e,i);return o?.length?this._convertCurveSegmentsToPolyline(o):[]}isPointNearCurve(e,t){this._update();const n=this._getCurveSegmmentsWithinDistance(e,t),i=t*t;for(let t=0;t<n.length;t++){const{lineSegments:o}=n[t];for(let t=0;t<o.length;t++){const n=o[t];if(zi(n.points.start,n.points.end,e)<=i)return!0}}return!1}containsPoint(e){if(this._update(),this._controlPoints.length<3)return!1;const t=[...this._curveSegments],n=this._getClosingCurveSegmentWithStraightLineSegment();n&&t.push(n);let i=0;for(let n=0;n<t.length;n++){const o=t[n],{aabb:a}=o;if(!(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY))continue;const{lineSegments:r}=o;for(let t=0;t<r.length;t++){const n=r[t],{aabb:o}=n;if(e[0]<=o.maxX&&e[1]>=o.minY&&e[1]<o.maxY){const{start:t,end:o}=n.points,a=t[0]===o[0],r=(e[1]-t[1])*(o[0]-t[0])/(o[1]-t[1])+t[0];i+=a||e[0]<=r?1:0}}}return i%2==1}_update(){if(!this._invalidated)return;const e=this.getSplineCurves();let t=0,n=1/0,i=1/0,o=-1/0,a=-1/0;for(let r=0,s=e.length;r<s;r++){const{aabb:s,length:l}=e[r];n=n<=s.minX?n:s.minX,i=i<=s.minY?i:s.minY,o=o>=s.maxX?o:s.maxX,a=a>=s.maxY?a:s.maxY,t+=l}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:o,maxY:a},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const t=[];return e.forEach(((e,n)=>{let{lineSegments:i}=e;i.forEach(((e,i)=>{0===n&&0===i&&t.push([...e.points.start]),t.push([...e.points.end])}))})),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const t=[],{_curveSegments:n}=this;for(let i=0;i<n.length;i++){const o=n[i],a=el(o.aabb,e);t.push({curveSegmentIndex:i,curveSegment:o,distanceSquared:a})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();const n=t*t;if(el(this.aabb,e)>n)return[];const i=this._getCurveSegmmentsDistanceSquaredInfo(e),o=[];for(let e=0,t=i.length;e<t;e++){const{curveSegment:t,distanceSquared:a}=i[e];a<=n&&o.push(t)}return o}_getLineSegmentAt(e){this._update();const t=Math.floor(e),n=e-t,i=this._curveSegments[t],{lineSegments:o}=i,a=i.length*n;for(let e=0;e<o.length;e++){const t=o[e],n=t.previousLineSegmentsLength+t.length;if(a>=t.previousLineSegmentsLength&&a<=n)return t}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;const e=this._controlPoints,t=e[0],n=e[e.length-1],i={points:{start:[...t],end:[...n]},aabb:{minX:Math.min(t[0],n[0]),minY:Math.min(t[1],n[1]),maxX:Math.max(t[0],n[0]),maxY:Math.max(t[1],n[1])}};return{aabb:{minX:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}class Nw extends Lw{getPreviewCurveSegments(e,t){const n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),o=t?n:n-1,a=this.getTransformMatrix(),r=[...this.controlPoints],s=[];t||r.push(e);for(let e=i;e<=o;e++){const n=this._getCurveSegment(e,a,r,t);s.push(n)}return s}getSplineCurves(){const e=this._getNumCurveSegments(),t=new Array(e);if(e<=0)return[];const n=this.getTransformMatrix();let i=0;for(let o=0;o<e;o++){const e=this._getCurveSegment(o,n);e.previousCurveSegmentsLength=i,t[o]=e,i+=e.length}return t}_getNumCurveSegments(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.controlPoints;return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.closed)?e.length:Math.max(0,e.length-1)}_getPoint(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=Math.floor(e);let r=a%o;const s=e-a;if(r<0||r>=o){if(!this.closed)return;r=(o+r)%o}const{p0:l,p1:d,p2:c,p3:h}=this._getCurveSegmentPoints(r,n,i),u=s*s,g=u*s,m=Sn.vec4.fromValues(1,s,u,g),v=Sn.vec4.transformMat4(Sn.vec4.create(),m,t);return[Sn.vec4.dot(v,Sn.vec4.fromValues(l[0],d[0],c[0],h[0])),Sn.vec4.dot(v,Sn.vec4.fromValues(l[1],d[1],c[1],h[1]))]}_getCurveSegmentPoints(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.controlPoints,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.closed;const i=this._getNumCurveSegments(t,n),o=e-1,a=n?(e+1)%i:e+1,r=a+1,s=t[e],l=t[a];let d,c;return d=o>=0?t[o]:n?t[t.length-1]:il(l,s),c=r<t.length?t[r]:n?t[0]:il(s,l),{p0:d,p1:s,p2:l,p3:c}}_getLineSegments(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=this.resolution+1,r=1/a;let s=e+1;i||e!==o-1||(s-=1e-8);const l=[];let d,c,h=0;for(let o=0,u=e;o<=a;o++,u+=r){u=u>s?s:u;const e=this._getPoint(u,t,n,i);if(!o){d=e;continue}c=e;const a=c[0]-d[0],r=c[1]-d[1],g=Math.sqrt(a**2+r**2),m={minX:d[0]<=c[0]?d[0]:c[0],maxX:d[0]>=c[0]?d[0]:c[0],minY:d[1]<=c[1]?d[1]:c[1],maxY:d[1]>=c[1]?d[1]:c[1]};l.push({points:{start:d,end:c},aabb:m,length:g,previousLineSegmentsLength:h}),d=c,h+=g}return l}_getCurveSegment(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getTransformMatrix(),n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const{p0:o,p1:a,p2:r,p3:s}=this._getCurveSegmentPoints(e,n,i),l=this._getLineSegments(e,t,n,i);let d=0,c=1/0,h=1/0,u=-1/0,g=-1/0;return l.forEach((e=>{let{aabb:t,length:n}=e;c=Math.min(c,t.minX),h=Math.min(h,t.minY),u=Math.max(u,t.maxX),g=Math.max(g,t.maxY),d+=n})),{controlPoints:{p0:o,p1:a,p2:r,p3:s},aabb:{minX:c,minY:h,maxX:u,maxY:g},length:d,previousCurveSegmentsLength:0,lineSegments:l}}}class Uw extends Nw{constructor(e){super(e),ae(this,"_scale",void 0),ae(this,"_fixedScale",void 0),this._scale=e?.scale??.5,this._fixedScale=e?.fixedScale??!1}get scale(){return this._scale}set scale(e){this._fixedScale||this._scale===e||(this._scale=e,this.invalidated=!0)}get fixedScale(){return this._fixedScale}getTransformMatrix(){const{scale:e}=this,t=2*e;return[0,1,0,0,-e,0,e,0,t,e-3,3-t,-e,-e,2-e,e-2,e]}}class kw extends Uw{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class Vw extends Uw{constructor(){super({scale:.5,fixedScale:!0})}}const Ww=Sn.mat4.multiplyScalar(Sn.mat4.create(),Sn.mat4.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class Bw extends Nw{getTransformMatrix(){return Ww}}const Hw={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};var Fw=function(e){return e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE",e}(Fw||{}),Gw=function(e){return e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint",e}(Gw||{});class $w extends Bh{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,calculateStats:!0,getTextLines:qw,contourHoleAdditionModifierKey:sc.Shift,decimate:{enabled:!1,epsilon:.1},spline:{configuration:{[Fw.Cardinal]:{Class:Uw,scale:.5},[Fw.CatmullRom]:{Class:Vw},[Fw.Linear]:{Class:kw},[Fw.BSpline]:{Class:Bw,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:Fw.CatmullRom,drawPreviewEnabled:!0,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[Gw.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:rc.Primary,modifierKey:sc.Shift}]},[Gw.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:rc.Primary,modifierKey:sc.Ctrl}]}}}}),e=this,ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"fireChangeOnUpdate",null),ae(this,"isPointNearTool",((e,t,n,i)=>{const{instance:o}=t.data.spline;return o.isPointNearCurve(n,i)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1};const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),oi(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,contourHoleProcessingEnabled:r}=this.editData,{data:s}=i;i.autoGenerated=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l,c=this.getTargetIdImage(this.getTargetId(l.viewport),l.renderingEngine),{imageData:h,dimensions:u}=c;this.isHandleOutsideImage=s.handles.points.map((e=>ie.utilities.transformWorldToIndex(h,e))).some((e=>!ie.utilities.indexWithinDimensions(e,u))),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID);const g=a?$e.Completed:$e.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=i.annotationUID,this.fireChangeOnUpdate.changeType=g):this.fireChangeOnUpdate={annotationUID:i.annotationUID,changeType:g,contourHoleProcessingEnabled:r},oi(o),this.editData=null,this.isDrawing=!1})),ae(this,"_keyDownCallback",(e=>{const t=e.detail,{element:n}=t,i=t.key??"",{lastControlPointDeletionKeys:o}=this.configuration.spline;if(!o.includes(i))return;const{annotation:a}=this.editData,{data:r}=a;if(3!==r.handles.points.length){{const e=r.handles.points.length-1;this._deleteControlPointByIndex(n,a,e)}e.preventDefault()}else this.cancel(n)})),ae(this,"_mouseMoveCallback",(e=>{const{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;const{element:n}=e.detail,{renderingEngine:i}=(0,ie.getEnabledElement)(n),o=Vo(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,oi(o),e.preventDefault()})),ae(this,"_mouseDownCallback",(e=>{const t=e.type===se.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i}=this.editData,{data:o}=n;if(o.contour.closed)return;const a=e.detail,{element:r}=a,{currentPoints:s}=a,{canvas:l,world:d}=s,c=(0,ie.getEnabledElement)(r),{renderingEngine:h}=c;let u=o.handles.points.length>=2&&t,g=!0;if(o.handles.points.length>=3){const{instance:e}=o.spline,t=e.getClosestControlPointWithinDistance(l,10);0===t?.index&&(g=!1,u=!0)}g&&o.handles.points.push(d),o.contour.closed=o.contour.closed||u,n.invalidated=!0,oi(i),o.contour.closed&&this._endCallback(e),e.preventDefault()})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;this.moveAnnotation(i,n)}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"triggerAnnotationCompleted",((e,t)=>{const n=se.ANNOTATION_COMPLETED,i={annotation:e,changeType:$e.Completed,contourHoleProcessingEnabled:t};(0,ie.triggerEvent)(ie.eventTarget,n,i)})),ae(this,"triggerAnnotationModified",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:$e.StatsUpdated;const{viewportId:i,renderingEngineId:o}=t,a=se.ANNOTATION_MODIFIED,r={annotation:e,viewportId:i,renderingEngineId:o,changeType:n};(0,ie.triggerEvent)(ie.eventTarget,a,r)})),ae(this,"triggerChangeEvent",(function(t,n){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:$e.StatsUpdated,o=arguments.length>3?arguments[3]:void 0;i===$e.Completed?e.triggerAnnotationCompleted(t,o):e.triggerAnnotationModified(t,n,i)})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.KEY_DOWN,this._keyDownCallback),e.addEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(se.TOUCH_TAP,this._mouseDownCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.KEY_DOWN,this._keyDownCallback),e.removeEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(se.TOUCH_TAP,this._mouseDownCallback)})),ae(this,"_renderStats",((e,t,n,i)=>{const o=e.data,a=this.getTargetId(t);if(!o.spline.instance.closed||!i.visibility)return;const r=this.configuration.getTextLines(o,a);if(!r||0===r.length)return;const s=o.handles.points.map((e=>t.worldToCanvas(e)));if(!o.handles.textBox.hasMoved){const e=Zr(s);o.handles.textBox.worldPosition=t.canvasToWorld(e)}const l=t.worldToCanvas(o.handles.textBox.worldPosition),d=Yr(n,e.annotationUID??"","textBox",r,l,s,{},i),{x:c,y:h,width:u,height:g}=d;o.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([c,h]),topRight:t.canvasToWorld([c+u,h]),bottomLeft:t.canvasToWorld([c,h+g]),bottomRight:t.canvasToWorld([c+u,h+g])}})),ae(this,"addControlPointCallback",((e,t)=>{const{data:n}=t,i=n.spline.type,o=this._getSplineConfig(i),a=o.controlPointAdditionDistance;if(!1===o.controlPointAdditionEnabled)return;const r=e.detail,{element:s}=r,l=(0,ie.getEnabledElement)(s),{renderingEngine:d,viewport:c}=l,{canvasToWorld:h}=c,{instance:u}=n.spline,g=e.detail.currentPoints.canvas,m=u.getClosestPoint(g);if(m.distance>a)return;const{index:v,point:p}=u.addControlPointAtU(m.uValue);n.handles.points.splice(v,0,h(p)),t.invalidated=!0;const f=Vo(s,this.getToolName());oi(f)})),ae(this,"deleteControlPointCallback",((e,t)=>{const n=t.data.spline.type,i=this._getSplineConfig(n),o=i.controlPointDeletionDistance;if(!1===i.controlPointDeletionEnabled)return;const a=e.detail,{element:r,currentPoints:s}=a,{canvas:l}=s,{instance:d}=t.data.spline,c=d.getClosestControlPointWithinDistance(l,o);c&&this._deleteControlPointByIndex(r,t,c.index)})),ae(this,"_calculateCachedStats",((e,t)=>{if(!this.configuration.calculateStats)return;const n=e.data;if(!n.contour.closed)return;const i=(0,ie.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,{cachedStats:r}=n,{polyline:s}=n.contour,l=Object.keys(r);for(let e=0;e<l.length;e++){const t=l[e],n=this.getTargetIdImage(t,a);if(!n)continue;const{metadata:i}=n,d=s.map((e=>o.worldToCanvas(e))),c=d[0],h=o.canvasToWorld(c),u=o.canvasToWorld([c[0]+1,c[1]]),g=o.canvasToWorld([c[0],c[1]+1]),m=Sn.vec3.distance(h,u),v=Sn.vec3.distance(h,g),{imageData:p}=n,{scale:f,areaUnits:w}=Ln(n,(()=>{const{maxX:e,maxY:t,minX:n,minY:i}=kn(d),a=o.canvasToWorld([n,i]),r=ie.utilities.transformWorldToIndex(p,a),s=o.canvasToWorld([e,t]);return[r,ie.utilities.transformWorldToIndex(p,s)]}));let I=ol(d)/f/f;I*=m*v,r[t]={Modality:i.Modality,area:I,areaUnits:w}}return this.triggerAnnotationModified(e,i,$e.StatsUpdated),r})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,{canvas:o}=n,a=lc(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,r=(0,ie.getEnabledElement)(i),{renderingEngine:s}=r,l=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(l,i);const d=Vo(i,this.getToolName());return this.editData={annotation:l,viewportIdsToRender:d,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:o,contourHoleProcessingEnabled:a},this._activateDraw(i),e.preventDefault(),oi(d),l}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&vt(t.annotationUID),super.cancelAnnotation(t);const o=(0,ie.getEnabledElement)(e),{renderingEngine:a}=o;return oi(n),this.editData=null,t.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){const{enabledElement:t,targetId:n,svgDrawingHelper:i,annotationStyle:o}=e,{viewport:a}=t,{worldToCanvas:r}=a,{element:s}=a,l=e.annotation,{annotationUID:d,data:c,highlighted:h}=l,{handles:u}=c,{points:g,activeHandleIndex:m}=u,v=this.editData?.newAnnotation,{lineWidth:p,lineDash:f,color:w,locked:I}=o,E=g.map((e=>r(e))),{drawPreviewEnabled:C}=this.configuration.spline,_=l.data.spline.type,b=this._getSplineConfig(_),T=l.data.spline.instance,D=ut(l);if(-1!==D.findIndex((e=>!e)))throw new Error(`Can't find annotation for child ${l.childAnnotationUIDs.join()}`);let S;if([l,...D].filter((e=>this._isSplineROIAnnotation(e))).forEach((e=>{const t=this._updateSplineInstance(s,e).getPolylinePoints();this.updateContourPolyline(e,{points:t,closed:c.contour.closed,targetWindingDirection:qo.Clockwise},a)})),super.renderAnnotationInstance(e),c.cachedStats[n]&&null!=c.cachedStats[n].areaUnits?l.invalidated&&this._throttledCalculateCachedStats(l,s):(c.cachedStats[n]={Modality:null,area:null,areaUnits:null},this._calculateCachedStats(l,s)),I||this.editData||null===m||(S=[E[m]]),(S||v||h)&&xr(i,d,"0",E,{color:w,lineWidth:p,handleRadius:"3"}),C&&T.numControlPoints>1&&this.editData?.lastCanvasPoint&&!T.closed){const{lastCanvasPoint:e}=this.editData;hh(i,d,"previewSplineChange",T.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:f,lineWidth:1})}if(b.showControlPointsConnectors){const e=[...E];T.closed&&e.push(E[0]),hh(i,d,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(l,a,i,o.textbox),this.fireChangeOnUpdate?.annotationUID===d&&(this.triggerChangeEvent(l,t,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),l.invalidated=!1,!0}createInterpolatedSplineControl(e){if(e.data.handles.points?.length)return;const{polyline:t}=e.data.contour;if(!t||!t.length)return;e.data.handles.points=[];const{points:n}=e.data.handles,i=Math.max(10,Math.floor(t.length/20));for(let e=0;e<t.length-i;e+=i)n.push(t[e]);n.push(t[t.length-1])}createAnnotation(e){const t=super.createAnnotation(e),{world:n}=e.detail.currentPoints,{type:i}=this.configuration.spline,o=this._getSplineConfig(i),a=new o.Class,r=()=>({type:o.type,instance:a,resolution:o.resolution});let s;return this.configuration.interpolation?.enabled&&(s=e=>{e.data.spline||=r(),this.createInterpolatedSplineControl(e)}),ie.utilities.deepMerge(t,{data:{handles:{points:[[...n]]},spline:r(),cachedStats:{}},onInterpolationComplete:s})}_deleteControlPointByIndex(e,t,n){const i=(0,ie.getEnabledElement)(e),{points:o}=t.data.handles;3===o.length?vt(t.annotationUID):o.splice(n,1);const{renderingEngine:a}=i,r=Vo(e,this.getToolName());t.invalidated=!0,oi(r)}_isSplineROIAnnotation(e){return!!e.data?.spline}_getSplineConfig(e){const{configuration:t}=this,n=t.spline.configuration;return Object.assign({type:e},Hw,n[e])}_updateSplineInstance(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,{worldToCanvas:o}=i,{data:a}=t,{type:r,instance:s}=t.data.spline,l=this._getSplineConfig(r),d=a.handles.points.map(o),c=void 0!==l.resolution?parseInt(l.resolution):void 0,h=void 0!==l.scale?parseFloat(l.scale):void 0;return s.setControlPoints(d),s.closed=!!a.contour.closed,s.fixedResolution||void 0===c||s.resolution===c||(s.resolution=c,t.invalidated=!0),s instanceof Uw&&!s.fixedScale&&void 0!==h&&s.scale!==h&&(s.scale=h,t.invalidated=!0),s}}function qw(e,t){const n=e.cachedStats[t],{area:i,isEmptyArea:o,areaUnits:a}=n,r=[];if(i){const e=o?"Area: Oblique not supported":`Area: ${tc(i)} ${a}`;r.push(e)}return r}ae($w,"toolName",void 0),ae($w,"SplineTypes",Fw),ae($w,"Actions",Gw),$w.toolName="SplineROI";const zw=$w;class jw extends zw{constructor(e){super(ie.utilities.deepMerge({configuration:{calculateStats:!1}},e))}isContourSegmentationTool(){return!0}}ae(jw,"toolName",void 0),jw.toolName="SplineContourSegmentationTool";const Kw=jw;class Yw{constructor(e){let{numBits:t,getPriority:n,areEqual:i}=e;ae(this,"_bucketCount",void 0),ae(this,"_mask",void 0),ae(this,"_size",void 0),ae(this,"_currentBucketIndex",void 0),ae(this,"_getPriority",void 0),ae(this,"_areEqual",void 0),ae(this,"_buckets",void 0),this._bucketCount=1<<t,this._mask=this._bucketCount-1,this._size=0,this._currentBucketIndex=0,this._buckets=this._buildArray(this._bucketCount),this._getPriority=void 0!==n?n:e=>e,this._areEqual="function"==typeof i?i:(e,t)=>e===t}push(e){const t=this._getBucketIndex(e),n={value:e,next:this._buckets[t]};this._buckets[t]=n,this._size++}pop(){if(0===this._size)throw new Error("Cannot pop because the queue is empty.");for(;null===this._buckets[this._currentBucketIndex];)this._currentBucketIndex=(this._currentBucketIndex+1)%this._bucketCount;const e=this._buckets[this._currentBucketIndex];return this._buckets[this._currentBucketIndex]=e.next,this._size--,e.value}remove(e){if(!e)return!1;const t=this._getBucketIndex(e),n=this._buckets[t];let i,o=n;for(;null!==o&&!this._areEqual(e,o.value);)i=o,o=o.next;return null!==o&&(o===n?this._buckets[t]=o.next:i.next=o.next,this._size--,!0)}isEmpty(){return 0===this._size}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){const t=new Array(e);return t.fill(null),t}}const{isEqual:Xw}=ie.utilities,Jw=4294967295,Zw=2/(3*Math.PI);class Qw{constructor(e,t,n){ae(this,"searchGranularityBits",void 0),ae(this,"searchGranularity",void 0),ae(this,"width",void 0),ae(this,"height",void 0),ae(this,"grayscalePixelData",void 0),ae(this,"laplace",void 0),ae(this,"gradMagnitude",void 0),ae(this,"gradXNew",void 0),ae(this,"gradYNew",void 0),ae(this,"startPoint",void 0),ae(this,"visited",void 0),ae(this,"parents",void 0),ae(this,"costs",void 0),ae(this,"priorityQueueNew",void 0),ae(this,"_getPointIndex",((e,t)=>{const{width:n}=this;return e*n+t})),ae(this,"_getPointCoordinate",(e=>[e%this.width,Math.floor(e/this.width)])),ae(this,"_getPointCost",(e=>Math.round(this.searchGranularity*this.costs[e])));const i=e.length;this.searchGranularityBits=8,this.searchGranularity=1<<this.searchGranularityBits,this.width=t,this.height=n,this.grayscalePixelData=e,this.laplace=null,this.gradXNew=null,this.gradYNew=null,this.laplace=this._computeLaplace(),this.gradMagnitude=this._computeGradient(),this.gradXNew=this._computeGradientX(),this.gradYNew=this._computeGradientY(),this.visited=new Array(i),this.parents=new Uint32Array(i),this.costs=new Float32Array(i)}startSearch(e){const t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(Jw),this.costs.fill(1/0),this.priorityQueueNew=new Yw({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findMinNearby(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;const[n,i]=e,{costs:o}=this,a=[Math.max(0,n-t),Math.min(n+t+1,this.width)],r=[Math.max(0,i-t),Math.min(i+t+1,this.height)];let s=.8*o[this._getPointIndex(i,n)],l=e;for(let n=a[0];n<a[1];n++)for(let i=r[0];i<r[1];i++){const a=1-(Math.abs(n-e[0])+Math.abs(i-e[1]))/t/2,r=.8*o[this._getPointIndex(i,n)]+.2*a;r<s&&(l=[n,i],s=r)}return l}findPathToPoint(e){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:t,_getPointIndex:n,_getPointCoordinate:i}=this,o=n(t[1],t[0]),a=n(e[1],e[0]),{visited:r,parents:s,costs:l,priorityQueueNew:d}=this;if(a===o)return[];for(;!d.isEmpty()&&s[a]===Jw;){const e=d.pop();if(r[e])continue;const t=i(e),o=this._getNeighborPoints(t);r[e]=!0;for(let i=0,a=o.length;i<a;i++){const a=o[i],r=n(a[1],a[0]),c=this._getWeightedDistance(t,a),h=l[e]+c;h<l[r]&&(l[r]!==1/0&&d.remove(r),l[r]=h,s[r]=e,d.push(r))}}const c=[];let h=a;for(;h!==Jw;)c.push(i(h)),h=s[h];return c.reverse()}_getDeltaX(e,t){const{grayscalePixelData:n,width:i}=this;let o=this._getPointIndex(t,e);return e+1===i&&o--,n[o+1]-n[o]}_getDeltaY(e,t){const{grayscalePixelData:n,width:i,height:o}=this;let a=this._getPointIndex(t,e);return t+1===o&&(a-=i),n[a]-n[a+i]}_getGradientMagnitude(e,t){const n=this._getDeltaX(e,t),i=this._getDeltaY(e,t);return Math.sqrt(n*n+i*i)}_getLaplace(e,t){const{grayscalePixelData:n,_getPointIndex:i}=this;let o=n[i(t-2,e)];return o+=n[i(t-1,e-1)]+2*n[i(t-1,e)]+n[i(t-1,e+1)],o+=n[i(t,e-2)]+2*n[i(t,e-1)]-16*n[i(t,e)]+2*n[i(t,e+1)]+n[i(t,e+2)],o+=n[i(t+1,e-1)]+2*n[i(t+1,e)]+n[i(t+1,e+1)],o+=n[i(t+2,e)],o}_computeGradient(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0,o=0,a=0,r=0;for(r=0;r<t-1;r++){for(a=0;a<e-1;a++)n[i]=this._getGradientMagnitude(a,r),o=Math.max(n[i],o),i++;n[i]=n[i-1],i++}for(let t=n.length;i<t;i++)n[i]=n[i-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/o;return n}_computeLaplace(){const{width:e,height:t,_getPointIndex:n}=this,i=new Float32Array(e*t);i.fill(1,0,n(2,0));for(let o=2;o<t-2;o++){i[n(o,0)]=1,i[n(o,1)]=1;for(let t=2;t<e-2;t++)i[n(o,t)]=this._getLaplace(t,o)>.33?0:1;i[n(o,e-2)]=1,i[n(o,e-1)]=1}return i.fill(1,n(t-2,0)),i}_computeGradientX(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t;o++)for(let t=0;t<e;t++)n[i++]=this._getDeltaX(t,o);return n}_computeGradientY(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t;o++)for(let t=0;t<e;t++)n[i++]=this._getDeltaY(t,o);return n}_getGradientUnitVector(e,t){const{gradXNew:n,gradYNew:i,_getPointIndex:o}=this,a=n[o(t,e)],r=i[o(t,e)];let s=Math.sqrt(a*a+r*r);return s=Math.max(s,1e-100),[a/s,r/s]}_getGradientDirection(e,t,n,i){const o=this._getGradientUnitVector(e,t),a=this._getGradientUnitVector(n,i);let r=o[1]*(n-e)-o[0]*(i-t),s=a[1]*(n-e)-a[0]*(i-t);r<0&&(r=-r,s=-s),e!==n&&t!==i&&(r*=Math.SQRT1_2,s*=Math.SQRT1_2),s=Math.min(Math.max(s,-1),1);const l=Zw*(Math.acos(Math.min(r,1))+Math.acos(s));return isNaN(l)||!isFinite(l)?(console.warn("Found non-direction:",e,t,n,i,r,s,l),1):l}getCost(e,t){return this._getWeightedDistance(e,t)}_getWeightedDistance(e,t){const{_getPointIndex:n,width:i,height:o}=this,[a,r]=e,[s,l]=t;if(s<0||s>=i||l<0||l>=o)return 1;if(a<0||r<0||a>=i||r>=o)return 0;const d=n(l,s);let c=this.gradMagnitude[d];return a!==s&&r!==l||(c*=Math.SQRT1_2),.43*c+.43*this.laplace[d]+.11*this._getGradientDirection(a,r,s,l)}_getNeighborPoints(e){const{width:t,height:n}=this,i=[],o=Math.max(e[0]-1,0),a=Math.max(e[1]-1,0),r=Math.min(e[0]+1,t-1),s=Math.min(e[1]+1,n-1);for(let t=a;t<=s;t++)for(let n=o;n<=r;n++)n===e[0]&&t===e[1]||i.push([n,t]);return i}static createInstanceFromRawPixelData(e,t,n,i){const o=e.length,a=new Float32Array(o),{lower:r,upper:s}=i,l=s-r;for(let t=0,n=e.length;t<n;t++)a[t]=Math.max(0,Math.min(1,(e[t]-r)/l));return new Qw(a,t,n)}}class eI{constructor(e,t){ae(this,"pointArray",void 0),ae(this,"_controlPointIndexes",void 0),this.pointArray=e?e.slice():[],this._controlPointIndexes=t?t.slice():[]}getPoint(e){return this.pointArray[e]}getLastPoint(){return this.pointArray[this.pointArray.length-1]}isControlPoint(e){const t=this.pointArray.indexOf(e);if(-1!==t)return-1!==this._controlPointIndexes.indexOf(t);throw new Error("Error: isControlPoint called with not in list point.")}addPoint(e){this.pointArray.push(e)}addControlPoint(e){const t=this.pointArray.indexOf(e);if(-1===t)throw new Error("Cannot mark a non registered point as control point.");this._controlPointIndexes.push(t)}getControlPoints(){return this._controlPointIndexes.map((e=>this.pointArray[e]))}getNumControlPoints(){return this._controlPointIndexes.length}removeLastControlPoint(){this._controlPointIndexes.length&&this._controlPointIndexes.pop()}getLastControlPoint(){if(this._controlPointIndexes.length)return this.pointArray[this._controlPointIndexes[this._controlPointIndexes.length-1]]}removeLastPoints(e){this.pointArray.splice(this.pointArray.length-e,e)}addPoints(e){this.pointArray=this.pointArray.concat(e)}prependPath(e){const t=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let e=0;e<this._controlPointIndexes.length;++e)n[e]=this._controlPointIndexes[e]+t;this._controlPointIndexes=e._controlPointIndexes.concat(n)}appendPath(e){this.addPoints(e.pointArray),e._controlPointIndexes.forEach((e=>this._controlPointIndexes.push(e)))}}class tI extends Bh{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:sc.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{undo:{method:"undo",bindings:[{key:"Escape"}]}}}}),e=this,ae(this,"scissors",void 0),ae(this,"scissorsNext",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,r=i*i,s=t.data.contour.polyline.map((e=>a.worldToCanvas(e)));let l=s[s.length-1];for(let e=0;e<s.length;e++){const t=s[e];if(zi(l,t,n)<=r)return!0;l=t}return!1})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o};const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),oi(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()})),ae(this,"_endCallback",(function(t){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=t.detail,{element:o}=i,{annotation:a,viewportIdsToRender:r,newAnnotation:s,contourHoleProcessingEnabled:l}=e.editData,{data:d}=a;d.handles.activeHandleIndex=null,e._deactivateModify(o),e._deactivateDraw(o),dr(o);const c=(0,ie.getEnabledElement)(o);if(e.isHandleOutsideImage&&e.configuration.preventHandleOutsideImage||n)return vt(a.annotationUID),e.clearEditData(),void oi(r);oi(r);const h=s?$e.Completed:$e.HandlesUpdated;e.triggerChangeEvent(a,c,h,l),e.clearEditData()})),ae(this,"triggerChangeEvent",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:$e.StatsUpdated,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];n===$e.Completed?tt(e,i):Qe(e,t.viewport.element,n)})),ae(this,"_mouseDownCallback",(e=>{const t=e.type===se.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i,worldToSlice:o,sliceToWorld:a}=this.editData;if(this.editData.closed)return;const r=e.detail,{element:s}=r,{currentPoints:l}=r,{canvas:d,world:c}=l;let h=c;const u=(0,ie.getEnabledElement)(s),{viewport:g,renderingEngine:m}=u,v=this.editData.currentPath.getControlPoints();let p=v.length>=2&&t;if(v.length>=2){const e={index:-1,distSquared:1/0};for(let t=0,n=v.length;t<n;t++){const n=a(v[t]),i=$i(d,g.worldToCanvas(n));i<=100&&i<e.distSquared&&(e.distSquared=i,e.index=t)}0===e.index&&(p=!0)}const{snapHandleNearby:f}=this.configuration;if(f&&!this.editData.closed){const e=new eI,t=this.scissors.findMinNearby(o(c),1),n=this.scissors.findPathToPoint(t);e.addPoints(n),e.prependPath(this.editData.confirmedPath),h=a(t),this.editData.currentPath=e}this.editData.closed=this.editData.closed||p,this.editData.confirmedPath=this.editData.currentPath;const w=this.editData.currentPath.getLastPoint();this.editData.confirmedPath.addControlPoint(w),n.data.handles.points.push(a(w)),this.scissors.startSearch(o(h)),n.invalidated=!0,oi(i),this.editData.closed&&(this.updateAnnotation(this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()})),ae(this,"_mouseMoveCallback",(e=>{const{element:t,currentPoints:n}=e.detail,{world:i,canvas:o}=n,{renderingEngine:a}=(0,ie.getEnabledElement)(t),r=Vo(t,this.getToolName());this.editData.lastCanvasPoint=o;const{width:s,height:l}=this.scissors,{worldToSlice:d}=this.editData,c=d(i);if(c[0]<0||c[1]<0||c[0]>=s||c[1]>=l)return;const h=this.scissors.findPathToPoint(c),u=new eI;u.addPoints(h),u.prependPath(this.editData.confirmedPath),this.editData.currentPath=u,oi(r),e.preventDefault()})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData;if(void 0===a)console.warn("No drag implemented for livewire");else{const{currentPoints:e}=t,o=e.world;this.editHandle(o,n,i,a)}const r=(0,ie.getEnabledElement)(n),{renderingEngine:s}=r;oi(o)})),ae(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&vt(t.annotationUID);const o=(0,ie.getEnabledElement)(e),{renderingEngine:a}=o;return oi(n),this.editData=null,this.scissors=null,t.annotationUID})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(se.TOUCH_TAP,this._mouseDownCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(se.TOUCH_TAP,this._mouseDownCallback)}))}setupBaseEditData(e,t,n,i,o){const a=(0,ie.getEnabledElement)(t),{viewport:r}=a;this.isDrawing=!0;const s=r.getImageData(),{imageData:l}=s;let d,c,h,u,g;if(r instanceof ie.VolumeViewport||!g){if(!(r instanceof ie.VolumeViewport))throw new Error("Viewport not supported");{const e=ie.utilities.getCurrentVolumeViewportSlice(r),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;d=e=>{const t=ie.utilities.transformWorldToIndex(l,e),i=Sn.vec3.transformMat4([0,0,0],t,n);return[i[0],i[1]]},c=e=>{const n=Sn.vec3.transformMat4([0,0,0],[e[0],e[1],0],t);return ie.utilities.transformIndexToWorld(l,n)},g=e.scalarData,h=e.width,u=e.height}}else({scalarData:g}=s),h=s.dimensions[0],u=s.dimensions[1],d=e=>{const t=ie.utilities.transformWorldToIndex(l,e);return[t[0],t[1]]},c=e=>ie.utilities.transformIndexToWorld(l,[e[0],e[1],0]);g=ie.utilities.convertToGrayscale(g,h,u);const{voiRange:m}=r.getProperties(),v=d(e);this.scissors=Qw.createInstanceFromRawPixelData(g,h,u,m),i&&(this.scissorsNext=Qw.createInstanceFromRawPixelData(g,h,u,m),this.scissorsNext.startSearch(d(i))),this.scissors.startSearch(v);const p=!i,f=new eI,w=new eI,I=p?void 0:new eI;f.addPoint(v),f.addControlPoint(v);const E=Vo(t,this.getToolName()),C=r.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:E,newAnnotation:p,hasMoved:!1,lastCanvasPoint:C,confirmedPath:f,currentPath:w,confirmedPathNext:I,closed:!1,handleIndex:this.editData?.handleIndex??n.handles?.activeHandleIndex,worldToSlice:d,sliceToWorld:c,contourHoleProcessingEnabled:o}}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,{world:o}=n,a=this.createAnnotation(e),r=lc(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(o,i,a,void 0,r),this.addAnnotation(a,i),this._activateDraw(i),e.preventDefault(),oi(this.editData.viewportIdsToRender),a}clearEditData(){this.editData=null,this.scissors=null,this.scissorsNext=null,this.isDrawing=!1}editHandle(e,t,n,i){const{data:o}=n,{points:a}=o.handles,{length:r}=a,s=a[(i-1+r)%r],l=a[(i+1)%r];if(!this.editData?.confirmedPathNext){this.setupBaseEditData(s,t,n,l);const{polyline:e}=o.contour,a=new eI,r=new eI,{worldToSlice:d}=this.editData,c=pa(n,i-1),h=pa(n,i+1);if(-1===h||-1===c)throw new Error(`Can't find handle index ${-1===h&&l} ${-1===c&&s}`);0===i?r.addPoints(e.slice(h+1,c).map(d)):(a.addPoints(e.slice(0,c+1).map(d)),r.addPoints(e.slice(h,e.length).map(d))),this.editData.confirmedPath=a,this.editData.confirmedPathNext=r}const{editData:d,scissors:c}=this,{worldToSlice:h,sliceToWorld:u}=d,{activeHandleIndex:g}=o.handles;if(null==g)o.handles.activeHandleIndex=i;else if(g!==i)throw new Error(`Trying to edit a different handle than the one currently being edited ${i}!==${o.handles.activeHandleIndex}`);const m=h(e);if(m[0]<0||m[0]>=c.width||m[1]<0||m[1]>=c.height)return;a[i]=u(m);const v=c.findPathToPoint(m),p=this.scissorsNext.findPathToPoint(m),f=new eI;f.prependPath(d.confirmedPath),0!==i&&f.addPoints(v),f.addPoints(p.reverse()),f.appendPath(d.confirmedPathNext),0===i&&f.addPoints(v),d.currentPath=f,n.invalidated=!0,d.hasMoved=!0}renderAnnotation(e,t){return this.updateAnnotation(this.editData?.currentPath),super.renderAnnotation(e,t)}isContourSegmentationTool(){return!1}createAnnotation(e){const t=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return ie.utilities.deepMerge(t,{data:{handles:{points:[[...n]]}}})}undo(e,t,n){this.editData&&this._endCallback(n,!0)}renderAnnotationInstance(e){const{annotation:t,enabledElement:n,svgDrawingHelper:i,annotationStyle:o}=e,{viewport:a}=n,{worldToCanvas:r}=a,{annotationUID:s,data:l,highlighted:d}=t,{handles:c}=l,h=this.editData?.newAnnotation,{lineWidth:u,lineDash:g,color:m}=o;if(d||h&&t.annotationUID===this.editData?.annotation?.annotationUID){const e="0",t=c.points.map(r);xr(i,s,e,t,{color:m,lineDash:g,lineWidth:u})}return super.renderAnnotationInstance(e),!0}updateAnnotation(e){if(!this.editData||!e)return;const{annotation:t,sliceToWorld:n,worldToSlice:i,closed:o,newAnnotation:a}=this.editData;let{pointArray:r}=e;r.length>1&&(r=[...r,r[0]]);const s=a&&o?qo.Clockwise:void 0;this.updateContourPolyline(t,{points:r,closed:o,targetWindingDirection:s},{canvasToWorld:n,worldToCanvas:i})}}ae(tI,"toolName",void 0),tI.toolName="LivewireContour";const nI=tI;class iI extends nI{updateInterpolatedAnnotation(e,t){!this.editData&&e.invalidated&&e.data.handles.interpolationSources&&(e.data.contour.originalPolyline=e.data.contour.polyline,queueMicrotask((()=>{if(!e.data.handles.interpolationSources)return;const{points:n}=e.data.handles,{element:i}=t.viewport;this.setupBaseEditData(n[0],i,e);const{length:o}=n,{scissors:a}=this,{nearestEdge:r,repeatInterpolation:s}=this.configuration.interpolation;e.data.handles.originalPoints=n;const{worldToSlice:l,sliceToWorld:d}=this.editData,c=[];if(r){let e=l(n[n.length-1]);n.forEach(((t,i)=>{const o=l(t);e=o,c.push(o),a.startSearch(e),a.findPathToPoint(o),a.findPathToPoint(l(n[(i+3)%n.length]));const s=a.findMinNearby(o,r);ie.utilities.isEqual(o,s)||(c[i]=s,e=s,n[i]=d(s))}))}const h=new eI;for(let e=0;e<o;e++){a.startSearch(l(n[e]));const t=a.findPathToPoint(l(n[(e+1)%o]));h.addPoints(t)}this.updateAnnotation(h),this.scissors=null,this.scissorsNext=null,this.editData=null,e.data.handles.interpolationSources=null,s&&Qe(e,t.viewport.element,$e.InterpolationUpdated)})))}renderAnnotationInstance(e){const{enabledElement:t,svgDrawingHelper:n}=e,i=e.annotation,{annotationUID:o}=i,{viewport:a}=t,{worldToCanvas:r}=a,{showInterpolationPolyline:s}=this.configuration.interpolation||{};this.updateInterpolatedAnnotation?.(i,t);const{originalPolyline:l}=i.data.contour,d=super.renderAnnotationInstance(e);if(s&&l&&i.autoGenerated){const e=l.map(r);e.push(e[0]),hh(n,o,"interpolationContour-0",e,{color:"#70ffff",lineWidth:1,fillOpacity:0})}return d}isContourSegmentationTool(){return!0}}ae(iI,"toolName",void 0),iI.toolName="LivewireContourSegmentationTool";const oI=iI;class aI extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:rI,changeTextCallback:sI,preventHandleOutsideImage:!1,arrowFirst:!0}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;cr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),{arrowFirst:u}=this.configuration,g=r.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h,...r.getViewReference({points:[o]})},data:{text:"",handles:{points:[[...o],[...o]],activeHandleIndex:null,arrowFirst:u,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};gt(m,i);const v=Vo(i,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),oi(v),m})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return Xr([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),cr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;a&&!r||(s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),a?this.configuration.getTextCallback((e=>{if(!e)return vt(i.annotationUID),oi(o),this.editData=null,void(this.isDrawing=!1);i.data.text=e,et(i),oi(o)})):Qe(i,n),this.editData=null,this.isDrawing=!1)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"touchTapCallback",(e=>{2==e.detail.taps&&this.doubleClickCallback(e)})),ae(this,"doubleClickCallback",(e=>{const t=e.detail,{element:n}=t;let i=st(this.getToolName(),n);if(i=this.filterInteractableAnnotationsForElement(n,i),!i?.length)return;const o=i.find((e=>this.isPointNearTool(n,e,t.currentPoints.canvas,6)));if(!o)return;const a=o;this.configuration.changeTextCallback(o,e.detail,this._doneChangingTextCallback.bind(this,n,a)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const o=a[e],{annotationUID:s,data:l}=o,{handles:d,text:c}=l,{points:h,activeHandleIndex:u}=d;r.annotationUID=s;const{color:g,lineWidth:m,lineDash:v}=this.getAnnotationStyle({annotation:o,styleSpecifier:r}),p=h.map((e=>i.worldToCanvas(e)));let f;ue(o)||this.editData||null===u||(f=[p[u]]),f&&xr(t,s,"0",p,{color:g,lineWidth:m});const w="1";if(this.configuration.arrowFirst?gf(t,s,w,p[1],p[0],{color:g,width:m,lineDash:v}):gf(t,s,w,p[0],p[1],{color:g,width:m,lineDash:v}),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!c)continue;const I=this.getLinkedTextBoxStyle(r,o);if(!I.visibility){l.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}if(!l.handles.textBox.hasMoved){const e=p[1];l.handles.textBox.worldPosition=i.canvasToWorld(e)}const E=i.worldToCanvas(l.handles.textBox.worldPosition),C=Yr(t,s,"1",[c],E,p,{},I),{x:_,y:b,width:T,height:D}=C;l.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([_,b]),topRight:i.canvasToWorld([_+T,b]),bottomLeft:i.canvasToWorld([_,b+D]),bottomRight:i.canvasToWorld([_+T,b+D])}}return n}))}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.text=n;const i=(0,ie.getEnabledElement)(e),{renderingEngine:o}=i,a=Vo(e,this.getToolName());oi(a),Qe(t,e)}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function rI(e){return e(prompt("Enter your annotation:"))}function sI(e,t,n){return n(prompt("Enter your annotation:"))}ae(aI,"toolName",void 0),aI.toolName="ArrowAnnotate";const lI=aI;class dI extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:cI}}),ae(this,"angleStartedNotYetCompleted",void 0),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;cr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),oi(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l,d]=r.handles.points,c=a.worldToCanvas(s),h=a.worldToCanvas(l),u={start:{x:c[0],y:c[1]},end:{x:h[0],y:h[1]}};if(Xr([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]])<=i)return!0;if(!d)return!1;const g=a.worldToCanvas(d),m={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}};return Xr([m.start.x,m.start.y],[m.end.x,m.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),cr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;oi(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&2===s.handles.points.length)return void(this.editData.handleIndex=2);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),f=u.map((e=>i.worldToCanvas(e)));let w;if(h.cachedStats[r]&&null!=h.cachedStats[r].angle?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={angle:null},this._calculateCachedStats(d,s,e)),ue(d)||this.editData||null===g||(w=[f[g]]),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;w&&xr(t,c,"0",f,{color:m,lineDash:p,lineWidth:v});let I="1";if(jr(t,c,I,f[0],f[1],{color:m,width:v,lineDash:p}),n=!0,3!==f.length)return n;if(I="2",jr(t,c,I,f[1],f[2],{color:m,width:v,lineDash:p}),!h.cachedStats[r]?.angle)continue;const E=this.getLinkedTextBoxStyle(l,d);if(!E.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const C=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=f[1];h.handles.textBox.worldPosition=i.canvasToWorld(e)}const _=i.worldToCanvas(h.handles.textBox.worldPosition),b=Yr(t,c,"1",C,_,f,{},E),{x:T,y:D,width:S,height:y}=b;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([T,D]),topRight:i.canvasToWorld([T+S,D]),bottomLeft:i.canvasToWorld([T,D+y]),bottomRight:i.canvasToWorld([T+S,D+y])}}return n})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport;if(3!==i.handles.points.length)return;const a=i.handles.points[0],r=i.handles.points[1],s=i.handles.points[2],{cachedStats:l}=i,d=Object.keys(l);for(let e=0;e<d.length;e++){const n=d[e],i=Bf([a,r],[r,s]),{dimensions:o,imageData:c}=this.getTargetIdImage(n,t);this.isHandleOutsideImage=[a,r,s].map((e=>ie.utilities.transformWorldToIndex(c,e))).some((e=>!ie.utilities.indexWithinDimensions(e,o))),l[n]={angle:isNaN(i)?"Incomplete Angle":i}}return e.invalidated=!1,Qe(e,o),l}}function cI(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return isNaN(i)?[`${i}`]:[`${tc(i)} ${String.fromCharCode(176)}`]}ae(dI,"toolName",void 0),dI.toolName="Angle";const hI=dI,uI=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const i=2===t[0].length?[0,0]:[0,0,0],o=t.length;for(const e of t)i[0]+=e[0]/o,i[1]+=e[1]/o,3===i.length&&(i[2]+=e[2]/o);return i};class gI extends Gr{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:mI,showArcLines:!1}}),e=this,ae(this,"angleStartedNotYetCompleted",void 0),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;cr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),oi(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{distanceToPoint:s,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:r.handles.points,canvasCoords:n,proximity:i});return s<=i||l<=i})),ae(this,"toolSelectedCallback",(function(t,n,i,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6;const r=t.detail,{element:s}=r;n.highlighted=!0;const l=Vo(s,e.getToolName()),d=(0,ie.getEnabledElement)(s),{renderingEngine:c,viewport:h}=d,{isNearFirstLine:u,isNearSecondLine:g}=e.distanceToLines({viewport:h,points:n.data.handles.points,canvasCoords:o,proximity:a});e.editData={annotation:n,viewportIdsToRender:l,movingTextBox:!1,isNearFirstLine:u,isNearSecondLine:g},e._activateModify(s),cr(s),oi(l),t.preventDefault()})),ae(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&s.handles.points.length<4)return dr(n),void(this.editData.handleIndex=s.handles.points.length);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i),this.editData=null,this.isDrawing=!1})),ae(this,"_mouseDownCallback",(e=>{const{annotation:t,handleIndex:n}=this.editData,i=e.detail,{element:o,currentPoints:a}=i,r=a.world,{data:s}=t;return 1===n?(s.handles.points[1]=r,void(this.editData.hasMoved=s.handles.points[1][0]!==s.handles.points[0][0]||s.handles.points[1][1]!==s.handles.points[0][0])):3===n?(s.handles.points[3]=r,this.editData.hasMoved=s.handles.points[3][0]!==s.handles.points[2][0]||s.handles.points[3][1]!==s.handles.points[2][0],void(this.angleStartedNotYetCompleted=!1)):(this.editData.hasMoved=!1,cr(o),s.handles.points[2]=s.handles.points[3]=r,void(this.editData.handleIndex=s.handles.points.length-1))})),ae(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r,isNearFirstLine:s,isNearSecondLine:l}=this.editData,{data:d}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a&&(s||l)){const{deltaPoints:e}=t,n=e.world,o=d.handles.points;s?[o[0],o[1]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})):l&&[o[2],o[3]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;d.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const c=(0,ie.getEnabledElement)(n),{renderingEngine:h}=c;oi(o)})),ae(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;o.handles.points.length<4&&vt(t.annotationUID),t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,ie.getEnabledElement)(e),{renderingEngine:r}=a;return oi(n),i&&et(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(se.MOUSE_DOWN,this._mouseDownCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DOWN,this._mouseDownCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),f=u.map((e=>i.worldToCanvas(e)));let w;if(h.cachedStats[r]&&null!=h.cachedStats[r].angle?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={angle:null,arc1Angle:null,arc2Angle:null,points:{world:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null},canvas:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null}}},this._calculateCachedStats(d,s,e)),ue(d)||this.editData||null===g||(w=[f[g]]),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;w&&xr(t,c,"0",f,{color:m,lineDash:p,lineWidth:v});const I=[f[0],f[1]],E=[f[2],f[3]];let C="line1";if(jr(t,c,C,I[0],I[1],{color:m,width:v,lineDash:p}),n=!0,f.length<4)return n;C="line2",jr(t,c,C,E[0],E[1],{color:m,width:v,lineDash:p}),C="linkLine",jr(t,c,C,uI(I[0],I[1]),uI(E[0],E[1]),{color:m,lineWidth:"1",lineDash:"1,4"});const{arc1Start:_,arc1End:b,arc2End:T,arc2Start:D}=h.cachedStats[r].points.canvas,{arc1Angle:S,arc2Angle:y}=h.cachedStats[r];if(this.configuration.showArcLines&&(C="arc1",jr(t,c,C,_,b,{color:m,lineWidth:"1"}),C="arc2",jr(t,c,C,D,T,{color:m,lineWidth:"1"})),!h.cachedStats[r]?.angle)continue;const x=this.getLinkedTextBoxStyle(l,d);if(!x.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const M=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=Zr(f);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const O=i.worldToCanvas(h.handles.textBox.worldPosition),P=Yr(t,c,"cobbAngleText",M,O,f,{},x),{x:A,y:R,width:L,height:N}=P;if(h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([A,R]),topRight:i.canvasToWorld([A+L,R]),bottomLeft:i.canvasToWorld([A,R+N]),bottomRight:i.canvasToWorld([A+L,R+N])},this.configuration.showArcLines){const e="arcAngle1",n=[`${S.toFixed(2)} ${String.fromCharCode(176)}`],i=uI(_,b);zr(t,c,e,n,i,{...x,padding:3});const o="arcAngle2",a=[`${y.toFixed(2)} ${String.fromCharCode(176)}`],r=uI(D,T);zr(t,c,o,a,r,{...x,padding:3})}}return n})),ae(this,"distanceToLines",(e=>{let{viewport:t,points:n,canvasCoords:i,proximity:o}=e;const[a,r,s,l]=n,d=t.worldToCanvas(a),c=t.worldToCanvas(r),h=t.worldToCanvas(s),u=t.worldToCanvas(l),g={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}},m={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}},v=Xr([g.start.x,g.start.y],[g.end.x,g.end.y],[i[0],i[1]]),p=Xr([m.start.x,m.start.y],[m.end.x,m.end.y],[i[0],i[1]]);let f=!1,w=!1;return v<=o?f=!0:p<=o&&(w=!0),{distanceToPoint:v,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:w}})),ae(this,"getArcsStartEndPoints",(e=>{let{firstLine:t,secondLine:n,mid1:i,mid2:o}=e;const a=[i,o],r=Bf(t,a),s=Bf(n,a),l=r>90?1:0,d=s>90?0:1,c=uI(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),u=.1,g=uI(t[0],t[1]),m=uI(n[0],n[1]),v=[t[l][0]-g[0],t[l][1]-g[1]],p=Math.sqrt(v[0]**2+v[1]**2),f=[v[0]/p,v[1]/p],w=[g[0]+f[0]*h*u,g[1]+f[1]*h*u],I=[c[0]-i[0],c[1]-i[1]],E=Math.sqrt(I[0]**2+I[1]**2),C=[I[0]/E,I[1]/E],_=[i[0]+C[0]*h*u,i[1]+C[1]*h*u],b=[n[d][0]-m[0],n[d][1]-m[1]],T=Math.sqrt(b[0]**2+b[1]**2),D=[b[0]/T,b[1]/T],S=[m[0]+D[0]*h*u,m[1]+D[1]*h*u],y=[c[0]-o[0],c[1]-o[1]],x=Math.sqrt(y[0]**2+y[1]**2),M=[y[0]/x,y[1]/x];return{arc1Start:w,arc1End:_,arc2Start:S,arc2End:[o[0]+M[0]*h*u,o[1]+M[1]*h*u],arc1Angle:r>90?180-r:r,arc2Angle:s>90?180-s:s}})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data;if(4!==i.handles.points.length)return;const o=[null,null],a=[null,null];let r=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){const n=Sn.vec3.distance(i.handles.points[e],i.handles.points[t]);n<r&&(r=n,o[1]=i.handles.points[e],o[0]=i.handles.points[(e+1)%2],a[0]=i.handles.points[t],a[1]=i.handles.points[2+(t-1)%2])}const{viewport:s}=n,{element:l}=s,d=i.handles.points.map((e=>s.worldToCanvas(e))),c=[d[0],d[1]],h=[d[2],d[3]],u=uI(c[0],c[1]),g=uI(h[0],h[1]),{arc1Start:m,arc1End:v,arc2End:p,arc2Start:f,arc1Angle:w,arc2Angle:I}=this.getArcsStartEndPoints({firstLine:c,secondLine:h,mid1:u,mid2:g}),{cachedStats:E}=i,C=Object.keys(E);for(let e=0;e<C.length;e++)E[C[e]]={angle:Bf(o,a),arc1Angle:w,arc2Angle:I,points:{canvas:{arc1Start:m,arc1End:v,arc2End:p,arc2Start:f},world:{arc1Start:s.canvasToWorld(m),arc1End:s.canvasToWorld(v),arc2End:s.canvasToWorld(p),arc2Start:s.canvasToWorld(f)}}};return e.invalidated=!1,Qe(e,l),E}}function mI(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return[`${i.toFixed(2)} ${String.fromCharCode(176)}`]}ae(gI,"toolName",void 0),gI.toolName="CobbAngle";const vI=gI,{transformWorldToIndex:pI}=ie.utilities;class fI extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:wI,displayBothAxesDistances:!1}}),ae(this,"startedDrawing",void 0),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{if(this.startedDrawing)return;this.startedDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;if(!(r instanceof ie.StackViewport))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");cr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};gt(g,i);const m=Vo(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),oi(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>!1)),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.startedDrawing&&1===s.handles.points.length)return void(this.editData.handleIndex=1);this.startedDrawing=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o),a&&et(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;oi(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,this.startedDrawing=!1,t.annotationUID}})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u}=h.handles;l.annotationUID=c;const g=this.getStyle("color",l,d),m=u.map((e=>i.worldToCanvas(e)));if(h.cachedStats[r]&&null!=h.cachedStats[r].xValues?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(d,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let v="0";if(yr(t,c,v,m[0],{color:g},0),n=!0,2!==m.length)return n;if(v="1",yr(t,c,v,m[1],{color:g},1),h.cachedStats[r].isUnitless){const e=`${c}-line-1`;jr(t,c,"1",m[0],m[1],{color:g,width:1,shadow:this.configuration.shadow},e)}else{const e=m[0],n=m[1],i=n[1]-e[1],o=n[0]-e[0];let a=[0,0];a=h.cachedStats[r].isHorizontal?[e[0]+o,e[1]]:[e[0],e[1]+i];let s=`${c}-line-1`,l="1";jr(t,c,l,m[0],a,{color:g,width:1,shadow:this.configuration.shadow},s),s=`${c}-line-2`,l="2",jr(t,c,l,m[1],a,{color:g,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}const p=this.getLinkedTextBoxStyle(l,d);if(!p.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const f=this.configuration.getTextLines(h,r,this.configuration);if(!h.handles.textBox.hasMoved){const e=m[1];h.handles.textBox.worldPosition=i.canvasToWorld(e)}const w=i.worldToCanvas(h.handles.textBox.worldPosition),I=Yr(t,c,"1",f,w,m,{},p),{x:E,y:C,width:_,height:b}=I;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([E,C]),topRight:i.canvasToWorld([E+_,C]),bottomLeft:i.canvasToWorld([E,C+b]),bottomRight:i.canvasToWorld([E+_,C+b])}}return n})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,i){}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const r=Vo(o,this.getToolName());let s,l=!1;n.worldPosition||(s=a.handles.points.findIndex((e=>e===n))),this.editData={handleIndex:s,annotation:t,viewportIdsToRender:r},this._activateModify(o),cr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;oi(r),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport;if(2!==i.handles.points.length)return;const{cachedStats:a}=i,r=Object.keys(a);for(let e=0;e<r.length;e++){const o=r[e],s=this.getTargetIdImage(o,t);if(!s)continue;const{imageData:l}=s,d=i.handles.points[0],c=i.handles.points[1],h=pI(l,d),u=pI(l,c),{values:g,units:m}=Nn(s,[h]),{values:v,units:p}=Nn(s,[u]);let f,w,I,E,C=!1;if(m[0]!==p[0]||m[1]!==p[1]||"raw"===m[0]&&"raw"===p[0]){const e=nl(d,c);f=[e,0],w=[e,0],I=["px"],C=!0}else{const e=n.viewport.worldToCanvas(d),t=n.viewport.worldToCanvas(c),i=t[1]-e[1],o=t[0]-e[0];E=Math.abs(o)>Math.abs(i),f=[g[0],v[0]],w=[g[1],v[1]],I=[m[0],m[1]]}a[o]={xValues:f,yValues:w,isHorizontal:E,units:I,isUnitless:C}}return e.invalidated=!1,Qe(e,o),a}}function wI(e,t,n){const i=e.cachedStats[t],{xValues:o,yValues:a,units:r,isUnitless:s,isHorizontal:l}=i;if(s)return[`${tc(o[0])} px`];if(n.displayBothAxesDistances){const e=Math.abs(o[1]-o[0]),t=Math.abs(a[1]-a[0]);return[`${tc(e)} ${r[0]}`,`${tc(t)} ${r[1]}`]}if(l){const e=Math.abs(o[1]-o[0]);return[`${tc(e)} ${r[0]}`]}{const e=Math.abs(a[1]-a[0]);return[`${tc(e)} ${r[1]}`]}}ae(fI,"toolName",void 0),fI.toolName="UltrasoundDirectionalTool";const II=fI;class EI extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:CI,changeTextCallback:_I,canvasPosition:[10,10],canvasSize:10}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=EI.createAnnotation({metadata:{...r.getViewReference(),referencedImageId:h}});gt(u,i);const g=Vo(i,this.getToolName());return e.preventDefault(),oi(g),this.configuration.getTextCallback((e=>{if(!e)return vt(u.annotationUID),oi(g),void(this.isDrawing=!1);u.data.text=e,et(u),oi(g)})),u})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{canvasPosition:s,canvasSize:l}=this.configuration;return!!s?.length&&Math.abs(n[0]-s[0]+l/2)<=l/2&&Math.abs(n[1]-s[1]+l/2)<=l/2})),ae(this,"toolSelectedCallback",((e,t)=>{t.highlighted=!0,e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this._deactivateModify(n),dr(n)})),ae(this,"doubleClickCallback",(e=>{const t=e.detail,{element:n}=t;let i=st(this.getToolName(),n);if(i=this.filterInteractableAnnotationsForElement(n,i),!i?.length)return;const o=i.find((e=>this.isPointNearTool(n,e,t.currentPoints.canvas,6)));if(!o)return;const a=o;this.configuration.changeTextCallback(o,e.detail,this._doneChangingTextCallback.bind(this,n,a)),this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const o=a[e],{annotationUID:s}=o;r.annotationUID=s;const{color:l}=this.getAnnotationStyle({annotation:o,styleSpecifier:r}),{canvasPosition:d,canvasSize:c}=this.configuration;if(d?.length&&gf(t,s,"1",d.map((e=>e+c)),d,{color:l,width:1}),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n}return n}))}cancel(){}handleSelectedCallback(e,t,n){}_doneChangingTextCallback(e,t,n){t.data.text=n;const i=(0,ie.getEnabledElement)(e),{renderingEngine:o}=i,a=Vo(e,this.getToolName());oi(a),Qe(t,e)}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function CI(e){return e(prompt("Enter your annotation:"))}function _I(e,t,n){return n(prompt("Enter your annotation:"))}ae(EI,"toolName",void 0),EI.toolName="KeyImage";const bI=EI,TI="magnify-viewport";class DI extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}),ae(this,"editData",void 0),ae(this,"_hasBeenRemoved",!1),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,ie.getEnabledElement)(n),{viewport:a,renderingEngine:r}=o;if(!(a instanceof ie.StackViewport))throw new Error("MagnifyTool only works on StackViewports");const s=this._getReferencedImageId(a);if(!s)throw new Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");const l=Vo(n,this.getToolName());return this.editData={referencedImageId:s,viewportIdsToRender:l,enabledElement:o,renderingEngine:r,currentPoints:i},this._createMagnificationViewport(),this._activateDraw(n),cr(n),e.preventDefault(),oi(l),!0})),ae(this,"preTouchStartCallback",(e=>{this.preMouseDownCallback(e)})),ae(this,"_createMagnificationViewport",(()=>{const{enabledElement:e,referencedImageId:t,viewportIdsToRender:n,renderingEngine:i,currentPoints:o}=this.editData,{viewport:a}=e,{element:r}=a,s=a.getProperties(),{canvas:l,world:d}=o;let c;if(c=r.querySelector(".magnifyTool"),null===c){const e=document.createElement("div");e.classList.add("magnifyTool"),e.style.display="block",e.style.width=`${this.configuration.magnifyWidth}px`,e.style.height=`${this.configuration.magnifyHeight}px`,e.style.position="absolute",c=e,r.querySelector(".viewport-element").appendChild(e);const t={viewportId:TI,type:ie.Enums.ViewportType.STACK,element:c};i.enableElement(t)}c.style.top=l[1]-this.configuration.magnifyHeight/2+"px",c.style.left=l[0]-this.configuration.magnifyWidth/2+"px";const h=i.getViewport(TI);h.setStack([t]).then((()=>{if(this._hasBeenRemoved)return;h.setProperties(s);const{parallelScale:e}=a.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:i}=h.getCamera(),o=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),r=[d[0],d[1],d[2]],l=[r[0]+o*i[0],r[1]+o*i[1],r[2]+o*i[2]];h.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:r,position:l}),h.render()})),c.style.display="block",oi(n)})),ae(this,"_dragCallback",(e=>{const t=e.detail,{deltaPoints:n,element:i,currentPoints:o}=t,a=n.world,r=o.canvas,s=(0,ie.getEnabledElement)(i),{renderingEngine:l}=s,d=l.getViewport(TI),c=i.querySelector(".magnifyTool");if(!c)return;c.style.top=r[1]-this.configuration.magnifyHeight/2+"px",c.style.left=r[0]-this.configuration.magnifyWidth/2+"px";const{focalPoint:h,position:u}=d.getCamera(),g=[u[0]+a[0],u[1]+a[1],u[2]+a[2]],m=[h[0]+a[0],h[1]+a[1],h[2]+a[2]];d.setCamera({focalPoint:m,position:g}),d.render()})),ae(this,"_dragEndCallback",(e=>{const{element:t}=e.detail,n=(0,ie.getEnabledElement)(t),{renderingEngine:i}=n;i.disableElement(TI);const o=t.querySelector(".viewport-element"),a=o.querySelector(".magnifyTool");o.removeChild(a),this._deactivateDraw(t),dr(t),this._hasBeenRemoved=!0})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,this._hasBeenRemoved=!1,e.addEventListener(se.MOUSE_UP,this._dragEndCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._dragEndCallback),e.addEventListener(se.TOUCH_END,this._dragEndCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._dragEndCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener(se.TOUCH_END,this._dragEndCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)}))}_getReferencedImageId(e){const t=this.getTargetId(e);let n;return e instanceof ie.StackViewport&&(n=t.split("imageId:")[1]),n}}ae(DI,"toolName",void 0),DI.toolName="Magnify";const SI=DI,yI=125,xI=e=>e.uid!==e.referencedId;class MI{constructor(e){let{magnifyViewportId:t,sourceEnabledElement:n,radius:i=yI,position:o=[0,0],zoomFactor:a,autoPan:r}=e;ae(this,"_viewportId",void 0),ae(this,"_sourceEnabledElement",void 0),ae(this,"_enabledElement",null),ae(this,"_sourceToolGroup",null),ae(this,"_magnifyToolGroup",null),ae(this,"_isViewportReady",!1),ae(this,"_radius",0),ae(this,"_resized",!1),ae(this,"_resizeViewportAsync",void 0),ae(this,"_canAutoPan",!1),ae(this,"_autoPan",void 0),ae(this,"position",void 0),ae(this,"zoomFactor",void 0),ae(this,"visible",void 0),this._viewportId=t??ie.utilities.uuidv4(),this._sourceEnabledElement=n,this._autoPan=r,this.radius=i,this.position=o,this.zoomFactor=a,this.visible=!0,this._browserMouseDownCallback=this._browserMouseDownCallback.bind(this),this._browserMouseUpCallback=this._browserMouseUpCallback.bind(this),this._handleToolModeChanged=this._handleToolModeChanged.bind(this),this._mouseDragCallback=this._mouseDragCallback.bind(this),this._resizeViewportAsync=rn(this._resizeViewport.bind(this),1),this._initialize()}get sourceEnabledElement(){return this._sourceEnabledElement}get viewportId(){return this._viewportId}get radius(){return this._radius}set radius(e){Math.abs(this._radius-e)>1e-5&&(this._radius=e,this._resized=!0)}update(){const{radius:e,position:t,visible:n}=this,{viewport:i}=this._enabledElement,{element:o}=i,a=2*e,[r,s]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(o.style,{display:n?"block":"hidden",width:`${a}px`,height:`${a}px`,left:-e+"px",top:-e+"px",transform:`translate(${r}px, ${s}px)`}),this._isViewportReady&&(this._syncViewports(),i.render())}dispose(){const{viewport:e}=this._enabledElement,{element:t}=e,n=e.getRenderingEngine();this._removeEventListeners(t),n.disableElement(e.id),t.parentNode&&t.parentNode.removeChild(t)}_handleToolModeChanged(e){const{_magnifyToolGroup:t}=this,{toolGroupId:n,toolName:i,mode:o,toolBindingsOptions:a}=e.detail;if(this._sourceToolGroup?.id===n)switch(o){case Ye.Active:t.setToolActive(i,a);break;case Ye.Passive:t.setToolPassive(i);break;case Ye.Enabled:t.setToolEnabled(i);break;case Ye.Disabled:t.setToolDisabled(i);break;default:throw new Error(`Unknow tool mode (${o})`)}}_inheritBorderRadius(e){const t=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");t.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){const e=document.createElement("div"),{radius:t}=this,n=2*t;return e.classList.add("advancedMagnifyTool"),Object.assign(e.style,{display:"block",width:`${n}px`,height:`${n}px`,position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:-t+"px",top:-t+"px",transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParallelScale(e,t,n){const{parallelScale:i}=e.getCamera();return i*(1/n)*(t.canvas.offsetWidth/e.canvas.offsetWidth)}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,t){const n=e.getActors(),i=`${t.id}-toolGroup`,o=Vn(e.id,e.renderingEngineId),a=o.clone(i,(e=>{const t=o.getToolInstance(e);return t instanceof Gr&&!(t instanceof LI)}));return a.addViewport(t.id,t.renderingEngineId),n.filter(xI).forEach((e=>{mu(this.viewportId,[{segmentationId:e.referencedId,type:Ct.Labelmap}])})),{sourceToolGroup:o,magnifyToolGroup:a}}_cloneStack(e,t){const n=e.getImageIds();t.setStack(n).then((()=>{this._isViewportReady=!0,this.update()}))}_cloneVolumes(e,t){const n=e.getActors().filter((e=>!xI(e))).map((e=>({volumeId:e.uid})));return t.setVolumes(n).then((()=>{this._isViewportReady=!0,this.update()})),t}_cloneViewport(e,t){const{viewportId:n}=this,i=e.getRenderingEngine(),{options:o}=e,a={element:t,viewportId:n,type:e.type,defaultOptions:{...o}};i.enableElement(a);const r=i.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,r):this._isVolumeViewport(e)&&this._cloneVolumes(e,r),this._inheritBorderRadius(t);const s=this._cloneToolGroups(e,r);this._sourceToolGroup=s.sourceToolGroup,this._magnifyToolGroup=s.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){const{element:t}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),t.addEventListener("mouseup",this._cancelMouseEventCallback),t.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){const{element:t}=this._enabledElement.viewport;this._canAutoPan=!!e.target?.closest(".advancedMagnifyTool"),document.addEventListener("mouseup",this._browserMouseUpCallback),t.removeEventListener("mouseup",this._cancelMouseEventCallback),t.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!je.isInteractingWithTool)return;const{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:o}=i,{canvas:a}=n,{radius:r}=this,s=[r,r],l=nl(s,a),d=r-t.padding;if(l<=d)return;const c=l-d,h=Sn.vec2.sub(Sn.vec2.create(),a,s);Sn.vec2.normalize(h,h),Sn.vec2.scale(h,h,c);const u=Sn.vec2.add(Sn.vec2.create(),this.position,h),g=o(this.position),m=o(u),v=Sn.vec3.sub(Sn.vec3.create(),m,g),p={points:{currentPosition:{canvas:this.position,world:g},newPosition:{canvas:u,world:m}},delta:{canvas:h,world:v}};t.callback(p)}_addBrowserEventListeners(e){document.addEventListener("mousedown",this._browserMouseDownCallback,!0),e.addEventListener("mousedown",this._cancelMouseEventCallback),e.addEventListener("mouseup",this._cancelMouseEventCallback),e.addEventListener("mousemove",this._cancelMouseEventCallback),e.addEventListener("dblclick",this._cancelMouseEventCallback)}_removeBrowserEventListeners(e){document.removeEventListener("mousedown",this._browserMouseDownCallback,!0),document.removeEventListener("mouseup",this._browserMouseUpCallback),e.removeEventListener("mousedown",this._cancelMouseEventCallback),e.removeEventListener("mouseup",this._cancelMouseEventCallback),e.removeEventListener("mousemove",this._cancelMouseEventCallback),e.removeEventListener("dblclick",this._cancelMouseEventCallback)}_addEventListeners(e){ie.eventTarget.addEventListener(se.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){ie.eventTarget.removeEventListener(se.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(t,i),this._enabledElement=(0,ie.getEnabledElement)(i)}_syncViewportsCameras(e,t){const n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParallelScale(e,t,this.zoomFactor),{focalPoint:o,position:a,viewPlaneNormal:r}=t.getCamera(),s=Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2)+Math.pow(o[2]-a[2],2)),l=[n[0],n[1],n[2]],d=[l[0]+s*r[0],l[1]+s*r[1],l[2]+s*r[2]];t.setCamera({parallelScale:i,focalPoint:l,position:d})}_syncStackViewports(e,t){t.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){const{viewport:e}=this._sourceEnabledElement,{viewport:t}=this._enabledElement,n=e.getProperties();t.getImageData()&&(t.setProperties(n),this._syncViewportsCameras(e,t),this._isStackViewport(e)&&this._syncStackViewports(e,t),this._syncViewportsCameras(e,t),t.render())}_resizeViewport(){const{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}const OI=1-ie.CONSTANTS.EPSILON,{Events:PI}=ie.Enums;class AI{constructor(){ae(this,"_magnifyViewportsMap",void 0),ae(this,"createViewport",((e,t)=>{const{magnifyViewportId:n,sourceEnabledElement:i,position:o,radius:a,zoomFactor:r,autoPan:s}=t,{viewport:l}=i,{element:d}=l,c=new MI({magnifyViewportId:n,sourceEnabledElement:i,radius:a,position:o,zoomFactor:r,autoPan:s});return this._addSourceElementEventListener(d),this._magnifyViewportsMap.set(c.viewportId,{annotation:e,magnifyViewport:c,magnifyViewportInfo:t}),c})),ae(this,"_annotationRemovedCallback",(e=>{const{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this.destroyViewport(t.data.magnifyViewportId)})),ae(this,"_newStackImageCallback",(e=>{const{viewportId:t,imageId:n}=e.detail,i=this._getMagnifyViewportsMapEntriesBySourceViewportId(t),{viewport:o}=(0,ie.getEnabledElementByViewportId)(t);o.stackActorReInitialized&&this._reset(t),i.forEach((e=>{let{annotation:t}=e;t.metadata.referencedImageId=n,t.invalidated=!0}))})),ae(this,"_newVolumeImageCallback",(e=>{const{renderingEngineId:t,viewportId:n}=e.detail,i=(0,ie.getRenderingEngine)(t).getViewport(n),{viewPlaneNormal:o}=i.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach((e=>{let{annotation:t}=e;const{viewPlaneNormal:n}=t.metadata;if(!(Math.abs(Sn.vec3.dot(n,o))>OI))return;const{handles:a}=t.data,r=i.canvasToWorld([0,0]),s=Sn.vec3.sub(Sn.vec3.create(),r,a.points[0]),l=Sn.vec3.dot(s,o),d=Sn.vec3.scale(Sn.vec3.create(),o,l);for(let e=0,t=a.points.length;e<t;e++){const t=a.points[e];t[0]+=d[0],t[1]+=d[1],t[2]+=d[2]}t.invalidated=!0}))})),this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){return AI._singleton=AI._singleton??new AI,AI._singleton}getViewport(e){return this._magnifyViewportsMap.get(e)?.magnifyViewport}dispose(){this._removeEventListeners(),this._destroyViewports()}destroyViewport(e){const t=this._magnifyViewportsMap.get(e);if(t){const{magnifyViewport:n}=t,{viewport:i}=n.sourceEnabledElement,{element:o}=i;this._removeSourceElementEventListener(o),n.dispose(),this._magnifyViewportsMap.delete(e)}}_destroyViewports(){Array.from(this._magnifyViewportsMap.keys()).forEach((e=>this.destroyViewport(e)))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter((t=>{let{magnifyViewport:n}=t;const{viewport:i}=n.sourceEnabledElement;return i.id===e}))}_reset(e){this._getMagnifyViewportsMapEntriesBySourceViewportId(e).forEach((t=>{let{magnifyViewport:n,annotation:i,magnifyViewportInfo:o}=t;this.destroyViewport(n.viewportId);const a=(0,ie.getEnabledElementByViewportId)(e);this.createViewport(i,{...o,sourceEnabledElement:{...a}})}))}_addEventListeners(){ie.eventTarget.addEventListener(se.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){ie.eventTarget.removeEventListener(se.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(PI.STACK_NEW_IMAGE,this._newStackImageCallback);const t=e=>{const{viewportId:t}=e.detail;this._reset(t)};e.addEventListener(PI.STACK_VIEWPORT_NEW_STACK,t);const n=e=>{const{viewportId:t}=e.detail;this._reset(t)};e.addEventListener(PI.VOLUME_VIEWPORT_NEW_VOLUME,n),e.addEventListener(PI.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.newStackHandler=t,e.newVolumeHandler=n}_removeSourceElementEventListener(e){e.removeEventListener(PI.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(PI.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.removeEventListener(PI.STACK_VIEWPORT_NEW_STACK,e.newStackHandler),e.removeEventListener(PI.VOLUME_VIEWPORT_NEW_VOLUME,e.newVolumeHandler),delete e.newStackHandler,delete e.newVolumeHandler}_initialize(){this._addEventListeners()}}ae(AI,"_singleton",void 0);var RI=function(e){return e.ShowZoomFactorsList="showZoomFactorsList",e}(RI||{});class LI extends Gr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:3,zoomFactorList:[1.5,2,2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:rc.Secondary,modifierKey:sc.Shift}]}}}}),ae(this,"magnifyViewportManager",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,ie.getEnabledElement)(i),{viewport:a,renderingEngine:r}=o,s=n.world,l=n.canvas,{magnifyingGlass:d}=this.configuration,{radius:c,zoomFactor:h,autoPan:u}=d,g=this._getCanvasHandlePoints(l,c),m=a.getCamera(),{viewPlaneNormal:v,viewUp:p}=m,f=this.getReferencedImageId(a,s,v,p),w=ie.utilities.uuidv4(),I=ie.utilities.uuidv4(),E=a.getFrameOfReferenceUID(),C={annotationUID:w,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...v],viewUp:[...p],FrameOfReferenceUID:E,referencedImageId:f},data:{sourceViewportId:a.id,magnifyViewportId:I,zoomFactor:h,isCanvasAnnotation:!0,handles:{points:g,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(C,{magnifyViewportId:I,sourceEnabledElement:o,position:l,radius:c,zoomFactor:h,autoPan:{enabled:u.enabled,padding:u.padding,callback:e=>{const t=C.data.handles.points,{canvas:n}=e.delta;for(let e=0,i=t.length;e<i;e++){const i=t[e];i[0]+=n[0],i[1]+=n[1],C.invalidated=!0}}}}),gt(C,i);const _=Vo(i,this.getToolName());return e.preventDefault(),oi(_),C})),ae(this,"onSetToolDisabled",(()=>{this.magnifyViewportManager.dispose(),lt().forEach((e=>{e.metadata.toolName===this.getToolName()&&vt(e.annotationUID)}))})),ae(this,"isPointNearTool",((e,t,n,i)=>{const{data:o}=t,{points:a}=o.handles,r=a,s=r[0],l=r[2],d=r[3],c=.5*Math.abs(l[1]-s[1]),h=xw([[d[0]+c,s[1]+c],n]);return Math.abs(h-c)<2*i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Vo(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},cr(i),this._activateModify(i),oi(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Vo(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o),cr(o),oi(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),dr(n),this.editData=null,this.isDrawing=!1,oi(o),a&&et(i)})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{deltaPoints:n}=t,i=n?.canvas??[0,0,0],{annotation:o,viewportIdsToRender:a}=this.editData,{points:r}=o.data.handles;r.forEach((e=>{e[0]+=i[0],e[1]+=i[1]})),o.invalidated=!0,this.editData.hasMoved=!0,oi(a)})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.canvas;r.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;oi(o)})),ae(this,"_dragHandle",(e=>{const t=e.detail,{annotation:n}=this.editData,{data:i}=n,{points:o}=i.handles,a=o,r=a[0],s=a[2],l=a[3],d=.5*Math.abs(s[1]-r[1]),c=[l[0]+d,r[1]+d],{currentPoints:h}=t,u=xw([c,h.canvas]),g=this._getCanvasHandlePoints(c,u);o[0]=g[0],o[1]=g[1],o[2]=g[2],o[3]=g[3]})),ae(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),dr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,oi(n),i&&et(t),this.editData=null,t.annotationUID})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;a=a?.filter((e=>e.data.sourceViewportId===i.id));const r=this.filterInteractableAnnotationsForElement(o,a);if(!r?.length)return n;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<r.length;e++){const o=r[e],{annotationUID:a,data:l}=o,{magnifyViewportId:d,zoomFactor:c,handles:h}=l,{points:u,activeHandleIndex:g}=h;s.annotationUID=a,this.getStyle("lineWidth",s,o),this.getStyle("lineDash",s,o);const m=this.getStyle("color",s,o),v=u,p=v[0],f=v[2],w=v[3],I=.5*Math.abs(f[1]-p[1]),E=[w[0]+I,p[1]+I];if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let C;if(!Re(a))continue;ue(o)||this.editData||null===g||(C=[v[g]]),C&&xr(t,a,"0",C,{color:m}),er(t,a,"0",E,I,{color:m,lineWidth:5},`${a}-advancedMagnify`);const _=this.magnifyViewportManager.getViewport(d);_.position=E,_.radius=I,_.zoomFactor=c,_.update(),n=!0}return n})),ae(this,"_getCanvasHandlePoints",((e,t)=>[[e[0],e[1]-t,0],[e[0]+t,e[1],0],[e[0],e[1]+t,0],[e[0]-t,e[1],0]])),this.magnifyViewportManager=AI.getInstance()}showZoomFactorsList(e,t){const{element:n,currentPoints:i}=e.detail,o=(0,ie.getEnabledElement)(n),{viewport:a}=o,{canvas:r}=i,s=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,d=this._getZoomFactorsListDropdown(l,(e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),d.parentElement.removeChild(d),a.render()}));Object.assign(d.style,{left:`${r[0]}px`,top:`${r[1]}px`}),s.appendChild(d),d.focus()}_getZoomFactorsListDropdown(e,t){const{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach((e=>{i.addEventListener(e,(e=>e.stopPropagation()))})),i.addEventListener("change",(e=>{e.stopPropagation(),t(i.value)})),i.addEventListener("keydown",(e=>{((e.keyCode??27===e.which)||"escape"===e.key?.toLowerCase())&&(e.stopPropagation(),t())})),n.forEach((t=>{const n=document.createElement("option");n.label=t,n.title=`Zoom factor ${t.toFixed(1)}`,n.value=t,n.defaultSelected=t===e,i.add(n)})),i}}ae(LI,"toolName",void 0),ae(LI,"Actions",RI),LI.toolName="AdvancedMagnify";class NI extends Hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}),ae(this,"isDrawing",!1),ae(this,"isHandleOutsideImage",!1),ae(this,"_elementWithCursor",null),ae(this,"_currentCursorWorldPosition",null),ae(this,"_currentCanvasPosition",null),ae(this,"_disableCursorEnabled",!1),ae(this,"mouseMoveCallback",(e=>{const{detail:t}=e,{element:n,currentPoints:i}=t;this._currentCursorWorldPosition=i.world,this._currentCanvasPosition=i.canvas,this._elementWithCursor=n;const o=this.getActiveAnnotation(n);return null===o?(this.createInitialAnnotation(i.world,n),!1):(this.updateAnnotationPosition(n,o),!1)})),ae(this,"createInitialAnnotation",((e,t)=>{const n=(0,ie.getEnabledElement)(t);if(!n)throw new Error("No enabled element found");const{viewport:i,renderingEngine:o}=n;this.isDrawing=!0;const a=i.getCamera(),{viewPlaneNormal:r,viewUp:s}=a;if(!r||!s)throw new Error("Camera not found");const l=this.getReferencedImageId(i,e,r,s),d=i.getFrameOfReferenceUID(),c={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...s],FrameOfReferenceUID:d,referencedImageId:l},data:{label:"",handles:{points:[[...e]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}};if(st(this.getToolName(),t).length>0)return null;if(null===gt(c,t))return;const h=Vo(t,this.getToolName(),!1);oi(h)})),ae(this,"onCameraModified",(e=>{const t=e.detail,{element:n,previousCamera:i,camera:o}=t,a=(0,ie.getEnabledElement)(n).viewport;if(n!==this._elementWithCursor)return;const r=i.focalPoint,s=o.viewPlaneNormal,l=o.focalPoint,d=[0,0,0];if(Il().subtract(l,r,d),0===d.reduce(((e,t)=>e+t),0))return;const c=Il().dot(d,s);if(Math.abs(c)<.01)return;if(!this._currentCanvasPosition)return;const h=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=h,this.updateAnnotationPosition(n,this.getActiveAnnotation(n))})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i,FrameOfReferenceUID:o}=e,a=this._elementWithCursor===i.element;this.configuration.positionSync&&!a&&this.updateViewportImage(i);const{element:r}=i;let s=st(this.getToolName(),r);if(!s?.length)return n;if(s=this.filterInteractableAnnotationsForElement(r,s),!s?.length)return n;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const o=s[e],{annotationUID:r,data:d}=o,{handles:c}=d,{points:h}=c;if(!r)return n;l.annotationUID=r;const u=parseFloat(this.getStyle("lineWidth",l,o)),g=this.getStyle("lineDash",l,o),m=this.getStyle("color",l,o);if(h[0].some((e=>isNaN(e))))return n;const v=h.map((e=>i.worldToCanvas(e)));if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Re(r))continue;const p={upper:"upper",right:"right",lower:"lower",left:"left"},[f,w]=v[0],I=a?20:7,E=a?5:7;jr(t,r,p.upper,[f,w-(I/2+E)],[f,w-I/2],{color:m,lineDash:g,lineWidth:u}),jr(t,r,p.lower,[f,w+(I/2+E)],[f,w+I/2],{color:m,lineDash:g,lineWidth:u}),jr(t,r,p.right,[f+(I/2+E),w],[f+I/2,w],{color:m,lineDash:g,lineWidth:u}),jr(t,r,p.left,[f-(I/2+E),w],[f-I/2,w],{color:m,lineDash:g,lineWidth:u}),n=!0}return n})),this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=ai(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ie.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&cr(e.viewport.element)}))}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=ai(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ie.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&dr(e.viewport.element)}))}getActiveAnnotation(e){const t=st(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){const n=this._currentCursorWorldPosition;if(!n)return;if(!t.data?.handles?.points)return;t.data.handles.points=[[...n]],t.invalidated=!0;const i=Vo(e,this.getToolName(),!1);(0,ie.getEnabledElement)(e)&&oi(i)}filterInteractableAnnotationsForElement(e,t){if(!(t instanceof Array)||0===t.length)return[];const n=t[0],i=(0,ie.getEnabledElement)(e)?.viewport;if(!i)return[];const o=i.getCamera(),{viewPlaneNormal:a,focalPoint:r}=o;if(!a||!r)return[];const s=n.data?.handles?.points;if(!(s instanceof Array)||1!==s.length)return[];const l=s[0],d=ie.utilities.planar.planeEquation(a,r);return ie.utilities.planar.planeDistanceToPoint(d,l)<this.configuration.displayThreshold?[n]:[]}updateViewportImage(e){const t=this._currentCursorWorldPosition;if(t&&!t.some((e=>isNaN(e))))if(e instanceof ie.StackViewport){const n=ie.utilities.getClosestStackImageIndexForPoint(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof ie.VolumeViewport){const{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;const o=ie.utilities.planar.planeEquation(i,n),a=ie.utilities.planar.planeDistanceToPoint(o,t,!0);if(Math.abs(a)<.5)return;const r=Sn.vec3.normalize(Sn.vec3.create(),Sn.vec3.fromValues(...i)),s=Sn.vec3.scale(Sn.vec3.create(),r,a),l=Sn.vec3.add(Sn.vec3.create(),Sn.vec3.fromValues(...n),s);{e.setCamera({focalPoint:l});const t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}ae(NI,"toolName",void 0),NI.toolName="ReferenceCursors";const UI=NI,kI=[];class VI extends Hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{viewportId:"",scaleLocation:"bottom"}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",null),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"_init",(()=>{const e=(0,ie.getRenderingEngines)()[0];if(!e)return;const t=ai(this.toolGroupId).viewportsInfo;if(!t)return;const n=t.map((e=>(0,ie.getEnabledElementByIds)(e.viewportId,e.renderingEngineId)));let{viewport:i}=n[0];const{FrameOfReferenceUID:o}=n[0];if(this.configuration.viewportId&&n.forEach((e=>{e.viewport.id==this.configuration.viewportId&&(i=e.viewport)})),!i)return;const{viewUp:a,viewPlaneNormal:r}=i.getCamera(),s=ie.utilities.getViewportImageCornersInWorld(i);let l=this.editData.annotation;const d=st(this.getToolName(),i.element);if(d.length&&(l=d.filter((e=>e.data.viewportId==i.id))[0]),kI.includes(i.id))this.editData.annotation&&this.editData.annotation.data.viewportId==i.id&&(this.editData.annotation.data.handles.points=s,this.editData.annotation.data.viewportId=i.id);else{const e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...a],FrameOfReferenceUID:o,referencedImageId:null},data:{handles:{points:s},viewportId:i.id}};kI.push(i.id),gt(e,i.element),l=e}this.editData={viewport:i,renderingEngine:e,annotation:l}})),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onCameraModified",(e=>{this.configuration.viewportId=e.detail.viewportId,this._init()})),ae(this,"computeScaleSize",((e,t,n)=>{const i=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let o;return o="top"==n||"bottom"==n?i.filter((t=>t<.6*e&&t>.2*e)):i.filter((e=>e<.6*t&&e>.2*t)),o[0]})),ae(this,"computeEndScaleTicks",((e,t)=>{const n={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]};return{endTick1:[[e[1][0]+n[t][0][0],e[1][1]+n[t][0][0]],[e[1][0]+n[t][1][0],e[1][1]+n[t][1][1]]],endTick2:[[e[0][0]+n[t][0][0],e[0][1]+n[t][0][0]],[e[0][0]+n[t][1][0],e[0][1]+n[t][1][1]]]}})),ae(this,"computeInnerScaleTicks",((e,t,n,i,o)=>{let a;"bottom"==t||"top"==t?a=o[0][0]-i[0][0]:"left"!=t&&"right"!=t||(a=o[0][1]-i[0][1]);const r=[],s=[],l=[];let d=e;e>=50&&(d=e/10);const c=a/d;for(let e=0;e<d-1;e++){const o={bottom:[[c*(e+1),0],[c*(e+1),5]],top:[[c*(e+1),0],[c*(e+1),-5]],left:[[0,c*(e+1)],[-5,c*(e+1)]],right:[[0,c*(e+1)],[5,c*(e+1)]]};r.push(`${n}-tick${e}`),s.push(`tick${e}`),(e+1)%5==0?l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][0][0],i[1][1]+o[t][0][1]]]):l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][1][0],i[1][1]+o[t][1][1]]])}return{tickIds:r,tickUIDs:s,tickCoordinates:l}})),ae(this,"computeWorldScaleCoordinates",((e,t,n)=>{let i,o=Sn.vec3.subtract(Sn.vec3.create(),n[0],n[1]);o=Sn.vec3.normalize(Sn.vec3.create(),o);let a=Sn.vec3.subtract(Sn.vec3.create(),n[2],n[0]);a=Sn.vec3.normalize(Sn.vec3.create(),a);const r={bottom:[n[1],n[2]],top:[n[0],n[3]],right:[n[2],n[3]],left:[n[0],n[1]]},s=Sn.vec3.add(Sn.vec3.create(),r[t][0],r[t][0]).map((e=>e/2)),l=e/2/Math.sqrt(Math.pow(o[0],2)+Math.pow(o[1],2)+Math.pow(o[2],2));return"top"==t||"bottom"==t?i=[Sn.vec3.subtract(Sn.vec3.create(),s,a.map((e=>e*l))),Sn.vec3.add(Sn.vec3.create(),s,a.map((e=>e*l)))]:"left"!=t&&"right"!=t||(i=[Sn.vec3.add(Sn.vec3.create(),s,o.map((e=>e*l))),Sn.vec3.subtract(Sn.vec3.create(),s,o.map((e=>e*l)))]),i})),ae(this,"computeCanvasScaleCoordinates",((e,t,n,i,o)=>{let a;if("top"==o||"bottom"==o){const i=t[0][0]-t[1][0];a=[[e.width/2-i/2,n.height],[e.width/2+i/2,n.height]]}else if("left"==o||"right"==o){const n=t[0][1]-t[1][1];a=[[i.width,e.height/2-n/2],[i.width,e.height/2+n/2]]}return a})),ae(this,"computeScaleBounds",((e,t,n,i)=>{const o=t*Math.min(1e3,e.width),a=n*Math.min(1e3,e.height),r={bottom:[-a,-o],top:[a,o],left:[a,o],right:[-a,-o]},s={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:s[i][0]+r[i][0],width:s[i][1]+r[i][1]}}))}renderAnnotation(e,t){if(!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:i}=e,o=st(this.getToolName(),i.element).filter((e=>e.data.viewportId==i.id))[0],a=e.viewport.canvas,r=!1;if(!i)return r;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l={width:a.width/window.devicePixelRatio||1,height:a.height/window.devicePixelRatio||1},d=o.data.handles.points[0],c=o.data.handles.points[1],h=o.data.handles.points[2],u=o.data.handles.points[3],g=[d,h,c,u],m=Sn.vec3.distance(h,u),v=Sn.vec3.distance(d,h),p=this.computeScaleBounds(l,.05,.05,n),f=this.computeScaleBounds(l,.05,.05,n),w=this.computeScaleSize(m,v,n),I=this.computeWorldScaleCoordinates(w,n,g).map((e=>i.worldToCanvas(e))),E=this.computeCanvasScaleCoordinates(l,I,f,p,n),C=this.computeEndScaleTicks(E,n),{annotationUID:_}=o;s.annotationUID=_;const b=this.getStyle("lineWidth",s,o),T=this.getStyle("lineDash",s,o),D=this.getStyle("color",s,o),S=this.getStyle("shadow",s,o),y=`${_}-scaleline`;jr(t,_,"1",E[0],E[1],{color:D,width:b,lineDash:T,shadow:S},y);const x=`${_}-left`;jr(t,_,"2",C.endTick1[0],C.endTick1[1],{color:D,width:b,lineDash:T,shadow:S},x);const M=`${_}-right`;jr(t,_,"3",C.endTick2[0],C.endTick2[1],{color:D,width:b,lineDash:T,shadow:S},M);const O={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},P=[E[0][0]+O[n][0],E[0][1]+O[n][1]],A=this._getTextLines(w),{tickIds:R,tickUIDs:L,tickCoordinates:N}=this.computeInnerScaleTicks(w,n,_,C.endTick1,C.endTick2);for(let e=0;e<L.length;e++)jr(t,_,L[e],N[e][0],N[e][1],{color:D,width:b,lineDash:T,shadow:S},R[e]);return zr(t,_,"text0",A,[P[0],P[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:D}),r}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}ae(VI,"toolName",void 0),VI.toolName="ScaleOverlay";const WI=VI,BI=(e,t,n)=>{if(!t?.data?.contour?.polyline?.length)return;const{polyline:i}=t.data.contour,{length:o}=i;let a=1/0;for(let t=0;t<o;t++){const o=nl(e.worldToCanvas(i[t]),n);a=Math.min(a,o)}return a===1/0||isNaN(a)?void 0:a};class HI{constructor(){ae(this,"toolInfo",{toolSize:null,maxToolSize:null})}renderShape(e,t,n){er(e,"SculptorTool","0",t,this.toolInfo.toolSize,n)}pushHandles(e,t){const{points:n,mouseCanvasPoint:i}=t,o={first:void 0,last:void 0};for(let a=0;a<n.length;a++){const r=nl(e.worldToCanvas(n[a]),i);r>this.toolInfo.toolSize||(this.pushOneHandle(a,r,t),void 0===o.first?(o.first=a,o.last=a):o.last=a)}return o}configureToolSize(e){const t=this.toolInfo;if(t.toolSize&&t.maxToolSize)return;const n=e.detail.element,i=Math.min(n.clientWidth,n.clientHeight)/12;t.toolSize=i,t.maxToolSize=i}updateToolSize(e,t,n){const i=this.toolInfo,o=BI(t,n,e);o>0&&(i.toolSize=Math.min(i.maxToolSize,o))}getMaxSpacing(e){return Math.max(this.toolInfo.toolSize/4,e)}getInsertPosition(e,t,n){let i;const{points:o,element:a,mouseCanvasPoint:r}=n,s=this.toolInfo.toolSize,l=(0,ie.getEnabledElement)(a),{viewport:d}=l,c=d.worldToCanvas(o[e]),h=d.worldToCanvas(o[t]),u=[(c[0]+h[0])/2,(c[1]+h[1])/2],g=nl(r,u);if(g<s){const e={x:(u[0]-r[0])/g,y:(u[1]-r[1])/g};i=[r[0]+s*e.x,r[1]+s*e.y]}else i=u;return d.canvasToWorld(i)}pushOneHandle(e,t,n){const{points:i,mousePoint:o}=n,a=this.toolInfo.toolSize,r=i[e],s=(r[0]-o[0])/t,l=(r[1]-o[1])/t,d=(r[2]-o[2])/t,c={x:o[0]+a*s,y:o[1]+a*l,z:o[2]+a*d};r[0]=c.x,r[1]=c.y,r[2]=c.z}}ae(HI,"shapeName","Circle");const FI=HI;class GI extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{minSpacing:1,referencedToolNames:["PlanarFreehandROI","PlanarFreehandContourSegmentationTool"],toolShape:"circle",referencedToolName:"PlanarFreehandROI"}}),ae(this,"registeredShapes",new Map),ae(this,"isActive",!1),ae(this,"selectedShape",void 0),ae(this,"commonData",{activeAnnotationUID:null,viewportIdsToRender:[],isEditingOpenContour:!1,canvasLocation:void 0}),ae(this,"sculptData",void 0),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,n=t.element;if(this.configureToolSize(e),this.selectFreehandTool(t),null!==this.commonData.activeAnnotationUID)return this.isActive=!0,cr(n),this.activateModify(n),!0})),ae(this,"mouseMoveCallback",(e=>{this.mode===Ye.Active?(this.configureToolSize(e),this.updateCursor(e)):this.commonData.canvasLocation=void 0})),ae(this,"endCallback",(e=>{const t=e.detail,{element:n}=t,i=this.configuration,o=(0,ie.getEnabledElement)(n);this.isActive=!1,this.deactivateModify(n),dr(n);const{renderingEngineId:a,viewportId:r}=o,s=Vn(r,a).getToolInstance(i.referencedToolName),l=this.filterSculptableAnnotationsForElement(n).find((e=>e.annotationUID===this.commonData.activeAnnotationUID));s.configuration.calculateStats&&(l.invalidated=!0),Qe(l,n)})),ae(this,"dragCallback",(e=>{const t=e.detail,n=t.element;this.updateCursor(e);const i=this.filterSculptableAnnotationsForElement(n),o=i.find((e=>e.annotationUID===this.commonData.activeAnnotationUID));if(!i?.length||!this.isActive)return;const a=o.data.contour.polyline;this.sculpt(t,a)})),this.registerShapes(FI.shapeName,FI),this.setToolShape(this.configuration.toolShape)}registerShapes(e,t){const n=new t;this.registeredShapes.set(e,n)}sculpt(e,t){const n=this.configuration,i=e.element,o=(0,ie.getEnabledElement)(i),{viewport:a}=o,r=this.registeredShapes.get(this.selectedShape);this.sculptData={mousePoint:e.currentPoints.world,mouseCanvasPoint:e.currentPoints.canvas,points:t,maxSpacing:r.getMaxSpacing(n.minSpacing),element:i};const s=r.pushHandles(a,this.sculptData);void 0!==s.first&&this.insertNewHandles(s)}interpolatePointsWithinMaxSpacing(e,t,n,i){const{element:o}=this.sculptData,a=(0,ie.getEnabledElement)(o),{viewport:r}=a,s=$I(e+1,t.length);nl(r.worldToCanvas(t[e]),r.worldToCanvas(t[s]))>i&&n.push(e)}updateCursor(e){const t=e.detail,n=t.element,i=(0,ie.getEnabledElement)(n),{renderingEngine:o,viewport:a}=i;this.commonData.viewportIdsToRender=[a.id];const r=this.filterSculptableAnnotationsForElement(n);if(!r?.length)return;const s=r.find((e=>e.annotationUID===this.commonData.activeAnnotationUID));if(this.commonData.canvasLocation=t.currentPoints.canvas,this.isActive)s.highlighted=!0;else{const e=this.registeredShapes.get(this.selectedShape),n=t.currentPoints.canvas;e.updateToolSize(n,a,s)}ii(this.commonData.viewportIdsToRender)}filterSculptableAnnotationsForElement(e){const t=this.configuration,n=(0,ie.getEnabledElement)(e),{renderingEngineId:i,viewportId:o}=n,a=[],r=Vn(o,i).getToolInstance(t.referencedToolName);return t.referencedToolNames.forEach((t=>{const n=st(t,e);n&&a.push(...n)})),r.filterInteractableAnnotationsForElement(e,a)}configureToolSize(e){this.registeredShapes.get(this.selectedShape).configureToolSize(e)}insertNewHandles(e){const t=this.findNewHandleIndices(e);let n=0;for(let e=0;e<t?.length;e++){const i=t[e]+1+n;this.insertHandleRadially(i),n++}}findNewHandleIndices(e){const{points:t,maxSpacing:n}=this.sculptData,i=[];for(let o=e.first;o<=e.last;o++)this.interpolatePointsWithinMaxSpacing(o,t,i,n);return i}insertHandleRadially(e){const{points:t}=this.sculptData;if(e>t.length-1&&this.commonData.isEditingOpenContour)return;const n=this.registeredShapes.get(this.selectedShape),i=e-1,o=$I(e,t.length),a=n.getInsertPosition(i,o,this.sculptData);t.splice(e,0,a)}selectFreehandTool(e){const t=this.getClosestFreehandToolOnElement(e);void 0!==t&&(this.commonData.activeAnnotationUID=t)}getClosestFreehandToolOnElement(e){const{element:t}=e,n=(0,ie.getEnabledElement)(t),{viewport:i}=n,o=this.configuration,a=this.filterSculptableAnnotationsForElement(t);if(!a?.length)return;const r=e.currentPoints.canvas,s={distance:1/0,toolIndex:void 0,annotationUID:void 0};for(let e=0;e<a?.length;e++){if(a[e].isLocked||!a[e].isVisible)continue;const t=BI(i,a[e],r);-1!==t&&t<s.distance&&(s.distance=t,s.toolIndex=e,s.annotationUID=a[e].annotationUID)}return this.commonData.isEditingOpenContour=!a[s.toolIndex].data.contour.closed,o.referencedToolName=a[s.toolIndex].metadata.toolName,s.annotationUID}activateModify(e){e.addEventListener(se.MOUSE_UP,this.endCallback),e.addEventListener(se.MOUSE_CLICK,this.endCallback),e.addEventListener(se.MOUSE_DRAG,this.dragCallback),e.addEventListener(se.TOUCH_TAP,this.endCallback),e.addEventListener(se.TOUCH_END,this.endCallback),e.addEventListener(se.TOUCH_DRAG,this.dragCallback)}deactivateModify(e){e.removeEventListener(se.MOUSE_UP,this.endCallback),e.removeEventListener(se.MOUSE_CLICK,this.endCallback),e.removeEventListener(se.MOUSE_DRAG,this.dragCallback),e.removeEventListener(se.TOUCH_TAP,this.endCallback),e.removeEventListener(se.TOUCH_END,this.endCallback),e.removeEventListener(se.TOUCH_DRAG,this.dragCallback)}setToolShape(e){this.selectedShape=this.registeredShapes.get(e)??FI.shapeName}renderAnnotation(e,t){const{viewport:n}=e,{element:i}=n,o=this.commonData.viewportIdsToRender;if(!this.commonData.canvasLocation||this.mode!==Ye.Active||!o.includes(n.id))return;const a=this.filterSculptableAnnotationsForElement(i);if(!a?.length)return;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};let s=Ur("color",r,Vr.Default,this.mode);this.isActive&&(s=Ur("color",r,Vr.Highlighted,this.mode)),this.registeredShapes.get(this.selectedShape).renderShape(t,this.commonData.canvasLocation,{color:s})}}ae(GI,"toolName",void 0);const $I=(e,t)=>(e+t)%t;GI.toolName="SculptorTool";const qI=GI;class zI extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ae(this,"preMouseDownCallback",(e=>this._deleteNearbyAnnotations(e,"mouse"))),ae(this,"preTouchStartCallback",(e=>this._deleteNearbyAnnotations(e,"touch")))}_deleteNearbyAnnotations(e,t){const{renderingEngineId:n,viewportId:i,element:o,currentPoints:a}=e.detail,r=Vn(i,n);if(!r)return!1;const s=r._toolInstances,l=[];for(const e in s){const n=s[e];if("function"!=typeof n.isPointNearTool||"function"!=typeof n.filterInteractableAnnotationsForElement)continue;const i=st(e,o);if(!i.length)continue;const r=n.filterInteractableAnnotationsForElement(o,i)||[];for(const e of r)n.isPointNearTool(o,e,a.canvas,10,t)&&l.push(e.annotationUID)}for(const e of l)Ce(e),vt(e);return e.preventDefault(),!0}}ae(zI,"toolName",void 0),zI.toolName="Eraser";const jI=zI,{transformWorldToIndex:KI}=ie.utilities;function YI(e,t){!function(e,t){const{points:n,segmentsLocked:i,segmentIndex:o,segmentationId:a}=t,{viewport:r}=e,s=xa({operationData:t,viewport:e.viewport});if(!s)return void console.warn("No data found for fillRectangle");const{segmentationImageData:l,segmentationVoxelManager:d}=s;let c=n.map((e=>KI(l,e)));c=c.map((e=>e.map((e=>Math.round(e)))));const h=hi(c,l.getDimensions()),u=r instanceof ie.StackViewport||Xl(c),g=l.getDirection(),m=l.getSpacing(),{viewPlaneNormal:v}=r.getCamera(),p=ie.utilities.getSpacingInNormalDirection({direction:g,spacing:m},v),f=ui(n);let[[w,I],[E,C],[_,b]]=f;w-=p,I+=p,E-=p,C+=p,_-=p,b+=p;const T=u?()=>!0:e=>{const[t,n,i]=e;return t>=w&&t<=I&&n>=E&&n<=C&&i>=_&&i<=b};d.forEach((e=>{let{value:t,index:n}=e;i.includes(t)||d.setAtIndex(n,o)}),{isInObject:T,boundsIJK:h,imageData:l}),on(a)}(e,t)}function XI(e,t){!function(e,t){YI(e,Object.assign({},t,{segmentIndex:0}))}(e,t)}class JI extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:YI,ERASE_INSIDE:XI},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a;this.isDrawing=!0;const s=r.getCamera(),{viewPlaneNormal:l,viewUp:d}=s,c=ur(r.id);if(!c)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:h,segmentationId:u}=c,g=Er(u),m=fr(u),v=mn(h,g),{representationData:p}=Nu(u),f=p[Ct.Labelmap],w={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...l],viewUp:[...d],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:v},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null}}},I=Vo(i,this.getToolName());if(this.editData={annotation:w,segmentIndex:g,segmentationId:u,segmentsLocked:m,segmentColor:v,viewportIdsToRender:I,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:h,volumeId:null,referencedVolumeId:null,imageId:null},Yt(f,r)){const{volumeId:e}=f,t=ie.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else this.editData={...this.editData};return this._activateDraw(i),cr(i),e.preventDefault(),oi(I),!0})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i,{currentPoints:s}=t,l=(0,ie.getEnabledElement)(n),{worldToCanvas:d,canvasToWorld:c}=l.viewport,h=s.world,{points:u}=r.handles;let g,m,v,p,f,w,I,E;switch(u[a]=[...h],a){case 0:case 3:g=d(u[0]),p=d(u[3]),m=[p[0],g[1]],v=[g[0],p[1]],w=c(m),I=c(v),u[1]=w,u[2]=I;break;case 1:case 2:m=d(u[1]),v=d(u[2]),g=[v[0],m[1]],p=[m[0],v[1]],f=c(g),E=c(p),u[0]=f,u[3]=E}i.invalidated=!0,this.editData.hasMoved=!0;const{renderingEngine:C}=l;oi(o)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),dr(n);const s=(0,ie.getEnabledElement)(n),l={...this.editData,points:r.handles.points};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,l)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{annotation:o}=this.editData,a=o.metadata,r=o.annotationUID,s=o.data,{points:l}=s.handles,d=l.map((e=>i.worldToCanvas(e))),c=`rgb(${a.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(Or(t,r,"0",d[0],d[3],{color:c}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ae(JI,"toolName",void 0),JI.toolName="RectangleScissor";const ZI=JI;class QI extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Fa,ERASE_INSIDE:Xa},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{viewport:s}=r;this.isDrawing=!0;const l=s.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=ur(s.id);if(!h)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:u,segmentationId:g,type:m}=h,v=Er(g),p=fr(g),f=mn(u,v),{representationData:w}=Nu(g),I=w[m];if(!I)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const E={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:f},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},C=[s.id];if(this.editData={annotation:E,centerCanvas:a,segmentIndex:v,segmentationId:g,segmentsLocked:p,segmentColor:f,viewportIdsToRender:C,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:u,volumeId:null,referencedVolumeId:null},Yt(I,s)){const{volumeId:e}=I,t=ie.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else this.editData={...this.editData};return this._activateDraw(i),cr(i),e.preventDefault(),oi(C),!0})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:u}=d,g=Math.abs(o[0]-h[0]),m=Math.abs(o[1]-h[1]),v=Math.sqrt(g*g+m*m),p=[h[0],h[1]+v],f=[h[0],h[1]-v],w=[h[0]-v,h[1]],I=[h[0]+v,h[1]];u.handles.points=[l(p),l(f),l(w),l(I)],d.invalidated=!0,this.editData.hasMoved=!0,oi(c)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i,{viewPlaneNormal:s,viewUp:l}=i.metadata;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),dr(n);const d=(0,ie.getEnabledElement)(n),c={...this.editData,points:r.handles.points,viewPlaneNormal:s,viewUp:l,strategySpecificConfiguration:{}};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(d,c)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],u=c[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],m=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),v=`rgb(${r.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(er(t,s,"0",g,m,{color:v}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ae(QI,"toolName",void 0),QI.toolName="CircleScissor";const eE=QI;class tE extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:ja,ERASE_INSIDE:Ya},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{viewport:s}=r;this.isDrawing=!0;const l=s.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=ur(s.id);if(!h)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:u,segmentationId:g}=h,m=Er(g),v=fr(g),p=mn(u,m);this.isDrawing=!0;const f={metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:p},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},w=[s.id];this.editData={annotation:f,centerCanvas:a,segmentationRepresentationUID:u,segmentIndex:m,segmentationId:g,segmentsLocked:v,segmentColor:p,toolGroupId:this.toolGroupId,viewportIdsToRender:w,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null};const{representationData:I}=Nu(g),E=I[Ct.Labelmap];if(Yt(E,s)){const{volumeId:e}=E,t=ie.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else this.editData={...this.editData};return this._activateDraw(i),cr(i),e.preventDefault(),oi(w),!0})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:u}=d,g=Math.abs(o[0]-h[0]),m=Math.abs(o[1]-h[1]),v=Math.sqrt(g*g+m*m),p=[h[0],h[1]+v],f=[h[0],h[1]-v],w=[h[0]-v,h[1]],I=[h[0]+v,h[1]];u.handles.points=[l(p),l(f),l(w),l(I)],d.invalidated=!0,this.editData.hasMoved=!0,oi(c)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l}=this.editData,{data:d}=i,{viewPlaneNormal:c,viewUp:h}=i.metadata;if(o&&!a)return;i.highlighted=!1,d.handles.activeHandleIndex=null,this._deactivateDraw(n),dr(n);const u=(0,ie.getEnabledElement)(n),g={...this.editData,points:d.handles.points,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l,viewPlaneNormal:c,viewUp:h};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(u,g)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],u=c[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],m=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),v=`rgb(${r.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(er(t,s,"0",g,m,{color:v}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ae(tE,"toolName",void 0),tE.toolName="SphereScissor";const nE=tE;var iE=E(907),oE=E.n(iE);const{transformWorldToIndex:aE}=ie.utilities;class rE extends Rw{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!1,getTextLines:sE,statsCalculator:rs,showTextBox:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l;let h,u,g;if(r instanceof ie.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ie.utilities.getVolumeId(e),u=ie.cache.getVolume(g),h=ie.utilities.getClosestImageId(u,o,d)}const m=ie.utilities.getSpacingInNormalDirection(u,d),v=this._getStartCoordinate(o,m,d),p=this._getEndCoordinate(o,m,d),f=r.getFrameOfReferenceUID(),w={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:f,referencedImageId:h,volumeId:g,spacingInNormal:m,enabledElement:a},data:{label:"",startCoordinate:v,endCoordinate:p,handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o]],activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[],statistics:[]},labelmapUID:null}};this._computeProjectionPoints(w,u),gt(w,i);const I=Vo(i,this.getToolName());return this.editData={annotation:w,viewportIdsToRender:I,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(I),w})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n);const l=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID);const d=this.getTargetId(l.viewport),c=ie.cache.getVolume(d.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(i,c,d,l),oi(o),a&&et(i)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;let o=st(this.getToolName(),i.element);if(!o?.length)return n;o=ps(o,i.getCamera());const a={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let r=0;r<o.length;r++){const s=o[r],{annotationUID:l,data:d}=s,{startCoordinate:c,endCoordinate:h}=d,{points:u,activeHandleIndex:g}=d.handles;a.annotationUID=l;const m=this.getStyle("lineWidth",a,s),v=this.getStyle("lineDash",a,s),p=this.getStyle("color",a,s),f=u.map((e=>i.worldToCanvas(e))),w=f[0],I=xw(f),{centerPointRadius:E}=this.configuration,C=Mw(f),_=i.getCamera().focalPoint,b=i.getCamera().viewPlaneNormal;let T=c,D=h;Array.isArray(c)&&(T=this._getCoordinateForViewplaneNormal(T,b)),Array.isArray(h)&&(D=this._getCoordinateForViewplaneNormal(D,b));const S=ie.utilities.roundToPrecision(T),y=ie.utilities.roundToPrecision(D),x=this._getCoordinateForViewplaneNormal(_,b),M=ie.utilities.roundToPrecision(x);if(M<Math.min(S,y)||M>Math.max(S,y))continue;s.invalidated&&this._throttledCalculateCachedStats(s,e);let O,P=!1;if(M===ie.utilities.roundToPrecision((T+D)/2)&&(P=!0),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Re(l))continue;ue(s)||this.editData||null===g||!P||(O=[f[g]]),O&&xr(t,l,"0",O,{color:p});let A=m,R=v;P?(A=m,R=[]):R=[5,5];const L="0";if(er(t,l,L,w,I,{color:p,lineDash:R,lineWidth:A}),E>0&&I>3*E&&er(t,l,`${L}-center`,w,E,{color:p,lineDash:v,lineWidth:m}),n=!0,1==this.configuration.showTextBox&&1==this.configuration.calculatePointsInsideVolume){const e=this.getLinkedTextBoxStyle(a,s);if(!e.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const n=this.configuration.getTextLines(d);if(!n||0===n.length)continue;let o;d.handles.textBox.hasMoved||(o=Zr(C),d.handles.textBox.worldPosition=i.canvasToWorld(o));const r=i.worldToCanvas(d.handles.textBox.worldPosition),c=Yr(t,l,"1",n,r,f,{},e),{x:h,y:u,width:g,height:m}=c;d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([h,u]),topRight:i.canvasToWorld([h+g,u]),bottomLeft:i.canvasToWorld([h,u+m]),bottomRight:i.canvasToWorld([h+g,u+m])}}}return n})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:r}=t,{startCoordinate:s,endCoordinate:l}=n,{points:d}=n.handles,c=aE(r,d[0]),h=aE(r,d[0]),u=oE()(d),g=Sn.vec3.create();r.indexToWorldVec3(c,g);const m=Sn.vec3.create();r.indexToWorldVec3(h,m),2==this._getIndexOfCoordinatesForViewplaneNormal(o)?(g[2]=s,m[2]=l,u[0][2]=s,u[1][2]=s):0==this._getIndexOfCoordinatesForViewplaneNormal(o)?(g[0]=s,m[0]=l,u[0][0]=s,u[1][0]=s):1==this._getIndexOfCoordinatesForViewplaneNormal(o)&&(g[1]=s,m[1]=l,u[0][1]=s,u[1][1]=s);const v=Sn.vec3.distance(g,m),p=[];for(let e=0;e<v;e+=a)p.push(u.map((t=>{const n=Sn.vec3.create();return Sn.vec3.scaleAndAdd(n,t,o,e),Array.from(n)})));n.cachedStats.projectionPoints=p}_computePointsInsideVolume(e,t,n,i){const{data:o,metadata:a}=e,{viewPlaneNormal:r,viewUp:s}=a,{viewport:l,renderingEngine:d}=i,c=o.cachedStats.projectionPoints,h=[[]],u=this.getTargetIdImage(n,d),g=o.handles.points.map((e=>l.worldToCanvas(e))),[m,v]=Mw(g),p=l.canvasToWorld(m),f=l.canvasToWorld(v),{worldWidth:w,worldHeight:I}=bw(r,s,p,f),E=Ln(u,o.handles),C=Un(u),_=Math.abs(Math.PI*(w/E.scale/2)*(I/C/E.scale/2)),b={isPreScaled:ts(l,n),isSuvScaled:this.isSuvScaled(l,n,e.metadata.referencedImageId)},T=es(a.Modality,e.metadata.referencedImageId,b);for(let e=0;e<c.length;e++){if(!t)continue;const n=c[e][0],i=c[e].map((e=>l.worldToCanvas(e))),[o,a]=Mw(i),s=l.canvasToWorld(o),d=l.canvasToWorld(a),u=s,g=d,{dimensions:m,imageData:v,voxelManager:p}=t,f=aE(v,u),w=aE(v,n),I=this._getIndexOfCoordinatesForViewplaneNormal(r);f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(f[2]),f[I]=w[I];const E=aE(v,g);if(E[0]=Math.floor(E[0]),E[1]=Math.floor(E[1]),E[2]=Math.floor(E[2]),E[I]=w[I],this._isInsideVolume(f,E,m)){const e=[[Math.min(f[0],E[0]),Math.max(f[0],E[0])],[Math.min(f[1],E[1]),Math.max(f[1],E[1])],[Math.min(f[2],E[2]),Math.max(f[2],E[2])]],t={center:n,xRadius:Math.abs(s[0]-d[0])/2,yRadius:Math.abs(s[1]-d[1])/2,zRadius:Math.abs(s[2]-d[2])/2},i=p.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>La(t,e),boundsIJK:e,imageData:v,returnPoints:this.configuration.storePointData});h.push(i)}}const D=this.configuration.statsCalculator.getStatistics();o.cachedStats.pointsInVolume=h,o.cachedStats.statistics={Modality:a.Modality,area:_,mean:D.mean?.value,stdDev:D.stdDev?.value,max:D.max?.value,statsArray:D.array,areaUnits:E.areaUnits,pixelValueUnits:T}}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:i}=t,{cachedStats:o}=n,a=this.getTargetId(i),r=ie.cache.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),e.invalidated=!1,Qe(e,i.element),o}_getStartCoordinate(e,t,n){const i=this.configuration.numSlicesToPropagate,o=Math.round(i/2),a=Sn.vec3.create();return Sn.vec3.scaleAndAdd(a,e,n,o*-t),this._getCoordinateForViewplaneNormal(a,n)}_getEndCoordinate(e,t,n){const i=this.configuration.numSlicesToPropagate,o=i-Math.round(i/2),a=Sn.vec3.create();return Sn.vec3.scaleAndAdd(a,e,n,o*t),this._getCoordinateForViewplaneNormal(a,n)}_getIndexOfCoordinatesForViewplaneNormal(e){const t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t.indexOf(Math.max(...t))}_getCoordinateForViewplaneNormal(e,t){return e[this._getIndexOfCoordinatesForViewplaneNormal(t)]}}function sE(e){const t=e.cachedStats.statistics,{area:n,mean:i,max:o,stdDev:a,areaUnits:r,pixelValueUnits:s}=t;if(void 0===i)return;const l=[];return l.push(`Area: ${tc(n)} ${r}`),l.push(`Mean: ${tc(i)} ${s}`),l.push(`Max: ${tc(o)} ${s}`),l.push(`Std Dev: ${tc(a)} ${s}`),l}ae(rE,"toolName",void 0),rE.toolName="CircleROIStartEndThreshold";const lE=rE;var dE=E(518),cE=E.n(dE),hE=E(744),uE=E.n(hE),gE=E(424),mE=E.n(gE),vE=E(614),pE=E.n(vE),fE=function(e){return e[e.ANNOTATED_CUBE=1]="ANNOTATED_CUBE",e[e.AXES=2]="AXES",e[e.CUSTOM=3]="CUSTOM",e}(fE||{});class wE extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{orientationWidget:{enabled:!0,viewportCorner:cE().Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:wE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[wE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"L",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"R",faceColor:"#ffff00",faceRotation:270},yPlus:{text:"P",faceColor:"#00ffff",fontColor:"white",faceRotation:180},yMinus:{text:"A",faceColor:"#00ffff",fontColor:"white"},zPlus:{text:"S"},zMinus:{text:"I"}},defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:e=>e/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[wE.OVERLAY_MARKER_TYPES.AXES]:{},[wE.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}),ae(this,"orientationMarkers",void 0),ae(this,"polyDataURL",void 0),ae(this,"_resizeObservers",new Map),ae(this,"onSetToolEnabled",(()=>{this.initViewports(),this._subscribeToViewportEvents()})),ae(this,"onSetToolActive",(()=>{this.initViewports(),this._subscribeToViewportEvents()})),ae(this,"onSetToolDisabled",(()=>{this.cleanUpData(),this._unsubscribeToViewportNewVolumeSet()})),ae(this,"_getViewportsInfo",(()=>ai(this.toolGroupId).viewportsInfo)),ae(this,"resize",(e=>{const t=this.orientationMarkers[e];if(!t)return;const{orientationWidget:n}=t;n.updateViewport()})),this.orientationMarkers={}}_unsubscribeToViewportNewVolumeSet(){const e=()=>{this._getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;o.removeEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this)),this._resizeObservers.get(t).unobserve(o)}))};ie.eventTarget.removeEventListener(se.TOOLGROUP_VIEWPORT_ADDED,(t=>{t.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())}))}_subscribeToViewportEvents(){const e=()=>{this._getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;this.initViewports(),o.addEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this));const a=new ResizeObserver((()=>{setTimeout((()=>{const e=(0,ie.getEnabledElementByIds)(t,n);if(!e)return;const{viewport:i}=e;this.resize(t),i.render()}),100)}));a.observe(o),this._resizeObservers.set(t,a)}))};e(),ie.eventTarget.addEventListener(se.TOOLGROUP_VIEWPORT_ADDED,(t=>{t.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())}))}cleanUpData(){(0,ie.getRenderingEngines)()[0].getViewports().forEach((e=>{const t=this.orientationMarkers[e.id];if(!t)return;const{actor:n,orientationWidget:i}=t;i?.setEnabled(!1),i?.delete(),n?.delete(),e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]}))}initViewports(){const e=(0,ie.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=No(t,this.getToolName()),t.forEach((e=>{e.getWidget(this.getToolName())||this.addAxisActorInViewport(e)}))}async addAxisActorInViewport(e){const t=e.id,n=this.configuration.overlayMarkerType,i=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[t]){const{actor:n,orientationWidget:i}=this.orientationMarkers[t];e.getRenderer().removeActor(n),i.setEnabled(!1)}let o;1===n?o=this.createAnnotationCube(i):2===n?o=mE().newInstance():3===n&&(o=await this.createCustomActor());const a=e.getRenderer(),r=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:s,viewportCorner:l,viewportSize:d,minPixelSize:c,maxPixelSize:h}=this.configuration.orientationWidget,u=cE().newInstance({actor:o,interactor:r.getInteractor(),parentRenderer:a});u.setEnabled(s),u.setViewportCorner(l),u.setViewportSize(d),u.setMinPixelSize(c),u.setMaxPixelSize(h),u.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:u,actor:o},e.addWidget(this.getToolName(),u),r.render(),e.getRenderingEngine().render()}async createCustomActor(){const e=this.configuration.overlayConfiguration[fE.CUSTOM].polyDataURL,t=await fetch(e),n=await t.arrayBuffer(),i=pE().newInstance();i.parseAsArrayBuffer(n),i.update();const o=Pt().newInstance();o.shallowCopy(i.getOutputData()),o.getPointData().setActiveScalars("Color");const a=yt().newInstance();a.setInputData(o),a.setColorModeToDirectScalars();const r=Mt().newInstance();return r.setMapper(a),r.rotateZ(180),r}createAnnotationCube(e){const t=uE().newInstance();return t.setDefaultStyle({...e.defaultStyle}),t.setXPlusFaceProperty({...e.faceProperties.xPlus}),t.setXMinusFaceProperty({...e.faceProperties.xMinus}),t.setYPlusFaceProperty({...e.faceProperties.yPlus}),t.setYMinusFaceProperty({...e.faceProperties.yMinus}),t.setZPlusFaceProperty({...e.faceProperties.zPlus}),t.setZMinusFaceProperty({...e.faceProperties.zMinus}),t}async createAnnotatedCubeActor(){const e=uE().newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach((n=>{const i=`set${n.charAt(0).toUpperCase()+n.slice(1)}FaceProperty`;e[i](t[n])})),e}}ae(wE,"toolName",void 0),ae(wE,"CUBE",1),ae(wE,"AXIS",2),ae(wE,"VTPFILE",3),ae(wE,"OVERLAY_MARKER_TYPES",fE),wE.toolName="OrientationMarker";const IE=wE;class EE extends Ia{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:EE.SelectMode.Border,searchRadius:6}}),ae(this,"hoverTimer",void 0),ae(this,"mouseMoveCallback",(e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout((()=>{this._setActiveSegment(e),this.hoverTimer=null}),this.configuration.hoverTimeout),!0))),ae(this,"onSetToolEnabled",(()=>{this.onSetToolActive()})),ae(this,"onSetToolActive",(()=>{this.hoverTimer=null})),ae(this,"onSetToolDisabled",(()=>{this.hoverTimer=null})),this.hoverTimer=null}_setActiveSegment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(je.isInteractingWithTool)return;const{element:t,currentPoints:n}=e.detail,i=n.world,o=(0,ie.getEnabledElement)(t);if(!o)return;const{viewport:a}=o,r=ur(a.id);r&&([Ct.Labelmap,Ct.Contour].includes(r.type)?this._setActiveSegmentForType(r,i,a):console.warn("SegmentSelectTool does not support the current segmentation type."))}_setActiveSegmentForType(e,t,n){if(!n.getImageData())return;const{segmentationId:i,type:o}=e;let a;if(this.configuration.mode===EE.SelectMode.Inside)a=Xs(i,t,{viewport:n});else switch(o){case Ct.Labelmap:a=Js(i,t,{viewport:n,searchRadius:this.configuration.searchRadius});break;case Ct.Contour:a=Qs(i)}if(!a||0===a)return;Ir(i,a);const r=n.getRenderingEngine().getViewports().map((e=>e.id));nn(i),oi(r)}}ae(EE,"toolName",void 0),ae(EE,"SelectMode",{Inside:"Inside",Border:"Border"}),EE.toolName="SegmentSelectTool";const CE=EE,{transformWorldToIndex:_E,isEqual:bE}=ie.utilities;class TE extends Ia{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),e=this,ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l}=s,d=ur(r.id);if(!d)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:c,type:h}=d,u=Er(c),g=fr(c),{representationData:m}=Nu(c);let v,p,f,w;if(Yt(m[Ct.Labelmap],r)){const{volumeId:e}=m[h],t=ie.cache.getVolume(e);({dimensions:v,direction:p}=t),w=t.voxelManager,f=_E(t.imageData,o)}else{const e=sg(r.id,c);if(!e)throw new Error("No active segmentation imageId detected, create one before using scissors tool");const{imageData:t}=r.getImageData();v=t.getDimensions(),p=t.getDirection();const n=ie.cache.getImage(e);w=n.voxelManager,f=_E(t,o)}const I=this.getFixedDimension(l,p);if(void 0===I)return void console.warn("Oblique paint fill not yet supported");const{floodFillGetter:E,getLabelValue:C,getScalarDataPositionFromPlane:_,inPlaneSeedPoint:b,fixedDimensionValue:T}=this.generateHelpers(w,v,f,I);if(f[0]<0||f[0]>=v[0]||f[1]<0||f[1]>=v[1]||f[2]<0||f[2]>=v[2])return;const D=C(f[0],f[1],f[2]);if(g.includes(D))return;const S=Sa(E,b),{flooded:y}=S;return y.forEach((e=>{const t=_(e[0],e[1]);w.setAtIndex(t,u)})),on(c,this.getFramesModified(I,T,S)),!0})),ae(this,"getFramesModified",((e,t,n)=>{const{boundaries:i}=n;if(2===e)return[t];let o=1/0,a=-1/0;for(let e=0;e<i.length;e++){const t=i[e][1];t<o&&(o=t),t>a&&(a=t)}const r=[];for(let e=o;e<=a;e++)r.push(e);return r})),ae(this,"generateHelpers",(function(t,n,i){let o,a,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2;switch(r){case 0:o=i[0],a=[i[1],i[2]];break;case 1:o=i[1],a=[i[0],i[2]];break;case 2:o=i[2],a=[i[0],i[1]];break;default:throw new Error(`Invalid fixedDimension: ${r}`)}const s=(e,n,i)=>t.getAtIJK(e,n,i),l=e.generateFloodFillGetter(n,r,o,s);return{getScalarDataPositionFromPlane:e.generateGetScalarDataPositionFromPlane(((e,n,i)=>t.toIndex([e,n,i])),r,o),getLabelValue:s,floodFillGetter:l,inPlaneSeedPoint:a,fixedDimensionValue:o}})),ae(this,"generateFloodFillGetter",((e,t,n,i)=>{let o;switch(t){case 0:o=(t,o)=>{if(!(t>=e[1]||t<0||o>=e[2]||o<0))return i(n,t,o)};break;case 1:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[2]||o<0))return i(t,n,o)};break;case 2:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[1]||o<0))return i(t,o,n)};break;default:throw new Error(`Invalid fixedDimension: ${t}`)}return o})),ae(this,"generateGetScalarDataPositionFromPlane",((e,t,n)=>{let i;switch(t){case 0:i=(t,i)=>e(n,t,i);break;case 1:i=(t,i)=>e(t,n,i);break;case 2:i=(t,i)=>e(t,i,n);break;default:throw new Error(`Invalid fixedDimension: ${t}`)}return i}))}getFixedDimension(e,t){const n=t.slice(0,3),i=t.slice(3,6),o=t.slice(6,9),a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])];if(bE(a,r))return 0;const s=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];if(bE(a,s))return 1;const l=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];return bE(a,l)?2:void 0}}ae(TE,"toolName",void 0),TE.toolName="PaintFill";const DE=TE;class SE extends Gr{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),e=this,ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u={metadata:{viewPlaneNormal:[0,0,1],viewUp:[0,1,0],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h,toolName:this.getToolName()},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},active:!0}};gt(u,i);const g=Vo(i,this.getToolName(),!1);return this.editData={annotation:u,viewportUIDsToRender:g,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),cr(i),e.preventDefault(),oi(g),u})),ae(this,"getHandleNearImagePoint",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;for(let e=0;e<s.length;e++){const t=s[e],o=a.worldToCanvas(t);if(!0==Sn.vec2.distance(n,o)<i)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:u,top:g,width:m,height:v}=c;if(Jr([u,g,m,v],h)<=i)return!0})),ae(this,"toolSelectedCallback",(function(t,n){const i=t.detail,{element:o}=i,{data:a}=n;a.active=!0;const r=Vo(o,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:r},e._activateModify(o),cr(o),oi(r),t.preventDefault()})),ae(this,"handleSelectedCallback",(function(t,n,i){const o=t.detail,{element:a}=o,{data:r}=n;r.active=!0;let s,l=!1;i.worldPosition||(s=r.handles.points.findIndex((e=>e===i)));const d=Vo(a,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:d,handleIndex:s},e._activateModify(a),cr(a),oi(d),t.preventDefault()})),ae(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;a&&!r||(s.active=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),dr(n),(0,ie.getEnabledElement)(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&vt(i.annotationUID),oi(o))})),ae(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:i}=r.handles;i.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),r.invalidated=!0}else{const{currentPoints:e}=t,i=(0,ie.getEnabledElement)(n),{worldToCanvas:o,canvasToWorld:s}=i.viewport,l=e.world,{points:d}=r.handles;let c,h,u,g,m,v,p,f;switch(d[a]=[...l],a){case 0:case 3:c=o(d[0]),g=o(d[3]),h=[g[0],c[1]],u=[c[0],g[1]],v=s(h),p=s(u),d[1]=v,d[2]=p;break;case 1:case 2:h=o(d[1]),u=o(d[2]),c=[u[0],h[1]],g=[h[0],u[1]],m=s(c),f=s(g),d[0]=m,d[3]=f}r.invalidated=!0}this.editData.hasMoved=!0,(0,ie.getEnabledElement)(n),oi(o)})),ae(this,"_activateDraw",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(se.TOUCH_END,this._mouseUpCallback),e.addEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"_deactivateDraw",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(se.TOUCH_END,this._mouseUpCallback),e.removeEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"_activateModify",(e=>{je.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(se.TOUCH_END,this._mouseUpCallback),e.addEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"_deactivateModify",(e=>{je.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(se.TOUCH_END,this._mouseUpCallback),e.removeEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"renderAnnotation",((e,t)=>{const n=!1,{viewport:i}=e,{element:o}=i;let a=st(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;this.getTargetId(i),i.getRenderingEngine();const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const n=a[e],{annotationUID:o}=n,s=(n.metadata,n.data),{points:l,activeHandleIndex:d}=s.handles,c=l.map((e=>i.worldToCanvas(e))),h=this.getStyle("lineWidth",r,n),u=this.getStyle("lineDash",r,n),g=this.getStyle("color",r,n);if(!i.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");let m;this.editData||null===d||(m=[c[d]]),m&&xr(t,o,"0",m,{color:g}),mf(t,o,"0",c[0],c[3],{color:"black",lineDash:u,lineWidth:h})}})),ae(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),ae(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewportUID:r,renderingEngineUID:s,sceneUID:l}=o,d=a.handles.points[0],c=a.handles.points[3],{cachedStats:h}=a,u=Object.keys(h);for(let e=0;e<u.length;e++){const o=u[e],{imageVolume:a}=this._getImageVolumeFromTargetUID(o,i),{dimensions:r,scalarData:s,vtkImageData:l,metadata:g}=a,m=Sn.vec3.fromValues(0,0,0),v=Sn.vec3.fromValues(0,0,0);if(l.worldToIndexVec3(d,m),m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(m[2]),l.worldToIndexVec3(c,v),v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]),this._isInsideVolume(m,v,r)){this.isHandleOutsideImage=!1;const e=Math.min(m[0],v[0]),i=Math.max(m[0],v[0]),a=Math.min(m[1],v[1]),l=Math.max(m[1],v[1]),u=Math.min(m[2],v[2]),p=Math.max(m[2],v[2]),{worldWidth:f,worldHeight:w}=bw(t,n,d,c),I=f*w;let E=0,C=0,_=0;const b=r[0],T=r[0]*r[1];for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++)E++,C+=s[t*T+n*b+o];C/=E;for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++){const e=s[t*T+n*b+o]-C;_+=e*e}_/=E,_=Math.sqrt(_),h[o]={Modality:g.Modality,area:I,mean:C,stdDev:_}}else this.isHandleOutsideImage=!0,h[o]={Modality:g.Modality}}a.invalidated=!1;const g=se.ANNOTATION_MODIFIED,m={annotation:e,viewportUID:r,renderingEngineUID:s,sceneUID:l};return(0,ie.triggerEvent)(ie.eventTarget,g,m),h})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),ae(this,"_getTargetVolumeUID",(e=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;const t=e.getVolumeActors();return t||t.length?t[0].uid:void 0})),this._throttledCalculateCachedStats=Fn(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),dr(e);const{annotation:t,viewportUIDsToRender:n}=this.editData,{data:i}=t;return i.active=!1,i.handles.activeHandleIndex=null,oi(n),this.editData=null,t.metadata.annotationUID}_getImageVolumeFromTargetUID(e,t){let n;if(e.startsWith("stackTarget")){const i=e.indexOf(":"),o=e.substring(i+1);n=t.getViewport(o).getImageData()}else n=ie.cache.getVolume(e);return{imageVolume:n,viewport:void 0}}_getTargetStackUID(e){return`stackTarget:${e.uid}`}}SE.toolName="VideoRedaction";const yE=SE})(),C})()));
1
+ /*! For license information please see index.js.LICENSE.txt */
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares")):"function"==typeof define&&define.amd?define(["gl-matrix","@cornerstonejs/core","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Common/DataModel/PiecewiseFunction","@kitware/vtk.js/Rendering/Core/ColorTransferFunction","@kitware/vtk.js/Common/Core/CellArray","@kitware/vtk.js/Common/Core/Points","@kitware/vtk.js/Common/DataModel/PolyData","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Common/Core/MatrixBuilder","@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget","@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor","@kitware/vtk.js/Rendering/Core/AxesActor","@kitware/vtk.js/IO/XML/XMLPolyDataReader","@kitware/vtk.js/Filters/General/ImageMarchingSquares"],t):"object"==typeof exports?exports.cornerstoneTools3D=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares")):e.cornerstoneTools3D=t(e.window,e.cornerstone3D,e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Common/DataModel/PiecewiseFunction"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction"],e["@kitware/vtk.js/Common/Core/CellArray"],e["@kitware/vtk.js/Common/Core/Points"],e["@kitware/vtk.js/Common/DataModel/PolyData"],e["@kitware/vtk.js/Rendering/Core/Mapper"],e["@kitware/vtk.js/Rendering/Core/Actor"],e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Common/Core/MatrixBuilder"],e["@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"],e["@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"],e["@kitware/vtk.js/Rendering/Core/AxesActor"],e["@kitware/vtk.js/IO/XML/XMLPolyDataReader"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"])}(self,((e,t,n,i,o,a,r,s,l,d,c,h,u,g,m,v,p,f)=>(()=>{var w={907:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",o=9007199254740991,a="[object Arguments]",r="[object Boolean]",s="[object Date]",l="[object Function]",d="[object GeneratorFunction]",c="[object Map]",h="[object Number]",u="[object Object]",g="[object Promise]",m="[object RegExp]",v="[object Set]",p="[object String]",f="[object Symbol]",w="[object WeakMap]",I="[object ArrayBuffer]",E="[object DataView]",C="[object Float32Array]",_="[object Float64Array]",b="[object Int8Array]",T="[object Int16Array]",D="[object Int32Array]",S="[object Uint8Array]",y="[object Uint8ClampedArray]",x="[object Uint16Array]",M="[object Uint32Array]",O=/\w*$/,P=/^\[object .+?Constructor\]$/,A=/^(?:0|[1-9]\d*)$/,R={};R[a]=R["[object Array]"]=R[I]=R[E]=R[r]=R[s]=R[C]=R[_]=R[b]=R[T]=R[D]=R[c]=R[h]=R[u]=R[m]=R[v]=R[p]=R[f]=R[S]=R[y]=R[x]=R[M]=!0,R["[object Error]"]=R[l]=R[w]=!1;var L="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,N="object"==typeof self&&self&&self.Object===Object&&self,U=L||N||Function("return this")(),k=t&&!t.nodeType&&t,V=k&&e&&!e.nodeType&&e,W=V&&V.exports===k;function B(e,t){return e.set(t[0],t[1]),e}function H(e,t){return e.add(t),e}function F(e,t,n,i){var o=-1,a=e?e.length:0;for(i&&a&&(n=e[++o]);++o<a;)n=t(n,e[o],o,e);return n}function G(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function $(e){var t=-1,n=Array(e.size);return e.forEach((function(e,i){n[++t]=[i,e]})),n}function q(e,t){return function(n){return e(t(n))}}function z(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}var j,K=Array.prototype,Y=Function.prototype,X=Object.prototype,J=U["__core-js_shared__"],Z=(j=/[^.]+$/.exec(J&&J.keys&&J.keys.IE_PROTO||""))?"Symbol(src)_1."+j:"",Q=Y.toString,ee=X.hasOwnProperty,te=X.toString,ne=RegExp("^"+Q.call(ee).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ie=W?U.Buffer:void 0,oe=U.Symbol,ae=U.Uint8Array,re=q(Object.getPrototypeOf,Object),se=Object.create,le=X.propertyIsEnumerable,de=K.splice,ce=Object.getOwnPropertySymbols,he=ie?ie.isBuffer:void 0,ue=q(Object.keys,Object),ge=Ue(U,"DataView"),me=Ue(U,"Map"),ve=Ue(U,"Promise"),pe=Ue(U,"Set"),fe=Ue(U,"WeakMap"),we=Ue(Object,"create"),Ie=He(ge),Ee=He(me),Ce=He(ve),_e=He(pe),be=He(fe),Te=oe?oe.prototype:void 0,De=Te?Te.valueOf:void 0;function Se(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function ye(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function xe(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Me(e){this.__data__=new ye(e)}function Oe(e,t,n){var i=e[t];ee.call(e,t)&&Fe(i,n)&&(void 0!==n||t in e)||(e[t]=n)}function Pe(e,t){for(var n=e.length;n--;)if(Fe(e[n][0],t))return n;return-1}function Ae(e,t,n,i,o,g,w){var P;if(i&&(P=g?i(e,o,g,w):i(e)),void 0!==P)return P;if(!je(e))return e;var A=Ge(e);if(A){if(P=function(e){var t=e.length,n=e.constructor(t);return t&&"string"==typeof e[0]&&ee.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!t)return function(e,t){var n=-1,i=e.length;for(t||(t=Array(i));++n<i;)t[n]=e[n];return t}(e,P)}else{var L=Ve(e),N=L==l||L==d;if(qe(e))return function(e,t){if(t)return e.slice();var n=new e.constructor(e.length);return e.copy(n),n}(e,t);if(L==u||L==a||N&&!g){if(G(e))return g?e:{};if(P=function(e){return"function"!=typeof e.constructor||Be(e)?{}:je(t=re(e))?se(t):{};var t}(N?{}:e),!t)return function(e,t){return Le(e,ke(e),t)}(e,function(e,t){return e&&Le(t,Ke(t),e)}(P,e))}else{if(!R[L])return g?e:{};P=function(e,t,n,i){var o,a=e.constructor;switch(t){case I:return Re(e);case r:case s:return new a(+e);case E:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,i);case C:case _:case b:case T:case D:case S:case y:case x:case M:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}(e,i);case c:return function(e,t,n){return F(t?n($(e),!0):$(e),B,new e.constructor)}(e,i,n);case h:case p:return new a(e);case m:return function(e){var t=new e.constructor(e.source,O.exec(e));return t.lastIndex=e.lastIndex,t}(e);case v:return function(e,t,n){return F(t?n(z(e),!0):z(e),H,new e.constructor)}(e,i,n);case f:return o=e,De?Object(De.call(o)):{}}}(e,L,Ae,t)}}w||(w=new Me);var U=w.get(e);if(U)return U;if(w.set(e,P),!A)var k=n?function(e){return function(e,t,n){var i=t(e);return Ge(e)?i:function(e,t){for(var n=-1,i=t.length,o=e.length;++n<i;)e[o+n]=t[n];return e}(i,n(e))}(e,Ke,ke)}(e):Ke(e);return function(e,t){for(var n=-1,i=e?e.length:0;++n<i&&!1!==t(e[n],n););}(k||e,(function(o,a){k&&(o=e[a=o]),Oe(P,a,Ae(o,t,n,i,a,e,w))})),P}function Re(e){var t=new e.constructor(e.byteLength);return new ae(t).set(new ae(e)),t}function Le(e,t,n,i){n||(n={});for(var o=-1,a=t.length;++o<a;){var r=t[o],s=i?i(n[r],e[r],r,n,e):void 0;Oe(n,r,void 0===s?e[r]:s)}return n}function Ne(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function Ue(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!je(e)||(t=e,Z&&Z in t))&&(ze(e)||G(e)?ne:P).test(He(e));var t}(n)?n:void 0}Se.prototype.clear=function(){this.__data__=we?we(null):{}},Se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},Se.prototype.get=function(e){var t=this.__data__;if(we){var n=t[e];return n===i?void 0:n}return ee.call(t,e)?t[e]:void 0},Se.prototype.has=function(e){var t=this.__data__;return we?void 0!==t[e]:ee.call(t,e)},Se.prototype.set=function(e,t){return this.__data__[e]=we&&void 0===t?i:t,this},ye.prototype.clear=function(){this.__data__=[]},ye.prototype.delete=function(e){var t=this.__data__,n=Pe(t,e);return!(n<0||(n==t.length-1?t.pop():de.call(t,n,1),0))},ye.prototype.get=function(e){var t=this.__data__,n=Pe(t,e);return n<0?void 0:t[n][1]},ye.prototype.has=function(e){return Pe(this.__data__,e)>-1},ye.prototype.set=function(e,t){var n=this.__data__,i=Pe(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},xe.prototype.clear=function(){this.__data__={hash:new Se,map:new(me||ye),string:new Se}},xe.prototype.delete=function(e){return Ne(this,e).delete(e)},xe.prototype.get=function(e){return Ne(this,e).get(e)},xe.prototype.has=function(e){return Ne(this,e).has(e)},xe.prototype.set=function(e,t){return Ne(this,e).set(e,t),this},Me.prototype.clear=function(){this.__data__=new ye},Me.prototype.delete=function(e){return this.__data__.delete(e)},Me.prototype.get=function(e){return this.__data__.get(e)},Me.prototype.has=function(e){return this.__data__.has(e)},Me.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var i=n.__data__;if(!me||i.length<199)return i.push([e,t]),this;n=this.__data__=new xe(i)}return n.set(e,t),this};var ke=ce?q(ce,Object):function(){return[]},Ve=function(e){return te.call(e)};function We(e,t){return!!(t=null==t?o:t)&&("number"==typeof e||A.test(e))&&e>-1&&e%1==0&&e<t}function Be(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||X)}function He(e){if(null!=e){try{return Q.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Fe(e,t){return e===t||e!=e&&t!=t}(ge&&Ve(new ge(new ArrayBuffer(1)))!=E||me&&Ve(new me)!=c||ve&&Ve(ve.resolve())!=g||pe&&Ve(new pe)!=v||fe&&Ve(new fe)!=w)&&(Ve=function(e){var t=te.call(e),n=t==u?e.constructor:void 0,i=n?He(n):void 0;if(i)switch(i){case Ie:return E;case Ee:return c;case Ce:return g;case _e:return v;case be:return w}return t});var Ge=Array.isArray;function $e(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=o}(e.length)&&!ze(e)}var qe=he||function(){return!1};function ze(e){var t=je(e)?te.call(e):"";return t==l||t==d}function je(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ke(e){return $e(e)?function(e,t){var n=Ge(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&$e(e)}(e)&&ee.call(e,"callee")&&(!le.call(e,"callee")||te.call(e)==a)}(e)?function(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}(e.length,String):[],i=n.length,o=!!i;for(var r in e)!t&&!ee.call(e,r)||o&&("length"==r||We(r,i))||n.push(r);return n}(e):function(e){if(!Be(e))return ue(e);var t=[];for(var n in Object(e))ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}e.exports=function(e){return Ae(e,!0,!0)}},485:(e,t,n)=>{var i,o="__lodash_hash_undefined__",a=1/0,r="[object Function]",s="[object GeneratorFunction]",l="[object Symbol]",d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,h=/^\./,u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,g=/\\(\\)?/g,m=/^\[object .+?Constructor\]$/,v="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,f=v||p||Function("return this")(),w=Array.prototype,I=Function.prototype,E=Object.prototype,C=f["__core-js_shared__"],_=(i=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"",b=I.toString,T=E.hasOwnProperty,D=E.toString,S=RegExp("^"+b.call(T).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=f.Symbol,x=w.splice,M=V(f,"Map"),O=V(Object,"create"),P=y?y.prototype:void 0,A=P?P.toString:void 0;function R(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function L(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function N(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function U(e,t){for(var n,i,o=e.length;o--;)if((n=e[o][0])===(i=t)||n!=n&&i!=i)return o;return-1}function k(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function V(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!G(e)||_&&_ in e)return!1;var t=function(e){var t=G(e)?D.call(e):"";return t==r||t==s}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?S:m;return t.test(function(e){if(null!=e){try{return b.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(n)?n:void 0}R.prototype.clear=function(){this.__data__=O?O(null):{}},R.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},R.prototype.get=function(e){var t=this.__data__;if(O){var n=t[e];return n===o?void 0:n}return T.call(t,e)?t[e]:void 0},R.prototype.has=function(e){var t=this.__data__;return O?void 0!==t[e]:T.call(t,e)},R.prototype.set=function(e,t){return this.__data__[e]=O&&void 0===t?o:t,this},L.prototype.clear=function(){this.__data__=[]},L.prototype.delete=function(e){var t=this.__data__,n=U(t,e);return!(n<0||(n==t.length-1?t.pop():x.call(t,n,1),0))},L.prototype.get=function(e){var t=this.__data__,n=U(t,e);return n<0?void 0:t[n][1]},L.prototype.has=function(e){return U(this.__data__,e)>-1},L.prototype.set=function(e,t){var n=this.__data__,i=U(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},N.prototype.clear=function(){this.__data__={hash:new R,map:new(M||L),string:new R}},N.prototype.delete=function(e){return k(this,e).delete(e)},N.prototype.get=function(e){return k(this,e).get(e)},N.prototype.has=function(e){return k(this,e).has(e)},N.prototype.set=function(e,t){return k(this,e).set(e,t),this};var W=H((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if($(e))return A?A.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return h.test(e)&&n.push(""),e.replace(u,(function(e,t,i,o){n.push(i?o.replace(g,"$1"):t||e)})),n}));function B(e){if("string"==typeof e||$(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function H(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var i=arguments,o=t?t.apply(this,i):i[0],a=n.cache;if(a.has(o))return a.get(o);var r=e.apply(this,i);return n.cache=a.set(o,r),r};return n.cache=new(H.Cache||N),n}H.Cache=N;var F=Array.isArray;function G(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function $(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&D.call(e)==l}e.exports=function(e,t,n){var i=null==e?void 0:function(e,t){var n;t=function(e,t){if(F(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!$(e))||c.test(e)||!d.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:F(n=t)?n:W(n);for(var i=0,o=t.length;null!=e&&i<o;)e=e[B(t[i++])];return i&&i==o?e:void 0}(e,t);return void 0===i?n:i}},396:e=>{"use strict";e.exports=r},785:e=>{"use strict";e.exports=n},807:e=>{"use strict";e.exports=h},847:e=>{"use strict";e.exports=u},348:e=>{"use strict";e.exports=s},283:e=>{"use strict";e.exports=i},441:e=>{"use strict";e.exports=o},70:e=>{"use strict";e.exports=l},543:e=>{"use strict";e.exports=f},614:e=>{"use strict";e.exports=p},518:e=>{"use strict";e.exports=g},474:e=>{"use strict";e.exports=c},744:e=>{"use strict";e.exports=m},424:e=>{"use strict";e.exports=v},795:e=>{"use strict";e.exports=a},610:e=>{"use strict";e.exports=d},953:e=>{"use strict";e.exports=t},976:t=>{"use strict";t.exports=e}},I={};function E(e){var t=I[e];if(void 0!==t)return t.exports;var n=I[e]={id:e,loaded:!1,exports:{}};return w[e](n,n.exports,E),n.loaded=!0,n.exports}E.m=w,E.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return E.d(t,{a:t}),t},E.d=(e,t)=>{for(var n in t)E.o(t,n)&&!E.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},E.u=e=>e+".index.js",E.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),E.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),E.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},E.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;E.g.importScripts&&(e=E.g.location+"");var t=E.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!e;)e=n[i--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),E.p=e})(),E.b=document.baseURI||self.location.href;var C={};return(()=>{"use strict";E.r(C),E.d(C,{AdvancedMagnifyTool:()=>PI,AngleTool:()=>cI,AnnotationDisplayTool:()=>Yl,AnnotationTool:()=>Jl,ArrowAnnotateTool:()=>sI,BaseTool:()=>Fl,BidirectionalTool:()=>Ev,BrushTool:()=>nv,CONSTANTS:()=>g,CircleROIStartEndThresholdTool:()=>sE,CircleROITool:()=>Aw,CircleScissorsTool:()=>QI,CobbAngleTool:()=>mI,CrosshairsTool:()=>hw,DragProbeTool:()=>Of,EllipticalROITool:()=>Sw,Enums:()=>ne,EraserTool:()=>zI,HeightTool:()=>nw,KeyImageTool:()=>_I,LengthTool:()=>Zf,LivewireContourSegmentationTool:()=>iI,LivewireContourTool:()=>tI,MIPJumpToClickTool:()=>Kf,MagnifyTool:()=>DI,OrientationMarkerTool:()=>wE,OverlayGridTool:()=>fw,PaintFillTool:()=>TE,PanTool:()=>Cf,PlanarFreehandContourSegmentationTool:()=>oc,PlanarFreehandROITool:()=>nc,PlanarRotateTool:()=>Hf,ProbeTool:()=>yf,RectangleROIStartEndThresholdTool:()=>vm,RectangleROIThresholdTool:()=>fm,RectangleROITool:()=>lm,RectangleScissorsTool:()=>JI,ReferenceCursors:()=>NI,ReferenceLines:()=>mw,ReferenceLinesTool:()=>mw,ScaleOverlayTool:()=>VI,SculptorTool:()=>$I,SegmentSelectTool:()=>EE,SegmentationIntersectionTool:()=>Cw,SphereScissorsTool:()=>tE,SplineContourSegmentationTool:()=>jw,SplineROITool:()=>qw,StackScrollMouseWheelTool:()=>Gf,StackScrollTool:()=>Vf,Synchronizer:()=>pu,SynchronizerManager:()=>h,ToolGroupManager:()=>u,TrackballRotateTool:()=>bf,Types:()=>z,UltrasoundDirectionalTool:()=>wI,VideoRedactionTool:()=>SE,VolumeRotateMouseWheelTool:()=>zf,WindowLevelRegionTool:()=>Lf,WindowLevelTool:()=>Af,ZoomTool:()=>Uf,addTool:()=>md,annotation:()=>K,cancelActiveManipulations:()=>gu,cursors:()=>q,destroy:()=>cu,drawing:()=>v,init:()=>du,removeTool:()=>vd,segmentation:()=>te,state:()=>xe,synchronizers:()=>m,utilities:()=>$});var e={};E.r(e),E.d(e,{checkAndDefineIsLockedProperty:()=>me,getAnnotationsLocked:()=>he,getAnnotationsLockedCount:()=>ge,isAnnotationLocked:()=>ue,setAnnotationLocked:()=>de,unlockAllAnnotations:()=>ce});var t={};E.r(t),E.d(t,{deselectAnnotation:()=>Be,getAnnotationsSelected:()=>He,getAnnotationsSelectedByToolName:()=>Fe,getAnnotationsSelectedCount:()=>$e,isAnnotationSelected:()=>Ge,setAnnotationSelected:()=>We});var n={};E.r(n),E.d(n,{checkAndDefineIsVisibleProperty:()=>Ze,isAnnotationVisible:()=>Je,setAnnotationVisibility:()=>Ye,showAllAnnotations:()=>Xe});var i={};E.r(i),E.d(i,{addAnnotation:()=>mt,addChildAnnotation:()=>ht,clearParentAnnotation:()=>ct,getAllAnnotations:()=>dt,getAnnotation:()=>be,getAnnotationManager:()=>at,getAnnotations:()=>lt,getChildAnnotations:()=>gt,getNumberOfAnnotations:()=>vt,getParentAnnotation:()=>ut,invalidateAnnotation:()=>It,removeAllAnnotations:()=>ft,removeAnnotation:()=>pt,removeAnnotations:()=>wt,resetAnnotationManager:()=>st,setAnnotationManager:()=>rt});var o={};E.r(o),E.d(o,{copyPoints:()=>In,copyPointsList:()=>wn,getDeltaDistance:()=>vn,getDeltaDistanceBetweenIPoints:()=>fn,getDeltaPoints:()=>mn,getDeltaRotation:()=>pn,getMeanPoints:()=>En,getMeanTouchPoints:()=>Cn});var a={};E.r(a),E.d(a,{addColorLUT:()=>po,getSegmentIndexColor:()=>wo,setColorLUT:()=>fo,setSegmentIndexColor:()=>Io});var r={};E.r(r),E.d(r,{getHiddenSegmentIndices:()=>Go,getSegmentIndexVisibility:()=>Fo,getSegmentationRepresentationVisibility:()=>Wo,setSegmentIndexVisibility:()=>Ho,setSegmentIndicesVisibility:()=>Bo,setSegmentationRepresentationVisibility:()=>Vo});var s={};E.r(s),E.d(s,{addCanvasPointsToArray:()=>tr,containsPoint:()=>Ca,containsPoints:()=>_a,decimate:()=>Ya,getAABB:()=>wa,getArea:()=>ba,getClosestLineSegmentIntersection:()=>Ja,getFirstLineSegmentIntersectionIndexes:()=>$a,getLineSegmentIntersectionsCoordinates:()=>Xa,getLineSegmentIntersectionsIndexes:()=>Pa,getNormal2:()=>ya,getNormal3:()=>Sa,getSignedArea:()=>Ta,getSubPixelSpacingAndXYDirections:()=>Qa,getWindingDirection:()=>Da,intersectPolyline:()=>qa,isClosed:()=>Ea,isPointInsidePolyline3D:()=>ar,mergePolylines:()=>Fa,pointCanProjectOnLine:()=>nr,pointsAreWithinCloseContourProximity:()=>er,projectTo2D:()=>or,subtractPolylines:()=>Ga});var l={};E.r(l),E.d(l,{hideElementCursor:()=>Fr,initElementCursor:()=>Wr,resetElementCursor:()=>Hr,setElementCursor:()=>Br});var d={};E.r(d),E.d(d,{getLockedSegmentIndices:()=>Kd,isSegmentIndexLocked:()=>zd,setSegmentIndexLocked:()=>jd});var c={};E.r(c),E.d(c,{Z:()=>Tc});var h={};E.r(h),E.d(h,{createSynchronizer:()=>fu,destroy:()=>wu,destroySynchronizer:()=>Cu,getAllSynchronizers:()=>Eu,getSynchronizer:()=>Iu,getSynchronizersForViewport:()=>Yh});var u={};E.r(u),E.d(u,{createToolGroup:()=>Yu,destroy:()=>su,destroyToolGroup:()=>ru,getAllToolGroups:()=>Xu,getToolGroup:()=>Wd,getToolGroupForViewport:()=>ur,getToolGroupsWithToolName:()=>Ae});var g={};E.r(g),E.d(g,{COLOR_LUT:()=>Cc});var m={};E.r(m),E.d(m,{createCameraPositionSynchronizer:()=>Qu,createImageSliceSynchronizer:()=>vg,createPresentationViewSynchronizer:()=>ng,createSlabThicknessSynchronizer:()=>wg,createStackImageSynchronizer:()=>Ig,createVOISynchronizer:()=>og,createZoomPanSynchronizer:()=>sg});var v={};E.r(v),E.d(v,{draw:()=>Tr,drawArrow:()=>Sg,drawCircle:()=>Eg,drawEllipse:()=>_g,drawEllipseByCoordinates:()=>Cg,drawHandle:()=>hl,drawHandles:()=>ul,drawHeight:()=>bg,drawLine:()=>Ml,drawLinkedTextBox:()=>Pl,drawPath:()=>dl,drawPolyline:()=>cl,drawRect:()=>Dg,drawRectByCoordinates:()=>Tg,drawRedactionRect:()=>yg,drawTextBox:()=>xl,setAttributesIfNecessary:()=>ll,setNewAttributesIfValid:()=>sl});var p={};E.r(p),E.d(p,{AnnotationToPointData:()=>Jg,acceptAutogeneratedInterpolations:()=>Zg,areCoplanarContours:()=>Ug,calculatePerimeter:()=>Bl,contourFinder:()=>Bg,detectContourHoles:()=>Fg,findHandlePolylineIndex:()=>em,generateContourSetsFromLabelmap:()=>zg,getContourHolesDataCanvas:()=>ml,getContourHolesDataWorld:()=>gl,getDeduplicatedVTKPolyDataPoints:()=>Hg,updateContourPolyline:()=>Os});var f={};E.r(f),E.d(f,{contourAndFindLargestBidirectional:()=>gv,createBidirectionalToolData:()=>mv,createLabelmapVolumeForViewport:()=>Tm,createMergedLabelmapForIndex:()=>Cm,floodFill:()=>Sm,getBrushSizeForToolGroup:()=>av,getBrushThresholdForToolGroup:()=>sv,getBrushToolInstances:()=>iv,getDefaultRepresentationConfig:()=>bm,getHoveredContourSegmentationAnnotation:()=>yv,getSegmentIndexAtLabelmapBorder:()=>Dv,getSegmentIndexAtWorldPoint:()=>Tv,getUniqueSegmentIndices:()=>ho,invalidateBrushCursor:()=>bv,isValidRepresentationConfig:()=>_m,rectangleROIThresholdVolumeByRange:()=>Em,segmentContourAction:()=>Cv,setBrushSizeForToolGroup:()=>ov,setBrushThresholdForToolGroup:()=>rv,thresholdSegmentationByRange:()=>lv,thresholdVolumeByRange:()=>tm,triggerSegmentationRender:()=>Nc,triggerSegmentationRenderBySegmentationId:()=>Uc});var w={};E.r(w),E.d(w,{getTextBoxCoordsCanvas:()=>Al});var I={};E.r(I),E.d(I,{distanceToPoint:()=>Mv,distanceToPointSquared:()=>xv,intersectAABB:()=>cd});var _={};E.r(_),E.d(_,{BasicStatsCalculator:()=>Vl,Calculator:()=>Nl});var b={};E.r(b),E.d(b,{getCanvasEllipseCorners:()=>km,pointInEllipse:()=>Vm,precalculatePointInEllipse:()=>Wm});var T={};E.r(T),E.d(T,{distanceToPoint:()=>im,distanceToPointSquared:()=>ja,distanceToPointSquaredInfo:()=>za,intersectLine:()=>pv,isPointOnLineSegment:()=>Ra});var D={};E.r(D),E.d(D,{distanceToPoint:()=>$r,distanceToPointSquared:()=>Ia,mirror:()=>Ov});var S={};E.r(S),E.d(S,{distanceToPoint:()=>om});var y={};E.r(y),E.d(y,{findClosestPoint:()=>Ol,liangBarksyClip:()=>Nv});var x={};E.r(x),E.d(x,{BasicStatsCalculator:()=>_,aabb:()=>I,ellipse:()=>b,lineSegment:()=>T,point:()=>D,polyline:()=>s,rectangle:()=>S,vec2:()=>y});var M={};E.r(M),E.d(M,{default:()=>Hv,filterAnnotationsForDisplay:()=>dr,filterAnnotationsWithinSamePlane:()=>hm,filterAnnotationsWithinSlice:()=>lr,getPointInLineOfSightWithCriteria:()=>Vv,getWorldWidthAndHeightFromCorners:()=>nm,isPlaneIntersectingAABB:()=>Bv});var O={};E.r(O),E.d(O,{filterViewportsWithFrameOfReferenceUID:()=>hr,filterViewportsWithParallelNormals:()=>wr,filterViewportsWithToolEnabled:()=>pr,getViewportIdsWithToolToRender:()=>Ir});var P={};E.r(P),E.d(P,{getOrientationStringLPS:()=>Fv,invertOrientationStringLPS:()=>Gv});var A={};E.r(A),E.d(A,{Events:()=>qv,addToolState:()=>jv,getToolState:()=>Kv,playClip:()=>Qv,stopClip:()=>ep});var R={};E.r(R),E.d(R,{extend2DBoundingBoxInViewAxis:()=>wm,getBoundingBoxAroundShape:()=>gi,getBoundingBoxAroundShapeIJK:()=>gi,getBoundingBoxAroundShapeWorld:()=>mi});var L={};E.r(L),E.d(L,{default:()=>rp,smoothAnnotation:()=>ap});var N={};E.r(N),E.d(N,{getBoundsIJKFromRectangleAnnotations:()=>Im,isAxisAlignedRectangle:()=>dp});var U={};E.r(U),E.d(U,{isViewportPreScaled:()=>Rl,jumpToSlice:()=>cg,jumpToWorld:()=>Pp});var k={};E.r(k),E.d(k,{generateImageFromTimeData:()=>Lp,getDataInTime:()=>Ap});var V={};E.r(V),E.d(V,{getPoint:()=>Np,getPolyDataPointIndexes:()=>Up,getPolyDataPoints:()=>kp});var W={};E.r(W),E.d(W,{ColorbarRangeTextPosition:()=>Vp});var B={};E.r(B),E.d(B,{Colorbar:()=>Yp,Enums:()=>W,ViewportColorbar:()=>Zp});var H={};E.r(H),E.d(H,{calculateMinMaxMean:()=>ef,extractWindowLevelRegionToolData:()=>tf,getLuminanceFromRegion:()=>Qp});var F={};E.r(F),E.d(F,{colorbar:()=>B,windowLevel:()=>H});var G={};E.r(G),E.d(G,{addContourSegmentationAnnotation:()=>Lo,areSameSegment:()=>ud,isContourSegmentationAnnotation:()=>hd,removeContourSegmentationAnnotation:()=>gd});var $={};E.r($),E.d($,{annotationFrameRange:()=>Ng,annotationHydration:()=>Po,boundingBox:()=>R,calibrateImageSpacing:()=>Ag,cine:()=>A,clip:()=>lg,contourSegmentation:()=>G,contours:()=>p,debounce:()=>ao,drawing:()=>w,dynamicVolume:()=>k,getAnnotationNearPoint:()=>xg,getAnnotationNearPointOnEnabledElement:()=>Mg,getCalibratedAspect:()=>fa,getCalibratedLengthUnitsAndScale:()=>va,getCalibratedProbeUnitsAndValue:()=>pa,getClosestImageIdForStackViewport:()=>Ro,getSphereBoundsInfo:()=>Lg,getViewportForAnnotation:()=>Rd,isObject:()=>oo,jumpToSlice:()=>cg,math:()=>x,orientation:()=>P,planar:()=>M,planarFreehandROITool:()=>L,pointToString:()=>Hi,polyDataUtils:()=>V,rectangleROITool:()=>N,roundNumber:()=>nf,scroll:()=>dg,segmentation:()=>f,stackContextPrefetch:()=>Op,stackPrefetch:()=>Tp,throttle:()=>cr,touch:()=>o,triggerAnnotationRender:()=>Or,triggerAnnotationRenderForToolGroupIds:()=>Hd,triggerAnnotationRenderForViewportIds:()=>Ar,triggerEvent:()=>ie.triggerEvent,viewport:()=>U,viewportFilters:()=>O,voi:()=>F});var q={};E.r(q),E.d(q,{CursorNames:()=>af,CursorSVG:()=>Au,ImageMouseCursor:()=>Tu,MouseCursor:()=>Nr,SVGMouseCursor:()=>Vu,elementCursor:()=>l,registerCursor:()=>Lu,setCursorForElement:()=>of});var z={};E.r(z);var j={};E.r(j),E.d(j,{getFont:()=>rf,getState:()=>jl,style:()=>Gl});var K={};E.r(K),E.d(K,{AnnotationGroup:()=>sf,FrameOfReferenceSpecificAnnotationManager:()=>_e,config:()=>j,locking:()=>e,selection:()=>t,state:()=>i,visibility:()=>n});var Y={};E.r(Y),E.d(Y,{getActiveSegmentation:()=>mf,getActiveSegmentationRepresentation:()=>gf,setActiveSegmentationRepresentation:()=>vf});var X={};E.r(X),E.d(X,{addColorLUT:()=>vo,addSegmentation:()=>cf,addSegmentationRepresentation:()=>bc,getActiveSegmentationRepresentation:()=>$d,getAllSegmentationRepresentations:()=>Fd,getColorLUT:()=>Xi,getCurrentLabelmapImageIdForViewport:()=>dc,getGlobalConfig:()=>No,getNextColorLUTIndex:()=>_c,getPerSegmentConfig:()=>Ko,getSegmentation:()=>Yi,getSegmentationRepresentation:()=>Si,getSegmentationRepresentationConfig:()=>qo,getSegmentationRepresentationViewportStates:()=>yi,getSegmentationRepresentationVisibility:()=>ko,getSegmentationRepresentations:()=>xi,getSegmentationRepresentationsForSegmentation:()=>Gd,getSegmentations:()=>no,getViewportIdsWithSegmentation:()=>To,removeColorLUT:()=>wf,removeRepresentation:()=>Oi,removeSegmentation:()=>ff,setActiveSegmentationRepresentation:()=>uf,setGlobalConfig:()=>$o,setPerSegmentConfig:()=>jo,setSegmentationRepresentationConfig:()=>zo,setSegmentationRepresentationVisibility:()=>Uo,updateLabelmapSegmentationImageReferences:()=>Vc});var J={};E.r(J),E.d(J,{color:()=>a,getGlobalConfig:()=>Yo,getGlobalRepresentationConfig:()=>Jo,getPerSegmentConfig:()=>na,getSegmentIndexConfig:()=>oa,getSegmentationRepresentationConfig:()=>Qo,setGlobalConfig:()=>Xo,setGlobalRepresentationConfig:()=>Zo,setPerSegmentConfig:()=>ta,setSegmentIndexConfig:()=>ia,setSegmentationRepresentationConfig:()=>ea,visibility:()=>r});var Z={};E.r(Z),E.d(Z,{getActiveSegmentIndex:()=>qd,setActiveSegmentIndex:()=>If});var Q={};E.r(Q),E.d(Q,{triggerSegmentationDataModified:()=>Ci,triggerSegmentationModified:()=>io,triggerSegmentationRemoved:()=>pf,triggerSegmentationRepresentationModified:()=>mo,triggerSegmentationRepresentationRemoved:()=>Mi});var ee={};E.r(ee),E.d(ee,{canComputeRequestedRepresentation:()=>eo,computeAndAddContourRepresentation:()=>rc,computeAndAddLabelmapRepresentation:()=>Sc,computeAndAddSurfaceRepresentation:()=>Do});var te={};E.r(te),E.d(te,{activeSegmentation:()=>Y,addRepresentationData:()=>to,addSegmentationRepresentations:()=>Tc,addSegmentations:()=>hf,config:()=>J,convertStackToVolumeSegmentation:()=>Ti,convertVolumeToStackSegmentation:()=>Dc,polySeg:()=>ee,removeSegmentationRepresentations:()=>lf,segmentIndex:()=>Z,segmentLocking:()=>d,state:()=>X,triggerSegmentationEvents:()=>Q});var ne={};E.r(ne),E.d(ne,{AnnotationStyleStates:()=>zl,ChangeTypes:()=>De,Events:()=>se,KeyboardBindings:()=>ts,MouseBindings:()=>es,SegmentationRepresentations:()=>ri,StrategyCallbacks:()=>xm,Swipe:()=>un,ToolModes:()=>Oe,WorkerTypes:()=>Bi});var ie=E(953);function oe(e){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oe(e)}function ae(e,t,n){return(t=function(e){var t=function(e){if("object"!==oe(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!==oe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===oe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re=function(e){return e.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",e.TOOLGROUP_VIEWPORT_ADDED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_ADDED",e.TOOLGROUP_VIEWPORT_REMOVED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_REMOVED",e.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",e.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",e.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",e.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",e.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",e.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",e.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",e.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",e.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",e.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",e.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",e.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",e.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",e.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",e.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",e.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",e.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",e.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",e.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",e.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",e.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",e.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",e.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",e.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",e.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",e.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",e.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",e.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",e.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",e.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",e.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",e.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",e.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",e.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE",e}(re||{});const se=re,le=new Set;function de(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=ve();e&&(t?function(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}(e,le,n):pe(e,le,n)),fe(n,le)}function ce(){const e=ve();!function(e,t){e.forEach((n=>{pe(n,e,t)}))}(le,e),fe(e,le)}function he(){return Array.from(le)}function ue(e){return le.has(e)}function ge(){return le.size}function me(e){if(e){const t=!!e.isLocked;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isLocked");return t?t.configurable&&(t.set!==we||t.get!==Ie):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:we,get:Ie}),de(e,t)}}function ve(){return Object.freeze({added:[],removed:[],locked:[]})}function pe(e,t,n){t.delete(e)&&n.removed.push(e)}function fe(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.locked.push(t)})),(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_LOCK_CHANGE,e))}function we(e){de(this,e)}function Ie(){return ue(this)}class Ee{constructor(e){ae(this,"annotations",void 0),ae(this,"uid",void 0),ae(this,"getGroupKey",(e=>{if("string"==typeof e)return e;const t=e,n=(0,ie.getEnabledElement)(t);if(!n)throw new Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return n.FrameOfReferenceUID})),ae(this,"_imageVolumeModifiedHandler",(e=>{const t=e.detail,{FrameOfReferenceUID:n}=t,i=this.annotations[n];i&&Object.keys(i).forEach((e=>{i[e].forEach((e=>{void 0!==e.invalidated&&(e.invalidated=!0)}))}))})),ae(this,"getFramesOfReference",(()=>Object.keys(this.annotations))),ae(this,"getAnnotations",((e,t)=>{const n=this.annotations;return n[e]?t?n[e][t]?n[e][t]:[]:n[e]:[]})),ae(this,"getAnnotation",(e=>{const t=this.annotations;for(const n in t){const i=t[n];for(const t in i){const n=i[t];for(const t of n)if(e===t.annotationUID)return t}}})),ae(this,"getNumberOfAnnotations",((e,t)=>{const n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let i=0;for(const e in n)i+=n[e].length;return i})),ae(this,"addAnnotation",((e,t)=>{const{metadata:n}=e,{FrameOfReferenceUID:i,toolName:o}=n;t=t||i;const a=this.annotations;let r=a[t];r||(a[t]={},r=a[t]);let s=r[o];s||(r[o]=[],s=r[o]),s.push(e),me(e),(e=>{e.data||(e.data={}),e.data.handles||(e.data.handles={}),e.data.handles.textBox||(e.data.handles.textBox={})})(e),(e=>{e.data||(e.data={}),e.data.cachedStats||(e.data.cachedStats={})})(e)})),ae(this,"removeAnnotation",(e=>{const{annotations:t}=this;for(const n in t){const i=t[n];for(const t in i){const n=i[t],o=n.findIndex((t=>t.annotationUID===e));-1!==o&&(n.splice(o,1),0===n.length&&delete i[t])}0===Object.keys(i).length&&delete t[n]}})),ae(this,"removeAnnotations",((e,t)=>{const n=this.annotations,i=[];if(!n[e])return i;if(t){const o=n[e][t];for(const e of o)this.removeAnnotation(e.annotationUID),i.push(e)}else for(const t in n[e]){const o=n[e][t];for(const e of o)this.removeAnnotation(e.annotationUID),i.push(e)}return i})),ae(this,"saveAnnotations",((e,t)=>{const n=this.annotations;if(e&&t){const i=n[e];if(!i)return;const o=i[t];return structuredClone(o)}if(e){const t=n[e];return structuredClone(t)}return structuredClone(n)})),ae(this,"restoreAnnotations",((e,t,n)=>{const i=this.annotations;if(t&&n){let o=i[t];o||(i[t]={},o=i[t]),o[n]=e}else t?i[t]=e:this.annotations=structuredClone(e)})),ae(this,"getAllAnnotations",(()=>Object.values(this.annotations).map((e=>Object.values(e))).flat(2))),ae(this,"getNumberOfAllAnnotations",(()=>{let e=0;const t=this.annotations;for(const n in t){const i=t[n];for(const t in i)e+=i[t].length}return e})),ae(this,"removeAllAnnotations",(()=>{const e=[];for(const t of this.getAllAnnotations())this.removeAnnotation(t.annotationUID),e.push(t);return e})),e||(e=ie.utilities.uuidv4()),this.annotations={},this.uid=e,ie.eventTarget.addEventListener(ie.Enums.Events.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}}const Ce=new Ee("DEFAULT"),_e=Ee;function be(e){return Ce.getAnnotation(e)}var Te=function(e){return e.Interaction="Interaction",e.HandlesUpdated="HandlesUpdated",e.StatsUpdated="StatsUpdated",e.InitialSetup="InitialSetup",e.Completed="Completed",e.InterpolationUpdated="InterpolationUpdated",e}(Te||{});const De=Te;let Se={};const ye={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:Se,enabledElements:[],handleRadius:6};let xe={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:Se,enabledElements:[],handleRadius:6};var Me=function(e){return e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled",e}(Me||{});const Oe=Me,Pe=[Oe.Active,Oe.Passive,Oe.Enabled],Ae=function(e){return xe.toolGroups.filter((t=>{let{toolOptions:n}=t;const i=Object.keys(n);for(let t=0;t<i.length;t++)if(e===i[t]&&n[e]&&Pe.includes(n[e].mode))return!0;return!1}))};function Re(e){const t=se.ANNOTATION_REMOVED;(0,ie.triggerEvent)(ie.eventTarget,t,e)}function Le(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:De.HandlesUpdated;const i=(0,ie.getEnabledElement)(t),{viewportId:o,renderingEngineId:a}=i,r=se.ANNOTATION_MODIFIED,s={annotation:e,viewportId:o,renderingEngineId:a,changeType:n};(0,ie.triggerEvent)(ie.eventTarget,r,s)}function Ne(e){ke({annotation:e})}function Ue(e){ke({annotation:e,contourHoleProcessingEnabled:arguments.length>1&&void 0!==arguments[1]&&arguments[1]})}function ke(e){const t=se.ANNOTATION_COMPLETED;(0,ie.triggerEvent)(ie.eventTarget,t,e)}const Ve=new Set;function We(e){arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?Be(e):function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=qe();t||ze(Ve,n),e&&!Ve.has(e)&&(Ve.add(e),n.added.push(e)),je(n,Ve)}(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function Be(e){const t=qe();e?Ve.delete(e)&&t.removed.push(e):ze(Ve,t),je(t,Ve)}function He(){return Array.from(Ve)}function Fe(e){return He().filter((t=>{const n=be(t);return n?.metadata?.toolName===e}))}function Ge(e){return Ve.has(e)}function $e(){return Ve.size}function qe(){return Object.freeze({added:[],removed:[],selection:[]})}function ze(e,t){e.forEach((n=>{e.delete(n)&&t.removed.push(n)}))}function je(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.selection.push(t)})),(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_SELECTION_CHANGE,e))}const Ke=new Set;function Ye(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=Qe();e&&(t?et(e,Ke,n):function(e,t,n){t.has(e)||(t.add(e),Ge(e)&&Be(e),n.lastHidden.push(e))}(e,Ke,n)),tt(n)}function Xe(){const e=Qe();Ke.forEach((t=>{et(t,Ke,e)})),tt(e)}function Je(e){if(be(e))return!Ke.has(e)}function Ze(e){if(e){const t=e.isVisible??!0;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isVisible");return t?t.configurable&&(t.set!==nt||t.get!==it):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:nt,get:it}),Ye(e.annotationUID,t)}}function Qe(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function et(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function tt(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(Ke.forEach((t=>{e.hidden.push(t)})),(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_VISIBILITY_CHANGE,e))}function nt(e){Ye(this.annotationUID,e)}function it(){return Je(this.annotationUID)}let ot=Ce;function at(){return ot}function rt(e){ot=e}function st(){ot=Ce}function lt(e,t){const n=at(),i=n.getGroupKey(t);return n.getAnnotations(i,e)}function dt(){return at().getAllAnnotations()}function ct(e){const{annotationUID:t,parentAnnotationUID:n}=e;if(!n)return;const i=be(n),o=i.childAnnotationUIDs.indexOf(t);i.childAnnotationUIDs.splice(o,1),e.parentAnnotationUID=void 0}function ht(e,t){const{annotationUID:n}=e,{annotationUID:i}=t;ct(t),e.childAnnotationUIDs||(e.childAnnotationUIDs=[]),e.childAnnotationUIDs.includes(i)||(e.childAnnotationUIDs.push(i),t.parentAnnotationUID=n)}function ut(e){return e.parentAnnotationUID?be(e.parentAnnotationUID):void 0}function gt(e){return e.childAnnotationUIDs?.map((e=>be(e)))??[]}function mt(e,t){e.annotationUID||(e.annotationUID=ie.utilities.uuidv4()),Ze(e);const n=at();if(t instanceof HTMLDivElement){const i=n.getGroupKey(t);n.addAnnotation(e,i),function(e,t){const n=(0,ie.getEnabledElement)(t),{renderingEngine:i,viewportId:o}=n,a=se.ANNOTATION_ADDED,r={annotation:e,viewportId:o,renderingEngineId:i.id};(0,ie.triggerEvent)(ie.eventTarget,a,r)}(e,t)}else n.addAnnotation(e),function(e){const{toolName:t}=e.metadata,n=Ae(t);if(!n.length)return;const i=[];n.forEach((t=>{t.viewportsInfo.forEach((t=>{const{renderingEngineId:n,viewportId:o}=t,{FrameOfReferenceUID:a}=(0,ie.getEnabledElementByIds)(o,n);e.metadata.FrameOfReferenceUID===a&&i.push(t)}))}));const o=se.ANNOTATION_ADDED,a={annotation:e};i.length?i.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;a.viewportId=n,a.renderingEngineId=t,(0,ie.triggerEvent)(ie.eventTarget,o,a)})):(0,ie.triggerEvent)(ie.eventTarget,o,a)}(e);return e.annotationUID}function vt(e,t){const n=at(),i=n.getGroupKey(t);return n.getNumberOfAnnotations(i,e)}function pt(e){if(!e)return;const t=at(),n=t.getAnnotation(e);n&&(n.childAnnotationUIDs?.forEach((e=>pt(e))),t.removeAnnotation(e),Re({annotation:n,annotationManagerUID:t.uid}))}function ft(){const e=at(),t=e.removeAllAnnotations();for(const n of t)Re({annotation:n,annotationManagerUID:e.uid})}function wt(e,t){const n=at(),i=n.getGroupKey(t),o=n.removeAnnotations(i,e);for(const e of o)Re({annotation:e,annotationManagerUID:n.uid})}function It(e){let t=e;for(;t;)t.invalidated=!0,t=t.parentAnnotationUID?be(t.parentAnnotationUID):void 0}function Et(e,t){const n=t||e.currentTarget,{viewport:i}=(0,ie.getEnabledElement)(n)||{};if(!i)return;const o=function(e){return[e.clientX,e.clientY]}(e),a=function(e){return[e.pageX,e.pageY]}(e),r=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,a);return{page:a,client:o,canvas:r,world:i.canvasToWorld(r)}}const Ct=function(e){const t=e.currentTarget,{viewportId:n,renderingEngineId:i}=(0,ie.getEnabledElement)(t),o=Et(e,t),a={event:e,eventName:se.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:i,camera:{},element:t,startPoints:o,lastPoints:o,currentPoints:o,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,ie.triggerEvent)(t,se.MOUSE_DOUBLE_CLICK,a)&&(e.stopImmediatePropagation(),e.preventDefault())},_t=se.MOUSE_MOVE,bt=function(e){const t=e.currentTarget,n=(0,ie.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=n,a={renderingEngineId:i,viewportId:o,camera:{},element:t,currentPoints:Et(e),eventName:_t,event:e};!(0,ie.triggerEvent)(t,_t,a)&&(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:Tt,MOUSE_DOWN_ACTIVATE:Dt,MOUSE_CLICK:St,MOUSE_UP:yt,MOUSE_DRAG:xt}=se,Mt=3,Ot={mouseButton:void 0,element:null,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};let Pt={mouseButton:void 0,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,element:null,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};const At={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function Rt(e){const t=(0,ie.getEnabledElement)(Pt.element);if(!t?.viewport)return;const n=Et(e,Pt.element),i=Ft(Pt.element,Pt.lastPoints),o=Gt(n,i);if(At.doubleClickTimeout){if(!Ut(o.canvas))return;Vt()}const a={event:e,eventName:xt,mouseButton:Pt.mouseButton,renderingEngineId:Pt.renderingEngineId,viewportId:Pt.viewportId,camera:{},element:Pt.element,startPoints:Ht(Pt.startPoints),lastPoints:Ht(i),currentPoints:n,deltaPoints:o};!(0,ie.triggerEvent)(Pt.element,xt,a)&&(e.stopImmediatePropagation(),e.preventDefault()),Pt.lastPoints=Ht(n)}function Lt(e){if(clearTimeout(Pt.preventClickTimeout),At.doubleClickTimeout)At.mouseUpEvent?Bt():(At.mouseUpEvent=e,Pt.element.addEventListener("mousemove",Nt));else{const t=Pt.isClickEvent?St:yt,n=Et(e,Pt.element),i=Gt(n,Pt.lastPoints),o={event:e,eventName:t,mouseButton:Pt.mouseButton,element:Pt.element,renderingEngineId:Pt.renderingEngineId,viewportId:Pt.viewportId,camera:{},startPoints:Ht(Pt.startPoints),lastPoints:Ht(Pt.lastPoints),currentPoints:n,deltaPoints:i};(0,ie.triggerEvent)(o.element,t,o),Bt()}document.removeEventListener("mousemove",Rt)}function Nt(e){Ut(Gt(Et(e,Pt.element),Ft(Pt.element,Pt.lastPoints)).canvas)&&(Vt(),bt(e))}function Ut(e){return Math.abs(e[0])+Math.abs(e[1])>Mt}function kt(){Pt.isClickEvent=!1}function Vt(){At.ignoreDoubleClick=!0;const e=At.mouseDownEvent,t=At.mouseUpEvent;Wt(),function(e){const t=Gt(Pt.startPoints,Pt.startPoints),n={event:e,eventName:Tt,element:Pt.element,mouseButton:Pt.mouseButton,renderingEngineId:Pt.renderingEngineId,viewportId:Pt.viewportId,camera:{},startPoints:Pt.startPoints,lastPoints:Pt.startPoints,currentPoints:Pt.startPoints,deltaPoints:t};Pt.lastPoints=Ht(n.lastPoints),(0,ie.triggerEvent)(n.element,Tt,n)&&(0,ie.triggerEvent)(n.element,Dt,n)}(e),t&&Lt(t)}function Wt(){At.doubleClickTimeout&&(clearTimeout(At.doubleClickTimeout),At.doubleClickTimeout=null),At.mouseDownEvent=null,At.mouseUpEvent=null}function Bt(){document.removeEventListener("mouseup",Lt),Pt.element?.removeEventListener("mousemove",Nt),Pt.element?.addEventListener("mousemove",bt),Wt(),Pt=JSON.parse(JSON.stringify(Ot))}function Ht(e){return JSON.parse(JSON.stringify(e))}function Ft(e,t){const{viewport:n}=(0,ie.getEnabledElement)(e)||{};if(!n)return t;const i=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:i}}function Gt(e,t){return{page:$t(e.page,t.page),client:$t(e.client,t.client),canvas:$t(e.canvas,t.canvas),world:(n=e.world,i=t.world,[n[0]-i[0],n[1]-i[1],n[2]-i[2]])};var n,i}function $t(e,t){return[e[0]-t[0],e[1]-t[1]]}function qt(e){At.ignoreDoubleClick?(At.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):Bt()}const zt=function(e){if(At.doubleClickTimeout){if(e.buttons===At.mouseDownEvent.buttons)return;return At.mouseDownEvent=e,void Vt()}At.doubleClickTimeout=setTimeout(Vt,1===e.buttons?400:150),At.mouseDownEvent=e,At.ignoreDoubleClick=!1,Pt.element=e.currentTarget,Pt.mouseButton=e.buttons;const t=(0,ie.getEnabledElement)(Pt.element),{renderingEngineId:n,viewportId:i}=t;Pt.renderingEngineId=n,Pt.viewportId=i,Pt.preventClickTimeout=setTimeout(kt,Pt.clickDelay),Pt.element.removeEventListener("mousemove",bt);const o=Et(e,Pt.element);Pt.startPoints=Ht(o),Pt.lastPoints=Ht(o),document.addEventListener("mouseup",Lt),document.addEventListener("mousemove",Rt)};function jt(e){e.removeEventListener("dblclick",Ct),e.removeEventListener("mousedown",zt),e.removeEventListener("mousemove",bt),e.removeEventListener("dblclick",qt,{capture:!0})}const Kt={enable:function(e){jt(e),e.addEventListener("dblclick",Ct),e.addEventListener("mousedown",zt),e.addEventListener("mousemove",bt),e.addEventListener("dblclick",qt,{capture:!0})},disable:jt},Yt=function(e){const t=e.currentTarget,n=(0,ie.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=n;if(e.deltaY>-1&&e.deltaY<1)return;e.preventDefault();const{spinX:a,spinY:r,pixelX:s,pixelY:l}=function(e){let t=0,n=0,i=0,o=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),i=10*t,o=10*n,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||o)&&e.deltaMode&&(1===e.deltaMode?(i*=40,o*=40):(i*=800,o*=800)),i&&!t&&(t=i<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:o}}(e),d=r<0?-1:1,c={event:e,eventName:se.MOUSE_WHEEL,renderingEngineId:i,viewportId:o,element:t,camera:{},detail:e,wheel:{spinX:a,spinY:r,pixelX:s,pixelY:l,direction:d},points:Et(e)};(0,ie.triggerEvent)(t,se.MOUSE_WHEEL,c)};function Xt(e){e.removeEventListener("wheel",Yt)}const Jt={enable:function(e){Xt(e),e.addEventListener("wheel",Yt,{passive:!1})},disable:Xt},Zt=0,Qt=1;let en,tn;function nn(e,t){const n=Date.now();if(e!==en){if(n-tn<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;en=e}tn=n}const on=nn.bind(null,Zt),an=nn.bind(null,Qt);function rn(e,t,n){const i=n?on:an;t.forEach((function(t){e.addEventListener(t,i,{passive:!1})}))}function sn(e,t,n){const i=n?on:an;t.forEach((function(t){e.removeEventListener(t,i)}))}const ln=["mousedown","mouseup","mousemove"],dn=["touchstart","touchend"];function cn(e){sn(e,ln,Zt),sn(e,dn,Qt)}const hn={enable:function(e){cn(e),rn(e,ln,Zt),rn(e,dn,Qt)},disable:cn};var un=function(e){return e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT",e}(un||{});function gn(e,t){const n=t||e.currentTarget,i="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(i).map((e=>{const t=function(e){return[e.clientX,e.clientY]}(i[e]),o=function(e){return[e.pageX,e.pageY]}(i[e]),a=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,o),{viewport:r}=(0,ie.getEnabledElement)(n);return{page:o,client:t,canvas:a,world:r.canvasToWorld(a),touch:{identifier:e,radiusX:i[e].radiusX,radiusY:i[e].radiusY,force:i[e].force,rotationAngle:i[e].rotationAngle}}}))}function mn(e,t){const n=En(e),i=En(t);return{page:_n(n.page,i.page),client:_n(n.client,i.client),canvas:_n(n.canvas,i.canvas),world:(o=n.world,a=i.world,[o[0]-a[0],o[1]-a[1],o[2]-a[2]])};var o,a}function vn(e,t){const n=En(e),i=En(t);return{page:Tn(n.page,i.page),client:Tn(n.client,i.client),canvas:Tn(n.canvas,i.canvas),world:Dn(n.world,i.world)}}function pn(e,t){}function fn(e,t){const n=bn(e),i=bn(t);return{page:n.page-i.page,client:n.client-i.client,canvas:n.canvas-i.canvas,world:n.world-i.world}}function wn(e){return JSON.parse(JSON.stringify(e))}function In(e){return JSON.parse(JSON.stringify(e))}function En(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length]})),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function Cn(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length],touch:{identifier:null,radiusX:t.touch.radiusX+n.touch.radiusX/e.length,radiusY:t.touch.radiusY+n.touch.radiusY/e.length,force:t.touch.force+n.touch.force/e.length,rotationAngle:t.touch.rotationAngle+n.touch.rotationAngle/e.length}})),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0],touch:{identifier:null,radiusX:0,radiusY:0,force:0,rotationAngle:0}})}function _n(e,t){return[e[0]-t[0],e[1]-t[1]]}function bn(e){const t=[];for(let n=0;n<e.length;n++)for(let i=0;i<e.length;i++)n<i&&t.push({page:Tn(e[n].page,e[i].page),client:Tn(e[n].client,e[i].client),canvas:Tn(e[n].canvas,e[i].canvas),world:Dn(e[n].world,e[i].world)});return t.reduce(((e,n)=>({page:e.page+n.page/t.length,client:e.client+n.client/t.length,canvas:e.canvas+n.canvas/t.length,world:e.world+n.world/t.length})),{page:0,client:0,canvas:0,world:0})}function Tn(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function Dn(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)+Math.pow(e[2]-t[2],2))}ie.Settings.getRuntimeSettings();const{TOUCH_START:Sn,TOUCH_START_ACTIVATE:yn,TOUCH_PRESS:xn,TOUCH_DRAG:Mn,TOUCH_END:On,TOUCH_TAP:Pn,TOUCH_SWIPE:An}=se,Rn={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},Ln={page:0,client:0,canvas:0,world:0},Nn={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...Rn,touch:null}],lastPointsList:[{...Rn,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:Ln,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},Un={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...Rn,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let kn=JSON.parse(JSON.stringify(Nn)),Vn=JSON.parse(JSON.stringify(Un));function Wn(e,t,n){return(0,ie.triggerEvent)(e,t,n)}function Bn(e){const t=gn(e,kn.element),n=Fn(kn.element,kn.lastPointsList),i=t.length===n.length?mn(t,n):Rn,o=t.length===n.length?fn(t,n):Ln,a=t.length===n.length?vn(t,kn.lastPointsList):Ln;kn.accumulatedDistance={page:kn.accumulatedDistance.page+a.page,client:kn.accumulatedDistance.client+a.client,canvas:kn.accumulatedDistance.canvas+a.canvas,world:kn.accumulatedDistance.world+a.world};const r={event:e,eventName:Mn,renderingEngineId:kn.renderingEngineId,viewportId:kn.viewportId,camera:{},element:kn.element,startPoints:Cn(kn.startPointsList),lastPoints:Cn(n),currentPoints:Cn(t),startPointsList:wn(kn.startPointsList),lastPointsList:wn(n),currentPointsList:t,deltaPoints:i,deltaDistance:o};Wn(kn.element,Mn,r),function(e,t){const n=(new Date).getTime(),i=kn.startTime.getTime();if(kn.swiped||n-i>kn.swipeToleranceMs)return;const[o,a]=t.canvas,r={event:e,eventName:An,renderingEngineId:kn.renderingEngineId,viewportId:kn.viewportId,camera:{},element:kn.element,swipe:null};Math.abs(o)>kn.swipeDistanceThreshold&&(r.swipe=o>0?un.RIGHT:un.LEFT,Wn(r.element,An,r),kn.swiped=!0),Math.abs(a)>kn.swipeDistanceThreshold&&(r.swipe=a>0?un.DOWN:un.UP,Wn(r.element,An,r),kn.swiped=!0)}(e,i),kn.lastPointsList=wn(t)}function Hn(e){clearTimeout(kn.pressTimeout);const t=gn(e,kn.element),n=Fn(kn.element,kn.lastPointsList),i=t.length===n.length?mn(t,n):mn(t,t),o=t.length===n.length?fn(t,n):fn(t,t),a={event:e,eventName:On,element:kn.element,renderingEngineId:kn.renderingEngineId,viewportId:kn.viewportId,camera:{},startPointsList:wn(kn.startPointsList),lastPointsList:wn(n),currentPointsList:t,startPoints:Cn(kn.startPointsList),lastPoints:Cn(n),currentPoints:Cn(t),deltaPoints:i,deltaDistance:o};Wn(a.element,On,a),function(e){if((new Date).getTime()-kn.startTime.getTime()>Vn.tapToleranceMs)return;if(0===Vn.taps&&(Vn.element=kn.element,Vn.renderingEngineId=kn.renderingEngineId,Vn.viewportId=kn.viewportId,Vn.startPointsList=kn.startPointsList),Vn.taps>0&&(Vn.element!=kn.element||Vn.renderingEngineId!=kn.renderingEngineId||Vn.viewportId!=kn.viewportId))return;const t=gn(e,Vn.element);vn(t,Vn.startPointsList).canvas>Vn.tapMaxDistance||(clearTimeout(Vn.tapTimeout),Vn.taps+=1,Vn.tapTimeout=setTimeout((()=>{const n={event:e,eventName:Pn,element:Vn.element,renderingEngineId:Vn.renderingEngineId,viewportId:Vn.viewportId,camera:{},currentPointsList:t,currentPoints:Cn(t),taps:Vn.taps};Wn(n.element,Pn,n),Vn=JSON.parse(JSON.stringify(Un))}),Vn.tapToleranceMs))}(e),kn=JSON.parse(JSON.stringify(Nn)),document.removeEventListener("touchmove",Bn),document.removeEventListener("touchend",Hn)}function Fn(e,t){const{viewport:n}=(0,ie.getEnabledElement)(e);return t.map((e=>{const t=n.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:t,touch:e.touch}}))}const Gn=function(e){kn.element=e.currentTarget;const t=(0,ie.getEnabledElement)(kn.element),{renderingEngineId:n,viewportId:i}=t;kn.renderingEngineId=n,kn.viewportId=i,kn.isTouchStart||(clearTimeout(kn.pressTimeout),kn.pressTimeout=setTimeout((()=>function(e){if(kn.accumulatedDistance.canvas>kn.pressMaxDistance)return;const t={event:e,eventName:xn,renderingEngineId:kn.renderingEngineId,viewportId:kn.viewportId,camera:{},element:kn.element,startPointsList:wn(kn.startPointsList),lastPointsList:wn(kn.lastPointsList),startPoints:In(Cn(kn.startPointsList)),lastPoints:In(Cn(kn.lastPointsList))};Wn(t.element,xn,t)}(e)),kn.pressDelay),function(e){kn.isTouchStart=!0,kn.startTime=new Date;const t=gn(e,kn.element),n=Cn(t),i=Rn,o=Ln,a={event:e,eventName:Sn,element:kn.element,renderingEngineId:kn.renderingEngineId,viewportId:kn.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:i,deltaDistance:o};kn.startPointsList=wn(a.startPointsList),kn.lastPointsList=wn(a.lastPointsList),Wn(a.element,Sn,a)&&Wn(a.element,yn,a)}(e),document.addEventListener("touchmove",Bn),document.addEventListener("touchend",Hn))};function $n(e){hn.disable(e),e.removeEventListener("touchstart",Gn)}const qn={enable:function(e){$n(e),hn.enable(e),e.addEventListener("touchstart",Gn,{passive:!1})},disable:$n},zn={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let jn={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function Kn(e){jn.element=e.currentTarget;const t=(0,ie.getEnabledElement)(jn.element),{renderingEngineId:n,viewportId:i}=t;jn.renderingEngineId=n,jn.viewportId=i,jn.key=e.key,jn.keyCode=e.keyCode,e.preventDefault();const o={renderingEngineId:jn.renderingEngineId,viewportId:jn.viewportId,element:jn.element,key:jn.key,keyCode:jn.keyCode};(0,ie.triggerEvent)(o.element,se.KEY_DOWN,o),document.addEventListener("keyup",Xn),document.addEventListener("visibilitychange",Yn),jn.element.removeEventListener("keydown",Kn)}function Yn(){document.removeEventListener("visibilitychange",Yn),"hidden"===document.visibilityState&&Jn()}function Xn(e){const t={renderingEngineId:jn.renderingEngineId,viewportId:jn.viewportId,element:jn.element,key:jn.key,keyCode:jn.keyCode};document.removeEventListener("keyup",Xn),document.removeEventListener("visibilitychange",Yn),jn.element.addEventListener("keydown",Kn),jn=structuredClone(zn),(0,ie.triggerEvent)(t.element,se.KEY_UP,t)}function Jn(){jn.keyCode=void 0}const Zn=Kn;function Qn(e){e.removeEventListener("keydown",Zn)}const ei={enable:function(e){Qn(e),e.addEventListener("keydown",Zn)},disable:Qn,getModifierKey:function(){return jn.keyCode}};var ti=E(785),ni=E.n(ti),ii=E(283),oi=E.n(ii),ai=function(e){return e.Labelmap="LABELMAP",e.Contour="CONTOUR",e.Surface="SURFACE",e}(ai||{});const ri=ai,si={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidthActive:1,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDashActive:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3},li={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85},di=function(){return li},ci={renderFill:!0,fillAlpha:1},{EPSILON:hi}=ie.CONSTANTS;function ui(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=1/0,o=n?-1/0:0,a=1/0,r=n?-1/0:0,s=1/0,l=n?-1/0:0;const d=3===e[0]?.length;for(let t=0;t<e.length;t++){const n=e[t];i=Math.min(n[0],i),o=Math.max(n[0],o),a=Math.min(n[1],a),r=Math.max(n[1],r),d&&(s=Math.min(n[2]??s,s),l=Math.max(n[2]??l,l))}return t?(i=Math.max(n?t[0]+hi:0,i),o=Math.min(n?t[0]-hi:t[0]-1,o),a=Math.max(n?t[1]+hi:0,a),r=Math.min(n?t[1]-hi:t[1]-1,r),d&&3===t.length&&(s=Math.max(n?t[2]+hi:0,s),l=Math.min(n?t[2]-hi:t[2]-1,l))):n||(i=Math.max(0,i),o=Math.min(1/0,o),a=Math.max(0,a),r=Math.min(1/0,r),d&&(s=Math.max(0,s),l=Math.min(1/0,l))),d?[[i,o],[a,r],[s,l]]:[[i,o],[a,r],null]}function gi(e,t){return ui(e,t,!1)}function mi(e,t){return ui(e,t,!0)}function vi(e,t,n,i){const o=[];for(let e=0;e<2;e++)for(let t=0;t<2;t++)for(let a=0;a<2;a++){const r=[...i];r[0]=r[0]+(2*e-1)*n[0]/2,r[1]=r[1]+(2*t-1)*n[1]/2,r[2]=r[2]+(2*a-1)*n[2]/2,o.push(r)}return gi(o.map((t=>ie.utilities.transformWorldToIndex(e,t))),t)}function pi(e,t){const{spacing:n}=e,i=e.voxelManager.getScalarDataLength(),o=[];let a=0;for(let e=0;e<t.length;e++){const{imageData:l,spacing:d,dimensions:c,voxelManager:h}=t[e].volume,u=t[e].volume.voxelManager.getScalarDataLength();u===i&&(r=d,s=n,JSON.stringify(r)===JSON.stringify(s))&&(a=e);const g=t[e].lower,m=t[e].upper;o.push({imageData:l,lower:g,upper:m,spacing:d,dimensions:c,volumeSize:u,voxelManager:h})}var r,s;return{volumeInfoList:o,baseVolumeIdx:a}}const fi=new Map,wi=e=>{const t=fi.get(e);t&&(t.isDirty=!0)},Ii=e=>{const t=fi.get(e);return t&&!t.isDirty?t.indices:null},Ei=(e,t)=>{fi.set(e,{indices:t,isDirty:!1})};function Ci(e,t){const n={segmentationId:e,modifiedSlicesToUse:t};wi(e),(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_DATA_MODIFIED,n)}const _i={colorLUT:[],segmentations:[],globalConfig:{renderInactiveRepresentations:!0,representations:{[ri.Labelmap]:di(),[ri.Contour]:si,[ri.Surface]:ci}},representations:{},viewports:{}};async function bi(e){let{imageIds:t,options:n}=e;const i=t,o=n?.volumeId??ie.utilities.uuidv4();return await ie.volumeLoader.createAndCacheVolumeFromImages(o,i),{volumeId:o}}async function Ti(e){let{segmentationId:t,options:n}=e;const i=Di.getSegmentation(t).representationData.LABELMAP,{volumeId:o}=await bi({imageIds:i.imageIds,options:n});await async function(e){let{segmentationId:t,viewportId:n,volumeId:i,options:o}=e;const a=Di.getSegmentation(t);if(o?.removeOriginal){const e=a.representationData.LABELMAP,{imageIds:t}=e;t.forEach((e=>{ie.cache.removeImageLoadObject(e)})),a.representationData.LABELMAP={volumeId:i}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,volumeId:i};ie.eventTarget.addEventListenerOnce(se.SEGMENTATION_RENDERED,(()=>Ci(t)))}({segmentationId:t,viewportId:n.viewportId,options:n,volumeId:o})}const Di=new class{constructor(e){ae(this,"state",void 0),ae(this,"uid",void 0),ae(this,"_stackLabelmapImageIdReferenceMap",new Map),e||(e=ie.utilities.uuidv4()),this.state=structuredClone(_i),this.uid=e}getState(){return this.state}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this.state=structuredClone(_i)}getSegmentation(e){return this.state.segmentations.find((t=>t.segmentationId===e))}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error(`Segmentation with id ${e.segmentationId} already exists`);if(e.representationData.LABELMAP&&"volumeId"in e.representationData.LABELMAP&&!("imageIds"in e.representationData.LABELMAP)){const t=this.getLabelmapImageIds(e.representationData);e.representationData.LABELMAP.imageIds=t}this.state.segmentations.push(e)}removeSegmentation(e){this.state.segmentations=this.state.segmentations.filter((t=>t.segmentationId!==e))}getSegmentationRepresentation(e){return this.state.representations[e]}addSegmentationRepresentationState(e){const{segmentationRepresentationUID:t}=e;this.state.representations[t]=e}addSegmentationRepresentationToViewport(e,t){const n=(0,ie.getEnabledElementByViewportId)(e);if(!n)return;this.state.viewports[e]||(this.state.viewports[e]={});const i=this.getSegmentationRepresentation(t);if(i.type!==ri.Labelmap)return void this.setActiveSegmentationRepresentation(e,t);const o=n.viewport instanceof ie.BaseVolumeViewport,a=this.getSegmentation(i.segmentationId),{representationData:r}=a;if(!r.LABELMAP)return void this.setActiveSegmentationRepresentation(e,t);const s="volumeId"in r.LABELMAP;if(o){const e=n.viewport.getFrameOfReferenceUID();if(!s){const t=this.getLabelmapImageIds(a.representationData),n=ie.cache.getImage(t[0]);n?.FrameOfReferenceUID===e&&Ti(a)}}else s||this.updateLabelmapSegmentationImageReferences(e,a.segmentationId);this.setActiveSegmentationRepresentation(e,t)}updateLabelmapSegmentationImageReferences(e,t){const n=this.getSegmentation(t);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(t)||this._stackLabelmapImageIdReferenceMap.set(t,new Map);const{representationData:i}=n;if(!i.LABELMAP)return;const o=this.getLabelmapImageIds(i),a=(0,ie.getEnabledElementByViewportId)(e).viewport,r=a.getCurrentImageId();for(const e of o)a.isReferenceViewable({referencedImageId:e},{asOverlay:!0})&&this._stackLabelmapImageIdReferenceMap.get(t).set(r,e);return this._stackLabelmapImageIdReferenceMap.get(t).get(r)}getLabelmapImageIds(e){const t=e.LABELMAP;let n;if(t.imageIds)n=t.imageIds;else if(!n&&t.volumeId){const e=t.volumeId;n=ie.cache.getVolume(e).imageIds}return n}getCurrentLabelmapImageIdForViewport(e,t){const n=(0,ie.getEnabledElementByViewportId)(e);if(!n)return;if(!this._stackLabelmapImageIdReferenceMap.has(t))return;const i=n.viewport.getCurrentImageId();return this._stackLabelmapImageIdReferenceMap.get(t).get(i)}getSegmentationRepresentations(e){const t=this.state.viewports[e];return t?Object.keys(t).map((e=>this.getSegmentationRepresentation(e))):[]}removeRepresentation(e){delete this.state.representations[e],Object.keys(this.state.viewports).forEach((t=>{delete this.state.viewports[t][e]}))}setActiveSegmentationRepresentation(e,t){Object.keys(this.state.viewports[e]).forEach((t=>{this.state.viewports[e][t].active=!1})),this.state.viewports[e]||(this.state.viewports[e]={}),this.state.viewports[e][t]||(this.state.viewports[e][t]={active:!1,visible:!0,segmentsHidden:new Set}),this.state.viewports[e][t].active=!0}getActiveSegmentationRepresentation(e){if(!this.state.viewports?.[e])return;const t=Object.entries(this.state.viewports[e]).find((e=>{let[,t]=e;return t.active}));return t?this.getSegmentationRepresentation(t[0]):void 0}getGlobalConfig(){return this.state.globalConfig}setGlobalConfig(e){this.state.globalConfig=e}_getRepresentationConfig(e){const t=this.getSegmentationRepresentation(e);if(t)return t.config}getSegmentationRepresentationConfig(e){const t=this._getRepresentationConfig(e);if(t)return t.allSegments}getPerSegmentConfig(e){const t=this._getRepresentationConfig(e);if(t)return t.perSegment}setSegmentationRepresentationConfig(e,t){const n=this._getRepresentationConfig(e);n&&(n.allSegments=t)}setPerSegmentConfig(e,t){const n=this._getRepresentationConfig(e);n&&(n.perSegment=t)}getSegmentationRepresentationVisibility(e,t){const n=this.state.viewports[e];return n&&n[t]?.visible}setSegmentationRepresentationVisibility(e,t,n){this.state.viewports[e]||(this.state.viewports[e]={}),this.state.viewports[e][t].visible=n}addColorLUT(e,t){this.state.colorLUT[t]&&console.warn("Color LUT table already exists, overwriting"),this.state.colorLUT[t]=structuredClone(e)}removeColorLUT(e){delete this.state.colorLUT[e]}_getStackIdForImageIds(e){return e.map((e=>e.slice(-Math.round(.15*e.length)))).join("_")}}("DEFAULT");function Si(e){return Di.getSegmentationRepresentation(e)}function yi(e){const t=Di.getState();return t.viewports?.[e]||{}}function xi(e){const t=yi(e);return t?Object.keys(t).map((e=>Si(e))).filter(Boolean):[]}function Mi(e){const t={segmentationRepresentationUID:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_REPRESENTATION_REMOVED,t)}function Oi(e,t){Di.removeRepresentation(e),t||Mi(e)}var Pi=E(610),Ai=E.n(Pi),Ri=E(474),Li=E.n(Ri),Ni=E(70),Ui=E.n(Ni),ki=E(396),Vi=E.n(ki),Wi=function(e){return e.POLYSEG_CONTOUR_TO_LABELMAP="polySeg/convertContourToVolumeLabelmap",e.POLYSEG_SURFACE_TO_LABELMAP="polySeg/convertSurfacesToVolumeLabelmap",e.POLYSEG_CONTOUR_TO_SURFACE="polySeg/convertContourToSurface",e.POLYSEG_LABELMAP_TO_SURFACE="polySeg/convertLabelmapToSurface",e.SURFACE_CLIPPING="surfaceClipping",e}(Wi||{});const Bi=Wi;function Hi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return parseFloat(e[0]).toFixed(t)+","+parseFloat(e[1]).toFixed(t)+","+parseFloat(e[2]).toFixed(t)+","}let Fi=!1;function Gi(){Fi||(Fi=!0,(0,ie.getWebWorkerManager)().registerWorker("polySeg",(()=>new Worker(new URL(E.p+E.u(985),E.b),{name:"polySeg",type:void 0})),{maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:2e3}}))}const $i=(0,ie.getWebWorkerManager)(),qi=new Map,zi=new Map,ji=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Bi.SURFACE_CLIPPING})};async function Ki(e,t,n){Gi();const i=t.getSlicesClippingPlanes?.();if(!i)return;const o=t.getSliceIndex();i.sort(((e,t)=>Math.abs(e.sliceIndex-o)-Math.abs(t.sliceIndex-o))),ji(ie.eventTarget,0),await async function(e){const t=e.filter((e=>!zi.has(e.id)));if(!t.length)return;(await $i.executeTask("polySeg","getSurfacesAABBs",{surfacesInfo:t},{callbacks:[e=>{let{progress:t}=e;ji(ie.eventTarget,t)}]})).forEach(((e,t)=>{zi.set(t,e)}))}(e);const a=new Map;e.forEach((e=>{a.set(e.id,zi.get(e.id))}));const r=t.getCamera();return await $i.executeTask("polySeg","cutSurfacesIntoPlanes",{surfacesInfo:e,planesInfo:i,surfacesAABB:a},{callbacks:[e=>{let{progress:t}=e;ji(ie.eventTarget,t)},e=>{let{sliceIndex:i,polyDataResults:o}=e;o.forEach(((e,o)=>{const a=`${n}_${o}`,s=function(e,t,n){return`${e.id}-${Hi(t)}-${n}`}(t,r.viewPlaneNormal,i);!function(e,t,n){const{points:i,lines:o,numberOfCells:a}=n;let r=qi.get(e);r||(r=new Map,qi.set(e,r)),r.set(t,{points:i,lines:o,numberOfCells:a})}(a,s,e)}))}]}).catch((e=>{console.error(e)})),ji(ie.eventTarget,1),qi}function Yi(e){return Di.getSegmentation(e)}function Xi(e){return Di.getColorLUT(e)}function Ji(e){if("volumeId"in e){if(!ie.cache.getVolume(e.volumeId))throw new Error(`volumeId of ${e.volumeId} not found in cache, you should load and cache volume before adding segmentation`)}else{if(!("imageIds"in e))throw new Error("The segmentationInput.representationData is undefined, please provide a valid representationData");if(!e.imageIds)throw new Error("The segmentationInput.representationData.imageIds is undefined, please provide a valid representationData.imageIds for stack data")}}function Zi(e){Ji(e)}const Qi=new Map([[ri.Labelmap,new Set([ri.Surface,ri.Contour])],[ri.Contour,new Set([ri.Labelmap,ri.Surface])],[ri.Surface,new Set([ri.Labelmap])]]);function eo(e){const t=Si(e),{type:n,polySeg:i}=t;if(!i||!i.enabled)return!1;const{representationData:o}=Yi(t.segmentationId),a=function(e){const t=[];return Object.keys(e).forEach((n=>{const i=e[n];let o;if(n===ri.Labelmap&&(o=Zi),o)try{o(i),t.push(n)}catch(e){console.warn(`Validation failed for labelmap of type ${n}`)}else t.push(n)})),t}(o);return a.some((e=>async function(e,t){return Qi.get(e)?.has(t)||!1}(e,n)))}const to=function(e){let{segmentationId:t,type:n,data:i}=e;const o=Yi(t);switch(o.representationData[n]&&console.warn(`Representation data of type ${n} already exists for segmentation ${t}, overwriting it.`),n){case ri.Labelmap:case ri.Contour:case ri.Surface:i&&(o.representationData[n]=i);break;default:throw new Error(`Invalid representation type ${n}`)}};function no(){return Di.getState().segmentations}function io(e){let t;t=e?[e]:no().map((e=>{let{segmentationId:t}=e;return t})),t.forEach((e=>{const t={segmentationId:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_MODIFIED,t)}))}const oo=function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)},ao=function(e,t,n){let i,o,a,r,s,l,d=0,c=!1,h=!1,u=!0;const g=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){const n=i,a=o;return i=o=void 0,d=t,r=e.apply(a,n),r}function v(e,t){return g?window.requestAnimationFrame(e):setTimeout(e,t)}function p(e){const n=e-l;return void 0===l||n>=t||n<0||h&&e-d>=a}function f(){const e=Date.now();if(p(e))return w(e);s=v(f,function(e){const n=e-d,i=t-(e-l);return h?Math.min(i,a-n):i}(e))}function w(e){return s=void 0,u&&i?m(e):(i=o=void 0,r)}function I(){const e=Date.now(),n=p(e);for(var a=arguments.length,u=new Array(a),g=0;g<a;g++)u[g]=arguments[g];if(i=u,o=this,l=e,n){if(void 0===s)return function(e){return d=e,s=v(f,t),c?m(e):r}(l);if(h)return s=v(f,t),m(l)}return void 0===s&&(s=v(f,t)),r}return t=Number(t)||0,oo(n)&&(c=Boolean(n.leading),h="maxWait"in n,a=h?Math.max(Number(n.maxWait)||0,t):a,u="trailing"in n?Boolean(n.trailing):u),I.cancel=function(){void 0!==s&&function(e){if(g)return window.cancelAnimationFrame(e);clearTimeout(e)}(s),d=0,i=l=o=s=void 0},I.flush=function(){return void 0===s?r:w(Date.now())},I.pending=function(){return void 0!==s},I},ro=new Map;async function so(e,t,n,i){Gi();const o=await n();to({segmentationId:e,type:t,data:o}),ro.has(e)||ro.set(e,[]);const a=ro.get(e);return a.includes(t)||a.push(t),function(e){e._debouncedUpdateFunction=t=>{lo(t,e)},ie.eventTarget.removeEventListener(se.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction),ie.eventTarget.addEventListener(se.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction)}(i),io(e),o}const lo=ao(((e,t)=>{const n=e.detail.segmentationId,i=ro.get(n);i&&i.length&&(t(n),i.length&&io(n))}),300);function co(e,t){const{imageIds:n}=e,{volumeId:i}=e;return!(!i||n)||!(n&&!i)&&t instanceof ie.VolumeViewport}function ho(e){const t=Ii(e);if(t)return t;const n=Yi(e);if(!n)throw new Error(`No segmentation found for segmentationId ${e}`);let i;switch(n.type){case ri.Labelmap:i=function(e,t){const n=e.representationData[ri.Labelmap],i=new Set;return co(n)?function(e,t){ie.cache.getVolume(t).voxelManager.forEach((t=>{let{value:n}=t;0!==n&&e.add(n)}))}(i,t):function(e,t){t.forEach((t=>{ie.cache.getImage(t).voxelManager.getScalarData().forEach((t=>{0!==t&&e.add(t)}))}))}(i,n.imageIds),Array.from(i).map(Number).sort(((e,t)=>e-t))}(n,e);break;case ri.Contour:i=function(e){const{annotationUIDsMap:t,geometryIds:n}=e.representationData.CONTOUR||{};if(!n)throw new Error(`No geometryIds found for segmentationId ${e.segmentationId}`);const i=new Set([...t.keys()]);return n.forEach((e=>{const t=ie.cache.getGeometry(e);i.add(t.data.getSegmentIndex())})),Array.from(i).sort(((e,t)=>e-t))}(n);break;case ri.Surface:i=function(e){const t=e.representationData.SURFACE?.geometryIds??[];return Array.from(t.keys()).map(Number).sort(((e,t)=>e-t))}(n);break;default:throw new Error(`Unsupported segmentation type: ${n.type}`)}return Ei(e,i),i}const uo=(0,ie.getWebWorkerManager)(),go=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Bi.POLYSEG_CONTOUR_TO_SURFACE})};function mo(e){const t={segmentationRepresentationUID:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_REPRESENTATION_MODIFIED,t)}function vo(e,t){Di.addColorLUT(e,t)}function po(e,t){if(!e)throw new Error("addColorLUT: colorLUT is required");ie.utilities.isEqual(e[0],[0,0,0,0])||(console.warn("addColorLUT: [0, 0, 0, 0] color is not provided for the background color (segmentIndex =0), automatically adding it"),e.unshift([0,0,0,0])),vo(e,t)}function fo(e,t){const n=Si(e);if(!n)throw new Error(`setColorLUT: could not find segmentation representation with UID ${e}`);if(!Xi(t))throw new Error(`setColorLUT: could not find colorLUT with index ${t}`);n.colorLUTIndex=t,mo(e)}function wo(e,t){const n=Si(e);if(!n)throw new Error(`segmentation representation with UID ${e} does not exist`);const{colorLUTIndex:i}=n,o=Xi(i);let a=o[t];if(!a){if("number"!=typeof t)throw new Error(`Can't create colour for LUT index ${t}`);a=o[t]=[0,0,0,0]}return a}function Io(e,t,n){const i=wo(e,t);for(let e=0;e<n.length;e++)i[e]=n[e];mo(e)}async function Eo(e,t){let n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.segmentationRepresentationUID&&(n=Si(i.segmentationRepresentationUID));const o=Yi(e),a=new Map,r=Object.keys(t).map((async e=>{const i=t[e],r=i.segmentIndex,s=n;if(wo(n.segmentationRepresentationUID,r).slice(0,3),!s)throw new Error("No color found for segment index, unable to create surface");const l={id:`segmentation_${o.segmentationId}_surface_${r}`,color:s,frameOfReferenceUID:"test-frameOfReferenceUID",data:{points:i.data.points,polys:i.data.polys}},d=l.id;return a.set(r,d),ie.geometryLoader.createAndCacheGeometry(d,{type:ie.Enums.GeometryType.SURFACE,geometryData:l})}));return await Promise.all(r),{geometryIds:a}}const Co=(0,ie.getWebWorkerManager)(),_o=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Bi.POLYSEG_LABELMAP_TO_SURFACE})};async function bo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Yi(e);if(!n?.representationData?.LABELMAP)return void console.warn("Only support surface update from labelmaps");const i=co(n.representationData.LABELMAP),o=n.representationData.LABELMAP,a=t.segmentIndices||ho(e),r=a.map((e=>{const t=async function(e,t){let n;if(arguments.length>2&&void 0!==arguments[2]&&!arguments[2]){const{imageIds:t}=e;({volumeId:n}=await bi({imageIds:t}))}else n=e.volumeId;const i=ie.cache.getVolume(n),o=i.voxelManager.getCompleteScalarDataArray(),{dimensions:a,spacing:r,origin:s,direction:l}=i;_o(ie.eventTarget,0);const d=await Co.executeTask("polySeg","convertLabelmapToSurface",{scalarData:o,dimensions:a,spacing:r,origin:s,direction:l,segmentIndex:t},{callbacks:[e=>{_o(ie.eventTarget,e)}]});return _o(ie.eventTarget,1),d}(o,e,i);return t})),s=await Promise.allSettled(r),l=s.filter((e=>"rejected"===e.status));if(l.length>0)throw console.error(l),new Error("Failed to convert labelmap to surface");return s.map(((e,t)=>{if("fulfilled"===e.status)return{segmentIndex:a[t],data:e.value}})).filter(Boolean)}function To(e){const t=Di.getState(),n=t.viewports;return Object.keys(n).filter((i=>{const o=n[i];return Object.keys(o).some((n=>t.representations[n].segmentationId===e))}))}function Do(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return so(e,ri.Surface,(()=>async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.segmentIndices?.length?t.segmentIndices:ho(e);let i;const o=Yi(e),a=o.representationData;try{a.CONTOUR?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Yi(e).representationData.CONTOUR,i=(t.segmentIndices||ho(e)).map((async e=>{const t=await async function(e,t){const{annotationUIDsMap:n}=e,i=[],o=[],a=n.get(t);for(const e of a){const t=be(e),{polyline:n}=t.data.contour;o.push(n.length),n.forEach((e=>i.push(...e)))}go(ie.eventTarget,0);const r=await uo.executeTask("polySeg","convertContourToSurface",{polylines:i,numPointsArray:o},{callbacks:[e=>{go(ie.eventTarget,e)}]});return go(ie.eventTarget,1),r}(n,e);return{segmentIndex:e,data:t}}));return await Promise.all(i)}(e,{segmentIndices:n,...t}):a.LABELMAP&&(i=await bo(o.segmentationId,{segmentIndices:n,...t}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return await Eo(e,i,t)}(e,t)),(()=>async function(e){const t=await bo(e);if(!t)return;const n=Yi(e),i=ho(e);if(!i.length)return n.representationData.SURFACE.geometryIds.forEach((e=>{const t=ie.cache.getGeometry(e).data;t.setPoints([]),t.setPolys([])})),void io(e);const o=t.map((t=>{let{data:o,segmentIndex:a}=t;const r=`segmentation_${e}_surface_${a}`,s=ie.cache.getGeometry(r);if(!s)return To(e).map((t=>xi(t).map((t=>{if(t.type===ri.Surface)return n.representationData.SURFACE.geometryIds.set(a,r),Eo(e,[{segmentIndex:a,data:o}],{segmentationRepresentationUID:t.segmentationRepresentationUID})}))));if(i.includes(a)){const e=s.data;e.setPoints(o.points),e.setPolys(o.polys)}else{const e=s.data;e.setPoints([]),e.setPolys([])}}));await Promise.all(o),io(e)}(e)))}const So={render:async function(e,t){const{colorLUTIndex:n,segmentationId:i,segmentationRepresentationUID:o}=t,a=Yi(i);if(!a)return;if(!(e instanceof ie.VolumeViewport3D))throw new Error("Surface rendering is only supported in 3D viewports, if you need to visualize the surface cuts in 2D viewports, you can use the Contour representation, see polySeg converters");let r=a.representationData[ri.Surface];if(!r&&eo(o)&&(r=await Do(i,{segmentationRepresentationUID:o}),!r))throw new Error(`No Surface data found for segmentationId ${i}.`);const{geometryIds:s}=r;s?.size||console.warn(`No Surfaces found for segmentationId ${i}. Skipping render.`);const l=Xi(n),d=[];s.forEach(((t,n)=>{const i=ie.cache.getGeometry(t);if(!i?.data)return void console.warn(`No Surfaces found for geometryId ${t}. Skipping render.`);const a=i.data,r=l[n];a.setColor(r.slice(0,3)),function(e,t,n){const i=function(e,t){return`${e}_${t}`}(n,t.id),o=(0,ie.getEnabledElement)(e),{viewport:a}=o,r=a.getActor(i)?.actor;if(r){const e=r.getMapper(),n=e.getInputData(),i=t.getPoints(),o=t.getPolys(),s=n.getPoints().getData(),l=n.getPolys().getData();if(i.length===s.length&&o.length===l.length)return;const d=Ui().newInstance();d.getPoints().setData(i,3);const c=Vi().newInstance({values:Float32Array.from(o)});return d.setPolys(c),e.setInputData(d),e.modified(),void setTimeout((()=>{a.getRenderer().resetCameraClippingRange()}),0)}const s=t.getPoints(),l=t.getPolys(),d=t.getColor(),c=Ui().newInstance();c.getPoints().setData(s,3);const h=Vi().newInstance({values:Float32Array.from(l)});c.setPolys(h);const u=Ai().newInstance({});u.setInputData(c);const g=Li().newInstance();g.setMapper(u),g.getProperty().setColor(d[0]/255,d[1]/255,d[2]/255),g.getProperty().setLineWidth(2),a.addActor({actor:g,uid:i,clippingFilter:void 0}),a.resetCamera(),a.render(),setTimeout((()=>{a.getRenderer().resetCameraClippingRange()}),0)}(e.element,a,o),d.push(a)})),e.render()},removeRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;(function(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=i.getActors().map((e=>{let{uid:n}=e;return n.startsWith(t)?n:void 0})).filter(Boolean);i.removeActors(o)})(o.element,t),Oi(t),n&&o.render()}},yo=new Map;function xo(e){return yo.get(e)}function Mo(e,t){yo.set(e,t)}var Oo=E(976);function Po(e,t,n,i){const o=e.getViewReference(),{viewPlaneNormal:a,FrameOfReferenceUID:r}=o,s={annotationUID:i?.annotationUID||ie.utilities.uuidv4(),data:{handles:{points:n}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:t,viewPlaneNormal:a,FrameOfReferenceUID:r,referencedImageId:Ao(e,n[0],a),...i}};return mt(s,e.element),s}function Ao(e,t,n){let i;if(e instanceof ie.StackViewport)i=Ro(e,t,n);else{if(!(e instanceof ie.BaseVolumeViewport))throw new Error("getReferencedImageId: viewport must be a StackViewport or BaseVolumeViewport");{const o=function(e){const t=e.getViewReferenceId?.();if(t)return t;if(e instanceof ie.BaseVolumeViewport)return`volumeId:${function(e){const t=e.getActors();if(t)return t.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid}(e)}`;throw new Error("getTargetId: viewport must have a getTargetId method")}(e),a=ie.utilities.getVolumeId(o),r=ie.cache.getVolume(a);i=ie.utilities.getClosestImageId(r,t,n)}}return i}function Ro(e,t,n){const i=e.getImageIds();if(!i||!i.length)return;const o=i.map((e=>{const{imagePositionPatient:i}=ie.metaData.get("imagePlaneModule",e),o=function(e,t,n){const i=Oo.vec3.create();Oo.vec3.sub(i,e,t);const o=Oo.vec3.dot(i,n);return Math.abs(o)}(t,i,n);return{imageId:e,distance:o}}));return o.sort(((e,t)=>e.distance-t.distance)),o[0].imageId}function Lo(e){if(e.parentAnnotationUID)return;if(!e.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,i=Yi(t);i.representationData.CONTOUR||(i.representationData.CONTOUR={annotationUIDsMap:new Map});const{annotationUIDsMap:o}=i.representationData.CONTOUR;let a=o.get(n);a||(a=new Set,o.set(n,a)),o.set(n,a.add(e.annotationUID))}function No(){return Di.getGlobalConfig()}function Uo(e,t,n){Di.setSegmentationRepresentationVisibility(e,t,n)}function ko(e,t){return Di.getSegmentationRepresentationVisibility(e,t)}function Vo(e,t,n){Si(t)&&(Uo(e,t,n),mo(t))}function Wo(e,t){return ko(e,t)}function Bo(e,t,n,i){const o=Go(e,t);n.forEach((e=>{i?o.delete(e):o.add(e)})),mo(t)}function Ho(e,t,n,i){const o=Go(e,t);i?o.delete(n):o.add(n),mo(t)}function Fo(e,t,n){return!Go(e,t).has(n)}function Go(e,t){const n=yi(e);return n?n[t]?.segmentsHidden??new Set:new Set}function $o(e,t){Di.setGlobalConfig(e),t||io()}function qo(e){return Di.getSegmentationRepresentationConfig(e)}function zo(e,t,n){Di.setSegmentationRepresentationConfig(e,t),n||mo(e)}function jo(e,t,n){Di.setPerSegmentConfig(e,t),n||mo(e)}function Ko(e){return Di.getPerSegmentConfig(e)}function Yo(){return No()}function Xo(e){$o(e)}function Jo(e){return Yo().representations[e]}function Zo(e,t){const n=Yo();Xo({...n,representations:{...n.representations,[e]:{...n.representations[e],...t}}})}function Qo(e){return qo(e)}function ea(e,t){zo(e,t)}function ta(e,t){jo(e,t)}function na(e){return Ko(e)}function ia(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ko(e)[t]=n,i||mo(e)}function oa(e,t){const n=Ko(e);return n?.[t]}function aa(e,t,n){const{segmentationRepresentationUID:i,config:o}=n,a=o?.allSegments?.CONTOUR,r=No().representations.CONTOUR,s=ie.utilities.deepMerge(r,a),l=xo(i),d=s.outlineWidthActive;l?.outlineWidthActive!==d&&Mo(i,Object.assign({},l,{outlineWidthActive:d}));const c=[],h=[],u=Go(e.id,i);for(const e of u)l.segmentsHidden.has(e)||c.push(e);for(const e of l.segmentsHidden)u.has(e)||h.push(e);const g=Array.from(l.segmentsHidden).filter((e=>!h.includes(e))).concat(c),{segmentSpecificConfigs:m}=t.reduce(((e,t)=>{const n=ie.cache.getGeometry(t),{data:o}=n,a=o.getSegmentIndex(),r=oa(i,a);return e.segmentSpecificConfigs[a]=r??{},e}),{contourSets:[],segmentSpecificConfigs:{}}),v=[...g,...h],p=Object.values(m).some((e=>Object.keys(e).length>0));(v.length||p)&&Mo(i,Object.assign({},l,{segmentsHidden:new Set(u)})),e.render()}function ra(e,t,n){const{segmentationRepresentationUID:i,segmentationId:o}=n,a=new Map;t.forEach((t=>{const n=ie.cache.getGeometry(t);if(!n)return void console.warn(`No geometry found for geometryId ${t}. Skipping render.`);const r=n.data.getSegmentIndex();!function(e){if(!e)throw new Error(`No contours found for geometryId ${e.id}`);const t=e.id;if(e.type!==ie.Enums.GeometryType.CONTOUR)throw new Error(`Geometry type ${e.type} not supported for rendering.`);e.data||console.warn(`No contours found for geometryId ${t}. Skipping render.`)}(n);const s=oa(i,r);n.data.contours.forEach((t=>{const{points:n,color:i,id:a}=t,s={annotationUID:ie.utilities.uuidv4(),data:{contour:{closed:!0,polyline:n},segmentation:{segmentationId:o,segmentIndex:r,color:i,id:a},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!0,isVisible:!0,metadata:{referencedImageId:Ro(e,n[0],e.getCamera().viewPlaneNormal),toolName:"PlanarFreehandContourSegmentationTool",FrameOfReferenceUID:e.getFrameOfReferenceUID(),viewPlaneNormal:e.getCamera().viewPlaneNormal}};mt(s,e.element),Lo(s)})),s&&a.set(r,s)}));const r=n.config?.allSegments.CONTOUR,s=No().representations.CONTOUR,l=ie.utilities.deepMerge(s,r).outlineWidthActive,d=Go(e.id,i);Mo(i,Object.assign({},xo(i),{segmentsHidden:new Set(d),segmentSpecificMap:a,outlineWidthActive:l})),e.resetCamera(),e.render()}function sa(e,t){const n=new Map;for(const[i,o]of e){const e=i.split("_")[1];for(const[i,a]of o){if(!a)continue;const i=Number(e)||t?.get(e);i&&(n.has(i)||n.set(i,[]),n.get(i).push(a))}}return n}E(348);const{CalibrationTypes:la}=ie.Enums,da="px",ca=[1],ha=["3,3"],ua=["4,3"],ga={0:"px",1:"percent",2:"dB",3:"cm",4:"seconds",5:"hertz",6:"dB/seconds",7:"cm/sec",8:"cm²",9:"cm²/s",12:"degrees"},ma="²",va=(e,t)=>{const{calibration:n,hasPixelSpacing:i}=e;let o=i?"mm":da,a=o+ma,r=1,s="";if(!n||!n.type&&!n.sequenceOfUltrasoundRegions)return{lengthUnits:o,areaUnits:a,scale:r};if(n.type===la.UNCALIBRATED)return{lengthUnits:da,areaUnits:da+ma,scale:r};if(n.sequenceOfUltrasoundRegions){let e,i;if(Array.isArray(t)&&2===t.length)[e,i]=t;else if("function"==typeof t){const n=t();e=n[0],i=n[1]}let l=n.sequenceOfUltrasoundRegions.filter((t=>e[0]>=t.regionLocationMinX0&&e[0]<=t.regionLocationMaxX1&&e[1]>=t.regionLocationMinY0&&e[1]<=t.regionLocationMaxY1&&i[0]>=t.regionLocationMinX0&&i[0]<=t.regionLocationMaxX1&&i[1]>=t.regionLocationMinY0&&i[1]<=t.regionLocationMaxY1));if(!l?.length)return{lengthUnits:o,areaUnits:a,scale:r};if(l=l.filter((e=>ca.includes(e.regionDataType)&&ha.includes(`${e.physicalUnitsXDirection},${e.physicalUnitsYDirection}`))),!l.length)return{lengthUnits:da,areaUnits:da+ma,scale:r};const d=l[0],c=Math.abs(d.physicalDeltaX),h=Math.abs(d.physicalDeltaY);if(!ie.utilities.isEqual(c,h,.001))return{lengthUnits:da,areaUnits:da+ma,scale:r};r=1/c,s="US Region",o=ga[d.physicalUnitsXDirection]||"unknown",a=o+ma}else n.scale&&(r=n.scale);return[la.ERMF,la.USER,la.ERROR,la.PROJECTION].includes(n?.type)&&(s=n.type),{lengthUnits:o+(s?` ${s}`:""),areaUnits:a+(s?` ${s}`:""),scale:r}},pa=(e,t)=>{const[n]=t,{calibration:i}=e;let o=["raw"],a=[null],r="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:o,values:a};if(i.sequenceOfUltrasoundRegions){const e=i.sequenceOfUltrasoundRegions.filter((e=>ca.includes(e.regionDataType)&&ua.includes(`${e.physicalUnitsXDirection},${e.physicalUnitsYDirection}`)));if(!e?.length)return{units:o,values:a};const t=e.find((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1));if(!t)return{units:o,values:a};const{referencePixelX0:s=0,referencePixelY0:l=0}=t,{physicalDeltaX:d,physicalDeltaY:c}=t,h=(n[1]-t.regionLocationMinY0-l)*c;r="US Region",a=[(n[0]-t.regionLocationMinX0-s)*d,h],o=[ga[t.physicalUnitsXDirection],ga[t.physicalUnitsYDirection]]}return{units:o,values:a,calibrationType:r}},fa=e=>e.calibration?.aspect||1;function wa(e,t){let n=e;const i=t?.numDimensions||2,o=3===i;if(!Array.isArray(e[0])){const t=e,a=t.length/i;n=new Array(t.length/i);for(let e=0,r=a;e<r;e++)n[e]=[t[e*i],t[e*i+1]],o&&n[e].push(t[e*i+2])}let a=1/0,r=1/0,s=-1/0,l=-1/0,d=1/0,c=-1/0;for(let e=0,t=n.length;e<t;e++){const[t,i,h]=n[e];a=a<t?a:t,r=r<i?r:i,s=s>t?s:t,l=l>i?l:i,o&&(d=d<h?d:h,c=c>h?c:h)}return o?{minX:a,maxX:s,minY:r,maxY:l,minZ:d,maxZ:c}:{minX:a,maxX:s,minY:r,maxY:l}}function Ia(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,i,o=0]=e,[a,r,s=0]=t,l=a-n,d=r-i,c=s-o;return l*l+d*d+c*c}function Ea(e){if(e.length<3)return!1;const t=e.length,n=Ia(e[0],e[t-1]);return Oo.glMatrix.equals(0,n)}function Ca(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{closed:void 0};if(e.length<3)return!1;const i=e.length;let o=0;const{closed:a,holes:r}=n;if(r?.length)for(const e of r)if(Ca(e,t))return!1;const s=!(void 0===a?Ea(e):a),l=e.length-(s?1:2);for(let n=0;n<=l;n++){const a=e[n],r=e[n===i-1?0:n+1],s=a[0]>=r[0]?a[0]:r[0],l=a[1]>=r[1]?a[1]:r[1],d=a[1]<=r[1]?a[1]:r[1];if(t[0]<=s&&t[1]>=d&&t[1]<l){let e=a[0]===r[0];if(!e){const n=(t[1]-a[1])*(r[0]-a[0])/(r[1]-a[1])+a[0];e=t[0]<=n}o+=e?1:0}}return!!(o%2)}function _a(e,t){for(let n=0,i=t.length;n<i;n++)if(!Ca(e,t[n]))return!1;return!0}function ba(e){const t=e.length;let n=0,i=t-1;for(let o=0;o<t;o++)n+=(e[i][0]+e[o][0])*(e[i][1]-e[o][1]),i=o;return Math.abs(n/2)}function Ta(e){if(e.length<3)return 0;const t=e[0];let n=0;for(let i=0,o=e.length;i<o;i++){const a=e[i],r=e[i===o-1?0:i+1],s=a[0]-t[0],l=a[1]-t[1],d=r[0]-t[0];n+=s*(r[1]-t[1])-l*d}return n*=.5,n}function Da(e){return Ta(e)>=0?1:-1}function Sa(e){const t=function(e){const t=Oo.vec3.create(),n=e[0];for(let i=0,o=e.length;i<o;i++){const a=e[i],r=e[i===o-1?0:i+1],s=a[0]-n[0],l=a[1]-n[1],d=a[2]-n[2],c=r[0]-n[0],h=r[1]-n[1],u=r[2]-n[2];t[0]+=l*u-d*h,t[1]+=d*c-s*u,t[2]+=s*h-l*c}return Oo.vec3.scale(t,t,.5),t}(e);return Oo.vec3.normalize(t,t)}function ya(e){const t=Ta(e);return[0,0,t/Math.abs(t)]}function xa(e,t,n,i){let o=!1;const a=e[0]<t[0]?e[0]:t[0],r=e[1]<t[1]?e[1]:t[1],s=e[0]>t[0]?e[0]:t[0],l=e[1]>t[1]?e[1]:t[1],d=n[0]<i[0]?n[0]:i[0],c=n[1]<i[1]?n[1]:i[1],h=n[0]>i[0]?n[0]:i[0],u=n[1]>i[1]?n[1]:i[1];if(a>h||s<d||r>u||l<c)return!1;const g=[Ma(e,t,n),Ma(e,t,i),Ma(n,i,e),Ma(n,i,t)];return g[0]!==g[1]&&g[2]!==g[3]||((0===g[0]&&Oa(e,n,t)||0===g[1]&&Oa(e,i,t)||0===g[2]&&Oa(n,e,i)||0===g[3]&&Oa(n,t,i))&&(o=!0),o)}function Ma(e,t,n){const i=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===i?0:i>0?1:2}function Oa(e,t,n){return t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1])}function Pa(e,t,n){let i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const o=[],a=e.length,r=a-(i?1:2);for(let i=0;i<=r;i++){const r=i===a-1?0:i+1;xa(t,n,e[i],e[r])&&o.push([i,r])}return o}const Aa=.01;function Ra(e,t,n){const i=e[0]<=t[0]?e[0]:t[0],o=e[0]>=t[0]?e[0]:t[0],a=e[1]<=t[1]?e[1]:t[1],r=e[1]>=t[1]?e[1]:t[1];if(!(n[0]>=i-Aa&&n[0]<=o+Aa&&n[1]>=a-Aa&&n[1]<=r+Aa))return!1;const s=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return(s>=0?s:-s)<=Aa}const La=.01;function Na(e,t,n,i){const o=[t[0]-e[0],t[1]-e[1]],a=[i[0]-n[0],i[1]-n[1]],r=a[1]*o[0]-a[0]*o[1];if((r>=0?r:-r)<La){const o=[e[0]<t[0]?e[0]:t[0],e[0]>t[0]?e[0]:t[0],e[1]<t[1]?e[1]:t[1],e[1]>t[1]?e[1]:t[1]],a=[n[0]<i[0]?n[0]:i[0],n[0]>i[0]?n[0]:i[0],n[1]<i[1]?n[1]:i[1],n[1]>i[1]?n[1]:i[1]];if(!(o[0]<=a[1]&&o[1]>=a[0]&&o[2]<=a[3]&&o[3]>=a[2]))return;if(!(Ra(e,t,n)||Ra(e,t,i)||Ra(n,i,e)))return;return[.5*((o[0]>a[0]?o[0]:a[0])+(o[1]<a[1]?o[1]:a[1])),.5*((o[2]>a[2]?o[2]:a[2])+(o[3]<a[3]?o[3]:a[3]))]}let s=e[1]-n[1],l=e[0]-n[0];const d=o[0]*s-o[1]*l;return s=(a[0]*s-a[1]*l)/r,l=d/r,[e[0]+s*o[0],e[1]+s*o[1]]}var Ua=function(e){return e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection",e}(Ua||{}),ka=function(e){return e[e.Outside=-1]="Outside",e[e.Edge=0]="Edge",e[e.Inside=1]="Inside",e}(ka||{}),Va=function(e){return e[e.Exiting=-1]="Exiting",e[e.Unknown=0]="Unknown",e[e.Entering=1]="Entering",e}(Va||{});function Wa(e){for(let t=0,n=e.length;t<n;t++){const i=e[t];i.next||(i.next=e[t===n-1?0:t+1])}}function Ba(e,t){const n=[],i=[],o=new Map;let a=Ca(t,e[0])?Va.Exiting:Va.Entering;for(let i=0,r=e.length;i<r;i++){const s=e[i],l=Ca(t,s),d={type:Ua.Vertex,coordinates:s,position:l?ka.Inside:ka.Outside,visited:!1,next:null};n.push(d);const c=e[i===r-1?0:i+1],h=Pa(t,s,c).map((e=>{const n=e[0],i=t[e[0]],o=t[e[1]],a=Na(s,c,i,o);return{sourceLineSegmentId:n,coordinate:a,targetStartPointDistSquared:Ia(s,a)}}));h.sort(((e,t)=>e.targetStartPointDistSquared-t.targetStartPointDistSquared)),h.forEach((e=>{const{sourceLineSegmentId:t,coordinate:i}=e,r={type:Ua.Intersection,coordinates:i,position:ka.Edge,direction:a,visited:!1,next:null},s={...r,direction:Va.Unknown,cloned:!0};a===Va.Entering?r.next=s:s.next=r;let l=o.get(t);l||(l=[],o.set(t,l)),n.push(r),l.push(s),a*=-1}))}for(let e=0,n=t.length;e<n;e++){const n=e,a=t[e],r={type:Ua.Vertex,coordinates:a,visited:!1,next:null};i.push(r);const s=o.get(n);s?.length&&s.map((e=>({intersectionPoint:e,lineSegStartDistSquared:Ia(a,e.coordinates)}))).sort(((e,t)=>e.lineSegStartDistSquared-t.lineSegStartDistSquared)).map((e=>{let{intersectionPoint:t}=e;return t})).forEach((e=>i.push(e)))}return Wa(n),Wa(i),{targetPolylinePoints:n,sourcePolylinePoints:i}}function Ha(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];if(!n.visited&&n.position===ka.Outside)return n}}function Fa(e,t){const n=ya(e),i=ya(t),o=Oo.vec3.dot(i,n);Oo.glMatrix.equals(1,o)||(t=t.slice().reverse());const{targetPolylinePoints:a}=Ba(e,t),r=Ha(a);if(!r)return e.slice();const s=[r.coordinates];let l=r.next;for(;l!==r;)l.type===Ua.Intersection&&l.cloned||s.push(l.coordinates),l=l.next;return s}function Ga(e,t){const n=ya(e),i=ya(t),o=Oo.vec3.dot(i,n);Oo.glMatrix.equals(-1,o)||(t=t.slice().reverse());const{targetPolylinePoints:a}=Ba(e,t);let r=null;const s=[];for(;r=Ha(a);){const e=[r.coordinates];let t=r.next;for(r.visited=!0;t!==r;)t.visited=!0,t.type===Ua.Intersection&&t.cloned||e.push(t.coordinates),t=t.next;s.push(e)}return s}function $a(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);for(let a=i;a<e.length;a++){if(xa(t,n,e[o],e[a]))return[o,a];o=a}}function qa(e,t){for(let n=0,i=e.length;n<i;n++){const o=$a(t,e[n],e[n===i-1?0:n+1]);if(2===o?.length)return!0}return!1}function za(e,t,n){let i;const o=Ia(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(i=e),!i){const a=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/o;i=a<0?e:a>1?t:[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}return{point:[...i],distanceSquared:Ia(n,i)}}function ja(e,t,n){return za(e,t,n).distanceSquared}const Ka=.1;function Ya(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ka;const n=e.length;if(n<3)return e;const i=t*t,o=[[0,n-1]],a=new Array(n).fill(!1);let r=2;for(a[0]=!0,a[n-1]=!0;o.length;){const[t,n]=o.pop();if(n-t==1)continue;const s=e[t],l=e[n];let d=-1/0,c=-1;for(let i=t+1;i<n;i++){const t=ja(s,l,e[i]);t>d&&(d=t,c=i)}d<i||(a[c]=!0,r++,o.push([c,n]),o.push([t,c]))}const s=new Array(r);for(let t=0,i=0;t<n;t++)a[t]&&(s[i++]=e[t]);return s}function Xa(e,t,n){const i=[],o=Pa(e,t,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);for(let a=0;a<o.length;a++){const r=Na(t,n,e[o[a][0]],e[o[a][1]]);i.push(r)}return i}function Ja(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);const a=[];for(let r=i;r<e.length;r++){const i=e[o],s=e[r];xa(t,n,i,s)&&a.push([o,r]),o=r}if(0===a.length)return;const r=[];a.forEach((n=>{const i=[e[n[0]],e[n[1]]],o=[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];r.push(Oo.vec2.distance(o,t))}));const s=Math.min(...r);return{segment:a[r.indexOf(s)],distance:s}}const Za=.001,Qa=(e,t)=>{let n,i,o;if(e instanceof ie.StackViewport){const t=e.getImageData();i=t.direction.slice(0,3),o=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:a,spacing:r}=t,{viewPlaneNormal:s,viewUp:l}=e.getCamera(),d=a.slice(0,3),c=a.slice(3,6),h=a.slice(6,9),u=Oo.vec3.create();Oo.vec3.cross(u,l,s);const g=Math.abs(Oo.vec3.dot(u,d)),m=Math.abs(Oo.vec3.dot(u,c)),v=Math.abs(Oo.vec3.dot(u,h));let p;if(Math.abs(1-g)<Za)p=r[0],i=d;else if(Math.abs(1-m)<Za)p=r[1],i=c;else{if(!(Math.abs(1-v)<Za))throw new Error("No support yet for oblique plane planar contours");p=r[2],i=h}const f=Math.abs(Oo.vec3.dot(l,d)),w=Math.abs(Oo.vec3.dot(l,c)),I=Math.abs(Oo.vec3.dot(l,h));let E;if(Math.abs(1-f)<Za)E=r[0],o=d;else if(Math.abs(1-w)<Za)E=r[1],o=c;else{if(!(Math.abs(1-I)<Za))throw new Error("No support yet for oblique plane planar contours");E=r[2],o=h}n=[p,E]}return{spacing:[n[0]/t,n[1]/t],xDir:i,yDir:o}},er=(e,t,n)=>Oo.vec2.dist(e,t)<n,tr=(e,t,n,i)=>{const{xDir:o,yDir:a,spacing:r}=i,s=(0,ie.getEnabledElement)(e),{viewport:l}=s;if(!t.length)return t.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;const d=l.canvasToWorld(t[t.length-1]),c=l.canvasToWorld(n),h=Oo.vec3.create();Oo.vec3.subtract(h,c,d);const u=Math.abs(Oo.vec3.dot(h,o)),g=Math.abs(Oo.vec3.dot(h,a)),m=Math.max(Math.floor(u/r[0]),Math.floor(g/r[0]));if(m>1){const e=t[t.length-1],i=Oo.vec2.dist(e,n),o=Oo.vec2.create();Oo.vec2.subtract(o,n,e),Oo.vec2.set(o,o[0]/i,o[1]/i);const a=i/m;for(let n=1;n<=m;n++)t.push([e[0]+a*o[0]*n,e[1]+a*o[1]*n])}else t.push(n);return m},nr=(e,t,n,i)=>{const o=[e[0]-t[0],e[1]-t[1]],a=[n[0]-t[0],n[1]-t[1]],r=o[0]*a[0]+o[1]*a[1];if(r<0)return!1;const s=Math.sqrt(a[0]*a[0]+a[1]*a[1]);if(0===s)return!1;const l=r/s,d=[a[0]/s,a[1]/s],c=[d[0]*l,d[1]*l],h=[t[0]+c[0],t[1]+c[1]];return!(Oo.vec2.distance(e,h)>i||Oo.vec2.distance(t,h)>Oo.vec2.distance(t,n))},ir=1e-6;function or(e){let t;const n=ie.utilities.getRandomSampleFromArray(e,50);for(let e=0;e<3;e++)if(n.every(((t,n,i)=>Math.abs(t[e]-i[0][e])<ir))){t=e;break}if(void 0===t)throw new Error("Cannot find a shared dimension index for polyline, probably oblique plane");const i=[],o=(t+1)%3,a=(t+2)%3;for(let t=0;t<e.length;t++)i.push([e[t][o],e[t][a]]);return{sharedDimensionIndex:t,projectedPolyline:i}}function ar(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{sharedDimensionIndex:i,projectedPolyline:o}=or(t),{holes:a}=n,r=[];if(a)for(let e=0;e<a.length;e++){const t=a[e],n=[];for(let e=0;e<t.length;e++)n.push([t[e][(i+1)%3],t[e][(i+2)%3]]);r.push(n)}return Ca(o,[e[(i+1)%3],e[(i+2)%3]],{holes:r})}const{EPSILON:rr}=ie.CONSTANTS,sr=1-rr;function lr(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=ie.metaData.get("imagePlaneModule",n),o=Oo.vec3.fromValues(i[0],i[1],i[2]),a=Oo.vec3.fromValues(i[3],i[4],i[5]);t=Oo.vec3.create(),Oo.vec3.cross(t,o,a),e.metadata.viewPlaneNormal=t}const n=Math.abs(Oo.vec3.dot(i,t))>sr;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.handles.points[0];if(!e.isVisible)continue;const n=Oo.vec3.create();Oo.vec3.sub(n,r,t);const o=Oo.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}function dr(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e instanceof ie.VolumeViewport){const n=e.getCamera(),{spacingInNormalDirection:i}=ie.utilities.getTargetVolumeAndSpacingInNormalDir(e,n);return lr(t,n,i)}if(e instanceof ie.StackViewport){const t=e.getCurrentImageId(),i=t.indexOf(":");n.imageURI=t.substring(i+1)}return t.filter((t=>!!t.isVisible&&(!!t.data.isCanvasAnnotation||e.isReferenceViewable(t.metadata,n))))}const cr=function(e,t,n){let i=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return oo(n)&&(i="leading"in n?Boolean(n.leading):i,o="trailing"in n?Boolean(n.trailing):o),ao(e,t,{leading:i,trailing:o,maxWait:t})};function hr(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o];n.getFrameOfReferenceUID()===t&&i.push(n)}return i}const ur=function(e,t){t||(t=(0,ie.getRenderingEngines)().find((t=>t.getViewports().find((t=>t.id===e))))?.id);const n=xe.toolGroups.filter((n=>n.viewportsInfo.some((n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)))));if(n.length){if(n.length>1)throw new Error(`Multiple tool groups found for renderingEngineId: ${t} and viewportId: ${e}. You should only\n have one tool group per viewport in a renderingEngine.`);return n[0]}},{Active:gr,Passive:mr,Enabled:vr}=Oe;function pr(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o],a=ur(n.id,n.renderingEngineId);a&&(fr(a,t)&&i.push(n))}return i}function fr(e,t){const{toolOptions:n}=e,i=n[t];if(!i)return!1;const o=i.mode;return o===gr||o===mr||o===vr}const wr=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.999;return e.filter((e=>{const i=e.getCamera();return Math.abs(Oo.vec3.dot(i.viewPlaneNormal,t.viewPlaneNormal))>n}))};function Ir(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=(0,ie.getEnabledElement)(e),{renderingEngine:o,FrameOfReferenceUID:a}=i;let r=o.getViewports();r=hr(r,a),r=pr(r,t);const s=o.getViewport(i.viewportId);return n&&(r=wr(r,s.getCamera())),r.map((e=>e.id))}function Er(e,t){if(xe.svgNodeCache[e])return xe.svgNodeCache[e][t]?xe.svgNodeCache[e][t].domRef:void 0}function Cr(e,t,n,i){if(!xe.svgNodeCache[t])return null;xe.svgNodeCache[t][i]={touched:!0,domRef:n},e.appendChild(n)}function _r(e,t){xe.svgNodeCache[e]&&xe.svgNodeCache[e][t]&&(xe.svgNodeCache[e][t].touched=!0)}function br(e,t){xe.svgNodeCache[t]&&Object.keys(xe.svgNodeCache[t]).forEach((n=>{const i=xe.svgNodeCache[t][n];!i.touched&&i.domRef&&(e.removeChild(i.domRef),delete xe.svgNodeCache[t][n])}))}const Tr=function(e,t){const n=function(e){const t=(0,ie.getEnabledElement)(e),{viewportId:n,renderingEngineId:i}=t,o=`${n}:${i}`,a=function(e){const t=e.querySelector(".viewport-element"),n=t?.querySelector(":scope > .svg-layer");return n}(e);return Object.keys(xe.svgNodeCache[o]).forEach((e=>{xe.svgNodeCache[o][e].touched=!1})),{svgLayerElement:a,svgNodeCacheForCanvas:xe.svgNodeCache,getSvgNode:Er.bind(this,o),appendNode:Cr.bind(this,a,o),setNodeTouched:_r.bind(this,o),clearUntouched:br.bind(this,a,o)}}(e);t(n),n.clearUntouched()};function Dr(e,t){const n=(0,ie.getEnabledElement)(e),{renderingEngineId:i,viewportId:o}=n,a=ur(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n];if(i&&t.includes(i.mode)){const e=a.getToolInstance(n);r.push(e)}}return r}const{Active:Sr,Passive:yr,Enabled:xr}=Oe,Mr=new class{constructor(){ae(this,"hasBeenDestroyed",void 0),ae(this,"_needsRender",new Set),ae(this,"_animationFrameSet",!1),ae(this,"_animationFrameHandle",null),ae(this,"_viewportElements",void 0),ae(this,"_renderFlaggedViewports",(()=>{this._throwIfDestroyed();const e=Array.from(this._viewportElements.values());for(let t=0;t<e.length;t++){const n=e[t];if(this._needsRender.has(n)&&(this._triggerRender(n),this._needsRender.delete(n),0===this._needsRender.size))break}this._animationFrameSet=!1,this._animationFrameHandle=null,this._render()})),this._viewportElements=new Map}addViewportElement(e,t){this._viewportElements.set(e,t)}removeViewportElement(e,t){this._viewportElements.delete(e),this._needsRender.delete(t),this._reset()}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setAllViewportsToBeRenderedNextFrame(){[...this._viewportElements.values()].forEach((e=>{this._needsRender.add(e)})),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){const t=[...this._viewportElements.values()];e.forEach((e=>{-1!==t.indexOf(e)&&this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}_triggerRender(e){const t=(0,ie.getEnabledElement)(e);if(!t)return;if(!(0,ie.getRenderingEngine)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");const n=Dr(e,[Sr,yr,xr]),{renderingEngineId:i,viewportId:o}=t,a={element:e,renderingEngineId:i,viewportId:o};Tr(e,(i=>{let o=!1;n.forEach((e=>{if(e.renderAnnotation){const n=e.renderAnnotation(t,i);o=o||n}})),o&&(0,ie.triggerEvent)(e,se.ANNOTATION_RENDERED,{...a})}))}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}},Or=function(e){Mr.renderViewport(e)};function Pr(e){e.length&&e.forEach((e=>{const t=(0,ie.getEnabledElementByViewportId)(e);if(!t)return void console.warn(`Viewport not available for ${e}`);const{viewport:n}=t;if(!n)return void console.warn(`Viewport not available for ${e}`);const i=n.element;Or(i)}))}const Ar=Pr,Rr=Symbol("DefinedCursors"),Lr=new Set(["alias","all-scroll","auto","cell","col-resize","context-menu","copy","crosshair","default","e-resize","ew-resize","grab","grabbing","help","move","ne-resize","nesw-resize","no-drop","none","not-allowed","n-resize","ns-resize","nw-resize","nwse-resize","pointer","progress","row-resize","se-resize","s-resize","sw-resize","text","vertical-text","wait","w-resize","zoom-in","zoom-out"]);class Nr{constructor(e,t){ae(this,"name",void 0),ae(this,"fallback",void 0),this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){const{fallback:t}=this;return t instanceof Nr?`${e}, ${t.getStyleProperty()}`:e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){const t=Ur(Nr,Rr);let n=t.get(e);return n instanceof Nr?n:Lr.has(e)?(n=new Nr(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof Nr&&(Ur(Nr,Rr).set(e,t),!0)}}function Ur(e,t){let n=e[t];return n instanceof Map||(n=new Map,Object.defineProperty(e,t,{value:n})),n}const kr=Lr.values(),Vr=Symbol("ElementCursorsMap");function Wr(e,t){Gr(e)[0]=t,Br(e,t)}function Br(e,t){const n=Gr(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof Nr?t:Nr.getDefinedCursor("auto")).getStyleProperty()}function Hr(e){Br(e,Gr(e)[1])}function Fr(e){Br(e,Nr.getDefinedCursor("none"))}function Gr(e){let t=Gr[Vr];t instanceof WeakMap||(t=new WeakMap,Object.defineProperty(Gr,Vr,{value:t}));let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}function $r(e,t){return Math.sqrt(Ia(e,t))}function qr(e){var t=e.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[i],a=e[i+1],r=i>0?e[i-1]:2*o-a,s=i<t-1?e[i+2]:2*a-o;return function(e,t,n,i,o){var a=e*e,r=a*e;return((1-3*e+3*a-r)*t+(4-6*a+3*r)*n+(1+3*e+3*a-3*r)*i+r*o)/6}((n-i/t)*t,r,o,a,s)}}function zr(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e(i/(t-1));return n}function jr(e){return e.length}function Kr(){return function(e){if(!(o=e.length))return[];for(var t=-1,n=function(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let i=-1;for(let o of e)null!=(o=t(o,++i,e))&&(n>o||void 0===n&&o>=o)&&(n=o)}return n}(e,jr),i=new Array(n);++t<n;)for(var o,a=-1,r=i[t]=new Array(o);++a<o;)r[a]=e[a][t];return i}(arguments)}function Yr(e,t,n,i){const o=n-t+1,a=Math.floor(i/100*o)??1,r=Math.floor(o/a)??1;if(isNaN(o)||!o||!r)return e;if(o/r<2)return e;const s=Math.max(0,t),l=Math.min(e.length-1,n),d=e.slice(0,s),c=e.slice(l+1,e.length),h=function(e,t){if(!t||0===t.length||t.length===e.length)return e;const n=t[t.length-1]-t[0]+1,i=qr(t.map((t=>e[t][0]))),o=qr(t.map((t=>e[t][1])));if(a=e,3===a[0]?.length){const a=qr(t.map((t=>e[t][2])));return Kr(zr(i,n),zr(o,n),zr(a,n))}return Kr(zr(i,n),zr(o,n));var a}(e,function(e,t){const n=[],[i,o]=t,a=o-i+1,r=Math.floor(a/e);let s=0,l=Math.round((a-1)/(r-1)*s)+i;for(;l<=o;)n.push(l),s++,l=Math.round((a-1)/(r-1)*s)+i;return n}(r,[s,l]));return[...d,...h,...c]}function Xr(e,t){return!t?.autoGenerated&&(!0===e?.smoothing?.smoothOnAdd||!0===e?.smoothing?.smoothOnEdit)}function Jr(e,t,n){return(e+t+n)%t}function Zr(e,t,n,i){const[,o,a]=e,[,r,s]=t,l=a.length,d=s.length;let c=e[0],h=t[0];if(!(a[c]&&s[h]&&a[o]&&s[r]))return[void 0,void 0];for(;c!==o&&h!==r;){if(n(s[h],a[c]))return[c,h];c=Jr(c,l,i),h=Jr(h,d,i)}return[void 0,void 0]}function Qr(e,t,n){const{interpolation:i,smoothing:o}=e,a=t;if(i){const{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:i,smoothOnAdd:a=!1,smoothOnEdit:r=!1}=o,s=n?i:e;if(n?r:a){const[e,i]=n?function(e,t){const[n,i]=function(e,t){for(let n=0;n<e.length;n++)for(let i=0;i<t.length;i++)if(0===$r(e[n],t[i]))return[n,i]}(e,t)||[],o=(e,t)=>!1===function(e,t){return $r(e,t)<.001}(e,t),[a,r]=Zr([Jr(n,e.length,1),n,e],[Jr(i,t.length,1),i,t],o,1),[s]=Zr([Jr(a,e.length,-1),a,e],[Jr(r,t.length,-1),r,t],o,-1);return[a,s]}(t,n):[0,t.length-1];return t[e]&&t[i]?Yr(t,e,i,s):t}}return a}var es=function(e){return e[e.Primary=1]="Primary",e[e.Secondary=2]="Secondary",e[e.Primary_And_Secondary=3]="Primary_And_Secondary",e[e.Auxiliary=4]="Auxiliary",e[e.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",e[e.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",e[e.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",e[e.Fourth_Button=8]="Fourth_Button",e[e.Fifth_Button=16]="Fifth_Button",e[e.Wheel=524288]="Wheel",e[e.Wheel_Primary=524289]="Wheel_Primary",e}(es||{}),ts=function(e){return e[e.Shift=16]="Shift",e[e.Ctrl=17]="Ctrl",e[e.Alt=18]="Alt",e[e.Meta=91]="Meta",e[e.ShiftCtrl=1617]="ShiftCtrl",e[e.ShiftAlt=1618]="ShiftAlt",e[e.ShiftMeta=1691]="ShiftMeta",e[e.CtrlAlt=1718]="CtrlAlt",e[e.CtrlMeta=1791]="CtrlMeta",e[e.AltMeta=1891]="AltMeta",e}(ts||{});const ns=e=>e.shiftKey?e.ctrlKey?ts.ShiftCtrl:e.altKey?ts.ShiftAlt:e.metaKey?ts.ShiftMeta:ts.Shift:e.ctrlKey?e.altKey?ts.CtrlAlt:e.metaKey?ts.CtrlMeta:ts.Ctrl:e.altKey?e.metaKey&&ts.AltMeta||ts.Alt:e.metaKey?ts.Meta:void 0;function is(e,t){const n=e[0],i=e[e.length-1],o=Oo.vec2.create();Oo.vec2.set(o,i[0]-n[0],i[1]-n[1]),Oo.vec2.normalize(o,o);const a=Oo.vec2.create(),r=Oo.vec2.create();Oo.vec2.set(a,-o[1],o[0]),Oo.vec2.set(r,o[1],-o[0]);const s=[(n[0]+i[0])/2,(n[1]+i[1])/2],l={dist:0,index:null};for(let t=0;t<e.length;t++){const n=e[t],i=Oo.vec2.dist(n,s);i>l.dist&&(l.dist=i,l.index=t)}return[e[l.index],s].map(t.canvasToWorld)}let os=function(e){return e[e.CounterClockwise=-1]="CounterClockwise",e[e.Unknown=0]="Unknown",e[e.Clockwise=1]="Clockwise",e}({});const{addCanvasPointsToArray:as,pointsAreWithinCloseContourProximity:rs,getFirstLineSegmentIntersectionIndexes:ss,getSubPixelSpacingAndXYDirections:ls}=s;function ds(e,t,n){this.isDrawing=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,ie.getEnabledElement)(a),{viewport:l}=s,d=ns(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:c,xDir:h,yDir:u}=ls(l,this.configuration.subPixelResolution);this.drawData={canvasPoints:[r],polylineIndex:0,contourHoleProcessingEnabled:d},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:u,movingTextBox:!1},xe.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpDrawCallback),Fr(a)}function cs(e){xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(se.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(se.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(se.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(se.TOUCH_TAP,this.mouseUpDrawCallback),Hr(e)}function hs(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{annotation:d,viewportIdsToRender:c,xDir:h,yDir:u,spacing:g,movingTextBox:m}=this.commonData,{polylineIndex:v,canvasPoints:p}=this.drawData,f=p[p.length-1],w=l.canvasToWorld(f),I=Oo.vec3.create();Oo.vec3.subtract(I,o,w);const E=Math.abs(Oo.vec3.dot(I,h)),C=Math.abs(Oo.vec3.dot(I,u));if(!(E<=g[0]&&C<=g[1])){if(m){this.isDrawing=!1;const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.data.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else{const t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{const e=as(i,p,a,this.commonData);this.drawData.polylineIndex=v+e}}Ar(c)}}function us(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:i}=this.drawData,o=n[0],a=n[n.length-1],r=e.detail,{element:s}=r;t&&!rs(o,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(s,{contourHoleProcessingEnabled:i}):this.completeDrawClosedContour(s,{contourHoleProcessingEnabled:i})}function gs(e,t){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:i,minPointsToSave:o}=t??{};if(o&&n.length<o)return!1;if(this.haltDrawing(e,n))return!1;const{annotation:a,viewportIdsToRender:r}=this.commonData,s=(0,ie.getEnabledElement)(e),{viewport:l,renderingEngine:d}=s;as(e,n,n[0],this.commonData),n.pop();const c=Xr(this.configuration,a)?Qr(this.configuration,n):n;this.updateContourPolyline(a,{points:c,closed:!0,targetWindingDirection:os.Clockwise},l);const{textBox:h}=a.data.handles;return h?.hasMoved||Ue(a,i),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ar(r),this.deactivateDraw(e),!0}function ms(){const{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],i=e.slice(0,-1).slice(1),o=ss(i,n[0],n[1],!1);if(o){const t=o[1];this.drawData.canvasPoints=1===t?e.splice(1):e.splice(0,t)}}function vs(e,t){const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:i}=t??{};if(this.haltDrawing(e,n))return!1;const{annotation:o,viewportIdsToRender:a}=this.commonData,r=(0,ie.getEnabledElement)(e),{viewport:s,renderingEngine:l}=r,d=Xr(this.configuration,o)?Qr(this.configuration,n):n;this.updateContourPolyline(o,{points:d,closed:!1},s);const{textBox:c}=o.data.handles,h=o.data.contour.polyline;return o.data.handles.points=[h[0],h[h.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=is(n,s)),c.hasMoved||Ue(o,i),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ar(a),this.deactivateDraw(e),!0}function ps(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{canvasPoints:r}=this.drawData,s=r.slice(0,-1),l=ss(s,o,a,!1);if(void 0!==l)return l[0]}function fs(e,t){const n=e.detail,{element:i}=n,{canvasPoints:o,contourHoleProcessingEnabled:a}=this.drawData,{annotation:r,viewportIdsToRender:s}=this.commonData;as(i,o,o[t],this.commonData),o.pop();const l=ba(o.slice(t));if(ie.utilities.isEqual(l,0))return void o.splice(t+1);o.splice(0,t);const d={contourHoleProcessingEnabled:a,minPointsToSave:3};this.completeDrawClosedContour(i,d)&&this.activateClosedContourEdit(e,r,s)}function ws(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:i}=this.drawData,o=n[0],a=n[n.length-1];t&&!rs(o,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e,{contourHoleProcessingEnabled:i}):this.completeDrawClosedContour(e,{contourHoleProcessingEnabled:i})}function Is(e,t){const{subPixelResolution:n}=this.configuration;if(function(e,t){const n=Math.max(3*t,3);return e.length<n}(t,n)){const{annotation:t,viewportIdsToRender:n}=this.commonData,i=(0,ie.getEnabledElement)(e),{renderingEngine:o}=i;return pt(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ar(n),this.deactivateDraw(e),!0}return!1}const Es=function(e){e.activateDraw=ds.bind(e),e.deactivateDraw=cs.bind(e),e.applyCreateOnCross=fs.bind(e),e.findCrossingIndexDuringCreate=ps.bind(e),e.completeDrawOpenContour=vs.bind(e),e.removeCrossedLinesOnCompleteDraw=ms.bind(e),e.mouseDragDrawCallback=hs.bind(e),e.mouseUpDrawCallback=us.bind(e),e.completeDrawClosedContour=gs.bind(e),e.cancelDrawing=ws.bind(e),e.haltDrawing=Is.bind(e)},{addCanvasPointsToArray:Cs,getFirstLineSegmentIntersectionIndexes:_s}=s;function bs(e,t){const n=e.detail,{element:i,currentPoints:o,lastPoints:a}=n,r=o.canvas,s=a.canvas,{editCanvasPoints:l,prevCanvasPoints:d}=this.editData,c=_s(d,r,s,t);if(c)this.editData.startCrossingIndex=c[0],this.removePointsUpUntilFirstCrossing(t);else if(d.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){const e=l[0],t=[];for(let n=0;n<d.length;n++){const i=d[n],o=Oo.vec2.distance(i,e);t.push({distance:o,index:n})}t.sort(((e,t)=>e.distance-t.distance));const n=[t[0],t[1]],i=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=i}else{const e=Oo.vec2.create();Oo.vec2.subtract(e,l[1],l[0]),Oo.vec2.normalize(e,e);const n=6,o=[l[0][0]-e[0]*n,l[0][1]-e[1]*n],a=_s(d,o,l[0],t);if(a){const e=[o];Cs(i,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function Ts(e){const{editCanvasPoints:t,prevCanvasPoints:n}=this.editData;let i=0;for(let o=0;o<t.length-1;o++){const a=[t[o],t[o+1]];if(i++,_s(n,a[0],a[1],e))break}t.splice(0,i),this.editData.editIndex=t.length-1}function Ds(e,t){const n=e.detail,{currentPoints:i,lastPoints:o}=n,a=i.canvas,r=o.canvas,{prevCanvasPoints:s}=this.editData;return!!_s(s,a,r,t)}function Ss(e){const{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let i=n.length-1;i>0;i--){const o=[n[i],n[i-1]],a=!!_s(t,o[0],o[1],e);if(n.pop(),a)break}}function ys(){const{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;const i=e[e.length-1],o=[];for(let e=0;e<t.length;e++){const n=t[e],a=Oo.vec2.distance(n,i);o.push({distance:a,index:e})}o.sort(((e,t)=>e.distance-t.distance));const a=e.slice(0,-1);for(let n=0;n<o.length;n++){const{index:i}=o[n],r=t[i],s=e[e.length-1];if(!_s(a,r,s,!1))return i}return-1}function xs(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{editCanvasPoints:r}=this.editData,s=r.slice(0,-2),l=_s(s,o,a,!1);if(!l)return;const d=l[0],c=r.length-d;for(let e=0;e<c;e++)r.pop()}const Ms=function(e){e.checkForFirstCrossing=bs.bind(e),e.removePointsUpUntilFirstCrossing=Ts.bind(e),e.checkForSecondCrossing=Ds.bind(e),e.findSnapIndex=ys.bind(e),e.removePointsAfterSecondCrossing=Ss.bind(e),e.checkAndRemoveCrossesOnEditLine=xs.bind(e)};function Os(e,t,n,i){const{canvasToWorld:o,worldToCanvas:a}=n,{data:r}=e,{targetWindingDirection:s}=t;let{points:l}=t;i?.decimate?.enabled&&(l=Ya(t.points,i?.decimate?.epsilon));let{closed:d}=t;const c=l.length,h=new Array(c),u=Da(l),g=ut(e);if(void 0===d){let e=!1;if(l.length>3){const t=Ia(l[0],l[c-1]);e=ie.utilities.isEqual(0,t)}d=e}let m=g?-1*g.data.contour.windingDirection:s;void 0===m&&(m=u),m!==u&&l.reverse();const v=r.handles.points.map((e=>a(e)));v.length>2&&Da(v)!==m&&r.handles.points.reverse();for(let e=0;e<c;e++)h[e]=o(l[e]);r.contour.polyline=h,r.contour.closed=d,r.contour.windingDirection=m,It(e)}const{getSubPixelSpacingAndXYDirections:Ps,addCanvasPointsToArray:As,getArea:Rs}=s;function Ls(e,t,n){this.isEditingClosed=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,ie.getEnabledElement)(a);if(!s)return;const{viewport:l}=s,d=t.data.contour.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:u}=Ps(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:u,movingTextBox:!1},xe.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(se.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpClosedContourEditCallback),Fr(a)}function Ns(e){xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(se.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(se.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(se.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(se.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(se.TOUCH_TAP,this.mouseUpClosedContourEditCallback),Hr(e)}function Us(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:m,startCrossingIndex:v}=this.editData,p=m[m.length-1],f=l.canvasToWorld(p),w=Oo.vec3.create();Oo.vec3.subtract(w,o,f);const I=Math.abs(Oo.vec3.dot(w,c)),E=Math.abs(Oo.vec3.dot(w,h));if(I<=u[0]&&E<=u[1])return;void 0!==v&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+As(i,m,a,this.commonData);this.editData.editIndex=C,void 0===v&&m.length>1&&this.checkForFirstCrossing(e,!0),this.editData.snapIndex=this.findSnapIndex(),-1!==this.editData.snapIndex?(this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(e),void 0!==v&&this.checkForSecondCrossing(e,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(e)),Ar(d)):this.finishEditAndStartNewEdit(e)}function ks(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData;Os(r,{points:l,closed:!0,targetWindingDirection:os.Clockwise},o),r.autoGenerated&&(r.autoGenerated=!1),Le(r,n);const c=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[c],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0},Ar(s)}function Vs(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;As(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=Oo.vec2.distance(t[l],s[0]),h=Oo.vec2.distance(t[l],s[s.length-1]),u=Oo.vec2.distance(t[d],s[0]),g=Oo.vec2.distance(t[d],s[s.length-1]),m=[];for(let e=0;e<l;e++){const n=t[e];m.push([n[0],n[1]])}let v=c+g,p=h+u;if(v<p)for(let e=0;e<s.length;e++){const t=s[e];m.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];m.push([t[0],t[1]])}for(let e=d;e<t.length;e++){const n=t[e];m.push([n[0],n[1]])}const f=[];for(let e=l;e<d;e++){const n=t[e];f.push([n[0],n[1]])}if(v=u+h,p=g+c,v<p)for(let e=0;e<s.length;e++){const t=s[e];f.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];f.push([t[0],t[1]])}return Rs(m)>Rs(f)?m:f}function Ws(e){const t=e.detail,{element:n}=t;this.completeClosedContourEdit(n)}function Bs(e){const t=(0,ie.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const t=Xr(this.configuration,o)?Qr(this.configuration,r,s):r,i=this.configuration?.decimate||{};Os(o,{points:t,closed:!0,targetWindingDirection:os.Clockwise},n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}}),o.autoGenerated&&(o.autoGenerated=!1),Le(o,e)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,Ar(a),this.deactivateClosedContourEdit(e)}function Hs(e){this.completeClosedContourEdit(e)}const Fs=function(e){e.activateClosedContourEdit=Ls.bind(e),e.deactivateClosedContourEdit=Ns.bind(e),e.mouseDragClosedContourEditCallback=Us.bind(e),e.mouseUpClosedContourEditCallback=Ws.bind(e),e.finishEditAndStartNewEdit=ks.bind(e),e.fuseEditPointsWithClosedContour=Vs.bind(e),e.cancelClosedContourEdit=Hs.bind(e),e.completeClosedContourEdit=Bs.bind(e)},{addCanvasPointsToArray:Gs,getSubPixelSpacingAndXYDirections:$s}=s;function qs(e,t,n){this.isEditingOpen=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,ie.getEnabledElement)(a),{viewport:l}=s,d=t.data.contour.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:u}=$s(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:u,movingTextBox:!1},xe.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(se.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Fr(a)}function zs(e){xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(se.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(se.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(se.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(se.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(se.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Hr(e)}function js(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:m,startCrossingIndex:v}=this.editData,p=m[m.length-1],f=l.canvasToWorld(p),w=Oo.vec3.create();Oo.vec3.subtract(w,o,f);const I=Math.abs(Oo.vec3.dot(w,c)),E=Math.abs(Oo.vec3.dot(w,h));if(I<=u[0]&&E<=u[1])return;void 0!==v&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+Gs(i,m,a,this.commonData);this.editData.editIndex=C,void 0===v&&m.length>1&&this.checkForFirstCrossing(e,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(e),void 0!==v&&this.checkForSecondCrossing(e,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(e)):this.checkIfShouldOverwriteAnEnd(e)&&this.openContourEditOverwriteEnd(e),Ar(d)}function Ks(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o}=i,{annotation:a,viewportIdsToRender:r}=this.commonData;Os(a,{points:this.fuseEditPointsForOpenContourEndEdit(),closed:!1},o);const s=a.data.contour.polyline;a.data.handles.points=[s[0],s[s.length-1]],a.data.handles.activeHandleIndex=1,Le(a,n),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(e,a,r,null)}function Ys(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{snapIndex:r,prevCanvasPoints:s,startCrossingIndex:l}=this.editData;if(void 0===l||void 0===r)return!1;if(-1===r)return!0;if(0!==r&&r!==s.length-1)return!1;const d=o,c=a,h=s[r],u=Oo.vec2.create(),g=Oo.vec2.create();Oo.vec2.set(u,d[0]-c[0],d[1]-c[1]),Oo.vec2.set(g,d[0]-h[0],d[1]-h[1]);const m=Oo.vec2.dot(u,g),v=Math.sqrt(u[0]*u[0]+u[1]*u[1]),p=Math.sqrt(g[0]*g[0]+g[1]*g[1]);return Math.acos(m/(v*p))<Math.PI/2}function Xs(){const{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i}=this.editData,o=[];if(0===e)for(let e=t.length-1;e>=i;e--){const n=t[e];o.push([n[0],n[1]])}else for(let e=0;e<i;e++){const n=t[e];o.push([n[0],n[1]])}if(Oo.vec2.distance(t[i],n[0])<Oo.vec2.distance(t[i],n[n.length-1]))for(let e=0;e<n.length;e++){const t=n[e];o.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){const t=n[e];o.push([t[0],t[1]])}return o}function Js(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;Gs(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=Oo.vec2.distance(t[l],s[0]),h=Oo.vec2.distance(t[l],s[s.length-1]),u=Oo.vec2.distance(t[d],s[0]),g=Oo.vec2.distance(t[d],s[s.length-1]),m=[];for(let e=0;e<l;e++){const n=t[e];m.push([n[0],n[1]])}if(c+g<h+u)for(let e=0;e<s.length;e++){const t=s[e];m.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];m.push([t[0],t[1]])}for(let e=d;e<t.length;e++){const n=t[e];m.push([n[0],n[1]])}return m}function Zs(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData;Os(r,{points:l,closed:!1},o);const c=r.data.contour.polyline;r.data.handles.points=[c[0],c[c.length-1]],Le(r,n);const h=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0},Ar(s)}function Qs(e){const t=e.detail,{element:n}=t;this.completeOpenContourEdit(n)}function el(e){const t=(0,ie.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const t=Xr(this.configuration)?Qr(this.configuration,r,s):r,i=this.configuration?.decimate||{};Os(o,{points:t,closed:!1},n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}});const a=o.data.contour.polyline;o.data.handles.points=[a[0],a[a.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=is(r,n)),Le(o,e)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,Ar(a),this.deactivateOpenContourEdit(e)}function tl(e){this.completeOpenContourEdit(e)}const nl=function(e){e.activateOpenContourEdit=qs.bind(e),e.deactivateOpenContourEdit=zs.bind(e),e.mouseDragOpenContourEditCallback=js.bind(e),e.mouseUpOpenContourEditCallback=Qs.bind(e),e.fuseEditPointsWithOpenContour=Js.bind(e),e.finishEditOpenOnSecondCrossing=Zs.bind(e),e.checkIfShouldOverwriteAnEnd=Ys.bind(e),e.fuseEditPointsForOpenContourEndEdit=Xs.bind(e),e.openContourEditOverwriteEnd=Ks.bind(e),e.cancelOpenContourEdit=tl.bind(e),e.completeOpenContourEdit=el.bind(e)},{getSubPixelSpacingAndXYDirections:il}=s;function ol(e,t,n,i){this.isDrawing=!0;const o=e.detail,{element:a}=o,r=(0,ie.getEnabledElement)(a),{viewport:s}=r,{spacing:l,xDir:d,yDir:c}=il(s,this.configuration.subPixelResolution),h=t.data.contour.polyline.map(s.worldToCanvas);0===t.data.handles.activeHandleIndex&&h.reverse();let u=!1;i?.worldPosition&&(u=!0),this.drawData={canvasPoints:h,polylineIndex:h.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:l,xDir:d,yDir:c,movingTextBox:u},xe.isInteractingWithTool=!0,a.addEventListener(se.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(se.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(se.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(se.TOUCH_TAP,this.mouseUpDrawCallback),Fr(a)}const al=function(e){e.activateOpenContourEndEdit=ol.bind(e)},rl=function(e,t,n){return`${e}::${t}::${n}`},sl=function(e,t){Object.keys(e).forEach((n=>{const i=e[n];void 0!==i&&""!==i&&t.setAttribute(n,i)}))},ll=function(e,t){Object.keys(e).forEach((n=>{const i=t.getAttribute(n),o=e[n];void 0===o||""===o?t.removeAttribute(n):i!==o&&t.setAttribute(n,o)}))};function dl(e,t,n,i,o){const a=i.length&&i[0].length&&Array.isArray(i[0][0])?i:[i],{color:r="rgb(0, 255, 0)",width:s=10,fillColor:l="none",fillOpacity:d=0,lineWidth:c,lineDash:h,closePath:u=!1}=o,g=c||s,m=rl(t,"path",n),v=e.getSvgNode(m);let p="";for(let e=0,t=a.length;e<t;e++){const t=a[e],n=t.length;if(!(n<2)){for(let e=0;e<n;e++){const n=t[e];p+=`${e?"L":"M"} ${n[0].toFixed(1)}, ${n[1].toFixed(1)} `}u&&(p+="Z ")}}if(!p)return;const f={d:p,stroke:r,fill:l,"fill-opacity":d,"stroke-width":g,"stroke-dasharray":h};if(v)ll(f,v),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg","path");sl(f,t),e.appendNode(t,m)}}function cl(e,t,n,i,o){if(i.length<2)return;const{color:a="rgb(0, 255, 0)",width:r=10,fillColor:s="none",fillOpacity:l=0,lineWidth:d,lineDash:c,closePath:h=!1}=o,u=d||r,g=rl(t,"polyline",n),m=e.getSvgNode(g);let v="";for(const e of i)v+=`${e[0].toFixed(1)}, ${e[1].toFixed(1)} `;if(h){const e=i[0];v+=`${e[0]}, ${e[1]}`}const p={points:v,stroke:a,fill:s,"fill-opacity":l,"stroke-width":u,"stroke-dasharray":c};if(m)ll(p,m),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","polyline");sl(p,t),e.appendNode(t,g)}}const hl=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5?arguments[5]:void 0;const{color:r,handleRadius:s,width:l,lineWidth:d,fill:c,type:h,opacity:u}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},o),g=d||l,m=rl(t,"handle",`hg-${n}-index-${a}`);let v;if("circle"===h)v={cx:`${i[0]}`,cy:`${i[1]}`,r:s,stroke:r,fill:c,"stroke-width":g,opacity:u};else{if("rect"!==h)throw new Error(`Unsupported handle type: ${h}`);{const e=1.5*parseFloat(s);v={x:""+(i[0]-.5*e),y:""+(i[1]-.5*e),width:`${e}`,height:`${e}`,stroke:r,fill:c,"stroke-width":g,rx:""+.1*e,opacity:u}}}const p=e.getSvgNode(m);if(p)ll(v,p),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg",h);sl(v,t),e.appendNode(t,m)}},ul=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};i.forEach(((i,a)=>{hl(e,t,n,i,o,a)}))};function gl(e){return(e.childAnnotationUIDs??[]).map((e=>be(e).data.contour.polyline))}function ml(e,t){const n=gl(e),i=[];return n.forEach((e=>{const n=e.length,o=new Array(n);for(let i=0;i<n;i++)o[i]=t.worldToCanvas(e[i]);i.push(o)})),i}const{pointsAreWithinCloseContourProximity:vl}=s;function pl(e,t){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},{lineWidth:i,lineDash:o,color:a,fillColor:r,fillOpacity:s}=this.getAnnotationStyle({annotation:t,styleSpecifier:n}),{closed:l}=t.data.contour;return{color:a,width:i,lineDash:o,fillColor:r,fillOpacity:s,closePath:l}}function fl(e,t,n){e?.viewport?.getImageData()&&(n.data.contour.closed?this.renderClosedContour(e,t,n):n.data.isOpenUShapeContour?(function(e,t){t.data.openUShapeContourVectorToPeak||(t.data.openUShapeContourVectorToPeak=function(e,t){const{viewport:n}=e;return is(t.data.contour.polyline.map(n.worldToCanvas),n)}(e,t))}(e,n),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n))}function wl(e,t,n){if(n.parentAnnotationUID)return;const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=[n.data.contour.polyline.map((e=>i.worldToCanvas(e))),...ml(n,i)];dl(t,n.annotationUID,"1",a,o)}function Il(e,t,n){const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=n.data.contour.polyline.map((e=>i.worldToCanvas(e)));cl(t,n.annotationUID,"1",a,o);const r=n.data.handles.activeHandleIndex;if(!0===this.configuration.alwaysRenderOpenContourHandles?.enabled){const e=this.configuration.alwaysRenderOpenContourHandles.radius,i="0",s=[a[0],a[a.length-1]];0===r?s.shift():1===r&&s.pop(),ul(t,n.annotationUID,i,s,{color:o.color,handleRadius:e})}if(null!==r){const e="1",i=a[0===r?0:a.length-1];ul(t,n.annotationUID,e,[i],{color:o.color})}}function El(e,t,n){const{viewport:i}=e,{openUShapeContourVectorToPeak:o}=n.data,{polyline:a}=n.data.contour;if(this.renderOpenContour(e,t,n),!o)return;const r=i.worldToCanvas(a[0]),s=i.worldToCanvas(a[a.length-1]),l=[i.worldToCanvas(o[0]),i.worldToCanvas(o[1])],d=this._getRenderingOptions(e,n);cl(t,n.annotationUID,"first-to-last",[r,s],{color:d.color,width:d.width,closePath:!1,lineDash:"2,2"}),cl(t,n.annotationUID,"midpoint-to-open-contour",[l[0],l[1]],{color:d.color,width:d.width,closePath:!1,lineDash:"2,2"})}function Cl(e,t,n){const i=this._getRenderingOptions(e,n),{allowOpenContours:o}=this.configuration,{canvasPoints:a}=this.drawData;if(i.closePath=!1,cl(t,n.annotationUID,"1",a,i),o){const e=a[0],o=a[a.length-1];if(vl(e,o,this.configuration.closeContourProximity))cl(t,n.annotationUID,"2",[o,e],i);else{const o="0";ul(t,n.annotationUID,o,[e],{color:i.color,handleRadius:2})}}}function _l(e,t,n){const{viewport:i}=e,{fusedCanvasPoints:o}=this.editData;if(void 0===o)return void this.renderClosedContour(e,t,n);const a=[o,...ml(n,i)],r=this._getRenderingOptions(e,n);n.parentAnnotationUID&&r.fillOpacity&&(r.fillOpacity=0),dl(t,n.annotationUID,"preview-1",a,r)}function bl(e,t,n){const{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderOpenContour(e,t,n);const o=this._getRenderingOptions(e,n);cl(t,n.annotationUID,"preview-1",i,o)}function Tl(e,t,n){if(n.parentAnnotationUID)return;const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=n.data.contour.polyline.map((e=>i.worldToCanvas(e))),r=ml(n,i),s=a[0],l=[];for(let e=0;e<100;e++){const t=e/100*2*Math.PI,n=s[0]+6*Math.cos(t),i=s[1]+6*Math.sin(t);l.push([n,i])}const d=[[s[0]-12,s[1]],[s[0]+12,s[1]],[s[0],s[1]-12],[s[0],s[1]+12]];dl(t,n.annotationUID,"1-crosshair_v",[d[0],d[1]],o),dl(t,n.annotationUID,"1-crosshair_h",[d[2],d[3]],o);const c=[l,...r];dl(t,n.annotationUID,"1",c,o)}const Dl=function(e){e.renderContour=fl.bind(e),e.renderClosedContour=wl.bind(e),e.renderOpenContour=Il.bind(e),e.renderPointContourWithMarker=Tl.bind(e),e.renderOpenUShapedContour=El.bind(e),e.renderContourBeingDrawn=Cl.bind(e),e.renderClosedContourBeingEdited=_l.bind(e),e.renderOpenContourBeingEdited=bl.bind(e),e._getRenderingOptions=pl.bind(e)};function Sl(e){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");return t.setAttribute("x","0"),t.setAttribute("dy","1.2em"),t.textContent=e,t}function yl(e,t){let n=e.querySelector("rect.background");if(!t)return n&&e.removeChild(n),e.getBBox();n||(n=document.createElementNS("http://www.w3.org/2000/svg","rect"),n.setAttribute("class","background"),e.insertBefore(n,e.firstChild));const i=e.getBBox(),o={x:`${i.x}`,y:`${i.y}`,width:`${i.width}`,height:`${i.height}`,fill:t};return ll(o,n),i}const xl=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return function(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""],o=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;const{padding:r,color:s,fontFamily:l,fontSize:d,background:c}=a;let h;const[u,g]=[o[0]+r,o[1]+r],m=rl(t,"text",n),v=e.getSvgNode(m);if(v){const t=v.querySelector("text"),n=Array.from(t.children);for(let e=0;e<n.length;e++){const t=n[e],o=i[e]||"";t.textContent=o}if(i.length>n.length){for(let e=0;e<i.length-n.length;e++){const o=Sl(i[e+n.length]);t.appendChild(o)}v.appendChild(t),e.appendNode(v,m)}const o={transform:`translate(${u} ${g})`};ll({fill:s,"font-size":d,"font-family":l},t),ll(o,v),h=yl(v,c),e.setNodeTouched(m)}else{const t=document.createElementNS("http://www.w3.org/2000/svg","g");t.setAttribute("transform",`translate(${u} ${g})`);const n=function(e,t){const{color:n,fontFamily:i,fontSize:o}=t,a=document.createElementNS("http://www.w3.org/2000/svg","text"),r=`user-select: none; pointer-events: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0);${`filter:url(#shadow-${e.svgLayerElement.id});`}`;return a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("fill",n),a.setAttribute("font-family",i),a.setAttribute("font-size",o),a.setAttribute("style",r),a}(e,a);for(let e=0;e<i.length;e++){const t=Sl(i[e]);n.appendChild(t)}t.appendChild(n),e.appendNode(t,m),h=yl(t,c)}return Object.assign({},h,{x:u,y:g,height:h.height+r,width:h.width+r})}(e,t,n,i,o,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},a))};function Ml(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:s,width:l,lineWidth:d,lineDash:c,shadow:h}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0,shadow:void 0},a),u=d||l,g=rl(t,"line",n),m=e.getSvgNode(g),v=h?`filter:url(#shadow-${e.svgLayerElement.id});`:"",p={x1:`${i[0]}`,y1:`${i[1]}`,x2:`${o[0]}`,y2:`${o[1]}`,stroke:s,style:v,"stroke-width":u,"stroke-dasharray":c};if(m)ll(p,m),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),sl(p,t),e.appendNode(t,g)}}function Ol(e,t){let n=[0,0],i=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){const o=function(e,t){const[n,i]=e,[o,a]=t;return Math.sqrt(Math.pow(n-o,2)+Math.pow(i-a,2))}(t,e);o<i&&(i=o,n=[...e])})),n}const Pl=function(e,t,n,i,o,a,r){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};const l=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},s),d=xl(e,t,n,i,o,l);return function(e,t,n,i,o,a){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};const s=i.length>0?Ol(i,o):o,l=function(e){const{x:t,y:n,height:i,width:o}=e,a=o/2,r=i/2;return[[t+a,n],[t,n+r],[t+a,n+i],[t+o,n+r]]}(a);Ml(e,t,`link-${n}`,s,Ol(l,s),Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r))}(e,t,n,a,o,d,l),d};function Al(e){const t=function(e){const t=[e[0],e[1]].sort((function(e,t){return e[0]<t[0]?-1:1})),n=[e[0],e[1]].sort((function(e,t){return e[1]<t[1]?-1:1})),i=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:i}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function Rl(e,t){if(e instanceof ie.BaseVolumeViewport){const e=ie.utilities.getVolumeId(t),n=ie.cache.getVolume(e);return!!n?.scaling&&Object.keys(n.scaling).length>0}if(e instanceof ie.StackViewport){const{preScale:t}=e.getImageData()||{};return!!t?.scaled}return!1}class Ll{}ae(Ll,"run",void 0),ae(Ll,"getStatistics",void 0);const Nl=Ll;var Ul;const{PointsManager:kl}=ie.utilities;class Vl extends Nl{static statsInit(e){e.storePointData||(Vl.pointsInShape=null)}}function Wl(e){return 1===e.length?e[0]:e}Ul=Vl,ae(Vl,"max",[-1/0]),ae(Vl,"min",[1/0]),ae(Vl,"sum",[0]),ae(Vl,"count",0),ae(Vl,"runMean",[0]),ae(Vl,"m2",[0]),ae(Vl,"pointsInShape",kl.create3(1024)),ae(Vl,"statsCallback",(e=>{let{value:t,pointLPS:n=null}=e;Array.isArray(t)&&t.length>1&&1===Ul.max.length&&(Ul.max.push(Ul.max[0],Ul.max[0]),Ul.min.push(Ul.min[0],Ul.min[0]),Ul.sum.push(Ul.sum[0],Ul.sum[0]),Ul.runMean.push(0,0),Ul.m2.push(Ul.m2[0],Ul.m2[0])),Ul.pointsInShape?.push(n);const i=Array.isArray(t)?t:[t];Ul.count+=1,Ul.max.map(((e,t)=>{const n=i[t],o=n-Ul.runMean[t];Ul.sum[t]+=n,Ul.runMean[t]+=o/Ul.count;const a=n-Ul.runMean[t];Ul.m2[t]+=o*a,Ul.min[t]=Math.min(Ul.min[t],n),Ul.max[t]=Math.max(e,n)}))})),ae(Vl,"getStatistics",(e=>{const t=Ul.sum.map((e=>e/Ul.count)),n=Ul.m2.map((e=>Math.sqrt(e/Ul.count))),i=e?.unit||null,o={max:{name:"max",label:"Max Pixel",value:Wl(Ul.max),unit:i},min:{name:"min",label:"Min Pixel",value:Wl(Ul.min),unit:i},mean:{name:"mean",label:"Mean Pixel",value:Wl(t),unit:i},stdDev:{name:"stdDev",label:"Standard Deviation",value:Wl(n),unit:i},count:{name:"count",label:"Pixel Count",value:Ul.count,unit:null},pointsInShape:Ul.pointsInShape,array:[]};return o.array.push(o.max,o.mean,o.stdDev,o.stdDev,o.count),Ul.max=[-1/0],Ul.min=[1/0],Ul.sum=[0],Ul.m2=[0],Ul.runMean=[0],Ul.count=0,Ul.pointsInShape=kl.create3(1024),o}));const Bl=function(e,t){let n=0;for(let t=0;t<e.length-1;t++){const i=e[t],o=e[t+1];n+=Math.sqrt(Math.pow(o[0]-i[0],2)+Math.pow(o[1]-i[1],2))}if(t){const t=e[0],i=e[e.length-1];n+=Math.sqrt(Math.pow(i[0]-t[0],2)+Math.pow(i[1]-t[1],2))}return n};class Hl{constructor(e,t){ae(this,"supportedInteractionTypes",void 0),ae(this,"configuration",void 0),ae(this,"toolGroupId",void 0),ae(this,"mode",void 0);const n=ie.utilities.deepMerge(t,e),{configuration:i={},supportedInteractionTypes:o,toolGroupId:a}=n;i.strategies||(i.strategies={},i.defaultStrategy=void 0,i.activeStrategy=void 0,i.strategyOptions={}),this.toolGroupId=a,this.supportedInteractionTypes=o||[],this.configuration=Object.assign({},i),this.mode=Oe.Disabled}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){const{strategies:n,activeStrategy:i}=this.configuration;return n[i]?.call(this,e,t)}applyActiveStrategyCallback(e,t,n){const{strategies:i,activeStrategy:o}=this.configuration;if(!i[o])throw new Error(`applyActiveStrategyCallback: active strategy ${o} not found, check tool configuration or spellings`);return i[o][n]?.call(this,e,t)}setConfiguration(e){this.configuration=ie.utilities.deepMerge(this.configuration,e)}setActiveStrategy(e){this.setConfiguration({activeStrategy:e})}getTargetVolumeId(e){if(this.configuration.volumeId)return this.configuration.volumeId;const t=e.getActors();return t?t.find((e=>"vtkVolume"===e.actor.getClassName()))?.uid:void 0}getTargetIdImage(e,t){if(e.startsWith("imageId:")){const n=e.split("imageId:")[1],i=ie.utilities.imageIdToURI(n);let o=ie.utilities.getViewportsWithImageURI(i,t.id);if(!o||!o.length)return;if(o=o.filter((e=>e.getCurrentImageId()===n)),!o||!o.length)return;return o[0].getImageData()}if(e.startsWith("volumeId:")){const n=ie.utilities.getVolumeId(e),i=ie.utilities.getViewportsWithVolumeId(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}if(e.startsWith("videoId:")){const n=ie.utilities.imageIdToURI(e),i=ie.utilities.getViewportsWithImageURI(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){const t=e.getViewReferenceId?.();if(t)return t;if(e instanceof ie.BaseVolumeViewport)return`volumeId:${this.getTargetVolumeId(e)}`;throw new Error("getTargetId: viewport must have a getReferenceId method")}}ae(Hl,"toolName",void 0),Hl.toolName="BaseTool";const Fl=Hl,Gl=new class{constructor(){ae(this,"config",void 0),this._initializeConfig({color:"rgb(255, 255, 0)",colorHighlighted:"rgb(0, 255, 0)",colorSelected:"rgb(0, 220, 0)",colorLocked:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"",shadow:!0,textBoxVisibility:!0,textBoxFontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",textBoxFontSize:"14px",textBoxColor:"rgb(255, 255, 0)",textBoxColorHighlighted:"rgb(0, 255, 0)",textBoxColorSelected:"rgb(0, 255, 0)",textBoxColorLocked:"rgb(255, 255, 0)",textBoxBackground:"",textBoxLinkLineWidth:"1",textBoxLinkLineDash:"2,3",textBoxShadow:!0})}getAnnotationToolStyles(e){return this.config.annotations&&this.config.annotations[e]}getViewportToolStyles(e){return this.config.viewports&&this.config.viewports[e]}getToolGroupToolStyles(e){return this.config.toolGroups&&this.config.toolGroups[e]}getDefaultToolStyles(){return this.config.default}setAnnotationStyles(e,t){let n=this.config.annotations;n||(this.config={...this.config,annotations:{}},n=this.config.annotations),n[e]=t}setViewportToolStyles(e,t){let n=this.config.viewports;n||(this.config={...this.config,viewports:{}},n=this.config.viewports),n[e]=t}setToolGroupToolStyles(e,t){let n=this.config.toolGroups;n||(this.config={...this.config,toolGroups:{}},n=this.config.toolGroups),n[e]=t}setDefaultToolStyles(e){this.config.default=e}getStyleProperty(e,t){const{annotationUID:n,viewportId:i,toolGroupId:o,toolName:a}=t;return this._getToolStyle(e,n,i,o,a)}_getToolStyle(e,t,n,i,o){if(t){const n=this.getAnnotationToolStyles(t);if(n&&void 0!==n[e])return n[e]}if(n){const t=this.getViewportToolStyles(n);if(t){if(t[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(i){const t=this.getToolGroupToolStyles(i);if(t){if(t[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}const a=this.getDefaultToolStyles();return a[o]&&void 0!==a[o][e]?a[o][e]:a.global&&void 0!==a.global[e]?a.global[e]:void 0}_initializeConfig(e){const t={};for(const n in e)t[n]=e[n];this.config={default:{global:t}}}};function $l(e,t,n,i){const o=function(e,t,n){const i=[`${e}`];return t&&i.push(`${i[0]}${t}`),n&&i.push(`${i[i.length-1]}${n}`),i}(e,n,i);for(let e=o.length-1;e>=0;--e){const n=Gl.getStyleProperty(o[e],t);if(void 0!==n)return n}}var ql=function(e){return e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e.AutoGenerated="AutoGenerated",e}(ql||{});const zl=ql,jl=function(e){if(e){if(e.data&&e.highlighted)return zl.Highlighted;if(Ge(e.annotationUID))return zl.Selected;if(ue(e))return zl.Locked;if(e.data&&e.autoGenerated)return zl.AutoGenerated}return zl.Default};class Kl extends Fl{constructor(){super(...arguments),ae(this,"onImageSpacingCalibrated",(e=>{const{element:t,imageId:n}=e.detail,i=ie.utilities.imageIdToURI(n),o=at();o.getFramesOfReference().forEach((e=>{const n=o.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach((e=>{e.metadata?.referencedImageId&&ie.utilities.imageIdToURI(e.metadata.referencedImageId)===i&&(e.invalidated=!0,e.data.cachedStats={})})),Or(t))}))}))}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ie.getEnabledElement)(e),{viewport:i}=n;return dr(i,t)}getReferencedImageId(e,t,n,i){const o=this.getTargetId(e);let a=o.split(/^[a-zA-Z]+:/)[1];if(e instanceof ie.BaseVolumeViewport){const e=ie.utilities.getVolumeId(o),i=ie.cache.getVolume(e);a=ie.utilities.getClosestImageId(i,t,n)}return a}getStyle(e,t,n){return $l(e,t,jl(n),this.mode)}}ae(Kl,"toolName",void 0),Kl.toolName="AnnotationDisplayTool";const Yl=Kl;class Xl extends Yl{static createAnnotation(){let e={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.toolName},data:{text:"",handles:{points:new Array,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];for(const t of n)e=ie.utilities.deepMerge(e,t);return e}static createAnnotationForViewport(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return this.createAnnotation({metadata:e.getViewReference()},...n)}static createAndAddAnnotation(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];const o=this.createAnnotationForViewport(e,...n);mt(o,e.element),Le(o,e.element)}constructor(e,t){super(e,t),ae(this,"mouseMoveCallback",((e,t)=>{if(!t)return!1;const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(const e of t){if(ue(e)||!Je(e.annotationUID))continue;const{data:t}=e,i=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,o,6),s=r&&!e.highlighted,l=!r&&e.highlighted;s||l?(e.highlighted=!e.highlighted,a=!0):t.handles&&t.handles.activeHandleIndex!==i&&(a=!0)}return a})),e.configuration?.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),e.configuration?.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{isCanvasAnnotation:s}=r,{points:l,textBox:d}=r.handles;if(d){const{worldBoundingBox:e}=d;if(e){const t={topLeft:a.worldToCanvas(e.topLeft),topRight:a.worldToCanvas(e.topRight),bottomLeft:a.worldToCanvas(e.bottomLeft),bottomRight:a.worldToCanvas(e.bottomRight)};if(n[0]>=t.topLeft[0]&&n[0]<=t.bottomRight[0]&&n[1]>=t.topLeft[1]&&n[1]<=t.bottomRight[1])return r.handles.activeHandleIndex=null,d}}for(let e=0;e<l?.length;e++){const t=l[e],o=s?t.slice(0,2):a.worldToCanvas(t);if(!0==Oo.vec2.distance(n,o)<i)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null}getLinkedTextBoxStyle(e,t){return{visibility:this.getStyle("textBoxVisibility",e,t),fontFamily:this.getStyle("textBoxFontFamily",e,t),fontSize:this.getStyle("textBoxFontSize",e,t),color:this.getStyle("textBoxColor",e,t),shadow:this.getStyle("textBoxShadow",e,t),background:this.getStyle("textBoxBackground",e,t),lineWidth:this.getStyle("textBoxLinkLineWidth",e,t),lineDash:this.getStyle("textBoxLinkLineDash",e,t)}}isSuvScaled(e,t,n){if(e instanceof ie.BaseVolumeViewport){const e=ie.utilities.getVolumeId(t),n=ie.cache.getVolume(e);return void 0!==n?.scaling?.PT}const i=n&&ie.metaData.get("scalingModule",n);return"number"==typeof i?.suvbw}getAnnotationStyle(e){const{annotation:t,styleSpecifier:n}=e,i=e=>this.getStyle(e,n,t),{annotationUID:o}=t,a=Je(o),r=ue(t),s=i("lineWidth"),l=i("lineDash"),d=i("color");return{visibility:a,locked:r,color:d,lineWidth:s,lineDash:l,lineOpacity:1,fillColor:d,fillOpacity:0,shadow:i("shadow"),textbox:this.getLinkedTextBoxStyle(n,t)}}_imagePointNearToolOrHandle(e,t,n,i){return!!this.getHandleNearImagePoint(e,t,n,i)||(!!this.isPointNearTool(e,t,n,i,"mouse")||void 0)}}ae(Xl,"toolName",void 0),Xl.toolName="AnnotationTool";const Jl=Xl;class Zl extends Jl{constructor(e,t){super(e,t)}renderAnnotation(e,t){let n=!1;const{viewport:i}=e,{element:o}=i;if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let i=0;i<a.length;i++){const o=a[i];s.annotationUID=o.annotationUID;const l=this.getAnnotationStyle({annotation:o,styleSpecifier:s});if(!l.visibility)continue;const d=this.renderAnnotationInstance({enabledElement:e,targetId:r,annotation:o,annotationStyle:l,svgDrawingHelper:t});n||=d,o.invalidated=!1}return n}createAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,{world:o}=n,a=(0,ie.getEnabledElement)(i),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l,viewUp:d,position:c}=s,h=this.getReferencedImageId(r,o,l,d),u=r.getViewReference({points:[o]});return{highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),...u,referencedImageId:h,viewUp:d,cameraPosition:c},data:{handles:{points:[],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{polyline:[],closed:!1}},interpolationUID:"",autoGenerated:!1}}addAnnotation(e,t){return mt(e,t)}cancelAnnotation(e){}moveAnnotation(e,t){const{points:n}=e.data.handles;for(let e=0,i=n.length;e<i;e++){const i=n[e];i[0]+=t[0],i[1]+=t[1],i[2]+=t[2]}e.invalidated=!0,gt(e).forEach((e=>this.moveAnnotation(e,t)))}updateContourPolyline(e,t,n){const i=this.configuration?.decimate||{};Os(e,t,n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}})}getPolylinePoints(e){return e.data.contour?.polyline??e.data.polyline}renderAnnotationInstance(e){const{enabledElement:t,annotationStyle:n,svgDrawingHelper:i}=e,o=e.annotation;if(o.parentAnnotationUID)return;const{annotationUID:a}=o,{viewport:r}=t,{worldToCanvas:s}=r,l=this.getPolylinePoints(o).map((e=>s(e))),{lineWidth:d,lineDash:c,color:h,fillColor:u,fillOpacity:g}=n;return dl(i,a,"contourPolyline",[l,...ml(o,r)],{color:h,lineDash:c,lineWidth:Math.max(.1,d),fillColor:u,fillOpacity:g}),!0}}const Ql="PlanarFreehandContourSegmentationTool";function ed(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const{viewport:n,sliceData:i,annotation:o}=e,a=new Map,{toolName:r,originalToolName:s}=o.metadata,l=s||r,d=(lt(l,n.element)||[]).filter((e=>!e.metadata.originalToolName||e.metadata.originalToolName===l));if(l!==Ql){const e=lt(Ql,n.element);e?.length&&e.forEach((e=>{const{metadata:t}=e;t.originalToolName===l&&t.originalToolName!==t.toolName&&d.push(e)}))}if(!d?.length)return a;for(let e=0;e<i.numberOfSlices;e++){const n=d.filter((t=>t.metadata.sliceIndex===e));if(!n?.length)continue;const i=n.filter((e=>t.every((t=>{const n=t.parentKey?t.parentKey(e):e,i=n?.[t.key];return Array.isArray(i)?i.every(((e,n)=>e===t.value[n])):i===t.value}))));i.length&&a.set(e,i)}return a}function td(e,t,n){const i=ie.utilities.deepMerge({data:{},metadata:{}},n);return Object.assign(i,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(i.data,{handles:{points:t.points||t||[],interpolationSources:t.sources,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{...n.data.contour,polyline:e}}),i}function nd(e,t){const n=e.get(t);return!n?.length||1===n.length&&n[0].autoGenerated}function id(e,t,n){const[i]=e;t[i]||={pair:e,list:[]},t[i].list.push(n)}function od(e,t,n){const i=[];let o=!0;for(let a=e-1;a>=t[0];a--){const e=n.get(a);if(e?.length){if(e[0].autoGenerated)continue;e.length>1&&(o=!1),i.push(a);break}}if(o&&i.length){for(let a=e+1;a<=t[1];a++){const e=n.get(a);if(e?.length){if(e[0].autoGenerated)continue;e.length>1&&(o=!1),i.push(a);break}}if(o&&!(i.length<2))return i}}const{PointsManager:ad}=ie.utilities;function rd(e,t,n,i,o){n<t&&(n+=o);const a=n-t,r=Math.ceil(a/i);if(r<=0)return e[e.length-1]!==n&&e.push(sd(n,o)),n;for(let n=1;n<=r;n++){const i=sd(t+n*a/r,o);e.push(i)}return e[e.length-1]}function sd(e,t){return(Math.round(e)+t)%t}const{isEqual:ld}=ie.utilities;function dd(e){const{metadata:t}=e;return(0,ie.getEnabledElements)().filter((e=>{if(e.FrameOfReferenceUID===t.FrameOfReferenceUID){const n=e.viewport,{viewPlaneNormal:i,viewUp:o}=n.getCamera();return ld(i,t.viewPlaneNormal)&&(!t.viewUp||ld(o,t.viewUp))}})).map((e=>e.viewport))}function cd(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function hd(e){return!!e.data?.segmentation}function ud(e,t){const{segmentation:n}=e.data,{segmentation:i}=t.data;return n.segmentationId===i.segmentationId&&n.segmentIndex===i.segmentIndex}function gd(e){if(!e.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,i=Yi(t),{annotationUIDsMap:o}=i?.representationData.CONTOUR||{},a=o?.get(n);a&&(a.delete(e.annotationUID),a.size||o.delete(n))}function md(e){const t=e.toolName;if(xe.tools[t],!t)throw new Error(`No Tool Found for the ToolClass ${e.name}`);xe.tools[t]={toolClass:e}}function vd(e){const t=e.toolName;if(!t)throw new Error(`No tool found for: ${e.name}`);if(void 0===!xe.tools[t])throw new Error(`${t} cannot be removed because it has not been added`);delete xe.tools[t]}const pd="PlanarFreehandContourSegmentationTool";function fd(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n="PlanarFreehandContourSegmentationTool",i=ur(e.id,e.renderingEngineId);let o;return i.hasTool(n)?i.getToolOptions(n)||(o=`Tool ${n} must be in active/passive state`):o=`Tool ${n} not added to ${i.id} toolGroup`,o&&!t&&console.warn(o),!o}function wd(e,t){const n=e.length,i=new Array(n);for(let o=0;o<n;o++)i[o]=t.worldToCanvas(e[o]);return i}function Id(e,t,n){const{windingDirection:i}=t.data.contour,{windingDirection:o}=n.data.contour;ht(t,n),gd(n);const{contour:a}=n.data;Os(n,{points:wd(a.polyline,e),closed:a.closed},e);const{element:r}=e,s=new Set([pd,t.metadata.toolName,n.metadata.toolName]);for(const e of s.values()){const t=Ir(r,e);Ar(t)}}const{PointsManager:Ed}=ie.utilities;function Cd(e,t,n,i){const o=n.get(t[0])[0],a=n.get(t[1])[0],r=Od(o.data.contour.polyline),s=Od(a.data.contour.polyline),{c1Interp:l,c2Interp:d}=function(e,t){const n=Md(e),i=Md(t),o=Math.max(Math.ceil(n[n.length-1]/.2),Math.ceil(i[i.length-1]/.2)),a=xd(n),r=xd(i),s=o+t.x.length,l=o+e.x.length,d=yd(s,a),c=yd(l,r),h=Sd(s-2,e.x.length),u=Sd(l-2,t.x.length),g=Dd(d,h),m=Dd(c,u),v=Td(e,g),p=Td(t,m);return function(e,t){const n=e.x.length,i={startingNode:0,totalSquaredXYLengths:1/0};for(let o=0;o<n;o++){let a=o,r=0;for(let i=0;i<n;i++)r+=(e.x[a]-t.x[i])**2+(e.y[a]-t.y[i])**2+(e.z[a]-t.z[i])**2,a++,a===n&&(a=0);r<i.totalSquaredXYLengths&&(i.totalSquaredXYLengths=r,i.startingNode=o)}const o=i.startingNode;bd(e.x,o),bd(e.y,o),bd(e.z,o),bd(e.I,o)}(v,p),function(e,t){const n={x:[],y:[],z:[],I:[]},i={x:[],y:[],z:[],I:[]};for(let o=0;o<e.x.length;o++)(e.I[o]||t.I[o])&&(n.x.push(e.x[o]),n.y.push(e.y[o]),n.z.push(e.z[o]),n.I.push(e.I[o]),i.x.push(t.x[o]),i.y.push(t.y[o]),i.z.push(t.z[o]),i.I.push(t.I[o]));return{c1Interp:n,c2Interp:i}}(v,p)}(r,s);l.kIndex=t[0],d.kIndex=t[1],e.forEach((function(e){!function(e,t,n,i,o,a,r){const[s,l]=i,d=(n-s)/(l-s),c=o.get(s)[0],h=o.get(l)[0],u=function(e,t,n,i){const o=i?e.I:t.I,a=Ed.fromXYZ(e),r=Ed.fromXYZ(t),{length:s}=a,l=Ed.create3(s),d=Oo.vec3.create(),c=Oo.vec3.create(),h=Ed.create3(s);h.kIndex=e.kIndex;const u=Ed.create3(s);u.kIndex=t.kIndex;for(let t=0;t<e.x.length;t++)if(o[t]){const e=a.getPoint(t),i=r.getPoint(t);h.push(e),u.push(i),Oo.vec3.sub(d,i,e),l.push(Oo.vec3.scaleAndAdd(c,e,d,n))}return l.sources=[h,u],l}(e,t,d,a),g=d>.5?h:c,m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12;const n=ad.create3(t);n.sources=[];const{sources:i}=n,{length:o,sources:a=[]}=e;if(o<15)return e.subselect(t);const r=Math.floor(Math.max(2*o/t,10));a.forEach((()=>i.push(ad.create3(t))));const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const{length:n}=e,i=Oo.vec3.create(),o=Oo.vec3.create(),a=new Float32Array(n);for(let r=0;r<n;r++){const s=e.getPoint(r),l=e.getPoint(r-t),d=e.getPoint((r+t)%n);Oo.vec3.sub(i,s,l),Oo.vec3.sub(o,d,s);const c=Oo.vec3.dot(i,o)/(Oo.vec3.len(i)*Oo.vec3.len(o));a[r]=c}return a}(e,5),l=function(e,t){const{max:n,deviation:i}=function(e){const{length:t}=e;let n=0,i=1/0,o=-1/0,a=0;for(let a=0;a<t;a++){const t=e[a];n+=t,i=Math.min(i,t),o=Math.max(o,t)}const r=n/t;for(let n=0;n<t;n++){const t=e[n]-r;a+=t*t}return{mean:r,max:o,min:i,sumSq:a,deviation:Math.sqrt(a/t)}}(e),{length:o}=e;if(i<.01||o<3*t)return[];const a=[];let r,s=null,l=0;for(let t=0;t<o;t++){const o=e[t];o<n-i?s?(s[2]=t,o<r&&(r=o,l=t),s[1]=l):(r=o,l=t,s=[t,t,t]):s&&(a.push(s),s=null)}return s&&(0===a[0][0]?a[0][0]=s[0]:(s[1]=l,s[2]=o-1,a.push(s))),a}(s,t),d=[];if(l?.length>2){let e=-1;const t=r/3;l.forEach((n=>{const[i,,a]=n,s=Math.ceil((i+a)/2);a-e<t||(s-i>2*t?(rd(d,e,i,r,o),e=rd(d,i,s,r,o)):e=rd(d,e,s,r,o),a-e>t&&(e=rd(d,e,a,r,o)))}));const n=d[0];sd(n+o-e,o)>2*t&&rd(d,e,n-t,r,o)}else{const e=Math.floor(o/t);rd(d,-1,o-e,e,o)}return d.forEach((t=>{const o=e.getPointArray(t);n.push(o),a.forEach(((e,n)=>i[n].push(e.getPoint(t))))})),n}(u);o.has(n)?function(e,t,n,i,o){const a=_d(i,n,o),r=td(e.points,t,a);Object.assign(a,{metadata:r.metadata,data:r.data})}(u,m,n,g,r):function(e,t,n,i,o){const a=e.points,{viewport:r}=o,s=td(a,t,i),l=r.getViewReference({sliceIndex:n});if(!l)throw new Error(`Can't find slice ${n}`);Object.assign(s.metadata,l),mt(s,r.element),i.onInterpolationComplete?.(s,i);const{parentAnnotationUID:d}=i;d&&Id(r,_d(be(d),n,o),s)}(u,m,n,g,r)}(l,d,e,t,n,r.x.length>s.x.length,i)}))}function _d(e,t,n){const{viewport:i}=n,o=lt(e.metadata.toolName,i.element);for(let n=0;n<o.length;n++){const i=o[n];if(i.interpolationUID===e.interpolationUID&&i.metadata.sliceIndex===t)return i}}function bd(e,t){t-=e.length*Math.floor(t/e.length);const n=e.splice(0,t);return e.push(...n),e}function Td(e,t){const n={x:[],y:[],z:[],I:[]};for(let i=0;i<e.x.length-1;i++){n.x.push(e.x[i]),n.y.push(e.y[i]),n.z.push(e.z[i]),n.I.push(!0);const o=(e.x[i+1]-e.x[i])/(t[i]+1),a=(e.y[i+1]-e.y[i])/(t[i]+1),r=(e.z[i+1]-e.z[i])/(t[i]+1);for(let e=0;e<t[i]-1;e++)n.x.push(n.x[n.x.length-1]+o),n.y.push(n.y[n.y.length-1]+a),n.z.push(n.z[n.z.length-1]+r),n.I.push(!1)}return n}function Dd(e,t){const n=[];for(let t=0;t<e.length;++t)n[t]=t;n.sort((function(t,n){return e[t]<e[n]?-1:1}));const i=[];for(let e=0;e<t.length;e++)i.push(t[n[e]]);const o=i.reduce((function(e,t,n){return t&&e.push(n),e}),[]),a=[];for(let e=0;e<o.length-1;e++)a.push(o[e+1]-o[e]);return a}function Sd(e,t){const n=new Array(e+t);return n.fill(!1,0,e),n.fill(!0,e,e+t),n}function yd(e,t){const n=1/(e-1),i=[n];for(let t=1;t<e-2;t++)i.push(i[i.length-1]+n);return i.concat(t)}function xd(e){const t=[];for(let n=0;n<e.length;n++)t.push(e[n]/e[e.length-1]);return t}function Md(e){const t=[0];for(let n=1;n<e.x.length;n++){const i=Math.sqrt((e.x[n]-e.x[n-1])**2+(e.y[n]-e.y[n-1])**2+(e.z[n]-e.z[n-1])**2);t.push(t[n-1]+i)}return t}function Od(e){const t={x:[],y:[],z:[]};for(let n=0;n<e.length;n++)t.x[n]=e[n][0],t.y[n]=e[n][1],t.z[n]=e[n][2];return t.x.push(t.x[0]),t.y.push(t.y[0]),t.z.push(t.z[0]),t}const Pd=function(e){if(!e.annotation)return;const{isInterpolationUpdate:t,annotation:n}=e;queueMicrotask((()=>{try{t&&(n.isInterpolationUpdate=!0,n.autoGenerated=!1),function(e){const{annotation:t}=e;!function(e){const{parentAnnotationUID:t,annotationUID:n}=e;if(!t)return e.interpolationUID;const i=be(t),{interpolationUID:o}=i,a=i.childAnnotationUIDs.indexOf(n);e.interpolationUID=`${o}-${a}`,e.interpolationUID}(t);const{interpolationData:n,interpolationList:i}=function(e,t){const n=ed(t,[{key:"interpolationUID",value:t.interpolationUID}]),i=function(e){let t=1/0,n=-1/0,i=!1;for(const[o,a]of e.entries())a.length&&(t=Math.min(o,t),n=Math.max(o,n),i=!0);if(i)return[t,n]}(n);if(!i)return void console.warn("No annotations found to interpolate",n);const o=function(e,t){for(const[n,i]of e)for(let e=0;e<i.length;e++)if(i[e].annotationUID===t)return n}(n,e.annotationUID),a=[];for(let e=i[0]+1;e<i[1];e++)if(nd(n,e)){const t=od(e,i,n);t?.[0]!==o&&t?.[1]!==o||id(t,a,e)}return{interpolationData:n,interpolationList:a}}(t,e)||{};if(!n||!i)return;const o={toolName:t.metadata.toolName,toolType:t.metadata.toolName,viewport:e.viewport};for(let e=0;e<i.length;e++)i[e]&&Cd(i[e].list,i[e].pair,n,o);const{id:a,renderingEngineId:r,element:s}=e.viewport,l={annotation:t,element:s,viewportId:a,renderingEngineId:r};i.length&&(0,ie.triggerEvent)(e.viewport.element,se.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,l)}(e)}finally{t&&(n.autoGenerated=!0)}}))};function Ad(e){const{annotation:t}=e,n=ed(e,[{key:"interpolationUID",value:e.interpolationUID}]),i=t.metadata.sliceIndex;let o=-1,a=e.sliceData.numberOfSlices;for(const[e,t]of n.entries()){if(e===i)continue;const n=t.find((e=>!e.autoGenerated));n&&(e<i?o=Math.max(e,o):a=Math.min(e,a))}const r=[];for(const[e,t]of n.entries())e<=o||e>=a||e===i||t.forEach((e=>{e.autoGenerated&&(pt(e.annotationUID),r.push(e))}));if(r.length){const t={annotations:r,element:e.viewport.element,viewportId:e.viewport.id,renderingEngineId:e.viewport.getRenderingEngine().id};(0,ie.triggerEvent)(e.viewport.element,se.INTERPOLATED_ANNOTATIONS_REMOVED,t)}if(o>=0&&a<e.sliceData.numberOfSlices){const t=n.get(a)[0],i={viewport:e.viewport,sliceData:{numberOfSlices:e.sliceData.numberOfSlices,imageIndex:t.metadata.sliceIndex},annotation:t,interpolationUID:t.interpolationUID};Pd(i)}}function Rd(e){const t=dd(e);return t.length?t[0]:void 0}var Ld;const{uuidv4:Nd}=ie.utilities,Ud=[De.HandlesUpdated,De.InterpolationUpdated];class kd{static addTool(e){this.toolNames.includes(e)||this.toolNames.push(e)}static acceptAutoGenerated(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{toolNames:n,segmentationId:i,segmentIndex:o,sliceIndex:a}=t;for(const t of n||kd.toolNames){const n=lt(t,e);if(n?.length)for(const e of n){const{interpolationUID:t,data:n,autoGenerated:r,metadata:s}=e;t&&(e.interpolationCompleted=!0),r&&(o&&o!==n.segmentation.segmentIndex||void 0!==a&&s&&a!==s.sliceIndex||i&&i!==n.segmentation.segmentationId||(Lo(e),e.autoGenerated=!1))}}}}function Vd(e){return{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getCurrentImageIdIndex()}}Ld=kd,ae(kd,"toolNames",[]),ae(kd,"handleAnnotationCompleted",(e=>{const t=e.detail.annotation;if(!t?.metadata)return;const{toolName:n,originalToolName:i}=t.metadata;if(!Ld.toolNames.includes(n)&&!Ld.toolNames.includes(i))return;const o=Rd(t);if(!o)return void console.warn("Unable to find viewport for",t);const a={viewport:o,sliceData:Vd(o),annotation:t,interpolationUID:t.interpolationUID},r=!!t.interpolationUID;if(t.autoGenerated=!1,r)return Ad(a),void Pd(a);const s=[{key:"segmentIndex",value:t.data.segmentation.segmentIndex,parentKey:e=>e.data.segmentation},{key:"viewPlaneNormal",value:t.metadata.viewPlaneNormal,parentKey:e=>e.metadata},{key:"viewUp",value:t.metadata.viewUp,parentKey:e=>e.metadata}];let l=function(e,t){const n=ed(e,t),i=[];if(!n?.size)return i;for(const e of n.values())e.forEach((e=>{i.push(e)}));return i}(a,s);const{sliceIndex:d}=t.metadata,c=new Set;l.forEach((e=>{if(e.interpolationCompleted||e.metadata.sliceIndex===d){const{interpolationUID:t}=e;c.add(t)}})),l=l.filter((e=>!c.has(e.interpolationUID))),t.interpolationUID=l[0]?.interpolationUID||Nd(),a.interpolationUID=t.interpolationUID,Pd(a)})),ae(kd,"handleAnnotationUpdate",(e=>{const t=e.detail.annotation,{changeType:n=De.HandlesUpdated}=e.detail;if(!t?.metadata)return;const{toolName:i,originalToolName:o}=t.metadata;if(!Ld.toolNames.includes(i)&&!Ld.toolNames.includes(o)||!Ud.includes(n))return;const a=Rd(t);if(!a)return void console.warn("Unable to find matching viewport for annotation interpolation",t);t.autoGenerated&&(Lo(t),t.autoGenerated=!1);const r={viewport:a,sliceData:Vd(a),annotation:t,interpolationUID:t.interpolationUID,isInterpolationUpdate:n===De.InterpolationUpdated};Pd(r)})),ae(kd,"handleAnnotationDelete",(e=>{const t=e.detail.annotation;if(!t?.metadata)return;const{toolName:n}=t.metadata;if(!Ld.toolNames.includes(n)||t.autoGenerated)return;const i=Rd(t);if(!i)return void console.warn("No viewport, can't delete interpolated results",t);const o={viewport:i,sliceData:Vd(i),annotation:t,interpolationUID:t.interpolationUID};t.autoGenerated=!1,Ad(o)}));const Wd=function(e){return xe.toolGroups.find((t=>t.id===e))};function Bd(e){e.forEach((e=>{const t=Wd(e);t?t.getViewportsInfo().forEach((e=>{const{renderingEngineId:t,viewportId:n}=e,i=(0,ie.getRenderingEngine)(t);if(!i)return void console.warn(`RenderingEngine not available for ${t}`);const o=i.getViewport(n);Or(o.element)})):console.warn(`ToolGroup not available for ${e}`)}))}const Hd=Bd;function Fd(){const e=Di.getState();return Object.values(e.representations)}function Gd(e){return Fd().filter((t=>t.segmentationId===e))}function $d(e){return Di.getActiveSegmentationRepresentation(e)}function qd(e){const t=Yi(e);if(t)return t.activeSegmentIndex}function zd(e,t){const n=Yi(e);if(!n)throw new Error(`No segmentation state found for ${e}`);const{segmentsLocked:i}=n;return i.has(t)}function jd(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=Yi(e);if(!i)throw new Error(`No segmentation state found for ${e}`);const{segmentsLocked:o}=i;n?o.add(t):o.delete(t),io(e)}function Kd(e){const t=Yi(e);if(!t)throw new Error(`No segmentation state found for ${e}`);const{segmentsLocked:n}=t;return Array.from(n)}class Yd extends Zl{constructor(e,t){super(e,t),this.configuration.interpolation?.enabled&&kd.addTool(this.getToolName())}isContourSegmentationTool(){return!0}createAnnotation(e){const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n);if(!i)return;const{viewport:o}=i,a=super.createAnnotation(e);if(!this.isContourSegmentationTool())return a;const r=$d(o.id);if(!r)throw new Error("No active segmentation detected, create one before using scissors tool");const{type:s}=r;if(s!==ri.Contour)throw new Error("A contour segmentation must be active");const{segmentationId:l}=r,d=qd(l);return ie.utilities.deepMerge(a,{data:{segmentation:{segmentationId:l,segmentIndex:d}}})}addAnnotation(e,t){const n=super.addAnnotation(e,t);return this.isContourSegmentationTool()&&Lo(e),n}cancelAnnotation(e){this.isContourSegmentationTool()&&gd(e),super.cancelAnnotation(e)}getAnnotationStyle(e){const t=super.getAnnotationStyle(e);if(!this.isContourSegmentationTool())return t;const n=this._getContourSegmentationStyle(e);return ie.utilities.deepMerge(t,n)}renderAnnotationInstance(e){const{annotation:t}=e,{invalidated:n}=t,i=super.renderAnnotationInstance(e);if(n&&this.isContourSegmentationTool()){const{segmentationId:e}=t.data.segmentation;Ci(e),Bd(To(e).map((e=>ur(e).id)))}return i}_getContourSegmentationStyle(e){const t=e.annotation,{segmentationId:n,segmentIndex:i}=t.data.segmentation,o=Yi(n),a=Gd(n);if(!a?.length)return{};const r=a.map((e=>e.segmentationRepresentationUID));let s;s=a.length>1?xi(e.styleSpecifier.viewportId).find((e=>e.segmentationId===n&&r.includes(e.segmentationRepresentationUID))):a[0];const{segmentationRepresentationUID:l}=s,{autoGenerated:d}=t,c=Kd(n).includes(i),h=wo(l,i),u=e.styleSpecifier.viewportId,g=ko(u,l),m=Yo(),v=Qo(l),p=oa(l,i),f=Fo(u,l,i),w=$d(u).segmentationRepresentationUID===l,I=Object.assign({},m?.representations?.CONTOUR??{},v?.CONTOUR??{},p?.CONTOUR??{});let E,C=1,_=1,b=0;d?(C=I.outlineWidthAutoGenerated??C,E=I.outlineDashAutoGenerated??E,_=I.outlineOpacity??_,b=I.fillAlphaAutoGenerated??b):w?(C=I.outlineWidthActive??C,E=I.outlineDashActive??E,_=I.outlineOpacity??_,b=I.fillAlpha??b):(C=I.outlineWidthInactive??C,E=I.outlineDashInactive??E,_=I.outlineOpacityInactive??_,b=I.fillAlphaInactive??b),o.activeSegmentIndex===i&&(C+=I.activeSegmentOutlineWidthDelta),C=I.renderOutline?C:0,b=I.renderFill?b:0;const T=`rgba(${h[0]}, ${h[1]}, ${h[2]}, ${_})`;return{color:T,fillColor:`rgb(${h[0]}, ${h[1]}, ${h[2]})`,lineWidth:C,fillOpacity:b,lineDash:E,textbox:{color:T},visibility:g&&f,locked:c}}}function Xd(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";const n=ie.metaData.get("generalSeriesModule",e);if("PT"===n?.modality){const t=ie.metaData.get("petSeriesModule",e);return t?.units||"unitless"}return"unknown"}(t,n):""}const{pointCanProjectOnLine:Jd}=s,{EPSILON:Zd}=ie.CONSTANTS,Qd=1-Zd;class ec extends Yd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:ts.Shift,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,makeClockWise:!0,subPixelResolution:4,smoothing:{smoothOnAdd:!1,smoothOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},interpolation:{enabled:!1,onInterpolationComplete:null},decimate:{enabled:!1,epsilon:.1},displayOnePointAsCrosshairs:!1,calculateStats:!0,getTextLines:tc,statsCalculator:Vl}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"commonData",void 0),ae(this,"isDrawing",!1),ae(this,"isEditingClosed",!1),ae(this,"isEditingOpen",!1),ae(this,"activateDraw",void 0),ae(this,"activateClosedContourEdit",void 0),ae(this,"activateOpenContourEdit",void 0),ae(this,"activateOpenContourEndEdit",void 0),ae(this,"cancelDrawing",void 0),ae(this,"cancelClosedContourEdit",void 0),ae(this,"cancelOpenContourEdit",void 0),ae(this,"renderContour",void 0),ae(this,"renderContourBeingDrawn",void 0),ae(this,"renderClosedContourBeingEdited",void 0),ae(this,"renderOpenContourBeingEdited",void 0),ae(this,"renderPointContourWithMarker",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,i=this.createAnnotation(e);this.addAnnotation(i,n);const o=Ir(n,this.getToolName());return this.activateDraw(e,i,o),e.preventDefault(),Ar(o),i})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=Ir(o,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n,o=Ir(i,this.getToolName());t.data.contour.closed?this.activateClosedContourEdit(e,t,o):this.activateOpenContourEdit(e,t,o),e.preventDefault()})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{polyline:r}=t.data.contour;let s=a.worldToCanvas(r[0]);for(let e=1;e<r.length;e++){const t=s,o=a.worldToCanvas(r[e]);if(Jd(n,t,o,i))return!0;s=o}if(!t.data.contour.closed)return!1;const l=a.worldToCanvas(r[0]),d=a.worldToCanvas(r[r.length-1]);return Jd(n,l,d,i)})),ae(this,"cancel",(e=>{const t=this.isDrawing,n=this.isEditingOpen,i=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):i&&this.cancelClosedContourEdit(e)})),ae(this,"_calculateCachedStats",((e,t,n,i)=>{const{data:o}=e,{cachedStats:a}=o,{polyline:r,closed:s}=o.contour,l=Object.keys(a);for(let i=0;i<l.length;i++){const d=l[i],c=this.getTargetIdImage(d,n);if(!c)continue;const{imageData:h,metadata:u}=c,g=r.map((e=>t.worldToCanvas(e))),m={isPreScaled:Rl(t,d),isSuvScaled:this.isSuvScaled(t,d,e.metadata.referencedImageId)},v=Xd(u.Modality,e.metadata.referencedImageId,m),p=va(c,(()=>{const e=o.contour.polyline,n=e.length,i=new Array(n);for(let o=0;o<n;o++)i[o]=t.worldToCanvas(e[o]);const{maxX:a,maxY:r,minX:s,minY:l}=wa(i),d=t.canvasToWorld([s,l]),c=ie.utilities.transformWorldToIndex(h,d),u=t.canvasToWorld([a,r]);return[c,ie.utilities.transformWorldToIndex(h,u)]}));s?this.updateClosedCachedStats({targetId:d,viewport:t,canvasCoordinates:g,points:r,imageData:h,metadata:u,cachedStats:a,pixelValueUnits:v,calibratedScale:p}):this.updateOpenCachedStats({metadata:u,canvasCoordinates:g,targetId:d,cachedStats:a,pixelValueUnits:v,calibratedScale:p})}return Le(e,i.viewport.element,De.StatsUpdated),e.invalidated=!1,a})),ae(this,"_renderStats",((e,t,n,i)=>{const{data:o}=e,a=this.getTargetId(t),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},s=this.getLinkedTextBoxStyle(r,e);if(!s.visibility)return;const l=this.configuration.getTextLines(o,a);if(!l||0===l.length)return;const d=o.contour.polyline.map((e=>t.worldToCanvas(e)));if(!o.handles.textBox.hasMoved){const e=Al(d);o.handles.textBox.worldPosition=t.canvasToWorld(e)}const c=t.worldToCanvas(o.handles.textBox.worldPosition),h=Pl(i,e.annotationUID??"","1",l,c,d,{},s),{x:u,y:g,width:m,height:v}=h;o.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([u,g]),topRight:t.canvasToWorld([u+m,g]),bottomLeft:t.canvasToWorld([u,g+v]),bottomRight:t.canvasToWorld([u+m,g+v])}})),Es(this),Ms(this),Fs(this),nl(this),al(this),Dl(this),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ie.getEnabledElement)(e),{viewport:i}=n;let o;if(i instanceof ie.VolumeViewport){const e=i.getCamera(),{spacingInNormalDirection:n}=ie.utilities.getTargetVolumeAndSpacingInNormalDir(i,e);o=this.filterAnnotationsWithinSlice(t,e,n)}else o=dr(i,t);return o}filterAnnotationsWithinSlice(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{const t=e.metadata.viewPlaneNormal,n=Math.abs(Oo.vec3.dot(i,t))>Qd;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.contour.polyline[0];if(!e.isVisible)continue;const n=Oo.vec3.create();Oo.vec3.sub(n,r,t);const o=Oo.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}isContourSegmentationTool(){return!1}createAnnotation(e){const t=e.detail.currentPoints.world,n=super.createAnnotation(e);return ie.utilities.deepMerge(n,{data:{contour:{polyline:[[...t]]},label:"",cachedStats:{}},onInterpolationComplete:e=>{e.data.handles.points.length=0}})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){const{enabledElement:t,targetId:n,svgDrawingHelper:i}=e,o=e.annotation;let a=!1;const{viewport:r,renderingEngine:s}=t,l=this.isDrawing,d=this.isEditingOpen,c=this.isEditingClosed;if(l||d||c){const e=this.commonData.annotation.annotationUID;if(o.annotationUID===e)if(l)this.renderContourBeingDrawn(t,i,o);else if(c)this.renderClosedContourBeingEdited(t,i,o);else{if(!d)throw new Error(`Unknown ${this.getToolName()} annotation rendering state`);this.renderOpenContourBeingEdited(t,i,o)}else this.configuration.displayOnePointAsCrosshairs&&1===o.data.contour.polyline.length?this.renderPointContourWithMarker(t,i,o):this.renderContour(t,i,o);a=!0}else this.configuration.displayOnePointAsCrosshairs&&1===o.data.contour.polyline.length?this.renderPointContourWithMarker(t,i,o):this.renderContour(t,i,o);if(this.configuration.calculateStats)return this._calculateStatsIfActive(o,n,r,s,t),this._renderStats(o,r,t,i),a}_calculateStatsIfActive(e,t,n,i,o){const a=this.commonData?.annotation.annotationUID;if((e.annotationUID!==a||this.commonData?.movingTextBox)&&!this.commonData?.movingTextBox){const{data:a}=e;a.cachedStats[t]&&null!=a.cachedStats[t].areaUnits?e.invalidated&&this._throttledCalculateCachedStats(e,n,i,o):(a.cachedStats[t]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null},this._calculateCachedStats(e,n,i,o))}}updateClosedCachedStats(e){let{viewport:t,points:n,imageData:i,metadata:o,cachedStats:a,targetId:r,pixelValueUnits:s,canvasCoordinates:l,calibratedScale:d}=e;const{scale:c,areaUnits:h,units:u}=d,{voxelManager:g}=t.getImageData(),m=l[0],v=t.canvasToWorld(m),p=t.canvasToWorld([m[0]+1,m[1]]),f=t.canvasToWorld([m[0],m[1]+1]),w=Oo.vec3.distance(v,p),I=Oo.vec3.distance(v,f),E=ie.utilities.transformWorldToIndex(i,n[0]);E[0]=Math.floor(E[0]),E[1]=Math.floor(E[1]),E[2]=Math.floor(E[2]);let C=E[0],_=E[0],b=E[1],T=E[1],D=E[2],S=E[2];for(let e=1;e<n.length;e++){const t=ie.utilities.transformWorldToIndex(i,n[e]);t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),C=Math.min(C,t[0]),_=Math.max(_,t[0]),b=Math.min(b,t[1]),T=Math.max(T,t[1]),D=Math.min(D,t[2]),S=Math.max(S,t[2])}const y=ie.utilities.transformWorldToIndex(i,n[1]);y[0]=Math.floor(y[0]),y[1]=Math.floor(y[1]),y[2]=Math.floor(y[2]);let x=ba(l)/c/c;x*=w*I;const M=.01*(_-C),O=.01*(T-b),P=.01*(S-D);C=Math.floor(C-M),_=Math.ceil(_+M),b=Math.floor(b-O),T=Math.ceil(T+O),D=Math.floor(D-P),S=Math.ceil(S+P);const A=[[C,_],[b,T],[D,S]],R=i.indexToWorld([_,T,S]),L=t.worldToCanvas(R);let N=0,U=[],k=0;const V=g.forEach(this.configuration.statsCalculator.statsCallback,{imageData:i,isInObject:(e,n)=>{let i=!0;const o=t.worldToCanvas(e);return o[1]!=N&&(k=0,N=o[1],U=Xa(l,o,[L[0],o[1]]),U.sort((function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}))),U.length&&o[0]>U[0][0]&&(U.shift(),k++),k%2==0&&(i=!1),i},boundsIJK:A,returnPoints:this.configuration.storePointData}),W=this.configuration.statsCalculator.getStatistics();a[r]={Modality:o.Modality,area:x,perimeter:Bl(l,closed)/c,mean:W.mean?.value,max:W.max?.value,stdDev:W.stdDev?.value,statsArray:W.array,pointsInShape:V,areaUnits:h,pixelValueUnits:s,lengthUnits:u}}updateOpenCachedStats(e){let{targetId:t,metadata:n,canvasCoordinates:i,cachedStats:o,pixelValueUnits:a,calibratedScale:r}=e;const{scale:s,units:l}=r;o[t]={Modality:n.Modality,length:Bl(i,!1)/s,pixelValueUnits:a,getPixelValueUnitunit:l}}}function tc(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,length:r,perimeter:s,max:l,isEmptyArea:d,lengthUnits:c,areaUnits:h,pixelValueUnits:u}=n||{},g=[];if(i){const e=d?"Area: Oblique not supported":`Area: ${ie.utilities.roundNumber(i)} ${h}`;g.push(e)}return o&&g.push(`Mean: ${ie.utilities.roundNumber(o)} ${u}`),Number.isFinite(l)&&g.push(`Max: ${ie.utilities.roundNumber(l)} ${u}`),a&&g.push(`Std Dev: ${ie.utilities.roundNumber(a)} ${u}`),s&&g.push(`Perimeter: ${ie.utilities.roundNumber(s)} ${c}`),r&&g.push(`${ie.utilities.roundNumber(r)} ${c}`),g}ae(ec,"toolName",void 0),ec.toolName="PlanarFreehandROI";const nc=ec;class ic extends nc{constructor(e){super(ie.utilities.deepMerge({configuration:{calculateStats:!1,allowOpenContours:!1}},e))}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){const t=e.annotation,{invalidated:n}=t,i=super.renderAnnotationInstance(e);if(n){const{segmentationId:e}=t.data.segmentation;Ci(e)}return i}}ae(ic,"toolName",void 0),ic.toolName="PlanarFreehandContourSegmentationTool";const oc=ic,ac=e=>{const{numberOfCells:t,lines:n}=e,i=[],o=[];for(let e=0;e<n.length;){const a=n[e];if(o.push(a),i.push(n.slice(e+1,e+a+1)),e+=a+1,i.length===t)break}return{lineSegments:i,linesNumberOfPoints:o}};function rc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return so(e,ri.Contour,(()=>async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.segmentIndices?.length?t.segmentIndices:ho(e);let i;const o=Yi(e).representationData;try{o.SURFACE?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("Viewport is required to compute contour from surface");const{viewport:n,segmentationRepresentationUID:i}=t,o=t.segmentIndices?.length?t.segmentIndices:ho(e),a=new Map,r=new Map,s=Yi(e).representationData.SURFACE,l=[];return s.geometryIds.forEach(((e,t)=>{if(o.includes(t)){a.set(t,e);const n=ie.cache.getGeometry(e)?.data;n&&l.push({id:e,points:n.getPoints(),polys:n.getPolys()})}})),a.forEach(((e,t)=>{r.set(e,t)})),sa(await Ki(l,n,i),r)}(e,{segmentIndices:n,...t}):o.LABELMAP&&(i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("Viewport is required to compute contour from labelmap");const n=await bo(e,t);if(!n?.length)return void console.error("Failed to convert labelmap to surface or labelmap is empty");const{viewport:i,segmentationRepresentationUID:o}=t,a=n.map((e=>({id:e.segmentIndex.toString(),points:e.data.points,polys:e.data.polys,segmentIndex:e.segmentIndex})));return sa(await Ki(a,i,o))}(e,{segmentIndices:n,...t}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to contour, currently only support converting volume labelmap to contour if available");const{viewport:a,segmentationRepresentationUID:r}=t,s=function(e,t,n){const i=new Map;for(const[o,a]of e)for(const e of a){const{points:a}=e,{lineSegments:r,linesNumberOfPoints:s}=ac(e);for(let e=0;e<r.length;e++){const l=r[e],d=[];for(let t=0;t<s[e];t++){const e=l[t];d.push([a[3*e],a[3*e+1],a[3*e+2]])}if(d.length<3)continue;const c={annotationUID:ie.utilities.uuidv4(),data:{contour:{closed:!0,polyline:d},segmentation:{segmentationId:n,segmentIndex:o},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:oc.toolName,...t.getViewReference()}};mt(c,t.element);const h=i.get(o)||new Set;h.add(c.annotationUID),i.set(o,h)}}return i}(i,a,e);return zo(r,{CONTOUR:{fillAlpha:0}}),{annotationUIDsMap:s}}(e,t)),(()=>{}))}let sc=!1;const lc={render:async function(e,t){const{segmentationId:n}=t,i=Yi(n);if(!i)return;let o=i.representationData[ri.Contour];o||!eo(t.segmentationRepresentationUID)||sc||(sc=!0,o=await rc(n,{segmentationRepresentationUID:t.segmentationRepresentationUID,viewport:e})),o&&o?.geometryIds?.length&&function(e,t,n,i){(n.size?aa:ra)(e,t,i)}(e,o.geometryIds,o.annotationUIDsMap,t)},removeRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;Oi(t),function(e){yo.delete(e)}(t),n&&o.render()}};function dc(e,t){return Di.getCurrentLabelmapImageIdForViewport(e,t)}const cc=(0,ie.getWebWorkerManager)(),hc=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Bi.POLYSEG_CONTOUR_TO_LABELMAP})};async function uc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.viewport,i=n.getVolumeId();if(!ie.utilities.getViewportImageIds(n))throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");const o=ie.utilities.uuidv4(),a=ie.volumeLoader.createAndCacheDerivedSegmentationVolume(i,{volumeId:o}),{dimensions:r,origin:s,direction:l,spacing:d,voxelManager:c}=a,{segmentIndices:h,annotationUIDsInSegmentMap:u}=mc(e,t);hc(ie.eventTarget,0);const g=await cc.executeTask("polySeg","convertContourToVolumeLabelmap",{segmentIndices:h,dimensions:r,scalarData:c.getCompleteScalarDataArray?.(),origin:s,direction:l,spacing:d,annotationUIDsInSegmentMap:u},{callbacks:[e=>{hc(ie.eventTarget,e)}]});return hc(ie.eventTarget,1),c.setCompleteScalarDataArray(g),a.modified(),{volumeId:a.volumeId}}async function gc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("No viewport provided, labelmap computation from contour requires viewports");const n=t.viewport.getImageIds();if(!n)throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");n.forEach((e=>{if(!ie.cache.getImageLoadObject(e))throw new Error("ImageIds must be cached before converting contour to labelmap")}));const i=(await ie.imageLoader.createAndCacheDerivedSegmentationImages(n)).map((e=>e.imageId)),{segmentIndices:o,annotationUIDsInSegmentMap:a}=mc(e,t),r=new Map;i.forEach(((e,t)=>{const i=ie.cache.getImage(e),o=ie.metaData.get(ie.Enums.MetadataModules.IMAGE_PLANE,e);let{columnCosines:a,rowCosines:s,rowPixelSpacing:l,columnPixelSpacing:d,imagePositionPatient:c}=o;a=a??[0,1,0],s=s??[1,0,0],l=l??1,d=d??1,c=c??[0,0,0];const h=Oo.vec3.fromValues(s[0],s[1],s[2]),u=Oo.vec3.fromValues(a[0],a[1],a[2]),g=Oo.vec3.create();Oo.vec3.cross(g,h,u);const m=[...h,...u,...g],v=[l,d,1],p=c;r.set(n[t],{direction:m,spacing:v,origin:p,scalarData:i.voxelManager.getScalarData(),imageId:e,dimensions:[i.width,i.height,1]})})),hc(ie.eventTarget,0);const s=await cc.executeTask("polySeg","convertContourToStackLabelmap",{segmentationsInfo:r,annotationUIDsInSegmentMap:a,segmentIndices:o},{callbacks:[e=>{hc(ie.eventTarget,e)}]});hc(ie.eventTarget,1);const l=[];return s.forEach(((e,t)=>{let{scalarData:n}=e;const i=r.get(t),{imageId:o}=i,a=ie.cache.getImage(o);a.voxelManager.getScalarData().set(n),a.imageFrame?.pixelData?.set(n),l.push(o)})),{imageIds:l}}function mc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.annotationUIDsMap,i=t.segmentIndices?.length?t.segmentIndices:Array.from(n.keys()),o=new Map;return i.forEach((e=>{const t=n.get(e);let i=Array.from(t);i=i.filter((e=>!be(e).parentAnnotationUID));const a=i.map((e=>{const t=be(e),n=t.childAnnotationUIDs?.length;return{polyline:t.data.contour.polyline,referencedImageId:t.metadata.referencedImageId,holesPolyline:n&&t.childAnnotationUIDs.map((e=>be(e).data.contour.polyline))}}));o.set(e,a)})),{segmentIndices:i,annotationUIDsInSegmentMap:o}}const vc=(0,ie.getWebWorkerManager)(),pc=(e,t)=>{(0,ie.triggerEvent)(e,ie.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Bi.POLYSEG_SURFACE_TO_LABELMAP})};var fc=E(441),wc=E.n(fc),Ic=E(795),Ec=E.n(Ic);const Cc=[[0,0,0,0],[221,84,84,255],[77,228,121,255],[166,70,235,255],[189,180,116,255],[109,182,196,255],[204,101,157,255],[123,211,94,255],[93,87,218,255],[225,128,80,255],[73,232,172,255],[181,119,186,255],[176,193,112,255],[105,153,200,255],[208,97,120,255],[90,215,101,255],[135,83,222,255],[229,178,76,255],[122,183,181,255],[190,115,171,255],[149,197,108,255],[100,118,205,255],[212,108,93,255],[86,219,141,255],[183,79,226,255],[233,233,72,255],[118,167,187,255],[194,111,146,255],[116,201,104,255],[115,96,209,255],[216,147,89,255],[82,223,188,255],[230,75,224,255],[163,184,121,255],[114,143,191,255],[198,107,114,255],[99,206,122,255],[153,92,213,255],[220,192,85,255],[78,215,227,255],[234,71,173,255],[141,188,117,255],[110,113,195,255],[202,128,103,255],[95,210,157,255],[195,88,217,255],[206,224,81,255],[74,166,231,255],[185,120,139,255],[113,192,113,255],[133,106,199,255],[207,162,98,255],[91,214,198,255],[221,84,198,255],[159,228,77,255],[70,111,235,255],[189,119,116,255],[109,196,138,255],[165,101,204,255],[211,201,94,255],[87,191,218,255],[225,80,153,255],[106,232,73,255],[124,119,186,255],[193,142,112,255],[105,200,168,255],[203,97,208,255],[184,215,90,255],[83,147,222,255],[229,76,101,255],[122,183,130,255],[146,115,190,255],[197,171,108,255],[100,205,205,255],[212,93,177,255],[141,219,86,255],[79,97,226,255],[233,99,72,255],[118,187,150,255],[173,111,194,255],[197,201,104,255],[96,171,209,255],[216,89,137,255],[94,223,82,255],[107,75,230,255],[184,153,121,255],[114,191,175,255],[198,107,191,255],[166,206,99,255],[92,132,213,255],[220,85,91,255],[78,227,115,255],[159,71,234,255],[188,176,117,255],[110,185,195,255],[202,103,161,255],[129,210,95,255],[88,88,217,255],[224,123,81,255],[74,231,166,255],[177,120,185,255],[179,192,113,255],[106,156,199,255],[207,98,125,255],[91,214,96,255],[130,84,221,255],[228,171,77,255],[70,235,221,255],[189,116,174,255],[153,196,109,255],[101,123,204,255],[211,104,94,255],[87,218,136,255],[177,80,225,255],[232,225,73,255],[119,169,186,255],[193,112,149,255],[121,200,105,255],[111,97,208,255],[215,142,90,255],[83,222,181,255],[229,76,229,255],[165,183,122,255],[115,146,190,255],[197,108,119,255],[100,205,118,255],[148,93,212,255],[219,186,86,255],[79,220,226,255],[233,72,179,255],[144,187,118,255],[111,118,194,255],[201,124,104,255],[96,209,153,255],[189,89,216,255],[211,223,82,255],[75,172,230,255],[184,121,142,255],[117,191,114,255],[130,107,198,255],[206,157,99,255],[92,213,193,255],[220,85,203,255],[165,227,78,255],[71,118,234,255],[188,117,117,255],[110,195,135,255],[161,103,202,255],[210,195,95,255],[88,195,217,255],[224,81,158,255],[113,231,74,255],[123,120,185,255],[192,139,113,255],[106,199,164,255],[198,98,207,255],[188,214,91,255],[84,153,221,255],[228,77,108,255],[70,235,84,255],[143,116,189,255],[196,167,109,255],[101,204,199,255],[211,94,182,255],[147,218,87,255],[80,104,225,255],[232,93,73,255],[119,186,147,255],[170,112,193,255],[200,200,105,255],[97,175,208,255],[215,90,142,255],[100,222,83,255],[101,76,229,255],[183,150,122,255],[115,190,171,255],[197,108,194,255],[170,205,100,255],[93,138,212,255],[219,86,97,255],[79,226,110,255],[153,72,233,255],[187,173,118,255],[111,187,194,255],[201,104,165,255],[134,209,96,255],[89,95,216,255],[223,117,82,255],[75,230,159,255],[174,121,184,255],[182,191,114,255],[107,160,198,255],[206,99,130,255],[92,213,92,255],[124,85,220,255],[227,165,78,255],[71,234,214,255],[188,117,176,255],[156,195,110,255],[103,128,202,255],[210,100,95,255],[88,217,131,255],[170,81,224,255],[231,218,74,255],[120,172,185,255],[192,113,153,255],[125,199,106,255],[107,98,207,255],[214,137,91,255],[84,221,175,255],[222,77,228,255],[194,235,70,255],[116,149,189,255],[196,109,123,255],[101,204,114,255],[143,94,211,255],[218,180,87,255],[80,225,225,255],[232,73,186,255],[147,186,119,255],[112,122,193,255],[200,121,105,255],[97,208,148,255],[184,90,215,255],[216,222,83,255],[76,178,229,255],[183,122,145,255],[121,190,115,255],[126,108,197,255],[205,153,100,255],[93,212,187,255],[219,86,208,255],[171,226,79,255],[72,126,233,255],[187,118,121,255],[111,194,132,255],[157,104,201,255],[209,190,96,255],[89,200,216,255],[223,82,164,255],[120,230,75,255],[121,121,184,255],[191,136,114,255],[107,198,160,255],[192,99,206,255],[193,213,92,255],[85,158,220,255],[227,78,115,255],[71,234,78,255],[141,117,188,255],[195,163,110,255],[103,202,194,255],[210,95,186,255],[153,217,88,255],[81,111,224,255]];function _c(){return Di.getNextColorLUTIndex()}async function bc(e,t,n){const{segmentationId:i,options:o={}}=t,a=t.options?.segmentationRepresentationUID||ie.utilities.uuidv4(),r=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).colorLUTOrIndex;let t;if("number"==typeof e)t=e;else{const n=_c();vo(Array.isArray(e)?e:Cc,n),t=n}return t}(o),{type:s}=t;let l;return l=s===ri.Labelmap?function(){const e=Ec().newInstance(),t=wc().newInstance();return t.addPoint(0,0),{ofun:t,cfun:e}}():{},function(e,t){const n=Di;n.addSegmentationRepresentationState(t),n.addSegmentationRepresentationToViewport(e,t.segmentationRepresentationUID),mo(t.segmentationRepresentationUID)}(e,{segmentationId:i,segmentationRepresentationUID:a,type:t.type,colorLUTIndex:r,rendering:l,polySeg:o.polySeg,config:{allSegments:{},perSegment:{}}}),n&&zo(a,n.representations),t.type===ri.Contour&&Pr([e]),io(i),a}const Tc=async function(e,t,n){const i=t.map((t=>bc(e,t,n)));return await Promise.all(i)};async function Dc(e){let{segmentationId:t,options:n}=e;const i=Yi(t),{volumeId:o}=i.representationData.LABELMAP,a=ie.cache.getVolume(o);await async function(e){let{segmentationId:t,viewportId:n,imageIds:i,options:o}=e;const a=Yi(t);if(o?.removeOriginal){const e=a.representationData.LABELMAP;ie.cache.getVolume(e.volumeId)&&ie.cache.removeVolumeLoadObject(e.volumeId),a.representationData.LABELMAP={imageIds:i}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,imageIds:i};await Tc(n,[{segmentationId:t,type:ri.Labelmap}]),ie.eventTarget.addEventListenerOnce(se.SEGMENTATION_RENDERED,(()=>Ci(t)))}({segmentationId:t,viewportId:n.viewportId,imageIds:a.imageIds,options:n})}function Sc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return so(e,ri.Labelmap,(()=>async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.segmentIndices?.length?t.segmentIndices:ho(e);let i;const o=Yi(e),a=o.representationData;try{a.CONTOUR?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t.viewport instanceof ie.VolumeViewport??!0;if(n&&!t.viewport)throw new Error("Cannot compute labelmap from contour segmentation without providing the viewport");const i=t.segmentIndices?.length?t.segmentIndices:ho(e),o=Yi(e).representationData.CONTOUR,a=n?uc:gc;return await a(o,{segmentIndices:i,segmentationRepresentationUID:t.segmentationRepresentationUID,viewport:t.viewport})}(e,{segmentIndices:n,...t}):a.SURFACE&&(i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{viewport:n}=t,i=n instanceof ie.VolumeViewport??!0,o=t.segmentIndices?.length?t.segmentIndices:ho(e),a=Yi(e),r=new Map;if(a.representationData.SURFACE.geometryIds.forEach(((e,t)=>{o.includes(t)&&r.set(t,e)})),i&&!n)throw new Error("Cannot compute labelmap from surface segmentation without providing the viewport");let s;if(i){const e=n.getVolumeId();s=await ie.volumeLoader.createAndCacheDerivedSegmentationVolume(e)}else{const e=t.viewport.getImageIds(),n=ie.imageLoader.createAndCacheDerivedSegmentationImages(e).map((e=>e.imageId));s=await ie.volumeLoader.createAndCacheVolumeFromImages("generatedSegmentationVolumeId",n)}const l=await async function(e,t){const{geometryIds:n}=e;if(!n?.size)throw new Error("No geometry IDs found for surface representation");const i=new Map;n.forEach(((e,t)=>{const n=ie.cache.getGeometry(e).data,o=n.getPoints(),a=n.getPolys();i.set(t,{points:o,polys:a})}));const{dimensions:o,direction:a,origin:r,spacing:s,voxelManager:l}=t;pc(ie.eventTarget,0);const d=await vc.executeTask("polySeg","convertSurfacesToVolumeLabelmap",{segmentsInfo:i,dimensions:o,spacing:s,direction:a,origin:r},{callbacks:[e=>{pc(ie.eventTarget,e)}]});return pc(ie.eventTarget,1),l.setCompleteScalarDataArray(d),t.modified(),{volumeId:t.volumeId}}({geometryIds:r},s);return i?l:await async function(e){let{volumeId:t}=e;return{imageIds:ie.cache.getVolume(t).imageIds}}({volumeId:s.volumeId})}(o.segmentationId,{segmentIndices:n,...t}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return i}(e,t)),(()=>{}))}const yc=new Map;let xc=!1;function Mc(e,t,n){const i={...e,...n||{}};return{fillAlpha:t?i.fillAlpha:i.fillAlphaInactive,outlineWidth:t?i.outlineWidthActive:i.outlineWidthInactive,renderFill:t?i.renderFill:i.renderFillInactive,renderOutline:i.renderOutline,outlineOpacity:t?i.outlineOpacity:i.outlineOpacityInactive,activeSegmentOutlineWidthDelta:i.activeSegmentOutlineWidthDelta}}function Oc(e,t,n,i){let{fillAlpha:o,renderFill:a,renderOutline:r,segmentColor:s,outlineWidth:l}=i;const d=`${e}-${t}-${n}`,c=yc.get(d);if(!c)return yc.set(d,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice()}),{forceOpacityUpdate:!0,forceColorUpdate:!0};const{fillAlpha:h,renderFill:u,renderOutline:g,outlineWidth:m,segmentColor:v}=c,p=v[0]!==s[0]||v[1]!==s[1]||v[2]!==s[2],f=v[3]!==s[3]||h!==o||u!==a||g!==r||m!==l;return(f||p)&&yc.set(d,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice()}),{forceOpacityUpdate:f,forceColorUpdate:p}}async function Pc(e,t,n){await async function(e,t,n){const i=(0,ie.getEnabledElement)(e),{renderingEngine:o,viewport:a}=i,{id:r}=a;if(co(t,a)){const e=[{volumeId:t.volumeId,actorUID:n,visibility:!0,blendMode:ie.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND}];await(0,ie.addVolumesToViewports)(o,e,[r],!1,!0)}else{const e=Si(n),t=[{imageId:dc(a.id,e.segmentationId),actorUID:n}];await(0,ie.addImageSlicesToViewports)(o,t,[r])}}(e.element,t,n)}const Ac={render:async function(e,t){const{segmentationId:n,segmentationRepresentationUID:i}=t,o=Yi(n);if(!o)return void console.warn("No segmentation found for segmentationId: ",n);let a=o.representationData[ri.Labelmap],r=e.getActor(i);if(!a&&eo(i)&&!xc){if(xc=!0,a=await Sc(n,{segmentationRepresentationUID:i,viewport:e}),!a)throw new Error(`No labelmap data found for segmentationId ${n}.`);xc=!1}if(a){if(co(a,e)){if(e instanceof ie.StackViewport)return;const{volumeId:t}=a;if(!ie.cache.getVolume(t))throw new Error(`No Labelmap found for volumeId: ${t}`);if(!function(e,t){if(!t)return!0;const n=e.getDefaultActor();if(!n)return!1;const{uid:i}=n,o=ie.cache.getVolume(i);if(o){const e=ie.cache.getVolume(t);if(e&&o.metadata.FrameOfReferenceUID===e.metadata.FrameOfReferenceUID)return!0}return!1}(e,a?.referencedVolumeId))return;r||await Pc(e,a,i),r=e.getActor(i)}else{if(e instanceof ie.VolumeViewport)return;if(!dc(e.id,n))return;r||await Pc(e,a,i),r=e.getActor(i)}r&&function(e,t,n){const{rendering:i,config:o,colorLUTIndex:a}=n,r=$d(e)===n,{cfun:s,ofun:l}=i,{allSegments:d,perSegment:c}=o,h=No().representations[ri.Labelmap],u=No().renderInactiveRepresentations,g={...h,...d[ri.Labelmap]},m=Xi(a),v=Math.min(256,m.length),{uid:p}=t,{outlineWidth:f,renderOutline:w,outlineOpacity:I,activeSegmentOutlineWidthDelta:E}=Mc(g,r),C=Go(e,n.segmentationRepresentationUID);for(let t=0;t<v;t++){const n=t,i=m[n],o=c?.[n]?.[ri.Labelmap],{fillAlpha:a,outlineWidth:d,renderFill:h,renderOutline:u}=Mc(g,r,o),{forceOpacityUpdate:v,forceColorUpdate:f}=Oc(e,p,n,{fillAlpha:a,renderFill:h,renderOutline:u,segmentColor:i,outlineWidth:d});if(f&&s.addRGBPoint(n,i[0]/255,i[1]/255,i[2]/255),v)if(h){const e=C.has(n)?0:i[3]/255*a;l.removePoint(n),l.addPointLong(n,e,.5,1)}else l.addPointLong(n,.01,.5,1)}const _=t.actor;_.getProperty().setRGBTransferFunction(0,s),l.setClamping(!1),_.getProperty().setScalarOpacity(0,l),_.getProperty().setInterpolationTypeToNearest(),_.getProperty().setUseLabelOutline(w),_.getProperty().setLabelOutlineOpacity(I);const{activeSegmentIndex:b}=Yi(n.segmentationId),T=new Array(v-1);for(let e=1;e<v;e++)C.has(e)?T[e-1]=0:T[e-1]=e===b?f+E:f;_.getProperty().setLabelOutlineThickness(T);const D=r||u;_.setVisibility(D)}(e.id,r,t)}},removeRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;(function(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n;i.removeActors([t])})(o.element,t),Oi(t),n&&o.render()}},Rc={[ri.Labelmap]:Ac,[ri.Contour]:lc,[ri.Surface]:So},Lc=oc.toolName;function Nc(e){kc.renderSegmentationsForViewport(e)}function Uc(e){kc.renderSegmentation(e)}const kc=new class{constructor(){ae(this,"_needsRender",new Set),ae(this,"_animationFrameSet",!1),ae(this,"_animationFrameHandle",null),ae(this,"hasBeenDestroyed",void 0),ae(this,"_getAllViewports",(()=>(0,ie.getRenderingEngines)().flatMap((e=>e.getViewports())))),ae(this,"_renderFlaggedSegmentations",(()=>{this._throwIfDestroyed(),Array.from(this._needsRender).forEach((e=>{this._triggerRender(e)})),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}))}renderSegmentationsForViewport(e){const t=e?[e]:this._getViewportIdsForSegmentation();this._setViewportsToBeRenderedNextFrame(t)}renderSegmentation(e){const t=this._getViewportIdsForSegmentation(e);this._setViewportsToBeRenderedNextFrame(t)}_getViewportIdsForSegmentation(e){const t=this._getAllViewports(),n=[];for(const i of t){const t=i.id,o=xi(t);e?o.some((t=>t.segmentationId===e))&&n.push(t):o.length>0&&n.push(t)}return n}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setViewportsToBeRenderedNextFrame(e){e.forEach((e=>{this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedSegmentations),this._animationFrameSet=!0)}_triggerRender(e){const t=xi(e);if(!t?.length)return;const{viewport:n}=(0,ie.getEnabledElementByViewportId)(e),i=[],o=t.map((e=>{e.type===ri.Contour&&this._addPlanarFreeHandToolIfAbsent(n);const t=Rc[e.type];try{const o=t.render(n,e);i.push(o)}catch(e){console.error(e)}return Promise.resolve()}));function a(e){const{element:t,viewportId:n}=e.detail;t.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,a);const i={viewportId:n};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_RENDERED,{...i})}Promise.allSettled(o).then((()=>{n.element.addEventListener(ie.Enums.Events.IMAGE_RENDERED,a),n.render()}))}_addPlanarFreeHandToolIfAbsent(e){Lc in xe.tools||md(oc);const t=ur(e.id);t.hasTool(Lc)||(t.addTool(Lc),t.setToolPassive(Lc))}};function Vc(e,t){Di.updateLabelmapSegmentationImageReferences(e,t)}function Wc(e){const t=e.detail,{viewportId:n,renderingEngineId:i}=t,{viewport:o}=(0,ie.getEnabledElementByIds)(n,i),a=xi(n);if(!a?.length)return;const r=a.filter((e=>e.type===ri.Labelmap));if(!r.length)return;const s=o.getActors();r.forEach((e=>{const{segmentationId:t}=e;Vc(n,t)})),s.filter((e=>r.some((t=>t.segmentationRepresentationUID===e.uid)))).forEach((e=>{r.find((t=>dc(n,t.segmentationId)===e.referencedId))||o.removeActors([e.uid])})),r.forEach((t=>{const{segmentationId:i}=t,a=o.getCurrentImageId(),r=dc(n,i);if(!r)return;const l=ie.cache.getImage(r);if(!l)return void console.warn("No derived image found in the cache for segmentation representation",t);const d=s.find((e=>e.referencedId===r));if(!d){const{dimensions:e,spacing:n,direction:i}=o.getImageDataMetadata(l),s=ie.cache.getImage(a)||{imageId:a},{origin:d}=o.getImageDataMetadata(s),c=d,h=ni().newInstance({name:"Pixels",numberOfComponents:1,values:[...l.voxelManager.getScalarData()]}),u=oi().newInstance();return u.setDimensions(e[0],e[1],1),u.setSpacing(n),u.setDirection(i),u.setOrigin(c),u.getPointData().setScalars(h),u.modified(),o.addImages([{imageId:r,actorUID:t.segmentationRepresentationUID,callback:e=>{let{imageActor:t}=e;t.getMapper().setInputData(u)}}]),void Nc()}{const e=d.actor.getMapper().getInputData();e.setDerivedImage?e.setDerivedImage(l):ie.utilities.updateVTKImageDataWithCornerstoneImage(e,l)}o.render(),e.type===ie.Enums.Events.IMAGE_RENDERED&&o.element.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,Wc)}))}new Map;const Bc={enable:function(e){const{viewport:t}=(0,ie.getEnabledElement)(e);t instanceof ie.BaseVolumeViewport||(e.addEventListener(ie.Enums.Events.STACK_NEW_IMAGE,Wc),e.addEventListener(ie.Enums.Events.IMAGE_RENDERED,Wc))},disable:function(e){e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,Wc),e.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,Wc)}},Hc=function(e){Or(e.detail.element)},Fc={enable:function(e){e.addEventListener(ie.Enums.Events.IMAGE_RENDERED,Hc)},disable:function(e){e.removeEventListener(ie.Enums.Events.IMAGE_RENDERED,Hc)}};function Gc(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=ur(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.mouseButton===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:$c,Passive:qc,Enabled:zc}=Oe,jc=function(e){Gc(e,[$c,qc,zc]).forEach((t=>{t.onCameraModified&&t.onCameraModified(e)}))},Kc={enable:function(e){e.addEventListener(ie.Enums.Events.CAMERA_MODIFIED,jc)},disable:function(e){e.removeEventListener(ie.Enums.Events.CAMERA_MODIFIED,jc)}},{Active:Yc,Passive:Xc,Enabled:Jc}=Oe,Zc=function(e){Gc(e,[Yc,Xc,Jc]).forEach((t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)}))},Qc={enable:function(e){e.addEventListener(ie.Enums.Events.IMAGE_SPACING_CALIBRATED,Zc)},disable:function(e){e.removeEventListener(ie.Enums.Events.IMAGE_SPACING_CALIBRATED,Zc)}},{Active:eh,Passive:th,Enabled:nh}=Oe,ih=function(e){Gc(e,[eh,th,nh]).forEach((t=>{t.onResetCamera&&t.onResetCamera(e)}))},oh={enable:function(e){e.addEventListener(ie.Enums.Events.CAMERA_RESET,ih)},disable:function(e){e.removeEventListener(ie.Enums.Events.CAMERA_RESET,ih)}},{Active:ah}=Oe;function rh(e,t,n){if(xe.isInteractingWithTool)return!1;const{renderingEngineId:i,viewportId:o}=n.detail,a=ur(o,i);if(!a)return!1;let r;const s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n],o=a.getToolInstance(n);if(i.mode===ah&&"function"==typeof o[t]){r=a.getToolInstance(n);break}}r&&r[t](n)}const sh=rh.bind(null,"Mouse","mouseClickCallback");function lh(e,t,n){const i="touch"===(arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse")?36:6,o=[];return t.forEach((t=>{let{tool:a,annotations:r}=t;for(const t of r){if(t.isLocked||!t.isVisible)continue;const r=a.getHandleNearImagePoint(e,t,n,i);if(r){o.push({tool:a,annotation:t,handle:r});break}}})),o}function dh(e,t){const n=[];for(let i=0;i<t.length;i++){const o=t[i];if(!o){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let a=lt(o.constructor.toolName,e);a?.length&&("function"==typeof o.filterInteractableAnnotationsForElement&&(a=o.filterInteractableAnnotationsForElement(e,a)),a.length>0&&n.push({tool:o,annotations:a}))}return n}function ch(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse";const o="touch"===i?36:6,a=[];return t.forEach((t=>{let{tool:r,annotations:s}=t;for(const t of s)if(!t.isLocked&&t.isVisible&&r.isPointNearTool(e,t,n,o,i)){a.push({tool:r,annotation:t});break}})),a}const{Active:hh}=Oe;function uh(e){const{renderingEngineId:t,viewportId:n,event:i}=e.detail,o=ns(i)||ei.getModifierKey(),a=ur(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary(),l=e.detail.buttons??i?.buttons??s;for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t],i=n.bindings.length&&n.bindings.some((e=>e.mouseButton===l&&e.modifierKey===o));if(n.mode===hh&&i)return a.getToolInstance(t)}}const{Active:gh,Passive:mh}=Oe;const{Active:vh,Passive:ph}=Oe;function fh(e){if(xe.isInteractingWithTool)return;const t=uh(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;const n=1===e.detail.event.buttons,i=[...Gc(e,[vh],e.detail.event.buttons)||[],...(n?Gc(e,[ph]):void 0)||[]];if(function(e){if(xe.isInteractingWithTool)return!1;const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{canvas:o}=t.currentPoints;if(!i)return!1;const a=function(e,t){const n=new Map,{renderingEngineId:i,viewportId:o}=e.detail,a=ur(o,i);if(!a)return n;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary(),l=e.detail.event,d=l?.buttons??s,c=ns(l)||ei.getModifierKey();for(let e=0;e<r.length;e++){const i=r[e],o=a.getToolInstance(i),s=o.configuration?.actions??{},l=Object.values(s);if(!l?.length||!t.includes(o.mode))continue;const h=l.find((e=>e.bindings.length&&e.bindings.some((e=>e.mouseButton===d&&e.modifierKey===c))));h&&n.set(o,h)}return n}(e,[gh,mh]),r=ch(n,dh(n,Array.from(a.keys())),o);if(r.length>0){const{tool:t,annotation:n}=r[0],i=a.get(t);return("string"==typeof i.method?t[i.method]:i.method).call(t,e,n),!0}return!1}(e))return;const o=e.detail,{element:a}=o,r=dh(a,i),s=o.currentPoints.canvas,l=lh(a,r,s,"mouse"),d=!!e.detail.event.shiftKey;if(l.length>0){const{tool:t,annotation:n,handle:i}=wh(l);return Ih(n.annotationUID,d),void t.handleSelectedCallback(e,n,i,"Mouse")}const c=ch(a,r,s,"mouse");if(c.length>0){const{tool:t,annotation:n}=wh(c);return Ih(n.annotationUID,d),void t.toolSelectedCallback(e,n,"Mouse",s)}!t||"function"!=typeof t.postMouseDownCallback||t.postMouseDownCallback(e)}function wh(e){return e.length>1&&e.find((e=>!ue(e.annotation)&&Je(e.annotation.annotationUID)))||e[0]}function Ih(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?Ge(e)?We(e,!1):We(e,!0,!0):We(e,!0,!1)}function Eh(e){if(xe.isInteractingWithTool)return;const t=uh(e);t&&!xe.isMultiPartToolActive&&t.addNewAnnotation&&We(t.addNewAnnotation(e,"mouse").annotationUID)}const Ch=rh.bind(null,"Mouse","doubleClickCallback");function _h(e){if(xe.isInteractingWithTool)return;const t=uh(e);!t||"function"!=typeof t.mouseDragCallback||t.mouseDragCallback(e)}const{Active:bh,Passive:Th}=Oe;function Dh(e){if(xe.isInteractingWithTool||xe.isMultiPartToolActive)return;const t=Gc(e,[bh,Th]),n=e.detail,{element:i}=n,o=dh(i,t),a=t.filter((e=>!o.some((t=>t.tool.getToolName()===e.getToolName()))));let r=!1;for(const{tool:t,annotations:n}of o)"function"==typeof t.mouseMoveCallback&&(r=t.mouseMoveCallback(e,n)||r);a.forEach((t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)})),!0===r&&Or(i)}const Sh=rh.bind(null,"Mouse","mouseUpCallback"),yh=function(e){if(xe.isInteractingWithTool)return;e.detail.buttons=es.Wheel|(e.detail.event.buttons||0);const t=uh(e);return t?t.mouseWheelCallback(e):void 0},xh={enable:function(e){e.addEventListener(se.MOUSE_CLICK,sh),e.addEventListener(se.MOUSE_DOWN,fh),e.addEventListener(se.MOUSE_DOWN_ACTIVATE,Eh),e.addEventListener(se.MOUSE_DOUBLE_CLICK,Ch),e.addEventListener(se.MOUSE_DRAG,_h),e.addEventListener(se.MOUSE_MOVE,Dh),e.addEventListener(se.MOUSE_UP,Sh),e.addEventListener(se.MOUSE_WHEEL,yh)},disable:function(e){e.removeEventListener(se.MOUSE_CLICK,sh),e.removeEventListener(se.MOUSE_DOWN,fh),e.removeEventListener(se.MOUSE_DOWN_ACTIVATE,Eh),e.removeEventListener(se.MOUSE_DOUBLE_CLICK,Ch),e.removeEventListener(se.MOUSE_DRAG,_h),e.removeEventListener(se.MOUSE_MOVE,Dh),e.removeEventListener(se.MOUSE_UP,Sh),e.removeEventListener(se.MOUSE_WHEEL,yh)}},{Active:Mh}=Oe;function Oh(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=Pt.mouseButton,o=ei.getModifierKey(),a=ur(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary();for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t];if(n.mode===Mh&&(n.bindings.length&&n.bindings.some((e=>e.mouseButton===(i??s)&&e.modifierKey===o))))return a.getToolInstance(t)}}function Ph(e){const t=Oh(e);if(t){const{renderingEngineId:n,viewportId:i}=e.detail,o=ur(i,n),a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const n=function(e,t){const n=new Map,{renderingEngineId:i,viewportId:o}=e.detail,a=ur(o,i);if(!a)return n;const r=Object.keys(a.toolOptions),s=e.detail.key;for(let e=0;e<r.length;e++){const i=r[e],o=a.getToolInstance(i),l=o.configuration?.actions;if(!l)continue;const d=Object.values(l);if(!d?.length||!t.includes(o.mode))continue;const c=d.find((e=>e.bindings.some((e=>e.key===s))));c&&n.set(o,c)}return n}(e,[Oe.Active]);if(n?.size){const{element:t}=e.detail;for(const[i,o]of[...n.entries()])("function"==typeof o.method?o.method:i[o.method]).call(i,t,o,e)}}function Ah(e){const t=Oh(e);if(!t)return;const{renderingEngineId:n,viewportId:i}=e.detail,o=ur(i,n);Jn();const a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const Rh={enable:function(e){e.addEventListener(se.KEY_DOWN,Ph),e.addEventListener(se.KEY_UP,Ah)},disable:function(e){e.removeEventListener(se.KEY_DOWN,Ph),e.removeEventListener(se.KEY_UP,Ah)}},{Active:Lh}=Oe;function Nh(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,o=ur(n,t);if(!o)return null;const a=Object.keys(o.toolOptions),r=Object.keys(i.touches).length,s=ns(i)||ei.getModifierKey(),l=o.getDefaultMousePrimary();for(let e=0;e<a.length;e++){const t=a[e],n=o.toolOptions[t],i=n.bindings.length&&n.bindings.some((e=>(e.numTouchPoints===r||1===r&&e.mouseButton===l)&&e.modifierKey===s));if(n.mode===Lh&&i)return o.getToolInstance(t)}}function Uh(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=ur(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.numTouchPoints===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:kh,Passive:Vh}=Oe;function Wh(e){if(xe.isInteractingWithTool)return;const t=Nh(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;const n=1===Object.keys(e.detail.event.touches).length,i=[...Uh(e,[kh],Object.keys(e.detail.event.touches).length)||[],...(n?Uh(e,[Vh]):void 0)||[],t],o=e.detail,{element:a}=o,r=dh(a,i),s=o.currentPoints.canvas,l=lh(a,r,s,"touch"),d=!1;if(l.length>0){const{tool:t,annotation:n,handle:i}=Bh(l);return Hh(n.annotationUID,d),void t.handleSelectedCallback(e,n,i,"Touch")}const c=ch(a,r,s,"touch");if(c.length>0){const{tool:t,annotation:n}=Bh(c);return Hh(n.annotationUID,d),void t.toolSelectedCallback(e,n,"Touch")}!t||"function"!=typeof t.postTouchStartCallback||t.postTouchStartCallback(e)}function Bh(e){return e.length>1&&e.find((e=>!ue(e.annotation)&&Je(e.annotation.annotationUID)))||e[0]}function Hh(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?Ge(e)?We(e,!1):We(e,!0,!0):We(e,!0,!1)}function Fh(e){if(xe.isInteractingWithTool)return;const t=Nh(e);t&&!xe.isMultiPartToolActive&&t.addNewAnnotation&&We(t.addNewAnnotation(e,"touch").annotationUID)}function Gh(e){if(xe.isInteractingWithTool)return;const t=Nh(e);!t||"function"!=typeof t.touchDragCallback||t.touchDragCallback(e)}const $h=rh.bind(null,"Touch","touchEndCallback"),qh=rh.bind(null,"Touch","touchTapCallback"),zh=rh.bind(null,"Touch","touchPressCallback"),jh={enable:function(e){e.addEventListener(se.TOUCH_START,Wh),e.addEventListener(se.TOUCH_START_ACTIVATE,Fh),e.addEventListener(se.TOUCH_DRAG,Gh),e.addEventListener(se.TOUCH_END,$h),e.addEventListener(se.TOUCH_TAP,qh),e.addEventListener(se.TOUCH_PRESS,zh)},disable:function(e){e.removeEventListener(se.TOUCH_START,Wh),e.removeEventListener(se.TOUCH_START_ACTIVATE,Fh),e.removeEventListener(se.TOUCH_DRAG,Gh),e.removeEventListener(se.TOUCH_END,$h),e.removeEventListener(se.TOUCH_PRESS,zh)}};function Kh(e){const{element:t,viewportId:n}=e.detail,i=function(e){const t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),i=`svg-layer-${e}`;n.classList.add("svg-layer"),n.setAttribute("id",i),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.style.width="100%",n.style.height="100%",n.style.pointerEvents="none",n.style.position="absolute";const o=document.createElementNS(t,"defs"),a=document.createElementNS(t,"filter"),r=document.createElementNS(t,"feOffset"),s=document.createElementNS(t,"feColorMatrix"),l=document.createElementNS(t,"feBlend");return a.setAttribute("id",`shadow-${i}`),a.setAttribute("filterUnits","userSpaceOnUse"),r.setAttribute("result","offOut"),r.setAttribute("in","SourceGraphic"),r.setAttribute("dx","0.5"),r.setAttribute("dy","0.5"),s.setAttribute("result","matrixOut"),s.setAttribute("in","offOut"),s.setAttribute("in2","matrix"),s.setAttribute("values","0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0"),l.setAttribute("in","SourceGraphic"),l.setAttribute("in2","matrixOut"),l.setAttribute("mode","normal"),a.appendChild(r),a.appendChild(s),a.appendChild(l),o.appendChild(a),n.appendChild(o),n}(n);var o;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i=`${t}:${n}`;xe.svgNodeCache[i]={}}(t),o=i,t.querySelector("div.viewport-element").appendChild(o),Mr.addViewportElement(n,t),Kt.enable(t),Jt.enable(t),qn.enable(t),ei.enable(t),Bc.enable(t),Fc.enable(t),Kc.enable(t),Qc.enable(t),oh.enable(t),xh.enable(t),Rh.enable(t),jh.enable(t),xe.enabledElements.push(t)}const Yh=function(e,t){const n=[];if(!t&&!e)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let i=0;i<xe.synchronizers.length;i++){const o=xe.synchronizers[i],a=!o.isDisabled(),r=o.hasSourceViewport(t,e),s=o.hasTargetViewport(t,e);a&&(r||s)&&n.push(o)}return n},Xh=function(e){const{element:t,viewportId:n}=e.detail;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i=`${t}:${n}`;delete xe.svgNodeCache[i]}(t),function(e){const t=e.querySelector("div.viewport-element"),n=t.querySelector("svg");n&&t.removeChild(n)}(t),Mr.removeViewportElement(n,t),Kt.disable(t),Jt.disable(t),qn.disable(t),ei.disable(t),Bc.disable(t),Fc.disable(t),Kc.disable(t),Qc.disable(t),oh.disable(t),xh.disable(t),Rh.disable(t),jh.disable(t),(e=>{const t=(0,ie.getEnabledElement)(e);Yh(t.viewportId,t.renderingEngineId).forEach((e=>{e.remove(t)}))})(t),(e=>{const{renderingEngineId:t,viewportId:n}=(0,ie.getEnabledElement)(e),i=ur(n,t);i&&i.removeViewports(t,n)})(t),function(e){const t=xe.enabledElements.findIndex((t=>t===e));t>-1&&xe.enabledElements.splice(t,1)}(t)};function Jh(e){hd(e.detail.annotation)&&async function(e){const t=e.detail.annotation;if(!hd(t))return;const n=function(e){const t=dd(e),n=t.find((e=>fd(e,!0)));return n??t[0]}(t),i=function(e,t){const{annotationUID:n}=t;return dt().filter((i=>i.annotationUID&&i.annotationUID!==n&&hd(i)&&ud(i,t)&&e.isReferenceViewable(i.metadata)))}(n,t);if(!i.length)return;const o=wd(t.data.contour.polyline,n),a=function(e,t,n){const i=wa(t);for(let o=0;o<n.length;o++){const a=n[o],r=wd(a.data.contour.polyline,e),s=cd(i,wa(r)),l=s&&qa(t,r),d=s&&!l&&_a(r,t);if(l||d)return{targetAnnotation:a,targetPolyline:r,isContourHole:d}}}(n,o,i);if(!a)return;const{targetAnnotation:r,targetPolyline:s,isContourHole:l}=a;if(l){const{contourHoleProcessingEnabled:i=!1}=e.detail;if(!i)return;Id(n,r,t)}else!function(e,t,n,i,o){if(!(a=pd)||!xe.tools[a])return void console.warn(`${pd} is not registered in cornerstone`);var a;if(!fd(e))return;const r=Ca(n,o[0]),s=function(e,t){return gt(t).map((t=>({annotation:t,polyline:wd(t.data.contour.polyline,e)})))}(e,t),l=new Set(s),d=new Map,c=(e,t)=>{let n=d.get(e);n||(n=[],d.set(e,n)),n.push(t),l.delete(t)},h=[];if(r){const e=Fa(n,o);h.push(e),Array.from(l.keys()).forEach((t=>c(e,t)))}else Ga(n,o).forEach((e=>{h.push(e),Array.from(l.keys()).forEach((t=>{_a(e,t.polyline)&&(c(e,t),l.delete(t))}))}));Array.from(d.values()).forEach((e=>e.forEach((e=>ct(e.annotation)))));const{element:u}=e,g=(0,ie.getEnabledElement)(u),{metadata:m,data:v}=t,{handles:p,segmentation:f}=v,{textBox:w}=p;pt(i.annotationUID),pt(t.annotationUID);for(let n=0;n<h.length;n++){const i=h[n],o=e.canvasToWorld(i[0]),a=e.canvasToWorld(i[i.length-1]),r={metadata:{...m,toolName:pd,originalToolName:m.originalToolName||m.toolName},data:{cachedStats:{},handles:{points:[o,a],textBox:w?{...w}:void 0},contour:{polyline:[],closed:!0},spline:t.data.spline,segmentation:{...f}},annotationUID:ie.utilities.uuidv4(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};Os(r,{points:i,closed:!0,targetWindingDirection:os.Clockwise},e),mt(r,u),Lo(r),Le(r,e.element),d.get(i)?.forEach((e=>ht(r,e.annotation)))}!function(e,t,n){const{viewport:i}=e,{element:o}=i,a=new Set([pd,t.metadata.toolName,n.metadata.toolName]);for(const e of a.values()){const t=Ir(o,e);Ar(t)}new Promise((e=>window.requestAnimationFrame(e)))}(g,t,i)}(n,r,s,t,o)}(e)}const Zh=function(e){const{viewportId:t}=e.detail;Ar([t])},Qh=function(e){e.detail.removed.length&&(0,ie.getRenderingEngines)().forEach((e=>{Pr(e.getViewports().map((e=>e.id)))}))};function eu(e){hd(e.detail.annotation)&&function(e){gd(e.detail.annotation)}(e)}const tu=function(e){const{segmentationId:t}=e.detail;Uc(t)},nu=function(e){const{segmentationId:t}=e.detail,{type:n}=Yi(t);n===ri.Labelmap&&function(e){const{segmentationId:t,modifiedSlicesToUse:n}=e.detail;let i=n;const{representationData:o,type:a}=Yi(t),r=o[a];"stack"in r&&"volumeId"in r&&(i=[]),"volumeId"in r&&function(e){let{modifiedSlicesToUse:t,representationData:n,type:i}=e;const o=ie.cache.getVolume(n[i].volumeId);if(!o)return void console.warn("segmentation not found in cache");const{imageData:a,vtkOpenGLTexture:r}=o;let s;if(t?.length>0)s=t;else{const e=a.getDimensions()[2];s=[...Array(e).keys()]}s.forEach((e=>{r.setUpdatedFrame(e)})),a.modified()}({modifiedSlicesToUse:i,representationData:o,type:a});const s=To(t);"imageIds"in r&&function(e){let{viewportIds:t,segmentationId:n,representationData:i,type:o}=e;t.forEach((e=>{xi(e).forEach((t=>{if(t.segmentationId!==n)return;const i=(0,ie.getEnabledElementByViewportId)(e);if(!i)return;const{viewport:o}=i;if(o instanceof ie.VolumeViewport)return;const a=o.getActor(t.segmentationRepresentationUID);if(!a)return;const r=a.actor.getMapper().getInputData(),s=dc(e,t.segmentationId),l=ie.cache.getImage(s);r.modified(),ie.utilities.updateVTKImageDataWithCornerstoneImage(r,l)}))}))}({viewportIds:s,segmentationId:t,representationData:o,type:a})}(e),Uc(t)},iu=function(e){const{segmentationRepresentationUID:t}=e.detail,n=Si?Si(t):null;if(!n)return;const i=n?.segmentationId;Uc(i)},ou=function(e){const{segmentationRepresentationUID:t}=e.detail;Uc(Si(t).segmentationId)},au={enable:function(){ie.eventTarget.addEventListener(se.ANNOTATION_COMPLETED,kd.handleAnnotationCompleted),ie.eventTarget.addEventListener(se.ANNOTATION_MODIFIED,kd.handleAnnotationUpdate),ie.eventTarget.addEventListener(se.ANNOTATION_REMOVED,kd.handleAnnotationDelete)},disable:function(){ie.eventTarget.removeEventListener(se.ANNOTATION_COMPLETED,kd.handleAnnotationCompleted),ie.eventTarget.removeEventListener(se.ANNOTATION_MODIFIED,kd.handleAnnotationUpdate),ie.eventTarget.removeEventListener(se.ANNOTATION_REMOVED,kd.handleAnnotationDelete)}},ru=function(e){const t=xe.toolGroups.findIndex((t=>t.id===e));t>-1&&xe.toolGroups.splice(t,1)},su=function(){const e=[...xe.toolGroups];for(const t of e)ru(t.id);xe.toolGroups=[]};let lu=!1;function du(){lu||(function(){hu();const e=ie.Enums.Events.ELEMENT_ENABLED,t=ie.Enums.Events.ELEMENT_DISABLED;ie.eventTarget.addEventListener(e,Kh),ie.eventTarget.addEventListener(t,Xh),au.enable()}(),uu(),ie.eventTarget.addEventListener(se.ANNOTATION_COMPLETED,Jh),ie.eventTarget.addEventListener(se.ANNOTATION_MODIFIED,Zh),ie.eventTarget.addEventListener(se.ANNOTATION_SELECTION_CHANGE,Qh),ie.eventTarget.addEventListener(se.ANNOTATION_SELECTION_CHANGE,Qh),ie.eventTarget.addEventListener(se.ANNOTATION_REMOVED,eu),ie.eventTarget.addEventListener(se.SEGMENTATION_MODIFIED,tu),ie.eventTarget.addEventListener(se.SEGMENTATION_DATA_MODIFIED,nu),ie.eventTarget.addEventListener(se.SEGMENTATION_REPRESENTATION_MODIFIED,iu),ie.eventTarget.addEventListener(se.SEGMENTATION_REPRESENTATION_REMOVED,ou),lu=!0)}function cu(){hu(),uu(),su(),Se={},xe={...structuredClone({...ye,svgNodeCache:{}}),svgNodeCache:{...ye.svgNodeCache}};const e=at(),t=Di;e.restoreAnnotations({}),t.resetState(),lu=!1}function hu(){const e=ie.Enums.Events.ELEMENT_ENABLED,t=ie.Enums.Events.ELEMENT_DISABLED;ie.eventTarget.removeEventListener(e,Kh),ie.eventTarget.removeEventListener(t,Xh),au.disable()}function uu(){ie.eventTarget.removeEventListener(se.ANNOTATION_COMPLETED,Jh),ie.eventTarget.removeEventListener(se.ANNOTATION_MODIFIED,Zh),ie.eventTarget.removeEventListener(se.ANNOTATION_SELECTION_CHANGE,Qh),ie.eventTarget.removeEventListener(se.ANNOTATION_SELECTION_CHANGE,Qh),ie.eventTarget.removeEventListener(se.SEGMENTATION_MODIFIED,tu),ie.eventTarget.removeEventListener(se.SEGMENTATION_DATA_MODIFIED,nu),ie.eventTarget.removeEventListener(se.SEGMENTATION_REPRESENTATION_MODIFIED,iu),ie.eventTarget.removeEventListener(se.SEGMENTATION_REPRESENTATION_REMOVED,ou)}function gu(e){const t=dh(e,Dr(e,[Oe.Active,Oe.Passive]));for(const{tool:n}of t){const t=n.cancel(e);if(t)return t}}function mu(e,t){return e.findIndex((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))}function vu(e,t){return e.some((e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId))}const pu=class{constructor(e,t,n,i){ae(this,"_enabled",void 0),ae(this,"_eventName",void 0),ae(this,"_auxiliaryEventNames",void 0),ae(this,"_eventHandler",void 0),ae(this,"_ignoreFiredEvents",void 0),ae(this,"_sourceViewports",void 0),ae(this,"_targetViewports",void 0),ae(this,"_viewportOptions",{}),ae(this,"_options",void 0),ae(this,"id",void 0),ae(this,"_onEvent",(e=>{if(!0===this._ignoreFiredEvents)return;if(!this._targetViewports.length)return;const t=e.currentTarget,n=(0,ie.getEnabledElement)(t);if(!n)return;const{renderingEngineId:i,viewportId:o}=n;this._sourceViewports.find((e=>e.viewportId===o))&&this.fireEvent({renderingEngineId:i,viewportId:o},e)})),this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},this._auxiliaryEventNames=this._options.auxiliaryEventNames||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._viewportOptions[e]=t}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(vu(this._sourceViewports,e))return;const{renderingEngineId:t,viewportId:n}=e,i=(0,ie.getRenderingEngine)(t).getViewport(n);if(!i)return void console.warn(`Synchronizer.addSource: No viewport for ${t} ${n}`);const o=i.element;o.addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEventNames.length&&this._auxiliaryEventNames.forEach((e=>{o.addEventListener(e,this._onEvent.bind(this))})),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){vu(this._targetViewports,e)||(this._targetViewports.push(e),this._updateDisableHandlers())}getSourceViewports(){return this._sourceViewports}getTargetViewports(){return this._targetViewports}destroy(){this._sourceViewports.forEach((e=>this.removeSource(e))),this._targetViewports.forEach((e=>this.removeTarget(e)))}remove(e){this.removeTarget(e),this.removeSource(e)}removeSource(e){const t=mu(this._sourceViewports,e);if(-1===t)return;const n=function(e){const t=(0,ie.getRenderingEngine)(e.renderingEngineId);if(!t)throw new Error(`No RenderingEngine for Id: ${e.renderingEngineId}`);return t.getViewport(e.viewportId).element}(e);this._sourceViewports.splice(t,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEventNames&&this._auxiliaryEventNames.forEach((e=>{n.removeEventListener(e,this._eventHandler)})),this._updateDisableHandlers()}removeTarget(e){const t=mu(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return vu(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return vu(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let i=0;i<this._targetViewports.length;i++){const o=this._targetViewports[i];if(e.viewportId===o.viewportId)continue;const a=this._eventHandler(this,e,o,t,this._options);a instanceof Promise&&n.push(a)}}catch(e){console.warn(`Synchronizer, for: ${this._eventName}`,e)}finally{n.length?Promise.allSettled(n).then((()=>{this._ignoreFiredEvents=!1})):this._ignoreFiredEvents=!1}}_hasSourceElements(){return 0!==this._sourceViewports.length}_updateDisableHandlers(){const e=function(e,t){const n=[],i=e.concat(t);for(let e=0;e<i.length;e++){const t=i[e];n.some((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))||n.push(t)}return n}(this._sourceViewports,this._targetViewports),t=this.remove,n=e=>{t(e.detail.element)};e.forEach((function(e){const t=(0,ie.getRenderingEngine)(e.renderingEngineId);if(!t)return;const i=t.getViewport(e.viewportId);if(!i)return;const{element:o}=i;o.removeEventListener(ie.Enums.Events.ELEMENT_DISABLED,n),o.addEventListener(ie.Enums.Events.ELEMENT_DISABLED,n)}))}},fu=function(e,t,n,i){if(xe.synchronizers.some((t=>t.id===e)))throw new Error(`Synchronizer with id '${e}' already exists.`);const o=new pu(e,t,n,i);return xe.synchronizers.push(o),o},wu=function(){for(;xe.synchronizers.length>0;)xe.synchronizers.pop().destroy()},Iu=function(e){return xe.synchronizers.find((t=>t.id===e))},Eu=function(){return xe.synchronizers},Cu=function(e){const t=xe.synchronizers.findIndex((t=>t.id===e));t>-1&&(xe.synchronizers[t].destroy(),xe.synchronizers.splice(t,1))};var _u=E(485),bu=E.n(_u);class Tu extends Nr{constructor(e,t,n,i,o){super(i||Tu.getUniqueInstanceName("image-cursor"),o),ae(this,"url",void 0),ae(this,"x",void 0),ae(this,"y",void 0),this.url=e,this.x=Number(t)||0,this.y=Number(n)||0}getStyleProperty(){const{url:e,x:t,y:n}=this;let i=`url('${e}')`;return t>=0&&n>=0&&(t>0||n>0)&&(i+=` ${t} ${n}`),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return`${e}-${ie.utilities.getRuntimeId(Tu)}`}}const Du={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:'\n <path stroke="{{color}}" d="M8 16L8 0"></path>\n <path stroke="{{color}}" d="M16 8L0 8"></path>\n '},Su={x:127,y:60},yu='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n',xu='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n<rect fill="{{color}}" x="95.84" y="9.38" width="15.85" height="47.14"/>\n',Mu='<path fill="{{color}}" d="M82.89,10a12.09,12.09,0,0,0-16.8-2.5l-27.5,20.4-8.5-6.3a2.93,2.93,0,0,1-1.1-3,14.66,14.66,0,0,0,.1-6.6,14.08,14.08,0,1,0-6.5,15.2,2.87,2.87,0,0,1,3.2.2l8.2,6.1-8.2,6.1a2.87,2.87,0,0,1-3.2.2,14.16,14.16,0,1,0,6.7,14.4,14,14,0,0,0-.3-5.8,2.93,2.93,0,0,1,1.1-3l8.5-6.3,27.5,20.4A11.91,11.91,0,0,0,82.89,57l-31.7-23.5ZM15.29,21a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,21Zm0,36.8a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,57.77Zm28.3-21.5a2.8,2.8,0,1,1,2.8-2.8A2.8,2.8,0,0,1,43.59,36.27Z" transform="translate(-1.17 -0.96)"/>',Ou='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',Pu='<path fill="{{color}}" d="M40.77,2.25A31.92,31.92,0,1,0,72.69,34.16,31.92,31.92,0,0,0,40.77,2.25Zm0,57.63A25.71,25.71,0,1,1,66.48,34.16,25.71,25.71,0,0,1,40.77,59.87Z" transform="translate(-8.86 -2.25)"/>',Au={Angle:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50\n 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23\n 10l50 50q10 10 10 23z" />',viewBox:{x:1792,y:1792}}),ArrowAnnotate:Ru(Du,{iconContent:'<g id="arrowAnnotate-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="arrowAnnotate-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />\n </g>',viewBox:{x:24,y:24}}),Bidirectional:Ru(Du,{iconContent:'<g fill="{{color}}" stroke-width="3" stroke="{{color}}">\n <path d="M27.63 3.21L3.12 28.81"></path>\n <path d="M27.63 15.75L15.27 4.43"></path>\n <path d="M16.5 4.28C16.5 4.96 15.95 5.51 15.27 5.51C14.59 5.51 14.03 4.96 14.03 4.28C14.03 3.59 14.59 3.04 15.27 3.04C15.95 3.04 16.5 3.59 16.5 4.28Z" ></path>\n <path d="M28.87 3.19C28.87 3.87 28.31 4.43 27.63 4.43C26.95 4.43 26.4 3.87 26.4 3.19C26.4 2.51 26.95 1.95 27.63 1.95C28.31 1.95 28.87 2.51 28.87 3.19Z"></path>\n <path d="M28.87 15.75C28.87 16.43 28.31 16.99 27.63 16.99C26.95 16.99 26.4 16.43 26.4 15.75C26.4 15.07 26.95 14.51 27.63 14.51C28.31 14.51 28.87 15.07 28.87 15.75Z"></path>\n <path d="M4.73 28.44C4.73 29.12 4.17 29.68 3.49 29.68C2.81 29.68 2.25 29.12 2.25 28.44C2.25 27.76 2.81 27.2 3.49 27.2C4.17 27.2 4.73 27.76 4.73 28.44Z"></path>\n </g>',viewBox:{x:48,y:48}}),CobbAngle:Ru(Du,{iconContent:'<g stroke="{{color}}" stroke-width="3">\n <path d="M28.59 2.34L3.82 12.32"></path>\n <path d="M28.59 29.66L3.82 19.68"></path>\n <path stroke-dasharray="2" fill-opacity="0" d="M12.37\n 23.06C12.67 22.36 12.85 21.93 12.92 21.76C14.6 17.8 14.68 13.35 13.15\n 9.33C13.11 9.24 13.02 9 12.88 8.63">\n </path>\n </g>',viewBox:{x:32,y:32}}),CircleROI:Ru(Du,{iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:Ru(Du,{iconContent:'<path stroke="{{color}}" fill="none" stroke-width="3" d="M30.74 15.76C30.74 20.99 24.14 25.23 16\n 25.23C7.86 25.23 1.26 20.99 1.26 15.76C1.26 10.54 7.86 6.3 16 6.3C24.14\n 6.3 30.74 10.54 30.74 15.76Z" />',viewBox:{x:32,y:32}}),FreehandROI:Ru(Du,{iconContent:'<g fill="{{color}}" stroke="{{color}}" stroke-width="2">\n <ellipse ry="1" rx="1" id="svg_3" cy="4.240343" cx="14.306499"/>\n <line id="svg_4" y2="3.58462" x2="12.242186" y1="3.997482" x1="13.432202"/>\n <line id="svg_5" y2="3.268901" x2="10.857882" y1="3.608906" x1="12.387902"/>\n <line id="svg_6" y2="3.147471" x2="9.740724" y1="3.293187" x1="10.955026"/>\n <line id="svg_7" y2="3.147471" x2="8.089274" y1="3.196043" x1="9.983585"/>\n <line id="svg_8" y2="3.268901" x2="6.874972" y1="3.123185" x1="8.307848"/>\n <line id="svg_9" y2="3.657478" x2="5.587812" y1="3.220329" x1="7.020688"/>\n <line id="svg_10" y2="4.046054" x2="4.737801" y1="3.560334" x1="5.854959"/>\n <line id="svg_11" y2="4.337487" x2="4.300652" y1="3.997482" x1="4.834945"/>\n <line id="svg_12" y2="4.726063" x2="3.88779" y1="4.191771" x1="4.470655"/>\n <line id="svg_15" y2="5.3575" x2="3.377783" y1="4.604633" x1="3.960648"/>\n <line id="svg_16" y2="6.183226" x2="2.916348" y1="5.138926" x1="3.547785"/>\n <line id="svg_17" y2="6.960379" x2="2.770632" y1="5.867507" x1="3.037779"/>\n <line id="svg_18" y2="7.713246" x2="2.673488" y1="6.741804" x1="2.819204"/>\n <line id="svg_19" y2="8.684687" x2="2.697774" y1="7.616102" x1="2.673488"/>\n <line id="svg_20" y2="9.753273" x2="2.892062" y1="8.611829" x1="2.697774"/>\n <line id="svg_21" y2="10.724714" x2="3.134923" y1="9.534698" x1="2.84349"/>\n <line id="svg_23" y2="11.647583" x2="3.596357" y1="10.578998" x1="3.086351"/>\n <line id="svg_25" y2="12.521881" x2="4.276366" y1="11.501867" x1="3.499213"/>\n <line id="svg_26" y2="13.930471" x2="5.830673" y1="12.376165" x1="4.13065"/>\n <line id="svg_28" y2="14.707624" x2="7.263549" y1="13.881899" x1="5.733528"/>\n <line id="svg_29" y2="15.339061" x2="8.963571" y1="14.61048" x1="7.06926"/>\n <line id="svg_30" y2="15.581921" x2="10.882168" y1="15.314775" x1="8.817855"/>\n <line id="svg_31" y2="15.460491" x2="12.023612" y1="15.581921" x1="10.785024"/>\n <line id="svg_33" y2="15.120487" x2="13.092197" y1="15.484777" x1="11.877895"/>\n <line id="svg_34" y2="14.586194" x2="13.86935" y1="15.217631" x1="12.897909"/>\n <line id="svg_35" y2="13.833327" x2="14.597931" y1="14.756196" x1="13.699348"/>\n <line id="svg_37" y2="12.716169" x2="15.180796" y1="13.881899" x1="14.549359"/>\n <line id="svg_39" y2="11.429009" x2="15.520801" y1="12.813313" x1="15.15651"/>\n <ellipse ry="1" rx="1" id="svg_40" cy="10.967574" cx="15.520801"/>\n </g>',viewBox:{x:18,y:18}}),FreehandROISculptor:Ru(Du,{iconContent:'<g id="icon-freehand-sculpt" fill="none" stroke-width="1.5" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <line id="svg_1" y2="2.559367" x2="10.184807" y1="4.467781" x1="8.81711"/>\n <line id="svg_4" y2="1.493836" x2="11.727442" y1="2.766112" x1="10.089386"/>\n <line id="svg_7" y2="1.080346" x2="13.047428" y1="1.748291" x1="11.345759"/>\n <line id="svg_8" y2="1.000829" x2="14.351511" y1="1.112153" x1="12.77707"/>\n <line id="svg_9" y2="1.350705" x2="15.242104" y1="0.905408" x1="13.969828"/>\n <line id="svg_10" y2="2.098167" x2="15.862339" y1="1.14396" x1="14.955842"/>\n <line id="svg_11" y2="3.195505" x2="16.41896" y1="1.939133" x1="15.766918"/>\n <line id="svg_12" y2="4.292843" x2="16.530284" y1="2.925147" x1="16.387153"/>\n <line id="svg_16" y2="5.644637" x2="16.196311" y1="3.831643" x1="16.593898"/>\n <line id="svg_18" y2="7.266789" x2="15.623787" y1="5.19934" x1="16.275829"/>\n <line id="svg_19" y2="10.813258" x2="14.526449" y1="6.726071" x1="15.766918"/>\n <line id="svg_20" y2="5.056209" x2="8.085552" y1="4.181519" x1="8.976145"/>\n <line id="svg_23" y2="5.326568" x2="7.481221" y1="4.78585" x1="8.403621"/>\n <line id="svg_24" y2="5.565119" x2="6.749662" y1="5.294761" x1="7.624352"/>\n <line id="svg_25" y2="5.994512" x2="5.429675" y1="5.533312" x1="6.956407"/>\n <line id="svg_27" y2="6.551133" x2="4.284627" y1="5.962706" x1="5.572807"/>\n <line id="svg_28" y2="7.584858" x2="3.044158" y1="6.392099" x1="4.427758"/>\n <line id="svg_29" y2="8.84123" x2="2.185372" y1="7.489437" x1="3.219096"/>\n <line id="svg_31" y2="10.606513" x2="1.644654" y1="8.602678" x1="2.280792"/>\n <line id="svg_32" y2="13.214679" x2="1.48562" y1="10.352058" x1="1.724171"/>\n <line id="svg_33" y2="14.375631" x2="1.676461" y1="12.992031" x1="1.453813"/>\n <line id="svg_34" y2="15.298031" x2="2.264889" y1="14.152983" x1="1.517427"/>\n <line id="svg_35" y2="16.172721" x2="3.521261" y1="14.948155" x1="1.915013"/>\n <line id="svg_36" y2="16.824762" x2="5.207027" y1="15.997783" x1="3.28271"/>\n <line id="svg_38" y2="17.063314" x2="7.035924" y1="16.745245" x1="4.968475"/>\n <line id="svg_39" y2="16.888376" x2="9.278311" y1="17.047411" x1="6.733758"/>\n <line id="svg_40" y2="16.284045" x2="10.661911" y1="16.983797" x1="8.992048"/>\n <line id="svg_41" y2="15.313934" x2="11.647925" y1="16.395369" x1="10.455166"/>\n <line id="svg_44" y2="13.898527" x2="12.82478" y1="15.425259" x1="11.504794"/>\n <line id="svg_45" y2="12.037824" x2="14.144766" y1="14.312017" x1="12.522614"/>\n <line id="svg_47" y2="10.59061" x2="14.605966" y1="12.228665" x1="13.953925"/>\n <ellipse ry="1" rx="1" id="svg_48" cy="3.982726" cx="13.460918"/>\n </g>',viewBox:{x:18,y:18}}),Length:Ru(Du,{iconContent:'<g id="length-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="length-dashes" d="m22.5,6 -16.5,16.5" stroke-width="3" stroke-dasharray="0.6666,5" />\n </g>',viewBox:{x:24,y:24}}),Height:Ru(Du,{iconContent:'<path d="m 6 22 l 8.5 0 v -16 h 8" stroke-width="3" fill="none" stroke="{{color}}" />',viewBox:{x:24,y:24}}),Probe:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75\n 75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73\n 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5\n 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5\n 385.5-103 385.5 103 279.5 279.5 103 385.5z" />',viewBox:{x:1792,y:1792}}),RectangleROI:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47\n 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0\n 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119\n 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),TextMarker:Ru(Du,{iconContent:'<path fill="{{color}}" d="M789 559l-170 450q33 0 136.5 2t160.5 2q19 0\n 57-2-87-253-184-452zm-725 1105l2-79q23-7 56-12.5t57-10.5 49.5-14.5 44.5-29\n 31-50.5l237-616 280-724h128q8 14 11 21l205 480q33 78 106 257.5t114 274.5q15\n 34 58 144.5t72 168.5q20 45 35 57 19 15 88 29.5t84 20.5q6 38 6 57 0 5-.5\n 13.5t-.5 12.5q-63 0-190-8t-191-8q-76 0-215 7t-178 8q0-43 4-78l131-28q1 0\n 12.5-2.5t15.5-3.5 14.5-4.5 15-6.5 11-8 9-11\n 2.5-14q0-16-31-96.5t-72-177.5-42-100l-450-2q-26 58-76.5 195.5t-50.5 162.5q0\n 22 14 37.5t43.5 24.5 48.5 13.5 57 8.5 41 4q1 19 1 58 0 9-2 27-58\n 0-174.5-10t-174.5-10q-8 0-26.5 4t-21.5 4q-80 14-188 14z" />',viewBox:{x:1792,y:1792}}),Crosshairs:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1325 1024h-109q-26 0-45-19t-19-45v-128q0-26\n 19-45t45-19h109q-32-108-112.5-188.5t-188.5-112.5v109q0 26-19 45t-45\n 19h-128q-26 0-45-19t-19-45v-109q-108 32-188.5 112.5t-112.5 188.5h109q26\n 0 45 19t19 45v128q0 26-19 45t-45 19h-109q32 108 112.5 188.5t188.5\n 112.5v-109q0-26 19-45t45-19h128q26 0 45 19t19 45v109q108-32\n 188.5-112.5t112.5-188.5zm339-192v128q0 26-19 45t-45 19h-143q-37 161-154.5\n 278.5t-278.5 154.5v143q0 26-19 45t-45 19h-128q-26\n 0-45-19t-19-45v-143q-161-37-278.5-154.5t-154.5-278.5h-143q-26\n 0-45-19t-19-45v-128q0-26 19-45t45-19h143q37-161\n 154.5-278.5t278.5-154.5v-143q0-26 19-45t45-19h128q26 0 45 19t19 45v143q161\n 37 278.5 154.5t154.5 278.5h143q26 0 45 19t19 45z" />',viewBox:{x:1792,y:1792}}),Eraser:Ru(Du,{iconContent:'<path transform="translate(0,1792) scale(1,-1)" fill="{{color}}" d="M960 1408l336-384h-768l-336 384h768zm1013-1077q15\n 34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38\n 0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38\n 0 69.5 20.5t47.5 54.5z" />',viewBox:{x:2048,y:1792}}),Magnify:Ru(Du,{iconContent:'<path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />',viewBox:{x:512,y:512}}),Pan:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1411 541l-355 355 355 355 144-144q29-31 70-14 39 17\n 39 59v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39 14-69l144-144-355-355-355\n 355 144 144q31 30 14 69-17 40-59 40h-448q-26 0-45-19t-19-45v-448q0-42 40-59\n 39-17 69 14l144 144 355-355-355-355-144 144q-19 19-45 19-12\n 0-24-5-40-17-40-59v-448q0-26 19-45t45-19h448q42 0 59 40 17 39-14 69l-144\n 144 355 355 355-355-144-144q-31-30-14-69 17-40 59-40h448q26 0 45 19t19\n 45v448q0 42-39 59-13 5-25 5-26 0-45-19z" />',viewBox:{x:1792,y:1792}}),Rotate:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1664 256v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39\n 14-69l138-138q-148-137-349-137-104 0-198.5 40.5t-163.5 109.5-109.5\n 163.5-40.5 198.5 40.5 198.5 109.5 163.5 163.5 109.5 198.5 40.5q119 0\n 225-52t179-147q7-10 23-12 15 0 25 9l137 138q9 8 9.5 20.5t-7.5 22.5q-109\n 132-264 204.5t-327 72.5q-156 0-298-61t-245-164-164-245-61-298 61-298\n 164-245 245-164 298-61q147 0 284.5 55.5t244.5 156.5l130-129q29-31 70-14\n 39 17 39 59z" />',viewBox:{x:1792,y:1792}}),StackScroll:Ru(Du,{iconContent:'<path fill="{{color}}" d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0\n 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547\n 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z" />',viewBox:{x:24,y:28}}),WindowLevelRegion:Ru(Du,{iconContent:'<path fill="{{color}}" d="M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119\n 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5\n 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),WindowLevel:Ru(Du,{iconContent:'\n <path fill="{{color}}" d="M14.5,3.5 a1 1 0 0 1 -11,11 Z" stroke="none" opacity="0.8" />\n <circle cx="9" cy="9" r="8" fill="none" stroke-width="2" stroke="{{color}}" />',viewBox:{x:18,y:18}}),Zoom:Ru(Du,{iconContent:'\n <path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />\n <path fill="{{color}}" transform="scale(0.22,0.22) translate(1400,0)" d="M1216\n 320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19\n 19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26\n 0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z" />',viewBox:{x:640,y:512}}),SegmentationFreeHandEraseInside:Ru(Du,{iconContent:`${Mu} ${yu}`,viewBox:Su}),SegmentationFreeHandFillInside:Ru(Du,{iconContent:`${Mu} ${xu}`,viewBox:Su}),SegmentationFreeHandEraseOutside:Ru(Du,{iconContent:`${Mu} ${yu}`,viewBox:Su}),SegmentationFreeHandFillOutside:Ru(Du,{iconContent:`${Mu} ${xu}`,viewBox:Su}),SegmentationRectangleEraseInside:Ru(Du,{iconContent:`${Ou} ${yu}`,viewBox:Su}),RectangleScissor:Ru(Du,{iconContent:`${Ou} ${xu}`,viewBox:Su}),"RectangleScissor.FILL_INSIDE":Ru(Du,{iconContent:`${Ou} ${xu}`,viewBox:Su}),"RectangleScissor.FILL_OUTSIDE":Ru(Du,{iconContent:`${Ou} ${xu}`,viewBox:Su}),"RectangleScissor.ERASE_OUTSIDE":Ru(Du,{iconContent:`${Ou} ${yu}`,viewBox:Su}),"RectangleScissor.ERASE_INSIDE":Ru(Du,{iconContent:`${Ou} ${yu}`,viewBox:Su}),CircleScissor:Ru(Du,{iconContent:`${Pu} ${xu}`,viewBox:Su}),"CircleScissor.FILL_INSIDE":Ru(Du,{iconContent:`${Pu} ${xu}`,viewBox:Su}),"CircleScissor.ERASE_OUTSIDE":Ru(Du,{iconContent:`${Pu} ${yu}`,viewBox:Su}),"CircleScissor.FILL_OUTSIDE":Ru(Du,{iconContent:`${Pu} ${xu}`,viewBox:Su})};function Ru(e,t){return Object.assign(Object.create(e),t)}function Lu(e,t,n){Au[e]=Ru(Du,{iconContent:t,viewBox:n})}const Nu=Object.keys(Au),Uu=zl.Highlighted,ku=Oe.Active;class Vu extends Tu{constructor(e,t,n,i,o){super(e,t,n,i,o)}static getDefinedCursor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;n||(n=$l("color",{},Uu,ku));const i=function(e,t,n){return`${t?"pointer":"cursor"}:${e}/${n}`}(e,t,n);let o=super.getDefinedCursor(i);if(!o){const a=function(e){return Au[e]}(e);a&&(o=function(e,t,n,i,o){const{x:a,y:r}=e.mousePoint;return new Vu(function(e,t,n){return URL.createObjectURL(function(e,t,n){const i=(t?Hu:Bu)(e,n);return new Blob([i],{type:"image/svg+xml"})}(e,t,n))}(e,n,{color:i}),a,r,t,o)}(a,i,t,n,super.getDefinedCursor("default")),super.setDefinedCursor(i,o))}return o}}function Wu(e,t){const n=Object(t),i=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,((e,t)=>i(t)?n[t]+"":""))}function Bu(e,t){const{iconContent:n,iconSize:i,viewBox:o}=e;return Wu(`\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="${i}" height="${i}" viewBox="0 0\n ${o.x} ${o.y}">\n ${n}\n </svg>`,t)}function Hu(e,t){const{iconContent:n,iconSize:i,viewBox:o,mousePointerGroupString:a}=e,r=16+i;return Wu(`\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="${r}" height="${r}" viewBox="0 0 ${r} ${r}">\n <g>${a}</g>\n <g transform="translate(16, 16) scale(${i/Math.max(o.x,o.y,1)})">${n}</g>\n </svg>`,t)}const{Active:Fu,Passive:Gu,Enabled:$u,Disabled:qu}=Oe,zu=[{mouseButton:es.Primary}];class ju{constructor(e){ae(this,"id",void 0),ae(this,"viewportsInfo",[]),ae(this,"toolOptions",{}),ae(this,"currentActivePrimaryToolName",null),ae(this,"prevActivePrimaryToolName",null),ae(this,"restoreToolOptions",{}),ae(this,"_toolInstances",{}),this.id=e}getViewportIds(){return this.viewportsInfo.map((e=>{let{viewportId:t}=e;return t}))}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){const t=this._toolInstances[e];if(t)return t;console.warn(`'${e}' is not registered with this toolGroup (${this.id}).`)}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=xe.tools[e],i=void 0!==e&&""!==e,o=this.toolOptions[e];if(!i)return void console.warn("Tool with configuration did not produce a toolName: ",t);if(!n)return void console.warn(`'${e}' is not registered with the library. You need to use cornerstoneTools.addTool to register it.`);if(o)return void console.warn(`'${e}' is already registered for ToolGroup ${this.id}.`);const{toolClass:a}=n,r=new a({name:e,toolGroupId:this.id,configuration:t});this._toolInstances[e]=r}addToolInstance(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=xe.tools[e]?.toolClass;if(!i){const n=xe.tools[t].toolClass;class o extends n{}o.toolName=e,i=o,xe.tools[e]={toolClass:o}}this.addTool(i.toolName,n)}addViewport(e,t){if("string"!=typeof e)throw new Error("viewportId must be defined and be a string");const n=(0,ie.getRenderingEngines)();if(0===n?.length)throw new Error("No rendering engines found.");if(n.length>1)throw new Error("Multiple rendering engines found. You must specify a renderingEngineId.");const i=t||n[0].id;this.viewportsInfo.some((t=>{let{viewportId:n}=t;return n===e}))||this.viewportsInfo.push({viewportId:e,renderingEngineId:i});const o=this.getActivePrimaryMouseButtonTool();ie.Settings.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(o);const a={toolGroupId:this.id,viewportId:e,renderingEngineId:i};(0,ie.triggerEvent)(ie.eventTarget,se.TOOLGROUP_VIEWPORT_ADDED,a)}removeViewports(e,t){const n=[];if(this.viewportsInfo.forEach(((i,o)=>{let a=!1;i.renderingEngineId===e&&(a=!0,t&&i.viewportId!==t&&(a=!1)),a&&n.push(o)})),n.length)for(let e=n.length-1;e>=0;e--)this.viewportsInfo.splice(n[e],1);const i={toolGroupId:this.id,viewportId:t,renderingEngineId:e};(0,ie.triggerEvent)(ie.eventTarget,se.TOOLGROUP_VIEWPORT_REMOVED,i)}setActiveStrategy(e,t){const n=this._toolInstances[e];void 0!==n?n.setActiveStrategy(t):console.warn(`Tool ${e} not added to toolGroup, can't set tool configuration.`)}setToolMode(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e?t!==Oe.Active?t!==Oe.Passive?t!==Oe.Enabled?t!==Oe.Disabled?console.warn("setToolMode: mode must be defined"):this.setToolDisabled(e):this.setToolEnabled(e):this.setToolPassive(e):this.setToolActive(e,n||this.restoreToolOptions[e]):console.warn("setToolMode: toolName must be defined")}setToolActive(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);if(!n)return void console.warn(`'${e}' instance ${n} is not registered with this toolGroup, can't set tool mode.`);const i={bindings:[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce(((e,t)=>{const n=void 0!==t.numTouchPoints,i=void 0!==t.mouseButton;return e.some((e=>Ku(e,t)))||!n&&!i||e.push(t),e}),[]),mode:Fu};this.toolOptions[e]=i,this._toolInstances[e].mode=Fu;const o=ie.Settings.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(t)&&o)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&o){const e=Nr.getDefinedCursor("default");this._setCursorForViewports(e)}this._hasMousePrimaryButtonBinding(t)&&(null===this.prevActivePrimaryToolName?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();const a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,ie.triggerEvent)(ie.eventTarget,se.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,Fu,t)}setToolPassive(e,t){const n=this._toolInstances[e];if(void 0===n)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);const i=this.getToolOptions(e),o=Object.assign({bindings:i?i.bindings:[]},i,{mode:Gu}),a=Array.isArray(t?.removeAllBindings)?t.removeAllBindings:this.getDefaultPrimaryBindings();o.bindings=o.bindings.filter((e=>!0!==t?.removeAllBindings&&!a.some((t=>Ku(e,t)))));let r=Gu;0!==o.bindings.length&&(r=Fu,o.mode=r),this.toolOptions[e]=o,n.mode=r,"function"==typeof n.onSetToolPassive&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Gu)}setToolEnabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);const n={bindings:[],mode:$u};this.toolOptions[e]=n,t.mode=$u,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,$u)}setToolDisabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);const n={bindings:[],mode:qu};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,t.mode=qu,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,qu)}getToolOptions(e){const t=this.toolOptions[e];if(void 0!==t)return t}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find((e=>{const t=this.toolOptions[e];return t.mode===Fu&&this._hasMousePrimaryButtonBinding(t)}))}setViewportsCursorByToolName(e,t){const n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,i;return t&&(n=`${e}.${t}`,i=Vu.getDefinedCursor(n,!0),i)?i:(n=`${e}`,i=Vu.getDefinedCursor(n,!0),i||(n=e,i=Vu.getDefinedCursor(n,!0),i||Nr.getDefinedCursor("default")))}_setCursorForViewports(e){this.viewportsInfo.forEach((t=>{let{renderingEngineId:n,viewportId:i}=t;const o=(0,ie.getEnabledElementByIds)(i,n);if(!o)return;const{viewport:a}=o;Wr(a.element,e)}))}setToolConfiguration(e,t,n){const i=this._toolInstances[e];if(void 0===i)return console.warn(`Tool ${e} not present, can't set tool configuration.`),!1;let o;return o=n?t:Object.assign(i.configuration,t),i.configuration=o,"function"==typeof i.onSetToolConfiguration&&i.onSetToolConfiguration(),this._renderViewports(),!0}getDefaultMousePrimary(){return es.Primary}getDefaultPrimaryBindings(){return zu}getToolConfiguration(e,t){if(void 0===this._toolInstances[e])return void console.warn(`Tool ${e} not present, can't set tool configuration.`);const n=bu()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return structuredClone(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}setActivePrimaryTool(e){const t=this.getCurrentActivePrimaryToolName();this.setToolDisabled(t),this.setToolActive(e,{bindings:[{mouseButton:es.Primary}]})}getCurrentActivePrimaryToolName(){return this.currentActivePrimaryToolName}clone(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=Wd(e);return n?(console.debug(`ToolGroup ${e} already exists`),n):(n=new ju(e),xe.toolGroups.push(n),t=t??(()=>!0),Object.keys(this._toolInstances).filter(t).forEach((e=>{const t=this._toolInstances[e],i=this.toolOptions[e],o=t.mode;n.addTool(e),n.setToolMode(e,o,{bindings:i.bindings??[]})})),n)}_hasMousePrimaryButtonBinding(e){const t=this.getDefaultPrimaryBindings();return e?.bindings?.some((e=>t.some((t=>Ku(e,t)))))}_renderViewports(){this.viewportsInfo.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;(0,ie.getRenderingEngine)(t).renderViewport(n)}))}_triggerToolModeChangedEvent(e,t,n){const i={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,ie.triggerEvent)(ie.eventTarget,se.TOOL_MODE_CHANGED,i)}}function Ku(e,t){return e.mouseButton===t.mouseButton&&e.numTouchPoints===t.numTouchPoints&&e.modifierKey===t.modifierKey}const Yu=function(e){if(xe.toolGroups.some((t=>t.id===e)))return void console.warn(`'${e}' already exists.`);const t=new ju(e);return xe.toolGroups.push(t),t},Xu=function(){return xe.toolGroups};function Ju(e,t,n,i){const{camera:o}=i.detail,a=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const r=a.getViewport(n.viewportId);r.setCamera(o),r.render()}const{CAMERA_MODIFIED:Zu}=ie.Enums.Events;function Qu(e){return fu(e,Zu,Ju)}function eg(e,t,n,i,o){const a=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const r=a.getViewport(n.viewportId),s=a.getViewport(t.viewportId).getViewPresentation(o);r.setViewPresentation(s),r.render()}const{CAMERA_MODIFIED:tg}=ie.Enums.Events;function ng(e,t){return fu(e,tg,eg,{viewPresentation:t})}function ig(e,t,n,i,o){const a=i.detail,{volumeId:r,range:s,invertStateChanged:l,invert:d,colormap:c}=a,h=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!h)throw new Error(`Rendering Engine does not exist: ${n.renderingEngineId}`);const u=h.getViewport(n.viewportId),g={voiRange:s};if(o?.syncInvertState&&l&&(g.invert=d),o?.syncColormap&&c&&(g.colormap=c),u instanceof ie.BaseVolumeViewport)u._actors&&u._actors.size>1?u.setProperties(g,r):u.setProperties(g);else{if(!(u instanceof ie.StackViewport))throw new Error("Viewport type not supported.");u.setProperties(g)}u.render()}function og(e,t){return t=Object.assign({syncInvertState:!0,syncColormap:!0},t),fu(e,ie.Enums.Events.VOI_MODIFIED,ig,{auxiliaryEventNames:[ie.Enums.Events.COLORMAP_MODIFIED],...t})}function ag(e,t,n){const i=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const o=e.getOptions(n.viewportId),a=i.getViewport(n.viewportId),r=i.getViewport(t.viewportId);if(!1!==o?.syncZoom){const e=r.getZoom();a.setZoom(e)}if(!1!==o?.syncPan){const e=r.getPan();a.setPan(e)}a.render()}const{CAMERA_MODIFIED:rg}=ie.Enums.Events;function sg(e){return fu(e,rg,ag)}const lg=function(e,t,n){return Math.min(Math.max(t,e),n)};function dg(e,t){if(!(0,ie.getEnabledElement)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof ie.StackViewport&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{volumeId:n,delta:i,scrollSlabs:o}=t;e instanceof ie.VolumeViewport?function(e,t,n){const i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],{numScrollSteps:o,currentStepIndex:a,sliceRangeInfo:r}=ie.utilities.getVolumeViewportScrollInfo(e,t,i);if(!r)return;const{sliceRange:s,spacingInNormalDirection:l,camera:d}=r,{focalPoint:c,viewPlaneNormal:h,position:u}=d,{newFocalPoint:g,newPosition:m}=ie.utilities.snapFocalPointToSlice(c,u,s,h,l,n);e.setCamera({focalPoint:g,position:m}),e.render();const v=a+n,p={volumeId:t,viewport:e,delta:n,desiredStepIndex:v,currentStepIndex:a,numScrollSteps:o,currentImageId:e.getCurrentImageId()};(v>o||v<0)&&e.getCurrentImageId()?ie.utilities.triggerEvent(ie.eventTarget,ie.EVENTS.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS,p):ie.utilities.triggerEvent(ie.eventTarget,ie.EVENTS.VOLUME_VIEWPORT_SCROLL,p)}(e,n,i,o):e.scroll(i,t.debounceLoading,t.loop)}const cg=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageIndex:n,debounceLoading:i,volumeId:o}=t,a=(0,ie.getEnabledElement)(e);if(!a)throw new Error("Element has been disabled");const{viewport:r}=a,{imageIndex:s,numberOfSlices:l}=function(e,t){return e instanceof ie.StackViewport?{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()}:{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getSliceIndex()}}(r,i),d=function(e,t){return lg(t,0,e-1)}(l,n);dg(r,{delta:d-s,debounceLoading:i,volumeId:o})},hg=(e,t)=>ie.utilities.spatialRegistrationMetadataProvider.get("spatialRegistrationModule",e,t);async function ug(e,t,n){const i=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const o=i.getViewport(t.viewportId),a=e.getOptions(n.viewportId);if(a?.disabled)return;const r=i.getViewport(n.viewportId),s=o.getCurrentImageId(),l=ie.metaData.get("imagePlaneModule",s).imagePositionPatient,d=r.getImageIds();if(!function(e,t){const{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:i}=t.getCamera(),o=Oo.vec3.dot(n,i);return Math.abs(o)>.9}(o,r))return;let c=hg(n.viewportId,t.viewportId);if(!c&&(o.getFrameOfReferenceUID()===r.getFrameOfReferenceUID()&&!1!==a?.useInitialPosition?c=Oo.mat4.identity(Oo.mat4.create()):(ie.utilities.calculateViewportsSpatialRegistration(o,r),c=hg(n.viewportId,t.viewportId)),!c))return;const h=Oo.vec3.transformMat4(Oo.vec3.create(),l,c),u=(g=h,d.reduce(((e,t,n)=>{const{imagePositionPatient:i}=ie.metaData.get("imagePlaneModule",t),o=Oo.vec3.distance(i,g);return o<e.distance?{distance:o,index:n}:e}),{distance:1/0,index:-1}));var g;let m=u.index;r instanceof ie.VolumeViewport&&(m=d.length-u.index-1),-1!==u.index&&r.getCurrentImageIdIndex()!==u.index&&await cg(r.element,{imageIndex:m})}const{STACK_NEW_IMAGE:gg,VOLUME_NEW_IMAGE:mg}=ie.Enums.Events;function vg(e){return fu(e,gg,ug,{auxiliaryEventNames:[mg]})}function pg(e,t,n){const i=(0,ie.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error(`No RenderingEngine for Id: ${n.renderingEngineId}`);const o=i.getViewport(n.viewportId),a=i.getViewport(t.viewportId),r=a.getSlabThickness?.();r&&(o.setSlabThickness?.(r),o.render())}const{CAMERA_MODIFIED:fg}=ie.Enums.Events;function wg(e){return fu(e,fg,pg)}const Ig=vg,Eg=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const{color:s,fill:l,width:d,lineWidth:c,lineDash:h,fillOpacity:u,strokeOpacity:g}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},a),m=c||d,v=rl(t,"circle",n),p=e.getSvgNode(v),f={cx:`${i[0]}`,cy:`${i[1]}`,r:`${o}`,stroke:s,fill:l,"stroke-width":m,"stroke-dasharray":h,"fill-opacity":u,"stroke-opacity":g};if(p)ll(f,p),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),sl(f,t),e.appendNode(t,v)}},Cg=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),c=l||s,h=rl(t,"ellipse",n),u=e.getSvgNode(h),[g,m,v,p]=i,f=Math.hypot(v[0]-p[0],v[1]-p[1]),w=Math.hypot(m[0]-g[0],m[1]-g[1]),I=180*Math.atan2(v[1]-p[1],v[0]-p[0])/Math.PI,E=[(v[0]+p[0])/2,(m[1]+g[1])/2],C={cx:`${E[0]}`,cy:`${E[1]}`,rx:""+f/2,ry:""+w/2,stroke:r,fill:"transparent",transform:`rotate(${I} ${E[0]} ${E[1]})`,"stroke-width":c,"stroke-dasharray":d};if(u)ll(C,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==a&&t.setAttribute("data-id",a),sl(C,t),e.appendNode(t,h)}},_g=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const s=[(i[0]+o[0])/2,i[1]],l=[(i[0]+o[0])/2,o[1]],d=[i[0],(i[1]+o[1])/2],c=[o[0],(i[1]+o[1])/2];Cg(e,t,n,[l,s,d,c],a={},r="")};function bg(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),c=o[0]+(i[0]-o[0])/2,h=[c,i[1]],u=[c,o[1]],g={start:i,end:h},m={start:h,end:u},v={start:u,end:o};Ml(e,t,"1",g.start,g.end,{color:r,width:s,lineWidth:l}),Ml(e,t,"2",m.start,m.end,{color:r,width:s,lineWidth:l}),Ml(e,t,"3",v.start,v.end,{color:r,width:s,lineWidth:l})}function Tg(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),c=l||s,h=rl(t,"rect",n),u=e.getSvgNode(h),[g,m,v,p]=i,f=Math.hypot(g[0]-m[0],g[1]-m[1]),w=Math.hypot(g[0]-v[0],g[1]-v[1]),I=[(p[0]+g[0])/2,(p[1]+g[1])/2],E=[(v[0]+g[0])/2,(v[1]+g[1])/2],C=180*Math.atan2(I[1]-E[1],I[0]-E[0])/Math.PI,_={x:""+(I[0]-f/2),y:""+(I[1]-w/2),width:`${f}`,height:`${w}`,stroke:r,fill:"transparent",transform:`rotate(${C} ${I[0]} ${I[1]})`,"stroke-width":c,"stroke-dasharray":d};if(u)ll(_,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==a&&t.setAttribute("data-id",a),sl(_,t),e.appendNode(t,h)}}function Dg(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";Tg(e,t,n,[[i[0],i[1]],[o[0],i[1]],[i[0],o[1]],[o[0],o[1]]],a,r)}function Sg(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a);Ml(e,t,n,i,o,{color:r,width:s,lineWidth:l,lineDash:d});const c=Math.atan2(o[1]-i[1],o[0]-i[0]),h={start:[o[0]-10*Math.cos(c-Math.PI/7),o[1]-10*Math.sin(c-Math.PI/7)],end:o},u={start:[o[0]-10*Math.cos(c+Math.PI/7),o[1]-10*Math.sin(c+Math.PI/7)],end:o};Ml(e,t,"2",h.start,h.end,{color:r,width:s,lineWidth:l}),Ml(e,t,"3",u.start,u.end,{color:r,width:s,lineWidth:l})}function yg(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),c=l||s,h=rl(t,"rect",n),u=e.getSvgNode(h),g=[Math.min(i[0],o[0]),Math.min(i[1],o[1])],m=Math.abs(i[0]-o[0]),v=Math.abs(i[1]-o[1]),p={x:`${g[0]}`,y:`${g[1]}`,width:`${m}`,height:`${v}`,stroke:r,fill:"black","stroke-width":c,"stroke-dasharray":d};if(u)ll(p,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");sl(p,t),e.appendNode(t,h)}}function xg(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;const i=(0,ie.getEnabledElement)(e);if(!i)throw new Error("getAnnotationNearPoint: enabledElement not found");return Mg(i,t,n)}function Mg(e,t,n){const{renderingEngineId:i,viewportId:o}=e,a=ur(o,i);if(!a)return null;const{_toolInstances:r}=a;for(const i in r){const o=Og(r[i],e,t,n);if(o)return o}return null}function Og(e,t,n,i){const{viewport:o}=t,a=lt(e.constructor.toolName,o?.element),r=o?.getCurrentImageId?.();if(a?.length){const{element:o}=t.viewport;for(const t of a){const a=t.metadata?.referencedImageId;if(!(r&&a&&r!==a||!e.isPointNearTool)&&(e.isPointNearTool(o,t,n,i,"")||e.getHandleNearImagePoint(o,t,n,i)))return t}}return null}const{calibratedPixelSpacingMetadataProvider:Pg}=ie.utilities;function Ag(e,t,n){"number"==typeof n&&(n={type:ie.Enums.CalibrationTypes.USER,scale:n}),Pg.add(e,n),t.getStackViewports().forEach((t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)}))}const{transformWorldToIndex:Rg}=ie.utilities;function Lg(e,t,n){const[i,o]=e,a=Oo.vec3.fromValues((i[0]+o[0])/2,(i[1]+o[1])/2,(i[2]+o[2])/2),r=Oo.vec3.distance(i,o)/2;if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=function(e,t,n,i,o){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),d=Oo.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),c=Oo.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=Oo.vec3.create();Oo.vec3.cross(h,d,c);const u=Oo.vec3.create(),g=Oo.vec3.create();Oo.vec3.scaleAndAdd(u,r,c,o),Oo.vec3.scaleAndAdd(g,a,c,-o),Oo.vec3.scaleAndAdd(u,u,h,-o),Oo.vec3.scaleAndAdd(g,g,h,o);return{boundsIJK:gi([Rg(e,u),Rg(e,g),...n.map((t=>Rg(e,t)))],s),topLeftWorld:u,bottomRightWorld:g}}(t,n,e,0,r);return{boundsIJK:s,centerWorld:a,radiusWorld:r,topLeftWorld:l,bottomRightWorld:d}}class Ng{static imageIdToFrames(e){const t=e.match(this.frameRangeExtractor);if(!t||!t[2])return null;const n=t[2].split("-").map((e=>Number(e)));return 1===n.length?n[0]:n}static framesToString(e){return Array.isArray(e)?`${e[0]}-${e[1]}`:String(e)}static framesToImageId(e,t){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const i=this.framesToString(t);return e.replace(this.frameRangeExtractor,`${n[1]}${i}`)}static setFrameRange(e,t,n){const{referencedImageId:i}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(i,t);const o={...n,annotation:e};(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_MODIFIED,o)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}function Ug(e,t){const{viewPlaneNormal:n}=e.metadata,{viewPlaneNormal:i}=t.metadata,o=Oo.vec3.dot(n,i);if(!Oo.glMatrix.equals(1,Math.abs(o)))return!1;const{polyline:a}=e.data.contour,{polyline:r}=t.data.contour,s=Oo.vec3.dot(n,a[0]),l=Oo.vec3.dot(n,r[0]);return Oo.glMatrix.equals(s,l)}function kg(e,t,n){let i=-1;if(t.forEach(((t,n)=>{i>=0||t.a==e.b&&(i=n)})),i>=0){const e=t[i];return t.splice(i,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:kg(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function Vg(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const i=kg(n,e,t);if(0==i.remainingLines.length)return[{type:i.type,contourPoints:i.contourPoints}];{const e=Vg(i.remainingLines);return e.push({type:i.type,contourPoints:i.contourPoints}),e}}function Wg(e){return Vg(e)}ae(Ng,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const Bg={findContours:Vg,findContoursFromReducedSet:Wg};function Hg(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.getPoints(),i=e.getLines(),o=new Array(n.getNumberOfPoints()).fill(0).map(((e,t)=>n.getPoint(t).slice())),a=new Array(i.getNumberOfCells()).fill(0).map(((e,t)=>{const n=i.getCell(3*t).slice();return{a:n[0],b:n[1]}}));if(t)return{points:o,lines:a};const r=[];for(const[e,t]of o.entries()){const n=r.findIndex((e=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]));if(n>=0)a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)));else{const n=r.length;r.push(t),a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)))}}return{points:r,lines:a.filter((e=>e.a!==e.b))}}const Fg={processContourHoles:function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=e.filter((e=>"CLOSED_PLANAR"!==e.type)),o=e.filter((e=>"CLOSED_PLANAR"===e.type)),a=[];let r=[];return o.forEach(((e,n)=>{const i=[];o.forEach(((o,a)=>{n!=a&&function(e,t,n){const i=[];e.contourPoints.forEach((e=>{i.push([n[e][0],n[e][1]])}));let o=0;return t.contourPoints.forEach((e=>{((e,t)=>{const n=e[0],i=e[1];let o=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){const r=t[e][0],s=t[e][1],l=t[a][0],d=t[a][1];s>i!=d>i&&n<(l-r)*(i-s)/(d-s)+r&&(o=!o)}return o})([n[e][0],n[e][1]],i)||o++})),0===o}(e,o,t)&&i.push(a)})),i.length>0?a.push({contour:e,holes:i}):r.push(n)})),n&&(a.forEach((e=>{e.contour.type="CLOSEDPLANAR_XOR",i.push(e.contour),e.holes.forEach((e=>{o[e].type="CLOSEDPLANAR_XOR",i.push(o[e]),r=r.filter((t=>t!==e))}))})),r.forEach((e=>{i.push(o[e])}))),i}};var Gg=E(543),$g=E.n(Gg);const{Labelmap:qg}=ri;function zg(e){let{segmentations:t}=e;const{representationData:n,segments:i=[0,1]}=t,{volumeId:o}=n[qg],a=ie.cache.getVolume(o);if(!a)return void console.warn(`No volume found for ${o}`);const r=a.dimensions[2],s=a.imageData.getPointData().getScalars().getData(),l=a.dimensions[0]*a.dimensions[1];for(let e=0;e<r;e++)for(let t=0;t<a.dimensions[1];t++){const n=t*a.dimensions[0]+e*l;s[n]=0,s[n+a.dimensions[0]-1]=0}const d=[],{FrameOfReferenceUID:c}=a.metadata,h=i.length;for(let e=0;e<h;e++){const t=i[e];if(!t)continue;const n=[],o=ni().newInstance({name:"Scalars",numberOfComponents:1,size:l*r,dataType:"Uint8Array"}),{containedSegmentIndices:h}=t;for(let t=0;t<r;t++){if(jg(t,s,l,e))continue;const i=t*l;try{for(let t=0;t<l;t++){const n=s[t+i];n===e||h?.has(n)?o.setValue(t+i,1):o.setValue(t,0)}const r=$g().newInstance({slice:t}),d=oi().newInstance();d.shallowCopy(a.imageData),d.getPointData().setScalars(o),r.setInputData(d);const u=[1];r.setContourValues(u),r.setMergePoints(!1);const g=Hg(r.getOutputData());if(g.points?.length){const e=Wg(g.lines);n.push({contours:e,polyData:g,FrameNumber:t+1,sliceIndex:t,FrameOfReferenceUID:c})}}catch(e){console.warn(t),console.warn(e)}}const u={FrameOfReferenceUID:c},g={label:t.label,color:t.color,metadata:u,sliceContours:n};d.push(g)}return d}function jg(e,t,n,i){const o=e*n,a=o+n;for(let e=o;e<a;e++)if(t[e]===i)return!1;return!0}class Kg{constructor(){}static getContourSequence(e,t){const{data:n}=e,{projectionPoints:i,projectionPointsImageIds:o}=n.cachedStats;return i.map(((e,n)=>{const i=function(e){const t=[...e[0],...e[1],...e[3],...e[2]].flat().map((e=>e.toFixed(2)));return t}(e),a=function(e,t){const n=t.get("sopCommonModule",e);return{ReferencedSOPClassUID:n.sopClassUID,ReferencedSOPInstanceUID:n.sopInstanceUID}}(o[n],t);return{NumberOfContourPoints:i.length/3,ContourImageSequence:a,ContourGeometricType:"CLOSED_PLANAR",ContourData:i}}))}}ae(Kg,"toolName",void 0),Kg.toolName="RectangleROIStartEndThreshold";const Yg=Kg;class Xg{constructor(){}static convert(e,t,n){!function(e){if(!e?.data)throw new Error("Tool data is empty");if(!e.metadata||e.metadata.referencedImageId)throw new Error("Tool data is not associated with any imageId")}(e);const{toolName:i}=e.metadata,o=Xg.TOOL_NAMES[i];if(!o)throw new Error(`Unknown tool type: ${i}, cannot convert to RTSSReport`);const a=o.getContourSequence(e,n);return{ReferencedROINumber:t+1,ROIDisplayColor:[Math.floor(255*Math.random()),Math.floor(255*Math.random()),Math.floor(255*Math.random())],ContourSequence:a}}static register(e){Xg.TOOL_NAMES[e.toolName]=e}}ae(Xg,"TOOL_NAMES",{}),Xg.register(Yg);const Jg=Xg;function Zg(e,t){kd.acceptAutoGenerated(e,t)}const{isEqual:Qg}=ie.utilities;function em(e,t){const{polyline:n}=e.data.contour,{points:i}=e.data.handles,{length:o}=i;if(t===o)return n.length;if(t<0&&(t=(t+o)%o),0===t)return 0;const a=i[t],r=n.findIndex((e=>Qg(a,e)));if(-1!==r)return r;let s=1/0;return n.reduce(((e,t,n)=>{const i=Oo.vec3.squaredDistance(t,a);return i<s?(s=i,n):e}),-1)}const tm=function(e,t,n){const{imageData:i}=e,{overwrite:o,boundsIJK:a}=n,r=n?.overlapType||0,s=e.voxelManager,l=e.voxelManager.getScalarDataLength();if(o)for(let e=0;e<l;e++)s.setAtIndex(e,0);const{baseVolumeIdx:d,volumeInfoList:c}=pi(e,t);let h,u,g;const m=(e,t,n)=>{const{imageData:i,dimensions:o,lower:a,upper:s}=e,l=vi(i,o,t,n);u=0,h=0,g={lower:a,upper:s};let d=!1;const{voxelManager:c}=i.get("voxelManager");return c.forEach((e=>{let{value:t}=e;u+=1,t>=g.lower&&t<=g.upper&&(h+=1)}),{imageData:i,boundsIJK:l}),0===r?d=h>0:1==r&&(d=h===u),d},v=(e,t)=>{const{imageData:n,lower:i,upper:o}=e,a=n.get("voxelManager").voxelManager,r=a.toIndex(t),s=a.getAtIndex(r);return!(s<=i||s>=o)};return e.voxelManager.forEach((e=>{let{index:t,pointIJK:i,pointLPS:o}=e,a=c.length>0;for(let e=0;e<c.length&&(a=c[e].volumeSize===l?v(c[e],i):m(c[e],c[d].spacing,o),a);e++);a&&s.setAtIndex(t,n.segmentIndex||1)}),{imageData:i,boundsIJK:a}),Ci(e.volumeId),e};function nm(e,t,n,i){const o=Oo.vec3.create();Oo.vec3.cross(o,t,e);const a=Oo.vec3.fromValues(...n),r=Oo.vec3.fromValues(...i),s=Oo.vec3.create();Oo.vec3.subtract(s,a,r);const l=Oo.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=Oo.vec3.dot(s,o)/(l*Oo.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}function im(e,t,n){if(2!==e.length||2!==t.length||2!==n.length)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(ja(e,t,n))}function om(e,t){if(4!==e.length||2!==t.length)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[n,i,o,a]=e;let r=655535;const s=function(e,t,n,i){return{top:[[e,t],[e+n,t]],right:[[e+n,t],[e+n,t+i]],bottom:[[e+n,t+i],[e,t+i]],left:[[e,t+i],[e,t]]}}(n,i,o,a);return Object.keys(s).forEach((e=>{const[n,i]=s[e],o=im(n,i,t);o<r&&(r=o)})),r}const{transformWorldToIndex:am}=ie.utilities;class rm extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,getTextLines:sm,statsCalculator:Vl}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{label:"",handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},cachedStats:{}}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:u,top:g,width:m,height:v}=c;return om([u,g,m,v],h)<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),Fr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:o}=s.handles;o.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,o=(0,ie.getEnabledElement)(n),{worldToCanvas:r,canvasToWorld:l}=o.viewport,d=e.world,{points:c}=s.handles;let h,u,g,m,v,p,f,w;switch(c[a]=[...d],a){case 0:case 3:h=r(c[0]),m=r(c[3]),u=[m[0],h[1]],g=[h[0],m[1]],p=l(u),f=l(g),c[1]=p,c[2]=f;break;case 1:case 2:u=r(c[1]),g=r(c[2]),h=[g[0],u[1]],m=[u[0],g[1]],v=l(h),w=l(m),c[0]=v,c[3]=w}i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles,m=u.map((e=>i.worldToCanvas(e)));l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),{viewPlaneNormal:w,viewUp:I}=i.getCamera();if(h.cachedStats[r]&&null!=h.cachedStats[r].areaUnits){if(d.invalidated&&(this._throttledCalculateCachedStats(d,w,I,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null},this._calculateCachedStats(d,w,I,s,e);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let E;if(!Je(c))continue;ue(d)||this.editData||null===g||(E=[m[g]]),E&&ul(t,c,"0",E,{color:v}),Tg(t,c,"0",m,{color:v,lineDash:f,lineWidth:p},`${c}-rect`),n=!0;const C=this.getLinkedTextBoxStyle(l,d);if(!C.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const _=this.configuration.getTextLines(h,r);if(!_||0===_.length)continue;if(!h.handles.textBox.hasMoved){const e=Al(m);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const b=i.worldToCanvas(h.handles.textBox.worldPosition),T=Pl(t,c,"1",_,b,m,{},C),{x:D,y:S,width:y,height:x}=T;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([D,S]),topRight:i.canvasToWorld([D+y,S]),bottomLeft:i.canvasToWorld([D,S+x]),bottomRight:i.canvasToWorld([D+y,S+x])}}return n})),ae(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),ae(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewport:r}=o,{element:s}=r,l=a.handles.points[0],d=a.handles.points[3],{cachedStats:c}=a,h=Object.keys(c);for(let o=0;o<h.length;o++){const a=h[o],s=this.getTargetIdImage(a,i);if(!s)continue;const{dimensions:u,imageData:g,metadata:m,voxelManager:v}=s,p=am(g,l);p[0]=Math.floor(p[0]),p[1]=Math.floor(p[1]),p[2]=Math.floor(p[2]);const f=am(g,d);if(f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(f[2]),this._isInsideVolume(p,f,u)){this.isHandleOutsideImage=!1;const i=[[Math.min(p[0],f[0]),Math.max(p[0],f[0])],[Math.min(p[1],f[1]),Math.max(p[1],f[1])],[Math.min(p[2],f[2]),Math.max(p[2],f[2])]],{worldWidth:o,worldHeight:h}=nm(t,n,l,d),u=[p,f],{scale:w,areaUnits:I}=va(s,u),E=Math.abs(o*h)/(w*w),C={isPreScaled:Rl(r,a),isSuvScaled:this.isSuvScaled(r,a,e.metadata.referencedImageId)},_=Xd(m.Modality,e.metadata.referencedImageId,C),b=v.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:i,imageData:g,returnPoints:this.configuration.storePointData}),T=this.configuration.statsCalculator.getStatistics();c[a]={Modality:m.Modality,area:E,mean:T.mean?.value,stdDev:T.stdDev?.value,max:T.max?.value,statsArray:T.array,pointsInShape:b,areaUnits:I,pixelValueUnits:_}}else this.isHandleOutsideImage=!0,c[a]={Modality:m.Modality}}return e.invalidated=!1,Le(e,s),c})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}}function sm(e,t){const n=e.cachedStats[t],{area:i,mean:o,max:a,stdDev:r,areaUnits:s,pixelValueUnits:l}=n;if(void 0===o)return;const d=[];return d.push(`Area: ${ie.utilities.roundNumber(i)} ${s}`),d.push(`Mean: ${ie.utilities.roundNumber(o)} ${l}`),d.push(`Max: ${ie.utilities.roundNumber(a)} ${l}`),d.push(`Std Dev: ${ie.utilities.roundNumber(r)} ${l}`),d}ae(rm,"toolName",void 0),rm.toolName="RectangleROI";const lm=rm,{EPSILON:dm}=ie.CONSTANTS,cm=1-dm;function hm(e,t){const{viewPlaneNormal:n}=t,i=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=ie.metaData.get("imagePlaneModule",n),o=Oo.vec3.fromValues(i[0],i[1],i[2]),a=Oo.vec3.fromValues(i[3],i[4],i[5]);t=Oo.vec3.create(),Oo.vec3.cross(t,o,a),e.metadata.viewPlaneNormal=t}const i=Math.abs(Oo.vec3.dot(n,t))>cm;return t&&i}));return i.length?i:[]}const{transformWorldToIndex:um}=ie.utilities;class gm extends lm{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{storePointData:!1,numSlicesToPropagate:10,computePointsInsideVolume:!1,getTextLines:mm,statsCalculator:Vl,showTextBox:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l;let h,u,g;if(r instanceof ie.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ie.utilities.getVolumeId(e),u=ie.cache.getVolume(g),h=ie.utilities.getClosestImageId(u,o,d)}const m=ie.utilities.getSpacingInNormalDirection(u,d),v=this._getStartCoordinate(o,d),p=this._getEndCoordinate(o,m,d),f=r.getFrameOfReferenceUID(),w={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:f,referencedImageId:h,toolName:this.getToolName(),volumeId:g,spacingInNormal:m},data:{label:"",startCoordinate:v,endCoordinate:p,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[h],statistics:[]},handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(w,u),mt(w,i);const I=Ir(i,this.getToolName());return this.editData={annotation:w,viewportIdsToRender:I,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(I),w})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID);const d=this.getTargetId(l.viewport),c=ie.cache.getVolume(d.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(i,d,c,l),Ar(o),a&&Ne(i)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;let o=lt(this.getToolName(),i.element);if(!o?.length)return n;o=hm(o,i.getCamera());const a={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let r=0;r<o.length;r++){const s=o[r],{annotationUID:l,data:d}=s,{startCoordinate:c,endCoordinate:h}=d,{points:u,activeHandleIndex:g}=d.handles,m=u.map((e=>i.worldToCanvas(e)));a.annotationUID=l;const v=this.getStyle("lineWidth",a,s),p=this.getStyle("lineDash",a,s),f=this.getStyle("color",a,s),w=i.getCamera().focalPoint,I=i.getCamera().viewPlaneNormal;let E=c,C=h;Array.isArray(c)&&(E=this._getCoordinateForViewplaneNormal(E,I)),Array.isArray(h)&&(C=this._getCoordinateForViewplaneNormal(C,I));const _=ie.utilities.roundToPrecision(E),b=ie.utilities.roundToPrecision(C),T=this._getCoordinateForViewplaneNormal(w,I),D=ie.utilities.roundToPrecision(T);if(D<Math.min(_,b)||D>Math.max(_,b))continue;s.invalidated&&this._throttledCalculateCachedStats(s,e);let S,y=!1;if(D!==_&&D!==b||(y=!0),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Je(l))continue;ue(s)||this.editData||null===g||!y||(S=[m[g]]),S&&ul(t,l,"0",S,{color:f});let x=p;if(y||(x=2),Dg(t,l,"0",m[0],m[3],{color:f,lineDash:x,lineWidth:v}),n=!0,this.configuration.showTextBox&&this.configuration.calculatePointsInsideVolume){const e=this.getLinkedTextBoxStyle(a,s);if(!e.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const n=this.configuration.getTextLines(d);if(!n||0===n.length)continue;if(!d.handles.textBox.hasMoved){const e=Al(m);d.handles.textBox.worldPosition=i.canvasToWorld(e)}const o=i.worldToCanvas(d.handles.textBox.worldPosition),r=Pl(t,l,"1",n,o,m,{},e),{x:c,y:h,width:u,height:g}=r;d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([c,h]),topRight:i.canvasToWorld([c+u,h]),bottomLeft:i.canvasToWorld([c,h+g]),bottomRight:i.canvasToWorld([c+u,h+g])}}}return n})),this._throttledCalculateCachedStats=cr(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:r}=t,{startCoordinate:s,endCoordinate:l}=n,{points:d}=n.handles,c=um(r,d[0]),h=um(r,d[0]),u=Oo.vec3.create();r.indexToWorldVec3(c,u);const g=Oo.vec3.create();r.indexToWorldVec3(h,g),2==this._getIndexOfCoordinatesForViewplaneNormal(o)?(u[2]=s,g[2]=l):0==this._getIndexOfCoordinatesForViewplaneNormal(o)?(u[0]=s,g[0]=l):1==this._getIndexOfCoordinatesForViewplaneNormal(o)&&(u[1]=s,g[1]=l);const m=Oo.vec3.distance(u,g),v=[];for(let e=0;e<m;e+=a)v.push(d.map((t=>{const n=Oo.vec3.create();return Oo.vec3.scaleAndAdd(n,t,o,e),Array.from(n)})));n.cachedStats.projectionPoints=v}_computePointsInsideVolume(e,t,n,i){const{data:o,metadata:a}=e,{viewPlaneNormal:r,viewUp:s}=a,{viewport:l,renderingEngine:d}=i,c=o.cachedStats.projectionPoints,h=[[]],u=this.getTargetIdImage(t,d),g=o.handles.points[0],m=o.handles.points[3],{worldWidth:v,worldHeight:p}=nm(r,s,g,m),f=va(u,o.habdles),w=Math.abs(v*p)/(f.scale*f.scale),I={isPreScaled:Rl(l,t),isSuvScaled:this.isSuvScaled(l,t,e.metadata.referencedImageId)},E=Xd(a.Modality,e.metadata.referencedImageId,I);for(let e=0;e<c.length;e++){if(!n)continue;const t=c[e][0],{dimensions:i,imageData:o,voxelManager:a}=n,s=um(o,g),l=um(o,t),d=this._getIndexOfCoordinatesForViewplaneNormal(r);s[0]=Math.floor(s[0]),s[1]=Math.floor(s[1]),s[2]=Math.floor(s[2]),s[d]=l[d];const u=um(o,m);if(u[0]=Math.floor(u[0]),u[1]=Math.floor(u[1]),u[2]=Math.floor(u[2]),u[d]=l[d],this._isInsideVolume(s,u,i)){this.isHandleOutsideImage=!1;const e=[[Math.min(s[0],u[0]),Math.max(s[0],u[0])],[Math.min(s[1],u[1]),Math.max(s[1],u[1])],[Math.min(s[2],u[2]),Math.max(s[2],u[2])]],t=a.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:e,imageData:o,returnPoints:this.configuration.storePointData});h.push(t)}}const C=this.configuration.statsCalculator.getStatistics();o.cachedStats.pointsInVolume=h,o.cachedStats.statistics={Modality:a.Modality,area:w,mean:C.mean?.value,stdDev:C.stdDev?.value,max:C.max?.value,statsArray:C.array,areaUnits:f.areaUnits,pixelValueUnits:E}}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:i}=t,{cachedStats:o}=n,a=this.getTargetId(i),r=ie.cache.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),e.invalidated=!1,Le(e,i.element),o}_getStartCoordinate(e,t){const n=e;return this._getCoordinateForViewplaneNormal(n,t)}_getEndCoordinate(e,t,n){const i=this.configuration.numSlicesToPropagate,o=Oo.vec3.create();return Oo.vec3.scaleAndAdd(o,e,n,i*t),this._getCoordinateForViewplaneNormal(o,n)}_getIndexOfCoordinatesForViewplaneNormal(e){const t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t.indexOf(Math.max(...t))}_getCoordinateForViewplaneNormal(e,t){return e[this._getIndexOfCoordinatesForViewplaneNormal(t)]}}function mm(e){const t=e.cachedStats.statistics,{area:n,mean:i,max:o,stdDev:a,areaUnits:r,pixelValueUnits:s}=t;if(void 0===i)return;const l=[];return l.push(`Area: ${ie.utilities.roundNumber(n)} ${r}`),l.push(`Mean: ${ie.utilities.roundNumber(i)} ${s}`),l.push(`Max: ${ie.utilities.roundNumber(o)} ${s}`),l.push(`Std Dev: ${ie.utilities.roundNumber(a)} ${s}`),l}ae(gm,"toolName",void 0),gm.toolName="RectangleROIStartEndThreshold";const vm=gm;class pm extends lm{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getTargetId(r);let u,g;if(r instanceof ie.StackViewport)u=h.split("imageId:")[1];else{g=ie.utilities.getVolumeId(h);const e=ie.cache.getVolume(g);u=ie.utilities.getClosestImageId(e,o,d)}const m=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:m,referencedImageId:u,toolName:this.getToolName(),volumeId:g},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},segmentationId:null}};mt(v,i);const p=Ir(i,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:p,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(p),v})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const s=a[e],{annotationUID:l,data:d}=s,{points:c,activeHandleIndex:h}=d.handles,u=c.map((e=>i.worldToCanvas(e)));r.annotationUID=l;const g=this.getStyle("lineWidth",r,s),m=this.getStyle("lineDash",r,s),v=this.getStyle("color",r,s);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let p;(Le(s,o),Je(l))&&(ue(s)||this.editData||null===h||(p=[u[h]]),p&&ul(t,l,"0",p,{color:v}),Dg(t,l,"0",u[0],u[3],{color:v,lineDash:m,lineWidth:g}),n=!0)}return n}))}}ae(pm,"toolName",void 0),pm.toolName="RectangleROIThreshold";const fm=pm,wm=function(e,t){const n=e.findIndex((e=>{let[t,n]=e;return t===n}));if(-1===n)throw new Error("3D bounding boxes not supported in an oblique plane");return e[n][0]-=t,e[n][1]+=t,e},Im=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=[];return e.forEach((e=>{const{data:o}=e,{points:a}=o.handles,{imageData:r,dimensions:s}=t;let l=a;if(o.cachedStats?.projectionPoints){const{projectionPoints:e}=o.cachedStats;l=[].concat(...e)}let d=gi(l.map((e=>ie.utilities.transformWorldToIndex(r,e))),s);n.numSlicesToProject&&!o.cachedStats?.projectionPoints&&(d=wm(d,n.numSlicesToProject)),i.push(d)})),1===i.length?i[0]:i.reduce(((e,t)=>({iMin:Math.min(e.iMin,t.iMin),jMin:Math.min(e.jMin,t.jMin),kMin:Math.min(e.kMin,t.kMin),iMax:Math.max(e.iMax,t.iMax),jMax:Math.max(e.jMax,t.jMax),kMax:Math.max(e.kMax,t.kMax)})),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})},Em=function(e,t,n,i){const o=e.map((e=>be(e)));let a;!function(e){const t=[fm.toolName,vm.toolName];for(const n of e){const e=n.metadata.toolName;if(!t.includes(e))throw new Error("rectangleROIThresholdVolumeByRange only supports RectangleROIThreshold and RectangleROIStartEndThreshold annotations")}}(o);for(let e=0;e<n.length;e++)n[e].volume.voxelManager.getScalarDataLength()!==t.voxelManager.getScalarDataLength()&&0!==e||(a=Im(o,n[e].volume,i));const r=tm(t,n,{...i,boundsIJK:a});return r.modified(),r},Cm=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mergedLabelmap";e.forEach((t=>{let{direction:n,dimensions:i,origin:o,spacing:a}=t;if(!(ie.utilities.isEqual(i,e[0].dimensions)&&ie.utilities.isEqual(n,e[0].direction)&&ie.utilities.isEqual(a,e[0].spacing)&&ie.utilities.isEqual(o,e[0].origin)))throw new Error("labelmaps must have the same size and shape")}));const i=e[0],o=new(i.voxelManager.getConstructor())(i.voxelManager.getScalarDataLength());e.forEach((e=>{const n=e.voxelManager,i=n.getScalarDataLength();for(let e=0;e<i;e++)n.getAtIndex(e)===t&&(o[e]=t)}));const a={scalarData:o,metadata:i.metadata,spacing:i.spacing,origin:i.origin,direction:i.direction,dimensions:i.dimensions};return ie.volumeLoader.createLocalVolume(n,a)};function _m(e,t){if(e===ri.Labelmap)return function(e){return e&&"boolean"==typeof e.renderOutline&&"number"==typeof e.outlineWidthActive&&"number"==typeof e.outlineWidthInactive&&"number"==typeof e.activeSegmentOutlineWidthDelta&&"boolean"==typeof e.renderFill&&"boolean"==typeof e.renderFillInactive&&"number"==typeof e.fillAlpha&&"number"==typeof e.fillAlphaInactive&&"number"==typeof e.outlineOpacity&&"number"==typeof e.outlineOpacityInactive}(t);throw new Error(`Unknown representation type: ${e}`)}function bm(e){const{type:t}=e;if(t===ri.Labelmap)return di();throw new Error(`Unknown representation type: ${t}`)}async function Tm(e){const{viewportId:t,renderingEngineId:n,options:i}=e;let{segmentationId:o}=e;const a=(0,ie.getEnabledElementByIds)(t,n);if(!a)throw new Error("element disabled");const{viewport:r}=a;if(!(r instanceof ie.VolumeViewport))throw new Error("Segmentation only supports VolumeViewport");const{uid:s}=r.getDefaultActor();if(void 0===o&&(o=`${s}-based-segmentation-${i?.volumeId??ie.utilities.uuidv4().slice(0,8)}`),i){const e=structuredClone(i);await ie.volumeLoader.createLocalVolume(o,e)}else{const{uid:e}=r.getDefaultActor();await ie.volumeLoader.createAndCacheDerivedSegmentationVolume(e,{volumeId:o})}return o}function Dm(e,t,n){return(new Array(n+1).join(t)+e).slice(-n)}const Sm=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=n.onFlood,o=n.onBoundary,a=n.equals,r=n.diagonals||!1,s=m(t),l=function(e){const t=[],n=function(e){return e.split("").map((function(e){return parseInt(e,10)-1}))};for(let i=0;i<Math.pow(3,e);i+=1){const o=Dm(i.toString(3),"0",e);t.push(n(o))}return t}(t.length).filter((function(e){const t=function(e){let t=0;for(let n=0;n<e.length;n+=1)0!==e[n]&&(t+=1);return t}(e);return 0!==t&&(1===t||r)})),d=[],c=[],h=new Set,u=new Map;for(d.push({currentArgs:t});d.length>0;)g(d.pop());return{flooded:c,boundaries:function(){const e=Array.from(u.values());return e.reverse(),e}()};function g(e){const t=e.currentArgs,n=e.previousArgs;(function(e){const[t,n,i=0]=e,o=t+32768+65536*(n+32768+65536*(i+32768));return h.has(o)})(t)||(function(e){const[t,n,i=0]=e,o=t+32768+65536*(n+32768+65536*(i+32768));h.add(o)}(t),function(e){const t=m(e);return a?a(t,s):t===s}(t)?(function(e){c.push(e),i&&i(...e)}(t),function(e){for(let t=0;t<l.length;t+=1){const n=l[t],i=e.slice(0);for(let t=0;t<e.length;t+=1)i[t]+=n[t];d.push({currentArgs:i,previousArgs:e})}}(t)):function(e){const[t,n,i=0]=e,a=t+32768+65536*(n+32768+65536*(i+32768));u.set(a,e),o&&o(...e)}(n))}function m(t){return e(...t)}};var ym=function(e){return e.OnInteractionStart="onInteractionStart",e.OnInteractionEnd="onInteractionEnd",e.Preview="preview",e.RejectPreview="rejectPreview",e.AcceptPreview="acceptPreview",e.Fill="fill",e.StrategyFunction="strategyFunction",e.CreateIsInThreshold="createIsInThreshold",e.Initialize="initialize",e.INTERNAL_setValue="setValue",e.ComputeInnerCircleRadius="computeInnerCircleRadius",e}(ym||{});const xm=ym,Mm={[xm.Initialize]:e=>{const{strategySpecificConfiguration:t}=e;if(!t)return;const{centerSegmentIndex:n}=t;n&&(e.segmentIndex=n.segmentIndex)},[xm.OnInteractionStart]:e=>{const{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:i,centerIJK:o,strategySpecificConfiguration:a,imageVoxelManager:r,segmentationImageData:s,preview:l}=e;if(!a?.useCenterSegmentIndex)return;delete a.centerSegmentIndex;let d=!1,c=!1;if(r.forEach((e=>{let{value:i}=e;d||=i===t,c||=i===n}),{imageData:s,isInObject:r.isInObject,boundsIJK:i.boundsIJK}),!d&&!c)return;let h=i.getAtIJKPoint(o);if(h===n){if(!l)return;h=l.segmentIndex}else c&&(h=null);e.segmentIndex=h,a.centerSegmentIndex={segmentIndex:h}}},Om={[xm.Initialize]:e=>{const{operationName:t,centerIJK:n,strategySpecificConfiguration:i,segmentationVoxelManager:o,imageVoxelManager:a,segmentIndex:r}=e,{THRESHOLD:s}=i;if(!s?.isDynamic||!n||!r)return;if(t===xm.RejectPreview||t===xm.OnInteractionEnd)return;const{boundsIJK:l}=o,{threshold:d,dynamicRadius:c=0}=s,h=d?0:c,u=l.map(((e,t)=>{const[i,o]=e;return[Math.max(i,n[t]-h),Math.min(o,n[t]+h)]})),g=d||[1/0,-1/0];a.forEach((e=>{let{value:t}=e;const n=Array.isArray(t)?Oo.vec3.len(t):t;g[0]=Math.min(n,g[0]),g[1]=Math.max(n,g[1])}),{boundsIJK:u}),e.strategySpecificConfiguration.THRESHOLD.threshold=g},[xm.OnInteractionStart]:e=>{const{strategySpecificConfiguration:t,preview:n}=e;(t?.THRESHOLD?.isDynamic||n)&&(t.THRESHOLD.threshold=null)},[xm.ComputeInnerCircleRadius]:e=>{const{configuration:t,viewport:n}=e,{THRESHOLD:{dynamicRadius:i=0}={}}=t.strategySpecificConfiguration||{};if(0===i)return;const o=n.getImageData();if(!o)return;const{spacing:a}=o,r=[n.element.clientWidth/2,n.element.clientHeight/2],s=i*a[0],l=n.canvasToWorld(r).map((e=>e+s)),d=n.worldToCanvas(l),c=Math.abs(r[0]-d[0]),{strategySpecificConfiguration:h,activeStrategy:u}=t;h[u]||(h[u]={}),h[u].dynamicRadiusInCanvas=c}},Pm={determineSegmentIndex:Mm,dynamicThreshold:Om,erase:{[xm.Initialize]:e=>{e.segmentIndex=0}},islandRemoval:{[xm.OnInteractionEnd]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n,strategySpecificConfiguration:i,previewSegmentIndex:o,segmentIndex:a}=e;if(!i.THRESHOLD||null===a)return;const r=t.getPoints();if(!r?.length)return;if(void 0===o)return;const s=t.getBoundsIJK().map(((e,t)=>[Math.min(e[0],...r.map((e=>e[t]))),Math.max(e[1],...r.map((e=>e[t])))]));if(s.find((e=>e[0]<0||e[1]>65535)))return;const l=new Set,d=(e,t,i)=>{if(e<s[0][0]||e>s[0][1]||t<s[1][0]||t>s[1][1]||i<s[2][0]||i>s[2][1])return-1;const r=n.toIndex([e,t,i]);if(l.has(r))return-2;const d=n.getAtIndex(r),c=d===o||d===a?1:0;return c||n.addPoint(r),c};let c=0;const h=(e,i,a)=>{const r=n.toIndex([e,i,a]);l.has(r)||(t.setAtIJK(e,i,a,o),l.add(r),c++)};r.forEach((e=>{1===d(...e)&&Sm(d,e,{onFlood:h,diagonals:!0})}));let u=0,g=0;t.forEach((e=>{let{index:i,pointIJK:r,value:s}=e;const d=n.getAtIndex(i);if(l.has(i)){g++;const e=s===a?a:o;t.setAtIJKPoint(r,e)}else if(d===o){u++;const e=s??0;t.setAtIJKPoint(r,e)}}),{}),c-g!=0&&console.warn("There were flooded=",c,"cleared=",u,"preview count=",g,"not handled",c-g);const m=new Set(n.points||[]);l.clear();for(const e of m.keys()){if(l.has(e))continue;let n=!0;const i=new Set,a=(e,o,a)=>{const r=t.toIndex([e,o,a]);l.add(r),(s[0][0]===s[0][1]||e!==s[0][0]&&e!==s[0][1])&&(s[1][0]===s[1][1]||o!==s[1][0]&&o!==s[1][1])&&(s[2][0]===s[2][1]||a!==s[2][0]&&a!==s[2][1])||(n=!1),n&&i.add(r)},r=t.toIJK(e);if(0===d(...r)&&(Sm(d,r,{onFlood:a,diagonals:!1}),n))for(const e of i)t.setAtIndex(e,o)}Ci(e.segmentationId,t.getArrayOfSlices())}},preview:{[xm.Preview]:function(e){const{previewColors:t,strategySpecificConfiguration:n,enabledElement:i}=e;if(!t||!n)return;e.preview&&delete e.preview,delete n.centerSegmentIndex,this.onInteractionStart?.(i,e);const o=this.fill(i,e);return o&&(o.isPreviewFromHover=!0,e.preview=o,this.onInteractionEnd?.(i,e)),o},[xm.Initialize]:e=>{const{toolGroupId:t,segmentIndex:n,segmentationRepresentationUID:i,previewSegmentIndex:o,previewColors:a,preview:r}=e;if(void 0===a)return;if(r&&(r.previewVoxelManager.sourceVoxelManager=e.segmentationVoxelManager,e.previewVoxelManager=r.previewVoxelManager),null===n||!o)return;const s=a?.[n],l=wo(i,n);(s||l)&&Io(i,o,s||function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.4;return[Math.round(e+(255-e)*o),Math.round(t+(255-t)*o),Math.round(n+(255-n)*o),i]}(...l))},[xm.AcceptPreview]:e=>{const{segmentationVoxelManager:t,previewVoxelManager:n,previewSegmentIndex:i,preview:o}=e||{};if(void 0===i)return;const a=o?.segmentIndex??e.segmentIndex,r=n;r&&0!==r.modifiedSlices.size&&(r.forEach((e=>{let{index:n}=e;t.getAtIndex(n)===i&&t.setAtIndex(n,a)}),{}),Ci(e.segmentationId,r.getArrayOfSlices()),r.clear())},[xm.RejectPreview]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n}=e;0!==t.modifiedSlices.size&&(t.forEach((e=>{let{index:t,value:i}=e;n.setAtIndex(t,i)})),Ci(e.segmentationId,t.getArrayOfSlices()),t.clear())}},regionFill:{[xm.Fill]:e=>{const{segmentsLocked:t,segmentationImageData:n,segmentationVoxelManager:i,previewVoxelManager:o,imageVoxelManager:a,brushStrategy:r,centerIJK:s}=e,l=r.createIsInThreshold?.(e),{setValue:d}=r,c=l?n=>{const{value:i,index:o}=n;!t.includes(i)&&l(o)&&d(e,n)}:t=>d(e,t);a.forEach(c,{imageData:n,isInObject:a?.isInObject||i.isInObject,boundsIJK:i.boundsIJK}),o.addPoint(s)}},setValue:{[xm.INTERNAL_setValue]:(e,t)=>{let{value:n,index:i}=t;const{segmentsLocked:o,segmentIndex:a,previewVoxelManager:r,previewSegmentIndex:s,segmentationVoxelManager:l}=e,d=l.getAtIndex(i);if(null===a){const e=r.getAtIndex(i);return void(void 0!==e&&r.setAtIndex(i,e))}if(d===a||o.includes(n))return;if(d===s){if(void 0!==r.getAtIndex(i))return;l.setAtIndex(i,a)}const c=s??a;r.setAtIndex(i,c)}},threshold:{[xm.CreateIsInThreshold]:e=>{const{imageVoxelManager:t,strategySpecificConfiguration:n,segmentIndex:i}=e;if(n&&i)return e=>{const{THRESHOLD:i,THRESHOLD_INSIDE_CIRCLE:o}=n,a=t.getAtIndex(e),r=Array.isArray(a)?Oo.vec3.length(a):a,{threshold:s}=i||o||{};return!s?.length||s[0]<=r&&r<=s[1]}}}};function Am(e){let t,n,i,o,a,{operationData:r,viewport:s}=e;if(co(r,s)){const{volumeId:e,referencedVolumeId:n}=r,i=ie.cache.getVolume(e);if(!i)return;a=i.voxelManager,n&&(o=ie.cache.getVolume(n).voxelManager),({imageData:t}=i)}else{const{segmentationRepresentationUID:e,segmentationId:l}=r,d=dc(s.id,l);if(!d)return;const c=s.getCurrentImageId();if(!c)return;const h=s.getActor(e);if(!h)return;const u=ie.cache.getImage(d);t=h.actor.getMapper().getInputData(),a=u.voxelManager;const g=r.imageId,m=ie.cache.getImage(g);if(!m)return;n=m.getPixelData?.();const v=ie.cache.getImage(c),p=v?null:s.getImageData();i=v?.getPixelData()||p.getScalarData(),o=v?.voxelManager}return{segmentationImageData:t,segmentationScalarData:n,imageScalarData:i,segmentationVoxelManager:a,imageVoxelManager:o}}const{VoxelManager:Rm}=ie.utilities;class Lm{constructor(e){ae(this,"compositions",void 0),ae(this,"strategyFunction",void 0),ae(this,"configurationName",void 0),ae(this,"_initialize",[]),ae(this,"_fill",[]),ae(this,"_acceptPreview",void 0),ae(this,"_onInteractionStart",[]),ae(this,"fill",((e,t)=>{const n=this.initialize(e,t,xm.Fill);if(!n)return;const{strategySpecificConfiguration:i={},centerIJK:o}=n;if(ie.utilities.isEqual(o,i.centerIJK))return t.preview;i.centerIJK=o,this._fill.forEach((e=>e(n)));const{segmentationVoxelManager:a,previewVoxelManager:r,previewSegmentIndex:s}=n;return Ci(n.segmentationId,a.getArrayOfSlices()),s&&r.modifiedSlices.size?n.preview||n:null})),ae(this,"onInteractionStart",((e,t)=>{const{preview:n}=t;if(n?.isPreviewFromHover)return void(n.isPreviewFromHover=!1);const i=this.initialize(e,t);i&&this._onInteractionStart.forEach((e=>e.call(this,i)))})),ae(this,"onInteractionEnd",void 0),ae(this,"rejectPreview",void 0),ae(this,"acceptPreview",void 0),ae(this,"preview",void 0),ae(this,"setValue",void 0),ae(this,"createIsInThreshold",void 0),this.configurationName=e;for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this.compositions=n,n.forEach((e=>{const t="function"==typeof e?e():e;if(t)for(const e in t){if(!Lm.childFunctions[e])throw new Error(`Didn't find ${e} as a brush strategy`);Lm.childFunctions[e](this,t[e])}})),this.strategyFunction=(e,t)=>this.fill(e,t);for(const e of Object.keys(Lm.childFunctions))this.strategyFunction[e]=this[e]}initialize(e,t,n){const{viewport:i}=e,o=Am({operationData:t,viewport:i});if(!o)return console.warn("No data found for BrushStrategy"),t.preview;const{imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s}=o,l=t.preview?.previewVoxelManager||Rm.createHistoryVoxelManager({sourceVoxelManager:r}),d={operationName:n,previewSegmentIndex:t.previewColors?255:void 0,...t,enabledElement:e,imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s,previewVoxelManager:l,viewport:i,centerWorld:null,brushStrategy:this};return this._initialize.forEach((e=>e(d))),d}}function Nm(e,t){const n=`_${e}`;return(i,o)=>{i[n]||=[],i[n].push(o),i[e]||=t?(o,a)=>{const r=i[t](o,a,e);i[n].forEach((e=>e.call(i,r)))}:e=>{i[n].forEach((t=>t.call(i,e)))}}}function Um(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(n,i)=>{if(n[e])throw new Error(`The singleton method ${e} already exists`);n[e]=t?i:(e,t)=>(t.enabledElement=e,i.call(n,t))}}function km(e){const[t,n,i,o]=e;return[[i[0],n[1]],[o[0],t[1]]]}function Vm(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.precalculated||Wm(e,n),n.precalculated(t)}ae(Lm,"COMPOSITIONS",Pm),ae(Lm,"childFunctions",{[xm.OnInteractionStart]:Nm(xm.OnInteractionStart,xm.Initialize),[xm.OnInteractionEnd]:Nm(xm.OnInteractionEnd,xm.Initialize),[xm.Fill]:Nm(xm.Fill),[xm.Initialize]:Nm(xm.Initialize),[xm.CreateIsInThreshold]:Um(xm.CreateIsInThreshold),[xm.AcceptPreview]:Nm(xm.AcceptPreview,xm.Initialize),[xm.RejectPreview]:Nm(xm.RejectPreview,xm.Initialize),[xm.INTERNAL_setValue]:Um(xm.INTERNAL_setValue),[xm.Preview]:Um(xm.Preview,!1),[xm.ComputeInnerCircleRadius]:Nm(xm.ComputeInnerCircleRadius),compositions:null});const Wm=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xRadius:n,yRadius:i,zRadius:o}=e;void 0!==t.invXRadiusSq&&void 0!==t.invYRadiusSq&&void 0!==t.invZRadiusSq||(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==i?1/i**2:0,t.invZRadiusSq=0!==o?1/o**2:0);const{invXRadiusSq:a,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[d,c,h]=l;return t.precalculated=e=>{const t=e[0]-d;let n=t*t*a;if(n>1)return!1;const i=e[1]-c;if(n+=i*i*r,n>1)return!1;const o=e[2]-h;return n+=o*o*s,n<=1},t},{transformWorldToIndex:Bm,isEqual:Hm}=ie.utilities,Fm={[xm.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=Oo.vec3.fromValues(0,0,0);t.forEach((e=>{Oo.vec3.add(r,r,e)})),Oo.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Bm(o,r);const s=t.map((e=>i.worldToCanvas(e))),[l,d]=km(s),c=i.canvasToWorld(l),h=i.canvasToWorld(d),u=gi(t.map((e=>Bm(o,e))),o.getDimensions());a.boundsIJK=u,n.isInObject=Gm({topLeftWorld:c,bottomRightWorld:h,center:r})}};function Gm(e){const{topLeftWorld:t,bottomRightWorld:n,center:i}=e,o=Math.abs(t[0]-n[0])/2,a=Math.abs(t[1]-n[1])/2,r=Math.abs(t[2]-n[2])/2,s=Math.max(o,a,r);if(Hm(o,s)&&Hm(a,s)&&Hm(r,s)){const e={center:i,radius:s,radius2:s*s};return t=>function(e,t){const{center:n,radius:i}=e,o=e.radius2||i*i;return(t[0]-n[0])*(t[0]-n[0])+(t[1]-n[1])*(t[1]-n[1])+(t[2]-n[2])*(t[2]-n[2])<=o}(e,t)}const l={center:i,xRadius:o,yRadius:a,zRadius:r},{precalculated:d}=Wm(l,{});return d}const $m=new Lm("Circle",Pm.regionFill,Pm.setValue,Fm,Pm.determineSegmentIndex,Pm.preview),qm=new Lm("CircleThreshold",Pm.regionFill,Pm.setValue,Fm,Pm.determineSegmentIndex,Pm.dynamicThreshold,Pm.threshold,Pm.preview,Pm.islandRemoval),zm=$m.strategyFunction,jm=qm.strategyFunction,{transformWorldToIndex:Km}=ie.utilities,Ym={[xm.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=Oo.vec3.fromValues(0,0,0);t.forEach((e=>{Oo.vec3.add(r,r,e)})),Oo.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Km(o,r);const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=Lg(t.slice(0,2),o,i);a.boundsIJK=s,n?n.isInObject=Gm({topLeftWorld:l,bottomRightWorld:d,center:r}):a.isInObject=Gm({topLeftWorld:l,bottomRightWorld:d,center:r})}},Xm=new Lm("Sphere",Pm.regionFill,Pm.setValue,Ym,Pm.determineSegmentIndex,Pm.preview),Jm=Xm.strategyFunction,Zm=new Lm("SphereThreshold",...Xm.compositions,Pm.dynamicThreshold,Pm.threshold,Pm.islandRemoval).strategyFunction,Qm=new Lm("EraseSphere",Pm.erase,...Xm.compositions).strategyFunction,ev=new Lm("EraseCircle",Pm.erase,...$m.compositions).strategyFunction;class tv extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:zm,ERASE_INSIDE_CIRCLE:ev,FILL_INSIDE_SPHERE:Jm,ERASE_INSIDE_SPHERE:Qm,THRESHOLD_INSIDE_CIRCLE:jm,THRESHOLD_INSIDE_SPHERE:Zm},strategySpecificConfiguration:{THRESHOLD:{threshold:[-150,-70]}},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",thresholdVolumeId:null,brushSize:25,preview:{enabled:!1,previewColors:{},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[xm.AcceptPreview]:{method:xm.AcceptPreview,bindings:[{key:"Enter"}]},[xm.RejectPreview]:{method:xm.RejectPreview,bindings:[{key:"Escape"}]}}}}),ae(this,"_editData",void 0),ae(this,"_hoverData",void 0),ae(this,"_previewData",{preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}),ae(this,"onSetToolPassive",(e=>{this.disableCursor()})),ae(this,"onSetToolEnabled",(()=>{this.disableCursor()})),ae(this,"onSetToolDisabled",(e=>{this.disableCursor()})),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n);this._editData=this.createEditData(n),this._activateDraw(n),Fr(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const o=this._hoverData||this.createHoverData(n);Ar(o.viewportIdsToRender);const a=this.getOperationData(n);return this.applyActiveStrategyCallback(i,a,xm.OnInteractionStart),!0})),ae(this,"mouseMoveCallback",(e=>{if(this.mode===Oe.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:i}=this.configuration.preview,{currentPoints:o,element:a}=e.detail,{canvas:r}=o,{preview:s,startPoint:l,timer:d,timerStart:c,isDrag:h}=this._previewData,u=Oo.vec2.distance(r,l),g=Date.now()-c;if((u>n||g>t&&u>i)&&(d&&(window.clearTimeout(d),this._previewData.timer=null),s&&!h&&this.rejectPreview(a)),!this._previewData.timer){const e=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:e,startPoint:r,element:a})}}})),ae(this,"previewCallback",(()=>{this._previewData.preview||(this._previewData.timer=null,this._previewData.preview=this.applyActiveStrategyCallback((0,ie.getEnabledElement)(this._previewData.element),this.getOperationData(this._previewData.element),xm.Preview))})),ae(this,"_dragCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,ie.getEnabledElement)(n),{renderingEngine:a}=o;this.updateCursor(e);const{viewportIdsToRender:r}=this._hoverData;Ar(r);const s=Oo.vec2.distance(i.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:d}=this.configuration.preview;!this._previewData.isDrag&&this._previewData.preview&&Date.now()-this._previewData.timerStart<l&&s<d||(this._previewData.preview=this.applyActiveStrategy(o,this.getOperationData(n)),this._previewData.element=n,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=i.canvas)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),o=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(i,o),this._deactivateDraw(n),Hr(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(i,o,xm.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback)}))}disableCursor(){this._hoverData=void 0,this.rejectPreview()}createEditData(e){const t=(0,ie.getEnabledElement)(e),{viewport:n}=t,i=$d(n.id);if(!i)throw new Error("No active segmentation detected, create a segmentation representation before using the brush tool");const{segmentationId:o,type:a}=i;if(a===ri.Contour)throw new Error("Not implemented yet");const r=Kd(o),{representationData:s}=Yi(o);if(co(s[ri.Labelmap],n)){const{volumeId:e}=s[a],t=n.getActors();if(n instanceof ie.StackViewport){const e=new CustomEvent(ie.Enums.Events.ERROR_EVENT,{detail:{type:"Segmentation",message:"Cannot perform brush operation on the selected viewport"},cancelable:!0});return ie.eventTarget.dispatchEvent(e),null}const i=t.map((e=>ie.cache.getVolume(e.referencedId))),o=ie.cache.getVolume(e),l=i.find((e=>ie.utilities.isEqual(e.dimensions,o.dimensions)))?.volumeId||i[0]?.volumeId;return{volumeId:e,referencedVolumeId:this.configuration.thresholdVolumeId??l,segmentsLocked:r}}{const e=dc(n.id,o);if(!e)return;if(this.configuration.activeStrategy.includes("SPHERE"))throw new Error("Sphere manipulation is not supported for stacks of image segmentations yet");return{imageId:e,segmentsLocked:r}}}createHoverData(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=i.getCamera(),{viewPlaneNormal:a,viewUp:r}=o,s=[i.id],{segmentIndex:l,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h}=this.getActiveSegmentationData(i)||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...r],FrameOfReferenceUID:i.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:h},data:{}},centerCanvas:t,segmentIndex:l,viewport:i,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h,viewportIdsToRender:s}}getActiveSegmentationData(e){const t=$d(e.id);if(!t)return void console.warn("No active segmentation detected, create one before using the brush tool");const{segmentationId:n,segmentationRepresentationUID:i}=t,o=qd(n);return{segmentIndex:o,segmentationId:n,segmentationRepresentationUID:i,segmentColor:wo(i,o)}}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas;this._hoverData=this.createHoverData(n,o),this._calculateCursor(n,o),this._hoverData&&Ar(this._hoverData.viewportIdsToRender)}getOperationData(e){const t=this._editData||this.createEditData(e),{segmentIndex:n,segmentationId:i,segmentationRepresentationUID:o,brushCursor:a}=this._hoverData||this.createHoverData(e),{data:r,metadata:s={}}=a||{},{viewPlaneNormal:l,viewUp:d}=s;return{...t,points:r?.handles?.points,segmentIndex:n,previewColors:this.configuration.preview.enabled?this.configuration.preview.previewColors:null,viewPlaneNormal:l,toolGroupId:this.toolGroupId,segmentationId:i,segmentationRepresentationUID:o,viewUp:d,strategySpecificConfiguration:this.configuration.strategySpecificConfiguration,preview:this._previewData?.preview}}_calculateCursor(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,{canvasToWorld:o}=i,a=i.getCamera(),{brushSize:r}=this.configuration,s=Oo.vec3.fromValues(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=Oo.vec3.fromValues(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),d=Oo.vec3.create();Oo.vec3.cross(d,s,l);const c=o([t[0],t[1]]),h=Oo.vec3.create(),u=Oo.vec3.create(),g=Oo.vec3.create(),m=Oo.vec3.create();for(let e=0;e<=2;e++)h[e]=c[e]-s[e]*r,u[e]=c[e]+s[e]*r,g[e]=c[e]-d[e]*r,m[e]=c[e]+d[e]*r;if(!this._hoverData)return;const{brushCursor:v}=this._hoverData,{data:p}=v;void 0===p.handles&&(p.handles={}),p.handles.points=[h,u,g,m];const f=this.configuration.activeStrategy,w=this.configuration.strategies[f];"function"==typeof w.computeInnerCircleRadius&&w.computeInnerCircleRadius({configuration:this.configuration,viewport:i}),p.invalidated=!1}rejectPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e||!this._previewData.preview)return;const t=(0,ie.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),xm.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e)return;const t=(0,ie.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),xm.AcceptPreview),this._previewData.isDrag=!1,this._previewData.preview=null}invalidateBrushCursor(){if(void 0===this._hoverData)return;const{data:e}=this._hoverData.brushCursor,{viewport:t}=this._hoverData;e.invalidated=!0;const{segmentColor:n}=this.getActiveSegmentationData(t)||{};this._hoverData.brushCursor.metadata.segmentColor=n}renderAnnotation(e,t){if(!this._hoverData)return;const{viewport:n}=e;if(!this._hoverData.viewportIdsToRender.includes(n.id))return;const i=this._hoverData.brushCursor;if(!0===i.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=n;this._calculateCursor(t,e)}const o=i.metadata;if(!o)return;const a=o.brushCursorUID,r=i.data,{points:s}=r.handles,l=s.map((e=>n.worldToCanvas(e))),d=l[0],c=l[1],h=[Math.floor((d[0]+c[0])/2),Math.floor((d[1]+c[1])/2)],u=Math.abs(d[1]-Math.floor((d[1]+c[1])/2)),g=`rgb(${o.segmentColor?.slice(0,3)||[0,0,0]})`;if(!n.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");Eg(t,a,"0",h,u,{color:g});const m=this.configuration.activeStrategy,{dynamicRadiusInCanvas:v}=this.configuration.strategySpecificConfiguration[m]||{dynamicRadiusInCanvas:0};v&&Eg(t,a,"1",h,v,{color:g})}}ae(tv,"toolName",void 0),tv.toolName="Brush";const nv=tv;function iv(e,t){const n=Wd(e);if(void 0===n)return;const i=n._toolInstances;return Object.keys(i).length?t&&i[t]?[i[t]]:Object.values(i).filter((e=>e instanceof nv)):void 0}function ov(e,t,n){const i=Wd(e);if(void 0===i)return;iv(e,n).forEach((e=>{e.configuration.brushSize=t,e.invalidateBrushCursor()}));const o=i.getViewportsInfo(),a=Object.keys(o).map((e=>o[e]));if(!a.length)return;const{renderingEngineId:r}=a[0],s=i.getViewportIds();(0,ie.getRenderingEngine)(r),Ar(s)}function av(e,t){const n=Wd(e);if(void 0===n)return;const i=n._toolInstances;if(!Object.keys(i).length)return;const o=iv(e,t)[0];return o?o.configuration.brushSize:void 0}function rv(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{isDynamic:!1};const i=Wd(e);if(void 0===i)return;const o=iv(e),a={...n,...void 0!==t&&{threshold:t}};o.forEach((e=>{e.configuration.strategySpecificConfiguration.THRESHOLD={...e.configuration.strategySpecificConfiguration.THRESHOLD,...a}}));const r=i.getViewportsInfo();if(!r.length)return;const{renderingEngineId:s}=r[0],l=i.getViewportIds();(0,ie.getRenderingEngine)(s),Ar(l)}function sv(e){const t=Wd(e);if(void 0===t)return;const n=t._toolInstances;if(!Object.keys(n).length)return;const i=iv(e)[0];return i?i.configuration.strategySpecificConfiguration.THRESHOLD.threshold:void 0}const lv=function(e,t,n,i){const{baseVolumeIdx:o,volumeInfoList:a}=pi(e,n),{voxelManager:r}=a[o],s=r,l=e.voxelManager.getScalarDataLength(),d=e.voxelManager;return a.forEach((e=>{const{volumeSize:n}=e;n===l?function(e,t,n,i){const{lower:o,upper:a}=i,r=e.getScalarDataLength();for(let i=0;i<r;i++)if(e.getAtIndex[i]===n){const r=t.getAtIndex(i);e.setAtIndex(i,r>=o&&r<=a?n:0)}}(d,s,t,e):function(e,t,n,i,o,a,r){const{imageData:s,lower:l,upper:d,dimensions:c}=i;let h,u,g;const m=e.getScalarDataLength();for(let t=0;t<m;t++)if(m.getAtIndex(t)===n){const i=vi(s,c,o[a].spacing,o[a].imageData.getPoint(t)),m=e=>{let{value:t}=e;h+=1,t>=g.lower&&t<=g.upper&&(u+=1)};h=0,u=0,g={lower:l,upper:d};let v=!1;e.forEach(m,{imageData:s,boundsIJK:i}),v=0===r?u>0:u===h,e.setAtIndex(t,v?n:0)}}(d,0,t,e,a,o,i)})),Ci(e.volumeId),e};function dv(e,t,n){const i=n.toIJK(e),o=n.toIJK(t),a=Oo.vec3.create(),{testIJK:r}=n,s=Oo.vec3.sub(Oo.vec3.create(),i,o),l=Math.round(Math.max(...s.map(Math.abs)));if(l<2)return!0;const d=Oo.vec3.scale(Oo.vec3.create(),s,1/l);for(let e=1;e<l;e++)if(Oo.vec3.scaleAndAdd(a,o,d,e),!r(a))return!1;return!0}const cv=.01;function hv(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{maxMajor:0,maxMinor:0};const{points:i}=e.polyData,{maxMinor:o,maxMajor:a}=n;let r,s=a*a,l=o*o;for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],d=Oo.vec3.sqrDist(o,a);d<s||d-cv<s+cv&&r||t.testCenter(o,a)&&dv(o,a,t)&&(s=d-cv,r=[e,n],l=0)}if(!r)return;s=Math.sqrt(s+cv);const d=i[r[0]],c=i[r[1]],h=Oo.vec3.sub(Oo.vec3.create(),d,c);let u;Oo.vec3.scale(h,h,1/s);for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],r=Oo.vec3.sqrDist(o,a);if(r<=l)continue;const s=Oo.vec3.sub(Oo.vec3.create(),o,a);Math.abs(Oo.vec3.dot(s,h))/Math.sqrt(r)>cv||t.testCenter(o,a)&&dv(o,a,t)&&(l=r,u=[e,n])}return u?(l=Math.sqrt(l),{majorAxis:[d,c],minorAxis:[i[u[0]],i[u[1]]],maxMajor:s,maxMinor:l,...e}):void 0}const{Labelmap:uv}=ri;function gv(e){const t=zg({segmentations:e});if(!t?.length||!t[0].sliceContours.length)return;const{representationData:n,segments:i=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,{volumeId:o}=n[uv],a=i.findIndex((e=>!!e));return-1!==a?(i[a].segmentIndex=a,function(e,t,n){const{sliceContours:i}=e,{segmentIndex:o,containedSegmentIndices:a}=n;let r;const s=function(e,t,n){const i=ie.cache.getVolume(e);if(!i)return void console.warn(`No volume found for ${e}`);const o=i.imageData.getPointData().getScalars().getData(),a=i.dimensions[0],r=a*i.dimensions[1];return{testCenter:(e,s)=>{const l=Oo.vec3.add(Oo.vec3.create(),e,s).map((e=>e/2)),d=i.imageData.worldToIndex(l).map(Math.round),[c,h,u]=d,g=o[c+h*a+u*r];return g===t||n?.has(g)},toIJK:e=>i.imageData.worldToIndex(e),testIJK:e=>{const[i,s,l]=e,d=Math.round(i)+Math.round(s)*a+Math.round(l)*r,c=o[d];return c===t||n?.has(c)}}}(t,o,a);for(const e of i){const t=hv(e,s,r);t&&(r=t)}return r&&Object.assign(r,n),r}(t[0],o,i[a])):void 0}function mv(e,t){const{majorAxis:n,minorAxis:i,label:o="",sliceIndex:a}=e,[r,s]=n,[l,d]=i,c=[r,s,l,d];return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...t.getViewReference({sliceIndex:a})},data:{handles:{points:c,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:o,cachedStats:{}},isLocked:!1,isVisible:!0}}function vv(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function pv(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,u=s-a,g=o-r,m=r*a-o*s,v=u*l+g*d+m,p=u*c+g*h+m;if(0!==v&&0!==p&&vv(v)===vv(p))return;const f=h-d,w=l-c,I=c*d-l*h,E=f*o+w*a+I,C=f*r+w*s+I;if(0!==E&&0!==C&&vv(E)===vv(C))return;const _=u*w-f*g;let b;b=g*I-w*m;const T=b/_;return b=f*m-u*I,[T,b/_]}const{transformWorldToIndex:fv}=ie.utilities;class wv extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Iv}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preventHandleOutsideImage",void 0),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;let l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[1]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=im([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]);return h<=i||(l=a.worldToCanvas(s[2]),d=a.worldToCanvas(s[3]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=im([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]),h<=i)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),Fr(i),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=t.data;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());Fr(o),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);if(void 0!==this.editData.handleIndex){const{points:e}=s.handles,t=Oo.vec3.distance(e[0],e[1]);if(Oo.vec3.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],i=[...e[1]],o=Oo.vec2.create();Oo.vec2.set(o,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=Oo.vec2.create();Oo.vec2.set(a,-o[1],o[0]);const r=Oo.vec2.create();let l;Oo.vec2.set(r,i[0]-n[0],i[1]-n[0]),l=Oo.vec2.dot(r,a)>0?[n,i]:[i,n],s.handles.points=[t[0],t[1],l[0],l[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=(0,ie.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,{worldToCanvas:s}=r,{annotation:l,viewportIdsToRender:d,handleIndex:c}=this.editData,{data:h}=l,u=n.world;h.handles.points[c]=[...u];const g=h.handles.points.map(s),m={x:g[0][0],y:g[0][1]},v={x:g[1][0],y:g[1][1]},p=(g[2][0],g[2][1],g[3][0],g[3][1],Oo.vec2.distance(g[0],g[1])/3),f=m.x-v.x,w=m.y-v.y,I=Math.sqrt(f*f+w*w),E=f/I,C=w/I,_=(m.x+v.x)/2,b=(m.y+v.y)/2,T=_+p*C,D=b-p*E,S=_-p*C,y=b+p*E;h.handles.points[2]=r.canvasToWorld([T,D]),h.handles.points[3]=r.canvasToWorld([S,y]),l.invalidated=!0,Ar(d),this.editData.hasMoved=!0})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{renderingEngine:o}=i,{annotation:a,viewportIdsToRender:r,handleIndex:s,movingTextBox:l}=this.editData,{data:d}=a;if(l){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===s){const{deltaPoints:e}=t,n=e.world;d.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),a.invalidated=!0}else this._dragModifyHandle(e),a.invalidated=!0;Ar(r)})),ae(this,"_dragModifyHandle",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,ie.getEnabledElement)(i),{viewport:a}=o,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,d=n.world,c=[a.worldToCanvas(l.handles.points[0]),a.worldToCanvas(l.handles.points[1]),a.worldToCanvas(l.handles.points[2]),a.worldToCanvas(l.handles.points[3])],h={start:{x:c[0][0],y:c[0][1]},end:{x:c[1][0],y:c[1][1]}},u={start:{x:c[2][0],y:c[2][1]},end:{x:c[3][0],y:c[3][1]}},g=[...d],m=a.worldToCanvas(g);if(0===s||1===s){const e=c[0===s?1:0],t=Oo.vec2.set(Oo.vec2.create(),m[0]-e[0],m[1]-e[1]),n=Oo.vec2.set(Oo.vec2.create(),c[s][0]-e[0],c[s][1]-e[1]);Oo.vec2.normalize(t,t),Oo.vec2.normalize(n,n);const i={start:{x:e[0],y:e[1]},end:{x:m[0],y:m[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(i,u))return;const o=e,r=this._getSignedAngle(n,t);let d=c[2][0],h=c[2][1],v=c[3][0],p=c[3][1];d-=o[0],h-=o[1],v-=o[0],p-=o[1];const f=d*Math.cos(r)-h*Math.sin(r),w=d*Math.sin(r)+h*Math.cos(r),I=v*Math.cos(r)-p*Math.sin(r),E=v*Math.sin(r)+p*Math.cos(r);d=f+o[0],h=w+o[1],v=I+o[0],p=E+o[1];const C=a.canvasToWorld([d,h]),_=a.canvasToWorld([v,p]);l.handles.points[s]=g,l.handles.points[2]=C,l.handles.points[3]=_}else{const e=2===s?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:u.start,end:u.end}},n=Oo.vec2.subtract(Oo.vec2.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),i=Oo.vec2.normalize(Oo.vec2.create(),n),o=Oo.vec2.subtract(Oo.vec2.create(),[m[0],m[1]],[c[s][0],c[s][1]]),r=Oo.vec2.length(o),d=this._getSignedAngle(i,o),v=Math.cos(d)*r,p=Oo.vec2.scaleAndAdd(Oo.vec2.create(),[c[e][0],c[e][1]],i,v);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:m[0],y:m[1]},end:{x:p[0],y:p[1]}},{start:{x:t.longLineSegment.start.x,y:t.longLineSegment.start.y},end:{x:t.longLineSegment.end.x,y:t.longLineSegment.end.y}}))return;if(!pv([m[0],m[1]],[p[0],p[1]],[h.start.x,h.start.y],[h.end.x,h.end.y]))return;l.handles.points[e]=a.canvasToWorld(p),l.handles.points[s]=g}})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragDrawCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragDrawCallback)})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!0;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles,m=u.map((e=>i.worldToCanvas(e)));l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f,shadow:w}=this.getAnnotationStyle({annotation:d,styleSpecifier:l});if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={length:null,width:null,unit:null},this._calculateCachedStats(d,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let I;if(!Je(c))continue;ue(d)||this.editData||null===g||(I=[m[g]]),I&&ul(t,c,"0",I,{color:v});const E=`${c}-line-1`,C=`${c}-line-2`;Ml(t,c,"0",m[0],m[1],{color:v,lineDash:f,lineWidth:p,shadow:w},E),Ml(t,c,"1",m[2],m[3],{color:v,lineDash:f,lineWidth:p,shadow:w},C),n=!0;const _=this.getLinkedTextBoxStyle(l,d);if(!_.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const b=this.configuration.getTextLines(h,r);if(!b||0===b.length)continue;let T;h.handles.textBox.hasMoved||(T=Al(m),h.handles.textBox.worldPosition=i.canvasToWorld(T));const D=i.worldToCanvas(h.handles.textBox.worldPosition),S=Pl(t,c,"1",b,D,m,{},_),{x:y,y:x,width:M,height:O}=S;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([y,x]),topRight:i.canvasToWorld([y+M,x]),bottomLeft:i.canvasToWorld([y,x+O]),bottomRight:i.canvasToWorld([y+M,x+O])}}return n})),ae(this,"_movingLongAxisWouldPutItThroughShortAxis",((e,t)=>{const n=Oo.vec2.create();Oo.vec2.set(n,t.end.x-t.start.x,t.end.y-t.start.y),Oo.vec2.normalize(n,n);const i={start:{x:t.start.x-10*n[0],y:t.start.y-10*n[1]},end:{x:t.end.x+10*n[0],y:t.end.y+10*n[1]}};return!pv([i.start.x,i.start.y],[i.end.x,i.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])})),ae(this,"_calculateCachedStats",((e,t,n)=>{const{data:i}=e,{element:o}=n.viewport,a=i.handles.points[0],r=i.handles.points[1],s=i.handles.points[2],l=i.handles.points[3],{cachedStats:d}=i,c=Object.keys(d);for(let e=0;e<c.length;e++){const n=c[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:h}=i,u=fv(o,a),g=fv(o,r),m=fv(o,s),v=fv(o,l),p=[u,g],f=[m,v],{scale:w,lengthUnits:I}=va(i,p),{scale:E,lengthUnits:C}=va(i,f),_=this._calculateLength(a,r)/w,b=this._calculateLength(s,l)/E,T=_>b?_:b,D=_>b?b:_,S=_>b?I:C,y=_>b?C:I;this._isInsideVolume(u,g,m,v,h)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,d[n]={length:T,width:D,lengthUnits:S,widthUnit:y}}return e.invalidated=!1,Le(e,o),d})),ae(this,"_isInsideVolume",((e,t,n,i,o)=>ie.utilities.indexWithinDimensions(e,o)&&ie.utilities.indexWithinDimensions(t,o)&&ie.utilities.indexWithinDimensions(n,o)&&ie.utilities.indexWithinDimensions(i,o))),ae(this,"_getSignedAngle",((e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]))),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(m),g}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}}function Iv(e,t){const{cachedStats:n,label:i}=e,{length:o,width:a,unit:r,lengthUnits:s,widthUnit:l}=n[t],d=[];return i&&d.push(i),void 0===o||d.push(`L: ${ie.utilities.roundNumber(o)} ${s||r}`,`W: ${ie.utilities.roundNumber(a)} ${l||r}`),d}ae(wv,"toolName",void 0),wv.toolName="Bidirectional";const Ev=wv;function Cv(e,t){const{data:n}=t,i=(0,ie.getEnabledElement)(e),o=(n.getSegment||_v)(i,n);if(!o)return;const a=i.viewport.getFrameOfReferenceUID(),r=no(),{segmentIndex:s,segmentationId:l}=o,d=lt(this.toolName||Ev.toolName,a);let c=!1;const h=d.filter((e=>{const t=e.data.segment;return!!t&&(t.segmentationId===l&&t.segmentIndex===s&&(c=!0,e.data.segment=t),!0)}));let u;if(c||h.push({data:{segment:o}}),h.forEach((e=>{const t=[],n=e.data.segment,{segmentIndex:s,segmentationId:l}=n;t[s]=n,pt(e.annotationUID);const d=gv({...r.find((e=>e.segmentationId===l)),segments:t});if(!d)return;const c=mv(d,i.viewport);c.annotationUID=e.annotationUID,c.data.segment=n;const h=mt(c,a);if(n.segmentIndex===o.segmentIndex&&n.segmentationId===o.segmentationId){u=d;const{style:e}=o;e&&Gl.setAnnotationStyles(h,e)}})),u){const{sliceIndex:t}=u,n=i.viewport.getImageIds();cg(e,{imageIndex:n.length-1-t}),i.viewport.render()}else console.warn("No bidirectional found");return u}function _v(e,t){const n=no();if(!n.length)return;const i=t.segmentationId||n[0].segmentationId,o=t.segmentIndex??qd(i);if(!o)return;const a=t.segmentData?.get(o);return{label:`Segment ${o}`,segmentIndex:o,segmentationId:i,...a}}function bv(e){const t=Wd(e);if(void 0===t)return;iv(e).forEach((e=>{e.invalidateBrushCursor()}));const n=t.getViewportsInfo();if(!Object.keys(n).map((e=>n[e])).length)return;const i=t.getViewportIds();Ar(i)}function Tv(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=Yi(e),o=i.representationData,a=n?.representationType??Object.keys(o)[0];if(!a)throw new Error(`Segmentation ${e} does not have any representations`);switch(a){case ri.Labelmap:return function(e,t,n){let{viewport:i}=n;const o=e.representationData.LABELMAP;if(co(o)){const{volumeId:e}=o,n=ie.cache.getVolume(e);if(!n)return;return n.imageData.getScalarValueFromWorld(t)}const a=dc(i.id,e.segmentationId);if(!ie.cache.getImage(a))return;const r=Gd(e.segmentationId),{segmentationRepresentationUID:s}=r[0],l=i.getActor(s),d=l?.actor.getMapper().getInputData(),c=ie.utilities.transformWorldToIndex(d,t),h=d.getDimensions();return(d.voxelManager||ie.utilities.VoxelManager.createScalarVolumeVoxelManager({dimensions:h,scalarData:d.getPointData().getScalars().getData()})).getAtIJKPoint(c)}(i,t,n);case ri.Contour:return function(e,t,n){let{viewport:i}=n;const o=e.representationData.CONTOUR,a=Array.from(o.annotationUIDsMap.keys()),{viewPlaneNormal:r}=i.getCamera();for(const e of a){const n=o.annotationUIDsMap.get(e);if(n)for(const i of n){const n=be(i);if(!n)continue;const{polyline:o}=n.data.contour;if(ie.utilities.isEqual(r,n.metadata.viewPlaneNormal)&&ar(t,o))return Number(e)}}}(i,t,n);default:return}}function Dv(e,t,n){let{viewport:i,searchRadius:o}=n;const a=Yi(e),r=a.representationData.LABELMAP;if(co(r)){const{volumeId:e}=r,n=ie.cache.getVolume(e);if(!n)return;const a=n.imageData,s=a.getScalarValueFromWorld(t),l=function(e,t,n,i,o){return Sv(((t,o)=>{const a=[e[0]+t,e[1]+o],r=n.canvasToWorld(a);return i.getScalarValueFromWorld(r)}),t,o)}(i.worldToCanvas(t),s,i,a,o);return l?s:void 0}const s=dc(i.id,e);if(i.getCurrentImageId(),!ie.cache.getImage(s))return;const l=Gd(a.segmentationId),{segmentationRepresentationUID:d}=l[0],c=i.getActor(d),h=c?.actor.getMapper().getInputData(),u=ie.utilities.transformWorldToIndex(h,t),g=h.getDimensions(),m=h.voxelManager||ie.utilities.VoxelManager.createScalarVolumeVoxelManager({dimensions:g,scalarData:h.getPointData().getScalars().getData()}),v=m.getAtIJKPoint(u),p=function(e,t,n,i){return Sv(((t,i,o)=>{const a=[e[0]+t,e[1]+i,e[2]+o];return n.getAtIJK(a[0],a[1],a[2])}),i,void 0)}(u,0,m,v);return p?v:void 0}function Sv(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const i=Array.from({length:2*n+1},((e,t)=>t-n));for(const n of i)for(const o of i)for(const a of i){if(0===n&&0===o&&0===a)continue;const i=e(n,o,a);if(void 0!==i&&t!==i)return!0}return!1}function yv(e){const t=Yi(e),{annotationUIDsMap:n}=t.representationData.CONTOUR;for(const[e,t]of n.entries())if(Array.from(t).find((e=>be(e).highlighted)))return e}function xv(e,t){const n=e.maxX-e.minX,i=e.maxY-e.minY,o=[n,i],a=[e.minX+n/2,e.minY+i/2],r=[Math.abs(t[0]-a[0]),Math.abs(t[1]-a[1])],s=r[0]-.5*o[0],l=r[1]-.5*o[1];if(s>0&&l>0)return s*s+l*l;const d=Math.max(s,0)+Math.max(l,0);return d*d}function Mv(e,t){return Math.sqrt(xv(e,t))}function Ov(e,t){const[n,i]=e,[o,a]=t;return[2*o-n,2*a-i]}const Pv=1e-6,Av=1,Rv=0;function Lv(e,t,n){const[i,o]=n;if(Math.abs(t)<Pv)return e<0;const a=e/t;if(t>0){if(a>o)return 0;a>i&&(n[0]=a)}else{if(a<i)return 0;a<o&&(n[1]=a)}return 1}function Nv(e,t,n,i,o){const[a,r]=e,[s,l]=t,d=s-a,c=l-r;if(void 0===i||void 0===o?(i=e,o=t):(i[0]=e[0],i[1]=e[1],o[0]=t[0],o[1]=t[1]),Math.abs(d)<Pv&&Math.abs(c)<Pv&&a>=n[0]&&a<=n[2]&&r>=n[1]&&r<=n[3])return Av;const h=[0,1];if(Lv(n[0]-a,d,h)&&Lv(a-n[2],-d,h)&&Lv(n[1]-r,c,h)&&Lv(r-n[3],-c,h)){const[e,t]=h;return t<1&&(o[0]=a+t*d,o[1]=r+t*c),e>0&&(i[0]+=e*d,i[1]+=e*c),Av}return Rv}var Uv=E(807),kv=E.n(Uv);function Vv(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.25;const a=e.getCamera(),{position:r}=a,{spacingInNormalDirection:s}=ie.utilities.getTargetVolumeAndSpacingInNormalDir(e,a,n),l=s*o,d=e.getBounds(),c=d[0],h=d[1],u=[0,0,0];let g,m=[0,0,0];kv().subtract(t,r,u);for(let t=c;t<=h;t+=l){m=[t,0,0];const n=(t-r[0])/u[0];if(m[1]=n*u[1]+r[1],m[2]=n*u[2]+r[2],Wv(m,d)){const t=i(e.getIntensityFromWorld(m),m);t&&(g=t)}}return g}const Wv=function(e,t){const[n,i,o,a,r,s]=t;return e[0]>n&&e[0]<i&&e[1]>o&&e[1]<a&&e[2]>r&&e[2]<s},Bv=(e,t,n,i,o,a,r,s)=>{const l=[Oo.vec3.fromValues(n,i,o),Oo.vec3.fromValues(a,i,o),Oo.vec3.fromValues(n,r,o),Oo.vec3.fromValues(a,r,o),Oo.vec3.fromValues(n,i,s),Oo.vec3.fromValues(a,i,s),Oo.vec3.fromValues(n,r,s),Oo.vec3.fromValues(a,r,s)],d=Oo.vec3.fromValues(t[0],t[1],t[2]),c=Oo.vec3.fromValues(e[0],e[1],e[2]),h=-Oo.vec3.dot(d,c);let u=null;for(const e of l){const t=Oo.vec3.dot(d,e)+h;if(null===u)u=Math.sign(t);else if(Math.sign(t)!==u)return!0}return!1},Hv={filterAnnotationsWithinSlice:lr,getWorldWidthAndHeightFromCorners:nm,filterAnnotationsForDisplay:dr,getPointInLineOfSightWithCriteria:Vv,isPlaneIntersectingAABB:Bv,filterAnnotationsWithinSamePlane:hm};function Fv(e){let t="";const n=e[0]<0?"R":"L",i=e[1]<0?"A":"P",o=e[2]<0?"F":"H",a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=1e-4;for(let e=0;e<3;e++)if(a[0]>r&&a[0]>a[1]&&a[0]>a[2])t+=n,a[0]=0;else if(a[1]>r&&a[1]>a[0]&&a[1]>a[2])t+=i,a[1]=0;else if(a[2]>r&&a[2]>a[0]&&a[2]>a[1])t+=o,a[2]=0;else if(a[0]>r&&a[1]>r&&a[0]===a[1])t+=n+i,a[0]=0,a[1]=0;else if(a[0]>r&&a[2]>r&&a[0]===a[2])t+=n+o,a[0]=0,a[2]=0;else{if(!(a[1]>r&&a[2]>r&&a[1]===a[2]))break;t+=i+o,a[1]=0,a[2]=0}return t}function Gv(e){let t=e.replace("H","f");return t=t.replace("F","h"),t=t.replace("R","l"),t=t.replace("L","r"),t=t.replace("A","p"),t=t.replace("P","a"),t=t.toUpperCase(),t}var $v=function(e){return e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED",e}($v||{});const qv=$v,zv={};function jv(e,t){const n=(0,ie.getEnabledElement)(e),{viewportId:i}=n;zv[i]=t}function Kv(e){const t=(0,ie.getEnabledElement)(e),{viewportId:n}=t;return zv[n]}const{ViewportStatus:Yv}=ie.Enums,{triggerEvent:Xv}=ie.utilities,Jv=!0,Zv=new Map;function Qv(e,t){let n,i;if(void 0===e)throw new Error("playClip: element must not be undefined");const o=(0,ie.getEnabledElement)(e);if(!o)throw new Error("playClip: element must be a valid Cornerstone enabled element");t||(t={}),t.dynamicCineEnabled=t.dynamicCineEnabled??!0;const{viewport:a}=o,r=op(a),s=function(e,t){if(e instanceof ie.StackViewport)return function(e,t){const n=e.getImageIds();return{get numScrollSteps(){return n.length},get currentStepIndex(){return e.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){this.waitForRenderedCount<=t&&e.viewportStatus!==Yv.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,dg(e,{delta:n,debounceLoading:Jv}))}}}(e,t.waitForRendered??30);if(e instanceof ie.VolumeViewport){const n=op(e);return t.dynamicCineEnabled&&n?.isDynamicVolume()?function(e){return{get numScrollSteps(){return e.numTimePoints},get currentStepIndex(){return e.timePointIndex},get frameTimeVectorEnabled(){return!1},scroll(t){e.scroll(t)}}}(n):function(e,t){const{volumeId:n}=t,i={viewPlaneNormal:Oo.vec3.create(),scrollInfo:null},o=()=>{const t=e.getCamera();if(!i.scrollInfo||!Oo.vec3.equals(t.viewPlaneNormal,i.viewPlaneNormal)){const o=ie.utilities.getVolumeViewportScrollInfo(e,n);i.viewPlaneNormal=t.viewPlaneNormal,i.scrollInfo=o}return i.scrollInfo};return{get numScrollSteps(){return o().numScrollSteps},get currentStepIndex(){return o().currentStepIndex},get frameTimeVectorEnabled(){const n=e.getCamera(),i=t.direction.slice(6,9).map((e=>-e)),o=Oo.vec3.dot(i,n.viewPlaneNormal);return Oo.glMatrix.equals(o,1)},scroll(t){o().currentStepIndex+=t,dg(e,{delta:t})}}}(e,n)}if(e instanceof ie.VideoViewport)return function(e,t){return{get numScrollSteps(){return e.getNumberOfSlices()},get currentStepIndex(){return e.getSliceIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){this.waitForRenderedCount<=t&&e.viewportStatus!==Yv.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,dg(e,{delta:n,debounceLoading:Jv}))},play:t=>(t&&e.setPlaybackRate(t/24),e.play(),e.getFrameRate())}}(e,t.waitForRendered??30);throw new Error("Unknown viewport type")}(a,t);let l=Kv(e);const d=t.dynamicCineEnabled&&r?.isDynamicVolume();if(d&&np(e),l?tp(e,{stopDynamicCine:!d,viewportId:a.id}):(l={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:t.frameTimeVector??void 0,speed:t.frameTimeVectorSpeedMultiplier??1,reverse:t.reverse??!1,loop:t.loop??!0},jv(e,l)),l.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(l.framesPerSecond=Number(t.framesPerSecond),l.reverse=l.framesPerSecond<0,l.ignoreFrameTimeVector=!0),!0!==l.ignoreFrameTimeVector&&l.frameTimeVector&&l.frameTimeVector.length===s.numScrollSteps&&s.frameTimeVectorEnabled){const{timeouts:e,isTimeVarying:t}=function(e,t){let n,i,o,a=0;const r=e.length,s=[];let l=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;n++)o=Number(e[n])/t|0,s.push(o),1===n?i=o:o!==i&&(l=!0),a+=o;return s.length>0&&(o=l?a/s.length|0:s[0],s.push(o)),{timeouts:s,isTimeVarying:l}}(l.frameTimeVector,l.speed);n=e,i=t}const c=()=>{const{numScrollSteps:t,currentStepIndex:n}=s;let i=n+(l.reverse?-1:1);const o=i<0||i>=t;if(!l.loop&&o){tp(e,{stopDynamicCine:!d,viewportId:a.id});const t={element:e};return void Xv(e,qv.CLIP_STOPPED,t)}i>=t?i=0:i<0&&(i=t-1);const r=i-n;if(r)try{s.scroll(r)}catch(t){return console.warn("Play clip not scrolling",t),ip(l),void Xv(e,qv.CLIP_STOPPED,h)}};d&&Zv.set(r.volumeId,e),s.play?l.framesPerSecond=s.play(t.framesPerSecond):n&&n.length>0&&i?(l.usingFrameTimeVector=!0,l.intervalId=window.setTimeout((function e(){l.intervalId=window.setTimeout(e,n[s.currentStepIndex]),c()}),0)):(l.usingFrameTimeVector=!1,l.intervalId=window.setInterval(c,1e3/Math.abs(l.framesPerSecond)));const h={element:e};Xv(e,qv.CLIP_STARTED,h)}function ep(e){tp(e,{stopDynamicCine:!0,...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}})}function tp(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{stopDynamicCine:!0,viewportId:void 0};const{stopDynamicCine:n,viewportId:i}=t,o=(0,ie.getEnabledElement)(e);let a;const r=o?.viewport;if(o){const{viewport:e}=o;a=Kv(e.element)}else{if(!i)return;a=function(e){return zv[e]}(i)}a&&ip(a),r instanceof ie.VideoViewport?r.pause():n&&r instanceof ie.BaseVolumeViewport&&np(e)}function np(e){const{viewport:t}=(0,ie.getEnabledElement)(e),n=op(t);if(n?.isDynamicVolume()){const t=Zv.get(n.volumeId);Zv.delete(n.volumeId),t&&t!==e&&ep(t)}}function ip(e){const t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}function op(e){const t=function(e){return e.getActors().map((e=>ie.cache.getVolume(e.uid))).filter((e=>!!e))}(e);return t.find((e=>e.isDynamicVolume()))??t[0]}function ap(e,t,n){if(function(e,t,n){if(!t?.data?.polyline||n<=0)return!0;if(!e.viewport)return!0;const{renderingEngineId:i,viewportId:o,FrameOfReferenceUID:a}=e,r=ur(o,i);if(t.metadata.FrameOfReferenceUID!==a)return!0;if(!r)return!0;const s=r.getToolInstance(t.metadata.toolName);return!(s instanceof nc)||s.isDrawing||s.isEditingOpen||s.isEditingClosed}(e,t,n))return!1;const{viewport:i}=e,o=t.data.contour.polyline.map(i.worldToCanvas),a=Yr(o,0,o.length,n);return a!==o&&(t.data.contour.polyline=a.map(i.canvasToWorld),!0)}const rp={smoothAnnotation:ap},{isEqual:sp}=ie.utilities,lp=[Oo.vec3.fromValues(1,0,0),Oo.vec3.fromValues(0,1,0),Oo.vec3.fromValues(0,0,1)];function dp(e){const t=Oo.vec3.subtract(Oo.vec3.create(),e[0],e[1]),n=Oo.vec3.subtract(Oo.vec3.create(),e[0],e[2]);return[...cp(t,lp),...cp(n,lp)].every((e=>sp(e,0)||sp(e,90)||sp(e,180)||sp(e,270)))}function cp(e,t){return t.map((t=>180*Oo.vec3.angle(e,t)/Math.PI))}const hp={};function up(e,t){const n=(0,ie.getEnabledElement)(e),{viewportId:i}=n;hp[i]=t}function gp(e){const t=(0,ie.getEnabledElement)(e),{viewportId:n}=t;return hp[n]}const mp=ie.Enums.RequestType.Prefetch,vp=0;function pp(e,t){e=Math.round(e)||0;const n=[];let i=(t=Math.round(t)||0)-e+1;if(i<=0)return n;for(;i--;)n[i]=t--;return n}function fp(e){const t=(0,ie.getEnabledElement)(e);if(!t)return null;const{viewport:n}=t;return n instanceof ie.StackViewport?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:null}function wp(e){return function(t){const n=t.detail;let i;try{i=fp(e)}catch(e){return}if(!i||!i.imageIds||0===i.imageIds.length)return;const o=i.imageIds.indexOf(n.imageId);if(o<0)return;const a=gp(e);a&&a.indicesToRequest&&a.indicesToRequest.length&&a.indicesToRequest.push(o)}}const Ip=e=>{const t=new Set(e.imageIds);return e=>e.type!==mp||!t.has(e.additionalDetails.imageId)};let Ep,Cp={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function _p(e){const t=gp(e);if(!t)return;const n=t||{},i=fp(e);if(!i?.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:o}=i;if(n.enabled=n.enabled&&(n.indicesToRequest?.length??0)>0,!1===n.enabled)return;if(t.indicesToRequest.sort(((e,t)=>e-t)),n.indicesToRequest.slice().forEach((function(e){const t=i.imageIds[e];t&&(Math.abs(o-e)<6?ie.cache.getImageLoadObject(t):ie.cache.isLoaded(t))&&function(e){const t=n.indicesToRequest.indexOf(e);t>-1&&n.indicesToRequest.splice(t,1)}(e)})),!n.indicesToRequest.length)return;Cp.preserveExistingPool||ie.imageLoadPoolManager.clearRequestStack(mp);const a=function(e,t){let n=0,i=e.length-1;return e.forEach(((e,o)=>{e<t?n=Math.max(o,n):e>t&&(i=Math.min(o,i))})),{low:n,high:i}}(n.indicesToRequest,i.currentImageIdIndex);let r,s,l=a.low,d=a.high;const c=[];for(;l>=0||d<n.indicesToRequest.length;){const e=i.currentImageIdIndex,t=!(e-n.indicesToRequest[l]>Cp.maxImagesToPrefetch)&&l>=0,o=!(n.indicesToRequest[d]-e>Cp.maxImagesToPrefetch)&&d<n.indicesToRequest.length;if(!o&&!t)break;t&&(s=n.indicesToRequest[l--],r=i.imageIds[s],c.push(r)),o&&(s=n.indicesToRequest[d++],r=i.imageIds[s],c.push(r))}const h=(e,t)=>ie.imageLoader.loadAndCacheImage(e,t);c.forEach((e=>{const t={requestType:mp};ie.imageLoadPoolManager.addRequest(h.bind(null,e,t),mp,{imageId:e},vp)}))}function bp(e){clearTimeout(Ep),Ep=setTimeout((function(){const t=e.target;try{_p(t)}catch(e){return}}),10)}const Tp={enable:function(e){const t=fp(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n={indicesToRequest:pp(0,t.imageIds.length-1),enabled:!0,direction:1},i=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(i,1),up(e,n),_p(e),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,bp),e.addEventListener(ie.Enums.Events.STACK_NEW_IMAGE,bp);const o=wp(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o),ie.eventTarget.addEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o)},disable:function(e){clearTimeout(Ep),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,bp);const t=wp(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=gp(e);n&&n.indicesToRequest.length&&(n.enabled=!1,ie.imageLoadPoolManager.clearRequestStack(mp))},getConfiguration:function(){return Cp},setConfiguration:function(e){Cp=e}};let Dp,Sp={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1};function yp(e){const t=fp(e);if(!t)return;if(!t?.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n=gp(e);if(!n)return;const i=n||{};if(i.enabled=i.enabled&&(i.indicesToRequest?.length??0)>0,!1===i.enabled)return;function o(e){const t=i.indicesToRequest.indexOf(e);t>-1&&i.indicesToRequest.splice(t,1)}const a=i.indicesToRequest.slice(),{currentImageIdIndex:r}=t;if(a.forEach((e=>{const n=t.imageIds[e];n&&(Math.abs(r-e)<6?ie.cache.getImageLoadObject(n):ie.cache.isLoaded(n))&&o(e)})),!i.indicesToRequest.length)return;Sp.preserveExistingPool||ie.imageLoadPoolManager.filterRequests(Ip(t));const s=(n,a)=>ie.imageLoader.loadAndCacheImage(n,a).then((()=>function(n){o(t.imageIds.indexOf(n));const a=ie.cache.getCachedImageBasedOnImageURI(n),{stats:r}=i,s=a?.image?.decodeTimeInMS||0;if(s){r.imageIds.set(n,s),r.decodeTimeInMS+=s;const e=a?.image?.loadTimeInMS||0;r.loadTimeInMS+=e}if(!i.indicesToRequest.length&&a?.sizeInBytes){const{sizeInBytes:t}=a,n=ie.cache.getMaxCacheSize()/4/t;if(i.cacheFill){if(r.imageIds.size){r.fillTime=Date.now()-r.start;const{size:e}=r.imageIds;r.fillSize=e}}else r.initialTime=Date.now()-r.start,r.initialSize=r.imageIds.size,Mp(e,n),yp(e)}}(n)));i.indicesToRequest.forEach((e=>{const n=t.imageIds[e],i={requestType:mp};ie.imageLoadPoolManager.addRequest(s.bind(null,n,i),mp,{imageId:n},vp)}))}function xp(e){clearTimeout(Dp),Dp=setTimeout((function(){const t=e.target;try{Mp(t),yp(t)}catch(e){return}}),5)}const Mp=(e,t)=>{const n=fp(e);if(!n)return;if(!n.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:i}=n;let{maxAfter:o=2,minBefore:a=2}=Sp;const{directionExtraImages:r=10}=Sp,s=gp(e)||{indicesToRequest:[],currentImageIdIndex:i,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},l=i-s.currentImageIdIndex;if(s.direction=l<0?-1:1,s.currentImageIdIndex=i,s.enabled=!0,s.stackCount<100&&(s.stackCount+=r),Math.abs(l)>o||!l)if(s.stackCount=0,t){const e=i/n.imageIds.length;a=Math.ceil(t*e),o=Math.ceil(t*(1-e)),s.cacheFill=!0}else s.cacheFill=!1;else l<0?(a+=s.stackCount,o=0):(o+=s.stackCount,a=0);const d=Math.max(0,i-a),c=Math.min(n.imageIds.length-1,i+o),h=[];for(let e=i+1;e<=c;e++)h.push(e);for(let e=i-1;e>=d;e--)h.push(e);s.indicesToRequest=h,up(e,s)},Op={enable:e=>{const t=fp(e);if(!t)return;if(!t.imageIds?.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");Mp(e),yp(e),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,xp),e.addEventListener(ie.Enums.Events.STACK_NEW_IMAGE,xp);const n=wp(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n),ie.eventTarget.addEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n)},disable:function(e){clearTimeout(Dp),e.removeEventListener(ie.Enums.Events.STACK_NEW_IMAGE,xp);const t=wp(e);ie.eventTarget.removeEventListener(ie.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=gp(e);n&&(n.enabled=!1)},getConfiguration:function(){return Sp},setConfiguration:function(e){Sp=e}};function Pp(e,t){if(!(e instanceof ie.VolumeViewport))return;const{focalPoint:n}=e.getCamera(),i=[0,0,0];return Oo.vec3.sub(i,t,n),function(e,t){const n=e.getCamera(),i=n.viewPlaneNormal,o=Oo.vec3.dot(t,i),a=Oo.vec3.fromValues(i[0],i[1],i[2]);if(Oo.vec3.scale(a,a,o),Math.abs(a[0])>.001||Math.abs(a[1])>.001||Math.abs(a[2])>.001){const t=[0,0,0],i=[0,0,0];Oo.vec3.add(t,n.focalPoint,a),Oo.vec3.add(i,n.position,a),e.setCamera({focalPoint:t,position:i}),e.render()}}(e,i),!0}const Ap=function(e,t){const n=t.frameNumbers||[...Array(e.numTimePoints).keys()];if(!t.maskVolumeId&&!t.worldCoordinate)throw new Error("You should provide either maskVolumeId or imageCoordinate");if(t.maskVolumeId&&t.worldCoordinate)throw new Error("You can only use one of maskVolumeId or imageCoordinate");if(t.maskVolumeId){const i=ie.cache.getVolume(t.maskVolumeId),[o,a]=function(e,t,n){const{imageData:i}=n,o=n.voxelManager,a=o.getScalarDataLength(),r=[];r.length=a;const s=[],l=n.dimensions;let d=0;for(let e=0,t=a;e<t;e++)0!==o.getAtIndex(e)&&(s.push([e%l[0],Math.floor(e/l[0]%l[1]),Math.floor(e/(l[0]*l[1]))]),r[d++]=e);r.length=d;const c=t.getScalarDataArrays(),h=[];if(c[0].length===a&&JSON.stringify(t.spacing)===JSON.stringify(n.spacing)){for(let t=0;t<r.length;t++){const n=[];e.forEach((e=>{const i=c[e];n.push(i[r[t]])})),h.push(n)}return[h,s]}const{voxelManager:u}=i.get("voxelManager");return u.forEach((n=>{let{pointLPS:i,value:o,pointIJK:a}=n;if(0===o)return;const r=vi(t.imageData,t.dimensions,t.spacing,i);let l=0;const d=new Map;e.forEach((e=>d.set(e,0)));t.voxelManager.forEach((t=>{let{index:n}=t;for(let t=0;t<e.length;t++){const i=c[t][n],o=e[t];d.set(o,d.get(o)+i)}l++}),{imageData:t.imageData,boundsIJK:r});const u=[];d.forEach((e=>{u.push(e/l)})),s.push(a),h.push(u)}),{imageData:i}),[h,s]}(n,e,i);return[o,a]}if(t.worldCoordinate){const i=function(e,t,n){const{dimensions:i,imageData:o}=n,a=o.worldToIndex(t);if(a[0]=Math.floor(a[0]),a[1]=Math.floor(a[1]),a[2]=Math.floor(a[2]),!ie.utilities.indexWithinDimensions(a,i))throw new Error("outside bounds");const r=i[0],s=i[0]*i[1],l=n.getScalarDataArrays(),d=[];return e.forEach((e=>{const t=l[e],n=a[2]*s+a[1]*r+a[0];d.push(t[n])})),d}(n,t.worldCoordinate,e);return i}},Rp={[ie.Enums.GenerateImageType.SUM]:(e,t,n)=>{const i=new Float32Array(n);for(const o of t)for(let t=0;t<n;t++)i[t]+=e.getAtIndexAndTimePoint(t,o);return i},[ie.Enums.GenerateImageType.SUBTRACT]:(e,t,n)=>{if(2!==t.length)throw new Error("Please provide only 2 time points for subtraction.");const i=new Float32Array(n);for(let o=0;o<n;o++)i[o]=e.getAtIndexAndTimePoint(o,t[0])-e.getAtIndexAndTimePoint(o,t[1]);return i},[ie.Enums.GenerateImageType.AVERAGE]:(e,t,n)=>{const i=new Float32Array(n);for(const o of t)for(let t=0;t<n;t++)i[t]+=e.getAtIndexAndTimePoint(t,o);for(let e=0;e<n;e++)i[e]/=t.length;return i}},Lp=function(e,t,n){const i=n||[...Array(e.numTimePoints).keys()];if(i.length<=1)throw new Error("Please provide two or more time points");const o=e.voxelManager,a=o.getScalarDataLength(),r=Rp[t];if(!r)throw new Error(`Unsupported operation: ${t}`);return r(o,i,a)};function Np(e,t){const n=3*t;if(n<e.length)return Oo.vec3.fromValues(e[n],e[n+1],e[n+2])}function Up(e){const t=e.getLines().getData();let n=0;const i=new Map;for(;n<t.length;){const e=t[n++],o=[];for(let i=0;i<e;i++)o.push(t[n+i]);i.set(o[0],o),n+=e}const o=[],a=e=>{for(const[t,n]of e.entries())if(void 0!==n)return t;return-1};let r=a(i);for(;-1!==r;){const e=[r];for(;i.has(r);){const t=i.get(r)[1];i.has(t)&&e.push(t),i.delete(r),r=t}o.push(e),r=a(i)}return o.length?o:void 0}function kp(e){const t=Up(e);if(!t)return;const n=e.getPoints().getData();return t.map((e=>e.map((e=>Np(n,e)))))}let Vp=function(e){return e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right",e}({});const Wp=e=>e&&e.upper>e.lower,Bp=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,Hp=e=>!!e&&e.width>0&&e.height>0,Fp=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:Gp}=ie.utilities;class $p{constructor(e){ae(this,"_canvas",void 0),ae(this,"_imageRange",void 0),ae(this,"_voiRange",void 0),ae(this,"_colormap",void 0),ae(this,"_showFullImageRange",void 0),$p.validateProps(e);const{colormap:t,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:o={lower:0,upper:1},container:a,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=i,this._voiRange=o,this._showFullImageRange=r,this._canvas=this._createRootElement(n),a&&this.appendTo(a)}get colormap(){return this._colormap}set colormap(e){this._colormap=e,this.render()}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Hp(e)&&!Fp(t,e)&&(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Wp(e)&&!Bp(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Wp(e)&&!Bp(e,this._voiRange)&&(this._voiRange=e,this.render())}get showFullImageRange(){return this._showFullImageRange}set showFullImageRange(e){e!==this._showFullImageRange&&(this._showFullImageRange=e,this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}dispose(){const{_canvas:e}=this,{parentElement:t}=e;t?.removeChild(e)}static validateProps(e){const{size:t,imageRange:n,voiRange:i}=e;if(t&&!Hp(t))throw new Error('Invalid "size"');if(n&&!Wp(n))throw new Error('Invalid "imageRange"');if(i&&!Wp(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createRootElement(e){const t=document.createElement("canvas");return Object.assign(t.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(t,e),t}render(){if(!this._canvas.isConnected)return;const{_colormap:e}=this,{RGBPoints:t}=e,n=t.length/4,i=e=>{const i=4*e;if(!(e<0||e>=n))return{index:e,position:t[i],color:[t[i+1],t[i+2],t[i+3]]}},{width:o,height:a}=this._canvas,r=this._canvas.getContext("2d"),s=o>a,l=s?o:a,{_voiRange:d}=this,c=this._showFullImageRange?this._imageRange:{...d},{windowWidth:h}=ie.utilities.windowLevel.toWindowLevel(d.lower,d.upper);let u,g=i(0);const m=(c.upper-c.lower)/(l-1);let v=c.lower;for(let e=0;e<l;e++){const t=(v-d.lower)/h;if(g)for(let e=g.index;e<n&&!(t<=g.position);e++)u=g,g=i(e+1);let l;if(u)if(g){const e=(t-u.position)/(g.position-u.position);p=u.color,f=g.color,w=e,l=[p[0]*(1-w)+f[0]*w,p[1]*(1-w)+f[1]*w,p[2]*(1-w)+f[2]*w]}else l=[...u.color];else l=[...g.color];const c=l.map((e=>Gp(Math.round(255*e),0,255)));r.fillStyle=`rgb(${c[0]}, ${c[1]}, ${c[2]})`,s?r.fillRect(e,0,1,a):r.fillRect(0,a-e-1,o,1),v+=m}var p,f,w}}const qp={FONT:"10px Arial",COLOR:"white",TICK_SIZE:5,TICK_WIDTH:1,TICK_LABEL_MARGIN:3,MAX_NUM_TICKS:8,TICKS_STEPS:[1,2.5,5,10]};class zp{constructor(e){ae(this,"_canvas",void 0),ae(this,"_imageRange",void 0),ae(this,"_voiRange",void 0),ae(this,"_color",void 0),ae(this,"_tickSize",void 0),ae(this,"_tickWidth",void 0),ae(this,"_labelMargin",void 0),ae(this,"_maxNumTicks",void 0),ae(this,"_rangeTextPosition",void 0),ae(this,"_showFullPixelValueRange",void 0),ae(this,"_font",void 0),zp.validateProps(e);const{top:t=0,left:n=0,size:i={width:20,height:100},imageRange:o={lower:0,upper:1},voiRange:a={lower:0,upper:1},ticks:r,container:s,showFullPixelValueRange:l=!1}=e,{style:d,position:c}=r??{};this._imageRange=o,this._voiRange=a,this._font=d?.font??qp.FONT,this._color=d?.color??qp.COLOR,this._tickSize=d?.tickSize??qp.TICK_SIZE,this._tickWidth=d?.tickWidth??qp.TICK_WIDTH,this._labelMargin=d?.labelMargin??qp.TICK_LABEL_MARGIN,this._maxNumTicks=d?.maxNumTicks??qp.MAX_NUM_TICKS,this._rangeTextPosition=c??Vp.Right,this._showFullPixelValueRange=l,this._canvas=this._createCanvasElement(i,t,n),s&&this.appendTo(s)}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Hp(e)&&!Fp(t,e)&&(this._setCanvasSize(t,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){const{_canvas:t}=this;e!==this.top&&(t.style.top=`${e}px`,this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){const{_canvas:t}=this;e!==this.left&&(t.style.left=`${e}px`,this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Wp(e)&&!Bp(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Wp(e)&&!Bp(e,this._voiRange)&&(this._voiRange=e,this.render())}get tickSize(){return this._tickSize}set tickSize(e){e!==this._tickSize&&(this._tickSize=e,this.render())}get tickWidth(){return this._tickWidth}set tickWidth(e){e!==this._tickWidth&&(this._tickWidth=e,this.render())}get color(){return this._color}set color(e){e!==this._color&&(this._color=e,this.render())}get showFullPixelValueRange(){return this._showFullPixelValueRange}set showFullPixelValueRange(e){e!==this._showFullPixelValueRange&&(this._showFullPixelValueRange=e,this.render())}get visible(){return"block"===this._canvas.style.display}set visible(e){e!==this.visible&&(this._canvas.style.display=e?"block":"none",e&&this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}static validateProps(e){const{size:t,imageRange:n,voiRange:i}=e;if(t&&!Hp(t))throw new Error('Invalid "size"');if(n&&!Wp(n))throw new Error('Invalid "imageRange"');if(i&&!Wp(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createCanvasElement(e,t,n){const i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:`${t}px`,left:`${n}px`}),this._setCanvasSize(i,e),i}_getTicks(e){const{lower:t,upper:n}=e,i=(n-t)/(this._maxNumTicks-1),o=Math.pow(10,-Math.floor(Math.log10(Math.abs(i)))),a=i*o,r=qp.TICKS_STEPS.find((e=>e>=a))/o,s=Math.ceil(n/r)*r,l=Math.floor(t/r)*r,d=Math.round((s-l)/r)+1,c=[];for(let e=0;e<d;e++)c.push(l+e*r);return{scaleMin:l,scaleMax:s,step:r,ticks:c}}_getLeftTickInfo(e){let{position:t,labelMeasure:n}=e;const{width:i}=this._canvas;return{labelPoint:[i-this.tickSize-n.width-this._labelMargin,t],tickPoints:{start:[i-this._tickSize,t],end:[i,t]}}}_getRightTickInfo(e){let{position:t}=e;return{labelPoint:[this._tickSize+this._labelMargin,t],tickPoints:{start:[0,t],end:[this._tickSize,t]}}}_getTopTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}_getBottomTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}render(){const{_canvas:e}=this;if(!e.isConnected||!this.visible)return;const{width:t,height:n}=e,i=t>=n,o=i?t:n,a=e.getContext("2d"),{_voiRange:r}=this,s=this._showFullPixelValueRange?this._imageRange:{...r},l=s.upper-s.lower,{ticks:d}=this._getTicks(s);a.clearRect(0,0,t,n),a.font=this._font,a.textBaseline="middle",a.fillStyle=this._color,a.strokeStyle=this._color,a.lineWidth=this.tickWidth,d.forEach((e=>{let t=Math.round(o*((e-s.lower)/l));if(i||(t=n-t),t<0||t>o)return;const r=e.toString(),d=a.measureText(r);let c;c=i?this._rangeTextPosition===Vp.Top?this._getTopTickInfo({position:t,labelMeasure:d}):this._getBottomTickInfo({position:t,labelMeasure:d}):this._rangeTextPosition===Vp.Left?this._getLeftTickInfo({position:t,labelMeasure:d}):this._getRightTickInfo({position:t});const{labelPoint:h,tickPoints:u}=c,{start:g,end:m}=u;return a.beginPath(),a.moveTo(g[0],g[1]),a.lineTo(m[0],m[1]),a.fillText(r,h[0],h[1]),a.stroke(),t}))}}class jp{constructor(e){let{id:t,container:n}=e;ae(this,"_id",void 0),ae(this,"_rootElement",void 0),ae(this,"_containerSize",void 0),ae(this,"_containerResizeObserver",void 0),ae(this,"_containerResizeCallback",(e=>{let t,n;const{contentRect:i,contentBoxSize:o}=e[0];i?(t=i.width,n=i.height):o?.length&&(t=o[0].inlineSize,n=o[0].blockSize),this._containerSize={width:t,height:n},this.onContainerResize()})),this._id=t,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(t),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),n&&this.appendTo(n)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){const{_rootElement:t,_containerResizeObserver:n}=this,{parentElement:i}=t;e&&e!==i&&(i&&n.unobserve(i),e.appendChild(t),n.observe(e))}destroy(){const{_rootElement:e,_containerResizeObserver:t}=this,{parentElement:n}=e;n?.removeChild(e),t.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){const t=document.createElement("div");return t.id=e,t.classList.add("widget"),Object.assign(t.style,{width:"100%",height:"100%"}),t}onContainerResize(){}}const Kp={MULTIPLIER:1,RANGE_TEXT_POSITION:Vp.Right,TICKS_BAR_SIZE:50};class Yp extends jp{constructor(e){super(e),ae(this,"_colormaps",void 0),ae(this,"_activeColormapName",void 0),ae(this,"_eventListenersManager",void 0),ae(this,"_canvas",void 0),ae(this,"_ticksBar",void 0),ae(this,"_rangeTextPosition",void 0),ae(this,"_isMouseOver",!1),ae(this,"_isInteracting",!1),ae(this,"_mouseOverCallback",(e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()})),ae(this,"_mouseOutCallback",(e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()})),ae(this,"_mouseDownCallback",(e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()})),ae(this,"_mouseDragCallback",((e,t)=>{const n=this.getVOIMultipliers(),i=this._getPointsFromMouseEvent(e),{points:o,voiRange:a}=t,r=Oo.vec2.sub(Oo.vec2.create(),i.local,o.local),s=r[0]*n[0],l=r[1]*n[1];if(!s&&!l)return;const{lower:d,upper:c}=a;let{windowWidth:h,windowCenter:u}=ie.utilities.windowLevel.toWindowLevel(d,c);h=Math.max(h+s,1),u+=l;const g=ie.utilities.windowLevel.toLowHighRange(h,u);this.voiRange=g,e.stopPropagation(),e.preventDefault()})),ae(this,"_mouseUpCallback",(e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()})),this._eventListenersManager=new ie.utilities.eventListener.MultiTargetEventListenerManager,this._colormaps=Yp.getColormapsMap(e),this._activeColormapName=Yp.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=e.ticks?.position??Kp.RANGE_TEXT_POSITION,this._canvas.appendTo(this.rootElement),this._ticksBar.appendTo(this.rootElement),this._addRootElementEventListeners()}get activeColormapName(){return this._activeColormapName}set activeColormapName(e){if(e===this._activeColormapName)return;const t=this._colormaps.get(e);t?(this._activeColormapName=e,this._canvas.colormap=t):console.warn(`Invalid colormap name (${e})`)}get imageRange(){return this._canvas.imageRange}set imageRange(e){this._canvas.imageRange=e,this._ticksBar.imageRange=e}get voiRange(){return this._canvas.voiRange}set voiRange(e){const{voiRange:t}=this._canvas;Wp(e)&&!Bp(e,t)&&(this._canvas.voiRange=e,this._ticksBar.voiRange=e,this.onVoiChange(e))}get showFullImageRange(){return this._canvas.showFullImageRange}set showFullImageRange(e){this._canvas.showFullImageRange=e,this._ticksBar.showFullPixelValueRange=e}destroy(){super.destroy(),this._eventListenersManager.reset()}createRootElement(){const e=document.createElement("div");return Object.assign(e.style,{position:"relative",fontSize:"0",width:"100%",height:"100%"}),e}onContainerResize(){super.onContainerResize(),this.updateTicksBar(),this._canvas.size=this.containerSize}getVOIMultipliers(){return[Kp.MULTIPLIER,Kp.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){const{colormaps:t}=e;return t.reduce(((e,t)=>e.set(t.Name,t)),new Map)}static getInitialColormapName(e){const{activeColormapName:t,colormaps:n}=e;return t&&n.some((e=>e.Name===t))?t:n[0].Name}_createCanvas(e){const{imageRange:t,voiRange:n,showFullPixelValueRange:i}=e,o=this._colormaps.get(this._activeColormapName);return new $p({colormap:o,imageRange:t,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){const t=e.ticks;return new zp({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:t}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],o=t.getBoundingClientRect();return{client:n,page:i,local:[i[0]-o.left-window.pageXOffset,i[1]-o.top-window.pageYOffset]}}updateTicksBar(){const{width:e,height:t}=this.containerSize;if(0===e&&0===t)return;const{_ticksBar:n,_rangeTextPosition:i}=this,o=e>=t,a=o?e:Kp.TICKS_BAR_SIZE,r=o?Kp.TICKS_BAR_SIZE:t;if(!function(e,t,n){return(e>=t?[Vp.Top,Vp.Bottom]:[Vp.Left,Vp.Right]).includes(n)}(e,t,i))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let s,l;n.size={width:a,height:r},o?(l=0,s=i===Vp.Top?-r:t):(s=0,l=i===Vp.Left?-a:e),n.top=s,n.left=l}_addRootElementEventListeners(){const{_eventListenersManager:e}=this,{rootElement:t}=this;e.addEventListener(t,"mouseover",this._mouseOverCallback),e.addEventListener(t,"mouseout",this._mouseOutCallback),e.addEventListener(t,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){const{_eventListenersManager:t}=this,n={points:this._getPointsFromMouseEvent(e),voiRange:{...this._canvas.voiRange}};this._removeVOIEventListeners(),t.addEventListener(document,"voi.mouseup",this._mouseUpCallback),t.addEventListener(document,"voi.mousemove",(e=>this._mouseDragCallback(e,n)))}_removeVOIEventListeners(){const{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}const{Events:Xp}=ie.Enums,Jp={lower:-1e3,upper:1e3};class Zp extends Yp{constructor(e){const{element:t,volumeId:n}=e,i=Zp._getImageRange(t,n),o=Zp._getVOIRange(t,n);super({...e,imageRange:i,voiRange:o}),ae(this,"_element",void 0),ae(this,"_volumeId",void 0),ae(this,"_hideTicksTime",void 0),ae(this,"_hideTicksTimeoutId",void 0),ae(this,"autoHideTicks",(()=>{if(this._hideTicksTimeoutId)return;const e=this._hideTicksTime-Date.now();e<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout((()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()}),e)})),ae(this,"_stackNewImageCallback",(()=>{this.imageRange=Zp._getImageRange(this._element)})),ae(this,"_imageVolumeModifiedCallback",(e=>{const{volumeId:t}=e.detail;if(t!==this._volumeId)return;const{_element:n}=this;this.imageRange=Zp._getImageRange(n,t)})),ae(this,"_viewportVOIModifiedCallback",(e=>{const{viewportId:t,volumeId:n,range:i,colormap:o}=e.detail,{viewport:a}=this.enabledElement;t===a.id&&n===this._volumeId&&(this.voiRange=i,o&&(this.activeColormapName=o.name),this.showAndAutoHideTicks())})),ae(this,"_viewportColormapModifiedCallback",(e=>{const{viewportId:t,colormap:n,volumeId:i}=e.detail,{viewport:o}=this.enabledElement;t===o.id&&i===this._volumeId&&(this.activeColormapName=n.name)})),this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,ie.getEnabledElement)(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return function(e,t){if("PT"===ie.utilities.getViewportModality(e,t)){const{clientWidth:n,clientHeight:i}=e.element,o=5/Math.max(n,i),a=Rl(e,t),{fixedPTWindowWidth:r=!0}={},s=r?0:o;return a?[s,o]:[s,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:t}=this.enabledElement;if(t instanceof ie.StackViewport)t.setProperties({voiRange:e}),t.render();else if(t instanceof ie.VolumeViewport){const{_volumeId:n}=this,i=ie.utilities.getViewportsWithVolumeId(n,t.renderingEngineId);t.setProperties({voiRange:e},n),i.forEach((e=>e.render()))}}static _getImageRange(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o)return Jp;const a=o.actor.getMapper().getInputData().getPointData().getScalars().getRange();return 0===a[0]&&0===a[1]?Jp:{lower:a[0],upper:a[1]}}static _getVOIRange(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o||!ie.utilities.isImageActor(o))return Jp;const a=o.actor.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?Jp:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){const{_element:e}=this;ie.eventTarget.addEventListener(Xp.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(Xp.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(Xp.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(Xp.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}function Qp(e,t,n,i,o){const a=[];let r=0;const s=e.scalarData;let l,d,c;if(e.color)for(d=0;d<o;d++)for(c=0;c<i;c++){l=4*((d+n)*e.columns+(c+t));const i=s[l],o=s[l+1],h=s[l+2];a[r++]=.2126*i+.7152*o+.0722*h}else for(d=0;d<o;d++)for(c=0;c<i;c++)l=(d+n)*e.columns+(c+t),a[r++]=s[l];return a}function ef(e,t,n){const i=e.length;let o=n,a=t,r=0;if(i<2)return{min:o,max:a,mean:(t+n)/2};for(let t=0;t<i;t++){const n=e[t];o=Math.min(o,n),a=Math.max(a,n),r+=n}return{min:o,max:a,mean:r/i}}function tf(e){if(e instanceof ie.VolumeViewport)return function(e){const{scalarData:t,width:n,height:i}=ie.utilities.getCurrentVolumeViewportSlice(e),{min:o,max:a}=ie.utilities.getMinMax(t);return{scalarData:t,minPixelValue:o,maxPixelValue:a,width:n,height:i,rows:n,columns:i}}(e);if(e instanceof ie.StackViewport)return function(e){const t=e.getImageData(),{scalarData:n}=t,{min:i,max:o}=ie.utilities.getMinMax(n),a=t.dimensions[0],r=t.dimensions[1],{rows:s,columns:l,color:d}=e.getCornerstoneImage();return{scalarData:n,width:a,height:r,minPixelValue:i,maxPixelValue:o,rows:s,columns:l,color:d}}(e);throw new Error("Viewport not supported")}const nf=ie.utilities.roundNumber,of=function(e,t){let n=Vu.getDefinedCursor(t,!0);n||(n=Nr.getDefinedCursor(t)),n||(console.log(`Cursor ${t} is not defined either as SVG or as a standard cursor.`),n=Nr.getDefinedCursor(t)),Br(e,n)},af=[...Nu,...kr],rf=function(e,t,n){return`${$l("textBoxFontSize",e,t,n)}px ${$l("textBoxFontFamily",e,t,n)}`};class sf{constructor(){ae(this,"annotationUIDs",new Set),ae(this,"_isVisible",!0),ae(this,"visibleFilter",void 0),this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach((i=>{const o=be(i);if(!o)return void this.annotationUIDs.delete(i);if(o.isVisible===e)return;if(!e&&!1===n?.(i))return;o.isVisible=e;const a={...t,annotation:o};(0,ie.triggerEvent)(ie.eventTarget,se.ANNOTATION_MODIFIED,a)})))}get isVisible(){return this._isVisible}findNearby(e,t){const n=[...this.annotationUIDs];if(0===n.length)return null;if(!e)return n[1===t?0:n.length-1];const i=n.indexOf(e);return-1===i||i+t<0||i+t>=n.length?null:n[i+t]}add(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.add(e)))}remove(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.delete(e)))}clear(){this.annotationUIDs.clear()}}const lf=function(e,t,n){t&&t.forEach((t=>{!function(e,t,n){const i=Si(t),{type:o}=i;if(o===ri.Labelmap)Ac.removeRepresentation(e,t,n);else{if(o!==ri.Contour)throw new Error(`The representation ${o} is not supported yet`);lc.removeRepresentation(e,t,n)}}(e,t,n)}))},df=function(e){const{segmentationId:t,representation:n}=e,i=n.type===ri.Contour;let o=n.data?{...n.data}:null;if(o=!o&&i?{}:o,!o)throw new Error("Segmentation representation data may not be undefined");if(i){const e=o;e.geometryIds=e.geometryIds??[],e.annotationUIDsMap=e.annotationUIDsMap??new Map}return{segmentationId:t,cachedStats:{},segmentLabels:{},label:null,segmentsLocked:new Set,type:n.type,activeSegmentIndex:1,representationData:{[n.type]:{...o}}}};function cf(e,t){const n=Di,i=df(e);n.addSegmentation(i),t||io(i.segmentationId)}const hf=function(e){(function(e){if(!e||0===e.length)throw new Error("The segmentationInputArray is undefined or an empty array");e.forEach((e=>{if(void 0===e.segmentationId)throw new Error("Undefined segmentationInput.segmentationId. Please provide a valid segmentationId");if(void 0===e.representation)throw new Error("Undefined segmentationInput.representation. Please provide a valid representation");e.representation.type===ri.Labelmap&&function(e){if(!e.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");Ji(e.representation.data)}(e)}))})(e),e.map((e=>{cf(structuredClone(e))}))};function uf(e,t,n){Di.setActiveSegmentationRepresentation(e,t),n||mo(t)}function gf(e){return $d(e)}function mf(e){const t=gf(e);return t?Yi(t.segmentationId):null}function vf(e,t){uf(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function pf(e){const t={segmentationId:e};(0,ie.triggerEvent)(ie.eventTarget,se.SEGMENTATION_REMOVED,t)}function ff(e){Di.removeSegmentation(e),pf(e)}function wf(e){Di.removeColorLUT(e)}function If(e,t){const n=Yi(e);"string"==typeof t&&(console.warn("segmentIndex is a string, converting to number"),t=Number(t)),n?.activeSegmentIndex!==t&&(n.activeSegmentIndex=t,io(e)),To(e).forEach((e=>{bv(ur(e).id)}))}class Ef extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]})}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),o=n.world;if(0===o[0]&&0===o[1]&&0===o[2])return;const a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ae(Ef,"toolName",void 0),Ef.toolName="Pan";const Cf=Ef;class _f extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2}}),ae(this,"touchDragCallback",void 0),ae(this,"mouseDragCallback",void 0),ae(this,"cleanUp",void 0),ae(this,"_resizeObservers",new Map),ae(this,"_viewportAddedListener",void 0),ae(this,"_hasResolutionChanged",!1),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{viewport:o}=i,a=o.getDefaultActor().actor.getMapper();if(!("getSampleDistance"in a)&&!("getCurrentSampleDistance"in a))return!0;const r=a.getSampleDistance();return this._hasResolutionChanged||(a.setSampleDistance(2*r),this._hasResolutionChanged=!0,null!==this.cleanUp&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{a.setSampleDistance(r),o.render(),this._hasResolutionChanged=!1},document.addEventListener("mouseup",this.cleanUp,{once:!0})),!0})),ae(this,"_getViewportsInfo",(()=>Wd(this.toolGroupId).viewportsInfo)),ae(this,"onSetToolActive",(()=>{const e=()=>{this._getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;if(!this._resizeObservers.has(t)){const{viewport:e}=(0,ie.getEnabledElementByIds)(t,n)||{viewport:null};if(!e)return;const{element:i}=e,o=new ResizeObserver((()=>{const e=(0,ie.getEnabledElementByIds)(t,n);if(!e)return;const{viewport:i}=e;i.resetCamera(),i.render()}));o.observe(i),this._resizeObservers.set(t,o)}}))};e(),this._viewportAddedListener=t=>{t.detail.toolGroupId===this.toolGroupId&&e()},ie.eventTarget.addEventListener(se.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener)})),ae(this,"onSetToolDisabled",(()=>{this._resizeObservers.forEach(((e,t)=>{e.disconnect(),this._resizeObservers.delete(t)})),this._viewportAddedListener&&(ie.eventTarget.removeEventListener(se.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._viewportAddedListener=null)})),ae(this,"rotateCamera",((e,t,n,i)=>{const o=e.getVtkActiveCamera(),a=o.getViewUp(),r=o.getFocalPoint(),s=o.getPosition(),l=[0,0,0],d=[0,0,0],c=[0,0,0],h=Oo.mat4.identity(new Float32Array(16));Oo.mat4.translate(h,h,t),Oo.mat4.rotate(h,h,i,n),Oo.mat4.translate(h,h,[-t[0],-t[1],-t[2]]),Oo.vec3.transformMat4(l,s,h),Oo.vec3.transformMat4(d,r,h),Oo.mat4.identity(h),Oo.mat4.rotate(h,h,i,n),Oo.vec3.transformMat4(c,a,h),e.setCamera({position:l,viewUp:c,focalPoint:d})})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,lastPoints:i}=e.detail,o=n.canvas,a=i.canvas,{rotateIncrementDegrees:r}=this.configuration,s=(0,ie.getEnabledElement)(t),{viewport:l}=s,d=l.getCamera(),c=t.clientWidth,h=t.clientHeight,u=[o[0]/c,o[1]/h],g=[a[0]/c,a[1]/h],m=[.5*c,.5*h],v=l.canvasToWorld(m),p=(1+Math.abs(.5))**2,f=[g[0],0,0],w=[u[0],0,0],I=f[0]**2,E=w[0]**2,C=I>p?0:Math.sqrt(p-I),_=E>p?0:Math.sqrt(p-E),b=[f[0],0,C];kv().normalize(b);const T=[w[0],0,_];kv().normalize(T);const D=kv().dot(b,T);if(Math.abs(D)>1e-4){const e=-2*Math.acos(kv().clampValue(D,-1,1))*Math.sign(u[0]-g[0])*r,t=d.viewUp,n=d.viewPlaneNormal,i=[0,0,0],o=[0,0,0];kv().cross(t,n,i),kv().normalize(i),kv().cross(n,i,o),kv().normalize(o),kv().normalize(t),this.rotateCamera(l,v,o,e);const a=(g[1]-u[1])*r;this.rotateCamera(l,v,i,a),l.render()}}}ae(_f,"toolName",void 0),_f.toolName="TrackballRotate";const bf=_f,{transformWorldToIndex:Tf}=ie.utilities;class Df extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:Sf}}),ae(this,"editData",void 0),ae(this,"eventDispatchDetail",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a;this.isDrawing=!0;const s=r.getCamera(),{viewPlaneNormal:l,viewUp:d}=s,c=this.getReferencedImageId(r,o,l),h=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...d],FrameOfReferenceUID:h,referencedImageId:c},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}};mt(u,i);const g=Ir(i,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:g},this._activateModify(i),Fr(i),e.preventDefault(),Ar(g),u})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{viewportId:r,renderingEngine:s}=(0,ie.getEnabledElement)(n);this.eventDispatchDetail={viewportId:r,renderingEngineId:s.id},this._deactivateModify(n),Hr(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,{annotation:a,viewportIdsToRender:r}=this.editData,{data:s}=a;s.handles.points[0]=[...o],a.invalidated=!0;const l=(0,ie.getEnabledElement)(i),{renderingEngine:d}=l;Ar(r)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],c=d.annotationUID,h=d.data,u=h.handles.points[0],g=i.worldToCanvas(u);l.annotationUID=c;const{color:m}=this.getAnnotationStyle({annotation:d,styleSpecifier:l});if(h.cachedStats||(h.cachedStats={}),h.cachedStats[r]&&null!=h.cachedStats[r].value){if(d.invalidated&&(this._calculateCachedStats(d,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,index:null,value:null},this._calculateCachedStats(d,s,e);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;ul(t,c,"0",[g],{color:m}),n=!0;const v=this.getLinkedTextBoxStyle(l,d);if(!v.visibility)continue;const p=this.configuration.getTextLines(h,r);if(p){const e=[g[0]+6,g[1]-6];xl(t,c,"0",p,[e[0],e[1]],v)}}return n}))}isPointNearTool(){return!1}toolSelectedCallback(){}getHandleNearImagePoint(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,s=r.handles.points[0],l=a.worldToCanvas(s);if(!0==Oo.vec2.distance(n,l)<i)return s}handleSelectedCallback(e,t){const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},this._activateModify(i),Fr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{renderingEngineId:o,viewport:a}=n,{element:r}=a,s=i.handles.points[0],{cachedStats:l}=i,d=Object.keys(l);for(let n=0;n<d.length;n++){const i=d[n],c={isPreScaled:Rl(a,i),isSuvScaled:this.isSuvScaled(a,i,e.metadata.referencedImageId)},h=this.getTargetIdImage(i,t);if(!h)continue;const{dimensions:u,imageData:g,metadata:m,voxelManager:v}=h,p=m.Modality;let f=Tf(g,s);if(f=Oo.vec3.round(f,f),ie.utilities.indexWithinDimensions(f,u)){this.isHandleOutsideImage=!1;let t,n=v.getAtIJKPoint(f);if(i.startsWith("imageId:")){const e=i.split("imageId:")[1],t=ie.utilities.imageIdToURI(e),n=ie.utilities.getViewportsWithImageURI(t,o)[0];f[2]=n.getCurrentImageIdIndex()}if("US"===p){const e=pa(h,[f]),i=e.values.every((e=>null!==e));n=i?e.values:n,t=i?e.units:"raw"}else t=Xd(p,e.metadata.referencedImageId,c);l[i]={index:f,value:n,Modality:p,pixelValueUnits:t}}else this.isHandleOutsideImage=!0,l[i]={index:f,Modality:p};e.invalidated=!1,Le(e,r)}return l}}function Sf(e,t){const n=e.cachedStats[t],{index:i,value:o,pixelValueUnits:a}=n;if(void 0===o)return;const r=[];if(r.push(`(${i[0]}, ${i[1]}, ${i[2]})`),o instanceof Array&&a instanceof Array)for(let e=0;e<o.length;e++)r.push(`${ie.utilities.roundNumber(o[e])} ${a[e]}`);else r.push(`${ie.utilities.roundNumber(o)} ${a}`);return r}ae(Df,"toolName",void 0),Df.toolName="Probe";const yf=Df;class xf extends yf{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:Mf}}),ae(this,"editData",void 0),ae(this,"eventDispatchDetail",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"postMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}},g=Ir(i,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:g},this._activateModify(i),Fr(i),e.preventDefault(),Ar(g),u})),ae(this,"postTouchStartCallback",(e=>this.postMouseDownCallback(e))),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;if(!this.editData)return n;const o=this.filterInteractableAnnotationsForElement(i.element,[this.editData.annotation]);if(!o?.length)return n;const a=this.getTargetId(i),r=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,d=l.annotationUID,c=l.data,h=c.handles.points[0],u=i.worldToCanvas(h);s.annotationUID=d;const{color:g}=this.getAnnotationStyle({annotation:l,styleSpecifier:s});if(c.cachedStats[a]&&null!=c.cachedStats[a].value?l.invalidated&&this._calculateCachedStats(l,r,e):(c.cachedStats[a]={Modality:null,index:null,value:null},this._calculateCachedStats(l,r,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;ul(t,d,"0",[u],{color:g}),n=!0;const m=this.configuration.getTextLines(c,a);if(m){const e=[u[0]+6,u[1]-6];xl(t,d,"0",m,[e[0],e[1]],this.getLinkedTextBoxStyle(s,l))}return n}))}}function Mf(e,t){const n=e.cachedStats[t],{index:i,value:o,pixelValueUnits:a}=n;if(void 0===o)return;const r=[];return r.push(`(${i[0]}, ${i[1]}, ${i[2]})`),r.push(`${o.toFixed(2)} ${a}`),r}ae(xf,"toolName",void 0),xf.toolName="DragProbe";const Of=xf;class Pf extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ae(this,"_getImageDynamicRangeFromMiddleSlice",((e,t)=>{const n=Math.floor(t[2]/2),i=t[0]*t[1];let o,a;e instanceof Float32Array?(o=4,a=Float32Array):e instanceof Uint8Array?(o=1,a=Uint8Array):e instanceof Uint16Array?(o=2,a=Uint16Array):e instanceof Int16Array&&(o=2,a=Int16Array);const r=new a(e.buffer,n*i*o,i),{max:s,min:l}=this._getMinMax(r,i);return s-l}))}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),{renderingEngine:o,viewport:a}=i;let r,s,l,d,c,h,u=!1;const g=a.getProperties();if(a instanceof ie.VolumeViewport){r=this.getTargetVolumeId(a),h=ie.utilities.getViewportsWithVolumeId(r,o.id),({lower:s,upper:l}=g.voiRange);const e=ie.cache.getVolume(r);if(!e)throw new Error("Volume not found "+r);d=e.metadata.Modality,u=e.scaling&&Object.keys(e.scaling).length>0}else{if(!g.voiRange)throw new Error("Viewport is not a valid type");{d=a.modality,({lower:s,upper:l}=g.voiRange);const{preScale:e={scaled:!1}}=a.getImageData?.()||{};u=e.scaled&&void 0!==e.scalingParameters?.suvbw}}c="PT"===d&&u?this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:l,clientHeight:t.clientHeight,isPreScaled:u,viewport:a,volumeId:r}):this.getNewRange({viewport:a,deltaPointsCanvas:n.canvas,volumeId:r,lower:s,upper:l}),c.lower>=c.upper||(a.setProperties({voiRange:c}),a.render(),a instanceof ie.VolumeViewport&&h.forEach((e=>{a!==e&&e.render()})))}getPTScaledNewRange(e){let{deltaPointsCanvas:t,lower:n,upper:i,clientHeight:o,viewport:a,volumeId:r,isPreScaled:s}=e,l=4;return l=s?5/o:this._getMultiplierFromDynamicRange(a,r)||4,i-=t[1]*l,i=s?Math.max(i,.1):i,{lower:n,upper:i}}getNewRange(e){let{viewport:t,deltaPointsCanvas:n,volumeId:i,lower:o,upper:a}=e;const r=this._getMultiplierFromDynamicRange(t,i)||4,s=n[0]*r,l=n[1]*r;let{windowWidth:d,windowCenter:c}=ie.utilities.windowLevel.toWindowLevel(o,a);return d+=s,c+=l,d=Math.max(d,1),ie.utilities.windowLevel.toLowHighRange(d,c)}_getMultiplierFromDynamicRange(e,t){let n;if(t){const i=ie.cache.getVolume(t),{voxelManager:o}=e.getImageData(),a=o.getMiddleSliceData().reduce(((e,t)=>[Math.min(e[0],t),Math.max(e[1],t)]),[1/0,-1/0]),r=i?.metadata?.BitsStored,s=r?2**r:1/0;n=Math.min(a,s)}else n=this._getImageDynamicRangeFromViewport(e);const i=n/1024;return i>1?Math.round(i):i}_getImageDynamicRangeFromViewport(e){const{imageData:t,voxelManager:n}=e.getImageData();if(n?.getRange){const e=n.getRange();return e[1]-e[0]}const i=t.getDimensions();if(t.getRange){const e=t.getRange();return e[1]-e[0]}let o,a;if(o=t.getScalarData?t.getScalarData():t.getPointData().getScalars().getData(),1!==i[2])return this._getImageDynamicRangeFromMiddleSlice(o,i);if(o.getRange)a=o.getRange();else{const{min:e,max:t}=this._getMinMax(o,o.length);a=[e,t]}return a[1]-a[0]}_getMinMax(e,t){let n=1/0,i=-1/0;for(let o=0;o<t;o++){const t=e[o];t<n&&(n=t),t>i&&(i=t)}return{max:i,min:n}}}ae(Pf,"toolName",void 0),Pf.toolName="WindowLevel";const Af=Pf;class Rf extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{minWindowWidth:10}}),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a;this.isDrawing=!0;const s=r.getCamera(),{viewPlaneNormal:l,viewUp:d}=s,c=this.getReferencedImageId(r,o,l,d),h=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...d],FrameOfReferenceUID:h,referencedImageId:c},data:{handles:{points:[[...o],[...o],[...o],[...o]]},cachedStats:{}}};mt(u,i);const g=Ir(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(g),u})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o}=this.editData;this._deactivateDraw(n),Hr(n),this.editData=null,this.isDrawing=!1,pt(i.annotationUID),Ar(o),Ne(i),this.applyWindowLevelRegion(i,n)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o}=this.editData,{data:a}=i,{currentPoints:r}=t,s=(0,ie.getEnabledElement)(n),{worldToCanvas:l,canvasToWorld:d}=s.viewport,c=r.world,{points:h}=a.handles;h[3]=[...c];const u=l(h[0]),g=l(h[3]),m=[g[0],u[1]],v=[u[0],g[1]],p=d(m),f=d(v);h[1]=p,h[2]=f,i.invalidated=!0,Ar(o)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const o=a[e],{annotationUID:s,data:l}=o,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e)));r.annotationUID=s;const{color:h,lineWidth:u,lineDash:g}=this.getAnnotationStyle({annotation:o,styleSpecifier:r});if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;const m=`${s}-rect`;Dg(t,s,"0",c[0],c[3],{color:h,lineDash:g,lineWidth:u},m),n=!0}return n})),ae(this,"applyWindowLevelRegion",((e,t)=>{const n=(0,ie.getEnabledElement)(t),{viewport:i}=n,o=tf(i),{data:a}=e,{points:r}=a.handles,s=r.map((e=>i.worldToCanvas(e))),l=s[0],d=s[3];let c=Math.min(l[0],d[0]),h=Math.min(l[1],d[1]),u=Math.abs(l[0]-d[0]),g=Math.abs(l[1]-d[1]);c=lg(c,0,o.width),h=lg(h,0,o.height),u=Math.floor(Math.min(u,Math.abs(o.width-c))),g=Math.floor(Math.min(g,Math.abs(o.height-h)));const m=ef(Qp(o,Math.round(c),Math.round(h),u,g),o.minPixelValue,o.maxPixelValue);void 0===this.configuration.minWindowWidth&&(this.configuration.minWindowWidth=10);const v=Math.max(Math.abs(m.max-m.min),this.configuration.minWindowWidth),p=m.mean,f=ie.utilities.windowLevel.toLowHighRange(v,p);i.setProperties({voiRange:f}),i.render()})),ae(this,"cancel",(()=>null)),ae(this,"isPointNearTool",(()=>null)),ae(this,"toolSelectedCallback",(()=>null)),ae(this,"handleSelectedCallback",(()=>null)),ae(this,"_activateModify",(()=>null)),ae(this,"_deactivateModify",(()=>null))}}ae(Rf,"toolName",void 0),Rf.toolName="WindowLevelRegion";const Lf=Rf;class Nf extends Fl{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.001,maxZoomScale:3e3,pinchToZoom:!0,pan:!0,invert:!1}}),e=this,ae(this,"touchDragCallback",void 0),ae(this,"mouseDragCallback",void 0),ae(this,"initialMousePosWorld",void 0),ae(this,"dirVec",void 0),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=i.world,a=(0,ie.getEnabledElement)(n).viewport.getCamera(),{focalPoint:r}=a;this.initialMousePosWorld=o;let s=Oo.vec3.fromValues(r[0]-o[0],r[1]-o[1],r[2]-o[2]);return s=Oo.vec3.normalize(Oo.vec3.create(),s),this.dirVec=s,!1})),ae(this,"preTouchStartCallback",(e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)})),ae(this,"_dragParallelProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:d,focalPoint:c,position:h}=i,u=s*(5/l[1])*(e.configuration.invert?-1:1),g=(1-u)*d;let m=c,v=h;if(!e.configuration.zoomToCenter){const t=Oo.vec3.distance(c,e.initialMousePosWorld);v=Oo.vec3.scaleAndAdd(Oo.vec3.create(),h,e.dirVec,-t*u),m=Oo.vec3.scaleAndAdd(Oo.vec3.create(),c,e.dirVec,-t*u)}const p=n.getImageData();let f=[1,1,1];p&&(f=p.spacing);const{minZoomScale:w,maxZoomScale:I}=e.configuration,E=a.clientHeight*f[1]*.5,C=E/g;let _=g,b=!1;p&&(C<w?(_=E/w,b=!0):C>=I&&(_=E/I,b=!0)),n.setCamera({parallelScale:_,focalPoint:b?c:m,position:b?h:v})})),ae(this,"_dragPerspectiveProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{position:d,focalPoint:c,viewPlaneNormal:h}=i,u=kv().distance2BetweenPoints(d,c),g=Math.sqrt(u)/l[1],m=[-h[0],-h[1],-h[2]],v=e.configuration.invert?s/g:s*g;let p=v*m[0];d[0]+=p,c[0]+=p,p=v*m[1],d[1]+=p,c[1]+=p,p=v*m[2],d[2]+=p,c[2]+=p,n.setCamera({position:d,focalPoint:c})})),this.initialMousePosWorld=[0,0,0],this.dirVec=[0,0,0],this.configuration.pinchToZoom?this.touchDragCallback=this._pinchCallback.bind(this):this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){const{element:t,currentPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o}=i,a=o.getCamera(),r=n.world,{focalPoint:s}=a;this.initialMousePosWorld=r;let l=Oo.vec3.fromValues(s[0]-r[0],s[1]-r[1],s[2]-r[2]);l=Oo.vec3.normalize(Oo.vec3.create(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,o,a,!0):this._dragPerspectiveProjection(e,o,a,!0),o.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:t}=e.detail,n=(0,ie.getEnabledElement)(t),{viewport:i}=n,o=i.getCamera();o.parallelProjection?this._dragParallelProjection(e,i,o):this._dragPerspectiveProjection(e,i,o),i.render()}_panCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),o=n.world,a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ae(Nf,"toolName",void 0),Nf.toolName="Zoom";const Uf=Nf;class kf extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}),ae(this,"deltaY",void 0),this.deltaY=1}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:o}=this.configuration,{viewport:a}=(0,ie.getEnabledElement)(n),r=i*(o?-1:1),s=this.getTargetVolumeId(a);dg(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:s,scrollSlabs:this.configuration.scrollSlabs})}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{deltaPoints:t,viewportId:n,renderingEngineId:i}=e.detail,{viewport:o}=(0,ie.getEnabledElementByIds)(n,i),{debounceIfNotLoaded:a,invert:r,loop:s}=this.configuration,l=t.canvas[1];let d;o instanceof ie.VolumeViewport&&(d=this.getTargetVolumeId(o));const c=this._getPixelPerImage(o),h=l+this.deltaY;if(c)if(Math.abs(h)>=c){const e=Math.round(h/c);dg(o,{delta:r?-e:e,volumeId:d,debounceLoading:a,loop:s}),this.deltaY=h%c}else this.deltaY=h}_getPixelPerImage(e){const{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}ae(kf,"toolName",void 0),kf.toolName="StackScroll";const Vf=kf;function Wf(e,t){return 3===e[0].length?function(e,t){const[n,i]=e,[o,a]=t,r=Oo.vec3.sub(Oo.vec3.create(),i,n),s=Oo.vec3.sub(Oo.vec3.create(),o,a),l=Oo.vec3.dot(r,s)/(Oo.vec3.length(r)*Oo.vec3.length(s));return 180*Math.acos(l)/Math.PI}(e,t):function(e,t){const[n,i]=e,[o,a]=t,r=Oo.vec2.sub(Oo.vec2.create(),i,n),s=Oo.vec2.sub(Oo.vec2.create(),o,a),l=Oo.vec2.dot(r,s)/(Oo.vec2.length(r)*Oo.vec2.length(s));return Math.acos(l)*(180/Math.PI)}(e,t)}class Bf extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ae(this,"touchDragCallback",void 0),ae(this,"mouseDragCallback",void 0),ae(this,"mouseWheelCallback",(e=>{const{element:t,wheel:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o}=i,{invert:a}=this.configuration,r=10*n.direction*(a?-1:1);this.setAngle(o,r)})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,startPoints:i}=e.detail,o=n.world,a=i.world,r=(0,ie.getEnabledElement)(t),{viewport:s}=r,l=s.getCamera(),d=[.5*t.clientWidth,.5*t.clientHeight],c=s.canvasToWorld(d);let h=Wf([a,c],[c,o]);const{viewPlaneNormal:u}=l,g=Oo.vec3.sub(Oo.vec3.create(),c,a),m=Oo.vec3.sub(Oo.vec3.create(),c,o),v=Oo.vec3.cross(Oo.vec3.create(),g,m);Oo.vec3.dot(u,v)>0&&(h=-h),Number.isNaN(h)||this.setAngle(s,h)}setAngle(e,t){const{viewPlaneNormal:n,viewUp:i}=e.getCamera();if(e instanceof ie.BaseVolumeViewport){const o=(t+360)%360*Math.PI/180,a=Oo.mat4.identity(new Float32Array(16));Oo.mat4.rotate(a,a,o,n);const r=Oo.vec3.transformMat4(Oo.vec3.create(),i,a);e.setCamera({viewUp:r})}else{const{rotation:n}=e.getViewPresentation();e.setViewPresentation({rotation:(n+t+360)%360})}e.render()}}ae(Bf,"toolName",void 0),Bf.toolName="PlanarRotate";const Hf=Bf;class Ff extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1,scrollSlabs:!1}})}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:o}=this.configuration,{viewport:a}=(0,ie.getEnabledElement)(n),r=i*(o?-1:1),s=this.getTargetVolumeId(a);dg(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:s,scrollSlabs:this.configuration.scrollSlabs})}}ae(Ff,"toolName",void 0),Ff.toolName="StackScrollMouseWheel";const Gf=Ff,$f={X:[1,0,0],Y:[0,1,0],Z:[0,0,1],CUSTOM:[]};class qf extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:$f.Z,rotateIncrementDegrees:30}})}mouseWheelCallback(e){const{element:t,wheel:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o}=i,{direction:a,rotateIncrementDegrees:r}=this.configuration,s=o.getCamera(),{viewUp:l,position:d,focalPoint:c}=s,{direction:h}=n,[u,g,m]=c,[v,p,f]=a,w=h*(r*Math.PI)/180,I=[0,0,0],E=[0,0,0],C=[0,0,0],_=Oo.mat4.identity(new Float32Array(16));Oo.mat4.translate(_,_,[u,g,m]),Oo.mat4.rotate(_,_,w,[v,p,f]),Oo.mat4.translate(_,_,[-u,-g,-m]),Oo.vec3.transformMat4(I,d,_),Oo.vec3.transformMat4(E,c,_),Oo.mat4.identity(_),Oo.mat4.rotate(_,_,w,[v,p,f]),Oo.vec3.transformMat4(C,l,_),o.setCamera({position:I,viewUp:C,focalPoint:E}),o.render()}}ae(qf,"toolName",void 0),qf.toolName="VolumeRotateMouseWheel";const zf=qf;class jf extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}})}mouseClickCallback(e){const{element:t,currentPoints:n}=e.detail,i=(0,ie.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,r=this.getTargetVolumeId(o);if(!r)throw new Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");let s=-1/0;const l=Vv(o,n.world,r,((e,t)=>{if(e>s)return s=e,t}));if(!l||!l.length)return;const{targetViewportIds:d,toolGroupId:c}=this.configuration;a.getViewports().filter((e=>{if(d?.indexOf(e.id)>=0)return!0;const t=ur(e.id,a.id);return!(!c||c!==t?.id)})).forEach((e=>{e instanceof ie.VolumeViewport?Pp(e,l):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")}))}}ae(jf,"toolName",void 0),jf.toolName="MIPJumpToClickTool";const Kf=jf,{transformWorldToIndex:Yf}=ie.utilities;class Xf extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Jf}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;Fr(i),this.isDrawing=!0;const{viewPlaneNormal:l,viewUp:d,position:c}=r.getCamera(),h=this.getReferencedImageId(r,o,l,d),u={highlighted:!0,invalidated:!0,metadata:{...r.getViewReference({points:[o]}),toolName:this.getToolName(),referencedImageId:h,viewUp:d,cameraPosition:c},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};mt(u,i);const g=Ir(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),Ar(g),u})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return im([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),Fr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0,Ar(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p,shadow:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=u.map((e=>i.worldToCanvas(e)));if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={length:null,unit:null},this._calculateCachedStats(d,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let I;if(!Je(c))continue;ue(d)||this.editData||null===g||(I=[w[g]]),I&&ul(t,c,"0",w,{color:m,lineDash:p,lineWidth:v});const E=`${c}-line`;if(Ml(t,c,"1",w[0],w[1],{color:m,width:v,lineDash:p,shadow:f},E),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;const C=this.getLinkedTextBoxStyle(l,d);if(!C.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const _=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=Al(w);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const b=i.worldToCanvas(h.handles.textBox.worldPosition),T=Pl(t,c,"1",_,b,w,{},C),{x:D,y:S,width:y,height:x}=T;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([D,S]),topRight:i.canvasToWorld([D+y,S]),bottomLeft:i.canvasToWorld([D,S+x]),bottomRight:i.canvasToWorld([D+y,S+x])}}return n})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],r=i.handles.points[1],{cachedStats:s}=i,l=Object.keys(s);for(let e=0;e<l.length;e++){const n=l[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:d}=i,c=Yf(o,a),h=Yf(o,r),u=[c,h],{scale:g,lengthUnits:m}=va(i,u),v=this._calculateLength(a,r)/g;this._isInsideVolume(c,h,d)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,s[n]={length:v,lengthUnits:m}}return e.invalidated=!1,Le(e,o),s}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function Jf(e,t){const n=e.cachedStats[t],{length:i,lengthUnits:o}=n;if(null!=i&&!isNaN(i))return[`${ie.utilities.roundNumber(i)} ${o}`]}ae(Xf,"toolName",void 0),Xf.toolName="Length";const Zf=Xf,{transformWorldToIndex:Qf}=ie.utilities;class ew extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:tw}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"midX",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;Fr(i),this.isDrawing=!0;const{viewPlaneNormal:l,viewUp:d,position:c}=r.getCamera(),h=this.getReferencedImageId(r,o,l,d),u={highlighted:!0,invalidated:!0,metadata:{...r.getViewReference({points:[o]}),toolName:this.getToolName(),referencedImageId:h,viewUp:d,cameraPosition:c},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};mt(u,i);const g=Ir(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),Ar(g),u})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return im([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),Fr(i),(0,ie.getEnabledElement)(i),Ar(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,(0,ie.getEnabledElement)(e),Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p,shadow:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=u.map((e=>i.worldToCanvas(e)));let I;if(h.cachedStats[r]&&null!=h.cachedStats[r].unit?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={length:null,unit:null},this._calculateCachedStats(d,s,e)),!Je(c))continue;if(ue(d)||this.editData||null===g||(I=[w[g]]),I&&ul(t,c,"0",w,{color:m,lineDash:p,lineWidth:v}),bg(t,c,"0",w[0],w[1],{color:m,width:v,lineDash:p}),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;const E=this.getLinkedTextBoxStyle(l,d);if(!E.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const C=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=Al(w);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const _=i.worldToCanvas(h.handles.textBox.worldPosition),b=Pl(t,c,"1",C,_,w,{},E),{x:T,y:D,width:S,height:y}=b;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([T,D]),topRight:i.canvasToWorld([T+S,D]),bottomLeft:i.canvasToWorld([T,D+y]),bottomRight:i.canvasToWorld([T+S,D+y])}}return n})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()}_calculateHeight(e,t){const n=t[0]-e[0],i=t[1]-e[1],o=t[2]-e[2];return 0==n?0!=i?Math.abs(o):0:0==i?Math.abs(o):0==o?Math.abs(i):void 0}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],r=i.handles.points[1],{cachedStats:s}=i,l=Object.keys(s);for(let e=0;e<l.length;e++){const n=l[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:d}=i,c=Qf(o,a),h=Qf(o,r),u=[c,h],{scale:g,lengthUnits:m}=va(i,u),v=this._calculateHeight(a,r)/g,p=this._isInsideVolume(c,h,d);this.isHandleOutsideImage=p,s[n]={height:v,lengthUnits:m}}return e.invalidated=!1,Le(e,o),s}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function tw(e,t){const n=e.cachedStats[t],{height:i,lengthUnits:o}=n;if(null!=i&&!isNaN(i))return[`${ie.utilities.roundNumber(i)} ${o}`]}ae(ew,"toolName",void 0),ew.toolName="Height";const nw=ew;var iw=E(847),ow=E.n(iw);const{RENDERING_DEFAULTS:aw}=ie.CONSTANTS;function rw(){return"rgb(0, 200, 0)"}function sw(){return!0}function lw(){return!0}function dw(){return!0}class cw extends Jl{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!1,viewportIndicatorsConfig:{radius:5,x:null,y:null},autoPan:{enabled:!1,panSize:10},referenceLinesCenterGapRadius:20,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:ie.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}),ae(this,"toolCenter",[0,0,0]),ae(this,"_getReferenceLineColor",void 0),ae(this,"_getReferenceLineControllable",void 0),ae(this,"_getReferenceLineDraggableRotatable",void 0),ae(this,"_getReferenceLineSlabThicknessControlsOn",void 0),ae(this,"editData",void 0),ae(this,"initializeViewport",(e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,ie.getEnabledElementByIds)(n,t),{FrameOfReferenceUID:o,viewport:a}=i,{element:r}=a,{position:s,focalPoint:l,viewPlaneNormal:d}=a.getCamera();let c=this._getAnnotations(i);return c=this.filterInteractableAnnotationsForElement(r,c),c.length&&pt(c[0].annotationUID),mt({highlighted:!1,metadata:{cameraPosition:[...s],cameraFocalPoint:[...l],FrameOfReferenceUID:o,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:n}},r),{normal:d,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}})),ae(this,"_getViewportsInfo",(()=>Wd(this.toolGroupId).viewportsInfo)),ae(this,"resetCrosshairs",(()=>{const e=this._getViewportsInfo();for(const t of e){const{viewportId:e,renderingEngineId:n}=t,i=(0,ie.getEnabledElementByIds)(e,n),o=i.viewport,a=!0,r=!0,s=!0,l=!0,d=!0;o.resetCamera({resetPan:a,resetZoom:r,resetToCenter:s,resetRotation:l,suppressEvents:d}),o.resetSlabThickness();const{element:c}=o;let h=this._getAnnotations(i);h=this.filterInteractableAnnotationsForElement(c,h),h.length&&pt(h[0].annotationUID),o.render()}this.computeToolCenter(e)})),ae(this,"computeToolCenter",(e=>{if(!e.length||1===e.length)return void console.warn("For crosshairs to operate, at least two viewports must be given.");const[t,n,i]=e,{normal:o,point:a}=this.initializeViewport(t),{normal:r,point:s}=this.initializeViewport(n);let l=[0,0,0],d=Oo.vec3.create();i?({normal:l,point:d}=this.initializeViewport(i)):(Oo.vec3.add(d,a,s),Oo.vec3.scale(d,d,.5),Oo.vec3.cross(l,o,r));const c=ie.utilities.planar.planeEquation(o,a),h=ie.utilities.planar.planeEquation(r,s),u=ie.utilities.planar.planeEquation(l,d);this.toolCenter=ie.utilities.planar.threePlaneIntersection(c,h,u),Ar(e.map((e=>{let{viewportId:t}=e;return t})))})),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.world,a=(0,ie.getEnabledElement)(n),{viewport:r}=a;this._jump(a,o);const s=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(r.element,s),{data:d}=l[0],{rotationPoints:c}=d.handles,h=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],n=this._getReferenceLineControllable(t.id),i=this._getReferenceLineDraggableRotatable(t.id);n&&i&&(h.push(t.id),e++)}return d.activeViewportIds=[...h],d.handles.activeOperation=1,e.preventDefault(),Fr(n),this._activateModify(n),l[0]})),ae(this,"cancel",(()=>{console.log("Not implemented yet")})),ae(this,"handleSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0,this._activateModify(i),Fr(i),e.preventDefault()})),ae(this,"isPointNearTool",((e,t,n,i)=>!!this._pointNearTool(e,t,n,6))),ae(this,"toolSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i;t.highlighted=!0,this._activateModify(o),Fr(o),e.preventDefault()})),ae(this,"onCameraModified",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{renderingEngine:o}=i,a=i.viewport,r=this._getAnnotations(i),s=this.filterInteractableAnnotationsForElement(n,r)[0];if(!s)return;const l=a.getCamera(),d=s.metadata.cameraPosition,c=[0,0,0];kv().subtract(l.position,d,c);const h=s.metadata.cameraFocalPoint,u=[0,0,0];kv().subtract(l.focalPoint,h,u),s.metadata.cameraPosition=[...l.position],s.metadata.cameraFocalPoint=[...l.focalPoint];const g=this._getReferenceLineControllable(a.id),m=this._getReferenceLineDraggableRotatable(a.id);if(!ie.utilities.isEqual(l.position,d,.001)&&g&&m){let e=!1;ie.utilities.isEqual(c,u,.001)||(e=!0);const t=Math.abs(kv().dot(c,l.viewPlaneNormal))<.01;e||t||(this.toolCenter[0]+=c[0],this.toolCenter[1]+=c[1],this.toolCenter[2]+=c[2])}this.configuration.autoPan?.enabled&&ur(a.id,o.id).getViewportIds().filter((e=>e!==a.id)).forEach((e=>{this._autoPanViewportIfNecessary(e,o)}));const v=Ir(n,this.getToolName(),!1);Ar(v)})),ae(this,"onResetCamera",(e=>{this.resetCrosshairs()})),ae(this,"mouseMoveCallback",((e,t)=>{const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(let e=0;e<t.length;e++){const i=t[e];if(ue(i))continue;const{data:r,highlighted:s}=i;if(!r.handles)continue;const l=r.handles.activeOperation,d=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let c=!1;c=!!this.getHandleNearImagePoint(n,i,o,6)||this._pointNearTool(n,i,o,6),c&&!s||!c&&s?(i.highlighted=!s,a=!0):r.handles.activeOperation===l&&this._areViewportIdArraysEqual(r.activeViewportIds,d)||(a=!0)}return a})),ae(this,"filterInteractableAnnotationsForElement",((e,t)=>{if(!t||!t.length)return[];const n=(0,ie.getEnabledElement)(e),{viewportId:i}=n;return t.filter((e=>e.data.viewportId===i))})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i,renderingEngine:o}=e,{element:a}=i,r=this._getAnnotations(e),s=i.getCamera(),l=this.filterInteractableAnnotationsForElement(a,r)[0];if(!r?.length||!l?.data)return n;const d=l.annotationUID,{clientWidth:c,clientHeight:h}=i.canvas,u=Math.sqrt(c*c+h*h),g=Math.min(c,h),m=l.data,v=i.worldToCanvas(this.toolCenter),p=this._filterAnnotationsByUniqueViewportOrientations(e,r),f=[],w=[0,0,c,h];p.forEach((e=>{const{data:t}=e;t.handles.toolCenter=this.toolCenter;const n=o.getViewport(t.viewportId),a=n.getCamera(),r=this._getReferenceLineControllable(n.id),l=this._getReferenceLineDraggableRotatable(n.id),d=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:c,clientHeight:h}=n.canvas,m=Math.sqrt(c*c+h*h),I=[.5*c,.5*h],E=n.canvasToWorld(I),C=[0,0,0];kv().cross(s.viewPlaneNormal,a.viewPlaneNormal,C),kv().normalize(C),kv().multiplyScalar(C,m);const _=[0,0,0];kv().add(E,C,_);const b=[0,0,0];kv().subtract(E,C,b);const T=i.worldToCanvas(_),D=i.worldToCanvas(E),S=Oo.vec2.create();Oo.vec2.subtract(S,T,D),Oo.vec2.normalize(S,S);const y=Oo.vec2.create();Oo.vec2.scale(y,S,100*u);const x=Oo.vec2.create();Oo.vec2.scale(x,S,.4*g);const M=Oo.vec2.create();Oo.vec2.scale(M,S,.2*g);const O=Oo.vec2.create(),P=this.configuration.referenceLinesCenterGapRadius;Oo.vec2.scale(O,S,2===p.length?P:0);const A=Oo.vec2.create(),R=Oo.vec2.create(),L=Oo.vec2.create(),N=Oo.vec2.create();let U=Oo.vec2.clone(v);l&&r||(U=Oo.vec2.clone(D)),Oo.vec2.add(A,U,O),Oo.vec2.add(R,U,y),Oo.vec2.subtract(L,U,O),Oo.vec2.subtract(N,U,y),Nv(A,R,w),Nv(L,N,w);const k=Oo.vec2.create();Oo.vec2.subtract(k,v,x);const V=Oo.vec2.create();Oo.vec2.add(V,v,x);let W=Oo.vec2.clone(v);!l&&d&&(W=Oo.vec2.clone(D));let B=[...this.toolCenter];!l&&d&&(B=[...E]);const H=[0,0,0];kv().subtract(_,b,H),kv().normalize(H);const{viewPlaneNormal:F}=s,{matrix:G}=ow().buildFromDegree().rotate(90,F),$=[0,0,0];Oo.vec3.transformMat4($,H,G);const q=n.getSlabThickness(),z=[...$];kv().multiplyScalar(z,q);const j=[0,0,0];kv().add(B,z,j);const K=i.worldToCanvas(j),Y=Oo.vec2.create();Oo.vec2.subtract(Y,W,K);const X=Oo.vec2.create();Oo.vec2.subtract(X,W,y),Oo.vec2.add(X,X,Y);const J=Oo.vec2.create();Oo.vec2.add(J,W,y),Oo.vec2.add(J,J,Y),Nv(X,J,w);const Z=Oo.vec2.create();Oo.vec2.add(Z,W,y),Oo.vec2.subtract(Z,Z,Y);const Q=Oo.vec2.create();Oo.vec2.subtract(Q,W,y),Oo.vec2.subtract(Q,Q,Y),Nv(Z,Q,w);const ee=Oo.vec2.create(),te=Oo.vec2.create(),ne=Oo.vec2.create(),ie=Oo.vec2.create();Oo.vec2.subtract(ee,W,M),Oo.vec2.add(ee,ee,Y),Oo.vec2.add(te,W,M),Oo.vec2.add(te,te,Y),Oo.vec2.subtract(ne,W,M),Oo.vec2.subtract(ne,ne,Y),Oo.vec2.add(ie,W,M),Oo.vec2.subtract(ie,ie,Y),f.push([n,A,R,L,N,X,J,Z,Q,k,V,ee,te,ne,ie])}));const I=[],E=[],C=this._getReferenceLineColor(i.id),_=void 0!==C?C:"rgb(200, 200, 200)";if(f.forEach(((e,n)=>{const o=e[0],a=this._getReferenceLineColor(o.id),r=this._getReferenceLineControllable(o.id),s=this._getReferenceLineDraggableRotatable(o.id)||this.configuration.mobile?.enabled,l=this._getReferenceLineSlabThicknessControlsOn(o.id)||this.configuration.mobile?.enabled,c=m.activeViewportIds.find((e=>e===o.id));let h=void 0!==a?a:"rgb(200, 200, 200)",u=1;const g=null!==m.handles.activeOperation&&1===m.handles.activeOperation&&c;g&&(u=2.5);let v=`${n}`;if(r&&s?(v=`${n}One`,Ml(t,d,v,e[1],e[2],{color:h,lineWidth:u}),v=`${n}Two`,Ml(t,d,v,e[3],e[4],{color:h,lineWidth:u})):Ml(t,d,v,e[2],e[4],{color:h,lineWidth:u}),r){h=void 0!==a?a:"rgb(200, 200, 200)";const r=2===m.handles.activeOperation,u=[e[9],e[10]],p=[i.canvasToWorld(e[9]),o,e[1],e[2]],f=[i.canvasToWorld(e[10]),o,e[3],e[4]];I.push(p,f);const w=3===m.handles.activeOperation,C=[e[11],e[12],e[13],e[14]],_=[i.canvasToWorld(e[11]),o,e[5],e[6]],b=[i.canvasToWorld(e[12]),o,e[5],e[6]],T=[i.canvasToWorld(e[13]),o,e[7],e[8]],D=[i.canvasToWorld(e[14]),o,e[7],e[8]];if(E.push(_,b,T,D),(g||this.configuration.mobile?.enabled)&&!r&&!w&&s&&l){let e=`${n}One`;ul(t,d,e,u,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"circle"}),e=`${n}Two`,ul(t,d,e,C,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"rect"})}else g&&!r&&!w&&s?ul(t,d,`${n}`,u,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"circle"}):c&&!r&&!w&&l?ul(t,d,`${n}`,C,{color:h,handleRadius:this.configuration.mobile?.enabled?this.configuration.mobile?.handleRadius:3,opacity:this.configuration.mobile?.enabled?this.configuration.mobile?.opacity:1,type:"rect"}):r&&s?ul(t,d,`${n}`,u,{color:h,handleRadius:2,fill:h,type:"circle"}):w&&c&&l&&ul(t,d,v,C,{color:h,handleRadius:2,fill:h,type:"rect"});o.getSlabThickness()>.5&&l&&(v=`${n}STOne`,Ml(t,d,v,e[5],e[6],{color:h,width:1,lineDash:[2,3]}),v=`${n}STTwo`,Ml(t,d,v,e[7],e[8],{color:h,width:e,lineDash:[2,3]}))}})),n=!0,m.handles.rotationPoints=I,m.handles.slabThicknessPoints=E,this.configuration.viewportIndicators){const{viewportIndicatorsConfig:e}=this.configuration;Eg(t,d,"0",[c*(e?.xOffset||.95),h*(e?.yOffset||.05)],e?.circleRadius||.01*u,{color:_,fill:_})}return n})),ae(this,"_getAnnotations",(e=>{const{viewport:t}=e,n=lt(this.getToolName(),t.element)||[],i=this._getViewportsInfo().map((e=>{let{viewportId:t}=e;return t}));return n.filter((e=>{const{data:t}=e;return i.includes(t.viewportId)}))})),ae(this,"_onNewVolume",(()=>{const e=this._getViewportsInfo();this.computeToolCenter(e)})),ae(this,"_areViewportIdArraysEqual",((e,t)=>e.length===t.length&&(e.forEach((e=>{let n=!1;for(let i=0;i<t.length;++i)if(e===t[i]){n=!0;break}if(!1===n)return!1})),!0))),ae(this,"_getAnnotationsForViewportsWithDifferentCameras",((e,t)=>{const{viewportId:n,renderingEngine:i,viewport:o}=e,a=t.filter((e=>e.data.viewportId!==n));if(!a||!a.length)return[];const r=o.getCamera(),{viewPlaneNormal:s,position:l}=r,d=a.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera();return!(ie.utilities.isEqual(n.viewPlaneNormal,s,.01)&&ie.utilities.isEqual(n.position,l,1))}));return d})),ae(this,"_filterViewportWithSameOrientation",((e,t,n)=>{const{renderingEngine:i}=e,{data:o}=t,a=i.getViewport(o.viewportId),r=n.filter((e=>{const{data:t}=e,n=i.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)}));if(!r||!r.length)return[];const s=a.getCamera(),l=s.viewPlaneNormal;return kv().normalize(l),r.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera(),o=n.viewPlaneNormal;return kv().normalize(o),ie.utilities.isEqual(l,o,.01)&&ie.utilities.isEqual(s.viewUp,n.viewUp,.01)}))})),ae(this,"_filterAnnotationsByUniqueViewportOrientations",((e,t)=>{const{renderingEngine:n,viewport:i}=e,o=i.getCamera().viewPlaneNormal;kv().normalize(o);const a=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0===a})),r=[];for(let e=0;e<a.length;++e){const t=a[e],{viewportId:i}=t.data,s=n.getViewport(i).getCamera(),l=s.viewPlaneNormal;if(kv().normalize(l),ie.utilities.isEqual(o,l,.01)||ie.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();ie.utilities.isEqual(o.viewPlaneNormal,s.viewPlaneNormal,.01)&&ie.utilities.isEqual(o.position,s.position,1)&&(d=!0)}d||r.push(t)}const s=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0!==a}));for(let e=0;e<s.length;++e){const t=s[e],{viewportId:i}=t.data,a=n.getViewport(i).getCamera(),l=a.viewPlaneNormal;if(kv().normalize(l),ie.utilities.isEqual(o,l,.01)||ie.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();ie.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&ie.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||r.push(t)}const l=this._getAnnotationsForViewportsWithDifferentCameras(e,t);for(let e=0;e<l.length;++e){const t=l[e];if(r.some((e=>e===t)))continue;const{viewportId:i}=t.data,a=n.getViewport(i).getCamera(),s=a.viewPlaneNormal;if(kv().normalize(s),ie.utilities.isEqual(o,s,.01)||ie.utilities.isOpposite(o,s,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();ie.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&ie.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||r.push(t)}return r})),ae(this,"_checkIfViewportsRenderingSameScene",((e,t)=>{const n=e.getActors(),i=t.getActors();let o=!0;return n.forEach((e=>{n.length===i.length&&void 0!==i.find((t=>{let{uid:n}=t;return n===e.uid}))||(o=!1)})),o})),ae(this,"_jump",((e,t)=>{xe.isInteractingWithTool=!0;const{viewport:n,renderingEngine:i}=e,o=this._getAnnotations(e),a=[0,0,0];kv().subtract(t,this.toolCenter,a);const r=this._getAnnotationsForViewportsWithDifferentCameras(e,o).filter((e=>{const{data:t}=e,o=i.getViewport(t.viewportId),a=this._checkIfViewportsRenderingSameScene(n,o);return this._getReferenceLineControllable(o.id)&&this._getReferenceLineDraggableRotatable(o.id)&&a}));return 0===r.length?(xe.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(i,r,a),xe.isInteractingWithTool=!1,!0)})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!this.configuration.mobile?.enabled,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(n),Hr(n),this.editData=null;const i=Ir(n,this.getToolName(),!1);Ar(i)})),ae(this,"_dragCallback",(e=>{const t=e.detail,n=t.deltaPoints.world;if(Math.abs(n[0])<.001&&Math.abs(n[1])<.001&&Math.abs(n[2])<.001)return;const{element:i}=t,o=(0,ie.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,s=this._getAnnotations(o),l=this.filterInteractableAnnotationsForElement(i,s)[0];if(!l)return;const{handles:d}=l.data,{currentPoints:c}=e.detail,h=c.canvas;if(1===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));this._applyDeltaShiftToSelectedViewportCameras(a,e,n)}else if(2===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o})),n=Oo.vec2.create(),i=Oo.vec2.create(),l=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],d=r.worldToCanvas(l),c=t.currentPoints.canvas,h=Oo.vec2.create();Oo.vec2.sub(h,c,t.deltaPoints.canvas),Oo.vec2.sub(n,h,d),Oo.vec2.sub(i,c,d);let u=Oo.vec2.angle(n,i);this._isClockWise(d,h,c)&&(u*=-1),u=Math.round(100*u)/100;const g=r.getCamera().viewPlaneNormal,{matrix:m}=ow().buildFromRadian().translate(l[0],l[1],l[2]).rotate(u,g).translate(-l[0],-l[1],-l[2]),v=[];e.forEach((e=>{const{data:t}=e;t.handles.toolCenter=l;const n=a.getViewport(t.viewportId),i=n.getCamera(),{viewUp:o,position:r,focalPoint:s}=i;o[0]+=r[0],o[1]+=r[1],o[2]+=r[2],Oo.vec3.transformMat4(s,s,m),Oo.vec3.transformMat4(r,r,m),Oo.vec3.transformMat4(o,o,m),o[0]-=r[0],o[1]-=r[1],o[2]-=r[2],n.setCamera({position:r,viewUp:o,focalPoint:s}),v.push(n.id)})),a.renderViewports(v)}else if(3===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));if(0===e.length)return;const i=this._filterViewportWithSameOrientation(o,e[0],s),d=[];d.push(r.id),i.forEach((e=>{const{data:i}=e,o=a.getViewport(i.viewportId),s=o.getCamera().viewPlaneNormal,c=kv().dot(n,s),u=[...s];if(kv().multiplyScalar(u,c),Math.abs(u[0])>.001||Math.abs(u[1])>.001||Math.abs(u[2])>.001){const e=Math.sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]),n=t.lastPoints.world,i=[0,0,0],c=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(o.id)){const{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter((e=>e[1].uid===o.id));if(2===t.length){const e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);kv().add(e,n,c),kv().multiplyScalar(c,.5)}}kv().subtract(n,c,i);const g=kv().dot(i,s),m=[...s];kv().multiplyScalar(m,g);const v=[m[0],m[1],m[2]];Oo.vec3.normalize(v,v);const p=[u[0],u[1],u[2]];Oo.vec3.normalize(p,p);let f=o.getSlabThickness();ie.utilities.isOpposite(v,p,.001)?f-=e:f+=e,f=Math.abs(f),f=Math.max(aw.MINIMUM_SLAB_THICKNESS,f),this._pointNearReferenceLine(l,h,6,o)&&(f=aw.MINIMUM_SLAB_THICKNESS),ur(o.id,a.id).getToolInstance(this.getToolName()).setSlabThickness(o,f),d.push(o.id)}})),a.renderViewports(d)}})),ae(this,"_pointNearReferenceLine",((e,t,n,i)=>{const{data:o}=e,{rotationPoints:a}=o.handles;for(let e=0;e<a.length-1;++e){const o=a[e][1];if(o.id!==i.id)continue;if(!this._getReferenceLineControllable(o.id))continue;const r={start:{x:a[e][2][0],y:a[e][2][1]},end:{x:a[e][3][0],y:a[e][3][1]}},s=im([r.start.x,r.start.y],[r.end.x,r.end.y],[t[0],t[1]]),l={start:{x:a[e+1][2][0],y:a[e+1][2][1]},end:{x:a[e+1][3][0],y:a[e+1][3][1]}},d=im([l.start.x,l.start.y],[l.end.x,l.end.y],[t[0],t[1]]);if(s<=n||d<=n)return!0;e++}return!1})),this._getReferenceLineColor=e.configuration?.getReferenceLineColor||rw,this._getReferenceLineControllable=e.configuration?.getReferenceLineControllable||sw,this._getReferenceLineDraggableRotatable=e.configuration?.getReferenceLineDraggableRotatable||lw,this._getReferenceLineSlabThicknessControlsOn=e.configuration?.getReferenceLineSlabThicknessControlsOn||dw}onSetToolActive(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this.computeToolCenter(e)}onSetToolPassive(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolEnabled(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolDisabled(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),e.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,ie.getEnabledElementByIds)(n,t);if(!i)return;const o=this._getAnnotations(i);o?.length&&o.forEach((e=>{pt(e.annotationUID)}))}))}getHandleNearImagePoint(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o;let r=this._getRotationHandleNearImagePoint(a,t,n,i);return null!==r?r:(r=this._getSlabThicknessHandleNearImagePoint(a,t,n,i),null!==r?r:void 0)}_unsubscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;o.removeEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_subscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;o.addEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_autoPanViewportIfNecessary(e,t){const n=t.getViewport(e),{clientWidth:i,clientHeight:o}=n.canvas,a=n.worldToCanvas(this.toolCenter),r=this.configuration.autoPan.panSize,s=[a[0],a[1]];if(a[0]<0?s[0]=r:a[0]>i&&(s[0]=i-r),a[1]<0?s[1]=r:a[1]>o&&(s[1]=o-r),s[0]===a[0]&&s[1]===a[1])return;const l=n.canvasToWorld(s),d=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],c=n.getCamera(),{focalPoint:h,position:u}=c,g=[u[0]-d[0],u[1]-d[1],u[2]-d[2]],m=[h[0]-d[0],h[1]-d[1],h[2]-d[2]];n.setCamera({focalPoint:m,position:g}),n.render()}setSlabThickness(e,t){let n;const{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let o=this.configuration.slabThicknessBlendMode;t===aw.MINIMUM_SLAB_THICKNESS&&(o=ie.Enums.BlendModes.COMPOSITE),e.setBlendMode(o,n,!1),e.setSlabThickness(t,n)}_isClockWise(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,t,n){t.forEach((t=>{this._applyDeltaShiftToViewportCamera(e,t,n)}))}_applyDeltaShiftToViewportCamera(e,t,n){const{data:i}=t,o=e.getViewport(i.viewportId),a=o.getCamera(),r=a.viewPlaneNormal,s=kv().dot(n,r),l=[...r];if(kv().multiplyScalar(l,s),Math.abs(l[0])>.001||Math.abs(l[1])>.001||Math.abs(l[2])>.001){const e=[0,0,0],t=[0,0,0];kv().add(a.focalPoint,l,e),kv().add(a.position,l,t),o.setCamera({focalPoint:e,position:t}),o.render()}}_getRotationHandleNearImagePoint(e,t,n,i){const{data:o}=t,{rotationPoints:a}=o.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineDraggableRotatable(l.id))continue;const d=e.worldToCanvas(s);if(Oo.vec2.distance(n,d)<i)return o.handles.activeOperation=2,this.editData={annotation:t},s}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,i){const{data:o}=t,{slabThicknessPoints:a}=o.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineSlabThicknessControlsOn(l.id))continue;const d=e.worldToCanvas(s);if(Oo.vec2.distance(n,d)<i)return o.handles.activeOperation=3,o.activeViewportIds=[l.id],this.editData={annotation:t},s}return null}_pointNearTool(e,t,n,i){const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{clientWidth:r,clientHeight:s}=a.canvas,l=Math.sqrt(r*r+s*s),{data:d}=t,{rotationPoints:c}=d.handles,{slabThicknessPoints:h}=d.handles,u=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineDraggableRotatable(t.id);if(!o||!a)continue;const r={start:{x:c[e][2][0],y:c[e][2][1]},end:{x:c[e][3][0],y:c[e][3][1]}},s=im([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),l={start:{x:c[e+1][2][0],y:c[e+1][2][1]},end:{x:c[e+1][3][0],y:c[e+1][3][1]}},h=im([l.start.x,l.start.y],[l.end.x,l.end.y],[n[0],n[1]]);(s<=i||h<=i)&&(u.push(t.id),d.handles.activeOperation=1),e++}for(let e=0;e<h.length-1;++e){const t=h[e][1];if(u.find((e=>e===t.id)))continue;const o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!o||!a)continue;const r=h[e][2],s=h[e][3],c=Oo.vec2.create();Oo.vec2.add(c,r,s),Oo.vec2.scale(c,c,.5);const g=Oo.vec2.create();Oo.vec2.subtract(g,r,c),Oo.vec2.normalize(g,g);const m=Oo.vec2.create();Oo.vec2.scale(m,g,.05*l);const v=Oo.vec2.create(),p=Oo.vec2.create();Oo.vec2.add(v,c,m),Oo.vec2.subtract(p,c,m);const f={start:{x:v[0],y:v[1]},end:{x:r[0],y:r[1]}},w=im([f.start.x,f.start.y],[f.end.x,f.end.y],[n[0],n[1]]),I={start:{x:p[0],y:p[1]},end:{x:s[0],y:s[1]}},E=im([I.start.x,I.start.y],[I.end.x,I.end.y],[n[0],n[1]]);(w<=i||E<=i)&&(u.push(t.id),d.handles.activeOperation=null),e++}return d.activeViewportIds=[...u],this.editData={annotation:t},1===d.handles.activeOperation}}ae(cw,"toolName",void 0),cw.toolName="Crosshairs";const hw=cw,{EPSILON:uw}=ie.CONSTANTS;class gw extends Yl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",showFullDimension:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",null),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"_init",(()=>{const e=(0,ie.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=pr(t,this.getToolName());const n=e.getViewport(this.configuration.sourceViewportId);if(!n?.getImageData())return;const{element:i}=n,{viewUp:o,viewPlaneNormal:a}=n.getCamera(),r=ie.utilities.getViewportImageCornersInWorld(n);let s=this.editData.annotation;const l=n.getFrameOfReferenceUID();if(s)this.editData.annotation.data.handles.points=r;else{const e={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...a],viewUp:[...o],FrameOfReferenceUID:l,referencedImageId:null},data:{handles:{points:r}}};mt(e,i),s=e}this.editData={sourceViewportId:n.id,renderingEngine:e,annotation:s},Ar(t.filter((e=>e.id!==n.id)).map((e=>e.id)))})),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onSetToolConfiguration",(()=>{this._init()})),ae(this,"onCameraModified",(e=>{this._init()})),ae(this,"renderAnnotation",((e,t)=>{const{viewport:n}=e,{annotation:i,sourceViewportId:o}=this.editData;let a=!1;const{viewport:r}=(0,ie.getEnabledElementByViewportId)(o)||{};if(!r)return a;if(r.id===n.id)return a;if(!i||!i?.data?.handles?.points)return a;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=i.data.handles.points[0],d=i.data.handles.points[1],c=i.data.handles.points[2],h=i.data.handles.points[3],{focalPoint:u,viewPlaneNormal:g,viewUp:m}=n.getCamera(),{viewPlaneNormal:v}=r.getCamera();if(this.isParallel(g,v))return a;const p=ie.utilities.planar.planeEquation(g,u),f=[l,c,d,h],w=[l,d,c,h];let I=f,E=Oo.vec3.subtract(Oo.vec3.create(),f[0],f[1]);E=Oo.vec3.normalize(Oo.vec3.create(),E);let C=Oo.vec3.subtract(Oo.vec3.create(),f[2],f[0]);C=Oo.vec3.normalize(Oo.vec3.create(),C);const _=Oo.vec3.cross(Oo.vec3.create(),E,C);if(this.isParallel(_,g))return a;this.isPerpendicular(E,g)&&(I=w);const b=ie.utilities.planar.linePlaneIntersection(I[0],I[1],p),T=ie.utilities.planar.linePlaneIntersection(I[2],I[3],p),{annotationUID:D}=i;s.annotationUID=D;const S=this.getStyle("lineWidth",s,i),y=this.getStyle("lineDash",s,i),x=this.getStyle("color",s,i),M=this.getStyle("shadow",s,i);let O=[b,T].map((e=>n.worldToCanvas(e)));if(this.configuration.showFullDimension&&(O=this.handleFullDimension(n,b,g,m,T,O)),O.length<2)return a;const P=`${D}-line`;return Ml(t,D,"1",O[0],O[1],{color:x,width:S,lineDash:y,shadow:M},P),a=!0,a})),ae(this,"isPerpendicular",((e,t)=>{const n=Oo.vec3.dot(e,t);return Math.abs(n)<uw}))}handleFullDimension(e,t,n,i,o,a){const r=e.getRenderingEngine(),s=this.getTargetId(e),l=this.getTargetIdImage(s,r),d=this.getReferencedImageId(e,t,n,i);if(d&&l)try{const{imageData:n,dimensions:i}=l,[r,s,c,h]=[n.indexToWorld([0,0,0]),n.indexToWorld([i[0]-1,0,0]),n.indexToWorld([i[0]-1,i[1]-1,0]),n.indexToWorld([0,i[1]-1,0])].map((e=>ie.utilities.worldToImageCoords(d,e))),[u,g]=[t,o].map((e=>ie.utilities.worldToImageCoords(d,e)));a=[[r,s],[s,c],[h,c],[r,h]].map((e=>{let[t,n]=e;return this.intersectInfiniteLines(t,n,u,g)})).filter((e=>e&&this.isInBound(e,i))).map((t=>{const n=ie.utilities.imageToWorldCoords(d,t);return e.worldToCanvas(n)}))}catch(e){console.log(e)}return a}intersectInfiniteLines(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,u=s-a,g=o-r,m=r*a-o*s,v=h-d,p=l-c,f=c*d-l*h;if(!(Math.abs(u*p-v*g)<uw))return[(g*f-p*m)/(u*p-v*g),(v*m-u*f)/(u*p-v*g)]}isParallel(e,t){return Math.abs(Oo.vec3.dot(e,t))>1-uw}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}ae(gw,"toolName",void 0),gw.toolName="ReferenceLines";const mw=gw,{EPSILON:vw}=ie.CONSTANTS;class pw extends Yl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onSetToolActive",(()=>{this._init()})),ae(this,"_init",(()=>{const e=this.configuration.sourceImageIds;if(!e?.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");const t=ie.metaData.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");const{frameOfReferenceUID:n}=t,i=Wd(this.toolGroupId).viewportsInfo;if(!i?.length)return void console.warn("OverlayGridTool: No viewports found");const o=lt(this.getToolName(),n);if(!o?.length){const t=e.map((e=>this.calculateImageIdPointSets(e)));mt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}Ar(i.map((e=>{let{viewportId:t}=e;return t})))})),ae(this,"calculateImageIdPointSets",(e=>{const{imagePositionPatient:t,rows:n,columns:i,rowCosines:o,columnCosines:a,rowPixelSpacing:r,columnPixelSpacing:s}=ie.metaData.get("imagePlaneModule",e),l=[...t],d=[...t],c=[...t],h=[...t];return Oo.vec3.scaleAndAdd(d,t,a,i*s),Oo.vec3.scaleAndAdd(c,t,o,n*r),Oo.vec3.scaleAndAdd(h,c,a,i*s),{pointSet1:[l,c,d,h],pointSet2:[l,d,c,h]}})),ae(this,"renderAnnotation",((e,t)=>{const n=this.configuration.sourceImageIds;let i=!1;if(!n?.length)return i;const{viewport:o,FrameOfReferenceUID:a}=e;if(o.getImageIds().length<2)return i;const r=lt(this.getToolName(),a);if(!r?.length)return i;const s=r[0],{annotationUID:l}=s,{focalPoint:d,viewPlaneNormal:c}=o.getCamera(),h={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},u=this.getImageIdNormal(n[0]);if(this.isParallel(c,u))return i;const g=ie.utilities.planar.planeEquation(c,d),m=s.data.pointSets,v=s.data.viewportData;for(let e=0;e<n.length;e++){const{pointSet1:n,pointSet2:i}=m[e],a=v.get(o.id)||this.initializeViewportData(v,o.id);if(!a.pointSetsToUse[e]){let t=n,o=Oo.vec3.subtract(Oo.vec3.create(),n[0],n[1]);o=Oo.vec3.normalize(Oo.vec3.create(),o),this.isPerpendicular(o,c)&&(t=i),a.pointSetsToUse[e]=t,a.lineStartsWorld[e]=ie.utilities.planar.linePlaneIntersection(t[0],t[1],g),a.lineEndsWorld[e]=ie.utilities.planar.linePlaneIntersection(t[2],t[3],g)}const r=a.lineStartsWorld[e],d=a.lineEndsWorld[e];h.annotationUID=l;const u=this.getStyle("lineWidth",h,s),p=this.getStyle("lineDash",h,s),f=this.getStyle("color",h,s),w=this.getStyle("shadow",h,s),I=[r,d].map((e=>o.worldToCanvas(e))),E=`${l}-line`;Ml(t,l,`${e}`,I[0],I[1],{color:f,width:u,lineDash:p,shadow:w},E)}return i=!0,i})),ae(this,"initializeViewportData",((e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)))),ae(this,"isPerpendicular",((e,t)=>{const n=Oo.vec3.dot(e,t);return Math.abs(n)<vw}))}isParallel(e,t){return Math.abs(Oo.vec3.dot(e,t))>1-vw}getImageIdNormal(e){const{imageOrientationPatient:t}=ie.metaData.get("imagePlaneModule",e),n=Oo.vec3.fromValues(t[0],t[1],t[2]),i=Oo.vec3.fromValues(t[3],t[4],t[5]);return Oo.vec3.cross(Oo.vec3.create(),n,i)}}ae(pw,"toolName",void 0),pw.toolName="OverlayGrid";const fw=pw;class ww extends Yl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{opacity:.5}}),ae(this,"_init",(()=>{const e=Wd(this.toolGroupId).viewportsInfo;if(!e?.length)return void console.warn(this.getToolName()+"Tool: No viewports found");const t=(0,ie.getRenderingEngine)(e[0].renderingEngineId)?.getViewport(e[0].viewportId);if(!t)return;const n=t.getFrameOfReferenceUID(),i=lt(this.getToolName(),n);if(!i?.length){const t=new Map;!function(e,t){t.forEach((t=>{let{viewportId:n,renderingEngineId:i}=t;const o=(0,ie.getRenderingEngine)(i)?.getViewport(n);Iw(e,o)}))}(t,e),mt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{actorsWorldPointsMap:t}},n)}Ar(e.map((e=>{let{viewportId:t}=e;return t})))})),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onCameraModified",(e=>{this._init()})),ae(this,"renderAnnotation",((e,t)=>{const{viewport:n,FrameOfReferenceUID:i}=e;let o=!1;const a=lt(this.getToolName(),i);if(!a?.length)return o;const r=a[0],{annotationUID:s}=r,l=r.data.actorsWorldPointsMap;Iw(l,n);const d=n.getActors(),c=Ew(n);return d.forEach((e=>{if(!e?.clippingFilter)return;const i=l.get(e.uid);if(!i)return;if(!i.get(c))return;let o=1;const{worldPointsSet:a,color:r}=i.get(c);for(let i=0;i<a.length;i++){const l=a[i].map((e=>n.worldToCanvas(e))),d={color:r,fillColor:r,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2},c=e.uid+"#"+o;dl(t,s,c,l,d),o++}})),o=!0,o}))}}function Iw(e,t){const n=t.getActors(),i=Ew(t);n.forEach((t=>{if(!t?.clippingFilter)return;let n=e.get(t.uid);if(n||(n=new Map,e.set(t.uid,n)),!n.get(i)){const e=kp(t.clippingFilter.getOutputData());if(!e)return;const o=function(e){function t(e){let t=Math.floor(255*e).toString(16);return 1===t.length&&(t="0"+t),t}return"#"+t(e[0])+t(e[1])+t(e[2])}(t.actor.getProperty().getColor());n.set(i,{worldPointsSet:e,color:o})}}))}function Ew(e){const{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return`${e.id}-${Hi(t)}-${n}`}ae(ww,"toolName",void 0),ww.toolName="SegmentationIntersection";const Cw=ww;function _w(e,t,n,i){const o=Oo.vec3.create();Oo.vec3.cross(o,t,e);const a=Oo.vec3.fromValues(...n),r=Oo.vec3.fromValues(...i),s=Oo.vec3.create();Oo.vec3.subtract(s,a,r);const l=Oo.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=Oo.vec3.dot(s,o)/(l*Oo.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}const{transformWorldToIndex:bw}=ie.utilities;class Tw extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,getTextLines:Dw,statsCalculator:Vl}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(n.canvas,(0,ie.getEnabledElement)(i)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},initialRotation:r.getRotation()}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,centerWorld:o,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=km(s.map((e=>a.worldToCanvas(e)))),[d,c]=l,h={left:Math.min(d[0],c[0])+i/2,top:Math.min(d[1],c[1])+i/2,width:Math.abs(d[0]-c[0])-i,height:Math.abs(d[1]-c[1])-i},u={left:Math.min(d[0],c[0])-i/2,top:Math.min(d[1],c[1])-i/2,width:Math.abs(d[0]-c[0])+i,height:Math.abs(d[1]-c[1])+i},g=this._pointInEllipseCanvas(h,n);return!(!this._pointInEllipseCanvas(u,n)||g)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},Fr(i),this._activateModify(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s,l,d,c,h,u=!1;if(n.worldPosition)u=!0;else{const{points:e}=a.handles,{viewport:t}=(0,ie.getEnabledElement)(o),{worldToCanvas:i,canvasToWorld:u}=t;r=e.findIndex((e=>e===n));const g=e.map(i);h=g[r],d=Math.abs(g[2][0]-g[3][0]),c=Math.abs(g[0][1]-g[1][1]),s=[(g[2][0]+g[3][0])/2,(g[0][1]+g[1][1])/2],l=u(s)}const g=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:g,handleIndex:r,canvasWidth:d,canvasHeight:c,centerWorld:l,originalHandleCanvas:h,movingTextBox:u},this._activateModify(o),Fr(o);const m=(0,ie.getEnabledElement)(o),{renderingEngine:v}=m;Ar(g),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i)})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerWorld:h}=this.editData,u=s.worldToCanvas(h),{data:g}=d,m=Math.abs(o[0]-u[0]),v=Math.abs(o[1]-u[1]),p=[u[0],u[1]-v],f=[u[0],u[1]+v],w=[u[0]-m,u[1]],I=[u[0]+m,u[1]];g.handles.points=[l(p),l(f),l(w),l(I)],d.invalidated=!0,this.editData.hasMoved=!0,Ar(c)})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,{viewport:i}=(0,ie.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i,{annotation:r,canvasWidth:s,canvasHeight:l,handleIndex:d,centerWorld:c,originalHandleCanvas:h}=this.editData,u=i.worldToCanvas(c),{data:g}=r,{points:m}=g.handles,{currentPoints:v}=t,p=v.canvas;if(0===d||1===d){const e=Math.abs(p[1]-u[1]),t=[u[0],u[1]-e],n=[u[0],u[1]+e];m[0]=o(t),m[1]=o(n);const i=s/2+(p[0]-h[0]),a=[u[0]-i,u[1]],r=[u[0]+i,u[1]];m[2]=o(a),m[3]=o(r)}else{const e=Math.abs(p[0]-u[0]),t=[u[0]-e,u[1]],n=[u[0]+e,u[1]];m[2]=o(t),m[3]=o(n);const i=l/2+(p[1]-h[1]),a=[u[0],u[1]-i],r=[u[0],u[1]+i];m[0]=o(a),m[1]=o(r)}})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{handles:u}=h,{points:g,activeHandleIndex:m}=u;l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=g.map((e=>i.worldToCanvas(e))),I=km(w),{centerPointRadius:E}=this.configuration;if(h.cachedStats[r]&&null!=h.cachedStats[r].areaUnits){if(d.invalidated&&(this._throttledCalculateCachedStats(d,i,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null},this._calculateCachedStats(d,i,s);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let C;if(!Je(c))continue;ue(d)||this.editData||null===m||(C=[w[m]]),C&&ul(t,c,"0",C,{color:v});const _="0";if(Cg(t,c,_,w,{color:v,lineDash:f,lineWidth:p},`${c}-ellipse`),E>0&&Math.min(Math.abs(I[0][0]-I[1][0])/2,Math.abs(I[0][1]-I[1][1])/2)>3*E){const e=this._getCanvasEllipseCenter(w);Eg(t,c,`${_}-center`,e,E,{color:v,lineDash:f,lineWidth:p})}n=!0;const b=this.getLinkedTextBoxStyle(l,d);if(!b.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const T=this.configuration.getTextLines(h,r);if(!T||0===T.length)continue;let D;h.handles.textBox.hasMoved||(D=Al(I),h.handles.textBox.worldPosition=i.canvasToWorld(D));const S=i.worldToCanvas(h.handles.textBox.worldPosition),y=Pl(t,c,"1",T,S,w,{},b),{x,y:M,width:O,height:P}=y;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([x,M]),topRight:i.canvasToWorld([x+O,M]),bottomLeft:i.canvasToWorld([x,M+P]),bottomRight:i.canvasToWorld([x+O,M+P])}}return n})),ae(this,"_calculateCachedStats",((e,t,n)=>{const i=e.data,{element:o}=t,{points:a}=i.handles,r=a.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:s,viewUp:l}=t.getCamera(),[d,c]=km(r),h=t.canvasToWorld(d),u=t.canvasToWorld(c),{cachedStats:g}=i,m=Object.keys(g),v=h,p=u;for(let i=0;i<m.length;i++){const o=m[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:d,metadata:c,voxelManager:f}=a,w=bw(d,v);w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]);const I=bw(d,p);I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]),this.isHandleOutsideImage=!this._isInsideVolume(w,I,r);const E=[[Math.min(w[0],I[0]),Math.max(w[0],I[0])],[Math.min(w[1],I[1]),Math.max(w[1],I[1])],[Math.min(w[2],I[2]),Math.max(w[2],I[2])]],C={center:[(h[0]+u[0])/2,(h[1]+u[1])/2,(h[2]+u[2])/2],xRadius:Math.abs(h[0]-u[0])/2,yRadius:Math.abs(h[1]-u[1])/2,zRadius:Math.abs(h[2]-u[2])/2},{worldWidth:_,worldHeight:b}=_w(s,l,v,p),T=0===_&&0===b,D=[w,I],{scale:S,areaUnits:y}=va(a,D),x=Math.abs(Math.PI*(_/2)*(b/2))/S/S,M={isPreScaled:Rl(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},O=Xd(c.Modality,e.metadata.referencedImageId,M),P=f.forEach(this.configuration.statsCalculator.statsCallback,{boundsIJK:E,imageData:d,isInObject:e=>Vm(C,e,{fast:!0}),returnPoints:this.configuration.storePointData}),A=this.configuration.statsCalculator.getStatistics();g[o]={Modality:c.Modality,area:x,mean:A.mean?.value,max:A.max?.value,stdDev:A.stdDev?.value,statsArray:A.array,pointsInShape:P,isEmptyArea:T,areaUnits:y,pixelValueUnits:O}}return e.invalidated=!1,Le(e,o),g})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,t){const n=e.width/2,i=e.height/2;if(n<=0||i<=0)return!1;const o=[e.left+n,e.top+i],a=[t[0]-o[0],t[1]-o[1]];return a[0]*a[0]/(n*n)+a[1]*a[1]/(i*i)<=1}_getCanvasEllipseCenter(e){const[t,n,i,o]=e,a=[i[0],n[1]],r=[o[0],t[1]];return[(a[0]+r[0])/2,(a[1]+r[1])/2]}}function Dw(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,max:r,isEmptyArea:s,areaUnits:l,pixelValueUnits:d}=n,c=[];if(i){const e=s?"Area: Oblique not supported":`Area: ${ie.utilities.roundNumber(i)} ${l}`;c.push(e)}return o&&c.push(`Mean: ${ie.utilities.roundNumber(o)} ${d}`),r&&c.push(`Max: ${ie.utilities.roundNumber(r)} ${d}`),a&&c.push(`Std Dev: ${ie.utilities.roundNumber(a)} ${d}`),c}ae(Tw,"toolName",void 0),Tw.toolName="EllipticalROI";const Sw=Tw;function yw(e){const[t,n]=e;return $r(t,n)}function xw(e){const[t,n]=e,i=$r(t,n);return[[t[0]-i,t[1]-i],[t[0]+i,t[1]+i]]}const{transformWorldToIndex:Mw}=ie.utilities;class Ow extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,getTextLines:Pw,statsCalculator:Vl}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o]],activeHandleIndex:null},cachedStats:{}}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),d=yw(l),c=yw([l[0],n]);return Math.abs(c-d)<i/2})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},Fr(i),this._activateModify(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const{renderingEngine:l}=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i)})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c}=this.editData,{data:h}=d;h.handles.points=[h.handles.points[0],l(o)],d.invalidated=!0,this.editData.hasMoved=!0,Ar(c)})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,i=(0,ie.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i.viewport,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,{points:d}=l.handles,c=d.map((e=>a(e))),{currentPoints:h}=t,u=h.canvas;if(0===s){const e=u[0]-c[0][0],t=u[1]-c[0][1],n=u,i=[c[1][0]+e,c[1][1]+t];d[0]=o(n),d[1]=o(i)}else d[1]=o(u)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{handles:u}=h,{points:g,activeHandleIndex:m}=u;l.annotationUID=c;const{color:v,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),w=g.map((e=>i.worldToCanvas(e))),I=w[0],E=yw(w),C=xw(w),{centerPointRadius:_}=this.configuration;if(h.cachedStats[r]&&null!=h.cachedStats[r].areaUnits){if(d.invalidated&&(this._throttledCalculateCachedStats(d,i,s,e),i instanceof ie.VolumeViewport)){const{referencedImageId:e}=d.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&s.getStackViewports().find((t=>{const n=ie.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=ie.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnits:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(d,i,s,e);if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let b;if(!Je(c))continue;ue(d)||this.editData||null===m||(b=[w[m]]),b&&ul(t,c,"0",b,{color:v});const T="0";Eg(t,c,T,I,E,{color:v,lineDash:f,lineWidth:p},`${c}-circle`),_>0&&E>3*_&&Eg(t,c,`${T}-center`,I,_,{color:v,lineDash:f,lineWidth:p}),n=!0;const D=this.getLinkedTextBoxStyle(l,d);if(!D.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const S=this.configuration.getTextLines(h,r);if(!S||0===S.length)continue;let y;h.handles.textBox.hasMoved||(y=Al(C),h.handles.textBox.worldPosition=i.canvasToWorld(y));const x=i.worldToCanvas(h.handles.textBox.worldPosition),M=Pl(t,c,"1",S,x,w,{},D),{x:O,y:P,width:A,height:R}=M;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([O,P]),topRight:i.canvasToWorld([O+A,P]),bottomLeft:i.canvasToWorld([O,P+R]),bottomRight:i.canvasToWorld([O+A,P+R])}}return n})),ae(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{element:a}=t,{points:r}=o.handles,s=r.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:l,viewUp:d}=t.getCamera(),[c,h]=xw(s),u=t.canvasToWorld(c),g=t.canvasToWorld(h),{cachedStats:m}=o,v=Object.keys(m),p=u,f=g;for(let i=0;i<v.length;i++){const o=v[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:c,voxelManager:h}=a,w=Mw(s,p);w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]);const I=Mw(s,f);if(I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]),this._isInsideVolume(w,I,r)){const n=[[Math.min(w[0],I[0]),Math.max(w[0],I[0])],[Math.min(w[1],I[1]),Math.max(w[1],I[1])],[Math.min(w[2],I[2]),Math.max(w[2],I[2])]],i={center:[(u[0]+g[0])/2,(u[1]+g[1])/2,(u[2]+g[2])/2],xRadius:Math.abs(u[0]-g[0])/2,yRadius:Math.abs(u[1]-g[1])/2,zRadius:Math.abs(u[2]-g[2])/2},{worldWidth:r,worldHeight:v}=_w(l,d,p,f),E=0===r&&0===v,C=[w,I],{scale:_,lengthUnits:b,areaUnits:T}=va(a,C),D=fa(a),S=Math.abs(Math.PI*(r/_/2)*(v/D/_/2)),y={isPreScaled:Rl(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},x=Xd(c.Modality,e.metadata.referencedImageId,y),M=h.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>Vm(i,e,{fast:!0}),boundsIJK:n,imageData:s,returnPoints:this.configuration.storePointData}),O=this.configuration.statsCalculator.getStatistics();m[o]={Modality:c.Modality,area:S,mean:O.mean?.value,max:O.max?.value,stdDev:O.stdDev?.value,statsArray:O.array,pointsInShape:M,isEmptyArea:E,areaUnits:T,radius:r/2/_,radiusUnit:b,perimeter:2*Math.PI*(r/2)/_,pixelValueUnits:x}}else this.isHandleOutsideImage=!0,m[o]={Modality:c.Modality}}return e.invalidated=!1,Le(e,a),m})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}}function Pw(e,t){const n=e.cachedStats[t],{radius:i,radiusUnit:o,area:a,mean:r,stdDev:s,max:l,isEmptyArea:d,areaUnits:c,pixelValueUnits:h}=n,u=[];if(i){const e=d?"Radius: Oblique not supported":`Radius: ${ie.utilities.roundNumber(i)} ${o}`;u.push(e)}if(a){const e=d?"Area: Oblique not supported":`Area: ${ie.utilities.roundNumber(a)} ${c}`;u.push(e)}return r&&u.push(`Mean: ${ie.utilities.roundNumber(r)} ${h}`),l&&u.push(`Max: ${ie.utilities.roundNumber(l)} ${h}`),s&&u.push(`Std Dev: ${ie.utilities.roundNumber(s)} ${h}`),u}ae(Ow,"toolName",void 0),Ow.toolName="CircleROI";const Aw=Ow;class Rw{constructor(e){ae(this,"_controlPoints",[]),ae(this,"_resolution",void 0),ae(this,"_fixedResolution",void 0),ae(this,"_closed",void 0),ae(this,"_invalidated",!1),ae(this,"_curveSegments",void 0),ae(this,"_aabb",void 0),ae(this,"_length",0),this._controlPoints=[],this._resolution=e?.resolution??20,this._fixedResolution=e?.fixedResolution??!1,this._closed=e?.closed??!1,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._fixedResolution||this._resolution===e||(this._resolution=e,this.invalidated=!0)}get fixedResolution(){return this._fixedResolution}get closed(){return this._closed}set closed(e){this._closed!==e&&(this._closed=e,this.invalidated=!0)}get aabb(){return this._update(),this._aabb}get length(){return this._update(),this._length}get invalidated(){return this._invalidated}set invalidated(e){this._invalidated=e}hasTangentPoints(){return!1}addControlPoint(e){this._controlPoints.push([e[0],e[1]]),this.invalidated=!0}addControlPoints(e){e.forEach((e=>this.addControlPoint(e)))}addControlPointAtU(e){const t=this._getLineSegmentAt(e),{start:n,end:i}=t.points,o=Math.floor(e),a=this._curveSegments[o],r=e-Math.floor(o),s=[n[0]+r*(i[0]-n[0]),n[1]+r*(i[1]-n[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,s),this.invalidated=!0,{index:l,point:s}}deleteControlPointByIndex(e){const t=this._closed?3:1;return e>=0&&e<this._controlPoints.length&&this._controlPoints.length>t&&(this._controlPoints.splice(e,1),this.invalidated=!0,!0)}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,t){if(e<0||e>=this._controlPoints.length)throw new Error("Index out of bounds");this._controlPoints[e]=[...t],this.invalidated=!0}getControlPoints(){return this._controlPoints.map((e=>[e[0],e[1]]))}getClosestControlPoint(e){const t=this._controlPoints;let n=1/0,i=-1;for(let o=0,a=t.length;o<a;o++){const a=t[o],r=e[0]-a[0],s=e[1]-a[1],l=r*r+s*s;l<n&&(n=l,i=o)}return{index:i,point:-1===i?void 0:[...t[i]],distance:Math.sqrt(n)}}getClosestControlPointWithinDistance(e,t){const n=this.getClosestControlPoint(e);return n.distance<=t?n:void 0}getClosestPoint(e){this._update();const t=this._getCurveSegmmentsDistanceSquaredInfo(e);if(!t.length)return;let n;t.sort(((e,t)=>e.distanceSquared-t.distanceSquared));let i,o,a=-1,r=1/0;for(let s=0;s<t.length;s++){const l=t[s];if(l.distanceSquared>r)continue;const{curveSegmentIndex:d,curveSegment:c}=l,{lineSegments:h}=c;for(let t=0;t<h.length;t++){const s=h[t],{point:c,distanceSquared:u}=za(s.points.start,s.points.end,e);u<r&&(o=s,a=d,i=l.curveSegment,n=c,r=u)}}return{point:n,uValue:a+(o.previousLineSegmentsLength+$r(o.points.start,n))/i.length,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){const t=[...this._controlPoints];if(this._closed&&t.push(this._controlPoints[0]),!t.length)return;let n,i=1/0,o=t[0];for(let a=1,r=t.length;a<r;a++){const r=t[a],{point:s,distanceSquared:l}=za(o,r,e);l<i&&(n=s,i=l),o=r}return{point:n,distance:Math.sqrt(i)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();const n=this.getClosestControlPointWithinDistance(e,t),i=0===n?.index,o=this.getPreviewCurveSegments(e,i);return o?.length?this._convertCurveSegmentsToPolyline(o):[]}isPointNearCurve(e,t){this._update();const n=this._getCurveSegmmentsWithinDistance(e,t),i=t*t;for(let t=0;t<n.length;t++){const{lineSegments:o}=n[t];for(let t=0;t<o.length;t++){const n=o[t];if(ja(n.points.start,n.points.end,e)<=i)return!0}}return!1}containsPoint(e){if(this._update(),this._controlPoints.length<3)return!1;const t=[...this._curveSegments],n=this._getClosingCurveSegmentWithStraightLineSegment();n&&t.push(n);let i=0;for(let n=0;n<t.length;n++){const o=t[n],{aabb:a}=o;if(!(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY))continue;const{lineSegments:r}=o;for(let t=0;t<r.length;t++){const n=r[t],{aabb:o}=n;if(e[0]<=o.maxX&&e[1]>=o.minY&&e[1]<o.maxY){const{start:t,end:o}=n.points,a=t[0]===o[0],r=(e[1]-t[1])*(o[0]-t[0])/(o[1]-t[1])+t[0];i+=a||e[0]<=r?1:0}}}return i%2==1}_update(){if(!this._invalidated)return;const e=this.getSplineCurves();let t=0,n=1/0,i=1/0,o=-1/0,a=-1/0;for(let r=0,s=e.length;r<s;r++){const{aabb:s,length:l}=e[r];n=n<=s.minX?n:s.minX,i=i<=s.minY?i:s.minY,o=o>=s.maxX?o:s.maxX,a=a>=s.maxY?a:s.maxY,t+=l}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:o,maxY:a},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const t=[];return e.forEach(((e,n)=>{let{lineSegments:i}=e;i.forEach(((e,i)=>{0===n&&0===i&&t.push([...e.points.start]),t.push([...e.points.end])}))})),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const t=[],{_curveSegments:n}=this;for(let i=0;i<n.length;i++){const o=n[i],a=xv(o.aabb,e);t.push({curveSegmentIndex:i,curveSegment:o,distanceSquared:a})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();const n=t*t;if(xv(this.aabb,e)>n)return[];const i=this._getCurveSegmmentsDistanceSquaredInfo(e),o=[];for(let e=0,t=i.length;e<t;e++){const{curveSegment:t,distanceSquared:a}=i[e];a<=n&&o.push(t)}return o}_getLineSegmentAt(e){this._update();const t=Math.floor(e),n=e-t,i=this._curveSegments[t],{lineSegments:o}=i,a=i.length*n;for(let e=0;e<o.length;e++){const t=o[e],n=t.previousLineSegmentsLength+t.length;if(a>=t.previousLineSegmentsLength&&a<=n)return t}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;const e=this._controlPoints,t=e[0],n=e[e.length-1],i={points:{start:[...t],end:[...n]},aabb:{minX:Math.min(t[0],n[0]),minY:Math.min(t[1],n[1]),maxX:Math.max(t[0],n[0]),maxY:Math.max(t[1],n[1])}};return{aabb:{minX:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}class Lw extends Rw{getPreviewCurveSegments(e,t){const n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),o=t?n:n-1,a=this.getTransformMatrix(),r=[...this.controlPoints],s=[];t||r.push(e);for(let e=i;e<=o;e++){const n=this._getCurveSegment(e,a,r,t);s.push(n)}return s}getSplineCurves(){const e=this._getNumCurveSegments(),t=new Array(e);if(e<=0)return[];const n=this.getTransformMatrix();let i=0;for(let o=0;o<e;o++){const e=this._getCurveSegment(o,n);e.previousCurveSegmentsLength=i,t[o]=e,i+=e.length}return t}_getNumCurveSegments(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.controlPoints;return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.closed)?e.length:Math.max(0,e.length-1)}_getPoint(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=Math.floor(e);let r=a%o;const s=e-a;if(r<0||r>=o){if(!this.closed)return;r=(o+r)%o}const{p0:l,p1:d,p2:c,p3:h}=this._getCurveSegmentPoints(r,n,i),u=s*s,g=u*s,m=Oo.vec4.fromValues(1,s,u,g),v=Oo.vec4.transformMat4(Oo.vec4.create(),m,t);return[Oo.vec4.dot(v,Oo.vec4.fromValues(l[0],d[0],c[0],h[0])),Oo.vec4.dot(v,Oo.vec4.fromValues(l[1],d[1],c[1],h[1]))]}_getCurveSegmentPoints(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.controlPoints,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.closed;const i=this._getNumCurveSegments(t,n),o=e-1,a=n?(e+1)%i:e+1,r=a+1,s=t[e],l=t[a];let d,c;return d=o>=0?t[o]:n?t[t.length-1]:Ov(l,s),c=r<t.length?t[r]:n?t[0]:Ov(s,l),{p0:d,p1:s,p2:l,p3:c}}_getLineSegments(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=this.resolution+1,r=1/a;let s=e+1;i||e!==o-1||(s-=1e-8);const l=[];let d,c,h=0;for(let o=0,u=e;o<=a;o++,u+=r){u=u>s?s:u;const e=this._getPoint(u,t,n,i);if(!o){d=e;continue}c=e;const a=c[0]-d[0],r=c[1]-d[1],g=Math.sqrt(a**2+r**2),m={minX:d[0]<=c[0]?d[0]:c[0],maxX:d[0]>=c[0]?d[0]:c[0],minY:d[1]<=c[1]?d[1]:c[1],maxY:d[1]>=c[1]?d[1]:c[1]};l.push({points:{start:d,end:c},aabb:m,length:g,previousLineSegmentsLength:h}),d=c,h+=g}return l}_getCurveSegment(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getTransformMatrix(),n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const{p0:o,p1:a,p2:r,p3:s}=this._getCurveSegmentPoints(e,n,i),l=this._getLineSegments(e,t,n,i);let d=0,c=1/0,h=1/0,u=-1/0,g=-1/0;return l.forEach((e=>{let{aabb:t,length:n}=e;c=Math.min(c,t.minX),h=Math.min(h,t.minY),u=Math.max(u,t.maxX),g=Math.max(g,t.maxY),d+=n})),{controlPoints:{p0:o,p1:a,p2:r,p3:s},aabb:{minX:c,minY:h,maxX:u,maxY:g},length:d,previousCurveSegmentsLength:0,lineSegments:l}}}class Nw extends Lw{constructor(e){super(e),ae(this,"_scale",void 0),ae(this,"_fixedScale",void 0),this._scale=e?.scale??.5,this._fixedScale=e?.fixedScale??!1}get scale(){return this._scale}set scale(e){this._fixedScale||this._scale===e||(this._scale=e,this.invalidated=!0)}get fixedScale(){return this._fixedScale}getTransformMatrix(){const{scale:e}=this,t=2*e;return[0,1,0,0,-e,0,e,0,t,e-3,3-t,-e,-e,2-e,e-2,e]}}class Uw extends Nw{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class kw extends Nw{constructor(){super({scale:.5,fixedScale:!0})}}const Vw=Oo.mat4.multiplyScalar(Oo.mat4.create(),Oo.mat4.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class Ww extends Lw{getTransformMatrix(){return Vw}}const Bw={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};var Hw=function(e){return e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE",e}(Hw||{}),Fw=function(e){return e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint",e}(Fw||{});class Gw extends Yd{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,calculateStats:!0,getTextLines:$w,contourHoleAdditionModifierKey:ts.Shift,decimate:{enabled:!1,epsilon:.1},spline:{configuration:{[Hw.Cardinal]:{Class:Nw,scale:.5},[Hw.CatmullRom]:{Class:kw},[Hw.Linear]:{Class:Uw},[Hw.BSpline]:{Class:Ww,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:Hw.CatmullRom,drawPreviewEnabled:!0,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[Fw.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:es.Primary,modifierKey:ts.Shift}]},[Fw.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:es.Primary,modifierKey:ts.Ctrl}]}}}}),e=this,ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"fireChangeOnUpdate",null),ae(this,"isPointNearTool",((e,t,n,i)=>{const{instance:o}=t.data.spline;return o.isPointNearCurve(n,i)})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1};const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),Ar(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,contourHoleProcessingEnabled:r}=this.editData,{data:s}=i;i.autoGenerated=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l,c=this.getTargetIdImage(this.getTargetId(l.viewport),l.renderingEngine),{imageData:h,dimensions:u}=c;this.isHandleOutsideImage=s.handles.points.map((e=>ie.utilities.transformWorldToIndex(h,e))).some((e=>!ie.utilities.indexWithinDimensions(e,u))),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID);const g=a?De.Completed:De.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=i.annotationUID,this.fireChangeOnUpdate.changeType=g):this.fireChangeOnUpdate={annotationUID:i.annotationUID,changeType:g,contourHoleProcessingEnabled:r},Ar(o),this.editData=null,this.isDrawing=!1})),ae(this,"_keyDownCallback",(e=>{const t=e.detail,{element:n}=t,i=t.key??"",{lastControlPointDeletionKeys:o}=this.configuration.spline;if(!o.includes(i))return;const{annotation:a}=this.editData,{data:r}=a;if(3!==r.handles.points.length){{const e=r.handles.points.length-1;this._deleteControlPointByIndex(n,a,e)}e.preventDefault()}else this.cancel(n)})),ae(this,"_mouseMoveCallback",(e=>{const{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;const{element:n}=e.detail,{renderingEngine:i}=(0,ie.getEnabledElement)(n),o=Ir(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,Ar(o),e.preventDefault()})),ae(this,"_mouseDownCallback",(e=>{const t=e.type===se.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i}=this.editData,{data:o}=n;if(o.contour.closed)return;const a=e.detail,{element:r}=a,{currentPoints:s}=a,{canvas:l,world:d}=s,c=(0,ie.getEnabledElement)(r),{renderingEngine:h}=c;let u=o.handles.points.length>=2&&t,g=!0;if(o.handles.points.length>=3){const{instance:e}=o.spline,t=e.getClosestControlPointWithinDistance(l,10);0===t?.index&&(g=!1,u=!0)}g&&o.handles.points.push(d),o.contour.closed=o.contour.closed||u,n.invalidated=!0,Ar(i),o.contour.closed&&this._endCallback(e),e.preventDefault()})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;this.moveAnnotation(i,n)}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"triggerAnnotationCompleted",((e,t)=>{const n=se.ANNOTATION_COMPLETED,i={annotation:e,changeType:De.Completed,contourHoleProcessingEnabled:t};(0,ie.triggerEvent)(ie.eventTarget,n,i)})),ae(this,"triggerAnnotationModified",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:De.StatsUpdated;const{viewportId:i,renderingEngineId:o}=t,a=se.ANNOTATION_MODIFIED,r={annotation:e,viewportId:i,renderingEngineId:o,changeType:n};(0,ie.triggerEvent)(ie.eventTarget,a,r)})),ae(this,"triggerChangeEvent",(function(t,n){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:De.StatsUpdated,o=arguments.length>3?arguments[3]:void 0;i===De.Completed?e.triggerAnnotationCompleted(t,o):e.triggerAnnotationModified(t,n,i)})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.KEY_DOWN,this._keyDownCallback),e.addEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(se.TOUCH_TAP,this._mouseDownCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.KEY_DOWN,this._keyDownCallback),e.removeEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(se.TOUCH_TAP,this._mouseDownCallback)})),ae(this,"_renderStats",((e,t,n,i)=>{const o=e.data,a=this.getTargetId(t);if(!o.spline.instance.closed||!i.visibility)return;const r=this.configuration.getTextLines(o,a);if(!r||0===r.length)return;const s=o.handles.points.map((e=>t.worldToCanvas(e)));if(!o.handles.textBox.hasMoved){const e=Al(s);o.handles.textBox.worldPosition=t.canvasToWorld(e)}const l=t.worldToCanvas(o.handles.textBox.worldPosition),d=Pl(n,e.annotationUID??"","textBox",r,l,s,{},i),{x:c,y:h,width:u,height:g}=d;o.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([c,h]),topRight:t.canvasToWorld([c+u,h]),bottomLeft:t.canvasToWorld([c,h+g]),bottomRight:t.canvasToWorld([c+u,h+g])}})),ae(this,"addControlPointCallback",((e,t)=>{const{data:n}=t,i=n.spline.type,o=this._getSplineConfig(i),a=o.controlPointAdditionDistance;if(!1===o.controlPointAdditionEnabled)return;const r=e.detail,{element:s}=r,l=(0,ie.getEnabledElement)(s),{renderingEngine:d,viewport:c}=l,{canvasToWorld:h}=c,{instance:u}=n.spline,g=e.detail.currentPoints.canvas,m=u.getClosestPoint(g);if(m.distance>a)return;const{index:v,point:p}=u.addControlPointAtU(m.uValue);n.handles.points.splice(v,0,h(p)),t.invalidated=!0;const f=Ir(s,this.getToolName());Ar(f)})),ae(this,"deleteControlPointCallback",((e,t)=>{const n=t.data.spline.type,i=this._getSplineConfig(n),o=i.controlPointDeletionDistance;if(!1===i.controlPointDeletionEnabled)return;const a=e.detail,{element:r,currentPoints:s}=a,{canvas:l}=s,{instance:d}=t.data.spline,c=d.getClosestControlPointWithinDistance(l,o);c&&this._deleteControlPointByIndex(r,t,c.index)})),ae(this,"_calculateCachedStats",((e,t)=>{if(!this.configuration.calculateStats)return;const n=e.data;if(!n.contour.closed)return;const i=(0,ie.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,{cachedStats:r}=n,{polyline:s}=n.contour,l=Object.keys(r);for(let e=0;e<l.length;e++){const t=l[e],n=this.getTargetIdImage(t,a);if(!n)continue;const{metadata:i}=n,d=s.map((e=>o.worldToCanvas(e))),c=d[0],h=o.canvasToWorld(c),u=o.canvasToWorld([c[0]+1,c[1]]),g=o.canvasToWorld([c[0],c[1]+1]),m=Oo.vec3.distance(h,u),v=Oo.vec3.distance(h,g),{imageData:p}=n,{scale:f,areaUnits:w}=va(n,(()=>{const{maxX:e,maxY:t,minX:n,minY:i}=wa(d),a=o.canvasToWorld([n,i]),r=ie.utilities.transformWorldToIndex(p,a),s=o.canvasToWorld([e,t]);return[r,ie.utilities.transformWorldToIndex(p,s)]}));let I=ba(d)/f/f;I*=m*v,r[t]={Modality:i.Modality,area:I,areaUnits:w}}return this.triggerAnnotationModified(e,i,De.StatsUpdated),r})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,{canvas:o}=n,a=ns(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,r=(0,ie.getEnabledElement)(i),{renderingEngine:s}=r,l=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(l,i);const d=Ir(i,this.getToolName());return this.editData={annotation:l,viewportIdsToRender:d,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:o,contourHoleProcessingEnabled:a},this._activateDraw(i),e.preventDefault(),Ar(d),l}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&pt(t.annotationUID),super.cancelAnnotation(t);const o=(0,ie.getEnabledElement)(e),{renderingEngine:a}=o;return Ar(n),this.editData=null,t.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){const{enabledElement:t,targetId:n,svgDrawingHelper:i,annotationStyle:o}=e,{viewport:a}=t,{worldToCanvas:r}=a,{element:s}=a,l=e.annotation,{annotationUID:d,data:c,highlighted:h}=l,{handles:u}=c,{points:g,activeHandleIndex:m}=u,v=this.editData?.newAnnotation,{lineWidth:p,lineDash:f,color:w,locked:I}=o,E=g.map((e=>r(e))),{drawPreviewEnabled:C}=this.configuration.spline,_=l.data.spline.type,b=this._getSplineConfig(_),T=l.data.spline.instance,D=gt(l);if(-1!==D.findIndex((e=>!e)))throw new Error(`Can't find annotation for child ${l.childAnnotationUIDs.join()}`);let S;if([l,...D].filter((e=>this._isSplineROIAnnotation(e))).forEach((e=>{const t=this._updateSplineInstance(s,e).getPolylinePoints();this.updateContourPolyline(e,{points:t,closed:c.contour.closed,targetWindingDirection:os.Clockwise},a)})),super.renderAnnotationInstance(e),c.cachedStats[n]&&null!=c.cachedStats[n].areaUnits?l.invalidated&&this._throttledCalculateCachedStats(l,s):(c.cachedStats[n]={Modality:null,area:null,areaUnits:null},this._calculateCachedStats(l,s)),I||this.editData||null===m||(S=[E[m]]),(S||v||h)&&ul(i,d,"0",E,{color:w,lineWidth:p,handleRadius:"3"}),C&&T.numControlPoints>1&&this.editData?.lastCanvasPoint&&!T.closed){const{lastCanvasPoint:e}=this.editData;cl(i,d,"previewSplineChange",T.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:f,lineWidth:1})}if(b.showControlPointsConnectors){const e=[...E];T.closed&&e.push(E[0]),cl(i,d,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(l,a,i,o.textbox),this.fireChangeOnUpdate?.annotationUID===d&&(this.triggerChangeEvent(l,t,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),l.invalidated=!1,!0}createInterpolatedSplineControl(e){if(e.data.handles.points?.length)return;const{polyline:t}=e.data.contour;if(!t||!t.length)return;e.data.handles.points=[];const{points:n}=e.data.handles,i=Math.max(10,Math.floor(t.length/20));for(let e=0;e<t.length-i;e+=i)n.push(t[e]);n.push(t[t.length-1])}createAnnotation(e){const t=super.createAnnotation(e),{world:n}=e.detail.currentPoints,{type:i}=this.configuration.spline,o=this._getSplineConfig(i),a=new o.Class,r=()=>({type:o.type,instance:a,resolution:o.resolution});let s;return this.configuration.interpolation?.enabled&&(s=e=>{e.data.spline||=r(),this.createInterpolatedSplineControl(e)}),ie.utilities.deepMerge(t,{data:{handles:{points:[[...n]]},spline:r(),cachedStats:{}},onInterpolationComplete:s})}_deleteControlPointByIndex(e,t,n){const i=(0,ie.getEnabledElement)(e),{points:o}=t.data.handles;3===o.length?pt(t.annotationUID):o.splice(n,1);const{renderingEngine:a}=i,r=Ir(e,this.getToolName());t.invalidated=!0,Ar(r)}_isSplineROIAnnotation(e){return!!e.data?.spline}_getSplineConfig(e){const{configuration:t}=this,n=t.spline.configuration;return Object.assign({type:e},Bw,n[e])}_updateSplineInstance(e,t){const n=(0,ie.getEnabledElement)(e),{viewport:i}=n,{worldToCanvas:o}=i,{data:a}=t,{type:r,instance:s}=t.data.spline,l=this._getSplineConfig(r),d=a.handles.points.map(o),c=void 0!==l.resolution?parseInt(l.resolution):void 0,h=void 0!==l.scale?parseFloat(l.scale):void 0;return s.setControlPoints(d),s.closed=!!a.contour.closed,s.fixedResolution||void 0===c||s.resolution===c||(s.resolution=c,t.invalidated=!0),s instanceof Nw&&!s.fixedScale&&void 0!==h&&s.scale!==h&&(s.scale=h,t.invalidated=!0),s}}function $w(e,t){const n=e.cachedStats[t],{area:i,isEmptyArea:o,areaUnits:a}=n,r=[];if(i){const e=o?"Area: Oblique not supported":`Area: ${ie.utilities.roundNumber(i)} ${a}`;r.push(e)}return r}ae(Gw,"toolName",void 0),ae(Gw,"SplineTypes",Hw),ae(Gw,"Actions",Fw),Gw.toolName="SplineROI";const qw=Gw;class zw extends qw{constructor(e){super(ie.utilities.deepMerge({configuration:{calculateStats:!1}},e))}isContourSegmentationTool(){return!0}}ae(zw,"toolName",void 0),zw.toolName="SplineContourSegmentationTool";const jw=zw;class Kw{constructor(e){let{numBits:t,getPriority:n,areEqual:i}=e;ae(this,"_bucketCount",void 0),ae(this,"_mask",void 0),ae(this,"_size",void 0),ae(this,"_currentBucketIndex",void 0),ae(this,"_getPriority",void 0),ae(this,"_areEqual",void 0),ae(this,"_buckets",void 0),this._bucketCount=1<<t,this._mask=this._bucketCount-1,this._size=0,this._currentBucketIndex=0,this._buckets=this._buildArray(this._bucketCount),this._getPriority=void 0!==n?n:e=>e,this._areEqual="function"==typeof i?i:(e,t)=>e===t}push(e){const t=this._getBucketIndex(e),n={value:e,next:this._buckets[t]};this._buckets[t]=n,this._size++}pop(){if(0===this._size)throw new Error("Cannot pop because the queue is empty.");for(;null===this._buckets[this._currentBucketIndex];)this._currentBucketIndex=(this._currentBucketIndex+1)%this._bucketCount;const e=this._buckets[this._currentBucketIndex];return this._buckets[this._currentBucketIndex]=e.next,this._size--,e.value}remove(e){if(!e)return!1;const t=this._getBucketIndex(e),n=this._buckets[t];let i,o=n;for(;null!==o&&!this._areEqual(e,o.value);)i=o,o=o.next;return null!==o&&(o===n?this._buckets[t]=o.next:i.next=o.next,this._size--,!0)}isEmpty(){return 0===this._size}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){const t=new Array(e);return t.fill(null),t}}const{isEqual:Yw}=ie.utilities,Xw=4294967295,Jw=2/(3*Math.PI);class Zw{constructor(e,t,n){ae(this,"searchGranularityBits",void 0),ae(this,"searchGranularity",void 0),ae(this,"width",void 0),ae(this,"height",void 0),ae(this,"grayscalePixelData",void 0),ae(this,"laplace",void 0),ae(this,"gradMagnitude",void 0),ae(this,"gradXNew",void 0),ae(this,"gradYNew",void 0),ae(this,"startPoint",void 0),ae(this,"visited",void 0),ae(this,"parents",void 0),ae(this,"costs",void 0),ae(this,"priorityQueueNew",void 0),ae(this,"_getPointIndex",((e,t)=>{const{width:n}=this;return e*n+t})),ae(this,"_getPointCoordinate",(e=>[e%this.width,Math.floor(e/this.width)])),ae(this,"_getPointCost",(e=>Math.round(this.searchGranularity*this.costs[e])));const i=e.length;this.searchGranularityBits=8,this.searchGranularity=1<<this.searchGranularityBits,this.width=t,this.height=n,this.grayscalePixelData=e,this.laplace=null,this.gradXNew=null,this.gradYNew=null,this.laplace=this._computeLaplace(),this.gradMagnitude=this._computeGradient(),this.gradXNew=this._computeGradientX(),this.gradYNew=this._computeGradientY(),this.visited=new Array(i),this.parents=new Uint32Array(i),this.costs=new Float32Array(i)}startSearch(e){const t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(Xw),this.costs.fill(1/0),this.priorityQueueNew=new Kw({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findMinNearby(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;const[n,i]=e,{costs:o}=this,a=[Math.max(0,n-t),Math.min(n+t+1,this.width)],r=[Math.max(0,i-t),Math.min(i+t+1,this.height)];let s=.8*o[this._getPointIndex(i,n)],l=e;for(let n=a[0];n<a[1];n++)for(let i=r[0];i<r[1];i++){const a=1-(Math.abs(n-e[0])+Math.abs(i-e[1]))/t/2,r=.8*o[this._getPointIndex(i,n)]+.2*a;r<s&&(l=[n,i],s=r)}return l}findPathToPoint(e){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:t,_getPointIndex:n,_getPointCoordinate:i}=this,o=n(t[1],t[0]),a=n(e[1],e[0]),{visited:r,parents:s,costs:l,priorityQueueNew:d}=this;if(a===o)return[];for(;!d.isEmpty()&&s[a]===Xw;){const e=d.pop();if(r[e])continue;const t=i(e),o=this._getNeighborPoints(t);r[e]=!0;for(let i=0,a=o.length;i<a;i++){const a=o[i],r=n(a[1],a[0]),c=this._getWeightedDistance(t,a),h=l[e]+c;h<l[r]&&(l[r]!==1/0&&d.remove(r),l[r]=h,s[r]=e,d.push(r))}}const c=[];let h=a;for(;h!==Xw;)c.push(i(h)),h=s[h];return c.reverse()}_getDeltaX(e,t){const{grayscalePixelData:n,width:i}=this;let o=this._getPointIndex(t,e);return e+1===i&&o--,n[o+1]-n[o]}_getDeltaY(e,t){const{grayscalePixelData:n,width:i,height:o}=this;let a=this._getPointIndex(t,e);return t+1===o&&(a-=i),n[a]-n[a+i]}_getGradientMagnitude(e,t){const n=this._getDeltaX(e,t),i=this._getDeltaY(e,t);return Math.sqrt(n*n+i*i)}_getLaplace(e,t){const{grayscalePixelData:n,_getPointIndex:i}=this;let o=n[i(t-2,e)];return o+=n[i(t-1,e-1)]+2*n[i(t-1,e)]+n[i(t-1,e+1)],o+=n[i(t,e-2)]+2*n[i(t,e-1)]-16*n[i(t,e)]+2*n[i(t,e+1)]+n[i(t,e+2)],o+=n[i(t+1,e-1)]+2*n[i(t+1,e)]+n[i(t+1,e+1)],o+=n[i(t+2,e)],o}_computeGradient(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0,o=0,a=0,r=0;for(r=0;r<t-1;r++){for(a=0;a<e-1;a++)n[i]=this._getGradientMagnitude(a,r),o=Math.max(n[i],o),i++;n[i]=n[i-1],i++}for(let t=n.length;i<t;i++)n[i]=n[i-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/o;return n}_computeLaplace(){const{width:e,height:t,_getPointIndex:n}=this,i=new Float32Array(e*t);i.fill(1,0,n(2,0));for(let o=2;o<t-2;o++){i[n(o,0)]=1,i[n(o,1)]=1;for(let t=2;t<e-2;t++)i[n(o,t)]=this._getLaplace(t,o)>.33?0:1;i[n(o,e-2)]=1,i[n(o,e-1)]=1}return i.fill(1,n(t-2,0)),i}_computeGradientX(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t;o++)for(let t=0;t<e;t++)n[i++]=this._getDeltaX(t,o);return n}_computeGradientY(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t;o++)for(let t=0;t<e;t++)n[i++]=this._getDeltaY(t,o);return n}_getGradientUnitVector(e,t){const{gradXNew:n,gradYNew:i,_getPointIndex:o}=this,a=n[o(t,e)],r=i[o(t,e)];let s=Math.sqrt(a*a+r*r);return s=Math.max(s,1e-100),[a/s,r/s]}_getGradientDirection(e,t,n,i){const o=this._getGradientUnitVector(e,t),a=this._getGradientUnitVector(n,i);let r=o[1]*(n-e)-o[0]*(i-t),s=a[1]*(n-e)-a[0]*(i-t);r<0&&(r=-r,s=-s),e!==n&&t!==i&&(r*=Math.SQRT1_2,s*=Math.SQRT1_2),s=Math.min(Math.max(s,-1),1);const l=Jw*(Math.acos(Math.min(r,1))+Math.acos(s));return isNaN(l)||!isFinite(l)?(console.warn("Found non-direction:",e,t,n,i,r,s,l),1):l}getCost(e,t){return this._getWeightedDistance(e,t)}_getWeightedDistance(e,t){const{_getPointIndex:n,width:i,height:o}=this,[a,r]=e,[s,l]=t;if(s<0||s>=i||l<0||l>=o)return 1;if(a<0||r<0||a>=i||r>=o)return 0;const d=n(l,s);let c=this.gradMagnitude[d];return a!==s&&r!==l||(c*=Math.SQRT1_2),.43*c+.43*this.laplace[d]+.11*this._getGradientDirection(a,r,s,l)}_getNeighborPoints(e){const{width:t,height:n}=this,i=[],o=Math.max(e[0]-1,0),a=Math.max(e[1]-1,0),r=Math.min(e[0]+1,t-1),s=Math.min(e[1]+1,n-1);for(let t=a;t<=s;t++)for(let n=o;n<=r;n++)n===e[0]&&t===e[1]||i.push([n,t]);return i}static createInstanceFromRawPixelData(e,t,n,i){const o=e.length,a=new Float32Array(o),{lower:r,upper:s}=i,l=s-r;for(let t=0,n=e.length;t<n;t++)a[t]=Math.max(0,Math.min(1,(e[t]-r)/l));return new Zw(a,t,n)}}class Qw{constructor(e,t){ae(this,"pointArray",void 0),ae(this,"_controlPointIndexes",void 0),this.pointArray=e?e.slice():[],this._controlPointIndexes=t?t.slice():[]}getPoint(e){return this.pointArray[e]}getLastPoint(){return this.pointArray[this.pointArray.length-1]}isControlPoint(e){const t=this.pointArray.indexOf(e);if(-1!==t)return-1!==this._controlPointIndexes.indexOf(t);throw new Error("Error: isControlPoint called with not in list point.")}addPoint(e){this.pointArray.push(e)}addControlPoint(e){const t=this.pointArray.indexOf(e);if(-1===t)throw new Error("Cannot mark a non registered point as control point.");this._controlPointIndexes.push(t)}getControlPoints(){return this._controlPointIndexes.map((e=>this.pointArray[e]))}getNumControlPoints(){return this._controlPointIndexes.length}removeLastControlPoint(){this._controlPointIndexes.length&&this._controlPointIndexes.pop()}getLastControlPoint(){if(this._controlPointIndexes.length)return this.pointArray[this._controlPointIndexes[this._controlPointIndexes.length-1]]}removeLastPoints(e){this.pointArray.splice(this.pointArray.length-e,e)}addPoints(e){this.pointArray=this.pointArray.concat(e)}prependPath(e){const t=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let e=0;e<this._controlPointIndexes.length;++e)n[e]=this._controlPointIndexes[e]+t;this._controlPointIndexes=e._controlPointIndexes.concat(n)}appendPath(e){this.addPoints(e.pointArray),e._controlPointIndexes.forEach((e=>this._controlPointIndexes.push(e)))}}class eI extends Yd{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:ts.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{undo:{method:"undo",bindings:[{key:"Escape"}]}}}}),e=this,ae(this,"scissors",void 0),ae(this,"scissorsNext",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,r=i*i,s=t.data.contour.polyline.map((e=>a.worldToCanvas(e)));let l=s[s.length-1];for(let e=0;e<s.length;e++){const t=s[e];if(ja(l,t,n)<=r)return!0;l=t}return!1})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o};const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),Ar(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()})),ae(this,"_endCallback",(function(t){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=t.detail,{element:o}=i,{annotation:a,viewportIdsToRender:r,newAnnotation:s,contourHoleProcessingEnabled:l}=e.editData,{data:d}=a;d.handles.activeHandleIndex=null,e._deactivateModify(o),e._deactivateDraw(o),Hr(o);const c=(0,ie.getEnabledElement)(o);if(e.isHandleOutsideImage&&e.configuration.preventHandleOutsideImage||n)return pt(a.annotationUID),e.clearEditData(),void Ar(r);Ar(r);const h=s?De.Completed:De.HandlesUpdated;e.triggerChangeEvent(a,c,h,l),e.clearEditData()})),ae(this,"triggerChangeEvent",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:De.StatsUpdated,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];n===De.Completed?Ue(e,i):Le(e,t.viewport.element,n)})),ae(this,"_mouseDownCallback",(e=>{const t=e.type===se.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i,worldToSlice:o,sliceToWorld:a}=this.editData;if(this.editData.closed)return;const r=e.detail,{element:s}=r,{currentPoints:l}=r,{canvas:d,world:c}=l;let h=c;const u=(0,ie.getEnabledElement)(s),{viewport:g,renderingEngine:m}=u,v=this.editData.currentPath.getControlPoints();let p=v.length>=2&&t;if(v.length>=2){const e={index:-1,distSquared:1/0};for(let t=0,n=v.length;t<n;t++){const n=a(v[t]),i=Ia(d,g.worldToCanvas(n));i<=100&&i<e.distSquared&&(e.distSquared=i,e.index=t)}0===e.index&&(p=!0)}const{snapHandleNearby:f}=this.configuration;if(f&&!this.editData.closed){const e=new Qw,t=this.scissors.findMinNearby(o(c),1),n=this.scissors.findPathToPoint(t);e.addPoints(n),e.prependPath(this.editData.confirmedPath),h=a(t),this.editData.currentPath=e}this.editData.closed=this.editData.closed||p,this.editData.confirmedPath=this.editData.currentPath;const w=this.editData.currentPath.getLastPoint();this.editData.confirmedPath.addControlPoint(w),n.data.handles.points.push(a(w)),this.scissors.startSearch(o(h)),n.invalidated=!0,Ar(i),this.editData.closed&&(this.updateAnnotation(this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()})),ae(this,"_mouseMoveCallback",(e=>{const{element:t,currentPoints:n}=e.detail,{world:i,canvas:o}=n,{renderingEngine:a}=(0,ie.getEnabledElement)(t),r=Ir(t,this.getToolName());this.editData.lastCanvasPoint=o;const{width:s,height:l}=this.scissors,{worldToSlice:d}=this.editData,c=d(i);if(c[0]<0||c[1]<0||c[0]>=s||c[1]>=l)return;const h=this.scissors.findPathToPoint(c),u=new Qw;u.addPoints(h),u.prependPath(this.editData.confirmedPath),this.editData.currentPath=u,Ar(r),e.preventDefault()})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData;if(void 0===a)console.warn("No drag implemented for livewire");else{const{currentPoints:e}=t,o=e.world;this.editHandle(o,n,i,a)}const r=(0,ie.getEnabledElement)(n),{renderingEngine:s}=r;Ar(o)})),ae(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&pt(t.annotationUID);const o=(0,ie.getEnabledElement)(e),{renderingEngine:a}=o;return Ar(n),this.editData=null,this.scissors=null,t.annotationUID})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(se.TOUCH_TAP,this._mouseDownCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(se.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(se.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(se.TOUCH_TAP,this._mouseDownCallback)}))}setupBaseEditData(e,t,n,i,o){const a=(0,ie.getEnabledElement)(t),{viewport:r}=a;this.isDrawing=!0;const s=r.getImageData(),{imageData:l}=s;let d,c,h,u,g;if(r instanceof ie.VolumeViewport||!g){if(!(r instanceof ie.VolumeViewport))throw new Error("Viewport not supported");{const e=ie.utilities.getCurrentVolumeViewportSlice(r),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;d=e=>{const t=ie.utilities.transformWorldToIndex(l,e),i=Oo.vec3.transformMat4([0,0,0],t,n);return[i[0],i[1]]},c=e=>{const n=Oo.vec3.transformMat4([0,0,0],[e[0],e[1],0],t);return ie.utilities.transformIndexToWorld(l,n)},g=e.scalarData,h=e.width,u=e.height}}else({scalarData:g}=s),h=s.dimensions[0],u=s.dimensions[1],d=e=>{const t=ie.utilities.transformWorldToIndex(l,e);return[t[0],t[1]]},c=e=>ie.utilities.transformIndexToWorld(l,[e[0],e[1],0]);g=ie.utilities.convertToGrayscale(g,h,u);const{voiRange:m}=r.getProperties(),v=d(e);this.scissors=Zw.createInstanceFromRawPixelData(g,h,u,m),i&&(this.scissorsNext=Zw.createInstanceFromRawPixelData(g,h,u,m),this.scissorsNext.startSearch(d(i))),this.scissors.startSearch(v);const p=!i,f=new Qw,w=new Qw,I=p?void 0:new Qw;f.addPoint(v),f.addControlPoint(v);const E=Ir(t,this.getToolName()),C=r.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:E,newAnnotation:p,hasMoved:!1,lastCanvasPoint:C,confirmedPath:f,currentPath:w,confirmedPathNext:I,closed:!1,handleIndex:this.editData?.handleIndex??n.handles?.activeHandleIndex,worldToSlice:d,sliceToWorld:c,contourHoleProcessingEnabled:o}}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,{world:o}=n,a=this.createAnnotation(e),r=ns(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(o,i,a,void 0,r),this.addAnnotation(a,i),this._activateDraw(i),e.preventDefault(),Ar(this.editData.viewportIdsToRender),a}clearEditData(){this.editData=null,this.scissors=null,this.scissorsNext=null,this.isDrawing=!1}editHandle(e,t,n,i){const{data:o}=n,{points:a}=o.handles,{length:r}=a,s=a[(i-1+r)%r],l=a[(i+1)%r];if(!this.editData?.confirmedPathNext){this.setupBaseEditData(s,t,n,l);const{polyline:e}=o.contour,a=new Qw,r=new Qw,{worldToSlice:d}=this.editData,c=em(n,i-1),h=em(n,i+1);if(-1===h||-1===c)throw new Error(`Can't find handle index ${-1===h&&l} ${-1===c&&s}`);0===i?r.addPoints(e.slice(h+1,c).map(d)):(a.addPoints(e.slice(0,c+1).map(d)),r.addPoints(e.slice(h,e.length).map(d))),this.editData.confirmedPath=a,this.editData.confirmedPathNext=r}const{editData:d,scissors:c}=this,{worldToSlice:h,sliceToWorld:u}=d,{activeHandleIndex:g}=o.handles;if(null==g)o.handles.activeHandleIndex=i;else if(g!==i)throw new Error(`Trying to edit a different handle than the one currently being edited ${i}!==${o.handles.activeHandleIndex}`);const m=h(e);if(m[0]<0||m[0]>=c.width||m[1]<0||m[1]>=c.height)return;a[i]=u(m);const v=c.findPathToPoint(m),p=this.scissorsNext.findPathToPoint(m),f=new Qw;f.prependPath(d.confirmedPath),0!==i&&f.addPoints(v),f.addPoints(p.reverse()),f.appendPath(d.confirmedPathNext),0===i&&f.addPoints(v),d.currentPath=f,n.invalidated=!0,d.hasMoved=!0}renderAnnotation(e,t){return this.updateAnnotation(this.editData?.currentPath),super.renderAnnotation(e,t)}isContourSegmentationTool(){return!1}createAnnotation(e){const t=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return ie.utilities.deepMerge(t,{data:{handles:{points:[[...n]]}}})}undo(e,t,n){this.editData&&this._endCallback(n,!0)}renderAnnotationInstance(e){const{annotation:t,enabledElement:n,svgDrawingHelper:i,annotationStyle:o}=e,{viewport:a}=n,{worldToCanvas:r}=a,{annotationUID:s,data:l,highlighted:d}=t,{handles:c}=l,h=this.editData?.newAnnotation,{lineWidth:u,lineDash:g,color:m}=o;if(d||h&&t.annotationUID===this.editData?.annotation?.annotationUID){const e="0",t=c.points.map(r);ul(i,s,e,t,{color:m,lineDash:g,lineWidth:u})}return super.renderAnnotationInstance(e),!0}updateAnnotation(e){if(!this.editData||!e)return;const{annotation:t,sliceToWorld:n,worldToSlice:i,closed:o,newAnnotation:a}=this.editData;let{pointArray:r}=e;r.length>1&&(r=[...r,r[0]]);const s=a&&o?os.Clockwise:void 0;this.updateContourPolyline(t,{points:r,closed:o,targetWindingDirection:s},{canvasToWorld:n,worldToCanvas:i})}}ae(eI,"toolName",void 0),eI.toolName="LivewireContour";const tI=eI;class nI extends tI{updateInterpolatedAnnotation(e,t){!this.editData&&e.invalidated&&e.data.handles.interpolationSources&&(e.data.contour.originalPolyline=e.data.contour.polyline,queueMicrotask((()=>{if(!e.data.handles.interpolationSources)return;const{points:n}=e.data.handles,{element:i}=t.viewport;this.setupBaseEditData(n[0],i,e);const{length:o}=n,{scissors:a}=this,{nearestEdge:r,repeatInterpolation:s}=this.configuration.interpolation;e.data.handles.originalPoints=n;const{worldToSlice:l,sliceToWorld:d}=this.editData,c=[];if(r){let e=l(n[n.length-1]);n.forEach(((t,i)=>{const o=l(t);e=o,c.push(o),a.startSearch(e),a.findPathToPoint(o),a.findPathToPoint(l(n[(i+3)%n.length]));const s=a.findMinNearby(o,r);ie.utilities.isEqual(o,s)||(c[i]=s,e=s,n[i]=d(s))}))}const h=new Qw;for(let e=0;e<o;e++){a.startSearch(l(n[e]));const t=a.findPathToPoint(l(n[(e+1)%o]));h.addPoints(t)}this.updateAnnotation(h),this.scissors=null,this.scissorsNext=null,this.editData=null,e.data.handles.interpolationSources=null,s&&Le(e,t.viewport.element,De.InterpolationUpdated)})))}renderAnnotationInstance(e){const{enabledElement:t,svgDrawingHelper:n}=e,i=e.annotation,{annotationUID:o}=i,{viewport:a}=t,{worldToCanvas:r}=a,{showInterpolationPolyline:s}=this.configuration.interpolation||{};this.updateInterpolatedAnnotation?.(i,t);const{originalPolyline:l}=i.data.contour,d=super.renderAnnotationInstance(e);if(s&&l&&i.autoGenerated){const e=l.map(r);e.push(e[0]),cl(n,o,"interpolationContour-0",e,{color:"#70ffff",lineWidth:1,fillOpacity:0})}return d}isContourSegmentationTool(){return!0}}ae(nI,"toolName",void 0),nI.toolName="LivewireContourSegmentationTool";const iI=nI;class oI extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:aI,changeTextCallback:rI,preventHandleOutsideImage:!1,arrowFirst:!0}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;Fr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),{arrowFirst:u}=this.configuration,g=r.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h,...r.getViewReference({points:[o]})},data:{text:"",handles:{points:[[...o],[...o]],activeHandleIndex:null,arrowFirst:u,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};mt(m,i);const v=Ir(i,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),Ar(v),m})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return im([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),Fr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;a&&!r||(s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),a?this.configuration.getTextCallback((e=>{if(!e)return pt(i.annotationUID),Ar(o),this.editData=null,void(this.isDrawing=!1);i.data.text=e,Ne(i),Ar(o)})):Le(i,n),this.editData=null,this.isDrawing=!1)})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"touchTapCallback",(e=>{2==e.detail.taps&&this.doubleClickCallback(e)})),ae(this,"doubleClickCallback",(e=>{const t=e.detail,{element:n}=t;let i=lt(this.getToolName(),n);if(i=this.filterInteractableAnnotationsForElement(n,i),!i?.length)return;const o=i.find((e=>this.isPointNearTool(n,e,t.currentPoints.canvas,6)));if(!o)return;const a=o;this.configuration.changeTextCallback(o,e.detail,this._doneChangingTextCallback.bind(this,n,a)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const o=a[e],{annotationUID:s,data:l}=o,{handles:d,text:c}=l,{points:h,activeHandleIndex:u}=d;r.annotationUID=s;const{color:g,lineWidth:m,lineDash:v}=this.getAnnotationStyle({annotation:o,styleSpecifier:r}),p=h.map((e=>i.worldToCanvas(e)));let f;ue(o)||this.editData||null===u||(f=[p[u]]),f&&ul(t,s,"0",p,{color:g,lineWidth:m});const w="1";if(this.configuration.arrowFirst?Sg(t,s,w,p[1],p[0],{color:g,width:m,lineDash:v}):Sg(t,s,w,p[0],p[1],{color:g,width:m,lineDash:v}),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!c)continue;const I=this.getLinkedTextBoxStyle(r,o);if(!I.visibility){l.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}if(!l.handles.textBox.hasMoved){const e=p[1];l.handles.textBox.worldPosition=i.canvasToWorld(e)}const E=i.worldToCanvas(l.handles.textBox.worldPosition),C=Pl(t,s,"1",[c],E,p,{},I),{x:_,y:b,width:T,height:D}=C;l.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([_,b]),topRight:i.canvasToWorld([_+T,b]),bottomLeft:i.canvasToWorld([_,b+D]),bottomRight:i.canvasToWorld([_+T,b+D])}}return n}))}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.text=n;const i=(0,ie.getEnabledElement)(e),{renderingEngine:o}=i,a=Ir(e,this.getToolName());Ar(a),Le(t,e)}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function aI(e){return e(prompt("Enter your annotation:"))}function rI(e,t,n){return n(prompt("Enter your annotation:"))}ae(oI,"toolName",void 0),oI.toolName="ArrowAnnotate";const sI=oI;class lI extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:dI}}),ae(this,"angleStartedNotYetCompleted",void 0),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;Fr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),Ar(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l,d]=r.handles.points,c=a.worldToCanvas(s),h=a.worldToCanvas(l),u={start:{x:c[0],y:c[1]},end:{x:h[0],y:h[1]}};if(im([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]])<=i)return!0;if(!d)return!1;const g=a.worldToCanvas(d),m={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}};return im([m.start.x,m.start.y],[m.end.x,m.end.y],[n[0],n[1]])<=i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),Fr(i);const a=(0,ie.getEnabledElement)(i),{renderingEngine:r}=a;Ar(o),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&2===s.handles.points.length)return void(this.editData.handleIndex=2);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),f=u.map((e=>i.worldToCanvas(e)));let w;if(h.cachedStats[r]&&null!=h.cachedStats[r].angle?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={angle:null},this._calculateCachedStats(d,s,e)),ue(d)||this.editData||null===g||(w=[f[g]]),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;w&&ul(t,c,"0",f,{color:m,lineDash:p,lineWidth:v});let I="1";if(Ml(t,c,I,f[0],f[1],{color:m,width:v,lineDash:p}),n=!0,3!==f.length)return n;if(I="2",Ml(t,c,I,f[1],f[2],{color:m,width:v,lineDash:p}),!h.cachedStats[r]?.angle)continue;const E=this.getLinkedTextBoxStyle(l,d);if(!E.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const C=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=f[1];h.handles.textBox.worldPosition=i.canvasToWorld(e)}const _=i.worldToCanvas(h.handles.textBox.worldPosition),b=Pl(t,c,"1",C,_,f,{},E),{x:T,y:D,width:S,height:y}=b;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([T,D]),topRight:i.canvasToWorld([T+S,D]),bottomLeft:i.canvasToWorld([T,D+y]),bottomRight:i.canvasToWorld([T+S,D+y])}}return n})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport;if(3!==i.handles.points.length)return;const a=i.handles.points[0],r=i.handles.points[1],s=i.handles.points[2],{cachedStats:l}=i,d=Object.keys(l);for(let e=0;e<d.length;e++){const n=d[e],i=Wf([a,r],[r,s]),{dimensions:o,imageData:c}=this.getTargetIdImage(n,t);this.isHandleOutsideImage=[a,r,s].map((e=>ie.utilities.transformWorldToIndex(c,e))).some((e=>!ie.utilities.indexWithinDimensions(e,o))),l[n]={angle:isNaN(i)?"Incomplete Angle":i}}return e.invalidated=!1,Le(e,o),l}}function dI(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return isNaN(i)?[`${i}`]:[`${ie.utilities.roundNumber(i)} ${String.fromCharCode(176)}`]}ae(lI,"toolName",void 0),lI.toolName="Angle";const cI=lI,hI=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const i=2===t[0].length?[0,0]:[0,0,0],o=t.length;for(const e of t)i[0]+=e[0]/o,i[1]+=e[1]/o,3===i.length&&(i[2]+=e[2]/o);return i};class uI extends Jl{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:gI,showArcLines:!1}}),e=this,ae(this,"angleStartedNotYetCompleted",void 0),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;Fr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,...r.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),Ar(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{distanceToPoint:s,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:r.handles.points,canvasCoords:n,proximity:i});return s<=i||l<=i})),ae(this,"toolSelectedCallback",(function(t,n,i,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6;const r=t.detail,{element:s}=r;n.highlighted=!0;const l=Ir(s,e.getToolName()),d=(0,ie.getEnabledElement)(s),{renderingEngine:c,viewport:h}=d,{isNearFirstLine:u,isNearSecondLine:g}=e.distanceToLines({viewport:h,points:n.data.handles.points,canvasCoords:o,proximity:a});e.editData={annotation:n,viewportIdsToRender:l,movingTextBox:!1,isNearFirstLine:u,isNearSecondLine:g},e._activateModify(s),Fr(s),Ar(l),t.preventDefault()})),ae(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&s.handles.points.length<4)return Hr(n),void(this.editData.handleIndex=s.handles.points.length);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i),this.editData=null,this.isDrawing=!1})),ae(this,"_mouseDownCallback",(e=>{const{annotation:t,handleIndex:n}=this.editData,i=e.detail,{element:o,currentPoints:a}=i,r=a.world,{data:s}=t;return 1===n?(s.handles.points[1]=r,void(this.editData.hasMoved=s.handles.points[1][0]!==s.handles.points[0][0]||s.handles.points[1][1]!==s.handles.points[0][0])):3===n?(s.handles.points[3]=r,this.editData.hasMoved=s.handles.points[3][0]!==s.handles.points[2][0]||s.handles.points[3][1]!==s.handles.points[2][0],void(this.angleStartedNotYetCompleted=!1)):(this.editData.hasMoved=!1,Fr(o),s.handles.points[2]=s.handles.points[3]=r,void(this.editData.handleIndex=s.handles.points.length-1))})),ae(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r,isNearFirstLine:s,isNearSecondLine:l}=this.editData,{data:d}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a&&(s||l)){const{deltaPoints:e}=t,n=e.world,o=d.handles.points;s?[o[0],o[1]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})):l&&[o[2],o[3]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;d.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const c=(0,ie.getEnabledElement)(n),{renderingEngine:h}=c;Ar(o)})),ae(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;o.handles.points.length<4&&pt(t.annotationUID),t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,ie.getEnabledElement)(e),{renderingEngine:r}=a;return Ar(n),i&&Ne(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(se.MOUSE_DOWN,this._mouseDownCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DOWN,this._mouseDownCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u,activeHandleIndex:g}=h.handles;l.annotationUID=c;const{color:m,lineWidth:v,lineDash:p}=this.getAnnotationStyle({annotation:d,styleSpecifier:l}),f=u.map((e=>i.worldToCanvas(e)));let w;if(h.cachedStats[r]&&null!=h.cachedStats[r].angle?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={angle:null,arc1Angle:null,arc2Angle:null,points:{world:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null},canvas:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null}}},this._calculateCachedStats(d,s,e)),ue(d)||this.editData||null===g||(w=[f[g]]),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;w&&ul(t,c,"0",f,{color:m,lineDash:p,lineWidth:v});const I=[f[0],f[1]],E=[f[2],f[3]];let C="line1";if(Ml(t,c,C,I[0],I[1],{color:m,width:v,lineDash:p}),n=!0,f.length<4)return n;C="line2",Ml(t,c,C,E[0],E[1],{color:m,width:v,lineDash:p}),C="linkLine",Ml(t,c,C,hI(I[0],I[1]),hI(E[0],E[1]),{color:m,lineWidth:"1",lineDash:"1,4"});const{arc1Start:_,arc1End:b,arc2End:T,arc2Start:D}=h.cachedStats[r].points.canvas,{arc1Angle:S,arc2Angle:y}=h.cachedStats[r];if(this.configuration.showArcLines&&(C="arc1",Ml(t,c,C,_,b,{color:m,lineWidth:"1"}),C="arc2",Ml(t,c,C,D,T,{color:m,lineWidth:"1"})),!h.cachedStats[r]?.angle)continue;const x=this.getLinkedTextBoxStyle(l,d);if(!x.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const M=this.configuration.getTextLines(h,r);if(!h.handles.textBox.hasMoved){const e=Al(f);h.handles.textBox.worldPosition=i.canvasToWorld(e)}const O=i.worldToCanvas(h.handles.textBox.worldPosition),P=Pl(t,c,"cobbAngleText",M,O,f,{},x),{x:A,y:R,width:L,height:N}=P;if(h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([A,R]),topRight:i.canvasToWorld([A+L,R]),bottomLeft:i.canvasToWorld([A,R+N]),bottomRight:i.canvasToWorld([A+L,R+N])},this.configuration.showArcLines){const e="arcAngle1",n=[`${S.toFixed(2)} ${String.fromCharCode(176)}`],i=hI(_,b);xl(t,c,e,n,i,{...x,padding:3});const o="arcAngle2",a=[`${y.toFixed(2)} ${String.fromCharCode(176)}`],r=hI(D,T);xl(t,c,o,a,r,{...x,padding:3})}}return n})),ae(this,"distanceToLines",(e=>{let{viewport:t,points:n,canvasCoords:i,proximity:o}=e;const[a,r,s,l]=n,d=t.worldToCanvas(a),c=t.worldToCanvas(r),h=t.worldToCanvas(s),u=t.worldToCanvas(l),g={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}},m={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}},v=im([g.start.x,g.start.y],[g.end.x,g.end.y],[i[0],i[1]]),p=im([m.start.x,m.start.y],[m.end.x,m.end.y],[i[0],i[1]]);let f=!1,w=!1;return v<=o?f=!0:p<=o&&(w=!0),{distanceToPoint:v,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:w}})),ae(this,"getArcsStartEndPoints",(e=>{let{firstLine:t,secondLine:n,mid1:i,mid2:o}=e;const a=[i,o],r=Wf(t,a),s=Wf(n,a),l=r>90?1:0,d=s>90?0:1,c=hI(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),u=.1,g=hI(t[0],t[1]),m=hI(n[0],n[1]),v=[t[l][0]-g[0],t[l][1]-g[1]],p=Math.sqrt(v[0]**2+v[1]**2),f=[v[0]/p,v[1]/p],w=[g[0]+f[0]*h*u,g[1]+f[1]*h*u],I=[c[0]-i[0],c[1]-i[1]],E=Math.sqrt(I[0]**2+I[1]**2),C=[I[0]/E,I[1]/E],_=[i[0]+C[0]*h*u,i[1]+C[1]*h*u],b=[n[d][0]-m[0],n[d][1]-m[1]],T=Math.sqrt(b[0]**2+b[1]**2),D=[b[0]/T,b[1]/T],S=[m[0]+D[0]*h*u,m[1]+D[1]*h*u],y=[c[0]-o[0],c[1]-o[1]],x=Math.sqrt(y[0]**2+y[1]**2),M=[y[0]/x,y[1]/x];return{arc1Start:w,arc1End:_,arc2Start:S,arc2End:[o[0]+M[0]*h*u,o[1]+M[1]*h*u],arc1Angle:r>90?180-r:r,arc2Angle:s>90?180-s:s}})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data;if(4!==i.handles.points.length)return;const o=[null,null],a=[null,null];let r=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){const n=Oo.vec3.distance(i.handles.points[e],i.handles.points[t]);n<r&&(r=n,o[1]=i.handles.points[e],o[0]=i.handles.points[(e+1)%2],a[0]=i.handles.points[t],a[1]=i.handles.points[2+(t-1)%2])}const{viewport:s}=n,{element:l}=s,d=i.handles.points.map((e=>s.worldToCanvas(e))),c=[d[0],d[1]],h=[d[2],d[3]],u=hI(c[0],c[1]),g=hI(h[0],h[1]),{arc1Start:m,arc1End:v,arc2End:p,arc2Start:f,arc1Angle:w,arc2Angle:I}=this.getArcsStartEndPoints({firstLine:c,secondLine:h,mid1:u,mid2:g}),{cachedStats:E}=i,C=Object.keys(E);for(let e=0;e<C.length;e++)E[C[e]]={angle:Wf(o,a),arc1Angle:w,arc2Angle:I,points:{canvas:{arc1Start:m,arc1End:v,arc2End:p,arc2Start:f},world:{arc1Start:s.canvasToWorld(m),arc1End:s.canvasToWorld(v),arc2End:s.canvasToWorld(p),arc2Start:s.canvasToWorld(f)}}};return e.invalidated=!1,Le(e,l),E}}function gI(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return[`${i.toFixed(2)} ${String.fromCharCode(176)}`]}ae(uI,"toolName",void 0),uI.toolName="CobbAngle";const mI=uI,{transformWorldToIndex:vI}=ie.utilities;class pI extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:fI,displayBothAxesDistances:!1}}),ae(this,"startedDrawing",void 0),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{if(this.startedDrawing)return;this.startedDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;if(!(r instanceof ie.StackViewport))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");Fr(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...o],[...o]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};mt(g,i);const m=Ir(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),Ar(m),g})),ae(this,"isPointNearTool",((e,t,n,i)=>!1)),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.startedDrawing&&1===s.handles.points.length)return void(this.editData.handleIndex=1);this.startedDrawing=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o),a&&Ne(i),this.editData=null,this.isDrawing=!1})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ie.getEnabledElement)(n),{renderingEngine:d}=l;Ar(o)})),ae(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,this.startedDrawing=!1,t.annotationUID}})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r=this.getTargetId(i),s=i.getRenderingEngine(),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let o=0;o<a.length;o++){const d=a[o],{annotationUID:c,data:h}=d,{points:u}=h.handles;l.annotationUID=c;const g=this.getStyle("color",l,d),m=u.map((e=>i.worldToCanvas(e)));if(h.cachedStats[r]&&null!=h.cachedStats[r].xValues?d.invalidated&&this._throttledCalculateCachedStats(d,s,e):(h.cachedStats[r]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(d,s,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let v="0";if(hl(t,c,v,m[0],{color:g},0),n=!0,2!==m.length)return n;if(v="1",hl(t,c,v,m[1],{color:g},1),h.cachedStats[r].isUnitless){const e=`${c}-line-1`;Ml(t,c,"1",m[0],m[1],{color:g,width:1,shadow:this.configuration.shadow},e)}else{const e=m[0],n=m[1],i=n[1]-e[1],o=n[0]-e[0];let a=[0,0];a=h.cachedStats[r].isHorizontal?[e[0]+o,e[1]]:[e[0],e[1]+i];let s=`${c}-line-1`,l="1";Ml(t,c,l,m[0],a,{color:g,width:1,shadow:this.configuration.shadow},s),s=`${c}-line-2`,l="2",Ml(t,c,l,m[1],a,{color:g,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}const p=this.getLinkedTextBoxStyle(l,d);if(!p.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const f=this.configuration.getTextLines(h,r,this.configuration);if(!h.handles.textBox.hasMoved){const e=m[1];h.handles.textBox.worldPosition=i.canvasToWorld(e)}const w=i.worldToCanvas(h.handles.textBox.worldPosition),I=Pl(t,c,"1",f,w,m,{},p),{x:E,y:C,width:_,height:b}=I;h.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([E,C]),topRight:i.canvasToWorld([E+_,C]),bottomLeft:i.canvasToWorld([E,C+b]),bottomRight:i.canvasToWorld([E+_,C+b])}}return n})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,i){}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const r=Ir(o,this.getToolName());let s,l=!1;n.worldPosition||(s=a.handles.points.findIndex((e=>e===n))),this.editData={handleIndex:s,annotation:t,viewportIdsToRender:r},this._activateModify(o),Fr(o);const d=(0,ie.getEnabledElement)(o),{renderingEngine:c}=d;Ar(r),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{element:o}=n.viewport;if(2!==i.handles.points.length)return;const{cachedStats:a}=i,r=Object.keys(a);for(let e=0;e<r.length;e++){const o=r[e],s=this.getTargetIdImage(o,t);if(!s)continue;const{imageData:l}=s,d=i.handles.points[0],c=i.handles.points[1],h=vI(l,d),u=vI(l,c),{values:g,units:m}=pa(s,[h]),{values:v,units:p}=pa(s,[u]);let f,w,I,E,C=!1;if(m[0]!==p[0]||m[1]!==p[1]||"raw"===m[0]&&"raw"===p[0]){const e=$r(d,c);f=[e,0],w=[e,0],I=["px"],C=!0}else{const e=n.viewport.worldToCanvas(d),t=n.viewport.worldToCanvas(c),i=t[1]-e[1],o=t[0]-e[0];E=Math.abs(o)>Math.abs(i),f=[g[0],v[0]],w=[g[1],v[1]],I=[m[0],m[1]]}a[o]={xValues:f,yValues:w,isHorizontal:E,units:I,isUnitless:C}}return e.invalidated=!1,Le(e,o),a}}function fI(e,t,n){const i=e.cachedStats[t],{xValues:o,yValues:a,units:r,isUnitless:s,isHorizontal:l}=i;if(s)return[`${ie.utilities.roundNumber(o[0])} px`];if(n.displayBothAxesDistances){const e=Math.abs(o[1]-o[0]),t=Math.abs(a[1]-a[0]);return[`${ie.utilities.roundNumber(e)} ${r[0]}`,`${ie.utilities.roundNumber(t)} ${r[1]}`]}if(l){const e=Math.abs(o[1]-o[0]);return[`${ie.utilities.roundNumber(e)} ${r[0]}`]}{const e=Math.abs(a[1]-a[0]);return[`${ie.utilities.roundNumber(e)} ${r[1]}`]}}ae(pI,"toolName",void 0),pI.toolName="UltrasoundDirectionalTool";const wI=pI;class II extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:EI,changeTextCallback:CI,canvasPosition:[10,10],canvasSize:10}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u=II.createAnnotation({metadata:{...r.getViewReference(),referencedImageId:h}});mt(u,i);const g=Ir(i,this.getToolName());return e.preventDefault(),Ar(g),this.configuration.getTextCallback((e=>{if(!e)return pt(u.annotationUID),Ar(g),void(this.isDrawing=!1);u.data.text=e,Ne(u),Ar(g)})),u})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{canvasPosition:s,canvasSize:l}=this.configuration;return!!s?.length&&Math.abs(n[0]-s[0]+l/2)<=l/2&&Math.abs(n[1]-s[1]+l/2)<=l/2})),ae(this,"toolSelectedCallback",((e,t)=>{t.highlighted=!0,e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this._deactivateModify(n),Hr(n)})),ae(this,"doubleClickCallback",(e=>{const t=e.detail,{element:n}=t;let i=lt(this.getToolName(),n);if(i=this.filterInteractableAnnotationsForElement(n,i),!i?.length)return;const o=i.find((e=>this.isPointNearTool(n,e,t.currentPoints.canvas,6)));if(!o)return;const a=o;this.configuration.changeTextCallback(o,e.detail,this._doneChangingTextCallback.bind(this,n,a)),this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const o=a[e],{annotationUID:s}=o;r.annotationUID=s;const{color:l}=this.getAnnotationStyle({annotation:o,styleSpecifier:r}),{canvasPosition:d,canvasSize:c}=this.configuration;if(d?.length&&Sg(t,s,"1",d.map((e=>e+c)),d,{color:l,width:1}),n=!0,!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n}return n}))}cancel(){}handleSelectedCallback(e,t,n){}_doneChangingTextCallback(e,t,n){t.data.text=n;const i=(0,ie.getEnabledElement)(e),{renderingEngine:o}=i,a=Ir(e,this.getToolName());Ar(a),Le(t,e)}_isInsideVolume(e,t,n){return ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n)}}function EI(e){return e(prompt("Enter your annotation:"))}function CI(e,t,n){return n(prompt("Enter your annotation:"))}ae(II,"toolName",void 0),II.toolName="KeyImage";const _I=II,bI="magnify-viewport";class TI extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}),ae(this,"editData",void 0),ae(this,"_hasBeenRemoved",!1),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,ie.getEnabledElement)(n),{viewport:a,renderingEngine:r}=o;if(!(a instanceof ie.StackViewport))throw new Error("MagnifyTool only works on StackViewports");const s=this._getReferencedImageId(a);if(!s)throw new Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");const l=Ir(n,this.getToolName());return this.editData={referencedImageId:s,viewportIdsToRender:l,enabledElement:o,renderingEngine:r,currentPoints:i},this._createMagnificationViewport(),this._activateDraw(n),Fr(n),e.preventDefault(),Ar(l),!0})),ae(this,"preTouchStartCallback",(e=>{this.preMouseDownCallback(e)})),ae(this,"_createMagnificationViewport",(()=>{const{enabledElement:e,referencedImageId:t,viewportIdsToRender:n,renderingEngine:i,currentPoints:o}=this.editData,{viewport:a}=e,{element:r}=a,s=a.getProperties(),{canvas:l,world:d}=o;let c;if(c=r.querySelector(".magnifyTool"),null===c){const e=document.createElement("div");e.classList.add("magnifyTool"),e.style.display="block",e.style.width=`${this.configuration.magnifyWidth}px`,e.style.height=`${this.configuration.magnifyHeight}px`,e.style.position="absolute",c=e,r.querySelector(".viewport-element").appendChild(e);const t={viewportId:bI,type:ie.Enums.ViewportType.STACK,element:c};i.enableElement(t)}c.style.top=l[1]-this.configuration.magnifyHeight/2+"px",c.style.left=l[0]-this.configuration.magnifyWidth/2+"px";const h=i.getViewport(bI);h.setStack([t]).then((()=>{if(this._hasBeenRemoved)return;h.setProperties(s);const{parallelScale:e}=a.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:i}=h.getCamera(),o=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),r=[d[0],d[1],d[2]],l=[r[0]+o*i[0],r[1]+o*i[1],r[2]+o*i[2]];h.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:r,position:l}),h.render()})),c.style.display="block",Ar(n)})),ae(this,"_dragCallback",(e=>{const t=e.detail,{deltaPoints:n,element:i,currentPoints:o}=t,a=n.world,r=o.canvas,s=(0,ie.getEnabledElement)(i),{renderingEngine:l}=s,d=l.getViewport(bI),c=i.querySelector(".magnifyTool");if(!c)return;c.style.top=r[1]-this.configuration.magnifyHeight/2+"px",c.style.left=r[0]-this.configuration.magnifyWidth/2+"px";const{focalPoint:h,position:u}=d.getCamera(),g=[u[0]+a[0],u[1]+a[1],u[2]+a[2]],m=[h[0]+a[0],h[1]+a[1],h[2]+a[2]];d.setCamera({focalPoint:m,position:g}),d.render()})),ae(this,"_dragEndCallback",(e=>{const{element:t}=e.detail,n=(0,ie.getEnabledElement)(t),{renderingEngine:i}=n;i.disableElement(bI);const o=t.querySelector(".viewport-element"),a=o.querySelector(".magnifyTool");o.removeChild(a),this._deactivateDraw(t),Hr(t),this._hasBeenRemoved=!0})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,this._hasBeenRemoved=!1,e.addEventListener(se.MOUSE_UP,this._dragEndCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._dragEndCallback),e.addEventListener(se.TOUCH_END,this._dragEndCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._dragEndCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener(se.TOUCH_END,this._dragEndCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)}))}_getReferencedImageId(e){const t=this.getTargetId(e);let n;return e instanceof ie.StackViewport&&(n=t.split("imageId:")[1]),n}}ae(TI,"toolName",void 0),TI.toolName="Magnify";const DI=TI,SI=125,{Events:yI}=ie.Enums,xI=e=>e.uid!==e.referencedId;var MI=function(e){return e.ShowZoomFactorsList="showZoomFactorsList",e}(MI||{});const OI=1-ie.CONSTANTS.EPSILON;class PI extends Jl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:3,zoomFactorList:[1.5,2,2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:es.Secondary,modifierKey:ts.Shift}]}}}}),ae(this,"magnifyViewportManager",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,ie.getEnabledElement)(i),{viewport:a,renderingEngine:r}=o,s=n.world,l=n.canvas,{magnifyingGlass:d}=this.configuration,{radius:c,zoomFactor:h,autoPan:u}=d,g=this._getCanvasHandlePoints(l,c),m=a.getCamera(),{viewPlaneNormal:v,viewUp:p}=m,f=this.getReferencedImageId(a,s,v,p),w=ie.utilities.uuidv4(),I=ie.utilities.uuidv4(),E=a.getFrameOfReferenceUID(),C={annotationUID:w,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...v],viewUp:[...p],FrameOfReferenceUID:E,referencedImageId:f},data:{sourceViewportId:a.id,magnifyViewportId:I,zoomFactor:h,isCanvasAnnotation:!0,handles:{points:g,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(C,{magnifyViewportId:I,sourceEnabledElement:o,position:l,radius:c,zoomFactor:h,autoPan:{enabled:u.enabled,padding:u.padding,callback:e=>{const t=C.data.handles.points,{canvas:n}=e.delta;for(let e=0,i=t.length;e<i;e++){const i=t[e];i[0]+=n[0],i[1]+=n[1],C.invalidated=!0}}}}),mt(C,i);const _=Ir(i,this.getToolName());return e.preventDefault(),Ar(_),C})),ae(this,"onSetToolDisabled",(()=>{this.magnifyViewportManager.dispose(),dt().forEach((e=>{e.metadata.toolName===this.getToolName()&&pt(e.annotationUID)}))})),ae(this,"isPointNearTool",((e,t,n,i)=>{const{data:o}=t,{points:a}=o.handles,r=a,s=r[0],l=r[2],d=r[3],c=.5*Math.abs(l[1]-s[1]),h=yw([[d[0]+c,s[1]+c],n]);return Math.abs(h-c)<2*i})),ae(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Ir(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},Fr(i),this._activateModify(i),Ar(o),e.preventDefault()})),ae(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Ir(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o),Fr(o),Ar(l),e.preventDefault()})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),Hr(n),this.editData=null,this.isDrawing=!1,Ar(o),a&&Ne(i)})),ae(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{deltaPoints:n}=t,i=n?.canvas??[0,0,0],{annotation:o,viewportIdsToRender:a}=this.editData,{points:r}=o.data.handles;r.forEach((e=>{e[0]+=i[0],e[1]+=i[1]})),o.invalidated=!0,this.editData.hasMoved=!0,Ar(a)})),ae(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.canvas;r.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;Ar(o)})),ae(this,"_dragHandle",(e=>{const t=e.detail,{annotation:n}=this.editData,{data:i}=n,{points:o}=i.handles,a=o,r=a[0],s=a[2],l=a[3],d=.5*Math.abs(s[1]-r[1]),c=[l[0]+d,r[1]+d],{currentPoints:h}=t,u=yw([c,h.canvas]),g=this._getCanvasHandlePoints(c,u);o[0]=g[0],o[1]=g[1],o[2]=g[2],o[3]=g[3]})),ae(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),Hr(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;return t.highlighted=!1,o.handles.activeHandleIndex=null,Ar(n),i&&Ne(t),this.editData=null,t.annotationUID})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;a=a?.filter((e=>e.data.sourceViewportId===i.id));const r=this.filterInteractableAnnotationsForElement(o,a);if(!r?.length)return n;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<r.length;e++){const o=r[e],{annotationUID:a,data:l}=o,{magnifyViewportId:d,zoomFactor:c,handles:h}=l,{points:u,activeHandleIndex:g}=h;s.annotationUID=a,this.getStyle("lineWidth",s,o),this.getStyle("lineDash",s,o);const m=this.getStyle("color",s,o),v=u,p=v[0],f=v[2],w=v[3],I=.5*Math.abs(f[1]-p[1]),E=[w[0]+I,p[1]+I];if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;let C;if(!Je(a))continue;ue(o)||this.editData||null===g||(C=[v[g]]),C&&ul(t,a,"0",C,{color:m}),Eg(t,a,"0",E,I,{color:m,lineWidth:5},`${a}-advancedMagnify`);const _=this.magnifyViewportManager.getViewport(d);_.position=E,_.radius=I,_.zoomFactor=c,_.update(),n=!0}return n})),ae(this,"_getCanvasHandlePoints",((e,t)=>[[e[0],e[1]-t,0],[e[0]+t,e[1],0],[e[0],e[1]+t,0],[e[0]-t,e[1],0]])),this.magnifyViewportManager=AI.getInstance()}showZoomFactorsList(e,t){const{element:n,currentPoints:i}=e.detail,o=(0,ie.getEnabledElement)(n),{viewport:a}=o,{canvas:r}=i,s=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,d=this._getZoomFactorsListDropdown(l,(e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),d.parentElement.removeChild(d),a.render()}));Object.assign(d.style,{left:`${r[0]}px`,top:`${r[1]}px`}),s.appendChild(d),d.focus()}_getZoomFactorsListDropdown(e,t){const{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach((e=>{i.addEventListener(e,(e=>e.stopPropagation()))})),i.addEventListener("change",(e=>{e.stopPropagation(),t(i.value)})),i.addEventListener("keydown",(e=>{((e.keyCode??27===e.which)||"escape"===e.key?.toLowerCase())&&(e.stopPropagation(),t())})),n.forEach((t=>{const n=document.createElement("option");n.label=t,n.title=`Zoom factor ${t.toFixed(1)}`,n.value=t,n.defaultSelected=t===e,i.add(n)})),i}}ae(PI,"toolName",void 0),ae(PI,"Actions",MI);class AI{constructor(){ae(this,"_magnifyViewportsMap",void 0),ae(this,"createViewport",((e,t)=>{const{magnifyViewportId:n,sourceEnabledElement:i,position:o,radius:a,zoomFactor:r,autoPan:s}=t,{viewport:l}=i,{element:d}=l,c=new RI({magnifyViewportId:n,sourceEnabledElement:i,radius:a,position:o,zoomFactor:r,autoPan:s});return this._addSourceElementEventListener(d),this._magnifyViewportsMap.set(c.viewportId,{annotation:e,magnifyViewport:c,magnifyViewportInfo:t}),c})),ae(this,"_annotationRemovedCallback",(e=>{const{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this.destroyViewport(t.data.magnifyViewportId)})),ae(this,"_newStackImageCallback",(e=>{const{viewportId:t,imageId:n}=e.detail,i=this._getMagnifyViewportsMapEntriesBySourceViewportId(t),{viewport:o}=(0,ie.getEnabledElementByViewportId)(t);o.stackActorReInitialized&&this._reset(t),i.forEach((e=>{let{annotation:t}=e;t.metadata.referencedImageId=n,t.invalidated=!0}))})),ae(this,"_newVolumeImageCallback",(e=>{const{renderingEngineId:t,viewportId:n}=e.detail,i=(0,ie.getRenderingEngine)(t).getViewport(n),{viewPlaneNormal:o}=i.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach((e=>{let{annotation:t}=e;const{viewPlaneNormal:n}=t.metadata;if(!(Math.abs(Oo.vec3.dot(n,o))>OI))return;const{handles:a}=t.data,r=i.canvasToWorld([0,0]),s=Oo.vec3.sub(Oo.vec3.create(),r,a.points[0]),l=Oo.vec3.dot(s,o),d=Oo.vec3.scale(Oo.vec3.create(),o,l);for(let e=0,t=a.points.length;e<t;e++){const t=a.points[e];t[0]+=d[0],t[1]+=d[1],t[2]+=d[2]}t.invalidated=!0}))})),this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){return AI._singleton=AI._singleton??new AI,AI._singleton}getViewport(e){return this._magnifyViewportsMap.get(e)?.magnifyViewport}dispose(){this._removeEventListeners(),this._destroyViewports()}destroyViewport(e){const t=this._magnifyViewportsMap.get(e);if(t){const{magnifyViewport:n}=t,{viewport:i}=n.sourceEnabledElement,{element:o}=i;this._removeSourceElementEventListener(o),n.dispose(),this._magnifyViewportsMap.delete(e)}}_destroyViewports(){Array.from(this._magnifyViewportsMap.keys()).forEach((e=>this.destroyViewport(e)))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter((t=>{let{magnifyViewport:n}=t;const{viewport:i}=n.sourceEnabledElement;return i.id===e}))}_reset(e){this._getMagnifyViewportsMapEntriesBySourceViewportId(e).forEach((t=>{let{magnifyViewport:n,annotation:i,magnifyViewportInfo:o}=t;this.destroyViewport(n.viewportId);const a=(0,ie.getEnabledElementByViewportId)(e);this.createViewport(i,{...o,sourceEnabledElement:{...a}})}))}_addEventListeners(){ie.eventTarget.addEventListener(se.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){ie.eventTarget.removeEventListener(se.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(yI.STACK_NEW_IMAGE,this._newStackImageCallback);const t=e=>{const{viewportId:t}=e.detail;this._reset(t)};e.addEventListener(yI.STACK_VIEWPORT_NEW_STACK,t);const n=e=>{const{viewportId:t}=e.detail;this._reset(t)};e.addEventListener(yI.VOLUME_VIEWPORT_NEW_VOLUME,n),e.addEventListener(yI.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.newStackHandler=t,e.newVolumeHandler=n}_removeSourceElementEventListener(e){e.removeEventListener(yI.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(yI.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.removeEventListener(yI.STACK_VIEWPORT_NEW_STACK,e.newStackHandler),e.removeEventListener(yI.VOLUME_VIEWPORT_NEW_VOLUME,e.newVolumeHandler),delete e.newStackHandler,delete e.newVolumeHandler}_initialize(){this._addEventListeners()}}ae(AI,"_singleton",void 0);class RI{constructor(e){let{magnifyViewportId:t,sourceEnabledElement:n,radius:i=SI,position:o=[0,0],zoomFactor:a,autoPan:r}=e;ae(this,"_viewportId",void 0),ae(this,"_sourceEnabledElement",void 0),ae(this,"_enabledElement",null),ae(this,"_sourceToolGroup",null),ae(this,"_magnifyToolGroup",null),ae(this,"_isViewportReady",!1),ae(this,"_radius",0),ae(this,"_resized",!1),ae(this,"_resizeViewportAsync",void 0),ae(this,"_canAutoPan",!1),ae(this,"_autoPan",void 0),ae(this,"position",void 0),ae(this,"zoomFactor",void 0),ae(this,"visible",void 0),this._viewportId=t??ie.utilities.uuidv4(),this._sourceEnabledElement=n,this._autoPan=r,this.radius=i,this.position=o,this.zoomFactor=a,this.visible=!0,this._browserMouseDownCallback=this._browserMouseDownCallback.bind(this),this._browserMouseUpCallback=this._browserMouseUpCallback.bind(this),this._handleToolModeChanged=this._handleToolModeChanged.bind(this),this._mouseDragCallback=this._mouseDragCallback.bind(this),this._resizeViewportAsync=ao(this._resizeViewport.bind(this),1),this._initialize()}get sourceEnabledElement(){return this._sourceEnabledElement}get viewportId(){return this._viewportId}get radius(){return this._radius}set radius(e){Math.abs(this._radius-e)>1e-5&&(this._radius=e,this._resized=!0)}update(){const{radius:e,position:t,visible:n}=this,{viewport:i}=this._enabledElement,{element:o}=i,a=2*e,[r,s]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(o.style,{display:n?"block":"hidden",width:`${a}px`,height:`${a}px`,left:-e+"px",top:-e+"px",transform:`translate(${r}px, ${s}px)`}),this._isViewportReady&&(this._syncViewports(),i.render())}dispose(){const{viewport:e}=this._enabledElement,{element:t}=e,n=e.getRenderingEngine();this._removeEventListeners(t),n.disableElement(e.id),t.parentNode&&t.parentNode.removeChild(t)}_handleToolModeChanged(e){const{_magnifyToolGroup:t}=this,{toolGroupId:n,toolName:i,mode:o,toolBindingsOptions:a}=e.detail;if(this._sourceToolGroup?.id===n)switch(o){case Oe.Active:t.setToolActive(i,a);break;case Oe.Passive:t.setToolPassive(i);break;case Oe.Enabled:t.setToolEnabled(i);break;case Oe.Disabled:t.setToolDisabled(i);break;default:throw new Error(`Unknow tool mode (${o})`)}}_inheritBorderRadius(e){const t=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");t.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){const e=document.createElement("div"),{radius:t}=this,n=2*t;return e.classList.add("advancedMagnifyTool"),Object.assign(e.style,{display:"block",width:`${n}px`,height:`${n}px`,position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:-t+"px",top:-t+"px",transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParallelScale(e,t,n){const{parallelScale:i}=e.getCamera();return i*(1/n)*(t.canvas.offsetWidth/e.canvas.offsetWidth)}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,t){const n=e.getActors(),i=`${t.id}-toolGroup`,o=ur(e.id,e.renderingEngineId),a=o.clone(i,(e=>{const t=o.getToolInstance(e);return t instanceof Jl&&!(t instanceof PI)}));return a.addViewport(t.id,t.renderingEngineId),n.filter(xI).forEach((e=>{(0,c.addSegmentationRepresentations)(this.viewportId,[{segmentationId:e.referencedId,type:ri.Labelmap}])})),{sourceToolGroup:o,magnifyToolGroup:a}}_cloneStack(e,t){const n=e.getImageIds();t.setStack(n).then((()=>{this._isViewportReady=!0,this.update()}))}_cloneVolumes(e,t){const n=e.getActors().filter((e=>!xI(e))).map((e=>({volumeId:e.uid})));return t.setVolumes(n).then((()=>{this._isViewportReady=!0,this.update()})),t}_cloneViewport(e,t){const{viewportId:n}=this,i=e.getRenderingEngine(),{options:o}=e,a={element:t,viewportId:n,type:e.type,defaultOptions:{...o}};i.enableElement(a);const r=i.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,r):this._isVolumeViewport(e)&&this._cloneVolumes(e,r),this._inheritBorderRadius(t);const s=this._cloneToolGroups(e,r);this._sourceToolGroup=s.sourceToolGroup,this._magnifyToolGroup=s.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){const{element:t}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),t.addEventListener("mouseup",this._cancelMouseEventCallback),t.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){const{element:t}=this._enabledElement.viewport;this._canAutoPan=!!e.target?.closest(".advancedMagnifyTool"),document.addEventListener("mouseup",this._browserMouseUpCallback),t.removeEventListener("mouseup",this._cancelMouseEventCallback),t.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!xe.isInteractingWithTool)return;const{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:o}=i,{canvas:a}=n,{radius:r}=this,s=[r,r],l=$r(s,a),d=r-t.padding;if(l<=d)return;const c=l-d,h=Oo.vec2.sub(Oo.vec2.create(),a,s);Oo.vec2.normalize(h,h),Oo.vec2.scale(h,h,c);const u=Oo.vec2.add(Oo.vec2.create(),this.position,h),g=o(this.position),m=o(u),v=Oo.vec3.sub(Oo.vec3.create(),m,g),p={points:{currentPosition:{canvas:this.position,world:g},newPosition:{canvas:u,world:m}},delta:{canvas:h,world:v}};t.callback(p)}_addBrowserEventListeners(e){document.addEventListener("mousedown",this._browserMouseDownCallback,!0),e.addEventListener("mousedown",this._cancelMouseEventCallback),e.addEventListener("mouseup",this._cancelMouseEventCallback),e.addEventListener("mousemove",this._cancelMouseEventCallback),e.addEventListener("dblclick",this._cancelMouseEventCallback)}_removeBrowserEventListeners(e){document.removeEventListener("mousedown",this._browserMouseDownCallback,!0),document.removeEventListener("mouseup",this._browserMouseUpCallback),e.removeEventListener("mousedown",this._cancelMouseEventCallback),e.removeEventListener("mouseup",this._cancelMouseEventCallback),e.removeEventListener("mousemove",this._cancelMouseEventCallback),e.removeEventListener("dblclick",this._cancelMouseEventCallback)}_addEventListeners(e){ie.eventTarget.addEventListener(se.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){ie.eventTarget.removeEventListener(se.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(t,i),this._enabledElement=(0,ie.getEnabledElement)(i)}_syncViewportsCameras(e,t){const n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParallelScale(e,t,this.zoomFactor),{focalPoint:o,position:a,viewPlaneNormal:r}=t.getCamera(),s=Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2)+Math.pow(o[2]-a[2],2)),l=[n[0],n[1],n[2]],d=[l[0]+s*r[0],l[1]+s*r[1],l[2]+s*r[2]];t.setCamera({parallelScale:i,focalPoint:l,position:d})}_syncStackViewports(e,t){t.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){const{viewport:e}=this._sourceEnabledElement,{viewport:t}=this._enabledElement,n=e.getProperties();t.getImageData()&&(t.setProperties(n),this._syncViewportsCameras(e,t),this._isStackViewport(e)&&this._syncStackViewports(e,t),this._syncViewportsCameras(e,t),t.render())}_resizeViewport(){const{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}PI.toolName="AdvancedMagnify";class LI extends Yl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}),ae(this,"isDrawing",!1),ae(this,"isHandleOutsideImage",!1),ae(this,"_elementWithCursor",null),ae(this,"_currentCursorWorldPosition",null),ae(this,"_currentCanvasPosition",null),ae(this,"_disableCursorEnabled",!1),ae(this,"mouseMoveCallback",(e=>{const{detail:t}=e,{element:n,currentPoints:i}=t;this._currentCursorWorldPosition=i.world,this._currentCanvasPosition=i.canvas,this._elementWithCursor=n;const o=this.getActiveAnnotation(n);return null===o?(this.createInitialAnnotation(i.world,n),!1):(this.updateAnnotationPosition(n,o),!1)})),ae(this,"createInitialAnnotation",((e,t)=>{const n=(0,ie.getEnabledElement)(t);if(!n)throw new Error("No enabled element found");const{viewport:i,renderingEngine:o}=n;this.isDrawing=!0;const a=i.getCamera(),{viewPlaneNormal:r,viewUp:s}=a;if(!r||!s)throw new Error("Camera not found");const l=this.getReferencedImageId(i,e,r,s),d=i.getFrameOfReferenceUID(),c={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...s],FrameOfReferenceUID:d,referencedImageId:l},data:{label:"",handles:{points:[[...e]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}};if(lt(this.getToolName(),t).length>0)return null;if(null===mt(c,t))return;const h=Ir(t,this.getToolName(),!1);Ar(h)})),ae(this,"onCameraModified",(e=>{const t=e.detail,{element:n,previousCamera:i,camera:o}=t,a=(0,ie.getEnabledElement)(n).viewport;if(n!==this._elementWithCursor)return;const r=i.focalPoint,s=o.viewPlaneNormal,l=o.focalPoint,d=[0,0,0];if(kv().subtract(l,r,d),0===d.reduce(((e,t)=>e+t),0))return;const c=kv().dot(d,s);if(Math.abs(c)<.01)return;if(!this._currentCanvasPosition)return;const h=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=h,this.updateAnnotationPosition(n,this.getActiveAnnotation(n))})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i,FrameOfReferenceUID:o}=e,a=this._elementWithCursor===i.element;this.configuration.positionSync&&!a&&this.updateViewportImage(i);const{element:r}=i;let s=lt(this.getToolName(),r);if(!s?.length)return n;if(s=this.filterInteractableAnnotationsForElement(r,s),!s?.length)return n;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const o=s[e],{annotationUID:r,data:d}=o,{handles:c}=d,{points:h}=c;if(!r)return n;l.annotationUID=r;const u=parseFloat(this.getStyle("lineWidth",l,o)),g=this.getStyle("lineDash",l,o),m=this.getStyle("color",l,o);if(h[0].some((e=>isNaN(e))))return n;const v=h.map((e=>i.worldToCanvas(e)));if(!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Je(r))continue;const p={upper:"upper",right:"right",lower:"lower",left:"left"},[f,w]=v[0],I=a?20:7,E=a?5:7;Ml(t,r,p.upper,[f,w-(I/2+E)],[f,w-I/2],{color:m,lineDash:g,lineWidth:u}),Ml(t,r,p.lower,[f,w+(I/2+E)],[f,w+I/2],{color:m,lineDash:g,lineWidth:u}),Ml(t,r,p.right,[f+(I/2+E),w],[f+I/2,w],{color:m,lineDash:g,lineWidth:u}),Ml(t,r,p.left,[f-(I/2+E),w],[f-I/2,w],{color:m,lineDash:g,lineWidth:u}),n=!0}return n})),this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=Wd(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ie.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&Fr(e.viewport.element)}))}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=Wd(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ie.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&Hr(e.viewport.element)}))}getActiveAnnotation(e){const t=lt(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){const n=this._currentCursorWorldPosition;if(!n)return;if(!t.data?.handles?.points)return;t.data.handles.points=[[...n]],t.invalidated=!0;const i=Ir(e,this.getToolName(),!1);(0,ie.getEnabledElement)(e)&&Ar(i)}filterInteractableAnnotationsForElement(e,t){if(!(t instanceof Array)||0===t.length)return[];const n=t[0],i=(0,ie.getEnabledElement)(e)?.viewport;if(!i)return[];const o=i.getCamera(),{viewPlaneNormal:a,focalPoint:r}=o;if(!a||!r)return[];const s=n.data?.handles?.points;if(!(s instanceof Array)||1!==s.length)return[];const l=s[0],d=ie.utilities.planar.planeEquation(a,r);return ie.utilities.planar.planeDistanceToPoint(d,l)<this.configuration.displayThreshold?[n]:[]}updateViewportImage(e){const t=this._currentCursorWorldPosition;if(t&&!t.some((e=>isNaN(e))))if(e instanceof ie.StackViewport){const n=ie.utilities.getClosestStackImageIndexForPoint(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof ie.VolumeViewport){const{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;const o=ie.utilities.planar.planeEquation(i,n),a=ie.utilities.planar.planeDistanceToPoint(o,t,!0);if(Math.abs(a)<.5)return;const r=Oo.vec3.normalize(Oo.vec3.create(),Oo.vec3.fromValues(...i)),s=Oo.vec3.scale(Oo.vec3.create(),r,a),l=Oo.vec3.add(Oo.vec3.create(),Oo.vec3.fromValues(...n),s);{e.setCamera({focalPoint:l});const t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}ae(LI,"toolName",void 0),LI.toolName="ReferenceCursors";const NI=LI,UI=[];class kI extends Yl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{viewportId:"",scaleLocation:"bottom"}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",null),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"_init",(()=>{const e=(0,ie.getRenderingEngines)()[0];if(!e)return;const t=Wd(this.toolGroupId).viewportsInfo;if(!t)return;const n=t.map((e=>(0,ie.getEnabledElementByIds)(e.viewportId,e.renderingEngineId)));let{viewport:i}=n[0];const{FrameOfReferenceUID:o}=n[0];if(this.configuration.viewportId&&n.forEach((e=>{e.viewport.id==this.configuration.viewportId&&(i=e.viewport)})),!i)return;const{viewUp:a,viewPlaneNormal:r}=i.getCamera(),s=ie.utilities.getViewportImageCornersInWorld(i);let l=this.editData.annotation;const d=lt(this.getToolName(),i.element);if(d.length&&(l=d.filter((e=>e.data.viewportId==i.id))[0]),UI.includes(i.id))this.editData.annotation&&this.editData.annotation.data.viewportId==i.id&&(this.editData.annotation.data.handles.points=s,this.editData.annotation.data.viewportId=i.id);else{const e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...a],FrameOfReferenceUID:o,referencedImageId:null},data:{handles:{points:s},viewportId:i.id}};UI.push(i.id),mt(e,i.element),l=e}this.editData={viewport:i,renderingEngine:e,annotation:l}})),ae(this,"onSetToolEnabled",(()=>{this._init()})),ae(this,"onCameraModified",(e=>{this.configuration.viewportId=e.detail.viewportId,this._init()})),ae(this,"computeScaleSize",((e,t,n)=>{const i=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let o;return o="top"==n||"bottom"==n?i.filter((t=>t<.6*e&&t>.2*e)):i.filter((e=>e<.6*t&&e>.2*t)),o[0]})),ae(this,"computeEndScaleTicks",((e,t)=>{const n={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]};return{endTick1:[[e[1][0]+n[t][0][0],e[1][1]+n[t][0][0]],[e[1][0]+n[t][1][0],e[1][1]+n[t][1][1]]],endTick2:[[e[0][0]+n[t][0][0],e[0][1]+n[t][0][0]],[e[0][0]+n[t][1][0],e[0][1]+n[t][1][1]]]}})),ae(this,"computeInnerScaleTicks",((e,t,n,i,o)=>{let a;"bottom"==t||"top"==t?a=o[0][0]-i[0][0]:"left"!=t&&"right"!=t||(a=o[0][1]-i[0][1]);const r=[],s=[],l=[];let d=e;e>=50&&(d=e/10);const c=a/d;for(let e=0;e<d-1;e++){const o={bottom:[[c*(e+1),0],[c*(e+1),5]],top:[[c*(e+1),0],[c*(e+1),-5]],left:[[0,c*(e+1)],[-5,c*(e+1)]],right:[[0,c*(e+1)],[5,c*(e+1)]]};r.push(`${n}-tick${e}`),s.push(`tick${e}`),(e+1)%5==0?l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][0][0],i[1][1]+o[t][0][1]]]):l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][1][0],i[1][1]+o[t][1][1]]])}return{tickIds:r,tickUIDs:s,tickCoordinates:l}})),ae(this,"computeWorldScaleCoordinates",((e,t,n)=>{let i,o=Oo.vec3.subtract(Oo.vec3.create(),n[0],n[1]);o=Oo.vec3.normalize(Oo.vec3.create(),o);let a=Oo.vec3.subtract(Oo.vec3.create(),n[2],n[0]);a=Oo.vec3.normalize(Oo.vec3.create(),a);const r={bottom:[n[1],n[2]],top:[n[0],n[3]],right:[n[2],n[3]],left:[n[0],n[1]]},s=Oo.vec3.add(Oo.vec3.create(),r[t][0],r[t][0]).map((e=>e/2)),l=e/2/Math.sqrt(Math.pow(o[0],2)+Math.pow(o[1],2)+Math.pow(o[2],2));return"top"==t||"bottom"==t?i=[Oo.vec3.subtract(Oo.vec3.create(),s,a.map((e=>e*l))),Oo.vec3.add(Oo.vec3.create(),s,a.map((e=>e*l)))]:"left"!=t&&"right"!=t||(i=[Oo.vec3.add(Oo.vec3.create(),s,o.map((e=>e*l))),Oo.vec3.subtract(Oo.vec3.create(),s,o.map((e=>e*l)))]),i})),ae(this,"computeCanvasScaleCoordinates",((e,t,n,i,o)=>{let a;if("top"==o||"bottom"==o){const i=t[0][0]-t[1][0];a=[[e.width/2-i/2,n.height],[e.width/2+i/2,n.height]]}else if("left"==o||"right"==o){const n=t[0][1]-t[1][1];a=[[i.width,e.height/2-n/2],[i.width,e.height/2+n/2]]}return a})),ae(this,"computeScaleBounds",((e,t,n,i)=>{const o=t*Math.min(1e3,e.width),a=n*Math.min(1e3,e.height),r={bottom:[-a,-o],top:[a,o],left:[a,o],right:[-a,-o]},s={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:s[i][0]+r[i][0],width:s[i][1]+r[i][1]}}))}renderAnnotation(e,t){if(!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:i}=e,o=lt(this.getToolName(),i.element).filter((e=>e.data.viewportId==i.id))[0],a=e.viewport.canvas,r=!1;if(!i)return r;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l={width:a.width/window.devicePixelRatio||1,height:a.height/window.devicePixelRatio||1},d=o.data.handles.points[0],c=o.data.handles.points[1],h=o.data.handles.points[2],u=o.data.handles.points[3],g=[d,h,c,u],m=Oo.vec3.distance(h,u),v=Oo.vec3.distance(d,h),p=this.computeScaleBounds(l,.05,.05,n),f=this.computeScaleBounds(l,.05,.05,n),w=this.computeScaleSize(m,v,n),I=this.computeWorldScaleCoordinates(w,n,g).map((e=>i.worldToCanvas(e))),E=this.computeCanvasScaleCoordinates(l,I,f,p,n),C=this.computeEndScaleTicks(E,n),{annotationUID:_}=o;s.annotationUID=_;const b=this.getStyle("lineWidth",s,o),T=this.getStyle("lineDash",s,o),D=this.getStyle("color",s,o),S=this.getStyle("shadow",s,o),y=`${_}-scaleline`;Ml(t,_,"1",E[0],E[1],{color:D,width:b,lineDash:T,shadow:S},y);const x=`${_}-left`;Ml(t,_,"2",C.endTick1[0],C.endTick1[1],{color:D,width:b,lineDash:T,shadow:S},x);const M=`${_}-right`;Ml(t,_,"3",C.endTick2[0],C.endTick2[1],{color:D,width:b,lineDash:T,shadow:S},M);const O={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},P=[E[0][0]+O[n][0],E[0][1]+O[n][1]],A=this._getTextLines(w),{tickIds:R,tickUIDs:L,tickCoordinates:N}=this.computeInnerScaleTicks(w,n,_,C.endTick1,C.endTick2);for(let e=0;e<L.length;e++)Ml(t,_,L[e],N[e][0],N[e][1],{color:D,width:b,lineDash:T,shadow:S},R[e]);return xl(t,_,"text0",A,[P[0],P[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:D}),r}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}ae(kI,"toolName",void 0),kI.toolName="ScaleOverlay";const VI=kI,WI=(e,t,n)=>{if(!t?.data?.contour?.polyline?.length)return;const{polyline:i}=t.data.contour,{length:o}=i;let a=1/0;for(let t=0;t<o;t++){const o=$r(e.worldToCanvas(i[t]),n);a=Math.min(a,o)}return a===1/0||isNaN(a)?void 0:a};class BI{constructor(){ae(this,"toolInfo",{toolSize:null,maxToolSize:null})}renderShape(e,t,n){Eg(e,"SculptorTool","0",t,this.toolInfo.toolSize,n)}pushHandles(e,t){const{points:n,mouseCanvasPoint:i}=t,o={first:void 0,last:void 0};for(let a=0;a<n.length;a++){const r=$r(e.worldToCanvas(n[a]),i);r>this.toolInfo.toolSize||(this.pushOneHandle(a,r,t),void 0===o.first?(o.first=a,o.last=a):o.last=a)}return o}configureToolSize(e){const t=this.toolInfo;if(t.toolSize&&t.maxToolSize)return;const n=e.detail.element,i=Math.min(n.clientWidth,n.clientHeight)/12;t.toolSize=i,t.maxToolSize=i}updateToolSize(e,t,n){const i=this.toolInfo,o=WI(t,n,e);o>0&&(i.toolSize=Math.min(i.maxToolSize,o))}getMaxSpacing(e){return Math.max(this.toolInfo.toolSize/4,e)}getInsertPosition(e,t,n){let i;const{points:o,element:a,mouseCanvasPoint:r}=n,s=this.toolInfo.toolSize,l=(0,ie.getEnabledElement)(a),{viewport:d}=l,c=d.worldToCanvas(o[e]),h=d.worldToCanvas(o[t]),u=[(c[0]+h[0])/2,(c[1]+h[1])/2],g=$r(r,u);if(g<s){const e={x:(u[0]-r[0])/g,y:(u[1]-r[1])/g};i=[r[0]+s*e.x,r[1]+s*e.y]}else i=u;return d.canvasToWorld(i)}pushOneHandle(e,t,n){const{points:i,mousePoint:o}=n,a=this.toolInfo.toolSize,r=i[e],s=(r[0]-o[0])/t,l=(r[1]-o[1])/t,d=(r[2]-o[2])/t,c={x:o[0]+a*s,y:o[1]+a*l,z:o[2]+a*d};r[0]=c.x,r[1]=c.y,r[2]=c.z}}ae(BI,"shapeName","Circle");const HI=BI;class FI extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{minSpacing:1,referencedToolNames:["PlanarFreehandROI","PlanarFreehandContourSegmentationTool"],toolShape:"circle",referencedToolName:"PlanarFreehandROI"}}),ae(this,"registeredShapes",new Map),ae(this,"isActive",!1),ae(this,"selectedShape",void 0),ae(this,"commonData",{activeAnnotationUID:null,viewportIdsToRender:[],isEditingOpenContour:!1,canvasLocation:void 0}),ae(this,"sculptData",void 0),ae(this,"preMouseDownCallback",(e=>{const t=e.detail,n=t.element;if(this.configureToolSize(e),this.selectFreehandTool(t),null!==this.commonData.activeAnnotationUID)return this.isActive=!0,Fr(n),this.activateModify(n),!0})),ae(this,"mouseMoveCallback",(e=>{this.mode===Oe.Active?(this.configureToolSize(e),this.updateCursor(e)):this.commonData.canvasLocation=void 0})),ae(this,"endCallback",(e=>{const t=e.detail,{element:n}=t,i=this.configuration,o=(0,ie.getEnabledElement)(n);this.isActive=!1,this.deactivateModify(n),Hr(n);const{renderingEngineId:a,viewportId:r}=o,s=ur(r,a).getToolInstance(i.referencedToolName),l=this.filterSculptableAnnotationsForElement(n).find((e=>e.annotationUID===this.commonData.activeAnnotationUID));s.configuration.calculateStats&&(l.invalidated=!0),Le(l,n)})),ae(this,"dragCallback",(e=>{const t=e.detail,n=t.element;this.updateCursor(e);const i=this.filterSculptableAnnotationsForElement(n),o=i.find((e=>e.annotationUID===this.commonData.activeAnnotationUID));if(!i?.length||!this.isActive)return;const a=o.data.contour.polyline;this.sculpt(t,a)})),this.registerShapes(HI.shapeName,HI),this.setToolShape(this.configuration.toolShape)}registerShapes(e,t){const n=new t;this.registeredShapes.set(e,n)}sculpt(e,t){const n=this.configuration,i=e.element,o=(0,ie.getEnabledElement)(i),{viewport:a}=o,r=this.registeredShapes.get(this.selectedShape);this.sculptData={mousePoint:e.currentPoints.world,mouseCanvasPoint:e.currentPoints.canvas,points:t,maxSpacing:r.getMaxSpacing(n.minSpacing),element:i};const s=r.pushHandles(a,this.sculptData);void 0!==s.first&&this.insertNewHandles(s)}interpolatePointsWithinMaxSpacing(e,t,n,i){const{element:o}=this.sculptData,a=(0,ie.getEnabledElement)(o),{viewport:r}=a,s=GI(e+1,t.length);$r(r.worldToCanvas(t[e]),r.worldToCanvas(t[s]))>i&&n.push(e)}updateCursor(e){const t=e.detail,n=t.element,i=(0,ie.getEnabledElement)(n),{renderingEngine:o,viewport:a}=i;this.commonData.viewportIdsToRender=[a.id];const r=this.filterSculptableAnnotationsForElement(n);if(!r?.length)return;const s=r.find((e=>e.annotationUID===this.commonData.activeAnnotationUID));if(this.commonData.canvasLocation=t.currentPoints.canvas,this.isActive)s.highlighted=!0;else{const e=this.registeredShapes.get(this.selectedShape),n=t.currentPoints.canvas;e.updateToolSize(n,a,s)}Pr(this.commonData.viewportIdsToRender)}filterSculptableAnnotationsForElement(e){const t=this.configuration,n=(0,ie.getEnabledElement)(e),{renderingEngineId:i,viewportId:o}=n,a=[],r=ur(o,i).getToolInstance(t.referencedToolName);return t.referencedToolNames.forEach((t=>{const n=lt(t,e);n&&a.push(...n)})),r.filterInteractableAnnotationsForElement(e,a)}configureToolSize(e){this.registeredShapes.get(this.selectedShape).configureToolSize(e)}insertNewHandles(e){const t=this.findNewHandleIndices(e);let n=0;for(let e=0;e<t?.length;e++){const i=t[e]+1+n;this.insertHandleRadially(i),n++}}findNewHandleIndices(e){const{points:t,maxSpacing:n}=this.sculptData,i=[];for(let o=e.first;o<=e.last;o++)this.interpolatePointsWithinMaxSpacing(o,t,i,n);return i}insertHandleRadially(e){const{points:t}=this.sculptData;if(e>t.length-1&&this.commonData.isEditingOpenContour)return;const n=this.registeredShapes.get(this.selectedShape),i=e-1,o=GI(e,t.length),a=n.getInsertPosition(i,o,this.sculptData);t.splice(e,0,a)}selectFreehandTool(e){const t=this.getClosestFreehandToolOnElement(e);void 0!==t&&(this.commonData.activeAnnotationUID=t)}getClosestFreehandToolOnElement(e){const{element:t}=e,n=(0,ie.getEnabledElement)(t),{viewport:i}=n,o=this.configuration,a=this.filterSculptableAnnotationsForElement(t);if(!a?.length)return;const r=e.currentPoints.canvas,s={distance:1/0,toolIndex:void 0,annotationUID:void 0};for(let e=0;e<a?.length;e++){if(a[e].isLocked||!a[e].isVisible)continue;const t=WI(i,a[e],r);-1!==t&&t<s.distance&&(s.distance=t,s.toolIndex=e,s.annotationUID=a[e].annotationUID)}return this.commonData.isEditingOpenContour=!a[s.toolIndex].data.contour.closed,o.referencedToolName=a[s.toolIndex].metadata.toolName,s.annotationUID}activateModify(e){e.addEventListener(se.MOUSE_UP,this.endCallback),e.addEventListener(se.MOUSE_CLICK,this.endCallback),e.addEventListener(se.MOUSE_DRAG,this.dragCallback),e.addEventListener(se.TOUCH_TAP,this.endCallback),e.addEventListener(se.TOUCH_END,this.endCallback),e.addEventListener(se.TOUCH_DRAG,this.dragCallback)}deactivateModify(e){e.removeEventListener(se.MOUSE_UP,this.endCallback),e.removeEventListener(se.MOUSE_CLICK,this.endCallback),e.removeEventListener(se.MOUSE_DRAG,this.dragCallback),e.removeEventListener(se.TOUCH_TAP,this.endCallback),e.removeEventListener(se.TOUCH_END,this.endCallback),e.removeEventListener(se.TOUCH_DRAG,this.dragCallback)}setToolShape(e){this.selectedShape=this.registeredShapes.get(e)??HI.shapeName}renderAnnotation(e,t){const{viewport:n}=e,{element:i}=n,o=this.commonData.viewportIdsToRender;if(!this.commonData.canvasLocation||this.mode!==Oe.Active||!o.includes(n.id))return;const a=this.filterSculptableAnnotationsForElement(i);if(!a?.length)return;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};let s=$l("color",r,zl.Default,this.mode);this.isActive&&(s=$l("color",r,zl.Highlighted,this.mode)),this.registeredShapes.get(this.selectedShape).renderShape(t,this.commonData.canvasLocation,{color:s})}}ae(FI,"toolName",void 0);const GI=(e,t)=>(e+t)%t;FI.toolName="SculptorTool";const $I=FI;class qI extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ae(this,"preMouseDownCallback",(e=>this._deleteNearbyAnnotations(e,"mouse"))),ae(this,"preTouchStartCallback",(e=>this._deleteNearbyAnnotations(e,"touch")))}_deleteNearbyAnnotations(e,t){const{renderingEngineId:n,viewportId:i,element:o,currentPoints:a}=e.detail,r=ur(i,n);if(!r)return!1;const s=r._toolInstances,l=[];for(const e in s){const n=s[e];if("function"!=typeof n.isPointNearTool||"function"!=typeof n.filterInteractableAnnotationsForElement)continue;const i=lt(e,o);if(!i.length)continue;const r=n.filterInteractableAnnotationsForElement(o,i)||[];for(const e of r)n.isPointNearTool(o,e,a.canvas,10,t)&&l.push(e.annotationUID)}for(const e of l)We(e),pt(e);return e.preventDefault(),!0}}ae(qI,"toolName",void 0),qI.toolName="Eraser";const zI=qI,{transformWorldToIndex:jI}=ie.utilities;function KI(e,t){!function(e,t){const{points:n,segmentsLocked:i,segmentIndex:o,segmentationId:a}=t,{viewport:r}=e,s=Am({operationData:t,viewport:e.viewport});if(!s)return void console.warn("No data found for fillRectangle");const{segmentationImageData:l,segmentationVoxelManager:d}=s;let c=n.map((e=>jI(l,e)));c=c.map((e=>e.map((e=>Math.round(e)))));const h=gi(c,l.getDimensions()),u=r instanceof ie.StackViewport||dp(c),g=l.getDirection(),m=l.getSpacing(),{viewPlaneNormal:v}=r.getCamera(),p=ie.utilities.getSpacingInNormalDirection({direction:g,spacing:m},v),f=mi(n);let[[w,I],[E,C],[_,b]]=f;w-=p,I+=p,E-=p,C+=p,_-=p,b+=p;const T=u?()=>!0:e=>{const[t,n,i]=e;return t>=w&&t<=I&&n>=E&&n<=C&&i>=_&&i<=b};d.forEach((e=>{let{value:t,index:n}=e;i.includes(t)||d.setAtIndex(n,o)}),{isInObject:T,boundsIJK:h,imageData:l}),Ci(a)}(e,t)}function YI(e,t){!function(e,t){KI(e,Object.assign({},t,{segmentIndex:0}))}(e,t)}class XI extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:KI,ERASE_INSIDE:YI},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a;this.isDrawing=!0;const s=r.getCamera(),{viewPlaneNormal:l,viewUp:d}=s,c=gf(r.id);if(!c)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:h,segmentationId:u}=c,g=qd(u),m=Kd(u),v=wo(h,g),{representationData:p}=Yi(u),f=p[ri.Labelmap],w={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...l],viewUp:[...d],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:v},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null}}},I=Ir(i,this.getToolName());if(this.editData={annotation:w,segmentIndex:g,segmentationId:u,segmentsLocked:m,segmentColor:v,viewportIdsToRender:I,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:h,volumeId:null,referencedVolumeId:null,imageId:null},co(f,r)){const{volumeId:e}=f,t=ie.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else this.editData={...this.editData};return this._activateDraw(i),Fr(i),e.preventDefault(),Ar(I),!0})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i,{currentPoints:s}=t,l=(0,ie.getEnabledElement)(n),{worldToCanvas:d,canvasToWorld:c}=l.viewport,h=s.world,{points:u}=r.handles;let g,m,v,p,f,w,I,E;switch(u[a]=[...h],a){case 0:case 3:g=d(u[0]),p=d(u[3]),m=[p[0],g[1]],v=[g[0],p[1]],w=c(m),I=c(v),u[1]=w,u[2]=I;break;case 1:case 2:m=d(u[1]),v=d(u[2]),g=[v[0],m[1]],p=[m[0],v[1]],f=c(g),E=c(p),u[0]=f,u[3]=E}i.invalidated=!0,this.editData.hasMoved=!0;const{renderingEngine:C}=l;Ar(o)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),Hr(n);const s=(0,ie.getEnabledElement)(n),l={...this.editData,points:r.handles.points};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,l)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{annotation:o}=this.editData,a=o.metadata,r=o.annotationUID,s=o.data,{points:l}=s.handles,d=l.map((e=>i.worldToCanvas(e))),c=`rgb(${a.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(Dg(t,r,"0",d[0],d[3],{color:c}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ae(XI,"toolName",void 0),XI.toolName="RectangleScissor";const JI=XI;class ZI extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:zm,ERASE_INSIDE:ev},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{viewport:s}=r;this.isDrawing=!0;const l=s.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=gf(s.id);if(!h)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:u,segmentationId:g,type:m}=h,v=qd(g),p=Kd(g),f=wo(u,v),{representationData:w}=Yi(g),I=w[m];if(!I)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const E={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:f},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},C=[s.id];if(this.editData={annotation:E,centerCanvas:a,segmentIndex:v,segmentationId:g,segmentsLocked:p,segmentColor:f,viewportIdsToRender:C,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:u,volumeId:null,referencedVolumeId:null},co(I,s)){const{volumeId:e}=I,t=ie.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else this.editData={...this.editData};return this._activateDraw(i),Fr(i),e.preventDefault(),Ar(C),!0})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:u}=d,g=Math.abs(o[0]-h[0]),m=Math.abs(o[1]-h[1]),v=Math.sqrt(g*g+m*m),p=[h[0],h[1]+v],f=[h[0],h[1]-v],w=[h[0]-v,h[1]],I=[h[0]+v,h[1]];u.handles.points=[l(p),l(f),l(w),l(I)],d.invalidated=!0,this.editData.hasMoved=!0,Ar(c)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i,{viewPlaneNormal:s,viewUp:l}=i.metadata;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),Hr(n);const d=(0,ie.getEnabledElement)(n),c={...this.editData,points:r.handles.points,viewPlaneNormal:s,viewUp:l,strategySpecificConfiguration:{}};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(d,c)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback),e.addEventListener(se.TOUCH_END,this._endCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],u=c[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],m=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),v=`rgb(${r.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(Eg(t,s,"0",g,m,{color:v}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ae(ZI,"toolName",void 0),ZI.toolName="CircleScissor";const QI=ZI;class eE extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Jm,ERASE_INSIDE:Qm},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,ie.getEnabledElement)(i),{viewport:s}=r;this.isDrawing=!0;const l=s.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=gf(s.id);if(!h)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:u,segmentationId:g}=h,m=qd(g),v=Kd(g),p=wo(u,m);this.isDrawing=!0;const f={metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:p},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},w=[s.id];this.editData={annotation:f,centerCanvas:a,segmentationRepresentationUID:u,segmentIndex:m,segmentationId:g,segmentsLocked:v,segmentColor:p,toolGroupId:this.toolGroupId,viewportIdsToRender:w,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null};const{representationData:I}=Yi(g),E=I[ri.Labelmap];if(co(E,s)){const{volumeId:e}=E,t=ie.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else this.editData={...this.editData};return this._activateDraw(i),Fr(i),e.preventDefault(),Ar(w),!0})),ae(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,ie.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:u}=d,g=Math.abs(o[0]-h[0]),m=Math.abs(o[1]-h[1]),v=Math.sqrt(g*g+m*m),p=[h[0],h[1]+v],f=[h[0],h[1]-v],w=[h[0]-v,h[1]],I=[h[0]+v,h[1]];u.handles.points=[l(p),l(f),l(w),l(I)],d.invalidated=!0,this.editData.hasMoved=!0,Ar(c)})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l}=this.editData,{data:d}=i,{viewPlaneNormal:c,viewUp:h}=i.metadata;if(o&&!a)return;i.highlighted=!1,d.handles.activeHandleIndex=null,this._deactivateDraw(n),Hr(n);const u=(0,ie.getEnabledElement)(n),g={...this.editData,points:d.handles.points,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l,viewPlaneNormal:c,viewUp:h};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(u,g)})),ae(this,"_activateDraw",(e=>{e.addEventListener(se.MOUSE_UP,this._endCallback),e.addEventListener(se.MOUSE_DRAG,this._dragCallback),e.addEventListener(se.MOUSE_CLICK,this._endCallback),e.addEventListener(se.MOUSE_MOVE,this._dragCallback),e.addEventListener(se.TOUCH_END,this._endCallback),e.addEventListener(se.TOUCH_TAP,this._endCallback),e.addEventListener(se.TOUCH_DRAG,this._dragCallback)})),ae(this,"_deactivateDraw",(e=>{e.removeEventListener(se.MOUSE_UP,this._endCallback),e.removeEventListener(se.MOUSE_DRAG,this._dragCallback),e.removeEventListener(se.MOUSE_CLICK,this._endCallback),e.removeEventListener(se.MOUSE_MOVE,this._dragCallback),e.removeEventListener(se.TOUCH_END,this._endCallback),e.removeEventListener(se.TOUCH_DRAG,this._dragCallback),e.removeEventListener(se.TOUCH_TAP,this._endCallback)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],u=c[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],m=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),v=`rgb(${r.segmentColor.slice(0,3)})`;return i.getRenderingEngine()?(Eg(t,s,"0",g,m,{color:v}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ae(eE,"toolName",void 0),eE.toolName="SphereScissor";const tE=eE;var nE=E(907),iE=E.n(nE);const{transformWorldToIndex:oE}=ie.utilities;class aE extends Aw{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!1,getTextLines:rE,statsCalculator:Vl,showTextBox:!1}}),ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",!1),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l;let h,u,g;if(r instanceof ie.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ie.utilities.getVolumeId(e),u=ie.cache.getVolume(g),h=ie.utilities.getClosestImageId(u,o,d)}const m=ie.utilities.getSpacingInNormalDirection(u,d),v=this._getStartCoordinate(o,m,d),p=this._getEndCoordinate(o,m,d),f=r.getFrameOfReferenceUID(),w={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:f,referencedImageId:h,volumeId:g,spacingInNormal:m,enabledElement:a},data:{label:"",startCoordinate:v,endCoordinate:p,handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...o],[...o]],activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[],statistics:[]},labelmapUID:null}};this._computeProjectionPoints(w,u),mt(w,i);const I=Ir(i,this.getToolName());return this.editData={annotation:w,viewportIdsToRender:I,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(I),w})),ae(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n);const l=(0,ie.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID);const d=this.getTargetId(l.viewport),c=ie.cache.getVolume(d.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(i,c,d,l),Ar(o),a&&Ne(i)})),ae(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;let o=lt(this.getToolName(),i.element);if(!o?.length)return n;o=hm(o,i.getCamera());const a={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let r=0;r<o.length;r++){const s=o[r],{annotationUID:l,data:d}=s,{startCoordinate:c,endCoordinate:h}=d,{points:u,activeHandleIndex:g}=d.handles;a.annotationUID=l;const m=this.getStyle("lineWidth",a,s),v=this.getStyle("lineDash",a,s),p=this.getStyle("color",a,s),f=u.map((e=>i.worldToCanvas(e))),w=f[0],I=yw(f),{centerPointRadius:E}=this.configuration,C=xw(f),_=i.getCamera().focalPoint,b=i.getCamera().viewPlaneNormal;let T=c,D=h;Array.isArray(c)&&(T=this._getCoordinateForViewplaneNormal(T,b)),Array.isArray(h)&&(D=this._getCoordinateForViewplaneNormal(D,b));const S=ie.utilities.roundToPrecision(T),y=ie.utilities.roundToPrecision(D),x=this._getCoordinateForViewplaneNormal(_,b),M=ie.utilities.roundToPrecision(x);if(M<Math.min(S,y)||M>Math.max(S,y))continue;s.invalidated&&this._throttledCalculateCachedStats(s,e);let O,P=!1;if(M===ie.utilities.roundToPrecision((T+D)/2)&&(P=!0),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Je(l))continue;ue(s)||this.editData||null===g||!P||(O=[f[g]]),O&&ul(t,l,"0",O,{color:p});let A=m,R=v;P?(A=m,R=[]):R=[5,5];const L="0";if(Eg(t,l,L,w,I,{color:p,lineDash:R,lineWidth:A}),E>0&&I>3*E&&Eg(t,l,`${L}-center`,w,E,{color:p,lineDash:v,lineWidth:m}),n=!0,1==this.configuration.showTextBox&&1==this.configuration.calculatePointsInsideVolume){const e=this.getLinkedTextBoxStyle(a,s);if(!e.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const n=this.configuration.getTextLines(d);if(!n||0===n.length)continue;let o;d.handles.textBox.hasMoved||(o=Al(C),d.handles.textBox.worldPosition=i.canvasToWorld(o));const r=i.worldToCanvas(d.handles.textBox.worldPosition),c=Pl(t,l,"1",n,r,f,{},e),{x:h,y:u,width:g,height:m}=c;d.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([h,u]),topRight:i.canvasToWorld([h+g,u]),bottomLeft:i.canvasToWorld([h,u+m]),bottomRight:i.canvasToWorld([h+g,u+m])}}}return n})),this._throttledCalculateCachedStats=cr(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:r}=t,{startCoordinate:s,endCoordinate:l}=n,{points:d}=n.handles,c=oE(r,d[0]),h=oE(r,d[0]),u=iE()(d),g=Oo.vec3.create();r.indexToWorldVec3(c,g);const m=Oo.vec3.create();r.indexToWorldVec3(h,m),2==this._getIndexOfCoordinatesForViewplaneNormal(o)?(g[2]=s,m[2]=l,u[0][2]=s,u[1][2]=s):0==this._getIndexOfCoordinatesForViewplaneNormal(o)?(g[0]=s,m[0]=l,u[0][0]=s,u[1][0]=s):1==this._getIndexOfCoordinatesForViewplaneNormal(o)&&(g[1]=s,m[1]=l,u[0][1]=s,u[1][1]=s);const v=Oo.vec3.distance(g,m),p=[];for(let e=0;e<v;e+=a)p.push(u.map((t=>{const n=Oo.vec3.create();return Oo.vec3.scaleAndAdd(n,t,o,e),Array.from(n)})));n.cachedStats.projectionPoints=p}_computePointsInsideVolume(e,t,n,i){const{data:o,metadata:a}=e,{viewPlaneNormal:r,viewUp:s}=a,{viewport:l,renderingEngine:d}=i,c=o.cachedStats.projectionPoints,h=[[]],u=this.getTargetIdImage(n,d),g=o.handles.points.map((e=>l.worldToCanvas(e))),[m,v]=xw(g),p=l.canvasToWorld(m),f=l.canvasToWorld(v),{worldWidth:w,worldHeight:I}=_w(r,s,p,f),E=va(u,o.handles),C=fa(u),_=Math.abs(Math.PI*(w/E.scale/2)*(I/C/E.scale/2)),b={isPreScaled:Rl(l,n),isSuvScaled:this.isSuvScaled(l,n,e.metadata.referencedImageId)},T=Xd(a.Modality,e.metadata.referencedImageId,b);for(let e=0;e<c.length;e++){if(!t)continue;const n=c[e][0],i=c[e].map((e=>l.worldToCanvas(e))),[o,a]=xw(i),s=l.canvasToWorld(o),d=l.canvasToWorld(a),u=s,g=d,{dimensions:m,imageData:v,voxelManager:p}=t,f=oE(v,u),w=oE(v,n),I=this._getIndexOfCoordinatesForViewplaneNormal(r);f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(f[2]),f[I]=w[I];const E=oE(v,g);if(E[0]=Math.floor(E[0]),E[1]=Math.floor(E[1]),E[2]=Math.floor(E[2]),E[I]=w[I],this._isInsideVolume(f,E,m)){const e=[[Math.min(f[0],E[0]),Math.max(f[0],E[0])],[Math.min(f[1],E[1]),Math.max(f[1],E[1])],[Math.min(f[2],E[2]),Math.max(f[2],E[2])]],t={center:n,xRadius:Math.abs(s[0]-d[0])/2,yRadius:Math.abs(s[1]-d[1])/2,zRadius:Math.abs(s[2]-d[2])/2},i=p.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:e=>Vm(t,e),boundsIJK:e,imageData:v,returnPoints:this.configuration.storePointData});h.push(i)}}const D=this.configuration.statsCalculator.getStatistics();o.cachedStats.pointsInVolume=h,o.cachedStats.statistics={Modality:a.Modality,area:_,mean:D.mean?.value,stdDev:D.stdDev?.value,max:D.max?.value,statsArray:D.array,areaUnits:E.areaUnits,pixelValueUnits:T}}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:i}=t,{cachedStats:o}=n,a=this.getTargetId(i),r=ie.cache.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),e.invalidated=!1,Le(e,i.element),o}_getStartCoordinate(e,t,n){const i=this.configuration.numSlicesToPropagate,o=Math.round(i/2),a=Oo.vec3.create();return Oo.vec3.scaleAndAdd(a,e,n,o*-t),this._getCoordinateForViewplaneNormal(a,n)}_getEndCoordinate(e,t,n){const i=this.configuration.numSlicesToPropagate,o=i-Math.round(i/2),a=Oo.vec3.create();return Oo.vec3.scaleAndAdd(a,e,n,o*t),this._getCoordinateForViewplaneNormal(a,n)}_getIndexOfCoordinatesForViewplaneNormal(e){const t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t.indexOf(Math.max(...t))}_getCoordinateForViewplaneNormal(e,t){return e[this._getIndexOfCoordinatesForViewplaneNormal(t)]}}function rE(e){const t=e.cachedStats.statistics,{area:n,mean:i,max:o,stdDev:a,areaUnits:r,pixelValueUnits:s}=t;if(void 0===i)return;const l=[];return l.push(`Area: ${ie.utilities.roundNumber(n)} ${r}`),l.push(`Mean: ${ie.utilities.roundNumber(i)} ${s}`),l.push(`Max: ${ie.utilities.roundNumber(o)} ${s}`),l.push(`Std Dev: ${ie.utilities.roundNumber(a)} ${s}`),l}ae(aE,"toolName",void 0),aE.toolName="CircleROIStartEndThreshold";const sE=aE;var lE=E(518),dE=E.n(lE),cE=E(744),hE=E.n(cE),uE=E(424),gE=E.n(uE),mE=E(614),vE=E.n(mE),pE=function(e){return e[e.ANNOTATED_CUBE=1]="ANNOTATED_CUBE",e[e.AXES=2]="AXES",e[e.CUSTOM=3]="CUSTOM",e}(pE||{});class fE extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{orientationWidget:{enabled:!0,viewportCorner:dE().Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:fE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[fE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"L",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"R",faceColor:"#ffff00",faceRotation:270},yPlus:{text:"P",faceColor:"#00ffff",fontColor:"white",faceRotation:180},yMinus:{text:"A",faceColor:"#00ffff",fontColor:"white"},zPlus:{text:"S"},zMinus:{text:"I"}},defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:e=>e/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[fE.OVERLAY_MARKER_TYPES.AXES]:{},[fE.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}),ae(this,"orientationMarkers",void 0),ae(this,"polyDataURL",void 0),ae(this,"_resizeObservers",new Map),ae(this,"onSetToolEnabled",(()=>{this.initViewports(),this._subscribeToViewportEvents()})),ae(this,"onSetToolActive",(()=>{this.initViewports(),this._subscribeToViewportEvents()})),ae(this,"onSetToolDisabled",(()=>{this.cleanUpData(),this._unsubscribeToViewportNewVolumeSet()})),ae(this,"_getViewportsInfo",(()=>Wd(this.toolGroupId).viewportsInfo)),ae(this,"resize",(e=>{const t=this.orientationMarkers[e];if(!t)return;const{orientationWidget:n}=t;n.updateViewport()})),this.orientationMarkers={}}_unsubscribeToViewportNewVolumeSet(){const e=()=>{this._getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;o.removeEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this)),this._resizeObservers.get(t).unobserve(o)}))};ie.eventTarget.removeEventListener(se.TOOLGROUP_VIEWPORT_ADDED,(t=>{t.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())}))}_subscribeToViewportEvents(){const e=()=>{this._getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,ie.getEnabledElementByIds)(t,n),{element:o}=i;this.initViewports(),o.addEventListener(ie.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this));const a=new ResizeObserver((()=>{setTimeout((()=>{const e=(0,ie.getEnabledElementByIds)(t,n);if(!e)return;const{viewport:i}=e;this.resize(t),i.render()}),100)}));a.observe(o),this._resizeObservers.set(t,a)}))};e(),ie.eventTarget.addEventListener(se.TOOLGROUP_VIEWPORT_ADDED,(t=>{t.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())}))}cleanUpData(){(0,ie.getRenderingEngines)()[0].getViewports().forEach((e=>{const t=this.orientationMarkers[e.id];if(!t)return;const{actor:n,orientationWidget:i}=t;i?.setEnabled(!1),i?.delete(),n?.delete(),e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]}))}initViewports(){const e=(0,ie.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=pr(t,this.getToolName()),t.forEach((e=>{e.getWidget(this.getToolName())||this.addAxisActorInViewport(e)}))}async addAxisActorInViewport(e){const t=e.id,n=this.configuration.overlayMarkerType,i=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[t]){const{actor:n,orientationWidget:i}=this.orientationMarkers[t];e.getRenderer().removeActor(n),i.setEnabled(!1)}let o;1===n?o=this.createAnnotationCube(i):2===n?o=gE().newInstance():3===n&&(o=await this.createCustomActor());const a=e.getRenderer(),r=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:s,viewportCorner:l,viewportSize:d,minPixelSize:c,maxPixelSize:h}=this.configuration.orientationWidget,u=dE().newInstance({actor:o,interactor:r.getInteractor(),parentRenderer:a});u.setEnabled(s),u.setViewportCorner(l),u.setViewportSize(d),u.setMinPixelSize(c),u.setMaxPixelSize(h),u.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:u,actor:o},e.addWidget(this.getToolName(),u),r.render(),e.getRenderingEngine().render()}async createCustomActor(){const e=this.configuration.overlayConfiguration[pE.CUSTOM].polyDataURL,t=await fetch(e),n=await t.arrayBuffer(),i=vE().newInstance();i.parseAsArrayBuffer(n),i.update();const o=Ui().newInstance();o.shallowCopy(i.getOutputData()),o.getPointData().setActiveScalars("Color");const a=Ai().newInstance();a.setInputData(o),a.setColorModeToDirectScalars();const r=Li().newInstance();return r.setMapper(a),r.rotateZ(180),r}createAnnotationCube(e){const t=hE().newInstance();return t.setDefaultStyle({...e.defaultStyle}),t.setXPlusFaceProperty({...e.faceProperties.xPlus}),t.setXMinusFaceProperty({...e.faceProperties.xMinus}),t.setYPlusFaceProperty({...e.faceProperties.yPlus}),t.setYMinusFaceProperty({...e.faceProperties.yMinus}),t.setZPlusFaceProperty({...e.faceProperties.zPlus}),t.setZMinusFaceProperty({...e.faceProperties.zMinus}),t}async createAnnotatedCubeActor(){const e=hE().newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach((n=>{const i=`set${n.charAt(0).toUpperCase()+n.slice(1)}FaceProperty`;e[i](t[n])})),e}}ae(fE,"toolName",void 0),ae(fE,"CUBE",1),ae(fE,"AXIS",2),ae(fE,"VTPFILE",3),ae(fE,"OVERLAY_MARKER_TYPES",pE),fE.toolName="OrientationMarker";const wE=fE;class IE extends Fl{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:IE.SelectMode.Border,searchRadius:6}}),ae(this,"hoverTimer",void 0),ae(this,"mouseMoveCallback",(e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout((()=>{this._setActiveSegment(e),this.hoverTimer=null}),this.configuration.hoverTimeout),!0))),ae(this,"onSetToolEnabled",(()=>{this.onSetToolActive()})),ae(this,"onSetToolActive",(()=>{this.hoverTimer=null})),ae(this,"onSetToolDisabled",(()=>{this.hoverTimer=null})),this.hoverTimer=null}_setActiveSegment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(xe.isInteractingWithTool)return;const{element:t,currentPoints:n}=e.detail,i=n.world,o=(0,ie.getEnabledElement)(t);if(!o)return;const{viewport:a}=o,r=gf(a.id);r&&([ri.Labelmap,ri.Contour].includes(r.type)?this._setActiveSegmentForType(r,i,a):console.warn("SegmentSelectTool does not support the current segmentation type."))}_setActiveSegmentForType(e,t,n){if(!n.getImageData())return;const{segmentationId:i,type:o}=e;let a;if(this.configuration.mode===IE.SelectMode.Inside)a=Tv(i,t,{viewport:n});else switch(o){case ri.Labelmap:a=Dv(i,t,{viewport:n,searchRadius:this.configuration.searchRadius});break;case ri.Contour:a=yv(i)}if(!a||0===a)return;If(i,a);const r=n.getRenderingEngine().getViewports().map((e=>e.id));io(i),Ar(r)}}ae(IE,"toolName",void 0),ae(IE,"SelectMode",{Inside:"Inside",Border:"Border"}),IE.toolName="SegmentSelectTool";const EE=IE,{transformWorldToIndex:CE,isEqual:_E}=ie.utilities;class bE extends Fl{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),e=this,ae(this,"preMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l}=s,d=gf(r.id);if(!d)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:c,type:h}=d,u=qd(c),g=Kd(c),{representationData:m}=Yi(c);let v,p,f,w;if(co(m[ri.Labelmap],r)){const{volumeId:e}=m[h],t=ie.cache.getVolume(e);({dimensions:v,direction:p}=t),w=t.voxelManager,f=CE(t.imageData,o)}else{const e=dc(r.id,c);if(!e)throw new Error("No active segmentation imageId detected, create one before using scissors tool");const{imageData:t}=r.getImageData();v=t.getDimensions(),p=t.getDirection();const n=ie.cache.getImage(e);w=n.voxelManager,f=CE(t,o)}const I=this.getFixedDimension(l,p);if(void 0===I)return void console.warn("Oblique paint fill not yet supported");const{floodFillGetter:E,getLabelValue:C,getScalarDataPositionFromPlane:_,inPlaneSeedPoint:b,fixedDimensionValue:T}=this.generateHelpers(w,v,f,I);if(f[0]<0||f[0]>=v[0]||f[1]<0||f[1]>=v[1]||f[2]<0||f[2]>=v[2])return;const D=C(f[0],f[1],f[2]);if(g.includes(D))return;const S=Sm(E,b),{flooded:y}=S;return y.forEach((e=>{const t=_(e[0],e[1]);w.setAtIndex(t,u)})),Ci(c,this.getFramesModified(I,T,S)),!0})),ae(this,"getFramesModified",((e,t,n)=>{const{boundaries:i}=n;if(2===e)return[t];let o=1/0,a=-1/0;for(let e=0;e<i.length;e++){const t=i[e][1];t<o&&(o=t),t>a&&(a=t)}const r=[];for(let e=o;e<=a;e++)r.push(e);return r})),ae(this,"generateHelpers",(function(t,n,i){let o,a,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2;switch(r){case 0:o=i[0],a=[i[1],i[2]];break;case 1:o=i[1],a=[i[0],i[2]];break;case 2:o=i[2],a=[i[0],i[1]];break;default:throw new Error(`Invalid fixedDimension: ${r}`)}const s=(e,n,i)=>t.getAtIJK(e,n,i),l=e.generateFloodFillGetter(n,r,o,s);return{getScalarDataPositionFromPlane:e.generateGetScalarDataPositionFromPlane(((e,n,i)=>t.toIndex([e,n,i])),r,o),getLabelValue:s,floodFillGetter:l,inPlaneSeedPoint:a,fixedDimensionValue:o}})),ae(this,"generateFloodFillGetter",((e,t,n,i)=>{let o;switch(t){case 0:o=(t,o)=>{if(!(t>=e[1]||t<0||o>=e[2]||o<0))return i(n,t,o)};break;case 1:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[2]||o<0))return i(t,n,o)};break;case 2:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[1]||o<0))return i(t,o,n)};break;default:throw new Error(`Invalid fixedDimension: ${t}`)}return o})),ae(this,"generateGetScalarDataPositionFromPlane",((e,t,n)=>{let i;switch(t){case 0:i=(t,i)=>e(n,t,i);break;case 1:i=(t,i)=>e(t,n,i);break;case 2:i=(t,i)=>e(t,i,n);break;default:throw new Error(`Invalid fixedDimension: ${t}`)}return i}))}getFixedDimension(e,t){const n=t.slice(0,3),i=t.slice(3,6),o=t.slice(6,9),a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])];if(_E(a,r))return 0;const s=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];if(_E(a,s))return 1;const l=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];return _E(a,l)?2:void 0}}ae(bE,"toolName",void 0),bE.toolName="PaintFill";const TE=bE;class DE extends Jl{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),e=this,ae(this,"_throttledCalculateCachedStats",void 0),ae(this,"editData",void 0),ae(this,"isDrawing",void 0),ae(this,"isHandleOutsideImage",void 0),ae(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,ie.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),u={metadata:{viewPlaneNormal:[0,0,1],viewUp:[0,1,0],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h,toolName:this.getToolName()},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},active:!0}};mt(u,i);const g=Ir(i,this.getToolName(),!1);return this.editData={annotation:u,viewportUIDsToRender:g,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Fr(i),e.preventDefault(),Ar(g),u})),ae(this,"getHandleNearImagePoint",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;for(let e=0;e<s.length;e++){const t=s[e],o=a.worldToCanvas(t);if(!0==Oo.vec2.distance(n,o)<i)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null})),ae(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,ie.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:u,top:g,width:m,height:v}=c;if(om([u,g,m,v],h)<=i)return!0})),ae(this,"toolSelectedCallback",(function(t,n){const i=t.detail,{element:o}=i,{data:a}=n;a.active=!0;const r=Ir(o,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:r},e._activateModify(o),Fr(o),Ar(r),t.preventDefault()})),ae(this,"handleSelectedCallback",(function(t,n,i){const o=t.detail,{element:a}=o,{data:r}=n;r.active=!0;let s,l=!1;i.worldPosition||(s=r.handles.points.findIndex((e=>e===i)));const d=Ir(a,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:d,handleIndex:s},e._activateModify(a),Fr(a),Ar(d),t.preventDefault()})),ae(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;a&&!r||(s.active=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),Hr(n),(0,ie.getEnabledElement)(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&pt(i.annotationUID),Ar(o))})),ae(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:i}=r.handles;i.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),r.invalidated=!0}else{const{currentPoints:e}=t,i=(0,ie.getEnabledElement)(n),{worldToCanvas:o,canvasToWorld:s}=i.viewport,l=e.world,{points:d}=r.handles;let c,h,u,g,m,v,p,f;switch(d[a]=[...l],a){case 0:case 3:c=o(d[0]),g=o(d[3]),h=[g[0],c[1]],u=[c[0],g[1]],v=s(h),p=s(u),d[1]=v,d[2]=p;break;case 1:case 2:h=o(d[1]),u=o(d[2]),c=[u[0],h[1]],g=[h[0],u[1]],m=s(c),f=s(g),d[0]=m,d[3]=f}r.invalidated=!0}this.editData.hasMoved=!0,(0,ie.getEnabledElement)(n),Ar(o)})),ae(this,"_activateDraw",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(se.TOUCH_END,this._mouseUpCallback),e.addEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"_deactivateDraw",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(se.TOUCH_END,this._mouseUpCallback),e.removeEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"_activateModify",(e=>{xe.isInteractingWithTool=!0,e.addEventListener(se.MOUSE_UP,this._mouseUpCallback),e.addEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(se.TOUCH_END,this._mouseUpCallback),e.addEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"_deactivateModify",(e=>{xe.isInteractingWithTool=!1,e.removeEventListener(se.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(se.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(se.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(se.TOUCH_END,this._mouseUpCallback),e.removeEventListener(se.TOUCH_DRAG,this._mouseDragCallback)})),ae(this,"renderAnnotation",((e,t)=>{const n=!1,{viewport:i}=e,{element:o}=i;let a=lt(this.getToolName(),o);if(!a?.length)return n;if(a=this.filterInteractableAnnotationsForElement(o,a),!a?.length)return n;this.getTargetId(i),i.getRenderingEngine();const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<a.length;e++){const n=a[e],{annotationUID:o}=n,s=(n.metadata,n.data),{points:l,activeHandleIndex:d}=s.handles,c=l.map((e=>i.worldToCanvas(e))),h=this.getStyle("lineWidth",r,n),u=this.getStyle("lineDash",r,n),g=this.getStyle("color",r,n);if(!i.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");let m;this.editData||null===d||(m=[c[d]]),m&&ul(t,o,"0",m,{color:g}),yg(t,o,"0",c[0],c[3],{color:"black",lineDash:u,lineWidth:h})}})),ae(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),ae(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewportUID:r,renderingEngineUID:s,sceneUID:l}=o,d=a.handles.points[0],c=a.handles.points[3],{cachedStats:h}=a,u=Object.keys(h);for(let e=0;e<u.length;e++){const o=u[e],{imageVolume:a}=this._getImageVolumeFromTargetUID(o,i),{dimensions:r,scalarData:s,vtkImageData:l,metadata:g}=a,m=Oo.vec3.fromValues(0,0,0),v=Oo.vec3.fromValues(0,0,0);if(l.worldToIndexVec3(d,m),m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(m[2]),l.worldToIndexVec3(c,v),v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]),this._isInsideVolume(m,v,r)){this.isHandleOutsideImage=!1;const e=Math.min(m[0],v[0]),i=Math.max(m[0],v[0]),a=Math.min(m[1],v[1]),l=Math.max(m[1],v[1]),u=Math.min(m[2],v[2]),p=Math.max(m[2],v[2]),{worldWidth:f,worldHeight:w}=_w(t,n,d,c),I=f*w;let E=0,C=0,_=0;const b=r[0],T=r[0]*r[1];for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++)E++,C+=s[t*T+n*b+o];C/=E;for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++){const e=s[t*T+n*b+o]-C;_+=e*e}_/=E,_=Math.sqrt(_),h[o]={Modality:g.Modality,area:I,mean:C,stdDev:_}}else this.isHandleOutsideImage=!0,h[o]={Modality:g.Modality}}a.invalidated=!1;const g=se.ANNOTATION_MODIFIED,m={annotation:e,viewportUID:r,renderingEngineUID:s,sceneUID:l};return(0,ie.triggerEvent)(ie.eventTarget,g,m),h})),ae(this,"_isInsideVolume",((e,t,n)=>ie.utilities.indexWithinDimensions(e,n)&&ie.utilities.indexWithinDimensions(t,n))),ae(this,"_getTargetVolumeUID",(e=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;const t=e.getVolumeActors();return t||t.length?t[0].uid:void 0})),this._throttledCalculateCachedStats=cr(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Hr(e);const{annotation:t,viewportUIDsToRender:n}=this.editData,{data:i}=t;return i.active=!1,i.handles.activeHandleIndex=null,Ar(n),this.editData=null,t.metadata.annotationUID}_getImageVolumeFromTargetUID(e,t){let n;if(e.startsWith("stackTarget")){const i=e.indexOf(":"),o=e.substring(i+1);n=t.getViewport(o).getImageData()}else n=ie.cache.getVolume(e);return{imageVolume:n,viewport:void 0}}_getTargetStackUID(e){return`stackTarget:${e.uid}`}}DE.toolName="VideoRedaction";const SE=DE})(),C})()));
2
3
  //# sourceMappingURL=index.js.map