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,99 @@
|
|
|
1
|
+
// Type guard for select value narrowing (avoids unsafe casts)
|
|
2
|
+
const SCALE_TYPE_NAMES = new Set([`linear`, `log`, `arcsinh`, `time`]);
|
|
3
|
+
export const is_scale_type_name = (val) => SCALE_TYPE_NAMES.has(val);
|
|
4
|
+
// Helper to normalize ScaleType to base type name
|
|
5
|
+
export function get_scale_type_name(scale_type) {
|
|
6
|
+
if (!scale_type)
|
|
7
|
+
return `linear`;
|
|
8
|
+
if (typeof scale_type === `string`)
|
|
9
|
+
return scale_type;
|
|
10
|
+
return scale_type.type;
|
|
11
|
+
}
|
|
12
|
+
// Helper to get arcsinh threshold (returns 1 as default for non-arcsinh scales)
|
|
13
|
+
export function get_arcsinh_threshold(scale_type) {
|
|
14
|
+
if (!scale_type)
|
|
15
|
+
return 1;
|
|
16
|
+
if (typeof scale_type === `object` && scale_type.type === `arcsinh`) {
|
|
17
|
+
const threshold = scale_type.threshold ?? 1;
|
|
18
|
+
if (!Number.isFinite(threshold) || threshold <= 0) {
|
|
19
|
+
throw new Error(`arcsinh threshold must be a positive finite number, got ${threshold}`);
|
|
20
|
+
}
|
|
21
|
+
return threshold;
|
|
22
|
+
}
|
|
23
|
+
return 1; // default threshold
|
|
24
|
+
}
|
|
25
|
+
// Helper to detect time scale - checks explicit scale_type or falls back to format heuristic
|
|
26
|
+
// Prefer explicit scale_type: 'time' for new code; format heuristic kept for backwards compatibility
|
|
27
|
+
export function is_time_scale(scale_type, format) {
|
|
28
|
+
if (get_scale_type_name(scale_type) === `time`)
|
|
29
|
+
return true;
|
|
30
|
+
// Fallback: d3 time format strings start with '%'
|
|
31
|
+
return format?.startsWith(`%`) ?? false;
|
|
32
|
+
}
|
|
33
|
+
// Type guard for select value narrowing (avoids unsafe casts)
|
|
34
|
+
const Y2_SYNC_MODES = new Set([`none`, `synced`, `align`]);
|
|
35
|
+
export const is_y2_sync_mode = (val) => Y2_SYNC_MODES.has(val);
|
|
36
|
+
export const LINE_TYPES = [`solid`, `dashed`, `dotted`];
|
|
37
|
+
// Define grid cell identifiers
|
|
38
|
+
export const CELLS_3X3 = [
|
|
39
|
+
`top-left`,
|
|
40
|
+
`top-center`,
|
|
41
|
+
`top-right`,
|
|
42
|
+
`middle-left`,
|
|
43
|
+
`middle-center`,
|
|
44
|
+
`middle-right`,
|
|
45
|
+
`bottom-left`,
|
|
46
|
+
`bottom-center`,
|
|
47
|
+
`bottom-right`,
|
|
48
|
+
];
|
|
49
|
+
export const CORNER_CELLS = [`top-left`, `top-right`, `bottom-left`, `bottom-right`];
|
|
50
|
+
// Default grid line style (SSOT for all plot components)
|
|
51
|
+
export const DEFAULT_GRID_STYLE = {
|
|
52
|
+
stroke: `var(--border-color, gray)`,
|
|
53
|
+
'stroke-dasharray': `4`,
|
|
54
|
+
'stroke-width': `0.5`,
|
|
55
|
+
};
|
|
56
|
+
export const DEFAULT_MARKERS = `line+points`;
|
|
57
|
+
// Default series colors for auto-differentiation (similar to d3 schemeTableau10)
|
|
58
|
+
export const DEFAULT_SERIES_COLORS = [
|
|
59
|
+
`#4e79a7`, // blue
|
|
60
|
+
`#f28e2c`, // orange
|
|
61
|
+
`#e15759`, // red
|
|
62
|
+
`#76b7b2`, // teal
|
|
63
|
+
`#59a14f`, // green
|
|
64
|
+
`#edc949`, // yellow
|
|
65
|
+
`#af7aa1`, // purple
|
|
66
|
+
`#ff9da7`, // pink
|
|
67
|
+
`#9c755f`, // brown
|
|
68
|
+
`#bab0ab`, // gray
|
|
69
|
+
];
|
|
70
|
+
// Default series symbols for auto-differentiation (cycling through distinct shapes)
|
|
71
|
+
export const DEFAULT_SERIES_SYMBOLS = [
|
|
72
|
+
`Circle`,
|
|
73
|
+
`Square`,
|
|
74
|
+
`Triangle`,
|
|
75
|
+
`Cross`,
|
|
76
|
+
`Diamond`,
|
|
77
|
+
`Star`,
|
|
78
|
+
`Wye`,
|
|
79
|
+
];
|
|
80
|
+
// Curve types supported for fill path generation (matching d3-shape curves)
|
|
81
|
+
export const FILL_CURVE_TYPES = [
|
|
82
|
+
`linear`,
|
|
83
|
+
`monotoneX`,
|
|
84
|
+
`monotoneY`,
|
|
85
|
+
`step`,
|
|
86
|
+
`stepBefore`,
|
|
87
|
+
`stepAfter`,
|
|
88
|
+
`basis`,
|
|
89
|
+
`cardinal`,
|
|
90
|
+
`catmullRom`,
|
|
91
|
+
`natural`,
|
|
92
|
+
];
|
|
93
|
+
// Default style values for reference lines
|
|
94
|
+
export const REF_LINE_STYLE_DEFAULTS = {
|
|
95
|
+
color: `currentColor`,
|
|
96
|
+
width: 1,
|
|
97
|
+
dash: ``,
|
|
98
|
+
opacity: 1,
|
|
99
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Point2D } from '../../../math';
|
|
2
|
+
import type { AxisConfig, DataSeries } from '../..';
|
|
3
|
+
import type { PlotScaleFn } from '../scales';
|
|
4
|
+
import type { LabelPlacementConfig, LabelPlacementWeights } from '../types';
|
|
5
|
+
export interface Rect {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
w: number;
|
|
9
|
+
h: number;
|
|
10
|
+
}
|
|
11
|
+
export interface PlotBounds {
|
|
12
|
+
min_x: number;
|
|
13
|
+
min_y: number;
|
|
14
|
+
max_x: number;
|
|
15
|
+
max_y: number;
|
|
16
|
+
}
|
|
17
|
+
interface AnchorInfo {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
radius: number;
|
|
21
|
+
}
|
|
22
|
+
interface LabelState extends Rect {
|
|
23
|
+
anchor_idx: number;
|
|
24
|
+
}
|
|
25
|
+
export interface LabelSize {
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
}
|
|
29
|
+
export interface LeaderLineSegment {
|
|
30
|
+
x1: number;
|
|
31
|
+
y1: number;
|
|
32
|
+
x2: number;
|
|
33
|
+
y2: number;
|
|
34
|
+
}
|
|
35
|
+
export interface LeaderLineOptions {
|
|
36
|
+
point: Point2D;
|
|
37
|
+
point_radius: number;
|
|
38
|
+
label_center: Point2D;
|
|
39
|
+
label_size: LabelSize;
|
|
40
|
+
min_length?: number;
|
|
41
|
+
label_padding?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare function parse_font_size(size_str?: string): number;
|
|
44
|
+
export declare function estimate_label_size(text: string, font_size_str?: string): LabelSize;
|
|
45
|
+
export declare function rect_overlap_area(a: Rect, b: Rect): number;
|
|
46
|
+
export declare function rect_circle_overlap(rect: Rect, cx: number, cy: number, radius: number): number;
|
|
47
|
+
export declare function segments_intersect(ax1: number, ay1: number, ax2: number, ay2: number, bx1: number, by1: number, bx2: number, by2: number): boolean;
|
|
48
|
+
export declare function segment_rect_intersects(sx1: number, sy1: number, sx2: number, sy2: number, rect: Rect): boolean;
|
|
49
|
+
export declare function rect_out_of_bounds_area(rect: Rect, bounds: PlotBounds): number;
|
|
50
|
+
export declare function label_leader_segment({ point, point_radius, label_center, label_size, min_length, label_padding, }: LeaderLineOptions): LeaderLineSegment | null;
|
|
51
|
+
export declare function generate_candidates(ax: number, ay: number, point_radius: number, label_w: number, label_h: number, gap: number): Point2D[];
|
|
52
|
+
export declare function compute_delta_energy(labels: LabelState[], anchors: AnchorInfo[], changed_idx: number, old_state: LabelState, new_state: LabelState, weights: Required<LabelPlacementWeights>, bounds: PlotBounds): number;
|
|
53
|
+
export declare function compute_label_positions(filtered_series: DataSeries[], config: LabelPlacementConfig, scales: {
|
|
54
|
+
x_scale_fn: PlotScaleFn;
|
|
55
|
+
y_scale_fn: PlotScaleFn;
|
|
56
|
+
y2_scale_fn: PlotScaleFn;
|
|
57
|
+
x_axis: AxisConfig;
|
|
58
|
+
}, bounds: {
|
|
59
|
+
width: number;
|
|
60
|
+
height: number;
|
|
61
|
+
pad: {
|
|
62
|
+
t: number;
|
|
63
|
+
b: number;
|
|
64
|
+
l: number;
|
|
65
|
+
r: number;
|
|
66
|
+
};
|
|
67
|
+
}): Record<string, Point2D>;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { is_time_scale } from '../types';
|
|
2
|
+
const DEFAULT_WEIGHTS = {
|
|
3
|
+
overlap: 30,
|
|
4
|
+
marker: 100,
|
|
5
|
+
leader_cross: 10,
|
|
6
|
+
leader_text: 8,
|
|
7
|
+
distance: 0.5,
|
|
8
|
+
bounds: 100,
|
|
9
|
+
};
|
|
10
|
+
const NEIGHBOR_CELL_OFFSETS = [-1, 0, 1];
|
|
11
|
+
const copy_state = (target, source) => {
|
|
12
|
+
target.x = source.x;
|
|
13
|
+
target.y = source.y;
|
|
14
|
+
target.w = source.w;
|
|
15
|
+
target.h = source.h;
|
|
16
|
+
target.anchor_idx = source.anchor_idx;
|
|
17
|
+
};
|
|
18
|
+
export function parse_font_size(size_str) {
|
|
19
|
+
if (!size_str)
|
|
20
|
+
return 12;
|
|
21
|
+
const match = /^(\d+(?:\.\d+)?)(px|em|rem)?$/.exec(size_str);
|
|
22
|
+
if (!match)
|
|
23
|
+
return 12;
|
|
24
|
+
const value = parseFloat(match[1]);
|
|
25
|
+
return match[2] === `em` || match[2] === `rem` ? value * 16 : value;
|
|
26
|
+
}
|
|
27
|
+
export function estimate_label_size(text, font_size_str) {
|
|
28
|
+
const font_size = parse_font_size(font_size_str);
|
|
29
|
+
const label_lines = text.split(/\r?\n/);
|
|
30
|
+
const max_line_length = Math.max(...label_lines.map((line) => line.length));
|
|
31
|
+
return {
|
|
32
|
+
width: max_line_length * font_size * 0.6 + 10,
|
|
33
|
+
height: label_lines.length * font_size * 1.2,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// === Geometry helpers ===
|
|
37
|
+
export function rect_overlap_area(a, b) {
|
|
38
|
+
const ox = Math.max(0, Math.min(a.x + a.w, b.x + b.w) - Math.max(a.x, b.x));
|
|
39
|
+
const oy = Math.max(0, Math.min(a.y + a.h, b.y + b.h) - Math.max(a.y, b.y));
|
|
40
|
+
return ox * oy;
|
|
41
|
+
}
|
|
42
|
+
export function rect_circle_overlap(rect, cx, cy, radius) {
|
|
43
|
+
// Inflate rect by radius to create an exclusion zone around the marker
|
|
44
|
+
const left = rect.x - radius;
|
|
45
|
+
const top = rect.y - radius;
|
|
46
|
+
const right = rect.x + rect.w + radius;
|
|
47
|
+
const bottom = rect.y + rect.h + radius;
|
|
48
|
+
if (cx < left || cx > right || cy < top || cy > bottom)
|
|
49
|
+
return 0;
|
|
50
|
+
// Penalty proportional to how deep the marker center is inside the exclusion zone
|
|
51
|
+
const dx = Math.min(cx - left, right - cx);
|
|
52
|
+
const dy = Math.min(cy - top, bottom - cy);
|
|
53
|
+
return Math.min(dx, dy) + radius;
|
|
54
|
+
}
|
|
55
|
+
export function segments_intersect(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {
|
|
56
|
+
const d1x = ax2 - ax1, d1y = ay2 - ay1;
|
|
57
|
+
const d2x = bx2 - bx1, d2y = by2 - by1;
|
|
58
|
+
const cross = d1x * d2y - d1y * d2x;
|
|
59
|
+
if (Math.abs(cross) < 1e-10)
|
|
60
|
+
return false;
|
|
61
|
+
const t_val = ((bx1 - ax1) * d2y - (by1 - ay1) * d2x) / cross;
|
|
62
|
+
const u_val = ((bx1 - ax1) * d1y - (by1 - ay1) * d1x) / cross;
|
|
63
|
+
return t_val > 0 && t_val < 1 && u_val > 0 && u_val < 1;
|
|
64
|
+
}
|
|
65
|
+
export function segment_rect_intersects(sx1, sy1, sx2, sy2, rect) {
|
|
66
|
+
const rx = rect.x, ry = rect.y, rx2 = rx + rect.w, ry2 = ry + rect.h;
|
|
67
|
+
return (segments_intersect(sx1, sy1, sx2, sy2, rx, ry, rx2, ry) ||
|
|
68
|
+
segments_intersect(sx1, sy1, sx2, sy2, rx2, ry, rx2, ry2) ||
|
|
69
|
+
segments_intersect(sx1, sy1, sx2, sy2, rx, ry2, rx2, ry2) ||
|
|
70
|
+
segments_intersect(sx1, sy1, sx2, sy2, rx, ry, rx, ry2));
|
|
71
|
+
}
|
|
72
|
+
export function rect_out_of_bounds_area(rect, bounds) {
|
|
73
|
+
let penalty = 0;
|
|
74
|
+
if (rect.x < bounds.min_x)
|
|
75
|
+
penalty += (bounds.min_x - rect.x) * rect.h;
|
|
76
|
+
if (rect.y < bounds.min_y)
|
|
77
|
+
penalty += (bounds.min_y - rect.y) * rect.w;
|
|
78
|
+
if (rect.x + rect.w > bounds.max_x)
|
|
79
|
+
penalty += (rect.x + rect.w - bounds.max_x) * rect.h;
|
|
80
|
+
if (rect.y + rect.h > bounds.max_y)
|
|
81
|
+
penalty += (rect.y + rect.h - bounds.max_y) * rect.w;
|
|
82
|
+
return penalty;
|
|
83
|
+
}
|
|
84
|
+
export function label_leader_segment({ point, point_radius, label_center, label_size, min_length = 6, label_padding = 1, }) {
|
|
85
|
+
const delta_x = label_center.x - point.x;
|
|
86
|
+
const delta_y = label_center.y - point.y;
|
|
87
|
+
const center_distance = Math.hypot(delta_x, delta_y);
|
|
88
|
+
if (center_distance <= 0)
|
|
89
|
+
return null;
|
|
90
|
+
const unit_x = delta_x / center_distance;
|
|
91
|
+
const unit_y = delta_y / center_distance;
|
|
92
|
+
const start_x = point.x + unit_x * point_radius;
|
|
93
|
+
const start_y = point.y + unit_y * point_radius;
|
|
94
|
+
const half_width = label_size.width / 2 + label_padding;
|
|
95
|
+
const half_height = label_size.height / 2 + label_padding;
|
|
96
|
+
const edge_distance = Math.min(Math.abs(unit_x) > 0.001 ? half_width / Math.abs(unit_x) : Infinity, Math.abs(unit_y) > 0.001 ? half_height / Math.abs(unit_y) : Infinity);
|
|
97
|
+
const visible_length = center_distance - point_radius - edge_distance;
|
|
98
|
+
if (visible_length <= min_length)
|
|
99
|
+
return null;
|
|
100
|
+
const end_x = label_center.x - unit_x * edge_distance;
|
|
101
|
+
const end_y = label_center.y - unit_y * edge_distance;
|
|
102
|
+
return { x1: start_x, y1: start_y, x2: end_x, y2: end_y };
|
|
103
|
+
}
|
|
104
|
+
// 8 candidate positions around anchor: R, TR, T, TL, L, BL, B, BR
|
|
105
|
+
// Positions are top-left corner of the label bounding box.
|
|
106
|
+
// All positions keep a full `offset` gap from the marker edge.
|
|
107
|
+
export function generate_candidates(ax, ay, point_radius, label_w, label_h, gap) {
|
|
108
|
+
const offset = point_radius + gap;
|
|
109
|
+
return [
|
|
110
|
+
{ x: ax + offset, y: ay - label_h + offset / 2 }, // R (baseline just below center)
|
|
111
|
+
{ x: ax + offset, y: ay - label_h - offset / 2 }, // TR
|
|
112
|
+
{ x: ax - label_w / 2, y: ay - label_h - offset }, // T
|
|
113
|
+
{ x: ax - label_w - offset, y: ay - label_h - offset / 2 }, // TL
|
|
114
|
+
{ x: ax - label_w - offset, y: ay - label_h + offset / 2 }, // L (baseline just below center)
|
|
115
|
+
{ x: ax - label_w - offset, y: ay + offset / 2 }, // BL
|
|
116
|
+
{ x: ax - label_w / 2, y: ay + offset }, // B
|
|
117
|
+
{ x: ax + offset, y: ay + offset / 2 }, // BR
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
// Compute energy delta when only label at `changed_idx` moves
|
|
121
|
+
export function compute_delta_energy(labels, anchors, changed_idx, old_state, new_state, weights, bounds) {
|
|
122
|
+
let delta = 0;
|
|
123
|
+
const anchor = anchors[new_state.anchor_idx];
|
|
124
|
+
const old_cx = old_state.x + old_state.w / 2, old_cy = old_state.y + old_state.h / 2;
|
|
125
|
+
const new_cx = new_state.x + new_state.w / 2, new_cy = new_state.y + new_state.h / 2;
|
|
126
|
+
// Distance penalty change
|
|
127
|
+
delta +=
|
|
128
|
+
weights.distance *
|
|
129
|
+
(Math.hypot(new_cx - anchor.x, new_cy - anchor.y) -
|
|
130
|
+
Math.hypot(old_cx - anchor.x, old_cy - anchor.y));
|
|
131
|
+
// Bounds penalty change
|
|
132
|
+
delta +=
|
|
133
|
+
weights.bounds *
|
|
134
|
+
(rect_out_of_bounds_area(new_state, bounds) - rect_out_of_bounds_area(old_state, bounds));
|
|
135
|
+
// Marker overlap change (all markers)
|
|
136
|
+
for (const marker of anchors) {
|
|
137
|
+
delta +=
|
|
138
|
+
weights.marker *
|
|
139
|
+
(rect_circle_overlap(new_state, marker.x, marker.y, marker.radius) -
|
|
140
|
+
rect_circle_overlap(old_state, marker.x, marker.y, marker.radius));
|
|
141
|
+
}
|
|
142
|
+
// Pairwise interactions with all other labels
|
|
143
|
+
for (let jdx = 0; jdx < labels.length; jdx++) {
|
|
144
|
+
if (jdx === changed_idx)
|
|
145
|
+
continue;
|
|
146
|
+
const other = labels[jdx];
|
|
147
|
+
const anchor_j = anchors[other.anchor_idx];
|
|
148
|
+
const other_cx = other.x + other.w / 2, other_cy = other.y + other.h / 2;
|
|
149
|
+
// Label-label overlap delta
|
|
150
|
+
delta +=
|
|
151
|
+
weights.overlap *
|
|
152
|
+
(rect_overlap_area(new_state, other) - rect_overlap_area(old_state, other));
|
|
153
|
+
// Leader line crossing delta (changed label's leader vs other's leader)
|
|
154
|
+
const old_cross = segments_intersect(anchor.x, anchor.y, old_cx, old_cy, anchor_j.x, anchor_j.y, other_cx, other_cy);
|
|
155
|
+
const new_cross = segments_intersect(anchor.x, anchor.y, new_cx, new_cy, anchor_j.x, anchor_j.y, other_cx, other_cy);
|
|
156
|
+
if (new_cross !== old_cross)
|
|
157
|
+
delta += (new_cross ? 1 : -1) * weights.leader_cross;
|
|
158
|
+
// Changed label's leader crossing other label's rect
|
|
159
|
+
const old_text = segment_rect_intersects(anchor.x, anchor.y, old_cx, old_cy, other);
|
|
160
|
+
const new_text = segment_rect_intersects(anchor.x, anchor.y, new_cx, new_cy, other);
|
|
161
|
+
if (new_text !== old_text)
|
|
162
|
+
delta += (new_text ? 1 : -1) * weights.leader_text;
|
|
163
|
+
// Other label's leader crossing changed label's rect
|
|
164
|
+
const old_other = segment_rect_intersects(anchor_j.x, anchor_j.y, other_cx, other_cy, old_state);
|
|
165
|
+
const new_other = segment_rect_intersects(anchor_j.x, anchor_j.y, other_cx, other_cy, new_state);
|
|
166
|
+
if (new_other !== old_other)
|
|
167
|
+
delta += (new_other ? 1 : -1) * weights.leader_text;
|
|
168
|
+
}
|
|
169
|
+
return delta;
|
|
170
|
+
}
|
|
171
|
+
function cull_dense_labels(label_infos, max_neighbors, radius) {
|
|
172
|
+
if (radius <= 0 || label_infos.length <= max_neighbors + 1)
|
|
173
|
+
return label_infos;
|
|
174
|
+
const radius_squared = radius * radius;
|
|
175
|
+
const get_cell = (value) => Math.floor(value / radius);
|
|
176
|
+
const grid = {};
|
|
177
|
+
label_infos.forEach(({ anchor }, label_idx) => {
|
|
178
|
+
const key = `${get_cell(anchor.x)},${get_cell(anchor.y)}`;
|
|
179
|
+
const bucket = grid[key] ?? (grid[key] = []);
|
|
180
|
+
bucket.push(label_idx);
|
|
181
|
+
});
|
|
182
|
+
return label_infos.filter(({ anchor }, label_idx) => {
|
|
183
|
+
const cell_x = get_cell(anchor.x);
|
|
184
|
+
const cell_y = get_cell(anchor.y);
|
|
185
|
+
let neighbors = 0;
|
|
186
|
+
for (const cell_x_offset of NEIGHBOR_CELL_OFFSETS) {
|
|
187
|
+
for (const cell_y_offset of NEIGHBOR_CELL_OFFSETS) {
|
|
188
|
+
const bucket = grid[`${cell_x + cell_x_offset},${cell_y + cell_y_offset}`];
|
|
189
|
+
if (!bucket)
|
|
190
|
+
continue;
|
|
191
|
+
for (const neighbor_idx of bucket) {
|
|
192
|
+
if (neighbor_idx === label_idx)
|
|
193
|
+
continue;
|
|
194
|
+
const delta_x = anchor.x - label_infos[neighbor_idx].anchor.x;
|
|
195
|
+
const delta_y = anchor.y - label_infos[neighbor_idx].anchor.y;
|
|
196
|
+
if (delta_x * delta_x + delta_y * delta_y <= radius_squared)
|
|
197
|
+
neighbors += 1;
|
|
198
|
+
if (neighbors > max_neighbors)
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return true;
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// === Main export ===
|
|
207
|
+
export function compute_label_positions(filtered_series, config, scales, bounds) {
|
|
208
|
+
const { x_scale_fn, y_scale_fn, y2_scale_fn, x_axis } = scales;
|
|
209
|
+
const { width, height, pad } = bounds;
|
|
210
|
+
const plot_bounds = {
|
|
211
|
+
min_x: pad.l,
|
|
212
|
+
min_y: pad.t,
|
|
213
|
+
max_x: width - pad.r,
|
|
214
|
+
max_y: height - pad.b,
|
|
215
|
+
};
|
|
216
|
+
// Collect all label data in a single pass
|
|
217
|
+
let label_infos = [];
|
|
218
|
+
const candidate_gap = config.candidate_gap ?? 4;
|
|
219
|
+
for (const series of filtered_series) {
|
|
220
|
+
for (const pt of series.filtered_data ?? []) {
|
|
221
|
+
if (!pt.point_label?.auto_placement || !pt.point_label.text)
|
|
222
|
+
continue;
|
|
223
|
+
const ax = is_time_scale(x_axis.scale_type, x_axis.format)
|
|
224
|
+
? x_scale_fn(new Date(pt.x))
|
|
225
|
+
: x_scale_fn(pt.x);
|
|
226
|
+
const ay = (series.y_axis === `y2` ? y2_scale_fn : y_scale_fn)(pt.y);
|
|
227
|
+
const label_size = pt.point_label.size ??
|
|
228
|
+
estimate_label_size(pt.point_label.text, pt.point_label.font_size);
|
|
229
|
+
const label_w = label_size.width;
|
|
230
|
+
const label_h = label_size.height;
|
|
231
|
+
const radius = pt.point_style?.radius ?? 3;
|
|
232
|
+
label_infos.push({
|
|
233
|
+
id: `${pt.series_idx}-${pt.point_idx}`,
|
|
234
|
+
anchor: { x: ax, y: ay, radius },
|
|
235
|
+
width: label_w,
|
|
236
|
+
height: label_h,
|
|
237
|
+
candidates: generate_candidates(ax, ay, radius, label_w, label_h, candidate_gap),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (config.max_neighbors) {
|
|
242
|
+
label_infos = cull_dense_labels(label_infos, config.max_neighbors.count, config.max_neighbors.radius);
|
|
243
|
+
}
|
|
244
|
+
const num_labels = label_infos.length;
|
|
245
|
+
if (num_labels === 0)
|
|
246
|
+
return {};
|
|
247
|
+
// Fallback: too many labels, just offset to the right with bounds clamping
|
|
248
|
+
if (config.max_labels && num_labels > config.max_labels) {
|
|
249
|
+
return Object.fromEntries(label_infos.map((info) => [
|
|
250
|
+
info.id,
|
|
251
|
+
{
|
|
252
|
+
x: Math.min(Math.max(info.anchor.x + 5, plot_bounds.min_x), plot_bounds.max_x - info.width),
|
|
253
|
+
y: Math.min(Math.max(info.anchor.y, plot_bounds.min_y), plot_bounds.max_y - info.height),
|
|
254
|
+
},
|
|
255
|
+
]));
|
|
256
|
+
}
|
|
257
|
+
const weights = { ...DEFAULT_WEIGHTS, ...config.weights };
|
|
258
|
+
const anchors = label_infos.map((info) => info.anchor);
|
|
259
|
+
// Greedy initialization: pick best candidate per label
|
|
260
|
+
const labels = [];
|
|
261
|
+
for (let idx = 0; idx < num_labels; idx++) {
|
|
262
|
+
const { candidates, width: lw, height: lh, anchor } = label_infos[idx];
|
|
263
|
+
let best_candidate = candidates[0];
|
|
264
|
+
let best_score = Infinity;
|
|
265
|
+
for (const candidate of candidates) {
|
|
266
|
+
const test_rect = { x: candidate.x, y: candidate.y, w: lw, h: lh };
|
|
267
|
+
let score = weights.bounds * rect_out_of_bounds_area(test_rect, plot_bounds);
|
|
268
|
+
for (const placed of labels) {
|
|
269
|
+
score += weights.overlap * rect_overlap_area(test_rect, placed);
|
|
270
|
+
}
|
|
271
|
+
for (const marker of anchors) {
|
|
272
|
+
score +=
|
|
273
|
+
weights.marker * rect_circle_overlap(test_rect, marker.x, marker.y, marker.radius);
|
|
274
|
+
}
|
|
275
|
+
score +=
|
|
276
|
+
weights.distance *
|
|
277
|
+
Math.hypot(candidate.x + lw / 2 - anchor.x, candidate.y + lh / 2 - anchor.y);
|
|
278
|
+
if (score < best_score) {
|
|
279
|
+
best_score = score;
|
|
280
|
+
best_candidate = candidate;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
labels.push({ x: best_candidate.x, y: best_candidate.y, w: lw, h: lh, anchor_idx: idx });
|
|
284
|
+
}
|
|
285
|
+
// Simulated annealing
|
|
286
|
+
const sa_iterations = config.sa_iterations ?? 2000;
|
|
287
|
+
const total_steps = sa_iterations * num_labels;
|
|
288
|
+
const cooling_rate = 1 / total_steps;
|
|
289
|
+
// Seeded pseudo-random for deterministic results
|
|
290
|
+
let rng_state = 42;
|
|
291
|
+
const next_random = () => {
|
|
292
|
+
rng_state = (rng_state * 1664525 + 1013904223) & 0x7fffffff;
|
|
293
|
+
return rng_state / 0x7fffffff;
|
|
294
|
+
};
|
|
295
|
+
// Reusable scratch objects to avoid allocations in the hot loop
|
|
296
|
+
const old_scratch = { x: 0, y: 0, w: 0, h: 0, anchor_idx: 0 };
|
|
297
|
+
const new_scratch = { x: 0, y: 0, w: 0, h: 0, anchor_idx: 0 };
|
|
298
|
+
for (let step = 0; step < total_steps; step++) {
|
|
299
|
+
const temperature = Math.max(0.001, 1.0 - step * cooling_rate);
|
|
300
|
+
const label_idx = Math.floor(next_random() * num_labels);
|
|
301
|
+
const current = labels[label_idx];
|
|
302
|
+
copy_state(old_scratch, current);
|
|
303
|
+
copy_state(new_scratch, current);
|
|
304
|
+
// 70% try a candidate position, 30% small perturbation
|
|
305
|
+
if (next_random() < 0.7) {
|
|
306
|
+
const candidate = label_infos[label_idx].candidates[Math.floor(next_random() * label_infos[label_idx].candidates.length)];
|
|
307
|
+
new_scratch.x = candidate.x;
|
|
308
|
+
new_scratch.y = candidate.y;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
const max_shift = 30 * temperature + 5;
|
|
312
|
+
new_scratch.x += (next_random() - 0.5) * 2 * max_shift;
|
|
313
|
+
new_scratch.y += (next_random() - 0.5) * 2 * max_shift;
|
|
314
|
+
}
|
|
315
|
+
const delta = compute_delta_energy(labels, anchors, label_idx, old_scratch, new_scratch, weights, plot_bounds);
|
|
316
|
+
if (delta < 0 || next_random() < Math.exp(-delta / (temperature * 10 + 0.1))) {
|
|
317
|
+
current.x = new_scratch.x;
|
|
318
|
+
current.y = new_scratch.y;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Return label center positions (matching existing API)
|
|
322
|
+
return Object.fromEntries(labels.map((label, idx) => [
|
|
323
|
+
label_infos[idx].id,
|
|
324
|
+
{ x: label.x + label.w / 2, y: label.y + label.h / 2 },
|
|
325
|
+
]));
|
|
326
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type VisSeries = {
|
|
2
|
+
label?: string | null;
|
|
3
|
+
unit?: string;
|
|
4
|
+
y_axis?: string;
|
|
5
|
+
visible?: boolean;
|
|
6
|
+
x?: unknown;
|
|
7
|
+
y?: unknown;
|
|
8
|
+
};
|
|
9
|
+
type SeriesSource = [string, string, string, ...unknown[]];
|
|
10
|
+
export type SeriesVisibilitySnapshot = {
|
|
11
|
+
visibility: boolean[];
|
|
12
|
+
source: SeriesSource[];
|
|
13
|
+
};
|
|
14
|
+
export declare function have_compatible_units(series1: VisSeries, series2: VisSeries): boolean;
|
|
15
|
+
export declare function toggle_series_visibility<Series extends VisSeries>(series: Series[], series_idx: number): Series[];
|
|
16
|
+
export declare function toggle_group_visibility<Series extends VisSeries>(series: Series[], series_indices: number[]): Series[];
|
|
17
|
+
export declare function handle_legend_double_click<Series extends VisSeries>(series: Series[], idx: number, prev_snapshot: SeriesVisibilitySnapshot | null): {
|
|
18
|
+
series: Series[];
|
|
19
|
+
prev_visibility: SeriesVisibilitySnapshot | null;
|
|
20
|
+
};
|
|
21
|
+
export declare function create_legend_visibility<Series extends VisSeries>(get_series: () => Series[], set_series: (series: Series[]) => void): {
|
|
22
|
+
on_toggle: (series_idx: number) => void;
|
|
23
|
+
on_group_toggle: (group_name: string, series_indices: number[]) => void;
|
|
24
|
+
on_double_click: (series_idx: number) => void;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Length + first/last element: a by-value signature for x/y data. Deliberately NOT
|
|
2
|
+
// array identity: inside components those are $state proxies whose identity changes
|
|
3
|
+
// when the series prop is reassigned (e.g. by the isolate itself), which made the
|
|
4
|
+
// snapshot reject itself and permanently broke restore-from-isolation.
|
|
5
|
+
const data_sig = (arr) => Array.isArray(arr) ? [arr.length, arr[0], arr[arr.length - 1]] : [arr];
|
|
6
|
+
const series_source = (series, length = series.length) => series
|
|
7
|
+
.slice(0, length)
|
|
8
|
+
.map((srs) => [
|
|
9
|
+
srs.label ?? ``,
|
|
10
|
+
srs.unit ?? ``,
|
|
11
|
+
srs.y_axis ?? ``,
|
|
12
|
+
...data_sig(srs.x),
|
|
13
|
+
...data_sig(srs.y),
|
|
14
|
+
]);
|
|
15
|
+
const same_series_source = (series, snapshot_series) => series.length === snapshot_series.length &&
|
|
16
|
+
series.every((source, idx) => source.length === snapshot_series[idx].length &&
|
|
17
|
+
source.every((part, part_idx) => Object.is(part, snapshot_series[idx][part_idx])));
|
|
18
|
+
export function have_compatible_units(series1, series2) {
|
|
19
|
+
if (!series1.unit || !series2.unit)
|
|
20
|
+
return true;
|
|
21
|
+
return series1.unit === series2.unit;
|
|
22
|
+
}
|
|
23
|
+
export function toggle_series_visibility(series, series_idx) {
|
|
24
|
+
if (series_idx < 0 || series_idx >= series.length || !series[series_idx])
|
|
25
|
+
return series;
|
|
26
|
+
const toggled = series[series_idx];
|
|
27
|
+
const new_visibility = !(toggled.visible ?? true);
|
|
28
|
+
const target_axis = toggled.y_axis ?? `y1`;
|
|
29
|
+
return series.map((srs, idx) => {
|
|
30
|
+
if ((toggled.label && srs.label === toggled.label) ||
|
|
31
|
+
(idx === series_idx && !toggled.label)) {
|
|
32
|
+
return { ...srs, visible: new_visibility };
|
|
33
|
+
}
|
|
34
|
+
if (new_visibility && (srs.y_axis ?? `y1`) === target_axis) {
|
|
35
|
+
if (!have_compatible_units(toggled, srs) && (srs.visible ?? true)) {
|
|
36
|
+
return { ...srs, visible: false };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return srs;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export function toggle_group_visibility(series, series_indices) {
|
|
43
|
+
// Filter to valid indices upfront
|
|
44
|
+
const valid_indices = series_indices.filter((idx) => idx >= 0 && idx < series.length);
|
|
45
|
+
if (valid_indices.length === 0)
|
|
46
|
+
return series;
|
|
47
|
+
const idx_set = new Set(valid_indices);
|
|
48
|
+
// Check if all series in the group are currently visible
|
|
49
|
+
const all_visible = valid_indices.every((idx) => series[idx].visible ?? true);
|
|
50
|
+
// Toggle: if all visible, hide all; otherwise show all
|
|
51
|
+
const new_visibility = !all_visible;
|
|
52
|
+
return series.map((srs, idx) => idx_set.has(idx) ? { ...srs, visible: new_visibility } : srs);
|
|
53
|
+
}
|
|
54
|
+
export function handle_legend_double_click(series, idx, prev_snapshot) {
|
|
55
|
+
if (idx < 0 || idx >= series.length) {
|
|
56
|
+
return { series, prev_visibility: prev_snapshot };
|
|
57
|
+
}
|
|
58
|
+
const { label } = series[idx];
|
|
59
|
+
const current = series.map((srs) => srs.visible ?? true);
|
|
60
|
+
const current_source = prev_snapshot
|
|
61
|
+
? series_source(series, prev_snapshot.visibility.length)
|
|
62
|
+
: [];
|
|
63
|
+
const prev_visibility = prev_snapshot && same_series_source(current_source, prev_snapshot.source)
|
|
64
|
+
? prev_snapshot.visibility
|
|
65
|
+
: null;
|
|
66
|
+
// Only check original series (ignore new ones added after isolation)
|
|
67
|
+
const check_series = prev_visibility ? series.slice(0, prev_visibility.length) : series;
|
|
68
|
+
const is_isolated = check_series.every((srs, srs_idx) => {
|
|
69
|
+
const in_group = label ? srs.label === label : srs_idx === idx;
|
|
70
|
+
return in_group ? (srs.visible ?? true) : !(srs.visible ?? true);
|
|
71
|
+
});
|
|
72
|
+
// Restore from isolation
|
|
73
|
+
if (is_isolated && prev_visibility) {
|
|
74
|
+
return {
|
|
75
|
+
series: series.map((srs, srs_idx) => srs_idx < prev_visibility.length && current[srs_idx] !== prev_visibility[srs_idx]
|
|
76
|
+
? { ...srs, visible: prev_visibility[srs_idx] }
|
|
77
|
+
: srs),
|
|
78
|
+
prev_visibility: null,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Isolate series
|
|
82
|
+
const new_prev = prev_visibility
|
|
83
|
+
? prev_snapshot
|
|
84
|
+
: current.filter(Boolean).length > 1
|
|
85
|
+
? {
|
|
86
|
+
visibility: [...current],
|
|
87
|
+
source: series_source(series),
|
|
88
|
+
}
|
|
89
|
+
: null;
|
|
90
|
+
return {
|
|
91
|
+
series: series.map((srs, srs_idx) => {
|
|
92
|
+
const in_group = label ? srs.label === label : srs_idx === idx;
|
|
93
|
+
return (srs.visible ?? true) !== in_group ? { ...srs, visible: in_group } : srs;
|
|
94
|
+
}),
|
|
95
|
+
prev_visibility: new_prev,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Bundle the three legend visibility handlers (click toggle, group toggle,
|
|
99
|
+
// double-click isolate/restore) around a series accessor pair. Owns the
|
|
100
|
+
// isolate/restore snapshot internally so components don't each carry it.
|
|
101
|
+
export function create_legend_visibility(get_series, set_series) {
|
|
102
|
+
let prev_visibility = null;
|
|
103
|
+
return {
|
|
104
|
+
on_toggle: (series_idx) => set_series(toggle_series_visibility(get_series(), series_idx)),
|
|
105
|
+
on_group_toggle: (_group_name, series_indices) => set_series(toggle_group_visibility(get_series(), series_indices)),
|
|
106
|
+
on_double_click: (series_idx) => {
|
|
107
|
+
const result = handle_legend_double_click(get_series(), series_idx, prev_visibility);
|
|
108
|
+
set_series(result.series);
|
|
109
|
+
prev_visibility = result.prev_visibility;
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TweenOptions } from 'svelte/motion';
|
|
2
|
+
export declare const unique_id: (prefix?: string) => string;
|
|
3
|
+
export declare const LINE_TWEEN: {
|
|
4
|
+
max_series: number;
|
|
5
|
+
max_points: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const resolve_line_tween: (line_tween: TweenOptions<string> | undefined, load: {
|
|
8
|
+
series: number;
|
|
9
|
+
points: number;
|
|
10
|
+
}) => TweenOptions<string> | undefined;
|
|
11
|
+
export declare function calc_auto_range(values: number[]): [number, number];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Unique DOM id token (for SVG clipPath/gradient ids, control `for`/`id` prefixes). Returns a
|
|
2
|
+
// fresh id on every call; callers should store it in a const (e.g. `const id = unique_id('foo')`)
|
|
3
|
+
// so it stays stable across re-renders. Pass a prefix for a readable `prefix-<uuid>`, or omit it
|
|
4
|
+
// when the caller adds its own prefix.
|
|
5
|
+
export const unique_id = (prefix = ``) => prefix ? `${prefix}-${crypto.randomUUID()}` : crypto.randomUUID();
|
|
6
|
+
// Path-morph (interpolatePath) tweening scales poorly with many simultaneously morphing
|
|
7
|
+
// <path> elements (band structures with 100+ bands) or a single very long line. Disable
|
|
8
|
+
// the morph above these budgets unless the caller explicitly opts into a tween.
|
|
9
|
+
export const LINE_TWEEN = { max_series: 16, max_points: 8000 };
|
|
10
|
+
export const resolve_line_tween = (line_tween, load) => line_tween ??
|
|
11
|
+
(load.series > LINE_TWEEN.max_series || load.points > LINE_TWEEN.max_points
|
|
12
|
+
? { duration: 0 }
|
|
13
|
+
: undefined);
|
|
14
|
+
export function calc_auto_range(values) {
|
|
15
|
+
const finite_values = values.filter(Number.isFinite);
|
|
16
|
+
if (finite_values.length === 0)
|
|
17
|
+
return [0, 1];
|
|
18
|
+
let [min_value, max_value] = [finite_values[0], finite_values[0]];
|
|
19
|
+
for (const value of finite_values) {
|
|
20
|
+
if (value < min_value)
|
|
21
|
+
min_value = value;
|
|
22
|
+
else if (value > max_value)
|
|
23
|
+
max_value = value;
|
|
24
|
+
}
|
|
25
|
+
const padding = (max_value - min_value) * 0.05 || 0.5;
|
|
26
|
+
return [min_value - padding, max_value + padding];
|
|
27
|
+
}
|