matterviz 0.3.1 → 0.3.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 -2
- package/dist/FilePicker.svelte +154 -96
- package/dist/Icon.svelte +20 -14
- package/dist/MillerIndexInput.svelte +27 -21
- package/dist/api/optimade.js +6 -6
- package/dist/app.css +216 -178
- package/dist/brillouin/BrillouinZone.svelte +299 -198
- package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
- package/dist/brillouin/BrillouinZoneExportPane.svelte +74 -55
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
- package/dist/brillouin/BrillouinZoneScene.svelte +277 -165
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
- package/dist/brillouin/compute.js +11 -6
- package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +847 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3194 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotScene3D.svelte +11 -0
- package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
- package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
- package/dist/chempot-diagram/async-compute.svelte.js +77 -0
- package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
- package/dist/chempot-diagram/chempot-worker.js +11 -0
- package/dist/chempot-diagram/color.d.ts +10 -0
- package/dist/chempot-diagram/color.js +32 -0
- package/dist/chempot-diagram/compute.d.ts +48 -0
- package/dist/chempot-diagram/compute.js +812 -0
- package/dist/chempot-diagram/index.d.ts +6 -0
- package/dist/chempot-diagram/index.js +6 -0
- package/dist/chempot-diagram/pointer.d.ts +16 -0
- package/dist/chempot-diagram/pointer.js +40 -0
- package/dist/chempot-diagram/temperature.d.ts +15 -0
- package/dist/chempot-diagram/temperature.js +36 -0
- package/dist/chempot-diagram/types.d.ts +86 -0
- package/dist/chempot-diagram/types.js +28 -0
- package/dist/colors/index.d.ts +3 -1
- package/dist/colors/index.js +9 -3
- package/dist/composition/BarChart.svelte +141 -77
- package/dist/composition/BubbleChart.svelte +107 -52
- package/dist/composition/Composition.svelte +100 -79
- package/dist/composition/Formula.svelte +108 -62
- package/dist/composition/FormulaFilter.svelte +973 -353
- package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
- package/dist/composition/PieChart.svelte +199 -99
- package/dist/composition/PieChart.svelte.d.ts +1 -1
- package/dist/composition/format.d.ts +5 -0
- package/dist/composition/format.js +20 -3
- package/dist/composition/parse.js +14 -9
- package/dist/convex-hull/ConvexHull.svelte +93 -38
- package/dist/convex-hull/ConvexHull2D.svelte +551 -393
- package/dist/convex-hull/ConvexHull3D.svelte +1303 -825
- package/dist/convex-hull/ConvexHull4D.svelte +1012 -686
- package/dist/convex-hull/ConvexHullControls.svelte +115 -28
- package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
- package/dist/convex-hull/ConvexHullStats.svelte +821 -249
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +41 -16
- package/dist/convex-hull/GasPressureControls.svelte +104 -61
- package/dist/convex-hull/StructurePopup.svelte +25 -4
- package/dist/convex-hull/TemperatureSlider.svelte +45 -25
- package/dist/convex-hull/barycentric-coords.js +13 -7
- package/dist/convex-hull/demo-temperature.d.ts +6 -0
- package/dist/convex-hull/demo-temperature.js +40 -0
- package/dist/convex-hull/gas-thermodynamics.js +17 -12
- package/dist/convex-hull/helpers.d.ts +10 -1
- package/dist/convex-hull/helpers.js +79 -38
- package/dist/convex-hull/index.d.ts +1 -0
- package/dist/convex-hull/index.js +1 -0
- package/dist/convex-hull/thermodynamics.d.ts +8 -21
- package/dist/convex-hull/thermodynamics.js +163 -69
- package/dist/convex-hull/types.d.ts +12 -12
- package/dist/convex-hull/types.js +0 -12
- package/dist/coordination/CoordinationBarPlot.svelte +232 -176
- package/dist/element/BohrAtom.svelte +56 -13
- package/dist/element/ElementHeading.svelte +7 -2
- package/dist/element/ElementPhoto.svelte +15 -9
- package/dist/element/ElementStats.svelte +10 -4
- package/dist/element/ElementTile.svelte +137 -73
- package/dist/element/Nucleus.svelte +39 -11
- package/dist/element/data.js +2 -14
- package/dist/element/data.json.gz +0 -0
- package/dist/element/types.d.ts +1 -0
- package/dist/feedback/ClickFeedback.svelte +16 -5
- package/dist/feedback/DragOverlay.svelte +10 -2
- package/dist/feedback/Spinner.svelte +4 -2
- package/dist/feedback/StatusMessage.svelte +8 -2
- package/dist/fermi-surface/FermiSlice.svelte +118 -88
- package/dist/fermi-surface/FermiSurface.svelte +336 -239
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
- package/dist/fermi-surface/FermiSurfaceScene.svelte +536 -343
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
- package/dist/fermi-surface/compute.js +16 -20
- package/dist/fermi-surface/parse.js +37 -33
- package/dist/fermi-surface/symmetry.js +2 -7
- package/dist/fermi-surface/types.d.ts +3 -5
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +1527 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
- package/dist/heatmap-matrix/index.d.ts +53 -0
- package/dist/heatmap-matrix/index.js +100 -0
- package/dist/heatmap-matrix/shared.d.ts +2 -0
- package/dist/heatmap-matrix/shared.js +4 -0
- package/dist/icons.d.ts +111 -0
- package/dist/icons.js +158 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +5 -2
- package/dist/io/decompress.js +1 -1
- package/dist/io/export.d.ts +3 -0
- package/dist/io/export.js +138 -140
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +43 -0
- package/dist/io/index.d.ts +2 -2
- package/dist/io/index.js +2 -112
- package/dist/io/is-binary.js +2 -3
- package/dist/io/types.d.ts +1 -0
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +117 -0
- package/dist/isosurface/Isosurface.svelte +220 -110
- package/dist/isosurface/IsosurfaceControls.svelte +65 -28
- package/dist/isosurface/parse.js +104 -56
- package/dist/isosurface/slice.d.ts +2 -1
- package/dist/isosurface/slice.js +8 -13
- package/dist/isosurface/types.d.ts +14 -1
- package/dist/isosurface/types.js +152 -5
- package/dist/labels.d.ts +2 -1
- package/dist/labels.js +12 -8
- package/dist/layout/FullscreenToggle.svelte +11 -2
- package/dist/layout/InfoCard.svelte +38 -6
- package/dist/layout/InfoTag.svelte +125 -94
- package/dist/layout/PropertyFilter.svelte +82 -37
- package/dist/layout/SettingsSection.svelte +85 -55
- package/dist/layout/SubpageGrid.svelte +82 -0
- package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +266 -223
- package/dist/layout/json-tree/JsonTree.svelte +516 -429
- package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
- package/dist/layout/json-tree/JsonValue.svelte +281 -173
- package/dist/layout/json-tree/types.d.ts +10 -2
- package/dist/layout/json-tree/utils.d.ts +2 -0
- package/dist/layout/json-tree/utils.js +37 -2
- package/dist/marching-cubes.js +25 -2
- package/dist/math.d.ts +20 -17
- package/dist/math.js +474 -57
- package/dist/overlays/ContextMenu.svelte +66 -40
- package/dist/overlays/DraggablePane.svelte +331 -154
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
- package/dist/periodic-table/PeriodicTable.svelte +278 -145
- package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
- package/dist/periodic-table/PropertySelect.svelte +25 -7
- package/dist/periodic-table/TableInset.svelte +8 -3
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +559 -267
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
- package/dist/phase-diagram/PhaseDiagramControls.svelte +131 -51
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +160 -110
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +8 -1
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +217 -86
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
- package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
- package/dist/phase-diagram/build-diagram.js +9 -9
- package/dist/phase-diagram/colors.js +1 -3
- package/dist/phase-diagram/index.d.ts +2 -0
- package/dist/phase-diagram/index.js +2 -0
- package/dist/phase-diagram/parse.js +10 -9
- package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
- package/dist/phase-diagram/svg-to-diagram.js +869 -0
- package/dist/phase-diagram/types.d.ts +10 -0
- package/dist/phase-diagram/utils.d.ts +8 -4
- package/dist/phase-diagram/utils.js +219 -74
- package/dist/plot/AxisLabel.svelte +51 -0
- package/dist/plot/AxisLabel.svelte.d.ts +16 -0
- package/dist/plot/BarPlot.svelte +1461 -768
- package/dist/plot/BarPlot.svelte.d.ts +3 -3
- package/dist/plot/BarPlotControls.svelte +33 -6
- package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ColorBar.svelte +533 -383
- package/dist/plot/ColorBar.svelte.d.ts +1 -1
- package/dist/plot/ColorScaleSelect.svelte +28 -7
- package/dist/plot/ElementScatter.svelte +38 -16
- package/dist/plot/FillArea.svelte +152 -92
- package/dist/plot/Histogram.svelte +1162 -709
- package/dist/plot/Histogram.svelte.d.ts +1 -1
- package/dist/plot/HistogramControls.svelte +81 -18
- package/dist/plot/HistogramControls.svelte.d.ts +6 -2
- package/dist/plot/InteractiveAxisLabel.svelte +34 -11
- package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/Line.svelte +63 -28
- package/dist/plot/PlotControls.svelte +221 -96
- package/dist/plot/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/PlotLegend.svelte +174 -91
- package/dist/plot/PlotTooltip.svelte +45 -6
- package/dist/plot/PortalSelect.svelte +175 -146
- package/dist/plot/ReferenceLine.svelte +77 -22
- package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
- package/dist/plot/ReferenceLine3D.svelte +132 -107
- package/dist/plot/ReferencePlane.svelte +146 -123
- package/dist/plot/ScatterPlot.svelte +1880 -1156
- package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
- package/dist/plot/ScatterPlot3D.svelte +256 -131
- package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlot3DControls.svelte +300 -297
- package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
- package/dist/plot/ScatterPlot3DScene.svelte +608 -406
- package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlotControls.svelte +150 -70
- package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ScatterPoint.svelte +98 -26
- package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
- package/dist/plot/SpacegroupBarPlot.svelte +142 -85
- package/dist/plot/Surface3D.svelte +159 -108
- package/dist/plot/ZeroLines.svelte +96 -0
- package/dist/plot/ZeroLines.svelte.d.ts +32 -0
- package/dist/plot/ZoomRect.svelte +23 -0
- package/dist/plot/ZoomRect.svelte.d.ts +8 -0
- package/dist/plot/axis-utils.d.ts +1 -1
- package/dist/plot/axis-utils.js +1 -3
- package/dist/plot/data-cleaning.js +12 -28
- package/dist/plot/data-transform.js +2 -1
- package/dist/plot/fill-utils.js +2 -0
- package/dist/plot/index.d.ts +6 -2
- package/dist/plot/index.js +6 -2
- package/dist/plot/interactions.d.ts +8 -10
- package/dist/plot/interactions.js +2 -3
- package/dist/plot/layout.d.ts +11 -2
- package/dist/plot/layout.js +44 -17
- package/dist/plot/reference-line.d.ts +5 -22
- package/dist/plot/reference-line.js +12 -84
- package/dist/plot/scales.js +24 -36
- package/dist/plot/types.d.ts +53 -40
- package/dist/plot/types.js +12 -7
- package/dist/plot/utils/label-placement.d.ts +32 -15
- package/dist/plot/utils/label-placement.js +227 -63
- package/dist/plot/utils/series-visibility.js +2 -3
- package/dist/plot/utils.d.ts +1 -0
- package/dist/plot/utils.js +14 -0
- package/dist/rdf/RdfPlot.svelte +173 -132
- package/dist/rdf/calc-rdf.js +4 -5
- package/dist/sanitize.d.ts +4 -0
- package/dist/sanitize.js +107 -0
- package/dist/settings.d.ts +21 -6
- package/dist/settings.js +63 -19
- package/dist/spectral/Bands.svelte +963 -412
- package/dist/spectral/Bands.svelte.d.ts +22 -2
- package/dist/spectral/BandsAndDos.svelte +90 -49
- package/dist/spectral/BrillouinBandsDos.svelte +151 -93
- package/dist/spectral/Dos.svelte +389 -258
- package/dist/spectral/helpers.d.ts +23 -1
- package/dist/spectral/helpers.js +119 -51
- package/dist/spectral/types.d.ts +2 -0
- package/dist/state.svelte.d.ts +1 -1
- package/dist/state.svelte.js +3 -2
- package/dist/structure/Arrow.svelte +59 -20
- package/dist/structure/AtomLegend.svelte +231 -129
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/Bond.svelte +73 -47
- package/dist/structure/CanvasTooltip.svelte +10 -2
- package/dist/structure/CellSelect.svelte +148 -51
- package/dist/structure/Cylinder.svelte +33 -17
- package/dist/structure/Lattice.svelte +88 -33
- package/dist/structure/Structure.svelte +1077 -821
- package/dist/structure/Structure.svelte.d.ts +1 -1
- package/dist/structure/StructureControls.svelte +373 -139
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +124 -89
- package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
- package/dist/structure/StructureInfoPane.svelte +304 -231
- package/dist/structure/StructureScene.svelte +919 -445
- package/dist/structure/StructureScene.svelte.d.ts +16 -7
- package/dist/structure/atom-properties.d.ts +6 -2
- package/dist/structure/atom-properties.js +42 -29
- package/dist/structure/bonding.js +6 -7
- package/dist/structure/export.js +22 -34
- package/dist/structure/ferrox-wasm-types.d.ts +3 -2
- package/dist/structure/ferrox-wasm-types.js +0 -3
- package/dist/structure/ferrox-wasm.d.ts +3 -2
- package/dist/structure/ferrox-wasm.js +2 -3
- package/dist/structure/index.d.ts +16 -0
- package/dist/structure/index.js +88 -6
- package/dist/structure/measure.d.ts +2 -2
- package/dist/structure/measure.js +4 -44
- package/dist/structure/parse.js +130 -155
- package/dist/structure/partial-occupancy.d.ts +25 -0
- package/dist/structure/partial-occupancy.js +99 -0
- package/dist/structure/pbc.d.ts +1 -0
- package/dist/structure/pbc.js +16 -6
- package/dist/structure/supercell.d.ts +2 -2
- package/dist/structure/supercell.js +12 -22
- package/dist/structure/validation.js +5 -3
- package/dist/symmetry/SymmetryStats.svelte +94 -37
- package/dist/symmetry/WyckoffTable.svelte +42 -14
- package/dist/symmetry/cell-transform.js +5 -3
- package/dist/symmetry/index.d.ts +7 -4
- package/dist/symmetry/index.js +87 -21
- package/dist/symmetry/spacegroups.js +148 -148
- package/dist/table/HeatmapTable.svelte +1112 -516
- package/dist/table/HeatmapTable.svelte.d.ts +12 -1
- package/dist/table/ToggleMenu.svelte +125 -90
- package/dist/table/index.d.ts +2 -0
- package/dist/table/index.js +2 -4
- package/dist/theme/ThemeControl.svelte +21 -12
- package/dist/time.js +4 -1
- package/dist/tooltip/TooltipContent.svelte +33 -8
- package/dist/trajectory/Trajectory.svelte +889 -687
- package/dist/trajectory/TrajectoryError.svelte +14 -3
- package/dist/trajectory/TrajectoryExportPane.svelte +148 -90
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
- package/dist/trajectory/constants.d.ts +6 -0
- package/dist/trajectory/constants.js +7 -0
- package/dist/trajectory/extract.js +13 -31
- package/dist/trajectory/format-detect.d.ts +9 -0
- package/dist/trajectory/format-detect.js +76 -0
- package/dist/trajectory/frame-reader.d.ts +17 -0
- package/dist/trajectory/frame-reader.js +332 -0
- package/dist/trajectory/helpers.d.ts +14 -0
- package/dist/trajectory/helpers.js +172 -0
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +23 -14
- package/dist/trajectory/parse/ase.d.ts +2 -0
- package/dist/trajectory/parse/ase.js +77 -0
- package/dist/trajectory/parse/hdf5.d.ts +2 -0
- package/dist/trajectory/parse/hdf5.js +129 -0
- package/dist/trajectory/parse/index.d.ts +12 -0
- package/dist/trajectory/parse/index.js +299 -0
- package/dist/trajectory/parse/lammps.d.ts +5 -0
- package/dist/trajectory/parse/lammps.js +179 -0
- package/dist/trajectory/parse/vasp.d.ts +2 -0
- package/dist/trajectory/parse/vasp.js +68 -0
- package/dist/trajectory/parse/xyz.d.ts +2 -0
- package/dist/trajectory/parse/xyz.js +110 -0
- package/dist/trajectory/plotting.js +13 -8
- package/dist/trajectory/types.d.ts +11 -0
- package/dist/trajectory/types.js +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +17 -0
- package/dist/xrd/XrdPlot.svelte +337 -245
- package/dist/xrd/broadening.js +14 -9
- package/dist/xrd/calc-xrd.js +12 -19
- package/dist/xrd/parse.d.ts +1 -1
- package/dist/xrd/parse.js +17 -17
- package/package.json +103 -101
- package/readme.md +4 -4
- package/dist/trajectory/parse.d.ts +0 -42
- package/dist/trajectory/parse.js +0 -1267
- /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
- /package/dist/theme/{themes.js → themes.mjs} +0 -0
|
@@ -1,175 +1,304 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { InfoItem } from '../layout'
|
|
3
|
+
import Icon from '../Icon.svelte'
|
|
4
|
+
import { format_num } from '../labels'
|
|
5
|
+
import { sanitize_html } from '../sanitize'
|
|
6
|
+
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
7
|
+
import { get_electro_neg_formula } from '../composition'
|
|
8
|
+
import { SETTINGS_CONFIG } from '../settings'
|
|
9
|
+
import { type AnyStructure } from '../structure'
|
|
10
|
+
import type { ComponentProps } from 'svelte'
|
|
11
|
+
import { tooltip as create_tooltip } from 'svelte-multiselect/attachments'
|
|
12
|
+
import { SvelteSet } from 'svelte/reactivity'
|
|
13
|
+
import type { TrajectoryType } from './index'
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
trajectory,
|
|
17
|
+
current_step_idx,
|
|
18
|
+
current_filename,
|
|
19
|
+
current_file_path,
|
|
20
|
+
file_size,
|
|
21
|
+
file_object,
|
|
22
|
+
pane_open = $bindable(false),
|
|
23
|
+
toggle_props,
|
|
24
|
+
pane_props,
|
|
25
|
+
...rest
|
|
26
|
+
}: Omit<ComponentProps<typeof DraggablePane>, `children`> & {
|
|
27
|
+
trajectory: TrajectoryType
|
|
28
|
+
current_step_idx: number
|
|
29
|
+
current_filename?: string | null
|
|
30
|
+
current_file_path?: string | null
|
|
31
|
+
file_size?: number | null
|
|
32
|
+
file_object?: File | null
|
|
33
|
+
pane_open?: boolean
|
|
34
|
+
toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
|
|
35
|
+
pane_props?: ComponentProps<typeof DraggablePane>[`pane_props`]
|
|
36
|
+
} = $props()
|
|
37
|
+
|
|
38
|
+
let copied_items = new SvelteSet<string>()
|
|
39
|
+
|
|
40
|
+
async function copy_item(label: string, value: string | number, key: string) {
|
|
12
41
|
try {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
42
|
+
await navigator.clipboard.writeText(`${label}: ${value}`)
|
|
43
|
+
copied_items.add(key)
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
copied_items.delete(key)
|
|
46
|
+
}, 1000)
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error(`Failed to copy to clipboard:`, error)
|
|
18
49
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const is_valid_number = (val)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Helper functions
|
|
53
|
+
const format_size = (bytes: number) =>
|
|
54
|
+
bytes > 1024 * 1024
|
|
55
|
+
? `${format_num(bytes / (1024 * 1024), `.2~f`)} MB`
|
|
56
|
+
: `${format_num(bytes / 1024, `.2~f`)} KB`
|
|
57
|
+
|
|
58
|
+
const is_valid_number = (val: unknown): val is number =>
|
|
59
|
+
typeof val === `number` && isFinite(val)
|
|
60
|
+
|
|
61
|
+
const extract_numeric_array = (frames: typeof trajectory.frames, prop: string) =>
|
|
62
|
+
frames.map((frame) => frame.metadata?.[prop]).filter(is_valid_number)
|
|
63
|
+
|
|
64
|
+
const format_range = (values: number[], unit = ``, decimals = `.2~f`) => {
|
|
65
|
+
if (!values.length) return null
|
|
32
66
|
if (values.length === 1) {
|
|
33
|
-
|
|
67
|
+
return `${format_num(values[0], decimals)} ${unit}`.trim()
|
|
34
68
|
}
|
|
35
|
-
const [min, max] = [Math.min(...values), Math.max(...values)]
|
|
69
|
+
const [min, max] = [Math.min(...values), Math.max(...values)]
|
|
36
70
|
return `${format_num(min, decimals)} - ${format_num(max, decimals)} ${unit}`
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
71
|
+
.trim()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const safe_item = (
|
|
75
|
+
label: string,
|
|
76
|
+
value: string | null,
|
|
77
|
+
key?: string,
|
|
78
|
+
tooltip?: string,
|
|
79
|
+
): InfoItem | null => value ? { label, value, key, tooltip } : null
|
|
80
|
+
|
|
81
|
+
const is_info_item = (item: unknown): item is InfoItem => Boolean(item)
|
|
82
|
+
|
|
83
|
+
const safe_formula = (structure: AnyStructure) => {
|
|
42
84
|
try {
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return null;
|
|
85
|
+
return get_electro_neg_formula(structure)
|
|
86
|
+
} catch {
|
|
87
|
+
return null
|
|
47
88
|
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Get trajectory info organized by sections
|
|
92
|
+
let info_pane_data = $derived.by(() => {
|
|
93
|
+
if (
|
|
94
|
+
(!trajectory?.frames?.length && !trajectory?.total_frames) ||
|
|
95
|
+
current_step_idx < 0 ||
|
|
96
|
+
current_step_idx >= (trajectory.total_frames ?? trajectory.frames?.length ?? 0)
|
|
97
|
+
) return []
|
|
98
|
+
|
|
55
99
|
// For indexed trajectories, we might not have the current frame loaded
|
|
56
|
-
const current_frame = trajectory.frames?.[current_step_idx]
|
|
57
|
-
const total_frames = trajectory.total_frames ?? trajectory.frames?.length ?? 0
|
|
58
|
-
|
|
100
|
+
const current_frame = trajectory.frames?.[current_step_idx]
|
|
101
|
+
const total_frames = trajectory.total_frames ?? trajectory.frames?.length ?? 0
|
|
102
|
+
|
|
103
|
+
const sections: { title: string; items: InfoItem[] }[] = []
|
|
104
|
+
|
|
59
105
|
// File info section
|
|
60
106
|
const file_items = [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
107
|
+
current_filename &&
|
|
108
|
+
safe_item(
|
|
109
|
+
`Name`,
|
|
110
|
+
current_filename,
|
|
111
|
+
`file-name`,
|
|
112
|
+
current_file_path || undefined,
|
|
113
|
+
),
|
|
114
|
+
file_size && file_size > 0 &&
|
|
115
|
+
safe_item(`File Size`, format_size(file_size), `file-size`),
|
|
116
|
+
file_object?.lastModified &&
|
|
117
|
+
safe_item(
|
|
118
|
+
`Modified`,
|
|
119
|
+
new Date(file_object.lastModified).toLocaleString(),
|
|
120
|
+
`file-modified`,
|
|
121
|
+
),
|
|
122
|
+
trajectory.metadata?.source_format &&
|
|
123
|
+
safe_item(`Format`, String(trajectory.metadata.source_format), `file-format`),
|
|
124
|
+
].filter(is_info_item)
|
|
125
|
+
|
|
70
126
|
if (file_items.length > 0) {
|
|
71
|
-
|
|
127
|
+
sections.push({ title: `File`, items: file_items })
|
|
72
128
|
}
|
|
129
|
+
|
|
73
130
|
// Trajectory info section (always show this)
|
|
74
131
|
const traj_items = [
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
132
|
+
safe_item(
|
|
133
|
+
`Total Frames`,
|
|
134
|
+
`${format_num(total_frames, `.3~s`)} (current: ${
|
|
135
|
+
format_num(current_step_idx + 1, `.3~s`)
|
|
136
|
+
})`,
|
|
137
|
+
`total-frames`,
|
|
138
|
+
),
|
|
139
|
+
trajectory.is_indexed &&
|
|
140
|
+
safe_item(
|
|
141
|
+
`Indexed`,
|
|
142
|
+
`Yes`,
|
|
143
|
+
`indexed-mode`,
|
|
144
|
+
SETTINGS_CONFIG.trajectory.use_indexing.description,
|
|
145
|
+
),
|
|
146
|
+
trajectory.indexed_frames &&
|
|
147
|
+
safe_item(
|
|
148
|
+
`Index Points`,
|
|
149
|
+
`${trajectory.indexed_frames.length}`,
|
|
150
|
+
`index-points`,
|
|
151
|
+
`Number of frames indexed for fast seeking`,
|
|
152
|
+
),
|
|
153
|
+
trajectory.plot_metadata &&
|
|
154
|
+
safe_item(
|
|
155
|
+
`Plot Metadata`,
|
|
156
|
+
`${trajectory.plot_metadata.length} frames`,
|
|
157
|
+
`plot-metadata`,
|
|
158
|
+
`Pre-extracted metadata for plotting`,
|
|
159
|
+
),
|
|
160
|
+
].filter(is_info_item)
|
|
161
|
+
|
|
83
162
|
if (traj_items.length > 0) {
|
|
84
|
-
|
|
163
|
+
sections.push({ title: `Trajectory`, items: traj_items })
|
|
85
164
|
}
|
|
165
|
+
|
|
86
166
|
// Structure info section (only if we have the current frame)
|
|
87
167
|
if (current_frame?.structure?.sites) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
].
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
168
|
+
const { structure } = current_frame
|
|
169
|
+
const lattice = `lattice` in structure ? structure.lattice : null
|
|
170
|
+
const { volume, a, b, c, alpha, beta, gamma } = lattice || {}
|
|
171
|
+
const formula = safe_formula(structure)
|
|
172
|
+
|
|
173
|
+
const structure_items = [
|
|
174
|
+
safe_item(`Atoms`, `${structure.sites.length}`, `atoms`),
|
|
175
|
+
formula && safe_item(`Formula`, String(formula), `formula`),
|
|
176
|
+
is_valid_number(volume) && volume > 0 &&
|
|
177
|
+
safe_item(`Volume`, `${format_num(volume, `.3~s`)} ų`, `volume`),
|
|
178
|
+
is_valid_number(volume) && volume > 0 && structure.sites.length > 0 &&
|
|
179
|
+
safe_item(
|
|
180
|
+
`Density`,
|
|
181
|
+
`${format_num(structure.sites.length / volume, `.4~s`)} atoms/ų`,
|
|
182
|
+
`density`,
|
|
183
|
+
),
|
|
184
|
+
[a, b, c].every(is_valid_number) &&
|
|
185
|
+
safe_item(
|
|
186
|
+
`Cell Lengths`,
|
|
187
|
+
`${format_num(a as number, `.3~f`)}, ${format_num(b as number, `.3~f`)}, ${
|
|
188
|
+
format_num(c as number, `.3~f`)
|
|
189
|
+
} Å`,
|
|
190
|
+
`cell-lengths`,
|
|
191
|
+
),
|
|
192
|
+
[alpha, beta, gamma].every(is_valid_number) &&
|
|
193
|
+
safe_item(
|
|
194
|
+
`Cell Angles`,
|
|
195
|
+
`${format_num(alpha as number, `.2~f`)}°, ${
|
|
196
|
+
format_num(beta as number, `.2~f`)
|
|
197
|
+
}°, ${format_num(gamma as number, `.2~f`)}°`,
|
|
198
|
+
`cell-angles`,
|
|
199
|
+
),
|
|
200
|
+
].filter(is_info_item)
|
|
201
|
+
|
|
202
|
+
if (structure_items.length > 0) {
|
|
203
|
+
sections.push({ title: `Structure`, items: structure_items })
|
|
204
|
+
}
|
|
205
|
+
} else if (trajectory.is_indexed) {
|
|
206
|
+
// For indexed trajectories, show a note that frame data is loaded on demand
|
|
207
|
+
const structure_items = [
|
|
208
|
+
safe_item(
|
|
209
|
+
`Frame Loading`,
|
|
210
|
+
`On-demand`,
|
|
211
|
+
`frame-loading`,
|
|
212
|
+
`Structure data loaded when frame is accessed`,
|
|
213
|
+
),
|
|
214
|
+
].filter(is_info_item)
|
|
215
|
+
|
|
216
|
+
if (structure_items.length > 0) {
|
|
217
|
+
sections.push({ title: `Structure`, items: structure_items })
|
|
218
|
+
}
|
|
116
219
|
}
|
|
220
|
+
|
|
117
221
|
// Energy section (only for regular trajectories with multiple frames)
|
|
118
222
|
if (!trajectory.is_indexed && trajectory.frames.length > 1) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
223
|
+
const energies = extract_numeric_array(trajectory.frames, `energy`)
|
|
224
|
+
if (energies.length > 1) {
|
|
225
|
+
const current_energy = current_frame?.metadata?.energy
|
|
226
|
+
const energy_range = format_range(energies, `eV`, `.3~s`)
|
|
227
|
+
|
|
228
|
+
const energy_items = [
|
|
229
|
+
is_valid_number(current_energy) &&
|
|
230
|
+
safe_item(
|
|
231
|
+
`Current Energy`,
|
|
232
|
+
`${format_num(current_energy, `.3~s`)} eV`,
|
|
233
|
+
`energy-current`,
|
|
234
|
+
),
|
|
235
|
+
energy_range && safe_item(`Energy Range`, energy_range, `energy-range`),
|
|
236
|
+
].filter(is_info_item)
|
|
237
|
+
|
|
238
|
+
if (energy_items.length > 0) {
|
|
239
|
+
sections.push({ title: `Energy`, items: energy_items })
|
|
131
240
|
}
|
|
241
|
+
}
|
|
132
242
|
}
|
|
243
|
+
|
|
133
244
|
// Forces section (only for regular trajectories with multiple frames)
|
|
134
245
|
if (!trajectory.is_indexed && trajectory.frames.length > 1) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
246
|
+
const forces = extract_numeric_array(trajectory.frames, `force_max`)
|
|
247
|
+
if (forces.length > 1) {
|
|
248
|
+
const current_force = current_frame?.metadata?.force_max
|
|
249
|
+
const force_range = format_range(forces, `eV/Å`, `.3~s`)
|
|
250
|
+
|
|
251
|
+
const force_items = [
|
|
252
|
+
is_valid_number(current_force) &&
|
|
253
|
+
safe_item(
|
|
254
|
+
`Max Force`,
|
|
255
|
+
`${format_num(current_force, `.3~s`)} eV/Å`,
|
|
256
|
+
`force-current`,
|
|
257
|
+
),
|
|
258
|
+
force_range && safe_item(`Force Range`, force_range, `force-range`),
|
|
259
|
+
].filter(is_info_item)
|
|
260
|
+
|
|
261
|
+
if (force_items.length > 0) {
|
|
262
|
+
sections.push({ title: `Forces`, items: force_items })
|
|
147
263
|
}
|
|
264
|
+
}
|
|
148
265
|
}
|
|
266
|
+
|
|
149
267
|
// Volume change section (only for regular trajectories)
|
|
150
|
-
if (
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
268
|
+
if (
|
|
269
|
+
!trajectory.is_indexed && current_frame?.structure &&
|
|
270
|
+
trajectory.frames.length > 1
|
|
271
|
+
) {
|
|
272
|
+
const lattice = `lattice` in current_frame.structure
|
|
273
|
+
? current_frame.structure.lattice
|
|
274
|
+
: null
|
|
275
|
+
if (lattice) {
|
|
276
|
+
const volumes = trajectory.frames.map((
|
|
277
|
+
{ structure },
|
|
278
|
+
) => (`lattice` in structure && structure.lattice?.volume))
|
|
279
|
+
.filter(is_valid_number)
|
|
280
|
+
.filter((v) => v > 0)
|
|
281
|
+
|
|
282
|
+
if (volumes.length > 1) {
|
|
283
|
+
const vol_change = (Math.max(...volumes) - Math.min(...volumes)) /
|
|
284
|
+
Math.min(...volumes)
|
|
285
|
+
if (Math.abs(vol_change) > 0.1 && is_valid_number(vol_change)) {
|
|
286
|
+
const vol_items = [safe_item(
|
|
287
|
+
`Volume Change`,
|
|
288
|
+
`${format_num(vol_change, `.2~%`)}`,
|
|
289
|
+
`vol-change`,
|
|
290
|
+
)].filter(is_info_item)
|
|
291
|
+
|
|
292
|
+
if (vol_items.length > 0) {
|
|
293
|
+
sections.push({ title: `Volume`, items: vol_items })
|
|
168
294
|
}
|
|
295
|
+
}
|
|
169
296
|
}
|
|
297
|
+
}
|
|
170
298
|
}
|
|
171
|
-
|
|
172
|
-
|
|
299
|
+
|
|
300
|
+
return sections
|
|
301
|
+
})
|
|
173
302
|
</script>
|
|
174
303
|
|
|
175
304
|
<DraggablePane
|
|
@@ -207,8 +336,8 @@ let info_pane_data = $derived.by(() => {
|
|
|
207
336
|
}
|
|
208
337
|
}}
|
|
209
338
|
>
|
|
210
|
-
<span>{@html label}</span>
|
|
211
|
-
<span title={tooltip} {@attach create_tooltip()}>{@html value}</span>
|
|
339
|
+
<span>{@html sanitize_html(label)}</span>
|
|
340
|
+
<span title={tooltip} {@attach create_tooltip()}>{@html sanitize_html(value)}</span>
|
|
212
341
|
{#if copied_items.has(key ?? label)}
|
|
213
342
|
<Icon
|
|
214
343
|
icon="Check"
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const MAX_SAFE_STRING_LENGTH: number;
|
|
2
|
+
export declare const MAX_METADATA_SIZE: number;
|
|
3
|
+
export declare const LARGE_FILE_THRESHOLD: number;
|
|
4
|
+
export declare const INDEX_SAMPLE_RATE = 100;
|
|
5
|
+
export declare const MAX_BIN_FILE_SIZE: number;
|
|
6
|
+
export declare const MAX_TEXT_FILE_SIZE: number;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Constants for trajectory parsing and large file handling
|
|
2
|
+
export const MAX_SAFE_STRING_LENGTH = 0x1fffffe8 * 0.5; // 50% of JS max string length as safety
|
|
3
|
+
export const MAX_METADATA_SIZE = 50 * 1024 * 1024; // 50MB limit for metadata
|
|
4
|
+
export const LARGE_FILE_THRESHOLD = 400 * 1024 * 1024; // 400MB
|
|
5
|
+
export const INDEX_SAMPLE_RATE = 100; // Default sample rate for frame indexing
|
|
6
|
+
export const MAX_BIN_FILE_SIZE = 100 * 1024 * 1024; // 100MB default for ArrayBuffer files
|
|
7
|
+
export const MAX_TEXT_FILE_SIZE = 50 * 1024 * 1024; // 50MB default for string files
|
|
@@ -15,8 +15,7 @@ export const energy_data_extractor = (frame, _trajectory) => {
|
|
|
15
15
|
`total_energy`,
|
|
16
16
|
];
|
|
17
17
|
for (const field of energy_fields) {
|
|
18
|
-
if (field in frame.metadata &&
|
|
19
|
-
typeof frame.metadata[field] === `number`) {
|
|
18
|
+
if (field in frame.metadata && typeof frame.metadata[field] === `number`) {
|
|
20
19
|
data[field] = frame.metadata[field];
|
|
21
20
|
}
|
|
22
21
|
}
|
|
@@ -36,36 +35,26 @@ export const force_stress_data_extractor = (frame, _trajectory) => {
|
|
|
36
35
|
const force_magnitudes = forces.map((force) => Math.hypot(...force));
|
|
37
36
|
data.force_max = Math.max(...force_magnitudes);
|
|
38
37
|
// Calculate RMS (root mean square) of force magnitudes
|
|
39
|
-
data.force_norm = Math.sqrt(force_magnitudes.reduce((sum, f) => sum + f ** 2, 0) /
|
|
40
|
-
force_magnitudes.length);
|
|
38
|
+
data.force_norm = Math.sqrt(force_magnitudes.reduce((sum, f) => sum + f ** 2, 0) / force_magnitudes.length);
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
else {
|
|
44
42
|
// Fallback to metadata values if forces array not available
|
|
45
|
-
if (frame.metadata.force_max &&
|
|
46
|
-
typeof frame.metadata.force_max === `number`) {
|
|
43
|
+
if (frame.metadata.force_max && typeof frame.metadata.force_max === `number`) {
|
|
47
44
|
data.force_max = frame.metadata.force_max;
|
|
48
45
|
}
|
|
49
46
|
// Prefer force_norm if available, fall back to force_rms
|
|
50
|
-
if (frame.metadata.force_norm &&
|
|
51
|
-
typeof frame.metadata.force_norm === `number`) {
|
|
47
|
+
if (frame.metadata.force_norm && typeof frame.metadata.force_norm === `number`) {
|
|
52
48
|
data.force_norm = frame.metadata.force_norm;
|
|
53
49
|
}
|
|
54
|
-
else if (frame.metadata.force_rms &&
|
|
55
|
-
typeof frame.metadata.force_rms === `number`) {
|
|
50
|
+
else if (frame.metadata.force_rms && typeof frame.metadata.force_rms === `number`) {
|
|
56
51
|
data.force_norm = frame.metadata.force_rms; // Use force_rms as fallback
|
|
57
52
|
}
|
|
58
53
|
}
|
|
59
54
|
// Extract other stress and pressure properties (no duplicates expected)
|
|
60
|
-
const other_stress_fields = [
|
|
61
|
-
`stress_max`,
|
|
62
|
-
`stress_frobenius`,
|
|
63
|
-
`stress_trace`,
|
|
64
|
-
`pressure`,
|
|
65
|
-
];
|
|
55
|
+
const other_stress_fields = [`stress_max`, `stress_frobenius`, `stress_trace`, `pressure`];
|
|
66
56
|
for (const field of other_stress_fields) {
|
|
67
|
-
if (field in frame.metadata &&
|
|
68
|
-
typeof frame.metadata[field] === `number`) {
|
|
57
|
+
if (field in frame.metadata && typeof frame.metadata[field] === `number`) {
|
|
69
58
|
data[field] = frame.metadata[field];
|
|
70
59
|
}
|
|
71
60
|
}
|
|
@@ -92,8 +81,7 @@ export const structural_data_extractor = (frame, _trajectory) => {
|
|
|
92
81
|
// Extract other structural properties, avoiding volume duplicate
|
|
93
82
|
const structural_fields = [`temperature`];
|
|
94
83
|
for (const field of structural_fields) {
|
|
95
|
-
if (field in frame.metadata &&
|
|
96
|
-
typeof frame.metadata[field] === `number`)
|
|
84
|
+
if (field in frame.metadata && typeof frame.metadata[field] === `number`)
|
|
97
85
|
data[field] = frame.metadata[field];
|
|
98
86
|
}
|
|
99
87
|
// Handle density separately - prefer metadata, but calculate if not available
|
|
@@ -109,9 +97,7 @@ export const structural_data_extractor = (frame, _trajectory) => {
|
|
|
109
97
|
}
|
|
110
98
|
}
|
|
111
99
|
// Only use metadata volume if lattice volume is not available
|
|
112
|
-
if (!data.volume &&
|
|
113
|
-
frame.metadata.volume &&
|
|
114
|
-
typeof frame.metadata.volume === `number`) {
|
|
100
|
+
if (!data.volume && frame.metadata.volume && typeof frame.metadata.volume === `number`) {
|
|
115
101
|
data.volume = frame.metadata.volume;
|
|
116
102
|
}
|
|
117
103
|
// Note: pressure is handled by force_stress_data_extractor to avoid duplication
|
|
@@ -136,15 +122,11 @@ function property_varies(trajectory, property_key, tolerance = 1e-10) {
|
|
|
136
122
|
// Check both direct structure properties and metadata
|
|
137
123
|
let value;
|
|
138
124
|
if (`lattice` in frame.structure) {
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
141
|
-
|
|
142
|
-
value = lattice[property_key];
|
|
143
|
-
}
|
|
125
|
+
const lattice_value = frame.structure.lattice[property_key];
|
|
126
|
+
if (typeof lattice_value === `number`)
|
|
127
|
+
value = lattice_value;
|
|
144
128
|
}
|
|
145
|
-
if (value === undefined &&
|
|
146
|
-
frame.metadata &&
|
|
147
|
-
property_key in frame.metadata) {
|
|
129
|
+
if (value === undefined && frame.metadata && property_key in frame.metadata) {
|
|
148
130
|
const metadata_value = frame.metadata[property_key];
|
|
149
131
|
if (typeof metadata_value === `number`) {
|
|
150
132
|
value = metadata_value;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function strip_compression_extensions(filename: string): string;
|
|
2
|
+
export declare const FORMAT_PATTERNS: {
|
|
3
|
+
readonly ase: (data: unknown, filename?: string) => boolean;
|
|
4
|
+
readonly hdf5: (data: unknown, filename?: string) => boolean;
|
|
5
|
+
readonly vasp: (data: string, filename?: string) => boolean;
|
|
6
|
+
readonly xyz_multi: (data: string, filename?: string) => boolean;
|
|
7
|
+
readonly lammpstrj: (data: string, filename?: string) => boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function is_trajectory_file(filename: string, content?: string): boolean;
|