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.
- package/dist/EmptyState.svelte +10 -4
- package/dist/FilePicker.svelte +48 -60
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/api/optimade.js +10 -7
- package/dist/app.css +68 -0
- package/dist/brillouin/BrillouinZone.svelte +90 -91
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
- package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
- package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
- package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/compute.js +10 -16
- package/dist/brillouin/geometry.js +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +13 -14
- package/dist/chempot-diagram/color.d.ts +21 -1
- package/dist/chempot-diagram/color.js +70 -1
- package/dist/chempot-diagram/compute.d.ts +7 -0
- package/dist/chempot-diagram/compute.js +85 -26
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/chempot-diagram/export.js +1 -6
- package/dist/chempot-diagram/temperature.js +9 -10
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +30 -26
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +10 -19
- package/dist/composition/Formula.svelte +20 -27
- package/dist/composition/FormulaFilter.svelte +115 -184
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +7 -9
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/parse.d.ts +2 -2
- package/dist/composition/parse.js +61 -115
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +17 -26
- package/dist/convex-hull/ConvexHull.svelte +12 -15
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +93 -94
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +127 -186
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +131 -180
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
- package/dist/convex-hull/ConvexHullControls.svelte +46 -48
- package/dist/convex-hull/ConvexHullStats.svelte +193 -195
- package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
- package/dist/convex-hull/GasPressureControls.svelte +5 -12
- package/dist/convex-hull/StructurePopup.svelte +18 -22
- package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
- package/dist/convex-hull/TemperatureSlider.svelte +4 -10
- package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
- package/dist/convex-hull/gas-thermodynamics.js +21 -53
- package/dist/convex-hull/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +37 -43
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +37 -44
- package/dist/coordination/CoordinationBarPlot.svelte +49 -53
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/coordination/calc-coordination.d.ts +1 -1
- package/dist/coordination/calc-coordination.js +28 -25
- package/dist/element/BohrAtom.svelte +5 -9
- package/dist/element/ElementHeading.svelte +4 -1
- package/dist/element/ElementPhoto.svelte +11 -9
- package/dist/element/ElementStats.svelte +12 -10
- package/dist/element/ElementTile.svelte +44 -67
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +3 -2
- package/dist/element/data.js +5 -1
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +2 -5
- package/dist/element/index.js +4 -19
- package/dist/feedback/DragOverlay.svelte +5 -5
- package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
- package/dist/feedback/StatusMessage.svelte +7 -4
- package/dist/fermi-surface/FermiSlice.svelte +21 -18
- package/dist/fermi-surface/FermiSurface.svelte +35 -44
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +25 -58
- package/dist/fermi-surface/parse.js +54 -88
- package/dist/file-viewer/JsonBrowser.svelte +1043 -0
- package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
- package/dist/file-viewer/PlotPanel.svelte +350 -0
- package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
- package/dist/file-viewer/detect.d.ts +11 -0
- package/dist/file-viewer/detect.js +381 -0
- package/dist/file-viewer/eligibility.d.ts +4 -0
- package/dist/file-viewer/eligibility.js +53 -0
- package/dist/file-viewer/host-protocol.d.ts +50 -0
- package/dist/file-viewer/host-transfer.d.ts +25 -0
- package/dist/file-viewer/host-transfer.js +42 -0
- package/dist/file-viewer/index.d.ts +5 -0
- package/dist/file-viewer/index.js +5 -0
- package/dist/file-viewer/main.d.ts +44 -0
- package/dist/file-viewer/main.js +535 -0
- package/dist/file-viewer/parse.d.ts +9 -0
- package/dist/file-viewer/parse.js +170 -0
- package/dist/file-viewer/plot-utils.d.ts +24 -0
- package/dist/file-viewer/plot-utils.js +191 -0
- package/dist/file-viewer/types.d.ts +4 -0
- package/dist/file-viewer/types.js +5 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/index.d.ts +5 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/io/ExportPane.svelte +11 -7
- package/dist/io/decompress.d.ts +4 -1
- package/dist/io/decompress.js +24 -36
- package/dist/io/export.d.ts +11 -4
- package/dist/io/export.js +75 -19
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- package/dist/io/file-drop.js +60 -35
- package/dist/io/index.d.ts +0 -1
- package/dist/io/index.js +2 -9
- package/dist/io/is-binary.d.ts +9 -0
- package/dist/io/is-binary.js +45 -1
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +40 -40
- package/dist/isosurface/Isosurface.svelte +700 -215
- package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
- package/dist/isosurface/IsosurfaceControls.svelte +590 -116
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
- package/dist/isosurface/VolumeSlice.svelte +224 -0
- package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
- package/dist/isosurface/coloring.d.ts +20 -0
- package/dist/isosurface/coloring.js +118 -0
- package/dist/isosurface/geometry-worker-types.d.ts +38 -0
- package/dist/isosurface/geometry.worker.d.ts +1 -0
- package/dist/isosurface/geometry.worker.js +59 -0
- package/dist/isosurface/grid.d.ts +10 -0
- package/dist/isosurface/grid.js +31 -0
- package/dist/isosurface/index.d.ts +4 -0
- package/dist/isosurface/index.js +4 -0
- package/dist/isosurface/parse-vaspwave.d.ts +3 -0
- package/dist/isosurface/parse-vaspwave.js +138 -0
- package/dist/isosurface/parse.js +6 -6
- package/dist/isosurface/profile.d.ts +12 -0
- package/dist/isosurface/profile.js +19 -0
- package/dist/isosurface/sampling.d.ts +34 -0
- package/dist/isosurface/sampling.js +408 -0
- package/dist/isosurface/slice-rendering.d.ts +13 -0
- package/dist/isosurface/slice-rendering.js +79 -0
- package/dist/isosurface/slice.d.ts +22 -2
- package/dist/isosurface/slice.js +200 -116
- package/dist/isosurface/types.d.ts +24 -1
- package/dist/isosurface/types.js +120 -8
- package/dist/json-path.d.ts +4 -0
- package/dist/json-path.js +89 -0
- package/dist/labels.d.ts +6 -2
- package/dist/labels.js +44 -14
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +8 -21
- package/dist/layout/InfoTag.svelte +1 -3
- package/dist/layout/NumberRangeInput.svelte +46 -0
- package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
- package/dist/layout/PropertyFilter.svelte +2 -6
- package/dist/layout/SettingsSection.svelte +57 -62
- package/dist/layout/SettingsSection.svelte.d.ts +6 -7
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +16 -11
- package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
- package/dist/layout/fullscreen.js +3 -5
- package/dist/layout/fullscreen.svelte.js +1 -2
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +22 -59
- package/dist/layout/json-tree/JsonTree.svelte +101 -172
- package/dist/layout/json-tree/JsonValue.svelte +9 -32
- package/dist/layout/json-tree/utils.d.ts +0 -3
- package/dist/layout/json-tree/utils.js +50 -188
- package/dist/marching-cubes.d.ts +8 -1
- package/dist/marching-cubes.js +115 -48
- package/dist/math.d.ts +5 -2
- package/dist/math.js +48 -38
- package/dist/overlays/ContextMenu.svelte +19 -34
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +110 -74
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
- package/dist/overlays/GlassChip.svelte +32 -0
- package/dist/overlays/GlassChip.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +11 -23
- package/dist/overlays/index.d.ts +7 -0
- package/dist/overlays/index.js +26 -0
- package/dist/overlays/portal.d.ts +2 -0
- package/dist/overlays/portal.js +14 -0
- package/dist/periodic-table/PeriodicTable.svelte +113 -145
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
- package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
- package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
- package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
- package/dist/phase-diagram/build-diagram.js +4 -9
- package/dist/phase-diagram/diagram-input.d.ts +1 -2
- package/dist/phase-diagram/parse.js +15 -15
- package/dist/phase-diagram/svg-to-diagram.js +28 -27
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +461 -426
- package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
- package/dist/plot/bar/BarPlotControls.svelte +1 -3
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
- package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +322 -226
- package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
- package/dist/plot/box/Violin.svelte.d.ts +1 -0
- package/dist/plot/box/box-plot.js +1 -1
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +2 -2
- package/dist/plot/core/axis-utils.d.ts +12 -7
- package/dist/plot/core/axis-utils.js +48 -48
- package/dist/plot/core/components/AxisLabel.svelte +82 -20
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
- package/dist/plot/core/components/ColorBar.svelte +101 -106
- package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
- package/dist/plot/core/components/FillArea.svelte +10 -17
- package/dist/plot/core/components/HierarchyControls.svelte +249 -0
- package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/core/components/Line.svelte +18 -9
- package/dist/plot/core/components/Line.svelte.d.ts +2 -0
- package/dist/plot/core/components/PlotAxis.svelte +40 -17
- package/dist/plot/core/components/PlotControls.svelte +65 -41
- package/dist/plot/core/components/PlotLegend.svelte +31 -35
- package/dist/plot/core/components/PlotMarginals.svelte +616 -0
- package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotTooltip.svelte +1 -1
- package/dist/plot/core/components/PortalSelect.svelte +4 -8
- package/dist/plot/core/components/ReferenceLine.svelte +27 -24
- package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
- package/dist/plot/core/components/ReferencePlane.svelte +7 -8
- package/dist/plot/core/components/ZeroLines.svelte +4 -8
- package/dist/plot/core/components/ZoomRect.svelte +1 -2
- package/dist/plot/core/components/index.d.ts +1 -0
- package/dist/plot/core/components/index.js +1 -0
- package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
- package/dist/plot/core/data-cleaning-signal.js +467 -0
- package/dist/plot/core/data-cleaning.d.ts +2 -42
- package/dist/plot/core/data-cleaning.js +27 -474
- package/dist/plot/core/data-transform.d.ts +1 -2
- package/dist/plot/core/data-transform.js +9 -15
- package/dist/plot/core/fill-utils.d.ts +3 -1
- package/dist/plot/core/fill-utils.js +28 -6
- package/dist/plot/core/index.d.ts +1 -0
- package/dist/plot/core/index.js +1 -0
- package/dist/plot/core/interactions.js +0 -2
- package/dist/plot/core/layout.d.ts +15 -6
- package/dist/plot/core/layout.js +57 -38
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
- package/dist/plot/core/pan-zoom.svelte.js +34 -17
- package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -21
- package/dist/plot/core/reference-line.js +1 -1
- package/dist/plot/core/scales.d.ts +23 -0
- package/dist/plot/core/scales.js +39 -13
- package/dist/plot/core/svg.js +0 -1
- package/dist/plot/core/types/fills.d.ts +101 -0
- package/dist/plot/core/types/fills.js +15 -0
- package/dist/plot/core/types/plot-3d.d.ts +87 -0
- package/dist/plot/core/types/plot-3d.js +4 -0
- package/dist/plot/core/types/reference-lines.d.ts +140 -0
- package/dist/plot/core/types/reference-lines.js +9 -0
- package/dist/plot/core/types.d.ts +29 -324
- package/dist/plot/core/types.js +23 -20
- package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
- package/dist/plot/core/utils/hierarchy-chart.js +191 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +100 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +314 -340
- package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
- package/dist/plot/histogram/HistogramControls.svelte +30 -28
- package/dist/plot/histogram/histogram.d.ts +31 -0
- package/dist/plot/histogram/histogram.js +70 -0
- package/dist/plot/histogram/index.d.ts +1 -0
- package/dist/plot/histogram/index.js +1 -0
- package/dist/plot/index.d.ts +1 -0
- package/dist/plot/index.js +1 -0
- package/dist/plot/sankey/Sankey.svelte +78 -69
- package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
- package/dist/plot/sankey/SankeyControls.svelte +22 -16
- package/dist/plot/sankey/sankey.js +13 -9
- package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +517 -410
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/ScatterPoint.svelte +16 -9
- package/dist/plot/scatter/adaptive-density.d.ts +1 -1
- package/dist/plot/scatter/adaptive-density.js +36 -20
- package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
- package/dist/plot/scatter/binned-scatter-types.js +6 -1
- package/dist/plot/scatter/scatter-data.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.js +8 -7
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
- package/dist/plot/sunburst/Sunburst.svelte +269 -347
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
- package/dist/plot/sunburst/index.d.ts +1 -1
- package/dist/plot/sunburst/index.js +2 -1
- package/dist/plot/sunburst/render.d.ts +2 -2
- package/dist/plot/sunburst/render.js +47 -22
- package/dist/plot/sunburst/sunburst.d.ts +5 -1
- package/dist/plot/sunburst/sunburst.js +10 -3
- package/dist/plot/treemap/Treemap.svelte +1022 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
- package/dist/plot/treemap/index.d.ts +4 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/labels.d.ts +38 -0
- package/dist/plot/treemap/labels.js +80 -0
- package/dist/plot/treemap/treemap.d.ts +28 -0
- package/dist/plot/treemap/treemap.js +102 -0
- package/dist/rdf/RdfPlot.svelte +37 -59
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +63 -52
- package/dist/rdf/index.d.ts +0 -1
- package/dist/sanitize.js +85 -27
- package/dist/scene/SceneCamera.svelte +1 -1
- package/dist/scene/SceneCamera.svelte.d.ts +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/scene/index.d.ts +1 -2
- package/dist/scene/index.js +1 -1
- package/dist/scene/{props.js → props.svelte.js} +15 -1
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +229 -525
- package/dist/spectral/Bands.svelte +207 -221
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -42
- package/dist/spectral/Dos.svelte +92 -93
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +65 -140
- package/dist/state.svelte.js +5 -18
- package/dist/structure/Arrow.svelte +5 -18
- package/dist/structure/ArrowInstances.svelte +160 -0
- package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
- package/dist/structure/AtomLegend.svelte +120 -85
- package/dist/structure/AtomLegend.svelte.d.ts +2 -3
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +45 -35
- package/dist/structure/Cylinder.svelte +24 -40
- package/dist/structure/InstancedAtoms.svelte +114 -0
- package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
- package/dist/structure/Lattice.svelte +85 -149
- package/dist/structure/SiteLabels.svelte +122 -0
- package/dist/structure/SiteLabels.svelte.d.ts +18 -0
- package/dist/structure/Structure.svelte +636 -504
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +637 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +165 -425
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +128 -133
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +535 -578
- package/dist/structure/StructureScene.svelte.d.ts +6 -2
- package/dist/structure/StructureViewport.svelte +451 -0
- package/dist/structure/StructureViewport.svelte.d.ts +65 -0
- package/dist/structure/atom-label-placement.d.ts +16 -12
- package/dist/structure/atom-label-placement.js +70 -37
- package/dist/structure/atom-properties.d.ts +2 -0
- package/dist/structure/atom-properties.js +105 -38
- package/dist/structure/bond-order-perception.js +3 -8
- package/dist/structure/bonding.d.ts +9 -3
- package/dist/structure/bonding.js +95 -46
- package/dist/structure/edit-history.d.ts +6 -0
- package/dist/structure/edit-history.js +27 -0
- package/dist/structure/export.d.ts +1 -0
- package/dist/structure/export.js +89 -105
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +20 -0
- package/dist/structure/geometry.d.ts +9 -0
- package/dist/structure/geometry.js +27 -0
- package/dist/structure/index.d.ts +16 -1
- package/dist/structure/index.js +15 -10
- package/dist/structure/measure.d.ts +1 -1
- package/dist/structure/measure.js +6 -12
- package/dist/structure/parse.d.ts +2 -1
- package/dist/structure/parse.js +272 -313
- package/dist/structure/partial-occupancy.js +10 -5
- package/dist/structure/pbc.js +85 -107
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +7 -21
- package/dist/structure/prop-groups.d.ts +85 -0
- package/dist/structure/prop-groups.js +18 -0
- package/dist/structure/supercell.d.ts +1 -2
- package/dist/structure/supercell.js +7 -13
- package/dist/symmetry/SymmetryElements.svelte +11 -15
- package/dist/symmetry/SymmetryStats.svelte +55 -71
- package/dist/symmetry/WyckoffTable.svelte +10 -28
- package/dist/symmetry/cell-transform.js +6 -14
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +13 -10
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1142 -447
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +168 -53
- package/dist/table/ToggleMenu.svelte.d.ts +1 -1
- package/dist/table/index.d.ts +21 -6
- package/dist/table/index.js +34 -21
- package/dist/theme/ThemeControl.svelte +16 -8
- package/dist/theme/embedded.d.ts +18 -0
- package/dist/theme/embedded.js +206 -0
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +5 -12
- package/dist/theme/themes.mjs +44 -66
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +3 -6
- package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
- package/dist/tooltip/index.d.ts +8 -1
- package/dist/trajectory/Trajectory.svelte +613 -386
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +12 -74
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
- package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
- package/dist/trajectory/extract.js +61 -49
- package/dist/trajectory/format-detect.d.ts +2 -0
- package/dist/trajectory/format-detect.js +17 -13
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +35 -32
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +34 -56
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +5 -8
- package/dist/trajectory/parse/ase.js +1 -1
- package/dist/trajectory/parse/h5-utils.d.ts +13 -0
- package/dist/trajectory/parse/h5-utils.js +109 -0
- package/dist/trajectory/parse/hdf5.d.ts +1 -1
- package/dist/trajectory/parse/hdf5.js +116 -106
- package/dist/trajectory/parse/index.d.ts +6 -6
- package/dist/trajectory/parse/index.js +25 -33
- package/dist/trajectory/parse/lammps.js +8 -12
- package/dist/trajectory/parse/vasp.js +10 -7
- package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
- package/dist/trajectory/parse/vaspout-electronic.js +207 -0
- package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
- package/dist/trajectory/parse/vaspout-h5.js +281 -0
- package/dist/trajectory/parse/xyz.js +59 -9
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +113 -64
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +79 -118
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +24 -62
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +69 -95
- package/package.json +94 -34
- package/readme.md +6 -5
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
- package/dist/scene/types.d.ts +0 -26
- package/dist/tooltip/types.d.ts +0 -8
- package/dist/trajectory/constants.d.ts +0 -6
- package/dist/trajectory/constants.js +0 -11
- /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
- /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
|
@@ -59,8 +59,7 @@
|
|
|
59
59
|
|
|
60
60
|
// Convert pressure to log scale slider position (0-100)
|
|
61
61
|
const pressure_to_slider = (P: number): number =>
|
|
62
|
-
((Math.max(LOG_P_MIN, Math.min(LOG_P_MAX, Math.log10(P))) - LOG_P_MIN) /
|
|
63
|
-
LOG_P_RANGE) * 100
|
|
62
|
+
((Math.max(LOG_P_MIN, Math.min(LOG_P_MAX, Math.log10(P))) - LOG_P_MIN) / LOG_P_RANGE) * 100
|
|
64
63
|
|
|
65
64
|
// Convert slider position (0-100) to pressure
|
|
66
65
|
const slider_to_pressure = (value: number): number =>
|
|
@@ -68,7 +67,7 @@
|
|
|
68
67
|
|
|
69
68
|
// Format gas name for display (subscript numbers)
|
|
70
69
|
const format_gas_name = (gas: GasSpecies): string =>
|
|
71
|
-
gas.replaceAll(/(
|
|
70
|
+
gas.replaceAll(/(?<digits>\d+)/g, `<sub>$1</sub>`)
|
|
72
71
|
|
|
73
72
|
// Format pressure as plain text (no HTML) for the number input
|
|
74
73
|
function format_pressure(P: number): string {
|
|
@@ -102,24 +101,18 @@
|
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
function set_pressure_direct(gas: GasSpecies, value: number): void {
|
|
105
|
-
const clamped = Math.max(
|
|
106
|
-
10 ** LOG_P_MIN,
|
|
107
|
-
Math.min(10 ** LOG_P_MAX, value),
|
|
108
|
-
)
|
|
104
|
+
const clamped = Math.max(10 ** LOG_P_MIN, Math.min(10 ** LOG_P_MAX, value))
|
|
109
105
|
pressures = { ...pressures, [gas]: clamped }
|
|
110
106
|
}
|
|
111
107
|
</script>
|
|
112
108
|
|
|
113
109
|
{#if enabled_gases.length > 0}
|
|
114
|
-
<div {...rest} class=
|
|
110
|
+
<div {...rest} class={[`pressure-controls`, position, rest.class]}>
|
|
115
111
|
{#each enabled_gases as gas (gas)}
|
|
116
112
|
{@const P = get_pressure(gas)}
|
|
117
113
|
{@const mu = get_mu(gas)}
|
|
118
114
|
{@const tooltip_content = `${gas} partial pressure for μ(T,P)\nμ = ${format_chemical_potential(mu, 3)}`}
|
|
119
|
-
<div
|
|
120
|
-
class="pressure-slider"
|
|
121
|
-
{@attach tooltip({ content: tooltip_content })}
|
|
122
|
-
>
|
|
115
|
+
<div class="pressure-slider" {@attach tooltip({ content: tooltip_content })}>
|
|
123
116
|
<label class="pressure-label">
|
|
124
117
|
<input
|
|
125
118
|
type="text"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { get_electro_neg_formula } from '../composition'
|
|
4
4
|
import Icon from '../Icon.svelte'
|
|
5
5
|
import { format_num } from '../labels'
|
|
6
|
-
import { DragControlTab } from '../overlays'
|
|
6
|
+
import { DragControlTab, GlassChip } from '../overlays'
|
|
7
7
|
import { sanitize_formula } from '../sanitize'
|
|
8
8
|
import { Structure } from '../structure'
|
|
9
9
|
import type { StructurePopupContext, StructurePopupStats } from './types'
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
width = 500,
|
|
18
18
|
height = 400,
|
|
19
19
|
onclose,
|
|
20
|
+
close_on_outside = true,
|
|
21
|
+
show_drag_handle = true,
|
|
20
22
|
stats,
|
|
21
23
|
top_left,
|
|
22
24
|
children,
|
|
@@ -28,14 +30,17 @@
|
|
|
28
30
|
width?: number
|
|
29
31
|
height?: number
|
|
30
32
|
onclose?: () => void
|
|
33
|
+
close_on_outside?: boolean
|
|
34
|
+
show_drag_handle?: boolean
|
|
31
35
|
stats?: StructurePopupStats
|
|
32
36
|
top_left?: Snippet<[StructurePopupContext]>
|
|
33
37
|
children?: Snippet<[StructurePopupContext]>
|
|
34
38
|
popup_div?: HTMLDivElement
|
|
35
39
|
} = $props()
|
|
36
40
|
|
|
37
|
-
const formula_html = $derived
|
|
38
|
-
sanitize_formula(get_electro_neg_formula(stats?.formula ?? structure, true))
|
|
41
|
+
const formula_html = $derived(
|
|
42
|
+
sanitize_formula(get_electro_neg_formula(stats?.formula ?? structure, true)),
|
|
43
|
+
)
|
|
39
44
|
const context = $derived({ structure, stats, formula_html })
|
|
40
45
|
</script>
|
|
41
46
|
|
|
@@ -48,6 +53,7 @@
|
|
|
48
53
|
<svelte:window
|
|
49
54
|
onkeydown={(event) => event.key === `Escape` && onclose?.()}
|
|
50
55
|
onmousedown={(event) => {
|
|
56
|
+
if (!close_on_outside) return
|
|
51
57
|
if (!popup_div || !(event.target instanceof Node)) return
|
|
52
58
|
if (!popup_div.contains(event.target)) onclose?.()
|
|
53
59
|
}}
|
|
@@ -58,34 +64,36 @@
|
|
|
58
64
|
handle_selector: `.drag-handle`,
|
|
59
65
|
})}
|
|
60
66
|
{...rest}
|
|
61
|
-
class=
|
|
67
|
+
class={[`structure-popup`, place_right ? `right` : `left`, rest.class]}
|
|
62
68
|
role="dialog"
|
|
63
69
|
aria-modal="true"
|
|
64
70
|
tabindex="-1"
|
|
65
71
|
bind:this={popup_div}
|
|
66
72
|
>
|
|
67
|
-
|
|
73
|
+
{#if show_drag_handle}
|
|
74
|
+
<DragControlTab />
|
|
75
|
+
{/if}
|
|
68
76
|
<div class="structure-popup-content">
|
|
69
77
|
{#if top_left || stats}
|
|
70
|
-
<
|
|
78
|
+
<GlassChip class="structure-stats">
|
|
71
79
|
{#if top_left}
|
|
72
80
|
{@render top_left(context)}
|
|
73
81
|
{:else if stats}
|
|
74
82
|
{#if stats.id}
|
|
75
|
-
ID = {stats.id}<br
|
|
83
|
+
ID = {stats.id}<br />
|
|
76
84
|
{/if}
|
|
77
85
|
{#if formula_html}
|
|
78
|
-
{@html formula_html}<br
|
|
86
|
+
{@html formula_html}<br />
|
|
79
87
|
{/if}
|
|
80
88
|
{#if stats.e_above_hull != null}
|
|
81
|
-
E<sub>above hull</sub> = {format_num(stats.e_above_hull, `.3~`)} eV/atom<br
|
|
89
|
+
E<sub>above hull</sub> = {format_num(stats.e_above_hull, `.3~`)} eV/atom<br />
|
|
82
90
|
{/if}
|
|
83
91
|
{#if stats.e_form != null}
|
|
84
92
|
E<sub>form</sub> = {format_num(stats.e_form, `.3~`)}
|
|
85
93
|
eV/atom
|
|
86
94
|
{/if}
|
|
87
95
|
{/if}
|
|
88
|
-
</
|
|
96
|
+
</GlassChip>
|
|
89
97
|
{/if}
|
|
90
98
|
|
|
91
99
|
<Structure
|
|
@@ -136,16 +144,4 @@
|
|
|
136
144
|
.close-btn:hover {
|
|
137
145
|
background: var(--pane-btn-bg-hover);
|
|
138
146
|
}
|
|
139
|
-
.structure-stats {
|
|
140
|
-
position: absolute;
|
|
141
|
-
top: 10px;
|
|
142
|
-
left: 10px;
|
|
143
|
-
background: transparent;
|
|
144
|
-
backdrop-filter: blur(8px);
|
|
145
|
-
color: var(--text-color);
|
|
146
|
-
padding: 4px 8px;
|
|
147
|
-
border-radius: 6px;
|
|
148
|
-
font-size: 0.85em;
|
|
149
|
-
z-index: 2;
|
|
150
|
-
}
|
|
151
147
|
</style>
|
|
@@ -8,6 +8,8 @@ type $$ComponentProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
|
8
8
|
width?: number;
|
|
9
9
|
height?: number;
|
|
10
10
|
onclose?: () => void;
|
|
11
|
+
close_on_outside?: boolean;
|
|
12
|
+
show_drag_handle?: boolean;
|
|
11
13
|
stats?: StructurePopupStats;
|
|
12
14
|
top_left?: Snippet<[StructurePopupContext]>;
|
|
13
15
|
children?: Snippet<[StructurePopupContext]>;
|
|
@@ -16,15 +16,11 @@
|
|
|
16
16
|
let last_update_time = 0
|
|
17
17
|
const THROTTLE_MS = 100
|
|
18
18
|
|
|
19
|
-
const temp_index = $derived(
|
|
20
|
-
Math.max(0, available_temperatures.indexOf(temperature)),
|
|
21
|
-
)
|
|
19
|
+
const temp_index = $derived(Math.max(0, available_temperatures.indexOf(temperature)))
|
|
22
20
|
const display_index = $derived(preview_index ?? temp_index)
|
|
23
21
|
const display_temp = $derived(available_temperatures[display_index] ?? temperature)
|
|
24
22
|
|
|
25
|
-
function handle_slider_input(
|
|
26
|
-
event: Event & { currentTarget: HTMLInputElement },
|
|
27
|
-
): void {
|
|
23
|
+
function handle_slider_input(event: Event & { currentTarget: HTMLInputElement }): void {
|
|
28
24
|
const new_index = Number(event.currentTarget.value)
|
|
29
25
|
preview_index = new_index
|
|
30
26
|
// Throttle parent updates during drag to prevent scene flashing
|
|
@@ -35,9 +31,7 @@
|
|
|
35
31
|
}
|
|
36
32
|
}
|
|
37
33
|
|
|
38
|
-
function handle_slider_end(
|
|
39
|
-
event: Event & { currentTarget: HTMLInputElement },
|
|
40
|
-
): void {
|
|
34
|
+
function handle_slider_end(event: Event & { currentTarget: HTMLInputElement }): void {
|
|
41
35
|
const new_temp = available_temperatures[Number(event.currentTarget.value)]
|
|
42
36
|
if (new_temp !== undefined) temperature = new_temp
|
|
43
37
|
preview_index = null
|
|
@@ -53,7 +47,7 @@
|
|
|
53
47
|
|
|
54
48
|
<div
|
|
55
49
|
{...rest}
|
|
56
|
-
class=
|
|
50
|
+
class={[`temperature-slider`, rest.class]}
|
|
57
51
|
{@attach tooltip({ content: `Temperature for G(T) free energies` })}
|
|
58
52
|
>
|
|
59
53
|
<label class="temp-label">
|
|
@@ -123,7 +123,8 @@ export function create_canvas_interactions(inputs) {
|
|
|
123
123
|
};
|
|
124
124
|
const handle_wheel = (event) => {
|
|
125
125
|
event.preventDefault();
|
|
126
|
-
|
|
126
|
+
const zoomed = inputs.zoom() * (event.deltaY > 0 ? 0.98 : 1.02);
|
|
127
|
+
inputs.set_zoom(Math.max(zoom_min, Math.min(zoom_max, zoomed)));
|
|
127
128
|
};
|
|
128
129
|
const handle_hover = (event) => {
|
|
129
130
|
if (is_dragging)
|
|
@@ -24,47 +24,23 @@ export const GAS_STOICHIOMETRY = {
|
|
|
24
24
|
CO2: { C: 1, O: 2 },
|
|
25
25
|
H2O: { H: 2, O: 1 },
|
|
26
26
|
};
|
|
27
|
-
// Default
|
|
27
|
+
// Default Thermodynamic Data (abstracted - users can provide their own)
|
|
28
|
+
// Temperature grid (K) shared by all tabulated T*S data below
|
|
29
|
+
// oxfmt-ignore
|
|
30
|
+
const TS_TEMPERATURES = [0, 298, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000];
|
|
31
|
+
// Default T*S values (eV/molecule) at TS_TEMPERATURES, interpolated between grid points.
|
|
28
32
|
// Source: Barin Thermochemical Tables and NBS Thermochemical Tables
|
|
29
33
|
// Data compiled to match PIRO (https://github.com/GENESIS-EFRC/piro)
|
|
30
|
-
//
|
|
34
|
+
// F2 not in Barin/NBS tables used by PIRO - approximated from similar homonuclear diatomics (O2, N2)
|
|
31
35
|
// oxfmt-ignore
|
|
32
36
|
const DEFAULT_TS_DATA = {
|
|
33
|
-
O2:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
},
|
|
41
|
-
N2: {
|
|
42
|
-
temperatures: [0, 298, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
|
|
43
|
-
values: [0, 0.2959, 0.2981, 0.4149, 0.5356, 0.6596, 0.7866, 0.9161, 1.0481, 1.1822, 1.3184, 1.4563, 1.596, 1.7372, 1.8799, 2.0239, 2.1693, 2.3158, 2.4634, 2.6122],
|
|
44
|
-
},
|
|
45
|
-
CO: {
|
|
46
|
-
temperatures: [0, 298, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
|
|
47
|
-
values: [0, 0.3054, 0.3076, 0.4275, 0.5515, 0.6788, 0.8092, 0.9423, 1.0778, 1.2155, 1.3552, 1.4967, 1.64, 1.7848, 1.9311, 2.0788, 2.2277, 2.3779, 2.5291, 2.6815],
|
|
48
|
-
},
|
|
49
|
-
CO2: {
|
|
50
|
-
temperatures: [0, 298, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
|
|
51
|
-
values: [0, 0.2202, 0.2218, 0.3113, 0.4057, 0.5042, 0.6064, 0.7116, 0.8197, 0.9303, 1.0432, 1.1582, 1.2751, 1.3938, 1.5141, 1.636, 1.7593, 1.8839, 2.0098, 2.1369],
|
|
52
|
-
},
|
|
53
|
-
H2O: {
|
|
54
|
-
temperatures: [0, 298, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
|
|
55
|
-
values: [0, 0.1946, 0.1961, 0.2749, 0.357, 0.4419, 0.5293, 0.6189, 0.7107, 0.8045, 0.9001, 0.9975, 1.0966, 1.1972, 1.2994, 1.403, 1.5079, 1.6142, 1.7216, 1.8303],
|
|
56
|
-
},
|
|
57
|
-
F2: {
|
|
58
|
-
// F2 not in Barin/NBS tables used by PIRO - approximated from similar homonuclear diatomics (O2, N2)
|
|
59
|
-
temperatures: [
|
|
60
|
-
0, 298, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600,
|
|
61
|
-
1700, 1800, 1900, 2000,
|
|
62
|
-
],
|
|
63
|
-
values: [
|
|
64
|
-
0, 0.31, 0.312, 0.435, 0.56, 0.69, 0.82, 0.96, 1.1, 1.24, 1.38, 1.53, 1.68, 1.83,
|
|
65
|
-
1.98, 2.13, 2.29, 2.45, 2.61, 2.77,
|
|
66
|
-
],
|
|
67
|
-
},
|
|
37
|
+
O2: [0, 0.317, 0.3192, 0.4433, 0.5718, 0.7041, 0.8396, 0.9781, 1.119, 1.2623, 1.4075, 1.5547, 1.7036, 1.8541, 2.006, 2.1594, 2.3141, 2.47, 2.6271, 2.7854],
|
|
38
|
+
H2: [0, 0.2019, 0.2034, 0.2886, 0.3776, 0.4697, 0.5645, 0.6614, 0.7605, 0.8614, 0.964, 1.0683, 1.1741, 1.2815, 1.3902, 1.5003, 1.6116, 1.7242, 1.838, 1.9528],
|
|
39
|
+
N2: [0, 0.2959, 0.2981, 0.4149, 0.5356, 0.6596, 0.7866, 0.9161, 1.0481, 1.1822, 1.3184, 1.4563, 1.596, 1.7372, 1.8799, 2.0239, 2.1693, 2.3158, 2.4634, 2.6122],
|
|
40
|
+
CO: [0, 0.3054, 0.3076, 0.4275, 0.5515, 0.6788, 0.8092, 0.9423, 1.0778, 1.2155, 1.3552, 1.4967, 1.64, 1.7848, 1.9311, 2.0788, 2.2277, 2.3779, 2.5291, 2.6815],
|
|
41
|
+
CO2: [0, 0.2202, 0.2218, 0.3113, 0.4057, 0.5042, 0.6064, 0.7116, 0.8197, 0.9303, 1.0432, 1.1582, 1.2751, 1.3938, 1.5141, 1.636, 1.7593, 1.8839, 2.0098, 2.1369],
|
|
42
|
+
H2O: [0, 0.1946, 0.1961, 0.2749, 0.357, 0.4419, 0.5293, 0.6189, 0.7107, 0.8045, 0.9001, 0.9975, 1.0966, 1.1972, 1.2994, 1.403, 1.5079, 1.6142, 1.7216, 1.8303],
|
|
43
|
+
F2: [0, 0.31, 0.312, 0.435, 0.56, 0.69, 0.82, 0.96, 1.1, 1.24, 1.38, 1.53, 1.68, 1.83, 1.98, 2.13, 2.29, 2.45, 2.61, 2.77],
|
|
68
44
|
};
|
|
69
45
|
// Formation enthalpies H_f at 0K in eV/molecule
|
|
70
46
|
// These are the reference energies for formation from elements
|
|
@@ -76,27 +52,19 @@ const DEFAULT_ENTHALPY = {
|
|
|
76
52
|
H2O: -0.82547,
|
|
77
53
|
// O2, N2, H2, F2 are reference states with H_f = 0
|
|
78
54
|
};
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// Clamp to valid range
|
|
84
|
-
if (T <= temperatures[0])
|
|
55
|
+
// Linearly interpolate T*S value at given temperature (clamped to the tabulated range)
|
|
56
|
+
function interpolate_ts(values, T) {
|
|
57
|
+
const temps = TS_TEMPERATURES;
|
|
58
|
+
if (T <= temps[0])
|
|
85
59
|
return values[0];
|
|
86
|
-
if (T >=
|
|
60
|
+
if (T >= temps[temps.length - 1])
|
|
87
61
|
return values[values.length - 1];
|
|
88
|
-
}
|
|
89
62
|
// Find bracketing indices
|
|
90
63
|
let idx = 0;
|
|
91
|
-
while (idx <
|
|
64
|
+
while (idx < temps.length - 1 && temps[idx + 1] < T)
|
|
92
65
|
idx++;
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
const v_low = values[idx];
|
|
96
|
-
const v_high = values[idx + 1];
|
|
97
|
-
// Linear interpolation
|
|
98
|
-
const fraction = (T - T_low) / (T_high - T_low);
|
|
99
|
-
return v_low + fraction * (v_high - v_low);
|
|
66
|
+
const fraction = (T - temps[idx]) / (temps[idx + 1] - temps[idx]);
|
|
67
|
+
return values[idx] + fraction * (values[idx + 1] - values[idx]);
|
|
100
68
|
}
|
|
101
69
|
// Default Provider Implementation
|
|
102
70
|
// Create the default gas thermodynamics provider using built-in data
|
|
@@ -3,12 +3,11 @@ import type { EnergyModeInfo } from './';
|
|
|
3
3
|
import type { ElementSymbol } from '../element';
|
|
4
4
|
import type { AnyStructure } from '../structure';
|
|
5
5
|
import type { ConvexHullConfig, EntryCategoryConfig, GasAnalysis, GasThermodynamicsConfig, HighlightStyle, MarkerSymbol, PhaseData } from './types';
|
|
6
|
-
|
|
7
|
-
export { DEFAULT_GAS_TEMP };
|
|
6
|
+
export { DEFAULT_GAS_TEMP } from './types';
|
|
8
7
|
export declare const HULL_STABILITY_TOL = 0.000001;
|
|
9
|
-
export declare function compute_hull_stability(raw_distance: number, exclude_from_hull?: boolean, tol?: number): {
|
|
10
|
-
e_above_hull: number;
|
|
11
|
-
is_stable: boolean;
|
|
8
|
+
export declare function compute_hull_stability(raw_distance: number | null | undefined, exclude_from_hull?: boolean, tol?: number): {
|
|
9
|
+
e_above_hull: number | undefined;
|
|
10
|
+
is_stable: boolean | undefined;
|
|
12
11
|
};
|
|
13
12
|
type StabilityEntry = {
|
|
14
13
|
is_stable?: boolean;
|
|
@@ -17,8 +16,11 @@ type StabilityEntry = {
|
|
|
17
16
|
export declare const extract_structure_from_entry: (entries: PhaseData[], entry: {
|
|
18
17
|
entry_id?: string;
|
|
19
18
|
}) => AnyStructure | null;
|
|
19
|
+
export declare const array_min: (values: readonly number[]) => number;
|
|
20
|
+
export declare const array_max: (values: readonly number[]) => number;
|
|
20
21
|
export declare const hull_distance_range: (entries: PhaseData[]) => [number, number];
|
|
21
22
|
export declare const entry_is_stable: (entry: StabilityEntry, tol?: number) => boolean;
|
|
23
|
+
export declare const entry_within_hull_dist: (entry: StabilityEntry, max_dist: number) => boolean;
|
|
22
24
|
export declare const is_on_hull: (entry: PhaseData, tol?: number) => boolean;
|
|
23
25
|
export declare const get_arity: (entry: PhaseData) => number;
|
|
24
26
|
export declare const is_unary_entry: (entry: PhaseData) => boolean;
|
|
@@ -142,8 +144,4 @@ export declare function get_gas_corrected_entries(entries: PhaseData[], gas_conf
|
|
|
142
144
|
analysis: GasAnalysis;
|
|
143
145
|
merged_config: GasThermodynamicsConfig | undefined;
|
|
144
146
|
};
|
|
145
|
-
export declare function get_entry_label(entry:
|
|
146
|
-
reduced_formula?: string;
|
|
147
|
-
name?: string;
|
|
148
|
-
composition: Record<string, number>;
|
|
149
|
-
}, elements?: ElementSymbol[]): string;
|
|
147
|
+
export declare function get_entry_label(entry: Pick<PhaseData, `reduced_formula` | `name` | `composition`>, elements?: ElementSymbol[]): string;
|
|
@@ -3,14 +3,19 @@ import { ELEM_SYMBOL_TO_NAME } from '../composition';
|
|
|
3
3
|
import { format_fractional, format_num, symbol_map } from '../labels';
|
|
4
4
|
import { scaleSequential } from 'd3-scale';
|
|
5
5
|
import { symbol } from 'd3-shape';
|
|
6
|
-
import { analyze_gas_data
|
|
7
|
-
import {
|
|
8
|
-
export { DEFAULT_GAS_TEMP };
|
|
6
|
+
import { analyze_gas_data, apply_gas_corrections } from './gas-thermodynamics';
|
|
7
|
+
import { MAGNETIC_ORDERING_CATEGORY } from './types';
|
|
8
|
+
export { DEFAULT_GAS_TEMP } from './types';
|
|
9
9
|
// Tolerance for classifying a phase as on the convex hull (eV/atom)
|
|
10
10
|
export const HULL_STABILITY_TOL = 1e-6;
|
|
11
11
|
// Clamp raw hull distance and compute stability for a single entry.
|
|
12
12
|
// Excluded entries keep their raw (possibly negative) distance and are never stable.
|
|
13
13
|
export function compute_hull_stability(raw_distance, exclude_from_hull, tol = HULL_STABILITY_TOL) {
|
|
14
|
+
// unknown distance (degenerate hull / point outside hull projection / missing energy):
|
|
15
|
+
// not 0/stable — leave both undefined so it isn't mislabeled on-hull
|
|
16
|
+
if (raw_distance == null || !Number.isFinite(raw_distance)) {
|
|
17
|
+
return { e_above_hull: undefined, is_stable: undefined };
|
|
18
|
+
}
|
|
14
19
|
if (exclude_from_hull)
|
|
15
20
|
return { e_above_hull: raw_distance, is_stable: false };
|
|
16
21
|
const e_above_hull = Math.abs(raw_distance) < tol ? 0 : Math.max(0, raw_distance);
|
|
@@ -24,15 +29,23 @@ export const extract_structure_from_entry = (entries, entry) => {
|
|
|
24
29
|
const orig_entry = entries.find((ent) => ent.entry_id === entry.entry_id);
|
|
25
30
|
return orig_entry?.structure || null;
|
|
26
31
|
};
|
|
27
|
-
//
|
|
32
|
+
// Loop-based min/max — Math.min/max(...arr) blows the stack on large (>~100k) arrays
|
|
33
|
+
export const array_min = (values) => values.reduce((min, val) => (val < min ? val : min), Infinity);
|
|
34
|
+
export const array_max = (values) => values.reduce((max, val) => (val > max ? val : max), -Infinity);
|
|
35
|
+
// [min, max] energy above hull across entries, for ColorBar ranges (max floored at 0.1).
|
|
36
|
+
// Filter to finite values: NaN/undefined distances would otherwise produce a broken range.
|
|
28
37
|
export const hull_distance_range = (entries) => {
|
|
29
38
|
const dists = entries
|
|
30
39
|
.map((entry) => entry.e_above_hull)
|
|
31
|
-
.filter((val) => typeof val === `number`);
|
|
32
|
-
return dists.length > 0 ? [
|
|
40
|
+
.filter((val) => typeof val === `number` && Number.isFinite(val));
|
|
41
|
+
return dists.length > 0 ? [array_min(dists), Math.max(array_max(dists), 0.1)] : [0, 0.1];
|
|
33
42
|
};
|
|
34
43
|
export const entry_is_stable = (entry, tol = HULL_STABILITY_TOL) => entry.is_stable === true ||
|
|
35
44
|
(entry.is_stable !== false && Math.abs(entry.e_above_hull ?? Infinity) <= tol);
|
|
45
|
+
// Whether to plot an entry at a given max hull distance: stable, or a finite distance
|
|
46
|
+
// within max_dist. Unknown distance (undefined) is excluded, not treated as 0/stable.
|
|
47
|
+
export const entry_within_hull_dist = (entry, max_dist) => entry_is_stable(entry) ||
|
|
48
|
+
(typeof entry.e_above_hull === `number` && entry.e_above_hull <= max_dist);
|
|
36
49
|
// Check if entry is on the convex hull (stable or e_above_hull ≈ 0)
|
|
37
50
|
export const is_on_hull = (entry, tol = HULL_STABILITY_TOL) => !entry.exclude_from_hull && entry_is_stable(entry, tol);
|
|
38
51
|
export const get_arity = (entry) => Object.values(entry.composition).filter((count) => count > 0).length;
|
|
@@ -211,15 +224,9 @@ export function build_entry_tooltip_text(entry, category = MAGNETIC_ORDERING_CAT
|
|
|
211
224
|
? `${elem_symbol}${elem_name ? ` (${elem_name})` : ``}\n`
|
|
212
225
|
: `${entry.name ?? entry.reduced_formula ?? ``}\n`;
|
|
213
226
|
if (!is_element) {
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
216
|
-
|
|
217
|
-
.filter(([, amt]) => amt > 0)
|
|
218
|
-
.map(([el, amt]) => `${el}: ${format_fractional(amt / total)}`);
|
|
219
|
-
if (fractions.length > 1) {
|
|
220
|
-
text += `Composition: ${fractions.join(`, `)}\n`;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
227
|
+
const fractions = Object.entries(get_fractional_composition(entry.composition)).map(([elem, frac]) => `${elem}: ${format_fractional(frac)}`);
|
|
228
|
+
if (fractions.length > 1)
|
|
229
|
+
text += `Composition: ${fractions.join(`, `)}\n`;
|
|
223
230
|
}
|
|
224
231
|
if (entry.e_above_hull !== undefined) {
|
|
225
232
|
const e_hull_str = format_num(entry.e_above_hull, `.3~`);
|
|
@@ -283,28 +290,22 @@ energy_source_mode) {
|
|
|
283
290
|
for (const el of Object.keys(entry.composition))
|
|
284
291
|
elements_in_entries.add(el);
|
|
285
292
|
}
|
|
286
|
-
|
|
287
|
-
for (const el of elements_in_entries) {
|
|
288
|
-
if (!unary_refs[el]) {
|
|
289
|
-
can_compute_e_form = false;
|
|
290
|
-
break;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
const can_compute_hull = can_compute_e_form;
|
|
293
|
+
const can_compute_e_form = [...elements_in_entries].every((el) => el in unary_refs);
|
|
294
294
|
// Resolve mode to avoid inconsistent states:
|
|
295
295
|
// - If full precomputed available, honor user toggle
|
|
296
|
-
// - Else if we can compute
|
|
296
|
+
// - Else if we can compute, use on-the-fly automatically
|
|
297
297
|
// - Else fall back to precomputed (best-effort)
|
|
298
298
|
const energy_mode = has_precomputed_e_form && has_precomputed_hull
|
|
299
299
|
? energy_source_mode
|
|
300
|
-
: can_compute_e_form
|
|
300
|
+
: can_compute_e_form
|
|
301
301
|
? `on-the-fly`
|
|
302
302
|
: `precomputed`;
|
|
303
303
|
return {
|
|
304
304
|
has_precomputed_e_form,
|
|
305
305
|
has_precomputed_hull,
|
|
306
306
|
can_compute_e_form,
|
|
307
|
-
|
|
307
|
+
// hull needs the same unary references as e_form, so the two always agree
|
|
308
|
+
can_compute_hull: can_compute_e_form,
|
|
308
309
|
energy_mode,
|
|
309
310
|
unary_refs,
|
|
310
311
|
};
|
|
@@ -752,8 +753,7 @@ export function filter_entries_at_temperature(entries, T, options = {}) {
|
|
|
752
753
|
return [{ ...entry, energy, energy_per_atom: energy }];
|
|
753
754
|
}
|
|
754
755
|
}
|
|
755
|
-
// Exclude entry (has temp data but can't get energy at T)
|
|
756
|
-
return [];
|
|
756
|
+
return []; // Exclude entry (has temp data but can't get energy at T)
|
|
757
757
|
});
|
|
758
758
|
}
|
|
759
759
|
// Get gas-corrected entries in one call (consolidates analysis + correction)
|
|
@@ -762,29 +762,23 @@ export function filter_entries_at_temperature(entries, T, options = {}) {
|
|
|
762
762
|
// if no gas config or no relevant gases.
|
|
763
763
|
export function get_gas_corrected_entries(entries, gas_config, gas_pressures, temperature) {
|
|
764
764
|
if (!gas_config?.enabled_gases?.length) {
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
gas_elements: [],
|
|
770
|
-
relevant_gases: [],
|
|
771
|
-
},
|
|
772
|
-
merged_config: undefined,
|
|
765
|
+
const analysis = {
|
|
766
|
+
has_gas_dependent_elements: false,
|
|
767
|
+
gas_elements: [],
|
|
768
|
+
relevant_gases: [],
|
|
773
769
|
};
|
|
770
|
+
return { entries, analysis, merged_config: undefined };
|
|
774
771
|
}
|
|
775
772
|
const merged_config = {
|
|
776
773
|
...gas_config,
|
|
777
774
|
pressures: { ...gas_config.pressures, ...gas_pressures },
|
|
778
775
|
};
|
|
779
|
-
const analysis =
|
|
776
|
+
const analysis = analyze_gas_data(entries, merged_config);
|
|
780
777
|
if (!analysis.has_gas_dependent_elements) {
|
|
781
778
|
return { entries, analysis, merged_config };
|
|
782
779
|
}
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
analysis,
|
|
786
|
-
merged_config,
|
|
787
|
-
};
|
|
780
|
+
const corr_entries = apply_gas_corrections(entries, merged_config, temperature);
|
|
781
|
+
return { entries: corr_entries, analysis, merged_config };
|
|
788
782
|
}
|
|
789
783
|
// Derive a display label for a convex hull entry, falling back to composition
|
|
790
784
|
// when reduced_formula and name are both missing.
|
|
@@ -793,7 +787,7 @@ export function get_entry_label(entry, elements) {
|
|
|
793
787
|
return entry.reduced_formula;
|
|
794
788
|
if (entry.name)
|
|
795
789
|
return entry.name;
|
|
796
|
-
let pairs = Object.entries(entry.composition).filter(([, amt]) => amt > 0);
|
|
790
|
+
let pairs = Object.entries(entry.composition).filter(([, amt]) => (amt ?? 0) > 0);
|
|
797
791
|
if (elements) {
|
|
798
792
|
pairs = pairs.sort(([el1], [el2]) => elements.indexOf(el1) - elements.indexOf(el2));
|
|
799
793
|
}
|
|
@@ -36,7 +36,7 @@ export declare function create_hull_data_pipeline<Entry extends PhaseData>(input
|
|
|
36
36
|
})[];
|
|
37
37
|
readonly pd_data: import("./types").ProcessedPhaseData;
|
|
38
38
|
readonly polymorph_stats_map: Map<string, helpers.PolymorphStats>;
|
|
39
|
-
readonly elements: ("
|
|
39
|
+
readonly elements: ("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")[];
|
|
40
40
|
readonly max_hull_dist_in_data: number;
|
|
41
41
|
readonly auto_default_threshold: number;
|
|
42
42
|
readonly plot_entries: Entry[];
|