@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
@@ -1,46 +1,64 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { useBackStore } from "@ogw_front/stores/back";
3
3
 
4
- import CsvPreviewer from "@ogw_front/components/csv-preview/CsvPreviewer";
5
- import DragAndDrop from "@ogw_front/components/DragAndDrop";
4
+ import CsvPreviewer from "@ogw_front/components/csv-preview/CsvPreviewer.vue";
5
+ import DragAndDrop from "@ogw_front/components/DragAndDrop.vue";
6
6
 
7
- const emit = defineEmits(["files_uploaded", "decrement_step", "reset_values"]);
7
+ // Files carry extra app-specific bookkeeping fields once picked up here.
8
+ type UploadFile = File & { isConfigured?: boolean; displayName?: string };
8
9
 
9
- const { multiple, accept, files, autoUpload, showOverlay, mini } = defineProps({
10
- multiple: { type: Boolean, default: false },
11
- accept: { type: [String, Array], default: "" },
12
- files: { type: Array, default: () => [] },
13
- autoUpload: { type: Boolean, default: true },
14
- showOverlay: { type: Boolean, default: false },
15
- mini: { type: Boolean, default: false },
16
- });
10
+ const emit = defineEmits<{
11
+ files_uploaded: [files: UploadFile[]];
12
+ decrement_step: [];
13
+ reset_values: [];
14
+ }>();
15
+
16
+ interface Props {
17
+ multiple?: boolean;
18
+ accept?: string | string[];
19
+ files?: UploadFile[];
20
+ autoUpload?: boolean;
21
+ showOverlay?: boolean;
22
+ mini?: boolean;
23
+ }
24
+
25
+ const {
26
+ multiple = false,
27
+ accept = "",
28
+ files = [],
29
+ autoUpload = true,
30
+ showOverlay = false,
31
+ mini = false,
32
+ } = defineProps<Props>();
17
33
 
18
34
  const backStore = useBackStore();
19
- const internal_files = ref(files);
35
+ const internal_files = ref<UploadFile[]>(files);
20
36
  const dragAndDropRef = useTemplateRef("dragAndDropRef");
21
- const csv_dialog = ref(false);
22
- const current_csv_file = ref(undefined);
23
- const current_csv_index = ref(-1);
24
- const loading = ref(false);
25
- const files_uploaded = ref(false);
37
+ const csv_dialog = ref<boolean>(false);
38
+ const current_csv_file = ref<UploadFile | undefined>(undefined);
39
+ const current_csv_index = ref<number>(-1);
40
+ const loading = ref<boolean>(false);
41
+ const files_uploaded = ref<boolean>(false);
26
42
  const toggle_loading = useToggle(loading);
27
43
 
28
- function isCsv(file) {
44
+ function isCsv(file: UploadFile): boolean {
29
45
  return file.name.toLowerCase().endsWith(".csv");
30
46
  }
31
47
 
32
- function openCsvPreviewer(file, index) {
48
+ function openCsvPreviewer(file: UploadFile, index: number): void {
33
49
  current_csv_file.value = file;
34
50
  current_csv_index.value = index;
35
51
  csv_dialog.value = true;
36
52
  }
37
53
 
38
- async function onCsvConfirm(result) {
54
+ async function onCsvConfirm(result: unknown): Promise<void> {
55
+ // Only reachable while the CsvPreviewer dialog (gated on current_csv_file) is open.
56
+ const currentFile = current_csv_file.value;
57
+ if (!currentFile) {
58
+ return;
59
+ }
39
60
  const json_content = JSON.stringify(result, undefined, 2);
40
- const base_name = current_csv_file.value.name.slice(
41
- 0,
42
- current_csv_file.value.name.lastIndexOf("."),
43
- );
61
+ const base_name = currentFile.name.slice(0, currentFile.name.lastIndexOf("."));
44
62
  const json_filename = `${base_name}.json`;
45
63
 
46
64
  const blob = new Blob([json_content], { type: "application/json" });
@@ -48,21 +66,24 @@ async function onCsvConfirm(result) {
48
66
  type: "application/json",
49
67
  });
50
68
 
51
- current_csv_file.value.isConfigured = true;
69
+ currentFile.isConfigured = true;
52
70
  await backStore.upload(json_file);
53
71
  internal_files.value = [...internal_files.value];
54
72
  csv_dialog.value = false;
55
73
  }
56
74
 
57
- function processSelectedFiles(selected_files) {
75
+ function processSelectedFiles(selected_files: UploadFile[]): void {
58
76
  if (multiple) {
59
77
  internal_files.value = [...internal_files.value, ...selected_files];
60
78
  } else {
61
- internal_files.value = [selected_files[0]];
79
+ const [firstFile] = selected_files;
80
+ if (firstFile) {
81
+ internal_files.value = [firstFile];
82
+ }
62
83
  }
63
84
  }
64
85
 
65
- function removeFile(index) {
86
+ function removeFile(index: number): void {
66
87
  internal_files.value.splice(index, 1);
67
88
  if (internal_files.value.length === 0) {
68
89
  files_uploaded.value = false;
@@ -70,7 +91,7 @@ function removeFile(index) {
70
91
  }
71
92
  }
72
93
 
73
- async function upload_files() {
94
+ async function upload_files(): Promise<void> {
74
95
  toggle_loading();
75
96
  const promise_array = internal_files.value.map((file) => backStore.upload(file));
76
97
  await Promise.all(promise_array);
@@ -1,21 +1,25 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { computed, useAttrs } from "vue";
3
3
  import { onKeyStroke } from "@vueuse/core";
4
4
 
5
- const { variant, rounded, padding, theme, escapeFunction } = defineProps({
6
- variant: {
7
- type: String,
8
- default: "panel",
9
- validator: (valid) => ["panel", "ui"].includes(valid),
10
- },
11
- rounded: { type: String, default: "xl" },
12
- padding: { type: String, default: "pa-6" },
13
- theme: { type: String, default: undefined },
14
- escapeFunction: { type: Function, default: undefined },
15
- });
5
+ interface Props {
6
+ variant?: "panel" | "ui";
7
+ rounded?: string;
8
+ padding?: string;
9
+ theme?: string;
10
+ escapeFunction?: () => void;
11
+ }
12
+
13
+ const {
14
+ variant = "panel",
15
+ rounded = "xl",
16
+ padding = "pa-6",
17
+ theme = undefined,
18
+ escapeFunction = undefined,
19
+ } = defineProps<Props>();
16
20
 
17
21
  const attrs = useAttrs();
18
- const isInteractive = computed(() => Boolean(attrs.onClick));
22
+ const isInteractive = computed<boolean>(() => Boolean(attrs.onClick));
19
23
 
20
24
  onKeyStroke("Escape", () => {
21
25
  if (escapeFunction) {
@@ -1,7 +1,7 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import ColormapQuickPicker from "@ogw_front/components/Viewer/Options/ColormapQuickPicker.vue";
3
- import HybridViewerTooltip from "@ogw_front/components/HybridViewerTooltip";
4
- import ViewToolbar from "@ogw_front/components/ViewToolbar";
3
+ import HybridViewerTooltip from "@ogw_front/components/HybridViewerTooltip.vue";
4
+ import ViewToolbar from "@ogw_front/components/ViewToolbar.vue";
5
5
 
6
6
  import { useDataStore } from "@ogw_front/stores/data";
7
7
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
@@ -11,7 +11,11 @@ import { useViewerStore } from "@ogw_front/stores/viewer";
11
11
 
12
12
  const DEFAULT_ELEMENT_HEIGHT = 100;
13
13
 
14
- const emit = defineEmits(["click"]);
14
+ interface Emits {
15
+ click: [event: PointerEvent];
16
+ }
17
+
18
+ const emit = defineEmits<Emits>();
15
19
 
16
20
  const container = useTemplateRef("viewer");
17
21
  const hybridViewerStore = useHybridViewerStore();
@@ -22,10 +26,10 @@ const dataStore = useDataStore();
22
26
  const { width: elementWidth, height: elementHeight } = useElementSize(container);
23
27
  const { width: windowWidth, height: windowHeight } = useWindowSize();
24
28
 
25
- function debounce(func, wait) {
26
- let timeout = undefined;
27
- return function executedFunction(...args) {
28
- function later() {
29
+ function debounce<Callback extends (...args: unknown[]) => void>(func: Callback, wait: number) {
30
+ let timeout: ReturnType<typeof setTimeout> | undefined = undefined;
31
+ return function executedFunction(...args: Parameters<Callback>): void {
32
+ function later(): void {
29
33
  clearTimeout(timeout);
30
34
  func(...args);
31
35
  }
@@ -46,17 +50,26 @@ onMounted(async () => {
46
50
  if (import.meta.client) {
47
51
  await hybridViewerStore.initHybridViewer();
48
52
  await nextTick();
49
- hybridViewerStore.setContainer(container);
53
+ // UseTemplateRef's inferred type is broader than the { $el: HTMLElement } shape
54
+ // SetContainer expects; this element is only ever a component instance with $el
55
+ // (see the `containerEl.$el` usages below).
56
+ hybridViewerStore.setContainer(container as never);
50
57
  debouncedResize();
51
58
  }
52
59
  });
53
60
 
54
61
  const { pickColormap, quickColormap } = useQuickColormap();
55
62
 
56
- async function handleClick(event) {
63
+ async function handleClick(event: PointerEvent): Promise<void> {
57
64
  const { offsetX, offsetY, clientX, clientY } = event;
65
+ // Only ever fired from the pointerup handler bound to this same element.
66
+ const containerEl = container.value;
67
+ if (!containerEl) {
68
+ return;
69
+ }
70
+
58
71
  if (hybridViewerStore.is_ruler_active) {
59
- const rect = container.value.$el.getBoundingClientRect();
72
+ const rect = containerEl.$el.getBoundingClientRect();
60
73
  const x = event.clientX - rect.left;
61
74
  const y = elementHeight.value - (event.clientY - rect.top);
62
75
  await hybridViewerStore.handleRulerClick(x, y);
@@ -64,7 +77,7 @@ async function handleClick(event) {
64
77
  }
65
78
 
66
79
  if (viewerStore.picking_mode) {
67
- const rect = container.value.$el.getBoundingClientRect();
80
+ const rect = containerEl.$el.getBoundingClientRect();
68
81
  const x = event.clientX - rect.left;
69
82
  const y = elementHeight.value - (event.clientY - rect.top);
70
83
  await viewerStore.set_picked_point(x, y);
@@ -1,26 +1,22 @@
1
- <script setup>
2
- import GlassCard from "@ogw_front/components/GlassCard";
1
+ <script setup lang="ts">
2
+ import GlassCard from "@ogw_front/components/GlassCard.vue";
3
3
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
4
4
 
5
5
  const TOOLTIP_SCREEN_MARGIN = 10;
6
6
 
7
- const { containerWidth, containerHeight } = defineProps({
8
- containerWidth: {
9
- type: Number,
10
- required: true,
11
- },
12
- containerHeight: {
13
- type: Number,
14
- required: true,
15
- },
16
- });
7
+ interface Props {
8
+ containerWidth: number;
9
+ containerHeight: number;
10
+ }
11
+
12
+ const { containerWidth, containerHeight } = defineProps<Props>();
17
13
 
18
14
  const hybridViewerStore = useHybridViewerStore();
19
15
 
20
16
  const tooltipRef = useTemplateRef("tooltip");
21
17
  const { width: tooltipWidth, height: tooltipHeight } = useElementSize(tooltipRef);
22
18
 
23
- const tooltipStyle = computed(() => {
19
+ const tooltipStyle = computed<Record<string, string>>(() => {
24
20
  if (!hybridViewerStore.hoverData) {
25
21
  return {};
26
22
  }
@@ -52,7 +48,7 @@ const tooltipStyle = computed(() => {
52
48
  };
53
49
  });
54
50
 
55
- const originalIndex = computed(() => {
51
+ const originalIndex = computed<number | undefined>(() => {
56
52
  const attributes = hybridViewerStore.hoverData?.attributes || {};
57
53
  const originalId =
58
54
  attributes.vtkOriginalCellIds ??
@@ -69,14 +65,14 @@ const RESERVED_ATTRIBUTE_KEYS = new Set([
69
65
  "vtkOriginalPointIds",
70
66
  ]);
71
67
 
72
- const hasOtherAttributes = computed(() => {
68
+ const hasOtherAttributes = computed<boolean>(() => {
73
69
  const attributes = hybridViewerStore.hoverData?.attributes || {};
74
70
  return Object.keys(attributes).some(
75
71
  (key) => key !== "vtkOriginalCellIds" && key !== "vtkOriginalPointIds",
76
72
  );
77
73
  });
78
74
 
79
- const sortedAttributes = computed(() => {
75
+ const sortedAttributes = computed<[string, unknown][]>(() => {
80
76
  const attributes = hybridViewerStore.hoverData?.attributes || {};
81
77
  return (
82
78
  Object.entries(attributes)
@@ -86,7 +82,7 @@ const sortedAttributes = computed(() => {
86
82
  );
87
83
  });
88
84
 
89
- function capitalize(val) {
85
+ function capitalize(val: string): string {
90
86
  if (!val) {
91
87
  return "";
92
88
  }
@@ -94,7 +90,17 @@ function capitalize(val) {
94
90
  return spaced.charAt(0).toUpperCase() + spaced.slice(1);
95
91
  }
96
92
 
97
- function formatAttributeValue(val) {
93
+ const fieldTypeLabel = computed<string>(() => {
94
+ const fieldType = hybridViewerStore.hoverData?.fieldType;
95
+ return typeof fieldType === "string" ? capitalize(fieldType.toLowerCase()) : "";
96
+ });
97
+
98
+ const coordinates = computed<number[] | undefined>(() => {
99
+ const value = hybridViewerStore.hoverData?.attributes.coordinates;
100
+ return Array.isArray(value) ? (value as number[]) : undefined;
101
+ });
102
+
103
+ function formatAttributeValue(val: unknown): string {
98
104
  if (Array.isArray(val)) {
99
105
  const formattedValues = val.map((value) => {
100
106
  if (typeof value === "number") {
@@ -134,7 +140,7 @@ function formatAttributeValue(val) {
134
140
  hybridViewerStore.hoverData.component?.id ||
135
141
  hybridViewerStore.hoverData.blockName ||
136
142
  hybridViewerStore.hoverData.modelName ||
137
- `${capitalize(hybridViewerStore.hoverData.fieldType.toLowerCase())} #${hybridViewerStore.hoverData.pickedId}`
143
+ `${fieldTypeLabel} #${hybridViewerStore.hoverData.pickedId}`
138
144
  }}
139
145
  </span>
140
146
  </v-col>
@@ -160,15 +166,11 @@ function formatAttributeValue(val) {
160
166
  <template v-if="hasOtherAttributes">
161
167
  <v-divider class="my-2" opacity="0.15" />
162
168
  <v-row no-gutters class="flex-column ga-1">
163
- <v-col
164
- v-if="hybridViewerStore.hoverData.attributes.coordinates"
165
- class="d-flex justify-space-between ga-3"
166
- >
169
+ <v-col v-if="coordinates" class="d-flex justify-space-between ga-3">
167
170
  <span class="tooltip-label">Position:</span>
168
171
  <span class="tooltip-value font-mono">
169
- [ {{ Number(hybridViewerStore.hoverData.attributes.coordinates[0]).toFixed(3) }},
170
- {{ Number(hybridViewerStore.hoverData.attributes.coordinates[1]).toFixed(3) }},
171
- {{ Number(hybridViewerStore.hoverData.attributes.coordinates[2]).toFixed(3) }} ]
172
+ [ {{ Number(coordinates[0]).toFixed(3) }}, {{ Number(coordinates[1]).toFixed(3) }},
173
+ {{ Number(coordinates[2]).toFixed(3) }} ]
172
174
  </span>
173
175
  </v-col>
174
176
  <template v-for="[name, val] in sortedAttributes" :key="name">
@@ -1,4 +1,4 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { useInfraStore } from "@ogw_front/stores/infra";
3
3
 
4
4
  const infraStore = useInfraStore();
@@ -1,23 +1,25 @@
1
- <script setup>
2
- import Loading from "@ogw_front/components/Loading";
3
- import Recaptcha from "@ogw_front/components/Recaptcha";
1
+ <script setup lang="ts">
2
+ import Loading from "@ogw_front/components/Loading.vue";
3
+ import Recaptcha from "@ogw_front/components/Recaptcha.vue";
4
4
  import { Status } from "@ogw_front/utils/status";
5
5
  import { appMode } from "@ogw_shared/app_mode";
6
6
  import { useInfraStore } from "@ogw_front/stores/infra";
7
7
 
8
- const { appName, email, isUserAuthenticated, logo } = defineProps({
9
- appName: { type: String, required: true },
10
- email: { type: String, default: undefined },
11
- isUserAuthenticated: { type: Boolean, default: false },
12
- logo: { type: String, required: false, default: "" },
13
- });
8
+ interface Props {
9
+ appName: string;
10
+ email?: string;
11
+ isUserAuthenticated?: boolean;
12
+ logo?: string;
13
+ }
14
+
15
+ const { appName, email = undefined, isUserAuthenticated = false, logo = "" } = defineProps<Props>();
14
16
 
15
17
  const infraStore = useInfraStore();
16
18
  if (infraStore.app_mode !== appMode.CLOUD) {
17
19
  infraStore.create_backend();
18
20
  }
19
21
 
20
- function cloudCreateBackend() {
22
+ function cloudCreateBackend(): Promise<void> {
21
23
  return infraStore.create_backend(email);
22
24
  }
23
25
  </script>
@@ -1,12 +1,17 @@
1
- <script setup>
2
- const { appName } = defineProps({
3
- appName: {
4
- type: String,
5
- required: true,
6
- },
7
- });
1
+ <script setup lang="ts">
2
+ interface Props {
3
+ appName: string;
4
+ }
5
+
6
+ const { appName } = defineProps<Props>();
8
7
 
9
- const ecoMessages = computed(() => [
8
+ interface EcoMessage {
9
+ icon: string;
10
+ title: string;
11
+ message: string;
12
+ }
13
+
14
+ const ecoMessages = computed<EcoMessage[]>(() => [
10
15
  {
11
16
  icon: "mdi-leaf",
12
17
  title: "Why the wait?",
@@ -25,8 +30,14 @@ const ecoMessages = computed(() => [
25
30
  ]);
26
31
 
27
32
  const MESSAGE_INTERVAL_MS = 5000;
28
- const currentMessage = ref(0);
29
- let interval = undefined;
33
+ const currentMessage = ref<number>(0);
34
+ let interval: ReturnType<typeof setInterval> | undefined = undefined;
35
+
36
+ // Fallback only guards against noUncheckedIndexedAccess; currentMessage is always kept in range by the modulo below, so it is never actually used.
37
+ const FALLBACK_ECO_MESSAGE = { icon: "", title: "", message: "" };
38
+ const currentEcoMessage = computed<EcoMessage>(
39
+ () => ecoMessages.value[currentMessage.value] ?? FALLBACK_ECO_MESSAGE,
40
+ );
30
41
 
31
42
  onMounted(() => {
32
43
  interval = setInterval(() => {
@@ -54,18 +65,18 @@ onUnmounted(() => {
54
65
  class="d-flex align-center ga-3 pa-0 mb-2 mb-sm-3 text-body-1 text-sm-subtitle-1 font-weight-bold text-white text-wrap"
55
66
  >
56
67
  <v-icon
57
- :icon="ecoMessages[currentMessage].icon"
68
+ :icon="currentEcoMessage.icon"
58
69
  color="white"
59
70
  size="22"
60
71
  style="filter: drop-shadow(0 0 6px rgba(var(--v-theme-primary), 0.6))"
61
72
  />
62
- {{ ecoMessages[currentMessage].title }}
73
+ {{ currentEcoMessage.title }}
63
74
  </v-card-title>
64
75
  <v-card-text
65
76
  class="pa-0 text-body-2 text-white text-left"
66
77
  style="opacity: 0.85; line-height: 1.7"
67
78
  >
68
- {{ ecoMessages[currentMessage].message }}
79
+ {{ currentEcoMessage.message }}
69
80
  </v-card-text>
70
81
  </v-card>
71
82
  </v-scroll-y-reverse-transition>
@@ -1,10 +1,9 @@
1
- <script setup>
2
- const { logo } = defineProps({
3
- logo: {
4
- type: String,
5
- default: "",
6
- },
7
- });
1
+ <script setup lang="ts">
2
+ interface Props {
3
+ logo?: string;
4
+ }
5
+
6
+ const { logo = "" } = defineProps<Props>();
8
7
  </script>
9
8
 
10
9
  <template>
@@ -1,10 +1,9 @@
1
- <script setup>
2
- const { progress } = defineProps({
3
- progress: {
4
- type: Number,
5
- required: true,
6
- },
7
- });
1
+ <script setup lang="ts">
2
+ interface Props {
3
+ progress: number;
4
+ }
5
+
6
+ const { progress } = defineProps<Props>();
8
7
  </script>
9
8
 
10
9
  <template>
@@ -1,17 +1,13 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { Status } from "@ogw_front/utils/status";
3
3
  import { useInfraStore } from "@ogw_front/stores/infra";
4
4
 
5
- const { logo, appName } = defineProps({
6
- logo: {
7
- type: String,
8
- default: "",
9
- },
10
- appName: {
11
- type: String,
12
- required: true,
13
- },
14
- });
5
+ interface Props {
6
+ logo?: string;
7
+ appName: string;
8
+ }
9
+
10
+ const { logo = "", appName } = defineProps<Props>();
15
11
 
16
12
  const infraStore = useInfraStore();
17
13
 
@@ -19,10 +15,10 @@ const extensionStores = computed(() =>
19
15
  infraStore.microservices.filter((store) => store.$id !== "back" && store.$id !== "viewer"),
20
16
  );
21
17
 
22
- const show = ref(false);
23
- const progress = ref(0);
18
+ const show = ref<boolean>(false);
19
+ const progress = ref<number>(0);
24
20
 
25
- let progressInterval = undefined;
21
+ let progressInterval: ReturnType<typeof setInterval> | undefined = undefined;
26
22
 
27
23
  const PROGRESS_THRESHOLD = 90;
28
24
  const MAX_PROGRESS = 99;
@@ -1,45 +1,61 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
3
3
 
4
- import FetchingData from "@ogw_front/components/FetchingData";
5
- import FileUploader from "@ogw_front/components/FileUploader";
4
+ import FetchingData from "@ogw_front/components/FetchingData.vue";
5
+ import FileUploader from "@ogw_front/components/FileUploader.vue";
6
6
  import { useBackStore } from "@ogw_front/stores/back";
7
7
 
8
+ // Files carry extra app-specific bookkeeping fields once picked up here.
9
+ type UploadFile = File & { isConfigured?: boolean };
10
+ interface FilePlan {
11
+ has_missing_files: boolean;
12
+ mandatory_files: string[];
13
+ additional_files: string[];
14
+ }
15
+
8
16
  const schema = schemas.opengeodeweb_back.missing_files;
9
17
 
10
- const emit = defineEmits(["update_values", "increment_step", "decrement_step"]);
18
+ interface Emits {
19
+ update_values: [value: { additional_files: UploadFile[] }];
20
+ increment_step: [];
21
+ decrement_step: [];
22
+ }
23
+
24
+ const emit = defineEmits<Emits>();
25
+
26
+ interface Props {
27
+ multiple: boolean;
28
+ geodeObjectType: string;
29
+ filenames: string[];
30
+ files?: UploadFile[];
31
+ }
11
32
 
12
- const { multiple, geodeObjectType, filenames, files } = defineProps({
13
- multiple: { type: Boolean, required: true },
14
- geodeObjectType: { type: String, required: true },
15
- filenames: { type: Array, required: true },
16
- files: { type: Array, required: false, default: () => [] },
17
- });
33
+ const { multiple, geodeObjectType, filenames, files = [] } = defineProps<Props>();
18
34
 
19
- const accept = ref("");
20
- const loading = ref(false);
21
- const has_missing_files = ref(false);
22
- const mandatory_files = ref([]);
23
- const additional_files = ref([]);
35
+ const accept = ref<string>("");
36
+ const loading = ref<boolean>(false);
37
+ const has_missing_files = ref<boolean>(false);
38
+ const mandatory_files = ref<string[]>([]);
39
+ const additional_files = ref<string[]>([]);
24
40
  const toggle_loading = useToggle(loading);
25
41
 
26
- function files_uploaded_event(value) {
42
+ function files_uploaded_event(value: UploadFile[]): void {
27
43
  emit("update_values", { additional_files: value });
28
44
  emit("increment_step");
29
45
  }
30
46
 
31
- function isCsvFile(filename) {
47
+ function isCsvFile(filename: string): boolean {
32
48
  return filename.toLowerCase().endsWith(".csv") || filename.toLowerCase().endsWith(".csv.json");
33
49
  }
34
50
 
35
- async function missing_files() {
51
+ async function missing_files(): Promise<void> {
36
52
  toggle_loading();
37
53
  has_missing_files.value = false;
38
54
  mandatory_files.value = [];
39
55
  additional_files.value = [];
40
56
  const backStore = useBackStore();
41
57
 
42
- const promise_array = filenames.map((filename) => {
58
+ const promise_array: Promise<FilePlan>[] = filenames.map((filename): Promise<FilePlan> => {
43
59
  if (isCsvFile(filename)) {
44
60
  return Promise.resolve({
45
61
  has_missing_files: false,