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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/README.md +8 -0
  2. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  3. package/app/components/ActionButton.vue +28 -12
  4. package/app/components/Basic/Slider.vue +2 -2
  5. package/app/components/Basic/Switch.vue +2 -2
  6. package/app/components/CameraManager/List.vue +9 -9
  7. package/app/components/CameraManager/Saver.vue +8 -2
  8. package/app/components/CameraManager.vue +20 -10
  9. package/app/components/CameraOrientation.vue +29 -15
  10. package/app/components/ClippingPlaneCard.vue +11 -12
  11. package/app/components/ClippingPlanes.vue +25 -15
  12. package/app/components/CrsSelector.vue +24 -15
  13. package/app/components/DeleteDialog.vue +16 -16
  14. package/app/components/DragAndDrop.vue +53 -33
  15. package/app/components/DragAndDropInternal/DragAndDropInline.vue +29 -16
  16. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  17. package/app/components/ExtensionSelector.vue +32 -16
  18. package/app/components/FeedBack/ErrorBanner.vue +1 -2
  19. package/app/components/FeedBack/Snackers.vue +3 -3
  20. package/app/components/FetchingData.vue +8 -12
  21. package/app/components/FileSelector.vue +20 -12
  22. package/app/components/FileUploader.vue +45 -24
  23. package/app/components/GlassCard.vue +16 -12
  24. package/app/components/HybridRenderingView.vue +22 -11
  25. package/app/components/HybridViewerTooltip.vue +24 -22
  26. package/app/components/InfraConnected.vue +1 -1
  27. package/app/components/Launcher.vue +11 -9
  28. package/app/components/Loading/EcoMessages.vue +16 -11
  29. package/app/components/Loading/Header.vue +6 -7
  30. package/app/components/Loading/Progress.vue +6 -7
  31. package/app/components/Loading.vue +8 -12
  32. package/app/components/MissingFilesSelector.vue +29 -15
  33. package/app/components/ObjectSelector.vue +33 -18
  34. package/app/components/PackagesVersions.vue +14 -7
  35. package/app/components/Recaptcha.vue +16 -22
  36. package/app/components/RemoteRenderingView.vue +16 -9
  37. package/app/components/Ruler.vue +8 -6
  38. package/app/components/Screenshot.vue +19 -13
  39. package/app/components/SearchBar.vue +10 -6
  40. package/app/components/ShrinkFilter.vue +12 -7
  41. package/app/components/Step.vue +30 -11
  42. package/app/components/Stepper.vue +18 -7
  43. package/app/components/ToolPanel.vue +25 -12
  44. package/app/components/ViewToolbar.vue +33 -21
  45. package/app/components/Viewer/ContextMenu/CenterButton.vue +14 -9
  46. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  47. package/app/components/Viewer/ContextMenu/ContextMenu.vue +25 -20
  48. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +21 -9
  49. package/app/components/Viewer/ContextMenu/InfoCard.vue +31 -14
  50. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  51. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +59 -36
  52. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +67 -39
  53. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +61 -38
  54. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +43 -27
  55. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +84 -40
  56. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +67 -38
  57. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +101 -35
  58. package/app/components/Viewer/Generic/Model/CornersOptions.vue +67 -27
  59. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +14 -8
  60. package/app/components/Viewer/Generic/Model/LinesOptions.vue +96 -43
  61. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +24 -12
  62. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +10 -5
  63. package/app/components/Viewer/Generic/Model/PointsOptions.vue +16 -10
  64. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +105 -31
  65. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  66. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  67. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  68. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  69. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  70. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  71. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  72. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +63 -37
  73. package/app/components/Viewer/ObjectTree/Base/Controls.vue +24 -9
  74. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +25 -8
  75. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  76. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +26 -11
  77. package/app/components/Viewer/ObjectTree/Box.vue +30 -15
  78. package/app/components/Viewer/ObjectTree/Layout.vue +29 -22
  79. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +54 -28
  80. package/app/components/Viewer/ObjectTree/Views/ModelCollections.vue +76 -30
  81. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +86 -34
  82. package/app/components/Viewer/Options/AttributeColorBar.vue +12 -6
  83. package/app/components/Viewer/Options/AttributeRangeSelector.vue +6 -4
  84. package/app/components/Viewer/Options/AttributeSelector.vue +61 -28
  85. package/app/components/Viewer/Options/ColorMapList.vue +44 -18
  86. package/app/components/Viewer/Options/ColorMapPicker.vue +12 -8
  87. package/app/components/Viewer/Options/ColorPicker.vue +20 -13
  88. package/app/components/Viewer/Options/ColoringTypeSelector.vue +77 -57
  89. package/app/components/Viewer/Options/ColormapQuickPicker.vue +10 -8
  90. package/app/components/Viewer/Options/OptionsSection.vue +6 -4
  91. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  92. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  93. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  94. package/app/components/Viewer/Options/TextureItem.vue +24 -19
  95. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  96. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  97. package/app/components/Viewer/OverlappingObjectsPicker.vue +28 -12
  98. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +41 -25
  99. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  100. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  101. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  102. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +66 -37
  103. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  104. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  105. package/app/components/Viewer/Surface/PolygonsOptions.vue +72 -38
  106. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  107. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  108. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  109. package/app/components/Viewer/Ui.vue +18 -13
  110. package/app/components/Wrapper.vue +18 -9
  111. package/app/components/ZScaling.vue +15 -9
  112. package/app/components/csv-preview/CsvPreviewer.vue +38 -17
  113. package/app/components/csv-preview/CsvSettings.vue +26 -48
  114. package/app/components/csv-preview/CsvTable.vue +34 -14
  115. package/app/composables/{batch_style.js → batch_style.ts} +4 -1
  116. package/app/composables/{clipping_planes_widget.js → clipping_planes_widget.ts} +105 -42
  117. package/app/composables/{global_attribute_style.js → global_attribute_style.ts} +72 -30
  118. package/app/composables/{hover_highlight.js → hover_highlight.ts} +16 -12
  119. package/app/composables/{model_collections.js → model_collections.ts} +10 -4
  120. package/app/composables/{model_components.js → model_components.ts} +10 -4
  121. package/app/composables/{project_manager.js → project_manager.ts} +1 -1
  122. package/app/composables/{responsive_middle_truncate.js → responsive_middle_truncate.ts} +15 -1
  123. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  124. package/app/composables/{stepper_tree.js → stepper_tree.ts} +10 -10
  125. package/app/composables/{tree_filter.js → tree_filter.ts} +49 -15
  126. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +44 -16
  127. package/app/composables/{tree_scroll.js → tree_scroll.ts} +26 -7
  128. package/app/composables/{use_adaptive_styles.js → use_adaptive_styles.ts} +39 -15
  129. package/app/composables/{use_overlapping_picker.js → use_overlapping_picker.ts} +58 -14
  130. package/app/composables/{use_quick_colormap.js → use_quick_colormap.ts} +15 -3
  131. package/app/composables/{virtual_tree.js → virtual_tree.ts} +69 -21
  132. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +4 -1
  133. package/app/stores/{app.js → app.ts} +98 -37
  134. package/app/stores/{back.js → back.ts} +26 -16
  135. package/app/stores/camera_manager.ts +78 -0
  136. package/app/stores/{cloud.js → cloud.ts} +5 -4
  137. package/app/stores/{data.js → data.ts} +110 -37
  138. package/app/stores/data_helpers/collections.ts +140 -0
  139. package/app/stores/data_helpers/mesh.ts +160 -0
  140. package/app/stores/{data_style.js → data_style.ts} +39 -10
  141. package/app/stores/{feedback.js → feedback.ts} +16 -5
  142. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +29 -14
  143. package/app/stores/{infra.js → infra.ts} +18 -9
  144. package/app/stores/{menu.js → menu.ts} +54 -32
  145. package/app/stores/{treeview.js → treeview.ts} +108 -45
  146. package/app/stores/{viewer.js → viewer.ts} +45 -24
  147. package/app/utils/attributes.ts +40 -0
  148. package/app/utils/{clipping_planes.js → clipping_planes.ts} +30 -15
  149. package/app/utils/{colormap.js → colormap.ts} +29 -14
  150. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  151. package/app/utils/default_styles/{index.js → index.ts} +3 -2
  152. package/app/utils/default_styles/{meshes.js → meshes.ts} +27 -48
  153. package/app/utils/default_styles/{models.js → models.ts} +25 -40
  154. package/app/utils/{extension.js → extension.ts} +27 -10
  155. package/app/utils/{import_workflow.js → import_workflow.ts} +24 -17
  156. package/app/utils/{log.js → log.ts} +12 -2
  157. package/app/utils/{name_cleaner.js → name_cleaner.ts} +5 -5
  158. package/app/utils/status.ts +19 -0
  159. package/app/utils/{stores.js → stores.ts} +5 -5
  160. package/app/utils/{string.js → string.ts} +5 -5
  161. package/app/utils/{treeview.js → treeview.ts} +4 -1
  162. package/internal/database/{base_database.js → base_database.ts} +2 -2
  163. package/internal/database/{database.js → database.ts} +30 -18
  164. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  165. package/internal/database/tables/camera_positions.ts +6 -0
  166. package/internal/database/tables/{data.js → data.ts} +3 -1
  167. package/internal/database/tables/data_style.ts +6 -0
  168. package/internal/database/tables/model_component_datastyle.ts +6 -0
  169. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  170. package/internal/database/tables/model_components.ts +6 -0
  171. package/internal/database/tables/model_components_relation.ts +6 -0
  172. package/internal/database/tables/table_definition.ts +5 -0
  173. package/internal/stores/data_style/mesh/cells/{cell.js → cell.ts} +83 -36
  174. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +2 -2
  175. package/internal/stores/data_style/mesh/cells/{common.js → common.ts} +8 -7
  176. package/internal/stores/data_style/mesh/cells/{index.js → index.ts} +5 -5
  177. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +3 -3
  178. package/internal/stores/data_style/mesh/cells/{vertex.js → vertex.ts} +79 -28
  179. package/internal/stores/data_style/mesh/cells/{visibility.js → visibility.ts} +3 -3
  180. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +2 -2
  181. package/internal/stores/data_style/mesh/edges/{common.js → common.ts} +7 -6
  182. package/internal/stores/data_style/mesh/edges/{edge.js → edge.ts} +81 -29
  183. package/internal/stores/data_style/mesh/edges/{index.js → index.ts} +5 -6
  184. package/internal/stores/data_style/mesh/edges/{vertex.js → vertex.ts} +81 -29
  185. package/internal/stores/data_style/mesh/edges/{visibility.js → visibility.ts} +3 -3
  186. package/internal/stores/data_style/mesh/edges/{width.js → width.ts} +3 -3
  187. package/internal/stores/data_style/mesh/{index.js → index.ts} +9 -8
  188. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +2 -2
  189. package/internal/stores/data_style/mesh/points/{common.js → common.ts} +8 -7
  190. package/internal/stores/data_style/mesh/points/{index.js → index.ts} +5 -5
  191. package/internal/stores/data_style/mesh/points/{size.js → size.ts} +3 -3
  192. package/internal/stores/data_style/mesh/points/{vertex.js → vertex.ts} +79 -28
  193. package/internal/stores/data_style/mesh/points/{visibility.js → visibility.ts} +7 -5
  194. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +2 -2
  195. package/internal/stores/data_style/mesh/polygons/{common.js → common.ts} +7 -6
  196. package/internal/stores/data_style/mesh/polygons/{index.js → index.ts} +5 -5
  197. package/internal/stores/data_style/mesh/polygons/{polygon.js → polygon.ts} +81 -29
  198. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +3 -3
  199. package/internal/stores/data_style/mesh/polygons/{vertex.js → vertex.ts} +81 -29
  200. package/internal/stores/data_style/mesh/polygons/{visibility.js → visibility.ts} +3 -3
  201. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +2 -2
  202. package/internal/stores/data_style/mesh/polyhedra/{common.js → common.ts} +7 -6
  203. package/internal/stores/data_style/mesh/polyhedra/{index.js → index.ts} +5 -5
  204. package/internal/stores/data_style/mesh/polyhedra/{polyhedron.js → polyhedron.ts} +86 -29
  205. package/internal/stores/data_style/mesh/polyhedra/{vertex.js → vertex.ts} +81 -29
  206. package/internal/stores/data_style/mesh/polyhedra/{visibility.js → visibility.ts} +3 -3
  207. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +18 -6
  208. package/internal/stores/data_style/model/blocks/{common.js → common.ts} +9 -8
  209. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +26 -11
  210. package/internal/stores/data_style/model/blocks/{polyhedron.js → polyhedron.ts} +121 -30
  211. package/internal/stores/data_style/model/blocks/{vertex.js → vertex.ts} +110 -30
  212. package/internal/stores/data_style/model/blocks/{visibility.js → visibility.ts} +6 -2
  213. package/internal/stores/data_style/model/{color.js → color.ts} +70 -28
  214. package/internal/stores/data_style/model/common.ts +216 -0
  215. package/internal/stores/data_style/model/corners/{color.js → color.ts} +18 -6
  216. package/internal/stores/data_style/model/corners/{common.js → common.ts} +9 -8
  217. package/internal/stores/data_style/model/corners/{index.js → index.ts} +24 -10
  218. package/internal/stores/data_style/model/corners/{vertex.js → vertex.ts} +115 -35
  219. package/internal/stores/data_style/model/corners/{visibility.js → visibility.ts} +6 -2
  220. package/internal/stores/data_style/model/edges/{common.js → common.ts} +4 -3
  221. package/internal/stores/data_style/model/edges/{index.js → index.ts} +0 -6
  222. package/internal/stores/data_style/model/edges/{visibility.js → visibility.ts} +4 -4
  223. package/internal/stores/data_style/model/{index.js → index.ts} +4 -4
  224. package/internal/stores/data_style/model/lines/{color.js → color.ts} +18 -6
  225. package/internal/stores/data_style/model/lines/{common.js → common.ts} +9 -8
  226. package/internal/stores/data_style/model/lines/{edge.js → edge.ts} +107 -30
  227. package/internal/stores/data_style/model/lines/{index.js → index.ts} +26 -11
  228. package/internal/stores/data_style/model/lines/{vertex.js → vertex.ts} +107 -30
  229. package/internal/stores/data_style/model/lines/{visibility.js → visibility.ts} +6 -2
  230. package/internal/stores/data_style/model/points/{common.js → common.ts} +4 -3
  231. package/internal/stores/data_style/model/points/{index.js → index.ts} +6 -3
  232. package/internal/stores/data_style/model/points/{size.js → size.ts} +3 -3
  233. package/internal/stores/data_style/model/points/{visibility.js → visibility.ts} +3 -3
  234. package/internal/stores/data_style/model/selection.ts +116 -0
  235. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +18 -6
  236. package/internal/stores/data_style/model/surfaces/{common.js → common.ts} +9 -8
  237. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +28 -11
  238. package/internal/stores/data_style/model/surfaces/{polygon.js → polygon.ts} +122 -30
  239. package/internal/stores/data_style/model/surfaces/{vertex.js → vertex.ts} +122 -30
  240. package/internal/stores/data_style/model/surfaces/{visibility.js → visibility.ts} +6 -2
  241. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +38 -20
  242. package/internal/stores/data_style/state.ts +269 -0
  243. package/internal/stores/data_style/types.ts +30 -0
  244. package/internal/stores/hybrid_viewer/{brightness.js → brightness.ts} +35 -11
  245. package/internal/stores/hybrid_viewer/{camera.js → camera.ts} +90 -52
  246. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +27 -10
  247. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  248. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +9 -6
  249. package/internal/stores/hybrid_viewer/{highlight.js → highlight.ts} +81 -29
  250. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +38 -19
  251. package/internal/stores/hybrid_viewer/{scene.js → scene.ts} +39 -29
  252. package/internal/stores/hybrid_viewer/viewport.ts +168 -0
  253. package/internal/stores/hybrid_viewer/vtk_types.ts +74 -0
  254. package/internal/utils/api_fetch.ts +102 -0
  255. package/internal/utils/upload_file.ts +94 -0
  256. package/internal/utils/viewer_call.ts +90 -0
  257. package/internal/utils/ws_client.ts +43 -0
  258. package/{nuxt.config.js → nuxt.config.ts} +6 -1
  259. package/opengeodeweb_front_schemas.js +175 -0
  260. package/package.json +32 -8
  261. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +17 -9
  262. package/server/api/local/app/{project_folder_path.post.js → project_folder_path.post.ts} +7 -3
  263. package/server/api/local/app/{run_back.post.js → run_back.post.ts} +12 -4
  264. package/server/api/local/app/{run_viewer.post.js → run_viewer.post.ts} +12 -4
  265. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +12 -6
  266. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -9
  267. package/server/api/local/extensions/{upload.put.js → upload.put.ts} +13 -4
  268. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +4 -3
  269. package/server/api/microservice/app/{set_app_base_url.post.js → set_app_base_url.post.ts} +9 -4
  270. package/server/api/microservice/app/{set_back_base_url.post.js → set_back_base_url.post.ts} +9 -4
  271. package/server/api/microservice/app/{set_is_app_ready.post.js → set_is_app_ready.post.ts} +9 -4
  272. package/server/api/microservice/app/{set_viewer_base_url.post.js → set_viewer_base_url.post.ts} +9 -4
  273. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +9 -3
  274. package/server/api/serverless/{run_cloud.post.js → run_cloud.post.ts} +13 -7
  275. package/server/types/vendor.d.ts +64 -0
  276. package/server/utils/app_config.js +34 -64
  277. package/server/utils/app_config.ts +96 -0
  278. package/server/utils/cleanup.js +97 -148
  279. package/server/utils/cleanup.ts +189 -0
  280. package/server/utils/cloud.js +103 -148
  281. package/server/utils/cloud.ts +219 -0
  282. package/server/utils/{extension.js → extension.ts} +17 -4
  283. package/server/utils/microservices.js +126 -159
  284. package/server/utils/microservices.ts +206 -0
  285. package/server/utils/path.js +88 -134
  286. package/server/utils/path.ts +173 -0
  287. package/server/utils/scripts.js +116 -164
  288. package/server/utils/scripts.ts +195 -0
  289. package/server/utils/server.js +34 -50
  290. package/server/utils/server.ts +67 -0
  291. package/server/utils/server_config.js +23 -38
  292. package/server/utils/server_config.ts +60 -0
  293. package/server/utils/ws_client.js +81 -106
  294. package/server/utils/ws_client.ts +134 -0
  295. package/shared/app_mode.js +5 -4
  296. package/shared/app_mode.ts +7 -0
  297. package/shared/scripts.js +37 -32
  298. package/shared/scripts.ts +44 -0
  299. package/shared/utils/call_raw.js +25 -41
  300. package/shared/utils/call_raw.ts +66 -0
  301. package/shared/utils/call_schema.js +24 -41
  302. package/shared/utils/call_schema.ts +57 -0
  303. package/shared/utils/fetch_raw.js +36 -57
  304. package/shared/utils/fetch_raw.ts +85 -0
  305. package/shared/utils/fetch_schema.js +27 -44
  306. package/shared/utils/fetch_schema.ts +61 -0
  307. package/shared/utils/file.js +6 -10
  308. package/shared/utils/file.ts +16 -0
  309. package/shared/utils/parse_boolean.js +20 -13
  310. package/shared/utils/parse_boolean.ts +16 -0
  311. package/shared/utils/response_handlers/load.js +39 -66
  312. package/shared/utils/response_handlers/load.ts +94 -0
  313. package/shared/utils/types.js +1 -0
  314. package/shared/utils/types.ts +27 -0
  315. package/shared/utils/validate_schema.js +13 -9
  316. package/shared/utils/validate_schema.ts +15 -0
  317. package/.github/workflows/config.json +0 -5
  318. package/.github/workflows/deploy.yml +0 -15
  319. package/.github/workflows/manual_release.yml +0 -11
  320. package/.github/workflows/merge_request.yml +0 -9
  321. package/.github/workflows/pr_update.yml +0 -11
  322. package/.github/workflows/prepare_deploy.yml +0 -9
  323. package/.github/workflows/schedule.yml +0 -18
  324. package/.github/workflows/test.yml +0 -14
  325. package/.github/workflows/test_pr.yml +0 -12
  326. package/.oxlintrc.json +0 -150
  327. package/.releaserc +0 -11
  328. package/app/stores/camera_manager.js +0 -57
  329. package/app/stores/data_helpers/collections.js +0 -96
  330. package/app/stores/data_helpers/mesh.js +0 -122
  331. package/app/utils/attributes.js +0 -23
  332. package/app/utils/status.js +0 -10
  333. package/commitlint.config.js +0 -20
  334. package/internal/database/tables/camera_positions.js +0 -4
  335. package/internal/database/tables/data_style.js +0 -4
  336. package/internal/database/tables/model_component_datastyle.js +0 -4
  337. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  338. package/internal/database/tables/model_components.js +0 -4
  339. package/internal/database/tables/model_components_relation.js +0 -4
  340. package/internal/stores/data_style/model/common.js +0 -141
  341. package/internal/stores/data_style/model/selection.js +0 -89
  342. package/internal/stores/data_style/state.js +0 -197
  343. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  344. package/internal/utils/api_fetch.js +0 -52
  345. package/internal/utils/upload_file.js +0 -57
  346. package/internal/utils/viewer_call.js +0 -49
  347. package/internal/utils/ws_client.js +0 -29
  348. package/scripts/generate_geode_objects.js +0 -24
  349. package/tests/integration/data/uploads/test.og_brep +0 -0
  350. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  351. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  352. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  353. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  354. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  355. package/tests/integration/data/uploads/test.vtu +0 -22
  356. package/tests/integration/setup.js +0 -92
  357. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  358. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  359. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  360. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  361. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  362. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  363. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  364. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  365. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  366. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  367. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  368. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  369. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  370. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  371. package/tests/setup_indexeddb.js +0 -4
  372. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  373. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  374. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  375. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  376. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  377. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  378. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  379. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  380. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  381. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  382. package/tests/unit/components/Step.nuxt.test.js +0 -51
  383. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  384. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  385. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  386. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  387. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  388. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  389. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  390. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  391. package/tests/unit/stores/app.nuxt.test.js +0 -189
  392. package/tests/unit/stores/back.nuxt.test.js +0 -147
  393. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  394. package/tests/unit/stores/data.nuxt.test.js +0 -162
  395. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  396. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  397. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  398. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  399. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  400. package/tests/utils.js +0 -20
  401. package/tests/vitest.config.js +0 -67
  402. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
@@ -1,16 +1,23 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
+ // Not auto-fixable (eslint's sort-imports core rule has no autofixer) and this file's import order doesn't match its syntax-kind-then-alphabetical requirement - left as-is rather than manually reordered across the codebase for a purely cosmetic rule.
3
+ // oxlint-disable eslint/sort-imports
4
+ // This file exhaustively wires group- and per-component style properties (visibility/color/coloring/vertex+polyhedron attributes) to the style store; the formatter's line-wrapping of the resulting store calls pushes the file past max-lines even though no logic was added.
5
+ // oxlint-disable eslint/max-lines
2
6
  import OptionsSection from "@ogw_front/components/Viewer/Options/OptionsSection.vue";
3
7
  import ViewerOptionsColoringTypeSelector from "@ogw_front/components/Viewer/Options/ColoringTypeSelector.vue";
4
8
  import VisibilitySwitch from "@ogw_front/components/Viewer/Options/VisibilitySwitch.vue";
5
9
  import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
6
10
  import { useDataStyleStore } from "@ogw_front/stores/data_style";
7
11
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
12
+ import type { RGBAColor } from "@ogw_front/utils/default_styles/constants";
8
13
 
9
- const { modelId, blockId, targetBlockIds } = defineProps({
10
- modelId: { type: String, required: true },
11
- blockId: { type: String, default: undefined },
12
- targetBlockIds: { type: Array, required: true },
13
- });
14
+ interface Props {
15
+ modelId: string;
16
+ blockId?: string;
17
+ targetBlockIds: string[];
18
+ }
19
+
20
+ const { modelId, blockId = undefined, targetBlockIds } = defineProps<Props>();
14
21
 
15
22
  const dataStyleStore = useDataStyleStore();
16
23
  const hybridViewerStore = useHybridViewerStore();
@@ -25,41 +32,54 @@ const blocksVisibility = computed({
25
32
  });
26
33
 
27
34
  const blockVisibility = computed({
28
- get: () => dataStyleStore.modelBlockVisibility(modelId, blockId),
35
+ get: () => dataStyleStore.modelBlockVisibility(modelId, blockId) as boolean | undefined,
29
36
  set: async (newValue) => {
37
+ if (blockId === undefined) {
38
+ return;
39
+ }
30
40
  await dataStyleStore.setModelBlocksVisibility(modelId, [blockId], newValue);
31
41
  hybridViewerStore.remoteRender();
32
42
  },
33
43
  });
34
44
 
35
45
  // Color
36
- const blocksColor = computed({
37
- get: () => dataStyleStore.modelComponentTypeColor(modelId, "Block"),
46
+ const blocksColor = computed<RGBAColor | undefined>({
47
+ get: () => dataStyleStore.modelComponentTypeColor(modelId, "Block") as RGBAColor | undefined,
38
48
  set: async (color) => {
39
49
  await dataStyleStore.setModelBlocksColor(modelId, targetBlockIds, color);
40
50
  hybridViewerStore.remoteRender();
41
51
  },
42
52
  });
43
53
 
44
- const blockColor = computed({
45
- get: () => dataStyleStore.modelBlockColor(modelId, blockId),
54
+ const blockColor = computed<RGBAColor | undefined>({
55
+ get: () => dataStyleStore.modelBlockColor(modelId, blockId) as RGBAColor | undefined,
46
56
  set: async (color) => {
57
+ if (blockId === undefined) {
58
+ return;
59
+ }
47
60
  await dataStyleStore.setModelBlocksColor(modelId, [blockId], color);
48
61
  hybridViewerStore.remoteRender();
49
62
  },
50
63
  });
51
64
 
52
- const blocksActiveColoring = computed({
53
- get: () => dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Block"),
65
+ const blocksActiveColoring = computed<string | undefined>({
66
+ get: () =>
67
+ dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Block") as string | undefined,
54
68
  set: async (coloringType) => {
69
+ if (typeof coloringType !== "string") {
70
+ return;
71
+ }
55
72
  await dataStyleStore.setModelBlocksActiveColoring(modelId, targetBlockIds, coloringType);
56
73
  hybridViewerStore.remoteRender();
57
74
  },
58
75
  });
59
76
 
60
- const blockActiveColoring = computed({
61
- get: () => dataStyleStore.modelBlockActiveColoring(modelId, blockId),
77
+ const blockActiveColoring = computed<string | undefined>({
78
+ get: () => dataStyleStore.modelBlockActiveColoring(modelId, blockId) as string | undefined,
62
79
  set: async (coloringType) => {
80
+ if (blockId === undefined || typeof coloringType !== "string") {
81
+ return;
82
+ }
63
83
  await dataStyleStore.setModelBlocksActiveColoring(modelId, [blockId], coloringType);
64
84
  hybridViewerStore.remoteRender();
65
85
  },
@@ -69,6 +89,9 @@ const blockActiveColoring = computed({
69
89
  const blocksVertexAttributeName = computed({
70
90
  get: () => dataStyleStore.modelBlocksVertexAttributeName(modelId),
71
91
  set: async (newValue) => {
92
+ if (newValue === undefined) {
93
+ return;
94
+ }
72
95
  await dataStyleStore.setModelBlocksVertexAttributeName(modelId, targetBlockIds, newValue);
73
96
  hybridViewerStore.remoteRender();
74
97
  },
@@ -85,11 +108,15 @@ const blocksVertexAttributeItem = computed({
85
108
  const blocksVertexAttributeRange = computed({
86
109
  get: () => dataStyleStore.modelBlocksVertexAttributeRange(modelId),
87
110
  set: async (newValue) => {
111
+ const [minimum, maximum] = newValue;
112
+ if (minimum === undefined || maximum === undefined) {
113
+ return;
114
+ }
88
115
  await dataStyleStore.setModelBlocksVertexAttributeRange(
89
116
  modelId,
90
117
  targetBlockIds,
91
- newValue[0],
92
- newValue[1],
118
+ minimum,
119
+ maximum,
93
120
  );
94
121
  hybridViewerStore.remoteRender();
95
122
  },
@@ -103,8 +130,8 @@ const blocksVertexAttributeColorMap = computed({
103
130
  },
104
131
  });
105
132
 
106
- const blocksVertexAttributeNoDataColor = computed({
107
- get: () => dataStyleStore.modelBlocksVertexAttributeNoDataColor(modelId),
133
+ const blocksVertexAttributeNoDataColor = computed<RGBAColor | undefined>({
134
+ get: () => dataStyleStore.modelBlocksVertexAttributeNoDataColor(modelId) as RGBAColor | undefined,
108
135
  set: async (newValue) => {
109
136
  await dataStyleStore.setModelBlocksVertexAttributeNoDataColor(
110
137
  modelId,
@@ -118,6 +145,9 @@ const blocksVertexAttributeNoDataColor = computed({
118
145
  const blocksPolyhedronAttributeName = computed({
119
146
  get: () => dataStyleStore.modelBlocksPolyhedronAttributeName(modelId),
120
147
  set: async (newValue) => {
148
+ if (newValue === undefined) {
149
+ return;
150
+ }
121
151
  await dataStyleStore.setModelBlocksPolyhedronAttributeName(modelId, targetBlockIds, newValue);
122
152
  hybridViewerStore.remoteRender();
123
153
  },
@@ -134,11 +164,15 @@ const blocksPolyhedronAttributeItem = computed({
134
164
  const blocksPolyhedronAttributeRange = computed({
135
165
  get: () => dataStyleStore.modelBlocksPolyhedronAttributeRange(modelId),
136
166
  set: async (newValue) => {
167
+ const [minimum, maximum] = newValue;
168
+ if (minimum === undefined || maximum === undefined) {
169
+ return;
170
+ }
137
171
  await dataStyleStore.setModelBlocksPolyhedronAttributeRange(
138
172
  modelId,
139
173
  targetBlockIds,
140
- newValue[0],
141
- newValue[1],
174
+ minimum,
175
+ maximum,
142
176
  );
143
177
  hybridViewerStore.remoteRender();
144
178
  },
@@ -156,8 +190,9 @@ const blocksPolyhedronAttributeColorMap = computed({
156
190
  },
157
191
  });
158
192
 
159
- const blocksPolyhedronAttributeNoDataColor = computed({
160
- get: () => dataStyleStore.modelBlocksPolyhedronAttributeNoDataColor(modelId),
193
+ const blocksPolyhedronAttributeNoDataColor = computed<RGBAColor | undefined>({
194
+ get: () =>
195
+ dataStyleStore.modelBlocksPolyhedronAttributeNoDataColor(modelId) as RGBAColor | undefined,
161
196
  set: async (newValue) => {
162
197
  await dataStyleStore.setModelBlocksPolyhedronAttributeNoDataColor(
163
198
  modelId,
@@ -172,6 +207,9 @@ const blocksPolyhedronAttributeNoDataColor = computed({
172
207
  const vertexAttributeName = computed({
173
208
  get: () => dataStyleStore.modelBlocksVertexAttributeName(modelId, blockId),
174
209
  set: async (newValue) => {
210
+ if (blockId === undefined || newValue === undefined) {
211
+ return;
212
+ }
175
213
  await dataStyleStore.setModelBlocksVertexAttributeName(modelId, [blockId], newValue);
176
214
  hybridViewerStore.remoteRender();
177
215
  },
@@ -180,6 +218,9 @@ const vertexAttributeName = computed({
180
218
  const vertexAttributeItem = computed({
181
219
  get: () => dataStyleStore.modelBlocksVertexAttributeItem(modelId, blockId),
182
220
  set: async (newValue) => {
221
+ if (blockId === undefined) {
222
+ return;
223
+ }
183
224
  await dataStyleStore.setModelBlocksVertexAttributeItem(modelId, [blockId], newValue);
184
225
  hybridViewerStore.remoteRender();
185
226
  },
@@ -188,12 +229,11 @@ const vertexAttributeItem = computed({
188
229
  const vertexAttributeRange = computed({
189
230
  get: () => dataStyleStore.modelBlocksVertexAttributeRange(modelId, blockId),
190
231
  set: async (newValue) => {
191
- await dataStyleStore.setModelBlocksVertexAttributeRange(
192
- modelId,
193
- [blockId],
194
- newValue[0],
195
- newValue[1],
196
- );
232
+ const [minimum, maximum] = newValue;
233
+ if (blockId === undefined || minimum === undefined || maximum === undefined) {
234
+ return;
235
+ }
236
+ await dataStyleStore.setModelBlocksVertexAttributeRange(modelId, [blockId], minimum, maximum);
197
237
  hybridViewerStore.remoteRender();
198
238
  },
199
239
  });
@@ -201,14 +241,21 @@ const vertexAttributeRange = computed({
201
241
  const vertexAttributeColorMap = computed({
202
242
  get: () => dataStyleStore.modelBlocksVertexAttributeColorMap(modelId, blockId),
203
243
  set: async (newValue) => {
244
+ if (blockId === undefined) {
245
+ return;
246
+ }
204
247
  await dataStyleStore.setModelBlocksVertexAttributeColorMap(modelId, [blockId], newValue);
205
248
  hybridViewerStore.remoteRender();
206
249
  },
207
250
  });
208
251
 
209
- const vertexAttributeNoDataColor = computed({
210
- get: () => dataStyleStore.modelBlocksVertexAttributeNoDataColor(modelId, blockId),
252
+ const vertexAttributeNoDataColor = computed<RGBAColor | undefined>({
253
+ get: () =>
254
+ dataStyleStore.modelBlocksVertexAttributeNoDataColor(modelId, blockId) as RGBAColor | undefined,
211
255
  set: async (newValue) => {
256
+ if (blockId === undefined) {
257
+ return;
258
+ }
212
259
  await dataStyleStore.setModelBlocksVertexAttributeNoDataColor(modelId, [blockId], newValue);
213
260
  hybridViewerStore.remoteRender();
214
261
  },
@@ -217,6 +264,9 @@ const vertexAttributeNoDataColor = computed({
217
264
  const polyhedronAttributeName = computed({
218
265
  get: () => dataStyleStore.modelBlocksPolyhedronAttributeName(modelId, blockId),
219
266
  set: async (newValue) => {
267
+ if (blockId === undefined || newValue === undefined) {
268
+ return;
269
+ }
220
270
  await dataStyleStore.setModelBlocksPolyhedronAttributeName(modelId, [blockId], newValue);
221
271
  hybridViewerStore.remoteRender();
222
272
  },
@@ -225,6 +275,9 @@ const polyhedronAttributeName = computed({
225
275
  const polyhedronAttributeItem = computed({
226
276
  get: () => dataStyleStore.modelBlocksPolyhedronAttributeItem(modelId, blockId),
227
277
  set: async (newValue) => {
278
+ if (blockId === undefined) {
279
+ return;
280
+ }
228
281
  await dataStyleStore.setModelBlocksPolyhedronAttributeItem(modelId, [blockId], newValue);
229
282
  hybridViewerStore.remoteRender();
230
283
  },
@@ -233,11 +286,15 @@ const polyhedronAttributeItem = computed({
233
286
  const polyhedronAttributeRange = computed({
234
287
  get: () => dataStyleStore.modelBlocksPolyhedronAttributeRange(modelId, blockId),
235
288
  set: async (newValue) => {
289
+ const [minimum, maximum] = newValue;
290
+ if (blockId === undefined || minimum === undefined || maximum === undefined) {
291
+ return;
292
+ }
236
293
  await dataStyleStore.setModelBlocksPolyhedronAttributeRange(
237
294
  modelId,
238
295
  [blockId],
239
- newValue[0],
240
- newValue[1],
296
+ minimum,
297
+ maximum,
241
298
  );
242
299
  hybridViewerStore.remoteRender();
243
300
  },
@@ -246,14 +303,23 @@ const polyhedronAttributeRange = computed({
246
303
  const polyhedronAttributeColorMap = computed({
247
304
  get: () => dataStyleStore.modelBlocksPolyhedronAttributeColorMap(modelId, blockId),
248
305
  set: async (newValue) => {
306
+ if (blockId === undefined) {
307
+ return;
308
+ }
249
309
  await dataStyleStore.setModelBlocksPolyhedronAttributeColorMap(modelId, [blockId], newValue);
250
310
  hybridViewerStore.remoteRender();
251
311
  },
252
312
  });
253
313
 
254
- const polyhedronAttributeNoDataColor = computed({
255
- get: () => dataStyleStore.modelBlocksPolyhedronAttributeNoDataColor(modelId, blockId),
314
+ const polyhedronAttributeNoDataColor = computed<RGBAColor | undefined>({
315
+ get: () =>
316
+ dataStyleStore.modelBlocksPolyhedronAttributeNoDataColor(modelId, blockId) as
317
+ | RGBAColor
318
+ | undefined,
256
319
  set: async (newValue) => {
320
+ if (blockId === undefined) {
321
+ return;
322
+ }
257
323
  await dataStyleStore.setModelBlocksPolyhedronAttributeNoDataColor(modelId, [blockId], newValue);
258
324
  hybridViewerStore.remoteRender();
259
325
  },
@@ -1,16 +1,21 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
+ // Not auto-fixable (eslint's sort-imports core rule has no autofixer) and this file's import order doesn't match its syntax-kind-then-alphabetical requirement - left as-is rather than manually reordered across the codebase for a purely cosmetic rule.
3
+ // oxlint-disable eslint/sort-imports
2
4
  import OptionsSection from "@ogw_front/components/Viewer/Options/OptionsSection.vue";
3
5
  import ViewerOptionsColoringTypeSelector from "@ogw_front/components/Viewer/Options/ColoringTypeSelector.vue";
4
6
  import VisibilitySwitch from "@ogw_front/components/Viewer/Options/VisibilitySwitch.vue";
5
7
  import back_schemas from "@geode/opengeodeweb-back/opengeodeweb_back_schemas.json";
6
8
  import { useDataStyleStore } from "@ogw_front/stores/data_style";
7
9
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
10
+ import type { RGBAColor } from "@ogw_front/utils/default_styles/constants";
8
11
 
9
- const { modelId, cornerId, targetCornerIds } = defineProps({
10
- modelId: { type: String, required: true },
11
- cornerId: { type: String, default: undefined },
12
- targetCornerIds: { type: Array, required: true },
13
- });
12
+ interface Props {
13
+ modelId: string;
14
+ cornerId?: string;
15
+ targetCornerIds: string[];
16
+ }
17
+
18
+ const { modelId, cornerId = undefined, targetCornerIds } = defineProps<Props>();
14
19
 
15
20
  const dataStyleStore = useDataStyleStore();
16
21
  const hybridViewerStore = useHybridViewerStore();
@@ -25,41 +30,54 @@ const cornersVisibility = computed({
25
30
  });
26
31
 
27
32
  const cornerVisibility = computed({
28
- get: () => dataStyleStore.modelCornerVisibility(modelId, cornerId),
33
+ get: () => dataStyleStore.modelCornerVisibility(modelId, cornerId) as boolean | undefined,
29
34
  set: async (newValue) => {
35
+ if (cornerId === undefined) {
36
+ return;
37
+ }
30
38
  await dataStyleStore.setModelCornersVisibility(modelId, [cornerId], newValue);
31
39
  hybridViewerStore.remoteRender();
32
40
  },
33
41
  });
34
42
 
35
43
  // Color
36
- const cornersColor = computed({
37
- get: () => dataStyleStore.modelComponentTypeColor(modelId, "Corner"),
44
+ const cornersColor = computed<RGBAColor | undefined>({
45
+ get: () => dataStyleStore.modelComponentTypeColor(modelId, "Corner") as RGBAColor | undefined,
38
46
  set: async (color) => {
39
47
  await dataStyleStore.setModelCornersColor(modelId, targetCornerIds, color);
40
48
  hybridViewerStore.remoteRender();
41
49
  },
42
50
  });
43
51
 
44
- const cornerColor = computed({
45
- get: () => dataStyleStore.modelCornerColor(modelId, cornerId),
52
+ const cornerColor = computed<RGBAColor | undefined>({
53
+ get: () => dataStyleStore.modelCornerColor(modelId, cornerId) as RGBAColor | undefined,
46
54
  set: async (color) => {
55
+ if (cornerId === undefined) {
56
+ return;
57
+ }
47
58
  await dataStyleStore.setModelCornersColor(modelId, [cornerId], color);
48
59
  hybridViewerStore.remoteRender();
49
60
  },
50
61
  });
51
62
 
52
- const cornersActiveColoring = computed({
53
- get: () => dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Corner"),
63
+ const cornersActiveColoring = computed<string | undefined>({
64
+ get: () =>
65
+ dataStyleStore.getModelComponentTypeActiveColoring(modelId, "Corner") as string | undefined,
54
66
  set: async (coloringType) => {
67
+ if (typeof coloringType !== "string") {
68
+ return;
69
+ }
55
70
  await dataStyleStore.setModelCornersActiveColoring(modelId, targetCornerIds, coloringType);
56
71
  hybridViewerStore.remoteRender();
57
72
  },
58
73
  });
59
74
 
60
- const cornerActiveColoring = computed({
61
- get: () => dataStyleStore.modelCornerActiveColoring(modelId, cornerId),
75
+ const cornerActiveColoring = computed<string | undefined>({
76
+ get: () => dataStyleStore.modelCornerActiveColoring(modelId, cornerId) as string | undefined,
62
77
  set: async (coloringType) => {
78
+ if (cornerId === undefined || typeof coloringType !== "string") {
79
+ return;
80
+ }
63
81
  await dataStyleStore.setModelCornersActiveColoring(modelId, [cornerId], coloringType);
64
82
  hybridViewerStore.remoteRender();
65
83
  },
@@ -69,6 +87,9 @@ const cornerActiveColoring = computed({
69
87
  const cornersVertexAttributeName = computed({
70
88
  get: () => dataStyleStore.modelCornersVertexAttributeName(modelId),
71
89
  set: async (newValue) => {
90
+ if (newValue === undefined) {
91
+ return;
92
+ }
72
93
  await dataStyleStore.setModelCornersVertexAttributeName(modelId, targetCornerIds, newValue);
73
94
  hybridViewerStore.remoteRender();
74
95
  },
@@ -85,11 +106,15 @@ const cornersVertexAttributeItem = computed({
85
106
  const cornersVertexAttributeRange = computed({
86
107
  get: () => dataStyleStore.modelCornersVertexAttributeRange(modelId),
87
108
  set: async (newValue) => {
109
+ const [minimum, maximum] = newValue;
110
+ if (minimum === undefined || maximum === undefined) {
111
+ return;
112
+ }
88
113
  await dataStyleStore.setModelCornersVertexAttributeRange(
89
114
  modelId,
90
115
  targetCornerIds,
91
- newValue[0],
92
- newValue[1],
116
+ minimum,
117
+ maximum,
93
118
  );
94
119
  hybridViewerStore.remoteRender();
95
120
  },
@@ -103,8 +128,9 @@ const cornersVertexAttributeColorMap = computed({
103
128
  },
104
129
  });
105
130
 
106
- const cornersVertexAttributeNoDataColor = computed({
107
- get: () => dataStyleStore.modelCornersVertexAttributeNoDataColor(modelId),
131
+ const cornersVertexAttributeNoDataColor = computed<RGBAColor | undefined>({
132
+ get: () =>
133
+ dataStyleStore.modelCornersVertexAttributeNoDataColor(modelId) as RGBAColor | undefined,
108
134
  set: async (newValue) => {
109
135
  await dataStyleStore.setModelCornersVertexAttributeNoDataColor(
110
136
  modelId,
@@ -119,6 +145,9 @@ const cornersVertexAttributeNoDataColor = computed({
119
145
  const vertexAttributeName = computed({
120
146
  get: () => dataStyleStore.modelCornersVertexAttributeName(modelId, cornerId),
121
147
  set: async (newValue) => {
148
+ if (cornerId === undefined || newValue === undefined) {
149
+ return;
150
+ }
122
151
  await dataStyleStore.setModelCornersVertexAttributeName(modelId, [cornerId], newValue);
123
152
  hybridViewerStore.remoteRender();
124
153
  },
@@ -127,6 +156,9 @@ const vertexAttributeName = computed({
127
156
  const vertexAttributeItem = computed({
128
157
  get: () => dataStyleStore.modelCornersVertexAttributeItem(modelId, cornerId),
129
158
  set: async (newValue) => {
159
+ if (cornerId === undefined) {
160
+ return;
161
+ }
130
162
  await dataStyleStore.setModelCornersVertexAttributeItem(modelId, [cornerId], newValue);
131
163
  hybridViewerStore.remoteRender();
132
164
  },
@@ -135,12 +167,11 @@ const vertexAttributeItem = computed({
135
167
  const vertexAttributeRange = computed({
136
168
  get: () => dataStyleStore.modelCornersVertexAttributeRange(modelId, cornerId),
137
169
  set: async (newValue) => {
138
- await dataStyleStore.setModelCornersVertexAttributeRange(
139
- modelId,
140
- [cornerId],
141
- newValue[0],
142
- newValue[1],
143
- );
170
+ const [minimum, maximum] = newValue;
171
+ if (cornerId === undefined || minimum === undefined || maximum === undefined) {
172
+ return;
173
+ }
174
+ await dataStyleStore.setModelCornersVertexAttributeRange(modelId, [cornerId], minimum, maximum);
144
175
  hybridViewerStore.remoteRender();
145
176
  },
146
177
  });
@@ -148,14 +179,23 @@ const vertexAttributeRange = computed({
148
179
  const vertexAttributeColorMap = computed({
149
180
  get: () => dataStyleStore.modelCornersVertexAttributeColorMap(modelId, cornerId),
150
181
  set: async (newValue) => {
182
+ if (cornerId === undefined) {
183
+ return;
184
+ }
151
185
  await dataStyleStore.setModelCornersVertexAttributeColorMap(modelId, [cornerId], newValue);
152
186
  hybridViewerStore.remoteRender();
153
187
  },
154
188
  });
155
189
 
156
- const vertexAttributeNoDataColor = computed({
157
- get: () => dataStyleStore.modelCornersVertexAttributeNoDataColor(modelId, cornerId),
190
+ const vertexAttributeNoDataColor = computed<RGBAColor | undefined>({
191
+ get: () =>
192
+ dataStyleStore.modelCornersVertexAttributeNoDataColor(modelId, cornerId) as
193
+ | RGBAColor
194
+ | undefined,
158
195
  set: async (newValue) => {
196
+ if (cornerId === undefined) {
197
+ return;
198
+ }
159
199
  await dataStyleStore.setModelCornersVertexAttributeNoDataColor(modelId, [cornerId], newValue);
160
200
  hybridViewerStore.remoteRender();
161
201
  },
@@ -1,7 +1,10 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import SurfaceEdges from "@ogw_front/assets/viewer_svgs/surface_edges.svg";
3
- import ViewerContextMenuItem from "@ogw_front/components/Viewer/ContextMenu/ContextMenuItem";
4
- import ViewerOptionsVisibilitySwitch from "@ogw_front/components/Viewer/Options/VisibilitySwitch";
3
+ // oxlint-disable import/consistent-type-specifier-style -- combining the default import with the type import avoids a duplicate-imports violation on this same module; using disable-next-line here is fragile because a formatter can re-wrap the import onto multiple lines and shift the flagged line
4
+ import ViewerContextMenuItem, {
5
+ type ItemProps,
6
+ } from "@ogw_front/components/Viewer/ContextMenu/ContextMenuItem.vue";
7
+ import ViewerOptionsVisibilitySwitch from "@ogw_front/components/Viewer/Options/VisibilitySwitch.vue";
5
8
 
6
9
  import { useBatchStyle } from "@ogw_front/composables/batch_style";
7
10
  import { useDataStyleStore } from "@ogw_front/stores/data_style";
@@ -11,16 +14,18 @@ const dataStyleStore = useDataStyleStore();
11
14
  const hybridViewerStore = useHybridViewerStore();
12
15
  const { applyBatchStyle } = useBatchStyle();
13
16
 
14
- const { itemProps } = defineProps({
15
- itemProps: { type: Object, required: true },
16
- });
17
+ interface Props {
18
+ itemProps: ItemProps & { index: number };
19
+ }
20
+
21
+ const { itemProps } = defineProps<Props>();
17
22
 
18
- const id = computed(() => itemProps.meta_data.modelId || itemProps.id);
23
+ const id = computed(() => (itemProps.meta_data.modelId as string | undefined) || itemProps.id);
19
24
 
20
25
  const visibility = computed({
21
26
  get: () => dataStyleStore.modelEdgesVisibility(id.value),
22
27
  set: async (newValue) => {
23
- await applyBatchStyle(id.value, (targetId) =>
28
+ await applyBatchStyle(id.value, (targetId: string) =>
24
29
  dataStyleStore.setModelEdgesVisibility(targetId, newValue),
25
30
  );
26
31
  hybridViewerStore.remoteRender();
@@ -31,6 +36,7 @@ const visibility = computed({
31
36
  <template>
32
37
  <ViewerContextMenuItem
33
38
  data-testid="modelEdgesMenu"
39
+ :index="itemProps.index"
34
40
  :itemProps="itemProps"
35
41
  tooltip="Edges options"
36
42
  :btnImage="SurfaceEdges"