matterviz 0.3.3 → 0.3.5
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/FilePicker.svelte +1 -1
- package/dist/app.css +7 -0
- package/dist/brillouin/BrillouinZone.svelte +5 -2
- package/dist/brillouin/compute.js +8 -4
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +6 -6
- package/dist/chempot-diagram/async-compute.svelte.js +6 -5
- package/dist/chempot-diagram/chempot-worker.js +2 -2
- package/dist/chempot-diagram/compute.js +16 -16
- package/dist/composition/FormulaFilter.svelte +3 -3
- package/dist/constants.js +2 -8
- package/dist/convex-hull/ConvexHull.svelte +2 -2
- package/dist/convex-hull/ConvexHull2D.svelte +11 -10
- package/dist/convex-hull/ConvexHull3D.svelte +16 -14
- package/dist/convex-hull/ConvexHull4D.svelte +26 -14
- package/dist/convex-hull/ConvexHullControls.svelte +1 -1
- package/dist/convex-hull/ConvexHullInfoPane.svelte +68 -61
- package/dist/convex-hull/ConvexHullStats.svelte +23 -6
- package/dist/convex-hull/GasPressureControls.svelte +3 -3
- package/dist/convex-hull/TemperatureSlider.svelte +1 -1
- package/dist/convex-hull/barycentric-coords.js +2 -2
- package/dist/convex-hull/helpers.js +45 -27
- package/dist/convex-hull/thermodynamics.js +2 -2
- package/dist/element/BohrAtom.svelte +25 -27
- package/dist/element/BohrAtom.svelte.d.ts +2 -2
- package/dist/element/data.d.ts +2 -3
- package/dist/element/data.js +1 -1
- package/dist/fermi-surface/FermiSurface.svelte +5 -2
- package/dist/fermi-surface/compute.js +3 -3
- package/dist/fermi-surface/parse.js +2 -2
- package/dist/fermi-surface/symmetry.js +1 -1
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +8 -8
- package/dist/icons.d.ts +6 -6
- package/dist/icons.js +6 -6
- package/dist/io/decompress.js +12 -7
- package/dist/io/export.js +20 -16
- package/dist/io/is-binary.js +19 -4
- package/dist/isosurface/parse.js +8 -8
- package/dist/isosurface/types.js +9 -9
- package/dist/layout/InfoTag.svelte +1 -1
- package/dist/layout/json-tree/JsonNode.svelte +1 -0
- package/dist/layout/json-tree/utils.js +2 -1
- package/dist/marching-cubes.js +1 -1
- package/dist/math.js +1 -1
- package/dist/overlays/CopyButton.svelte +45 -0
- package/dist/overlays/CopyButton.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +149 -0
- package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +33 -35
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +2 -2
- package/dist/phase-diagram/PhaseDiagramControls.svelte +27 -29
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +2 -2
- package/dist/phase-diagram/parse.js +3 -3
- package/dist/phase-diagram/svg-to-diagram.js +10 -12
- package/dist/plot/BarPlot.svelte +24 -15
- package/dist/plot/BarPlot.svelte.d.ts +3 -2
- package/dist/plot/FillArea.svelte +2 -3
- package/dist/plot/FillArea.svelte.d.ts +3 -2
- package/dist/plot/Histogram.svelte +37 -19
- package/dist/plot/Line.svelte +2 -3
- package/dist/plot/Line.svelte.d.ts +2 -2
- package/dist/plot/PlotLegend.svelte +79 -8
- package/dist/plot/PlotLegend.svelte.d.ts +4 -0
- package/dist/plot/PortalSelect.svelte +5 -5
- package/dist/plot/ScatterPlot.svelte +47 -33
- package/dist/plot/ScatterPlot.svelte.d.ts +5 -4
- package/dist/plot/ScatterPlot3D.svelte +6 -3
- package/dist/plot/ScatterPoint.svelte +10 -4
- package/dist/plot/ScatterPoint.svelte.d.ts +4 -2
- package/dist/plot/SpacegroupBarPlot.svelte +5 -4
- package/dist/plot/data-cleaning.js +9 -9
- package/dist/plot/index.d.ts +0 -6
- package/dist/plot/scales.d.ts +3 -3
- package/dist/plot/scales.js +29 -29
- package/dist/plot/types.d.ts +5 -9
- package/dist/rdf/calc-rdf.js +1 -1
- package/dist/sanitize.js +22 -15
- package/dist/settings.d.ts +2 -0
- package/dist/settings.js +12 -3
- package/dist/spectral/Bands.svelte +6 -6
- package/dist/spectral/BandsAndDos.svelte +4 -4
- package/dist/spectral/BrillouinBandsDos.svelte +3 -3
- package/dist/spectral/Dos.svelte +2 -2
- package/dist/spectral/helpers.js +1 -1
- package/dist/structure/AtomLegend.svelte +4 -4
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/Cylinder.svelte +7 -7
- package/dist/structure/Structure.svelte +169 -27
- package/dist/structure/Structure.svelte.d.ts +6 -2
- package/dist/structure/StructureControls.svelte +130 -16
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureInfoPane.svelte +519 -218
- package/dist/structure/StructureInfoPane.svelte.d.ts +2 -1
- package/dist/structure/StructureScene.svelte +399 -68
- package/dist/structure/StructureScene.svelte.d.ts +8 -4
- package/dist/structure/atom-properties.js +3 -1
- package/dist/structure/bond-order-perception.d.ts +13 -0
- package/dist/structure/bond-order-perception.js +367 -0
- package/dist/structure/bonding.d.ts +10 -1
- package/dist/structure/bonding.js +232 -11
- package/dist/structure/export.js +6 -4
- package/dist/structure/index.d.ts +19 -4
- package/dist/structure/index.js +3 -0
- package/dist/structure/label-placement.d.ts +14 -0
- package/dist/structure/label-placement.js +72 -0
- package/dist/structure/parse.d.ts +2 -1
- package/dist/structure/parse.js +25 -36
- package/dist/structure/supercell.js +35 -2
- package/dist/symmetry/SymmetryStats.svelte +1 -1
- package/dist/symmetry/cell-transform.js +15 -1
- package/dist/symmetry/index.js +3 -3
- package/dist/table/HeatmapTable.svelte +3 -3
- package/dist/table/ToggleMenu.svelte +1 -1
- package/dist/trajectory/Trajectory.svelte +2 -2
- package/dist/trajectory/TrajectoryInfoPane.svelte +14 -88
- package/dist/trajectory/extract.js +4 -4
- package/dist/trajectory/frame-reader.js +2 -2
- package/dist/trajectory/parse/ase.js +2 -6
- package/dist/trajectory/parse/hdf5.js +1 -3
- package/dist/trajectory/plotting.js +1 -1
- package/dist/utils.js +1 -1
- package/dist/xrd/calc-xrd.js +1 -1
- package/package.json +23 -38
- package/dist/structure/ferrox-wasm-types.d.ts +0 -46
- package/dist/structure/ferrox-wasm-types.js +0 -18
- package/dist/structure/ferrox-wasm.d.ts +0 -94
- package/dist/structure/ferrox-wasm.js +0 -249
|
@@ -112,21 +112,91 @@
|
|
|
112
112
|
}
|
|
113
113
|
})
|
|
114
114
|
|
|
115
|
+
const hex_color_pattern = /^#[0-9a-f]{3}([0-9a-f]{3})?$/i
|
|
116
|
+
const color_mix_pattern =
|
|
117
|
+
/^color-mix\(in srgb,\s*(#[0-9a-f]{3}(?:[0-9a-f]{3})?)\s+(\d+(?:\.\d+)?)%,\s*transparent\)$/i
|
|
118
|
+
|
|
119
|
+
const as_hex_color = (color: string | undefined, fallback: string): string =>
|
|
120
|
+
color?.match(hex_color_pattern)?.[0] ?? fallback
|
|
121
|
+
|
|
122
|
+
const parse_label_bg_color = (
|
|
123
|
+
color: string | undefined,
|
|
124
|
+
fallback_hex_color: string,
|
|
125
|
+
fallback_opacity: number,
|
|
126
|
+
): { hex_color: string; opacity: number } => {
|
|
127
|
+
if (color === `transparent`) {
|
|
128
|
+
return { hex_color: fallback_hex_color, opacity: 0 }
|
|
129
|
+
}
|
|
130
|
+
const color_mix = color?.match(color_mix_pattern)
|
|
131
|
+
if (color_mix) {
|
|
132
|
+
const percentage = Math.max(0, Math.min(100, Number(color_mix[2])))
|
|
133
|
+
return {
|
|
134
|
+
hex_color: color_mix[1],
|
|
135
|
+
opacity: percentage / 100,
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const hex_color = color?.match(hex_color_pattern)?.[0]
|
|
139
|
+
return hex_color === undefined
|
|
140
|
+
? { hex_color: fallback_hex_color, opacity: fallback_opacity }
|
|
141
|
+
: { hex_color, opacity: 1 }
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const default_site_label_color = as_hex_color(
|
|
145
|
+
DEFAULTS.structure.site_label_color,
|
|
146
|
+
`#111111`,
|
|
147
|
+
)
|
|
148
|
+
const default_site_label_bg = parse_label_bg_color(
|
|
149
|
+
DEFAULTS.structure.site_label_bg_color,
|
|
150
|
+
`#000000`,
|
|
151
|
+
0,
|
|
152
|
+
)
|
|
153
|
+
const initial_site_label_bg = parse_label_bg_color(
|
|
154
|
+
scene_props.site_label_bg_color,
|
|
155
|
+
default_site_label_bg.hex_color,
|
|
156
|
+
default_site_label_bg.opacity,
|
|
157
|
+
)
|
|
158
|
+
|
|
115
159
|
// Atom label color management
|
|
116
160
|
let site_label_hex_color = $state(
|
|
117
|
-
scene_props.site_label_color
|
|
118
|
-
)
|
|
119
|
-
let site_label_bg_hex_color = $state(
|
|
120
|
-
scene_props.site_label_bg_color || DEFAULTS.structure.site_label_bg_color,
|
|
161
|
+
as_hex_color(scene_props.site_label_color, default_site_label_color),
|
|
121
162
|
)
|
|
122
|
-
let
|
|
163
|
+
let site_label_bg_hex_color = $state(initial_site_label_bg.hex_color)
|
|
164
|
+
let site_label_background_opacity = $state(initial_site_label_bg.opacity)
|
|
165
|
+
let last_synced_site_label_color = scene_props.site_label_color
|
|
166
|
+
let last_synced_site_label_bg_color = scene_props.site_label_bg_color
|
|
123
167
|
|
|
124
168
|
$effect(() => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
169
|
+
const external_color_changed =
|
|
170
|
+
scene_props.site_label_color !== last_synced_site_label_color
|
|
171
|
+
const external_bg_changed =
|
|
172
|
+
scene_props.site_label_bg_color !== last_synced_site_label_bg_color
|
|
173
|
+
|
|
174
|
+
if (external_color_changed) {
|
|
175
|
+
site_label_hex_color = as_hex_color(
|
|
176
|
+
scene_props.site_label_color,
|
|
177
|
+
default_site_label_color,
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
if (external_bg_changed) {
|
|
181
|
+
const next_bg = parse_label_bg_color(
|
|
182
|
+
scene_props.site_label_bg_color,
|
|
183
|
+
default_site_label_bg.hex_color,
|
|
184
|
+
default_site_label_bg.opacity,
|
|
185
|
+
)
|
|
186
|
+
site_label_bg_hex_color = next_bg.hex_color
|
|
187
|
+
site_label_background_opacity = next_bg.opacity
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (!external_color_changed) scene_props.site_label_color = site_label_hex_color
|
|
191
|
+
if (!external_bg_changed) {
|
|
192
|
+
scene_props.site_label_bg_color =
|
|
193
|
+
`color-mix(in srgb, ${site_label_bg_hex_color} ${
|
|
194
|
+
format_num(site_label_background_opacity, `.1~%`)
|
|
195
|
+
}, transparent)`
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
last_synced_site_label_color = scene_props.site_label_color
|
|
199
|
+
last_synced_site_label_bg_color = scene_props.site_label_bg_color
|
|
130
200
|
})
|
|
131
201
|
|
|
132
202
|
// Ensure site_label_offset is always available
|
|
@@ -638,15 +708,19 @@
|
|
|
638
708
|
scene_props.site_label_size = DEFAULTS.structure.site_label_size
|
|
639
709
|
scene_props.site_label_padding = DEFAULTS.structure.site_label_padding
|
|
640
710
|
scene_props.site_label_offset = [...DEFAULTS.structure.site_label_offset]
|
|
641
|
-
site_label_hex_color =
|
|
642
|
-
site_label_bg_hex_color =
|
|
643
|
-
site_label_background_opacity =
|
|
711
|
+
site_label_hex_color = default_site_label_color
|
|
712
|
+
site_label_bg_hex_color = default_site_label_bg.hex_color
|
|
713
|
+
site_label_background_opacity = default_site_label_bg.opacity
|
|
644
714
|
}}
|
|
645
715
|
>
|
|
646
716
|
<div class="pane-row">
|
|
647
717
|
<label>
|
|
648
718
|
Color
|
|
649
|
-
<input
|
|
719
|
+
<input
|
|
720
|
+
type="color"
|
|
721
|
+
aria-label="Site label color"
|
|
722
|
+
bind:value={site_label_hex_color}
|
|
723
|
+
/>
|
|
650
724
|
</label>
|
|
651
725
|
<label>
|
|
652
726
|
Size
|
|
@@ -662,7 +736,11 @@
|
|
|
662
736
|
<div class="pane-row">
|
|
663
737
|
<label>
|
|
664
738
|
Background
|
|
665
|
-
<input
|
|
739
|
+
<input
|
|
740
|
+
type="color"
|
|
741
|
+
aria-label="Site label background color"
|
|
742
|
+
bind:value={site_label_bg_hex_color}
|
|
743
|
+
/>
|
|
666
744
|
</label>
|
|
667
745
|
<label>
|
|
668
746
|
Opacity
|
|
@@ -671,6 +749,7 @@
|
|
|
671
749
|
min="0"
|
|
672
750
|
max="1"
|
|
673
751
|
step="0.01"
|
|
752
|
+
aria-label="Site label background opacity"
|
|
674
753
|
bind:value={site_label_background_opacity}
|
|
675
754
|
/>
|
|
676
755
|
<input
|
|
@@ -678,6 +757,7 @@
|
|
|
678
757
|
min="0"
|
|
679
758
|
max="1"
|
|
680
759
|
step="0.01"
|
|
760
|
+
aria-label="Site label background opacity slider"
|
|
681
761
|
bind:value={site_label_background_opacity}
|
|
682
762
|
/>
|
|
683
763
|
</label>
|
|
@@ -938,7 +1018,10 @@
|
|
|
938
1018
|
{/if}
|
|
939
1019
|
|
|
940
1020
|
{#if !supercell_input_valid}
|
|
941
|
-
<div
|
|
1021
|
+
<div
|
|
1022
|
+
data-testid="supercell-input-error"
|
|
1023
|
+
style="color: red; font-size: 0.8em; margin-top: 4pt"
|
|
1024
|
+
>
|
|
942
1025
|
Invalid format. Use patterns like "2x2x2", "3x1x2", or "2".
|
|
943
1026
|
</div>
|
|
944
1027
|
{/if}
|
|
@@ -1083,11 +1166,15 @@
|
|
|
1083
1166
|
title="Bonds"
|
|
1084
1167
|
current_values={{
|
|
1085
1168
|
bonding_strategy: scene_props.bonding_strategy,
|
|
1169
|
+
auto_bond_order: scene_props.auto_bond_order,
|
|
1170
|
+
aromatic_display: scene_props.aromatic_display,
|
|
1086
1171
|
bond_color: scene_props.bond_color,
|
|
1087
1172
|
bond_thickness: scene_props.bond_thickness,
|
|
1088
1173
|
}}
|
|
1089
1174
|
on_reset={() => {
|
|
1090
1175
|
scene_props.bonding_strategy = DEFAULTS.structure.bonding_strategy
|
|
1176
|
+
scene_props.auto_bond_order = DEFAULTS.structure.auto_bond_order
|
|
1177
|
+
scene_props.aromatic_display = DEFAULTS.structure.aromatic_display
|
|
1091
1178
|
scene_props.bond_color = DEFAULTS.structure.bond_color
|
|
1092
1179
|
scene_props.bond_thickness = DEFAULTS.structure.bond_thickness
|
|
1093
1180
|
}}
|
|
@@ -1104,6 +1191,33 @@
|
|
|
1104
1191
|
{/each}
|
|
1105
1192
|
</select>
|
|
1106
1193
|
</label>
|
|
1194
|
+
<label
|
|
1195
|
+
style="gap: 6pt"
|
|
1196
|
+
{@attach tooltip({
|
|
1197
|
+
content: SETTINGS_CONFIG.structure.auto_bond_order.description,
|
|
1198
|
+
})}
|
|
1199
|
+
>
|
|
1200
|
+
<input type="checkbox" bind:checked={scene_props.auto_bond_order} />
|
|
1201
|
+
Auto bond order (perceive double/triple/aromatic)
|
|
1202
|
+
</label>
|
|
1203
|
+
{#if scene_props.auto_bond_order}
|
|
1204
|
+
<label
|
|
1205
|
+
{@attach tooltip({
|
|
1206
|
+
content: SETTINGS_CONFIG.structure.aromatic_display.description,
|
|
1207
|
+
})}
|
|
1208
|
+
>
|
|
1209
|
+
Aromatic display <select bind:value={scene_props.aromatic_display}>
|
|
1210
|
+
{#each Object.entries(
|
|
1211
|
+
SETTINGS_CONFIG.structure.aromatic_display.enum ?? {},
|
|
1212
|
+
) as
|
|
1213
|
+
[value, label]
|
|
1214
|
+
(value)
|
|
1215
|
+
}
|
|
1216
|
+
<option {value}>{label}</option>
|
|
1217
|
+
{/each}
|
|
1218
|
+
</select>
|
|
1219
|
+
</label>
|
|
1220
|
+
{/if}
|
|
1107
1221
|
<label>
|
|
1108
1222
|
Color <input type="color" bind:value={scene_props.bond_color} />
|
|
1109
1223
|
</label>
|
|
@@ -26,6 +26,6 @@ type $$ComponentProps = Omit<ComponentProps<typeof DraggablePane>, `children`> &
|
|
|
26
26
|
pane_props?: ComponentProps<typeof DraggablePane>[`pane_props`];
|
|
27
27
|
toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`];
|
|
28
28
|
};
|
|
29
|
-
declare const StructureControls: import("svelte").Component<$$ComponentProps, {}, "controls_open" | "color_scheme" | "background_color" | "background_opacity" | "show_image_atoms" | "atom_color_config" | "
|
|
29
|
+
declare const StructureControls: import("svelte").Component<$$ComponentProps, {}, "controls_open" | "color_scheme" | "background_color" | "background_opacity" | "show_image_atoms" | "atom_color_config" | "lattice_props" | "volumetric_data" | "isosurface_settings" | "supercell_scaling" | "cell_type" | "active_volume_idx" | "scene_props" | "supercell_loading">;
|
|
30
30
|
type StructureControls = ReturnType<typeof StructureControls>;
|
|
31
31
|
export default StructureControls;
|