@3cr/viewer-browser 0.0.200 → 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 +22625 -20892
  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 -111
  273. package/src/components/modal/ViewerAnnotations.vue +0 -289
  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 -35
  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,20 +1,23 @@
1
- import {beforeEach, describe, expect, it, MockInstance, vi} from "vitest";
2
- import {emptyPayload, Viewer3cr} from "@/dataLayer/viewer3cr";
3
- import {unref} from "vue";
1
+ import { emptyPayload, Viewer3crService } from '@/services/viewer-3cr.service';
2
+ import { unref } from 'vue';
4
3
  import {
5
4
  AnchorPoint,
6
- DataOverlayActions,
7
- FrontEndInterfaces, InteractivityActions,
8
- LayoutActions, NavigationCubeActions,
5
+ DataOverlaysActions,
6
+ FrontEndInterfaces,
7
+ InteractivityActions,
8
+ LayoutActions,
9
+ MarkupsActions,
10
+ McadActions,
11
+ NavigationCubeActions,
9
12
  PresetsActions,
10
13
  ScanMovementActions,
11
14
  ScanOrientationActions,
12
15
  ScanView,
13
- SlidersActions,
14
- } from "@3cr/types-ts";
15
- import {toNumber} from "@/helpers/utils";
16
- import {currentColourPreset, previousLayout, transactionStarted,} from "@/dataLayer/scanState";
17
- import {useViewer3cr} from "@/dataLayer/useViewer3cr";
16
+ SlidersActions
17
+ } from '@3cr/types-ts';
18
+ import { currentColourPreset, previousLayout, transactionStarted } from '@/models/scanState';
19
+ import { useViewer3cr } from '@/composables/useViewer3cr';
20
+ import { MockInstance } from 'vitest';
18
21
 
19
22
  describe('Viewer3cr tests', () => {
20
23
  const viewer3cr = useViewer3cr();
@@ -22,7 +25,7 @@ describe('Viewer3cr tests', () => {
22
25
  let sendPayload: MockInstance;
23
26
 
24
27
  beforeEach(() => {
25
- sendPayload = vi.spyOn(Viewer3cr.prototype, 'sendPayload').mockResolvedValue();
28
+ sendPayload = vi.spyOn(Viewer3crService.prototype, 'sendPayload').mockResolvedValue();
26
29
  });
27
30
 
28
31
  it('should create instance', () => {
@@ -31,8 +34,9 @@ describe('Viewer3cr tests', () => {
31
34
 
32
35
  describe('data overlay actions', () => {
33
36
  it('should toggle 2d annotation', async () => {
34
- await viewer3cr.toggle2dAnnotation('test', true);
35
- expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.data_overlay, DataOverlayActions.do03, {
37
+ const value = { Id: 'test', Visibility: true };
38
+ await viewer3cr.toggle2dAnnotation(value);
39
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.data_overlay, DataOverlaysActions.do03, {
36
40
  Version: expect.any(String),
37
41
  Id: 'test',
38
42
  Visibility: true
@@ -40,8 +44,9 @@ describe('Viewer3cr tests', () => {
40
44
  });
41
45
 
42
46
  it('should toggle 3d annotation', async () => {
43
- await viewer3cr.toggle3dAnnotation('test', true);
44
- expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.data_overlay, DataOverlayActions.do11, {
47
+ const value = { Id: 'test', Visibility: true };
48
+ await viewer3cr.toggle3dAnnotation(value);
49
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.data_overlay, DataOverlaysActions.do11, {
45
50
  Version: expect.any(String),
46
51
  Id: 'test',
47
52
  Visibility: true
@@ -85,6 +90,62 @@ describe('Viewer3cr tests', () => {
85
90
  });
86
91
  });
87
92
 
93
+ describe('mcad actions', () => {
94
+ it('should set mcad object visibility', async () => {
95
+ const value = { Version: '1.2.0', Id: 'test', Visibility: true };
96
+ await viewer3cr.setMcadObjectVisibility(value);
97
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.mcad, McadActions.mc03, value);
98
+ });
99
+
100
+ it('should set mcad object colour', async () => {
101
+ const value = { Version: '1.2.0', Id: 'test', Colour: { Version: '1.2.0', R: 0, G: 0, B: 0, A: 0 } };
102
+ await viewer3cr.setMcadObjectColour(value);
103
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.mcad, McadActions.mc04, value);
104
+ });
105
+
106
+ it('should toggle mcad object movement', async () => {
107
+ const value = { Version: '1.2.0', Id: 'test', Value: true };
108
+ await viewer3cr.moveMcadObject(value);
109
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.mcad, McadActions.mc05, value);
110
+ });
111
+
112
+ it('should toggle mcad inversion', async () => {
113
+ const value = {
114
+ Version: '1.2.0',
115
+ Id: 'test',
116
+ Inverted: { Version: '1.2.0', InvertedSagittal: true, InvertedCoronal: true, InvertedTransverse: true }
117
+ };
118
+ await viewer3cr.invertMcadObject(value);
119
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.mcad, McadActions.mc16, value);
120
+ });
121
+ });
122
+
123
+ describe('markup actions', () => {
124
+ it('should set markup visibility', async () => {
125
+ const value = { Version: '1.2.1', Id: 'test', Visibility2d: false, Visibility3d: false };
126
+ await viewer3cr.setMarkupVisibility(value.Id, value.Visibility2d);
127
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.markups, MarkupsActions.mu16, [value]);
128
+ });
129
+
130
+ it('should toggle length tool', async () => {
131
+ const value = { Version: '1.2.0', Value: true };
132
+ await viewer3cr.lengthTool(value);
133
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.markups, MarkupsActions.mu20, value);
134
+ });
135
+
136
+ it('should toggle polygon tool', async () => {
137
+ const value = { Version: '1.2.0', Value: true };
138
+ await viewer3cr.polygonTool(value);
139
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.markups, MarkupsActions.mu21, value);
140
+ });
141
+
142
+ it('should toggle angle tool', async () => {
143
+ const value = { Version: '1.2.0', Value: true };
144
+ await viewer3cr.angleTool(value);
145
+ expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.markups, MarkupsActions.mu22, value);
146
+ });
147
+ });
148
+
88
149
  describe('navigation actions', () => {
89
150
  it('should set nav cube position', async () => {
90
151
  await viewer3cr.setNavCubePositionSize(AnchorPoint.TOP_LEFT, 10, 10, 100, 100);
@@ -146,9 +207,9 @@ describe('Viewer3cr tests', () => {
146
207
  });
147
208
 
148
209
  describe('preset actions', () => {
149
- it("should set setPreset", async () => {
210
+ it('should set setPreset', async () => {
150
211
  const action = PresetsActions.pr01;
151
- const data = { asd: "123" };
212
+ const data = { asd: '123' };
152
213
  expect(sendPayload).not.toHaveBeenCalled();
153
214
  expect(unref(currentColourPreset)).not.toBe(data);
154
215
  await viewer3cr.setPreset(action, data);
@@ -156,9 +217,9 @@ describe('Viewer3cr tests', () => {
156
217
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.presets, action, data);
157
218
  });
158
219
 
159
- it("should set setPreset change colour", async () => {
220
+ it('should set setPreset change colour', async () => {
160
221
  const action = PresetsActions.pr02;
161
- const data = { asd: "123", };
222
+ const data = { asd: '123' };
162
223
  expect(sendPayload).not.toHaveBeenCalled();
163
224
  expect(unref(currentColourPreset)).not.toBe(data);
164
225
  await viewer3cr.setPreset(action, data);
@@ -168,18 +229,18 @@ describe('Viewer3cr tests', () => {
168
229
  });
169
230
 
170
231
  describe('scan movement actions', () => {
171
- it("should scanMovementHandler", async () => {
232
+ it('should scanMovementHandler', async () => {
172
233
  const action = ScanMovementActions.sm05;
173
234
  const value = 100;
174
235
  expect(sendPayload).not.toHaveBeenCalled();
175
236
  await viewer3cr.scanMovementHandler(action, value);
176
237
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, action, {
177
238
  Version: expect.any(String),
178
- Value: toNumber(value),
239
+ Value: value
179
240
  });
180
241
  });
181
242
 
182
- it("should not scanMovementHandler transactionStarted", async () => {
243
+ it('should not scanMovementHandler transactionStarted', async () => {
183
244
  transactionStarted.value = true;
184
245
  const action = ScanMovementActions.sm05;
185
246
  const value = 100;
@@ -187,7 +248,7 @@ describe('Viewer3cr tests', () => {
187
248
  await viewer3cr.scanMovementHandler(action, value);
188
249
  expect(sendPayload).not.toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, action, {
189
250
  Version: expect.any(String),
190
- Value: toNumber(value),
251
+ Value: value
191
252
  });
192
253
  });
193
254
 
@@ -198,7 +259,7 @@ describe('Viewer3cr tests', () => {
198
259
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, ScanMovementActions.sm13, {
199
260
  Version: expect.any(String),
200
261
  View: view,
201
- Movement: movement,
262
+ Movement: movement
202
263
  });
203
264
  });
204
265
 
@@ -209,7 +270,7 @@ describe('Viewer3cr tests', () => {
209
270
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, ScanMovementActions.sm14, {
210
271
  Version: expect.any(String),
211
272
  View: view,
212
- Movement: movement,
273
+ Movement: movement
213
274
  });
214
275
  });
215
276
 
@@ -220,7 +281,7 @@ describe('Viewer3cr tests', () => {
220
281
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, ScanMovementActions.sm15, {
221
282
  Version: expect.any(String),
222
283
  View: view,
223
- Movement: movement,
284
+ Movement: movement
224
285
  });
225
286
  });
226
287
 
@@ -231,7 +292,7 @@ describe('Viewer3cr tests', () => {
231
292
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, ScanMovementActions.sm16, {
232
293
  Version: expect.any(String),
233
294
  View: view,
234
- Movement: movement,
295
+ Movement: movement
235
296
  });
236
297
  });
237
298
 
@@ -242,7 +303,7 @@ describe('Viewer3cr tests', () => {
242
303
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, ScanMovementActions.sm17, {
243
304
  Version: expect.any(String),
244
305
  View: view,
245
- Movement: movement,
306
+ Movement: movement
246
307
  });
247
308
  });
248
309
 
@@ -253,13 +314,13 @@ describe('Viewer3cr tests', () => {
253
314
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_movement, ScanMovementActions.sm18, {
254
315
  Version: expect.any(String),
255
316
  View: view,
256
- Movement: movement,
317
+ Movement: movement
257
318
  });
258
319
  });
259
320
  });
260
321
 
261
322
  describe('scan orientation actions', () => {
262
- it("should rotateByDeg", async () => {
323
+ it('should rotateByDeg', async () => {
263
324
  const view = ScanView.Coronal;
264
325
  const deg = 100;
265
326
  expect(sendPayload).not.toHaveBeenCalled();
@@ -267,7 +328,7 @@ describe('Viewer3cr tests', () => {
267
328
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so01, {
268
329
  Version: expect.any(String),
269
330
  View: view,
270
- Angle: deg,
331
+ Angle: deg
271
332
  });
272
333
  });
273
334
 
@@ -305,18 +366,18 @@ describe('Viewer3cr tests', () => {
305
366
  transactionStarted.value = false;
306
367
  });
307
368
 
308
- it("should sliderHandler", async () => {
369
+ it('should sliderHandler', async () => {
309
370
  const action = SlidersActions.sl08;
310
371
  const value = 100;
311
372
  expect(sendPayload).not.toHaveBeenCalled();
312
373
  await viewer3cr.sliderHandler(action, value);
313
374
  expect(sendPayload).toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
314
375
  Version: expect.any(String),
315
- Value: toNumber(value),
376
+ Value: value
316
377
  });
317
378
  });
318
379
 
319
- it("should not sliderHandler transactionStarted", async () => {
380
+ it('should not sliderHandler transactionStarted', async () => {
320
381
  transactionStarted.value = true;
321
382
  const action = SlidersActions.sl08;
322
383
  const value = 100;
@@ -324,7 +385,7 @@ describe('Viewer3cr tests', () => {
324
385
  await viewer3cr.sliderHandler(action, value);
325
386
  expect(sendPayload).not.toHaveBeenCalledWith(FrontEndInterfaces.sliders, action, {
326
387
  Version: expect.any(String),
327
- Value: toNumber(value),
388
+ Value: value
328
389
  });
329
390
  });
330
391
  });
@@ -0,0 +1,17 @@
1
+ import axios, { AxiosInstance, AxiosResponse } from 'axios';
2
+ import { GptResponsePayload } from '@/types/gpt-response-payload';
3
+
4
+ export class GptService {
5
+ static Instantiate() {
6
+ return new GptService();
7
+ }
8
+
9
+ client: AxiosInstance = axios.create();
10
+
11
+ async GenerateAnnotations(title: string, question: number = 0): Promise<AxiosResponse<GptResponsePayload>> {
12
+ const testVersion = window.location.href.includes('test.') || window.location.href.includes('localhost');
13
+ return this.client.post(`https://${testVersion ? 'test.' : ''}api.singular.health/api/GPT/Smart/Annotation`, null, {
14
+ params: { annotationTitle: title, question }
15
+ });
16
+ }
17
+ }
@@ -0,0 +1,16 @@
1
+ export class ServiceWorkerService {
2
+ static Instantiate() {
3
+ return new ServiceWorkerService();
4
+ }
5
+
6
+ async getRegistration(): Promise<ServiceWorkerRegistration | undefined> {
7
+ if (ServiceWorkerService.canServiceWork()) {
8
+ return await navigator.serviceWorker.getRegistration('/app');
9
+ }
10
+ return undefined;
11
+ }
12
+
13
+ private static canServiceWork(): boolean {
14
+ return 'serviceWorker' in navigator;
15
+ }
16
+ }