import { useQuery } from "@tanstack/react-query"; import { api, errMsg } from "../api"; import type { StatsDetail } from "../types"; // Statistik-Seite: Zahlen + einfache CSS-Balken (keine Chart-Library). // Balkenbreiten setzt React per CSSOM (element.style), nicht als // style-Attribut im HTML -> von der strikten CSP nicht betroffen. // NumCard ist eine Kennzahl-Kachel: große Zahl + Beschriftung darunter. function NumCard({ value, label }: { value: number; label: string }) { return (
Noch keine Daten.
; const max = Math.max(...items.map((it) => it.value), 1); // Wertespalte für alle Zeilen gleich breit: an der längsten Zahl ausrichten // (in ch), damit die Tracks bündig sind und nicht je nach Stellenzahl wandern. const valWidth = Math.max(...items.map((it) => String(it.value).length)); return items.map((it) => ({errMsg(stats.error, "Statistik konnte nicht geladen werden.")}
} {s && ( <>Seitenaufrufe werden mit anonymisierten Netzen gezählt (IPv4 /16, IPv6 /32). „Netze" ist eine grobe Annäherung an Besucher, keine Personenzählung.
Aufrufe je autonomem System (Netzbetreiber), aufgelöst über GeoLite2-ASN.