Skip to main content

MapAnnotation

Map and Layers

A text note pinned to a lon / lat with a leader line — an HTML overlay that follows the map.

import { MapAnnotation } from "@elabs-ai/components-maps";
Install
npm install @elabs-ai/components-tokens @elabs-ai/components-ui @elabs-ai/components-maps

Skipping the @source line is the most common first failure: Tailwind does not scan node_modules, so every component renders unstyled. The one-time wiring

Prompt for your coding agent

Paste it into Claude Code, Cursor, Codex or any other coding agent. Text in [brackets] is yours to fill in.

Add the brand-ui MapAnnotation component (from @elabs-ai/components-maps) to this project.

1. Read https://elabs-ai.com/llms.txt first: it maps every package and the rules. If you can use MCP servers, connect https://elabs-ai.com/mcp and use its search, docs and tokens tools. If not, run the same lookups in the terminal: `npx -y @elabs-ai/components-cli search "<what you need>"` and `npx -y @elabs-ai/components-cli docs <Component>`.
2. Look MapAnnotation up before writing code: `npx -y @elabs-ai/components-cli docs MapAnnotation` prints its real props, variants, what it pairs with and what to avoid.
3. If @elabs-ai/components-maps is not installed yet: `pnpm add @elabs-ai/components-tokens @elabs-ai/components-ui @elabs-ai/components-maps` (or `npm install @elabs-ai/components-tokens @elabs-ai/components-ui @elabs-ai/components-maps`). If this is the first brand-ui package in the project, wire it once: import `@elabs-ai/components-tokens/styles.css` plus the `themes/light.css` and `themes/dark.css` stylesheets in the CSS entry, add one Tailwind `@source` line per installed @elabs-ai package (Tailwind does not scan node_modules, so without it everything renders unstyled), and wrap the app root in `ThemeProvider` from `@elabs-ai/components-tokens`.
4. Use it here: [the screen or file, and what it should show]
5. Rules: use only @elabs-ai/components-* components and the semantic tokens — no raw colours, no raw font sizes, no arbitrary Tailwind values. Look up each component's real props with the docs tool before you use it; never guess a prop.
6. Done means: the typecheck passes, `npx -y @elabs-ai/components-cli audit src --strict` reports nothing, and you have opened the app and looked at every screen you touched in the light and the dark theme.

Examples

3 live examples

Anchors And Arrows

Every anchor around one point, with arrowheads; a note whose `showAt` says `narrow: false` stays off small maps entirely instead of joining the key.

Without Connector

A note with no leader line — the text sits right at its point.

API

MapAnnotation

PropTypeDescription
longituderequirednumberLongitude of the point the note is about.
latituderequirednumberLatitude of the point the note is about.
textrequiredReactNodeThe note. Plain text reads best; it moves into the key at `narrow`.
anchorMapLabelAnchorWhere the text sits relative to the point (default `"top-right"`).
connectorMapAnnotationConnector | falseThe leader line from the point to the text (default: a plain line). Pass `false` to set the text right beside the point with no line.
showAtMapResponsive<boolean>Whether the note shows at a tier (default `true` everywhere). A hidden note takes no number, so the key stays gap-free.
prioritynumberPaint order among annotations: a higher one paints on top (0–8, default 0).

Also accepts: Omit<HTMLAttributes<HTMLDivElement>, "children">

MapAnnotationKey

PropTypeDescription
rowsrequiredreadonly MapAnnotationKeyRow[]The rows, in reading order.

Also accepts: HTMLAttributes<HTMLOListElement>