import { ArrowDownRight, ArrowUpRight, TrendingDown, TrendingUp, } from 'lucide-react' import { useTranslation } from 'react-i18next' import { getLobeIcon } from '@/lib/lobe-icon' import { cn } from '@/lib/utils' import type { RankingMover } from '../types' import { ModelLink, VendorLink } from './entity-links' type PulseSectionProps = { movers: RankingMover[] droppers: RankingMover[] } /** * Rank movement panel: gainers and losers calculated from the previous period. */ export function PulseSection(props: PulseSectionProps) { const { t } = useTranslation() return (
} > {props.movers.length === 0 ? ( ) : (
    {props.movers.map((row) => ( ))}
)}
} > {props.droppers.length === 0 ? ( ) : (
    {props.droppers.map((row) => ( ))}
)}
) } function PulseCard(props: { title: string description: string icon: React.ReactNode children: React.ReactNode }) { return (

{props.icon} {props.title}

{props.description}

{props.children}
) } function PulseEmpty(props: { label: string }) { return (
{props.label}
) } function MoverRow(props: { row: RankingMover; intent: 'up' | 'down' }) { return (
  • {getLobeIcon(props.row.vendor_icon, 20)}
    {props.row.model_name}

    #{props.row.current_rank} ยท{' '} {props.row.vendor.toLowerCase()}

    {props.intent === 'up' ? ( ) : ( )} {Math.abs(props.row.rank_delta)}
  • ) }