matterviz 0.3.4 → 0.3.6

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