/* * ============================================================================= * VibeQuant (vquant) — AI-Powered Financial Intelligence Platform * ----------------------------------------------------------------------------- * File: client/src/components/explore/market-overview.tsx * * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * Website: https://www.spboucher.ai * Demo: https://www.vquant.ai * License: MIT (see LICENSE) * * Copyright © 2026 Simon-Pierre Boucher. All rights reserved. * ============================================================================= */ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { TrendingUp, TrendingDown, Activity, Clock, DollarSign, BarChart3 } from "lucide-react"; interface MarketIndex { symbol: string; name: string; price: number; change: number; changesPercentage: number; dayLow: number; dayHigh: number; yearHigh: number; yearLow: number; volume: number; previousClose: number; } interface MarketStatus { isTheStockMarketOpen: boolean; stockMarketHours: { openingHour: string; closingHour: string; }; } interface Stock { symbol: string; name: string; price: number; changesPercentage: number; change: number; volume?: number; marketCap?: number; } interface MarketOverviewProps { marketIndices?: MarketIndex[]; marketStatus?: MarketStatus; gainers?: Stock[]; losers?: Stock[]; activeStocks?: Stock[]; onTickerClick: (ticker: string) => void; } export function MarketOverview({ marketIndices, marketStatus, gainers, losers, activeStocks, onTickerClick }: MarketOverviewProps) { const formatNumber = (num: number) => { if (num >= 1e9) return `$${(num / 1e9).toFixed(2)}B`; if (num >= 1e6) return `$${(num / 1e6).toFixed(2)}M`; if (num >= 1e3) return `$${(num / 1e3).toFixed(2)}K`; return `$${num.toFixed(2)}`; }; const formatVolume = (vol: number) => { if (vol >= 1e9) return `${(vol / 1e9).toFixed(2)}B`; if (vol >= 1e6) return `${(vol / 1e6).toFixed(2)}M`; if (vol >= 1e3) return `${(vol / 1e3).toFixed(2)}K`; return vol.toString(); }; return (
Performance en temps réel des principaux indices boursiers