matterviz 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EmptyState.svelte +10 -4
- package/dist/FilePicker.svelte +48 -60
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/api/optimade.js +10 -7
- package/dist/app.css +68 -0
- package/dist/brillouin/BrillouinZone.svelte +90 -91
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
- package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
- package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
- package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/compute.js +10 -16
- package/dist/brillouin/geometry.js +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +13 -14
- package/dist/chempot-diagram/color.d.ts +21 -1
- package/dist/chempot-diagram/color.js +70 -1
- package/dist/chempot-diagram/compute.d.ts +7 -0
- package/dist/chempot-diagram/compute.js +85 -26
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/chempot-diagram/export.js +1 -6
- package/dist/chempot-diagram/temperature.js +9 -10
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +30 -26
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +10 -19
- package/dist/composition/Formula.svelte +20 -27
- package/dist/composition/FormulaFilter.svelte +115 -184
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +7 -9
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/parse.d.ts +2 -2
- package/dist/composition/parse.js +61 -115
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +17 -26
- package/dist/convex-hull/ConvexHull.svelte +12 -15
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +93 -94
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +127 -186
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +131 -180
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
- package/dist/convex-hull/ConvexHullControls.svelte +46 -48
- package/dist/convex-hull/ConvexHullStats.svelte +193 -195
- package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
- package/dist/convex-hull/GasPressureControls.svelte +5 -12
- package/dist/convex-hull/StructurePopup.svelte +18 -22
- package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
- package/dist/convex-hull/TemperatureSlider.svelte +4 -10
- package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
- package/dist/convex-hull/gas-thermodynamics.js +21 -53
- package/dist/convex-hull/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +37 -43
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +37 -44
- package/dist/coordination/CoordinationBarPlot.svelte +49 -53
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/coordination/calc-coordination.d.ts +1 -1
- package/dist/coordination/calc-coordination.js +28 -25
- package/dist/element/BohrAtom.svelte +5 -9
- package/dist/element/ElementHeading.svelte +4 -1
- package/dist/element/ElementPhoto.svelte +11 -9
- package/dist/element/ElementStats.svelte +12 -10
- package/dist/element/ElementTile.svelte +44 -67
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +3 -2
- package/dist/element/data.js +5 -1
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +2 -5
- package/dist/element/index.js +4 -19
- package/dist/feedback/DragOverlay.svelte +5 -5
- package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
- package/dist/feedback/StatusMessage.svelte +7 -4
- package/dist/fermi-surface/FermiSlice.svelte +21 -18
- package/dist/fermi-surface/FermiSurface.svelte +35 -44
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +25 -58
- package/dist/fermi-surface/parse.js +54 -88
- package/dist/file-viewer/JsonBrowser.svelte +1043 -0
- package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
- package/dist/file-viewer/PlotPanel.svelte +350 -0
- package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
- package/dist/file-viewer/detect.d.ts +11 -0
- package/dist/file-viewer/detect.js +381 -0
- package/dist/file-viewer/eligibility.d.ts +4 -0
- package/dist/file-viewer/eligibility.js +53 -0
- package/dist/file-viewer/host-protocol.d.ts +50 -0
- package/dist/file-viewer/host-transfer.d.ts +25 -0
- package/dist/file-viewer/host-transfer.js +42 -0
- package/dist/file-viewer/index.d.ts +5 -0
- package/dist/file-viewer/index.js +5 -0
- package/dist/file-viewer/main.d.ts +44 -0
- package/dist/file-viewer/main.js +535 -0
- package/dist/file-viewer/parse.d.ts +9 -0
- package/dist/file-viewer/parse.js +170 -0
- package/dist/file-viewer/plot-utils.d.ts +24 -0
- package/dist/file-viewer/plot-utils.js +191 -0
- package/dist/file-viewer/types.d.ts +4 -0
- package/dist/file-viewer/types.js +5 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/index.d.ts +5 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/io/ExportPane.svelte +11 -7
- package/dist/io/decompress.d.ts +4 -1
- package/dist/io/decompress.js +24 -36
- package/dist/io/export.d.ts +11 -4
- package/dist/io/export.js +75 -19
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- package/dist/io/file-drop.js +60 -35
- package/dist/io/index.d.ts +0 -1
- package/dist/io/index.js +2 -9
- package/dist/io/is-binary.d.ts +9 -0
- package/dist/io/is-binary.js +45 -1
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +40 -40
- package/dist/isosurface/Isosurface.svelte +700 -215
- package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
- package/dist/isosurface/IsosurfaceControls.svelte +590 -116
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
- package/dist/isosurface/VolumeSlice.svelte +224 -0
- package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
- package/dist/isosurface/coloring.d.ts +20 -0
- package/dist/isosurface/coloring.js +118 -0
- package/dist/isosurface/geometry-worker-types.d.ts +38 -0
- package/dist/isosurface/geometry.worker.d.ts +1 -0
- package/dist/isosurface/geometry.worker.js +59 -0
- package/dist/isosurface/grid.d.ts +10 -0
- package/dist/isosurface/grid.js +31 -0
- package/dist/isosurface/index.d.ts +4 -0
- package/dist/isosurface/index.js +4 -0
- package/dist/isosurface/parse-vaspwave.d.ts +3 -0
- package/dist/isosurface/parse-vaspwave.js +138 -0
- package/dist/isosurface/parse.js +6 -6
- package/dist/isosurface/profile.d.ts +12 -0
- package/dist/isosurface/profile.js +19 -0
- package/dist/isosurface/sampling.d.ts +34 -0
- package/dist/isosurface/sampling.js +408 -0
- package/dist/isosurface/slice-rendering.d.ts +13 -0
- package/dist/isosurface/slice-rendering.js +79 -0
- package/dist/isosurface/slice.d.ts +22 -2
- package/dist/isosurface/slice.js +200 -116
- package/dist/isosurface/types.d.ts +24 -1
- package/dist/isosurface/types.js +120 -8
- package/dist/json-path.d.ts +4 -0
- package/dist/json-path.js +89 -0
- package/dist/labels.d.ts +6 -2
- package/dist/labels.js +44 -14
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +8 -21
- package/dist/layout/InfoTag.svelte +1 -3
- package/dist/layout/NumberRangeInput.svelte +46 -0
- package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
- package/dist/layout/PropertyFilter.svelte +2 -6
- package/dist/layout/SettingsSection.svelte +57 -62
- package/dist/layout/SettingsSection.svelte.d.ts +6 -7
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +16 -11
- package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
- package/dist/layout/fullscreen.js +3 -5
- package/dist/layout/fullscreen.svelte.js +1 -2
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +22 -59
- package/dist/layout/json-tree/JsonTree.svelte +101 -172
- package/dist/layout/json-tree/JsonValue.svelte +9 -32
- package/dist/layout/json-tree/utils.d.ts +0 -3
- package/dist/layout/json-tree/utils.js +50 -188
- package/dist/marching-cubes.d.ts +8 -1
- package/dist/marching-cubes.js +115 -48
- package/dist/math.d.ts +5 -2
- package/dist/math.js +48 -38
- package/dist/overlays/ContextMenu.svelte +19 -34
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +110 -74
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
- package/dist/overlays/GlassChip.svelte +32 -0
- package/dist/overlays/GlassChip.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +11 -23
- package/dist/overlays/index.d.ts +7 -0
- package/dist/overlays/index.js +26 -0
- package/dist/overlays/portal.d.ts +2 -0
- package/dist/overlays/portal.js +14 -0
- package/dist/periodic-table/PeriodicTable.svelte +113 -145
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
- package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
- package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
- package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
- package/dist/phase-diagram/build-diagram.js +4 -9
- package/dist/phase-diagram/diagram-input.d.ts +1 -2
- package/dist/phase-diagram/parse.js +15 -15
- package/dist/phase-diagram/svg-to-diagram.js +28 -27
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +461 -426
- package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
- package/dist/plot/bar/BarPlotControls.svelte +1 -3
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
- package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +322 -226
- package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
- package/dist/plot/box/Violin.svelte.d.ts +1 -0
- package/dist/plot/box/box-plot.js +1 -1
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +2 -2
- package/dist/plot/core/axis-utils.d.ts +12 -7
- package/dist/plot/core/axis-utils.js +48 -48
- package/dist/plot/core/components/AxisLabel.svelte +82 -20
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
- package/dist/plot/core/components/ColorBar.svelte +101 -106
- package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
- package/dist/plot/core/components/FillArea.svelte +10 -17
- package/dist/plot/core/components/HierarchyControls.svelte +249 -0
- package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/core/components/Line.svelte +18 -9
- package/dist/plot/core/components/Line.svelte.d.ts +2 -0
- package/dist/plot/core/components/PlotAxis.svelte +40 -17
- package/dist/plot/core/components/PlotControls.svelte +65 -41
- package/dist/plot/core/components/PlotLegend.svelte +31 -35
- package/dist/plot/core/components/PlotMarginals.svelte +616 -0
- package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotTooltip.svelte +1 -1
- package/dist/plot/core/components/PortalSelect.svelte +4 -8
- package/dist/plot/core/components/ReferenceLine.svelte +27 -24
- package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
- package/dist/plot/core/components/ReferencePlane.svelte +7 -8
- package/dist/plot/core/components/ZeroLines.svelte +4 -8
- package/dist/plot/core/components/ZoomRect.svelte +1 -2
- package/dist/plot/core/components/index.d.ts +1 -0
- package/dist/plot/core/components/index.js +1 -0
- package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
- package/dist/plot/core/data-cleaning-signal.js +467 -0
- package/dist/plot/core/data-cleaning.d.ts +2 -42
- package/dist/plot/core/data-cleaning.js +27 -474
- package/dist/plot/core/data-transform.d.ts +1 -2
- package/dist/plot/core/data-transform.js +9 -15
- package/dist/plot/core/fill-utils.d.ts +3 -1
- package/dist/plot/core/fill-utils.js +28 -6
- package/dist/plot/core/index.d.ts +1 -0
- package/dist/plot/core/index.js +1 -0
- package/dist/plot/core/interactions.js +0 -2
- package/dist/plot/core/layout.d.ts +15 -6
- package/dist/plot/core/layout.js +57 -38
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
- package/dist/plot/core/pan-zoom.svelte.js +34 -17
- package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -21
- package/dist/plot/core/reference-line.js +1 -1
- package/dist/plot/core/scales.d.ts +23 -0
- package/dist/plot/core/scales.js +39 -13
- package/dist/plot/core/svg.js +0 -1
- package/dist/plot/core/types/fills.d.ts +101 -0
- package/dist/plot/core/types/fills.js +15 -0
- package/dist/plot/core/types/plot-3d.d.ts +87 -0
- package/dist/plot/core/types/plot-3d.js +4 -0
- package/dist/plot/core/types/reference-lines.d.ts +140 -0
- package/dist/plot/core/types/reference-lines.js +9 -0
- package/dist/plot/core/types.d.ts +29 -324
- package/dist/plot/core/types.js +23 -20
- package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
- package/dist/plot/core/utils/hierarchy-chart.js +191 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +100 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +314 -340
- package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
- package/dist/plot/histogram/HistogramControls.svelte +30 -28
- package/dist/plot/histogram/histogram.d.ts +31 -0
- package/dist/plot/histogram/histogram.js +70 -0
- package/dist/plot/histogram/index.d.ts +1 -0
- package/dist/plot/histogram/index.js +1 -0
- package/dist/plot/index.d.ts +1 -0
- package/dist/plot/index.js +1 -0
- package/dist/plot/sankey/Sankey.svelte +78 -69
- package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
- package/dist/plot/sankey/SankeyControls.svelte +22 -16
- package/dist/plot/sankey/sankey.js +13 -9
- package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +517 -410
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/ScatterPoint.svelte +16 -9
- package/dist/plot/scatter/adaptive-density.d.ts +1 -1
- package/dist/plot/scatter/adaptive-density.js +36 -20
- package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
- package/dist/plot/scatter/binned-scatter-types.js +6 -1
- package/dist/plot/scatter/scatter-data.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.js +8 -7
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
- package/dist/plot/sunburst/Sunburst.svelte +269 -347
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
- package/dist/plot/sunburst/index.d.ts +1 -1
- package/dist/plot/sunburst/index.js +2 -1
- package/dist/plot/sunburst/render.d.ts +2 -2
- package/dist/plot/sunburst/render.js +47 -22
- package/dist/plot/sunburst/sunburst.d.ts +5 -1
- package/dist/plot/sunburst/sunburst.js +10 -3
- package/dist/plot/treemap/Treemap.svelte +1022 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
- package/dist/plot/treemap/index.d.ts +4 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/labels.d.ts +38 -0
- package/dist/plot/treemap/labels.js +80 -0
- package/dist/plot/treemap/treemap.d.ts +28 -0
- package/dist/plot/treemap/treemap.js +102 -0
- package/dist/rdf/RdfPlot.svelte +37 -59
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +63 -52
- package/dist/rdf/index.d.ts +0 -1
- package/dist/sanitize.js +85 -27
- package/dist/scene/SceneCamera.svelte +1 -1
- package/dist/scene/SceneCamera.svelte.d.ts +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/scene/index.d.ts +1 -2
- package/dist/scene/index.js +1 -1
- package/dist/scene/{props.js → props.svelte.js} +15 -1
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +229 -525
- package/dist/spectral/Bands.svelte +207 -221
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -42
- package/dist/spectral/Dos.svelte +92 -93
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +65 -140
- package/dist/state.svelte.js +5 -18
- package/dist/structure/Arrow.svelte +5 -18
- package/dist/structure/ArrowInstances.svelte +160 -0
- package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
- package/dist/structure/AtomLegend.svelte +120 -85
- package/dist/structure/AtomLegend.svelte.d.ts +2 -3
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +45 -35
- package/dist/structure/Cylinder.svelte +24 -40
- package/dist/structure/InstancedAtoms.svelte +114 -0
- package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
- package/dist/structure/Lattice.svelte +85 -149
- package/dist/structure/SiteLabels.svelte +122 -0
- package/dist/structure/SiteLabels.svelte.d.ts +18 -0
- package/dist/structure/Structure.svelte +636 -504
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +637 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +165 -425
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +128 -133
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +535 -578
- package/dist/structure/StructureScene.svelte.d.ts +6 -2
- package/dist/structure/StructureViewport.svelte +451 -0
- package/dist/structure/StructureViewport.svelte.d.ts +65 -0
- package/dist/structure/atom-label-placement.d.ts +16 -12
- package/dist/structure/atom-label-placement.js +70 -37
- package/dist/structure/atom-properties.d.ts +2 -0
- package/dist/structure/atom-properties.js +105 -38
- package/dist/structure/bond-order-perception.js +3 -8
- package/dist/structure/bonding.d.ts +9 -3
- package/dist/structure/bonding.js +95 -46
- package/dist/structure/edit-history.d.ts +6 -0
- package/dist/structure/edit-history.js +27 -0
- package/dist/structure/export.d.ts +1 -0
- package/dist/structure/export.js +89 -105
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +20 -0
- package/dist/structure/geometry.d.ts +9 -0
- package/dist/structure/geometry.js +27 -0
- package/dist/structure/index.d.ts +16 -1
- package/dist/structure/index.js +15 -10
- package/dist/structure/measure.d.ts +1 -1
- package/dist/structure/measure.js +6 -12
- package/dist/structure/parse.d.ts +2 -1
- package/dist/structure/parse.js +272 -313
- package/dist/structure/partial-occupancy.js +10 -5
- package/dist/structure/pbc.js +85 -107
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +7 -21
- package/dist/structure/prop-groups.d.ts +85 -0
- package/dist/structure/prop-groups.js +18 -0
- package/dist/structure/supercell.d.ts +1 -2
- package/dist/structure/supercell.js +7 -13
- package/dist/symmetry/SymmetryElements.svelte +11 -15
- package/dist/symmetry/SymmetryStats.svelte +55 -71
- package/dist/symmetry/WyckoffTable.svelte +10 -28
- package/dist/symmetry/cell-transform.js +6 -14
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +13 -10
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1142 -447
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +168 -53
- package/dist/table/ToggleMenu.svelte.d.ts +1 -1
- package/dist/table/index.d.ts +21 -6
- package/dist/table/index.js +34 -21
- package/dist/theme/ThemeControl.svelte +16 -8
- package/dist/theme/embedded.d.ts +18 -0
- package/dist/theme/embedded.js +206 -0
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +5 -12
- package/dist/theme/themes.mjs +44 -66
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +3 -6
- package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
- package/dist/tooltip/index.d.ts +8 -1
- package/dist/trajectory/Trajectory.svelte +613 -386
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +12 -74
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
- package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
- package/dist/trajectory/extract.js +61 -49
- package/dist/trajectory/format-detect.d.ts +2 -0
- package/dist/trajectory/format-detect.js +17 -13
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +35 -32
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +34 -56
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +5 -8
- package/dist/trajectory/parse/ase.js +1 -1
- package/dist/trajectory/parse/h5-utils.d.ts +13 -0
- package/dist/trajectory/parse/h5-utils.js +109 -0
- package/dist/trajectory/parse/hdf5.d.ts +1 -1
- package/dist/trajectory/parse/hdf5.js +116 -106
- package/dist/trajectory/parse/index.d.ts +6 -6
- package/dist/trajectory/parse/index.js +25 -33
- package/dist/trajectory/parse/lammps.js +8 -12
- package/dist/trajectory/parse/vasp.js +10 -7
- package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
- package/dist/trajectory/parse/vaspout-electronic.js +207 -0
- package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
- package/dist/trajectory/parse/vaspout-h5.js +281 -0
- package/dist/trajectory/parse/xyz.js +59 -9
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +113 -64
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +79 -118
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +24 -62
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +69 -95
- package/package.json +94 -34
- package/readme.md +6 -5
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
- package/dist/scene/types.d.ts +0 -26
- package/dist/tooltip/types.d.ts +0 -8
- package/dist/trajectory/constants.d.ts +0 -6
- package/dist/trajectory/constants.js +0 -11
- /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
- /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Fill-between utility functions for ScatterPlot fill regions
|
|
2
2
|
// Each fill edge is traced through its boundary's own points with the same curve the series line
|
|
3
|
-
// uses (
|
|
4
|
-
// edge
|
|
5
|
-
//
|
|
3
|
+
// uses (a series edge inherits the series' `line_style.curve`, default monotoneX), so an unclipped
|
|
4
|
+
// fill edge coincides with the line it borders. When an edge is clipped (x_range / partial
|
|
5
|
+
// overlap), inserted endpoints are evaluated on a monotone-cubic approximation: sub-pixel for
|
|
6
|
+
// monotoneX/linear/step, but natural/basis/catmullRom edges can deviate more at the clip points.
|
|
6
7
|
import { curveBasis, curveCardinal, curveCatmullRom, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, line, } from 'd3-shape';
|
|
7
8
|
// Epsilon value for log scale clamping (to avoid log(0) = -Infinity)
|
|
8
9
|
export const LOG_EPSILON = 1e-10;
|
|
@@ -145,6 +146,19 @@ const finite_points = (xs, ys) => clean_pts(Array.from({ length: Math.min(xs.len
|
|
|
145
146
|
x: xs[idx],
|
|
146
147
|
y: ys[idx],
|
|
147
148
|
})));
|
|
149
|
+
// Bridge the public LineCurve vocabulary (series `line_style.curve`) to FillCurveType names so
|
|
150
|
+
// a series fill edge traces with the same curve as its rendered line. Default: monotoneX.
|
|
151
|
+
const LINE_CURVE_TO_FILL = {
|
|
152
|
+
linear: `linear`,
|
|
153
|
+
monotone: `monotoneX`,
|
|
154
|
+
natural: `natural`,
|
|
155
|
+
step: `step`,
|
|
156
|
+
basis: `basis`,
|
|
157
|
+
'catmull-rom': `catmullRom`,
|
|
158
|
+
};
|
|
159
|
+
const line_curve_to_fill = (curve) =>
|
|
160
|
+
// ?? monotoneX guards an unknown string from an untyped (Python/JSON) caller
|
|
161
|
+
(curve ? LINE_CURVE_TO_FILL[curve] : undefined) ?? `monotoneX`;
|
|
148
162
|
// Resolve a boundary to native points + curve in data coordinates. `companion` supplies x
|
|
149
163
|
// positions for boundaries that don't define their own (constant/axis/function/data-without-x).
|
|
150
164
|
export function resolve_boundary_points(boundary, series, domains, companion) {
|
|
@@ -157,15 +171,16 @@ export function resolve_boundary_points(boundary, series, domains, companion) {
|
|
|
157
171
|
points: horizontal(span_xs, y),
|
|
158
172
|
curve: `linear`,
|
|
159
173
|
});
|
|
160
|
-
//
|
|
161
|
-
|
|
174
|
+
// function / data edges trace with monotoneX by default; a series edge inherits the
|
|
175
|
+
// series' own line curve so the fill border coincides with the rendered line
|
|
176
|
+
const curved_edge = (points, curve = `monotoneX`) => (points.length > 0 ? { points, curve } : null);
|
|
162
177
|
if (typeof boundary === `number`)
|
|
163
178
|
return flat_edge(boundary);
|
|
164
179
|
if (boundary.type === `series`) {
|
|
165
180
|
const resolved = resolve_series_ref(boundary, series);
|
|
166
181
|
if (!resolved)
|
|
167
182
|
return null;
|
|
168
|
-
return curved_edge(finite_points(resolved.x, resolved.y));
|
|
183
|
+
return curved_edge(finite_points(resolved.x, resolved.y), line_curve_to_fill(resolved.line_style?.curve));
|
|
169
184
|
}
|
|
170
185
|
if (boundary.type === `constant`)
|
|
171
186
|
return flat_edge(boundary.value);
|
|
@@ -345,6 +360,10 @@ const CURVE_MAP = {
|
|
|
345
360
|
natural: curveNatural,
|
|
346
361
|
};
|
|
347
362
|
const get_curve = (curve_type) => CURVE_MAP[curve_type] ?? curveMonotoneX;
|
|
363
|
+
// Resolve a public LineCurve (a series' `line_style.curve`) to its d3 CurveFactory. Single source
|
|
364
|
+
// of truth shared by Line.svelte and PlotMarginals.svelte (composes the LineCurve -> FillCurveType
|
|
365
|
+
// -> CurveFactory maps); unknown/undefined falls back to curveMonotoneX.
|
|
366
|
+
export const line_curve_factory = (curve) => get_curve(line_curve_to_fill(curve));
|
|
348
367
|
const trace = (points, curve_type) => line()
|
|
349
368
|
.x((pt) => pt.x)
|
|
350
369
|
.y((pt) => pt.y)
|
|
@@ -378,6 +397,9 @@ export function convert_error_band_to_fill_region(error_band, series, default_co
|
|
|
378
397
|
return {
|
|
379
398
|
id: error_band.id,
|
|
380
399
|
label: error_band.label,
|
|
400
|
+
// band edges are data boundaries (default monotoneX); inherit the central series' line
|
|
401
|
+
// curve so the band traces with the same curve as the line it brackets
|
|
402
|
+
curve: line_curve_to_fill(resolved.line_style?.curve),
|
|
381
403
|
upper: { type: `data`, x, values: y.map((val, idx) => val + upper_err[idx]) },
|
|
382
404
|
lower: { type: `data`, x, values: y.map((val, idx) => val - lower_err[idx]) },
|
|
383
405
|
fill: error_band.fill ?? default_color ?? `#4e79a7`,
|
package/dist/plot/core/index.js
CHANGED
|
@@ -7,8 +7,6 @@ export function get_relative_coords(evt, element = evt.currentTarget) {
|
|
|
7
7
|
if (!(element instanceof Element))
|
|
8
8
|
return null;
|
|
9
9
|
const box = element.getBoundingClientRect();
|
|
10
|
-
if (!box)
|
|
11
|
-
return null;
|
|
12
10
|
return { x: evt.clientX - box.left, y: evt.clientY - box.top };
|
|
13
11
|
}
|
|
14
12
|
// Resolve a delegated event to the integer value of the nearest ancestor's data
|
|
@@ -5,14 +5,20 @@ export type Sides = {
|
|
|
5
5
|
l?: number;
|
|
6
6
|
r?: number;
|
|
7
7
|
};
|
|
8
|
-
export declare const LABEL_GAP_DEFAULT =
|
|
8
|
+
export declare const LABEL_GAP_DEFAULT = 20;
|
|
9
|
+
export declare const DEFAULT_PLOT_PADDING: Required<Sides>;
|
|
9
10
|
export declare function y2_axis_label_x(axis: AxisConfig, width: number, pad_r: number, max_tick_width: number): number;
|
|
10
11
|
export declare const filter_padding: (padding: Partial<Sides> | undefined | null, defaults: Required<Sides>) => Required<Sides>;
|
|
11
12
|
export declare function measure_text_width(text: string, font?: string): number;
|
|
12
|
-
|
|
13
|
+
type Size = {
|
|
13
14
|
width: number;
|
|
14
15
|
height: number;
|
|
15
16
|
};
|
|
17
|
+
type ElementFootprint = Size & {
|
|
18
|
+
offset_x: number;
|
|
19
|
+
offset_y: number;
|
|
20
|
+
};
|
|
21
|
+
export declare const full_footprint_or: (el: HTMLElement | null | undefined, fallback: Size) => ElementFootprint;
|
|
16
22
|
export interface AutoPaddingConfig {
|
|
17
23
|
padding: Partial<Sides>;
|
|
18
24
|
default_padding: Required<Sides>;
|
|
@@ -30,6 +36,7 @@ export interface AutoPaddingConfig {
|
|
|
30
36
|
export declare const measure_max_tick_width: (ticks: (string | number)[], format?: string) => number;
|
|
31
37
|
export declare const TICK_LABEL_HEIGHT = 16;
|
|
32
38
|
export declare const AXIS_LABEL_HEIGHT = 20;
|
|
39
|
+
export declare const AXIS_TITLE_OFFSET: number;
|
|
33
40
|
export declare const calc_auto_padding: ({ padding, default_padding, x2_axis, y_axis, y2_axis, label_gap, }: AutoPaddingConfig) => Required<Sides>;
|
|
34
41
|
export declare function constrain_tooltip_position(cursor_x: number, cursor_y: number, tooltip_width: number, tooltip_height: number, viewport_width: number, viewport_height: number, options?: {
|
|
35
42
|
offset?: number;
|
|
@@ -50,10 +57,7 @@ export declare const centered_rect: (center_x: number, top_y: number, width: num
|
|
|
50
57
|
export declare const rect_within_rect: (rect: Rect, bounds: Rect) => boolean;
|
|
51
58
|
export interface ElementPlacementConfig {
|
|
52
59
|
plot_bounds: Rect;
|
|
53
|
-
element_size:
|
|
54
|
-
width: number;
|
|
55
|
-
height: number;
|
|
56
|
-
};
|
|
60
|
+
element_size: Size;
|
|
57
61
|
element?: HTMLElement | null;
|
|
58
62
|
axis_clearance?: number;
|
|
59
63
|
exclude_rects?: Rect[];
|
|
@@ -68,6 +72,10 @@ export interface ElementPlacementResult {
|
|
|
68
72
|
y: number;
|
|
69
73
|
score: number;
|
|
70
74
|
}
|
|
75
|
+
export declare const point_in_rect: (point: {
|
|
76
|
+
x: number;
|
|
77
|
+
y: number;
|
|
78
|
+
}, rect: Rect) => boolean;
|
|
71
79
|
export declare const rects_overlap: (r1: Rect, r2: Rect) => boolean;
|
|
72
80
|
export declare function sample_series_obstacle_points(pixel_points: {
|
|
73
81
|
x: number;
|
|
@@ -77,3 +85,4 @@ export declare function sample_series_obstacle_points(pixel_points: {
|
|
|
77
85
|
y: number;
|
|
78
86
|
}[];
|
|
79
87
|
export declare function compute_element_placement(config: ElementPlacementConfig): ElementPlacementResult;
|
|
88
|
+
export {};
|
package/dist/plot/core/layout.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { format_value } from '../../labels';
|
|
2
2
|
import { euclidean_dist } from '../../math';
|
|
3
3
|
// Default gap between tick labels and axis labels
|
|
4
|
-
export const LABEL_GAP_DEFAULT =
|
|
4
|
+
export const LABEL_GAP_DEFAULT = 20;
|
|
5
|
+
// Default plot padding (px) reserved for axis ticks/labels, shared by
|
|
6
|
+
// Histogram/BarPlot/BoxPlot/BinnedScatterPlot (ScatterPlot keeps its own bespoke default)
|
|
7
|
+
export const DEFAULT_PLOT_PADDING = { t: 20, b: 60, l: 60, r: 20 };
|
|
5
8
|
// X position for a right-side (y2) axis label: past the plot edge plus tick shift and
|
|
6
9
|
// measured tick-label width (both zero when tick labels render inside the plot)
|
|
7
10
|
export function y2_axis_label_x(axis, width, pad_r, max_tick_width) {
|
|
@@ -28,23 +31,35 @@ export function measure_text_width(text, font = `12px sans-serif`) {
|
|
|
28
31
|
ctx.font = font;
|
|
29
32
|
return ctx.measureText(text).width;
|
|
30
33
|
}
|
|
31
|
-
|
|
32
|
-
// offset box. Colorbar tick labels are position:absolute outside the bar, so
|
|
33
|
-
// offsetWidth/offsetHeight underestimate the space they actually occupy — which lets
|
|
34
|
-
// auto-placement put the colorbar where its labels overlap the axes.
|
|
35
|
-
export function measure_full_footprint(el) {
|
|
34
|
+
function measure_full_footprint(el) {
|
|
36
35
|
const root = el.getBoundingClientRect();
|
|
36
|
+
let left = root.left;
|
|
37
|
+
let top = root.top;
|
|
37
38
|
let right = root.right;
|
|
38
39
|
let bottom = root.bottom;
|
|
39
40
|
for (const child of el.querySelectorAll(`*`)) {
|
|
40
41
|
const rect = child.getBoundingClientRect();
|
|
41
42
|
if (rect.width === 0 && rect.height === 0)
|
|
42
43
|
continue;
|
|
44
|
+
left = Math.min(left, rect.left);
|
|
45
|
+
top = Math.min(top, rect.top);
|
|
43
46
|
right = Math.max(right, rect.right);
|
|
44
47
|
bottom = Math.max(bottom, rect.bottom);
|
|
45
48
|
}
|
|
46
|
-
return {
|
|
49
|
+
return {
|
|
50
|
+
width: right - left,
|
|
51
|
+
height: bottom - top,
|
|
52
|
+
offset_x: left - root.left,
|
|
53
|
+
offset_y: top - root.top,
|
|
54
|
+
};
|
|
47
55
|
}
|
|
56
|
+
// Full footprint once the element is laid out, else `fallback` (offset dims read 0
|
|
57
|
+
// before first render). NOT interchangeable with auto-place's measured_footprint:
|
|
58
|
+
// that returns the offset box, which underestimates elements with overflowing
|
|
59
|
+
// absolutely-positioned descendants like colorbar tick labels.
|
|
60
|
+
export const full_footprint_or = (el, fallback) => el?.offsetWidth && el?.offsetHeight
|
|
61
|
+
? measure_full_footprint(el)
|
|
62
|
+
: { ...fallback, offset_x: 0, offset_y: 0 };
|
|
48
63
|
// Measure the widest formatted tick label. Used for auto-padding and label placement.
|
|
49
64
|
export const measure_max_tick_width = (ticks, format = ``) => ticks.length === 0
|
|
50
65
|
? 0
|
|
@@ -56,22 +71,28 @@ export const measure_max_tick_width = (ticks, format = ``) => ticks.length === 0
|
|
|
56
71
|
export const TICK_LABEL_HEIGHT = 16;
|
|
57
72
|
// Estimated height of an axis label (font-size ~14px + margin)
|
|
58
73
|
export const AXIS_LABEL_HEIGHT = 20;
|
|
74
|
+
// Distance from an x/x2 axis baseline to the title center.
|
|
75
|
+
export const AXIS_TITLE_OFFSET = TICK_LABEL_HEIGHT + LABEL_GAP_DEFAULT;
|
|
59
76
|
export const calc_auto_padding = ({ padding, default_padding, x2_axis = {}, y_axis = {}, y2_axis = {}, label_gap = LABEL_GAP_DEFAULT, }) => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
77
|
+
// Padding for a vertical-axis side (y/y2): when ticks render, reserve widest tick label + gap +
|
|
78
|
+
// the rotated axis-title width (mirrors the `t` branch's AXIS_LABEL_HEIGHT) so a wide tick label
|
|
79
|
+
// can't overlap the title. With no tick labels (e.g. no y2 series) reserve nothing extra.
|
|
80
|
+
const side_pad = (axis, default_side) => {
|
|
81
|
+
const ticks = axis.tick_values ?? [];
|
|
82
|
+
if (ticks.length === 0)
|
|
83
|
+
return default_side;
|
|
84
|
+
return Math.max(default_side, measure_max_tick_width(ticks, axis.format ?? ``) +
|
|
85
|
+
label_gap +
|
|
86
|
+
(axis.label ? AXIS_LABEL_HEIGHT : 0));
|
|
87
|
+
};
|
|
65
88
|
return {
|
|
66
89
|
t: padding.t ??
|
|
67
|
-
(
|
|
90
|
+
((x2_axis.tick_values ?? []).length > 0
|
|
68
91
|
? Math.max(default_padding.t, TICK_LABEL_HEIGHT + label_gap + (x2_axis.label ? AXIS_LABEL_HEIGHT : 0))
|
|
69
92
|
: default_padding.t),
|
|
70
93
|
b: padding.b ?? default_padding.b,
|
|
71
|
-
l: padding.l ??
|
|
72
|
-
|
|
73
|
-
r: padding.r ??
|
|
74
|
-
Math.max(default_padding.r, measure_max_tick_width(y2_ticks, y2_format) + label_gap),
|
|
94
|
+
l: padding.l ?? side_pad(y_axis, default_padding.l),
|
|
95
|
+
r: padding.r ?? side_pad(y2_axis, default_padding.r),
|
|
75
96
|
};
|
|
76
97
|
};
|
|
77
98
|
// Constrain tooltip position within bounds, flipping to opposite side if overflow
|
|
@@ -139,7 +160,7 @@ const DISTANCE_WEIGHT = 0.001;
|
|
|
139
160
|
const CORNER_WEIGHT = 5.0;
|
|
140
161
|
const MAX_SAMPLE_POINTS = 500;
|
|
141
162
|
// Check if a point is inside a rectangle
|
|
142
|
-
const point_in_rect = (point, rect) => point.x >= rect.x &&
|
|
163
|
+
export const point_in_rect = (point, rect) => point.x >= rect.x &&
|
|
143
164
|
point.x <= rect.x + rect.width &&
|
|
144
165
|
point.y >= rect.y &&
|
|
145
166
|
point.y <= rect.y + rect.height;
|
|
@@ -186,14 +207,16 @@ export function compute_element_placement(config) {
|
|
|
186
207
|
// Measure the element's full footprint (incl. descendants that overflow its box,
|
|
187
208
|
// such as colorbar tick labels) once it's laid out; fall back to element_size before
|
|
188
209
|
// first render. Centralizing this keeps every plot's auto-placement overlap-free.
|
|
189
|
-
const { width: elem_width, height: elem_height } = element
|
|
190
|
-
? measure_full_footprint(element)
|
|
191
|
-
: element_size;
|
|
210
|
+
const { width: elem_width, height: elem_height, offset_x, offset_y, } = full_footprint_or(element, element_size);
|
|
192
211
|
// Calculate valid placement region (plot bounds minus axis clearance)
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const
|
|
212
|
+
const plot_left = plot_bounds.x + axis_clearance;
|
|
213
|
+
const plot_right = plot_bounds.x + plot_bounds.width - axis_clearance;
|
|
214
|
+
const plot_top = plot_bounds.y + axis_clearance;
|
|
215
|
+
const plot_bottom = plot_bounds.y + plot_bounds.height - axis_clearance;
|
|
216
|
+
const valid_x_min = plot_left - offset_x;
|
|
217
|
+
const valid_y_min = plot_top - offset_y;
|
|
218
|
+
const valid_x_max = plot_right - offset_x - elem_width;
|
|
219
|
+
const valid_y_max = plot_bottom - offset_y - elem_height;
|
|
197
220
|
// Handle case where element is too large for the valid region
|
|
198
221
|
const effective_x_min = Math.min(valid_x_min, valid_x_max);
|
|
199
222
|
const effective_x_max = Math.max(valid_x_min, valid_x_max);
|
|
@@ -216,18 +239,14 @@ export function compute_element_placement(config) {
|
|
|
216
239
|
? (effective_y_max - effective_y_min) / (grid_resolution - 1)
|
|
217
240
|
: 0;
|
|
218
241
|
// Precompute plot corners (constant across all candidates)
|
|
219
|
-
const plot_left = plot_bounds.x + axis_clearance;
|
|
220
|
-
const plot_right = plot_bounds.x + plot_bounds.width - axis_clearance;
|
|
221
|
-
const plot_top = plot_bounds.y + axis_clearance;
|
|
222
|
-
const plot_bottom = plot_bounds.y + plot_bounds.height - axis_clearance;
|
|
223
242
|
const max_corner_dist = euclidean_dist([plot_left, plot_top], [plot_right, plot_bottom]);
|
|
224
243
|
for (let grid_x = 0; grid_x < grid_resolution; grid_x++) {
|
|
225
244
|
for (let grid_y = 0; grid_y < grid_resolution; grid_y++) {
|
|
226
245
|
const cand_x = effective_x_min + grid_x * x_step;
|
|
227
246
|
const cand_y = effective_y_min + grid_y * y_step;
|
|
228
247
|
const cand_rect = {
|
|
229
|
-
x: cand_x,
|
|
230
|
-
y: cand_y,
|
|
248
|
+
x: cand_x + offset_x,
|
|
249
|
+
y: cand_y + offset_y,
|
|
231
250
|
width: elem_width,
|
|
232
251
|
height: elem_height,
|
|
233
252
|
};
|
|
@@ -241,8 +260,8 @@ export function compute_element_placement(config) {
|
|
|
241
260
|
// Count points overlapping this candidate position
|
|
242
261
|
let overlap_count = 0;
|
|
243
262
|
let min_distance_sq = Infinity;
|
|
244
|
-
const center_x =
|
|
245
|
-
const center_y =
|
|
263
|
+
const center_x = cand_rect.x + elem_width / 2;
|
|
264
|
+
const center_y = cand_rect.y + elem_height / 2;
|
|
246
265
|
for (const point of sampled_points) {
|
|
247
266
|
if (point_in_rect(point, cand_rect)) {
|
|
248
267
|
overlap_count++;
|
|
@@ -262,12 +281,12 @@ export function compute_element_placement(config) {
|
|
|
262
281
|
// Corner preference: use element's actual corner (not center) for distance
|
|
263
282
|
// This ensures a wide element at the left edge gets proper corner credit
|
|
264
283
|
// (measured footprint, same as cand_rect — not the element_size fallback)
|
|
265
|
-
const elem_right =
|
|
266
|
-
const elem_bottom =
|
|
284
|
+
const elem_right = cand_rect.x + elem_width;
|
|
285
|
+
const elem_bottom = cand_rect.y + elem_height;
|
|
267
286
|
// Distance from element's matching corner to each plot corner
|
|
268
|
-
const min_corner_dist = Math.min(euclidean_dist([
|
|
269
|
-
euclidean_dist([elem_right,
|
|
270
|
-
euclidean_dist([
|
|
287
|
+
const min_corner_dist = Math.min(euclidean_dist([cand_rect.x, cand_rect.y], [plot_left, plot_top]), // top-left
|
|
288
|
+
euclidean_dist([elem_right, cand_rect.y], [plot_right, plot_top]), // top-right
|
|
289
|
+
euclidean_dist([cand_rect.x, elem_bottom], [plot_left, plot_bottom]), // bottom-left
|
|
271
290
|
euclidean_dist([elem_right, elem_bottom], [plot_right, plot_bottom]));
|
|
272
291
|
// Higher bonus for positions closer to corners (0 = at corner, 1 = far from all)
|
|
273
292
|
const corner_bonus = max_corner_dist > 0 ? (1 - min_corner_dist / max_corner_dist) * CORNER_WEIGHT : 0;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { Vec2 } from '../../math';
|
|
2
|
+
import type { Rect, Sides } from './layout';
|
|
3
|
+
import type { LineCurve, ScaleType } from './types';
|
|
4
|
+
import type { Snippet } from 'svelte';
|
|
5
|
+
export type MarginalSide = `top` | `bottom` | `left` | `right`;
|
|
6
|
+
export type MarginalType = `histogram` | `kde` | `cdf` | `rug`;
|
|
7
|
+
export type MarginalPlacement = `auto` | `flush` | `outer`;
|
|
8
|
+
export type MarginalNormalize = `count` | `density` | `probability`;
|
|
9
|
+
export type MarginalAxisBinding = `x1` | `x2` | `y1` | `y2`;
|
|
10
|
+
export declare const MARGINAL_SIDES: readonly ["top", "bottom", "left", "right"];
|
|
11
|
+
export type MarginalCurve = {
|
|
12
|
+
kind: `bars`;
|
|
13
|
+
bins: {
|
|
14
|
+
pos0: number;
|
|
15
|
+
pos1: number;
|
|
16
|
+
value: number;
|
|
17
|
+
}[];
|
|
18
|
+
max: number;
|
|
19
|
+
} | {
|
|
20
|
+
kind: `line`;
|
|
21
|
+
points: {
|
|
22
|
+
pos: number;
|
|
23
|
+
value: number;
|
|
24
|
+
}[];
|
|
25
|
+
max: number;
|
|
26
|
+
} | {
|
|
27
|
+
kind: `rug`;
|
|
28
|
+
positions: number[];
|
|
29
|
+
};
|
|
30
|
+
export interface MarginalComputeContext {
|
|
31
|
+
config: ResolvedMarginalConfig;
|
|
32
|
+
side: MarginalSide;
|
|
33
|
+
positional_range: Vec2;
|
|
34
|
+
scale_type: ScaleType;
|
|
35
|
+
}
|
|
36
|
+
export interface MarginalConfig {
|
|
37
|
+
type?: MarginalType;
|
|
38
|
+
size?: number;
|
|
39
|
+
gap?: number;
|
|
40
|
+
placement?: MarginalPlacement;
|
|
41
|
+
axis?: MarginalAxisBinding;
|
|
42
|
+
bins?: number;
|
|
43
|
+
bandwidth?: number | `silverman` | `scott`;
|
|
44
|
+
normalize?: MarginalNormalize;
|
|
45
|
+
per_series?: boolean;
|
|
46
|
+
color?: string;
|
|
47
|
+
fill?: string;
|
|
48
|
+
fill_opacity?: number;
|
|
49
|
+
stroke?: string;
|
|
50
|
+
stroke_width?: number;
|
|
51
|
+
opacity?: number;
|
|
52
|
+
curve?: LineCurve;
|
|
53
|
+
value_range?: Vec2;
|
|
54
|
+
value_axis?: boolean;
|
|
55
|
+
label?: string;
|
|
56
|
+
data?: readonly number[] | ((ctx: MarginalComputeContext) => readonly number[]);
|
|
57
|
+
reduce?: (values: number[], weights: number[] | undefined, ctx: MarginalComputeContext) => MarginalCurve;
|
|
58
|
+
snippet?: Snippet<[MarginalRenderContext]>;
|
|
59
|
+
hover?: boolean;
|
|
60
|
+
tooltip?: Snippet<[MarginalHover]>;
|
|
61
|
+
class?: string;
|
|
62
|
+
style?: string;
|
|
63
|
+
}
|
|
64
|
+
export type ResolvedMarginalConfig = MarginalConfig & {
|
|
65
|
+
type: MarginalType;
|
|
66
|
+
size: number;
|
|
67
|
+
gap: number;
|
|
68
|
+
placement: MarginalPlacement;
|
|
69
|
+
per_series: boolean;
|
|
70
|
+
bins: number;
|
|
71
|
+
bandwidth: number | `silverman` | `scott`;
|
|
72
|
+
stroke_width: number;
|
|
73
|
+
opacity: number;
|
|
74
|
+
value_axis: boolean;
|
|
75
|
+
};
|
|
76
|
+
export type MarginalSideInput = boolean | MarginalType | MarginalConfig;
|
|
77
|
+
export type MarginalsProp = boolean | MarginalType | Partial<Record<MarginalSide, MarginalSideInput>>;
|
|
78
|
+
export type ResolvedMarginals = Record<MarginalSide, ResolvedMarginalConfig | null>;
|
|
79
|
+
export interface MarginalSeriesInput {
|
|
80
|
+
x?: ArrayLike<number>;
|
|
81
|
+
y?: ArrayLike<number>;
|
|
82
|
+
weight?: ArrayLike<number>;
|
|
83
|
+
color: string;
|
|
84
|
+
label?: string;
|
|
85
|
+
visible?: boolean;
|
|
86
|
+
x_axis?: `x1` | `x2`;
|
|
87
|
+
y_axis?: `y1` | `y2`;
|
|
88
|
+
}
|
|
89
|
+
export interface MarginalSeriesCurve {
|
|
90
|
+
series_idx: number;
|
|
91
|
+
color: string;
|
|
92
|
+
label?: string;
|
|
93
|
+
curve: MarginalCurve;
|
|
94
|
+
}
|
|
95
|
+
export type ScaleFn = (value: number) => number;
|
|
96
|
+
export interface MarginalAxis {
|
|
97
|
+
scale: ScaleFn;
|
|
98
|
+
range: Vec2;
|
|
99
|
+
scale_type?: ScaleType;
|
|
100
|
+
format?: string;
|
|
101
|
+
tick_label?: (value: number) => string | undefined;
|
|
102
|
+
label?: string;
|
|
103
|
+
}
|
|
104
|
+
export type MarginalAxes = {
|
|
105
|
+
x1: MarginalAxis;
|
|
106
|
+
x2?: MarginalAxis;
|
|
107
|
+
y1: MarginalAxis;
|
|
108
|
+
y2?: MarginalAxis;
|
|
109
|
+
};
|
|
110
|
+
export declare const marginal_axis: (scale: ScaleFn, range: Vec2, axis: {
|
|
111
|
+
scale_type?: ScaleType;
|
|
112
|
+
format?: string;
|
|
113
|
+
label?: string;
|
|
114
|
+
}, tick_label?: (value: number) => string | undefined) => MarginalAxis;
|
|
115
|
+
export interface MarginalRenderContext extends MarginalComputeContext {
|
|
116
|
+
rect: Rect;
|
|
117
|
+
positional_scale: ScaleFn;
|
|
118
|
+
value_scale: ScaleFn;
|
|
119
|
+
baseline: number;
|
|
120
|
+
curves: MarginalSeriesCurve[];
|
|
121
|
+
series: MarginalSeriesInput[];
|
|
122
|
+
format?: string;
|
|
123
|
+
tick_label?: (value: number) => string | undefined;
|
|
124
|
+
axis_title?: string;
|
|
125
|
+
}
|
|
126
|
+
export declare const MARGINAL_HIT_TOLERANCE_PX = 10;
|
|
127
|
+
export interface MarginalHover {
|
|
128
|
+
side: MarginalSide;
|
|
129
|
+
x: number;
|
|
130
|
+
y: number;
|
|
131
|
+
color: string;
|
|
132
|
+
label?: string;
|
|
133
|
+
kind: MarginalCurve[`kind`];
|
|
134
|
+
pos: number;
|
|
135
|
+
pos0?: number;
|
|
136
|
+
pos1?: number;
|
|
137
|
+
value?: number;
|
|
138
|
+
config: ResolvedMarginalConfig;
|
|
139
|
+
scale_type: ScaleType;
|
|
140
|
+
format?: string;
|
|
141
|
+
pos_label?: string;
|
|
142
|
+
axis_title?: string;
|
|
143
|
+
}
|
|
144
|
+
export declare function marginal_hit(ctx: MarginalRenderContext, px: number, py: number): MarginalHover | null;
|
|
145
|
+
export declare const MARGINAL_DEFAULTS: {
|
|
146
|
+
type: MarginalType;
|
|
147
|
+
size: number;
|
|
148
|
+
gap: number;
|
|
149
|
+
placement: MarginalPlacement;
|
|
150
|
+
per_series: boolean;
|
|
151
|
+
bins: number;
|
|
152
|
+
bandwidth: "silverman";
|
|
153
|
+
stroke_width: number;
|
|
154
|
+
opacity: number;
|
|
155
|
+
value_axis: boolean;
|
|
156
|
+
};
|
|
157
|
+
export declare function normalize_marginals(prop: MarginalsProp | undefined, default_sides?: Partial<Record<MarginalSide, MarginalSideInput>>): ResolvedMarginals;
|
|
158
|
+
export declare function reserve_marginal_pad(resolved: ResolvedMarginals): Required<Sides>;
|
|
159
|
+
export declare const add_sides: (a: Required<Sides>, b: Required<Sides>) => Required<Sides>;
|
|
160
|
+
export declare const default_axis_for_side: (side: MarginalSide) => MarginalAxisBinding;
|
|
161
|
+
export declare const marginal_axis_presence: (top: boolean, right: boolean) => Record<MarginalSide, boolean>;
|
|
162
|
+
export declare function marginal_strip_rect(side: MarginalSide, pad: Required<Sides>, width: number, height: number, config: ResolvedMarginalConfig, has_axis: boolean): Rect;
|
|
163
|
+
export declare function marginal_value_scale(side: MarginalSide, rect: Rect, domain: Vec2): {
|
|
164
|
+
scale: (value: number) => number;
|
|
165
|
+
baseline: number;
|
|
166
|
+
};
|
|
167
|
+
export declare function compute_marginal_curve(positions: ArrayLike<number>, weights: ArrayLike<number> | undefined, config: ResolvedMarginalConfig, positional_range: Vec2, scale_type: ScaleType): MarginalCurve;
|
|
168
|
+
export declare const curves_max: (curves: MarginalCurve[]) => number;
|
|
169
|
+
export declare const default_marginal_label: (config: ResolvedMarginalConfig) => string;
|
|
170
|
+
export declare const marginal_value_format: (config: ResolvedMarginalConfig) => string;
|