matterviz 0.3.6 → 0.4.0

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 (926) hide show
  1. package/dist/EmptyState.svelte.d.ts +9 -0
  2. package/dist/FilePicker.svelte +360 -0
  3. package/dist/FilePicker.svelte.d.ts +17 -0
  4. package/dist/Icon.svelte +44 -0
  5. package/dist/Icon.svelte.d.ts +13 -0
  6. package/dist/MillerIndexInput.svelte +66 -0
  7. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  8. package/dist/api/mp.d.ts +6 -0
  9. package/dist/api/mp.js +22 -0
  10. package/dist/api/optimade.d.ts +45 -0
  11. package/dist/api/optimade.js +141 -0
  12. package/dist/app.css +244 -0
  13. package/dist/brillouin/BrillouinZone.svelte +554 -0
  14. package/dist/brillouin/BrillouinZone.svelte.d.ts +84 -0
  15. package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
  16. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
  17. package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
  18. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  19. package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  20. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  21. package/dist/brillouin/BrillouinZoneScene.svelte +522 -0
  22. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +49 -0
  23. package/dist/brillouin/BrillouinZoneTooltip.svelte +83 -0
  24. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
  25. package/dist/brillouin/compute.d.ts +17 -0
  26. package/dist/brillouin/compute.js +422 -0
  27. package/dist/brillouin/index.d.ts +8 -0
  28. package/dist/brillouin/index.js +7 -0
  29. package/dist/brillouin/types.d.ts +43 -0
  30. package/dist/brillouin/types.js +1 -0
  31. package/dist/chempot-diagram/ChemPotDiagram.svelte +328 -0
  32. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  33. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +843 -0
  34. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  35. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3191 -0
  36. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  37. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  38. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  39. package/dist/chempot-diagram/async-compute.svelte.js +80 -0
  40. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  41. package/dist/chempot-diagram/chempot-worker.js +12 -0
  42. package/dist/chempot-diagram/color.d.ts +10 -0
  43. package/dist/chempot-diagram/color.js +32 -0
  44. package/dist/chempot-diagram/compute.d.ts +48 -0
  45. package/dist/chempot-diagram/compute.js +804 -0
  46. package/dist/chempot-diagram/index.d.ts +6 -0
  47. package/dist/chempot-diagram/index.js +6 -0
  48. package/dist/chempot-diagram/pointer.d.ts +16 -0
  49. package/dist/chempot-diagram/pointer.js +40 -0
  50. package/dist/chempot-diagram/temperature.d.ts +15 -0
  51. package/dist/chempot-diagram/temperature.js +34 -0
  52. package/dist/chempot-diagram/types.d.ts +81 -0
  53. package/dist/chempot-diagram/types.js +28 -0
  54. package/dist/colors/index.d.ts +47 -0
  55. package/dist/colors/index.js +204 -0
  56. package/dist/composition/BarChart.svelte +297 -0
  57. package/dist/composition/BarChart.svelte.d.ts +39 -0
  58. package/dist/composition/BubbleChart.svelte +218 -0
  59. package/dist/composition/BubbleChart.svelte.d.ts +28 -0
  60. package/dist/composition/Composition.svelte +165 -0
  61. package/dist/composition/Composition.svelte.d.ts +15 -0
  62. package/dist/composition/Formula.svelte +268 -0
  63. package/dist/composition/Formula.svelte.d.ts +19 -0
  64. package/dist/composition/FormulaFilter.svelte +1263 -0
  65. package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
  66. package/dist/composition/PieChart.svelte +324 -0
  67. package/dist/composition/PieChart.svelte.d.ts +37 -0
  68. package/dist/composition/chem-sys.d.ts +8 -0
  69. package/dist/composition/chem-sys.js +85 -0
  70. package/dist/composition/format.d.ts +15 -0
  71. package/dist/composition/format.js +111 -0
  72. package/dist/composition/index.d.ts +21 -0
  73. package/dist/composition/index.js +15 -0
  74. package/dist/composition/parse.d.ts +56 -0
  75. package/dist/composition/parse.js +486 -0
  76. package/dist/constants.d.ts +29 -0
  77. package/dist/constants.js +99 -0
  78. package/dist/controls.d.ts +14 -0
  79. package/dist/controls.js +30 -0
  80. package/dist/convex-hull/ConvexHull.svelte +157 -0
  81. package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
  82. package/dist/convex-hull/ConvexHull2D.svelte +827 -0
  83. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
  84. package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
  85. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
  86. package/dist/convex-hull/ConvexHull4D.svelte +1394 -0
  87. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
  88. package/dist/convex-hull/ConvexHullControls.svelte +535 -0
  89. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
  90. package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
  91. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
  92. package/dist/convex-hull/ConvexHullStats.svelte +929 -0
  93. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
  94. package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
  95. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
  96. package/dist/convex-hull/GasPressureControls.svelte +247 -0
  97. package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
  98. package/dist/convex-hull/StructurePopup.svelte +151 -0
  99. package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
  100. package/dist/convex-hull/TemperatureSlider.svelte +140 -0
  101. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
  102. package/dist/convex-hull/barycentric-coords.d.ts +18 -0
  103. package/dist/convex-hull/barycentric-coords.js +182 -0
  104. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  105. package/dist/convex-hull/demo-temperature.js +38 -0
  106. package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
  107. package/dist/convex-hull/gas-thermodynamics.js +306 -0
  108. package/dist/convex-hull/helpers.d.ts +117 -0
  109. package/dist/convex-hull/helpers.js +718 -0
  110. package/dist/convex-hull/index.d.ts +119 -0
  111. package/dist/convex-hull/index.js +58 -0
  112. package/dist/convex-hull/thermodynamics.d.ts +67 -0
  113. package/dist/convex-hull/thermodynamics.js +1757 -0
  114. package/dist/convex-hull/types.d.ts +162 -0
  115. package/dist/convex-hull/types.js +36 -0
  116. package/dist/coordination/CoordinationBarPlot.svelte +311 -0
  117. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
  118. package/dist/coordination/calc-coordination.d.ts +15 -0
  119. package/dist/coordination/calc-coordination.js +63 -0
  120. package/dist/coordination/index.d.ts +8 -0
  121. package/dist/coordination/index.js +7 -0
  122. package/dist/effects.svelte.d.ts +12 -0
  123. package/dist/effects.svelte.js +37 -0
  124. package/dist/element/BohrAtom.svelte.d.ts +20 -0
  125. package/dist/element/ElementHeading.svelte +26 -0
  126. package/dist/element/ElementHeading.svelte.d.ts +8 -0
  127. package/dist/element/ElementPhoto.svelte +57 -0
  128. package/dist/element/ElementPhoto.svelte.d.ts +9 -0
  129. package/dist/element/ElementStats.svelte +80 -0
  130. package/dist/element/ElementStats.svelte.d.ts +8 -0
  131. package/dist/element/ElementTile.svelte +484 -0
  132. package/dist/element/ElementTile.svelte.d.ts +29 -0
  133. package/dist/element/Nucleus.svelte.d.ts +17 -0
  134. package/dist/element/data.d.ts +2 -0
  135. package/dist/element/data.js +2 -0
  136. package/dist/element/index.d.ts +8 -0
  137. package/dist/element/index.js +7 -0
  138. package/dist/element/types.d.ts +57 -0
  139. package/dist/element/types.js +1 -0
  140. package/dist/feedback/ClickFeedback.svelte +58 -0
  141. package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
  142. package/dist/feedback/DragOverlay.svelte +42 -0
  143. package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
  144. package/dist/feedback/Spinner.svelte.d.ts +7 -0
  145. package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
  146. package/dist/feedback/index.d.ts +4 -0
  147. package/dist/feedback/index.js +4 -0
  148. package/dist/fermi-surface/FermiSlice.svelte +197 -0
  149. package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
  150. package/dist/fermi-surface/FermiSurface.svelte +606 -0
  151. package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
  152. package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
  153. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
  154. package/dist/fermi-surface/FermiSurfaceScene.svelte +797 -0
  155. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
  156. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +85 -0
  157. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
  158. package/dist/fermi-surface/compute.d.ts +5 -0
  159. package/dist/fermi-surface/compute.js +538 -0
  160. package/dist/fermi-surface/constants.d.ts +9 -0
  161. package/dist/fermi-surface/constants.js +27 -0
  162. package/dist/fermi-surface/export.d.ts +5 -0
  163. package/dist/fermi-surface/export.js +51 -0
  164. package/dist/fermi-surface/index.d.ts +12 -0
  165. package/dist/fermi-surface/index.js +13 -0
  166. package/dist/fermi-surface/marching-cubes.d.ts +2 -0
  167. package/dist/fermi-surface/marching-cubes.js +2 -0
  168. package/dist/fermi-surface/parse.d.ts +2 -0
  169. package/dist/fermi-surface/parse.js +494 -0
  170. package/dist/fermi-surface/symmetry.d.ts +3 -0
  171. package/dist/fermi-surface/symmetry.js +46 -0
  172. package/dist/fermi-surface/types.d.ts +111 -0
  173. package/dist/fermi-surface/types.js +4 -0
  174. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1547 -0
  175. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  176. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  177. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  178. package/dist/heatmap-matrix/index.d.ts +53 -0
  179. package/dist/heatmap-matrix/index.js +100 -0
  180. package/dist/heatmap-matrix/shared.d.ts +2 -0
  181. package/dist/heatmap-matrix/shared.js +4 -0
  182. package/dist/icons.d.ts +569 -0
  183. package/dist/icons.js +648 -0
  184. package/dist/index.d.ts +39 -0
  185. package/dist/index.js +39 -0
  186. package/dist/io/decompress.d.ts +11 -0
  187. package/dist/io/decompress.js +76 -0
  188. package/dist/io/export.d.ts +16 -0
  189. package/dist/io/export.js +338 -0
  190. package/dist/io/fetch.d.ts +5 -0
  191. package/dist/io/fetch.js +43 -0
  192. package/dist/io/file-drop.d.ts +7 -0
  193. package/dist/io/file-drop.js +42 -0
  194. package/dist/io/index.d.ts +7 -0
  195. package/dist/io/index.js +6 -0
  196. package/dist/io/is-binary.d.ts +1 -0
  197. package/dist/io/is-binary.js +20 -0
  198. package/dist/io/types.d.ts +8 -0
  199. package/dist/io/types.js +1 -0
  200. package/dist/io/url-drop.d.ts +2 -0
  201. package/dist/io/url-drop.js +154 -0
  202. package/dist/isosurface/Isosurface.svelte +285 -0
  203. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  204. package/dist/isosurface/IsosurfaceControls.svelte +277 -0
  205. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  206. package/dist/isosurface/index.d.ts +5 -0
  207. package/dist/isosurface/index.js +6 -0
  208. package/dist/isosurface/parse.d.ts +6 -0
  209. package/dist/isosurface/parse.js +552 -0
  210. package/dist/isosurface/slice.d.ts +11 -0
  211. package/dist/isosurface/slice.js +141 -0
  212. package/dist/isosurface/types.d.ts +56 -0
  213. package/dist/isosurface/types.js +227 -0
  214. package/dist/keyboard.d.ts +3 -0
  215. package/dist/keyboard.js +23 -0
  216. package/dist/labels.d.ts +53 -0
  217. package/dist/labels.js +278 -0
  218. package/dist/layout/FullscreenToggle.svelte +50 -0
  219. package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
  220. package/dist/layout/InfoCard.svelte +120 -0
  221. package/dist/layout/InfoCard.svelte.d.ts +21 -0
  222. package/dist/layout/InfoTag.svelte +185 -0
  223. package/dist/layout/InfoTag.svelte.d.ts +19 -0
  224. package/dist/layout/PropertyFilter.svelte +247 -0
  225. package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
  226. package/dist/layout/SettingsSection.svelte +148 -0
  227. package/dist/layout/SettingsSection.svelte.d.ts +17 -0
  228. package/dist/layout/SubpageGrid.svelte +82 -0
  229. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  230. package/dist/layout/fullscreen.d.ts +9 -0
  231. package/dist/layout/fullscreen.js +53 -0
  232. package/dist/layout/index.d.ts +10 -0
  233. package/dist/layout/index.js +8 -0
  234. package/dist/layout/json-tree/JsonNode.svelte +548 -0
  235. package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
  236. package/dist/layout/json-tree/JsonTree.svelte +1230 -0
  237. package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
  238. package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
  239. package/dist/layout/json-tree/index.d.ts +3 -0
  240. package/dist/layout/json-tree/index.js +3 -0
  241. package/dist/layout/json-tree/types.d.ts +74 -0
  242. package/dist/layout/json-tree/types.js +2 -0
  243. package/dist/layout/json-tree/utils.d.ts +29 -0
  244. package/dist/layout/json-tree/utils.js +642 -0
  245. package/dist/marching-cubes.d.ts +14 -0
  246. package/dist/marching-cubes.js +535 -0
  247. package/dist/math.d.ts +105 -0
  248. package/dist/math.js +920 -0
  249. package/dist/overlays/ContextMenu.svelte +162 -0
  250. package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
  251. package/dist/overlays/CopyButton.svelte +45 -0
  252. package/dist/overlays/CopyButton.svelte.d.ts +8 -0
  253. package/dist/overlays/DragControlTab.svelte +98 -0
  254. package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
  255. package/dist/overlays/DraggablePane.svelte +487 -0
  256. package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
  257. package/dist/overlays/InfoPaneCards.svelte +149 -0
  258. package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
  259. package/dist/overlays/index.d.ts +3 -0
  260. package/dist/overlays/index.js +3 -0
  261. package/dist/periodic-table/PeriodicTable.svelte +480 -0
  262. package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
  263. package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
  264. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
  265. package/dist/periodic-table/PropertySelect.svelte +38 -0
  266. package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
  267. package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
  268. package/dist/periodic-table/index.d.ts +10 -0
  269. package/dist/periodic-table/index.js +4 -0
  270. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1092 -0
  271. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
  272. package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
  273. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
  274. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +127 -0
  275. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  276. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  277. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
  278. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  279. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
  280. package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
  281. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
  282. package/dist/phase-diagram/build-diagram.d.ts +11 -0
  283. package/dist/phase-diagram/build-diagram.js +160 -0
  284. package/dist/phase-diagram/colors.d.ts +35 -0
  285. package/dist/phase-diagram/colors.js +51 -0
  286. package/dist/phase-diagram/diagram-input.d.ts +29 -0
  287. package/dist/phase-diagram/diagram-input.js +3 -0
  288. package/dist/phase-diagram/index.d.ts +13 -0
  289. package/dist/phase-diagram/index.js +11 -0
  290. package/dist/phase-diagram/parse.d.ts +55 -0
  291. package/dist/phase-diagram/parse.js +273 -0
  292. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  293. package/dist/phase-diagram/svg-to-diagram.js +867 -0
  294. package/dist/phase-diagram/types.d.ts +93 -0
  295. package/dist/phase-diagram/types.js +1 -0
  296. package/dist/phase-diagram/utils.d.ts +118 -0
  297. package/dist/phase-diagram/utils.js +600 -0
  298. package/dist/plot/bar/BarPlot.svelte +1755 -0
  299. package/dist/plot/bar/BarPlot.svelte.d.ts +84 -0
  300. package/dist/plot/bar/BarPlotControls.svelte +67 -0
  301. package/dist/plot/bar/BarPlotControls.svelte.d.ts +18 -0
  302. package/dist/plot/bar/SpacegroupBarPlot.svelte +293 -0
  303. package/dist/plot/bar/SpacegroupBarPlot.svelte.d.ts +9 -0
  304. package/dist/plot/bar/data.d.ts +40 -0
  305. package/dist/plot/bar/data.js +154 -0
  306. package/dist/plot/bar/geometry.d.ts +39 -0
  307. package/dist/plot/bar/geometry.js +60 -0
  308. package/dist/plot/bar/index.d.ts +3 -0
  309. package/dist/plot/bar/index.js +3 -0
  310. package/dist/plot/box/BoxPlot.svelte +1462 -0
  311. package/dist/plot/box/BoxPlot.svelte.d.ts +94 -0
  312. package/dist/plot/box/BoxPlotControls.svelte +109 -0
  313. package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
  314. package/dist/plot/box/Violin.svelte +14 -0
  315. package/dist/plot/box/Violin.svelte.d.ts +70 -0
  316. package/dist/plot/box/box-plot.d.ts +55 -0
  317. package/dist/plot/box/box-plot.js +126 -0
  318. package/dist/plot/box/index.d.ts +5 -0
  319. package/dist/plot/box/index.js +5 -0
  320. package/dist/plot/box/kde.d.ts +16 -0
  321. package/dist/plot/box/kde.js +160 -0
  322. package/dist/plot/box/quantile.d.ts +3 -0
  323. package/dist/plot/box/quantile.js +53 -0
  324. package/dist/plot/core/auto-place.d.ts +43 -0
  325. package/dist/plot/core/auto-place.js +122 -0
  326. package/dist/plot/core/axis-utils.d.ts +46 -0
  327. package/dist/plot/core/axis-utils.js +110 -0
  328. package/dist/plot/core/components/AxisLabel.svelte +51 -0
  329. package/dist/plot/core/components/AxisLabel.svelte.d.ts +16 -0
  330. package/dist/plot/core/components/ColorBar.svelte +724 -0
  331. package/dist/plot/core/components/ColorBar.svelte.d.ts +31 -0
  332. package/dist/plot/core/components/ColorScaleSelect.svelte +55 -0
  333. package/dist/plot/core/components/ColorScaleSelect.svelte.d.ts +15 -0
  334. package/dist/plot/core/components/ControlPane.svelte +46 -0
  335. package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
  336. package/dist/plot/core/components/FillArea.svelte +234 -0
  337. package/dist/plot/core/components/FillArea.svelte.d.ts +21 -0
  338. package/dist/plot/core/components/InteractiveAxisLabel.svelte +96 -0
  339. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +14 -0
  340. package/dist/plot/core/components/Line.svelte +101 -0
  341. package/dist/plot/core/components/Line.svelte.d.ts +15 -0
  342. package/dist/plot/core/components/PlotAxis.svelte +171 -0
  343. package/dist/plot/core/components/PlotAxis.svelte.d.ts +25 -0
  344. package/dist/plot/core/components/PlotControls.svelte +525 -0
  345. package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
  346. package/dist/plot/core/components/PlotLegend.svelte +580 -0
  347. package/dist/plot/core/components/PlotLegend.svelte.d.ts +30 -0
  348. package/dist/plot/core/components/PlotTooltip.svelte +83 -0
  349. package/dist/plot/core/components/PlotTooltip.svelte.d.ts +25 -0
  350. package/dist/plot/core/components/PortalSelect.svelte +257 -0
  351. package/dist/plot/core/components/PortalSelect.svelte.d.ts +16 -0
  352. package/dist/plot/core/components/ReferenceLine.svelte +204 -0
  353. package/dist/plot/core/components/ReferenceLine.svelte.d.ts +20 -0
  354. package/dist/plot/core/components/ReferenceLine3D.svelte +156 -0
  355. package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +14 -0
  356. package/dist/plot/core/components/ReferencePlane.svelte +175 -0
  357. package/dist/plot/core/components/ReferencePlane.svelte.d.ts +14 -0
  358. package/dist/plot/core/components/ZeroLines.svelte +97 -0
  359. package/dist/plot/core/components/ZeroLines.svelte.d.ts +33 -0
  360. package/dist/plot/core/components/ZoomRect.svelte +23 -0
  361. package/dist/plot/core/components/ZoomRect.svelte.d.ts +8 -0
  362. package/dist/plot/core/components/index.d.ts +17 -0
  363. package/dist/plot/core/components/index.js +17 -0
  364. package/dist/plot/core/data-cleaning.d.ts +107 -0
  365. package/dist/plot/core/data-cleaning.js +853 -0
  366. package/dist/plot/core/data-transform.d.ts +16 -0
  367. package/dist/plot/core/data-transform.js +45 -0
  368. package/dist/plot/core/fill-utils.d.ts +33 -0
  369. package/dist/plot/core/fill-utils.js +388 -0
  370. package/dist/plot/core/hover-lock.svelte.d.ts +14 -0
  371. package/dist/plot/core/hover-lock.svelte.js +45 -0
  372. package/dist/plot/core/index.d.ts +10 -0
  373. package/dist/plot/core/index.js +11 -0
  374. package/dist/plot/core/interactions.d.ts +35 -0
  375. package/dist/plot/core/interactions.js +195 -0
  376. package/dist/plot/core/layout.d.ts +79 -0
  377. package/dist/plot/core/layout.js +281 -0
  378. package/dist/plot/core/reference-line.d.ts +60 -0
  379. package/dist/plot/core/reference-line.js +301 -0
  380. package/dist/plot/core/scales.d.ts +48 -0
  381. package/dist/plot/core/scales.js +480 -0
  382. package/dist/plot/core/svg.d.ts +2 -0
  383. package/dist/plot/core/svg.js +41 -0
  384. package/dist/plot/core/types.d.ts +771 -0
  385. package/dist/plot/core/types.js +99 -0
  386. package/dist/plot/core/utils/label-placement.d.ts +68 -0
  387. package/dist/plot/core/utils/label-placement.js +326 -0
  388. package/dist/plot/core/utils/series-visibility.d.ts +26 -0
  389. package/dist/plot/core/utils/series-visibility.js +112 -0
  390. package/dist/plot/core/utils.d.ts +11 -0
  391. package/dist/plot/core/utils.js +27 -0
  392. package/dist/plot/histogram/Histogram.svelte +1418 -0
  393. package/dist/plot/histogram/Histogram.svelte.d.ts +50 -0
  394. package/dist/plot/histogram/HistogramControls.svelte +212 -0
  395. package/dist/plot/histogram/HistogramControls.svelte.d.ts +22 -0
  396. package/dist/plot/histogram/index.d.ts +2 -0
  397. package/dist/plot/histogram/index.js +2 -0
  398. package/dist/plot/index.d.ts +8 -0
  399. package/dist/plot/index.js +10 -0
  400. package/dist/plot/sankey/Sankey.svelte +700 -0
  401. package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
  402. package/dist/plot/sankey/SankeyControls.svelte +98 -0
  403. package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
  404. package/dist/plot/sankey/index.d.ts +4 -0
  405. package/dist/plot/sankey/index.js +3 -0
  406. package/dist/plot/sankey/sankey-types.d.ts +42 -0
  407. package/dist/plot/sankey/sankey-types.js +4 -0
  408. package/dist/plot/sankey/sankey.d.ts +52 -0
  409. package/dist/plot/sankey/sankey.js +187 -0
  410. package/dist/plot/scatter/BinnedScatterPlot.svelte +1116 -0
  411. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +66 -0
  412. package/dist/plot/scatter/ElementScatter.svelte +63 -0
  413. package/dist/plot/scatter/ElementScatter.svelte.d.ts +14 -0
  414. package/dist/plot/scatter/ScatterPlot.svelte +2357 -0
  415. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +96 -0
  416. package/dist/plot/scatter/ScatterPlotControls.svelte +307 -0
  417. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +17 -0
  418. package/dist/plot/scatter/ScatterPoint.svelte +182 -0
  419. package/dist/plot/scatter/ScatterPoint.svelte.d.ts +22 -0
  420. package/dist/plot/scatter/adaptive-density.d.ts +79 -0
  421. package/dist/plot/scatter/adaptive-density.js +217 -0
  422. package/dist/plot/scatter/binned-scatter-types.d.ts +59 -0
  423. package/dist/plot/scatter/binned-scatter-types.js +1 -0
  424. package/dist/plot/scatter/index.d.ts +7 -0
  425. package/dist/plot/scatter/index.js +5 -0
  426. package/dist/plot/scatter/scatter-data.d.ts +19 -0
  427. package/dist/plot/scatter/scatter-data.js +212 -0
  428. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +531 -0
  429. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +95 -0
  430. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +438 -0
  431. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +20 -0
  432. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +912 -0
  433. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +74 -0
  434. package/dist/plot/scatter-3d/Surface3D.svelte +197 -0
  435. package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +13 -0
  436. package/dist/plot/scatter-3d/index.d.ts +4 -0
  437. package/dist/plot/scatter-3d/index.js +4 -0
  438. package/dist/plot/sunburst/Sunburst.svelte +1045 -0
  439. package/dist/plot/sunburst/Sunburst.svelte.d.ts +96 -0
  440. package/dist/plot/sunburst/SunburstControls.svelte +200 -0
  441. package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
  442. package/dist/plot/sunburst/index.d.ts +4 -0
  443. package/dist/plot/sunburst/index.js +4 -0
  444. package/dist/plot/sunburst/render.d.ts +34 -0
  445. package/dist/plot/sunburst/render.js +122 -0
  446. package/dist/plot/sunburst/sunburst.d.ts +62 -0
  447. package/dist/plot/sunburst/sunburst.js +266 -0
  448. package/dist/rdf/RdfPlot.svelte +248 -0
  449. package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
  450. package/dist/rdf/calc-rdf.d.ts +4 -0
  451. package/dist/rdf/calc-rdf.js +98 -0
  452. package/dist/rdf/index.d.ts +23 -0
  453. package/dist/rdf/index.js +2 -0
  454. package/dist/sanitize.d.ts +6 -0
  455. package/dist/sanitize.js +116 -0
  456. package/dist/settings.d.ts +319 -0
  457. package/dist/settings.js +1394 -0
  458. package/dist/spectral/Bands.svelte +1050 -0
  459. package/dist/spectral/Bands.svelte.d.ts +39 -0
  460. package/dist/spectral/BandsAndDos.svelte +134 -0
  461. package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
  462. package/dist/spectral/BrillouinBandsDos.svelte +264 -0
  463. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
  464. package/dist/spectral/Dos.svelte +688 -0
  465. package/dist/spectral/Dos.svelte.d.ts +29 -0
  466. package/dist/spectral/helpers.d.ts +121 -0
  467. package/dist/spectral/helpers.js +1098 -0
  468. package/dist/spectral/index.d.ts +6 -0
  469. package/dist/spectral/index.js +6 -0
  470. package/dist/spectral/types.d.ts +84 -0
  471. package/dist/spectral/types.js +2 -0
  472. package/dist/state.svelte.d.ts +25 -0
  473. package/dist/state.svelte.js +45 -0
  474. package/dist/structure/Arrow.svelte +72 -0
  475. package/dist/structure/Arrow.svelte.d.ts +15 -0
  476. package/dist/structure/AtomLegend.svelte +814 -0
  477. package/dist/structure/AtomLegend.svelte.d.ts +35 -0
  478. package/dist/structure/Bond.svelte +140 -0
  479. package/dist/structure/Bond.svelte.d.ts +9 -0
  480. package/dist/structure/CanvasTooltip.svelte +33 -0
  481. package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
  482. package/dist/structure/CellSelect.svelte +348 -0
  483. package/dist/structure/CellSelect.svelte.d.ts +13 -0
  484. package/dist/structure/Cylinder.svelte +49 -0
  485. package/dist/structure/Cylinder.svelte.d.ts +13 -0
  486. package/dist/structure/Lattice.svelte +196 -0
  487. package/dist/structure/Lattice.svelte.d.ts +17 -0
  488. package/dist/structure/Structure.svelte +2254 -0
  489. package/dist/structure/Structure.svelte.d.ts +89 -0
  490. package/dist/structure/StructureControls.svelte +1273 -0
  491. package/dist/structure/StructureControls.svelte.d.ts +31 -0
  492. package/dist/structure/StructureExportPane.svelte +252 -0
  493. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  494. package/dist/structure/StructureInfoPane.svelte +736 -0
  495. package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
  496. package/dist/structure/StructureScene.svelte +2256 -0
  497. package/dist/structure/StructureScene.svelte.d.ts +111 -0
  498. package/dist/structure/atom-properties.d.ts +37 -0
  499. package/dist/structure/atom-properties.js +200 -0
  500. package/dist/structure/bond-order-perception.d.ts +13 -0
  501. package/dist/structure/bond-order-perception.js +384 -0
  502. package/dist/structure/bonding.d.ts +69 -0
  503. package/dist/structure/bonding.js +724 -0
  504. package/dist/structure/export.d.ts +20 -0
  505. package/dist/structure/export.js +731 -0
  506. package/dist/structure/index.d.ts +124 -0
  507. package/dist/structure/index.js +167 -0
  508. package/dist/structure/label-placement.d.ts +14 -0
  509. package/dist/structure/label-placement.js +72 -0
  510. package/dist/structure/measure.d.ts +7 -0
  511. package/dist/structure/measure.js +30 -0
  512. package/dist/structure/parse.d.ts +66 -0
  513. package/dist/structure/parse.js +1410 -0
  514. package/dist/structure/partial-occupancy.d.ts +25 -0
  515. package/dist/structure/partial-occupancy.js +99 -0
  516. package/dist/structure/pbc.d.ts +9 -0
  517. package/dist/structure/pbc.js +127 -0
  518. package/dist/structure/supercell.d.ts +8 -0
  519. package/dist/structure/supercell.js +170 -0
  520. package/dist/structure/validation.d.ts +2 -0
  521. package/dist/structure/validation.js +10 -0
  522. package/dist/symmetry/SymmetryStats.svelte +226 -0
  523. package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
  524. package/dist/symmetry/WyckoffTable.svelte +120 -0
  525. package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
  526. package/dist/symmetry/cell-transform.d.ts +12 -0
  527. package/dist/symmetry/cell-transform.js +91 -0
  528. package/dist/symmetry/index.d.ts +43 -0
  529. package/dist/symmetry/index.js +226 -0
  530. package/dist/symmetry/spacegroups.d.ts +16 -0
  531. package/dist/symmetry/spacegroups.js +429 -0
  532. package/dist/table/HeatmapTable.svelte +1885 -0
  533. package/dist/table/HeatmapTable.svelte.d.ts +49 -0
  534. package/dist/table/ToggleMenu.svelte +385 -0
  535. package/dist/table/ToggleMenu.svelte.d.ts +11 -0
  536. package/dist/table/index.d.ts +72 -0
  537. package/dist/table/index.js +38 -0
  538. package/dist/theme/ThemeControl.svelte +53 -0
  539. package/dist/theme/ThemeControl.svelte.d.ts +9 -0
  540. package/dist/theme/index.d.ts +29 -0
  541. package/dist/theme/index.js +79 -0
  542. package/dist/time.d.ts +4 -0
  543. package/dist/time.js +70 -0
  544. package/dist/tooltip/KCoords.svelte +45 -0
  545. package/dist/tooltip/KCoords.svelte.d.ts +8 -0
  546. package/dist/tooltip/TooltipContent.svelte +58 -0
  547. package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
  548. package/dist/tooltip/index.d.ts +3 -0
  549. package/dist/tooltip/index.js +2 -0
  550. package/dist/tooltip/types.d.ts +8 -0
  551. package/dist/tooltip/types.js +1 -0
  552. package/dist/trajectory/Trajectory.svelte +1571 -0
  553. package/dist/trajectory/Trajectory.svelte.d.ts +78 -0
  554. package/dist/trajectory/TrajectoryError.svelte +128 -0
  555. package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
  556. package/dist/trajectory/TrajectoryExportPane.svelte +358 -0
  557. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
  558. package/dist/trajectory/TrajectoryInfoPane.svelte +314 -0
  559. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
  560. package/dist/trajectory/constants.d.ts +6 -0
  561. package/dist/trajectory/constants.js +7 -0
  562. package/dist/trajectory/extract.d.ts +5 -0
  563. package/dist/trajectory/extract.js +162 -0
  564. package/dist/trajectory/format-detect.d.ts +10 -0
  565. package/dist/trajectory/format-detect.js +90 -0
  566. package/dist/trajectory/frame-reader.d.ts +17 -0
  567. package/dist/trajectory/frame-reader.js +299 -0
  568. package/dist/trajectory/helpers.d.ts +15 -0
  569. package/dist/trajectory/helpers.js +164 -0
  570. package/dist/trajectory/index.d.ts +63 -0
  571. package/dist/trajectory/index.js +126 -0
  572. package/dist/trajectory/parse/ase.d.ts +2 -0
  573. package/dist/trajectory/parse/ase.js +73 -0
  574. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  575. package/dist/trajectory/parse/hdf5.js +127 -0
  576. package/dist/trajectory/parse/index.d.ts +12 -0
  577. package/dist/trajectory/parse/index.js +306 -0
  578. package/dist/trajectory/parse/lammps.d.ts +5 -0
  579. package/dist/trajectory/parse/lammps.js +179 -0
  580. package/dist/trajectory/parse/vasp.d.ts +2 -0
  581. package/dist/trajectory/parse/vasp.js +87 -0
  582. package/dist/trajectory/parse/xyz.d.ts +26 -0
  583. package/dist/trajectory/parse/xyz.js +123 -0
  584. package/dist/trajectory/plotting.d.ts +28 -0
  585. package/dist/trajectory/plotting.js +423 -0
  586. package/dist/trajectory/types.d.ts +11 -0
  587. package/dist/trajectory/types.js +1 -0
  588. package/dist/utils.d.ts +7 -0
  589. package/dist/utils.js +47 -0
  590. package/dist/xrd/XrdPlot.svelte +616 -0
  591. package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
  592. package/dist/xrd/broadening.d.ts +20 -0
  593. package/dist/xrd/broadening.js +97 -0
  594. package/dist/xrd/calc-xrd.d.ts +37 -0
  595. package/dist/xrd/calc-xrd.js +339 -0
  596. package/dist/xrd/index.d.ts +37 -0
  597. package/dist/xrd/index.js +4 -0
  598. package/dist/xrd/parse.d.ts +13 -0
  599. package/dist/xrd/parse.js +749 -0
  600. package/license +1 -1
  601. package/package.json +237 -1458
  602. package/readme.md +98 -171
  603. package/.vscode/launch.json +0 -13
  604. package/.vscodeignore +0 -7
  605. package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
  606. package/dist/assets/browser-DdDecX_W.js +0 -1
  607. package/dist/assets/export-qgn-H9y6.js +0 -2
  608. package/dist/assets/main-DiKYzti2.css +0 -1
  609. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  610. package/dist/extension.js +0 -31293
  611. package/dist/src/lib/FilePicker.svelte +0 -360
  612. package/dist/src/lib/Icon.svelte +0 -41
  613. package/dist/src/lib/MillerIndexInput.svelte +0 -66
  614. package/dist/src/lib/api/mp.ts +0 -26
  615. package/dist/src/lib/api/optimade.ts +0 -204
  616. package/dist/src/lib/app.css +0 -247
  617. package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
  618. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
  619. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
  620. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  621. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
  622. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
  623. package/dist/src/lib/brillouin/compute.ts +0 -529
  624. package/dist/src/lib/brillouin/index.ts +0 -8
  625. package/dist/src/lib/brillouin/types.ts +0 -51
  626. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
  627. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
  628. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
  629. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
  630. package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
  631. package/dist/src/lib/chempot-diagram/color.ts +0 -42
  632. package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
  633. package/dist/src/lib/chempot-diagram/index.ts +0 -6
  634. package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
  635. package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
  636. package/dist/src/lib/chempot-diagram/types.ts +0 -130
  637. package/dist/src/lib/colors/index.ts +0 -249
  638. package/dist/src/lib/composition/BarChart.svelte +0 -297
  639. package/dist/src/lib/composition/BubbleChart.svelte +0 -218
  640. package/dist/src/lib/composition/Composition.svelte +0 -165
  641. package/dist/src/lib/composition/Formula.svelte +0 -268
  642. package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
  643. package/dist/src/lib/composition/PieChart.svelte +0 -323
  644. package/dist/src/lib/composition/format.ts +0 -155
  645. package/dist/src/lib/composition/index.ts +0 -37
  646. package/dist/src/lib/composition/parse.ts +0 -605
  647. package/dist/src/lib/constants.ts +0 -134
  648. package/dist/src/lib/controls.ts +0 -42
  649. package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
  650. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
  651. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
  652. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
  653. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
  654. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
  655. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
  656. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
  657. package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
  658. package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
  659. package/dist/src/lib/convex-hull/TemperatureSlider.svelte +0 -140
  660. package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
  661. package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
  662. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
  663. package/dist/src/lib/convex-hull/helpers.ts +0 -932
  664. package/dist/src/lib/convex-hull/index.ts +0 -202
  665. package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
  666. package/dist/src/lib/convex-hull/types.ts +0 -267
  667. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
  668. package/dist/src/lib/coordination/calc-coordination.ts +0 -93
  669. package/dist/src/lib/coordination/index.ts +0 -9
  670. package/dist/src/lib/effects.svelte.ts +0 -48
  671. package/dist/src/lib/element/ElementHeading.svelte +0 -26
  672. package/dist/src/lib/element/ElementPhoto.svelte +0 -57
  673. package/dist/src/lib/element/ElementStats.svelte +0 -80
  674. package/dist/src/lib/element/ElementTile.svelte +0 -484
  675. package/dist/src/lib/element/data.ts +0 -14
  676. package/dist/src/lib/element/index.ts +0 -8
  677. package/dist/src/lib/element/types.ts +0 -62
  678. package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
  679. package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
  680. package/dist/src/lib/feedback/index.ts +0 -4
  681. package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
  682. package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
  683. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
  684. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
  685. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  686. package/dist/src/lib/fermi-surface/compute.ts +0 -728
  687. package/dist/src/lib/fermi-surface/constants.ts +0 -32
  688. package/dist/src/lib/fermi-surface/export.ts +0 -64
  689. package/dist/src/lib/fermi-surface/index.ts +0 -14
  690. package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
  691. package/dist/src/lib/fermi-surface/parse.ts +0 -574
  692. package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
  693. package/dist/src/lib/fermi-surface/types.ts +0 -159
  694. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
  695. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  696. package/dist/src/lib/heatmap-matrix/index.ts +0 -167
  697. package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
  698. package/dist/src/lib/icons.ts +0 -650
  699. package/dist/src/lib/index.ts +0 -61
  700. package/dist/src/lib/io/decompress.ts +0 -92
  701. package/dist/src/lib/io/export.ts +0 -385
  702. package/dist/src/lib/io/fetch.ts +0 -46
  703. package/dist/src/lib/io/file-drop.ts +0 -51
  704. package/dist/src/lib/io/index.ts +0 -7
  705. package/dist/src/lib/io/is-binary.ts +0 -24
  706. package/dist/src/lib/io/types.ts +0 -8
  707. package/dist/src/lib/io/url-drop.ts +0 -141
  708. package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
  709. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
  710. package/dist/src/lib/isosurface/index.ts +0 -7
  711. package/dist/src/lib/isosurface/parse.ts +0 -656
  712. package/dist/src/lib/isosurface/slice.ts +0 -175
  713. package/dist/src/lib/isosurface/types.ts +0 -309
  714. package/dist/src/lib/labels.ts +0 -320
  715. package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
  716. package/dist/src/lib/layout/InfoCard.svelte +0 -120
  717. package/dist/src/lib/layout/InfoTag.svelte +0 -185
  718. package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
  719. package/dist/src/lib/layout/SettingsSection.svelte +0 -148
  720. package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
  721. package/dist/src/lib/layout/fullscreen.ts +0 -65
  722. package/dist/src/lib/layout/index.ts +0 -11
  723. package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
  724. package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
  725. package/dist/src/lib/layout/json-tree/index.ts +0 -3
  726. package/dist/src/lib/layout/json-tree/types.ts +0 -126
  727. package/dist/src/lib/layout/json-tree/utils.ts +0 -682
  728. package/dist/src/lib/marching-cubes.ts +0 -614
  729. package/dist/src/lib/math.ts +0 -1081
  730. package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
  731. package/dist/src/lib/overlays/CopyButton.svelte +0 -45
  732. package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
  733. package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
  734. package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
  735. package/dist/src/lib/overlays/index.ts +0 -3
  736. package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
  737. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
  738. package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
  739. package/dist/src/lib/periodic-table/index.ts +0 -12
  740. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  741. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
  742. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  743. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
  744. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
  745. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
  746. package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
  747. package/dist/src/lib/phase-diagram/colors.ts +0 -58
  748. package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
  749. package/dist/src/lib/phase-diagram/index.ts +0 -13
  750. package/dist/src/lib/phase-diagram/parse.ts +0 -348
  751. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
  752. package/dist/src/lib/phase-diagram/types.ts +0 -144
  753. package/dist/src/lib/phase-diagram/utils.ts +0 -775
  754. package/dist/src/lib/plot/AxisLabel.svelte +0 -51
  755. package/dist/src/lib/plot/BarPlot.svelte +0 -2113
  756. package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
  757. package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
  758. package/dist/src/lib/plot/ColorBar.svelte +0 -721
  759. package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
  760. package/dist/src/lib/plot/ElementScatter.svelte +0 -63
  761. package/dist/src/lib/plot/FillArea.svelte +0 -223
  762. package/dist/src/lib/plot/Histogram.svelte +0 -1558
  763. package/dist/src/lib/plot/HistogramControls.svelte +0 -212
  764. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
  765. package/dist/src/lib/plot/Line.svelte +0 -84
  766. package/dist/src/lib/plot/PlotAxis.svelte +0 -169
  767. package/dist/src/lib/plot/PlotControls.svelte +0 -537
  768. package/dist/src/lib/plot/PlotLegend.svelte +0 -569
  769. package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
  770. package/dist/src/lib/plot/PortalSelect.svelte +0 -253
  771. package/dist/src/lib/plot/ReferenceLine.svelte +0 -204
  772. package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
  773. package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
  774. package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
  775. package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
  776. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
  777. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
  778. package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
  779. package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
  780. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
  781. package/dist/src/lib/plot/Surface3D.svelte +0 -197
  782. package/dist/src/lib/plot/ZeroLines.svelte +0 -97
  783. package/dist/src/lib/plot/ZoomRect.svelte +0 -23
  784. package/dist/src/lib/plot/adaptive-density.ts +0 -316
  785. package/dist/src/lib/plot/auto-place.ts +0 -184
  786. package/dist/src/lib/plot/axis-utils.ts +0 -122
  787. package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
  788. package/dist/src/lib/plot/data-cleaning.ts +0 -1069
  789. package/dist/src/lib/plot/data-transform.ts +0 -69
  790. package/dist/src/lib/plot/defaults.ts +0 -9
  791. package/dist/src/lib/plot/fill-utils.ts +0 -494
  792. package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
  793. package/dist/src/lib/plot/index.ts +0 -53
  794. package/dist/src/lib/plot/interactions.ts +0 -119
  795. package/dist/src/lib/plot/layout.ts +0 -425
  796. package/dist/src/lib/plot/reference-line.ts +0 -426
  797. package/dist/src/lib/plot/scales.ts +0 -654
  798. package/dist/src/lib/plot/svg.ts +0 -23
  799. package/dist/src/lib/plot/types.ts +0 -1144
  800. package/dist/src/lib/plot/utils/label-placement.ts +0 -541
  801. package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
  802. package/dist/src/lib/plot/utils.ts +0 -11
  803. package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
  804. package/dist/src/lib/rdf/calc-rdf.ts +0 -167
  805. package/dist/src/lib/rdf/index.ts +0 -27
  806. package/dist/src/lib/sanitize.ts +0 -126
  807. package/dist/src/lib/settings.ts +0 -1479
  808. package/dist/src/lib/spectral/Bands.svelte +0 -1040
  809. package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
  810. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
  811. package/dist/src/lib/spectral/Dos.svelte +0 -697
  812. package/dist/src/lib/spectral/helpers.ts +0 -1381
  813. package/dist/src/lib/spectral/index.ts +0 -8
  814. package/dist/src/lib/spectral/types.ts +0 -112
  815. package/dist/src/lib/state.svelte.ts +0 -64
  816. package/dist/src/lib/structure/Arrow.svelte +0 -72
  817. package/dist/src/lib/structure/AtomLegend.svelte +0 -815
  818. package/dist/src/lib/structure/Bond.svelte +0 -140
  819. package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
  820. package/dist/src/lib/structure/CellSelect.svelte +0 -349
  821. package/dist/src/lib/structure/Cylinder.svelte +0 -45
  822. package/dist/src/lib/structure/Lattice.svelte +0 -196
  823. package/dist/src/lib/structure/Structure.svelte +0 -2248
  824. package/dist/src/lib/structure/StructureControls.svelte +0 -1273
  825. package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
  826. package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
  827. package/dist/src/lib/structure/StructureScene.svelte +0 -2255
  828. package/dist/src/lib/structure/atom-properties.ts +0 -316
  829. package/dist/src/lib/structure/bond-order-perception.ts +0 -447
  830. package/dist/src/lib/structure/bonding.ts +0 -944
  831. package/dist/src/lib/structure/export.ts +0 -861
  832. package/dist/src/lib/structure/index.ts +0 -291
  833. package/dist/src/lib/structure/label-placement.ts +0 -130
  834. package/dist/src/lib/structure/measure.ts +0 -45
  835. package/dist/src/lib/structure/parse.ts +0 -1705
  836. package/dist/src/lib/structure/partial-occupancy.ts +0 -183
  837. package/dist/src/lib/structure/pbc.ts +0 -164
  838. package/dist/src/lib/structure/supercell.ts +0 -226
  839. package/dist/src/lib/structure/validation.ts +0 -11
  840. package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
  841. package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
  842. package/dist/src/lib/symmetry/cell-transform.ts +0 -118
  843. package/dist/src/lib/symmetry/index.ts +0 -348
  844. package/dist/src/lib/symmetry/spacegroups.ts +0 -404
  845. package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
  846. package/dist/src/lib/table/ToggleMenu.svelte +0 -385
  847. package/dist/src/lib/table/index.ts +0 -139
  848. package/dist/src/lib/theme/ThemeControl.svelte +0 -53
  849. package/dist/src/lib/theme/index.ts +0 -107
  850. package/dist/src/lib/time.ts +0 -71
  851. package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
  852. package/dist/src/lib/tooltip/index.ts +0 -2
  853. package/dist/src/lib/tooltip/types.ts +0 -13
  854. package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
  855. package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
  856. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
  857. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
  858. package/dist/src/lib/trajectory/constants.ts +0 -7
  859. package/dist/src/lib/trajectory/extract.ts +0 -196
  860. package/dist/src/lib/trajectory/format-detect.ts +0 -96
  861. package/dist/src/lib/trajectory/frame-reader.ts +0 -456
  862. package/dist/src/lib/trajectory/helpers.ts +0 -217
  863. package/dist/src/lib/trajectory/index.ts +0 -218
  864. package/dist/src/lib/trajectory/parse/ase.ts +0 -109
  865. package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
  866. package/dist/src/lib/trajectory/parse/index.ts +0 -411
  867. package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
  868. package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
  869. package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
  870. package/dist/src/lib/trajectory/plotting.ts +0 -599
  871. package/dist/src/lib/trajectory/types.ts +0 -13
  872. package/dist/src/lib/utils.ts +0 -56
  873. package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
  874. package/dist/src/lib/xrd/broadening.ts +0 -130
  875. package/dist/src/lib/xrd/calc-xrd.ts +0 -397
  876. package/dist/src/lib/xrd/index.ts +0 -38
  877. package/dist/src/lib/xrd/parse.ts +0 -858
  878. package/dist/webview.js +0 -29421
  879. package/icon.png +0 -0
  880. package/matterviz-0.3.2.vsix +0 -0
  881. package/matterviz-0.3.4.vsix +0 -0
  882. package/matterviz-0.3.5.vsix +0 -0
  883. package/scripts/sync-config.ts +0 -101
  884. package/src/declarations.d.ts +0 -2
  885. package/src/extension.ts +0 -972
  886. package/src/node-io.ts +0 -65
  887. package/src/types.ts +0 -17
  888. package/src/webview/JsonBrowser.svelte +0 -1079
  889. package/src/webview/PlotPanel.svelte +0 -346
  890. package/src/webview/detect.ts +0 -444
  891. package/src/webview/main.ts +0 -764
  892. package/src/webview/plot-utils.ts +0 -250
  893. package/test-fixtures/all-viz-types.json.gz +0 -0
  894. package/test-fixtures/plot-demo-data.json.gz +0 -0
  895. package/tests/detect.test.ts +0 -604
  896. package/tests/extension.test.ts +0 -2041
  897. package/tests/node-io.test.ts +0 -39
  898. package/tests/plot-utils.test.ts +0 -302
  899. package/tests/vite-plugin-json-gz.test.ts +0 -114
  900. package/tests/vscode-mock.ts +0 -18
  901. package/tests/webview.test.ts +0 -231
  902. package/tsconfig.json +0 -20
  903. package/vite-plugin-json-gz.ts +0 -29
  904. package/vite.config.ts +0 -34
  905. package/vite.extension.config.ts +0 -34
  906. /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
  907. /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
  908. /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
  909. /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
  910. /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
  911. /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
  912. /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
  913. /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
  914. /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
  915. /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
  916. /package/dist/{src/lib/element → element}/data.json +0 -0
  917. /package/dist/{src/lib/element → element}/data.json.gz +0 -0
  918. /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
  919. /package/dist/{src/lib/element → element}/data.schema.json +0 -0
  920. /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
  921. /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
  922. /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
  923. /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
  924. /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
  925. /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
  926. /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
@@ -1,861 +0,0 @@
1
- import { get_electro_neg_formula } from '$lib/composition'
2
- import { download } from '$lib/io/fetch'
3
- import type { Vec3 } from '$lib/math'
4
- import * as math from '$lib/math'
5
- import type { AnyStructure } from '$lib/structure'
6
- import type { BufferGeometry, InstancedMesh, Material, Object3D, Scene } from 'three'
7
- import { Color, Group, Matrix4, Mesh, MeshStandardMaterial, ShaderMaterial } from 'three'
8
- import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js'
9
- import { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter.js'
10
-
11
- // Type guard to check if a material has a color property (duck typing for bundler compatibility)
12
- // Uses duck typing to work across different Three.js instances (Threlte vs vanilla Three.js)
13
- export function has_color_property(mat: Material): mat is Material & { color: Color } {
14
- if (!(`color` in mat)) return false
15
- const color = (mat as { color: unknown }).color
16
- if (!color || typeof color !== `object`) return false
17
- // Check for Color-like object with numeric r/g/b channels (duck typing)
18
- const color_obj = color as { r?: unknown; g?: unknown; b?: unknown }
19
- const red_channel = color_obj.r
20
- const green_channel = color_obj.g
21
- const blue_channel = color_obj.b
22
- return (
23
- typeof red_channel === `number` &&
24
- typeof green_channel === `number` &&
25
- typeof blue_channel === `number`
26
- )
27
- }
28
-
29
- // Extract color from a ShaderMaterial by checking common color uniform patterns
30
- function extract_shader_color(shader_mat: ShaderMaterial): Color | null {
31
- const uniforms = shader_mat.uniforms
32
- if (!uniforms) return null
33
-
34
- // Check for common color uniform names
35
- for (const key of [`color`, `diffuse`, `baseColor`, `uColor`]) {
36
- if (uniforms[key]?.value instanceof Color) {
37
- return uniforms[key].value.clone()
38
- }
39
- }
40
-
41
- // For gradient bonds, try to extract midpoint color from instanceColorStart/End attributes
42
- // These are set as geometry attributes, not uniforms, so we return a default gray
43
- return null
44
- }
45
-
46
- // Convert ShaderMaterial to MeshStandardMaterial for export compatibility
47
- function convert_shader_to_standard(shader_mat: ShaderMaterial): MeshStandardMaterial {
48
- const extracted_color = extract_shader_color(shader_mat)
49
- const standard_mat = new MeshStandardMaterial({
50
- color: extracted_color ?? new Color(0.5, 0.5, 0.5),
51
- metalness: 0.1,
52
- roughness: 0.5,
53
- })
54
- standard_mat.name = shader_mat.name || `converted_shader_material`
55
- return standard_mat
56
- }
57
-
58
- // Extract bond gradient colors from geometry attributes for a specific instance
59
- // Returns midpoint color between start and end colors for the bond
60
- export function extract_bond_color_for_instance(
61
- geometry: BufferGeometry,
62
- instance_idx: number,
63
- ): Color | null {
64
- const color_start_attr = geometry.getAttribute(`instanceColorStart`)
65
- const color_end_attr = geometry.getAttribute(`instanceColorEnd`)
66
-
67
- if (!color_start_attr || !color_end_attr) return null
68
- if (instance_idx < 0 || instance_idx >= color_start_attr.count) return null
69
-
70
- // Get RGB values for this instance and compute midpoint color
71
- const start_rgb: Vec3 = [
72
- color_start_attr.getX(instance_idx),
73
- color_start_attr.getY(instance_idx),
74
- color_start_attr.getZ(instance_idx),
75
- ]
76
- const end_rgb: Vec3 = [
77
- color_end_attr.getX(instance_idx),
78
- color_end_attr.getY(instance_idx),
79
- color_end_attr.getZ(instance_idx),
80
- ]
81
- const [mid_r, mid_g, mid_b] = math.scale(math.add(start_rgb, end_rgb), 0.5)
82
- return new Color(mid_r, mid_g, mid_b)
83
- }
84
-
85
- // Remove custom/non-standard attributes from geometry that cause export issues
86
- // Standard GLTF attributes: position, normal, tangent, texcoord_N, color_N, joints_N, weights_N
87
- export function clean_geometry_for_export(geometry: BufferGeometry): void {
88
- const standard_attrs = new Set([
89
- `position`,
90
- `normal`,
91
- `tangent`,
92
- `uv`,
93
- `uv1`,
94
- `uv2`,
95
- `uv3`,
96
- `color`,
97
- `skinIndex`,
98
- `skinWeight`,
99
- ])
100
-
101
- const attrs_to_remove: string[] = []
102
- for (const attr_name of Object.keys(geometry.attributes)) {
103
- // Keep standard attributes and those starting with underscore (GLTF custom)
104
- // But remove instance-specific attributes that cause accessor count mismatches
105
- const lower_name = attr_name.toLowerCase()
106
- if (
107
- lower_name.includes(`instance`) ||
108
- (lower_name.includes(`color`) && !standard_attrs.has(lower_name))
109
- )
110
- attrs_to_remove.push(attr_name)
111
- }
112
-
113
- for (const attr_name of attrs_to_remove) {
114
- geometry.deleteAttribute(attr_name)
115
- }
116
- }
117
-
118
- // Generate MTL (Wavefront Material) content from scene materials
119
- export function generate_mtl_content(scene: Scene): string {
120
- const lines: string[] = [`# MTL file generated by MatterViz`, ``]
121
- const processed_materials = new Set<string>()
122
-
123
- scene.traverse((object) => {
124
- if (!(object instanceof Mesh)) return
125
-
126
- const materials = Array.isArray(object.material) ? object.material : [object.material]
127
- for (const mat of materials) {
128
- // Skip if already processed or no name
129
- const mat_name = mat.name || `default_material`
130
- if (processed_materials.has(mat_name)) continue
131
- processed_materials.add(mat_name)
132
-
133
- lines.push(`newmtl ${mat_name}`)
134
-
135
- // Get diffuse color (main color)
136
- if (has_color_property(mat)) {
137
- const color = mat.color
138
- lines.push(`Kd ${color.r.toFixed(6)} ${color.g.toFixed(6)} ${color.b.toFixed(6)}`)
139
- // Ambient is typically a fraction of diffuse
140
- lines.push(
141
- `Ka ${(color.r * 0.2).toFixed(6)} ${(color.g * 0.2).toFixed(6)} ${(
142
- color.b * 0.2
143
- ).toFixed(6)}`,
144
- )
145
- } else {
146
- // Default white if no color
147
- lines.push(`Kd 1.000000 1.000000 1.000000`)
148
- lines.push(`Ka 0.200000 0.200000 0.200000`)
149
- }
150
-
151
- // Specular properties
152
- lines.push(`Ks 0.500000 0.500000 0.500000`)
153
- lines.push(`Ns 96.078431`) // Specular exponent
154
-
155
- // Transparency (d = 1.0 is fully opaque)
156
- const opacity = `opacity` in mat && typeof mat.opacity === `number` ? mat.opacity : 1.0
157
- lines.push(`d ${opacity.toFixed(6)}`)
158
-
159
- // Illumination model (2 = highlight on)
160
- lines.push(`illum 2`)
161
- lines.push(``)
162
- }
163
- })
164
-
165
- return lines.join(`\n`)
166
- }
167
-
168
- // Extract color from material, returning RGB values or null if not found
169
- function extract_material_color(mat: Material): { r: number; g: number; b: number } | null {
170
- if (has_color_property(mat)) {
171
- return { r: mat.color.r, g: mat.color.g, b: mat.color.b }
172
- }
173
- return null
174
- }
175
-
176
- // Helper function to convert InstancedMesh to regular Mesh objects for export
177
- // This is necessary because GLB/OBJ exporters don't handle InstancedMesh properly
178
- // Note: Threlte's InstancedMesh sets isInstancedMesh=true but type remains "Mesh"
179
- // Type guard for InstancedMesh (Three.js uses isInstancedMesh property, not exposed in Object3D type)
180
- const is_instanced_mesh = (obj: Object3D): obj is InstancedMesh =>
181
- (obj as InstancedMesh).isInstancedMesh || obj.type === `InstancedMesh`
182
-
183
- function convert_instanced_meshes_to_regular(scene: Scene): Scene {
184
- // STEP 1: Collect material colors from ORIGINAL scene BEFORE cloning
185
- // This is crucial because scene.clone() may not properly preserve Threlte's material colors
186
- const material_colors = new Map<string, { r: number; g: number; b: number }>()
187
- const bond_colors_map = new Map<string, Map<number, Color>>()
188
-
189
- scene.traverse((object) => {
190
- const is_instanced = is_instanced_mesh(object)
191
- if (!is_instanced) return
192
-
193
- const instanced_mesh = object
194
- const mesh_id = instanced_mesh.uuid
195
-
196
- // Check if this is a shader material (bonds)
197
- const mat = instanced_mesh.material
198
- const is_shader = Array.isArray(mat)
199
- ? mat.some((material) => material instanceof ShaderMaterial)
200
- : mat instanceof ShaderMaterial
201
-
202
- if (is_shader) {
203
- // Extract bond colors for each instance from geometry attributes
204
- const instance_colors = new Map<number, Color>()
205
- for (let idx = 0; idx < instanced_mesh.count; idx++) {
206
- const bond_color = extract_bond_color_for_instance(instanced_mesh.geometry, idx)
207
- if (bond_color) {
208
- instance_colors.set(idx, bond_color)
209
- }
210
- }
211
- bond_colors_map.set(mesh_id, instance_colors)
212
- } else {
213
- // Extract shared material color for atoms
214
- const single_mat = Array.isArray(mat) ? mat[0] : mat
215
- const color = extract_material_color(single_mat)
216
- if (color) {
217
- material_colors.set(mesh_id, color)
218
- }
219
- }
220
- })
221
-
222
- // STEP 2: Clone the scene
223
- const cloned_scene = scene.clone()
224
-
225
- // STEP 3: Find all InstancedMesh objects in the cloned scene and build uuid mapping
226
- const original_meshes: InstancedMesh[] = []
227
- const cloned_meshes: InstancedMesh[] = []
228
-
229
- scene.traverse((object) => {
230
- if (is_instanced_mesh(object)) original_meshes.push(object)
231
- })
232
-
233
- cloned_scene.traverse((object) => {
234
- if (is_instanced_mesh(object)) cloned_meshes.push(object)
235
- })
236
-
237
- // STEP 4: Convert each InstancedMesh to individual Mesh objects
238
- for (let mesh_idx = 0; mesh_idx < cloned_meshes.length; mesh_idx++) {
239
- const instanced_mesh = cloned_meshes[mesh_idx]
240
- const original_mesh = original_meshes[mesh_idx]
241
- const original_uuid = original_mesh?.uuid || instanced_mesh.uuid
242
-
243
- const parent = instanced_mesh.parent
244
- if (!parent || !instanced_mesh.instanceMatrix) continue
245
-
246
- // Create a group to hold all the individual meshes
247
- const group = new Group()
248
- group.name = instanced_mesh.name
249
-
250
- // Get the base transform from the InstancedMesh
251
- const base_matrix = new Matrix4()
252
- base_matrix.copy(instanced_mesh.matrix)
253
-
254
- // Get stored colors for this mesh
255
- const stored_color = material_colors.get(original_uuid)
256
- const stored_bond_colors = bond_colors_map.get(original_uuid)
257
-
258
- // Check if material is a ShaderMaterial
259
- const original_material = instanced_mesh.material
260
- const has_shader = Array.isArray(original_material)
261
- ? original_material.some((mat) => mat instanceof ShaderMaterial)
262
- : original_material instanceof ShaderMaterial
263
-
264
- // Create individual meshes for each instance
265
- const instance_matrix = new Matrix4()
266
- for (let idx = 0; idx < instanced_mesh.count; idx++) {
267
- instanced_mesh.getMatrixAt(idx, instance_matrix)
268
-
269
- // Clone geometry
270
- const cloned_geometry = instanced_mesh.geometry.clone()
271
-
272
- // Clean up custom attributes from shader-based geometries
273
- if (has_shader) {
274
- clean_geometry_for_export(cloned_geometry)
275
- }
276
-
277
- // Create material - always create fresh MeshStandardMaterial for reliability
278
- const new_material = new MeshStandardMaterial({
279
- metalness: 0.1,
280
- roughness: 0.5,
281
- })
282
- new_material.name = `material_${mesh_idx}_${idx}`
283
-
284
- // Apply the correct color
285
- const bond_color = stored_bond_colors?.get(idx)
286
- if (bond_color) {
287
- // Bond with gradient color - use stored midpoint color
288
- new_material.color.copy(bond_color)
289
- } else if (stored_color) {
290
- // Atom with shared material color
291
- new_material.color.setRGB(stored_color.r, stored_color.g, stored_color.b)
292
- } else if (instanced_mesh.instanceColor) {
293
- // Fallback: per-instance colors from instanceColor attribute
294
- const color_r = instanced_mesh.instanceColor.getX(idx)
295
- const color_g = instanced_mesh.instanceColor.getY(idx)
296
- const color_b = instanced_mesh.instanceColor.getZ(idx)
297
- new_material.color.setRGB(color_r, color_g, color_b)
298
- }
299
- // If no color found, material stays default white
300
-
301
- const mesh = new Mesh(cloned_geometry, new_material)
302
-
303
- // Combine base transform with instance transform
304
- const combined_matrix = new Matrix4()
305
- combined_matrix.multiplyMatrices(base_matrix, instance_matrix)
306
- mesh.applyMatrix4(combined_matrix)
307
-
308
- group.add(mesh)
309
- }
310
-
311
- // Replace the InstancedMesh with the Group in the parent
312
- parent.remove(instanced_mesh)
313
- parent.add(group)
314
-
315
- // Update world matrices after scene graph modification
316
- group.updateMatrixWorld(true)
317
- }
318
-
319
- // Update all world matrices in the modified scene
320
- cloned_scene.updateMatrixWorld(true)
321
-
322
- // Convert any remaining ShaderMaterials to standard materials (e.g. non-instanced bonds)
323
- // Also clean up custom geometry attributes that cause export validation errors
324
- cloned_scene.traverse((object) => {
325
- if (object instanceof Mesh) {
326
- let has_shader_material = false
327
- if (object.material instanceof ShaderMaterial) {
328
- object.material = convert_shader_to_standard(object.material)
329
- has_shader_material = true
330
- } else if (Array.isArray(object.material)) {
331
- has_shader_material = object.material.some((mat) => mat instanceof ShaderMaterial)
332
- object.material = object.material.map((mat) =>
333
- mat instanceof ShaderMaterial ? convert_shader_to_standard(mat) : mat,
334
- )
335
- }
336
- // Clean up custom attributes from geometries that had shader materials
337
- if (has_shader_material && object.geometry) {
338
- clean_geometry_for_export(object.geometry)
339
- }
340
- }
341
- })
342
-
343
- return cloned_scene
344
- }
345
-
346
- // Generate a filename for structure exports based on structure metadata
347
- // Sanitize string for use in filenames by removing problematic characters.
348
- const sanitize_filename_part = (text: string): string =>
349
- text
350
- .replace(/<\/?[^>]+>/g, ``) // strip HTML tags
351
- .replace(/[/\\:*?"<>|]/g, `_`) // replace filesystem-invalid chars
352
- .replace(/_+/g, `_`) // condense consecutive underscores
353
- .replace(/^_|_$/g, ``) // remove leading/trailing underscores
354
-
355
- export function create_structure_filename(
356
- structure: AnyStructure | undefined,
357
- extension: string,
358
- ): string {
359
- if (!structure) return `structure.${extension}`
360
-
361
- const parts: string[] = []
362
- // Helper to sanitize and push non-empty parts
363
- const safe_push = (value: string | undefined) => {
364
- const sanitized = value ? sanitize_filename_part(value) : ``
365
- if (sanitized) parts.push(sanitized)
366
- }
367
- safe_push(structure.id)
368
-
369
- // Add formula (plain text to avoid HTML in filenames)
370
- const formula = get_electro_neg_formula(structure, true)
371
- if (formula && formula !== `Unknown`) {
372
- safe_push(formula.replaceAll(` `, ``))
373
- }
374
-
375
- // Add space group if available
376
- if (
377
- `symmetry` in structure &&
378
- structure.symmetry &&
379
- typeof structure.symmetry === `object` &&
380
- `space_group_symbol` in structure.symmetry
381
- ) {
382
- const space_group = structure.symmetry.space_group_symbol
383
- if (space_group && typeof space_group === `string`) {
384
- safe_push(space_group.replaceAll(` `, ``))
385
- }
386
- }
387
-
388
- // Add lattice system if available
389
- if (
390
- `lattice` in structure &&
391
- structure.lattice &&
392
- typeof structure.lattice === `object` &&
393
- `lattice_system` in structure.lattice
394
- ) {
395
- const lattice_system = structure.lattice.lattice_system
396
- if (lattice_system && typeof lattice_system === `string`) {
397
- safe_push(lattice_system)
398
- }
399
- }
400
-
401
- // Add number of sites
402
- if (structure.sites?.length) parts.push(`${structure.sites.length}sites`)
403
-
404
- const base_name = parts.length > 0 ? parts.join(`-`) : `structure`
405
- return `${base_name}.${extension}`
406
- }
407
-
408
- // Generate XYZ content string without saving
409
- export function structure_to_xyz_str(structure?: AnyStructure): string {
410
- if (!structure?.sites) throw new Error(`No structure or sites to export`)
411
-
412
- const lines: string[] = []
413
-
414
- // First line: number of atoms
415
- lines.push(String(structure.sites.length))
416
-
417
- // Second line: comment (structure ID, formula, or default)
418
- const comment_parts: string[] = []
419
- if (structure.id) comment_parts.push(structure.id)
420
- const formula = get_electro_neg_formula(structure, true)
421
- if (formula && formula !== `Unknown`) comment_parts.push(formula)
422
-
423
- // Include extended XYZ lattice information when available so round-trips preserve lattice
424
- if (`lattice` in structure && structure.lattice?.matrix?.length === 3) {
425
- const lattice_values = structure.lattice.matrix
426
- .flat()
427
- .map((value: number) => (Number.isFinite(value) ? value : 0).toFixed(8))
428
- .join(` `)
429
- comment_parts.push(`Lattice="${lattice_values}"`)
430
- }
431
-
432
- const comment =
433
- comment_parts.length > 0 ? comment_parts.join(` `) : `Generated from structure`
434
- lines.push(comment)
435
-
436
- // Cache converter for fractional→Cartesian (if lattice available)
437
- const frac_to_cart =
438
- `lattice` in structure && structure.lattice?.matrix?.length === 3
439
- ? math.create_frac_to_cart(structure.lattice.matrix)
440
- : null
441
-
442
- // Atom lines: element symbol followed by x, y, z coordinates
443
- for (const site of structure.sites) {
444
- // Extract element symbol from species
445
- let element_symbol = `X` // default fallback
446
- if (site.species && Array.isArray(site.species) && site.species.length > 0) {
447
- // species is an array of Species objects with element property
448
- const first_species = site.species[0]
449
- if (first_species && `element` in first_species && first_species.element)
450
- element_symbol = first_species.element
451
- }
452
-
453
- // Get coordinates - prefer xyz; fallback to abc (converted to cartesian if lattice available)
454
- let coords: number[]
455
- if (site.xyz && Array.isArray(site.xyz) && site.xyz.length >= 3) {
456
- coords = site.xyz.slice(0, 3)
457
- } else if (site.abc?.length >= 3 && frac_to_cart) {
458
- coords = frac_to_cart(site.abc)
459
- } else coords = [0, 0, 0] // fallback
460
-
461
- // Format coordinates to reasonable precision
462
- const [x, y, z] = coords.map((coord) => coord.toFixed(6))
463
- lines.push(`${element_symbol} ${x} ${y} ${z}`)
464
- }
465
-
466
- return lines.join(`\n`)
467
- }
468
-
469
- // Generate a valid CIF data block name from structure formula
470
- // CIF block names can contain alphanumerics, underscores, but no spaces or special chars
471
- function get_cif_block_name(structure: AnyStructure): string {
472
- try {
473
- // Count atoms per element (rounded to nearest integer for occupancy)
474
- const element_counts: Record<string, number> = {}
475
- for (const site of structure.sites) {
476
- if (!site.species || !Array.isArray(site.species)) continue
477
- for (const species of site.species) {
478
- if (!species.element) continue
479
- const count = species.occu ?? 1
480
- element_counts[species.element] = (element_counts[species.element] ?? 0) + count
481
- }
482
- }
483
-
484
- // Sort elements alphabetically and build formula string
485
- const elements = Object.keys(element_counts).sort()
486
- if (elements.length === 0) throw new Error(`No elements found`)
487
-
488
- const formula = elements
489
- .map((el) => {
490
- const count = Math.round(element_counts[el])
491
- if (count === 0) return null // filter out near-zero occupancies
492
- return count === 1 ? el : `${el}${count}`
493
- })
494
- .filter((part): part is string => part !== null)
495
- .join(``)
496
-
497
- if (!formula) throw new Error(`All occupancies round to zero`)
498
- return formula
499
- } catch {
500
- // Fall back to structure.id (sanitized) or generic name
501
- if (structure.id) {
502
- // Remove invalid CIF characters (keep alphanumerics and underscores)
503
- // and condense consecutive underscores for cleaner block names
504
- return structure.id.replace(/[^a-zA-Z0-9_]/g, `_`).replace(/_+/g, `_`)
505
- }
506
- return `structure`
507
- }
508
- }
509
-
510
- // Generate CIF content string without saving
511
- export function structure_to_cif_str(structure?: AnyStructure): string {
512
- if (!structure?.sites) throw new Error(`No structure or sites to export`)
513
- if (!(`lattice` in structure) || !structure.lattice) {
514
- throw new Error(`No lattice information for CIF export`)
515
- }
516
-
517
- const lines: string[] = []
518
-
519
- // CIF header with data block (required by pymatgen and CIF spec)
520
- lines.push(`# CIF file generated by MatterViz`)
521
- const block_name = get_cif_block_name(structure)
522
- lines.push(`data_${block_name}`)
523
- lines.push(``)
524
-
525
- // Cell parameters
526
- const lattice = structure.lattice
527
- if (lattice.a && lattice.b && lattice.c) {
528
- lines.push(`_cell_length_a ${lattice.a.toFixed(6)}`)
529
- lines.push(`_cell_length_b ${lattice.b.toFixed(6)}`)
530
- lines.push(`_cell_length_c ${lattice.c.toFixed(6)}`)
531
- }
532
- if (lattice.alpha && lattice.beta && lattice.gamma) {
533
- lines.push(`_cell_angle_alpha ${lattice.alpha.toFixed(6)}`)
534
- lines.push(`_cell_angle_beta ${lattice.beta.toFixed(6)}`)
535
- lines.push(`_cell_angle_gamma ${lattice.gamma.toFixed(6)}`)
536
- }
537
-
538
- // Space group information
539
- if (
540
- `symmetry` in structure &&
541
- structure.symmetry &&
542
- typeof structure.symmetry === `object`
543
- ) {
544
- const symmetry = structure.symmetry as Record<string, unknown>
545
- const { space_group_number, space_group_symbol } = symmetry
546
- if (typeof space_group_symbol === `string` && space_group_symbol) {
547
- lines.push(`_space_group_name_H-M_alt ${space_group_symbol}`)
548
- }
549
- if (
550
- (typeof space_group_number === `number` || typeof space_group_number === `string`) &&
551
- space_group_number
552
- ) {
553
- lines.push(`_space_group_IT_number ${space_group_number}`)
554
- }
555
- }
556
-
557
- lines.push(``)
558
-
559
- // Atom site loop header
560
- lines.push(`loop_`)
561
- lines.push(`_atom_site_label`)
562
- lines.push(`_atom_site_type_symbol`)
563
- lines.push(`_atom_site_fract_x`)
564
- lines.push(`_atom_site_fract_y`)
565
- lines.push(`_atom_site_fract_z`)
566
- lines.push(`_atom_site_occupancy`)
567
-
568
- // Cache inverse transpose for Cartesian→fractional conversion (avoids recomputing per site)
569
- const cart_to_frac =
570
- lattice.matrix?.length === 3 ? math.create_cart_to_frac(lattice.matrix) : null
571
-
572
- // Atom sites
573
- for (let idx = 0; idx < structure.sites.length; idx++) {
574
- const site = structure.sites[idx]
575
- if (!site) continue // Skip if site is undefined
576
-
577
- // Extract element symbol from species
578
- let element_symbol = `X` // default fallback
579
- let occupancy = 1
580
- if (site.species && Array.isArray(site.species) && site.species.length > 0) {
581
- const first_species = site.species[0]
582
- if (first_species && `element` in first_species && first_species.element) {
583
- element_symbol = first_species.element
584
- occupancy = first_species?.occu ?? 1
585
- }
586
- }
587
-
588
- // Get fractional coordinates
589
- let frac_coords: number[]
590
- if (site.abc && Array.isArray(site.abc) && site.abc.length >= 3) {
591
- frac_coords = site.abc.slice(0, 3)
592
- } else if (site.xyz?.length >= 3 && cart_to_frac) {
593
- frac_coords = cart_to_frac(site.xyz)
594
- } else throw new Error(`No valid coordinates found for site ${idx}`)
595
-
596
- // Format: label element_symbol x y z
597
- const label = site.label || `${element_symbol}${idx + 1}`
598
- lines.push(
599
- `${label} ${element_symbol} ${frac_coords[0].toFixed(8)} ${frac_coords[1].toFixed(
600
- 8,
601
- )} ${frac_coords[2].toFixed(8)} ${occupancy.toFixed(8)}`,
602
- )
603
- }
604
-
605
- return lines.join(`\n`)
606
- }
607
-
608
- // Generate VASP POSCAR content string without saving
609
- export function structure_to_poscar_str(structure?: AnyStructure): string {
610
- if (!structure?.sites) throw new Error(`No structure or sites to export`)
611
- if (!(`lattice` in structure) || !structure.lattice) {
612
- throw new Error(`No lattice information for POSCAR export`)
613
- }
614
- const lines: string[] = []
615
-
616
- // Use plain text formula for POSCAR title to avoid HTML tags
617
- const formula = get_electro_neg_formula(structure, true)
618
- const title =
619
- structure.id ||
620
- (formula && formula !== `Unknown` ? formula : null) ||
621
- `Generated from structure`
622
- lines.push(title)
623
- lines.push(`1.0`) // Scale factor (1.0 for direct coordinates)
624
-
625
- const lattice = structure.lattice
626
- if (lattice.matrix && Array.isArray(lattice.matrix) && lattice.matrix.length >= 3) {
627
- // Convert 3x3 matrix to 3 vectors
628
- const matrix = lattice.matrix
629
- lines.push(
630
- `${matrix[0][0].toFixed(8)} ${matrix[0][1].toFixed(8)} ${matrix[0][2].toFixed(8)}`,
631
- )
632
- lines.push(
633
- `${matrix[1][0].toFixed(8)} ${matrix[1][1].toFixed(8)} ${matrix[1][2].toFixed(8)}`,
634
- )
635
- lines.push(
636
- `${matrix[2][0].toFixed(8)} ${matrix[2][1].toFixed(8)} ${matrix[2][2].toFixed(8)}`,
637
- )
638
- } else {
639
- throw new Error(`No valid lattice matrix for POSCAR export`)
640
- }
641
-
642
- // Count atoms by element
643
- const element_counts = new Map<string, number>()
644
- const element_symbols: string[] = []
645
-
646
- for (const site of structure.sites) {
647
- let element_symbol = `X` // default fallback
648
- if (site.species && Array.isArray(site.species) && site.species.length > 0) {
649
- const first_species = site.species[0]
650
- if (first_species && `element` in first_species && first_species.element) {
651
- element_symbol = first_species.element
652
- }
653
- }
654
-
655
- if (!element_counts.has(element_symbol)) {
656
- element_counts.set(element_symbol, 0)
657
- element_symbols.push(element_symbol)
658
- }
659
- element_counts.set(element_symbol, Number(element_counts.get(element_symbol)) + 1)
660
- }
661
-
662
- // Element symbols line
663
- lines.push(element_symbols.join(` `))
664
-
665
- // Atom counts line
666
- lines.push(element_symbols.map((el) => element_counts.get(el)).join(` `))
667
-
668
- // Check if any site has selective dynamics
669
- const has_selective_dynamics = structure.sites.some(
670
- (site) => site.properties?.selective_dynamics,
671
- )
672
- if (has_selective_dynamics) {
673
- lines.push(`Selective dynamics`)
674
- }
675
-
676
- // Coordinate mode (Direct = fractional coordinates)
677
- lines.push(`Direct`)
678
-
679
- // Cache inverse transpose for Cartesian→fractional conversion (avoids recomputing per site)
680
- const cart_to_frac =
681
- lattice.matrix?.length === 3 ? math.create_cart_to_frac(lattice.matrix) : null
682
-
683
- // Atom coordinates grouped by element
684
- for (const element_symbol of element_symbols) {
685
- for (const site of structure.sites) {
686
- let site_element = `X`
687
- if (site.species && Array.isArray(site.species) && site.species.length > 0) {
688
- const first_species = site.species[0]
689
- if (first_species && `element` in first_species && first_species.element) {
690
- site_element = first_species.element
691
- }
692
- }
693
-
694
- if (site_element === element_symbol) {
695
- // Get fractional coordinates
696
- let frac_coords: number[]
697
- if (site.abc && Array.isArray(site.abc) && site.abc.length >= 3) {
698
- frac_coords = site.abc.slice(0, 3)
699
- } else if (site.xyz?.length >= 3 && cart_to_frac) {
700
- frac_coords = cart_to_frac(site.xyz.slice(0, 3) as Vec3)
701
- } else {
702
- throw new Error(`No valid coordinates found for site`)
703
- }
704
-
705
- let selective_dynamics_str = ``
706
- if (has_selective_dynamics) {
707
- const sel_dyn = (site.properties?.selective_dynamics ?? [
708
- true,
709
- true,
710
- true,
711
- ]) as boolean[]
712
- selective_dynamics_str = ` ${sel_dyn[0] ? `T` : `F`} ${
713
- sel_dyn[1] ? `T` : `F`
714
- } ${sel_dyn[2] ? `T` : `F`}`
715
- }
716
-
717
- lines.push(
718
- `${frac_coords[0].toFixed(8)} ${frac_coords[1].toFixed(8)} ${frac_coords[2].toFixed(
719
- 8,
720
- )}${selective_dynamics_str}`,
721
- )
722
- }
723
- }
724
- }
725
-
726
- return lines.join(`\n`)
727
- }
728
-
729
- // Generate JSON content string without saving
730
- export function structure_to_json_str(structure?: AnyStructure): string {
731
- if (!structure) throw new Error(`No structure to export`)
732
- return JSON.stringify(structure, null, 2)
733
- }
734
-
735
- // Export structure as CIF format
736
- export function export_structure_as_cif(structure?: AnyStructure): void {
737
- try {
738
- const content = structure_to_cif_str(structure)
739
- const filename = create_structure_filename(structure, `cif`)
740
- download(content, filename, `chemical/x-cif`)
741
- } catch (error) {
742
- console.error(`Failed to export CIF:`, error)
743
- }
744
- }
745
-
746
- // Export structure as VASP POSCAR format
747
- export function export_structure_as_poscar(structure?: AnyStructure): void {
748
- try {
749
- const content = structure_to_poscar_str(structure)
750
- const filename = create_structure_filename(structure, `poscar`)
751
- download(content, filename, `text/plain`)
752
- } catch (error) {
753
- console.error(`Failed to export POSCAR:`, error)
754
- }
755
- }
756
-
757
- // Export structure as XYZ format. Format specification:
758
- // - Line 1: Number of atoms
759
- // - Line 2: Comment line (structure ID, formula, etc.)
760
- // - Remaining lines: Element symbol followed by x, y, z coordinates (in Angstrom)
761
- export function export_structure_as_xyz(structure?: AnyStructure): void {
762
- try {
763
- const xyz_content = structure_to_xyz_str(structure)
764
- const filename = create_structure_filename(structure, `xyz`)
765
- download(xyz_content, filename, `text/plain`)
766
- } catch (error) {
767
- console.error(`Error exporting XYZ:`, error)
768
- }
769
- }
770
-
771
- // Export structure in pymatgen JSON format
772
- export function export_structure_as_json(structure?: AnyStructure): void {
773
- try {
774
- const data = structure_to_json_str(structure)
775
- const filename = create_structure_filename(structure, `json`)
776
- download(data, filename, `application/json`)
777
- } catch (error) {
778
- console.error(`Error exporting JSON:`, error)
779
- }
780
- }
781
-
782
- // Export Three.js scene as GLB (binary GLTF) file
783
- // GLB preserves materials and colors, making it ideal for element visualization
784
- export function export_structure_as_glb(
785
- scene: Scene | null,
786
- structure: AnyStructure | undefined,
787
- ): void {
788
- try {
789
- if (!scene) {
790
- console.warn(`No scene available for GLB export`)
791
- return
792
- }
793
-
794
- // Convert instanced meshes to regular meshes for export
795
- const export_scene = convert_instanced_meshes_to_regular(scene)
796
-
797
- const exporter = new GLTFExporter()
798
- const filename = create_structure_filename(structure, `glb`)
799
-
800
- // Export as binary GLB format
801
- exporter.parse(
802
- export_scene,
803
- (result) => {
804
- if (result instanceof ArrayBuffer) {
805
- const blob = new Blob([result], { type: `model/gltf-binary` })
806
- download(blob, filename, `model/gltf-binary`)
807
- } else {
808
- console.error(`GLB export returned unexpected format`)
809
- }
810
- },
811
- (error) => {
812
- console.error(`GLB export failed:`, error)
813
- },
814
- { binary: true },
815
- )
816
- } catch (error) {
817
- console.error(`Error exporting GLB:`, error)
818
- }
819
- }
820
-
821
- // Export Three.js scene as OBJ (Wavefront Object) file with accompanying MTL file for materials
822
- // OBJ exports geometry with material references, MTL contains color definitions
823
- export function export_structure_as_obj(
824
- scene: Scene | null,
825
- structure: AnyStructure | undefined,
826
- ): void {
827
- try {
828
- if (!scene) {
829
- console.warn(`No scene available for OBJ export`)
830
- return
831
- }
832
-
833
- // Convert instanced meshes to regular meshes for export
834
- const export_scene = convert_instanced_meshes_to_regular(scene)
835
-
836
- const obj_exporter = new OBJExporter()
837
-
838
- const base_filename = create_structure_filename(structure, ``).replace(/\.$/, ``)
839
- const obj_filename = `${base_filename}.obj`
840
- const mtl_filename = `${base_filename}.mtl`
841
-
842
- // Generate OBJ content with material library reference
843
- let obj_content = obj_exporter.parse(export_scene)
844
- // Add material library reference at the beginning of the OBJ file
845
- obj_content = `mtllib ${mtl_filename}\n${obj_content}`
846
-
847
- // Generate MTL content with material color definitions
848
- const mtl_content = generate_mtl_content(export_scene)
849
-
850
- // Download both files
851
- const obj_blob = new Blob([obj_content], { type: `text/plain` })
852
- const mtl_blob = new Blob([mtl_content], { type: `text/plain` })
853
-
854
- download(obj_blob, obj_filename, `text/plain`)
855
- // Small delay to prevent some browsers from blocking rapid successive downloads as potential abuse.
856
- // A more robust solution might be to zip both files together.
857
- setTimeout(() => download(mtl_blob, mtl_filename, `text/plain`), 100)
858
- } catch (error) {
859
- console.error(`Error exporting OBJ:`, error)
860
- }
861
- }