matterviz 0.3.6 → 0.3.7

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 (863) 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.d.ts +13 -0
  5. package/dist/MillerIndexInput.svelte +66 -0
  6. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  7. package/dist/api/mp.d.ts +6 -0
  8. package/dist/api/mp.js +22 -0
  9. package/dist/api/optimade.d.ts +45 -0
  10. package/dist/api/optimade.js +135 -0
  11. package/dist/brillouin/BrillouinZone.svelte +549 -0
  12. package/dist/brillouin/BrillouinZone.svelte.d.ts +83 -0
  13. package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
  14. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
  15. package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
  16. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  17. package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  18. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  19. package/dist/brillouin/BrillouinZoneScene.svelte +476 -0
  20. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +48 -0
  21. package/dist/brillouin/BrillouinZoneTooltip.svelte +92 -0
  22. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
  23. package/dist/brillouin/compute.d.ts +17 -0
  24. package/dist/brillouin/compute.js +426 -0
  25. package/dist/brillouin/index.d.ts +8 -0
  26. package/dist/brillouin/index.js +7 -0
  27. package/dist/brillouin/types.d.ts +43 -0
  28. package/dist/brillouin/types.js +1 -0
  29. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  30. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  31. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  32. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  33. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  34. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  35. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  36. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  37. package/dist/chempot-diagram/async-compute.svelte.js +78 -0
  38. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  39. package/dist/chempot-diagram/chempot-worker.js +11 -0
  40. package/dist/chempot-diagram/color.d.ts +10 -0
  41. package/dist/chempot-diagram/color.js +32 -0
  42. package/dist/chempot-diagram/compute.d.ts +48 -0
  43. package/dist/chempot-diagram/compute.js +806 -0
  44. package/dist/chempot-diagram/index.d.ts +6 -0
  45. package/dist/chempot-diagram/index.js +6 -0
  46. package/dist/chempot-diagram/pointer.d.ts +16 -0
  47. package/dist/chempot-diagram/pointer.js +40 -0
  48. package/dist/chempot-diagram/temperature.d.ts +15 -0
  49. package/dist/chempot-diagram/temperature.js +34 -0
  50. package/dist/chempot-diagram/types.d.ts +81 -0
  51. package/dist/chempot-diagram/types.js +28 -0
  52. package/dist/colors/index.d.ts +47 -0
  53. package/dist/colors/index.js +203 -0
  54. package/dist/composition/BarChart.svelte +297 -0
  55. package/dist/composition/BarChart.svelte.d.ts +39 -0
  56. package/dist/composition/BubbleChart.svelte +218 -0
  57. package/dist/composition/BubbleChart.svelte.d.ts +28 -0
  58. package/dist/composition/Composition.svelte +165 -0
  59. package/dist/composition/Composition.svelte.d.ts +15 -0
  60. package/dist/composition/Formula.svelte +268 -0
  61. package/dist/composition/Formula.svelte.d.ts +19 -0
  62. package/dist/composition/FormulaFilter.svelte +1257 -0
  63. package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
  64. package/dist/composition/PieChart.svelte +323 -0
  65. package/dist/composition/PieChart.svelte.d.ts +37 -0
  66. package/dist/composition/format.d.ts +15 -0
  67. package/dist/composition/format.js +109 -0
  68. package/dist/composition/index.d.ts +20 -0
  69. package/dist/composition/index.js +14 -0
  70. package/dist/composition/parse.d.ts +56 -0
  71. package/dist/composition/parse.js +474 -0
  72. package/dist/constants.d.ts +29 -0
  73. package/dist/constants.js +99 -0
  74. package/dist/controls.d.ts +14 -0
  75. package/dist/controls.js +30 -0
  76. package/dist/convex-hull/ConvexHull.svelte +157 -0
  77. package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
  78. package/dist/convex-hull/ConvexHull2D.svelte +825 -0
  79. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
  80. package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
  81. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
  82. package/dist/convex-hull/ConvexHull4D.svelte +1398 -0
  83. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
  84. package/dist/convex-hull/ConvexHullControls.svelte +535 -0
  85. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
  86. package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
  87. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
  88. package/dist/convex-hull/ConvexHullStats.svelte +929 -0
  89. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
  90. package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
  91. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
  92. package/dist/convex-hull/GasPressureControls.svelte +247 -0
  93. package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
  94. package/dist/convex-hull/StructurePopup.svelte +151 -0
  95. package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
  96. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
  97. package/dist/convex-hull/barycentric-coords.d.ts +18 -0
  98. package/dist/convex-hull/barycentric-coords.js +182 -0
  99. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  100. package/dist/convex-hull/demo-temperature.js +40 -0
  101. package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
  102. package/dist/convex-hull/gas-thermodynamics.js +314 -0
  103. package/dist/convex-hull/helpers.d.ts +114 -0
  104. package/dist/convex-hull/helpers.js +710 -0
  105. package/dist/convex-hull/index.d.ts +119 -0
  106. package/dist/convex-hull/index.js +58 -0
  107. package/dist/convex-hull/thermodynamics.d.ts +67 -0
  108. package/dist/convex-hull/thermodynamics.js +1752 -0
  109. package/dist/convex-hull/types.d.ts +162 -0
  110. package/dist/convex-hull/types.js +36 -0
  111. package/dist/coordination/CoordinationBarPlot.svelte +311 -0
  112. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
  113. package/dist/coordination/calc-coordination.d.ts +15 -0
  114. package/dist/coordination/calc-coordination.js +63 -0
  115. package/dist/coordination/index.d.ts +8 -0
  116. package/dist/coordination/index.js +7 -0
  117. package/dist/effects.svelte.d.ts +12 -0
  118. package/dist/effects.svelte.js +37 -0
  119. package/dist/element/BohrAtom.svelte.d.ts +20 -0
  120. package/dist/element/ElementHeading.svelte +26 -0
  121. package/dist/element/ElementHeading.svelte.d.ts +8 -0
  122. package/dist/element/ElementPhoto.svelte +57 -0
  123. package/dist/element/ElementPhoto.svelte.d.ts +9 -0
  124. package/dist/element/ElementStats.svelte +80 -0
  125. package/dist/element/ElementStats.svelte.d.ts +8 -0
  126. package/dist/element/ElementTile.svelte +484 -0
  127. package/dist/element/ElementTile.svelte.d.ts +29 -0
  128. package/dist/element/Nucleus.svelte.d.ts +17 -0
  129. package/dist/element/data.d.ts +2 -0
  130. package/dist/element/data.js +2 -0
  131. package/dist/element/index.d.ts +8 -0
  132. package/dist/element/index.js +7 -0
  133. package/dist/element/types.d.ts +57 -0
  134. package/dist/element/types.js +1 -0
  135. package/dist/feedback/ClickFeedback.svelte +58 -0
  136. package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
  137. package/dist/feedback/DragOverlay.svelte +42 -0
  138. package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
  139. package/dist/feedback/Spinner.svelte.d.ts +7 -0
  140. package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
  141. package/dist/feedback/index.d.ts +4 -0
  142. package/dist/feedback/index.js +4 -0
  143. package/dist/fermi-surface/FermiSlice.svelte +189 -0
  144. package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
  145. package/dist/fermi-surface/FermiSurface.svelte +600 -0
  146. package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
  147. package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
  148. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
  149. package/dist/fermi-surface/FermiSurfaceScene.svelte +794 -0
  150. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
  151. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  152. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
  153. package/dist/fermi-surface/compute.d.ts +5 -0
  154. package/dist/fermi-surface/compute.js +538 -0
  155. package/dist/fermi-surface/constants.d.ts +9 -0
  156. package/dist/fermi-surface/constants.js +27 -0
  157. package/dist/fermi-surface/export.d.ts +5 -0
  158. package/dist/fermi-surface/export.js +50 -0
  159. package/dist/fermi-surface/index.d.ts +12 -0
  160. package/dist/fermi-surface/index.js +13 -0
  161. package/dist/fermi-surface/marching-cubes.d.ts +2 -0
  162. package/dist/fermi-surface/marching-cubes.js +2 -0
  163. package/dist/fermi-surface/parse.d.ts +2 -0
  164. package/dist/fermi-surface/parse.js +491 -0
  165. package/dist/fermi-surface/symmetry.d.ts +3 -0
  166. package/dist/fermi-surface/symmetry.js +46 -0
  167. package/dist/fermi-surface/types.d.ts +110 -0
  168. package/dist/fermi-surface/types.js +4 -0
  169. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  170. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  171. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  172. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  173. package/dist/heatmap-matrix/index.d.ts +53 -0
  174. package/dist/heatmap-matrix/index.js +100 -0
  175. package/dist/heatmap-matrix/shared.d.ts +2 -0
  176. package/dist/heatmap-matrix/shared.js +4 -0
  177. package/dist/icons.d.ts +569 -0
  178. package/dist/icons.js +648 -0
  179. package/dist/index.d.ts +39 -0
  180. package/dist/index.js +39 -0
  181. package/dist/io/decompress.d.ts +11 -0
  182. package/dist/io/decompress.js +74 -0
  183. package/dist/io/export.d.ts +16 -0
  184. package/dist/io/export.js +316 -0
  185. package/dist/io/fetch.d.ts +5 -0
  186. package/dist/io/fetch.js +39 -0
  187. package/dist/io/file-drop.d.ts +7 -0
  188. package/dist/io/file-drop.js +43 -0
  189. package/dist/io/index.d.ts +7 -0
  190. package/dist/io/index.js +6 -0
  191. package/dist/io/is-binary.d.ts +1 -0
  192. package/dist/io/is-binary.js +20 -0
  193. package/dist/io/types.d.ts +8 -0
  194. package/dist/io/types.js +1 -0
  195. package/dist/io/url-drop.d.ts +2 -0
  196. package/dist/io/url-drop.js +123 -0
  197. package/dist/isosurface/Isosurface.svelte +285 -0
  198. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  199. package/dist/isosurface/IsosurfaceControls.svelte +277 -0
  200. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  201. package/dist/isosurface/index.d.ts +5 -0
  202. package/dist/isosurface/index.js +6 -0
  203. package/dist/isosurface/parse.d.ts +6 -0
  204. package/dist/isosurface/parse.js +553 -0
  205. package/dist/isosurface/slice.d.ts +11 -0
  206. package/dist/isosurface/slice.js +140 -0
  207. package/dist/isosurface/types.d.ts +56 -0
  208. package/dist/isosurface/types.js +227 -0
  209. package/dist/labels.d.ts +53 -0
  210. package/dist/labels.js +277 -0
  211. package/dist/layout/FullscreenToggle.svelte +50 -0
  212. package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
  213. package/dist/layout/InfoCard.svelte +120 -0
  214. package/dist/layout/InfoCard.svelte.d.ts +21 -0
  215. package/dist/layout/InfoTag.svelte +185 -0
  216. package/dist/layout/InfoTag.svelte.d.ts +19 -0
  217. package/dist/layout/PropertyFilter.svelte +246 -0
  218. package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
  219. package/dist/layout/SettingsSection.svelte +148 -0
  220. package/dist/layout/SettingsSection.svelte.d.ts +17 -0
  221. package/dist/layout/SubpageGrid.svelte +82 -0
  222. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  223. package/dist/layout/fullscreen.d.ts +9 -0
  224. package/dist/layout/fullscreen.js +53 -0
  225. package/dist/layout/index.d.ts +10 -0
  226. package/dist/layout/index.js +8 -0
  227. package/dist/layout/json-tree/JsonNode.svelte +548 -0
  228. package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
  229. package/dist/layout/json-tree/JsonTree.svelte +1230 -0
  230. package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
  231. package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
  232. package/dist/layout/json-tree/index.d.ts +3 -0
  233. package/dist/layout/json-tree/index.js +3 -0
  234. package/dist/layout/json-tree/types.d.ts +74 -0
  235. package/dist/layout/json-tree/types.js +2 -0
  236. package/dist/layout/json-tree/utils.d.ts +29 -0
  237. package/dist/layout/json-tree/utils.js +641 -0
  238. package/dist/marching-cubes.d.ts +14 -0
  239. package/dist/marching-cubes.js +540 -0
  240. package/dist/math.d.ts +101 -0
  241. package/dist/math.js +905 -0
  242. package/dist/overlays/ContextMenu.svelte +162 -0
  243. package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
  244. package/dist/overlays/CopyButton.svelte +45 -0
  245. package/dist/overlays/CopyButton.svelte.d.ts +8 -0
  246. package/dist/overlays/DragControlTab.svelte +98 -0
  247. package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
  248. package/dist/overlays/DraggablePane.svelte +487 -0
  249. package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
  250. package/dist/overlays/InfoPaneCards.svelte +149 -0
  251. package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
  252. package/dist/overlays/index.d.ts +3 -0
  253. package/dist/overlays/index.js +3 -0
  254. package/dist/periodic-table/PeriodicTable.svelte +469 -0
  255. package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
  256. package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
  257. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
  258. package/dist/periodic-table/PropertySelect.svelte +37 -0
  259. package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
  260. package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
  261. package/dist/periodic-table/index.d.ts +10 -0
  262. package/dist/periodic-table/index.js +4 -0
  263. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  264. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
  265. package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
  266. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
  267. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  268. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  269. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  270. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
  271. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  272. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
  273. package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
  274. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
  275. package/dist/phase-diagram/build-diagram.d.ts +11 -0
  276. package/dist/phase-diagram/build-diagram.js +160 -0
  277. package/dist/phase-diagram/colors.d.ts +35 -0
  278. package/dist/phase-diagram/colors.js +51 -0
  279. package/dist/phase-diagram/diagram-input.d.ts +29 -0
  280. package/dist/phase-diagram/diagram-input.js +3 -0
  281. package/dist/phase-diagram/index.d.ts +13 -0
  282. package/dist/phase-diagram/index.js +11 -0
  283. package/dist/phase-diagram/parse.d.ts +55 -0
  284. package/dist/phase-diagram/parse.js +272 -0
  285. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  286. package/dist/phase-diagram/svg-to-diagram.js +867 -0
  287. package/dist/phase-diagram/types.d.ts +93 -0
  288. package/dist/phase-diagram/types.js +1 -0
  289. package/dist/phase-diagram/utils.d.ts +118 -0
  290. package/dist/phase-diagram/utils.js +604 -0
  291. package/dist/plot/AxisLabel.svelte +51 -0
  292. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  293. package/dist/plot/BarPlot.svelte +2113 -0
  294. package/dist/plot/BarPlot.svelte.d.ts +84 -0
  295. package/dist/plot/BarPlotControls.svelte +66 -0
  296. package/dist/plot/BarPlotControls.svelte.d.ts +18 -0
  297. package/dist/plot/BinnedScatterPlot.svelte +1114 -0
  298. package/dist/plot/BinnedScatterPlot.svelte.d.ts +66 -0
  299. package/dist/plot/ColorBar.svelte +721 -0
  300. package/dist/plot/ColorBar.svelte.d.ts +31 -0
  301. package/dist/plot/ColorScaleSelect.svelte +54 -0
  302. package/dist/plot/ColorScaleSelect.svelte.d.ts +15 -0
  303. package/dist/plot/ElementScatter.svelte +63 -0
  304. package/dist/plot/ElementScatter.svelte.d.ts +14 -0
  305. package/dist/plot/FillArea.svelte.d.ts +21 -0
  306. package/dist/plot/Histogram.svelte +1558 -0
  307. package/dist/plot/Histogram.svelte.d.ts +50 -0
  308. package/dist/plot/HistogramControls.svelte +212 -0
  309. package/dist/plot/HistogramControls.svelte.d.ts +22 -0
  310. package/dist/plot/InteractiveAxisLabel.svelte +96 -0
  311. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +14 -0
  312. package/dist/plot/Line.svelte +84 -0
  313. package/dist/plot/Line.svelte.d.ts +15 -0
  314. package/dist/plot/PlotAxis.svelte +169 -0
  315. package/dist/plot/PlotAxis.svelte.d.ts +24 -0
  316. package/dist/plot/PlotControls.svelte +537 -0
  317. package/dist/plot/PlotControls.svelte.d.ts +4 -0
  318. package/dist/plot/PlotLegend.svelte +569 -0
  319. package/dist/plot/PlotLegend.svelte.d.ts +29 -0
  320. package/dist/plot/PlotTooltip.svelte +67 -0
  321. package/dist/plot/PlotTooltip.svelte.d.ts +17 -0
  322. package/dist/plot/PortalSelect.svelte +253 -0
  323. package/dist/plot/PortalSelect.svelte.d.ts +16 -0
  324. package/dist/plot/ReferenceLine.svelte.d.ts +20 -0
  325. package/dist/plot/ReferenceLine3D.svelte +156 -0
  326. package/dist/plot/ReferenceLine3D.svelte.d.ts +14 -0
  327. package/dist/plot/ReferencePlane.svelte +175 -0
  328. package/dist/plot/ReferencePlane.svelte.d.ts +14 -0
  329. package/dist/plot/ScatterPlot.svelte +2778 -0
  330. package/dist/plot/ScatterPlot.svelte.d.ts +96 -0
  331. package/dist/plot/ScatterPlot3D.svelte +529 -0
  332. package/dist/plot/ScatterPlot3D.svelte.d.ts +95 -0
  333. package/dist/plot/ScatterPlot3DControls.svelte +437 -0
  334. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +20 -0
  335. package/dist/plot/ScatterPlot3DScene.svelte +912 -0
  336. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +74 -0
  337. package/dist/plot/ScatterPlotControls.svelte +306 -0
  338. package/dist/plot/ScatterPlotControls.svelte.d.ts +17 -0
  339. package/dist/plot/ScatterPoint.svelte +182 -0
  340. package/dist/plot/ScatterPoint.svelte.d.ts +22 -0
  341. package/dist/plot/SpacegroupBarPlot.svelte +293 -0
  342. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +9 -0
  343. package/dist/plot/Surface3D.svelte +197 -0
  344. package/dist/plot/Surface3D.svelte.d.ts +13 -0
  345. package/dist/plot/ZeroLines.svelte +97 -0
  346. package/dist/plot/ZeroLines.svelte.d.ts +33 -0
  347. package/dist/plot/ZoomRect.svelte +23 -0
  348. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  349. package/dist/plot/adaptive-density.d.ts +69 -0
  350. package/dist/plot/adaptive-density.js +191 -0
  351. package/dist/plot/auto-place.d.ts +43 -0
  352. package/dist/plot/auto-place.js +122 -0
  353. package/dist/plot/axis-utils.d.ts +19 -0
  354. package/dist/plot/axis-utils.js +78 -0
  355. package/dist/plot/binned-scatter-types.d.ts +59 -0
  356. package/dist/plot/binned-scatter-types.js +1 -0
  357. package/dist/plot/data-cleaning.d.ts +37 -0
  358. package/dist/plot/data-cleaning.js +855 -0
  359. package/dist/plot/data-transform.d.ts +16 -0
  360. package/dist/plot/data-transform.js +45 -0
  361. package/dist/plot/defaults.d.ts +19 -0
  362. package/dist/plot/defaults.js +9 -0
  363. package/dist/plot/fill-utils.d.ts +46 -0
  364. package/dist/plot/fill-utils.js +322 -0
  365. package/dist/plot/hover-lock.svelte.d.ts +14 -0
  366. package/dist/plot/hover-lock.svelte.js +46 -0
  367. package/dist/plot/index.d.ts +41 -0
  368. package/dist/plot/index.js +39 -0
  369. package/dist/plot/interactions.d.ts +12 -0
  370. package/dist/plot/interactions.js +101 -0
  371. package/dist/plot/layout.d.ts +78 -0
  372. package/dist/plot/layout.js +273 -0
  373. package/dist/plot/reference-line.d.ts +60 -0
  374. package/dist/plot/reference-line.js +314 -0
  375. package/dist/plot/scales.d.ts +48 -0
  376. package/dist/plot/scales.js +481 -0
  377. package/dist/plot/svg.d.ts +1 -0
  378. package/dist/plot/svg.js +11 -0
  379. package/dist/plot/types.d.ts +831 -0
  380. package/dist/plot/types.js +99 -0
  381. package/dist/plot/utils/label-placement.d.ts +68 -0
  382. package/dist/plot/utils/label-placement.js +326 -0
  383. package/dist/plot/utils/series-visibility.d.ts +15 -0
  384. package/dist/plot/utils/series-visibility.js +85 -0
  385. package/dist/plot/utils.d.ts +1 -0
  386. package/dist/plot/utils.js +14 -0
  387. package/dist/rdf/RdfPlot.svelte +247 -0
  388. package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
  389. package/dist/rdf/calc-rdf.d.ts +4 -0
  390. package/dist/rdf/calc-rdf.js +111 -0
  391. package/dist/rdf/index.d.ts +23 -0
  392. package/dist/rdf/index.js +2 -0
  393. package/dist/sanitize.d.ts +6 -0
  394. package/dist/sanitize.js +116 -0
  395. package/dist/settings.d.ts +255 -0
  396. package/dist/settings.js +1132 -0
  397. package/dist/spectral/Bands.svelte +1040 -0
  398. package/dist/spectral/Bands.svelte.d.ts +40 -0
  399. package/dist/spectral/BandsAndDos.svelte +134 -0
  400. package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
  401. package/dist/spectral/BrillouinBandsDos.svelte +252 -0
  402. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
  403. package/dist/spectral/Dos.svelte +697 -0
  404. package/dist/spectral/Dos.svelte.d.ts +29 -0
  405. package/dist/spectral/helpers.d.ts +119 -0
  406. package/dist/spectral/helpers.js +1032 -0
  407. package/dist/spectral/index.d.ts +6 -0
  408. package/dist/spectral/index.js +6 -0
  409. package/dist/spectral/types.d.ts +84 -0
  410. package/dist/spectral/types.js +2 -0
  411. package/dist/state.svelte.d.ts +25 -0
  412. package/dist/state.svelte.js +45 -0
  413. package/dist/structure/Arrow.svelte +72 -0
  414. package/dist/structure/Arrow.svelte.d.ts +15 -0
  415. package/dist/structure/AtomLegend.svelte +815 -0
  416. package/dist/structure/AtomLegend.svelte.d.ts +35 -0
  417. package/dist/structure/Bond.svelte +140 -0
  418. package/dist/structure/Bond.svelte.d.ts +9 -0
  419. package/dist/structure/CanvasTooltip.svelte +33 -0
  420. package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
  421. package/dist/structure/CellSelect.svelte +349 -0
  422. package/dist/structure/CellSelect.svelte.d.ts +13 -0
  423. package/dist/structure/Cylinder.svelte +45 -0
  424. package/dist/structure/Cylinder.svelte.d.ts +10 -0
  425. package/dist/structure/Lattice.svelte +196 -0
  426. package/dist/structure/Lattice.svelte.d.ts +17 -0
  427. package/dist/structure/Structure.svelte +2248 -0
  428. package/dist/structure/Structure.svelte.d.ts +89 -0
  429. package/dist/structure/StructureControls.svelte +1273 -0
  430. package/dist/structure/StructureControls.svelte.d.ts +31 -0
  431. package/dist/structure/StructureExportPane.svelte +252 -0
  432. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  433. package/dist/structure/StructureInfoPane.svelte +737 -0
  434. package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
  435. package/dist/structure/StructureScene.svelte +2255 -0
  436. package/dist/structure/StructureScene.svelte.d.ts +111 -0
  437. package/dist/structure/atom-properties.d.ts +37 -0
  438. package/dist/structure/atom-properties.js +200 -0
  439. package/dist/structure/bond-order-perception.d.ts +13 -0
  440. package/dist/structure/bond-order-perception.js +384 -0
  441. package/dist/structure/bonding.d.ts +68 -0
  442. package/dist/structure/bonding.js +696 -0
  443. package/dist/structure/export.d.ts +20 -0
  444. package/dist/structure/export.js +727 -0
  445. package/dist/structure/index.d.ts +126 -0
  446. package/dist/structure/index.js +169 -0
  447. package/dist/structure/label-placement.d.ts +14 -0
  448. package/dist/structure/label-placement.js +72 -0
  449. package/dist/structure/measure.d.ts +6 -0
  450. package/dist/structure/measure.js +29 -0
  451. package/dist/structure/parse.d.ts +66 -0
  452. package/dist/structure/parse.js +1392 -0
  453. package/dist/structure/partial-occupancy.d.ts +25 -0
  454. package/dist/structure/partial-occupancy.js +99 -0
  455. package/dist/structure/pbc.d.ts +9 -0
  456. package/dist/structure/pbc.js +123 -0
  457. package/dist/structure/supercell.d.ts +8 -0
  458. package/dist/structure/supercell.js +170 -0
  459. package/dist/structure/validation.d.ts +2 -0
  460. package/dist/structure/validation.js +10 -0
  461. package/dist/symmetry/SymmetryStats.svelte +226 -0
  462. package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
  463. package/dist/symmetry/WyckoffTable.svelte +120 -0
  464. package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
  465. package/dist/symmetry/cell-transform.d.ts +12 -0
  466. package/dist/symmetry/cell-transform.js +91 -0
  467. package/dist/symmetry/index.d.ts +43 -0
  468. package/dist/symmetry/index.js +228 -0
  469. package/dist/symmetry/spacegroups.d.ts +9 -0
  470. package/dist/symmetry/spacegroups.js +394 -0
  471. package/dist/table/HeatmapTable.svelte +1833 -0
  472. package/dist/table/HeatmapTable.svelte.d.ts +49 -0
  473. package/dist/table/ToggleMenu.svelte +385 -0
  474. package/dist/table/ToggleMenu.svelte.d.ts +11 -0
  475. package/dist/table/index.d.ts +74 -0
  476. package/dist/table/index.js +38 -0
  477. package/dist/theme/ThemeControl.svelte +53 -0
  478. package/dist/theme/ThemeControl.svelte.d.ts +9 -0
  479. package/dist/theme/index.d.ts +29 -0
  480. package/dist/theme/index.js +79 -0
  481. package/dist/time.d.ts +4 -0
  482. package/dist/time.js +70 -0
  483. package/dist/tooltip/TooltipContent.svelte +58 -0
  484. package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
  485. package/dist/tooltip/index.d.ts +2 -0
  486. package/dist/tooltip/index.js +1 -0
  487. package/dist/tooltip/types.d.ts +8 -0
  488. package/dist/tooltip/types.js +1 -0
  489. package/dist/trajectory/Trajectory.svelte +1545 -0
  490. package/dist/trajectory/Trajectory.svelte.d.ts +77 -0
  491. package/dist/trajectory/TrajectoryError.svelte +128 -0
  492. package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
  493. package/dist/trajectory/TrajectoryExportPane.svelte +357 -0
  494. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
  495. package/dist/trajectory/TrajectoryInfoPane.svelte +313 -0
  496. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
  497. package/dist/trajectory/constants.d.ts +6 -0
  498. package/dist/trajectory/constants.js +7 -0
  499. package/dist/trajectory/extract.d.ts +5 -0
  500. package/dist/trajectory/extract.js +162 -0
  501. package/dist/trajectory/format-detect.d.ts +9 -0
  502. package/dist/trajectory/format-detect.js +76 -0
  503. package/dist/trajectory/frame-reader.d.ts +17 -0
  504. package/dist/trajectory/frame-reader.js +332 -0
  505. package/dist/trajectory/helpers.d.ts +15 -0
  506. package/dist/trajectory/helpers.js +164 -0
  507. package/dist/trajectory/index.d.ts +63 -0
  508. package/dist/trajectory/index.js +126 -0
  509. package/dist/trajectory/parse/ase.d.ts +2 -0
  510. package/dist/trajectory/parse/ase.js +73 -0
  511. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  512. package/dist/trajectory/parse/hdf5.js +127 -0
  513. package/dist/trajectory/parse/index.d.ts +12 -0
  514. package/dist/trajectory/parse/index.js +298 -0
  515. package/dist/trajectory/parse/lammps.d.ts +5 -0
  516. package/dist/trajectory/parse/lammps.js +179 -0
  517. package/dist/trajectory/parse/vasp.d.ts +2 -0
  518. package/dist/trajectory/parse/vasp.js +68 -0
  519. package/dist/trajectory/parse/xyz.d.ts +2 -0
  520. package/dist/trajectory/parse/xyz.js +110 -0
  521. package/dist/trajectory/plotting.d.ts +28 -0
  522. package/dist/trajectory/plotting.js +423 -0
  523. package/dist/trajectory/types.d.ts +11 -0
  524. package/dist/trajectory/types.js +1 -0
  525. package/dist/utils.d.ts +6 -0
  526. package/dist/utils.js +45 -0
  527. package/dist/xrd/XrdPlot.svelte +615 -0
  528. package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
  529. package/dist/xrd/broadening.d.ts +20 -0
  530. package/dist/xrd/broadening.js +97 -0
  531. package/dist/xrd/calc-xrd.d.ts +37 -0
  532. package/dist/xrd/calc-xrd.js +336 -0
  533. package/dist/xrd/index.d.ts +37 -0
  534. package/dist/xrd/index.js +4 -0
  535. package/dist/xrd/parse.d.ts +13 -0
  536. package/dist/xrd/parse.js +749 -0
  537. package/license +1 -1
  538. package/package.json +232 -1457
  539. package/readme.md +98 -171
  540. package/.vscode/launch.json +0 -13
  541. package/.vscodeignore +0 -7
  542. package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
  543. package/dist/assets/browser-DdDecX_W.js +0 -1
  544. package/dist/assets/export-qgn-H9y6.js +0 -2
  545. package/dist/assets/main-DiKYzti2.css +0 -1
  546. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  547. package/dist/extension.js +0 -31293
  548. package/dist/src/lib/FilePicker.svelte +0 -360
  549. package/dist/src/lib/MillerIndexInput.svelte +0 -66
  550. package/dist/src/lib/api/mp.ts +0 -26
  551. package/dist/src/lib/api/optimade.ts +0 -204
  552. package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
  553. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
  554. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
  555. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  556. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
  557. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
  558. package/dist/src/lib/brillouin/compute.ts +0 -529
  559. package/dist/src/lib/brillouin/index.ts +0 -8
  560. package/dist/src/lib/brillouin/types.ts +0 -51
  561. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
  562. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
  563. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
  564. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
  565. package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
  566. package/dist/src/lib/chempot-diagram/color.ts +0 -42
  567. package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
  568. package/dist/src/lib/chempot-diagram/index.ts +0 -6
  569. package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
  570. package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
  571. package/dist/src/lib/chempot-diagram/types.ts +0 -130
  572. package/dist/src/lib/colors/index.ts +0 -249
  573. package/dist/src/lib/composition/BarChart.svelte +0 -297
  574. package/dist/src/lib/composition/BubbleChart.svelte +0 -218
  575. package/dist/src/lib/composition/Composition.svelte +0 -165
  576. package/dist/src/lib/composition/Formula.svelte +0 -268
  577. package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
  578. package/dist/src/lib/composition/PieChart.svelte +0 -323
  579. package/dist/src/lib/composition/format.ts +0 -155
  580. package/dist/src/lib/composition/index.ts +0 -37
  581. package/dist/src/lib/composition/parse.ts +0 -605
  582. package/dist/src/lib/constants.ts +0 -134
  583. package/dist/src/lib/controls.ts +0 -42
  584. package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
  585. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
  586. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
  587. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
  588. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
  589. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
  590. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
  591. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
  592. package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
  593. package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
  594. package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
  595. package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
  596. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
  597. package/dist/src/lib/convex-hull/helpers.ts +0 -932
  598. package/dist/src/lib/convex-hull/index.ts +0 -202
  599. package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
  600. package/dist/src/lib/convex-hull/types.ts +0 -267
  601. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
  602. package/dist/src/lib/coordination/calc-coordination.ts +0 -93
  603. package/dist/src/lib/coordination/index.ts +0 -9
  604. package/dist/src/lib/effects.svelte.ts +0 -48
  605. package/dist/src/lib/element/ElementHeading.svelte +0 -26
  606. package/dist/src/lib/element/ElementPhoto.svelte +0 -57
  607. package/dist/src/lib/element/ElementStats.svelte +0 -80
  608. package/dist/src/lib/element/ElementTile.svelte +0 -484
  609. package/dist/src/lib/element/data.ts +0 -14
  610. package/dist/src/lib/element/index.ts +0 -8
  611. package/dist/src/lib/element/types.ts +0 -62
  612. package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
  613. package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
  614. package/dist/src/lib/feedback/index.ts +0 -4
  615. package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
  616. package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
  617. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
  618. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
  619. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  620. package/dist/src/lib/fermi-surface/compute.ts +0 -728
  621. package/dist/src/lib/fermi-surface/constants.ts +0 -32
  622. package/dist/src/lib/fermi-surface/export.ts +0 -64
  623. package/dist/src/lib/fermi-surface/index.ts +0 -14
  624. package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
  625. package/dist/src/lib/fermi-surface/parse.ts +0 -574
  626. package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
  627. package/dist/src/lib/fermi-surface/types.ts +0 -159
  628. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
  629. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  630. package/dist/src/lib/heatmap-matrix/index.ts +0 -167
  631. package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
  632. package/dist/src/lib/icons.ts +0 -650
  633. package/dist/src/lib/index.ts +0 -61
  634. package/dist/src/lib/io/decompress.ts +0 -92
  635. package/dist/src/lib/io/export.ts +0 -385
  636. package/dist/src/lib/io/fetch.ts +0 -46
  637. package/dist/src/lib/io/file-drop.ts +0 -51
  638. package/dist/src/lib/io/index.ts +0 -7
  639. package/dist/src/lib/io/is-binary.ts +0 -24
  640. package/dist/src/lib/io/types.ts +0 -8
  641. package/dist/src/lib/io/url-drop.ts +0 -141
  642. package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
  643. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
  644. package/dist/src/lib/isosurface/index.ts +0 -7
  645. package/dist/src/lib/isosurface/parse.ts +0 -656
  646. package/dist/src/lib/isosurface/slice.ts +0 -175
  647. package/dist/src/lib/isosurface/types.ts +0 -309
  648. package/dist/src/lib/labels.ts +0 -320
  649. package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
  650. package/dist/src/lib/layout/InfoCard.svelte +0 -120
  651. package/dist/src/lib/layout/InfoTag.svelte +0 -185
  652. package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
  653. package/dist/src/lib/layout/SettingsSection.svelte +0 -148
  654. package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
  655. package/dist/src/lib/layout/fullscreen.ts +0 -65
  656. package/dist/src/lib/layout/index.ts +0 -11
  657. package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
  658. package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
  659. package/dist/src/lib/layout/json-tree/index.ts +0 -3
  660. package/dist/src/lib/layout/json-tree/types.ts +0 -126
  661. package/dist/src/lib/layout/json-tree/utils.ts +0 -682
  662. package/dist/src/lib/marching-cubes.ts +0 -614
  663. package/dist/src/lib/math.ts +0 -1081
  664. package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
  665. package/dist/src/lib/overlays/CopyButton.svelte +0 -45
  666. package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
  667. package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
  668. package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
  669. package/dist/src/lib/overlays/index.ts +0 -3
  670. package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
  671. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
  672. package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
  673. package/dist/src/lib/periodic-table/index.ts +0 -12
  674. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  675. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
  676. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  677. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
  678. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
  679. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
  680. package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
  681. package/dist/src/lib/phase-diagram/colors.ts +0 -58
  682. package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
  683. package/dist/src/lib/phase-diagram/index.ts +0 -13
  684. package/dist/src/lib/phase-diagram/parse.ts +0 -348
  685. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
  686. package/dist/src/lib/phase-diagram/types.ts +0 -144
  687. package/dist/src/lib/phase-diagram/utils.ts +0 -775
  688. package/dist/src/lib/plot/AxisLabel.svelte +0 -51
  689. package/dist/src/lib/plot/BarPlot.svelte +0 -2113
  690. package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
  691. package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
  692. package/dist/src/lib/plot/ColorBar.svelte +0 -721
  693. package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
  694. package/dist/src/lib/plot/ElementScatter.svelte +0 -63
  695. package/dist/src/lib/plot/Histogram.svelte +0 -1558
  696. package/dist/src/lib/plot/HistogramControls.svelte +0 -212
  697. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
  698. package/dist/src/lib/plot/Line.svelte +0 -84
  699. package/dist/src/lib/plot/PlotAxis.svelte +0 -169
  700. package/dist/src/lib/plot/PlotControls.svelte +0 -537
  701. package/dist/src/lib/plot/PlotLegend.svelte +0 -569
  702. package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
  703. package/dist/src/lib/plot/PortalSelect.svelte +0 -253
  704. package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
  705. package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
  706. package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
  707. package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
  708. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
  709. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
  710. package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
  711. package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
  712. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
  713. package/dist/src/lib/plot/Surface3D.svelte +0 -197
  714. package/dist/src/lib/plot/ZeroLines.svelte +0 -97
  715. package/dist/src/lib/plot/ZoomRect.svelte +0 -23
  716. package/dist/src/lib/plot/adaptive-density.ts +0 -316
  717. package/dist/src/lib/plot/auto-place.ts +0 -184
  718. package/dist/src/lib/plot/axis-utils.ts +0 -122
  719. package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
  720. package/dist/src/lib/plot/data-cleaning.ts +0 -1069
  721. package/dist/src/lib/plot/data-transform.ts +0 -69
  722. package/dist/src/lib/plot/defaults.ts +0 -9
  723. package/dist/src/lib/plot/fill-utils.ts +0 -494
  724. package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
  725. package/dist/src/lib/plot/index.ts +0 -53
  726. package/dist/src/lib/plot/interactions.ts +0 -119
  727. package/dist/src/lib/plot/layout.ts +0 -425
  728. package/dist/src/lib/plot/reference-line.ts +0 -426
  729. package/dist/src/lib/plot/scales.ts +0 -654
  730. package/dist/src/lib/plot/svg.ts +0 -23
  731. package/dist/src/lib/plot/types.ts +0 -1144
  732. package/dist/src/lib/plot/utils/label-placement.ts +0 -541
  733. package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
  734. package/dist/src/lib/plot/utils.ts +0 -11
  735. package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
  736. package/dist/src/lib/rdf/calc-rdf.ts +0 -167
  737. package/dist/src/lib/rdf/index.ts +0 -27
  738. package/dist/src/lib/sanitize.ts +0 -126
  739. package/dist/src/lib/settings.ts +0 -1479
  740. package/dist/src/lib/spectral/Bands.svelte +0 -1040
  741. package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
  742. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
  743. package/dist/src/lib/spectral/Dos.svelte +0 -697
  744. package/dist/src/lib/spectral/helpers.ts +0 -1381
  745. package/dist/src/lib/spectral/index.ts +0 -8
  746. package/dist/src/lib/spectral/types.ts +0 -112
  747. package/dist/src/lib/state.svelte.ts +0 -64
  748. package/dist/src/lib/structure/Arrow.svelte +0 -72
  749. package/dist/src/lib/structure/AtomLegend.svelte +0 -815
  750. package/dist/src/lib/structure/Bond.svelte +0 -140
  751. package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
  752. package/dist/src/lib/structure/CellSelect.svelte +0 -349
  753. package/dist/src/lib/structure/Cylinder.svelte +0 -45
  754. package/dist/src/lib/structure/Lattice.svelte +0 -196
  755. package/dist/src/lib/structure/Structure.svelte +0 -2248
  756. package/dist/src/lib/structure/StructureControls.svelte +0 -1273
  757. package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
  758. package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
  759. package/dist/src/lib/structure/StructureScene.svelte +0 -2255
  760. package/dist/src/lib/structure/atom-properties.ts +0 -316
  761. package/dist/src/lib/structure/bond-order-perception.ts +0 -447
  762. package/dist/src/lib/structure/bonding.ts +0 -944
  763. package/dist/src/lib/structure/export.ts +0 -861
  764. package/dist/src/lib/structure/index.ts +0 -291
  765. package/dist/src/lib/structure/label-placement.ts +0 -130
  766. package/dist/src/lib/structure/measure.ts +0 -45
  767. package/dist/src/lib/structure/parse.ts +0 -1705
  768. package/dist/src/lib/structure/partial-occupancy.ts +0 -183
  769. package/dist/src/lib/structure/pbc.ts +0 -164
  770. package/dist/src/lib/structure/supercell.ts +0 -226
  771. package/dist/src/lib/structure/validation.ts +0 -11
  772. package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
  773. package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
  774. package/dist/src/lib/symmetry/cell-transform.ts +0 -118
  775. package/dist/src/lib/symmetry/index.ts +0 -348
  776. package/dist/src/lib/symmetry/spacegroups.ts +0 -404
  777. package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
  778. package/dist/src/lib/table/ToggleMenu.svelte +0 -385
  779. package/dist/src/lib/table/index.ts +0 -139
  780. package/dist/src/lib/theme/ThemeControl.svelte +0 -53
  781. package/dist/src/lib/theme/index.ts +0 -107
  782. package/dist/src/lib/time.ts +0 -71
  783. package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
  784. package/dist/src/lib/tooltip/index.ts +0 -2
  785. package/dist/src/lib/tooltip/types.ts +0 -13
  786. package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
  787. package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
  788. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
  789. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
  790. package/dist/src/lib/trajectory/constants.ts +0 -7
  791. package/dist/src/lib/trajectory/extract.ts +0 -196
  792. package/dist/src/lib/trajectory/format-detect.ts +0 -96
  793. package/dist/src/lib/trajectory/frame-reader.ts +0 -456
  794. package/dist/src/lib/trajectory/helpers.ts +0 -217
  795. package/dist/src/lib/trajectory/index.ts +0 -218
  796. package/dist/src/lib/trajectory/parse/ase.ts +0 -109
  797. package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
  798. package/dist/src/lib/trajectory/parse/index.ts +0 -411
  799. package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
  800. package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
  801. package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
  802. package/dist/src/lib/trajectory/plotting.ts +0 -599
  803. package/dist/src/lib/trajectory/types.ts +0 -13
  804. package/dist/src/lib/utils.ts +0 -56
  805. package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
  806. package/dist/src/lib/xrd/broadening.ts +0 -130
  807. package/dist/src/lib/xrd/calc-xrd.ts +0 -397
  808. package/dist/src/lib/xrd/index.ts +0 -38
  809. package/dist/src/lib/xrd/parse.ts +0 -858
  810. package/dist/webview.js +0 -29421
  811. package/icon.png +0 -0
  812. package/matterviz-0.3.2.vsix +0 -0
  813. package/matterviz-0.3.4.vsix +0 -0
  814. package/matterviz-0.3.5.vsix +0 -0
  815. package/scripts/sync-config.ts +0 -101
  816. package/src/declarations.d.ts +0 -2
  817. package/src/extension.ts +0 -972
  818. package/src/node-io.ts +0 -65
  819. package/src/types.ts +0 -17
  820. package/src/webview/JsonBrowser.svelte +0 -1079
  821. package/src/webview/PlotPanel.svelte +0 -346
  822. package/src/webview/detect.ts +0 -444
  823. package/src/webview/main.ts +0 -764
  824. package/src/webview/plot-utils.ts +0 -250
  825. package/test-fixtures/all-viz-types.json.gz +0 -0
  826. package/test-fixtures/plot-demo-data.json.gz +0 -0
  827. package/tests/detect.test.ts +0 -604
  828. package/tests/extension.test.ts +0 -2041
  829. package/tests/node-io.test.ts +0 -39
  830. package/tests/plot-utils.test.ts +0 -302
  831. package/tests/vite-plugin-json-gz.test.ts +0 -114
  832. package/tests/vscode-mock.ts +0 -18
  833. package/tests/webview.test.ts +0 -231
  834. package/tsconfig.json +0 -20
  835. package/vite-plugin-json-gz.ts +0 -29
  836. package/vite.config.ts +0 -34
  837. package/vite.extension.config.ts +0 -34
  838. /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
  839. /package/dist/{src/lib/Icon.svelte → Icon.svelte} +0 -0
  840. /package/dist/{src/lib/app.css → app.css} +0 -0
  841. /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
  842. /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
  843. /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
  844. /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
  845. /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
  846. /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
  847. /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
  848. /package/dist/{src/lib/convex-hull → convex-hull}/TemperatureSlider.svelte +0 -0
  849. /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
  850. /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
  851. /package/dist/{src/lib/element → element}/data.json +0 -0
  852. /package/dist/{src/lib/element → element}/data.json.gz +0 -0
  853. /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
  854. /package/dist/{src/lib/element → element}/data.schema.json +0 -0
  855. /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
  856. /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
  857. /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
  858. /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
  859. /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
  860. /package/dist/{src/lib/plot → plot}/FillArea.svelte +0 -0
  861. /package/dist/{src/lib/plot → plot}/ReferenceLine.svelte +0 -0
  862. /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
  863. /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
@@ -0,0 +1,749 @@
1
+ // Maximum number of data points to keep after subsampling for performance
2
+ const MAX_POINTS = 1000;
3
+ // Default step size in degrees for XRD scans when not specified in file
4
+ const DEFAULT_STEP_SIZE = 0.02;
5
+ // Generate x values from scan parameters (start angle, step size, point count).
6
+ // Used by formats that store metadata + intensity-only data.
7
+ const generate_x_from_scan = (start, step, count) => Array.from({ length: count }, (_, idx) => start + idx * step);
8
+ // Create normalized XrdPattern from scan metadata and intensities.
9
+ // Returns null if no intensity data. Used by all parsers as final step.
10
+ function create_pattern(start, step, intensities) {
11
+ if (intensities.length === 0)
12
+ return null;
13
+ const x_values = generate_x_from_scan(start, step, intensities.length);
14
+ const normalized = normalize_and_subsample(x_values, intensities);
15
+ return { x: normalized.x, y: normalized.y };
16
+ }
17
+ // Parse whitespace-separated numbers from text. Used by multiple formats.
18
+ const parse_number_list = (text) => text
19
+ .trim()
20
+ .split(/\s+/)
21
+ .map(parseFloat)
22
+ .filter((val) => !isNaN(val));
23
+ // Extract numeric value from header line matching "KEY=VALUE" or "KEY VALUE" pattern.
24
+ // Returns null if not found or not a valid number.
25
+ function extract_header_value(lines, key_pattern) {
26
+ for (const line of lines) {
27
+ const match = line.match(key_pattern);
28
+ if (match?.[1]) {
29
+ const val = parseFloat(match[1]);
30
+ if (!isNaN(val))
31
+ return val;
32
+ }
33
+ }
34
+ return null;
35
+ }
36
+ // Normalize y values to 0-100 range and subsample if too many points.
37
+ // This ensures consistent scaling across different file formats and improves rendering performance.
38
+ function normalize_and_subsample(x_values, y_values) {
39
+ if (x_values.length === 0)
40
+ return { x: [], y: [] };
41
+ // Normalize y to 0-100
42
+ const max_y = Math.max(...y_values);
43
+ const scale = max_y > 0 ? 100 / max_y : 1;
44
+ let norm_y = y_values.map((val) => val * scale);
45
+ let norm_x = x_values;
46
+ // Subsample if too many points using LTTB-like algorithm (preserving peaks)
47
+ if (norm_x.length > MAX_POINTS) {
48
+ const result = subsample_preserve_peaks(norm_x, norm_y, MAX_POINTS);
49
+ norm_x = result.x;
50
+ norm_y = result.y;
51
+ }
52
+ return { x: norm_x, y: norm_y };
53
+ }
54
+ // Subsample data while preserving peaks (local maxima).
55
+ // Uses a combination of uniform sampling and peak preservation.
56
+ function subsample_preserve_peaks(x_values, y_values, target_points) {
57
+ const num_points = x_values.length;
58
+ if (num_points <= target_points)
59
+ return { x: x_values, y: y_values };
60
+ // Find peaks (local maxima with significant height)
61
+ const peaks = [];
62
+ const threshold = Math.max(...y_values) * 0.05; // 5% of max as significance threshold
63
+ for (let idx = 1; idx < num_points - 1; idx++) {
64
+ if (y_values[idx] > y_values[idx - 1] &&
65
+ y_values[idx] > y_values[idx + 1] &&
66
+ y_values[idx] > threshold) {
67
+ peaks.push(idx);
68
+ }
69
+ }
70
+ // Reserve slots for peaks, distribute remaining uniformly
71
+ const peak_slots = Math.min(peaks.length, Math.floor(target_points * 0.3));
72
+ const uniform_slots = target_points - peak_slots;
73
+ // Select top peaks by height
74
+ const top_peaks = peaks
75
+ .map((idx) => ({ idx, y: y_values[idx] }))
76
+ .sort((a, b) => b.y - a.y)
77
+ .slice(0, peak_slots)
78
+ .map((peak) => peak.idx);
79
+ // Uniform sampling (guard against division by zero)
80
+ const uniform_indices = new Set();
81
+ if (uniform_slots > 1) {
82
+ const step = (num_points - 1) / (uniform_slots - 1);
83
+ for (let idx = 0; idx < uniform_slots; idx++) {
84
+ uniform_indices.add(Math.round(idx * step));
85
+ }
86
+ }
87
+ else if (uniform_slots === 1) {
88
+ uniform_indices.add(0); // Just include the first point
89
+ }
90
+ // Merge and sort all selected indices
91
+ const selected = [...new Set([...uniform_indices, ...top_peaks])].sort((a, b) => a - b);
92
+ return {
93
+ x: selected.map((idx) => x_values[idx]),
94
+ y: selected.map((idx) => y_values[idx]),
95
+ };
96
+ }
97
+ // Parse a two-column ASCII file containing XRD data (2θ, intensity).
98
+ // Supports space, tab, or comma delimiters. Ignores comment lines starting with #, ;, or !
99
+ // Also handles .xye (third error column ignored), .csv, .dat, .asc formats.
100
+ export function parse_xy_file(content) {
101
+ const lines = content.split(/\r?\n/);
102
+ const x_values = [];
103
+ const y_values = [];
104
+ for (const line of lines) {
105
+ const trimmed = line.trim();
106
+ // Skip empty lines and common comment prefixes
107
+ if (!trimmed || /^[#;!]/.test(trimmed))
108
+ continue;
109
+ // Split by whitespace or comma
110
+ const parts = trimmed.split(/[\s,]+/).filter(Boolean);
111
+ if (parts.length < 2)
112
+ continue;
113
+ const two_theta = parseFloat(parts[0]);
114
+ const intensity = parseFloat(parts[1]);
115
+ if (!isNaN(two_theta) && !isNaN(intensity)) {
116
+ x_values.push(two_theta);
117
+ y_values.push(intensity);
118
+ }
119
+ }
120
+ if (x_values.length === 0)
121
+ return null;
122
+ const normalized = normalize_and_subsample(x_values, y_values);
123
+ return { x: normalized.x, y: normalized.y };
124
+ }
125
+ // Parse a .xye file containing three-column XRD data (2θ, intensity, error).
126
+ // Same as .xy but with an optional third column for uncertainties (ignored for plotting).
127
+ export function parse_xye_file(content) {
128
+ // XYE is just XY with an extra error column - reuse parse_xy_file which already
129
+ // handles extra columns by only taking the first two
130
+ return parse_xy_file(content);
131
+ }
132
+ // Parse a Rigaku .ras file (ASCII format with structured header).
133
+ // Format: *RAS_HEADER_START ... *RAS_HEADER_END followed by *RAS_INT_START ... *RAS_INT_END
134
+ // Data can be single-column (intensity only) or multi-column (2-theta, intensity, [error])
135
+ export function parse_ras_file(content) {
136
+ const lines = content.split(/\r?\n/);
137
+ // Extract header values (used as fallback for single-column data)
138
+ const header_start = extract_header_value(lines, /\*MEAS_SCAN_START\s*=\s*([\d.+-]+)/i) ??
139
+ extract_header_value(lines, /\*SCAN_START\s*=\s*([\d.+-]+)/i) ??
140
+ 0;
141
+ const header_step = extract_header_value(lines, /\*MEAS_SCAN_STEP\s*=\s*([\d.+-]+)/i) ??
142
+ extract_header_value(lines, /\*SCAN_STEP\s*=\s*([\d.+-]+)/i) ??
143
+ DEFAULT_STEP_SIZE;
144
+ // Find intensity data section between *RAS_INT_START and *RAS_INT_END
145
+ // Also handle older format with *RAS_DATA_START
146
+ let in_data_section = false;
147
+ const data_lines = [];
148
+ for (const line of lines) {
149
+ const trimmed = line.trim();
150
+ if (/^\*RAS_INT_START/i.test(trimmed) || /^\*RAS_DATA_START/i.test(trimmed)) {
151
+ in_data_section = true;
152
+ continue;
153
+ }
154
+ if (/^\*RAS_INT_END/i.test(trimmed) || /^\*RAS_DATA_END/i.test(trimmed))
155
+ break;
156
+ if (in_data_section && trimmed)
157
+ data_lines.push(trimmed);
158
+ }
159
+ // Fallback: if no section markers, try parsing all numeric lines after header
160
+ if (data_lines.length === 0) {
161
+ let past_header = false;
162
+ for (const line of lines) {
163
+ const trimmed = line.trim();
164
+ if (/^\*RAS_HEADER_END/i.test(trimmed)) {
165
+ past_header = true;
166
+ continue;
167
+ }
168
+ if (past_header && trimmed && !trimmed.startsWith(`*`)) {
169
+ const values = parse_number_list(trimmed);
170
+ if (values.length > 0)
171
+ data_lines.push(trimmed);
172
+ }
173
+ }
174
+ }
175
+ if (data_lines.length === 0)
176
+ return null;
177
+ // Multi-column (2-theta, intensity, [error]): reuse parse_xy_file
178
+ // Detect by: 2-3 values per line, multiple rows, first column monotonically increasing
179
+ // (angles increase during a scan, intensities do not follow this pattern)
180
+ const first_values = parse_number_list(data_lines[0]);
181
+ const has_column_structure = first_values.length >= 2 && first_values.length <= 3 && data_lines.length > 1;
182
+ if (has_column_structure) {
183
+ // Check if first column values are monotonically increasing (characteristic of angle data)
184
+ // Sample a few lines to verify the pattern
185
+ const sample_count = Math.min(5, data_lines.length);
186
+ let [is_monotonic, prev_angle] = [true, first_values[0]];
187
+ for (let idx = 1; idx < sample_count; idx++) {
188
+ const values = parse_number_list(data_lines[idx]);
189
+ if (values.length < 2 || values[0] <= prev_angle) {
190
+ is_monotonic = false;
191
+ break;
192
+ }
193
+ prev_angle = values[0];
194
+ }
195
+ if (is_monotonic)
196
+ return parse_xy_file(data_lines.join(`\n`));
197
+ }
198
+ // Single-column or many space-separated intensities: use header start/step
199
+ const intensities = data_lines.flatMap(parse_number_list);
200
+ return create_pattern(header_start, header_step, intensities);
201
+ }
202
+ // Parse a Siemens/Bruker .uxd file (ASCII format with underscore-prefixed header).
203
+ // Format: _KEY=VALUE or _KEY VALUE header lines, followed by _COUNTS section.
204
+ export function parse_uxd_file(content) {
205
+ const lines = content.split(/\r?\n/);
206
+ // Extract header values (underscore-prefixed keys)
207
+ const start = extract_header_value(lines, /_2THETA_?START\s*=?\s*([\d.+-]+)/i) ??
208
+ extract_header_value(lines, /_START\s*=?\s*([\d.+-]+)/i) ??
209
+ 0;
210
+ const step = extract_header_value(lines, /_STEP_?SIZE\s*=?\s*([\d.+-]+)/i) ??
211
+ extract_header_value(lines, /_STEPWIDTH\s*=?\s*([\d.+-]+)/i) ??
212
+ DEFAULT_STEP_SIZE;
213
+ // Find intensity data after _COUNTS marker
214
+ let in_data_section = false;
215
+ const intensities = [];
216
+ for (const line of lines) {
217
+ const trimmed = line.trim();
218
+ // Skip comments
219
+ if (trimmed.startsWith(`;`))
220
+ continue;
221
+ if (/^_COUNTS/i.test(trimmed)) {
222
+ in_data_section = true;
223
+ continue;
224
+ }
225
+ // New header section ends data
226
+ if (in_data_section && trimmed.startsWith(`_`)) {
227
+ break;
228
+ }
229
+ if (in_data_section && trimmed) {
230
+ const values = parse_number_list(trimmed);
231
+ intensities.push(...values);
232
+ }
233
+ }
234
+ // Fallback: if no _COUNTS marker, try two-column format
235
+ if (intensities.length === 0)
236
+ return parse_xy_file(content);
237
+ return create_pattern(start, step, intensities);
238
+ }
239
+ // Parse a GSAS powder diffraction file.
240
+ // Handles both STD (constant step) and ESD (explicit positions) formats.
241
+ // BANK header contains metadata: BANK n NPTS NCHAN BINTYPE BCOEF1 BCOEF2 ...
242
+ export function parse_gsas_file(content) {
243
+ const lines = content.split(/\r?\n/);
244
+ // Find BANK header line (format varies by GSAS version)
245
+ let start = 0;
246
+ let step = DEFAULT_STEP_SIZE;
247
+ let bin_type = `CONST`; // CONST, RALF, or others
248
+ let found_bank = false;
249
+ for (const line of lines) {
250
+ const bank_match = /BANK\s+\d+\s+(\d+)\s+\d+\s+(\w+)\s+([\d.+-]+)\s+([\d.+-]+)/i.exec(line);
251
+ if (bank_match) {
252
+ bin_type = bank_match[2].toUpperCase();
253
+ // For CONST type: BCOEF1 is start*100 (centidegrees), BCOEF2 is step*100
254
+ if (bin_type === `CONST`) {
255
+ start = parseFloat(bank_match[3]) / 100; // Convert centidegrees to degrees
256
+ step = parseFloat(bank_match[4]) / 100;
257
+ }
258
+ else if (bin_type !== `FXYE`) {
259
+ // Other bin types like RALF (time-of-flight) are not fully supported
260
+ console.warn(`GSAS bin type "${bin_type}" not fully supported, treating as constant-step`);
261
+ }
262
+ found_bank = true;
263
+ break;
264
+ }
265
+ }
266
+ // Collect intensity values after BANK header
267
+ const intensities = [];
268
+ const is_fxye = bin_type === `FXYE`; // Only use triplet parsing if BANK explicitly says FXYE
269
+ let past_bank = !found_bank; // If no BANK header, try parsing all data
270
+ for (const line of lines) {
271
+ if (line.includes(`BANK`)) {
272
+ past_bank = true;
273
+ continue;
274
+ }
275
+ // Skip header/title lines
276
+ if (!past_bank || line.startsWith(`#`) || line.startsWith(`!`))
277
+ continue;
278
+ const trimmed = line.trim();
279
+ if (!trimmed)
280
+ continue;
281
+ // GSAS uses fixed-width columns or space-separated values
282
+ const values = parse_number_list(trimmed);
283
+ // For FXYE format (x, y, e triplets), extract y values at indices 1, 4, 7, ...
284
+ if (is_fxye && values.length >= 3) {
285
+ for (let idx = 1; idx < values.length; idx += 3) {
286
+ intensities.push(values[idx]);
287
+ }
288
+ }
289
+ else {
290
+ intensities.push(...values);
291
+ }
292
+ }
293
+ return create_pattern(start, step, intensities);
294
+ }
295
+ // Bruker RAW V2 header byte offsets (little-endian)
296
+ const RAW_V2_HEADER_SIZE_OFFSET = 4;
297
+ const RAW_V2_START_OFFSET = 48;
298
+ const RAW_V2_STEP_OFFSET = 56;
299
+ const RAW_V2_COUNT_OFFSET = 64;
300
+ // Bruker RAW V4 header byte offsets (little-endian)
301
+ const RAW_V4_HEADER_SIZE_OFFSET = 4;
302
+ const RAW_V4_START_OFFSET = 140;
303
+ const RAW_V4_STEP_OFFSET = 148;
304
+ const RAW_V4_COUNT_OFFSET = 156;
305
+ // Alternative V4 offsets for some instrument variants
306
+ const RAW_V4_ALT_START_OFFSET = 76;
307
+ const RAW_V4_ALT_STEP_OFFSET = 84;
308
+ const RAW_V4_ALT_COUNT_OFFSET = 92;
309
+ // Parse a Bruker binary .raw file.
310
+ // Detects format version from magic bytes and extracts scan parameters + intensities.
311
+ export function parse_bruker_raw_file(data) {
312
+ const view = new DataView(data);
313
+ const bytes = new Uint8Array(data);
314
+ // Check magic bytes to determine version
315
+ const magic = String.fromCharCode(...bytes.slice(0, 4));
316
+ // RAW1.01 format (older)
317
+ if (magic === `RAW1` || magic === `RAW `) {
318
+ return parse_bruker_raw_v1(view, bytes);
319
+ }
320
+ // RAW2.00 format
321
+ if (magic === `RAW2`) {
322
+ return parse_bruker_raw_v2(view);
323
+ }
324
+ // RAW4 format (newer)
325
+ if (magic === `RAW4`) {
326
+ return parse_bruker_raw_v4(view);
327
+ }
328
+ // Try Rigaku RAW format (different structure)
329
+ // Rigaku files often start with different magic or have no magic
330
+ return parse_rigaku_raw_file(data);
331
+ }
332
+ // Parse Bruker RAW version 1 format
333
+ function parse_bruker_raw_v1(view, bytes) {
334
+ try {
335
+ // V1 has ASCII header with scan parameters followed by binary data
336
+ const header_text = String.fromCharCode(...bytes.slice(0, 512));
337
+ // Try to find scan parameters in ASCII header
338
+ const start_match = /START\s*=\s*([\d.+-]+)/i.exec(header_text);
339
+ const step_match = /STEP\s*=\s*([\d.+-]+)/i.exec(header_text);
340
+ const count_match = /(?:COUNT|POINTS|NPTS)\s*=\s*(\d+)/i.exec(header_text);
341
+ const start = start_match ? parseFloat(start_match[1]) : 0;
342
+ const step = step_match ? parseFloat(step_match[1]) : DEFAULT_STEP_SIZE;
343
+ // Find where binary data starts (after header)
344
+ let data_offset = 512;
345
+ if (count_match) {
346
+ const expected_count = parseInt(count_match[1]);
347
+ // Binary data is typically 4 bytes per intensity (float32)
348
+ data_offset = bytes.length - expected_count * 4;
349
+ }
350
+ const intensities = read_float32_array(view, data_offset);
351
+ return create_pattern(start, step, intensities);
352
+ }
353
+ catch {
354
+ return null;
355
+ }
356
+ }
357
+ // Parse Bruker RAW version 2 format
358
+ function parse_bruker_raw_v2(view) {
359
+ try {
360
+ const header_size = view.getUint32(RAW_V2_HEADER_SIZE_OFFSET, true);
361
+ const start = view.getFloat64(RAW_V2_START_OFFSET, true);
362
+ const step = view.getFloat64(RAW_V2_STEP_OFFSET, true);
363
+ const count = view.getUint32(RAW_V2_COUNT_OFFSET, true);
364
+ if (count === 0 || step <= 0)
365
+ return null;
366
+ const intensities = read_float32_array(view, header_size, count);
367
+ return create_pattern(start, step, intensities);
368
+ }
369
+ catch {
370
+ return null;
371
+ }
372
+ }
373
+ // Parse Bruker RAW version 4 format
374
+ function parse_bruker_raw_v4(view) {
375
+ try {
376
+ const header_size = view.getUint32(RAW_V4_HEADER_SIZE_OFFSET, true);
377
+ let start = view.getFloat64(RAW_V4_START_OFFSET, true);
378
+ let step = view.getFloat64(RAW_V4_STEP_OFFSET, true);
379
+ let count = view.getUint32(RAW_V4_COUNT_OFFSET, true);
380
+ // Try alternative offsets for different V4 variants
381
+ if (count === 0 || step <= 0 || isNaN(start)) {
382
+ start = view.getFloat64(RAW_V4_ALT_START_OFFSET, true);
383
+ step = view.getFloat64(RAW_V4_ALT_STEP_OFFSET, true);
384
+ count = view.getUint32(RAW_V4_ALT_COUNT_OFFSET, true);
385
+ if (count === 0 || step <= 0 || isNaN(start))
386
+ return null;
387
+ }
388
+ const intensities = read_float32_array(view, header_size, count);
389
+ return create_pattern(start, step, intensities);
390
+ }
391
+ catch {
392
+ return null;
393
+ }
394
+ }
395
+ // Parse Rigaku binary .raw file format
396
+ function parse_rigaku_raw_file(data) {
397
+ try {
398
+ const view = new DataView(data);
399
+ const bytes = new Uint8Array(data);
400
+ // Try to find ASCII header section with scan parameters
401
+ const header_text = String.fromCharCode(...bytes.slice(0, Math.min(2048, bytes.length)));
402
+ const start_match = /(?:START|2THETA_START|SCAN_START)\s*[:=]?\s*([\d.+-]+)/i.exec(header_text);
403
+ const step_match = /(?:STEP|STEP_SIZE|SCAN_STEP)\s*[:=]?\s*([\d.+-]+)/i.exec(header_text);
404
+ const count_match = /(?:COUNT|POINTS|NPTS|STEPS)\s*[:=]?\s*(\d+)/i.exec(header_text);
405
+ if (!start_match && !step_match && !count_match)
406
+ return null; // Not a recognizable Rigaku format
407
+ const start = start_match ? parseFloat(start_match[1]) : 0;
408
+ const step = step_match ? parseFloat(step_match[1]) : DEFAULT_STEP_SIZE;
409
+ const expected_count = count_match ? parseInt(count_match[1]) : 0;
410
+ // Find binary data section
411
+ // Rigaku typically stores intensities as 32-bit floats or integers
412
+ let data_offset = 0;
413
+ for (let offset = 256; offset < Math.min(4096, bytes.length); offset += 4) {
414
+ // Look for start of reasonable intensity values
415
+ const val = view.getFloat32(offset, true);
416
+ if (val >= 0 && val < 1e10 && !isNaN(val)) {
417
+ data_offset = offset;
418
+ break;
419
+ }
420
+ }
421
+ const intensities = read_float32_array(view, data_offset, expected_count || undefined);
422
+ return create_pattern(start, step, intensities);
423
+ }
424
+ catch {
425
+ return null;
426
+ }
427
+ }
428
+ // Read array of 32-bit floats from DataView starting at offset.
429
+ // Note: Negative values are allowed since background-subtracted XRD data can
430
+ // legitimately have negative intensities.
431
+ function read_float32_array(view, offset, count) {
432
+ const values = [];
433
+ const max_offset = view.byteLength - 4;
434
+ const max_count = count ?? Math.floor((view.byteLength - offset) / 4);
435
+ // Track invalid values in the first N points to detect wrong offset.
436
+ // Trade-off: This heuristic may reject legitimate data with corrupted initial
437
+ // measurements, but such cases are rare. If >50% of the first 20 values are
438
+ // invalid (NaN/Infinity), we assume the offset is incorrect and return early.
439
+ const EARLY_CHECK_COUNT = 20;
440
+ const INVALID_THRESHOLD = 0.5;
441
+ let invalid_count = 0;
442
+ for (let idx = 0; idx < max_count && offset + idx * 4 <= max_offset; idx++) {
443
+ const val = view.getFloat32(offset + idx * 4, true); // little-endian
444
+ // Filter out invalid values (NaN, Infinity)
445
+ if (isNaN(val) || !isFinite(val)) {
446
+ if (idx < EARLY_CHECK_COUNT) {
447
+ invalid_count++;
448
+ if (invalid_count > EARLY_CHECK_COUNT * INVALID_THRESHOLD)
449
+ break;
450
+ }
451
+ values.push(0); // Replace isolated bad values
452
+ }
453
+ else
454
+ values.push(val);
455
+ }
456
+ return values;
457
+ }
458
+ // Parse a Bruker .brml file (ZIP archive containing XML data).
459
+ // Extracts 2θ and intensity data from the RawData XML within the archive.
460
+ export async function parse_brml_file(data) {
461
+ try {
462
+ // Lazy import fflate to avoid bundling in SSR
463
+ const { unzipSync } = await import(`fflate`);
464
+ const files = unzipSync(new Uint8Array(data));
465
+ // Find the RawData XML file (usually named RawData0.xml or similar)
466
+ let raw_data_xml = null;
467
+ for (const [filename, file_data] of Object.entries(files)) {
468
+ if (filename.toLowerCase().includes(`rawdata`) && filename.endsWith(`.xml`)) {
469
+ raw_data_xml = new TextDecoder().decode(file_data);
470
+ break;
471
+ }
472
+ }
473
+ // If no RawData file found, try to find any XML file with intensity data
474
+ if (!raw_data_xml) {
475
+ for (const [filename, file_data] of Object.entries(files)) {
476
+ if (filename.endsWith(`.xml`)) {
477
+ const file_content = new TextDecoder().decode(file_data);
478
+ // Check for various data formats used by different Bruker versions
479
+ if ([`<Intensities>`, `<Counts>`, `<Datum>`].some((tag) => file_content.includes(tag))) {
480
+ raw_data_xml = file_content;
481
+ break;
482
+ }
483
+ }
484
+ }
485
+ }
486
+ if (!raw_data_xml)
487
+ return null;
488
+ return parse_brml_xml(raw_data_xml);
489
+ }
490
+ catch (error) {
491
+ console.error(`Failed to parse BRML file:`, error);
492
+ return null;
493
+ }
494
+ }
495
+ // Parse the XML content from a BRML file to extract XRD data.
496
+ // Bruker BRML files contain scan parameters and intensity counts.
497
+ function parse_brml_xml(xml_content) {
498
+ try {
499
+ const parser = new DOMParser();
500
+ const doc = parser.parseFromString(xml_content, `application/xml`);
501
+ // Check for parsing errors
502
+ const parse_error = doc.querySelector(`parsererror`);
503
+ if (parse_error)
504
+ return null;
505
+ // Extract scan parameters - try multiple possible structures
506
+ // Bruker BRML files can have different XML schemas
507
+ const scan_info = extract_scan_parameters_xml(doc);
508
+ if (!scan_info)
509
+ return null;
510
+ const { start_angle, step_size, intensities } = scan_info;
511
+ return create_pattern(start_angle, step_size, intensities);
512
+ }
513
+ catch (error) {
514
+ console.error(`Failed to parse BRML XML:`, error);
515
+ return null;
516
+ }
517
+ }
518
+ // Extract scan parameters and intensities from BRML XML document.
519
+ // Handles multiple possible XML structures used by different Bruker versions.
520
+ function extract_scan_parameters_xml(doc) {
521
+ // Try to find intensity data - multiple possible tag names
522
+ let intensities = null;
523
+ let two_theta_values = null;
524
+ // Method 1: <Intensities> tag with space-separated values
525
+ const intensities_el = doc.querySelector(`Intensities`);
526
+ if (intensities_el?.textContent) {
527
+ intensities = parse_number_list(intensities_el.textContent);
528
+ }
529
+ // Method 2: <Counts> tag
530
+ if (!intensities?.length) {
531
+ const counts_el = doc.querySelector(`Counts`);
532
+ if (counts_el?.textContent) {
533
+ intensities = parse_number_list(counts_el.textContent);
534
+ }
535
+ }
536
+ // Method 3: Individual <I> or <Count> elements
537
+ if (!intensities?.length) {
538
+ const intensity_elements = doc.querySelectorAll(`I, Count`);
539
+ if (intensity_elements.length > 0) {
540
+ intensities = Array.from(intensity_elements)
541
+ .map((el) => parseFloat(el.textContent || ``))
542
+ .filter((val) => !isNaN(val));
543
+ }
544
+ }
545
+ // Method 4: <Datum> elements with comma-separated values
546
+ // Bruker uses different formats depending on instrument/software version:
547
+ // - 8-column HRXRD: "1,1,TwoTheta,Omega,...,Intensity" (indices 2 and 7)
548
+ // - 5-column powder: "time,1,TwoTheta,Theta,Intensity" (indices 2 and 4)
549
+ // The intensity is always the LAST column, 2Theta is always index 2
550
+ if (!intensities?.length) {
551
+ const datum_elements = Array.from(doc.querySelectorAll(`Datum`));
552
+ if (datum_elements.length > 0) {
553
+ two_theta_values = [];
554
+ intensities = [];
555
+ for (const datum of datum_elements) {
556
+ const text = datum.textContent?.trim();
557
+ if (!text)
558
+ continue;
559
+ const parts = text.split(`,`);
560
+ // Need at least 5 columns: time, flag, 2Theta, Theta/Omega, Intensity
561
+ if (parts.length >= 5) {
562
+ const two_theta = parseFloat(parts[2]);
563
+ // Intensity is always the last column
564
+ const intensity = parseFloat(parts[parts.length - 1]);
565
+ if (!isNaN(two_theta) && !isNaN(intensity)) {
566
+ two_theta_values.push(two_theta);
567
+ intensities.push(intensity);
568
+ }
569
+ }
570
+ }
571
+ // If we have extracted 2θ values directly, return early with them
572
+ if (two_theta_values.length > 0 && intensities.length > 0) {
573
+ // Calculate step size from actual data (fallback 0.002° typical for HRXRD)
574
+ const step_size = two_theta_values.length > 1
575
+ ? (two_theta_values[two_theta_values.length - 1] - two_theta_values[0]) /
576
+ (two_theta_values.length - 1)
577
+ : DEFAULT_STEP_SIZE;
578
+ return { start_angle: two_theta_values[0], step_size, intensities };
579
+ }
580
+ }
581
+ }
582
+ if (!intensities?.length)
583
+ return null;
584
+ // Extract scan range parameters
585
+ let start_angle = 0;
586
+ let step_size = DEFAULT_STEP_SIZE;
587
+ // Try to find start angle - multiple possible locations
588
+ const start_candidates = [
589
+ `Start`,
590
+ `TwoThetaStart`,
591
+ `StartPosition`,
592
+ `2ThetaBegin`,
593
+ `ScanAxisBeginPosition`,
594
+ `Begin`,
595
+ ];
596
+ for (const tag of start_candidates) {
597
+ const el = doc.querySelector(tag);
598
+ if (el?.textContent) {
599
+ const val = parseFloat(el.textContent);
600
+ if (!isNaN(val)) {
601
+ start_angle = val;
602
+ break;
603
+ }
604
+ }
605
+ }
606
+ // Try to find step size - multiple possible locations
607
+ const step_candidates = [
608
+ `Step`,
609
+ `StepSize`,
610
+ `Increment`,
611
+ `2ThetaIncrement`,
612
+ `ScanAxisIncrement`,
613
+ `StepWidth`,
614
+ ];
615
+ for (const tag of step_candidates) {
616
+ const el = doc.querySelector(tag);
617
+ if (el?.textContent) {
618
+ const val = parseFloat(el.textContent);
619
+ if (!isNaN(val) && val > 0) {
620
+ step_size = val;
621
+ break;
622
+ }
623
+ }
624
+ }
625
+ // Alternative: calculate step from start/end and count
626
+ if (step_size === DEFAULT_STEP_SIZE) {
627
+ const end_candidates = [`Stop`, `TwoThetaEnd`, `EndPosition`, `2ThetaEnd`, `End`];
628
+ for (const tag of end_candidates) {
629
+ const el = doc.querySelector(tag);
630
+ if (el?.textContent) {
631
+ const end_val = parseFloat(el.textContent);
632
+ if (!isNaN(end_val) && end_val > start_angle && intensities.length > 1) {
633
+ step_size = (end_val - start_angle) / (intensities.length - 1);
634
+ break;
635
+ }
636
+ }
637
+ }
638
+ }
639
+ return { start_angle, step_size, intensities };
640
+ }
641
+ // Parse a PANalytical .xrdml file (XML format).
642
+ // Extracts 2θ range and intensities from the XML structure.
643
+ export function parse_xrdml_file(content) {
644
+ try {
645
+ const parser = new DOMParser();
646
+ const doc = parser.parseFromString(content, `application/xml`);
647
+ // Check for parsing errors
648
+ const parse_error = doc.querySelector(`parsererror`);
649
+ if (parse_error)
650
+ return null;
651
+ // Find dataPoints section
652
+ const data_points = doc.querySelector(`dataPoints`);
653
+ if (!data_points)
654
+ return null;
655
+ // Extract 2θ positions (start and end)
656
+ const two_theta_positions = data_points.querySelector(`positions[axis="2Theta"]`);
657
+ if (!two_theta_positions)
658
+ return null;
659
+ const start_el = two_theta_positions.querySelector(`startPosition`);
660
+ const end_el = two_theta_positions.querySelector(`endPosition`);
661
+ if (!start_el?.textContent || !end_el?.textContent)
662
+ return null;
663
+ const start_angle = parseFloat(start_el.textContent);
664
+ const end_angle = parseFloat(end_el.textContent);
665
+ if (isNaN(start_angle) || isNaN(end_angle))
666
+ return null;
667
+ // Extract intensities
668
+ const intensities_el = data_points.querySelector(`intensities`);
669
+ if (!intensities_el?.textContent)
670
+ return null;
671
+ const intensities = parse_number_list(intensities_el.textContent);
672
+ const step = intensities.length > 1
673
+ ? (end_angle - start_angle) / (intensities.length - 1)
674
+ : DEFAULT_STEP_SIZE;
675
+ return create_pattern(start_angle, step, intensities);
676
+ }
677
+ catch (error) {
678
+ console.error(`Failed to parse XRDML file:`, error);
679
+ return null;
680
+ }
681
+ }
682
+ // Two-column ASCII format extensions (all use parse_xy_file)
683
+ const ASCII_XY_EXTENSIONS = [`xy`, `xye`, `csv`, `dat`, `asc`, `txt`];
684
+ // Header-based ASCII format extensions
685
+ const GSAS_EXTENSIONS = [`gsas`, `gsa`, `gda`, `fxye`];
686
+ const ASCII_HEADER_EXTENSIONS = [`ras`, `uxd`, ...GSAS_EXTENSIONS];
687
+ // XML-based format extensions
688
+ const XML_EXTENSIONS = [`xrdml`];
689
+ // Binary format extensions
690
+ const BINARY_EXTENSIONS = [`brml`, `raw`];
691
+ // All supported XRD data file extensions (base formats, without .gz)
692
+ export const XRD_FILE_EXTENSIONS = [
693
+ ...ASCII_XY_EXTENSIONS,
694
+ ...ASCII_HEADER_EXTENSIONS,
695
+ ...XML_EXTENSIONS,
696
+ ...BINARY_EXTENSIONS,
697
+ ];
698
+ // Main entry point for parsing XRD data files.
699
+ // Detects file type by extension and delegates to appropriate parser.
700
+ // Handles both plain and gzipped filenames (content should already be decompressed)
701
+ export async function parse_xrd_file(content, filename) {
702
+ // Strip .gz suffix if present to get base extension
703
+ const base_name = filename.toLowerCase().replace(/\.gz$/, ``);
704
+ const ext = base_name.split(`.`).pop();
705
+ if (!ext)
706
+ return null;
707
+ // Helper to get text content
708
+ const get_text = () => typeof content === `string` ? content : new TextDecoder().decode(content);
709
+ // Helper to get binary content
710
+ const get_buffer = () => {
711
+ if (typeof content === `string`) {
712
+ const encoded = new TextEncoder().encode(content);
713
+ // Create a new ArrayBuffer and copy the data to avoid SharedArrayBuffer type issues
714
+ const buffer = new ArrayBuffer(encoded.byteLength);
715
+ new Uint8Array(buffer).set(encoded);
716
+ return buffer;
717
+ }
718
+ return content;
719
+ };
720
+ // Two-column ASCII formats
721
+ if (ASCII_XY_EXTENSIONS.includes(ext)) {
722
+ return parse_xy_file(get_text());
723
+ }
724
+ // Header-based ASCII formats
725
+ if (ext === `ras`)
726
+ return parse_ras_file(get_text());
727
+ if (ext === `uxd`)
728
+ return parse_uxd_file(get_text());
729
+ if (GSAS_EXTENSIONS.includes(ext)) {
730
+ return parse_gsas_file(get_text());
731
+ }
732
+ // XML formats
733
+ if (ext === `xrdml`)
734
+ return parse_xrdml_file(get_text());
735
+ // Binary formats
736
+ if (ext === `brml`)
737
+ return parse_brml_file(get_buffer()); // async due to lazy fflate import
738
+ if (ext === `raw`)
739
+ return parse_bruker_raw_file(get_buffer());
740
+ return null;
741
+ }
742
+ // Check if a filename represents a supported XRD data file format.
743
+ // Recognizes both plain and gzipped versions (e.g. .xy and .xy.gz)
744
+ export function is_xrd_data_file(filename) {
745
+ // Strip .gz suffix if present to get base extension
746
+ const base_name = filename.toLowerCase().replace(/\.gz$/, ``);
747
+ const ext = base_name.split(`.`).pop();
748
+ return ext !== undefined && XRD_FILE_EXTENSIONS.includes(ext);
749
+ }