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
|
@@ -5,9 +5,9 @@ import { Tween } from 'svelte/motion';
|
|
|
5
5
|
const HOVER_DEBOUNCE_MS = 300;
|
|
6
6
|
// Tweened position for an auto-placed plot element with the stability gating shared
|
|
7
7
|
// by BarPlot/BoxPlot/Histogram/ScatterPlot legends: snap (no animation) on first
|
|
8
|
-
// placement, follow container resizes, stay put while hovered (debounced
|
|
9
|
-
// and track placement continuously only when `responsive`. Creates
|
|
10
|
-
// must be called during component init.
|
|
8
|
+
// placement, follow container/element resizes, stay put while hovered (debounced
|
|
9
|
+
// hover lock), and track placement continuously only when `responsive`. Creates
|
|
10
|
+
// $effects, so it must be called during component init.
|
|
11
11
|
export function create_placed_tween(opts) {
|
|
12
12
|
// Hover lock: placement updates pause while the element is hovered; release is
|
|
13
13
|
// debounced so brief mouse-outs don't cause jumps
|
|
@@ -22,16 +22,43 @@ export function create_placed_tween(opts) {
|
|
|
22
22
|
else
|
|
23
23
|
unlock_timeout = setTimeout(() => (hover_locked = false), HOVER_DEBOUNCE_MS);
|
|
24
24
|
};
|
|
25
|
-
//
|
|
26
|
-
// don't depend on re-running when they flip
|
|
25
|
+
// Previous plot dimensions stay plain; they only classify the current effect run.
|
|
27
26
|
let prev_dims = null;
|
|
28
|
-
let
|
|
27
|
+
let element_size_revision = $state(0);
|
|
28
|
+
let prev_element_size_revision = 0;
|
|
29
|
+
let previous_element;
|
|
30
|
+
let previous_placement_revision;
|
|
31
|
+
let placed = $state(false);
|
|
29
32
|
const coords = new Tween({ x: 0, y: 0 }, untrack(() => ({ duration: 400, ...opts.tween?.() })));
|
|
30
33
|
// Clear pending unlock timeout to prevent state updates after unmount
|
|
31
34
|
$effect(() => () => {
|
|
32
35
|
if (unlock_timeout)
|
|
33
36
|
clearTimeout(unlock_timeout);
|
|
34
37
|
});
|
|
38
|
+
// Decoration content (title, orientation, tick labels) can resize without the
|
|
39
|
+
// plot dimensions changing. Observe it so frozen placements are recomputed.
|
|
40
|
+
$effect(() => {
|
|
41
|
+
const element = opts.element() ?? null;
|
|
42
|
+
if (previous_element !== undefined && previous_element !== element) {
|
|
43
|
+
element_size_revision += 1;
|
|
44
|
+
if (!element)
|
|
45
|
+
placed = false;
|
|
46
|
+
}
|
|
47
|
+
previous_element = element;
|
|
48
|
+
if (!element || typeof ResizeObserver === `undefined`)
|
|
49
|
+
return undefined;
|
|
50
|
+
const observed_elements = new WeakSet();
|
|
51
|
+
const observer = new ResizeObserver((entries) => {
|
|
52
|
+
const size_changed = entries.some(({ target }) => observed_elements.has(target));
|
|
53
|
+
for (const { target } of entries)
|
|
54
|
+
observed_elements.add(target);
|
|
55
|
+
if (size_changed)
|
|
56
|
+
element_size_revision += 1;
|
|
57
|
+
});
|
|
58
|
+
for (const target of [element, ...element.querySelectorAll(`*`)])
|
|
59
|
+
observer.observe(target);
|
|
60
|
+
return () => observer.disconnect();
|
|
61
|
+
});
|
|
35
62
|
// Update position with stability checks
|
|
36
63
|
$effect(() => {
|
|
37
64
|
const { width, height } = opts.dims();
|
|
@@ -43,26 +70,46 @@ export function create_placed_tween(opts) {
|
|
|
43
70
|
if (manual) {
|
|
44
71
|
// Immediate update (no animation) for manually positioned elements
|
|
45
72
|
void coords.set({ x: manual.x, y: manual.y }, { duration: 0 });
|
|
46
|
-
|
|
73
|
+
if (opts.element())
|
|
74
|
+
placed = true;
|
|
47
75
|
}
|
|
48
|
-
|
|
49
|
-
if (
|
|
76
|
+
// Leave resize revisions pending so unlock recomputes the latest placement.
|
|
77
|
+
if (hover_locked)
|
|
50
78
|
return;
|
|
51
79
|
// Track dimensions for resize detection
|
|
52
80
|
const dims_changed = !prev_dims || prev_dims.width !== width || prev_dims.height !== height;
|
|
53
81
|
if (dims_changed)
|
|
54
82
|
prev_dims = { width, height };
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
83
|
+
const element_size_changed = prev_element_size_revision !== element_size_revision;
|
|
84
|
+
prev_element_size_revision = element_size_revision;
|
|
85
|
+
if (element_size_changed)
|
|
86
|
+
opts.on_element_resize?.();
|
|
87
|
+
if (manual)
|
|
88
|
+
return;
|
|
89
|
+
const placement_revision = opts.placement_revision?.();
|
|
90
|
+
const placement_invalidated = !Object.is(previous_placement_revision, placement_revision);
|
|
91
|
+
previous_placement_revision = placement_revision;
|
|
92
|
+
const responsive = opts.responsive();
|
|
93
|
+
// A non-responsive tween tracks `placed` once so it immediately reruns and
|
|
94
|
+
// unsubscribes from the expensive placement chain after its first placement.
|
|
95
|
+
const has_initial_placement = responsive ? untrack(() => placed) : placed;
|
|
96
|
+
// Skip expensive DOM placement before evaluating it: non-responsive
|
|
97
|
+
// elements stay fixed after their initial placement until the plot resizes.
|
|
98
|
+
if (!dims_changed &&
|
|
99
|
+
!element_size_changed &&
|
|
100
|
+
!placement_invalidated &&
|
|
101
|
+
!responsive &&
|
|
102
|
+
has_initial_placement)
|
|
103
|
+
return;
|
|
104
|
+
const placement = opts.placement();
|
|
105
|
+
if (!placement)
|
|
106
|
+
return;
|
|
107
|
+
void coords.set({ x: placement.x, y: placement.y },
|
|
108
|
+
// Skip animation on initial placement to avoid jump from (0, 0)
|
|
109
|
+
has_initial_placement ? undefined : { duration: 0 });
|
|
110
|
+
// Only lock position after the element has an actual measured size
|
|
111
|
+
if (opts.element())
|
|
112
|
+
placed = true;
|
|
66
113
|
});
|
|
67
|
-
return { coords, set_locked };
|
|
114
|
+
return { coords, placed: () => placed, set_locked };
|
|
68
115
|
}
|
|
@@ -210,7 +210,7 @@ export function calculate_annotation_position(x1, y1, x2, y2, annotation) {
|
|
|
210
210
|
// Calculate base position with edge padding applied along line direction
|
|
211
211
|
const dx = x2 - x1;
|
|
212
212
|
const dy = y2 - y1;
|
|
213
|
-
const len = Math.
|
|
213
|
+
const len = Math.hypot(dx, dy);
|
|
214
214
|
let base_x = x1 + frac * dx;
|
|
215
215
|
let base_y = y1 + frac * dy;
|
|
216
216
|
// Apply edge padding to pull text slightly inward from plot boundaries
|
|
@@ -17,6 +17,29 @@ export type PlotScaleFn = ScaleContinuousNumeric<number, number> | ScaleTime<num
|
|
|
17
17
|
export declare function scale_arcsinh(threshold?: number): ArcsinhScale;
|
|
18
18
|
export declare function generate_arcsinh_ticks(min: number, max: number, threshold?: number, count?: number): number[];
|
|
19
19
|
export declare function create_scale(scale_type: ScaleType, domain: Vec2, output_range: Vec2): ScaleContinuousNumeric<number, number> | ArcsinhScale;
|
|
20
|
+
export declare function create_axis_scales<A extends {
|
|
21
|
+
scale_type?: ScaleType;
|
|
22
|
+
}>(axes: {
|
|
23
|
+
x: A;
|
|
24
|
+
x2: A;
|
|
25
|
+
y: A;
|
|
26
|
+
y2: A;
|
|
27
|
+
}, ranges: {
|
|
28
|
+
x: Vec2;
|
|
29
|
+
x2: Vec2;
|
|
30
|
+
y: Vec2;
|
|
31
|
+
y2: Vec2;
|
|
32
|
+
}, pad: {
|
|
33
|
+
l: number;
|
|
34
|
+
r: number;
|
|
35
|
+
t: number;
|
|
36
|
+
b: number;
|
|
37
|
+
}, width: number, height: number): {
|
|
38
|
+
x: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
|
|
39
|
+
x2: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
|
|
40
|
+
y: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
|
|
41
|
+
y2: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
|
|
42
|
+
};
|
|
20
43
|
export declare const create_time_scale: (domain: Vec2, output_range: Vec2) => ScaleTime<number, number, never>;
|
|
21
44
|
export declare function generate_ticks(domain: Vec2, scale_type: ScaleType, ticks_option: TicksOption | undefined, scale_fn: PlotScaleFn, // D3 scale function with .ticks() method
|
|
22
45
|
options?: {
|
package/dist/plot/core/scales.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as math from '../../math';
|
|
2
|
-
import {
|
|
2
|
+
import { get_d3_interpolator } from '../../colors';
|
|
3
|
+
import { clamp01 } from '../../utils';
|
|
4
|
+
import { get_arcsinh_threshold, get_scale_type_name, is_time_scale, SCALE_DEFAULTS, } from './types';
|
|
3
5
|
import { extent, range } from 'd3-array';
|
|
4
6
|
import { scaleLinear, scaleLog, scaleSequential, scaleSequentialLog, scaleTime, } from 'd3-scale';
|
|
5
7
|
import * as d3_sc from 'd3-scale-chromatic';
|
|
@@ -188,6 +190,19 @@ export function create_scale(scale_type, domain, output_range) {
|
|
|
188
190
|
// For 'time' or 'linear', return linear scale (time scales need create_time_scale())
|
|
189
191
|
return scaleLinear().domain(domain).range(output_range);
|
|
190
192
|
}
|
|
193
|
+
// Build the four axis scales for a 2D plot in one call: x/x2 share the horizontal pixel span,
|
|
194
|
+
// y/y2 the inverted vertical one. Shared by BarPlot/BoxPlot/Histogram (identical layout math).
|
|
195
|
+
export function create_axis_scales(axes, ranges, pad, width, height) {
|
|
196
|
+
const x_px = [pad.l, width - pad.r];
|
|
197
|
+
const y_px = [height - pad.b, pad.t];
|
|
198
|
+
const scale = (axis, domain, px) => create_scale(axis.scale_type ?? `linear`, domain, px);
|
|
199
|
+
return {
|
|
200
|
+
x: scale(axes.x, ranges.x, x_px),
|
|
201
|
+
x2: scale(axes.x2, ranges.x2, x_px),
|
|
202
|
+
y: scale(axes.y, ranges.y, y_px),
|
|
203
|
+
y2: scale(axes.y2, ranges.y2, y_px),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
191
206
|
// Create a time scale for time-based data
|
|
192
207
|
export const create_time_scale = (domain, output_range) => scaleTime()
|
|
193
208
|
.domain([new Date(domain[0]), new Date(domain[1])])
|
|
@@ -263,9 +278,13 @@ export function calculate_domain(values, scale_type = `linear`) {
|
|
|
263
278
|
if (min_val === undefined || max_val === undefined)
|
|
264
279
|
return [0, 1];
|
|
265
280
|
const type_name = get_scale_type_name(scale_type);
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
|
|
281
|
+
// log clamps to positive (arcsinh/linear take any value); clamp BOTH ends so all-negative
|
|
282
|
+
// data can't leave max <= the clamped min and invert/collapse the scale
|
|
283
|
+
if (type_name === `log`) {
|
|
284
|
+
const lo = Math.max(min_val, math.LOG_EPS);
|
|
285
|
+
return [lo, Math.max(max_val, lo)];
|
|
286
|
+
}
|
|
287
|
+
return [min_val, max_val];
|
|
269
288
|
}
|
|
270
289
|
// Advanced domain calculation with padding and nice boundaries (from ScatterPlot)
|
|
271
290
|
export function get_nice_data_range(points, get_value, limits, scale_type, padding_factor, is_time = false) {
|
|
@@ -274,6 +293,13 @@ export function get_nice_data_range(points, get_value, limits, scale_type, paddi
|
|
|
274
293
|
let data_min = min ?? min_ext ?? 0;
|
|
275
294
|
let data_max = max ?? max_ext ?? 1;
|
|
276
295
|
const type_name = get_scale_type_name(scale_type);
|
|
296
|
+
const can_snap_zero = min_ext !== undefined &&
|
|
297
|
+
max_ext !== undefined &&
|
|
298
|
+
min_ext < max_ext &&
|
|
299
|
+
!is_time &&
|
|
300
|
+
type_name !== `log`;
|
|
301
|
+
const snap_zero_min = can_snap_zero && min === null && min_ext === 0;
|
|
302
|
+
const snap_zero_max = can_snap_zero && max === null && max_ext === 0;
|
|
277
303
|
// Apply padding *only if* limits were NOT provided
|
|
278
304
|
if (min === null && max === null && points.length > 0) {
|
|
279
305
|
if (data_min !== data_max) {
|
|
@@ -339,7 +365,7 @@ export function get_nice_data_range(points, get_value, limits, scale_type, paddi
|
|
|
339
365
|
// Use D3's nice() to create pretty boundaries
|
|
340
366
|
// For arcsinh, we don't use D3's nice() - just return padded domain
|
|
341
367
|
if (type_name === `arcsinh`) {
|
|
342
|
-
return [data_min, data_max];
|
|
368
|
+
return [snap_zero_min ? 0 : data_min, snap_zero_max ? 0 : data_max];
|
|
343
369
|
}
|
|
344
370
|
// Create the scale with the *padded* data domain
|
|
345
371
|
const scale = type_name === `log`
|
|
@@ -350,7 +376,7 @@ export function get_nice_data_range(points, get_value, limits, scale_type, paddi
|
|
|
350
376
|
: scaleLinear().domain([data_min, data_max]);
|
|
351
377
|
scale.nice();
|
|
352
378
|
const [nice_min = data_min, nice_max = data_max] = scale.domain();
|
|
353
|
-
return [nice_min, nice_max];
|
|
379
|
+
return [snap_zero_min ? 0 : nice_min, snap_zero_max ? 0 : nice_max];
|
|
354
380
|
}
|
|
355
381
|
// Generate logarithmic ticks (from ScatterPlot)
|
|
356
382
|
export function generate_log_ticks(min, max, ticks_option) {
|
|
@@ -400,16 +426,16 @@ export function create_color_scale(color_scale_config, auto_color_range) {
|
|
|
400
426
|
const candidate_interpolator = Object.entries(d3_sc).find(([key]) => key === scheme)?.[1];
|
|
401
427
|
const interpolator = typeof candidate_interpolator === `function`
|
|
402
428
|
? candidate_interpolator
|
|
403
|
-
:
|
|
429
|
+
: get_d3_interpolator(SCALE_DEFAULTS.scheme);
|
|
404
430
|
const [min_val, max_val] = (typeof color_scale_config === `string` ? undefined : color_scale_config.value_range) ??
|
|
405
431
|
auto_color_range;
|
|
406
432
|
const scale_type = typeof color_scale_config === `string` ? undefined : color_scale_config.type;
|
|
407
433
|
const type_name = get_scale_type_name(scale_type);
|
|
408
434
|
if (type_name === `log`) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
]);
|
|
435
|
+
// clamp both ends (like create_scale): all-negative data otherwise yields an inverted
|
|
436
|
+
// [LOG_EPS, max<0] domain that maps every input to undefined
|
|
437
|
+
const lo = Math.max(min_val, math.LOG_EPS);
|
|
438
|
+
return scaleSequentialLog(interpolator).domain([lo, Math.max(max_val, lo * 1.1)]);
|
|
413
439
|
}
|
|
414
440
|
if (type_name === `arcsinh`) {
|
|
415
441
|
// For arcsinh color scale, we create a custom scale that wraps the interpolator
|
|
@@ -436,7 +462,7 @@ function create_arcsinh_color_scale(interpolator, initial_domain, threshold) {
|
|
|
436
462
|
const t_val = Math.asinh(value / safe_threshold);
|
|
437
463
|
// Normalize to [0, 1]
|
|
438
464
|
const normalized = t_max === t_min ? 0.5 : (t_val - t_min) / (t_max - t_min);
|
|
439
|
-
return interpolator(
|
|
465
|
+
return interpolator(clamp01(normalized));
|
|
440
466
|
});
|
|
441
467
|
// Domain getter/setter for D3 compatibility - returns same scale instance
|
|
442
468
|
scale.domain = function (new_domain) {
|
|
@@ -449,7 +475,7 @@ function create_arcsinh_color_scale(interpolator, initial_domain, threshold) {
|
|
|
449
475
|
}
|
|
450
476
|
// Create a size scale function from configuration
|
|
451
477
|
export function create_size_scale(config, all_size_values) {
|
|
452
|
-
const [min_radius, max_radius] = config.radius_range ??
|
|
478
|
+
const [min_radius, max_radius] = config.radius_range ?? SCALE_DEFAULTS.radius;
|
|
453
479
|
const auto_range = all_size_values.length > 0
|
|
454
480
|
? extent(all_size_values.filter((val) => val !== null))
|
|
455
481
|
: [0, 1];
|
package/dist/plot/core/svg.js
CHANGED
|
@@ -29,7 +29,6 @@ export function violin_path(grid_px, half_offsets_px, center, side, orient) {
|
|
|
29
29
|
}
|
|
30
30
|
return `M${pts.map(([x_pos, y_pos]) => `${x_pos},${y_pos}`).join(`L`)}Z`;
|
|
31
31
|
}
|
|
32
|
-
//
|
|
33
32
|
// Generate SVG path for a bar with rounded corners on the "free" end (away from axis).
|
|
34
33
|
// For vertical bars, rounds top corners. For horizontal bars, rounds right corners.
|
|
35
34
|
export function bar_path(x, y, w, h, r, vertical = true) {
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export type FillBoundary = {
|
|
2
|
+
type: `series`;
|
|
3
|
+
series_idx: number;
|
|
4
|
+
} | {
|
|
5
|
+
type: `series`;
|
|
6
|
+
series_id: string | number;
|
|
7
|
+
} | {
|
|
8
|
+
type: `constant`;
|
|
9
|
+
value: number;
|
|
10
|
+
} | {
|
|
11
|
+
type: `axis`;
|
|
12
|
+
axis: `x` | `x2` | `y` | `y2`;
|
|
13
|
+
value?: number;
|
|
14
|
+
} | {
|
|
15
|
+
type: `function`;
|
|
16
|
+
fn: (coord: number) => number;
|
|
17
|
+
} | {
|
|
18
|
+
type: `data`;
|
|
19
|
+
values: readonly number[];
|
|
20
|
+
x?: readonly number[];
|
|
21
|
+
} | number;
|
|
22
|
+
export interface FillGradient {
|
|
23
|
+
type: `linear` | `radial`;
|
|
24
|
+
angle?: number;
|
|
25
|
+
center?: {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
};
|
|
29
|
+
stops: readonly [number, string][];
|
|
30
|
+
}
|
|
31
|
+
export interface FillEdgeStyle {
|
|
32
|
+
color?: string;
|
|
33
|
+
width?: number;
|
|
34
|
+
dash?: string;
|
|
35
|
+
opacity?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface FillHoverStyle {
|
|
38
|
+
fill?: string;
|
|
39
|
+
fill_opacity?: number;
|
|
40
|
+
edge?: FillEdgeStyle;
|
|
41
|
+
cursor?: string;
|
|
42
|
+
scale?: number;
|
|
43
|
+
stroke?: string;
|
|
44
|
+
stroke_width?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface FillHandlerEvent {
|
|
47
|
+
event: MouseEvent | KeyboardEvent;
|
|
48
|
+
region_idx: number;
|
|
49
|
+
region_id?: string | number;
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
px: number;
|
|
53
|
+
py: number;
|
|
54
|
+
label?: string;
|
|
55
|
+
metadata?: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
export type LayerZIndex = `below-grid` | `below-lines` | `below-points` | `above-all`;
|
|
58
|
+
export declare const FILL_CURVE_TYPES: readonly ["linear", "monotoneX", "monotoneY", "step", "stepBefore", "stepAfter", "basis", "cardinal", "catmullRom", "natural"];
|
|
59
|
+
export type FillCurveType = (typeof FILL_CURVE_TYPES)[number];
|
|
60
|
+
export interface FillRegion {
|
|
61
|
+
id?: string | number;
|
|
62
|
+
label?: string;
|
|
63
|
+
upper: FillBoundary;
|
|
64
|
+
lower: FillBoundary;
|
|
65
|
+
x_range?: [number | null, number | null];
|
|
66
|
+
y_range?: [number | null, number | null];
|
|
67
|
+
where?: (x: number, y_upper: number, y_lower: number) => boolean;
|
|
68
|
+
fill?: string | FillGradient;
|
|
69
|
+
fill_opacity?: number;
|
|
70
|
+
edge_upper?: FillEdgeStyle;
|
|
71
|
+
edge_lower?: FillEdgeStyle;
|
|
72
|
+
curve?: FillCurveType;
|
|
73
|
+
step_position?: number;
|
|
74
|
+
z_index?: LayerZIndex;
|
|
75
|
+
visible?: boolean;
|
|
76
|
+
hover_style?: FillHoverStyle;
|
|
77
|
+
on_click?: (event: FillHandlerEvent) => void;
|
|
78
|
+
on_hover?: (event: FillHandlerEvent | null) => void;
|
|
79
|
+
show_in_legend?: boolean;
|
|
80
|
+
legend_group?: string;
|
|
81
|
+
metadata?: Record<string, unknown>;
|
|
82
|
+
}
|
|
83
|
+
export interface ErrorBand {
|
|
84
|
+
series: {
|
|
85
|
+
type: `series`;
|
|
86
|
+
series_idx: number;
|
|
87
|
+
} | {
|
|
88
|
+
type: `series`;
|
|
89
|
+
series_id: string | number;
|
|
90
|
+
};
|
|
91
|
+
error: number | readonly number[] | {
|
|
92
|
+
upper: number | readonly number[];
|
|
93
|
+
lower: number | readonly number[];
|
|
94
|
+
};
|
|
95
|
+
fill?: string;
|
|
96
|
+
fill_opacity?: number;
|
|
97
|
+
edge_style?: FillEdgeStyle;
|
|
98
|
+
id?: string | number;
|
|
99
|
+
label?: string;
|
|
100
|
+
show_in_legend?: boolean;
|
|
101
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Fill-region and error-band types for 2D plots (shaded areas between boundaries).
|
|
2
|
+
// Self-contained leaf module re-exported via $lib/plot/core/types.
|
|
3
|
+
// Curve types supported for fill path generation (matching d3-shape curves)
|
|
4
|
+
export const FILL_CURVE_TYPES = [
|
|
5
|
+
`linear`,
|
|
6
|
+
`monotoneX`,
|
|
7
|
+
`monotoneY`,
|
|
8
|
+
`step`,
|
|
9
|
+
`stepBefore`,
|
|
10
|
+
`stepAfter`,
|
|
11
|
+
`basis`,
|
|
12
|
+
`cardinal`,
|
|
13
|
+
`catmullRom`,
|
|
14
|
+
`natural`,
|
|
15
|
+
];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Point3D, Vec2, Vec3 } from '../../../math';
|
|
2
|
+
import type { AxisConfig, ControlsConfig, DataSeries, DisplayConfig, HandlerProps, Point, PointStyle, StyleOverrides } from './';
|
|
3
|
+
export interface ScatterPoint3D<Metadata = Record<string, unknown>> extends Point<Metadata> {
|
|
4
|
+
z: number;
|
|
5
|
+
}
|
|
6
|
+
export interface DataSeries3D<Metadata = Record<string, unknown>> extends Omit<DataSeries<Metadata>, `y_axis` | `filtered_data`> {
|
|
7
|
+
z: readonly number[];
|
|
8
|
+
filtered_data?: InternalPoint3D<Metadata>[];
|
|
9
|
+
}
|
|
10
|
+
export interface InternalPoint3D<Metadata = Record<string, unknown>> extends ScatterPoint3D<Metadata> {
|
|
11
|
+
series_idx: number;
|
|
12
|
+
point_idx: number;
|
|
13
|
+
color_value?: number | null;
|
|
14
|
+
size_value?: number | null;
|
|
15
|
+
point_style?: PointStyle;
|
|
16
|
+
}
|
|
17
|
+
export type SurfaceType = `grid` | `parametric` | `triangulated`;
|
|
18
|
+
export interface Surface3DConfig {
|
|
19
|
+
id?: string | number;
|
|
20
|
+
type: SurfaceType;
|
|
21
|
+
x_range?: Vec2;
|
|
22
|
+
y_range?: Vec2;
|
|
23
|
+
resolution?: number | Vec2;
|
|
24
|
+
z_fn?: (x: number, y: number) => number;
|
|
25
|
+
u_range?: Vec2;
|
|
26
|
+
v_range?: Vec2;
|
|
27
|
+
parametric_fn?: (u: number, v: number) => Point3D;
|
|
28
|
+
points?: Point3D[];
|
|
29
|
+
triangles?: Vec3[];
|
|
30
|
+
color?: string;
|
|
31
|
+
color_fn?: (x: number, y: number, z: number) => string;
|
|
32
|
+
opacity?: number;
|
|
33
|
+
wireframe?: boolean;
|
|
34
|
+
wireframe_color?: string;
|
|
35
|
+
wireframe_width?: number;
|
|
36
|
+
visible?: boolean;
|
|
37
|
+
double_sided?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface AxisConfig3D extends AxisConfig {
|
|
40
|
+
show_plane?: boolean;
|
|
41
|
+
plane_opacity?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface DisplayConfig3D extends DisplayConfig {
|
|
44
|
+
z_grid?: boolean;
|
|
45
|
+
z_zero_line?: boolean;
|
|
46
|
+
show_axes?: boolean;
|
|
47
|
+
show_axis_labels?: boolean;
|
|
48
|
+
show_bounding_box?: boolean;
|
|
49
|
+
show_grid?: boolean;
|
|
50
|
+
projections?: {
|
|
51
|
+
xy?: boolean;
|
|
52
|
+
xz?: boolean;
|
|
53
|
+
yz?: boolean;
|
|
54
|
+
};
|
|
55
|
+
projection_opacity?: number;
|
|
56
|
+
projection_scale?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface Scatter3DHandlerProps<Metadata = Record<string, unknown>> extends Omit<HandlerProps<Metadata>, `x_axis` | `x2_axis` | `y_axis` | `y2_axis`> {
|
|
59
|
+
z: number;
|
|
60
|
+
x_axis: AxisConfig3D;
|
|
61
|
+
y_axis: AxisConfig3D;
|
|
62
|
+
z_axis: AxisConfig3D;
|
|
63
|
+
x_formatted: string;
|
|
64
|
+
y_formatted: string;
|
|
65
|
+
z_formatted: string;
|
|
66
|
+
color_value?: number | null;
|
|
67
|
+
}
|
|
68
|
+
export type Scatter3DHandlerEvent<Metadata = Record<string, unknown>> = Scatter3DHandlerProps<Metadata> & {
|
|
69
|
+
event?: MouseEvent;
|
|
70
|
+
point: InternalPoint3D<Metadata>;
|
|
71
|
+
};
|
|
72
|
+
export type CameraProjection3D = `perspective` | `orthographic`;
|
|
73
|
+
export interface PlotConfig3D {
|
|
74
|
+
x_axis?: AxisConfig3D;
|
|
75
|
+
y_axis?: AxisConfig3D;
|
|
76
|
+
z_axis?: AxisConfig3D;
|
|
77
|
+
display?: DisplayConfig3D;
|
|
78
|
+
}
|
|
79
|
+
export interface StyleOverrides3D extends StyleOverrides {
|
|
80
|
+
point?: StyleOverrides[`point`] & {
|
|
81
|
+
sphere_segments?: number;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export interface ControlsConfig3D extends ControlsConfig {
|
|
85
|
+
show_camera_controls?: boolean;
|
|
86
|
+
show_surface_controls?: boolean;
|
|
87
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// 3D plot types (scatter points, surfaces, axes, handlers) extending the 2D vocabulary.
|
|
2
|
+
// Imports the 2D core types from the barrel and is re-exported by it; nothing in core depends on
|
|
3
|
+
// these, so that re-export cycle is type-only (erased at build, hence harmless).
|
|
4
|
+
export {};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { Vec3 } from '../../../math';
|
|
2
|
+
import type { LayerZIndex } from './fills';
|
|
3
|
+
export interface RefLineStyle {
|
|
4
|
+
color?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
dash?: string;
|
|
7
|
+
opacity?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface RefLineAnnotation {
|
|
10
|
+
text: string;
|
|
11
|
+
position?: `start` | `center` | `end`;
|
|
12
|
+
side?: `above` | `below` | `left` | `right`;
|
|
13
|
+
offset?: {
|
|
14
|
+
x?: number;
|
|
15
|
+
y?: number;
|
|
16
|
+
};
|
|
17
|
+
gap?: number;
|
|
18
|
+
edge_padding?: number;
|
|
19
|
+
font_size?: string;
|
|
20
|
+
font_family?: string;
|
|
21
|
+
color?: string;
|
|
22
|
+
background?: string;
|
|
23
|
+
padding?: number;
|
|
24
|
+
rotate?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface RefLineEvent {
|
|
27
|
+
event: MouseEvent | KeyboardEvent | FocusEvent;
|
|
28
|
+
line_idx: number;
|
|
29
|
+
line_id?: string | number;
|
|
30
|
+
type: RefLine[`type`];
|
|
31
|
+
label?: string;
|
|
32
|
+
metadata?: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
export interface RefLineBase {
|
|
35
|
+
id?: string | number;
|
|
36
|
+
x_span?: [number | null, number | null];
|
|
37
|
+
y_span?: [number | null, number | null];
|
|
38
|
+
coord_mode?: `data` | `relative`;
|
|
39
|
+
x_axis?: `x1` | `x2`;
|
|
40
|
+
y_axis?: `y1` | `y2`;
|
|
41
|
+
style?: RefLineStyle;
|
|
42
|
+
annotation?: RefLineAnnotation;
|
|
43
|
+
z_index?: LayerZIndex;
|
|
44
|
+
visible?: boolean;
|
|
45
|
+
hover_style?: RefLineStyle;
|
|
46
|
+
on_click?: (event: RefLineEvent) => void;
|
|
47
|
+
on_hover?: (event: RefLineEvent | null) => void;
|
|
48
|
+
show_in_legend?: boolean;
|
|
49
|
+
label?: string;
|
|
50
|
+
legend_group?: string;
|
|
51
|
+
metadata?: Record<string, unknown>;
|
|
52
|
+
}
|
|
53
|
+
export type RefLineValue = number | Date | string;
|
|
54
|
+
export type RefLine = RefLineBase & ({
|
|
55
|
+
type: `horizontal`;
|
|
56
|
+
y: RefLineValue;
|
|
57
|
+
} | {
|
|
58
|
+
type: `vertical`;
|
|
59
|
+
x: RefLineValue;
|
|
60
|
+
} | {
|
|
61
|
+
type: `diagonal`;
|
|
62
|
+
slope: number;
|
|
63
|
+
intercept: number;
|
|
64
|
+
} | {
|
|
65
|
+
type: `segment`;
|
|
66
|
+
p1: [RefLineValue, RefLineValue];
|
|
67
|
+
p2: [RefLineValue, RefLineValue];
|
|
68
|
+
} | {
|
|
69
|
+
type: `line`;
|
|
70
|
+
p1: [RefLineValue, RefLineValue];
|
|
71
|
+
p2: [RefLineValue, RefLineValue];
|
|
72
|
+
});
|
|
73
|
+
export declare const REF_LINE_STYLE_DEFAULTS: Required<RefLineStyle>;
|
|
74
|
+
type Ref3DBase = Omit<RefLineBase, `coord_mode` | `x_axis` | `y_axis` | `style` | `hover_style` | `annotation` | `on_click` | `on_hover`> & {
|
|
75
|
+
z_span?: [number | null, number | null];
|
|
76
|
+
};
|
|
77
|
+
export interface RefLine3DBase extends Ref3DBase {
|
|
78
|
+
style?: RefLineStyle;
|
|
79
|
+
hover_style?: RefLineStyle;
|
|
80
|
+
annotation?: RefLineAnnotation;
|
|
81
|
+
on_click?: (event: {
|
|
82
|
+
line_idx: number;
|
|
83
|
+
line_id?: string | number;
|
|
84
|
+
}) => void;
|
|
85
|
+
on_hover?: (event: {
|
|
86
|
+
line_idx: number;
|
|
87
|
+
line_id?: string | number;
|
|
88
|
+
} | null) => void;
|
|
89
|
+
}
|
|
90
|
+
export type RefLine3D = RefLine3DBase & ({
|
|
91
|
+
type: `x-axis`;
|
|
92
|
+
y: number;
|
|
93
|
+
z: number;
|
|
94
|
+
} | {
|
|
95
|
+
type: `y-axis`;
|
|
96
|
+
x: number;
|
|
97
|
+
z: number;
|
|
98
|
+
} | {
|
|
99
|
+
type: `z-axis`;
|
|
100
|
+
x: number;
|
|
101
|
+
y: number;
|
|
102
|
+
} | {
|
|
103
|
+
type: `segment`;
|
|
104
|
+
p1: Vec3;
|
|
105
|
+
p2: Vec3;
|
|
106
|
+
} | {
|
|
107
|
+
type: `line`;
|
|
108
|
+
p1: Vec3;
|
|
109
|
+
p2: Vec3;
|
|
110
|
+
});
|
|
111
|
+
export interface RefPlaneStyle {
|
|
112
|
+
color?: string;
|
|
113
|
+
opacity?: number;
|
|
114
|
+
wireframe?: boolean;
|
|
115
|
+
wireframe_color?: string;
|
|
116
|
+
double_sided?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface RefPlaneBase extends Ref3DBase {
|
|
119
|
+
style?: RefPlaneStyle;
|
|
120
|
+
}
|
|
121
|
+
export type RefPlane = RefPlaneBase & ({
|
|
122
|
+
type: `xy`;
|
|
123
|
+
z: number;
|
|
124
|
+
} | {
|
|
125
|
+
type: `xz`;
|
|
126
|
+
y: number;
|
|
127
|
+
} | {
|
|
128
|
+
type: `yz`;
|
|
129
|
+
x: number;
|
|
130
|
+
} | {
|
|
131
|
+
type: `normal`;
|
|
132
|
+
normal: Vec3;
|
|
133
|
+
point: Vec3;
|
|
134
|
+
} | {
|
|
135
|
+
type: `points`;
|
|
136
|
+
p1: Vec3;
|
|
137
|
+
p2: Vec3;
|
|
138
|
+
p3: Vec3;
|
|
139
|
+
});
|
|
140
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Reference-line and reference-plane types for 2D and 3D plots.
|
|
2
|
+
// Depends only on LayerZIndex (from ./fills) and math vectors; re-exported via $lib/plot/core/types.
|
|
3
|
+
// Default style values for reference lines
|
|
4
|
+
export const REF_LINE_STYLE_DEFAULTS = {
|
|
5
|
+
color: `currentColor`,
|
|
6
|
+
width: 1,
|
|
7
|
+
dash: ``,
|
|
8
|
+
opacity: 1,
|
|
9
|
+
};
|