/
45case
/
ptable
Обзор
Документация
Войти
/
45case
/
ptable
Код
Запросы
3
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
dev
src/entities/temperature/lib/getElementState.ts
52 строки
2 KB
Olya
Страница Электроны + сайдбар с характеритстиками (Степень окисления, Конфигурация, Развёрнутая, Уровни энергии, ВЗМО)
24 июл 2026, 11:54
24 июл 2026, 11:54
3cf1d48
Код
Авторство
О чём код?
import type { PeriodicElement } from "@/entities/element/model/elements"; import type { ElementData } from "../model/elementData"; import type { ElementState } from "../model/elementState"; export type ElementPhaseSource = | Pick<ElementData, "meltingPointK" | "boilingPointK"> | Pick<PeriodicElement, "meltingPointKelvin" | "boilingPointKelvin">; /** * Phase at temperature — same rules as ptable.com: * `n||t&&!(e>=t) ? n&&e>=n ? Gas : e>=t||!t ? Liquid : Solid : Unknown` * where e = T(K), t = melt(K), n = boil(K); missing points are treated as absent. */ export function resolveElementState( meltingPointK: number | null, boilingPointK: number | null, temperatureK: number, ): ElementState { const melt = meltingPointK != null && Number.isFinite(meltingPointK) ? meltingPointK : null; const boil = boilingPointK != null && Number.isFinite(boilingPointK) ? boilingPointK : null; const hasKnownPhase = boil != null || (melt != null && !(temperatureK >= melt)); if (!hasKnownPhase) { return "unknown"; } if (boil != null && temperatureK >= boil) { return "gas"; } if (melt == null || temperatureK >= melt) { return "liquid"; } return "solid"; } export function getElementState( element: ElementPhaseSource, temperatureK: number, ): ElementState { if ("meltingPointK" in element) { return resolveElementState(element.meltingPointK, element.boilingPointK, temperatureK); } return resolveElementState( element.meltingPointKelvin, element.boilingPointKelvin, temperatureK, ); }