matterviz 0.3.7 → 0.4.1
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/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +1 -1
- package/dist/api/optimade.js +32 -26
- package/dist/app.css +0 -3
- package/dist/brillouin/BrillouinZone.svelte +76 -148
- package/dist/brillouin/BrillouinZone.svelte.d.ts +6 -14
- package/dist/brillouin/BrillouinZoneExportPane.svelte +43 -96
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +9 -32
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
- package/dist/brillouin/BrillouinZoneScene.svelte +97 -205
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +4 -23
- package/dist/brillouin/BrillouinZoneTooltip.svelte +16 -25
- package/dist/brillouin/ReciprocalVectors.svelte +39 -0
- package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
- package/dist/brillouin/compute.d.ts +2 -0
- package/dist/brillouin/compute.js +89 -90
- package/dist/brillouin/geometry.d.ts +8 -0
- package/dist/brillouin/geometry.js +57 -0
- package/dist/brillouin/index.d.ts +2 -0
- package/dist/brillouin/index.js +2 -0
- package/dist/brillouin/types.d.ts +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +14 -13
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +109 -203
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +180 -470
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
- package/dist/chempot-diagram/async-compute.svelte.js +3 -1
- package/dist/chempot-diagram/chempot-worker.js +2 -1
- package/dist/chempot-diagram/color.d.ts +3 -6
- package/dist/chempot-diagram/color.js +5 -5
- package/dist/chempot-diagram/compute.d.ts +4 -4
- package/dist/chempot-diagram/compute.js +20 -20
- package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
- package/dist/chempot-diagram/controls-state.svelte.js +42 -0
- package/dist/chempot-diagram/export.d.ts +47 -0
- package/dist/chempot-diagram/export.js +133 -0
- package/dist/chempot-diagram/index.d.ts +1 -0
- package/dist/chempot-diagram/index.js +1 -0
- package/dist/chempot-diagram/pointer.d.ts +0 -10
- package/dist/chempot-diagram/pointer.js +4 -4
- package/dist/chempot-diagram/types.d.ts +3 -3
- package/dist/colors/index.js +8 -7
- package/dist/composition/FormulaFilter.svelte +18 -11
- package/dist/composition/PieChart.svelte +11 -10
- package/dist/composition/chem-sys.d.ts +8 -0
- package/dist/composition/chem-sys.js +86 -0
- package/dist/composition/format.js +7 -4
- package/dist/composition/index.d.ts +1 -0
- package/dist/composition/index.js +1 -0
- package/dist/composition/parse.d.ts +0 -1
- package/dist/composition/parse.js +41 -31
- package/dist/controls.d.ts +1 -0
- package/dist/controls.js +0 -1
- package/dist/convex-hull/ConvexHull.svelte +8 -10
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
- package/dist/convex-hull/ConvexHull2D.svelte +106 -185
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +179 -683
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +183 -687
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +268 -0
- package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
- package/dist/convex-hull/ConvexHullControls.svelte +88 -7
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
- package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
- package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
- package/dist/convex-hull/ConvexHullStats.svelte +36 -175
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +11 -2
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
- package/dist/convex-hull/GasPressureControls.svelte +4 -4
- package/dist/convex-hull/TemperatureSlider.svelte +2 -2
- package/dist/convex-hull/barycentric-coords.d.ts +2 -4
- package/dist/convex-hull/barycentric-coords.js +6 -33
- package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
- package/dist/convex-hull/canvas-interactions.svelte.js +278 -0
- package/dist/convex-hull/demo-temperature.d.ts +1 -1
- package/dist/convex-hull/demo-temperature.js +20 -22
- package/dist/convex-hull/gas-thermodynamics.d.ts +2 -2
- package/dist/convex-hull/gas-thermodynamics.js +22 -30
- package/dist/convex-hull/helpers.d.ts +42 -7
- package/dist/convex-hull/helpers.js +171 -78
- package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
- package/dist/convex-hull/hull-state.svelte.js +124 -0
- package/dist/convex-hull/index.d.ts +10 -8
- package/dist/convex-hull/index.js +7 -2
- package/dist/convex-hull/thermodynamics.js +136 -960
- package/dist/convex-hull/types.d.ts +13 -5
- package/dist/convex-hull/types.js +12 -0
- package/dist/coordination/CoordinationBarPlot.svelte +27 -34
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/element/BohrAtom.svelte +2 -1
- package/dist/element/index.d.ts +4 -0
- package/dist/element/index.js +18 -0
- package/dist/feedback/DragOverlay.svelte +3 -1
- package/dist/feedback/DragOverlay.svelte.d.ts +1 -0
- package/dist/feedback/StatusMessage.svelte +13 -3
- package/dist/fermi-surface/FermiSlice.svelte +13 -5
- package/dist/fermi-surface/FermiSurface.svelte +78 -151
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -14
- package/dist/fermi-surface/FermiSurfaceControls.svelte +1 -1
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +72 -221
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +8 -34
- package/dist/fermi-surface/compute.js +67 -66
- package/dist/fermi-surface/export.js +6 -16
- package/dist/fermi-surface/index.d.ts +0 -1
- package/dist/fermi-surface/index.js +0 -1
- package/dist/fermi-surface/parse.d.ts +1 -1
- package/dist/fermi-surface/parse.js +71 -79
- package/dist/fermi-surface/types.d.ts +3 -2
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +69 -52
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +4 -3
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +3 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
- package/dist/heatmap-matrix/index.d.ts +3 -2
- package/dist/heatmap-matrix/index.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/io/ExportPane.svelte +166 -0
- package/dist/io/ExportPane.svelte.d.ts +17 -0
- package/dist/io/decompress.js +5 -4
- package/dist/io/export.d.ts +9 -5
- package/dist/io/export.js +77 -51
- package/dist/io/fetch.d.ts +2 -1
- package/dist/io/fetch.js +5 -1
- package/dist/io/file-drop.d.ts +8 -1
- package/dist/io/file-drop.js +48 -36
- package/dist/io/index.d.ts +2 -0
- package/dist/io/index.js +10 -0
- package/dist/io/types.d.ts +13 -0
- package/dist/io/url-drop.js +64 -33
- package/dist/isosurface/parse.js +52 -51
- package/dist/isosurface/slice.js +5 -4
- package/dist/isosurface/types.js +1 -1
- package/dist/keyboard.d.ts +3 -0
- package/dist/keyboard.js +23 -0
- package/dist/labels.d.ts +1 -1
- package/dist/labels.js +9 -8
- package/dist/layout/FullscreenButton.svelte +33 -0
- package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
- package/dist/layout/FullscreenToggle.svelte +8 -14
- package/dist/layout/PropertyFilter.svelte +3 -2
- package/dist/layout/SettingsSection.svelte +1 -1
- package/dist/layout/ViewerChrome.svelte +116 -0
- package/dist/layout/ViewerChrome.svelte.d.ts +17 -0
- package/dist/layout/fullscreen.d.ts +4 -0
- package/dist/layout/fullscreen.svelte.d.ts +8 -0
- package/dist/layout/fullscreen.svelte.js +37 -0
- package/dist/layout/index.d.ts +3 -0
- package/dist/layout/index.js +3 -0
- package/dist/layout/json-tree/JsonNode.svelte +1 -1
- package/dist/layout/json-tree/JsonTree.svelte +2 -2
- package/dist/layout/json-tree/utils.js +5 -4
- package/dist/marching-cubes.js +8 -13
- package/dist/math.d.ts +12 -4
- package/dist/math.js +42 -30
- package/dist/overlays/DraggablePane.svelte +4 -4
- package/dist/overlays/index.d.ts +4 -0
- package/dist/periodic-table/PeriodicTable.svelte +27 -15
- package/dist/periodic-table/PropertySelect.svelte +1 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +9 -3
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramControls.svelte +3 -2
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +47 -132
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +1 -1
- package/dist/phase-diagram/build-diagram.js +2 -2
- package/dist/phase-diagram/colors.js +1 -1
- package/dist/phase-diagram/parse.d.ts +2 -1
- package/dist/phase-diagram/parse.js +6 -5
- package/dist/phase-diagram/types.d.ts +1 -1
- package/dist/phase-diagram/utils.d.ts +3 -3
- package/dist/phase-diagram/utils.js +8 -12
- package/dist/plot/{BarPlot.svelte → bar/BarPlot.svelte} +246 -841
- package/dist/plot/{BarPlot.svelte.d.ts → bar/BarPlot.svelte.d.ts} +8 -16
- package/dist/plot/{BarPlotControls.svelte → bar/BarPlotControls.svelte} +6 -5
- package/dist/plot/{BarPlotControls.svelte.d.ts → bar/BarPlotControls.svelte.d.ts} +3 -3
- package/dist/plot/{SpacegroupBarPlot.svelte → bar/SpacegroupBarPlot.svelte} +8 -7
- package/dist/plot/{SpacegroupBarPlot.svelte.d.ts → bar/SpacegroupBarPlot.svelte.d.ts} +1 -1
- package/dist/plot/bar/data.d.ts +40 -0
- package/dist/plot/bar/data.js +154 -0
- package/dist/plot/bar/geometry.d.ts +39 -0
- package/dist/plot/bar/geometry.js +60 -0
- package/dist/plot/bar/index.d.ts +3 -0
- package/dist/plot/bar/index.js +3 -0
- package/dist/plot/box/BoxPlot.svelte +1292 -0
- package/dist/plot/box/BoxPlot.svelte.d.ts +95 -0
- package/dist/plot/box/BoxPlotControls.svelte +109 -0
- package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
- package/dist/plot/box/Violin.svelte +14 -0
- package/dist/plot/box/Violin.svelte.d.ts +70 -0
- package/dist/plot/box/box-plot.d.ts +56 -0
- package/dist/plot/box/box-plot.js +129 -0
- package/dist/plot/box/index.d.ts +5 -0
- package/dist/plot/box/index.js +5 -0
- package/dist/plot/box/kde.d.ts +17 -0
- package/dist/plot/box/kde.js +160 -0
- package/dist/plot/box/quantile.d.ts +3 -0
- package/dist/plot/box/quantile.js +53 -0
- package/dist/plot/{auto-place.d.ts → core/auto-place.d.ts} +1 -1
- package/dist/plot/{auto-place.js → core/auto-place.js} +6 -3
- package/dist/plot/core/axis-utils.d.ts +46 -0
- package/dist/plot/core/axis-utils.js +110 -0
- package/dist/plot/{AxisLabel.svelte → core/components/AxisLabel.svelte} +2 -2
- package/dist/plot/{AxisLabel.svelte.d.ts → core/components/AxisLabel.svelte.d.ts} +1 -1
- package/dist/plot/{ColorBar.svelte → core/components/ColorBar.svelte} +41 -38
- package/dist/plot/{ColorBar.svelte.d.ts → core/components/ColorBar.svelte.d.ts} +7 -6
- package/dist/plot/{ColorScaleSelect.svelte → core/components/ColorScaleSelect.svelte} +4 -3
- package/dist/plot/{ColorScaleSelect.svelte.d.ts → core/components/ColorScaleSelect.svelte.d.ts} +2 -2
- package/dist/plot/core/components/ControlPane.svelte +46 -0
- package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
- package/dist/plot/{FillArea.svelte → core/components/FillArea.svelte} +17 -6
- package/dist/plot/{FillArea.svelte.d.ts → core/components/FillArea.svelte.d.ts} +1 -1
- package/dist/plot/{InteractiveAxisLabel.svelte → core/components/InteractiveAxisLabel.svelte} +3 -3
- package/dist/plot/{InteractiveAxisLabel.svelte.d.ts → core/components/InteractiveAxisLabel.svelte.d.ts} +2 -2
- package/dist/plot/{Line.svelte → core/components/Line.svelte} +33 -15
- package/dist/plot/{Line.svelte.d.ts → core/components/Line.svelte.d.ts} +3 -2
- package/dist/plot/{PlotAxis.svelte → core/components/PlotAxis.svelte} +9 -6
- package/dist/plot/{PlotAxis.svelte.d.ts → core/components/PlotAxis.svelte.d.ts} +5 -3
- package/dist/plot/{PlotControls.svelte → core/components/PlotControls.svelte} +17 -29
- package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
- package/dist/plot/{PlotLegend.svelte → core/components/PlotLegend.svelte} +21 -10
- package/dist/plot/{PlotLegend.svelte.d.ts → core/components/PlotLegend.svelte.d.ts} +3 -2
- package/dist/plot/{PlotTooltip.svelte → core/components/PlotTooltip.svelte} +17 -1
- package/dist/plot/{PlotTooltip.svelte.d.ts → core/components/PlotTooltip.svelte.d.ts} +8 -0
- package/dist/plot/{PortalSelect.svelte → core/components/PortalSelect.svelte} +11 -7
- package/dist/plot/{ReferenceLine.svelte → core/components/ReferenceLine.svelte} +3 -3
- package/dist/plot/{ReferenceLine.svelte.d.ts → core/components/ReferenceLine.svelte.d.ts} +1 -1
- package/dist/plot/{ReferenceLine3D.svelte → core/components/ReferenceLine3D.svelte} +5 -5
- package/dist/plot/{ReferenceLine3D.svelte.d.ts → core/components/ReferenceLine3D.svelte.d.ts} +5 -5
- package/dist/plot/{ReferencePlane.svelte → core/components/ReferencePlane.svelte} +8 -8
- package/dist/plot/{ReferencePlane.svelte.d.ts → core/components/ReferencePlane.svelte.d.ts} +5 -5
- package/dist/plot/{ZeroLines.svelte → core/components/ZeroLines.svelte} +3 -3
- package/dist/plot/{ZeroLines.svelte.d.ts → core/components/ZeroLines.svelte.d.ts} +3 -3
- package/dist/plot/{ZoomRect.svelte → core/components/ZoomRect.svelte} +1 -1
- package/dist/plot/{ZoomRect.svelte.d.ts → core/components/ZoomRect.svelte.d.ts} +1 -1
- package/dist/plot/core/components/index.d.ts +17 -0
- package/dist/plot/core/components/index.js +17 -0
- package/dist/plot/{data-cleaning.d.ts → core/data-cleaning.d.ts} +71 -1
- package/dist/plot/{data-cleaning.js → core/data-cleaning.js} +21 -23
- package/dist/plot/{data-transform.d.ts → core/data-transform.d.ts} +2 -2
- package/dist/plot/{data-transform.js → core/data-transform.js} +3 -3
- package/dist/plot/core/fill-utils.d.ts +34 -0
- package/dist/plot/core/fill-utils.js +391 -0
- package/dist/plot/core/index.d.ts +10 -0
- package/dist/plot/core/index.js +11 -0
- package/dist/plot/core/interactions.d.ts +39 -0
- package/dist/plot/core/interactions.js +209 -0
- package/dist/plot/{layout.d.ts → core/layout.d.ts} +1 -0
- package/dist/plot/{layout.js → core/layout.js} +16 -8
- package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
- package/dist/plot/core/pan-zoom.svelte.js +221 -0
- package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -0
- package/dist/plot/{reference-line.d.ts → core/reference-line.d.ts} +11 -11
- package/dist/plot/{reference-line.js → core/reference-line.js} +29 -42
- package/dist/plot/core/scales.d.ts +40 -0
- package/dist/plot/{scales.js → core/scales.js} +94 -93
- package/dist/plot/core/svg.d.ts +3 -0
- package/dist/plot/core/svg.js +41 -0
- package/dist/plot/{types.d.ts → core/types.d.ts} +36 -85
- package/dist/plot/{types.js → core/types.js} +1 -1
- package/dist/plot/{utils → core/utils}/label-placement.d.ts +3 -3
- package/dist/plot/{utils → core/utils}/label-placement.js +3 -3
- package/dist/plot/core/utils/series-visibility.d.ts +26 -0
- package/dist/plot/{utils → core/utils}/series-visibility.js +29 -2
- package/dist/plot/core/utils.d.ts +12 -0
- package/dist/plot/core/utils.js +27 -0
- package/dist/plot/{Histogram.svelte → histogram/Histogram.svelte} +174 -551
- package/dist/plot/{Histogram.svelte.d.ts → histogram/Histogram.svelte.d.ts} +2 -2
- package/dist/plot/{HistogramControls.svelte → histogram/HistogramControls.svelte} +6 -6
- package/dist/plot/{HistogramControls.svelte.d.ts → histogram/HistogramControls.svelte.d.ts} +4 -4
- package/dist/plot/histogram/index.d.ts +2 -0
- package/dist/plot/histogram/index.js +2 -0
- package/dist/plot/index.d.ts +8 -41
- package/dist/plot/index.js +10 -39
- package/dist/plot/sankey/Sankey.svelte +697 -0
- package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
- package/dist/plot/sankey/SankeyControls.svelte +98 -0
- package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
- package/dist/plot/sankey/index.d.ts +4 -0
- package/dist/plot/sankey/index.js +3 -0
- package/dist/plot/sankey/sankey-types.d.ts +42 -0
- package/dist/plot/sankey/sankey-types.js +4 -0
- package/dist/plot/sankey/sankey.d.ts +52 -0
- package/dist/plot/sankey/sankey.js +189 -0
- package/dist/plot/{BinnedScatterPlot.svelte → scatter/BinnedScatterPlot.svelte} +64 -64
- package/dist/plot/{BinnedScatterPlot.svelte.d.ts → scatter/BinnedScatterPlot.svelte.d.ts} +6 -6
- package/dist/plot/{ElementScatter.svelte → scatter/ElementScatter.svelte} +6 -6
- package/dist/plot/{ElementScatter.svelte.d.ts → scatter/ElementScatter.svelte.d.ts} +2 -2
- package/dist/plot/{ScatterPlot.svelte → scatter/ScatterPlot.svelte} +297 -1008
- package/dist/plot/{ScatterPlot.svelte.d.ts → scatter/ScatterPlot.svelte.d.ts} +10 -18
- package/dist/plot/{ScatterPlotControls.svelte → scatter/ScatterPlotControls.svelte} +6 -5
- package/dist/plot/{ScatterPlotControls.svelte.d.ts → scatter/ScatterPlotControls.svelte.d.ts} +2 -2
- package/dist/plot/{ScatterPoint.svelte → scatter/ScatterPoint.svelte} +7 -7
- package/dist/plot/{ScatterPoint.svelte.d.ts → scatter/ScatterPoint.svelte.d.ts} +3 -3
- package/dist/plot/{adaptive-density.d.ts → scatter/adaptive-density.d.ts} +14 -4
- package/dist/plot/{adaptive-density.js → scatter/adaptive-density.js} +46 -20
- package/dist/plot/{binned-scatter-types.d.ts → scatter/binned-scatter-types.d.ts} +5 -12
- package/dist/plot/scatter/index.d.ts +7 -0
- package/dist/plot/scatter/index.js +5 -0
- package/dist/plot/scatter/scatter-data.d.ts +19 -0
- package/dist/plot/scatter/scatter-data.js +212 -0
- package/dist/plot/{ScatterPlot3D.svelte → scatter-3d/ScatterPlot3D.svelte} +25 -34
- package/dist/plot/{ScatterPlot3D.svelte.d.ts → scatter-3d/ScatterPlot3D.svelte.d.ts} +9 -17
- package/dist/plot/{ScatterPlot3DControls.svelte → scatter-3d/ScatterPlot3DControls.svelte} +14 -14
- package/dist/plot/{ScatterPlot3DControls.svelte.d.ts → scatter-3d/ScatterPlot3DControls.svelte.d.ts} +6 -6
- package/dist/plot/{ScatterPlot3DScene.svelte → scatter-3d/ScatterPlot3DScene.svelte} +129 -128
- package/dist/plot/{ScatterPlot3DScene.svelte.d.ts → scatter-3d/ScatterPlot3DScene.svelte.d.ts} +6 -15
- package/dist/plot/{Surface3D.svelte → scatter-3d/Surface3D.svelte} +7 -6
- package/dist/plot/{Surface3D.svelte.d.ts → scatter-3d/Surface3D.svelte.d.ts} +5 -4
- package/dist/plot/scatter-3d/index.d.ts +4 -0
- package/dist/plot/scatter-3d/index.js +4 -0
- package/dist/plot/sunburst/Sunburst.svelte +1041 -0
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +97 -0
- package/dist/plot/sunburst/SunburstControls.svelte +200 -0
- package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
- package/dist/plot/sunburst/index.d.ts +4 -0
- package/dist/plot/sunburst/index.js +4 -0
- package/dist/plot/sunburst/render.d.ts +34 -0
- package/dist/plot/sunburst/render.js +122 -0
- package/dist/plot/sunburst/sunburst.d.ts +62 -0
- package/dist/plot/sunburst/sunburst.js +269 -0
- package/dist/rdf/RdfPlot.svelte +2 -1
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +11 -24
- package/dist/sanitize.js +14 -3
- package/dist/scene/SceneCamera.svelte +62 -0
- package/dist/scene/SceneCamera.svelte.d.ts +19 -0
- package/dist/scene/bind-renderer.svelte.d.ts +2 -0
- package/dist/scene/bind-renderer.svelte.js +14 -0
- package/dist/scene/index.d.ts +4 -0
- package/dist/scene/index.js +5 -0
- package/dist/scene/props.js +52 -0
- package/dist/scene/types.d.ts +26 -0
- package/dist/scene/types.js +1 -0
- package/dist/settings.d.ts +79 -3
- package/dist/settings.js +321 -1
- package/dist/spectral/Bands.svelte +47 -36
- package/dist/spectral/Bands.svelte.d.ts +6 -6
- package/dist/spectral/BandsAndDos.svelte +23 -25
- package/dist/spectral/BrillouinBandsDos.svelte +42 -30
- package/dist/spectral/Dos.svelte +15 -23
- package/dist/spectral/Dos.svelte.d.ts +4 -3
- package/dist/spectral/helpers.d.ts +8 -6
- package/dist/spectral/helpers.js +137 -65
- package/dist/state.svelte.d.ts +0 -7
- package/dist/state.svelte.js +0 -6
- package/dist/structure/Arrow.svelte +2 -4
- package/dist/structure/AtomLegend.svelte +8 -9
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/CanvasTooltip.svelte +1 -0
- package/dist/structure/CellSelect.svelte +12 -5
- package/dist/structure/CellSelect.svelte.d.ts +2 -1
- package/dist/structure/Cylinder.svelte +12 -8
- package/dist/structure/Cylinder.svelte.d.ts +4 -1
- package/dist/structure/Lattice.svelte +2 -2
- package/dist/structure/Structure.svelte +365 -423
- package/dist/structure/Structure.svelte.d.ts +5 -15
- package/dist/structure/StructureControls.svelte +217 -2
- package/dist/structure/StructureControls.svelte.d.ts +5 -3
- package/dist/structure/StructureExportPane.svelte +54 -156
- package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
- package/dist/structure/StructureInfoPane.svelte +10 -9
- package/dist/structure/StructureInfoPane.svelte.d.ts +5 -5
- package/dist/structure/StructureScene.svelte +376 -208
- package/dist/structure/StructureScene.svelte.d.ts +22 -20
- package/dist/structure/{label-placement.d.ts → atom-label-placement.d.ts} +3 -3
- package/dist/structure/{label-placement.js → atom-label-placement.js} +15 -5
- package/dist/structure/atom-properties.d.ts +1 -1
- package/dist/structure/atom-properties.js +17 -22
- package/dist/structure/bond-order-perception.js +3 -5
- package/dist/structure/bonding.d.ts +4 -0
- package/dist/structure/bonding.js +134 -63
- package/dist/structure/export.d.ts +24 -4
- package/dist/structure/export.js +89 -143
- package/dist/structure/index.d.ts +4 -4
- package/dist/structure/index.js +3 -3
- package/dist/structure/measure.d.ts +3 -2
- package/dist/structure/measure.js +6 -5
- package/dist/structure/parse.d.ts +3 -2
- package/dist/structure/parse.js +419 -438
- package/dist/structure/partial-occupancy.d.ts +0 -1
- package/dist/structure/partial-occupancy.js +1 -1
- package/dist/structure/pbc.d.ts +1 -1
- package/dist/structure/pbc.js +190 -13
- package/dist/structure/polyhedra.d.ts +41 -0
- package/dist/structure/polyhedra.js +602 -0
- package/dist/structure/site.d.ts +4 -0
- package/dist/structure/site.js +1 -0
- package/dist/structure/supercell.js +3 -2
- package/dist/structure/validation.js +5 -6
- package/dist/symmetry/SymmetryElementControls.svelte +69 -0
- package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
- package/dist/symmetry/SymmetryElements.svelte +354 -0
- package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
- package/dist/symmetry/SymmetryStats.svelte +113 -8
- package/dist/symmetry/WyckoffTable.svelte +68 -7
- package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
- package/dist/symmetry/cell-transform.js +7 -14
- package/dist/symmetry/index.d.ts +14 -4
- package/dist/symmetry/index.js +291 -72
- package/dist/symmetry/spacegroups.d.ts +12 -1
- package/dist/symmetry/spacegroups.js +63 -14
- package/dist/symmetry/symmetry-elements.d.ts +33 -0
- package/dist/symmetry/symmetry-elements.js +521 -0
- package/dist/symmetry/wyckoff-db.d.ts +9 -0
- package/dist/symmetry/wyckoff-db.js +87 -0
- package/dist/table/HeatmapTable.svelte +66 -25
- package/dist/table/HeatmapTable.svelte.d.ts +1 -1
- package/dist/table/index.d.ts +1 -3
- package/dist/table/index.js +1 -1
- package/dist/theme/index.js +8 -8
- package/dist/tooltip/KCoords.svelte +45 -0
- package/dist/tooltip/KCoords.svelte.d.ts +8 -0
- package/dist/tooltip/index.d.ts +1 -0
- package/dist/tooltip/index.js +1 -0
- package/dist/trajectory/Trajectory.svelte +123 -100
- package/dist/trajectory/Trajectory.svelte.d.ts +11 -22
- package/dist/trajectory/TrajectoryExportPane.svelte +17 -25
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
- package/dist/trajectory/TrajectoryInfoPane.svelte +5 -3
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
- package/dist/trajectory/constants.js +6 -2
- package/dist/trajectory/extract.js +17 -37
- package/dist/trajectory/format-detect.d.ts +1 -1
- package/dist/trajectory/format-detect.js +27 -19
- package/dist/trajectory/frame-reader.d.ts +0 -1
- package/dist/trajectory/frame-reader.js +63 -162
- package/dist/trajectory/helpers.d.ts +10 -2
- package/dist/trajectory/helpers.js +56 -36
- package/dist/trajectory/index.js +1 -1
- package/dist/trajectory/parse/ase.d.ts +9 -1
- package/dist/trajectory/parse/ase.js +47 -32
- package/dist/trajectory/parse/diagnostics.d.ts +3 -0
- package/dist/trajectory/parse/diagnostics.js +14 -0
- package/dist/trajectory/parse/hdf5.js +1 -1
- package/dist/trajectory/parse/index.d.ts +1 -1
- package/dist/trajectory/parse/index.js +65 -105
- package/dist/trajectory/parse/lammps.d.ts +0 -2
- package/dist/trajectory/parse/lammps.js +8 -6
- package/dist/trajectory/parse/pymatgen.d.ts +2 -0
- package/dist/trajectory/parse/pymatgen.js +74 -0
- package/dist/trajectory/parse/vasp.js +38 -18
- package/dist/trajectory/parse/xyz.d.ts +13 -1
- package/dist/trajectory/parse/xyz.js +102 -94
- package/dist/trajectory/plotting.d.ts +1 -2
- package/dist/trajectory/plotting.js +16 -113
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +7 -5
- package/dist/xrd/XrdPlot.svelte +16 -30
- package/dist/xrd/broadening.d.ts +2 -1
- package/dist/xrd/calc-xrd.js +18 -20
- package/dist/xrd/index.d.ts +2 -2
- package/dist/xrd/parse.js +2 -2
- package/package.json +43 -26
- package/dist/element/data.json +0 -11864
- package/dist/fermi-surface/marching-cubes.d.ts +0 -2
- package/dist/fermi-surface/marching-cubes.js +0 -2
- package/dist/plot/PlotControls.svelte.d.ts +0 -4
- package/dist/plot/axis-utils.d.ts +0 -19
- package/dist/plot/axis-utils.js +0 -78
- package/dist/plot/defaults.d.ts +0 -19
- package/dist/plot/defaults.js +0 -9
- package/dist/plot/fill-utils.d.ts +0 -46
- package/dist/plot/fill-utils.js +0 -322
- package/dist/plot/hover-lock.svelte.d.ts +0 -14
- package/dist/plot/hover-lock.svelte.js +0 -46
- package/dist/plot/interactions.d.ts +0 -12
- package/dist/plot/interactions.js +0 -101
- package/dist/plot/scales.d.ts +0 -48
- package/dist/plot/svg.d.ts +0 -1
- package/dist/plot/svg.js +0 -11
- package/dist/plot/utils/series-visibility.d.ts +0 -15
- package/dist/plot/utils.d.ts +0 -1
- package/dist/plot/utils.js +0 -14
- /package/dist/plot/{PortalSelect.svelte.d.ts → core/components/PortalSelect.svelte.d.ts} +0 -0
- /package/dist/plot/{binned-scatter-types.js → scatter/binned-scatter-types.js} +0 -0
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
lang="ts"
|
|
3
3
|
generics="Metadata extends Record<string, unknown> = Record<string, unknown>"
|
|
4
4
|
>
|
|
5
|
-
import type {
|
|
6
|
-
import { FullscreenToggle } from '
|
|
7
|
-
import type { Vec2, Vec3 } from '
|
|
8
|
-
import { ColorBar, PlotLegend } from '
|
|
9
|
-
import { get_series_color } from '
|
|
10
|
-
import type { Sides } from '
|
|
5
|
+
import type { D3InterpolateName } from '../../colors'
|
|
6
|
+
import { FullscreenToggle } from '../../layout'
|
|
7
|
+
import type { Vec2, Vec3 } from '../../math'
|
|
8
|
+
import { ColorBar, PlotLegend } from '..'
|
|
9
|
+
import { get_series_color } from '../core/data-transform'
|
|
10
|
+
import type { Sides } from '../core/layout'
|
|
11
11
|
import type {
|
|
12
12
|
AxisConfig3D,
|
|
13
13
|
CameraProjection3D,
|
|
14
|
+
ColorScaleConfig,
|
|
14
15
|
ControlsConfig3D,
|
|
15
16
|
DataSeries3D,
|
|
16
17
|
DisplayConfig3D,
|
|
@@ -20,9 +21,10 @@
|
|
|
20
21
|
RefPlane,
|
|
21
22
|
ScaleType,
|
|
22
23
|
Scatter3DHandlerEvent,
|
|
24
|
+
SizeScaleConfig,
|
|
23
25
|
StyleOverrides3D,
|
|
24
26
|
Surface3DConfig,
|
|
25
|
-
} from '
|
|
27
|
+
} from '../core/types'
|
|
26
28
|
import { Canvas } from '@threlte/core'
|
|
27
29
|
import * as extras from '@threlte/extras'
|
|
28
30
|
import { onMount } from 'svelte'
|
|
@@ -30,7 +32,7 @@
|
|
|
30
32
|
import type { HTMLAttributes } from 'svelte/elements'
|
|
31
33
|
import { SvelteMap, SvelteSet } from 'svelte/reactivity'
|
|
32
34
|
import type { Camera, Scene } from 'three'
|
|
33
|
-
import { create_color_scale } from '
|
|
35
|
+
import { calculate_domain, create_color_scale } from '../core/scales'
|
|
34
36
|
import ScatterPlot3DControls from './ScatterPlot3DControls.svelte'
|
|
35
37
|
import ScatterPlot3DScene from './ScatterPlot3DScene.svelte'
|
|
36
38
|
|
|
@@ -116,17 +118,9 @@
|
|
|
116
118
|
z_axis?: AxisConfig3D
|
|
117
119
|
display?: DisplayConfig3D
|
|
118
120
|
styles?: StyleOverrides3D
|
|
119
|
-
color_scale?:
|
|
120
|
-
type?: ScaleType
|
|
121
|
-
scheme?: D3ColorSchemeName | D3InterpolateName
|
|
122
|
-
value_range?: [number, number]
|
|
123
|
-
} | D3InterpolateName
|
|
121
|
+
color_scale?: ColorScaleConfig | D3InterpolateName
|
|
124
122
|
color_bar?: ComponentProps<typeof ColorBar> & { margin?: number | Sides } | null
|
|
125
|
-
size_scale?:
|
|
126
|
-
type?: ScaleType
|
|
127
|
-
radius_range?: [number, number]
|
|
128
|
-
value_range?: [number, number]
|
|
129
|
-
}
|
|
123
|
+
size_scale?: SizeScaleConfig
|
|
130
124
|
legend?: LegendConfig | null
|
|
131
125
|
camera_position?: Vec3
|
|
132
126
|
camera_projection?: CameraProjection3D
|
|
@@ -175,11 +169,14 @@
|
|
|
175
169
|
id_counts.set(srs.id, (id_counts.get(srs.id) ?? 0) + 1)
|
|
176
170
|
}
|
|
177
171
|
}
|
|
172
|
+
// Prefix classes stay disjoint: `idx:` keys have `x` at index 2 where `id:` keys
|
|
173
|
+
// have `:`, and `dup:` keys differ in first char. Within a class, idx is unique
|
|
174
|
+
// and bare ids are only used when they occur exactly once.
|
|
178
175
|
return series.map((srs, idx) => {
|
|
179
|
-
if (srs?.id === undefined || srs.id === ``) return
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
176
|
+
if (srs?.id === undefined || srs.id === ``) return `idx:${idx}`
|
|
177
|
+
// include typeof so numeric/string ids (1 vs "1") don't collide on the same key
|
|
178
|
+
const id_key = `${typeof srs.id}:${String(srs.id)}`
|
|
179
|
+
return id_counts.get(srs.id) === 1 ? `id:${id_key}` : `dup:${idx}:${id_key}`
|
|
183
180
|
})
|
|
184
181
|
})
|
|
185
182
|
|
|
@@ -227,15 +224,7 @@
|
|
|
227
224
|
),
|
|
228
225
|
)
|
|
229
226
|
|
|
230
|
-
let auto_color_range = $derived
|
|
231
|
-
if (all_color_values.length === 0) return [0, 1]
|
|
232
|
-
let [min, max] = [Infinity, -Infinity]
|
|
233
|
-
for (const val of all_color_values) {
|
|
234
|
-
if (val < min) min = val
|
|
235
|
-
if (val > max) max = val
|
|
236
|
-
}
|
|
237
|
-
return [min, max]
|
|
238
|
-
})
|
|
227
|
+
let auto_color_range = $derived(calculate_domain(all_color_values))
|
|
239
228
|
|
|
240
229
|
let color_scale_fn = $derived(
|
|
241
230
|
create_color_scale(normalized_color_scale, auto_color_range),
|
|
@@ -342,7 +331,7 @@
|
|
|
342
331
|
{z_axis}
|
|
343
332
|
{display}
|
|
344
333
|
{styles}
|
|
345
|
-
|
|
334
|
+
{color_scale_fn}
|
|
346
335
|
{size_scale}
|
|
347
336
|
{camera_position}
|
|
348
337
|
{camera_projection}
|
|
@@ -462,8 +451,10 @@
|
|
|
462
451
|
border-radius: 0;
|
|
463
452
|
max-height: none !important;
|
|
464
453
|
overflow: hidden;
|
|
465
|
-
/*
|
|
466
|
-
|
|
454
|
+
/* border-top (not padding-top): bind:clientHeight includes padding but excludes
|
|
455
|
+
borders - padding made the chart overflow + clip its bottom 2em (x-axis title) */
|
|
456
|
+
border-top: var(--plot-fullscreen-padding-top, 2em) solid
|
|
457
|
+
var(--scatter3d-bg, var(--plot-bg, transparent));
|
|
467
458
|
box-sizing: border-box;
|
|
468
459
|
}
|
|
469
460
|
/* Threlte Canvas container needs flex: 1 to fill available space in flex layout
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { Vec3 } from '
|
|
3
|
-
import { ColorBar } from '
|
|
4
|
-
import type { Sides } from '
|
|
5
|
-
import type { AxisConfig3D, CameraProjection3D, ControlsConfig3D, DataSeries3D, DisplayConfig3D, InternalPoint3D, LegendConfig, RefLine3D, RefPlane,
|
|
1
|
+
import type { D3InterpolateName } from '../../colors';
|
|
2
|
+
import type { Vec3 } from '../../math';
|
|
3
|
+
import { ColorBar } from '..';
|
|
4
|
+
import type { Sides } from '../core/layout';
|
|
5
|
+
import type { AxisConfig3D, CameraProjection3D, ColorScaleConfig, ControlsConfig3D, DataSeries3D, DisplayConfig3D, InternalPoint3D, LegendConfig, RefLine3D, RefPlane, Scatter3DHandlerEvent, SizeScaleConfig, StyleOverrides3D, Surface3DConfig } from '../core/types';
|
|
6
6
|
import * as extras from '@threlte/extras';
|
|
7
7
|
import type { ComponentProps, Snippet } from 'svelte';
|
|
8
8
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
@@ -18,19 +18,11 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
|
|
|
18
18
|
z_axis?: AxisConfig3D;
|
|
19
19
|
display?: DisplayConfig3D;
|
|
20
20
|
styles?: StyleOverrides3D;
|
|
21
|
-
color_scale?:
|
|
22
|
-
type?: ScaleType;
|
|
23
|
-
scheme?: D3ColorSchemeName | D3InterpolateName;
|
|
24
|
-
value_range?: [number, number];
|
|
25
|
-
} | D3InterpolateName;
|
|
21
|
+
color_scale?: ColorScaleConfig | D3InterpolateName;
|
|
26
22
|
color_bar?: (ComponentProps<typeof ColorBar> & {
|
|
27
23
|
margin?: number | Sides;
|
|
28
24
|
}) | null;
|
|
29
|
-
size_scale?:
|
|
30
|
-
type?: ScaleType;
|
|
31
|
-
radius_range?: [number, number];
|
|
32
|
-
value_range?: [number, number];
|
|
33
|
-
};
|
|
25
|
+
size_scale?: SizeScaleConfig;
|
|
34
26
|
legend?: LegendConfig | null;
|
|
35
27
|
camera_position?: Vec3;
|
|
36
28
|
camera_projection?: CameraProjection3D;
|
|
@@ -72,7 +64,7 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
|
|
|
72
64
|
controls_extra?: Snippet;
|
|
73
65
|
};
|
|
74
66
|
exports: {};
|
|
75
|
-
bindings: "fullscreen" | "
|
|
67
|
+
bindings: "fullscreen" | "wrapper" | "hovered" | "scene" | "camera" | "orbit_controls" | "camera_position" | "tooltip_point";
|
|
76
68
|
slots: {};
|
|
77
69
|
events: {};
|
|
78
70
|
};
|
|
@@ -80,7 +72,7 @@ declare class __sveltets_Render<Metadata extends Record<string, unknown> = Recor
|
|
|
80
72
|
props(): ReturnType<typeof $$render<Metadata>>['props'];
|
|
81
73
|
events(): ReturnType<typeof $$render<Metadata>>['events'];
|
|
82
74
|
slots(): ReturnType<typeof $$render<Metadata>>['slots'];
|
|
83
|
-
bindings(): "fullscreen" | "
|
|
75
|
+
bindings(): "fullscreen" | "wrapper" | "hovered" | "scene" | "camera" | "orbit_controls" | "camera_position" | "tooltip_point";
|
|
84
76
|
exports(): {};
|
|
85
77
|
}
|
|
86
78
|
interface $$IsomorphicComponent {
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { PaneProps, PaneToggleProps } from '../../overlays'
|
|
2
3
|
// NOTE: Axis config objects must be reassigned (not mutated) to trigger $bindable reactivity.
|
|
3
4
|
// Pattern: `x_axis = { ...x_axis, prop: value }` instead of `x_axis.prop = value`
|
|
4
|
-
import { SettingsSection } from '
|
|
5
|
-
import
|
|
5
|
+
import { SettingsSection } from '../../layout'
|
|
6
|
+
import type { Vec2 } from '../../math'
|
|
7
|
+
import DraggablePane from '../../overlays/DraggablePane.svelte'
|
|
6
8
|
import type {
|
|
7
9
|
AxisConfig3D,
|
|
8
10
|
CameraProjection3D,
|
|
9
11
|
DataSeries3D,
|
|
10
12
|
DisplayConfig3D,
|
|
11
13
|
Surface3DConfig,
|
|
12
|
-
} from '
|
|
14
|
+
} from '../core/types'
|
|
15
|
+
import { calculate_domain } from '../core/scales'
|
|
16
|
+
import { unique_id } from '../core/utils'
|
|
13
17
|
import type { ComponentProps, Snippet } from 'svelte'
|
|
14
18
|
|
|
15
19
|
// Unique ID prefix to avoid conflicts when multiple instances on same page
|
|
16
|
-
const uid =
|
|
20
|
+
const uid = unique_id(`scatter3d-ctrl`)
|
|
17
21
|
|
|
18
22
|
let {
|
|
19
23
|
show = $bindable(false),
|
|
@@ -38,19 +42,15 @@
|
|
|
38
42
|
auto_rotate?: number
|
|
39
43
|
series?: DataSeries3D[]
|
|
40
44
|
surfaces?: Surface3DConfig[]
|
|
41
|
-
toggle_props?:
|
|
42
|
-
pane_props?:
|
|
45
|
+
toggle_props?: PaneToggleProps
|
|
46
|
+
pane_props?: PaneProps
|
|
43
47
|
children?: Snippet
|
|
44
48
|
} = $props()
|
|
45
49
|
|
|
46
|
-
// Calculate auto ranges for reset
|
|
47
|
-
function calc_auto_range(values: number[]):
|
|
50
|
+
// Calculate auto ranges for reset (5% padding, 0.5 when all values coincide)
|
|
51
|
+
function calc_auto_range(values: number[]): Vec2 {
|
|
48
52
|
if (values.length === 0) return [0, 1]
|
|
49
|
-
|
|
50
|
-
for (const val of values) {
|
|
51
|
-
if (val < min_val) min_val = val
|
|
52
|
-
else if (val > max_val) max_val = val
|
|
53
|
-
}
|
|
53
|
+
const [min_val, max_val] = calculate_domain(values)
|
|
54
54
|
const padding = (max_val - min_val) * 0.05 || 0.5
|
|
55
55
|
return [min_val - padding, max_val + padding]
|
|
56
56
|
}
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
type AxisEntry = {
|
|
97
97
|
name: string
|
|
98
98
|
axis: AxisConfig3D
|
|
99
|
-
auto_range:
|
|
99
|
+
auto_range: Vec2
|
|
100
100
|
set: (val: AxisConfig3D) => void
|
|
101
101
|
}
|
|
102
102
|
const axes = $derived<AxisEntry[]>([
|
package/dist/plot/{ScatterPlot3DControls.svelte.d.ts → scatter-3d/ScatterPlot3DControls.svelte.d.ts}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { AxisConfig3D, CameraProjection3D, DataSeries3D, DisplayConfig3D, Surface3DConfig } from '
|
|
3
|
-
import type {
|
|
1
|
+
import type { PaneProps, PaneToggleProps } from '../../overlays';
|
|
2
|
+
import type { AxisConfig3D, CameraProjection3D, DataSeries3D, DisplayConfig3D, Surface3DConfig } from '../core/types';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
4
|
type $$ComponentProps = {
|
|
5
5
|
show?: boolean;
|
|
6
6
|
x_axis?: AxisConfig3D;
|
|
@@ -11,10 +11,10 @@ type $$ComponentProps = {
|
|
|
11
11
|
auto_rotate?: number;
|
|
12
12
|
series?: DataSeries3D[];
|
|
13
13
|
surfaces?: Surface3DConfig[];
|
|
14
|
-
toggle_props?:
|
|
15
|
-
pane_props?:
|
|
14
|
+
toggle_props?: PaneToggleProps;
|
|
15
|
+
pane_props?: PaneProps;
|
|
16
16
|
children?: Snippet;
|
|
17
17
|
};
|
|
18
|
-
declare const ScatterPlot3DControls: import("svelte").Component<$$ComponentProps, {}, "display" | "show" | "
|
|
18
|
+
declare const ScatterPlot3DControls: import("svelte").Component<$$ComponentProps, {}, "display" | "show" | "y_axis" | "x_axis" | "camera_projection" | "auto_rotate" | "z_axis">;
|
|
19
19
|
type ScatterPlot3DControls = ReturnType<typeof ScatterPlot3DControls>;
|
|
20
20
|
export default ScatterPlot3DControls;
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
lang="ts"
|
|
3
3
|
generics="Metadata extends Record<string, unknown> = Record<string, unknown>"
|
|
4
4
|
>
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import type { Vec2, Vec3 } from '../math'
|
|
5
|
+
import { format_num } from '../../labels'
|
|
6
|
+
import type { Vec2, Vec3 } from '../../math'
|
|
8
7
|
import type {
|
|
9
8
|
AxisConfig3D,
|
|
10
9
|
CameraProjection3D,
|
|
@@ -13,12 +12,13 @@
|
|
|
13
12
|
InternalPoint3D,
|
|
14
13
|
RefLine3D,
|
|
15
14
|
RefPlane,
|
|
16
|
-
ScaleType,
|
|
17
15
|
Scatter3DHandlerEvent,
|
|
16
|
+
SizeScaleConfig,
|
|
18
17
|
StyleOverrides3D,
|
|
19
18
|
Surface3DConfig,
|
|
20
|
-
} from '
|
|
21
|
-
import {
|
|
19
|
+
} from '../core/types'
|
|
20
|
+
import { bind_renderer } from '../../scene'
|
|
21
|
+
import { T, useTask } from '@threlte/core'
|
|
22
22
|
import * as extras from '@threlte/extras'
|
|
23
23
|
import { scaleLinear } from 'd3-scale'
|
|
24
24
|
import { type ComponentProps, onDestroy, type Snippet, untrack } from 'svelte'
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
import { Line2 } from 'three/examples/jsm/lines/Line2.js'
|
|
28
28
|
import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js'
|
|
29
29
|
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js'
|
|
30
|
-
import { get_series_color } from '
|
|
31
|
-
import { normalize_to_scene } from '
|
|
32
|
-
import ReferenceLine3D from '
|
|
33
|
-
import ReferencePlane from '
|
|
34
|
-
import {
|
|
30
|
+
import { get_series_color } from '../core/data-transform'
|
|
31
|
+
import { normalize_to_scene } from '../core/reference-line'
|
|
32
|
+
import ReferenceLine3D from '../core/components/ReferenceLine3D.svelte'
|
|
33
|
+
import ReferencePlane from '../core/components/ReferencePlane.svelte'
|
|
34
|
+
import { create_size_scale } from '../core/scales'
|
|
35
35
|
import Surface3D from './Surface3D.svelte'
|
|
36
36
|
|
|
37
37
|
let {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
surfaces = [],
|
|
46
46
|
ref_lines = [],
|
|
47
47
|
ref_planes = [],
|
|
48
|
-
|
|
48
|
+
color_scale_fn = () => get_series_color(0),
|
|
49
49
|
size_scale = { type: `linear`, radius_range: [0.05, 0.2] },
|
|
50
50
|
camera_position = [10, 10, 10] as Vec3,
|
|
51
51
|
camera_projection = `perspective` as CameraProjection3D,
|
|
@@ -81,16 +81,9 @@
|
|
|
81
81
|
surfaces?: Surface3DConfig[]
|
|
82
82
|
ref_lines?: RefLine3D[]
|
|
83
83
|
ref_planes?: RefPlane[]
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
value_range?: [number, number]
|
|
88
|
-
}
|
|
89
|
-
size_scale?: {
|
|
90
|
-
type?: ScaleType
|
|
91
|
-
radius_range?: [number, number]
|
|
92
|
-
value_range?: [number, number]
|
|
93
|
-
}
|
|
84
|
+
// Color scale function for color_values (computed once by the ScatterPlot3D wrapper)
|
|
85
|
+
color_scale_fn?: (value: number) => string
|
|
86
|
+
size_scale?: SizeScaleConfig
|
|
94
87
|
camera_position?: Vec3
|
|
95
88
|
camera_projection?: CameraProjection3D
|
|
96
89
|
auto_rotate?: number
|
|
@@ -116,10 +109,10 @@
|
|
|
116
109
|
height?: number
|
|
117
110
|
} = $props()
|
|
118
111
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
scene =
|
|
122
|
-
camera =
|
|
112
|
+
// Mirrors scene/camera into bindable props and tags the canvas so export_canvas_as_png can re-render at export DPI
|
|
113
|
+
bind_renderer((threlte_scene, threlte_camera) => {
|
|
114
|
+
scene = threlte_scene
|
|
115
|
+
camera = threlte_camera
|
|
123
116
|
})
|
|
124
117
|
|
|
125
118
|
extras.interactivity()
|
|
@@ -182,24 +175,28 @@
|
|
|
182
175
|
function sample_surface(
|
|
183
176
|
surface: Surface3DConfig,
|
|
184
177
|
): { x: number; y: number; z: number }[] {
|
|
185
|
-
const
|
|
178
|
+
const grid_steps = 10
|
|
186
179
|
const pts: { x: number; y: number; z: number }[] = []
|
|
187
180
|
if (surface.type === `grid` && surface.z_fn) {
|
|
188
181
|
const [x0, x1] = surface.x_range ?? [-1, 1]
|
|
189
182
|
const [y0, y1] = surface.y_range ?? [-1, 1]
|
|
190
|
-
for (let
|
|
191
|
-
for (let
|
|
192
|
-
const x = x0 + (
|
|
183
|
+
for (let idx_x = 0; idx_x <= grid_steps; idx_x++) {
|
|
184
|
+
for (let idx_y = 0; idx_y <= grid_steps; idx_y++) {
|
|
185
|
+
const x = x0 + (idx_x / grid_steps) * (x1 - x0),
|
|
186
|
+
y = y0 + (idx_y / grid_steps) * (y1 - y0)
|
|
193
187
|
pts.push({ x, y, z: surface.z_fn(x, y) })
|
|
194
188
|
}
|
|
195
189
|
}
|
|
196
190
|
} else if (surface.type === `parametric` && surface.parametric_fn) {
|
|
197
191
|
const [u0, u1] = surface.u_range ?? [0, 1]
|
|
198
192
|
const [v0, v1] = surface.v_range ?? [0, 1]
|
|
199
|
-
for (let
|
|
200
|
-
for (let
|
|
193
|
+
for (let idx_u = 0; idx_u <= grid_steps; idx_u++) {
|
|
194
|
+
for (let idx_v = 0; idx_v <= grid_steps; idx_v++) {
|
|
201
195
|
pts.push(
|
|
202
|
-
surface.parametric_fn(
|
|
196
|
+
surface.parametric_fn(
|
|
197
|
+
u0 + (idx_u / grid_steps) * (u1 - u0),
|
|
198
|
+
v0 + (idx_v / grid_steps) * (v1 - v0),
|
|
199
|
+
),
|
|
203
200
|
)
|
|
204
201
|
}
|
|
205
202
|
}
|
|
@@ -209,15 +206,14 @@
|
|
|
209
206
|
return pts.filter((pt) => isFinite(pt.x) && isFinite(pt.y) && isFinite(pt.z))
|
|
210
207
|
}
|
|
211
208
|
|
|
212
|
-
// Compute axis range with D3's nice()
|
|
209
|
+
// Compute axis range with D3's nice(); data_min/data_max are the finite extent (Infinity/-Infinity when empty)
|
|
213
210
|
function compute_range(
|
|
214
|
-
|
|
211
|
+
[data_min, data_max]: Vec2,
|
|
215
212
|
range?: [number | null, number | null],
|
|
216
213
|
): Vec2 {
|
|
217
214
|
if (range?.[0] != null && range?.[1] != null) return range as Vec2
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
let [min, max] = [Math.min(...valid), Math.max(...valid)]
|
|
215
|
+
if (data_min > data_max) return [0, 1] // no finite values
|
|
216
|
+
let [min, max] = [data_min, data_max]
|
|
221
217
|
const pad = min === max
|
|
222
218
|
? (min === 0 ? 1 : Math.abs(min * 0.1))
|
|
223
219
|
: (max - min) * 0.05
|
|
@@ -227,49 +223,39 @@
|
|
|
227
223
|
.domain() as Vec2
|
|
228
224
|
}
|
|
229
225
|
|
|
230
|
-
// Collect xyz
|
|
226
|
+
// Collect xyz extents from points and surfaces in one pass (no intermediate arrays)
|
|
231
227
|
let surface_samples = $derived(surfaces.flatMap(sample_surface))
|
|
232
|
-
let
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
228
|
+
let data_extents = $derived.by(() => {
|
|
229
|
+
const extents = {
|
|
230
|
+
x: [Infinity, -Infinity] as Vec2,
|
|
231
|
+
y: [Infinity, -Infinity] as Vec2,
|
|
232
|
+
z: [Infinity, -Infinity] as Vec2,
|
|
233
|
+
}
|
|
234
|
+
for (const points of [all_points, surface_samples]) {
|
|
235
|
+
for (const pt of points) {
|
|
236
|
+
for (const axis of [`x`, `y`, `z`] as const) {
|
|
237
|
+
const val = pt[axis]
|
|
238
|
+
if (!isFinite(val)) continue
|
|
239
|
+
const extent = extents[axis]
|
|
240
|
+
if (val < extent[0]) extent[0] = val
|
|
241
|
+
if (val > extent[1]) extent[1] = val
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return extents
|
|
246
|
+
})
|
|
247
|
+
let x_range = $derived(compute_range(data_extents.x, x_axis.range))
|
|
248
|
+
let y_range = $derived(compute_range(data_extents.y, y_axis.range))
|
|
249
|
+
let z_range = $derived(compute_range(data_extents.z, z_axis.range))
|
|
250
250
|
|
|
251
251
|
const normalize_x = (value: number) => normalize_to_scene(value, x_range, scene_x)
|
|
252
252
|
const normalize_y = (value: number) => normalize_to_scene(value, y_range, scene_y)
|
|
253
253
|
const normalize_z = (value: number) => normalize_to_scene(value, z_range, scene_z)
|
|
254
254
|
|
|
255
|
-
//
|
|
256
|
-
let all_color_values = $derived(
|
|
257
|
-
all_points.map((pt) => pt.color_value).filter((val): val is number => val != null),
|
|
258
|
-
)
|
|
259
|
-
let auto_color_range: [number, number] = $derived.by(() => {
|
|
260
|
-
if (!all_color_values.length) return [0, 1]
|
|
261
|
-
let min = all_color_values[0]
|
|
262
|
-
let max = all_color_values[0]
|
|
263
|
-
for (const val of all_color_values) {
|
|
264
|
-
if (val < min) min = val
|
|
265
|
-
else if (val > max) max = val
|
|
266
|
-
}
|
|
267
|
-
return [min, max]
|
|
268
|
-
})
|
|
255
|
+
// Size scale (the color scale is computed by the wrapper and passed as a prop)
|
|
269
256
|
let all_size_values = $derived(
|
|
270
257
|
all_points.map((pt) => pt.size_value).filter((val): val is number => val != null),
|
|
271
258
|
)
|
|
272
|
-
let color_scale_fn = $derived(create_color_scale(color_scale, auto_color_range))
|
|
273
259
|
let size_scale_fn = $derived(create_size_scale(size_scale, all_size_values))
|
|
274
260
|
|
|
275
261
|
// Process points with normalized positions
|
|
@@ -331,83 +317,98 @@
|
|
|
331
317
|
)
|
|
332
318
|
|
|
333
319
|
// Series line data for connecting points
|
|
334
|
-
type
|
|
320
|
+
type SeriesLineInput = {
|
|
335
321
|
series_idx: number
|
|
322
|
+
positions: number[]
|
|
336
323
|
color: string
|
|
337
324
|
width: number
|
|
338
325
|
dashed: boolean
|
|
326
|
+
}
|
|
327
|
+
type SeriesLineData = SeriesLineInput & {
|
|
339
328
|
line2: Line2
|
|
340
329
|
geometry: LineGeometry
|
|
341
330
|
material: LineMaterial
|
|
342
331
|
}
|
|
343
332
|
|
|
344
|
-
//
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
for (const line_data of untrack(() => series_lines)) {
|
|
350
|
-
line_data.geometry.dispose()
|
|
351
|
-
line_data.material.dispose()
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
const lines: SeriesLineData[] = []
|
|
333
|
+
// Per-series fat-line inputs (ordered positions + resolved stroke style) as a derived so
|
|
334
|
+
// the effect below can diff against previous lines and only rebuild what changed
|
|
335
|
+
let line_inputs = $derived.by((): SeriesLineInput[] => {
|
|
336
|
+
const eligible: SeriesLineInput[] = []
|
|
337
|
+
const positions_by_series = new Map<number, number[]>()
|
|
355
338
|
for (let series_idx = 0; series_idx < series.length; series_idx++) {
|
|
356
339
|
const srs = series[series_idx]
|
|
357
|
-
|
|
340
|
+
const line_style = srs?.line_style
|
|
341
|
+
if (!line_style) continue
|
|
358
342
|
if (!(series_visibility[series_idx] ?? srs.visible ?? true)) continue
|
|
359
|
-
|
|
360
|
-
// Get points for this series in order
|
|
361
|
-
const series_points = processed_points
|
|
362
|
-
.filter((pt) => pt.series_idx === series_idx)
|
|
363
|
-
.sort((a, b) => a.point_idx - b.point_idx)
|
|
364
|
-
|
|
365
|
-
if (series_points.length < 2) continue
|
|
366
|
-
|
|
367
|
-
// Create fat line geometry (LineGeometry for Line2)
|
|
368
343
|
const positions: number[] = []
|
|
369
|
-
|
|
370
|
-
positions.push(pt.x, pt.y, pt.z)
|
|
371
|
-
}
|
|
372
|
-
const geometry = new LineGeometry()
|
|
373
|
-
geometry.setPositions(positions)
|
|
374
|
-
|
|
375
|
-
// Determine line style
|
|
376
|
-
const line_style = srs.line_style
|
|
344
|
+
positions_by_series.set(series_idx, positions)
|
|
377
345
|
const color = line_style.stroke ??
|
|
378
346
|
(Array.isArray(srs.point_style)
|
|
379
347
|
? srs.point_style[0]?.fill
|
|
380
348
|
: srs.point_style?.fill) ??
|
|
381
349
|
get_series_color(series_idx)
|
|
382
|
-
|
|
383
|
-
const dashed = Boolean(line_style.line_dash)
|
|
384
|
-
|
|
385
|
-
// Create LineMaterial for fat lines (linewidth is in pixels when resolution is set)
|
|
386
|
-
// Use placeholder resolution; the separate resolution effect updates it
|
|
387
|
-
const material = new LineMaterial({
|
|
388
|
-
color: new THREE.Color(color).getHex(),
|
|
389
|
-
linewidth: line_width, // Width in pixels
|
|
390
|
-
dashed,
|
|
391
|
-
dashScale: dashed ? 2 : 1,
|
|
392
|
-
dashSize: 0.1,
|
|
393
|
-
gapSize: 0.05,
|
|
394
|
-
resolution: new THREE.Vector2(1, 1),
|
|
395
|
-
})
|
|
396
|
-
|
|
397
|
-
const line2 = new Line2(geometry, material)
|
|
398
|
-
line2.computeLineDistances()
|
|
399
|
-
|
|
400
|
-
lines.push({
|
|
350
|
+
eligible.push({
|
|
401
351
|
series_idx,
|
|
352
|
+
positions,
|
|
402
353
|
color,
|
|
403
|
-
width:
|
|
404
|
-
dashed,
|
|
405
|
-
line2,
|
|
406
|
-
geometry,
|
|
407
|
-
material,
|
|
354
|
+
width: line_style.stroke_width ?? 2,
|
|
355
|
+
dashed: Boolean(line_style.line_dash),
|
|
408
356
|
})
|
|
409
357
|
}
|
|
410
|
-
|
|
358
|
+
// processed_points are emitted in (series_idx, point_idx) order, so one ordered pass replaces the old per-series filter + sort
|
|
359
|
+
for (const pt of processed_points) {
|
|
360
|
+
positions_by_series.get(pt.series_idx)?.push(pt.x, pt.y, pt.z)
|
|
361
|
+
}
|
|
362
|
+
return eligible.filter((input) => input.positions.length >= 6) // >= 2 points
|
|
363
|
+
})
|
|
364
|
+
|
|
365
|
+
const same_line_input = (prev: SeriesLineData, next: SeriesLineInput): boolean =>
|
|
366
|
+
prev.color === next.color && prev.width === next.width &&
|
|
367
|
+
prev.dashed === next.dashed &&
|
|
368
|
+
prev.positions.length === next.positions.length &&
|
|
369
|
+
prev.positions.every((coord, idx) => coord === next.positions[idx])
|
|
370
|
+
|
|
371
|
+
// Track previous lines for reuse/cleanup
|
|
372
|
+
let series_lines: SeriesLineData[] = $state([])
|
|
373
|
+
|
|
374
|
+
$effect(() => {
|
|
375
|
+
const inputs = line_inputs
|
|
376
|
+
untrack(() => {
|
|
377
|
+
const prev_by_idx = new Map(series_lines.map((line) => [line.series_idx, line]))
|
|
378
|
+
const next_lines = inputs.map((input): SeriesLineData => {
|
|
379
|
+
const prev = prev_by_idx.get(input.series_idx)
|
|
380
|
+
if (prev && same_line_input(prev, input)) {
|
|
381
|
+
prev_by_idx.delete(input.series_idx) // reused - don't dispose below
|
|
382
|
+
return prev
|
|
383
|
+
}
|
|
384
|
+
// Create fat line geometry (LineGeometry for Line2)
|
|
385
|
+
const geometry = new LineGeometry()
|
|
386
|
+
geometry.setPositions(input.positions)
|
|
387
|
+
// Create LineMaterial for fat lines (linewidth is in pixels when resolution
|
|
388
|
+
// is set). Use placeholder resolution; the separate resolution effect updates it
|
|
389
|
+
const material = new LineMaterial({
|
|
390
|
+
color: new THREE.Color(input.color).getHex(),
|
|
391
|
+
linewidth: input.width, // Width in pixels
|
|
392
|
+
dashed: input.dashed,
|
|
393
|
+
dashScale: input.dashed ? 2 : 1,
|
|
394
|
+
dashSize: 0.1,
|
|
395
|
+
gapSize: 0.05,
|
|
396
|
+
resolution: new THREE.Vector2(1, 1),
|
|
397
|
+
})
|
|
398
|
+
const line2 = new Line2(geometry, material)
|
|
399
|
+
line2.computeLineDistances()
|
|
400
|
+
return { ...input, line2, geometry, material }
|
|
401
|
+
})
|
|
402
|
+
// Dispose lines that were replaced or removed
|
|
403
|
+
for (const stale of prev_by_idx.values()) {
|
|
404
|
+
stale.geometry.dispose()
|
|
405
|
+
stale.material.dispose()
|
|
406
|
+
}
|
|
407
|
+
// Skip reassignment when every line was reused to avoid invalidating consumers
|
|
408
|
+
const unchanged = next_lines.length === series_lines.length &&
|
|
409
|
+
next_lines.every((line, idx) => line === series_lines[idx])
|
|
410
|
+
if (!unchanged) series_lines = next_lines
|
|
411
|
+
})
|
|
411
412
|
})
|
|
412
413
|
|
|
413
414
|
// Update LineMaterial resolution when canvas size changes
|
|
@@ -434,7 +435,7 @@
|
|
|
434
435
|
|
|
435
436
|
// Generate axis ticks using D3's smart tick generation
|
|
436
437
|
function gen_ticks(
|
|
437
|
-
range:
|
|
438
|
+
range: Vec2,
|
|
438
439
|
ticks?: AxisConfig3D[`ticks`],
|
|
439
440
|
): number[] {
|
|
440
441
|
if (Array.isArray(ticks)) return ticks
|