react-native-livechart 1.0.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.
Files changed (243) hide show
  1. package/LICENSE +33 -0
  2. package/README.md +198 -0
  3. package/dist/components/AnimatedLabel.d.ts +21 -0
  4. package/dist/components/AnimatedLabel.d.ts.map +1 -0
  5. package/dist/components/BadgeOverlay.d.ts +16 -0
  6. package/dist/components/BadgeOverlay.d.ts.map +1 -0
  7. package/dist/components/CrosshairLine.d.ts +20 -0
  8. package/dist/components/CrosshairLine.d.ts.map +1 -0
  9. package/dist/components/CrosshairOverlay.d.ts +29 -0
  10. package/dist/components/CrosshairOverlay.d.ts.map +1 -0
  11. package/dist/components/DegenParticlesOverlay.d.ts +16 -0
  12. package/dist/components/DegenParticlesOverlay.d.ts.map +1 -0
  13. package/dist/components/DotOverlay.d.ts +17 -0
  14. package/dist/components/DotOverlay.d.ts.map +1 -0
  15. package/dist/components/LeftEdgeFade.d.ts +9 -0
  16. package/dist/components/LeftEdgeFade.d.ts.map +1 -0
  17. package/dist/components/LiveChart.d.ts +3 -0
  18. package/dist/components/LiveChart.d.ts.map +1 -0
  19. package/dist/components/LiveChartSeries.d.ts +3 -0
  20. package/dist/components/LiveChartSeries.d.ts.map +1 -0
  21. package/dist/components/LiveChartTransition.d.ts +28 -0
  22. package/dist/components/LiveChartTransition.d.ts.map +1 -0
  23. package/dist/components/LoadingOverlay.d.ts +24 -0
  24. package/dist/components/LoadingOverlay.d.ts.map +1 -0
  25. package/dist/components/MarkerOverlay.d.ts +25 -0
  26. package/dist/components/MarkerOverlay.d.ts.map +1 -0
  27. package/dist/components/MultiSeriesDots.d.ts +11 -0
  28. package/dist/components/MultiSeriesDots.d.ts.map +1 -0
  29. package/dist/components/MultiSeriesStroke.d.ts +14 -0
  30. package/dist/components/MultiSeriesStroke.d.ts.map +1 -0
  31. package/dist/components/MultiSeriesTooltipStack.d.ts +10 -0
  32. package/dist/components/MultiSeriesTooltipStack.d.ts.map +1 -0
  33. package/dist/components/MultiSeriesValueLabels.d.ts +11 -0
  34. package/dist/components/MultiSeriesValueLabels.d.ts.map +1 -0
  35. package/dist/components/MultiSeriesValueLines.d.ts +10 -0
  36. package/dist/components/MultiSeriesValueLines.d.ts.map +1 -0
  37. package/dist/components/ReferenceLineOverlay.d.ts +19 -0
  38. package/dist/components/ReferenceLineOverlay.d.ts.map +1 -0
  39. package/dist/components/SeriesToggleChips.d.ts +15 -0
  40. package/dist/components/SeriesToggleChips.d.ts.map +1 -0
  41. package/dist/components/TradeStreamOverlay.d.ts +14 -0
  42. package/dist/components/TradeStreamOverlay.d.ts.map +1 -0
  43. package/dist/components/ValueLineOverlay.d.ts +16 -0
  44. package/dist/components/ValueLineOverlay.d.ts.map +1 -0
  45. package/dist/components/ValueTextOverlay.d.ts +20 -0
  46. package/dist/components/ValueTextOverlay.d.ts.map +1 -0
  47. package/dist/components/XAxisOverlay.d.ts +14 -0
  48. package/dist/components/XAxisOverlay.d.ts.map +1 -0
  49. package/dist/components/YAxisOverlay.d.ts +23 -0
  50. package/dist/components/YAxisOverlay.d.ts.map +1 -0
  51. package/dist/components/seriesMetaSig.d.ts +4 -0
  52. package/dist/components/seriesMetaSig.d.ts.map +1 -0
  53. package/dist/constants.d.ts +38 -0
  54. package/dist/constants.d.ts.map +1 -0
  55. package/dist/core/liveChartEngineTick.d.ts +45 -0
  56. package/dist/core/liveChartEngineTick.d.ts.map +1 -0
  57. package/dist/core/liveChartSeriesEngineTick.d.ts +38 -0
  58. package/dist/core/liveChartSeriesEngineTick.d.ts.map +1 -0
  59. package/dist/core/multiSeriesLayout.d.ts +22 -0
  60. package/dist/core/multiSeriesLayout.d.ts.map +1 -0
  61. package/dist/core/resolveConfig.d.ts +188 -0
  62. package/dist/core/resolveConfig.d.ts.map +1 -0
  63. package/dist/core/useLiveChartEngine.d.ts +79 -0
  64. package/dist/core/useLiveChartEngine.d.ts.map +1 -0
  65. package/dist/core/useLiveChartSeriesEngine.d.ts +68 -0
  66. package/dist/core/useLiveChartSeriesEngine.d.ts.map +1 -0
  67. package/dist/draw/candle.d.ts +25 -0
  68. package/dist/draw/candle.d.ts.map +1 -0
  69. package/dist/draw/grid.d.ts +24 -0
  70. package/dist/draw/grid.d.ts.map +1 -0
  71. package/dist/draw/line.d.ts +86 -0
  72. package/dist/draw/line.d.ts.map +1 -0
  73. package/dist/draw/trade.d.ts +38 -0
  74. package/dist/draw/trade.d.ts.map +1 -0
  75. package/dist/hooks/crosshairSeries.d.ts +13 -0
  76. package/dist/hooks/crosshairSeries.d.ts.map +1 -0
  77. package/dist/hooks/crosshairShared.d.ts +72 -0
  78. package/dist/hooks/crosshairShared.d.ts.map +1 -0
  79. package/dist/hooks/index.d.ts +24 -0
  80. package/dist/hooks/index.d.ts.map +1 -0
  81. package/dist/hooks/resolveChartLayout.d.ts +42 -0
  82. package/dist/hooks/resolveChartLayout.d.ts.map +1 -0
  83. package/dist/hooks/useBadge.d.ts +14 -0
  84. package/dist/hooks/useBadge.d.ts.map +1 -0
  85. package/dist/hooks/useCandlePaths.d.ts +19 -0
  86. package/dist/hooks/useCandlePaths.d.ts.map +1 -0
  87. package/dist/hooks/useCanvasLayout.d.ts +12 -0
  88. package/dist/hooks/useCanvasLayout.d.ts.map +1 -0
  89. package/dist/hooks/useChartColors.d.ts +20 -0
  90. package/dist/hooks/useChartColors.d.ts.map +1 -0
  91. package/dist/hooks/useChartPaths.d.ts +19 -0
  92. package/dist/hooks/useChartPaths.d.ts.map +1 -0
  93. package/dist/hooks/useChartReveal.d.ts +30 -0
  94. package/dist/hooks/useChartReveal.d.ts.map +1 -0
  95. package/dist/hooks/useChartSkiaFont.d.ts +8 -0
  96. package/dist/hooks/useChartSkiaFont.d.ts.map +1 -0
  97. package/dist/hooks/useCrosshair.d.ts +20 -0
  98. package/dist/hooks/useCrosshair.d.ts.map +1 -0
  99. package/dist/hooks/useCrosshairSeries.d.ts +10 -0
  100. package/dist/hooks/useCrosshairSeries.d.ts.map +1 -0
  101. package/dist/hooks/useDegen.d.ts +17 -0
  102. package/dist/hooks/useDegen.d.ts.map +1 -0
  103. package/dist/hooks/useLiveChartHasData.d.ts +17 -0
  104. package/dist/hooks/useLiveChartHasData.d.ts.map +1 -0
  105. package/dist/hooks/useLiveDot.d.ts +12 -0
  106. package/dist/hooks/useLiveDot.d.ts.map +1 -0
  107. package/dist/hooks/useMarkers.d.ts +15 -0
  108. package/dist/hooks/useMarkers.d.ts.map +1 -0
  109. package/dist/hooks/useModeBlend.d.ts +18 -0
  110. package/dist/hooks/useModeBlend.d.ts.map +1 -0
  111. package/dist/hooks/useMomentum.d.ts +16 -0
  112. package/dist/hooks/useMomentum.d.ts.map +1 -0
  113. package/dist/hooks/useMultiSeriesDegen.d.ts +25 -0
  114. package/dist/hooks/useMultiSeriesDegen.d.ts.map +1 -0
  115. package/dist/hooks/useMultiSeriesLinePaths.d.ts +15 -0
  116. package/dist/hooks/useMultiSeriesLinePaths.d.ts.map +1 -0
  117. package/dist/hooks/useReferenceLine.d.ts +32 -0
  118. package/dist/hooks/useReferenceLine.d.ts.map +1 -0
  119. package/dist/hooks/useReverseMorphEngineInputs.d.ts +24 -0
  120. package/dist/hooks/useReverseMorphEngineInputs.d.ts.map +1 -0
  121. package/dist/hooks/useTradeStream.d.ts +12 -0
  122. package/dist/hooks/useTradeStream.d.ts.map +1 -0
  123. package/dist/hooks/useXAxis.d.ts +32 -0
  124. package/dist/hooks/useXAxis.d.ts.map +1 -0
  125. package/dist/hooks/useYAxis.d.ts +13 -0
  126. package/dist/hooks/useYAxis.d.ts.map +1 -0
  127. package/dist/index.d.ts +18 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/lib/format.d.ts +5 -0
  130. package/dist/lib/format.d.ts.map +1 -0
  131. package/dist/lib/measureFontTextWidth.d.ts +7 -0
  132. package/dist/lib/measureFontTextWidth.d.ts.map +1 -0
  133. package/dist/lib/monoFontFamily.d.ts +6 -0
  134. package/dist/lib/monoFontFamily.d.ts.map +1 -0
  135. package/dist/math/color.d.ts +5 -0
  136. package/dist/math/color.d.ts.map +1 -0
  137. package/dist/math/degenTick.d.ts +57 -0
  138. package/dist/math/degenTick.d.ts.map +1 -0
  139. package/dist/math/interpolate.d.ts +7 -0
  140. package/dist/math/interpolate.d.ts.map +1 -0
  141. package/dist/math/intervals.d.ts +3 -0
  142. package/dist/math/intervals.d.ts.map +1 -0
  143. package/dist/math/lerp.d.ts +7 -0
  144. package/dist/math/lerp.d.ts.map +1 -0
  145. package/dist/math/markers.d.ts +44 -0
  146. package/dist/math/markers.d.ts.map +1 -0
  147. package/dist/math/momentum.d.ts +8 -0
  148. package/dist/math/momentum.d.ts.map +1 -0
  149. package/dist/math/pickCandle.d.ts +8 -0
  150. package/dist/math/pickCandle.d.ts.map +1 -0
  151. package/dist/math/range.d.ts +10 -0
  152. package/dist/math/range.d.ts.map +1 -0
  153. package/dist/math/referenceLines.d.ts +20 -0
  154. package/dist/math/referenceLines.d.ts.map +1 -0
  155. package/dist/math/spline.d.ts +45 -0
  156. package/dist/math/spline.d.ts.map +1 -0
  157. package/dist/math/squiggly.d.ts +36 -0
  158. package/dist/math/squiggly.d.ts.map +1 -0
  159. package/dist/theme.d.ts +30 -0
  160. package/dist/theme.d.ts.map +1 -0
  161. package/dist/types.d.ts +720 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/package.json +72 -0
  164. package/src/components/AnimatedLabel.tsx +41 -0
  165. package/src/components/BadgeOverlay.tsx +39 -0
  166. package/src/components/CrosshairLine.tsx +90 -0
  167. package/src/components/CrosshairOverlay.tsx +170 -0
  168. package/src/components/DegenParticlesOverlay.tsx +141 -0
  169. package/src/components/DotOverlay.tsx +69 -0
  170. package/src/components/LeftEdgeFade.tsx +36 -0
  171. package/src/components/LiveChart.tsx +821 -0
  172. package/src/components/LiveChartSeries.tsx +607 -0
  173. package/src/components/LiveChartTransition.tsx +135 -0
  174. package/src/components/LoadingOverlay.tsx +301 -0
  175. package/src/components/MarkerOverlay.tsx +331 -0
  176. package/src/components/MultiSeriesDots.tsx +117 -0
  177. package/src/components/MultiSeriesStroke.tsx +79 -0
  178. package/src/components/MultiSeriesTooltipStack.tsx +78 -0
  179. package/src/components/MultiSeriesValueLabels.tsx +103 -0
  180. package/src/components/MultiSeriesValueLines.tsx +115 -0
  181. package/src/components/ReferenceLineOverlay.tsx +317 -0
  182. package/src/components/SeriesToggleChips.tsx +201 -0
  183. package/src/components/TradeStreamOverlay.tsx +117 -0
  184. package/src/components/ValueLineOverlay.tsx +63 -0
  185. package/src/components/ValueTextOverlay.tsx +43 -0
  186. package/src/components/XAxisOverlay.tsx +109 -0
  187. package/src/components/YAxisOverlay.tsx +135 -0
  188. package/src/components/seriesMetaSig.ts +13 -0
  189. package/src/constants.ts +44 -0
  190. package/src/core/liveChartEngineTick.ts +185 -0
  191. package/src/core/liveChartSeriesEngineTick.ts +163 -0
  192. package/src/core/multiSeriesLayout.ts +80 -0
  193. package/src/core/resolveConfig.ts +538 -0
  194. package/src/core/useLiveChartEngine.ts +207 -0
  195. package/src/core/useLiveChartSeriesEngine.ts +215 -0
  196. package/src/draw/candle.ts +210 -0
  197. package/src/draw/grid.ts +174 -0
  198. package/src/draw/line.ts +257 -0
  199. package/src/draw/trade.ts +202 -0
  200. package/src/hooks/crosshairSeries.ts +78 -0
  201. package/src/hooks/crosshairShared.ts +296 -0
  202. package/src/hooks/index.ts +26 -0
  203. package/src/hooks/resolveChartLayout.ts +144 -0
  204. package/src/hooks/useBadge.ts +192 -0
  205. package/src/hooks/useCandlePaths.ts +165 -0
  206. package/src/hooks/useCanvasLayout.ts +22 -0
  207. package/src/hooks/useChartColors.ts +48 -0
  208. package/src/hooks/useChartPaths.ts +121 -0
  209. package/src/hooks/useChartReveal.ts +123 -0
  210. package/src/hooks/useChartSkiaFont.ts +34 -0
  211. package/src/hooks/useCrosshair.ts +250 -0
  212. package/src/hooks/useCrosshairSeries.ts +163 -0
  213. package/src/hooks/useDegen.ts +262 -0
  214. package/src/hooks/useLiveChartHasData.ts +31 -0
  215. package/src/hooks/useLiveDot.ts +31 -0
  216. package/src/hooks/useMarkers.ts +95 -0
  217. package/src/hooks/useModeBlend.ts +52 -0
  218. package/src/hooks/useMomentum.ts +37 -0
  219. package/src/hooks/useMultiSeriesDegen.ts +260 -0
  220. package/src/hooks/useMultiSeriesLinePaths.ts +76 -0
  221. package/src/hooks/useReferenceLine.ts +212 -0
  222. package/src/hooks/useReverseMorphEngineInputs.ts +154 -0
  223. package/src/hooks/useTradeStream.ts +64 -0
  224. package/src/hooks/useXAxis.ts +200 -0
  225. package/src/hooks/useYAxis.ts +48 -0
  226. package/src/index.ts +69 -0
  227. package/src/lib/format.ts +36 -0
  228. package/src/lib/measureFontTextWidth.ts +10 -0
  229. package/src/lib/monoFontFamily.ts +8 -0
  230. package/src/math/color.ts +31 -0
  231. package/src/math/degenTick.ts +151 -0
  232. package/src/math/interpolate.ts +32 -0
  233. package/src/math/intervals.ts +17 -0
  234. package/src/math/lerp.ts +17 -0
  235. package/src/math/markers.ts +175 -0
  236. package/src/math/momentum.ts +38 -0
  237. package/src/math/pickCandle.ts +42 -0
  238. package/src/math/range.ts +54 -0
  239. package/src/math/referenceLines.ts +56 -0
  240. package/src/math/spline.ts +183 -0
  241. package/src/math/squiggly.ts +108 -0
  242. package/src/theme.ts +231 -0
  243. package/src/types.ts +789 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "author": "brandtnew labs",
3
+ "bugs": {
4
+ "url": "https://github.com/brandtnewlabs/react-native-livechart/issues"
5
+ },
6
+ "description": "High-performance live line and candlestick charts for React Native, built on Skia and Reanimated. Inspired by liveline (Benji Taylor).",
7
+ "devDependencies": {
8
+ "@types/react": "~19.1.0",
9
+ "react-native-worklets": "0.7.2",
10
+ "rimraf": "^6.0.0",
11
+ "typescript": "~5.9.2"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "react-native": "./src/index.ts",
17
+ "import": "./src/index.ts",
18
+ "require": "./src/index.ts",
19
+ "default": "./src/index.ts"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "src",
25
+ "LICENSE"
26
+ ],
27
+ "homepage": "https://react-native-livechart.brandtnewlabs.com",
28
+ "keywords": [
29
+ "react-native",
30
+ "chart",
31
+ "skia",
32
+ "reanimated",
33
+ "live",
34
+ "trading",
35
+ "candlestick"
36
+ ],
37
+ "license": "MIT",
38
+ "main": "./src/index.ts",
39
+ "module": "./src/index.ts",
40
+ "name": "react-native-livechart",
41
+ "peerDependencies": {
42
+ "@shopify/react-native-skia": ">=2.0.0",
43
+ "react": ">=18.0.0",
44
+ "react-native": ">=0.76.0",
45
+ "react-native-gesture-handler": ">=2.0.0",
46
+ "react-native-reanimated": ">=4.0.0",
47
+ "react-native-worklets": ">=0.7.0"
48
+ },
49
+ "private": false,
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
53
+ "react-native": "./src/index.ts",
54
+ "repository": {
55
+ "directory": "packages/react-native-livechart",
56
+ "type": "git",
57
+ "url": "git+https://github.com/brandtnewlabs/react-native-livechart.git"
58
+ },
59
+ "scripts": {
60
+ "build": "rimraf dist && tsc -p tsconfig.build.json",
61
+ "build:types:watch": "tsc -p tsconfig.build.json --watch --preserveWatchOutput",
62
+ "prepack": "npm run build && node -e \"require('fs').copyFileSync('../../README.md','README.md')\"",
63
+ "prepare": "node -e \"if (!require('fs').existsSync('dist/index.d.ts')) process.exit(1)\" || npm run build",
64
+ "test": "npm --prefix ../.. run test:lib",
65
+ "test:coverage": "npm --prefix ../.. run test:coverage -- packages/react-native-livechart",
66
+ "typecheck": "tsc -p tsconfig.json --noEmit",
67
+ "verify": "npm --prefix ../.. run verify"
68
+ },
69
+ "sideEffects": false,
70
+ "types": "./dist/index.d.ts",
71
+ "version": "1.0.0"
72
+ }
@@ -0,0 +1,41 @@
1
+ import {
2
+ Group,
3
+ Text as SkiaText,
4
+ type SkFont,
5
+ } from "@shopify/react-native-skia";
6
+ import { useDerivedValue, type SharedValue } from "react-native-reanimated";
7
+
8
+ interface LabelEntry {
9
+ x: number;
10
+ y: number;
11
+ label: string;
12
+ alpha: number;
13
+ }
14
+
15
+ /**
16
+ * A single pre-allocated text label driven by a shared value array.
17
+ * Reads the entry at `index` — positioned off-screen when the index
18
+ * exceeds the array length.
19
+ */
20
+ export function AnimatedLabel({
21
+ entries,
22
+ index,
23
+ font,
24
+ color,
25
+ }: {
26
+ entries: SharedValue<LabelEntry[]>;
27
+ index: number;
28
+ font: SkFont;
29
+ color: string;
30
+ }) {
31
+ const x = useDerivedValue(() => entries.value[index]?.x ?? -200);
32
+ const y = useDerivedValue(() => entries.value[index]?.y ?? -200);
33
+ const text = useDerivedValue(() => entries.value[index]?.label ?? " ");
34
+ const opacity = useDerivedValue(() => entries.value[index]?.alpha ?? 0);
35
+
36
+ return (
37
+ <Group opacity={opacity}>
38
+ <SkiaText x={x} y={y} text={text} font={font} color={color} />
39
+ </Group>
40
+ );
41
+ }
@@ -0,0 +1,39 @@
1
+ import {
2
+ Group,
3
+ Path,
4
+ Text as SkiaText,
5
+ type SkFont,
6
+ type SkPath,
7
+ } from "@shopify/react-native-skia";
8
+ import { useDerivedValue, type SharedValue } from "react-native-reanimated";
9
+
10
+ interface BadgeData {
11
+ path: SkPath;
12
+ textX: number;
13
+ textY: number;
14
+ text: string;
15
+ bgColor: string;
16
+ textColor: string;
17
+ }
18
+
19
+ export function BadgeOverlay({
20
+ badge,
21
+ font,
22
+ }: {
23
+ badge: SharedValue<BadgeData>;
24
+ font: SkFont;
25
+ }) {
26
+ const badgePath = useDerivedValue(() => badge.value.path);
27
+ const bgColor = useDerivedValue(() => badge.value.bgColor);
28
+ const textX = useDerivedValue(() => badge.value.textX);
29
+ const textY = useDerivedValue(() => badge.value.textY);
30
+ const text = useDerivedValue(() => badge.value.text);
31
+ const textColor = useDerivedValue(() => badge.value.textColor);
32
+
33
+ return (
34
+ <Group>
35
+ <Path path={badgePath} style="fill" color={bgColor} />
36
+ <SkiaText x={textX} y={textY} text={text} font={font} color={textColor} />
37
+ </Group>
38
+ );
39
+ }
@@ -0,0 +1,90 @@
1
+ import { Group, Line, Rect } from "@shopify/react-native-skia";
2
+ import { useDerivedValue, type SharedValue } from "react-native-reanimated";
3
+ import { type ChartPadding } from "../draw/line";
4
+ import type { LiveChartPalette } from "../types";
5
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
6
+
7
+ /**
8
+ * Crosshair vertical line + dim region to the right. No tooltip pill —
9
+ * multi-series delivers scrub data via `onScrub` / `onScrubWorklet` callbacks.
10
+ */
11
+ export function CrosshairLine({
12
+ scrubX,
13
+ crosshairOpacity,
14
+ engine,
15
+ padding,
16
+ palette,
17
+ dimOpacity = 0.3,
18
+ crosshairLineColor,
19
+ crosshairDimColor,
20
+ }: {
21
+ scrubX: SharedValue<number>;
22
+ crosshairOpacity: SharedValue<number>;
23
+ engine: ChartEngineLayout;
24
+ padding: ChartPadding;
25
+ palette: LiveChartPalette;
26
+ /** Opacity of content right of the crosshair (dstOut fade). Default 0.3. */
27
+ dimOpacity?: number;
28
+ crosshairLineColor?: string;
29
+ crosshairDimColor?: string;
30
+ }) {
31
+ const p1 = useDerivedValue(() => ({
32
+ x: scrubX.value,
33
+ y: padding.top,
34
+ }));
35
+ const p2 = useDerivedValue(() => ({
36
+ x: scrubX.value,
37
+ y: engine.canvasHeight.value - padding.bottom,
38
+ }));
39
+
40
+ const dimWidth = useDerivedValue(() => {
41
+ const rightEdge = engine.canvasWidth.value - padding.right;
42
+ return Math.max(0, rightEdge - scrubX.value);
43
+ });
44
+ const dimHeight = useDerivedValue(
45
+ () => engine.canvasHeight.value - padding.top - padding.bottom,
46
+ );
47
+
48
+ // dstOut erase color: alpha = fraction of trailing content to remove, ramped
49
+ // by the crosshair fade-in. RGB is irrelevant for dstOut.
50
+ const dimErase = useDerivedValue(
51
+ () => `rgba(0,0,0,${(1 - dimOpacity) * crosshairOpacity.value})`,
52
+ );
53
+
54
+ return (
55
+ <>
56
+ {crosshairDimColor !== undefined ? (
57
+ // Legacy: solid colored mask painted over the chart (opt-in).
58
+ <Group opacity={crosshairOpacity}>
59
+ <Rect
60
+ x={scrubX}
61
+ y={padding.top}
62
+ width={dimWidth}
63
+ height={dimHeight}
64
+ color={crosshairDimColor}
65
+ />
66
+ </Group>
67
+ ) : dimOpacity < 1 ? (
68
+ // Erase the trailing content's alpha so it fades to the real background.
69
+ <Group blendMode="dstOut">
70
+ <Rect
71
+ x={scrubX}
72
+ y={padding.top}
73
+ width={dimWidth}
74
+ height={dimHeight}
75
+ color={dimErase}
76
+ />
77
+ </Group>
78
+ ) : null}
79
+
80
+ <Group opacity={crosshairOpacity}>
81
+ <Line
82
+ p1={p1}
83
+ p2={p2}
84
+ color={crosshairLineColor ?? palette.crosshairLine}
85
+ strokeWidth={1}
86
+ />
87
+ </Group>
88
+ </>
89
+ );
90
+ }
@@ -0,0 +1,170 @@
1
+ import {
2
+ Group,
3
+ Line,
4
+ Rect,
5
+ RoundedRect,
6
+ Text as SkiaText,
7
+ type SkFont,
8
+ } from "@shopify/react-native-skia";
9
+ import type { ReactNode } from "react";
10
+ import { useDerivedValue, type SharedValue } from "react-native-reanimated";
11
+ import { type ChartPadding } from "../draw/line";
12
+ import { type TooltipLayout } from "../hooks/crosshairShared";
13
+ import type { LiveChartPalette } from "../types";
14
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
15
+
16
+ const TOOLTIP_RADIUS = 5;
17
+
18
+ export function CrosshairOverlay({
19
+ scrubX,
20
+ crosshairOpacity,
21
+ tooltipLayout,
22
+ engine,
23
+ padding,
24
+ palette,
25
+ font,
26
+ showTooltip = true,
27
+ children,
28
+ dimOpacity = 0.3,
29
+ crosshairLineColor,
30
+ crosshairDimColor,
31
+ tooltipBackground,
32
+ tooltipColor,
33
+ tooltipBorderColor,
34
+ }: {
35
+ scrubX: SharedValue<number>;
36
+ crosshairOpacity: SharedValue<number>;
37
+ tooltipLayout: SharedValue<TooltipLayout>;
38
+ engine: ChartEngineLayout;
39
+ padding: ChartPadding;
40
+ palette: LiveChartPalette;
41
+ font: SkFont;
42
+ showTooltip?: boolean;
43
+ /** Optional custom tooltip body rendered in place of the default value/time
44
+ * text (e.g. the multi-line candle stack). Passed as children so it composes
45
+ * instead of being threaded through as a JSX-valued prop. */
46
+ children?: ReactNode;
47
+ /** Opacity of content right of the crosshair (dstOut fade). Default 0.3. */
48
+ dimOpacity?: number;
49
+ crosshairLineColor?: string;
50
+ crosshairDimColor?: string;
51
+ tooltipBackground?: string;
52
+ tooltipColor?: string;
53
+ tooltipBorderColor?: string;
54
+ }) {
55
+ const p1 = useDerivedValue(() => ({
56
+ x: scrubX.value,
57
+ y: padding.top,
58
+ }));
59
+ const p2 = useDerivedValue(() => ({
60
+ x: scrubX.value,
61
+ y: engine.canvasHeight.value - padding.bottom,
62
+ }));
63
+
64
+ const dimWidth = useDerivedValue(() => {
65
+ const rightEdge = engine.canvasWidth.value - padding.right;
66
+ return Math.max(0, rightEdge - scrubX.value);
67
+ });
68
+ const dimHeight = useDerivedValue(
69
+ () => engine.canvasHeight.value - padding.top - padding.bottom,
70
+ );
71
+
72
+ const tipX = useDerivedValue(() => tooltipLayout.value.x);
73
+ const tipY = useDerivedValue(() => tooltipLayout.value.y);
74
+ const tipW = useDerivedValue(() => tooltipLayout.value.w);
75
+ const tipH = useDerivedValue(() => tooltipLayout.value.h);
76
+
77
+ const valueStr = useDerivedValue(() => tooltipLayout.value.valueStr);
78
+ const timeStr = useDerivedValue(() => tooltipLayout.value.timeStr);
79
+ const valueTextX = useDerivedValue(() => tooltipLayout.value.valueTextX);
80
+ const timeTextX = useDerivedValue(() => tooltipLayout.value.timeTextX);
81
+ const line1Y = useDerivedValue(() => tooltipLayout.value.line1Y);
82
+ const line2Y = useDerivedValue(() => tooltipLayout.value.line2Y);
83
+
84
+ // dstOut erase color: alpha = how much of the trailing content to remove,
85
+ // ramped by the crosshair fade-in. Color RGB is irrelevant for dstOut.
86
+ const dimErase = useDerivedValue(
87
+ () => `rgba(0,0,0,${(1 - dimOpacity) * crosshairOpacity.value})`,
88
+ );
89
+
90
+ return (
91
+ <>
92
+ {crosshairDimColor !== undefined ? (
93
+ // Legacy: solid colored mask painted over the chart (opt-in).
94
+ <Group opacity={crosshairOpacity}>
95
+ <Rect
96
+ x={scrubX}
97
+ y={padding.top}
98
+ width={dimWidth}
99
+ height={dimHeight}
100
+ color={crosshairDimColor}
101
+ />
102
+ </Group>
103
+ ) : dimOpacity < 1 ? (
104
+ // Erase the trailing content's alpha so it fades to the real background
105
+ // (works on any background color, unlike a colored mask).
106
+ <Group blendMode="dstOut">
107
+ <Rect
108
+ x={scrubX}
109
+ y={padding.top}
110
+ width={dimWidth}
111
+ height={dimHeight}
112
+ color={dimErase}
113
+ />
114
+ </Group>
115
+ ) : null}
116
+
117
+ <Group opacity={crosshairOpacity}>
118
+ <Line
119
+ p1={p1}
120
+ p2={p2}
121
+ color={crosshairLineColor ?? palette.crosshairLine}
122
+ strokeWidth={1}
123
+ />
124
+
125
+ {showTooltip && (
126
+ <>
127
+ <RoundedRect
128
+ x={tipX}
129
+ y={tipY}
130
+ width={tipW}
131
+ height={tipH}
132
+ r={TOOLTIP_RADIUS}
133
+ color={tooltipBackground ?? palette.tooltipBg}
134
+ />
135
+
136
+ <RoundedRect
137
+ x={tipX}
138
+ y={tipY}
139
+ width={tipW}
140
+ height={tipH}
141
+ r={TOOLTIP_RADIUS}
142
+ color={tooltipBorderColor ?? palette.tooltipBorder}
143
+ style="stroke"
144
+ strokeWidth={1}
145
+ />
146
+
147
+ {children ?? (
148
+ <Group>
149
+ <SkiaText
150
+ x={valueTextX}
151
+ y={line1Y}
152
+ text={valueStr}
153
+ font={font}
154
+ color={tooltipColor ?? palette.tooltipText}
155
+ />
156
+ <SkiaText
157
+ x={timeTextX}
158
+ y={line2Y}
159
+ text={timeStr}
160
+ font={font}
161
+ color={palette.gridLabel}
162
+ />
163
+ </Group>
164
+ )}
165
+ </>
166
+ )}
167
+ </Group>
168
+ </>
169
+ );
170
+ }
@@ -0,0 +1,141 @@
1
+ import { Circle, Group } from "@shopify/react-native-skia";
2
+ import { useDerivedValue, type SharedValue } from "react-native-reanimated";
3
+ import { DEGEN_STRIDE } from "../constants";
4
+ import type { LiveChartPalette } from "../types";
5
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
6
+
7
+ type DegenPack = SharedValue<Float64Array<ArrayBuffer>>;
8
+
9
+ /**
10
+ * Renders one particle slot from the packed ring buffer.
11
+ * Buffer layout per slot (stride = DEGEN_STRIDE = 8):
12
+ * [0] x, [1] y, [2] vx, [3] vy, [4] t0, [5] active, [6] size, [7] colorIndex
13
+ * See `math/degenTick.ts` for the authoritative layout documentation.
14
+ *
15
+ * Each particle stores a `colorIndex` (set at spawn) that selects its color
16
+ * from `colorList`, so multi-series bursts render in their own series' color.
17
+ */
18
+ function DegenSlot({
19
+ index,
20
+ pack,
21
+ packRevision,
22
+ engine,
23
+ particleBurstDurationSec,
24
+ particleOpacity,
25
+ colorList,
26
+ }: {
27
+ index: number;
28
+ pack: DegenPack;
29
+ packRevision: SharedValue<number>;
30
+ engine: ChartEngineLayout;
31
+ particleBurstDurationSec: number;
32
+ particleOpacity: number;
33
+ colorList: string[];
34
+ }) {
35
+ const base = index * DEGEN_STRIDE;
36
+
37
+ /* istanbul ignore next -- useDerivedValue worklet runs on UI thread, not in Jest */
38
+ const cx = useDerivedValue(() => {
39
+ const rev = packRevision.value;
40
+ const buf = pack.value;
41
+ const active = buf[base + 5];
42
+ if (!(rev >= 0) || !(active > 0.5)) return -9999;
43
+ return buf[base + 0];
44
+ });
45
+
46
+ /* istanbul ignore next -- worklet */
47
+ const cy = useDerivedValue(() => {
48
+ const rev = packRevision.value;
49
+ const buf = pack.value;
50
+ const active = buf[base + 5];
51
+ if (!(rev >= 0) || !(active > 0.5)) return -9999;
52
+ return buf[base + 1];
53
+ });
54
+
55
+ /* istanbul ignore next -- worklet */
56
+ const r = useDerivedValue(() => {
57
+ const rev = packRevision.value;
58
+ const buf = pack.value;
59
+ const active = buf[base + 5];
60
+ if (!(rev >= 0) || !(active > 0.5)) return 0;
61
+ const now = engine.timestamp.value;
62
+ const dt = now - buf[base + 4];
63
+ if (dt < 0) return 0;
64
+ const life = Math.max(0, 1 - dt / particleBurstDurationSec);
65
+ const size = buf[base + 6] || 1;
66
+ return size * (0.5 + life * 0.5);
67
+ });
68
+
69
+ /* istanbul ignore next -- worklet */
70
+ const opacity = useDerivedValue(() => {
71
+ const rev = packRevision.value;
72
+ const buf = pack.value;
73
+ const active = buf[base + 5];
74
+ if (!(rev >= 0) || !(active > 0.5)) return 0;
75
+ const now = engine.timestamp.value;
76
+ const dt = now - buf[base + 4];
77
+ if (dt < 0) return 0;
78
+ const life = Math.max(0, 1 - dt / particleBurstDurationSec);
79
+ return life * particleOpacity;
80
+ });
81
+
82
+ /* istanbul ignore next -- worklet */
83
+ const color = useDerivedValue(() => {
84
+ // Read packRevision so this re-runs each frame — the pack buffer is mutated
85
+ // in place (stable reference), so without this the color would freeze at the
86
+ // mount-time colorIndex (0) for every particle.
87
+ const rev = packRevision.value;
88
+ const buf = pack.value;
89
+ if (!(rev >= 0)) return colorList[0];
90
+ const idx = Math.max(0, Math.floor(buf[base + 7]));
91
+ return colorList[idx % colorList.length];
92
+ });
93
+
94
+ return <Circle cx={cx} cy={cy} r={r} color={color} opacity={opacity} />;
95
+ }
96
+
97
+ export function DegenParticlesOverlay({
98
+ pack,
99
+ packRevision,
100
+ engine,
101
+ palette,
102
+ particleSlotCount,
103
+ particleBurstDurationSec,
104
+ particleOpacity,
105
+ colors,
106
+ }: {
107
+ pack: DegenPack;
108
+ packRevision: SharedValue<number>;
109
+ engine: ChartEngineLayout;
110
+ palette: LiveChartPalette;
111
+ particleSlotCount: number;
112
+ particleBurstDurationSec: number;
113
+ particleOpacity: number;
114
+ colors: string[] | null;
115
+ }) {
116
+ /* istanbul ignore next -- branch depends on render-time props */
117
+ const colorList = colors && colors.length > 0 ? colors : [palette.line];
118
+ // Fixed-size persistent slot pool. Each <DegenSlot> renders whatever particle
119
+ // currently occupies slot `i` (read from `pack` by index), and particles cycle
120
+ // through the slots over time. The pool is positional — slot `i` always renders
121
+ // ring-buffer index `i`, and the list only grows/shrinks at the tail, never
122
+ // reorders — so each slot has a permanent identity. Key by that stable per-slot
123
+ // id (`particle-slot-<i>`) rather than the bare array index.
124
+ const slotKeys = Array.from(
125
+ { length: particleSlotCount },
126
+ (_, i) => `particle-slot-${i}`,
127
+ );
128
+ const slots = slotKeys.map((slotKey, i) => (
129
+ <DegenSlot
130
+ key={slotKey}
131
+ index={i}
132
+ pack={pack}
133
+ packRevision={packRevision}
134
+ engine={engine}
135
+ particleBurstDurationSec={particleBurstDurationSec}
136
+ particleOpacity={particleOpacity}
137
+ colorList={colorList}
138
+ />
139
+ ));
140
+ return <Group>{slots}</Group>;
141
+ }
@@ -0,0 +1,69 @@
1
+ import { Circle, Group } from "@shopify/react-native-skia";
2
+ import { useDerivedValue, type SharedValue } from "react-native-reanimated";
3
+ import type { ResolvedPulseConfig } from "../core/resolveConfig";
4
+ import type { LiveChartPalette } from "../types";
5
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
6
+
7
+ const MIN_PULSE_RADIUS = 9;
8
+ const DOT_OUTER_RADIUS = 6.5;
9
+ const DOT_INNER_RADIUS = 3.5;
10
+
11
+ /**
12
+ * Live dot + expanding pulse ring. Peak ring size uses `pulse.maxRadius` and
13
+ * `pulse.strokeWidth`; chart padding reserves the same outer extent via
14
+ * `pulseRadialOutset` in `draw/line.ts` (see `resolveChartLayout`).
15
+ */
16
+ export function DotOverlay({
17
+ dotX,
18
+ dotY,
19
+ palette,
20
+ engine,
21
+ pulse,
22
+ }: {
23
+ dotX: SharedValue<number>;
24
+ dotY: SharedValue<number>;
25
+ palette: LiveChartPalette;
26
+ engine: ChartEngineLayout;
27
+ pulse: ResolvedPulseConfig | null;
28
+ }) {
29
+ const pulseRadius = useDerivedValue(() => {
30
+ if (!pulse) return 0;
31
+ const nowMs = engine.timestamp.value * 1000;
32
+ const t = (nowMs % pulse.interval) / pulse.duration;
33
+ if (t >= 1) return 0;
34
+ return MIN_PULSE_RADIUS + t * (pulse.maxRadius - MIN_PULSE_RADIUS);
35
+ });
36
+
37
+ const pulseOpacity = useDerivedValue(() => {
38
+ if (!pulse) return 0;
39
+ const nowMs = engine.timestamp.value * 1000;
40
+ const t = (nowMs % pulse.interval) / pulse.duration;
41
+ if (t >= 1) return 0;
42
+ return pulse.opacity * (1 - t);
43
+ });
44
+
45
+ return (
46
+ <Group>
47
+ {pulse && (
48
+ <Circle
49
+ cx={dotX}
50
+ cy={dotY}
51
+ r={pulseRadius}
52
+ color={palette.line}
53
+ style="stroke"
54
+ strokeWidth={pulse.strokeWidth}
55
+ opacity={pulseOpacity}
56
+ />
57
+ )}
58
+
59
+ <Circle
60
+ cx={dotX}
61
+ cy={dotY}
62
+ r={DOT_OUTER_RADIUS}
63
+ color={palette.badgeOuterBg}
64
+ />
65
+
66
+ <Circle cx={dotX} cy={dotY} r={DOT_INNER_RADIUS} color={palette.line} />
67
+ </Group>
68
+ );
69
+ }
@@ -0,0 +1,36 @@
1
+ import { Group, LinearGradient, Rect, vec } from "@shopify/react-native-skia";
2
+
3
+ import { useDerivedValue } from "react-native-reanimated";
4
+ import type { ChartEngineLayout } from "../core/useLiveChartEngine";
5
+
6
+ export function LeftEdgeFade({
7
+ paddingLeft,
8
+ fadeWidth,
9
+ startColor,
10
+ endColor,
11
+ engine,
12
+ }: {
13
+ paddingLeft: number;
14
+ fadeWidth: number;
15
+ startColor: string;
16
+ endColor: string;
17
+ engine: ChartEngineLayout;
18
+ }) {
19
+ const rectWidth = paddingLeft + fadeWidth;
20
+ const height = useDerivedValue(() => engine.canvasHeight.value);
21
+
22
+ const gStart = vec(paddingLeft, 0);
23
+ const gEnd = vec(paddingLeft + fadeWidth, 0);
24
+
25
+ return (
26
+ <Group blendMode="dstOut">
27
+ <Rect x={0} y={0} width={rectWidth} height={height}>
28
+ <LinearGradient
29
+ start={gStart}
30
+ end={gEnd}
31
+ colors={[startColor, endColor]}
32
+ />
33
+ </Rect>
34
+ </Group>
35
+ );
36
+ }