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
|
@@ -1,19 +1,51 @@
|
|
|
1
1
|
// Plotting utilities for trajectory visualization
|
|
2
2
|
import { PLOT_COLORS } from '../colors';
|
|
3
|
-
import { trajectory_property_config } from '../labels';
|
|
3
|
+
import { SCF_AXIS_GROUP, trajectory_property_config, } from '../labels';
|
|
4
4
|
import { get_coefficient_of_variation } from '../math';
|
|
5
5
|
// Configuration constants
|
|
6
6
|
const ENERGY_UNITS = [`eV`, `eV/atom`, `hartree`, `kcal/mol`, `kJ/mol`];
|
|
7
7
|
const ENERGY_PROPERTIES = [`energy`, `total_energy`, `potential_energy`];
|
|
8
8
|
const FORCE_PROPERTIES = [`force`, `fmax`, `f`];
|
|
9
|
-
|
|
9
|
+
// scf_energy_delta lives in its own axis group (see trajectory_property_config), so
|
|
10
|
+
// listing it here only surfaces it when higher-priority groups (energy/force/stress)
|
|
11
|
+
// don't fill both axes — i.e. single-point SCF convergence views.
|
|
12
|
+
const DEFAULT_VISIBLE = new Set([
|
|
13
|
+
`energy`,
|
|
14
|
+
`force_max`,
|
|
15
|
+
`stress_frobenius`,
|
|
16
|
+
`scf_energy_delta`,
|
|
17
|
+
]);
|
|
18
|
+
// Shared per-series line/point styling derived from a single color
|
|
19
|
+
const series_color_styles = (color) => ({
|
|
20
|
+
line_style: { stroke: color, stroke_width: 2 },
|
|
21
|
+
point_style: { fill: color, stroke: color, stroke_width: 1 },
|
|
22
|
+
});
|
|
23
|
+
// Cache the per-frame walk per trajectory so re-renders that only change visible_properties or
|
|
24
|
+
// labels/config reuse it (legend toggles mutate plot_series directly and skip regeneration, so they
|
|
25
|
+
// don't hit this). Keyed by trajectory identity (WeakMap auto-evicts) and invalidated on extractor
|
|
26
|
+
// or frame identity changes.
|
|
27
|
+
const same_frames = (cached_frames, current_frames) => cached_frames.length === current_frames.length &&
|
|
28
|
+
cached_frames.every((frame, frame_idx) => frame === current_frames[frame_idx]);
|
|
29
|
+
const stats_cache = new WeakMap();
|
|
10
30
|
// Unified property extraction and series generation
|
|
11
31
|
export function generate_plot_series(trajectory, data_extractor, options = {}) {
|
|
12
32
|
if (!trajectory?.frames?.length)
|
|
13
33
|
return [];
|
|
14
34
|
const { property_config = trajectory_property_config, colors = PLOT_COLORS, default_visible_properties = DEFAULT_VISIBLE, } = options;
|
|
15
|
-
// Single-pass
|
|
16
|
-
const
|
|
35
|
+
// Single-pass extraction with variance detection, cached per trajectory (see stats_cache above)
|
|
36
|
+
const cached = stats_cache.get(trajectory);
|
|
37
|
+
let property_stats;
|
|
38
|
+
if (cached?.extractor === data_extractor && same_frames(cached.frames, trajectory.frames)) {
|
|
39
|
+
property_stats = cached.stats;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
property_stats = extract_property_statistics(trajectory, data_extractor);
|
|
43
|
+
stats_cache.set(trajectory, {
|
|
44
|
+
extractor: data_extractor,
|
|
45
|
+
frames: [...trajectory.frames],
|
|
46
|
+
stats: property_stats,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
17
49
|
// Create all series
|
|
18
50
|
const all_series = create_series_from_stats(property_stats, property_config, colors);
|
|
19
51
|
// Group by units and assign axes/visibility
|
|
@@ -40,21 +72,14 @@ function extract_property_statistics(trajectory, data_extractor) {
|
|
|
40
72
|
// Convert to final format with variation detection
|
|
41
73
|
const result = new Map();
|
|
42
74
|
for (const [key, stat] of property_stats) {
|
|
43
|
-
|
|
44
|
-
if (n_values <= 1)
|
|
75
|
+
if (stat.values.length <= 1)
|
|
45
76
|
continue;
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const is_energy = lower_key === `energy`;
|
|
49
|
-
const has_variation = coefficient_of_variation >= 1e-6;
|
|
77
|
+
const is_energy = key.toLowerCase() === `energy`;
|
|
78
|
+
const has_variation = get_coefficient_of_variation(stat.values) >= 1e-6;
|
|
50
79
|
// Skip constant properties except energy
|
|
51
80
|
if (!has_variation && !is_energy)
|
|
52
81
|
continue;
|
|
53
|
-
result.set(key, {
|
|
54
|
-
values: stat.values,
|
|
55
|
-
has_variation,
|
|
56
|
-
is_energy,
|
|
57
|
-
});
|
|
82
|
+
result.set(key, { values: stat.values, has_variation, is_energy });
|
|
58
83
|
}
|
|
59
84
|
return result;
|
|
60
85
|
}
|
|
@@ -63,25 +88,25 @@ function create_series_from_stats(property_stats, property_config, colors) {
|
|
|
63
88
|
const all_series = [];
|
|
64
89
|
let color_idx = 0;
|
|
65
90
|
for (const [key, stat] of property_stats) {
|
|
66
|
-
if (!stat)
|
|
67
|
-
continue;
|
|
68
91
|
const n_values = stat.values.length;
|
|
69
|
-
const { clean_label, unit } = extract_label_and_unit(key, property_config);
|
|
92
|
+
const { clean_label, unit, axis_group } = extract_label_and_unit(key, property_config);
|
|
70
93
|
const color = colors[color_idx % colors.length];
|
|
94
|
+
// shared per-series metadata (consumers only read metadata[0]); one object, not n copies
|
|
95
|
+
const series_metadata = {
|
|
96
|
+
series_label: unit ? `${clean_label} (${unit})` : clean_label,
|
|
97
|
+
property_key: key, // Store original property key for robust lookups
|
|
98
|
+
};
|
|
71
99
|
all_series.push({
|
|
72
100
|
x: Array.from({ length: n_values }, (_, idx) => idx),
|
|
73
101
|
y: stat.values,
|
|
74
102
|
label: clean_label,
|
|
75
103
|
unit,
|
|
104
|
+
...(axis_group ? { axis_group } : {}),
|
|
76
105
|
y_axis: `y1`, // Will be reassigned
|
|
77
106
|
visible: false, // Will be assigned
|
|
78
107
|
markers: n_values < 30 ? `line+points` : `line`,
|
|
79
|
-
metadata: Array(n_values)
|
|
80
|
-
|
|
81
|
-
property_key: key, // Store original property key for robust lookups
|
|
82
|
-
}),
|
|
83
|
-
line_style: { stroke: color, stroke_width: 2 },
|
|
84
|
-
point_style: { fill: color, radius: 4, stroke: color, stroke_width: 1 },
|
|
108
|
+
metadata: Array.from({ length: n_values }, () => series_metadata),
|
|
109
|
+
...series_color_styles(color),
|
|
85
110
|
});
|
|
86
111
|
color_idx++;
|
|
87
112
|
}
|
|
@@ -89,10 +114,10 @@ function create_series_from_stats(property_stats, property_config, colors) {
|
|
|
89
114
|
}
|
|
90
115
|
// Group series and assign visibility/axes
|
|
91
116
|
function group_and_assign_series(series, default_visible_properties) {
|
|
92
|
-
// Group by unit
|
|
117
|
+
// Group by axis_group when set (forces a dedicated axis), else by unit
|
|
93
118
|
const unit_map = new Map();
|
|
94
119
|
for (const srs of series) {
|
|
95
|
-
const unit = srs.unit ?? `dimensionless`;
|
|
120
|
+
const unit = srs.axis_group ?? srs.unit ?? `dimensionless`;
|
|
96
121
|
const group = unit_map.get(unit) ?? [];
|
|
97
122
|
group.push(srs);
|
|
98
123
|
unit_map.set(unit, group);
|
|
@@ -101,12 +126,12 @@ function group_and_assign_series(series, default_visible_properties) {
|
|
|
101
126
|
const groups = Array.from(unit_map.entries())
|
|
102
127
|
.map(([unit, group_series]) => {
|
|
103
128
|
const priority = calculate_priority(unit, group_series);
|
|
104
|
-
const
|
|
129
|
+
const is_visible = group_series.some((srs) => {
|
|
105
130
|
const metadata = Array.isArray(srs.metadata) ? srs.metadata[0] : srs.metadata;
|
|
106
131
|
const property_key = (metadata?.property_key || srs.label) ?? ``;
|
|
107
132
|
return is_default_visible(property_key, default_visible_properties);
|
|
108
133
|
});
|
|
109
|
-
return { unit, series: group_series, priority, is_visible
|
|
134
|
+
return { unit, series: group_series, priority, is_visible };
|
|
110
135
|
})
|
|
111
136
|
.sort((a, b) => a.priority - b.priority);
|
|
112
137
|
// Apply 2-group visibility limit
|
|
@@ -146,8 +171,9 @@ function apply_group_assignments(series, unit_groups) {
|
|
|
146
171
|
// Helper functions
|
|
147
172
|
function extract_label_and_unit(key, property_config) {
|
|
148
173
|
const config = property_config[key] || property_config[key.toLowerCase()];
|
|
149
|
-
if (config)
|
|
150
|
-
return { clean_label: config.label, unit: config.unit };
|
|
174
|
+
if (config) {
|
|
175
|
+
return { clean_label: config.label, unit: config.unit, axis_group: config.axis_group };
|
|
176
|
+
}
|
|
151
177
|
return {
|
|
152
178
|
clean_label: key.charAt(0).toUpperCase() + key.slice(1).replaceAll('_', ` `),
|
|
153
179
|
unit: ``,
|
|
@@ -219,19 +245,12 @@ function get_axis_label(axis_series) {
|
|
|
219
245
|
if (visible_series.length === 0)
|
|
220
246
|
return `Value`;
|
|
221
247
|
const unit_groups = new Map();
|
|
222
|
-
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
if (group)
|
|
229
|
-
group.push(label);
|
|
230
|
-
});
|
|
231
|
-
const unit_entries = Array.from(unit_groups.entries());
|
|
232
|
-
if (unit_entries.length === 0)
|
|
233
|
-
return `Value`;
|
|
234
|
-
const [unit, labels] = unit_entries[0];
|
|
248
|
+
for (const srs of visible_series) {
|
|
249
|
+
const labels = unit_groups.get(srs.unit ?? ``) ?? [];
|
|
250
|
+
labels.push(srs.label ?? `Value`);
|
|
251
|
+
unit_groups.set(srs.unit ?? ``, labels);
|
|
252
|
+
}
|
|
253
|
+
const [unit, labels] = [...unit_groups.entries()][0];
|
|
235
254
|
const unique_labels = [...new Set(labels)].sort().join(` / `);
|
|
236
255
|
return unit ? `${unique_labels} (${unit})` : unique_labels;
|
|
237
256
|
}
|
|
@@ -243,14 +262,47 @@ export function generate_axis_labels(plot_series) {
|
|
|
243
262
|
y2: get_axis_label(plot_series.filter((srs) => srs.y_axis === `y2`)),
|
|
244
263
|
};
|
|
245
264
|
}
|
|
265
|
+
// Log-scale heuristic: a y-axis defaults to log scale when every visible series on
|
|
266
|
+
// it is strictly positive AND their combined values span at least this many decades.
|
|
267
|
+
// SCF convergence residuals (|ΔE|, density rms) span 6+ decades and degenerate into
|
|
268
|
+
// hockey sticks on linear axes; plain energies (large negative) stay linear.
|
|
269
|
+
const LOG_SCALE_MIN_DECADE_SPAN = 3;
|
|
270
|
+
const LOG_SCALE_AXIS_GROUPS = new Set([SCF_AXIS_GROUP]);
|
|
271
|
+
export function generate_axis_scale_types(plot_series) {
|
|
272
|
+
const scale_for_axis = (axis) => {
|
|
273
|
+
let min_val = Infinity;
|
|
274
|
+
let max_val = -Infinity;
|
|
275
|
+
for (const srs of plot_series) {
|
|
276
|
+
if (!srs.visible || (srs.y_axis ?? `y1`) !== axis)
|
|
277
|
+
continue;
|
|
278
|
+
if (!srs.axis_group || !LOG_SCALE_AXIS_GROUPS.has(srs.axis_group))
|
|
279
|
+
return `linear`;
|
|
280
|
+
for (const val of srs.y) {
|
|
281
|
+
if (!Number.isFinite(val))
|
|
282
|
+
continue;
|
|
283
|
+
if (val < min_val)
|
|
284
|
+
min_val = val;
|
|
285
|
+
if (val > max_val)
|
|
286
|
+
max_val = val;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (!Number.isFinite(min_val) || min_val <= 0)
|
|
290
|
+
return `linear`;
|
|
291
|
+
return max_val / min_val >= 10 ** LOG_SCALE_MIN_DECADE_SPAN ? `log` : `linear`;
|
|
292
|
+
};
|
|
293
|
+
return { y1: scale_for_axis(`y1`), y2: scale_for_axis(`y2`) };
|
|
294
|
+
}
|
|
246
295
|
export function generate_streaming_plot_series(metadata_list, options = {}) {
|
|
247
296
|
if (metadata_list.length === 0)
|
|
248
297
|
return [];
|
|
249
298
|
const { property_config = trajectory_property_config, colors = PLOT_COLORS, default_visible_properties = DEFAULT_VISIBLE, max_points = 10_000, // 10,000 plot points provides good visual fidelity while maintaining browser performance
|
|
250
299
|
} = options;
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
|
|
300
|
+
const ordered_metadata = [...metadata_list]
|
|
301
|
+
.sort((metadata_a, metadata_b) => metadata_a.frame_number - metadata_b.frame_number)
|
|
302
|
+
.filter((metadata, idx, sorted_metadata) => idx === 0 || metadata.frame_number !== sorted_metadata[idx - 1].frame_number);
|
|
303
|
+
const sampled_metadata = ordered_metadata.length > max_points
|
|
304
|
+
? downsample_metadata(ordered_metadata, max_points)
|
|
305
|
+
: ordered_metadata;
|
|
254
306
|
const all_properties = new Set();
|
|
255
307
|
sampled_metadata.forEach((metadata) => {
|
|
256
308
|
Object.keys(metadata.properties).forEach((prop) => all_properties.add(prop));
|
|
@@ -261,22 +313,27 @@ export function generate_streaming_plot_series(metadata_list, options = {}) {
|
|
|
261
313
|
for (const property_key of all_properties) {
|
|
262
314
|
const data_points = sampled_metadata
|
|
263
315
|
.filter((metadata) => property_key in metadata.properties)
|
|
264
|
-
.map((metadata) => ({
|
|
316
|
+
.map((metadata) => ({
|
|
317
|
+
x: metadata.frame_number,
|
|
318
|
+
y: metadata.properties[property_key],
|
|
319
|
+
}));
|
|
265
320
|
if (data_points.length < 2)
|
|
266
321
|
continue;
|
|
267
322
|
const is_energy = property_key.toLowerCase() === `energy`;
|
|
268
|
-
|
|
323
|
+
const values = data_points.map((point) => point.y);
|
|
324
|
+
if (!is_energy && get_coefficient_of_variation(values) < 1e-6)
|
|
269
325
|
continue;
|
|
270
|
-
const { clean_label, unit } = extract_label_and_unit(property_key, property_config);
|
|
326
|
+
const { clean_label, unit, axis_group } = extract_label_and_unit(property_key, property_config);
|
|
271
327
|
const is_visible = is_default_visible(property_key, default_visible_properties) || color_idx < 2;
|
|
272
328
|
const color = colors[color_idx % colors.length];
|
|
273
329
|
if (is_visible)
|
|
274
|
-
visible_props.push({ property: property_key, unit });
|
|
330
|
+
visible_props.push({ property: property_key, unit, axis_group });
|
|
275
331
|
all_series.push({
|
|
276
332
|
x: data_points.map((point) => point.x),
|
|
277
333
|
y: data_points.map((point) => point.y),
|
|
278
334
|
label: clean_label,
|
|
279
335
|
unit,
|
|
336
|
+
...(axis_group ? { axis_group } : {}),
|
|
280
337
|
y_axis: determine_axis_from_groups(property_key, unit, visible_props),
|
|
281
338
|
visible: is_visible,
|
|
282
339
|
markers: data_points.length < 1000 ? `line+points` : `line`,
|
|
@@ -284,19 +341,16 @@ export function generate_streaming_plot_series(metadata_list, options = {}) {
|
|
|
284
341
|
series_label: unit ? `${clean_label} (${unit})` : clean_label,
|
|
285
342
|
property_key, // Store original property key for robust lookups
|
|
286
343
|
})),
|
|
287
|
-
|
|
288
|
-
point_style: { fill: color, radius: 4, stroke: color, stroke_width: 1 },
|
|
344
|
+
...series_color_styles(color),
|
|
289
345
|
});
|
|
290
346
|
color_idx++;
|
|
291
347
|
}
|
|
292
348
|
return all_series;
|
|
293
349
|
}
|
|
294
|
-
//
|
|
350
|
+
// Down-sample to at most target_points entries (callers guarantee the list is longer)
|
|
295
351
|
function downsample_metadata(metadata_list, target_points) {
|
|
296
352
|
const total_count = metadata_list.length;
|
|
297
|
-
|
|
298
|
-
return metadata_list;
|
|
299
|
-
const points = Math.max(2, Math.min(target_points, total_count));
|
|
353
|
+
const points = Math.max(2, target_points);
|
|
300
354
|
// Evenly spaced indices in [0, total_count-1], guaranteed to include first and last.
|
|
301
355
|
const sampled = [];
|
|
302
356
|
for (let idx = 0; idx < points; idx++) {
|
|
@@ -307,16 +361,11 @@ function downsample_metadata(metadata_list, target_points) {
|
|
|
307
361
|
}
|
|
308
362
|
return sampled;
|
|
309
363
|
}
|
|
310
|
-
function has_significant_variation(values, tolerance = 1e-6) {
|
|
311
|
-
if (values.length <= 1)
|
|
312
|
-
return false;
|
|
313
|
-
const coefficient_of_variation = get_coefficient_of_variation(values);
|
|
314
|
-
return coefficient_of_variation >= tolerance;
|
|
315
|
-
}
|
|
316
364
|
function determine_axis_from_groups(property, unit, visible_properties) {
|
|
317
|
-
const mock_series = visible_properties.map(({ property: prop, unit:
|
|
365
|
+
const mock_series = visible_properties.map(({ property: prop, unit: prop_unit, axis_group }) => ({
|
|
318
366
|
label: prop,
|
|
319
|
-
unit:
|
|
367
|
+
unit: prop_unit,
|
|
368
|
+
...(axis_group ? { axis_group } : {}),
|
|
320
369
|
}));
|
|
321
370
|
const groups = group_and_assign_series(mock_series, new Set([property]));
|
|
322
371
|
const target_group = groups.find((group) => group.series.some((srs) => srs.label === property && srs.unit === unit));
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export declare const is_plain_object: (val: unknown) => val is Record<string, unknown>;
|
|
2
|
+
export declare const clamp01: (value: number) => number;
|
|
2
3
|
export declare function merge_nested<T extends Record<string, unknown>>(obj1: T, obj2?: Partial<T>): T;
|
|
3
4
|
export declare const escape_html: (unsafe_string: string) => string;
|
|
4
5
|
export declare const normalize_unicode_minus: (value: string) => string;
|
|
5
6
|
export declare const normalize_scientific_notation: (value: string) => string;
|
|
7
|
+
export declare const parse_num_token: (token: string) => number;
|
|
8
|
+
export declare const parse_leading_num: (line: string) => number;
|
|
6
9
|
export declare const to_error: (value: unknown) => Error;
|
|
7
10
|
export declare function make_change_detector(): (value: unknown) => boolean;
|
|
8
11
|
export declare function decode_url_safe_base64(encoded: string): string | undefined;
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Check if value is a plain object (not array, null, or other types)
|
|
2
2
|
export const is_plain_object = (val) => typeof val === `object` && val !== null && !Array.isArray(val);
|
|
3
|
+
// Clamp a number to the [0, 1] range.
|
|
4
|
+
export const clamp01 = (value) => Math.max(0, Math.min(1, value));
|
|
3
5
|
// Merge nested objects (1 level deep).
|
|
4
6
|
export function merge_nested(obj1, obj2) {
|
|
5
7
|
const result = { ...obj1, ...obj2 };
|
|
@@ -21,6 +23,11 @@ export const escape_html = (unsafe_string) => unsafe_string
|
|
|
21
23
|
export const normalize_unicode_minus = (value) => value.replaceAll('−', `-`);
|
|
22
24
|
// Normalize scientific notation variants (d/D exponent, Mathematica *^).
|
|
23
25
|
export const normalize_scientific_notation = (value) => normalize_unicode_minus(value).toLowerCase().replaceAll('d', `e`).replaceAll('*^', `e`);
|
|
26
|
+
// Number(token) that treats blank strings as NaN, not 0 like Number(``) does
|
|
27
|
+
export const parse_num_token = (token) => token.trim() === `` ? NaN : Number(token);
|
|
28
|
+
// Parse a line's first whitespace-separated token: tolerates trailing
|
|
29
|
+
// tokens/comments (`1.0 ! scale` -> 1.0) like parseFloat, blank lines are NaN
|
|
30
|
+
export const parse_leading_num = (line) => parse_num_token(line.trim().split(/\s+/)[0]);
|
|
24
31
|
// Coerce an unknown thrown value into an Error (for typed Promise rejections / error callbacks).
|
|
25
32
|
export const to_error = (value) => value instanceof Error ? value : new Error(String(value));
|
|
26
33
|
export function make_change_detector() {
|