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 = () => (
);