@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
@@ -1,15 +1,14 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
- import { mountVuetify, shallowMountVuetify } from "~/helper";
3
- import { inflateInitialScanState, inflateScanState } from "@/helpers/modelHelper";
1
+ import { inflateInitialScanState, inflateScanState } from '@/functions/modelHelper';
4
2
  import {
5
3
  AnchorPoint,
6
4
  FrontEndInterfaces,
5
+ LayoutActions,
7
6
  PositionData,
8
7
  ScanMovementActions,
9
- SlidersActions,
10
- } from "@3cr/types-ts";
11
- import { flushPromises } from "@vue/test-utils";
12
- import { spyOn } from "@vitest/spy";
8
+ SlidersActions
9
+ } from '@3cr/types-ts';
10
+ import { flushPromises, mount } from '@vue/test-utils';
11
+ import { spyOn } from '@vitest/spy';
13
12
  import {
14
13
  cSlider,
15
14
  currentGreyscalePreset,
@@ -18,220 +17,198 @@ import {
18
17
  setInitialScanStateFromPayload,
19
18
  setScanState,
20
19
  sSlider,
20
+ thresholdSlider,
21
21
  transactionStarted,
22
22
  tSlider,
23
- } from "@/dataLayer/scanState";
24
- import { unref } from "vue";
25
- import { isDemo } from "@/components/demo/options";
26
- import { Viewer3cr } from "@/dataLayer/viewer3cr";
27
- import MftpWebGL3DRModal from "../MftpWebGL3DRModal.vue";
28
- import { VDialog } from "vuetify/components";
29
-
30
- vi.mock("@kyvg/vue3-notification", async (importOriginal) => {
31
- const mod = (await importOriginal()) as object;
32
- return {
33
- ...mod,
34
- useNotification: vi.fn().mockReturnValue({
35
- notify: vi.fn(),
36
- }),
37
- };
23
+ windowSlider
24
+ } from '@/models/scanState';
25
+ import { defineComponent, onMounted, ref, unref } from 'vue';
26
+ import { isDemo } from '@/components/demo/options';
27
+ import { Viewer3crService } from '@/services/viewer-3cr.service';
28
+ import MftpWebGL3DRModal from '../MftpWebGL3DRModal.vue';
29
+ import { VBtn, VDialog } from 'vuetify/components';
30
+ import SettingsMenu from '@/components/modal/menus/SettingsMenu.vue';
31
+
32
+ let spy = spyOn(Viewer3crService.prototype, 'sendPayload').mockResolvedValue();
33
+
34
+ const app = defineComponent({
35
+ template: '<v-app><MftpWebGL3DRModal ref="webgl"></MftpWebGL3DRModal></v-app>',
36
+ components: { MftpWebGL3DRModal },
37
+ setup() {
38
+ const webgl = ref<typeof MftpWebGL3DRModal>();
39
+ onMounted(() => webgl.value!.alterValue(true));
40
+ return { webgl };
41
+ }
38
42
  });
39
43
 
40
- let spy = spyOn(Viewer3cr.prototype, "sendPayload").mockResolvedValue();
41
-
42
- describe("MftpWebGL3DRModal.vue", () => {
43
- let wrapper = shallowMountVuetify(MftpWebGL3DRModal);
44
+ describe('MftpWebGL3DRModal tests', () => {
45
+ let wrapper = mount(app, { global: { stubs: ['WebGL3DR'] } });
44
46
 
45
47
  beforeEach(() => {
46
48
  transactionStarted.value = false;
47
- spy = spyOn(Viewer3cr.prototype, "sendPayload").mockResolvedValue();
48
- wrapper = shallowMountVuetify( MftpWebGL3DRModal);
49
- vi.useFakeTimers();
49
+ spy = spyOn(Viewer3crService.prototype, 'sendPayload').mockResolvedValue();
50
+ wrapper = mount(app, { global: { stubs: ['WebGL3DR'] } });
50
51
  });
51
52
 
52
53
  afterEach(() => {
53
- vi.useRealTimers();
54
54
  isDemo.value = false;
55
+ wrapper.unmount();
55
56
  });
56
57
 
57
- it("inflates", () => {
58
+ it('inflates', () => {
58
59
  expect(wrapper).toBeTruthy();
59
60
  });
60
61
 
61
- describe("watchers", () => {
62
- it("scanState.value.Display.Brightness", async () => {
63
- await testWatcherForDisplay("Brightness", SlidersActions.sl01);
62
+ describe('watchers', () => {
63
+ it('scanState.value.Display.Brightness', async () => {
64
+ await testWatcherForDisplay('Brightness', SlidersActions.sl01);
64
65
  });
65
66
 
66
- it("scanState.value.Display.Contrast", async () => {
67
- await testWatcherForDisplay("Contrast", SlidersActions.sl02);
67
+ it('scanState.value.Display.Contrast', async () => {
68
+ await testWatcherForDisplay('Contrast', SlidersActions.sl02);
68
69
  });
69
70
 
70
- it("scanState.value.Display.Opacity", async () => {
71
- await testWatcherForDisplay("Opacity", SlidersActions.sl03);
71
+ it('scanState.value.Display.Opacity', async () => {
72
+ await testWatcherForDisplay('Opacity', SlidersActions.sl03);
72
73
  });
73
74
 
74
- it("scanState.value.Display.WindowLower", async () => {
75
- await testWatcherForDisplay("WindowLower", SlidersActions.sl04);
75
+ it('scanState.value.Display.WindowLower', async () => {
76
+ await testWatcherForDisplay('WindowLower', SlidersActions.sl04);
76
77
  });
77
78
 
78
- it("scanState.value.Display.WindowUpper", async () => {
79
- await testWatcherForDisplay("WindowUpper", SlidersActions.sl05);
79
+ it('scanState.value.Display.WindowUpper', async () => {
80
+ await testWatcherForDisplay('WindowUpper', SlidersActions.sl05);
80
81
  });
81
82
 
82
- it("scanState.value.Display.ThresholdLower", async () => {
83
- await testWatcherForDisplay("ThresholdLower", SlidersActions.sl06);
83
+ it('scanState.value.Display.ThresholdLower', async () => {
84
+ await testWatcherForDisplay('ThresholdLower', SlidersActions.sl06);
84
85
  });
85
86
 
86
- it("scanState.value.Display.ThresholdUpper", async () => {
87
- await testWatcherForDisplay("ThresholdUpper", SlidersActions.sl07);
87
+ it('scanState.value.Display.ThresholdUpper', async () => {
88
+ await testWatcherForDisplay('ThresholdUpper', SlidersActions.sl07);
88
89
  });
89
90
 
90
- it("scanState.value.Slice.TransverseLower", async () => {
91
- await testWatcherForSlice("TransverseLower", SlidersActions.sl08);
91
+ it('scanState.value.Slice.TransverseLower', async () => {
92
+ await testWatcherForSlice('TransverseLower', SlidersActions.sl08);
92
93
  });
93
94
 
94
- it("scanState.value.Orientations.Transverse.Slice", async () => {
95
- await testWatcherForOrientation("Transverse", SlidersActions.sl09);
95
+ it('scanState.value.Orientations.Transverse.Slice', async () => {
96
+ await testWatcherForOrientation('Transverse', SlidersActions.sl09);
96
97
  });
97
98
 
98
- it("scanState.value.Slice.TransverseUpper", async () => {
99
- await testWatcherForSlice("TransverseUpper", SlidersActions.sl10);
99
+ it('scanState.value.Slice.TransverseUpper', async () => {
100
+ await testWatcherForSlice('TransverseUpper', SlidersActions.sl10);
100
101
  });
101
102
 
102
- it("scanState.value.Slice.SagittalLower", async () => {
103
- await testWatcherForSlice("SagittalLower", SlidersActions.sl11);
103
+ it('scanState.value.Slice.SagittalLower', async () => {
104
+ await testWatcherForSlice('SagittalLower', SlidersActions.sl11);
104
105
  });
105
106
 
106
- it("scanState.value.Orientations.Sagittal.Slice", async () => {
107
- await testWatcherForOrientation("Sagittal", SlidersActions.sl12);
107
+ it('scanState.value.Orientations.Sagittal.Slice', async () => {
108
+ await testWatcherForOrientation('Sagittal', SlidersActions.sl12);
108
109
  });
109
110
 
110
- it("scanState.value.Slice.SagittalUpper", async () => {
111
- await testWatcherForSlice("SagittalUpper", SlidersActions.sl13);
111
+ it('scanState.value.Slice.SagittalUpper', async () => {
112
+ await testWatcherForSlice('SagittalUpper', SlidersActions.sl13);
112
113
  });
113
114
 
114
- it("scanState.value.Slice.CoronalLower", async () => {
115
- await testWatcherForSlice("CoronalLower", SlidersActions.sl14);
115
+ it('scanState.value.Slice.CoronalLower', async () => {
116
+ await testWatcherForSlice('CoronalLower', SlidersActions.sl14);
116
117
  });
117
118
 
118
- it("scanState.value.Orientations.Coronal.Slice", async () => {
119
- await testWatcherForOrientation("Coronal", SlidersActions.sl15);
119
+ it('scanState.value.Orientations.Coronal.Slice', async () => {
120
+ await testWatcherForOrientation('Coronal', SlidersActions.sl15);
120
121
  });
121
122
 
122
- it("scanState.value.Slice.CoronalUpper", async () => {
123
- await testWatcherForSlice("CoronalUpper", SlidersActions.sl16);
123
+ it('scanState.value.Slice.CoronalUpper', async () => {
124
+ await testWatcherForSlice('CoronalUpper', SlidersActions.sl16);
124
125
  });
125
126
 
126
- it("scanState.value.Slice.CoronalUpper transaction disabled", async () => {
127
+ it('scanState.value.Slice.CoronalUpper transaction disabled', async () => {
127
128
  transactionStarted.value = true;
128
- await testWatcherForSlice("CoronalUpper", SlidersActions.sl16, true);
129
+ await testWatcherForSlice('CoronalUpper', SlidersActions.sl16, true);
129
130
  });
130
131
 
131
- it("scanState.value.InteractionSettings.PanSensivitity transaction disabled", async () => {
132
+ it('scanState.value.InteractionSettings.PanSensivitity transaction disabled', async () => {
132
133
  transactionStarted.value = true;
133
- await testWatcherForInteractionSettings(
134
- "PanSensivitity1",
135
- ScanMovementActions.sm05,
136
- true
137
- );
134
+ await testWatcherForInteractionSettings('PanSensivitity1', ScanMovementActions.sm05, true);
138
135
  });
139
136
 
140
- it("scanState.value.InteractionSettings.PanSensivitity", async () => {
141
- await testWatcherForInteractionSettings(
142
- "PanSensivitity",
143
- ScanMovementActions.sm05
144
- );
137
+ it('scanState.value.InteractionSettings.PanSensivitity', async () => {
138
+ await testWatcherForInteractionSettings('PanSensivitity', ScanMovementActions.sm05);
145
139
  });
146
140
 
147
- it("scanState.value.InteractionSettings.ZoomSensitivity", async () => {
148
- await testWatcherForInteractionSettings(
149
- "ZoomSensitivity",
150
- ScanMovementActions.sm08
151
- );
141
+ it('scanState.value.InteractionSettings.ZoomSensitivity', async () => {
142
+ await testWatcherForInteractionSettings('ZoomSensitivity', ScanMovementActions.sm08);
152
143
  });
153
144
 
154
- it("scanState.value.InteractionSettings.RotateSensitivity", async () => {
155
- await testWatcherForInteractionSettings(
156
- "RotateSensitivity",
157
- ScanMovementActions.sm10
158
- );
145
+ it('scanState.value.InteractionSettings.RotateSensitivity', async () => {
146
+ await testWatcherForInteractionSettings('RotateSensitivity', ScanMovementActions.sm10);
159
147
  });
160
148
 
161
- it("scanState.value.InteractionSettings.CameraRotateSensitivity", async () => {
162
- await testWatcherForInteractionSettings(
163
- "CameraRotateSensitivity",
164
- ScanMovementActions.sm12
165
- );
149
+ it('scanState.value.InteractionSettings.CameraRotateSensitivity', async () => {
150
+ await testWatcherForInteractionSettings('CameraRotateSensitivity', ScanMovementActions.sm12);
166
151
  });
167
152
  });
168
153
 
169
- it("watches scanState", () => {
154
+ it('watches scanState', () => {
170
155
  expect(wrapper).toBeTruthy();
171
156
  });
172
157
 
173
- it("windowSlider should be set", () => {
174
- expect(wrapper.vm.windowSlider).toStrictEqual([0, 100]);
175
- });
176
-
177
- it("thresholdSlider should be set", () => {
178
- expect(wrapper.vm.thresholdSlider).toStrictEqual([0, 100]);
179
- });
180
-
181
- it("tSlider should be set", () => {
158
+ it('tSlider should be set', () => {
182
159
  expect(unref(tSlider)).toStrictEqual([0, 0]);
183
160
  });
184
161
 
185
- it("sSlider should be set", () => {
162
+ it('sSlider should be set', () => {
186
163
  expect(unref(sSlider)).toStrictEqual([0, 0]);
187
164
  });
188
165
 
189
- it("cSlider should be set", () => {
166
+ it('cSlider should be set', () => {
190
167
  expect(unref(cSlider)).toStrictEqual([0, 0]);
191
168
  });
192
169
 
193
- it("windowSlider should set", async () => {
170
+ it('windowSlider should set', async () => {
194
171
  const newVals: [number, number] = [20, 20];
195
- wrapper.vm.windowSlider = newVals;
172
+ windowSlider.value = newVals;
196
173
  await flushPromises();
197
- expect(wrapper.vm.windowSlider).toStrictEqual(newVals);
174
+ expect(windowSlider.value).toStrictEqual(newVals);
198
175
  });
199
176
 
200
- it("thresholdSlider should set", async () => {
177
+ it('thresholdSlider should set', async () => {
201
178
  const newVals: [number, number] = [20, 20];
202
- wrapper.vm.thresholdSlider = newVals;
179
+ thresholdSlider.value = newVals;
203
180
  await flushPromises();
204
- expect(wrapper.vm.thresholdSlider).toStrictEqual(newVals);
181
+ expect(thresholdSlider.value).toStrictEqual(newVals);
205
182
  });
206
183
 
207
- it("tSlider should set", async () => {
208
- const newVals = [0, 0];
209
- wrapper.vm.tSlider = newVals;
184
+ it('tSlider should set', async () => {
185
+ const newVals: [number, number] = [0, 0];
186
+ tSlider.value = newVals;
210
187
  await flushPromises();
211
- expect(wrapper.vm.tSlider).toStrictEqual(newVals);
188
+ expect(tSlider.value).toStrictEqual(newVals);
212
189
  });
213
190
 
214
- it("sSlider should set", async () => {
215
- const newVals = [0, 0];
216
- wrapper.vm.sSlider = newVals;
191
+ it('sSlider should set', async () => {
192
+ const newVals: [number, number] = [0, 0];
193
+ sSlider.value = newVals;
217
194
  await flushPromises();
218
- expect(wrapper.vm.sSlider).toStrictEqual(newVals);
195
+ expect(sSlider.value).toStrictEqual(newVals);
219
196
  });
220
197
 
221
- it("cSlider should set", async () => {
222
- const newVals = [0, 0];
223
- wrapper.vm.cSlider = newVals;
198
+ it('cSlider should set', async () => {
199
+ const newVals: [number, number] = [0, 0];
200
+ cSlider.value = newVals;
224
201
  await flushPromises();
225
- expect(wrapper.vm.cSlider).toStrictEqual(newVals);
202
+ expect(cSlider.value).toStrictEqual(newVals);
226
203
  });
227
204
 
228
- it("should isLayout2x2", async () => {
205
+ it('should isLayout2x2', async () => {
229
206
  const scanState = inflateScanState();
230
207
  scanState.Layout.PositionData = [
231
208
  { Anchor: AnchorPoint.TOP_LEFT } as PositionData,
232
209
  { Anchor: AnchorPoint.TOP_RIGHT } as PositionData,
233
210
  { Anchor: AnchorPoint.BOTTOM_LEFT } as PositionData,
234
- { Anchor: AnchorPoint.BOTTOM_RIGHT } as PositionData,
211
+ { Anchor: AnchorPoint.BOTTOM_RIGHT } as PositionData
235
212
  ];
236
213
 
237
214
  setScanState(JSON.stringify(scanState));
@@ -239,13 +216,13 @@ describe("MftpWebGL3DRModal.vue", () => {
239
216
  expect(unref(isLayout1x3)).toBeFalsy();
240
217
  });
241
218
 
242
- it("should isLayout1x3", async () => {
219
+ it('should isLayout1x3', async () => {
243
220
  const scanState = inflateScanState();
244
221
  scanState.Layout.PositionData = [
245
222
  { Anchor: AnchorPoint.CENTER } as PositionData,
246
223
  { Anchor: AnchorPoint.TOP_RIGHT } as PositionData,
247
224
  { Anchor: AnchorPoint.RIGHT } as PositionData,
248
- { Anchor: AnchorPoint.BOTTOM_RIGHT } as PositionData,
225
+ { Anchor: AnchorPoint.BOTTOM_RIGHT } as PositionData
249
226
  ];
250
227
 
251
228
  setScanState(JSON.stringify(scanState));
@@ -254,9 +231,9 @@ describe("MftpWebGL3DRModal.vue", () => {
254
231
  expect(unref(isLayout2x2)).toBeFalsy();
255
232
  });
256
233
 
257
- it("should getCurrentGreyscalePreset", async () => {
234
+ it('should getCurrentGreyscalePreset', async () => {
258
235
  const initial = inflateInitialScanState();
259
- initial.GreyscalePresets = [{ Name: "testing", Lower: 30, Upper: 60, Version: "1.0.0" }];
236
+ initial.GreyscalePresets = [{ Name: 'testing', Lower: 30, Upper: 60, Version: '1.0.0' }];
260
237
  setInitialScanStateFromPayload(JSON.stringify(initial));
261
238
  await flushPromises();
262
239
 
@@ -266,12 +243,12 @@ describe("MftpWebGL3DRModal.vue", () => {
266
243
  setScanState(JSON.stringify(scanState));
267
244
  await flushPromises();
268
245
 
269
- expect(unref(currentGreyscalePreset)?.Name).toBe("testing");
246
+ expect(unref(currentGreyscalePreset)?.Name).toBe('testing');
270
247
  });
271
248
 
272
- it("should getCurrentGreyscalePreset", async () => {
249
+ it('should getCurrentGreyscalePreset', async () => {
273
250
  const initial = inflateInitialScanState();
274
- initial.GreyscalePresets = [{ Name: "testing", Lower: 30, Upper: 60, Version: "1.0.0" }];
251
+ initial.GreyscalePresets = [{ Name: 'testing', Lower: 30, Upper: 60, Version: '1.0.0' }];
275
252
  initial.HuLower = 40;
276
253
  initial.HuUpper = 50;
277
254
  setInitialScanStateFromPayload(JSON.stringify(initial));
@@ -283,12 +260,12 @@ describe("MftpWebGL3DRModal.vue", () => {
283
260
  setScanState(JSON.stringify(scanState));
284
261
  await flushPromises();
285
262
 
286
- expect(unref(currentGreyscalePreset)?.Name).toBe("testing");
263
+ expect(unref(currentGreyscalePreset)?.Name).toBe('testing');
287
264
  });
288
265
 
289
- it("should getCurrentGreyscalePreset", async () => {
266
+ it('should getCurrentGreyscalePreset', async () => {
290
267
  const initial = inflateInitialScanState();
291
- initial.GreyscalePresets = [{ Name: "testing", Lower: 30, Upper: 60, Version: "1.0.0" }];
268
+ initial.GreyscalePresets = [{ Name: 'testing', Lower: 30, Upper: 60, Version: '1.0.0' }];
292
269
  initial.HuLower = 40;
293
270
  initial.HuUpper = 50;
294
271
  setInitialScanStateFromPayload(JSON.stringify(initial));
@@ -303,36 +280,34 @@ describe("MftpWebGL3DRModal.vue", () => {
303
280
  expect(unref(currentGreyscalePreset)).toBe(undefined);
304
281
  });
305
282
 
306
- it("should getCurrentGreyscalePreset", async () => {
283
+ it('should getCurrentGreyscalePreset', async () => {
307
284
  expect(unref(currentGreyscalePreset)).toBe(undefined);
308
285
  });
309
286
 
310
- it("should getViewName 3D Volume", async () => {
311
- expect(wrapper.vm.getViewName(0)).toBe("3D Volume");
312
- });
313
-
314
- it("should getViewName Sagittal", async () => {
315
- expect(wrapper.vm.getViewName(2)).toBe("Sagittal");
316
- });
317
- });
318
-
319
- describe('MftpWebGL3DRModal tests', () => {
320
- it('should mount', () => {
321
- const wrapper = mountVuetify(MftpWebGL3DRModal);
322
- expect(wrapper).toBeTruthy();
323
- });
324
-
325
287
  it('should v-model modals', async () => {
326
- const wrapper = mountVuetify(MftpWebGL3DRModal);
288
+ const wrapper = mount(MftpWebGL3DRModal);
327
289
  const modals = wrapper.findAllComponents(VDialog);
328
290
  for (const modal of modals) {
329
291
  await modal.setValue(false);
330
292
  }
331
293
  });
332
294
 
333
- it('should start introjs', () => {
334
- const wrapper = mountVuetify(MftpWebGL3DRModal);
335
- expect(wrapper.vm.startIntro()).resolves.not.toThrow();
295
+ it('should set 2x2 view', async () => {
296
+ vi.spyOn(Viewer3crService.prototype, 'layouts').mockImplementation(vi.fn());
297
+ await flushPromises();
298
+ await wrapper.findComponent(VDialog).findComponentByTestId<VBtn>('layout-2x2').trigger('click');
299
+ expect(Viewer3crService.prototype.layouts).toHaveBeenCalledWith(LayoutActions.lo02);
300
+ });
301
+
302
+ it('should set 1x3 view', async () => {
303
+ vi.spyOn(Viewer3crService.prototype, 'layouts').mockImplementation(vi.fn());
304
+ await flushPromises();
305
+ await wrapper.findComponentByTestId('layout-1x3').trigger('click');
306
+ expect(Viewer3crService.prototype.layouts).toHaveBeenCalledWith(LayoutActions.lo03);
307
+ });
308
+
309
+ it('should set settings-menu model', async () => {
310
+ await wrapper.findComponent(SettingsMenu).setValue(false);
336
311
  });
337
312
  });
338
313
 
@@ -345,13 +320,13 @@ async function testWatcherForDisplay(key: string, action: SlidersActions, not: b
345
320
 
346
321
  if (not) {
347
322
  expect(spy).not.toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
348
- Version: "0.0.1",
349
- Value: (scanState.Display as any)[key],
323
+ Version: '0.0.1',
324
+ Value: (scanState.Display as any)[key]
350
325
  });
351
326
  } else {
352
327
  expect(spy).toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
353
- Version: "0.0.1",
354
- Value: (scanState.Display as any)[key],
328
+ Version: '0.0.1',
329
+ Value: (scanState.Display as any)[key]
355
330
  });
356
331
  }
357
332
  }
@@ -366,13 +341,13 @@ async function testWatcherForSlice(key: string, action: SlidersActions, not: boo
366
341
 
367
342
  if (not) {
368
343
  expect(spy).not.toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
369
- Version: "0.0.1",
370
- Value: (scanState.Slice as any)[key],
344
+ Version: '0.0.1',
345
+ Value: (scanState.Slice as any)[key]
371
346
  });
372
347
  } else {
373
348
  expect(spy).toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
374
- Version: "0.0.1",
375
- Value: (scanState.Slice as any)[key],
349
+ Version: '0.0.1',
350
+ Value: (scanState.Slice as any)[key]
376
351
  });
377
352
  }
378
353
  }
@@ -386,13 +361,13 @@ async function testWatcherForOrientation(key: string, action: SlidersActions, no
386
361
  await flushPromises();
387
362
  if (not) {
388
363
  expect(spy).not.toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
389
- Version: "0.0.1",
390
- Value: (scanState.Orientations as any)[key].Slice,
364
+ Version: '0.0.1',
365
+ Value: (scanState.Orientations as any)[key].Slice
391
366
  });
392
367
  } else {
393
368
  expect(spy).toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
394
- Version: "0.0.1",
395
- Value: (scanState.Orientations as any)[key].Slice,
369
+ Version: '0.0.1',
370
+ Value: (scanState.Orientations as any)[key].Slice
396
371
  });
397
372
  }
398
373
  }
@@ -405,18 +380,14 @@ async function testWatcherForInteractionSettings(key: string, action: ScanMoveme
405
380
 
406
381
  await flushPromises();
407
382
  if (not) {
408
- expect(spy).not.toHaveBeenCalledWith(
409
- FrontEndInterfaces.scan_movement,
410
- action,
411
- {
412
- Version: "0.0.1",
413
- Value: (scanState.InteractionSettings as any)[key],
414
- }
415
- );
383
+ expect(spy).not.toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, action, {
384
+ Version: '0.0.1',
385
+ Value: (scanState.InteractionSettings as any)[key]
386
+ });
416
387
  } else {
417
388
  expect(spy).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, action, {
418
- Version: "0.0.1",
419
- Value: (scanState.InteractionSettings as any)[key],
389
+ Version: '0.0.1',
390
+ Value: (scanState.InteractionSettings as any)[key]
420
391
  });
421
392
  }
422
393
  }
@@ -0,0 +1,11 @@
1
+ import { ScanView } from '@3cr/types-ts';
2
+ import { mount } from '@vue/test-utils';
3
+ import ViewerActionRail from '@/components/modal/ViewerActionRail.vue';
4
+
5
+ describe('ViewerActionRail tests', () => {
6
+ it('should mount', () => {
7
+ const props = { view: ScanView.Volume, element: document.body };
8
+ const wrapper = mount(ViewerActionRail, { props });
9
+ expect(wrapper).toBeTruthy();
10
+ });
11
+ });
@@ -1,26 +1,24 @@
1
- import { describe, it, expect } from "vitest";
2
- import { VApp } from "vuetify/components";
3
- import { h } from "vue";
4
- import { VueWrapper, mount } from "@vue/test-utils";
5
- import { createVuetify } from "vuetify";
6
- import { demoOptions } from "@/components/demo/options";
7
- import ViewerNavigationDrawer from "@/components/modal/ViewerNavigationDrawer.vue";
1
+ import { VApp } from 'vuetify/components';
2
+ import { h } from 'vue';
3
+ import { VueWrapper, mount, flushPromises } from '@vue/test-utils';
4
+ import ViewerNavigationDrawer from '@/components/modal/ViewerNavigationDrawer.vue';
8
5
 
9
6
  function factory(component: any, props?: Record<string, any>): VueWrapper {
10
7
  return mount(VApp, {
11
- slots: { default: h(component, props) },
12
- global: { plugins: [createVuetify({})] },
8
+ slots: { default: h(component, props) }
13
9
  });
14
10
  }
15
11
 
16
12
  describe('ViewerNavigationDrawer tests', () => {
17
- it('should mount', () => {
18
- const wrapper = factory(ViewerNavigationDrawer, { options: demoOptions.value, drawer: true });
13
+ it('should mount', async () => {
14
+ const wrapper = factory(ViewerNavigationDrawer, { drawer: true });
15
+ await flushPromises();
19
16
  expect(wrapper).toBeTruthy();
20
17
  });
21
18
 
22
19
  it('should toggle drawer', async () => {
23
- const wrapper = factory(ViewerNavigationDrawer, { options: demoOptions.value, drawer: false });
20
+ const wrapper = factory(ViewerNavigationDrawer, { drawer: false });
21
+ await flushPromises();
24
22
  const nav = wrapper.findComponent(ViewerNavigationDrawer);
25
23
  expect(nav.vm.drawer).toBeFalsy();
26
24
  const toggle = nav.findComponent('[data-testid="toggle"]');
@@ -1,29 +1,11 @@
1
- import {describe, it, expect, vi} from "vitest";
2
- import { mountVuetify } from "~/helper";
3
- import { demoOptions } from "@/components/demo/options";
4
- import { isSessionLoaded } from "@/dataLayer/scanState";
5
- import ViewerNavigationDrawerContent from "../ViewerNavigationDrawerContent.vue";
6
- import {flushPromises} from "@vue/test-utils";
1
+ import { demoOptions } from '@/components/demo/options';
2
+ import { mount } from '@vue/test-utils';
3
+ import ViewerNavigationDrawerContent from '@/components/modal/ViewerNavigationDrawerContent.vue';
7
4
 
8
5
  describe('ViewerNavigationDrawerContent tests', () => {
9
6
  it('should mount', () => {
10
7
  const props = { drawer: false, options: demoOptions.value };
11
- const wrapper = mountVuetify(ViewerNavigationDrawerContent, props);
8
+ const wrapper = mount(ViewerNavigationDrawerContent, { props });
12
9
  expect(wrapper).toBeTruthy();
13
10
  });
14
-
15
- it('should expand', async () => {
16
- vi.spyOn(isSessionLoaded, 'value', 'get').mockReturnValue(true);
17
- const props = { drawer: true, options: demoOptions.value };
18
- const wrapper = mountVuetify(ViewerNavigationDrawerContent, props);
19
- const panel0 = wrapper.findComponent('[data-testid="panel-0"]');
20
- await panel0.trigger('click');
21
- await flushPromises();
22
- expect(panel0.isVisible()).toBeTruthy();
23
-
24
- const panel1 = wrapper.findComponent('[data-testid="panel-1"]');
25
- await panel1.trigger('click')
26
- await flushPromises();
27
- expect(panel1.isVisible()).toBeTruthy();
28
- });
29
11
  });