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,325 +0,0 @@
1
- <script lang="ts">
2
- import {
3
- computed,
4
- defineComponent,
5
- del,
6
- reactive,
7
- set,
8
- toRefs,
9
- watch,
10
- } from '@vue/composition-api';
11
- import Image from 'itk-wasm/dist/core/Image';
12
- import type { PropType } from '@vue/composition-api';
13
- import GroupableItem from '@/src/components/GroupableItem.vue';
14
- import { useDICOMStore } from '../store/datasets-dicom';
15
- import {
16
- DataSelection,
17
- selectionEquals,
18
- useDatasetStore,
19
- } from '../store/datasets';
20
- import { useMultiSelection } from '../composables/useMultiSelection';
21
- import { useMessageStore } from '../store/messages';
22
-
23
- const canvas = document.createElement('canvas');
24
-
25
- function dicomCacheKey(volKey: string) {
26
- return `dicom-${volKey}`;
27
- }
28
-
29
- // Assume itkImage type is Uint8Array
30
- function itkImageToURI(itkImage: Image) {
31
- const [width, height] = itkImage.size;
32
- const im = new ImageData(width, height);
33
- const arr32 = new Uint32Array(im.data.buffer);
34
- const itkBuf = itkImage.data;
35
- if (!itkBuf) {
36
- return '';
37
- }
38
-
39
- for (let i = 0; i < itkBuf.length; i += 1) {
40
- const byte = itkBuf[i] as number;
41
- // ABGR order
42
- // eslint-disable-next-line no-bitwise
43
- arr32[i] = (255 << 24) | (byte << 16) | (byte << 8) | byte;
44
- }
45
-
46
- canvas.width = width;
47
- canvas.height = height;
48
- const ctx = canvas.getContext('2d');
49
- if (ctx) {
50
- ctx.putImageData(im, 0, 0);
51
- return canvas.toDataURL('image/png');
52
- }
53
- return '';
54
- }
55
-
56
- async function generateDICOMThumbnail(
57
- dicomStore: ReturnType<typeof useDICOMStore>,
58
- volumeKey: string
59
- ) {
60
- if (volumeKey in dicomStore.volumeInfo) {
61
- const info = dicomStore.volumeInfo[volumeKey];
62
- const middleSlice = Math.ceil(Number(info.NumberOfSlices) / 2);
63
- const thumb = (await dicomStore.getVolumeSlice(
64
- volumeKey,
65
- middleSlice,
66
- true
67
- )) as Image;
68
-
69
- return thumb;
70
- }
71
- return null;
72
- }
73
-
74
- export default defineComponent({
75
- name: 'PatientBrowser',
76
- props: {
77
- volumeKeys: {
78
- type: Array as PropType<Array<string>>,
79
- required: true,
80
- },
81
- },
82
- components: {
83
- GroupableItem,
84
- },
85
- setup(props) {
86
- const { volumeKeys } = toRefs(props);
87
- const dicomStore = useDICOMStore();
88
- const dataStore = useDatasetStore();
89
-
90
- const volumes = computed(() => {
91
- const { volumeInfo } = dicomStore;
92
- return volumeKeys.value.map((volumeKey) => ({
93
- key: volumeKey,
94
- // for thumbnailing
95
- cacheKey: dicomCacheKey(volumeKey),
96
- info: volumeInfo[volumeKey],
97
- // for UI selection
98
- selectionKey: {
99
- type: 'dicom',
100
- volumeKey,
101
- } as DataSelection,
102
- }));
103
- });
104
-
105
- // --- thumbnails --- //
106
-
107
- const thumbnailCache = reactive<Record<string, string>>({});
108
-
109
- watch(
110
- volumeKeys,
111
- (keys) => {
112
- keys.forEach(async (key) => {
113
- const cacheKey = dicomCacheKey(key);
114
- if (cacheKey in thumbnailCache) {
115
- return;
116
- }
117
-
118
- try {
119
- const thumb = await generateDICOMThumbnail(dicomStore, key);
120
- if (thumb !== null) {
121
- const encodedImage = itkImageToURI(thumb);
122
- set(thumbnailCache, cacheKey, encodedImage);
123
- }
124
- } catch (err) {
125
- if (err instanceof Error) {
126
- const messageStore = useMessageStore();
127
- messageStore.addError('Failed to generate thumbnails', {
128
- details: `${err}. More details can be found in the developer's console.`,
129
- });
130
- }
131
- }
132
- });
133
-
134
- // deletion case
135
- const lookup = new Set(keys.map((key) => dicomCacheKey(key)));
136
- Object.keys(thumbnailCache).forEach((key) => {
137
- if (!lookup.has(key)) {
138
- del(thumbnailCache, key);
139
- }
140
- });
141
- },
142
- { immediate: true, deep: true }
143
- );
144
-
145
- // --- selection --- //
146
-
147
- const { selected, selectedAll, selectedSome } =
148
- useMultiSelection(volumeKeys);
149
-
150
- const removeSelectedDICOMVolumes = () => {
151
- selected.value.forEach(async (volumeKey) => {
152
- dicomStore.deleteVolume(volumeKey);
153
- });
154
-
155
- selected.value = [];
156
- };
157
-
158
- return {
159
- selected,
160
- selectedAll,
161
- selectedSome,
162
- thumbnailCache,
163
- volumes,
164
- removeSelectedDICOMVolumes,
165
- selectionEquals,
166
- setPrimarySelection: (sel: DataSelection) => {
167
- dataStore.setPrimarySelection(sel);
168
- },
169
- };
170
- },
171
- });
172
- </script>
173
-
174
- <template>
175
- <v-container class="pa-0">
176
- <v-row no-gutters justify="space-between">
177
- <v-col cols="6" align-self="center">
178
- <v-checkbox
179
- class="ml-3 align-center justify-center"
180
- :indeterminate="selectedSome && !selectedAll"
181
- label="Select All"
182
- v-model="selectedAll"
183
- dense
184
- hide-details
185
- />
186
- </v-col>
187
- <v-col cols="6" align-self="center" class="d-flex justify-end mt-2">
188
- <v-tooltip left>
189
- <template v-slot:activator="{ on, attrs }">
190
- <v-btn
191
- icon
192
- small
193
- :disabled="!selectedSome"
194
- @click.stop="removeSelectedDICOMVolumes"
195
- v-bind="attrs"
196
- v-on="on"
197
- >
198
- <v-icon>mdi-delete</v-icon>
199
- </v-btn>
200
- </template>
201
- Delete selected
202
- </v-tooltip>
203
- </v-col>
204
- </v-row>
205
- <v-row no-gutters>
206
- <v-col>
207
- <div class="my-2 volume-list">
208
- <groupable-item
209
- v-for="volume in volumes"
210
- :key="volume.info.VolumeID"
211
- v-slot:default="{ active, select }"
212
- :value="volume.selectionKey"
213
- >
214
- <v-card
215
- outlined
216
- ripple
217
- :class="{
218
- 'volume-card': true,
219
- 'volume-card-active': active,
220
- }"
221
- min-height="180px"
222
- min-width="180px"
223
- :title="volume.info.SeriesDescription"
224
- @click="select"
225
- >
226
- <v-row no-gutters class="pa-0" justify="center">
227
- <div>
228
- <v-img
229
- contain
230
- max-height="150px"
231
- max-width="150px"
232
- :src="(thumbnailCache || {})[volume.cacheKey] || ''"
233
- >
234
- <template v-slot:placeholder>
235
- <v-row
236
- class="fill-height ma-0"
237
- align="center"
238
- justify="center"
239
- >
240
- <v-progress-circular
241
- indeterminate
242
- color="grey lighten-5"
243
- ></v-progress-circular>
244
- </v-row>
245
- </template>
246
- <v-overlay
247
- absolute
248
- class="thumbnail-overlay"
249
- :value="true"
250
- opacity="0"
251
- >
252
- <div class="d-flex flex-column fill-height">
253
- <v-row no-gutters justify="end" align-content="start">
254
- <v-checkbox
255
- :key="volume.info.VolumeID"
256
- :value="volume.key"
257
- v-model="selected"
258
- @click.stop
259
- dense
260
- />
261
- </v-row>
262
- <v-spacer />
263
- <v-row no-gutters justify="start" align="end">
264
- <div class="mb-1 ml-1 text-caption">
265
- [{{ volume.info.NumberOfSlices }}]
266
- </div>
267
- </v-row>
268
- </div>
269
- </v-overlay>
270
- </v-img>
271
- </div>
272
- </v-row>
273
- <v-card-text
274
- class="text--primary text-caption text-center series-desc mt-n3"
275
- >
276
- <div class="text-ellipsis">
277
- {{ volume.info.SeriesDescription || '(no description)' }}
278
- </div>
279
- </v-card-text>
280
- </v-card>
281
- </groupable-item>
282
- </div>
283
- </v-col>
284
- </v-row>
285
- </v-container>
286
- </template>
287
-
288
- <style scoped>
289
- .volume-list {
290
- display: grid;
291
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
292
- grid-auto-rows: 200px;
293
- justify-content: center;
294
- }
295
-
296
- .volume-card {
297
- padding: 8px;
298
- cursor: pointer;
299
- }
300
-
301
- .theme--light.volume-card-active {
302
- background-color: #b3e5fc;
303
- border-color: #b3e5fc;
304
- }
305
-
306
- .theme--dark.volume-card-active {
307
- background-color: #01579b;
308
- border-color: #01579b;
309
- }
310
-
311
- .series-desc {
312
- white-space: nowrap;
313
- text-overflow: ellipsis;
314
- overflow: hidden;
315
- }
316
-
317
- .thumbnail-overlay >>> .v-overlay__content {
318
- height: 100%;
319
- width: 100%;
320
- }
321
-
322
- .volume-list >>> .theme--light.v-sheet--outlined {
323
- border: none;
324
- }
325
- </style>
@@ -1,49 +0,0 @@
1
- <script lang="ts">
2
- import { computed, defineComponent } from '@vue/composition-api';
3
- import { useCurrentImage } from '../composables/useCurrentImage';
4
- import VolumeProperties from './VolumeProperties.vue';
5
- import VolumeRendering from './VolumeRendering.vue';
6
- import VolumePresets from './VolumePresets.vue';
7
-
8
- export default defineComponent({
9
- components: { VolumeRendering, VolumePresets, VolumeProperties },
10
- setup() {
11
- const { currentImageData } = useCurrentImage();
12
- const hasCurrentImage = computed(() => !!currentImageData.value);
13
- return {
14
- hasCurrentImage,
15
- };
16
- },
17
- });
18
- </script>
19
-
20
- <template>
21
- <div class="overflow-y-auto mx-2 fill-height">
22
- <template v-if="hasCurrentImage">
23
- <volume-rendering />
24
- <v-expansion-panels multiple accordion :value="[1]">
25
- <v-expansion-panel>
26
- <v-expansion-panel-header>
27
- <v-icon class="flex-grow-0 mr-4">mdi-palette</v-icon>
28
- Color Presets
29
- </v-expansion-panel-header>
30
- <v-expansion-panel-content>
31
- <volume-presets />
32
- </v-expansion-panel-content>
33
- </v-expansion-panel>
34
- <v-expansion-panel>
35
- <v-expansion-panel-header>
36
- <v-icon class="flex-grow-0 mr-4">mdi-cube-scan</v-icon>
37
- Cinematic Rendering
38
- </v-expansion-panel-header>
39
- <v-expansion-panel-content>
40
- <volume-properties />
41
- </v-expansion-panel-content>
42
- </v-expansion-panel>
43
- </v-expansion-panels>
44
- </template>
45
- <template v-else>
46
- <div class="text-center pt-12 text-subtitle-1">No image selected</div>
47
- </template>
48
- </div>
49
- </template>
@@ -1,158 +0,0 @@
1
- <script>
2
- import { VNavigationDrawer } from 'vuetify/lib';
3
-
4
- export const RESIZE_CURSOR = 'ew-resize';
5
-
6
- /**
7
- * Events: onResize(width:Number)
8
- */
9
- export default {
10
- name: 'ResizableNavDrawer',
11
- props: {
12
- minWidth: Number,
13
- maxWidth: Number,
14
- width: Number,
15
- handleSize: {
16
- type: Number,
17
- default: 4,
18
- },
19
- },
20
-
21
- data() {
22
- return {
23
- internalWidth: this.width,
24
- };
25
- },
26
-
27
- computed: {
28
- handleSizeCSS() {
29
- return `${this.handleSize}px`;
30
- },
31
- },
32
-
33
- mounted() {
34
- this.oldCursor = '';
35
- this.oldUserSelect = '';
36
-
37
- this.setResizableStyles();
38
- this.setEvents();
39
- },
40
-
41
- beforeDestroy() {
42
- this.clearEvents();
43
- this.stopResize();
44
- },
45
-
46
- render(h) {
47
- // forwards slots, scoped slots, and more to v-navigation-drawer
48
- return h(
49
- VNavigationDrawer,
50
- {
51
- props: {
52
- // this.$attrs is the non-prop attrs we receive, which should
53
- // be forwarded to v-navigation-drawer
54
- ...this.$attrs,
55
- width: this.internalWidth,
56
- },
57
- on: this.$listeners,
58
- scopedSlots: this.$scopedSlots,
59
- ref: 'infoPane',
60
- },
61
- this.$slots.default
62
- );
63
- },
64
-
65
- methods: {
66
- setResizableStyles() {
67
- // manual styling
68
- const el = this.$refs.infoPane.$el.querySelector(
69
- '.v-navigation-drawer__border'
70
- );
71
-
72
- // NOTE: width is not reactive to handle size
73
- el.style.width = this.handleSizeCSS;
74
- el.style.backgroundColor = 'transparent';
75
- el.style.touchAction = 'none';
76
- // NOTE: dynamically setting "right" won't update the border position
77
- if ('right' in this.$attrs) {
78
- el.style.borderLeft = '2px solid rgba(0, 0, 0, 0.24)';
79
- } else {
80
- el.style.borderRight = '2px solid rgba(0, 0, 0, 0.24)';
81
- }
82
- el.style.cursor = RESIZE_CURSOR;
83
- },
84
-
85
- setEvents() {
86
- this.drawerBorder = this.$refs.infoPane.$el.querySelector(
87
- '.v-navigation-drawer__border'
88
- );
89
- this.drawerBorder.addEventListener('pointerdown', this.startResize);
90
- this.drawerBorder.addEventListener('pointermove', this.handleResize);
91
- this.drawerBorder.addEventListener('pointerup', this.stopResize);
92
- },
93
-
94
- clearEvents() {
95
- this.drawerBorder.removeEventListener('pointerdown', this.startResize);
96
- this.drawerBorder.removeEventListener('pointermove', this.handleResize);
97
- this.drawerBorder.removeEventListener('pointerup', this.stopResize);
98
- },
99
-
100
- startResize(ev) {
101
- if (this.drawerBorder.hasPointerCapture(ev.pointerId)) return;
102
- this.drawerBorder.setPointerCapture(ev.pointerId);
103
-
104
- this.$refs.infoPane.$el.style.transition = 'initial';
105
-
106
- this.setCursor(RESIZE_CURSOR);
107
- this.disableSelection();
108
- },
109
-
110
- stopResize(ev) {
111
- if (ev) {
112
- if (!this.drawerBorder.hasPointerCapture(ev.pointerId)) return;
113
- this.drawerBorder.releasePointerCapture(ev.pointerId);
114
- }
115
-
116
- this.$refs.infoPane.$el.style.transition = '';
117
-
118
- this.resetCursor();
119
- this.resetSelection();
120
- },
121
-
122
- handleResize(evt) {
123
- if (!this.drawerBorder.hasPointerCapture(evt.pointerId)) return;
124
-
125
- const width =
126
- 'right' in this.$attrs
127
- ? document.body.scrollWidth - evt.clientX
128
- : evt.clientX;
129
-
130
- const min = this.minWidth || this.handleSize;
131
- const max = this.maxWidth || Infinity;
132
- this.internalWidth = Math.min(max, Math.max(min, width));
133
-
134
- this.$emit('resize', this.internalWidth);
135
- },
136
-
137
- setCursor(cursor) {
138
- this.oldCursor = document.body.style.cursor;
139
- document.body.style.cursor = cursor;
140
- },
141
-
142
- resetCursor() {
143
- document.body.style.cursor = this.oldCursor;
144
- this.oldCursor = '';
145
- },
146
-
147
- disableSelection() {
148
- this.oldUserSelect = document.body.style.userSelect;
149
- document.body.style.userSelect = 'none';
150
- },
151
-
152
- resetSelection() {
153
- document.body.style.userSelect = this.oldUserSelect;
154
- this.oldUserSelect = '';
155
- },
156
- },
157
- };
158
- </script>