matterviz 0.3.1 → 0.3.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 (358) hide show
  1. package/dist/EmptyState.svelte +10 -2
  2. package/dist/FilePicker.svelte +154 -96
  3. package/dist/Icon.svelte +20 -14
  4. package/dist/MillerIndexInput.svelte +27 -21
  5. package/dist/api/optimade.js +6 -6
  6. package/dist/app.css +216 -178
  7. package/dist/brillouin/BrillouinZone.svelte +299 -198
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +74 -55
  11. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte +277 -165
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  15. package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
  16. package/dist/brillouin/compute.js +11 -6
  17. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  18. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  19. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +847 -0
  20. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  21. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3194 -0
  22. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  23. package/dist/chempot-diagram/ChemPotScene3D.svelte +11 -0
  24. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  25. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  26. package/dist/chempot-diagram/async-compute.svelte.js +77 -0
  27. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  28. package/dist/chempot-diagram/chempot-worker.js +11 -0
  29. package/dist/chempot-diagram/color.d.ts +10 -0
  30. package/dist/chempot-diagram/color.js +32 -0
  31. package/dist/chempot-diagram/compute.d.ts +48 -0
  32. package/dist/chempot-diagram/compute.js +812 -0
  33. package/dist/chempot-diagram/index.d.ts +6 -0
  34. package/dist/chempot-diagram/index.js +6 -0
  35. package/dist/chempot-diagram/pointer.d.ts +16 -0
  36. package/dist/chempot-diagram/pointer.js +40 -0
  37. package/dist/chempot-diagram/temperature.d.ts +15 -0
  38. package/dist/chempot-diagram/temperature.js +36 -0
  39. package/dist/chempot-diagram/types.d.ts +86 -0
  40. package/dist/chempot-diagram/types.js +28 -0
  41. package/dist/colors/index.d.ts +3 -1
  42. package/dist/colors/index.js +9 -3
  43. package/dist/composition/BarChart.svelte +141 -77
  44. package/dist/composition/BubbleChart.svelte +107 -52
  45. package/dist/composition/Composition.svelte +100 -79
  46. package/dist/composition/Formula.svelte +108 -62
  47. package/dist/composition/FormulaFilter.svelte +973 -353
  48. package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
  49. package/dist/composition/PieChart.svelte +199 -99
  50. package/dist/composition/PieChart.svelte.d.ts +1 -1
  51. package/dist/composition/format.d.ts +5 -0
  52. package/dist/composition/format.js +20 -3
  53. package/dist/composition/parse.js +14 -9
  54. package/dist/convex-hull/ConvexHull.svelte +93 -38
  55. package/dist/convex-hull/ConvexHull2D.svelte +551 -393
  56. package/dist/convex-hull/ConvexHull3D.svelte +1303 -825
  57. package/dist/convex-hull/ConvexHull4D.svelte +1012 -686
  58. package/dist/convex-hull/ConvexHullControls.svelte +115 -28
  59. package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
  60. package/dist/convex-hull/ConvexHullStats.svelte +821 -249
  61. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
  62. package/dist/convex-hull/ConvexHullTooltip.svelte +41 -16
  63. package/dist/convex-hull/GasPressureControls.svelte +104 -61
  64. package/dist/convex-hull/StructurePopup.svelte +25 -4
  65. package/dist/convex-hull/TemperatureSlider.svelte +45 -25
  66. package/dist/convex-hull/barycentric-coords.js +13 -7
  67. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  68. package/dist/convex-hull/demo-temperature.js +40 -0
  69. package/dist/convex-hull/gas-thermodynamics.js +17 -12
  70. package/dist/convex-hull/helpers.d.ts +10 -1
  71. package/dist/convex-hull/helpers.js +79 -38
  72. package/dist/convex-hull/index.d.ts +1 -0
  73. package/dist/convex-hull/index.js +1 -0
  74. package/dist/convex-hull/thermodynamics.d.ts +8 -21
  75. package/dist/convex-hull/thermodynamics.js +163 -69
  76. package/dist/convex-hull/types.d.ts +12 -12
  77. package/dist/convex-hull/types.js +0 -12
  78. package/dist/coordination/CoordinationBarPlot.svelte +232 -176
  79. package/dist/element/BohrAtom.svelte +56 -13
  80. package/dist/element/ElementHeading.svelte +7 -2
  81. package/dist/element/ElementPhoto.svelte +15 -9
  82. package/dist/element/ElementStats.svelte +10 -4
  83. package/dist/element/ElementTile.svelte +137 -73
  84. package/dist/element/Nucleus.svelte +39 -11
  85. package/dist/element/data.js +2 -14
  86. package/dist/element/data.json.gz +0 -0
  87. package/dist/element/types.d.ts +1 -0
  88. package/dist/feedback/ClickFeedback.svelte +16 -5
  89. package/dist/feedback/DragOverlay.svelte +10 -2
  90. package/dist/feedback/Spinner.svelte +4 -2
  91. package/dist/feedback/StatusMessage.svelte +8 -2
  92. package/dist/fermi-surface/FermiSlice.svelte +118 -88
  93. package/dist/fermi-surface/FermiSurface.svelte +336 -239
  94. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  95. package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
  96. package/dist/fermi-surface/FermiSurfaceScene.svelte +536 -343
  97. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  98. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
  99. package/dist/fermi-surface/compute.js +16 -20
  100. package/dist/fermi-surface/parse.js +37 -33
  101. package/dist/fermi-surface/symmetry.js +2 -7
  102. package/dist/fermi-surface/types.d.ts +3 -5
  103. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1527 -0
  104. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  105. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  106. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  107. package/dist/heatmap-matrix/index.d.ts +53 -0
  108. package/dist/heatmap-matrix/index.js +100 -0
  109. package/dist/heatmap-matrix/shared.d.ts +2 -0
  110. package/dist/heatmap-matrix/shared.js +4 -0
  111. package/dist/icons.d.ts +111 -0
  112. package/dist/icons.js +158 -0
  113. package/dist/index.d.ts +5 -2
  114. package/dist/index.js +5 -2
  115. package/dist/io/decompress.js +1 -1
  116. package/dist/io/export.d.ts +3 -0
  117. package/dist/io/export.js +138 -140
  118. package/dist/io/file-drop.d.ts +7 -0
  119. package/dist/io/file-drop.js +43 -0
  120. package/dist/io/index.d.ts +2 -2
  121. package/dist/io/index.js +2 -112
  122. package/dist/io/is-binary.js +2 -3
  123. package/dist/io/types.d.ts +1 -0
  124. package/dist/io/url-drop.d.ts +2 -0
  125. package/dist/io/url-drop.js +117 -0
  126. package/dist/isosurface/Isosurface.svelte +220 -110
  127. package/dist/isosurface/IsosurfaceControls.svelte +65 -28
  128. package/dist/isosurface/parse.js +104 -56
  129. package/dist/isosurface/slice.d.ts +2 -1
  130. package/dist/isosurface/slice.js +8 -13
  131. package/dist/isosurface/types.d.ts +14 -1
  132. package/dist/isosurface/types.js +152 -5
  133. package/dist/labels.d.ts +2 -1
  134. package/dist/labels.js +12 -8
  135. package/dist/layout/FullscreenToggle.svelte +11 -2
  136. package/dist/layout/InfoCard.svelte +38 -6
  137. package/dist/layout/InfoTag.svelte +125 -94
  138. package/dist/layout/PropertyFilter.svelte +82 -37
  139. package/dist/layout/SettingsSection.svelte +85 -55
  140. package/dist/layout/SubpageGrid.svelte +82 -0
  141. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  142. package/dist/layout/index.d.ts +1 -0
  143. package/dist/layout/index.js +1 -0
  144. package/dist/layout/json-tree/JsonNode.svelte +266 -223
  145. package/dist/layout/json-tree/JsonTree.svelte +516 -429
  146. package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
  147. package/dist/layout/json-tree/JsonValue.svelte +281 -173
  148. package/dist/layout/json-tree/types.d.ts +10 -2
  149. package/dist/layout/json-tree/utils.d.ts +2 -0
  150. package/dist/layout/json-tree/utils.js +37 -2
  151. package/dist/marching-cubes.js +25 -2
  152. package/dist/math.d.ts +20 -17
  153. package/dist/math.js +474 -57
  154. package/dist/overlays/ContextMenu.svelte +66 -40
  155. package/dist/overlays/DraggablePane.svelte +331 -154
  156. package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
  157. package/dist/periodic-table/PeriodicTable.svelte +278 -145
  158. package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
  159. package/dist/periodic-table/PropertySelect.svelte +25 -7
  160. package/dist/periodic-table/TableInset.svelte +8 -3
  161. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +559 -267
  162. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
  163. package/dist/phase-diagram/PhaseDiagramControls.svelte +131 -51
  164. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
  165. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  166. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  167. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +160 -110
  168. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +8 -1
  169. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +217 -86
  170. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
  171. package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
  172. package/dist/phase-diagram/build-diagram.js +9 -9
  173. package/dist/phase-diagram/colors.js +1 -3
  174. package/dist/phase-diagram/index.d.ts +2 -0
  175. package/dist/phase-diagram/index.js +2 -0
  176. package/dist/phase-diagram/parse.js +10 -9
  177. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  178. package/dist/phase-diagram/svg-to-diagram.js +869 -0
  179. package/dist/phase-diagram/types.d.ts +10 -0
  180. package/dist/phase-diagram/utils.d.ts +8 -4
  181. package/dist/phase-diagram/utils.js +219 -74
  182. package/dist/plot/AxisLabel.svelte +51 -0
  183. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  184. package/dist/plot/BarPlot.svelte +1461 -768
  185. package/dist/plot/BarPlot.svelte.d.ts +3 -3
  186. package/dist/plot/BarPlotControls.svelte +33 -6
  187. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  188. package/dist/plot/ColorBar.svelte +533 -383
  189. package/dist/plot/ColorBar.svelte.d.ts +1 -1
  190. package/dist/plot/ColorScaleSelect.svelte +28 -7
  191. package/dist/plot/ElementScatter.svelte +38 -16
  192. package/dist/plot/FillArea.svelte +152 -92
  193. package/dist/plot/Histogram.svelte +1162 -709
  194. package/dist/plot/Histogram.svelte.d.ts +1 -1
  195. package/dist/plot/HistogramControls.svelte +81 -18
  196. package/dist/plot/HistogramControls.svelte.d.ts +6 -2
  197. package/dist/plot/InteractiveAxisLabel.svelte +34 -11
  198. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
  199. package/dist/plot/Line.svelte +63 -28
  200. package/dist/plot/PlotControls.svelte +221 -96
  201. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  202. package/dist/plot/PlotLegend.svelte +174 -91
  203. package/dist/plot/PlotTooltip.svelte +45 -6
  204. package/dist/plot/PortalSelect.svelte +175 -146
  205. package/dist/plot/ReferenceLine.svelte +77 -22
  206. package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
  207. package/dist/plot/ReferenceLine3D.svelte +132 -107
  208. package/dist/plot/ReferencePlane.svelte +146 -123
  209. package/dist/plot/ScatterPlot.svelte +1880 -1156
  210. package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
  211. package/dist/plot/ScatterPlot3D.svelte +256 -131
  212. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  213. package/dist/plot/ScatterPlot3DControls.svelte +300 -297
  214. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
  215. package/dist/plot/ScatterPlot3DScene.svelte +608 -406
  216. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  217. package/dist/plot/ScatterPlotControls.svelte +150 -70
  218. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  219. package/dist/plot/ScatterPoint.svelte +98 -26
  220. package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
  221. package/dist/plot/SpacegroupBarPlot.svelte +142 -85
  222. package/dist/plot/Surface3D.svelte +159 -108
  223. package/dist/plot/ZeroLines.svelte +96 -0
  224. package/dist/plot/ZeroLines.svelte.d.ts +32 -0
  225. package/dist/plot/ZoomRect.svelte +23 -0
  226. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  227. package/dist/plot/axis-utils.d.ts +1 -1
  228. package/dist/plot/axis-utils.js +1 -3
  229. package/dist/plot/data-cleaning.js +12 -28
  230. package/dist/plot/data-transform.js +2 -1
  231. package/dist/plot/fill-utils.js +2 -0
  232. package/dist/plot/index.d.ts +6 -2
  233. package/dist/plot/index.js +6 -2
  234. package/dist/plot/interactions.d.ts +8 -10
  235. package/dist/plot/interactions.js +2 -3
  236. package/dist/plot/layout.d.ts +11 -2
  237. package/dist/plot/layout.js +44 -17
  238. package/dist/plot/reference-line.d.ts +5 -22
  239. package/dist/plot/reference-line.js +12 -84
  240. package/dist/plot/scales.js +24 -36
  241. package/dist/plot/types.d.ts +53 -40
  242. package/dist/plot/types.js +12 -7
  243. package/dist/plot/utils/label-placement.d.ts +32 -15
  244. package/dist/plot/utils/label-placement.js +227 -63
  245. package/dist/plot/utils/series-visibility.js +2 -3
  246. package/dist/plot/utils.d.ts +1 -0
  247. package/dist/plot/utils.js +14 -0
  248. package/dist/rdf/RdfPlot.svelte +173 -132
  249. package/dist/rdf/calc-rdf.js +4 -5
  250. package/dist/sanitize.d.ts +4 -0
  251. package/dist/sanitize.js +107 -0
  252. package/dist/settings.d.ts +21 -6
  253. package/dist/settings.js +63 -19
  254. package/dist/spectral/Bands.svelte +963 -412
  255. package/dist/spectral/Bands.svelte.d.ts +22 -2
  256. package/dist/spectral/BandsAndDos.svelte +90 -49
  257. package/dist/spectral/BrillouinBandsDos.svelte +151 -93
  258. package/dist/spectral/Dos.svelte +389 -258
  259. package/dist/spectral/helpers.d.ts +23 -1
  260. package/dist/spectral/helpers.js +119 -51
  261. package/dist/spectral/types.d.ts +2 -0
  262. package/dist/state.svelte.d.ts +1 -1
  263. package/dist/state.svelte.js +3 -2
  264. package/dist/structure/Arrow.svelte +59 -20
  265. package/dist/structure/AtomLegend.svelte +231 -129
  266. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  267. package/dist/structure/Bond.svelte +73 -47
  268. package/dist/structure/CanvasTooltip.svelte +10 -2
  269. package/dist/structure/CellSelect.svelte +148 -51
  270. package/dist/structure/Cylinder.svelte +33 -17
  271. package/dist/structure/Lattice.svelte +88 -33
  272. package/dist/structure/Structure.svelte +1077 -821
  273. package/dist/structure/Structure.svelte.d.ts +1 -1
  274. package/dist/structure/StructureControls.svelte +373 -139
  275. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  276. package/dist/structure/StructureExportPane.svelte +124 -89
  277. package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
  278. package/dist/structure/StructureInfoPane.svelte +304 -231
  279. package/dist/structure/StructureScene.svelte +919 -445
  280. package/dist/structure/StructureScene.svelte.d.ts +16 -7
  281. package/dist/structure/atom-properties.d.ts +6 -2
  282. package/dist/structure/atom-properties.js +42 -29
  283. package/dist/structure/bonding.js +6 -7
  284. package/dist/structure/export.js +22 -34
  285. package/dist/structure/ferrox-wasm-types.d.ts +3 -2
  286. package/dist/structure/ferrox-wasm-types.js +0 -3
  287. package/dist/structure/ferrox-wasm.d.ts +3 -2
  288. package/dist/structure/ferrox-wasm.js +2 -3
  289. package/dist/structure/index.d.ts +16 -0
  290. package/dist/structure/index.js +88 -6
  291. package/dist/structure/measure.d.ts +2 -2
  292. package/dist/structure/measure.js +4 -44
  293. package/dist/structure/parse.js +130 -155
  294. package/dist/structure/partial-occupancy.d.ts +25 -0
  295. package/dist/structure/partial-occupancy.js +99 -0
  296. package/dist/structure/pbc.d.ts +1 -0
  297. package/dist/structure/pbc.js +16 -6
  298. package/dist/structure/supercell.d.ts +2 -2
  299. package/dist/structure/supercell.js +12 -22
  300. package/dist/structure/validation.js +5 -3
  301. package/dist/symmetry/SymmetryStats.svelte +94 -37
  302. package/dist/symmetry/WyckoffTable.svelte +42 -14
  303. package/dist/symmetry/cell-transform.js +5 -3
  304. package/dist/symmetry/index.d.ts +7 -4
  305. package/dist/symmetry/index.js +87 -21
  306. package/dist/symmetry/spacegroups.js +148 -148
  307. package/dist/table/HeatmapTable.svelte +1112 -516
  308. package/dist/table/HeatmapTable.svelte.d.ts +12 -1
  309. package/dist/table/ToggleMenu.svelte +125 -90
  310. package/dist/table/index.d.ts +2 -0
  311. package/dist/table/index.js +2 -4
  312. package/dist/theme/ThemeControl.svelte +21 -12
  313. package/dist/time.js +4 -1
  314. package/dist/tooltip/TooltipContent.svelte +33 -8
  315. package/dist/trajectory/Trajectory.svelte +889 -687
  316. package/dist/trajectory/TrajectoryError.svelte +14 -3
  317. package/dist/trajectory/TrajectoryExportPane.svelte +148 -90
  318. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
  319. package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
  320. package/dist/trajectory/constants.d.ts +6 -0
  321. package/dist/trajectory/constants.js +7 -0
  322. package/dist/trajectory/extract.js +13 -31
  323. package/dist/trajectory/format-detect.d.ts +9 -0
  324. package/dist/trajectory/format-detect.js +76 -0
  325. package/dist/trajectory/frame-reader.d.ts +17 -0
  326. package/dist/trajectory/frame-reader.js +332 -0
  327. package/dist/trajectory/helpers.d.ts +14 -0
  328. package/dist/trajectory/helpers.js +172 -0
  329. package/dist/trajectory/index.d.ts +1 -0
  330. package/dist/trajectory/index.js +23 -14
  331. package/dist/trajectory/parse/ase.d.ts +2 -0
  332. package/dist/trajectory/parse/ase.js +77 -0
  333. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  334. package/dist/trajectory/parse/hdf5.js +129 -0
  335. package/dist/trajectory/parse/index.d.ts +12 -0
  336. package/dist/trajectory/parse/index.js +299 -0
  337. package/dist/trajectory/parse/lammps.d.ts +5 -0
  338. package/dist/trajectory/parse/lammps.js +179 -0
  339. package/dist/trajectory/parse/vasp.d.ts +2 -0
  340. package/dist/trajectory/parse/vasp.js +68 -0
  341. package/dist/trajectory/parse/xyz.d.ts +2 -0
  342. package/dist/trajectory/parse/xyz.js +110 -0
  343. package/dist/trajectory/plotting.js +13 -8
  344. package/dist/trajectory/types.d.ts +11 -0
  345. package/dist/trajectory/types.js +1 -0
  346. package/dist/utils.d.ts +3 -0
  347. package/dist/utils.js +17 -0
  348. package/dist/xrd/XrdPlot.svelte +337 -245
  349. package/dist/xrd/broadening.js +14 -9
  350. package/dist/xrd/calc-xrd.js +12 -19
  351. package/dist/xrd/parse.d.ts +1 -1
  352. package/dist/xrd/parse.js +17 -17
  353. package/package.json +103 -101
  354. package/readme.md +4 -4
  355. package/dist/trajectory/parse.d.ts +0 -42
  356. package/dist/trajectory/parse.js +0 -1267
  357. /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
  358. /package/dist/theme/{themes.js → themes.mjs} +0 -0
@@ -1,6 +1,6 @@
1
1
  import ScatterPlot from '../plot/ScatterPlot.svelte';
2
2
  import type { AxisConfig } from '../plot/types';
3
- import type { BandStructureType, BaseBandStructure, LineKwargs, PathMode, RibbonConfig } from './types';
3
+ import type { BandsSpinMode, BandStructureType, BaseBandStructure, FrequencyUnit, LineKwargs, PathMode, RibbonConfig } from './types';
4
4
  import type { ComponentProps } from 'svelte';
5
5
  type $$ComponentProps = ComponentProps<typeof ScatterPlot> & {
6
6
  band_structs: BaseBandStructure | Record<string, BaseBandStructure>;
@@ -14,7 +14,27 @@ type $$ComponentProps = ComponentProps<typeof ScatterPlot> & {
14
14
  reference_frequency?: number | null;
15
15
  ribbon_config?: RibbonConfig | Record<string, RibbonConfig>;
16
16
  fermi_level?: number;
17
+ units?: FrequencyUnit;
18
+ band_spin_mode?: BandsSpinMode;
19
+ highlight_regions?: {
20
+ y_min: number;
21
+ y_max: number;
22
+ color?: string;
23
+ opacity?: number;
24
+ label?: string;
25
+ }[];
26
+ shade_imaginary_modes?: boolean;
27
+ show_gap_annotation?: boolean;
28
+ show_controls?: boolean;
29
+ show_path_mode_control?: boolean;
30
+ show_units_control?: boolean;
31
+ show_spin_control?: boolean;
32
+ show_annotation_controls?: boolean;
33
+ id?: string;
34
+ class?: string;
35
+ style?: string;
36
+ 'data-testid'?: string;
17
37
  };
18
- declare const Bands: import("svelte").Component<$$ComponentProps, {}, "y_axis" | "x_positions">;
38
+ declare const Bands: import("svelte").Component<$$ComponentProps, {}, "y_axis" | "units" | "x_positions" | "band_spin_mode">;
19
39
  type Bands = ReturnType<typeof Bands>;
20
40
  export default Bands;
@@ -1,62 +1,103 @@
1
- <script lang="ts">import { untrack } from 'svelte';
2
- import Bands from './Bands.svelte';
3
- import Dos from './Dos.svelte';
4
- import { compute_frequency_range, detect_zoom_change, extract_efermi, is_valid_range, ranges_equal, } from './helpers';
5
- let { band_structs, doses, bands_props = {}, dos_props = {}, shared_y_axis = true, sync_y_zoom = true, children, ...rest } = $props();
6
- let shared_frequency_range = $derived(shared_y_axis ? compute_frequency_range(band_structs, doses) : undefined);
7
- let fermi_level = $derived(extract_efermi(band_structs) ?? extract_efermi(doses));
8
- // Synced zoom state (null = use auto-computed range)
9
- let synced_zoom_range = $state(null);
10
- let bands_y_axis = $state({});
11
- let dos_y_axis = $state({ label: `` });
12
- // Detect zoom changes and sync between components (runs first to capture child updates)
13
- $effect(() => {
14
- if (!sync_y_zoom || !shared_frequency_range)
15
- return;
16
- const result = detect_zoom_change(bands_y_axis.range, dos_y_axis.range, shared_frequency_range, untrack(() => synced_zoom_range));
17
- if (result !== undefined)
18
- synced_zoom_range = result;
19
- });
20
- // Propagate synced range to bands y-axis (untrack current to avoid overwriting child zoom)
21
- $effect(() => {
22
- const base_range = synced_zoom_range ?? shared_frequency_range;
23
- const current_range = untrack(() => bands_y_axis.range);
1
+ <script lang="ts">
2
+ import type { Vec2 } from '../math'
3
+ import type { AxisConfig } from '../plot/types'
4
+ import type { ComponentProps, Snippet } from 'svelte'
5
+ import { untrack } from 'svelte'
6
+ import type { HTMLAttributes } from 'svelte/elements'
7
+ import Bands from './Bands.svelte'
8
+ import Dos from './Dos.svelte'
9
+ import {
10
+ compute_frequency_range,
11
+ detect_zoom_change,
12
+ extract_efermi,
13
+ is_valid_range,
14
+ ranges_equal,
15
+ } from './helpers'
16
+ import type { BaseBandStructure, DosInput, HoveredData } from './types'
17
+
18
+ let {
19
+ band_structs,
20
+ doses,
21
+ bands_props = {},
22
+ dos_props = {},
23
+ shared_y_axis = true,
24
+ sync_y_zoom = true,
25
+ children,
26
+ ...rest
27
+ }: HTMLAttributes<HTMLDivElement> & {
28
+ band_structs: BaseBandStructure | Record<string, BaseBandStructure>
29
+ doses: DosInput | Record<string, DosInput>
30
+ bands_props?: Partial<ComponentProps<typeof Bands>>
31
+ dos_props?: Partial<ComponentProps<typeof Dos>>
32
+ shared_y_axis?: boolean
33
+ sync_y_zoom?: boolean
34
+ class?: string
35
+ children?: Snippet<[HoveredData]>
36
+ } = $props()
37
+
38
+ let shared_frequency_range = $derived(
39
+ shared_y_axis ? compute_frequency_range(band_structs, doses) : undefined,
40
+ )
41
+ let fermi_level = $derived(extract_efermi(band_structs) ?? extract_efermi(doses))
42
+
43
+ // Synced zoom state (null = use auto-computed range)
44
+ let synced_zoom_range = $state<Vec2 | null>(null)
45
+ let bands_y_axis = $state<AxisConfig>({})
46
+ let dos_y_axis = $state<AxisConfig>({ label: `` })
47
+
48
+ // Detect zoom changes and sync between components (runs first to capture child updates)
49
+ $effect(() => {
50
+ if (!sync_y_zoom || !shared_frequency_range) return
51
+ const result = detect_zoom_change(
52
+ bands_y_axis.range,
53
+ dos_y_axis.range,
54
+ shared_frequency_range,
55
+ untrack(() => synced_zoom_range),
56
+ )
57
+ if (result !== undefined) synced_zoom_range = result
58
+ })
59
+
60
+ // Propagate synced range to bands y-axis (untrack current to avoid overwriting child zoom)
61
+ $effect(() => {
62
+ const base_range = synced_zoom_range ?? shared_frequency_range
63
+ const current_range = untrack(() => bands_y_axis.range) as Vec2 | undefined
24
64
  // Skip if current range already matches base, or is valid but differs (child zoom in progress)
25
- if (ranges_equal(current_range, base_range))
26
- return;
65
+ if (ranges_equal(current_range, base_range)) return
27
66
  if (is_valid_range(current_range) && !ranges_equal(current_range, base_range)) {
28
- return;
67
+ return
29
68
  }
30
69
  // Only include range if it's valid (don't override child's auto-range with undefined)
31
70
  bands_y_axis = shared_y_axis
32
- ? {
33
- ...(bands_props.y_axis ?? {}),
34
- ...(is_valid_range(base_range) && { range: base_range }),
35
- }
36
- : { ...(bands_props.y_axis ?? {}) };
37
- });
38
- // Propagate synced range to DOS y-axis (untrack current to avoid overwriting child zoom)
39
- $effect(() => {
40
- const base_range = synced_zoom_range ?? shared_frequency_range;
41
- const current_range = untrack(() => dos_y_axis.range);
71
+ ? {
72
+ ...(bands_props.y_axis ?? {}),
73
+ ...(is_valid_range(base_range) && { range: base_range }),
74
+ }
75
+ : { ...(bands_props.y_axis ?? {}) }
76
+ })
77
+
78
+ // Propagate synced range to DOS y-axis (untrack current to avoid overwriting child zoom)
79
+ $effect(() => {
80
+ const base_range = synced_zoom_range ?? shared_frequency_range
81
+ const current_range = untrack(() => dos_y_axis.range) as Vec2 | undefined
42
82
  // Skip if current range already matches base, or is valid but differs (child zoom in progress)
43
- if (ranges_equal(current_range, base_range))
44
- return;
83
+ if (ranges_equal(current_range, base_range)) return
45
84
  if (is_valid_range(current_range) && !ranges_equal(current_range, base_range)) {
46
- return;
85
+ return
47
86
  }
48
87
  // Only include range if it's valid (don't override child's auto-range with undefined)
49
88
  dos_y_axis = shared_y_axis
50
- ? {
51
- label: ``,
52
- ...(dos_props.y_axis ?? {}),
53
- ...(is_valid_range(base_range) && { range: base_range }),
54
- }
55
- : { label: ``, ...(dos_props.y_axis ?? {}) };
56
- });
57
- let hovered_frequency = $state(null);
58
- // Ensure both plots use identical top/bottom padding for aligned y_scale_fn
59
- const shared_tb_padding = { t: 20, b: 50 };
89
+ ? {
90
+ label: ``,
91
+ ...(dos_props.y_axis ?? {}),
92
+ ...(is_valid_range(base_range) && { range: base_range }),
93
+ }
94
+ : { label: ``, ...(dos_props.y_axis ?? {}) }
95
+ })
96
+
97
+ let hovered_frequency = $state<number | null>(null)
98
+
99
+ // Ensure both plots use identical top/bottom padding for aligned y_scale_fn
100
+ const shared_tb_padding = { t: 20, b: 50 }
60
101
  </script>
61
102
 
62
103
  <div
@@ -1,104 +1,162 @@
1
- <script lang="ts">import { BrillouinZone, reciprocal_lattice } from '../brillouin';
2
- import { untrack } from 'svelte';
3
- import Bands from './Bands.svelte';
4
- import Dos from './Dos.svelte';
5
- import * as helpers from './helpers';
6
- let { structure, band_structs, doses, bands_props = {}, dos_props = {}, bz_props = {}, sync_y_zoom = true, children, ...rest } = $props();
7
- // Get the first normalized band structure for path calculations
8
- // Support both qpoints (phonon) and kpoints (electronic) to detect single vs dict
9
- let first_band_struct = $derived(helpers.normalize_band_structure(`qpoints` in band_structs || `kpoints` in band_structs
10
- ? band_structs
11
- : Object.values(band_structs)[0]));
12
- // Compute shared frequency/energy range from both bands and DOS data
13
- let shared_frequency_range = $derived(helpers.compute_frequency_range(band_structs, doses));
14
- // Extract Fermi level from electronic band structure or DOS data
15
- let fermi_level = $derived.by(() => {
16
- // Check band structures for efermi
17
- const bs_source = `efermi` in band_structs
1
+ <script lang="ts">
2
+ import { BrillouinZone, reciprocal_lattice } from '../brillouin'
3
+ import type { Vec2, Vec3 } from '../math'
4
+ import type { InternalPoint } from '../plot'
5
+ import type { AxisConfig } from '../plot/types'
6
+ import type { Crystal } from '../structure'
7
+ import type { ComponentProps, Snippet } from 'svelte'
8
+ import { untrack } from 'svelte'
9
+ import type { HTMLAttributes } from 'svelte/elements'
10
+ import Bands from './Bands.svelte'
11
+ import Dos from './Dos.svelte'
12
+ import * as helpers from './helpers'
13
+ import type { BaseBandStructure, DosData, HoveredData } from './types'
14
+
15
+ let {
16
+ structure,
17
+ band_structs,
18
+ doses,
19
+ bands_props = {},
20
+ dos_props = {},
21
+ bz_props = {},
22
+ sync_y_zoom = true,
23
+ children,
24
+ ...rest
25
+ }: HTMLAttributes<HTMLDivElement> & {
26
+ structure: Crystal
27
+ band_structs: BaseBandStructure | Record<string, BaseBandStructure>
28
+ doses: DosData | Record<string, DosData>
29
+ bands_props?: Partial<ComponentProps<typeof Bands>>
30
+ dos_props?: Partial<ComponentProps<typeof Dos>>
31
+ bz_props?: Partial<ComponentProps<typeof BrillouinZone>>
32
+ sync_y_zoom?: boolean // Sync frequency/energy axis zoom between plots (default: true)
33
+ children?: Snippet<[HoveredData]>
34
+ } = $props()
35
+
36
+ // Get the first normalized band structure for path calculations
37
+ // Support both qpoints (phonon) and kpoints (electronic) to detect single vs dict
38
+ let first_band_struct = $derived(
39
+ helpers.normalize_band_structure(
40
+ `qpoints` in (band_structs as object) || `kpoints` in (band_structs as object)
18
41
  ? band_structs
19
- : Object.values(band_structs)[0];
20
- const bs_efermi = bs_source?.efermi;
21
- if (typeof bs_efermi === `number`)
22
- return bs_efermi;
42
+ : Object.values(band_structs)[0],
43
+ ),
44
+ ) as BaseBandStructure | null
45
+
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
+ )
50
+
51
+ // 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
+
23
60
  // Check DOS for efermi
24
- const dos_source = `efermi` in doses ? doses : Object.values(doses)[0];
25
- const dos_efermi = dos_source?.efermi;
26
- return typeof dos_efermi === `number` ? dos_efermi : undefined;
27
- });
28
- // Convert fractional k-point coordinates to Cartesian reciprocal space
29
- // using the structure's reciprocal lattice (consistent with BZ computation)
30
- let k_path_points = $derived.by(() => {
31
- if (!first_band_struct?.qpoints || !structure?.lattice?.matrix)
32
- return [];
33
- const k_lattice = reciprocal_lattice(structure.lattice.matrix);
34
- return helpers.extract_k_path_points(first_band_struct, k_lattice);
35
- });
36
- let hovered_band_point = $state(null);
37
- let bands_x_positions = $state({});
38
- let hovered_qpoint_index = $derived(hovered_band_point && first_band_struct &&
39
- Object.keys(bands_x_positions).length > 0
40
- ? helpers.find_qpoint_at_rescaled_x(first_band_struct, hovered_band_point.x, bands_x_positions)
41
- : null);
42
- let hovered_k_point = $derived(hovered_qpoint_index !== null
43
- ? k_path_points[hovered_qpoint_index]
44
- : null);
45
- const [desktop_width, tablet_width] = [1200, 600];
46
- let clientWidth = $state(desktop_width);
47
- let is_desktop = $derived(clientWidth >= desktop_width);
48
- let is_mobile = $derived(clientWidth < tablet_width);
49
- let screen_class = $derived(clientWidth >= desktop_width
50
- ? `desktop`
51
- : clientWidth >= tablet_width
52
- ? `tablet`
53
- : `phone`);
54
- // Synced zoom state (null = use auto-computed range)
55
- let synced_zoom_range = $state(null);
56
- let bands_y_axis = $state({});
57
- let dos_y_axis = $state({});
58
- // Detect zoom changes and sync between components (runs first to capture child updates)
59
- $effect(() => {
60
- if (!sync_y_zoom || !shared_frequency_range)
61
- return;
62
- const result = helpers.detect_zoom_change(bands_y_axis.range, dos_y_axis.range, shared_frequency_range, untrack(() => synced_zoom_range), is_desktop);
63
- if (result !== undefined)
64
- synced_zoom_range = result;
65
- });
66
- // Propagate synced range to bands y-axis (untrack current to avoid overwriting child zoom)
67
- $effect(() => {
68
- const base_range = synced_zoom_range ?? shared_frequency_range;
69
- const current_range = untrack(() => bands_y_axis.range);
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
+ })
65
+
66
+ // Convert fractional k-point coordinates to Cartesian reciprocal space
67
+ // using the structure's reciprocal lattice (consistent with BZ computation)
68
+ let k_path_points = $derived.by(() => {
69
+ if (!first_band_struct?.qpoints || !structure?.lattice?.matrix) return []
70
+
71
+ const k_lattice = reciprocal_lattice(structure.lattice.matrix)
72
+ return helpers.extract_k_path_points(first_band_struct, k_lattice)
73
+ })
74
+
75
+ let hovered_band_point = $state<InternalPoint | null>(null)
76
+ let bands_x_positions = $state<Record<string, [number, number]>>({})
77
+ let hovered_qpoint_index = $derived(
78
+ hovered_band_point && first_band_struct &&
79
+ Object.keys(bands_x_positions).length > 0
80
+ ? helpers.find_qpoint_at_rescaled_x(
81
+ first_band_struct,
82
+ hovered_band_point.x,
83
+ bands_x_positions,
84
+ )
85
+ : null,
86
+ )
87
+ let hovered_k_point = $derived(
88
+ hovered_qpoint_index !== null
89
+ ? (k_path_points[hovered_qpoint_index] as Vec3)
90
+ : null,
91
+ )
92
+ const [desktop_width, tablet_width] = [1200, 600]
93
+ let clientWidth = $state(desktop_width)
94
+ let is_desktop = $derived(clientWidth >= desktop_width)
95
+ let is_mobile = $derived(clientWidth < tablet_width)
96
+ let screen_class = $derived(
97
+ clientWidth >= desktop_width
98
+ ? `desktop`
99
+ : clientWidth >= tablet_width
100
+ ? `tablet`
101
+ : `phone`,
102
+ )
103
+
104
+ // Synced zoom state (null = use auto-computed range)
105
+ let synced_zoom_range = $state<Vec2 | null>(null)
106
+ let bands_y_axis = $state<AxisConfig>({})
107
+ let dos_y_axis = $state<AxisConfig>({})
108
+
109
+ // Detect zoom changes and sync between components (runs first to capture child updates)
110
+ $effect(() => {
111
+ if (!sync_y_zoom || !shared_frequency_range) return
112
+ const result = helpers.detect_zoom_change(
113
+ bands_y_axis.range,
114
+ dos_y_axis.range,
115
+ shared_frequency_range,
116
+ untrack(() => synced_zoom_range),
117
+ is_desktop, // DOS sync only enabled on desktop
118
+ )
119
+ if (result !== undefined) synced_zoom_range = result
120
+ })
121
+
122
+ // Propagate synced range to bands y-axis (untrack current to avoid overwriting child zoom)
123
+ $effect(() => {
124
+ const base_range = synced_zoom_range ?? shared_frequency_range
125
+ const current_range = untrack(() => bands_y_axis.range) as Vec2 | undefined
70
126
  // Skip if current range already matches base, or is valid but differs (child zoom in progress)
71
- if (helpers.ranges_equal(current_range, base_range))
72
- return;
73
- if (helpers.is_valid_range(current_range) &&
74
- !helpers.ranges_equal(current_range, base_range))
75
- return;
127
+ if (helpers.ranges_equal(current_range, base_range)) return
128
+ if (
129
+ helpers.is_valid_range(current_range) &&
130
+ !helpers.ranges_equal(current_range, base_range)
131
+ ) return
76
132
  // Only include range if it's valid (don't override child's auto-range with undefined)
77
133
  bands_y_axis = {
78
- ...(bands_props.y_axis ?? {}),
79
- ...(helpers.is_valid_range(base_range) && { range: base_range }),
80
- };
81
- });
82
- // Propagate synced range to DOS y-axis (untrack current to avoid overwriting child zoom)
83
- $effect(() => {
84
- const base_range = synced_zoom_range ?? shared_frequency_range;
85
- const current_range = untrack(() => dos_y_axis.range);
134
+ ...(bands_props.y_axis ?? {}),
135
+ ...(helpers.is_valid_range(base_range) && { range: base_range }),
136
+ }
137
+ })
138
+
139
+ // Propagate synced range to DOS y-axis (untrack current to avoid overwriting child zoom)
140
+ $effect(() => {
141
+ const base_range = synced_zoom_range ?? shared_frequency_range
142
+ const current_range = untrack(() => dos_y_axis.range) as Vec2 | undefined
86
143
  // Skip if current range already matches base, or is valid but differs (child zoom in progress)
87
- if (helpers.ranges_equal(current_range, base_range))
88
- return;
89
- if (helpers.is_valid_range(current_range) &&
90
- !helpers.ranges_equal(current_range, base_range))
91
- return;
144
+ if (helpers.ranges_equal(current_range, base_range)) return
145
+ if (
146
+ helpers.is_valid_range(current_range) &&
147
+ !helpers.ranges_equal(current_range, base_range)
148
+ ) return
92
149
  // Only include range if it's valid (don't override child's auto-range with undefined)
93
150
  dos_y_axis = is_desktop
94
- ? {
95
- label: ``,
96
- ...(dos_props.y_axis ?? {}),
97
- ...(helpers.is_valid_range(base_range) && { range: base_range }),
98
- }
99
- : { ...(dos_props.y_axis ?? {}) };
100
- });
101
- let hovered_frequency = $state(null);
151
+ ? {
152
+ label: ``,
153
+ ...(dos_props.y_axis ?? {}),
154
+ ...(helpers.is_valid_range(base_range) && { range: base_range }),
155
+ }
156
+ : { ...(dos_props.y_axis ?? {}) }
157
+ })
158
+
159
+ let hovered_frequency = $state<number | null>(null)
102
160
  </script>
103
161
 
104
162
  <div