matterviz 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EmptyState.svelte +10 -4
- package/dist/FilePicker.svelte +12 -14
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/app.css +53 -0
- package/dist/brillouin/BrillouinZone.svelte +132 -219
- package/dist/brillouin/BrillouinZone.svelte.d.ts +9 -20
- package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
- package/dist/brillouin/BrillouinZoneExportPane.svelte +47 -96
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +15 -42
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
- package/dist/brillouin/BrillouinZoneScene.svelte +63 -230
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +3 -23
- package/dist/brillouin/ReciprocalVectors.svelte +39 -0
- package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
- package/dist/brillouin/compute.d.ts +2 -0
- package/dist/brillouin/compute.js +80 -77
- package/dist/brillouin/geometry.d.ts +8 -0
- package/dist/brillouin/geometry.js +57 -0
- package/dist/brillouin/index.d.ts +2 -0
- package/dist/brillouin/index.js +2 -0
- package/dist/brillouin/types.d.ts +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +143 -246
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +652 -976
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
- package/dist/chempot-diagram/async-compute.svelte.js +1 -1
- package/dist/chempot-diagram/color.d.ts +3 -6
- package/dist/chempot-diagram/color.js +5 -5
- package/dist/chempot-diagram/compute.d.ts +3 -3
- package/dist/chempot-diagram/compute.js +3 -1
- package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
- package/dist/chempot-diagram/controls-state.svelte.js +42 -0
- package/dist/chempot-diagram/export.d.ts +47 -0
- package/dist/chempot-diagram/export.js +133 -0
- package/dist/chempot-diagram/index.d.ts +1 -0
- package/dist/chempot-diagram/index.js +1 -0
- package/dist/chempot-diagram/pointer.d.ts +0 -10
- package/dist/chempot-diagram/pointer.js +4 -4
- package/dist/chempot-diagram/types.d.ts +3 -3
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +21 -22
- package/dist/composition/BarChart.svelte +37 -31
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +7 -11
- package/dist/composition/Formula.svelte +18 -25
- package/dist/composition/FormulaFilter.svelte +96 -98
- package/dist/composition/PieChart.svelte +60 -46
- package/dist/composition/chem-sys.js +3 -2
- package/dist/composition/format.js +4 -3
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/parse.d.ts +2 -3
- package/dist/composition/parse.js +27 -28
- package/dist/constants.js +11 -9
- package/dist/controls.d.ts +1 -0
- package/dist/controls.js +0 -1
- package/dist/convex-hull/ConvexHull.svelte +20 -25
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
- package/dist/convex-hull/ConvexHull2D.svelte +176 -256
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +269 -804
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +236 -755
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +264 -0
- package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
- package/dist/convex-hull/ConvexHullControls.svelte +128 -49
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
- package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
- package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
- package/dist/convex-hull/ConvexHullStats.svelte +210 -351
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +16 -14
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
- package/dist/convex-hull/GasPressureControls.svelte +5 -12
- package/dist/convex-hull/StructurePopup.svelte +17 -21
- package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
- package/dist/convex-hull/TemperatureSlider.svelte +4 -10
- package/dist/convex-hull/barycentric-coords.d.ts +2 -4
- package/dist/convex-hull/barycentric-coords.js +6 -33
- package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
- package/dist/convex-hull/canvas-interactions.svelte.js +279 -0
- package/dist/convex-hull/helpers.d.ts +47 -17
- package/dist/convex-hull/helpers.js +186 -101
- package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
- package/dist/convex-hull/hull-state.svelte.js +124 -0
- package/dist/convex-hull/index.d.ts +9 -7
- package/dist/convex-hull/index.js +7 -2
- package/dist/convex-hull/thermodynamics.js +109 -937
- package/dist/convex-hull/types.d.ts +12 -4
- package/dist/convex-hull/types.js +12 -0
- package/dist/coordination/CoordinationBarPlot.svelte +41 -43
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/coordination/calc-coordination.d.ts +1 -1
- package/dist/coordination/calc-coordination.js +28 -25
- package/dist/element/BohrAtom.svelte +6 -8
- package/dist/element/ElementHeading.svelte +4 -1
- package/dist/element/ElementPhoto.svelte +11 -9
- package/dist/element/ElementStats.svelte +12 -10
- package/dist/element/ElementTile.svelte +24 -29
- package/dist/element/ElementTile.svelte.d.ts +1 -1
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +1 -2
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +1 -0
- package/dist/element/index.js +3 -0
- package/dist/feedback/DragOverlay.svelte +5 -3
- package/dist/feedback/DragOverlay.svelte.d.ts +2 -1
- package/dist/feedback/StatusMessage.svelte +20 -7
- package/dist/fermi-surface/FermiSlice.svelte +21 -18
- package/dist/fermi-surface/FermiSurface.svelte +78 -165
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +9 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceScene.svelte +93 -272
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +14 -13
- package/dist/fermi-surface/export.js +4 -15
- package/dist/fermi-surface/index.d.ts +0 -1
- package/dist/fermi-surface/index.js +0 -1
- package/dist/fermi-surface/parse.d.ts +1 -1
- package/dist/fermi-surface/parse.js +84 -97
- package/dist/fermi-surface/types.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +161 -185
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +6 -5
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +12 -9
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
- package/dist/heatmap-matrix/index.d.ts +8 -2
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +4 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/io/ExportPane.svelte +170 -0
- package/dist/io/ExportPane.svelte.d.ts +17 -0
- package/dist/io/decompress.d.ts +2 -1
- package/dist/io/decompress.js +22 -36
- package/dist/io/export.d.ts +9 -1
- package/dist/io/export.js +37 -29
- package/dist/io/fetch.d.ts +2 -4
- package/dist/io/fetch.js +0 -11
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +13 -0
- package/dist/io/index.d.ts +1 -0
- package/dist/io/index.js +3 -0
- package/dist/io/is-binary.d.ts +9 -0
- package/dist/io/is-binary.js +45 -1
- package/dist/io/types.d.ts +13 -0
- package/dist/io/url-drop.js +13 -25
- package/dist/isosurface/Isosurface.svelte +17 -23
- package/dist/isosurface/IsosurfaceControls.svelte +37 -42
- package/dist/isosurface/parse-vaspwave.d.ts +3 -0
- package/dist/isosurface/parse-vaspwave.js +138 -0
- package/dist/isosurface/parse.js +50 -48
- package/dist/labels.d.ts +6 -2
- package/dist/labels.js +44 -14
- package/dist/layout/FullscreenButton.svelte +34 -0
- package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
- package/dist/layout/FullscreenToggle.svelte +12 -12
- package/dist/layout/InfoCard.svelte +7 -18
- package/dist/layout/InfoTag.svelte +1 -3
- package/dist/layout/NumberRangeInput.svelte +46 -0
- package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
- package/dist/layout/PropertyFilter.svelte +2 -6
- package/dist/layout/SettingsSection.svelte +21 -17
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +115 -0
- package/dist/layout/ViewerChrome.svelte.d.ts +18 -0
- package/dist/layout/fullscreen.d.ts +4 -0
- package/dist/layout/fullscreen.js +3 -5
- package/dist/layout/fullscreen.svelte.d.ts +8 -0
- package/dist/layout/fullscreen.svelte.js +36 -0
- package/dist/layout/index.d.ts +4 -0
- package/dist/layout/index.js +4 -0
- package/dist/layout/json-tree/JsonNode.svelte +8 -11
- package/dist/layout/json-tree/JsonTree.svelte +53 -77
- package/dist/layout/json-tree/JsonValue.svelte +7 -15
- package/dist/layout/json-tree/utils.js +14 -23
- package/dist/math.d.ts +9 -3
- package/dist/math.js +37 -21
- package/dist/overlays/ContextMenu.svelte +4 -2
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +81 -26
- package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
- package/dist/overlays/GlassChip.svelte +30 -0
- package/dist/overlays/GlassChip.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +11 -23
- package/dist/overlays/index.d.ts +11 -0
- package/dist/overlays/index.js +26 -0
- package/dist/overlays/portal.d.ts +2 -0
- package/dist/overlays/portal.js +14 -0
- package/dist/periodic-table/PeriodicTable.svelte +115 -146
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
- package/dist/periodic-table/PeriodicTableControls.svelte +11 -63
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
- package/dist/phase-diagram/PhaseDiagramControls.svelte +73 -96
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +49 -134
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
- package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
- package/dist/phase-diagram/build-diagram.js +3 -3
- package/dist/phase-diagram/colors.js +1 -1
- package/dist/phase-diagram/diagram-input.d.ts +1 -2
- package/dist/phase-diagram/parse.d.ts +2 -1
- package/dist/phase-diagram/parse.js +15 -15
- package/dist/phase-diagram/svg-to-diagram.js +21 -15
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +494 -692
- package/dist/plot/bar/BarPlot.svelte.d.ts +9 -15
- package/dist/plot/bar/BarPlotControls.svelte +1 -3
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +5 -7
- package/dist/plot/bar/SpacegroupBarPlot.svelte +31 -37
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +361 -439
- package/dist/plot/box/BoxPlot.svelte.d.ts +6 -3
- package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
- package/dist/plot/box/Violin.svelte.d.ts +2 -1
- package/dist/plot/box/box-plot.d.ts +3 -2
- package/dist/plot/box/box-plot.js +6 -3
- package/dist/plot/box/kde.d.ts +2 -1
- package/dist/plot/box/kde.js +4 -4
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +5 -2
- package/dist/plot/core/axis-utils.d.ts +12 -7
- package/dist/plot/core/axis-utils.js +48 -48
- package/dist/plot/core/components/AxisLabel.svelte +82 -20
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
- package/dist/plot/core/components/ColorBar.svelte +106 -111
- package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
- package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
- package/dist/plot/core/components/FillArea.svelte +10 -17
- package/dist/plot/core/components/HierarchyControls.svelte +249 -0
- package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/core/components/Line.svelte +21 -11
- package/dist/plot/core/components/Line.svelte.d.ts +5 -2
- package/dist/plot/core/components/PlotAxis.svelte +42 -18
- package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
- package/dist/plot/core/components/PlotControls.svelte +65 -41
- package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/core/components/PlotLegend.svelte +31 -35
- package/dist/plot/core/components/PlotMarginals.svelte +616 -0
- package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotTooltip.svelte +1 -1
- package/dist/plot/core/components/PortalSelect.svelte +4 -8
- package/dist/plot/core/components/ReferenceLine.svelte +27 -24
- package/dist/plot/core/components/ReferenceLine3D.svelte +56 -59
- package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
- package/dist/plot/core/components/ReferencePlane.svelte +9 -10
- package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
- package/dist/plot/core/components/ZeroLines.svelte +4 -8
- package/dist/plot/core/components/ZoomRect.svelte +1 -2
- package/dist/plot/core/components/index.d.ts +1 -0
- package/dist/plot/core/components/index.js +1 -0
- package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
- package/dist/plot/core/data-cleaning-signal.js +467 -0
- package/dist/plot/core/data-cleaning.d.ts +2 -42
- package/dist/plot/core/data-cleaning.js +29 -476
- package/dist/plot/core/data-transform.js +9 -5
- package/dist/plot/core/fill-utils.d.ts +7 -4
- package/dist/plot/core/fill-utils.js +34 -9
- package/dist/plot/core/index.d.ts +1 -0
- package/dist/plot/core/index.js +1 -0
- package/dist/plot/core/interactions.d.ts +5 -1
- package/dist/plot/core/interactions.js +14 -2
- package/dist/plot/core/layout.d.ts +3 -1
- package/dist/plot/core/layout.js +22 -13
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
- package/dist/plot/core/pan-zoom.svelte.js +221 -0
- package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -0
- package/dist/plot/core/reference-line.d.ts +10 -10
- package/dist/plot/core/reference-line.js +7 -7
- package/dist/plot/core/scales.d.ts +40 -25
- package/dist/plot/core/scales.js +49 -21
- package/dist/plot/core/svg.d.ts +2 -1
- package/dist/plot/core/types/fills.d.ts +101 -0
- package/dist/plot/core/types/fills.js +15 -0
- package/dist/plot/core/types/plot-3d.d.ts +87 -0
- package/dist/plot/core/types/plot-3d.js +4 -0
- package/dist/plot/core/types/reference-lines.d.ts +140 -0
- package/dist/plot/core/types/reference-lines.js +9 -0
- package/dist/plot/core/types.d.ts +47 -331
- package/dist/plot/core/types.js +23 -20
- package/dist/plot/core/utils/hierarchy-chart.d.ts +51 -0
- package/dist/plot/core/utils/hierarchy-chart.js +179 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +99 -0
- package/dist/plot/core/utils/label-placement.d.ts +1 -1
- package/dist/plot/core/utils/label-placement.js +5 -5
- package/dist/plot/core/utils.d.ts +2 -1
- package/dist/plot/histogram/Histogram.svelte +373 -631
- package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
- package/dist/plot/histogram/HistogramControls.svelte +30 -28
- package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
- package/dist/plot/histogram/histogram.d.ts +31 -0
- package/dist/plot/histogram/histogram.js +70 -0
- package/dist/plot/histogram/index.d.ts +1 -0
- package/dist/plot/histogram/index.js +1 -0
- package/dist/plot/index.d.ts +1 -0
- package/dist/plot/index.js +1 -0
- package/dist/plot/sankey/Sankey.svelte +79 -73
- package/dist/plot/sankey/Sankey.svelte.d.ts +3 -3
- package/dist/plot/sankey/SankeyControls.svelte +22 -16
- package/dist/plot/sankey/sankey.js +3 -1
- package/dist/plot/scatter/BinnedScatterPlot.svelte +264 -112
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +11 -4
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +623 -821
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +9 -15
- package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/ScatterPoint.svelte +16 -9
- package/dist/plot/scatter/binned-scatter-types.d.ts +6 -12
- package/dist/plot/scatter/binned-scatter-types.js +6 -1
- package/dist/plot/scatter/index.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.js +8 -7
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +40 -60
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +17 -15
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +232 -234
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
- package/dist/plot/scatter-3d/Surface3D.svelte +9 -17
- package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
- package/dist/plot/sunburst/Sunburst.svelte +256 -338
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
- package/dist/plot/sunburst/index.d.ts +1 -1
- package/dist/plot/sunburst/index.js +2 -1
- package/dist/plot/sunburst/render.d.ts +2 -2
- package/dist/plot/sunburst/render.js +47 -22
- package/dist/plot/sunburst/sunburst.d.ts +5 -1
- package/dist/plot/sunburst/sunburst.js +14 -4
- package/dist/plot/treemap/Treemap.svelte +907 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
- package/dist/plot/treemap/index.d.ts +3 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/treemap.d.ts +26 -0
- package/dist/plot/treemap/treemap.js +99 -0
- package/dist/rdf/RdfPlot.svelte +22 -26
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +4 -8
- package/dist/sanitize.js +14 -3
- package/dist/scene/SceneCamera.svelte +62 -0
- package/dist/scene/SceneCamera.svelte.d.ts +19 -0
- package/dist/scene/bind-renderer.svelte.d.ts +2 -0
- package/dist/scene/bind-renderer.svelte.js +22 -0
- package/dist/scene/index.d.ts +4 -0
- package/dist/scene/index.js +5 -0
- package/dist/scene/props.js +52 -0
- package/dist/scene/types.d.ts +26 -0
- package/dist/scene/types.js +1 -0
- package/dist/settings.d.ts +33 -11
- package/dist/settings.js +136 -51
- package/dist/spectral/Bands.svelte +231 -237
- package/dist/spectral/Bands.svelte.d.ts +3 -2
- package/dist/spectral/BandsAndDos.svelte +29 -29
- package/dist/spectral/BrillouinBandsDos.svelte +21 -29
- package/dist/spectral/Dos.svelte +75 -77
- package/dist/spectral/Dos.svelte.d.ts +2 -1
- package/dist/spectral/helpers.d.ts +9 -9
- package/dist/spectral/helpers.js +66 -70
- package/dist/state.svelte.d.ts +0 -7
- package/dist/state.svelte.js +5 -24
- package/dist/structure/Arrow.svelte +6 -21
- package/dist/structure/ArrowInstances.svelte +160 -0
- package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
- package/dist/structure/AtomLegend.svelte +115 -75
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +16 -3
- package/dist/structure/CellSelect.svelte +22 -29
- package/dist/structure/CellSelect.svelte.d.ts +2 -1
- package/dist/structure/Cylinder.svelte +24 -40
- package/dist/structure/InstancedAtoms.svelte +114 -0
- package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
- package/dist/structure/Lattice.svelte +85 -149
- package/dist/structure/SiteLabels.svelte +122 -0
- package/dist/structure/SiteLabels.svelte.d.ts +18 -0
- package/dist/structure/Structure.svelte +725 -735
- package/dist/structure/Structure.svelte.d.ts +8 -16
- package/dist/structure/StructureCarousel.svelte +630 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +298 -325
- package/dist/structure/StructureControls.svelte.d.ts +5 -3
- package/dist/structure/StructureExportPane.svelte +62 -168
- package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
- package/dist/structure/StructureInfoPane.svelte +77 -69
- package/dist/structure/StructureInfoPane.svelte.d.ts +6 -6
- package/dist/structure/StructureScene.svelte +758 -600
- package/dist/structure/StructureScene.svelte.d.ts +24 -20
- package/dist/structure/StructureViewport.svelte +386 -0
- package/dist/structure/StructureViewport.svelte.d.ts +63 -0
- package/dist/structure/atom-label-placement.d.ts +18 -0
- package/dist/structure/atom-label-placement.js +115 -0
- package/dist/structure/atom-properties.d.ts +3 -1
- package/dist/structure/atom-properties.js +115 -54
- package/dist/structure/bond-order-perception.js +2 -4
- package/dist/structure/bonding.d.ts +12 -2
- package/dist/structure/bonding.js +172 -73
- package/dist/structure/edit-history.d.ts +6 -0
- package/dist/structure/edit-history.js +27 -0
- package/dist/structure/export.d.ts +25 -4
- package/dist/structure/export.js +103 -153
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +22 -0
- package/dist/structure/geometry.d.ts +9 -0
- package/dist/structure/geometry.js +27 -0
- package/dist/structure/index.d.ts +18 -1
- package/dist/structure/index.js +15 -2
- package/dist/structure/measure.d.ts +1 -1
- package/dist/structure/measure.js +6 -12
- package/dist/structure/parse.d.ts +5 -3
- package/dist/structure/parse.js +551 -567
- package/dist/structure/partial-occupancy.d.ts +0 -1
- package/dist/structure/partial-occupancy.js +5 -3
- package/dist/structure/pbc.d.ts +1 -1
- package/dist/structure/pbc.js +204 -51
- package/dist/structure/polyhedra.d.ts +40 -0
- package/dist/structure/polyhedra.js +587 -0
- package/dist/structure/site.d.ts +4 -0
- package/dist/structure/site.js +1 -0
- package/dist/structure/supercell.d.ts +1 -2
- package/dist/structure/supercell.js +10 -15
- package/dist/structure/validation.js +5 -6
- package/dist/symmetry/SymmetryElementControls.svelte +69 -0
- package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
- package/dist/symmetry/SymmetryElements.svelte +350 -0
- package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
- package/dist/symmetry/SymmetryStats.svelte +142 -49
- package/dist/symmetry/WyckoffTable.svelte +58 -16
- package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
- package/dist/symmetry/cell-transform.js +8 -14
- package/dist/symmetry/index.d.ts +15 -4
- package/dist/symmetry/index.js +308 -81
- package/dist/symmetry/spacegroups.d.ts +5 -1
- package/dist/symmetry/spacegroups.js +18 -3
- package/dist/symmetry/symmetry-elements.d.ts +33 -0
- package/dist/symmetry/symmetry-elements.js +521 -0
- package/dist/symmetry/wyckoff-db.d.ts +9 -0
- package/dist/symmetry/wyckoff-db.js +87 -0
- package/dist/table/HeatmapTable.svelte +1104 -378
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +5 -12
- package/dist/table/index.d.ts +21 -6
- package/dist/table/index.js +34 -21
- package/dist/theme/ThemeControl.svelte +16 -8
- package/dist/theme/index.d.ts +1 -5
- package/dist/theme/index.js +4 -10
- package/dist/theme/themes.mjs +14 -7
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +2 -5
- package/dist/trajectory/Trajectory.svelte +556 -352
- package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
- package/dist/trajectory/TrajectoryError.svelte +11 -8
- package/dist/trajectory/TrajectoryExportPane.svelte +28 -54
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
- package/dist/trajectory/TrajectoryInfoPane.svelte +88 -99
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
- package/dist/trajectory/constants.js +6 -2
- package/dist/trajectory/extract.js +73 -71
- package/dist/trajectory/format-detect.d.ts +0 -1
- package/dist/trajectory/format-detect.js +13 -17
- package/dist/trajectory/frame-reader.d.ts +2 -1
- package/dist/trajectory/frame-reader.js +74 -136
- package/dist/trajectory/helpers.d.ts +12 -2
- package/dist/trajectory/helpers.js +68 -37
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +3 -0
- package/dist/trajectory/parse/ase.d.ts +9 -1
- package/dist/trajectory/parse/ase.js +47 -32
- package/dist/trajectory/parse/diagnostics.d.ts +3 -0
- package/dist/trajectory/parse/diagnostics.js +14 -0
- package/dist/trajectory/parse/h5-utils.d.ts +13 -0
- package/dist/trajectory/parse/h5-utils.js +109 -0
- package/dist/trajectory/parse/hdf5.d.ts +1 -1
- package/dist/trajectory/parse/hdf5.js +116 -106
- package/dist/trajectory/parse/index.d.ts +3 -4
- package/dist/trajectory/parse/index.js +68 -119
- package/dist/trajectory/parse/lammps.d.ts +0 -2
- package/dist/trajectory/parse/lammps.js +14 -16
- package/dist/trajectory/parse/pymatgen.d.ts +2 -0
- package/dist/trajectory/parse/pymatgen.js +74 -0
- package/dist/trajectory/parse/vasp.js +13 -9
- package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
- package/dist/trajectory/parse/vaspout-electronic.js +207 -0
- package/dist/trajectory/parse/vaspout-h5.d.ts +5 -0
- package/dist/trajectory/parse/vaspout-h5.js +284 -0
- package/dist/trajectory/parse/xyz.d.ts +9 -21
- package/dist/trajectory/parse/xyz.js +38 -39
- package/dist/trajectory/plotting.d.ts +8 -10
- package/dist/trajectory/plotting.js +102 -127
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +8 -1
- package/dist/xrd/XrdPlot.svelte +56 -85
- package/dist/xrd/broadening.d.ts +2 -1
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +8 -15
- package/dist/xrd/index.d.ts +2 -2
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +56 -73
- package/package.json +77 -36
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/element/data.json +0 -11864
- package/dist/fermi-surface/marching-cubes.d.ts +0 -2
- package/dist/fermi-surface/marching-cubes.js +0 -2
- package/dist/plot/core/hover-lock.svelte.d.ts +0 -14
- package/dist/plot/core/hover-lock.svelte.js +0 -45
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
- package/dist/structure/label-placement.d.ts +0 -14
- package/dist/structure/label-placement.js +0 -72
package/dist/overlays/index.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import type { ComponentProps } from 'svelte';
|
|
2
|
+
import { SvelteSet } from 'svelte/reactivity';
|
|
3
|
+
import type DraggablePane from './DraggablePane.svelte';
|
|
1
4
|
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
2
5
|
export { default as DraggablePane } from './DraggablePane.svelte';
|
|
3
6
|
export { default as DragControlTab } from './DragControlTab.svelte';
|
|
7
|
+
export { default as GlassChip } from './GlassChip.svelte';
|
|
8
|
+
export * from './portal';
|
|
9
|
+
export type PaneToggleProps = ComponentProps<typeof DraggablePane>[`toggle_props`];
|
|
10
|
+
export type PaneProps = ComponentProps<typeof DraggablePane>[`pane_props`];
|
|
11
|
+
export declare function create_clipboard_feedback(duration?: number): {
|
|
12
|
+
copied: SvelteSet<string>;
|
|
13
|
+
copy: (text: string, key: string) => Promise<void>;
|
|
14
|
+
};
|
package/dist/overlays/index.js
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
import { SvelteMap, SvelteSet } from 'svelte/reactivity';
|
|
1
2
|
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
2
3
|
export { default as DraggablePane } from './DraggablePane.svelte';
|
|
3
4
|
export { default as DragControlTab } from './DragControlTab.svelte';
|
|
5
|
+
export { default as GlassChip } from './GlassChip.svelte';
|
|
6
|
+
export * from './portal';
|
|
7
|
+
// Reactive clipboard-copy feedback shared by info panes. `copy(text, key)` writes
|
|
8
|
+
// `text` to the clipboard and flags `key` as recently-copied in the returned reactive
|
|
9
|
+
// `copied` set for `duration` ms, so UIs can show a transient "copied" checkmark.
|
|
10
|
+
export function create_clipboard_feedback(duration = 1000) {
|
|
11
|
+
const copied = new SvelteSet();
|
|
12
|
+
const timers = new SvelteMap();
|
|
13
|
+
const copy = async (text, key) => {
|
|
14
|
+
try {
|
|
15
|
+
await navigator.clipboard.writeText(text);
|
|
16
|
+
copied.add(key);
|
|
17
|
+
// reset any in-flight timer so a re-copy gets the full feedback duration
|
|
18
|
+
clearTimeout(timers.get(key));
|
|
19
|
+
timers.set(key, setTimeout(() => {
|
|
20
|
+
copied.delete(key);
|
|
21
|
+
timers.delete(key);
|
|
22
|
+
}, duration));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error(`Failed to copy to clipboard:`, error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return { copied, copy };
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Attachment that moves its element into `target` (e.g. a host panel's toolbar),
|
|
2
|
+
// so components can offer optional external placement of their chrome (search/
|
|
3
|
+
// export/settings buttons etc.) without duplicating markup: pass nothing and the
|
|
4
|
+
// element renders inline where declared; pass a target and it teleports there.
|
|
5
|
+
// A comment anchor marks the original position so the element is restored when
|
|
6
|
+
// the target changes or unmounts, keeping Svelte's teardown sound.
|
|
7
|
+
export const portal = (target) => (element) => {
|
|
8
|
+
if (!target)
|
|
9
|
+
return undefined;
|
|
10
|
+
const anchor = document.createComment(`portal`);
|
|
11
|
+
element.before(anchor);
|
|
12
|
+
target.append(element);
|
|
13
|
+
return () => anchor.replaceWith(element);
|
|
14
|
+
};
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { is_color } from '../colors'
|
|
2
|
+
import { get_d3_interpolator, is_color } from '../colors'
|
|
3
3
|
import type { ChemicalElement, ElementCategory, ElementSymbol } from '../element'
|
|
4
4
|
import { element_data, ElementPhoto, ElementTile } from '../element'
|
|
5
5
|
import { ELEM_SYMBOLS } from '../labels'
|
|
6
6
|
import type { Point2D, Vec2 } from '../math'
|
|
7
7
|
import { ColorBar } from '../plot'
|
|
8
8
|
import { colors } from '../state.svelte'
|
|
9
|
-
import * as d3_sc from 'd3-scale-chromatic'
|
|
10
9
|
import type { ComponentProps, Snippet } from 'svelte'
|
|
11
10
|
import type { HTMLAttributes } from 'svelte/elements'
|
|
12
11
|
import type { D3InterpolateName } from '../colors'
|
|
12
|
+
import type { MissingCellStyle } from '../heatmap-matrix'
|
|
13
13
|
import type { ScaleContext } from './index'
|
|
14
14
|
import { TableInset } from './index'
|
|
15
15
|
|
|
16
|
+
// a tile's heat value: scalar or 1-4-segment array of numbers/colors
|
|
17
|
+
type HeatValue = number | number[] | string | string[]
|
|
18
|
+
|
|
16
19
|
const default_f_block_inset_tiles = [
|
|
17
20
|
{ name: `Lanthanides`, symbol: `La-Lu`, number: `57-71`, category: `lanthanide` },
|
|
18
21
|
{ name: `Actinides`, symbol: `Ac-Lr`, number: `89-103`, category: `actinide` },
|
|
@@ -37,7 +40,7 @@
|
|
|
37
40
|
color_scale_range = [null, null],
|
|
38
41
|
color_overrides = {},
|
|
39
42
|
labels = {},
|
|
40
|
-
|
|
43
|
+
missing = {},
|
|
41
44
|
split_layout = undefined,
|
|
42
45
|
show_color_bar = true,
|
|
43
46
|
color_bar_props = {},
|
|
@@ -51,12 +54,10 @@
|
|
|
51
54
|
tile_props?: Partial<ComponentProps<typeof ElementTile>>
|
|
52
55
|
show_photo?: boolean
|
|
53
56
|
disabled?: boolean // disable hover and click events from updating active_element
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
heatmap_values?:
|
|
58
|
-
| Partial<Record<ElementSymbol, number | number[] | string | string[]>>
|
|
59
|
-
| (number | number[] | string | string[])[]
|
|
57
|
+
// array (positional by atomic number, can be partial) or object keyed by element symbol.
|
|
58
|
+
// each value is a single number/color or an array of 1-4 numbers/colors for multi-segment
|
|
59
|
+
// tiles. null/omitted -> missing (uses the `missing` fallback); 0 is a real value
|
|
60
|
+
heatmap_values?: Partial<Record<ElementSymbol, HeatValue | null>> | (HeatValue | null)[]
|
|
60
61
|
// links is either string with element property (name, symbol, number, ...) to use as link,
|
|
61
62
|
// or object with mapping element symbols to link
|
|
62
63
|
links?: keyof ChemicalElement | Record<ElementSymbol, string> | null
|
|
@@ -79,9 +80,7 @@
|
|
|
79
80
|
color_scale_range?: [number | null, number | null]
|
|
80
81
|
color_overrides?: Partial<Record<ElementSymbol, string>>
|
|
81
82
|
labels?: Partial<Record<ElementSymbol, string>>
|
|
82
|
-
//
|
|
83
|
-
// "element-category" falls back to element category default color
|
|
84
|
-
missing_color?: string
|
|
83
|
+
missing?: MissingCellStyle // styling for tiles with no heatmap value
|
|
85
84
|
// control the layout of multi-value splits for all tiles
|
|
86
85
|
split_layout?: `diagonal` | `horizontal` | `vertical` | `triangular` | `quadrant`
|
|
87
86
|
// automatically show a color bar when heatmap_values is provided (default: true)
|
|
@@ -92,16 +91,16 @@
|
|
|
92
91
|
bottom_left_inset?: Snippet<[{ active_element: ChemicalElement | null }]>
|
|
93
92
|
tooltip?:
|
|
94
93
|
| Snippet<
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
94
|
+
[
|
|
95
|
+
{
|
|
96
|
+
element: ChemicalElement
|
|
97
|
+
value: HeatValue | null
|
|
98
|
+
active: boolean
|
|
99
|
+
bg_color: string | null
|
|
100
|
+
scale_context: ScaleContext
|
|
101
|
+
},
|
|
102
|
+
]
|
|
103
|
+
>
|
|
105
104
|
| boolean
|
|
106
105
|
children?: Snippet
|
|
107
106
|
onenter?: (element: ChemicalElement) => void
|
|
@@ -115,7 +114,8 @@
|
|
|
115
114
|
`each element possibly omitting elements at the end, got ${heatmap_values.length}`,
|
|
116
115
|
)
|
|
117
116
|
return []
|
|
118
|
-
}
|
|
117
|
+
}
|
|
118
|
+
return heatmap_values
|
|
119
119
|
} else if (typeof heatmap_values === `object`) {
|
|
120
120
|
const bad_keys = Object.keys(heatmap_values).filter(
|
|
121
121
|
(key) => !ELEM_SYMBOLS.includes(key as ElementSymbol),
|
|
@@ -126,7 +126,9 @@
|
|
|
126
126
|
)
|
|
127
127
|
return []
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
// keep absent elements as null (distinct from a real 0 value) so they map to the
|
|
130
|
+
// missing fallback while explicit 0 maps through the color scale
|
|
131
|
+
return ELEM_SYMBOLS.map((symbol) => heatmap_values[symbol] ?? null)
|
|
130
132
|
}
|
|
131
133
|
return []
|
|
132
134
|
})
|
|
@@ -159,14 +161,11 @@
|
|
|
159
161
|
ArrowDown: row === 6 && in_f_block ? 9 : row === 7 && in_f_block ? 10 : row + 1,
|
|
160
162
|
}
|
|
161
163
|
const target_row = row_map[event.key] ?? row
|
|
162
|
-
const target_col =
|
|
163
|
-
? col - 1
|
|
164
|
-
: event.key === `ArrowRight`
|
|
165
|
-
? col + 1
|
|
166
|
-
: col
|
|
164
|
+
const target_col =
|
|
165
|
+
event.key === `ArrowLeft` ? col - 1 : event.key === `ArrowRight` ? col + 1 : col
|
|
167
166
|
active_element =
|
|
168
167
|
element_data.find((el) => el.column === target_col && el.row === target_row) ??
|
|
169
|
-
|
|
168
|
+
active_element
|
|
170
169
|
}
|
|
171
170
|
|
|
172
171
|
function handle_tooltip_enter(element: ChemicalElement, event: MouseEvent) {
|
|
@@ -186,125 +185,95 @@
|
|
|
186
185
|
}
|
|
187
186
|
|
|
188
187
|
let color_scale_fn = $derived(
|
|
189
|
-
typeof color_scale === `string` ?
|
|
188
|
+
typeof color_scale === `string` ? get_d3_interpolator(color_scale) : color_scale,
|
|
190
189
|
)
|
|
191
190
|
|
|
191
|
+
// finite numeric heat value (numeric strings coerced; colors, null/false and non-finite
|
|
192
|
+
// excluded so they can't poison the color-scale domain). null => not a mappable number
|
|
193
|
+
const to_heat_num = (value: number | string | false | null | undefined): number | null => {
|
|
194
|
+
if (value == null || value === false || is_color(value)) return null
|
|
195
|
+
const num = Number(value)
|
|
196
|
+
return Number.isFinite(num) ? num : null
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
let heat_nums = $derived(
|
|
200
|
+
heat_values
|
|
201
|
+
.flat()
|
|
202
|
+
.map(to_heat_num)
|
|
203
|
+
.filter((num): num is number => num !== null),
|
|
204
|
+
)
|
|
205
|
+
// values usable by the active scale (log excludes non-positive)
|
|
206
|
+
let usable_heat_nums = $derived(log ? heat_nums.filter((num) => num > 0) : heat_nums)
|
|
207
|
+
|
|
192
208
|
let cs_min = $derived(
|
|
193
|
-
color_scale_range[0] ??
|
|
194
|
-
(heat_values.length > 0
|
|
195
|
-
? Math.min(
|
|
196
|
-
...heat_values.flat().filter((v): v is number => typeof v === `number`),
|
|
197
|
-
)
|
|
198
|
-
: 0),
|
|
209
|
+
color_scale_range[0] ?? (heat_nums.length > 0 ? Math.min(...heat_nums) : 0),
|
|
199
210
|
)
|
|
200
211
|
let cs_max = $derived(
|
|
201
|
-
color_scale_range[1] ??
|
|
202
|
-
(heat_values.length > 0
|
|
203
|
-
? Math.max(
|
|
204
|
-
...heat_values.flat().filter((v): v is number => typeof v === `number`),
|
|
205
|
-
)
|
|
206
|
-
: 1),
|
|
212
|
+
color_scale_range[1] ?? (heat_nums.length > 0 ? Math.max(...heat_nums) : 1),
|
|
207
213
|
)
|
|
208
214
|
|
|
209
215
|
// smallest positive bound for log color mapping (matches the auto ColorBar's log scale)
|
|
210
216
|
let cs_min_pos = $derived.by(() => {
|
|
211
217
|
if (cs_min > 0) return cs_min
|
|
212
|
-
const pos =
|
|
218
|
+
const pos = heat_nums.filter((num) => num > 0)
|
|
213
219
|
return pos.length > 0 ? Math.min(...pos) : cs_max
|
|
214
220
|
})
|
|
215
221
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
// If it's already a color string, return it directly
|
|
227
|
-
if (is_color(value)) return value as string
|
|
228
|
-
|
|
229
|
-
// Return missing color for zero/invalid values or when no heatmap data
|
|
230
|
-
if (
|
|
231
|
-
!value ||
|
|
232
|
-
value === 0 ||
|
|
233
|
-
(log && value <= 0) ||
|
|
234
|
-
!heat_values?.length ||
|
|
235
|
-
!color_scale_fn
|
|
236
|
-
) {
|
|
237
|
-
// Use missing color for zero/missing values or when no heatmap data
|
|
238
|
-
if (missing_color === `element-category` && element) {
|
|
239
|
-
return colors.category[element.category] || `#cccccc`
|
|
240
|
-
}
|
|
241
|
-
return missing_color
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// map value to [0, 1] range
|
|
245
|
-
const span = cs_max - cs_min
|
|
246
|
-
if (span === 0) return color_scale_fn?.(0.5) // midpoint when all values equal
|
|
222
|
+
// whether a value maps to a heatmap color (false => use the missing fallback). 0 is a
|
|
223
|
+
// real value; only absent/null/non-finite (and <=0 in log mode) count as missing. a
|
|
224
|
+
// multi-value tile is missing only when every segment is missing
|
|
225
|
+
const value_is_missing = (value: HeatValue | false | null): boolean => {
|
|
226
|
+
if (Array.isArray(value)) return value.every(value_is_missing) // [] -> true (missing)
|
|
227
|
+
if (is_color(value)) return false // explicit colors are real values, not missing
|
|
228
|
+
const num = to_heat_num(value)
|
|
229
|
+
return num === null || (log && num <= 0)
|
|
230
|
+
}
|
|
247
231
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
232
|
+
const bg_color = (
|
|
233
|
+
value: HeatValue | false | null,
|
|
234
|
+
element?: ChemicalElement,
|
|
235
|
+
): string | null => {
|
|
236
|
+
if (Array.isArray(value)) return bg_color(value[0], element) // arrays: use first value
|
|
237
|
+
if (is_color(value)) return value // already a color string
|
|
238
|
+
|
|
239
|
+
if (!heat_values.length || !color_scale_fn || value_is_missing(value)) {
|
|
240
|
+
const category_color = (element && colors.category[element.category]) || `#cccccc`
|
|
241
|
+
if (missing.color === `element-category`) return category_color
|
|
242
|
+
// default: category colors for a plain table, gray for missing heatmap data
|
|
243
|
+
return missing.color || (heat_values.length ? `#666` : category_color)
|
|
244
|
+
}
|
|
257
245
|
|
|
258
|
-
|
|
259
|
-
(
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
)
|
|
263
|
-
|
|
246
|
+
// map value to [0, 1] range
|
|
247
|
+
const num = Number(value)
|
|
248
|
+
const span = cs_max - cs_min
|
|
249
|
+
if (span === 0) return color_scale_fn(0.5) // midpoint when all values equal
|
|
250
|
+
if (log) {
|
|
251
|
+
const log_span = Math.log(cs_max) - Math.log(cs_min_pos)
|
|
252
|
+
if (log_span === 0) return color_scale_fn(0.5)
|
|
253
|
+
return color_scale_fn((Math.log(num) - Math.log(cs_min_pos)) / log_span)
|
|
254
|
+
}
|
|
255
|
+
return color_scale_fn((num - cs_min) / span)
|
|
256
|
+
}
|
|
264
257
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
// Otherwise, map it through the color scale
|
|
269
|
-
return bg_color(val as number, element)
|
|
270
|
-
})
|
|
271
|
-
},
|
|
272
|
-
)
|
|
258
|
+
// per-segment colors for multi-value tiles (bg_color already handles color strings)
|
|
259
|
+
const bg_colors = (value: HeatValue | false, element?: ChemicalElement) =>
|
|
260
|
+
Array.isArray(value) ? value.map((val) => bg_color(val, element)) : []
|
|
273
261
|
|
|
274
262
|
// Determine whether to automatically show the color bar
|
|
275
|
-
let should_show_color_bar = $derived
|
|
276
|
-
if (!show_color_bar || inset || heat_values.length === 0) return false
|
|
277
|
-
|
|
278
|
-
const num_vals = heat_values
|
|
279
|
-
.flat()
|
|
280
|
-
.filter((val): val is number => typeof val === `number`)
|
|
281
|
-
|
|
282
|
-
const usable_values = log ? num_vals.filter((val) => val > 0) : num_vals
|
|
283
|
-
|
|
284
|
-
return usable_values.length > 0
|
|
285
|
-
})
|
|
263
|
+
let should_show_color_bar = $derived(show_color_bar && !inset && usable_heat_nums.length > 0)
|
|
286
264
|
|
|
287
265
|
// Calculate heat range for color bar
|
|
288
266
|
let heat_range = $derived.by((): Vec2 => {
|
|
289
267
|
if (!should_show_color_bar) return [0, 1]
|
|
290
|
-
|
|
291
|
-
const
|
|
292
|
-
.flat()
|
|
293
|
-
.filter((val): val is number => typeof val === `number`)
|
|
294
|
-
const usable_values = log ? numeric_values.filter((val) => val > 0) : numeric_values
|
|
295
|
-
|
|
296
|
-
if (usable_values.length === 0) return [0, 1]
|
|
297
|
-
|
|
298
|
-
const min = color_scale_range[0] ?? Math.min(...usable_values)
|
|
299
|
-
const max = color_scale_range[1] ?? Math.max(...usable_values)
|
|
300
|
-
|
|
268
|
+
const min = color_scale_range[0] ?? Math.min(...usable_heat_nums)
|
|
269
|
+
const max = color_scale_range[1] ?? Math.max(...usable_heat_nums)
|
|
301
270
|
return [min, max]
|
|
302
271
|
})
|
|
303
272
|
</script>
|
|
304
273
|
|
|
305
274
|
<svelte:window bind:innerWidth={window_width} onkeydown={handle_key} />
|
|
306
275
|
|
|
307
|
-
<div {...rest} class=
|
|
276
|
+
<div {...rest} class={[`periodic-table`, rest.class]}>
|
|
308
277
|
<div class="ptable-grid" style:gap>
|
|
309
278
|
{#if should_show_color_bar}
|
|
310
279
|
<TableInset class="auto-colorbar-inset">
|
|
@@ -325,28 +294,32 @@
|
|
|
325
294
|
{#each element_data as element (element.number)}
|
|
326
295
|
{@const { column, row, category, name, symbol } = element}
|
|
327
296
|
{@const value = heat_values[element.number - 1]}
|
|
297
|
+
{@const override = color_overrides[symbol]}
|
|
298
|
+
{@const tile_missing = heat_values.length > 0 && !override && value_is_missing(value)}
|
|
328
299
|
{@const is_active_elem = active_elements?.some((active_elem) =>
|
|
329
300
|
typeof active_elem === `string`
|
|
330
301
|
? active_elem === symbol
|
|
331
|
-
: active_elem?.symbol === symbol
|
|
302
|
+
: active_elem?.symbol === symbol,
|
|
332
303
|
)}
|
|
333
|
-
{@const active =
|
|
334
|
-
active_element?.name === name || is_active_elem}
|
|
335
|
-
{@const style = `grid-column: ${column}; grid-row: ${row}
|
|
304
|
+
{@const active =
|
|
305
|
+
active_category === category || active_element?.name === name || is_active_elem}
|
|
306
|
+
{@const style = `grid-column: ${column}; grid-row: ${row};${
|
|
307
|
+
tile_props?.style ? ` ${tile_props.style}` : ``
|
|
308
|
+
}${tile_missing && missing.style ? ` ${missing.style}` : ``}`}
|
|
336
309
|
<ElementTile
|
|
337
310
|
{element}
|
|
338
311
|
href={links
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
{
|
|
344
|
-
{value}
|
|
345
|
-
|
|
346
|
-
bg_colors={Array.isArray(value) ? bg_colors(value, element) : []}
|
|
312
|
+
? typeof links == `string`
|
|
313
|
+
? `/${element[links]}`.toLowerCase()
|
|
314
|
+
: links[symbol]
|
|
315
|
+
: undefined}
|
|
316
|
+
value={tile_missing ? undefined : (value ?? undefined)}
|
|
317
|
+
bg_color={override ?? bg_color(value, element) ?? undefined}
|
|
318
|
+
bg_colors={!override && Array.isArray(value) ? bg_colors(value, element) : []}
|
|
347
319
|
{active}
|
|
348
|
-
label={labels[symbol]}
|
|
320
|
+
label={labels[symbol] ?? (tile_missing ? missing.label : undefined)}
|
|
349
321
|
{...tile_props}
|
|
322
|
+
{style}
|
|
350
323
|
onmouseenter={(event: MouseEvent) => {
|
|
351
324
|
set_active_element(element)()
|
|
352
325
|
handle_tooltip_enter(element, event)
|
|
@@ -389,17 +362,16 @@
|
|
|
389
362
|
{#if tooltip_visible && tooltip_element}
|
|
390
363
|
{@const el = tooltip_element as ChemicalElement}
|
|
391
364
|
{@const style = `left: ${tooltip_pos.x}px; top: ${tooltip_pos.y}px;`}
|
|
392
|
-
{@const tooltip_value = heat_values[el.number - 1]
|
|
365
|
+
{@const tooltip_value = heat_values[el.number - 1]}
|
|
393
366
|
{#if typeof tooltip == `function`}
|
|
394
367
|
<div class="tooltip" {style}>
|
|
395
368
|
{@render tooltip({
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
})}
|
|
369
|
+
element: el,
|
|
370
|
+
value: tooltip_value ?? null,
|
|
371
|
+
active: active_category === el.category || active_element?.name === el.name,
|
|
372
|
+
bg_color: color_overrides[el.symbol] ?? bg_color(tooltip_value, el),
|
|
373
|
+
scale_context: { min: log ? cs_min_pos : cs_min, max: cs_max, color_scale },
|
|
374
|
+
})}
|
|
403
375
|
</div>
|
|
404
376
|
{:else if tooltip !== false}
|
|
405
377
|
<div class="tooltip" {style}>
|
|
@@ -447,10 +419,7 @@
|
|
|
447
419
|
.tooltip {
|
|
448
420
|
position: absolute;
|
|
449
421
|
transform: translate(-50%, -10%);
|
|
450
|
-
background: var(
|
|
451
|
-
--tooltip-bg,
|
|
452
|
-
light-dark(rgba(255, 255, 255, 0.95), rgba(0, 0, 0, 0.85))
|
|
453
|
-
);
|
|
422
|
+
background: var(--tooltip-bg, light-dark(rgba(255, 255, 255, 0.95), rgba(0, 0, 0, 0.85)));
|
|
454
423
|
color: var(--tooltip-color, light-dark(#222, #eee));
|
|
455
424
|
padding: var(--tooltip-padding, 4px 6px);
|
|
456
425
|
border-radius: var(--tooltip-border-radius, var(--border-radius, 3pt));
|
|
@@ -4,12 +4,14 @@ import { ColorBar } from '../plot';
|
|
|
4
4
|
import type { ComponentProps, Snippet } from 'svelte';
|
|
5
5
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
6
6
|
import type { D3InterpolateName } from '../colors';
|
|
7
|
+
import type { MissingCellStyle } from '../heatmap-matrix';
|
|
7
8
|
import type { ScaleContext } from './index';
|
|
9
|
+
type HeatValue = number | number[] | string | string[];
|
|
8
10
|
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
9
11
|
tile_props?: Partial<ComponentProps<typeof ElementTile>>;
|
|
10
12
|
show_photo?: boolean;
|
|
11
13
|
disabled?: boolean;
|
|
12
|
-
heatmap_values?: Partial<Record<ElementSymbol,
|
|
14
|
+
heatmap_values?: Partial<Record<ElementSymbol, HeatValue | null>> | (HeatValue | null)[];
|
|
13
15
|
links?: keyof ChemicalElement | Record<ElementSymbol, string> | null;
|
|
14
16
|
log?: boolean;
|
|
15
17
|
color_scale?: D3InterpolateName | ((num: number) => string);
|
|
@@ -28,7 +30,7 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
28
30
|
color_scale_range?: [number | null, number | null];
|
|
29
31
|
color_overrides?: Partial<Record<ElementSymbol, string>>;
|
|
30
32
|
labels?: Partial<Record<ElementSymbol, string>>;
|
|
31
|
-
|
|
33
|
+
missing?: MissingCellStyle;
|
|
32
34
|
split_layout?: `diagonal` | `horizontal` | `vertical` | `triangular` | `quadrant`;
|
|
33
35
|
show_color_bar?: boolean;
|
|
34
36
|
color_bar_props?: Partial<ComponentProps<typeof ColorBar>>;
|
|
@@ -41,7 +43,7 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
41
43
|
tooltip?: Snippet<[
|
|
42
44
|
{
|
|
43
45
|
element: ChemicalElement;
|
|
44
|
-
value:
|
|
46
|
+
value: HeatValue | null;
|
|
45
47
|
active: boolean;
|
|
46
48
|
bg_color: string | null;
|
|
47
49
|
scale_context: ScaleContext;
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
}
|
|
206
206
|
</script>
|
|
207
207
|
|
|
208
|
-
<div {...rest} class=
|
|
208
|
+
<div {...rest} class={[`controls-grid`, rest.class]}>
|
|
209
209
|
<section class="category-colors">
|
|
210
210
|
<h3 id="element-category-colors-reset" style="grid-column: span 2">
|
|
211
211
|
Element Category Colors
|
|
@@ -220,10 +220,7 @@
|
|
|
220
220
|
onmouseleave={() => (selected.category = null)}
|
|
221
221
|
onblur={() => (selected.category = null)}
|
|
222
222
|
>
|
|
223
|
-
<input
|
|
224
|
-
type="color"
|
|
225
|
-
bind:value={colors.category[category]}
|
|
226
|
-
/>
|
|
223
|
+
<input type="color" bind:value={colors.category[category]} />
|
|
227
224
|
<span>{category}</span>
|
|
228
225
|
{#if colors.category[category] !== DEFAULT_CATEGORY_COLORS[category]}
|
|
229
226
|
<button
|
|
@@ -262,32 +259,14 @@
|
|
|
262
259
|
|
|
263
260
|
<label>
|
|
264
261
|
<span>Inner transition offset</span>
|
|
265
|
-
<input
|
|
266
|
-
|
|
267
|
-
min="0.1"
|
|
268
|
-
max="2"
|
|
269
|
-
step="0.1"
|
|
270
|
-
bind:value={inner_transition_offset}
|
|
271
|
-
/>
|
|
272
|
-
<input
|
|
273
|
-
type="number"
|
|
274
|
-
min="0.1"
|
|
275
|
-
max="2"
|
|
276
|
-
step="0.1"
|
|
277
|
-
bind:value={inner_transition_offset}
|
|
278
|
-
/>
|
|
262
|
+
<input type="range" min="0.1" max="2" step="0.1" bind:value={inner_transition_offset} />
|
|
263
|
+
<input type="number" min="0.1" max="2" step="0.1" bind:value={inner_transition_offset} />
|
|
279
264
|
<button onclick={() => reset_property(`inner_transition_offset`)}>reset</button>
|
|
280
265
|
</label>
|
|
281
266
|
|
|
282
267
|
<label>
|
|
283
268
|
<span>Transition duration (s)</span>
|
|
284
|
-
<input
|
|
285
|
-
type="range"
|
|
286
|
-
min="0.1"
|
|
287
|
-
max="2"
|
|
288
|
-
step="0.1"
|
|
289
|
-
bind:value={tile_transition_duration}
|
|
290
|
-
/>
|
|
269
|
+
<input type="range" min="0.1" max="2" step="0.1" bind:value={tile_transition_duration} />
|
|
291
270
|
<input
|
|
292
271
|
type="number"
|
|
293
272
|
min="0.1"
|
|
@@ -350,39 +329,15 @@
|
|
|
350
329
|
|
|
351
330
|
<label>
|
|
352
331
|
<span>Symbol weight</span>
|
|
353
|
-
<input
|
|
354
|
-
|
|
355
|
-
min="100"
|
|
356
|
-
max="900"
|
|
357
|
-
step="100"
|
|
358
|
-
bind:value={symbol_font_weight}
|
|
359
|
-
/>
|
|
360
|
-
<input
|
|
361
|
-
type="number"
|
|
362
|
-
min="100"
|
|
363
|
-
max="900"
|
|
364
|
-
step="100"
|
|
365
|
-
bind:value={symbol_font_weight}
|
|
366
|
-
/>
|
|
332
|
+
<input type="range" min="100" max="900" step="100" bind:value={symbol_font_weight} />
|
|
333
|
+
<input type="number" min="100" max="900" step="100" bind:value={symbol_font_weight} />
|
|
367
334
|
<button onclick={() => reset_property(`symbol_font_weight`)}>reset</button>
|
|
368
335
|
</label>
|
|
369
336
|
|
|
370
337
|
<label>
|
|
371
338
|
<span>Number weight</span>
|
|
372
|
-
<input
|
|
373
|
-
|
|
374
|
-
min="100"
|
|
375
|
-
max="900"
|
|
376
|
-
step="100"
|
|
377
|
-
bind:value={number_font_weight}
|
|
378
|
-
/>
|
|
379
|
-
<input
|
|
380
|
-
type="number"
|
|
381
|
-
min="100"
|
|
382
|
-
max="900"
|
|
383
|
-
step="100"
|
|
384
|
-
bind:value={number_font_weight}
|
|
385
|
-
/>
|
|
339
|
+
<input type="range" min="100" max="900" step="100" bind:value={number_font_weight} />
|
|
340
|
+
<input type="number" min="100" max="900" step="100" bind:value={number_font_weight} />
|
|
386
341
|
<button onclick={() => reset_property(`number_font_weight`)}>reset</button>
|
|
387
342
|
</label>
|
|
388
343
|
</section>
|
|
@@ -424,13 +379,7 @@
|
|
|
424
379
|
<label>
|
|
425
380
|
<span>Line height</span>
|
|
426
381
|
<input type="range" min="0.8" max="2" step="0.1" bind:value={tooltip_line_height} />
|
|
427
|
-
<input
|
|
428
|
-
type="number"
|
|
429
|
-
min="0.8"
|
|
430
|
-
max="2"
|
|
431
|
-
step="0.1"
|
|
432
|
-
bind:value={tooltip_line_height}
|
|
433
|
-
/>
|
|
382
|
+
<input type="number" min="0.8" max="2" step="0.1" bind:value={tooltip_line_height} />
|
|
434
383
|
<button onclick={() => reset_property(`tooltip_line_height`)}>reset</button>
|
|
435
384
|
</label>
|
|
436
385
|
|
|
@@ -449,8 +398,7 @@
|
|
|
449
398
|
<style>
|
|
450
399
|
.controls-grid {
|
|
451
400
|
display: grid;
|
|
452
|
-
grid-template-columns:
|
|
453
|
-
var(--ptable-ctrl-columns, repeat(auto-fit, minmax(320px, 1fr)));
|
|
401
|
+
grid-template-columns: var(--ptable-ctrl-columns, repeat(auto-fit, minmax(320px, 1fr)));
|
|
454
402
|
gap: var(--ptable-ctrl-gap, 1.5em);
|
|
455
403
|
margin: var(--ptable-ctrl-margin, 2em auto);
|
|
456
404
|
padding: 0 1em;
|
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
import type { Snippet } from 'svelte'
|
|
3
3
|
import type { HTMLAttributes } from 'svelte/elements'
|
|
4
4
|
|
|
5
|
-
let {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
let {
|
|
6
|
+
as = `aside`,
|
|
7
|
+
children,
|
|
8
|
+
...rest
|
|
9
|
+
}: HTMLAttributes<HTMLElementTagNameMap[`aside`]> & {
|
|
10
|
+
as?: keyof HTMLElementTagNameMap
|
|
11
|
+
children?: Snippet
|
|
12
|
+
} = $props()
|
|
8
13
|
</script>
|
|
9
14
|
|
|
10
|
-
<svelte:element this={as} {...rest} class=
|
|
15
|
+
<svelte:element this={as} {...rest} class={[`table-inset`, rest.class]}>
|
|
11
16
|
{@render children?.()}
|
|
12
17
|
</svelte:element>
|
|
13
18
|
|