import React, { useMemo, useState } from "react";// Lady Gaga – The MAYHEM Ball (2025–2026)// Transparent overlay UI + English labels// Includes LATAM, South Africa, Europe Summer 2026, North America Late Summer 2026// Adds lightweight self-tests rendered in a
block// ────────────────────────────────────────────────────────────────────────────────// Data// ────────────────────────────────────────────────────────────────────────────────const SHOWS = [ // --- NORTH AMERICA (ARENAS 2025) --- { date: "2025-07-16", city: "Paradise (Las Vegas)", country: "USA", venue: "T-Mobile Arena", region: "NA" }, { date: "2025-07-18", city: "Paradise (Las Vegas)", country: "USA", venue: "T-Mobile Arena", region: "NA" }, { date: "2025-07-19", city: "Paradise (Las Vegas)", country: "USA", venue: "T-Mobile Arena", region: "NA" }, { date: "2025-07-22", city: "San Francisco", country: "USA", venue: "Chase Center", region: "NA" }, { date: "2025-07-24", city: "San Francisco", country: "USA", venue: "Chase Center", region: "NA" }, { date: "2025-07-26", city: "San Francisco", country: "USA", venue: "Chase Center", region: "NA" }, { date: "2025-07-28", city: "Inglewood (Los Angeles)", country: "USA", venue: "Kia Forum", region: "NA" }, { date: "2025-07-29", city: "Inglewood (Los Angeles)", country: "USA", venue: "Kia Forum", region: "NA" }, { date: "2025-08-01", city: "Inglewood (Los Angeles)", country: "USA", venue: "Kia Forum", region: "NA" }, { date: "2025-08-02", city: "Inglewood (Los Angeles)", country: "USA", venue: "Kia Forum", region: "NA" }, { date: "2025-08-06", city: "Seattle", country: "USA", venue: "Climate Pledge Arena", region: "NA" }, { date: "2025-08-07", city: "Seattle", country: "USA", venue: "Climate Pledge Arena", region: "NA" }, { date: "2025-08-09", city: "Seattle", country: "USA", venue: "Climate Pledge Arena", region: "NA" }, { date: "2025-08-22", city: "New York City", country: "USA", venue: "Madison Square Garden", region: "NA" }, { date: "2025-08-23", city: "New York City", country: "USA", venue: "Madison Square Garden", region: "NA" }, { date: "2025-08-26", city: "New York City", country: "USA", venue: "Madison Square Garden", region: "NA" }, { date: "2025-08-27", city: "New York City", country: "USA", venue: "Madison Square Garden", region: "NA" }, { date: "2025-09-06", city: "New York City", country: "USA", venue: "Madison Square Garden", region: "NA" }, { date: "2025-09-07", city: "New York City", country: "USA", venue: "Madison Square Garden", region: "NA" }, { date: "2025-08-31", city: "Miami", country: "USA", venue: "Kaseya Center", region: "NA" }, { date: "2025-09-01", city: "Miami", country: "USA", venue: "Kaseya Center", region: "NA" }, { date: "2025-09-03", city: "Miami", country: "USA", venue: "Kaseya Center", region: "NA" }, { date: "2025-09-10", city: "Toronto", country: "Canada", venue: "Scotiabank Arena", region: "NA" }, { date: "2025-09-11", city: "Toronto", country: "Canada", venue: "Scotiabank Arena", region: "NA" }, { date: "2025-09-13", city: "Toronto", country: "Canada", venue: "Scotiabank Arena", region: "NA" }, { date: "2025-09-15", city: "Chicago", country: "USA", venue: "United Center", region: "NA" }, { date: "2025-09-17", city: "Chicago", country: "USA", venue: "United Center", region: "NA" }, { date: "2025-09-18", city: "Chicago", country: "USA", venue: "United Center", region: "NA" }, // --- EUROPE / UK (ARENAS 2025) --- { date: "2025-09-29", city: "London", country: "UK", venue: "The O2", region: "EU" }, { date: "2025-09-30", city: "London", country: "UK", venue: "The O2", region: "EU" }, { date: "2025-10-02", city: "London", country: "UK", venue: "The O2", region: "EU" }, { date: "2025-10-04", city: "London", country: "UK", venue: "The O2", region: "EU" }, { date: "2025-10-07", city: "Manchester", country: "UK", venue: "Co-op Live", region: "EU" }, { date: "2025-10-08", city: "Manchester", country: "UK", venue: "Co-op Live", region: "EU" }, { date: "2025-10-12", city: "Stockholm", country: "Sweden", venue: "Avicii Arena", region: "EU" }, { date: "2025-10-13", city: "Stockholm", country: "Sweden", venue: "Avicii Arena", region: "EU" }, { date: "2025-10-15", city: "Stockholm", country: "Sweden", venue: "Avicii Arena", region: "EU" }, { date: "2025-10-19", city: "Milan", country: "Italy", venue: "Unipol Forum", region: "EU" }, { date: "2025-10-20", city: "Milan", country: "Italy", venue: "Unipol Forum", region: "EU" }, { date: "2025-10-28", city: "Barcelona", country: "Spain", venue: "Palau Sant Jordi", region: "EU" }, { date: "2025-10-29", city: "Barcelona", country: "Spain", venue: "Palau Sant Jordi", region: "EU" }, { date: "2025-10-31", city: "Barcelona", country: "Spain", venue: "Palau Sant Jordi", region: "EU" }, { date: "2025-11-04", city: "Berlin", country: "Germany", venue: "Uber Arena", region: "EU" }, { date: "2025-11-05", city: "Berlin", country: "Germany", venue: "Uber Arena", region: "EU" }, { date: "2025-11-09", city: "Amsterdam", country: "Netherlands", venue: "Ziggo Dome", region: "EU" }, { date: "2025-11-11", city: "Antwerp", country: "Belgium", venue: "AFAS Dome (Sportpaleis)", region: "EU" }, { date: "2025-11-13", city: "Lyon", country: "France", venue: "LDLC Arena", region: "EU" }, { date: "2025-11-14", city: "Lyon", country: "France", venue: "LDLC Arena", region: "EU" }, { date: "2025-11-17", city: "Paris", country: "France", venue: "Accor Arena", region: "EU" }, { date: "2025-11-18", city: "Paris", country: "France", venue: "Accor Arena", region: "EU" }, { date: "2025-11-20", city: "Paris", country: "France", venue: "Accor Arena", region: "EU" }, // --- AUSTRALIA (STADIUMS 2025) --- { date: "2025-12-05", city: "Melbourne", country: "Australia", venue: "Marvel Stadium", region: "AU" }, { date: "2025-12-06", city: "Melbourne", country: "Australia", venue: "Marvel Stadium", region: "AU" }, { date: "2025-12-09", city: "Brisbane", country: "Australia", venue: "Suncorp Stadium", region: "AU" }, { date: "2025-12-12", city: "Sydney", country: "Australia", venue: "Accor Stadium", region: "AU" }, { date: "2025-12-13", city: "Sydney", country: "Australia", venue: "Accor Stadium", region: "AU" }, // --- JAPAN (DOMES 2026) --- { date: "2026-01-21", city: "Osaka", country: "Japan", venue: "Kyocera Dome", region: "JP" }, { date: "2026-01-22", city: "Osaka", country: "Japan", venue: "Kyocera Dome", region: "JP" }, { date: "2026-01-25", city: "Tokyo", country: "Japan", venue: "Tokyo Dome", region: "JP" }, { date: "2026-01-26", city: "Tokyo", country: "Japan", venue: "Tokyo Dome", region: "JP" }, { date: "2026-01-29", city: "Tokyo", country: "Japan", venue: "Tokyo Dome", region: "JP" }, { date: "2026-01-30", city: "Tokyo", country: "Japan", venue: "Tokyo Dome", region: "JP" }, // --- LATIN AMERICA (SPRING 2026) --- { date: "2026-03-05", city: "Mexico City", country: "Mexico", venue: "Foro Sol", region: "LATAM" }, { date: "2026-03-07", city: "Mexico City", country: "Mexico", venue: "Foro Sol", region: "LATAM" }, { date: "2026-03-15", city: "Buenos Aires", country: "Argentina", venue: "Estadio Monumental", region: "LATAM" }, { date: "2026-03-20", city: "São Paulo", country: "Brazil", venue: "Allianz Parque", region: "LATAM" }, { date: "2026-03-22", city: "São Paulo", country: "Brazil", venue: "Allianz Parque", region: "LATAM" }, { date: "2026-03-26", city: "Rio de Janeiro", country: "Brazil", venue: "Maracanã", region: "LATAM" }, { date: "2026-03-28", city: "Rio de Janeiro", country: "Brazil", venue: "Maracanã", region: "LATAM" }, // --- SOUTH AFRICA (EARLY SUMMER 2026) --- { date: "2026-05-10", city: "Johannesburg", country: "South Africa", venue: "FNB Stadium", region: "AF" }, { date: "2026-05-14", city: "Cape Town", country: "South Africa", venue: "DHL Stadium", region: "AF" }, // --- EUROPE (SUMMER 2026 STADIUMS) --- { date: "2026-06-10", city: "London", country: "UK", venue: "Wembley Stadium", region: "EU" }, { date: "2026-06-12", city: "London", country: "UK", venue: "Wembley Stadium", region: "EU" }, { date: "2026-06-14", city: "London", country: "UK", venue: "Wembley Stadium", region: "EU" }, { date: "2026-06-20", city: "Paris", country: "France", venue: "Stade de France", region: "EU" }, { date: "2026-06-22", city: "Paris", country: "France", venue: "Stade de France", region: "EU" }, { date: "2026-06-24", city: "Paris", country: "France", venue: "Stade de France", region: "EU" }, { date: "2026-06-26", city: "Paris", country: "France", venue: "Stade de France", region: "EU" }, { date: "2026-07-09", city: "Berlin", country: "Germany", venue: "Olympiastadion", region: "EU" }, { date: "2026-07-13", city: "Amsterdam", country: "Netherlands", venue: "Johan Cruyff Arena", region: "EU" }, { date: "2026-07-18", city: "Madrid", country: "Spain", venue: "Civitas Metropolitano", region: "EU" }, { date: "2026-07-22", city: "Zurich", country: "Switzerland", venue: "Letzigrund Stadion", region: "EU" }, { date: "2026-07-24", city: "Milan", country: "Italy", venue: "San Siro Stadium", region: "EU" }, { date: "2026-07-25", city: "Milan", country: "Italy", venue: "San Siro Stadium", region: "EU" }, { date: "2026-07-27", city: "Athens", country: "Greece", venue: "Olympic Stadium", region: "EU" }, { date: "2026-07-31", city: "Stockholm", country: "Sweden", venue: "Friends Arena", region: "EU" }, { date: "2026-08-05", city: "Vienna", country: "Austria", venue: "Ernst Happel Stadion", region: "EU" }, // --- NORTH AMERICA (LATE SUMMER 2026 STADIUMS) --- { date: "2026-08-20", city: "New York", country: "USA", venue: "MetLife Stadium", region: "NA" }, { date: "2026-08-22", city: "New York", country: "USA", venue: "MetLife Stadium", region: "NA" }, { date: "2026-08-25", city: "Los Angeles", country: "USA", venue: "SoFi Stadium", region: "NA" }, { date: "2026-08-28", city: "Los Angeles", country: "USA", venue: "SoFi Stadium", region: "NA" }, { date: "2026-09-02", city: "Chicago", country: "USA", venue: "Soldier Field", region: "NA" }, { date: "2026-09-06", city: "Toronto", country: "Canada", venue: "Rogers Centre", region: "NA" }, { date: "2026-09-10", city: "Miami", country: "USA", venue: "Hard Rock Stadium", region: "NA" }, { date: "2026-09-15", city: "Las Vegas", country: "USA", venue: "Allegiant Stadium", region: "NA" }, { date: "2026-09-20", city: "Boston", country: "USA", venue: "Gillette Stadium", region: "NA" }, { date: "2026-09-25", city: "Dallas", country: "USA", venue: "AT&T Stadium", region: "NA" },] as const;type Show = (typeof SHOWS)[number];const REGIONS = ["NA", "EU", "AU", "JP", "LATAM", "AF"] as const;type Region = typeof REGIONS[number];type FilterRegion = Region | "ALL";// ────────────────────────────────────────────────────────────────────────────────// Helpers// ────────────────────────────────────────────────────────────────────────────────function classNames(...classes: Array) { return classes.filter(Boolean).join(" ");}function formatDate(d: string) { return new Date(d + "T12:00:00").toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", });}function groupByMonth(shows: Show[]) { const fmt = new Intl.DateTimeFormat("en-US", { year: "numeric", month: "long" }); return shows.reduce>((acc, s) => { const k = fmt.format(new Date(s.date + "T12:00:00")); (acc[k] ||= []).push(s); return acc; }, {});}// ────────────────────────────────────────────────────────────────────────────────// Lightweight self-tests (render-only)// ────────────────────────────────────────────────────────────────────────────────function runSelfTests(dataset: Show[]) { const results: { name: string; pass: boolean; info?: string }[] = []; const iso = /^\d{4}-\d{2}-\d{2}$/; const allIso = dataset.every((s) => iso.test(s.date)); results.push({ name: "Dates are ISO YYYY-MM-DD", pass: allIso }); const allParsable = dataset.every((s) => !Number.isNaN(new Date(s.date + "T12:00:00").getTime())); results.push({ name: "Dates are parsable", pass: allParsable }); const allRegionsValid = dataset.every((s) => (REGIONS as readonly string[]).includes(s.region)); results.push({ name: "Regions valid", pass: allRegionsValid }); const counts = Object.fromEntries(REGIONS.map((r) => [r, dataset.filter((s) => s.region === r).length])); results.push({ name: "Has NA shows", pass: counts["NA"] > 0, info: `${counts["NA"]}` }); results.push({ name: "Has EU shows", pass: counts["EU"] > 0, info: `${counts["EU"]}` }); results.push({ name: "Has AU shows", pass: counts["AU"] > 0, info: `${counts["AU"]}` }); results.push({ name: "Has JP shows", pass: counts["JP"] > 0, info: `${counts["JP"]}` }); results.push({ name: "Has LATAM shows", pass: counts["LATAM"] > 0, info: `${counts["LATAM"]}` }); results.push({ name: "Has AF shows", pass: counts["AF"] > 0, info: `${counts["AF"]}` }); // Specific spot checks from the user-provided dates const tokyoCount = dataset.filter((s) => s.city === "Tokyo").length; results.push({ name: "Tokyo has 4 shows", pass: tokyoCount === 4, info: `${tokyoCount}` }); const mexicoCityCount = dataset.filter((s) => s.city === "Mexico City").length; results.push({ name: "Mexico City has 2 shows", pass: mexicoCityCount === 2, info: `${mexicoCityCount}` }); const sanSiroCount = dataset.filter((s) => s.venue === "San Siro Stadium").length; results.push({ name: "Milan San Siro has 2 shows", pass: sanSiroCount === 2, info: `${sanSiroCount}` }); const southAfricaCount = dataset.filter((s) => s.region === "AF").length; results.push({ name: "South Africa has 2 shows", pass: southAfricaCount === 2, info: `${southAfricaCount}` }); return results;}// ────────────────────────────────────────────────────────────────────────────────// Component// ────────────────────────────────────────────────────────────────────────────────export default function MayhemBallDates() { const [query, setQuery] = useState(""); const [region, setRegion] = useState("ALL"); const filtered = useMemo(() => { const q = query.trim().toLowerCase(); return SHOWS.filter((s) => (region === "ALL" || s.region === region) && (!q || `${s.city} ${s.country} ${s.venue}`.toLowerCase().includes(q)) ).sort((a, b) => a.date.localeCompare(b.date)); }, [query, region]); const grouped = useMemo(() => groupByMonth(filtered), [filtered]); const tests = useMemo(() => runSelfTests(SHOWS), []); return (

Lady Gaga – The MAYHEM Ball

setQuery(e.target.value)} />
{Object.entries(grouped).map(([month, shows]) => (

{month}

    {shows.map((s, i) => (
  • {formatDate(s.date)}
    {s.city}, {s.country} · {s.venue}
    {s.region}
  • ))}
))}
Self-tests (click to expand)
    {tests.map((t) => (
  • {t.pass ? "✔" : "✘"} {t.name}{t.info ? ` — ${t.info}` : ""}
  • ))}

Last updated: August 27, 2025. Always check ladygaga.com/live for possible changes.

);}

TICKETS BACK ON SALE ON SEPTEMBER