{"version":3,"file":"MapMarkers.cjs","names":[],"sources":["../../src/br/MapMarkers.tsx"],"sourcesContent":["import type { FittedProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapMarkersProps {\n    /** Projection used by the host map (markers must share it to line up). */\n    projection: FittedProjection;\n    /** Pins to plot. */\n    markers: readonly GeoMarker[];\n    /** Fired when a marker is clicked. */\n    onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\n/**\n * SVG overlay of point markers, projected with the host map's projection so\n * they align with its shapes. Each marker carries a native `<title>` (its\n * `label`) and is clickable when `onMarkerClick` is set.\n */\nexport function MapMarkers({ projection, markers, onMarkerClick }: MapMarkersProps) {\n    return (\n        <g className={styles.markers}>\n            {markers.map((marker, index) => {\n                const p = projection.project(marker);\n                const interactive = Boolean(onMarkerClick);\n                return (\n                    <circle\n                        key={marker.id ?? index}\n                        className={styles.marker}\n                        cx={p.x}\n                        cy={p.y}\n                        r={marker.radius ?? 6}\n                        fill={marker.color ?? \"var(--tempest-primary)\"}\n                        data-marker-id={marker.id ?? index}\n                        tabIndex={interactive ? 0 : undefined}\n                        role={interactive ? \"button\" : undefined}\n                        aria-label={marker.label}\n                        onClick={interactive ? () => onMarkerClick?.(marker, index) : undefined}\n                        onKeyDown={\n                            interactive\n                                ? (e) => {\n                                      if (e.key === \"Enter\" || e.key === \" \") {\n                                          e.preventDefault();\n                                          onMarkerClick?.(marker, index);\n                                      }\n                                  }\n                                : undefined\n                        }\n                    >\n                        {marker.label ? <title>{marker.label}</title> : null}\n                    </circle>\n                );\n            })}\n        </g>\n    );\n}\n"],"mappings":"6EAkBA,SAAgB,EAAW,CAAE,aAAY,UAAS,iBAAkC,CAChF,OACI,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,QAChB,SAAA,EAAQ,KAAK,EAAQ,IAAU,CAC5B,IAAM,EAAI,EAAW,QAAQ,CAAM,EAC7B,EAAc,EAAQ,EAC5B,OACI,EAAA,EAAA,IAAA,CAAC,SAAD,CAEI,UAAW,EAAA,QAAO,OAClB,GAAI,EAAE,EACN,GAAI,EAAE,EACN,EAAG,EAAO,QAAU,EACpB,KAAM,EAAO,OAAS,yBACtB,iBAAgB,EAAO,IAAM,EAC7B,SAAU,EAAc,EAAI,IAAA,GAC5B,KAAM,EAAc,SAAW,IAAA,GAC/B,aAAY,EAAO,MACnB,QAAS,MAAoB,IAAgB,EAAQ,CAAK,EAAI,IAAA,GAC9D,UACI,EACO,GAAM,EACC,EAAE,MAAQ,SAAW,EAAE,MAAQ,OAC/B,EAAE,eAAe,EACjB,IAAgB,EAAQ,CAAK,EAErC,EACA,IAAA,GAGT,SAAA,EAAO,OAAQ,EAAA,EAAA,IAAA,CAAC,QAAD,CAAA,SAAQ,EAAO,KAAa,CAAA,EAAI,IAC5C,EAvBC,EAAO,IAAM,CAuBd,CAEhB,CAAC,CACF,CAAA,CAEX"}