matterviz 0.4.0 → 0.4.2

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 (527) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +12 -14
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/app.css +53 -0
  6. package/dist/brillouin/BrillouinZone.svelte +132 -219
  7. package/dist/brillouin/BrillouinZone.svelte.d.ts +9 -20
  8. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  9. package/dist/brillouin/BrillouinZoneExportPane.svelte +47 -96
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +15 -42
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
  13. package/dist/brillouin/BrillouinZoneScene.svelte +63 -230
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +3 -23
  15. package/dist/brillouin/ReciprocalVectors.svelte +39 -0
  16. package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
  17. package/dist/brillouin/compute.d.ts +2 -0
  18. package/dist/brillouin/compute.js +80 -77
  19. package/dist/brillouin/geometry.d.ts +8 -0
  20. package/dist/brillouin/geometry.js +57 -0
  21. package/dist/brillouin/index.d.ts +2 -0
  22. package/dist/brillouin/index.js +2 -0
  23. package/dist/brillouin/types.d.ts +2 -2
  24. package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
  25. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
  26. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +143 -246
  27. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
  28. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +652 -976
  29. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
  30. package/dist/chempot-diagram/async-compute.svelte.js +1 -1
  31. package/dist/chempot-diagram/color.d.ts +3 -6
  32. package/dist/chempot-diagram/color.js +5 -5
  33. package/dist/chempot-diagram/compute.d.ts +3 -3
  34. package/dist/chempot-diagram/compute.js +3 -1
  35. package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
  36. package/dist/chempot-diagram/controls-state.svelte.js +42 -0
  37. package/dist/chempot-diagram/export.d.ts +47 -0
  38. package/dist/chempot-diagram/export.js +133 -0
  39. package/dist/chempot-diagram/index.d.ts +1 -0
  40. package/dist/chempot-diagram/index.js +1 -0
  41. package/dist/chempot-diagram/pointer.d.ts +0 -10
  42. package/dist/chempot-diagram/pointer.js +4 -4
  43. package/dist/chempot-diagram/types.d.ts +3 -3
  44. package/dist/colors/index.d.ts +0 -4
  45. package/dist/colors/index.js +21 -22
  46. package/dist/composition/BarChart.svelte +37 -31
  47. package/dist/composition/BubbleChart.svelte +17 -17
  48. package/dist/composition/Composition.svelte +7 -11
  49. package/dist/composition/Formula.svelte +18 -25
  50. package/dist/composition/FormulaFilter.svelte +96 -98
  51. package/dist/composition/PieChart.svelte +60 -46
  52. package/dist/composition/chem-sys.js +3 -2
  53. package/dist/composition/format.js +4 -3
  54. package/dist/composition/index.d.ts +2 -0
  55. package/dist/composition/index.js +14 -0
  56. package/dist/composition/parse.d.ts +2 -3
  57. package/dist/composition/parse.js +27 -28
  58. package/dist/constants.js +11 -9
  59. package/dist/controls.d.ts +1 -0
  60. package/dist/controls.js +0 -1
  61. package/dist/convex-hull/ConvexHull.svelte +20 -25
  62. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
  63. package/dist/convex-hull/ConvexHull2D.svelte +176 -256
  64. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  65. package/dist/convex-hull/ConvexHull3D.svelte +269 -804
  66. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  67. package/dist/convex-hull/ConvexHull4D.svelte +236 -755
  68. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  69. package/dist/convex-hull/ConvexHullChrome.svelte +264 -0
  70. package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
  71. package/dist/convex-hull/ConvexHullControls.svelte +128 -49
  72. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
  73. package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
  74. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
  75. package/dist/convex-hull/ConvexHullStats.svelte +210 -351
  76. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
  77. package/dist/convex-hull/ConvexHullTooltip.svelte +16 -14
  78. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
  79. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  80. package/dist/convex-hull/StructurePopup.svelte +17 -21
  81. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  82. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  83. package/dist/convex-hull/barycentric-coords.d.ts +2 -4
  84. package/dist/convex-hull/barycentric-coords.js +6 -33
  85. package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
  86. package/dist/convex-hull/canvas-interactions.svelte.js +279 -0
  87. package/dist/convex-hull/helpers.d.ts +47 -17
  88. package/dist/convex-hull/helpers.js +186 -101
  89. package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
  90. package/dist/convex-hull/hull-state.svelte.js +124 -0
  91. package/dist/convex-hull/index.d.ts +9 -7
  92. package/dist/convex-hull/index.js +7 -2
  93. package/dist/convex-hull/thermodynamics.js +109 -937
  94. package/dist/convex-hull/types.d.ts +12 -4
  95. package/dist/convex-hull/types.js +12 -0
  96. package/dist/coordination/CoordinationBarPlot.svelte +41 -43
  97. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  98. package/dist/coordination/calc-coordination.d.ts +1 -1
  99. package/dist/coordination/calc-coordination.js +28 -25
  100. package/dist/element/BohrAtom.svelte +6 -8
  101. package/dist/element/ElementHeading.svelte +4 -1
  102. package/dist/element/ElementPhoto.svelte +11 -9
  103. package/dist/element/ElementStats.svelte +12 -10
  104. package/dist/element/ElementTile.svelte +24 -29
  105. package/dist/element/ElementTile.svelte.d.ts +1 -1
  106. package/dist/element/Nucleus.svelte +4 -2
  107. package/dist/element/data.d.ts +1 -2
  108. package/dist/element/helpers.d.ts +4 -0
  109. package/dist/element/helpers.js +18 -0
  110. package/dist/element/index.d.ts +1 -0
  111. package/dist/element/index.js +3 -0
  112. package/dist/feedback/DragOverlay.svelte +5 -3
  113. package/dist/feedback/DragOverlay.svelte.d.ts +2 -1
  114. package/dist/feedback/StatusMessage.svelte +20 -7
  115. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  116. package/dist/fermi-surface/FermiSurface.svelte +78 -165
  117. package/dist/fermi-surface/FermiSurface.svelte.d.ts +9 -20
  118. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  119. package/dist/fermi-surface/FermiSurfaceScene.svelte +93 -272
  120. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
  121. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  122. package/dist/fermi-surface/compute.js +14 -13
  123. package/dist/fermi-surface/export.js +4 -15
  124. package/dist/fermi-surface/index.d.ts +0 -1
  125. package/dist/fermi-surface/index.js +0 -1
  126. package/dist/fermi-surface/parse.d.ts +1 -1
  127. package/dist/fermi-surface/parse.js +84 -97
  128. package/dist/fermi-surface/types.d.ts +2 -2
  129. package/dist/heatmap-matrix/HeatmapMatrix.svelte +161 -185
  130. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +6 -5
  131. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +12 -9
  132. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
  133. package/dist/heatmap-matrix/index.d.ts +8 -2
  134. package/dist/icons.d.ts +4 -0
  135. package/dist/icons.js +4 -0
  136. package/dist/index.d.ts +1 -0
  137. package/dist/index.js +1 -0
  138. package/dist/io/ExportPane.svelte +170 -0
  139. package/dist/io/ExportPane.svelte.d.ts +17 -0
  140. package/dist/io/decompress.d.ts +2 -1
  141. package/dist/io/decompress.js +22 -36
  142. package/dist/io/export.d.ts +9 -1
  143. package/dist/io/export.js +37 -29
  144. package/dist/io/fetch.d.ts +2 -4
  145. package/dist/io/fetch.js +0 -11
  146. package/dist/io/file-drop.d.ts +7 -0
  147. package/dist/io/file-drop.js +13 -0
  148. package/dist/io/index.d.ts +1 -0
  149. package/dist/io/index.js +3 -0
  150. package/dist/io/is-binary.d.ts +9 -0
  151. package/dist/io/is-binary.js +45 -1
  152. package/dist/io/types.d.ts +13 -0
  153. package/dist/io/url-drop.js +13 -25
  154. package/dist/isosurface/Isosurface.svelte +17 -23
  155. package/dist/isosurface/IsosurfaceControls.svelte +37 -42
  156. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  157. package/dist/isosurface/parse-vaspwave.js +138 -0
  158. package/dist/isosurface/parse.js +50 -48
  159. package/dist/labels.d.ts +6 -2
  160. package/dist/labels.js +44 -14
  161. package/dist/layout/FullscreenButton.svelte +34 -0
  162. package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
  163. package/dist/layout/FullscreenToggle.svelte +12 -12
  164. package/dist/layout/InfoCard.svelte +7 -18
  165. package/dist/layout/InfoTag.svelte +1 -3
  166. package/dist/layout/NumberRangeInput.svelte +46 -0
  167. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  168. package/dist/layout/PropertyFilter.svelte +2 -6
  169. package/dist/layout/SettingsSection.svelte +21 -17
  170. package/dist/layout/SubpageGrid.svelte +3 -1
  171. package/dist/layout/ViewerChrome.svelte +115 -0
  172. package/dist/layout/ViewerChrome.svelte.d.ts +18 -0
  173. package/dist/layout/fullscreen.d.ts +4 -0
  174. package/dist/layout/fullscreen.js +3 -5
  175. package/dist/layout/fullscreen.svelte.d.ts +8 -0
  176. package/dist/layout/fullscreen.svelte.js +36 -0
  177. package/dist/layout/index.d.ts +4 -0
  178. package/dist/layout/index.js +4 -0
  179. package/dist/layout/json-tree/JsonNode.svelte +8 -11
  180. package/dist/layout/json-tree/JsonTree.svelte +53 -77
  181. package/dist/layout/json-tree/JsonValue.svelte +7 -15
  182. package/dist/layout/json-tree/utils.js +14 -23
  183. package/dist/math.d.ts +9 -3
  184. package/dist/math.js +37 -21
  185. package/dist/overlays/ContextMenu.svelte +4 -2
  186. package/dist/overlays/CopyButton.svelte +11 -5
  187. package/dist/overlays/DragControlTab.svelte +6 -1
  188. package/dist/overlays/DraggablePane.svelte +81 -26
  189. package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
  190. package/dist/overlays/GlassChip.svelte +30 -0
  191. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  192. package/dist/overlays/InfoPaneCards.svelte +11 -23
  193. package/dist/overlays/index.d.ts +11 -0
  194. package/dist/overlays/index.js +26 -0
  195. package/dist/overlays/portal.d.ts +2 -0
  196. package/dist/overlays/portal.js +14 -0
  197. package/dist/periodic-table/PeriodicTable.svelte +115 -146
  198. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  199. package/dist/periodic-table/PeriodicTableControls.svelte +11 -63
  200. package/dist/periodic-table/TableInset.svelte +9 -4
  201. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
  202. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  203. package/dist/phase-diagram/PhaseDiagramControls.svelte +73 -96
  204. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
  205. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
  206. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
  207. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +49 -134
  208. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
  209. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  210. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  211. package/dist/phase-diagram/build-diagram.js +3 -3
  212. package/dist/phase-diagram/colors.js +1 -1
  213. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  214. package/dist/phase-diagram/parse.d.ts +2 -1
  215. package/dist/phase-diagram/parse.js +15 -15
  216. package/dist/phase-diagram/svg-to-diagram.js +21 -15
  217. package/dist/phase-diagram/utils.js +2 -3
  218. package/dist/plot/bar/BarPlot.svelte +494 -692
  219. package/dist/plot/bar/BarPlot.svelte.d.ts +9 -15
  220. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  221. package/dist/plot/bar/BarPlotControls.svelte.d.ts +5 -7
  222. package/dist/plot/bar/SpacegroupBarPlot.svelte +31 -37
  223. package/dist/plot/bar/data.d.ts +5 -4
  224. package/dist/plot/bar/data.js +2 -1
  225. package/dist/plot/box/BoxPlot.svelte +361 -439
  226. package/dist/plot/box/BoxPlot.svelte.d.ts +6 -3
  227. package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
  228. package/dist/plot/box/Violin.svelte.d.ts +2 -1
  229. package/dist/plot/box/box-plot.d.ts +3 -2
  230. package/dist/plot/box/box-plot.js +6 -3
  231. package/dist/plot/box/kde.d.ts +2 -1
  232. package/dist/plot/box/kde.js +4 -4
  233. package/dist/plot/core/auto-place.d.ts +1 -1
  234. package/dist/plot/core/auto-place.js +5 -2
  235. package/dist/plot/core/axis-utils.d.ts +12 -7
  236. package/dist/plot/core/axis-utils.js +48 -48
  237. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  238. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  239. package/dist/plot/core/components/ColorBar.svelte +106 -111
  240. package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
  241. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  242. package/dist/plot/core/components/FillArea.svelte +10 -17
  243. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  244. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  245. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  246. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  247. package/dist/plot/core/components/Line.svelte +21 -11
  248. package/dist/plot/core/components/Line.svelte.d.ts +5 -2
  249. package/dist/plot/core/components/PlotAxis.svelte +42 -18
  250. package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
  251. package/dist/plot/core/components/PlotControls.svelte +65 -41
  252. package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
  253. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  254. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  255. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  256. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  257. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  258. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  259. package/dist/plot/core/components/ReferenceLine3D.svelte +56 -59
  260. package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
  261. package/dist/plot/core/components/ReferencePlane.svelte +9 -10
  262. package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
  263. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  264. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  265. package/dist/plot/core/components/index.d.ts +1 -0
  266. package/dist/plot/core/components/index.js +1 -0
  267. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  268. package/dist/plot/core/data-cleaning-signal.js +467 -0
  269. package/dist/plot/core/data-cleaning.d.ts +2 -42
  270. package/dist/plot/core/data-cleaning.js +29 -476
  271. package/dist/plot/core/data-transform.js +9 -5
  272. package/dist/plot/core/fill-utils.d.ts +7 -4
  273. package/dist/plot/core/fill-utils.js +34 -9
  274. package/dist/plot/core/index.d.ts +1 -0
  275. package/dist/plot/core/index.js +1 -0
  276. package/dist/plot/core/interactions.d.ts +5 -1
  277. package/dist/plot/core/interactions.js +14 -2
  278. package/dist/plot/core/layout.d.ts +3 -1
  279. package/dist/plot/core/layout.js +22 -13
  280. package/dist/plot/core/marginals.d.ts +170 -0
  281. package/dist/plot/core/marginals.js +436 -0
  282. package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
  283. package/dist/plot/core/pan-zoom.svelte.js +221 -0
  284. package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -0
  286. package/dist/plot/core/reference-line.d.ts +10 -10
  287. package/dist/plot/core/reference-line.js +7 -7
  288. package/dist/plot/core/scales.d.ts +40 -25
  289. package/dist/plot/core/scales.js +49 -21
  290. package/dist/plot/core/svg.d.ts +2 -1
  291. package/dist/plot/core/types/fills.d.ts +101 -0
  292. package/dist/plot/core/types/fills.js +15 -0
  293. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  294. package/dist/plot/core/types/plot-3d.js +4 -0
  295. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  296. package/dist/plot/core/types/reference-lines.js +9 -0
  297. package/dist/plot/core/types.d.ts +47 -331
  298. package/dist/plot/core/types.js +23 -20
  299. package/dist/plot/core/utils/hierarchy-chart.d.ts +51 -0
  300. package/dist/plot/core/utils/hierarchy-chart.js +179 -0
  301. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  302. package/dist/plot/core/utils/hierarchy-labels.js +99 -0
  303. package/dist/plot/core/utils/label-placement.d.ts +1 -1
  304. package/dist/plot/core/utils/label-placement.js +5 -5
  305. package/dist/plot/core/utils.d.ts +2 -1
  306. package/dist/plot/histogram/Histogram.svelte +373 -631
  307. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  308. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  309. package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
  310. package/dist/plot/histogram/histogram.d.ts +31 -0
  311. package/dist/plot/histogram/histogram.js +70 -0
  312. package/dist/plot/histogram/index.d.ts +1 -0
  313. package/dist/plot/histogram/index.js +1 -0
  314. package/dist/plot/index.d.ts +1 -0
  315. package/dist/plot/index.js +1 -0
  316. package/dist/plot/sankey/Sankey.svelte +79 -73
  317. package/dist/plot/sankey/Sankey.svelte.d.ts +3 -3
  318. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  319. package/dist/plot/sankey/sankey.js +3 -1
  320. package/dist/plot/scatter/BinnedScatterPlot.svelte +264 -112
  321. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +11 -4
  322. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  323. package/dist/plot/scatter/ScatterPlot.svelte +623 -821
  324. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +9 -15
  325. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  326. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  327. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  328. package/dist/plot/scatter/binned-scatter-types.d.ts +6 -12
  329. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  330. package/dist/plot/scatter/index.d.ts +1 -1
  331. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  332. package/dist/plot/scatter/scatter-data.js +8 -7
  333. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +40 -60
  334. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
  335. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +17 -15
  336. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
  337. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +232 -234
  338. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
  339. package/dist/plot/scatter-3d/Surface3D.svelte +9 -17
  340. package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
  341. package/dist/plot/sunburst/Sunburst.svelte +256 -338
  342. package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
  343. package/dist/plot/sunburst/index.d.ts +1 -1
  344. package/dist/plot/sunburst/index.js +2 -1
  345. package/dist/plot/sunburst/render.d.ts +2 -2
  346. package/dist/plot/sunburst/render.js +47 -22
  347. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  348. package/dist/plot/sunburst/sunburst.js +14 -4
  349. package/dist/plot/treemap/Treemap.svelte +907 -0
  350. package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
  351. package/dist/plot/treemap/index.d.ts +3 -0
  352. package/dist/plot/treemap/index.js +4 -0
  353. package/dist/plot/treemap/treemap.d.ts +26 -0
  354. package/dist/plot/treemap/treemap.js +99 -0
  355. package/dist/rdf/RdfPlot.svelte +22 -26
  356. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  357. package/dist/rdf/calc-rdf.js +4 -8
  358. package/dist/sanitize.js +14 -3
  359. package/dist/scene/SceneCamera.svelte +62 -0
  360. package/dist/scene/SceneCamera.svelte.d.ts +19 -0
  361. package/dist/scene/bind-renderer.svelte.d.ts +2 -0
  362. package/dist/scene/bind-renderer.svelte.js +22 -0
  363. package/dist/scene/index.d.ts +4 -0
  364. package/dist/scene/index.js +5 -0
  365. package/dist/scene/props.js +52 -0
  366. package/dist/scene/types.d.ts +26 -0
  367. package/dist/scene/types.js +1 -0
  368. package/dist/settings.d.ts +33 -11
  369. package/dist/settings.js +136 -51
  370. package/dist/spectral/Bands.svelte +231 -237
  371. package/dist/spectral/Bands.svelte.d.ts +3 -2
  372. package/dist/spectral/BandsAndDos.svelte +29 -29
  373. package/dist/spectral/BrillouinBandsDos.svelte +21 -29
  374. package/dist/spectral/Dos.svelte +75 -77
  375. package/dist/spectral/Dos.svelte.d.ts +2 -1
  376. package/dist/spectral/helpers.d.ts +9 -9
  377. package/dist/spectral/helpers.js +66 -70
  378. package/dist/state.svelte.d.ts +0 -7
  379. package/dist/state.svelte.js +5 -24
  380. package/dist/structure/Arrow.svelte +6 -21
  381. package/dist/structure/ArrowInstances.svelte +160 -0
  382. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  383. package/dist/structure/AtomLegend.svelte +115 -75
  384. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  385. package/dist/structure/Bond.svelte +31 -23
  386. package/dist/structure/CanvasTooltip.svelte +16 -3
  387. package/dist/structure/CellSelect.svelte +22 -29
  388. package/dist/structure/CellSelect.svelte.d.ts +2 -1
  389. package/dist/structure/Cylinder.svelte +24 -40
  390. package/dist/structure/InstancedAtoms.svelte +114 -0
  391. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  392. package/dist/structure/Lattice.svelte +85 -149
  393. package/dist/structure/SiteLabels.svelte +122 -0
  394. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  395. package/dist/structure/Structure.svelte +725 -735
  396. package/dist/structure/Structure.svelte.d.ts +8 -16
  397. package/dist/structure/StructureCarousel.svelte +630 -0
  398. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  399. package/dist/structure/StructureControls.svelte +298 -325
  400. package/dist/structure/StructureControls.svelte.d.ts +5 -3
  401. package/dist/structure/StructureExportPane.svelte +62 -168
  402. package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
  403. package/dist/structure/StructureInfoPane.svelte +77 -69
  404. package/dist/structure/StructureInfoPane.svelte.d.ts +6 -6
  405. package/dist/structure/StructureScene.svelte +758 -600
  406. package/dist/structure/StructureScene.svelte.d.ts +24 -20
  407. package/dist/structure/StructureViewport.svelte +386 -0
  408. package/dist/structure/StructureViewport.svelte.d.ts +63 -0
  409. package/dist/structure/atom-label-placement.d.ts +18 -0
  410. package/dist/structure/atom-label-placement.js +115 -0
  411. package/dist/structure/atom-properties.d.ts +3 -1
  412. package/dist/structure/atom-properties.js +115 -54
  413. package/dist/structure/bond-order-perception.js +2 -4
  414. package/dist/structure/bonding.d.ts +12 -2
  415. package/dist/structure/bonding.js +172 -73
  416. package/dist/structure/edit-history.d.ts +6 -0
  417. package/dist/structure/edit-history.js +27 -0
  418. package/dist/structure/export.d.ts +25 -4
  419. package/dist/structure/export.js +103 -153
  420. package/dist/structure/format-detect.d.ts +1 -0
  421. package/dist/structure/format-detect.js +22 -0
  422. package/dist/structure/geometry.d.ts +9 -0
  423. package/dist/structure/geometry.js +27 -0
  424. package/dist/structure/index.d.ts +18 -1
  425. package/dist/structure/index.js +15 -2
  426. package/dist/structure/measure.d.ts +1 -1
  427. package/dist/structure/measure.js +6 -12
  428. package/dist/structure/parse.d.ts +5 -3
  429. package/dist/structure/parse.js +551 -567
  430. package/dist/structure/partial-occupancy.d.ts +0 -1
  431. package/dist/structure/partial-occupancy.js +5 -3
  432. package/dist/structure/pbc.d.ts +1 -1
  433. package/dist/structure/pbc.js +204 -51
  434. package/dist/structure/polyhedra.d.ts +40 -0
  435. package/dist/structure/polyhedra.js +587 -0
  436. package/dist/structure/site.d.ts +4 -0
  437. package/dist/structure/site.js +1 -0
  438. package/dist/structure/supercell.d.ts +1 -2
  439. package/dist/structure/supercell.js +10 -15
  440. package/dist/structure/validation.js +5 -6
  441. package/dist/symmetry/SymmetryElementControls.svelte +69 -0
  442. package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
  443. package/dist/symmetry/SymmetryElements.svelte +350 -0
  444. package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
  445. package/dist/symmetry/SymmetryStats.svelte +142 -49
  446. package/dist/symmetry/WyckoffTable.svelte +58 -16
  447. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
  448. package/dist/symmetry/cell-transform.js +8 -14
  449. package/dist/symmetry/index.d.ts +15 -4
  450. package/dist/symmetry/index.js +308 -81
  451. package/dist/symmetry/spacegroups.d.ts +5 -1
  452. package/dist/symmetry/spacegroups.js +18 -3
  453. package/dist/symmetry/symmetry-elements.d.ts +33 -0
  454. package/dist/symmetry/symmetry-elements.js +521 -0
  455. package/dist/symmetry/wyckoff-db.d.ts +9 -0
  456. package/dist/symmetry/wyckoff-db.js +87 -0
  457. package/dist/table/HeatmapTable.svelte +1104 -378
  458. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  459. package/dist/table/ToggleMenu.svelte +5 -12
  460. package/dist/table/index.d.ts +21 -6
  461. package/dist/table/index.js +34 -21
  462. package/dist/theme/ThemeControl.svelte +16 -8
  463. package/dist/theme/index.d.ts +1 -5
  464. package/dist/theme/index.js +4 -10
  465. package/dist/theme/themes.mjs +14 -7
  466. package/dist/tooltip/KCoords.svelte +4 -1
  467. package/dist/tooltip/TooltipContent.svelte +2 -5
  468. package/dist/trajectory/Trajectory.svelte +556 -352
  469. package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
  470. package/dist/trajectory/TrajectoryError.svelte +11 -8
  471. package/dist/trajectory/TrajectoryExportPane.svelte +28 -54
  472. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
  473. package/dist/trajectory/TrajectoryInfoPane.svelte +88 -99
  474. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
  475. package/dist/trajectory/constants.js +6 -2
  476. package/dist/trajectory/extract.js +73 -71
  477. package/dist/trajectory/format-detect.d.ts +0 -1
  478. package/dist/trajectory/format-detect.js +13 -17
  479. package/dist/trajectory/frame-reader.d.ts +2 -1
  480. package/dist/trajectory/frame-reader.js +74 -136
  481. package/dist/trajectory/helpers.d.ts +12 -2
  482. package/dist/trajectory/helpers.js +68 -37
  483. package/dist/trajectory/index.d.ts +1 -0
  484. package/dist/trajectory/index.js +3 -0
  485. package/dist/trajectory/parse/ase.d.ts +9 -1
  486. package/dist/trajectory/parse/ase.js +47 -32
  487. package/dist/trajectory/parse/diagnostics.d.ts +3 -0
  488. package/dist/trajectory/parse/diagnostics.js +14 -0
  489. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  490. package/dist/trajectory/parse/h5-utils.js +109 -0
  491. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  492. package/dist/trajectory/parse/hdf5.js +116 -106
  493. package/dist/trajectory/parse/index.d.ts +3 -4
  494. package/dist/trajectory/parse/index.js +68 -119
  495. package/dist/trajectory/parse/lammps.d.ts +0 -2
  496. package/dist/trajectory/parse/lammps.js +14 -16
  497. package/dist/trajectory/parse/pymatgen.d.ts +2 -0
  498. package/dist/trajectory/parse/pymatgen.js +74 -0
  499. package/dist/trajectory/parse/vasp.js +13 -9
  500. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  501. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  502. package/dist/trajectory/parse/vaspout-h5.d.ts +5 -0
  503. package/dist/trajectory/parse/vaspout-h5.js +284 -0
  504. package/dist/trajectory/parse/xyz.d.ts +9 -21
  505. package/dist/trajectory/parse/xyz.js +38 -39
  506. package/dist/trajectory/plotting.d.ts +8 -10
  507. package/dist/trajectory/plotting.js +102 -127
  508. package/dist/utils.d.ts +4 -0
  509. package/dist/utils.js +8 -1
  510. package/dist/xrd/XrdPlot.svelte +56 -85
  511. package/dist/xrd/broadening.d.ts +2 -1
  512. package/dist/xrd/broadening.js +2 -1
  513. package/dist/xrd/calc-xrd.js +8 -15
  514. package/dist/xrd/index.d.ts +2 -2
  515. package/dist/xrd/parse.d.ts +0 -1
  516. package/dist/xrd/parse.js +56 -73
  517. package/package.json +77 -36
  518. package/dist/api/mp.d.ts +0 -6
  519. package/dist/api/mp.js +0 -22
  520. package/dist/element/data.json +0 -11864
  521. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  522. package/dist/fermi-surface/marching-cubes.js +0 -2
  523. package/dist/plot/core/hover-lock.svelte.d.ts +0 -14
  524. package/dist/plot/core/hover-lock.svelte.js +0 -45
  525. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  526. package/dist/structure/label-placement.d.ts +0 -14
  527. package/dist/structure/label-placement.js +0 -72
package/dist/xrd/parse.js CHANGED
@@ -20,13 +20,24 @@ const parse_number_list = (text) => text
20
20
  .split(/\s+/)
21
21
  .map(parseFloat)
22
22
  .filter((val) => !isNaN(val));
23
+ // Return the first parseable number from the text content of any of `tags`
24
+ // (in order) that also passes the optional `ok` predicate. Null when none match.
25
+ const query_first_number = (doc, tags, ok = () => true) => {
26
+ for (const tag of tags) {
27
+ const text = doc.querySelector(tag)?.textContent?.trim();
28
+ const val = text ? Number(text) : NaN;
29
+ if (!isNaN(val) && ok(val))
30
+ return val;
31
+ }
32
+ return null;
33
+ };
23
34
  // Extract numeric value from header line matching "KEY=VALUE" or "KEY VALUE" pattern.
24
35
  // Returns null if not found or not a valid number.
25
36
  function extract_header_value(lines, key_pattern) {
26
37
  for (const line of lines) {
27
38
  const match = line.match(key_pattern);
28
39
  if (match?.[1]) {
29
- const val = parseFloat(match[1]);
40
+ const val = Number(match[1]);
30
41
  if (!isNaN(val))
31
42
  return val;
32
43
  }
@@ -53,17 +64,17 @@ function normalize_and_subsample(x_values, y_values) {
53
64
  }
54
65
  // Subsample data while preserving peaks (local maxima).
55
66
  // 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;
67
+ function subsample_preserve_peaks(x_vals, y_vals, target_points) {
68
+ const num_points = x_vals.length;
58
69
  if (num_points <= target_points)
59
- return { x: x_values, y: y_values };
70
+ return { x: x_vals, y: y_vals };
60
71
  // Find peaks (local maxima with significant height)
61
72
  const peaks = [];
62
- const threshold = Math.max(...y_values) * 0.05; // 5% of max as significance threshold
73
+ const threshold = Math.max(...y_vals) * 0.05; // 5% of max as significance threshold
63
74
  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) {
75
+ if (y_vals[idx] > y_vals[idx - 1] &&
76
+ y_vals[idx] > y_vals[idx + 1] &&
77
+ y_vals[idx] > threshold) {
67
78
  peaks.push(idx);
68
79
  }
69
80
  }
@@ -72,7 +83,7 @@ function subsample_preserve_peaks(x_values, y_values, target_points) {
72
83
  const uniform_slots = target_points - peak_slots;
73
84
  // Select top peaks by height
74
85
  const top_peaks = peaks
75
- .map((idx) => ({ idx, y: y_values[idx] }))
86
+ .map((idx) => ({ idx, y: y_vals[idx] }))
76
87
  .sort((a, b) => b.y - a.y)
77
88
  .slice(0, peak_slots)
78
89
  .map((peak) => peak.idx);
@@ -90,8 +101,8 @@ function subsample_preserve_peaks(x_values, y_values, target_points) {
90
101
  // Merge and sort all selected indices
91
102
  const selected = [...new Set([...uniform_indices, ...top_peaks])].sort((a, b) => a - b);
92
103
  return {
93
- x: selected.map((idx) => x_values[idx]),
94
- y: selected.map((idx) => y_values[idx]),
104
+ x: selected.map((idx) => x_vals[idx]),
105
+ y: selected.map((idx) => y_vals[idx]),
95
106
  };
96
107
  }
97
108
  // Parse a two-column ASCII file containing XRD data (2θ, intensity).
@@ -110,8 +121,8 @@ export function parse_xy_file(content) {
110
121
  const parts = trimmed.split(/[\s,]+/).filter(Boolean);
111
122
  if (parts.length < 2)
112
123
  continue;
113
- const two_theta = parseFloat(parts[0]);
114
- const intensity = parseFloat(parts[1]);
124
+ const two_theta = Number(parts[0]);
125
+ const intensity = Number(parts[1]);
115
126
  if (!isNaN(two_theta) && !isNaN(intensity)) {
116
127
  x_values.push(two_theta);
117
128
  y_values.push(intensity);
@@ -122,24 +133,17 @@ export function parse_xy_file(content) {
122
133
  const normalized = normalize_and_subsample(x_values, y_values);
123
134
  return { x: normalized.x, y: normalized.y };
124
135
  }
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
136
  // Parse a Rigaku .ras file (ASCII format with structured header).
133
137
  // Format: *RAS_HEADER_START ... *RAS_HEADER_END followed by *RAS_INT_START ... *RAS_INT_END
134
138
  // Data can be single-column (intensity only) or multi-column (2-theta, intensity, [error])
135
139
  export function parse_ras_file(content) {
136
140
  const lines = content.split(/\r?\n/);
137
141
  // 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) ??
142
+ const header_start = extract_header_value(lines, /\*MEAS_SCAN_START\s*=\s*(?<value>[\d.+-]+)/i) ??
143
+ extract_header_value(lines, /\*SCAN_START\s*=\s*(?<value>[\d.+-]+)/i) ??
140
144
  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) ??
145
+ const header_step = extract_header_value(lines, /\*MEAS_SCAN_STEP\s*=\s*(?<value>[\d.+-]+)/i) ??
146
+ extract_header_value(lines, /\*SCAN_STEP\s*=\s*(?<value>[\d.+-]+)/i) ??
143
147
  DEFAULT_STEP_SIZE;
144
148
  // Find intensity data section between *RAS_INT_START and *RAS_INT_END
145
149
  // Also handle older format with *RAS_DATA_START
@@ -204,11 +208,11 @@ export function parse_ras_file(content) {
204
208
  export function parse_uxd_file(content) {
205
209
  const lines = content.split(/\r?\n/);
206
210
  // 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) ??
211
+ const start = extract_header_value(lines, /_2THETA_?START\s*=?\s*(?<value>[\d.+-]+)/i) ??
212
+ extract_header_value(lines, /_START\s*=?\s*(?<value>[\d.+-]+)/i) ??
209
213
  0;
210
- const step = extract_header_value(lines, /_STEP_?SIZE\s*=?\s*([\d.+-]+)/i) ??
211
- extract_header_value(lines, /_STEPWIDTH\s*=?\s*([\d.+-]+)/i) ??
214
+ const step = extract_header_value(lines, /_STEP_?SIZE\s*=?\s*(?<value>[\d.+-]+)/i) ??
215
+ extract_header_value(lines, /_STEPWIDTH\s*=?\s*(?<value>[\d.+-]+)/i) ??
212
216
  DEFAULT_STEP_SIZE;
213
217
  // Find intensity data after _COUNTS marker
214
218
  let in_data_section = false;
@@ -247,13 +251,13 @@ export function parse_gsas_file(content) {
247
251
  let bin_type = `CONST`; // CONST, RALF, or others
248
252
  let found_bank = false;
249
253
  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);
254
+ const bank_match = /BANK\s+\d+\s+(?<npts>\d+)\s+\d+\s+(?<bin_type>\w+)\s+(?<bcoef1>[\d.+-]+)\s+(?<bcoef2>[\d.+-]+)/i.exec(line);
251
255
  if (bank_match) {
252
256
  bin_type = bank_match[2].toUpperCase();
253
257
  // For CONST type: BCOEF1 is start*100 (centidegrees), BCOEF2 is step*100
254
258
  if (bin_type === `CONST`) {
255
- start = parseFloat(bank_match[3]) / 100; // Convert centidegrees to degrees
256
- step = parseFloat(bank_match[4]) / 100;
259
+ start = Number(bank_match[3]) / 100; // Convert centidegrees to degrees
260
+ step = Number(bank_match[4]) / 100;
257
261
  }
258
262
  else if (bin_type !== `FXYE`) {
259
263
  // Other bin types like RALF (time-of-flight) are not fully supported
@@ -335,15 +339,15 @@ function parse_bruker_raw_v1(view, bytes) {
335
339
  // V1 has ASCII header with scan parameters followed by binary data
336
340
  const header_text = String.fromCharCode(...bytes.slice(0, 512));
337
341
  // 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;
342
+ const start_match = /START\s*=\s*(?<value>[\d.+-]+)/i.exec(header_text);
343
+ const step_match = /STEP\s*=\s*(?<value>[\d.+-]+)/i.exec(header_text);
344
+ const count_match = /(?:COUNT|POINTS|NPTS)\s*=\s*(?<value>\d+)/i.exec(header_text);
345
+ const start = start_match ? Number(start_match[1]) : 0;
346
+ const step = step_match ? Number(step_match[1]) : DEFAULT_STEP_SIZE;
343
347
  // Find where binary data starts (after header)
344
348
  let data_offset = 512;
345
349
  if (count_match) {
346
- const expected_count = parseInt(count_match[1], 10);
350
+ const expected_count = Math.trunc(Number(count_match[1]));
347
351
  // Binary data is typically 4 bytes per intensity (float32)
348
352
  data_offset = bytes.length - expected_count * 4;
349
353
  }
@@ -399,14 +403,14 @@ function parse_rigaku_raw_file(data) {
399
403
  const bytes = new Uint8Array(data);
400
404
  // Try to find ASCII header section with scan parameters
401
405
  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);
406
+ const start_match = /(?:START|2THETA_START|SCAN_START)\s*[:=]?\s*(?<value>[\d.+-]+)/i.exec(header_text);
407
+ const step_match = /(?:STEP|STEP_SIZE|SCAN_STEP)\s*[:=]?\s*(?<value>[\d.+-]+)/i.exec(header_text);
408
+ const count_match = /(?:COUNT|POINTS|NPTS|STEPS)\s*[:=]?\s*(?<value>\d+)/i.exec(header_text);
405
409
  if (!start_match && !step_match && !count_match)
406
410
  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;
411
+ const start = start_match ? Number(start_match[1]) : 0;
412
+ const step = step_match ? Number(step_match[1]) : DEFAULT_STEP_SIZE;
413
+ const expected_count = count_match ? Math.trunc(Number(count_match[1])) : 0;
410
414
  // Find binary data section
411
415
  // Rigaku typically stores intensities as 32-bit floats or integers
412
416
  let data_offset = 0;
@@ -538,7 +542,7 @@ function extract_scan_parameters_xml(doc) {
538
542
  const intensity_elements = doc.querySelectorAll(`I, Count`);
539
543
  if (intensity_elements.length > 0) {
540
544
  intensities = Array.from(intensity_elements)
541
- .map((el) => parseFloat(el.textContent || ``))
545
+ .map((el) => Number(el.textContent?.trim() || NaN))
542
546
  .filter((val) => !isNaN(val));
543
547
  }
544
548
  }
@@ -559,9 +563,9 @@ function extract_scan_parameters_xml(doc) {
559
563
  const parts = text.split(`,`);
560
564
  // Need at least 5 columns: time, flag, 2Theta, Theta/Omega, Intensity
561
565
  if (parts.length >= 5) {
562
- const two_theta = parseFloat(parts[2]);
566
+ const two_theta = Number(parts[2]);
563
567
  // Intensity is always the last column
564
- const intensity = parseFloat(parts[parts.length - 1]);
568
+ const intensity = Number(parts[parts.length - 1]);
565
569
  if (!isNaN(two_theta) && !isNaN(intensity)) {
566
570
  two_theta_values.push(two_theta);
567
571
  intensities.push(intensity);
@@ -582,9 +586,7 @@ function extract_scan_parameters_xml(doc) {
582
586
  if (!intensities?.length)
583
587
  return null;
584
588
  // 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
589
+ // Try multiple possible tag names, returning the first that parses (and passes `ok`)
588
590
  const start_candidates = [
589
591
  `Start`,
590
592
  `TwoThetaStart`,
@@ -593,17 +595,6 @@ function extract_scan_parameters_xml(doc) {
593
595
  `ScanAxisBeginPosition`,
594
596
  `Begin`,
595
597
  ];
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
598
  const step_candidates = [
608
599
  `Step`,
609
600
  `StepSize`,
@@ -612,23 +603,15 @@ function extract_scan_parameters_xml(doc) {
612
603
  `ScanAxisIncrement`,
613
604
  `StepWidth`,
614
605
  ];
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
- }
606
+ const start_angle = query_first_number(doc, start_candidates) ?? 0;
607
+ let step_size = query_first_number(doc, step_candidates, (val) => val > 0) ?? DEFAULT_STEP_SIZE;
625
608
  // Alternative: calculate step from start/end and count
626
609
  if (step_size === DEFAULT_STEP_SIZE) {
627
610
  const end_candidates = [`Stop`, `TwoThetaEnd`, `EndPosition`, `2ThetaEnd`, `End`];
628
611
  for (const tag of end_candidates) {
629
612
  const el = doc.querySelector(tag);
630
613
  if (el?.textContent) {
631
- const end_val = parseFloat(el.textContent);
614
+ const end_val = Number(el.textContent);
632
615
  if (!isNaN(end_val) && end_val > start_angle && intensities.length > 1) {
633
616
  step_size = (end_val - start_angle) / (intensities.length - 1);
634
617
  break;
@@ -660,8 +643,8 @@ export function parse_xrdml_file(content) {
660
643
  const end_el = two_theta_positions.querySelector(`endPosition`);
661
644
  if (!start_el?.textContent || !end_el?.textContent)
662
645
  return null;
663
- const start_angle = parseFloat(start_el.textContent);
664
- const end_angle = parseFloat(end_el.textContent);
646
+ const start_angle = Number(start_el.textContent);
647
+ const end_angle = Number(end_el.textContent);
665
648
  if (isNaN(start_angle) || isNaN(end_angle))
666
649
  return null;
667
650
  // Extract intensities
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterviz",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Interactive visualizations for materials science: periodic tables, 3D structures, MD trajectories, heatmaps, scatter plots.",
5
5
  "keywords": [
6
6
  "chemistry",
@@ -19,6 +19,9 @@
19
19
  "dist"
20
20
  ],
21
21
  "type": "module",
22
+ "sideEffects": [
23
+ "**/*.css"
24
+ ],
22
25
  "exports": {
23
26
  ".": {
24
27
  "types": "./dist/index.d.ts",
@@ -30,7 +33,6 @@
30
33
  "default": "./dist/element/data.js"
31
34
  },
32
35
  "./app.css": {
33
- "types": "./dist/app.css.d.ts",
34
36
  "default": "./dist/app.css"
35
37
  },
36
38
  "./brillouin": {
@@ -109,10 +111,18 @@
109
111
  "types": "./dist/plot/index.d.ts",
110
112
  "default": "./dist/plot/index.js"
111
113
  },
114
+ "./plot/*": {
115
+ "types": "./dist/plot/*/index.d.ts",
116
+ "default": "./dist/plot/*/index.js"
117
+ },
112
118
  "./rdf": {
113
119
  "types": "./dist/rdf/index.d.ts",
114
120
  "default": "./dist/rdf/index.js"
115
121
  },
122
+ "./scene": {
123
+ "types": "./dist/scene/index.d.ts",
124
+ "default": "./dist/scene/index.js"
125
+ },
116
126
  "./spectral": {
117
127
  "types": "./dist/spectral/index.d.ts",
118
128
  "default": "./dist/spectral/index.js"
@@ -138,7 +148,6 @@
138
148
  "default": "./dist/theme/index.js"
139
149
  },
140
150
  "./theme/themes": {
141
- "types": "./dist/theme/themes.d.ts",
142
151
  "default": "./dist/theme/themes.mjs"
143
152
  },
144
153
  "./tooltip": {
@@ -168,15 +177,16 @@
168
177
  },
169
178
  "scripts": {
170
179
  "test": "vp test --run && playwright test",
171
- "knip": "knip --include dependencies,devDependencies",
180
+ "knip": "knip --include dependencies,exports,types,nsExports",
181
+ "publint": "publint",
172
182
  "package-dist-assets": "node scripts/package-dist-assets.ts",
173
183
  "package:dist": "svelte-package && pnpm run package-dist-assets",
174
184
  "prepare": "svelte-kit sync && pnpm run package:dist",
175
185
  "prepublishOnly": "pnpm run package:dist"
176
186
  },
177
187
  "dependencies": {
178
- "@spglib/moyo-wasm": "^0.10.0",
179
- "@sveltejs/kit": "2.63.0",
188
+ "@spglib/moyo-wasm": "^0.14.0",
189
+ "@sveltejs/kit": "2.69.2",
180
190
  "@threlte/core": "^8.5.16",
181
191
  "@threlte/extras": "^9.21.0",
182
192
  "d3-array": "^3.2.4",
@@ -189,19 +199,19 @@
189
199
  "d3-scale-chromatic": "^3.1.0",
190
200
  "d3-shape": "^3.2.0",
191
201
  "d3-time-format": "^4.1.0",
192
- "dompurify": "3.4.8",
202
+ "dompurify": "3.4.7",
193
203
  "fflate": "^0.8.3",
194
- "h5wasm": "^0.10.2",
195
- "js-yaml": "^4.2.0",
196
- "svelte-multiselect": "^11.7.1",
197
- "three": "^0.184.0"
204
+ "h5wasm": "^0.10.3",
205
+ "js-yaml": "^5.2.1",
206
+ "svelte-multiselect": "^11.8.0",
207
+ "three": "^0.185.1"
198
208
  },
199
209
  "devDependencies": {
200
210
  "@janosh/vite-config": "github:janosh/dotfiles",
201
- "@playwright/test": "^1.60.0",
211
+ "@playwright/test": "^1.61.1",
202
212
  "@sveltejs/adapter-static": "3.0.10",
203
213
  "@sveltejs/package": "^2.5.8",
204
- "@sveltejs/vite-plugin-svelte": "^7.1.2",
214
+ "@sveltejs/vite-plugin-svelte": "^7.2.0",
205
215
  "@types/d3-array": "^3.2.2",
206
216
  "@types/d3-color": "^3.1.3",
207
217
  "@types/d3-format": "^3.0.4",
@@ -212,23 +222,21 @@
212
222
  "@types/d3-scale-chromatic": "^3.1.0",
213
223
  "@types/d3-shape": "^3.1.8",
214
224
  "@types/d3-time-format": "^4.0.3",
215
- "@types/js-yaml": "^4.0.9",
216
- "@types/node": "^25.9.1",
217
- "@types/three": "^0.184.1",
218
- "@typescript/native-preview": "7.0.0-dev.20260605.1",
219
- "@vitest/coverage-v8": "4.1.8",
220
- "@wooorm/starry-night": "^3.9.0",
221
- "happy-dom": "^20.10.1",
222
- "knip": "^6.16.0",
225
+ "@types/three": "^0.185.1",
226
+ "@vitest/coverage-v8": "4.1.10",
227
+ "@wooorm/starry-night": "^3.10.0",
228
+ "happy-dom": "^20.10.6",
229
+ "knip": "^6.25.0",
223
230
  "mdsvex": "^0.12.7",
231
+ "publint": "^0.3.21",
224
232
  "rehype-katex": "^7.0.1",
225
233
  "remark-math": "3.0.1",
226
- "svelte": "^5.56.2",
227
- "svelte-check-rs": "0.9.20",
228
- "typescript": "6.0.3",
229
- "vite": "^8.0.16",
230
- "vite-plus": "latest",
231
- "vitest": "4.1.8"
234
+ "svelte": "^5.56.4",
235
+ "svelte-check": "^4.7.2",
236
+ "typescript": "^6.0.3",
237
+ "vite": "^8.1.4",
238
+ "vite-plus": "^0.2.4",
239
+ "vitest": "4.1.10"
232
240
  },
233
241
  "peerDependencies": {
234
242
  "svelte": "^5.0.0"
@@ -238,15 +246,48 @@
238
246
  },
239
247
  "packageManager": "pnpm@11.5.0",
240
248
  "knip": {
241
- "entry": [
242
- "svelte.config.ts"
243
- ],
244
- "ignore": [
245
- "extensions/**"
246
- ],
247
249
  "ignoreDependencies": [
248
- "@typescript/native-preview",
249
- "svelte-check-rs"
250
- ]
250
+ "svelte-check"
251
+ ],
252
+ "workspaces": {
253
+ ".": {
254
+ "entry": [
255
+ "svelte.config.ts",
256
+ "src/site/**/*.{js,ts,svelte}"
257
+ ],
258
+ "paths": {
259
+ "$lib": [
260
+ "./src/lib"
261
+ ],
262
+ "$lib/*": [
263
+ "./src/lib/*"
264
+ ],
265
+ "$site": [
266
+ "./src/site"
267
+ ],
268
+ "$site/*": [
269
+ "./src/site/*"
270
+ ]
271
+ },
272
+ "ignore": [
273
+ "extensions/anywidget/**",
274
+ "extensions/dash/**"
275
+ ]
276
+ },
277
+ "extensions/vscode": {
278
+ "entry": [
279
+ "src/extension.ts",
280
+ "src/webview/main.ts"
281
+ ],
282
+ "paths": {
283
+ "$lib": [
284
+ "../../src/lib"
285
+ ],
286
+ "$lib/*": [
287
+ "../../src/lib/*"
288
+ ]
289
+ }
290
+ }
291
+ }
251
292
  }
252
293
  }
package/dist/api/mp.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export declare const mp_bucket = "https://materialsproject-build.s3.amazonaws.com/collections/2022-10-28";
2
- export declare function fetch_material_data<T extends Record<string, unknown>>(material_id: string, bucket?: string): Promise<{
3
- summary: T | null;
4
- similarity: T | null;
5
- robocrys: T | null;
6
- }>;
package/dist/api/mp.js DELETED
@@ -1,22 +0,0 @@
1
- import { fetch_zipped } from '../io/fetch';
2
- // Materials Project S3 bucket for pre-computed data (may be outdated)
3
- export const mp_bucket = `https://materialsproject-build.s3.amazonaws.com/collections/2022-10-28`;
4
- // Fetch all material data in parallel
5
- export async function fetch_material_data(material_id, bucket = mp_bucket) {
6
- try {
7
- const results = await Promise.allSettled([
8
- fetch_zipped(`${bucket}/summary/${material_id}.json.gz`),
9
- fetch_zipped(`${bucket}/similarity/${material_id}.json.gz`),
10
- fetch_zipped(`${bucket}/robocrys/${material_id}.json.gz`),
11
- ]);
12
- return {
13
- summary: results[0].status === `fulfilled` ? results[0].value : null,
14
- similarity: results[1].status === `fulfilled` ? results[1].value : null,
15
- robocrys: results[2].status === `fulfilled` ? results[2].value : null,
16
- };
17
- }
18
- catch (err) {
19
- console.error(`Failed to fetch material data:`, err);
20
- return { summary: null, similarity: null, robocrys: null };
21
- }
22
- }