"use client"; import type { MarketScan, CityDetail } from "@/lib/dashboard-types"; import type { FuturePaceSignalItem } from "./FutureForecastTodayCards"; import { FutureForecastTodayEvidenceGrid } from "./FutureForecastTodayEvidenceGrid"; import { FutureModelForecastPanel, FutureProbabilityPanel, FutureTemperaturePathChart, } from "./FutureForecastModalPanels"; import { FutureAnchorStatusCard, FuturePaceCard, FuturePaceLoadingCard, } from "./FutureForecastTodayCards"; type Locale = string; interface WeatherSummaryView { weatherIcon: string; weatherText: string; } interface DaylightProgressView { phase: string; percent: number; } // eslint-disable-next-line @typescript-eslint/no-explicit-any type PaceView = any; export interface FutureForecastTodayLayoutProps { locale: Locale; isToday: boolean; dateStr: string; detail: CityDetail; currentTempText: string; weatherSummary: WeatherSummaryView; daylightProgress: DaylightProgressView | null; topObservedTemp: number | string | null | undefined; gapToBaseBucket: number | null; pathStatus: string; showDeferredTodaySections: boolean; paceView: PaceView | null; paceSignalItems: FuturePaceSignalItem[]; baseCaseBucket: string | undefined; upsideBucket: string | null | undefined; nextObservationTime: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any airportMetarAnchor: any; confirmationRules: string[]; invalidationRules: string[]; // eslint-disable-next-line @typescript-eslint/no-explicit-any meteorologySignals: any[]; modelSummary: string; probabilityTitle: string; probabilitySummary: string; activeMarketScan: MarketScan | null | undefined; } export function FutureForecastTodayLayout(props: FutureForecastTodayLayoutProps) { const { locale, isToday, dateStr, detail, currentTempText, weatherSummary, daylightProgress, topObservedTemp, gapToBaseBucket, pathStatus, showDeferredTodaySections, paceView, paceSignalItems, baseCaseBucket, upsideBucket, nextObservationTime, airportMetarAnchor, confirmationRules, invalidationRules, meteorologySignals, modelSummary, probabilityTitle, probabilitySummary, activeMarketScan, } = props; return (
{locale === "en-US" ? "Primary view" : "主视图"}

{locale === "en-US" ? "Today's temperature path (anchor obs + models)" : "今日气温路径(锚点观测 + 模型)"}

{locale === "en-US" ? "Base" : "基准"} ·{" "} {baseCaseBucket || "--"} {locale === "en-US" ? "Upside" : "上修"} ·{" "} {upsideBucket || "--"} {locale === "en-US" ? "Invalidates at" : "失效观察"} ·{" "} {nextObservationTime}
{locale === "en-US" ? "Probability read" : "概率判断"}

{probabilityTitle}

{probabilitySummary}
{locale === "en-US" ? "Model layer" : "模型层"}

{locale === "en-US" ? "Model Range & Spread" : "模型区间与分歧"}

{modelSummary}
); }