Maps

GeoJSON maps: bubble and choropleth, latitude-clamped Mercator by default, pan and zoom.

VerifiedSince 0.1.0

Maps

Basic Usage

Both map components consume a GeoJSON FeatureCollection (the package ships no geo data — bring your own). The default projection is Mercator clamped at ±85.05° latitude, with a display window that crops the empty poles so land fills the container. Container height defaults to the projected window's aspect ratio; pass height for a fixed pixel height. Data uses the accessor pattern: a key or (row) => value both work.

Bubble map

BubbleMap + roam

Bubble area is proportional to value; roam enables wheel zoom and drag pan.

Loading demo...

Choropleth map

ChoroplethMap + legend

Continuous shading interpolates by value; regions without data keep the land fill.

Loading demo...

Projection & Zoom

projection takes a d3-geo projection instance (e.g. geoNaturalEarth1()); null degrades to raw lng/lat (equirectangular). The instance is fitted in place with fitExtent, so pass a stable reference. zoom (default 1.25) multiplies the auto-fit scale; roam enables wheel zoom + drag pan, clamped to [min(1, zoom), zoom × 8], and bubbles/strokes counter-scale so their on-screen size stays constant.

Shading Ramp

Choropleth shading is continuous: normalized values land between two adjacent stops of --tx-chart-map-scale-1..5 and blend with CSS color-mix(in oklab, …) — the ramp flips automatically with the theme and no JS ever parses a color. colorRange swaps the ramp; min/max pin the scale bounds.

API

Shared Props (both components)

PropTypeDefaultDescription
geoJsonMapGeoJsonFeatureCollection, consumer-provided.
center[lng, lat]auto-fitMap center.
zoomnumber1.25Multiplier over the auto-fit scale.
roambooleanfalseWheel zoom + drag pan.
projectionGeoProjection | nullclamped MercatorA d3-geo projection; null for raw lng/lat.
showTooltipbooleantrueHover tooltip.
valueFormat(v: number) => stringtoLocaleStringValue format in the default tooltip.
aspectRationumber | stringprojected aspectContainer aspect ratio.
heightnumberFixed pixel height; overrides aspectRatio.
widthnumbermeasuredExplicit width (SSR/tests).

BubbleMap

PropTypeDefaultDescription
data / lng / lat / value / name?accessorData rows and accessors.
minRadius / maxRadiusnumber6 / 26Radius range (area-proportional, sqrt scaling).
bubbleSize(v: number) => numberExplicit radius, overriding min/max scaling.
bubbleColorMapStyle<T, string>chart blueConstant or (row) => color.
bubbleBorderColor / bubbleBorderWidthMapStyle'transparent' / 0Border styling.

BubbleMap events: bubble-hover(row \| undefined), bubble-click(row); slot tooltip (scope { row }).

ChoroplethMap

PropTypeDefaultDescription
data / name / valueaccessorData rows; name joins features via nameProperty.
namePropertystring'name'Feature property to join on; ISO codes are often more reliable.
colorRangestring[]theme rampLow → high continuous ramp.
min / maxnumberdata extentScale bounds.
noDataColorstringland fillFill for regions without data.
showLegendbooleanfalseGradient legend bar.

ChoroplethMap events: region-hover(row \| undefined), region-click(row) (both fire only for regions with data); slot tooltip (scope { row, regionName, value }).

Differences from kumo

  • projection takes a d3-geo instance directly (kumo wraps { project, unproject } for echarts); null is implemented as equirectangular.
  • Zoom is an SVG transform; bubbles/strokes counter-scale so their visual size stays constant.
  • tooltipFormatter (HTML string) → the tooltip slot.