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,173 +0,0 @@
1
- <script lang="ts">
2
- import { computed, defineComponent, watch } from '@vue/composition-api';
3
- import SampleDataBrowser from './SampleDataBrowser.vue';
4
- import ImageDataBrowser from './ImageDataBrowser.vue';
5
- import PatientBrowser from './PatientBrowser.vue';
6
- import { useDICOMStore } from '../store/datasets-dicom';
7
- import { useImageStore } from '../store/datasets-images';
8
- import { usePanels } from '../composables/usePanels';
9
-
10
- const SAMPLE_DATA_KEY = 'sampleData';
11
- const ANONYMOUS_DATA_KEY = 'anonymousData';
12
-
13
- export default defineComponent({
14
- name: 'DataBrowser',
15
- components: {
16
- SampleDataBrowser,
17
- ImageDataBrowser,
18
- PatientBrowser,
19
- },
20
- setup() {
21
- const dicomStore = useDICOMStore();
22
- const imageStore = useImageStore();
23
-
24
- // TODO show patient ID in parens if there is a name conflict
25
- const patients = computed(() =>
26
- Object.entries(dicomStore.patientInfo)
27
- .map(([key, info]) => ({
28
- key,
29
- name: info.PatientName,
30
- info,
31
- }))
32
- .sort((a, b) => (a.name < b.name ? -1 : 1))
33
- );
34
-
35
- const hasAnonymousImages = computed(
36
- () =>
37
- imageStore.idList.filter((id) => !(id in dicomStore.imageIDToVolumeKey))
38
- .length > 0
39
- );
40
-
41
- const panelKeys = computed(
42
- () =>
43
- new Set([
44
- SAMPLE_DATA_KEY,
45
- ...(hasAnonymousImages.value ? [ANONYMOUS_DATA_KEY] : []),
46
- ...patients.value.map((study) => study.key),
47
- ])
48
- );
49
-
50
- const { handlePanelChange, openPanels } = usePanels(panelKeys);
51
-
52
- // Collapse Sample Data after loading data
53
- watch(panelKeys, (newSet, oldSet) => {
54
- // Sample Data panel index always 0
55
- if (newSet.size > oldSet.size && openPanels.value.includes(0)) {
56
- handlePanelChange(SAMPLE_DATA_KEY);
57
- }
58
- });
59
-
60
- return {
61
- openPanels,
62
- patients,
63
- deletePatient: dicomStore.deletePatient,
64
- hasAnonymousImages,
65
- handlePanelChange,
66
- SAMPLE_DATA_KEY,
67
- ANONYMOUS_DATA_KEY,
68
- };
69
- },
70
- });
71
- </script>
72
-
73
- <template>
74
- <div id="data-module" class="mx-2 fill-height">
75
- <div id="data-panels">
76
- <v-expansion-panels multiple accordion :value="openPanels">
77
- <v-expansion-panel
78
- v-if="hasAnonymousImages"
79
- key="anonymousImages"
80
- @change="handlePanelChange(ANONYMOUS_DATA_KEY)"
81
- >
82
- <v-expansion-panel-header>
83
- <v-icon class="collection-header-icon">mdi-image</v-icon>
84
- <span>Anonymous</span>
85
- </v-expansion-panel-header>
86
- <v-expansion-panel-content>
87
- <image-data-browser />
88
- </v-expansion-panel-content>
89
- </v-expansion-panel>
90
- <v-expansion-panel
91
- v-for="patient in patients"
92
- :key="patient.key"
93
- @change="handlePanelChange(patient.key)"
94
- >
95
- <v-expansion-panel-header>
96
- <div class="patient-header">
97
- <v-icon class="collection-header-icon">mdi-account</v-icon>
98
- <span class="patient-header-name" :title="patient.name">
99
- {{ patient.name }}
100
- </span>
101
- <v-spacer />
102
- <v-menu offset-x>
103
- <template v-slot:activator="{ on, attrs }">
104
- <v-btn
105
- icon
106
- small
107
- class="mr-3"
108
- @click.stop
109
- v-bind="attrs"
110
- v-on="on"
111
- >
112
- <v-icon small>mdi-dots-vertical</v-icon>
113
- </v-btn>
114
- </template>
115
- <v-list dense>
116
- <v-list-item @click.stop="deletePatient(patient.key)">
117
- <v-list-item-title>Delete Patient</v-list-item-title>
118
- </v-list-item>
119
- </v-list>
120
- </v-menu>
121
- </div>
122
- </v-expansion-panel-header>
123
- <v-expansion-panel-content>
124
- <patient-browser :patient-key="patient.key" />
125
- </v-expansion-panel-content>
126
- </v-expansion-panel>
127
- <v-expansion-panel
128
- key="sampleData"
129
- @change="handlePanelChange(SAMPLE_DATA_KEY)"
130
- >
131
- <v-expansion-panel-header>
132
- <v-icon class="collection-header-icon">mdi-card-bulleted</v-icon>
133
- <span>Sample Data</span>
134
- </v-expansion-panel-header>
135
- <v-expansion-panel-content>
136
- <sample-data-browser />
137
- </v-expansion-panel-content>
138
- </v-expansion-panel>
139
- </v-expansion-panels>
140
- </div>
141
- </div>
142
- </template>
143
-
144
- <style scoped>
145
- #data-module {
146
- display: flex;
147
- flex-flow: column;
148
- }
149
-
150
- #data-panels {
151
- flex: 2;
152
- overflow-y: auto;
153
- }
154
-
155
- .collection-header-icon {
156
- flex: 0;
157
- margin-right: 16px;
158
- }
159
-
160
- .patient-header {
161
- display: flex;
162
- flex-flow: row;
163
- align-items: center;
164
- /* 24px accomodates the open/close icon indicator */
165
- max-width: calc(100% - 24px);
166
- }
167
-
168
- .patient-header-name {
169
- overflow: hidden;
170
- text-overflow: ellipsis;
171
- white-space: nowrap;
172
- }
173
- </style>
@@ -1,107 +0,0 @@
1
- <template>
2
- <div
3
- v-on:dragover.prevent="onDragOver"
4
- v-on:dragleave="onDragLeave"
5
- v-on:drop.prevent="onDrop"
6
- v-bind="$attrs"
7
- v-on="$listeners"
8
- >
9
- <slot :dragHover="dragHover" />
10
- </div>
11
- </template>
12
-
13
- <script>
14
- async function readAllDirEntries(dirEntry) {
15
- const reader = dirEntry.createReader();
16
- const allEntries = [];
17
- let entries = [];
18
- do {
19
- // eslint-disable-next-line no-await-in-loop
20
- entries = await new Promise((resolve, reject) => {
21
- reader.readEntries(resolve, reject);
22
- });
23
- allEntries.push(...entries);
24
- } while (entries.length);
25
- return allEntries;
26
- }
27
-
28
- async function entryToFile(fileEntry) {
29
- return new Promise((resolve, reject) => {
30
- fileEntry.file(resolve, reject);
31
- });
32
- }
33
-
34
- async function readAllFiles(entries) {
35
- const toProcess = [...entries];
36
- const fileEntries = [];
37
- while (toProcess.length) {
38
- const entry = toProcess.shift();
39
- if (entry.isFile) {
40
- fileEntries.push(entry);
41
- } else {
42
- // eslint-disable-next-line no-await-in-loop
43
- toProcess.push(...(await readAllDirEntries(entry)));
44
- }
45
- }
46
- return Promise.all(fileEntries.map(entryToFile));
47
- }
48
-
49
- export default {
50
- name: 'DragAndDrop',
51
- props: {
52
- enabled: Boolean,
53
- },
54
- data() {
55
- return {
56
- dragHover: false,
57
- };
58
- },
59
- methods: {
60
- onDragOver(ev) {
61
- if (this.enabled) {
62
- ev.preventDefault();
63
-
64
- const { types } = ev.dataTransfer;
65
- if (
66
- types && types instanceof Array
67
- ? types.indexOf('Files') !== -1
68
- : 'Files' in types
69
- ) {
70
- this.dragHover = true;
71
- if (this.dragTimeout !== null) {
72
- window.clearTimeout(this.dragTimeout);
73
- this.dragTimeout = null;
74
- }
75
- }
76
- }
77
- },
78
- onDragLeave() {
79
- if (this.enabled) {
80
- this.dragTimeout = window.setTimeout(() => {
81
- this.dragHover = false;
82
- this.dragTimeout = null;
83
- }, 50);
84
- }
85
- },
86
- async onDrop(ev) {
87
- if (this.enabled) {
88
- this.dragHover = false;
89
- if (ev.dataTransfer.items) {
90
- const entries = [...ev.dataTransfer.items].map((item) => {
91
- const getAsEntry = item.webkitGetAsEntry || item.getAsEntry;
92
- return getAsEntry.call(item);
93
- });
94
- const files = await readAllFiles(entries);
95
- this.$emit('drop', files);
96
- } else {
97
- this.$emit('drop', Array.from(ev.dataTransfer.files));
98
- }
99
- }
100
- },
101
- },
102
- created() {
103
- // used to debounce dragover
104
- this.dragTimeout = null;
105
- },
106
- };
107
- </script>
@@ -1,30 +0,0 @@
1
- <script>
2
- export default {
3
- name: 'GroupableItem',
4
- inject: ['group'],
5
- props: {
6
- value: { required: true },
7
- },
8
- render() {
9
- const nodes = this.$scopedSlots.default({
10
- active: this.group.isSelected(this.value),
11
- select: this.select,
12
- toggle: this.toggle,
13
- });
14
- // always return first node, if any.
15
- return nodes[0];
16
- },
17
- methods: {
18
- select() {
19
- this.group.selectItem(this.value);
20
- },
21
- toggle() {
22
- if (this.group.isSelected(this.value)) {
23
- this.group.selectItem(null);
24
- } else {
25
- this.group.selectItem(this.value);
26
- }
27
- },
28
- },
29
- };
30
- </script>
@@ -1,186 +0,0 @@
1
- <script lang="ts">
2
- import {
3
- computed,
4
- defineComponent,
5
- set,
6
- del,
7
- reactive,
8
- watch,
9
- } from '@vue/composition-api';
10
- import ItemGroup from '@/src/components/ItemGroup.vue';
11
- import GroupableItem from '@/src/components/GroupableItem.vue';
12
- import ImageListCard from '@/src/components/ImageListCard.vue';
13
- import { createVTKImageThumbnailer } from '@/src/core/thumbnailers/vtk-image';
14
- import { useImageStore } from '../store/datasets-images';
15
- import { useDICOMStore } from '../store/datasets-dicom';
16
- import {
17
- DataSelection,
18
- selectionEquals,
19
- useDatasetStore,
20
- } from '../store/datasets';
21
- import { useMultiSelection } from '../composables/useMultiSelection';
22
-
23
- function imageCacheKey(dataID: string) {
24
- return `image-${dataID}`;
25
- }
26
-
27
- export default defineComponent({
28
- components: {
29
- ItemGroup,
30
- GroupableItem,
31
- ImageListCard,
32
- },
33
- setup() {
34
- const imageStore = useImageStore();
35
- const dicomStore = useDICOMStore();
36
- const dataStore = useDatasetStore();
37
-
38
- const primarySelection = computed(() => dataStore.primarySelection);
39
-
40
- const nonDICOMImages = computed(() =>
41
- imageStore.idList.filter((id) => !(id in dicomStore.imageIDToVolumeKey))
42
- );
43
-
44
- const images = computed(() => {
45
- const { metadata } = imageStore;
46
- return nonDICOMImages.value.map((id) => ({
47
- id,
48
- cacheKey: imageCacheKey(id),
49
- // for UI selection
50
- selectionKey: {
51
- type: 'image',
52
- dataID: id,
53
- } as DataSelection,
54
- name: metadata[id].name,
55
- dimensions: metadata[id].dimensions,
56
- spacing: [...metadata[id].spacing].map((s) => s.toFixed(2)),
57
- }));
58
- });
59
-
60
- // --- thumbnails --- //
61
-
62
- type Thumbnail = {
63
- imageURI: string;
64
- aspectRatio: number;
65
- };
66
- const thumbnails = reactive<Record<string, Thumbnail>>({});
67
- const thumbnailer = createVTKImageThumbnailer();
68
-
69
- watch(
70
- nonDICOMImages,
71
- (imageIDs) => {
72
- imageIDs.forEach(async (id) => {
73
- const cacheKey = imageCacheKey(id);
74
- if (!(cacheKey in thumbnails)) {
75
- const imageData = imageStore.dataIndex[id];
76
- const canvasIM = thumbnailer.generate(imageData);
77
- const imageURI = thumbnailer.imageDataToDataURI(canvasIM, 100, 100);
78
- const dims = imageData.getDimensions();
79
- const aspectRatio = dims[0] / dims[1];
80
- set(thumbnails, cacheKey, { imageURI, aspectRatio });
81
- }
82
- });
83
-
84
- // delete old thumbnails
85
- const idLookup = new Set(imageIDs.map((id) => imageCacheKey(id)));
86
- Object.keys(thumbnails).forEach((cacheKey) => {
87
- if (!idLookup.has(cacheKey)) {
88
- del(thumbnails, cacheKey);
89
- }
90
- });
91
- },
92
- { immediate: true, deep: true }
93
- );
94
-
95
- // --- selection --- //
96
-
97
- const { selected, selectedAll, selectedSome } =
98
- useMultiSelection(nonDICOMImages);
99
-
100
- function removeSelection() {
101
- selected.value.forEach((id) => {
102
- imageStore.deleteData(id);
103
- });
104
- selected.value = [];
105
- }
106
-
107
- return {
108
- selected,
109
- selectedAll,
110
- selectedSome,
111
- removeSelection,
112
- images,
113
- thumbnails,
114
- primarySelection,
115
- selectionEquals,
116
- setPrimarySelection: (sel: DataSelection) => {
117
- dataStore.setPrimarySelection(sel);
118
- },
119
- };
120
- },
121
- });
122
- </script>
123
-
124
- <template>
125
- <div>
126
- <div v-if="images.length === 0" class="text-center">No images loaded</div>
127
- <v-container v-show="images.length" class="pa-0">
128
- <v-row no-gutters justify="space-between">
129
- <v-col cols="6" align-self="center">
130
- <v-checkbox
131
- class="ml-3 align-center justify-center"
132
- :indeterminate="selectedSome && !selectedAll"
133
- label="Select All"
134
- v-model="selectedAll"
135
- ></v-checkbox>
136
- </v-col>
137
- <v-col cols="6" align-self="center" class="d-flex justify-end">
138
- <v-tooltip left>
139
- <template v-slot:activator="{ on, attrs }">
140
- <v-btn
141
- icon
142
- :disabled="!selectedSome"
143
- @click.stop="removeSelection"
144
- v-bind="attrs"
145
- v-on="on"
146
- >
147
- <v-icon>mdi-delete</v-icon>
148
- </v-btn>
149
- </template>
150
- Delete selected
151
- </v-tooltip>
152
- </v-col>
153
- </v-row>
154
- </v-container>
155
- <item-group
156
- :value="primarySelection"
157
- :testFunction="selectionEquals"
158
- @change="setPrimarySelection"
159
- >
160
- <groupable-item
161
- v-for="image in images"
162
- :key="image.id"
163
- v-slot="{ active, select }"
164
- :value="image.selectionKey"
165
- >
166
- <image-list-card
167
- selectable
168
- :active="active"
169
- :title="image.name"
170
- :image-url="(thumbnails[image.cacheKey] || {}).imageURI || ''"
171
- :image-size="100"
172
- @click="select"
173
- :id="image.id"
174
- :inputValue="image.id"
175
- v-model="selected"
176
- >
177
- <div class="text-body-2 font-weight-bold text-no-wrap text-truncate">
178
- {{ image.name }}
179
- </div>
180
- <div class="caption">Dims: ({{ image.dimensions.join(', ') }})</div>
181
- <div class="caption">Spacing: ({{ image.spacing.join(', ') }})</div>
182
- </image-list-card>
183
- </groupable-item>
184
- </item-group>
185
- </div>
186
- </template>
@@ -1,114 +0,0 @@
1
- <template>
2
- <v-hover v-slot="{ hover }">
3
- <v-card
4
- :disabled="disabled"
5
- outlined
6
- :ripple="!disabled"
7
- :class="{
8
- 'image-list-card-hover': !disabled && hover,
9
- 'image-list-card-active': !disabled && active,
10
- }"
11
- v-on="disabled ? {} : $listeners"
12
- >
13
- <v-container>
14
- <v-row no-gutters class="flex-nowrap">
15
- <v-col v-if="selectable" cols="1" class="d-flex align-center">
16
- <v-checkbox
17
- @click.stop
18
- :key="id"
19
- :value="inputValue"
20
- :input-value="value"
21
- :disabled="disabled"
22
- @change="onChange"
23
- />
24
- </v-col>
25
- <v-col
26
- cols="4"
27
- class="image-container flex-grow-0"
28
- :style="{ maxWidth: `${imageSize}px` }"
29
- >
30
- <v-img
31
- contain
32
- :height="`${imageSize}px`"
33
- :width="`${imageSize}px`"
34
- :src="imageUrl"
35
- />
36
- <v-overlay absolute :value="$slots['image-overlay']">
37
- <slot name="image-overlay" />
38
- </v-overlay>
39
- </v-col>
40
- <v-col :cols="7">
41
- <div class="ml-2">
42
- <slot></slot>
43
- </div>
44
- </v-col>
45
- </v-row>
46
- </v-container>
47
- </v-card>
48
- </v-hover>
49
- </template>
50
-
51
- <style scoped>
52
- .theme--light.image-list-card-hover {
53
- background-color: rgba(0, 0, 0, 0.1);
54
- border-color: rgba(0, 0, 0, 0.1);
55
- transition: all 0.25s;
56
- }
57
-
58
- .theme--dark.image-list-card-hover {
59
- background-color: rgba(255, 255, 255, 0.1);
60
- border-color: rgba(255, 255, 255, 0.1);
61
- transition: all 0.25s;
62
- }
63
-
64
- .theme--light.image-list-card-active {
65
- background-color: #b3e5fc;
66
- border-color: #b3e5fc;
67
- }
68
-
69
- .theme--dark.image-list-card-active {
70
- background-color: #01579b;
71
- border-color: #01579b;
72
- }
73
-
74
- .image-container {
75
- position: relative;
76
- margin-right: 20px;
77
- }
78
- </style>
79
-
80
- <script lang="ts">
81
- import { defineComponent } from '@vue/composition-api';
82
-
83
- export default defineComponent({
84
- name: 'ImageListCard',
85
- props: {
86
- active: Boolean,
87
- imageSize: {
88
- type: Number,
89
- default: 80,
90
- },
91
- imageUrl: {
92
- type: String,
93
- },
94
- selectable: {
95
- type: Boolean,
96
- default: false,
97
- },
98
- id: String,
99
- value: Array,
100
- inputValue: String,
101
- disabled: Boolean,
102
- },
103
-
104
- setup(props, { emit }) {
105
- const onChange = (event: any) => {
106
- emit('input', event);
107
- };
108
-
109
- return {
110
- onChange,
111
- };
112
- },
113
- });
114
- </script>
@@ -1,74 +0,0 @@
1
- <script>
2
- /**
3
- * This is meant as a smaller, more specific version of
4
- * vuetify's v-item-group + v-item.
5
- */
6
- export default {
7
- name: 'ItemGroup',
8
- provide() {
9
- return {
10
- group: {
11
- selectItem: this.selectItem,
12
- isSelected: this.isSelected,
13
- },
14
- };
15
- },
16
- props: {
17
- value: {
18
- type: null,
19
- required: false,
20
- },
21
- mandatory: {
22
- type: Boolean,
23
- default: false,
24
- },
25
- testFunction: {
26
- type: Function,
27
- required: false,
28
- },
29
- },
30
- model: {
31
- prop: 'value',
32
- event: 'change',
33
- },
34
- data() {
35
- return {
36
- internalValue: null,
37
- };
38
- },
39
- watch: {
40
- value(v) {
41
- if (v !== this.internalValue) {
42
- this.internalValue = v;
43
- }
44
- },
45
- },
46
- mounted() {
47
- this.internalValue = this.value;
48
- },
49
- render(h) {
50
- return h(
51
- 'div',
52
- { props: this.$attrs, on: this.$listeners },
53
- this.$slots.default
54
- );
55
- },
56
- methods: {
57
- selectItem(itemValue) {
58
- if (!(this.mandatory && !itemValue)) {
59
- this.internalValue = itemValue;
60
- this.$emit('change', this.internalValue);
61
- }
62
- },
63
- isSelected(valueToTest) {
64
- if (this.internalValue === null || this.internalValue === undefined) {
65
- return false;
66
- }
67
- if (this.testFunction) {
68
- return this.testFunction(valueToTest, this.internalValue);
69
- }
70
- return valueToTest === this.internalValue;
71
- },
72
- },
73
- };
74
- </script>