matterviz 0.3.6 → 0.3.7

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 (863) hide show
  1. package/dist/EmptyState.svelte.d.ts +9 -0
  2. package/dist/FilePicker.svelte +360 -0
  3. package/dist/FilePicker.svelte.d.ts +17 -0
  4. package/dist/Icon.svelte.d.ts +13 -0
  5. package/dist/MillerIndexInput.svelte +66 -0
  6. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  7. package/dist/api/mp.d.ts +6 -0
  8. package/dist/api/mp.js +22 -0
  9. package/dist/api/optimade.d.ts +45 -0
  10. package/dist/api/optimade.js +135 -0
  11. package/dist/brillouin/BrillouinZone.svelte +549 -0
  12. package/dist/brillouin/BrillouinZone.svelte.d.ts +83 -0
  13. package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
  14. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
  15. package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
  16. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  17. package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  18. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  19. package/dist/brillouin/BrillouinZoneScene.svelte +476 -0
  20. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +48 -0
  21. package/dist/brillouin/BrillouinZoneTooltip.svelte +92 -0
  22. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
  23. package/dist/brillouin/compute.d.ts +17 -0
  24. package/dist/brillouin/compute.js +426 -0
  25. package/dist/brillouin/index.d.ts +8 -0
  26. package/dist/brillouin/index.js +7 -0
  27. package/dist/brillouin/types.d.ts +43 -0
  28. package/dist/brillouin/types.js +1 -0
  29. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  30. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  31. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  32. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  33. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  34. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  35. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  36. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  37. package/dist/chempot-diagram/async-compute.svelte.js +78 -0
  38. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  39. package/dist/chempot-diagram/chempot-worker.js +11 -0
  40. package/dist/chempot-diagram/color.d.ts +10 -0
  41. package/dist/chempot-diagram/color.js +32 -0
  42. package/dist/chempot-diagram/compute.d.ts +48 -0
  43. package/dist/chempot-diagram/compute.js +806 -0
  44. package/dist/chempot-diagram/index.d.ts +6 -0
  45. package/dist/chempot-diagram/index.js +6 -0
  46. package/dist/chempot-diagram/pointer.d.ts +16 -0
  47. package/dist/chempot-diagram/pointer.js +40 -0
  48. package/dist/chempot-diagram/temperature.d.ts +15 -0
  49. package/dist/chempot-diagram/temperature.js +34 -0
  50. package/dist/chempot-diagram/types.d.ts +81 -0
  51. package/dist/chempot-diagram/types.js +28 -0
  52. package/dist/colors/index.d.ts +47 -0
  53. package/dist/colors/index.js +203 -0
  54. package/dist/composition/BarChart.svelte +297 -0
  55. package/dist/composition/BarChart.svelte.d.ts +39 -0
  56. package/dist/composition/BubbleChart.svelte +218 -0
  57. package/dist/composition/BubbleChart.svelte.d.ts +28 -0
  58. package/dist/composition/Composition.svelte +165 -0
  59. package/dist/composition/Composition.svelte.d.ts +15 -0
  60. package/dist/composition/Formula.svelte +268 -0
  61. package/dist/composition/Formula.svelte.d.ts +19 -0
  62. package/dist/composition/FormulaFilter.svelte +1257 -0
  63. package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
  64. package/dist/composition/PieChart.svelte +323 -0
  65. package/dist/composition/PieChart.svelte.d.ts +37 -0
  66. package/dist/composition/format.d.ts +15 -0
  67. package/dist/composition/format.js +109 -0
  68. package/dist/composition/index.d.ts +20 -0
  69. package/dist/composition/index.js +14 -0
  70. package/dist/composition/parse.d.ts +56 -0
  71. package/dist/composition/parse.js +474 -0
  72. package/dist/constants.d.ts +29 -0
  73. package/dist/constants.js +99 -0
  74. package/dist/controls.d.ts +14 -0
  75. package/dist/controls.js +30 -0
  76. package/dist/convex-hull/ConvexHull.svelte +157 -0
  77. package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
  78. package/dist/convex-hull/ConvexHull2D.svelte +825 -0
  79. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
  80. package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
  81. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
  82. package/dist/convex-hull/ConvexHull4D.svelte +1398 -0
  83. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
  84. package/dist/convex-hull/ConvexHullControls.svelte +535 -0
  85. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
  86. package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
  87. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
  88. package/dist/convex-hull/ConvexHullStats.svelte +929 -0
  89. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
  90. package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
  91. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
  92. package/dist/convex-hull/GasPressureControls.svelte +247 -0
  93. package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
  94. package/dist/convex-hull/StructurePopup.svelte +151 -0
  95. package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
  96. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
  97. package/dist/convex-hull/barycentric-coords.d.ts +18 -0
  98. package/dist/convex-hull/barycentric-coords.js +182 -0
  99. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  100. package/dist/convex-hull/demo-temperature.js +40 -0
  101. package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
  102. package/dist/convex-hull/gas-thermodynamics.js +314 -0
  103. package/dist/convex-hull/helpers.d.ts +114 -0
  104. package/dist/convex-hull/helpers.js +710 -0
  105. package/dist/convex-hull/index.d.ts +119 -0
  106. package/dist/convex-hull/index.js +58 -0
  107. package/dist/convex-hull/thermodynamics.d.ts +67 -0
  108. package/dist/convex-hull/thermodynamics.js +1752 -0
  109. package/dist/convex-hull/types.d.ts +162 -0
  110. package/dist/convex-hull/types.js +36 -0
  111. package/dist/coordination/CoordinationBarPlot.svelte +311 -0
  112. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
  113. package/dist/coordination/calc-coordination.d.ts +15 -0
  114. package/dist/coordination/calc-coordination.js +63 -0
  115. package/dist/coordination/index.d.ts +8 -0
  116. package/dist/coordination/index.js +7 -0
  117. package/dist/effects.svelte.d.ts +12 -0
  118. package/dist/effects.svelte.js +37 -0
  119. package/dist/element/BohrAtom.svelte.d.ts +20 -0
  120. package/dist/element/ElementHeading.svelte +26 -0
  121. package/dist/element/ElementHeading.svelte.d.ts +8 -0
  122. package/dist/element/ElementPhoto.svelte +57 -0
  123. package/dist/element/ElementPhoto.svelte.d.ts +9 -0
  124. package/dist/element/ElementStats.svelte +80 -0
  125. package/dist/element/ElementStats.svelte.d.ts +8 -0
  126. package/dist/element/ElementTile.svelte +484 -0
  127. package/dist/element/ElementTile.svelte.d.ts +29 -0
  128. package/dist/element/Nucleus.svelte.d.ts +17 -0
  129. package/dist/element/data.d.ts +2 -0
  130. package/dist/element/data.js +2 -0
  131. package/dist/element/index.d.ts +8 -0
  132. package/dist/element/index.js +7 -0
  133. package/dist/element/types.d.ts +57 -0
  134. package/dist/element/types.js +1 -0
  135. package/dist/feedback/ClickFeedback.svelte +58 -0
  136. package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
  137. package/dist/feedback/DragOverlay.svelte +42 -0
  138. package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
  139. package/dist/feedback/Spinner.svelte.d.ts +7 -0
  140. package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
  141. package/dist/feedback/index.d.ts +4 -0
  142. package/dist/feedback/index.js +4 -0
  143. package/dist/fermi-surface/FermiSlice.svelte +189 -0
  144. package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
  145. package/dist/fermi-surface/FermiSurface.svelte +600 -0
  146. package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
  147. package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
  148. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
  149. package/dist/fermi-surface/FermiSurfaceScene.svelte +794 -0
  150. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
  151. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  152. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
  153. package/dist/fermi-surface/compute.d.ts +5 -0
  154. package/dist/fermi-surface/compute.js +538 -0
  155. package/dist/fermi-surface/constants.d.ts +9 -0
  156. package/dist/fermi-surface/constants.js +27 -0
  157. package/dist/fermi-surface/export.d.ts +5 -0
  158. package/dist/fermi-surface/export.js +50 -0
  159. package/dist/fermi-surface/index.d.ts +12 -0
  160. package/dist/fermi-surface/index.js +13 -0
  161. package/dist/fermi-surface/marching-cubes.d.ts +2 -0
  162. package/dist/fermi-surface/marching-cubes.js +2 -0
  163. package/dist/fermi-surface/parse.d.ts +2 -0
  164. package/dist/fermi-surface/parse.js +491 -0
  165. package/dist/fermi-surface/symmetry.d.ts +3 -0
  166. package/dist/fermi-surface/symmetry.js +46 -0
  167. package/dist/fermi-surface/types.d.ts +110 -0
  168. package/dist/fermi-surface/types.js +4 -0
  169. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  170. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  171. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  172. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  173. package/dist/heatmap-matrix/index.d.ts +53 -0
  174. package/dist/heatmap-matrix/index.js +100 -0
  175. package/dist/heatmap-matrix/shared.d.ts +2 -0
  176. package/dist/heatmap-matrix/shared.js +4 -0
  177. package/dist/icons.d.ts +569 -0
  178. package/dist/icons.js +648 -0
  179. package/dist/index.d.ts +39 -0
  180. package/dist/index.js +39 -0
  181. package/dist/io/decompress.d.ts +11 -0
  182. package/dist/io/decompress.js +74 -0
  183. package/dist/io/export.d.ts +16 -0
  184. package/dist/io/export.js +316 -0
  185. package/dist/io/fetch.d.ts +5 -0
  186. package/dist/io/fetch.js +39 -0
  187. package/dist/io/file-drop.d.ts +7 -0
  188. package/dist/io/file-drop.js +43 -0
  189. package/dist/io/index.d.ts +7 -0
  190. package/dist/io/index.js +6 -0
  191. package/dist/io/is-binary.d.ts +1 -0
  192. package/dist/io/is-binary.js +20 -0
  193. package/dist/io/types.d.ts +8 -0
  194. package/dist/io/types.js +1 -0
  195. package/dist/io/url-drop.d.ts +2 -0
  196. package/dist/io/url-drop.js +123 -0
  197. package/dist/isosurface/Isosurface.svelte +285 -0
  198. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  199. package/dist/isosurface/IsosurfaceControls.svelte +277 -0
  200. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  201. package/dist/isosurface/index.d.ts +5 -0
  202. package/dist/isosurface/index.js +6 -0
  203. package/dist/isosurface/parse.d.ts +6 -0
  204. package/dist/isosurface/parse.js +553 -0
  205. package/dist/isosurface/slice.d.ts +11 -0
  206. package/dist/isosurface/slice.js +140 -0
  207. package/dist/isosurface/types.d.ts +56 -0
  208. package/dist/isosurface/types.js +227 -0
  209. package/dist/labels.d.ts +53 -0
  210. package/dist/labels.js +277 -0
  211. package/dist/layout/FullscreenToggle.svelte +50 -0
  212. package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
  213. package/dist/layout/InfoCard.svelte +120 -0
  214. package/dist/layout/InfoCard.svelte.d.ts +21 -0
  215. package/dist/layout/InfoTag.svelte +185 -0
  216. package/dist/layout/InfoTag.svelte.d.ts +19 -0
  217. package/dist/layout/PropertyFilter.svelte +246 -0
  218. package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
  219. package/dist/layout/SettingsSection.svelte +148 -0
  220. package/dist/layout/SettingsSection.svelte.d.ts +17 -0
  221. package/dist/layout/SubpageGrid.svelte +82 -0
  222. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  223. package/dist/layout/fullscreen.d.ts +9 -0
  224. package/dist/layout/fullscreen.js +53 -0
  225. package/dist/layout/index.d.ts +10 -0
  226. package/dist/layout/index.js +8 -0
  227. package/dist/layout/json-tree/JsonNode.svelte +548 -0
  228. package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
  229. package/dist/layout/json-tree/JsonTree.svelte +1230 -0
  230. package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
  231. package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
  232. package/dist/layout/json-tree/index.d.ts +3 -0
  233. package/dist/layout/json-tree/index.js +3 -0
  234. package/dist/layout/json-tree/types.d.ts +74 -0
  235. package/dist/layout/json-tree/types.js +2 -0
  236. package/dist/layout/json-tree/utils.d.ts +29 -0
  237. package/dist/layout/json-tree/utils.js +641 -0
  238. package/dist/marching-cubes.d.ts +14 -0
  239. package/dist/marching-cubes.js +540 -0
  240. package/dist/math.d.ts +101 -0
  241. package/dist/math.js +905 -0
  242. package/dist/overlays/ContextMenu.svelte +162 -0
  243. package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
  244. package/dist/overlays/CopyButton.svelte +45 -0
  245. package/dist/overlays/CopyButton.svelte.d.ts +8 -0
  246. package/dist/overlays/DragControlTab.svelte +98 -0
  247. package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
  248. package/dist/overlays/DraggablePane.svelte +487 -0
  249. package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
  250. package/dist/overlays/InfoPaneCards.svelte +149 -0
  251. package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
  252. package/dist/overlays/index.d.ts +3 -0
  253. package/dist/overlays/index.js +3 -0
  254. package/dist/periodic-table/PeriodicTable.svelte +469 -0
  255. package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
  256. package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
  257. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
  258. package/dist/periodic-table/PropertySelect.svelte +37 -0
  259. package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
  260. package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
  261. package/dist/periodic-table/index.d.ts +10 -0
  262. package/dist/periodic-table/index.js +4 -0
  263. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  264. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
  265. package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
  266. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
  267. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  268. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  269. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  270. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
  271. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  272. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
  273. package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
  274. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
  275. package/dist/phase-diagram/build-diagram.d.ts +11 -0
  276. package/dist/phase-diagram/build-diagram.js +160 -0
  277. package/dist/phase-diagram/colors.d.ts +35 -0
  278. package/dist/phase-diagram/colors.js +51 -0
  279. package/dist/phase-diagram/diagram-input.d.ts +29 -0
  280. package/dist/phase-diagram/diagram-input.js +3 -0
  281. package/dist/phase-diagram/index.d.ts +13 -0
  282. package/dist/phase-diagram/index.js +11 -0
  283. package/dist/phase-diagram/parse.d.ts +55 -0
  284. package/dist/phase-diagram/parse.js +272 -0
  285. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  286. package/dist/phase-diagram/svg-to-diagram.js +867 -0
  287. package/dist/phase-diagram/types.d.ts +93 -0
  288. package/dist/phase-diagram/types.js +1 -0
  289. package/dist/phase-diagram/utils.d.ts +118 -0
  290. package/dist/phase-diagram/utils.js +604 -0
  291. package/dist/plot/AxisLabel.svelte +51 -0
  292. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  293. package/dist/plot/BarPlot.svelte +2113 -0
  294. package/dist/plot/BarPlot.svelte.d.ts +84 -0
  295. package/dist/plot/BarPlotControls.svelte +66 -0
  296. package/dist/plot/BarPlotControls.svelte.d.ts +18 -0
  297. package/dist/plot/BinnedScatterPlot.svelte +1114 -0
  298. package/dist/plot/BinnedScatterPlot.svelte.d.ts +66 -0
  299. package/dist/plot/ColorBar.svelte +721 -0
  300. package/dist/plot/ColorBar.svelte.d.ts +31 -0
  301. package/dist/plot/ColorScaleSelect.svelte +54 -0
  302. package/dist/plot/ColorScaleSelect.svelte.d.ts +15 -0
  303. package/dist/plot/ElementScatter.svelte +63 -0
  304. package/dist/plot/ElementScatter.svelte.d.ts +14 -0
  305. package/dist/plot/FillArea.svelte.d.ts +21 -0
  306. package/dist/plot/Histogram.svelte +1558 -0
  307. package/dist/plot/Histogram.svelte.d.ts +50 -0
  308. package/dist/plot/HistogramControls.svelte +212 -0
  309. package/dist/plot/HistogramControls.svelte.d.ts +22 -0
  310. package/dist/plot/InteractiveAxisLabel.svelte +96 -0
  311. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +14 -0
  312. package/dist/plot/Line.svelte +84 -0
  313. package/dist/plot/Line.svelte.d.ts +15 -0
  314. package/dist/plot/PlotAxis.svelte +169 -0
  315. package/dist/plot/PlotAxis.svelte.d.ts +24 -0
  316. package/dist/plot/PlotControls.svelte +537 -0
  317. package/dist/plot/PlotControls.svelte.d.ts +4 -0
  318. package/dist/plot/PlotLegend.svelte +569 -0
  319. package/dist/plot/PlotLegend.svelte.d.ts +29 -0
  320. package/dist/plot/PlotTooltip.svelte +67 -0
  321. package/dist/plot/PlotTooltip.svelte.d.ts +17 -0
  322. package/dist/plot/PortalSelect.svelte +253 -0
  323. package/dist/plot/PortalSelect.svelte.d.ts +16 -0
  324. package/dist/plot/ReferenceLine.svelte.d.ts +20 -0
  325. package/dist/plot/ReferenceLine3D.svelte +156 -0
  326. package/dist/plot/ReferenceLine3D.svelte.d.ts +14 -0
  327. package/dist/plot/ReferencePlane.svelte +175 -0
  328. package/dist/plot/ReferencePlane.svelte.d.ts +14 -0
  329. package/dist/plot/ScatterPlot.svelte +2778 -0
  330. package/dist/plot/ScatterPlot.svelte.d.ts +96 -0
  331. package/dist/plot/ScatterPlot3D.svelte +529 -0
  332. package/dist/plot/ScatterPlot3D.svelte.d.ts +95 -0
  333. package/dist/plot/ScatterPlot3DControls.svelte +437 -0
  334. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +20 -0
  335. package/dist/plot/ScatterPlot3DScene.svelte +912 -0
  336. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +74 -0
  337. package/dist/plot/ScatterPlotControls.svelte +306 -0
  338. package/dist/plot/ScatterPlotControls.svelte.d.ts +17 -0
  339. package/dist/plot/ScatterPoint.svelte +182 -0
  340. package/dist/plot/ScatterPoint.svelte.d.ts +22 -0
  341. package/dist/plot/SpacegroupBarPlot.svelte +293 -0
  342. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +9 -0
  343. package/dist/plot/Surface3D.svelte +197 -0
  344. package/dist/plot/Surface3D.svelte.d.ts +13 -0
  345. package/dist/plot/ZeroLines.svelte +97 -0
  346. package/dist/plot/ZeroLines.svelte.d.ts +33 -0
  347. package/dist/plot/ZoomRect.svelte +23 -0
  348. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  349. package/dist/plot/adaptive-density.d.ts +69 -0
  350. package/dist/plot/adaptive-density.js +191 -0
  351. package/dist/plot/auto-place.d.ts +43 -0
  352. package/dist/plot/auto-place.js +122 -0
  353. package/dist/plot/axis-utils.d.ts +19 -0
  354. package/dist/plot/axis-utils.js +78 -0
  355. package/dist/plot/binned-scatter-types.d.ts +59 -0
  356. package/dist/plot/binned-scatter-types.js +1 -0
  357. package/dist/plot/data-cleaning.d.ts +37 -0
  358. package/dist/plot/data-cleaning.js +855 -0
  359. package/dist/plot/data-transform.d.ts +16 -0
  360. package/dist/plot/data-transform.js +45 -0
  361. package/dist/plot/defaults.d.ts +19 -0
  362. package/dist/plot/defaults.js +9 -0
  363. package/dist/plot/fill-utils.d.ts +46 -0
  364. package/dist/plot/fill-utils.js +322 -0
  365. package/dist/plot/hover-lock.svelte.d.ts +14 -0
  366. package/dist/plot/hover-lock.svelte.js +46 -0
  367. package/dist/plot/index.d.ts +41 -0
  368. package/dist/plot/index.js +39 -0
  369. package/dist/plot/interactions.d.ts +12 -0
  370. package/dist/plot/interactions.js +101 -0
  371. package/dist/plot/layout.d.ts +78 -0
  372. package/dist/plot/layout.js +273 -0
  373. package/dist/plot/reference-line.d.ts +60 -0
  374. package/dist/plot/reference-line.js +314 -0
  375. package/dist/plot/scales.d.ts +48 -0
  376. package/dist/plot/scales.js +481 -0
  377. package/dist/plot/svg.d.ts +1 -0
  378. package/dist/plot/svg.js +11 -0
  379. package/dist/plot/types.d.ts +831 -0
  380. package/dist/plot/types.js +99 -0
  381. package/dist/plot/utils/label-placement.d.ts +68 -0
  382. package/dist/plot/utils/label-placement.js +326 -0
  383. package/dist/plot/utils/series-visibility.d.ts +15 -0
  384. package/dist/plot/utils/series-visibility.js +85 -0
  385. package/dist/plot/utils.d.ts +1 -0
  386. package/dist/plot/utils.js +14 -0
  387. package/dist/rdf/RdfPlot.svelte +247 -0
  388. package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
  389. package/dist/rdf/calc-rdf.d.ts +4 -0
  390. package/dist/rdf/calc-rdf.js +111 -0
  391. package/dist/rdf/index.d.ts +23 -0
  392. package/dist/rdf/index.js +2 -0
  393. package/dist/sanitize.d.ts +6 -0
  394. package/dist/sanitize.js +116 -0
  395. package/dist/settings.d.ts +255 -0
  396. package/dist/settings.js +1132 -0
  397. package/dist/spectral/Bands.svelte +1040 -0
  398. package/dist/spectral/Bands.svelte.d.ts +40 -0
  399. package/dist/spectral/BandsAndDos.svelte +134 -0
  400. package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
  401. package/dist/spectral/BrillouinBandsDos.svelte +252 -0
  402. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
  403. package/dist/spectral/Dos.svelte +697 -0
  404. package/dist/spectral/Dos.svelte.d.ts +29 -0
  405. package/dist/spectral/helpers.d.ts +119 -0
  406. package/dist/spectral/helpers.js +1032 -0
  407. package/dist/spectral/index.d.ts +6 -0
  408. package/dist/spectral/index.js +6 -0
  409. package/dist/spectral/types.d.ts +84 -0
  410. package/dist/spectral/types.js +2 -0
  411. package/dist/state.svelte.d.ts +25 -0
  412. package/dist/state.svelte.js +45 -0
  413. package/dist/structure/Arrow.svelte +72 -0
  414. package/dist/structure/Arrow.svelte.d.ts +15 -0
  415. package/dist/structure/AtomLegend.svelte +815 -0
  416. package/dist/structure/AtomLegend.svelte.d.ts +35 -0
  417. package/dist/structure/Bond.svelte +140 -0
  418. package/dist/structure/Bond.svelte.d.ts +9 -0
  419. package/dist/structure/CanvasTooltip.svelte +33 -0
  420. package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
  421. package/dist/structure/CellSelect.svelte +349 -0
  422. package/dist/structure/CellSelect.svelte.d.ts +13 -0
  423. package/dist/structure/Cylinder.svelte +45 -0
  424. package/dist/structure/Cylinder.svelte.d.ts +10 -0
  425. package/dist/structure/Lattice.svelte +196 -0
  426. package/dist/structure/Lattice.svelte.d.ts +17 -0
  427. package/dist/structure/Structure.svelte +2248 -0
  428. package/dist/structure/Structure.svelte.d.ts +89 -0
  429. package/dist/structure/StructureControls.svelte +1273 -0
  430. package/dist/structure/StructureControls.svelte.d.ts +31 -0
  431. package/dist/structure/StructureExportPane.svelte +252 -0
  432. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  433. package/dist/structure/StructureInfoPane.svelte +737 -0
  434. package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
  435. package/dist/structure/StructureScene.svelte +2255 -0
  436. package/dist/structure/StructureScene.svelte.d.ts +111 -0
  437. package/dist/structure/atom-properties.d.ts +37 -0
  438. package/dist/structure/atom-properties.js +200 -0
  439. package/dist/structure/bond-order-perception.d.ts +13 -0
  440. package/dist/structure/bond-order-perception.js +384 -0
  441. package/dist/structure/bonding.d.ts +68 -0
  442. package/dist/structure/bonding.js +696 -0
  443. package/dist/structure/export.d.ts +20 -0
  444. package/dist/structure/export.js +727 -0
  445. package/dist/structure/index.d.ts +126 -0
  446. package/dist/structure/index.js +169 -0
  447. package/dist/structure/label-placement.d.ts +14 -0
  448. package/dist/structure/label-placement.js +72 -0
  449. package/dist/structure/measure.d.ts +6 -0
  450. package/dist/structure/measure.js +29 -0
  451. package/dist/structure/parse.d.ts +66 -0
  452. package/dist/structure/parse.js +1392 -0
  453. package/dist/structure/partial-occupancy.d.ts +25 -0
  454. package/dist/structure/partial-occupancy.js +99 -0
  455. package/dist/structure/pbc.d.ts +9 -0
  456. package/dist/structure/pbc.js +123 -0
  457. package/dist/structure/supercell.d.ts +8 -0
  458. package/dist/structure/supercell.js +170 -0
  459. package/dist/structure/validation.d.ts +2 -0
  460. package/dist/structure/validation.js +10 -0
  461. package/dist/symmetry/SymmetryStats.svelte +226 -0
  462. package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
  463. package/dist/symmetry/WyckoffTable.svelte +120 -0
  464. package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
  465. package/dist/symmetry/cell-transform.d.ts +12 -0
  466. package/dist/symmetry/cell-transform.js +91 -0
  467. package/dist/symmetry/index.d.ts +43 -0
  468. package/dist/symmetry/index.js +228 -0
  469. package/dist/symmetry/spacegroups.d.ts +9 -0
  470. package/dist/symmetry/spacegroups.js +394 -0
  471. package/dist/table/HeatmapTable.svelte +1833 -0
  472. package/dist/table/HeatmapTable.svelte.d.ts +49 -0
  473. package/dist/table/ToggleMenu.svelte +385 -0
  474. package/dist/table/ToggleMenu.svelte.d.ts +11 -0
  475. package/dist/table/index.d.ts +74 -0
  476. package/dist/table/index.js +38 -0
  477. package/dist/theme/ThemeControl.svelte +53 -0
  478. package/dist/theme/ThemeControl.svelte.d.ts +9 -0
  479. package/dist/theme/index.d.ts +29 -0
  480. package/dist/theme/index.js +79 -0
  481. package/dist/time.d.ts +4 -0
  482. package/dist/time.js +70 -0
  483. package/dist/tooltip/TooltipContent.svelte +58 -0
  484. package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
  485. package/dist/tooltip/index.d.ts +2 -0
  486. package/dist/tooltip/index.js +1 -0
  487. package/dist/tooltip/types.d.ts +8 -0
  488. package/dist/tooltip/types.js +1 -0
  489. package/dist/trajectory/Trajectory.svelte +1545 -0
  490. package/dist/trajectory/Trajectory.svelte.d.ts +77 -0
  491. package/dist/trajectory/TrajectoryError.svelte +128 -0
  492. package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
  493. package/dist/trajectory/TrajectoryExportPane.svelte +357 -0
  494. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
  495. package/dist/trajectory/TrajectoryInfoPane.svelte +313 -0
  496. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
  497. package/dist/trajectory/constants.d.ts +6 -0
  498. package/dist/trajectory/constants.js +7 -0
  499. package/dist/trajectory/extract.d.ts +5 -0
  500. package/dist/trajectory/extract.js +162 -0
  501. package/dist/trajectory/format-detect.d.ts +9 -0
  502. package/dist/trajectory/format-detect.js +76 -0
  503. package/dist/trajectory/frame-reader.d.ts +17 -0
  504. package/dist/trajectory/frame-reader.js +332 -0
  505. package/dist/trajectory/helpers.d.ts +15 -0
  506. package/dist/trajectory/helpers.js +164 -0
  507. package/dist/trajectory/index.d.ts +63 -0
  508. package/dist/trajectory/index.js +126 -0
  509. package/dist/trajectory/parse/ase.d.ts +2 -0
  510. package/dist/trajectory/parse/ase.js +73 -0
  511. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  512. package/dist/trajectory/parse/hdf5.js +127 -0
  513. package/dist/trajectory/parse/index.d.ts +12 -0
  514. package/dist/trajectory/parse/index.js +298 -0
  515. package/dist/trajectory/parse/lammps.d.ts +5 -0
  516. package/dist/trajectory/parse/lammps.js +179 -0
  517. package/dist/trajectory/parse/vasp.d.ts +2 -0
  518. package/dist/trajectory/parse/vasp.js +68 -0
  519. package/dist/trajectory/parse/xyz.d.ts +2 -0
  520. package/dist/trajectory/parse/xyz.js +110 -0
  521. package/dist/trajectory/plotting.d.ts +28 -0
  522. package/dist/trajectory/plotting.js +423 -0
  523. package/dist/trajectory/types.d.ts +11 -0
  524. package/dist/trajectory/types.js +1 -0
  525. package/dist/utils.d.ts +6 -0
  526. package/dist/utils.js +45 -0
  527. package/dist/xrd/XrdPlot.svelte +615 -0
  528. package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
  529. package/dist/xrd/broadening.d.ts +20 -0
  530. package/dist/xrd/broadening.js +97 -0
  531. package/dist/xrd/calc-xrd.d.ts +37 -0
  532. package/dist/xrd/calc-xrd.js +336 -0
  533. package/dist/xrd/index.d.ts +37 -0
  534. package/dist/xrd/index.js +4 -0
  535. package/dist/xrd/parse.d.ts +13 -0
  536. package/dist/xrd/parse.js +749 -0
  537. package/license +1 -1
  538. package/package.json +232 -1457
  539. package/readme.md +98 -171
  540. package/.vscode/launch.json +0 -13
  541. package/.vscodeignore +0 -7
  542. package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
  543. package/dist/assets/browser-DdDecX_W.js +0 -1
  544. package/dist/assets/export-qgn-H9y6.js +0 -2
  545. package/dist/assets/main-DiKYzti2.css +0 -1
  546. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  547. package/dist/extension.js +0 -31293
  548. package/dist/src/lib/FilePicker.svelte +0 -360
  549. package/dist/src/lib/MillerIndexInput.svelte +0 -66
  550. package/dist/src/lib/api/mp.ts +0 -26
  551. package/dist/src/lib/api/optimade.ts +0 -204
  552. package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
  553. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
  554. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
  555. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  556. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
  557. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
  558. package/dist/src/lib/brillouin/compute.ts +0 -529
  559. package/dist/src/lib/brillouin/index.ts +0 -8
  560. package/dist/src/lib/brillouin/types.ts +0 -51
  561. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
  562. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
  563. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
  564. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
  565. package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
  566. package/dist/src/lib/chempot-diagram/color.ts +0 -42
  567. package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
  568. package/dist/src/lib/chempot-diagram/index.ts +0 -6
  569. package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
  570. package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
  571. package/dist/src/lib/chempot-diagram/types.ts +0 -130
  572. package/dist/src/lib/colors/index.ts +0 -249
  573. package/dist/src/lib/composition/BarChart.svelte +0 -297
  574. package/dist/src/lib/composition/BubbleChart.svelte +0 -218
  575. package/dist/src/lib/composition/Composition.svelte +0 -165
  576. package/dist/src/lib/composition/Formula.svelte +0 -268
  577. package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
  578. package/dist/src/lib/composition/PieChart.svelte +0 -323
  579. package/dist/src/lib/composition/format.ts +0 -155
  580. package/dist/src/lib/composition/index.ts +0 -37
  581. package/dist/src/lib/composition/parse.ts +0 -605
  582. package/dist/src/lib/constants.ts +0 -134
  583. package/dist/src/lib/controls.ts +0 -42
  584. package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
  585. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
  586. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
  587. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
  588. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
  589. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
  590. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
  591. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
  592. package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
  593. package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
  594. package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
  595. package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
  596. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
  597. package/dist/src/lib/convex-hull/helpers.ts +0 -932
  598. package/dist/src/lib/convex-hull/index.ts +0 -202
  599. package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
  600. package/dist/src/lib/convex-hull/types.ts +0 -267
  601. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
  602. package/dist/src/lib/coordination/calc-coordination.ts +0 -93
  603. package/dist/src/lib/coordination/index.ts +0 -9
  604. package/dist/src/lib/effects.svelte.ts +0 -48
  605. package/dist/src/lib/element/ElementHeading.svelte +0 -26
  606. package/dist/src/lib/element/ElementPhoto.svelte +0 -57
  607. package/dist/src/lib/element/ElementStats.svelte +0 -80
  608. package/dist/src/lib/element/ElementTile.svelte +0 -484
  609. package/dist/src/lib/element/data.ts +0 -14
  610. package/dist/src/lib/element/index.ts +0 -8
  611. package/dist/src/lib/element/types.ts +0 -62
  612. package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
  613. package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
  614. package/dist/src/lib/feedback/index.ts +0 -4
  615. package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
  616. package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
  617. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
  618. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
  619. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  620. package/dist/src/lib/fermi-surface/compute.ts +0 -728
  621. package/dist/src/lib/fermi-surface/constants.ts +0 -32
  622. package/dist/src/lib/fermi-surface/export.ts +0 -64
  623. package/dist/src/lib/fermi-surface/index.ts +0 -14
  624. package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
  625. package/dist/src/lib/fermi-surface/parse.ts +0 -574
  626. package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
  627. package/dist/src/lib/fermi-surface/types.ts +0 -159
  628. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
  629. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  630. package/dist/src/lib/heatmap-matrix/index.ts +0 -167
  631. package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
  632. package/dist/src/lib/icons.ts +0 -650
  633. package/dist/src/lib/index.ts +0 -61
  634. package/dist/src/lib/io/decompress.ts +0 -92
  635. package/dist/src/lib/io/export.ts +0 -385
  636. package/dist/src/lib/io/fetch.ts +0 -46
  637. package/dist/src/lib/io/file-drop.ts +0 -51
  638. package/dist/src/lib/io/index.ts +0 -7
  639. package/dist/src/lib/io/is-binary.ts +0 -24
  640. package/dist/src/lib/io/types.ts +0 -8
  641. package/dist/src/lib/io/url-drop.ts +0 -141
  642. package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
  643. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
  644. package/dist/src/lib/isosurface/index.ts +0 -7
  645. package/dist/src/lib/isosurface/parse.ts +0 -656
  646. package/dist/src/lib/isosurface/slice.ts +0 -175
  647. package/dist/src/lib/isosurface/types.ts +0 -309
  648. package/dist/src/lib/labels.ts +0 -320
  649. package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
  650. package/dist/src/lib/layout/InfoCard.svelte +0 -120
  651. package/dist/src/lib/layout/InfoTag.svelte +0 -185
  652. package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
  653. package/dist/src/lib/layout/SettingsSection.svelte +0 -148
  654. package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
  655. package/dist/src/lib/layout/fullscreen.ts +0 -65
  656. package/dist/src/lib/layout/index.ts +0 -11
  657. package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
  658. package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
  659. package/dist/src/lib/layout/json-tree/index.ts +0 -3
  660. package/dist/src/lib/layout/json-tree/types.ts +0 -126
  661. package/dist/src/lib/layout/json-tree/utils.ts +0 -682
  662. package/dist/src/lib/marching-cubes.ts +0 -614
  663. package/dist/src/lib/math.ts +0 -1081
  664. package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
  665. package/dist/src/lib/overlays/CopyButton.svelte +0 -45
  666. package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
  667. package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
  668. package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
  669. package/dist/src/lib/overlays/index.ts +0 -3
  670. package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
  671. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
  672. package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
  673. package/dist/src/lib/periodic-table/index.ts +0 -12
  674. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  675. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
  676. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  677. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
  678. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
  679. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
  680. package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
  681. package/dist/src/lib/phase-diagram/colors.ts +0 -58
  682. package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
  683. package/dist/src/lib/phase-diagram/index.ts +0 -13
  684. package/dist/src/lib/phase-diagram/parse.ts +0 -348
  685. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
  686. package/dist/src/lib/phase-diagram/types.ts +0 -144
  687. package/dist/src/lib/phase-diagram/utils.ts +0 -775
  688. package/dist/src/lib/plot/AxisLabel.svelte +0 -51
  689. package/dist/src/lib/plot/BarPlot.svelte +0 -2113
  690. package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
  691. package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
  692. package/dist/src/lib/plot/ColorBar.svelte +0 -721
  693. package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
  694. package/dist/src/lib/plot/ElementScatter.svelte +0 -63
  695. package/dist/src/lib/plot/Histogram.svelte +0 -1558
  696. package/dist/src/lib/plot/HistogramControls.svelte +0 -212
  697. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
  698. package/dist/src/lib/plot/Line.svelte +0 -84
  699. package/dist/src/lib/plot/PlotAxis.svelte +0 -169
  700. package/dist/src/lib/plot/PlotControls.svelte +0 -537
  701. package/dist/src/lib/plot/PlotLegend.svelte +0 -569
  702. package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
  703. package/dist/src/lib/plot/PortalSelect.svelte +0 -253
  704. package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
  705. package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
  706. package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
  707. package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
  708. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
  709. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
  710. package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
  711. package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
  712. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
  713. package/dist/src/lib/plot/Surface3D.svelte +0 -197
  714. package/dist/src/lib/plot/ZeroLines.svelte +0 -97
  715. package/dist/src/lib/plot/ZoomRect.svelte +0 -23
  716. package/dist/src/lib/plot/adaptive-density.ts +0 -316
  717. package/dist/src/lib/plot/auto-place.ts +0 -184
  718. package/dist/src/lib/plot/axis-utils.ts +0 -122
  719. package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
  720. package/dist/src/lib/plot/data-cleaning.ts +0 -1069
  721. package/dist/src/lib/plot/data-transform.ts +0 -69
  722. package/dist/src/lib/plot/defaults.ts +0 -9
  723. package/dist/src/lib/plot/fill-utils.ts +0 -494
  724. package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
  725. package/dist/src/lib/plot/index.ts +0 -53
  726. package/dist/src/lib/plot/interactions.ts +0 -119
  727. package/dist/src/lib/plot/layout.ts +0 -425
  728. package/dist/src/lib/plot/reference-line.ts +0 -426
  729. package/dist/src/lib/plot/scales.ts +0 -654
  730. package/dist/src/lib/plot/svg.ts +0 -23
  731. package/dist/src/lib/plot/types.ts +0 -1144
  732. package/dist/src/lib/plot/utils/label-placement.ts +0 -541
  733. package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
  734. package/dist/src/lib/plot/utils.ts +0 -11
  735. package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
  736. package/dist/src/lib/rdf/calc-rdf.ts +0 -167
  737. package/dist/src/lib/rdf/index.ts +0 -27
  738. package/dist/src/lib/sanitize.ts +0 -126
  739. package/dist/src/lib/settings.ts +0 -1479
  740. package/dist/src/lib/spectral/Bands.svelte +0 -1040
  741. package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
  742. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
  743. package/dist/src/lib/spectral/Dos.svelte +0 -697
  744. package/dist/src/lib/spectral/helpers.ts +0 -1381
  745. package/dist/src/lib/spectral/index.ts +0 -8
  746. package/dist/src/lib/spectral/types.ts +0 -112
  747. package/dist/src/lib/state.svelte.ts +0 -64
  748. package/dist/src/lib/structure/Arrow.svelte +0 -72
  749. package/dist/src/lib/structure/AtomLegend.svelte +0 -815
  750. package/dist/src/lib/structure/Bond.svelte +0 -140
  751. package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
  752. package/dist/src/lib/structure/CellSelect.svelte +0 -349
  753. package/dist/src/lib/structure/Cylinder.svelte +0 -45
  754. package/dist/src/lib/structure/Lattice.svelte +0 -196
  755. package/dist/src/lib/structure/Structure.svelte +0 -2248
  756. package/dist/src/lib/structure/StructureControls.svelte +0 -1273
  757. package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
  758. package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
  759. package/dist/src/lib/structure/StructureScene.svelte +0 -2255
  760. package/dist/src/lib/structure/atom-properties.ts +0 -316
  761. package/dist/src/lib/structure/bond-order-perception.ts +0 -447
  762. package/dist/src/lib/structure/bonding.ts +0 -944
  763. package/dist/src/lib/structure/export.ts +0 -861
  764. package/dist/src/lib/structure/index.ts +0 -291
  765. package/dist/src/lib/structure/label-placement.ts +0 -130
  766. package/dist/src/lib/structure/measure.ts +0 -45
  767. package/dist/src/lib/structure/parse.ts +0 -1705
  768. package/dist/src/lib/structure/partial-occupancy.ts +0 -183
  769. package/dist/src/lib/structure/pbc.ts +0 -164
  770. package/dist/src/lib/structure/supercell.ts +0 -226
  771. package/dist/src/lib/structure/validation.ts +0 -11
  772. package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
  773. package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
  774. package/dist/src/lib/symmetry/cell-transform.ts +0 -118
  775. package/dist/src/lib/symmetry/index.ts +0 -348
  776. package/dist/src/lib/symmetry/spacegroups.ts +0 -404
  777. package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
  778. package/dist/src/lib/table/ToggleMenu.svelte +0 -385
  779. package/dist/src/lib/table/index.ts +0 -139
  780. package/dist/src/lib/theme/ThemeControl.svelte +0 -53
  781. package/dist/src/lib/theme/index.ts +0 -107
  782. package/dist/src/lib/time.ts +0 -71
  783. package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
  784. package/dist/src/lib/tooltip/index.ts +0 -2
  785. package/dist/src/lib/tooltip/types.ts +0 -13
  786. package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
  787. package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
  788. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
  789. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
  790. package/dist/src/lib/trajectory/constants.ts +0 -7
  791. package/dist/src/lib/trajectory/extract.ts +0 -196
  792. package/dist/src/lib/trajectory/format-detect.ts +0 -96
  793. package/dist/src/lib/trajectory/frame-reader.ts +0 -456
  794. package/dist/src/lib/trajectory/helpers.ts +0 -217
  795. package/dist/src/lib/trajectory/index.ts +0 -218
  796. package/dist/src/lib/trajectory/parse/ase.ts +0 -109
  797. package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
  798. package/dist/src/lib/trajectory/parse/index.ts +0 -411
  799. package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
  800. package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
  801. package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
  802. package/dist/src/lib/trajectory/plotting.ts +0 -599
  803. package/dist/src/lib/trajectory/types.ts +0 -13
  804. package/dist/src/lib/utils.ts +0 -56
  805. package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
  806. package/dist/src/lib/xrd/broadening.ts +0 -130
  807. package/dist/src/lib/xrd/calc-xrd.ts +0 -397
  808. package/dist/src/lib/xrd/index.ts +0 -38
  809. package/dist/src/lib/xrd/parse.ts +0 -858
  810. package/dist/webview.js +0 -29421
  811. package/icon.png +0 -0
  812. package/matterviz-0.3.2.vsix +0 -0
  813. package/matterviz-0.3.4.vsix +0 -0
  814. package/matterviz-0.3.5.vsix +0 -0
  815. package/scripts/sync-config.ts +0 -101
  816. package/src/declarations.d.ts +0 -2
  817. package/src/extension.ts +0 -972
  818. package/src/node-io.ts +0 -65
  819. package/src/types.ts +0 -17
  820. package/src/webview/JsonBrowser.svelte +0 -1079
  821. package/src/webview/PlotPanel.svelte +0 -346
  822. package/src/webview/detect.ts +0 -444
  823. package/src/webview/main.ts +0 -764
  824. package/src/webview/plot-utils.ts +0 -250
  825. package/test-fixtures/all-viz-types.json.gz +0 -0
  826. package/test-fixtures/plot-demo-data.json.gz +0 -0
  827. package/tests/detect.test.ts +0 -604
  828. package/tests/extension.test.ts +0 -2041
  829. package/tests/node-io.test.ts +0 -39
  830. package/tests/plot-utils.test.ts +0 -302
  831. package/tests/vite-plugin-json-gz.test.ts +0 -114
  832. package/tests/vscode-mock.ts +0 -18
  833. package/tests/webview.test.ts +0 -231
  834. package/tsconfig.json +0 -20
  835. package/vite-plugin-json-gz.ts +0 -29
  836. package/vite.config.ts +0 -34
  837. package/vite.extension.config.ts +0 -34
  838. /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
  839. /package/dist/{src/lib/Icon.svelte → Icon.svelte} +0 -0
  840. /package/dist/{src/lib/app.css → app.css} +0 -0
  841. /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
  842. /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
  843. /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
  844. /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
  845. /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
  846. /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
  847. /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
  848. /package/dist/{src/lib/convex-hull → convex-hull}/TemperatureSlider.svelte +0 -0
  849. /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
  850. /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
  851. /package/dist/{src/lib/element → element}/data.json +0 -0
  852. /package/dist/{src/lib/element → element}/data.json.gz +0 -0
  853. /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
  854. /package/dist/{src/lib/element → element}/data.schema.json +0 -0
  855. /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
  856. /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
  857. /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
  858. /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
  859. /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
  860. /package/dist/{src/lib/plot → plot}/FillArea.svelte +0 -0
  861. /package/dist/{src/lib/plot → plot}/ReferenceLine.svelte +0 -0
  862. /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
  863. /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
@@ -1,1040 +0,0 @@
1
- <script lang="ts">
2
- import { PLOT_COLORS } from '$lib/colors'
3
- import EmptyState from '$lib/EmptyState.svelte'
4
- import { format_num } from '$lib/labels'
5
- import { sanitize_html } from '$lib/sanitize'
6
- import { SettingsSection } from '$lib/layout'
7
- import type { Vec2 } from '$lib/math'
8
- import ScatterPlot from '$lib/plot/ScatterPlot.svelte'
9
- import type { AxisConfig, DataSeries, FillRegion } from '$lib/plot/types'
10
- import * as helpers from '$lib/spectral/helpers'
11
- import type {
12
- BandsSpinMode,
13
- BandStructureType,
14
- BaseBandStructure,
15
- FrequencyUnit,
16
- LineKwargs,
17
- PathMode,
18
- RibbonConfig,
19
- } from '$lib/spectral/types'
20
- import type { ComponentProps } from 'svelte'
21
- import { SvelteMap } from 'svelte/reactivity'
22
-
23
- type Dom_attr_value = string | number | boolean
24
-
25
- let {
26
- band_structs,
27
- line_kwargs = {},
28
- path_mode = `strict`,
29
- band_type = undefined,
30
- show_legend = true,
31
- x_axis = {},
32
- y_axis = $bindable({}),
33
- x_positions = $bindable(),
34
- reference_frequency = null,
35
- ribbon_config = {},
36
- fermi_level = undefined,
37
- units = $bindable(`THz`),
38
- band_spin_mode = $bindable(`overlay`),
39
- highlight_regions = [],
40
- shade_imaginary_modes = true,
41
- show_gap_annotation = true,
42
- show_controls = true,
43
- show_path_mode_control = true,
44
- show_units_control = true,
45
- show_spin_control = true,
46
- show_annotation_controls = true,
47
- id = undefined,
48
- class: class_name = undefined,
49
- style = undefined,
50
- 'data-testid': data_testid = undefined,
51
- ...rest
52
- }: ComponentProps<typeof ScatterPlot> & {
53
- band_structs: BaseBandStructure | Record<string, BaseBandStructure>
54
- x_axis?: AxisConfig
55
- y_axis?: AxisConfig
56
- line_kwargs?: LineKwargs
57
- path_mode?: PathMode
58
- band_type?: BandStructureType
59
- show_legend?: boolean
60
- x_positions?: Record<string, [number, number]>
61
- reference_frequency?: number | null
62
- ribbon_config?: RibbonConfig | Record<string, RibbonConfig>
63
- fermi_level?: number // Fermi level for electronic bands (auto-detected if not provided)
64
- units?: FrequencyUnit // Phonon frequency display units (electronic always eV)
65
- band_spin_mode?: BandsSpinMode // Electronic spin display: overlay (default), up_only, down_only
66
- highlight_regions?: {
67
- y_min: number
68
- y_max: number
69
- color?: string
70
- opacity?: number
71
- label?: string
72
- }[]
73
- shade_imaginary_modes?: boolean // Shade y<0 region for phonon plots with imaginary modes
74
- show_gap_annotation?: boolean // Annotate electronic VBM/CBM and gap when available
75
- show_controls?: boolean
76
- show_path_mode_control?: boolean
77
- show_units_control?: boolean
78
- show_spin_control?: boolean
79
- show_annotation_controls?: boolean
80
- id?: string
81
- class?: string
82
- style?: string
83
- 'data-testid'?: string
84
- } = $props()
85
-
86
- const is_dom_attr_value = (attr_value: unknown): attr_value is Dom_attr_value =>
87
- typeof attr_value === `string` ||
88
- typeof attr_value === `number` ||
89
- typeof attr_value === `boolean`
90
-
91
- // Helper function to get line styling for a band
92
- function get_line_style(
93
- color: string,
94
- is_acoustic: boolean,
95
- frequencies: number[],
96
- band_idx: number,
97
- ): { stroke: string; stroke_width: number } {
98
- const defaults = { stroke: color, stroke_width: is_acoustic ? 1.5 : 1 }
99
-
100
- if (typeof line_kwargs === `function`) {
101
- const custom = line_kwargs(frequencies, band_idx)
102
- return {
103
- stroke: (custom.stroke as string) ?? defaults.stroke,
104
- stroke_width: (custom.stroke_width as number) ?? defaults.stroke_width,
105
- }
106
- }
107
-
108
- if (typeof line_kwargs === `object` && line_kwargs !== null) {
109
- const mode_key = is_acoustic ? `acoustic` : `optical`
110
- const mode_kwargs = (line_kwargs as Record<string, unknown>)[mode_key] as
111
- | Record<string, unknown>
112
- | undefined
113
- const source = (mode_kwargs ?? line_kwargs) as Record<string, unknown>
114
- return {
115
- stroke: (source.stroke as string) ?? defaults.stroke,
116
- stroke_width: (source.stroke_width as number) ?? defaults.stroke_width,
117
- }
118
- }
119
-
120
- return defaults
121
- }
122
-
123
- // Ribbon data structure for rendering
124
- interface RibbonData {
125
- x_values: number[]
126
- y_values: number[]
127
- width_values: number[]
128
- color: string
129
- opacity: number
130
- max_width: number
131
- scale: number
132
- band_idx: number
133
- structure_label: string
134
- segment_key: string
135
- }
136
-
137
- // Normalize input to dict format
138
- // Supports multiple formats:
139
- // - matterviz format: qpoints + branches arrays
140
- // - pymatgen phonon: qpoints + bands (or frequencies_cm) arrays
141
- // - pymatgen electronic: kpoints + bands arrays
142
- let band_structs_dict = $derived.by(() => {
143
- if (!band_structs) return {}
144
-
145
- // Detect single band structure by checking for characteristic fields
146
- // - pymatgen format: has @class or @module markers (may also have branches)
147
- // - matterviz format: has qpoints + branches (no pymatgen markers)
148
- const has_qpoints = `qpoints` in band_structs &&
149
- Array.isArray(band_structs.qpoints) &&
150
- band_structs.qpoints.length > 0
151
- const has_kpoints = `kpoints` in band_structs &&
152
- Array.isArray(band_structs.kpoints) &&
153
- band_structs.kpoints.length > 0
154
- const has_bands = `bands` in band_structs
155
- const has_frequencies_cm = `frequencies_cm` in band_structs &&
156
- Array.isArray(band_structs.frequencies_cm)
157
- const has_branches = `branches` in band_structs
158
- // Pymatgen structures have explicit class/module markers
159
- const is_pymatgen = `@class` in band_structs || `@module` in band_structs
160
-
161
- // Pymatgen single: has markers and point/band data (may have branches too)
162
- const is_pymatgen_single = is_pymatgen &&
163
- (has_qpoints || has_kpoints) &&
164
- (has_bands || has_frequencies_cm)
165
- // Matterviz single: has qpoints + branches but NO pymatgen markers
166
- const is_matterviz_single = !is_pymatgen && has_qpoints && has_branches
167
- const is_single = is_matterviz_single || is_pymatgen_single
168
-
169
- const result: Record<string, BaseBandStructure> = {}
170
-
171
- if (is_single) {
172
- const normalized = helpers.normalize_band_structure(band_structs)
173
- if (normalized) result.default = normalized
174
- } else {
175
- for (const [key, bs] of Object.entries(band_structs)) {
176
- const normalized = helpers.normalize_band_structure(bs)
177
- if (normalized) result[key] = normalized
178
- }
179
- }
180
- return result
181
- })
182
-
183
- // Auto-detect band type if not explicitly set
184
- let detected_band_type = $derived.by((): BandStructureType => {
185
- if (band_type) return band_type
186
- if (!band_structs) return `phonon`
187
-
188
- // Single structure has marker fields; dict of structures has label keys
189
- const is_single = `@class` in band_structs || `@module` in band_structs ||
190
- `kpoints` in band_structs || `qpoints` in band_structs
191
- const source = (is_single ? band_structs : Object.values(band_structs)[0]) as
192
- | Record<string, unknown>
193
- | undefined
194
- if (!source) return `phonon`
195
-
196
- // Electronic: has kpoints, BandStructure* class (not Phonon*), or electronic_structure module
197
- const py_class_name = String(source[`@class`] ?? ``)
198
- if (
199
- (`kpoints` in source && Array.isArray(source.kpoints) &&
200
- source.kpoints.length > 0) ||
201
- (py_class_name.startsWith(`BandStructure`) &&
202
- !py_class_name.startsWith(`Phonon`)) ||
203
- String(source[`@module`] ?? ``).includes(`electronic_structure`)
204
- ) return `electronic`
205
-
206
- return `phonon`
207
- })
208
-
209
- // Auto-detect Fermi level from electronic band structure data if not explicitly provided
210
- let effective_fermi_level = $derived.by((): number | undefined => {
211
- if (fermi_level !== undefined) return fermi_level
212
- if (detected_band_type !== `electronic`) return undefined
213
-
214
- // Check raw input for efermi field
215
- const source = `efermi` in (band_structs as object)
216
- ? band_structs
217
- : Object.values(band_structs)[0]
218
- const efermi = (source as Record<string, unknown>)?.efermi
219
- return typeof efermi === `number` ? efermi : undefined
220
- })
221
-
222
- let effective_spin_mode = $derived.by((): BandsSpinMode => {
223
- if (detected_band_type !== `electronic`) return null
224
- return (band_spin_mode === `up_only` || band_spin_mode === `down_only`)
225
- ? band_spin_mode
226
- : `overlay`
227
- })
228
-
229
- const convert_band_values = (values: number[]): number[] => {
230
- if (detected_band_type !== `phonon`) return values
231
- if (units === `THz`) return values
232
- return helpers.convert_frequencies(values, units)
233
- }
234
-
235
- // Collect all path segments across structures once (shared by strict checks and plotting)
236
- let all_segments = $derived.by(() => {
237
- const collected_segments: Record<string, [string, BaseBandStructure][]> = {}
238
- for (const [label, bs] of Object.entries(band_structs_dict)) {
239
- for (const branch of bs.branches) {
240
- const start_label = bs.qpoints[branch.start_index]?.label ?? undefined
241
- const end_label = bs.qpoints[branch.end_index]?.label ?? undefined
242
- const segment_key = helpers.get_segment_key(start_label, end_label)
243
- collected_segments[segment_key] ??= []
244
- collected_segments[segment_key].push([label, bs])
245
- }
246
- }
247
- return collected_segments
248
- })
249
-
250
- let num_structures = $derived(Object.keys(band_structs_dict).length)
251
- let all_segment_keys = $derived(Object.keys(all_segments))
252
- let common_segment_keys = $derived.by(() =>
253
- all_segment_keys.filter(
254
- (segment_key) => all_segments[segment_key].length === num_structures,
255
- )
256
- )
257
- let empty_state_attrs = $derived.by(() => {
258
- const attrs: Record<string, Dom_attr_value> = {}
259
- for (const [attr_name, attr_value] of Object.entries(rest)) {
260
- if (
261
- (attr_name === `role` || attr_name.startsWith(`aria-`)) &&
262
- is_dom_attr_value(attr_value)
263
- ) {
264
- attrs[attr_name] = attr_value
265
- }
266
- }
267
- return attrs
268
- })
269
-
270
- // Compute path mismatch details for strict mode handling
271
- let strict_path_error = $derived.by((): string | null => {
272
- if (path_mode !== `strict`) return null
273
- return common_segment_keys.length === all_segment_keys.length
274
- ? null
275
- : `Band structures have different q-point paths. Switch to path_mode="union" or "intersection" to compare non-identical paths.`
276
- })
277
-
278
- // Determine which segments to plot based on path_mode
279
- let segments_to_plot = $derived.by(() => {
280
- if (path_mode === `union`) return new Set(all_segment_keys)
281
- return new Set(common_segment_keys)
282
- })
283
-
284
- // Map segments to x-axis positions
285
- $effect(() => {
286
- if (Object.keys(band_structs_dict).length === 0 || segments_to_plot.size === 0) {
287
- x_positions = {}
288
- return
289
- }
290
- const positions: Record<string, [number, number]> = {}
291
- let current_x = 0
292
-
293
- // Preserve physical path order using the first available structure
294
- const canonical = Object.values(band_structs_dict)[0]
295
- if (!canonical) {
296
- x_positions = {}
297
- return
298
- }
299
- const ordered_segments = helpers.get_ordered_segments(canonical, segments_to_plot)
300
-
301
- for (let seg_idx = 0; seg_idx < ordered_segments.length; seg_idx++) {
302
- const segment_key = ordered_segments[seg_idx]
303
- if (positions[segment_key]) continue
304
-
305
- const [start_label, end_label] = segment_key.split(`_`)
306
-
307
- // Find the first band structure that has this segment
308
- for (const bs of Object.values(band_structs_dict)) {
309
- const matching_branch = bs.branches.find((branch) => {
310
- const branch_start = bs.qpoints[branch.start_index]?.label || `null`
311
- const branch_end = bs.qpoints[branch.end_index]?.label || `null`
312
- return branch_start === start_label && branch_end === end_label
313
- })
314
-
315
- if (matching_branch) {
316
- // Check if this is a discontinuity: consecutive indices mean no path between points
317
- const is_discontinuity =
318
- matching_branch.end_index - matching_branch.start_index === 1
319
-
320
- if (is_discontinuity) {
321
- // Place at same x position as current, no advancement
322
- positions[segment_key] = [current_x, current_x]
323
- } else {
324
- const segment_len = bs.distance[matching_branch.end_index] -
325
- bs.distance[matching_branch.start_index]
326
- positions[segment_key] = [current_x, current_x + segment_len]
327
- current_x += segment_len
328
- }
329
- break
330
- }
331
- }
332
- }
333
-
334
- x_positions = positions
335
- })
336
-
337
- // Convert band structures to scatter plot series + track max slope in one pass
338
- let { series_data, max_abs_slope } = $derived.by((): {
339
- series_data: DataSeries[]
340
- max_abs_slope: number
341
- } => {
342
- if (Object.keys(band_structs_dict).length === 0 || segments_to_plot.size === 0) {
343
- return { series_data: [], max_abs_slope: 1 }
344
- }
345
-
346
- const all_series: DataSeries[] = []
347
- let max_slope = 0
348
-
349
- for (const [bs_idx, [label, bs]] of Object.entries(band_structs_dict).entries()) {
350
- const color = PLOT_COLORS[bs_idx % PLOT_COLORS.length]
351
- const structure_label = label || `Structure ${bs_idx + 1}`
352
- const gamma_indices = detected_band_type === `phonon`
353
- ? helpers.find_gamma_indices(bs)
354
- : []
355
-
356
- for (const branch of bs.branches) {
357
- const start_idx = branch.start_index
358
- const end_idx = branch.end_index + 1
359
- const start_label = bs.qpoints[start_idx]?.label ?? undefined
360
- const end_label = bs.qpoints[end_idx - 1]?.label ?? undefined
361
- const segment_key = helpers.get_segment_key(start_label, end_label)
362
-
363
- if (!segments_to_plot.has(segment_key)) continue
364
-
365
- // Skip discontinuous segments (consecutive labeled points)
366
- const is_discontinuity = branch.end_index - branch.start_index === 1
367
- if (is_discontinuity) continue
368
-
369
- const [x_start, x_end] = x_positions?.[segment_key] || [0, 1]
370
-
371
- // Scale distances for this segment
372
- const segment_distances = bs.distance.slice(start_idx, end_idx)
373
- const scaled_distances = helpers.scale_segment_distances(
374
- segment_distances,
375
- x_start,
376
- x_end,
377
- )
378
-
379
- // Create series for each band (and spin channel for electronic structures)
380
- for (let band_idx = 0; band_idx < bs.nb_bands; band_idx++) {
381
- const frequencies = convert_band_values(
382
- bs.bands[band_idx].slice(start_idx, end_idx),
383
- )
384
- const is_acoustic = helpers.classify_acoustic(bs, band_idx, gamma_indices)
385
-
386
- const line_style_up = get_line_style(
387
- color,
388
- is_acoustic === true,
389
- frequencies,
390
- band_idx,
391
- )
392
-
393
- const spin_down_band = bs.spin_down_bands?.[band_idx]
394
- const has_spin_down_channel = detected_band_type === `electronic` &&
395
- Array.isArray(spin_down_band) &&
396
- spin_down_band.length >= end_idx
397
-
398
- const track_max_slope = (meta: helpers.BandPointMeta[]) => {
399
- for (const pt of meta) {
400
- if (typeof pt.slope === `number` && Number.isFinite(pt.slope)) {
401
- max_slope = Math.max(max_slope, Math.abs(pt.slope))
402
- }
403
- }
404
- }
405
-
406
- if (effective_spin_mode !== `down_only`) {
407
- const meta = helpers.build_point_metadata({
408
- x_vals: scaled_distances,
409
- y_vals: frequencies,
410
- band_idx,
411
- spin: `up`,
412
- is_acoustic,
413
- bs,
414
- start_idx,
415
- })
416
- track_max_slope(meta)
417
- all_series.push({
418
- x: scaled_distances,
419
- y: frequencies,
420
- markers: `line`,
421
- label: has_spin_down_channel
422
- ? `${structure_label} (↑)`
423
- : structure_label,
424
- line_style: line_style_up,
425
- metadata: meta,
426
- })
427
- }
428
-
429
- if (has_spin_down_channel && effective_spin_mode !== `up_only`) {
430
- const spin_down_frequencies = convert_band_values(
431
- spin_down_band.slice(start_idx, end_idx),
432
- )
433
- const meta = helpers.build_point_metadata({
434
- x_vals: scaled_distances,
435
- y_vals: spin_down_frequencies,
436
- band_idx,
437
- spin: `down`,
438
- is_acoustic,
439
- bs,
440
- start_idx,
441
- })
442
- track_max_slope(meta)
443
- all_series.push({
444
- x: scaled_distances,
445
- y: spin_down_frequencies,
446
- markers: `line`,
447
- label: `${structure_label} (↓)`,
448
- line_style: {
449
- ...line_style_up,
450
- line_dash: `4,2`,
451
- stroke_width: Math.max(1, line_style_up.stroke_width - 0.1),
452
- },
453
- metadata: meta,
454
- })
455
- }
456
- }
457
- }
458
- }
459
-
460
- return { series_data: all_series, max_abs_slope: max_slope || 1 }
461
- })
462
-
463
- // Compute ribbon data for bands with width information
464
- let ribbon_data = $derived.by((): RibbonData[] => {
465
- if (Object.keys(band_structs_dict).length === 0 || segments_to_plot.size === 0) {
466
- return []
467
- }
468
-
469
- const all_ribbons: RibbonData[] = []
470
-
471
- for (const [bs_idx, [label, bs]] of Object.entries(band_structs_dict).entries()) {
472
- // Skip if this band structure has no width data
473
- if (!bs.band_widths || bs.band_widths.length === 0) continue
474
-
475
- const color = PLOT_COLORS[bs_idx % PLOT_COLORS.length]
476
- const structure_label = label || `Structure ${bs_idx + 1}`
477
- const config = helpers.get_ribbon_config(ribbon_config, label)
478
-
479
- for (const branch of bs.branches) {
480
- const start_idx = branch.start_index
481
- const end_idx = branch.end_index + 1
482
- const start_label = bs.qpoints[start_idx]?.label ?? undefined
483
- const end_label = bs.qpoints[end_idx - 1]?.label ?? undefined
484
- const segment_key = helpers.get_segment_key(start_label, end_label)
485
-
486
- if (!segments_to_plot.has(segment_key)) continue
487
-
488
- // Skip discontinuous segments
489
- const is_discontinuity = branch.end_index - branch.start_index === 1
490
- if (is_discontinuity) continue
491
-
492
- const [x_start, x_end] = x_positions?.[segment_key] || [0, 1]
493
-
494
- // Scale distances for this segment
495
- const segment_distances = bs.distance.slice(start_idx, end_idx)
496
- const scaled_distances = helpers.scale_segment_distances(
497
- segment_distances,
498
- x_start,
499
- x_end,
500
- )
501
-
502
- // Create ribbon data for each band that has width data
503
- for (let band_idx = 0; band_idx < bs.nb_bands; band_idx++) {
504
- const band_widths = bs.band_widths[band_idx]
505
- if (!band_widths) continue
506
-
507
- const width_values = band_widths.slice(start_idx, end_idx)
508
- // Skip if all widths are zero or missing
509
- if (width_values.every((wv) => !wv || wv <= 0)) continue
510
-
511
- const y_values = convert_band_values(
512
- bs.bands[band_idx].slice(start_idx, end_idx),
513
- )
514
-
515
- all_ribbons.push({
516
- x_values: scaled_distances,
517
- y_values,
518
- width_values,
519
- color: config.color ?? color,
520
- opacity: config.opacity ?? 0.3,
521
- max_width: config.max_width ?? 6,
522
- scale: config.scale ?? 1,
523
- band_idx,
524
- structure_label,
525
- segment_key,
526
- })
527
- }
528
- }
529
- }
530
-
531
- return all_ribbons
532
- })
533
-
534
- // Get x-axis tick positions with custom labels for symmetry points
535
- let x_axis_ticks = $derived.by(() => {
536
- const tick_map = new SvelteMap<number, string[]>()
537
- const add_label = (pos: number, label: string) => {
538
- let labels = tick_map.get(pos)
539
- if (!labels) {
540
- labels = []
541
- tick_map.set(pos, labels)
542
- }
543
- if (!labels.includes(label)) labels.push(label)
544
- }
545
-
546
- Object.entries(x_positions ?? {})
547
- .sort(([, [a]], [, [b]]) => a - b)
548
- .forEach(([segment_key, [x_start, x_end]]) => {
549
- const [start_lbl, end_lbl] = segment_key.split(`_`)
550
- const pretty_start = start_lbl !== `null`
551
- ? helpers.pretty_sym_point(start_lbl)
552
- : ``
553
- const pretty_end = end_lbl !== `null` ? helpers.pretty_sym_point(end_lbl) : ``
554
-
555
- // Check if this is a discontinuity (zero-length segment)
556
- const is_discontinuity = Math.abs(x_end - x_start) < 1e-6
557
-
558
- if (is_discontinuity && pretty_start && pretty_end) {
559
- // Combine labels at discontinuity points
560
- add_label(x_start, pretty_start)
561
- add_label(x_start, pretty_end)
562
- } else {
563
- // Normal segment with distinct start/end
564
- if (pretty_start) add_label(x_start, pretty_start)
565
- if (pretty_end) add_label(x_end, pretty_end)
566
- }
567
- })
568
-
569
- // Merge labels at same position with pipe separator
570
- return Object.fromEntries(
571
- Array.from(tick_map.entries()).map(([pos, labels]) => [
572
- pos,
573
- labels.join(` | `),
574
- ]),
575
- )
576
- })
577
-
578
- let x_range = $derived.by((): Vec2 => {
579
- const flat = Object.values(x_positions ?? {}).flat()
580
- return [flat[0] ?? 0, flat.at(-1) ?? 1]
581
- })
582
-
583
- // Calculate y-range, enforcing 0 minimum for phonon bands without imaginary modes
584
- let y_range = $derived.by((): Vec2 | undefined => {
585
- const all_freqs = Object.values(band_structs_dict).flatMap((bs) => [
586
- ...bs.bands.flat(),
587
- ...(bs.spin_down_bands?.flat() ?? []),
588
- ])
589
- // Keep electronic y-range independent of phonon unit conversion options.
590
- const display_values = detected_band_type === `phonon`
591
- ? convert_band_values(all_freqs)
592
- : all_freqs
593
- if (!display_values.length) return undefined
594
- const finite = display_values.filter(Number.isFinite)
595
- if (!finite.length) return undefined
596
- let min_val = Math.min(...finite), max_val = Math.max(...finite)
597
- if (
598
- // clamp phonon min to 0 if negatives are noise
599
- detected_band_type === `phonon` && min_val < 0 &&
600
- helpers.negative_fraction(finite) < helpers.IMAGINARY_MODE_NOISE_THRESHOLD
601
- ) {
602
- min_val = 0
603
- }
604
- const padding = (max_val - min_val) * 0.02
605
- return [min_val === 0 ? 0 : min_val - padding, max_val + padding]
606
- })
607
-
608
- // Internal y_axis that ScatterPlot binds to - syncs zoom changes back to parent
609
- let internal_y_axis = $derived({
610
- label: detected_band_type === `phonon` ? `Frequency (${units})` : `Energy (eV)`,
611
- format: `.2f`,
612
- label_shift: { y: 15 },
613
- range: y_range,
614
- ...y_axis,
615
- })
616
-
617
- // Sync zoom changes from ScatterPlot back to parent via bindable y_axis
618
- // Also clears parent range when internal range becomes invalid (auto-range reset)
619
- $effect(() => {
620
- const range = internal_y_axis.range
621
- if (helpers.is_valid_range(range)) {
622
- if (y_axis.range?.[0] !== range[0] || y_axis.range?.[1] !== range[1]) {
623
- y_axis = { ...y_axis, range }
624
- }
625
- return
626
- }
627
- // Range became invalid - clear parent's range to propagate reset
628
- if (`range` in y_axis) {
629
- const { range: _omit, ...axis_without_range } = y_axis
630
- y_axis = axis_without_range
631
- }
632
- })
633
-
634
- let has_series = $derived(series_data.length > 0)
635
- let is_strict_path_error = $derived(path_mode === `strict` && !!strict_path_error)
636
-
637
- let imaginary_mode_region = $derived.by((): FillRegion[] => {
638
- if (
639
- detected_band_type !== `phonon` ||
640
- !shade_imaginary_modes ||
641
- !y_range ||
642
- y_range[0] >= 0
643
- ) return []
644
- return [{
645
- lower: y_range[0],
646
- upper: 0,
647
- fill: `var(--bands-imaginary-region-color, light-dark(#f8d7da, #5a1a1f))`,
648
- fill_opacity: 0.2,
649
- label: `Imaginary modes`,
650
- show_in_legend: false,
651
- z_index: `below-lines`,
652
- }]
653
- })
654
-
655
- let custom_highlight_regions = $derived.by((): FillRegion[] =>
656
- (highlight_regions ?? [])
657
- .filter((region) =>
658
- Number.isFinite(region.y_min) && Number.isFinite(region.y_max)
659
- )
660
- .map((region) => ({
661
- lower: Math.min(region.y_min, region.y_max),
662
- upper: Math.max(region.y_min, region.y_max),
663
- fill: region.color ??
664
- `var(--bands-highlight-region-color, light-dark(#f6e8c3, #4d3f20))`,
665
- fill_opacity: region.opacity ?? 0.2,
666
- label: region.label,
667
- show_in_legend: Boolean(region.label),
668
- z_index: `below-lines` as const,
669
- }))
670
- )
671
-
672
- let fill_regions = $derived([
673
- ...imaginary_mode_region,
674
- ...custom_highlight_regions,
675
- ])
676
-
677
- let electronic_gap_annotation = $derived.by(() => {
678
- if (
679
- !show_gap_annotation ||
680
- detected_band_type !== `electronic` ||
681
- effective_fermi_level === undefined
682
- ) return null
683
- const all_energies = series_data.flatMap((series_item) =>
684
- series_item.y.filter(Number.isFinite)
685
- )
686
- const occupied = all_energies.filter((energy) => energy <= effective_fermi_level)
687
- const unoccupied = all_energies.filter((energy) => energy > effective_fermi_level)
688
- if (!occupied.length || !unoccupied.length) return null
689
- const vbm = Math.max(...occupied)
690
- const cbm = Math.min(...unoccupied)
691
- const gap = cbm - vbm
692
- if (!(gap > 0)) return null
693
- return { vbm, cbm, gap }
694
- })
695
-
696
- let empty_state_message = $derived.by(() => {
697
- if (is_strict_path_error) {
698
- return strict_path_error ?? `Path mismatch in strict mode.`
699
- }
700
- if (!band_structs || Object.keys(band_structs_dict).length === 0) {
701
- return `No valid band structure data to display.`
702
- }
703
- if (!has_series) {
704
- return `No plottable band segments were found in the provided data.`
705
- }
706
- return `No valid band structure data to display.`
707
- })
708
-
709
- let display = $state({ x_grid: false, y_grid: true, y_zero_line: true })
710
- </script>
711
- {#if has_series && !is_strict_path_error}
712
- <ScatterPlot
713
- {id}
714
- class={class_name}
715
- {style}
716
- data-testid={data_testid}
717
- series={series_data}
718
- {fill_regions}
719
- x_axis={{
720
- label: `Wave Vector`,
721
- ticks: Object.keys(x_axis_ticks).length > 0 ? x_axis_ticks : undefined,
722
- format: ``,
723
- range: x_range,
724
- ...x_axis,
725
- }}
726
- bind:y_axis={internal_y_axis}
727
- bind:display
728
- legend={show_legend && Object.keys(band_structs_dict).length > 1 ? {} : null}
729
- hover_config={{ threshold_px: 50 }}
730
- controls={{ show: show_controls }}
731
- {...rest}
732
- >
733
- {#snippet tooltip({ x, y, y_formatted, label, metadata })}
734
- {@const y_label_full = internal_y_axis.label ?? ``}
735
- {@const [, y_label, y_unit] = y_label_full.match(/^(.+?)\s*\(([^)]+)\)$/) ??
736
- [, y_label_full, ``]}
737
- {@const segment = Object.entries(x_positions ?? {}).find(([, [start, end]]) =>
738
- x >= start && x <= end
739
- )}
740
- {@const path = segment?.[0].split(`_`).map((lbl) =>
741
- lbl !== `null` ? helpers.pretty_sym_point(lbl) : ``
742
- ).filter(Boolean).join(` → `) || null}
743
- {@const {
744
- band_idx,
745
- spin,
746
- is_acoustic,
747
- nb_bands,
748
- frac_coords,
749
- qpoint_label,
750
- band_width,
751
- slope,
752
- } = (metadata ?? {}) as Partial<helpers.BandPointMeta>}
753
- {@const num_structs = Object.keys(band_structs_dict).length}
754
- {#if num_structs > 1 && label}<strong>{label}</strong><br />{/if}
755
- {@html sanitize_html(y_label || `Value`)}: {y_formatted}{y_unit ? ` ${y_unit}` : ``}<br />
756
- {#if path}Path: {path}<br />{/if}
757
- {#if typeof band_idx === `number`}
758
- Band: {band_idx + 1}{#if typeof nb_bands === `number`}&thinsp;/&thinsp;{
759
- nb_bands
760
- }{/if}
761
- {#if typeof is_acoustic === `boolean`}
762
- ({is_acoustic ? `acoustic` : `optical`})
763
- {:else if detected_band_type === `electronic` && effective_fermi_level !== undefined}
764
- ({y <= effective_fermi_level ? `valence` : `conduction`})
765
- {/if}
766
- {#if spin === `up` || spin === `down`}
767
- {spin === `up` ? `↑` : `↓`}
768
- {/if}
769
- {/if}
770
- {#if typeof qpoint_label === `string` && qpoint_label}
771
- <br />At: {helpers.pretty_sym_point(qpoint_label)}
772
- {/if}
773
- {#if Array.isArray(frac_coords)}
774
- <br />{detected_band_type === `electronic` ? `k` : `q`}: [{
775
- frac_coords.map((coord: number) => format_num(coord, `.3f`)).join(`, `)
776
- }]
777
- {/if}
778
- {#if typeof band_width === `number` && band_width > 0}
779
- <br />Projection: {format_num(band_width, `.3~g`)}
780
- {/if}
781
- {#if typeof slope === `number` && Number.isFinite(slope)}
782
- {@const rel = Math.abs(slope) / max_abs_slope}
783
- <br />Dispersion: {rel < 0.15 ? `flat` : rel < 0.5 ? `moderate` : `steep`}
784
- {/if}
785
- {/snippet}
786
-
787
- {#snippet controls_extra()}
788
- {#if show_path_mode_control}
789
- <SettingsSection
790
- title="Path Mode"
791
- current_values={{ path_mode }}
792
- on_reset={() => (path_mode = `strict`)}
793
- >
794
- <div class="pane-row">
795
- <label for="bands-path-mode">Mode:</label>
796
- <select id="bands-path-mode" bind:value={path_mode}>
797
- <option value="strict">strict</option>
798
- <option value="intersection">intersection</option>
799
- <option value="union">union</option>
800
- </select>
801
- </div>
802
- </SettingsSection>
803
- {/if}
804
-
805
- {#if show_units_control && detected_band_type === `phonon`}
806
- <SettingsSection
807
- title="Units"
808
- current_values={{ units }}
809
- on_reset={() => (units = `THz`)}
810
- >
811
- <div class="pane-row">
812
- <label for="bands-units">Frequency:</label>
813
- <select id="bands-units" bind:value={units}>
814
- <option value="THz">THz</option>
815
- <option value="eV">eV</option>
816
- <option value="meV">meV</option>
817
- <option value="cm-1">cm-1</option>
818
- <option value="Ha">Ha</option>
819
- </select>
820
- </div>
821
- </SettingsSection>
822
- {/if}
823
-
824
- {#if show_spin_control && detected_band_type === `electronic`}
825
- <SettingsSection
826
- title="Spin Display"
827
- current_values={{ band_spin_mode }}
828
- on_reset={() => (band_spin_mode = `overlay`)}
829
- >
830
- <div class="pane-row">
831
- <label for="bands-spin-mode">Mode:</label>
832
- <select id="bands-spin-mode" bind:value={band_spin_mode}>
833
- <option value="overlay">overlay</option>
834
- <option value="up_only">up only</option>
835
- <option value="down_only">down only</option>
836
- </select>
837
- </div>
838
- </SettingsSection>
839
- {/if}
840
-
841
- {#if show_annotation_controls && detected_band_type === `electronic`}
842
- <SettingsSection
843
- title="Annotations"
844
- current_values={{ show_gap_annotation }}
845
- on_reset={() => (show_gap_annotation = true)}
846
- >
847
- <div class="pane-row pane-checkbox">
848
- <input
849
- id="bands-gap-annotation"
850
- type="checkbox"
851
- bind:checked={show_gap_annotation}
852
- />
853
- <label for="bands-gap-annotation">Show band gap annotation</label>
854
- </div>
855
- </SettingsSection>
856
- {/if}
857
- {/snippet}
858
-
859
- {#snippet user_content({ height, x_scale_fn, y_scale_fn, pad })}
860
- <!-- Fat band ribbons (rendered behind band lines) -->
861
- {#each ribbon_data as
862
- ribbon
863
- (`${ribbon.structure_label}-${ribbon.segment_key}-${ribbon.band_idx}`)
864
- }
865
- {@const path_d = helpers.generate_ribbon_path(
866
- ribbon.x_values,
867
- ribbon.y_values,
868
- ribbon.width_values,
869
- x_scale_fn,
870
- y_scale_fn,
871
- ribbon.max_width,
872
- ribbon.scale,
873
- )}
874
- {#if path_d}
875
- <path
876
- d={path_d}
877
- fill={ribbon.color}
878
- opacity={ribbon.opacity}
879
- stroke="none"
880
- class="fat-band-ribbon"
881
- />
882
- {/if}
883
- {/each}
884
-
885
- <!-- Symmetry point vertical lines (filter NaN from scale) -->
886
- {#each Object.keys(x_axis_ticks).map(Number).map((tick) => x_scale_fn(tick)).filter(
887
- Number.isFinite,
888
- ) as
889
- scaled_x
890
- (scaled_x)
891
- }
892
- <line
893
- x1={scaled_x}
894
- x2={scaled_x}
895
- y1={pad.t}
896
- y2={height - pad.b}
897
- stroke="var(--bands-symmetry-line-color, light-dark(black, white))"
898
- stroke-width="var(--bands-symmetry-line-width, 1)"
899
- opacity="var(--bands-symmetry-line-opacity, 0.5)"
900
- />
901
- {/each}
902
-
903
- <!-- Shared geometry for Fermi level and gap annotations -->
904
- {@const fermi_y = effective_fermi_level !== undefined
905
- ? y_scale_fn(effective_fermi_level)
906
- : NaN}
907
- {@const bands_x_end = x_scale_fn(Object.values(x_positions ?? {}).flat().at(-1) ?? 1)}
908
- {@const gap_data = electronic_gap_annotation}
909
- {@const vbm_y = gap_data ? y_scale_fn(gap_data.vbm) : NaN}
910
- {@const cbm_y = gap_data ? y_scale_fn(gap_data.cbm) : NaN}
911
- {@const gap_mid_y = (vbm_y + cbm_y) / 2}
912
- {@const ef_needs_offset = Number.isFinite(gap_mid_y) &&
913
- Math.abs(fermi_y - gap_mid_y) < 16}
914
- {@const ef_label_y = ef_needs_offset
915
- ? gap_mid_y + (fermi_y >= gap_mid_y ? 16 : -16)
916
- : fermi_y}
917
-
918
- <!-- Fermi level line for electronic bands -->
919
- {#if Number.isFinite(fermi_y) && Number.isFinite(bands_x_end)}
920
- <line
921
- class="fermi-level-line"
922
- x1={pad.l}
923
- x2={bands_x_end}
924
- y1={fermi_y}
925
- y2={fermi_y}
926
- stroke="var(--bands-fermi-line-color, light-dark(#e74c3c, #ff6b6b))"
927
- stroke-width="var(--bands-fermi-line-width, 1.5)"
928
- stroke-dasharray="var(--bands-fermi-line-dash, 6,3)"
929
- opacity="var(--bands-fermi-line-opacity, 0.8)"
930
- />
931
- {#if ef_needs_offset}
932
- <line
933
- x1={bands_x_end}
934
- y1={fermi_y}
935
- x2={bands_x_end + 3}
936
- y2={ef_label_y}
937
- stroke="var(--bands-fermi-line-color, light-dark(#e74c3c, #ff6b6b))"
938
- stroke-width="0.7"
939
- opacity="0.5"
940
- />
941
- {/if}
942
- <text
943
- class="fermi-level-label"
944
- x={bands_x_end + 4}
945
- y={ef_label_y}
946
- dy="0.35em"
947
- font-size="10"
948
- fill="var(--bands-fermi-line-color, light-dark(#e74c3c, #ff6b6b))"
949
- opacity="0.9"
950
- >
951
- E<tspan dy="2" font-size="8">F</tspan>
952
- </text>
953
- {/if}
954
-
955
- <!-- Reference frequency horizontal line -->
956
- {@const ref_freq = reference_frequency != null
957
- ? convert_band_values([reference_frequency])[0]
958
- : NaN}
959
- {@const ref_y = Number.isFinite(ref_freq) ? y_scale_fn(ref_freq) : NaN}
960
- {#if Number.isFinite(ref_y) && Number.isFinite(bands_x_end)}
961
- <line
962
- x1={pad.l}
963
- x2={bands_x_end}
964
- y1={ref_y}
965
- y2={ref_y}
966
- stroke="var(--bands-reference-line-color, light-dark(#d48860, #c47850))"
967
- stroke-width="var(--bands-reference-line-width, 1)"
968
- stroke-dasharray="var(--bands-reference-line-dash, 4,3)"
969
- opacity="var(--bands-reference-line-opacity, 0.5)"
970
- />
971
- {/if}
972
-
973
- <!-- Electronic band edge and gap annotation -->
974
- {#if gap_data && Number.isFinite(vbm_y) && Number.isFinite(cbm_y) &&
975
- Number.isFinite(bands_x_end)}
976
- {#each [
977
- [vbm_y, `var(--bands-gap-vbm-color, light-dark(#1f77b4, #7db7ff))`],
978
- [cbm_y, `var(--bands-gap-cbm-color, light-dark(#2ca02c, #7ddc7d))`],
979
- ] as [number, string][] as
980
- [edge_y, color]
981
- (edge_y)
982
- }
983
- <line
984
- x1={pad.l}
985
- x2={bands_x_end + 3}
986
- y1={edge_y}
987
- y2={edge_y}
988
- stroke={color}
989
- stroke-width="var(--bands-gap-line-width, 1)"
990
- stroke-dasharray="var(--bands-gap-line-dash, 2,2)"
991
- opacity="0.7"
992
- />
993
- {/each}
994
- <text
995
- x={bands_x_end + 4}
996
- y={gap_mid_y}
997
- dy="0.35em"
998
- font-size="10"
999
- fill="var(--text-color)"
1000
- >
1001
- E<tspan dy="2" font-size="8">g:</tspan>
1002
- <tspan dy="-2">{Number(gap_data.gap.toPrecision(4))} eV</tspan>
1003
- </text>
1004
- {/if}
1005
- {/snippet}
1006
- </ScatterPlot>
1007
- {:else}
1008
- <EmptyState
1009
- {id}
1010
- class={class_name}
1011
- {style}
1012
- data-testid={data_testid}
1013
- {...empty_state_attrs}
1014
- message={empty_state_message}
1015
- />
1016
- {/if}
1017
-
1018
- <style>
1019
- .pane-row {
1020
- display: flex;
1021
- align-items: center;
1022
- gap: 0.5em;
1023
- margin: 0.3em 0;
1024
- font-size: 0.9em;
1025
- }
1026
- .pane-row label {
1027
- min-width: 4.5em;
1028
- flex-shrink: 0;
1029
- }
1030
- .pane-row select {
1031
- flex: 1;
1032
- min-width: 0;
1033
- }
1034
- .pane-checkbox {
1035
- gap: 0.4em;
1036
- }
1037
- .pane-checkbox label {
1038
- min-width: 0;
1039
- }
1040
- </style>