@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,12 +1,23 @@
1
- <script setup>
2
- import Step from "@ogw_front/components/Step";
1
+ <script setup lang="ts">
2
+ import type { Ref } from "vue";
3
+ import Step from "@ogw_front/components/Step.vue";
4
+ import type { useStepperTree } from "@ogw_front/composables/stepper_tree";
3
5
 
4
- const emit = defineEmits(["reset_values", "close"]);
5
- const { stepperTree } = defineProps({
6
- stepperTree: { type: Object, required: true },
7
- });
6
+ const emit = defineEmits<{
7
+ reset_values: [];
8
+ close: [];
9
+ }>();
10
+
11
+ interface Props {
12
+ stepperTree: ReturnType<typeof useStepperTree>;
13
+ }
14
+
15
+ const { stepperTree } = defineProps<Props>();
8
16
  const { state } = stepperTree;
9
- const { steps, current_step_index } = toRefs(state);
17
+ const { steps, current_step_index } = toRefs(state) as unknown as {
18
+ steps: Ref<unknown[]>;
19
+ current_step_index: Ref<number>;
20
+ };
10
21
  </script>
11
22
 
12
23
  <template>
@@ -1,17 +1,30 @@
1
- <script setup>
2
- import GlassCard from "@ogw_front/components/GlassCard";
1
+ <script setup lang="ts">
2
+ import GlassCard from "@ogw_front/components/GlassCard.vue";
3
3
 
4
- const { title, width, closeLabel, actionLabel, clickOutside, escapeFunction } = defineProps({
5
- title: { type: String, default: "" },
6
- width: { type: Number, default: 260 },
7
- closeLabel: { type: String, default: "Close" },
8
- actionLabel: { type: String, default: undefined },
9
- clickOutside: { type: Boolean, default: true },
10
- escapeFunction: { type: Function, default: undefined },
11
- });
4
+ const DEFAULT_PANEL_WIDTH = 260;
12
5
 
13
- const model = defineModel({ type: Boolean, default: false });
14
- const emit = defineEmits(["action"]);
6
+ interface Props {
7
+ title?: string;
8
+ width?: number;
9
+ closeLabel?: string;
10
+ actionLabel?: string;
11
+ clickOutside?: boolean;
12
+ escapeFunction?: () => void;
13
+ }
14
+
15
+ const {
16
+ title = "",
17
+ width = DEFAULT_PANEL_WIDTH,
18
+ closeLabel = "Close",
19
+ actionLabel = undefined,
20
+ clickOutside = true,
21
+ escapeFunction = undefined,
22
+ } = defineProps<Props>();
23
+
24
+ const model = defineModel<boolean>({ default: false });
25
+ const emit = defineEmits<{
26
+ action: [];
27
+ }>();
15
28
 
16
29
  function close() {
17
30
  if (escapeFunction) {
@@ -1,13 +1,16 @@
1
- <script setup>
2
- import ActionButton from "@ogw_front/components/ActionButton";
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
+ import type { Ref } from "vue";
5
+ import ActionButton from "@ogw_front/components/ActionButton.vue";
3
6
  import CameraBookmarkIcon from "@ogw_front/assets/viewer_svgs/camera-bookmark.svg";
4
- import CameraManager from "@ogw_front/components/CameraManager";
5
- import CameraOrientation from "@ogw_front/components/CameraOrientation";
6
- import ClippingPlanes from "@ogw_front/components/ClippingPlanes";
7
- import Ruler from "@ogw_front/components/Ruler";
8
- import Screenshot from "@ogw_front/components/Screenshot";
9
- import ShrinkFilter from "@ogw_front/components/ShrinkFilter";
10
- import ZScaling from "@ogw_front/components/ZScaling";
7
+ import CameraManager from "@ogw_front/components/CameraManager.vue";
8
+ import CameraOrientation from "@ogw_front/components/CameraOrientation.vue";
9
+ import ClippingPlanes from "@ogw_front/components/ClippingPlanes.vue";
10
+ import Ruler from "@ogw_front/components/Ruler.vue";
11
+ import Screenshot from "@ogw_front/components/Screenshot.vue";
12
+ import ShrinkFilter from "@ogw_front/components/ShrinkFilter.vue";
13
+ import ZScaling from "@ogw_front/components/ZScaling.vue";
11
14
  import { onKeyStroke } from "@vueuse/core";
12
15
  import schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
13
16
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
@@ -24,7 +27,18 @@ const showShrinkFilter = ref(false);
24
27
  const showRuler = ref(false);
25
28
  const gridScale = ref(false);
26
29
  const zScale = ref(hybridViewerStore.zScale);
27
- const openSubMenus = ref({});
30
+ const openSubMenus = ref<Record<string, boolean>>({});
31
+
32
+ interface CameraOptionAction {
33
+ title?: string;
34
+ testId: string;
35
+ tooltip?: string;
36
+ icon: string;
37
+ iconSize?: number;
38
+ color?: string;
39
+ action?: () => void;
40
+ menu?: CameraOptionAction[];
41
+ }
28
42
 
29
43
  watch(
30
44
  () => hybridViewerStore.zScale,
@@ -47,7 +61,7 @@ onKeyStroke("Escape", () => {
47
61
  }
48
62
  });
49
63
 
50
- function closeAllToolsExcept(toolRef) {
64
+ function closeAllToolsExcept(toolRef: Ref<boolean>) {
51
65
  const tools = [
52
66
  showCameraOrientation,
53
67
  showCameraManager,
@@ -64,12 +78,12 @@ function closeAllToolsExcept(toolRef) {
64
78
  }
65
79
  }
66
80
 
67
- function toggleTool(toolRef) {
81
+ function toggleTool(toolRef: Ref<boolean>) {
68
82
  closeAllToolsExcept(toolRef);
69
83
  toolRef.value = !toolRef.value;
70
84
  }
71
85
 
72
- const camera_options = computed(() => [
86
+ const camera_options = computed<CameraOptionAction[]>(() => [
73
87
  {
74
88
  testId: "resetCameraButton",
75
89
  tooltip: "Reset camera",
@@ -234,10 +248,8 @@ const camera_options = computed(() => [
234
248
  <ActionButton
235
249
  v-bind="props"
236
250
  :data-testid="camera_option.testId"
237
- :icon="
238
- typeof camera_option.icon === 'function' ? camera_option.icon() : camera_option.icon
239
- "
240
- :tooltip="camera_option.tooltip"
251
+ :icon="camera_option.icon"
252
+ :tooltip="camera_option.tooltip ?? ''"
241
253
  :color="camera_option.color"
242
254
  :icon-size="camera_option.iconSize"
243
255
  tooltip-location="left"
@@ -249,16 +261,16 @@ const camera_options = computed(() => [
249
261
  <ActionButton
250
262
  :data-testid="item.testId"
251
263
  :icon="item.icon"
252
- :tooltip="item.title"
264
+ :tooltip="item.title ?? ''"
253
265
  :color="
254
266
  hybridViewerStore.is_hover_highlight &&
255
267
  hybridViewerStore.hover_highlight_field_type ===
256
- item.title.toUpperCase().slice(0, -1)
268
+ item.title?.toUpperCase().slice(0, -1)
257
269
  ? 'primary'
258
270
  : undefined
259
271
  "
260
272
  tooltip-location="top"
261
- @click="item.action"
273
+ @click="item.action?.()"
262
274
  />
263
275
  </v-col>
264
276
  </v-row>
@@ -268,7 +280,7 @@ const camera_options = computed(() => [
268
280
  v-else
269
281
  :data-testid="camera_option.testId"
270
282
  :icon="camera_option.icon"
271
- :tooltip="camera_option.tooltip"
283
+ :tooltip="camera_option.tooltip ?? ''"
272
284
  :color="camera_option.color"
273
285
  :icon-size="camera_option.iconSize"
274
286
  tooltip-location="left"
@@ -1,13 +1,18 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { useAdaptiveStyles } from "@ogw_front/composables/use_adaptive_styles";
3
3
  import { useMenuStore } from "@ogw_front/stores/menu";
4
4
 
5
- const { isOverTreeview, isOverToolbar } = defineProps({
6
- isOverTreeview: { type: Boolean, required: true },
7
- isOverToolbar: { type: Boolean, default: false },
8
- });
5
+ interface Props {
6
+ isOverTreeview: boolean;
7
+ isOverToolbar?: boolean;
8
+ }
9
+
10
+ const { isOverTreeview, isOverToolbar = false } = defineProps<Props>();
9
11
 
10
- const emit = defineEmits(["drag", "click"]);
12
+ const emit = defineEmits<{
13
+ drag: [event: MouseEvent];
14
+ click: [event: MouseEvent];
15
+ }>();
11
16
 
12
17
  const ADAPTIVE_BLUR_VAL = "15px";
13
18
  const ADAPTIVE_OPACITY_VAL = 0.85;
@@ -46,14 +51,14 @@ let dragMoved = false;
46
51
  let dragStartClientX = 0;
47
52
  let dragStartClientY = 0;
48
53
 
49
- function onMouseDown(event) {
54
+ function onMouseDown(event: MouseEvent) {
50
55
  dragMoved = false;
51
56
  dragStartClientX = event.clientX;
52
57
  dragStartClientY = event.clientY;
53
58
  emit("drag", event);
54
59
  }
55
60
 
56
- function onMouseUp(event) {
61
+ function onMouseUp(event: MouseEvent) {
57
62
  const deltaX = event.clientX - dragStartClientX;
58
63
  const deltaY = event.clientY - dragStartClientY;
59
64
  if (Math.hypot(deltaX, deltaY) > dragThreshold) {
@@ -61,7 +66,7 @@ function onMouseUp(event) {
61
66
  }
62
67
  }
63
68
 
64
- function onCenterClick(event) {
69
+ function onCenterClick(event: MouseEvent) {
65
70
  event.stopPropagation();
66
71
  if (!dragMoved) {
67
72
  emit("click", event);
@@ -1,12 +1,15 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
+ import type { Component } from "vue";
2
3
  import { useMenuStore } from "@ogw_front/stores/menu";
3
4
 
4
- const { menuItems, id, metaData, menuItemCount } = defineProps({
5
- menuItems: { type: Array, required: true },
6
- id: { type: String, required: true },
7
- metaData: { type: Object, required: true },
8
- menuItemCount: { type: Number, required: true },
9
- });
5
+ interface Props {
6
+ menuItems: Component[];
7
+ id: string;
8
+ metaData: Record<string, unknown>;
9
+ menuItemCount: number;
10
+ }
11
+
12
+ const { menuItems, id, metaData, menuItemCount } = defineProps<Props>();
10
13
 
11
14
  const RADIUS = 80;
12
15
  const Z_INDEX_ACTIVE_ITEM = 10;
@@ -19,7 +22,7 @@ const ANGLE_315 = 315;
19
22
 
20
23
  const menuStore = useMenuStore();
21
24
 
22
- function getItemStyle(index) {
25
+ function getItemStyle(index: number) {
23
26
  const angle = (index / menuItemCount) * 2 * Math.PI;
24
27
  return {
25
28
  transform: `translate(${Math.cos(angle) * RADIUS}px, ${Math.sin(angle) * RADIUS}px)`,
@@ -29,7 +32,7 @@ function getItemStyle(index) {
29
32
  };
30
33
  }
31
34
 
32
- function getTooltipLocation(index) {
35
+ function getTooltipLocation(index: number) {
33
36
  const angle = (index / menuItemCount) * FULL_ANGLE;
34
37
  if (angle < ANGLE_45 || angle >= ANGLE_315) {
35
38
  return "right";
@@ -43,7 +46,7 @@ function getTooltipLocation(index) {
43
46
  return "bottom";
44
47
  }
45
48
 
46
- function getTooltipOrigin(index) {
49
+ function getTooltipOrigin(index: number) {
47
50
  const angle = (index / menuItemCount) * FULL_ANGLE;
48
51
  if (angle < ANGLE_45 || angle >= ANGLE_315) {
49
52
  return "left";
@@ -1,18 +1,23 @@
1
- <script setup>
2
- import CenterButton from "@ogw_front/components/Viewer/ContextMenu/CenterButton";
3
- import CircularItems from "@ogw_front/components/Viewer/ContextMenu/CircularItems";
4
- import InfoCard from "@ogw_front/components/Viewer/ContextMenu/InfoCard";
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
+ import CenterButton from "@ogw_front/components/Viewer/ContextMenu/CenterButton.vue";
5
+ import CircularItems from "@ogw_front/components/Viewer/ContextMenu/CircularItems.vue";
6
+ import InfoCard from "@ogw_front/components/Viewer/ContextMenu/InfoCard.vue";
5
7
  import { useEventListener } from "@vueuse/core";
6
8
  import { useMenuStore } from "@ogw_front/stores/menu";
7
9
  import { useTreeviewStore } from "@ogw_front/stores/treeview";
10
+ import type { Component } from "vue";
11
+
12
+ interface Props {
13
+ id: string;
14
+ x: number;
15
+ y: number;
16
+ containerWidth: number;
17
+ containerHeight: number;
18
+ }
8
19
 
9
- const { id, x, y, containerWidth, containerHeight } = defineProps({
10
- id: { type: String, required: true },
11
- x: { type: Number, required: true },
12
- y: { type: Number, required: true },
13
- containerWidth: { type: Number, required: true },
14
- containerHeight: { type: Number, required: true },
15
- });
20
+ const { id, x, y, containerWidth, containerHeight } = defineProps<Props>();
16
21
 
17
22
  const RADIUS = 80;
18
23
  const MARGIN_OFFSET = 40;
@@ -36,7 +41,7 @@ const dragStartY = ref(0);
36
41
  const menuX = ref(x);
37
42
  const menuY = ref(y);
38
43
 
39
- function clampPosition(posX, posY) {
44
+ function clampPosition(posX: number, posY: number) {
40
45
  const margin = RADIUS + MARGIN_OFFSET;
41
46
  return {
42
47
  x: Math.min(Math.max(posX, margin), containerWidth - margin),
@@ -44,13 +49,13 @@ function clampPosition(posX, posY) {
44
49
  };
45
50
  }
46
51
 
47
- function startDrag(event) {
52
+ function startDrag(event: MouseEvent) {
48
53
  isDragging.value = true;
49
54
  dragStartX.value = event.clientX - menuX.value;
50
55
  dragStartY.value = event.clientY - menuY.value;
51
56
  }
52
57
 
53
- function handleDrag(event) {
58
+ function handleDrag(event: MouseEvent) {
54
59
  const { x: clampedX, y: clampedY } = clampPosition(
55
60
  event.clientX - dragStartX.value,
56
61
  event.clientY - dragStartY.value,
@@ -60,7 +65,7 @@ function handleDrag(event) {
60
65
  menuStore.setMenuPosition(clampedX, clampedY);
61
66
  }
62
67
 
63
- function stopDrag(event) {
68
+ function stopDrag(event: MouseEvent) {
64
69
  isDragging.value = false;
65
70
  event.stopPropagation();
66
71
  menuStore.setMenuPosition(menuX.value, menuY.value);
@@ -73,7 +78,7 @@ watch(show_menu, (newVal) => {
73
78
  });
74
79
 
75
80
  watch(
76
- () => [x, y, containerWidth, containerHeight],
81
+ () => [x, y, containerWidth, containerHeight] as const,
77
82
  ([newX, newY]) => {
78
83
  const { x: clampedX, y: clampedY } = clampPosition(newX, newY);
79
84
  menuX.value = clampedX;
@@ -86,7 +91,7 @@ watch(
86
91
  useEventListener(
87
92
  globalThis,
88
93
  "mousemove",
89
- (event) => {
94
+ (event: MouseEvent) => {
90
95
  if (!isDragging.value) {
91
96
  return;
92
97
  }
@@ -95,14 +100,14 @@ useEventListener(
95
100
  { passive: true },
96
101
  );
97
102
 
98
- useEventListener(globalThis, "mouseup", (event) => {
103
+ useEventListener(globalThis, "mouseup", (event: MouseEvent) => {
99
104
  if (!isDragging.value) {
100
105
  return;
101
106
  }
102
107
  stopDrag(event);
103
108
  });
104
109
 
105
- const menu_items = shallowRef([]);
110
+ const menu_items = shallowRef<Component[]>([]);
106
111
  watch(
107
112
  () => [meta_data.value.viewer_type, meta_data.value.geode_object_type],
108
113
  ([viewer_type, geode_object_type]) => {
@@ -147,7 +152,7 @@ const isOverToolbar = computed(() => {
147
152
 
148
153
  function getMenuStyle() {
149
154
  return {
150
- position: "fixed",
155
+ position: "fixed" as const,
151
156
  left: `${menuStore.containerLeft + menuX.value - RADIUS}px`,
152
157
  top: `${menuStore.containerTop + menuY.value - RADIUS}px`,
153
158
  };
@@ -1,5 +1,5 @@
1
- <script setup>
2
- import GlassCard from "@ogw_front/components/GlassCard";
1
+ <script setup lang="ts">
2
+ import GlassCard from "@ogw_front/components/GlassCard.vue";
3
3
  import { useAdaptiveStyles } from "@ogw_front/composables/use_adaptive_styles";
4
4
  import { useMenuStore } from "@ogw_front/stores/menu";
5
5
  import { useTheme } from "vuetify";
@@ -15,12 +15,22 @@ const menuStore = useMenuStore();
15
15
  const theme = useTheme();
16
16
  const primaryColor = computed(() => theme.current.value.colors.primary);
17
17
 
18
- const { index, itemProps, tooltip, btnImage } = defineProps({
19
- index: { type: Number, required: true },
20
- itemProps: { type: Object, required: true },
21
- tooltip: { type: String, required: true },
22
- btnImage: { type: String, required: true },
23
- });
18
+ interface ItemProps {
19
+ id: string;
20
+ meta_data: Record<string, unknown>;
21
+ tooltip_location: "right" | "top" | "left" | "bottom";
22
+ tooltip_origin: "right" | "top" | "left" | "bottom";
23
+ totalItems: number;
24
+ }
25
+
26
+ interface Props {
27
+ index: number;
28
+ itemProps: ItemProps;
29
+ tooltip: string;
30
+ btnImage: string;
31
+ }
32
+
33
+ const { index, itemProps, tooltip, btnImage } = defineProps<Props>();
24
34
 
25
35
  const buttonCoords = computed(() => {
26
36
  const angle = (index / itemProps.totalItems) * 2 * Math.PI;
@@ -86,7 +96,7 @@ const computedItemStyles = computed(() => {
86
96
  });
87
97
 
88
98
  const is_active = computed(() => menuStore.active_item_index === index);
89
- const optionsRef = ref(undefined);
99
+ const optionsRef = ref<HTMLElement | undefined>(undefined);
90
100
  const { height: optionsHeight } = useElementSize(optionsRef);
91
101
 
92
102
  const maxCardHeight = computed(() => Math.min(CARD_HEIGHT, menuStore.containerHeight - OFFSET));
@@ -125,6 +135,8 @@ const optionsClass = computed(() => {
125
135
  function toggleOptions() {
126
136
  menuStore.toggleItemOptions(index);
127
137
  }
138
+
139
+ export type { ItemProps };
128
140
  </script>
129
141
  <template>
130
142
  <v-sheet class="menu-item-container transition-swing" color="transparent">
@@ -1,16 +1,21 @@
1
- <script setup>
2
- import GlassCard from "@ogw_front/components/GlassCard";
1
+ <script setup lang="ts">
2
+ import GlassCard from "@ogw_front/components/GlassCard.vue";
3
3
  import { middleTruncate } from "@ogw_front/utils/string";
4
4
  import { useClipboard } from "@vueuse/core";
5
5
  import { useDataStore } from "@ogw_front/stores/data";
6
6
  import { useMenuStore } from "@ogw_front/stores/menu";
7
7
 
8
- const { show, metaData } = defineProps({
9
- show: { type: Boolean, required: true },
10
- metaData: { type: Object, required: true },
11
- });
8
+ interface Props {
9
+ show: boolean;
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ metaData: Record<string, any>;
12
+ }
12
13
 
13
- const emit = defineEmits(["update:show"]);
14
+ const { show, metaData } = defineProps<Props>();
15
+
16
+ const emit = defineEmits<{
17
+ "update:show": [value: boolean];
18
+ }>();
14
19
 
15
20
  const COPIED_TIMEOUT = 1500;
16
21
  const MAX_SHORT_ID_LENGTH = 15;
@@ -23,15 +28,25 @@ const TRUNCATE_END_CHARS = 7;
23
28
  const { copy, copied } = useClipboard({ copiedDuring: COPIED_TIMEOUT });
24
29
  const copiedId = ref("");
25
30
 
26
- function isCopied(id) {
31
+ function isCopied(id: string | undefined) {
27
32
  return copied.value && copiedId.value === id;
28
33
  }
29
34
 
30
35
  const menuStore = useMenuStore();
31
36
  const dataStore = useDataStore();
32
37
 
38
+ interface MeshComponentInfo {
39
+ id?: string;
40
+ title?: string;
41
+ category?: string;
42
+ }
43
+
33
44
  const componentName = ref("");
34
- const componentItem = ref(undefined);
45
+ const componentItem = ref<MeshComponentInfo | undefined>(undefined);
46
+
47
+ function asString(value: unknown): string | undefined {
48
+ return typeof value === "string" ? value : undefined;
49
+ }
35
50
 
36
51
  watch(
37
52
  () => menuStore.current_meta_data,
@@ -42,10 +57,12 @@ watch(
42
57
  return;
43
58
  }
44
59
 
45
- const modelId = newMeta.modelId || newMeta.id;
60
+ const modelId = asString(newMeta.modelId) ?? asString(newMeta.id);
46
61
  if (newMeta.pickedComponentId && modelId) {
47
62
  const components = await dataStore.getAllMeshComponents(modelId);
48
- const comp = components.find((component) => component.id === newMeta.pickedComponentId);
63
+ const comp = components.find(
64
+ (component: MeshComponentInfo) => component.id === newMeta.pickedComponentId,
65
+ );
49
66
  if (comp) {
50
67
  componentName.value = comp.title;
51
68
  componentItem.value = comp;
@@ -63,7 +80,7 @@ const cleanName = computed(() => {
63
80
  if (componentName.value && meta.viewer_type === "model_component") {
64
81
  return componentName.value;
65
82
  }
66
- return meta.name || "Unnamed Object";
83
+ return asString(meta.name) ?? "Unnamed Object";
67
84
  });
68
85
 
69
86
  const displayTitle = computed(() => {
@@ -86,7 +103,7 @@ const displayComponentTitle = computed(() => {
86
103
  );
87
104
  });
88
105
 
89
- async function copyId(targetId) {
106
+ async function copyId(targetId: string | undefined) {
90
107
  if (!targetId) {
91
108
  return;
92
109
  }
@@ -98,7 +115,7 @@ async function copyId(targetId) {
98
115
  }
99
116
  }
100
117
 
101
- function formatId(id) {
118
+ function formatId(id: string | undefined) {
102
119
  if (!id) {
103
120
  return "";
104
121
  }
@@ -1,10 +1,13 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import EdgedCurvePoints from "@ogw_front/assets/viewer_svgs/edged_curve_points.svg";
3
- import ViewerGenericMeshPointsOptions from "@ogw_front/components/Viewer/Generic/Mesh/PointsOptions";
3
+ import type { ItemProps } from "@ogw_front/components/Viewer/ContextMenu/ContextMenuItem.vue";
4
+ import ViewerGenericMeshPointsOptions from "@ogw_front/components/Viewer/Generic/Mesh/PointsOptions.vue";
4
5
 
5
- const { itemProps } = defineProps({
6
- itemProps: { type: Object, required: true },
7
- });
6
+ interface Props {
7
+ itemProps: ItemProps & { index?: number };
8
+ }
9
+
10
+ const { itemProps } = defineProps<Props>();
8
11
  </script>
9
12
 
10
13
  <template>