matterviz 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EmptyState.svelte +10 -2
- package/dist/FilePicker.svelte +123 -82
- package/dist/Icon.svelte +18 -12
- package/dist/MillerIndexInput.svelte +27 -21
- package/dist/api/optimade.js +6 -6
- package/dist/app.css +216 -207
- package/dist/brillouin/BrillouinZone.svelte +292 -149
- package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
- package/dist/brillouin/BrillouinZoneExportPane.svelte +69 -42
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
- package/dist/brillouin/BrillouinZoneScene.svelte +275 -163
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
- package/dist/brillouin/compute.js +11 -6
- package/dist/chempot-diagram/ChemPotDiagram.svelte +162 -27
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +451 -281
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +2148 -1642
- package/dist/chempot-diagram/ChemPotScene3D.svelte +8 -5
- package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
- package/dist/chempot-diagram/async-compute.svelte.js +77 -0
- package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
- package/dist/chempot-diagram/chempot-worker.js +11 -0
- package/dist/chempot-diagram/color.js +1 -2
- package/dist/chempot-diagram/compute.d.ts +10 -0
- package/dist/chempot-diagram/compute.js +250 -88
- package/dist/chempot-diagram/index.d.ts +2 -1
- package/dist/chempot-diagram/index.js +2 -1
- package/dist/chempot-diagram/temperature.js +8 -9
- package/dist/chempot-diagram/types.d.ts +3 -0
- package/dist/chempot-diagram/types.js +1 -0
- package/dist/colors/index.d.ts +1 -1
- package/dist/colors/index.js +5 -3
- package/dist/composition/BarChart.svelte +128 -55
- package/dist/composition/BubbleChart.svelte +102 -49
- package/dist/composition/Composition.svelte +100 -79
- package/dist/composition/Formula.svelte +108 -62
- package/dist/composition/FormulaFilter.svelte +665 -537
- package/dist/composition/PieChart.svelte +183 -108
- package/dist/composition/format.d.ts +5 -0
- package/dist/composition/format.js +20 -3
- package/dist/composition/parse.js +14 -9
- package/dist/convex-hull/ConvexHull.svelte +93 -40
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +549 -360
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +1296 -827
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +1004 -688
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullControls.svelte +115 -28
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
- package/dist/convex-hull/ConvexHullStats.svelte +425 -328
- package/dist/convex-hull/ConvexHullTooltip.svelte +40 -16
- package/dist/convex-hull/GasPressureControls.svelte +104 -61
- package/dist/convex-hull/StructurePopup.svelte +25 -4
- package/dist/convex-hull/TemperatureSlider.svelte +45 -25
- package/dist/convex-hull/barycentric-coords.js +13 -7
- package/dist/convex-hull/demo-temperature.js +8 -4
- package/dist/convex-hull/gas-thermodynamics.js +17 -12
- package/dist/convex-hull/helpers.d.ts +9 -0
- package/dist/convex-hull/helpers.js +77 -34
- package/dist/convex-hull/thermodynamics.js +61 -56
- package/dist/convex-hull/types.d.ts +9 -14
- package/dist/convex-hull/types.js +0 -17
- package/dist/coordination/CoordinationBarPlot.svelte +227 -154
- package/dist/element/BohrAtom.svelte +55 -12
- package/dist/element/ElementHeading.svelte +7 -2
- package/dist/element/ElementPhoto.svelte +15 -9
- package/dist/element/ElementStats.svelte +10 -4
- package/dist/element/ElementTile.svelte +137 -73
- package/dist/element/Nucleus.svelte +39 -11
- package/dist/feedback/ClickFeedback.svelte +16 -5
- package/dist/feedback/DragOverlay.svelte +10 -2
- package/dist/feedback/Spinner.svelte +4 -2
- package/dist/feedback/StatusMessage.svelte +8 -2
- package/dist/fermi-surface/FermiSlice.svelte +118 -88
- package/dist/fermi-surface/FermiSurface.svelte +328 -187
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +535 -342
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
- package/dist/fermi-surface/compute.js +16 -20
- package/dist/fermi-surface/parse.js +24 -14
- package/dist/fermi-surface/symmetry.js +2 -7
- package/dist/fermi-surface/types.d.ts +3 -5
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +1019 -765
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +76 -22
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +2 -3
- package/dist/icons.js +47 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/io/decompress.js +1 -1
- package/dist/io/export.d.ts +3 -0
- package/dist/io/export.js +129 -143
- package/dist/io/is-binary.js +2 -3
- package/dist/io/url-drop.js +1 -2
- package/dist/isosurface/Isosurface.svelte +202 -148
- package/dist/isosurface/IsosurfaceControls.svelte +46 -28
- package/dist/isosurface/parse.js +34 -29
- package/dist/isosurface/slice.js +5 -10
- package/dist/isosurface/types.d.ts +2 -1
- package/dist/isosurface/types.js +61 -12
- package/dist/labels.js +11 -8
- package/dist/layout/FullscreenToggle.svelte +11 -2
- package/dist/layout/InfoCard.svelte +38 -6
- package/dist/layout/InfoTag.svelte +63 -32
- package/dist/layout/PropertyFilter.svelte +82 -37
- package/dist/layout/SettingsSection.svelte +85 -55
- package/dist/layout/SubpageGrid.svelte +10 -2
- package/dist/layout/json-tree/JsonNode.svelte +183 -138
- package/dist/layout/json-tree/JsonTree.svelte +499 -413
- package/dist/layout/json-tree/JsonValue.svelte +127 -99
- package/dist/layout/json-tree/utils.js +4 -2
- package/dist/marching-cubes.js +25 -2
- package/dist/math.d.ts +13 -17
- package/dist/math.js +133 -67
- package/dist/overlays/ContextMenu.svelte +65 -40
- package/dist/overlays/DraggablePane.svelte +211 -139
- package/dist/periodic-table/PeriodicTable.svelte +278 -145
- package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
- package/dist/periodic-table/PropertySelect.svelte +25 -7
- package/dist/periodic-table/TableInset.svelte +8 -3
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +446 -309
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramControls.svelte +102 -43
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +63 -40
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +71 -28
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +158 -101
- package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
- package/dist/phase-diagram/build-diagram.js +9 -9
- package/dist/phase-diagram/colors.js +1 -3
- package/dist/phase-diagram/parse.js +10 -9
- package/dist/phase-diagram/svg-to-diagram.js +53 -49
- package/dist/phase-diagram/utils.d.ts +1 -0
- package/dist/phase-diagram/utils.js +80 -25
- package/dist/plot/AxisLabel.svelte +28 -3
- package/dist/plot/BarPlot.svelte +1182 -734
- package/dist/plot/BarPlot.svelte.d.ts +2 -2
- package/dist/plot/BarPlotControls.svelte +31 -5
- package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ColorBar.svelte +479 -329
- package/dist/plot/ColorScaleSelect.svelte +27 -6
- package/dist/plot/ElementScatter.svelte +36 -15
- package/dist/plot/FillArea.svelte +152 -95
- package/dist/plot/Histogram.svelte +934 -571
- package/dist/plot/Histogram.svelte.d.ts +1 -1
- package/dist/plot/HistogramControls.svelte +53 -9
- package/dist/plot/HistogramControls.svelte.d.ts +1 -1
- package/dist/plot/InteractiveAxisLabel.svelte +34 -11
- package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/Line.svelte +63 -28
- package/dist/plot/PlotControls.svelte +157 -114
- package/dist/plot/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/PlotLegend.svelte +174 -91
- package/dist/plot/PlotTooltip.svelte +45 -6
- package/dist/plot/PortalSelect.svelte +175 -147
- package/dist/plot/ReferenceLine.svelte +76 -22
- package/dist/plot/ReferenceLine3D.svelte +132 -107
- package/dist/plot/ReferencePlane.svelte +146 -121
- package/dist/plot/ScatterPlot.svelte +1681 -1091
- package/dist/plot/ScatterPlot.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlot3D.svelte +256 -131
- package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlot3DControls.svelte +113 -63
- package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
- package/dist/plot/ScatterPlot3DScene.svelte +608 -403
- package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlotControls.svelte +65 -25
- package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ScatterPoint.svelte +98 -26
- package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
- package/dist/plot/SpacegroupBarPlot.svelte +142 -85
- package/dist/plot/Surface3D.svelte +159 -108
- package/dist/plot/ZeroLines.svelte +55 -3
- package/dist/plot/ZoomRect.svelte +4 -2
- package/dist/plot/axis-utils.js +1 -3
- package/dist/plot/data-cleaning.js +12 -28
- package/dist/plot/data-transform.js +2 -1
- package/dist/plot/fill-utils.js +2 -0
- package/dist/plot/layout.d.ts +4 -1
- package/dist/plot/layout.js +33 -14
- package/dist/plot/reference-line.d.ts +2 -2
- package/dist/plot/reference-line.js +7 -5
- package/dist/plot/scales.js +24 -36
- package/dist/plot/types.d.ts +11 -23
- package/dist/plot/types.js +6 -11
- package/dist/plot/utils/label-placement.d.ts +32 -15
- package/dist/plot/utils/label-placement.js +227 -66
- package/dist/plot/utils/series-visibility.js +2 -3
- package/dist/rdf/RdfPlot.svelte +143 -91
- package/dist/rdf/calc-rdf.js +4 -5
- package/dist/sanitize.d.ts +4 -0
- package/dist/sanitize.js +107 -0
- package/dist/settings.d.ts +18 -6
- package/dist/settings.js +46 -16
- package/dist/spectral/Bands.svelte +632 -453
- package/dist/spectral/BandsAndDos.svelte +90 -49
- package/dist/spectral/BrillouinBandsDos.svelte +151 -93
- package/dist/spectral/Dos.svelte +389 -258
- package/dist/spectral/helpers.js +55 -43
- package/dist/state.svelte.d.ts +1 -1
- package/dist/state.svelte.js +3 -2
- package/dist/structure/Arrow.svelte +59 -20
- package/dist/structure/AtomLegend.svelte +215 -134
- package/dist/structure/Bond.svelte +73 -47
- package/dist/structure/CanvasTooltip.svelte +10 -2
- package/dist/structure/CellSelect.svelte +72 -45
- package/dist/structure/Cylinder.svelte +33 -17
- package/dist/structure/Lattice.svelte +88 -33
- package/dist/structure/Structure.svelte +1063 -797
- package/dist/structure/Structure.svelte.d.ts +1 -1
- package/dist/structure/StructureControls.svelte +349 -118
- package/dist/structure/StructureExportPane.svelte +124 -89
- package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
- package/dist/structure/StructureInfoPane.svelte +304 -237
- package/dist/structure/StructureScene.svelte +879 -443
- package/dist/structure/StructureScene.svelte.d.ts +15 -7
- package/dist/structure/atom-properties.js +8 -8
- package/dist/structure/bonding.js +6 -7
- package/dist/structure/export.js +14 -29
- package/dist/structure/ferrox-wasm.js +1 -1
- package/dist/structure/index.d.ts +13 -3
- package/dist/structure/index.js +83 -23
- package/dist/structure/measure.d.ts +2 -2
- package/dist/structure/measure.js +4 -44
- package/dist/structure/parse.js +113 -141
- package/dist/structure/partial-occupancy.js +7 -10
- package/dist/structure/pbc.d.ts +1 -0
- package/dist/structure/pbc.js +16 -6
- package/dist/structure/supercell.d.ts +2 -2
- package/dist/structure/supercell.js +12 -22
- package/dist/structure/validation.js +1 -2
- package/dist/symmetry/SymmetryStats.svelte +84 -41
- package/dist/symmetry/WyckoffTable.svelte +26 -6
- package/dist/symmetry/cell-transform.js +5 -3
- package/dist/symmetry/index.js +8 -7
- package/dist/symmetry/spacegroups.js +148 -148
- package/dist/table/HeatmapTable.svelte +790 -554
- package/dist/table/HeatmapTable.svelte.d.ts +1 -1
- package/dist/table/ToggleMenu.svelte +125 -92
- package/dist/table/index.js +2 -4
- package/dist/theme/ThemeControl.svelte +21 -12
- package/dist/time.js +4 -1
- package/dist/tooltip/TooltipContent.svelte +33 -8
- package/dist/trajectory/Trajectory.svelte +758 -558
- package/dist/trajectory/TrajectoryError.svelte +14 -3
- package/dist/trajectory/TrajectoryExportPane.svelte +137 -83
- package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
- package/dist/trajectory/extract.js +10 -26
- package/dist/trajectory/format-detect.js +5 -5
- package/dist/trajectory/frame-reader.d.ts +1 -1
- package/dist/trajectory/frame-reader.js +5 -12
- package/dist/trajectory/helpers.d.ts +0 -1
- package/dist/trajectory/helpers.js +2 -17
- package/dist/trajectory/index.js +14 -12
- package/dist/trajectory/parse/ase.js +5 -4
- package/dist/trajectory/parse/hdf5.js +26 -18
- package/dist/trajectory/parse/index.js +13 -18
- package/dist/trajectory/parse/lammps.js +17 -7
- package/dist/trajectory/parse/vasp.js +5 -2
- package/dist/trajectory/parse/xyz.js +8 -7
- package/dist/trajectory/plotting.js +13 -8
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +13 -0
- package/dist/xrd/XrdPlot.svelte +337 -247
- package/dist/xrd/broadening.js +14 -9
- package/dist/xrd/calc-xrd.js +12 -18
- package/dist/xrd/parse.d.ts +1 -1
- package/dist/xrd/parse.js +17 -17
- package/package.json +99 -103
- package/readme.md +1 -1
- /package/dist/theme/{themes.js → themes.mjs} +0 -0
|
@@ -45,6 +45,6 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & BasePlotProps & PlotCon
|
|
|
45
45
|
on_error?: (error: AxisLoadError) => void;
|
|
46
46
|
pan?: PanConfig;
|
|
47
47
|
};
|
|
48
|
-
declare const Histogram: import("svelte").Component<$$ComponentProps, {}, "mode" | "
|
|
48
|
+
declare const Histogram: import("svelte").Component<$$ComponentProps, {}, "mode" | "fullscreen" | "series" | "bins" | "show_legend" | "selected_property" | "hovered" | "ref_lines" | "show_controls" | "controls_open">;
|
|
49
49
|
type Histogram = ReturnType<typeof Histogram>;
|
|
50
50
|
export default Histogram;
|
|
@@ -1,12 +1,56 @@
|
|
|
1
|
-
<script lang="ts"
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// NOTE: Axis config objects must be reassigned (not mutated) to trigger $bindable reactivity.
|
|
3
|
+
import { SettingsSection } from '../layout'
|
|
4
|
+
import type { Vec2 } from '../math'
|
|
5
|
+
import type { BarStyle, DataSeries, PlotConfig } from './'
|
|
6
|
+
import { PlotControls } from './'
|
|
7
|
+
import type { PlotControlsProps } from './types'
|
|
8
|
+
import { DEFAULTS } from '../settings'
|
|
9
|
+
import type { Snippet } from 'svelte'
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
series = [],
|
|
13
|
+
bins = $bindable(DEFAULTS.histogram.bin_count),
|
|
14
|
+
mode = $bindable(DEFAULTS.histogram.mode),
|
|
15
|
+
bar = $bindable({}),
|
|
16
|
+
show_legend = $bindable(DEFAULTS.histogram.show_legend),
|
|
17
|
+
selected_property = $bindable(``),
|
|
18
|
+
x_axis = $bindable({}),
|
|
19
|
+
x2_axis = $bindable({}),
|
|
20
|
+
y_axis = $bindable({}),
|
|
21
|
+
y2_axis = $bindable({}),
|
|
22
|
+
display = $bindable({}),
|
|
23
|
+
show_controls = $bindable(false),
|
|
24
|
+
controls_open = $bindable(false),
|
|
25
|
+
auto_x2_range = undefined,
|
|
26
|
+
auto_y2_range = undefined,
|
|
27
|
+
has_x2_points = false,
|
|
28
|
+
has_y2_points = false,
|
|
29
|
+
children,
|
|
30
|
+
...rest
|
|
31
|
+
}: Omit<PlotControlsProps, `children` | `post_children`> & {
|
|
32
|
+
// Series data for multi-series controls
|
|
33
|
+
series?: readonly DataSeries[]
|
|
34
|
+
// Histogram-specific controls
|
|
35
|
+
bins?: number
|
|
36
|
+
mode?: `single` | `overlay`
|
|
37
|
+
bar?: BarStyle
|
|
38
|
+
show_legend?: boolean
|
|
39
|
+
selected_property?: string
|
|
40
|
+
show_controls?: boolean
|
|
41
|
+
controls_open?: boolean
|
|
42
|
+
auto_x2_range?: Vec2
|
|
43
|
+
auto_y2_range?: Vec2
|
|
44
|
+
has_x2_points?: boolean
|
|
45
|
+
has_y2_points?: boolean
|
|
46
|
+
children?: Snippet<[Required<PlotConfig>]>
|
|
47
|
+
} = $props()
|
|
48
|
+
|
|
49
|
+
bar = { ...DEFAULTS.histogram.bar, ...bar } // Initialize bar styles with defaults (runs once)
|
|
50
|
+
|
|
51
|
+
let has_multiple_series = $derived(series.filter(Boolean).length > 1)
|
|
52
|
+
let visible_series = $derived(series.filter((srs) => srs && (srs.visible ?? true)))
|
|
53
|
+
let series_options = $derived(visible_series.map((srs) => srs.label || `Series`))
|
|
10
54
|
</script>
|
|
11
55
|
|
|
12
56
|
<PlotControls
|
|
@@ -17,6 +17,6 @@ type $$ComponentProps = Omit<PlotControlsProps, `children` | `post_children`> &
|
|
|
17
17
|
has_y2_points?: boolean;
|
|
18
18
|
children?: Snippet<[Required<PlotConfig>]>;
|
|
19
19
|
};
|
|
20
|
-
declare const HistogramControls: import("svelte").Component<$$ComponentProps, {}, "display" | "mode" | "
|
|
20
|
+
declare const HistogramControls: import("svelte").Component<$$ComponentProps, {}, "display" | "mode" | "bins" | "show_legend" | "selected_property" | "show_controls" | "controls_open" | "x_axis" | "y_axis" | "bar" | "x2_axis" | "y2_axis">;
|
|
21
21
|
type HistogramControls = ReturnType<typeof HistogramControls>;
|
|
22
22
|
export default HistogramControls;
|
|
@@ -1,13 +1,36 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Spinner from '../feedback/Spinner.svelte'
|
|
3
|
+
import { sanitize_html } from '../sanitize'
|
|
4
|
+
import PortalSelect from './PortalSelect.svelte'
|
|
5
|
+
import type { AxisOption } from './types'
|
|
6
|
+
|
|
7
|
+
let {
|
|
8
|
+
label = ``,
|
|
9
|
+
options = undefined,
|
|
10
|
+
selected_key = $bindable(),
|
|
11
|
+
loading = $bindable(false),
|
|
12
|
+
axis_type = `x`,
|
|
13
|
+
color = $bindable(),
|
|
14
|
+
on_select,
|
|
15
|
+
...rest
|
|
16
|
+
}: {
|
|
17
|
+
label?: string
|
|
18
|
+
options?: AxisOption[]
|
|
19
|
+
selected_key?: string
|
|
20
|
+
loading?: boolean
|
|
21
|
+
axis_type?: `x` | `x2` | `y` | `y2`
|
|
22
|
+
color?: string | null
|
|
23
|
+
on_select?: (key: string) => void
|
|
24
|
+
[key: string]: unknown
|
|
25
|
+
} = $props()
|
|
26
|
+
|
|
27
|
+
let is_interactive = $derived(Boolean(options?.length))
|
|
28
|
+
|
|
29
|
+
const stop = (evt: Event) => evt.stopPropagation()
|
|
30
|
+
// Only stop propagation for keys the dropdown handles, allow Tab/Escape for navigation
|
|
31
|
+
const stop_key = (evt: KeyboardEvent) => {
|
|
32
|
+
if (![`Tab`, `Escape`].includes(evt.key)) evt.stopPropagation()
|
|
33
|
+
}
|
|
11
34
|
</script>
|
|
12
35
|
|
|
13
36
|
<div
|
|
@@ -36,7 +59,7 @@ const stop_key = (evt) => {
|
|
|
36
59
|
/>
|
|
37
60
|
{/if}
|
|
38
61
|
{:else}
|
|
39
|
-
<span class="static-label">{@html label}</span>
|
|
62
|
+
<span class="static-label">{@html sanitize_html(label)}</span>
|
|
40
63
|
{/if}
|
|
41
64
|
</div>
|
|
42
65
|
|
|
@@ -9,6 +9,6 @@ type $$ComponentProps = {
|
|
|
9
9
|
on_select?: (key: string) => void;
|
|
10
10
|
[key: string]: unknown;
|
|
11
11
|
};
|
|
12
|
-
declare const InteractiveAxisLabel: import("svelte").Component<$$ComponentProps, {}, "color" | "
|
|
12
|
+
declare const InteractiveAxisLabel: import("svelte").Component<$$ComponentProps, {}, "color" | "loading" | "selected_key">;
|
|
13
13
|
type InteractiveAxisLabel = ReturnType<typeof InteractiveAxisLabel>;
|
|
14
14
|
export default InteractiveAxisLabel;
|
package/dist/plot/Line.svelte
CHANGED
|
@@ -1,36 +1,71 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { TweenedOptions } from './'
|
|
3
|
+
import { DEFAULTS } from '../settings'
|
|
4
|
+
import { extent, min } from 'd3-array'
|
|
5
|
+
import { interpolatePath } from 'd3-interpolate-path'
|
|
6
|
+
import { curveMonotoneX, line } from 'd3-shape'
|
|
7
|
+
import { untrack } from 'svelte'
|
|
8
|
+
import { linear } from 'svelte/easing'
|
|
9
|
+
import type { SVGAttributes } from 'svelte/elements'
|
|
10
|
+
import { Tween } from 'svelte/motion'
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
points,
|
|
14
|
+
origin = [0, 0],
|
|
15
|
+
line_color = `rgba(255, 255, 255, 0.5)`,
|
|
16
|
+
line_width = 2,
|
|
17
|
+
area_color = `rgba(255, 255, 255, 0.1)`,
|
|
18
|
+
area_stroke = null,
|
|
19
|
+
line_tween = {},
|
|
20
|
+
line_dash = DEFAULTS.scatter.line.dash,
|
|
21
|
+
...rest
|
|
22
|
+
}: Omit<SVGAttributes<SVGPathElement>, `origin` | `points`> & {
|
|
23
|
+
points: readonly [number, number][]
|
|
24
|
+
origin: [number, number]
|
|
25
|
+
line_color?: string
|
|
26
|
+
line_width?: number
|
|
27
|
+
area_color?: string
|
|
28
|
+
area_stroke?: string | null
|
|
29
|
+
line_tween?: TweenedOptions<string>
|
|
30
|
+
line_dash?: string
|
|
31
|
+
} = $props()
|
|
32
|
+
|
|
33
|
+
const lineGenerator = line()
|
|
10
34
|
.x((point) => point[0])
|
|
11
35
|
.y((point) => point[1])
|
|
12
|
-
.curve(curveMonotoneX)
|
|
13
|
-
|
|
14
|
-
let
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
.curve(curveMonotoneX)
|
|
37
|
+
|
|
38
|
+
let [x_min, x_max] = $derived(extent(points.map((point) => point[0])))
|
|
39
|
+
let line_path = $derived(lineGenerator(points) ?? ``)
|
|
40
|
+
let ymin = $derived(origin[1] ?? min(points.map((point) => point[1])))
|
|
41
|
+
// Guard against NaN/Infinity in area_path coords (can happen during scale transitions)
|
|
42
|
+
let area_path = $derived(
|
|
43
|
+
line_path && isFinite(x_min ?? NaN) && isFinite(x_max ?? NaN) &&
|
|
44
|
+
isFinite(ymin ?? NaN)
|
|
45
|
+
? `${line_path}L${x_max},${ymin}L${x_min},${ymin}Z`
|
|
46
|
+
: ``,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
const default_tween = {
|
|
22
50
|
duration: 300,
|
|
23
51
|
easing: linear,
|
|
24
52
|
interpolate: interpolatePath,
|
|
25
|
-
}
|
|
26
|
-
// Tween objects are stateful - create once, update target via effect
|
|
27
|
-
// untrack() explicitly captures initial tween config (intentional - config set once at mount)
|
|
28
|
-
const tweened_line = new Tween(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
53
|
+
}
|
|
54
|
+
// Tween objects are stateful - create once, update target via effect
|
|
55
|
+
// untrack() explicitly captures initial tween config (intentional - config set once at mount)
|
|
56
|
+
const tweened_line = new Tween(
|
|
57
|
+
``,
|
|
58
|
+
untrack(() => ({ ...default_tween, ...line_tween })),
|
|
59
|
+
)
|
|
60
|
+
const tweened_area = new Tween(
|
|
61
|
+
``,
|
|
62
|
+
untrack(() => ({ ...default_tween, ...line_tween })),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
$effect.pre(() => {
|
|
66
|
+
tweened_line.target = line_path
|
|
67
|
+
tweened_area.target = area_path
|
|
68
|
+
})
|
|
34
69
|
</script>
|
|
35
70
|
|
|
36
71
|
<path
|
|
@@ -1,98 +1,141 @@
|
|
|
1
|
-
<script lang="ts"
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// NOTE: Axis config objects (x_axis, x2_axis, y_axis, y2_axis) must be reassigned (not mutated)
|
|
3
|
+
// to trigger $bindable reactivity propagation to parent components.
|
|
4
|
+
// Pattern: `x_axis = { ...x_axis, prop: value }` instead of `x_axis.prop = value`
|
|
5
|
+
import SettingsSection from '../layout/SettingsSection.svelte'
|
|
6
|
+
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
7
|
+
import { DEFAULTS } from '../settings'
|
|
8
|
+
import { format } from 'd3-format'
|
|
9
|
+
import { timeFormat } from 'd3-time-format'
|
|
10
|
+
import { tooltip } from 'svelte-multiselect/attachments'
|
|
11
|
+
import type { Vec2 } from '../math'
|
|
12
|
+
import type { AxisKey, PlotControlsProps } from './index'
|
|
13
|
+
import { normalize_y2_sync } from './interactions'
|
|
14
|
+
import { get_scale_type_name, is_scale_type_name, is_y2_sync_mode } from './types'
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
show_controls = $bindable(false),
|
|
18
|
+
controls_open = $bindable(false),
|
|
19
|
+
children,
|
|
20
|
+
post_children,
|
|
21
|
+
x_axis = $bindable({}),
|
|
22
|
+
x2_axis = $bindable({}),
|
|
23
|
+
y_axis = $bindable({}),
|
|
24
|
+
y2_axis = $bindable({}),
|
|
25
|
+
display = $bindable({}),
|
|
26
|
+
auto_x_range = [0, 1],
|
|
27
|
+
auto_x2_range = undefined,
|
|
28
|
+
auto_y_range = [0, 1],
|
|
29
|
+
auto_y2_range = undefined,
|
|
30
|
+
has_x2_points = false,
|
|
31
|
+
has_y2_points = false,
|
|
32
|
+
show_ticks = false,
|
|
33
|
+
controls_title = `plot`,
|
|
34
|
+
controls_class = ``,
|
|
35
|
+
toggle_props = {},
|
|
36
|
+
pane_props = {},
|
|
37
|
+
}: PlotControlsProps = $props()
|
|
38
|
+
|
|
39
|
+
// Range input state
|
|
40
|
+
let range_inputs: Record<AxisKey, [number | null, number | null]> = $state(
|
|
41
|
+
{ x: [null, null], x2: [null, null], y: [null, null], y2: [null, null] },
|
|
42
|
+
)
|
|
43
|
+
let range_els = $state<Record<string, HTMLInputElement>>({})
|
|
44
|
+
|
|
45
|
+
// Check if an axis range spans zero (handles inverted ranges like [3.5, 1.4])
|
|
46
|
+
const range_spans_zero = (lo: number, hi: number): boolean =>
|
|
47
|
+
Math.min(lo, hi) <= 0 && Math.max(lo, hi) >= 0
|
|
48
|
+
|
|
49
|
+
let x_includes_zero = $derived(
|
|
50
|
+
range_spans_zero(
|
|
51
|
+
x_axis.range?.[0] ?? auto_x_range[0],
|
|
52
|
+
x_axis.range?.[1] ?? auto_x_range[1],
|
|
53
|
+
),
|
|
54
|
+
)
|
|
55
|
+
let x2_includes_zero = $derived(
|
|
56
|
+
has_x2_points && auto_x2_range != null &&
|
|
57
|
+
range_spans_zero(
|
|
58
|
+
x2_axis.range?.[0] ?? auto_x2_range[0],
|
|
59
|
+
x2_axis.range?.[1] ?? auto_x2_range[1],
|
|
60
|
+
),
|
|
61
|
+
)
|
|
62
|
+
let y_includes_zero = $derived(
|
|
63
|
+
range_spans_zero(
|
|
64
|
+
y_axis.range?.[0] ?? auto_y_range[0],
|
|
65
|
+
y_axis.range?.[1] ?? auto_y_range[1],
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
let y2_includes_zero = $derived(
|
|
69
|
+
has_y2_points && auto_y2_range != null &&
|
|
70
|
+
range_spans_zero(
|
|
71
|
+
y2_axis.range?.[0] ?? auto_y2_range[0],
|
|
72
|
+
y2_axis.range?.[1] ?? auto_y2_range[1],
|
|
73
|
+
),
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
// Validation function for format specifiers
|
|
77
|
+
function is_valid_format(format_string: string): boolean {
|
|
78
|
+
if (!format_string) return true
|
|
28
79
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
catch {
|
|
39
|
-
return false;
|
|
80
|
+
if (format_string.startsWith(`%`)) {
|
|
81
|
+
timeFormat(format_string)(new Date())
|
|
82
|
+
return true
|
|
83
|
+
} else {
|
|
84
|
+
format(format_string)(123.456)
|
|
85
|
+
return true
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
return false
|
|
40
89
|
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Handle format input changes
|
|
93
|
+
const format_input_handler = (format_type: AxisKey) => (event: Event) => {
|
|
94
|
+
const input = event.target
|
|
95
|
+
if (!(input instanceof HTMLInputElement)) return
|
|
47
96
|
if (!is_valid_format(input.value)) {
|
|
48
|
-
|
|
49
|
-
|
|
97
|
+
input.classList.add(`invalid`)
|
|
98
|
+
return
|
|
50
99
|
}
|
|
51
|
-
input.classList.remove(`invalid`)
|
|
52
|
-
if (format_type === `x`)
|
|
53
|
-
|
|
54
|
-
else if (format_type === `
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (invalid)
|
|
71
|
-
return;
|
|
72
|
-
const axis_config = { x: x_axis, x2: x2_axis, y: y_axis, y2: y2_axis }[axis];
|
|
100
|
+
input.classList.remove(`invalid`)
|
|
101
|
+
if (format_type === `x`) x_axis = { ...x_axis, format: input.value }
|
|
102
|
+
else if (format_type === `x2`) x2_axis = { ...x2_axis, format: input.value }
|
|
103
|
+
else if (format_type === `y`) y_axis = { ...y_axis, format: input.value }
|
|
104
|
+
else y2_axis = { ...y2_axis, format: input.value }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Handle range input changes
|
|
108
|
+
const update_range = (axis: AxisKey, bound: 0 | 1, value: string) => {
|
|
109
|
+
const parsed = value === `` ? null : Number(value)
|
|
110
|
+
range_inputs[axis][bound] = Number.isFinite(parsed) ? parsed : null
|
|
111
|
+
const [min, max] = range_inputs[axis]
|
|
112
|
+
const auto =
|
|
113
|
+
{ x: auto_x_range, x2: auto_x2_range, y: auto_y_range, y2: auto_y2_range }[axis]
|
|
114
|
+
const invalid = min !== null && max !== null && min >= max
|
|
115
|
+
range_els[`${axis}-min`]?.classList.toggle(`invalid`, invalid)
|
|
116
|
+
range_els[`${axis}-max`]?.classList.toggle(`invalid`, invalid)
|
|
117
|
+
if (invalid) return
|
|
118
|
+
const axis_config = { x: x_axis, x2: x2_axis, y: y_axis, y2: y2_axis }[axis]
|
|
73
119
|
const next_range = min === null && max === null
|
|
74
|
-
|
|
75
|
-
|
|
120
|
+
? undefined
|
|
121
|
+
: [min ?? auto?.[0] ?? 0, max ?? auto?.[1] ?? 1] as Vec2
|
|
76
122
|
// If auto range is undefined, only set if both min and max are provided
|
|
77
|
-
if (!auto && (min === null || max === null))
|
|
78
|
-
|
|
79
|
-
if (axis === `
|
|
80
|
-
|
|
81
|
-
else
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
range_inputs.y2 = [y2_axis.range?.[0] ?? null, y2_axis.range?.[1] ?? null];
|
|
94
|
-
});
|
|
95
|
-
let ctrl_state = $derived({
|
|
123
|
+
if (!auto && (min === null || max === null)) return
|
|
124
|
+
if (axis === `x`) x_axis = { ...axis_config, range: next_range }
|
|
125
|
+
else if (axis === `x2`) x2_axis = { ...axis_config, range: next_range }
|
|
126
|
+
else if (axis === `y`) y_axis = { ...axis_config, range: next_range }
|
|
127
|
+
else y2_axis = { ...axis_config, range: next_range }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Sync range inputs from props
|
|
131
|
+
$effect(() => {
|
|
132
|
+
range_inputs.x = [x_axis.range?.[0] ?? null, x_axis.range?.[1] ?? null]
|
|
133
|
+
range_inputs.x2 = [x2_axis.range?.[0] ?? null, x2_axis.range?.[1] ?? null]
|
|
134
|
+
range_inputs.y = [y_axis.range?.[0] ?? null, y_axis.range?.[1] ?? null]
|
|
135
|
+
range_inputs.y2 = [y2_axis.range?.[0] ?? null, y2_axis.range?.[1] ?? null]
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
let ctrl_state = $derived({
|
|
96
139
|
show_controls,
|
|
97
140
|
controls_open,
|
|
98
141
|
x_axis,
|
|
@@ -101,7 +144,7 @@ let ctrl_state = $derived({
|
|
|
101
144
|
y2_axis,
|
|
102
145
|
display,
|
|
103
146
|
range_inputs,
|
|
104
|
-
})
|
|
147
|
+
})
|
|
105
148
|
</script>
|
|
106
149
|
|
|
107
150
|
{#if show_controls}
|
|
@@ -215,16 +258,16 @@ let ctrl_state = $derived({
|
|
|
215
258
|
bind:this={range_els[`${axis}-min`]}
|
|
216
259
|
placeholder="auto"
|
|
217
260
|
class="range-input"
|
|
218
|
-
oninput={(
|
|
219
|
-
onkeydown={(
|
|
261
|
+
oninput={(evt) => update_range(axis, 0, evt.currentTarget.value)}
|
|
262
|
+
onkeydown={(evt) => evt.key === `Enter` && evt.currentTarget?.blur()}
|
|
220
263
|
/> to <input
|
|
221
264
|
type="number"
|
|
222
265
|
value={range_inputs[axis][1] ?? ``}
|
|
223
266
|
bind:this={range_els[`${axis}-max`]}
|
|
224
267
|
placeholder="auto"
|
|
225
268
|
class="range-input"
|
|
226
|
-
oninput={(
|
|
227
|
-
onkeydown={(
|
|
269
|
+
oninput={(evt) => update_range(axis, 1, evt.currentTarget.value)}
|
|
270
|
+
onkeydown={(evt) => evt.key === `Enter` && evt.currentTarget?.blur()}
|
|
228
271
|
/>
|
|
229
272
|
</label>
|
|
230
273
|
{/each}
|
|
@@ -249,12 +292,12 @@ let ctrl_state = $derived({
|
|
|
249
292
|
max={max_ticks}
|
|
250
293
|
step="1"
|
|
251
294
|
value={typeof x_axis.ticks === `number` ? x_axis.ticks : 8}
|
|
252
|
-
oninput={(
|
|
253
|
-
const
|
|
254
|
-
if (isNaN(
|
|
295
|
+
oninput={(evt) => {
|
|
296
|
+
const parsed = parseInt(evt.currentTarget.value, 10)
|
|
297
|
+
if (isNaN(parsed)) return
|
|
255
298
|
x_axis = {
|
|
256
299
|
...x_axis,
|
|
257
|
-
ticks: Math.max(min_ticks, Math.min(max_ticks,
|
|
300
|
+
ticks: Math.max(min_ticks, Math.min(max_ticks, parsed)),
|
|
258
301
|
}
|
|
259
302
|
}}
|
|
260
303
|
/>
|
|
@@ -266,12 +309,12 @@ let ctrl_state = $derived({
|
|
|
266
309
|
max={max_ticks}
|
|
267
310
|
step="1"
|
|
268
311
|
value={typeof y_axis.ticks === `number` ? y_axis.ticks : 6}
|
|
269
|
-
oninput={(
|
|
270
|
-
const
|
|
271
|
-
if (isNaN(
|
|
312
|
+
oninput={(evt) => {
|
|
313
|
+
const parsed = parseInt(evt.currentTarget.value, 10)
|
|
314
|
+
if (isNaN(parsed)) return
|
|
272
315
|
y_axis = {
|
|
273
316
|
...y_axis,
|
|
274
|
-
ticks: Math.max(min_ticks, Math.min(max_ticks,
|
|
317
|
+
ticks: Math.max(min_ticks, Math.min(max_ticks, parsed)),
|
|
275
318
|
}
|
|
276
319
|
}}
|
|
277
320
|
/>
|
|
@@ -299,8 +342,8 @@ let ctrl_state = $derived({
|
|
|
299
342
|
<label>X:
|
|
300
343
|
<select
|
|
301
344
|
value={get_scale_type_name(x_axis.scale_type)}
|
|
302
|
-
onchange={(
|
|
303
|
-
const val =
|
|
345
|
+
onchange={(evt) => {
|
|
346
|
+
const val = evt.currentTarget.value
|
|
304
347
|
x_axis = {
|
|
305
348
|
...x_axis,
|
|
306
349
|
scale_type: is_scale_type_name(val) ? val : `linear`,
|
|
@@ -316,8 +359,8 @@ let ctrl_state = $derived({
|
|
|
316
359
|
<label>X2:
|
|
317
360
|
<select
|
|
318
361
|
value={get_scale_type_name(x2_axis.scale_type)}
|
|
319
|
-
onchange={(
|
|
320
|
-
const val =
|
|
362
|
+
onchange={(evt) => {
|
|
363
|
+
const val = evt.currentTarget.value
|
|
321
364
|
x2_axis = {
|
|
322
365
|
...x2_axis,
|
|
323
366
|
scale_type: is_scale_type_name(val) ? val : `linear`,
|
|
@@ -333,8 +376,8 @@ let ctrl_state = $derived({
|
|
|
333
376
|
<label>Y:
|
|
334
377
|
<select
|
|
335
378
|
value={get_scale_type_name(y_axis.scale_type)}
|
|
336
|
-
onchange={(
|
|
337
|
-
const val =
|
|
379
|
+
onchange={(evt) => {
|
|
380
|
+
const val = evt.currentTarget.value
|
|
338
381
|
y_axis = {
|
|
339
382
|
...y_axis,
|
|
340
383
|
scale_type: is_scale_type_name(val) ? val : `linear`,
|
|
@@ -350,8 +393,8 @@ let ctrl_state = $derived({
|
|
|
350
393
|
<label>Y2:
|
|
351
394
|
<select
|
|
352
395
|
value={get_scale_type_name(y2_axis.scale_type)}
|
|
353
|
-
onchange={(
|
|
354
|
-
const val =
|
|
396
|
+
onchange={(evt) => {
|
|
397
|
+
const val = evt.currentTarget.value
|
|
355
398
|
y2_axis = {
|
|
356
399
|
...y2_axis,
|
|
357
400
|
scale_type: is_scale_type_name(val) ? val : `linear`,
|
|
@@ -385,8 +428,8 @@ let ctrl_state = $derived({
|
|
|
385
428
|
<select
|
|
386
429
|
value={current_sync.mode}
|
|
387
430
|
aria-label="Y2 axis synchronization mode"
|
|
388
|
-
onchange={(
|
|
389
|
-
const val =
|
|
431
|
+
onchange={(evt) => {
|
|
432
|
+
const val = evt.currentTarget.value
|
|
390
433
|
const mode = is_y2_sync_mode(val) ? val : `none`
|
|
391
434
|
if (mode === `none`) {
|
|
392
435
|
y2_axis = { ...y2_axis, sync: undefined }
|
|
@@ -412,8 +455,8 @@ let ctrl_state = $derived({
|
|
|
412
455
|
value={current_sync.align_value ?? 0}
|
|
413
456
|
aria-label="Value to align on both axes"
|
|
414
457
|
style="width: 5em"
|
|
415
|
-
onchange={(
|
|
416
|
-
const val = parseFloat(
|
|
458
|
+
onchange={(evt) => {
|
|
459
|
+
const val = parseFloat(evt.currentTarget.value)
|
|
417
460
|
y2_axis = {
|
|
418
461
|
...y2_axis,
|
|
419
462
|
sync: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { PlotControlsProps } from './index';
|
|
2
|
-
declare const PlotControls: import("svelte").Component<PlotControlsProps, {}, "display" | "show_controls" | "controls_open" | "x_axis" | "
|
|
2
|
+
declare const PlotControls: import("svelte").Component<PlotControlsProps, {}, "display" | "show_controls" | "controls_open" | "x_axis" | "y_axis" | "x2_axis" | "y2_axis">;
|
|
3
3
|
type PlotControls = ReturnType<typeof PlotControls>;
|
|
4
4
|
export default PlotControls;
|