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
@@ -1,8 +1,9 @@
1
1
  // Fill-between utility functions for ScatterPlot fill regions
2
2
  // Each fill edge is traced through its boundary's own points with the same curve the series line
3
- // uses (curveMonotoneX), so an unclipped fill edge coincides with the line it borders. When an
4
- // edge is clipped (x_range / partial overlap), the inserted endpoint shifts the neighboring
5
- // monotone tangent, so the clipped edge can deviate sub-pixel from the full series line.
3
+ // uses (a series edge inherits the series' `line_style.curve`, default monotoneX), so an unclipped
4
+ // fill edge coincides with the line it borders. When an edge is clipped (x_range / partial
5
+ // overlap), inserted endpoints are evaluated on a monotone-cubic approximation: sub-pixel for
6
+ // monotoneX/linear/step, but natural/basis/catmullRom edges can deviate more at the clip points.
6
7
  import { curveBasis, curveCardinal, curveCatmullRom, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, line, } from 'd3-shape';
7
8
  // Epsilon value for log scale clamping (to avoid log(0) = -Infinity)
8
9
  export const LOG_EPSILON = 1e-10;
@@ -91,9 +92,12 @@ export function monotone_interpolate(xs, ys, x, tangents) {
91
92
  const p1 = ys[lo] + dx * tang[lo];
92
93
  const p2 = ys[lo + 1] - dx * tang[lo + 1];
93
94
  const p3 = ys[lo + 1];
94
- const u = (x - x0) / span;
95
- const mu = 1 - u;
96
- return mu * mu * mu * p0 + 3 * mu * mu * u * p1 + 3 * mu * u * u * p2 + u * u * u * p3;
95
+ const frac = (x - x0) / span;
96
+ const mu = 1 - frac;
97
+ return (mu * mu * mu * p0 +
98
+ 3 * mu * mu * frac * p1 +
99
+ 3 * mu * frac * frac * p2 +
100
+ frac * frac * frac * p3);
97
101
  }
98
102
  // Curve types whose interior follows a (near-)monotone cubic; evaluated via monotone_interpolate.
99
103
  // Others (linear/step) evaluate piecewise (exact for them at clip points).
@@ -142,6 +146,19 @@ const finite_points = (xs, ys) => clean_pts(Array.from({ length: Math.min(xs.len
142
146
  x: xs[idx],
143
147
  y: ys[idx],
144
148
  })));
149
+ // Bridge the public LineCurve vocabulary (series `line_style.curve`) to FillCurveType names so
150
+ // a series fill edge traces with the same curve as its rendered line. Default: monotoneX.
151
+ const LINE_CURVE_TO_FILL = {
152
+ linear: `linear`,
153
+ monotone: `monotoneX`,
154
+ natural: `natural`,
155
+ step: `step`,
156
+ basis: `basis`,
157
+ 'catmull-rom': `catmullRom`,
158
+ };
159
+ const line_curve_to_fill = (curve) =>
160
+ // ?? monotoneX guards an unknown string from an untyped (Python/JSON) caller
161
+ (curve ? LINE_CURVE_TO_FILL[curve] : undefined) ?? `monotoneX`;
145
162
  // Resolve a boundary to native points + curve in data coordinates. `companion` supplies x
146
163
  // positions for boundaries that don't define their own (constant/axis/function/data-without-x).
147
164
  export function resolve_boundary_points(boundary, series, domains, companion) {
@@ -154,15 +171,16 @@ export function resolve_boundary_points(boundary, series, domains, companion) {
154
171
  points: horizontal(span_xs, y),
155
172
  curve: `linear`,
156
173
  });
157
- // series / function / data edges are traced with monotoneX (matches the series line)
158
- const curved_edge = (points) => points.length > 0 ? { points, curve: `monotoneX` } : null;
174
+ // function / data edges trace with monotoneX by default; a series edge inherits the
175
+ // series' own line curve so the fill border coincides with the rendered line
176
+ const curved_edge = (points, curve = `monotoneX`) => (points.length > 0 ? { points, curve } : null);
159
177
  if (typeof boundary === `number`)
160
178
  return flat_edge(boundary);
161
179
  if (boundary.type === `series`) {
162
180
  const resolved = resolve_series_ref(boundary, series);
163
181
  if (!resolved)
164
182
  return null;
165
- return curved_edge(finite_points(resolved.x, resolved.y));
183
+ return curved_edge(finite_points(resolved.x, resolved.y), line_curve_to_fill(resolved.line_style?.curve));
166
184
  }
167
185
  if (boundary.type === `constant`)
168
186
  return flat_edge(boundary.value);
@@ -342,6 +360,10 @@ const CURVE_MAP = {
342
360
  natural: curveNatural,
343
361
  };
344
362
  const get_curve = (curve_type) => CURVE_MAP[curve_type] ?? curveMonotoneX;
363
+ // Resolve a public LineCurve (a series' `line_style.curve`) to its d3 CurveFactory. Single source
364
+ // of truth shared by Line.svelte and PlotMarginals.svelte (composes the LineCurve -> FillCurveType
365
+ // -> CurveFactory maps); unknown/undefined falls back to curveMonotoneX.
366
+ export const line_curve_factory = (curve) => get_curve(line_curve_to_fill(curve));
345
367
  const trace = (points, curve_type) => line()
346
368
  .x((pt) => pt.x)
347
369
  .y((pt) => pt.y)
@@ -375,6 +397,9 @@ export function convert_error_band_to_fill_region(error_band, series, default_co
375
397
  return {
376
398
  id: error_band.id,
377
399
  label: error_band.label,
400
+ // band edges are data boundaries (default monotoneX); inherit the central series' line
401
+ // curve so the band traces with the same curve as the line it brackets
402
+ curve: line_curve_to_fill(resolved.line_style?.curve),
378
403
  upper: { type: `data`, x, values: y.map((val, idx) => val + upper_err[idx]) },
379
404
  lower: { type: `data`, x, values: y.map((val, idx) => val - lower_err[idx]) },
380
405
  fill: error_band.fill ?? default_color ?? `#4e79a7`,
@@ -3,6 +3,7 @@ export * from './data-cleaning';
3
3
  export * from './fill-utils';
4
4
  export * from './interactions';
5
5
  export * from './layout';
6
+ export * from './marginals';
6
7
  export * from './reference-line';
7
8
  export * from './scales';
8
9
  export * from './svg';
@@ -4,6 +4,7 @@ export * from './data-cleaning';
4
4
  export * from './fill-utils';
5
5
  export * from './interactions';
6
6
  export * from './layout';
7
+ export * from './marginals';
7
8
  export * from './reference-line';
8
9
  export * from './scales';
9
10
  export * from './svg';
@@ -1,14 +1,18 @@
1
1
  import { type Point2D, type Vec2 } from '../../math';
2
- import type { AxisRanges, ScaleType, Y2SyncConfig, Y2SyncMode } from './types';
2
+ import type { AxisRanges, InitialRanges, ScaleType, Y2SyncConfig, Y2SyncMode } from './types';
3
3
  export declare function get_relative_coords(evt: MouseEvent, element?: EventTarget | null): Point2D | null;
4
4
  export declare function closest_data_idx(event: Event, attr: string, root?: Element | null): number | null;
5
5
  export declare function normalize_y2_sync(sync: Y2SyncConfig | Y2SyncMode | undefined): Y2SyncConfig;
6
6
  export declare function sync_y2_range(y1_range: Vec2, y2_base_range: Vec2, sync: Y2SyncConfig): Vec2;
7
+ export declare const snapshot_ranges: ({ x, x2, y, y2 }: AxisRanges) => InitialRanges;
7
8
  export declare function pan_range_by_pixels(range: Vec2, pixel_delta: number, pixel_span: number, scale_type?: ScaleType): Vec2;
8
9
  export declare function zoom_range_by_factor(range: Vec2, factor: number, scale_type?: ScaleType): Vec2;
9
10
  export declare const to_epoch_num: (val: number | Date) => number;
10
11
  export declare function remove_drag_listeners(move_handlers: ((evt: MouseEvent) => void)[], up_handlers: ((evt: MouseEvent) => void)[]): void;
11
12
  export declare const sorted_range: (a: number, b: number) => Vec2;
13
+ export declare function invert_rect_range(scale: {
14
+ invert: (px: number) => number | Date;
15
+ }, a_px: number, b_px: number): Vec2 | null;
12
16
  export declare const vec2_equal: (a: Vec2, b: Vec2) => boolean;
13
17
  export declare const axis_ranges_equal: (a: AxisRanges, b: AxisRanges) => boolean;
14
18
  type AxisRangeOverride = {
@@ -7,8 +7,6 @@ export function get_relative_coords(evt, element = evt.currentTarget) {
7
7
  if (!(element instanceof Element))
8
8
  return null;
9
9
  const box = element.getBoundingClientRect();
10
- if (!box)
11
- return null;
12
10
  return { x: evt.clientX - box.left, y: evt.clientY - box.top };
13
11
  }
14
12
  // Resolve a delegated event to the integer value of the nearest ancestor's data
@@ -91,6 +89,13 @@ function axis_transform(scale_type) {
91
89
  }
92
90
  return { to: (val) => val, from: (val) => val };
93
91
  }
92
+ // Snapshot the four axis ranges as fresh tuples at pan/zoom/touch interaction start
93
+ export const snapshot_ranges = ({ x, x2, y, y2 }) => ({
94
+ initial_x_range: [...x],
95
+ initial_x2_range: [...x2],
96
+ initial_y_range: [...y],
97
+ initial_y2_range: [...y2],
98
+ });
94
99
  // Pan a range by a pixel delta, uniformly in screen space: linear axes shift by a
95
100
  // constant amount, log axes by a constant factor (which also can't cross zero).
96
101
  // `pixel_span` is the plot's pixel extent along the axis.
@@ -133,6 +138,13 @@ export function remove_drag_listeners(move_handlers, up_handlers) {
133
138
  // Sorted [min, max] from two scalar bounds (rect-zoom inverts drag start/end,
134
139
  // which arrive in either order depending on drag direction)
135
140
  export const sorted_range = (a, b) => [Math.min(a, b), Math.max(a, b)];
141
+ // Invert a drag-rect edge pair through a scale to a sorted finite data range
142
+ // (time scales invert to Dates, coerced to epoch numbers). Returns null when
143
+ // either bound is non-finite or the range is degenerate (zero span).
144
+ export function invert_rect_range(scale, a_px, b_px) {
145
+ const range = sorted_range(to_epoch_num(scale.invert(a_px)), to_epoch_num(scale.invert(b_px)));
146
+ return range.every(Number.isFinite) && range[0] !== range[1] ? range : null;
147
+ }
136
148
  // Strict per-bound equality of two [min, max] ranges
137
149
  export const vec2_equal = (a, b) => a[0] === b[0] && a[1] === b[1];
138
150
  // True when all four axis ranges match. The range-sync effects use this to skip
@@ -5,7 +5,8 @@ export type Sides = {
5
5
  l?: number;
6
6
  r?: number;
7
7
  };
8
- export declare const LABEL_GAP_DEFAULT = 30;
8
+ export declare const LABEL_GAP_DEFAULT = 20;
9
+ export declare const DEFAULT_PLOT_PADDING: Required<Sides>;
9
10
  export declare function y2_axis_label_x(axis: AxisConfig, width: number, pad_r: number, max_tick_width: number): number;
10
11
  export declare const filter_padding: (padding: Partial<Sides> | undefined | null, defaults: Required<Sides>) => Required<Sides>;
11
12
  export declare function measure_text_width(text: string, font?: string): number;
@@ -30,6 +31,7 @@ export interface AutoPaddingConfig {
30
31
  export declare const measure_max_tick_width: (ticks: (string | number)[], format?: string) => number;
31
32
  export declare const TICK_LABEL_HEIGHT = 16;
32
33
  export declare const AXIS_LABEL_HEIGHT = 20;
34
+ export declare const AXIS_TITLE_OFFSET: number;
33
35
  export declare const calc_auto_padding: ({ padding, default_padding, x2_axis, y_axis, y2_axis, label_gap, }: AutoPaddingConfig) => Required<Sides>;
34
36
  export declare function constrain_tooltip_position(cursor_x: number, cursor_y: number, tooltip_width: number, tooltip_height: number, viewport_width: number, viewport_height: number, options?: {
35
37
  offset?: number;
@@ -1,7 +1,10 @@
1
1
  import { format_value } from '../../labels';
2
2
  import { euclidean_dist } from '../../math';
3
3
  // Default gap between tick labels and axis labels
4
- export const LABEL_GAP_DEFAULT = 30;
4
+ export const LABEL_GAP_DEFAULT = 20;
5
+ // Default plot padding (px) reserved for axis ticks/labels, shared by
6
+ // Histogram/BarPlot/BoxPlot/BinnedScatterPlot (ScatterPlot keeps its own bespoke default)
7
+ export const DEFAULT_PLOT_PADDING = { t: 20, b: 60, l: 60, r: 20 };
5
8
  // X position for a right-side (y2) axis label: past the plot edge plus tick shift and
6
9
  // measured tick-label width (both zero when tick labels render inside the plot)
7
10
  export function y2_axis_label_x(axis, width, pad_r, max_tick_width) {
@@ -56,22 +59,28 @@ export const measure_max_tick_width = (ticks, format = ``) => ticks.length === 0
56
59
  export const TICK_LABEL_HEIGHT = 16;
57
60
  // Estimated height of an axis label (font-size ~14px + margin)
58
61
  export const AXIS_LABEL_HEIGHT = 20;
62
+ // Distance from an x/x2 axis baseline to the title center.
63
+ export const AXIS_TITLE_OFFSET = TICK_LABEL_HEIGHT + LABEL_GAP_DEFAULT;
59
64
  export const calc_auto_padding = ({ padding, default_padding, x2_axis = {}, y_axis = {}, y2_axis = {}, label_gap = LABEL_GAP_DEFAULT, }) => {
60
- const x2_ticks = x2_axis.tick_values ?? [];
61
- const y_ticks = y_axis.tick_values ?? [];
62
- const y_format = y_axis.format ?? ``;
63
- const y2_ticks = y2_axis.tick_values ?? [];
64
- const y2_format = y2_axis.format ?? ``;
65
+ // Padding for a vertical-axis side (y/y2): when ticks render, reserve widest tick label + gap +
66
+ // the rotated axis-title width (mirrors the `t` branch's AXIS_LABEL_HEIGHT) so a wide tick label
67
+ // can't overlap the title. With no tick labels (e.g. no y2 series) reserve nothing extra.
68
+ const side_pad = (axis, default_side) => {
69
+ const ticks = axis.tick_values ?? [];
70
+ if (ticks.length === 0)
71
+ return default_side;
72
+ return Math.max(default_side, measure_max_tick_width(ticks, axis.format ?? ``) +
73
+ label_gap +
74
+ (axis.label ? AXIS_LABEL_HEIGHT : 0));
75
+ };
65
76
  return {
66
77
  t: padding.t ??
67
- (x2_ticks.length > 0
78
+ ((x2_axis.tick_values ?? []).length > 0
68
79
  ? Math.max(default_padding.t, TICK_LABEL_HEIGHT + label_gap + (x2_axis.label ? AXIS_LABEL_HEIGHT : 0))
69
80
  : default_padding.t),
70
81
  b: padding.b ?? default_padding.b,
71
- l: padding.l ??
72
- Math.max(default_padding.l, measure_max_tick_width(y_ticks, y_format) + label_gap),
73
- r: padding.r ??
74
- Math.max(default_padding.r, measure_max_tick_width(y2_ticks, y2_format) + label_gap),
82
+ l: padding.l ?? side_pad(y_axis, default_padding.l),
83
+ r: padding.r ?? side_pad(y2_axis, default_padding.r),
75
84
  };
76
85
  };
77
86
  // Constrain tooltip position within bounds, flipping to opposite side if overflow
@@ -216,9 +225,9 @@ export function compute_element_placement(config) {
216
225
  ? (effective_y_max - effective_y_min) / (grid_resolution - 1)
217
226
  : 0;
218
227
  // Precompute plot corners (constant across all candidates)
219
- const plot_left = plot_bounds.x + axis_clearance;
228
+ const plot_left = valid_x_min;
220
229
  const plot_right = plot_bounds.x + plot_bounds.width - axis_clearance;
221
- const plot_top = plot_bounds.y + axis_clearance;
230
+ const plot_top = valid_y_min;
222
231
  const plot_bottom = plot_bounds.y + plot_bounds.height - axis_clearance;
223
232
  const max_corner_dist = euclidean_dist([plot_left, plot_top], [plot_right, plot_bottom]);
224
233
  for (let grid_x = 0; grid_x < grid_resolution; grid_x++) {
@@ -0,0 +1,170 @@
1
+ import type { Vec2 } from '../../math';
2
+ import type { Rect, Sides } from './layout';
3
+ import type { LineCurve, ScaleType } from './types';
4
+ import type { Snippet } from 'svelte';
5
+ export type MarginalSide = `top` | `bottom` | `left` | `right`;
6
+ export type MarginalType = `histogram` | `kde` | `cdf` | `rug`;
7
+ export type MarginalPlacement = `auto` | `flush` | `outer`;
8
+ export type MarginalNormalize = `count` | `density` | `probability`;
9
+ export type MarginalAxisBinding = `x1` | `x2` | `y1` | `y2`;
10
+ export declare const MARGINAL_SIDES: readonly ["top", "bottom", "left", "right"];
11
+ export type MarginalCurve = {
12
+ kind: `bars`;
13
+ bins: {
14
+ pos0: number;
15
+ pos1: number;
16
+ value: number;
17
+ }[];
18
+ max: number;
19
+ } | {
20
+ kind: `line`;
21
+ points: {
22
+ pos: number;
23
+ value: number;
24
+ }[];
25
+ max: number;
26
+ } | {
27
+ kind: `rug`;
28
+ positions: number[];
29
+ };
30
+ export interface MarginalComputeContext {
31
+ config: ResolvedMarginalConfig;
32
+ side: MarginalSide;
33
+ positional_range: Vec2;
34
+ scale_type: ScaleType;
35
+ }
36
+ export interface MarginalConfig {
37
+ type?: MarginalType;
38
+ size?: number;
39
+ gap?: number;
40
+ placement?: MarginalPlacement;
41
+ axis?: MarginalAxisBinding;
42
+ bins?: number;
43
+ bandwidth?: number | `silverman` | `scott`;
44
+ normalize?: MarginalNormalize;
45
+ per_series?: boolean;
46
+ color?: string;
47
+ fill?: string;
48
+ fill_opacity?: number;
49
+ stroke?: string;
50
+ stroke_width?: number;
51
+ opacity?: number;
52
+ curve?: LineCurve;
53
+ value_range?: Vec2;
54
+ value_axis?: boolean;
55
+ label?: string;
56
+ data?: readonly number[] | ((ctx: MarginalComputeContext) => readonly number[]);
57
+ reduce?: (values: number[], weights: number[] | undefined, ctx: MarginalComputeContext) => MarginalCurve;
58
+ snippet?: Snippet<[MarginalRenderContext]>;
59
+ hover?: boolean;
60
+ tooltip?: Snippet<[MarginalHover]>;
61
+ class?: string;
62
+ style?: string;
63
+ }
64
+ export type ResolvedMarginalConfig = MarginalConfig & {
65
+ type: MarginalType;
66
+ size: number;
67
+ gap: number;
68
+ placement: MarginalPlacement;
69
+ per_series: boolean;
70
+ bins: number;
71
+ bandwidth: number | `silverman` | `scott`;
72
+ stroke_width: number;
73
+ opacity: number;
74
+ value_axis: boolean;
75
+ };
76
+ export type MarginalSideInput = boolean | MarginalType | MarginalConfig;
77
+ export type MarginalsProp = boolean | MarginalType | Partial<Record<MarginalSide, MarginalSideInput>>;
78
+ export type ResolvedMarginals = Record<MarginalSide, ResolvedMarginalConfig | null>;
79
+ export interface MarginalSeriesInput {
80
+ x?: ArrayLike<number>;
81
+ y?: ArrayLike<number>;
82
+ weight?: ArrayLike<number>;
83
+ color: string;
84
+ label?: string;
85
+ visible?: boolean;
86
+ x_axis?: `x1` | `x2`;
87
+ y_axis?: `y1` | `y2`;
88
+ }
89
+ export interface MarginalSeriesCurve {
90
+ series_idx: number;
91
+ color: string;
92
+ label?: string;
93
+ curve: MarginalCurve;
94
+ }
95
+ export type ScaleFn = (value: number) => number;
96
+ export interface MarginalAxis {
97
+ scale: ScaleFn;
98
+ range: Vec2;
99
+ scale_type?: ScaleType;
100
+ format?: string;
101
+ tick_label?: (value: number) => string | undefined;
102
+ label?: string;
103
+ }
104
+ export type MarginalAxes = {
105
+ x1: MarginalAxis;
106
+ x2?: MarginalAxis;
107
+ y1: MarginalAxis;
108
+ y2?: MarginalAxis;
109
+ };
110
+ export declare const marginal_axis: (scale: ScaleFn, range: Vec2, axis: {
111
+ scale_type?: ScaleType;
112
+ format?: string;
113
+ label?: string;
114
+ }, tick_label?: (value: number) => string | undefined) => MarginalAxis;
115
+ export interface MarginalRenderContext extends MarginalComputeContext {
116
+ rect: Rect;
117
+ positional_scale: ScaleFn;
118
+ value_scale: ScaleFn;
119
+ baseline: number;
120
+ curves: MarginalSeriesCurve[];
121
+ series: MarginalSeriesInput[];
122
+ format?: string;
123
+ tick_label?: (value: number) => string | undefined;
124
+ axis_title?: string;
125
+ }
126
+ export declare const MARGINAL_HIT_TOLERANCE_PX = 10;
127
+ export interface MarginalHover {
128
+ side: MarginalSide;
129
+ x: number;
130
+ y: number;
131
+ color: string;
132
+ label?: string;
133
+ kind: MarginalCurve[`kind`];
134
+ pos: number;
135
+ pos0?: number;
136
+ pos1?: number;
137
+ value?: number;
138
+ config: ResolvedMarginalConfig;
139
+ scale_type: ScaleType;
140
+ format?: string;
141
+ pos_label?: string;
142
+ axis_title?: string;
143
+ }
144
+ export declare function marginal_hit(ctx: MarginalRenderContext, px: number, py: number): MarginalHover | null;
145
+ export declare const MARGINAL_DEFAULTS: {
146
+ type: MarginalType;
147
+ size: number;
148
+ gap: number;
149
+ placement: MarginalPlacement;
150
+ per_series: boolean;
151
+ bins: number;
152
+ bandwidth: "silverman";
153
+ stroke_width: number;
154
+ opacity: number;
155
+ value_axis: boolean;
156
+ };
157
+ export declare function normalize_marginals(prop: MarginalsProp | undefined, default_sides?: Partial<Record<MarginalSide, MarginalSideInput>>): ResolvedMarginals;
158
+ export declare function reserve_marginal_pad(resolved: ResolvedMarginals): Required<Sides>;
159
+ export declare const add_sides: (a: Required<Sides>, b: Required<Sides>) => Required<Sides>;
160
+ export declare const default_axis_for_side: (side: MarginalSide) => MarginalAxisBinding;
161
+ export declare const marginal_axis_presence: (top: boolean, right: boolean) => Record<MarginalSide, boolean>;
162
+ export declare function marginal_strip_rect(side: MarginalSide, pad: Required<Sides>, width: number, height: number, config: ResolvedMarginalConfig, has_axis: boolean): Rect;
163
+ export declare function marginal_value_scale(side: MarginalSide, rect: Rect, domain: Vec2): {
164
+ scale: (value: number) => number;
165
+ baseline: number;
166
+ };
167
+ export declare function compute_marginal_curve(positions: ArrayLike<number>, weights: ArrayLike<number> | undefined, config: ResolvedMarginalConfig, positional_range: Vec2, scale_type: ScaleType): MarginalCurve;
168
+ export declare const curves_max: (curves: MarginalCurve[]) => number;
169
+ export declare const default_marginal_label: (config: ResolvedMarginalConfig) => string;
170
+ export declare const marginal_value_format: (config: ResolvedMarginalConfig) => string;