matterviz 0.4.1 → 0.4.2

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 (395) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +12 -14
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/app.css +53 -0
  6. package/dist/brillouin/BrillouinZone.svelte +75 -85
  7. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  8. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  9. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  10. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  11. package/dist/brillouin/BrillouinZoneScene.svelte +26 -39
  12. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  13. package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
  14. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +62 -74
  15. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  16. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +511 -547
  17. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  18. package/dist/chempot-diagram/async-compute.svelte.js +1 -1
  19. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  20. package/dist/colors/index.d.ts +0 -4
  21. package/dist/colors/index.js +19 -20
  22. package/dist/composition/BarChart.svelte +37 -31
  23. package/dist/composition/BubbleChart.svelte +17 -17
  24. package/dist/composition/Composition.svelte +7 -11
  25. package/dist/composition/Formula.svelte +18 -25
  26. package/dist/composition/FormulaFilter.svelte +92 -95
  27. package/dist/composition/PieChart.svelte +55 -41
  28. package/dist/composition/format.js +1 -1
  29. package/dist/composition/index.d.ts +2 -0
  30. package/dist/composition/index.js +14 -0
  31. package/dist/composition/parse.d.ts +2 -2
  32. package/dist/composition/parse.js +11 -10
  33. package/dist/constants.js +11 -9
  34. package/dist/convex-hull/ConvexHull.svelte +12 -15
  35. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  36. package/dist/convex-hull/ConvexHull2D.svelte +93 -92
  37. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  38. package/dist/convex-hull/ConvexHull3D.svelte +109 -140
  39. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  40. package/dist/convex-hull/ConvexHull4D.svelte +75 -94
  41. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  42. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  43. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  44. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  45. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  46. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  47. package/dist/convex-hull/StructurePopup.svelte +17 -21
  48. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  49. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  50. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  51. package/dist/convex-hull/helpers.d.ts +8 -10
  52. package/dist/convex-hull/helpers.js +36 -36
  53. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  54. package/dist/convex-hull/thermodynamics.js +18 -17
  55. package/dist/coordination/CoordinationBarPlot.svelte +38 -33
  56. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  57. package/dist/coordination/calc-coordination.d.ts +1 -1
  58. package/dist/coordination/calc-coordination.js +28 -25
  59. package/dist/element/BohrAtom.svelte +5 -8
  60. package/dist/element/ElementHeading.svelte +4 -1
  61. package/dist/element/ElementPhoto.svelte +11 -9
  62. package/dist/element/ElementStats.svelte +12 -10
  63. package/dist/element/ElementTile.svelte +24 -29
  64. package/dist/element/Nucleus.svelte +4 -2
  65. package/dist/element/data.d.ts +1 -2
  66. package/dist/element/helpers.d.ts +4 -0
  67. package/dist/element/helpers.js +18 -0
  68. package/dist/element/index.d.ts +1 -4
  69. package/dist/element/index.js +3 -18
  70. package/dist/feedback/DragOverlay.svelte +5 -5
  71. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  72. package/dist/feedback/StatusMessage.svelte +7 -4
  73. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  74. package/dist/fermi-surface/FermiSurface.svelte +14 -22
  75. package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -7
  76. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  77. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  78. package/dist/fermi-surface/FermiSurfaceScene.svelte +37 -64
  79. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  80. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  81. package/dist/fermi-surface/compute.js +3 -3
  82. package/dist/fermi-surface/parse.js +22 -24
  83. package/dist/heatmap-matrix/HeatmapMatrix.svelte +109 -148
  84. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  85. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  86. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  87. package/dist/heatmap-matrix/index.d.ts +5 -0
  88. package/dist/icons.d.ts +4 -0
  89. package/dist/icons.js +4 -0
  90. package/dist/io/ExportPane.svelte +10 -6
  91. package/dist/io/decompress.d.ts +2 -1
  92. package/dist/io/decompress.js +22 -35
  93. package/dist/io/export.d.ts +4 -0
  94. package/dist/io/export.js +5 -1
  95. package/dist/io/fetch.d.ts +0 -3
  96. package/dist/io/fetch.js +0 -11
  97. package/dist/io/index.d.ts +0 -1
  98. package/dist/io/index.js +2 -9
  99. package/dist/io/is-binary.d.ts +9 -0
  100. package/dist/io/is-binary.js +45 -1
  101. package/dist/io/url-drop.js +13 -25
  102. package/dist/isosurface/Isosurface.svelte +17 -23
  103. package/dist/isosurface/IsosurfaceControls.svelte +37 -42
  104. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  105. package/dist/isosurface/parse-vaspwave.js +138 -0
  106. package/dist/isosurface/parse.js +6 -6
  107. package/dist/labels.d.ts +6 -2
  108. package/dist/labels.js +43 -13
  109. package/dist/layout/FullscreenButton.svelte +2 -1
  110. package/dist/layout/FullscreenToggle.svelte +10 -4
  111. package/dist/layout/InfoCard.svelte +7 -18
  112. package/dist/layout/InfoTag.svelte +1 -3
  113. package/dist/layout/NumberRangeInput.svelte +46 -0
  114. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  115. package/dist/layout/PropertyFilter.svelte +2 -6
  116. package/dist/layout/SettingsSection.svelte +21 -17
  117. package/dist/layout/SubpageGrid.svelte +3 -1
  118. package/dist/layout/ViewerChrome.svelte +9 -10
  119. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  120. package/dist/layout/fullscreen.js +3 -5
  121. package/dist/layout/fullscreen.svelte.js +1 -2
  122. package/dist/layout/index.d.ts +1 -0
  123. package/dist/layout/index.js +1 -0
  124. package/dist/layout/json-tree/JsonNode.svelte +8 -11
  125. package/dist/layout/json-tree/JsonTree.svelte +53 -77
  126. package/dist/layout/json-tree/JsonValue.svelte +7 -15
  127. package/dist/layout/json-tree/utils.js +14 -23
  128. package/dist/math.d.ts +2 -0
  129. package/dist/math.js +19 -0
  130. package/dist/overlays/ContextMenu.svelte +4 -2
  131. package/dist/overlays/CopyButton.svelte +11 -5
  132. package/dist/overlays/DragControlTab.svelte +6 -1
  133. package/dist/overlays/DraggablePane.svelte +81 -26
  134. package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
  135. package/dist/overlays/GlassChip.svelte +30 -0
  136. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  137. package/dist/overlays/InfoPaneCards.svelte +11 -23
  138. package/dist/overlays/index.d.ts +7 -0
  139. package/dist/overlays/index.js +26 -0
  140. package/dist/overlays/portal.d.ts +2 -0
  141. package/dist/overlays/portal.js +14 -0
  142. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  143. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  144. package/dist/periodic-table/PeriodicTableControls.svelte +11 -63
  145. package/dist/periodic-table/TableInset.svelte +9 -4
  146. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
  147. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  148. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  149. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  150. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  151. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  152. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  153. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  154. package/dist/phase-diagram/build-diagram.js +3 -3
  155. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  156. package/dist/phase-diagram/parse.js +15 -15
  157. package/dist/phase-diagram/svg-to-diagram.js +21 -15
  158. package/dist/phase-diagram/utils.js +2 -3
  159. package/dist/plot/bar/BarPlot.svelte +430 -391
  160. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  161. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  162. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  163. package/dist/plot/bar/SpacegroupBarPlot.svelte +29 -36
  164. package/dist/plot/bar/data.d.ts +5 -4
  165. package/dist/plot/bar/data.js +2 -1
  166. package/dist/plot/box/BoxPlot.svelte +301 -209
  167. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  168. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  169. package/dist/plot/box/box-plot.js +1 -1
  170. package/dist/plot/core/auto-place.js +1 -1
  171. package/dist/plot/core/axis-utils.d.ts +12 -7
  172. package/dist/plot/core/axis-utils.js +48 -48
  173. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  174. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  175. package/dist/plot/core/components/ColorBar.svelte +101 -106
  176. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  177. package/dist/plot/core/components/FillArea.svelte +10 -17
  178. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  179. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  180. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  181. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  182. package/dist/plot/core/components/Line.svelte +18 -9
  183. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  184. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  185. package/dist/plot/core/components/PlotControls.svelte +65 -41
  186. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  187. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  188. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  189. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  190. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  191. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  192. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  193. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  194. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  195. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  196. package/dist/plot/core/components/index.d.ts +1 -0
  197. package/dist/plot/core/components/index.js +1 -0
  198. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  199. package/dist/plot/core/data-cleaning-signal.js +467 -0
  200. package/dist/plot/core/data-cleaning.d.ts +2 -42
  201. package/dist/plot/core/data-cleaning.js +27 -474
  202. package/dist/plot/core/data-transform.js +9 -5
  203. package/dist/plot/core/fill-utils.d.ts +3 -1
  204. package/dist/plot/core/fill-utils.js +28 -6
  205. package/dist/plot/core/index.d.ts +1 -0
  206. package/dist/plot/core/index.js +1 -0
  207. package/dist/plot/core/interactions.js +0 -2
  208. package/dist/plot/core/layout.d.ts +3 -1
  209. package/dist/plot/core/layout.js +22 -13
  210. package/dist/plot/core/marginals.d.ts +170 -0
  211. package/dist/plot/core/marginals.js +436 -0
  212. package/dist/plot/core/reference-line.js +1 -1
  213. package/dist/plot/core/scales.d.ts +23 -0
  214. package/dist/plot/core/scales.js +39 -13
  215. package/dist/plot/core/types/fills.d.ts +101 -0
  216. package/dist/plot/core/types/fills.js +15 -0
  217. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  218. package/dist/plot/core/types/plot-3d.js +4 -0
  219. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  220. package/dist/plot/core/types/reference-lines.js +9 -0
  221. package/dist/plot/core/types.d.ts +29 -324
  222. package/dist/plot/core/types.js +23 -20
  223. package/dist/plot/core/utils/hierarchy-chart.d.ts +51 -0
  224. package/dist/plot/core/utils/hierarchy-chart.js +179 -0
  225. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  226. package/dist/plot/core/utils/hierarchy-labels.js +99 -0
  227. package/dist/plot/core/utils/label-placement.js +2 -2
  228. package/dist/plot/histogram/Histogram.svelte +304 -325
  229. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  230. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  231. package/dist/plot/histogram/histogram.d.ts +31 -0
  232. package/dist/plot/histogram/histogram.js +70 -0
  233. package/dist/plot/histogram/index.d.ts +1 -0
  234. package/dist/plot/histogram/index.js +1 -0
  235. package/dist/plot/index.d.ts +1 -0
  236. package/dist/plot/index.js +1 -0
  237. package/dist/plot/sankey/Sankey.svelte +78 -69
  238. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  239. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  240. package/dist/plot/scatter/BinnedScatterPlot.svelte +263 -109
  241. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  242. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  243. package/dist/plot/scatter/ScatterPlot.svelte +477 -385
  244. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  245. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  246. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  247. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  248. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  249. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  250. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  251. package/dist/plot/scatter/scatter-data.js +8 -7
  252. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  253. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  254. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  255. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  256. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  257. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  258. package/dist/plot/sunburst/Sunburst.svelte +251 -329
  259. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  260. package/dist/plot/sunburst/index.d.ts +1 -1
  261. package/dist/plot/sunburst/index.js +2 -1
  262. package/dist/plot/sunburst/render.d.ts +2 -2
  263. package/dist/plot/sunburst/render.js +47 -22
  264. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  265. package/dist/plot/sunburst/sunburst.js +10 -3
  266. package/dist/plot/treemap/Treemap.svelte +907 -0
  267. package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
  268. package/dist/plot/treemap/index.d.ts +3 -0
  269. package/dist/plot/treemap/index.js +4 -0
  270. package/dist/plot/treemap/treemap.d.ts +26 -0
  271. package/dist/plot/treemap/treemap.js +99 -0
  272. package/dist/rdf/RdfPlot.svelte +22 -26
  273. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  274. package/dist/rdf/calc-rdf.js +4 -8
  275. package/dist/sanitize.js +1 -1
  276. package/dist/scene/bind-renderer.svelte.js +14 -6
  277. package/dist/settings.d.ts +19 -9
  278. package/dist/settings.js +77 -50
  279. package/dist/spectral/Bands.svelte +223 -230
  280. package/dist/spectral/BandsAndDos.svelte +11 -9
  281. package/dist/spectral/BrillouinBandsDos.svelte +19 -27
  282. package/dist/spectral/Dos.svelte +70 -73
  283. package/dist/spectral/helpers.d.ts +3 -3
  284. package/dist/spectral/helpers.js +25 -35
  285. package/dist/state.svelte.js +5 -18
  286. package/dist/structure/Arrow.svelte +5 -18
  287. package/dist/structure/ArrowInstances.svelte +160 -0
  288. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  289. package/dist/structure/AtomLegend.svelte +115 -75
  290. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  291. package/dist/structure/Bond.svelte +31 -23
  292. package/dist/structure/CanvasTooltip.svelte +15 -3
  293. package/dist/structure/CellSelect.svelte +11 -26
  294. package/dist/structure/Cylinder.svelte +24 -40
  295. package/dist/structure/InstancedAtoms.svelte +114 -0
  296. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  297. package/dist/structure/Lattice.svelte +85 -149
  298. package/dist/structure/SiteLabels.svelte +122 -0
  299. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  300. package/dist/structure/Structure.svelte +473 -419
  301. package/dist/structure/Structure.svelte.d.ts +4 -2
  302. package/dist/structure/StructureCarousel.svelte +630 -0
  303. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  304. package/dist/structure/StructureControls.svelte +157 -399
  305. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  306. package/dist/structure/StructureExportPane.svelte +17 -21
  307. package/dist/structure/StructureInfoPane.svelte +72 -66
  308. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  309. package/dist/structure/StructureScene.svelte +467 -476
  310. package/dist/structure/StructureScene.svelte.d.ts +3 -1
  311. package/dist/structure/StructureViewport.svelte +386 -0
  312. package/dist/structure/StructureViewport.svelte.d.ts +63 -0
  313. package/dist/structure/atom-label-placement.d.ts +16 -12
  314. package/dist/structure/atom-label-placement.js +70 -37
  315. package/dist/structure/atom-properties.d.ts +2 -0
  316. package/dist/structure/atom-properties.js +104 -38
  317. package/dist/structure/bonding.d.ts +10 -3
  318. package/dist/structure/bonding.js +84 -28
  319. package/dist/structure/edit-history.d.ts +6 -0
  320. package/dist/structure/edit-history.js +27 -0
  321. package/dist/structure/export.d.ts +1 -0
  322. package/dist/structure/export.js +39 -31
  323. package/dist/structure/format-detect.d.ts +1 -0
  324. package/dist/structure/format-detect.js +22 -0
  325. package/dist/structure/geometry.d.ts +9 -0
  326. package/dist/structure/geometry.js +27 -0
  327. package/dist/structure/index.d.ts +16 -1
  328. package/dist/structure/index.js +13 -2
  329. package/dist/structure/measure.d.ts +1 -1
  330. package/dist/structure/measure.js +6 -12
  331. package/dist/structure/parse.d.ts +2 -1
  332. package/dist/structure/parse.js +243 -222
  333. package/dist/structure/partial-occupancy.js +4 -2
  334. package/dist/structure/pbc.js +78 -98
  335. package/dist/structure/polyhedra.d.ts +0 -1
  336. package/dist/structure/polyhedra.js +3 -18
  337. package/dist/structure/supercell.d.ts +1 -2
  338. package/dist/structure/supercell.js +7 -13
  339. package/dist/symmetry/SymmetryElements.svelte +11 -15
  340. package/dist/symmetry/SymmetryStats.svelte +56 -68
  341. package/dist/symmetry/WyckoffTable.svelte +5 -24
  342. package/dist/symmetry/cell-transform.js +1 -0
  343. package/dist/symmetry/index.d.ts +1 -0
  344. package/dist/symmetry/index.js +8 -2
  345. package/dist/symmetry/spacegroups.js +3 -2
  346. package/dist/table/HeatmapTable.svelte +1102 -365
  347. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  348. package/dist/table/ToggleMenu.svelte +5 -12
  349. package/dist/table/index.d.ts +21 -6
  350. package/dist/table/index.js +34 -21
  351. package/dist/theme/ThemeControl.svelte +16 -8
  352. package/dist/theme/index.d.ts +1 -5
  353. package/dist/theme/index.js +4 -10
  354. package/dist/theme/themes.mjs +14 -7
  355. package/dist/tooltip/KCoords.svelte +4 -1
  356. package/dist/tooltip/TooltipContent.svelte +2 -5
  357. package/dist/trajectory/Trajectory.svelte +515 -308
  358. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  359. package/dist/trajectory/TrajectoryError.svelte +11 -8
  360. package/dist/trajectory/TrajectoryExportPane.svelte +14 -31
  361. package/dist/trajectory/TrajectoryInfoPane.svelte +85 -97
  362. package/dist/trajectory/extract.js +56 -34
  363. package/dist/trajectory/format-detect.js +11 -9
  364. package/dist/trajectory/frame-reader.d.ts +2 -0
  365. package/dist/trajectory/frame-reader.js +33 -29
  366. package/dist/trajectory/helpers.d.ts +2 -0
  367. package/dist/trajectory/helpers.js +18 -7
  368. package/dist/trajectory/index.d.ts +1 -0
  369. package/dist/trajectory/index.js +3 -0
  370. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  371. package/dist/trajectory/parse/h5-utils.js +109 -0
  372. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  373. package/dist/trajectory/parse/hdf5.js +116 -106
  374. package/dist/trajectory/parse/index.d.ts +2 -3
  375. package/dist/trajectory/parse/index.js +17 -20
  376. package/dist/trajectory/parse/lammps.js +8 -12
  377. package/dist/trajectory/parse/vasp.js +10 -7
  378. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  379. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  380. package/dist/trajectory/parse/vaspout-h5.d.ts +5 -0
  381. package/dist/trajectory/parse/vaspout-h5.js +284 -0
  382. package/dist/trajectory/parse/xyz.js +11 -7
  383. package/dist/trajectory/plotting.d.ts +8 -9
  384. package/dist/trajectory/plotting.js +99 -27
  385. package/dist/utils.d.ts +3 -0
  386. package/dist/utils.js +7 -0
  387. package/dist/xrd/XrdPlot.svelte +47 -61
  388. package/dist/xrd/broadening.js +2 -1
  389. package/dist/xrd/calc-xrd.js +2 -4
  390. package/dist/xrd/parse.d.ts +0 -1
  391. package/dist/xrd/parse.js +56 -73
  392. package/package.json +61 -33
  393. package/dist/api/mp.d.ts +0 -6
  394. package/dist/api/mp.js +0 -22
  395. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { D3InterpolateName } from '../colors'
3
+ import { clamp01 } from '../utils'
3
4
  import {
4
5
  add_alpha,
5
6
  AXIS_COLORS,
@@ -17,7 +18,12 @@
17
18
  import { format_num } from '../labels'
18
19
  import { to_radians, type Point3D, type Vec2, type Vec3 } from '../math'
19
20
  import { ColorBar } from '../plot'
20
- import { centered_rect, pad_rect, rects_overlap, rect_within_rect } from '../plot/core/layout'
21
+ import {
22
+ centered_rect,
23
+ pad_rect,
24
+ rects_overlap,
25
+ rect_within_rect,
26
+ } from '../plot/core/layout'
21
27
  import type { Rect } from '../plot/core/layout'
22
28
  import { create_pulse_animation } from '../effects.svelte'
23
29
  import { DEFAULTS } from '../settings'
@@ -76,9 +82,7 @@
76
82
  ),
77
83
  element_colors = vesta_hex,
78
84
  color_mode = $bindable(DEFAULTS.convex_hull.ternary.color_mode),
79
- color_scale = $bindable(
80
- DEFAULTS.convex_hull.ternary.color_scale as D3InterpolateName,
81
- ),
85
+ color_scale = $bindable(DEFAULTS.convex_hull.ternary.color_scale as D3InterpolateName),
82
86
  info_pane_open = $bindable(DEFAULTS.convex_hull.ternary.info_pane_open),
83
87
  controls_open = $bindable(DEFAULTS.convex_hull.ternary.legend_pane_open),
84
88
  max_hull_dist_show_phases = $bindable(
@@ -88,9 +92,7 @@
88
92
  DEFAULTS.convex_hull.ternary.max_hull_dist_show_labels,
89
93
  ),
90
94
  show_stable_labels = $bindable(DEFAULTS.convex_hull.ternary.show_stable_labels),
91
- show_unstable_labels = $bindable(
92
- DEFAULTS.convex_hull.ternary.show_unstable_labels,
93
- ),
95
+ show_unstable_labels = $bindable(DEFAULTS.convex_hull.ternary.show_unstable_labels),
94
96
  on_file_drop,
95
97
  enable_click_selection = true,
96
98
  enable_structure_preview = true,
@@ -110,9 +112,10 @@
110
112
  children,
111
113
  tooltip,
112
114
  ...rest
113
- }: BaseConvexHullProps<ConvexHullEntry> & Hull3DProps & {
114
- highlight_style?: HighlightStyle
115
- } = $props()
115
+ }: BaseConvexHullProps<ConvexHullEntry> &
116
+ Hull3DProps & {
117
+ highlight_style?: HighlightStyle
118
+ } = $props()
116
119
 
117
120
  const merged_controls = $derived({ ...default_controls, ...controls })
118
121
  const controls_config = $derived(normalize_show_controls(show_controls))
@@ -140,11 +143,11 @@
140
143
  show_unstable: () => show_unstable,
141
144
  entry_category: () => entry_category,
142
145
  hidden_categories: () => hidden_categories,
143
- keep_plot_entry: (entry, max_dist) => (entry.e_above_hull ?? 0) <= max_dist,
144
- set_temperature: (next_temp) => temperature = next_temp,
145
- set_max_hull_dist_show_phases: (value) => max_hull_dist_show_phases = value,
146
- set_stable_entries: (value) => stable_entries = value,
147
- set_unstable_entries: (value) => unstable_entries = value,
146
+ keep_plot_entry: helpers.entry_within_hull_dist,
147
+ set_temperature: (next_temp) => (temperature = next_temp),
148
+ set_max_hull_dist_show_phases: (value) => (max_hull_dist_show_phases = value),
149
+ set_stable_entries: (value) => (stable_entries = value),
150
+ set_unstable_entries: (value) => (unstable_entries = value),
148
151
  })
149
152
  const has_temp_data = $derived(hull_data.has_temp_data)
150
153
  const gas_analysis = $derived(hull_data.gas_analysis)
@@ -159,11 +162,7 @@
159
162
  if (elements.length !== 3) return []
160
163
  try {
161
164
  // Pass precomputed el_refs to avoid recomputing in error diagnostics
162
- const coords = get_ternary_3d_coordinates(
163
- pd_data.entries,
164
- elements,
165
- pd_data.el_refs,
166
- )
165
+ const coords = get_ternary_3d_coordinates(pd_data.entries, elements, pd_data.el_refs)
167
166
  return coords
168
167
  } catch (error) {
169
168
  console.error(`Error computing ternary coordinates:`, error)
@@ -196,8 +195,10 @@
196
195
  if (hull_data.energy_mode !== `on-the-fly`) return coords_entries
197
196
  const pts = coords_entries.map(({ x, y, z }) => ({ x, y, z }))
198
197
  const raw_dists = thermo.compute_e_above_hull_for_points(pts, hull_model)
198
+ // non-finite distance (no covering hull face) -> unknown, handled by compute_hull_stability
199
199
  return coords_entries.map((entry, idx) => ({
200
- ...entry, ...compute_hull_stability(raw_dists[idx], entry.exclude_from_hull),
200
+ ...entry,
201
+ ...compute_hull_stability(raw_dists[idx], entry.exclude_from_hull),
201
202
  }))
202
203
  })
203
204
 
@@ -224,23 +225,11 @@
224
225
  let gizmo_active = $state(false)
225
226
 
226
227
  // Convert elevation/azimuth (degrees) to Three.js camera position + up vector.
227
- function gizmo_camera(
228
- elev_deg: number,
229
- azim_deg: number,
230
- ): { position: Vec3; up: Vec3 } {
228
+ function gizmo_camera(elev_deg: number, azim_deg: number): { position: Vec3; up: Vec3 } {
231
229
  const [elev, azim] = [to_radians(elev_deg), to_radians(azim_deg)]
232
- const [se, ce, sa, ca] = [
233
- Math.sin(elev),
234
- Math.cos(elev),
235
- Math.sin(azim),
236
- Math.cos(azim),
237
- ]
230
+ const [se, ce, sa, ca] = [Math.sin(elev), Math.cos(elev), Math.sin(azim), Math.cos(azim)]
238
231
  return {
239
- position: [
240
- -sa * se * GIZMO_CAM_DIST,
241
- -ca * se * GIZMO_CAM_DIST,
242
- ce * GIZMO_CAM_DIST,
243
- ],
232
+ position: [-sa * se * GIZMO_CAM_DIST, -ca * se * GIZMO_CAM_DIST, ce * GIZMO_CAM_DIST],
244
233
  up: [sa * ce, ca * ce, se],
245
234
  }
246
235
  }
@@ -256,7 +245,7 @@
256
245
  camera.center_x = 0
257
246
  // 0.6 matches the draw_data_points() scale factor that maps data coords to canvas pixels
258
247
  const scale = Math.min(canvas_dims.width, canvas_dims.height) * 0.6 * camera.zoom
259
- camera.center_y = Math.sqrt(3) / 12 * scale * Math.cos(to_radians(elev_deg))
248
+ camera.center_y = (Math.sqrt(3) / 12) * scale * Math.cos(to_radians(elev_deg))
260
249
  }
261
250
 
262
251
  // Sync: ConvexHull3D → Three.js gizmo camera (on main canvas drag)
@@ -276,14 +265,15 @@
276
265
  const cam = gizmo_cam_ref
277
266
  if (!cam) return
278
267
  const { x: cx, y: cy, z: cz } = cam.position
279
- const dist = Math.sqrt(cx * cx + cy * cy + cz * cz)
268
+ const dist = Math.hypot(cx, cy, cz)
280
269
  if (dist < 1e-6) return
281
270
  const elev_rad = Math.acos(Math.max(-1, Math.min(1, cz / dist)))
282
271
  const sin_elev = Math.sin(elev_rad)
283
- const azim_deg = Math.abs(sin_elev) > 1e-6
284
- ? Math.atan2(-cx / (dist * sin_elev), -cy / (dist * sin_elev)) * 180 / Math.PI
285
- : 0
286
- const elev_deg = elev_rad * 180 / Math.PI
272
+ const azim_deg =
273
+ Math.abs(sin_elev) > 1e-6
274
+ ? (Math.atan2(-cx / (dist * sin_elev), -cy / (dist * sin_elev)) * 180) / Math.PI
275
+ : 0
276
+ const elev_deg = (elev_rad * 180) / Math.PI
287
277
  camera.elevation = elev_deg
288
278
  camera.azimuth = azim_deg
289
279
  center_camera(elev_deg)
@@ -291,14 +281,15 @@
291
281
 
292
282
  // Gizmo axis colors (constant — AXIS_COLORS/NEG_AXIS_COLORS never change)
293
283
  const gizmo_axis_options = Object.fromEntries(
294
- [...AXIS_COLORS, ...NEG_AXIS_COLORS].map((
295
- [axis, color, hover_color],
296
- ) => [axis, {
297
- color,
298
- labelColor: `#111`,
299
- opacity: 0.85,
300
- hover: { color: hover_color, labelColor: `#222`, opacity: 1 },
301
- }]),
284
+ [...AXIS_COLORS, ...NEG_AXIS_COLORS].map(([axis, color, hover_color]) => [
285
+ axis,
286
+ {
287
+ color,
288
+ labelColor: `#111`,
289
+ opacity: 0.85,
290
+ hover: { color: hover_color, labelColor: `#222`, opacity: 1 },
291
+ },
292
+ ]),
302
293
  )
303
294
 
304
295
  // Extract placement from gizmo options (not a Threlte Gizmo prop)
@@ -328,12 +319,12 @@
328
319
  canvas: () => canvas,
329
320
  wrapper: () => wrapper,
330
321
  ctx: () => ctx,
331
- set_ctx: (context) => ctx = context,
332
- set_canvas_dims: (dims) => canvas_dims = dims,
322
+ set_ctx: (context) => (ctx = context),
323
+ set_canvas_dims: (dims) => (canvas_dims = dims),
333
324
  visible_entries: () => visible_entries,
334
325
  plot_entries: () => plot_entries,
335
326
  selected_entry: () => selected_entry,
336
- set_selected_entry: (entry) => selected_entry = entry,
327
+ set_selected_entry: (entry) => (selected_entry = entry),
337
328
  fullscreen: () => fullscreen,
338
329
  enable_click_selection: () => enable_click_selection,
339
330
  enable_structure_preview: () => enable_structure_preview,
@@ -342,7 +333,7 @@
342
333
  on_file_drop: () => on_file_drop,
343
334
  entry_category: () => entry_category,
344
335
  zoom: () => camera.zoom,
345
- set_zoom: (zoom) => camera.zoom = zoom,
336
+ set_zoom: (zoom) => (camera.zoom = zoom),
346
337
  project_point: project_3d_point,
347
338
  extract_structure: extract_structure_from_entry,
348
339
  render_frame,
@@ -369,11 +360,11 @@
369
360
  camera.azimuth = 0
370
361
  center_camera(0)
371
362
  },
372
- b: () => color_mode = color_mode === `stability` ? `energy` : `stability`,
373
- s: () => show_stable = !show_stable,
374
- u: () => show_unstable = !show_unstable,
375
- h: () => show_hull_faces = !show_hull_faces,
376
- l: () => show_stable_labels = !show_stable_labels,
363
+ b: () => (color_mode = color_mode === `stability` ? `energy` : `stability`),
364
+ s: () => (show_stable = !show_stable),
365
+ u: () => (show_unstable = !show_unstable),
366
+ h: () => (show_hull_faces = !show_hull_faces),
367
+ l: () => (show_stable_labels = !show_stable_labels),
377
368
  }),
378
369
  })
379
370
  const { render_once } = interactions
@@ -390,9 +381,7 @@
390
381
  let pulse_opacity = $derived(0.3 + 0.4 * pulse.unit)
391
382
 
392
383
  // Merge highlight style with defaults
393
- const merged_highlight_style = $derived(
394
- helpers.merge_highlight_style(highlight_style),
395
- )
384
+ const merged_highlight_style = $derived(helpers.merge_highlight_style(highlight_style))
396
385
 
397
386
  // Helper to check if entry is highlighted
398
387
  const is_highlighted = (entry: ConvexHullEntry): boolean =>
@@ -444,7 +433,7 @@
444
433
 
445
434
  // Cache energy color scale per frame/setting
446
435
  const energy_color_scale = $derived.by(() =>
447
- helpers.get_energy_color_scale(color_mode, color_scale, plot_entries)
436
+ helpers.get_energy_color_scale(color_mode, color_scale, plot_entries),
448
437
  )
449
438
 
450
439
  // Convex hull statistics - compute internally and expose via bindable prop
@@ -460,10 +449,7 @@
460
449
  ): { x: number; y: number; depth: number } {
461
450
  if (!canvas) return { x: 0, y: 0, depth: 0 }
462
451
 
463
- const [elev, azim] = [
464
- (camera.elevation * Math.PI) / 180,
465
- (camera.azimuth * Math.PI) / 180,
466
- ]
452
+ const [elev, azim] = [(camera.elevation * Math.PI) / 180, (camera.azimuth * Math.PI) / 180]
467
453
  const [cos_az, sin_az, cos_el, sin_el] = [
468
454
  Math.cos(azim),
469
455
  Math.sin(azim),
@@ -518,10 +504,7 @@
518
504
  ctx.stroke()
519
505
 
520
506
  // Draw vertical edges from corners (from most negative to 0 formation energy)
521
- const vertical_edges = get_triangle_vertical_edges(
522
- e_form_min,
523
- e_form_max,
524
- )
507
+ const vertical_edges = get_triangle_vertical_edges(e_form_min, e_form_max)
525
508
  ctx.beginPath()
526
509
  for (const [v1, v2] of vertical_edges) {
527
510
  const proj1 = project_3d_point(v1.x, v1.y, v1.z)
@@ -562,15 +545,11 @@
562
545
  ctx.textAlign = `center`
563
546
  ctx.textBaseline = `middle`
564
547
 
565
- for (
566
- let idx = 0;
567
- idx < TRIANGLE_VERTICES.length && idx < elements.length;
568
- idx++
569
- ) {
548
+ for (let idx = 0; idx < TRIANGLE_VERTICES.length && idx < elements.length; idx++) {
570
549
  const [x, y] = TRIANGLE_VERTICES[idx]
571
550
  const dx = x - centroid.x
572
551
  const dy = y - centroid.y
573
- const length = Math.sqrt(dx * dx + dy * dy)
552
+ const length = Math.hypot(dx, dy)
574
553
  const distance = 0.05
575
554
 
576
555
  const label_pos = {
@@ -596,14 +575,10 @@
596
575
 
597
576
  // Find the vertex that projects to the leftmost x-position (changes with rotation)
598
577
  const projected_vertices = TRIANGLE_VERTICES.map(([vx, vy]) =>
599
- project_3d_point(vx, vy, e_mid)
578
+ project_3d_point(vx, vy, e_mid),
600
579
  )
601
580
  const leftmost_idx = projected_vertices.reduce(
602
- (
603
- min_idx,
604
- proj,
605
- idx,
606
- ) => (proj.x < projected_vertices[min_idx].x ? idx : min_idx),
581
+ (min_idx, proj, idx) => (proj.x < projected_vertices[min_idx].x ? idx : min_idx),
607
582
  0,
608
583
  )
609
584
  const [axis_x, axis_y] = TRIANGLE_VERTICES[leftmost_idx]
@@ -667,10 +642,8 @@
667
642
  let energy_face_scale: ((val: number) => string) | null = null
668
643
  let min_face_e_form = 0
669
644
  if (hull_face_color_mode === `formation_energy`) {
670
- const all_e_form = hull_faces.flatMap((tri) =>
671
- tri.vertices.map((vertex) => vertex.z)
672
- )
673
- min_face_e_form = Math.min(...all_e_form)
645
+ const all_e_form = hull_faces.flatMap((tri) => tri.vertices.map((vertex) => vertex.z))
646
+ min_face_e_form = helpers.array_min(all_e_form)
674
647
  energy_face_scale = helpers.get_energy_color_scale(
675
648
  `energy`,
676
649
  color_scale,
@@ -681,10 +654,7 @@
681
654
  }
682
655
 
683
656
  // Helper to get face color based on mode
684
- const get_face_color = (
685
- tri: typeof hull_faces[0],
686
- tri_idx: number,
687
- ): string => {
657
+ const get_face_color = (tri: (typeof hull_faces)[0], tri_idx: number): string => {
688
658
  if (hull_face_color_mode === `uniform`) {
689
659
  return hull_face_color
690
660
  }
@@ -711,11 +681,7 @@
711
681
 
712
682
  // Sort faces by depth for proper rendering
713
683
  const faces_with_depth = hull_faces.map((tri, tri_idx) => {
714
- const centroid_proj = project_3d_point(
715
- tri.centroid.x,
716
- tri.centroid.y,
717
- tri.centroid.z,
718
- )
684
+ const centroid_proj = project_3d_point(tri.centroid.x, tri.centroid.y, tri.centroid.z)
719
685
  return { tri, tri_idx, depth: centroid_proj.depth }
720
686
  })
721
687
 
@@ -740,16 +706,21 @@
740
706
  const a3 = norm_alpha?.(p3.z) ?? 0
741
707
 
742
708
  // Solve a*x + b*y + c = alpha at the three projected vertices
743
- const x1 = proj1.x, y1 = proj1.y
744
- const x2 = proj2.x, y2 = proj2.y
745
- const x3 = proj3.x, y3 = proj3.y
709
+ const x1 = proj1.x,
710
+ y1 = proj1.y
711
+ const x2 = proj2.x,
712
+ y2 = proj2.y
713
+ const x3 = proj3.x,
714
+ y3 = proj3.y
746
715
  const det = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)
747
- let coef_a = 0, coef_b = 0, coef_c = (a1 + a2 + a3) / 3
716
+ let coef_a = 0,
717
+ coef_b = 0,
718
+ coef_c = (a1 + a2 + a3) / 3
748
719
  if (Math.abs(det) > 1e-9) {
749
720
  coef_a = (a1 * (y2 - y3) + a2 * (y3 - y1) + a3 * (y1 - y2)) / det
750
721
  coef_b = (a1 * (x3 - x2) + a2 * (x1 - x3) + a3 * (x2 - x1)) / det
751
- coef_c = (a1 * (x2 * y3 - x3 * y2) + a2 * (x3 * y1 - x1 * y3) +
752
- a3 * (x1 * y2 - x2 * y1)) /
722
+ coef_c =
723
+ (a1 * (x2 * y3 - x3 * y2) + a2 * (x3 * y1 - x1 * y3) + a3 * (x1 * y2 - x2 * y1)) /
753
724
  det
754
725
  }
755
726
 
@@ -826,7 +797,7 @@
826
797
  const denom = Math.max(1e-6, max_fe - min_fe)
827
798
  return (value: number) => {
828
799
  // alpha 0 at 0 eV, goes to hull_face_opacity at most negative energy
829
- const energy_fraction = Math.max(0, Math.min(1, (value - min_fe) / denom))
800
+ const energy_fraction = clamp01((value - min_fe) / denom)
830
801
  const alpha = (1 - energy_fraction) * hull_face_opacity
831
802
  return add_alpha(hull_face_color, alpha)
832
803
  }
@@ -940,18 +911,21 @@
940
911
  ctx.textBaseline = `top`
941
912
  const label_height = hull_label_font_size + 2
942
913
 
943
- const label_entries = helpers.get_composition_label_entries(
944
- visible_entries.filter((entry) => {
945
- if (entry.is_element) return false
946
- const is_stable_point = helpers.entry_is_stable(entry)
947
- return (is_stable_point && show_stable_labels) ||
948
- (!is_stable_point && show_unstable_labels &&
949
- (entry.e_above_hull ?? 0) <= max_hull_dist_show_labels)
950
- }),
951
- )
914
+ const label_entries = helpers
915
+ .get_composition_label_entries(
916
+ visible_entries.filter((entry) => {
917
+ if (entry.is_element) return false
918
+ const is_stable_point = helpers.entry_is_stable(entry)
919
+ return (
920
+ (is_stable_point && show_stable_labels) ||
921
+ (!is_stable_point &&
922
+ show_unstable_labels &&
923
+ (entry.e_above_hull ?? 0) <= max_hull_dist_show_labels)
924
+ )
925
+ }),
926
+ )
952
927
  .sort((entry_1, entry_2) => {
953
- const energy_diff = label_priority_energy(entry_1) -
954
- label_priority_energy(entry_2)
928
+ const energy_diff = label_priority_energy(entry_1) - label_priority_energy(entry_2)
955
929
  if (energy_diff !== 0) return energy_diff
956
930
  return (entry_1.e_above_hull ?? 0) - (entry_2.e_above_hull ?? 0)
957
931
  })
@@ -971,17 +945,13 @@
971
945
  const is_stable_point = helpers.entry_is_stable(entry)
972
946
  const point_size = (entry.size || (is_stable_point ? 6 : 4)) * canvas_dims.scale
973
947
  const text_width = measure_formula_segments(ctx, formula_segments)
974
- const placements = get_label_placements(
975
- projected,
976
- point_size,
977
- text_width,
978
- label_height,
979
- )
980
- const placement = placements.find((candidate) =>
981
- rect_within_rect(candidate.rect, canvas_rect) &&
982
- !occupied_rects.some((occupied_rect) =>
983
- rects_overlap(candidate.rect, occupied_rect)
984
- )
948
+ const placements = get_label_placements(projected, point_size, text_width, label_height)
949
+ const placement = placements.find(
950
+ (candidate) =>
951
+ rect_within_rect(candidate.rect, canvas_rect) &&
952
+ !occupied_rects.some((occupied_rect) =>
953
+ rects_overlap(candidate.rect, occupied_rect),
954
+ ),
985
955
  )
986
956
  if (!placement) continue
987
957
 
@@ -1029,7 +999,7 @@
1029
999
 
1030
1000
  // Reactive dark mode detection for canvas text color
1031
1001
  let dark_mode = $state(is_dark_mode())
1032
- $effect(() => watch_dark_mode((dark) => dark_mode = dark))
1002
+ $effect(() => watch_dark_mode((dark) => (dark_mode = dark)))
1033
1003
  const text_color = $derived(helpers.get_canvas_text_color(dark_mode))
1034
1004
 
1035
1005
  // Performance: Cache canvas dimensions and formation energy range
@@ -1060,7 +1030,7 @@
1060
1030
 
1061
1031
  <div
1062
1032
  {...rest}
1063
- class="convex-hull-3d {rest.class ?? ``}"
1033
+ class={[`convex-hull-3d`, rest.class]}
1064
1034
  class:dragover={interactions.drag_over}
1065
1035
  style={`${style}; ${rest.style ?? ``}`}
1066
1036
  data-has-selection={selected_entry !== null}
@@ -1073,11 +1043,11 @@
1073
1043
  aria-label="Ternary convex hull visualization"
1074
1044
  >
1075
1045
  {@render children?.({
1076
- stable_entries,
1077
- unstable_entries,
1078
- highlighted_entries,
1079
- selected_entry,
1080
- })}
1046
+ stable_entries,
1047
+ unstable_entries,
1048
+ highlighted_entries,
1049
+ selected_entry,
1050
+ })}
1081
1051
  <h3 style="position: absolute; left: 1em; top: 1ex; margin: 0; font-weight: 500">
1082
1052
  {@html sanitize_html(merged_controls.title || phase_stats?.chemical_system || ``)}
1083
1053
  </h3>
@@ -1109,9 +1079,7 @@
1109
1079
 
1110
1080
  <!-- Formation Energy Faces Color Bar (bottom-right corner) -->
1111
1081
  <!-- Only show for uniform/formation_energy modes where face color relates to E_form -->
1112
- {#if plot_entries.length > 0 && show_hull_faces &&
1113
- (hull_face_color_mode === `uniform` ||
1114
- hull_face_color_mode === `formation_energy`)}
1082
+ {#if plot_entries.length > 0 && show_hull_faces && (hull_face_color_mode === `uniform` || hull_face_color_mode === `formation_energy`)}
1115
1083
  <ColorBar
1116
1084
  title="Formation energy (eV/atom)"
1117
1085
  color_scale_fn={e_form_color_scale_fn}
@@ -1169,7 +1137,7 @@
1169
1137
  <div class="gizmo-wrapper {controls_config.class}" data-placement={gizmo_placement}>
1170
1138
  <Canvas
1171
1139
  createRenderer={(cvs: HTMLCanvasElement) =>
1172
- new WebGLRenderer({ canvas: cvs, alpha: true, antialias: true })}
1140
+ new WebGLRenderer({ canvas: cvs, alpha: true, antialias: true })}
1173
1141
  >
1174
1142
  <T.PerspectiveCamera
1175
1143
  makeDefault
@@ -1199,11 +1167,13 @@
1199
1167
  </div>
1200
1168
  {/if}
1201
1169
 
1202
- {#if (has_temp_data && temperature !== undefined) ||
1203
- (gas_analysis.has_gas_dependent_elements && merged_gas_config)}
1170
+ {#if (has_temp_data && temperature !== undefined) || (gas_analysis.has_gas_dependent_elements && merged_gas_config)}
1204
1171
  <div class="right-controls">
1205
1172
  {#if has_temp_data && temperature !== undefined}
1206
- <TemperatureSlider available_temperatures={hull_data.available_temperatures} bind:temperature />
1173
+ <TemperatureSlider
1174
+ available_temperatures={hull_data.available_temperatures}
1175
+ bind:temperature
1176
+ />
1207
1177
  {/if}
1208
1178
  {#if gas_analysis.has_gas_dependent_elements && merged_gas_config}
1209
1179
  <GasPressureControls
@@ -1214,7 +1184,6 @@
1214
1184
  {/if}
1215
1185
  </div>
1216
1186
  {/if}
1217
-
1218
1187
  </div>
1219
1188
 
1220
1189
  <style>
@@ -3,6 +3,6 @@ import type { ConvexHullEntry, HighlightStyle } from './types';
3
3
  type $$ComponentProps = BaseConvexHullProps<ConvexHullEntry> & Hull3DProps & {
4
4
  highlight_style?: HighlightStyle;
5
5
  };
6
- declare const ConvexHull3D: import("svelte").Component<$$ComponentProps, {}, "temperature" | "fullscreen" | "wrapper" | "controls_open" | "color_scale" | "info_pane_open" | "show_hull_faces" | "hull_face_opacity" | "hull_face_color_mode" | "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">;
6
+ declare const ConvexHull3D: import("svelte").Component<$$ComponentProps, {}, "fullscreen" | "wrapper" | "controls_open" | "color_scale" | "info_pane_open" | "temperature" | "show_hull_faces" | "hull_face_opacity" | "hull_face_color_mode" | "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">;
7
7
  type ConvexHull3D = ReturnType<typeof ConvexHull3D>;
8
8
  export default ConvexHull3D;