@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.
Files changed (499) hide show
  1. package/.build/opengeodeweb_front_schemas.js +175 -0
  2. package/.build/server/utils/app_config.js +57 -0
  3. package/.build/server/utils/cleanup.js +135 -0
  4. package/.build/server/utils/cloud.js +156 -0
  5. package/.build/server/utils/microservices.js +153 -0
  6. package/.build/server/utils/path.js +108 -0
  7. package/.build/server/utils/scripts.js +134 -0
  8. package/.build/server/utils/server.js +44 -0
  9. package/.build/server/utils/server_config.js +51 -0
  10. package/.build/server/utils/stream.js +6 -0
  11. package/.build/server/utils/ws_client.js +100 -0
  12. package/.build/shared/app_mode.js +8 -0
  13. package/.build/shared/scripts.js +49 -0
  14. package/.build/shared/utils/call_raw.js +31 -0
  15. package/.build/shared/utils/call_schema.js +28 -0
  16. package/.build/shared/utils/fetch_raw.js +52 -0
  17. package/.build/shared/utils/fetch_schema.js +32 -0
  18. package/.build/shared/utils/file.js +14 -0
  19. package/.build/shared/utils/parse_boolean.js +23 -0
  20. package/.build/shared/utils/response_handlers/load.js +50 -0
  21. package/.build/shared/utils/types.js +1 -0
  22. package/.build/shared/utils/validate_schema.js +17 -0
  23. package/README.md +8 -0
  24. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  25. package/app/components/ActionButton.vue +28 -12
  26. package/app/components/Basic/Slider.vue +2 -2
  27. package/app/components/Basic/Switch.vue +2 -2
  28. package/app/components/CameraManager/List.vue +11 -11
  29. package/app/components/CameraManager/Saver.vue +8 -4
  30. package/app/components/CameraManager.vue +24 -12
  31. package/app/components/CameraOrientation.vue +31 -17
  32. package/app/components/ClippingPlaneCard.vue +13 -12
  33. package/app/components/ClippingPlanes.vue +31 -21
  34. package/app/components/CrsSelector.vue +26 -18
  35. package/app/components/DeleteDialog.vue +18 -16
  36. package/app/components/DragAndDrop.vue +55 -37
  37. package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
  38. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  39. package/app/components/ExtensionSelector.vue +34 -18
  40. package/app/components/FeedBack/ErrorBanner.vue +4 -3
  41. package/app/components/FeedBack/Snackers.vue +6 -5
  42. package/app/components/FetchingData.vue +8 -12
  43. package/app/components/FileSelector.vue +27 -17
  44. package/app/components/FileUploader.vue +51 -30
  45. package/app/components/GlassCard.vue +17 -13
  46. package/app/components/HybridRenderingView.vue +25 -12
  47. package/app/components/HybridViewerTooltip.vue +28 -26
  48. package/app/components/InfraConnected.vue +1 -1
  49. package/app/components/Launcher.vue +12 -10
  50. package/app/components/Loading/EcoMessages.vue +24 -13
  51. package/app/components/Loading/Header.vue +6 -7
  52. package/app/components/Loading/Progress.vue +6 -7
  53. package/app/components/Loading.vue +10 -14
  54. package/app/components/MissingFilesSelector.vue +35 -19
  55. package/app/components/ObjectSelector.vue +37 -21
  56. package/app/components/PackagesVersions.vue +16 -8
  57. package/app/components/Recaptcha.vue +17 -23
  58. package/app/components/RemoteRenderingView.vue +21 -15
  59. package/app/components/Ruler.vue +11 -9
  60. package/app/components/Screenshot.vue +25 -19
  61. package/app/components/SearchBar.vue +12 -6
  62. package/app/components/ShrinkFilter.vue +19 -14
  63. package/app/components/Step.vue +32 -12
  64. package/app/components/Stepper.vue +19 -7
  65. package/app/components/ToolPanel.vue +29 -13
  66. package/app/components/ViewToolbar.vue +53 -44
  67. package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
  68. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  69. package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
  70. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
  71. package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
  72. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  73. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
  74. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
  75. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
  76. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
  77. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
  78. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
  79. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
  80. package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
  81. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
  82. package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
  83. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
  84. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
  85. package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
  86. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
  87. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  88. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  89. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  90. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  91. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  92. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  93. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  94. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
  95. package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
  96. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
  97. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  98. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
  99. package/app/components/Viewer/ObjectTree/Box.vue +32 -15
  100. package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
  101. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
  102. package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
  103. package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
  104. package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
  105. package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
  106. package/app/components/Viewer/Options/ColorMapList.vue +52 -24
  107. package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
  108. package/app/components/Viewer/Options/ColorPicker.vue +239 -50
  109. package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
  110. package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
  111. package/app/components/Viewer/Options/OptionsSection.vue +7 -5
  112. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  113. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  114. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  115. package/app/components/Viewer/Options/TextureItem.vue +29 -22
  116. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  117. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  118. package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
  119. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
  120. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  121. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  122. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  123. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
  124. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  125. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  126. package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
  127. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  128. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  129. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  130. package/app/components/Viewer/Ui.vue +19 -14
  131. package/app/components/Wrapper.vue +16 -10
  132. package/app/components/ZScaling.vue +18 -10
  133. package/app/components/csv-preview/CsvPreviewer.vue +72 -50
  134. package/app/components/csv-preview/CsvSettings.vue +30 -50
  135. package/app/components/csv-preview/CsvTable.vue +34 -14
  136. package/app/composables/{batch_style.js → batch_style.ts} +9 -7
  137. package/app/composables/clipping_planes_widget.ts +204 -0
  138. package/app/composables/clipping_planes_widget_entries.ts +189 -0
  139. package/app/composables/copy_to_clipboard.ts +7 -0
  140. package/app/composables/global_attribute_style.ts +303 -0
  141. package/app/composables/hover_highlight.ts +127 -0
  142. package/app/composables/{model_collections.js → model_collections.ts} +28 -9
  143. package/app/composables/{model_components.js → model_components.ts} +28 -9
  144. package/app/composables/{project_manager.js → project_manager.ts} +77 -20
  145. package/app/composables/responsive_middle_truncate.ts +48 -0
  146. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  147. package/app/composables/stepper_tree.ts +79 -0
  148. package/app/composables/tree_filter.ts +194 -0
  149. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
  150. package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
  151. package/app/composables/use_adaptive_styles.ts +186 -0
  152. package/app/composables/use_overlapping_picker.ts +263 -0
  153. package/app/composables/use_quick_colormap.ts +55 -0
  154. package/app/composables/virtual_tree.ts +271 -0
  155. package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
  156. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
  157. package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
  158. package/app/stores/app.ts +252 -0
  159. package/app/stores/app_helpers/extension.ts +179 -0
  160. package/app/stores/{back.js → back.ts} +54 -28
  161. package/app/stores/camera_manager.ts +80 -0
  162. package/app/stores/{cloud.js → cloud.ts} +18 -13
  163. package/app/stores/data.ts +392 -0
  164. package/app/stores/data_helpers/collections.ts +138 -0
  165. package/app/stores/data_helpers/mesh.ts +169 -0
  166. package/app/stores/data_style.ts +167 -0
  167. package/app/stores/{feedback.js → feedback.ts} +19 -8
  168. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
  169. package/app/stores/infra.ts +106 -0
  170. package/app/stores/{menu.js → menu.ts} +67 -36
  171. package/app/stores/treeview.ts +383 -0
  172. package/app/stores/{viewer.js → viewer.ts} +75 -42
  173. package/app/utils/attributes.ts +40 -0
  174. package/app/utils/clipping_planes.ts +222 -0
  175. package/app/utils/color_picker.js +54 -0
  176. package/app/utils/colormap.ts +102 -0
  177. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  178. package/app/utils/default_styles/{index.js → index.ts} +4 -3
  179. package/app/utils/default_styles/meshes.ts +264 -0
  180. package/app/utils/default_styles/{models.js → models.ts} +106 -52
  181. package/app/utils/{extension.js → extension.ts} +63 -19
  182. package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
  183. package/app/utils/{log.js → log.ts} +12 -2
  184. package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
  185. package/app/utils/status.ts +19 -0
  186. package/app/utils/{stores.js → stores.ts} +5 -5
  187. package/app/utils/{string.js → string.ts} +6 -6
  188. package/app/utils/{treeview.js → treeview.ts} +4 -1
  189. package/internal/database/{base_database.js → base_database.ts} +7 -3
  190. package/internal/database/database.ts +102 -0
  191. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  192. package/internal/database/tables/camera_positions.ts +6 -0
  193. package/internal/database/tables/{data.js → data.ts} +3 -1
  194. package/internal/database/tables/data_style.ts +6 -0
  195. package/internal/database/tables/model_component_datastyle.ts +6 -0
  196. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  197. package/internal/database/tables/model_components.ts +6 -0
  198. package/internal/database/tables/model_components_relation.ts +6 -0
  199. package/internal/database/tables/table_definition.ts +5 -0
  200. package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
  201. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
  202. package/internal/stores/data_style/mesh/cells/common.ts +50 -0
  203. package/internal/stores/data_style/mesh/cells/index.ts +161 -0
  204. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
  205. package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
  206. package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
  207. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
  208. package/internal/stores/data_style/mesh/edges/common.ts +41 -0
  209. package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
  210. package/internal/stores/data_style/mesh/edges/index.ts +155 -0
  211. package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
  212. package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
  213. package/internal/stores/data_style/mesh/edges/width.ts +42 -0
  214. package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
  215. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
  216. package/internal/stores/data_style/mesh/points/common.ts +51 -0
  217. package/internal/stores/data_style/mesh/points/index.ts +133 -0
  218. package/internal/stores/data_style/mesh/points/size.ts +43 -0
  219. package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
  220. package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
  221. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
  222. package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
  223. package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
  224. package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
  225. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
  226. package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
  227. package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
  228. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
  229. package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
  230. package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
  231. package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
  232. package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
  233. package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
  234. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
  235. package/internal/stores/data_style/model/blocks/common.ts +67 -0
  236. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
  237. package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
  238. package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
  239. package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
  240. package/internal/stores/data_style/model/color.ts +348 -0
  241. package/internal/stores/data_style/model/common.ts +262 -0
  242. package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
  243. package/internal/stores/data_style/model/corners/common.ts +71 -0
  244. package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
  245. package/internal/stores/data_style/model/corners/vertex.ts +315 -0
  246. package/internal/stores/data_style/model/corners/visibility.ts +39 -0
  247. package/internal/stores/data_style/model/edges/common.ts +29 -0
  248. package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
  249. package/internal/stores/data_style/model/edges/visibility.ts +55 -0
  250. package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
  251. package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
  252. package/internal/stores/data_style/model/lines/common.ts +63 -0
  253. package/internal/stores/data_style/model/lines/edge.ts +343 -0
  254. package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
  255. package/internal/stores/data_style/model/lines/vertex.ts +344 -0
  256. package/internal/stores/data_style/model/lines/visibility.ts +37 -0
  257. package/internal/stores/data_style/model/points/common.ts +25 -0
  258. package/internal/stores/data_style/model/points/index.ts +35 -0
  259. package/internal/stores/data_style/model/points/size.ts +44 -0
  260. package/internal/stores/data_style/model/points/visibility.ts +46 -0
  261. package/internal/stores/data_style/model/selection.ts +138 -0
  262. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
  263. package/internal/stores/data_style/model/surfaces/common.ts +69 -0
  264. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
  265. package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
  266. package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
  267. package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
  268. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
  269. package/internal/stores/data_style/state.ts +281 -0
  270. package/internal/stores/data_style/types.ts +30 -0
  271. package/internal/stores/hybrid_viewer/brightness.ts +124 -0
  272. package/internal/stores/hybrid_viewer/camera.ts +326 -0
  273. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
  274. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  275. package/internal/stores/hybrid_viewer/core.ts +64 -0
  276. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
  277. package/internal/stores/hybrid_viewer/highlight.ts +183 -0
  278. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
  279. package/internal/stores/hybrid_viewer/scene.ts +125 -0
  280. package/internal/stores/hybrid_viewer/viewport.ts +177 -0
  281. package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
  282. package/internal/utils/api_fetch.ts +133 -0
  283. package/internal/utils/upload_file.ts +115 -0
  284. package/internal/utils/viewer_call.ts +99 -0
  285. package/internal/utils/ws_client.ts +54 -0
  286. package/nuxt.config.ts +168 -0
  287. package/opengeodeweb_front_schemas.json +2 -2
  288. package/package.json +49 -13
  289. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
  290. package/server/api/local/app/project_folder_path.post.ts +33 -0
  291. package/server/api/local/app/run_back.post.ts +39 -0
  292. package/server/api/local/app/run_viewer.post.ts +39 -0
  293. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
  294. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
  295. package/server/api/local/extensions/upload.put.ts +71 -0
  296. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
  297. package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
  298. package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
  299. package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
  300. package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
  301. package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
  302. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
  303. package/server/api/serverless/run_cloud.post.ts +92 -0
  304. package/server/utils/{app_config.js → app_config.ts} +40 -18
  305. package/server/utils/{cleanup.js → cleanup.ts} +76 -29
  306. package/server/utils/{cloud.js → cloud.ts} +33 -17
  307. package/server/utils/{extension.js → extension.ts} +31 -4
  308. package/server/utils/{microservices.js → microservices.ts} +68 -27
  309. package/server/utils/{path.js → path.ts} +36 -17
  310. package/server/utils/{scripts.js → scripts.ts} +49 -33
  311. package/server/utils/{server.js → server.ts} +13 -6
  312. package/server/utils/server_config.ts +74 -0
  313. package/server/utils/stream.ts +6 -0
  314. package/server/utils/ws_client.ts +165 -0
  315. package/shared/{scripts.js → scripts.ts} +15 -10
  316. package/shared/utils/call_raw.ts +73 -0
  317. package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
  318. package/shared/utils/fetch_raw.ts +125 -0
  319. package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
  320. package/shared/utils/file.ts +22 -0
  321. package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
  322. package/shared/utils/response_handlers/load.ts +109 -0
  323. package/shared/utils/types.ts +27 -0
  324. package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
  325. package/.github/workflows/config.json +0 -5
  326. package/.github/workflows/deploy.yml +0 -15
  327. package/.github/workflows/manual_release.yml +0 -11
  328. package/.github/workflows/merge_request.yml +0 -9
  329. package/.github/workflows/pr_update.yml +0 -11
  330. package/.github/workflows/prepare_deploy.yml +0 -9
  331. package/.github/workflows/schedule.yml +0 -18
  332. package/.github/workflows/test.yml +0 -14
  333. package/.github/workflows/test_pr.yml +0 -12
  334. package/.oxlintrc.json +0 -150
  335. package/.releaserc +0 -11
  336. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
  337. package/app/composables/clipping_planes_widget.js +0 -249
  338. package/app/composables/global_attribute_style.js +0 -181
  339. package/app/composables/hover_highlight.js +0 -91
  340. package/app/composables/responsive_middle_truncate.js +0 -34
  341. package/app/composables/stepper_tree.js +0 -56
  342. package/app/composables/tree_filter.js +0 -138
  343. package/app/composables/use_adaptive_styles.js +0 -120
  344. package/app/composables/use_overlapping_picker.js +0 -169
  345. package/app/composables/use_quick_colormap.js +0 -32
  346. package/app/composables/virtual_tree.js +0 -191
  347. package/app/stores/app.js +0 -326
  348. package/app/stores/camera_manager.js +0 -57
  349. package/app/stores/data.js +0 -278
  350. package/app/stores/data_helpers/collections.js +0 -96
  351. package/app/stores/data_helpers/mesh.js +0 -122
  352. package/app/stores/data_style.js +0 -116
  353. package/app/stores/infra.js +0 -95
  354. package/app/stores/treeview.js +0 -290
  355. package/app/utils/attributes.js +0 -23
  356. package/app/utils/clipping_planes.js +0 -110
  357. package/app/utils/colormap.js +0 -64
  358. package/app/utils/default_styles/meshes.js +0 -191
  359. package/app/utils/status.js +0 -10
  360. package/commitlint.config.js +0 -20
  361. package/internal/database/database.js +0 -80
  362. package/internal/database/tables/camera_positions.js +0 -4
  363. package/internal/database/tables/data_style.js +0 -4
  364. package/internal/database/tables/model_component_datastyle.js +0 -4
  365. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  366. package/internal/database/tables/model_components.js +0 -4
  367. package/internal/database/tables/model_components_relation.js +0 -4
  368. package/internal/stores/data_style/mesh/cells/cell.js +0 -196
  369. package/internal/stores/data_style/mesh/cells/common.js +0 -39
  370. package/internal/stores/data_style/mesh/cells/index.js +0 -81
  371. package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
  372. package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
  373. package/internal/stores/data_style/mesh/edges/common.js +0 -32
  374. package/internal/stores/data_style/mesh/edges/edge.js +0 -195
  375. package/internal/stores/data_style/mesh/edges/index.js +0 -81
  376. package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
  377. package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
  378. package/internal/stores/data_style/mesh/edges/width.js +0 -34
  379. package/internal/stores/data_style/mesh/points/common.js +0 -37
  380. package/internal/stores/data_style/mesh/points/index.js +0 -82
  381. package/internal/stores/data_style/mesh/points/size.js +0 -35
  382. package/internal/stores/data_style/mesh/points/vertex.js +0 -193
  383. package/internal/stores/data_style/mesh/points/visibility.js +0 -37
  384. package/internal/stores/data_style/mesh/polygons/common.js +0 -32
  385. package/internal/stores/data_style/mesh/polygons/index.js +0 -107
  386. package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
  387. package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
  388. package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
  389. package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
  390. package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
  391. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
  392. package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
  393. package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
  394. package/internal/stores/data_style/model/blocks/common.js +0 -51
  395. package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
  396. package/internal/stores/data_style/model/blocks/vertex.js +0 -204
  397. package/internal/stores/data_style/model/blocks/visibility.js +0 -20
  398. package/internal/stores/data_style/model/color.js +0 -218
  399. package/internal/stores/data_style/model/common.js +0 -141
  400. package/internal/stores/data_style/model/corners/common.js +0 -51
  401. package/internal/stores/data_style/model/corners/vertex.js +0 -204
  402. package/internal/stores/data_style/model/corners/visibility.js +0 -20
  403. package/internal/stores/data_style/model/edges/common.js +0 -20
  404. package/internal/stores/data_style/model/edges/visibility.js +0 -38
  405. package/internal/stores/data_style/model/lines/common.js +0 -51
  406. package/internal/stores/data_style/model/lines/edge.js +0 -203
  407. package/internal/stores/data_style/model/lines/vertex.js +0 -204
  408. package/internal/stores/data_style/model/lines/visibility.js +0 -20
  409. package/internal/stores/data_style/model/points/common.js +0 -20
  410. package/internal/stores/data_style/model/points/index.js +0 -25
  411. package/internal/stores/data_style/model/points/size.js +0 -36
  412. package/internal/stores/data_style/model/points/visibility.js +0 -36
  413. package/internal/stores/data_style/model/selection.js +0 -89
  414. package/internal/stores/data_style/model/surfaces/common.js +0 -51
  415. package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
  416. package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
  417. package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
  418. package/internal/stores/data_style/state.js +0 -197
  419. package/internal/stores/hybrid_viewer/brightness.js +0 -82
  420. package/internal/stores/hybrid_viewer/camera.js +0 -274
  421. package/internal/stores/hybrid_viewer/highlight.js +0 -170
  422. package/internal/stores/hybrid_viewer/scene.js +0 -136
  423. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  424. package/internal/utils/api_fetch.js +0 -52
  425. package/internal/utils/upload_file.js +0 -57
  426. package/internal/utils/viewer_call.js +0 -49
  427. package/internal/utils/ws_client.js +0 -29
  428. package/nuxt.config.js +0 -106
  429. package/scripts/generate_geode_objects.js +0 -24
  430. package/server/api/local/app/project_folder_path.post.js +0 -29
  431. package/server/api/local/app/run_back.post.js +0 -33
  432. package/server/api/local/app/run_viewer.post.js +0 -33
  433. package/server/api/local/extensions/upload.put.js +0 -72
  434. package/server/api/microservice/app/set_app_base_url.post.js +0 -25
  435. package/server/api/microservice/app/set_back_base_url.post.js +0 -22
  436. package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
  437. package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
  438. package/server/api/serverless/run_cloud.post.js +0 -44
  439. package/server/utils/server_config.js +0 -58
  440. package/server/utils/ws_client.js +0 -112
  441. package/shared/utils/call_raw.js +0 -46
  442. package/shared/utils/fetch_raw.js +0 -61
  443. package/shared/utils/file.js +0 -16
  444. package/shared/utils/response_handlers/load.js +0 -74
  445. package/tests/integration/data/uploads/test.og_brep +0 -0
  446. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  447. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  448. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  449. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  450. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  451. package/tests/integration/data/uploads/test.vtu +0 -22
  452. package/tests/integration/setup.js +0 -92
  453. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  454. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  455. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  456. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  457. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  458. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  459. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  460. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  461. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  462. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  463. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  464. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  465. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  466. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  467. package/tests/setup_indexeddb.js +0 -4
  468. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  469. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  470. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  471. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  472. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  473. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  474. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  475. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  476. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  477. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  478. package/tests/unit/components/Step.nuxt.test.js +0 -51
  479. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  480. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  481. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  482. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  483. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  484. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  485. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  486. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  487. package/tests/unit/stores/app.nuxt.test.js +0 -189
  488. package/tests/unit/stores/back.nuxt.test.js +0 -147
  489. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  490. package/tests/unit/stores/data.nuxt.test.js +0 -162
  491. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  492. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  493. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  494. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  495. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  496. package/tests/utils.js +0 -20
  497. package/tests/vitest.config.js +0 -67
  498. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
  499. /package/shared/{app_mode.js → app_mode.ts} +0 -0
@@ -0,0 +1,167 @@
1
+ import type {
2
+ ModelComponentStyle,
3
+ ModelComponentTypeStyle,
4
+ ObjectStyle,
5
+ } from "@ogw_internal/stores/data_style/types";
6
+ import type { Table } from "dexie";
7
+ import { database } from "@ogw_internal/database/database.js";
8
+ import { getDefaultStyle } from "@ogw_front/utils/default_styles";
9
+ import { useDataStore } from "@ogw_front/stores/data";
10
+ import { useDataStyleState } from "@ogw_internal/stores/data_style/state";
11
+ import { useMeshStyle } from "@ogw_internal/stores/data_style/mesh/index";
12
+ import { useModelStyle } from "@ogw_internal/stores/data_style/model/index";
13
+
14
+ interface DataStyleSnapshot {
15
+ readonly styles: Record<string, ObjectStyle>;
16
+ readonly componentStyles: Record<string, ModelComponentStyle>;
17
+ readonly modelComponentTypeStyles: Record<string, ModelComponentTypeStyle>;
18
+ }
19
+
20
+ // The database's table map is dynamically assembled at runtime (see internal/database/database.ts), so its exported type is a loose `{}`; cast it to the shape it actually has at runtime rather than widening every call site.
21
+ type DatabaseTables = Record<string, Table<Record<string, unknown>, string> | undefined>;
22
+
23
+ // `noUncheckedIndexedAccess` sees these as possibly undefined even though they're always registered before this store is used; guard defensively rather than asserting.
24
+ function requireTable<TableValue>(table: TableValue | undefined, name: string): TableValue {
25
+ if (table === undefined) {
26
+ throw new Error(`Database table not initialized: ${name}`);
27
+ }
28
+ return table;
29
+ }
30
+
31
+ function isRecord(value: unknown): value is Record<string, unknown> {
32
+ return typeof value === "object" && value !== null;
33
+ }
34
+
35
+ // oxlint-disable-next-line max-lines-per-function
36
+ export const useDataStyleStore = defineStore("dataStyle", () => {
37
+ const dataStyleState = useDataStyleState();
38
+ const meshStyleStore = useMeshStyle();
39
+ const modelStyleStore = useModelStyle();
40
+ const dataStore = useDataStore();
41
+ // oxlint-disable-next-line no-unsafe-type-assertion -- the database Proxy is typed as `{}` at its export site; this cast documents its real runtime shape.
42
+ const typedDatabase = database as unknown as DatabaseTables;
43
+ const data_style_db = requireTable(typedDatabase.data_style, "data_style");
44
+ const model_component_type_datastyle_db = requireTable(
45
+ typedDatabase.model_component_type_datastyle,
46
+ "model_component_type_datastyle",
47
+ );
48
+ const component_datastyle_db = requireTable(
49
+ typedDatabase.model_component_datastyle,
50
+ "model_component_datastyle",
51
+ );
52
+
53
+ async function addDataStyle(id: string, geode_object: string): Promise<void> {
54
+ const defaultStyle = getDefaultStyle(geode_object);
55
+ await data_style_db.put(
56
+ structuredClone({ id, ...(isRecord(defaultStyle) ? defaultStyle : {}) }),
57
+ );
58
+ }
59
+
60
+ async function setVisibility(id: string, visibility: boolean): Promise<unknown> {
61
+ const item = await dataStore.item(id);
62
+ if (!(await dataStore.isItemViewable(item))) {
63
+ return dataStyleState.mutateStyle(id, { visibility });
64
+ }
65
+
66
+ const { viewer_type } = item;
67
+
68
+ if (viewer_type === "mesh") {
69
+ return meshStyleStore.setMeshVisibility(id, visibility);
70
+ }
71
+ if (viewer_type === "model") {
72
+ return modelStyleStore.setModelVisibility(id, visibility);
73
+ }
74
+ throw new Error("Unknown viewer_type");
75
+ }
76
+
77
+ async function applyDefaultStyle(id: string): Promise<unknown[]> {
78
+ const item = await dataStore.item(id);
79
+ if (!(await dataStore.isItemViewable(item))) {
80
+ throw new Error(`applyDefaultStyle called for non-viewable item: ${id}`);
81
+ }
82
+
83
+ const { viewer_type } = item;
84
+
85
+ if (viewer_type === "mesh") {
86
+ return meshStyleStore.applyMeshStyle(id);
87
+ }
88
+ if (viewer_type === "model") {
89
+ return modelStyleStore.applyModelStyle(id);
90
+ }
91
+ throw new Error(`Unknown viewer_type: ${viewer_type}`);
92
+ }
93
+
94
+ function exportStores(): DataStyleSnapshot {
95
+ return {
96
+ styles: dataStyleState.styles.value,
97
+ componentStyles: dataStyleState.componentStyles.value,
98
+ modelComponentTypeStyles: dataStyleState.modelComponentTypeStyles.value,
99
+ };
100
+ }
101
+
102
+ // oxlint-disable-next-line prefer-readonly-parameter-types -- ObjectStyle (external type) has a mutable index signature and mutable nested StyleValues fields that can't be marked readonly from here.
103
+ async function importStores(snapshot: DataStyleSnapshot): Promise<void> {
104
+ const stylesSnapshot = snapshot.styles;
105
+ const componentStylesSnapshot = snapshot.componentStyles;
106
+ const modelComponentTypeStylesSnapshot = snapshot.modelComponentTypeStyles;
107
+
108
+ await dataStyleState.clear();
109
+
110
+ const style_promises = Object.entries(stylesSnapshot).map(
111
+ // oxlint-disable-next-line prefer-readonly-parameter-types -- same external ObjectStyle limitation as above.
112
+ async ([id, style]: readonly [string, ObjectStyle]) => {
113
+ const key = await data_style_db.put(structuredClone({ ...style, id }));
114
+ return key;
115
+ },
116
+ );
117
+ const component_style_promises = Object.values(componentStylesSnapshot).map(
118
+ async (style: ModelComponentStyle) => {
119
+ const key = await component_datastyle_db.put(structuredClone(style));
120
+ return key;
121
+ },
122
+ );
123
+ const model_component_type_style_promises = Object.values(modelComponentTypeStylesSnapshot).map(
124
+ async (style: ModelComponentTypeStyle) => {
125
+ const key = await model_component_type_datastyle_db.put(structuredClone(style));
126
+ return key;
127
+ },
128
+ );
129
+
130
+ await Promise.all([
131
+ ...style_promises,
132
+ ...component_style_promises,
133
+ ...model_component_type_style_promises,
134
+ ]);
135
+ }
136
+
137
+ async function applyAllStylesFromState(): Promise<void> {
138
+ const ids = Object.keys(dataStyleState.styles.value);
139
+ const promises = ids.map(async (id) => {
140
+ const meta = await dataStore.item(id);
141
+ if (!(await dataStore.isItemViewable(meta))) {
142
+ return;
143
+ }
144
+ const viewerType = meta.viewer_type;
145
+ if (viewerType === "mesh") {
146
+ await meshStyleStore.applyMeshStyle(id);
147
+ } else if (viewerType === "model") {
148
+ await modelStyleStore.applyModelStyle(id);
149
+ }
150
+ });
151
+ await Promise.all(promises);
152
+ }
153
+
154
+ return {
155
+ addDataStyle,
156
+ applyDefaultStyle,
157
+ setVisibility,
158
+ exportStores,
159
+ importStores,
160
+ applyAllStylesFromState,
161
+ ...dataStyleState,
162
+ ...meshStyleStore,
163
+ ...modelStyleStore,
164
+ };
165
+ });
166
+
167
+ export type { DataStyleSnapshot };
@@ -3,16 +3,27 @@ import { v4 as uuidv4 } from "uuid";
3
3
  const MILLISECONDS_IN_SECOND = 1000;
4
4
  const DEFAULT_FEEDBACKS_TIMEOUT_SECONDS = 10;
5
5
 
6
+ type FeedbackType = "error" | "success" | "warning";
7
+
8
+ interface Feedback {
9
+ id: string;
10
+ type: FeedbackType;
11
+ code?: number;
12
+ route?: string;
13
+ name?: string;
14
+ description?: string;
15
+ }
16
+
6
17
  export const useFeedbackStore = defineStore("feedback", {
7
18
  state: () => ({
8
- feedbacks: [],
19
+ feedbacks: [] as Feedback[],
9
20
  server_error: false,
10
21
  feedbacks_timeout_miliseconds: DEFAULT_FEEDBACKS_TIMEOUT_SECONDS * MILLISECONDS_IN_SECOND,
11
22
  }),
12
23
  actions: {
13
- async add_error(code, route, name, description) {
24
+ add_error(code: number, route: string, name: string, description: string) {
14
25
  const feedbackId = uuidv4();
15
- await this.feedbacks.push({
26
+ this.feedbacks.push({
16
27
  id: feedbackId,
17
28
  type: "error",
18
29
  code,
@@ -24,9 +35,9 @@ export const useFeedbackStore = defineStore("feedback", {
24
35
  this.delete_feedback(feedbackId);
25
36
  }, this.feedbacks_timeout_miliseconds);
26
37
  },
27
- async add_success(description) {
38
+ add_success(description: string) {
28
39
  const feedbackId = uuidv4();
29
- await this.feedbacks.push({
40
+ this.feedbacks.push({
30
41
  id: feedbackId,
31
42
  type: "success",
32
43
  description,
@@ -35,9 +46,9 @@ export const useFeedbackStore = defineStore("feedback", {
35
46
  this.delete_feedback(feedbackId);
36
47
  }, this.feedbacks_timeout_miliseconds);
37
48
  },
38
- async add_warning(description) {
49
+ add_warning(description: string) {
39
50
  const feedbackId = uuidv4();
40
- await this.feedbacks.push({
51
+ this.feedbacks.push({
41
52
  id: feedbackId,
42
53
  type: "warning",
43
54
  description,
@@ -46,7 +57,7 @@ export const useFeedbackStore = defineStore("feedback", {
46
57
  this.delete_feedback(feedbackId);
47
58
  }, this.feedbacks_timeout_miliseconds);
48
59
  },
49
- delete_feedback(feedbackId) {
60
+ delete_feedback(feedbackId: string) {
50
61
  this.feedbacks = this.feedbacks.filter((feedback) => feedback.id !== feedbackId);
51
62
  },
52
63
  delete_server_error() {
@@ -1,30 +1,31 @@
1
+ import {
2
+ type ViewStreamLike,
3
+ useHybridViewerViewport,
4
+ } from "@ogw_internal/stores/hybrid_viewer/viewport";
1
5
  import {
2
6
  applySnapshot,
3
7
  getCameraOptions,
4
8
  useHybridViewerCamera,
5
9
  } from "@ogw_internal/stores/hybrid_viewer/camera";
6
10
  import { BACKGROUND_COLOR } from "@ogw_internal/stores/hybrid_viewer/constants";
11
+ import type { CameraOptions } from "@ogw_internal/stores/hybrid_viewer/vtk_types";
7
12
  import { useHybridViewerBrightness } from "@ogw_internal/stores/hybrid_viewer/brightness";
13
+ import { useHybridViewerCore } from "@ogw_internal/stores/hybrid_viewer/core";
8
14
  import { useHybridViewerFilters } from "@ogw_internal/stores/hybrid_viewer/filters";
9
15
  import { useHybridViewerHighlight } from "@ogw_internal/stores/hybrid_viewer/highlight";
10
16
  import { useHybridViewerRuler } from "@ogw_internal/stores/hybrid_viewer/ruler";
11
17
  import { useHybridViewerScene } from "@ogw_internal/stores/hybrid_viewer/scene";
12
- import { useHybridViewerViewport } from "@ogw_internal/stores/hybrid_viewer/viewport";
13
18
  import { newInstance as vtkGenericRenderWindow } from "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow";
14
19
 
15
20
  import { Status } from "@ogw_front/utils/status";
16
21
  import { useViewerStore } from "@ogw_front/stores/viewer";
17
22
 
18
- import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
19
-
20
23
  // oxlint-disable max-lines-per-function, max-statements
21
24
  export const useHybridViewerStore = defineStore("hybridViewer", () => {
22
25
  const viewerStore = useViewerStore();
23
- const genericRenderWindow = reactive({});
24
- const status = ref(Status.NOT_CREATED);
25
- const is_moving = ref(false);
26
- const is_picking = ref(false);
27
- let imageStyle = undefined;
26
+ const { genericRenderWindow, status, is_moving, is_picking, remoteRender } =
27
+ useHybridViewerCore();
28
+ let imageStyle: CSSStyleDeclaration | undefined = undefined;
28
29
 
29
30
  const brightnessStore = useHybridViewerBrightness();
30
31
  const sceneStore = useHybridViewerScene();
@@ -40,14 +41,19 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
40
41
  if (!genericRenderWindow.value) {
41
42
  return;
42
43
  }
44
+ // oxlint-disable-next-line no-unsafe-assignment -- vtk.js has no types for getApiSpecificRenderWindow(); narrowed below.
43
45
  const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
44
- const canvas = webGLRenderWindow.getCanvas();
45
- if (canvas && canvas.parentElement) {
46
+ // oxlint-disable-next-line no-unsafe-type-assertion -- trusted vtk.js OpenGL render window API boundary.
47
+ const openGLRenderWindow = webGLRenderWindow as unknown as {
48
+ getCanvas: () => HTMLCanvasElement;
49
+ };
50
+ const canvas = openGLRenderWindow.getCanvas();
51
+ if (canvas.parentElement) {
46
52
  canvas.parentElement.style.cursor = value ? "crosshair" : "default";
47
53
  }
48
54
  });
49
55
 
50
- async function initHybridViewer() {
56
+ async function initHybridViewer(): Promise<void> {
51
57
  if (status.value !== Status.NOT_CREATED) {
52
58
  return;
53
59
  }
@@ -56,19 +62,38 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
56
62
  background: BACKGROUND_COLOR,
57
63
  listenWindowResize: false,
58
64
  });
59
- const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
65
+ const webGLRenderWindow =
66
+ // oxlint-disable-next-line no-unsafe-type-assertion -- trusted vtk.js OpenGL render window API boundary.
67
+ genericRenderWindow.value.getApiSpecificRenderWindow() as unknown as {
68
+ getReferenceByName: (name: string) => { style: CSSStyleDeclaration };
69
+ setBackgroundImage: (image: unknown) => void;
70
+ };
60
71
  imageStyle = webGLRenderWindow.getReferenceByName("bgImage").style;
61
- Object.assign(imageStyle, { transition: "opacity 0.1s ease-in", zIndex: 1 });
72
+ Object.assign(imageStyle, {
73
+ transition: "opacity 0.1s ease-in",
74
+ zIndex: 1,
75
+ });
62
76
  await viewerStore.ws_connect();
63
- const imageStream = viewerStore.client.getImageStream();
77
+ // oxlint-disable-next-line no-unsafe-type-assertion -- trusted @kitware/vtk.js WebSocket client API boundary.
78
+ const clientApi = viewerStore.client as unknown as {
79
+ getImageStream: () => {
80
+ createViewStream: (id: string) => ViewStreamLike;
81
+ };
82
+ };
83
+ const imageStream = clientApi.getImageStream();
64
84
  viewportStore.viewStream.value = imageStream.createViewStream("-1");
65
- viewportStore.viewStream.value.onImageReady((event) => {
85
+ viewportStore.viewStream.value?.onImageReady((event: { image: unknown }) => {
66
86
  if (is_moving.value) {
67
87
  return;
68
88
  }
69
- brightnessStore.latestImage.value = event.image;
89
+ // oxlint-disable no-unsafe-type-assertion -- image payload shape is guaranteed by the viewer's onImageReady contract.
90
+ const latestImage = event.image as typeof brightnessStore.latestImage.value;
91
+ // oxlint-enable no-unsafe-type-assertion
92
+ brightnessStore.latestImage.value = latestImage;
70
93
  webGLRenderWindow.setBackgroundImage(event.image);
71
- imageStyle.opacity = 1;
94
+ if (imageStyle) {
95
+ imageStyle.opacity = "1";
96
+ }
72
97
  });
73
98
  const renderer = genericRenderWindow.value.getRenderer();
74
99
  const camera = renderer.getActiveCamera();
@@ -79,36 +104,15 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
79
104
  status.value = Status.CREATED;
80
105
  }
81
106
 
82
- let renderPromise = undefined;
83
- let renderPending = false;
84
-
85
- function remoteRender() {
86
- if (renderPromise) {
87
- renderPending = true;
88
- return renderPromise;
89
- }
90
-
91
- renderPromise = (async () => {
92
- try {
93
- const schema = viewer_schemas.opengeodeweb_viewer.viewer.render;
94
- await viewerStore.request({ schema });
95
- } finally {
96
- renderPromise = undefined;
97
- if (renderPending) {
98
- renderPending = false;
99
- await remoteRender();
100
- }
101
- }
102
- })();
103
- return renderPromise;
104
- }
105
-
106
- function exportStores() {
107
- const renderer = genericRenderWindow.value.getRenderer();
108
- const camera = renderer.getActiveCamera();
107
+ function exportStores(): {
108
+ zScale: number;
109
+ camera_options: CameraOptions | Record<string, unknown>;
110
+ } {
111
+ const renderer = genericRenderWindow.value?.getRenderer();
112
+ const camera = renderer?.getActiveCamera();
109
113
  return {
110
114
  zScale: sceneStore.zScale.value,
111
- camera_options: getCameraOptions(camera) || cameraStore.camera_options,
115
+ camera_options: (camera ? getCameraOptions(camera) : undefined) ?? cameraStore.camera_options,
112
116
  };
113
117
  }
114
118
 
@@ -0,0 +1,106 @@
1
+ import { Status } from "@ogw_front/utils/status";
2
+ import { appMode } from "@ogw_shared/app_mode";
3
+ import { setAppBaseUrl } from "@ogw_shared/scripts";
4
+ import { useCloudStore } from "@ogw_front/stores/cloud";
5
+
6
+ interface ElectronApi {
7
+ electronAPI: {
8
+ project_folder_path: (args: { projectFolderPath: string }) => void;
9
+ };
10
+ }
11
+
12
+ declare global {
13
+ // oxlint-disable-next-line no-var -- required for global augmentation
14
+ var electronAPI: ElectronApi["electronAPI"];
15
+ }
16
+
17
+ export const useInfraStore = defineStore("infra", {
18
+ state: () => ({
19
+ app_mode: useRuntimeConfig().public.MODE,
20
+ status: Status.NOT_CREATED,
21
+ microservices: [] as Microservice[],
22
+ domain_name: globalThis.location.hostname,
23
+ }),
24
+ getters: {
25
+ microservices_connected(): boolean {
26
+ return this.microservices.every((store: Microservice) => store.status === Status.CONNECTED);
27
+ },
28
+ microservices_busy(): boolean {
29
+ return this.microservices.some((store: Microservice) => store.is_busy === true);
30
+ },
31
+ },
32
+ actions: {
33
+ register_microservice(store: Microservice) {
34
+ const store_name = store.$id;
35
+
36
+ if (
37
+ !this.microservices.some((microservice: Microservice) => microservice.$id === store_name)
38
+ ) {
39
+ this.microservices.push(store);
40
+ }
41
+ },
42
+ unregister_microservice(microserviceId: string) {
43
+ this.microservices = this.microservices.filter(
44
+ (microservice: Microservice) => microservice.$id !== microserviceId,
45
+ );
46
+ },
47
+ async create_backend(email?: string) {
48
+ if (this.status === Status.CREATED) {
49
+ return undefined;
50
+ }
51
+ await navigator.locks.request("infra.create_backend", async () => {
52
+ if (this.status === Status.CREATED) {
53
+ return;
54
+ }
55
+ this.status = Status.CREATING;
56
+ if (this.app_mode === appMode.CLOUD) {
57
+ const cloudStore = useCloudStore();
58
+ await cloudStore.launch(email ?? "");
59
+ } else {
60
+ const { useAppStore } = await import("@ogw_front/stores/app");
61
+ const appStore = useAppStore();
62
+ await appStore.createProjectFolder();
63
+ if (this.app_mode === appMode.DESKTOP) {
64
+ globalThis.electronAPI.project_folder_path({
65
+ projectFolderPath: appStore.projectFolderPath,
66
+ });
67
+ }
68
+ await setAppBaseUrl(appStore.base_url);
69
+ const microservices_with_launch = this.microservices.filter(
70
+ (store: Microservice) => store.launch,
71
+ );
72
+ const launch_promises = microservices_with_launch.map(async (store: Microservice) => {
73
+ const result = await store.launch?.({
74
+ projectFolderPath: appStore.projectFolderPath,
75
+ });
76
+ return result;
77
+ });
78
+ const { registerRunningExtensions } = await import("@ogw_front/utils/extension");
79
+ launch_promises.push(registerRunningExtensions());
80
+ await Promise.all(launch_promises);
81
+ }
82
+ this.status = Status.CREATED;
83
+ return this.create_connection();
84
+ });
85
+ return undefined;
86
+ },
87
+ async create_connection() {
88
+ await Promise.all(
89
+ this.microservices.map(async (store: Microservice) => {
90
+ await store.connect();
91
+ }),
92
+ );
93
+ },
94
+ },
95
+ share: {
96
+ omit: ["microservices"],
97
+ },
98
+ });
99
+
100
+ export interface Microservice {
101
+ $id: string;
102
+ status?: string;
103
+ is_busy?: boolean;
104
+ launch?: (params: Record<string, unknown>) => Promise<unknown>;
105
+ connect: () => Promise<void>;
106
+ }
@@ -1,42 +1,63 @@
1
1
  // PointSet components
2
- import PointSetPointsOptions from "@ogw_front/components/Viewer/PointSet/SpecificPointsOptions";
2
+ import PointSetPointsOptions from "@ogw_front/components/Viewer/PointSet/SpecificPointsOptions.vue";
3
3
 
4
4
  // EdgedCurve components
5
- import EdgedCurveEdgesOptions from "@ogw_front/components/Viewer/EdgedCurve/SpecificEdgesOptions";
6
- import EdgedCurvePointsOptions from "@ogw_front/components/Viewer/EdgedCurve/PointsOptions";
5
+ import EdgedCurveEdgesOptions from "@ogw_front/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue";
6
+ import EdgedCurvePointsOptions from "@ogw_front/components/Viewer/EdgedCurve/PointsOptions.vue";
7
7
 
8
8
  // Surface components
9
- import SurfaceEdgesOptions from "@ogw_front/components/Viewer/Surface/EdgesOptions";
10
- import SurfacePointsOptions from "@ogw_front/components/Viewer/Surface/PointsOptions";
11
- import SurfacePolygonsOptions from "@ogw_front/components/Viewer/Surface/PolygonsOptions";
9
+ import SurfaceEdgesOptions from "@ogw_front/components/Viewer/Surface/EdgesOptions.vue";
10
+ import SurfacePointsOptions from "@ogw_front/components/Viewer/Surface/PointsOptions.vue";
11
+ import SurfacePolygonsOptions from "@ogw_front/components/Viewer/Surface/PolygonsOptions.vue";
12
12
 
13
13
  // TriangulatedSurface components
14
- import TriangulatedSurfaceTrianglesOptions from "@ogw_front/components/Viewer/Surface/Triangulated/TrianglesOptions";
14
+ import TriangulatedSurfaceTrianglesOptions from "@ogw_front/components/Viewer/Surface/Triangulated/TrianglesOptions.vue";
15
15
 
16
16
  // Grid 2D components
17
- import Grid2DCellsOptions from "@ogw_front/components/Viewer/Grid/2D/CellsOptions";
18
- import Grid2DEdgesOptions from "@ogw_front/components/Viewer/Grid/2D/EdgesOptions";
19
- import Grid2DPointsOptions from "@ogw_front/components/Viewer/Grid/2D/PointsOptions";
17
+ import Grid2DCellsOptions from "@ogw_front/components/Viewer/Grid/2D/CellsOptions.vue";
18
+ import Grid2DEdgesOptions from "@ogw_front/components/Viewer/Grid/2D/EdgesOptions.vue";
19
+ import Grid2DPointsOptions from "@ogw_front/components/Viewer/Grid/2D/PointsOptions.vue";
20
20
 
21
21
  // Grid 3D components
22
- import Grid3DCellsOptions from "@ogw_front/components/Viewer/Grid/3D/CellsOptions";
23
- import Grid3DEdgesOptions from "@ogw_front/components/Viewer/Grid/3D/EdgesOptions";
24
- import Grid3DPointsOptions from "@ogw_front/components/Viewer/Grid/3D/PointsOptions";
22
+ import Grid3DCellsOptions from "@ogw_front/components/Viewer/Grid/3D/CellsOptions.vue";
23
+ import Grid3DEdgesOptions from "@ogw_front/components/Viewer/Grid/3D/EdgesOptions.vue";
24
+ import Grid3DPointsOptions from "@ogw_front/components/Viewer/Grid/3D/PointsOptions.vue";
25
25
 
26
26
  // Solid components
27
- import SolidEdgesOptions from "@ogw_front/components/Viewer/Solid/EdgesOptions";
28
- import SolidPointsOptions from "@ogw_front/components/Viewer/Solid/PointsOptions";
29
- import SolidPolygonsOptions from "@ogw_front/components/Viewer/Solid/PolygonsOptions";
30
- import SolidPolyhedraOptions from "@ogw_front/components/Viewer/Solid/SpecificPolyhedraOptions";
27
+ import SolidEdgesOptions from "@ogw_front/components/Viewer/Solid/EdgesOptions.vue";
28
+ import SolidPointsOptions from "@ogw_front/components/Viewer/Solid/PointsOptions.vue";
29
+ import SolidPolygonsOptions from "@ogw_front/components/Viewer/Solid/PolygonsOptions.vue";
30
+ import SolidPolyhedraOptions from "@ogw_front/components/Viewer/Solid/SpecificPolyhedraOptions.vue";
31
31
 
32
32
  // TetrahedralSolid components
33
- import TetrahedralSolidTetrahedraOptions from "@ogw_front/components/Viewer/TetrahedralSolid/TetrahedraOptions";
34
- import TetrahedralSolidTrianglesOptions from "@ogw_front/components/Viewer/TetrahedralSolid/TrianglesOptions";
33
+ import TetrahedralSolidTetrahedraOptions from "@ogw_front/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue";
34
+ import TetrahedralSolidTrianglesOptions from "@ogw_front/components/Viewer/TetrahedralSolid/TrianglesOptions.vue";
35
35
 
36
36
  // Model components
37
- import ModelEdgesOptions from "@ogw_front/components/Viewer/Generic/Model/EdgesOptions";
38
- import ModelPointsOptions from "@ogw_front/components/Viewer/Generic/Model/PointsOptions";
39
- import ModelStyleOptions from "@ogw_front/components/Viewer/Generic/Model/ModelStyleOptions";
37
+ import ModelEdgesOptions from "@ogw_front/components/Viewer/Generic/Model/EdgesOptions.vue";
38
+ import ModelPointsOptions from "@ogw_front/components/Viewer/Generic/Model/PointsOptions.vue";
39
+ import ModelStyleOptions from "@ogw_front/components/Viewer/Generic/Model/ModelStyleOptions.vue";
40
+
41
+ import type { Component } from "vue";
42
+
43
+ type MenuItems = Component[];
44
+
45
+ interface MenuMetaData {
46
+ viewer_type?: string;
47
+ geode_object_type?: string;
48
+ [key: string]: unknown;
49
+ }
50
+
51
+ interface OpenMenuOptions {
52
+ readonly id: string;
53
+ readonly x: number | undefined;
54
+ readonly y: number | undefined;
55
+ readonly width: number;
56
+ readonly height: number;
57
+ readonly top: number;
58
+ readonly left: number;
59
+ readonly meta_data: MenuMetaData | undefined;
60
+ }
40
61
 
41
62
  const PointSet_menu = [PointSetPointsOptions];
42
63
 
@@ -85,7 +106,7 @@ const StructuralModel_menu = [ModelEdgesOptions, ModelPointsOptions, ModelStyleO
85
106
 
86
107
  const ModelComponent_menu = [ModelEdgesOptions, ModelPointsOptions, ModelStyleOptions];
87
108
 
88
- const menusData = {
109
+ const menusData: Record<string, Record<string, MenuItems>> = {
89
110
  mesh: {
90
111
  EdgedCurve2D: EdgedCurve_menu,
91
112
  EdgedCurve3D: EdgedCurve_menu,
@@ -122,24 +143,33 @@ const menusData = {
122
143
  export const useMenuStore = defineStore("menu", () => {
123
144
  const menus = shallowRef(menusData);
124
145
  const display_menu = ref(false);
125
- const current_id = ref(undefined);
146
+ const current_id = ref<string | undefined>(undefined);
126
147
  const menuX = ref(0);
127
148
  const menuY = ref(0);
128
149
  const containerWidth = ref(window.innerWidth);
129
150
  const containerHeight = ref(window.innerHeight);
130
151
  const containerTop = ref(0);
131
152
  const containerLeft = ref(0);
132
- const active_item_index = ref(undefined);
133
- const current_meta_data = ref({});
134
-
135
- function getMenuItems(objectType, geodeObject) {
136
- if (!objectType || !geodeObject || !menus.value[objectType]) {
153
+ const active_item_index = ref<number | undefined>(undefined);
154
+ const current_meta_data = ref<MenuMetaData>({});
155
+
156
+ function getMenuItems(
157
+ objectType: string | undefined,
158
+ geodeObject: string | undefined,
159
+ ): MenuItems {
160
+ if (
161
+ objectType === undefined ||
162
+ objectType === "" ||
163
+ geodeObject === undefined ||
164
+ geodeObject === "" ||
165
+ !menus.value[objectType]
166
+ ) {
137
167
  return [];
138
168
  }
139
- return menus.value[objectType][geodeObject] || [];
169
+ return menus.value[objectType]?.[geodeObject] ?? [];
140
170
  }
141
171
 
142
- function closeMenu() {
172
+ function closeMenu(): void {
143
173
  active_item_index.value = undefined;
144
174
  current_id.value = undefined;
145
175
  current_meta_data.value = {};
@@ -148,8 +178,9 @@ export const useMenuStore = defineStore("menu", () => {
148
178
  display_menu.value = false;
149
179
  }
150
180
 
151
- async function openMenu(id, x, y, width, height, top, left, meta_data) {
152
- await closeMenu();
181
+ function openMenu(options: OpenMenuOptions): void {
182
+ const { id, x, y, width, height, top, left, meta_data } = options;
183
+ closeMenu();
153
184
 
154
185
  if (meta_data) {
155
186
  const items = getMenuItems(meta_data.viewer_type, meta_data.geode_object_type);
@@ -159,7 +190,7 @@ export const useMenuStore = defineStore("menu", () => {
159
190
  }
160
191
 
161
192
  current_id.value = id;
162
- current_meta_data.value = meta_data || {};
193
+ current_meta_data.value = meta_data ?? {};
163
194
 
164
195
  if (x !== undefined && y !== undefined) {
165
196
  menuX.value = x;
@@ -174,12 +205,12 @@ export const useMenuStore = defineStore("menu", () => {
174
205
  display_menu.value = true;
175
206
  }
176
207
 
177
- function setMenuPosition(x, y) {
208
+ function setMenuPosition(x: number, y: number): void {
178
209
  menuX.value = x;
179
210
  menuY.value = y;
180
211
  }
181
212
 
182
- function toggleItemOptions(index) {
213
+ function toggleItemOptions(index: number): void {
183
214
  if (active_item_index.value === index) {
184
215
  active_item_index.value = undefined;
185
216
  } else {