import { type SkFont } from "@shopify/react-native-skia"; import { type SharedValue } from "react-native-reanimated"; import type { ChartEngineLayout } from "../core/useLiveChartEngine"; import type { ChartPadding } from "../draw/line"; import { type ResolvedMarkerCluster } from "../math/markerCluster"; import type { LiveChartPalette, LiveChartPoint, Marker, MarkerRenderContext, SeriesConfig } from "../types"; /** * Renders the `markers` SharedValue as canvas glyphs. * * Every "stamp" glyph (icon, pill, image, and the trade/winner/boost shapes) is * pre-rasterized once per distinct appearance into a single packed atlas image, * then drawn each frame with ONE `drawAtlas` call driven by a single worklet — * so per-frame UI-thread cost is O(1) mappers + one draw, not O(markers × ~9 * derived values + N Skia subtrees). Axis-anchored kinds (graduation/clawback) * fall back to `ConnectorGlyph`. * * Glyph precedence per marker: `image` → `icon` (text) → built-in `kind` shape. */ type MarkerOverlayProps = { markers: SharedValue; engine: ChartEngineLayout; padding: ChartPadding; palette: LiveChartPalette; font: SkFont; /** Multi-series data, used to anchor markers by `seriesId`. */ series?: SharedValue; /** Single-series line data; anchors markers that omit `value`. */ lineData?: SharedValue; /** Single-series line is drawn linear — anchor `lineData` markers on the chord. */ lineLinear?: boolean; /** * When provided, markers it returns an element for are rendered as RN views by * `CustomMarkerOverlay` instead — so they're excluded from the atlas here to * avoid a (blurry) glyph drawn behind the custom element. */ renderMarker?: (marker: Marker, ctx: MarkerRenderContext) => unknown; /** Collision config; `"stacked"` fans/collapses co-located markers. */ cluster: ResolvedMarkerCluster; }; export declare function MarkerOverlay(props: MarkerOverlayProps): import("react").JSX.Element; export {}; //# sourceMappingURL=MarkerOverlay.d.ts.map