matterviz 0.3.7 → 0.4.1

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 (486) hide show
  1. package/dist/Icon.svelte +7 -4
  2. package/dist/MillerIndexInput.svelte +1 -1
  3. package/dist/api/optimade.js +32 -26
  4. package/dist/app.css +0 -3
  5. package/dist/brillouin/BrillouinZone.svelte +76 -148
  6. package/dist/brillouin/BrillouinZone.svelte.d.ts +6 -14
  7. package/dist/brillouin/BrillouinZoneExportPane.svelte +43 -96
  8. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneInfoPane.svelte +9 -32
  10. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
  11. package/dist/brillouin/BrillouinZoneScene.svelte +97 -205
  12. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +4 -23
  13. package/dist/brillouin/BrillouinZoneTooltip.svelte +16 -25
  14. package/dist/brillouin/ReciprocalVectors.svelte +39 -0
  15. package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
  16. package/dist/brillouin/compute.d.ts +2 -0
  17. package/dist/brillouin/compute.js +89 -90
  18. package/dist/brillouin/geometry.d.ts +8 -0
  19. package/dist/brillouin/geometry.js +57 -0
  20. package/dist/brillouin/index.d.ts +2 -0
  21. package/dist/brillouin/index.js +2 -0
  22. package/dist/brillouin/types.d.ts +2 -2
  23. package/dist/chempot-diagram/ChemPotDiagram.svelte +14 -13
  24. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
  25. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +109 -203
  26. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
  27. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +180 -470
  28. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
  29. package/dist/chempot-diagram/async-compute.svelte.js +3 -1
  30. package/dist/chempot-diagram/chempot-worker.js +2 -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 +4 -4
  34. package/dist/chempot-diagram/compute.js +20 -20
  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.js +8 -7
  45. package/dist/composition/FormulaFilter.svelte +18 -11
  46. package/dist/composition/PieChart.svelte +11 -10
  47. package/dist/composition/chem-sys.d.ts +8 -0
  48. package/dist/composition/chem-sys.js +86 -0
  49. package/dist/composition/format.js +7 -4
  50. package/dist/composition/index.d.ts +1 -0
  51. package/dist/composition/index.js +1 -0
  52. package/dist/composition/parse.d.ts +0 -1
  53. package/dist/composition/parse.js +41 -31
  54. package/dist/controls.d.ts +1 -0
  55. package/dist/controls.js +0 -1
  56. package/dist/convex-hull/ConvexHull.svelte +8 -10
  57. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
  58. package/dist/convex-hull/ConvexHull2D.svelte +106 -185
  59. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  60. package/dist/convex-hull/ConvexHull3D.svelte +179 -683
  61. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  62. package/dist/convex-hull/ConvexHull4D.svelte +183 -687
  63. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  64. package/dist/convex-hull/ConvexHullChrome.svelte +268 -0
  65. package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
  66. package/dist/convex-hull/ConvexHullControls.svelte +88 -7
  67. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
  68. package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
  69. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
  70. package/dist/convex-hull/ConvexHullStats.svelte +36 -175
  71. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
  72. package/dist/convex-hull/ConvexHullTooltip.svelte +11 -2
  73. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
  74. package/dist/convex-hull/GasPressureControls.svelte +4 -4
  75. package/dist/convex-hull/TemperatureSlider.svelte +2 -2
  76. package/dist/convex-hull/barycentric-coords.d.ts +2 -4
  77. package/dist/convex-hull/barycentric-coords.js +6 -33
  78. package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
  79. package/dist/convex-hull/canvas-interactions.svelte.js +278 -0
  80. package/dist/convex-hull/demo-temperature.d.ts +1 -1
  81. package/dist/convex-hull/demo-temperature.js +20 -22
  82. package/dist/convex-hull/gas-thermodynamics.d.ts +2 -2
  83. package/dist/convex-hull/gas-thermodynamics.js +22 -30
  84. package/dist/convex-hull/helpers.d.ts +42 -7
  85. package/dist/convex-hull/helpers.js +171 -78
  86. package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
  87. package/dist/convex-hull/hull-state.svelte.js +124 -0
  88. package/dist/convex-hull/index.d.ts +10 -8
  89. package/dist/convex-hull/index.js +7 -2
  90. package/dist/convex-hull/thermodynamics.js +136 -960
  91. package/dist/convex-hull/types.d.ts +13 -5
  92. package/dist/convex-hull/types.js +12 -0
  93. package/dist/coordination/CoordinationBarPlot.svelte +27 -34
  94. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  95. package/dist/element/BohrAtom.svelte +2 -1
  96. package/dist/element/index.d.ts +4 -0
  97. package/dist/element/index.js +18 -0
  98. package/dist/feedback/DragOverlay.svelte +3 -1
  99. package/dist/feedback/DragOverlay.svelte.d.ts +1 -0
  100. package/dist/feedback/StatusMessage.svelte +13 -3
  101. package/dist/fermi-surface/FermiSlice.svelte +13 -5
  102. package/dist/fermi-surface/FermiSurface.svelte +78 -151
  103. package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -14
  104. package/dist/fermi-surface/FermiSurfaceControls.svelte +1 -1
  105. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  106. package/dist/fermi-surface/FermiSurfaceScene.svelte +72 -221
  107. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
  108. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +8 -34
  109. package/dist/fermi-surface/compute.js +67 -66
  110. package/dist/fermi-surface/export.js +6 -16
  111. package/dist/fermi-surface/index.d.ts +0 -1
  112. package/dist/fermi-surface/index.js +0 -1
  113. package/dist/fermi-surface/parse.d.ts +1 -1
  114. package/dist/fermi-surface/parse.js +71 -79
  115. package/dist/fermi-surface/types.d.ts +3 -2
  116. package/dist/heatmap-matrix/HeatmapMatrix.svelte +69 -52
  117. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +4 -3
  118. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +3 -2
  119. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
  120. package/dist/heatmap-matrix/index.d.ts +3 -2
  121. package/dist/heatmap-matrix/index.js +1 -1
  122. package/dist/index.d.ts +1 -0
  123. package/dist/index.js +1 -0
  124. package/dist/io/ExportPane.svelte +166 -0
  125. package/dist/io/ExportPane.svelte.d.ts +17 -0
  126. package/dist/io/decompress.js +5 -4
  127. package/dist/io/export.d.ts +9 -5
  128. package/dist/io/export.js +77 -51
  129. package/dist/io/fetch.d.ts +2 -1
  130. package/dist/io/fetch.js +5 -1
  131. package/dist/io/file-drop.d.ts +8 -1
  132. package/dist/io/file-drop.js +48 -36
  133. package/dist/io/index.d.ts +2 -0
  134. package/dist/io/index.js +10 -0
  135. package/dist/io/types.d.ts +13 -0
  136. package/dist/io/url-drop.js +64 -33
  137. package/dist/isosurface/parse.js +52 -51
  138. package/dist/isosurface/slice.js +5 -4
  139. package/dist/isosurface/types.js +1 -1
  140. package/dist/keyboard.d.ts +3 -0
  141. package/dist/keyboard.js +23 -0
  142. package/dist/labels.d.ts +1 -1
  143. package/dist/labels.js +9 -8
  144. package/dist/layout/FullscreenButton.svelte +33 -0
  145. package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
  146. package/dist/layout/FullscreenToggle.svelte +8 -14
  147. package/dist/layout/PropertyFilter.svelte +3 -2
  148. package/dist/layout/SettingsSection.svelte +1 -1
  149. package/dist/layout/ViewerChrome.svelte +116 -0
  150. package/dist/layout/ViewerChrome.svelte.d.ts +17 -0
  151. package/dist/layout/fullscreen.d.ts +4 -0
  152. package/dist/layout/fullscreen.svelte.d.ts +8 -0
  153. package/dist/layout/fullscreen.svelte.js +37 -0
  154. package/dist/layout/index.d.ts +3 -0
  155. package/dist/layout/index.js +3 -0
  156. package/dist/layout/json-tree/JsonNode.svelte +1 -1
  157. package/dist/layout/json-tree/JsonTree.svelte +2 -2
  158. package/dist/layout/json-tree/utils.js +5 -4
  159. package/dist/marching-cubes.js +8 -13
  160. package/dist/math.d.ts +12 -4
  161. package/dist/math.js +42 -30
  162. package/dist/overlays/DraggablePane.svelte +4 -4
  163. package/dist/overlays/index.d.ts +4 -0
  164. package/dist/periodic-table/PeriodicTable.svelte +27 -15
  165. package/dist/periodic-table/PropertySelect.svelte +1 -0
  166. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +9 -3
  167. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
  168. package/dist/phase-diagram/PhaseDiagramControls.svelte +3 -2
  169. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
  170. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
  171. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
  172. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +47 -132
  173. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
  174. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +1 -1
  175. package/dist/phase-diagram/build-diagram.js +2 -2
  176. package/dist/phase-diagram/colors.js +1 -1
  177. package/dist/phase-diagram/parse.d.ts +2 -1
  178. package/dist/phase-diagram/parse.js +6 -5
  179. package/dist/phase-diagram/types.d.ts +1 -1
  180. package/dist/phase-diagram/utils.d.ts +3 -3
  181. package/dist/phase-diagram/utils.js +8 -12
  182. package/dist/plot/{BarPlot.svelte → bar/BarPlot.svelte} +246 -841
  183. package/dist/plot/{BarPlot.svelte.d.ts → bar/BarPlot.svelte.d.ts} +8 -16
  184. package/dist/plot/{BarPlotControls.svelte → bar/BarPlotControls.svelte} +6 -5
  185. package/dist/plot/{BarPlotControls.svelte.d.ts → bar/BarPlotControls.svelte.d.ts} +3 -3
  186. package/dist/plot/{SpacegroupBarPlot.svelte → bar/SpacegroupBarPlot.svelte} +8 -7
  187. package/dist/plot/{SpacegroupBarPlot.svelte.d.ts → bar/SpacegroupBarPlot.svelte.d.ts} +1 -1
  188. package/dist/plot/bar/data.d.ts +40 -0
  189. package/dist/plot/bar/data.js +154 -0
  190. package/dist/plot/bar/geometry.d.ts +39 -0
  191. package/dist/plot/bar/geometry.js +60 -0
  192. package/dist/plot/bar/index.d.ts +3 -0
  193. package/dist/plot/bar/index.js +3 -0
  194. package/dist/plot/box/BoxPlot.svelte +1292 -0
  195. package/dist/plot/box/BoxPlot.svelte.d.ts +95 -0
  196. package/dist/plot/box/BoxPlotControls.svelte +109 -0
  197. package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
  198. package/dist/plot/box/Violin.svelte +14 -0
  199. package/dist/plot/box/Violin.svelte.d.ts +70 -0
  200. package/dist/plot/box/box-plot.d.ts +56 -0
  201. package/dist/plot/box/box-plot.js +129 -0
  202. package/dist/plot/box/index.d.ts +5 -0
  203. package/dist/plot/box/index.js +5 -0
  204. package/dist/plot/box/kde.d.ts +17 -0
  205. package/dist/plot/box/kde.js +160 -0
  206. package/dist/plot/box/quantile.d.ts +3 -0
  207. package/dist/plot/box/quantile.js +53 -0
  208. package/dist/plot/{auto-place.d.ts → core/auto-place.d.ts} +1 -1
  209. package/dist/plot/{auto-place.js → core/auto-place.js} +6 -3
  210. package/dist/plot/core/axis-utils.d.ts +46 -0
  211. package/dist/plot/core/axis-utils.js +110 -0
  212. package/dist/plot/{AxisLabel.svelte → core/components/AxisLabel.svelte} +2 -2
  213. package/dist/plot/{AxisLabel.svelte.d.ts → core/components/AxisLabel.svelte.d.ts} +1 -1
  214. package/dist/plot/{ColorBar.svelte → core/components/ColorBar.svelte} +41 -38
  215. package/dist/plot/{ColorBar.svelte.d.ts → core/components/ColorBar.svelte.d.ts} +7 -6
  216. package/dist/plot/{ColorScaleSelect.svelte → core/components/ColorScaleSelect.svelte} +4 -3
  217. package/dist/plot/{ColorScaleSelect.svelte.d.ts → core/components/ColorScaleSelect.svelte.d.ts} +2 -2
  218. package/dist/plot/core/components/ControlPane.svelte +46 -0
  219. package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
  220. package/dist/plot/{FillArea.svelte → core/components/FillArea.svelte} +17 -6
  221. package/dist/plot/{FillArea.svelte.d.ts → core/components/FillArea.svelte.d.ts} +1 -1
  222. package/dist/plot/{InteractiveAxisLabel.svelte → core/components/InteractiveAxisLabel.svelte} +3 -3
  223. package/dist/plot/{InteractiveAxisLabel.svelte.d.ts → core/components/InteractiveAxisLabel.svelte.d.ts} +2 -2
  224. package/dist/plot/{Line.svelte → core/components/Line.svelte} +33 -15
  225. package/dist/plot/{Line.svelte.d.ts → core/components/Line.svelte.d.ts} +3 -2
  226. package/dist/plot/{PlotAxis.svelte → core/components/PlotAxis.svelte} +9 -6
  227. package/dist/plot/{PlotAxis.svelte.d.ts → core/components/PlotAxis.svelte.d.ts} +5 -3
  228. package/dist/plot/{PlotControls.svelte → core/components/PlotControls.svelte} +17 -29
  229. package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
  230. package/dist/plot/{PlotLegend.svelte → core/components/PlotLegend.svelte} +21 -10
  231. package/dist/plot/{PlotLegend.svelte.d.ts → core/components/PlotLegend.svelte.d.ts} +3 -2
  232. package/dist/plot/{PlotTooltip.svelte → core/components/PlotTooltip.svelte} +17 -1
  233. package/dist/plot/{PlotTooltip.svelte.d.ts → core/components/PlotTooltip.svelte.d.ts} +8 -0
  234. package/dist/plot/{PortalSelect.svelte → core/components/PortalSelect.svelte} +11 -7
  235. package/dist/plot/{ReferenceLine.svelte → core/components/ReferenceLine.svelte} +3 -3
  236. package/dist/plot/{ReferenceLine.svelte.d.ts → core/components/ReferenceLine.svelte.d.ts} +1 -1
  237. package/dist/plot/{ReferenceLine3D.svelte → core/components/ReferenceLine3D.svelte} +5 -5
  238. package/dist/plot/{ReferenceLine3D.svelte.d.ts → core/components/ReferenceLine3D.svelte.d.ts} +5 -5
  239. package/dist/plot/{ReferencePlane.svelte → core/components/ReferencePlane.svelte} +8 -8
  240. package/dist/plot/{ReferencePlane.svelte.d.ts → core/components/ReferencePlane.svelte.d.ts} +5 -5
  241. package/dist/plot/{ZeroLines.svelte → core/components/ZeroLines.svelte} +3 -3
  242. package/dist/plot/{ZeroLines.svelte.d.ts → core/components/ZeroLines.svelte.d.ts} +3 -3
  243. package/dist/plot/{ZoomRect.svelte → core/components/ZoomRect.svelte} +1 -1
  244. package/dist/plot/{ZoomRect.svelte.d.ts → core/components/ZoomRect.svelte.d.ts} +1 -1
  245. package/dist/plot/core/components/index.d.ts +17 -0
  246. package/dist/plot/core/components/index.js +17 -0
  247. package/dist/plot/{data-cleaning.d.ts → core/data-cleaning.d.ts} +71 -1
  248. package/dist/plot/{data-cleaning.js → core/data-cleaning.js} +21 -23
  249. package/dist/plot/{data-transform.d.ts → core/data-transform.d.ts} +2 -2
  250. package/dist/plot/{data-transform.js → core/data-transform.js} +3 -3
  251. package/dist/plot/core/fill-utils.d.ts +34 -0
  252. package/dist/plot/core/fill-utils.js +391 -0
  253. package/dist/plot/core/index.d.ts +10 -0
  254. package/dist/plot/core/index.js +11 -0
  255. package/dist/plot/core/interactions.d.ts +39 -0
  256. package/dist/plot/core/interactions.js +209 -0
  257. package/dist/plot/{layout.d.ts → core/layout.d.ts} +1 -0
  258. package/dist/plot/{layout.js → core/layout.js} +16 -8
  259. package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
  260. package/dist/plot/core/pan-zoom.svelte.js +221 -0
  261. package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
  262. package/dist/plot/core/placed-tween.svelte.js +68 -0
  263. package/dist/plot/{reference-line.d.ts → core/reference-line.d.ts} +11 -11
  264. package/dist/plot/{reference-line.js → core/reference-line.js} +29 -42
  265. package/dist/plot/core/scales.d.ts +40 -0
  266. package/dist/plot/{scales.js → core/scales.js} +94 -93
  267. package/dist/plot/core/svg.d.ts +3 -0
  268. package/dist/plot/core/svg.js +41 -0
  269. package/dist/plot/{types.d.ts → core/types.d.ts} +36 -85
  270. package/dist/plot/{types.js → core/types.js} +1 -1
  271. package/dist/plot/{utils → core/utils}/label-placement.d.ts +3 -3
  272. package/dist/plot/{utils → core/utils}/label-placement.js +3 -3
  273. package/dist/plot/core/utils/series-visibility.d.ts +26 -0
  274. package/dist/plot/{utils → core/utils}/series-visibility.js +29 -2
  275. package/dist/plot/core/utils.d.ts +12 -0
  276. package/dist/plot/core/utils.js +27 -0
  277. package/dist/plot/{Histogram.svelte → histogram/Histogram.svelte} +174 -551
  278. package/dist/plot/{Histogram.svelte.d.ts → histogram/Histogram.svelte.d.ts} +2 -2
  279. package/dist/plot/{HistogramControls.svelte → histogram/HistogramControls.svelte} +6 -6
  280. package/dist/plot/{HistogramControls.svelte.d.ts → histogram/HistogramControls.svelte.d.ts} +4 -4
  281. package/dist/plot/histogram/index.d.ts +2 -0
  282. package/dist/plot/histogram/index.js +2 -0
  283. package/dist/plot/index.d.ts +8 -41
  284. package/dist/plot/index.js +10 -39
  285. package/dist/plot/sankey/Sankey.svelte +697 -0
  286. package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
  287. package/dist/plot/sankey/SankeyControls.svelte +98 -0
  288. package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
  289. package/dist/plot/sankey/index.d.ts +4 -0
  290. package/dist/plot/sankey/index.js +3 -0
  291. package/dist/plot/sankey/sankey-types.d.ts +42 -0
  292. package/dist/plot/sankey/sankey-types.js +4 -0
  293. package/dist/plot/sankey/sankey.d.ts +52 -0
  294. package/dist/plot/sankey/sankey.js +189 -0
  295. package/dist/plot/{BinnedScatterPlot.svelte → scatter/BinnedScatterPlot.svelte} +64 -64
  296. package/dist/plot/{BinnedScatterPlot.svelte.d.ts → scatter/BinnedScatterPlot.svelte.d.ts} +6 -6
  297. package/dist/plot/{ElementScatter.svelte → scatter/ElementScatter.svelte} +6 -6
  298. package/dist/plot/{ElementScatter.svelte.d.ts → scatter/ElementScatter.svelte.d.ts} +2 -2
  299. package/dist/plot/{ScatterPlot.svelte → scatter/ScatterPlot.svelte} +297 -1008
  300. package/dist/plot/{ScatterPlot.svelte.d.ts → scatter/ScatterPlot.svelte.d.ts} +10 -18
  301. package/dist/plot/{ScatterPlotControls.svelte → scatter/ScatterPlotControls.svelte} +6 -5
  302. package/dist/plot/{ScatterPlotControls.svelte.d.ts → scatter/ScatterPlotControls.svelte.d.ts} +2 -2
  303. package/dist/plot/{ScatterPoint.svelte → scatter/ScatterPoint.svelte} +7 -7
  304. package/dist/plot/{ScatterPoint.svelte.d.ts → scatter/ScatterPoint.svelte.d.ts} +3 -3
  305. package/dist/plot/{adaptive-density.d.ts → scatter/adaptive-density.d.ts} +14 -4
  306. package/dist/plot/{adaptive-density.js → scatter/adaptive-density.js} +46 -20
  307. package/dist/plot/{binned-scatter-types.d.ts → scatter/binned-scatter-types.d.ts} +5 -12
  308. package/dist/plot/scatter/index.d.ts +7 -0
  309. package/dist/plot/scatter/index.js +5 -0
  310. package/dist/plot/scatter/scatter-data.d.ts +19 -0
  311. package/dist/plot/scatter/scatter-data.js +212 -0
  312. package/dist/plot/{ScatterPlot3D.svelte → scatter-3d/ScatterPlot3D.svelte} +25 -34
  313. package/dist/plot/{ScatterPlot3D.svelte.d.ts → scatter-3d/ScatterPlot3D.svelte.d.ts} +9 -17
  314. package/dist/plot/{ScatterPlot3DControls.svelte → scatter-3d/ScatterPlot3DControls.svelte} +14 -14
  315. package/dist/plot/{ScatterPlot3DControls.svelte.d.ts → scatter-3d/ScatterPlot3DControls.svelte.d.ts} +6 -6
  316. package/dist/plot/{ScatterPlot3DScene.svelte → scatter-3d/ScatterPlot3DScene.svelte} +129 -128
  317. package/dist/plot/{ScatterPlot3DScene.svelte.d.ts → scatter-3d/ScatterPlot3DScene.svelte.d.ts} +6 -15
  318. package/dist/plot/{Surface3D.svelte → scatter-3d/Surface3D.svelte} +7 -6
  319. package/dist/plot/{Surface3D.svelte.d.ts → scatter-3d/Surface3D.svelte.d.ts} +5 -4
  320. package/dist/plot/scatter-3d/index.d.ts +4 -0
  321. package/dist/plot/scatter-3d/index.js +4 -0
  322. package/dist/plot/sunburst/Sunburst.svelte +1041 -0
  323. package/dist/plot/sunburst/Sunburst.svelte.d.ts +97 -0
  324. package/dist/plot/sunburst/SunburstControls.svelte +200 -0
  325. package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
  326. package/dist/plot/sunburst/index.d.ts +4 -0
  327. package/dist/plot/sunburst/index.js +4 -0
  328. package/dist/plot/sunburst/render.d.ts +34 -0
  329. package/dist/plot/sunburst/render.js +122 -0
  330. package/dist/plot/sunburst/sunburst.d.ts +62 -0
  331. package/dist/plot/sunburst/sunburst.js +269 -0
  332. package/dist/rdf/RdfPlot.svelte +2 -1
  333. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  334. package/dist/rdf/calc-rdf.js +11 -24
  335. package/dist/sanitize.js +14 -3
  336. package/dist/scene/SceneCamera.svelte +62 -0
  337. package/dist/scene/SceneCamera.svelte.d.ts +19 -0
  338. package/dist/scene/bind-renderer.svelte.d.ts +2 -0
  339. package/dist/scene/bind-renderer.svelte.js +14 -0
  340. package/dist/scene/index.d.ts +4 -0
  341. package/dist/scene/index.js +5 -0
  342. package/dist/scene/props.js +52 -0
  343. package/dist/scene/types.d.ts +26 -0
  344. package/dist/scene/types.js +1 -0
  345. package/dist/settings.d.ts +79 -3
  346. package/dist/settings.js +321 -1
  347. package/dist/spectral/Bands.svelte +47 -36
  348. package/dist/spectral/Bands.svelte.d.ts +6 -6
  349. package/dist/spectral/BandsAndDos.svelte +23 -25
  350. package/dist/spectral/BrillouinBandsDos.svelte +42 -30
  351. package/dist/spectral/Dos.svelte +15 -23
  352. package/dist/spectral/Dos.svelte.d.ts +4 -3
  353. package/dist/spectral/helpers.d.ts +8 -6
  354. package/dist/spectral/helpers.js +137 -65
  355. package/dist/state.svelte.d.ts +0 -7
  356. package/dist/state.svelte.js +0 -6
  357. package/dist/structure/Arrow.svelte +2 -4
  358. package/dist/structure/AtomLegend.svelte +8 -9
  359. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  360. package/dist/structure/CanvasTooltip.svelte +1 -0
  361. package/dist/structure/CellSelect.svelte +12 -5
  362. package/dist/structure/CellSelect.svelte.d.ts +2 -1
  363. package/dist/structure/Cylinder.svelte +12 -8
  364. package/dist/structure/Cylinder.svelte.d.ts +4 -1
  365. package/dist/structure/Lattice.svelte +2 -2
  366. package/dist/structure/Structure.svelte +365 -423
  367. package/dist/structure/Structure.svelte.d.ts +5 -15
  368. package/dist/structure/StructureControls.svelte +217 -2
  369. package/dist/structure/StructureControls.svelte.d.ts +5 -3
  370. package/dist/structure/StructureExportPane.svelte +54 -156
  371. package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
  372. package/dist/structure/StructureInfoPane.svelte +10 -9
  373. package/dist/structure/StructureInfoPane.svelte.d.ts +5 -5
  374. package/dist/structure/StructureScene.svelte +376 -208
  375. package/dist/structure/StructureScene.svelte.d.ts +22 -20
  376. package/dist/structure/{label-placement.d.ts → atom-label-placement.d.ts} +3 -3
  377. package/dist/structure/{label-placement.js → atom-label-placement.js} +15 -5
  378. package/dist/structure/atom-properties.d.ts +1 -1
  379. package/dist/structure/atom-properties.js +17 -22
  380. package/dist/structure/bond-order-perception.js +3 -5
  381. package/dist/structure/bonding.d.ts +4 -0
  382. package/dist/structure/bonding.js +134 -63
  383. package/dist/structure/export.d.ts +24 -4
  384. package/dist/structure/export.js +89 -143
  385. package/dist/structure/index.d.ts +4 -4
  386. package/dist/structure/index.js +3 -3
  387. package/dist/structure/measure.d.ts +3 -2
  388. package/dist/structure/measure.js +6 -5
  389. package/dist/structure/parse.d.ts +3 -2
  390. package/dist/structure/parse.js +419 -438
  391. package/dist/structure/partial-occupancy.d.ts +0 -1
  392. package/dist/structure/partial-occupancy.js +1 -1
  393. package/dist/structure/pbc.d.ts +1 -1
  394. package/dist/structure/pbc.js +190 -13
  395. package/dist/structure/polyhedra.d.ts +41 -0
  396. package/dist/structure/polyhedra.js +602 -0
  397. package/dist/structure/site.d.ts +4 -0
  398. package/dist/structure/site.js +1 -0
  399. package/dist/structure/supercell.js +3 -2
  400. package/dist/structure/validation.js +5 -6
  401. package/dist/symmetry/SymmetryElementControls.svelte +69 -0
  402. package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
  403. package/dist/symmetry/SymmetryElements.svelte +354 -0
  404. package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
  405. package/dist/symmetry/SymmetryStats.svelte +113 -8
  406. package/dist/symmetry/WyckoffTable.svelte +68 -7
  407. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
  408. package/dist/symmetry/cell-transform.js +7 -14
  409. package/dist/symmetry/index.d.ts +14 -4
  410. package/dist/symmetry/index.js +291 -72
  411. package/dist/symmetry/spacegroups.d.ts +12 -1
  412. package/dist/symmetry/spacegroups.js +63 -14
  413. package/dist/symmetry/symmetry-elements.d.ts +33 -0
  414. package/dist/symmetry/symmetry-elements.js +521 -0
  415. package/dist/symmetry/wyckoff-db.d.ts +9 -0
  416. package/dist/symmetry/wyckoff-db.js +87 -0
  417. package/dist/table/HeatmapTable.svelte +66 -25
  418. package/dist/table/HeatmapTable.svelte.d.ts +1 -1
  419. package/dist/table/index.d.ts +1 -3
  420. package/dist/table/index.js +1 -1
  421. package/dist/theme/index.js +8 -8
  422. package/dist/tooltip/KCoords.svelte +45 -0
  423. package/dist/tooltip/KCoords.svelte.d.ts +8 -0
  424. package/dist/tooltip/index.d.ts +1 -0
  425. package/dist/tooltip/index.js +1 -0
  426. package/dist/trajectory/Trajectory.svelte +123 -100
  427. package/dist/trajectory/Trajectory.svelte.d.ts +11 -22
  428. package/dist/trajectory/TrajectoryExportPane.svelte +17 -25
  429. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
  430. package/dist/trajectory/TrajectoryInfoPane.svelte +5 -3
  431. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
  432. package/dist/trajectory/constants.js +6 -2
  433. package/dist/trajectory/extract.js +17 -37
  434. package/dist/trajectory/format-detect.d.ts +1 -1
  435. package/dist/trajectory/format-detect.js +27 -19
  436. package/dist/trajectory/frame-reader.d.ts +0 -1
  437. package/dist/trajectory/frame-reader.js +63 -162
  438. package/dist/trajectory/helpers.d.ts +10 -2
  439. package/dist/trajectory/helpers.js +56 -36
  440. package/dist/trajectory/index.js +1 -1
  441. package/dist/trajectory/parse/ase.d.ts +9 -1
  442. package/dist/trajectory/parse/ase.js +47 -32
  443. package/dist/trajectory/parse/diagnostics.d.ts +3 -0
  444. package/dist/trajectory/parse/diagnostics.js +14 -0
  445. package/dist/trajectory/parse/hdf5.js +1 -1
  446. package/dist/trajectory/parse/index.d.ts +1 -1
  447. package/dist/trajectory/parse/index.js +65 -105
  448. package/dist/trajectory/parse/lammps.d.ts +0 -2
  449. package/dist/trajectory/parse/lammps.js +8 -6
  450. package/dist/trajectory/parse/pymatgen.d.ts +2 -0
  451. package/dist/trajectory/parse/pymatgen.js +74 -0
  452. package/dist/trajectory/parse/vasp.js +38 -18
  453. package/dist/trajectory/parse/xyz.d.ts +13 -1
  454. package/dist/trajectory/parse/xyz.js +102 -94
  455. package/dist/trajectory/plotting.d.ts +1 -2
  456. package/dist/trajectory/plotting.js +16 -113
  457. package/dist/utils.d.ts +2 -0
  458. package/dist/utils.js +7 -5
  459. package/dist/xrd/XrdPlot.svelte +16 -30
  460. package/dist/xrd/broadening.d.ts +2 -1
  461. package/dist/xrd/calc-xrd.js +18 -20
  462. package/dist/xrd/index.d.ts +2 -2
  463. package/dist/xrd/parse.js +2 -2
  464. package/package.json +43 -26
  465. package/dist/element/data.json +0 -11864
  466. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  467. package/dist/fermi-surface/marching-cubes.js +0 -2
  468. package/dist/plot/PlotControls.svelte.d.ts +0 -4
  469. package/dist/plot/axis-utils.d.ts +0 -19
  470. package/dist/plot/axis-utils.js +0 -78
  471. package/dist/plot/defaults.d.ts +0 -19
  472. package/dist/plot/defaults.js +0 -9
  473. package/dist/plot/fill-utils.d.ts +0 -46
  474. package/dist/plot/fill-utils.js +0 -322
  475. package/dist/plot/hover-lock.svelte.d.ts +0 -14
  476. package/dist/plot/hover-lock.svelte.js +0 -46
  477. package/dist/plot/interactions.d.ts +0 -12
  478. package/dist/plot/interactions.js +0 -101
  479. package/dist/plot/scales.d.ts +0 -48
  480. package/dist/plot/svg.d.ts +0 -1
  481. package/dist/plot/svg.js +0 -11
  482. package/dist/plot/utils/series-visibility.d.ts +0 -15
  483. package/dist/plot/utils.d.ts +0 -1
  484. package/dist/plot/utils.js +0 -14
  485. /package/dist/plot/{PortalSelect.svelte.d.ts → core/components/PortalSelect.svelte.d.ts} +0 -0
  486. /package/dist/plot/{binned-scatter-types.js → scatter/binned-scatter-types.js} +0 -0
@@ -1,9 +1,9 @@
1
- import type { D3ColorSchemeName, D3InterpolateName } from '../colors';
2
- import type { Point2D } from '../math';
3
- import type { AxisLoadError, BarHandlerProps, BarMode, BarSeries, BarStyle, BasePlotProps, DataLoaderFn, InternalPoint, LegendConfig, LineStyle, Orientation, PanConfig, PlotConfig, RefLine, RefLineEvent, ScaleType, UserContentProps } from './';
1
+ import type { D3InterpolateName } from '../../colors';
2
+ import type { Point2D } from '../../math';
3
+ import type { AxisLoadError, BarHandlerProps, BarMode, BarSeries, BarStyle, BasePlotProps, ColorScaleConfig, DataLoaderFn, InternalPoint, LegendConfig, LineStyle, Orientation, PanConfig, PlotConfig, RefLine, RefLineEvent, SizeScaleConfig, UserContentProps } from '..';
4
4
  import type { Snippet } from 'svelte';
5
5
  import type { HTMLAttributes } from 'svelte/elements';
6
- import { type TweenOptions } from 'svelte/motion';
6
+ import type { TweenOptions } from 'svelte/motion';
7
7
  declare function $$render<Metadata extends Record<string, unknown> = Record<string, unknown>>(): {
8
8
  props: HTMLAttributes<HTMLDivElement> & BasePlotProps & PlotConfig & {
9
9
  series?: BarSeries<Metadata>[];
@@ -31,16 +31,8 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
31
31
  on_bar_hover?: (data: (BarHandlerProps<Metadata> & {
32
32
  event: MouseEvent | FocusEvent | KeyboardEvent;
33
33
  }) | null) => void;
34
- color_scale?: {
35
- type?: ScaleType;
36
- scheme?: D3ColorSchemeName | D3InterpolateName;
37
- value_range?: [number, number];
38
- } | D3InterpolateName;
39
- size_scale?: {
40
- type?: ScaleType;
41
- radius_range?: [number, number];
42
- value_range?: [number, number];
43
- };
34
+ color_scale?: ColorScaleConfig | D3InterpolateName;
35
+ size_scale?: SizeScaleConfig;
44
36
  point_tween?: TweenOptions<Point2D>;
45
37
  on_point_click?: (data: (BarHandlerProps<Metadata> & {
46
38
  point: InternalPoint<Metadata>;
@@ -61,7 +53,7 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
61
53
  pan?: PanConfig;
62
54
  };
63
55
  exports: {};
64
- bindings: "orientation" | "display" | "mode" | "show_controls" | "x_axis" | "y_axis" | "fullscreen" | "series" | "hovered" | "ref_lines" | "controls_open" | "x2_axis" | "y2_axis";
56
+ bindings: "display" | "mode" | "orientation" | "show_controls" | "x2_axis" | "y_axis" | "y2_axis" | "fullscreen" | "series" | "hovered" | "ref_lines" | "controls_open" | "x_axis";
65
57
  slots: {};
66
58
  events: {};
67
59
  };
@@ -69,7 +61,7 @@ declare class __sveltets_Render<Metadata extends Record<string, unknown> = Recor
69
61
  props(): ReturnType<typeof $$render<Metadata>>['props'];
70
62
  events(): ReturnType<typeof $$render<Metadata>>['events'];
71
63
  slots(): ReturnType<typeof $$render<Metadata>>['slots'];
72
- bindings(): "orientation" | "display" | "mode" | "show_controls" | "x_axis" | "y_axis" | "fullscreen" | "series" | "hovered" | "ref_lines" | "controls_open" | "x2_axis" | "y2_axis";
64
+ bindings(): "display" | "mode" | "orientation" | "show_controls" | "x2_axis" | "y_axis" | "y2_axis" | "fullscreen" | "series" | "hovered" | "ref_lines" | "controls_open" | "x_axis";
73
65
  exports(): {};
74
66
  }
75
67
  interface $$IsomorphicComponent {
@@ -1,12 +1,13 @@
1
1
  <script lang="ts">
2
- import { SettingsSection } from '../layout'
3
- import type { BarMode, PlotConfig } from './'
4
- import { PlotControls } from './'
5
- import type { Orientation, PlotControlsProps } from './types'
2
+ import { SettingsSection } from '../../layout'
3
+ import type { BarMode, PlotConfig } from '..'
4
+ import { PlotControls } from '..'
5
+ import type { Orientation, PlotControlsProps } from '../core/types'
6
+ import { unique_id } from '../core/utils'
6
7
  import type { Snippet } from 'svelte'
7
8
 
8
9
  // Unique ID prefix to avoid conflicts when multiple instances on same page
9
- const uid = crypto.randomUUID().slice(0, 8)
10
+ const uid = unique_id(`bar-ctrl`)
10
11
 
11
12
  let {
12
13
  orientation = $bindable(`vertical`),
@@ -1,5 +1,5 @@
1
- import type { BarMode, PlotConfig } from './';
2
- import type { Orientation, PlotControlsProps } from './types';
1
+ import type { BarMode, PlotConfig } from '..';
2
+ import type { Orientation, PlotControlsProps } from '../core/types';
3
3
  import type { Snippet } from 'svelte';
4
4
  type $$ComponentProps = Omit<PlotControlsProps, `children` | `post_children`> & {
5
5
  orientation?: Orientation;
@@ -13,6 +13,6 @@ type $$ComponentProps = Omit<PlotControlsProps, `children` | `post_children`> &
13
13
  } & Required<PlotConfig>
14
14
  ]>;
15
15
  };
16
- declare const BarPlotControls: import("svelte").Component<$$ComponentProps, {}, "orientation" | "display" | "mode" | "show_controls" | "x_axis" | "y_axis" | "controls_open" | "x2_axis" | "y2_axis">;
16
+ declare const BarPlotControls: import("svelte").Component<$$ComponentProps, {}, "display" | "mode" | "orientation" | "show_controls" | "x2_axis" | "y_axis" | "y2_axis" | "controls_open" | "x_axis">;
17
17
  type BarPlotControls = ReturnType<typeof BarPlotControls>;
18
18
  export default BarPlotControls;
@@ -1,10 +1,11 @@
1
1
  <script lang="ts">
2
- import { format_num, format_value } from '../labels'
3
- import type { BarHandlerProps, BarSeries, TickConfig } from './'
4
- import { BarPlot } from './'
5
- import type { CrystalSystem } from '../symmetry'
6
- import * as symmetry from '../symmetry'
7
- import * as spg from '../symmetry/spacegroups'
2
+ import { format_num, format_value } from '../../labels'
3
+ import type { Vec2 } from '../../math'
4
+ import type { BarHandlerProps, BarSeries, TickConfig } from '..'
5
+ import { BarPlot } from '..'
6
+ import type { CrystalSystem } from '../../symmetry'
7
+ import * as symmetry from '../../symmetry'
8
+ import * as spg from '../../symmetry/spacegroups'
8
9
  import type { ComponentProps } from 'svelte'
9
10
  import { SvelteMap } from 'svelte/reactivity'
10
11
 
@@ -123,7 +124,7 @@
123
124
  })
124
125
 
125
126
  // Always show full space group range (1-230)
126
- const x_range: [number, number] = [0.5, MAX_SPACEGROUP + 0.5]
127
+ const x_range: Vec2 = [0.5, MAX_SPACEGROUP + 0.5]
127
128
 
128
129
  // Calculate crystal system region boundaries using full theoretical ranges
129
130
  const crystal_system_regions = $derived.by(() => {
@@ -1,4 +1,4 @@
1
- import { BarPlot } from './';
1
+ import { BarPlot } from '..';
2
2
  import type { ComponentProps } from 'svelte';
3
3
  type $$ComponentProps = ComponentProps<typeof BarPlot> & {
4
4
  data: (number | string)[];
@@ -0,0 +1,40 @@
1
+ import type { BarMode, BarSeries, Orientation, ScaleType } from '../core/types';
2
+ export type NumericBarSeries<Metadata = Record<string, unknown>> = Omit<BarSeries<Metadata>, `x`> & {
3
+ x: readonly number[];
4
+ };
5
+ export declare function normalize_categorical<Metadata = Record<string, unknown>>(series: readonly BarSeries<Metadata>[], explicit_categories?: readonly string[]): {
6
+ category_list: string[];
7
+ internal_series: NumericBarSeries<Metadata>[];
8
+ };
9
+ export interface BarAutoRangeOpts<Metadata = Record<string, unknown>> {
10
+ visible_series: readonly NumericBarSeries<Metadata>[];
11
+ y1_series: readonly NumericBarSeries<Metadata>[];
12
+ y2_series: readonly NumericBarSeries<Metadata>[];
13
+ x2_series: readonly NumericBarSeries<Metadata>[];
14
+ mode: BarMode;
15
+ orientation: Orientation;
16
+ range_padding: number;
17
+ category_count: number;
18
+ x_range: [number | null, number | null];
19
+ x_scale_type: ScaleType;
20
+ x_is_time: boolean;
21
+ x2_range: [number | null, number | null];
22
+ x2_scale_type: ScaleType;
23
+ x2_is_time: boolean;
24
+ y_range: [number | null, number | null];
25
+ y_scale_type: ScaleType;
26
+ y2_range: [number | null, number | null];
27
+ y2_scale_type: ScaleType;
28
+ }
29
+ export declare function compute_bar_auto_ranges<Metadata = Record<string, unknown>>(opts: BarAutoRangeOpts<Metadata>): {
30
+ x: number[];
31
+ x2: number[];
32
+ y: number[];
33
+ y2: number[];
34
+ };
35
+ export declare function compute_stacked_offsets<Metadata = Record<string, unknown>>(internal_series: readonly NumericBarSeries<Metadata>[], mode: BarMode): number[][];
36
+ export interface GroupInfo {
37
+ bar_series_count: number;
38
+ bar_series_indices: number[];
39
+ }
40
+ export declare function compute_group_info<Metadata = Record<string, unknown>>(internal_series: readonly NumericBarSeries<Metadata>[], mode: BarMode): GroupInfo;
@@ -0,0 +1,154 @@
1
+ // Pure data-shaping logic for BarPlot: categorical x-value normalization,
2
+ // auto-range computation (incl. stacked totals + zero-clamping), stacked-bar
3
+ // offsets and grouped-bar layout info. Extracted from BarPlot.svelte so the
4
+ // math is unit-testable without mounting the component.
5
+ import { get_nice_data_range } from '../core/scales';
6
+ import { get_scale_type_name } from '../core/types';
7
+ // Map string x values (categories) to integer indices shared across all series.
8
+ // Numeric-only input is passed through unchanged (same array identity).
9
+ export function normalize_categorical(series, explicit_categories) {
10
+ const is_categorical = series.some((srs) => srs.x.some((val) => typeof val === `string`));
11
+ const category_list = !is_categorical
12
+ ? []
13
+ : explicit_categories?.length
14
+ ? [...explicit_categories]
15
+ : [...new Set(series.flatMap((srs) => srs.x.map(String)))];
16
+ if (category_list.length === 0) {
17
+ // safe: when no categories were found, all x values are numeric
18
+ const internal_series = series;
19
+ return { category_list, internal_series };
20
+ }
21
+ const category_indices = category_list.map((_, idx) => idx);
22
+ const internal_series = series.map((srs) => {
23
+ const orig_map = new Map(srs.x.map((val, idx) => [String(val), idx]));
24
+ if (orig_map.size < srs.x.length) {
25
+ console.warn(`BarPlot: series "${srs.label ?? `?`}" has duplicate x values — last occurrence wins`);
26
+ }
27
+ // Resolve original index for each category (undefined if series lacks it)
28
+ const orig_indices = category_list.map((cat) => orig_map.get(cat));
29
+ const remap = (arr, fallback) => orig_indices.map((oi) => (oi != null ? (arr?.[oi] ?? fallback) : fallback));
30
+ // Reorder a per-point prop that may be a single value (broadcast, left as-is) or an
31
+ // array (must follow the category reordering, else point styles misalign with bars)
32
+ const remap_per_point = (prop) => Array.isArray(prop)
33
+ ? orig_indices.map((oi) => (oi != null ? prop[oi] : undefined))
34
+ : prop;
35
+ const bw_arr = Array.isArray(srs.bar_width) ? srs.bar_width : null;
36
+ const meta_arr = Array.isArray(srs.metadata) ? srs.metadata : null;
37
+ return {
38
+ ...srs,
39
+ x: category_indices,
40
+ y: remap(srs.y, srs.render_mode === `line` ? NaN : 0),
41
+ labels: remap(srs.labels, null),
42
+ metadata: orig_indices.map((oi) => oi != null ? (meta_arr ? meta_arr[oi] : srs.metadata) : undefined),
43
+ point_style: remap_per_point(srs.point_style),
44
+ point_hover: remap_per_point(srs.point_hover),
45
+ point_label: remap_per_point(srs.point_label),
46
+ point_offset: remap_per_point(srs.point_offset),
47
+ ...(bw_arr ? { bar_width: remap(bw_arr, 0.5) } : {}),
48
+ ...(srs.color_values ? { color_values: remap(srs.color_values, null) } : {}),
49
+ ...(srs.size_values ? { size_values: remap(srs.size_values, null) } : {}),
50
+ };
51
+ });
52
+ return { category_list, internal_series };
53
+ }
54
+ // Compute data-driven axis ranges for all four axes. In stacked mode the value
55
+ // range covers per-x stacked totals (positive and negative stacks separately);
56
+ // for linear/arcsinh scales the value axis is clamped to include 0 when all
57
+ // values share one sign and no explicit range is set.
58
+ export function compute_bar_auto_ranges(opts) {
59
+ const { visible_series, mode, orientation, range_padding, category_count } = opts;
60
+ const calc_y_range = (series_list, y_limit, scale_type) => {
61
+ let points = series_list.flatMap((srs) => srs.x.map((x_val, idx) => ({ x: x_val, y: srs.y[idx] })));
62
+ // In stacked mode, calculate stacked totals for accurate range (only for bars on the same axis)
63
+ if (mode === `stacked`) {
64
+ const stacked_totals = new Map();
65
+ // Only include visible bar series (not lines) in stacking
66
+ series_list
67
+ .filter((srs) => srs.render_mode !== `line`)
68
+ .forEach((srs) => srs.x.forEach((x_val, idx) => {
69
+ const y_val = srs.y[idx] ?? 0;
70
+ const totals = stacked_totals.get(x_val) ?? { pos: 0, neg: 0 };
71
+ if (y_val >= 0)
72
+ totals.pos += y_val;
73
+ else
74
+ totals.neg += y_val;
75
+ stacked_totals.set(x_val, totals);
76
+ }));
77
+ // Replace points with stacked totals + line series (which don't stack)
78
+ points = [
79
+ ...Array.from(stacked_totals).flatMap(([x_val, { pos, neg }]) => [
80
+ ...(pos > 0 ? [{ x: x_val, y: pos }] : []),
81
+ ...(neg < 0 ? [{ x: x_val, y: neg }] : []),
82
+ ]),
83
+ ...series_list
84
+ .filter((srs) => srs.render_mode === `line`)
85
+ .flatMap((srs) => srs.x.map((x_val, idx) => ({ x: x_val, y: srs.y[idx] }))),
86
+ ];
87
+ }
88
+ if (points.length === 0)
89
+ return [0, 1];
90
+ let computed_y_range = get_nice_data_range(points, (pt) => pt.y, y_limit, scale_type, range_padding, false);
91
+ // Bar value axes include 0 when all values share one sign - unless an explicit
92
+ // range is set or the scale is log (where 0 is invalid)
93
+ const type_name = get_scale_type_name(scale_type);
94
+ if ((type_name === `linear` || type_name === `arcsinh`) &&
95
+ y_limit[0] == null &&
96
+ y_limit[1] == null) {
97
+ const has_negative = points.some((pt) => pt.y < 0);
98
+ const has_positive = points.some((pt) => pt.y > 0);
99
+ if (has_positive && !has_negative)
100
+ computed_y_range = [0, computed_y_range[1]];
101
+ else if (has_negative && !has_positive)
102
+ computed_y_range = [computed_y_range[0], 0];
103
+ }
104
+ return computed_y_range;
105
+ };
106
+ const calc_x_range = (series_list, limit, scale_type, is_time) => {
107
+ const points = series_list.flatMap((srs) => srs.x.map((x_val) => ({ x: x_val, y: 0 })));
108
+ if (points.length === 0)
109
+ return [0, 1];
110
+ return get_nice_data_range(points, (pt) => pt.x, limit, scale_type, range_padding, is_time);
111
+ };
112
+ // Categorical x axes use a fixed range centered on integer indices
113
+ const x_auto_range = category_count > 0
114
+ ? [-0.5, category_count - 0.5]
115
+ : calc_x_range(visible_series.filter((srs) => (srs.x_axis ?? `x1`) === `x1`), opts.x_range, opts.x_scale_type, opts.x_is_time);
116
+ const x2_auto_range = calc_x_range(opts.x2_series, opts.x2_range, opts.x2_scale_type, opts.x2_is_time);
117
+ const y1_range = calc_y_range(opts.y1_series, opts.y_range, opts.y_scale_type);
118
+ const y2_auto_range = calc_y_range(opts.y2_series, opts.y2_range, opts.y2_scale_type);
119
+ // Map data ranges to axis ranges depending on orientation
120
+ return orientation === `horizontal`
121
+ ? { x: y1_range, x2: x2_auto_range, y: x_auto_range, y2: y2_auto_range }
122
+ : { x: x_auto_range, x2: x2_auto_range, y: y1_range, y2: y2_auto_range };
123
+ }
124
+ // Stack offsets indexed by [original series idx][bar idx] (only bar series in
125
+ // stacked mode contribute; hidden and line series get all-zero rows).
126
+ export function compute_stacked_offsets(internal_series, mode) {
127
+ if (mode !== `stacked`)
128
+ return [];
129
+ const offsets = internal_series.map((srs) => Array.from(srs.x, () => 0));
130
+ // Cumulative totals keyed by axis/sign/x value so series with misaligned x grids
131
+ // stack on the correct baseline (matching stacked totals in compute_bar_auto_ranges)
132
+ const acc = new Map();
133
+ internal_series.forEach((srs, series_idx) => {
134
+ if (!(srs?.visible ?? true) || srs.render_mode === `line`)
135
+ return;
136
+ srs.x.forEach((x_val, bar_idx) => {
137
+ const y_val = srs.y[bar_idx] ?? 0;
138
+ const key = `${srs.y_axis === `y2` ? `y2` : `y1`}:${y_val >= 0 ? `+` : `-`}:${x_val}`;
139
+ offsets[series_idx][bar_idx] = acc.get(key) ?? 0;
140
+ acc.set(key, (acc.get(key) ?? 0) + y_val);
141
+ });
142
+ });
143
+ return offsets;
144
+ }
145
+ // Group positions for grouped mode (side-by-side bars). Indices are original
146
+ // series indices so hidden/line series don't shift visible bars' slots.
147
+ export function compute_group_info(internal_series, mode) {
148
+ if (mode !== `grouped`)
149
+ return { bar_series_count: 0, bar_series_indices: [] };
150
+ const bar_series_indices = internal_series
151
+ .map((srs, idx) => ((srs?.visible ?? true) && srs.render_mode !== `line` ? idx : -1))
152
+ .filter((idx) => idx >= 0);
153
+ return { bar_series_count: bar_series_indices.length, bar_series_indices };
154
+ }
@@ -0,0 +1,39 @@
1
+ import type { BarMode, InternalPoint, Orientation } from '../core/types';
2
+ import type { GroupInfo, NumericBarSeries } from './data';
3
+ export type LineSeriesPoint<Metadata = Record<string, unknown>> = InternalPoint<Metadata> & {
4
+ x: number;
5
+ y: number;
6
+ data_x: number;
7
+ data_y: number;
8
+ idx: number;
9
+ };
10
+ export declare function compute_line_points<Metadata = Record<string, unknown>>(opts: {
11
+ series: NumericBarSeries<Metadata>;
12
+ series_idx: number;
13
+ orientation: Orientation;
14
+ x_scale: (val: number) => number;
15
+ y_scale: (val: number) => number;
16
+ cat_y_scale: (val: number) => number;
17
+ }): LineSeriesPoint<Metadata>[];
18
+ export interface BarRect {
19
+ c0: number;
20
+ c1: number;
21
+ v0: number;
22
+ v1: number;
23
+ rect_x: number;
24
+ rect_y: number;
25
+ rect_w: number;
26
+ rect_h: number;
27
+ }
28
+ export declare function compute_bar_rect(opts: {
29
+ cat_val: number;
30
+ val: number;
31
+ base: number;
32
+ bar_width_val: number;
33
+ series_idx: number;
34
+ mode: BarMode;
35
+ orientation: Orientation;
36
+ group_info: GroupInfo;
37
+ cat_scale: (val: number) => number;
38
+ val_scale: (val: number) => number;
39
+ }): BarRect;
@@ -0,0 +1,60 @@
1
+ // Pure screen-space geometry for BarPlot rendering: line-series point
2
+ // construction and per-bar rect computation. Extracted from BarPlot.svelte's
3
+ // template so the coordinate math is unit-testable.
4
+ import { process_prop } from '../core/data-transform';
5
+ // Build screen-space points for a line series (lines don't stack - they show
6
+ // absolute values). Non-finite points (NaN/Infinity coords) are dropped.
7
+ export function compute_line_points(opts) {
8
+ const { series: srs, series_idx, orientation, x_scale, y_scale, cat_y_scale } = opts;
9
+ return srs.x
10
+ .map((x_val, idx) => {
11
+ const y_val = srs.y[idx];
12
+ const plot_x = orientation === `vertical` ? x_scale(x_val) : x_scale(y_val);
13
+ const plot_y = orientation === `vertical` ? y_scale(y_val) : cat_y_scale(x_val);
14
+ const metadata = Array.isArray(srs.metadata) ? srs.metadata[idx] : srs.metadata;
15
+ return {
16
+ x: plot_x,
17
+ y: plot_y,
18
+ data_x: x_val,
19
+ data_y: y_val,
20
+ idx,
21
+ color_value: srs.color_values?.[idx] ?? null,
22
+ size_value: srs.size_values?.[idx] ?? null,
23
+ point_style: process_prop(srs.point_style, idx),
24
+ point_hover: process_prop(srs.point_hover, idx),
25
+ point_label: process_prop(srs.point_label, idx),
26
+ point_offset: process_prop(srs.point_offset, idx),
27
+ metadata,
28
+ series_idx,
29
+ point_idx: idx,
30
+ };
31
+ })
32
+ .filter((pt) => isFinite(pt.x) && isFinite(pt.y));
33
+ }
34
+ // Screen-space rect for one bar: category extent (c0/c1) from bar width +
35
+ // grouped offset, value extent (v0/v1) from stacked base to base + value.
36
+ // Rects get min 1px width so thin bars stay visible.
37
+ export function compute_bar_rect(opts) {
38
+ const { cat_val, val, base, bar_width_val, series_idx, mode, group_info } = opts;
39
+ const { cat_scale, val_scale } = opts;
40
+ const is_vertical = opts.orientation === `vertical`;
41
+ const grouped = mode === `grouped` && group_info.bar_series_count > 1;
42
+ const half = grouped ? bar_width_val / (2 * group_info.bar_series_count) : bar_width_val / 2;
43
+ // Offset uses the series' slot among visible bar series (original-index lookup)
44
+ const group_offset = grouped
45
+ ? (group_info.bar_series_indices.indexOf(series_idx) -
46
+ (group_info.bar_series_count - 1) / 2) *
47
+ (bar_width_val / group_info.bar_series_count)
48
+ : 0;
49
+ const c0 = cat_scale(cat_val + group_offset - half);
50
+ const c1 = cat_scale(cat_val + group_offset + half);
51
+ const v0 = val_scale(base);
52
+ const v1 = val_scale(base + val);
53
+ const [rect_x, rect_y] = is_vertical
54
+ ? [Math.min(c0, c1), Math.min(v0, v1)]
55
+ : [Math.min(v0, v1), Math.min(c0, c1)];
56
+ const [rect_w, rect_h] = is_vertical
57
+ ? [Math.max(1, Math.abs(c1 - c0)), Math.max(0, Math.abs(v1 - v0))]
58
+ : [Math.max(1, Math.abs(v1 - v0)), Math.max(0, Math.abs(c1 - c0))];
59
+ return { c0, c1, v0, v1, rect_x, rect_y, rect_w, rect_h };
60
+ }
@@ -0,0 +1,3 @@
1
+ export { default as BarPlot } from './BarPlot.svelte';
2
+ export { default as BarPlotControls } from './BarPlotControls.svelte';
3
+ export { default as SpacegroupBarPlot } from './SpacegroupBarPlot.svelte';
@@ -0,0 +1,3 @@
1
+ export { default as BarPlot } from './BarPlot.svelte';
2
+ export { default as BarPlotControls } from './BarPlotControls.svelte';
3
+ export { default as SpacegroupBarPlot } from './SpacegroupBarPlot.svelte';