matterviz 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/FilePicker.svelte +37 -20
  2. package/dist/Icon.svelte +2 -2
  3. package/dist/MillerIndexInput.svelte +60 -0
  4. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  5. package/dist/app.css +38 -2
  6. package/dist/brillouin/BrillouinZone.svelte +20 -62
  7. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  8. package/dist/brillouin/BrillouinZoneExportPane.svelte +12 -20
  9. package/dist/brillouin/BrillouinZoneScene.svelte +2 -2
  10. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  11. package/dist/chempot-diagram/ChemPotDiagram.svelte +192 -0
  12. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  13. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +677 -0
  14. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  15. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +2688 -0
  16. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  17. package/dist/chempot-diagram/ChemPotScene3D.svelte +8 -0
  18. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  19. package/dist/chempot-diagram/color.d.ts +10 -0
  20. package/dist/chempot-diagram/color.js +33 -0
  21. package/dist/chempot-diagram/compute.d.ts +38 -0
  22. package/dist/chempot-diagram/compute.js +650 -0
  23. package/dist/chempot-diagram/index.d.ts +5 -0
  24. package/dist/chempot-diagram/index.js +5 -0
  25. package/dist/chempot-diagram/pointer.d.ts +16 -0
  26. package/dist/chempot-diagram/pointer.js +40 -0
  27. package/dist/chempot-diagram/temperature.d.ts +15 -0
  28. package/dist/chempot-diagram/temperature.js +37 -0
  29. package/dist/chempot-diagram/types.d.ts +83 -0
  30. package/dist/chempot-diagram/types.js +27 -0
  31. package/dist/colors/index.d.ts +3 -1
  32. package/dist/colors/index.js +4 -0
  33. package/dist/composition/BarChart.svelte +13 -22
  34. package/dist/composition/BubbleChart.svelte +5 -3
  35. package/dist/composition/FormulaFilter.svelte +770 -90
  36. package/dist/composition/FormulaFilter.svelte.d.ts +37 -1
  37. package/dist/composition/PieChart.svelte +43 -18
  38. package/dist/composition/PieChart.svelte.d.ts +1 -1
  39. package/dist/constants.d.ts +1 -0
  40. package/dist/constants.js +2 -0
  41. package/dist/convex-hull/ConvexHull.svelte +14 -1
  42. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  43. package/dist/convex-hull/ConvexHull2D.svelte +14 -45
  44. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  45. package/dist/convex-hull/ConvexHull3D.svelte +396 -134
  46. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  47. package/dist/convex-hull/ConvexHull4D.svelte +93 -42
  48. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  49. package/dist/convex-hull/ConvexHullControls.svelte +94 -31
  50. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +4 -2
  51. package/dist/convex-hull/ConvexHullStats.svelte +697 -128
  52. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
  53. package/dist/convex-hull/ConvexHullTooltip.svelte +1 -0
  54. package/dist/convex-hull/GasPressureControls.svelte +72 -38
  55. package/dist/convex-hull/GasPressureControls.svelte.d.ts +2 -1
  56. package/dist/convex-hull/TemperatureSlider.svelte +46 -19
  57. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +2 -1
  58. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  59. package/dist/convex-hull/demo-temperature.js +36 -0
  60. package/dist/convex-hull/gas-thermodynamics.js +16 -5
  61. package/dist/convex-hull/helpers.d.ts +7 -1
  62. package/dist/convex-hull/helpers.js +45 -15
  63. package/dist/convex-hull/index.d.ts +15 -1
  64. package/dist/convex-hull/index.js +1 -0
  65. package/dist/convex-hull/thermodynamics.d.ts +8 -21
  66. package/dist/convex-hull/thermodynamics.js +106 -17
  67. package/dist/convex-hull/types.d.ts +7 -0
  68. package/dist/convex-hull/types.js +11 -0
  69. package/dist/coordination/CoordinationBarPlot.svelte +29 -46
  70. package/dist/element/BohrAtom.svelte +1 -1
  71. package/dist/element/data.js +2 -14
  72. package/dist/element/data.json.gz +0 -0
  73. package/dist/element/index.d.ts +1 -1
  74. package/dist/element/index.js +1 -0
  75. package/dist/element/types.d.ts +1 -0
  76. package/dist/fermi-surface/FermiSurface.svelte +21 -65
  77. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  78. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  79. package/dist/fermi-surface/FermiSurfaceScene.svelte +1 -1
  80. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  81. package/dist/fermi-surface/compute.js +1 -21
  82. package/dist/fermi-surface/marching-cubes.d.ts +2 -13
  83. package/dist/fermi-surface/marching-cubes.js +2 -519
  84. package/dist/fermi-surface/parse.js +17 -23
  85. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1273 -0
  86. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  87. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +171 -0
  88. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +31 -0
  89. package/dist/heatmap-matrix/index.d.ts +53 -0
  90. package/dist/heatmap-matrix/index.js +100 -0
  91. package/dist/heatmap-matrix/shared.d.ts +2 -0
  92. package/dist/heatmap-matrix/shared.js +4 -0
  93. package/dist/icons.d.ts +119 -0
  94. package/dist/icons.js +119 -0
  95. package/dist/index.d.ts +6 -1
  96. package/dist/index.js +6 -1
  97. package/dist/io/export.js +15 -3
  98. package/dist/io/file-drop.d.ts +7 -0
  99. package/dist/io/file-drop.js +43 -0
  100. package/dist/io/index.d.ts +2 -2
  101. package/dist/io/index.js +2 -112
  102. package/dist/io/types.d.ts +1 -0
  103. package/dist/io/url-drop.d.ts +2 -0
  104. package/dist/io/url-drop.js +118 -0
  105. package/dist/isosurface/Isosurface.svelte +231 -0
  106. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  107. package/dist/isosurface/IsosurfaceControls.svelte +273 -0
  108. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  109. package/dist/isosurface/index.d.ts +5 -0
  110. package/dist/isosurface/index.js +6 -0
  111. package/dist/isosurface/parse.d.ts +6 -0
  112. package/dist/isosurface/parse.js +548 -0
  113. package/dist/isosurface/slice.d.ts +11 -0
  114. package/dist/isosurface/slice.js +145 -0
  115. package/dist/isosurface/types.d.ts +55 -0
  116. package/dist/isosurface/types.js +178 -0
  117. package/dist/labels.d.ts +2 -1
  118. package/dist/labels.js +1 -0
  119. package/dist/layout/InfoTag.svelte +62 -62
  120. package/dist/layout/SubpageGrid.svelte +74 -0
  121. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  122. package/dist/layout/index.d.ts +1 -0
  123. package/dist/layout/index.js +1 -0
  124. package/dist/layout/json-tree/JsonNode.svelte +226 -53
  125. package/dist/layout/json-tree/JsonTree.svelte +425 -51
  126. package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
  127. package/dist/layout/json-tree/JsonValue.svelte +218 -97
  128. package/dist/layout/json-tree/types.d.ts +27 -2
  129. package/dist/layout/json-tree/utils.d.ts +14 -1
  130. package/dist/layout/json-tree/utils.js +254 -0
  131. package/dist/marching-cubes.d.ts +14 -0
  132. package/dist/marching-cubes.js +519 -0
  133. package/dist/math.d.ts +8 -0
  134. package/dist/math.js +374 -7
  135. package/dist/overlays/ContextMenu.svelte +3 -2
  136. package/dist/overlays/DraggablePane.svelte +163 -58
  137. package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
  138. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +232 -77
  139. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
  140. package/dist/phase-diagram/PhaseDiagramControls.svelte +32 -11
  141. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
  142. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +103 -0
  143. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  144. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +102 -95
  145. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +7 -0
  146. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +100 -26
  147. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
  148. package/dist/phase-diagram/index.d.ts +2 -0
  149. package/dist/phase-diagram/index.js +2 -0
  150. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  151. package/dist/phase-diagram/svg-to-diagram.js +865 -0
  152. package/dist/phase-diagram/types.d.ts +10 -0
  153. package/dist/phase-diagram/utils.d.ts +7 -4
  154. package/dist/phase-diagram/utils.js +149 -59
  155. package/dist/plot/AxisLabel.svelte +26 -0
  156. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  157. package/dist/plot/BarPlot.svelte +473 -228
  158. package/dist/plot/BarPlot.svelte.d.ts +3 -3
  159. package/dist/plot/BarPlotControls.svelte +3 -2
  160. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  161. package/dist/plot/ColorBar.svelte +54 -54
  162. package/dist/plot/ColorBar.svelte.d.ts +1 -1
  163. package/dist/plot/ElementScatter.svelte +4 -3
  164. package/dist/plot/FillArea.svelte +4 -1
  165. package/dist/plot/Histogram.svelte +320 -230
  166. package/dist/plot/Histogram.svelte.d.ts +2 -2
  167. package/dist/plot/HistogramControls.svelte +29 -10
  168. package/dist/plot/HistogramControls.svelte.d.ts +6 -2
  169. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +2 -2
  170. package/dist/plot/PlotControls.svelte +109 -27
  171. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  172. package/dist/plot/PlotLegend.svelte +1 -1
  173. package/dist/plot/PortalSelect.svelte +2 -1
  174. package/dist/plot/ReferenceLine.svelte +2 -1
  175. package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
  176. package/dist/plot/ReferencePlane.svelte +1 -3
  177. package/dist/plot/ScatterPlot.svelte +343 -209
  178. package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
  179. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  180. package/dist/plot/ScatterPlot3DControls.svelte +203 -250
  181. package/dist/plot/ScatterPlot3DScene.svelte +4 -7
  182. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  183. package/dist/plot/ScatterPlotControls.svelte +95 -55
  184. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  185. package/dist/plot/ZeroLines.svelte +44 -0
  186. package/dist/plot/ZeroLines.svelte.d.ts +32 -0
  187. package/dist/plot/ZoomRect.svelte +21 -0
  188. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  189. package/dist/plot/axis-utils.d.ts +1 -1
  190. package/dist/plot/data-cleaning.js +1 -5
  191. package/dist/plot/index.d.ts +6 -2
  192. package/dist/plot/index.js +6 -2
  193. package/dist/plot/interactions.d.ts +8 -10
  194. package/dist/plot/interactions.js +10 -19
  195. package/dist/plot/layout.d.ts +7 -1
  196. package/dist/plot/layout.js +12 -4
  197. package/dist/plot/reference-line.d.ts +4 -21
  198. package/dist/plot/reference-line.js +7 -81
  199. package/dist/plot/types.d.ts +42 -17
  200. package/dist/plot/types.js +10 -0
  201. package/dist/plot/utils/label-placement.js +14 -11
  202. package/dist/plot/utils.d.ts +1 -0
  203. package/dist/plot/utils.js +14 -0
  204. package/dist/rdf/RdfPlot.svelte +55 -66
  205. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  206. package/dist/rdf/index.d.ts +1 -1
  207. package/dist/rdf/index.js +1 -1
  208. package/dist/settings.d.ts +5 -0
  209. package/dist/settings.js +37 -3
  210. package/dist/spectral/Bands.svelte +515 -143
  211. package/dist/spectral/Bands.svelte.d.ts +22 -2
  212. package/dist/spectral/helpers.d.ts +23 -1
  213. package/dist/spectral/helpers.js +65 -9
  214. package/dist/spectral/types.d.ts +2 -0
  215. package/dist/structure/AtomLegend.svelte +31 -10
  216. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  217. package/dist/structure/CellSelect.svelte +92 -22
  218. package/dist/structure/Lattice.svelte +2 -0
  219. package/dist/structure/Structure.svelte +716 -173
  220. package/dist/structure/Structure.svelte.d.ts +7 -2
  221. package/dist/structure/StructureControls.svelte +26 -14
  222. package/dist/structure/StructureControls.svelte.d.ts +5 -1
  223. package/dist/structure/StructureInfoPane.svelte +7 -1
  224. package/dist/structure/StructureScene.svelte +386 -95
  225. package/dist/structure/StructureScene.svelte.d.ts +15 -4
  226. package/dist/structure/atom-properties.d.ts +6 -2
  227. package/dist/structure/atom-properties.js +38 -25
  228. package/dist/structure/export.js +10 -7
  229. package/dist/structure/ferrox-wasm-types.d.ts +3 -2
  230. package/dist/structure/ferrox-wasm-types.js +0 -3
  231. package/dist/structure/ferrox-wasm.d.ts +3 -2
  232. package/dist/structure/ferrox-wasm.js +1 -2
  233. package/dist/structure/index.d.ts +7 -0
  234. package/dist/structure/index.js +22 -0
  235. package/dist/structure/parse.js +19 -16
  236. package/dist/structure/partial-occupancy.d.ts +25 -0
  237. package/dist/structure/partial-occupancy.js +102 -0
  238. package/dist/structure/validation.js +6 -3
  239. package/dist/symmetry/SymmetryStats.svelte +18 -4
  240. package/dist/symmetry/WyckoffTable.svelte +18 -10
  241. package/dist/symmetry/index.d.ts +7 -4
  242. package/dist/symmetry/index.js +83 -18
  243. package/dist/table/HeatmapTable.svelte +468 -69
  244. package/dist/table/HeatmapTable.svelte.d.ts +13 -1
  245. package/dist/table/ToggleMenu.svelte +291 -44
  246. package/dist/table/ToggleMenu.svelte.d.ts +4 -1
  247. package/dist/table/index.d.ts +3 -0
  248. package/dist/tooltip/index.d.ts +1 -1
  249. package/dist/tooltip/index.js +1 -0
  250. package/dist/trajectory/Trajectory.svelte +147 -145
  251. package/dist/trajectory/TrajectoryExportPane.svelte +13 -9
  252. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
  253. package/dist/trajectory/constants.d.ts +6 -0
  254. package/dist/trajectory/constants.js +7 -0
  255. package/dist/trajectory/extract.js +3 -5
  256. package/dist/trajectory/format-detect.d.ts +9 -0
  257. package/dist/trajectory/format-detect.js +76 -0
  258. package/dist/trajectory/frame-reader.d.ts +17 -0
  259. package/dist/trajectory/frame-reader.js +339 -0
  260. package/dist/trajectory/helpers.d.ts +15 -0
  261. package/dist/trajectory/helpers.js +187 -0
  262. package/dist/trajectory/index.d.ts +1 -0
  263. package/dist/trajectory/index.js +11 -4
  264. package/dist/trajectory/parse/ase.d.ts +2 -0
  265. package/dist/trajectory/parse/ase.js +76 -0
  266. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  267. package/dist/trajectory/parse/hdf5.js +121 -0
  268. package/dist/trajectory/parse/index.d.ts +12 -0
  269. package/dist/trajectory/parse/index.js +304 -0
  270. package/dist/trajectory/parse/lammps.d.ts +5 -0
  271. package/dist/trajectory/parse/lammps.js +169 -0
  272. package/dist/trajectory/parse/vasp.d.ts +2 -0
  273. package/dist/trajectory/parse/vasp.js +65 -0
  274. package/dist/trajectory/parse/xyz.d.ts +2 -0
  275. package/dist/trajectory/parse/xyz.js +109 -0
  276. package/dist/trajectory/types.d.ts +11 -0
  277. package/dist/trajectory/types.js +1 -0
  278. package/dist/utils.d.ts +2 -0
  279. package/dist/utils.js +4 -0
  280. package/dist/xrd/XrdPlot.svelte +6 -4
  281. package/dist/xrd/calc-xrd.js +0 -1
  282. package/package.json +33 -23
  283. package/readme.md +4 -4
  284. package/dist/trajectory/parse.d.ts +0 -42
  285. package/dist/trajectory/parse.js +0 -1267
  286. /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
@@ -0,0 +1,40 @@
1
+ // Event/pointer normalization for hover tooltips.
2
+ // Handles DOM events and Threlte/Three.js event wrappers (nativeEvent, srcEvent).
3
+ const is_pointer_like_event = (event_val) => (typeof PointerEvent !== `undefined` && event_val instanceof PointerEvent) ||
4
+ (typeof MouseEvent !== `undefined` && event_val instanceof MouseEvent);
5
+ export function get_pointer_coords(raw_event) {
6
+ if (is_pointer_like_event(raw_event)) {
7
+ return raw_event;
8
+ }
9
+ if (!raw_event || typeof raw_event !== `object`)
10
+ return null;
11
+ const event_obj = raw_event;
12
+ if (is_pointer_like_event(event_obj.nativeEvent)) {
13
+ return event_obj.nativeEvent;
14
+ }
15
+ if (is_pointer_like_event(event_obj.srcEvent)) {
16
+ return event_obj.srcEvent;
17
+ }
18
+ const client_x = event_obj.clientX;
19
+ const client_y = event_obj.clientY;
20
+ if (typeof client_x === `number` && typeof client_y === `number`) {
21
+ return { clientX: client_x, clientY: client_y };
22
+ }
23
+ return null;
24
+ }
25
+ /** Convert pointer event to container-relative coords for tooltip placement. */
26
+ export function get_hover_pointer(raw_event, container_rect) {
27
+ const pointer_event = get_pointer_coords(raw_event);
28
+ if (!pointer_event)
29
+ return null;
30
+ const offset_x = container_rect?.left ?? 0;
31
+ const offset_y = container_rect?.top ?? 0;
32
+ const x = pointer_event.clientX - offset_x + 4;
33
+ const y = pointer_event.clientY - offset_y + 4;
34
+ return { x, y };
35
+ }
36
+ /** Add hover pointer to an info object for tooltip placement. */
37
+ export function with_hover_pointer(info, raw_event, container_rect) {
38
+ const pointer = get_hover_pointer(raw_event, container_rect);
39
+ return { ...info, pointer: pointer ?? undefined };
40
+ }
@@ -0,0 +1,15 @@
1
+ import type { PhaseData } from '../convex-hull/types';
2
+ import type { ChemPotDiagramConfig } from './types';
3
+ interface TempFilterProps {
4
+ interpolate_temperature?: boolean;
5
+ max_interpolation_gap?: number;
6
+ }
7
+ export interface TempFilterPayload {
8
+ has_temp_data: boolean;
9
+ available_temperatures: number[];
10
+ temp_filtered_entries: PhaseData[];
11
+ }
12
+ export declare function get_projection_source_entries(entries: PhaseData[], temp_filtered_entries: PhaseData[]): PhaseData[];
13
+ export declare function get_temp_filter_payload(entries: PhaseData[], temperature: number | undefined, config: ChemPotDiagramConfig, props: TempFilterProps): TempFilterPayload;
14
+ export declare function get_valid_temperature(temperature: number | undefined, has_temp_data: boolean, available_temperatures: number[]): number | undefined;
15
+ export {};
@@ -0,0 +1,37 @@
1
+ import { analyze_temperature_data, filter_entries_at_temperature, } from '../convex-hull/helpers';
2
+ import { CHEMPOT_DEFAULTS } from './types';
3
+ export function get_projection_source_entries(entries, temp_filtered_entries) {
4
+ return temp_filtered_entries.length > 0 ? temp_filtered_entries : entries;
5
+ }
6
+ function resolve_temp_filter_options(config, props) {
7
+ return {
8
+ interpolate: config.interpolate_temperature ?? props.interpolate_temperature ??
9
+ CHEMPOT_DEFAULTS.interpolate_temperature,
10
+ max_interpolation_gap: config.max_interpolation_gap ??
11
+ props.max_interpolation_gap ??
12
+ CHEMPOT_DEFAULTS.max_interpolation_gap,
13
+ };
14
+ }
15
+ export function get_temp_filter_payload(entries, temperature, config, props) {
16
+ const { has_temp_data, available_temperatures } = analyze_temperature_data(entries);
17
+ if (!has_temp_data || temperature === undefined) {
18
+ return { has_temp_data, available_temperatures, temp_filtered_entries: entries };
19
+ }
20
+ const filter_options = resolve_temp_filter_options(config, props);
21
+ const temp_filtered_entries = filter_entries_at_temperature(entries, temperature, filter_options);
22
+ return { has_temp_data, available_temperatures, temp_filtered_entries };
23
+ }
24
+ export function get_valid_temperature(temperature, has_temp_data, available_temperatures) {
25
+ if (!has_temp_data || available_temperatures.length === 0)
26
+ return temperature;
27
+ const min_temperature = available_temperatures[0];
28
+ const max_temperature = available_temperatures.at(-1) ?? min_temperature;
29
+ if (temperature === undefined)
30
+ return min_temperature;
31
+ if (available_temperatures.includes(temperature))
32
+ return temperature;
33
+ if (temperature >= min_temperature && temperature <= max_temperature) {
34
+ return temperature;
35
+ }
36
+ return min_temperature;
37
+ }
@@ -0,0 +1,83 @@
1
+ import type { D3InterpolateName } from '../colors';
2
+ import type { PhaseData } from '../convex-hull/types';
3
+ export type ChemPotLimits = Partial<Record<string, [number, number]>>;
4
+ export type ChemPotColorMode = `none` | `energy` | `formation_energy` | `arity` | `entries`;
5
+ export interface ChemPotDiagramConfig {
6
+ formal_chempots?: boolean;
7
+ default_min_limit?: number;
8
+ element_padding?: number;
9
+ label_stable?: boolean;
10
+ elements?: string[];
11
+ limits?: ChemPotLimits;
12
+ formulas_to_draw?: string[];
13
+ draw_formula_meshes?: boolean;
14
+ draw_formula_lines?: boolean;
15
+ formula_colors?: string[];
16
+ show_tooltip?: boolean;
17
+ tooltip_detail_level?: `compact` | `detailed`;
18
+ color_mode?: ChemPotColorMode;
19
+ color_scale?: D3InterpolateName;
20
+ reverse_color_scale?: boolean;
21
+ interpolate_temperature?: boolean;
22
+ max_interpolation_gap?: number;
23
+ }
24
+ export interface ChemPotDiagramData {
25
+ domains: Record<string, number[][]>;
26
+ elements: string[];
27
+ el_refs: Record<string, PhaseData>;
28
+ min_entries: PhaseData[];
29
+ hyperplanes: number[][];
30
+ hyperplane_entries: PhaseData[];
31
+ lims: [number, number][];
32
+ }
33
+ export interface ChemPotHoverPointer {
34
+ x: number;
35
+ y: number;
36
+ }
37
+ export interface ChemPotHoverInfoBase {
38
+ formula: string;
39
+ view: `2d` | `3d`;
40
+ pointer?: ChemPotHoverPointer;
41
+ }
42
+ export interface AxisRangeData {
43
+ element: string;
44
+ min_val: number;
45
+ max_val: number;
46
+ }
47
+ export interface ChemPotHoverInfo2D extends ChemPotHoverInfoBase {
48
+ view: `2d`;
49
+ n_points: number;
50
+ axis_ranges: AxisRangeData[];
51
+ }
52
+ export interface ChemPotHoverInfo3D extends ChemPotHoverInfoBase {
53
+ view: `3d`;
54
+ n_vertices: number;
55
+ n_edges: number;
56
+ n_points: number;
57
+ ann_loc: number[];
58
+ axis_ranges: AxisRangeData[];
59
+ touches_limits: string[];
60
+ is_elemental: boolean;
61
+ is_draw_formula: boolean;
62
+ matching_entry_count: number;
63
+ min_energy_per_atom: number | null;
64
+ max_energy_per_atom: number | null;
65
+ neighbors: string[];
66
+ }
67
+ export type ChemPotHoverInfo = ChemPotHoverInfo2D | ChemPotHoverInfo3D;
68
+ export declare const CHEMPOT_DEFAULTS: {
69
+ readonly formal_chempots: true;
70
+ readonly default_min_limit: -50;
71
+ readonly element_padding: 1;
72
+ readonly label_stable: true;
73
+ readonly draw_formula_meshes: true;
74
+ readonly draw_formula_lines: true;
75
+ readonly show_tooltip: true;
76
+ readonly tooltip_detail_level: "detailed";
77
+ readonly color_mode: ChemPotColorMode;
78
+ readonly color_scale: D3InterpolateName;
79
+ readonly reverse_color_scale: true;
80
+ readonly interpolate_temperature: true;
81
+ readonly max_interpolation_gap: 500;
82
+ readonly formula_colors: readonly ["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02", "#a6761d", "#666666"];
83
+ };
@@ -0,0 +1,27 @@
1
+ // Default configuration values
2
+ export const CHEMPOT_DEFAULTS = {
3
+ formal_chempots: true,
4
+ default_min_limit: -50,
5
+ element_padding: 1.0,
6
+ label_stable: true,
7
+ draw_formula_meshes: true,
8
+ draw_formula_lines: true,
9
+ show_tooltip: true,
10
+ tooltip_detail_level: `detailed`,
11
+ color_mode: `formation_energy`,
12
+ color_scale: `interpolateSpectral`,
13
+ reverse_color_scale: true,
14
+ interpolate_temperature: true,
15
+ max_interpolation_gap: 500,
16
+ // Dark2 qualitative palette (same as pymatgen/plotly default)
17
+ formula_colors: [
18
+ `#1b9e77`,
19
+ `#d95f02`,
20
+ `#7570b3`,
21
+ `#e7298a`,
22
+ `#66a61e`,
23
+ `#e6ab02`,
24
+ `#a6761d`,
25
+ `#666666`,
26
+ ],
27
+ };
@@ -1,13 +1,15 @@
1
1
  import * as d3_sc from 'd3-scale-chromatic';
2
+ import type { Vec3 } from '../math';
2
3
  import type { ELEM_SYMBOLS } from '../labels';
3
4
  export type D3InterpolateName = keyof typeof d3_sc & `interpolate${string}`;
4
5
  export type D3ColorSchemeName = D3InterpolateName extends `interpolate${infer Name}` ? Name : never;
6
+ export declare const get_d3_interpolator: (name: D3InterpolateName) => (t: number) => string;
5
7
  export declare const COLOR_SCALE_TYPES: readonly ["continuous", "categorical"];
6
8
  export type ColorScaleType = (typeof COLOR_SCALE_TYPES)[number];
7
9
  export declare const DEFAULT_CATEGORY_COLORS: Record<string, string>;
8
10
  export declare const AXIS_COLORS: readonly [readonly ["x", "#d75555", "#e66666"], readonly ["y", "#55b855", "#66c966"], readonly ["z", "#5555d7", "#6666e6"]];
9
11
  export declare const NEG_AXIS_COLORS: readonly [readonly ["nx", "#b84444", "#cc5555"], readonly ["ny", "#44a044", "#55b155"], readonly ["nz", "#4444b8", "#5555c9"]];
10
- export type RGBColor = [number, number, number];
12
+ export type RGBColor = Vec3;
11
13
  export type ElementColorScheme = Record<(typeof ELEM_SYMBOLS)[number], RGBColor>;
12
14
  export declare const vesta_hex: Record<string, string>;
13
15
  export declare const jmol_hex: Record<string, string>;
@@ -6,6 +6,10 @@ import jmol_colors from './jmol-colors.json' with { type: 'json' };
6
6
  import muted_colors from './muted-colors.json' with { type: 'json' };
7
7
  import pastel_colors from './pastel-colors.json' with { type: 'json' };
8
8
  import vesta_colors from './vesta-colors.json' with { type: 'json' };
9
+ export const get_d3_interpolator = (name) => {
10
+ const candidate = d3_sc[name];
11
+ return typeof candidate === `function` ? candidate : d3_sc.interpolateViridis;
12
+ };
9
13
  export const COLOR_SCALE_TYPES = [`continuous`, `categorical`];
10
14
  // color values have to be in hex format since that's the only format
11
15
  // <input type="color"> supports
@@ -60,14 +60,11 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
60
60
  <tspan class="element-symbol" style:font-size="{10 * segment.font_scale}px">
61
61
  {segment.element}
62
62
  </tspan>
63
- {#if show_amounts}
64
- <tspan class="amount" style:font-size="{8 * segment.font_scale}px" dx="1" dy="5">
65
- {segment.amount}
66
- </tspan>
67
- {/if}
68
- {#if show_percentages}
69
- <tspan class="percentage" style:font-size="{8 * segment.font_scale}px" dx="1" dy="5">
70
- {format_num(segment.fraction, `.1~%`)}
63
+ {#if show_amounts || show_percentages}
64
+ <tspan class="amount" style:font-size="{6.5 * segment.font_scale}px" dx="1" dy="5">
65
+ {show_amounts ? segment.amount : ``}{show_amounts && show_percentages ? `=` : ``}{
66
+ show_percentages ? format_num(segment.fraction, `.1~%`) : ``
67
+ }
71
68
  </tspan>
72
69
  {/if}
73
70
  {/snippet}
@@ -76,9 +73,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
76
73
  viewBox="0 0 {size} {svg_height}"
77
74
  {...rest}
78
75
  class="bar-chart {rest.class ?? ``}"
79
- style={`--bar-height: ${bar_height}px; --label-height: ${label_height}px; --gap: ${gap}px; --border-radius: ${
80
- outer_corners_only ? 4 : 0
81
- }px; ${rest.style ?? ``}`}
76
+ style:max-width="{size}px"
82
77
  bind:this={svg_node}
83
78
  >
84
79
  <!-- Background and border -->
@@ -87,11 +82,8 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
87
82
  y={bar_y}
88
83
  width={size}
89
84
  height={bar_height}
90
- rx={outer_corners_only ? 4 : 0}
91
- ry={outer_corners_only ? 4 : 0}
92
- fill="var(--bar-bg, #fff)"
93
- stroke="var(--bar-border, #ccc)"
94
- stroke-width="1"
85
+ fill="var(--bar-bg)"
86
+ stroke="var(--bar-border, none)"
95
87
  />
96
88
 
97
89
  <!-- External labels above -->
@@ -119,8 +111,8 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
119
111
  y={bar_y}
120
112
  width={size}
121
113
  height={bar_height}
122
- rx={outer_corners_only ? 4 : 0}
123
- ry={outer_corners_only ? 4 : 0}
114
+ rx={outer_corners_only ? 2 : 0}
115
+ ry={outer_corners_only ? 2 : 0}
124
116
  />
125
117
  </clipPath>
126
118
  </defs>
@@ -169,7 +161,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
169
161
  x={segment.label_x}
170
162
  y={segment.label_y}
171
163
  text-anchor="middle"
172
- dominant-baseline="middle"
164
+ dominant-baseline={show_amounts || show_percentages ? `middle` : `central`}
173
165
  class="bar-label"
174
166
  style:fill={segment.text_color}
175
167
  >
@@ -201,8 +193,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
201
193
  <style>
202
194
  .bar-chart {
203
195
  display: inline-block;
204
- width: 100%;
205
- max-width: var(--bar-max-width, 100%);
196
+ --bar-bg: light-dark(#fff, #333);
206
197
  }
207
198
  .bar-segment {
208
199
  transition: all 0.2s ease;
@@ -227,7 +218,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
227
218
  .element-symbol {
228
219
  font-weight: 700;
229
220
  }
230
- .amount, .percentage {
221
+ .amount {
231
222
  font-weight: 500;
232
223
  }
233
224
  </style>
@@ -54,6 +54,7 @@ let hovered_element = $state(null);
54
54
 
55
55
  <svg
56
56
  viewBox="0 0 {size} {size}"
57
+ style:max-width="{size}px"
57
58
  {...rest}
58
59
  class="bubble-chart {rest.class ?? ``}"
59
60
  bind:this={svg_node}
@@ -104,9 +105,10 @@ let hovered_element = $state(null);
104
105
  bubble.element
105
106
  }</span>
106
107
  {#if show_amounts}
107
- <sub class="amount" style:font-size="{10 * bubble.font_scale}px">
108
- {bubble.amount}
109
- </sub>{/if}
108
+ <sub class="amount" style:font-size="{8 * bubble.font_scale}px">{
109
+ bubble.amount
110
+ }</sub>
111
+ {/if}
110
112
  </div>
111
113
  </foreignObject>
112
114
  {/each}