"use client"; import clsx from "clsx"; import dynamic from "next/dynamic"; import { useRouter } from "next/navigation"; import { useEffect, useMemo, useRef, useState } from "react"; import { ForecastTable } from "@/components/dashboard/PanelSections"; import { useDashboardModal, useDashboardStore, useProAccess, } from "@/hooks/useDashboardStore"; import { useI18n } from "@/hooks/useI18n"; import { useRelativeTime } from "@/hooks/useRelativeTime"; import { getOfficialSourceLinks } from "@/lib/dashboard-official-sources"; import { trackAppEvent } from "@/lib/app-analytics"; import { getTodayPolymarketUrl } from "@/lib/polymarket-market-links"; import { getCityProfileStats } from "@/lib/dashboard-utils"; import { normalizeObservationSourceLabel } from "@/lib/source-labels"; import { getRiskBadgeLabel } from "@/lib/weather-summary-utils"; const DetailMiniTemperatureChart = dynamic( () => import("@/components/dashboard/DetailMiniTemperatureChart").then( (module) => module.DetailMiniTemperatureChart, ), { loading: () =>
, ssr: false, }, ); export function DetailPanel({ variant = "overlay", }: { variant?: "overlay" | "rail"; } = {}) { const store = useDashboardStore(); const modal = useDashboardModal(); const { proAccess } = useProAccess(); const { locale, t } = useI18n(); const router = useRouter(); const isRail = variant === "rail"; const detail = store.selectedDetail; const selectedCityItem = useMemo( () => store.selectedCity ? store.cities.find((city) => city.name === store.selectedCity) || null : null, [store.cities, store.selectedCity], ); const selectedSummary = useMemo( () => store.selectedCity ? store.citySummariesByName[store.selectedCity] || null : null, [store.citySummariesByName, store.selectedCity], ); const isPro = proAccess.subscriptionActive; const isAuthenticated = proAccess.authenticated; const panelRef = useRef