matterviz 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +48 -60
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/api/optimade.js +10 -7
  6. package/dist/app.css +68 -0
  7. package/dist/brillouin/BrillouinZone.svelte +90 -91
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  9. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  12. package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  14. package/dist/brillouin/compute.js +10 -16
  15. package/dist/brillouin/geometry.js +2 -2
  16. package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
  17. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
  20. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  21. package/dist/chempot-diagram/async-compute.svelte.js +13 -14
  22. package/dist/chempot-diagram/color.d.ts +21 -1
  23. package/dist/chempot-diagram/color.js +70 -1
  24. package/dist/chempot-diagram/compute.d.ts +7 -0
  25. package/dist/chempot-diagram/compute.js +85 -26
  26. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  27. package/dist/chempot-diagram/export.js +1 -6
  28. package/dist/chempot-diagram/temperature.js +9 -10
  29. package/dist/colors/index.d.ts +0 -4
  30. package/dist/colors/index.js +19 -20
  31. package/dist/composition/BarChart.svelte +30 -26
  32. package/dist/composition/BubbleChart.svelte +17 -17
  33. package/dist/composition/Composition.svelte +10 -19
  34. package/dist/composition/Formula.svelte +20 -27
  35. package/dist/composition/FormulaFilter.svelte +115 -184
  36. package/dist/composition/PieChart.svelte +55 -41
  37. package/dist/composition/format.js +7 -9
  38. package/dist/composition/index.d.ts +2 -0
  39. package/dist/composition/index.js +14 -0
  40. package/dist/composition/parse.d.ts +2 -2
  41. package/dist/composition/parse.js +61 -115
  42. package/dist/constants.d.ts +0 -1
  43. package/dist/constants.js +17 -26
  44. package/dist/convex-hull/ConvexHull.svelte +12 -15
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +93 -94
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +127 -186
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +131 -180
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  53. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  54. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  55. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  56. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  57. package/dist/convex-hull/StructurePopup.svelte +18 -22
  58. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  59. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  60. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  61. package/dist/convex-hull/gas-thermodynamics.js +21 -53
  62. package/dist/convex-hull/helpers.d.ts +8 -10
  63. package/dist/convex-hull/helpers.js +37 -43
  64. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  65. package/dist/convex-hull/thermodynamics.js +37 -44
  66. package/dist/coordination/CoordinationBarPlot.svelte +49 -53
  67. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  68. package/dist/coordination/calc-coordination.d.ts +1 -1
  69. package/dist/coordination/calc-coordination.js +28 -25
  70. package/dist/element/BohrAtom.svelte +5 -9
  71. package/dist/element/ElementHeading.svelte +4 -1
  72. package/dist/element/ElementPhoto.svelte +11 -9
  73. package/dist/element/ElementStats.svelte +12 -10
  74. package/dist/element/ElementTile.svelte +44 -67
  75. package/dist/element/Nucleus.svelte +4 -2
  76. package/dist/element/data.d.ts +3 -2
  77. package/dist/element/data.js +5 -1
  78. package/dist/element/helpers.d.ts +4 -0
  79. package/dist/element/helpers.js +18 -0
  80. package/dist/element/index.d.ts +2 -5
  81. package/dist/element/index.js +4 -19
  82. package/dist/feedback/DragOverlay.svelte +5 -5
  83. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  84. package/dist/feedback/StatusMessage.svelte +7 -4
  85. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  86. package/dist/fermi-surface/FermiSurface.svelte +35 -44
  87. package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
  88. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  89. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  90. package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
  91. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  92. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  93. package/dist/fermi-surface/compute.js +25 -58
  94. package/dist/fermi-surface/parse.js +54 -88
  95. package/dist/file-viewer/JsonBrowser.svelte +1043 -0
  96. package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
  97. package/dist/file-viewer/PlotPanel.svelte +350 -0
  98. package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
  99. package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
  100. package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
  101. package/dist/file-viewer/detect.d.ts +11 -0
  102. package/dist/file-viewer/detect.js +381 -0
  103. package/dist/file-viewer/eligibility.d.ts +4 -0
  104. package/dist/file-viewer/eligibility.js +53 -0
  105. package/dist/file-viewer/host-protocol.d.ts +50 -0
  106. package/dist/file-viewer/host-transfer.d.ts +25 -0
  107. package/dist/file-viewer/host-transfer.js +42 -0
  108. package/dist/file-viewer/index.d.ts +5 -0
  109. package/dist/file-viewer/index.js +5 -0
  110. package/dist/file-viewer/main.d.ts +44 -0
  111. package/dist/file-viewer/main.js +535 -0
  112. package/dist/file-viewer/parse.d.ts +9 -0
  113. package/dist/file-viewer/parse.js +170 -0
  114. package/dist/file-viewer/plot-utils.d.ts +24 -0
  115. package/dist/file-viewer/plot-utils.js +191 -0
  116. package/dist/file-viewer/types.d.ts +4 -0
  117. package/dist/file-viewer/types.js +5 -0
  118. package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
  119. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  120. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  121. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  122. package/dist/heatmap-matrix/index.d.ts +5 -0
  123. package/dist/icons.d.ts +4 -0
  124. package/dist/icons.js +4 -0
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +1 -1
  127. package/dist/io/ExportPane.svelte +11 -7
  128. package/dist/io/decompress.d.ts +4 -1
  129. package/dist/io/decompress.js +24 -36
  130. package/dist/io/export.d.ts +11 -4
  131. package/dist/io/export.js +75 -19
  132. package/dist/io/fetch.d.ts +0 -3
  133. package/dist/io/fetch.js +0 -11
  134. package/dist/io/file-drop.js +60 -35
  135. package/dist/io/index.d.ts +0 -1
  136. package/dist/io/index.js +2 -9
  137. package/dist/io/is-binary.d.ts +9 -0
  138. package/dist/io/is-binary.js +45 -1
  139. package/dist/io/url-drop.d.ts +2 -0
  140. package/dist/io/url-drop.js +40 -40
  141. package/dist/isosurface/Isosurface.svelte +700 -215
  142. package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
  143. package/dist/isosurface/IsosurfaceControls.svelte +590 -116
  144. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
  145. package/dist/isosurface/VolumeSlice.svelte +224 -0
  146. package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
  147. package/dist/isosurface/coloring.d.ts +20 -0
  148. package/dist/isosurface/coloring.js +118 -0
  149. package/dist/isosurface/geometry-worker-types.d.ts +38 -0
  150. package/dist/isosurface/geometry.worker.d.ts +1 -0
  151. package/dist/isosurface/geometry.worker.js +59 -0
  152. package/dist/isosurface/grid.d.ts +10 -0
  153. package/dist/isosurface/grid.js +31 -0
  154. package/dist/isosurface/index.d.ts +4 -0
  155. package/dist/isosurface/index.js +4 -0
  156. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  157. package/dist/isosurface/parse-vaspwave.js +138 -0
  158. package/dist/isosurface/parse.js +6 -6
  159. package/dist/isosurface/profile.d.ts +12 -0
  160. package/dist/isosurface/profile.js +19 -0
  161. package/dist/isosurface/sampling.d.ts +34 -0
  162. package/dist/isosurface/sampling.js +408 -0
  163. package/dist/isosurface/slice-rendering.d.ts +13 -0
  164. package/dist/isosurface/slice-rendering.js +79 -0
  165. package/dist/isosurface/slice.d.ts +22 -2
  166. package/dist/isosurface/slice.js +200 -116
  167. package/dist/isosurface/types.d.ts +24 -1
  168. package/dist/isosurface/types.js +120 -8
  169. package/dist/json-path.d.ts +4 -0
  170. package/dist/json-path.js +89 -0
  171. package/dist/labels.d.ts +6 -2
  172. package/dist/labels.js +44 -14
  173. package/dist/layout/FullscreenButton.svelte +2 -1
  174. package/dist/layout/FullscreenToggle.svelte +10 -4
  175. package/dist/layout/InfoCard.svelte +8 -21
  176. package/dist/layout/InfoTag.svelte +1 -3
  177. package/dist/layout/NumberRangeInput.svelte +46 -0
  178. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  179. package/dist/layout/PropertyFilter.svelte +2 -6
  180. package/dist/layout/SettingsSection.svelte +57 -62
  181. package/dist/layout/SettingsSection.svelte.d.ts +6 -7
  182. package/dist/layout/SubpageGrid.svelte +3 -1
  183. package/dist/layout/ViewerChrome.svelte +16 -11
  184. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  185. package/dist/layout/fullscreen.js +3 -5
  186. package/dist/layout/fullscreen.svelte.js +1 -2
  187. package/dist/layout/index.d.ts +1 -0
  188. package/dist/layout/index.js +1 -0
  189. package/dist/layout/json-tree/JsonNode.svelte +22 -59
  190. package/dist/layout/json-tree/JsonTree.svelte +101 -172
  191. package/dist/layout/json-tree/JsonValue.svelte +9 -32
  192. package/dist/layout/json-tree/utils.d.ts +0 -3
  193. package/dist/layout/json-tree/utils.js +50 -188
  194. package/dist/marching-cubes.d.ts +8 -1
  195. package/dist/marching-cubes.js +115 -48
  196. package/dist/math.d.ts +5 -2
  197. package/dist/math.js +48 -38
  198. package/dist/overlays/ContextMenu.svelte +19 -34
  199. package/dist/overlays/CopyButton.svelte +11 -5
  200. package/dist/overlays/DragControlTab.svelte +6 -1
  201. package/dist/overlays/DraggablePane.svelte +110 -74
  202. package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
  203. package/dist/overlays/GlassChip.svelte +32 -0
  204. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  205. package/dist/overlays/InfoPaneCards.svelte +11 -23
  206. package/dist/overlays/index.d.ts +7 -0
  207. package/dist/overlays/index.js +26 -0
  208. package/dist/overlays/portal.d.ts +2 -0
  209. package/dist/overlays/portal.js +14 -0
  210. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  211. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  212. package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
  213. package/dist/periodic-table/TableInset.svelte +9 -4
  214. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
  215. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  216. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  217. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  218. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  219. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  220. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  221. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  222. package/dist/phase-diagram/build-diagram.js +4 -9
  223. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  224. package/dist/phase-diagram/parse.js +15 -15
  225. package/dist/phase-diagram/svg-to-diagram.js +28 -27
  226. package/dist/phase-diagram/utils.js +2 -3
  227. package/dist/plot/bar/BarPlot.svelte +461 -426
  228. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  229. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  230. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  231. package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
  232. package/dist/plot/bar/data.d.ts +5 -4
  233. package/dist/plot/bar/data.js +2 -1
  234. package/dist/plot/box/BoxPlot.svelte +322 -226
  235. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  236. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  237. package/dist/plot/box/box-plot.js +1 -1
  238. package/dist/plot/core/auto-place.d.ts +1 -1
  239. package/dist/plot/core/auto-place.js +2 -2
  240. package/dist/plot/core/axis-utils.d.ts +12 -7
  241. package/dist/plot/core/axis-utils.js +48 -48
  242. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  243. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  244. package/dist/plot/core/components/ColorBar.svelte +101 -106
  245. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  246. package/dist/plot/core/components/FillArea.svelte +10 -17
  247. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  248. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  249. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  250. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  251. package/dist/plot/core/components/Line.svelte +18 -9
  252. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  253. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  254. package/dist/plot/core/components/PlotControls.svelte +65 -41
  255. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  256. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  257. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  258. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  259. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  260. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  261. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  262. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  263. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  264. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  265. package/dist/plot/core/components/index.d.ts +1 -0
  266. package/dist/plot/core/components/index.js +1 -0
  267. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  268. package/dist/plot/core/data-cleaning-signal.js +467 -0
  269. package/dist/plot/core/data-cleaning.d.ts +2 -42
  270. package/dist/plot/core/data-cleaning.js +27 -474
  271. package/dist/plot/core/data-transform.d.ts +1 -2
  272. package/dist/plot/core/data-transform.js +9 -15
  273. package/dist/plot/core/fill-utils.d.ts +3 -1
  274. package/dist/plot/core/fill-utils.js +28 -6
  275. package/dist/plot/core/index.d.ts +1 -0
  276. package/dist/plot/core/index.js +1 -0
  277. package/dist/plot/core/interactions.js +0 -2
  278. package/dist/plot/core/layout.d.ts +15 -6
  279. package/dist/plot/core/layout.js +57 -38
  280. package/dist/plot/core/marginals.d.ts +170 -0
  281. package/dist/plot/core/marginals.js +436 -0
  282. package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
  283. package/dist/plot/core/pan-zoom.svelte.js +34 -17
  284. package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -21
  286. package/dist/plot/core/reference-line.js +1 -1
  287. package/dist/plot/core/scales.d.ts +23 -0
  288. package/dist/plot/core/scales.js +39 -13
  289. package/dist/plot/core/svg.js +0 -1
  290. package/dist/plot/core/types/fills.d.ts +101 -0
  291. package/dist/plot/core/types/fills.js +15 -0
  292. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  293. package/dist/plot/core/types/plot-3d.js +4 -0
  294. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  295. package/dist/plot/core/types/reference-lines.js +9 -0
  296. package/dist/plot/core/types.d.ts +29 -324
  297. package/dist/plot/core/types.js +23 -20
  298. package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
  299. package/dist/plot/core/utils/hierarchy-chart.js +191 -0
  300. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  301. package/dist/plot/core/utils/hierarchy-labels.js +100 -0
  302. package/dist/plot/core/utils/label-placement.js +2 -2
  303. package/dist/plot/histogram/Histogram.svelte +314 -340
  304. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  305. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  306. package/dist/plot/histogram/histogram.d.ts +31 -0
  307. package/dist/plot/histogram/histogram.js +70 -0
  308. package/dist/plot/histogram/index.d.ts +1 -0
  309. package/dist/plot/histogram/index.js +1 -0
  310. package/dist/plot/index.d.ts +1 -0
  311. package/dist/plot/index.js +1 -0
  312. package/dist/plot/sankey/Sankey.svelte +78 -69
  313. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  314. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  315. package/dist/plot/sankey/sankey.js +13 -9
  316. package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
  317. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  318. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  319. package/dist/plot/scatter/ScatterPlot.svelte +517 -410
  320. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  321. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  322. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  323. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  324. package/dist/plot/scatter/adaptive-density.d.ts +1 -1
  325. package/dist/plot/scatter/adaptive-density.js +36 -20
  326. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  327. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  328. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  329. package/dist/plot/scatter/scatter-data.js +8 -7
  330. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  331. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  332. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  333. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  334. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  335. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  336. package/dist/plot/sunburst/Sunburst.svelte +269 -347
  337. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  338. package/dist/plot/sunburst/index.d.ts +1 -1
  339. package/dist/plot/sunburst/index.js +2 -1
  340. package/dist/plot/sunburst/render.d.ts +2 -2
  341. package/dist/plot/sunburst/render.js +47 -22
  342. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  343. package/dist/plot/sunburst/sunburst.js +10 -3
  344. package/dist/plot/treemap/Treemap.svelte +1022 -0
  345. package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
  346. package/dist/plot/treemap/index.d.ts +4 -0
  347. package/dist/plot/treemap/index.js +4 -0
  348. package/dist/plot/treemap/labels.d.ts +38 -0
  349. package/dist/plot/treemap/labels.js +80 -0
  350. package/dist/plot/treemap/treemap.d.ts +28 -0
  351. package/dist/plot/treemap/treemap.js +102 -0
  352. package/dist/rdf/RdfPlot.svelte +37 -59
  353. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  354. package/dist/rdf/calc-rdf.js +63 -52
  355. package/dist/rdf/index.d.ts +0 -1
  356. package/dist/sanitize.js +85 -27
  357. package/dist/scene/SceneCamera.svelte +1 -1
  358. package/dist/scene/SceneCamera.svelte.d.ts +1 -1
  359. package/dist/scene/bind-renderer.svelte.js +14 -6
  360. package/dist/scene/index.d.ts +1 -2
  361. package/dist/scene/index.js +1 -1
  362. package/dist/scene/{props.js → props.svelte.js} +15 -1
  363. package/dist/settings.d.ts +19 -9
  364. package/dist/settings.js +229 -525
  365. package/dist/spectral/Bands.svelte +207 -221
  366. package/dist/spectral/BandsAndDos.svelte +11 -9
  367. package/dist/spectral/BrillouinBandsDos.svelte +19 -42
  368. package/dist/spectral/Dos.svelte +92 -93
  369. package/dist/spectral/helpers.d.ts +3 -3
  370. package/dist/spectral/helpers.js +65 -140
  371. package/dist/state.svelte.js +5 -18
  372. package/dist/structure/Arrow.svelte +5 -18
  373. package/dist/structure/ArrowInstances.svelte +160 -0
  374. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  375. package/dist/structure/AtomLegend.svelte +120 -85
  376. package/dist/structure/AtomLegend.svelte.d.ts +2 -3
  377. package/dist/structure/Bond.svelte +31 -23
  378. package/dist/structure/CanvasTooltip.svelte +15 -3
  379. package/dist/structure/CellSelect.svelte +45 -35
  380. package/dist/structure/Cylinder.svelte +24 -40
  381. package/dist/structure/InstancedAtoms.svelte +114 -0
  382. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  383. package/dist/structure/Lattice.svelte +85 -149
  384. package/dist/structure/SiteLabels.svelte +122 -0
  385. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  386. package/dist/structure/Structure.svelte +636 -504
  387. package/dist/structure/Structure.svelte.d.ts +4 -2
  388. package/dist/structure/StructureCarousel.svelte +637 -0
  389. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  390. package/dist/structure/StructureControls.svelte +165 -425
  391. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  392. package/dist/structure/StructureExportPane.svelte +17 -21
  393. package/dist/structure/StructureInfoPane.svelte +128 -133
  394. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  395. package/dist/structure/StructureScene.svelte +535 -578
  396. package/dist/structure/StructureScene.svelte.d.ts +6 -2
  397. package/dist/structure/StructureViewport.svelte +451 -0
  398. package/dist/structure/StructureViewport.svelte.d.ts +65 -0
  399. package/dist/structure/atom-label-placement.d.ts +16 -12
  400. package/dist/structure/atom-label-placement.js +70 -37
  401. package/dist/structure/atom-properties.d.ts +2 -0
  402. package/dist/structure/atom-properties.js +105 -38
  403. package/dist/structure/bond-order-perception.js +3 -8
  404. package/dist/structure/bonding.d.ts +9 -3
  405. package/dist/structure/bonding.js +95 -46
  406. package/dist/structure/edit-history.d.ts +6 -0
  407. package/dist/structure/edit-history.js +27 -0
  408. package/dist/structure/export.d.ts +1 -0
  409. package/dist/structure/export.js +89 -105
  410. package/dist/structure/format-detect.d.ts +1 -0
  411. package/dist/structure/format-detect.js +20 -0
  412. package/dist/structure/geometry.d.ts +9 -0
  413. package/dist/structure/geometry.js +27 -0
  414. package/dist/structure/index.d.ts +16 -1
  415. package/dist/structure/index.js +15 -10
  416. package/dist/structure/measure.d.ts +1 -1
  417. package/dist/structure/measure.js +6 -12
  418. package/dist/structure/parse.d.ts +2 -1
  419. package/dist/structure/parse.js +272 -313
  420. package/dist/structure/partial-occupancy.js +10 -5
  421. package/dist/structure/pbc.js +85 -107
  422. package/dist/structure/polyhedra.d.ts +0 -1
  423. package/dist/structure/polyhedra.js +7 -21
  424. package/dist/structure/prop-groups.d.ts +85 -0
  425. package/dist/structure/prop-groups.js +18 -0
  426. package/dist/structure/supercell.d.ts +1 -2
  427. package/dist/structure/supercell.js +7 -13
  428. package/dist/symmetry/SymmetryElements.svelte +11 -15
  429. package/dist/symmetry/SymmetryStats.svelte +55 -71
  430. package/dist/symmetry/WyckoffTable.svelte +10 -28
  431. package/dist/symmetry/cell-transform.js +6 -14
  432. package/dist/symmetry/index.d.ts +1 -0
  433. package/dist/symmetry/index.js +13 -10
  434. package/dist/symmetry/spacegroups.js +3 -2
  435. package/dist/table/HeatmapTable.svelte +1142 -447
  436. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  437. package/dist/table/ToggleMenu.svelte +168 -53
  438. package/dist/table/ToggleMenu.svelte.d.ts +1 -1
  439. package/dist/table/index.d.ts +21 -6
  440. package/dist/table/index.js +34 -21
  441. package/dist/theme/ThemeControl.svelte +16 -8
  442. package/dist/theme/embedded.d.ts +18 -0
  443. package/dist/theme/embedded.js +206 -0
  444. package/dist/theme/index.d.ts +5 -5
  445. package/dist/theme/index.js +5 -12
  446. package/dist/theme/themes.mjs +44 -66
  447. package/dist/tooltip/KCoords.svelte +4 -1
  448. package/dist/tooltip/TooltipContent.svelte +3 -6
  449. package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
  450. package/dist/tooltip/index.d.ts +8 -1
  451. package/dist/trajectory/Trajectory.svelte +613 -386
  452. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  453. package/dist/trajectory/TrajectoryError.svelte +12 -74
  454. package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
  455. package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
  456. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
  457. package/dist/trajectory/extract.js +61 -49
  458. package/dist/trajectory/format-detect.d.ts +2 -0
  459. package/dist/trajectory/format-detect.js +17 -13
  460. package/dist/trajectory/frame-reader.d.ts +2 -0
  461. package/dist/trajectory/frame-reader.js +35 -32
  462. package/dist/trajectory/helpers.d.ts +2 -0
  463. package/dist/trajectory/helpers.js +34 -56
  464. package/dist/trajectory/index.d.ts +1 -0
  465. package/dist/trajectory/index.js +5 -8
  466. package/dist/trajectory/parse/ase.js +1 -1
  467. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  468. package/dist/trajectory/parse/h5-utils.js +109 -0
  469. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  470. package/dist/trajectory/parse/hdf5.js +116 -106
  471. package/dist/trajectory/parse/index.d.ts +6 -6
  472. package/dist/trajectory/parse/index.js +25 -33
  473. package/dist/trajectory/parse/lammps.js +8 -12
  474. package/dist/trajectory/parse/vasp.js +10 -7
  475. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  476. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  477. package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
  478. package/dist/trajectory/parse/vaspout-h5.js +281 -0
  479. package/dist/trajectory/parse/xyz.js +59 -9
  480. package/dist/trajectory/plotting.d.ts +8 -9
  481. package/dist/trajectory/plotting.js +113 -64
  482. package/dist/utils.d.ts +3 -0
  483. package/dist/utils.js +7 -0
  484. package/dist/xrd/XrdPlot.svelte +79 -118
  485. package/dist/xrd/broadening.js +2 -1
  486. package/dist/xrd/calc-xrd.js +24 -62
  487. package/dist/xrd/parse.d.ts +0 -1
  488. package/dist/xrd/parse.js +69 -95
  489. package/package.json +94 -34
  490. package/readme.md +6 -5
  491. package/dist/api/mp.d.ts +0 -6
  492. package/dist/api/mp.js +0 -22
  493. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  494. package/dist/scene/types.d.ts +0 -26
  495. package/dist/tooltip/types.d.ts +0 -8
  496. package/dist/trajectory/constants.d.ts +0 -6
  497. package/dist/trajectory/constants.js +0 -11
  498. /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
  499. /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
@@ -3,17 +3,15 @@ import { is_elem_symbol } from '../element';
3
3
  import { ELEMENT_ELECTRONEGATIVITY_MAP, parse_composition } from './parse';
4
4
  // Extract composition from structure object
5
5
  const structure_to_composition = (structure) => {
6
- if (!structure.sites || !Array.isArray(structure.sites)) {
7
- throw new Error(`Invalid structure object`);
6
+ if (!Array.isArray(structure.sites)) {
7
+ throw new TypeError(`Invalid structure object`);
8
8
  }
9
9
  const composition = {};
10
10
  for (const site of structure.sites) {
11
- if (site.species && Array.isArray(site.species)) {
12
- for (const species of site.species) {
13
- const element = species.element;
14
- const occu = species.occu ?? 1;
15
- composition[element] = (composition[element] ?? 0) + occu;
16
- }
11
+ if (!Array.isArray(site.species))
12
+ continue;
13
+ for (const species of site.species) {
14
+ composition[species.element] = (composition[species.element] ?? 0) + (species.occu ?? 1);
17
15
  }
18
16
  }
19
17
  return composition;
@@ -86,7 +84,7 @@ export const get_electro_neg_formula = (input, plain_text = false, delim = ` `,
86
84
  export function get_formula_label_segments(formula) {
87
85
  const segments = [];
88
86
  let cursor = 0;
89
- for (const match of formula.matchAll(/([A-Za-z])(\d+(?:\.\d+)?)/g)) {
87
+ for (const match of formula.matchAll(/(?<letter>[A-Za-z])(?<amount>\d+(?:\.\d+)?)/g)) {
90
88
  const match_idx = match.index ?? 0;
91
89
  const prefix = match[1];
92
90
  const amount = match[2];
@@ -18,4 +18,6 @@ export type ChartSegmentData = {
18
18
  font_scale: number;
19
19
  text_color: string;
20
20
  };
21
+ export declare const chart_segment_suffix: (amount: number | undefined, fraction: number, show_amounts: boolean, show_percentages: boolean) => string;
22
+ export declare const chart_segment_label: (element: string, amount: number | undefined, fraction: number, show_amounts: boolean, show_percentages: boolean) => string;
21
23
  export declare function get_chart_font_scale(base_scale: number, label_text: string, available_space: number, min_scale_factor?: number, base_font_size?: number): number;
@@ -1,3 +1,4 @@
1
+ import { format_num } from '../labels';
1
2
  export { default as BarChart } from './BarChart.svelte';
2
3
  export { default as BubbleChart } from './BubbleChart.svelte';
3
4
  export * from './chem-sys';
@@ -7,6 +8,19 @@ export { default as Formula } from './Formula.svelte';
7
8
  export { default as FormulaFilter } from './FormulaFilter.svelte';
8
9
  export * from './parse';
9
10
  export { default as PieChart } from './PieChart.svelte';
11
+ // Amount/percentage suffix rendered after the element symbol in bar/pie chart
12
+ // segments; `=` separates amount from percentage when both are shown (Fe2=20%).
13
+ // format_num (not toString) so float noise like 0.30000000000000004 can't leak
14
+ // into labels; same format convention as format_composition_formula subscripts
15
+ // (`.3~s`, avoiding SI prefixes for sub-1 amounts where `s` renders 0.5 as 500m)
16
+ export const chart_segment_suffix = (amount, fraction, show_amounts, show_percentages) => (show_amounts && amount !== undefined
17
+ ? format_num(amount, Math.abs(amount) < 1 ? `.3~g` : `.3~s`)
18
+ : ``) +
19
+ (show_amounts && show_percentages ? `=` : ``) +
20
+ (show_percentages ? format_num(fraction, `.1~%`) : ``);
21
+ // Full segment label used to estimate label width for font scaling; must match
22
+ // the text the charts actually render (element symbol + chart_segment_suffix)
23
+ export const chart_segment_label = (element, amount, fraction, show_amounts, show_percentages) => element + chart_segment_suffix(amount, fraction, show_amounts, show_percentages);
10
24
  export function get_chart_font_scale(base_scale, label_text, available_space, min_scale_factor = 0.7, base_font_size = 16) {
11
25
  const text_width = label_text.length * 0.6 * base_font_size * base_scale;
12
26
  return available_space > 0 && text_width > available_space
@@ -2,8 +2,8 @@ import type { ElementSymbol } from '../element';
2
2
  import type { CompositionType } from './';
3
3
  export declare const ATOMIC_NUMBER_TO_SYMBOL: Record<number, ElementSymbol>;
4
4
  export declare const SYMBOL_TO_ATOMIC_NUMBER: Partial<CompositionType>;
5
- export declare const ATOMIC_WEIGHTS: Map<"S" | "K" | "B" | "H" | "He" | "Li" | "Be" | "C" | "N" | "O" | "F" | "Ne" | "Na" | "Mg" | "Al" | "Si" | "P" | "Cl" | "Ar" | "Ca" | "Sc" | "Ti" | "V" | "Cr" | "Mn" | "Fe" | "Co" | "Ni" | "Cu" | "Zn" | "Ga" | "Ge" | "As" | "Se" | "Br" | "Kr" | "Rb" | "Sr" | "Y" | "Zr" | "Nb" | "Mo" | "Tc" | "Ru" | "Rh" | "Pd" | "Ag" | "Cd" | "In" | "Sn" | "Sb" | "Te" | "I" | "Xe" | "Cs" | "Ba" | "La" | "Ce" | "Pr" | "Nd" | "Pm" | "Sm" | "Eu" | "Gd" | "Tb" | "Dy" | "Ho" | "Er" | "Tm" | "Yb" | "Lu" | "Hf" | "Ta" | "W" | "Re" | "Os" | "Ir" | "Pt" | "Au" | "Hg" | "Tl" | "Pb" | "Bi" | "Po" | "At" | "Rn" | "Fr" | "Ra" | "Ac" | "Th" | "Pa" | "U" | "Np" | "Pu" | "Am" | "Cm" | "Bk" | "Cf" | "Es" | "Fm" | "Md" | "No" | "Lr" | "Rf" | "Db" | "Sg" | "Bh" | "Hs" | "Mt" | "Ds" | "Rg" | "Cn" | "Nh" | "Fl" | "Mc" | "Lv" | "Ts" | "Og", number>;
6
- export declare const ELEMENT_ELECTRONEGATIVITY_MAP: Map<"S" | "K" | "B" | "H" | "He" | "Li" | "Be" | "C" | "N" | "O" | "F" | "Ne" | "Na" | "Mg" | "Al" | "Si" | "P" | "Cl" | "Ar" | "Ca" | "Sc" | "Ti" | "V" | "Cr" | "Mn" | "Fe" | "Co" | "Ni" | "Cu" | "Zn" | "Ga" | "Ge" | "As" | "Se" | "Br" | "Kr" | "Rb" | "Sr" | "Y" | "Zr" | "Nb" | "Mo" | "Tc" | "Ru" | "Rh" | "Pd" | "Ag" | "Cd" | "In" | "Sn" | "Sb" | "Te" | "I" | "Xe" | "Cs" | "Ba" | "La" | "Ce" | "Pr" | "Nd" | "Pm" | "Sm" | "Eu" | "Gd" | "Tb" | "Dy" | "Ho" | "Er" | "Tm" | "Yb" | "Lu" | "Hf" | "Ta" | "W" | "Re" | "Os" | "Ir" | "Pt" | "Au" | "Hg" | "Tl" | "Pb" | "Bi" | "Po" | "At" | "Rn" | "Fr" | "Ra" | "Ac" | "Th" | "Pa" | "U" | "Np" | "Pu" | "Am" | "Cm" | "Bk" | "Cf" | "Es" | "Fm" | "Md" | "No" | "Lr" | "Rf" | "Db" | "Sg" | "Bh" | "Hs" | "Mt" | "Ds" | "Rg" | "Cn" | "Nh" | "Fl" | "Mc" | "Lv" | "Ts" | "Og", number>;
5
+ export declare const ATOMIC_WEIGHTS: Map<"Ac" | "Ag" | "Al" | "Am" | "Ar" | "As" | "At" | "Au" | "B" | "Ba" | "Be" | "Bh" | "Bi" | "Bk" | "Br" | "C" | "Ca" | "Cd" | "Ce" | "Cf" | "Cl" | "Cm" | "Co" | "Cr" | "Cs" | "Cu" | "Db" | "Dy" | "Er" | "Es" | "Eu" | "F" | "Fe" | "Fm" | "Fr" | "Ga" | "Gd" | "Ge" | "H" | "He" | "Hf" | "Hg" | "Ho" | "Hs" | "I" | "In" | "Ir" | "K" | "Kr" | "La" | "Li" | "Lr" | "Lu" | "Md" | "Mg" | "Mn" | "Mo" | "Mt" | "N" | "Na" | "Nb" | "Nd" | "Ne" | "Ni" | "No" | "Np" | "O" | "Os" | "P" | "Pa" | "Pb" | "Pd" | "Pm" | "Po" | "Pr" | "Pt" | "Pu" | "Ra" | "Rb" | "Re" | "Rf" | "Rh" | "Rn" | "Ru" | "S" | "Sb" | "Sc" | "Se" | "Sg" | "Si" | "Sm" | "Sn" | "Sr" | "Ta" | "Tb" | "Tc" | "Te" | "Th" | "Ti" | "Tl" | "Tm" | "U" | "V" | "W" | "Xe" | "Y" | "Yb" | "Zn" | "Zr" | "Ds" | "Rg" | "Cn" | "Nh" | "Fl" | "Mc" | "Lv" | "Ts" | "Og", number>;
6
+ export declare const ELEMENT_ELECTRONEGATIVITY_MAP: Map<"Ac" | "Ag" | "Al" | "Am" | "Ar" | "As" | "At" | "Au" | "B" | "Ba" | "Be" | "Bh" | "Bi" | "Bk" | "Br" | "C" | "Ca" | "Cd" | "Ce" | "Cf" | "Cl" | "Cm" | "Co" | "Cr" | "Cs" | "Cu" | "Db" | "Dy" | "Er" | "Es" | "Eu" | "F" | "Fe" | "Fm" | "Fr" | "Ga" | "Gd" | "Ge" | "H" | "He" | "Hf" | "Hg" | "Ho" | "Hs" | "I" | "In" | "Ir" | "K" | "Kr" | "La" | "Li" | "Lr" | "Lu" | "Md" | "Mg" | "Mn" | "Mo" | "Mt" | "N" | "Na" | "Nb" | "Nd" | "Ne" | "Ni" | "No" | "Np" | "O" | "Os" | "P" | "Pa" | "Pb" | "Pd" | "Pm" | "Po" | "Pr" | "Pt" | "Pu" | "Ra" | "Rb" | "Re" | "Rf" | "Rh" | "Rn" | "Ru" | "S" | "Sb" | "Sc" | "Se" | "Sg" | "Si" | "Sm" | "Sn" | "Sr" | "Ta" | "Tb" | "Tc" | "Te" | "Th" | "Ti" | "Tl" | "Tm" | "U" | "V" | "W" | "Xe" | "Y" | "Yb" | "Zn" | "Zr" | "Ds" | "Rg" | "Cn" | "Nh" | "Fl" | "Mc" | "Lv" | "Ts" | "Og", number>;
7
7
  export declare const ELEM_NAME_TO_SYMBOL: Record<string, ElementSymbol>;
8
8
  export declare const ELEM_SYMBOL_TO_NAME: Partial<Record<ElementSymbol, string>>;
9
9
  export declare const atomic_num_to_symbols: (atomic_composition: Record<number, number>) => CompositionType;
@@ -1,4 +1,5 @@
1
- import { element_data, is_elem_symbol } from '../element';
1
+ import { default as element_data } from '../element/data';
2
+ import { is_elem_symbol } from '../element/helpers';
2
3
  import { ELEM_SYMBOLS } from '../labels';
3
4
  // Create symbol/number/mass/electronegativity lookup maps for O(1) access
4
5
  export const ATOMIC_NUMBER_TO_SYMBOL = {};
@@ -24,7 +25,7 @@ const is_atomic_number_composition = (obj) => {
24
25
  atomic_nums.every((atomic_num) => Number.isInteger(atomic_num) && Object.hasOwn(ATOMIC_NUMBER_TO_SYMBOL, atomic_num)));
25
26
  };
26
27
  const format_state = (state) => (state > 0 ? `+` : ``) + state;
27
- const parse_count = (count) => (count ? parseFloat(count) : 1);
28
+ const parse_count = (count) => (count ? Number(count) : 1);
28
29
  const format_count = (count) => {
29
30
  if (!Number.isFinite(count))
30
31
  return `${count}`;
@@ -49,9 +50,7 @@ export const atomic_num_to_symbols = (atomic_composition) => {
49
50
  export const atomic_symbol_to_num = (symbol_composition) => {
50
51
  const atomic_composition = {};
51
52
  for (const [symbol, amount] of Object.entries(symbol_composition)) {
52
- if (!is_elem_symbol(symbol))
53
- throw new Error(`Invalid element symbol: ${symbol}`);
54
- const atomic_num = SYMBOL_TO_ATOMIC_NUMBER[symbol];
53
+ const atomic_num = is_elem_symbol(symbol) ? SYMBOL_TO_ATOMIC_NUMBER[symbol] : undefined;
55
54
  if (!atomic_num)
56
55
  throw new Error(`Invalid element symbol: ${symbol}`);
57
56
  if (amount > 0) {
@@ -63,9 +62,9 @@ export const atomic_symbol_to_num = (symbol_composition) => {
63
62
  // Expand parentheses in chemical formulas
64
63
  const expand_parentheses = (formula) => {
65
64
  while (formula.includes(`(`)) {
66
- const expanded = formula.replaceAll(/\(([^()]+)\)(\d+(?:\.\d+)?|\.\d+)?/g, (_match, group, multiplier) => {
65
+ const expanded = formula.replaceAll(/\((?<group>[^()]+)\)(?<multiplier>\d+(?:\.\d+)?|\.\d+)?/g, (_match, group, multiplier) => {
67
66
  const mult = parse_count(multiplier);
68
- return group.replaceAll(/([A-Z][a-z]?)(\d+(?:\.\d+)?|\.\d+)?/g, (_m, element, count) => {
67
+ return group.replaceAll(/(?<element>[A-Z][a-z]?)(?<count>\d+(?:\.\d+)?|\.\d+)?/g, (_m, element, count) => {
69
68
  const count_str = format_count(parse_count(count) * mult);
70
69
  return element + (count_str === `1` ? `` : count_str);
71
70
  });
@@ -87,9 +86,9 @@ export const parse_formula = (formula) => {
87
86
  for (const [seg_idx, segment] of segments.entries()) {
88
87
  // only hydrate segments (after a separator) carry a leading multiplier
89
88
  const coeff = seg_idx > 0 ? /^(?:\d+(?:\.\d+)?|\.\d+)/.exec(segment)?.[0] : undefined;
90
- const multiplier = coeff ? parseFloat(coeff) : 1;
89
+ const multiplier = coeff ? Number(coeff) : 1;
91
90
  const expanded = expand_parentheses(segment.slice(coeff?.length ?? 0));
92
- for (const match of expanded.matchAll(/([A-Z][a-z]?)(\d+(?:\.\d+)?|\.\d+)?/g)) {
91
+ for (const match of expanded.matchAll(/(?<element>[A-Z][a-z]?)(?<count>\d+(?:\.\d+)?|\.\d+)?/g)) {
93
92
  const [, element, count] = match;
94
93
  if (!is_elem_symbol(element))
95
94
  throw new Error(`Invalid element symbol: ${element}`);
@@ -137,9 +136,7 @@ export const fractional_composition = (composition, by_weight = false) => {
137
136
  const filtered = Object.fromEntries(Object.entries(composition).filter(([, amount]) => amount > 0));
138
137
  if (by_weight) {
139
138
  const element_weights = Object.fromEntries(Object.entries(filtered).map(([element, amount]) => {
140
- if (!is_elem_symbol(element))
141
- throw new Error(`Unknown element: ${element}`);
142
- const atomic_mass = ATOMIC_WEIGHTS.get(element);
139
+ const atomic_mass = is_elem_symbol(element) ? ATOMIC_WEIGHTS.get(element) : undefined;
143
140
  if (!atomic_mass)
144
141
  throw new Error(`Unknown element: ${element}`);
145
142
  return [element, amount * atomic_mass];
@@ -206,12 +203,12 @@ const parse_oxidation_state = (oxidation_str) => {
206
203
  return oxidation_str === `+` ? 1 : -1;
207
204
  }
208
205
  // Handle formats like "2+", "+2", "2-", "-2"
209
- const ox_match = /([+-]?)(\d+)([+-]?)/.exec(oxidation_str);
206
+ const ox_match = /(?<sign_before>[+-]?)(?<number>\d+)(?<sign_after>[+-]?)/.exec(oxidation_str);
210
207
  if (!ox_match)
211
208
  return 0;
212
209
  const [, sign_before, number, sign_after] = ox_match;
213
210
  const sign = sign_before || sign_after || `+`;
214
- return sign === `-` ? -parseInt(number, 10) : parseInt(number, 10);
211
+ return sign === `-` ? -Number(number) : Number(number);
215
212
  };
216
213
  // Parse chemical formula string with oxidation states into structured data.
217
214
  // Supports both ^2+ and [2+] syntax for oxidation states.
@@ -221,46 +218,30 @@ const parse_oxidation_state = (oxidation_str) => {
221
218
  export const parse_formula_with_oxidation = (formula, strict = false) => {
222
219
  const elements = [];
223
220
  const cleaned_formula = expand_parentheses(formula.replaceAll(/\s/g, ``));
224
- // Regex to match: Element, optional oxidation state and/or count in either order
225
- // Pattern: ([A-Z][a-z]?) - element symbol
226
- // Followed by one of:
227
- // - oxidation then optional count: (?:\^([+-]?\d+[+-]?|[+-])|\[([+-]?\d+[+-]?|[+-])\])(count?)
228
- // - count then optional oxidation: count(?:\^([+-]?\d+[+-]?|[+-])|\[([+-]?\d+[+-]?|[+-])\])?
229
- // - just oxidation: (?:\^([+-]?\d+[+-]?|[+-])|\[([+-]?\d+[+-]?|[+-])\])
230
- // - just count: count
231
- // - neither
232
- const regex = /([A-Z][a-z]?)(?:(?:\^([+-]?\d+[+-]?|[+-])|\[([+-]?\d+[+-]?|[+-])\])((?:\d+(?:\.\d+)?|\.\d+)?)|((?:\d+(?:\.\d+)?|\.\d+))(?:\^([+-]?\d+[+-]?|[+-])|\[([+-]?\d+[+-]?|[+-])\])?)?/g;
233
- let match;
234
- let orig_idx = 0;
235
- while ((match = regex.exec(cleaned_formula)) !== null) {
236
- const element = match[1];
237
- // Oxidation can be in groups 2/3 (oxidation first) or 6/7 (count first)
238
- // Count can be in group 4 (after oxidation) or 5 (before oxidation)
239
- const oxidation_str = match[2] || match[3] || match[6] || match[7];
240
- const count_str = match[4] || match[5];
241
- const count = parse_count(count_str);
221
+ // Element symbol followed by optional oxidation state (^2+ or [2+] syntax) and
222
+ // optional count, in either order: Fe^2+O3, Fe[2+]O3, Fe3^2+, Fe2
223
+ const regex = /(?<element>[A-Z][a-z]?)(?:(?:\^(?<oxi_caret>[+-]?\d+[+-]?|[+-])|\[(?<oxi_bracket>[+-]?\d+[+-]?|[+-])\])(?<count_after>(?:\d+(?:\.\d+)?|\.\d+)?)|(?<count_before>(?:\d+(?:\.\d+)?|\.\d+))(?:\^(?<oxi_caret_2>[+-]?\d+[+-]?|[+-])|\[(?<oxi_bracket_2>[+-]?\d+[+-]?|[+-])\])?)?/g;
224
+ for (const match of cleaned_formula.matchAll(regex)) {
225
+ const groups = match.groups ?? {};
226
+ const element = groups.element;
227
+ const oxidation_str = groups.oxi_caret || groups.oxi_bracket || groups.oxi_caret_2 || groups.oxi_bracket_2;
228
+ const count = parse_count(groups.count_after || groups.count_before);
242
229
  if (!is_elem_symbol(element))
243
230
  throw new Error(`Invalid element symbol: ${element}`);
244
231
  const oxidation_state = oxidation_str ? parse_oxidation_state(oxidation_str) : undefined;
245
- // Find or add element entry
246
232
  const existing = elements.find((el) => el.element === element);
247
- if (existing) {
248
- existing.amount += count;
249
- // Handle oxidation state conflicts
250
- if (oxidation_state === undefined) {
251
- // No oxidation state in current match, nothing to do
252
- }
253
- else if (existing.oxidation_state === undefined) {
254
- // Set oxidation state on first occurrence
255
- existing.oxidation_state = oxidation_state;
256
- }
257
- else if (strict && existing.oxidation_state !== oxidation_state) {
258
- // In strict mode, throw on conflicting oxidation states
259
- throw new Error(`Conflicting oxidation states for ${element}: ${format_state(existing.oxidation_state)} and ${format_state(oxidation_state)}`);
260
- }
233
+ if (!existing) {
234
+ elements.push({ element, amount: count, oxidation_state, orig_idx: elements.length });
235
+ continue;
261
236
  }
262
- else {
263
- elements.push({ element, amount: count, oxidation_state, orig_idx: orig_idx++ });
237
+ existing.amount += count;
238
+ if (oxidation_state === undefined)
239
+ continue;
240
+ if (existing.oxidation_state === undefined) {
241
+ existing.oxidation_state = oxidation_state; // Set on first occurrence
242
+ }
243
+ else if (strict && existing.oxidation_state !== oxidation_state) {
244
+ throw new Error(`Conflicting oxidation states for ${element}: ${format_state(existing.oxidation_state)} and ${format_state(oxidation_state)}`);
264
245
  }
265
246
  }
266
247
  return elements;
@@ -297,20 +278,12 @@ export function generate_chem_sys_subspaces(input) {
297
278
  let elements;
298
279
  if (typeof input === `string`)
299
280
  elements = extract_formula_elements(input);
300
- else if (Array.isArray(input)) {
301
- const uniq = [...new Set(input)];
302
- for (const elem of uniq) {
303
- if (!is_elem_symbol(elem))
304
- throw new Error(`Invalid element symbol: ${elem}`);
305
- }
306
- elements = uniq;
307
- }
308
281
  else {
309
- elements = [];
310
- for (const elem of Object.keys(input)) {
282
+ const symbols = Array.isArray(input) ? input : Object.keys(input);
283
+ elements = [...new Set(symbols)];
284
+ for (const elem of elements) {
311
285
  if (!is_elem_symbol(elem))
312
286
  throw new Error(`Invalid element symbol: ${elem}`);
313
- elements.push(elem);
314
287
  }
315
288
  }
316
289
  const sorted = [...elements].sort();
@@ -342,7 +315,7 @@ export const has_wildcards = (input) => input.includes(`*`);
342
315
  // Throws if any non-wildcard token is not a valid element symbol.
343
316
  export function parse_chemsys_with_wildcards(input) {
344
317
  const tokens = input
345
- .replaceAll('-', `,`)
318
+ .replaceAll(`-`, `,`)
346
319
  .split(`,`)
347
320
  .map((tok) => tok.trim())
348
321
  .filter(Boolean);
@@ -377,32 +350,21 @@ export const ELEM_WILDCARD = {
377
350
  // "**O4" -> *(1), *(1), O(4) - matches ternary oxides with 1:1:4 ratio
378
351
  export function parse_formula_with_wildcards(formula) {
379
352
  const tokens = [];
380
- // Expand parentheses, treating * as a pseudo-element (temporarily replace to protect it)
353
+ // Swap * for a placeholder so parentheses expansion treats it as a pseudo-element
381
354
  let cleaned = formula.replaceAll(/\s/g, ``);
382
- // Protect wildcards from parentheses expansion by replacing * with placeholder
383
355
  cleaned = cleaned.replace(ELEM_WILDCARD.to_placeholder, ELEM_WILDCARD.placeholder);
384
356
  cleaned = expand_parentheses(cleaned);
385
- // Restore wildcards
386
357
  cleaned = cleaned.replace(ELEM_WILDCARD.from_placeholder, `*`);
387
- // Regex to match either:
388
- // 1. Standard element symbol with optional decimal count
389
- // 2. Wildcard with optional decimal count
390
- const regex = /([A-Z][a-z]?)((?:\d+(?:\.\d+)?|\.\d+)?)|(\*)((?:\d+(?:\.\d+)?|\.\d+)?)/g;
391
- let match;
392
- while ((match = regex.exec(cleaned)) !== null) {
393
- if (match[3] === `*`) {
394
- // Wildcard match
395
- const count = parse_count(match[4]);
396
- tokens.push({ element: null, count });
397
- }
398
- else if (match[1]) {
399
- // Element symbol match
400
- const element = match[1];
401
- const count = parse_count(match[2]);
402
- if (!is_elem_symbol(element)) {
358
+ // Match element symbol or wildcard, each with optional decimal count
359
+ const regex = /(?<element>[A-Z][a-z]?)(?<count>(?:\d+(?:\.\d+)?|\.\d+)?)|(?<wildcard>\*)(?<wildcard_count>(?:\d+(?:\.\d+)?|\.\d+)?)/g;
360
+ for (const match of cleaned.matchAll(regex)) {
361
+ const { element, count, wildcard, wildcard_count } = match.groups ?? {};
362
+ if (wildcard)
363
+ tokens.push({ element: null, count: parse_count(wildcard_count) });
364
+ else if (element) {
365
+ if (!is_elem_symbol(element))
403
366
  throw new Error(`Invalid element symbol: ${element}`);
404
- }
405
- tokens.push({ element, count });
367
+ tokens.push({ element, count: parse_count(count) });
406
368
  }
407
369
  }
408
370
  return tokens;
@@ -435,48 +397,32 @@ export function matches_chemsys_wildcard(formula, explicit_elements, wildcard_co
435
397
  export function matches_formula_wildcard(formula, pattern) {
436
398
  try {
437
399
  const composition = parse_formula(formula);
438
- // Separate explicit elements and wildcards from pattern
439
- const explicit_requirements = [];
400
+ // Split pattern into merged explicit element counts (e.g. "LiLi" -> Li: 2)
401
+ // and wildcard counts
402
+ const explicit_counts = new Map();
440
403
  const wildcard_counts = [];
441
404
  for (const token of pattern) {
442
- if (token.element === null) {
405
+ if (token.element === null)
443
406
  wildcard_counts.push(token.count);
444
- }
445
407
  else {
446
- // Merge counts for same element (e.g. "LiLi" -> Li with count 2)
447
- const existing = explicit_requirements.find((req) => req.element === token.element);
448
- if (existing) {
449
- existing.count += token.count;
450
- }
451
- else {
452
- explicit_requirements.push({ element: token.element, count: token.count });
453
- }
408
+ explicit_counts.set(token.element, (explicit_counts.get(token.element) ?? 0) + token.count);
454
409
  }
455
410
  }
456
- // Check explicit element requirements
457
- const used_elements = new Set();
458
- for (const req of explicit_requirements) {
459
- if (composition[req.element] !== req.count)
411
+ for (const [element, count] of explicit_counts) {
412
+ if (composition[element] !== count)
460
413
  return false;
461
- used_elements.add(req.element);
462
414
  }
463
- // Get remaining elements (candidates for wildcards)
464
- const remaining_elements = Object.entries(composition)
465
- .filter(([elem]) => !used_elements.has(elem))
466
- .map(([elem, count]) => ({ elem, count }));
467
- // Must have exactly as many remaining elements as wildcards
468
- if (remaining_elements.length !== wildcard_counts.length)
415
+ // Remaining elements are wildcard candidates. Each wildcard needs a distinct
416
+ // element with exactly its count, so sorting both count lists reduces the
417
+ // matching to a positional comparison
418
+ const remaining_counts = Object.entries(composition)
419
+ .filter(([elem]) => !explicit_counts.has(elem))
420
+ .map(([, count]) => count)
421
+ .sort((cnt_a, cnt_b) => cnt_a - cnt_b);
422
+ if (remaining_counts.length !== wildcard_counts.length)
469
423
  return false;
470
- // Try to match remaining elements to wildcards (each wildcard needs a distinct element)
471
- // Sort both by count to enable greedy matching
472
- const sorted_remaining = [...remaining_elements].sort((a, b) => a.count - b.count);
473
- const sorted_wildcards = [...wildcard_counts].sort((a, b) => a - b);
474
- // Check if counts match (simple comparison works because we need exact matches)
475
- for (let idx = 0; idx < sorted_wildcards.length; idx++) {
476
- if (sorted_remaining[idx].count !== sorted_wildcards[idx])
477
- return false;
478
- }
479
- return true;
424
+ wildcard_counts.sort((cnt_a, cnt_b) => cnt_a - cnt_b);
425
+ return wildcard_counts.every((count, idx) => remaining_counts[idx] === count);
480
426
  }
481
427
  catch {
482
428
  return false;
@@ -13,7 +13,6 @@ export declare const STRUCT_KEYWORDS_STRICT: readonly string[];
13
13
  export declare const TRAJ_KEYWORDS_REGEX: RegExp;
14
14
  export declare const STRUCT_KEYWORDS_REGEX: RegExp;
15
15
  export declare const STRUCT_KEYWORDS_STRICT_REGEX: RegExp;
16
- export declare const TRAJ_KEYWORDS_SIMPLE_REGEX: RegExp;
17
16
  export declare const TRAJ_EXTENSIONS: readonly string[];
18
17
  export declare const TRAJ_EXTENSIONS_REGEX: RegExp;
19
18
  export declare const STRUCTURE_EXTENSIONS: readonly string[];
package/dist/constants.js CHANGED
@@ -14,11 +14,13 @@ export const COMPRESSION_EXTENSIONS = Object.freeze(Object.values(COMPRESSION_FO
14
14
  export const TRAJ_KEYWORDS = Object.freeze([
15
15
  `trajectory`,
16
16
  `traj`,
17
+ `relaxation`,
17
18
  `relax`,
18
19
  `npt`,
19
20
  `nvt`,
20
21
  `nve`,
21
22
  `qha`,
23
+ `dpmd`, // DeePMD trajectory outputs (before `md` so the longer token wins)
22
24
  `md`,
23
25
  `dynamics`,
24
26
  `simulation`,
@@ -41,29 +43,18 @@ export const STRUCT_KEYWORDS = Object.freeze([
41
43
  `phonopy`,
42
44
  ]);
43
45
  // More restrictive keywords for JSON/YAML files (excludes generic terms like "data")
44
- export const STRUCT_KEYWORDS_STRICT = Object.freeze([
45
- `structure`,
46
- `phono`,
47
- `vasp`,
48
- `crystal`,
49
- `material`,
50
- `lattice`,
51
- `geometry`,
52
- `unit_cell`,
53
- `unitcell`,
54
- `atoms`,
55
- `sites`,
56
- `phono3py`,
57
- `phonopy`,
58
- ]);
59
- // Regex patterns for keyword matching
46
+ export const STRUCT_KEYWORDS_STRICT = Object.freeze(STRUCT_KEYWORDS.filter((keyword) => keyword !== `data`));
47
+ // Regex patterns for keyword matching. Keywords must be delimited on both sides
48
+ // (`md_300K`, `si_md.log`) so bare prefixes like `md/notes.log` or `mdp_run` do not
49
+ // match. `relaxation` is listed explicitly (not only via the `relax` prefix).
60
50
  export const TRAJ_KEYWORDS_REGEX = new RegExp(`(^|[-_.])(${TRAJ_KEYWORDS.join(`|`)})([-_.]|$)`, `i`);
61
51
  export const STRUCT_KEYWORDS_REGEX = new RegExp(`(${STRUCT_KEYWORDS.join(`|`)})`, `i`);
62
52
  export const STRUCT_KEYWORDS_STRICT_REGEX = new RegExp(`(${STRUCT_KEYWORDS_STRICT.join(`|`)})`, `i`);
63
- export const TRAJ_KEYWORDS_SIMPLE_REGEX = new RegExp(`(${TRAJ_KEYWORDS.join(`|`)})`, `i`);
53
+ // Build a case-insensitive `\.(ext1|ext2|...)$` regex from extensions (leading dots stripped)
54
+ const ext_regex = (exts) => new RegExp(`\\.(${exts.map((ext) => ext.slice(1)).join(`|`)})$`, `i`);
64
55
  // File extensions for different file types
65
56
  export const TRAJ_EXTENSIONS = Object.freeze([`.traj`, `.xtc`, `.lammpstrj`]);
66
- export const TRAJ_EXTENSIONS_REGEX = new RegExp(`\\.(${TRAJ_EXTENSIONS.map((ext) => ext.slice(1)).join(`|`)})$`, `i`);
57
+ export const TRAJ_EXTENSIONS_REGEX = ext_regex(TRAJ_EXTENSIONS);
67
58
  export const STRUCTURE_EXTENSIONS = Object.freeze([
68
59
  `.cif`,
69
60
  `.mcif`,
@@ -79,7 +70,7 @@ export const STRUCTURE_EXTENSIONS = Object.freeze([
79
70
  `.sdf`,
80
71
  `.mmcif`,
81
72
  ]);
82
- export const STRUCTURE_EXTENSIONS_REGEX = new RegExp(`\\.(${STRUCTURE_EXTENSIONS.map((ext) => ext.slice(1)).join(`|`)})$`, `i`);
73
+ export const STRUCTURE_EXTENSIONS_REGEX = ext_regex(STRUCTURE_EXTENSIONS);
83
74
  export const TRAJ_FALLBACK_EXTENSIONS = Object.freeze([
84
75
  `.dat`,
85
76
  `.data`,
@@ -87,13 +78,13 @@ export const TRAJ_FALLBACK_EXTENSIONS = Object.freeze([
87
78
  `.out`,
88
79
  `.json`,
89
80
  ]);
90
- export const TRAJ_FALLBACK_EXTENSIONS_REGEX = new RegExp(`\\.(${TRAJ_FALLBACK_EXTENSIONS.map((ext) => ext.slice(1)).join(`|`)})$`, `i`);
81
+ export const TRAJ_FALLBACK_EXTENSIONS_REGEX = ext_regex(TRAJ_FALLBACK_EXTENSIONS);
91
82
  // Special regex patterns
92
- export const VASP_FILES_REGEX = /(?:^|[\\/_.-])(poscar|contcar|potcar|incar|kpoints|outcar)(?:[\\/_.-]|$)/i;
93
- export const VASP_VOLUMETRIC_REGEX = /(?:^|[\\/_.-])(chgcar|aeccar[012]?|elfcar|locpot|parchg)(?:[\\/_.-]|$)/i;
83
+ export const VASP_FILES_REGEX = /(?:^|[\\/_.-])(?:poscar|contcar|potcar|incar|kpoints|outcar)(?:[\\/_.-]|$)/i;
84
+ export const VASP_VOLUMETRIC_REGEX = /(?:^|[\\/_.-])(?:chgcar|aeccar[012]?|elfcar|locpot|parchg)(?:[\\/_.-]|$)/i;
94
85
  export const XDATCAR_REGEX = /xdatcar/i;
95
- export const CONFIG_DIRS_REGEX = /(?:^|[\\/])(\.vscode|\.idea|\.nyc_output|\.cache|\.tmp|\.temp|node_modules|dist|build|coverage)(?:[\\/]|$)/i;
96
- export const MD_SIM_EXCLUDE_REGEX = /md_simulation\.(out|txt|yml|py|csv|html|css|md|js|ts)$/i;
97
- export const XYZ_EXTXYZ_REGEX = /\.(xyz|extxyz)$/i;
86
+ export const CONFIG_DIRS_REGEX = /(?:^|[\\/])(?:\.vscode|\.idea|\.nyc_output|\.cache|\.tmp|\.temp|node_modules|dist|build|coverage)(?:[\\/]|$)/i;
87
+ export const MD_SIM_EXCLUDE_REGEX = /md_simulation\.(?:out|txt|yml|py|csv|html|css|md|js|ts)$/i;
88
+ export const XYZ_EXTXYZ_REGEX = /\.(?:xyz|extxyz)$/i;
98
89
  // Compression extensions regex (shared across files)
99
- export const COMPRESSION_EXTENSIONS_REGEX = new RegExp(`\\.(${COMPRESSION_EXTENSIONS.map((ext) => ext.slice(1)).join(`|`)})$`, `i`);
90
+ export const COMPRESSION_EXTENSIONS_REGEX = ext_regex(COMPRESSION_EXTENSIONS);
@@ -12,10 +12,11 @@
12
12
  // Union type combining all possible props from 2D, 3D, and 4D components
13
13
  // each specific component will only use its relevant props from this super set
14
14
  // (gas_config/gas_pressures already come from BaseConvexHullProps)
15
- type ConvexHullProps = BaseConvexHullProps & Hull3DProps & {
16
- x_axis?: AxisConfig
17
- y_axis?: AxisConfig
18
- }
15
+ type ConvexHullProps = BaseConvexHullProps &
16
+ Hull3DProps & {
17
+ x_axis?: AxisConfig
18
+ y_axis?: AxisConfig
19
+ }
19
20
 
20
21
  let {
21
22
  entries = [],
@@ -26,9 +27,7 @@
26
27
  show_unstable = $bindable(true),
27
28
  hidden_categories = $bindable([]),
28
29
  show_hull_faces = $bindable(true),
29
- hull_face_opacity: hull_face_opacity_prop = $bindable(
30
- undefined as number | undefined,
31
- ),
30
+ hull_face_opacity: hull_face_opacity_prop = $bindable(undefined as number | undefined),
32
31
  color_mode = $bindable(`energy`),
33
32
  color_scale = $bindable(`interpolateViridis`),
34
33
  info_pane_open = $bindable(false),
@@ -88,8 +87,7 @@
88
87
  // while each component declares only its dimension's props (2D lacks Hull3DProps, 3D/4D
89
88
  // lack x/y_axis), so a constructor union wouldn't compile. Svelte ignores extra props.
90
89
  const ConvexHullComponent = $derived(
91
- { 2: ConvexHull2D, 3: ConvexHull3D, 4: ConvexHull4D }[element_count] ??
92
- null,
90
+ { 2: ConvexHull2D, 3: ConvexHull3D, 4: ConvexHull4D }[element_count] ?? null,
93
91
  ) as Component<ConvexHullProps> | null
94
92
  </script>
95
93
 
@@ -125,14 +123,13 @@
125
123
  {:else}
126
124
  <!-- Error state for unsupported dimensionalities -->
127
125
  <div class="convex-hull-error">
128
- <div
129
- style="text-align: center; padding: 2em; color: var(--convex-hull-text-color, #666)"
130
- >
126
+ <div style="text-align: center; padding: 2em; color: var(--convex-hull-text-color, #666)">
131
127
  <h3 id="unsupported-chemical-system" style="margin: 0 0 1em 0">Unsupported Chemical System</h3>
132
128
  <p style="margin: 0">
133
- Convex hulls require 2, 3, or 4 elements. Found {element_count} element{
134
- element_count === 1 ? `` : `s`
135
- }:
129
+ Convex hulls require 2, 3, or 4 elements. Found {element_count} element{element_count ===
130
+ 1
131
+ ? ``
132
+ : `s`}:
136
133
  </p>
137
134
  <p style="margin: 0.5em 0 0 0; font-weight: bold">
138
135
  {elements.join(`, `)}
@@ -5,6 +5,6 @@ type ConvexHullProps = BaseConvexHullProps & Hull3DProps & {
5
5
  x_axis?: AxisConfig;
6
6
  y_axis?: AxisConfig;
7
7
  };
8
- declare const ConvexHull: Component<ConvexHullProps, {}, "display" | "temperature" | "fullscreen" | "wrapper" | "controls_open" | "color_scale" | "info_pane_open" | "show_hull_faces" | "hull_face_opacity" | "color_mode" | "show_stable" | "show_unstable" | "show_stable_labels" | "show_unstable_labels" | "max_hull_dist_show_phases" | "max_hull_dist_show_labels" | "hidden_categories" | "energy_source_mode" | "stable_entries" | "unstable_entries" | "phase_stats" | "highlighted_entries" | "selected_entry" | "gas_pressures">;
8
+ declare const ConvexHull: Component<ConvexHullProps, {}, "display" | "fullscreen" | "wrapper" | "controls_open" | "color_scale" | "info_pane_open" | "temperature" | "show_hull_faces" | "hull_face_opacity" | "color_mode" | "show_stable" | "show_unstable" | "show_stable_labels" | "show_unstable_labels" | "max_hull_dist_show_phases" | "max_hull_dist_show_labels" | "hidden_categories" | "energy_source_mode" | "stable_entries" | "unstable_entries" | "phase_stats" | "highlighted_entries" | "selected_entry" | "gas_pressures">;
9
9
  type ConvexHull = ReturnType<typeof ConvexHull>;
10
10
  export default ConvexHull;