import clsx from "clsx"; import type { CSSProperties } from "react"; import type { getTodayPaceView } from "@/lib/pace-utils"; import { WeatherIcon } from "./FutureForecastModalWeatherIcon"; type Locale = string; type TodayPaceView = NonNullable>; type WeatherSummaryView = { weatherIcon: string; weatherText: string; }; type DaylightProgressView = { phase: string; percent: number; }; export type FuturePaceSignalItem = { label: string; tone: "cyan" | "blue" | "amber"; status: string; value: string; note: string; }; export function FutureAnchorStatusCard({ locale, currentTempText, weatherSummary, obsTime, topObservedTemp, tempSymbol, gapToBaseBucket, pathStatus, }: { locale: Locale; currentTempText: string; weatherSummary: WeatherSummaryView; obsTime?: string | null; topObservedTemp: number | string | null | undefined; tempSymbol: string; gapToBaseBucket: number | null; pathStatus: string; }) { const observedHigh = topObservedTemp ?? "--"; return (

{locale === "en-US" ? "Anchor Status" : "锚点状态"}

{locale === "en-US" ? "Settlement anchor and current clock" : "结算锚点与当前时钟"}
{currentTempText}
{weatherSummary.weatherText}
@{obsTime || "--"}
); } export function FuturePaceCard({ locale, paceView, tempSymbol, signalItems, }: { locale: Locale; paceView: TodayPaceView; tempSymbol: string; signalItems: FuturePaceSignalItem[]; }) { return (

{locale === "en-US" ? "Current Pace" : "当前节奏"}

{locale === "en-US" ? "Expected now vs airport anchor" : "此刻应到 vs 机场锚点"}
{paceView.kicker} {paceView.badge}
{paceView.deltaText}
{paceView.summary}
{signalItems.length ? (
{signalItems.map((item) => (
{item.label} {item.status}
{item.value}
{item.note}
))}
) : null}
); } export function FuturePaceLoadingCard({ locale }: { locale: Locale }) { return (

{locale === "en-US" ? "Current Pace" : "当前节奏"}

{locale === "en-US" ? "Backfilling intraday pace context" : "正在补齐日内节奏上下文"}
{locale === "en-US" ? "Expected-now pace, boundary risk, and airport-vs-network cues are loading in the background." : "预期此刻节奏、边界风险和机场对比站网信号正在后台补齐。"}
); } function FutureMiniMetric({ label, value }: { label: string; value: string }) { return (
{label} {value}
); } function FutureSignalTag({ tone, children, }: { tone: string; children: string; }) { return ( {children} ); }