@geode/opengeodeweb-front 10.34.0-rc.2 → 10.34.0-rc.21
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/.build/opengeodeweb_front_schemas.js +175 -0
- package/.build/server/utils/app_config.js +57 -0
- package/.build/server/utils/cleanup.js +135 -0
- package/.build/server/utils/cloud.js +156 -0
- package/.build/server/utils/microservices.js +153 -0
- package/.build/server/utils/path.js +108 -0
- package/.build/server/utils/scripts.js +134 -0
- package/.build/server/utils/server.js +44 -0
- package/.build/server/utils/server_config.js +51 -0
- package/.build/server/utils/stream.js +6 -0
- package/.build/server/utils/ws_client.js +100 -0
- package/.build/shared/app_mode.js +8 -0
- package/.build/shared/scripts.js +49 -0
- package/.build/shared/utils/call_raw.js +31 -0
- package/.build/shared/utils/call_schema.js +28 -0
- package/.build/shared/utils/fetch_raw.js +52 -0
- package/.build/shared/utils/fetch_schema.js +32 -0
- package/.build/shared/utils/file.js +14 -0
- package/.build/shared/utils/parse_boolean.js +23 -0
- package/.build/shared/utils/response_handlers/load.js +50 -0
- package/.build/shared/utils/types.js +1 -0
- package/.build/shared/utils/validate_schema.js +17 -0
- package/README.md +8 -0
- package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
- package/app/components/ActionButton.vue +28 -12
- package/app/components/Basic/Slider.vue +2 -2
- package/app/components/Basic/Switch.vue +2 -2
- package/app/components/CameraManager/List.vue +11 -11
- package/app/components/CameraManager/Saver.vue +8 -4
- package/app/components/CameraManager.vue +24 -12
- package/app/components/CameraOrientation.vue +31 -17
- package/app/components/ClippingPlaneCard.vue +13 -12
- package/app/components/ClippingPlanes.vue +31 -21
- package/app/components/CrsSelector.vue +26 -18
- package/app/components/DeleteDialog.vue +18 -16
- package/app/components/DragAndDrop.vue +55 -37
- package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
- package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
- package/app/components/ExtensionSelector.vue +34 -18
- package/app/components/FeedBack/ErrorBanner.vue +4 -3
- package/app/components/FeedBack/Snackers.vue +6 -5
- package/app/components/FetchingData.vue +8 -12
- package/app/components/FileSelector.vue +27 -17
- package/app/components/FileUploader.vue +51 -30
- package/app/components/GlassCard.vue +17 -13
- package/app/components/HybridRenderingView.vue +25 -12
- package/app/components/HybridViewerTooltip.vue +28 -26
- package/app/components/InfraConnected.vue +1 -1
- package/app/components/Launcher.vue +12 -10
- package/app/components/Loading/EcoMessages.vue +24 -13
- package/app/components/Loading/Header.vue +6 -7
- package/app/components/Loading/Progress.vue +6 -7
- package/app/components/Loading.vue +10 -14
- package/app/components/MissingFilesSelector.vue +35 -19
- package/app/components/ObjectSelector.vue +37 -21
- package/app/components/PackagesVersions.vue +16 -8
- package/app/components/Recaptcha.vue +17 -23
- package/app/components/RemoteRenderingView.vue +21 -15
- package/app/components/Ruler.vue +11 -9
- package/app/components/Screenshot.vue +25 -19
- package/app/components/SearchBar.vue +12 -6
- package/app/components/ShrinkFilter.vue +19 -14
- package/app/components/Step.vue +32 -12
- package/app/components/Stepper.vue +19 -7
- package/app/components/ToolPanel.vue +29 -13
- package/app/components/ViewToolbar.vue +53 -44
- package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
- package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
- package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
- package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
- package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
- package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
- package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
- package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
- package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
- package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
- package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
- package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
- package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
- package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
- package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
- package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
- package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
- package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
- package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
- package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
- package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
- package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
- package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
- package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
- package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
- package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
- package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
- package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
- package/app/components/Viewer/ObjectTree/Box.vue +32 -15
- package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
- package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
- package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
- package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
- package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
- package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
- package/app/components/Viewer/Options/ColorMapList.vue +52 -24
- package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
- package/app/components/Viewer/Options/ColorPicker.vue +239 -50
- package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
- package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
- package/app/components/Viewer/Options/OptionsSection.vue +7 -5
- package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
- package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
- package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
- package/app/components/Viewer/Options/TextureItem.vue +29 -22
- package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
- package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
- package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
- package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
- package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
- package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
- package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
- package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
- package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
- package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
- package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
- package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
- package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
- package/app/components/Viewer/Ui.vue +19 -14
- package/app/components/Wrapper.vue +16 -10
- package/app/components/ZScaling.vue +18 -10
- package/app/components/csv-preview/CsvPreviewer.vue +72 -50
- package/app/components/csv-preview/CsvSettings.vue +30 -50
- package/app/components/csv-preview/CsvTable.vue +34 -14
- package/app/composables/{batch_style.js → batch_style.ts} +9 -7
- package/app/composables/clipping_planes_widget.ts +204 -0
- package/app/composables/clipping_planes_widget_entries.ts +189 -0
- package/app/composables/copy_to_clipboard.ts +7 -0
- package/app/composables/global_attribute_style.ts +303 -0
- package/app/composables/hover_highlight.ts +127 -0
- package/app/composables/{model_collections.js → model_collections.ts} +28 -9
- package/app/composables/{model_components.js → model_components.ts} +28 -9
- package/app/composables/{project_manager.js → project_manager.ts} +77 -20
- package/app/composables/responsive_middle_truncate.ts +48 -0
- package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
- package/app/composables/stepper_tree.ts +79 -0
- package/app/composables/tree_filter.ts +194 -0
- package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
- package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
- package/app/composables/use_adaptive_styles.ts +186 -0
- package/app/composables/use_overlapping_picker.ts +263 -0
- package/app/composables/use_quick_colormap.ts +55 -0
- package/app/composables/virtual_tree.ts +271 -0
- package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
- package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
- package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
- package/app/stores/app.ts +252 -0
- package/app/stores/app_helpers/extension.ts +179 -0
- package/app/stores/{back.js → back.ts} +54 -28
- package/app/stores/camera_manager.ts +80 -0
- package/app/stores/{cloud.js → cloud.ts} +18 -13
- package/app/stores/data.ts +392 -0
- package/app/stores/data_helpers/collections.ts +138 -0
- package/app/stores/data_helpers/mesh.ts +169 -0
- package/app/stores/data_style.ts +167 -0
- package/app/stores/{feedback.js → feedback.ts} +19 -8
- package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
- package/app/stores/infra.ts +106 -0
- package/app/stores/{menu.js → menu.ts} +67 -36
- package/app/stores/treeview.ts +383 -0
- package/app/stores/{viewer.js → viewer.ts} +75 -42
- package/app/utils/attributes.ts +40 -0
- package/app/utils/clipping_planes.ts +222 -0
- package/app/utils/color_picker.js +54 -0
- package/app/utils/colormap.ts +102 -0
- package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
- package/app/utils/default_styles/{index.js → index.ts} +4 -3
- package/app/utils/default_styles/meshes.ts +264 -0
- package/app/utils/default_styles/{models.js → models.ts} +106 -52
- package/app/utils/{extension.js → extension.ts} +63 -19
- package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
- package/app/utils/{log.js → log.ts} +12 -2
- package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
- package/app/utils/status.ts +19 -0
- package/app/utils/{stores.js → stores.ts} +5 -5
- package/app/utils/{string.js → string.ts} +6 -6
- package/app/utils/{treeview.js → treeview.ts} +4 -1
- package/internal/database/{base_database.js → base_database.ts} +7 -3
- package/internal/database/database.ts +102 -0
- package/internal/database/{extended_database.js → extended_database.ts} +5 -1
- package/internal/database/tables/camera_positions.ts +6 -0
- package/internal/database/tables/{data.js → data.ts} +3 -1
- package/internal/database/tables/data_style.ts +6 -0
- package/internal/database/tables/model_component_datastyle.ts +6 -0
- package/internal/database/tables/model_component_type_datastyle.ts +6 -0
- package/internal/database/tables/model_components.ts +6 -0
- package/internal/database/tables/model_components_relation.ts +6 -0
- package/internal/database/tables/table_definition.ts +5 -0
- package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
- package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/cells/common.ts +50 -0
- package/internal/stores/data_style/mesh/cells/index.ts +161 -0
- package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
- package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
- package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
- package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/edges/common.ts +41 -0
- package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
- package/internal/stores/data_style/mesh/edges/index.ts +155 -0
- package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
- package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
- package/internal/stores/data_style/mesh/edges/width.ts +42 -0
- package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
- package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/points/common.ts +51 -0
- package/internal/stores/data_style/mesh/points/index.ts +133 -0
- package/internal/stores/data_style/mesh/points/size.ts +43 -0
- package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
- package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
- package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
- package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
- package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
- package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
- package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
- package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
- package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
- package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
- package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
- package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
- package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
- package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
- package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
- package/internal/stores/data_style/model/blocks/common.ts +67 -0
- package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
- package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
- package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
- package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
- package/internal/stores/data_style/model/color.ts +348 -0
- package/internal/stores/data_style/model/common.ts +262 -0
- package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
- package/internal/stores/data_style/model/corners/common.ts +71 -0
- package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
- package/internal/stores/data_style/model/corners/vertex.ts +315 -0
- package/internal/stores/data_style/model/corners/visibility.ts +39 -0
- package/internal/stores/data_style/model/edges/common.ts +29 -0
- package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
- package/internal/stores/data_style/model/edges/visibility.ts +55 -0
- package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
- package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
- package/internal/stores/data_style/model/lines/common.ts +63 -0
- package/internal/stores/data_style/model/lines/edge.ts +343 -0
- package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
- package/internal/stores/data_style/model/lines/vertex.ts +344 -0
- package/internal/stores/data_style/model/lines/visibility.ts +37 -0
- package/internal/stores/data_style/model/points/common.ts +25 -0
- package/internal/stores/data_style/model/points/index.ts +35 -0
- package/internal/stores/data_style/model/points/size.ts +44 -0
- package/internal/stores/data_style/model/points/visibility.ts +46 -0
- package/internal/stores/data_style/model/selection.ts +138 -0
- package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
- package/internal/stores/data_style/model/surfaces/common.ts +69 -0
- package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
- package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
- package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
- package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
- package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
- package/internal/stores/data_style/state.ts +281 -0
- package/internal/stores/data_style/types.ts +30 -0
- package/internal/stores/hybrid_viewer/brightness.ts +124 -0
- package/internal/stores/hybrid_viewer/camera.ts +326 -0
- package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
- package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
- package/internal/stores/hybrid_viewer/core.ts +64 -0
- package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
- package/internal/stores/hybrid_viewer/highlight.ts +183 -0
- package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
- package/internal/stores/hybrid_viewer/scene.ts +125 -0
- package/internal/stores/hybrid_viewer/viewport.ts +177 -0
- package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
- package/internal/utils/api_fetch.ts +133 -0
- package/internal/utils/upload_file.ts +115 -0
- package/internal/utils/viewer_call.ts +99 -0
- package/internal/utils/ws_client.ts +54 -0
- package/nuxt.config.ts +168 -0
- package/opengeodeweb_front_schemas.json +2 -2
- package/package.json +49 -13
- package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
- package/server/api/local/app/project_folder_path.post.ts +33 -0
- package/server/api/local/app/run_back.post.ts +39 -0
- package/server/api/local/app/run_viewer.post.ts +39 -0
- package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
- package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
- package/server/api/local/extensions/upload.put.ts +71 -0
- package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
- package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
- package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
- package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
- package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
- package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
- package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
- package/server/api/serverless/run_cloud.post.ts +92 -0
- package/server/utils/{app_config.js → app_config.ts} +40 -18
- package/server/utils/{cleanup.js → cleanup.ts} +76 -29
- package/server/utils/{cloud.js → cloud.ts} +33 -17
- package/server/utils/{extension.js → extension.ts} +31 -4
- package/server/utils/{microservices.js → microservices.ts} +68 -27
- package/server/utils/{path.js → path.ts} +36 -17
- package/server/utils/{scripts.js → scripts.ts} +49 -33
- package/server/utils/{server.js → server.ts} +13 -6
- package/server/utils/server_config.ts +74 -0
- package/server/utils/stream.ts +6 -0
- package/server/utils/ws_client.ts +165 -0
- package/shared/{scripts.js → scripts.ts} +15 -10
- package/shared/utils/call_raw.ts +73 -0
- package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
- package/shared/utils/fetch_raw.ts +125 -0
- package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
- package/shared/utils/file.ts +22 -0
- package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
- package/shared/utils/response_handlers/load.ts +109 -0
- package/shared/utils/types.ts +27 -0
- package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
- package/.github/workflows/config.json +0 -5
- package/.github/workflows/deploy.yml +0 -15
- package/.github/workflows/manual_release.yml +0 -11
- package/.github/workflows/merge_request.yml +0 -9
- package/.github/workflows/pr_update.yml +0 -11
- package/.github/workflows/prepare_deploy.yml +0 -9
- package/.github/workflows/schedule.yml +0 -18
- package/.github/workflows/test.yml +0 -14
- package/.github/workflows/test_pr.yml +0 -12
- package/.oxlintrc.json +0 -150
- package/.releaserc +0 -11
- package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
- package/app/composables/clipping_planes_widget.js +0 -249
- package/app/composables/global_attribute_style.js +0 -181
- package/app/composables/hover_highlight.js +0 -91
- package/app/composables/responsive_middle_truncate.js +0 -34
- package/app/composables/stepper_tree.js +0 -56
- package/app/composables/tree_filter.js +0 -138
- package/app/composables/use_adaptive_styles.js +0 -120
- package/app/composables/use_overlapping_picker.js +0 -169
- package/app/composables/use_quick_colormap.js +0 -32
- package/app/composables/virtual_tree.js +0 -191
- package/app/stores/app.js +0 -326
- package/app/stores/camera_manager.js +0 -57
- package/app/stores/data.js +0 -278
- package/app/stores/data_helpers/collections.js +0 -96
- package/app/stores/data_helpers/mesh.js +0 -122
- package/app/stores/data_style.js +0 -116
- package/app/stores/infra.js +0 -95
- package/app/stores/treeview.js +0 -290
- package/app/utils/attributes.js +0 -23
- package/app/utils/clipping_planes.js +0 -110
- package/app/utils/colormap.js +0 -64
- package/app/utils/default_styles/meshes.js +0 -191
- package/app/utils/status.js +0 -10
- package/commitlint.config.js +0 -20
- package/internal/database/database.js +0 -80
- package/internal/database/tables/camera_positions.js +0 -4
- package/internal/database/tables/data_style.js +0 -4
- package/internal/database/tables/model_component_datastyle.js +0 -4
- package/internal/database/tables/model_component_type_datastyle.js +0 -4
- package/internal/database/tables/model_components.js +0 -4
- package/internal/database/tables/model_components_relation.js +0 -4
- package/internal/stores/data_style/mesh/cells/cell.js +0 -196
- package/internal/stores/data_style/mesh/cells/common.js +0 -39
- package/internal/stores/data_style/mesh/cells/index.js +0 -81
- package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
- package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
- package/internal/stores/data_style/mesh/edges/common.js +0 -32
- package/internal/stores/data_style/mesh/edges/edge.js +0 -195
- package/internal/stores/data_style/mesh/edges/index.js +0 -81
- package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
- package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
- package/internal/stores/data_style/mesh/edges/width.js +0 -34
- package/internal/stores/data_style/mesh/points/common.js +0 -37
- package/internal/stores/data_style/mesh/points/index.js +0 -82
- package/internal/stores/data_style/mesh/points/size.js +0 -35
- package/internal/stores/data_style/mesh/points/vertex.js +0 -193
- package/internal/stores/data_style/mesh/points/visibility.js +0 -37
- package/internal/stores/data_style/mesh/polygons/common.js +0 -32
- package/internal/stores/data_style/mesh/polygons/index.js +0 -107
- package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
- package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
- package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
- package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
- package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
- package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
- package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
- package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
- package/internal/stores/data_style/model/blocks/common.js +0 -51
- package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
- package/internal/stores/data_style/model/blocks/vertex.js +0 -204
- package/internal/stores/data_style/model/blocks/visibility.js +0 -20
- package/internal/stores/data_style/model/color.js +0 -218
- package/internal/stores/data_style/model/common.js +0 -141
- package/internal/stores/data_style/model/corners/common.js +0 -51
- package/internal/stores/data_style/model/corners/vertex.js +0 -204
- package/internal/stores/data_style/model/corners/visibility.js +0 -20
- package/internal/stores/data_style/model/edges/common.js +0 -20
- package/internal/stores/data_style/model/edges/visibility.js +0 -38
- package/internal/stores/data_style/model/lines/common.js +0 -51
- package/internal/stores/data_style/model/lines/edge.js +0 -203
- package/internal/stores/data_style/model/lines/vertex.js +0 -204
- package/internal/stores/data_style/model/lines/visibility.js +0 -20
- package/internal/stores/data_style/model/points/common.js +0 -20
- package/internal/stores/data_style/model/points/index.js +0 -25
- package/internal/stores/data_style/model/points/size.js +0 -36
- package/internal/stores/data_style/model/points/visibility.js +0 -36
- package/internal/stores/data_style/model/selection.js +0 -89
- package/internal/stores/data_style/model/surfaces/common.js +0 -51
- package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
- package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
- package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
- package/internal/stores/data_style/state.js +0 -197
- package/internal/stores/hybrid_viewer/brightness.js +0 -82
- package/internal/stores/hybrid_viewer/camera.js +0 -274
- package/internal/stores/hybrid_viewer/highlight.js +0 -170
- package/internal/stores/hybrid_viewer/scene.js +0 -136
- package/internal/stores/hybrid_viewer/viewport.js +0 -140
- package/internal/utils/api_fetch.js +0 -52
- package/internal/utils/upload_file.js +0 -57
- package/internal/utils/viewer_call.js +0 -49
- package/internal/utils/ws_client.js +0 -29
- package/nuxt.config.js +0 -106
- package/scripts/generate_geode_objects.js +0 -24
- package/server/api/local/app/project_folder_path.post.js +0 -29
- package/server/api/local/app/run_back.post.js +0 -33
- package/server/api/local/app/run_viewer.post.js +0 -33
- package/server/api/local/extensions/upload.put.js +0 -72
- package/server/api/microservice/app/set_app_base_url.post.js +0 -25
- package/server/api/microservice/app/set_back_base_url.post.js +0 -22
- package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
- package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
- package/server/api/serverless/run_cloud.post.js +0 -44
- package/server/utils/server_config.js +0 -58
- package/server/utils/ws_client.js +0 -112
- package/shared/utils/call_raw.js +0 -46
- package/shared/utils/fetch_raw.js +0 -61
- package/shared/utils/file.js +0 -16
- package/shared/utils/response_handlers/load.js +0 -74
- package/tests/integration/data/uploads/test.og_brep +0 -0
- package/tests/integration/data/uploads/test.og_edc2d +0 -0
- package/tests/integration/data/uploads/test.og_edc3d +0 -0
- package/tests/integration/data/uploads/test.og_psf3d +0 -0
- package/tests/integration/data/uploads/test.og_rgd2d +0 -0
- package/tests/integration/data/uploads/test.og_rgd3d +0 -0
- package/tests/integration/data/uploads/test.vtu +0 -22
- package/tests/integration/setup.js +0 -92
- package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
- package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
- package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
- package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
- package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
- package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
- package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
- package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
- package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
- package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
- package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
- package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
- package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
- package/tests/integration/stores/viewer.nuxt.test.js +0 -69
- package/tests/setup_indexeddb.js +0 -4
- package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
- package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
- package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
- package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
- package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
- package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
- package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
- package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
- package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
- package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
- package/tests/unit/components/Step.nuxt.test.js +0 -51
- package/tests/unit/components/Stepper.nuxt.test.js +0 -41
- package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
- package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
- package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
- package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
- package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
- package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
- package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
- package/tests/unit/stores/app.nuxt.test.js +0 -189
- package/tests/unit/stores/back.nuxt.test.js +0 -147
- package/tests/unit/stores/cloud.nuxt.test.js +0 -90
- package/tests/unit/stores/data.nuxt.test.js +0 -162
- package/tests/unit/stores/feedback.nuxt.test.js +0 -90
- package/tests/unit/stores/infra.nuxt.test.js +0 -313
- package/tests/unit/stores/treeview.nuxt.test.js +0 -63
- package/tests/unit/stores/viewer.nuxt.test.js +0 -161
- package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
- package/tests/utils.js +0 -20
- package/tests/vitest.config.js +0 -67
- /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
- /package/shared/{app_mode.js → app_mode.ts} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region shared/utils/parse_boolean.ts
|
|
2
|
+
const TRUTHY_VALUES = /* @__PURE__ */ new Set([
|
|
3
|
+
true,
|
|
4
|
+
1,
|
|
5
|
+
"1",
|
|
6
|
+
"true",
|
|
7
|
+
"yes"
|
|
8
|
+
]);
|
|
9
|
+
const FALSY_VALUES = /* @__PURE__ */ new Set([
|
|
10
|
+
false,
|
|
11
|
+
0,
|
|
12
|
+
"0",
|
|
13
|
+
"false",
|
|
14
|
+
"no"
|
|
15
|
+
]);
|
|
16
|
+
function parseBoolean(value) {
|
|
17
|
+
const normalized = typeof value === "string" ? value.trim().toLowerCase() : value;
|
|
18
|
+
if (TRUTHY_VALUES.has(normalized)) return true;
|
|
19
|
+
if (FALSY_VALUES.has(normalized)) return false;
|
|
20
|
+
throw new Error(`Cannot parse boolean from: ${value}`);
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { parseBoolean };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region shared/utils/response_handlers/load.ts
|
|
2
|
+
function getFileExtension(filename) {
|
|
3
|
+
return filename.slice(filename.lastIndexOf(".") + 1);
|
|
4
|
+
}
|
|
5
|
+
function getObject(objectMap, key) {
|
|
6
|
+
const object = objectMap[key];
|
|
7
|
+
if (!object) throw new Error(`Unknown geode object key: ${key}`);
|
|
8
|
+
return object;
|
|
9
|
+
}
|
|
10
|
+
function selectGeodeObject(objectMap) {
|
|
11
|
+
const objectKeys = Object.keys(objectMap);
|
|
12
|
+
if (objectKeys.length === 0) return;
|
|
13
|
+
const [firstKey] = objectKeys;
|
|
14
|
+
if (objectKeys.length === 1 && firstKey !== void 0 && getObject(objectMap, firstKey).is_loadable > 0) return firstKey;
|
|
15
|
+
const highestLoadScore = Math.max(...objectKeys.map((key) => getObject(objectMap, key).is_loadable));
|
|
16
|
+
if (highestLoadScore <= 0) return;
|
|
17
|
+
const bestScoreObjects = objectKeys.filter((key) => getObject(objectMap, key).is_loadable === highestLoadScore);
|
|
18
|
+
if (bestScoreObjects.length === 1) return bestScoreObjects[0];
|
|
19
|
+
const highestPriority = Math.max(...bestScoreObjects.map((key) => getObject(objectMap, key).object_priority ?? -Infinity));
|
|
20
|
+
const bestPriorityObjects = bestScoreObjects.filter((key) => getObject(objectMap, key).object_priority === highestPriority);
|
|
21
|
+
if (highestPriority !== -Infinity && bestPriorityObjects.length === 1) return bestPriorityObjects[0];
|
|
22
|
+
}
|
|
23
|
+
function intersectAllowedObjects(allowedObjectsList) {
|
|
24
|
+
const allKeys = [...new Set(allowedObjectsList.flatMap((object) => Object.keys(object)))];
|
|
25
|
+
const commonKeys = allKeys.filter((key) => allowedObjectsList.every((object) => key in object));
|
|
26
|
+
const mergedEntries = commonKeys.map((key) => {
|
|
27
|
+
const loadScores = allowedObjectsList.map((object) => getObject(object, key).is_loadable);
|
|
28
|
+
const priorities = allowedObjectsList.map((object) => getObject(object, key).object_priority).filter((priority) => priority !== void 0);
|
|
29
|
+
if (priorities.length > 0) return [key, {
|
|
30
|
+
is_loadable: Math.min(...loadScores),
|
|
31
|
+
object_priority: Math.max(...priorities)
|
|
32
|
+
}];
|
|
33
|
+
return [key, { is_loadable: Math.min(...loadScores) }];
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
commonKeys,
|
|
37
|
+
allKeys,
|
|
38
|
+
mergedAllowedObjects: Object.fromEntries(mergedEntries)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function resolveAllowedObjects(filenames, allowedObjectsList) {
|
|
42
|
+
const { commonKeys, allKeys, mergedAllowedObjects } = intersectAllowedObjects(allowedObjectsList);
|
|
43
|
+
return {
|
|
44
|
+
mergedAllowedObjects,
|
|
45
|
+
multipleFilesNoCommon: filenames.length > 1 && allKeys.length > 0 && commonKeys.length === 0,
|
|
46
|
+
selectedGeodeObject: selectGeodeObject(mergedAllowedObjects)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { getFileExtension, resolveAllowedObjects };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Ajv from "ajv";
|
|
2
|
+
//#region shared/utils/validate_schema.ts
|
|
3
|
+
function validateSchema(schema, body) {
|
|
4
|
+
const ajv = new Ajv();
|
|
5
|
+
for (const keyword of [
|
|
6
|
+
"methods",
|
|
7
|
+
"route",
|
|
8
|
+
"max_retry",
|
|
9
|
+
"rpc"
|
|
10
|
+
]) ajv.addKeyword(keyword);
|
|
11
|
+
return {
|
|
12
|
+
valid: ajv.validate(schema, body),
|
|
13
|
+
error: ajv.errorsText()
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { validateSchema };
|
package/README.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
# OpenGeodeWeb-Front
|
|
2
2
|
|
|
3
3
|
OpenSource Vue/Vuetify framework for web applications.
|
|
4
|
+
|
|
5
|
+
## Development
|
|
6
|
+
|
|
7
|
+
This codebase is written in TypeScript (`strict` mode, `noUncheckedIndexedAccess`).
|
|
8
|
+
|
|
9
|
+
- `npm run typecheck` — type-checks the app/server/shared code (via `nuxt typecheck`) and the tests/scripts code (via `tsc -p tsconfig.tests.json`), which live under separate `tsconfig.json` projects since Nuxt's own generated config only covers the former.
|
|
10
|
+
- `npm run lint` — runs [oxlint](https://oxc.rs/docs/guide/usage/linter.html) with autofix. The project's `.oxlintrc.json` must stay in sync with the shared [`Geode-solutions/actions`](https://github.com/Geode-solutions/actions) config, which CI re-downloads and enforces on every run.
|
|
11
|
+
- `npm run test:unit` / `npm run test:integration` — run the Vitest suites under `tests/`.
|
|
@@ -24,7 +24,12 @@ import TriangulatedSurface2D from "@ogw_front/assets/img/geode_objects/Triangula
|
|
|
24
24
|
import TriangulatedSurface3D from "@ogw_front/assets/img/geode_objects/TriangulatedSurface3D.svg";
|
|
25
25
|
import VertexSet from "@ogw_front/assets/img/geode_objects/VertexSet.svg";
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
interface GeodeObject {
|
|
28
|
+
tooltip: string;
|
|
29
|
+
image: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const geode_objects: Record<string, GeodeObject> = {
|
|
28
33
|
BRep: {
|
|
29
34
|
tooltip: "BRep",
|
|
30
35
|
image: BRep,
|
|
@@ -126,3 +131,5 @@ export const geode_objects = {
|
|
|
126
131
|
image: VertexSet,
|
|
127
132
|
},
|
|
128
133
|
};
|
|
134
|
+
|
|
135
|
+
export { geode_objects };
|
|
@@ -1,17 +1,33 @@
|
|
|
1
|
-
<script setup>
|
|
1
|
+
<script setup lang="ts">
|
|
2
2
|
const DEFAULT_ICON_SIZE = 28;
|
|
3
|
-
const { icon, tooltip, color, size, variant, density, tooltipLocation, iconSize } = defineProps({
|
|
4
|
-
icon: { type: String, required: true },
|
|
5
|
-
tooltip: { type: String, required: true },
|
|
6
|
-
color: { type: String, default: undefined },
|
|
7
|
-
size: { type: [String, Number], default: undefined },
|
|
8
|
-
variant: { type: String, default: undefined },
|
|
9
|
-
density: { type: String, default: "comfortable" },
|
|
10
|
-
tooltipLocation: { type: String, default: "left" },
|
|
11
|
-
iconSize: { type: [String, Number], default: DEFAULT_ICON_SIZE },
|
|
12
|
-
});
|
|
13
3
|
|
|
14
|
-
|
|
4
|
+
interface Props {
|
|
5
|
+
icon: string;
|
|
6
|
+
tooltip: string;
|
|
7
|
+
color?: string;
|
|
8
|
+
size?: string | number;
|
|
9
|
+
variant?: unknown;
|
|
10
|
+
density?: unknown;
|
|
11
|
+
tooltipLocation?: string;
|
|
12
|
+
iconSize?: string | number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
icon,
|
|
17
|
+
tooltip,
|
|
18
|
+
color = undefined,
|
|
19
|
+
size = undefined,
|
|
20
|
+
variant = undefined,
|
|
21
|
+
density = "comfortable",
|
|
22
|
+
tooltipLocation = "left",
|
|
23
|
+
iconSize = DEFAULT_ICON_SIZE,
|
|
24
|
+
} = defineProps<Props>();
|
|
25
|
+
|
|
26
|
+
interface Emits {
|
|
27
|
+
click: [event: MouseEvent];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const emit = defineEmits<Emits>();
|
|
15
31
|
</script>
|
|
16
32
|
|
|
17
33
|
<template>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script setup>
|
|
1
|
+
<script setup lang="ts">
|
|
2
2
|
import { useCameraManagerStore } from "@ogw_front/stores/camera_manager";
|
|
3
3
|
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
4
4
|
|
|
@@ -7,10 +7,10 @@ const hybridViewerStore = useHybridViewerStore();
|
|
|
7
7
|
|
|
8
8
|
const savedPositions = cameraManagerStore.refAllCameraPositions();
|
|
9
9
|
|
|
10
|
-
const editingId = ref(undefined);
|
|
11
|
-
const editingName = ref("");
|
|
10
|
+
const editingId = ref<number | undefined>(undefined);
|
|
11
|
+
const editingName = ref<string>("");
|
|
12
12
|
|
|
13
|
-
async function restorePosition(positionId) {
|
|
13
|
+
async function restorePosition(positionId: number): void {
|
|
14
14
|
const position = await cameraManagerStore.getCameraPosition(positionId);
|
|
15
15
|
if (position) {
|
|
16
16
|
if (hybridViewerStore.genericRenderWindow) {
|
|
@@ -21,17 +21,17 @@ async function restorePosition(positionId) {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
async function deletePosition(positionId) {
|
|
24
|
+
async function deletePosition(positionId: number): void {
|
|
25
25
|
await cameraManagerStore.deleteCameraPosition(positionId);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function startEditing(position) {
|
|
28
|
+
function startEditing(position: { id?: number; name?: string }): void {
|
|
29
29
|
editingId.value = position.id;
|
|
30
|
-
editingName.value = position.name;
|
|
30
|
+
editingName.value = position.name ?? "";
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
async function saveRename() {
|
|
34
|
-
if (editingName.value) {
|
|
33
|
+
async function saveRename(): void {
|
|
34
|
+
if (editingName.value && editingId.value !== undefined) {
|
|
35
35
|
await cameraManagerStore.renameCameraPosition(editingId.value, editingName.value);
|
|
36
36
|
}
|
|
37
37
|
editingId.value = undefined;
|
|
@@ -55,7 +55,7 @@ async function saveRename() {
|
|
|
55
55
|
size="x-small"
|
|
56
56
|
class="mr-1"
|
|
57
57
|
:data-testid="`restoreCameraPosition${position.name}Button`"
|
|
58
|
-
@click="restorePosition(position.id)"
|
|
58
|
+
@click="restorePosition(position.id!)"
|
|
59
59
|
>
|
|
60
60
|
<v-icon size="14">mdi-play</v-icon>
|
|
61
61
|
<v-tooltip activator="parent" location="top">Restore</v-tooltip>
|
|
@@ -94,7 +94,7 @@ async function saveRename() {
|
|
|
94
94
|
variant="text"
|
|
95
95
|
size="x-small"
|
|
96
96
|
color="error"
|
|
97
|
-
@click="deletePosition(position.id)"
|
|
97
|
+
@click="deletePosition(position.id!)"
|
|
98
98
|
>
|
|
99
99
|
<v-icon size="14">mdi-delete</v-icon>
|
|
100
100
|
<v-tooltip activator="parent" location="top">Delete</v-tooltip>
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
<script setup>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CameraOptions } from "@ogw_internal/stores/hybrid_viewer/vtk_types.js";
|
|
2
3
|
import { useCameraManagerStore } from "@ogw_front/stores/camera_manager";
|
|
3
4
|
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
4
5
|
|
|
5
6
|
const cameraManagerStore = useCameraManagerStore();
|
|
6
7
|
const hybridViewerStore = useHybridViewerStore();
|
|
7
8
|
|
|
8
|
-
const newPositionName = ref("");
|
|
9
|
+
const newPositionName = ref<string>("");
|
|
9
10
|
|
|
10
|
-
async function saveCurrentPosition() {
|
|
11
|
+
async function saveCurrentPosition(): void {
|
|
11
12
|
if (!newPositionName.value) {
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
15
|
await cameraManagerStore.saveCameraPosition(
|
|
15
16
|
newPositionName.value,
|
|
16
|
-
|
|
17
|
+
// HybridViewerStore.camera_options is a loosely-typed reactive object (it's
|
|
18
|
+
// Populated dynamically from the viewer's camera state), but is always a
|
|
19
|
+
// CameraOptions shape at runtime once the viewer has synced a camera.
|
|
20
|
+
toRaw(hybridViewerStore.camera_options) as unknown as CameraOptions,
|
|
17
21
|
);
|
|
18
22
|
newPositionName.value = "";
|
|
19
23
|
}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
import List from "@ogw_front/components/CameraManager/List";
|
|
3
|
-
import Saver from "@ogw_front/components/CameraManager/Saver";
|
|
4
|
-
import ToolPanel from "@ogw_front/components/ToolPanel";
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import List from "@ogw_front/components/CameraManager/List.vue";
|
|
3
|
+
import Saver from "@ogw_front/components/CameraManager/Saver.vue";
|
|
4
|
+
import ToolPanel from "@ogw_front/components/ToolPanel.vue";
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const DEFAULT_PANEL_WIDTH = 260;
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
interface Emits {
|
|
9
|
+
close: [];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const emit = defineEmits<Emits>();
|
|
13
|
+
|
|
14
|
+
interface Props {
|
|
15
|
+
showDialog: boolean;
|
|
16
|
+
width?: number;
|
|
17
|
+
escapeFunction?: () => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const {
|
|
21
|
+
showDialog,
|
|
22
|
+
width = DEFAULT_PANEL_WIDTH,
|
|
23
|
+
escapeFunction = undefined,
|
|
24
|
+
} = defineProps<Props>();
|
|
13
25
|
|
|
14
|
-
function handleClose() {
|
|
26
|
+
function handleClose(): void {
|
|
15
27
|
if (escapeFunction) {
|
|
16
28
|
escapeFunction();
|
|
17
29
|
} else {
|
|
@@ -19,7 +31,7 @@ function handleClose() {
|
|
|
19
31
|
}
|
|
20
32
|
}
|
|
21
33
|
|
|
22
|
-
const show = computed({
|
|
34
|
+
const show = computed<boolean>({
|
|
23
35
|
get: () => showDialog,
|
|
24
36
|
set: (val) => {
|
|
25
37
|
if (!val) {
|
|
@@ -1,18 +1,32 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
import
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CameraOptions } from "@ogw_internal/stores/hybrid_viewer/vtk_types.js";
|
|
3
|
+
import ToolPanel from "@ogw_front/components/ToolPanel.vue";
|
|
3
4
|
import { applyCameraOptions } from "@ogw_internal/stores/hybrid_viewer/camera";
|
|
4
5
|
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
5
6
|
import { newInstance as vtkAnnotatedCubeActor } from "@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor";
|
|
6
7
|
import { newInstance as vtkGenericRenderWindow } from "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow";
|
|
7
8
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const DEFAULT_PANEL_WIDTH = 260;
|
|
10
|
+
|
|
11
|
+
interface Props {
|
|
12
|
+
panel?: boolean;
|
|
13
|
+
width?: number;
|
|
14
|
+
escapeFunction?: () => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const {
|
|
18
|
+
panel = false,
|
|
19
|
+
width = DEFAULT_PANEL_WIDTH,
|
|
20
|
+
escapeFunction = undefined,
|
|
21
|
+
} = defineProps<Props>();
|
|
22
|
+
|
|
23
|
+
interface Emits {
|
|
24
|
+
select: [value: string];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const emit = defineEmits<Emits>();
|
|
13
28
|
|
|
14
|
-
const show = defineModel("show", {
|
|
15
|
-
const emit = defineEmits(["select"]);
|
|
29
|
+
const show = defineModel<boolean>("show", { default: false });
|
|
16
30
|
|
|
17
31
|
const orientations = [
|
|
18
32
|
{
|
|
@@ -65,15 +79,15 @@ const orientations = [
|
|
|
65
79
|
},
|
|
66
80
|
];
|
|
67
81
|
|
|
68
|
-
const hoveredFace = ref(undefined);
|
|
82
|
+
const hoveredFace = ref<string | undefined>(undefined);
|
|
69
83
|
const hybridViewerStore = useHybridViewerStore();
|
|
70
84
|
const cubeContainer = useTemplateRef("cubeContainer");
|
|
71
85
|
|
|
72
|
-
let genericRenderWindow = undefined;
|
|
73
|
-
let cubeActor = undefined;
|
|
86
|
+
let genericRenderWindow: unknown = undefined;
|
|
87
|
+
let cubeActor: unknown = undefined;
|
|
74
88
|
let isInteracting = false;
|
|
75
89
|
|
|
76
|
-
function initVTK() {
|
|
90
|
+
function initVTK(): void {
|
|
77
91
|
if (genericRenderWindow) {
|
|
78
92
|
return;
|
|
79
93
|
}
|
|
@@ -100,7 +114,7 @@ function initVTK() {
|
|
|
100
114
|
edgeColor: "rgba(255, 255, 255, 0.4)",
|
|
101
115
|
edgeThickness: 0.1,
|
|
102
116
|
resolution: 400,
|
|
103
|
-
fontSizeScale: (resolution) => resolution / 4,
|
|
117
|
+
fontSizeScale: (resolution: number) => resolution / 4,
|
|
104
118
|
});
|
|
105
119
|
|
|
106
120
|
for (const orientation of orientations) {
|
|
@@ -118,13 +132,13 @@ function initVTK() {
|
|
|
118
132
|
renderer.resetCamera();
|
|
119
133
|
}
|
|
120
134
|
|
|
121
|
-
function syncCubeCamera() {
|
|
135
|
+
function syncCubeCamera(): void {
|
|
122
136
|
const options = hybridViewerStore.camera_options;
|
|
123
137
|
if (!genericRenderWindow || isInteracting || !options.position) {
|
|
124
138
|
return;
|
|
125
139
|
}
|
|
126
140
|
const camera = genericRenderWindow.getRenderer().getActiveCamera();
|
|
127
|
-
applyCameraOptions(camera, options);
|
|
141
|
+
applyCameraOptions(camera, options as unknown as CameraOptions);
|
|
128
142
|
genericRenderWindow.getRenderer().resetCamera();
|
|
129
143
|
genericRenderWindow.getRenderWindow().render();
|
|
130
144
|
}
|
|
@@ -151,7 +165,7 @@ watch(hoveredFace, (newFace, oldFace) => {
|
|
|
151
165
|
if (!cubeActor) {
|
|
152
166
|
return;
|
|
153
167
|
}
|
|
154
|
-
function updateFace(face, active) {
|
|
168
|
+
function updateFace(face: string | undefined, active: boolean): void {
|
|
155
169
|
const config = orientations.find((orientation) => orientation.face === face);
|
|
156
170
|
if (config) {
|
|
157
171
|
cubeActor[`set${config.vtkKey}FaceProperty`]({
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
<script setup>
|
|
1
|
+
<script setup lang="ts">
|
|
2
2
|
import { getPlaneCssColor } from "@ogw_front/utils/clipping_planes";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
plane: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
},
|
|
9
|
-
index: {
|
|
10
|
-
type: Number,
|
|
11
|
-
required: true,
|
|
12
|
-
},
|
|
13
|
-
});
|
|
4
|
+
interface Props {
|
|
5
|
+
plane: { origin?: number[]; normal: number[] };
|
|
6
|
+
index: number;
|
|
7
|
+
}
|
|
14
8
|
|
|
15
|
-
const
|
|
9
|
+
const { plane, index } = defineProps<Props>();
|
|
10
|
+
|
|
11
|
+
interface Emits {
|
|
12
|
+
remove: [];
|
|
13
|
+
flipNormal: [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const emit = defineEmits<Emits>();
|
|
16
17
|
</script>
|
|
17
18
|
|
|
18
19
|
<template>
|
|
@@ -1,28 +1,35 @@
|
|
|
1
|
-
<script setup>
|
|
1
|
+
<script setup lang="ts">
|
|
2
2
|
import { DEBOUNCE_DELAY, DEFAULT_NORMALS } from "@ogw_front/utils/clipping_planes";
|
|
3
|
-
import ClippingPlaneCard from "@ogw_front/components/ClippingPlaneCard";
|
|
4
|
-
import ToolPanel from "@ogw_front/components/ToolPanel";
|
|
3
|
+
import ClippingPlaneCard from "@ogw_front/components/ClippingPlaneCard.vue";
|
|
4
|
+
import ToolPanel from "@ogw_front/components/ToolPanel.vue";
|
|
5
5
|
import { useClippingPlanesWidget } from "@ogw_front/composables/clipping_planes_widget";
|
|
6
6
|
import { useDataStore } from "@ogw_front/stores/data";
|
|
7
7
|
import { useDebounceFn } from "@vueuse/core";
|
|
8
8
|
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
escapeFunction
|
|
12
|
-
}
|
|
10
|
+
interface Props {
|
|
11
|
+
escapeFunction?: () => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const { escapeFunction = undefined } = defineProps<Props>();
|
|
13
15
|
|
|
14
|
-
const show = defineModel("show", {
|
|
16
|
+
const show = defineModel<boolean>("show", { default: false });
|
|
15
17
|
const dataStore = useDataStore();
|
|
16
18
|
const hybridViewerStore = useHybridViewerStore();
|
|
17
|
-
const targetAllVisible = ref(true);
|
|
18
|
-
const selectedDatasetIds = ref([]);
|
|
19
|
-
const planes = ref
|
|
19
|
+
const targetAllVisible = ref<boolean>(true);
|
|
20
|
+
const selectedDatasetIds = ref<string[]>([]);
|
|
21
|
+
const planes = ref<{ origin?: number[]; normal: number[] }[]>([
|
|
22
|
+
{ origin: undefined, normal: [1, 0, 0] },
|
|
23
|
+
]);
|
|
20
24
|
const allItems = dataStore.refAllItems();
|
|
21
|
-
const availableDatasets = computed(() =>
|
|
22
|
-
allItems.value.map((item) => ({
|
|
25
|
+
const availableDatasets = computed<{ title: string; value: string }[]>(() =>
|
|
26
|
+
allItems.value.map((item) => ({
|
|
27
|
+
title: item.name || item.id,
|
|
28
|
+
value: item.id,
|
|
29
|
+
})),
|
|
23
30
|
);
|
|
24
31
|
const widgetContainer = useTemplateRef("widgetContainer");
|
|
25
|
-
let debouncedApply = undefined;
|
|
32
|
+
let debouncedApply: ((...args: unknown[]) => void) | undefined = undefined;
|
|
26
33
|
|
|
27
34
|
const {
|
|
28
35
|
getSceneCenter,
|
|
@@ -39,10 +46,10 @@ const {
|
|
|
39
46
|
selectedDatasetIds,
|
|
40
47
|
allItems,
|
|
41
48
|
hybridViewerStore,
|
|
42
|
-
debouncedApply: (...args) => debouncedApply?.(...args),
|
|
49
|
+
debouncedApply: (...args: unknown[]) => debouncedApply?.(...args),
|
|
43
50
|
});
|
|
44
51
|
|
|
45
|
-
async function applyClippingPlanes() {
|
|
52
|
+
async function applyClippingPlanes(): Promise<void> {
|
|
46
53
|
const allIds = allItems.value.map((item) => item.id);
|
|
47
54
|
if (allIds.length === 0) {
|
|
48
55
|
return;
|
|
@@ -65,22 +72,25 @@ async function applyClippingPlanes() {
|
|
|
65
72
|
|
|
66
73
|
debouncedApply = useDebounceFn(() => applyClippingPlanes(), DEBOUNCE_DELAY);
|
|
67
74
|
|
|
68
|
-
function addPlane() {
|
|
69
|
-
|
|
75
|
+
function addPlane(): void {
|
|
76
|
+
// Index is always in-bounds (modulo the fixed-size list); the fallbacks only
|
|
77
|
+
// Satisfy noUncheckedIndexedAccess and are never hit at runtime.
|
|
78
|
+
const normal = DEFAULT_NORMALS[planes.value.length % DEFAULT_NORMALS.length] ??
|
|
79
|
+
DEFAULT_NORMALS[0] ?? [1, 0, 0];
|
|
70
80
|
planes.value.push({ origin: getSceneCenter(), normal });
|
|
71
81
|
}
|
|
72
82
|
|
|
73
|
-
function removePlane(index) {
|
|
83
|
+
function removePlane(index: number): void {
|
|
74
84
|
planes.value.splice(index, 1);
|
|
75
85
|
}
|
|
76
86
|
|
|
77
|
-
function flipNormal(plane) {
|
|
87
|
+
function flipNormal(plane: { normal: number[] }): void {
|
|
78
88
|
plane.normal = plane.normal.map((component) => -component);
|
|
79
89
|
syncWidgets();
|
|
80
90
|
applyClippingPlanes();
|
|
81
91
|
}
|
|
82
92
|
|
|
83
|
-
async function resetClippingPlanes() {
|
|
93
|
+
async function resetClippingPlanes(): Promise<void> {
|
|
84
94
|
setFromWidget(true);
|
|
85
95
|
planes.value = [{ origin: undefined, normal: [1, 0, 0] }];
|
|
86
96
|
updateWidgetPlacement({ isReset: true });
|
|
@@ -88,7 +98,7 @@ async function resetClippingPlanes() {
|
|
|
88
98
|
await applyClippingPlanes();
|
|
89
99
|
}
|
|
90
100
|
|
|
91
|
-
async function removeClippingPlanes() {
|
|
101
|
+
async function removeClippingPlanes(): Promise<void> {
|
|
92
102
|
const allIds = allItems.value.map((item) => item.id);
|
|
93
103
|
await hybridViewerStore.setClippingPlanes(allIds, []);
|
|
94
104
|
}
|
|
@@ -1,27 +1,35 @@
|
|
|
1
|
-
<script setup>
|
|
1
|
+
<script setup lang="ts">
|
|
2
2
|
import schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
|
|
3
3
|
import { useBackStore } from "@ogw_front/stores/back";
|
|
4
4
|
|
|
5
5
|
const schema = schemas.opengeodeweb_back.geographic_coordinate_systems;
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
interface Emits {
|
|
8
|
+
update_values: [values: Record<string, unknown>];
|
|
9
|
+
increment_step: [];
|
|
10
|
+
decrement_step: [];
|
|
11
|
+
}
|
|
8
12
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
const emit = defineEmits<Emits>();
|
|
14
|
+
|
|
15
|
+
interface Props {
|
|
16
|
+
geodeObjectType: string;
|
|
17
|
+
keyToUpdate: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const { geodeObjectType, keyToUpdate } = defineProps<Props>();
|
|
13
21
|
|
|
14
|
-
const search = ref("");
|
|
15
|
-
const data_table_loading = ref(false);
|
|
16
|
-
const crs_list = ref([]);
|
|
17
|
-
const selected_crs = ref([]);
|
|
22
|
+
const search = ref<string>("");
|
|
23
|
+
const data_table_loading = ref<boolean>(false);
|
|
24
|
+
const crs_list = ref<Record<string, unknown>[]>([]);
|
|
25
|
+
const selected_crs = ref<unknown[]>([]);
|
|
18
26
|
const toggle_loading = useToggle(data_table_loading);
|
|
19
27
|
const backStore = useBackStore();
|
|
20
28
|
|
|
21
|
-
function get_selected_crs(crs_code) {
|
|
22
|
-
for (
|
|
23
|
-
if (
|
|
24
|
-
return
|
|
29
|
+
function get_selected_crs(crs_code: unknown): unknown {
|
|
30
|
+
for (const crs of crs_list.value) {
|
|
31
|
+
if (crs && crs["code"] === crs_code) {
|
|
32
|
+
return crs;
|
|
25
33
|
}
|
|
26
34
|
}
|
|
27
35
|
}
|
|
@@ -35,14 +43,14 @@ watch(selected_crs, (new_value) => {
|
|
|
35
43
|
emit("increment_step");
|
|
36
44
|
});
|
|
37
45
|
|
|
38
|
-
async function get_crs_table() {
|
|
46
|
+
async function get_crs_table(): void {
|
|
39
47
|
const params = { geode_object_type: geodeObjectType };
|
|
40
48
|
toggle_loading();
|
|
41
49
|
await backStore.request(
|
|
42
50
|
{ schema, params },
|
|
43
51
|
{
|
|
44
|
-
response_function: (response) => {
|
|
45
|
-
crs_list.value = response.crs_list;
|
|
52
|
+
response_function: (response: unknown) => {
|
|
53
|
+
crs_list.value = (response as { crs_list: Record<string, unknown>[] }).crs_list;
|
|
46
54
|
},
|
|
47
55
|
},
|
|
48
56
|
);
|
|
@@ -58,7 +66,7 @@ const headers = [
|
|
|
58
66
|
},
|
|
59
67
|
{ title: "Code", align: "end", key: "code" },
|
|
60
68
|
{ title: "Name", align: "end", key: "name" },
|
|
61
|
-
];
|
|
69
|
+
] as const;
|
|
62
70
|
|
|
63
71
|
// oxlint-disable-next-line no-top-level-await
|
|
64
72
|
await get_crs_table();
|