volview 4.0.0 → 4.0.1

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 (404) hide show
  1. package/dist/css/app.925b979f.css +1 -0
  2. package/dist/css/chunk-vendors.43a6a19a.css +5 -0
  3. package/{public → dist}/favicon.ico +0 -0
  4. package/{public → dist}/global.css +0 -0
  5. package/{src/assets/KitwareHeadAndNeck.jpg → dist/img/KitwareHeadAndNeck.11db5ffb.jpg} +0 -0
  6. package/dist/index.html +1 -0
  7. package/dist/itk/image-io/BMPImageIOReadImage.js +1 -0
  8. package/dist/itk/image-io/BMPImageIOReadImage.umd.js +1 -0
  9. package/dist/itk/image-io/BMPImageIOReadImage.wasm +0 -0
  10. package/dist/itk/image-io/BMPImageIOWriteImage.js +1 -0
  11. package/dist/itk/image-io/BMPImageIOWriteImage.umd.js +1 -0
  12. package/dist/itk/image-io/BMPImageIOWriteImage.wasm +0 -0
  13. package/dist/itk/image-io/GDCMImageIOReadImage.js +1 -0
  14. package/dist/itk/image-io/GDCMImageIOReadImage.umd.js +1 -0
  15. package/dist/itk/image-io/GDCMImageIOReadImage.wasm +0 -0
  16. package/dist/itk/image-io/GDCMImageIOWriteImage.js +1 -0
  17. package/dist/itk/image-io/GDCMImageIOWriteImage.umd.js +1 -0
  18. package/dist/itk/image-io/GDCMImageIOWriteImage.wasm +0 -0
  19. package/dist/itk/image-io/JPEGImageIOReadImage.js +1 -0
  20. package/dist/itk/image-io/JPEGImageIOReadImage.umd.js +1 -0
  21. package/dist/itk/image-io/JPEGImageIOReadImage.wasm +0 -0
  22. package/dist/itk/image-io/JPEGImageIOWriteImage.js +1 -0
  23. package/dist/itk/image-io/JPEGImageIOWriteImage.umd.js +1 -0
  24. package/dist/itk/image-io/JPEGImageIOWriteImage.wasm +0 -0
  25. package/dist/itk/image-io/MetaImageIOReadImage.js +1 -0
  26. package/dist/itk/image-io/MetaImageIOReadImage.umd.js +1 -0
  27. package/dist/itk/image-io/MetaImageIOReadImage.wasm +0 -0
  28. package/dist/itk/image-io/MetaImageIOWriteImage.js +1 -0
  29. package/dist/itk/image-io/MetaImageIOWriteImage.umd.js +1 -0
  30. package/dist/itk/image-io/MetaImageIOWriteImage.wasm +0 -0
  31. package/dist/itk/image-io/NiftiImageIOReadImage.js +1 -0
  32. package/dist/itk/image-io/NiftiImageIOReadImage.umd.js +1 -0
  33. package/dist/itk/image-io/NiftiImageIOReadImage.wasm +0 -0
  34. package/dist/itk/image-io/NiftiImageIOWriteImage.js +1 -0
  35. package/dist/itk/image-io/NiftiImageIOWriteImage.umd.js +1 -0
  36. package/dist/itk/image-io/NiftiImageIOWriteImage.wasm +0 -0
  37. package/dist/itk/image-io/NrrdImageIOReadImage.js +1 -0
  38. package/dist/itk/image-io/NrrdImageIOReadImage.umd.js +1 -0
  39. package/dist/itk/image-io/NrrdImageIOReadImage.wasm +0 -0
  40. package/dist/itk/image-io/NrrdImageIOWriteImage.js +1 -0
  41. package/dist/itk/image-io/NrrdImageIOWriteImage.umd.js +1 -0
  42. package/dist/itk/image-io/NrrdImageIOWriteImage.wasm +0 -0
  43. package/dist/itk/image-io/PNGImageIOReadImage.js +1 -0
  44. package/dist/itk/image-io/PNGImageIOReadImage.umd.js +1 -0
  45. package/dist/itk/image-io/PNGImageIOReadImage.wasm +0 -0
  46. package/dist/itk/image-io/PNGImageIOWriteImage.js +1 -0
  47. package/dist/itk/image-io/PNGImageIOWriteImage.umd.js +1 -0
  48. package/dist/itk/image-io/PNGImageIOWriteImage.wasm +0 -0
  49. package/dist/itk/image-io/ReadDICOMTags.js +1 -0
  50. package/dist/itk/image-io/ReadDICOMTags.umd.js +1 -0
  51. package/dist/itk/image-io/ReadDICOMTags.wasm +0 -0
  52. package/dist/itk/image-io/ReadImageDICOMFileSeries.js +1 -0
  53. package/dist/itk/image-io/ReadImageDICOMFileSeries.umd.js +1 -0
  54. package/dist/itk/image-io/ReadImageDICOMFileSeries.wasm +0 -0
  55. package/dist/itk/image-io/VTKImageIOReadImage.js +1 -0
  56. package/dist/itk/image-io/VTKImageIOReadImage.umd.js +1 -0
  57. package/dist/itk/image-io/VTKImageIOReadImage.wasm +0 -0
  58. package/dist/itk/image-io/VTKImageIOWriteImage.js +1 -0
  59. package/dist/itk/image-io/VTKImageIOWriteImage.umd.js +1 -0
  60. package/dist/itk/image-io/VTKImageIOWriteImage.wasm +0 -0
  61. package/dist/itk/pipelines/dicom.js +1 -0
  62. package/dist/itk/pipelines/dicom.umd.js +1 -0
  63. package/{src/io/itk-dicom/web-build → dist/itk/pipelines}/dicom.umd.wasm +0 -0
  64. package/{src/io/itk-dicom/web-build → dist/itk/pipelines}/dicom.wasm +0 -0
  65. package/dist/itk/web-workers/IOInput.d.ts +6 -0
  66. package/dist/itk/web-workers/IOInput.js +1 -0
  67. package/dist/itk/web-workers/ITKConfig.d.ts +8 -0
  68. package/dist/itk/web-workers/ITKConfig.js +1 -0
  69. package/dist/itk/web-workers/RunPipelineInput.d.ts +10 -0
  70. package/dist/itk/web-workers/RunPipelineInput.js +1 -0
  71. package/dist/itk/web-workers/WebWorkerInput.d.ts +6 -0
  72. package/dist/itk/web-workers/WebWorkerInput.js +1 -0
  73. package/dist/itk/web-workers/bundles/pipeline.worker.js +1 -0
  74. package/dist/itk/web-workers/loadImageIOPipelineModule.d.ts +4 -0
  75. package/dist/itk/web-workers/loadImageIOPipelineModule.js +1 -0
  76. package/dist/itk/web-workers/loadMeshIOPipelineModule.d.ts +4 -0
  77. package/dist/itk/web-workers/loadMeshIOPipelineModule.js +1 -0
  78. package/dist/itk/web-workers/loadPipelineModule.d.ts +3 -0
  79. package/dist/itk/web-workers/loadPipelineModule.js +1 -0
  80. package/dist/itk/web-workers/min-bundles/pipeline.worker.js +3 -0
  81. package/dist/itk/web-workers/pipeline.worker.d.ts +1 -0
  82. package/dist/itk/web-workers/pipeline.worker.js +1 -0
  83. package/dist/itk/web-workers/runPipeline.d.ts +5 -0
  84. package/dist/itk/web-workers/runPipeline.js +1 -0
  85. package/dist/js/23.be4d694e.js +21 -0
  86. package/dist/js/23.be4d694e.js.map +1 -0
  87. package/dist/js/385.51ca48a2.js +2 -0
  88. package/dist/js/385.51ca48a2.js.map +1 -0
  89. package/dist/js/422.c64a6aa7.js +2 -0
  90. package/dist/js/422.c64a6aa7.js.map +1 -0
  91. package/dist/js/979.c4823352.js +2 -0
  92. package/dist/js/979.c4823352.js.map +1 -0
  93. package/dist/js/app.81e49d9a.js +2 -0
  94. package/dist/js/app.81e49d9a.js.map +1 -0
  95. package/dist/js/chunk-vendors.0ab48f8d.js +33 -0
  96. package/dist/js/chunk-vendors.0ab48f8d.js.map +1 -0
  97. package/{public → dist}/pvm-sample.png +0 -0
  98. package/package.json +3 -2
  99. package/.browserslistrc +0 -4
  100. package/.editorconfig +0 -6
  101. package/.env +0 -6
  102. package/.eslintrc.js +0 -109
  103. package/.gitattributes +0 -1
  104. package/.github/workflows/checks.yml +0 -16
  105. package/.github/workflows/publish.yml +0 -52
  106. package/.prettierignore +0 -5
  107. package/CONTRIBUTING.md +0 -29
  108. package/babel.config.js +0 -3
  109. package/documentation/config.js +0 -15
  110. package/documentation/content/KWVolViewLogo.png +0 -0
  111. package/documentation/content/KWVolViewLogo.svg +0 -35
  112. package/documentation/content/VolViewLogo.png +0 -0
  113. package/documentation/content/VolViewLogo.svg +0 -22
  114. package/documentation/content/doc/index.md +0 -64
  115. package/documentation/content/doc/loading_data.md +0 -30
  116. package/documentation/content/doc/mouse_controls.md +0 -34
  117. package/documentation/content/doc/quick_start_guide.md +0 -75
  118. package/documentation/content/doc/rendering.md +0 -27
  119. package/documentation/content/doc/state_files.md +0 -18
  120. package/documentation/content/doc/toolbar.md +0 -20
  121. package/documentation/content/doc/welcome_screen.md +0 -23
  122. package/documentation/content/gallery/01-volview-welcome-notes.jpg +0 -0
  123. package/documentation/content/gallery/01-volview-welcome.jpg +0 -0
  124. package/documentation/content/gallery/02-volview-about.jpg +0 -0
  125. package/documentation/content/gallery/02-volview-notifications.jpg +0 -0
  126. package/documentation/content/gallery/02-volview-settings.jpg +0 -0
  127. package/documentation/content/gallery/03-volview-sample-datasets.jpg +0 -0
  128. package/documentation/content/gallery/04-volview-active-data.jpg +0 -0
  129. package/documentation/content/gallery/05-volview-select-data-to-delete.jpg +0 -0
  130. package/documentation/content/gallery/06-volview-corner-annotation.jpg +0 -0
  131. package/documentation/content/gallery/07-volview-layout-notes.jpg +0 -0
  132. package/documentation/content/gallery/07-volview-layout.jpg +0 -0
  133. package/documentation/content/gallery/09-volview-layout-3DPrimary.jpg +0 -0
  134. package/documentation/content/gallery/10-volview-wl-pan-zoom-notes.jpg +0 -0
  135. package/documentation/content/gallery/10-volview-wl-pan-zoom.jpg +0 -0
  136. package/documentation/content/gallery/11-volview-paint-notes.jpg +0 -0
  137. package/documentation/content/gallery/11-volview-paint.jpg +0 -0
  138. package/documentation/content/gallery/12-volview-paint-options.jpg +0 -0
  139. package/documentation/content/gallery/13-volview-crop-notes.jpg +0 -0
  140. package/documentation/content/gallery/13-volview-crop.jpg +0 -0
  141. package/documentation/content/gallery/14-volview-ruler.jpg +0 -0
  142. package/documentation/content/gallery/15-volview-crosshairs.jpg +0 -0
  143. package/documentation/content/gallery/16-volview-rendering.jpg +0 -0
  144. package/documentation/content/gallery/17-volview-colormap-notes.jpg +0 -0
  145. package/documentation/content/gallery/17-volview-colormap.jpg +0 -0
  146. package/documentation/content/gallery/17-volview-opacity-notes.jpg +0 -0
  147. package/documentation/content/gallery/17-volview-opacity.jpg +0 -0
  148. package/documentation/content/gallery/17-volview-opacity2.jpg +0 -0
  149. package/documentation/content/gallery/18-volview-presets.jpg +0 -0
  150. package/documentation/content/gallery/19-volview-color.jpg +0 -0
  151. package/documentation/content/gallery/19-volview-color2.jpg +0 -0
  152. package/documentation/content/gallery/20-volview-lightfollowcamera0.jpg +0 -0
  153. package/documentation/content/gallery/20-volview-lightfollowcamera1.jpg +0 -0
  154. package/documentation/content/gallery/20-volview-lightfollowcamera2.jpg +0 -0
  155. package/documentation/content/gallery/20-volview-lightfollowcamera3.jpg +0 -0
  156. package/documentation/content/gallery/21-volview-hybrid-final.jpg +0 -0
  157. package/documentation/content/gallery/21-volview-hybrid0.0.jpg +0 -0
  158. package/documentation/content/gallery/21-volview-hybrid0.5.jpg +0 -0
  159. package/documentation/content/gallery/21-volview-hybrid1.0.jpg +0 -0
  160. package/documentation/content/gallery/LocalAmbientOcclusion.jpg +0 -0
  161. package/documentation/content/gallery/Notes.pptx +0 -0
  162. package/documentation/content/gallery/VolView-Overview.jpg +0 -0
  163. package/documentation/content/gallery/index.md +0 -53
  164. package/documentation/content/icon/favicon-16x16.png +0 -0
  165. package/documentation/content/icon/favicon-196x196.png +0 -0
  166. package/documentation/content/icon/favicon-32x32.png +0 -0
  167. package/documentation/content/icon/favicon-96x96.png +0 -0
  168. package/documentation/content/index.pug +0 -43
  169. package/documentation/content/logo.png +0 -0
  170. package/documentation/content/logo.svg +0 -20
  171. package/documentation/data/menu.yml +0 -3
  172. package/documentation/themes/navy/layout/partial/footer.swig +0 -22
  173. package/documentation/tpl/__en__ +0 -31
  174. package/documentation/tpl/__sidebar__ +0 -11
  175. package/patches/jsdom-global+3.0.2.patch +0 -12
  176. package/patches/vue-toastification+1.7.14.patch +0 -41
  177. package/patches/vuetify+2.6.10.patch +0 -13
  178. package/prettier.config.js +0 -9
  179. package/public/index.html +0 -28
  180. package/server/helper.py +0 -147
  181. package/server/host.js +0 -134
  182. package/server/serialize.js +0 -111
  183. package/server/serialize.py +0 -203
  184. package/server/server.py +0 -84
  185. package/server/test.py +0 -17
  186. package/src/assets/logo.png +0 -0
  187. package/src/assets/logo.svg +0 -20
  188. package/src/assets/samples/3DUS-Fetus.jpg +0 -0
  189. package/src/assets/samples/CTA-Head_and_Neck.jpg +0 -0
  190. package/src/assets/samples/MRA-Head_and_Neck.jpg +0 -0
  191. package/src/assets/samples/MRI-Cardiac.jpg +0 -0
  192. package/src/assets/samples/MRI-PROSTATEx.jpg +0 -0
  193. package/src/components/AboutBox.vue +0 -157
  194. package/src/components/AiModule.vue +0 -60
  195. package/src/components/AnnotationsModule.vue +0 -37
  196. package/src/components/App.vue +0 -539
  197. package/src/components/ColorFunctionSlider.vue +0 -181
  198. package/src/components/DataBrowser.vue +0 -173
  199. package/src/components/DragAndDrop.vue +0 -107
  200. package/src/components/GroupableItem.vue +0 -30
  201. package/src/components/ImageDataBrowser.vue +0 -186
  202. package/src/components/ImageListCard.vue +0 -114
  203. package/src/components/ItemGroup.vue +0 -74
  204. package/src/components/LabelmapList.vue +0 -36
  205. package/src/components/LayoutGrid.vue +0 -96
  206. package/src/components/MeasurementsList.vue +0 -134
  207. package/src/components/MessageCenter.vue +0 -189
  208. package/src/components/MessageItem.vue +0 -83
  209. package/src/components/MessageNotificationContent.vue +0 -20
  210. package/src/components/MessageNotifications.vue +0 -84
  211. package/src/components/ModelBrowser.vue +0 -83
  212. package/src/components/ModulePanel.vue +0 -137
  213. package/src/components/PaintControls.vue +0 -174
  214. package/src/components/PatientBrowser.vue +0 -280
  215. package/src/components/PatientStudyVolumeBrowser.vue +0 -325
  216. package/src/components/RenderingModule.vue +0 -49
  217. package/src/components/ResizableNavDrawer.vue +0 -158
  218. package/src/components/SampleDataBrowser.vue +0 -198
  219. package/src/components/SaveSession.vue +0 -57
  220. package/src/components/Settings.vue +0 -35
  221. package/src/components/SliceSlider.vue +0 -182
  222. package/src/components/SpleenModule.vue +0 -101
  223. package/src/components/ToolButton.vue +0 -58
  224. package/src/components/ToolStrip.vue +0 -186
  225. package/src/components/ViewOverlayGrid.vue +0 -84
  226. package/src/components/VolumePresets.vue +0 -165
  227. package/src/components/VolumeProperties.vue +0 -171
  228. package/src/components/VolumeRendering.vue +0 -365
  229. package/src/components/VtkThreeView.vue +0 -512
  230. package/src/components/VtkTwoView.vue +0 -665
  231. package/src/components/__tests__/ResizableNavDrawer.spec.js +0 -32
  232. package/src/components/__tests__/ToolButton.spec.js +0 -46
  233. package/src/components/icons/KitwareLogoIcon.vue +0 -54
  234. package/src/components/icons/VolViewFullLogo.vue +0 -139
  235. package/src/components/icons/VolViewLogo.vue +0 -78
  236. package/src/components/styles/utils.css +0 -16
  237. package/src/components/styles/vtk-view.css +0 -116
  238. package/src/components/tools/CropTool.vue +0 -61
  239. package/src/components/tools/CrosshairsTool.vue +0 -93
  240. package/src/components/tools/MouseManipulatorTool.vue +0 -108
  241. package/src/components/tools/PaintTool.vue +0 -54
  242. package/src/components/tools/PanTool.vue +0 -35
  243. package/src/components/tools/RulerTool.vue +0 -202
  244. package/src/components/tools/SliceScrollTool.vue +0 -123
  245. package/src/components/tools/WindowLevelTool.vue +0 -191
  246. package/src/components/tools/ZoomTool.vue +0 -35
  247. package/src/components/tools/crop/Crop2D.vue +0 -367
  248. package/src/components/tools/crop/Crop2DLineHandle.vue +0 -103
  249. package/src/components/tools/crop/Crop3D.vue +0 -192
  250. package/src/components/tools/crop/CropControls.vue +0 -38
  251. package/src/components/tools/crop/types.ts +0 -12
  252. package/src/components/tools/crosshairs/CrosshairSVG2D.vue +0 -125
  253. package/src/components/tools/crosshairs/CrosshairsWidget2D.vue +0 -100
  254. package/src/components/tools/paint/PaintWidget2D.vue +0 -192
  255. package/src/components/tools/ruler/RulerSVG2D.vue +0 -181
  256. package/src/components/tools/ruler/RulerWidget2D.vue +0 -154
  257. package/src/composables/__tests__/useDoubleRecord.spec.ts +0 -57
  258. package/src/composables/__tests__/useOrientationLabels.spec.ts +0 -29
  259. package/src/composables/isViewAnimating.ts +0 -25
  260. package/src/composables/manageVTKSubscription.ts +0 -6
  261. package/src/composables/onProxyManagerEvent.ts +0 -50
  262. package/src/composables/proxyManager.ts +0 -13
  263. package/src/composables/sync/__tests__/createPrimitiveSyncContext.spec.ts +0 -41
  264. package/src/composables/sync/__tests__/useWindowingSync.spec.ts +0 -51
  265. package/src/composables/sync/createPrimitiveSyncContext.ts +0 -83
  266. package/src/composables/sync/useWindowingSync.ts +0 -48
  267. package/src/composables/useAppLoadingNotifications.ts +0 -73
  268. package/src/composables/useCameraOrientation.ts +0 -34
  269. package/src/composables/useCurrentImage.ts +0 -74
  270. package/src/composables/useCurrentSlice.ts +0 -43
  271. package/src/composables/useDoubleRecord.ts +0 -77
  272. package/src/composables/useEventListener.ts +0 -26
  273. package/src/composables/useGlobalErrorHook.ts +0 -18
  274. package/src/composables/useMultiSelection.ts +0 -29
  275. package/src/composables/useOrientationLabels.ts +0 -62
  276. package/src/composables/usePanels.ts +0 -42
  277. package/src/composables/usePersistCameraConfig.ts +0 -138
  278. package/src/composables/useResizeObserver.ts +0 -37
  279. package/src/composables/useResizeToFit.ts +0 -50
  280. package/src/composables/useSceneBuilder.ts +0 -96
  281. package/src/composables/useToast.js +0 -11
  282. package/src/composables/useVTKCallback.ts +0 -33
  283. package/src/composables/useVTKWorldToDisplay.ts +0 -141
  284. package/src/composables/useViewProxy.ts +0 -87
  285. package/src/composables/useVolumeThumbnailing.ts +0 -173
  286. package/src/composables/useWebGLWatchdog.ts +0 -32
  287. package/src/composables/useWidgetManager.ts +0 -41
  288. package/src/config.ts +0 -182
  289. package/src/constants.ts +0 -38
  290. package/src/core/id.ts +0 -18
  291. package/src/core/provider.ts +0 -31
  292. package/src/core/proxies.ts +0 -90
  293. package/src/core/thumbnailers/__tests__/vtk-image.spec.ts +0 -58
  294. package/src/core/thumbnailers/index.ts +0 -5
  295. package/src/core/thumbnailers/volume-thumbnailer.ts +0 -130
  296. package/src/core/thumbnailers/vtk-image.ts +0 -142
  297. package/src/core/tools/__tests__/paint.spec.ts +0 -101
  298. package/src/core/tools/__tests__/ruler.spec.ts +0 -73
  299. package/src/core/tools/paint/brush.ts +0 -20
  300. package/src/core/tools/paint/ellipse-brush.ts +0 -96
  301. package/src/core/tools/paint/index.ts +0 -141
  302. package/src/core/tools/ruler.ts +0 -149
  303. package/src/global.d.ts +0 -24
  304. package/src/io/__tests__/io.spec.ts +0 -26
  305. package/src/io/dicom.ts +0 -187
  306. package/src/io/index.ts +0 -11
  307. package/src/io/io.ts +0 -157
  308. package/src/io/itk/itkConfig.js +0 -8
  309. package/src/io/itk-dicom/dicom.cpp +0 -327
  310. package/src/io/itk-dicom/web-build/dicom.js +0 -16
  311. package/src/io/itk-dicom/web-build/dicom.umd.js +0 -21
  312. package/src/io/manifest.ts +0 -30
  313. package/src/io/readers.ts +0 -36
  314. package/src/io/state-file/index.ts +0 -170
  315. package/src/io/state-file/schema.ts +0 -277
  316. package/src/io/state-file/utils.ts +0 -33
  317. package/src/io/types.ts +0 -4
  318. package/src/io/vtk/async.reader.worker.ts +0 -50
  319. package/src/io/vtk/async.ts +0 -58
  320. package/src/io/vtk/async.writer.worker.ts +0 -46
  321. package/src/io/vtk/common.ts +0 -30
  322. package/src/io/zip.ts +0 -31
  323. package/src/main.js +0 -66
  324. package/src/main.ts +0 -1
  325. package/src/plugins/vuetify.js +0 -25
  326. package/src/shims-itk.d.ts +0 -67
  327. package/src/shims-misc.d.ts +0 -4
  328. package/src/shims-tsx.d.ts +0 -13
  329. package/src/shims-vtk.d.ts +0 -1042
  330. package/src/shims-vue.d.ts +0 -5
  331. package/src/store/__tests__/datasets.spec.ts +0 -75
  332. package/src/store/__tests__/messages.spec.ts +0 -74
  333. package/src/store/__tests__/rulers.spec.ts +0 -77
  334. package/src/store/__tests__/view-configs.spec.ts +0 -37
  335. package/src/store/datasets-dicom.ts +0 -398
  336. package/src/store/datasets-files.ts +0 -35
  337. package/src/store/datasets-images.ts +0 -118
  338. package/src/store/datasets-labelmaps.ts +0 -136
  339. package/src/store/datasets-models.ts +0 -25
  340. package/src/store/datasets.ts +0 -341
  341. package/src/store/messages.ts +0 -144
  342. package/src/store/tools/crop.ts +0 -136
  343. package/src/store/tools/crosshairs.ts +0 -131
  344. package/src/store/tools/index.ts +0 -95
  345. package/src/store/tools/paint.ts +0 -191
  346. package/src/store/tools/rulers.ts +0 -305
  347. package/src/store/tools/types.ts +0 -54
  348. package/src/store/view-configs/camera.ts +0 -51
  349. package/src/store/view-configs/common.ts +0 -61
  350. package/src/store/view-configs/slicing.ts +0 -86
  351. package/src/store/view-configs/types.ts +0 -39
  352. package/src/store/view-configs/volume-coloring.ts +0 -193
  353. package/src/store/view-configs/windowing.ts +0 -69
  354. package/src/store/view-configs.ts +0 -78
  355. package/src/store/views.ts +0 -130
  356. package/src/types/index.ts +0 -16
  357. package/src/types/layout.ts +0 -10
  358. package/src/types/lps.ts +0 -40
  359. package/src/types/views.ts +0 -65
  360. package/src/types/vtk-types.ts +0 -29
  361. package/src/utils/__tests__/lps.spec.ts +0 -102
  362. package/src/utils/color.ts +0 -23
  363. package/src/utils/errors.js +0 -3
  364. package/src/utils/fetch.ts +0 -101
  365. package/src/utils/hacks.ts +0 -14
  366. package/src/utils/index.ts +0 -83
  367. package/src/utils/lps.ts +0 -129
  368. package/src/utils/manipulators.ts +0 -35
  369. package/src/utils/promise-worker.ts +0 -45
  370. package/src/utils/vtk-helpers.ts +0 -215
  371. package/src/utils/workerHandler.js +0 -42
  372. package/src/vtk/ColorMaps.ts +0 -72
  373. package/src/vtk/CrosshairsWidget/behavior.ts +0 -112
  374. package/src/vtk/CrosshairsWidget/index.d.ts +0 -22
  375. package/src/vtk/CrosshairsWidget/index.js +0 -73
  376. package/src/vtk/CrosshairsWidget/state.ts +0 -51
  377. package/src/vtk/IJKSliceRepresentationProxy/index.d.ts +0 -9
  378. package/src/vtk/IJKSliceRepresentationProxy/index.js +0 -59
  379. package/src/vtk/LPSView2DProxy/index.d.ts +0 -18
  380. package/src/vtk/LPSView2DProxy/index.js +0 -89
  381. package/src/vtk/LPSView3DProxy/index.d.ts +0 -16
  382. package/src/vtk/LPSView3DProxy/index.js +0 -78
  383. package/src/vtk/LabelMap/index.d.ts +0 -16
  384. package/src/vtk/LabelMap/index.js +0 -49
  385. package/src/vtk/LabelMapSliceRepProxy/index.d.ts +0 -6
  386. package/src/vtk/LabelMapSliceRepProxy/index.js +0 -104
  387. package/src/vtk/MedicalColorPresets.json +0 -1448
  388. package/src/vtk/PaintBrushContextRepresentation/index.js +0 -191
  389. package/src/vtk/PaintWidget/behavior.ts +0 -101
  390. package/src/vtk/PaintWidget/index.d.ts +0 -28
  391. package/src/vtk/PaintWidget/index.js +0 -56
  392. package/src/vtk/PaintWidget/state.ts +0 -41
  393. package/src/vtk/PiecewiseWidget/index.js +0 -203
  394. package/src/vtk/RulerWidget/behavior.ts +0 -185
  395. package/src/vtk/RulerWidget/index.d.ts +0 -25
  396. package/src/vtk/RulerWidget/index.js +0 -79
  397. package/src/vtk/RulerWidget/state.ts +0 -63
  398. package/src/vtk/TreJsonConverter/index.js +0 -150
  399. package/src/vtk/proxy.js +0 -66
  400. package/src/vtk/proxyUtils.js +0 -16
  401. package/src/vtk/webvr-empty.js +0 -1
  402. package/tests/testUtils.js +0 -12
  403. package/tsconfig.json +0 -46
  404. package/vue.config.js +0 -86
@@ -1,198 +0,0 @@
1
- <script lang="ts">
2
- import {
3
- set,
4
- del,
5
- defineComponent,
6
- reactive,
7
- computed,
8
- } from '@vue/composition-api';
9
- import ImageListCard from '@/src/components/ImageListCard.vue';
10
- import { SAMPLE_DATA } from '../config';
11
- import {
12
- convertSuccessResultToDataSelection,
13
- useDatasetStore,
14
- } from '../store/datasets';
15
- import { useMessageStore } from '../store/messages';
16
- import { SampleDataset } from '../types';
17
- import { useImageStore } from '../store/datasets-images';
18
- import { useDICOMStore } from '../store/datasets-dicom';
19
- import { fetchFile } from '../utils/fetch';
20
-
21
- enum ProgressState {
22
- Pending,
23
- Error,
24
- Done,
25
- }
26
-
27
- interface Progress {
28
- [name: string]: {
29
- state: ProgressState;
30
- progress: number;
31
- };
32
- }
33
-
34
- export default defineComponent({
35
- components: {
36
- ImageListCard,
37
- },
38
- setup() {
39
- const datasetStore = useDatasetStore();
40
- const status = reactive<{ progress: Progress }>({
41
- progress: {},
42
- });
43
- // URL -> data ID
44
- const loaded = reactive<{
45
- urlToID: Record<string, string>;
46
- idToURL: Record<string, string>;
47
- }>({
48
- urlToID: {},
49
- idToURL: {},
50
- });
51
-
52
- const clearLoadedStatus = (id: string) => {
53
- const url = loaded.idToURL[id];
54
- if (url) {
55
- del(loaded.idToURL, id);
56
- del(loaded.urlToID, url);
57
- }
58
- };
59
-
60
- const imageStore = useImageStore();
61
- imageStore.$onAction(({ name, args, after }) => {
62
- if (name === 'deleteData') {
63
- after(() => {
64
- const [id] = args;
65
- clearLoadedStatus(id as string);
66
- });
67
- }
68
- });
69
-
70
- const dicomStore = useDICOMStore();
71
- dicomStore.$onAction(({ name, args, after }) => {
72
- if (name === 'deleteVolume') {
73
- after(() => {
74
- const [key] = args;
75
- clearLoadedStatus(key as string);
76
- });
77
- }
78
- });
79
-
80
- async function downloadSample(sample: SampleDataset) {
81
- const progress = (percent: number) => {
82
- // TODO set/del doesn't exist in vue 3
83
- set(status.progress, sample.name, {
84
- state: ProgressState.Pending,
85
- progress: percent * 100,
86
- });
87
- };
88
- try {
89
- progress(Infinity);
90
-
91
- const sampleFile = await fetchFile(sample.url, sample.filename, {
92
- progress,
93
- });
94
- status.progress[sample.name].state = ProgressState.Done;
95
-
96
- if (sampleFile) {
97
- const [loadResult] = await datasetStore.loadFiles([sampleFile]);
98
- if (loadResult?.loaded) {
99
- const selection = convertSuccessResultToDataSelection(loadResult);
100
- if (selection) {
101
- const id =
102
- selection.type === 'image'
103
- ? selection.dataID
104
- : selection.volumeKey;
105
- set(loaded.idToURL, id, sample.url);
106
- set(loaded.urlToID, sample.url, id);
107
- }
108
- datasetStore.setPrimarySelection(selection);
109
- }
110
- }
111
- } catch (error) {
112
- status.progress[sample.name].state = ProgressState.Error;
113
- const messageStore = useMessageStore();
114
- messageStore.addError('Failed to load sample data', error as Error);
115
- } finally {
116
- del(status.progress, sample.name);
117
- }
118
- }
119
-
120
- const samples = computed(() =>
121
- SAMPLE_DATA.map((sample) => {
122
- const isDone =
123
- status.progress[sample.name]?.state === ProgressState.Done;
124
- const isError =
125
- status.progress[sample.name]?.state === ProgressState.Error;
126
- const isLoaded = !!loaded.urlToID[sample.url];
127
- const progress =
128
- isDone || isLoaded
129
- ? 100
130
- : Math.floor(status.progress[sample.name]?.progress);
131
- return {
132
- ...sample,
133
- isDownloading: sample.name in status.progress,
134
- isDone,
135
- isError,
136
- isLoaded,
137
- indeterminate: progress === Infinity,
138
- progress,
139
- };
140
- })
141
- );
142
-
143
- return {
144
- samples,
145
- downloadSample,
146
- };
147
- },
148
- });
149
- </script>
150
-
151
- <template>
152
- <div>
153
- <image-list-card
154
- v-for="sample in samples"
155
- :disabled="sample.isDownloading || sample.isLoaded"
156
- :key="sample.name"
157
- :title="sample.name"
158
- :image-url="sample.image"
159
- :image-size="100"
160
- @click="downloadSample(sample)"
161
- >
162
- <div class="body-2 font-weight-bold text-no-wrap text-truncate">
163
- {{ sample.name }}
164
- </div>
165
- <div class="body-2 mt-2">{{ sample.description }}</div>
166
- <template
167
- v-slot:image-overlay
168
- v-if="sample.isDownloading || sample.isLoaded"
169
- >
170
- <v-row class="fill-height ma-0" align="center" justify="center">
171
- <v-progress-circular
172
- color="white"
173
- :indeterminate="sample.indeterminate && !sample.isDone"
174
- :value="sample.progress"
175
- >
176
- <v-icon v-if="sample.isDone || sample.isLoaded" small color="white"
177
- >mdi-check</v-icon
178
- >
179
- <v-icon v-else-if="sample.isError" small color="white">
180
- mdi-alert-circle
181
- </v-icon>
182
- <span v-else-if="!sample.indeterminate" class="caption text--white">
183
- {{ sample.progress }}
184
- </span>
185
- </v-progress-circular>
186
- </v-row>
187
- </template>
188
- </image-list-card>
189
- </div>
190
- </template>
191
-
192
- <style>
193
- /* The transition animation causes the progress bar to load slowly
194
- when the value is updated rapidly. */
195
- .v-progress-circular__overlay {
196
- transition: unset;
197
- }
198
- </style>
@@ -1,57 +0,0 @@
1
- <template>
2
- <v-card>
3
- <v-card-title>
4
- Saving Session State
5
- <v-spacer />
6
- <v-btn icon @click="$emit('close')"><v-icon>mdi-close</v-icon></v-btn>
7
- </v-card-title>
8
- <v-card-text>
9
- <v-form v-model="valid">
10
- <v-text-field
11
- v-on:keyup.enter="saveSession"
12
- v-model="fileName"
13
- hint="The filename to use for the session state file."
14
- label="Session State Filename"
15
- :rules="[validFileName]"
16
- />
17
- </v-form>
18
- </v-card-text>
19
- <v-card-actions>
20
- <v-spacer />
21
- <v-btn color="secondary" @click="saveSession" :disabled="!valid">
22
- <v-icon class="mr-2">mdi-content-save-all</v-icon>
23
- <span>Save</span>
24
- </v-btn>
25
- </v-card-actions>
26
- </v-card>
27
- </template>
28
-
29
- <script lang="ts">
30
- import { defineComponent, ref } from '@vue/composition-api';
31
- import { save } from '../io/state-file';
32
-
33
- const DEFAULT_FILENAME = 'session.volview.zip';
34
-
35
- export default defineComponent({
36
- setup(props, { emit }) {
37
- const fileName = ref(DEFAULT_FILENAME);
38
- const valid = ref(true);
39
-
40
- async function saveSession() {
41
- await save(fileName.value);
42
- emit('close');
43
- }
44
-
45
- function validFileName(name: string) {
46
- return name.trim().length > 0 || 'Required';
47
- }
48
-
49
- return {
50
- saveSession,
51
- fileName,
52
- validFileName,
53
- valid,
54
- };
55
- },
56
- });
57
- </script>
@@ -1,35 +0,0 @@
1
- <template>
2
- <v-card>
3
- <v-card-title>
4
- Settings
5
- <v-spacer />
6
- <v-btn icon @click="$emit('close')"><v-icon>mdi-close</v-icon></v-btn>
7
- </v-card-title>
8
- <v-card-text>
9
- <v-switch label="Enable Dark Theme" v-model="dark"></v-switch>
10
- </v-card-text>
11
- </v-card>
12
- </template>
13
-
14
- <script lang="ts">
15
- import { defineComponent, watchEffect } from '@vue/composition-api';
16
- import { useLocalStorage } from '@vueuse/core';
17
- import vuetify from '../plugins/vuetify';
18
-
19
- export default defineComponent({
20
- setup() {
21
- const store = useLocalStorage<boolean>(
22
- 'dark',
23
- vuetify.framework.theme.dark ?? true
24
- );
25
-
26
- watchEffect(() => {
27
- vuetify.framework.theme.dark = store.value;
28
- });
29
-
30
- return {
31
- dark: store,
32
- };
33
- },
34
- });
35
- </script>
@@ -1,182 +0,0 @@
1
- <template>
2
- <div
3
- class="slice-slider"
4
- ref="handleContainer"
5
- @pointerdown="onDragStart"
6
- @pointermove="onDragMove"
7
- @pointerup="onDragEnd"
8
- @pointercancel="onDragEnd"
9
- @contextmenu="$event.preventDefault()"
10
- >
11
- <div class="slice-slider-track" />
12
- <div
13
- class="slice-slider-handle"
14
- ref="handle"
15
- :style="{
16
- height: `${handleHeight}px`,
17
- transform: `translate3d(0, ${handlePosition}px, 0)`,
18
- }"
19
- />
20
- </div>
21
- </template>
22
-
23
- <script>
24
- function getYOffsetFromTransform(matStr) {
25
- if (!matStr || matStr === 'none') {
26
- return 0;
27
- }
28
- const values = matStr
29
- .match(/matrix(?:3d)?\((.+)\)/)[1]
30
- .split(',')
31
- .map((v) => Number(v));
32
- const is3D = matStr.includes('3d');
33
- return is3D ? values[13] : values[5];
34
- }
35
-
36
- export default {
37
- props: {
38
- slice: {
39
- type: Number,
40
- default: 0,
41
- },
42
- min: {
43
- type: Number,
44
- required: true,
45
- },
46
- max: {
47
- type: Number,
48
- required: true,
49
- },
50
- step: {
51
- type: Number,
52
- required: true,
53
- },
54
- handleHeight: {
55
- type: Number,
56
- default: 20,
57
- },
58
- },
59
-
60
- data() {
61
- return {
62
- maxHandlePos: 0,
63
- dragging: false,
64
- initialHandlePos: 0,
65
- initialMousePosY: 0,
66
- yOffset: 0,
67
- };
68
- },
69
-
70
- computed: {
71
- handlePosition() {
72
- const range = this.max - this.min <= 0 ? 1 : this.max - this.min;
73
- const pos = this.maxHandlePos * ((this.slice - this.min) / range);
74
- return this.dragging ? this.draggingHandlePos : pos;
75
- },
76
- draggingHandlePos() {
77
- return Math.min(
78
- Math.max(0, this.initialHandlePos + this.yOffset),
79
- this.maxHandlePos
80
- );
81
- },
82
- },
83
-
84
- mounted() {
85
- this.updateMaxHandlePos();
86
- this.resizeObserver = new ResizeObserver((entries) => {
87
- if (entries.length === 1) {
88
- this.updateMaxHandlePos();
89
- }
90
- });
91
- this.resizeObserver.observe(this.$refs.handleContainer);
92
- },
93
-
94
- beforeDestroy() {
95
- this.resizeObserver.disconnect();
96
- },
97
-
98
- methods: {
99
- updateMaxHandlePos() {
100
- this.maxHandlePos =
101
- this.$refs.handleContainer.clientHeight - this.handleHeight;
102
- },
103
-
104
- onDragStart(ev) {
105
- ev.preventDefault();
106
-
107
- this.dragging = true;
108
- this.initialMousePosY = ev.pageY;
109
-
110
- if (ev.target === this.$refs.handle) {
111
- const handleStyles = window.getComputedStyle(this.$refs.handle);
112
- this.initialHandlePos = getYOffsetFromTransform(handleStyles.transform);
113
- } else {
114
- // move handle to mouse pos
115
- const { y } = this.$refs.handleContainer.getBoundingClientRect();
116
- this.initialHandlePos = Math.max(
117
- 0,
118
- Math.min(this.maxHandlePos, ev.pageY - y - this.handleHeight / 2)
119
- );
120
- const newSlice = this.getNearestSlice(this.initialHandlePos);
121
- this.$emit('input', newSlice);
122
- }
123
-
124
- this.yOffset = 0;
125
-
126
- this.$refs.handleContainer.setPointerCapture(ev.pointerId);
127
- },
128
-
129
- onDragMove(ev) {
130
- if (!this.$refs.handleContainer.hasPointerCapture(ev.pointerId)) return;
131
- ev.preventDefault();
132
-
133
- this.yOffset = ev.pageY - this.initialMousePosY;
134
- const slice = this.getNearestSlice(this.handlePosition);
135
- this.$emit('input', slice);
136
- },
137
-
138
- onDragEnd(ev) {
139
- if (!this.$refs.handleContainer.hasPointerCapture(ev.pointerId)) return;
140
- ev.preventDefault();
141
- this.$refs.handleContainer.releasePointerCapture(ev.pointerId);
142
-
143
- this.dragging = false;
144
- const slice = this.getNearestSlice(this.handlePosition);
145
- this.$emit('input', slice);
146
- },
147
-
148
- getNearestSlice(pos) {
149
- const sliceEstimate = pos / this.maxHandlePos;
150
- const frac = sliceEstimate * (this.max - this.min) + this.min;
151
- return Math.round(frac / this.step) * this.step;
152
- },
153
- },
154
- };
155
- </script>
156
-
157
- <style scoped>
158
- .slice-slider {
159
- touch-action: none;
160
- }
161
-
162
- .slice-slider-handle {
163
- position: relative;
164
- width: 100%;
165
- background: #ccc;
166
- box-sizing: border-box;
167
- border-radius: 3px;
168
- border: 1px solid #999;
169
- }
170
-
171
- .slice-slider-track {
172
- position: absolute;
173
- margin: 0 auto;
174
- top: 8px;
175
- left: 0;
176
- right: 0;
177
- bottom: 8px;
178
- width: 1px;
179
- border: 1px solid #888;
180
- border-radius: 2px;
181
- }
182
- </style>
@@ -1,101 +0,0 @@
1
- <template>
2
- <div id="spleen-module" class="mx-2 height-100">
3
- <v-btn
4
- :disabled="!canSegment || loading"
5
- :loading="loading"
6
- @click="segmentCurrentImage"
7
- >
8
- Segment
9
- </v-btn>
10
- </div>
11
- </template>
12
-
13
- <script>
14
- import { computed, defineComponent, ref, unref } from '@vue/composition-api';
15
-
16
- import { useStore, useComputedState } from '@/src/composables/store';
17
- import { useWidgetProvider } from '@/src/composables/widgetProvider';
18
- import HostConnection from '@/server/host';
19
- import vtkLabelMap from '@/src/vtk/LabelMap';
20
- import { DEFAULT_LABELMAP_COLORS } from '@/src/constants';
21
-
22
- function copyImageToLabelMap(imageData) {
23
- const labelmap = vtkLabelMap.newInstance(
24
- imageData.get('spacing', 'origin', 'direction')
25
- );
26
- labelmap.setDimensions(imageData.getDimensions());
27
- labelmap.getPointData().setScalars(imageData.getPointData().getScalars());
28
- labelmap.computeTransforms();
29
-
30
- labelmap.setColorMap(DEFAULT_LABELMAP_COLORS);
31
- return labelmap;
32
- }
33
-
34
- export default defineComponent({
35
- name: 'SpleenModule',
36
- setup() {
37
- const loading = ref(false);
38
-
39
- const store = useStore();
40
- const widgetProvider = useWidgetProvider();
41
-
42
- const { currentImageId, currentImage } = useComputedState({
43
- currentImageId(state) {
44
- return state.selectedBaseImage;
45
- },
46
- currentImage(state) {
47
- return state.data.vtkCache[state.selectedBaseImage] ?? null;
48
- },
49
- });
50
-
51
- const canSegment = computed(() => Boolean(currentImage.value));
52
-
53
- const connection = new HostConnection('ws://localhost:8888/ws');
54
- connection.connect();
55
-
56
- async function segmentCurrentImage() {
57
- const curImage = unref(currentImage);
58
- const curImageId = unref(currentImageId);
59
- if (curImage) {
60
- loading.value = true;
61
-
62
- const result = await connection.call('run', currentImage.value, 44);
63
- console.log('got result:', result);
64
- const { segmentation, measurements } = result;
65
-
66
- const segMap = copyImageToLabelMap(segmentation);
67
- await store.dispatch('importLabelMap', {
68
- name: 'whodis',
69
- labelMap: segMap,
70
- parent: curImageId,
71
- });
72
-
73
- measurements.measurements.map((mm) => {
74
- const rulerState = {
75
- version: '1.0',
76
- type: 'ruler',
77
- name: mm.name,
78
- axis: 'IJK'[mm.axis.findIndex((v) => v === 1)],
79
- slice: mm.slice,
80
- system: mm.coordinate_system,
81
- point1: mm.point1,
82
- point2: mm.point2,
83
- };
84
-
85
- return widgetProvider.createWidget('Ruler', {
86
- initialState: rulerState,
87
- });
88
- });
89
-
90
- loading.value = false;
91
- }
92
- }
93
-
94
- return {
95
- canSegment,
96
- segmentCurrentImage,
97
- loading,
98
- };
99
- },
100
- });
101
- </script>
@@ -1,58 +0,0 @@
1
- <template>
2
- <v-tooltip right transition="slide-x-transition">
3
- <template v-slot:activator="{ on }">
4
- <v-btn
5
- text
6
- tile
7
- dark
8
- :height="sizeV"
9
- :width="sizeV"
10
- :min-width="sizeV"
11
- :max-width="sizeV"
12
- :class="classV"
13
- v-bind="$attrs"
14
- v-on="{ ...on, ...$listeners }"
15
- >
16
- <v-icon :size="iconSize">{{ icon }}</v-icon>
17
- <slot />
18
- </v-btn>
19
- </template>
20
- <span>{{ name }}</span>
21
- </v-tooltip>
22
- </template>
23
-
24
- <script>
25
- export default {
26
- name: 'ToolButton',
27
- props: {
28
- icon: { type: String, required: true },
29
- name: { type: String, required: true },
30
- size: { type: [Number, String], default: 40 },
31
- buttonClass: [String, Array, Object],
32
- },
33
-
34
- computed: {
35
- sizeV() {
36
- return Number(this.size);
37
- },
38
- iconSize() {
39
- return Math.floor(0.6 * this.sizeV);
40
- },
41
- classV() {
42
- const classSpec = this.buttonClass;
43
- if (typeof classSpec === 'string') {
44
- return classSpec;
45
- }
46
- if (Array.isArray(classSpec)) {
47
- return classSpec.join(' ');
48
- }
49
- if (classSpec && Object.keys(classSpec).length) {
50
- return Object.keys(this.buttonClass)
51
- .filter((key) => this.buttonClass[key])
52
- .join(' ');
53
- }
54
- return '';
55
- },
56
- },
57
- };
58
- </script>