matterviz 0.3.6 → 0.4.0

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