@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,27 +1,49 @@
1
- import { FrontEndPayload } from "@3cr/sdk-browser/types/payload";
2
- import { createInstance, executePayload, registerOnPayloadHandler } from "@3cr/sdk-browser";
3
- import { unref } from "vue";
1
+ import { createInstance, executePayload, registerOnPayloadHandler } from '@3cr/sdk-browser';
2
+ import { unref } from 'vue';
4
3
  import {
5
4
  AnchorPoint,
6
- DataOverlayActions,
5
+ DataOverlaysActions,
7
6
  FileManagementActions,
8
- FrontEndInterfaces, InteractivityActions, LayoutActions, NavigationCubeActions, PresetsActions, ScanMovementActions,
7
+ FrontEndInterfaces,
8
+ InteractivityActions,
9
+ LayoutActions,
10
+ NavigationCubeActions,
11
+ PresetsActions,
12
+ ScanMovementActions,
9
13
  ScanOrientationActions,
10
- ScanView, SlidersActions, ViewSelectionActions
11
- } from "@3cr/types-ts";
12
- import { LoadViewerPayload } from "@/models/LoadViewerPayload";
13
- import { currentColourPreset, previousLayout, transactionStarted } from "@/dataLayer/scanState";
14
- import { toNumber } from "@/helpers/utils";
15
- import { EventHandlers } from "@/dataLayer/eventHandlers";
16
- import { clamp } from "@/dataLayer/clamp";
17
-
18
- type InterfaceCallback = (message: string, action: string) => void | Promise<void>;
19
-
20
- type ActionCallback = (message: string) => void | Promise<void>;
21
-
22
- export const emptyPayload = { Version: "1.1.0" };
23
-
24
- export class Viewer3cr {
14
+ ScanView,
15
+ SlidersActions,
16
+ ViewSelectionActions,
17
+ FrontEndPayload,
18
+ InteractivityState,
19
+ MarkupsActions,
20
+ McadActions,
21
+ ObjectBoolean,
22
+ ObjectColour,
23
+ ObjectInvert,
24
+ ObjectVisibility,
25
+ ViewToggleData
26
+ } from '@3cr/types-ts';
27
+ import { LoadViewerPayload } from '@/models/loadViewerPayload';
28
+ import { currentColourPreset, previousLayout, transactionStarted } from '@/models/scanState';
29
+ import { EventHandlers } from '@/models/eventHandlers';
30
+ import { clamp } from '@/functions/clamp';
31
+ import { LoadSessionState } from '@3cr/types-ts/types/LoadSessionState';
32
+
33
+ type InterfaceCallback = (
34
+ message: string,
35
+ action: string,
36
+ returnChannel: string,
37
+ returnTo: string
38
+ ) => void | Promise<void>;
39
+
40
+ type ActionCallback = (message: string, returnChannel: string, returnTo: string) => void | Promise<void>;
41
+
42
+ export const emptyPayload = { Version: '1.1.0' };
43
+
44
+ type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
45
+
46
+ export class Viewer3crService {
25
47
  private interfaceCallbacks = new EventHandlers<string, InterfaceCallback>();
26
48
 
27
49
  private actionCallbacks = new EventHandlers<string, ActionCallback>();
@@ -48,29 +70,21 @@ export class Viewer3cr {
48
70
  }
49
71
 
50
72
  /**
51
- * DO-02: Toggle 2D annotation visibility.
52
- * @param id The annotation id.
53
- * @param visibility The annotation visibility.
73
+ * DO-03: Toggle 2D annotation visibility.
74
+ * @param value The object visibility
54
75
  */
55
- async toggle2dAnnotation(id: string, visibility: boolean): Promise<void> {
56
- await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlayActions.do03, {
57
- Version: '1.1.0',
58
- Id: id,
59
- Visibility: visibility
60
- });
76
+ async toggle2dAnnotation(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
77
+ value.Version ??= '1.1.0';
78
+ await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlaysActions.do03, value);
61
79
  }
62
80
 
63
81
  /**
64
82
  * DO-11: Toggle 3D annotation visibility.
65
- * @param id The annotation id.
66
- * @param visibility The annotation visibility.
67
- */
68
- async toggle3dAnnotation(id: string, visibility: boolean): Promise<void> {
69
- await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlayActions.do11, {
70
- Version: '1.1.0',
71
- Id: id,
72
- Visibility: visibility
73
- });
83
+ * @param value The object visibility
84
+ */
85
+ async toggle3dAnnotation(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
86
+ value.Version ??= '1.1.0';
87
+ await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlaysActions.do11, value);
74
88
  }
75
89
 
76
90
  /**
@@ -83,96 +97,60 @@ export class Viewer3cr {
83
97
 
84
98
  /**
85
99
  * FM-03: Load previous CurrentScanState values.
86
- * @param url The URL to the file.
87
- */
88
- async loadScanSession(url: string): Promise<void> {
89
- await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm03, {
90
- Version: '1.1.0',
91
- Url: url
92
- });
93
- }
94
-
95
- /**
96
- * FM-05: Load separate data overlay file from external UI.
97
- * @param url The URL to the file.
98
- */
99
- async loadDataOverlay(url: string): Promise<void> {
100
- await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm05, {
101
- Version: '1.1.0',
102
- Url: url
103
- });
104
- }
105
-
106
- /**
107
- * FM-09: Load separate MCAD file from external UI.
108
- * @param url The URL to the file.
100
+ * @param value The URL to the file.
109
101
  */
110
- async loadMcad(url: string): Promise<void> {
111
- await this.sendPayload(FrontEndInterfaces.file_management, 'fm_09', {
112
- Version: '1.1.0',
113
- Url: url
114
- });
102
+ async loadScanSession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
103
+ value.Version ??= '1.1.0';
104
+ await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm03, value);
115
105
  }
116
106
 
117
107
  /**
118
- * SO-01: Rotate 2D view by up to +-XXX degrees.
119
- * @param view The 2D view.
120
- * @param deg The degrees.
108
+ * FM-05: Sets the data overlay session with the given session file.
109
+ * This will clear all previously loaded data overlay sessions.
110
+ * @param value The URL to the file.
121
111
  */
122
- async rotateByDeg(view: ScanView, deg: number) {
123
- await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so01, {
124
- Version: "0.0.1",
125
- View: view,
126
- Angle: deg,
127
- });
112
+ async setDataOverlaySession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
113
+ value.Version ??= '1.1.0';
114
+ await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm05, value);
128
115
  }
129
116
 
130
117
  /**
131
- * SO-02: Flip 2D View Horizontally.
132
- * @param view The scan view.
133
- * @param flipped Whether to enable horizontal flip.
118
+ * FM-06: Adds a data overlay session to existing sessions.
119
+ * @param value The URL to the file.
134
120
  */
135
- async flipHorizontally(view: ScanView, flipped: boolean): Promise<void> {
136
- await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so02, {
137
- Version: "0.0.1",
138
- View: view,
139
- Flipped: flipped
140
- })
121
+ async addDataOverlaySession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
122
+ value.Version ??= '1.1.0';
123
+ await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm06, value);
141
124
  }
142
125
 
143
126
  /**
144
- * SO-03: Flip 2D View Vertically.
145
- * @param view The scan view.
146
- * @param flipped Whether to enable vertical flip.
147
- */
148
- async flipVertically(view: ScanView, flipped: boolean): Promise<void> {
149
- await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so03, {
150
- Version: "0.0.1",
151
- View: view,
152
- Flipped: flipped
153
- });
154
- }
155
-
156
- /**
157
- * SO-04: Invert Volume Rendering
158
- * @param sagittal If the Sagittal axis is inverted.
159
- * @param coronal If the Coronal axis is inverted.
160
- * @param transverse If the Transverse axis is inverted.
127
+ * FM-09: Load separate MCAD file from external UI.
128
+ * @param value The URL to the file.
129
+ * @param returnChannel The return channel.
130
+ * @param returnTo The return to id.
161
131
  */
162
- async invertTransform(sagittal: boolean, coronal: boolean, transverse: boolean): Promise<void> {
163
- // TODO: Replace so_04 with action type constant
164
- await this.sendPayload(FrontEndInterfaces.scan_orientation, 'so_04', {
165
- Version: "0.0.1",
166
- InvertedSagittal: sagittal,
167
- InvertedCoronal: coronal,
168
- InvertedTransverse: transverse
169
- });
132
+ async loadMcadObjects(
133
+ value?: Optional<LoadSessionState, 'Version'>,
134
+ returnChannel?: string[],
135
+ returnTo?: string
136
+ ): Promise<void> {
137
+ await this.sendPayload(
138
+ FrontEndInterfaces.file_management,
139
+ FileManagementActions.fm09,
140
+ value,
141
+ returnChannel,
142
+ returnTo
143
+ );
170
144
  }
171
145
 
172
146
  async viewSelection(action: ViewSelectionActions) {
173
147
  await this.sendPayload(FrontEndInterfaces.view_selection, action, emptyPayload);
174
148
  }
175
149
 
150
+ async viewSelectionToggleView(payload: Optional<ViewToggleData, 'Version'>) {
151
+ await this.sendPayload(FrontEndInterfaces.view_selection, ViewSelectionActions.vs07, payload);
152
+ }
153
+
176
154
  async sliderHandler(action: SlidersActions, value: number) {
177
155
  if (unref(transactionStarted)) return;
178
156
  await this.slider(action, value);
@@ -195,6 +173,79 @@ export class Viewer3cr {
195
173
  }
196
174
  }
197
175
 
176
+ /**
177
+ * MC-03: Set visibility of MCAD objects.
178
+ * @param value The object visibility value.
179
+ */
180
+ async setMcadObjectVisibility(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
181
+ value.Version ??= '1.2.0';
182
+ await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc03, value);
183
+ }
184
+
185
+ /**
186
+ * MC-04: Set colour & opacity of MCAD objects.
187
+ * @param value The colour & opacity value.
188
+ */
189
+ async setMcadObjectColour(value: Optional<ObjectColour, 'Version'>): Promise<void> {
190
+ value.Version ??= '1.2.0';
191
+ await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc04, value);
192
+ }
193
+
194
+ /**
195
+ * MC-05: Enables movement of MCAD objects.
196
+ * @param value The movement toggle.
197
+ */
198
+ async moveMcadObject(value: Optional<ObjectBoolean, 'Version'>): Promise<void> {
199
+ value.Version ??= '1.2.0';
200
+ await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc05, value);
201
+ }
202
+
203
+ /**
204
+ * MC-16: Invert MCAD objects.
205
+ * @param value The inversion state.
206
+ */
207
+ async invertMcadObject(value: Optional<ObjectInvert, 'Version'>): Promise<void> {
208
+ value.Version ??= '1.2.0';
209
+ await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc16, value);
210
+ }
211
+
212
+ /**
213
+ * MU-16: Set 2D/3D visibility of markups.
214
+ * @param id The markup id.
215
+ * @param visibility The visibility state.
216
+ */
217
+ async setMarkupVisibility(id: string, visibility: boolean): Promise<void> {
218
+ const payload = { Version: '1.2.1', Id: id, Visibility2d: visibility, Visibility3d: visibility };
219
+ await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu16, [payload]);
220
+ }
221
+
222
+ /**
223
+ * MU-20: 2D length tool.
224
+ * @param value If the length tool should be enabled.
225
+ */
226
+ async lengthTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
227
+ value.Version ??= '1.2.0';
228
+ await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu20, value);
229
+ }
230
+
231
+ /**
232
+ * MU-21: 2D polygon tool.
233
+ * @param value If the polygon tool should be enabled.
234
+ */
235
+ async polygonTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
236
+ value.Version ??= '1.2.0';
237
+ await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu21, value);
238
+ }
239
+
240
+ /**
241
+ * MU-22: 2D angle tool.
242
+ * @param value If the angle tool should be enabled.
243
+ */
244
+ async angleTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
245
+ value.Version ??= '1.2.0';
246
+ await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu22, value);
247
+ }
248
+
198
249
  /**
199
250
  * NC-01: Set Navigation Cube Co-ordinates and Size.
200
251
  * @param anchorPoint The anchor point on the screen.
@@ -203,7 +254,13 @@ export class Viewer3cr {
203
254
  * @param width The navigation cube width.
204
255
  * @param height The navigation cube height.
205
256
  */
206
- async setNavCubePositionSize(anchorPoint: AnchorPoint, x: number, y: number, width: number, height: number): Promise<void> {
257
+ async setNavCubePositionSize(
258
+ anchorPoint: AnchorPoint,
259
+ x: number,
260
+ y: number,
261
+ width: number,
262
+ height: number
263
+ ): Promise<void> {
207
264
  await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc01, {
208
265
  Version: '0.0.1',
209
266
  AnchorPoint: anchorPoint,
@@ -218,8 +275,8 @@ export class Viewer3cr {
218
275
  */
219
276
  async setNavCubeVisibility(visibility: boolean): Promise<void> {
220
277
  await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc02, {
221
- Version: "0.0.1",
222
- Value: visibility,
278
+ Version: '0.0.1',
279
+ Value: visibility
223
280
  });
224
281
  }
225
282
 
@@ -254,8 +311,7 @@ export class Viewer3cr {
254
311
  * @param a Alpha channel.
255
312
  */
256
313
  async setNavCubeColourOpacity(r: number, g: number, b: number, a: number): Promise<void> {
257
- // TODO: Replace nc_05 with action type constant
258
- await this.sendPayload(FrontEndInterfaces.navigation_cube, 'nc_05', {
314
+ await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc05, {
259
315
  Version: '0.0.1',
260
316
  R: clamp(r / 255, 0, 1),
261
317
  G: clamp(g / 255, 0, 1),
@@ -273,8 +329,7 @@ export class Viewer3cr {
273
329
  * @param a Alpha channel.
274
330
  */
275
331
  async setNavCubeHighlightColourOpacity(r: number, g: number, b: number, a: number): Promise<void> {
276
- // TODO: Replace nc_07 with action type constant
277
- await this.sendPayload(FrontEndInterfaces.navigation_cube, 'nc_07', {
332
+ await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc07, {
278
333
  Version: '0.0.1',
279
334
  R: clamp(r / 255, 0, 1),
280
335
  G: clamp(g / 255, 0, 1),
@@ -289,11 +344,10 @@ export class Viewer3cr {
289
344
  * @param value The movement in mm.
290
345
  */
291
346
  async panLeft(view: ScanView, value: number): Promise<void> {
292
- // TODO: Replace sm_13 with action type constant
293
- await this.sendPayload(FrontEndInterfaces.scan_movement, "sm_13", {
294
- Version: "0.0.1",
347
+ await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm13, {
348
+ Version: '0.0.1',
295
349
  View: view,
296
- Movement: value,
350
+ Movement: value
297
351
  });
298
352
  }
299
353
 
@@ -303,11 +357,10 @@ export class Viewer3cr {
303
357
  * @param value The movement in mm.
304
358
  */
305
359
  async panRight(view: ScanView, value: number): Promise<void> {
306
- // TODO: Replace sm_14 with action type constant
307
- await this.sendPayload(FrontEndInterfaces.scan_movement, "sm_14", {
308
- Version: "0.0.1",
360
+ await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm14, {
361
+ Version: '0.0.1',
309
362
  View: view,
310
- Movement: value,
363
+ Movement: value
311
364
  });
312
365
  }
313
366
 
@@ -317,11 +370,10 @@ export class Viewer3cr {
317
370
  * @param value The movement in mm.
318
371
  */
319
372
  async panUp(view: ScanView, value: number): Promise<void> {
320
- // TODO: Replace sm_15 with action type constant
321
- await this.sendPayload(FrontEndInterfaces.scan_movement, "sm_15", {
322
- Version: "0.0.1",
373
+ await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm15, {
374
+ Version: '0.0.1',
323
375
  View: view,
324
- Movement: value,
376
+ Movement: value
325
377
  });
326
378
  }
327
379
 
@@ -331,11 +383,10 @@ export class Viewer3cr {
331
383
  * @param value The movement in mm.
332
384
  */
333
385
  async panDown(view: ScanView, value: number): Promise<void> {
334
- // TODO: Replace sm_16 with action type constant
335
- await this.sendPayload(FrontEndInterfaces.scan_movement, "sm_16", {
336
- Version: "0.0.1",
386
+ await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm16, {
387
+ Version: '0.0.1',
337
388
  View: view,
338
- Movement: value,
389
+ Movement: value
339
390
  });
340
391
  }
341
392
 
@@ -345,8 +396,8 @@ export class Viewer3cr {
345
396
  * @param value The amount to zoom in.
346
397
  */
347
398
  async zoomIn(view: ScanView, value: number): Promise<void> {
348
- await this.sendPayload(FrontEndInterfaces.scan_movement, "sm_17", {
349
- Version: "0.0.1",
399
+ await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm17, {
400
+ Version: '0.0.1',
350
401
  View: view,
351
402
  Movement: value
352
403
  });
@@ -358,53 +409,121 @@ export class Viewer3cr {
358
409
  * @param value The amount to zoom out.
359
410
  */
360
411
  async zoomOut(view: ScanView, value: number): Promise<void> {
361
- await this.sendPayload(FrontEndInterfaces.scan_movement, "sm_18", {
362
- Version: "0.0.1",
412
+ await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm18, {
413
+ Version: '0.0.1',
363
414
  View: view,
364
415
  Movement: value
365
416
  });
366
417
  }
367
418
 
419
+ /**
420
+ * SO-01: Rotate 2D view by up to +-XXX degrees.
421
+ * @param view The 2D view.
422
+ * @param deg The degrees.
423
+ */
424
+ async rotateByDeg(view: ScanView, deg: number) {
425
+ await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so01, {
426
+ Version: '0.0.1',
427
+ View: view,
428
+ Angle: deg
429
+ });
430
+ }
431
+
432
+ /**
433
+ * SO-02: Flip 2D View Horizontally.
434
+ * @param view The scan view.
435
+ * @param flipped Whether to enable horizontal flip.
436
+ */
437
+ async flipHorizontally(view: ScanView, flipped: boolean): Promise<void> {
438
+ await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so02, {
439
+ Version: '0.0.1',
440
+ View: view,
441
+ Flipped: flipped
442
+ });
443
+ }
444
+
445
+ /**
446
+ * SO-03: Flip 2D View Vertically.
447
+ * @param view The scan view.
448
+ * @param flipped Whether to enable vertical flip.
449
+ */
450
+ async flipVertically(view: ScanView, flipped: boolean): Promise<void> {
451
+ await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so03, {
452
+ Version: '0.0.1',
453
+ View: view,
454
+ Flipped: flipped
455
+ });
456
+ }
457
+
458
+ /**
459
+ * SO-04: Invert Volume Rendering
460
+ * @param sagittal If the Sagittal axis is inverted.
461
+ * @param coronal If the Coronal axis is inverted.
462
+ * @param transverse If the Transverse axis is inverted.
463
+ */
464
+ async invertTransform(sagittal: boolean, coronal: boolean, transverse: boolean): Promise<void> {
465
+ await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so04, {
466
+ Version: '0.0.1',
467
+ InvertedSagittal: sagittal,
468
+ InvertedCoronal: coronal,
469
+ InvertedTransverse: transverse
470
+ });
471
+ }
472
+
368
473
  /**
369
474
  * IN-01, IN-02: Enable/Disable Unity input interactions.
370
475
  * @param isHovering If the inputs should be enabled.
371
476
  */
372
477
  async hoverOverCanvas(isHovering: boolean) {
373
478
  await this.sendPayload(FrontEndInterfaces.interactivity, InteractivityActions.in01, {
374
- Version: "0.0.1",
375
- Value: isHovering,
479
+ Version: '0.0.1',
480
+ Value: isHovering
376
481
  });
377
482
  await this.sendPayload(FrontEndInterfaces.interactivity, InteractivityActions.in02, {
378
- Version: "0.0.1",
379
- Value: isHovering,
483
+ Version: '0.0.1',
484
+ Value: isHovering
380
485
  });
381
486
  }
382
487
 
383
488
  private async scanMovement(action: ScanMovementActions, value: number) {
384
489
  await this.sendPayload(FrontEndInterfaces.scan_movement, action, {
385
- Version: "0.0.1",
386
- Value: toNumber(value),
490
+ Version: '0.0.1',
491
+ Value: value
387
492
  });
388
493
  }
389
494
 
390
495
  private async slider(action: SlidersActions, value: number) {
391
496
  await this.sendPayload(FrontEndInterfaces.sliders, action, {
392
- Version: "0.0.1",
393
- Value: toNumber(value),
497
+ Version: '0.0.1',
498
+ Value: value
394
499
  });
395
500
  }
396
501
 
397
- async sendPayload(iface: string, action: string, message: any): Promise<void> {
502
+ async sendPayload(
503
+ iface: string,
504
+ action: string,
505
+ message: any,
506
+ returnChannel?: string[],
507
+ returnTo?: string
508
+ ): Promise<void> {
398
509
  await executePayload({
399
- Version: "0.0.1",
510
+ Version: '0.0.1',
400
511
  Interface: iface as any,
401
512
  Action: action as any,
402
- Message: JSON.stringify(message),
513
+ ReturnChannel: returnChannel ? JSON.stringify(returnChannel) : null,
514
+ ReturnTo: returnTo ?? null,
515
+ Message: JSON.stringify(message)
403
516
  });
404
517
  }
405
518
 
406
- private async onPayload(payload: FrontEndPayload): Promise<void> {
407
- await this.interfaceCallbacks.call(payload.Interface, payload.Message, payload.Action);
408
- await this.actionCallbacks.call(payload.Action, payload.Message);
519
+ async onPayload(payload: FrontEndPayload): Promise<void> {
520
+ await this.interfaceCallbacks.call(
521
+ payload.Interface,
522
+ payload.Message,
523
+ payload.Action,
524
+ payload.ReturnChannel,
525
+ payload.ReturnTo
526
+ );
527
+ await this.actionCallbacks.call(payload.Action, payload.Message, payload.ReturnChannel, payload.ReturnTo);
409
528
  }
410
529
  }
@@ -0,0 +1,13 @@
1
+ import { ActionData } from '@/types/action-data';
2
+
3
+ interface ActionBase {
4
+ ActionType: number;
5
+ }
6
+
7
+ export interface Action extends ActionBase {
8
+ ActionData: ActionData;
9
+ }
10
+
11
+ export interface ActionRaw extends ActionBase {
12
+ ActionData: string;
13
+ }
@@ -0,0 +1,9 @@
1
+ import { Action, ActionRaw } from '@/types/action';
2
+
3
+ export interface CallToAction {
4
+ Actions: Action[];
5
+ }
6
+
7
+ export interface CallToActionRaw {
8
+ Actions: ActionRaw[];
9
+ }
@@ -0,0 +1,6 @@
1
+ export interface Colour {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ a: number;
6
+ }
@@ -0,0 +1,16 @@
1
+ import { InvertTransformData, Vector3Data } from '@3cr/types-ts';
2
+ import { DataOverlay, DataOverlayRaw } from '@/types/data-overlay';
3
+ import { SegmentAngle } from '@/types/segment-angle';
4
+
5
+ interface DataOverlayAngleBase {
6
+ Points: Vector3Data[];
7
+ Inverted: InvertTransformData;
8
+ Visibility2d: boolean | null;
9
+ Visibility3d: boolean | null;
10
+ SegmentAngles: SegmentAngle[];
11
+ Units: string;
12
+ }
13
+
14
+ export type DataOverlayAngle = DataOverlayAngleBase & DataOverlay;
15
+
16
+ export type DataOverlayAngleRaw = DataOverlayAngleBase & DataOverlayRaw;
@@ -0,0 +1,18 @@
1
+ import { Vector3Data, InvertTransformData, ColourData, Vector2Data } from '@3cr/types-ts';
2
+ import { DataOverlay, DataOverlayRaw } from '@/types/data-overlay';
3
+
4
+ interface DataOverlayAnnotationBase {
5
+ Position: Vector3Data;
6
+ Inverted: InvertTransformData;
7
+ Colour2d: ColourData;
8
+ Colour3d: ColourData;
9
+ Size2d: Vector2Data;
10
+ Size3d: Vector3Data;
11
+ Icon2d: string;
12
+ Visibility2d: boolean | null;
13
+ Visibility3d: boolean | null;
14
+ }
15
+
16
+ export type DataOverlayAnnotation = DataOverlayAnnotationBase & DataOverlay;
17
+
18
+ export type DataOverlayAnnotationRaw = DataOverlayAnnotationBase & DataOverlayRaw;
@@ -0,0 +1,15 @@
1
+ import { DataOverlayType } from '@3cr/types-ts/types/DataOverlayType';
2
+
3
+ interface DataOverlayDataBase {
4
+ Version: string;
5
+ Id: string;
6
+ DataType: DataOverlayType;
7
+ }
8
+
9
+ export interface DataOverlayData<T> extends DataOverlayDataBase {
10
+ Data: T;
11
+ }
12
+
13
+ export interface DataOverlayDataRaw extends DataOverlayDataBase {
14
+ Data: string;
15
+ }
@@ -0,0 +1,14 @@
1
+ export interface DataOverlayInfo {
2
+ id: string;
3
+ title: string;
4
+ target: [number, number];
5
+ data: {
6
+ icon: string;
7
+ title: string;
8
+ subtitle?: string;
9
+ actions?: {
10
+ url: string;
11
+ description: string;
12
+ }[];
13
+ }[];
14
+ }