matterviz 0.3.6 → 0.4.0
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.d.ts +9 -0
- package/dist/FilePicker.svelte +360 -0
- package/dist/FilePicker.svelte.d.ts +17 -0
- package/dist/Icon.svelte +44 -0
- package/dist/Icon.svelte.d.ts +13 -0
- package/dist/MillerIndexInput.svelte +66 -0
- package/dist/MillerIndexInput.svelte.d.ts +7 -0
- package/dist/api/mp.d.ts +6 -0
- package/dist/api/mp.js +22 -0
- package/dist/api/optimade.d.ts +45 -0
- package/dist/api/optimade.js +141 -0
- package/dist/app.css +244 -0
- package/dist/brillouin/BrillouinZone.svelte +554 -0
- package/dist/brillouin/BrillouinZone.svelte.d.ts +84 -0
- package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
- package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
- package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
- package/dist/brillouin/BrillouinZoneScene.svelte +522 -0
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +49 -0
- package/dist/brillouin/BrillouinZoneTooltip.svelte +83 -0
- package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
- package/dist/brillouin/compute.d.ts +17 -0
- package/dist/brillouin/compute.js +422 -0
- package/dist/brillouin/index.d.ts +8 -0
- package/dist/brillouin/index.js +7 -0
- package/dist/brillouin/types.d.ts +43 -0
- package/dist/brillouin/types.js +1 -0
- package/dist/chempot-diagram/ChemPotDiagram.svelte +328 -0
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +843 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3191 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
- package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
- package/dist/chempot-diagram/async-compute.svelte.js +80 -0
- package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
- package/dist/chempot-diagram/chempot-worker.js +12 -0
- package/dist/chempot-diagram/color.d.ts +10 -0
- package/dist/chempot-diagram/color.js +32 -0
- package/dist/chempot-diagram/compute.d.ts +48 -0
- package/dist/chempot-diagram/compute.js +804 -0
- package/dist/chempot-diagram/index.d.ts +6 -0
- package/dist/chempot-diagram/index.js +6 -0
- package/dist/chempot-diagram/pointer.d.ts +16 -0
- package/dist/chempot-diagram/pointer.js +40 -0
- package/dist/chempot-diagram/temperature.d.ts +15 -0
- package/dist/chempot-diagram/temperature.js +34 -0
- package/dist/chempot-diagram/types.d.ts +81 -0
- package/dist/chempot-diagram/types.js +28 -0
- package/dist/colors/index.d.ts +47 -0
- package/dist/colors/index.js +204 -0
- package/dist/composition/BarChart.svelte +297 -0
- package/dist/composition/BarChart.svelte.d.ts +39 -0
- package/dist/composition/BubbleChart.svelte +218 -0
- package/dist/composition/BubbleChart.svelte.d.ts +28 -0
- package/dist/composition/Composition.svelte +165 -0
- package/dist/composition/Composition.svelte.d.ts +15 -0
- package/dist/composition/Formula.svelte +268 -0
- package/dist/composition/Formula.svelte.d.ts +19 -0
- package/dist/composition/FormulaFilter.svelte +1263 -0
- package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
- package/dist/composition/PieChart.svelte +324 -0
- package/dist/composition/PieChart.svelte.d.ts +37 -0
- package/dist/composition/chem-sys.d.ts +8 -0
- package/dist/composition/chem-sys.js +85 -0
- package/dist/composition/format.d.ts +15 -0
- package/dist/composition/format.js +111 -0
- package/dist/composition/index.d.ts +21 -0
- package/dist/composition/index.js +15 -0
- package/dist/composition/parse.d.ts +56 -0
- package/dist/composition/parse.js +486 -0
- package/dist/constants.d.ts +29 -0
- package/dist/constants.js +99 -0
- package/dist/controls.d.ts +14 -0
- package/dist/controls.js +30 -0
- package/dist/convex-hull/ConvexHull.svelte +157 -0
- package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
- package/dist/convex-hull/ConvexHull2D.svelte +827 -0
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
- package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
- package/dist/convex-hull/ConvexHull4D.svelte +1394 -0
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
- package/dist/convex-hull/ConvexHullControls.svelte +535 -0
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
- package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
- package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
- package/dist/convex-hull/ConvexHullStats.svelte +929 -0
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
- package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
- package/dist/convex-hull/GasPressureControls.svelte +247 -0
- package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
- package/dist/convex-hull/StructurePopup.svelte +151 -0
- package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
- package/dist/convex-hull/TemperatureSlider.svelte +140 -0
- package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
- package/dist/convex-hull/barycentric-coords.d.ts +18 -0
- package/dist/convex-hull/barycentric-coords.js +182 -0
- package/dist/convex-hull/demo-temperature.d.ts +6 -0
- package/dist/convex-hull/demo-temperature.js +38 -0
- package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
- package/dist/convex-hull/gas-thermodynamics.js +306 -0
- package/dist/convex-hull/helpers.d.ts +117 -0
- package/dist/convex-hull/helpers.js +718 -0
- package/dist/convex-hull/index.d.ts +119 -0
- package/dist/convex-hull/index.js +58 -0
- package/dist/convex-hull/thermodynamics.d.ts +67 -0
- package/dist/convex-hull/thermodynamics.js +1757 -0
- package/dist/convex-hull/types.d.ts +162 -0
- package/dist/convex-hull/types.js +36 -0
- package/dist/coordination/CoordinationBarPlot.svelte +311 -0
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
- package/dist/coordination/calc-coordination.d.ts +15 -0
- package/dist/coordination/calc-coordination.js +63 -0
- package/dist/coordination/index.d.ts +8 -0
- package/dist/coordination/index.js +7 -0
- package/dist/effects.svelte.d.ts +12 -0
- package/dist/effects.svelte.js +37 -0
- package/dist/element/BohrAtom.svelte.d.ts +20 -0
- package/dist/element/ElementHeading.svelte +26 -0
- package/dist/element/ElementHeading.svelte.d.ts +8 -0
- package/dist/element/ElementPhoto.svelte +57 -0
- package/dist/element/ElementPhoto.svelte.d.ts +9 -0
- package/dist/element/ElementStats.svelte +80 -0
- package/dist/element/ElementStats.svelte.d.ts +8 -0
- package/dist/element/ElementTile.svelte +484 -0
- package/dist/element/ElementTile.svelte.d.ts +29 -0
- package/dist/element/Nucleus.svelte.d.ts +17 -0
- package/dist/element/data.d.ts +2 -0
- package/dist/element/data.js +2 -0
- package/dist/element/index.d.ts +8 -0
- package/dist/element/index.js +7 -0
- package/dist/element/types.d.ts +57 -0
- package/dist/element/types.js +1 -0
- package/dist/feedback/ClickFeedback.svelte +58 -0
- package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
- package/dist/feedback/DragOverlay.svelte +42 -0
- package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
- package/dist/feedback/Spinner.svelte.d.ts +7 -0
- package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
- package/dist/feedback/index.d.ts +4 -0
- package/dist/feedback/index.js +4 -0
- package/dist/fermi-surface/FermiSlice.svelte +197 -0
- package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
- package/dist/fermi-surface/FermiSurface.svelte +606 -0
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
- package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
- package/dist/fermi-surface/FermiSurfaceScene.svelte +797 -0
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +85 -0
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
- package/dist/fermi-surface/compute.d.ts +5 -0
- package/dist/fermi-surface/compute.js +538 -0
- package/dist/fermi-surface/constants.d.ts +9 -0
- package/dist/fermi-surface/constants.js +27 -0
- package/dist/fermi-surface/export.d.ts +5 -0
- package/dist/fermi-surface/export.js +51 -0
- package/dist/fermi-surface/index.d.ts +12 -0
- package/dist/fermi-surface/index.js +13 -0
- package/dist/fermi-surface/marching-cubes.d.ts +2 -0
- package/dist/fermi-surface/marching-cubes.js +2 -0
- package/dist/fermi-surface/parse.d.ts +2 -0
- package/dist/fermi-surface/parse.js +494 -0
- package/dist/fermi-surface/symmetry.d.ts +3 -0
- package/dist/fermi-surface/symmetry.js +46 -0
- package/dist/fermi-surface/types.d.ts +111 -0
- package/dist/fermi-surface/types.js +4 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +1547 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
- package/dist/heatmap-matrix/index.d.ts +53 -0
- package/dist/heatmap-matrix/index.js +100 -0
- package/dist/heatmap-matrix/shared.d.ts +2 -0
- package/dist/heatmap-matrix/shared.js +4 -0
- package/dist/icons.d.ts +569 -0
- package/dist/icons.js +648 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +39 -0
- package/dist/io/decompress.d.ts +11 -0
- package/dist/io/decompress.js +76 -0
- package/dist/io/export.d.ts +16 -0
- package/dist/io/export.js +338 -0
- package/dist/io/fetch.d.ts +5 -0
- package/dist/io/fetch.js +43 -0
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +42 -0
- package/dist/io/index.d.ts +7 -0
- package/dist/io/index.js +6 -0
- package/dist/io/is-binary.d.ts +1 -0
- package/dist/io/is-binary.js +20 -0
- package/dist/io/types.d.ts +8 -0
- package/dist/io/types.js +1 -0
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +154 -0
- package/dist/isosurface/Isosurface.svelte +285 -0
- package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
- package/dist/isosurface/IsosurfaceControls.svelte +277 -0
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
- package/dist/isosurface/index.d.ts +5 -0
- package/dist/isosurface/index.js +6 -0
- package/dist/isosurface/parse.d.ts +6 -0
- package/dist/isosurface/parse.js +552 -0
- package/dist/isosurface/slice.d.ts +11 -0
- package/dist/isosurface/slice.js +141 -0
- package/dist/isosurface/types.d.ts +56 -0
- package/dist/isosurface/types.js +227 -0
- package/dist/keyboard.d.ts +3 -0
- package/dist/keyboard.js +23 -0
- package/dist/labels.d.ts +53 -0
- package/dist/labels.js +278 -0
- package/dist/layout/FullscreenToggle.svelte +50 -0
- package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
- package/dist/layout/InfoCard.svelte +120 -0
- package/dist/layout/InfoCard.svelte.d.ts +21 -0
- package/dist/layout/InfoTag.svelte +185 -0
- package/dist/layout/InfoTag.svelte.d.ts +19 -0
- package/dist/layout/PropertyFilter.svelte +247 -0
- package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
- package/dist/layout/SettingsSection.svelte +148 -0
- package/dist/layout/SettingsSection.svelte.d.ts +17 -0
- package/dist/layout/SubpageGrid.svelte +82 -0
- package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
- package/dist/layout/fullscreen.d.ts +9 -0
- package/dist/layout/fullscreen.js +53 -0
- package/dist/layout/index.d.ts +10 -0
- package/dist/layout/index.js +8 -0
- package/dist/layout/json-tree/JsonNode.svelte +548 -0
- package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
- package/dist/layout/json-tree/JsonTree.svelte +1230 -0
- package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
- package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
- package/dist/layout/json-tree/index.d.ts +3 -0
- package/dist/layout/json-tree/index.js +3 -0
- package/dist/layout/json-tree/types.d.ts +74 -0
- package/dist/layout/json-tree/types.js +2 -0
- package/dist/layout/json-tree/utils.d.ts +29 -0
- package/dist/layout/json-tree/utils.js +642 -0
- package/dist/marching-cubes.d.ts +14 -0
- package/dist/marching-cubes.js +535 -0
- package/dist/math.d.ts +105 -0
- package/dist/math.js +920 -0
- package/dist/overlays/ContextMenu.svelte +162 -0
- package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
- package/dist/overlays/CopyButton.svelte +45 -0
- package/dist/overlays/CopyButton.svelte.d.ts +8 -0
- package/dist/overlays/DragControlTab.svelte +98 -0
- package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
- package/dist/overlays/DraggablePane.svelte +487 -0
- package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
- package/dist/overlays/InfoPaneCards.svelte +149 -0
- package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
- package/dist/overlays/index.d.ts +3 -0
- package/dist/overlays/index.js +3 -0
- package/dist/periodic-table/PeriodicTable.svelte +480 -0
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
- package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
- package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
- package/dist/periodic-table/PropertySelect.svelte +38 -0
- package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
- package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
- package/dist/periodic-table/index.d.ts +10 -0
- package/dist/periodic-table/index.js +4 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1092 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
- package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +127 -0
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
- package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
- package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
- package/dist/phase-diagram/build-diagram.d.ts +11 -0
- package/dist/phase-diagram/build-diagram.js +160 -0
- package/dist/phase-diagram/colors.d.ts +35 -0
- package/dist/phase-diagram/colors.js +51 -0
- package/dist/phase-diagram/diagram-input.d.ts +29 -0
- package/dist/phase-diagram/diagram-input.js +3 -0
- package/dist/phase-diagram/index.d.ts +13 -0
- package/dist/phase-diagram/index.js +11 -0
- package/dist/phase-diagram/parse.d.ts +55 -0
- package/dist/phase-diagram/parse.js +273 -0
- package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
- package/dist/phase-diagram/svg-to-diagram.js +867 -0
- package/dist/phase-diagram/types.d.ts +93 -0
- package/dist/phase-diagram/types.js +1 -0
- package/dist/phase-diagram/utils.d.ts +118 -0
- package/dist/phase-diagram/utils.js +600 -0
- package/dist/plot/bar/BarPlot.svelte +1755 -0
- package/dist/plot/bar/BarPlot.svelte.d.ts +84 -0
- package/dist/plot/bar/BarPlotControls.svelte +67 -0
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +18 -0
- package/dist/plot/bar/SpacegroupBarPlot.svelte +293 -0
- package/dist/plot/bar/SpacegroupBarPlot.svelte.d.ts +9 -0
- package/dist/plot/bar/data.d.ts +40 -0
- package/dist/plot/bar/data.js +154 -0
- package/dist/plot/bar/geometry.d.ts +39 -0
- package/dist/plot/bar/geometry.js +60 -0
- package/dist/plot/bar/index.d.ts +3 -0
- package/dist/plot/bar/index.js +3 -0
- package/dist/plot/box/BoxPlot.svelte +1462 -0
- package/dist/plot/box/BoxPlot.svelte.d.ts +94 -0
- package/dist/plot/box/BoxPlotControls.svelte +109 -0
- package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
- package/dist/plot/box/Violin.svelte +14 -0
- package/dist/plot/box/Violin.svelte.d.ts +70 -0
- package/dist/plot/box/box-plot.d.ts +55 -0
- package/dist/plot/box/box-plot.js +126 -0
- package/dist/plot/box/index.d.ts +5 -0
- package/dist/plot/box/index.js +5 -0
- package/dist/plot/box/kde.d.ts +16 -0
- package/dist/plot/box/kde.js +160 -0
- package/dist/plot/box/quantile.d.ts +3 -0
- package/dist/plot/box/quantile.js +53 -0
- package/dist/plot/core/auto-place.d.ts +43 -0
- package/dist/plot/core/auto-place.js +122 -0
- package/dist/plot/core/axis-utils.d.ts +46 -0
- package/dist/plot/core/axis-utils.js +110 -0
- package/dist/plot/core/components/AxisLabel.svelte +51 -0
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +16 -0
- package/dist/plot/core/components/ColorBar.svelte +724 -0
- package/dist/plot/core/components/ColorBar.svelte.d.ts +31 -0
- package/dist/plot/core/components/ColorScaleSelect.svelte +55 -0
- package/dist/plot/core/components/ColorScaleSelect.svelte.d.ts +15 -0
- package/dist/plot/core/components/ControlPane.svelte +46 -0
- package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
- package/dist/plot/core/components/FillArea.svelte +234 -0
- package/dist/plot/core/components/FillArea.svelte.d.ts +21 -0
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +96 -0
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +14 -0
- package/dist/plot/core/components/Line.svelte +101 -0
- package/dist/plot/core/components/Line.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotAxis.svelte +171 -0
- package/dist/plot/core/components/PlotAxis.svelte.d.ts +25 -0
- package/dist/plot/core/components/PlotControls.svelte +525 -0
- package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
- package/dist/plot/core/components/PlotLegend.svelte +580 -0
- package/dist/plot/core/components/PlotLegend.svelte.d.ts +30 -0
- package/dist/plot/core/components/PlotTooltip.svelte +83 -0
- package/dist/plot/core/components/PlotTooltip.svelte.d.ts +25 -0
- package/dist/plot/core/components/PortalSelect.svelte +257 -0
- package/dist/plot/core/components/PortalSelect.svelte.d.ts +16 -0
- package/dist/plot/core/components/ReferenceLine.svelte +204 -0
- package/dist/plot/core/components/ReferenceLine.svelte.d.ts +20 -0
- package/dist/plot/core/components/ReferenceLine3D.svelte +156 -0
- package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +14 -0
- package/dist/plot/core/components/ReferencePlane.svelte +175 -0
- package/dist/plot/core/components/ReferencePlane.svelte.d.ts +14 -0
- package/dist/plot/core/components/ZeroLines.svelte +97 -0
- package/dist/plot/core/components/ZeroLines.svelte.d.ts +33 -0
- package/dist/plot/core/components/ZoomRect.svelte +23 -0
- package/dist/plot/core/components/ZoomRect.svelte.d.ts +8 -0
- package/dist/plot/core/components/index.d.ts +17 -0
- package/dist/plot/core/components/index.js +17 -0
- package/dist/plot/core/data-cleaning.d.ts +107 -0
- package/dist/plot/core/data-cleaning.js +853 -0
- package/dist/plot/core/data-transform.d.ts +16 -0
- package/dist/plot/core/data-transform.js +45 -0
- package/dist/plot/core/fill-utils.d.ts +33 -0
- package/dist/plot/core/fill-utils.js +388 -0
- package/dist/plot/core/hover-lock.svelte.d.ts +14 -0
- package/dist/plot/core/hover-lock.svelte.js +45 -0
- package/dist/plot/core/index.d.ts +10 -0
- package/dist/plot/core/index.js +11 -0
- package/dist/plot/core/interactions.d.ts +35 -0
- package/dist/plot/core/interactions.js +195 -0
- package/dist/plot/core/layout.d.ts +79 -0
- package/dist/plot/core/layout.js +281 -0
- package/dist/plot/core/reference-line.d.ts +60 -0
- package/dist/plot/core/reference-line.js +301 -0
- package/dist/plot/core/scales.d.ts +48 -0
- package/dist/plot/core/scales.js +480 -0
- package/dist/plot/core/svg.d.ts +2 -0
- package/dist/plot/core/svg.js +41 -0
- package/dist/plot/core/types.d.ts +771 -0
- package/dist/plot/core/types.js +99 -0
- package/dist/plot/core/utils/label-placement.d.ts +68 -0
- package/dist/plot/core/utils/label-placement.js +326 -0
- package/dist/plot/core/utils/series-visibility.d.ts +26 -0
- package/dist/plot/core/utils/series-visibility.js +112 -0
- package/dist/plot/core/utils.d.ts +11 -0
- package/dist/plot/core/utils.js +27 -0
- package/dist/plot/histogram/Histogram.svelte +1418 -0
- package/dist/plot/histogram/Histogram.svelte.d.ts +50 -0
- package/dist/plot/histogram/HistogramControls.svelte +212 -0
- package/dist/plot/histogram/HistogramControls.svelte.d.ts +22 -0
- package/dist/plot/histogram/index.d.ts +2 -0
- package/dist/plot/histogram/index.js +2 -0
- package/dist/plot/index.d.ts +8 -0
- package/dist/plot/index.js +10 -0
- package/dist/plot/sankey/Sankey.svelte +700 -0
- package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
- package/dist/plot/sankey/SankeyControls.svelte +98 -0
- package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
- package/dist/plot/sankey/index.d.ts +4 -0
- package/dist/plot/sankey/index.js +3 -0
- package/dist/plot/sankey/sankey-types.d.ts +42 -0
- package/dist/plot/sankey/sankey-types.js +4 -0
- package/dist/plot/sankey/sankey.d.ts +52 -0
- package/dist/plot/sankey/sankey.js +187 -0
- package/dist/plot/scatter/BinnedScatterPlot.svelte +1116 -0
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +66 -0
- package/dist/plot/scatter/ElementScatter.svelte +63 -0
- package/dist/plot/scatter/ElementScatter.svelte.d.ts +14 -0
- package/dist/plot/scatter/ScatterPlot.svelte +2357 -0
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +96 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +307 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +17 -0
- package/dist/plot/scatter/ScatterPoint.svelte +182 -0
- package/dist/plot/scatter/ScatterPoint.svelte.d.ts +22 -0
- package/dist/plot/scatter/adaptive-density.d.ts +79 -0
- package/dist/plot/scatter/adaptive-density.js +217 -0
- package/dist/plot/scatter/binned-scatter-types.d.ts +59 -0
- package/dist/plot/scatter/binned-scatter-types.js +1 -0
- package/dist/plot/scatter/index.d.ts +7 -0
- package/dist/plot/scatter/index.js +5 -0
- package/dist/plot/scatter/scatter-data.d.ts +19 -0
- package/dist/plot/scatter/scatter-data.js +212 -0
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +531 -0
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +95 -0
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +438 -0
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +20 -0
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +912 -0
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +74 -0
- package/dist/plot/scatter-3d/Surface3D.svelte +197 -0
- package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +13 -0
- package/dist/plot/scatter-3d/index.d.ts +4 -0
- package/dist/plot/scatter-3d/index.js +4 -0
- package/dist/plot/sunburst/Sunburst.svelte +1045 -0
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +96 -0
- package/dist/plot/sunburst/SunburstControls.svelte +200 -0
- package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
- package/dist/plot/sunburst/index.d.ts +4 -0
- package/dist/plot/sunburst/index.js +4 -0
- package/dist/plot/sunburst/render.d.ts +34 -0
- package/dist/plot/sunburst/render.js +122 -0
- package/dist/plot/sunburst/sunburst.d.ts +62 -0
- package/dist/plot/sunburst/sunburst.js +266 -0
- package/dist/rdf/RdfPlot.svelte +248 -0
- package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
- package/dist/rdf/calc-rdf.d.ts +4 -0
- package/dist/rdf/calc-rdf.js +98 -0
- package/dist/rdf/index.d.ts +23 -0
- package/dist/rdf/index.js +2 -0
- package/dist/sanitize.d.ts +6 -0
- package/dist/sanitize.js +116 -0
- package/dist/settings.d.ts +319 -0
- package/dist/settings.js +1394 -0
- package/dist/spectral/Bands.svelte +1050 -0
- package/dist/spectral/Bands.svelte.d.ts +39 -0
- package/dist/spectral/BandsAndDos.svelte +134 -0
- package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
- package/dist/spectral/BrillouinBandsDos.svelte +264 -0
- package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
- package/dist/spectral/Dos.svelte +688 -0
- package/dist/spectral/Dos.svelte.d.ts +29 -0
- package/dist/spectral/helpers.d.ts +121 -0
- package/dist/spectral/helpers.js +1098 -0
- package/dist/spectral/index.d.ts +6 -0
- package/dist/spectral/index.js +6 -0
- package/dist/spectral/types.d.ts +84 -0
- package/dist/spectral/types.js +2 -0
- package/dist/state.svelte.d.ts +25 -0
- package/dist/state.svelte.js +45 -0
- package/dist/structure/Arrow.svelte +72 -0
- package/dist/structure/Arrow.svelte.d.ts +15 -0
- package/dist/structure/AtomLegend.svelte +814 -0
- package/dist/structure/AtomLegend.svelte.d.ts +35 -0
- package/dist/structure/Bond.svelte +140 -0
- package/dist/structure/Bond.svelte.d.ts +9 -0
- package/dist/structure/CanvasTooltip.svelte +33 -0
- package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
- package/dist/structure/CellSelect.svelte +348 -0
- package/dist/structure/CellSelect.svelte.d.ts +13 -0
- package/dist/structure/Cylinder.svelte +49 -0
- package/dist/structure/Cylinder.svelte.d.ts +13 -0
- package/dist/structure/Lattice.svelte +196 -0
- package/dist/structure/Lattice.svelte.d.ts +17 -0
- package/dist/structure/Structure.svelte +2254 -0
- package/dist/structure/Structure.svelte.d.ts +89 -0
- package/dist/structure/StructureControls.svelte +1273 -0
- package/dist/structure/StructureControls.svelte.d.ts +31 -0
- package/dist/structure/StructureExportPane.svelte +252 -0
- package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
- package/dist/structure/StructureInfoPane.svelte +736 -0
- package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
- package/dist/structure/StructureScene.svelte +2256 -0
- package/dist/structure/StructureScene.svelte.d.ts +111 -0
- package/dist/structure/atom-properties.d.ts +37 -0
- package/dist/structure/atom-properties.js +200 -0
- package/dist/structure/bond-order-perception.d.ts +13 -0
- package/dist/structure/bond-order-perception.js +384 -0
- package/dist/structure/bonding.d.ts +69 -0
- package/dist/structure/bonding.js +724 -0
- package/dist/structure/export.d.ts +20 -0
- package/dist/structure/export.js +731 -0
- package/dist/structure/index.d.ts +124 -0
- package/dist/structure/index.js +167 -0
- package/dist/structure/label-placement.d.ts +14 -0
- package/dist/structure/label-placement.js +72 -0
- package/dist/structure/measure.d.ts +7 -0
- package/dist/structure/measure.js +30 -0
- package/dist/structure/parse.d.ts +66 -0
- package/dist/structure/parse.js +1410 -0
- package/dist/structure/partial-occupancy.d.ts +25 -0
- package/dist/structure/partial-occupancy.js +99 -0
- package/dist/structure/pbc.d.ts +9 -0
- package/dist/structure/pbc.js +127 -0
- package/dist/structure/supercell.d.ts +8 -0
- package/dist/structure/supercell.js +170 -0
- package/dist/structure/validation.d.ts +2 -0
- package/dist/structure/validation.js +10 -0
- package/dist/symmetry/SymmetryStats.svelte +226 -0
- package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
- package/dist/symmetry/WyckoffTable.svelte +120 -0
- package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
- package/dist/symmetry/cell-transform.d.ts +12 -0
- package/dist/symmetry/cell-transform.js +91 -0
- package/dist/symmetry/index.d.ts +43 -0
- package/dist/symmetry/index.js +226 -0
- package/dist/symmetry/spacegroups.d.ts +16 -0
- package/dist/symmetry/spacegroups.js +429 -0
- package/dist/table/HeatmapTable.svelte +1885 -0
- package/dist/table/HeatmapTable.svelte.d.ts +49 -0
- package/dist/table/ToggleMenu.svelte +385 -0
- package/dist/table/ToggleMenu.svelte.d.ts +11 -0
- package/dist/table/index.d.ts +72 -0
- package/dist/table/index.js +38 -0
- package/dist/theme/ThemeControl.svelte +53 -0
- package/dist/theme/ThemeControl.svelte.d.ts +9 -0
- package/dist/theme/index.d.ts +29 -0
- package/dist/theme/index.js +79 -0
- package/dist/time.d.ts +4 -0
- package/dist/time.js +70 -0
- package/dist/tooltip/KCoords.svelte +45 -0
- package/dist/tooltip/KCoords.svelte.d.ts +8 -0
- package/dist/tooltip/TooltipContent.svelte +58 -0
- package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
- package/dist/tooltip/index.d.ts +3 -0
- package/dist/tooltip/index.js +2 -0
- package/dist/tooltip/types.d.ts +8 -0
- package/dist/tooltip/types.js +1 -0
- package/dist/trajectory/Trajectory.svelte +1571 -0
- package/dist/trajectory/Trajectory.svelte.d.ts +78 -0
- package/dist/trajectory/TrajectoryError.svelte +128 -0
- package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
- package/dist/trajectory/TrajectoryExportPane.svelte +358 -0
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
- package/dist/trajectory/TrajectoryInfoPane.svelte +314 -0
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
- package/dist/trajectory/constants.d.ts +6 -0
- package/dist/trajectory/constants.js +7 -0
- package/dist/trajectory/extract.d.ts +5 -0
- package/dist/trajectory/extract.js +162 -0
- package/dist/trajectory/format-detect.d.ts +10 -0
- package/dist/trajectory/format-detect.js +90 -0
- package/dist/trajectory/frame-reader.d.ts +17 -0
- package/dist/trajectory/frame-reader.js +299 -0
- package/dist/trajectory/helpers.d.ts +15 -0
- package/dist/trajectory/helpers.js +164 -0
- package/dist/trajectory/index.d.ts +63 -0
- package/dist/trajectory/index.js +126 -0
- package/dist/trajectory/parse/ase.d.ts +2 -0
- package/dist/trajectory/parse/ase.js +73 -0
- package/dist/trajectory/parse/hdf5.d.ts +2 -0
- package/dist/trajectory/parse/hdf5.js +127 -0
- package/dist/trajectory/parse/index.d.ts +12 -0
- package/dist/trajectory/parse/index.js +306 -0
- package/dist/trajectory/parse/lammps.d.ts +5 -0
- package/dist/trajectory/parse/lammps.js +179 -0
- package/dist/trajectory/parse/vasp.d.ts +2 -0
- package/dist/trajectory/parse/vasp.js +87 -0
- package/dist/trajectory/parse/xyz.d.ts +26 -0
- package/dist/trajectory/parse/xyz.js +123 -0
- package/dist/trajectory/plotting.d.ts +28 -0
- package/dist/trajectory/plotting.js +423 -0
- package/dist/trajectory/types.d.ts +11 -0
- package/dist/trajectory/types.js +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.js +47 -0
- package/dist/xrd/XrdPlot.svelte +616 -0
- package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
- package/dist/xrd/broadening.d.ts +20 -0
- package/dist/xrd/broadening.js +97 -0
- package/dist/xrd/calc-xrd.d.ts +37 -0
- package/dist/xrd/calc-xrd.js +339 -0
- package/dist/xrd/index.d.ts +37 -0
- package/dist/xrd/index.js +4 -0
- package/dist/xrd/parse.d.ts +13 -0
- package/dist/xrd/parse.js +749 -0
- package/license +1 -1
- package/package.json +237 -1458
- package/readme.md +98 -171
- package/.vscode/launch.json +0 -13
- package/.vscodeignore +0 -7
- package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
- package/dist/assets/browser-DdDecX_W.js +0 -1
- package/dist/assets/export-qgn-H9y6.js +0 -2
- package/dist/assets/main-DiKYzti2.css +0 -1
- package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
- package/dist/extension.js +0 -31293
- package/dist/src/lib/FilePicker.svelte +0 -360
- package/dist/src/lib/Icon.svelte +0 -41
- package/dist/src/lib/MillerIndexInput.svelte +0 -66
- package/dist/src/lib/api/mp.ts +0 -26
- package/dist/src/lib/api/optimade.ts +0 -204
- package/dist/src/lib/app.css +0 -247
- package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
- package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
- package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
- package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
- package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
- package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
- package/dist/src/lib/brillouin/compute.ts +0 -529
- package/dist/src/lib/brillouin/index.ts +0 -8
- package/dist/src/lib/brillouin/types.ts +0 -51
- package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
- package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
- package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
- package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
- package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
- package/dist/src/lib/chempot-diagram/color.ts +0 -42
- package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
- package/dist/src/lib/chempot-diagram/index.ts +0 -6
- package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
- package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
- package/dist/src/lib/chempot-diagram/types.ts +0 -130
- package/dist/src/lib/colors/index.ts +0 -249
- package/dist/src/lib/composition/BarChart.svelte +0 -297
- package/dist/src/lib/composition/BubbleChart.svelte +0 -218
- package/dist/src/lib/composition/Composition.svelte +0 -165
- package/dist/src/lib/composition/Formula.svelte +0 -268
- package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
- package/dist/src/lib/composition/PieChart.svelte +0 -323
- package/dist/src/lib/composition/format.ts +0 -155
- package/dist/src/lib/composition/index.ts +0 -37
- package/dist/src/lib/composition/parse.ts +0 -605
- package/dist/src/lib/constants.ts +0 -134
- package/dist/src/lib/controls.ts +0 -42
- package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
- package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
- package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
- package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
- package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
- package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
- package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
- package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
- package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
- package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
- package/dist/src/lib/convex-hull/TemperatureSlider.svelte +0 -140
- package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
- package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
- package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
- package/dist/src/lib/convex-hull/helpers.ts +0 -932
- package/dist/src/lib/convex-hull/index.ts +0 -202
- package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
- package/dist/src/lib/convex-hull/types.ts +0 -267
- package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
- package/dist/src/lib/coordination/calc-coordination.ts +0 -93
- package/dist/src/lib/coordination/index.ts +0 -9
- package/dist/src/lib/effects.svelte.ts +0 -48
- package/dist/src/lib/element/ElementHeading.svelte +0 -26
- package/dist/src/lib/element/ElementPhoto.svelte +0 -57
- package/dist/src/lib/element/ElementStats.svelte +0 -80
- package/dist/src/lib/element/ElementTile.svelte +0 -484
- package/dist/src/lib/element/data.ts +0 -14
- package/dist/src/lib/element/index.ts +0 -8
- package/dist/src/lib/element/types.ts +0 -62
- package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
- package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
- package/dist/src/lib/feedback/index.ts +0 -4
- package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
- package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
- package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
- package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
- package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
- package/dist/src/lib/fermi-surface/compute.ts +0 -728
- package/dist/src/lib/fermi-surface/constants.ts +0 -32
- package/dist/src/lib/fermi-surface/export.ts +0 -64
- package/dist/src/lib/fermi-surface/index.ts +0 -14
- package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
- package/dist/src/lib/fermi-surface/parse.ts +0 -574
- package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
- package/dist/src/lib/fermi-surface/types.ts +0 -159
- package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
- package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
- package/dist/src/lib/heatmap-matrix/index.ts +0 -167
- package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
- package/dist/src/lib/icons.ts +0 -650
- package/dist/src/lib/index.ts +0 -61
- package/dist/src/lib/io/decompress.ts +0 -92
- package/dist/src/lib/io/export.ts +0 -385
- package/dist/src/lib/io/fetch.ts +0 -46
- package/dist/src/lib/io/file-drop.ts +0 -51
- package/dist/src/lib/io/index.ts +0 -7
- package/dist/src/lib/io/is-binary.ts +0 -24
- package/dist/src/lib/io/types.ts +0 -8
- package/dist/src/lib/io/url-drop.ts +0 -141
- package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
- package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
- package/dist/src/lib/isosurface/index.ts +0 -7
- package/dist/src/lib/isosurface/parse.ts +0 -656
- package/dist/src/lib/isosurface/slice.ts +0 -175
- package/dist/src/lib/isosurface/types.ts +0 -309
- package/dist/src/lib/labels.ts +0 -320
- package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
- package/dist/src/lib/layout/InfoCard.svelte +0 -120
- package/dist/src/lib/layout/InfoTag.svelte +0 -185
- package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
- package/dist/src/lib/layout/SettingsSection.svelte +0 -148
- package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
- package/dist/src/lib/layout/fullscreen.ts +0 -65
- package/dist/src/lib/layout/index.ts +0 -11
- package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
- package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
- package/dist/src/lib/layout/json-tree/index.ts +0 -3
- package/dist/src/lib/layout/json-tree/types.ts +0 -126
- package/dist/src/lib/layout/json-tree/utils.ts +0 -682
- package/dist/src/lib/marching-cubes.ts +0 -614
- package/dist/src/lib/math.ts +0 -1081
- package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
- package/dist/src/lib/overlays/CopyButton.svelte +0 -45
- package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
- package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
- package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
- package/dist/src/lib/overlays/index.ts +0 -3
- package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
- package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
- package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
- package/dist/src/lib/periodic-table/index.ts +0 -12
- package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
- package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
- package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
- package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
- package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
- package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
- package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
- package/dist/src/lib/phase-diagram/colors.ts +0 -58
- package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
- package/dist/src/lib/phase-diagram/index.ts +0 -13
- package/dist/src/lib/phase-diagram/parse.ts +0 -348
- package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
- package/dist/src/lib/phase-diagram/types.ts +0 -144
- package/dist/src/lib/phase-diagram/utils.ts +0 -775
- package/dist/src/lib/plot/AxisLabel.svelte +0 -51
- package/dist/src/lib/plot/BarPlot.svelte +0 -2113
- package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
- package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
- package/dist/src/lib/plot/ColorBar.svelte +0 -721
- package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
- package/dist/src/lib/plot/ElementScatter.svelte +0 -63
- package/dist/src/lib/plot/FillArea.svelte +0 -223
- package/dist/src/lib/plot/Histogram.svelte +0 -1558
- package/dist/src/lib/plot/HistogramControls.svelte +0 -212
- package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
- package/dist/src/lib/plot/Line.svelte +0 -84
- package/dist/src/lib/plot/PlotAxis.svelte +0 -169
- package/dist/src/lib/plot/PlotControls.svelte +0 -537
- package/dist/src/lib/plot/PlotLegend.svelte +0 -569
- package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
- package/dist/src/lib/plot/PortalSelect.svelte +0 -253
- package/dist/src/lib/plot/ReferenceLine.svelte +0 -204
- package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
- package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
- package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
- package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
- package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
- package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
- package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
- package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
- package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
- package/dist/src/lib/plot/Surface3D.svelte +0 -197
- package/dist/src/lib/plot/ZeroLines.svelte +0 -97
- package/dist/src/lib/plot/ZoomRect.svelte +0 -23
- package/dist/src/lib/plot/adaptive-density.ts +0 -316
- package/dist/src/lib/plot/auto-place.ts +0 -184
- package/dist/src/lib/plot/axis-utils.ts +0 -122
- package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
- package/dist/src/lib/plot/data-cleaning.ts +0 -1069
- package/dist/src/lib/plot/data-transform.ts +0 -69
- package/dist/src/lib/plot/defaults.ts +0 -9
- package/dist/src/lib/plot/fill-utils.ts +0 -494
- package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
- package/dist/src/lib/plot/index.ts +0 -53
- package/dist/src/lib/plot/interactions.ts +0 -119
- package/dist/src/lib/plot/layout.ts +0 -425
- package/dist/src/lib/plot/reference-line.ts +0 -426
- package/dist/src/lib/plot/scales.ts +0 -654
- package/dist/src/lib/plot/svg.ts +0 -23
- package/dist/src/lib/plot/types.ts +0 -1144
- package/dist/src/lib/plot/utils/label-placement.ts +0 -541
- package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
- package/dist/src/lib/plot/utils.ts +0 -11
- package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
- package/dist/src/lib/rdf/calc-rdf.ts +0 -167
- package/dist/src/lib/rdf/index.ts +0 -27
- package/dist/src/lib/sanitize.ts +0 -126
- package/dist/src/lib/settings.ts +0 -1479
- package/dist/src/lib/spectral/Bands.svelte +0 -1040
- package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
- package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
- package/dist/src/lib/spectral/Dos.svelte +0 -697
- package/dist/src/lib/spectral/helpers.ts +0 -1381
- package/dist/src/lib/spectral/index.ts +0 -8
- package/dist/src/lib/spectral/types.ts +0 -112
- package/dist/src/lib/state.svelte.ts +0 -64
- package/dist/src/lib/structure/Arrow.svelte +0 -72
- package/dist/src/lib/structure/AtomLegend.svelte +0 -815
- package/dist/src/lib/structure/Bond.svelte +0 -140
- package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
- package/dist/src/lib/structure/CellSelect.svelte +0 -349
- package/dist/src/lib/structure/Cylinder.svelte +0 -45
- package/dist/src/lib/structure/Lattice.svelte +0 -196
- package/dist/src/lib/structure/Structure.svelte +0 -2248
- package/dist/src/lib/structure/StructureControls.svelte +0 -1273
- package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
- package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
- package/dist/src/lib/structure/StructureScene.svelte +0 -2255
- package/dist/src/lib/structure/atom-properties.ts +0 -316
- package/dist/src/lib/structure/bond-order-perception.ts +0 -447
- package/dist/src/lib/structure/bonding.ts +0 -944
- package/dist/src/lib/structure/export.ts +0 -861
- package/dist/src/lib/structure/index.ts +0 -291
- package/dist/src/lib/structure/label-placement.ts +0 -130
- package/dist/src/lib/structure/measure.ts +0 -45
- package/dist/src/lib/structure/parse.ts +0 -1705
- package/dist/src/lib/structure/partial-occupancy.ts +0 -183
- package/dist/src/lib/structure/pbc.ts +0 -164
- package/dist/src/lib/structure/supercell.ts +0 -226
- package/dist/src/lib/structure/validation.ts +0 -11
- package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
- package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
- package/dist/src/lib/symmetry/cell-transform.ts +0 -118
- package/dist/src/lib/symmetry/index.ts +0 -348
- package/dist/src/lib/symmetry/spacegroups.ts +0 -404
- package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
- package/dist/src/lib/table/ToggleMenu.svelte +0 -385
- package/dist/src/lib/table/index.ts +0 -139
- package/dist/src/lib/theme/ThemeControl.svelte +0 -53
- package/dist/src/lib/theme/index.ts +0 -107
- package/dist/src/lib/time.ts +0 -71
- package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
- package/dist/src/lib/tooltip/index.ts +0 -2
- package/dist/src/lib/tooltip/types.ts +0 -13
- package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
- package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
- package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
- package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
- package/dist/src/lib/trajectory/constants.ts +0 -7
- package/dist/src/lib/trajectory/extract.ts +0 -196
- package/dist/src/lib/trajectory/format-detect.ts +0 -96
- package/dist/src/lib/trajectory/frame-reader.ts +0 -456
- package/dist/src/lib/trajectory/helpers.ts +0 -217
- package/dist/src/lib/trajectory/index.ts +0 -218
- package/dist/src/lib/trajectory/parse/ase.ts +0 -109
- package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
- package/dist/src/lib/trajectory/parse/index.ts +0 -411
- package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
- package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
- package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
- package/dist/src/lib/trajectory/plotting.ts +0 -599
- package/dist/src/lib/trajectory/types.ts +0 -13
- package/dist/src/lib/utils.ts +0 -56
- package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
- package/dist/src/lib/xrd/broadening.ts +0 -130
- package/dist/src/lib/xrd/calc-xrd.ts +0 -397
- package/dist/src/lib/xrd/index.ts +0 -38
- package/dist/src/lib/xrd/parse.ts +0 -858
- package/dist/webview.js +0 -29421
- package/icon.png +0 -0
- package/matterviz-0.3.2.vsix +0 -0
- package/matterviz-0.3.4.vsix +0 -0
- package/matterviz-0.3.5.vsix +0 -0
- package/scripts/sync-config.ts +0 -101
- package/src/declarations.d.ts +0 -2
- package/src/extension.ts +0 -972
- package/src/node-io.ts +0 -65
- package/src/types.ts +0 -17
- package/src/webview/JsonBrowser.svelte +0 -1079
- package/src/webview/PlotPanel.svelte +0 -346
- package/src/webview/detect.ts +0 -444
- package/src/webview/main.ts +0 -764
- package/src/webview/plot-utils.ts +0 -250
- package/test-fixtures/all-viz-types.json.gz +0 -0
- package/test-fixtures/plot-demo-data.json.gz +0 -0
- package/tests/detect.test.ts +0 -604
- package/tests/extension.test.ts +0 -2041
- package/tests/node-io.test.ts +0 -39
- package/tests/plot-utils.test.ts +0 -302
- package/tests/vite-plugin-json-gz.test.ts +0 -114
- package/tests/vscode-mock.ts +0 -18
- package/tests/webview.test.ts +0 -231
- package/tsconfig.json +0 -20
- package/vite-plugin-json-gz.ts +0 -29
- package/vite.config.ts +0 -34
- package/vite.extension.config.ts +0 -34
- /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
- /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
- /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
- /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
- /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
- /package/dist/{src/lib/element → element}/data.json +0 -0
- /package/dist/{src/lib/element → element}/data.json.gz +0 -0
- /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
- /package/dist/{src/lib/element → element}/data.schema.json +0 -0
- /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
- /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
- /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
- /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
- /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
- /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
- /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { LOG_EPS } from '../../math';
|
|
2
|
+
import { get_arcsinh_threshold, get_scale_type_name } from './types';
|
|
3
|
+
// Get coordinates of a mouse event relative to an element (the event's
|
|
4
|
+
// currentTarget by default; pass `element` when the handler is delegated and the
|
|
5
|
+
// reference frame differs, e.g. coordinates relative to the svg root)
|
|
6
|
+
export function get_relative_coords(evt, element = evt.currentTarget) {
|
|
7
|
+
if (!(element instanceof Element))
|
|
8
|
+
return null;
|
|
9
|
+
const box = element.getBoundingClientRect();
|
|
10
|
+
if (!box)
|
|
11
|
+
return null;
|
|
12
|
+
return { x: evt.clientX - box.left, y: evt.clientY - box.top };
|
|
13
|
+
}
|
|
14
|
+
// Resolve a delegated event to the integer value of the nearest ancestor's data
|
|
15
|
+
// attribute (e.g. data-sunburst-node-idx), scoped to `root` so targets outside the
|
|
16
|
+
// component don't leak in. Returns null when the event didn't hit an indexed element.
|
|
17
|
+
export function closest_data_idx(event, attr, root) {
|
|
18
|
+
const target = event.target instanceof Element ? event.target.closest(`[${attr}]`) : null;
|
|
19
|
+
if (!target || (root && !root.contains(target)))
|
|
20
|
+
return null;
|
|
21
|
+
const idx = Number(target.getAttribute(attr));
|
|
22
|
+
return Number.isInteger(idx) ? idx : null;
|
|
23
|
+
}
|
|
24
|
+
// Normalize Y2 sync config (handle shorthand string vs full object)
|
|
25
|
+
export function normalize_y2_sync(sync) {
|
|
26
|
+
if (!sync || sync === `none`)
|
|
27
|
+
return { mode: `none` };
|
|
28
|
+
if (typeof sync === `string`)
|
|
29
|
+
return { mode: sync };
|
|
30
|
+
return sync;
|
|
31
|
+
}
|
|
32
|
+
// Helper to check if all values in ranges are finite
|
|
33
|
+
const all_finite = (...ranges) => ranges.every(([a, b]) => Number.isFinite(a) && Number.isFinite(b));
|
|
34
|
+
// Calculate synced y2 range based on sync mode
|
|
35
|
+
export function sync_y2_range(y1_range, y2_base_range, sync) {
|
|
36
|
+
if (sync.mode === `none`)
|
|
37
|
+
return y2_base_range;
|
|
38
|
+
if (!all_finite(y1_range, y2_base_range))
|
|
39
|
+
return y2_base_range;
|
|
40
|
+
// Synced: Y2 has exact same range as Y1
|
|
41
|
+
if (sync.mode === `synced`) {
|
|
42
|
+
return [y1_range[0], y1_range[1]];
|
|
43
|
+
}
|
|
44
|
+
// Align: Position so align_val (default 0) is at same relative position on both axes
|
|
45
|
+
// Y2 range expands as needed to show all data while maintaining alignment
|
|
46
|
+
if (sync.mode === `align`) {
|
|
47
|
+
const align_val = sync.align_value ?? 0;
|
|
48
|
+
const y1_span = y1_range[1] - y1_range[0];
|
|
49
|
+
if (y1_span === 0)
|
|
50
|
+
return y2_base_range;
|
|
51
|
+
// Where is align_val in Y1's range? (0 = bottom, 1 = top)
|
|
52
|
+
const rel_pos = (align_val - y1_range[0]) / y1_span;
|
|
53
|
+
// Ensure Y2 range includes both align_val and all data
|
|
54
|
+
const y2_min_data = Math.min(y2_base_range[0], align_val);
|
|
55
|
+
const y2_max_data = Math.max(y2_base_range[1], align_val);
|
|
56
|
+
// Calculate minimum span needed to fit all data while keeping align_val at rel_pos
|
|
57
|
+
// Constraints: y2_min <= y2_min_data AND y2_max >= y2_max_data
|
|
58
|
+
let y2_span = y2_max_data - y2_min_data;
|
|
59
|
+
if (rel_pos > 0) {
|
|
60
|
+
y2_span = Math.max(y2_span, (align_val - y2_min_data) / rel_pos);
|
|
61
|
+
}
|
|
62
|
+
if (rel_pos < 1) {
|
|
63
|
+
y2_span = Math.max(y2_span, (y2_max_data - align_val) / (1 - rel_pos));
|
|
64
|
+
}
|
|
65
|
+
const y2_min_computed = align_val - rel_pos * y2_span;
|
|
66
|
+
const y2_max_computed = align_val + (1 - rel_pos) * y2_span;
|
|
67
|
+
// When align_val is outside y1_range (rel_pos < 0 or > 1), the formula can produce
|
|
68
|
+
// a range that omits y2_base_range or align_val. Ensure both are always included.
|
|
69
|
+
const y2_min = Math.min(y2_min_computed, y2_base_range[0], align_val);
|
|
70
|
+
const y2_max = Math.max(y2_max_computed, y2_base_range[1], align_val);
|
|
71
|
+
return [y2_min, y2_max];
|
|
72
|
+
}
|
|
73
|
+
return y2_base_range;
|
|
74
|
+
}
|
|
75
|
+
// Forward/inverse transform pair mapping an axis's data values onto its visual
|
|
76
|
+
// metric (the space where equal pixel steps are equal steps; identity for
|
|
77
|
+
// linear/time). Pan and pinch must be uniform in *screen* space - doing the math
|
|
78
|
+
// linearly on a log axis stretches one end of the view and shifts past zero into
|
|
79
|
+
// an all-NaN domain. log clamps at LOG_EPS so a non-positive bound (stale explicit
|
|
80
|
+
// range) recovers instead of propagating -Infinity.
|
|
81
|
+
function axis_transform(scale_type) {
|
|
82
|
+
const name = get_scale_type_name(scale_type);
|
|
83
|
+
if (name === `log`) {
|
|
84
|
+
return { to: (val) => Math.log(Math.max(val, LOG_EPS)), from: Math.exp };
|
|
85
|
+
}
|
|
86
|
+
if (name === `arcsinh`) {
|
|
87
|
+
const threshold = get_arcsinh_threshold(scale_type);
|
|
88
|
+
const to = (val) => Math.asinh(val / threshold);
|
|
89
|
+
const from = (val) => Math.sinh(val) * threshold;
|
|
90
|
+
return { to, from };
|
|
91
|
+
}
|
|
92
|
+
return { to: (val) => val, from: (val) => val };
|
|
93
|
+
}
|
|
94
|
+
// Pan a range by a pixel delta, uniformly in screen space: linear axes shift by a
|
|
95
|
+
// constant amount, log axes by a constant factor (which also can't cross zero).
|
|
96
|
+
// `pixel_span` is the plot's pixel extent along the axis.
|
|
97
|
+
export function pan_range_by_pixels(range, pixel_delta, pixel_span, scale_type) {
|
|
98
|
+
if (pixel_span === 0)
|
|
99
|
+
return range;
|
|
100
|
+
const { to, from } = axis_transform(scale_type);
|
|
101
|
+
const [t0, t1] = [to(range[0]), to(range[1])];
|
|
102
|
+
const t_delta = (pixel_delta / pixel_span) * (t1 - t0);
|
|
103
|
+
return [from(t0 + t_delta), from(t1 + t_delta)];
|
|
104
|
+
}
|
|
105
|
+
// Zoom a range about its screen-space center by `factor` (pinch: >1 zooms in).
|
|
106
|
+
// On log axes the fixed point is the geometric mean - the visual center.
|
|
107
|
+
export function zoom_range_by_factor(range, factor, scale_type) {
|
|
108
|
+
// Guard invalid factors (0/negative/NaN) that would emit Infinity/NaN into axis state
|
|
109
|
+
if (!Number.isFinite(factor) || factor <= 0)
|
|
110
|
+
return range;
|
|
111
|
+
const { to, from } = axis_transform(scale_type);
|
|
112
|
+
const [t0, t1] = [to(range[0]), to(range[1])];
|
|
113
|
+
const center = (t0 + t1) / 2;
|
|
114
|
+
const half_span = (t1 - t0) / factor / 2;
|
|
115
|
+
return [from(center - half_span), from(center + half_span)];
|
|
116
|
+
}
|
|
117
|
+
// Coerce a scale.invert result (number, or Date for time scales) to an epoch number
|
|
118
|
+
export const to_epoch_num = (val) => val instanceof Date ? val.getTime() : val;
|
|
119
|
+
// Remove window drag/pan listeners and reset the body cursor. Call from onDestroy:
|
|
120
|
+
// a component unmounting mid-drag would otherwise leak its listeners and leave the
|
|
121
|
+
// cursor stuck (the mouseup that normally cleans up never fires after unmount).
|
|
122
|
+
export function remove_drag_listeners(move_handlers, up_handlers) {
|
|
123
|
+
if (typeof window === `undefined`)
|
|
124
|
+
return;
|
|
125
|
+
for (const handler of move_handlers) {
|
|
126
|
+
window.removeEventListener(`mousemove`, handler);
|
|
127
|
+
}
|
|
128
|
+
for (const handler of up_handlers) {
|
|
129
|
+
window.removeEventListener(`mouseup`, handler);
|
|
130
|
+
}
|
|
131
|
+
document.body.style.cursor = ``;
|
|
132
|
+
}
|
|
133
|
+
// Sorted [min, max] from two scalar bounds (rect-zoom inverts drag start/end,
|
|
134
|
+
// which arrive in either order depending on drag direction)
|
|
135
|
+
export const sorted_range = (a, b) => [Math.min(a, b), Math.max(a, b)];
|
|
136
|
+
// Strict per-bound equality of two [min, max] ranges
|
|
137
|
+
export const vec2_equal = (a, b) => a[0] === b[0] && a[1] === b[1];
|
|
138
|
+
// True when all four axis ranges match. The range-sync effects use this to skip
|
|
139
|
+
// no-op writes that would otherwise re-trigger the effect and loop.
|
|
140
|
+
export const axis_ranges_equal = (a, b) => vec2_equal(a.x, b.x) &&
|
|
141
|
+
vec2_equal(a.x2, b.x2) &&
|
|
142
|
+
vec2_equal(a.y, b.y) &&
|
|
143
|
+
vec2_equal(a.y2, b.y2);
|
|
144
|
+
// Merge each axis's explicit range over its auto range (per-bound: a null bound
|
|
145
|
+
// falls back to the auto value). Returns null if any resolved bound is non-finite so
|
|
146
|
+
// the caller can skip the sync - writing NaN breaks scales and, since NaN !== NaN,
|
|
147
|
+
// makes the change comparison never settle (an infinite effect loop).
|
|
148
|
+
export function resolve_axis_ranges(axes, auto) {
|
|
149
|
+
const resolve = (axis, fallback) => [
|
|
150
|
+
axis.range?.[0] ?? fallback[0],
|
|
151
|
+
axis.range?.[1] ?? fallback[1],
|
|
152
|
+
];
|
|
153
|
+
const next = {
|
|
154
|
+
x: resolve(axes.x, auto.x),
|
|
155
|
+
x2: resolve(axes.x2, auto.x2),
|
|
156
|
+
y: resolve(axes.y, auto.y),
|
|
157
|
+
y2: resolve(axes.y2, auto.y2),
|
|
158
|
+
};
|
|
159
|
+
for (const [lo, hi] of [next.x, next.x2, next.y, next.y2]) {
|
|
160
|
+
if (!Number.isFinite(lo) || !Number.isFinite(hi))
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return next;
|
|
164
|
+
}
|
|
165
|
+
// Threshold for distinguishing pinch-zoom from pan in touch gestures
|
|
166
|
+
// Scale change > this value triggers zoom instead of pan
|
|
167
|
+
export const PINCH_ZOOM_THRESHOLD = 0.1;
|
|
168
|
+
// Minimum start distance (px) between two touches to treat the gesture as a valid pinch.
|
|
169
|
+
// Guards curr_dist / start_dist scale from blowing up on near-coincident touches
|
|
170
|
+
export const MIN_TOUCH_DISTANCE_PIXELS = 10;
|
|
171
|
+
// Helper to check if range is the default [0, 1] sentinel (no data)
|
|
172
|
+
// Note: min === 0 handles -0 correctly since -0 === 0 in JavaScript
|
|
173
|
+
const is_default_range = ([min, max]) => min === 0 && max === 1;
|
|
174
|
+
// Adopt the new data range, unless all series were hidden (sentinel [0, 1] fallback).
|
|
175
|
+
// NOTE: [0, 1] is the "no data" sentinel - when all series are hidden, auto ranges
|
|
176
|
+
// fall back to [0, 1]. Actual data spanning exactly [0, 1] is a rare edge case.
|
|
177
|
+
export function expand_range_if_needed(current, new_range) {
|
|
178
|
+
// Guard against NaN/Infinity - prefer valid range, fall back to sentinel [0, 1] if both invalid
|
|
179
|
+
const current_valid = all_finite(current);
|
|
180
|
+
const new_valid = all_finite(new_range);
|
|
181
|
+
if (!current_valid && !new_valid)
|
|
182
|
+
return { range: [0, 1], changed: true };
|
|
183
|
+
if (!new_valid)
|
|
184
|
+
return { range: current, changed: false };
|
|
185
|
+
if (!current_valid)
|
|
186
|
+
return { range: new_range, changed: true };
|
|
187
|
+
// When all series are hidden, auto ranges fall back to [0, 1] sentinel.
|
|
188
|
+
// Don't shrink to that — preserve the current view so it doesn't jump.
|
|
189
|
+
if (!is_default_range(current) && is_default_range(new_range)) {
|
|
190
|
+
return { range: current, changed: false };
|
|
191
|
+
}
|
|
192
|
+
// Otherwise adopt the new range directly (both expand and shrink)
|
|
193
|
+
const changed = new_range[0] !== current[0] || new_range[1] !== current[1];
|
|
194
|
+
return { range: new_range, changed };
|
|
195
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { AxisConfig } from './types';
|
|
2
|
+
export type Sides = {
|
|
3
|
+
t?: number;
|
|
4
|
+
b?: number;
|
|
5
|
+
l?: number;
|
|
6
|
+
r?: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const LABEL_GAP_DEFAULT = 30;
|
|
9
|
+
export declare function y2_axis_label_x(axis: AxisConfig, width: number, pad_r: number, max_tick_width: number): number;
|
|
10
|
+
export declare const filter_padding: (padding: Partial<Sides> | undefined | null, defaults: Required<Sides>) => Required<Sides>;
|
|
11
|
+
export declare function measure_text_width(text: string, font?: string): number;
|
|
12
|
+
export declare function measure_full_footprint(el: HTMLElement): {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
};
|
|
16
|
+
export interface AutoPaddingConfig {
|
|
17
|
+
padding: Partial<Sides>;
|
|
18
|
+
default_padding: Required<Sides>;
|
|
19
|
+
x2_axis?: AxisConfig & {
|
|
20
|
+
tick_values?: (string | number)[];
|
|
21
|
+
};
|
|
22
|
+
y_axis?: AxisConfig & {
|
|
23
|
+
tick_values?: (string | number)[];
|
|
24
|
+
};
|
|
25
|
+
y2_axis?: AxisConfig & {
|
|
26
|
+
tick_values?: (string | number)[];
|
|
27
|
+
};
|
|
28
|
+
label_gap?: number;
|
|
29
|
+
}
|
|
30
|
+
export declare const measure_max_tick_width: (ticks: (string | number)[], format?: string) => number;
|
|
31
|
+
export declare const TICK_LABEL_HEIGHT = 16;
|
|
32
|
+
export declare const AXIS_LABEL_HEIGHT = 20;
|
|
33
|
+
export declare const calc_auto_padding: ({ padding, default_padding, x2_axis, y_axis, y2_axis, label_gap, }: AutoPaddingConfig) => Required<Sides>;
|
|
34
|
+
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
|
+
offset?: number;
|
|
36
|
+
offset_x?: number;
|
|
37
|
+
offset_y?: number;
|
|
38
|
+
}): {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
};
|
|
42
|
+
export interface Rect {
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
}
|
|
48
|
+
export declare const pad_rect: (rect: Rect, padding: number) => Rect;
|
|
49
|
+
export declare const centered_rect: (center_x: number, top_y: number, width: number, height: number) => Rect;
|
|
50
|
+
export declare const rect_within_rect: (rect: Rect, bounds: Rect) => boolean;
|
|
51
|
+
export interface ElementPlacementConfig {
|
|
52
|
+
plot_bounds: Rect;
|
|
53
|
+
element_size: {
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
};
|
|
57
|
+
element?: HTMLElement | null;
|
|
58
|
+
axis_clearance?: number;
|
|
59
|
+
exclude_rects?: Rect[];
|
|
60
|
+
points: {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
}[];
|
|
64
|
+
grid_resolution?: number;
|
|
65
|
+
}
|
|
66
|
+
export interface ElementPlacementResult {
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
score: number;
|
|
70
|
+
}
|
|
71
|
+
export declare const rects_overlap: (r1: Rect, r2: Rect) => boolean;
|
|
72
|
+
export declare function sample_series_obstacle_points(pixel_points: {
|
|
73
|
+
x: number;
|
|
74
|
+
y: number;
|
|
75
|
+
}[], draws_line: boolean, step: number): {
|
|
76
|
+
x: number;
|
|
77
|
+
y: number;
|
|
78
|
+
}[];
|
|
79
|
+
export declare function compute_element_placement(config: ElementPlacementConfig): ElementPlacementResult;
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { format_value } from '../../labels';
|
|
2
|
+
import { euclidean_dist } from '../../math';
|
|
3
|
+
// Default gap between tick labels and axis labels
|
|
4
|
+
export const LABEL_GAP_DEFAULT = 30;
|
|
5
|
+
// X position for a right-side (y2) axis label: past the plot edge plus tick shift and
|
|
6
|
+
// measured tick-label width (both zero when tick labels render inside the plot)
|
|
7
|
+
export function y2_axis_label_x(axis, width, pad_r, max_tick_width) {
|
|
8
|
+
const inside = axis.tick?.label?.inside ?? false;
|
|
9
|
+
const tick_shift = inside ? 0 : (axis.tick?.label?.shift?.x ?? 0) + 8;
|
|
10
|
+
const label_offset = (inside ? 0 : max_tick_width) + LABEL_GAP_DEFAULT + (axis.label_shift?.x ?? 0);
|
|
11
|
+
return width - pad_r + tick_shift + label_offset;
|
|
12
|
+
}
|
|
13
|
+
// Filter undefined values from padding to prevent overriding defaults when spreading
|
|
14
|
+
// Guards against undefined/null padding inputs (common for optional props)
|
|
15
|
+
export const filter_padding = (padding, defaults) => ({
|
|
16
|
+
...defaults,
|
|
17
|
+
...Object.fromEntries(Object.entries(padding ?? {}).filter(([, v]) => v !== undefined)),
|
|
18
|
+
});
|
|
19
|
+
// Measure text width using canvas (singleton pattern for performance)
|
|
20
|
+
let measurement_canvas = null;
|
|
21
|
+
export function measure_text_width(text, font = `12px sans-serif`) {
|
|
22
|
+
if (typeof document === `undefined`)
|
|
23
|
+
return 0;
|
|
24
|
+
measurement_canvas ??= document.createElement(`canvas`);
|
|
25
|
+
const ctx = measurement_canvas.getContext(`2d`);
|
|
26
|
+
if (!ctx)
|
|
27
|
+
return 0;
|
|
28
|
+
ctx.font = font;
|
|
29
|
+
return ctx.measureText(text).width;
|
|
30
|
+
}
|
|
31
|
+
// Measure an element's full visual footprint, including descendants that overflow its
|
|
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) {
|
|
36
|
+
const root = el.getBoundingClientRect();
|
|
37
|
+
let right = root.right;
|
|
38
|
+
let bottom = root.bottom;
|
|
39
|
+
for (const child of el.querySelectorAll(`*`)) {
|
|
40
|
+
const rect = child.getBoundingClientRect();
|
|
41
|
+
if (rect.width === 0 && rect.height === 0)
|
|
42
|
+
continue;
|
|
43
|
+
right = Math.max(right, rect.right);
|
|
44
|
+
bottom = Math.max(bottom, rect.bottom);
|
|
45
|
+
}
|
|
46
|
+
return { width: right - root.left, height: bottom - root.top };
|
|
47
|
+
}
|
|
48
|
+
// Measure the widest formatted tick label. Used for auto-padding and label placement.
|
|
49
|
+
export const measure_max_tick_width = (ticks, format = ``) => ticks.length === 0
|
|
50
|
+
? 0
|
|
51
|
+
: Math.max(...ticks.map((tick) => {
|
|
52
|
+
const label = typeof tick === `string` ? tick : format_value(tick, format);
|
|
53
|
+
return measure_text_width(label, `12px sans-serif`);
|
|
54
|
+
}));
|
|
55
|
+
// Estimated height of a single tick label line (font-size 0.8em ≈ 12px + leading)
|
|
56
|
+
export const TICK_LABEL_HEIGHT = 16;
|
|
57
|
+
// Estimated height of an axis label (font-size ~14px + margin)
|
|
58
|
+
export const AXIS_LABEL_HEIGHT = 20;
|
|
59
|
+
export const calc_auto_padding = ({ padding, default_padding, x2_axis = {}, y_axis = {}, y2_axis = {}, label_gap = LABEL_GAP_DEFAULT, }) => {
|
|
60
|
+
const x2_ticks = x2_axis.tick_values ?? [];
|
|
61
|
+
const y_ticks = y_axis.tick_values ?? [];
|
|
62
|
+
const y_format = y_axis.format ?? ``;
|
|
63
|
+
const y2_ticks = y2_axis.tick_values ?? [];
|
|
64
|
+
const y2_format = y2_axis.format ?? ``;
|
|
65
|
+
return {
|
|
66
|
+
t: padding.t ??
|
|
67
|
+
(x2_ticks.length > 0
|
|
68
|
+
? Math.max(default_padding.t, TICK_LABEL_HEIGHT + label_gap + (x2_axis.label ? AXIS_LABEL_HEIGHT : 0))
|
|
69
|
+
: default_padding.t),
|
|
70
|
+
b: padding.b ?? default_padding.b,
|
|
71
|
+
l: padding.l ??
|
|
72
|
+
Math.max(default_padding.l, measure_max_tick_width(y_ticks, y_format) + label_gap),
|
|
73
|
+
r: padding.r ??
|
|
74
|
+
Math.max(default_padding.r, measure_max_tick_width(y2_ticks, y2_format) + label_gap),
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
// Constrain tooltip position within bounds, flipping to opposite side if overflow
|
|
78
|
+
// offset_x/offset_y control initial positioning: positive = right/down, negative = left/up
|
|
79
|
+
export function constrain_tooltip_position(cursor_x, cursor_y, tooltip_width, tooltip_height, viewport_width, viewport_height, options = {}) {
|
|
80
|
+
const { offset = 10 } = options;
|
|
81
|
+
const offset_x = options.offset_x ?? offset;
|
|
82
|
+
const offset_y = options.offset_y ?? offset;
|
|
83
|
+
// Position to left of cursor if right-side placement overflows (and vice versa)
|
|
84
|
+
const flip_x = offset_x >= 0
|
|
85
|
+
? cursor_x + offset_x + tooltip_width > viewport_width
|
|
86
|
+
: cursor_x + offset_x - tooltip_width < 0;
|
|
87
|
+
// Position above cursor if bottom placement overflows (and vice versa)
|
|
88
|
+
const flip_y = offset_y >= 0
|
|
89
|
+
? cursor_y + offset_y + tooltip_height > viewport_height
|
|
90
|
+
: cursor_y + offset_y - tooltip_height < 0;
|
|
91
|
+
// Calculate position: apply offset, flip if needed
|
|
92
|
+
const abs_offset_x = Math.abs(offset_x);
|
|
93
|
+
const abs_offset_y = Math.abs(offset_y);
|
|
94
|
+
// Determine X position based on preferred side and flip state
|
|
95
|
+
let raw_x;
|
|
96
|
+
if (offset_x >= 0) {
|
|
97
|
+
// Prefer right side: flip to left if overflows
|
|
98
|
+
raw_x = flip_x ? cursor_x - abs_offset_x - tooltip_width : cursor_x + abs_offset_x;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Prefer left side: flip to right if overflows
|
|
102
|
+
raw_x = flip_x ? cursor_x + abs_offset_x : cursor_x - abs_offset_x - tooltip_width;
|
|
103
|
+
}
|
|
104
|
+
// Determine Y position based on preferred side and flip state
|
|
105
|
+
let raw_y;
|
|
106
|
+
if (offset_y >= 0) {
|
|
107
|
+
// Prefer bottom: flip to top if overflows
|
|
108
|
+
raw_y = flip_y ? cursor_y - abs_offset_y - tooltip_height : cursor_y + abs_offset_y;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Prefer top: flip to bottom if overflows
|
|
112
|
+
raw_y = flip_y ? cursor_y + abs_offset_y : cursor_y - abs_offset_y - tooltip_height;
|
|
113
|
+
}
|
|
114
|
+
// Clamp to viewport bounds
|
|
115
|
+
const x_pos = Math.max(0, Math.min(raw_x, viewport_width - tooltip_width));
|
|
116
|
+
const y_pos = Math.max(0, Math.min(raw_y, viewport_height - tooltip_height));
|
|
117
|
+
return { x: x_pos, y: y_pos };
|
|
118
|
+
}
|
|
119
|
+
export const pad_rect = (rect, padding) => ({
|
|
120
|
+
x: rect.x - padding,
|
|
121
|
+
y: rect.y - padding,
|
|
122
|
+
width: rect.width + 2 * padding,
|
|
123
|
+
height: rect.height + 2 * padding,
|
|
124
|
+
});
|
|
125
|
+
export const centered_rect = (center_x, top_y, width, height) => ({
|
|
126
|
+
x: center_x - width / 2,
|
|
127
|
+
y: top_y,
|
|
128
|
+
width,
|
|
129
|
+
height,
|
|
130
|
+
});
|
|
131
|
+
export const rect_within_rect = (rect, bounds) => rect.x >= bounds.x &&
|
|
132
|
+
rect.x + rect.width <= bounds.x + bounds.width &&
|
|
133
|
+
rect.y >= bounds.y &&
|
|
134
|
+
rect.y + rect.height <= bounds.y + bounds.height;
|
|
135
|
+
// Scoring constants
|
|
136
|
+
const EXCLUSION_PENALTY = 1000;
|
|
137
|
+
const DISTANCE_WEIGHT = 0.001;
|
|
138
|
+
// Strong corner preference: corners can have 3-4 more overlapping points and still win
|
|
139
|
+
const CORNER_WEIGHT = 5.0;
|
|
140
|
+
const MAX_SAMPLE_POINTS = 500;
|
|
141
|
+
// Check if a point is inside a rectangle
|
|
142
|
+
const point_in_rect = (point, rect) => point.x >= rect.x &&
|
|
143
|
+
point.x <= rect.x + rect.width &&
|
|
144
|
+
point.y >= rect.y &&
|
|
145
|
+
point.y <= rect.y + rect.height;
|
|
146
|
+
// Check if two rectangles overlap
|
|
147
|
+
export const rects_overlap = (r1, r2) => !(r1.x + r1.width <= r2.x ||
|
|
148
|
+
r2.x + r2.width <= r1.x ||
|
|
149
|
+
r1.y + r1.height <= r2.y ||
|
|
150
|
+
r2.y + r2.height <= r1.y);
|
|
151
|
+
// Build placement obstacles for one series' pixel-space polyline. Always includes the finite
|
|
152
|
+
// vertices; when the series draws a connecting line, also walks each segment between
|
|
153
|
+
// consecutive finite vertices at ~step px so legend/colorbar auto-placement avoids the line,
|
|
154
|
+
// not just sparse markers (e.g. a steep y=x^2 line has few markers but a long visible segment).
|
|
155
|
+
export function sample_series_obstacle_points(pixel_points, draws_line, step) {
|
|
156
|
+
const obstacles = [];
|
|
157
|
+
let prev = null;
|
|
158
|
+
for (const point of pixel_points) {
|
|
159
|
+
if (!isFinite(point.x) || !isFinite(point.y)) {
|
|
160
|
+
prev = null; // non-finite breaks the line; don't sample across the gap
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
obstacles.push(point);
|
|
164
|
+
if (draws_line && prev && step > 0) {
|
|
165
|
+
const n_samples = Math.floor(Math.hypot(point.x - prev.x, point.y - prev.y) / step);
|
|
166
|
+
for (let idx = 1; idx < n_samples; idx++) {
|
|
167
|
+
const frac = idx / n_samples;
|
|
168
|
+
const x = prev.x + (point.x - prev.x) * frac;
|
|
169
|
+
const y = prev.y + (point.y - prev.y) * frac;
|
|
170
|
+
obstacles.push({ x, y });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
prev = point;
|
|
174
|
+
}
|
|
175
|
+
return obstacles;
|
|
176
|
+
}
|
|
177
|
+
// Find the best placement position using continuous grid sampling
|
|
178
|
+
// Scores each candidate position by:
|
|
179
|
+
// 1. Number of data points overlapping the element bounds (fewer = better)
|
|
180
|
+
// 2. Overlap with exclusion rectangles (heavy penalty)
|
|
181
|
+
// 3. Distance to nearest point (tie-breaker, farther = better)
|
|
182
|
+
export function compute_element_placement(config) {
|
|
183
|
+
const { plot_bounds, element_size, element, axis_clearance = 12, exclude_rects = [], points, grid_resolution: raw_resolution = 10, } = config;
|
|
184
|
+
// Ensure grid_resolution >= 2 to avoid division by zero in step calculation
|
|
185
|
+
const grid_resolution = Math.max(2, raw_resolution);
|
|
186
|
+
// Measure the element's full footprint (incl. descendants that overflow its box,
|
|
187
|
+
// such as colorbar tick labels) once it's laid out; fall back to element_size before
|
|
188
|
+
// first render. Centralizing this keeps every plot's auto-placement overlap-free.
|
|
189
|
+
const { width: elem_width, height: elem_height } = element?.offsetWidth && element?.offsetHeight
|
|
190
|
+
? measure_full_footprint(element)
|
|
191
|
+
: element_size;
|
|
192
|
+
// Calculate valid placement region (plot bounds minus axis clearance)
|
|
193
|
+
const valid_x_min = plot_bounds.x + axis_clearance;
|
|
194
|
+
const valid_y_min = plot_bounds.y + axis_clearance;
|
|
195
|
+
const valid_x_max = plot_bounds.x + plot_bounds.width - axis_clearance - elem_width;
|
|
196
|
+
const valid_y_max = plot_bounds.y + plot_bounds.height - axis_clearance - elem_height;
|
|
197
|
+
// Handle case where element is too large for the valid region
|
|
198
|
+
const effective_x_min = Math.min(valid_x_min, valid_x_max);
|
|
199
|
+
const effective_x_max = Math.max(valid_x_min, valid_x_max);
|
|
200
|
+
const effective_y_min = Math.min(valid_y_min, valid_y_max);
|
|
201
|
+
const effective_y_max = Math.max(valid_y_min, valid_y_max);
|
|
202
|
+
// Subsample points for performance
|
|
203
|
+
const sampled_points = points.length > MAX_SAMPLE_POINTS
|
|
204
|
+
? Array.from({ length: MAX_SAMPLE_POINTS }, (_, idx) => points[Math.floor((idx * points.length) / MAX_SAMPLE_POINTS)])
|
|
205
|
+
: points;
|
|
206
|
+
let best_result = {
|
|
207
|
+
x: effective_x_min,
|
|
208
|
+
y: effective_y_min,
|
|
209
|
+
score: -Infinity,
|
|
210
|
+
};
|
|
211
|
+
// Sample candidate positions on a grid
|
|
212
|
+
const x_step = effective_x_max > effective_x_min
|
|
213
|
+
? (effective_x_max - effective_x_min) / (grid_resolution - 1)
|
|
214
|
+
: 0;
|
|
215
|
+
const y_step = effective_y_max > effective_y_min
|
|
216
|
+
? (effective_y_max - effective_y_min) / (grid_resolution - 1)
|
|
217
|
+
: 0;
|
|
218
|
+
// 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
|
+
const max_corner_dist = euclidean_dist([plot_left, plot_top], [plot_right, plot_bottom]);
|
|
224
|
+
for (let grid_x = 0; grid_x < grid_resolution; grid_x++) {
|
|
225
|
+
for (let grid_y = 0; grid_y < grid_resolution; grid_y++) {
|
|
226
|
+
const cand_x = effective_x_min + grid_x * x_step;
|
|
227
|
+
const cand_y = effective_y_min + grid_y * y_step;
|
|
228
|
+
const cand_rect = {
|
|
229
|
+
x: cand_x,
|
|
230
|
+
y: cand_y,
|
|
231
|
+
width: elem_width,
|
|
232
|
+
height: elem_height,
|
|
233
|
+
};
|
|
234
|
+
// Check for overlap with exclusion rectangles first (early rejection)
|
|
235
|
+
let exclusion_penalty = 0;
|
|
236
|
+
for (const excl_rect of exclude_rects) {
|
|
237
|
+
if (rects_overlap(cand_rect, excl_rect)) {
|
|
238
|
+
exclusion_penalty += EXCLUSION_PENALTY;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Count points overlapping this candidate position
|
|
242
|
+
let overlap_count = 0;
|
|
243
|
+
let min_distance_sq = Infinity;
|
|
244
|
+
const center_x = cand_x + elem_width / 2;
|
|
245
|
+
const center_y = cand_y + elem_height / 2;
|
|
246
|
+
for (const point of sampled_points) {
|
|
247
|
+
if (point_in_rect(point, cand_rect)) {
|
|
248
|
+
overlap_count++;
|
|
249
|
+
}
|
|
250
|
+
// Track distance to nearest point for tie-breaking
|
|
251
|
+
const dx = point.x - center_x;
|
|
252
|
+
const dy = point.y - center_y;
|
|
253
|
+
const dist_sq = dx * dx + dy * dy;
|
|
254
|
+
if (dist_sq < min_distance_sq) {
|
|
255
|
+
min_distance_sq = dist_sq;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Score: fewer overlaps = better (less negative)
|
|
259
|
+
// Add small distance bonus for tie-breaking
|
|
260
|
+
// When no points exist, min_distance_sq stays Infinity - treat as 0 (no distance bonus)
|
|
261
|
+
const min_distance = min_distance_sq === Infinity ? 0 : Math.sqrt(min_distance_sq);
|
|
262
|
+
// Corner preference: use element's actual corner (not center) for distance
|
|
263
|
+
// This ensures a wide element at the left edge gets proper corner credit
|
|
264
|
+
// (measured footprint, same as cand_rect — not the element_size fallback)
|
|
265
|
+
const elem_right = cand_x + elem_width;
|
|
266
|
+
const elem_bottom = cand_y + elem_height;
|
|
267
|
+
// Distance from element's matching corner to each plot corner
|
|
268
|
+
const min_corner_dist = Math.min(euclidean_dist([cand_x, cand_y], [plot_left, plot_top]), // top-left
|
|
269
|
+
euclidean_dist([elem_right, cand_y], [plot_right, plot_top]), // top-right
|
|
270
|
+
euclidean_dist([cand_x, elem_bottom], [plot_left, plot_bottom]), // bottom-left
|
|
271
|
+
euclidean_dist([elem_right, elem_bottom], [plot_right, plot_bottom]));
|
|
272
|
+
// Higher bonus for positions closer to corners (0 = at corner, 1 = far from all)
|
|
273
|
+
const corner_bonus = max_corner_dist > 0 ? (1 - min_corner_dist / max_corner_dist) * CORNER_WEIGHT : 0;
|
|
274
|
+
const score = -overlap_count + min_distance * DISTANCE_WEIGHT + corner_bonus - exclusion_penalty;
|
|
275
|
+
if (score > best_result.score) {
|
|
276
|
+
best_result = { x: cand_x, y: cand_y, score };
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return best_result;
|
|
281
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { RefLine, RefLineValue } from './types';
|
|
2
|
+
export type IndexedRefLine = RefLine & {
|
|
3
|
+
idx: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const index_ref_lines: (ref_lines: RefLine[] | undefined) => IndexedRefLine[];
|
|
6
|
+
export interface RefLinesByZIndex {
|
|
7
|
+
below_grid: IndexedRefLine[];
|
|
8
|
+
below_lines: IndexedRefLine[];
|
|
9
|
+
below_points: IndexedRefLine[];
|
|
10
|
+
above_all: IndexedRefLine[];
|
|
11
|
+
}
|
|
12
|
+
export declare function group_ref_lines_by_z(lines: IndexedRefLine[]): RefLinesByZIndex;
|
|
13
|
+
export declare function normalize_value(value: RefLineValue): number;
|
|
14
|
+
export declare const normalize_point: (point: [RefLineValue, RefLineValue]) => [number, number];
|
|
15
|
+
export declare function resolve_line_endpoints(ref_line: RefLine, { x_min, x_max, y_min, y_max, }: {
|
|
16
|
+
x_min: number;
|
|
17
|
+
x_max: number;
|
|
18
|
+
y_min: number;
|
|
19
|
+
y_max: number;
|
|
20
|
+
}, { x_scale, x2_scale, y_scale, y2_scale, }: {
|
|
21
|
+
x_scale: (val: number) => number;
|
|
22
|
+
x2_scale?: (val: number) => number;
|
|
23
|
+
y_scale: (val: number) => number;
|
|
24
|
+
y2_scale?: (val: number) => number;
|
|
25
|
+
}): [number, number, number, number] | null;
|
|
26
|
+
interface AnnotationPosition {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
text_anchor: `start` | `middle` | `end`;
|
|
30
|
+
dominant_baseline: `auto` | `middle` | `hanging`;
|
|
31
|
+
rotation?: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function calculate_annotation_position(x1: number, y1: number, x2: number, y2: number, annotation: {
|
|
34
|
+
position?: `start` | `center` | `end`;
|
|
35
|
+
side?: `above` | `below` | `left` | `right`;
|
|
36
|
+
offset?: {
|
|
37
|
+
x?: number;
|
|
38
|
+
y?: number;
|
|
39
|
+
};
|
|
40
|
+
gap?: number;
|
|
41
|
+
edge_padding?: number;
|
|
42
|
+
rotate?: boolean;
|
|
43
|
+
}): AnnotationPosition;
|
|
44
|
+
export interface Scene3DParams {
|
|
45
|
+
scene_x: number;
|
|
46
|
+
scene_y: number;
|
|
47
|
+
scene_z: number;
|
|
48
|
+
x_range: [number, number];
|
|
49
|
+
y_range: [number, number];
|
|
50
|
+
z_range: [number, number];
|
|
51
|
+
}
|
|
52
|
+
/** Apply span constraints or use full range as fallback */
|
|
53
|
+
export declare const span_or: (span: [number | null, number | null] | undefined, range: [number, number]) => [number, number];
|
|
54
|
+
export declare function normalize_to_scene(value: number, [min_val, max_val]: [number, number], scene_size: number): number;
|
|
55
|
+
export declare function create_to_threejs(params: Scene3DParams): (user_x: number, user_y: number, user_z: number) => {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
z: number;
|
|
59
|
+
};
|
|
60
|
+
export {};
|