matterviz 0.4.0 → 0.4.1
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/brillouin/BrillouinZone.svelte +68 -145
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -14
- package/dist/brillouin/BrillouinZoneExportPane.svelte +43 -96
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +9 -32
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
- package/dist/brillouin/BrillouinZoneScene.svelte +49 -203
- 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.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +100 -191
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +176 -464
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -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.js +2 -2
- package/dist/composition/FormulaFilter.svelte +6 -5
- package/dist/composition/PieChart.svelte +5 -5
- package/dist/composition/chem-sys.js +3 -2
- package/dist/composition/format.js +3 -2
- package/dist/composition/parse.d.ts +0 -1
- package/dist/composition/parse.js +17 -19
- package/dist/controls.d.ts +1 -0
- package/dist/controls.js +0 -1
- package/dist/convex-hull/ConvexHull.svelte +8 -10
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
- package/dist/convex-hull/ConvexHull2D.svelte +94 -175
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +176 -680
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +180 -680
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +268 -0
- package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
- package/dist/convex-hull/ConvexHullControls.svelte +88 -7
- 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 +29 -168
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +11 -2
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
- 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 +278 -0
- package/dist/convex-hull/helpers.d.ts +39 -7
- package/dist/convex-hull/helpers.js +154 -69
- 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 +91 -920
- package/dist/convex-hull/types.d.ts +12 -4
- package/dist/convex-hull/types.js +12 -0
- package/dist/coordination/CoordinationBarPlot.svelte +4 -11
- package/dist/element/BohrAtom.svelte +2 -1
- package/dist/element/ElementTile.svelte.d.ts +1 -1
- package/dist/element/index.d.ts +4 -0
- package/dist/element/index.js +18 -0
- package/dist/feedback/DragOverlay.svelte +3 -1
- package/dist/feedback/DragOverlay.svelte.d.ts +1 -0
- package/dist/feedback/StatusMessage.svelte +13 -3
- package/dist/fermi-surface/FermiSurface.svelte +67 -146
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -14
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +72 -224
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
- package/dist/fermi-surface/compute.js +11 -10
- 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 +64 -75
- package/dist/fermi-surface/types.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +55 -40
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +4 -3
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +3 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
- package/dist/heatmap-matrix/index.d.ts +3 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/io/ExportPane.svelte +166 -0
- package/dist/io/ExportPane.svelte.d.ts +17 -0
- package/dist/io/decompress.js +1 -2
- package/dist/io/export.d.ts +5 -1
- package/dist/io/export.js +32 -28
- package/dist/io/fetch.d.ts +2 -1
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +13 -0
- package/dist/io/index.d.ts +2 -0
- package/dist/io/index.js +10 -0
- package/dist/io/types.d.ts +13 -0
- package/dist/isosurface/parse.js +46 -44
- package/dist/labels.js +1 -1
- package/dist/layout/FullscreenButton.svelte +33 -0
- package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
- package/dist/layout/FullscreenToggle.svelte +8 -14
- package/dist/layout/ViewerChrome.svelte +116 -0
- package/dist/layout/ViewerChrome.svelte.d.ts +17 -0
- package/dist/layout/fullscreen.d.ts +4 -0
- package/dist/layout/fullscreen.svelte.d.ts +8 -0
- package/dist/layout/fullscreen.svelte.js +37 -0
- package/dist/layout/index.d.ts +3 -0
- package/dist/layout/index.js +3 -0
- package/dist/math.d.ts +7 -3
- package/dist/math.js +18 -21
- package/dist/overlays/index.d.ts +4 -0
- package/dist/periodic-table/PeriodicTable.svelte +9 -8
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramControls.svelte +3 -2
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +47 -132
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
- package/dist/phase-diagram/colors.js +1 -1
- package/dist/phase-diagram/parse.d.ts +2 -1
- package/dist/plot/bar/BarPlot.svelte +79 -316
- package/dist/plot/bar/BarPlot.svelte.d.ts +7 -15
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +1 -1
- package/dist/plot/bar/SpacegroupBarPlot.svelte +2 -1
- package/dist/plot/box/BoxPlot.svelte +76 -246
- package/dist/plot/box/BoxPlot.svelte.d.ts +4 -3
- package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
- package/dist/plot/box/Violin.svelte.d.ts +1 -1
- package/dist/plot/box/box-plot.d.ts +3 -2
- package/dist/plot/box/box-plot.js +5 -2
- 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 +4 -1
- package/dist/plot/core/components/ColorBar.svelte +5 -5
- package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
- package/dist/plot/core/components/Line.svelte +3 -2
- package/dist/plot/core/components/Line.svelte.d.ts +3 -2
- package/dist/plot/core/components/PlotAxis.svelte +2 -1
- package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
- package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/core/components/ReferenceLine3D.svelte +2 -2
- package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
- package/dist/plot/core/components/ReferencePlane.svelte +2 -2
- package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
- package/dist/plot/core/data-cleaning.js +18 -18
- package/dist/plot/core/fill-utils.d.ts +4 -3
- package/dist/plot/core/fill-utils.js +6 -3
- package/dist/plot/core/interactions.d.ts +5 -1
- package/dist/plot/core/interactions.js +14 -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 +6 -6
- package/dist/plot/core/scales.d.ts +17 -25
- package/dist/plot/core/scales.js +10 -8
- package/dist/plot/core/svg.d.ts +2 -1
- package/dist/plot/core/types.d.ts +18 -7
- package/dist/plot/core/utils/label-placement.d.ts +1 -1
- package/dist/plot/core/utils/label-placement.js +3 -3
- package/dist/plot/core/utils.d.ts +2 -1
- package/dist/plot/histogram/Histogram.svelte +77 -314
- package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
- package/dist/plot/sankey/Sankey.svelte +2 -5
- package/dist/plot/sankey/Sankey.svelte.d.ts +1 -1
- package/dist/plot/sankey/sankey.js +3 -1
- package/dist/plot/scatter/BinnedScatterPlot.svelte +3 -5
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +4 -4
- package/dist/plot/scatter/ScatterPlot.svelte +160 -450
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +7 -15
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/binned-scatter-types.d.ts +4 -11
- package/dist/plot/scatter/index.d.ts +1 -1
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +15 -26
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +9 -10
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +122 -121
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
- package/dist/plot/scatter-3d/Surface3D.svelte +6 -5
- package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
- package/dist/plot/sunburst/Sunburst.svelte +16 -20
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
- package/dist/plot/sunburst/SunburstControls.svelte.d.ts +1 -1
- package/dist/plot/sunburst/sunburst.js +4 -1
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/sanitize.js +13 -2
- 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 +14 -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 +14 -2
- package/dist/settings.js +59 -1
- package/dist/spectral/Bands.svelte +8 -7
- package/dist/spectral/Bands.svelte.d.ts +3 -2
- package/dist/spectral/BandsAndDos.svelte +22 -24
- package/dist/spectral/BrillouinBandsDos.svelte +3 -3
- package/dist/spectral/Dos.svelte +5 -4
- package/dist/spectral/Dos.svelte.d.ts +2 -1
- package/dist/spectral/helpers.d.ts +6 -6
- package/dist/spectral/helpers.js +43 -37
- package/dist/state.svelte.d.ts +0 -7
- package/dist/state.svelte.js +0 -6
- package/dist/structure/Arrow.svelte +2 -4
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/CanvasTooltip.svelte +1 -0
- package/dist/structure/CellSelect.svelte +11 -3
- package/dist/structure/CellSelect.svelte.d.ts +2 -1
- package/dist/structure/Lattice.svelte +2 -2
- package/dist/structure/Structure.svelte +291 -355
- package/dist/structure/Structure.svelte.d.ts +5 -15
- package/dist/structure/StructureControls.svelte +217 -2
- package/dist/structure/StructureControls.svelte.d.ts +5 -3
- package/dist/structure/StructureExportPane.svelte +54 -156
- package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
- package/dist/structure/StructureInfoPane.svelte +5 -3
- package/dist/structure/StructureInfoPane.svelte.d.ts +5 -5
- package/dist/structure/StructureScene.svelte +365 -198
- package/dist/structure/StructureScene.svelte.d.ts +22 -20
- package/dist/structure/{label-placement.d.ts → atom-label-placement.d.ts} +3 -3
- package/dist/structure/{label-placement.js → atom-label-placement.js} +12 -2
- package/dist/structure/atom-properties.d.ts +1 -1
- package/dist/structure/atom-properties.js +11 -16
- package/dist/structure/bond-order-perception.js +2 -4
- package/dist/structure/bonding.d.ts +3 -0
- package/dist/structure/bonding.js +91 -48
- package/dist/structure/export.d.ts +24 -4
- package/dist/structure/export.js +64 -122
- package/dist/structure/index.d.ts +2 -0
- package/dist/structure/index.js +2 -0
- package/dist/structure/parse.d.ts +3 -2
- package/dist/structure/parse.js +333 -370
- package/dist/structure/partial-occupancy.d.ts +0 -1
- package/dist/structure/partial-occupancy.js +1 -1
- package/dist/structure/pbc.d.ts +1 -1
- package/dist/structure/pbc.js +186 -13
- package/dist/structure/polyhedra.d.ts +41 -0
- package/dist/structure/polyhedra.js +602 -0
- package/dist/structure/site.d.ts +4 -0
- package/dist/structure/site.js +1 -0
- package/dist/structure/supercell.js +3 -2
- 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 +354 -0
- package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
- package/dist/symmetry/SymmetryStats.svelte +111 -6
- package/dist/symmetry/WyckoffTable.svelte +68 -7
- package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
- package/dist/symmetry/cell-transform.js +7 -14
- package/dist/symmetry/index.d.ts +14 -4
- package/dist/symmetry/index.js +301 -80
- package/dist/symmetry/spacegroups.d.ts +5 -1
- package/dist/symmetry/spacegroups.js +15 -1
- 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 +4 -15
- package/dist/table/HeatmapTable.svelte.d.ts +1 -1
- package/dist/trajectory/Trajectory.svelte +58 -61
- package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
- package/dist/trajectory/TrajectoryExportPane.svelte +15 -24
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
- package/dist/trajectory/TrajectoryInfoPane.svelte +3 -2
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
- package/dist/trajectory/constants.js +6 -2
- package/dist/trajectory/extract.js +17 -37
- package/dist/trajectory/format-detect.d.ts +0 -1
- package/dist/trajectory/format-detect.js +3 -9
- package/dist/trajectory/frame-reader.d.ts +0 -1
- package/dist/trajectory/frame-reader.js +62 -128
- package/dist/trajectory/helpers.d.ts +10 -2
- package/dist/trajectory/helpers.js +56 -36
- 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/index.d.ts +1 -1
- package/dist/trajectory/parse/index.js +54 -102
- package/dist/trajectory/parse/lammps.d.ts +0 -2
- package/dist/trajectory/parse/lammps.js +8 -6
- package/dist/trajectory/parse/pymatgen.d.ts +2 -0
- package/dist/trajectory/parse/pymatgen.js +74 -0
- package/dist/trajectory/parse/vasp.js +4 -3
- package/dist/trajectory/parse/xyz.d.ts +9 -21
- package/dist/trajectory/parse/xyz.js +28 -33
- package/dist/trajectory/plotting.d.ts +0 -1
- package/dist/trajectory/plotting.js +3 -100
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +1 -1
- package/dist/xrd/XrdPlot.svelte +14 -29
- package/dist/xrd/broadening.d.ts +2 -1
- package/dist/xrd/calc-xrd.js +6 -11
- package/dist/xrd/index.d.ts +2 -2
- package/package.json +29 -16
- 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
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Fullscreen toggle button (default Icon or custom snippet content), shared by the
|
|
3
|
+
// Trajectory/ChemPotDiagram3D/ConvexHull viewer chromes
|
|
4
|
+
import Icon from '../Icon.svelte'
|
|
5
|
+
import type { HTMLButtonAttributes } from 'svelte/elements'
|
|
6
|
+
import { type FullscreenToggleProp, toggle_fullscreen } from './fullscreen'
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
fullscreen = false,
|
|
10
|
+
toggle = true, // pass a snippet to render custom button content
|
|
11
|
+
wrapper = undefined, // element sent fullscreen
|
|
12
|
+
...rest
|
|
13
|
+
}: HTMLButtonAttributes & {
|
|
14
|
+
fullscreen?: boolean
|
|
15
|
+
toggle?: FullscreenToggleProp
|
|
16
|
+
wrapper?: HTMLDivElement
|
|
17
|
+
} = $props()
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<button
|
|
21
|
+
type="button"
|
|
22
|
+
onclick={() => toggle_fullscreen(wrapper)}
|
|
23
|
+
title="{fullscreen ? `Exit` : `Enter`} fullscreen"
|
|
24
|
+
aria-pressed={fullscreen}
|
|
25
|
+
{...rest}
|
|
26
|
+
class="fullscreen-btn {rest.class ?? ``}"
|
|
27
|
+
>
|
|
28
|
+
{#if typeof toggle === `function`}
|
|
29
|
+
{@render toggle({ fullscreen })}
|
|
30
|
+
{:else}
|
|
31
|
+
<Icon icon={fullscreen ? `ExitFullscreen` : `Fullscreen`} />
|
|
32
|
+
{/if}
|
|
33
|
+
</button>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { HTMLButtonAttributes } from 'svelte/elements';
|
|
2
|
+
import { type FullscreenToggleProp } from './fullscreen';
|
|
3
|
+
type $$ComponentProps = HTMLButtonAttributes & {
|
|
4
|
+
fullscreen?: boolean;
|
|
5
|
+
toggle?: FullscreenToggleProp;
|
|
6
|
+
wrapper?: HTMLDivElement;
|
|
7
|
+
};
|
|
8
|
+
declare const FullscreenButton: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
9
|
+
type FullscreenButton = ReturnType<typeof FullscreenButton>;
|
|
10
|
+
export default FullscreenButton;
|
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
// Toggles a bindable `fullscreen` flag (plot components manage browser fullscreen
|
|
3
|
+
// themselves). For chromes that call the browser API directly, use FullscreenButton.
|
|
2
4
|
import Icon from '../Icon.svelte'
|
|
3
5
|
import type { HTMLButtonAttributes } from 'svelte/elements'
|
|
4
6
|
|
|
5
|
-
let {
|
|
6
|
-
fullscreen = $bindable(false),
|
|
7
|
-
class: className,
|
|
8
|
-
...rest
|
|
9
|
-
}: HTMLButtonAttributes & {
|
|
7
|
+
let { fullscreen = $bindable(false), ...rest }: HTMLButtonAttributes & {
|
|
10
8
|
fullscreen?: boolean
|
|
11
9
|
} = $props()
|
|
12
10
|
</script>
|
|
13
11
|
|
|
14
12
|
<button
|
|
15
|
-
|
|
13
|
+
{...rest}
|
|
14
|
+
class="fullscreen-toggle {rest.class ?? ``}"
|
|
16
15
|
onclick={() => (fullscreen = !fullscreen)}
|
|
17
16
|
aria-label={fullscreen ? `Exit fullscreen` : `Enter fullscreen`}
|
|
18
17
|
type="button"
|
|
19
|
-
{...rest}
|
|
20
18
|
>
|
|
21
|
-
<Icon
|
|
22
|
-
icon={fullscreen ? `ExitFullscreen` : `Fullscreen`}
|
|
23
|
-
width="18"
|
|
24
|
-
height="18"
|
|
25
|
-
/>
|
|
19
|
+
<Icon icon="{fullscreen ? `Exit` : ``}Fullscreen" width="18" height="18" />
|
|
26
20
|
</button>
|
|
27
21
|
|
|
28
22
|
<style>
|
|
@@ -45,6 +39,6 @@
|
|
|
45
39
|
background-color: color-mix(in srgb, currentColor 8%, transparent);
|
|
46
40
|
opacity: var(--fullscreen-btn-hover-opacity, 1);
|
|
47
41
|
}
|
|
48
|
-
/* Note: Parent component should add styles to show on parent hover
|
|
49
|
-
|
|
42
|
+
/* Note: Parent component should add styles to show on parent hover
|
|
43
|
+
Example: .parent:hover :global(.fullscreen-toggle) { opacity: 1; } */
|
|
50
44
|
</style>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { FullscreenToggleProp } from './fullscreen'
|
|
3
|
+
import type { ShowControlsState } from '../controls'
|
|
4
|
+
// Shared control-buttons row (filename chip + fullscreen toggle + snippet buttons/panes) for BrillouinZone/FermiSurface/Structure viewers; themed via neutral --viewer-* CSS vars
|
|
5
|
+
// TODO Trajectory.svelte still has its own control-buttons variant — migrate it here.
|
|
6
|
+
import type { Snippet } from 'svelte'
|
|
7
|
+
import { createAttachmentKey } from 'svelte/attachments'
|
|
8
|
+
import { tooltip } from 'svelte-multiselect/attachments'
|
|
9
|
+
import FullscreenButton from './FullscreenButton.svelte'
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
controls_config,
|
|
13
|
+
filename = undefined,
|
|
14
|
+
fullscreen = false,
|
|
15
|
+
fullscreen_toggle = true,
|
|
16
|
+
fullscreen_btn_style = undefined,
|
|
17
|
+
wrapper = undefined,
|
|
18
|
+
style = undefined,
|
|
19
|
+
before = undefined,
|
|
20
|
+
children = undefined,
|
|
21
|
+
}: {
|
|
22
|
+
controls_config: ShowControlsState
|
|
23
|
+
filename?: string
|
|
24
|
+
fullscreen?: boolean
|
|
25
|
+
fullscreen_toggle?: FullscreenToggleProp
|
|
26
|
+
fullscreen_btn_style?: string
|
|
27
|
+
wrapper?: HTMLDivElement
|
|
28
|
+
style?: string // extra styles/CSS vars for the section (user config style wins)
|
|
29
|
+
before?: Snippet // rendered before filename/fullscreen (e.g. reset-camera button)
|
|
30
|
+
children?: Snippet // rendered after the fullscreen toggle (panes, controls, ...)
|
|
31
|
+
} = $props()
|
|
32
|
+
|
|
33
|
+
// Styled tooltip (reads the button's title attr), forwarded as a spreadable attachment
|
|
34
|
+
const tooltip_attachment = { [createAttachmentKey()]: tooltip() }
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<section
|
|
38
|
+
class="control-buttons {controls_config.class}"
|
|
39
|
+
style={[style, controls_config.style].filter(Boolean).join(`; `)}
|
|
40
|
+
>
|
|
41
|
+
{#if controls_config.mode !== `never`}
|
|
42
|
+
{@render before?.()}
|
|
43
|
+
|
|
44
|
+
{#if filename && controls_config.visible(`filename`)}
|
|
45
|
+
<span class="filename">{filename}</span>
|
|
46
|
+
{/if}
|
|
47
|
+
|
|
48
|
+
{#if fullscreen_toggle && controls_config.visible(`fullscreen`)}
|
|
49
|
+
<FullscreenButton
|
|
50
|
+
{fullscreen}
|
|
51
|
+
toggle={fullscreen_toggle}
|
|
52
|
+
{wrapper}
|
|
53
|
+
class="fullscreen-toggle"
|
|
54
|
+
style={fullscreen_btn_style}
|
|
55
|
+
{...tooltip_attachment}
|
|
56
|
+
/>
|
|
57
|
+
{/if}
|
|
58
|
+
|
|
59
|
+
{@render children?.()}
|
|
60
|
+
{/if}
|
|
61
|
+
</section>
|
|
62
|
+
|
|
63
|
+
<style>
|
|
64
|
+
section.control-buttons {
|
|
65
|
+
position: absolute;
|
|
66
|
+
display: flex;
|
|
67
|
+
top: var(--viewer-buttons-top, var(--ctrl-btn-top, 1ex));
|
|
68
|
+
right: var(--viewer-buttons-right, var(--ctrl-btn-right, 1ex));
|
|
69
|
+
gap: var(--viewer-buttons-gap, clamp(6pt, 1cqmin, 9pt));
|
|
70
|
+
z-index: var(
|
|
71
|
+
--viewer-buttons-z-index,
|
|
72
|
+
var(--z-index-overlay-controls, 100000000)
|
|
73
|
+
);
|
|
74
|
+
opacity: 0;
|
|
75
|
+
pointer-events: none;
|
|
76
|
+
transition: opacity 0.2s ease;
|
|
77
|
+
align-items: var(--viewer-buttons-align, center);
|
|
78
|
+
}
|
|
79
|
+
/* Mode: always - controls always visible */
|
|
80
|
+
section.control-buttons.always-visible {
|
|
81
|
+
opacity: 1;
|
|
82
|
+
pointer-events: auto;
|
|
83
|
+
}
|
|
84
|
+
/* Mode: hover - controls visible while the parent viewer is hovered/focused */
|
|
85
|
+
:global(.structure:hover) > section.control-buttons.hover-visible,
|
|
86
|
+
:global(.structure:focus-within) > section.control-buttons.hover-visible,
|
|
87
|
+
:global(.brillouin-zone:hover) > section.control-buttons.hover-visible,
|
|
88
|
+
:global(.brillouin-zone:focus-within) > section.control-buttons.hover-visible,
|
|
89
|
+
:global(.fermi-surface:hover) > section.control-buttons.hover-visible,
|
|
90
|
+
:global(.fermi-surface:focus-within) > section.control-buttons.hover-visible {
|
|
91
|
+
opacity: 1;
|
|
92
|
+
pointer-events: auto;
|
|
93
|
+
}
|
|
94
|
+
/* Mode: never - stays hidden (default state, no additional CSS needed) */
|
|
95
|
+
section.control-buttons > :global(button) {
|
|
96
|
+
background-color: transparent;
|
|
97
|
+
display: flex;
|
|
98
|
+
padding: var(--viewer-buttons-btn-padding, 4px);
|
|
99
|
+
border-radius: var(--border-radius, 3pt);
|
|
100
|
+
font-size: clamp(0.85em, 2cqmin, 1.3em);
|
|
101
|
+
}
|
|
102
|
+
section.control-buttons :global(button:hover) {
|
|
103
|
+
background-color: color-mix(in srgb, currentColor 8%, transparent);
|
|
104
|
+
}
|
|
105
|
+
.filename {
|
|
106
|
+
font-family: monospace;
|
|
107
|
+
font-size: 0.9em;
|
|
108
|
+
background: var(--code-bg, rgba(0, 0, 0, 0.1));
|
|
109
|
+
padding: 3pt 6pt;
|
|
110
|
+
border-radius: 3pt;
|
|
111
|
+
max-width: 200px;
|
|
112
|
+
overflow: hidden;
|
|
113
|
+
text-overflow: ellipsis;
|
|
114
|
+
white-space: nowrap;
|
|
115
|
+
}
|
|
116
|
+
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FullscreenToggleProp } from './fullscreen';
|
|
2
|
+
import type { ShowControlsState } from '../controls';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
type $$ComponentProps = {
|
|
5
|
+
controls_config: ShowControlsState;
|
|
6
|
+
filename?: string;
|
|
7
|
+
fullscreen?: boolean;
|
|
8
|
+
fullscreen_toggle?: FullscreenToggleProp;
|
|
9
|
+
fullscreen_btn_style?: string;
|
|
10
|
+
wrapper?: HTMLDivElement;
|
|
11
|
+
style?: string;
|
|
12
|
+
before?: Snippet;
|
|
13
|
+
children?: Snippet;
|
|
14
|
+
};
|
|
15
|
+
declare const ViewerChrome: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
16
|
+
type ViewerChrome = ReturnType<typeof ViewerChrome>;
|
|
17
|
+
export default ViewerChrome;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function sync_fullscreen(opts: {
|
|
2
|
+
get_wrapper: () => HTMLDivElement | undefined;
|
|
3
|
+
get_fullscreen: () => boolean;
|
|
4
|
+
set_fullscreen: (fullscreen: boolean) => void;
|
|
5
|
+
bg_css_var: string;
|
|
6
|
+
on_request_error?: (err: Error) => void;
|
|
7
|
+
on_change?: (fullscreen: boolean) => void;
|
|
8
|
+
}): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { set_fullscreen_bg } from './fullscreen';
|
|
2
|
+
// Two-way sync between a bindable `fullscreen` flag, the browser fullscreen state of a wrapper, and the fullscreen background CSS var. Creates $effects (call during component init). Shared by BrillouinZone/FermiSurface/Structure viewers.
|
|
3
|
+
// TODO Trajectory.svelte still has its own fullscreen variant — migrate it here.
|
|
4
|
+
export function sync_fullscreen(opts) {
|
|
5
|
+
// Flag -> browser: enter/exit fullscreen when the bound flag changes
|
|
6
|
+
$effect(() => {
|
|
7
|
+
if (typeof window === `undefined`)
|
|
8
|
+
return;
|
|
9
|
+
const wrapper = opts.get_wrapper();
|
|
10
|
+
const fullscreen = opts.get_fullscreen();
|
|
11
|
+
const fs_el = document.fullscreenElement;
|
|
12
|
+
if (fullscreen && fs_el !== wrapper && wrapper) {
|
|
13
|
+
wrapper.requestFullscreen().catch((err) => {
|
|
14
|
+
console.error(err);
|
|
15
|
+
opts.on_request_error?.(err);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
else if (!fullscreen && fs_el === wrapper) {
|
|
19
|
+
document.exitFullscreen().catch(console.error);
|
|
20
|
+
}
|
|
21
|
+
set_fullscreen_bg(wrapper, fullscreen, opts.bg_css_var);
|
|
22
|
+
});
|
|
23
|
+
// Browser -> flag: track fullscreenchange events (covers Esc key, programmatic exit, ...)
|
|
24
|
+
$effect(() => {
|
|
25
|
+
if (typeof document === `undefined`)
|
|
26
|
+
return () => { };
|
|
27
|
+
const handler = () => {
|
|
28
|
+
// tie state to this component's own wrapper so another element entering fullscreen
|
|
29
|
+
// doesn't flip every viewer's flag (would also trigger a requestFullscreen cascade)
|
|
30
|
+
const is_fullscreen = document.fullscreenElement === opts.get_wrapper();
|
|
31
|
+
opts.set_fullscreen(is_fullscreen);
|
|
32
|
+
opts.on_change?.(is_fullscreen);
|
|
33
|
+
};
|
|
34
|
+
document.addEventListener(`fullscreenchange`, handler);
|
|
35
|
+
return () => document.removeEventListener(`fullscreenchange`, handler);
|
|
36
|
+
});
|
|
37
|
+
}
|
package/dist/layout/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './fullscreen';
|
|
2
|
+
export * from './fullscreen.svelte';
|
|
3
|
+
export { default as FullscreenButton } from './FullscreenButton.svelte';
|
|
2
4
|
export { default as FullscreenToggle } from './FullscreenToggle.svelte';
|
|
3
5
|
export { default as InfoCard } from './InfoCard.svelte';
|
|
4
6
|
export { default as InfoTag } from './InfoTag.svelte';
|
|
@@ -6,5 +8,6 @@ export * from './json-tree';
|
|
|
6
8
|
export { default as PropertyFilter } from './PropertyFilter.svelte';
|
|
7
9
|
export { default as SettingsSection } from './SettingsSection.svelte';
|
|
8
10
|
export { default as SubpageGrid } from './SubpageGrid.svelte';
|
|
11
|
+
export { default as ViewerChrome } from './ViewerChrome.svelte';
|
|
9
12
|
export type InfoTagVariant = `default` | `success` | `warning` | `error` | `info`;
|
|
10
13
|
export type InfoTagSize = `sm` | `md` | `lg`;
|
package/dist/layout/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './fullscreen';
|
|
2
|
+
export * from './fullscreen.svelte';
|
|
3
|
+
export { default as FullscreenButton } from './FullscreenButton.svelte';
|
|
2
4
|
export { default as FullscreenToggle } from './FullscreenToggle.svelte';
|
|
3
5
|
export { default as InfoCard } from './InfoCard.svelte';
|
|
4
6
|
export { default as InfoTag } from './InfoTag.svelte';
|
|
@@ -6,3 +8,4 @@ export * from './json-tree';
|
|
|
6
8
|
export { default as PropertyFilter } from './PropertyFilter.svelte';
|
|
7
9
|
export { default as SettingsSection } from './SettingsSection.svelte';
|
|
8
10
|
export { default as SubpageGrid } from './SubpageGrid.svelte';
|
|
11
|
+
export { default as ViewerChrome } from './ViewerChrome.svelte';
|
package/dist/math.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { LatticeParams, Pbc } from './structure/index';
|
|
|
2
2
|
export type Vec2 = [number, number];
|
|
3
3
|
export type Vec3 = [number, number, number];
|
|
4
4
|
export type Vec4 = [number, number, number, number];
|
|
5
|
+
export type Vec5 = [number, number, number, number, number];
|
|
5
6
|
export type Vec9 = [number, number, number, number, number, number, number, number, number];
|
|
6
7
|
export type Point2D = {
|
|
7
8
|
x: number;
|
|
@@ -51,12 +52,14 @@ export declare function matrix_inverse_3x3(matrix: Matrix3x3): Matrix3x3;
|
|
|
51
52
|
export declare function mat3x3_vec3_multiply(matrix: Matrix3x3, vector: Vec3): Vec3;
|
|
52
53
|
export declare function add<T extends NdVector>(...vecs: T[]): T;
|
|
53
54
|
export declare function subtract<T extends NdVector>(vec1: T, vec2: T): T;
|
|
55
|
+
export declare function dot(vec1: Matrix3x3, vec2: Matrix3x3): Matrix3x3;
|
|
56
|
+
export declare function dot(vec1: Matrix3x3, vec2: Vec3): Vec3;
|
|
54
57
|
export declare function dot(vec1: NdVector, vec2: NdVector): number;
|
|
55
58
|
export declare function dot(vec1: NdVector[], vec2: NdVector): number[];
|
|
56
59
|
export declare function dot(vec1: NdVector[], vec2: NdVector[]): number[][];
|
|
57
60
|
export declare function to_voigt(tensor: number[][]): number[];
|
|
58
|
-
export declare function from_voigt(voigt: number[]):
|
|
59
|
-
export declare function vec9_to_mat3x3(flat_array: number[]):
|
|
61
|
+
export declare function from_voigt(voigt: number[]): Matrix3x3;
|
|
62
|
+
export declare function vec9_to_mat3x3(flat_array: number[]): Matrix3x3;
|
|
60
63
|
export declare function tensor_to_flat_array(tensor: number[][]): number[];
|
|
61
64
|
export declare const transpose_3x3_matrix: (matrix: Matrix3x3) => Matrix3x3;
|
|
62
65
|
export declare function scale_lattice_matrix(orig_matrix: Matrix3x3, scaling_factors: Vec3): Matrix3x3;
|
|
@@ -89,7 +92,7 @@ export declare function compute_bounding_box(vertices: Vec3[]): {
|
|
|
89
92
|
min: Vec3;
|
|
90
93
|
max: Vec3;
|
|
91
94
|
};
|
|
92
|
-
export declare function is_square_matrix(matrix: unknown, dim: number):
|
|
95
|
+
export declare function is_square_matrix(matrix: unknown, dim: number): matrix is number[][];
|
|
93
96
|
export declare function point_in_polygon(point_x: number, point_y: number, vertices: Vec2[]): boolean;
|
|
94
97
|
export declare function compute_bounding_box_2d(vertices: Vec2[]): {
|
|
95
98
|
min: Vec2;
|
|
@@ -101,5 +104,6 @@ export declare function polygon_centroid(vertices: Vec2[]): Vec2;
|
|
|
101
104
|
export declare function solve_linear_system(A: number[][], // NxN coefficient matrix
|
|
102
105
|
b: number[]): number[] | null;
|
|
103
106
|
export declare const cross_2d: (origin: Vec2, point_a: Vec2, point_b: Vec2) => number;
|
|
107
|
+
export declare const monotone_chain: (sorted: Vec2[]) => Vec2[];
|
|
104
108
|
export declare function convex_hull_2d(points: Vec2[]): Vec2[];
|
|
105
109
|
export {};
|
package/dist/math.js
CHANGED
|
@@ -737,13 +737,14 @@ export function compute_bounding_box(vertices) {
|
|
|
737
737
|
}
|
|
738
738
|
return { min, max };
|
|
739
739
|
}
|
|
740
|
-
// Check if a matrix is square
|
|
740
|
+
// Check if a matrix is a finite-numeric square matrix of dimension NxN (type predicate
|
|
741
|
+
// so callers get number[][] narrowing without assertions). Rejects NaN/Infinity entries.
|
|
741
742
|
export function is_square_matrix(matrix, dim) {
|
|
742
743
|
if (!Array.isArray(matrix))
|
|
743
744
|
return false;
|
|
744
745
|
if (matrix.length !== dim)
|
|
745
746
|
return false;
|
|
746
|
-
return matrix.every((row) => Array.isArray(row) && row.length === dim);
|
|
747
|
+
return matrix.every((row) => Array.isArray(row) && row.length === dim && row.every((val) => Number.isFinite(val)));
|
|
747
748
|
}
|
|
748
749
|
// --- 2D Geometry Utilities ---
|
|
749
750
|
// Point-in-polygon test using ray casting algorithm
|
|
@@ -888,31 +889,27 @@ b) {
|
|
|
888
889
|
}
|
|
889
890
|
export const cross_2d = (origin, point_a, point_b) => (point_a[0] - origin[0]) * (point_b[1] - origin[1]) -
|
|
890
891
|
(point_a[1] - origin[1]) * (point_b[0] - origin[0]);
|
|
892
|
+
// One half of Andrew's monotone chain built from x-then-y *pre-sorted* points
|
|
893
|
+
// (lower chain; pass reversed input for the upper chain).
|
|
894
|
+
export const monotone_chain = (sorted) => {
|
|
895
|
+
const chain = [];
|
|
896
|
+
for (const pt of sorted) {
|
|
897
|
+
while (chain.length >= 2 &&
|
|
898
|
+
cross_2d(chain[chain.length - 2], chain[chain.length - 1], pt) <= 0) {
|
|
899
|
+
chain.pop();
|
|
900
|
+
}
|
|
901
|
+
chain.push(pt);
|
|
902
|
+
}
|
|
903
|
+
return chain;
|
|
904
|
+
};
|
|
891
905
|
// Full 2D convex hull via Andrew's monotone chain algorithm.
|
|
892
906
|
// Returns vertices in counter-clockwise order.
|
|
893
907
|
export function convex_hull_2d(points) {
|
|
894
908
|
if (points.length < 3)
|
|
895
909
|
return [...points];
|
|
896
910
|
const sorted = points.toSorted((a, b) => a[0] - b[0] || a[1] - b[1]);
|
|
897
|
-
|
|
898
|
-
const
|
|
899
|
-
for (const pt of sorted) {
|
|
900
|
-
while (lower.length >= 2 &&
|
|
901
|
-
cross_2d(lower[lower.length - 2], lower[lower.length - 1], pt) <= 0) {
|
|
902
|
-
lower.pop();
|
|
903
|
-
}
|
|
904
|
-
lower.push(pt);
|
|
905
|
-
}
|
|
906
|
-
// Upper hull
|
|
907
|
-
const upper = [];
|
|
908
|
-
for (let idx = sorted.length - 1; idx >= 0; idx--) {
|
|
909
|
-
const pt = sorted[idx];
|
|
910
|
-
while (upper.length >= 2 &&
|
|
911
|
-
cross_2d(upper[upper.length - 2], upper[upper.length - 1], pt) <= 0) {
|
|
912
|
-
upper.pop();
|
|
913
|
-
}
|
|
914
|
-
upper.push(pt);
|
|
915
|
-
}
|
|
911
|
+
const lower = monotone_chain(sorted);
|
|
912
|
+
const upper = monotone_chain(sorted.toReversed());
|
|
916
913
|
// Remove last point of each half (it's the first point of the other)
|
|
917
914
|
lower.pop();
|
|
918
915
|
upper.pop();
|
package/dist/overlays/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type { ComponentProps } from 'svelte';
|
|
2
|
+
import type DraggablePane from './DraggablePane.svelte';
|
|
1
3
|
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
2
4
|
export { default as DraggablePane } from './DraggablePane.svelte';
|
|
3
5
|
export { default as DragControlTab } from './DragControlTab.svelte';
|
|
6
|
+
export type PaneToggleProps = ComponentProps<typeof DraggablePane>[`toggle_props`];
|
|
7
|
+
export type PaneProps = ComponentProps<typeof DraggablePane>[`pane_props`];
|
|
@@ -1,12 +1,11 @@
|
|
|
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'
|
|
@@ -186,14 +185,14 @@
|
|
|
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
|
|
|
192
191
|
let cs_min = $derived(
|
|
193
192
|
color_scale_range[0] ??
|
|
194
193
|
(heat_values.length > 0
|
|
195
194
|
? Math.min(
|
|
196
|
-
...heat_values.flat().filter((
|
|
195
|
+
...heat_values.flat().filter((val): val is number => typeof val === `number`),
|
|
197
196
|
)
|
|
198
197
|
: 0),
|
|
199
198
|
)
|
|
@@ -201,7 +200,7 @@
|
|
|
201
200
|
color_scale_range[1] ??
|
|
202
201
|
(heat_values.length > 0
|
|
203
202
|
? Math.max(
|
|
204
|
-
...heat_values.flat().filter((
|
|
203
|
+
...heat_values.flat().filter((val): val is number => typeof val === `number`),
|
|
205
204
|
)
|
|
206
205
|
: 1),
|
|
207
206
|
)
|
|
@@ -209,7 +208,9 @@
|
|
|
209
208
|
// smallest positive bound for log color mapping (matches the auto ColorBar's log scale)
|
|
210
209
|
let cs_min_pos = $derived.by(() => {
|
|
211
210
|
if (cs_min > 0) return cs_min
|
|
212
|
-
const pos = heat_values.flat().filter((
|
|
211
|
+
const pos = heat_values.flat().filter((val): val is number =>
|
|
212
|
+
typeof val === `number` && val > 0
|
|
213
|
+
)
|
|
213
214
|
return pos.length > 0 ? Math.min(...pos) : cs_max
|
|
214
215
|
})
|
|
215
216
|
|
|
@@ -224,7 +225,7 @@
|
|
|
224
225
|
}
|
|
225
226
|
|
|
226
227
|
// If it's already a color string, return it directly
|
|
227
|
-
if (is_color(value)) return value
|
|
228
|
+
if (is_color(value)) return value
|
|
228
229
|
|
|
229
230
|
// Return missing color for zero/invalid values or when no heatmap data
|
|
230
231
|
if (
|
|
@@ -264,7 +265,7 @@
|
|
|
264
265
|
|
|
265
266
|
return value.map((val) => {
|
|
266
267
|
// If it's already a color string, return it directly
|
|
267
|
-
if (is_color(val)) return val
|
|
268
|
+
if (is_color(val)) return val
|
|
268
269
|
// Otherwise, map it through the color scale
|
|
269
270
|
return bg_color(val as number, element)
|
|
270
271
|
})
|
|
@@ -39,6 +39,6 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
39
39
|
}
|
|
40
40
|
]>;
|
|
41
41
|
};
|
|
42
|
-
declare const IsobaricBinaryPhaseDiagram: import("svelte").Component<$$ComponentProps, {}, "
|
|
42
|
+
declare const IsobaricBinaryPhaseDiagram: import("svelte").Component<$$ComponentProps, {}, "show_labels" | "y_axis" | "fullscreen" | "wrapper" | "controls_open" | "x_axis" | "export_pane_open" | "png_dpi" | "config" | "show_grid" | "show_boundaries" | "show_special_points" | "show_component_labels" | "lever_rule_mode" | "editor_open" | "diagram_input" | "hovered_region" | "display_temp_unit">;
|
|
43
43
|
type IsobaricBinaryPhaseDiagram = ReturnType<typeof IsobaricBinaryPhaseDiagram>;
|
|
44
44
|
export default IsobaricBinaryPhaseDiagram;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { PaneProps, PaneToggleProps } from '../overlays'
|
|
2
3
|
// NOTE: Axis config objects must be reassigned (not mutated) to trigger $bindable reactivity.
|
|
3
4
|
import { css_color_to_hex } from '../colors'
|
|
4
5
|
import { format_num } from '../labels'
|
|
@@ -58,8 +59,8 @@
|
|
|
58
59
|
enable_export?: boolean
|
|
59
60
|
png_dpi?: number
|
|
60
61
|
// Pane customization
|
|
61
|
-
pane_props?:
|
|
62
|
-
toggle_props?:
|
|
62
|
+
pane_props?: PaneProps
|
|
63
|
+
toggle_props?: PaneToggleProps
|
|
63
64
|
// Custom content snippets
|
|
64
65
|
children?: Snippet<[{ controls_open: boolean }]>
|
|
65
66
|
post_children?: Snippet<[{ controls_open: boolean }]>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PaneProps, PaneToggleProps } from '../overlays';
|
|
1
2
|
import DraggablePane from '../overlays/DraggablePane.svelte';
|
|
2
3
|
import type { AxisConfig } from '../plot';
|
|
3
4
|
import type { ComponentProps, Snippet } from 'svelte';
|
|
@@ -16,8 +17,8 @@ type $$ComponentProps = Omit<ComponentProps<typeof DraggablePane>, `children`> &
|
|
|
16
17
|
data?: PhaseDiagramData;
|
|
17
18
|
enable_export?: boolean;
|
|
18
19
|
png_dpi?: number;
|
|
19
|
-
pane_props?:
|
|
20
|
-
toggle_props?:
|
|
20
|
+
pane_props?: PaneProps;
|
|
21
|
+
toggle_props?: PaneToggleProps;
|
|
21
22
|
children?: Snippet<[{
|
|
22
23
|
controls_open: boolean;
|
|
23
24
|
}]>;
|
|
@@ -25,6 +26,6 @@ type $$ComponentProps = Omit<ComponentProps<typeof DraggablePane>, `children`> &
|
|
|
25
26
|
controls_open: boolean;
|
|
26
27
|
}]>;
|
|
27
28
|
};
|
|
28
|
-
declare const PhaseDiagramControls: import("svelte").Component<$$ComponentProps, {}, "
|
|
29
|
+
declare const PhaseDiagramControls: import("svelte").Component<$$ComponentProps, {}, "show_labels" | "y_axis" | "controls_open" | "x_axis" | "png_dpi" | "config" | "show_grid" | "show_boundaries" | "show_special_points" | "show_component_labels" | "lever_rule_mode">;
|
|
29
30
|
type PhaseDiagramControls = ReturnType<typeof PhaseDiagramControls>;
|
|
30
31
|
export default PhaseDiagramControls;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { PaneToggleProps } from '../overlays'
|
|
2
3
|
import { JsonTree } from '../layout/json-tree'
|
|
3
4
|
import { set_at_path } from '../layout/json-tree/utils'
|
|
4
5
|
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
data?: PhaseDiagramData | null
|
|
22
23
|
ondata?: (data: PhaseDiagramData) => void
|
|
23
24
|
icon_style?: string
|
|
24
|
-
toggle_props?:
|
|
25
|
+
toggle_props?: PaneToggleProps
|
|
25
26
|
} = $props()
|
|
26
27
|
|
|
27
28
|
// The source object currently displayed (DiagramInput or PhaseDiagramData)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { ComponentProps } from 'svelte';
|
|
1
|
+
import type { PaneToggleProps } from '../overlays';
|
|
3
2
|
import type { DiagramInput } from './diagram-input';
|
|
4
3
|
import type { PhaseDiagramData } from './types';
|
|
5
4
|
type $$ComponentProps = {
|
|
@@ -8,7 +7,7 @@ type $$ComponentProps = {
|
|
|
8
7
|
data?: PhaseDiagramData | null;
|
|
9
8
|
ondata?: (data: PhaseDiagramData) => void;
|
|
10
9
|
icon_style?: string;
|
|
11
|
-
toggle_props?:
|
|
10
|
+
toggle_props?: PaneToggleProps;
|
|
12
11
|
};
|
|
13
12
|
declare const PhaseDiagramEditorPane: import("svelte").Component<$$ComponentProps, {}, "editor_open" | "diagram_input">;
|
|
14
13
|
type PhaseDiagramEditorPane = ReturnType<typeof PhaseDiagramEditorPane>;
|