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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/.build/opengeodeweb_front_schemas.js +175 -0
  2. package/.build/server/utils/app_config.js +57 -0
  3. package/.build/server/utils/cleanup.js +135 -0
  4. package/.build/server/utils/cloud.js +156 -0
  5. package/.build/server/utils/microservices.js +153 -0
  6. package/.build/server/utils/path.js +108 -0
  7. package/.build/server/utils/scripts.js +134 -0
  8. package/.build/server/utils/server.js +44 -0
  9. package/.build/server/utils/server_config.js +51 -0
  10. package/.build/server/utils/stream.js +6 -0
  11. package/.build/server/utils/ws_client.js +100 -0
  12. package/.build/shared/app_mode.js +8 -0
  13. package/.build/shared/scripts.js +49 -0
  14. package/.build/shared/utils/call_raw.js +31 -0
  15. package/.build/shared/utils/call_schema.js +28 -0
  16. package/.build/shared/utils/fetch_raw.js +52 -0
  17. package/.build/shared/utils/fetch_schema.js +32 -0
  18. package/.build/shared/utils/file.js +14 -0
  19. package/.build/shared/utils/parse_boolean.js +23 -0
  20. package/.build/shared/utils/response_handlers/load.js +50 -0
  21. package/.build/shared/utils/types.js +1 -0
  22. package/.build/shared/utils/validate_schema.js +17 -0
  23. package/README.md +8 -0
  24. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  25. package/app/components/ActionButton.vue +28 -12
  26. package/app/components/Basic/Slider.vue +2 -2
  27. package/app/components/Basic/Switch.vue +2 -2
  28. package/app/components/CameraManager/List.vue +11 -11
  29. package/app/components/CameraManager/Saver.vue +8 -4
  30. package/app/components/CameraManager.vue +24 -12
  31. package/app/components/CameraOrientation.vue +31 -17
  32. package/app/components/ClippingPlaneCard.vue +13 -12
  33. package/app/components/ClippingPlanes.vue +31 -21
  34. package/app/components/CrsSelector.vue +26 -18
  35. package/app/components/DeleteDialog.vue +18 -16
  36. package/app/components/DragAndDrop.vue +55 -37
  37. package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
  38. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  39. package/app/components/ExtensionSelector.vue +34 -18
  40. package/app/components/FeedBack/ErrorBanner.vue +4 -3
  41. package/app/components/FeedBack/Snackers.vue +6 -5
  42. package/app/components/FetchingData.vue +8 -12
  43. package/app/components/FileSelector.vue +27 -17
  44. package/app/components/FileUploader.vue +51 -30
  45. package/app/components/GlassCard.vue +17 -13
  46. package/app/components/HybridRenderingView.vue +25 -12
  47. package/app/components/HybridViewerTooltip.vue +28 -26
  48. package/app/components/InfraConnected.vue +1 -1
  49. package/app/components/Launcher.vue +12 -10
  50. package/app/components/Loading/EcoMessages.vue +24 -13
  51. package/app/components/Loading/Header.vue +6 -7
  52. package/app/components/Loading/Progress.vue +6 -7
  53. package/app/components/Loading.vue +10 -14
  54. package/app/components/MissingFilesSelector.vue +35 -19
  55. package/app/components/ObjectSelector.vue +37 -21
  56. package/app/components/PackagesVersions.vue +16 -8
  57. package/app/components/Recaptcha.vue +17 -23
  58. package/app/components/RemoteRenderingView.vue +21 -15
  59. package/app/components/Ruler.vue +11 -9
  60. package/app/components/Screenshot.vue +25 -19
  61. package/app/components/SearchBar.vue +12 -6
  62. package/app/components/ShrinkFilter.vue +19 -14
  63. package/app/components/Step.vue +32 -12
  64. package/app/components/Stepper.vue +19 -7
  65. package/app/components/ToolPanel.vue +29 -13
  66. package/app/components/ViewToolbar.vue +53 -44
  67. package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
  68. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  69. package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
  70. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
  71. package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
  72. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  73. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
  74. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
  75. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
  76. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
  77. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
  78. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
  79. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
  80. package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
  81. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
  82. package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
  83. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
  84. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
  85. package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
  86. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
  87. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  88. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  89. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  90. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  91. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  92. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  93. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  94. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
  95. package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
  96. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
  97. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  98. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
  99. package/app/components/Viewer/ObjectTree/Box.vue +32 -15
  100. package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
  101. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
  102. package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
  103. package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
  104. package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
  105. package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
  106. package/app/components/Viewer/Options/ColorMapList.vue +52 -24
  107. package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
  108. package/app/components/Viewer/Options/ColorPicker.vue +239 -50
  109. package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
  110. package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
  111. package/app/components/Viewer/Options/OptionsSection.vue +7 -5
  112. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  113. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  114. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  115. package/app/components/Viewer/Options/TextureItem.vue +29 -22
  116. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  117. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  118. package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
  119. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
  120. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  121. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  122. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  123. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
  124. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  125. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  126. package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
  127. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  128. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  129. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  130. package/app/components/Viewer/Ui.vue +19 -14
  131. package/app/components/Wrapper.vue +16 -10
  132. package/app/components/ZScaling.vue +18 -10
  133. package/app/components/csv-preview/CsvPreviewer.vue +72 -50
  134. package/app/components/csv-preview/CsvSettings.vue +30 -50
  135. package/app/components/csv-preview/CsvTable.vue +34 -14
  136. package/app/composables/{batch_style.js → batch_style.ts} +9 -7
  137. package/app/composables/clipping_planes_widget.ts +204 -0
  138. package/app/composables/clipping_planes_widget_entries.ts +189 -0
  139. package/app/composables/copy_to_clipboard.ts +7 -0
  140. package/app/composables/global_attribute_style.ts +303 -0
  141. package/app/composables/hover_highlight.ts +127 -0
  142. package/app/composables/{model_collections.js → model_collections.ts} +28 -9
  143. package/app/composables/{model_components.js → model_components.ts} +28 -9
  144. package/app/composables/{project_manager.js → project_manager.ts} +77 -20
  145. package/app/composables/responsive_middle_truncate.ts +48 -0
  146. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  147. package/app/composables/stepper_tree.ts +79 -0
  148. package/app/composables/tree_filter.ts +194 -0
  149. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
  150. package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
  151. package/app/composables/use_adaptive_styles.ts +186 -0
  152. package/app/composables/use_overlapping_picker.ts +263 -0
  153. package/app/composables/use_quick_colormap.ts +55 -0
  154. package/app/composables/virtual_tree.ts +271 -0
  155. package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
  156. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
  157. package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
  158. package/app/stores/app.ts +252 -0
  159. package/app/stores/app_helpers/extension.ts +179 -0
  160. package/app/stores/{back.js → back.ts} +54 -28
  161. package/app/stores/camera_manager.ts +80 -0
  162. package/app/stores/{cloud.js → cloud.ts} +18 -13
  163. package/app/stores/data.ts +392 -0
  164. package/app/stores/data_helpers/collections.ts +138 -0
  165. package/app/stores/data_helpers/mesh.ts +169 -0
  166. package/app/stores/data_style.ts +167 -0
  167. package/app/stores/{feedback.js → feedback.ts} +19 -8
  168. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
  169. package/app/stores/infra.ts +106 -0
  170. package/app/stores/{menu.js → menu.ts} +67 -36
  171. package/app/stores/treeview.ts +383 -0
  172. package/app/stores/{viewer.js → viewer.ts} +75 -42
  173. package/app/utils/attributes.ts +40 -0
  174. package/app/utils/clipping_planes.ts +222 -0
  175. package/app/utils/color_picker.js +54 -0
  176. package/app/utils/colormap.ts +102 -0
  177. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  178. package/app/utils/default_styles/{index.js → index.ts} +4 -3
  179. package/app/utils/default_styles/meshes.ts +264 -0
  180. package/app/utils/default_styles/{models.js → models.ts} +106 -52
  181. package/app/utils/{extension.js → extension.ts} +63 -19
  182. package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
  183. package/app/utils/{log.js → log.ts} +12 -2
  184. package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
  185. package/app/utils/status.ts +19 -0
  186. package/app/utils/{stores.js → stores.ts} +5 -5
  187. package/app/utils/{string.js → string.ts} +6 -6
  188. package/app/utils/{treeview.js → treeview.ts} +4 -1
  189. package/internal/database/{base_database.js → base_database.ts} +7 -3
  190. package/internal/database/database.ts +102 -0
  191. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  192. package/internal/database/tables/camera_positions.ts +6 -0
  193. package/internal/database/tables/{data.js → data.ts} +3 -1
  194. package/internal/database/tables/data_style.ts +6 -0
  195. package/internal/database/tables/model_component_datastyle.ts +6 -0
  196. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  197. package/internal/database/tables/model_components.ts +6 -0
  198. package/internal/database/tables/model_components_relation.ts +6 -0
  199. package/internal/database/tables/table_definition.ts +5 -0
  200. package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
  201. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
  202. package/internal/stores/data_style/mesh/cells/common.ts +50 -0
  203. package/internal/stores/data_style/mesh/cells/index.ts +161 -0
  204. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
  205. package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
  206. package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
  207. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
  208. package/internal/stores/data_style/mesh/edges/common.ts +41 -0
  209. package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
  210. package/internal/stores/data_style/mesh/edges/index.ts +155 -0
  211. package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
  212. package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
  213. package/internal/stores/data_style/mesh/edges/width.ts +42 -0
  214. package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
  215. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
  216. package/internal/stores/data_style/mesh/points/common.ts +51 -0
  217. package/internal/stores/data_style/mesh/points/index.ts +133 -0
  218. package/internal/stores/data_style/mesh/points/size.ts +43 -0
  219. package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
  220. package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
  221. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
  222. package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
  223. package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
  224. package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
  225. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
  226. package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
  227. package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
  228. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
  229. package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
  230. package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
  231. package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
  232. package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
  233. package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
  234. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
  235. package/internal/stores/data_style/model/blocks/common.ts +67 -0
  236. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
  237. package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
  238. package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
  239. package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
  240. package/internal/stores/data_style/model/color.ts +348 -0
  241. package/internal/stores/data_style/model/common.ts +262 -0
  242. package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
  243. package/internal/stores/data_style/model/corners/common.ts +71 -0
  244. package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
  245. package/internal/stores/data_style/model/corners/vertex.ts +315 -0
  246. package/internal/stores/data_style/model/corners/visibility.ts +39 -0
  247. package/internal/stores/data_style/model/edges/common.ts +29 -0
  248. package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
  249. package/internal/stores/data_style/model/edges/visibility.ts +55 -0
  250. package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
  251. package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
  252. package/internal/stores/data_style/model/lines/common.ts +63 -0
  253. package/internal/stores/data_style/model/lines/edge.ts +343 -0
  254. package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
  255. package/internal/stores/data_style/model/lines/vertex.ts +344 -0
  256. package/internal/stores/data_style/model/lines/visibility.ts +37 -0
  257. package/internal/stores/data_style/model/points/common.ts +25 -0
  258. package/internal/stores/data_style/model/points/index.ts +35 -0
  259. package/internal/stores/data_style/model/points/size.ts +44 -0
  260. package/internal/stores/data_style/model/points/visibility.ts +46 -0
  261. package/internal/stores/data_style/model/selection.ts +138 -0
  262. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
  263. package/internal/stores/data_style/model/surfaces/common.ts +69 -0
  264. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
  265. package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
  266. package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
  267. package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
  268. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
  269. package/internal/stores/data_style/state.ts +281 -0
  270. package/internal/stores/data_style/types.ts +30 -0
  271. package/internal/stores/hybrid_viewer/brightness.ts +124 -0
  272. package/internal/stores/hybrid_viewer/camera.ts +326 -0
  273. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
  274. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  275. package/internal/stores/hybrid_viewer/core.ts +64 -0
  276. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
  277. package/internal/stores/hybrid_viewer/highlight.ts +183 -0
  278. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
  279. package/internal/stores/hybrid_viewer/scene.ts +125 -0
  280. package/internal/stores/hybrid_viewer/viewport.ts +177 -0
  281. package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
  282. package/internal/utils/api_fetch.ts +133 -0
  283. package/internal/utils/upload_file.ts +115 -0
  284. package/internal/utils/viewer_call.ts +99 -0
  285. package/internal/utils/ws_client.ts +54 -0
  286. package/nuxt.config.ts +168 -0
  287. package/opengeodeweb_front_schemas.json +2 -2
  288. package/package.json +49 -13
  289. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
  290. package/server/api/local/app/project_folder_path.post.ts +33 -0
  291. package/server/api/local/app/run_back.post.ts +39 -0
  292. package/server/api/local/app/run_viewer.post.ts +39 -0
  293. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
  294. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
  295. package/server/api/local/extensions/upload.put.ts +71 -0
  296. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
  297. package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
  298. package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
  299. package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
  300. package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
  301. package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
  302. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
  303. package/server/api/serverless/run_cloud.post.ts +92 -0
  304. package/server/utils/{app_config.js → app_config.ts} +40 -18
  305. package/server/utils/{cleanup.js → cleanup.ts} +76 -29
  306. package/server/utils/{cloud.js → cloud.ts} +33 -17
  307. package/server/utils/{extension.js → extension.ts} +31 -4
  308. package/server/utils/{microservices.js → microservices.ts} +68 -27
  309. package/server/utils/{path.js → path.ts} +36 -17
  310. package/server/utils/{scripts.js → scripts.ts} +49 -33
  311. package/server/utils/{server.js → server.ts} +13 -6
  312. package/server/utils/server_config.ts +74 -0
  313. package/server/utils/stream.ts +6 -0
  314. package/server/utils/ws_client.ts +165 -0
  315. package/shared/{scripts.js → scripts.ts} +15 -10
  316. package/shared/utils/call_raw.ts +73 -0
  317. package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
  318. package/shared/utils/fetch_raw.ts +125 -0
  319. package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
  320. package/shared/utils/file.ts +22 -0
  321. package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
  322. package/shared/utils/response_handlers/load.ts +109 -0
  323. package/shared/utils/types.ts +27 -0
  324. package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
  325. package/.github/workflows/config.json +0 -5
  326. package/.github/workflows/deploy.yml +0 -15
  327. package/.github/workflows/manual_release.yml +0 -11
  328. package/.github/workflows/merge_request.yml +0 -9
  329. package/.github/workflows/pr_update.yml +0 -11
  330. package/.github/workflows/prepare_deploy.yml +0 -9
  331. package/.github/workflows/schedule.yml +0 -18
  332. package/.github/workflows/test.yml +0 -14
  333. package/.github/workflows/test_pr.yml +0 -12
  334. package/.oxlintrc.json +0 -150
  335. package/.releaserc +0 -11
  336. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
  337. package/app/composables/clipping_planes_widget.js +0 -249
  338. package/app/composables/global_attribute_style.js +0 -181
  339. package/app/composables/hover_highlight.js +0 -91
  340. package/app/composables/responsive_middle_truncate.js +0 -34
  341. package/app/composables/stepper_tree.js +0 -56
  342. package/app/composables/tree_filter.js +0 -138
  343. package/app/composables/use_adaptive_styles.js +0 -120
  344. package/app/composables/use_overlapping_picker.js +0 -169
  345. package/app/composables/use_quick_colormap.js +0 -32
  346. package/app/composables/virtual_tree.js +0 -191
  347. package/app/stores/app.js +0 -326
  348. package/app/stores/camera_manager.js +0 -57
  349. package/app/stores/data.js +0 -278
  350. package/app/stores/data_helpers/collections.js +0 -96
  351. package/app/stores/data_helpers/mesh.js +0 -122
  352. package/app/stores/data_style.js +0 -116
  353. package/app/stores/infra.js +0 -95
  354. package/app/stores/treeview.js +0 -290
  355. package/app/utils/attributes.js +0 -23
  356. package/app/utils/clipping_planes.js +0 -110
  357. package/app/utils/colormap.js +0 -64
  358. package/app/utils/default_styles/meshes.js +0 -191
  359. package/app/utils/status.js +0 -10
  360. package/commitlint.config.js +0 -20
  361. package/internal/database/database.js +0 -80
  362. package/internal/database/tables/camera_positions.js +0 -4
  363. package/internal/database/tables/data_style.js +0 -4
  364. package/internal/database/tables/model_component_datastyle.js +0 -4
  365. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  366. package/internal/database/tables/model_components.js +0 -4
  367. package/internal/database/tables/model_components_relation.js +0 -4
  368. package/internal/stores/data_style/mesh/cells/cell.js +0 -196
  369. package/internal/stores/data_style/mesh/cells/common.js +0 -39
  370. package/internal/stores/data_style/mesh/cells/index.js +0 -81
  371. package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
  372. package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
  373. package/internal/stores/data_style/mesh/edges/common.js +0 -32
  374. package/internal/stores/data_style/mesh/edges/edge.js +0 -195
  375. package/internal/stores/data_style/mesh/edges/index.js +0 -81
  376. package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
  377. package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
  378. package/internal/stores/data_style/mesh/edges/width.js +0 -34
  379. package/internal/stores/data_style/mesh/points/common.js +0 -37
  380. package/internal/stores/data_style/mesh/points/index.js +0 -82
  381. package/internal/stores/data_style/mesh/points/size.js +0 -35
  382. package/internal/stores/data_style/mesh/points/vertex.js +0 -193
  383. package/internal/stores/data_style/mesh/points/visibility.js +0 -37
  384. package/internal/stores/data_style/mesh/polygons/common.js +0 -32
  385. package/internal/stores/data_style/mesh/polygons/index.js +0 -107
  386. package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
  387. package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
  388. package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
  389. package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
  390. package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
  391. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
  392. package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
  393. package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
  394. package/internal/stores/data_style/model/blocks/common.js +0 -51
  395. package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
  396. package/internal/stores/data_style/model/blocks/vertex.js +0 -204
  397. package/internal/stores/data_style/model/blocks/visibility.js +0 -20
  398. package/internal/stores/data_style/model/color.js +0 -218
  399. package/internal/stores/data_style/model/common.js +0 -141
  400. package/internal/stores/data_style/model/corners/common.js +0 -51
  401. package/internal/stores/data_style/model/corners/vertex.js +0 -204
  402. package/internal/stores/data_style/model/corners/visibility.js +0 -20
  403. package/internal/stores/data_style/model/edges/common.js +0 -20
  404. package/internal/stores/data_style/model/edges/visibility.js +0 -38
  405. package/internal/stores/data_style/model/lines/common.js +0 -51
  406. package/internal/stores/data_style/model/lines/edge.js +0 -203
  407. package/internal/stores/data_style/model/lines/vertex.js +0 -204
  408. package/internal/stores/data_style/model/lines/visibility.js +0 -20
  409. package/internal/stores/data_style/model/points/common.js +0 -20
  410. package/internal/stores/data_style/model/points/index.js +0 -25
  411. package/internal/stores/data_style/model/points/size.js +0 -36
  412. package/internal/stores/data_style/model/points/visibility.js +0 -36
  413. package/internal/stores/data_style/model/selection.js +0 -89
  414. package/internal/stores/data_style/model/surfaces/common.js +0 -51
  415. package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
  416. package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
  417. package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
  418. package/internal/stores/data_style/state.js +0 -197
  419. package/internal/stores/hybrid_viewer/brightness.js +0 -82
  420. package/internal/stores/hybrid_viewer/camera.js +0 -274
  421. package/internal/stores/hybrid_viewer/highlight.js +0 -170
  422. package/internal/stores/hybrid_viewer/scene.js +0 -136
  423. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  424. package/internal/utils/api_fetch.js +0 -52
  425. package/internal/utils/upload_file.js +0 -57
  426. package/internal/utils/viewer_call.js +0 -49
  427. package/internal/utils/ws_client.js +0 -29
  428. package/nuxt.config.js +0 -106
  429. package/scripts/generate_geode_objects.js +0 -24
  430. package/server/api/local/app/project_folder_path.post.js +0 -29
  431. package/server/api/local/app/run_back.post.js +0 -33
  432. package/server/api/local/app/run_viewer.post.js +0 -33
  433. package/server/api/local/extensions/upload.put.js +0 -72
  434. package/server/api/microservice/app/set_app_base_url.post.js +0 -25
  435. package/server/api/microservice/app/set_back_base_url.post.js +0 -22
  436. package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
  437. package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
  438. package/server/api/serverless/run_cloud.post.js +0 -44
  439. package/server/utils/server_config.js +0 -58
  440. package/server/utils/ws_client.js +0 -112
  441. package/shared/utils/call_raw.js +0 -46
  442. package/shared/utils/fetch_raw.js +0 -61
  443. package/shared/utils/file.js +0 -16
  444. package/shared/utils/response_handlers/load.js +0 -74
  445. package/tests/integration/data/uploads/test.og_brep +0 -0
  446. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  447. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  448. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  449. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  450. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  451. package/tests/integration/data/uploads/test.vtu +0 -22
  452. package/tests/integration/setup.js +0 -92
  453. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  454. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  455. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  456. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  457. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  458. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  459. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  460. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  461. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  462. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  463. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  464. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  465. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  466. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  467. package/tests/setup_indexeddb.js +0 -4
  468. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  469. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  470. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  471. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  472. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  473. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  474. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  475. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  476. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  477. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  478. package/tests/unit/components/Step.nuxt.test.js +0 -51
  479. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  480. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  481. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  482. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  483. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  484. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  485. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  486. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  487. package/tests/unit/stores/app.nuxt.test.js +0 -189
  488. package/tests/unit/stores/back.nuxt.test.js +0 -147
  489. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  490. package/tests/unit/stores/data.nuxt.test.js +0 -162
  491. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  492. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  493. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  494. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  495. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  496. package/tests/utils.js +0 -20
  497. package/tests/vitest.config.js +0 -67
  498. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
  499. /package/shared/{app_mode.js → app_mode.ts} +0 -0
@@ -0,0 +1,23 @@
1
+ //#region shared/utils/parse_boolean.ts
2
+ const TRUTHY_VALUES = /* @__PURE__ */ new Set([
3
+ true,
4
+ 1,
5
+ "1",
6
+ "true",
7
+ "yes"
8
+ ]);
9
+ const FALSY_VALUES = /* @__PURE__ */ new Set([
10
+ false,
11
+ 0,
12
+ "0",
13
+ "false",
14
+ "no"
15
+ ]);
16
+ function parseBoolean(value) {
17
+ const normalized = typeof value === "string" ? value.trim().toLowerCase() : value;
18
+ if (TRUTHY_VALUES.has(normalized)) return true;
19
+ if (FALSY_VALUES.has(normalized)) return false;
20
+ throw new Error(`Cannot parse boolean from: ${value}`);
21
+ }
22
+ //#endregion
23
+ export { parseBoolean };
@@ -0,0 +1,50 @@
1
+ //#region shared/utils/response_handlers/load.ts
2
+ function getFileExtension(filename) {
3
+ return filename.slice(filename.lastIndexOf(".") + 1);
4
+ }
5
+ function getObject(objectMap, key) {
6
+ const object = objectMap[key];
7
+ if (!object) throw new Error(`Unknown geode object key: ${key}`);
8
+ return object;
9
+ }
10
+ function selectGeodeObject(objectMap) {
11
+ const objectKeys = Object.keys(objectMap);
12
+ if (objectKeys.length === 0) return;
13
+ const [firstKey] = objectKeys;
14
+ if (objectKeys.length === 1 && firstKey !== void 0 && getObject(objectMap, firstKey).is_loadable > 0) return firstKey;
15
+ const highestLoadScore = Math.max(...objectKeys.map((key) => getObject(objectMap, key).is_loadable));
16
+ if (highestLoadScore <= 0) return;
17
+ const bestScoreObjects = objectKeys.filter((key) => getObject(objectMap, key).is_loadable === highestLoadScore);
18
+ if (bestScoreObjects.length === 1) return bestScoreObjects[0];
19
+ const highestPriority = Math.max(...bestScoreObjects.map((key) => getObject(objectMap, key).object_priority ?? -Infinity));
20
+ const bestPriorityObjects = bestScoreObjects.filter((key) => getObject(objectMap, key).object_priority === highestPriority);
21
+ if (highestPriority !== -Infinity && bestPriorityObjects.length === 1) return bestPriorityObjects[0];
22
+ }
23
+ function intersectAllowedObjects(allowedObjectsList) {
24
+ const allKeys = [...new Set(allowedObjectsList.flatMap((object) => Object.keys(object)))];
25
+ const commonKeys = allKeys.filter((key) => allowedObjectsList.every((object) => key in object));
26
+ const mergedEntries = commonKeys.map((key) => {
27
+ const loadScores = allowedObjectsList.map((object) => getObject(object, key).is_loadable);
28
+ const priorities = allowedObjectsList.map((object) => getObject(object, key).object_priority).filter((priority) => priority !== void 0);
29
+ if (priorities.length > 0) return [key, {
30
+ is_loadable: Math.min(...loadScores),
31
+ object_priority: Math.max(...priorities)
32
+ }];
33
+ return [key, { is_loadable: Math.min(...loadScores) }];
34
+ });
35
+ return {
36
+ commonKeys,
37
+ allKeys,
38
+ mergedAllowedObjects: Object.fromEntries(mergedEntries)
39
+ };
40
+ }
41
+ function resolveAllowedObjects(filenames, allowedObjectsList) {
42
+ const { commonKeys, allKeys, mergedAllowedObjects } = intersectAllowedObjects(allowedObjectsList);
43
+ return {
44
+ mergedAllowedObjects,
45
+ multipleFilesNoCommon: filenames.length > 1 && allKeys.length > 0 && commonKeys.length === 0,
46
+ selectedGeodeObject: selectGeodeObject(mergedAllowedObjects)
47
+ };
48
+ }
49
+ //#endregion
50
+ export { getFileExtension, resolveAllowedObjects };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import Ajv from "ajv";
2
+ //#region shared/utils/validate_schema.ts
3
+ function validateSchema(schema, body) {
4
+ const ajv = new Ajv();
5
+ for (const keyword of [
6
+ "methods",
7
+ "route",
8
+ "max_retry",
9
+ "rpc"
10
+ ]) ajv.addKeyword(keyword);
11
+ return {
12
+ valid: ajv.validate(schema, body),
13
+ error: ajv.errorsText()
14
+ };
15
+ }
16
+ //#endregion
17
+ export { validateSchema };
package/README.md CHANGED
@@ -1,3 +1,11 @@
1
1
  # OpenGeodeWeb-Front
2
2
 
3
3
  OpenSource Vue/Vuetify framework for web applications.
4
+
5
+ ## Development
6
+
7
+ This codebase is written in TypeScript (`strict` mode, `noUncheckedIndexedAccess`).
8
+
9
+ - `npm run typecheck` — type-checks the app/server/shared code (via `nuxt typecheck`) and the tests/scripts code (via `tsc -p tsconfig.tests.json`), which live under separate `tsconfig.json` projects since Nuxt's own generated config only covers the former.
10
+ - `npm run lint` — runs [oxlint](https://oxc.rs/docs/guide/usage/linter.html) with autofix. The project's `.oxlintrc.json` must stay in sync with the shared [`Geode-solutions/actions`](https://github.com/Geode-solutions/actions) config, which CI re-downloads and enforces on every run.
11
+ - `npm run test:unit` / `npm run test:integration` — run the Vitest suites under `tests/`.
@@ -24,7 +24,12 @@ import TriangulatedSurface2D from "@ogw_front/assets/img/geode_objects/Triangula
24
24
  import TriangulatedSurface3D from "@ogw_front/assets/img/geode_objects/TriangulatedSurface3D.svg";
25
25
  import VertexSet from "@ogw_front/assets/img/geode_objects/VertexSet.svg";
26
26
 
27
- export const geode_objects = {
27
+ interface GeodeObject {
28
+ tooltip: string;
29
+ image: string;
30
+ }
31
+
32
+ const geode_objects: Record<string, GeodeObject> = {
28
33
  BRep: {
29
34
  tooltip: "BRep",
30
35
  image: BRep,
@@ -126,3 +131,5 @@ export const geode_objects = {
126
131
  image: VertexSet,
127
132
  },
128
133
  };
134
+
135
+ export { geode_objects };
@@ -1,17 +1,33 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  const DEFAULT_ICON_SIZE = 28;
3
- const { icon, tooltip, color, size, variant, density, tooltipLocation, iconSize } = defineProps({
4
- icon: { type: String, required: true },
5
- tooltip: { type: String, required: true },
6
- color: { type: String, default: undefined },
7
- size: { type: [String, Number], default: undefined },
8
- variant: { type: String, default: undefined },
9
- density: { type: String, default: "comfortable" },
10
- tooltipLocation: { type: String, default: "left" },
11
- iconSize: { type: [String, Number], default: DEFAULT_ICON_SIZE },
12
- });
13
3
 
14
- const emit = defineEmits(["click"]);
4
+ interface Props {
5
+ icon: string;
6
+ tooltip: string;
7
+ color?: string;
8
+ size?: string | number;
9
+ variant?: unknown;
10
+ density?: unknown;
11
+ tooltipLocation?: string;
12
+ iconSize?: string | number;
13
+ }
14
+
15
+ const {
16
+ icon,
17
+ tooltip,
18
+ color = undefined,
19
+ size = undefined,
20
+ variant = undefined,
21
+ density = "comfortable",
22
+ tooltipLocation = "left",
23
+ iconSize = DEFAULT_ICON_SIZE,
24
+ } = defineProps<Props>();
25
+
26
+ interface Emits {
27
+ click: [event: MouseEvent];
28
+ }
29
+
30
+ const emit = defineEmits<Emits>();
15
31
  </script>
16
32
 
17
33
  <template>
@@ -1,5 +1,5 @@
1
- <script setup>
2
- const model = defineModel({ type: Number });
1
+ <script setup lang="ts">
2
+ const model = defineModel<number>();
3
3
  </script>
4
4
 
5
5
  <template>
@@ -1,5 +1,5 @@
1
- <script setup>
2
- const model = defineModel({ type: Boolean });
1
+ <script setup lang="ts">
2
+ const model = defineModel<boolean>();
3
3
  </script>
4
4
 
5
5
  <template>
@@ -1,4 +1,4 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { useCameraManagerStore } from "@ogw_front/stores/camera_manager";
3
3
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
4
4
 
@@ -7,10 +7,10 @@ const hybridViewerStore = useHybridViewerStore();
7
7
 
8
8
  const savedPositions = cameraManagerStore.refAllCameraPositions();
9
9
 
10
- const editingId = ref(undefined);
11
- const editingName = ref("");
10
+ const editingId = ref<number | undefined>(undefined);
11
+ const editingName = ref<string>("");
12
12
 
13
- async function restorePosition(positionId) {
13
+ async function restorePosition(positionId: number): void {
14
14
  const position = await cameraManagerStore.getCameraPosition(positionId);
15
15
  if (position) {
16
16
  if (hybridViewerStore.genericRenderWindow) {
@@ -21,17 +21,17 @@ async function restorePosition(positionId) {
21
21
  }
22
22
  }
23
23
 
24
- async function deletePosition(positionId) {
24
+ async function deletePosition(positionId: number): void {
25
25
  await cameraManagerStore.deleteCameraPosition(positionId);
26
26
  }
27
27
 
28
- function startEditing(position) {
28
+ function startEditing(position: { id?: number; name?: string }): void {
29
29
  editingId.value = position.id;
30
- editingName.value = position.name;
30
+ editingName.value = position.name ?? "";
31
31
  }
32
32
 
33
- async function saveRename() {
34
- if (editingName.value) {
33
+ async function saveRename(): void {
34
+ if (editingName.value && editingId.value !== undefined) {
35
35
  await cameraManagerStore.renameCameraPosition(editingId.value, editingName.value);
36
36
  }
37
37
  editingId.value = undefined;
@@ -55,7 +55,7 @@ async function saveRename() {
55
55
  size="x-small"
56
56
  class="mr-1"
57
57
  :data-testid="`restoreCameraPosition${position.name}Button`"
58
- @click="restorePosition(position.id)"
58
+ @click="restorePosition(position.id!)"
59
59
  >
60
60
  <v-icon size="14">mdi-play</v-icon>
61
61
  <v-tooltip activator="parent" location="top">Restore</v-tooltip>
@@ -94,7 +94,7 @@ async function saveRename() {
94
94
  variant="text"
95
95
  size="x-small"
96
96
  color="error"
97
- @click="deletePosition(position.id)"
97
+ @click="deletePosition(position.id!)"
98
98
  >
99
99
  <v-icon size="14">mdi-delete</v-icon>
100
100
  <v-tooltip activator="parent" location="top">Delete</v-tooltip>
@@ -1,19 +1,23 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
+ import type { CameraOptions } from "@ogw_internal/stores/hybrid_viewer/vtk_types.js";
2
3
  import { useCameraManagerStore } from "@ogw_front/stores/camera_manager";
3
4
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
4
5
 
5
6
  const cameraManagerStore = useCameraManagerStore();
6
7
  const hybridViewerStore = useHybridViewerStore();
7
8
 
8
- const newPositionName = ref("");
9
+ const newPositionName = ref<string>("");
9
10
 
10
- async function saveCurrentPosition() {
11
+ async function saveCurrentPosition(): void {
11
12
  if (!newPositionName.value) {
12
13
  return;
13
14
  }
14
15
  await cameraManagerStore.saveCameraPosition(
15
16
  newPositionName.value,
16
- toRaw(hybridViewerStore.camera_options),
17
+ // HybridViewerStore.camera_options is a loosely-typed reactive object (it's
18
+ // Populated dynamically from the viewer's camera state), but is always a
19
+ // CameraOptions shape at runtime once the viewer has synced a camera.
20
+ toRaw(hybridViewerStore.camera_options) as unknown as CameraOptions,
17
21
  );
18
22
  newPositionName.value = "";
19
23
  }
@@ -1,17 +1,29 @@
1
- <script setup>
2
- import List from "@ogw_front/components/CameraManager/List";
3
- import Saver from "@ogw_front/components/CameraManager/Saver";
4
- import ToolPanel from "@ogw_front/components/ToolPanel";
1
+ <script setup lang="ts">
2
+ import List from "@ogw_front/components/CameraManager/List.vue";
3
+ import Saver from "@ogw_front/components/CameraManager/Saver.vue";
4
+ import ToolPanel from "@ogw_front/components/ToolPanel.vue";
5
5
 
6
- const emit = defineEmits(["close"]);
6
+ const DEFAULT_PANEL_WIDTH = 260;
7
7
 
8
- const { showDialog, width, escapeFunction } = defineProps({
9
- showDialog: { type: Boolean, required: true },
10
- width: { type: Number, required: false, default: 260 },
11
- escapeFunction: { type: Function, default: undefined },
12
- });
8
+ interface Emits {
9
+ close: [];
10
+ }
11
+
12
+ const emit = defineEmits<Emits>();
13
+
14
+ interface Props {
15
+ showDialog: boolean;
16
+ width?: number;
17
+ escapeFunction?: () => void;
18
+ }
19
+
20
+ const {
21
+ showDialog,
22
+ width = DEFAULT_PANEL_WIDTH,
23
+ escapeFunction = undefined,
24
+ } = defineProps<Props>();
13
25
 
14
- function handleClose() {
26
+ function handleClose(): void {
15
27
  if (escapeFunction) {
16
28
  escapeFunction();
17
29
  } else {
@@ -19,7 +31,7 @@ function handleClose() {
19
31
  }
20
32
  }
21
33
 
22
- const show = computed({
34
+ const show = computed<boolean>({
23
35
  get: () => showDialog,
24
36
  set: (val) => {
25
37
  if (!val) {
@@ -1,18 +1,32 @@
1
- <script setup>
2
- import ToolPanel from "@ogw_front/components/ToolPanel";
1
+ <script setup lang="ts">
2
+ import type { CameraOptions } from "@ogw_internal/stores/hybrid_viewer/vtk_types.js";
3
+ import ToolPanel from "@ogw_front/components/ToolPanel.vue";
3
4
  import { applyCameraOptions } from "@ogw_internal/stores/hybrid_viewer/camera";
4
5
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
5
6
  import { newInstance as vtkAnnotatedCubeActor } from "@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor";
6
7
  import { newInstance as vtkGenericRenderWindow } from "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow";
7
8
 
8
- const { panel, width, escapeFunction } = defineProps({
9
- panel: { type: Boolean, default: false },
10
- width: { type: Number, default: 260 },
11
- escapeFunction: { type: Function, default: undefined },
12
- });
9
+ const DEFAULT_PANEL_WIDTH = 260;
10
+
11
+ interface Props {
12
+ panel?: boolean;
13
+ width?: number;
14
+ escapeFunction?: () => void;
15
+ }
16
+
17
+ const {
18
+ panel = false,
19
+ width = DEFAULT_PANEL_WIDTH,
20
+ escapeFunction = undefined,
21
+ } = defineProps<Props>();
22
+
23
+ interface Emits {
24
+ select: [value: string];
25
+ }
26
+
27
+ const emit = defineEmits<Emits>();
13
28
 
14
- const show = defineModel("show", { type: Boolean, default: false });
15
- const emit = defineEmits(["select"]);
29
+ const show = defineModel<boolean>("show", { default: false });
16
30
 
17
31
  const orientations = [
18
32
  {
@@ -65,15 +79,15 @@ const orientations = [
65
79
  },
66
80
  ];
67
81
 
68
- const hoveredFace = ref(undefined);
82
+ const hoveredFace = ref<string | undefined>(undefined);
69
83
  const hybridViewerStore = useHybridViewerStore();
70
84
  const cubeContainer = useTemplateRef("cubeContainer");
71
85
 
72
- let genericRenderWindow = undefined;
73
- let cubeActor = undefined;
86
+ let genericRenderWindow: unknown = undefined;
87
+ let cubeActor: unknown = undefined;
74
88
  let isInteracting = false;
75
89
 
76
- function initVTK() {
90
+ function initVTK(): void {
77
91
  if (genericRenderWindow) {
78
92
  return;
79
93
  }
@@ -100,7 +114,7 @@ function initVTK() {
100
114
  edgeColor: "rgba(255, 255, 255, 0.4)",
101
115
  edgeThickness: 0.1,
102
116
  resolution: 400,
103
- fontSizeScale: (resolution) => resolution / 4,
117
+ fontSizeScale: (resolution: number) => resolution / 4,
104
118
  });
105
119
 
106
120
  for (const orientation of orientations) {
@@ -118,13 +132,13 @@ function initVTK() {
118
132
  renderer.resetCamera();
119
133
  }
120
134
 
121
- function syncCubeCamera() {
135
+ function syncCubeCamera(): void {
122
136
  const options = hybridViewerStore.camera_options;
123
137
  if (!genericRenderWindow || isInteracting || !options.position) {
124
138
  return;
125
139
  }
126
140
  const camera = genericRenderWindow.getRenderer().getActiveCamera();
127
- applyCameraOptions(camera, options);
141
+ applyCameraOptions(camera, options as unknown as CameraOptions);
128
142
  genericRenderWindow.getRenderer().resetCamera();
129
143
  genericRenderWindow.getRenderWindow().render();
130
144
  }
@@ -151,7 +165,7 @@ watch(hoveredFace, (newFace, oldFace) => {
151
165
  if (!cubeActor) {
152
166
  return;
153
167
  }
154
- function updateFace(face, active) {
168
+ function updateFace(face: string | undefined, active: boolean): void {
155
169
  const config = orientations.find((orientation) => orientation.face === face);
156
170
  if (config) {
157
171
  cubeActor[`set${config.vtkKey}FaceProperty`]({
@@ -1,18 +1,19 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { getPlaneCssColor } from "@ogw_front/utils/clipping_planes";
3
3
 
4
- const { plane, index } = defineProps({
5
- plane: {
6
- type: Object,
7
- required: true,
8
- },
9
- index: {
10
- type: Number,
11
- required: true,
12
- },
13
- });
4
+ interface Props {
5
+ plane: { origin?: number[]; normal: number[] };
6
+ index: number;
7
+ }
14
8
 
15
- const emit = defineEmits(["remove", "flipNormal"]);
9
+ const { plane, index } = defineProps<Props>();
10
+
11
+ interface Emits {
12
+ remove: [];
13
+ flipNormal: [];
14
+ }
15
+
16
+ const emit = defineEmits<Emits>();
16
17
  </script>
17
18
 
18
19
  <template>
@@ -1,28 +1,35 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { DEBOUNCE_DELAY, DEFAULT_NORMALS } from "@ogw_front/utils/clipping_planes";
3
- import ClippingPlaneCard from "@ogw_front/components/ClippingPlaneCard";
4
- import ToolPanel from "@ogw_front/components/ToolPanel";
3
+ import ClippingPlaneCard from "@ogw_front/components/ClippingPlaneCard.vue";
4
+ import ToolPanel from "@ogw_front/components/ToolPanel.vue";
5
5
  import { useClippingPlanesWidget } from "@ogw_front/composables/clipping_planes_widget";
6
6
  import { useDataStore } from "@ogw_front/stores/data";
7
7
  import { useDebounceFn } from "@vueuse/core";
8
8
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
9
9
 
10
- const { escapeFunction } = defineProps({
11
- escapeFunction: { type: Function, default: undefined },
12
- });
10
+ interface Props {
11
+ escapeFunction?: () => void;
12
+ }
13
+
14
+ const { escapeFunction = undefined } = defineProps<Props>();
13
15
 
14
- const show = defineModel("show", { type: Boolean, default: false });
16
+ const show = defineModel<boolean>("show", { default: false });
15
17
  const dataStore = useDataStore();
16
18
  const hybridViewerStore = useHybridViewerStore();
17
- const targetAllVisible = ref(true);
18
- const selectedDatasetIds = ref([]);
19
- const planes = ref([{ origin: undefined, normal: [1, 0, 0] }]);
19
+ const targetAllVisible = ref<boolean>(true);
20
+ const selectedDatasetIds = ref<string[]>([]);
21
+ const planes = ref<{ origin?: number[]; normal: number[] }[]>([
22
+ { origin: undefined, normal: [1, 0, 0] },
23
+ ]);
20
24
  const allItems = dataStore.refAllItems();
21
- const availableDatasets = computed(() =>
22
- allItems.value.map((item) => ({ title: item.name || item.id, value: item.id })),
25
+ const availableDatasets = computed<{ title: string; value: string }[]>(() =>
26
+ allItems.value.map((item) => ({
27
+ title: item.name || item.id,
28
+ value: item.id,
29
+ })),
23
30
  );
24
31
  const widgetContainer = useTemplateRef("widgetContainer");
25
- let debouncedApply = undefined;
32
+ let debouncedApply: ((...args: unknown[]) => void) | undefined = undefined;
26
33
 
27
34
  const {
28
35
  getSceneCenter,
@@ -39,10 +46,10 @@ const {
39
46
  selectedDatasetIds,
40
47
  allItems,
41
48
  hybridViewerStore,
42
- debouncedApply: (...args) => debouncedApply?.(...args),
49
+ debouncedApply: (...args: unknown[]) => debouncedApply?.(...args),
43
50
  });
44
51
 
45
- async function applyClippingPlanes() {
52
+ async function applyClippingPlanes(): Promise<void> {
46
53
  const allIds = allItems.value.map((item) => item.id);
47
54
  if (allIds.length === 0) {
48
55
  return;
@@ -65,22 +72,25 @@ async function applyClippingPlanes() {
65
72
 
66
73
  debouncedApply = useDebounceFn(() => applyClippingPlanes(), DEBOUNCE_DELAY);
67
74
 
68
- function addPlane() {
69
- const normal = DEFAULT_NORMALS[planes.value.length % DEFAULT_NORMALS.length];
75
+ function addPlane(): void {
76
+ // Index is always in-bounds (modulo the fixed-size list); the fallbacks only
77
+ // Satisfy noUncheckedIndexedAccess and are never hit at runtime.
78
+ const normal = DEFAULT_NORMALS[planes.value.length % DEFAULT_NORMALS.length] ??
79
+ DEFAULT_NORMALS[0] ?? [1, 0, 0];
70
80
  planes.value.push({ origin: getSceneCenter(), normal });
71
81
  }
72
82
 
73
- function removePlane(index) {
83
+ function removePlane(index: number): void {
74
84
  planes.value.splice(index, 1);
75
85
  }
76
86
 
77
- function flipNormal(plane) {
87
+ function flipNormal(plane: { normal: number[] }): void {
78
88
  plane.normal = plane.normal.map((component) => -component);
79
89
  syncWidgets();
80
90
  applyClippingPlanes();
81
91
  }
82
92
 
83
- async function resetClippingPlanes() {
93
+ async function resetClippingPlanes(): Promise<void> {
84
94
  setFromWidget(true);
85
95
  planes.value = [{ origin: undefined, normal: [1, 0, 0] }];
86
96
  updateWidgetPlacement({ isReset: true });
@@ -88,7 +98,7 @@ async function resetClippingPlanes() {
88
98
  await applyClippingPlanes();
89
99
  }
90
100
 
91
- async function removeClippingPlanes() {
101
+ async function removeClippingPlanes(): Promise<void> {
92
102
  const allIds = allItems.value.map((item) => item.id);
93
103
  await hybridViewerStore.setClippingPlanes(allIds, []);
94
104
  }
@@ -1,27 +1,35 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
3
3
  import { useBackStore } from "@ogw_front/stores/back";
4
4
 
5
5
  const schema = schemas.opengeodeweb_back.geographic_coordinate_systems;
6
6
 
7
- const emit = defineEmits(["update_values", "increment_step", "decrement_step"]);
7
+ interface Emits {
8
+ update_values: [values: Record<string, unknown>];
9
+ increment_step: [];
10
+ decrement_step: [];
11
+ }
8
12
 
9
- const { geodeObjectType, keyToUpdate } = defineProps({
10
- geodeObjectType: { type: String, required: true },
11
- keyToUpdate: { type: String, required: true },
12
- });
13
+ const emit = defineEmits<Emits>();
14
+
15
+ interface Props {
16
+ geodeObjectType: string;
17
+ keyToUpdate: string;
18
+ }
19
+
20
+ const { geodeObjectType, keyToUpdate } = defineProps<Props>();
13
21
 
14
- const search = ref("");
15
- const data_table_loading = ref(false);
16
- const crs_list = ref([]);
17
- const selected_crs = ref([]);
22
+ const search = ref<string>("");
23
+ const data_table_loading = ref<boolean>(false);
24
+ const crs_list = ref<Record<string, unknown>[]>([]);
25
+ const selected_crs = ref<unknown[]>([]);
18
26
  const toggle_loading = useToggle(data_table_loading);
19
27
  const backStore = useBackStore();
20
28
 
21
- function get_selected_crs(crs_code) {
22
- for (let i = 0; i <= crs_list.value.length; i += 1) {
23
- if (crs_list.value[i]["code"] === crs_code) {
24
- return crs_list.value[i];
29
+ function get_selected_crs(crs_code: unknown): unknown {
30
+ for (const crs of crs_list.value) {
31
+ if (crs && crs["code"] === crs_code) {
32
+ return crs;
25
33
  }
26
34
  }
27
35
  }
@@ -35,14 +43,14 @@ watch(selected_crs, (new_value) => {
35
43
  emit("increment_step");
36
44
  });
37
45
 
38
- async function get_crs_table() {
46
+ async function get_crs_table(): void {
39
47
  const params = { geode_object_type: geodeObjectType };
40
48
  toggle_loading();
41
49
  await backStore.request(
42
50
  { schema, params },
43
51
  {
44
- response_function: (response) => {
45
- crs_list.value = response.crs_list;
52
+ response_function: (response: unknown) => {
53
+ crs_list.value = (response as { crs_list: Record<string, unknown>[] }).crs_list;
46
54
  },
47
55
  },
48
56
  );
@@ -58,7 +66,7 @@ const headers = [
58
66
  },
59
67
  { title: "Code", align: "end", key: "code" },
60
68
  { title: "Name", align: "end", key: "name" },
61
- ];
69
+ ] as const;
62
70
 
63
71
  // oxlint-disable-next-line no-top-level-await
64
72
  await get_crs_table();