"use client"; import clsx from "clsx"; import Link from "next/link"; import type { Dispatch, SetStateAction } from "react"; import { LogIn, MessageCircle, Moon, Sun, UserRound, } from "lucide-react"; import { ProFeaturePaywall } from "@/components/dashboard/ProFeaturePaywall"; import { LoadingSignal } from "@/components/dashboard/scan-terminal/LoadingSignal"; import type { Locale } from "@/lib/i18n"; export type ScanTerminalContentView = "analysis" | "map" | "monitor" | "runway"; type ThemeMode = "dark" | "light"; export function ScanTerminalLoadingScreen({ isEn, rootClassName, themeMode, userLocalTime, }: { isEn: boolean; rootClassName: string; themeMode: ThemeMode; userLocalTime: string; }) { return (
{isEn ? "AI Weather Decision Terminal" : "AI 天气交易决策台"} {isEn ? "Start from the map, then open city cards to verify weather evidence" : "从地图选城市,再打开决策卡验证天气证据"}
{userLocalTime}
); } export function ScanTerminalTopBar({ accountHref, isAuthenticated, isEn, isPro, locale, onOpenScanPaywall, setThemeMode, themeMode, toggleLocale, userLocalTime, }: { accountHref: string; isAuthenticated: boolean; isEn: boolean; isPro: boolean; locale: Locale; onOpenScanPaywall: () => void; setThemeMode: Dispatch>; themeMode: ThemeMode; toggleLocale: () => void; userLocalTime: string; }) { return (
{isEn ? "AI Weather Decision Terminal" : "AI 天气交易决策台"} {isEn ? "Start from the map, then open city cards to verify weather evidence" : "从地图选城市,再打开决策卡验证天气证据"}
{userLocalTime} {isPro ? null : isAuthenticated ? ( ) : ( {isEn ? "Sign in" : "登录"} )} {isAuthenticated ? ( ) : null}
); } export function ScanUpgradeAnnouncement({ isEn, onDismiss, }: { isEn: boolean; onDismiss: () => void; }) { return (
{isEn ? "v1.5.6 upgrade" : "v1.5.6 升级公告"} {isEn ? "Scan terminal is upgraded to v1.5.6" : "决策终端已升级到 v1.5.6"}

{isEn ? "City decision cards have been redesigned with a compact hero layout and consistent DEB data source. Sticky headers are removed for smoother scrolling." : "城市决策卡 hero 布局重新设计,三指标并列对比更直观;DEB 数据源统一不再出现不一致;去除顶部固定效果滚动更流畅。"}

); } export function ScanPaywallModal({ isEn, onClose, }: { isEn: boolean; onClose: () => void; }) { return (
{ if (event.target === event.currentTarget) { onClose(); } }} >
); }