import type { Matrix3x3, Vec3 } from '../math'; import type { InternalPoint } from '../plot'; import type { PymatgenCompleteDos } from './helpers'; export type BandStructureType = `phonon` | `electronic`; export type PathMode = `union` | `intersection` | `strict`; export type FrequencyUnit = `THz` | `eV` | `meV` | `Ha` | `cm-1`; export type NormalizationMode = `max` | `sum` | `integral` | null; export interface QPoint { label: string | null; frac_coords: Vec3; distance?: number; } export interface Branch { start_index: number; end_index: number; name: string; } export interface BaseBandStructure { recip_lattice: { matrix: Matrix3x3; }; qpoints: QPoint[]; branches: Branch[]; labels_dict: Record; distance: number[]; nb_bands: number; bands: number[][]; spin_down_bands?: number[][]; band_widths?: number[][]; } export interface RibbonConfig { color?: string; opacity?: number; max_width?: number; scale?: number; } export interface PhononBandStructure extends BaseBandStructure { has_imaginary_modes?: boolean; has_nac?: boolean; } export interface ElectronicBandStructure extends BaseBandStructure { is_spin_polarized: boolean; efermi?: number; is_metal?: boolean; band_gap?: { energy: number; direct: boolean; transition?: string; }; } export interface PhononDos { type: `phonon`; frequencies: number[]; densities: number[]; } export interface ElectronicDos { type: `electronic`; energies: number[]; densities: number[]; spin_down_densities?: number[]; spin_polarized?: boolean; efermi?: number; dos_at_e_fermi?: number; } export type SpinMode = `mirror` | `overlay` | `up_only` | `down_only` | null; export type BandsSpinMode = Exclude; export type PdosType = `atom` | `orbital`; export interface StackedAreaData { x_values: number[]; upper_densities: number[]; lower_densities: number[]; color: string; } export type DosData = PhononDos | ElectronicDos; export type DosInput = DosData | PymatgenCompleteDos; export type LineKwargs = Record | { acoustic?: Record; optical?: Record; } | ((frequencies: number[], band_idx: number) => Record); export interface HoveredData { hovered_frequency?: number | null; hovered_band_point?: InternalPoint | null; hovered_qpoint_index?: number | null; }