@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,34 +1,72 @@
1
1
  import { isModelCornersVertexAttributeValid, useModelCornersVertexAttribute } from "./vertex";
2
+ import type { StyleValues } from "@ogw_internal/stores/data_style/types.js";
3
+ import { useDataStore } from "@ogw_front/stores/data";
2
4
  import { useModelCommonStyle } from "@ogw_internal/stores/data_style/model/common";
3
5
  import { useModelCornersCommonStyle } from "./common";
4
6
  import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
5
7
 
6
8
  const schema = viewer_schemas.opengeodeweb_viewer.model.corners.color;
7
9
 
8
- export function useModelCornersColor() {
10
+ interface ModelCornersColorApi {
11
+ setModelCornersColor: (
12
+ modelId: string,
13
+ corners_ids: string[],
14
+ color: unknown,
15
+ activeColoring?: string,
16
+ ) => Promise<unknown>;
17
+ modelCornerColoring: (id: string, corner_id?: string) => StyleValues;
18
+ modelCornerColor: (id: string, corner_id?: string) => unknown;
19
+ modelCornerActiveColoring: (id: string, corner_id?: string) => unknown;
20
+ setModelCornersActiveColoring: (
21
+ modelId: string,
22
+ corners_ids: string[],
23
+ activeColoring: string,
24
+ ) => Promise<unknown>;
25
+ }
26
+
27
+ export function useModelCornersColor(): ModelCornersColorApi {
28
+ const dataStore = useDataStore();
9
29
  const modelCommonStyle = useModelCommonStyle();
10
30
  const modelCornersCommonStyle = useModelCornersCommonStyle();
11
31
  const modelCornersVertexAttribute = useModelCornersVertexAttribute();
12
32
 
13
- function modelCornerColoring(id, corner_id) {
14
- return modelCornersCommonStyle.modelCornerStyle(id, corner_id).coloring;
33
+ function modelCornerColoring(id: string, corner_id?: string): StyleValues {
34
+ // oxlint-disable-next-line no-unsafe-type-assertion -- coloring is a StyleValues sub-object stored under a StyleValues index signature.
35
+ return modelCornersCommonStyle.modelCornerStyle(id, corner_id).coloring as StyleValues;
15
36
  }
16
37
 
17
- function modelCornerColor(id, corner_id) {
38
+ function modelCornerColor(id: string, corner_id?: string): unknown {
18
39
  return modelCornerColoring(id, corner_id).constant;
19
40
  }
20
41
 
21
- function setModelCornersColor(modelId, corners_ids, color, activeColoring = "constant") {
22
- return modelCommonStyle.setModelTypeColor(modelId, corners_ids, color, schema, activeColoring);
42
+ async function setModelCornersColor(
43
+ modelId: string,
44
+ corners_ids: string[],
45
+ color: unknown,
46
+ activeColoring = "constant",
47
+ ): Promise<unknown> {
48
+ const result = await modelCommonStyle.setModelTypeColor(
49
+ modelId,
50
+ corners_ids,
51
+ color,
52
+ schema,
53
+ activeColoring,
54
+ );
55
+ return result;
23
56
  }
24
57
 
25
- function modelCornerActiveColoring(id, corner_id) {
58
+ function modelCornerActiveColoring(id: string, corner_id?: string): unknown {
26
59
  return modelCornerColoring(id, corner_id).active;
27
60
  }
28
61
 
29
- async function setModelCornersActiveColoring(modelId, corners_ids, activeColoring) {
30
- if (corners_ids.length > 1) {
31
- modelCornersCommonStyle.mutateModelCornersTypeColoring(modelId, {
62
+ async function setModelCornersActiveColoring(
63
+ modelId: string,
64
+ corners_ids: string[],
65
+ activeColoring: string,
66
+ ): Promise<unknown> {
67
+ const totalCornerIds = await dataStore.getCornersGeodeIds(modelId);
68
+ if (corners_ids.length === totalCornerIds.length) {
69
+ await modelCornersCommonStyle.mutateModelCornersTypeColoring(modelId, {
32
70
  active: activeColoring,
33
71
  });
34
72
  }
@@ -66,6 +104,7 @@ export function useModelCornersColor() {
66
104
  );
67
105
  }
68
106
  }
107
+ return undefined;
69
108
  }
70
109
 
71
110
  return {
@@ -0,0 +1,71 @@
1
+ import type { StyleValues } from "@ogw_internal/stores/data_style/types.js";
2
+ import merge from "lodash/merge";
3
+ import { useDataStyleState } from "@ogw_internal/stores/data_style/state";
4
+ import { useModelCommonStyle } from "@ogw_internal/stores/data_style/model/common";
5
+
6
+ export function useModelCornersCommonStyle(): {
7
+ modelCornersStyle: (id: string) => StyleValues;
8
+ modelCornerStyle: (id: string, corner_id?: string) => StyleValues;
9
+ modelCornerColoring: (id: string, corner_id?: string) => StyleValues;
10
+ mutateModelCornersColoring: (
11
+ id: string,
12
+ corners_ids: string[],
13
+ values: StyleValues,
14
+ ) => Promise<void>;
15
+ mutateModelCornersTypeColoring: (id: string, values: StyleValues) => Promise<void>;
16
+ } {
17
+ const dataStyleState = useDataStyleState();
18
+ const modelCommonStyle = useModelCommonStyle();
19
+
20
+ function modelCornersStyle(id: string): StyleValues {
21
+ const { corners } = dataStyleState.getStyle(id);
22
+ if (corners === undefined) {
23
+ return {};
24
+ }
25
+ return corners;
26
+ }
27
+
28
+ function modelComponentTypeCornersStyle(id: string): StyleValues {
29
+ const defaultStyle = modelCornersStyle(id);
30
+ const typeStyle = dataStyleState.getModelComponentTypeStyle(id, "Corner");
31
+ return merge({}, defaultStyle, typeStyle);
32
+ }
33
+
34
+ function modelCornerStyle(id: string, corner_id?: string): StyleValues {
35
+ if (corner_id === undefined) {
36
+ return modelComponentTypeCornersStyle(id);
37
+ }
38
+ const typeStyle = modelComponentTypeCornersStyle(id);
39
+ const individualStyle = dataStyleState.getComponentStyle(id, corner_id);
40
+ return merge({}, typeStyle, individualStyle);
41
+ }
42
+
43
+ function modelCornerColoring(id: string, corner_id?: string): StyleValues {
44
+ // oxlint-disable-next-line no-unsafe-type-assertion -- coloring is a StyleValues sub-object stored under a StyleValues index signature.
45
+ return modelCornerStyle(id, corner_id).coloring as StyleValues;
46
+ }
47
+
48
+ async function mutateModelCornersColoring(
49
+ id: string,
50
+ corners_ids: string[],
51
+ values: StyleValues,
52
+ ): Promise<void> {
53
+ await modelCommonStyle.mutateComponentStyles(id, corners_ids, {
54
+ coloring: values,
55
+ });
56
+ }
57
+
58
+ async function mutateModelCornersTypeColoring(id: string, values: StyleValues): Promise<void> {
59
+ await modelCommonStyle.mutateModelComponentTypeStyle(id, "Corner", {
60
+ coloring: values,
61
+ });
62
+ }
63
+
64
+ return {
65
+ modelCornersStyle,
66
+ modelCornerStyle,
67
+ modelCornerColoring,
68
+ mutateModelCornersColoring,
69
+ mutateModelCornersTypeColoring,
70
+ };
71
+ }
@@ -4,68 +4,102 @@ import { useModelCornersColor } from "./color";
4
4
  import { useModelCornersCommonStyle } from "./common";
5
5
  import { useModelCornersVisibility } from "./visibility";
6
6
 
7
- async function setModelCornersDefaultStyle(_id) {
7
+ interface ColorGroup {
8
+ color: unknown;
9
+ corners_ids: string[];
10
+ }
11
+
12
+ interface AttributeGroup {
13
+ name: string | undefined;
14
+ item: number | undefined;
15
+ minimum: number | undefined;
16
+ maximum: number | undefined;
17
+ colorMap: string | undefined;
18
+ corners_ids: string[];
19
+ }
20
+
21
+ async function setModelCornersDefaultStyle(_id: string): Promise<void> {
8
22
  // Placeholder
9
23
  }
10
24
 
11
- export function useModelCornersStyle() {
25
+ type ModelCornersStyleApi = ReturnType<typeof useModelCornersCommonStyle> &
26
+ ReturnType<typeof useModelCornersVisibility> &
27
+ ReturnType<typeof useModelCornersColor> &
28
+ ReturnType<typeof useModelCornersVertexAttribute> & {
29
+ applyModelCornersStyle: (modelId: string) => Promise<void>;
30
+ setModelCornersDefaultStyle: (id: string) => Promise<void>;
31
+ };
32
+
33
+ export function useModelCornersStyle(): ModelCornersStyleApi {
12
34
  const dataStore = useDataStore();
13
35
  const modelCommonStyle = useModelCornersCommonStyle();
14
36
  const modelVisibilityStyle = useModelCornersVisibility();
15
37
  const modelColorStyle = useModelCornersColor();
16
38
  const modelCornersVertexAttribute = useModelCornersVertexAttribute();
17
39
 
18
- function applyModelCornersVisibilityStyle(modelId, corners_ids) {
19
- const visibilityGroups = {};
40
+ async function applyModelCornersVisibilityStyle(
41
+ modelId: string,
42
+ corners_ids: string[],
43
+ ): Promise<unknown[]> {
44
+ const visibilityGroups: Record<string, string[]> = {};
20
45
  for (const corner_id of corners_ids) {
21
46
  const style = modelCommonStyle.modelCornerStyle(modelId, corner_id);
22
47
  const visibility = String(style.visibility);
23
- if (!visibilityGroups[visibility]) {
24
- visibilityGroups[visibility] = [];
25
- }
48
+ visibilityGroups[visibility] ??= [];
26
49
  visibilityGroups[visibility].push(corner_id);
27
50
  }
28
- return Promise.all(
29
- Object.entries(visibilityGroups).map(([visibility, ids]) =>
30
- modelVisibilityStyle.setModelCornersVisibility(modelId, ids, visibility === "true"),
31
- ),
51
+ const results = await Promise.all(
52
+ Object.entries(visibilityGroups).map(async ([visibility, ids]) => {
53
+ const result = await modelVisibilityStyle.setModelCornersVisibility(
54
+ modelId,
55
+ ids,
56
+ visibility === "true",
57
+ );
58
+ return result;
59
+ }),
32
60
  );
61
+ return results;
33
62
  }
34
63
 
35
- function applyModelCornersColoringStyle(modelId, corners_ids) {
36
- const activeColoringGroups = {};
64
+ async function applyModelCornersColoringStyle(
65
+ modelId: string,
66
+ corners_ids: string[],
67
+ ): Promise<unknown[]> {
68
+ const activeColoringGroups: Record<string, string[]> = {};
37
69
  for (const corner_id of corners_ids) {
38
- const activeColoring = modelColorStyle.modelCornerActiveColoring(modelId, corner_id);
39
- if (!activeColoringGroups[activeColoring]) {
40
- activeColoringGroups[activeColoring] = [];
41
- }
70
+ const activeColoring = String(modelColorStyle.modelCornerActiveColoring(modelId, corner_id));
71
+ activeColoringGroups[activeColoring] ??= [];
42
72
  activeColoringGroups[activeColoring].push(corner_id);
43
73
  }
44
74
 
45
- const coloringPromises = [];
75
+ const coloringPromises: Promise<unknown>[] = [];
46
76
 
47
77
  for (const [type, type_corners_ids] of Object.entries(activeColoringGroups)) {
48
78
  if (type === "constant") {
49
- const colorGroups = {};
79
+ const colorGroups: Record<string, ColorGroup> = {};
50
80
  for (const corner_id of type_corners_ids) {
51
81
  const color = modelColorStyle.modelCornerColor(modelId, corner_id);
52
82
  const color_key = JSON.stringify(color);
53
- if (!colorGroups[color_key]) {
54
- colorGroups[color_key] = { color, corners_ids: [] };
55
- }
83
+ colorGroups[color_key] ??= { color, corners_ids: [] };
56
84
  colorGroups[color_key].corners_ids.push(corner_id);
57
85
  }
58
86
  coloringPromises.push(
59
- ...Object.values(colorGroups).map(({ color, corners_ids: ids }) =>
60
- modelColorStyle.setModelCornersColor(modelId, ids, color, "constant"),
61
- ),
87
+ ...Object.values(colorGroups).map(async ({ color, corners_ids: ids }) => {
88
+ const result = await modelColorStyle.setModelCornersColor(
89
+ modelId,
90
+ ids,
91
+ color,
92
+ "constant",
93
+ );
94
+ return result;
95
+ }),
62
96
  );
63
97
  } else if (type === "random") {
64
98
  coloringPromises.push(
65
99
  modelColorStyle.setModelCornersColor(modelId, type_corners_ids, undefined, "random"),
66
100
  );
67
101
  } else if (type === "vertex") {
68
- const vertexGroups = {};
102
+ const vertexGroups: Record<string, AttributeGroup> = {};
69
103
  for (const corner_id of type_corners_ids) {
70
104
  const name = modelCornersVertexAttribute.modelCornersVertexAttributeName(
71
105
  modelId,
@@ -88,43 +122,48 @@ export function useModelCornersStyle() {
88
122
  continue;
89
123
  }
90
124
  const key = `${name}_${item}_${colorMap}_${minimum}_${maximum}`;
91
- if (!vertexGroups[key]) {
92
- vertexGroups[key] = {
93
- name,
94
- item,
95
- minimum,
96
- maximum,
97
- colorMap,
98
- corners_ids: [],
99
- };
100
- }
125
+ vertexGroups[key] ??= {
126
+ name,
127
+ item,
128
+ minimum,
129
+ maximum,
130
+ colorMap,
131
+ corners_ids: [],
132
+ };
101
133
  vertexGroups[key].corners_ids.push(corner_id);
102
134
  }
103
135
  coloringPromises.push(
104
136
  ...Object.values(vertexGroups).map(
105
- ({ name, item, minimum, maximum, colorMap, corners_ids: ids }) =>
106
- modelCornersVertexAttribute.setModelCornersVertexAttribute(modelId, ids, {
107
- name,
108
- item,
109
- minimum,
110
- maximum,
111
- colorMap,
112
- }),
137
+ async ({ name, item, minimum, maximum, colorMap, corners_ids: ids }) => {
138
+ const result = await modelCornersVertexAttribute.setModelCornersVertexAttribute(
139
+ modelId,
140
+ ids,
141
+ {
142
+ name,
143
+ item,
144
+ minimum,
145
+ maximum,
146
+ colorMap,
147
+ },
148
+ );
149
+ return result;
150
+ },
113
151
  ),
114
152
  );
115
153
  }
116
154
  }
117
155
 
118
- return Promise.all(coloringPromises);
156
+ const results = await Promise.all(coloringPromises);
157
+ return results;
119
158
  }
120
159
 
121
- async function applyModelCornersStyle(modelId) {
160
+ async function applyModelCornersStyle(modelId: string): Promise<void> {
122
161
  const corners_ids = await dataStore.getCornersGeodeIds(modelId);
123
162
  if (corners_ids.length === 0) {
124
163
  return;
125
164
  }
126
165
 
127
- return Promise.all([
166
+ await Promise.all([
128
167
  applyModelCornersVisibilityStyle(modelId, corners_ids),
129
168
  applyModelCornersColoringStyle(modelId, corners_ids),
130
169
  ]);
@@ -0,0 +1,315 @@
1
+ import { DEFAULT_NO_DATA_COLOR } from "@ogw_front/utils/default_styles/constants";
2
+ // Third party imports
3
+ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
4
+
5
+ // Local imports
6
+ import { getRGBPointsFromPreset } from "@ogw_front/utils/colormap";
7
+ import { useDataStore } from "@ogw_front/stores/data";
8
+ import { useModelCornersCommonStyle } from "./common";
9
+ import { useViewerStore } from "@ogw_front/stores/viewer";
10
+
11
+ // Local constants
12
+ const attributeSchema = viewer_schemas.opengeodeweb_viewer.model.corners.attribute.vertex.attribute;
13
+
14
+ interface AttributeStoredConfig {
15
+ minimum: number | undefined;
16
+ maximum: number | undefined;
17
+ colorMap: string | undefined;
18
+ no_data_color: unknown;
19
+ }
20
+
21
+ interface AttributeState {
22
+ name?: string;
23
+ item?: number;
24
+ storedConfigs?: Record<string, { lastItem: number } & Record<string, AttributeStoredConfig>>;
25
+ }
26
+
27
+ interface AttributeInput {
28
+ name: string | undefined;
29
+ item: number | undefined;
30
+ minimum: number | undefined;
31
+ maximum: number | undefined;
32
+ colorMap: string | undefined;
33
+ no_data_color?: unknown;
34
+ }
35
+
36
+ type IdsFn<Value> = (modelId: string, cornerIds: string[], value: Value) => Promise<void>;
37
+
38
+ interface ModelCornersVertexAttributeApi {
39
+ modelCornersVertexAttributeName: (modelId: string, cornerId?: string) => string | undefined;
40
+ modelCornersVertexAttributeItem: (modelId: string, cornerId?: string) => number;
41
+ modelCornersVertexAttributeRange: (
42
+ modelId: string,
43
+ cornerId?: string,
44
+ ) => [number | undefined, number | undefined];
45
+ modelCornersVertexAttributeColorMap: (modelId: string, cornerId?: string) => string | undefined;
46
+ modelCornersVertexAttributeStoredConfig: (
47
+ modelId: string,
48
+ cornerId: string | undefined,
49
+ name: string | undefined,
50
+ item: number | undefined,
51
+ ) => AttributeStoredConfig;
52
+ setModelCornersVertexAttribute: (
53
+ modelId: string,
54
+ cornerIds: string[],
55
+ attribute: AttributeInput,
56
+ ) => Promise<unknown>;
57
+ setModelCornersVertexAttributeName: IdsFn<string>;
58
+ setModelCornersVertexAttributeItem: IdsFn<number>;
59
+ setModelCornersVertexAttributeRange: (
60
+ modelId: string,
61
+ cornerIds: string[],
62
+ minimum: number,
63
+ maximum: number,
64
+ ) => Promise<void>;
65
+ setModelCornersVertexAttributeColorMap: IdsFn<string | undefined>;
66
+ modelCornersVertexAttributeNoDataColor: (modelId: string, cornerId?: string) => unknown;
67
+ setModelCornersVertexAttributeNoDataColor: IdsFn<unknown>;
68
+ }
69
+
70
+ function isModelCornersVertexAttributeValid({
71
+ name,
72
+ item,
73
+ minimum,
74
+ maximum,
75
+ colorMap,
76
+ }: AttributeInput): boolean {
77
+ return (
78
+ name !== undefined &&
79
+ item !== undefined &&
80
+ minimum !== undefined &&
81
+ maximum !== undefined &&
82
+ colorMap !== undefined
83
+ );
84
+ }
85
+
86
+ // oxlint-disable-next-line max-lines-per-function
87
+ function useModelCornersVertexAttribute(): ModelCornersVertexAttributeApi {
88
+ const dataStore = useDataStore();
89
+ const modelCornersCommonStyle = useModelCornersCommonStyle();
90
+ const viewerStore = useViewerStore();
91
+ function modelCornersVertexAttribute(modelId: string, cornerId?: string): AttributeState {
92
+ // oxlint-disable-next-line no-unsafe-type-assertion -- vertex is a StyleValues sub-object stored under a StyleValues index signature.
93
+ return modelCornersCommonStyle.modelCornerColoring(modelId, cornerId).vertex as AttributeState;
94
+ }
95
+ function modelCornersVertexAttributeStoredConfig(
96
+ modelId: string,
97
+ cornerId: string | undefined,
98
+ name: string | undefined,
99
+ item: number | undefined,
100
+ ): AttributeStoredConfig {
101
+ const storedConfig =
102
+ name !== undefined && item !== undefined
103
+ ? modelCornersVertexAttribute(modelId, cornerId).storedConfigs?.[name]?.[item]
104
+ : undefined;
105
+ if (storedConfig !== undefined) {
106
+ return storedConfig;
107
+ }
108
+ return {
109
+ minimum: undefined,
110
+ maximum: undefined,
111
+ colorMap: undefined,
112
+ no_data_color: DEFAULT_NO_DATA_COLOR,
113
+ };
114
+ }
115
+ async function mutateModelCornersVertexStyle(
116
+ modelId: string,
117
+ cornerIds: string[],
118
+ values: Record<string, unknown>,
119
+ ): Promise<void> {
120
+ const tasks: Promise<void>[] = [
121
+ modelCornersCommonStyle.mutateModelCornersColoring(modelId, cornerIds, {
122
+ vertex: values,
123
+ }),
124
+ ];
125
+ const totalCornerIds = await dataStore.getCornersGeodeIds(modelId);
126
+ if (cornerIds.length === totalCornerIds.length) {
127
+ tasks.push(
128
+ modelCornersCommonStyle.mutateModelCornersTypeColoring(modelId, { vertex: values }),
129
+ );
130
+ }
131
+ await Promise.all(tasks);
132
+ }
133
+ async function setModelCornersVertexAttributeStoredConfig(
134
+ modelId: string,
135
+ cornerIds: string[],
136
+ name: string | undefined,
137
+ item: number | undefined,
138
+ config: Partial<AttributeStoredConfig>,
139
+ ): Promise<void> {
140
+ if (name === undefined || item === undefined) {
141
+ return;
142
+ }
143
+ await mutateModelCornersVertexStyle(modelId, cornerIds, {
144
+ storedConfigs: { [name]: { lastItem: item, [item]: config } },
145
+ });
146
+ }
147
+ function modelCornersVertexAttributeName(modelId: string, cornerId?: string): string | undefined {
148
+ return modelCornersVertexAttribute(modelId, cornerId).name;
149
+ }
150
+ function modelCornersVertexAttributeLastItem(
151
+ modelId: string,
152
+ cornerId: string | undefined,
153
+ name: string | undefined,
154
+ ): number {
155
+ if (name === undefined) {
156
+ return 0;
157
+ }
158
+ const { storedConfigs } = modelCornersVertexAttribute(modelId, cornerId);
159
+ return storedConfigs?.[name]?.lastItem ?? 0;
160
+ }
161
+ function modelCornersVertexAttributeItem(modelId: string, cornerId?: string): number {
162
+ const vertexAttribute = modelCornersVertexAttribute(modelId, cornerId);
163
+ return (
164
+ vertexAttribute.item ??
165
+ modelCornersVertexAttributeLastItem(modelId, cornerId, vertexAttribute.name)
166
+ );
167
+ }
168
+ function modelCornersVertexAttributeRange(
169
+ modelId: string,
170
+ cornerId?: string,
171
+ ): [number | undefined, number | undefined] {
172
+ const name = modelCornersVertexAttributeName(modelId, cornerId);
173
+ const item = modelCornersVertexAttributeItem(modelId, cornerId);
174
+ const { minimum, maximum } = modelCornersVertexAttributeStoredConfig(
175
+ modelId,
176
+ cornerId,
177
+ name,
178
+ item,
179
+ );
180
+ return [minimum, maximum];
181
+ }
182
+ function modelCornersVertexAttributeColorMap(
183
+ modelId: string,
184
+ cornerId?: string,
185
+ ): string | undefined {
186
+ const name = modelCornersVertexAttributeName(modelId, cornerId);
187
+ const item = modelCornersVertexAttributeItem(modelId, cornerId);
188
+ return modelCornersVertexAttributeStoredConfig(modelId, cornerId, name, item).colorMap;
189
+ }
190
+ async function setModelCornersVertexAttribute(
191
+ modelId: string,
192
+ cornerIds: string[],
193
+ {
194
+ name,
195
+ item,
196
+ minimum,
197
+ maximum,
198
+ colorMap,
199
+ no_data_color = DEFAULT_NO_DATA_COLOR,
200
+ }: AttributeInput,
201
+ ): Promise<unknown> {
202
+ await mutateModelCornersVertexStyle(modelId, cornerIds, { name, item });
203
+ await setModelCornersVertexAttributeStoredConfig(modelId, cornerIds, name, item, {
204
+ minimum,
205
+ maximum,
206
+ colorMap,
207
+ no_data_color,
208
+ });
209
+ const points = getRGBPointsFromPreset(colorMap ?? "");
210
+ const corner_viewer_ids = await dataStore.getMeshComponentsViewerIds(modelId, cornerIds);
211
+ const params = {
212
+ id: modelId,
213
+ block_ids: corner_viewer_ids,
214
+ name,
215
+ item,
216
+ points,
217
+ minimum,
218
+ maximum,
219
+ no_data_color,
220
+ };
221
+ const result = await viewerStore.request({ schema: attributeSchema, params });
222
+ return result;
223
+ }
224
+ async function applyVertexAttribute(modelId: string, cornerIds: string[]): Promise<void> {
225
+ const name = modelCornersVertexAttributeName(modelId, cornerIds[0]);
226
+ const item = modelCornersVertexAttributeItem(modelId, cornerIds[0]);
227
+ const storedConfig = modelCornersVertexAttributeStoredConfig(modelId, cornerIds[0], name, item);
228
+ const attribute: AttributeInput = {
229
+ name,
230
+ item,
231
+ minimum: storedConfig.minimum,
232
+ maximum: storedConfig.maximum,
233
+ colorMap: storedConfig.colorMap,
234
+ no_data_color: storedConfig.no_data_color,
235
+ };
236
+ if (isModelCornersVertexAttributeValid(attribute)) {
237
+ await setModelCornersVertexAttribute(modelId, cornerIds, attribute);
238
+ }
239
+ }
240
+ async function setModelCornersVertexAttributeName(
241
+ modelId: string,
242
+ cornerIds: string[],
243
+ name: string,
244
+ ): Promise<void> {
245
+ const item = modelCornersVertexAttributeLastItem(modelId, cornerIds[0], name);
246
+ await mutateModelCornersVertexStyle(modelId, cornerIds, { name, item });
247
+ await applyVertexAttribute(modelId, cornerIds);
248
+ }
249
+ async function setModelCornersVertexAttributeItem(
250
+ modelId: string,
251
+ cornerIds: string[],
252
+ item: number,
253
+ ): Promise<void> {
254
+ await mutateModelCornersVertexStyle(modelId, cornerIds, { item });
255
+ await applyVertexAttribute(modelId, cornerIds);
256
+ }
257
+ async function setModelCornersVertexAttributeRange(
258
+ modelId: string,
259
+ cornerIds: string[],
260
+ minimum: number,
261
+ maximum: number,
262
+ ): Promise<void> {
263
+ const name = modelCornersVertexAttributeName(modelId, cornerIds[0]);
264
+ const item = modelCornersVertexAttributeItem(modelId, cornerIds[0]);
265
+ await setModelCornersVertexAttributeStoredConfig(modelId, cornerIds, name, item, {
266
+ minimum,
267
+ maximum,
268
+ });
269
+ await applyVertexAttribute(modelId, cornerIds);
270
+ }
271
+ async function setModelCornersVertexAttributeColorMap(
272
+ modelId: string,
273
+ cornerIds: string[],
274
+ colorMap: string | undefined,
275
+ ): Promise<void> {
276
+ const name = modelCornersVertexAttributeName(modelId, cornerIds[0]);
277
+ const item = modelCornersVertexAttributeItem(modelId, cornerIds[0]);
278
+ await setModelCornersVertexAttributeStoredConfig(modelId, cornerIds, name, item, { colorMap });
279
+ await applyVertexAttribute(modelId, cornerIds);
280
+ }
281
+ function modelCornersVertexAttributeNoDataColor(modelId: string, cornerId?: string): unknown {
282
+ const name = modelCornersVertexAttributeName(modelId, cornerId);
283
+ const item = modelCornersVertexAttributeItem(modelId, cornerId);
284
+ return modelCornersVertexAttributeStoredConfig(modelId, cornerId, name, item).no_data_color;
285
+ }
286
+ async function setModelCornersVertexAttributeNoDataColor(
287
+ modelId: string,
288
+ cornerIds: string[],
289
+ no_data_color: unknown,
290
+ ): Promise<void> {
291
+ const name = modelCornersVertexAttributeName(modelId, cornerIds[0]);
292
+ const item = modelCornersVertexAttributeItem(modelId, cornerIds[0]);
293
+ const storedConfig = modelCornersVertexAttributeStoredConfig(modelId, cornerIds[0], name, item);
294
+ await setModelCornersVertexAttributeStoredConfig(modelId, cornerIds, name, item, {
295
+ ...storedConfig,
296
+ no_data_color,
297
+ });
298
+ await applyVertexAttribute(modelId, cornerIds);
299
+ }
300
+ return {
301
+ modelCornersVertexAttributeName,
302
+ modelCornersVertexAttributeItem,
303
+ modelCornersVertexAttributeRange,
304
+ modelCornersVertexAttributeColorMap,
305
+ modelCornersVertexAttributeStoredConfig,
306
+ setModelCornersVertexAttribute,
307
+ setModelCornersVertexAttributeName,
308
+ setModelCornersVertexAttributeItem,
309
+ setModelCornersVertexAttributeRange,
310
+ setModelCornersVertexAttributeColorMap,
311
+ modelCornersVertexAttributeNoDataColor,
312
+ setModelCornersVertexAttributeNoDataColor,
313
+ };
314
+ }
315
+ export { isModelCornersVertexAttributeValid, useModelCornersVertexAttribute };