@3cr/viewer-browser 0.0.196 → 0.0.220

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 (370) hide show
  1. package/.circleci/config.yml +46 -22
  2. package/.prettierrc +6 -0
  3. package/components.d.ts +23 -10
  4. package/dist/Viewer3CR.js +37 -46
  5. package/dist/Viewer3CR.mjs +22640 -20897
  6. package/dist/Viewer3CR.umd.js +37 -46
  7. package/dist/android-chrome-192x192.png +0 -0
  8. package/dist/android-chrome-512x512.png +0 -0
  9. package/dist/apple-touch-icon.png +0 -0
  10. package/dist/browserconfig.xml +9 -0
  11. package/dist/favicon-16x16.png +0 -0
  12. package/dist/favicon-32x32.png +0 -0
  13. package/dist/favicon.ico +0 -0
  14. package/dist/mstile-144x144.png +0 -0
  15. package/dist/mstile-150x150.png +0 -0
  16. package/dist/mstile-310x150.png +0 -0
  17. package/dist/mstile-310x310.png +0 -0
  18. package/dist/mstile-70x70.png +0 -0
  19. package/dist/safari-pinned-tab.svg +50 -0
  20. package/dist/site.webmanifest +19 -0
  21. package/index.html +34 -41
  22. package/package.json +23 -20
  23. package/playground/android-chrome-192x192.png +0 -0
  24. package/playground/android-chrome-512x512.png +0 -0
  25. package/playground/apple-touch-icon.png +0 -0
  26. package/playground/browserconfig.xml +9 -0
  27. package/playground/favicon-16x16.png +0 -0
  28. package/playground/favicon-32x32.png +0 -0
  29. package/playground/favicon.ico +0 -0
  30. package/playground/index.html +26 -29
  31. package/playground/mstile-144x144.png +0 -0
  32. package/playground/mstile-150x150.png +0 -0
  33. package/playground/mstile-310x150.png +0 -0
  34. package/playground/mstile-310x310.png +0 -0
  35. package/playground/mstile-70x70.png +0 -0
  36. package/playground/safari-pinned-tab.svg +50 -0
  37. package/playground/site.webmanifest +19 -0
  38. package/playground/sw.js +15 -1
  39. package/public/android-chrome-192x192.png +0 -0
  40. package/public/android-chrome-512x512.png +0 -0
  41. package/public/apple-touch-icon.png +0 -0
  42. package/public/browserconfig.xml +9 -0
  43. package/public/favicon-16x16.png +0 -0
  44. package/public/favicon-32x32.png +0 -0
  45. package/public/favicon.ico +0 -0
  46. package/public/mstile-144x144.png +0 -0
  47. package/public/mstile-150x150.png +0 -0
  48. package/public/mstile-310x150.png +0 -0
  49. package/public/mstile-310x310.png +0 -0
  50. package/public/mstile-70x70.png +0 -0
  51. package/public/safari-pinned-tab.svg +50 -0
  52. package/public/site.webmanifest +19 -0
  53. package/src/App.vue +35 -45
  54. package/src/__tests__/app.spec.ts +7 -8
  55. package/{__tests__/index.spec.ts → src/__tests__/main.spec.ts} +5 -6
  56. package/src/assets/logos/3dicom/white-mini.svg +20 -0
  57. package/src/assets/logos/3dicom/white.svg +30 -0
  58. package/src/assets/styles.scss +14 -4
  59. package/src/components/demo/__tests__/DemoModal.spec.ts +9 -8
  60. package/src/components/demo/__tests__/DemoPatientModal.spec.ts +11 -10
  61. package/src/components/demo/__tests__/options.spec.ts +1 -1
  62. package/src/components/demo/licence/__tests__/DemoLicenceEnableCloudStorageModal.spec.ts +11 -10
  63. package/src/components/demo/licence/__tests__/DemoLicenceInfoModal.spec.ts +21 -11
  64. package/src/components/demo/licence/__tests__/DemoLicenceSendToPartyModal.spec.ts +10 -10
  65. package/src/components/demo/licence/__tests__/DemoLicenceShareToMobileModal.spec.ts +14 -13
  66. package/src/components/demo/options.ts +54 -59
  67. package/src/components/demo/patient/__tests__/DemoPatientEnableCloudStorageModal.spec.ts +11 -10
  68. package/src/components/demo/patient/__tests__/DemoPatientInfoModal.spec.ts +12 -11
  69. package/src/components/demo/patient/__tests__/DemoPatientSendToPartyModal.spec.ts +10 -10
  70. package/src/components/demo/patient/__tests__/DemoPatientShareToMobileModal.spec.ts +14 -13
  71. package/src/components/modal/ActionRail.vue +7 -11
  72. package/src/components/modal/AskAI.vue +35 -50
  73. package/src/components/modal/CloseViewerModal.vue +22 -57
  74. package/src/components/modal/MftpWebGL3DRModal.vue +152 -570
  75. package/src/components/modal/ViewerActionRail.vue +50 -39
  76. package/src/components/modal/ViewerNavigationDrawer.vue +10 -8
  77. package/src/components/modal/ViewerNavigationDrawerContent.vue +82 -49
  78. package/src/components/modal/ViewerNavigationDrawerFooter.vue +57 -60
  79. package/src/components/modal/ViewerNavigationDrawerHeader.vue +13 -48
  80. package/src/components/modal/ViewerScanView.vue +114 -0
  81. package/src/components/modal/WebGL3DR.vue +84 -0
  82. package/src/components/modal/__tests__/ActionRail.spec.ts +10 -0
  83. package/src/components/modal/__tests__/AskAI.spec.ts +33 -0
  84. package/src/components/modal/__tests__/CloseViewerModal.spec.ts +24 -14
  85. package/src/components/modal/__tests__/MftpWebGL3DRModal.spec.ts +147 -176
  86. package/src/components/modal/__tests__/ViewerActionRail.spec.ts +11 -0
  87. package/src/components/modal/__tests__/ViewerNavigationDrawer.spec.ts +10 -12
  88. package/src/components/modal/__tests__/ViewerNavigationDrawerContent.spec.ts +4 -22
  89. package/src/components/modal/__tests__/ViewerNavigationDrawerFooter.spec.ts +35 -32
  90. package/src/components/modal/__tests__/ViewerNavigationDrawerHeader.spec.ts +11 -9
  91. package/src/components/modal/__tests__/ViewerScanView.spec.ts +60 -0
  92. package/src/components/modal/__tests__/WebGL3DR.spec.ts +57 -0
  93. package/src/components/modal/actions/Flip3dAction.vue +1 -1
  94. package/src/components/modal/actions/FlipHorizontalAction.vue +5 -10
  95. package/src/components/modal/actions/FlipVerticalAction.vue +5 -10
  96. package/src/components/modal/actions/FullscreenAction.vue +6 -11
  97. package/src/components/modal/actions/HideViewAction.vue +38 -0
  98. package/src/components/modal/actions/NavigationCubeAction.vue +7 -14
  99. package/src/components/modal/actions/PanAction.vue +4 -4
  100. package/src/components/modal/actions/ResetViewAction.vue +1 -1
  101. package/src/components/modal/actions/Rotate2dAction.vue +8 -20
  102. package/src/components/modal/actions/Slice3dAction.vue +10 -32
  103. package/src/components/modal/actions/ZoomAction.vue +1 -1
  104. package/src/components/modal/actions/__tests__/Action.spec.ts +8 -9
  105. package/src/components/modal/actions/__tests__/Flip3dAction.spec.ts +6 -8
  106. package/src/components/modal/actions/__tests__/FlipHorizontalAction.spec.ts +6 -7
  107. package/src/components/modal/actions/__tests__/FlipVerticalAction.spec.ts +6 -7
  108. package/src/components/modal/actions/__tests__/FullscreenAction.spec.ts +9 -10
  109. package/src/components/modal/actions/__tests__/NavigationCubeAction.spec.ts +11 -11
  110. package/src/components/modal/actions/__tests__/PanAction.spec.ts +9 -10
  111. package/src/components/modal/actions/__tests__/ResetViewAction.spec.ts +7 -7
  112. package/src/components/modal/actions/__tests__/Rotate2dAction.spec.ts +6 -8
  113. package/src/components/modal/actions/__tests__/Slice3dAction.spec.ts +23 -5
  114. package/src/components/modal/actions/__tests__/ZoomAction.spec.ts +8 -10
  115. package/src/components/modal/buttons/AutoAnnotateBtn.vue +29 -0
  116. package/src/components/modal/buttons/__tests__/AutoAnnotateBtn.spec.ts +28 -0
  117. package/src/components/modal/menus/FileMenu.vue +80 -0
  118. package/src/components/modal/menus/SettingsMenu.vue +111 -0
  119. package/src/components/modal/menus/__tests__/FileMenu.spec.ts +110 -0
  120. package/src/components/modal/menus/__tests__/SettingsMenu.spec.ts +71 -0
  121. package/src/components/shared/DoubleSliderSelector.vue +142 -0
  122. package/src/components/shared/UpdateSnackbar.vue +72 -0
  123. package/src/components/{selectors → shared}/ValueSelector.vue +9 -12
  124. package/src/components/shared/__tests__/DoubleSliderSelector.spec.ts +83 -0
  125. package/src/components/shared/__tests__/LoadingSpinner.spec.ts +9 -0
  126. package/src/components/shared/__tests__/UpdateSnackbar.spec.ts +116 -0
  127. package/src/components/shared/__tests__/ValueSelector.spec.ts +39 -0
  128. package/src/components/shared/__tests__/VerticalSliderSelector.spec.ts +50 -0
  129. package/src/components/views/AnnotationTreeView.vue +234 -0
  130. package/src/components/{modal/ViewerDisplaySettings.vue → views/DisplaySettings.vue} +7 -15
  131. package/src/components/views/MarkupTreeView.vue +199 -0
  132. package/src/components/views/McadObjectTreeView.vue +119 -0
  133. package/src/components/views/__tests__/AnnotationTreeView.spec.ts +62 -0
  134. package/src/components/{modal/__tests__/ViewerDisplaySettings.spec.ts → views/__tests__/DisplaySettings.spec.ts} +24 -20
  135. package/src/components/views/__tests__/MarkupTreeView.spec.ts +41 -0
  136. package/src/components/views/__tests__/McadObjectTreeView.spec.ts +47 -0
  137. package/src/components/views/modals/DataOverlayModal.vue +89 -0
  138. package/src/components/views/modals/DataOverlayModalManager.vue +104 -0
  139. package/src/components/views/modals/__tests__/DataOverlayModal.spec.ts +33 -0
  140. package/src/components/views/modals/__tests__/DataOverlayModalManager.spec.ts +93 -0
  141. package/src/components/views/shared/MaskIcon.vue +44 -0
  142. package/src/components/views/shared/ObjectColor.vue +31 -0
  143. package/src/components/views/shared/ObjectLabel.vue +30 -0
  144. package/src/components/views/shared/Opacity.vue +66 -0
  145. package/src/components/views/shared/VisibilityBtn.vue +25 -0
  146. package/src/components/views/shared/__tests__/MaskIcon.spec.ts +10 -0
  147. package/src/components/views/shared/__tests__/ObjectColor.spec.ts +10 -0
  148. package/src/components/views/shared/__tests__/ObjectLabel.spec.ts +10 -0
  149. package/src/components/views/shared/__tests__/Opacity.spec.ts +24 -0
  150. package/src/components/views/shared/__tests__/VisibilityBtn.spec.ts +11 -0
  151. package/src/components/views/types/annotation-tree-view-item-child-action.ts +6 -0
  152. package/src/components/views/types/annotation-tree-view-item-child.ts +9 -0
  153. package/src/components/views/types/annotation-tree-view-item.ts +13 -0
  154. package/src/components/views/types/markup-tree-view-item-child.ts +6 -0
  155. package/src/components/views/types/markup-tree-view-item.ts +14 -0
  156. package/src/components/views/types/mcad-object-tree-view-item.ts +13 -0
  157. package/src/composables/__tests__/useAnnotations.spec.ts +35 -0
  158. package/src/composables/__tests__/useEventListener.spec.ts +32 -0
  159. package/src/composables/__tests__/useIntroJs.spec.ts +51 -0
  160. package/src/composables/__tests__/useMarkups.spec.ts +39 -0
  161. package/src/composables/__tests__/useMcadObjects.spec.ts +36 -0
  162. package/src/composables/__tests__/useMouse.spec.ts +20 -0
  163. package/src/{components/modal/composables → composables}/__tests__/useNavigationCubeObserver.spec.ts +17 -12
  164. package/src/{dataLayer → composables}/__tests__/useViewer3cr.spec.ts +1 -2
  165. package/src/composables/useAnnotations.ts +37 -0
  166. package/src/composables/useEventListener.ts +25 -0
  167. package/src/composables/useIntroJs.ts +125 -0
  168. package/src/composables/useMarkups.ts +41 -0
  169. package/src/composables/useMcadObjects.ts +32 -0
  170. package/src/composables/useMouse.ts +14 -0
  171. package/src/{components/modal/composables → composables}/useNavigationCubeObserver.ts +35 -25
  172. package/src/composables/useScanMovement.ts +25 -0
  173. package/src/composables/useScanSliders.ts +36 -0
  174. package/src/composables/useVersion3cr.ts +7 -0
  175. package/src/composables/useViewer3cr.ts +7 -0
  176. package/src/composables/useViewerOptions.ts +35 -0
  177. package/src/{dataLayer → functions}/__tests__/clamp.spec.ts +1 -2
  178. package/src/functions/__tests__/layoutOverlayStyle.spec.ts +325 -0
  179. package/src/{helpers/__tests__/model-helper.spec.ts → functions/__tests__/modelHelper.spec.ts} +77 -40
  180. package/src/{notifications → functions}/__tests__/notification.spec.ts +19 -29
  181. package/src/functions/__tests__/parseAction.spec.ts +9 -0
  182. package/src/functions/__tests__/parseCallToAction.spec.ts +11 -0
  183. package/src/functions/__tests__/parseDataOverlay.spec.ts +15 -0
  184. package/src/functions/__tests__/parseDataOverlayData.spec.ts +9 -0
  185. package/src/functions/__tests__/parseDataOverlayEvent.spec.ts +10 -0
  186. package/src/functions/__tests__/parseMcadEvent.spec.ts +10 -0
  187. package/src/functions/layoutOverlayStyle.ts +84 -0
  188. package/src/{helpers → functions}/modelHelper.ts +79 -18
  189. package/src/{notifications → functions}/notification.ts +12 -14
  190. package/src/functions/parseAction.ts +9 -0
  191. package/src/functions/parseCallToAction.ts +9 -0
  192. package/src/functions/parseDataOverlay.ts +10 -0
  193. package/src/functions/parseDataOverlayData.ts +10 -0
  194. package/src/functions/parseDataOverlayEvent.ts +17 -0
  195. package/src/functions/parseMcadEvent.ts +10 -0
  196. package/src/functions/rgbaToCss.ts +13 -0
  197. package/src/main.ts +48 -9
  198. package/src/{dataLayer → models}/__tests__/eventHandlers.spec.ts +2 -3
  199. package/src/models/__tests__/loadViewerOptions.spec.ts +72 -0
  200. package/src/models/__tests__/loadViewerPayload.spec.ts +10 -0
  201. package/src/models/__tests__/scanState.spec.ts +190 -0
  202. package/src/models/callbacks.ts +4 -0
  203. package/src/models/loadViewerOptions.ts +40 -0
  204. package/src/models/loadViewerPayload.ts +24 -0
  205. package/src/{dataLayer → models}/scanState.ts +63 -74
  206. package/src/plugins/__tests__/usePlugins.spec.ts +12 -0
  207. package/src/plugins/__tests__/vuetify.spec.ts +3 -4
  208. package/src/plugins/usePlugins.ts +8 -0
  209. package/src/plugins/vuetify.ts +31 -65
  210. package/src/services/{gpt/__tests__ → __tests__}/gpt.service.spec.ts +2 -2
  211. package/src/services/__tests__/service-worker.service.spec.ts +32 -0
  212. package/src/{dataLayer/__tests__/viewer3cr.spec.ts → services/__tests__/viewer-3cr.service.spec.ts} +97 -36
  213. package/src/services/gpt.service.ts +17 -0
  214. package/src/services/service-worker.service.ts +16 -0
  215. package/src/{dataLayer/viewer3cr.ts → services/viewer-3cr.service.ts} +269 -150
  216. package/src/types/action.ts +13 -0
  217. package/src/types/call-to-action.ts +9 -0
  218. package/src/types/colour.ts +6 -0
  219. package/src/types/data-overlay-angle.ts +16 -0
  220. package/src/types/data-overlay-annotation.ts +18 -0
  221. package/src/types/data-overlay-data.ts +15 -0
  222. package/src/types/data-overlay-info.ts +14 -0
  223. package/src/types/data-overlay-interaction.ts +15 -0
  224. package/src/types/data-overlay-length.ts +16 -0
  225. package/src/types/data-overlay-markup.ts +7 -0
  226. package/src/types/data-overlay-mcad.ts +20 -0
  227. package/src/types/data-overlay-polygon.ts +18 -0
  228. package/src/types/data-overlay.ts +16 -0
  229. package/src/types/gpt-question.ts +4 -0
  230. package/src/types/gpt-response-payload.ts +6 -0
  231. package/src/types/mcad-object-interaction.ts +15 -0
  232. package/src/types/segment-angle.ts +5 -0
  233. package/src/types/vector2.ts +4 -0
  234. package/src/types/vector3.ts +5 -0
  235. package/test/fakers/action-data.faker.ts +11 -0
  236. package/test/fakers/action.faker.ts +19 -0
  237. package/test/fakers/call-to-action.faker.ts +17 -0
  238. package/test/fakers/colour.faker.ts +17 -0
  239. package/test/fakers/data-overlay-angle.faker.ts +37 -0
  240. package/test/fakers/data-overlay-annotation.faker.ts +41 -0
  241. package/test/fakers/data-overlay-data.faker.ts +97 -0
  242. package/test/fakers/data-overlay-info.faker.ts +29 -0
  243. package/test/fakers/data-overlay-interaction.faker.ts +62 -0
  244. package/test/fakers/data-overlay-length.faker.ts +37 -0
  245. package/test/fakers/data-overlay-mcad.faker.ts +40 -0
  246. package/test/fakers/data-overlay-polygon.faker.ts +39 -0
  247. package/test/fakers/gpt-question.faker.ts +11 -0
  248. package/test/fakers/gpt-response.faker.ts +12 -0
  249. package/test/fakers/invert-transform.faker.ts +16 -0
  250. package/test/fakers/mcad-object-interaction.faker.ts +22 -0
  251. package/test/fakers/orientation.faker.ts +17 -0
  252. package/test/fakers/segment-angle.faker.ts +12 -0
  253. package/test/fakers/vector2.faker.ts +12 -0
  254. package/test/fakers/vector3.faker.ts +16 -0
  255. package/test/plugins/findByTestId.ts +25 -0
  256. package/test/plugins/vuetify.ts +16 -0
  257. package/test/setup.ts +16 -5
  258. package/tsconfig.json +4 -15
  259. package/vite.config.mts +20 -46
  260. package/vitest.config.mts +24 -43
  261. package/index.ts +0 -72
  262. package/src/assets/images/dark/3DICOM.png +0 -0
  263. package/src/assets/images/dark/3dicom-logo.svg +0 -1
  264. package/src/assets/images/light/3DICOM.png +0 -0
  265. package/src/assets/images/light/3dicom-logo.svg +0 -1
  266. package/src/assets/logo.png +0 -0
  267. package/src/assets/logo.svg +0 -6
  268. package/src/components/WebGL3DR.vue +0 -102
  269. package/src/components/__tests__/webgl3dr.spec.ts +0 -37
  270. package/src/components/icons/liver.vue +0 -21
  271. package/src/components/loading/__tests__/loading-spinner.spec.ts +0 -11
  272. package/src/components/modal/ViewerAnnotationModal.vue +0 -115
  273. package/src/components/modal/ViewerAnnotations.vue +0 -283
  274. package/src/components/modal/__tests__/ViewerAnnotationModal.spec.ts +0 -79
  275. package/src/components/modal/composables/useEventListener.ts +0 -22
  276. package/src/components/selectors/__tests__/value-selector.spec.ts +0 -53
  277. package/src/components/sliders/DoubleSliderSelector.vue +0 -141
  278. package/src/components/sliders/__tests__/double-slider-selector.spec.ts +0 -104
  279. package/src/components/sliders/__tests__/vertical-slider-selector.spec.ts +0 -61
  280. package/src/dataLayer/__tests__/getIconForPreset.spec.ts +0 -40
  281. package/src/dataLayer/__tests__/patchDataOverlay.spec.ts +0 -88
  282. package/src/dataLayer/__tests__/scanState.spec.ts +0 -93
  283. package/src/dataLayer/getIconForPreset.ts +0 -11
  284. package/src/dataLayer/patchDataOverlay.ts +0 -101
  285. package/src/dataLayer/useViewer3cr.ts +0 -7
  286. package/src/helpers/__tests__/layout-overlay-style.spec.ts +0 -290
  287. package/src/helpers/__tests__/utils.spec.ts +0 -70
  288. package/src/helpers/layoutOverlayStyle.ts +0 -96
  289. package/src/helpers/utils.ts +0 -16
  290. package/src/models/Callbacks.ts +0 -2
  291. package/src/models/LoadViewerOptions.ts +0 -31
  292. package/src/models/LoadViewerPayload.ts +0 -9
  293. package/src/models/__tests__/load-viewer-options.spec.ts +0 -22
  294. package/src/plugins/__tests__/index.spec.ts +0 -19
  295. package/src/plugins/index.ts +0 -17
  296. package/src/services/gpt/gpt.service.ts +0 -27
  297. package/static/3cr-types-browser/index.ts +0 -74
  298. package/static/3cr-types-browser/types/Action.ts +0 -6
  299. package/static/3cr-types-browser/types/AlphaKeys.ts +0 -5
  300. package/static/3cr-types-browser/types/AnchorPoint.ts +0 -12
  301. package/static/3cr-types-browser/types/CallToAction.ts +0 -5
  302. package/static/3cr-types-browser/types/ColourData.ts +0 -7
  303. package/static/3cr-types-browser/types/ColourPresetData.ts +0 -9
  304. package/static/3cr-types-browser/types/CurrentDataOverlayState.ts +0 -6
  305. package/static/3cr-types-browser/types/CurrentScanState.ts +0 -22
  306. package/static/3cr-types-browser/types/DataOverlay.ts +0 -22
  307. package/static/3cr-types-browser/types/DataOverlayActions.ts +0 -14
  308. package/static/3cr-types-browser/types/DataOverlayData.ts +0 -8
  309. package/static/3cr-types-browser/types/DataOverlayEvent.ts +0 -8
  310. package/static/3cr-types-browser/types/DecryptionKey.ts +0 -4
  311. package/static/3cr-types-browser/types/DisplaySettings.ts +0 -10
  312. package/static/3cr-types-browser/types/EmptyPayload.ts +0 -3
  313. package/static/3cr-types-browser/types/EnumPayload.ts +0 -4
  314. package/static/3cr-types-browser/types/FileManagementActions.ts +0 -11
  315. package/static/3cr-types-browser/types/FlipValue.ts +0 -7
  316. package/static/3cr-types-browser/types/FrontEndInterfaces.ts +0 -14
  317. package/static/3cr-types-browser/types/GradientKeys.ts +0 -7
  318. package/static/3cr-types-browser/types/GreyscalePresetData.ts +0 -6
  319. package/static/3cr-types-browser/types/InitialDataOverlayState.ts +0 -6
  320. package/static/3cr-types-browser/types/InitialScanState.ts +0 -19
  321. package/static/3cr-types-browser/types/InteractionType.ts +0 -8
  322. package/static/3cr-types-browser/types/InteractivityActions.ts +0 -6
  323. package/static/3cr-types-browser/types/InteractivityState.ts +0 -4
  324. package/static/3cr-types-browser/types/InvertTransformData.ts +0 -6
  325. package/static/3cr-types-browser/types/LayoutActions.ts +0 -6
  326. package/static/3cr-types-browser/types/LayoutData.ts +0 -7
  327. package/static/3cr-types-browser/types/LoadDataSet.ts +0 -6
  328. package/static/3cr-types-browser/types/LoadSessionState.ts +0 -4
  329. package/static/3cr-types-browser/types/LocalLoadDataset.ts +0 -3
  330. package/static/3cr-types-browser/types/MovementData.ts +0 -7
  331. package/static/3cr-types-browser/types/NavigationCubeActions.ts +0 -8
  332. package/static/3cr-types-browser/types/NavigationCubeData.ts +0 -12
  333. package/static/3cr-types-browser/types/NavigationCubeTransform.ts +0 -9
  334. package/static/3cr-types-browser/types/NotificationPayload.ts +0 -7
  335. package/static/3cr-types-browser/types/NotificationsActions.ts +0 -6
  336. package/static/3cr-types-browser/types/Object.ts +0 -1
  337. package/static/3cr-types-browser/types/ObjectColour.ts +0 -7
  338. package/static/3cr-types-browser/types/ObjectIcon.ts +0 -5
  339. package/static/3cr-types-browser/types/ObjectInvert.ts +0 -7
  340. package/static/3cr-types-browser/types/ObjectSize.ts +0 -7
  341. package/static/3cr-types-browser/types/ObjectSize2D.ts +0 -7
  342. package/static/3cr-types-browser/types/ObjectVisible.ts +0 -5
  343. package/static/3cr-types-browser/types/PositionData.ts +0 -14
  344. package/static/3cr-types-browser/types/PresetsActions.ts +0 -4
  345. package/static/3cr-types-browser/types/RotationValue.ts +0 -7
  346. package/static/3cr-types-browser/types/ScanMovementActions.ts +0 -27
  347. package/static/3cr-types-browser/types/ScanMovementData.ts +0 -3
  348. package/static/3cr-types-browser/types/ScanOrientationActions.ts +0 -6
  349. package/static/3cr-types-browser/types/ScanStateActions.ts +0 -4
  350. package/static/3cr-types-browser/types/ScanView.ts +0 -6
  351. package/static/3cr-types-browser/types/SettingsData.ts +0 -12
  352. package/static/3cr-types-browser/types/SlicerData.ts +0 -9
  353. package/static/3cr-types-browser/types/SliderValue.ts +0 -4
  354. package/static/3cr-types-browser/types/SlidersActions.ts +0 -18
  355. package/static/3cr-types-browser/types/Vector2Data.ts +0 -5
  356. package/static/3cr-types-browser/types/Vector3Data.ts +0 -6
  357. package/static/3cr-types-browser/types/VectorMovementData.ts +0 -8
  358. package/static/3cr-types-browser/types/ViewInteractiveMode.ts +0 -5
  359. package/static/3cr-types-browser/types/ViewOrientation.ts +0 -8
  360. package/static/3cr-types-browser/types/ViewOrientations.ts +0 -10
  361. package/static/3cr-types-browser/types/ViewSelectionActions.ts +0 -9
  362. package/static/3cr-types-browser/types/ViewToggleData.ts +0 -7
  363. package/static/3cr-types-browser/types/VolumeOrientation.ts +0 -7
  364. package/test/helper.ts +0 -44
  365. /package/src/components/{loading → shared}/LoadingSpinner.vue +0 -0
  366. /package/src/components/{sliders → shared}/VerticalSliderSelector.vue +0 -0
  367. /package/{config.ts → src/config.ts} +0 -0
  368. /package/src/{dataLayer → functions}/clamp.ts +0 -0
  369. /package/src/{dataLayer → models}/eventHandlers.ts +0 -0
  370. /package/{static/3cr-types-browser/types/ActionData.ts → src/types/action-data.ts} +0 -0
@@ -2,15 +2,16 @@
2
2
  <ActionRail
3
3
  :actions="viewActions"
4
4
  :menu-props="menuProps"
5
+ :menu-on="menuOn"
5
6
  :menu-activator-props="menuActivatorProps"
6
- @menu-active="onActionModal($event, view)">
7
+ >
7
8
  <template #visible="{ action }">
8
9
  <Component
9
10
  :is="action.component"
10
11
  :view="view"
11
12
  :element="element"
12
13
  variant="button"
13
- @update:modal="onActionModal($event, view)"
14
+ @update:modal="onActionModal"
14
15
  />
15
16
  </template>
16
17
  <template #hidden="{ action }">
@@ -19,48 +20,39 @@
19
20
  :view="view"
20
21
  :element="element"
21
22
  variant="menu-item"
22
- @update:modal="onActionModal($event, view)"
23
+ @update:modal="onActionModal"
23
24
  />
24
25
  </template>
25
26
  </ActionRail>
26
27
  </template>
27
28
 
28
29
  <script setup lang="ts">
29
- import { computed, shallowRef } from "vue";
30
- import { ScanView } from "@3cr/types-ts";
31
- import FlipVerticalAction from "@/components/modal/actions/FlipVerticalAction.vue";
32
- import FlipHorizontalAction from "@/components/modal/actions/FlipHorizontalAction.vue";
33
- import FullscreenAction from "@/components/modal/actions/FullscreenAction.vue";
34
- import PanAction from "@/components/modal/actions/PanAction.vue";
35
- import ResetViewAction from "@/components/modal/actions/ResetViewAction.vue";
36
- import Rotate2dAction from "@/components/modal/actions/Rotate2dAction.vue";
37
- import Slice3dAction from "@/components/modal/actions/Slice3dAction.vue";
38
- import ZoomAction from "@/components/modal/actions/ZoomAction.vue";
39
- import { useViewer3cr } from "@/dataLayer/useViewer3cr";
30
+ import { computed } from 'vue';
31
+ import { ScanView } from '@3cr/types-ts';
32
+ import FlipVerticalAction from '@/components/modal/actions/FlipVerticalAction.vue';
33
+ import FlipHorizontalAction from '@/components/modal/actions/FlipHorizontalAction.vue';
34
+ import FullscreenAction from '@/components/modal/actions/FullscreenAction.vue';
35
+ import PanAction from '@/components/modal/actions/PanAction.vue';
36
+ import ResetViewAction from '@/components/modal/actions/ResetViewAction.vue';
37
+ import Rotate2dAction from '@/components/modal/actions/Rotate2dAction.vue';
38
+ import Slice3dAction from '@/components/modal/actions/Slice3dAction.vue';
39
+ import ZoomAction from '@/components/modal/actions/ZoomAction.vue';
40
+ import { useViewer3cr } from '@/composables/useViewer3cr';
41
+ import HideViewAction from '@/components/modal/actions/HideViewAction.vue';
40
42
 
41
43
  interface Props {
42
44
  view: ScanView;
43
- element: any;
45
+ element: EventTarget;
44
46
  }
45
47
 
46
48
  type Emits = {
47
- modal: [boolean, number];
49
+ modal: [boolean];
48
50
  };
49
51
 
50
52
  type ActionItem = {
51
53
  component: any;
52
54
  width: number;
53
- condition: () => boolean;
54
- }
55
-
56
- const menuProps = {
57
- closeOnContentClick: false
58
- };
59
-
60
- const menuActivatorProps = {
61
- icon: 'more_vert',
62
- variant: 'text',
63
- color: 'white'
55
+ condition: boolean;
64
56
  };
65
57
 
66
58
  const props = defineProps<Props>();
@@ -69,55 +61,74 @@ const emit = defineEmits<Emits>();
69
61
 
70
62
  const viewer3cr = useViewer3cr();
71
63
 
64
+ const menuProps = computed(() => ({
65
+ closeOnContentClick: false
66
+ }));
67
+
68
+ const menuOn = computed(() => ({
69
+ 'update:modelValue': onActionModal
70
+ }));
71
+
72
+ const menuActivatorProps = computed(() => ({
73
+ icon: 'more_vert',
74
+ variant: 'text',
75
+ color: 'white'
76
+ }));
77
+
72
78
  const viewActions = computed(() => {
73
- return actions.value.filter(action => action.condition());
79
+ return actions.value.filter((action) => action.condition);
74
80
  });
75
81
 
76
- const actions = shallowRef<ActionItem[]>([
82
+ const actions = computed<ActionItem[]>(() => [
77
83
  {
78
84
  component: FullscreenAction,
79
85
  width: 48,
80
- condition: () => true,
86
+ condition: true
81
87
  },
82
88
  {
83
89
  component: ResetViewAction,
84
90
  width: 48,
85
- condition: () => true,
91
+ condition: true
86
92
  },
87
93
  {
88
94
  component: PanAction,
89
95
  width: 48,
90
- condition: () => true,
96
+ condition: true
97
+ },
98
+ {
99
+ component: HideViewAction,
100
+ width: 48,
101
+ condition: true
91
102
  },
92
103
  {
93
104
  component: ZoomAction,
94
105
  width: 48,
95
- condition: () => true,
106
+ condition: true
96
107
  },
97
108
  {
98
109
  component: Slice3dAction,
99
110
  width: 48,
100
- condition: () => props.view === ScanView.Volume,
111
+ condition: props.view === ScanView.Volume
101
112
  },
102
113
  {
103
114
  component: Rotate2dAction,
104
115
  width: 48,
105
- condition: () => props.view !== ScanView.Volume,
116
+ condition: props.view !== ScanView.Volume
106
117
  },
107
118
  {
108
119
  component: FlipHorizontalAction,
109
120
  width: 48,
110
- condition: () => props.view !== ScanView.Volume,
121
+ condition: props.view !== ScanView.Volume
111
122
  },
112
123
  {
113
124
  component: FlipVerticalAction,
114
125
  width: 48,
115
- condition: () => props.view !== ScanView.Volume,
126
+ condition: props.view !== ScanView.Volume
116
127
  }
117
128
  ]);
118
129
 
119
- async function onActionModal(value: boolean, view: ScanView): Promise<void> {
130
+ async function onActionModal(value: boolean): Promise<void> {
120
131
  await viewer3cr.hoverOverCanvas(!value); // disable unity inputs when interacting with modals
121
- emit('modal', value, view);
132
+ emit('modal', value);
122
133
  }
123
134
  </script>
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <v-navigation-drawer
3
3
  class="motif-background"
4
+ theme="dark"
4
5
  :model-value="true"
5
6
  :rail="!drawer"
6
7
  rail-width="72"
@@ -12,11 +13,11 @@
12
13
  <ViewerNavigationDrawerHeader :drawer="drawer" />
13
14
  </template>
14
15
  <template #default>
15
- <ViewerNavigationDrawerContent v-model:drawer="drawer" :options="options" @update:expanded="emit('update:expanded', $event)" />
16
+ <ViewerNavigationDrawerContent v-model:drawer="drawer" @update:expanded="emit('update:expanded', $event)" />
16
17
  </template>
17
18
  <template #append>
18
19
  <v-divider />
19
- <ViewerNavigationDrawerFooter :drawer="drawer" :options="options" />
20
+ <ViewerNavigationDrawerFooter :drawer="drawer" />
20
21
  </template>
21
22
  </v-navigation-drawer>
22
23
  <v-btn
@@ -31,17 +32,15 @@
31
32
  @click="drawer = !drawer"
32
33
  >
33
34
  <v-icon color="black">
34
- {{ !drawer ? "chevron_right" : "chevron_left" }}
35
+ {{ !drawer ? 'chevron_right' : 'chevron_left' }}
35
36
  </v-icon>
36
37
  </v-btn>
37
38
  </template>
38
39
 
39
40
  <script setup lang="ts">
40
41
  import { computed, ref, watch } from 'vue';
41
- import { LoadViewerOptions } from "@/models/LoadViewerOptions";
42
42
 
43
43
  interface Props {
44
- options: LoadViewerOptions;
45
44
  drawer?: boolean;
46
45
  }
47
46
 
@@ -68,9 +67,12 @@ const drawer = computed({
68
67
  }
69
68
  });
70
69
 
71
- watch(() => props.drawer, (value: boolean) => {
72
- drawer.value = value;
73
- });
70
+ watch(
71
+ () => props.drawer,
72
+ (value: boolean) => {
73
+ drawer.value = value;
74
+ }
75
+ );
74
76
 
75
77
  defineExpose({ drawer });
76
78
  </script>
@@ -7,8 +7,8 @@
7
7
  tile
8
8
  @update:model-value="onUpdate"
9
9
  >
10
- <template v-for="(item, index) in items" :key="item">
11
- <v-expansion-panel v-if="item.visible()" :data-testid="`panel-${index}`" class="bg-transparent text-white px-0">
10
+ <template v-for="(item, index) in items" :key="index">
11
+ <v-expansion-panel v-if="item.visible" :data-testid="`panel-${index}`" class="bg-transparent text-white px-0">
12
12
  <v-expansion-panel-title :hide-actions="!drawer" class="font-weight-bold">
13
13
  <v-icon :start="drawer" :icon="item.icon" />
14
14
  <span v-show="drawer">{{ item.text }}</span>
@@ -25,15 +25,18 @@
25
25
  </template>
26
26
 
27
27
  <script setup lang="ts">
28
- import { ComponentInstance, computed, ref, shallowRef, watch } from "vue";
29
- import { LoadViewerOptions } from "@/models/LoadViewerOptions";
30
- import { isSessionLoaded } from "@/dataLayer/scanState";
31
- import ViewerDisplaySettings from "@/components/modal/ViewerDisplaySettings.vue";
32
- import ViewerAnnotations from "@/components/modal/ViewerAnnotations.vue";
28
+ import { ComponentInstance, computed, ref, watch } from 'vue';
29
+ import ViewerDisplaySettings from '@/components/views/DisplaySettings.vue';
30
+ import AnnotationTreeView from '@/components/views/AnnotationTreeView.vue';
31
+ import McadObjects from '@/components/views/McadObjectTreeView.vue';
32
+ import Markups from '@/components/views/MarkupTreeView.vue';
33
+ import { useViewerOptions } from '@/composables/useViewerOptions';
34
+ import { useAnnotations } from '@/composables/useAnnotations';
35
+ import { useMarkups } from '@/composables/useMarkups';
36
+ import { useMcadObjects } from '@/composables/useMcadObjects';
33
37
 
34
38
  interface Props {
35
39
  drawer?: boolean;
36
- options: LoadViewerOptions
37
40
  }
38
41
 
39
42
  type Emits = {
@@ -46,7 +49,7 @@ interface SettingsItem {
46
49
  text: string;
47
50
  tooltip: string;
48
51
  component: ComponentInstance<any>;
49
- visible: () => boolean;
52
+ visible: boolean;
50
53
  props: Record<string, any>;
51
54
  }
52
55
 
@@ -56,42 +59,82 @@ const props = withDefaults(defineProps<Props>(), {
56
59
 
57
60
  const emit = defineEmits<Emits>();
58
61
 
62
+ const options = useViewerOptions();
63
+ const { annotations, hasAnnotations } = useAnnotations();
64
+ const { markups, hasMarkups } = useMarkups();
65
+ const { mcadObjects, hasMcadObjects } = useMcadObjects();
59
66
  const previous = ref<number | undefined>(0);
60
67
  const expanded = ref<number | undefined>(0);
61
68
 
62
- const items = shallowRef<SettingsItem[]>([
69
+ const items = computed<SettingsItem[]>(() => [
63
70
  {
64
- icon: "display_settings",
65
- text: "Display Settings",
66
- tooltip: "Change the range of visible anatomy in the scan by only showing areas with certain density of tissue",
71
+ icon: 'display_settings',
72
+ text: 'Display Settings',
73
+ tooltip: 'Change the range of visible anatomy in the scan by only showing areas with certain density of tissue',
67
74
  component: ViewerDisplaySettings,
68
- visible: () => true,
69
- props: {}
75
+ visible: true,
76
+ props: {
77
+ class: 'pa-4'
78
+ }
70
79
  },
71
80
  {
72
- icon: "draw",
73
- text: "Annotations",
74
- tooltip: "Display annotations on your scans",
75
- component: ViewerAnnotations,
76
- visible: () => !!showAnnotations.value,
77
- props: {}
81
+ icon: 'draw',
82
+ text: 'Annotations',
83
+ tooltip: 'Display annotations on your scans',
84
+ component: AnnotationTreeView,
85
+ visible: !!showAnnotations.value,
86
+ props: {
87
+ items: annotations.value
88
+ }
78
89
  },
90
+ {
91
+ icon: 'design_services',
92
+ text: 'Markups',
93
+ tooltip: 'Display markups on your scans',
94
+ component: Markups,
95
+ visible: !!showMarkups.value,
96
+ props: {
97
+ items: markups.value
98
+ }
99
+ },
100
+ {
101
+ icon: 'deployed_code',
102
+ text: 'MCAD',
103
+ tooltip: 'Display MCAD objects on your scans',
104
+ component: McadObjects,
105
+ visible: !!showMcadObjects.value,
106
+ props: {
107
+ items: mcadObjects.value
108
+ }
109
+ }
79
110
  ]);
80
111
 
81
112
  const showAnnotations = computed(() => {
82
- return props.options.OnLoadSavedSession && isSessionLoaded.value;
113
+ return options.value.OnLoadSavedSession && hasAnnotations.value;
83
114
  });
84
115
 
85
- watch(() => props.drawer, (value: boolean) => {
86
- if (value) {
87
- expanded.value = previous.value;
88
- emit('update:expanded', expanded.value);
89
- } else {
90
- previous.value = expanded.value;
91
- expanded.value = undefined;
92
- emit('update:expanded', expanded.value);
93
- }
94
- }, { immediate: true });
116
+ const showMarkups = computed(() => {
117
+ return options.value.OnLoadSavedSession && hasMarkups.value;
118
+ });
119
+
120
+ const showMcadObjects = computed(() => {
121
+ return options.value.OnLoadSavedSession && hasMcadObjects.value;
122
+ });
123
+
124
+ watch(
125
+ () => props.drawer,
126
+ (value: boolean) => {
127
+ if (value) {
128
+ expanded.value = previous.value;
129
+ emit('update:expanded', expanded.value);
130
+ } else {
131
+ previous.value = expanded.value;
132
+ expanded.value = undefined;
133
+ emit('update:expanded', expanded.value);
134
+ }
135
+ },
136
+ { immediate: true }
137
+ );
95
138
 
96
139
  function onUpdate(event: unknown): void {
97
140
  const value = event as number | undefined;
@@ -99,28 +142,18 @@ function onUpdate(event: unknown): void {
99
142
  expanded.value = value;
100
143
  emit('update:expanded', expanded.value);
101
144
  if (!props.drawer && value !== undefined) {
102
- emit('update:drawer', true)
145
+ emit('update:drawer', true);
103
146
  }
104
147
  }
105
148
  </script>
106
149
 
107
- <style scoped>
108
- .v-expansion-panel-content__wrap {
109
- padding: 0 8px 4px;
110
- flex: 1 1 auto;
111
- max-width: 100%;
112
- }
113
-
114
- .v-expansion-panel--active > .v-expansion-panel-header {
115
- min-height: 48px;
116
- }
117
-
118
- .v-expansion-panel--active:not(:first-child),
119
- .v-expansion-panel--active + .v-expansion-panel {
120
- margin-top: 0;
150
+ <style scoped lang="css">
151
+ :deep(.v-expansion-panel-title) {
152
+ padding: 12px 16px;
153
+ justify-content: center;
121
154
  }
122
155
 
123
- .v-expansion-panel-text__wrapper {
124
- padding: 8px 8px 16px;
156
+ :deep(.v-expansion-panel-text__wrapper) {
157
+ padding: 0;
125
158
  }
126
159
  </style>
@@ -1,111 +1,108 @@
1
1
  <template>
2
- <v-list>
3
- <template v-for="(item, index) of footerItems" :key="item">
4
- <v-tooltip location="right">
5
- <template #activator="{ props }">
6
- <v-list-item
7
- v-if="item.visible()"
8
- v-bind="props"
9
- :data-testid="`footer-${index}`"
10
- class="px-6"
11
- target="_blank"
12
- :disabled="disabled"
13
- @click="item.click()"
14
- >
15
- <template v-slot:prepend>
16
- <v-icon v-bind="item.iconProps" />
2
+ <div>
3
+ <div class="pa-1 d-flex flex-wrap justify-space-between" :class="drawer ? 'flex-row' : 'flex-col'">
4
+ <template v-for="(item, index) of footerItems" :key="index">
5
+ <div v-if="item.visible()" class="ma-auto" :data-testid="`footer-${index}`">
6
+ <v-tooltip :location="drawer ? 'top' : 'right'">
7
+ <template #activator="{ props }">
8
+ <v-btn v-bind="props" variant="text" size="36" :icon="true" :disabled="disabled" @click="item.click()">
9
+ <v-icon size="24" v-bind="item.iconProps" />
10
+ </v-btn>
17
11
  </template>
18
- <v-list-item-title v-if="drawer" class="text-white">
19
- <span>{{ item.text }}</span>
20
- </v-list-item-title>
21
- </v-list-item>
22
- </template>
23
- <span>{{ item.tooltip }}</span>
24
- </v-tooltip>
25
- </template>
26
- </v-list>
12
+ <span>{{ item.text }}</span>
13
+ </v-tooltip>
14
+ </div>
15
+ </template>
16
+ </div>
17
+ <v-divider />
18
+ <div class="d-flex justify-center">
19
+ <span class="version px-2 py-1" data-testid="version">{{ drawer ? 'Version' : '' }} {{ version3cr }}</span>
20
+ </div>
21
+ </div>
27
22
  </template>
28
23
 
29
24
  <script setup lang="ts">
30
- import { ref } from "vue";
31
- import { currentColourPreset, initialScanState } from "@/dataLayer/scanState";
32
- import { ViewSelectionActions } from "@3cr/types-ts";
33
- import { LoadViewerOptions } from "@/models/LoadViewerOptions";
34
- import { useViewer3cr } from "@/dataLayer/useViewer3cr";
25
+ import { ref } from 'vue';
26
+ import { currentColourPreset, initialScanState } from '@/models/scanState';
27
+ import { ViewSelectionActions } from '@3cr/types-ts';
28
+ import { useViewer3cr } from '@/composables/useViewer3cr';
29
+ import { useViewerOptions } from '@/composables/useViewerOptions';
30
+ import { useVersion3cr } from '@/composables/useVersion3cr';
35
31
 
36
32
  interface Props {
37
- options: LoadViewerOptions;
38
33
  drawer?: boolean;
39
34
  disabled?: boolean;
40
35
  }
41
36
 
42
37
  interface FooterItem {
43
38
  text: string;
44
- tooltip: string;
45
39
  iconProps: Record<string, any>;
46
40
  visible: () => boolean;
47
41
  click: () => void | Promise<void>;
48
42
  }
49
43
 
50
- const props = withDefaults(defineProps<Props>(), {
44
+ withDefaults(defineProps<Props>(), {
51
45
  drawer: false,
52
46
  disabled: false
53
47
  });
54
48
 
55
49
  const viewer3cr = useViewer3cr();
50
+ const version3cr = useVersion3cr();
51
+ const options = useViewerOptions();
56
52
  const footerItems = ref<FooterItem[]>([
57
53
  {
58
- text: "Reset Scan",
59
- tooltip: "Resets your scan to original position and settings in all views",
60
- iconProps: { icon: "refresh", color: "red" },
54
+ text: 'Reset Scan',
55
+ iconProps: { icon: 'refresh', color: 'red' },
61
56
  visible: () => true,
62
57
  click: async () => {
63
58
  currentColourPreset.value = initialScanState.value.ColourPresets[0];
64
59
  await viewer3cr.viewSelection(ViewSelectionActions.vs05);
65
60
  await viewer3cr.viewSelection(ViewSelectionActions.vs06);
66
- },
61
+ }
67
62
  },
68
63
  {
69
- text: "Enable Cloud Storage",
70
- tooltip: "Securely store your medical records in the cloud",
71
- iconProps: { icon: "cloud", color: "blue" },
72
- visible: () => !!props.options.OnEnableCloudStorage,
64
+ text: 'Enable Cloud Storage',
65
+ iconProps: { icon: 'cloud', color: 'blue' },
66
+ visible: () => !!options.value.OnEnableCloudStorage,
73
67
  click: async () => {
74
- await props.options.OnEnableCloudStorage!();
68
+ await options.value.OnEnableCloudStorage!();
75
69
  }
76
70
  },
77
71
  {
78
- text: "Send to 3rd Party",
79
- tooltip: "Securely share your loaded scan with 3rd parties via email with option to anonymise",
80
- iconProps: { icon: "send", color: "green" },
81
- visible: () => !!props.options.OnSendTo3rdParty,
72
+ text: 'Send to 3rd Party',
73
+ iconProps: { icon: 'send', color: 'green' },
74
+ visible: () => !!options.value.OnSendTo3rdParty,
82
75
  click: async () => {
83
- await props.options.OnSendTo3rdParty!();
76
+ await options.value.OnSendTo3rdParty!();
84
77
  }
85
78
  },
86
79
  {
87
- text: "Share to Mobile / VR",
88
- tooltip: "Share your loaded scan with the 3Dicom Mobile and VR applications to download within 7 days",
89
- iconProps: { icon: "share", color: "yellow" },
90
- visible: () => !!props.options.OnShareToMobile,
80
+ text: 'Share to Mobile / VR',
81
+ iconProps: { icon: 'share', color: 'yellow' },
82
+ visible: () => !!options.value.OnShareToMobile,
91
83
  click: async () => {
92
- await props.options.OnShareToMobile!();
84
+ await options.value.OnShareToMobile!();
93
85
  }
94
86
  },
95
87
  {
96
- text: "Screenshot View",
97
- tooltip: 'Take a screenshot',
98
- iconProps: { icon: "screenshot_region", color: "green" },
99
- visible: () => !!props.options.OnScreenshot,
88
+ text: 'Screenshot View',
89
+ iconProps: { icon: 'screenshot_region', color: 'green' },
90
+ visible: () => !!options.value.OnScreenshot,
100
91
  click: async () => {
101
- await props.options.OnScreenshot!();
92
+ await options.value.OnScreenshot!();
102
93
  }
103
- },
94
+ }
104
95
  ]);
105
96
  </script>
106
97
 
107
- <style scoped>
108
- .v-icon {
109
- opacity: 1;
98
+ <style scoped lang="css">
99
+ .version {
100
+ font-size: 9px;
101
+ font-weight: 300;
102
+ letter-spacing: 0.1666666667em;
103
+ text-transform: uppercase;
104
+ text-overflow: ellipsis;
105
+ overflow: hidden;
106
+ white-space: nowrap;
110
107
  }
111
108
  </style>
@@ -1,57 +1,16 @@
1
1
  <template>
2
- <div
3
- v-if="!isDemo || demoType === 'patient'"
4
- class="d-flex align-center pb-1"
5
- :class="!drawer ? 'py-2' : 'pa-2'"
6
- >
7
- <v-img
8
- v-if="drawer"
9
- src="../../assets/images/dark/3dicom-logo.svg"
10
- height="64"
11
- alt="logo"
12
- style="opacity: 0.9"
13
- />
14
- <v-img
15
- v-else
16
- src="../../assets/images/dark/3DICOM.png"
17
- height="48"
18
- alt="logo"
19
- style="opacity: 0.9"
20
- />
2
+ <div v-if="!isDemo || demoType === 'patient'" class="d-flex align-center pb-1" :class="!drawer ? 'py-2' : 'pa-2'">
3
+ <v-img v-if="drawer" src="@/assets/logos/3dicom/white.svg" height="64" alt="logo" />
4
+ <v-img v-else src="@/assets/logos/3dicom/white-mini.svg" height="48" alt="logo" />
21
5
  </div>
22
- <div
23
- v-else
24
- class="d-flex align-center pb-1"
25
- :class="!drawer ? 'py-2' : 'pa-2'"
26
- >
27
- <!-- TODO: Image probably needs to be cropped (1500 x 1500) -->
28
- <v-img
29
- v-if="drawer"
30
- src="../../assets/images/dark/demo-logo.svg"
31
- width="100%"
32
- height="64"
33
- :cover="true"
34
- alt="logo"
35
- style="opacity: 0.9"
36
- />
37
- <v-img
38
- v-else
39
- src="../../assets/images/dark/demo-icon-small.png"
40
- height="48"
41
- alt="logo"
42
- style="opacity: 0.9"
43
- />
44
- </div>
45
- <div
46
- class="text-center mx-auto text-white sub-type"
47
- :style="!drawer ? 'font-size: 100%' : 'font-size: 140%'"
48
- >
49
- Online Viewer
6
+ <div v-else class="d-flex align-center pb-1" :class="!drawer ? 'py-2' : 'pa-2'">
7
+ <v-img v-if="drawer" src="@/assets/images/dark/demo-logo.svg" width="100%" height="64" :cover="true" alt="logo" />
8
+ <v-img v-else src="@/assets/images/dark/demo-icon-small.png" height="48" alt="logo" />
50
9
  </div>
51
10
  </template>
52
11
 
53
12
  <script setup lang="ts">
54
- import { demoType, isDemo } from "@/components/demo/options";
13
+ import { demoType, isDemo } from '@/components/demo/options';
55
14
 
56
15
  interface Props {
57
16
  drawer?: boolean;
@@ -61,3 +20,9 @@ withDefaults(defineProps<Props>(), {
61
20
  drawer: false
62
21
  });
63
22
  </script>
23
+
24
+ <style scoped lang="scss">
25
+ .v-img {
26
+ opacity: 0.9;
27
+ }
28
+ </style>