import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend, LineChart, Line, PieChart, Pie, Cell, AreaChart, Area, } from "recharts"; const GRID_COLOR = "hsl(210,30%,88%)"; const PALETTES = { ocean: ["#0ea5e9", "#38bdf8", "#7dd3fc", "#0284c7", "#0369a1", "#bae6fd", "#075985", "#e0f2fe", "#0c4a6e", "#67e8f9"], sunset: ["#f97316", "#fb923c", "#fdba74", "#ea580c", "#c2410c", "#fed7aa", "#9a3412", "#ffedd5", "#f59e0b", "#fbbf24"], forest: ["#10b981", "#34d399", "#6ee7b7", "#059669", "#047857", "#a7f3d0", "#065f46", "#d1fae5", "#14b8a6", "#2dd4bf"], berry: ["#8b5cf6", "#a78bfa", "#c4b5fd", "#7c3aed", "#6d28d9", "#ddd6fe", "#5b21b6", "#ede9fe", "#a855f7", "#c084fc"], coral: ["#f43f5e", "#fb7185", "#fda4af", "#e11d48", "#be123c", "#fecdd3", "#9f1239", "#ffe4e6", "#ef4444", "#f87171"], teal: ["#14b8a6", "#2dd4bf", "#5eead4", "#0d9488", "#0f766e", "#99f6e4", "#115e59", "#ccfbf1", "#06b6d4", "#22d3ee"], }; const formatDownloads = (value) => { if (value >= 1e9) return `${(value / 1e9).toFixed(1)}B`; if (value >= 1e6) return `${(value / 1e6).toFixed(0)}M`; if (value >= 1e3) return `${(value / 1e3).toFixed(0)}K`; return value.toString(); }; const tooltipStyle = (bg, border) => ({ backgroundColor: bg, border: `1px solid ${border}`, borderRadius: "8px", boxShadow: "0 4px 12px rgba(0,0,0,0.08)", fontSize: "12px", }); const topExtensionsData = [ { name: "Python", downloads: 191868922 }, { name: "Pylance", downloads: 159723850 }, { name: "Jupyter", downloads: 97904194 }, { name: "Python Debugger", downloads: 97177985 }, { name: "C/C++", downloads: 90573086 }, { name: "Jupyter Keymap", downloads: 77742068 }, { name: "Live Server", downloads: 70873297 }, { name: "Prettier", downloads: 62779089 }, { name: "GitHub Copilot", downloads: 58940446 }, { name: "IntelliCode", downloads: 59951008 }, ]; export const TopExtensionsChart = () => ( [formatDownloads(value), "Downloads"]} contentStyle={tooltipStyle("#f0f9ff", "#bae6fd")} /> {topExtensionsData.map((_, i) => ( ))} ); const trendData = [ { year: 2015, count: 259 }, { year: 2016, count: 814 }, { year: 2017, count: 1236 }, { year: 2018, count: 1285 }, { year: 2019, count: 1400 }, { year: 2020, count: 1441 }, { year: 2021, count: 1199 }, { year: 2022, count: 815 }, { year: 2023, count: 628 }, { year: 2024, count: 330 }, { year: 2025, count: 131 }, ]; export const TrendChart = () => ( ); const categoryData = [ { name: "Programming Languages", value: 3200 }, { name: "Snippets", value: 1800 }, { name: "Linters", value: 1100 }, { name: "Debuggers", value: 950 }, { name: "Themes", value: 870 }, { name: "Formatters", value: 620 }, { name: "Extension Packs", value: 480 }, { name: "Data Science", value: 410 }, { name: "Machine Learning", value: 350 }, { name: "Testing", value: 290 }, { name: "Education", value: 210 }, { name: "AI/Chat", value: 180 }, ]; export const CategoryDistributionChart = () => ( {categoryData.map((_, i) => ( ))} ); const publisherData = [ { name: "Microsoft", downloads: 1069993609 }, { name: "Ritwick Dey", downloads: 70873297 }, { name: "Prettier", downloads: 62779089 }, { name: "GitHub", downloads: 58940446 }, ]; export const TopPublishersChart = () => ( `${name} ${(percent * 100).toFixed(1)}%`} fontSize={12} stroke="#faf5ff" strokeWidth={3}> {publisherData.map((_, i) => ( ))} [formatDownloads(value), "Downloads"]} contentStyle={tooltipStyle("#faf5ff", "#ddd6fe")} /> ); const aiData = [ { name: "Non-AI", value: 8200 }, { name: "AI-Powered", value: 1338 }, ]; export const AiVsNonAiChart = () => ( `${name} ${(percent * 100).toFixed(1)}%`} fontSize={12} stroke="#fff1f2" strokeWidth={3}> ); const reviewData = [ { name: "Python", reviews: 1250 }, { name: "C/C++", reviews: 980 }, { name: "Live Server", reviews: 870 }, { name: "Prettier", reviews: 760 }, { name: "GitHub Copilot", reviews: 720 }, { name: "Pylance", reviews: 650 }, { name: "IntelliCode", reviews: 580 }, { name: "Jupyter", reviews: 520 }, ]; export const HighestReviewsChart = () => ( {reviewData.map((_, i) => ( ))} ); const scatterData = [ { name: "Python", downloads: 191, reviews: 1250 }, { name: "Pylance", downloads: 159, reviews: 650 }, { name: "Jupyter", downloads: 97, reviews: 520 }, { name: "C/C++", downloads: 90, reviews: 980 }, { name: "Live Server", downloads: 70, reviews: 870 }, { name: "Prettier", downloads: 62, reviews: 760 }, { name: "GitHub Copilot", downloads: 58, reviews: 720 }, { name: "IntelliCode", downloads: 59, reviews: 580 }, ]; export const DownloadsVsReviewsChart = () => ( );