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
@@ -0,0 +1,929 @@
1
+ <script lang="ts">
2
+ import {
3
+ get_alphabetical_formula,
4
+ get_electro_neg_formula,
5
+ get_reduced_formula,
6
+ } from '../composition'
7
+ import Icon from '../Icon.svelte'
8
+ import { format_num } from '../labels'
9
+ import { sanitize_html } from '../sanitize'
10
+ import Histogram from '../plot/Histogram.svelte'
11
+ import type { Label, RowData } from '../table'
12
+ import HeatmapTable from '../table/HeatmapTable.svelte'
13
+ import type { HTMLAttributes } from 'svelte/elements'
14
+ import { SvelteMap, SvelteSet } from 'svelte/reactivity'
15
+ import type { ConvexHullEntry, PhaseArityField, PhaseStats } from './types'
16
+ import { get_arity, is_on_hull } from './helpers'
17
+
18
+ let {
19
+ phase_stats,
20
+ stable_entries,
21
+ unstable_entries,
22
+ show_stable = true,
23
+ show_unstable = true,
24
+ layout = `toggle`,
25
+ on_entry_click,
26
+ highlighted_entry_id,
27
+ min_n_elements = $bindable(1),
28
+ entry_href,
29
+ ...rest
30
+ }:
31
+ & HTMLAttributes<HTMLDivElement>
32
+ & {
33
+ phase_stats: PhaseStats | null
34
+ stable_entries: ConvexHullEntry[]
35
+ unstable_entries: ConvexHullEntry[]
36
+ show_stable?: boolean
37
+ show_unstable?: boolean
38
+ // 'toggle' shows stats/table with toggle buttons (default)
39
+ // 'side-by-side' shows both stats and table next to each other without toggle
40
+ layout?: `toggle` | `side-by-side`
41
+ // Called when a table row is clicked, with the corresponding entry
42
+ on_entry_click?: (entry: ConvexHullEntry) => void
43
+ // Entry ID to highlight in the table (e.g. current material on detail page)
44
+ highlighted_entry_id?: string
45
+ // Minimum number of elements filter for table (bindable for URL sync)
46
+ min_n_elements?: number
47
+ // Generate URL for an entry (makes ID column a clickable link)
48
+ entry_href?: (entry: ConvexHullEntry) => string | null
49
+ } = $props()
50
+
51
+ let copied_items = new SvelteSet<string>()
52
+ let view_mode = $state<`stats` | `table`>(`stats`)
53
+ // Formula filter: when set, table shows only entries with this reduced formula
54
+ let formula_filter = $state(``)
55
+ let show_export_dropdown = $state(false)
56
+ const table_scroll_height =
57
+ `var(--hull-stats-table-height, calc(var(--hull-stats-table-row-height, 2.35rem) * 10 + var(--hull-stats-table-header-height, 3.5rem)))`
58
+ const table_scroll_style = $derived(layout === `side-by-side`
59
+ ? `flex: 1 1 0; height: ${table_scroll_height}; min-height: ${table_scroll_height}; max-width: 100%; overflow: auto`
60
+ : `height: ${table_scroll_height}; min-height: ${table_scroll_height}; max-height: var(--hull-stats-max-height, 70vh); max-width: 100%; overflow: auto`
61
+ )
62
+ const table_root_style = $derived(layout === `side-by-side`
63
+ ? `flex: 1 1 0; min-height: ${table_scroll_height}; margin-inline: 0`
64
+ : `min-width: 0; margin-inline: 0`
65
+ )
66
+
67
+ async function copy_to_clipboard(label: string, value: string, key: string) {
68
+ try {
69
+ await navigator.clipboard.writeText(`${label}: ${value}`)
70
+ copied_items.add(key)
71
+ setTimeout(() => copied_items.delete(key), 1000)
72
+ } catch (error) {
73
+ console.error(`Failed to copy to clipboard:`, error)
74
+ }
75
+ }
76
+ function handle_copy_keydown(
77
+ event: KeyboardEvent,
78
+ label: string,
79
+ value: string,
80
+ key: string,
81
+ ): void {
82
+ if (event.key !== `Enter` && event.key !== ` `) return
83
+ event.preventDefault()
84
+ copy_to_clipboard(label, value, key)
85
+ }
86
+
87
+ // Shared concatenation of stable + unstable for histograms
88
+ let all_entries = $derived([...stable_entries, ...unstable_entries])
89
+ let shown_entries = $derived([
90
+ ...(show_stable ? stable_entries : []),
91
+ ...(show_unstable ? unstable_entries : []),
92
+ ])
93
+
94
+ // Static arity labels for phase breakdown display
95
+ const arity_types: [string, PhaseArityField, number][] = [
96
+ [`Unary`, `unary`, 1],
97
+ [`Binary`, `binary`, 2],
98
+ [`Ternary`, `ternary`, 3],
99
+ [`Quaternary`, `quaternary`, 4],
100
+ [`Quinary+`, `quinary_plus`, 5],
101
+ ]
102
+
103
+ const histogram_props = {
104
+ bins: 50,
105
+ y_axis: { label: ``, ticks: 3 },
106
+ show_legend: false,
107
+ show_controls: false,
108
+ padding: { t: 5, b: 22, l: 35, r: 5 },
109
+ style: `height: 100px; --histogram-min-height: 100px`,
110
+ } as const
111
+
112
+ // Prepare histogram data for formation energies and hull distances
113
+ let e_form_data = $derived([{
114
+ x: [] as number[],
115
+ y: all_entries
116
+ .map((entry) => entry.e_form_per_atom ?? entry.energy_per_atom)
117
+ .filter((val): val is number => val !== undefined && isFinite(val)),
118
+ label: `Formation Energy`,
119
+ }])
120
+
121
+ let hull_distance_data = $derived([{
122
+ x: [] as number[],
123
+ y: all_entries
124
+ .map((entry) => entry.e_above_hull)
125
+ .filter((val): val is number => val !== undefined && isFinite(val)),
126
+ label: `E above hull`,
127
+ }])
128
+
129
+ let pane_data = $derived.by(() => {
130
+ if (!phase_stats) return []
131
+
132
+ const pct = (count: number) =>
133
+ phase_stats.total > 0 ? format_num(count / phase_stats.total, `.1~%`) : `0%`
134
+
135
+ return [
136
+ {
137
+ title: ``,
138
+ items: [
139
+ {
140
+ label: `Total entries in ${phase_stats.chemical_system}`,
141
+ value: format_num(phase_stats.total),
142
+ key: `total-entries`,
143
+ },
144
+ // Only show phase types that exist or are within the max_arity
145
+ // used when computing stats (respects zeroed-out counts)
146
+ ...arity_types
147
+ .filter(([, field, arity]) =>
148
+ phase_stats[field] > 0 || phase_stats.max_arity >= arity
149
+ )
150
+ .map(([display, field]) => ({
151
+ label: `${display} phases`,
152
+ value: `${format_num(phase_stats[field])} (${pct(phase_stats[field])})`,
153
+ key: `${field}-phases`,
154
+ })),
155
+ ],
156
+ },
157
+ {
158
+ title: `Stability`,
159
+ items: [
160
+ {
161
+ label: `Stable phases`,
162
+ value: `${format_num(phase_stats.stable)} (${pct(phase_stats.stable)})`,
163
+ key: `stable-phases`,
164
+ },
165
+ {
166
+ label: `Unstable phases`,
167
+ value: `${format_num(phase_stats.unstable)} (${
168
+ pct(phase_stats.unstable)
169
+ })`,
170
+ key: `unstable-phases`,
171
+ },
172
+ ],
173
+ },
174
+ {
175
+ title: `E<sub>form</sub> distribution`,
176
+ items: [{
177
+ label: `Min / avg / max (eV/atom)`,
178
+ value: [
179
+ phase_stats.energy_range.min,
180
+ phase_stats.energy_range.avg,
181
+ phase_stats.energy_range.max,
182
+ ]
183
+ .map((val) => format_num(val, `.3f`)).join(` / `),
184
+ key: `formation-energy`,
185
+ }],
186
+ },
187
+ {
188
+ title: `E<sub>above hull</sub> distribution`,
189
+ items: [{
190
+ label: `Max / avg (eV/atom)`,
191
+ value: [phase_stats.hull_distance.max, phase_stats.hull_distance.avg]
192
+ .map((val) => format_num(val, `.3f`)).join(` / `),
193
+ key: `hull-distance`,
194
+ }],
195
+ },
196
+ ]
197
+ })
198
+
199
+ // Subsystem coverage: count entries per element pair for the stats pane
200
+ let subsystem_coverage = $derived.by(() => {
201
+ if (!phase_stats) return null
202
+ const elements = phase_stats.chemical_system.split(`-`)
203
+ if (elements.length < 3 || elements.length > 10) return null
204
+ // Count entries containing each pair
205
+ const pair_counts = new SvelteMap<string, number>()
206
+ for (const entry of all_entries) {
207
+ const active =
208
+ (Object.keys(entry.composition) as (keyof typeof entry.composition)[])
209
+ .filter((el) => (entry.composition[el] ?? 0) > 0)
210
+ // Count all pairs present in this entry
211
+ for (let idx_a = 0; idx_a < active.length; idx_a++) {
212
+ for (let idx_b = idx_a + 1; idx_b < active.length; idx_b++) {
213
+ const key = [active[idx_a], active[idx_b]].sort().join(`-`)
214
+ pair_counts.set(key, (pair_counts.get(key) ?? 0) + 1)
215
+ }
216
+ }
217
+ }
218
+ // Build pairs list sorted by element order in chemical_system
219
+ return elements.flatMap((el_a, idx_a) =>
220
+ elements.slice(idx_a + 1).map((el_b) => {
221
+ const key = [el_a, el_b].sort().join(`-`)
222
+ return { pair: key, count: pair_counts.get(key) ?? 0 }
223
+ })
224
+ )
225
+ })
226
+ let subsystem_coverage_summary = $derived(
227
+ subsystem_coverage?.map(({ pair, count }) => `${pair}: ${count}`).join(` | `) ??
228
+ null,
229
+ )
230
+
231
+ // Table view: visible entries filtered by min element count and formula
232
+ let visible_entries = $derived(
233
+ shown_entries.filter((entry) => {
234
+ if (min_n_elements > 1 && get_arity(entry) < min_n_elements) return false
235
+ if (
236
+ active_formula_filter &&
237
+ composition_key(entry.composition) !== active_formula_filter
238
+ ) return false
239
+ return true
240
+ }),
241
+ )
242
+ let has_raw = $derived(
243
+ visible_entries.some((entry) => entry.energy_per_atom !== undefined),
244
+ )
245
+ let has_ids = $derived(visible_entries.some((entry) => entry.entry_id))
246
+ let max_n_el = $derived(
247
+ all_entries.reduce((max, entry) => Math.max(max, get_arity(entry)), 1),
248
+ )
249
+
250
+ // Sortable HTML cell with a hidden data-sort-value for HeatmapTable sorting
251
+ const sort_span = (sort_val: number | string, display: string, attrs = ``) =>
252
+ `<span data-sort-value="${sort_val}"${attrs ? ` ${attrs}` : ``}>${display}</span>`
253
+
254
+ // Escape HTML special chars to prevent XSS when rendering user-supplied strings via {@html}
255
+ const escape_html = (str: string): string =>
256
+ str
257
+ .replace(/&/g, `&amp;`)
258
+ .replace(/</g, `&lt;`)
259
+ .replace(/>/g, `&gt;`)
260
+ .replace(/"/g, `&quot;`)
261
+ .replace(/'/g, `&#39;`)
262
+ const unescape_html = (str: string, max_rounds = 5): string => {
263
+ let decoded = str
264
+ for (let round_idx = 0; round_idx < max_rounds; round_idx++) {
265
+ const next_decoded = decoded
266
+ .replace(/&amp;/g, `&`)
267
+ .replace(/&lt;/g, `<`)
268
+ .replace(/&gt;/g, `>`)
269
+ .replace(/&quot;/g, `"`)
270
+ .replace(/&#39;/g, `'`)
271
+ if (next_decoded === decoded) break
272
+ decoded = next_decoded
273
+ }
274
+ return decoded
275
+ }
276
+ // Convert legacy/html formula strings like Fe<sub>2</sub>O<sub>3</sub> back to plain
277
+ // stoichiometric input before parsing/reordering.
278
+ const normalize_formula_markup = (formula: string): string =>
279
+ unescape_html(formula)
280
+ .replaceAll(/<sub>\s*([^<]+?)\s*<\/sub>/gi, `$1`)
281
+ .replaceAll(/<[^>]+>/g, ``)
282
+ .replaceAll(/\s+/g, ``)
283
+ const sanitize_href = (href: string | null | undefined): string | null => {
284
+ const trimmed_href = href?.trim()
285
+ if (!trimmed_href) return null
286
+ const lower_href = trimmed_href.toLowerCase()
287
+ const blocked_schemes = [`javascript:`, `data:`, `vbscript:`]
288
+ if (blocked_schemes.some((scheme) => lower_href.startsWith(scheme))) return null
289
+ return trimmed_href
290
+ }
291
+ // Serialize reduced composition to a stable string key for polymorph counting
292
+ const composition_key = (comp: Record<string, number>): string =>
293
+ get_alphabetical_formula(get_reduced_formula(comp), true, ``)
294
+
295
+ // Count polymorphs per reduced formula across all entries
296
+ let polymorph_counts = $derived.by(() => {
297
+ const counts = new SvelteMap<string, number>()
298
+ for (const entry of all_entries) {
299
+ const key = composition_key(entry.composition)
300
+ counts.set(key, (counts.get(key) ?? 0) + 1)
301
+ }
302
+ return counts
303
+ })
304
+ let poly_formulas = $derived(
305
+ [...polymorph_counts.entries()]
306
+ .filter(([, count]) => count > 1)
307
+ .sort(([, count_a], [, count_b]) => count_b - count_a),
308
+ )
309
+ let has_polymorphs = $derived(poly_formulas.length > 0)
310
+ let active_formula_filter = $derived.by(() => {
311
+ if (!formula_filter || !has_polymorphs) return ``
312
+ return poly_formulas.some(([formula]) => formula === formula_filter)
313
+ ? formula_filter
314
+ : ``
315
+ })
316
+ $effect(() => {
317
+ if (formula_filter && formula_filter !== active_formula_filter) {
318
+ formula_filter = ``
319
+ }
320
+ })
321
+
322
+ // Build table rows and a WeakMap from row→entry for the click handler
323
+ let { table_data, entry_by_row } = $derived.by(() => {
324
+ const map = new WeakMap<RowData, ConvexHullEntry>()
325
+ const rows = visible_entries.map((entry, idx) => {
326
+ const n_atoms = Object.values(entry.composition).reduce(
327
+ (sum, count) => sum + count,
328
+ 0,
329
+ )
330
+ const on_hull = is_on_hull(entry)
331
+ const formula_source = entry.reduced_formula ?? entry.name ??
332
+ get_alphabetical_formula(entry.composition, true, ``)
333
+ const normalized_formula = normalize_formula_markup(formula_source)
334
+ const formatted_formula = get_electro_neg_formula(normalized_formula)
335
+ const formula_html = formatted_formula || escape_html(normalized_formula)
336
+ // Match by entry_id or common data fields (mat_id, structure_id)
337
+ // since entry_id may be wrapped in HTML (e.g. <a> tags)
338
+ const entry_data = entry.data as Record<string, unknown> | undefined
339
+ const is_highlighted = !!(highlighted_entry_id && (
340
+ entry.entry_id === highlighted_entry_id ||
341
+ entry_data?.mat_id === highlighted_entry_id ||
342
+ entry_data?.structure_id === highlighted_entry_id
343
+ ))
344
+ const row: RowData = {
345
+ '#': sort_span(idx + 1, `${idx + 1}`),
346
+ Formula: on_hull ? `<strong>${formula_html}</strong>` : formula_html,
347
+ 'E<sub>hull</sub>': entry.e_above_hull ?? null,
348
+ 'E<sub>form</sub>': entry.e_form_per_atom ?? entry.energy_per_atom ?? null,
349
+ }
350
+ if (has_raw) row[`E<sub>raw</sub>`] = entry.energy_per_atom
351
+ if (has_ids) {
352
+ const safe_href = sanitize_href(entry_href?.(entry))
353
+ const safe_id = entry.entry_id ? escape_html(entry.entry_id) : undefined
354
+ row.ID = safe_href && safe_id
355
+ ? `<a href="${
356
+ escape_html(safe_href)
357
+ }" target="_blank" rel="noopener">${safe_id}</a>`
358
+ : safe_id
359
+ }
360
+ if (has_polymorphs) {
361
+ const comp_key = composition_key(entry.composition)
362
+ const poly_count = polymorph_counts.get(comp_key) ?? 1
363
+ row.Poly = poly_count
364
+ }
365
+ row[`N<sub>el</sub>`] = get_arity(entry)
366
+ row[`N<sub>at</sub>`] = n_atoms
367
+ // Highlight row for current material
368
+ if (is_highlighted) {
369
+ row.style =
370
+ `background: color-mix(in srgb, var(--hull-stable-color, #22c55e) 15%, transparent)`
371
+ }
372
+ map.set(row, entry)
373
+ return row
374
+ })
375
+ return { table_data: rows, entry_by_row: map }
376
+ })
377
+
378
+ function handle_row_click(_event: KeyboardEvent | MouseEvent, row: RowData): void {
379
+ const entry = entry_by_row.get(row)
380
+ if (entry) on_entry_click?.(entry)
381
+ }
382
+
383
+ let table_columns: Label[] = $derived(
384
+ [
385
+ { label: `#`, color_scale: null, description: `Row number` },
386
+ { label: `Formula`, color_scale: null },
387
+ {
388
+ label: `E<sub>hull</sub>`,
389
+ better: `lower`,
390
+ color_scale: `interpolateRdYlGn`,
391
+ format: `.4f`,
392
+ description: `Energy above convex hull (eV/atom)`,
393
+ },
394
+ {
395
+ label: `E<sub>form</sub>`,
396
+ better: `lower`,
397
+ color_scale: `interpolateBlues`,
398
+ format: `.4f`,
399
+ description: `Formation energy (eV/atom)`,
400
+ },
401
+ ...(has_raw
402
+ ? [{
403
+ label: `E<sub>raw</sub>`,
404
+ color_scale: `interpolateCool` as const,
405
+ format: `.4f`,
406
+ description: `Raw energy per atom (eV/atom)`,
407
+ }]
408
+ : []),
409
+ ...(has_ids
410
+ ? [{ label: `ID`, color_scale: null, description: `Entry identifier` }]
411
+ : []),
412
+ ...(has_polymorphs
413
+ ? [{
414
+ label: `Poly`,
415
+ color_scale: null,
416
+ description: `Number of polymorphs (same reduced formula)`,
417
+ }]
418
+ : []),
419
+ {
420
+ label: `N<sub>el</sub>`,
421
+ color_scale: null,
422
+ description: `Number of elements`,
423
+ },
424
+ {
425
+ label: `N<sub>at</sub>`,
426
+ color_scale: null,
427
+ format: `d`,
428
+ description: `Number of atoms in unit cell`,
429
+ },
430
+ ] satisfies Label[],
431
+ )
432
+
433
+ const html_to_text = (val: unknown): string => {
434
+ if (val == null) return ``
435
+ if (typeof val !== `string`) return String(val)
436
+ const temp_el = document.createElement(`div`)
437
+ temp_el.innerHTML = val
438
+ return temp_el.textContent?.trim() ?? ``
439
+ }
440
+ const csv_escape = (val: string): string =>
441
+ /[",\n]/.test(val) ? `"${val.replaceAll(`"`, `""`)}"` : val
442
+ const get_export_filename = (format: `csv` | `json`): string => {
443
+ const system = (phase_stats?.chemical_system ?? `convex-hull-stats`)
444
+ .toLowerCase()
445
+ .replaceAll(/\s+/g, `-`)
446
+ return `${system}.${format}`
447
+ }
448
+ const build_export_rows = () => {
449
+ const column_labels = table_columns.map((col) => col.label)
450
+ return table_data.map((row) =>
451
+ Object.fromEntries(
452
+ column_labels.map((label) => [html_to_text(label), html_to_text(row[label])]),
453
+ )
454
+ )
455
+ }
456
+ const download_file = (
457
+ content: string,
458
+ filename: string,
459
+ mime_type: string,
460
+ ): void => {
461
+ const blob = new Blob([content], { type: mime_type })
462
+ const object_url = URL.createObjectURL(blob)
463
+ const link_el = document.createElement(`a`)
464
+ link_el.href = object_url
465
+ link_el.download = filename
466
+ document.body.append(link_el)
467
+ link_el.click()
468
+ link_el.remove()
469
+ URL.revokeObjectURL(object_url)
470
+ }
471
+ function export_table(format: `csv` | `json`): void {
472
+ const rows = build_export_rows()
473
+ if (format === `json`) {
474
+ download_file(
475
+ JSON.stringify(rows, null, 2),
476
+ get_export_filename(`json`),
477
+ `application/json;charset=utf-8`,
478
+ )
479
+ return
480
+ }
481
+ const headers = rows.length > 0 ? Object.keys(rows[0]) : []
482
+ const csv_lines = [
483
+ headers.map(csv_escape).join(`,`),
484
+ ...rows.map((row) =>
485
+ headers.map((header) => csv_escape(row[header] ?? ``)).join(`,`)
486
+ ),
487
+ ]
488
+ download_file(
489
+ csv_lines.join(`\n`),
490
+ get_export_filename(`csv`),
491
+ `text/csv;charset=utf-8`,
492
+ )
493
+ }
494
+ </script>
495
+
496
+ {#snippet stats_panel()}
497
+ {#each pane_data as section, sec_idx (sec_idx)}
498
+ {#if sec_idx > 0}<hr />{/if}
499
+ <section>
500
+ {#if section.title}
501
+ <h5>{@html sanitize_html(section.title)}</h5>
502
+ {/if}
503
+ {#each section.items as item (item.key ?? item.label)}
504
+ {@const { key, label, value } = item}
505
+ <div
506
+ class="clickable stat-item"
507
+ data-testid={key ? `pd-${key}` : undefined}
508
+ title="Click to copy: {label}: {value}"
509
+ onclick={() => copy_to_clipboard(item.label, String(item.value), key ?? item.label)}
510
+ role="button"
511
+ tabindex="0"
512
+ onkeydown={(event) =>
513
+ handle_copy_keydown(
514
+ event,
515
+ item.label,
516
+ String(item.value),
517
+ key ?? item.label,
518
+ )}
519
+ >
520
+ <span>{@html sanitize_html(label)}:</span>
521
+ <span>{@html sanitize_html(value)}</span>
522
+ {#if key && copied_items.has(key)}
523
+ <Icon
524
+ icon="Check"
525
+ style="color: var(--success-color, #10b981); width: 12px; height: 12px"
526
+ class="copy-checkmark"
527
+ />
528
+ {/if}
529
+ </div>
530
+ {/each}
531
+
532
+ {#if sec_idx === 0 && subsystem_coverage}
533
+ <div
534
+ class="clickable stat-item subsystem-coverage-row"
535
+ data-testid="pd-binary-subsystem-coverage"
536
+ title="Click to copy: Binary subsystem coverage: {subsystem_coverage_summary ?? ``}"
537
+ onclick={() =>
538
+ copy_to_clipboard(
539
+ `Binary subsystem coverage`,
540
+ subsystem_coverage_summary ?? ``,
541
+ `binary-subsystem-coverage`,
542
+ )}
543
+ role="button"
544
+ tabindex="0"
545
+ onkeydown={(event) =>
546
+ handle_copy_keydown(
547
+ event,
548
+ `Binary subsystem coverage`,
549
+ subsystem_coverage_summary ?? ``,
550
+ `binary-subsystem-coverage`,
551
+ )}
552
+ >
553
+ <span class="subsystem-label"
554
+ >Binary subsystem coverage ({subsystem_coverage.length} pairs)</span>
555
+ <span class="subsystem-chips">
556
+ {#each subsystem_coverage as { pair, count } (pair)}
557
+ <span class="subsystem-chip" class:has-entries={count > 0}>
558
+ <span class="pair">{pair}</span>
559
+ <span class="count">{count}</span>
560
+ </span>
561
+ {/each}
562
+ </span>
563
+ {#if copied_items.has(`binary-subsystem-coverage`)}
564
+ <Icon
565
+ icon="Check"
566
+ style="color: var(--success-color, #10b981); width: 12px; height: 12px"
567
+ class="copy-checkmark"
568
+ />
569
+ {/if}
570
+ </div>
571
+ {/if}
572
+
573
+ {#if section.title === `E<sub>form</sub> distribution` &&
574
+ e_form_data[0].y.length > 0}
575
+ <Histogram
576
+ {...histogram_props}
577
+ series={e_form_data}
578
+ x_axis={{ label: ``, format: `.2f` }}
579
+ bar={{ color: `steelblue`, opacity: 0.7 }}
580
+ />
581
+ {/if}
582
+
583
+ {#if section.title === `E<sub>above hull</sub> distribution` &&
584
+ hull_distance_data[0].y.length > 0}
585
+ <Histogram
586
+ {...histogram_props}
587
+ series={hull_distance_data}
588
+ x_axis={{ label: ``, format: `.2f`, range: [0, null] }}
589
+ bar={{ color: `coral`, opacity: 0.7 }}
590
+ />
591
+ {/if}
592
+ </section>
593
+ {/each}
594
+ {/snippet}
595
+
596
+ {#snippet table_panel()}
597
+ <div class="table-filters">
598
+ {#if max_n_el > 2}
599
+ <label>
600
+ Min N<sub>el</sub>:
601
+ <select bind:value={min_n_elements}>
602
+ {#each Array.from({ length: max_n_el }, (_, idx) => idx + 1) as nel (nel)}
603
+ <option value={nel}>{nel}{nel === 1 ? ` (all)` : ``}</option>
604
+ {/each}
605
+ </select>
606
+ </label>
607
+ {/if}
608
+ {#if has_polymorphs}
609
+ <label>
610
+ Polymorphs:
611
+ <select bind:value={formula_filter}>
612
+ <option value="">all</option>
613
+ {#each poly_formulas as [formula, count] (formula)}
614
+ <option value={formula}>{formula} ({count})</option>
615
+ {/each}
616
+ </select>
617
+ </label>
618
+ {/if}
619
+ <span class="filter-count">{visible_entries.length} entries</span>
620
+ <span class="filter-spacer"></span>
621
+ <div class="export-actions">
622
+ <button
623
+ class="icon-btn"
624
+ class:active={show_export_dropdown}
625
+ title="Export"
626
+ onclick={() => show_export_dropdown = !show_export_dropdown}
627
+ >
628
+ <Icon icon="Export" style="width: 14px" />
629
+ </button>
630
+ {#if show_export_dropdown}
631
+ <div class="export-dropdown">
632
+ <button
633
+ class="dropdown-option"
634
+ onclick={() => {
635
+ export_table(`csv`)
636
+ show_export_dropdown = false
637
+ }}
638
+ >
639
+ <Icon icon="Download" style="width: 12px" /> CSV
640
+ </button>
641
+ <button
642
+ class="dropdown-option"
643
+ onclick={() => {
644
+ export_table(`json`)
645
+ show_export_dropdown = false
646
+ }}
647
+ >
648
+ <Icon icon="Download" style="width: 12px" /> JSON
649
+ </button>
650
+ </div>
651
+ {/if}
652
+ </div>
653
+ </div>
654
+ <HeatmapTable
655
+ data={table_data}
656
+ columns={table_columns}
657
+ initial_sort={{ column: `E<sub>hull</sub>`, direction: `asc` }}
658
+ scroll_style={table_scroll_style}
659
+ style="width: 100%"
660
+ root_style={table_root_style}
661
+ onrowclick={on_entry_click ? handle_row_click : undefined}
662
+ export_data={false}
663
+ />
664
+ {/snippet}
665
+
666
+ {#if layout === `side-by-side`}
667
+ <div {...rest} class="convex-hull-stats side-by-side {rest.class ?? ``}">
668
+ <div class="stats-pane">
669
+ {@render stats_panel()}
670
+ </div>
671
+ <div class="table-pane">
672
+ {@render table_panel()}
673
+ </div>
674
+ </div>
675
+ {:else}
676
+ <div {...rest} class="convex-hull-stats {rest.class ?? ``}">
677
+ <div class="view-toggle">
678
+ <button class:active={view_mode === `stats`} onclick={() => view_mode = `stats`}>
679
+ Stats
680
+ </button>
681
+ <button class:active={view_mode === `table`} onclick={() => view_mode = `table`}>
682
+ Table
683
+ </button>
684
+ </div>
685
+ {#if view_mode === `stats`}
686
+ {@render stats_panel()}
687
+ {:else}
688
+ {@render table_panel()}
689
+ {/if}
690
+ </div>
691
+ {/if}
692
+
693
+ <style>
694
+ .convex-hull-stats {
695
+ background: var(--hull-stats-bg, var(--hull-bg));
696
+ border-radius: var(--hull-border-radius, var(--border-radius, 3pt));
697
+ box-sizing: border-box;
698
+ max-width: 100%;
699
+ overflow: hidden;
700
+ padding: var(--hull-stats-padding, 1em);
701
+ }
702
+ .convex-hull-stats.side-by-side {
703
+ display: flex;
704
+ gap: var(--hull-stats-gap, 1.5em);
705
+ align-items: stretch;
706
+ width: fit-content;
707
+ max-width: 100%;
708
+ margin-inline: auto;
709
+ }
710
+ .stats-pane {
711
+ flex: 0 0 auto;
712
+ width: fit-content;
713
+ min-width: var(--hull-stats-pane-min-width, 200px);
714
+ max-width: var(--hull-stats-pane-max-width, 320px);
715
+ }
716
+ .table-pane {
717
+ flex: 1 1 0;
718
+ max-width: 100%;
719
+ min-height: var(--hull-stats-table-height, calc(var(--hull-stats-table-row-height, 2.35rem) * 10 + var(--hull-stats-table-header-height, 3.5rem)));
720
+ min-width: 0;
721
+ overflow: auto;
722
+ display: flex;
723
+ flex-direction: column;
724
+ }
725
+ .convex-hull-stats :global(tbody tr[onclick]) {
726
+ cursor: pointer;
727
+ }
728
+ section div {
729
+ display: flex;
730
+ justify-content: space-between;
731
+ gap: 6pt;
732
+ padding: 1pt;
733
+ line-height: 1.5;
734
+ }
735
+ section div.clickable {
736
+ cursor: pointer;
737
+ position: relative;
738
+ padding: 0 3pt;
739
+ }
740
+ section div:hover {
741
+ background: var(--pane-bg-hover);
742
+ border-radius: 3pt;
743
+ }
744
+ section :global(.copy-checkmark) {
745
+ position: absolute;
746
+ top: 50%;
747
+ right: 3pt;
748
+ transform: translateY(-50%);
749
+ background: var(--pane-bg);
750
+ border-radius: 50%;
751
+ animation: fade-in 0.1s ease-out;
752
+ }
753
+ @keyframes fade-in {
754
+ 0% {
755
+ opacity: 0;
756
+ }
757
+ }
758
+ .stat-item span:first-child {
759
+ color: var(--text-color-muted, light-dark(#666, #bbb));
760
+ }
761
+ section h5 {
762
+ margin: 0 0 6px 0;
763
+ }
764
+ .view-toggle {
765
+ display: flex;
766
+ margin-bottom: 8pt;
767
+ max-width: 100%;
768
+ min-width: 0;
769
+ }
770
+ .view-toggle button {
771
+ display: inline-flex;
772
+ align-items: center;
773
+ justify-content: center;
774
+ flex: 1;
775
+ min-width: 0;
776
+ padding: 2pt 8pt;
777
+ border: 1px solid
778
+ var(--hull-stats-border-color, color-mix(in srgb, currentColor 20%, transparent));
779
+ background: transparent;
780
+ color: inherit;
781
+ cursor: pointer;
782
+ font-size: 0.85em;
783
+ text-align: center;
784
+ }
785
+ .view-toggle button:first-child {
786
+ border-radius: 4pt 0 0 4pt;
787
+ }
788
+ .view-toggle button:last-child {
789
+ border-radius: 0 4pt 4pt 0;
790
+ border-left: none;
791
+ }
792
+ .view-toggle button.active {
793
+ background: var(
794
+ --hull-stats-toggle-active-bg,
795
+ light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.15))
796
+ );
797
+ font-weight: 500;
798
+ }
799
+ .table-filters {
800
+ display: flex;
801
+ align-items: center;
802
+ flex-wrap: wrap;
803
+ gap: 0.75em;
804
+ margin-bottom: 6pt;
805
+ font-size: 0.85em;
806
+ label {
807
+ display: flex;
808
+ align-items: center;
809
+ gap: 0.4em;
810
+ sub {
811
+ margin-left: -0.2em;
812
+ font-size: 0.72em;
813
+ line-height: 0;
814
+ vertical-align: baseline;
815
+ position: relative;
816
+ top: 0.33em;
817
+ }
818
+ }
819
+ select {
820
+ padding: 2pt 4pt;
821
+ border: 1px solid
822
+ var(--hull-stats-border-color, color-mix(in srgb, currentColor 20%, transparent));
823
+ border-radius: 3pt;
824
+ background: transparent;
825
+ color: inherit;
826
+ font-size: inherit;
827
+ }
828
+ }
829
+ .filter-spacer {
830
+ flex: 1 1 auto;
831
+ }
832
+ .export-actions {
833
+ position: relative;
834
+ .icon-btn {
835
+ padding: 2pt 6pt;
836
+ border: 1px solid
837
+ var(--hull-stats-border-color, color-mix(in srgb, currentColor 20%, transparent));
838
+ border-radius: 3pt;
839
+ background: transparent;
840
+ color: inherit;
841
+ cursor: pointer;
842
+ display: inline-flex;
843
+ align-items: center;
844
+ justify-content: center;
845
+ }
846
+ .icon-btn:hover {
847
+ background: color-mix(in srgb, currentColor 8%, transparent);
848
+ }
849
+ .icon-btn.active {
850
+ background: color-mix(in srgb, currentColor 12%, transparent);
851
+ }
852
+ }
853
+ .export-dropdown {
854
+ position: absolute;
855
+ right: 0;
856
+ top: calc(100% + 4px);
857
+ display: flex;
858
+ flex-direction: column;
859
+ min-width: 88px;
860
+ padding: 3pt;
861
+ border: 1px solid
862
+ var(--hull-stats-border-color, color-mix(in srgb, currentColor 20%, transparent));
863
+ border-radius: 4pt;
864
+ background: var(--page-bg, Canvas);
865
+ z-index: 4;
866
+ box-shadow: 0 2px 8px color-mix(in srgb, black 20%, transparent);
867
+ .dropdown-option {
868
+ display: inline-flex;
869
+ align-items: center;
870
+ gap: 5px;
871
+ border: none;
872
+ border-radius: 3pt;
873
+ background: transparent;
874
+ color: inherit;
875
+ cursor: pointer;
876
+ text-align: left;
877
+ padding: 3pt 6pt;
878
+ }
879
+ .dropdown-option:hover {
880
+ background: color-mix(in srgb, currentColor 8%, transparent);
881
+ }
882
+ }
883
+ .table-pane :global(.control-buttons) {
884
+ display: none;
885
+ margin: 0;
886
+ }
887
+ .filter-count {
888
+ color: var(--text-color-muted, light-dark(#666, #bbb));
889
+ font-size: 0.9em;
890
+ }
891
+ .subsystem-coverage-row {
892
+ flex-wrap: wrap;
893
+ gap: 4pt 1em;
894
+ justify-content: flex-start;
895
+ .subsystem-label {
896
+ color: var(--text-color-muted, light-dark(#666, #bbb));
897
+ font-size: 0.9em;
898
+ }
899
+ .subsystem-chips {
900
+ display: flex;
901
+ flex-wrap: wrap;
902
+ gap: 4pt;
903
+ }
904
+ }
905
+ .subsystem-chip {
906
+ display: inline-flex;
907
+ align-items: center;
908
+ gap: 0;
909
+ padding: 1pt 5pt;
910
+ border-radius: 3pt;
911
+ font-size: 0.78em;
912
+ line-height: 1.2;
913
+ background: color-mix(in srgb, currentColor 5%, transparent);
914
+ color: var(--text-color-muted, light-dark(#666, #bbb));
915
+ .pair {
916
+ font-weight: 500;
917
+ }
918
+ .count {
919
+ margin-left: 3pt;
920
+ font-size: 0.9em;
921
+ font-weight: 600;
922
+ color: color-mix(in srgb, currentColor 70%, transparent);
923
+ }
924
+ }
925
+ .subsystem-chip.has-entries {
926
+ background: color-mix(in srgb, var(--hull-stable-color, #22c55e) 15%, transparent);
927
+ color: inherit;
928
+ }
929
+ </style>