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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/.build/opengeodeweb_front_schemas.js +175 -0
  2. package/.build/server/utils/app_config.js +57 -0
  3. package/.build/server/utils/cleanup.js +135 -0
  4. package/.build/server/utils/cloud.js +156 -0
  5. package/.build/server/utils/microservices.js +153 -0
  6. package/.build/server/utils/path.js +108 -0
  7. package/.build/server/utils/scripts.js +134 -0
  8. package/.build/server/utils/server.js +44 -0
  9. package/.build/server/utils/server_config.js +51 -0
  10. package/.build/server/utils/stream.js +6 -0
  11. package/.build/server/utils/ws_client.js +100 -0
  12. package/.build/shared/app_mode.js +8 -0
  13. package/.build/shared/scripts.js +49 -0
  14. package/.build/shared/utils/call_raw.js +31 -0
  15. package/.build/shared/utils/call_schema.js +28 -0
  16. package/.build/shared/utils/fetch_raw.js +52 -0
  17. package/.build/shared/utils/fetch_schema.js +32 -0
  18. package/.build/shared/utils/file.js +14 -0
  19. package/.build/shared/utils/parse_boolean.js +23 -0
  20. package/.build/shared/utils/response_handlers/load.js +50 -0
  21. package/.build/shared/utils/types.js +1 -0
  22. package/.build/shared/utils/validate_schema.js +17 -0
  23. package/README.md +8 -0
  24. package/app/assets/{geode_objects.js → geode_objects.ts} +8 -1
  25. package/app/components/ActionButton.vue +28 -12
  26. package/app/components/Basic/Slider.vue +2 -2
  27. package/app/components/Basic/Switch.vue +2 -2
  28. package/app/components/CameraManager/List.vue +11 -11
  29. package/app/components/CameraManager/Saver.vue +8 -4
  30. package/app/components/CameraManager.vue +24 -12
  31. package/app/components/CameraOrientation.vue +31 -17
  32. package/app/components/ClippingPlaneCard.vue +13 -12
  33. package/app/components/ClippingPlanes.vue +31 -21
  34. package/app/components/CrsSelector.vue +26 -18
  35. package/app/components/DeleteDialog.vue +18 -16
  36. package/app/components/DragAndDrop.vue +55 -37
  37. package/app/components/DragAndDropInternal/DragAndDropInline.vue +31 -16
  38. package/app/components/DragAndDropInternal/DragAndDropOverlay.vue +32 -19
  39. package/app/components/ExtensionSelector.vue +34 -18
  40. package/app/components/FeedBack/ErrorBanner.vue +4 -3
  41. package/app/components/FeedBack/Snackers.vue +6 -5
  42. package/app/components/FetchingData.vue +8 -12
  43. package/app/components/FileSelector.vue +27 -17
  44. package/app/components/FileUploader.vue +51 -30
  45. package/app/components/GlassCard.vue +17 -13
  46. package/app/components/HybridRenderingView.vue +25 -12
  47. package/app/components/HybridViewerTooltip.vue +28 -26
  48. package/app/components/InfraConnected.vue +1 -1
  49. package/app/components/Launcher.vue +12 -10
  50. package/app/components/Loading/EcoMessages.vue +24 -13
  51. package/app/components/Loading/Header.vue +6 -7
  52. package/app/components/Loading/Progress.vue +6 -7
  53. package/app/components/Loading.vue +10 -14
  54. package/app/components/MissingFilesSelector.vue +35 -19
  55. package/app/components/ObjectSelector.vue +37 -21
  56. package/app/components/PackagesVersions.vue +16 -8
  57. package/app/components/Recaptcha.vue +17 -23
  58. package/app/components/RemoteRenderingView.vue +21 -15
  59. package/app/components/Ruler.vue +11 -9
  60. package/app/components/Screenshot.vue +25 -19
  61. package/app/components/SearchBar.vue +12 -6
  62. package/app/components/ShrinkFilter.vue +19 -14
  63. package/app/components/Step.vue +32 -12
  64. package/app/components/Stepper.vue +19 -7
  65. package/app/components/ToolPanel.vue +29 -13
  66. package/app/components/ViewToolbar.vue +53 -44
  67. package/app/components/Viewer/ContextMenu/CenterButton.vue +16 -9
  68. package/app/components/Viewer/ContextMenu/CircularItems.vue +13 -10
  69. package/app/components/Viewer/ContextMenu/ContextMenu.vue +40 -32
  70. package/app/components/Viewer/ContextMenu/ContextMenuItem.vue +31 -17
  71. package/app/components/Viewer/ContextMenu/InfoCard.vue +38 -22
  72. package/app/components/Viewer/EdgedCurve/PointsOptions.vue +8 -5
  73. package/app/components/Viewer/EdgedCurve/SpecificEdgesOptions.vue +67 -48
  74. package/app/components/Viewer/Generic/Mesh/CellsOptions.vue +74 -50
  75. package/app/components/Viewer/Generic/Mesh/EdgesOptions.vue +69 -50
  76. package/app/components/Viewer/Generic/Mesh/PointsOptions.vue +47 -35
  77. package/app/components/Viewer/Generic/Mesh/PolygonsOptions.vue +91 -51
  78. package/app/components/Viewer/Generic/Mesh/PolyhedraOptions.vue +74 -49
  79. package/app/components/Viewer/Generic/Model/BlocksOptions.vue +115 -53
  80. package/app/components/Viewer/Generic/Model/CornersOptions.vue +75 -37
  81. package/app/components/Viewer/Generic/Model/EdgesOptions.vue +13 -9
  82. package/app/components/Viewer/Generic/Model/LinesOptions.vue +110 -61
  83. package/app/components/Viewer/Generic/Model/ModelStyleCard.vue +32 -21
  84. package/app/components/Viewer/Generic/Model/ModelStyleOptions.vue +9 -5
  85. package/app/components/Viewer/Generic/Model/PointsOptions.vue +19 -13
  86. package/app/components/Viewer/Generic/Model/SurfacesOptions.vue +119 -49
  87. package/app/components/Viewer/Grid/2D/CellsOptions.vue +8 -5
  88. package/app/components/Viewer/Grid/2D/EdgesOptions.vue +8 -5
  89. package/app/components/Viewer/Grid/2D/PointsOptions.vue +8 -5
  90. package/app/components/Viewer/Grid/3D/CellsOptions.vue +8 -5
  91. package/app/components/Viewer/Grid/3D/EdgesOptions.vue +8 -5
  92. package/app/components/Viewer/Grid/3D/FacetsOptions.vue +8 -5
  93. package/app/components/Viewer/Grid/3D/PointsOptions.vue +8 -5
  94. package/app/components/Viewer/ObjectTree/Base/CommonTreeView.vue +120 -76
  95. package/app/components/Viewer/ObjectTree/Base/Controls.vue +25 -10
  96. package/app/components/Viewer/ObjectTree/Base/ItemLabel.vue +42 -17
  97. package/app/components/Viewer/ObjectTree/Base/StickyHeader.vue +22 -9
  98. package/app/components/Viewer/ObjectTree/Base/TreeRow.vue +29 -14
  99. package/app/components/Viewer/ObjectTree/Box.vue +32 -15
  100. package/app/components/Viewer/ObjectTree/Layout.vue +55 -35
  101. package/app/components/Viewer/ObjectTree/Views/GlobalObjects.vue +63 -34
  102. package/app/components/Viewer/ObjectTree/Views/{ModelCollections.vue → ModelTree.vue} +101 -39
  103. package/app/components/Viewer/Options/AttributeColorBar.vue +14 -6
  104. package/app/components/Viewer/Options/AttributeRangeSelector.vue +8 -4
  105. package/app/components/Viewer/Options/AttributeSelector.vue +64 -33
  106. package/app/components/Viewer/Options/ColorMapList.vue +52 -24
  107. package/app/components/Viewer/Options/ColorMapPicker.vue +15 -11
  108. package/app/components/Viewer/Options/ColorPicker.vue +239 -50
  109. package/app/components/Viewer/Options/ColoringTypeSelector.vue +87 -67
  110. package/app/components/Viewer/Options/ColormapQuickPicker.vue +16 -12
  111. package/app/components/Viewer/Options/OptionsSection.vue +7 -5
  112. package/app/components/Viewer/Options/Sliders/Size.vue +3 -3
  113. package/app/components/Viewer/Options/Sliders/Slider.vue +9 -6
  114. package/app/components/Viewer/Options/Sliders/Width.vue +3 -3
  115. package/app/components/Viewer/Options/TextureItem.vue +29 -22
  116. package/app/components/Viewer/Options/TexturesSelector.vue +23 -12
  117. package/app/components/Viewer/Options/VisibilitySwitch.vue +3 -3
  118. package/app/components/Viewer/OverlappingObjectsPicker.vue +27 -12
  119. package/app/components/Viewer/PointSet/SpecificPointsOptions.vue +38 -26
  120. package/app/components/Viewer/Solid/EdgesOptions.vue +8 -5
  121. package/app/components/Viewer/Solid/PointsOptions.vue +8 -5
  122. package/app/components/Viewer/Solid/PolygonsOptions.vue +8 -5
  123. package/app/components/Viewer/Solid/SpecificPolyhedraOptions.vue +73 -48
  124. package/app/components/Viewer/Surface/EdgesOptions.vue +8 -5
  125. package/app/components/Viewer/Surface/PointsOptions.vue +8 -5
  126. package/app/components/Viewer/Surface/PolygonsOptions.vue +79 -49
  127. package/app/components/Viewer/Surface/Triangulated/TrianglesOptions.vue +8 -5
  128. package/app/components/Viewer/TetrahedralSolid/TetrahedraOptions.vue +8 -5
  129. package/app/components/Viewer/TetrahedralSolid/TrianglesOptions.vue +8 -5
  130. package/app/components/Viewer/Ui.vue +19 -14
  131. package/app/components/Wrapper.vue +16 -10
  132. package/app/components/ZScaling.vue +18 -10
  133. package/app/components/csv-preview/CsvPreviewer.vue +72 -50
  134. package/app/components/csv-preview/CsvSettings.vue +30 -50
  135. package/app/components/csv-preview/CsvTable.vue +34 -14
  136. package/app/composables/{batch_style.js → batch_style.ts} +9 -7
  137. package/app/composables/clipping_planes_widget.ts +204 -0
  138. package/app/composables/clipping_planes_widget_entries.ts +189 -0
  139. package/app/composables/copy_to_clipboard.ts +7 -0
  140. package/app/composables/global_attribute_style.ts +303 -0
  141. package/app/composables/hover_highlight.ts +127 -0
  142. package/app/composables/{model_collections.js → model_collections.ts} +28 -9
  143. package/app/composables/{model_components.js → model_components.ts} +28 -9
  144. package/app/composables/{project_manager.js → project_manager.ts} +77 -20
  145. package/app/composables/responsive_middle_truncate.ts +48 -0
  146. package/app/composables/{run_function_when_microservices_connected.js → run_function_when_microservices_connected.ts} +1 -1
  147. package/app/composables/stepper_tree.ts +79 -0
  148. package/app/composables/tree_filter.ts +194 -0
  149. package/app/composables/{tree_keyboard_nav.js → tree_keyboard_nav.ts} +62 -20
  150. package/app/composables/{tree_scroll.js → tree_scroll.ts} +61 -12
  151. package/app/composables/use_adaptive_styles.ts +186 -0
  152. package/app/composables/use_overlapping_picker.ts +263 -0
  153. package/app/composables/use_quick_colormap.ts +55 -0
  154. package/app/composables/virtual_tree.ts +271 -0
  155. package/app/composables/vtk_implicit_plane_widget.d.ts +2 -0
  156. package/app/plugins/{auto_store_register.js → auto_store_register.ts} +3 -5
  157. package/app/plugins/click_outside_ignore_snackbars.client.ts +36 -0
  158. package/app/stores/app.ts +252 -0
  159. package/app/stores/app_helpers/extension.ts +179 -0
  160. package/app/stores/{back.js → back.ts} +54 -28
  161. package/app/stores/camera_manager.ts +80 -0
  162. package/app/stores/{cloud.js → cloud.ts} +18 -13
  163. package/app/stores/data.ts +392 -0
  164. package/app/stores/data_helpers/collections.ts +138 -0
  165. package/app/stores/data_helpers/mesh.ts +169 -0
  166. package/app/stores/data_style.ts +167 -0
  167. package/app/stores/{feedback.js → feedback.ts} +19 -8
  168. package/app/stores/{hybrid_viewer.js → hybrid_viewer.ts} +49 -45
  169. package/app/stores/infra.ts +106 -0
  170. package/app/stores/{menu.js → menu.ts} +67 -36
  171. package/app/stores/treeview.ts +383 -0
  172. package/app/stores/{viewer.js → viewer.ts} +75 -42
  173. package/app/utils/attributes.ts +40 -0
  174. package/app/utils/clipping_planes.ts +222 -0
  175. package/app/utils/color_picker.js +54 -0
  176. package/app/utils/colormap.ts +102 -0
  177. package/app/utils/default_styles/{constants.js → constants.ts} +25 -12
  178. package/app/utils/default_styles/{index.js → index.ts} +4 -3
  179. package/app/utils/default_styles/meshes.ts +264 -0
  180. package/app/utils/default_styles/{models.js → models.ts} +106 -52
  181. package/app/utils/{extension.js → extension.ts} +63 -19
  182. package/app/utils/{import_workflow.js → import_workflow.ts} +39 -22
  183. package/app/utils/{log.js → log.ts} +12 -2
  184. package/app/utils/{name_cleaner.js → name_cleaner.ts} +6 -6
  185. package/app/utils/status.ts +19 -0
  186. package/app/utils/{stores.js → stores.ts} +5 -5
  187. package/app/utils/{string.js → string.ts} +6 -6
  188. package/app/utils/{treeview.js → treeview.ts} +4 -1
  189. package/internal/database/{base_database.js → base_database.ts} +7 -3
  190. package/internal/database/database.ts +102 -0
  191. package/internal/database/{extended_database.js → extended_database.ts} +5 -1
  192. package/internal/database/tables/camera_positions.ts +6 -0
  193. package/internal/database/tables/{data.js → data.ts} +3 -1
  194. package/internal/database/tables/data_style.ts +6 -0
  195. package/internal/database/tables/model_component_datastyle.ts +6 -0
  196. package/internal/database/tables/model_component_type_datastyle.ts +6 -0
  197. package/internal/database/tables/model_components.ts +6 -0
  198. package/internal/database/tables/model_components_relation.ts +6 -0
  199. package/internal/database/tables/table_definition.ts +5 -0
  200. package/internal/stores/data_style/mesh/cells/cell.ts +279 -0
  201. package/internal/stores/data_style/mesh/cells/{color.js → color.ts} +13 -7
  202. package/internal/stores/data_style/mesh/cells/common.ts +50 -0
  203. package/internal/stores/data_style/mesh/cells/index.ts +161 -0
  204. package/internal/stores/data_style/mesh/cells/{textures.js → textures.ts} +14 -8
  205. package/internal/stores/data_style/mesh/cells/vertex.ts +285 -0
  206. package/internal/stores/data_style/mesh/cells/visibility.ts +46 -0
  207. package/internal/stores/data_style/mesh/edges/{color.js → color.ts} +13 -7
  208. package/internal/stores/data_style/mesh/edges/common.ts +41 -0
  209. package/internal/stores/data_style/mesh/edges/edge.ts +279 -0
  210. package/internal/stores/data_style/mesh/edges/index.ts +155 -0
  211. package/internal/stores/data_style/mesh/edges/vertex.ts +285 -0
  212. package/internal/stores/data_style/mesh/edges/visibility.ts +45 -0
  213. package/internal/stores/data_style/mesh/edges/width.ts +42 -0
  214. package/internal/stores/data_style/mesh/{index.js → index.ts} +34 -14
  215. package/internal/stores/data_style/mesh/points/{color.js → color.ts} +13 -7
  216. package/internal/stores/data_style/mesh/points/common.ts +51 -0
  217. package/internal/stores/data_style/mesh/points/index.ts +133 -0
  218. package/internal/stores/data_style/mesh/points/size.ts +43 -0
  219. package/internal/stores/data_style/mesh/points/vertex.ts +285 -0
  220. package/internal/stores/data_style/mesh/points/visibility.ts +49 -0
  221. package/internal/stores/data_style/mesh/polygons/{color.js → color.ts} +13 -7
  222. package/internal/stores/data_style/mesh/polygons/common.ts +50 -0
  223. package/internal/stores/data_style/mesh/polygons/index.ts +167 -0
  224. package/internal/stores/data_style/mesh/polygons/polygon.ts +282 -0
  225. package/internal/stores/data_style/mesh/polygons/{textures.js → textures.ts} +14 -8
  226. package/internal/stores/data_style/mesh/polygons/vertex.ts +288 -0
  227. package/internal/stores/data_style/mesh/polygons/visibility.ts +48 -0
  228. package/internal/stores/data_style/mesh/polyhedra/{color.js → color.ts} +13 -7
  229. package/internal/stores/data_style/mesh/polyhedra/common.ts +41 -0
  230. package/internal/stores/data_style/mesh/polyhedra/index.ts +157 -0
  231. package/internal/stores/data_style/mesh/polyhedra/polyhedron.ts +294 -0
  232. package/internal/stores/data_style/mesh/polyhedra/vertex.ts +288 -0
  233. package/internal/stores/data_style/mesh/polyhedra/visibility.ts +48 -0
  234. package/internal/stores/data_style/model/blocks/{color.js → color.ts} +50 -13
  235. package/internal/stores/data_style/model/blocks/common.ts +67 -0
  236. package/internal/stores/data_style/model/blocks/{index.js → index.ts} +111 -66
  237. package/internal/stores/data_style/model/blocks/polyhedron.ts +363 -0
  238. package/internal/stores/data_style/model/blocks/vertex.ts +349 -0
  239. package/internal/stores/data_style/model/blocks/visibility.ts +37 -0
  240. package/internal/stores/data_style/model/color.ts +348 -0
  241. package/internal/stores/data_style/model/common.ts +262 -0
  242. package/internal/stores/data_style/model/corners/{color.js → color.ts} +49 -10
  243. package/internal/stores/data_style/model/corners/common.ts +71 -0
  244. package/internal/stores/data_style/model/corners/{index.js → index.ts} +86 -47
  245. package/internal/stores/data_style/model/corners/vertex.ts +315 -0
  246. package/internal/stores/data_style/model/corners/visibility.ts +39 -0
  247. package/internal/stores/data_style/model/edges/common.ts +29 -0
  248. package/internal/stores/data_style/model/edges/{index.js → index.ts} +2 -7
  249. package/internal/stores/data_style/model/edges/visibility.ts +55 -0
  250. package/internal/stores/data_style/model/{index.js → index.ts} +24 -11
  251. package/internal/stores/data_style/model/lines/{color.js → color.ts} +47 -10
  252. package/internal/stores/data_style/model/lines/common.ts +63 -0
  253. package/internal/stores/data_style/model/lines/edge.ts +343 -0
  254. package/internal/stores/data_style/model/lines/{index.js → index.ts} +108 -66
  255. package/internal/stores/data_style/model/lines/vertex.ts +344 -0
  256. package/internal/stores/data_style/model/lines/visibility.ts +37 -0
  257. package/internal/stores/data_style/model/points/common.ts +25 -0
  258. package/internal/stores/data_style/model/points/index.ts +35 -0
  259. package/internal/stores/data_style/model/points/size.ts +44 -0
  260. package/internal/stores/data_style/model/points/visibility.ts +46 -0
  261. package/internal/stores/data_style/model/selection.ts +138 -0
  262. package/internal/stores/data_style/model/surfaces/{color.js → color.ts} +47 -10
  263. package/internal/stores/data_style/model/surfaces/common.ts +69 -0
  264. package/internal/stores/data_style/model/surfaces/{index.js → index.ts} +113 -66
  265. package/internal/stores/data_style/model/surfaces/polygon.ts +347 -0
  266. package/internal/stores/data_style/model/surfaces/vertex.ts +351 -0
  267. package/internal/stores/data_style/model/surfaces/visibility.ts +37 -0
  268. package/internal/stores/data_style/model/{visibility.js → visibility.ts} +112 -32
  269. package/internal/stores/data_style/state.ts +281 -0
  270. package/internal/stores/data_style/types.ts +30 -0
  271. package/internal/stores/hybrid_viewer/brightness.ts +124 -0
  272. package/internal/stores/hybrid_viewer/camera.ts +326 -0
  273. package/internal/stores/hybrid_viewer/{camera_animation.js → camera_animation.ts} +30 -12
  274. package/internal/stores/hybrid_viewer/{constants.js → constants.ts} +2 -2
  275. package/internal/stores/hybrid_viewer/core.ts +64 -0
  276. package/internal/stores/hybrid_viewer/{filters.js → filters.ts} +10 -13
  277. package/internal/stores/hybrid_viewer/highlight.ts +183 -0
  278. package/internal/stores/hybrid_viewer/{ruler.js → ruler.ts} +50 -22
  279. package/internal/stores/hybrid_viewer/scene.ts +125 -0
  280. package/internal/stores/hybrid_viewer/viewport.ts +177 -0
  281. package/internal/stores/hybrid_viewer/vtk_types.ts +58 -0
  282. package/internal/utils/api_fetch.ts +133 -0
  283. package/internal/utils/upload_file.ts +115 -0
  284. package/internal/utils/viewer_call.ts +99 -0
  285. package/internal/utils/ws_client.ts +54 -0
  286. package/nuxt.config.ts +168 -0
  287. package/opengeodeweb_front_schemas.json +2 -2
  288. package/package.json +49 -13
  289. package/server/api/cloud/extensions/{run.post.js → run.post.ts} +16 -12
  290. package/server/api/local/app/project_folder_path.post.ts +33 -0
  291. package/server/api/local/app/run_back.post.ts +39 -0
  292. package/server/api/local/app/run_viewer.post.ts +39 -0
  293. package/server/api/local/extensions/{kill.post.js → kill.post.ts} +15 -8
  294. package/server/api/local/extensions/{run.post.js → run.post.ts} +17 -12
  295. package/server/api/local/extensions/upload.put.ts +71 -0
  296. package/server/api/microservice/app/{get_is_app_ready.get.js → get_is_app_ready.get.ts} +5 -5
  297. package/server/api/microservice/app/schemas/get_is_app_ready.json +1 -1
  298. package/server/api/microservice/app/set_app_base_url.post.ts +29 -0
  299. package/server/api/microservice/app/set_back_base_url.post.ts +26 -0
  300. package/server/api/microservice/app/set_is_app_ready.post.ts +29 -0
  301. package/server/api/microservice/app/set_viewer_base_url.post.ts +26 -0
  302. package/server/api/microservice/extensions/{download.post.js → download.post.ts} +13 -6
  303. package/server/api/serverless/run_cloud.post.ts +92 -0
  304. package/server/utils/{app_config.js → app_config.ts} +40 -18
  305. package/server/utils/{cleanup.js → cleanup.ts} +76 -29
  306. package/server/utils/{cloud.js → cloud.ts} +33 -17
  307. package/server/utils/{extension.js → extension.ts} +31 -4
  308. package/server/utils/{microservices.js → microservices.ts} +68 -27
  309. package/server/utils/{path.js → path.ts} +36 -17
  310. package/server/utils/{scripts.js → scripts.ts} +49 -33
  311. package/server/utils/{server.js → server.ts} +13 -6
  312. package/server/utils/server_config.ts +74 -0
  313. package/server/utils/stream.ts +6 -0
  314. package/server/utils/ws_client.ts +165 -0
  315. package/shared/{scripts.js → scripts.ts} +15 -10
  316. package/shared/utils/call_raw.ts +73 -0
  317. package/shared/utils/{call_schema.js → call_schema.ts} +15 -6
  318. package/shared/utils/fetch_raw.ts +125 -0
  319. package/shared/utils/{fetch_schema.js → fetch_schema.ts} +16 -7
  320. package/shared/utils/file.ts +22 -0
  321. package/shared/utils/{parse_boolean.js → parse_boolean.ts} +1 -1
  322. package/shared/utils/response_handlers/load.ts +109 -0
  323. package/shared/utils/types.ts +27 -0
  324. package/shared/utils/{validate_schema.js → validate_schema.ts} +3 -1
  325. package/.github/workflows/config.json +0 -5
  326. package/.github/workflows/deploy.yml +0 -15
  327. package/.github/workflows/manual_release.yml +0 -11
  328. package/.github/workflows/merge_request.yml +0 -9
  329. package/.github/workflows/pr_update.yml +0 -11
  330. package/.github/workflows/prepare_deploy.yml +0 -9
  331. package/.github/workflows/schedule.yml +0 -18
  332. package/.github/workflows/test.yml +0 -14
  333. package/.github/workflows/test_pr.yml +0 -12
  334. package/.oxlintrc.json +0 -150
  335. package/.releaserc +0 -11
  336. package/app/components/Viewer/ObjectTree/Views/ModelComponents.vue +0 -224
  337. package/app/composables/clipping_planes_widget.js +0 -249
  338. package/app/composables/global_attribute_style.js +0 -181
  339. package/app/composables/hover_highlight.js +0 -91
  340. package/app/composables/responsive_middle_truncate.js +0 -34
  341. package/app/composables/stepper_tree.js +0 -56
  342. package/app/composables/tree_filter.js +0 -138
  343. package/app/composables/use_adaptive_styles.js +0 -120
  344. package/app/composables/use_overlapping_picker.js +0 -169
  345. package/app/composables/use_quick_colormap.js +0 -32
  346. package/app/composables/virtual_tree.js +0 -191
  347. package/app/stores/app.js +0 -326
  348. package/app/stores/camera_manager.js +0 -57
  349. package/app/stores/data.js +0 -278
  350. package/app/stores/data_helpers/collections.js +0 -96
  351. package/app/stores/data_helpers/mesh.js +0 -122
  352. package/app/stores/data_style.js +0 -116
  353. package/app/stores/infra.js +0 -95
  354. package/app/stores/treeview.js +0 -290
  355. package/app/utils/attributes.js +0 -23
  356. package/app/utils/clipping_planes.js +0 -110
  357. package/app/utils/colormap.js +0 -64
  358. package/app/utils/default_styles/meshes.js +0 -191
  359. package/app/utils/status.js +0 -10
  360. package/commitlint.config.js +0 -20
  361. package/internal/database/database.js +0 -80
  362. package/internal/database/tables/camera_positions.js +0 -4
  363. package/internal/database/tables/data_style.js +0 -4
  364. package/internal/database/tables/model_component_datastyle.js +0 -4
  365. package/internal/database/tables/model_component_type_datastyle.js +0 -4
  366. package/internal/database/tables/model_components.js +0 -4
  367. package/internal/database/tables/model_components_relation.js +0 -4
  368. package/internal/stores/data_style/mesh/cells/cell.js +0 -196
  369. package/internal/stores/data_style/mesh/cells/common.js +0 -39
  370. package/internal/stores/data_style/mesh/cells/index.js +0 -81
  371. package/internal/stores/data_style/mesh/cells/vertex.js +0 -193
  372. package/internal/stores/data_style/mesh/cells/visibility.js +0 -35
  373. package/internal/stores/data_style/mesh/edges/common.js +0 -32
  374. package/internal/stores/data_style/mesh/edges/edge.js +0 -195
  375. package/internal/stores/data_style/mesh/edges/index.js +0 -81
  376. package/internal/stores/data_style/mesh/edges/vertex.js +0 -196
  377. package/internal/stores/data_style/mesh/edges/visibility.js +0 -34
  378. package/internal/stores/data_style/mesh/edges/width.js +0 -34
  379. package/internal/stores/data_style/mesh/points/common.js +0 -37
  380. package/internal/stores/data_style/mesh/points/index.js +0 -82
  381. package/internal/stores/data_style/mesh/points/size.js +0 -35
  382. package/internal/stores/data_style/mesh/points/vertex.js +0 -193
  383. package/internal/stores/data_style/mesh/points/visibility.js +0 -37
  384. package/internal/stores/data_style/mesh/polygons/common.js +0 -32
  385. package/internal/stores/data_style/mesh/polygons/index.js +0 -107
  386. package/internal/stores/data_style/mesh/polygons/polygon.js +0 -196
  387. package/internal/stores/data_style/mesh/polygons/vertex.js +0 -196
  388. package/internal/stores/data_style/mesh/polygons/visibility.js +0 -38
  389. package/internal/stores/data_style/mesh/polyhedra/common.js +0 -32
  390. package/internal/stores/data_style/mesh/polyhedra/index.js +0 -98
  391. package/internal/stores/data_style/mesh/polyhedra/polyhedron.js +0 -196
  392. package/internal/stores/data_style/mesh/polyhedra/vertex.js +0 -196
  393. package/internal/stores/data_style/mesh/polyhedra/visibility.js +0 -38
  394. package/internal/stores/data_style/model/blocks/common.js +0 -51
  395. package/internal/stores/data_style/model/blocks/polyhedron.js +0 -215
  396. package/internal/stores/data_style/model/blocks/vertex.js +0 -204
  397. package/internal/stores/data_style/model/blocks/visibility.js +0 -20
  398. package/internal/stores/data_style/model/color.js +0 -218
  399. package/internal/stores/data_style/model/common.js +0 -141
  400. package/internal/stores/data_style/model/corners/common.js +0 -51
  401. package/internal/stores/data_style/model/corners/vertex.js +0 -204
  402. package/internal/stores/data_style/model/corners/visibility.js +0 -20
  403. package/internal/stores/data_style/model/edges/common.js +0 -20
  404. package/internal/stores/data_style/model/edges/visibility.js +0 -38
  405. package/internal/stores/data_style/model/lines/common.js +0 -51
  406. package/internal/stores/data_style/model/lines/edge.js +0 -203
  407. package/internal/stores/data_style/model/lines/vertex.js +0 -204
  408. package/internal/stores/data_style/model/lines/visibility.js +0 -20
  409. package/internal/stores/data_style/model/points/common.js +0 -20
  410. package/internal/stores/data_style/model/points/index.js +0 -25
  411. package/internal/stores/data_style/model/points/size.js +0 -36
  412. package/internal/stores/data_style/model/points/visibility.js +0 -36
  413. package/internal/stores/data_style/model/selection.js +0 -89
  414. package/internal/stores/data_style/model/surfaces/common.js +0 -51
  415. package/internal/stores/data_style/model/surfaces/polygon.js +0 -215
  416. package/internal/stores/data_style/model/surfaces/vertex.js +0 -215
  417. package/internal/stores/data_style/model/surfaces/visibility.js +0 -20
  418. package/internal/stores/data_style/state.js +0 -197
  419. package/internal/stores/hybrid_viewer/brightness.js +0 -82
  420. package/internal/stores/hybrid_viewer/camera.js +0 -274
  421. package/internal/stores/hybrid_viewer/highlight.js +0 -170
  422. package/internal/stores/hybrid_viewer/scene.js +0 -136
  423. package/internal/stores/hybrid_viewer/viewport.js +0 -140
  424. package/internal/utils/api_fetch.js +0 -52
  425. package/internal/utils/upload_file.js +0 -57
  426. package/internal/utils/viewer_call.js +0 -49
  427. package/internal/utils/ws_client.js +0 -29
  428. package/nuxt.config.js +0 -106
  429. package/scripts/generate_geode_objects.js +0 -24
  430. package/server/api/local/app/project_folder_path.post.js +0 -29
  431. package/server/api/local/app/run_back.post.js +0 -33
  432. package/server/api/local/app/run_viewer.post.js +0 -33
  433. package/server/api/local/extensions/upload.put.js +0 -72
  434. package/server/api/microservice/app/set_app_base_url.post.js +0 -25
  435. package/server/api/microservice/app/set_back_base_url.post.js +0 -22
  436. package/server/api/microservice/app/set_is_app_ready.post.js +0 -25
  437. package/server/api/microservice/app/set_viewer_base_url.post.js +0 -22
  438. package/server/api/serverless/run_cloud.post.js +0 -44
  439. package/server/utils/server_config.js +0 -58
  440. package/server/utils/ws_client.js +0 -112
  441. package/shared/utils/call_raw.js +0 -46
  442. package/shared/utils/fetch_raw.js +0 -61
  443. package/shared/utils/file.js +0 -16
  444. package/shared/utils/response_handlers/load.js +0 -74
  445. package/tests/integration/data/uploads/test.og_brep +0 -0
  446. package/tests/integration/data/uploads/test.og_edc2d +0 -0
  447. package/tests/integration/data/uploads/test.og_edc3d +0 -0
  448. package/tests/integration/data/uploads/test.og_psf3d +0 -0
  449. package/tests/integration/data/uploads/test.og_rgd2d +0 -0
  450. package/tests/integration/data/uploads/test.og_rgd3d +0 -0
  451. package/tests/integration/data/uploads/test.vtu +0 -22
  452. package/tests/integration/setup.js +0 -92
  453. package/tests/integration/stores/data_style/mesh/cells.nuxt.test.js +0 -343
  454. package/tests/integration/stores/data_style/mesh/edges.nuxt.test.js +0 -254
  455. package/tests/integration/stores/data_style/mesh/index.nuxt.test.js +0 -62
  456. package/tests/integration/stores/data_style/mesh/points.nuxt.test.js +0 -201
  457. package/tests/integration/stores/data_style/mesh/polygons.nuxt.test.js +0 -260
  458. package/tests/integration/stores/data_style/mesh/polyhedra.nuxt.test.js +0 -267
  459. package/tests/integration/stores/data_style/model/blocks.nuxt.test.js +0 -397
  460. package/tests/integration/stores/data_style/model/corners.nuxt.test.js +0 -264
  461. package/tests/integration/stores/data_style/model/edges.nuxt.test.js +0 -71
  462. package/tests/integration/stores/data_style/model/index.nuxt.test.js +0 -92
  463. package/tests/integration/stores/data_style/model/lines.nuxt.test.js +0 -379
  464. package/tests/integration/stores/data_style/model/points.nuxt.test.js +0 -95
  465. package/tests/integration/stores/data_style/model/surfaces.nuxt.test.js +0 -574
  466. package/tests/integration/stores/viewer.nuxt.test.js +0 -69
  467. package/tests/setup_indexeddb.js +0 -4
  468. package/tests/unit/components/CrsSelector.nuxt.test.js +0 -55
  469. package/tests/unit/components/DragAndDrop.nuxt.test.js +0 -89
  470. package/tests/unit/components/ExtensionSelector.nuxt.test.js +0 -65
  471. package/tests/unit/components/FeedBack/ErrorsBanner.nuxt.test.js +0 -41
  472. package/tests/unit/components/FeedBack/Snackers.nuxt.test.js +0 -49
  473. package/tests/unit/components/FileSelector.nuxt.test.js +0 -124
  474. package/tests/unit/components/FileUploader.nuxt.test.js +0 -69
  475. package/tests/unit/components/MissingFilesSelector.nuxt.test.js +0 -77
  476. package/tests/unit/components/ObjectSelector.nuxt.test.js +0 -118
  477. package/tests/unit/components/PackagesVersions.nuxt.test.js +0 -42
  478. package/tests/unit/components/Step.nuxt.test.js +0 -51
  479. package/tests/unit/components/Stepper.nuxt.test.js +0 -41
  480. package/tests/unit/components/ToolPanel.nuxt.test.js +0 -66
  481. package/tests/unit/composables/api_fetch.nuxt.test.js +0 -75
  482. package/tests/unit/composables/project_manager.nuxt.test.js +0 -299
  483. package/tests/unit/composables/run_function_when_microservices_connected.nuxt.test.js +0 -57
  484. package/tests/unit/composables/upload_file.nuxt.test.js +0 -45
  485. package/tests/unit/composables/virtual_tree.nuxt.test.js +0 -63
  486. package/tests/unit/plugins/project_load.nuxt.test.js +0 -98
  487. package/tests/unit/stores/app.nuxt.test.js +0 -189
  488. package/tests/unit/stores/back.nuxt.test.js +0 -147
  489. package/tests/unit/stores/cloud.nuxt.test.js +0 -90
  490. package/tests/unit/stores/data.nuxt.test.js +0 -162
  491. package/tests/unit/stores/feedback.nuxt.test.js +0 -90
  492. package/tests/unit/stores/infra.nuxt.test.js +0 -313
  493. package/tests/unit/stores/treeview.nuxt.test.js +0 -63
  494. package/tests/unit/stores/viewer.nuxt.test.js +0 -161
  495. package/tests/unit/utils/validate_schema.nuxt.test.js +0 -38
  496. package/tests/utils.js +0 -20
  497. package/tests/vitest.config.js +0 -67
  498. /package/server/api/local/app/{kill.post.js → kill.post.ts} +0 -0
  499. /package/shared/{app_mode.js → app_mode.ts} +0 -0
@@ -0,0 +1,222 @@
1
+ import type { Bounds } from "@kitware/vtk.js/types";
2
+ import type vtkActor from "@kitware/vtk.js/Rendering/Core/Actor";
3
+ import type { vtkCamera } from "@kitware/vtk.js/Rendering/Core/Camera";
4
+
5
+ const AXIS_SCALE = 0.45;
6
+ const SIZE_RATIO = 0.1;
7
+ const DEBOUNCE_DELAY = 200;
8
+ const CHANGE_THRESHOLD = 1e-4;
9
+ // oxlint-disable no-magic-numbers
10
+ const COLOR_BLUE = [0.12, 0.53, 0.9];
11
+ const COLOR_GREEN = [0.26, 0.63, 0.28];
12
+ const COLOR_ORANGE = [0.98, 0.55, 0];
13
+ const COLOR_PURPLE = [0.55, 0.14, 0.67];
14
+ const COLOR_RED = [0.9, 0.22, 0.21];
15
+ // oxlint-enable no-magic-numbers
16
+ const PLANE_COLORS = [COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_PURPLE, COLOR_RED];
17
+ const NORMAL_X = [1, 0, 0];
18
+ const NORMAL_Y = [0, 1, 0];
19
+ const NORMAL_Z = [0, 0, 1];
20
+ const DEFAULT_NORMALS = [NORMAL_X, NORMAL_Y, NORMAL_Z];
21
+ const RGB_MAX_VALUE = 255;
22
+
23
+ function getPlaneCssColor(index: number): string {
24
+ const rgb = PLANE_COLORS[index % PLANE_COLORS.length] ?? COLOR_BLUE;
25
+ return `rgb(${rgb.map((channel) => Math.round(channel * RGB_MAX_VALUE)).join(",")})`;
26
+ }
27
+
28
+ function hasPlaneChanged(
29
+ origin: readonly number[],
30
+ normal: readonly number[],
31
+ currentOrigin: readonly number[] | undefined,
32
+ currentNormal: readonly number[] | undefined,
33
+ ): boolean {
34
+ if (!currentOrigin) {
35
+ return true;
36
+ }
37
+ return (
38
+ origin.some((val, idx) => Math.abs(val - (currentOrigin[idx] ?? 0)) > CHANGE_THRESHOLD) ||
39
+ normal.some((val, idx) => Math.abs(val - (currentNormal?.[idx] ?? 0)) > CHANGE_THRESHOLD)
40
+ );
41
+ }
42
+
43
+ interface PlaneVisualState {
44
+ readonly plane: { readonly opacity: number; readonly color: readonly number[] };
45
+ readonly normal: { readonly opacity: number; readonly color: readonly number[] };
46
+ readonly origin: { readonly opacity: number; readonly color: readonly number[] };
47
+ }
48
+
49
+ interface PlaneStyle {
50
+ readonly active: PlaneVisualState;
51
+ readonly inactive: PlaneVisualState;
52
+ readonly static: {
53
+ readonly display2D: { readonly representation: number };
54
+ readonly outline: {
55
+ readonly color: readonly number[];
56
+ readonly opacity: number;
57
+ readonly representation: number;
58
+ readonly interpolation: number;
59
+ };
60
+ };
61
+ }
62
+
63
+ function getPlaneStyle(rgb: readonly number[]): PlaneStyle {
64
+ return {
65
+ active: {
66
+ plane: { opacity: 1, color: rgb },
67
+ normal: { opacity: 1, color: rgb },
68
+ origin: { opacity: 1, color: rgb },
69
+ },
70
+ inactive: {
71
+ plane: { opacity: 0.5, color: rgb },
72
+ normal: { opacity: 1, color: rgb },
73
+ origin: { opacity: 1, color: rgb },
74
+ },
75
+ static: {
76
+ display2D: { representation: 0 },
77
+ outline: { color: [1, 1, 1], opacity: 1, representation: 1, interpolation: 0 },
78
+ },
79
+ };
80
+ }
81
+
82
+ function computeSceneBounds(actors: readonly vtkActor[]): Bounds {
83
+ let bounds: Bounds = [Infinity, -Infinity, Infinity, -Infinity, Infinity, -Infinity];
84
+ for (const actor of actors) {
85
+ const boundsOfActor = actor.getBounds();
86
+ bounds = [
87
+ Math.min(bounds[0], boundsOfActor[0]),
88
+ Math.max(bounds[1], boundsOfActor[1]),
89
+ Math.min(bounds[2], boundsOfActor[2]),
90
+ Math.max(bounds[3], boundsOfActor[3]),
91
+ Math.min(bounds[4], boundsOfActor[4]),
92
+ Math.max(bounds[5], boundsOfActor[5]),
93
+ ];
94
+ }
95
+ return bounds;
96
+ }
97
+
98
+ interface SceneBoundsInfo {
99
+ readonly center: readonly number[];
100
+ readonly cubicBounds: readonly number[];
101
+ }
102
+
103
+ function computeSceneBoundsInfo(actors: readonly vtkActor[]): SceneBoundsInfo {
104
+ if (actors.length === 0) {
105
+ return { center: [0, 0, 0], cubicBounds: [-1, 1, -1, 1, -1, 1] };
106
+ }
107
+ const [xmin, xmax, ymin, ymax, zmin, zmax] = computeSceneBounds(actors);
108
+ const center = [
109
+ Number(((xmin + xmax) / 2).toFixed(4)),
110
+ Number(((ymin + ymax) / 2).toFixed(4)),
111
+ Number(((zmin + zmax) / 2).toFixed(4)),
112
+ ];
113
+
114
+ const maxActorExtent = Math.max(
115
+ ...actors.map((actor: vtkActor) => {
116
+ const bounds = actor.getBounds();
117
+ return Math.max(bounds[1] - bounds[0], bounds[3] - bounds[2], bounds[5] - bounds[4]);
118
+ }),
119
+ );
120
+ const halfExtent = maxActorExtent / 2;
121
+ const [centerX = 0, centerY = 0, centerZ = 0] = center;
122
+ const cubicBounds = [
123
+ centerX - halfExtent,
124
+ centerX + halfExtent,
125
+ centerY - halfExtent,
126
+ centerY + halfExtent,
127
+ centerZ - halfExtent,
128
+ centerZ + halfExtent,
129
+ ];
130
+ return { center, cubicBounds };
131
+ }
132
+
133
+ interface ActorEntry {
134
+ readonly actor: vtkActor;
135
+ }
136
+
137
+ interface MainCameraOptions {
138
+ readonly focal_point?: readonly number[];
139
+ readonly position?: readonly number[];
140
+ readonly view_up?: readonly number[];
141
+ }
142
+
143
+ function resolveActiveActors(
144
+ targetAllVisible: boolean,
145
+ allItems: readonly { readonly id: string }[],
146
+ selectedDatasetIds: readonly string[],
147
+ hybridDb: Record<string, ActorEntry | undefined>,
148
+ ): vtkActor[] {
149
+ const targetIds = targetAllVisible
150
+ ? allItems.map((item: { id: string }) => item.id)
151
+ : selectedDatasetIds;
152
+ const targeted = targetIds
153
+ .map((id) => hybridDb[id]?.actor)
154
+ .filter((actor: vtkActor | undefined): actor is vtkActor => actor !== undefined);
155
+ if (targeted.length > 0) {
156
+ return targeted;
157
+ }
158
+ return Object.values(hybridDb)
159
+ .filter((entry: ActorEntry | undefined): entry is ActorEntry => entry !== undefined)
160
+ .map((entry: ActorEntry) => entry.actor);
161
+ }
162
+
163
+ function computeNormalizedViewDirection(
164
+ focalPoint: readonly number[],
165
+ position: readonly number[],
166
+ ): readonly number[] | undefined {
167
+ const dir = [
168
+ (position[0] ?? 0) - (focalPoint[0] ?? 0),
169
+ (position[1] ?? 0) - (focalPoint[1] ?? 0),
170
+ (position[2] ?? 0) - (focalPoint[2] ?? 0),
171
+ ];
172
+ const dirLen = Math.hypot(...dir);
173
+ if (dirLen === 0) {
174
+ return undefined;
175
+ }
176
+ return dir.map((component) => component / dirLen);
177
+ }
178
+
179
+ // Aligns the local clipping-plane preview camera onto the same viewing direction as the
180
+ // Main viewer camera, re-centered on the clipped scene's bounds.
181
+ function alignCameraToMainCamera(
182
+ camera: vtkCamera,
183
+ mainCam: MainCameraOptions,
184
+ center: readonly number[],
185
+ ): void {
186
+ if (!mainCam.focal_point || !mainCam.position) {
187
+ return;
188
+ }
189
+ const normDir = computeNormalizedViewDirection(mainCam.focal_point, mainCam.position);
190
+ if (!normDir) {
191
+ return;
192
+ }
193
+ const distance = camera.getDistance();
194
+ camera.setFocalPoint(center[0] ?? 0, center[1] ?? 0, center[2] ?? 0);
195
+ camera.setPosition(
196
+ (center[0] ?? 0) + (normDir[0] ?? 0) * distance,
197
+ (center[1] ?? 0) + (normDir[1] ?? 0) * distance,
198
+ (center[2] ?? 0) + (normDir[2] ?? 0) * distance,
199
+ );
200
+ if (mainCam.view_up) {
201
+ const [viewUpX = 0, viewUpY = 0, viewUpZ = 0] = mainCam.view_up;
202
+ camera.setViewUp(viewUpX, viewUpY, viewUpZ);
203
+ }
204
+ }
205
+
206
+ export {
207
+ AXIS_SCALE,
208
+ SIZE_RATIO,
209
+ DEBOUNCE_DELAY,
210
+ CHANGE_THRESHOLD,
211
+ PLANE_COLORS,
212
+ DEFAULT_NORMALS,
213
+ getPlaneCssColor,
214
+ hasPlaneChanged,
215
+ getPlaneStyle,
216
+ computeSceneBounds,
217
+ computeSceneBoundsInfo,
218
+ resolveActiveActors,
219
+ alignCameraToMainCamera,
220
+ };
221
+
222
+ export type { SceneBoundsInfo, MainCameraOptions };
@@ -0,0 +1,54 @@
1
+ const RGB_MAX = 255;
2
+ const PERCENT_MAX = 100;
3
+
4
+ function parseComponent(val, max = RGB_MAX) {
5
+ if (val.endsWith("%")) {
6
+ return (Number(val.slice(0, -1)) / PERCENT_MAX) * max;
7
+ }
8
+ return Number(val);
9
+ }
10
+
11
+ function parseColorString(colorText) {
12
+ if (!colorText || typeof colorText !== "string") {
13
+ return undefined;
14
+ }
15
+
16
+ const numbersMatch = colorText.match(/[\d.]+%?/gu);
17
+ if (!numbersMatch || (numbersMatch.length !== 3 && numbersMatch.length !== 4)) {
18
+ return undefined;
19
+ }
20
+
21
+ const rawRed = parseComponent(numbersMatch[0]);
22
+ const rawGreen = parseComponent(numbersMatch[1]);
23
+ const rawBlue = parseComponent(numbersMatch[2]);
24
+
25
+ const red = Math.min(RGB_MAX, Math.max(0, Math.round(rawRed)));
26
+ const green = Math.min(RGB_MAX, Math.max(0, Math.round(rawGreen)));
27
+ const blue = Math.min(RGB_MAX, Math.max(0, Math.round(rawBlue)));
28
+
29
+ let alpha = 1;
30
+ if (numbersMatch.length === 4) {
31
+ const rawAlpha = parseComponent(numbersMatch[3], 1);
32
+ const calculatedAlpha = rawAlpha > 1 ? rawAlpha / RGB_MAX : rawAlpha;
33
+ const roundedAlpha = Number(calculatedAlpha.toFixed(2));
34
+ alpha = Math.min(1, Math.max(0, roundedAlpha));
35
+ }
36
+
37
+ if (Number.isNaN(red) || Number.isNaN(green) || Number.isNaN(blue) || Number.isNaN(alpha)) {
38
+ return undefined;
39
+ }
40
+
41
+ return { red, green, blue, alpha };
42
+ }
43
+
44
+ function formatColorString(color, mode) {
45
+ const { red, green, blue, alpha } = color;
46
+ const roundRed = Math.round(red);
47
+ const roundGreen = Math.round(green);
48
+ const roundBlue = Math.round(blue);
49
+ return mode === "rgb"
50
+ ? `rgb(${roundRed}, ${roundGreen}, ${roundBlue})`
51
+ : `rgba(${roundRed}, ${roundGreen}, ${roundBlue}, ${alpha})`;
52
+ }
53
+
54
+ export { parseColorString, formatColorString };
@@ -0,0 +1,102 @@
1
+ // oxlint-disable unicorn/prefer-export-from
2
+ import colormaps from "@ogw_front/assets/colormaps.json";
3
+
4
+ import { newInstance as vtkColorTransferFunction } from "@kitware/vtk.js/Rendering/Core/ColorTransferFunction";
5
+
6
+ interface ColormapPreset {
7
+ readonly Name: string;
8
+ readonly RGBPoints: readonly number[];
9
+ }
10
+
11
+ interface ColormapCategory {
12
+ readonly Name: string;
13
+ readonly Children: readonly ColormapPreset[];
14
+ }
15
+
16
+ const typedColormaps = colormaps as readonly ColormapCategory[];
17
+
18
+ function getPresetByName(presetName: string): ColormapPreset | undefined {
19
+ return typedColormaps
20
+ .flatMap((category: ColormapCategory) => category.Children)
21
+ .find((preset: ColormapPreset) => preset.Name === presetName);
22
+ }
23
+
24
+ function getRGBPointsFromPreset(presetName: string): readonly number[] {
25
+ return getPresetByName(presetName)?.RGBPoints ?? [];
26
+ }
27
+
28
+ function getPresetsWithCurrentAtTop(
29
+ presetName: string,
30
+ ): readonly (ColormapPreset | ColormapCategory)[] {
31
+ const currentPreset = getPresetByName(presetName);
32
+ return [currentPreset, ...typedColormaps].filter(
33
+ (preset: ColormapPreset | ColormapCategory | undefined): preset is NonNullable<typeof preset> =>
34
+ Boolean(preset),
35
+ );
36
+ }
37
+
38
+ const LAST_POINT_OFFSET = 4;
39
+ const THREE = 3;
40
+
41
+ function buildColorTable(rgbPoints: readonly number[], width: number): Float32Array {
42
+ const lut = vtkColorTransferFunction();
43
+ for (let pointIdx = 0; pointIdx < rgbPoints.length; pointIdx += 4) {
44
+ lut.addRGBPoint(
45
+ rgbPoints[pointIdx] ?? 0,
46
+ rgbPoints[pointIdx + 1] ?? 0,
47
+ rgbPoints[pointIdx + 2] ?? 0,
48
+ rgbPoints[pointIdx + THREE] ?? 0,
49
+ );
50
+ }
51
+ return lut.getUint8Table(rgbPoints[0] ?? 0, rgbPoints.at(-LAST_POINT_OFFSET) ?? 0, width, true);
52
+ }
53
+
54
+ function fillImageDataFromTable(
55
+ // ImageData can't satisfy prefer-readonly-parameter-types since lib.dom.d.ts types are inherently mutable, so this finding is left unfixed (same pattern as app/plugins/auto_store_register.ts).
56
+ imageData: ImageData,
57
+ // Float32Array's numeric index signature is inherently mutable and can't satisfy prefer-readonly-parameter-types, so this finding is left unfixed (same pattern as app/plugins/auto_store_register.ts).
58
+ table: Float32Array,
59
+ width: number,
60
+ height: number,
61
+ ): void {
62
+ for (let xCoord = 0; xCoord < width; xCoord += 1) {
63
+ const alpha = table[xCoord * 4 + THREE] ?? 0;
64
+ const blue = table[xCoord * 4 + 2] ?? 0;
65
+ const green = table[xCoord * 4 + 1] ?? 0;
66
+ const red = table[xCoord * 4] ?? 0;
67
+ for (let yCoord = 0; yCoord < height; yCoord += 1) {
68
+ const pixelIdx = (yCoord * width + xCoord) * 4;
69
+ imageData.data[pixelIdx] = red;
70
+ imageData.data[pixelIdx + 1] = green;
71
+ imageData.data[pixelIdx + 2] = blue;
72
+ imageData.data[pixelIdx + THREE] = alpha;
73
+ }
74
+ }
75
+ }
76
+
77
+ function drawCanvasForPreset(
78
+ presetName: string,
79
+ // HTMLCanvasElement can't satisfy prefer-readonly-parameter-types since lib.dom.d.ts types are inherently mutable, so this finding is left unfixed (same pattern as app/plugins/auto_store_register.ts).
80
+ canvas: HTMLCanvasElement | undefined | null,
81
+ ): void {
82
+ if (!canvas) {
83
+ return;
84
+ }
85
+ const rgbPoints = getRGBPointsFromPreset(presetName);
86
+ if (rgbPoints.length === 0) {
87
+ return;
88
+ }
89
+ const ctx = canvas.getContext("2d");
90
+ if (!ctx) {
91
+ return;
92
+ }
93
+ const { height, width } = canvas;
94
+ const table = buildColorTable(rgbPoints, width);
95
+ const imageData = ctx.createImageData(width, height);
96
+ fillImageDataFromTable(imageData, table, width, height);
97
+ ctx.putImageData(imageData, 0, 0);
98
+ }
99
+
100
+ export { drawCanvasForPreset, getRGBPointsFromPreset, getPresetByName, getPresetsWithCurrentAtTop };
101
+
102
+ export { default as colormaps } from "@ogw_front/assets/colormaps.json";
@@ -1,46 +1,59 @@
1
+ interface RGBAColor {
2
+ red: number;
3
+ green: number;
4
+ blue: number;
5
+ alpha: number;
6
+ }
7
+
8
+ interface AttributeConfig {
9
+ name: string | undefined;
10
+ storedConfigs: Record<string, unknown>;
11
+ }
12
+
1
13
  // Mesh
2
14
  const MESH_DEFAULT_ACTIVE_COLORING = "constant";
3
15
  const POINTS_DEFAULT_VISIBILITY = true;
4
16
  const POINTS_DEFAULT_SIZE = 10;
5
- const POINTS_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
17
+ const POINTS_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
6
18
  const EDGES_DEFAULT_VISIBILITY = true;
7
19
  const EDGES_DEFAULT_WIDTH = 2;
8
- const EDGES_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
20
+ const EDGES_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
9
21
  const CELLS_DEFAULT_VISIBILITY = true;
10
- const CELLS_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
22
+ const CELLS_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
11
23
  const POLYGONS_DEFAULT_VISIBILITY = true;
12
- const POLYGONS_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
24
+ const POLYGONS_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
13
25
  const POLYHEDRA_DEFAULT_VISIBILITY = true;
14
- const POLYHEDRA_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
26
+ const POLYHEDRA_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
15
27
 
16
28
  // Model
17
- const MODEL_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
29
+ const MODEL_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
18
30
  const MODEL_DEFAULT_ACTIVE_COLORING = "constant";
19
31
 
20
32
  const CORNERS_DEFAULT_VISIBILITY = true;
21
- const CORNERS_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
33
+ const CORNERS_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
22
34
  const CORNERS_DEFAULT_ACTIVE_COLORING = "constant";
23
35
  const LINES_DEFAULT_VISIBILITY = true;
24
- const LINES_DEFAULT_COLOR = { red: 20, green: 20, blue: 20, alpha: 1 };
36
+ const LINES_DEFAULT_COLOR: RGBAColor = { red: 20, green: 20, blue: 20, alpha: 1 };
25
37
  const LINES_DEFAULT_ACTIVE_COLORING = "constant";
26
38
  const SURFACES_DEFAULT_VISIBILITY = true;
27
- const SURFACES_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
39
+ const SURFACES_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
28
40
  const SURFACES_DEFAULT_ACTIVE_COLORING = "constant";
29
41
  const BLOCKS_DEFAULT_VISIBILITY = true;
30
- const BLOCKS_DEFAULT_COLOR = { red: 255, green: 255, blue: 255, alpha: 1 };
42
+ const BLOCKS_DEFAULT_COLOR: RGBAColor = { red: 255, green: 255, blue: 255, alpha: 1 };
31
43
  const BLOCKS_DEFAULT_ACTIVE_COLORING = "constant";
32
44
 
33
45
  const MESH_COMPONENT_TYPES = ["Corner", "Line", "Surface", "Block"];
34
46
 
35
- const DEFAULT_MODEL_COMPONENT_TYPE_COLORS = {
47
+ const DEFAULT_MODEL_COMPONENT_TYPE_COLORS: Record<string, RGBAColor> = {
36
48
  Corner: CORNERS_DEFAULT_COLOR,
37
49
  Line: LINES_DEFAULT_COLOR,
38
50
  Surface: SURFACES_DEFAULT_COLOR,
39
51
  Block: BLOCKS_DEFAULT_COLOR,
40
52
  };
41
53
 
42
- const DEFAULT_NO_DATA_COLOR = { red: 128, green: 128, blue: 128, alpha: 1 };
54
+ const DEFAULT_NO_DATA_COLOR: RGBAColor = { red: 128, green: 128, blue: 128, alpha: 1 };
43
55
 
56
+ export type { RGBAColor, AttributeConfig };
44
57
  export {
45
58
  POINTS_DEFAULT_VISIBILITY,
46
59
  POINTS_DEFAULT_SIZE,
@@ -15,7 +15,7 @@ import {
15
15
  surfaceDefaultStyle,
16
16
  } from "./meshes";
17
17
 
18
- function default_styles() {
18
+ function default_styles(): Record<string, unknown> {
19
19
  return {
20
20
  BRep: brepDefaultStyle(),
21
21
  CrossSection: crossSectionDefaultStyle(),
@@ -45,8 +45,9 @@ function default_styles() {
45
45
  };
46
46
  }
47
47
 
48
- function getDefaultStyle(type) {
49
- return default_styles()[type];
48
+ function getDefaultStyle(type: string): unknown {
49
+ const styles: Record<string, unknown> = default_styles();
50
+ return styles[type];
50
51
  }
51
52
 
52
53
  export { DEFAULT_MODEL_COMPONENT_TYPE_STYLES } from "./models";