@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.
- package/.circleci/config.yml +46 -22
- package/.prettierrc +6 -0
- package/components.d.ts +23 -10
- package/dist/Viewer3CR.js +37 -46
- package/dist/Viewer3CR.mjs +22625 -20892
- package/dist/Viewer3CR.umd.js +37 -46
- package/dist/android-chrome-192x192.png +0 -0
- package/dist/android-chrome-512x512.png +0 -0
- package/dist/apple-touch-icon.png +0 -0
- package/dist/browserconfig.xml +9 -0
- package/dist/favicon-16x16.png +0 -0
- package/dist/favicon-32x32.png +0 -0
- package/dist/favicon.ico +0 -0
- package/dist/mstile-144x144.png +0 -0
- package/dist/mstile-150x150.png +0 -0
- package/dist/mstile-310x150.png +0 -0
- package/dist/mstile-310x310.png +0 -0
- package/dist/mstile-70x70.png +0 -0
- package/dist/safari-pinned-tab.svg +50 -0
- package/dist/site.webmanifest +19 -0
- package/index.html +34 -41
- package/package.json +23 -20
- package/playground/android-chrome-192x192.png +0 -0
- package/playground/android-chrome-512x512.png +0 -0
- package/playground/apple-touch-icon.png +0 -0
- package/playground/browserconfig.xml +9 -0
- package/playground/favicon-16x16.png +0 -0
- package/playground/favicon-32x32.png +0 -0
- package/playground/favicon.ico +0 -0
- package/playground/index.html +26 -29
- package/playground/mstile-144x144.png +0 -0
- package/playground/mstile-150x150.png +0 -0
- package/playground/mstile-310x150.png +0 -0
- package/playground/mstile-310x310.png +0 -0
- package/playground/mstile-70x70.png +0 -0
- package/playground/safari-pinned-tab.svg +50 -0
- package/playground/site.webmanifest +19 -0
- package/playground/sw.js +15 -1
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/browserconfig.xml +9 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/mstile-144x144.png +0 -0
- package/public/mstile-150x150.png +0 -0
- package/public/mstile-310x150.png +0 -0
- package/public/mstile-310x310.png +0 -0
- package/public/mstile-70x70.png +0 -0
- package/public/safari-pinned-tab.svg +50 -0
- package/public/site.webmanifest +19 -0
- package/src/App.vue +35 -45
- package/src/__tests__/app.spec.ts +7 -8
- package/{__tests__/index.spec.ts → src/__tests__/main.spec.ts} +5 -6
- package/src/assets/logos/3dicom/white-mini.svg +20 -0
- package/src/assets/logos/3dicom/white.svg +30 -0
- package/src/assets/styles.scss +14 -4
- package/src/components/demo/__tests__/DemoModal.spec.ts +9 -8
- package/src/components/demo/__tests__/DemoPatientModal.spec.ts +11 -10
- package/src/components/demo/__tests__/options.spec.ts +1 -1
- package/src/components/demo/licence/__tests__/DemoLicenceEnableCloudStorageModal.spec.ts +11 -10
- package/src/components/demo/licence/__tests__/DemoLicenceInfoModal.spec.ts +21 -11
- package/src/components/demo/licence/__tests__/DemoLicenceSendToPartyModal.spec.ts +10 -10
- package/src/components/demo/licence/__tests__/DemoLicenceShareToMobileModal.spec.ts +14 -13
- package/src/components/demo/options.ts +54 -59
- package/src/components/demo/patient/__tests__/DemoPatientEnableCloudStorageModal.spec.ts +11 -10
- package/src/components/demo/patient/__tests__/DemoPatientInfoModal.spec.ts +12 -11
- package/src/components/demo/patient/__tests__/DemoPatientSendToPartyModal.spec.ts +10 -10
- package/src/components/demo/patient/__tests__/DemoPatientShareToMobileModal.spec.ts +14 -13
- package/src/components/modal/ActionRail.vue +7 -11
- package/src/components/modal/AskAI.vue +35 -50
- package/src/components/modal/CloseViewerModal.vue +22 -57
- package/src/components/modal/MftpWebGL3DRModal.vue +152 -570
- package/src/components/modal/ViewerActionRail.vue +50 -39
- package/src/components/modal/ViewerNavigationDrawer.vue +10 -8
- package/src/components/modal/ViewerNavigationDrawerContent.vue +82 -49
- package/src/components/modal/ViewerNavigationDrawerFooter.vue +57 -60
- package/src/components/modal/ViewerNavigationDrawerHeader.vue +13 -48
- package/src/components/modal/ViewerScanView.vue +114 -0
- package/src/components/modal/WebGL3DR.vue +84 -0
- package/src/components/modal/__tests__/ActionRail.spec.ts +10 -0
- package/src/components/modal/__tests__/AskAI.spec.ts +33 -0
- package/src/components/modal/__tests__/CloseViewerModal.spec.ts +24 -14
- package/src/components/modal/__tests__/MftpWebGL3DRModal.spec.ts +147 -176
- package/src/components/modal/__tests__/ViewerActionRail.spec.ts +11 -0
- package/src/components/modal/__tests__/ViewerNavigationDrawer.spec.ts +10 -12
- package/src/components/modal/__tests__/ViewerNavigationDrawerContent.spec.ts +4 -22
- package/src/components/modal/__tests__/ViewerNavigationDrawerFooter.spec.ts +35 -32
- package/src/components/modal/__tests__/ViewerNavigationDrawerHeader.spec.ts +11 -9
- package/src/components/modal/__tests__/ViewerScanView.spec.ts +60 -0
- package/src/components/modal/__tests__/WebGL3DR.spec.ts +57 -0
- package/src/components/modal/actions/Flip3dAction.vue +1 -1
- package/src/components/modal/actions/FlipHorizontalAction.vue +5 -10
- package/src/components/modal/actions/FlipVerticalAction.vue +5 -10
- package/src/components/modal/actions/FullscreenAction.vue +6 -11
- package/src/components/modal/actions/HideViewAction.vue +38 -0
- package/src/components/modal/actions/NavigationCubeAction.vue +7 -14
- package/src/components/modal/actions/PanAction.vue +4 -4
- package/src/components/modal/actions/ResetViewAction.vue +1 -1
- package/src/components/modal/actions/Rotate2dAction.vue +8 -20
- package/src/components/modal/actions/Slice3dAction.vue +10 -32
- package/src/components/modal/actions/ZoomAction.vue +1 -1
- package/src/components/modal/actions/__tests__/Action.spec.ts +8 -9
- package/src/components/modal/actions/__tests__/Flip3dAction.spec.ts +6 -8
- package/src/components/modal/actions/__tests__/FlipHorizontalAction.spec.ts +6 -7
- package/src/components/modal/actions/__tests__/FlipVerticalAction.spec.ts +6 -7
- package/src/components/modal/actions/__tests__/FullscreenAction.spec.ts +9 -10
- package/src/components/modal/actions/__tests__/NavigationCubeAction.spec.ts +11 -11
- package/src/components/modal/actions/__tests__/PanAction.spec.ts +9 -10
- package/src/components/modal/actions/__tests__/ResetViewAction.spec.ts +7 -7
- package/src/components/modal/actions/__tests__/Rotate2dAction.spec.ts +6 -8
- package/src/components/modal/actions/__tests__/Slice3dAction.spec.ts +23 -5
- package/src/components/modal/actions/__tests__/ZoomAction.spec.ts +8 -10
- package/src/components/modal/buttons/AutoAnnotateBtn.vue +29 -0
- package/src/components/modal/buttons/__tests__/AutoAnnotateBtn.spec.ts +28 -0
- package/src/components/modal/menus/FileMenu.vue +80 -0
- package/src/components/modal/menus/SettingsMenu.vue +111 -0
- package/src/components/modal/menus/__tests__/FileMenu.spec.ts +110 -0
- package/src/components/modal/menus/__tests__/SettingsMenu.spec.ts +71 -0
- package/src/components/shared/DoubleSliderSelector.vue +142 -0
- package/src/components/shared/UpdateSnackbar.vue +72 -0
- package/src/components/{selectors → shared}/ValueSelector.vue +9 -12
- package/src/components/shared/__tests__/DoubleSliderSelector.spec.ts +83 -0
- package/src/components/shared/__tests__/LoadingSpinner.spec.ts +9 -0
- package/src/components/shared/__tests__/UpdateSnackbar.spec.ts +116 -0
- package/src/components/shared/__tests__/ValueSelector.spec.ts +39 -0
- package/src/components/shared/__tests__/VerticalSliderSelector.spec.ts +50 -0
- package/src/components/views/AnnotationTreeView.vue +234 -0
- package/src/components/{modal/ViewerDisplaySettings.vue → views/DisplaySettings.vue} +7 -15
- package/src/components/views/MarkupTreeView.vue +199 -0
- package/src/components/views/McadObjectTreeView.vue +119 -0
- package/src/components/views/__tests__/AnnotationTreeView.spec.ts +62 -0
- package/src/components/{modal/__tests__/ViewerDisplaySettings.spec.ts → views/__tests__/DisplaySettings.spec.ts} +24 -20
- package/src/components/views/__tests__/MarkupTreeView.spec.ts +41 -0
- package/src/components/views/__tests__/McadObjectTreeView.spec.ts +47 -0
- package/src/components/views/modals/DataOverlayModal.vue +89 -0
- package/src/components/views/modals/DataOverlayModalManager.vue +104 -0
- package/src/components/views/modals/__tests__/DataOverlayModal.spec.ts +33 -0
- package/src/components/views/modals/__tests__/DataOverlayModalManager.spec.ts +93 -0
- package/src/components/views/shared/MaskIcon.vue +44 -0
- package/src/components/views/shared/ObjectColor.vue +31 -0
- package/src/components/views/shared/ObjectLabel.vue +30 -0
- package/src/components/views/shared/Opacity.vue +66 -0
- package/src/components/views/shared/VisibilityBtn.vue +25 -0
- package/src/components/views/shared/__tests__/MaskIcon.spec.ts +10 -0
- package/src/components/views/shared/__tests__/ObjectColor.spec.ts +10 -0
- package/src/components/views/shared/__tests__/ObjectLabel.spec.ts +10 -0
- package/src/components/views/shared/__tests__/Opacity.spec.ts +24 -0
- package/src/components/views/shared/__tests__/VisibilityBtn.spec.ts +11 -0
- package/src/components/views/types/annotation-tree-view-item-child-action.ts +6 -0
- package/src/components/views/types/annotation-tree-view-item-child.ts +9 -0
- package/src/components/views/types/annotation-tree-view-item.ts +13 -0
- package/src/components/views/types/markup-tree-view-item-child.ts +6 -0
- package/src/components/views/types/markup-tree-view-item.ts +14 -0
- package/src/components/views/types/mcad-object-tree-view-item.ts +13 -0
- package/src/composables/__tests__/useAnnotations.spec.ts +35 -0
- package/src/composables/__tests__/useEventListener.spec.ts +32 -0
- package/src/composables/__tests__/useIntroJs.spec.ts +51 -0
- package/src/composables/__tests__/useMarkups.spec.ts +39 -0
- package/src/composables/__tests__/useMcadObjects.spec.ts +36 -0
- package/src/composables/__tests__/useMouse.spec.ts +20 -0
- package/src/{components/modal/composables → composables}/__tests__/useNavigationCubeObserver.spec.ts +17 -12
- package/src/{dataLayer → composables}/__tests__/useViewer3cr.spec.ts +1 -2
- package/src/composables/useAnnotations.ts +37 -0
- package/src/composables/useEventListener.ts +25 -0
- package/src/composables/useIntroJs.ts +125 -0
- package/src/composables/useMarkups.ts +41 -0
- package/src/composables/useMcadObjects.ts +32 -0
- package/src/composables/useMouse.ts +14 -0
- package/src/{components/modal/composables → composables}/useNavigationCubeObserver.ts +35 -25
- package/src/composables/useScanMovement.ts +25 -0
- package/src/composables/useScanSliders.ts +36 -0
- package/src/composables/useVersion3cr.ts +7 -0
- package/src/composables/useViewer3cr.ts +7 -0
- package/src/composables/useViewerOptions.ts +35 -0
- package/src/{dataLayer → functions}/__tests__/clamp.spec.ts +1 -2
- package/src/functions/__tests__/layoutOverlayStyle.spec.ts +325 -0
- package/src/{helpers/__tests__/model-helper.spec.ts → functions/__tests__/modelHelper.spec.ts} +77 -40
- package/src/{notifications → functions}/__tests__/notification.spec.ts +19 -29
- package/src/functions/__tests__/parseAction.spec.ts +9 -0
- package/src/functions/__tests__/parseCallToAction.spec.ts +11 -0
- package/src/functions/__tests__/parseDataOverlay.spec.ts +15 -0
- package/src/functions/__tests__/parseDataOverlayData.spec.ts +9 -0
- package/src/functions/__tests__/parseDataOverlayEvent.spec.ts +10 -0
- package/src/functions/__tests__/parseMcadEvent.spec.ts +10 -0
- package/src/functions/layoutOverlayStyle.ts +84 -0
- package/src/{helpers → functions}/modelHelper.ts +79 -18
- package/src/{notifications → functions}/notification.ts +12 -14
- package/src/functions/parseAction.ts +9 -0
- package/src/functions/parseCallToAction.ts +9 -0
- package/src/functions/parseDataOverlay.ts +10 -0
- package/src/functions/parseDataOverlayData.ts +10 -0
- package/src/functions/parseDataOverlayEvent.ts +17 -0
- package/src/functions/parseMcadEvent.ts +10 -0
- package/src/functions/rgbaToCss.ts +13 -0
- package/src/main.ts +48 -9
- package/src/{dataLayer → models}/__tests__/eventHandlers.spec.ts +2 -3
- package/src/models/__tests__/loadViewerOptions.spec.ts +72 -0
- package/src/models/__tests__/loadViewerPayload.spec.ts +10 -0
- package/src/models/__tests__/scanState.spec.ts +190 -0
- package/src/models/callbacks.ts +4 -0
- package/src/models/loadViewerOptions.ts +40 -0
- package/src/models/loadViewerPayload.ts +24 -0
- package/src/{dataLayer → models}/scanState.ts +63 -74
- package/src/plugins/__tests__/usePlugins.spec.ts +12 -0
- package/src/plugins/__tests__/vuetify.spec.ts +3 -4
- package/src/plugins/usePlugins.ts +8 -0
- package/src/plugins/vuetify.ts +31 -65
- package/src/services/{gpt/__tests__ → __tests__}/gpt.service.spec.ts +2 -2
- package/src/services/__tests__/service-worker.service.spec.ts +32 -0
- package/src/{dataLayer/__tests__/viewer3cr.spec.ts → services/__tests__/viewer-3cr.service.spec.ts} +97 -36
- package/src/services/gpt.service.ts +17 -0
- package/src/services/service-worker.service.ts +16 -0
- package/src/{dataLayer/viewer3cr.ts → services/viewer-3cr.service.ts} +269 -150
- package/src/types/action.ts +13 -0
- package/src/types/call-to-action.ts +9 -0
- package/src/types/colour.ts +6 -0
- package/src/types/data-overlay-angle.ts +16 -0
- package/src/types/data-overlay-annotation.ts +18 -0
- package/src/types/data-overlay-data.ts +15 -0
- package/src/types/data-overlay-info.ts +14 -0
- package/src/types/data-overlay-interaction.ts +15 -0
- package/src/types/data-overlay-length.ts +16 -0
- package/src/types/data-overlay-markup.ts +7 -0
- package/src/types/data-overlay-mcad.ts +20 -0
- package/src/types/data-overlay-polygon.ts +18 -0
- package/src/types/data-overlay.ts +16 -0
- package/src/types/gpt-question.ts +4 -0
- package/src/types/gpt-response-payload.ts +6 -0
- package/src/types/mcad-object-interaction.ts +15 -0
- package/src/types/segment-angle.ts +5 -0
- package/src/types/vector2.ts +4 -0
- package/src/types/vector3.ts +5 -0
- package/test/fakers/action-data.faker.ts +11 -0
- package/test/fakers/action.faker.ts +19 -0
- package/test/fakers/call-to-action.faker.ts +17 -0
- package/test/fakers/colour.faker.ts +17 -0
- package/test/fakers/data-overlay-angle.faker.ts +37 -0
- package/test/fakers/data-overlay-annotation.faker.ts +41 -0
- package/test/fakers/data-overlay-data.faker.ts +97 -0
- package/test/fakers/data-overlay-info.faker.ts +29 -0
- package/test/fakers/data-overlay-interaction.faker.ts +62 -0
- package/test/fakers/data-overlay-length.faker.ts +37 -0
- package/test/fakers/data-overlay-mcad.faker.ts +40 -0
- package/test/fakers/data-overlay-polygon.faker.ts +39 -0
- package/test/fakers/gpt-question.faker.ts +11 -0
- package/test/fakers/gpt-response.faker.ts +12 -0
- package/test/fakers/invert-transform.faker.ts +16 -0
- package/test/fakers/mcad-object-interaction.faker.ts +22 -0
- package/test/fakers/orientation.faker.ts +17 -0
- package/test/fakers/segment-angle.faker.ts +12 -0
- package/test/fakers/vector2.faker.ts +12 -0
- package/test/fakers/vector3.faker.ts +16 -0
- package/test/plugins/findByTestId.ts +25 -0
- package/test/plugins/vuetify.ts +16 -0
- package/test/setup.ts +16 -5
- package/tsconfig.json +4 -15
- package/vite.config.mts +20 -46
- package/vitest.config.mts +24 -43
- package/index.ts +0 -72
- package/src/assets/images/dark/3DICOM.png +0 -0
- package/src/assets/images/dark/3dicom-logo.svg +0 -1
- package/src/assets/images/light/3DICOM.png +0 -0
- package/src/assets/images/light/3dicom-logo.svg +0 -1
- package/src/assets/logo.png +0 -0
- package/src/assets/logo.svg +0 -6
- package/src/components/WebGL3DR.vue +0 -102
- package/src/components/__tests__/webgl3dr.spec.ts +0 -37
- package/src/components/icons/liver.vue +0 -21
- package/src/components/loading/__tests__/loading-spinner.spec.ts +0 -11
- package/src/components/modal/ViewerAnnotationModal.vue +0 -111
- package/src/components/modal/ViewerAnnotations.vue +0 -289
- package/src/components/modal/__tests__/ViewerAnnotationModal.spec.ts +0 -79
- package/src/components/modal/composables/useEventListener.ts +0 -22
- package/src/components/selectors/__tests__/value-selector.spec.ts +0 -53
- package/src/components/sliders/DoubleSliderSelector.vue +0 -141
- package/src/components/sliders/__tests__/double-slider-selector.spec.ts +0 -104
- package/src/components/sliders/__tests__/vertical-slider-selector.spec.ts +0 -61
- package/src/dataLayer/__tests__/getIconForPreset.spec.ts +0 -40
- package/src/dataLayer/__tests__/patchDataOverlay.spec.ts +0 -88
- package/src/dataLayer/__tests__/scanState.spec.ts +0 -93
- package/src/dataLayer/getIconForPreset.ts +0 -11
- package/src/dataLayer/patchDataOverlay.ts +0 -101
- package/src/dataLayer/useViewer3cr.ts +0 -7
- package/src/helpers/__tests__/layout-overlay-style.spec.ts +0 -290
- package/src/helpers/__tests__/utils.spec.ts +0 -70
- package/src/helpers/layoutOverlayStyle.ts +0 -96
- package/src/helpers/utils.ts +0 -16
- package/src/models/Callbacks.ts +0 -2
- package/src/models/LoadViewerOptions.ts +0 -31
- package/src/models/LoadViewerPayload.ts +0 -9
- package/src/models/__tests__/load-viewer-options.spec.ts +0 -22
- package/src/plugins/__tests__/index.spec.ts +0 -19
- package/src/plugins/index.ts +0 -17
- package/src/services/gpt/gpt.service.ts +0 -35
- package/static/3cr-types-browser/index.ts +0 -74
- package/static/3cr-types-browser/types/Action.ts +0 -6
- package/static/3cr-types-browser/types/AlphaKeys.ts +0 -5
- package/static/3cr-types-browser/types/AnchorPoint.ts +0 -12
- package/static/3cr-types-browser/types/CallToAction.ts +0 -5
- package/static/3cr-types-browser/types/ColourData.ts +0 -7
- package/static/3cr-types-browser/types/ColourPresetData.ts +0 -9
- package/static/3cr-types-browser/types/CurrentDataOverlayState.ts +0 -6
- package/static/3cr-types-browser/types/CurrentScanState.ts +0 -22
- package/static/3cr-types-browser/types/DataOverlay.ts +0 -22
- package/static/3cr-types-browser/types/DataOverlayActions.ts +0 -14
- package/static/3cr-types-browser/types/DataOverlayData.ts +0 -8
- package/static/3cr-types-browser/types/DataOverlayEvent.ts +0 -8
- package/static/3cr-types-browser/types/DecryptionKey.ts +0 -4
- package/static/3cr-types-browser/types/DisplaySettings.ts +0 -10
- package/static/3cr-types-browser/types/EmptyPayload.ts +0 -3
- package/static/3cr-types-browser/types/EnumPayload.ts +0 -4
- package/static/3cr-types-browser/types/FileManagementActions.ts +0 -11
- package/static/3cr-types-browser/types/FlipValue.ts +0 -7
- package/static/3cr-types-browser/types/FrontEndInterfaces.ts +0 -14
- package/static/3cr-types-browser/types/GradientKeys.ts +0 -7
- package/static/3cr-types-browser/types/GreyscalePresetData.ts +0 -6
- package/static/3cr-types-browser/types/InitialDataOverlayState.ts +0 -6
- package/static/3cr-types-browser/types/InitialScanState.ts +0 -19
- package/static/3cr-types-browser/types/InteractionType.ts +0 -8
- package/static/3cr-types-browser/types/InteractivityActions.ts +0 -6
- package/static/3cr-types-browser/types/InteractivityState.ts +0 -4
- package/static/3cr-types-browser/types/InvertTransformData.ts +0 -6
- package/static/3cr-types-browser/types/LayoutActions.ts +0 -6
- package/static/3cr-types-browser/types/LayoutData.ts +0 -7
- package/static/3cr-types-browser/types/LoadDataSet.ts +0 -6
- package/static/3cr-types-browser/types/LoadSessionState.ts +0 -4
- package/static/3cr-types-browser/types/LocalLoadDataset.ts +0 -3
- package/static/3cr-types-browser/types/MovementData.ts +0 -7
- package/static/3cr-types-browser/types/NavigationCubeActions.ts +0 -8
- package/static/3cr-types-browser/types/NavigationCubeData.ts +0 -12
- package/static/3cr-types-browser/types/NavigationCubeTransform.ts +0 -9
- package/static/3cr-types-browser/types/NotificationPayload.ts +0 -7
- package/static/3cr-types-browser/types/NotificationsActions.ts +0 -6
- package/static/3cr-types-browser/types/Object.ts +0 -1
- package/static/3cr-types-browser/types/ObjectColour.ts +0 -7
- package/static/3cr-types-browser/types/ObjectIcon.ts +0 -5
- package/static/3cr-types-browser/types/ObjectInvert.ts +0 -7
- package/static/3cr-types-browser/types/ObjectSize.ts +0 -7
- package/static/3cr-types-browser/types/ObjectSize2D.ts +0 -7
- package/static/3cr-types-browser/types/ObjectVisible.ts +0 -5
- package/static/3cr-types-browser/types/PositionData.ts +0 -14
- package/static/3cr-types-browser/types/PresetsActions.ts +0 -4
- package/static/3cr-types-browser/types/RotationValue.ts +0 -7
- package/static/3cr-types-browser/types/ScanMovementActions.ts +0 -27
- package/static/3cr-types-browser/types/ScanMovementData.ts +0 -3
- package/static/3cr-types-browser/types/ScanOrientationActions.ts +0 -6
- package/static/3cr-types-browser/types/ScanStateActions.ts +0 -4
- package/static/3cr-types-browser/types/ScanView.ts +0 -6
- package/static/3cr-types-browser/types/SettingsData.ts +0 -12
- package/static/3cr-types-browser/types/SlicerData.ts +0 -9
- package/static/3cr-types-browser/types/SliderValue.ts +0 -4
- package/static/3cr-types-browser/types/SlidersActions.ts +0 -18
- package/static/3cr-types-browser/types/Vector2Data.ts +0 -5
- package/static/3cr-types-browser/types/Vector3Data.ts +0 -6
- package/static/3cr-types-browser/types/VectorMovementData.ts +0 -8
- package/static/3cr-types-browser/types/ViewInteractiveMode.ts +0 -5
- package/static/3cr-types-browser/types/ViewOrientation.ts +0 -8
- package/static/3cr-types-browser/types/ViewOrientations.ts +0 -10
- package/static/3cr-types-browser/types/ViewSelectionActions.ts +0 -9
- package/static/3cr-types-browser/types/ViewToggleData.ts +0 -7
- package/static/3cr-types-browser/types/VolumeOrientation.ts +0 -7
- package/test/helper.ts +0 -44
- /package/src/components/{loading → shared}/LoadingSpinner.vue +0 -0
- /package/src/components/{sliders → shared}/VerticalSliderSelector.vue +0 -0
- /package/{config.ts → src/config.ts} +0 -0
- /package/src/{dataLayer → functions}/clamp.ts +0 -0
- /package/src/{dataLayer → models}/eventHandlers.ts +0 -0
- /package/{static/3cr-types-browser/types/ActionData.ts → src/types/action-data.ts} +0 -0
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import {
|
|
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
|
|
11
|
-
import { flushPromises } from
|
|
12
|
-
import { spyOn } from
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import
|
|
28
|
-
import
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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(
|
|
48
|
-
wrapper =
|
|
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(
|
|
58
|
+
it('inflates', () => {
|
|
58
59
|
expect(wrapper).toBeTruthy();
|
|
59
60
|
});
|
|
60
61
|
|
|
61
|
-
describe(
|
|
62
|
-
it(
|
|
63
|
-
await testWatcherForDisplay(
|
|
62
|
+
describe('watchers', () => {
|
|
63
|
+
it('scanState.value.Display.Brightness', async () => {
|
|
64
|
+
await testWatcherForDisplay('Brightness', SlidersActions.sl01);
|
|
64
65
|
});
|
|
65
66
|
|
|
66
|
-
it(
|
|
67
|
-
await testWatcherForDisplay(
|
|
67
|
+
it('scanState.value.Display.Contrast', async () => {
|
|
68
|
+
await testWatcherForDisplay('Contrast', SlidersActions.sl02);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
|
-
it(
|
|
71
|
-
await testWatcherForDisplay(
|
|
71
|
+
it('scanState.value.Display.Opacity', async () => {
|
|
72
|
+
await testWatcherForDisplay('Opacity', SlidersActions.sl03);
|
|
72
73
|
});
|
|
73
74
|
|
|
74
|
-
it(
|
|
75
|
-
await testWatcherForDisplay(
|
|
75
|
+
it('scanState.value.Display.WindowLower', async () => {
|
|
76
|
+
await testWatcherForDisplay('WindowLower', SlidersActions.sl04);
|
|
76
77
|
});
|
|
77
78
|
|
|
78
|
-
it(
|
|
79
|
-
await testWatcherForDisplay(
|
|
79
|
+
it('scanState.value.Display.WindowUpper', async () => {
|
|
80
|
+
await testWatcherForDisplay('WindowUpper', SlidersActions.sl05);
|
|
80
81
|
});
|
|
81
82
|
|
|
82
|
-
it(
|
|
83
|
-
await testWatcherForDisplay(
|
|
83
|
+
it('scanState.value.Display.ThresholdLower', async () => {
|
|
84
|
+
await testWatcherForDisplay('ThresholdLower', SlidersActions.sl06);
|
|
84
85
|
});
|
|
85
86
|
|
|
86
|
-
it(
|
|
87
|
-
await testWatcherForDisplay(
|
|
87
|
+
it('scanState.value.Display.ThresholdUpper', async () => {
|
|
88
|
+
await testWatcherForDisplay('ThresholdUpper', SlidersActions.sl07);
|
|
88
89
|
});
|
|
89
90
|
|
|
90
|
-
it(
|
|
91
|
-
await testWatcherForSlice(
|
|
91
|
+
it('scanState.value.Slice.TransverseLower', async () => {
|
|
92
|
+
await testWatcherForSlice('TransverseLower', SlidersActions.sl08);
|
|
92
93
|
});
|
|
93
94
|
|
|
94
|
-
it(
|
|
95
|
-
await testWatcherForOrientation(
|
|
95
|
+
it('scanState.value.Orientations.Transverse.Slice', async () => {
|
|
96
|
+
await testWatcherForOrientation('Transverse', SlidersActions.sl09);
|
|
96
97
|
});
|
|
97
98
|
|
|
98
|
-
it(
|
|
99
|
-
await testWatcherForSlice(
|
|
99
|
+
it('scanState.value.Slice.TransverseUpper', async () => {
|
|
100
|
+
await testWatcherForSlice('TransverseUpper', SlidersActions.sl10);
|
|
100
101
|
});
|
|
101
102
|
|
|
102
|
-
it(
|
|
103
|
-
await testWatcherForSlice(
|
|
103
|
+
it('scanState.value.Slice.SagittalLower', async () => {
|
|
104
|
+
await testWatcherForSlice('SagittalLower', SlidersActions.sl11);
|
|
104
105
|
});
|
|
105
106
|
|
|
106
|
-
it(
|
|
107
|
-
await testWatcherForOrientation(
|
|
107
|
+
it('scanState.value.Orientations.Sagittal.Slice', async () => {
|
|
108
|
+
await testWatcherForOrientation('Sagittal', SlidersActions.sl12);
|
|
108
109
|
});
|
|
109
110
|
|
|
110
|
-
it(
|
|
111
|
-
await testWatcherForSlice(
|
|
111
|
+
it('scanState.value.Slice.SagittalUpper', async () => {
|
|
112
|
+
await testWatcherForSlice('SagittalUpper', SlidersActions.sl13);
|
|
112
113
|
});
|
|
113
114
|
|
|
114
|
-
it(
|
|
115
|
-
await testWatcherForSlice(
|
|
115
|
+
it('scanState.value.Slice.CoronalLower', async () => {
|
|
116
|
+
await testWatcherForSlice('CoronalLower', SlidersActions.sl14);
|
|
116
117
|
});
|
|
117
118
|
|
|
118
|
-
it(
|
|
119
|
-
await testWatcherForOrientation(
|
|
119
|
+
it('scanState.value.Orientations.Coronal.Slice', async () => {
|
|
120
|
+
await testWatcherForOrientation('Coronal', SlidersActions.sl15);
|
|
120
121
|
});
|
|
121
122
|
|
|
122
|
-
it(
|
|
123
|
-
await testWatcherForSlice(
|
|
123
|
+
it('scanState.value.Slice.CoronalUpper', async () => {
|
|
124
|
+
await testWatcherForSlice('CoronalUpper', SlidersActions.sl16);
|
|
124
125
|
});
|
|
125
126
|
|
|
126
|
-
it(
|
|
127
|
+
it('scanState.value.Slice.CoronalUpper transaction disabled', async () => {
|
|
127
128
|
transactionStarted.value = true;
|
|
128
|
-
await testWatcherForSlice(
|
|
129
|
+
await testWatcherForSlice('CoronalUpper', SlidersActions.sl16, true);
|
|
129
130
|
});
|
|
130
131
|
|
|
131
|
-
it(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
154
|
+
it('watches scanState', () => {
|
|
170
155
|
expect(wrapper).toBeTruthy();
|
|
171
156
|
});
|
|
172
157
|
|
|
173
|
-
it(
|
|
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(
|
|
162
|
+
it('sSlider should be set', () => {
|
|
186
163
|
expect(unref(sSlider)).toStrictEqual([0, 0]);
|
|
187
164
|
});
|
|
188
165
|
|
|
189
|
-
it(
|
|
166
|
+
it('cSlider should be set', () => {
|
|
190
167
|
expect(unref(cSlider)).toStrictEqual([0, 0]);
|
|
191
168
|
});
|
|
192
169
|
|
|
193
|
-
it(
|
|
170
|
+
it('windowSlider should set', async () => {
|
|
194
171
|
const newVals: [number, number] = [20, 20];
|
|
195
|
-
|
|
172
|
+
windowSlider.value = newVals;
|
|
196
173
|
await flushPromises();
|
|
197
|
-
expect(
|
|
174
|
+
expect(windowSlider.value).toStrictEqual(newVals);
|
|
198
175
|
});
|
|
199
176
|
|
|
200
|
-
it(
|
|
177
|
+
it('thresholdSlider should set', async () => {
|
|
201
178
|
const newVals: [number, number] = [20, 20];
|
|
202
|
-
|
|
179
|
+
thresholdSlider.value = newVals;
|
|
203
180
|
await flushPromises();
|
|
204
|
-
expect(
|
|
181
|
+
expect(thresholdSlider.value).toStrictEqual(newVals);
|
|
205
182
|
});
|
|
206
183
|
|
|
207
|
-
it(
|
|
208
|
-
const newVals = [0, 0];
|
|
209
|
-
|
|
184
|
+
it('tSlider should set', async () => {
|
|
185
|
+
const newVals: [number, number] = [0, 0];
|
|
186
|
+
tSlider.value = newVals;
|
|
210
187
|
await flushPromises();
|
|
211
|
-
expect(
|
|
188
|
+
expect(tSlider.value).toStrictEqual(newVals);
|
|
212
189
|
});
|
|
213
190
|
|
|
214
|
-
it(
|
|
215
|
-
const newVals = [0, 0];
|
|
216
|
-
|
|
191
|
+
it('sSlider should set', async () => {
|
|
192
|
+
const newVals: [number, number] = [0, 0];
|
|
193
|
+
sSlider.value = newVals;
|
|
217
194
|
await flushPromises();
|
|
218
|
-
expect(
|
|
195
|
+
expect(sSlider.value).toStrictEqual(newVals);
|
|
219
196
|
});
|
|
220
197
|
|
|
221
|
-
it(
|
|
222
|
-
const newVals = [0, 0];
|
|
223
|
-
|
|
198
|
+
it('cSlider should set', async () => {
|
|
199
|
+
const newVals: [number, number] = [0, 0];
|
|
200
|
+
cSlider.value = newVals;
|
|
224
201
|
await flushPromises();
|
|
225
|
-
expect(
|
|
202
|
+
expect(cSlider.value).toStrictEqual(newVals);
|
|
226
203
|
});
|
|
227
204
|
|
|
228
|
-
it(
|
|
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(
|
|
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(
|
|
234
|
+
it('should getCurrentGreyscalePreset', async () => {
|
|
258
235
|
const initial = inflateInitialScanState();
|
|
259
|
-
initial.GreyscalePresets = [{ Name:
|
|
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(
|
|
246
|
+
expect(unref(currentGreyscalePreset)?.Name).toBe('testing');
|
|
270
247
|
});
|
|
271
248
|
|
|
272
|
-
it(
|
|
249
|
+
it('should getCurrentGreyscalePreset', async () => {
|
|
273
250
|
const initial = inflateInitialScanState();
|
|
274
|
-
initial.GreyscalePresets = [{ Name:
|
|
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(
|
|
263
|
+
expect(unref(currentGreyscalePreset)?.Name).toBe('testing');
|
|
287
264
|
});
|
|
288
265
|
|
|
289
|
-
it(
|
|
266
|
+
it('should getCurrentGreyscalePreset', async () => {
|
|
290
267
|
const initial = inflateInitialScanState();
|
|
291
|
-
initial.GreyscalePresets = [{ Name:
|
|
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(
|
|
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 =
|
|
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
|
|
334
|
-
|
|
335
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
410
|
-
|
|
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:
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
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, {
|
|
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, {
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
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 =
|
|
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
|
});
|