import React from "react"; import type { PointLayerSpec, PolylineLayerSpec, ViewportTransform } from "./types"; import { resolvePointLabels } from "./labelLayout"; interface PointLayerProps { points?: PointLayerSpec[]; polylines?: PolylineLayerSpec[]; viewport: ViewportTransform; compactLabels?: boolean; } export const PointLayer: React.FC = ({ points, polylines, viewport, compactLabels = false, }) => { if (!points || points.length === 0) return null; const placed = resolvePointLabels(points, polylines, viewport, compactLabels); return ( {placed.map((pt) => { const r = pt.radius; return ( {/* Outer subtle halo */} {/* Core dot with crisp white border */} {/* Optional leader line if label was pushed far to avoid collision */} {pt.needsLeaderLine && ( )} {/* Textbook-style Halo Text (no bulky rect block) */} {pt.titleText} {pt.coordText && ( {pt.coordText} )} ); })} ); };