matterviz 0.4.1 → 0.4.3

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 (499) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +48 -60
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/api/optimade.js +10 -7
  6. package/dist/app.css +68 -0
  7. package/dist/brillouin/BrillouinZone.svelte +90 -91
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  9. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  12. package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  14. package/dist/brillouin/compute.js +10 -16
  15. package/dist/brillouin/geometry.js +2 -2
  16. package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
  17. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
  20. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  21. package/dist/chempot-diagram/async-compute.svelte.js +13 -14
  22. package/dist/chempot-diagram/color.d.ts +21 -1
  23. package/dist/chempot-diagram/color.js +70 -1
  24. package/dist/chempot-diagram/compute.d.ts +7 -0
  25. package/dist/chempot-diagram/compute.js +85 -26
  26. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  27. package/dist/chempot-diagram/export.js +1 -6
  28. package/dist/chempot-diagram/temperature.js +9 -10
  29. package/dist/colors/index.d.ts +0 -4
  30. package/dist/colors/index.js +19 -20
  31. package/dist/composition/BarChart.svelte +30 -26
  32. package/dist/composition/BubbleChart.svelte +17 -17
  33. package/dist/composition/Composition.svelte +10 -19
  34. package/dist/composition/Formula.svelte +20 -27
  35. package/dist/composition/FormulaFilter.svelte +115 -184
  36. package/dist/composition/PieChart.svelte +55 -41
  37. package/dist/composition/format.js +7 -9
  38. package/dist/composition/index.d.ts +2 -0
  39. package/dist/composition/index.js +14 -0
  40. package/dist/composition/parse.d.ts +2 -2
  41. package/dist/composition/parse.js +61 -115
  42. package/dist/constants.d.ts +0 -1
  43. package/dist/constants.js +17 -26
  44. package/dist/convex-hull/ConvexHull.svelte +12 -15
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +93 -94
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +127 -186
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +131 -180
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  53. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  54. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  55. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  56. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  57. package/dist/convex-hull/StructurePopup.svelte +18 -22
  58. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  59. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  60. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  61. package/dist/convex-hull/gas-thermodynamics.js +21 -53
  62. package/dist/convex-hull/helpers.d.ts +8 -10
  63. package/dist/convex-hull/helpers.js +37 -43
  64. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  65. package/dist/convex-hull/thermodynamics.js +37 -44
  66. package/dist/coordination/CoordinationBarPlot.svelte +49 -53
  67. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  68. package/dist/coordination/calc-coordination.d.ts +1 -1
  69. package/dist/coordination/calc-coordination.js +28 -25
  70. package/dist/element/BohrAtom.svelte +5 -9
  71. package/dist/element/ElementHeading.svelte +4 -1
  72. package/dist/element/ElementPhoto.svelte +11 -9
  73. package/dist/element/ElementStats.svelte +12 -10
  74. package/dist/element/ElementTile.svelte +44 -67
  75. package/dist/element/Nucleus.svelte +4 -2
  76. package/dist/element/data.d.ts +3 -2
  77. package/dist/element/data.js +5 -1
  78. package/dist/element/helpers.d.ts +4 -0
  79. package/dist/element/helpers.js +18 -0
  80. package/dist/element/index.d.ts +2 -5
  81. package/dist/element/index.js +4 -19
  82. package/dist/feedback/DragOverlay.svelte +5 -5
  83. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  84. package/dist/feedback/StatusMessage.svelte +7 -4
  85. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  86. package/dist/fermi-surface/FermiSurface.svelte +35 -44
  87. package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
  88. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  89. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  90. package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
  91. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  92. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  93. package/dist/fermi-surface/compute.js +25 -58
  94. package/dist/fermi-surface/parse.js +54 -88
  95. package/dist/file-viewer/JsonBrowser.svelte +1043 -0
  96. package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
  97. package/dist/file-viewer/PlotPanel.svelte +350 -0
  98. package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
  99. package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
  100. package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
  101. package/dist/file-viewer/detect.d.ts +11 -0
  102. package/dist/file-viewer/detect.js +381 -0
  103. package/dist/file-viewer/eligibility.d.ts +4 -0
  104. package/dist/file-viewer/eligibility.js +53 -0
  105. package/dist/file-viewer/host-protocol.d.ts +50 -0
  106. package/dist/file-viewer/host-transfer.d.ts +25 -0
  107. package/dist/file-viewer/host-transfer.js +42 -0
  108. package/dist/file-viewer/index.d.ts +5 -0
  109. package/dist/file-viewer/index.js +5 -0
  110. package/dist/file-viewer/main.d.ts +44 -0
  111. package/dist/file-viewer/main.js +535 -0
  112. package/dist/file-viewer/parse.d.ts +9 -0
  113. package/dist/file-viewer/parse.js +170 -0
  114. package/dist/file-viewer/plot-utils.d.ts +24 -0
  115. package/dist/file-viewer/plot-utils.js +191 -0
  116. package/dist/file-viewer/types.d.ts +4 -0
  117. package/dist/file-viewer/types.js +5 -0
  118. package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
  119. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  120. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  121. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  122. package/dist/heatmap-matrix/index.d.ts +5 -0
  123. package/dist/icons.d.ts +4 -0
  124. package/dist/icons.js +4 -0
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +1 -1
  127. package/dist/io/ExportPane.svelte +11 -7
  128. package/dist/io/decompress.d.ts +4 -1
  129. package/dist/io/decompress.js +24 -36
  130. package/dist/io/export.d.ts +11 -4
  131. package/dist/io/export.js +75 -19
  132. package/dist/io/fetch.d.ts +0 -3
  133. package/dist/io/fetch.js +0 -11
  134. package/dist/io/file-drop.js +60 -35
  135. package/dist/io/index.d.ts +0 -1
  136. package/dist/io/index.js +2 -9
  137. package/dist/io/is-binary.d.ts +9 -0
  138. package/dist/io/is-binary.js +45 -1
  139. package/dist/io/url-drop.d.ts +2 -0
  140. package/dist/io/url-drop.js +40 -40
  141. package/dist/isosurface/Isosurface.svelte +700 -215
  142. package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
  143. package/dist/isosurface/IsosurfaceControls.svelte +590 -116
  144. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
  145. package/dist/isosurface/VolumeSlice.svelte +224 -0
  146. package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
  147. package/dist/isosurface/coloring.d.ts +20 -0
  148. package/dist/isosurface/coloring.js +118 -0
  149. package/dist/isosurface/geometry-worker-types.d.ts +38 -0
  150. package/dist/isosurface/geometry.worker.d.ts +1 -0
  151. package/dist/isosurface/geometry.worker.js +59 -0
  152. package/dist/isosurface/grid.d.ts +10 -0
  153. package/dist/isosurface/grid.js +31 -0
  154. package/dist/isosurface/index.d.ts +4 -0
  155. package/dist/isosurface/index.js +4 -0
  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 +6 -6
  159. package/dist/isosurface/profile.d.ts +12 -0
  160. package/dist/isosurface/profile.js +19 -0
  161. package/dist/isosurface/sampling.d.ts +34 -0
  162. package/dist/isosurface/sampling.js +408 -0
  163. package/dist/isosurface/slice-rendering.d.ts +13 -0
  164. package/dist/isosurface/slice-rendering.js +79 -0
  165. package/dist/isosurface/slice.d.ts +22 -2
  166. package/dist/isosurface/slice.js +200 -116
  167. package/dist/isosurface/types.d.ts +24 -1
  168. package/dist/isosurface/types.js +120 -8
  169. package/dist/json-path.d.ts +4 -0
  170. package/dist/json-path.js +89 -0
  171. package/dist/labels.d.ts +6 -2
  172. package/dist/labels.js +44 -14
  173. package/dist/layout/FullscreenButton.svelte +2 -1
  174. package/dist/layout/FullscreenToggle.svelte +10 -4
  175. package/dist/layout/InfoCard.svelte +8 -21
  176. package/dist/layout/InfoTag.svelte +1 -3
  177. package/dist/layout/NumberRangeInput.svelte +46 -0
  178. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  179. package/dist/layout/PropertyFilter.svelte +2 -6
  180. package/dist/layout/SettingsSection.svelte +57 -62
  181. package/dist/layout/SettingsSection.svelte.d.ts +6 -7
  182. package/dist/layout/SubpageGrid.svelte +3 -1
  183. package/dist/layout/ViewerChrome.svelte +16 -11
  184. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  185. package/dist/layout/fullscreen.js +3 -5
  186. package/dist/layout/fullscreen.svelte.js +1 -2
  187. package/dist/layout/index.d.ts +1 -0
  188. package/dist/layout/index.js +1 -0
  189. package/dist/layout/json-tree/JsonNode.svelte +22 -59
  190. package/dist/layout/json-tree/JsonTree.svelte +101 -172
  191. package/dist/layout/json-tree/JsonValue.svelte +9 -32
  192. package/dist/layout/json-tree/utils.d.ts +0 -3
  193. package/dist/layout/json-tree/utils.js +50 -188
  194. package/dist/marching-cubes.d.ts +8 -1
  195. package/dist/marching-cubes.js +115 -48
  196. package/dist/math.d.ts +5 -2
  197. package/dist/math.js +48 -38
  198. package/dist/overlays/ContextMenu.svelte +19 -34
  199. package/dist/overlays/CopyButton.svelte +11 -5
  200. package/dist/overlays/DragControlTab.svelte +6 -1
  201. package/dist/overlays/DraggablePane.svelte +110 -74
  202. package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
  203. package/dist/overlays/GlassChip.svelte +32 -0
  204. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  205. package/dist/overlays/InfoPaneCards.svelte +11 -23
  206. package/dist/overlays/index.d.ts +7 -0
  207. package/dist/overlays/index.js +26 -0
  208. package/dist/overlays/portal.d.ts +2 -0
  209. package/dist/overlays/portal.js +14 -0
  210. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  211. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  212. package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
  213. package/dist/periodic-table/TableInset.svelte +9 -4
  214. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
  215. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  216. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  217. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  218. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  219. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  220. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  221. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  222. package/dist/phase-diagram/build-diagram.js +4 -9
  223. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  224. package/dist/phase-diagram/parse.js +15 -15
  225. package/dist/phase-diagram/svg-to-diagram.js +28 -27
  226. package/dist/phase-diagram/utils.js +2 -3
  227. package/dist/plot/bar/BarPlot.svelte +461 -426
  228. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  229. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  230. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  231. package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
  232. package/dist/plot/bar/data.d.ts +5 -4
  233. package/dist/plot/bar/data.js +2 -1
  234. package/dist/plot/box/BoxPlot.svelte +322 -226
  235. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  236. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  237. package/dist/plot/box/box-plot.js +1 -1
  238. package/dist/plot/core/auto-place.d.ts +1 -1
  239. package/dist/plot/core/auto-place.js +2 -2
  240. package/dist/plot/core/axis-utils.d.ts +12 -7
  241. package/dist/plot/core/axis-utils.js +48 -48
  242. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  243. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  244. package/dist/plot/core/components/ColorBar.svelte +101 -106
  245. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  246. package/dist/plot/core/components/FillArea.svelte +10 -17
  247. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  248. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  249. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  250. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  251. package/dist/plot/core/components/Line.svelte +18 -9
  252. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  253. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  254. package/dist/plot/core/components/PlotControls.svelte +65 -41
  255. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  256. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  257. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  258. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  259. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  260. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  261. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  262. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  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 +27 -474
  271. package/dist/plot/core/data-transform.d.ts +1 -2
  272. package/dist/plot/core/data-transform.js +9 -15
  273. package/dist/plot/core/fill-utils.d.ts +3 -1
  274. package/dist/plot/core/fill-utils.js +28 -6
  275. package/dist/plot/core/index.d.ts +1 -0
  276. package/dist/plot/core/index.js +1 -0
  277. package/dist/plot/core/interactions.js +0 -2
  278. package/dist/plot/core/layout.d.ts +15 -6
  279. package/dist/plot/core/layout.js +57 -38
  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 +2 -4
  283. package/dist/plot/core/pan-zoom.svelte.js +34 -17
  284. package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -21
  286. package/dist/plot/core/reference-line.js +1 -1
  287. package/dist/plot/core/scales.d.ts +23 -0
  288. package/dist/plot/core/scales.js +39 -13
  289. package/dist/plot/core/svg.js +0 -1
  290. package/dist/plot/core/types/fills.d.ts +101 -0
  291. package/dist/plot/core/types/fills.js +15 -0
  292. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  293. package/dist/plot/core/types/plot-3d.js +4 -0
  294. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  295. package/dist/plot/core/types/reference-lines.js +9 -0
  296. package/dist/plot/core/types.d.ts +29 -324
  297. package/dist/plot/core/types.js +23 -20
  298. package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
  299. package/dist/plot/core/utils/hierarchy-chart.js +191 -0
  300. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  301. package/dist/plot/core/utils/hierarchy-labels.js +100 -0
  302. package/dist/plot/core/utils/label-placement.js +2 -2
  303. package/dist/plot/histogram/Histogram.svelte +314 -340
  304. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  305. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  306. package/dist/plot/histogram/histogram.d.ts +31 -0
  307. package/dist/plot/histogram/histogram.js +70 -0
  308. package/dist/plot/histogram/index.d.ts +1 -0
  309. package/dist/plot/histogram/index.js +1 -0
  310. package/dist/plot/index.d.ts +1 -0
  311. package/dist/plot/index.js +1 -0
  312. package/dist/plot/sankey/Sankey.svelte +78 -69
  313. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  314. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  315. package/dist/plot/sankey/sankey.js +13 -9
  316. package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
  317. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  318. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  319. package/dist/plot/scatter/ScatterPlot.svelte +517 -410
  320. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  321. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  322. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  323. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  324. package/dist/plot/scatter/adaptive-density.d.ts +1 -1
  325. package/dist/plot/scatter/adaptive-density.js +36 -20
  326. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  327. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  328. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  329. package/dist/plot/scatter/scatter-data.js +8 -7
  330. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  331. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  332. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  333. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  334. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  335. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  336. package/dist/plot/sunburst/Sunburst.svelte +269 -347
  337. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  338. package/dist/plot/sunburst/index.d.ts +1 -1
  339. package/dist/plot/sunburst/index.js +2 -1
  340. package/dist/plot/sunburst/render.d.ts +2 -2
  341. package/dist/plot/sunburst/render.js +47 -22
  342. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  343. package/dist/plot/sunburst/sunburst.js +10 -3
  344. package/dist/plot/treemap/Treemap.svelte +1022 -0
  345. package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
  346. package/dist/plot/treemap/index.d.ts +4 -0
  347. package/dist/plot/treemap/index.js +4 -0
  348. package/dist/plot/treemap/labels.d.ts +38 -0
  349. package/dist/plot/treemap/labels.js +80 -0
  350. package/dist/plot/treemap/treemap.d.ts +28 -0
  351. package/dist/plot/treemap/treemap.js +102 -0
  352. package/dist/rdf/RdfPlot.svelte +37 -59
  353. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  354. package/dist/rdf/calc-rdf.js +63 -52
  355. package/dist/rdf/index.d.ts +0 -1
  356. package/dist/sanitize.js +85 -27
  357. package/dist/scene/SceneCamera.svelte +1 -1
  358. package/dist/scene/SceneCamera.svelte.d.ts +1 -1
  359. package/dist/scene/bind-renderer.svelte.js +14 -6
  360. package/dist/scene/index.d.ts +1 -2
  361. package/dist/scene/index.js +1 -1
  362. package/dist/scene/{props.js → props.svelte.js} +15 -1
  363. package/dist/settings.d.ts +19 -9
  364. package/dist/settings.js +229 -525
  365. package/dist/spectral/Bands.svelte +207 -221
  366. package/dist/spectral/BandsAndDos.svelte +11 -9
  367. package/dist/spectral/BrillouinBandsDos.svelte +19 -42
  368. package/dist/spectral/Dos.svelte +92 -93
  369. package/dist/spectral/helpers.d.ts +3 -3
  370. package/dist/spectral/helpers.js +65 -140
  371. package/dist/state.svelte.js +5 -18
  372. package/dist/structure/Arrow.svelte +5 -18
  373. package/dist/structure/ArrowInstances.svelte +160 -0
  374. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  375. package/dist/structure/AtomLegend.svelte +120 -85
  376. package/dist/structure/AtomLegend.svelte.d.ts +2 -3
  377. package/dist/structure/Bond.svelte +31 -23
  378. package/dist/structure/CanvasTooltip.svelte +15 -3
  379. package/dist/structure/CellSelect.svelte +45 -35
  380. package/dist/structure/Cylinder.svelte +24 -40
  381. package/dist/structure/InstancedAtoms.svelte +114 -0
  382. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  383. package/dist/structure/Lattice.svelte +85 -149
  384. package/dist/structure/SiteLabels.svelte +122 -0
  385. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  386. package/dist/structure/Structure.svelte +636 -504
  387. package/dist/structure/Structure.svelte.d.ts +4 -2
  388. package/dist/structure/StructureCarousel.svelte +637 -0
  389. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  390. package/dist/structure/StructureControls.svelte +165 -425
  391. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  392. package/dist/structure/StructureExportPane.svelte +17 -21
  393. package/dist/structure/StructureInfoPane.svelte +128 -133
  394. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  395. package/dist/structure/StructureScene.svelte +535 -578
  396. package/dist/structure/StructureScene.svelte.d.ts +6 -2
  397. package/dist/structure/StructureViewport.svelte +451 -0
  398. package/dist/structure/StructureViewport.svelte.d.ts +65 -0
  399. package/dist/structure/atom-label-placement.d.ts +16 -12
  400. package/dist/structure/atom-label-placement.js +70 -37
  401. package/dist/structure/atom-properties.d.ts +2 -0
  402. package/dist/structure/atom-properties.js +105 -38
  403. package/dist/structure/bond-order-perception.js +3 -8
  404. package/dist/structure/bonding.d.ts +9 -3
  405. package/dist/structure/bonding.js +95 -46
  406. package/dist/structure/edit-history.d.ts +6 -0
  407. package/dist/structure/edit-history.js +27 -0
  408. package/dist/structure/export.d.ts +1 -0
  409. package/dist/structure/export.js +89 -105
  410. package/dist/structure/format-detect.d.ts +1 -0
  411. package/dist/structure/format-detect.js +20 -0
  412. package/dist/structure/geometry.d.ts +9 -0
  413. package/dist/structure/geometry.js +27 -0
  414. package/dist/structure/index.d.ts +16 -1
  415. package/dist/structure/index.js +15 -10
  416. package/dist/structure/measure.d.ts +1 -1
  417. package/dist/structure/measure.js +6 -12
  418. package/dist/structure/parse.d.ts +2 -1
  419. package/dist/structure/parse.js +272 -313
  420. package/dist/structure/partial-occupancy.js +10 -5
  421. package/dist/structure/pbc.js +85 -107
  422. package/dist/structure/polyhedra.d.ts +0 -1
  423. package/dist/structure/polyhedra.js +7 -21
  424. package/dist/structure/prop-groups.d.ts +85 -0
  425. package/dist/structure/prop-groups.js +18 -0
  426. package/dist/structure/supercell.d.ts +1 -2
  427. package/dist/structure/supercell.js +7 -13
  428. package/dist/symmetry/SymmetryElements.svelte +11 -15
  429. package/dist/symmetry/SymmetryStats.svelte +55 -71
  430. package/dist/symmetry/WyckoffTable.svelte +10 -28
  431. package/dist/symmetry/cell-transform.js +6 -14
  432. package/dist/symmetry/index.d.ts +1 -0
  433. package/dist/symmetry/index.js +13 -10
  434. package/dist/symmetry/spacegroups.js +3 -2
  435. package/dist/table/HeatmapTable.svelte +1142 -447
  436. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  437. package/dist/table/ToggleMenu.svelte +168 -53
  438. package/dist/table/ToggleMenu.svelte.d.ts +1 -1
  439. package/dist/table/index.d.ts +21 -6
  440. package/dist/table/index.js +34 -21
  441. package/dist/theme/ThemeControl.svelte +16 -8
  442. package/dist/theme/embedded.d.ts +18 -0
  443. package/dist/theme/embedded.js +206 -0
  444. package/dist/theme/index.d.ts +5 -5
  445. package/dist/theme/index.js +5 -12
  446. package/dist/theme/themes.mjs +44 -66
  447. package/dist/tooltip/KCoords.svelte +4 -1
  448. package/dist/tooltip/TooltipContent.svelte +3 -6
  449. package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
  450. package/dist/tooltip/index.d.ts +8 -1
  451. package/dist/trajectory/Trajectory.svelte +613 -386
  452. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  453. package/dist/trajectory/TrajectoryError.svelte +12 -74
  454. package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
  455. package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
  456. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
  457. package/dist/trajectory/extract.js +61 -49
  458. package/dist/trajectory/format-detect.d.ts +2 -0
  459. package/dist/trajectory/format-detect.js +17 -13
  460. package/dist/trajectory/frame-reader.d.ts +2 -0
  461. package/dist/trajectory/frame-reader.js +35 -32
  462. package/dist/trajectory/helpers.d.ts +2 -0
  463. package/dist/trajectory/helpers.js +34 -56
  464. package/dist/trajectory/index.d.ts +1 -0
  465. package/dist/trajectory/index.js +5 -8
  466. package/dist/trajectory/parse/ase.js +1 -1
  467. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  468. package/dist/trajectory/parse/h5-utils.js +109 -0
  469. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  470. package/dist/trajectory/parse/hdf5.js +116 -106
  471. package/dist/trajectory/parse/index.d.ts +6 -6
  472. package/dist/trajectory/parse/index.js +25 -33
  473. package/dist/trajectory/parse/lammps.js +8 -12
  474. package/dist/trajectory/parse/vasp.js +10 -7
  475. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  476. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  477. package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
  478. package/dist/trajectory/parse/vaspout-h5.js +281 -0
  479. package/dist/trajectory/parse/xyz.js +59 -9
  480. package/dist/trajectory/plotting.d.ts +8 -9
  481. package/dist/trajectory/plotting.js +113 -64
  482. package/dist/utils.d.ts +3 -0
  483. package/dist/utils.js +7 -0
  484. package/dist/xrd/XrdPlot.svelte +79 -118
  485. package/dist/xrd/broadening.js +2 -1
  486. package/dist/xrd/calc-xrd.js +24 -62
  487. package/dist/xrd/parse.d.ts +0 -1
  488. package/dist/xrd/parse.js +69 -95
  489. package/package.json +94 -34
  490. package/readme.md +6 -5
  491. package/dist/api/mp.d.ts +0 -6
  492. package/dist/api/mp.js +0 -22
  493. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  494. package/dist/scene/types.d.ts +0 -26
  495. package/dist/tooltip/types.d.ts +0 -8
  496. package/dist/trajectory/constants.d.ts +0 -6
  497. package/dist/trajectory/constants.js +0 -11
  498. /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
  499. /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
@@ -44,10 +44,12 @@
44
44
  const bands_default_axis = (range = shared_frequency_range): AxisConfig =>
45
45
  shared_y_axis ? axis_with_range(bands_props.y_axis, range) : { ...bands_props.y_axis }
46
46
  const dos_default_axis = (range = shared_frequency_range): AxisConfig =>
47
- shared_y_axis ? axis_with_range(dos_props.y_axis, range, ``) : {
48
- label: ``,
49
- ...dos_props.y_axis,
50
- }
47
+ shared_y_axis
48
+ ? axis_with_range(dos_props.y_axis, range, ``)
49
+ : {
50
+ label: ``,
51
+ ...dos_props.y_axis,
52
+ }
51
53
 
52
54
  let synced_zoom_range = $state<Vec2 | null>(null)
53
55
  let bands_y_axis = $state<AxisConfig>(bands_default_axis())
@@ -88,14 +90,14 @@
88
90
  $effect(() =>
89
91
  propagate_synced_range(
90
92
  untrack(() => bands_y_axis.range) as Vec2 | undefined,
91
- (base_range) => bands_y_axis = bands_default_axis(base_range),
92
- )
93
+ (base_range) => (bands_y_axis = bands_default_axis(base_range)),
94
+ ),
93
95
  )
94
96
  $effect(() =>
95
97
  propagate_synced_range(
96
98
  untrack(() => dos_y_axis.range) as Vec2 | undefined,
97
- (base_range) => dos_y_axis = dos_default_axis(base_range),
98
- )
99
+ (base_range) => (dos_y_axis = dos_default_axis(base_range)),
100
+ ),
99
101
  )
100
102
 
101
103
  let hovered_frequency = $state<number | null>(null)
@@ -106,7 +108,7 @@
106
108
 
107
109
  <div
108
110
  {...rest}
109
- class="bands-and-dos {rest.class ?? ``}"
111
+ class={[`bands-and-dos`, rest.class]}
110
112
  style={`display: grid; grid-template-columns: 1fr 200px; gap: 0;` + (rest.style ?? ``)}
111
113
  >
112
114
  {@render children?.({ hovered_frequency })}
@@ -44,24 +44,12 @@
44
44
  ) as BaseBandStructure | null
45
45
 
46
46
  // Compute shared frequency/energy range from both bands and DOS data
47
- let shared_frequency_range = $derived(
48
- helpers.compute_frequency_range(band_structs, doses),
49
- )
47
+ let shared_frequency_range = $derived(helpers.compute_frequency_range(band_structs, doses))
50
48
 
51
49
  // Extract Fermi level from electronic band structure or DOS data
52
- let fermi_level = $derived.by((): number | undefined => {
53
- // Check band structures for efermi
54
- const bs_source = `efermi` in (band_structs as object)
55
- ? band_structs
56
- : Object.values(band_structs)[0]
57
- const bs_efermi = (bs_source as Record<string, unknown>)?.efermi
58
- if (typeof bs_efermi === `number`) return bs_efermi
59
-
60
- // Check DOS for efermi
61
- const dos_source = `efermi` in (doses as object) ? doses : Object.values(doses)[0]
62
- const dos_efermi = (dos_source as Record<string, unknown>)?.efermi
63
- return typeof dos_efermi === `number` ? dos_efermi : undefined
64
- })
50
+ let fermi_level = $derived(
51
+ helpers.extract_efermi(band_structs) ?? helpers.extract_efermi(doses),
52
+ )
65
53
 
66
54
  // Convert fractional k-point coordinates to Cartesian reciprocal space
67
55
  // using the structure's reciprocal lattice (consistent with BZ computation)
@@ -75,13 +63,12 @@
75
63
  let hovered_band_point = $state<InternalPoint | null>(null)
76
64
  let bands_x_positions = $state<Record<string, Vec2>>({})
77
65
  let hovered_qpoint_index = $derived(
78
- hovered_band_point && first_band_struct &&
79
- Object.keys(bands_x_positions).length > 0
66
+ hovered_band_point && first_band_struct && Object.keys(bands_x_positions).length > 0
80
67
  ? helpers.find_qpoint_at_rescaled_x(
81
- first_band_struct,
82
- hovered_band_point.x,
83
- bands_x_positions,
84
- )
68
+ first_band_struct,
69
+ hovered_band_point.x,
70
+ bands_x_positions,
71
+ )
85
72
  : null,
86
73
  )
87
74
  // Q-point hovered directly on the BZ k-path (reverse direction: BZ -> bands/DOS)
@@ -89,21 +76,13 @@
89
76
  // Unified hovered q-point: a band-point hover takes priority, else a BZ k-path hover
90
77
  let active_qpoint_index = $derived(hovered_qpoint_index ?? bz_hovered_qpoint_index)
91
78
  let hovered_k_point = $derived(
92
- active_qpoint_index !== null
93
- ? (k_path_points[active_qpoint_index] as Vec3)
94
- : null,
79
+ active_qpoint_index !== null ? (k_path_points[active_qpoint_index] as Vec3) : null,
95
80
  )
96
81
  const [desktop_width, tablet_width] = [1200, 600]
97
82
  let clientWidth = $state(desktop_width)
98
83
  let is_desktop = $derived(clientWidth >= desktop_width)
99
84
  let is_mobile = $derived(clientWidth < tablet_width)
100
- let screen_class = $derived(
101
- clientWidth >= desktop_width
102
- ? `desktop`
103
- : clientWidth >= tablet_width
104
- ? `tablet`
105
- : `phone`,
106
- )
85
+ let screen_class = $derived(is_desktop ? `desktop` : is_mobile ? `phone` : `tablet`)
107
86
 
108
87
  const bands_default_axis = (range = shared_frequency_range): AxisConfig =>
109
88
  helpers.axis_with_range(bands_props.y_axis, range)
@@ -169,11 +148,7 @@
169
148
  let hovered_frequency = $state<number | null>(null)
170
149
  </script>
171
150
 
172
- <div
173
- {...rest}
174
- class="bands-dos-brillouin {screen_class} {rest.class ?? ``}"
175
- bind:clientWidth
176
- >
151
+ <div {...rest} class={[`bands-dos-brillouin`, screen_class, rest.class]} bind:clientWidth>
177
152
  {@render children?.({
178
153
  hovered_frequency,
179
154
  hovered_band_point,
@@ -201,11 +176,13 @@
201
176
  {k_path_points}
202
177
  k_path_labels={first_band_struct?.qpoints?.flatMap((qpoint, idx) =>
203
178
  k_path_points[idx]
204
- ? [{
205
- position: k_path_points[idx],
206
- label: qpoint.label ? helpers.pretty_sym_point(qpoint.label) : null,
207
- }]
208
- : []
179
+ ? [
180
+ {
181
+ position: k_path_points[idx],
182
+ label: qpoint.label ? helpers.pretty_sym_point(qpoint.label) : null,
183
+ },
184
+ ]
185
+ : [],
209
186
  ) ?? []}
210
187
  {hovered_k_point}
211
188
  hovered_qpoint_index={active_qpoint_index}
@@ -5,6 +5,7 @@
5
5
  import type { Vec2 } from '../math'
6
6
  import ScatterPlot from '../plot/scatter/ScatterPlot.svelte'
7
7
  import type { AxisConfig, DataSeries } from '../plot/core/types'
8
+ import { extent } from 'd3-array'
8
9
  import type { ComponentProps } from 'svelte'
9
10
  import { tooltip as attach_tooltip } from 'svelte-multiselect/attachments'
10
11
  import {
@@ -175,17 +176,18 @@
175
176
  }
176
177
 
177
178
  // Check for spin-down data (only for electronic DOS)
178
- const has_spin_down = dos.type === `electronic` &&
179
- dos.spin_down_densities?.length === dos.densities.length
179
+ const has_spin_down =
180
+ dos.type === `electronic` && dos.spin_down_densities?.length === dos.densities.length
180
181
  const should_show_spin_up = effective_spin_mode !== `down_only`
181
- const should_show_spin_down = has_spin_down &&
182
- effective_spin_mode !== `up_only` && effective_spin_mode !== null
182
+ const should_show_spin_down =
183
+ has_spin_down && effective_spin_mode !== `up_only` && effective_spin_mode !== null
183
184
 
184
185
  // Process spin-up (or total) densities
185
186
  if (should_show_spin_up) {
186
- let densities_up = sigma > 0
187
- ? apply_gaussian_smearing(x_values, dos.densities, sigma)
188
- : [...dos.densities]
187
+ let densities_up =
188
+ sigma > 0
189
+ ? apply_gaussian_smearing(x_values, dos.densities, sigma)
190
+ : [...dos.densities]
189
191
 
190
192
  densities_up = normalize_densities(densities_up, x_values, normalize)
191
193
 
@@ -194,8 +196,8 @@
194
196
 
195
197
  // For stacked plots, accumulate densities (only if array lengths match)
196
198
  if (stack && cumulative_spin_up?.length === densities_up.length) {
197
- densities_up = densities_up.map((density, idx) =>
198
- density + (cumulative_spin_up?.[idx] ?? 0)
199
+ densities_up = densities_up.map(
200
+ (density, idx) => density + (cumulative_spin_up?.[idx] ?? 0),
199
201
  )
200
202
  } else if (stack && cumulative_spin_up) {
201
203
  console.warn(`DOS stacking: length mismatch for "${label}"`)
@@ -212,9 +214,10 @@
212
214
  cumulative_spin_up = densities_up
213
215
  }
214
216
 
215
- const spin_label = has_spin_down && effective_spin_mode
216
- ? `${label || `DOS ${dos_idx + 1}`} (↑)`
217
- : (label || `DOS ${dos_idx + 1}`)
217
+ const spin_label =
218
+ has_spin_down && effective_spin_mode
219
+ ? `${label || `DOS ${dos_idx + 1}`} (↑)`
220
+ : label || `DOS ${dos_idx + 1}`
218
221
 
219
222
  const series_up: DataSeries = {
220
223
  x: is_horizontal ? densities_up : x_values,
@@ -228,13 +231,11 @@
228
231
  }
229
232
 
230
233
  // Process spin-down densities if available
231
- if (
232
- should_show_spin_down && dos.type === `electronic` &&
233
- dos.spin_down_densities
234
- ) {
235
- let densities_down = sigma > 0
236
- ? apply_gaussian_smearing(x_values, dos.spin_down_densities, sigma)
237
- : [...dos.spin_down_densities]
234
+ if (should_show_spin_down && dos.type === `electronic` && dos.spin_down_densities) {
235
+ let densities_down =
236
+ sigma > 0
237
+ ? apply_gaussian_smearing(x_values, dos.spin_down_densities, sigma)
238
+ : [...dos.spin_down_densities]
238
239
 
239
240
  densities_down = normalize_densities(densities_down, x_values, normalize)
240
241
 
@@ -246,12 +247,10 @@
246
247
  // For stacked plots with overlay mode, use separate spin-down cumulative
247
248
  // This prevents spin-down from stacking on top of spin-up within the same DOS
248
249
  if (stack && effective_spin_mode === `overlay`) {
249
- const prev_spin_down = cumulative_spin_down
250
- ? [...cumulative_spin_down]
251
- : null
250
+ const prev_spin_down = cumulative_spin_down ? [...cumulative_spin_down] : null
252
251
  if (cumulative_spin_down?.length === densities_down.length) {
253
- densities_down = densities_down.map((density, idx) =>
254
- density + (cumulative_spin_down?.[idx] ?? 0)
252
+ densities_down = densities_down.map(
253
+ (density, idx) => density + (cumulative_spin_down?.[idx] ?? 0),
255
254
  )
256
255
  } else if (cumulative_spin_down) {
257
256
  console.warn(`DOS stacking (spin-down): length mismatch for "${label}"`)
@@ -268,9 +267,10 @@
268
267
  }
269
268
 
270
269
  // Use a slightly different shade for spin-down in overlay mode
271
- const spin_down_color = effective_spin_mode === `overlay`
272
- ? PLOT_COLORS[(dos_idx * 2 + 1) % PLOT_COLORS.length]
273
- : color
270
+ const spin_down_color =
271
+ effective_spin_mode === `overlay`
272
+ ? PLOT_COLORS[(dos_idx * 2 + 1) % PLOT_COLORS.length]
273
+ : color
274
274
 
275
275
  const series_down: DataSeries = {
276
276
  x: is_horizontal ? densities_down : x_values,
@@ -291,55 +291,51 @@
291
291
  },
292
292
  )
293
293
 
294
- let all_freqs = $derived( // for clamping phonon noise
294
+ let all_freqs = $derived(
295
+ // for clamping phonon noise
295
296
  Object.values(doses_dict).flatMap((dos) =>
296
- dos.type === `phonon` ? dos.frequencies : dos.energies
297
+ dos.type === `phonon` ? dos.frequencies : dos.energies,
297
298
  ),
298
299
  )
299
300
  let clamp_to_zero = $derived(
300
301
  is_phonon &&
301
302
  all_freqs.length > 0 &&
302
- Math.min(...all_freqs) < 0 &&
303
+ (extent(all_freqs)[0] ?? 0) < 0 &&
303
304
  negative_fraction(all_freqs) < IMAGINARY_MODE_NOISE_THRESHOLD,
304
305
  )
305
306
 
306
307
  // Check if we have mirrored spin-down data (negative densities)
307
- let has_mirrored_spin = $derived(
308
- effective_spin_mode === `mirror` && has_spin_polarized,
308
+ let has_mirrored_spin = $derived(effective_spin_mode === `mirror` && has_spin_polarized)
309
+
310
+ // Density axis starts at 0 (unless mirror mode needs negative values); frequency axis
311
+ // clamps to 0 only when negative phonon frequencies are numerical noise.
312
+ // Prefer d3 extent over Math.min/max(...arr) — large DOS grids can blow the call stack.
313
+ const compute_range = (values: number[], is_density_axis: boolean): Vec2 | undefined => {
314
+ if (values.length === 0) return undefined
315
+ const [min_val, max_val] = extent(values) as [number, number]
316
+ if (is_density_axis && has_mirrored_spin) return [min_val, max_val]
317
+ if (is_density_axis || clamp_to_zero) return [0, max_val]
318
+ return [min_val, max_val]
319
+ }
320
+ let x_range = $derived(
321
+ compute_range(
322
+ series_data.flatMap((srs) => srs.x),
323
+ is_horizontal,
324
+ ),
325
+ )
326
+ let y_range = $derived(
327
+ compute_range(
328
+ series_data.flatMap((srs) => srs.y),
329
+ !is_horizontal,
330
+ ),
309
331
  )
310
-
311
- let x_range = $derived.by((): Vec2 | undefined => {
312
- if (series_data.length === 0) return undefined
313
- const all_x = series_data.flatMap((srs) => srs.x)
314
- const min_x = Math.min(...all_x), max_x = Math.max(...all_x)
315
- // For horizontal orientation with mirror mode, allow negative values (mirrored densities)
316
- if (is_horizontal && has_mirrored_spin) return [min_x, max_x]
317
- if (is_horizontal || clamp_to_zero) return [0, max_x]
318
- return [min_x, max_x]
319
- })
320
-
321
- let y_range = $derived.by((): Vec2 | undefined => {
322
- if (series_data.length === 0) return undefined
323
- const all_y = series_data.flatMap((srs) => srs.y)
324
- const min_y = Math.min(...all_y), max_y = Math.max(...all_y)
325
- // For vertical orientation with mirror mode, allow negative values (mirrored densities)
326
- if (!is_horizontal && has_mirrored_spin) return [min_y, max_y]
327
- if (!is_horizontal || clamp_to_zero) return [0, max_y]
328
- return [min_y, max_y]
329
- })
330
332
 
331
333
  // Get axis labels based on orientation
332
334
  let x_label = $derived(
333
- is_horizontal
334
- ? `Density of States`
335
- : is_phonon
336
- ? `Frequency (${units})`
337
- : `Energy (eV)`,
335
+ is_horizontal ? `Density of States` : is_phonon ? `Frequency (${units})` : `Energy (eV)`,
338
336
  )
339
337
  let y_label = $derived(
340
- is_horizontal
341
- ? (is_phonon ? `Frequency (${units})` : `Energy (eV)`)
342
- : `Density of States`,
338
+ is_horizontal ? (is_phonon ? `Frequency (${units})` : `Energy (eV)`) : `Density of States`,
343
339
  )
344
340
 
345
341
  // Compute final axis configurations with default labels
@@ -359,7 +355,6 @@
359
355
  range: y_range,
360
356
  ...y_axis,
361
357
  })
362
-
363
358
  // Sync zoom changes from ScatterPlot back to parent via bindable y_axis
364
359
  // Also clears parent range when internal range becomes invalid (auto-range reset)
365
360
  $effect(() => {
@@ -381,9 +376,9 @@
381
376
  let effective_sigma_range = $derived.by((): Vec2 => {
382
377
  if (sigma_range) return sigma_range
383
378
  if (all_freqs.length === 0) return [0, 1]
384
- const freq_range = Math.max(...all_freqs) - Math.min(...all_freqs)
379
+ const [min_freq, max_freq] = extent(all_freqs) as [number, number]
385
380
  // Reasonable sigma range: 0 to ~5% of total range
386
- const max_sigma = Math.max(0.1, freq_range * 0.05)
381
+ const max_sigma = Math.max(0.1, (max_freq - min_freq) * 0.05)
387
382
  return [0, max_sigma]
388
383
  })
389
384
 
@@ -420,9 +415,13 @@
420
415
  lower_coords.push(`${lower_x.toFixed(2)},${lower_y.toFixed(2)}`)
421
416
  }
422
417
  // Trace upper edge forward, lower edge backward, close path
423
- return `M${upper_coords[0]} ${
424
- upper_coords.slice(1).map((coord) => `L${coord}`).join(` `)
425
- } ${lower_coords.toReversed().map((coord) => `L${coord}`).join(` `)} Z`
418
+ return `M${upper_coords[0]} ${upper_coords
419
+ .slice(1)
420
+ .map((coord) => `L${coord}`)
421
+ .join(` `)} ${lower_coords
422
+ .toReversed()
423
+ .map((coord) => `L${coord}`)
424
+ .join(` `)} Z`
426
425
  }
427
426
  </script>
428
427
 
@@ -436,24 +435,22 @@
436
435
  hover_config={{ threshold_px: 50 }}
437
436
  controls={{ show: show_controls }}
438
437
  on_point_hover={(event) => {
439
- hovered_frequency = is_horizontal
440
- ? (event?.point?.y ?? null)
441
- : (event?.point?.x ?? null)
438
+ hovered_frequency = is_horizontal ? (event?.point?.y ?? null) : (event?.point?.x ?? null)
442
439
  }}
443
440
  {...{ range_padding: 0, ...rest }}
444
441
  >
445
442
  {#snippet tooltip({ x_formatted, y_formatted, label })}
446
443
  {@const tooltip_data = format_dos_tooltip(
447
- x_formatted,
448
- y_formatted,
449
- label ?? null,
450
- is_horizontal,
451
- is_phonon,
452
- units,
453
- final_x_axis.label ?? ``,
454
- internal_y_axis.label ?? ``,
455
- Object.keys(doses_dict).length,
456
- )}
444
+ x_formatted,
445
+ y_formatted,
446
+ label ?? null,
447
+ is_horizontal,
448
+ is_phonon,
449
+ units,
450
+ final_x_axis.label ?? ``,
451
+ internal_y_axis.label ?? ``,
452
+ Object.keys(doses_dict).length,
453
+ )}
457
454
  {#if tooltip_data.title}<strong>{tooltip_data.title}</strong><br />{/if}
458
455
  {#each tooltip_data.lines as line, line_idx (line_idx)}
459
456
  {line}{#if line_idx < tooltip_data.lines.length - 1}<br />{/if}
@@ -559,15 +556,16 @@
559
556
  {/if}
560
557
 
561
558
  <!-- Fermi level line for electronic DOS -->
562
- {@const fermi_pos = effective_fermi_level !== undefined
563
- ? (is_horizontal
564
- ? y_scale_fn(effective_fermi_level)
565
- : x_scale_fn(effective_fermi_level))
566
- : NaN}
559
+ {@const fermi_pos =
560
+ effective_fermi_level !== undefined
561
+ ? is_horizontal
562
+ ? y_scale_fn(effective_fermi_level)
563
+ : x_scale_fn(effective_fermi_level)
564
+ : NaN}
567
565
  {#if Number.isFinite(fermi_pos)}
568
566
  {@const [x1, x2, y1, y2] = is_horizontal
569
- ? [pad.l, width - pad.r, fermi_pos, fermi_pos]
570
- : [fermi_pos, fermi_pos, pad.t, height - pad.b]}
567
+ ? [pad.l, width - pad.r, fermi_pos, fermi_pos]
568
+ : [fermi_pos, fermi_pos, pad.t, height - pad.b]}
571
569
  <line
572
570
  class="fermi-level-line"
573
571
  {x1}
@@ -608,15 +606,16 @@
608
606
  {/if}
609
607
 
610
608
  <!-- Reference frequency line -->
611
- {@const ref_pos = reference_frequency !== null
612
- ? (is_horizontal
613
- ? y_scale_fn(reference_frequency)
614
- : x_scale_fn(reference_frequency))
615
- : NaN}
609
+ {@const ref_pos =
610
+ reference_frequency !== null
611
+ ? is_horizontal
612
+ ? y_scale_fn(reference_frequency)
613
+ : x_scale_fn(reference_frequency)
614
+ : NaN}
616
615
  {#if Number.isFinite(ref_pos)}
617
616
  {@const [x1, x2, y1, y2] = is_horizontal
618
- ? [pad.l, width - pad.r, ref_pos, ref_pos]
619
- : [ref_pos, ref_pos, pad.t, height - pad.b]}
617
+ ? [pad.l, width - pad.r, ref_pos, ref_pos]
618
+ : [ref_pos, ref_pos, pad.t, height - pad.b]}
620
619
  <line
621
620
  {x1}
622
621
  {x2}
@@ -34,14 +34,14 @@ export declare function qpoint_x_position(band_struct: types.BaseBandStructure,
34
34
  export declare function find_qpoint_at_rescaled_x(band_struct: types.BaseBandStructure, rescaled_x: number, x_positions: Record<string, Vec2>): number | null;
35
35
  type SpinDensities = Record<string, number[]>;
36
36
  export interface PymatgenDos {
37
- '@class': string;
38
- '@module': string;
37
+ '@class'?: string;
38
+ '@module'?: string;
39
39
  energies: number[];
40
40
  densities: SpinDensities | number[];
41
41
  efermi: number;
42
42
  }
43
43
  export interface PymatgenCompleteDos extends PymatgenDos {
44
- '@class': `CompleteDos` | `LobsterCompleteDos`;
44
+ '@class'?: `CompleteDos` | `LobsterCompleteDos`;
45
45
  structure?: Record<string, unknown>;
46
46
  pdos?: Record<string, SpinDensities>[];
47
47
  atom_dos?: Record<string, PymatgenDos>;