matterviz 0.3.5 → 0.3.6

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 (855) hide show
  1. package/.vscode/launch.json +13 -0
  2. package/.vscodeignore +7 -0
  3. package/dist/assets/STLExporter-BpTH3YHE.js +8 -0
  4. package/dist/assets/browser-DdDecX_W.js +1 -0
  5. package/dist/assets/export-qgn-H9y6.js +2 -0
  6. package/dist/assets/main-DiKYzti2.css +1 -0
  7. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  8. package/dist/extension.js +31293 -0
  9. package/dist/src/lib/FilePicker.svelte +360 -0
  10. package/dist/src/lib/MillerIndexInput.svelte +66 -0
  11. package/dist/src/lib/api/mp.ts +26 -0
  12. package/dist/src/lib/api/optimade.ts +204 -0
  13. package/dist/src/lib/brillouin/BrillouinZone.svelte +549 -0
  14. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +144 -0
  15. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +146 -0
  16. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  17. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +476 -0
  18. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +92 -0
  19. package/dist/src/lib/brillouin/compute.ts +529 -0
  20. package/dist/src/lib/brillouin/index.ts +8 -0
  21. package/dist/src/lib/brillouin/types.ts +51 -0
  22. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +327 -0
  23. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  24. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  25. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +94 -0
  26. package/dist/src/lib/chempot-diagram/chempot-worker.ts +11 -0
  27. package/dist/src/lib/chempot-diagram/color.ts +42 -0
  28. package/dist/src/lib/chempot-diagram/compute.ts +1014 -0
  29. package/dist/src/lib/chempot-diagram/index.ts +6 -0
  30. package/dist/src/lib/chempot-diagram/pointer.ts +56 -0
  31. package/dist/src/lib/chempot-diagram/temperature.ts +77 -0
  32. package/dist/src/lib/chempot-diagram/types.ts +130 -0
  33. package/dist/src/lib/colors/index.ts +249 -0
  34. package/dist/src/lib/composition/BarChart.svelte +297 -0
  35. package/dist/src/lib/composition/BubbleChart.svelte +218 -0
  36. package/dist/src/lib/composition/Composition.svelte +165 -0
  37. package/dist/src/lib/composition/Formula.svelte +268 -0
  38. package/dist/src/lib/composition/FormulaFilter.svelte +1257 -0
  39. package/dist/src/lib/composition/PieChart.svelte +323 -0
  40. package/dist/src/lib/composition/format.ts +155 -0
  41. package/dist/src/lib/composition/index.ts +37 -0
  42. package/dist/src/lib/composition/parse.ts +605 -0
  43. package/dist/src/lib/constants.ts +134 -0
  44. package/dist/src/lib/controls.ts +42 -0
  45. package/dist/src/lib/convex-hull/ConvexHull.svelte +157 -0
  46. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +825 -0
  47. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +1801 -0
  48. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +1398 -0
  49. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +535 -0
  50. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +125 -0
  51. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +929 -0
  52. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +131 -0
  53. package/dist/src/lib/convex-hull/GasPressureControls.svelte +247 -0
  54. package/dist/src/lib/convex-hull/StructurePopup.svelte +151 -0
  55. package/dist/src/lib/convex-hull/TemperatureSlider.svelte +140 -0
  56. package/dist/src/lib/convex-hull/barycentric-coords.ts +246 -0
  57. package/dist/src/lib/convex-hull/demo-temperature.ts +63 -0
  58. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +405 -0
  59. package/dist/src/lib/convex-hull/helpers.ts +932 -0
  60. package/dist/src/lib/convex-hull/index.ts +202 -0
  61. package/dist/src/lib/convex-hull/thermodynamics.ts +2192 -0
  62. package/dist/src/lib/convex-hull/types.ts +267 -0
  63. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +311 -0
  64. package/dist/src/lib/coordination/calc-coordination.ts +93 -0
  65. package/dist/src/lib/coordination/index.ts +9 -0
  66. package/dist/src/lib/effects.svelte.ts +48 -0
  67. package/dist/src/lib/element/BohrAtom.svelte +147 -0
  68. package/dist/src/lib/element/ElementHeading.svelte +26 -0
  69. package/dist/src/lib/element/ElementPhoto.svelte +57 -0
  70. package/dist/src/lib/element/ElementStats.svelte +80 -0
  71. package/dist/src/lib/element/ElementTile.svelte +484 -0
  72. package/dist/src/lib/element/data.json.gz.d.ts +4 -0
  73. package/dist/src/lib/element/data.ts +14 -0
  74. package/dist/src/lib/element/index.ts +8 -0
  75. package/dist/src/lib/element/types.ts +62 -0
  76. package/dist/src/lib/feedback/ClickFeedback.svelte +58 -0
  77. package/dist/src/lib/feedback/DragOverlay.svelte +42 -0
  78. package/dist/src/lib/feedback/index.ts +4 -0
  79. package/dist/src/lib/fermi-surface/FermiSlice.svelte +189 -0
  80. package/dist/src/lib/fermi-surface/FermiSurface.svelte +600 -0
  81. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +448 -0
  82. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +794 -0
  83. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  84. package/dist/src/lib/fermi-surface/compute.ts +728 -0
  85. package/dist/src/lib/fermi-surface/constants.ts +32 -0
  86. package/dist/src/lib/fermi-surface/export.ts +64 -0
  87. package/dist/src/lib/fermi-surface/index.ts +14 -0
  88. package/dist/src/lib/fermi-surface/marching-cubes.ts +3 -0
  89. package/dist/src/lib/fermi-surface/parse.ts +574 -0
  90. package/dist/src/lib/fermi-surface/symmetry.ts +56 -0
  91. package/dist/src/lib/fermi-surface/types.ts +159 -0
  92. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  93. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  94. package/dist/src/lib/heatmap-matrix/index.ts +167 -0
  95. package/dist/src/lib/heatmap-matrix/shared.ts +7 -0
  96. package/dist/src/lib/icons.ts +650 -0
  97. package/dist/src/lib/index.ts +61 -0
  98. package/dist/src/lib/io/decompress.ts +92 -0
  99. package/dist/src/lib/io/export.ts +385 -0
  100. package/dist/src/lib/io/fetch.ts +46 -0
  101. package/dist/src/lib/io/file-drop.ts +51 -0
  102. package/dist/src/lib/io/index.ts +7 -0
  103. package/dist/src/lib/io/is-binary.ts +24 -0
  104. package/dist/src/lib/io/types.ts +8 -0
  105. package/dist/src/lib/io/url-drop.ts +141 -0
  106. package/dist/src/lib/isosurface/Isosurface.svelte +285 -0
  107. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +277 -0
  108. package/dist/src/lib/isosurface/index.ts +7 -0
  109. package/dist/src/lib/isosurface/parse.ts +656 -0
  110. package/dist/src/lib/isosurface/slice.ts +175 -0
  111. package/dist/src/lib/isosurface/types.ts +309 -0
  112. package/dist/src/lib/labels.ts +320 -0
  113. package/dist/src/lib/layout/FullscreenToggle.svelte +50 -0
  114. package/dist/src/lib/layout/InfoCard.svelte +120 -0
  115. package/dist/src/lib/layout/InfoTag.svelte +185 -0
  116. package/dist/src/lib/layout/PropertyFilter.svelte +246 -0
  117. package/dist/src/lib/layout/SettingsSection.svelte +148 -0
  118. package/dist/src/lib/layout/SubpageGrid.svelte +82 -0
  119. package/dist/src/lib/layout/fullscreen.ts +65 -0
  120. package/dist/src/lib/layout/index.ts +11 -0
  121. package/dist/src/lib/layout/json-tree/JsonNode.svelte +548 -0
  122. package/dist/src/lib/layout/json-tree/JsonTree.svelte +1230 -0
  123. package/dist/src/lib/layout/json-tree/JsonValue.svelte +334 -0
  124. package/dist/src/lib/layout/json-tree/index.ts +3 -0
  125. package/dist/src/lib/layout/json-tree/types.ts +126 -0
  126. package/dist/src/lib/layout/json-tree/utils.ts +682 -0
  127. package/dist/src/lib/marching-cubes.ts +614 -0
  128. package/dist/src/lib/math.ts +1081 -0
  129. package/dist/src/lib/overlays/ContextMenu.svelte +162 -0
  130. package/dist/src/lib/overlays/CopyButton.svelte +45 -0
  131. package/dist/src/lib/overlays/DragControlTab.svelte +98 -0
  132. package/dist/src/lib/overlays/DraggablePane.svelte +487 -0
  133. package/dist/src/lib/overlays/InfoPaneCards.svelte +149 -0
  134. package/dist/src/lib/overlays/index.ts +3 -0
  135. package/dist/src/lib/periodic-table/PeriodicTable.svelte +469 -0
  136. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +557 -0
  137. package/dist/src/lib/periodic-table/PropertySelect.svelte +37 -0
  138. package/dist/src/lib/periodic-table/index.ts +12 -0
  139. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  140. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +444 -0
  141. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  142. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  143. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  144. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +203 -0
  145. package/dist/src/lib/phase-diagram/build-diagram.ts +186 -0
  146. package/dist/src/lib/phase-diagram/colors.ts +58 -0
  147. package/dist/src/lib/phase-diagram/diagram-input.ts +40 -0
  148. package/dist/src/lib/phase-diagram/index.ts +13 -0
  149. package/dist/src/lib/phase-diagram/parse.ts +348 -0
  150. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +1023 -0
  151. package/dist/src/lib/phase-diagram/types.ts +144 -0
  152. package/dist/src/lib/phase-diagram/utils.ts +775 -0
  153. package/dist/src/lib/plot/AxisLabel.svelte +51 -0
  154. package/dist/src/lib/plot/BarPlot.svelte +2113 -0
  155. package/dist/src/lib/plot/BarPlotControls.svelte +66 -0
  156. package/dist/src/lib/plot/BinnedScatterPlot.svelte +1114 -0
  157. package/dist/src/lib/plot/ColorBar.svelte +721 -0
  158. package/dist/src/lib/plot/ColorScaleSelect.svelte +54 -0
  159. package/dist/src/lib/plot/ElementScatter.svelte +63 -0
  160. package/dist/src/lib/plot/FillArea.svelte +223 -0
  161. package/dist/src/lib/plot/Histogram.svelte +1558 -0
  162. package/dist/src/lib/plot/HistogramControls.svelte +212 -0
  163. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +96 -0
  164. package/dist/src/lib/plot/Line.svelte +84 -0
  165. package/dist/src/lib/plot/PlotAxis.svelte +169 -0
  166. package/dist/src/lib/plot/PlotControls.svelte +537 -0
  167. package/dist/src/lib/plot/PlotLegend.svelte +569 -0
  168. package/dist/src/lib/plot/PlotTooltip.svelte +67 -0
  169. package/dist/src/lib/plot/PortalSelect.svelte +253 -0
  170. package/dist/src/lib/plot/ReferenceLine3D.svelte +156 -0
  171. package/dist/src/lib/plot/ReferencePlane.svelte +175 -0
  172. package/dist/src/lib/plot/ScatterPlot.svelte +2778 -0
  173. package/dist/src/lib/plot/ScatterPlot3D.svelte +529 -0
  174. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +437 -0
  175. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +912 -0
  176. package/dist/src/lib/plot/ScatterPlotControls.svelte +306 -0
  177. package/dist/src/lib/plot/ScatterPoint.svelte +182 -0
  178. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +293 -0
  179. package/dist/src/lib/plot/Surface3D.svelte +197 -0
  180. package/dist/src/lib/plot/ZeroLines.svelte +97 -0
  181. package/dist/src/lib/plot/ZoomRect.svelte +23 -0
  182. package/dist/src/lib/plot/adaptive-density.ts +316 -0
  183. package/dist/src/lib/plot/auto-place.ts +184 -0
  184. package/dist/src/lib/plot/axis-utils.ts +122 -0
  185. package/dist/src/lib/plot/binned-scatter-types.ts +83 -0
  186. package/dist/src/lib/plot/data-cleaning.ts +1069 -0
  187. package/dist/src/lib/plot/data-transform.ts +69 -0
  188. package/dist/src/lib/plot/defaults.ts +9 -0
  189. package/dist/src/lib/plot/fill-utils.ts +494 -0
  190. package/dist/src/lib/plot/hover-lock.svelte.ts +60 -0
  191. package/dist/src/lib/plot/index.ts +53 -0
  192. package/dist/src/lib/plot/interactions.ts +119 -0
  193. package/dist/src/lib/plot/layout.ts +425 -0
  194. package/dist/src/lib/plot/reference-line.ts +426 -0
  195. package/dist/src/lib/plot/scales.ts +654 -0
  196. package/dist/src/lib/plot/svg.ts +23 -0
  197. package/dist/src/lib/plot/types.ts +1144 -0
  198. package/dist/src/lib/plot/utils/label-placement.ts +541 -0
  199. package/dist/src/lib/plot/utils/series-visibility.ts +140 -0
  200. package/dist/src/lib/plot/utils.ts +11 -0
  201. package/dist/src/lib/rdf/RdfPlot.svelte +247 -0
  202. package/dist/src/lib/rdf/calc-rdf.ts +167 -0
  203. package/dist/src/lib/rdf/index.ts +27 -0
  204. package/dist/src/lib/sanitize.ts +126 -0
  205. package/dist/src/lib/settings.ts +1479 -0
  206. package/dist/src/lib/spectral/Bands.svelte +1040 -0
  207. package/dist/src/lib/spectral/BandsAndDos.svelte +134 -0
  208. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +252 -0
  209. package/dist/src/lib/spectral/Dos.svelte +697 -0
  210. package/dist/src/lib/spectral/helpers.ts +1381 -0
  211. package/dist/src/lib/spectral/index.ts +8 -0
  212. package/dist/src/lib/spectral/types.ts +112 -0
  213. package/dist/src/lib/state.svelte.ts +64 -0
  214. package/dist/src/lib/structure/Arrow.svelte +72 -0
  215. package/dist/src/lib/structure/AtomLegend.svelte +815 -0
  216. package/dist/src/lib/structure/Bond.svelte +140 -0
  217. package/dist/src/lib/structure/CanvasTooltip.svelte +33 -0
  218. package/dist/src/lib/structure/CellSelect.svelte +349 -0
  219. package/dist/src/lib/structure/Cylinder.svelte +45 -0
  220. package/dist/src/lib/structure/Lattice.svelte +196 -0
  221. package/dist/src/lib/structure/Structure.svelte +2248 -0
  222. package/dist/src/lib/structure/StructureControls.svelte +1273 -0
  223. package/dist/src/lib/structure/StructureExportPane.svelte +252 -0
  224. package/dist/src/lib/structure/StructureInfoPane.svelte +737 -0
  225. package/dist/src/lib/structure/StructureScene.svelte +2255 -0
  226. package/dist/src/lib/structure/atom-properties.ts +316 -0
  227. package/dist/src/lib/structure/bond-order-perception.ts +447 -0
  228. package/dist/src/lib/structure/bonding.ts +944 -0
  229. package/dist/src/lib/structure/export.ts +861 -0
  230. package/dist/src/lib/structure/index.ts +291 -0
  231. package/dist/src/lib/structure/label-placement.ts +130 -0
  232. package/dist/src/lib/structure/measure.ts +45 -0
  233. package/dist/src/lib/structure/parse.ts +1705 -0
  234. package/dist/src/lib/structure/partial-occupancy.ts +183 -0
  235. package/dist/src/lib/structure/pbc.ts +164 -0
  236. package/dist/src/lib/structure/supercell.ts +226 -0
  237. package/dist/src/lib/structure/validation.ts +11 -0
  238. package/dist/src/lib/symmetry/SymmetryStats.svelte +226 -0
  239. package/dist/src/lib/symmetry/WyckoffTable.svelte +120 -0
  240. package/dist/src/lib/symmetry/cell-transform.ts +118 -0
  241. package/dist/src/lib/symmetry/index.ts +348 -0
  242. package/dist/src/lib/symmetry/spacegroups.ts +404 -0
  243. package/dist/src/lib/table/HeatmapTable.svelte +1833 -0
  244. package/dist/src/lib/table/ToggleMenu.svelte +385 -0
  245. package/dist/src/lib/table/index.ts +139 -0
  246. package/dist/src/lib/theme/ThemeControl.svelte +53 -0
  247. package/dist/src/lib/theme/index.ts +107 -0
  248. package/dist/src/lib/theme/themes.mjs +297 -0
  249. package/dist/src/lib/time.ts +71 -0
  250. package/dist/src/lib/tooltip/TooltipContent.svelte +58 -0
  251. package/dist/src/lib/tooltip/index.ts +2 -0
  252. package/dist/src/lib/tooltip/types.ts +13 -0
  253. package/dist/src/lib/trajectory/Trajectory.svelte +1545 -0
  254. package/dist/src/lib/trajectory/TrajectoryError.svelte +128 -0
  255. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +357 -0
  256. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +313 -0
  257. package/dist/src/lib/trajectory/constants.ts +7 -0
  258. package/dist/src/lib/trajectory/extract.ts +196 -0
  259. package/dist/src/lib/trajectory/format-detect.ts +96 -0
  260. package/dist/src/lib/trajectory/frame-reader.ts +456 -0
  261. package/dist/src/lib/trajectory/helpers.ts +217 -0
  262. package/dist/src/lib/trajectory/index.ts +218 -0
  263. package/dist/src/lib/trajectory/parse/ase.ts +109 -0
  264. package/dist/src/lib/trajectory/parse/hdf5.ts +173 -0
  265. package/dist/src/lib/trajectory/parse/index.ts +411 -0
  266. package/dist/src/lib/trajectory/parse/lammps.ts +215 -0
  267. package/dist/src/lib/trajectory/parse/vasp.ts +102 -0
  268. package/dist/src/lib/trajectory/parse/xyz.ts +143 -0
  269. package/dist/src/lib/trajectory/plotting.ts +599 -0
  270. package/dist/src/lib/trajectory/types.ts +13 -0
  271. package/dist/src/lib/utils.ts +56 -0
  272. package/dist/src/lib/xrd/XrdPlot.svelte +615 -0
  273. package/dist/src/lib/xrd/broadening.ts +130 -0
  274. package/dist/src/lib/xrd/calc-xrd.ts +397 -0
  275. package/dist/src/lib/xrd/index.ts +38 -0
  276. package/dist/src/lib/xrd/parse.ts +858 -0
  277. package/dist/webview.js +29421 -0
  278. package/icon.png +0 -0
  279. package/license +1 -1
  280. package/matterviz-0.3.2.vsix +0 -0
  281. package/matterviz-0.3.4.vsix +0 -0
  282. package/matterviz-0.3.5.vsix +0 -0
  283. package/package.json +1460 -215
  284. package/readme.md +171 -98
  285. package/scripts/sync-config.ts +101 -0
  286. package/src/declarations.d.ts +2 -0
  287. package/src/extension.ts +972 -0
  288. package/src/node-io.ts +65 -0
  289. package/src/types.ts +17 -0
  290. package/src/webview/JsonBrowser.svelte +1079 -0
  291. package/src/webview/PlotPanel.svelte +346 -0
  292. package/src/webview/detect.ts +444 -0
  293. package/src/webview/main.ts +764 -0
  294. package/src/webview/plot-utils.ts +250 -0
  295. package/test-fixtures/all-viz-types.json.gz +0 -0
  296. package/test-fixtures/plot-demo-data.json.gz +0 -0
  297. package/tests/detect.test.ts +604 -0
  298. package/tests/extension.test.ts +2041 -0
  299. package/tests/node-io.test.ts +39 -0
  300. package/tests/plot-utils.test.ts +302 -0
  301. package/tests/vite-plugin-json-gz.test.ts +114 -0
  302. package/tests/vscode-mock.ts +18 -0
  303. package/tests/webview.test.ts +231 -0
  304. package/tsconfig.json +20 -0
  305. package/vite-plugin-json-gz.ts +29 -0
  306. package/vite.config.ts +34 -0
  307. package/vite.extension.config.ts +34 -0
  308. package/dist/EmptyState.svelte.d.ts +0 -9
  309. package/dist/FilePicker.svelte +0 -360
  310. package/dist/FilePicker.svelte.d.ts +0 -17
  311. package/dist/Icon.svelte.d.ts +0 -13
  312. package/dist/MillerIndexInput.svelte +0 -66
  313. package/dist/MillerIndexInput.svelte.d.ts +0 -7
  314. package/dist/api/mp.d.ts +0 -6
  315. package/dist/api/mp.js +0 -22
  316. package/dist/api/optimade.d.ts +0 -45
  317. package/dist/api/optimade.js +0 -135
  318. package/dist/brillouin/BrillouinZone.svelte +0 -546
  319. package/dist/brillouin/BrillouinZone.svelte.d.ts +0 -83
  320. package/dist/brillouin/BrillouinZoneControls.svelte +0 -144
  321. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +0 -17
  322. package/dist/brillouin/BrillouinZoneExportPane.svelte +0 -148
  323. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +0 -15
  324. package/dist/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  325. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +0 -13
  326. package/dist/brillouin/BrillouinZoneScene.svelte +0 -476
  327. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +0 -48
  328. package/dist/brillouin/BrillouinZoneTooltip.svelte +0 -92
  329. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +0 -8
  330. package/dist/brillouin/compute.d.ts +0 -17
  331. package/dist/brillouin/compute.js +0 -426
  332. package/dist/brillouin/index.d.ts +0 -8
  333. package/dist/brillouin/index.js +0 -8
  334. package/dist/brillouin/types.d.ts +0 -48
  335. package/dist/brillouin/types.js +0 -1
  336. package/dist/chempot-diagram/ChemPotDiagram.svelte +0 -327
  337. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +0 -13
  338. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +0 -847
  339. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +0 -16
  340. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +0 -3194
  341. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +0 -16
  342. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +0 -7
  343. package/dist/chempot-diagram/async-compute.svelte.d.ts +0 -3
  344. package/dist/chempot-diagram/async-compute.svelte.js +0 -78
  345. package/dist/chempot-diagram/chempot-worker.d.ts +0 -1
  346. package/dist/chempot-diagram/chempot-worker.js +0 -11
  347. package/dist/chempot-diagram/color.d.ts +0 -10
  348. package/dist/chempot-diagram/color.js +0 -32
  349. package/dist/chempot-diagram/compute.d.ts +0 -48
  350. package/dist/chempot-diagram/compute.js +0 -812
  351. package/dist/chempot-diagram/index.d.ts +0 -6
  352. package/dist/chempot-diagram/index.js +0 -6
  353. package/dist/chempot-diagram/pointer.d.ts +0 -16
  354. package/dist/chempot-diagram/pointer.js +0 -40
  355. package/dist/chempot-diagram/temperature.d.ts +0 -15
  356. package/dist/chempot-diagram/temperature.js +0 -36
  357. package/dist/chempot-diagram/types.d.ts +0 -86
  358. package/dist/chempot-diagram/types.js +0 -28
  359. package/dist/colors/index.d.ts +0 -47
  360. package/dist/colors/index.js +0 -203
  361. package/dist/composition/BarChart.svelte +0 -297
  362. package/dist/composition/BarChart.svelte.d.ts +0 -39
  363. package/dist/composition/BubbleChart.svelte +0 -218
  364. package/dist/composition/BubbleChart.svelte.d.ts +0 -28
  365. package/dist/composition/Composition.svelte +0 -164
  366. package/dist/composition/Composition.svelte.d.ts +0 -15
  367. package/dist/composition/Formula.svelte +0 -265
  368. package/dist/composition/Formula.svelte.d.ts +0 -19
  369. package/dist/composition/FormulaFilter.svelte +0 -1259
  370. package/dist/composition/FormulaFilter.svelte.d.ts +0 -51
  371. package/dist/composition/PieChart.svelte +0 -323
  372. package/dist/composition/PieChart.svelte.d.ts +0 -37
  373. package/dist/composition/format.d.ts +0 -15
  374. package/dist/composition/format.js +0 -109
  375. package/dist/composition/index.d.ts +0 -20
  376. package/dist/composition/index.js +0 -14
  377. package/dist/composition/parse.d.ts +0 -55
  378. package/dist/composition/parse.js +0 -459
  379. package/dist/constants.d.ts +0 -29
  380. package/dist/constants.js +0 -99
  381. package/dist/controls.d.ts +0 -14
  382. package/dist/controls.js +0 -30
  383. package/dist/convex-hull/ConvexHull.svelte +0 -157
  384. package/dist/convex-hull/ConvexHull.svelte.d.ts +0 -13
  385. package/dist/convex-hull/ConvexHull2D.svelte +0 -814
  386. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +0 -11
  387. package/dist/convex-hull/ConvexHull3D.svelte +0 -1790
  388. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +0 -8
  389. package/dist/convex-hull/ConvexHull4D.svelte +0 -1386
  390. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +0 -8
  391. package/dist/convex-hull/ConvexHullControls.svelte +0 -546
  392. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +0 -48
  393. package/dist/convex-hull/ConvexHullInfoPane.svelte +0 -122
  394. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +0 -18
  395. package/dist/convex-hull/ConvexHullStats.svelte +0 -922
  396. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +0 -15
  397. package/dist/convex-hull/ConvexHullTooltip.svelte +0 -131
  398. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +0 -33
  399. package/dist/convex-hull/GasPressureControls.svelte +0 -247
  400. package/dist/convex-hull/GasPressureControls.svelte.d.ts +0 -11
  401. package/dist/convex-hull/StructurePopup.svelte +0 -116
  402. package/dist/convex-hull/StructurePopup.svelte.d.ts +0 -18
  403. package/dist/convex-hull/TemperatureSlider.svelte +0 -137
  404. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +0 -8
  405. package/dist/convex-hull/barycentric-coords.d.ts +0 -18
  406. package/dist/convex-hull/barycentric-coords.js +0 -182
  407. package/dist/convex-hull/demo-temperature.d.ts +0 -6
  408. package/dist/convex-hull/demo-temperature.js +0 -40
  409. package/dist/convex-hull/gas-thermodynamics.d.ts +0 -16
  410. package/dist/convex-hull/gas-thermodynamics.js +0 -316
  411. package/dist/convex-hull/helpers.d.ts +0 -103
  412. package/dist/convex-hull/helpers.js +0 -689
  413. package/dist/convex-hull/index.d.ts +0 -118
  414. package/dist/convex-hull/index.js +0 -57
  415. package/dist/convex-hull/thermodynamics.d.ts +0 -66
  416. package/dist/convex-hull/thermodynamics.js +0 -1752
  417. package/dist/convex-hull/types.d.ts +0 -162
  418. package/dist/convex-hull/types.js +0 -36
  419. package/dist/coordination/CoordinationBarPlot.svelte +0 -311
  420. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +0 -30
  421. package/dist/coordination/calc-coordination.d.ts +0 -15
  422. package/dist/coordination/calc-coordination.js +0 -63
  423. package/dist/coordination/index.d.ts +0 -8
  424. package/dist/coordination/index.js +0 -7
  425. package/dist/element/BohrAtom.svelte +0 -147
  426. package/dist/element/BohrAtom.svelte.d.ts +0 -20
  427. package/dist/element/ElementHeading.svelte +0 -26
  428. package/dist/element/ElementHeading.svelte.d.ts +0 -8
  429. package/dist/element/ElementPhoto.svelte +0 -57
  430. package/dist/element/ElementPhoto.svelte.d.ts +0 -9
  431. package/dist/element/ElementStats.svelte +0 -80
  432. package/dist/element/ElementStats.svelte.d.ts +0 -8
  433. package/dist/element/ElementTile.svelte +0 -484
  434. package/dist/element/ElementTile.svelte.d.ts +0 -29
  435. package/dist/element/Nucleus.svelte.d.ts +0 -17
  436. package/dist/element/data.d.ts +0 -2
  437. package/dist/element/data.js +0 -2
  438. package/dist/element/data.json.gz.d.ts +0 -2
  439. package/dist/element/index.d.ts +0 -8
  440. package/dist/element/index.js +0 -8
  441. package/dist/element/types.d.ts +0 -57
  442. package/dist/element/types.js +0 -1
  443. package/dist/feedback/ClickFeedback.svelte +0 -58
  444. package/dist/feedback/ClickFeedback.svelte.d.ts +0 -12
  445. package/dist/feedback/DragOverlay.svelte +0 -42
  446. package/dist/feedback/DragOverlay.svelte.d.ts +0 -7
  447. package/dist/feedback/Spinner.svelte.d.ts +0 -7
  448. package/dist/feedback/StatusMessage.svelte.d.ts +0 -9
  449. package/dist/feedback/index.d.ts +0 -4
  450. package/dist/feedback/index.js +0 -4
  451. package/dist/fermi-surface/FermiSlice.svelte +0 -189
  452. package/dist/fermi-surface/FermiSlice.svelte.d.ts +0 -24
  453. package/dist/fermi-surface/FermiSurface.svelte +0 -600
  454. package/dist/fermi-surface/FermiSurface.svelte.d.ts +0 -83
  455. package/dist/fermi-surface/FermiSurfaceControls.svelte +0 -452
  456. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +0 -35
  457. package/dist/fermi-surface/FermiSurfaceScene.svelte +0 -792
  458. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +0 -50
  459. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  460. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +0 -8
  461. package/dist/fermi-surface/compute.d.ts +0 -5
  462. package/dist/fermi-surface/compute.js +0 -538
  463. package/dist/fermi-surface/constants.d.ts +0 -9
  464. package/dist/fermi-surface/constants.js +0 -27
  465. package/dist/fermi-surface/export.d.ts +0 -5
  466. package/dist/fermi-surface/export.js +0 -63
  467. package/dist/fermi-surface/index.d.ts +0 -12
  468. package/dist/fermi-surface/index.js +0 -13
  469. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  470. package/dist/fermi-surface/marching-cubes.js +0 -2
  471. package/dist/fermi-surface/parse.d.ts +0 -2
  472. package/dist/fermi-surface/parse.js +0 -495
  473. package/dist/fermi-surface/symmetry.d.ts +0 -3
  474. package/dist/fermi-surface/symmetry.js +0 -46
  475. package/dist/fermi-surface/types.d.ts +0 -113
  476. package/dist/fermi-surface/types.js +0 -4
  477. package/dist/heatmap-matrix/HeatmapMatrix.svelte +0 -1527
  478. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +0 -110
  479. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  480. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +0 -30
  481. package/dist/heatmap-matrix/index.d.ts +0 -53
  482. package/dist/heatmap-matrix/index.js +0 -100
  483. package/dist/heatmap-matrix/shared.d.ts +0 -2
  484. package/dist/heatmap-matrix/shared.js +0 -4
  485. package/dist/icons.d.ts +0 -569
  486. package/dist/icons.js +0 -648
  487. package/dist/index.d.ts +0 -39
  488. package/dist/index.js +0 -39
  489. package/dist/io/decompress.d.ts +0 -10
  490. package/dist/io/decompress.js +0 -74
  491. package/dist/io/export.d.ts +0 -16
  492. package/dist/io/export.js +0 -316
  493. package/dist/io/fetch.d.ts +0 -5
  494. package/dist/io/fetch.js +0 -39
  495. package/dist/io/file-drop.d.ts +0 -7
  496. package/dist/io/file-drop.js +0 -43
  497. package/dist/io/index.d.ts +0 -7
  498. package/dist/io/index.js +0 -7
  499. package/dist/io/is-binary.d.ts +0 -1
  500. package/dist/io/is-binary.js +0 -20
  501. package/dist/io/types.d.ts +0 -8
  502. package/dist/io/types.js +0 -1
  503. package/dist/io/url-drop.d.ts +0 -2
  504. package/dist/io/url-drop.js +0 -117
  505. package/dist/isosurface/Isosurface.svelte +0 -285
  506. package/dist/isosurface/Isosurface.svelte.d.ts +0 -8
  507. package/dist/isosurface/IsosurfaceControls.svelte +0 -291
  508. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +0 -9
  509. package/dist/isosurface/index.d.ts +0 -5
  510. package/dist/isosurface/index.js +0 -6
  511. package/dist/isosurface/parse.d.ts +0 -6
  512. package/dist/isosurface/parse.js +0 -553
  513. package/dist/isosurface/slice.d.ts +0 -11
  514. package/dist/isosurface/slice.js +0 -140
  515. package/dist/isosurface/types.d.ts +0 -56
  516. package/dist/isosurface/types.js +0 -227
  517. package/dist/labels.d.ts +0 -53
  518. package/dist/labels.js +0 -274
  519. package/dist/layout/FullscreenToggle.svelte +0 -50
  520. package/dist/layout/FullscreenToggle.svelte.d.ts +0 -7
  521. package/dist/layout/InfoCard.svelte +0 -120
  522. package/dist/layout/InfoCard.svelte.d.ts +0 -21
  523. package/dist/layout/InfoTag.svelte +0 -183
  524. package/dist/layout/InfoTag.svelte.d.ts +0 -19
  525. package/dist/layout/PropertyFilter.svelte +0 -244
  526. package/dist/layout/PropertyFilter.svelte.d.ts +0 -24
  527. package/dist/layout/SettingsSection.svelte +0 -148
  528. package/dist/layout/SettingsSection.svelte.d.ts +0 -17
  529. package/dist/layout/SubpageGrid.svelte +0 -82
  530. package/dist/layout/SubpageGrid.svelte.d.ts +0 -14
  531. package/dist/layout/fullscreen.d.ts +0 -9
  532. package/dist/layout/fullscreen.js +0 -53
  533. package/dist/layout/index.d.ts +0 -10
  534. package/dist/layout/index.js +0 -8
  535. package/dist/layout/json-tree/JsonNode.svelte +0 -548
  536. package/dist/layout/json-tree/JsonNode.svelte.d.ts +0 -11
  537. package/dist/layout/json-tree/JsonTree.svelte +0 -1222
  538. package/dist/layout/json-tree/JsonTree.svelte.d.ts +0 -6
  539. package/dist/layout/json-tree/JsonValue.svelte +0 -334
  540. package/dist/layout/json-tree/JsonValue.svelte.d.ts +0 -9
  541. package/dist/layout/json-tree/index.d.ts +0 -3
  542. package/dist/layout/json-tree/index.js +0 -3
  543. package/dist/layout/json-tree/types.d.ts +0 -73
  544. package/dist/layout/json-tree/types.js +0 -3
  545. package/dist/layout/json-tree/utils.d.ts +0 -29
  546. package/dist/layout/json-tree/utils.js +0 -649
  547. package/dist/marching-cubes.d.ts +0 -14
  548. package/dist/marching-cubes.js +0 -542
  549. package/dist/math.d.ts +0 -91
  550. package/dist/math.js +0 -896
  551. package/dist/overlays/ContextMenu.svelte +0 -162
  552. package/dist/overlays/ContextMenu.svelte.d.ts +0 -25
  553. package/dist/overlays/CopyButton.svelte +0 -45
  554. package/dist/overlays/CopyButton.svelte.d.ts +0 -8
  555. package/dist/overlays/DraggablePane.svelte +0 -564
  556. package/dist/overlays/DraggablePane.svelte.d.ts +0 -36
  557. package/dist/overlays/InfoPaneCards.svelte +0 -149
  558. package/dist/overlays/InfoPaneCards.svelte.d.ts +0 -22
  559. package/dist/overlays/index.d.ts +0 -2
  560. package/dist/overlays/index.js +0 -2
  561. package/dist/periodic-table/PeriodicTable.svelte +0 -469
  562. package/dist/periodic-table/PeriodicTable.svelte.d.ts +0 -55
  563. package/dist/periodic-table/PeriodicTableControls.svelte +0 -557
  564. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +0 -24
  565. package/dist/periodic-table/PropertySelect.svelte +0 -37
  566. package/dist/periodic-table/PropertySelect.svelte.d.ts +0 -13
  567. package/dist/periodic-table/TableInset.svelte.d.ts +0 -9
  568. package/dist/periodic-table/index.d.ts +0 -10
  569. package/dist/periodic-table/index.js +0 -4
  570. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1084
  571. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +0 -44
  572. package/dist/phase-diagram/PhaseDiagramControls.svelte +0 -449
  573. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +0 -30
  574. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  575. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +0 -15
  576. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +0 -192
  577. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +0 -19
  578. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +0 -392
  579. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +0 -16
  580. package/dist/phase-diagram/TdbInfoPanel.svelte +0 -203
  581. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +0 -12
  582. package/dist/phase-diagram/build-diagram.d.ts +0 -11
  583. package/dist/phase-diagram/build-diagram.js +0 -167
  584. package/dist/phase-diagram/colors.d.ts +0 -35
  585. package/dist/phase-diagram/colors.js +0 -51
  586. package/dist/phase-diagram/diagram-input.d.ts +0 -33
  587. package/dist/phase-diagram/diagram-input.js +0 -3
  588. package/dist/phase-diagram/index.d.ts +0 -13
  589. package/dist/phase-diagram/index.js +0 -13
  590. package/dist/phase-diagram/parse.d.ts +0 -55
  591. package/dist/phase-diagram/parse.js +0 -276
  592. package/dist/phase-diagram/svg-to-diagram.d.ts +0 -2
  593. package/dist/phase-diagram/svg-to-diagram.js +0 -867
  594. package/dist/phase-diagram/types.d.ts +0 -99
  595. package/dist/phase-diagram/types.js +0 -1
  596. package/dist/phase-diagram/utils.d.ts +0 -118
  597. package/dist/phase-diagram/utils.js +0 -606
  598. package/dist/plot/AxisLabel.svelte +0 -51
  599. package/dist/plot/AxisLabel.svelte.d.ts +0 -16
  600. package/dist/plot/BarPlot.svelte +0 -2265
  601. package/dist/plot/BarPlot.svelte.d.ts +0 -83
  602. package/dist/plot/BarPlotControls.svelte +0 -66
  603. package/dist/plot/BarPlotControls.svelte.d.ts +0 -18
  604. package/dist/plot/ColorBar.svelte +0 -719
  605. package/dist/plot/ColorBar.svelte.d.ts +0 -31
  606. package/dist/plot/ColorScaleSelect.svelte +0 -54
  607. package/dist/plot/ColorScaleSelect.svelte.d.ts +0 -15
  608. package/dist/plot/ElementScatter.svelte +0 -63
  609. package/dist/plot/ElementScatter.svelte.d.ts +0 -14
  610. package/dist/plot/FillArea.svelte +0 -225
  611. package/dist/plot/FillArea.svelte.d.ts +0 -21
  612. package/dist/plot/Histogram.svelte +0 -1672
  613. package/dist/plot/Histogram.svelte.d.ts +0 -50
  614. package/dist/plot/HistogramControls.svelte +0 -212
  615. package/dist/plot/HistogramControls.svelte.d.ts +0 -22
  616. package/dist/plot/InteractiveAxisLabel.svelte +0 -94
  617. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +0 -14
  618. package/dist/plot/Line.svelte +0 -84
  619. package/dist/plot/Line.svelte.d.ts +0 -15
  620. package/dist/plot/PlotControls.svelte +0 -537
  621. package/dist/plot/PlotControls.svelte.d.ts +0 -4
  622. package/dist/plot/PlotLegend.svelte +0 -569
  623. package/dist/plot/PlotLegend.svelte.d.ts +0 -29
  624. package/dist/plot/PlotTooltip.svelte +0 -67
  625. package/dist/plot/PlotTooltip.svelte.d.ts +0 -17
  626. package/dist/plot/PortalSelect.svelte +0 -253
  627. package/dist/plot/PortalSelect.svelte.d.ts +0 -16
  628. package/dist/plot/ReferenceLine.svelte.d.ts +0 -20
  629. package/dist/plot/ReferenceLine3D.svelte +0 -154
  630. package/dist/plot/ReferenceLine3D.svelte.d.ts +0 -14
  631. package/dist/plot/ReferencePlane.svelte +0 -178
  632. package/dist/plot/ReferencePlane.svelte.d.ts +0 -14
  633. package/dist/plot/ScatterPlot.svelte +0 -2845
  634. package/dist/plot/ScatterPlot.svelte.d.ts +0 -93
  635. package/dist/plot/ScatterPlot3D.svelte +0 -502
  636. package/dist/plot/ScatterPlot3D.svelte.d.ts +0 -94
  637. package/dist/plot/ScatterPlot3DControls.svelte +0 -437
  638. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +0 -20
  639. package/dist/plot/ScatterPlot3DScene.svelte +0 -912
  640. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +0 -74
  641. package/dist/plot/ScatterPlotControls.svelte +0 -307
  642. package/dist/plot/ScatterPlotControls.svelte.d.ts +0 -17
  643. package/dist/plot/ScatterPoint.svelte +0 -191
  644. package/dist/plot/ScatterPoint.svelte.d.ts +0 -21
  645. package/dist/plot/SpacegroupBarPlot.svelte +0 -293
  646. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +0 -9
  647. package/dist/plot/Surface3D.svelte +0 -200
  648. package/dist/plot/Surface3D.svelte.d.ts +0 -13
  649. package/dist/plot/ZeroLines.svelte +0 -96
  650. package/dist/plot/ZeroLines.svelte.d.ts +0 -32
  651. package/dist/plot/ZoomRect.svelte +0 -23
  652. package/dist/plot/ZoomRect.svelte.d.ts +0 -8
  653. package/dist/plot/axis-utils.d.ts +0 -19
  654. package/dist/plot/axis-utils.js +0 -80
  655. package/dist/plot/data-cleaning.d.ts +0 -37
  656. package/dist/plot/data-cleaning.js +0 -855
  657. package/dist/plot/data-transform.d.ts +0 -16
  658. package/dist/plot/data-transform.js +0 -45
  659. package/dist/plot/defaults.d.ts +0 -19
  660. package/dist/plot/defaults.js +0 -9
  661. package/dist/plot/fill-utils.d.ts +0 -51
  662. package/dist/plot/fill-utils.js +0 -337
  663. package/dist/plot/hover-lock.svelte.d.ts +0 -14
  664. package/dist/plot/hover-lock.svelte.js +0 -46
  665. package/dist/plot/index.d.ts +0 -37
  666. package/dist/plot/index.js +0 -37
  667. package/dist/plot/interactions.d.ts +0 -12
  668. package/dist/plot/interactions.js +0 -100
  669. package/dist/plot/layout.d.ts +0 -60
  670. package/dist/plot/layout.js +0 -230
  671. package/dist/plot/reference-line.d.ts +0 -60
  672. package/dist/plot/reference-line.js +0 -316
  673. package/dist/plot/scales.d.ts +0 -48
  674. package/dist/plot/scales.js +0 -484
  675. package/dist/plot/svg.d.ts +0 -1
  676. package/dist/plot/svg.js +0 -11
  677. package/dist/plot/types.d.ts +0 -859
  678. package/dist/plot/types.js +0 -103
  679. package/dist/plot/utils/label-placement.d.ts +0 -47
  680. package/dist/plot/utils/label-placement.js +0 -256
  681. package/dist/plot/utils/series-visibility.d.ts +0 -9
  682. package/dist/plot/utils/series-visibility.js +0 -67
  683. package/dist/plot/utils.d.ts +0 -1
  684. package/dist/plot/utils.js +0 -14
  685. package/dist/rdf/RdfPlot.svelte +0 -247
  686. package/dist/rdf/RdfPlot.svelte.d.ts +0 -27
  687. package/dist/rdf/calc-rdf.d.ts +0 -4
  688. package/dist/rdf/calc-rdf.js +0 -111
  689. package/dist/rdf/index.d.ts +0 -23
  690. package/dist/rdf/index.js +0 -2
  691. package/dist/sanitize.d.ts +0 -4
  692. package/dist/sanitize.js +0 -114
  693. package/dist/settings.d.ts +0 -255
  694. package/dist/settings.js +0 -1132
  695. package/dist/spectral/Bands.svelte +0 -1040
  696. package/dist/spectral/Bands.svelte.d.ts +0 -40
  697. package/dist/spectral/BandsAndDos.svelte +0 -128
  698. package/dist/spectral/BandsAndDos.svelte.d.ts +0 -18
  699. package/dist/spectral/BrillouinBandsDos.svelte +0 -248
  700. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +0 -20
  701. package/dist/spectral/Dos.svelte +0 -697
  702. package/dist/spectral/Dos.svelte.d.ts +0 -29
  703. package/dist/spectral/helpers.d.ts +0 -117
  704. package/dist/spectral/helpers.js +0 -1023
  705. package/dist/spectral/index.d.ts +0 -6
  706. package/dist/spectral/index.js +0 -7
  707. package/dist/spectral/types.d.ts +0 -84
  708. package/dist/spectral/types.js +0 -2
  709. package/dist/state.svelte.d.ts +0 -25
  710. package/dist/state.svelte.js +0 -45
  711. package/dist/structure/Arrow.svelte +0 -72
  712. package/dist/structure/Arrow.svelte.d.ts +0 -15
  713. package/dist/structure/AtomLegend.svelte +0 -798
  714. package/dist/structure/AtomLegend.svelte.d.ts +0 -34
  715. package/dist/structure/Bond.svelte +0 -140
  716. package/dist/structure/Bond.svelte.d.ts +0 -9
  717. package/dist/structure/CanvasTooltip.svelte +0 -33
  718. package/dist/structure/CanvasTooltip.svelte.d.ts +0 -12
  719. package/dist/structure/CellSelect.svelte +0 -351
  720. package/dist/structure/CellSelect.svelte.d.ts +0 -13
  721. package/dist/structure/Cylinder.svelte +0 -45
  722. package/dist/structure/Cylinder.svelte.d.ts +0 -10
  723. package/dist/structure/Lattice.svelte +0 -196
  724. package/dist/structure/Lattice.svelte.d.ts +0 -17
  725. package/dist/structure/Structure.svelte +0 -1999
  726. package/dist/structure/Structure.svelte.d.ts +0 -87
  727. package/dist/structure/StructureControls.svelte +0 -1298
  728. package/dist/structure/StructureControls.svelte.d.ts +0 -31
  729. package/dist/structure/StructureExportPane.svelte +0 -251
  730. package/dist/structure/StructureExportPane.svelte.d.ts +0 -17
  731. package/dist/structure/StructureInfoPane.svelte +0 -735
  732. package/dist/structure/StructureInfoPane.svelte.d.ts +0 -19
  733. package/dist/structure/StructureScene.svelte +0 -1905
  734. package/dist/structure/StructureScene.svelte.d.ts +0 -108
  735. package/dist/structure/atom-properties.d.ts +0 -37
  736. package/dist/structure/atom-properties.js +0 -200
  737. package/dist/structure/bond-order-perception.d.ts +0 -13
  738. package/dist/structure/bond-order-perception.js +0 -367
  739. package/dist/structure/bonding.d.ts +0 -42
  740. package/dist/structure/bonding.js +0 -525
  741. package/dist/structure/export.d.ts +0 -20
  742. package/dist/structure/export.js +0 -727
  743. package/dist/structure/index.d.ts +0 -125
  744. package/dist/structure/index.js +0 -171
  745. package/dist/structure/label-placement.d.ts +0 -14
  746. package/dist/structure/label-placement.js +0 -72
  747. package/dist/structure/measure.d.ts +0 -6
  748. package/dist/structure/measure.js +0 -29
  749. package/dist/structure/parse.d.ts +0 -66
  750. package/dist/structure/parse.js +0 -1363
  751. package/dist/structure/partial-occupancy.d.ts +0 -25
  752. package/dist/structure/partial-occupancy.js +0 -99
  753. package/dist/structure/pbc.d.ts +0 -9
  754. package/dist/structure/pbc.js +0 -123
  755. package/dist/structure/supercell.d.ts +0 -8
  756. package/dist/structure/supercell.js +0 -170
  757. package/dist/structure/validation.d.ts +0 -2
  758. package/dist/structure/validation.js +0 -10
  759. package/dist/symmetry/SymmetryStats.svelte +0 -226
  760. package/dist/symmetry/SymmetryStats.svelte.d.ts +0 -21
  761. package/dist/symmetry/WyckoffTable.svelte +0 -113
  762. package/dist/symmetry/WyckoffTable.svelte.d.ts +0 -11
  763. package/dist/symmetry/cell-transform.d.ts +0 -12
  764. package/dist/symmetry/cell-transform.js +0 -91
  765. package/dist/symmetry/index.d.ts +0 -43
  766. package/dist/symmetry/index.js +0 -229
  767. package/dist/symmetry/spacegroups.d.ts +0 -9
  768. package/dist/symmetry/spacegroups.js +0 -394
  769. package/dist/table/HeatmapTable.svelte +0 -1854
  770. package/dist/table/HeatmapTable.svelte.d.ts +0 -49
  771. package/dist/table/ToggleMenu.svelte +0 -376
  772. package/dist/table/ToggleMenu.svelte.d.ts +0 -11
  773. package/dist/table/index.d.ts +0 -74
  774. package/dist/table/index.js +0 -38
  775. package/dist/theme/ThemeControl.svelte +0 -53
  776. package/dist/theme/ThemeControl.svelte.d.ts +0 -9
  777. package/dist/theme/index.d.ts +0 -29
  778. package/dist/theme/index.js +0 -79
  779. package/dist/theme/themes.mjs +0 -285
  780. package/dist/time.d.ts +0 -4
  781. package/dist/time.js +0 -70
  782. package/dist/tooltip/TooltipContent.svelte +0 -58
  783. package/dist/tooltip/TooltipContent.svelte.d.ts +0 -31
  784. package/dist/tooltip/index.d.ts +0 -2
  785. package/dist/tooltip/index.js +0 -2
  786. package/dist/tooltip/types.d.ts +0 -8
  787. package/dist/tooltip/types.js +0 -1
  788. package/dist/trajectory/Trajectory.svelte +0 -1517
  789. package/dist/trajectory/Trajectory.svelte.d.ts +0 -77
  790. package/dist/trajectory/TrajectoryError.svelte +0 -128
  791. package/dist/trajectory/TrajectoryError.svelte.d.ts +0 -13
  792. package/dist/trajectory/TrajectoryExportPane.svelte +0 -357
  793. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +0 -17
  794. package/dist/trajectory/TrajectoryInfoPane.svelte +0 -313
  795. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +0 -17
  796. package/dist/trajectory/constants.d.ts +0 -6
  797. package/dist/trajectory/constants.js +0 -7
  798. package/dist/trajectory/extract.d.ts +0 -5
  799. package/dist/trajectory/extract.js +0 -162
  800. package/dist/trajectory/format-detect.d.ts +0 -9
  801. package/dist/trajectory/format-detect.js +0 -76
  802. package/dist/trajectory/frame-reader.d.ts +0 -17
  803. package/dist/trajectory/frame-reader.js +0 -332
  804. package/dist/trajectory/helpers.d.ts +0 -14
  805. package/dist/trajectory/helpers.js +0 -172
  806. package/dist/trajectory/index.d.ts +0 -63
  807. package/dist/trajectory/index.js +0 -126
  808. package/dist/trajectory/parse/ase.d.ts +0 -2
  809. package/dist/trajectory/parse/ase.js +0 -73
  810. package/dist/trajectory/parse/hdf5.d.ts +0 -2
  811. package/dist/trajectory/parse/hdf5.js +0 -127
  812. package/dist/trajectory/parse/index.d.ts +0 -12
  813. package/dist/trajectory/parse/index.js +0 -299
  814. package/dist/trajectory/parse/lammps.d.ts +0 -5
  815. package/dist/trajectory/parse/lammps.js +0 -179
  816. package/dist/trajectory/parse/vasp.d.ts +0 -2
  817. package/dist/trajectory/parse/vasp.js +0 -68
  818. package/dist/trajectory/parse/xyz.d.ts +0 -2
  819. package/dist/trajectory/parse/xyz.js +0 -110
  820. package/dist/trajectory/plotting.d.ts +0 -28
  821. package/dist/trajectory/plotting.js +0 -423
  822. package/dist/trajectory/types.d.ts +0 -11
  823. package/dist/trajectory/types.js +0 -1
  824. package/dist/utils.d.ts +0 -5
  825. package/dist/utils.js +0 -36
  826. package/dist/xrd/XrdPlot.svelte +0 -615
  827. package/dist/xrd/XrdPlot.svelte.d.ts +0 -28
  828. package/dist/xrd/broadening.d.ts +0 -20
  829. package/dist/xrd/broadening.js +0 -97
  830. package/dist/xrd/calc-xrd.d.ts +0 -37
  831. package/dist/xrd/calc-xrd.js +0 -337
  832. package/dist/xrd/index.d.ts +0 -37
  833. package/dist/xrd/index.js +0 -4
  834. package/dist/xrd/parse.d.ts +0 -13
  835. package/dist/xrd/parse.js +0 -749
  836. /package/dist/{EmptyState.svelte → src/lib/EmptyState.svelte} +0 -0
  837. /package/dist/{Icon.svelte → src/lib/Icon.svelte} +0 -0
  838. /package/dist/{app.css → src/lib/app.css} +0 -0
  839. /package/dist/{chempot-diagram → src/lib/chempot-diagram}/ChemPotScene3D.svelte +0 -0
  840. /package/dist/{colors → src/lib/colors}/alloy-colors.json +0 -0
  841. /package/dist/{colors → src/lib/colors}/dark-mode-colors.json +0 -0
  842. /package/dist/{colors → src/lib/colors}/jmol-colors.json +0 -0
  843. /package/dist/{colors → src/lib/colors}/muted-colors.json +0 -0
  844. /package/dist/{colors → src/lib/colors}/pastel-colors.json +0 -0
  845. /package/dist/{colors → src/lib/colors}/vesta-colors.json +0 -0
  846. /package/dist/{element → src/lib/element}/Nucleus.svelte +0 -0
  847. /package/dist/{element → src/lib/element}/data.json +0 -0
  848. /package/dist/{element → src/lib/element}/data.json.gz +0 -0
  849. /package/dist/{element → src/lib/element}/data.schema.json +0 -0
  850. /package/dist/{element-image-urls.json → src/lib/element-image-urls.json} +0 -0
  851. /package/dist/{feedback → src/lib/feedback}/Spinner.svelte +0 -0
  852. /package/dist/{feedback → src/lib/feedback}/StatusMessage.svelte +0 -0
  853. /package/dist/{periodic-table → src/lib/periodic-table}/TableInset.svelte +0 -0
  854. /package/dist/{plot → src/lib/plot}/ReferenceLine.svelte +0 -0
  855. /package/dist/{xrd → src/lib/xrd}/atomic_scattering_params.json +0 -0
@@ -0,0 +1,861 @@
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
+ }