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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/.build/opengeodeweb_front_schemas.js +175 -0
  2. package/.build/server/utils/app_config.js +57 -0
  3. package/.build/server/utils/cleanup.js +135 -0
  4. package/.build/server/utils/cloud.js +156 -0
  5. package/.build/server/utils/microservices.js +153 -0
  6. package/.build/server/utils/path.js +108 -0
  7. package/.build/server/utils/scripts.js +134 -0
  8. package/.build/server/utils/server.js +44 -0
  9. package/.build/server/utils/server_config.js +51 -0
  10. package/.build/server/utils/stream.js +6 -0
  11. package/.build/server/utils/ws_client.js +100 -0
  12. package/.build/shared/app_mode.js +8 -0
  13. package/.build/shared/scripts.js +49 -0
  14. package/.build/shared/utils/call_raw.js +31 -0
  15. package/.build/shared/utils/call_schema.js +28 -0
  16. package/.build/shared/utils/fetch_raw.js +52 -0
  17. package/.build/shared/utils/fetch_schema.js +32 -0
  18. package/.build/shared/utils/file.js +14 -0
  19. package/.build/shared/utils/parse_boolean.js +23 -0
  20. package/.build/shared/utils/response_handlers/load.js +50 -0
  21. package/.build/shared/utils/types.js +1 -0
  22. package/.build/shared/utils/validate_schema.js +17 -0
  23. package/README.md +8 -0
  24. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  25. package/app/components/ActionButton.vue +28 -12
  26. package/app/components/Basic/Slider.vue +2 -2
  27. package/app/components/Basic/Switch.vue +2 -2
  28. package/app/components/CameraManager/List.vue +11 -11
  29. package/app/components/CameraManager/Saver.vue +8 -4
  30. package/app/components/CameraManager.vue +24 -12
  31. package/app/components/CameraOrientation.vue +31 -17
  32. package/app/components/ClippingPlaneCard.vue +13 -12
  33. package/app/components/ClippingPlanes.vue +31 -21
  34. package/app/components/CrsSelector.vue +26 -18
  35. package/app/components/DeleteDialog.vue +18 -16
  36. package/app/components/DragAndDrop.vue +55 -37
  37. package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
  38. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  39. package/app/components/ExtensionSelector.vue +34 -18
  40. package/app/components/FeedBack/ErrorBanner.vue +4 -3
  41. package/app/components/FeedBack/Snackers.vue +6 -5
  42. package/app/components/FetchingData.vue +8 -12
  43. package/app/components/FileSelector.vue +27 -17
  44. package/app/components/FileUploader.vue +51 -30
  45. package/app/components/GlassCard.vue +17 -13
  46. package/app/components/HybridRenderingView.vue +25 -12
  47. package/app/components/HybridViewerTooltip.vue +28 -26
  48. package/app/components/InfraConnected.vue +1 -1
  49. package/app/components/Launcher.vue +12 -10
  50. package/app/components/Loading/EcoMessages.vue +24 -13
  51. package/app/components/Loading/Header.vue +6 -7
  52. package/app/components/Loading/Progress.vue +6 -7
  53. package/app/components/Loading.vue +10 -14
  54. package/app/components/MissingFilesSelector.vue +35 -19
  55. package/app/components/ObjectSelector.vue +37 -21
  56. package/app/components/PackagesVersions.vue +16 -8
  57. package/app/components/Recaptcha.vue +17 -23
  58. package/app/components/RemoteRenderingView.vue +21 -15
  59. package/app/components/Ruler.vue +11 -9
  60. package/app/components/Screenshot.vue +25 -19
  61. package/app/components/SearchBar.vue +12 -6
  62. package/app/components/ShrinkFilter.vue +19 -14
  63. package/app/components/Step.vue +32 -12
  64. package/app/components/Stepper.vue +19 -7
  65. package/app/components/ToolPanel.vue +29 -13
  66. package/app/components/ViewToolbar.vue +53 -44
  67. package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
  68. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  69. package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
  70. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
  71. package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
  72. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  73. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
  74. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
  75. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
  76. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
  77. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
  78. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
  79. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
  80. package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
  81. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
  82. package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
  83. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
  84. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
  85. package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
  86. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
  87. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  88. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  89. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  90. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  91. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  92. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  93. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  94. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
  95. package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
  96. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
  97. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  98. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
  99. package/app/components/Viewer/ObjectTree/Box.vue +32 -15
  100. package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
  101. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
  102. package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
  103. package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
  104. package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
  105. package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
  106. package/app/components/Viewer/Options/ColorMapList.vue +52 -24
  107. package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
  108. package/app/components/Viewer/Options/ColorPicker.vue +239 -50
  109. package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
  110. package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
  111. package/app/components/Viewer/Options/OptionsSection.vue +7 -5
  112. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  113. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  114. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  115. package/app/components/Viewer/Options/TextureItem.vue +29 -22
  116. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  117. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  118. package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
  119. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
  120. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  121. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  122. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  123. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
  124. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  125. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  126. package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
  127. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  128. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  129. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  130. package/app/components/Viewer/Ui.vue +19 -14
  131. package/app/components/Wrapper.vue +16 -10
  132. package/app/components/ZScaling.vue +18 -10
  133. package/app/components/csv-preview/CsvPreviewer.vue +72 -50
  134. package/app/components/csv-preview/CsvSettings.vue +30 -50
  135. package/app/components/csv-preview/CsvTable.vue +34 -14
  136. package/app/composables/{batch_style.js → batch_style.ts} +9 -7
  137. package/app/composables/clipping_planes_widget.ts +204 -0
  138. package/app/composables/clipping_planes_widget_entries.ts +189 -0
  139. package/app/composables/copy_to_clipboard.ts +7 -0
  140. package/app/composables/global_attribute_style.ts +303 -0
  141. package/app/composables/hover_highlight.ts +127 -0
  142. package/app/composables/{model_collections.js → model_collections.ts} +28 -9
  143. package/app/composables/{model_components.js → model_components.ts} +28 -9
  144. package/app/composables/{project_manager.js → project_manager.ts} +77 -20
  145. package/app/composables/responsive_middle_truncate.ts +48 -0
  146. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  147. package/app/composables/stepper_tree.ts +79 -0
  148. package/app/composables/tree_filter.ts +194 -0
  149. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
  150. package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
  151. package/app/composables/use_adaptive_styles.ts +186 -0
  152. package/app/composables/use_overlapping_picker.ts +263 -0
  153. package/app/composables/use_quick_colormap.ts +55 -0
  154. package/app/composables/virtual_tree.ts +271 -0
  155. package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
  156. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
  157. package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
  158. package/app/stores/app.ts +252 -0
  159. package/app/stores/app_helpers/extension.ts +179 -0
  160. package/app/stores/{back.js → back.ts} +54 -28
  161. package/app/stores/camera_manager.ts +80 -0
  162. package/app/stores/{cloud.js → cloud.ts} +18 -13
  163. package/app/stores/data.ts +392 -0
  164. package/app/stores/data_helpers/collections.ts +138 -0
  165. package/app/stores/data_helpers/mesh.ts +169 -0
  166. package/app/stores/data_style.ts +167 -0
  167. package/app/stores/{feedback.js → feedback.ts} +19 -8
  168. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
  169. package/app/stores/infra.ts +106 -0
  170. package/app/stores/{menu.js → menu.ts} +67 -36
  171. package/app/stores/treeview.ts +383 -0
  172. package/app/stores/{viewer.js → viewer.ts} +75 -42
  173. package/app/utils/attributes.ts +40 -0
  174. package/app/utils/clipping_planes.ts +222 -0
  175. package/app/utils/color_picker.js +54 -0
  176. package/app/utils/colormap.ts +102 -0
  177. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  178. package/app/utils/default_styles/{index.js → index.ts} +4 -3
  179. package/app/utils/default_styles/meshes.ts +264 -0
  180. package/app/utils/default_styles/{models.js → models.ts} +106 -52
  181. package/app/utils/{extension.js → extension.ts} +63 -19
  182. package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
  183. package/app/utils/{log.js → log.ts} +12 -2
  184. package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
  185. package/app/utils/status.ts +19 -0
  186. package/app/utils/{stores.js → stores.ts} +5 -5
  187. package/app/utils/{string.js → string.ts} +6 -6
  188. package/app/utils/{treeview.js → treeview.ts} +4 -1
  189. package/internal/database/{base_database.js → base_database.ts} +7 -3
  190. package/internal/database/database.ts +102 -0
  191. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  192. package/internal/database/tables/camera_positions.ts +6 -0
  193. package/internal/database/tables/{data.js → data.ts} +3 -1
  194. package/internal/database/tables/data_style.ts +6 -0
  195. package/internal/database/tables/model_component_datastyle.ts +6 -0
  196. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  197. package/internal/database/tables/model_components.ts +6 -0
  198. package/internal/database/tables/model_components_relation.ts +6 -0
  199. package/internal/database/tables/table_definition.ts +5 -0
  200. package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
  201. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
  202. package/internal/stores/data_style/mesh/cells/common.ts +50 -0
  203. package/internal/stores/data_style/mesh/cells/index.ts +161 -0
  204. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
  205. package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
  206. package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
  207. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
  208. package/internal/stores/data_style/mesh/edges/common.ts +41 -0
  209. package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
  210. package/internal/stores/data_style/mesh/edges/index.ts +155 -0
  211. package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
  212. package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
  213. package/internal/stores/data_style/mesh/edges/width.ts +42 -0
  214. package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
  215. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
  216. package/internal/stores/data_style/mesh/points/common.ts +51 -0
  217. package/internal/stores/data_style/mesh/points/index.ts +133 -0
  218. package/internal/stores/data_style/mesh/points/size.ts +43 -0
  219. package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
  220. package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
  221. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
  222. package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
  223. package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
  224. package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
  225. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
  226. package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
  227. package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
  228. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
  229. package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
  230. package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
  231. package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
  232. package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
  233. package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
  234. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
  235. package/internal/stores/data_style/model/blocks/common.ts +67 -0
  236. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
  237. package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
  238. package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
  239. package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
  240. package/internal/stores/data_style/model/color.ts +348 -0
  241. package/internal/stores/data_style/model/common.ts +262 -0
  242. package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
  243. package/internal/stores/data_style/model/corners/common.ts +71 -0
  244. package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
  245. package/internal/stores/data_style/model/corners/vertex.ts +315 -0
  246. package/internal/stores/data_style/model/corners/visibility.ts +39 -0
  247. package/internal/stores/data_style/model/edges/common.ts +29 -0
  248. package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
  249. package/internal/stores/data_style/model/edges/visibility.ts +55 -0
  250. package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
  251. package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
  252. package/internal/stores/data_style/model/lines/common.ts +63 -0
  253. package/internal/stores/data_style/model/lines/edge.ts +343 -0
  254. package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
  255. package/internal/stores/data_style/model/lines/vertex.ts +344 -0
  256. package/internal/stores/data_style/model/lines/visibility.ts +37 -0
  257. package/internal/stores/data_style/model/points/common.ts +25 -0
  258. package/internal/stores/data_style/model/points/index.ts +35 -0
  259. package/internal/stores/data_style/model/points/size.ts +44 -0
  260. package/internal/stores/data_style/model/points/visibility.ts +46 -0
  261. package/internal/stores/data_style/model/selection.ts +138 -0
  262. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
  263. package/internal/stores/data_style/model/surfaces/common.ts +69 -0
  264. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
  265. package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
  266. package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
  267. package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
  268. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
  269. package/internal/stores/data_style/state.ts +281 -0
  270. package/internal/stores/data_style/types.ts +30 -0
  271. package/internal/stores/hybrid_viewer/brightness.ts +124 -0
  272. package/internal/stores/hybrid_viewer/camera.ts +326 -0
  273. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
  274. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  275. package/internal/stores/hybrid_viewer/core.ts +64 -0
  276. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
  277. package/internal/stores/hybrid_viewer/highlight.ts +183 -0
  278. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
  279. package/internal/stores/hybrid_viewer/scene.ts +125 -0
  280. package/internal/stores/hybrid_viewer/viewport.ts +177 -0
  281. package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
  282. package/internal/utils/api_fetch.ts +133 -0
  283. package/internal/utils/upload_file.ts +115 -0
  284. package/internal/utils/viewer_call.ts +99 -0
  285. package/internal/utils/ws_client.ts +54 -0
  286. package/nuxt.config.ts +168 -0
  287. package/opengeodeweb_front_schemas.json +2 -2
  288. package/package.json +49 -13
  289. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
  290. package/server/api/local/app/project_folder_path.post.ts +33 -0
  291. package/server/api/local/app/run_back.post.ts +39 -0
  292. package/server/api/local/app/run_viewer.post.ts +39 -0
  293. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
  294. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
  295. package/server/api/local/extensions/upload.put.ts +71 -0
  296. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
  297. package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
  298. package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
  299. package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
  300. package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
  301. package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
  302. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
  303. package/server/api/serverless/run_cloud.post.ts +92 -0
  304. package/server/utils/{app_config.js → app_config.ts} +40 -18
  305. package/server/utils/{cleanup.js → cleanup.ts} +76 -29
  306. package/server/utils/{cloud.js → cloud.ts} +33 -17
  307. package/server/utils/{extension.js → extension.ts} +31 -4
  308. package/server/utils/{microservices.js → microservices.ts} +68 -27
  309. package/server/utils/{path.js → path.ts} +36 -17
  310. package/server/utils/{scripts.js → scripts.ts} +49 -33
  311. package/server/utils/{server.js → server.ts} +13 -6
  312. package/server/utils/server_config.ts +74 -0
  313. package/server/utils/stream.ts +6 -0
  314. package/server/utils/ws_client.ts +165 -0
  315. package/shared/{scripts.js → scripts.ts} +15 -10
  316. package/shared/utils/call_raw.ts +73 -0
  317. package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
  318. package/shared/utils/fetch_raw.ts +125 -0
  319. package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
  320. package/shared/utils/file.ts +22 -0
  321. package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
  322. package/shared/utils/response_handlers/load.ts +109 -0
  323. package/shared/utils/types.ts +27 -0
  324. package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
  325. package/.github/workflows/config.json +0 -5
  326. package/.github/workflows/deploy.yml +0 -15
  327. package/.github/workflows/manual_release.yml +0 -11
  328. package/.github/workflows/merge_request.yml +0 -9
  329. package/.github/workflows/pr_update.yml +0 -11
  330. package/.github/workflows/prepare_deploy.yml +0 -9
  331. package/.github/workflows/schedule.yml +0 -18
  332. package/.github/workflows/test.yml +0 -14
  333. package/.github/workflows/test_pr.yml +0 -12
  334. package/.oxlintrc.json +0 -150
  335. package/.releaserc +0 -11
  336. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
  337. package/app/composables/clipping_planes_widget.js +0 -249
  338. package/app/composables/global_attribute_style.js +0 -181
  339. package/app/composables/hover_highlight.js +0 -91
  340. package/app/composables/responsive_middle_truncate.js +0 -34
  341. package/app/composables/stepper_tree.js +0 -56
  342. package/app/composables/tree_filter.js +0 -138
  343. package/app/composables/use_adaptive_styles.js +0 -120
  344. package/app/composables/use_overlapping_picker.js +0 -169
  345. package/app/composables/use_quick_colormap.js +0 -32
  346. package/app/composables/virtual_tree.js +0 -191
  347. package/app/stores/app.js +0 -326
  348. package/app/stores/camera_manager.js +0 -57
  349. package/app/stores/data.js +0 -278
  350. package/app/stores/data_helpers/collections.js +0 -96
  351. package/app/stores/data_helpers/mesh.js +0 -122
  352. package/app/stores/data_style.js +0 -116
  353. package/app/stores/infra.js +0 -95
  354. package/app/stores/treeview.js +0 -290
  355. package/app/utils/attributes.js +0 -23
  356. package/app/utils/clipping_planes.js +0 -110
  357. package/app/utils/colormap.js +0 -64
  358. package/app/utils/default_styles/meshes.js +0 -191
  359. package/app/utils/status.js +0 -10
  360. package/commitlint.config.js +0 -20
  361. package/internal/database/database.js +0 -80
  362. package/internal/database/tables/camera_positions.js +0 -4
  363. package/internal/database/tables/data_style.js +0 -4
  364. package/internal/database/tables/model_component_datastyle.js +0 -4
  365. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  366. package/internal/database/tables/model_components.js +0 -4
  367. package/internal/database/tables/model_components_relation.js +0 -4
  368. package/internal/stores/data_style/mesh/cells/cell.js +0 -196
  369. package/internal/stores/data_style/mesh/cells/common.js +0 -39
  370. package/internal/stores/data_style/mesh/cells/index.js +0 -81
  371. package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
  372. package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
  373. package/internal/stores/data_style/mesh/edges/common.js +0 -32
  374. package/internal/stores/data_style/mesh/edges/edge.js +0 -195
  375. package/internal/stores/data_style/mesh/edges/index.js +0 -81
  376. package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
  377. package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
  378. package/internal/stores/data_style/mesh/edges/width.js +0 -34
  379. package/internal/stores/data_style/mesh/points/common.js +0 -37
  380. package/internal/stores/data_style/mesh/points/index.js +0 -82
  381. package/internal/stores/data_style/mesh/points/size.js +0 -35
  382. package/internal/stores/data_style/mesh/points/vertex.js +0 -193
  383. package/internal/stores/data_style/mesh/points/visibility.js +0 -37
  384. package/internal/stores/data_style/mesh/polygons/common.js +0 -32
  385. package/internal/stores/data_style/mesh/polygons/index.js +0 -107
  386. package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
  387. package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
  388. package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
  389. package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
  390. package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
  391. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
  392. package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
  393. package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
  394. package/internal/stores/data_style/model/blocks/common.js +0 -51
  395. package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
  396. package/internal/stores/data_style/model/blocks/vertex.js +0 -204
  397. package/internal/stores/data_style/model/blocks/visibility.js +0 -20
  398. package/internal/stores/data_style/model/color.js +0 -218
  399. package/internal/stores/data_style/model/common.js +0 -141
  400. package/internal/stores/data_style/model/corners/common.js +0 -51
  401. package/internal/stores/data_style/model/corners/vertex.js +0 -204
  402. package/internal/stores/data_style/model/corners/visibility.js +0 -20
  403. package/internal/stores/data_style/model/edges/common.js +0 -20
  404. package/internal/stores/data_style/model/edges/visibility.js +0 -38
  405. package/internal/stores/data_style/model/lines/common.js +0 -51
  406. package/internal/stores/data_style/model/lines/edge.js +0 -203
  407. package/internal/stores/data_style/model/lines/vertex.js +0 -204
  408. package/internal/stores/data_style/model/lines/visibility.js +0 -20
  409. package/internal/stores/data_style/model/points/common.js +0 -20
  410. package/internal/stores/data_style/model/points/index.js +0 -25
  411. package/internal/stores/data_style/model/points/size.js +0 -36
  412. package/internal/stores/data_style/model/points/visibility.js +0 -36
  413. package/internal/stores/data_style/model/selection.js +0 -89
  414. package/internal/stores/data_style/model/surfaces/common.js +0 -51
  415. package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
  416. package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
  417. package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
  418. package/internal/stores/data_style/state.js +0 -197
  419. package/internal/stores/hybrid_viewer/brightness.js +0 -82
  420. package/internal/stores/hybrid_viewer/camera.js +0 -274
  421. package/internal/stores/hybrid_viewer/highlight.js +0 -170
  422. package/internal/stores/hybrid_viewer/scene.js +0 -136
  423. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  424. package/internal/utils/api_fetch.js +0 -52
  425. package/internal/utils/upload_file.js +0 -57
  426. package/internal/utils/viewer_call.js +0 -49
  427. package/internal/utils/ws_client.js +0 -29
  428. package/nuxt.config.js +0 -106
  429. package/scripts/generate_geode_objects.js +0 -24
  430. package/server/api/local/app/project_folder_path.post.js +0 -29
  431. package/server/api/local/app/run_back.post.js +0 -33
  432. package/server/api/local/app/run_viewer.post.js +0 -33
  433. package/server/api/local/extensions/upload.put.js +0 -72
  434. package/server/api/microservice/app/set_app_base_url.post.js +0 -25
  435. package/server/api/microservice/app/set_back_base_url.post.js +0 -22
  436. package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
  437. package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
  438. package/server/api/serverless/run_cloud.post.js +0 -44
  439. package/server/utils/server_config.js +0 -58
  440. package/server/utils/ws_client.js +0 -112
  441. package/shared/utils/call_raw.js +0 -46
  442. package/shared/utils/fetch_raw.js +0 -61
  443. package/shared/utils/file.js +0 -16
  444. package/shared/utils/response_handlers/load.js +0 -74
  445. package/tests/integration/data/uploads/test.og_brep +0 -0
  446. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  447. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  448. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  449. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  450. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  451. package/tests/integration/data/uploads/test.vtu +0 -22
  452. package/tests/integration/setup.js +0 -92
  453. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  454. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  455. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  456. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  457. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  458. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  459. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  460. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  461. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  462. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  463. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  464. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  465. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  466. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  467. package/tests/setup_indexeddb.js +0 -4
  468. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  469. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  470. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  471. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  472. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  473. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  474. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  475. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  476. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  477. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  478. package/tests/unit/components/Step.nuxt.test.js +0 -51
  479. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  480. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  481. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  482. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  483. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  484. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  485. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  486. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  487. package/tests/unit/stores/app.nuxt.test.js +0 -189
  488. package/tests/unit/stores/back.nuxt.test.js +0 -147
  489. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  490. package/tests/unit/stores/data.nuxt.test.js +0 -162
  491. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  492. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  493. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  494. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  495. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  496. package/tests/utils.js +0 -20
  497. package/tests/vitest.config.js +0 -67
  498. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
  499. /package/shared/{app_mode.js → app_mode.ts} +0 -0
@@ -0,0 +1,37 @@
1
+ import { useModelCommonStyle } from "@ogw_internal/stores/data_style/model/common";
2
+ import { useModelSurfacesCommonStyle } from "./common";
3
+ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
4
+
5
+ const schema = viewer_schemas.opengeodeweb_viewer.model.surfaces.visibility;
6
+
7
+ export function useModelSurfacesVisibility(): {
8
+ setModelSurfacesVisibility: (
9
+ modelId: string,
10
+ surfaces_ids: readonly string[],
11
+ visibility: boolean | undefined,
12
+ ) => Promise<unknown>;
13
+ modelSurfaceVisibility: (id: string, surface_id?: string) => unknown;
14
+ } {
15
+ const modelCommonStyle = useModelCommonStyle();
16
+ const modelSurfacesCommonStyle = useModelSurfacesCommonStyle();
17
+
18
+ function modelSurfaceVisibility(id: string, surface_id?: string): unknown {
19
+ return modelSurfacesCommonStyle.modelSurfaceStyle(id, surface_id).visibility;
20
+ }
21
+
22
+ async function setModelSurfacesVisibility(
23
+ modelId: string,
24
+ surfaces_ids: readonly string[],
25
+ visibility: boolean | undefined,
26
+ ): Promise<unknown> {
27
+ const result = await modelCommonStyle.setModelTypeVisibility(
28
+ modelId,
29
+ [...surfaces_ids],
30
+ visibility,
31
+ schema,
32
+ );
33
+ return result;
34
+ }
35
+
36
+ return { setModelSurfacesVisibility, modelSurfaceVisibility };
37
+ }
@@ -7,13 +7,35 @@ import { useModelSelection } from "./selection";
7
7
  import { useViewerStore } from "@ogw_front/stores/viewer";
8
8
  import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
9
9
 
10
+ // The four per-component-type style composables (Surface/Line/Block/Corner) each expose a different, large set of methods (color, visibility, per-attribute-kind getters/setters...). This module only cares about looking a handful of them up dynamically by name, so a precise structural type for componentStyleFunctions isn't worth modelling here; `any` keeps the dynamic dispatch table honest about that.
11
+ // oxlint-disable-next-line no-explicit-any
12
+ type ComponentStyleFunctions = Record<"Surface" | "Line" | "Block" | "Corner", any>;
13
+
14
+ interface ModelComponent {
15
+ geode_id: string;
16
+ type: string;
17
+ }
18
+
19
+ async function callComponentStyleFunction(
20
+ // oxlint-disable-next-line no-explicit-any
21
+ target: any,
22
+ method: string,
23
+ ...args: unknown[]
24
+ ): Promise<unknown> {
25
+ // oxlint-disable-next-line no-unsafe-call, no-unsafe-member-access, no-unsafe-argument, no-unsafe-assignment -- ComponentStyleFunctions is deliberately dynamically typed; see comment above.
26
+ const result = await target[method](...args);
27
+ return result;
28
+ }
29
+
10
30
  const model_schemas = viewer_schemas.opengeodeweb_viewer.model;
11
- async function getModelComponentsMap(modelId) {
31
+ async function getModelComponentsMap(
32
+ modelId: string,
33
+ ): Promise<{ allComponents: ModelComponent[]; componentsMap: Record<string, ModelComponent> }> {
12
34
  const dataStore = useDataStore();
13
35
  const results = await Promise.all(
14
36
  MESH_COMPONENT_TYPES.map(async (type) => {
15
37
  const geodeIds = await dataStore.getMeshComponentGeodeIds(modelId, type);
16
- return geodeIds.map((geode_id) => ({
38
+ return geodeIds.map((geode_id): ModelComponent => ({
17
39
  geode_id,
18
40
  type,
19
41
  }));
@@ -23,19 +45,19 @@ async function getModelComponentsMap(modelId) {
23
45
  return {
24
46
  allComponents,
25
47
  componentsMap: Object.fromEntries(
26
- allComponents.map((component) => [component.geode_id, component]),
48
+ allComponents.map((component): [string, ModelComponent] => [component.geode_id, component]),
27
49
  ),
28
50
  };
29
51
  }
30
52
  async function dispatchToComponentTypes(
31
- modelId,
32
- componentIds,
33
- action,
34
- { componentStyleFunctions },
35
- ...args
36
- ) {
53
+ modelId: string,
54
+ componentIds: string[],
55
+ action: string,
56
+ { componentStyleFunctions }: { componentStyleFunctions: ComponentStyleFunctions },
57
+ ...args: unknown[]
58
+ ): Promise<unknown[]> {
37
59
  const { componentsMap } = await getModelComponentsMap(modelId);
38
- const idsByComponent = {
60
+ const idsByComponent: { Block: string[]; Surface: string[]; Line: string[]; Corner: string[] } = {
39
61
  Block: [],
40
62
  Surface: [],
41
63
  Line: [],
@@ -43,15 +65,17 @@ async function dispatchToComponentTypes(
43
65
  };
44
66
  for (const id of componentIds) {
45
67
  const type = componentsMap[id]?.type;
46
- if (type && idsByComponent[type]) {
47
- idsByComponent[type].push(id);
68
+ if (type !== undefined && type in idsByComponent) {
69
+ (idsByComponent as Record<string, string[]>)[type]?.push(id);
48
70
  }
49
71
  }
50
- const promises = [];
72
+ const promises: Promise<unknown>[] = [];
51
73
  if (action === "Visibility") {
52
74
  if (idsByComponent.Block.length > 0) {
53
75
  promises.push(
54
- componentStyleFunctions.Block.setModelBlocksVisibility(
76
+ callComponentStyleFunction(
77
+ componentStyleFunctions.Block,
78
+ "setModelBlocksVisibility",
55
79
  modelId,
56
80
  idsByComponent.Block,
57
81
  ...args,
@@ -60,7 +84,9 @@ async function dispatchToComponentTypes(
60
84
  }
61
85
  if (idsByComponent.Surface.length > 0) {
62
86
  promises.push(
63
- componentStyleFunctions.Surface.setModelSurfacesVisibility(
87
+ callComponentStyleFunction(
88
+ componentStyleFunctions.Surface,
89
+ "setModelSurfacesVisibility",
64
90
  modelId,
65
91
  idsByComponent.Surface,
66
92
  ...args,
@@ -69,12 +95,20 @@ async function dispatchToComponentTypes(
69
95
  }
70
96
  if (idsByComponent.Line.length > 0) {
71
97
  promises.push(
72
- componentStyleFunctions.Line.setModelLinesVisibility(modelId, idsByComponent.Line, ...args),
98
+ callComponentStyleFunction(
99
+ componentStyleFunctions.Line,
100
+ "setModelLinesVisibility",
101
+ modelId,
102
+ idsByComponent.Line,
103
+ ...args,
104
+ ),
73
105
  );
74
106
  }
75
107
  if (idsByComponent.Corner.length > 0) {
76
108
  promises.push(
77
- componentStyleFunctions.Corner.setModelCornersVisibility(
109
+ callComponentStyleFunction(
110
+ componentStyleFunctions.Corner,
111
+ "setModelCornersVisibility",
78
112
  modelId,
79
113
  idsByComponent.Corner,
80
114
  ...args,
@@ -84,12 +118,20 @@ async function dispatchToComponentTypes(
84
118
  } else if (action === "Color") {
85
119
  if (idsByComponent.Block.length > 0) {
86
120
  promises.push(
87
- componentStyleFunctions.Block.setModelBlocksColor(modelId, idsByComponent.Block, ...args),
121
+ callComponentStyleFunction(
122
+ componentStyleFunctions.Block,
123
+ "setModelBlocksColor",
124
+ modelId,
125
+ idsByComponent.Block,
126
+ ...args,
127
+ ),
88
128
  );
89
129
  }
90
130
  if (idsByComponent.Surface.length > 0) {
91
131
  promises.push(
92
- componentStyleFunctions.Surface.setModelSurfacesColor(
132
+ callComponentStyleFunction(
133
+ componentStyleFunctions.Surface,
134
+ "setModelSurfacesColor",
93
135
  modelId,
94
136
  idsByComponent.Surface,
95
137
  ...args,
@@ -98,12 +140,20 @@ async function dispatchToComponentTypes(
98
140
  }
99
141
  if (idsByComponent.Line.length > 0) {
100
142
  promises.push(
101
- componentStyleFunctions.Line.setModelLinesColor(modelId, idsByComponent.Line, ...args),
143
+ callComponentStyleFunction(
144
+ componentStyleFunctions.Line,
145
+ "setModelLinesColor",
146
+ modelId,
147
+ idsByComponent.Line,
148
+ ...args,
149
+ ),
102
150
  );
103
151
  }
104
152
  if (idsByComponent.Corner.length > 0) {
105
153
  promises.push(
106
- componentStyleFunctions.Corner.setModelCornersColor(
154
+ callComponentStyleFunction(
155
+ componentStyleFunctions.Corner,
156
+ "setModelCornersColor",
107
157
  modelId,
108
158
  idsByComponent.Corner,
109
159
  ...args,
@@ -113,29 +163,49 @@ async function dispatchToComponentTypes(
113
163
  }
114
164
  return Promise.all(promises);
115
165
  }
116
- function useModelVisibilityStyle(componentStyleFunctions) {
166
+ interface UseModelVisibilityStyleReturn {
167
+ modelVisibility: (modelId: string) => boolean | undefined;
168
+ setModelVisibility: (modelId: string, visibility: boolean) => Promise<unknown>;
169
+ setModelComponentsVisibility: (
170
+ modelId: string,
171
+ componentIds: string[],
172
+ visibility: boolean,
173
+ ) => Promise<unknown[]>;
174
+ setModelComponentTypeVisibility: (
175
+ modelId: string,
176
+ componentType: string,
177
+ visibility: boolean,
178
+ ) => Promise<void>;
179
+ modelComponentVisibility: (modelId: string, componentId: string) => boolean;
180
+ modelComponentTypeVisibility: (modelId: string, componentType: string) => boolean;
181
+ }
182
+
183
+ // oxlint-disable-next-line max-lines-per-function
184
+ function useModelVisibilityStyle(
185
+ componentStyleFunctions: ComponentStyleFunctions,
186
+ ): UseModelVisibilityStyleReturn {
117
187
  const dataStore = useDataStore();
118
188
  const dataStyleState = useDataStyleState();
119
189
  const hybridViewerStore = useHybridViewerStore();
120
190
  const viewerStore = useViewerStore();
121
191
  const modelCommonStyle = useModelCommonStyle();
122
- function modelVisibility(modelId) {
192
+ function modelVisibility(modelId: string): boolean | undefined {
123
193
  return dataStyleState.getStyle(modelId).visibility;
124
194
  }
125
- function setModelVisibility(modelId, visibility) {
195
+ async function setModelVisibility(modelId: string, visibility: boolean): Promise<unknown> {
126
196
  const schema = model_schemas.visibility;
127
197
  const params = {
128
198
  id: modelId,
129
199
  visibility,
130
200
  };
131
- return viewerStore.request(
201
+ const result = await viewerStore.request(
132
202
  {
133
203
  schema,
134
204
  params,
135
205
  },
136
206
  {
137
207
  response_function: async () => {
138
- await hybridViewerStore.setVisibility(modelId, visibility);
208
+ hybridViewerStore.setVisibility(modelId, visibility);
139
209
  await dataStyleState.mutateStyle(modelId, {
140
210
  visibility,
141
211
  });
@@ -146,8 +216,13 @@ function useModelVisibilityStyle(componentStyleFunctions) {
146
216
  },
147
217
  },
148
218
  );
219
+ return result;
149
220
  }
150
- async function setModelComponentTypeVisibility(modelId, componentType, visibility) {
221
+ async function setModelComponentTypeVisibility(
222
+ modelId: string,
223
+ componentType: string,
224
+ visibility: boolean,
225
+ ): Promise<void> {
151
226
  await modelCommonStyle.mutateModelComponentTypeStyle(modelId, componentType, {
152
227
  visibility,
153
228
  });
@@ -165,10 +240,14 @@ function useModelVisibilityStyle(componentStyleFunctions) {
165
240
  visibility,
166
241
  );
167
242
  }
168
- async function setModelComponentsVisibility(modelId, componentIds, visibility) {
243
+ async function setModelComponentsVisibility(
244
+ modelId: string,
245
+ componentIds: string[],
246
+ visibility: boolean,
247
+ ): Promise<unknown[]> {
169
248
  const typeIds = componentIds.filter((id) => MESH_COMPONENT_TYPES.includes(id));
170
249
  const individualIds = componentIds.filter((id) => !MESH_COMPONENT_TYPES.includes(id));
171
- const promises = [];
250
+ const promises: Promise<unknown>[] = [];
172
251
  for (const typeId of typeIds) {
173
252
  promises.push(setModelComponentTypeVisibility(modelId, typeId, visibility));
174
253
  }
@@ -185,13 +264,14 @@ function useModelVisibilityStyle(componentStyleFunctions) {
185
264
  ),
186
265
  );
187
266
  }
188
- return await Promise.all(promises);
267
+ const results = await Promise.all(promises);
268
+ return results;
189
269
  }
190
- function modelComponentVisibility(modelId, componentId) {
270
+ function modelComponentVisibility(modelId: string, componentId: string): boolean {
191
271
  const selection = useModelSelection(modelId, dataStyleState);
192
272
  return selection.value.includes(componentId);
193
273
  }
194
- function modelComponentTypeVisibility(modelId, componentType) {
274
+ function modelComponentTypeVisibility(modelId: string, componentType: string): boolean {
195
275
  const selection = useModelSelection(modelId, dataStyleState);
196
276
  return selection.value.includes(componentType);
197
277
  }
@@ -0,0 +1,281 @@
1
+ import type {
2
+ ModelComponentStyle,
3
+ ModelComponentTypeStyle,
4
+ ObjectStyle,
5
+ StyleValues,
6
+ } from "./types";
7
+ import type { Observable as RxObservable } from "rxjs";
8
+ import { getTable } from "@ogw_internal/database/database";
9
+ import { liveQuery } from "dexie";
10
+ import merge from "lodash/merge";
11
+ import { useObservable } from "@vueuse/rxjs";
12
+
13
+ interface SharedState {
14
+ styles: Ref<Record<string, ObjectStyle>>;
15
+ modelComponentTypeStyles: Ref<Record<string, ModelComponentTypeStyle>>;
16
+ componentStyles: Ref<Record<string, ModelComponentStyle>>;
17
+ loadFromDatabase: () => Promise<void>;
18
+ updateComponentStyleCache: (
19
+ modelId: string,
20
+ componentId: string,
21
+ styleValues: StyleValues,
22
+ ) => void;
23
+ bulkUpdateComponentStyleCache: (
24
+ modelId: string,
25
+ componentStyleUpdates: readonly {
26
+ readonly id_component: string;
27
+ readonly values: StyleValues;
28
+ }[],
29
+ ) => void;
30
+ bulkUpdateComponentStylesCache: (
31
+ modelId: string,
32
+ componentIds: readonly string[],
33
+ styleValues: StyleValues,
34
+ ) => void;
35
+ updateModelComponentTypeStyleCache: (
36
+ modelId: string,
37
+ componentType: string,
38
+ styleValues: StyleValues,
39
+ ) => void;
40
+ updateStyleCache: (objectId: string, styleValues: StyleValues) => void;
41
+ }
42
+
43
+ let sharedState: SharedState | undefined = undefined;
44
+
45
+ // oxlint-disable-next-line max-lines-per-function
46
+ function getSharedState(): SharedState {
47
+ if (sharedState) {
48
+ return sharedState;
49
+ }
50
+
51
+ const dataStyleTable = getTable<ObjectStyle>("data_style");
52
+ const modelComponentDataStyleTable = getTable<ModelComponentStyle>("model_component_datastyle");
53
+ const modelComponentTypeDataStyleTable = getTable<ModelComponentTypeStyle>(
54
+ "model_component_type_datastyle",
55
+ );
56
+
57
+ // Dexie's `liveQuery` returns Dexie's own `Observable` type, structurally distinct
58
+ // From rxjs's `Observable` that `useObservable` (from @vueuse/rxjs) expects, even
59
+ // Though they're interoperable at runtime (both are plain subscribe-based streams).
60
+ const dataStyleLiveQuery = liveQuery(async () => {
61
+ const objectStyles = await dataStyleTable.toArray();
62
+ const stylesByObjectId: Record<string, ObjectStyle> = {};
63
+ for (const objectStyle of objectStyles) {
64
+ stylesByObjectId[objectStyle.id] = objectStyle;
65
+ }
66
+ return stylesByObjectId;
67
+ });
68
+
69
+ const styles = useObservable<Record<string, ObjectStyle>, Record<string, ObjectStyle>>(
70
+ // oxlint-disable-next-line no-unsafe-type-assertion
71
+ dataStyleLiveQuery as unknown as RxObservable<Record<string, ObjectStyle>>,
72
+ { initialValue: {} },
73
+ ) as Ref<Record<string, ObjectStyle>>;
74
+
75
+ const modelComponentTypeStyles = ref<Record<string, ModelComponentTypeStyle>>({});
76
+ const componentStyles = ref<Record<string, ModelComponentStyle>>({});
77
+
78
+ async function loadFromDatabase(): Promise<void> {
79
+ const [fetchedTypeStyles, fetchedComponentStyles] = await Promise.all([
80
+ modelComponentTypeDataStyleTable.toArray(),
81
+ modelComponentDataStyleTable.toArray(),
82
+ ]);
83
+ const typeStylesMap: Record<string, ModelComponentTypeStyle> = {};
84
+ for (const typeStyle of fetchedTypeStyles) {
85
+ const cacheKey = `${typeStyle.id_model}_${typeStyle.type}`;
86
+ typeStylesMap[cacheKey] = typeStyle;
87
+ }
88
+ modelComponentTypeStyles.value = typeStylesMap;
89
+
90
+ const componentStylesMap: Record<string, ModelComponentStyle> = {};
91
+ for (const componentStyle of fetchedComponentStyles) {
92
+ const cacheKey = `${componentStyle.id_model}_${componentStyle.id_component}`;
93
+ componentStylesMap[cacheKey] = componentStyle;
94
+ }
95
+ componentStyles.value = componentStylesMap;
96
+ }
97
+
98
+ void loadFromDatabase();
99
+
100
+ function updateComponentStyleCache(
101
+ modelId: string,
102
+ componentId: string,
103
+ styleValues: StyleValues,
104
+ ): void {
105
+ const cacheKey = `${modelId}_${componentId}`;
106
+ const existingStyle = componentStyles.value[cacheKey];
107
+ if (existingStyle === undefined) {
108
+ componentStyles.value[cacheKey] = merge(
109
+ { id_model: modelId, id_component: componentId },
110
+ styleValues,
111
+ );
112
+ } else {
113
+ merge(existingStyle, styleValues);
114
+ }
115
+ }
116
+
117
+ function bulkUpdateComponentStyleCache(
118
+ modelId: string,
119
+ componentStyleUpdates: readonly {
120
+ readonly id_component: string;
121
+ readonly values: StyleValues;
122
+ }[],
123
+ ): void {
124
+ const updatedComponentStyles = { ...componentStyles.value };
125
+ for (const { id_component: componentId, values: styleValues } of componentStyleUpdates) {
126
+ const cacheKey = `${modelId}_${componentId}`;
127
+ const existingStyle = updatedComponentStyles[cacheKey];
128
+ if (existingStyle === undefined) {
129
+ updatedComponentStyles[cacheKey] = merge(
130
+ { id_model: modelId, id_component: componentId },
131
+ styleValues,
132
+ );
133
+ } else {
134
+ updatedComponentStyles[cacheKey] = merge({}, existingStyle, styleValues);
135
+ }
136
+ }
137
+ componentStyles.value = updatedComponentStyles;
138
+ }
139
+
140
+ function bulkUpdateComponentStylesCache(
141
+ modelId: string,
142
+ componentIds: readonly string[],
143
+ styleValues: StyleValues,
144
+ ): void {
145
+ const updatedComponentStyles = { ...componentStyles.value };
146
+ for (const componentId of componentIds) {
147
+ const cacheKey = `${modelId}_${componentId}`;
148
+ const existingStyle = updatedComponentStyles[cacheKey];
149
+ if (existingStyle === undefined) {
150
+ updatedComponentStyles[cacheKey] = merge(
151
+ { id_model: modelId, id_component: componentId },
152
+ styleValues,
153
+ );
154
+ } else {
155
+ updatedComponentStyles[cacheKey] = merge({}, existingStyle, styleValues);
156
+ }
157
+ }
158
+ componentStyles.value = updatedComponentStyles;
159
+ }
160
+
161
+ function updateModelComponentTypeStyleCache(
162
+ modelId: string,
163
+ componentType: string,
164
+ styleValues: StyleValues,
165
+ ): void {
166
+ const cacheKey = `${modelId}_${componentType}`;
167
+ modelComponentTypeStyles.value[cacheKey] ??= { id_model: modelId, type: componentType };
168
+ merge(modelComponentTypeStyles.value[cacheKey], styleValues);
169
+ }
170
+
171
+ function updateStyleCache(objectId: string, styleValues: StyleValues): void {
172
+ styles.value[objectId] ??= { id: objectId };
173
+ merge(styles.value[objectId], styleValues);
174
+ }
175
+
176
+ sharedState = {
177
+ styles,
178
+ modelComponentTypeStyles,
179
+ componentStyles,
180
+ loadFromDatabase,
181
+ updateComponentStyleCache,
182
+ bulkUpdateComponentStyleCache,
183
+ bulkUpdateComponentStylesCache,
184
+ updateModelComponentTypeStyleCache,
185
+ updateStyleCache,
186
+ };
187
+
188
+ return sharedState;
189
+ }
190
+
191
+ interface DataStyleStateApi extends SharedState {
192
+ getStyle: (objectId: string) => ObjectStyle;
193
+ getComponentStyle: (modelId: string, componentId: string) => ModelComponentStyle;
194
+ getModelComponentTypeStyle: (modelId: string, componentType: string) => ModelComponentTypeStyle;
195
+ mutateStyle: (objectId: string, styleValues: StyleValues) => Promise<string>;
196
+ objectVisibility: ComputedRef<(objectId: string) => boolean | undefined>;
197
+ selectedObjects: ComputedRef<string[]>;
198
+ clear: () => Promise<void>;
199
+ }
200
+
201
+ // oxlint-disable-next-line max-lines-per-function
202
+ export function useDataStyleState(): DataStyleStateApi {
203
+ const dataStyleTable = getTable<ObjectStyle>("data_style");
204
+ const modelComponentDataStyleTable = getTable<ModelComponentStyle>("model_component_datastyle");
205
+ const modelComponentTypeDataStyleTable = getTable<ModelComponentTypeStyle>(
206
+ "model_component_type_datastyle",
207
+ );
208
+
209
+ const state = getSharedState();
210
+ const { styles, modelComponentTypeStyles, componentStyles } = state;
211
+
212
+ const objectVisibility = computed(() => (objectId: string): boolean | undefined => {
213
+ const style = styles.value[objectId];
214
+ if (style !== undefined) {
215
+ return style.visibility;
216
+ }
217
+ return false;
218
+ });
219
+
220
+ const selectedObjects = computed((): string[] => {
221
+ const visibleObjectIds: string[] = [];
222
+ for (const [objectId, objectStyle] of Object.entries(styles.value)) {
223
+ if (objectStyle.visibility === true) {
224
+ visibleObjectIds.push(objectId);
225
+ }
226
+ }
227
+ return visibleObjectIds;
228
+ });
229
+
230
+ function getStyle(objectId: string): ObjectStyle {
231
+ const style = styles.value[objectId];
232
+ if (style === undefined) {
233
+ return { id: objectId };
234
+ }
235
+ return { ...toRaw(style) };
236
+ }
237
+
238
+ async function mutateStyle(objectId: string, styleValues: StyleValues): Promise<string> {
239
+ state.updateStyleCache(objectId, styleValues);
240
+ const currentStyle = getStyle(objectId);
241
+ merge(currentStyle, styleValues);
242
+ const savedId = await dataStyleTable.put(
243
+ structuredClone({ ...toRaw(currentStyle), id: objectId }),
244
+ );
245
+ return savedId;
246
+ }
247
+
248
+ function getComponentStyle(modelId: string, componentId: string): ModelComponentStyle {
249
+ const cacheKey = `${modelId}_${componentId}`;
250
+ return merge({ coloring: {} }, componentStyles.value[cacheKey]);
251
+ }
252
+
253
+ function getModelComponentTypeStyle(
254
+ modelId: string,
255
+ componentType: string,
256
+ ): ModelComponentTypeStyle {
257
+ const cacheKey = `${modelId}_${componentType}`;
258
+ return merge({ coloring: {} }, modelComponentTypeStyles.value[cacheKey]);
259
+ }
260
+
261
+ async function clear(): Promise<void> {
262
+ await Promise.all([
263
+ dataStyleTable.clear(),
264
+ modelComponentDataStyleTable.clear(),
265
+ modelComponentTypeDataStyleTable.clear(),
266
+ ]);
267
+ modelComponentTypeStyles.value = {};
268
+ componentStyles.value = {};
269
+ }
270
+
271
+ return {
272
+ ...state,
273
+ getStyle,
274
+ getComponentStyle,
275
+ getModelComponentTypeStyle,
276
+ mutateStyle,
277
+ objectVisibility,
278
+ selectedObjects,
279
+ clear,
280
+ };
281
+ }
@@ -0,0 +1,30 @@
1
+ type StyleValues = Record<string, unknown>;
2
+
3
+ interface ObjectStyle {
4
+ id: string;
5
+ visibility?: boolean;
6
+ color?: unknown;
7
+ points?: StyleValues;
8
+ edges?: StyleValues;
9
+ cells?: StyleValues;
10
+ polygons?: StyleValues;
11
+ polyhedra?: StyleValues;
12
+ corners?: StyleValues;
13
+ lines?: StyleValues;
14
+ surfaces?: StyleValues;
15
+ blocks?: StyleValues;
16
+ attributes?: StyleValues;
17
+ [key: string]: unknown;
18
+ }
19
+
20
+ interface ModelComponentTypeStyle extends StyleValues {
21
+ id_model: string;
22
+ type: string;
23
+ }
24
+
25
+ interface ModelComponentStyle extends StyleValues {
26
+ id_model: string;
27
+ id_component: string;
28
+ }
29
+
30
+ export type { ModelComponentStyle, ModelComponentTypeStyle, ObjectStyle, StyleValues };