"use client"; import { useRef } from "react"; import { motion } from "motion/react"; import DottedMap from "dotted-map"; interface MapProps { dots?: Array<{ start: { lat: number; lng: number; label?: string }; end: { lat: number; lng: number; label?: string }; }>; lineColor?: string; } export default function WorldMap({ dots = [], lineColor = "#06b6d4", // cyan-500 }: MapProps) { const svgRef = useRef(null); // ✅ Force dark-dotted map theme const map = new DottedMap({ height: 100, grid: "diagonal" }); const svgMap = map.getSVG({ radius: 0.22, color: "#06b6d480", // cyan-500 at 50% opacity shape: "circle", backgroundColor: "#111111", }); // ✅ Point projection stays the same const projectPoint = (lat: number, lng: number) => { const x = (lng + 180) * (800 / 360); const y = (90 - lat) * (400 / 180); return { x, y }; }; const createCurvedPath = (start: any, end: any) => { const midX = (start.x + end.x) / 2; const midY = Math.min(start.y, end.y) - 50; return `M ${start.x} ${start.y} Q ${midX} ${midY} ${end.x} ${end.y}`; }; return (
world map {/* ✅ Lines + points */} {/* ✅ animated curved travel lines */} {dots.map((dot, i) => { const startPoint = projectPoint(dot.start.lat, dot.start.lng); const endPoint = projectPoint(dot.end.lat, dot.end.lng); return ( ); })} {/* ✅ glowing path gradient */} {/* ✅ start & end points with pulsing cyan glow */} {dots.map((dot, i) => { const s = projectPoint(dot.start.lat, dot.start.lng); const e = projectPoint(dot.end.lat, dot.end.lng); return ( {[s, e].map((p, idx) => ( ))} ); })}
); }