World Map Square-dot world map with country/continent highlights, city pins, and route links.
Renders the world as a coarse square-dot land grid (Natural Earth 110m derived,
ISO-A2 tagged — zero runtime geo dependencies). Highlight countries or entire
continents with signal tones, pin cities, draw routes, and make regions
selectable. Flat by default; dots snap, nothing animates.
GL GL GL CA CA GL GL GL GL GL CA CA CA CA GL GL RU RU CA CA CA CA GL GL NO NO NO NO RU RU RU RU RU RU CA CA CA GL NO NO NO NO RU RU CA CA CA CA CA CA GL GL NO NO NO RU RU CA CA CA CA CA GL GL NO RU RU CA CA CA CA CA CA CA CA CA GL GL GL GL RU RU RU RU RU CA CA CA CA CA GL GL GL RU RU RU RU RU RU CA CA GL RU RU RU RU CA CA CA CA CA CA CA CA CA CA GL GL RU RU RU RU RU RU RU CA CA CA CA CA CA CA CA CA GL GL RU RU RU RU RU RU RU RU RU US CA CA CA CA CA GL GL GL RU RU RU RU RU RU RU RU RU US CA CA CA CA CA CA CA GL GL GL NO NO NO RU RU RU RU US CA CA CA CA CA CA CA CA CA CA CA CA CA GL NO FI NO FI NO RU RU RU RU RU RU RU RU US CA CA CA CA CA CA CA CA CA CA GL GL NO NO NO SE FI RU RU RU RU RU RU RU RU US CA CA CA CA CA GL NO SE FI RU RU RU RU RU RU US US CA CA CA CA GL GL IS IS NO NO SE FI RU RU RU RU RU RU US CA CA CA CA GL IS NO SE FI RU RU US CA CA CA CA GL GL IS NO SE FI RU RU US US CA CA CA CA CA GL NO SE FI RU US CA CA CA CA CA CA GL FO NO SE FI RU RU US US CA CA GL NO SE FI RU RU RU US US US US CA CA CA CA GL GL GB NO SE AX FI RU RU RU RU US US US CA US CA CA CA NO NO NO SE EE RU RU RU RU US US US US CA CA GB GB NO SE EE EE RU RU US US US US US CA CA GB DK SE SE LV LV RU RU US US US US CA CA CA GB DK SE LV LT LV RU RU US US US CA CA CA IE GB DK DK DK RU LT BY RU KZ RU KZ RU RU CA CA IE GB GB DE DE PL LT BY RU KZ RU KZ RU KZ RU RU RU RU RU US CA CA CA CA IE GB NL DE PL BY RU KZ RU CN RU RU RU US CA CA CA IE GB NL DE PL BY RU UA RU KZ RU CN RU RU CA CA CA GB BE NL DE PL UA RU KZ RU KZ RU KZ RU MN RU CN RU RU RU CA CA CA CA GB GB FR BE DE CZ PL CZ PL UA RU KZ RU KZ RU MN RU MN RU MN RU MN RU CN RU RU RU CA CA CA CA CA FR DE CZ SK PL UA RU KZ RU MN RU MN CN RU RU RU US US CA US CA CA CA FR DE AT SK HU UA RO MD UA RU KZ CN MN CN RU CN RU RU US US CA US CA US CA CA CA FR CH AT HU RO MD UA RU KZ CN MN CN RU RU US CA CA US CA CA CA FR CH FR CH IT CH IT SI HR HU RO MD UA UA RU KZ CN MN CN RU RU US CA CA US CA CA FR IT HR RS RO UA RO RU RU KZ UZ KZ CN KZ CN MN CN RU CN RU JP RU US CA US CA FR IT IT HR BA RS RO RU KZ UZ KZ CN MN CN RU JP JP US CA US ES FR FR IT HR BA ME RS XK RS BG GE RU KZ UZ KZ CN MN CN RU RU JP US CA US ES FR IT ME AL XK MK BG GE RU KZ TM KZ UZ TM UZ KZ KG KZ CN MN CN KP JP JP US PT ES IT AL MK GR BG GR TR TR TR GE AZ GE AZ RU AZ TM UZ KZ UZ KG UZ KG CN KP JP US PT ES IT IT IT AL GR GR TR AM AZ TM UZ TJ UZ KG UZ KG CN CN KP JP US US US PT ES IT IT GR GR TR IR AZ AM AZ IR AZ TM UZ TJ KG TJ CN CN KP JP US US PT ES IT GR GR TR IR TM IR TM UZ TJ AF TJ CN KP KR JP US PT ES TN IT GR TR SY IQ TR IR IR TM AF UZ TJ AF TJ AF TJ AF TJ AF CN CN KR JP US ES DZ TN TR TR TR SY IQ IR TM AF PK CN KR JP JP US MA MA DZ TN GR GR SY IQ IR AF PK IN CN KR JP JP US MA DZ TN LB SY IQ IR AF PK IN CN JP JP JP US MA DZ TN LB IL SY JO IQ IR AF PK IN CN KR JP JP MX US MA DZ TN LY LY PS JO IQ IR AF PK IN CN JP MX MX US MA DZ TN LY LY EG EG PS IL JO SA IQ IR AF PK IN CN MX MX US US US US MA DZ LY EG IL JO SA IQ IR AF PK IN CN NP CN CN MX MX US MX US US US US MA DZ LY EG EG SA JO SA IQ KW IR PK IN NP CN IN CN MX MX MX US US ES MA DZ LY EG EG SA IR PK IN NP CN BT CN IN MM CN JP MX MX US US MA EH DZ LY EG SA IR PK IN NP IN BT IN MM CN MX MX US US MA EH MR DZ LY EG SA IR PK IN BD IN MM CN JP MX MX US MA EH MR DZ LY EG SA QA AE OM IR PK PK PK IN BD IN MM CN MX MX BS MA EH MR ML DZ LY EG SA AE AE OM PK IN PK IN PK IN BD IN MM CN TW MX MX MA EH MR ML DZ NE LY TD LY EG SA AE OM IN BD IN BD IN MM CN VN CN TW MX CU CU MA EH MR ML DZ NE TD LY EG SA OM IN IN BD BD IN MM CN LA VN CN TW MX MX CU MR ML DZ NE TD LY SD SA OM IN IN MM LA CN LA VN CN MX MX CU MR ML DZ NE TD LY SD SA OM OM IN MM TH LA VN US MX MX HT DO MR ML DZ NE TD SD SA OM IN MM TH LA VN CN MX MX BZ JM HT DO DO DO PR MR ML NE TD SD SA YE OM IN MM TH LA TH LA VN PH MX GT BZ MR ML NE TD SD ER SA YE SA YE OM IN MM TH LA VN PH MX MX GT BZ FR SN MR ML NE TD SD ER YE IN MM MM TH LA VN PH MX GT HN CV SN MR ML NE TD SD ER YE IN TH LA VN PH GT SV HN NI SN ML BF NE TD SD ET ER YE IN MM TH KH LA KH VN PH PH SV HN NI VC GM SN GM SN ML BF NE NG NE NG NE NG NE NG TD SD ET ER YE IN MM TH TH KH VN PH PH NI CO GW GN ML GN ML BF NE BJ NE NG CM TD SD ET DJ IN MM TH KH VN PH PH PH NI CO VE GW GN ML BF BJ NG CM TD SD SS SD ET DJ SO IN MM KH VN PH PH PH CR CO VE VE VE TT GN CI ML CI BF GH TG BJ NG CM TD CF SD SS SD SS SD ET SO IN TH VN PH PH CR PA PA CO VE VE GN SL GN CI GH TG BJ NG CM TD CF SD SS ET SO IN LK TH VN PH PH PH PA PA CO VE GY SL LR GN CI GH TG BJ NG CM TD CF SS ET SO IN LK TH PH PA CO VE GY SL LR CI GH TG BJ NG CM CF SS ET SO LK TH MY PH PH PH CO VE CO VE GY LR CI GH TG BJ NG CM CF SS ET SO LK MY TH MY PH CO VE GY BR GY SR FR LR CI GH NG CM CF CD CF SS KE ET SO ID MY MY CO VE BR VE BR GY SR FR CM CF CD CF CD SS KE ET KE ET SO ID MY MY BN MY ID MY CO VE BR GY SR FR BR CM CF CG CD UG KE SO ID MY MY ID CO VE BR GY SR BR FR BR FR BR CM GA CM CG CD UG KE SO ID MY MY ID ID EC CO BR VE BR GY BR GQ GA CG GA CG CD UG KE SO ID ID ID MY ID ID ID ID EC CO EC CO BR BR GA CG CD UG KE SO ID ID ID ID EC EC PE CO BR BR GA CG CD UG KE SO ID ID ID ID ID ID ID EC PE CO BR BR GA CG CD RW TZ KE ID ID ID ID ID ID ID ID ID EC PE CO BR GA CG CD BI RW BI TZ KE ID ID ID ID ID ID ID ID PG PE EC PE CO BR CG CD BI TZ KE ID ID ID ID ID ID ID ID ID PG PE EC PE BR CG AO CD CG CD TZ ID ID ID ID PG PG PE BR CD TZ ID ID ID ID PG PG PG PE BR AO CD TZ ID ID ID ID PG PG PE BR AO CD AO CD TZ ID ID ID ID ID PG PG SB SB PE BR AO CD ZM TZ ID ID ID ID TL ID PG PG SB PE BR PE BR AO CD ZM MW TZ ID ID PG SB PE BR BO BR AO CD ZM MW TZ MZ ID SB PE BO BR AO ZM CD ZM MW MZ KM AU AU AU PE BO BR AO ZM CD ZM MW MZ MG AU AU WS PE BO BR AO ZM MW MZ MG AU AU PE BO BR AO ZM MZ MW MZ MG AU AU AU PE BO BR AO ZM ZW MZ MW MZ MG MG AU AU PE BO BR AO ZM ZW MZ MW MZ MG AU AU AU VU FJ PF PE CL BO BR NA AO NA ZM ZW MZ MG AU FJ CL BO BR NA BW ZW MZ MG AU CL BO PY BO BR NA BW ZW MZ MG AU CL BO PY BR NA BW ZW MZ MG AU NC NC CL BO PY BR NA BW ZW MZ MG AU NC CL BO AR PY BR NA BW ZA MZ MG AU CL AR PY BR NA BW ZA MZ MG AU CL AR PY BR NA BW ZA MZ MG AU AU CL AR PY AR BR NA ZA BW ZA BW ZA MZ AU CL AR PY AR BR NA ZA BW ZA SZ MZ AU CL AR BR NA ZA AU CL AR BR ZA NA ZA LS ZA AU CL AR BR ZA LS ZA AU CL AR UY BR ZA AU CL AR UY BR ZA AU AU CL AR UY BR ZA AU AU CL AR UY ZA AU AU AU CL AR UY ZA AU AU AU AU CL AR AU AU NZ CL AR AU NZ NZ CL AR AU NZ NZ CL AR NZ CL AR NZ CL AR AU NZ CL CL AR AU NZ CL CL AR AR AU NZ NZ CL AR NZ CL CL AR NZ CL AR NZ CL AR CL CL AR CL AR CL AR CL AR CL AR FK CL CL CL CL CL CL AR CL CL AR AR GS Amsterdam (NL) Auckland (NZ) Bangkok (TH) Beijing (CN) Berlin (DE) Bogota (CO) Buenos Aires (AR) Cairo (EG) Casablanca (MA) Delhi (IN) Dubai (AE) Hong Kong (HK) Istanbul (TR) Jakarta (ID) Johannesburg (ZA) Lagos (NG) Lisbon (PT) London (GB) Los Angeles (US) Madrid (ES) Melbourne (AU) Mexico City (MX) Moscow (RU) Mumbai (IN) Nairobi (KE) New York (US) Paris (FR) Riyadh (SA) Rome (IT) Sao Paulo (BR) Seoul (KR) Shanghai (CN) Singapore (SG) Stockholm (SE) Sydney (AU) Tel Aviv (IL) Tokyo (JP) Toronto (CA) Vancouver (CA) Warsaw (PL) Madrid (ES) MADRID Tokyo (JP) TOKYO Sao Paulo (BR) SAO PAULO CLICK A COUNTRY TO SELECT
Source "use client"
import { useState } from "react"
import { WorldMap } from "@/registry/warren/world-map/world-map"
export default function WorldMapDemo () {
const [ selected , setSelected ] = useState < string | null >( null )
return (
< div className = "flex flex-col gap-2" >
< WorldMap
controls
grid
showCities
highlights = {[
{ kind: "continent" , continent: "europe" , tone: "teal" },
{ kind: "country" , cc: "ES" , tone: "primary" },
{ kind: "country" , cc: "BR" , tone: "success" },
{ kind: "country" , cc: "JP" , tone: "danger" },
]}
markers = {[
{ name: "Madrid" , cc: "ES" , lat: 40.42 , lng: - 3.7 , tone: "primary" },
{ name: "Tokyo" , cc: "JP" , lat: 35.68 , lng: 139.69 , tone: "danger" },
{ name: "Sao Paulo" , cc: "BR" , lat: - 23.55 , lng: - 46.63 , tone: "success" },
]}
links = {[
{
id: "mad-tok" ,
from: { lat: 40.42 , lng: - 3.7 },
to: { lat: 35.68 , lng: 139.69 },
tone: "primary" ,
},
{
id: "mad-sao" ,
from: { lat: 40.42 , lng: - 3.7 },
to: { lat: - 23.55 , lng: - 46.63 },
tone: "success" ,
},
]}
onCountryClick = {setSelected}
/>
< p className = "font-mono text-[10px] uppercase tracking-wider text-muted-foreground" >
{selected ? `SELECTED · ${ selected }` : "CLICK A COUNTRY TO SELECT" }
</ p >
</ div >
)
}
bunx shadcn add @warren/world-map
import { WorldMap } from "@/registry/warren/world-map/world-map"
< WorldMap
grid
showCities
highlights = {[
{ kind: "continent" , continent: "europe" , tone: "teal" },
{ kind: "country" , cc: "ES" , tone: "primary" },
]}
markers = {[{ name: "Madrid" , cc: "ES" , lat: 40.42 , lng: - 3.7 }]}
links = {[
{ id: "mad-tok" , from: { lat: 40.42 , lng: - 3.7 }, to: { lat: 35.68 , lng: 139.69 } },
]}
/>
Pass controls to make the viewport interactive: a compact + / − / gear
keypad is pinned to the map's top-right corner, scroll-wheel or
two-finger pinch steps through the discrete zoom ladder (1× → 1.5× → 2× → 3× → 4×),
and drag or arrow keys pan while zoomed (touch-action: none keeps gestures on
the map, off the page). The gear opens a right-side settings sheet (@warren/sheet)
— Switch rows: highlights, route links, points, point labels, city pins, graticule,
and MINIMAL mode, which strips every overlay down to the bare land grid until
toggled off. Toggle state follows the grid/showCities and show* layer
props live (a caller-side toggle updates the matching switch); without
controls, the show* props hide layers directly.
While zoomed-out at fit the land grid renders coarse (every other latitude band,
roughly half the rects) and densifies to full detail on the first zoom step —
the static, control-less map always renders full detail.
< WorldMap controls grid showCities markers = {[ ... ]} />
The toolbar itself is configurable: showZoomControls={false} drops the +/−
stack (wheel/pinch still zoom), showGear={false} drops the settings entry.
< WorldMap controls showGear = { false } highlights = {[ ... ]} />
Pass onCountryClick to receive the ISO-A2 code of any clicked land dot —
use it for region drilldowns in ops consoles.
links draws dashed hairlines between two lat/lng points; tone colors the
stroke using signal semantics (primary = active lane, danger = failing path).