@geode/opengeodeweb-front 10.34.0-rc.2 → 10.34.0-rc.4

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 (402) hide show
  1. package/README.md +8 -0
  2. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  3. package/app/components/ActionButton.vue +28 -12
  4. package/app/components/Basic/Slider.vue +2 -2
  5. package/app/components/Basic/Switch.vue +2 -2
  6. package/app/components/CameraManager/List.vue +9 -9
  7. package/app/components/CameraManager/Saver.vue +8 -2
  8. package/app/components/CameraManager.vue +20 -10
  9. package/app/components/CameraOrientation.vue +29 -15
  10. package/app/components/ClippingPlaneCard.vue +11 -12
  11. package/app/components/ClippingPlanes.vue +25 -15
  12. package/app/components/CrsSelector.vue +24 -15
  13. package/app/components/DeleteDialog.vue +16 -16
  14. package/app/components/DragAndDrop.vue +53 -33
  15. package/app/components/DragAndDropInternal/DragAndDropInline.vue +29 -16
  16. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  17. package/app/components/ExtensionSelector.vue +32 -16
  18. package/app/components/FeedBack/ErrorBanner.vue +1 -2
  19. package/app/components/FeedBack/Snackers.vue +3 -3
  20. package/app/components/FetchingData.vue +8 -12
  21. package/app/components/FileSelector.vue +20 -12
  22. package/app/components/FileUploader.vue +45 -24
  23. package/app/components/GlassCard.vue +16 -12
  24. package/app/components/HybridRenderingView.vue +22 -11
  25. package/app/components/HybridViewerTooltip.vue +24 -22
  26. package/app/components/InfraConnected.vue +1 -1
  27. package/app/components/Launcher.vue +11 -9
  28. package/app/components/Loading/EcoMessages.vue +16 -11
  29. package/app/components/Loading/Header.vue +6 -7
  30. package/app/components/Loading/Progress.vue +6 -7
  31. package/app/components/Loading.vue +8 -12
  32. package/app/components/MissingFilesSelector.vue +29 -15
  33. package/app/components/ObjectSelector.vue +33 -18
  34. package/app/components/PackagesVersions.vue +14 -7
  35. package/app/components/Recaptcha.vue +16 -22
  36. package/app/components/RemoteRenderingView.vue +16 -9
  37. package/app/components/Ruler.vue +8 -6
  38. package/app/components/Screenshot.vue +19 -13
  39. package/app/components/SearchBar.vue +10 -6
  40. package/app/components/ShrinkFilter.vue +12 -7
  41. package/app/components/Step.vue +30 -11
  42. package/app/components/Stepper.vue +18 -7
  43. package/app/components/ToolPanel.vue +25 -12
  44. package/app/components/ViewToolbar.vue +33 -21
  45. package/app/components/Viewer/ContextMenu/CenterButton.vue +14 -9
  46. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  47. package/app/components/Viewer/ContextMenu/ContextMenu.vue +25 -20
  48. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +21 -9
  49. package/app/components/Viewer/ContextMenu/InfoCard.vue +31 -14
  50. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  51. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +59 -36
  52. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +67 -39
  53. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +61 -38
  54. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +43 -27
  55. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +84 -40
  56. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +67 -38
  57. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +101 -35
  58. package/app/components/Viewer/Generic/Model/CornersOptions.vue +67 -27
  59. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +14 -8
  60. package/app/components/Viewer/Generic/Model/LinesOptions.vue +96 -43
  61. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +24 -12
  62. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +10 -5
  63. package/app/components/Viewer/Generic/Model/PointsOptions.vue +16 -10
  64. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +105 -31
  65. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  66. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  67. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  68. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  69. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  70. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  71. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  72. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +63 -37
  73. package/app/components/Viewer/ObjectTree/Base/Controls.vue +24 -9
  74. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +25 -8
  75. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  76. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +26 -11
  77. package/app/components/Viewer/ObjectTree/Box.vue +30 -15
  78. package/app/components/Viewer/ObjectTree/Layout.vue +29 -22
  79. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +54 -28
  80. package/app/components/Viewer/ObjectTree/Views/ModelCollections.vue +76 -30
  81. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +86 -34
  82. package/app/components/Viewer/Options/AttributeColorBar.vue +12 -6
  83. package/app/components/Viewer/Options/AttributeRangeSelector.vue +6 -4
  84. package/app/components/Viewer/Options/AttributeSelector.vue +61 -28
  85. package/app/components/Viewer/Options/ColorMapList.vue +44 -18
  86. package/app/components/Viewer/Options/ColorMapPicker.vue +12 -8
  87. package/app/components/Viewer/Options/ColorPicker.vue +20 -13
  88. package/app/components/Viewer/Options/ColoringTypeSelector.vue +77 -57
  89. package/app/components/Viewer/Options/ColormapQuickPicker.vue +10 -8
  90. package/app/components/Viewer/Options/OptionsSection.vue +6 -4
  91. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  92. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  93. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  94. package/app/components/Viewer/Options/TextureItem.vue +24 -19
  95. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  96. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  97. package/app/components/Viewer/OverlappingObjectsPicker.vue +28 -12
  98. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +41 -25
  99. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  100. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  101. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  102. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +66 -37
  103. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  104. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  105. package/app/components/Viewer/Surface/PolygonsOptions.vue +72 -38
  106. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  107. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  108. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  109. package/app/components/Viewer/Ui.vue +18 -13
  110. package/app/components/Wrapper.vue +18 -9
  111. package/app/components/ZScaling.vue +15 -9
  112. package/app/components/csv-preview/CsvPreviewer.vue +38 -17
  113. package/app/components/csv-preview/CsvSettings.vue +26 -48
  114. package/app/components/csv-preview/CsvTable.vue +34 -14
  115. package/app/composables/{batch_style.js → batch_style.ts} +4 -1
  116. package/app/composables/{clipping_planes_widget.js → clipping_planes_widget.ts} +105 -42
  117. package/app/composables/{global_attribute_style.js → global_attribute_style.ts} +72 -30
  118. package/app/composables/{hover_highlight.js → hover_highlight.ts} +16 -12
  119. package/app/composables/{model_collections.js → model_collections.ts} +10 -4
  120. package/app/composables/{model_components.js → model_components.ts} +10 -4
  121. package/app/composables/{project_manager.js → project_manager.ts} +1 -1
  122. package/app/composables/{responsive_middle_truncate.js → responsive_middle_truncate.ts} +15 -1
  123. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  124. package/app/composables/{stepper_tree.js → stepper_tree.ts} +10 -10
  125. package/app/composables/{tree_filter.js → tree_filter.ts} +49 -15
  126. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +44 -16
  127. package/app/composables/{tree_scroll.js → tree_scroll.ts} +26 -7
  128. package/app/composables/{use_adaptive_styles.js → use_adaptive_styles.ts} +39 -15
  129. package/app/composables/{use_overlapping_picker.js → use_overlapping_picker.ts} +58 -14
  130. package/app/composables/{use_quick_colormap.js → use_quick_colormap.ts} +15 -3
  131. package/app/composables/{virtual_tree.js → virtual_tree.ts} +69 -21
  132. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +4 -1
  133. package/app/stores/{app.js → app.ts} +98 -37
  134. package/app/stores/{back.js → back.ts} +26 -16
  135. package/app/stores/camera_manager.ts +78 -0
  136. package/app/stores/{cloud.js → cloud.ts} +5 -4
  137. package/app/stores/{data.js → data.ts} +110 -37
  138. package/app/stores/data_helpers/collections.ts +140 -0
  139. package/app/stores/data_helpers/mesh.ts +160 -0
  140. package/app/stores/{data_style.js → data_style.ts} +39 -10
  141. package/app/stores/{feedback.js → feedback.ts} +16 -5
  142. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +29 -14
  143. package/app/stores/{infra.js → infra.ts} +18 -9
  144. package/app/stores/{menu.js → menu.ts} +54 -32
  145. package/app/stores/{treeview.js → treeview.ts} +108 -45
  146. package/app/stores/{viewer.js → viewer.ts} +45 -24
  147. package/app/utils/attributes.ts +40 -0
  148. package/app/utils/{clipping_planes.js → clipping_planes.ts} +30 -15
  149. package/app/utils/{colormap.js → colormap.ts} +29 -14
  150. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  151. package/app/utils/default_styles/{index.js → index.ts} +3 -2
  152. package/app/utils/default_styles/{meshes.js → meshes.ts} +27 -48
  153. package/app/utils/default_styles/{models.js → models.ts} +25 -40
  154. package/app/utils/{extension.js → extension.ts} +27 -10
  155. package/app/utils/{import_workflow.js → import_workflow.ts} +24 -17
  156. package/app/utils/{log.js → log.ts} +12 -2
  157. package/app/utils/{name_cleaner.js → name_cleaner.ts} +5 -5
  158. package/app/utils/status.ts +19 -0
  159. package/app/utils/{stores.js → stores.ts} +5 -5
  160. package/app/utils/{string.js → string.ts} +5 -5
  161. package/app/utils/{treeview.js → treeview.ts} +4 -1
  162. package/internal/database/{base_database.js → base_database.ts} +2 -2
  163. package/internal/database/{database.js → database.ts} +30 -18
  164. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  165. package/internal/database/tables/camera_positions.ts +6 -0
  166. package/internal/database/tables/{data.js → data.ts} +3 -1
  167. package/internal/database/tables/data_style.ts +6 -0
  168. package/internal/database/tables/model_component_datastyle.ts +6 -0
  169. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  170. package/internal/database/tables/model_components.ts +6 -0
  171. package/internal/database/tables/model_components_relation.ts +6 -0
  172. package/internal/database/tables/table_definition.ts +5 -0
  173. package/internal/stores/data_style/mesh/cells/{cell.js → cell.ts} +83 -36
  174. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +2 -2
  175. package/internal/stores/data_style/mesh/cells/{common.js → common.ts} +8 -7
  176. package/internal/stores/data_style/mesh/cells/{index.js → index.ts} +5 -5
  177. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +3 -3
  178. package/internal/stores/data_style/mesh/cells/{vertex.js → vertex.ts} +79 -28
  179. package/internal/stores/data_style/mesh/cells/{visibility.js → visibility.ts} +3 -3
  180. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +2 -2
  181. package/internal/stores/data_style/mesh/edges/{common.js → common.ts} +7 -6
  182. package/internal/stores/data_style/mesh/edges/{edge.js → edge.ts} +81 -29
  183. package/internal/stores/data_style/mesh/edges/{index.js → index.ts} +5 -6
  184. package/internal/stores/data_style/mesh/edges/{vertex.js → vertex.ts} +81 -29
  185. package/internal/stores/data_style/mesh/edges/{visibility.js → visibility.ts} +3 -3
  186. package/internal/stores/data_style/mesh/edges/{width.js → width.ts} +3 -3
  187. package/internal/stores/data_style/mesh/{index.js → index.ts} +9 -8
  188. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +2 -2
  189. package/internal/stores/data_style/mesh/points/{common.js → common.ts} +8 -7
  190. package/internal/stores/data_style/mesh/points/{index.js → index.ts} +5 -5
  191. package/internal/stores/data_style/mesh/points/{size.js → size.ts} +3 -3
  192. package/internal/stores/data_style/mesh/points/{vertex.js → vertex.ts} +79 -28
  193. package/internal/stores/data_style/mesh/points/{visibility.js → visibility.ts} +7 -5
  194. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +2 -2
  195. package/internal/stores/data_style/mesh/polygons/{common.js → common.ts} +7 -6
  196. package/internal/stores/data_style/mesh/polygons/{index.js → index.ts} +5 -5
  197. package/internal/stores/data_style/mesh/polygons/{polygon.js → polygon.ts} +81 -29
  198. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +3 -3
  199. package/internal/stores/data_style/mesh/polygons/{vertex.js → vertex.ts} +81 -29
  200. package/internal/stores/data_style/mesh/polygons/{visibility.js → visibility.ts} +3 -3
  201. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +2 -2
  202. package/internal/stores/data_style/mesh/polyhedra/{common.js → common.ts} +7 -6
  203. package/internal/stores/data_style/mesh/polyhedra/{index.js → index.ts} +5 -5
  204. package/internal/stores/data_style/mesh/polyhedra/{polyhedron.js → polyhedron.ts} +86 -29
  205. package/internal/stores/data_style/mesh/polyhedra/{vertex.js → vertex.ts} +81 -29
  206. package/internal/stores/data_style/mesh/polyhedra/{visibility.js → visibility.ts} +3 -3
  207. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +18 -6
  208. package/internal/stores/data_style/model/blocks/{common.js → common.ts} +9 -8
  209. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +26 -11
  210. package/internal/stores/data_style/model/blocks/{polyhedron.js → polyhedron.ts} +121 -30
  211. package/internal/stores/data_style/model/blocks/{vertex.js → vertex.ts} +110 -30
  212. package/internal/stores/data_style/model/blocks/{visibility.js → visibility.ts} +6 -2
  213. package/internal/stores/data_style/model/{color.js → color.ts} +70 -28
  214. package/internal/stores/data_style/model/common.ts +216 -0
  215. package/internal/stores/data_style/model/corners/{color.js → color.ts} +18 -6
  216. package/internal/stores/data_style/model/corners/{common.js → common.ts} +9 -8
  217. package/internal/stores/data_style/model/corners/{index.js → index.ts} +24 -10
  218. package/internal/stores/data_style/model/corners/{vertex.js → vertex.ts} +115 -35
  219. package/internal/stores/data_style/model/corners/{visibility.js → visibility.ts} +6 -2
  220. package/internal/stores/data_style/model/edges/{common.js → common.ts} +4 -3
  221. package/internal/stores/data_style/model/edges/{index.js → index.ts} +0 -6
  222. package/internal/stores/data_style/model/edges/{visibility.js → visibility.ts} +4 -4
  223. package/internal/stores/data_style/model/{index.js → index.ts} +4 -4
  224. package/internal/stores/data_style/model/lines/{color.js → color.ts} +18 -6
  225. package/internal/stores/data_style/model/lines/{common.js → common.ts} +9 -8
  226. package/internal/stores/data_style/model/lines/{edge.js → edge.ts} +107 -30
  227. package/internal/stores/data_style/model/lines/{index.js → index.ts} +26 -11
  228. package/internal/stores/data_style/model/lines/{vertex.js → vertex.ts} +107 -30
  229. package/internal/stores/data_style/model/lines/{visibility.js → visibility.ts} +6 -2
  230. package/internal/stores/data_style/model/points/{common.js → common.ts} +4 -3
  231. package/internal/stores/data_style/model/points/{index.js → index.ts} +6 -3
  232. package/internal/stores/data_style/model/points/{size.js → size.ts} +3 -3
  233. package/internal/stores/data_style/model/points/{visibility.js → visibility.ts} +3 -3
  234. package/internal/stores/data_style/model/selection.ts +116 -0
  235. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +18 -6
  236. package/internal/stores/data_style/model/surfaces/{common.js → common.ts} +9 -8
  237. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +28 -11
  238. package/internal/stores/data_style/model/surfaces/{polygon.js → polygon.ts} +122 -30
  239. package/internal/stores/data_style/model/surfaces/{vertex.js → vertex.ts} +122 -30
  240. package/internal/stores/data_style/model/surfaces/{visibility.js → visibility.ts} +6 -2
  241. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +38 -20
  242. package/internal/stores/data_style/state.ts +269 -0
  243. package/internal/stores/data_style/types.ts +30 -0
  244. package/internal/stores/hybrid_viewer/{brightness.js → brightness.ts} +35 -11
  245. package/internal/stores/hybrid_viewer/{camera.js → camera.ts} +90 -52
  246. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +27 -10
  247. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  248. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +9 -6
  249. package/internal/stores/hybrid_viewer/{highlight.js → highlight.ts} +81 -29
  250. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +38 -19
  251. package/internal/stores/hybrid_viewer/{scene.js → scene.ts} +39 -29
  252. package/internal/stores/hybrid_viewer/viewport.ts +168 -0
  253. package/internal/stores/hybrid_viewer/vtk_types.ts +74 -0
  254. package/internal/utils/api_fetch.ts +102 -0
  255. package/internal/utils/upload_file.ts +94 -0
  256. package/internal/utils/viewer_call.ts +90 -0
  257. package/internal/utils/ws_client.ts +43 -0
  258. package/{nuxt.config.js → nuxt.config.ts} +6 -1
  259. package/opengeodeweb_front_schemas.js +175 -0
  260. package/package.json +32 -8
  261. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +17 -9
  262. package/server/api/local/app/{project_folder_path.post.js → project_folder_path.post.ts} +7 -3
  263. package/server/api/local/app/{run_back.post.js → run_back.post.ts} +12 -4
  264. package/server/api/local/app/{run_viewer.post.js → run_viewer.post.ts} +12 -4
  265. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +12 -6
  266. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -9
  267. package/server/api/local/extensions/{upload.put.js → upload.put.ts} +13 -4
  268. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +4 -3
  269. package/server/api/microservice/app/{set_app_base_url.post.js → set_app_base_url.post.ts} +9 -4
  270. package/server/api/microservice/app/{set_back_base_url.post.js → set_back_base_url.post.ts} +9 -4
  271. package/server/api/microservice/app/{set_is_app_ready.post.js → set_is_app_ready.post.ts} +9 -4
  272. package/server/api/microservice/app/{set_viewer_base_url.post.js → set_viewer_base_url.post.ts} +9 -4
  273. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +9 -3
  274. package/server/api/serverless/{run_cloud.post.js → run_cloud.post.ts} +13 -7
  275. package/server/types/vendor.d.ts +64 -0
  276. package/server/utils/app_config.js +34 -64
  277. package/server/utils/app_config.ts +96 -0
  278. package/server/utils/cleanup.js +97 -148
  279. package/server/utils/cleanup.ts +189 -0
  280. package/server/utils/cloud.js +103 -148
  281. package/server/utils/cloud.ts +219 -0
  282. package/server/utils/{extension.js → extension.ts} +17 -4
  283. package/server/utils/microservices.js +126 -159
  284. package/server/utils/microservices.ts +206 -0
  285. package/server/utils/path.js +88 -134
  286. package/server/utils/path.ts +173 -0
  287. package/server/utils/scripts.js +116 -164
  288. package/server/utils/scripts.ts +195 -0
  289. package/server/utils/server.js +34 -50
  290. package/server/utils/server.ts +67 -0
  291. package/server/utils/server_config.js +23 -38
  292. package/server/utils/server_config.ts +60 -0
  293. package/server/utils/ws_client.js +81 -106
  294. package/server/utils/ws_client.ts +134 -0
  295. package/shared/app_mode.js +5 -4
  296. package/shared/app_mode.ts +7 -0
  297. package/shared/scripts.js +37 -32
  298. package/shared/scripts.ts +44 -0
  299. package/shared/utils/call_raw.js +25 -41
  300. package/shared/utils/call_raw.ts +66 -0
  301. package/shared/utils/call_schema.js +24 -41
  302. package/shared/utils/call_schema.ts +57 -0
  303. package/shared/utils/fetch_raw.js +36 -57
  304. package/shared/utils/fetch_raw.ts +85 -0
  305. package/shared/utils/fetch_schema.js +27 -44
  306. package/shared/utils/fetch_schema.ts +61 -0
  307. package/shared/utils/file.js +6 -10
  308. package/shared/utils/file.ts +16 -0
  309. package/shared/utils/parse_boolean.js +20 -13
  310. package/shared/utils/parse_boolean.ts +16 -0
  311. package/shared/utils/response_handlers/load.js +39 -66
  312. package/shared/utils/response_handlers/load.ts +94 -0
  313. package/shared/utils/types.js +1 -0
  314. package/shared/utils/types.ts +27 -0
  315. package/shared/utils/validate_schema.js +13 -9
  316. package/shared/utils/validate_schema.ts +15 -0
  317. package/.github/workflows/config.json +0 -5
  318. package/.github/workflows/deploy.yml +0 -15
  319. package/.github/workflows/manual_release.yml +0 -11
  320. package/.github/workflows/merge_request.yml +0 -9
  321. package/.github/workflows/pr_update.yml +0 -11
  322. package/.github/workflows/prepare_deploy.yml +0 -9
  323. package/.github/workflows/schedule.yml +0 -18
  324. package/.github/workflows/test.yml +0 -14
  325. package/.github/workflows/test_pr.yml +0 -12
  326. package/.oxlintrc.json +0 -150
  327. package/.releaserc +0 -11
  328. package/app/stores/camera_manager.js +0 -57
  329. package/app/stores/data_helpers/collections.js +0 -96
  330. package/app/stores/data_helpers/mesh.js +0 -122
  331. package/app/utils/attributes.js +0 -23
  332. package/app/utils/status.js +0 -10
  333. package/commitlint.config.js +0 -20
  334. package/internal/database/tables/camera_positions.js +0 -4
  335. package/internal/database/tables/data_style.js +0 -4
  336. package/internal/database/tables/model_component_datastyle.js +0 -4
  337. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  338. package/internal/database/tables/model_components.js +0 -4
  339. package/internal/database/tables/model_components_relation.js +0 -4
  340. package/internal/stores/data_style/model/common.js +0 -141
  341. package/internal/stores/data_style/model/selection.js +0 -89
  342. package/internal/stores/data_style/state.js +0 -197
  343. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  344. package/internal/utils/api_fetch.js +0 -52
  345. package/internal/utils/upload_file.js +0 -57
  346. package/internal/utils/viewer_call.js +0 -49
  347. package/internal/utils/ws_client.js +0 -29
  348. package/scripts/generate_geode_objects.js +0 -24
  349. package/tests/integration/data/uploads/test.og_brep +0 -0
  350. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  351. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  352. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  353. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  354. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  355. package/tests/integration/data/uploads/test.vtu +0 -22
  356. package/tests/integration/setup.js +0 -92
  357. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  358. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  359. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  360. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  361. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  362. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  363. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  364. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  365. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  366. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  367. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  368. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  369. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  370. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  371. package/tests/setup_indexeddb.js +0 -4
  372. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  373. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  374. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  375. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  376. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  377. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  378. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  379. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  380. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  381. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  382. package/tests/unit/components/Step.nuxt.test.js +0 -51
  383. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  384. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  385. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  386. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  387. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  388. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  389. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  390. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  391. package/tests/unit/stores/app.nuxt.test.js +0 -189
  392. package/tests/unit/stores/back.nuxt.test.js +0 -147
  393. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  394. package/tests/unit/stores/data.nuxt.test.js +0 -162
  395. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  396. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  397. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  398. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  399. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  400. package/tests/utils.js +0 -20
  401. package/tests/vitest.config.js +0 -67
  402. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
@@ -1,10 +1,9 @@
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
8
  const ecoMessages = computed(() => [
10
9
  {
@@ -26,7 +25,13 @@ const ecoMessages = computed(() => [
26
25
 
27
26
  const MESSAGE_INTERVAL_MS = 5000;
28
27
  const currentMessage = ref(0);
29
- let interval = undefined;
28
+ let interval: ReturnType<typeof setInterval> | undefined = undefined;
29
+
30
+ // Fallback only guards against noUncheckedIndexedAccess; currentMessage is always kept in range by the modulo below, so it is never actually used.
31
+ const FALLBACK_ECO_MESSAGE = { icon: "", title: "", message: "" };
32
+ const currentEcoMessage = computed(
33
+ () => ecoMessages.value[currentMessage.value] ?? FALLBACK_ECO_MESSAGE,
34
+ );
30
35
 
31
36
  onMounted(() => {
32
37
  interval = setInterval(() => {
@@ -54,18 +59,18 @@ onUnmounted(() => {
54
59
  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
60
  >
56
61
  <v-icon
57
- :icon="ecoMessages[currentMessage].icon"
62
+ :icon="currentEcoMessage.icon"
58
63
  color="white"
59
64
  size="22"
60
65
  style="filter: drop-shadow(0 0 6px rgba(var(--v-theme-primary), 0.6))"
61
66
  />
62
- {{ ecoMessages[currentMessage].title }}
67
+ {{ currentEcoMessage.title }}
63
68
  </v-card-title>
64
69
  <v-card-text
65
70
  class="pa-0 text-body-2 text-white text-left"
66
71
  style="opacity: 0.85; line-height: 1.7"
67
72
  >
68
- {{ ecoMessages[currentMessage].message }}
73
+ {{ currentEcoMessage.message }}
69
74
  </v-card-text>
70
75
  </v-card>
71
76
  </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
 
@@ -22,7 +18,7 @@ const extensionStores = computed(() =>
22
18
  const show = ref(false);
23
19
  const progress = ref(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,34 +1,48 @@
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
+ type 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
+ const emit = defineEmits<{
19
+ update_values: [value: { additional_files: UploadFile[] }];
20
+ increment_step: [];
21
+ decrement_step: [];
22
+ }>();
23
+
24
+ interface Props {
25
+ multiple: boolean;
26
+ geodeObjectType: string;
27
+ filenames: string[];
28
+ files?: UploadFile[];
29
+ }
11
30
 
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
- });
31
+ const { multiple, geodeObjectType, filenames, files = [] } = defineProps<Props>();
18
32
 
19
33
  const accept = ref("");
20
34
  const loading = ref(false);
21
35
  const has_missing_files = ref(false);
22
- const mandatory_files = ref([]);
23
- const additional_files = ref([]);
36
+ const mandatory_files = ref<string[]>([]);
37
+ const additional_files = ref<string[]>([]);
24
38
  const toggle_loading = useToggle(loading);
25
39
 
26
- function files_uploaded_event(value) {
40
+ function files_uploaded_event(value: UploadFile[]) {
27
41
  emit("update_values", { additional_files: value });
28
42
  emit("increment_step");
29
43
  }
30
44
 
31
- function isCsvFile(filename) {
45
+ function isCsvFile(filename: string) {
32
46
  return filename.toLowerCase().endsWith(".csv") || filename.toLowerCase().endsWith(".csv.json");
33
47
  }
34
48
 
@@ -39,7 +53,7 @@ async function missing_files() {
39
53
  additional_files.value = [];
40
54
  const backStore = useBackStore();
41
55
 
42
- const promise_array = filenames.map((filename) => {
56
+ const promise_array: Promise<FilePlan>[] = filenames.map((filename): Promise<FilePlan> => {
43
57
  if (isCsvFile(filename)) {
44
58
  return Promise.resolve({
45
59
  has_missing_files: false,
@@ -1,27 +1,38 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
+ // Not auto-fixable (eslint's sort-imports core rule has no autofixer) and this file's import order doesn't match its syntax-kind-then-alphabetical requirement - left as-is rather than manually reordered across the codebase for a purely cosmetic rule.
3
+ // oxlint-disable eslint/sort-imports
2
4
  import FetchingData from "@ogw_front/components/FetchingData.vue";
3
5
  import { geode_objects } from "@ogw_front/assets/geode_objects";
4
6
  import { resolveAllowedObjects } from "@ogw_shared/utils/response_handlers/load.js";
5
7
  import schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
6
8
  import { useBackStore } from "@ogw_front/stores/back";
7
9
 
10
+ // Mirrors the (unexported) shape produced by shared/utils/response_handlers/load.ts.
11
+ type AllowedObject = { is_loadable: number; object_priority?: number };
12
+ type AllowedObjectMap = Record<string, AllowedObject>;
13
+
8
14
  const schema = schemas.opengeodeweb_back.allowed_objects;
9
15
 
10
- const emit = defineEmits(["update_values", "increment_step"]);
16
+ const emit = defineEmits<{
17
+ update_values: [value: { geode_object_type: string }];
18
+ increment_step: [];
19
+ }>();
20
+
21
+ interface Props {
22
+ filenames: string[];
23
+ }
11
24
 
12
- const { filenames } = defineProps({
13
- filenames: { type: Array, required: true },
14
- });
25
+ const { filenames } = defineProps<Props>();
15
26
 
16
27
  const backStore = useBackStore();
17
28
 
18
29
  const loading = ref(false);
19
- const allowedGeodeObjects = ref({});
30
+ const allowedGeodeObjects = ref<AllowedObjectMap>({});
20
31
  const toggleLoading = useToggle(loading);
21
32
  const multipleFilesNoCommon = ref(false);
22
33
 
23
- async function fetchAllowedObjectsList() {
24
- const promiseArray = filenames.map((filename) => {
34
+ async function fetchAllowedObjectsList(): Promise<AllowedObjectMap[]> {
35
+ const promiseArray = filenames.map((filename): Promise<{ allowed_objects: AllowedObjectMap }> => {
25
36
  const params = { filename };
26
37
  return backStore.request({ schema, params });
27
38
  });
@@ -29,13 +40,24 @@ async function fetchAllowedObjectsList() {
29
40
  return responses.map((response) => response.allowed_objects);
30
41
  }
31
42
 
32
- function setGeodeObject(geode_object_type) {
43
+ function setGeodeObject(geode_object_type: string | undefined) {
33
44
  if (geode_object_type) {
34
45
  emit("update_values", { geode_object_type });
35
46
  emit("increment_step");
36
47
  }
37
48
  }
38
49
 
50
+ // The geode_objects lookup is fixed and keyed by known object type names; a missing entry only happens if the backend reports a type this table doesn't know about.
51
+ function geodeObjectTooltip(key: string, isLoadable: boolean) {
52
+ return isLoadable
53
+ ? (geode_objects[key]?.tooltip ?? key)
54
+ : `Data not loadable with this class (${key})`;
55
+ }
56
+
57
+ function geodeObjectImage(key: string) {
58
+ return geode_objects[key]?.image;
59
+ }
60
+
39
61
  async function getAllowedGeodeObjects() {
40
62
  toggleLoading();
41
63
  allowedGeodeObjects.value = {};
@@ -59,14 +81,7 @@ await getAllowedGeodeObjects();
59
81
  <FetchingData v-if="loading" />
60
82
  <v-row v-else-if="Object.keys(allowedGeodeObjects).length" class="justify-left">
61
83
  <v-col v-for="(value, key) in allowedGeodeObjects" :key="key" cols="3" md="4">
62
- <v-tooltip
63
- :text="
64
- value['is_loadable']
65
- ? geode_objects[key].tooltip
66
- : `Data not loadable with this class (${key})`
67
- "
68
- location="bottom"
69
- >
84
+ <v-tooltip :text="geodeObjectTooltip(key, Boolean(value['is_loadable']))" location="bottom">
70
85
  <template v-slot:activator="{ props }">
71
86
  <span v-bind="props">
72
87
  <v-card
@@ -79,7 +94,7 @@ await getAllowedGeodeObjects();
79
94
  :elevation="value['is_loadable'] ? 5 : 3"
80
95
  >
81
96
  <v-img
82
- :src="geode_objects[key].image"
97
+ :src="geodeObjectImage(key)"
83
98
  cover
84
99
  :class="!value['is_loadable'] ? 'disabled' : undefined"
85
100
  />
@@ -1,20 +1,27 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
+ // Not auto-fixable (eslint's sort-imports core rule has no autofixer) and this file's import order doesn't match its syntax-kind-then-alphabetical requirement - left as-is rather than manually reordered across the codebase for a purely cosmetic rule.
3
+ // oxlint-disable eslint/sort-imports
2
4
  import { Status } from "@ogw_front/utils/status";
3
5
  import { useBackStore } from "@ogw_front/stores/back";
6
+ import type { JsonRpcSchema } from "@ogw_shared/utils/types.js";
4
7
 
5
- const { schema } = defineProps({
6
- schema: { type: Object, required: true },
7
- });
8
+ interface Props {
9
+ schema: JsonRpcSchema;
10
+ }
11
+
12
+ const { schema } = defineProps<Props>();
13
+
14
+ type PackageVersion = { package: string; version: string };
8
15
 
9
16
  const backStore = useBackStore();
10
- const packages_versions = ref([]);
17
+ const packages_versions = ref<PackageVersion[]>([]);
11
18
 
12
19
  async function get_packages_versions() {
13
20
  await backStore.request(
14
21
  { schema },
15
22
  {
16
- response_function: (response) => {
17
- packages_versions.value = response.versions;
23
+ response_function: (response: unknown) => {
24
+ packages_versions.value = (response as { versions: PackageVersion[] }).versions;
18
25
  },
19
26
  },
20
27
  );
@@ -1,36 +1,30 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { useInfraStore } from "@ogw_front/stores/infra";
3
3
 
4
- const { buttonLabel, buttonColor, color } = defineProps({
5
- buttonLabel: {
6
- type: String,
7
- required: false,
8
- default: "Load the app",
9
- },
10
- buttonColor: {
11
- type: String,
12
- required: false,
13
- default: "white",
14
- },
15
- color: {
16
- type: String,
17
- required: false,
18
- default: undefined,
19
- },
20
- });
4
+ interface Props {
5
+ buttonLabel?: string;
6
+ buttonColor?: string;
7
+ color?: string;
8
+ }
9
+
10
+ const {
11
+ buttonLabel = "Load the app",
12
+ buttonColor = "white",
13
+ color = undefined,
14
+ } = defineProps<Props>();
21
15
 
22
16
  const name = ref("");
23
17
  const email = ref("");
24
18
  const launch = ref(false);
25
19
  const valid = ref(false);
26
20
  const emailRules = [
27
- (value) => {
21
+ (value: string) => {
28
22
  if (value) {
29
23
  return true;
30
24
  }
31
25
  return "E-mail is required.";
32
26
  },
33
- (value) => {
27
+ (value: string) => {
34
28
  if (/.+@.+\..+/u.test(value)) {
35
29
  return true;
36
30
  }
@@ -40,7 +34,7 @@ const emailRules = [
40
34
 
41
35
  function submit() {
42
36
  const infraStore = useInfraStore();
43
- return infraStore.create_backend(name.value, email.value, launch.value);
37
+ return infraStore.create_backend(email.value);
44
38
  }
45
39
  </script>
46
40
 
@@ -61,7 +55,7 @@ function submit() {
61
55
  </VRow>
62
56
  <VRow>
63
57
  <VCol>
64
- <VCheckbox label="Load the app" v-model="load" />
58
+ <VCheckbox label="Load the app" v-model="launch" />
65
59
  </VCol>
66
60
  </VRow>
67
61
  </VContainer>
@@ -1,4 +1,4 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { useElementSize, useWindowSize } from "@vueuse/core";
3
3
 
4
4
  import { Status } from "@ogw_front/utils/status";
@@ -8,13 +8,15 @@ import { useQuickColormap } from "@ogw_front/composables/use_quick_colormap";
8
8
  import { useViewerStore } from "@ogw_front/stores/viewer";
9
9
 
10
10
  import ColormapQuickPicker from "@ogw_front/components/Viewer/Options/ColormapQuickPicker.vue";
11
- import ViewToolbar from "@ogw_front/components/ViewToolbar";
11
+ import ViewToolbar from "@ogw_front/components/ViewToolbar.vue";
12
12
  import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
13
13
  import vtkRemoteView from "@kitware/vtk.js/Rendering/Misc/RemoteView";
14
14
 
15
- const { viewId } = defineProps({
16
- viewId: { type: String, default: "-1" },
17
- });
15
+ interface Props {
16
+ viewId?: string;
17
+ }
18
+
19
+ const { viewId = "-1" } = defineProps<Props>();
18
20
 
19
21
  const viewerStore = useViewerStore();
20
22
  const menuStore = useMenuStore();
@@ -26,7 +28,7 @@ const { width: windowWidth, height: windowHeight } = useWindowSize();
26
28
 
27
29
  const { pickColormap, quickColormap } = useQuickColormap();
28
30
 
29
- async function get_x_y(event) {
31
+ async function get_x_y(event: PointerEvent) {
30
32
  const { offsetX, offsetY, clientX, clientY } = event;
31
33
  if (viewerStore.picking_mode === true) {
32
34
  viewerStore.set_picked_point(offsetX, offsetY);
@@ -77,7 +79,10 @@ function connect() {
77
79
  }
78
80
  const session = viewerStore.client.getConnection().getSession();
79
81
  view.setSession(session);
80
- view.setViewId(props.viewId);
82
+ // Pre-existing bug fixed: `props` was never defined here (props were destructured
83
+ // Directly from defineProps above), so this threw a ReferenceError whenever
84
+ // Connect() ran. `viewId` is the same (reactive) destructured prop value.
85
+ view.setViewId(viewId);
81
86
  connected.value = true;
82
87
  view.render();
83
88
  }
@@ -90,7 +95,7 @@ watch(
90
95
  );
91
96
 
92
97
  watch(
93
- () => props.viewId,
98
+ () => viewId,
94
99
  (id) => {
95
100
  if (connected.value) {
96
101
  view.setViewId(id);
@@ -103,7 +108,9 @@ onMounted(async () => {
103
108
  if (import.meta.client) {
104
109
  window.addEventListener("resize", resize);
105
110
  await nextTick();
106
- view.setContainer(viewer.value.$el);
111
+ if (viewer.value) {
112
+ view.setContainer(viewer.value.$el);
113
+ }
107
114
  connect();
108
115
  resize();
109
116
  }
@@ -1,12 +1,14 @@
1
- <script setup>
2
- import ToolPanel from "@ogw_front/components/ToolPanel";
1
+ <script setup lang="ts">
2
+ import ToolPanel from "@ogw_front/components/ToolPanel.vue";
3
3
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
4
4
 
5
- const { escapeFunction } = defineProps({
6
- escapeFunction: { type: Function, default: undefined },
7
- });
5
+ interface Props {
6
+ escapeFunction?: () => void;
7
+ }
8
+
9
+ const { escapeFunction = undefined } = defineProps<Props>();
8
10
 
9
- const show = defineModel("show", { type: Boolean, default: false });
11
+ const show = defineModel<boolean>("show", { default: false });
10
12
  const hybridViewerStore = useHybridViewerStore();
11
13
 
12
14
  const localPoint1 = ref([0, 0, 0]);
@@ -1,17 +1,21 @@
1
- <script setup>
2
- import ToolPanel from "@ogw_front/components/ToolPanel";
1
+ <script setup lang="ts">
2
+ import ToolPanel from "@ogw_front/components/ToolPanel.vue";
3
3
  import fileDownload from "js-file-download";
4
4
  import { useClipboardItems } from "@vueuse/core";
5
5
  import { useFeedbackStore } from "@ogw_front/stores/feedback";
6
6
  import { useViewerStore } from "@ogw_front/stores/viewer";
7
7
  import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
8
8
 
9
- const show = defineModel({ type: Boolean, default: false });
9
+ const DEFAULT_PANEL_WIDTH = 260;
10
10
 
11
- const { width, escapeFunction } = defineProps({
12
- width: { type: Number, default: 260 },
13
- escapeFunction: { type: Function, default: undefined },
14
- });
11
+ const show = defineModel<boolean>({ default: false });
12
+
13
+ interface Props {
14
+ width?: number;
15
+ escapeFunction?: () => void;
16
+ }
17
+
18
+ const { width = DEFAULT_PANEL_WIDTH, escapeFunction = undefined } = defineProps<Props>();
15
19
 
16
20
  const output_extensions =
17
21
  viewer_schemas.opengeodeweb_viewer.viewer.take_screenshot.properties.output_extension.enum;
@@ -38,21 +42,23 @@ async function takeScreenshot() {
38
42
  params,
39
43
  },
40
44
  {
41
- response_function: async (response) => {
45
+ response_function: async (response: unknown) => {
46
+ const { blob } = response as { blob: BlobPart };
42
47
  if (screenshot_type.value === "file") {
43
- fileDownload(response.blob, `${current_filename}.${output_extension.value}`);
48
+ fileDownload(blob, `${current_filename}.${output_extension.value}`);
44
49
  feedbackStore.add_success("Screenshot downloaded");
45
50
  } else {
46
51
  try {
47
- const pngBlob = new Blob([response.blob], { type: "image/png" });
52
+ const pngBlob = new Blob([blob], { type: "image/png" });
48
53
  await copy([new ClipboardItem({ "image/png": pngBlob })]);
49
54
  feedbackStore.add_success("Screenshot copied to clipboard");
50
55
  } catch (error) {
56
+ const message = error instanceof Error ? error.message : String(error);
51
57
  feedbackStore.add_error(
52
- undefined,
53
- undefined,
58
+ 0,
59
+ "",
54
60
  "Clipboard Error",
55
- `Failed to copy screenshot to clipboard: ${error.message}`,
61
+ `Failed to copy screenshot to clipboard: ${message}`,
56
62
  );
57
63
  }
58
64
  }
@@ -1,10 +1,14 @@
1
- <script setup>
2
- const { modelValue, label } = defineProps({
3
- modelValue: { type: String, default: "" },
4
- label: { type: String, default: "" },
5
- });
1
+ <script setup lang="ts">
2
+ interface Props {
3
+ modelValue?: string;
4
+ label?: string;
5
+ }
6
6
 
7
- const emit = defineEmits(["update:modelValue"]);
7
+ const { modelValue = "", label = "" } = defineProps<Props>();
8
+
9
+ const emit = defineEmits<{
10
+ "update:modelValue": [value: string];
11
+ }>();
8
12
  </script>
9
13
 
10
14
  <template>
@@ -1,5 +1,5 @@
1
- <script setup>
2
- import ToolPanel from "@ogw_front/components/ToolPanel";
1
+ <script setup lang="ts">
2
+ import ToolPanel from "@ogw_front/components/ToolPanel.vue";
3
3
  import { useDataStore } from "@ogw_front/stores/data";
4
4
  import { useDebounceFn } from "@vueuse/core";
5
5
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
@@ -8,11 +8,13 @@ const DEFAULT_SHRINK_VALUE = 0.8;
8
8
  const MAX_SHRINK_VALUE = 1;
9
9
  const DEBOUNCE_DELAY = 100;
10
10
 
11
- const { escapeFunction } = defineProps({
12
- escapeFunction: { type: Function, default: undefined },
13
- });
11
+ interface Props {
12
+ escapeFunction?: () => void;
13
+ }
14
+
15
+ const { escapeFunction = undefined } = defineProps<Props>();
14
16
 
15
- const show = defineModel("show", { type: Boolean, default: false });
17
+ const show = defineModel<boolean>("show", { default: false });
16
18
  const dataStore = useDataStore();
17
19
  const hybridViewerStore = useHybridViewerStore();
18
20
  const targetAllVisible = ref(true);
@@ -21,7 +23,10 @@ const shrinkFactor = ref(DEFAULT_SHRINK_VALUE);
21
23
 
22
24
  const allItems = dataStore.refAllItems();
23
25
  const availableDatasets = computed(() =>
24
- allItems.value.map((item) => ({ title: item.name || item.id, value: item.id })),
26
+ allItems.value.map((item) => ({
27
+ title: item.name || item.id,
28
+ value: item.id,
29
+ })),
25
30
  );
26
31
 
27
32
  async function applyShrink() {
@@ -1,20 +1,39 @@
1
- <script setup>
2
- function truncate(text, maxLength) {
1
+ <script setup lang="ts">
2
+ import type { Ref } from "vue";
3
+ import type { useStepperTree } from "@ogw_front/composables/stepper_tree";
4
+
5
+ interface StepConfig {
6
+ step_title: string;
7
+ chips?: string[];
8
+ component: {
9
+ component_name: string;
10
+ component_options?: Record<string, unknown>;
11
+ };
12
+ }
13
+
14
+ function truncate(text: string, maxLength: number) {
3
15
  if (text.length > maxLength) {
4
16
  return `${text.slice(0, maxLength)}...`;
5
17
  }
6
18
  return text;
7
19
  }
8
20
 
9
- const { stepIndex, stepperTree } = defineProps({
10
- stepIndex: { type: Number, required: true },
11
- stepperTree: { type: Object, required: true },
12
- });
21
+ interface Props {
22
+ stepIndex: number;
23
+ stepperTree: ReturnType<typeof useStepperTree>;
24
+ }
25
+
26
+ const { stepIndex, stepperTree } = defineProps<Props>();
13
27
 
14
- const emit = defineEmits(["reset_values"]);
28
+ const emit = defineEmits<{
29
+ reset_values: [];
30
+ }>();
15
31
 
16
32
  const { state, increment_step, decrement_step, update_values } = stepperTree;
17
- const { current_step_index, steps } = toRefs(state);
33
+ const { current_step_index, steps } = toRefs(state) as unknown as {
34
+ current_step_index: Ref<number>;
35
+ steps: Ref<StepConfig[]>;
36
+ };
18
37
 
19
38
  const sortedChips = computed(() => {
20
39
  const chips = steps.value[stepIndex]?.chips || [];
@@ -41,7 +60,7 @@ const sortedChips = computed(() => {
41
60
  class="text-subtitle-1 font-weight-bold mb-0 transition-swing"
42
61
  :class="current_step_index === stepIndex ? 'text-primary' : 'text-grey-darken-1'"
43
62
  >
44
- {{ steps[stepIndex].step_title }}
63
+ {{ steps[stepIndex]!.step_title }}
45
64
  </p>
46
65
 
47
66
  <v-sheet
@@ -69,8 +88,8 @@ const sortedChips = computed(() => {
69
88
  <component
70
89
  v-if="stepIndex === current_step_index"
71
90
  :key="stepIndex"
72
- :is="steps[stepIndex].component.component_name"
73
- v-bind="steps[stepIndex].component.component_options"
91
+ :is="steps[stepIndex]!.component.component_name"
92
+ v-bind="steps[stepIndex]!.component.component_options"
74
93
  @increment_step="increment_step"
75
94
  @decrement_step="decrement_step"
76
95
  @update_values="update_values"