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,4 +1,5 @@
1
1
  import type { AxisLoadError, BarStyle, DataLoaderFn, HistogramHandlerProps, PanConfig, RefLine, RefLineEvent } from '..';
2
+ import type { MarginalsProp } from '../core/marginals';
2
3
  import type { BasePlotProps, DataSeries, LegendConfig, PlotConfig } from '../core/types';
3
4
  import type { Snippet } from 'svelte';
4
5
  import type { HTMLAttributes } from 'svelte/elements';
@@ -11,13 +12,11 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & BasePlotProps & PlotCon
11
12
  selected_property?: string;
12
13
  mode?: `single` | `overlay`;
13
14
  tooltip?: Snippet<[HistogramHandlerProps]>;
14
- header_controls?: Snippet<[
15
- {
16
- height: number;
17
- width: number;
18
- fullscreen: boolean;
19
- }
20
- ]>;
15
+ header_controls?: Snippet<[{
16
+ height: number;
17
+ width: number;
18
+ fullscreen: boolean;
19
+ }]>;
21
20
  controls_extra?: Snippet<[Required<PlotConfig>]>;
22
21
  change?: (data: {
23
22
  value: number;
@@ -44,6 +43,7 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & BasePlotProps & PlotCon
44
43
  on_axis_change?: (axis: `x` | `x2` | `y` | `y2`, key: string, new_series: DataSeries[]) => void;
45
44
  on_error?: (error: AxisLoadError) => void;
46
45
  pan?: PanConfig;
46
+ marginals?: MarginalsProp;
47
47
  };
48
48
  declare const Histogram: import("svelte").Component<$$ComponentProps, {}, "mode" | "show_controls" | "fullscreen" | "series" | "bins" | "show_legend" | "selected_property" | "hovered" | "ref_lines" | "controls_open">;
49
49
  type Histogram = ReturnType<typeof Histogram>;
@@ -74,20 +74,16 @@
74
74
  }}
75
75
  >
76
76
  <div class="pane-row">
77
- <label>Bins:
78
- <input
79
- type="range"
80
- min="5"
81
- max="100"
82
- step="5"
83
- bind:value={bins}
84
- />
77
+ <label
78
+ >Bins:
79
+ <input type="range" min="5" max="100" step="5" bind:value={bins} />
85
80
  </label>
86
81
  <input type="number" min="5" max="100" step="5" bind:value={bins} />
87
82
  </div>
88
83
  {#if has_multiple_series}
89
84
  <div class="pane-row">
90
- <label>Mode:
85
+ <label
86
+ >Mode:
91
87
  <select bind:value={mode}>
92
88
  <option value="single">Single</option>
93
89
  <option value="overlay">Overlay</option>
@@ -96,7 +92,8 @@
96
92
  </div>
97
93
  {#if mode === `single`}
98
94
  <div class="pane-row">
99
- <label>Property:
95
+ <label
96
+ >Property:
100
97
  <select bind:value={selected_property}>
101
98
  <option value="">All</option>
102
99
  {#each series_options as option (option)}
@@ -125,15 +122,18 @@
125
122
  {#if visible_series.length === 1}
126
123
  <label>Fill: <input type="color" bind:value={bar.color} /></label>
127
124
  {/if}
128
- <label>Opacity:
125
+ <label
126
+ >Opacity:
129
127
  <input type="range" min="0" max="1" step="0.05" bind:value={bar.opacity} />
130
128
  <input type="number" min="0" max="1" step="0.05" bind:value={bar.opacity} />
131
129
  </label>
132
- <label>Stroke Width:
130
+ <label
131
+ >Stroke Width:
133
132
  <input type="range" min="0" max="5" step="0.1" bind:value={bar.stroke_width} />
134
133
  <input type="number" min="0" max="5" step="0.1" bind:value={bar.stroke_width} />
135
134
  </label>
136
- <label>Stroke Color:
135
+ <label
136
+ >Stroke Color:
137
137
  <input type="color" bind:value={bar.stroke_color} />
138
138
  <input
139
139
  type="range"
@@ -143,13 +143,7 @@
143
143
  bind:value={bar.stroke_opacity}
144
144
  title="Opacity"
145
145
  />
146
- <input
147
- type="number"
148
- min="0"
149
- max="1"
150
- step="0.05"
151
- bind:value={bar.stroke_opacity}
152
- />
146
+ <input type="number" min="0" max="1" step="0.05" bind:value={bar.stroke_opacity} />
153
147
  </label>
154
148
  {/if}
155
149
  </SettingsSection>
@@ -188,25 +182,33 @@
188
182
  class="pane-grid"
189
183
  style="grid-template-columns: 1fr 1fr"
190
184
  >
191
- <label>X: <select bind:value={x_axis.scale_type}>
185
+ <label
186
+ >X: <select bind:value={x_axis.scale_type}>
192
187
  <option value="linear">Linear</option>
193
188
  <option value="log">Log</option>
194
- </select></label>
189
+ </select></label
190
+ >
195
191
  {#if has_x2_points}
196
- <label>X2: <select bind:value={x2_axis.scale_type}>
192
+ <label
193
+ >X2: <select bind:value={x2_axis.scale_type}>
197
194
  <option value="linear">Linear</option>
198
195
  <option value="log">Log</option>
199
- </select></label>
196
+ </select></label
197
+ >
200
198
  {/if}
201
- <label>Y: <select bind:value={y_axis.scale_type}>
199
+ <label
200
+ >Y: <select bind:value={y_axis.scale_type}>
202
201
  <option value="linear">Linear</option>
203
202
  <option value="log">Log</option>
204
- </select></label>
203
+ </select></label
204
+ >
205
205
  {#if has_y2_points}
206
- <label>Y2: <select bind:value={y2_axis.scale_type}>
206
+ <label
207
+ >Y2: <select bind:value={y2_axis.scale_type}>
207
208
  <option value="linear">Linear</option>
208
209
  <option value="log">Log</option>
209
- </select></label>
210
+ </select></label
211
+ >
210
212
  {/if}
211
213
  </SettingsSection>
212
214
  </PlotControls>
@@ -17,6 +17,6 @@ type $$ComponentProps = Omit<PlotControlsProps, `children` | `post_children`> &
17
17
  has_y2_points?: boolean;
18
18
  children?: Snippet<[Required<PlotConfig>]>;
19
19
  };
20
- declare const HistogramControls: import("svelte").Component<$$ComponentProps, {}, "display" | "mode" | "show_controls" | "bins" | "show_legend" | "selected_property" | "controls_open" | "x_axis" | "y_axis" | "bar" | "x2_axis" | "y2_axis">;
20
+ declare const HistogramControls: import("svelte").Component<$$ComponentProps, {}, "display" | "mode" | "show_controls" | "x2_axis" | "y_axis" | "y2_axis" | "bins" | "show_legend" | "selected_property" | "controls_open" | "x_axis" | "bar">;
21
21
  type HistogramControls = ReturnType<typeof HistogramControls>;
22
22
  export default HistogramControls;
@@ -0,0 +1,31 @@
1
+ import type { Vec2 } from '../../math';
2
+ import type { AxisConfig, DataSeries, ScaleType } from '../core/types';
3
+ type RangeLimit = [number | null, number | null];
4
+ type BinConfig = {
5
+ x_domain: Vec2;
6
+ x2_domain: Vec2;
7
+ bin_count: number;
8
+ };
9
+ export declare function log_safe_range(axis: Pick<AxisConfig, `range` | `scale_type`>): RangeLimit;
10
+ export declare function compute_histogram_bins(entries: readonly {
11
+ series_data: DataSeries;
12
+ series_idx: number;
13
+ }[], { x_domain, x2_domain, has_x2, bin_count, series_color, }: BinConfig & {
14
+ has_x2: boolean;
15
+ series_color: (series_data: DataSeries) => string;
16
+ }): {
17
+ id: string | number;
18
+ series_idx: number;
19
+ label: string;
20
+ color: string;
21
+ bins: import("d3-array").Bin<number, number>[];
22
+ max_count: number;
23
+ x_axis: "x1" | "x2" | undefined;
24
+ y_axis: "y1" | "y2" | undefined;
25
+ }[];
26
+ export declare function compute_count_range(series_list: readonly DataSeries[], { x_domain, x2_domain, bin_count, scale_type, y_limit, range_padding, }: BinConfig & {
27
+ scale_type: ScaleType;
28
+ y_limit: RangeLimit;
29
+ range_padding: number;
30
+ }): Vec2;
31
+ export {};
@@ -0,0 +1,70 @@
1
+ // Pure binning/range helpers extracted from Histogram.svelte (no reactivity, no pixel scales) so the numeric logic is unit-testable.
2
+ import { bin, max } from 'd3-array';
3
+ import { get_nice_data_range } from '../core/scales';
4
+ import { get_scale_type_name } from '../core/types';
5
+ // On a log axis any bound <= 0 is invalid, so treat it as unset (null): callers then fall back to
6
+ // the positive count-based bound rather than pinning the log domain at <= 0 (a broken scale).
7
+ export function log_safe_range(axis) {
8
+ const [lo, hi] = axis.range ?? [null, null];
9
+ if (get_scale_type_name(axis.scale_type ?? `linear`) !== `log`)
10
+ return [lo, hi];
11
+ // drop any bound <= 0 (guard the type first: `null <= 0` is true in JS)
12
+ const drop_non_positive = (bound) => typeof bound === `number` && bound <= 0 ? null : bound;
13
+ return [drop_non_positive(lo), drop_non_positive(hi)];
14
+ }
15
+ // Bin each selected series over the domain of the x-axis it renders on (d3 bin() drops
16
+ // out-of-domain values). Pad-independent so the obstacle field can reuse it.
17
+ export function compute_histogram_bins(entries, { x_domain, x2_domain, has_x2, bin_count, series_color, }) {
18
+ const hist_generator = bin().domain([x_domain[0], x_domain[1]]).thresholds(bin_count);
19
+ const x2_hist_generator = has_x2
20
+ ? bin().domain([x2_domain[0], x2_domain[1]]).thresholds(bin_count)
21
+ : null;
22
+ return entries.map(({ series_data, series_idx }) => {
23
+ const use_x2 = series_data.x_axis === `x2`;
24
+ const active_hist = use_x2 && x2_hist_generator ? x2_hist_generator : hist_generator;
25
+ const bins_arr = active_hist(series_data.y);
26
+ return {
27
+ id: series_data.id ?? series_idx,
28
+ series_idx,
29
+ label: series_data.label ?? `Series ${series_idx + 1}`,
30
+ color: series_color(series_data),
31
+ bins: bins_arr,
32
+ max_count: max(bins_arr, (data) => data.length) ?? 0,
33
+ x_axis: series_data.x_axis,
34
+ y_axis: series_data.y_axis,
35
+ };
36
+ });
37
+ }
38
+ // Compute a nice [min, max] count range for a set of series, binning each over its own x-domain.
39
+ // On log count axes the lower bound sits just below the smallest non-empty bin so singleton tail
40
+ // bins don't collapse to zero height; linear/arcsinh axes start from 0.
41
+ export function compute_count_range(series_list, { x_domain, x2_domain, bin_count, scale_type, y_limit, range_padding, }) {
42
+ const type_name = get_scale_type_name(scale_type);
43
+ // no-data fallback: a positive floor on log (counts can't be <= 0), else 0
44
+ const empty_range = [type_name === `log` ? 1 : 0, 1];
45
+ if (series_list.length === 0)
46
+ return empty_range;
47
+ const counts = series_list.flatMap((srs) => {
48
+ const hist = bin()
49
+ .domain(srs.x_axis === `x2` ? x2_domain : x_domain)
50
+ .thresholds(bin_count);
51
+ return hist(srs.y)
52
+ .map((data) => data.length)
53
+ .filter((count) => count > 0);
54
+ });
55
+ const max_count = Math.max(0, ...counts);
56
+ if (max_count <= 0)
57
+ return empty_range;
58
+ const min_count = type_name === `log` ? Math.min(...counts) : 0;
59
+ const [y0, y1] = get_nice_data_range([
60
+ { x: min_count, y: 0 },
61
+ { x: max_count, y: 0 },
62
+ ], ({ x }) => x, y_limit, scale_type, range_padding, false);
63
+ // For log count axes, start just below the smallest non-empty bin so singleton tail bins
64
+ // don't collapse to zero height at the baseline. y_limit is pre-sanitized log-safe, so a null
65
+ // (incl. dropped non-positive) lower correctly falls back to the positive minimum.
66
+ if (type_name === `log`)
67
+ return [y_limit[0] ?? min_count / 1.1, y1];
68
+ // For linear/arcsinh, start from 0
69
+ return [Math.max(0, y0), y1];
70
+ }
@@ -1,2 +1,3 @@
1
1
  export { default as Histogram } from './Histogram.svelte';
2
2
  export { default as HistogramControls } from './HistogramControls.svelte';
3
+ export * from './histogram';
@@ -1,2 +1,3 @@
1
1
  export { default as Histogram } from './Histogram.svelte';
2
2
  export { default as HistogramControls } from './HistogramControls.svelte';
3
+ export * from './histogram';
@@ -6,3 +6,4 @@ export * from './sankey';
6
6
  export * from './scatter';
7
7
  export * from './scatter-3d';
8
8
  export * from './sunburst';
9
+ export * from './treemap';
@@ -8,3 +8,4 @@ export * from './sankey';
8
8
  export * from './scatter';
9
9
  export * from './scatter-3d';
10
10
  export * from './sunburst';
11
+ export * from './treemap';
@@ -18,13 +18,14 @@
18
18
  } from '..'
19
19
  import { DEFAULT_SERIES_COLORS, PlotLegend, PlotTooltip, SankeyControls } from '..'
20
20
  import { closest_data_idx } from '../core/interactions'
21
- import { compute_element_placement, constrain_tooltip_position, filter_padding } from '../core/layout'
22
- import type { Sides } from '../core/layout'
23
21
  import {
24
- compute_sankey_layout,
25
- type PositionedLink,
26
- type PositionedNode,
27
- } from './sankey'
22
+ compute_element_placement,
23
+ constrain_tooltip_position,
24
+ filter_padding,
25
+ } from '../core/layout'
26
+ import type { Sides } from '../core/layout'
27
+ import { compute_sankey_layout } from './sankey'
28
+ import type { PositionedLink, PositionedNode } from './sankey'
28
29
  import { unique_id } from '../core/utils'
29
30
  import { DEFAULTS } from '../../settings'
30
31
  import { type Snippet, untrack } from 'svelte'
@@ -67,47 +68,44 @@
67
68
  header_controls,
68
69
  controls_extra,
69
70
  ...rest
70
- }: HTMLAttributes<HTMLDivElement> & Omit<BasePlotProps, `change`> & {
71
- data?: SankeyData<Metadata>
72
- orientation?: SankeyOrientation
73
- node_width?: number
74
- node_padding?: number
75
- node_align?: SankeyNodeAlign
76
- iterations?: number
77
- link_opacity?: number
78
- link_color_mode?: SankeyLinkColorMode
79
- show_node_labels?: boolean
80
- node_label?: (node: PositionedNode) => string
81
- value_format?: string
82
- padding?: Sides
83
- legend?: LegendConfig | null
84
- show_legend?: boolean
85
- tooltip?: Snippet<[SankeyHandlerProps<Metadata>]>
86
- // Fully replace the default node rect / link ribbon. NOTE: this also replaces the
87
- // built-in hover/focus/click + tooltip wiring, so re-implement any interactivity
88
- // you need inside the snippet.
89
- node_content?: Snippet<[{ node: PositionedNode; color: string }]>
90
- link_content?: Snippet<[{ link: PositionedLink; color: string }]>
91
- change?: (data: SankeyHandlerProps<Metadata> | null) => void
92
- on_node_click?: (
93
- data: SankeyNodeHandlerProps<Metadata> & { event: MouseEvent | KeyboardEvent },
94
- ) => void
95
- on_node_hover?: (
96
- data:
97
- | (SankeyNodeHandlerProps<Metadata> & { event: MouseEvent | FocusEvent })
98
- | null,
99
- ) => void
100
- on_link_click?: (
101
- data: SankeyLinkHandlerProps<Metadata> & { event: MouseEvent | KeyboardEvent },
102
- ) => void
103
- on_link_hover?: (
104
- data:
105
- | (SankeyLinkHandlerProps<Metadata> & { event: MouseEvent | FocusEvent })
106
- | null,
107
- ) => void
108
- header_controls?: Snippet<[{ height: number; width: number; fullscreen: boolean }]>
109
- controls_extra?: Snippet<[{ orientation: SankeyOrientation }]>
110
- } = $props()
71
+ }: HTMLAttributes<HTMLDivElement> &
72
+ Omit<BasePlotProps, `change`> & {
73
+ data?: SankeyData<Metadata>
74
+ orientation?: SankeyOrientation
75
+ node_width?: number
76
+ node_padding?: number
77
+ node_align?: SankeyNodeAlign
78
+ iterations?: number
79
+ link_opacity?: number
80
+ link_color_mode?: SankeyLinkColorMode
81
+ show_node_labels?: boolean
82
+ node_label?: (node: PositionedNode) => string
83
+ value_format?: string
84
+ padding?: Sides
85
+ legend?: LegendConfig | null
86
+ show_legend?: boolean
87
+ tooltip?: Snippet<[SankeyHandlerProps<Metadata>]>
88
+ // Fully replace the default node rect / link ribbon. NOTE: this also replaces the
89
+ // built-in hover/focus/click + tooltip wiring, so re-implement any interactivity
90
+ // you need inside the snippet.
91
+ node_content?: Snippet<[{ node: PositionedNode; color: string }]>
92
+ link_content?: Snippet<[{ link: PositionedLink; color: string }]>
93
+ change?: (data: SankeyHandlerProps<Metadata> | null) => void
94
+ on_node_click?: (
95
+ data: SankeyNodeHandlerProps<Metadata> & { event: MouseEvent | KeyboardEvent },
96
+ ) => void
97
+ on_node_hover?: (
98
+ data: (SankeyNodeHandlerProps<Metadata> & { event: MouseEvent | FocusEvent }) | null,
99
+ ) => void
100
+ on_link_click?: (
101
+ data: SankeyLinkHandlerProps<Metadata> & { event: MouseEvent | KeyboardEvent },
102
+ ) => void
103
+ on_link_hover?: (
104
+ data: (SankeyLinkHandlerProps<Metadata> & { event: MouseEvent | FocusEvent }) | null,
105
+ ) => void
106
+ header_controls?: Snippet<[{ height: number; width: number; fullscreen: boolean }]>
107
+ controls_extra?: Snippet<[{ orientation: SankeyOrientation }]>
108
+ } = $props()
111
109
 
112
110
  let [width, height] = $state([0, 0])
113
111
  let wrapper: HTMLDivElement | undefined = $state()
@@ -129,8 +127,8 @@
129
127
 
130
128
  // Resolved node colors (per node_idx), explicit color or cycled palette
131
129
  let node_colors = $derived(
132
- data.nodes.map((node, idx) =>
133
- node.color ?? DEFAULT_SERIES_COLORS[idx % DEFAULT_SERIES_COLORS.length]
130
+ data.nodes.map(
131
+ (node, idx) => node.color ?? DEFAULT_SERIES_COLORS[idx % DEFAULT_SERIES_COLORS.length],
134
132
  ),
135
133
  )
136
134
 
@@ -163,9 +161,7 @@
163
161
  })
164
162
 
165
163
  // node_idx -> positioned node (array order is preserved by d3-sankey, but map is safer)
166
- let node_by_idx = $derived(
167
- new Map(layout.nodes.map((node) => [node.node_idx, node])),
168
- )
164
+ let node_by_idx = $derived(new Map(layout.nodes.map((node) => [node.node_idx, node])))
169
165
 
170
166
  const node_id_at = (node_idx: number): string | number =>
171
167
  node_by_idx.get(node_idx)?.id ?? node_idx
@@ -223,7 +219,10 @@
223
219
 
224
220
  const link_stroke_opacity = (link: PositionedLink): number => {
225
221
  if (link_dim(link)) return link_opacity * 0.15
226
- if (active) return active.links.has(link.link_idx) ? Math.min(1, link_opacity + 0.35) : link_opacity * 0.25
222
+ if (active)
223
+ return active.links.has(link.link_idx)
224
+ ? Math.min(1, link_opacity + 0.35)
225
+ : link_opacity * 0.25
227
226
  return link_opacity
228
227
  }
229
228
 
@@ -274,7 +273,8 @@
274
273
  hover_info = make_node_props(node)
275
274
  hover_pos = event_pos(event) ?? node_center(node)
276
275
  change(hover_info)
277
- if (event) on_node_hover?.({ ...(hover_info as SankeyNodeHandlerProps<Metadata>), event })
276
+ if (event)
277
+ on_node_hover?.({ ...(hover_info as SankeyNodeHandlerProps<Metadata>), event })
278
278
  } else {
279
279
  hovered_node = null
280
280
  hover_info = null
@@ -291,7 +291,8 @@
291
291
  hover_info = make_link_props(link)
292
292
  hover_pos = event_pos(event) ?? { x: pad.l + link.mid.x, y: pad.t + link.mid.y }
293
293
  change(hover_info)
294
- if (event) on_link_hover?.({ ...(hover_info as SankeyLinkHandlerProps<Metadata>), event })
294
+ if (event)
295
+ on_link_hover?.({ ...(hover_info as SankeyLinkHandlerProps<Metadata>), event })
295
296
  } else {
296
297
  hovered_link = null
297
298
  hover_info = null
@@ -302,12 +303,12 @@
302
303
 
303
304
  const link_from_event = (event: Event): PositionedLink | null => {
304
305
  const idx = closest_data_idx(event, `data-sankey-link-idx`, svg_element)
305
- return idx == null ? null : layout.links[idx] ?? null
306
+ return idx == null ? null : (layout.links[idx] ?? null)
306
307
  }
307
308
 
308
309
  const node_from_event = (event: Event): PositionedNode | null => {
309
310
  const idx = closest_data_idx(event, `data-sankey-node-idx`, svg_element)
310
- return idx == null ? null : node_by_idx.get(idx) ?? null
311
+ return idx == null ? null : (node_by_idx.get(idx) ?? null)
311
312
  }
312
313
 
313
314
  function handle_link_hover_event(event: MouseEvent | FocusEvent) {
@@ -367,7 +368,7 @@
367
368
  label: node.label ?? `${node.id ?? idx}`,
368
369
  visible: !muted_nodes.has(node.id ?? idx),
369
370
  display_style: { symbol_type: `Square` as const, symbol_color: node_colors[idx] },
370
- }))
371
+ })),
371
372
  )
372
373
 
373
374
  function toggle_node(series_idx: number) {
@@ -412,7 +413,7 @@
412
413
  bind:clientWidth={width}
413
414
  bind:clientHeight={height}
414
415
  {...rest}
415
- class="sankey {rest.class ?? ``}"
416
+ class={[`sankey`, rest.class]}
416
417
  class:fullscreen
417
418
  >
418
419
  {#if width && height}
@@ -520,7 +521,9 @@
520
521
  rx="1"
521
522
  role={on_node_click ? `button` : undefined}
522
523
  tabindex={on_node_click ? 0 : undefined}
523
- aria-label={on_node_click ? `${node.label ?? node.id}: ${node.value}` : undefined}
524
+ aria-label={on_node_click
525
+ ? `${node.label ?? node.id}: ${node.value}`
526
+ : undefined}
524
527
  style:cursor={on_node_click ? `pointer` : `default`}
525
528
  />
526
529
  {/if}
@@ -531,8 +534,8 @@
531
534
  x={lbl.x}
532
535
  y={lbl.y}
533
536
  text-anchor={lbl.anchor}
534
- dominant-baseline={lbl.baseline}
535
- >{node_text(node)}</text>
537
+ dominant-baseline={lbl.baseline}>{node_text(node)}</text
538
+ >
536
539
  {/if}
537
540
  </g>
538
541
  {/each}
@@ -553,9 +556,10 @@
553
556
  )}
554
557
  <!-- Solid chip bg (PlotTooltip auto-contrasts text). Links use the source node
555
558
  color so gradient/static ribbons (url(...)/var(...)) still get a readable color. -->
556
- {@const tip_bg = hover_info.type === `node`
557
- ? hover_info.color
558
- : node_colors[hover_info.source_idx] ?? `rgba(0, 0, 0, 0.7)`}
559
+ {@const tip_bg =
560
+ hover_info.type === `node`
561
+ ? hover_info.color
562
+ : (node_colors[hover_info.source_idx] ?? `rgba(0, 0, 0, 0.7)`)}
559
563
  <PlotTooltip
560
564
  x={tip.x}
561
565
  y={tip.y}
@@ -566,13 +570,13 @@
566
570
  {#if tooltip}
567
571
  {@render tooltip(hover_info)}
568
572
  {:else if hover_info.type === `node`}
569
- <strong>{hover_info.label ?? hover_info.id}</strong>: {
570
- format_value(hover_info.value, value_format)
571
- }
573
+ <strong>{hover_info.label ?? hover_info.id}</strong>: {format_value(
574
+ hover_info.value,
575
+ value_format,
576
+ )}
572
577
  {:else}
573
- {hover_info.source_label ?? hover_info.source_idx} &rarr; {
574
- hover_info.target_label ?? hover_info.target_idx
575
- }: {format_value(hover_info.value, value_format)}
578
+ {hover_info.source_label ?? hover_info.source_idx} &rarr; {hover_info.target_label ??
579
+ hover_info.target_idx}: {format_value(hover_info.value, value_format)}
576
580
  {/if}
577
581
  </PlotTooltip>
578
582
  {/if}
@@ -586,7 +590,7 @@
586
590
  series_data={legend_data}
587
591
  on_toggle={legend?.on_toggle ?? toggle_node}
588
592
  on_item_hover={(item) =>
589
- (hovered_node = item != null && item.series_idx >= 0 ? item.series_idx : null)}
593
+ (hovered_node = item != null && item.series_idx >= 0 ? item.series_idx : null)}
590
594
  style={`position: absolute; left: ${legend_left}px; top: ${legend_top}px; pointer-events: auto; ${
591
595
  legend?.style ?? ``
592
596
  }`}
@@ -666,7 +670,9 @@
666
670
  .sankey :global(.pane-toggle),
667
671
  .sankey .header-controls {
668
672
  opacity: 0;
669
- transition: opacity 0.2s, background-color 0.2s;
673
+ transition:
674
+ opacity 0.2s,
675
+ background-color 0.2s;
670
676
  }
671
677
  .sankey:hover :global(.pane-toggle),
672
678
  .sankey:hover .header-controls,
@@ -1,6 +1,6 @@
1
1
  import type { BasePlotProps, LegendConfig, SankeyData, SankeyHandlerProps, SankeyLinkColorMode, SankeyLinkHandlerProps, SankeyNodeAlign, SankeyNodeHandlerProps, SankeyOrientation } from '..';
2
2
  import type { Sides } from '../core/layout';
3
- import { type PositionedLink, type PositionedNode } from './sankey';
3
+ import type { PositionedLink, PositionedNode } from './sankey';
4
4
  import { type Snippet } from 'svelte';
5
5
  import type { HTMLAttributes } from 'svelte/elements';
6
6
  declare function $$render<Metadata extends Record<string, unknown> = Record<string, unknown>>(): {
@@ -51,7 +51,7 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
51
51
  }]>;
52
52
  };
53
53
  exports: {};
54
- bindings: "data" | "orientation" | "show_controls" | "fullscreen" | "hovered" | "controls_open" | "node_align" | "node_width" | "node_padding" | "link_opacity" | "show_node_labels";
54
+ bindings: "orientation" | "show_controls" | "data" | "fullscreen" | "hovered" | "controls_open" | "node_align" | "node_width" | "node_padding" | "link_opacity" | "show_node_labels";
55
55
  slots: {};
56
56
  events: {};
57
57
  };
@@ -59,7 +59,7 @@ declare class __sveltets_Render<Metadata extends Record<string, unknown> = Recor
59
59
  props(): ReturnType<typeof $$render<Metadata>>['props'];
60
60
  events(): ReturnType<typeof $$render<Metadata>>['events'];
61
61
  slots(): ReturnType<typeof $$render<Metadata>>['slots'];
62
- bindings(): "data" | "orientation" | "show_controls" | "fullscreen" | "hovered" | "controls_open" | "node_align" | "node_width" | "node_padding" | "link_opacity" | "show_node_labels";
62
+ bindings(): "orientation" | "show_controls" | "data" | "fullscreen" | "hovered" | "controls_open" | "node_align" | "node_width" | "node_padding" | "link_opacity" | "show_node_labels";
63
63
  exports(): {};
64
64
  }
65
65
  interface $$IsomorphicComponent {
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { SettingsSection } from '../../layout'
2
+ import { NumberRangeInput, SettingsSection } from '../../layout'
3
3
  import type { SankeyNodeAlign, SankeyOrientation } from '..'
4
4
  import ControlPane from '../core/components/ControlPane.svelte'
5
5
  import { DEFAULTS } from '../../settings'
@@ -74,21 +74,27 @@
74
74
  <option value="center">Center</option>
75
75
  </select>
76
76
  </label>
77
- <label style="flex: 1 1 100%">
78
- Node width:
79
- <input type="range" min="4" max="60" step="1" bind:value={node_width} />
80
- <input type="number" min="4" max="60" step="1" bind:value={node_width} />
81
- </label>
82
- <label style="flex: 1 1 100%">
83
- Node padding:
84
- <input type="range" min="0" max="40" step="1" bind:value={node_padding} />
85
- <input type="number" min="0" max="40" step="1" bind:value={node_padding} />
86
- </label>
87
- <label style="flex: 1 1 100%">
88
- Link opacity:
89
- <input type="range" min="0.05" max="1" step="0.05" bind:value={link_opacity} />
90
- <input type="number" min="0.05" max="1" step="0.05" bind:value={link_opacity} />
91
- </label>
77
+ <NumberRangeInput
78
+ min={4}
79
+ max={60}
80
+ step={1}
81
+ bind:value={node_width}
82
+ style="flex: 1 1 100%">Node width:</NumberRangeInput
83
+ >
84
+ <NumberRangeInput
85
+ min={0}
86
+ max={40}
87
+ step={1}
88
+ bind:value={node_padding}
89
+ style="flex: 1 1 100%">Node padding:</NumberRangeInput
90
+ >
91
+ <NumberRangeInput
92
+ min={0.05}
93
+ max={1}
94
+ step={0.05}
95
+ bind:value={link_opacity}
96
+ style="flex: 1 1 100%">Link opacity:</NumberRangeInput
97
+ >
92
98
  <label style="flex: 1 1 100%">
93
99
  <input type="checkbox" bind:checked={show_node_labels} />
94
100
  Show node labels
@@ -2,6 +2,7 @@
2
2
  // Single source of truth for node/link positioning math so the component stays
3
3
  // declarative and the layout is independently unit-testable.
4
4
  import { sankey as d3_sankey, sankeyCenter, sankeyJustify, sankeyLeft, sankeyRight, } from 'd3-sankey';
5
+ import { DEFAULTS } from '../../settings';
5
6
  const ALIGN_FNS = {
6
7
  left: sankeyLeft,
7
8
  right: sankeyRight,
@@ -75,7 +76,8 @@ function horizontal_link_path(link) {
75
76
  // Compute node boxes and link ribbon paths in screen space.
76
77
  // Clones input so the (reactive) user data is never mutated by d3-sankey.
77
78
  export function compute_sankey_layout(data, opts) {
78
- const { width, height, node_width = 24, node_padding = 12, node_align = `justify`, orientation = `horizontal`, iterations = 6, } = opts;
79
+ // Fallbacks derive from DEFAULTS.sankey so component and helper defaults can't drift
80
+ const { width, height, node_width = DEFAULTS.sankey.node_width, node_padding = DEFAULTS.sankey.node_padding, node_align = DEFAULTS.sankey.node_align, orientation = DEFAULTS.sankey.orientation, iterations = DEFAULTS.sankey.iterations, } = opts;
79
81
  // All-zero link values would make d3-sankey divide by zero (NaN ribbon paths)
80
82
  const has_flow = data.links.some((link) => link.value > 0);
81
83
  if (!(width > 0) || !(height > 0) || data.nodes.length === 0 || !has_flow)