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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/.build/opengeodeweb_front_schemas.js +175 -0
  2. package/.build/server/utils/app_config.js +57 -0
  3. package/.build/server/utils/cleanup.js +135 -0
  4. package/.build/server/utils/cloud.js +156 -0
  5. package/.build/server/utils/microservices.js +153 -0
  6. package/.build/server/utils/path.js +108 -0
  7. package/.build/server/utils/scripts.js +134 -0
  8. package/.build/server/utils/server.js +44 -0
  9. package/.build/server/utils/server_config.js +51 -0
  10. package/.build/server/utils/stream.js +6 -0
  11. package/.build/server/utils/ws_client.js +100 -0
  12. package/.build/shared/app_mode.js +8 -0
  13. package/.build/shared/scripts.js +49 -0
  14. package/.build/shared/utils/call_raw.js +31 -0
  15. package/.build/shared/utils/call_schema.js +28 -0
  16. package/.build/shared/utils/fetch_raw.js +52 -0
  17. package/.build/shared/utils/fetch_schema.js +32 -0
  18. package/.build/shared/utils/file.js +14 -0
  19. package/.build/shared/utils/parse_boolean.js +23 -0
  20. package/.build/shared/utils/response_handlers/load.js +50 -0
  21. package/.build/shared/utils/types.js +1 -0
  22. package/.build/shared/utils/validate_schema.js +17 -0
  23. package/README.md +8 -0
  24. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  25. package/app/components/ActionButton.vue +28 -12
  26. package/app/components/Basic/Slider.vue +2 -2
  27. package/app/components/Basic/Switch.vue +2 -2
  28. package/app/components/CameraManager/List.vue +11 -11
  29. package/app/components/CameraManager/Saver.vue +8 -4
  30. package/app/components/CameraManager.vue +24 -12
  31. package/app/components/CameraOrientation.vue +31 -17
  32. package/app/components/ClippingPlaneCard.vue +13 -12
  33. package/app/components/ClippingPlanes.vue +31 -21
  34. package/app/components/CrsSelector.vue +26 -18
  35. package/app/components/DeleteDialog.vue +18 -16
  36. package/app/components/DragAndDrop.vue +55 -37
  37. package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
  38. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  39. package/app/components/ExtensionSelector.vue +34 -18
  40. package/app/components/FeedBack/ErrorBanner.vue +4 -3
  41. package/app/components/FeedBack/Snackers.vue +6 -5
  42. package/app/components/FetchingData.vue +8 -12
  43. package/app/components/FileSelector.vue +27 -17
  44. package/app/components/FileUploader.vue +51 -30
  45. package/app/components/GlassCard.vue +17 -13
  46. package/app/components/HybridRenderingView.vue +25 -12
  47. package/app/components/HybridViewerTooltip.vue +28 -26
  48. package/app/components/InfraConnected.vue +1 -1
  49. package/app/components/Launcher.vue +12 -10
  50. package/app/components/Loading/EcoMessages.vue +24 -13
  51. package/app/components/Loading/Header.vue +6 -7
  52. package/app/components/Loading/Progress.vue +6 -7
  53. package/app/components/Loading.vue +10 -14
  54. package/app/components/MissingFilesSelector.vue +35 -19
  55. package/app/components/ObjectSelector.vue +37 -21
  56. package/app/components/PackagesVersions.vue +16 -8
  57. package/app/components/Recaptcha.vue +17 -23
  58. package/app/components/RemoteRenderingView.vue +21 -15
  59. package/app/components/Ruler.vue +11 -9
  60. package/app/components/Screenshot.vue +25 -19
  61. package/app/components/SearchBar.vue +12 -6
  62. package/app/components/ShrinkFilter.vue +19 -14
  63. package/app/components/Step.vue +32 -12
  64. package/app/components/Stepper.vue +19 -7
  65. package/app/components/ToolPanel.vue +29 -13
  66. package/app/components/ViewToolbar.vue +53 -44
  67. package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
  68. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  69. package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
  70. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
  71. package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
  72. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  73. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
  74. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
  75. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
  76. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
  77. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
  78. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
  79. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
  80. package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
  81. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
  82. package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
  83. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
  84. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
  85. package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
  86. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
  87. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  88. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  89. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  90. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  91. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  92. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  93. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  94. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
  95. package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
  96. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
  97. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  98. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
  99. package/app/components/Viewer/ObjectTree/Box.vue +32 -15
  100. package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
  101. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
  102. package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
  103. package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
  104. package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
  105. package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
  106. package/app/components/Viewer/Options/ColorMapList.vue +52 -24
  107. package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
  108. package/app/components/Viewer/Options/ColorPicker.vue +239 -50
  109. package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
  110. package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
  111. package/app/components/Viewer/Options/OptionsSection.vue +7 -5
  112. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  113. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  114. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  115. package/app/components/Viewer/Options/TextureItem.vue +29 -22
  116. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  117. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  118. package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
  119. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
  120. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  121. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  122. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  123. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
  124. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  125. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  126. package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
  127. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  128. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  129. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  130. package/app/components/Viewer/Ui.vue +19 -14
  131. package/app/components/Wrapper.vue +16 -10
  132. package/app/components/ZScaling.vue +18 -10
  133. package/app/components/csv-preview/CsvPreviewer.vue +72 -50
  134. package/app/components/csv-preview/CsvSettings.vue +30 -50
  135. package/app/components/csv-preview/CsvTable.vue +34 -14
  136. package/app/composables/{batch_style.js → batch_style.ts} +9 -7
  137. package/app/composables/clipping_planes_widget.ts +204 -0
  138. package/app/composables/clipping_planes_widget_entries.ts +189 -0
  139. package/app/composables/copy_to_clipboard.ts +7 -0
  140. package/app/composables/global_attribute_style.ts +303 -0
  141. package/app/composables/hover_highlight.ts +127 -0
  142. package/app/composables/{model_collections.js → model_collections.ts} +28 -9
  143. package/app/composables/{model_components.js → model_components.ts} +28 -9
  144. package/app/composables/{project_manager.js → project_manager.ts} +77 -20
  145. package/app/composables/responsive_middle_truncate.ts +48 -0
  146. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  147. package/app/composables/stepper_tree.ts +79 -0
  148. package/app/composables/tree_filter.ts +194 -0
  149. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
  150. package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
  151. package/app/composables/use_adaptive_styles.ts +186 -0
  152. package/app/composables/use_overlapping_picker.ts +263 -0
  153. package/app/composables/use_quick_colormap.ts +55 -0
  154. package/app/composables/virtual_tree.ts +271 -0
  155. package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
  156. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
  157. package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
  158. package/app/stores/app.ts +252 -0
  159. package/app/stores/app_helpers/extension.ts +179 -0
  160. package/app/stores/{back.js → back.ts} +54 -28
  161. package/app/stores/camera_manager.ts +80 -0
  162. package/app/stores/{cloud.js → cloud.ts} +18 -13
  163. package/app/stores/data.ts +392 -0
  164. package/app/stores/data_helpers/collections.ts +138 -0
  165. package/app/stores/data_helpers/mesh.ts +169 -0
  166. package/app/stores/data_style.ts +167 -0
  167. package/app/stores/{feedback.js → feedback.ts} +19 -8
  168. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
  169. package/app/stores/infra.ts +106 -0
  170. package/app/stores/{menu.js → menu.ts} +67 -36
  171. package/app/stores/treeview.ts +383 -0
  172. package/app/stores/{viewer.js → viewer.ts} +75 -42
  173. package/app/utils/attributes.ts +40 -0
  174. package/app/utils/clipping_planes.ts +222 -0
  175. package/app/utils/color_picker.js +54 -0
  176. package/app/utils/colormap.ts +102 -0
  177. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  178. package/app/utils/default_styles/{index.js → index.ts} +4 -3
  179. package/app/utils/default_styles/meshes.ts +264 -0
  180. package/app/utils/default_styles/{models.js → models.ts} +106 -52
  181. package/app/utils/{extension.js → extension.ts} +63 -19
  182. package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
  183. package/app/utils/{log.js → log.ts} +12 -2
  184. package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
  185. package/app/utils/status.ts +19 -0
  186. package/app/utils/{stores.js → stores.ts} +5 -5
  187. package/app/utils/{string.js → string.ts} +6 -6
  188. package/app/utils/{treeview.js → treeview.ts} +4 -1
  189. package/internal/database/{base_database.js → base_database.ts} +7 -3
  190. package/internal/database/database.ts +102 -0
  191. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  192. package/internal/database/tables/camera_positions.ts +6 -0
  193. package/internal/database/tables/{data.js → data.ts} +3 -1
  194. package/internal/database/tables/data_style.ts +6 -0
  195. package/internal/database/tables/model_component_datastyle.ts +6 -0
  196. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  197. package/internal/database/tables/model_components.ts +6 -0
  198. package/internal/database/tables/model_components_relation.ts +6 -0
  199. package/internal/database/tables/table_definition.ts +5 -0
  200. package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
  201. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
  202. package/internal/stores/data_style/mesh/cells/common.ts +50 -0
  203. package/internal/stores/data_style/mesh/cells/index.ts +161 -0
  204. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
  205. package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
  206. package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
  207. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
  208. package/internal/stores/data_style/mesh/edges/common.ts +41 -0
  209. package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
  210. package/internal/stores/data_style/mesh/edges/index.ts +155 -0
  211. package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
  212. package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
  213. package/internal/stores/data_style/mesh/edges/width.ts +42 -0
  214. package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
  215. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
  216. package/internal/stores/data_style/mesh/points/common.ts +51 -0
  217. package/internal/stores/data_style/mesh/points/index.ts +133 -0
  218. package/internal/stores/data_style/mesh/points/size.ts +43 -0
  219. package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
  220. package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
  221. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
  222. package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
  223. package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
  224. package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
  225. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
  226. package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
  227. package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
  228. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
  229. package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
  230. package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
  231. package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
  232. package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
  233. package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
  234. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
  235. package/internal/stores/data_style/model/blocks/common.ts +67 -0
  236. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
  237. package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
  238. package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
  239. package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
  240. package/internal/stores/data_style/model/color.ts +348 -0
  241. package/internal/stores/data_style/model/common.ts +262 -0
  242. package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
  243. package/internal/stores/data_style/model/corners/common.ts +71 -0
  244. package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
  245. package/internal/stores/data_style/model/corners/vertex.ts +315 -0
  246. package/internal/stores/data_style/model/corners/visibility.ts +39 -0
  247. package/internal/stores/data_style/model/edges/common.ts +29 -0
  248. package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
  249. package/internal/stores/data_style/model/edges/visibility.ts +55 -0
  250. package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
  251. package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
  252. package/internal/stores/data_style/model/lines/common.ts +63 -0
  253. package/internal/stores/data_style/model/lines/edge.ts +343 -0
  254. package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
  255. package/internal/stores/data_style/model/lines/vertex.ts +344 -0
  256. package/internal/stores/data_style/model/lines/visibility.ts +37 -0
  257. package/internal/stores/data_style/model/points/common.ts +25 -0
  258. package/internal/stores/data_style/model/points/index.ts +35 -0
  259. package/internal/stores/data_style/model/points/size.ts +44 -0
  260. package/internal/stores/data_style/model/points/visibility.ts +46 -0
  261. package/internal/stores/data_style/model/selection.ts +138 -0
  262. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
  263. package/internal/stores/data_style/model/surfaces/common.ts +69 -0
  264. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
  265. package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
  266. package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
  267. package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
  268. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
  269. package/internal/stores/data_style/state.ts +281 -0
  270. package/internal/stores/data_style/types.ts +30 -0
  271. package/internal/stores/hybrid_viewer/brightness.ts +124 -0
  272. package/internal/stores/hybrid_viewer/camera.ts +326 -0
  273. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
  274. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  275. package/internal/stores/hybrid_viewer/core.ts +64 -0
  276. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
  277. package/internal/stores/hybrid_viewer/highlight.ts +183 -0
  278. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
  279. package/internal/stores/hybrid_viewer/scene.ts +125 -0
  280. package/internal/stores/hybrid_viewer/viewport.ts +177 -0
  281. package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
  282. package/internal/utils/api_fetch.ts +133 -0
  283. package/internal/utils/upload_file.ts +115 -0
  284. package/internal/utils/viewer_call.ts +99 -0
  285. package/internal/utils/ws_client.ts +54 -0
  286. package/nuxt.config.ts +168 -0
  287. package/opengeodeweb_front_schemas.json +2 -2
  288. package/package.json +49 -13
  289. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
  290. package/server/api/local/app/project_folder_path.post.ts +33 -0
  291. package/server/api/local/app/run_back.post.ts +39 -0
  292. package/server/api/local/app/run_viewer.post.ts +39 -0
  293. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
  294. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
  295. package/server/api/local/extensions/upload.put.ts +71 -0
  296. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
  297. package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
  298. package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
  299. package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
  300. package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
  301. package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
  302. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
  303. package/server/api/serverless/run_cloud.post.ts +92 -0
  304. package/server/utils/{app_config.js → app_config.ts} +40 -18
  305. package/server/utils/{cleanup.js → cleanup.ts} +76 -29
  306. package/server/utils/{cloud.js → cloud.ts} +33 -17
  307. package/server/utils/{extension.js → extension.ts} +31 -4
  308. package/server/utils/{microservices.js → microservices.ts} +68 -27
  309. package/server/utils/{path.js → path.ts} +36 -17
  310. package/server/utils/{scripts.js → scripts.ts} +49 -33
  311. package/server/utils/{server.js → server.ts} +13 -6
  312. package/server/utils/server_config.ts +74 -0
  313. package/server/utils/stream.ts +6 -0
  314. package/server/utils/ws_client.ts +165 -0
  315. package/shared/{scripts.js → scripts.ts} +15 -10
  316. package/shared/utils/call_raw.ts +73 -0
  317. package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
  318. package/shared/utils/fetch_raw.ts +125 -0
  319. package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
  320. package/shared/utils/file.ts +22 -0
  321. package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
  322. package/shared/utils/response_handlers/load.ts +109 -0
  323. package/shared/utils/types.ts +27 -0
  324. package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
  325. package/.github/workflows/config.json +0 -5
  326. package/.github/workflows/deploy.yml +0 -15
  327. package/.github/workflows/manual_release.yml +0 -11
  328. package/.github/workflows/merge_request.yml +0 -9
  329. package/.github/workflows/pr_update.yml +0 -11
  330. package/.github/workflows/prepare_deploy.yml +0 -9
  331. package/.github/workflows/schedule.yml +0 -18
  332. package/.github/workflows/test.yml +0 -14
  333. package/.github/workflows/test_pr.yml +0 -12
  334. package/.oxlintrc.json +0 -150
  335. package/.releaserc +0 -11
  336. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
  337. package/app/composables/clipping_planes_widget.js +0 -249
  338. package/app/composables/global_attribute_style.js +0 -181
  339. package/app/composables/hover_highlight.js +0 -91
  340. package/app/composables/responsive_middle_truncate.js +0 -34
  341. package/app/composables/stepper_tree.js +0 -56
  342. package/app/composables/tree_filter.js +0 -138
  343. package/app/composables/use_adaptive_styles.js +0 -120
  344. package/app/composables/use_overlapping_picker.js +0 -169
  345. package/app/composables/use_quick_colormap.js +0 -32
  346. package/app/composables/virtual_tree.js +0 -191
  347. package/app/stores/app.js +0 -326
  348. package/app/stores/camera_manager.js +0 -57
  349. package/app/stores/data.js +0 -278
  350. package/app/stores/data_helpers/collections.js +0 -96
  351. package/app/stores/data_helpers/mesh.js +0 -122
  352. package/app/stores/data_style.js +0 -116
  353. package/app/stores/infra.js +0 -95
  354. package/app/stores/treeview.js +0 -290
  355. package/app/utils/attributes.js +0 -23
  356. package/app/utils/clipping_planes.js +0 -110
  357. package/app/utils/colormap.js +0 -64
  358. package/app/utils/default_styles/meshes.js +0 -191
  359. package/app/utils/status.js +0 -10
  360. package/commitlint.config.js +0 -20
  361. package/internal/database/database.js +0 -80
  362. package/internal/database/tables/camera_positions.js +0 -4
  363. package/internal/database/tables/data_style.js +0 -4
  364. package/internal/database/tables/model_component_datastyle.js +0 -4
  365. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  366. package/internal/database/tables/model_components.js +0 -4
  367. package/internal/database/tables/model_components_relation.js +0 -4
  368. package/internal/stores/data_style/mesh/cells/cell.js +0 -196
  369. package/internal/stores/data_style/mesh/cells/common.js +0 -39
  370. package/internal/stores/data_style/mesh/cells/index.js +0 -81
  371. package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
  372. package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
  373. package/internal/stores/data_style/mesh/edges/common.js +0 -32
  374. package/internal/stores/data_style/mesh/edges/edge.js +0 -195
  375. package/internal/stores/data_style/mesh/edges/index.js +0 -81
  376. package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
  377. package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
  378. package/internal/stores/data_style/mesh/edges/width.js +0 -34
  379. package/internal/stores/data_style/mesh/points/common.js +0 -37
  380. package/internal/stores/data_style/mesh/points/index.js +0 -82
  381. package/internal/stores/data_style/mesh/points/size.js +0 -35
  382. package/internal/stores/data_style/mesh/points/vertex.js +0 -193
  383. package/internal/stores/data_style/mesh/points/visibility.js +0 -37
  384. package/internal/stores/data_style/mesh/polygons/common.js +0 -32
  385. package/internal/stores/data_style/mesh/polygons/index.js +0 -107
  386. package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
  387. package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
  388. package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
  389. package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
  390. package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
  391. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
  392. package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
  393. package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
  394. package/internal/stores/data_style/model/blocks/common.js +0 -51
  395. package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
  396. package/internal/stores/data_style/model/blocks/vertex.js +0 -204
  397. package/internal/stores/data_style/model/blocks/visibility.js +0 -20
  398. package/internal/stores/data_style/model/color.js +0 -218
  399. package/internal/stores/data_style/model/common.js +0 -141
  400. package/internal/stores/data_style/model/corners/common.js +0 -51
  401. package/internal/stores/data_style/model/corners/vertex.js +0 -204
  402. package/internal/stores/data_style/model/corners/visibility.js +0 -20
  403. package/internal/stores/data_style/model/edges/common.js +0 -20
  404. package/internal/stores/data_style/model/edges/visibility.js +0 -38
  405. package/internal/stores/data_style/model/lines/common.js +0 -51
  406. package/internal/stores/data_style/model/lines/edge.js +0 -203
  407. package/internal/stores/data_style/model/lines/vertex.js +0 -204
  408. package/internal/stores/data_style/model/lines/visibility.js +0 -20
  409. package/internal/stores/data_style/model/points/common.js +0 -20
  410. package/internal/stores/data_style/model/points/index.js +0 -25
  411. package/internal/stores/data_style/model/points/size.js +0 -36
  412. package/internal/stores/data_style/model/points/visibility.js +0 -36
  413. package/internal/stores/data_style/model/selection.js +0 -89
  414. package/internal/stores/data_style/model/surfaces/common.js +0 -51
  415. package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
  416. package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
  417. package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
  418. package/internal/stores/data_style/state.js +0 -197
  419. package/internal/stores/hybrid_viewer/brightness.js +0 -82
  420. package/internal/stores/hybrid_viewer/camera.js +0 -274
  421. package/internal/stores/hybrid_viewer/highlight.js +0 -170
  422. package/internal/stores/hybrid_viewer/scene.js +0 -136
  423. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  424. package/internal/utils/api_fetch.js +0 -52
  425. package/internal/utils/upload_file.js +0 -57
  426. package/internal/utils/viewer_call.js +0 -49
  427. package/internal/utils/ws_client.js +0 -29
  428. package/nuxt.config.js +0 -106
  429. package/scripts/generate_geode_objects.js +0 -24
  430. package/server/api/local/app/project_folder_path.post.js +0 -29
  431. package/server/api/local/app/run_back.post.js +0 -33
  432. package/server/api/local/app/run_viewer.post.js +0 -33
  433. package/server/api/local/extensions/upload.put.js +0 -72
  434. package/server/api/microservice/app/set_app_base_url.post.js +0 -25
  435. package/server/api/microservice/app/set_back_base_url.post.js +0 -22
  436. package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
  437. package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
  438. package/server/api/serverless/run_cloud.post.js +0 -44
  439. package/server/utils/server_config.js +0 -58
  440. package/server/utils/ws_client.js +0 -112
  441. package/shared/utils/call_raw.js +0 -46
  442. package/shared/utils/fetch_raw.js +0 -61
  443. package/shared/utils/file.js +0 -16
  444. package/shared/utils/response_handlers/load.js +0 -74
  445. package/tests/integration/data/uploads/test.og_brep +0 -0
  446. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  447. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  448. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  449. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  450. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  451. package/tests/integration/data/uploads/test.vtu +0 -22
  452. package/tests/integration/setup.js +0 -92
  453. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  454. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  455. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  456. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  457. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  458. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  459. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  460. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  461. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  462. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  463. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  464. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  465. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  466. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  467. package/tests/setup_indexeddb.js +0 -4
  468. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  469. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  470. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  471. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  472. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  473. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  474. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  475. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  476. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  477. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  478. package/tests/unit/components/Step.nuxt.test.js +0 -51
  479. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  480. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  481. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  482. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  483. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  484. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  485. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  486. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  487. package/tests/unit/stores/app.nuxt.test.js +0 -189
  488. package/tests/unit/stores/back.nuxt.test.js +0 -147
  489. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  490. package/tests/unit/stores/data.nuxt.test.js +0 -162
  491. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  492. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  493. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  494. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  495. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  496. package/tests/utils.js +0 -20
  497. package/tests/vitest.config.js +0 -67
  498. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
  499. /package/shared/{app_mode.js → app_mode.ts} +0 -0
@@ -1,37 +1,74 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { sortAndFormatItems, useTreeFilter } from "@ogw_front/composables/tree_filter";
3
3
  import CommonTreeView from "@ogw_front/components/Viewer/ObjectTree/Base/CommonTreeView.vue";
4
+ import type { DisplayItem } from "@ogw_front/composables/virtual_tree";
4
5
  import FetchingData from "@ogw_front/components/FetchingData.vue";
5
6
  import ObjectTreeControls from "@ogw_front/components/Viewer/ObjectTree/Base/Controls.vue";
6
7
  import ObjectTreeItemLabel from "@ogw_front/components/Viewer/ObjectTree/Base/ItemLabel.vue";
7
8
  import { useHoverhighlight } from "@ogw_front/composables/hover_highlight";
8
9
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
9
10
  import { useModelCollections } from "@ogw_front/composables/model_collections";
11
+ import { useModelComponents } from "@ogw_front/composables/model_components";
10
12
  import { useTreeviewStore } from "@ogw_front/stores/treeview";
11
13
 
12
- const { id, viewId } = defineProps({
13
- id: { type: String, required: true },
14
- viewId: { type: String, required: false, default: undefined },
15
- });
14
+ interface Props {
15
+ id: string;
16
+ viewId?: string;
17
+ viewType?: string;
18
+ }
19
+
20
+ const { id, viewId = undefined, viewType = "model_components" } = defineProps<Props>();
16
21
  const actualViewId = viewId || id;
22
+
23
+ interface CollectionTreeItem {
24
+ raw?: CollectionTreeItem;
25
+ id: string;
26
+ category?: string;
27
+ children?: CollectionTreeItem[];
28
+ viewer_id?: number;
29
+ title?: string;
30
+ }
31
+
17
32
  const { onHoverEnter, onHoverLeave } = useHoverhighlight();
18
33
  const hybridViewerStore = useHybridViewerStore();
19
- const emit = defineEmits(["show-menu"]);
34
+ interface Emits {
35
+ "show-menu": [
36
+ payload: {
37
+ event: unknown;
38
+ itemId: string;
39
+ context_type: "model_component" | "model_component_type";
40
+ modelId: string;
41
+ modelComponentType?: string;
42
+ targetComponentIds?: string[];
43
+ },
44
+ ];
45
+ }
46
+
47
+ const emit = defineEmits<Emits>();
20
48
 
21
49
  const treeviewStore = useTreeviewStore();
50
+
51
+ const isCollections = computed(() => viewType === "model_collections");
52
+
53
+ const composable = isCollections.value ? useModelCollections(id) : useModelComponents(id);
22
54
  const {
23
55
  items: rawItems,
24
- collectionsCache: componentsCache,
25
56
  localCategories,
26
57
  selection: visibleComponents,
27
58
  updateVisibility,
28
- } = useModelCollections(id);
59
+ } = composable;
60
+
61
+ const cache = computed(
62
+ () =>
63
+ ("componentsCache" in composable ? composable.componentsCache.value : undefined) ??
64
+ ("collectionsCache" in composable ? composable.collectionsCache.value : undefined),
65
+ );
29
66
 
30
67
  const currentView = computed(() =>
31
68
  treeviewStore.opened_views.find((view) => view.id === actualViewId),
32
69
  );
33
70
 
34
- const opened = computed({
71
+ const opened = computed<string[]>({
35
72
  get: () => currentView.value?.opened || [],
36
73
  set: (val) => treeviewStore.setOpened(actualViewId, val),
37
74
  });
@@ -47,20 +84,22 @@ const {
47
84
  applySearchFilter,
48
85
  } = useTreeFilter(localCategories);
49
86
 
50
- function onUpdateSelection(newSelection) {
87
+ function onUpdateSelection(newSelection: string[]): void {
51
88
  const finalSelection = applySearchFilter(newSelection, visibleComponents.value);
52
- updateVisibility(finalSelection);
89
+ updateVisibility(finalSelection as string[]);
53
90
  }
54
91
 
55
- const visibleSelection = computed(() => applySearchFilter(visibleComponents.value, []));
92
+ const visibleSelection = computed<string[]>(
93
+ () => applySearchFilter(visibleComponents.value, []) as string[],
94
+ );
56
95
 
57
- const itemsForTreeView = computed(() => {
58
- if (search.value && componentsCache.value) {
96
+ const itemsForTreeView = computed<CollectionTreeItem[]>(() => {
97
+ if (search.value && cache.value) {
59
98
  const query = search.value.toLowerCase();
60
- const result = [];
61
- for (const type of Object.keys(componentsCache.value)) {
62
- const matches = componentsCache.value[type].filter(
63
- (component) =>
99
+ const result: CollectionTreeItem[] = [];
100
+ for (const type of Object.keys(cache.value)) {
101
+ const matches = (cache.value[type] ?? []).filter(
102
+ (component: { title: string; id: string }) =>
64
103
  component.title.toLowerCase().includes(query) ||
65
104
  component.id.toLowerCase().includes(query),
66
105
  );
@@ -68,45 +107,60 @@ const itemsForTreeView = computed(() => {
68
107
  result.push({
69
108
  id: type,
70
109
  title: `${type}s (${matches.length})`,
71
- children: sortAndFormatItems(matches, sortType.value),
110
+ children: sortAndFormatItems(matches, sortType.value) as unknown as CollectionTreeItem[],
72
111
  });
73
112
  }
74
113
  }
75
114
  return result;
76
115
  }
77
116
 
78
- const result = [];
117
+ const result: CollectionTreeItem[] = [];
79
118
  for (const category of filteredCategories.value) {
119
+ const categoryId = category.id as string;
80
120
  result.push({
81
121
  ...category,
82
- children: sortAndFormatItems(componentsCache.value?.[category.id], sortType.value),
122
+ id: categoryId,
123
+ children: sortAndFormatItems(
124
+ cache.value?.[categoryId],
125
+ sortType.value,
126
+ ) as unknown as CollectionTreeItem[],
83
127
  });
84
128
  }
85
129
  return result;
86
130
  });
87
131
 
88
- function showContextMenu(event, item) {
132
+ function showContextMenu(event: unknown, item: CollectionTreeItem): void {
89
133
  const actualItem = item.raw || item;
134
+ const typeId = actualItem.category || actualItem.id;
135
+ const typeItem = itemsForTreeView.value.find((type) => type.id === typeId);
136
+ const targetComponentIds = typeItem?.children?.map((child) => child.id);
90
137
  emit("show-menu", {
91
138
  event,
92
139
  itemId: actualItem.category ? actualItem.id : id,
93
140
  context_type: actualItem.category ? "model_component" : "model_component_type",
94
141
  modelId: id,
95
142
  modelComponentType: actualItem.category ? undefined : actualItem.id,
143
+ targetComponentIds,
96
144
  });
97
145
  }
98
146
 
99
- function extractIds(node) {
147
+ function extractIds(node: CollectionTreeItem): number[] {
100
148
  if (node.children) {
101
149
  return node.children.flatMap((child) => extractIds(child));
102
150
  }
103
151
  if (Number.isInteger(node.viewer_id)) {
104
- return [node.viewer_id];
152
+ return [node.viewer_id as number];
105
153
  }
106
154
  return [];
107
155
  }
108
156
 
109
- function handleHoverEnter({ item, immediate = false }) {
157
+ function handleHoverEnter({
158
+ item,
159
+ immediate = false,
160
+ }: {
161
+ item: CollectionTreeItem;
162
+ immediate?: boolean;
163
+ }): void {
110
164
  const actualItem = item.raw || item;
111
165
 
112
166
  if (!actualItem.category && (!actualItem.children || actualItem.children.length === 0)) {
@@ -114,17 +168,16 @@ function handleHoverEnter({ item, immediate = false }) {
114
168
  }
115
169
 
116
170
  const viewerIdsToHover = extractIds(actualItem);
117
-
118
171
  onHoverEnter(id, () => viewerIdsToHover, "model", immediate);
119
172
  }
120
173
 
121
- function handleHoverLeave() {
174
+ function handleHoverLeave(): void {
122
175
  onHoverLeave(id);
123
176
  }
124
177
 
125
- function expandAll() {
126
- const allIds = [];
127
- function traverse(itemsList) {
178
+ function expandAll(): void {
179
+ const allIds: string[] = [];
180
+ function traverse(itemsList: CollectionTreeItem[]): void {
128
181
  for (const item of itemsList) {
129
182
  if (item.children && item.children.length > 0) {
130
183
  allIds.push(item.id);
@@ -136,10 +189,14 @@ function expandAll() {
136
189
  opened.value = allIds;
137
190
  }
138
191
 
139
- function getLeafViewerIds(item) {
192
+ function getLeafViewerIds(item: CollectionTreeItem): number[] {
140
193
  const actualItem = item.raw || item;
141
194
  return extractIds(actualItem);
142
195
  }
196
+
197
+ function getLeafViewerIdsForFocus(item: CollectionTreeItem): string[] {
198
+ return getLeafViewerIds(item) as unknown as string[];
199
+ }
143
200
  </script>
144
201
 
145
202
  <template>
@@ -169,31 +226,36 @@ function getLeafViewerIds(item) {
169
226
  }"
170
227
  :scroll-top="currentView?.scrollTop || 0"
171
228
  class="transparent-treeview virtual-tree-height"
172
- @update:selected="onUpdateSelection"
173
- @click:item="onUpdateSelection([$event.id, ...visibleComponents])"
229
+ @update:selected="(val) => onUpdateSelection(val as string[])"
230
+ @click:item="onUpdateSelection([$event.id as string, ...visibleComponents])"
174
231
  @update:scroll-top="treeviewStore.setScrollTop(actualViewId, $event)"
175
- @hover:enter="handleHoverEnter"
232
+ @hover:enter="({ item }) => handleHoverEnter({ item: item as unknown as CollectionTreeItem })"
176
233
  @hover:leave="handleHoverLeave"
177
- @contextmenu="showContextMenu($event.event, $event.item)"
234
+ @contextmenu="showContextMenu($event.event, $event.item as unknown as CollectionTreeItem)"
178
235
  >
179
236
  <template #title="{ item, isLeaf }">
180
237
  <ObjectTreeItemLabel
181
- :item="item"
238
+ :item="item as unknown as DisplayItem"
182
239
  :is-leaf="isLeaf"
183
240
  show-tooltip
184
241
  class="text-body-1"
185
- @contextmenu="showContextMenu($event, item)"
242
+ @contextmenu="showContextMenu($event, item as unknown as CollectionTreeItem)"
186
243
  />
187
244
  </template>
188
245
 
189
246
  <template #append="{ item }">
190
247
  <v-btn
191
- v-if="getLeafViewerIds(item).length > 0"
248
+ v-if="getLeafViewerIds(item as unknown as CollectionTreeItem).length > 0"
192
249
  icon="mdi-target"
193
250
  size="medium"
194
251
  variant="text"
195
252
  v-tooltip="'Focus camera on object'"
196
- @click.stop="hybridViewerStore.focusCameraOnObject(id, getLeafViewerIds(item))"
253
+ @click.stop="
254
+ hybridViewerStore.focusCameraOnObject(
255
+ id,
256
+ getLeafViewerIdsForFocus(item as unknown as CollectionTreeItem),
257
+ )
258
+ "
197
259
  />
198
260
  </template>
199
261
  </CommonTreeView>
@@ -1,17 +1,25 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import AttributeRangeSelector from "./AttributeRangeSelector.vue";
3
3
  import ColorMapPicker from "./ColorMapPicker.vue";
4
4
 
5
- const emit = defineEmits(["reset"]);
5
+ interface Emits {
6
+ reset: [];
7
+ }
8
+
9
+ const emit = defineEmits<Emits>();
6
10
 
7
- const minimum = defineModel("minimum", { type: Number });
8
- const maximum = defineModel("maximum", { type: Number });
9
- const colorMap = defineModel("colorMap", { type: String });
11
+ const minimum = defineModel<number>("minimum");
12
+ const maximum = defineModel<number>("maximum");
13
+ const colorMap = defineModel<string>("colorMap");
10
14
  </script>
11
15
 
12
16
  <template>
13
17
  <div class="attribute-colorbar mt-3">
14
- <ColorMapPicker v-model:selected-preset-name="colorMap" :min="minimum" :max="maximum" />
18
+ <ColorMapPicker
19
+ v-model:selected-preset-name="colorMap"
20
+ :min="minimum ?? 0"
21
+ :max="maximum ?? 0"
22
+ />
15
23
  <AttributeRangeSelector
16
24
  v-model:minimum="minimum"
17
25
  v-model:maximum="maximum"
@@ -1,8 +1,12 @@
1
- <script setup>
2
- const emit = defineEmits(["reset"]);
1
+ <script setup lang="ts">
2
+ interface Emits {
3
+ reset: [];
4
+ }
3
5
 
4
- const minimum = defineModel("minimum", { type: Number });
5
- const maximum = defineModel("maximum", { type: Number });
6
+ const emit = defineEmits<Emits>();
7
+
8
+ const minimum = defineModel<number>("minimum");
9
+ const maximum = defineModel<number>("maximum");
6
10
  </script>
7
11
 
8
12
  <template>
@@ -1,5 +1,6 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { DEFAULT_NO_DATA_COLOR } from "@ogw_front/utils/default_styles/constants";
3
+ import type { JsonRpcSchema } from "@ogw_shared/utils/types.js";
3
4
  import ViewerOptionsAttributeColorBar from "@ogw_front/components/Viewer/Options/AttributeColorBar.vue";
4
5
  import ViewerOptionsColorPicker from "@ogw_front/components/Viewer/Options/ColorPicker.vue";
5
6
  import { getAttributeRange } from "@ogw_front/utils/attributes";
@@ -7,51 +8,74 @@ import { useBackStore } from "@ogw_front/stores/back";
7
8
 
8
9
  const backStore = useBackStore();
9
10
 
10
- const attributeName = defineModel("attributeName", { type: String });
11
- const attributeItem = defineModel("attributeItem", { type: Number });
12
- const attributeRange = defineModel("attributeRange", { type: Array });
13
- const attributeColorMap = defineModel("attributeColorMap", { type: String });
14
- const attributeNoDataColor = defineModel("attributeNoDataColor", { type: Object });
11
+ const attributeName = defineModel<string>("attributeName");
12
+ const attributeItem = defineModel<number>("attributeItem");
13
+ const attributeRange = defineModel<(number | undefined)[]>("attributeRange");
14
+ const attributeColorMap = defineModel<string>("attributeColorMap");
15
+ const attributeNoDataColor = defineModel<typeof DEFAULT_NO_DATA_COLOR>("attributeNoDataColor");
15
16
 
16
- const { id, componentIds, schema } = defineProps({
17
- id: { type: String, required: true },
18
- componentIds: { type: Array, default: undefined },
19
- schema: { type: Object, required: true },
20
- });
17
+ interface Props {
18
+ id: string;
19
+ componentIds?: string[];
20
+ schema: JsonRpcSchema;
21
+ }
22
+
23
+ const { id, componentIds = undefined, schema } = defineProps<Props>();
24
+
25
+ interface AttributeInfo {
26
+ attribute_name: string;
27
+ nb_items: number;
28
+ no_data?: boolean;
29
+ [key: string]: unknown;
30
+ }
21
31
 
22
- const attributes = ref([]);
32
+ const attributes = ref<AttributeInfo[]>([]);
23
33
 
24
- const currentAttribute = computed(() =>
34
+ const currentAttribute = computed<AttributeInfo | undefined>(() =>
25
35
  attributes.value.find((attr) => attr.attribute_name === attributeName.value),
26
36
  );
27
- const cssNoDataColor = computed(() => {
37
+ const cssNoDataColor = computed<string>(() => {
28
38
  const { red, green, blue, alpha } = attributeNoDataColor.value ?? DEFAULT_NO_DATA_COLOR;
29
39
  return `rgba(${red}, ${green}, ${blue}, ${alpha})`;
30
40
  });
31
- const rangeMin = computed({
32
- get: () => (attributeRange.value ? attributeRange.value[0] : undefined),
33
- set: (val) => {
34
- const currentMax = attributeRange.value ? attributeRange.value[1] : undefined;
41
+ const rangeMin = computed<number | undefined>({
42
+ get: () => {
43
+ const range = attributeRange.value as number[] | undefined;
44
+ return range ? range[0] : undefined;
45
+ },
46
+ set: (val: number | undefined) => {
47
+ if (val === undefined) {
48
+ return;
49
+ }
50
+ const range = attributeRange.value as number[] | undefined;
51
+ const currentMax = range ? range[1] : undefined;
35
52
  let newMin = val;
36
- if (currentMax !== undefined && val > currentMax) {
53
+ if (typeof currentMax === "number" && val > currentMax) {
37
54
  newMin = currentMax;
38
55
  }
39
56
  attributeRange.value = [newMin, currentMax];
40
57
  },
41
58
  });
42
- const rangeMax = computed({
43
- get: () => (attributeRange.value ? attributeRange.value[1] : undefined),
44
- set: (val) => {
45
- const currentMin = attributeRange.value ? attributeRange.value[0] : undefined;
59
+ const rangeMax = computed<number | undefined>({
60
+ get: () => {
61
+ const range = attributeRange.value as number[] | undefined;
62
+ return range ? range[1] : undefined;
63
+ },
64
+ set: (val: number | undefined) => {
65
+ if (val === undefined) {
66
+ return;
67
+ }
68
+ const range = attributeRange.value as number[] | undefined;
69
+ const currentMin = range ? range[0] : undefined;
46
70
  let newMax = val;
47
- if (currentMin !== undefined && val < currentMin) {
71
+ if (typeof currentMin === "number" && val < currentMin) {
48
72
  newMax = currentMin;
49
73
  }
50
74
  attributeRange.value = [currentMin, newMax];
51
75
  },
52
76
  });
53
77
 
54
- const componentItems = computed(() => {
78
+ const componentItems = computed<{ title: string; value: number }[]>(() => {
55
79
  if (!currentAttribute.value) {
56
80
  return [];
57
81
  }
@@ -61,25 +85,32 @@ const componentItems = computed(() => {
61
85
  }));
62
86
  });
63
87
 
64
- function resetRange() {
88
+ function resetRange(): void {
65
89
  if (currentAttribute.value) {
66
90
  const comp = attributeItem.value ?? 0;
67
- const { min, max } = getAttributeRange(currentAttribute.value, comp);
91
+ // GetAttributeRange's parameter type (AttributeRangeSource) isn't exported;
92
+ // AttributeInfo's index signature covers its optional min/max fields at
93
+ // Runtime (they come from the same backend attribute response shape).
94
+ const { min, max } = getAttributeRange(
95
+ currentAttribute.value as unknown as Parameters<typeof getAttributeRange>[0],
96
+ comp,
97
+ );
68
98
  attributeRange.value = [min, max];
69
99
  }
70
100
  }
71
101
 
72
- function hasSelectedComponent(components) {
102
+ function hasSelectedComponent(components: unknown): boolean {
73
103
  return Array.isArray(components) && components.length > 0;
74
104
  }
75
105
 
76
- function getAttributes() {
77
- const requiresComponent = schema.properties.component_ids !== undefined;
106
+ function getAttributes(): void {
107
+ const schemaProperties = schema.properties as Record<string, unknown> | undefined;
108
+ const requiresComponent = schemaProperties?.component_ids !== undefined;
78
109
  if (requiresComponent && !hasSelectedComponent(componentIds)) {
79
110
  return;
80
111
  }
81
112
 
82
- const params = { id };
113
+ const params: { id: string; component_ids?: unknown } = { id };
83
114
  if (requiresComponent) {
84
115
  params.component_ids = componentIds;
85
116
  }
@@ -87,8 +118,8 @@ function getAttributes() {
87
118
  backStore.request(
88
119
  { schema, params },
89
120
  {
90
- response_function: (response) => {
91
- attributes.value = response.attributes;
121
+ response_function: (response: unknown) => {
122
+ attributes.value = (response as { attributes: AttributeInfo[] }).attributes;
92
123
  },
93
124
  },
94
125
  );
@@ -1,38 +1,59 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import GlassCard from "@ogw_front/components/GlassCard.vue";
3
3
  import { drawCanvasForPreset } from "@ogw_front/utils/colormap";
4
4
 
5
5
  const CHUNK_SIZE = 5;
6
6
 
7
- const { presets, selectedPresetName } = defineProps({
8
- presets: { type: Array, required: true },
9
- selectedPresetName: { type: String, default: "" },
10
- });
7
+ interface ColorMapPreset {
8
+ Name: string;
9
+ Children?: ColorMapPreset[];
10
+ [key: string]: unknown;
11
+ }
12
+
13
+ interface Props {
14
+ presets: ColorMapPreset[];
15
+ selectedPresetName?: string;
16
+ }
17
+
18
+ const { presets, selectedPresetName = "" } = defineProps<Props>();
11
19
 
12
- const emit = defineEmits(["select"]);
20
+ interface Emits {
21
+ select: [preset: ColorMapPreset];
22
+ }
23
+
24
+ const emit = defineEmits<Emits>();
13
25
 
14
- const filterText = ref("");
15
- const canvasRefs = ref({});
16
- const loading = ref(true);
17
- const renderJobId = ref(0);
18
- const openedGroups = ref([]);
26
+ interface CanvasRefEntry {
27
+ element: HTMLCanvasElement;
28
+ presetName: string;
29
+ }
19
30
 
20
- function setCanvasRef(presetName, element, id) {
31
+ const filterText = ref<string>("");
32
+ const canvasRefs = ref<Map<string, CanvasRefEntry>>(new Map());
33
+ const loading = ref<boolean>(true);
34
+ const renderJobId = ref<number>(0);
35
+ const openedGroups = ref<string[]>([]);
36
+
37
+ function setCanvasRef(presetName: string, element: Element | null, id: string): void {
21
38
  if (element) {
22
- canvasRefs.value[id] = { element, presetName };
39
+ canvasRefs.value.set(id, {
40
+ element: element as HTMLCanvasElement,
41
+ presetName,
42
+ });
23
43
  } else {
24
- delete canvasRefs.value[id];
44
+ canvasRefs.value.delete(id);
25
45
  }
26
46
  }
27
47
 
28
- const filteredPresets = computed(() => {
48
+ const filteredPresets = computed<ColorMapPreset[]>(() => {
49
+ const allPresets = presets;
29
50
  if (!filterText.value) {
30
- return presets;
51
+ return allPresets;
31
52
  }
32
53
  const term = filterText.value.toLowerCase();
33
54
 
34
- const result = [];
35
- for (const item of presets) {
55
+ const result: ColorMapPreset[] = [];
56
+ for (const item of allPresets) {
36
57
  if (item.Children) {
37
58
  const children = item.Children.filter((child) => child.Name.toLowerCase().includes(term));
38
59
  if (children.length > 0) {
@@ -55,7 +76,7 @@ watch(filterText, (newFilterText) => {
55
76
  }
56
77
  });
57
78
 
58
- function processChunk(entries, index, jobId) {
79
+ function processChunk(entries: [string, CanvasRefEntry][], index: number, jobId: number): void {
59
80
  if (jobId !== renderJobId.value || index >= entries.length) {
60
81
  if (jobId === renderJobId.value) {
61
82
  loading.value = false;
@@ -65,20 +86,24 @@ function processChunk(entries, index, jobId) {
65
86
 
66
87
  const end = Math.min(index + CHUNK_SIZE, entries.length);
67
88
  for (let i = index; i < end; i += 1) {
68
- const [unusedKey, refValue] = entries[i];
89
+ const entry = entries[i];
90
+ if (!entry) {
91
+ continue;
92
+ }
93
+ const [, refValue] = entry;
69
94
  drawCanvasForPreset(refValue.presetName, refValue.element);
70
95
  }
71
96
  const ZERO = 0;
72
97
  setTimeout(() => processChunk(entries, end, jobId), ZERO);
73
98
  }
74
99
 
75
- function drawAllCanvases() {
100
+ function drawAllCanvases(): void {
76
101
  renderJobId.value += 1;
77
102
  const jobId = renderJobId.value;
78
103
  loading.value = true;
79
104
  nextTick(() => {
80
105
  const WAIT_MS = 50;
81
- setTimeout(() => processChunk(Object.entries(canvasRefs.value), 0, jobId), WAIT_MS);
106
+ setTimeout(() => processChunk([...canvasRefs.value.entries()], 0, jobId), WAIT_MS);
82
107
  });
83
108
  }
84
109
 
@@ -139,7 +164,10 @@ watch(filteredPresets, drawAllCanvases);
139
164
  <div class="d-flex flex-column py-1">
140
165
  <span class="text-caption text-grey-lighten-1 mb-1">{{ child.Name }}</span>
141
166
  <canvas
142
- :ref="(element) => setCanvasRef(child.Name, element, `g-${itemIdx}-${childIdx}`)"
167
+ :ref="
168
+ (element: Element | null) =>
169
+ setCanvasRef(child.Name, element, `g-${itemIdx}-${childIdx}`)
170
+ "
143
171
  width="200"
144
172
  height="18"
145
173
  class="w-100 rounded-xs border-thin"
@@ -159,7 +187,7 @@ watch(filteredPresets, drawAllCanvases);
159
187
  <div class="d-flex flex-column py-1">
160
188
  <span class="text-caption text-grey-lighten-1 mb-1">{{ item.Name }}</span>
161
189
  <canvas
162
- :ref="(element) => setCanvasRef(item.Name, element, `s-${itemIdx}`)"
190
+ :ref="(element: Element | null) => setCanvasRef(item.Name, element, `s-${itemIdx}`)"
163
191
  width="200"
164
192
  height="18"
165
193
  class="w-100 rounded-xs border-thin"
@@ -1,31 +1,35 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { drawCanvasForPreset, getPresetsWithCurrentAtTop } from "@ogw_front/utils/colormap";
3
3
  import ColorMapList from "./ColorMapList.vue";
4
4
  import GlassCard from "@ogw_front/components/GlassCard.vue";
5
5
 
6
- const { max, min } = defineProps({
7
- min: { type: Number, required: true },
8
- max: { type: Number, required: true },
9
- });
6
+ interface Props {
7
+ min: number;
8
+ max: number;
9
+ }
10
10
 
11
- const selectedPresetName = defineModel("selectedPresetName", { type: String, default: "batlow" });
11
+ const { max, min } = defineProps<Props>();
12
+
13
+ const selectedPresetName = defineModel<string>("selectedPresetName", {
14
+ default: "batlow",
15
+ });
12
16
 
13
- const menuOpen = ref(false);
14
- const lutCanvas = ref();
17
+ const menuOpen = ref<boolean>(false);
18
+ const lutCanvas = ref<HTMLCanvasElement | undefined>(undefined);
15
19
 
16
20
  const presets = computed(() => getPresetsWithCurrentAtTop(selectedPresetName.value));
17
21
 
18
- function drawLutCanvas() {
22
+ function drawLutCanvas(): void {
19
23
  drawCanvasForPreset(selectedPresetName.value, lutCanvas.value);
20
24
  }
21
25
 
22
- function onSelectPreset(preset) {
26
+ function onSelectPreset(preset: { Name: string }): void {
23
27
  selectedPresetName.value = preset.Name;
24
28
  menuOpen.value = false;
25
29
  }
26
30
 
27
31
  onMounted(() => nextTick(drawLutCanvas));
28
- watch([lutCanvas, selectedPresetName, () => min, () => max], drawLutCanvas);
32
+ watch([lutCanvas, selectedPresetName, (): number => min, (): number => max], drawLutCanvas);
29
33
  </script>
30
34
 
31
35
  <template>