@ledgerhq/lumen-ui-rnative-visualization 0.1.23 → 0.1.24

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 (43) hide show
  1. package/dist/module/lib/Components/Line/Line.js +4 -4
  2. package/dist/module/lib/Components/Line/Line.js.map +1 -1
  3. package/dist/module/lib/Components/LineChart/LineChart.js +4 -4
  4. package/dist/module/lib/Components/LineChart/LineChart.js.map +1 -1
  5. package/dist/module/lib/Components/LineChart/LineChart.performance.test.js +99 -0
  6. package/dist/module/lib/Components/LineChart/LineChart.performance.test.js.map +1 -0
  7. package/dist/module/lib/Components/Point/Point.js +3 -2
  8. package/dist/module/lib/Components/Point/Point.js.map +1 -1
  9. package/dist/module/lib/Components/Point/pointContext/MagneticPointsProvider.js +19 -9
  10. package/dist/module/lib/Components/Point/pointContext/MagneticPointsProvider.js.map +1 -1
  11. package/dist/module/lib/Components/Point/pointContext/MagneticPointsProvider.test.js +10 -1
  12. package/dist/module/lib/Components/Point/pointContext/MagneticPointsProvider.test.js.map +1 -1
  13. package/dist/module/lib/Components/Point/pointContext/index.js +1 -1
  14. package/dist/module/lib/Components/Point/pointContext/index.js.map +1 -1
  15. package/dist/module/lib/Components/Point/pointContext/magneticPointsContext.js +22 -4
  16. package/dist/module/lib/Components/Point/pointContext/magneticPointsContext.js.map +1 -1
  17. package/dist/module/lib/Components/Point/usePointGeometry.js +3 -3
  18. package/dist/module/lib/Components/Point/usePointGeometry.js.map +1 -1
  19. package/dist/module/lib/Components/Scrubber/ScrubberProvider.js +2 -2
  20. package/dist/module/lib/Components/Scrubber/ScrubberProvider.js.map +1 -1
  21. package/dist/typescript/src/lib/Components/Line/Line.d.ts +1 -1
  22. package/dist/typescript/src/lib/Components/Line/Line.d.ts.map +1 -1
  23. package/dist/typescript/src/lib/Components/LineChart/LineChart.d.ts.map +1 -1
  24. package/dist/typescript/src/lib/Components/Point/Point.d.ts +1 -1
  25. package/dist/typescript/src/lib/Components/Point/Point.d.ts.map +1 -1
  26. package/dist/typescript/src/lib/Components/Point/pointContext/MagneticPointsProvider.d.ts.map +1 -1
  27. package/dist/typescript/src/lib/Components/Point/pointContext/index.d.ts +1 -1
  28. package/dist/typescript/src/lib/Components/Point/pointContext/index.d.ts.map +1 -1
  29. package/dist/typescript/src/lib/Components/Point/pointContext/magneticPointsContext.d.ts +22 -5
  30. package/dist/typescript/src/lib/Components/Point/pointContext/magneticPointsContext.d.ts.map +1 -1
  31. package/dist/typescript/src/lib/Components/Point/usePointGeometry.d.ts +2 -2
  32. package/dist/typescript/src/lib/Components/Point/usePointGeometry.d.ts.map +1 -1
  33. package/package.json +2 -2
  34. package/src/lib/Components/Line/Line.tsx +4 -4
  35. package/src/lib/Components/LineChart/LineChart.performance.test.tsx +101 -0
  36. package/src/lib/Components/LineChart/LineChart.tsx +18 -11
  37. package/src/lib/Components/Point/Point.tsx +5 -2
  38. package/src/lib/Components/Point/pointContext/MagneticPointsProvider.test.tsx +13 -1
  39. package/src/lib/Components/Point/pointContext/MagneticPointsProvider.tsx +20 -8
  40. package/src/lib/Components/Point/pointContext/index.ts +4 -2
  41. package/src/lib/Components/Point/pointContext/magneticPointsContext.ts +29 -7
  42. package/src/lib/Components/Point/usePointGeometry.ts +5 -5
  43. package/src/lib/Components/Scrubber/ScrubberProvider.tsx +2 -2
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { useTheme } from '@ledgerhq/lumen-ui-rnative';
4
- import { useId, useMemo } from 'react';
4
+ import { useId, useMemo, memo } from 'react';
5
5
  import { Defs, G, LinearGradient, Path, Stop } from 'react-native-svg';
6
6
  import { isNumericScale } from "../../utils/scales/scales.js";
7
7
  import { useCartesianChartContext } from "../CartesianChart/context/index.js";
@@ -9,14 +9,14 @@ import { usePathReveal } from "../CartesianChart/RevealAnimation/index.js";
9
9
  import { LINE_AREA_GRADIENT_OPACITY, LINE_STROKE_WIDTH } from "./constants.js";
10
10
  import { buildAreaPath, buildLinePath, toScaledPoints } from "./utils.js";
11
11
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
- export const Line = ({
12
+ export const Line = /*#__PURE__*/memo(function Line({
13
13
  seriesId,
14
14
  stroke,
15
15
  showArea = false,
16
16
  areaType: _areaType = 'gradient',
17
17
  curve,
18
18
  connectNulls
19
- }) => {
19
+ }) {
20
20
  const {
21
21
  getXScale,
22
22
  getYScale,
@@ -78,5 +78,5 @@ export const Line = ({
78
78
  strokeLinejoin: "round"
79
79
  })]
80
80
  });
81
- };
81
+ });
82
82
  //# sourceMappingURL=Line.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useTheme","useId","useMemo","Defs","G","LinearGradient","Path","Stop","isNumericScale","useCartesianChartContext","usePathReveal","LINE_AREA_GRADIENT_OPACITY","LINE_STROKE_WIDTH","buildAreaPath","buildLinePath","toScaledPoints","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Line","seriesId","stroke","showArea","areaType","_areaType","curve","connectNulls","getXScale","getYScale","getXAxisConfig","drawingArea","seriesMap","clipPath","xScale","yScale","xAxisConfig","theme","gradientId","seriesData","get","resolvedStroke","colors","border","muted","resolvedCurve","resolvedConnectNulls","points","data","linePath","areaPath","children","id","x1","y1","x2","y2","offset","stopColor","stopOpacity","testID","d","fill","strokeWidth","strokeLinecap","strokeLinejoin"],"sourceRoot":"../../../../../src","sources":["lib/Components/Line/Line.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useTheme","useId","useMemo","memo","Defs","G","LinearGradient","Path","Stop","isNumericScale","useCartesianChartContext","usePathReveal","LINE_AREA_GRADIENT_OPACITY","LINE_STROKE_WIDTH","buildAreaPath","buildLinePath","toScaledPoints","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Line","seriesId","stroke","showArea","areaType","_areaType","curve","connectNulls","getXScale","getYScale","getXAxisConfig","drawingArea","seriesMap","clipPath","xScale","yScale","xAxisConfig","theme","gradientId","seriesData","get","resolvedStroke","colors","border","muted","resolvedCurve","resolvedConnectNulls","points","data","linePath","areaPath","children","id","x1","y1","x2","y2","offset","stopColor","stopOpacity","testID","d","fill","strokeWidth","strokeLinecap","strokeLinejoin"],"sourceRoot":"../../../../../src","sources":["lib/Components/Line/Line.tsx"],"mappings":"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","ignoreList":[]}
@@ -105,17 +105,17 @@ export const LineChart = ({
105
105
  emptyLabel = 'No data',
106
106
  connectNulls
107
107
  }) => {
108
- const xAxisConfig = {
108
+ const xAxisConfig = useMemo(() => ({
109
109
  ...defaultXAxisProps,
110
110
  ...xAxis,
111
111
  position: xAxis?.position ?? defaultXAxisProps.position
112
- };
113
- const yAxisConfig = {
112
+ }), [xAxis]);
113
+ const yAxisConfig = useMemo(() => ({
114
114
  ...defaultYAxisProps,
115
115
  ...yAxis,
116
116
  position: yAxis?.position ?? defaultYAxisProps.position,
117
117
  width: yAxis?.width ?? defaultYAxisProps.width
118
- };
118
+ }), [yAxis]);
119
119
  const xAxisPosition = xAxisConfig.position;
120
120
  const yAxisPosition = yAxisConfig.position;
121
121
  const yAxisWidth = yAxisConfig.width;
@@ -1 +1 @@
1
- {"version":3,"names":["useTheme","useMemo","Animated","G","defaultXAxisProps","defaultYAxisProps","XAxis","YAxis","CartesianChart","ChartEmptyLabel","useShimmerAnimation","Line","LineChartEmptyState","canRenderLine","computeAxisPadding","getChartDisplayState","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","AnimatedG","createAnimatedComponent","LineChartLines","series","showArea","areaType","stroke","connectNulls","children","map","s","seriesId","id","LineChartTransitionLines","theme","animatedProps","colors","border","mutedSubtle","LineChartContent","showXAxis","showYAxis","xAxisConfig","yAxisConfig","isTransitionLoading","LineChart","xAxis","yAxis","width","height","inset","enableScrubbing","onScrubberPositionChange","animate","magnetRadius","loading","emptyLabel","position","xAxisPosition","yAxisPosition","yAxisWidth","axisPadding","hasData","data","status","ariaLabel","isPlaceholder","ariaBusy","overlay","undefined"],"sourceRoot":"../../../../../src","sources":["lib/Components/LineChart/LineChart.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useTheme","useMemo","Animated","G","defaultXAxisProps","defaultYAxisProps","XAxis","YAxis","CartesianChart","ChartEmptyLabel","useShimmerAnimation","Line","LineChartEmptyState","canRenderLine","computeAxisPadding","getChartDisplayState","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","AnimatedG","createAnimatedComponent","LineChartLines","series","showArea","areaType","stroke","connectNulls","children","map","s","seriesId","id","LineChartTransitionLines","theme","animatedProps","colors","border","mutedSubtle","LineChartContent","showXAxis","showYAxis","xAxisConfig","yAxisConfig","isTransitionLoading","LineChart","xAxis","yAxis","width","height","inset","enableScrubbing","onScrubberPositionChange","animate","magnetRadius","loading","emptyLabel","position","xAxisPosition","yAxisPosition","yAxisWidth","axisPadding","hasData","data","status","ariaLabel","isPlaceholder","ariaBusy","overlay","undefined"],"sourceRoot":"../../../../../src","sources":["lib/Components/LineChart/LineChart.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ import { beforeEach, describe, expect, it } from '@jest/globals';
4
+ import { ledgerLiveThemes } from '@ledgerhq/lumen-design-core';
5
+ import { ThemeProvider } from '@ledgerhq/lumen-ui-rnative';
6
+ import { render } from '@testing-library/react-native';
7
+ import React, { Profiler } from 'react';
8
+ import { Point } from "../Point/index.js";
9
+ import { LineChart } from "./LineChart.js";
10
+
11
+ // Deterministic render budgets: assert on counts, never time, so CI never flakes.
12
+ // Native scrubbing is gesture/worklet driven and not simulable here, so the
13
+ // scrub re-render guard lives only in the React lib.
14
+ import { jsx as _jsx } from "react/jsx-runtime";
15
+ const POINT_COUNT = 24;
16
+ const buildData = length => Array.from({
17
+ length
18
+ }, (_, i) => i % 9 + 1);
19
+
20
+ // Counts commits of the Point subtree itself (via React.Profiler) rather than a
21
+ // wrapper's renders. A wrapper counter sits above Point and never re-runs when a
22
+ // context Point consumes updates, so it would silently miss the version-cascade
23
+ // regression this budget guards against.
24
+ let pointMountCommits = 0;
25
+ let pointUpdateCommits = 0;
26
+ const onPointRender = (_id, phase) => {
27
+ if (phase === 'mount') {
28
+ pointMountCommits++;
29
+ } else {
30
+ pointUpdateCommits++;
31
+ }
32
+ };
33
+ const Wrapper = ({
34
+ children
35
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
36
+ themes: ledgerLiveThemes,
37
+ colorScheme: "light",
38
+ children: children
39
+ });
40
+ beforeEach(() => {
41
+ pointMountCommits = 0;
42
+ pointUpdateCommits = 0;
43
+ });
44
+ describe('LineChart performance budgets', () => {
45
+ it('emits a bounded node count per point', () => {
46
+ const data = buildData(POINT_COUNT);
47
+ const {
48
+ queryAllByTestId
49
+ } = render(/*#__PURE__*/_jsx(Wrapper, {
50
+ children: /*#__PURE__*/_jsx(LineChart, {
51
+ series: [{
52
+ id: 's',
53
+ stroke: '#000',
54
+ data
55
+ }],
56
+ width: 400,
57
+ height: 200,
58
+ animate: false,
59
+ children: data.map((value, index) => /*#__PURE__*/_jsx(Point, {
60
+ dataX: index,
61
+ dataY: value
62
+ }, index))
63
+ })
64
+ }));
65
+ const groups = queryAllByTestId('point-group');
66
+ const circles = queryAllByTestId('point-circle');
67
+ const arrows = queryAllByTestId('point-arrow');
68
+ expect(circles).toHaveLength(groups.length);
69
+ expect(arrows).toHaveLength(0);
70
+ expect(groups.length).toBeGreaterThan(0);
71
+ });
72
+ it('renders each magnetic point exactly once on mount (no version cascade)', () => {
73
+ const data = buildData(POINT_COUNT);
74
+ render(/*#__PURE__*/_jsx(Wrapper, {
75
+ children: /*#__PURE__*/_jsx(LineChart, {
76
+ series: [{
77
+ id: 's',
78
+ stroke: '#000',
79
+ data
80
+ }],
81
+ width: 400,
82
+ height: 200,
83
+ animate: false,
84
+ children: data.map((value, index) => /*#__PURE__*/_jsx(Profiler, {
85
+ id: `point-${index}`,
86
+ onRender: onPointRender,
87
+ children: /*#__PURE__*/_jsx(Point, {
88
+ magnetic: true,
89
+ dataX: index,
90
+ dataY: value
91
+ })
92
+ }, index))
93
+ })
94
+ }));
95
+ expect(pointMountCommits).toBe(POINT_COUNT);
96
+ expect(pointUpdateCommits).toBe(0);
97
+ });
98
+ });
99
+ //# sourceMappingURL=LineChart.performance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["beforeEach","describe","expect","it","ledgerLiveThemes","ThemeProvider","render","React","Profiler","Point","LineChart","jsx","_jsx","POINT_COUNT","buildData","length","Array","from","_","i","pointMountCommits","pointUpdateCommits","onPointRender","_id","phase","Wrapper","children","themes","colorScheme","data","queryAllByTestId","series","id","stroke","width","height","animate","map","value","index","dataX","dataY","groups","circles","arrows","toHaveLength","toBeGreaterThan","onRender","magnetic","toBe"],"sourceRoot":"../../../../../src","sources":["lib/Components/LineChart/LineChart.performance.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { useTheme } from '@ledgerhq/lumen-ui-rnative';
4
+ import { memo } from 'react';
4
5
  import Animated from 'react-native-reanimated';
5
6
  import { Circle, G, Polygon, Text as SvgText } from 'react-native-svg';
6
7
  import { DEFAULT_SIZE, LABEL_FONT_SIZE, STROKE_WIDTH } from "./constants.js";
@@ -60,7 +61,7 @@ function PointArrow({
60
61
  fill: theme.colors.text.base
61
62
  });
62
63
  }
63
- export function Point({
64
+ export const Point = /*#__PURE__*/memo(function Point({
64
65
  dataX,
65
66
  dataY,
66
67
  color,
@@ -121,5 +122,5 @@ export function Point({
121
122
  children: labelText
122
123
  })]
123
124
  });
124
- }
125
+ });
125
126
  //# sourceMappingURL=Point.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useTheme","Animated","Circle","G","Polygon","Text","SvgText","DEFAULT_SIZE","LABEL_FONT_SIZE","STROKE_WIDTH","usePointGeometry","buildArrowPoints","computeLabelGeometry","resolveLabel","jsx","_jsx","jsxs","_jsxs","AnimatedG","createAnimatedComponent","PointLabel","textAnchor","props","theme","fill","colors","text","base","fontSize","fontWeight","typographies","body4","fontFamily","fontFamilies","sans","PointMarker","x","y","size","color","radius","bg","mutedStrong","testID","cx","cy","r","stroke","canvas","strokeWidth","PointArrow","position","points","Point","dataX","dataY","label","LabelComponent","labelPosition","hidePoint","showLabelArrow","onPress","magnetic","labelAlignment","pixel","drawingArea","fadeProps","isVisible","labelText","isLabelVisible","undefined","labelGeometry","pixelX","pixelY","area","alignment","Label","animatedProps","children"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/Point.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useTheme","memo","Animated","Circle","G","Polygon","Text","SvgText","DEFAULT_SIZE","LABEL_FONT_SIZE","STROKE_WIDTH","usePointGeometry","buildArrowPoints","computeLabelGeometry","resolveLabel","jsx","_jsx","jsxs","_jsxs","AnimatedG","createAnimatedComponent","PointLabel","textAnchor","props","theme","fill","colors","text","base","fontSize","fontWeight","typographies","body4","fontFamily","fontFamilies","sans","PointMarker","x","y","size","color","radius","bg","mutedStrong","testID","cx","cy","r","stroke","canvas","strokeWidth","PointArrow","position","points","Point","dataX","dataY","label","LabelComponent","labelPosition","hidePoint","showLabelArrow","onPress","magnetic","labelAlignment","pixel","drawingArea","fadeProps","isVisible","labelText","isLabelVisible","undefined","labelGeometry","pixelX","pixelY","area","alignment","Label","animatedProps","children"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/Point.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { useCallback, useMemo, useRef, useState } from 'react';
4
- import { MagneticPointsContextProvider } from "./magneticPointsContext.js";
4
+ import { MagneticRegistryProvider, MagneticSnapshotProvider } from "./magneticPointsContext.js";
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
6
  export function MagneticPointsProvider({
7
7
  children
@@ -21,15 +21,25 @@ export function MagneticPointsProvider({
21
21
  const getMagneticPoints = useCallback(() => {
22
22
  return pointsRef.current;
23
23
  }, []);
24
- const value = useMemo(() => ({
24
+
25
+ // Stable identity for the provider's lifetime: `Point` consumers read this
26
+ // and therefore never re-render when the magnetic set changes.
27
+ const registry = useMemo(() => ({
25
28
  register,
26
- unregister,
27
- getMagneticPoints,
28
- version
29
- }), [register, unregister, getMagneticPoints, version]);
30
- return /*#__PURE__*/_jsx(MagneticPointsContextProvider, {
31
- value: value,
32
- children: children
29
+ unregister
30
+ }), [register, unregister]);
31
+
32
+ // Changes on every register/unregister: consumed only by the scrubber.
33
+ const snapshot = useMemo(() => ({
34
+ version,
35
+ getMagneticPoints
36
+ }), [version, getMagneticPoints]);
37
+ return /*#__PURE__*/_jsx(MagneticRegistryProvider, {
38
+ value: registry,
39
+ children: /*#__PURE__*/_jsx(MagneticSnapshotProvider, {
40
+ value: snapshot,
41
+ children: children
42
+ })
33
43
  });
34
44
  }
35
45
  //# sourceMappingURL=MagneticPointsProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useMemo","useRef","useState","MagneticPointsContextProvider","jsx","_jsx","MagneticPointsProvider","children","pointsRef","Set","version","setVersion","register","dataIndex","current","has","add","v","unregister","delete","getMagneticPoints","value"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/MagneticPointsProvider.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAG9D,SACEC,6BAA6B,QAExB,4BAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMjC,OAAO,SAASC,sBAAsBA,CAAC;EACrCC;AACqC,CAAC,EAAE;EACxC,MAAMC,SAAS,GAAGP,MAAM,CAAC,IAAIQ,GAAG,CAAS,CAAC,CAAC;EAC3C,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGT,QAAQ,CAAC,CAAC,CAAC;EAEzC,MAAMU,QAAQ,GAAGb,WAAW,CAAEc,SAAiB,IAAW;IACxD,IAAIL,SAAS,CAACM,OAAO,CAACC,GAAG,CAACF,SAAS,CAAC,EAAE;IACtCL,SAAS,CAACM,OAAO,CAACE,GAAG,CAACH,SAAS,CAAC;IAChCF,UAAU,CAAEM,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,UAAU,GAAGnB,WAAW,CAAEc,SAAiB,IAAW;IAC1D,IAAI,CAACL,SAAS,CAACM,OAAO,CAACC,GAAG,CAACF,SAAS,CAAC,EAAE;IACvCL,SAAS,CAACM,OAAO,CAACK,MAAM,CAACN,SAAS,CAAC;IACnCF,UAAU,CAAEM,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,iBAAiB,GAAGrB,WAAW,CAAC,MAA2B;IAC/D,OAAOS,SAAS,CAACM,OAAO;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMO,KAAiC,GAAGrB,OAAO,CAC/C,OAAO;IAAEY,QAAQ;IAAEM,UAAU;IAAEE,iBAAiB;IAAEV;EAAQ,CAAC,CAAC,EAC5D,CAACE,QAAQ,EAAEM,UAAU,EAAEE,iBAAiB,EAAEV,OAAO,CACnD,CAAC;EAED,oBACEL,IAAA,CAACF,6BAA6B;IAACkB,KAAK,EAAEA,KAAM;IAAAd,QAAA,EACzCA;EAAQ,CACoB,CAAC;AAEpC","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useMemo","useRef","useState","MagneticRegistryProvider","MagneticSnapshotProvider","jsx","_jsx","MagneticPointsProvider","children","pointsRef","Set","version","setVersion","register","dataIndex","current","has","add","v","unregister","delete","getMagneticPoints","registry","snapshot","value"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/MagneticPointsProvider.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAG9D,SACEC,wBAAwB,EACxBC,wBAAwB,QAGnB,4BAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMjC,OAAO,SAASC,sBAAsBA,CAAC;EACrCC;AACqC,CAAC,EAAE;EACxC,MAAMC,SAAS,GAAGR,MAAM,CAAC,IAAIS,GAAG,CAAS,CAAC,CAAC;EAC3C,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGV,QAAQ,CAAC,CAAC,CAAC;EAEzC,MAAMW,QAAQ,GAAGd,WAAW,CAAEe,SAAiB,IAAW;IACxD,IAAIL,SAAS,CAACM,OAAO,CAACC,GAAG,CAACF,SAAS,CAAC,EAAE;IACtCL,SAAS,CAACM,OAAO,CAACE,GAAG,CAACH,SAAS,CAAC;IAChCF,UAAU,CAAEM,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,UAAU,GAAGpB,WAAW,CAAEe,SAAiB,IAAW;IAC1D,IAAI,CAACL,SAAS,CAACM,OAAO,CAACC,GAAG,CAACF,SAAS,CAAC,EAAE;IACvCL,SAAS,CAACM,OAAO,CAACK,MAAM,CAACN,SAAS,CAAC;IACnCF,UAAU,CAAEM,CAAC,IAAKA,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,iBAAiB,GAAGtB,WAAW,CAAC,MAA2B;IAC/D,OAAOU,SAAS,CAACM,OAAO;EAC1B,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA;EACA,MAAMO,QAA+B,GAAGtB,OAAO,CAC7C,OAAO;IAAEa,QAAQ;IAAEM;EAAW,CAAC,CAAC,EAChC,CAACN,QAAQ,EAAEM,UAAU,CACvB,CAAC;;EAED;EACA,MAAMI,QAA+B,GAAGvB,OAAO,CAC7C,OAAO;IAAEW,OAAO;IAAEU;EAAkB,CAAC,CAAC,EACtC,CAACV,OAAO,EAAEU,iBAAiB,CAC7B,CAAC;EAED,oBACEf,IAAA,CAACH,wBAAwB;IAACqB,KAAK,EAAEF,QAAS;IAAAd,QAAA,eACxCF,IAAA,CAACF,wBAAwB;MAACoB,KAAK,EAAED,QAAS;MAAAf,QAAA,EACvCA;IAAQ,CACe;EAAC,CACH,CAAC;AAE/B","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { describe, expect, it } from '@jest/globals';
4
4
  import { renderHook, act } from '@testing-library/react-native';
5
- import { useMagneticPointsContext } from "./magneticPointsContext.js";
5
+ import { useMagneticRegistry, useMagneticSnapshot } from "./magneticPointsContext.js";
6
6
  import { MagneticPointsProvider } from "./MagneticPointsProvider.js";
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
8
  const wrapper = ({
@@ -10,6 +10,15 @@ const wrapper = ({
10
10
  }) => /*#__PURE__*/_jsx(MagneticPointsProvider, {
11
11
  children: children
12
12
  });
13
+
14
+ /**
15
+ * Reads both split contexts so the existing assertions (register/unregister/
16
+ * getMagneticPoints/version) keep working against a single result object.
17
+ */
18
+ const useMagneticPointsContext = () => ({
19
+ ...useMagneticRegistry(),
20
+ ...useMagneticSnapshot()
21
+ });
13
22
  describe('MagneticPointsProvider', () => {
14
23
  it('starts with an empty set', () => {
15
24
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","renderHook","act","useMagneticPointsContext","MagneticPointsProvider","jsx","_jsx","wrapper","children","result","current","getMagneticPoints","size","toBe","register","has","points","unregister","version","versionAfterFirst","versionBefore"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/MagneticPointsProvider.test.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","expect","it","renderHook","act","useMagneticRegistry","useMagneticSnapshot","MagneticPointsProvider","jsx","_jsx","wrapper","children","useMagneticPointsContext","result","current","getMagneticPoints","size","toBe","register","has","points","unregister","version","versionAfterFirst","versionBefore"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/MagneticPointsProvider.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
 
3
- export { useMagneticPointsContext } from "./magneticPointsContext.js";
3
+ export { useMagneticRegistry, useMagneticSnapshot } from "./magneticPointsContext.js";
4
4
  export { MagneticPointsProvider } from "./MagneticPointsProvider.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMagneticPointsContext","MagneticPointsProvider"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/index.ts"],"mappings":";;AAAA,SACEA,wBAAwB,QAEnB,4BAAyB;AAChC,SAASC,sBAAsB,QAAQ,6BAA0B","ignoreList":[]}
1
+ {"version":3,"names":["useMagneticRegistry","useMagneticSnapshot","MagneticPointsProvider"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/index.ts"],"mappings":";;AAAA,SACEA,mBAAmB,EACnBC,mBAAmB,QAGd,4BAAyB;AAChC,SAASC,sBAAsB,QAAQ,6BAA0B","ignoreList":[]}
@@ -1,10 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  import { createSafeContext } from '@ledgerhq/lumen-utils-shared';
4
- const [MagneticPointsContextProvider, _useMagneticPointsSafeContext] = createSafeContext('MagneticPoints');
5
- export const useMagneticPointsContext = () => _useMagneticPointsSafeContext({
6
- consumerName: 'useMagneticPointsContext',
4
+
5
+ /**
6
+ * Stable registration API for magnetic points. Its identity never changes for
7
+ * the provider's lifetime, so consumers (every `Point`) do not re-render when
8
+ * the magnetic set changes — only when they mount/unmount.
9
+ */
10
+
11
+ /**
12
+ * Mutable snapshot of the registered magnetic points. Changes on every
13
+ * register/unregister (via `version`) and is consumed only by the scrubber,
14
+ * which needs to recompute its snap targets when the set changes.
15
+ */
16
+
17
+ const [MagneticRegistryProvider, _useMagneticRegistrySafeContext] = createSafeContext('MagneticRegistry');
18
+ const [MagneticSnapshotProvider, _useMagneticSnapshotSafeContext] = createSafeContext('MagneticSnapshot');
19
+ export const useMagneticRegistry = () => _useMagneticRegistrySafeContext({
20
+ consumerName: 'useMagneticRegistry',
21
+ contextRequired: true
22
+ });
23
+ export const useMagneticSnapshot = () => _useMagneticSnapshotSafeContext({
24
+ consumerName: 'useMagneticSnapshot',
7
25
  contextRequired: true
8
26
  });
9
- export { MagneticPointsContextProvider };
27
+ export { MagneticRegistryProvider, MagneticSnapshotProvider };
10
28
  //# sourceMappingURL=magneticPointsContext.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createSafeContext","MagneticPointsContextProvider","_useMagneticPointsSafeContext","useMagneticPointsContext","consumerName","contextRequired"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/magneticPointsContext.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,8BAA8B;AAShE,MAAM,CAACC,6BAA6B,EAAEC,6BAA6B,CAAC,GAClEF,iBAAiB,CAA6B,gBAAgB,CAAC;AAEjE,OAAO,MAAMG,wBAAwB,GAAGA,CAAA,KACtCD,6BAA6B,CAAC;EAC5BE,YAAY,EAAE,0BAA0B;EACxCC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEJ,SAASJ,6BAA6B","ignoreList":[]}
1
+ {"version":3,"names":["createSafeContext","MagneticRegistryProvider","_useMagneticRegistrySafeContext","MagneticSnapshotProvider","_useMagneticSnapshotSafeContext","useMagneticRegistry","consumerName","contextRequired","useMagneticSnapshot"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Point/pointContext/magneticPointsContext.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,8BAA8B;;AAEhE;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;;AAMA,MAAM,CAACC,wBAAwB,EAAEC,+BAA+B,CAAC,GAC/DF,iBAAiB,CAAwB,kBAAkB,CAAC;AAE9D,MAAM,CAACG,wBAAwB,EAAEC,+BAA+B,CAAC,GAC/DJ,iBAAiB,CAAwB,kBAAkB,CAAC;AAE9D,OAAO,MAAMK,mBAAmB,GAAGA,CAAA,KACjCH,+BAA+B,CAAC;EAC9BI,YAAY,EAAE,qBAAqB;EACnCC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEJ,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KACjCJ,+BAA+B,CAAC;EAC9BE,YAAY,EAAE,qBAAqB;EACnCC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEJ,SAASN,wBAAwB,EAAEE,wBAAwB","ignoreList":[]}
@@ -4,7 +4,7 @@ import { useEffect, useMemo } from 'react';
4
4
  import { projectPoint } from "../../utils/scales/scales.js";
5
5
  import { useCartesianChartContext } from "../CartesianChart/context/index.js";
6
6
  import { useRevealFadeProps } from "../CartesianChart/RevealAnimation/index.js";
7
- import { useMagneticPointsContext } from "./pointContext/index.js";
7
+ import { useMagneticRegistry } from "./pointContext/index.js";
8
8
  import { isWithinBounds, resolveDataXToIndex } from "./utils.js";
9
9
  /**
10
10
  * Resolves a point's chart geometry and behaviour: projects its data
@@ -23,8 +23,8 @@ export const usePointGeometry = ({
23
23
  getXAxisConfig,
24
24
  drawingArea
25
25
  } = useCartesianChartContext();
26
- const magneticContext = useMagneticPointsContext();
27
- useMagneticRegistration(magnetic, dataX, getXAxisConfig, magneticContext);
26
+ const magneticRegistry = useMagneticRegistry();
27
+ useMagneticRegistration(magnetic, dataX, getXAxisConfig, magneticRegistry);
28
28
  const xScale = getXScale();
29
29
  const yScale = getYScale();
30
30
  const pixel = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useMemo","projectPoint","useCartesianChartContext","useRevealFadeProps","useMagneticPointsContext","isWithinBounds","resolveDataXToIndex","usePointGeometry","dataX","dataY","magnetic","getXScale","getYScale","getXAxisConfig","drawingArea","magneticContext","useMagneticRegistration","xScale","yScale","pixel","undefined","fadeProps","isVisible","x","y","register","unregister","index"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/usePointGeometry.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAE1C,SAASC,YAAY,QAAQ,8BAA2B;AAGxD,SAASC,wBAAwB,QAAQ,oCAA2B;AACpE,SAASC,kBAAkB,QAAQ,4CAAmC;AACtE,SAASC,wBAAwB,QAAQ,yBAAgB;AAEzD,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,YAAS;AAiB7D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAGA,CAAC;EAC/BC,KAAK;EACLC,KAAK;EACLC;AACsB,CAAC,KAAoB;EAC3C,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,cAAc;IAAEC;EAAY,CAAC,GACzDZ,wBAAwB,CAAC,CAAC;EAC5B,MAAMa,eAAe,GAAGX,wBAAwB,CAAC,CAAC;EAElDY,uBAAuB,CAACN,QAAQ,EAAEF,KAAK,EAAEK,cAAc,EAAEE,eAAe,CAAC;EAEzE,MAAME,MAAM,GAAGN,SAAS,CAAC,CAAC;EAC1B,MAAMO,MAAM,GAAGN,SAAS,CAAC,CAAC;EAE1B,MAAMO,KAAK,GAAGnB,OAAO,CAAC,MAAM;IAC1B,IAAI,CAACiB,MAAM,IAAI,CAACC,MAAM,EAAE,OAAOE,SAAS;IACxC,OAAOnB,YAAY,CAACO,KAAK,EAAEC,KAAK,EAAEQ,MAAM,EAAEC,MAAM,CAAC;EACnD,CAAC,EAAE,CAACV,KAAK,EAAEC,KAAK,EAAEQ,MAAM,EAAEC,MAAM,CAAC,CAAC;EAElC,MAAMG,SAAS,GAAGlB,kBAAkB,CAAC,CAAC;EAEtC,MAAMmB,SAAS,GACbH,KAAK,KAAKC,SAAS,IAAIf,cAAc,CAACc,KAAK,CAACI,CAAC,EAAEJ,KAAK,CAACK,CAAC,EAAEV,WAAW,CAAC;EAEtE,OAAO;IAAEK,KAAK;IAAEL,WAAW;IAAEO,SAAS;IAAEC;EAAU,CAAC;AACrD,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMN,uBAAuB,GAAGA,CACrCN,QAAiB,EACjBF,KAAa,EACbK,cAA+C,EAC/C;EAAEY,QAAQ;EAAEC;AAAuC,CAAC,KAC3C;EACT3B,SAAS,CAAC,MAAM;IACd,IAAI,CAACW,QAAQ,EAAE;IACf,MAAMiB,KAAK,GAAGrB,mBAAmB,CAACE,KAAK,EAAEK,cAAc,CAAC,CAAC,CAAC;IAC1D,IAAIc,KAAK,KAAKP,SAAS,EAAE;IACzBK,QAAQ,CAACE,KAAK,CAAC;IACf,OAAO,MAAMD,UAAU,CAACC,KAAK,CAAC;EAChC,CAAC,EAAE,CAACjB,QAAQ,EAAEF,KAAK,EAAEK,cAAc,EAAEY,QAAQ,EAAEC,UAAU,CAAC,CAAC;AAC7D,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useMemo","projectPoint","useCartesianChartContext","useRevealFadeProps","useMagneticRegistry","isWithinBounds","resolveDataXToIndex","usePointGeometry","dataX","dataY","magnetic","getXScale","getYScale","getXAxisConfig","drawingArea","magneticRegistry","useMagneticRegistration","xScale","yScale","pixel","undefined","fadeProps","isVisible","x","y","register","unregister","index"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/usePointGeometry.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAE1C,SAASC,YAAY,QAAQ,8BAA2B;AAGxD,SAASC,wBAAwB,QAAQ,oCAA2B;AACpE,SAASC,kBAAkB,QAAQ,4CAAmC;AACtE,SAASC,mBAAmB,QAAQ,yBAAgB;AAEpD,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,YAAS;AAiB7D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAGA,CAAC;EAC/BC,KAAK;EACLC,KAAK;EACLC;AACsB,CAAC,KAAoB;EAC3C,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,cAAc;IAAEC;EAAY,CAAC,GACzDZ,wBAAwB,CAAC,CAAC;EAC5B,MAAMa,gBAAgB,GAAGX,mBAAmB,CAAC,CAAC;EAE9CY,uBAAuB,CAACN,QAAQ,EAAEF,KAAK,EAAEK,cAAc,EAAEE,gBAAgB,CAAC;EAE1E,MAAME,MAAM,GAAGN,SAAS,CAAC,CAAC;EAC1B,MAAMO,MAAM,GAAGN,SAAS,CAAC,CAAC;EAE1B,MAAMO,KAAK,GAAGnB,OAAO,CAAC,MAAM;IAC1B,IAAI,CAACiB,MAAM,IAAI,CAACC,MAAM,EAAE,OAAOE,SAAS;IACxC,OAAOnB,YAAY,CAACO,KAAK,EAAEC,KAAK,EAAEQ,MAAM,EAAEC,MAAM,CAAC;EACnD,CAAC,EAAE,CAACV,KAAK,EAAEC,KAAK,EAAEQ,MAAM,EAAEC,MAAM,CAAC,CAAC;EAElC,MAAMG,SAAS,GAAGlB,kBAAkB,CAAC,CAAC;EAEtC,MAAMmB,SAAS,GACbH,KAAK,KAAKC,SAAS,IAAIf,cAAc,CAACc,KAAK,CAACI,CAAC,EAAEJ,KAAK,CAACK,CAAC,EAAEV,WAAW,CAAC;EAEtE,OAAO;IAAEK,KAAK;IAAEL,WAAW;IAAEO,SAAS;IAAEC;EAAU,CAAC;AACrD,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMN,uBAAuB,GAAGA,CACrCN,QAAiB,EACjBF,KAAa,EACbK,cAA+C,EAC/C;EAAEY,QAAQ;EAAEC;AAAkC,CAAC,KACtC;EACT3B,SAAS,CAAC,MAAM;IACd,IAAI,CAACW,QAAQ,EAAE;IACf,MAAMiB,KAAK,GAAGrB,mBAAmB,CAACE,KAAK,EAAEK,cAAc,CAAC,CAAC,CAAC;IAC1D,IAAIc,KAAK,KAAKP,SAAS,EAAE;IACzBK,QAAQ,CAACE,KAAK,CAAC;IACf,OAAO,MAAMD,UAAU,CAACC,KAAK,CAAC;EAChC,CAAC,EAAE,CAACjB,QAAQ,EAAEF,KAAK,EAAEK,cAAc,EAAEY,QAAQ,EAAEC,UAAU,CAAC,CAAC;AAC7D,CAAC","ignoreList":[]}
@@ -8,7 +8,7 @@ import Animated, { useSharedValue } from 'react-native-reanimated';
8
8
  import { scheduleOnRN } from 'react-native-worklets';
9
9
  import { clamp } from "../../utils/numbers.js";
10
10
  import { useCartesianChartContext } from "../CartesianChart/context/index.js";
11
- import { useMagneticPointsContext } from "../Point/pointContext/index.js";
11
+ import { useMagneticSnapshot } from "../Point/pointContext/index.js";
12
12
  import { ScrubberContextProvider } from "./context/index.js";
13
13
  import { applyMagnetisation, getDataIndexFromPosition, resolvePixelX, buildSortedMagnets } from "./utils.js";
14
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -45,7 +45,7 @@ export function ScrubberProvider({
45
45
  const {
46
46
  getMagneticPoints,
47
47
  version
48
- } = useMagneticPointsContext();
48
+ } = useMagneticSnapshot();
49
49
 
50
50
  // All values touched by the gesture's JS-thread callback live in a single
51
51
  // ref. Reading via `latest.current` keeps the callbacks reference-stable
@@ -1 +1 @@
1
- {"version":3,"names":["triggerHapticFeedback","useCallback","useMemo","useRef","useState","StyleSheet","View","Gesture","GestureDetector","Animated","useSharedValue","scheduleOnRN","clamp","useCartesianChartContext","useMagneticPointsContext","ScrubberContextProvider","applyMagnetisation","getDataIndexFromPosition","resolvePixelX","buildSortedMagnets","jsx","_jsx","jsxs","_jsxs","LONG_PRESS_MIN_DURATION_MS","ScrubberProvider","children","width","height","enableScrubbing","onScrubberPositionChange","magnetRadius","style","scrubberPosition","setScrubberPosition","getXScale","getXAxisConfig","dataLength","getMagneticPoints","version","sortedMagnets","magneticIndices","getPixelForIndex","index","latest","onChange","lastIndex","undefined","current","handleHapticFeedback","ref","clamped","setScrubberPositionAndNotify","handlePositionChange","pixelX","scale","xAxisConfig","resolvedIndex","isScrubbing","resetScrubber","value","composed","longPress","LongPress","minDuration","onStart","e","x","pan","Pan","manualActivation","onTouchesMove","_","manager","activate","onUpdate","onEnd","onFinalize","Simultaneous","surface","gesture","testID","absoluteFill","contextValue"],"sourceRoot":"../../../../../src","sources":["lib/Components/Scrubber/ScrubberProvider.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["triggerHapticFeedback","useCallback","useMemo","useRef","useState","StyleSheet","View","Gesture","GestureDetector","Animated","useSharedValue","scheduleOnRN","clamp","useCartesianChartContext","useMagneticSnapshot","ScrubberContextProvider","applyMagnetisation","getDataIndexFromPosition","resolvePixelX","buildSortedMagnets","jsx","_jsx","jsxs","_jsxs","LONG_PRESS_MIN_DURATION_MS","ScrubberProvider","children","width","height","enableScrubbing","onScrubberPositionChange","magnetRadius","style","scrubberPosition","setScrubberPosition","getXScale","getXAxisConfig","dataLength","getMagneticPoints","version","sortedMagnets","magneticIndices","getPixelForIndex","index","latest","onChange","lastIndex","undefined","current","handleHapticFeedback","ref","clamped","setScrubberPositionAndNotify","handlePositionChange","pixelX","scale","xAxisConfig","resolvedIndex","isScrubbing","resetScrubber","value","composed","longPress","LongPress","minDuration","onStart","e","x","pan","Pan","manualActivation","onTouchesMove","_","manager","activate","onUpdate","onEnd","onFinalize","Simultaneous","surface","gesture","testID","absoluteFill","contextValue"],"sourceRoot":"../../../../../src","sources":["lib/Components/Scrubber/ScrubberProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  import type { LineProps } from './types';
2
- export declare const Line: ({ seriesId, stroke, showArea, areaType: _areaType, curve, connectNulls, }: LineProps) => import("react/jsx-runtime").JSX.Element | null;
2
+ export declare const Line: import("react").NamedExoticComponent<LineProps>;
3
3
  //# sourceMappingURL=Line.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/Line/Line.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,eAAO,MAAM,IAAI,GAAI,2EAOlB,SAAS,mDAkFX,CAAC"}
1
+ {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/Line/Line.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,eAAO,MAAM,IAAI,iDAyFf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LineChart.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/LineChart/LineChart.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,SAAS,CAAC;AA0FjB,eAAO,MAAM,SAAS,GAAI,0MAmBvB,QAAQ,CAAC,cAAc,CAAC,4CAgF1B,CAAC"}
1
+ {"version":3,"file":"LineChart.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/LineChart/LineChart.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,SAAS,CAAC;AA0FjB,eAAO,MAAM,SAAS,GAAI,0MAmBvB,QAAQ,CAAC,cAAc,CAAC,4CAuF1B,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { PointLabelProps, PointProps } from './types';
2
2
  export declare function PointLabel({ textAnchor, ...props }: Readonly<PointLabelProps>): import("react/jsx-runtime").JSX.Element;
3
- export declare function Point({ dataX, dataY, color, label, LabelComponent, labelPosition, hidePoint, showLabelArrow, size, onPress, magnetic, labelAlignment, }: Readonly<PointProps>): import("react/jsx-runtime").JSX.Element | null;
3
+ export declare const Point: import("react").NamedExoticComponent<Readonly<PointProps>>;
4
4
  //# sourceMappingURL=Point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Point.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/Point/Point.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,eAAe,EAEf,UAAU,EACX,MAAM,SAAS,CAAC;AAMjB,wBAAgB,UAAU,CAAC,EACzB,UAAqB,EACrB,GAAG,KAAK,EACT,EAAE,QAAQ,CAAC,eAAe,CAAC,2CAa3B;AAgCD,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,cAAc,EACd,aAAqB,EACrB,SAAiB,EACjB,cAAqB,EACrB,IAAmB,EACnB,OAAO,EACP,QAAgB,EAChB,cAAuB,GACxB,EAAE,QAAQ,CAAC,UAAU,CAAC,kDAoDtB"}
1
+ {"version":3,"file":"Point.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/Point/Point.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,eAAe,EAEf,UAAU,EACX,MAAM,SAAS,CAAC;AAOjB,wBAAgB,UAAU,CAAC,EACzB,UAAqB,EACrB,GAAG,KAAK,EACT,EAAE,QAAQ,CAAC,eAAe,CAAC,2CAa3B;AAgCD,eAAO,MAAM,KAAK,4DAiEhB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MagneticPointsProvider.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/Components/Point/pointContext/MagneticPointsProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,GACT,EAAE,QAAQ,CAAC,2BAA2B,CAAC,2CA8BvC"}
1
+ {"version":3,"file":"MagneticPointsProvider.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/Components/Point/pointContext/MagneticPointsProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,GACT,EAAE,QAAQ,CAAC,2BAA2B,CAAC,2CAwCvC"}
@@ -1,3 +1,3 @@
1
- export { useMagneticPointsContext, type MagneticPointsContextValue, } from './magneticPointsContext';
1
+ export { useMagneticRegistry, useMagneticSnapshot, type MagneticRegistryValue, type MagneticSnapshotValue, } from './magneticPointsContext';
2
2
  export { MagneticPointsProvider } from './MagneticPointsProvider';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/Components/Point/pointContext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,KAAK,0BAA0B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/Components/Point/pointContext/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,13 +1,30 @@
1
- export type MagneticPointsContextValue = {
1
+ /**
2
+ * Stable registration API for magnetic points. Its identity never changes for
3
+ * the provider's lifetime, so consumers (every `Point`) do not re-render when
4
+ * the magnetic set changes — only when they mount/unmount.
5
+ */
6
+ export type MagneticRegistryValue = {
2
7
  register: (dataIndex: number) => void;
3
8
  unregister: (dataIndex: number) => void;
9
+ };
10
+ /**
11
+ * Mutable snapshot of the registered magnetic points. Changes on every
12
+ * register/unregister (via `version`) and is consumed only by the scrubber,
13
+ * which needs to recompute its snap targets when the set changes.
14
+ */
15
+ export type MagneticSnapshotValue = {
4
16
  version: number;
5
17
  getMagneticPoints: () => ReadonlySet<number>;
6
18
  };
7
- declare const MagneticPointsContextProvider: import("react").FC<{
19
+ declare const MagneticRegistryProvider: import("react").FC<{
20
+ children: import("react").ReactNode;
21
+ value: MagneticRegistryValue;
22
+ }>;
23
+ declare const MagneticSnapshotProvider: import("react").FC<{
8
24
  children: import("react").ReactNode;
9
- value: MagneticPointsContextValue;
25
+ value: MagneticSnapshotValue;
10
26
  }>;
11
- export declare const useMagneticPointsContext: () => MagneticPointsContextValue;
12
- export { MagneticPointsContextProvider };
27
+ export declare const useMagneticRegistry: () => MagneticRegistryValue;
28
+ export declare const useMagneticSnapshot: () => MagneticSnapshotValue;
29
+ export { MagneticRegistryProvider, MagneticSnapshotProvider };
13
30
  //# sourceMappingURL=magneticPointsContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"magneticPointsContext.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/Components/Point/pointContext/magneticPointsContext.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,QAAA,MAAO,6BAA6B;;;EAC6B,CAAC;AAElE,eAAO,MAAM,wBAAwB,QAAO,0BAIxC,CAAC;AAEL,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
1
+ {"version":3,"file":"magneticPointsContext.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/Components/Point/pointContext/magneticPointsContext.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,QAAA,MAAO,wBAAwB;;;EAC+B,CAAC;AAE/D,QAAA,MAAO,wBAAwB;;;EAC+B,CAAC;AAE/D,eAAO,MAAM,mBAAmB,QAAO,qBAInC,CAAC;AAEL,eAAO,MAAM,mBAAmB,QAAO,qBAInC,CAAC;AAEL,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { DrawingArea } from '../../utils/types';
2
2
  import type { BaseAxisProps } from '../Axis';
3
3
  import { useRevealFadeProps } from '../CartesianChart/RevealAnimation';
4
- import type { MagneticPointsContextValue } from './pointContext/magneticPointsContext';
4
+ import type { MagneticRegistryValue } from './pointContext/magneticPointsContext';
5
5
  type Pixel = {
6
6
  x: number;
7
7
  y: number;
@@ -28,6 +28,6 @@ export declare const usePointGeometry: ({ dataX, dataY, magnetic, }: UsePointGeo
28
28
  * Registers/unregisters a data index as a magnetic snap target
29
29
  * when the Point has `magnetic` enabled.
30
30
  */
31
- export declare const useMagneticRegistration: (magnetic: boolean, dataX: number, getXAxisConfig: () => BaseAxisProps | undefined, { register, unregister }: MagneticPointsContextValue) => void;
31
+ export declare const useMagneticRegistration: (magnetic: boolean, dataX: number, getXAxisConfig: () => BaseAxisProps | undefined, { register, unregister }: MagneticRegistryValue) => void;
32
32
  export {};
33
33
  //# sourceMappingURL=usePointGeometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePointGeometry.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/Point/usePointGeometry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAGvF,KAAK,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACjD,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,6BAI9B,sBAAsB,KAAG,aAqB3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,OAAO,EACjB,OAAO,MAAM,EACb,gBAAgB,MAAM,aAAa,GAAG,SAAS,EAC/C,0BAA0B,0BAA0B,KACnD,IAQF,CAAC"}
1
+ {"version":3,"file":"usePointGeometry.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/Components/Point/usePointGeometry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,KAAK,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACjD,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,6BAI9B,sBAAsB,KAAG,aAqB3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,OAAO,EACjB,OAAO,MAAM,EACb,gBAAgB,MAAM,aAAa,GAAG,SAAS,EAC/C,0BAA0B,qBAAqB,KAC9C,IAQF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/lumen-ui-rnative-visualization",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "keywords": [
@@ -45,7 +45,7 @@
45
45
  "peerDependencies": {
46
46
  "@types/react": "^19.0.0",
47
47
  "@ledgerhq/lumen-design-core": "0.1.18",
48
- "@ledgerhq/lumen-ui-rnative": "0.1.46",
48
+ "@ledgerhq/lumen-ui-rnative": "0.1.47",
49
49
  "react": "^19.0.0",
50
50
  "react-native": "~0.81.6",
51
51
  "react-native-svg": "^15.0.0",
@@ -1,5 +1,5 @@
1
1
  import { useTheme } from '@ledgerhq/lumen-ui-rnative';
2
- import { useId, useMemo } from 'react';
2
+ import { useId, useMemo, memo } from 'react';
3
3
  import { Defs, G, LinearGradient, Path, Stop } from 'react-native-svg';
4
4
 
5
5
  import { isNumericScale } from '../../utils/scales/scales';
@@ -10,14 +10,14 @@ import { LINE_AREA_GRADIENT_OPACITY, LINE_STROKE_WIDTH } from './constants';
10
10
  import type { LineProps } from './types';
11
11
  import { buildAreaPath, buildLinePath, toScaledPoints } from './utils';
12
12
 
13
- export const Line = ({
13
+ export const Line = memo(function Line({
14
14
  seriesId,
15
15
  stroke,
16
16
  showArea = false,
17
17
  areaType: _areaType = 'gradient',
18
18
  curve,
19
19
  connectNulls,
20
- }: LineProps) => {
20
+ }: LineProps) {
21
21
  const { getXScale, getYScale, getXAxisConfig, drawingArea, seriesMap } =
22
22
  useCartesianChartContext();
23
23
  const clipPath = usePathReveal();
@@ -99,4 +99,4 @@ export const Line = ({
99
99
  />
100
100
  </G>
101
101
  );
102
- };
102
+ });
@@ -0,0 +1,101 @@
1
+ import { beforeEach, describe, expect, it } from '@jest/globals';
2
+ import { ledgerLiveThemes } from '@ledgerhq/lumen-design-core';
3
+ import { ThemeProvider } from '@ledgerhq/lumen-ui-rnative';
4
+ import { render } from '@testing-library/react-native';
5
+ import React, { Profiler } from 'react';
6
+ import type { ProfilerOnRenderCallback } from 'react';
7
+
8
+ import { Point } from '../Point';
9
+
10
+ import { LineChart } from './LineChart';
11
+
12
+ // Deterministic render budgets: assert on counts, never time, so CI never flakes.
13
+ // Native scrubbing is gesture/worklet driven and not simulable here, so the
14
+ // scrub re-render guard lives only in the React lib.
15
+
16
+ const POINT_COUNT = 24;
17
+
18
+ const buildData = (length: number): number[] =>
19
+ Array.from({ length }, (_, i) => (i % 9) + 1);
20
+
21
+ // Counts commits of the Point subtree itself (via React.Profiler) rather than a
22
+ // wrapper's renders. A wrapper counter sits above Point and never re-runs when a
23
+ // context Point consumes updates, so it would silently miss the version-cascade
24
+ // regression this budget guards against.
25
+ let pointMountCommits = 0;
26
+ let pointUpdateCommits = 0;
27
+ const onPointRender: ProfilerOnRenderCallback = (_id, phase) => {
28
+ if (phase === 'mount') {
29
+ pointMountCommits++;
30
+ } else {
31
+ pointUpdateCommits++;
32
+ }
33
+ };
34
+
35
+ const Wrapper = ({ children }: { children: React.ReactNode }) => (
36
+ <ThemeProvider themes={ledgerLiveThemes} colorScheme='light'>
37
+ {children}
38
+ </ThemeProvider>
39
+ );
40
+
41
+ beforeEach(() => {
42
+ pointMountCommits = 0;
43
+ pointUpdateCommits = 0;
44
+ });
45
+
46
+ describe('LineChart performance budgets', () => {
47
+ it('emits a bounded node count per point', () => {
48
+ const data = buildData(POINT_COUNT);
49
+
50
+ const { queryAllByTestId } = render(
51
+ <Wrapper>
52
+ <LineChart
53
+ series={[{ id: 's', stroke: '#000', data }]}
54
+ width={400}
55
+ height={200}
56
+ animate={false}
57
+ >
58
+ {data.map((value, index) => (
59
+ <Point key={index} dataX={index} dataY={value} />
60
+ ))}
61
+ </LineChart>
62
+ </Wrapper>,
63
+ );
64
+
65
+ const groups = queryAllByTestId('point-group');
66
+ const circles = queryAllByTestId('point-circle');
67
+ const arrows = queryAllByTestId('point-arrow');
68
+
69
+ expect(circles).toHaveLength(groups.length);
70
+ expect(arrows).toHaveLength(0);
71
+ expect(groups.length).toBeGreaterThan(0);
72
+ });
73
+
74
+ it('renders each magnetic point exactly once on mount (no version cascade)', () => {
75
+ const data = buildData(POINT_COUNT);
76
+
77
+ render(
78
+ <Wrapper>
79
+ <LineChart
80
+ series={[{ id: 's', stroke: '#000', data }]}
81
+ width={400}
82
+ height={200}
83
+ animate={false}
84
+ >
85
+ {data.map((value, index) => (
86
+ <Profiler
87
+ key={index}
88
+ id={`point-${index}`}
89
+ onRender={onPointRender}
90
+ >
91
+ <Point magnetic dataX={index} dataY={value} />
92
+ </Profiler>
93
+ ))}
94
+ </LineChart>
95
+ </Wrapper>,
96
+ );
97
+
98
+ expect(pointMountCommits).toBe(POINT_COUNT);
99
+ expect(pointUpdateCommits).toBe(0);
100
+ });
101
+ });
@@ -127,17 +127,24 @@ export const LineChart = ({
127
127
  emptyLabel = 'No data',
128
128
  connectNulls,
129
129
  }: Readonly<LineChartProps>) => {
130
- const xAxisConfig = {
131
- ...defaultXAxisProps,
132
- ...xAxis,
133
- position: xAxis?.position ?? defaultXAxisProps.position,
134
- };
135
- const yAxisConfig = {
136
- ...defaultYAxisProps,
137
- ...yAxis,
138
- position: yAxis?.position ?? defaultYAxisProps.position,
139
- width: yAxis?.width ?? defaultYAxisProps.width,
140
- };
130
+ const xAxisConfig = useMemo(
131
+ () => ({
132
+ ...defaultXAxisProps,
133
+ ...xAxis,
134
+ position: xAxis?.position ?? defaultXAxisProps.position,
135
+ }),
136
+ [xAxis],
137
+ );
138
+
139
+ const yAxisConfig = useMemo(
140
+ () => ({
141
+ ...defaultYAxisProps,
142
+ ...yAxis,
143
+ position: yAxis?.position ?? defaultYAxisProps.position,
144
+ width: yAxis?.width ?? defaultYAxisProps.width,
145
+ }),
146
+ [yAxis],
147
+ );
141
148
 
142
149
  const xAxisPosition = xAxisConfig.position;
143
150
  const yAxisPosition = yAxisConfig.position;
@@ -1,4 +1,6 @@
1
1
  import { useTheme } from '@ledgerhq/lumen-ui-rnative';
2
+
3
+ import { memo } from 'react';
2
4
  import Animated from 'react-native-reanimated';
3
5
  import { Circle, G, Polygon, Text as SvgText } from 'react-native-svg';
4
6
 
@@ -9,6 +11,7 @@ import type {
9
11
  PointMarkerProps,
10
12
  PointProps,
11
13
  } from './types';
14
+
12
15
  import { usePointGeometry } from './usePointGeometry';
13
16
  import { buildArrowPoints, computeLabelGeometry, resolveLabel } from './utils';
14
17
 
@@ -62,7 +65,7 @@ function PointArrow({ x, y, size, position }: Readonly<PointArrowProps>) {
62
65
  );
63
66
  }
64
67
 
65
- export function Point({
68
+ export const Point = memo(function Point({
66
69
  dataX,
67
70
  dataY,
68
71
  color,
@@ -127,4 +130,4 @@ export function Point({
127
130
  )}
128
131
  </AnimatedG>
129
132
  );
130
- }
133
+ });
@@ -2,13 +2,25 @@ import { describe, expect, it } from '@jest/globals';
2
2
  import { renderHook, act } from '@testing-library/react-native';
3
3
  import type { ReactNode } from 'react';
4
4
 
5
- import { useMagneticPointsContext } from './magneticPointsContext';
5
+ import {
6
+ useMagneticRegistry,
7
+ useMagneticSnapshot,
8
+ } from './magneticPointsContext';
6
9
  import { MagneticPointsProvider } from './MagneticPointsProvider';
7
10
 
8
11
  const wrapper = ({ children }: { children: ReactNode }) => (
9
12
  <MagneticPointsProvider>{children}</MagneticPointsProvider>
10
13
  );
11
14
 
15
+ /**
16
+ * Reads both split contexts so the existing assertions (register/unregister/
17
+ * getMagneticPoints/version) keep working against a single result object.
18
+ */
19
+ const useMagneticPointsContext = () => ({
20
+ ...useMagneticRegistry(),
21
+ ...useMagneticSnapshot(),
22
+ });
23
+
12
24
  describe('MagneticPointsProvider', () => {
13
25
  it('starts with an empty set', () => {
14
26
  const { result } = renderHook(() => useMagneticPointsContext(), {
@@ -2,8 +2,10 @@ import { useCallback, useMemo, useRef, useState } from 'react';
2
2
  import type { ReactNode } from 'react';
3
3
 
4
4
  import {
5
- MagneticPointsContextProvider,
6
- type MagneticPointsContextValue,
5
+ MagneticRegistryProvider,
6
+ MagneticSnapshotProvider,
7
+ type MagneticRegistryValue,
8
+ type MagneticSnapshotValue,
7
9
  } from './magneticPointsContext';
8
10
 
9
11
  type MagneticPointsProviderProps = {
@@ -32,14 +34,24 @@ export function MagneticPointsProvider({
32
34
  return pointsRef.current;
33
35
  }, []);
34
36
 
35
- const value: MagneticPointsContextValue = useMemo(
36
- () => ({ register, unregister, getMagneticPoints, version }),
37
- [register, unregister, getMagneticPoints, version],
37
+ // Stable identity for the provider's lifetime: `Point` consumers read this
38
+ // and therefore never re-render when the magnetic set changes.
39
+ const registry: MagneticRegistryValue = useMemo(
40
+ () => ({ register, unregister }),
41
+ [register, unregister],
42
+ );
43
+
44
+ // Changes on every register/unregister: consumed only by the scrubber.
45
+ const snapshot: MagneticSnapshotValue = useMemo(
46
+ () => ({ version, getMagneticPoints }),
47
+ [version, getMagneticPoints],
38
48
  );
39
49
 
40
50
  return (
41
- <MagneticPointsContextProvider value={value}>
42
- {children}
43
- </MagneticPointsContextProvider>
51
+ <MagneticRegistryProvider value={registry}>
52
+ <MagneticSnapshotProvider value={snapshot}>
53
+ {children}
54
+ </MagneticSnapshotProvider>
55
+ </MagneticRegistryProvider>
44
56
  );
45
57
  }
@@ -1,5 +1,7 @@
1
1
  export {
2
- useMagneticPointsContext,
3
- type MagneticPointsContextValue,
2
+ useMagneticRegistry,
3
+ useMagneticSnapshot,
4
+ type MagneticRegistryValue,
5
+ type MagneticSnapshotValue,
4
6
  } from './magneticPointsContext';
5
7
  export { MagneticPointsProvider } from './MagneticPointsProvider';
@@ -1,19 +1,41 @@
1
1
  import { createSafeContext } from '@ledgerhq/lumen-utils-shared';
2
2
 
3
- export type MagneticPointsContextValue = {
3
+ /**
4
+ * Stable registration API for magnetic points. Its identity never changes for
5
+ * the provider's lifetime, so consumers (every `Point`) do not re-render when
6
+ * the magnetic set changes — only when they mount/unmount.
7
+ */
8
+ export type MagneticRegistryValue = {
4
9
  register: (dataIndex: number) => void;
5
10
  unregister: (dataIndex: number) => void;
11
+ };
12
+
13
+ /**
14
+ * Mutable snapshot of the registered magnetic points. Changes on every
15
+ * register/unregister (via `version`) and is consumed only by the scrubber,
16
+ * which needs to recompute its snap targets when the set changes.
17
+ */
18
+ export type MagneticSnapshotValue = {
6
19
  version: number;
7
20
  getMagneticPoints: () => ReadonlySet<number>;
8
21
  };
9
22
 
10
- const [MagneticPointsContextProvider, _useMagneticPointsSafeContext] =
11
- createSafeContext<MagneticPointsContextValue>('MagneticPoints');
23
+ const [MagneticRegistryProvider, _useMagneticRegistrySafeContext] =
24
+ createSafeContext<MagneticRegistryValue>('MagneticRegistry');
25
+
26
+ const [MagneticSnapshotProvider, _useMagneticSnapshotSafeContext] =
27
+ createSafeContext<MagneticSnapshotValue>('MagneticSnapshot');
28
+
29
+ export const useMagneticRegistry = (): MagneticRegistryValue =>
30
+ _useMagneticRegistrySafeContext({
31
+ consumerName: 'useMagneticRegistry',
32
+ contextRequired: true,
33
+ });
12
34
 
13
- export const useMagneticPointsContext = (): MagneticPointsContextValue =>
14
- _useMagneticPointsSafeContext({
15
- consumerName: 'useMagneticPointsContext',
35
+ export const useMagneticSnapshot = (): MagneticSnapshotValue =>
36
+ _useMagneticSnapshotSafeContext({
37
+ consumerName: 'useMagneticSnapshot',
16
38
  contextRequired: true,
17
39
  });
18
40
 
19
- export { MagneticPointsContextProvider };
41
+ export { MagneticRegistryProvider, MagneticSnapshotProvider };
@@ -5,8 +5,8 @@ import type { DrawingArea } from '../../utils/types';
5
5
  import type { BaseAxisProps } from '../Axis';
6
6
  import { useCartesianChartContext } from '../CartesianChart/context';
7
7
  import { useRevealFadeProps } from '../CartesianChart/RevealAnimation';
8
- import { useMagneticPointsContext } from './pointContext';
9
- import type { MagneticPointsContextValue } from './pointContext/magneticPointsContext';
8
+ import { useMagneticRegistry } from './pointContext';
9
+ import type { MagneticRegistryValue } from './pointContext/magneticPointsContext';
10
10
  import { isWithinBounds, resolveDataXToIndex } from './utils';
11
11
 
12
12
  type Pixel = { x: number; y: number };
@@ -37,9 +37,9 @@ export const usePointGeometry = ({
37
37
  }: UsePointGeometryParams): PointGeometry => {
38
38
  const { getXScale, getYScale, getXAxisConfig, drawingArea } =
39
39
  useCartesianChartContext();
40
- const magneticContext = useMagneticPointsContext();
40
+ const magneticRegistry = useMagneticRegistry();
41
41
 
42
- useMagneticRegistration(magnetic, dataX, getXAxisConfig, magneticContext);
42
+ useMagneticRegistration(magnetic, dataX, getXAxisConfig, magneticRegistry);
43
43
 
44
44
  const xScale = getXScale();
45
45
  const yScale = getYScale();
@@ -65,7 +65,7 @@ export const useMagneticRegistration = (
65
65
  magnetic: boolean,
66
66
  dataX: number,
67
67
  getXAxisConfig: () => BaseAxisProps | undefined,
68
- { register, unregister }: MagneticPointsContextValue,
68
+ { register, unregister }: MagneticRegistryValue,
69
69
  ): void => {
70
70
  useEffect(() => {
71
71
  if (!magnetic) return;
@@ -7,7 +7,7 @@ import { scheduleOnRN } from 'react-native-worklets';
7
7
 
8
8
  import { clamp } from '../../utils/numbers';
9
9
  import { useCartesianChartContext } from '../CartesianChart/context';
10
- import { useMagneticPointsContext } from '../Point/pointContext';
10
+ import { useMagneticSnapshot } from '../Point/pointContext';
11
11
  import { ScrubberContextProvider } from './context';
12
12
  import type { ScrubberProviderProps } from './types';
13
13
  import {
@@ -46,7 +46,7 @@ export function ScrubberProvider({
46
46
  >();
47
47
 
48
48
  const { getXScale, getXAxisConfig, dataLength } = useCartesianChartContext();
49
- const { getMagneticPoints, version } = useMagneticPointsContext();
49
+ const { getMagneticPoints, version } = useMagneticSnapshot();
50
50
 
51
51
  // All values touched by the gesture's JS-thread callback live in a single
52
52
  // ref. Reading via `latest.current` keeps the callbacks reference-stable