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