matterviz 0.3.2 → 0.3.4
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/element/data.js +1 -1
- 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
|
@@ -39,6 +39,6 @@ type Props = HTMLAttributes<HTMLDivElement> & {
|
|
|
39
39
|
}
|
|
40
40
|
]>;
|
|
41
41
|
};
|
|
42
|
-
declare const IsobaricBinaryPhaseDiagram: import("svelte").Component<Props, {}, "
|
|
42
|
+
declare const IsobaricBinaryPhaseDiagram: import("svelte").Component<Props, {}, "fullscreen" | "controls_open" | "x_axis" | "y_axis" | "show_grid" | "wrapper" | "hovered_region" | "config" | "show_boundaries" | "show_labels" | "show_special_points" | "show_component_labels" | "png_dpi" | "export_pane_open" | "lever_rule_mode" | "editor_open" | "diagram_input" | "display_temp_unit">;
|
|
43
43
|
type IsobaricBinaryPhaseDiagram = ReturnType<typeof IsobaricBinaryPhaseDiagram>;
|
|
44
44
|
export default IsobaricBinaryPhaseDiagram;
|
|
@@ -1,46 +1,105 @@
|
|
|
1
|
-
<script lang="ts"
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// NOTE: Axis config objects must be reassigned (not mutated) to trigger $bindable reactivity.
|
|
3
|
+
import { css_color_to_hex } from '../colors'
|
|
4
|
+
import { format_num } from '../labels'
|
|
5
|
+
import SettingsSection from '../layout/SettingsSection.svelte'
|
|
6
|
+
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
7
|
+
import type { AxisConfig } from '../plot'
|
|
8
|
+
import type { ComponentProps, Snippet } from 'svelte'
|
|
9
|
+
import { tooltip } from 'svelte-multiselect/attachments'
|
|
10
|
+
import type { LeverRuleMode, PhaseDiagramConfig, PhaseDiagramData } from './types'
|
|
11
|
+
import { merge_phase_diagram_config, PHASE_DIAGRAM_DEFAULTS } from './utils'
|
|
12
|
+
|
|
13
|
+
type Props = Omit<ComponentProps<typeof DraggablePane>, `children`> & {
|
|
14
|
+
controls_open?: boolean
|
|
15
|
+
// Visibility toggles
|
|
16
|
+
show_boundaries?: boolean
|
|
17
|
+
show_labels?: boolean
|
|
18
|
+
show_special_points?: boolean
|
|
19
|
+
show_grid?: boolean
|
|
20
|
+
show_component_labels?: boolean
|
|
21
|
+
// Configuration
|
|
22
|
+
config?: Partial<PhaseDiagramConfig>
|
|
23
|
+
// Lever rule mode
|
|
24
|
+
lever_rule_mode?: LeverRuleMode
|
|
25
|
+
// Axis configuration
|
|
26
|
+
x_axis?: AxisConfig
|
|
27
|
+
y_axis?: AxisConfig
|
|
28
|
+
// Data for context (components, units, etc.)
|
|
29
|
+
data?: PhaseDiagramData
|
|
30
|
+
// Export settings
|
|
31
|
+
enable_export?: boolean
|
|
32
|
+
png_dpi?: number
|
|
33
|
+
// Pane customization
|
|
34
|
+
pane_props?: ComponentProps<typeof DraggablePane>[`pane_props`]
|
|
35
|
+
toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
|
|
36
|
+
// Custom content snippets
|
|
37
|
+
children?: Snippet<[{ controls_open: boolean }]>
|
|
38
|
+
post_children?: Snippet<[{ controls_open: boolean }]>
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let {
|
|
42
|
+
controls_open = $bindable(false),
|
|
43
|
+
// Visibility toggles
|
|
44
|
+
show_boundaries = $bindable(PHASE_DIAGRAM_DEFAULTS.show_boundaries),
|
|
45
|
+
show_labels = $bindable(PHASE_DIAGRAM_DEFAULTS.show_labels),
|
|
46
|
+
show_special_points = $bindable(PHASE_DIAGRAM_DEFAULTS.show_special_points),
|
|
47
|
+
show_grid = $bindable(PHASE_DIAGRAM_DEFAULTS.show_grid),
|
|
48
|
+
show_component_labels = $bindable(PHASE_DIAGRAM_DEFAULTS.show_component_labels),
|
|
49
|
+
// Configuration
|
|
50
|
+
config = $bindable({}),
|
|
51
|
+
// Lever rule mode
|
|
52
|
+
lever_rule_mode = $bindable(`horizontal`),
|
|
53
|
+
// Axis configuration
|
|
54
|
+
x_axis = $bindable({}),
|
|
55
|
+
y_axis = $bindable({}),
|
|
56
|
+
// Data
|
|
57
|
+
data,
|
|
58
|
+
// Export
|
|
59
|
+
enable_export = true,
|
|
60
|
+
png_dpi = $bindable(PHASE_DIAGRAM_DEFAULTS.png_dpi),
|
|
61
|
+
// Pane props
|
|
62
|
+
pane_props = {},
|
|
63
|
+
toggle_props = {},
|
|
64
|
+
// Snippets
|
|
65
|
+
children,
|
|
66
|
+
post_children,
|
|
67
|
+
...rest
|
|
68
|
+
}: Props = $props()
|
|
69
|
+
|
|
70
|
+
// Merged config using shared helper
|
|
71
|
+
const merged_config = $derived(merge_phase_diagram_config(config))
|
|
72
|
+
|
|
73
|
+
// Helper to update top-level config properties (e.g., font_size, special_point_radius)
|
|
74
|
+
function update_config<K extends keyof PhaseDiagramConfig>(
|
|
75
|
+
key: K,
|
|
76
|
+
value: PhaseDiagramConfig[K],
|
|
77
|
+
) {
|
|
78
|
+
config = { ...config, [key]: value }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Helper to update nested config properties
|
|
82
|
+
function update_nested<
|
|
83
|
+
K extends keyof Pick<PhaseDiagramConfig, `colors` | `tie_line`>,
|
|
84
|
+
>(
|
|
85
|
+
key: K,
|
|
86
|
+
prop: string,
|
|
87
|
+
value: string | number,
|
|
88
|
+
) {
|
|
89
|
+
config = { ...config, [key]: { ...config[key], [prop]: value } }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Derive component info from data
|
|
93
|
+
const component_a = $derived(data?.components?.[0])
|
|
94
|
+
const component_b = $derived(data?.components?.[1])
|
|
95
|
+
const title = $derived(
|
|
96
|
+
component_a && component_b
|
|
97
|
+
? `${component_a}-${component_b} Phase Diagram`
|
|
98
|
+
: `Phase Diagram Controls`,
|
|
99
|
+
)
|
|
100
|
+
const temp_unit = $derived(data?.temperature_unit ?? `K`)
|
|
101
|
+
const comp_unit = $derived(data?.composition_unit ?? `at%`)
|
|
102
|
+
const has_special_points = $derived((data?.special_points?.length ?? 0) > 0)
|
|
44
103
|
</script>
|
|
45
104
|
|
|
46
105
|
<!-- Reusable snippet for number + range input pairs -->
|
|
@@ -25,6 +25,6 @@ type Props = Omit<ComponentProps<typeof DraggablePane>, `children`> & {
|
|
|
25
25
|
controls_open: boolean;
|
|
26
26
|
}]>;
|
|
27
27
|
};
|
|
28
|
-
declare const PhaseDiagramControls: import("svelte").Component<Props, {}, "controls_open" | "x_axis" | "y_axis" | "show_grid" | "config" | "
|
|
28
|
+
declare const PhaseDiagramControls: import("svelte").Component<Props, {}, "controls_open" | "x_axis" | "y_axis" | "show_grid" | "config" | "show_boundaries" | "show_labels" | "show_special_points" | "show_component_labels" | "png_dpi" | "lever_rule_mode">;
|
|
29
29
|
type PhaseDiagramControls = ReturnType<typeof PhaseDiagramControls>;
|
|
30
30
|
export default PhaseDiagramControls;
|
|
@@ -1,45 +1,68 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
let
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { JsonTree } from '../layout/json-tree'
|
|
3
|
+
import { set_at_path } from '../layout/json-tree/utils'
|
|
4
|
+
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
5
|
+
import type { ComponentProps } from 'svelte'
|
|
6
|
+
import { build_diagram } from './build-diagram'
|
|
7
|
+
import type { DiagramInput } from './diagram-input'
|
|
8
|
+
import type { PhaseDiagramData } from './types'
|
|
9
|
+
|
|
10
|
+
let {
|
|
11
|
+
editor_open = $bindable(false),
|
|
12
|
+
diagram_input = $bindable<DiagramInput | null>(null),
|
|
13
|
+
data = null,
|
|
14
|
+
ondata,
|
|
15
|
+
icon_style = ``,
|
|
16
|
+
toggle_props: caller_toggle_props = {},
|
|
17
|
+
}: {
|
|
18
|
+
editor_open?: boolean
|
|
19
|
+
diagram_input?: DiagramInput | null
|
|
20
|
+
data?: PhaseDiagramData | null
|
|
21
|
+
ondata?: (data: PhaseDiagramData) => void
|
|
22
|
+
icon_style?: string
|
|
23
|
+
toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
|
|
24
|
+
} = $props()
|
|
25
|
+
|
|
26
|
+
// The source object currently displayed (DiagramInput or PhaseDiagramData)
|
|
27
|
+
const display_source = $derived(diagram_input ?? data)
|
|
28
|
+
|
|
29
|
+
const root_label = `diagram`
|
|
30
|
+
|
|
31
|
+
// Brief error flash when an edit is rejected by build_diagram
|
|
32
|
+
let rejection_msg = $state<string | null>(null)
|
|
33
|
+
let rejection_timer: ReturnType<typeof setTimeout> | undefined
|
|
34
|
+
|
|
35
|
+
function show_rejection(msg: string) {
|
|
36
|
+
if (rejection_timer) clearTimeout(rejection_timer)
|
|
37
|
+
rejection_msg = msg
|
|
38
|
+
rejection_timer = setTimeout(() => (rejection_msg = null), 3000)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Shared format detection: true if obj looks like a DiagramInput
|
|
42
|
+
function is_diagram_input(obj: Record<string, unknown>): boolean {
|
|
43
|
+
const meta = obj.meta as Record<string, unknown> | undefined
|
|
44
|
+
return Boolean(meta && Array.isArray(meta.components) && `curves` in obj)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Handle inline value edits from JsonTree
|
|
48
|
+
function handle_change(path: string, new_value: unknown, _old_value: unknown) {
|
|
49
|
+
if (!display_source) return
|
|
50
|
+
const updated = set_at_path(display_source, path, new_value, root_label)
|
|
51
|
+
|
|
52
|
+
if (is_diagram_input(updated as Record<string, unknown>)) {
|
|
53
|
+
try {
|
|
54
|
+
build_diagram(updated as DiagramInput)
|
|
55
|
+
diagram_input = updated as DiagramInput
|
|
56
|
+
} catch (error) {
|
|
57
|
+
const msg = error instanceof Error ? error.message : String(error)
|
|
58
|
+
show_rejection(msg)
|
|
59
|
+
}
|
|
60
|
+
return
|
|
38
61
|
}
|
|
39
62
|
// PhaseDiagramData format — clear diagram_input so rebuilt_data doesn't shadow
|
|
40
|
-
diagram_input = null
|
|
41
|
-
ondata?.(updated)
|
|
42
|
-
}
|
|
63
|
+
diagram_input = null
|
|
64
|
+
ondata?.(updated as PhaseDiagramData)
|
|
65
|
+
}
|
|
43
66
|
</script>
|
|
44
67
|
|
|
45
68
|
<DraggablePane
|
|
@@ -1,31 +1,74 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { export_svg_as_png, export_svg_as_svg } from '../io/export'
|
|
3
|
+
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
4
|
+
import type { ComponentProps } from 'svelte'
|
|
5
|
+
import { CopyButton } from 'svelte-multiselect'
|
|
6
|
+
import { tooltip } from 'svelte-multiselect/attachments'
|
|
7
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
8
|
+
import type { PhaseDiagramData } from './types'
|
|
9
|
+
|
|
10
|
+
let {
|
|
11
|
+
export_pane_open = $bindable(false),
|
|
12
|
+
data,
|
|
13
|
+
json_payload = undefined,
|
|
14
|
+
wrapper,
|
|
15
|
+
svg_element = undefined,
|
|
16
|
+
svg_query_selector = `svg.binary-phase-diagram`,
|
|
17
|
+
filename = `phase-diagram`,
|
|
18
|
+
png_dpi = $bindable(150),
|
|
19
|
+
icon_style = ``,
|
|
20
|
+
toggle_props: caller_toggle_props = {},
|
|
21
|
+
...rest
|
|
22
|
+
}: HTMLAttributes<HTMLDivElement> & {
|
|
23
|
+
export_pane_open?: boolean
|
|
24
|
+
data?: PhaseDiagramData
|
|
25
|
+
json_payload?: unknown
|
|
26
|
+
wrapper?: HTMLDivElement
|
|
27
|
+
svg_element?: SVGSVGElement | null
|
|
28
|
+
svg_query_selector?: string
|
|
29
|
+
filename?: string
|
|
30
|
+
png_dpi?: number
|
|
31
|
+
icon_style?: string
|
|
32
|
+
toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
|
|
33
|
+
} = $props()
|
|
34
|
+
|
|
35
|
+
let json_copy_state = $state<ComponentProps<typeof CopyButton>[`state`]>(`ready`)
|
|
36
|
+
let svg_copy_state = $state<ComponentProps<typeof CopyButton>[`state`]>(`ready`)
|
|
37
|
+
|
|
38
|
+
// Generate filename with components if available (requires exactly 2 components)
|
|
39
|
+
const full_filename = $derived(
|
|
40
|
+
data?.components?.length === 2
|
|
41
|
+
? `${filename}-${data.components[0]}-${data.components[1]}`
|
|
42
|
+
: filename,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
const svg = $derived(
|
|
46
|
+
svg_element ??
|
|
47
|
+
(wrapper?.querySelector(svg_query_selector) as SVGSVGElement | null),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
const json_export_data = $derived(json_payload ?? data)
|
|
51
|
+
|
|
52
|
+
const svg_string = $derived(svg ? new XMLSerializer().serializeToString(svg) : null)
|
|
53
|
+
|
|
54
|
+
function download_json() {
|
|
55
|
+
if (!json_export_data) return
|
|
56
|
+
|
|
57
|
+
const json_string = JSON.stringify(json_export_data, null, 2)
|
|
58
|
+
const blob = new Blob([json_string], { type: `application/json` })
|
|
59
|
+
const url = URL.createObjectURL(blob)
|
|
60
|
+
|
|
61
|
+
const link = document.createElement(`a`)
|
|
62
|
+
link.href = url
|
|
63
|
+
link.download = `${full_filename}.json`
|
|
64
|
+
link.click()
|
|
65
|
+
|
|
66
|
+
URL.revokeObjectURL(url)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const json_string = $derived(
|
|
70
|
+
json_export_data ? JSON.stringify(json_export_data, null, 2) : null,
|
|
71
|
+
)
|
|
29
72
|
</script>
|
|
30
73
|
|
|
31
74
|
<DraggablePane
|
|
@@ -14,6 +14,6 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
14
14
|
icon_style?: string;
|
|
15
15
|
toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`];
|
|
16
16
|
};
|
|
17
|
-
declare const PhaseDiagramExportPane: import("svelte").Component<$$ComponentProps, {}, "
|
|
17
|
+
declare const PhaseDiagramExportPane: import("svelte").Component<$$ComponentProps, {}, "png_dpi" | "export_pane_open">;
|
|
18
18
|
type PhaseDiagramExportPane = ReturnType<typeof PhaseDiagramExportPane>;
|
|
19
19
|
export default PhaseDiagramExportPane;
|