import { Box, Group, Stack, Text, useComputedColorScheme } from "@mantine/core"; import { IconFlame } from "@tabler/icons-react"; import { type ActivityData, intensityLevel } from "@/modules/searchActivity"; interface ActivityHeatmapProps { data: ActivityData; compact?: boolean; } const WEEKDAYS = [ { key: "sun", label: "" }, { key: "mon", label: "Mon" }, { key: "tue", label: "" }, { key: "wed", label: "Wed" }, { key: "thu", label: "" }, { key: "fri", label: "Fri" }, { key: "sat", label: "" }, ]; export default function ActivityHeatmap({ data, compact = false, }: ActivityHeatmapProps) { const scheme = useComputedColorScheme("light"); const { columns, monthLabels, stats, maxCount, weeks } = data; const gap = compact ? 2 : 3; const labelWidth = compact ? 24 : 28; const labelSize = compact ? 10 : 11; const empty = scheme === "dark" ? "var(--mantine-color-dark-5)" : "var(--mantine-color-gray-2)"; const ramp = scheme === "dark" ? [ "var(--mantine-color-blue-9)", "var(--mantine-color-blue-7)", "var(--mantine-color-blue-5)", "var(--mantine-color-blue-4)", ] : [ "var(--mantine-color-blue-2)", "var(--mantine-color-blue-4)", "var(--mantine-color-blue-6)", "var(--mantine-color-blue-8)", ]; const colorFor = (level: number) => (level === 0 ? empty : ramp[level - 1]); return ( {stats.currentStreak > 0 && ( )} {stats.currentStreak}d Current streak {stats.longestStreak}d Longest {stats.daysActive} Active days Last {weeks} weeks {columns.map((column, colIndex) => ( {monthLabels[colIndex]} ))} {WEEKDAYS.map((weekday) => ( {weekday.label} ))} {columns.map((column, colIndex) => ( {column.map((cell) => ( ))} ))} Less {[0, 1, 2, 3, 4].map((level) => ( ))} More ); }