import type { D3InterpolateName } from '../../colors'; import type { GasSpecies, GasThermodynamicsConfig, PhaseData } from '../../convex-hull/types'; import type { ElementSymbol } from '../../element'; import type { Vec2, Vec3 } from '../../math'; export type FreeEnergySource = `tabulated` | `sisso` | `static`; export type FreeEnergyMode = FreeEnergySource | `auto`; export interface FreeEnergyOptions { mode?: FreeEnergyMode; gas_config?: GasThermodynamicsConfig; gas_pressures?: Partial>; } export interface PhaseFreeEnergy { source: FreeEnergySource; t_range: Vec2 | null; dg_form: (temperature: number) => number; } export interface DiagramPhase { idx: number; entry: PhaseData; label: string; barycentric: Vec3; xy: Vec2; n_atoms: number; is_element: boolean; source: FreeEnergySource; } export interface Decomposition { phases: number[]; fractions: number[]; } export interface IsothermalSection { temperature: number; dg_form: Float64Array; e_above_hull: Float64Array; stable: number[]; facets: number[][]; edges: Vec2[]; } export type ReactionSide = { phase: number; coeff: number; }[]; export type PhaseEventKind = `appear` | `vanish` | `polymorph` | `tie_line_flip`; export interface Reaction { kind: PhaseEventKind; reactants: ReactionSide; products: ReactionSide; phase?: number; } export interface PhaseEvent { temperature: number; kind: PhaseEventKind; appeared: number[]; vanished: number[]; edges_added: Vec2[]; edges_removed: Vec2[]; reactions: Reaction[]; stable_after: number[]; facets_after: number[][]; } export interface TernaryPhaseDiagram { elements: [ElementSymbol, ElementSymbol, ElementSymbol]; phases: DiagramPhase[]; temperatures: number[]; sections: IsothermalSection[]; events: PhaseEvent[]; stability_windows: Vec2[][]; t_range: Vec2; sources: FreeEnergySource[]; } export interface TernaryPhaseDiagramOptions { temperatures?: number[]; t_range?: Vec2; n_samples?: number; free_energy?: FreeEnergyOptions; elements?: [ElementSymbol, ElementSymbol, ElementSymbol]; event_tolerance?: number; } export type DiagramProgress = { done: number; total: number; }; export interface TernaryDisplay { view: `section` | `prism`; show_tie_lines: boolean; show_tie_triangles: boolean; face_color_mode: `uniform` | `formation_energy` | `facet_index`; face_opacity: number; show_unstable: boolean; max_e_above_hull: number; show_stable_labels: boolean; show_unstable_labels: boolean; show_grid: boolean; color_scale: D3InterpolateName; show_upcoming: boolean; show_map: boolean; show_events: boolean; map_sort: `first_stable` | `composition` | `min_e_hull`; map_filter: `stable_ever` | `near_hull` | `all`; show_map_elements: boolean; show_event_lines: boolean; show_sheets: boolean; sheet_opacity: number; show_rods: boolean; show_event_rings: boolean; ghost_above_plane: boolean; play_speed: number; } export declare const TERNARY_DISPLAY_DEFAULTS: Readonly; export declare const TERNARY_COLORS: Readonly<{ stable: string; face: "#4caf50"; selected: "#66f0ff"; highlight: "#ff9800"; element: "#9e9e9e"; }>; export type SectionHover = { kind: `phase`; phase: DiagramPhase; e_above_hull: number; position: Vec2; } | { kind: `composition`; barycentric: Vec3; decomposition: Decomposition | null; position: Vec2; }; export type PhaseTemperatureHover = { phase: number; temperature: number; position: Vec2; };