react-native-livechart 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,27 @@
1
+ import { type SharedValue } from "react-native-reanimated";
2
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
3
+ import type { ChartPadding } from "../draw/line";
4
+ import type { LiveChartPoint, Marker, SeriesConfig } from "../types";
5
+ /**
6
+ * React Native overlay (NOT Skia) that floats `renderMarker` elements over the
7
+ * Skia canvas, one per marker the consumer chooses to customize. Rendered as a
8
+ * sibling of `<Canvas>` (like {@link AxisLabelOverlay}) so the elements can be
9
+ * any RN view — including non-Skia effects (e.g. a glass `BlurView`) — and stay
10
+ * crisp at native resolution instead of being rasterized into the marker atlas.
11
+ *
12
+ * The set of markers is mirrored to JS state via `markersSignature` (same as
13
+ * `MarkerOverlay`); `renderMarker` is then called per marker on the JS thread.
14
+ * Markers it returns an element for are excluded from the Skia atlas upstream, so
15
+ * there's no double-draw.
16
+ */
17
+ export declare function CustomMarkerOverlay({ markers, renderMarker, engine, padding, series, lineData, }: {
18
+ markers: SharedValue<Marker[]>;
19
+ renderMarker: (marker: Marker) => React.ReactElement | null | undefined;
20
+ engine: ChartEngineLayout;
21
+ padding: ChartPadding;
22
+ /** Multi-series data, used to anchor markers by `seriesId`. */
23
+ series?: SharedValue<SeriesConfig[]>;
24
+ /** Single-series line data; anchors markers that omit `value`. */
25
+ lineData?: SharedValue<LiveChartPoint[]>;
26
+ }): import("react/jsx-runtime").JSX.Element | null;
27
+ //# sourceMappingURL=CustomMarkerOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomMarkerOverlay.d.ts","sourceRoot":"","sources":["../../src/components/CustomMarkerOverlay.tsx"],"names":[],"mappings":"AAEA,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAgFrE;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,YAAY,EACZ,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACxE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;CAC1C,kDAwCA"}
@@ -1 +1 @@
1
- {"version":3,"file":"LiveChart.d.ts","sourceRoot":"","sources":["../../src/components/LiveChart.tsx"],"names":[],"mappings":"AA6EA,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,UAAU,CAAC;AAmoClB,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CA0E9C"}
1
+ {"version":3,"file":"LiveChart.d.ts","sourceRoot":"","sources":["../../src/components/LiveChart.tsx"],"names":[],"mappings":"AA6EA,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,UAAU,CAAC;AAwoClB,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAyF9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"LiveChartSeries.d.ts","sourceRoot":"","sources":["../../src/components/LiveChartSeries.tsx"],"names":[],"mappings":"AA+DA,OAAO,KAAK,EAAE,oBAAoB,EAAwB,MAAM,UAAU,CAAC;AAkjB3E,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAqH1D"}
1
+ {"version":3,"file":"LiveChartSeries.d.ts","sourceRoot":"","sources":["../../src/components/LiveChartSeries.tsx"],"names":[],"mappings":"AA+DA,OAAO,KAAK,EAAE,oBAAoB,EAAwB,MAAM,UAAU,CAAC;AAujB3E,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAoI1D"}
@@ -15,7 +15,7 @@ import type { LiveChartPalette, LiveChartPoint, Marker, SeriesConfig } from "../
15
15
  *
16
16
  * Glyph precedence per marker: `image` → `icon` (text) → built-in `kind` shape.
17
17
  */
18
- export declare function MarkerOverlay({ markers, engine, padding, palette, font, series, lineData, }: {
18
+ export declare function MarkerOverlay({ markers, engine, padding, palette, font, series, lineData, renderMarker, }: {
19
19
  markers: SharedValue<Marker[]>;
20
20
  engine: ChartEngineLayout;
21
21
  padding: ChartPadding;
@@ -25,5 +25,11 @@ export declare function MarkerOverlay({ markers, engine, padding, palette, font,
25
25
  series?: SharedValue<SeriesConfig[]>;
26
26
  /** Single-series line data; anchors markers that omit `value`. */
27
27
  lineData?: SharedValue<LiveChartPoint[]>;
28
+ /**
29
+ * When provided, markers it returns an element for are rendered as RN views by
30
+ * `CustomMarkerOverlay` instead — so they're excluded from the atlas here to
31
+ * avoid a (blurry) glyph drawn behind the custom element.
32
+ */
33
+ renderMarker?: (marker: Marker) => unknown;
28
34
  }): import("react/jsx-runtime").JSX.Element;
29
35
  //# sourceMappingURL=MarkerOverlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkerOverlay.d.ts","sourceRoot":"","sources":["../../src/components/MarkerOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAejD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,MAAM,EACN,YAAY,EACb,MAAM,UAAU,CAAC;AA8FlB;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,EACJ,MAAM,EACN,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,MAAM,CAAC,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;CAC1C,2CAyHA"}
1
+ {"version":3,"file":"MarkerOverlay.d.ts","sourceRoot":"","sources":["../../src/components/MarkerOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAejD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,MAAM,EACN,YAAY,EACb,MAAM,UAAU,CAAC;AA8FlB;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,YAAY,GACb,EAAE;IACD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,MAAM,CAAC,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;IACzC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C,2CAqJA"}
@@ -22,7 +22,9 @@ export declare function isConnectorMarker(m: Marker): boolean;
22
22
  export declare function markerAppearanceSig(m: Marker): string;
23
23
  /** One packed glyph in the atlas image: its source rect + box size. */
24
24
  export interface AtlasCell {
25
+ /** Source rect into the (hi-res) atlas texture, in **device** pixels. */
25
26
  rect: SkRect;
27
+ /** Logical (DPR-independent) cell width/height, used to center the blit. */
26
28
  w: number;
27
29
  h: number;
28
30
  }
@@ -31,6 +33,13 @@ export interface MarkerAtlas {
31
33
  image: SkImage | null;
32
34
  /** appearance-signature → cell. */
33
35
  cells: Record<string, AtlasCell>;
36
+ /**
37
+ * Device-pixel scale the texture was rasterized at. Cell `rect`s are in
38
+ * texture (device) pixels, while `w`/`h` stay in logical pixels — so the
39
+ * per-frame blit must apply an `RSXform` scale of `1 / scale` to map the
40
+ * hi-res cell back to its logical on-canvas size. See `buildMarkerAtlas`.
41
+ */
42
+ scale: number;
34
43
  }
35
44
  /**
36
45
  * Rasterize every distinct marker appearance into a single packed atlas image,
@@ -39,6 +48,12 @@ export interface MarkerAtlas {
39
48
  *
40
49
  * Connector kinds (see `isConnectorMarker`) are skipped — they render via a
41
50
  * self-projecting fallback component.
51
+ *
52
+ * The texture is rasterized at `scale` (the screen's device-pixel ratio) so the
53
+ * cells carry enough resolution to stay crisp when blitted onto a retina canvas
54
+ * — every glyph is recorded in logical coords then magnified by `scale`, and the
55
+ * per-frame `drawAtlas` shrinks it back with an `RSXform` scale of `1 / scale`.
56
+ * Without this the logical-sized texture is upscaled ~3× on iOS and looks blurry.
42
57
  */
43
- export declare function buildMarkerAtlas(markers: Marker[], palette: LiveChartPalette, font: SkFont): MarkerAtlas;
58
+ export declare function buildMarkerAtlas(markers: Marker[], palette: LiveChartPalette, font: SkFont, scale?: number): MarkerAtlas;
44
59
  //# sourceMappingURL=markerAtlas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markerAtlas.d.ts","sourceRoot":"","sources":["../../src/draw/markerAtlas.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,OAAO,EAEZ,KAAK,MAAM,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErE,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAQpC,iEAAiE;AACjE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAClC;AAuKD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,MAAM,GACX,WAAW,CAsCb"}
1
+ {"version":3,"file":"markerAtlas.d.ts","sourceRoot":"","sources":["../../src/draw/markerAtlas.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,OAAO,EAEZ,KAAK,MAAM,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErE,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAQpC,iEAAiE;AACjE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAuKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAI,GACR,WAAW,CAgDb"}
package/dist/types.d.ts CHANGED
@@ -936,6 +936,20 @@ export interface LiveChartCoreProps {
936
936
  onMarkerHover?: (event: MarkerHoverEvent | null) => void;
937
937
  /** Tap hit-test radius in px. Default `16` (≈ 44px touch target with the glyph). */
938
938
  markerHitRadius?: number;
939
+ /**
940
+ * Render a marker as a custom **React Native** element instead of a built-in
941
+ * Skia glyph — e.g. an `expo-blur` glass badge or any non-Skia view that the
942
+ * canvas can't draw. Return an element to float it, auto-centered, at the
943
+ * marker's live `(time, value)` position (tracked on the UI thread); return
944
+ * `null`/`undefined` to keep the built-in atlas glyph for that marker.
945
+ *
946
+ * The element is rendered as an RN view layered over the canvas, so it is
947
+ * crisp at native resolution. Use it sparingly (a handful of special markers):
948
+ * each custom marker is its own animated view + projection, whereas built-in
949
+ * glyphs batch into a single draw call. Custom-rendered markers skip the atlas
950
+ * glyph entirely (no double-draw).
951
+ */
952
+ renderMarker?: (marker: Marker) => ReactElement | null | undefined;
939
953
  /**
940
954
  * Override individual resolved-palette keys on top of the palette derived from
941
955
  * `accentColor` + `theme`. Only the keys you set are replaced.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -68,5 +68,5 @@
68
68
  },
69
69
  "sideEffects": false,
70
70
  "types": "./dist/index.d.ts",
71
- "version": "3.5.0"
71
+ "version": "3.6.0"
72
72
  }
@@ -0,0 +1,168 @@
1
+ import { useState } from "react";
2
+ import { StyleSheet, View, type LayoutChangeEvent } from "react-native";
3
+ import Animated, {
4
+ useAnimatedReaction,
5
+ useAnimatedStyle,
6
+ useDerivedValue,
7
+ useSharedValue,
8
+ type SharedValue,
9
+ } from "react-native-reanimated";
10
+ import { scheduleOnRN } from "react-native-worklets";
11
+
12
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
13
+ import type { ChartPadding } from "../draw/line";
14
+ import { markersSignature, projectPoint } from "../math/markers";
15
+ import type { LiveChartPoint, Marker, SeriesConfig } from "../types";
16
+
17
+ /**
18
+ * One custom-rendered marker: a React Native element floated over the canvas and
19
+ * pinned to the marker's live `(time, value)` position. Each glyph projects its
20
+ * OWN marker every frame (mirrors `ConnectorGlyph`) so reordering the array can't
21
+ * make it flash another marker's spot, and the transform runs on the UI thread —
22
+ * no JS re-render as the chart scrolls/rescales.
23
+ *
24
+ * The element is auto-centered on the point: its size is measured via `onLayout`
25
+ * into a SharedValue, and the animated transform offsets by half that size.
26
+ * `pointerEvents="box-none"` lets empty space fall through to the scrub gesture
27
+ * while still allowing an interactive leaf inside the custom element to be tapped.
28
+ */
29
+ function CustomMarkerView({
30
+ marker,
31
+ element,
32
+ engine,
33
+ padding,
34
+ seriesSV,
35
+ lineDataSV,
36
+ }: {
37
+ marker: Marker;
38
+ element: React.ReactElement;
39
+ engine: ChartEngineLayout;
40
+ padding: ChartPadding;
41
+ seriesSV?: SharedValue<SeriesConfig[]>;
42
+ lineDataSV?: SharedValue<LiveChartPoint[]>;
43
+ }) {
44
+ const time = marker.time;
45
+ const value = marker.value;
46
+ const seriesId = marker.seriesId;
47
+
48
+ const layout = useDerivedValue(() =>
49
+ projectPoint(time, value, seriesId, {
50
+ canvasWidth: engine.canvasWidth.get(),
51
+ canvasHeight: engine.canvasHeight.get(),
52
+ padTop: padding.top,
53
+ padBottom: padding.bottom,
54
+ padLeft: padding.left,
55
+ padRight: padding.right,
56
+ timestamp: engine.timestamp.get(),
57
+ displayWindow: engine.displayWindow.get(),
58
+ displayMin: engine.displayMin.get(),
59
+ displayMax: engine.displayMax.get(),
60
+ series: seriesSV?.get(),
61
+ lineData: lineDataSV?.get(),
62
+ }),
63
+ );
64
+
65
+ // Measured element size, so the transform can center it on the point.
66
+ const size = useSharedValue({ width: 0, height: 0 });
67
+ const onLayout = (e: LayoutChangeEvent) => {
68
+ const { width, height } = e.nativeEvent.layout;
69
+ size.value = { width, height };
70
+ };
71
+
72
+ const animatedStyle = useAnimatedStyle(() => {
73
+ const l = layout.get();
74
+ const s = size.get();
75
+ return {
76
+ opacity: l.visible ? 1 : 0,
77
+ transform: [
78
+ { translateX: l.x - s.width / 2 },
79
+ { translateY: l.y - s.height / 2 },
80
+ ],
81
+ };
82
+ });
83
+
84
+ return (
85
+ <Animated.View
86
+ pointerEvents="box-none"
87
+ onLayout={onLayout}
88
+ style={[styles.anchor, animatedStyle]}
89
+ >
90
+ {element}
91
+ </Animated.View>
92
+ );
93
+ }
94
+
95
+ /**
96
+ * React Native overlay (NOT Skia) that floats `renderMarker` elements over the
97
+ * Skia canvas, one per marker the consumer chooses to customize. Rendered as a
98
+ * sibling of `<Canvas>` (like {@link AxisLabelOverlay}) so the elements can be
99
+ * any RN view — including non-Skia effects (e.g. a glass `BlurView`) — and stay
100
+ * crisp at native resolution instead of being rasterized into the marker atlas.
101
+ *
102
+ * The set of markers is mirrored to JS state via `markersSignature` (same as
103
+ * `MarkerOverlay`); `renderMarker` is then called per marker on the JS thread.
104
+ * Markers it returns an element for are excluded from the Skia atlas upstream, so
105
+ * there's no double-draw.
106
+ */
107
+ export function CustomMarkerOverlay({
108
+ markers,
109
+ renderMarker,
110
+ engine,
111
+ padding,
112
+ series,
113
+ lineData,
114
+ }: {
115
+ markers: SharedValue<Marker[]>;
116
+ renderMarker: (marker: Marker) => React.ReactElement | null | undefined;
117
+ engine: ChartEngineLayout;
118
+ padding: ChartPadding;
119
+ /** Multi-series data, used to anchor markers by `seriesId`. */
120
+ series?: SharedValue<SeriesConfig[]>;
121
+ /** Single-series line data; anchors markers that omit `value`. */
122
+ lineData?: SharedValue<LiveChartPoint[]>;
123
+ }) {
124
+ const [snapshot, setSnapshot] = useState<Marker[]>(() => markers.get().slice());
125
+
126
+ const pull = () => {
127
+ setSnapshot(markers.get().slice());
128
+ };
129
+
130
+ useAnimatedReaction(
131
+ () => markersSignature(markers.get()),
132
+ /* istanbul ignore next -- scheduleOnRN from UI-thread reaction */
133
+ (sig, prev) => {
134
+ if (sig !== prev) scheduleOnRN(pull);
135
+ },
136
+ [markers, pull],
137
+ );
138
+
139
+ // Resolve each marker's custom element once per snapshot on the JS thread.
140
+ const custom: { marker: Marker; element: React.ReactElement }[] = [];
141
+ for (let i = 0; i < snapshot.length; i++) {
142
+ const m = snapshot[i];
143
+ const element = renderMarker(m);
144
+ if (element != null) custom.push({ marker: m, element });
145
+ }
146
+ if (custom.length === 0) return null;
147
+
148
+ return (
149
+ <View style={StyleSheet.absoluteFill} pointerEvents="box-none">
150
+ {custom.map(({ marker, element }) => (
151
+ <CustomMarkerView
152
+ key={marker.id}
153
+ marker={marker}
154
+ element={element}
155
+ engine={engine}
156
+ padding={padding}
157
+ seriesSV={series}
158
+ lineDataSV={lineData}
159
+ />
160
+ ))}
161
+ </View>
162
+ );
163
+ }
164
+
165
+ const styles = StyleSheet.create({
166
+ // top/left 0 + translate so the measured element can be centered on the point.
167
+ anchor: { position: "absolute", top: 0, left: 0 },
168
+ });
@@ -86,6 +86,7 @@ import {
86
86
  ThresholdLineOverlay,
87
87
  } from "./ThresholdLineOverlay";
88
88
  import { AxisLabelOverlay } from "./AxisLabelOverlay";
89
+ import { CustomMarkerOverlay } from "./CustomMarkerOverlay";
89
90
  import { BadgeOverlay } from "./BadgeOverlay";
90
91
  import { CrosshairOverlay } from "./CrosshairOverlay";
91
92
  import { DegenParticlesOverlay } from "./DegenParticlesOverlay";
@@ -199,6 +200,7 @@ function useLiveChartController({
199
200
  markers,
200
201
  onMarkerHover,
201
202
  markerHitRadius = 16,
203
+ renderMarker,
202
204
  leftEdgeFade = true,
203
205
 
204
206
  // ── Callbacks ───────────────────────────────────────────────────────────
@@ -682,6 +684,7 @@ function useLiveChartController({
682
684
  rootGesture,
683
685
  markersActive,
684
686
  markersSV,
687
+ renderMarker,
685
688
  // selection dot: resolved config + fallback color (the chart line/accent color)
686
689
  selectionDot: selectionDotCfg,
687
690
  selectionColor: lineProp?.color ?? palette.line,
@@ -819,6 +822,7 @@ function ChartStack({ model }: { model: LiveChartModel }) {
819
822
  degenPackRevision,
820
823
  markersActive,
821
824
  markersSV,
825
+ renderMarker,
822
826
  emptyText,
823
827
  metricsCfg,
824
828
  layoutWidth,
@@ -996,6 +1000,7 @@ function ChartStack({ model }: { model: LiveChartModel }) {
996
1000
  palette={palette}
997
1001
  font={skiaFont}
998
1002
  lineData={engine.data}
1003
+ renderMarker={renderMarker}
999
1004
  />
1000
1005
  </Group>
1001
1006
  )}
@@ -1251,6 +1256,9 @@ export function LiveChart(props: LiveChartProps) {
1251
1256
  formatValue,
1252
1257
  topLabelCfg,
1253
1258
  bottomLabelCfg,
1259
+ markersActive,
1260
+ markersSV,
1261
+ renderMarker,
1254
1262
  } = model;
1255
1263
 
1256
1264
  return (
@@ -1306,6 +1314,18 @@ export function LiveChart(props: LiveChartProps) {
1306
1314
  defaultColor={palette.gridLabel}
1307
1315
  padding={effectivePadding}
1308
1316
  />
1317
+
1318
+ {/* Custom-rendered markers — RN views floated over the canvas (non-Skia),
1319
+ pinned to each marker's live position. Sibling of <Canvas>. */}
1320
+ {markersActive && renderMarker && (
1321
+ <CustomMarkerOverlay
1322
+ markers={markersSV}
1323
+ renderMarker={renderMarker}
1324
+ engine={engine}
1325
+ padding={effectivePadding}
1326
+ lineData={engine.data}
1327
+ />
1328
+ )}
1309
1329
  </View>
1310
1330
  </GestureDetector>
1311
1331
  );
@@ -63,6 +63,7 @@ import {
63
63
  } from "../theme";
64
64
  import type { LiveChartSeriesProps, Marker, SeriesConfig } from "../types";
65
65
  import { AxisLabelOverlay } from "./AxisLabelOverlay";
66
+ import { CustomMarkerOverlay } from "./CustomMarkerOverlay";
66
67
  import { CrosshairLine } from "./CrosshairLine";
67
68
  import { DegenParticlesOverlay } from "./DegenParticlesOverlay";
68
69
  import { LeftEdgeFade } from "./LeftEdgeFade";
@@ -143,6 +144,7 @@ function useLiveChartSeriesController({
143
144
  markers,
144
145
  onMarkerHover,
145
146
  markerHitRadius = 16,
147
+ renderMarker,
146
148
  leftEdgeFade = true,
147
149
  }: LiveChartSeriesProps) {
148
150
  const emptyMarkers = useSharedValue<Marker[]>([]);
@@ -386,6 +388,7 @@ function useLiveChartSeriesController({
386
388
  rootGesture,
387
389
  markersActive,
388
390
  markersSV,
391
+ renderMarker,
389
392
  // selection dot: resolved config + fallback color (the leading series' color)
390
393
  selectionDot: selectionDotCfg,
391
394
  selectionColor: lineColors[0],
@@ -426,6 +429,7 @@ function SeriesChartStack({ model }: { model: LiveChartSeriesModel }) {
426
429
  degenPackRevision,
427
430
  markersActive,
428
431
  markersSV,
432
+ renderMarker,
429
433
  series,
430
434
  emptyText,
431
435
  metricsCfg,
@@ -541,6 +545,7 @@ function SeriesChartStack({ model }: { model: LiveChartSeriesModel }) {
541
545
  palette={palette}
542
546
  font={skiaFont}
543
547
  series={series}
548
+ renderMarker={renderMarker}
544
549
  />
545
550
  </Group>
546
551
  )}
@@ -649,6 +654,9 @@ export function LiveChartSeries(props: LiveChartSeriesProps) {
649
654
  formatValue,
650
655
  topLabelCfg,
651
656
  bottomLabelCfg,
657
+ markersActive,
658
+ markersSV,
659
+ renderMarker,
652
660
  } = model;
653
661
 
654
662
  // Extend the scrub dim past the plot's right edge to fully cover the series
@@ -735,6 +743,18 @@ export function LiveChartSeries(props: LiveChartSeriesProps) {
735
743
  defaultColor={palette.gridLabel}
736
744
  padding={effectivePadding}
737
745
  />
746
+
747
+ {/* Custom-rendered markers — RN views floated over the canvas
748
+ (non-Skia), pinned to each marker's live position. */}
749
+ {markersActive && renderMarker && (
750
+ <CustomMarkerOverlay
751
+ markers={markersSV}
752
+ renderMarker={renderMarker}
753
+ engine={engine}
754
+ padding={effectivePadding}
755
+ series={series}
756
+ />
757
+ )}
738
758
  </View>
739
759
  </GestureDetector>
740
760
  {legendCfg.position === "bottom" ? legend : null}
@@ -6,6 +6,7 @@ import {
6
6
  type SkFont,
7
7
  } from "@shopify/react-native-skia";
8
8
  import { useMemo, useRef, useState } from "react";
9
+ import { PixelRatio } from "react-native";
9
10
  import {
10
11
  useDerivedValue,
11
12
  useAnimatedReaction,
@@ -147,6 +148,7 @@ export function MarkerOverlay({
147
148
  font,
148
149
  series,
149
150
  lineData,
151
+ renderMarker,
150
152
  }: {
151
153
  markers: SharedValue<Marker[]>;
152
154
  engine: ChartEngineLayout;
@@ -157,6 +159,12 @@ export function MarkerOverlay({
157
159
  series?: SharedValue<SeriesConfig[]>;
158
160
  /** Single-series line data; anchors markers that omit `value`. */
159
161
  lineData?: SharedValue<LiveChartPoint[]>;
162
+ /**
163
+ * When provided, markers it returns an element for are rendered as RN views by
164
+ * `CustomMarkerOverlay` instead — so they're excluded from the atlas here to
165
+ * avoid a (blurry) glyph drawn behind the custom element.
166
+ */
167
+ renderMarker?: (marker: Marker) => unknown;
160
168
  }) {
161
169
  // Seed from the current markers at mount; the reaction below keeps it in sync.
162
170
  const [snapshot, setSnapshot] = useState<Marker[]>(() => markers.get().slice());
@@ -176,6 +184,24 @@ export function MarkerOverlay({
176
184
  [markers, pull],
177
185
  );
178
186
 
187
+ // Ids of markers the consumer renders as custom RN views (CustomMarkerOverlay).
188
+ // Stabilized via a string key so an inline `renderMarker` that returns the same
189
+ // set doesn't churn `customIds`' identity (which the per-frame worklet captures).
190
+ const customKey = useMemo(() => {
191
+ if (!renderMarker) return "";
192
+ let k = "";
193
+ for (let i = 0; i < snapshot.length; i++) {
194
+ const m = snapshot[i];
195
+ if (renderMarker(m) != null) k += `${m.id}\x1f`;
196
+ }
197
+ return k;
198
+ }, [snapshot, renderMarker]);
199
+ const customIds = useMemo<Record<string, true>>(() => {
200
+ const o: Record<string, true> = {};
201
+ for (const id of customKey.split("\x1f")) if (id) o[id] = true;
202
+ return o;
203
+ }, [customKey]);
204
+
179
205
  // Rebuild the atlas image only when the set of distinct appearances or the
180
206
  // theme/font changes — never per frame. `markersSignature` already drives the
181
207
  // snapshot, so this useMemo re-runs at most at the snapshot cadence.
@@ -183,19 +209,26 @@ export function MarkerOverlay({
183
209
  const sigs = new Set<string>();
184
210
  for (let i = 0; i < snapshot.length; i++) {
185
211
  const m = snapshot[i];
186
- if (!isConnectorMarker(m)) sigs.add(markerAppearanceSig(m));
212
+ if (!isConnectorMarker(m) && !customIds[m.id])
213
+ sigs.add(markerAppearanceSig(m));
187
214
  }
188
215
  return Array.from(sigs).sort().join("\x1e");
189
- }, [snapshot]);
216
+ }, [snapshot, customIds]);
190
217
  // Cells bake in resolved colors; include the palette fields they depend on.
191
218
  const paletteKey = `${palette.bgRgb.join(",")}|${palette.line}|${palette.refLine}|${palette.dotUp}|${palette.refLabel}`;
219
+ // Rasterize at the screen's device-pixel ratio so sprites stay crisp on
220
+ // retina canvases instead of being upscaled from a logical-sized texture.
221
+ const dpr = PixelRatio.get();
192
222
  const atlas = useMemo(
193
- () => buildMarkerAtlas(snapshot, palette, font),
223
+ () => buildMarkerAtlas(snapshot.filter((m) => !customIds[m.id]), palette, font, dpr),
194
224
  // eslint-disable-next-line react-hooks/exhaustive-deps -- appearanceKey/paletteKey capture the inputs that change cell pixels
195
- [appearanceKey, paletteKey, font],
225
+ [appearanceKey, paletteKey, font, dpr],
196
226
  );
197
227
  const cells: Record<string, AtlasCell> = atlas.cells;
198
228
  const atlasImage = atlas.image;
229
+ // Inverse of the texture's device-pixel scale; shrinks each hi-res cell back
230
+ // to its logical on-canvas size in the per-frame blit.
231
+ const invScale = 1 / atlas.scale;
199
232
 
200
233
  // One pooled, ping-ponged projection buffer reused every frame (no per-frame
201
234
  // array allocation for the projection itself).
@@ -238,17 +271,20 @@ export function MarkerOverlay({
238
271
  if (!pt.visible) continue;
239
272
  const m = ms[i];
240
273
  if (isConnectorMarker(m)) continue;
274
+ // Custom-rendered markers are floated as RN views, not drawn here.
275
+ if (customIds[m.id]) continue;
241
276
  const cell = cells[markerAppearanceSig(m)];
242
277
  if (!cell) continue;
243
- // Center the cell on the projected point (RSXform: scale 1, no rotation).
278
+ // Center the cell on the projected point. The cell's source rect is in
279
+ // device pixels, so scale by 1/dpr to land it at its logical size.
244
280
  transforms.push(
245
- Skia.RSXform(1, 0, pt.x - cell.w / 2, pt.y - cell.h / 2),
281
+ Skia.RSXform(invScale, 0, pt.x - cell.w / 2, pt.y - cell.h / 2),
246
282
  );
247
283
  sprites.push(cell.rect);
248
284
  }
249
285
  return { transforms, sprites };
250
286
  },
251
- [cells, markers, engine, padding, series, lineData],
287
+ [cells, customIds, invScale, markers, engine, padding, series, lineData],
252
288
  );
253
289
  const transforms = useDerivedValue(() => atlasData.get().transforms, [atlasData]);
254
290
  const sprites = useDerivedValue(() => atlasData.get().sprites, [atlasData]);
@@ -74,7 +74,9 @@ export function markerAppearanceSig(m: Marker): string {
74
74
 
75
75
  /** One packed glyph in the atlas image: its source rect + box size. */
76
76
  export interface AtlasCell {
77
+ /** Source rect into the (hi-res) atlas texture, in **device** pixels. */
77
78
  rect: SkRect;
79
+ /** Logical (DPR-independent) cell width/height, used to center the blit. */
78
80
  w: number;
79
81
  h: number;
80
82
  }
@@ -84,9 +86,16 @@ export interface MarkerAtlas {
84
86
  image: SkImage | null;
85
87
  /** appearance-signature → cell. */
86
88
  cells: Record<string, AtlasCell>;
89
+ /**
90
+ * Device-pixel scale the texture was rasterized at. Cell `rect`s are in
91
+ * texture (device) pixels, while `w`/`h` stay in logical pixels — so the
92
+ * per-frame blit must apply an `RSXform` scale of `1 / scale` to map the
93
+ * hi-res cell back to its logical on-canvas size. See `buildMarkerAtlas`.
94
+ */
95
+ scale: number;
87
96
  }
88
97
 
89
- const EMPTY_ATLAS: MarkerAtlas = { image: null, cells: {} };
98
+ const EMPTY_ATLAS: MarkerAtlas = { image: null, cells: {}, scale: 1 };
90
99
 
91
100
  function fillPaint(color: string): SkPaint {
92
101
  const p = Skia.Paint();
@@ -258,11 +267,18 @@ function cellSpec(m: Marker, palette: LiveChartPalette, font: SkFont): CellSpec
258
267
  *
259
268
  * Connector kinds (see `isConnectorMarker`) are skipped — they render via a
260
269
  * self-projecting fallback component.
270
+ *
271
+ * The texture is rasterized at `scale` (the screen's device-pixel ratio) so the
272
+ * cells carry enough resolution to stay crisp when blitted onto a retina canvas
273
+ * — every glyph is recorded in logical coords then magnified by `scale`, and the
274
+ * per-frame `drawAtlas` shrinks it back with an `RSXform` scale of `1 / scale`.
275
+ * Without this the logical-sized texture is upscaled ~3× on iOS and looks blurry.
261
276
  */
262
277
  export function buildMarkerAtlas(
263
278
  markers: Marker[],
264
279
  palette: LiveChartPalette,
265
280
  font: SkFont,
281
+ scale = 1,
266
282
  ): MarkerAtlas {
267
283
  const seen = new Set<string>();
268
284
  const specs: { sig: string; spec: CellSpec }[] = [];
@@ -282,11 +298,16 @@ export function buildMarkerAtlas(
282
298
  totalW += specs[i].spec.w;
283
299
  if (specs[i].spec.h > maxH) maxH = specs[i].spec.h;
284
300
  }
301
+ // Logical packed size; the texture itself is `scale`× larger in each axis.
285
302
  const W = Math.max(1, Math.ceil(totalW));
286
303
  const H = Math.max(1, Math.ceil(maxH));
304
+ const texW = Math.max(1, Math.ceil(W * scale));
305
+ const texH = Math.max(1, Math.ceil(H * scale));
287
306
 
288
307
  const recorder = Skia.PictureRecorder();
289
- const canvas = recorder.beginRecording(Skia.XYWHRect(0, 0, W, H));
308
+ const canvas = recorder.beginRecording(Skia.XYWHRect(0, 0, texW, texH));
309
+ // Magnify so glyphs drawn in logical coords fill the hi-res texture.
310
+ canvas.scale(scale, scale);
290
311
  const cells: Record<string, AtlasCell> = {};
291
312
  let x = 0;
292
313
  for (let i = 0; i < specs.length; i++) {
@@ -295,10 +316,15 @@ export function buildMarkerAtlas(
295
316
  canvas.translate(x, 0);
296
317
  spec.draw(canvas, spec.w / 2, H / 2);
297
318
  canvas.restore();
298
- cells[sig] = { rect: Skia.XYWHRect(x, 0, spec.w, H), w: spec.w, h: H };
319
+ // Source rect indexes the device-pixel texture; w/h stay logical.
320
+ cells[sig] = {
321
+ rect: Skia.XYWHRect(x * scale, 0, spec.w * scale, texH),
322
+ w: spec.w,
323
+ h: H,
324
+ };
299
325
  x += spec.w;
300
326
  }
301
327
  const picture = recorder.finishRecordingAsPicture();
302
- const image = drawAsImageFromPicture(picture, { width: W, height: H });
303
- return { image, cells };
328
+ const image = drawAsImageFromPicture(picture, { width: texW, height: texH });
329
+ return { image, cells, scale };
304
330
  }
package/src/types.ts CHANGED
@@ -1011,6 +1011,20 @@ export interface LiveChartCoreProps {
1011
1011
  onMarkerHover?: (event: MarkerHoverEvent | null) => void;
1012
1012
  /** Tap hit-test radius in px. Default `16` (≈ 44px touch target with the glyph). */
1013
1013
  markerHitRadius?: number;
1014
+ /**
1015
+ * Render a marker as a custom **React Native** element instead of a built-in
1016
+ * Skia glyph — e.g. an `expo-blur` glass badge or any non-Skia view that the
1017
+ * canvas can't draw. Return an element to float it, auto-centered, at the
1018
+ * marker's live `(time, value)` position (tracked on the UI thread); return
1019
+ * `null`/`undefined` to keep the built-in atlas glyph for that marker.
1020
+ *
1021
+ * The element is rendered as an RN view layered over the canvas, so it is
1022
+ * crisp at native resolution. Use it sparingly (a handful of special markers):
1023
+ * each custom marker is its own animated view + projection, whereas built-in
1024
+ * glyphs batch into a single draw call. Custom-rendered markers skip the atlas
1025
+ * glyph entirely (no double-draw).
1026
+ */
1027
+ renderMarker?: (marker: Marker) => ReactElement | null | undefined;
1014
1028
  /**
1015
1029
  * Override individual resolved-palette keys on top of the palette derived from
1016
1030
  * `accentColor` + `theme`. Only the keys you set are replaced.