@ledgerhq/lumen-ui-rnative-visualization 0.1.13 → 0.1.14

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 (51) hide show
  1. package/dist/module/lib/Components/CartesianChart/CartesianChart.js.map +1 -1
  2. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.js +52 -0
  3. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.js.map +1 -0
  4. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.js +81 -0
  5. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.js.map +1 -0
  6. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.test.js +340 -0
  7. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.test.js.map +1 -0
  8. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/constants.js +12 -0
  9. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/constants.js.map +1 -0
  10. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/utils.js +145 -0
  11. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/utils.js.map +1 -0
  12. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/utils.test.js +253 -0
  13. package/dist/module/lib/Components/Scrubber/DefaultScrubberTooltip/utils.test.js.map +1 -0
  14. package/dist/module/lib/Components/Scrubber/Scrubber.js +40 -21
  15. package/dist/module/lib/Components/Scrubber/Scrubber.js.map +1 -1
  16. package/dist/module/lib/Components/Scrubber/Scrubber.stories.js +80 -30
  17. package/dist/module/lib/Components/Scrubber/Scrubber.stories.js.map +1 -1
  18. package/dist/module/lib/Components/Scrubber/Scrubber.test.js +10 -5
  19. package/dist/module/lib/Components/Scrubber/Scrubber.test.js.map +1 -1
  20. package/dist/module/lib/Components/Scrubber/ScrubberProvider.js +51 -27
  21. package/dist/module/lib/Components/Scrubber/ScrubberProvider.js.map +1 -1
  22. package/dist/typescript/src/lib/Components/CartesianChart/CartesianChart.d.ts.map +1 -1
  23. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.d.ts +9 -0
  24. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.d.ts.map +1 -0
  25. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.d.ts +12 -0
  26. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.d.ts.map +1 -0
  27. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/constants.d.ts +10 -0
  28. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/constants.d.ts.map +1 -0
  29. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.d.ts +65 -0
  30. package/dist/typescript/src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.d.ts.map +1 -0
  31. package/dist/typescript/src/lib/Components/Scrubber/Scrubber.d.ts +14 -2
  32. package/dist/typescript/src/lib/Components/Scrubber/Scrubber.d.ts.map +1 -1
  33. package/dist/typescript/src/lib/Components/Scrubber/ScrubberProvider.d.ts.map +1 -1
  34. package/dist/typescript/src/lib/Components/Scrubber/index.d.ts +1 -1
  35. package/dist/typescript/src/lib/Components/Scrubber/index.d.ts.map +1 -1
  36. package/dist/typescript/src/lib/Components/Scrubber/types.d.ts +103 -4
  37. package/dist/typescript/src/lib/Components/Scrubber/types.d.ts.map +1 -1
  38. package/package.json +4 -4
  39. package/src/lib/Components/CartesianChart/CartesianChart.tsx +0 -1
  40. package/src/lib/Components/Scrubber/DefaultScrubberTooltip/ChartTooltipItem.tsx +54 -0
  41. package/src/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.test.tsx +259 -0
  42. package/src/lib/Components/Scrubber/DefaultScrubberTooltip/DefaultScrubberTooltip.tsx +105 -0
  43. package/src/lib/Components/Scrubber/DefaultScrubberTooltip/constants.ts +9 -0
  44. package/src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.test.ts +264 -0
  45. package/src/lib/Components/Scrubber/DefaultScrubberTooltip/utils.ts +229 -0
  46. package/src/lib/Components/Scrubber/Scrubber.stories.tsx +104 -42
  47. package/src/lib/Components/Scrubber/Scrubber.test.tsx +7 -5
  48. package/src/lib/Components/Scrubber/Scrubber.tsx +47 -24
  49. package/src/lib/Components/Scrubber/ScrubberProvider.tsx +56 -28
  50. package/src/lib/Components/Scrubber/index.ts +10 -1
  51. package/src/lib/Components/Scrubber/types.ts +109 -4
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
+ import { LABEL_VALUE_GAP, PADDING_X, PADDING_Y, ROW_GAP, ROW_HEIGHT, TITLE_GAP } from "./constants.js";
5
+ export const safeGetBBoxWidth = async el => {
6
+ if (!el) return 0;
7
+ try {
8
+ const result = await el.getBBox();
9
+ return result?.width ?? 0;
10
+ } catch {
11
+ return 0;
12
+ }
13
+ };
14
+
15
+ /**
16
+ * Derive the auto-fit tooltip width from measured text widths,
17
+ * clamped to a minimum floor.
18
+ */
19
+ export const computeTooltipWidth = (widths, hasTitle, minWidth) => {
20
+ const titleWidth = widths && hasTitle ? widths.title : 0;
21
+ const rowWidths = widths ? widths.labels.map((lw, i) => lw + LABEL_VALUE_GAP + (widths.values[i] ?? 0)) : [];
22
+ const contentWidth = Math.max(titleWidth, ...rowWidths);
23
+ const fitWidth = contentWidth + PADDING_X * 2;
24
+ return Math.max(fitWidth, minWidth);
25
+ };
26
+
27
+ /**
28
+ * Compute the tooltip's horizontal position, flipping to the left
29
+ * of the scrubber line when it would overflow the drawing area.
30
+ * Also clamps from above to prevent overflow on the right edge.
31
+ */
32
+ export const computeTooltipX = (pixelX, offset, tooltipWidth, drawingArea) => {
33
+ const shouldFlip = pixelX + offset + tooltipWidth > drawingArea.x + drawingArea.width;
34
+ const preferredTooltipX = shouldFlip ? pixelX - offset - tooltipWidth : pixelX + offset;
35
+ const maxTooltipX = Math.max(drawingArea.x, drawingArea.x + drawingArea.width - tooltipWidth);
36
+ return Math.min(maxTooltipX, Math.max(drawingArea.x, preferredTooltipX));
37
+ };
38
+
39
+ /**
40
+ * Compute the total tooltip height from item count and title presence.
41
+ */
42
+ export const computeTooltipHeight = (itemCount, hasTitle) => {
43
+ const titleBlockHeight = hasTitle ? ROW_HEIGHT + TITLE_GAP : 0;
44
+ return PADDING_Y * 2 + titleBlockHeight + itemCount * ROW_HEIGHT + (itemCount - 1) * ROW_GAP;
45
+ };
46
+
47
+ /**
48
+ * Vertical offset where tooltip rows begin, accounting for title presence.
49
+ */
50
+ export const computeItemsBaseY = (drawingAreaY, hasTitle) => {
51
+ const titleBlockHeight = hasTitle ? ROW_HEIGHT + TITLE_GAP : 0;
52
+ return drawingAreaY + PADDING_Y + titleBlockHeight;
53
+ };
54
+ const waitForAnimationFrame = () => new Promise(resolve => requestAnimationFrame(() => resolve()));
55
+
56
+ /**
57
+ * Reads the rendered widths of all tooltip text elements via async `getBBox`.
58
+ * Defers until the next animation frame so layout has settled.
59
+ */
60
+ export const measureWidths = async (items, hasTitle, titleRef, labelRefs, valueRefs) => {
61
+ await waitForAnimationFrame();
62
+ const title = hasTitle ? await safeGetBBoxWidth(titleRef.current) : 0;
63
+ const labels = await Promise.all(items.map((_, i) => safeGetBBoxWidth(labelRefs.current[i])));
64
+ const values = await Promise.all(items.map((_, i) => safeGetBBoxWidth(valueRefs.current[i])));
65
+ return {
66
+ title,
67
+ labels,
68
+ values
69
+ };
70
+ };
71
+
72
+ /**
73
+ * Builds a stable string signature for the tooltip's content shape (labels,
74
+ * title, and item count). Used as the sole dependency of the measurement
75
+ * effect so re-measurement only happens when something that can change the
76
+ * tooltip's natural width actually changes — typically once per shape change,
77
+ * not on every scrub frame as value strings update.
78
+ */
79
+ const computeShapeSignature = (items, hasTitle, title) => {
80
+ let labels = '';
81
+ for (let i = 0; i < items.length; i++) {
82
+ if (i > 0) labels += '\u001F';
83
+ labels += String(items[i].label);
84
+ }
85
+ return `${hasTitle ? '1' : '0'}|${labels}|${title ?? ''}`;
86
+ };
87
+
88
+ /**
89
+ * Manages SVG text measurement for the tooltip via async `getBBox`.
90
+ *
91
+ * Uses `requestAnimationFrame` to defer measurement until after layout, with a
92
+ * cancellation flag to prevent stale state updates when items change rapidly.
93
+ *
94
+ * The effect's dependency is a shape signature (labels + title + count) rather
95
+ * than the raw `items` reference, so high-frequency value updates during a
96
+ * scrub do not trigger a fresh measurement chain. Value-width auto-fit is
97
+ * handled by `minWidth`; consumers that need pixel-perfect value fitting
98
+ * should set a `minWidth` large enough to cover the widest value.
99
+ */
100
+ export function useTooltipMeasurement(items, hasTitle, title) {
101
+ const titleRef = useRef(null);
102
+ const labelRefs = useRef([]);
103
+ const valueRefs = useRef([]);
104
+ const [widths, setWidths] = useState(null);
105
+ const shapeKey = computeShapeSignature(items, hasTitle, title);
106
+ const itemsRef = useRef(items);
107
+ itemsRef.current = items;
108
+ const hasTitleRef = useRef(hasTitle);
109
+ hasTitleRef.current = hasTitle;
110
+ useEffect(() => {
111
+ if (itemsRef.current.length === 0) return;
112
+ let cancelled = false;
113
+ void measureWidths(itemsRef.current, hasTitleRef.current, titleRef, labelRefs, valueRefs).then(result => {
114
+ if (!cancelled) setWidths(result);
115
+ });
116
+ return () => {
117
+ cancelled = true;
118
+ };
119
+ }, [shapeKey]);
120
+ return {
121
+ widths,
122
+ titleRef,
123
+ labelRefs,
124
+ valueRefs
125
+ };
126
+ }
127
+ /**
128
+ * Builds stable per-index ref-callback arrays that mutate the given refs in
129
+ * place. Recomputed only when `length` changes, so the same callback identity
130
+ * is passed to each `ChartTooltipItem` across scrub frames. This unlocks
131
+ * `React.memo` on `ChartTooltipItem` and avoids the per-frame detach /
132
+ * re-attach dance of inline arrow ref callbacks.
133
+ */
134
+ export const useBuildRefSetters = (refs, length) => {
135
+ return useMemo(() => {
136
+ const setters = new Array(length);
137
+ for (let i = 0; i < length; i++) {
138
+ setters[i] = el => {
139
+ refs.current[i] = el;
140
+ };
141
+ }
142
+ return setters;
143
+ }, [refs, length]);
144
+ };
145
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useMemo","useRef","useState","LABEL_VALUE_GAP","PADDING_X","PADDING_Y","ROW_GAP","ROW_HEIGHT","TITLE_GAP","safeGetBBoxWidth","el","result","getBBox","width","computeTooltipWidth","widths","hasTitle","minWidth","titleWidth","title","rowWidths","labels","map","lw","i","values","contentWidth","Math","max","fitWidth","computeTooltipX","pixelX","offset","tooltipWidth","drawingArea","shouldFlip","x","preferredTooltipX","maxTooltipX","min","computeTooltipHeight","itemCount","titleBlockHeight","computeItemsBaseY","drawingAreaY","waitForAnimationFrame","Promise","resolve","requestAnimationFrame","measureWidths","items","titleRef","labelRefs","valueRefs","current","all","_","computeShapeSignature","length","String","label","useTooltipMeasurement","setWidths","shapeKey","itemsRef","hasTitleRef","cancelled","then","useBuildRefSetters","refs","setters","Array"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Scrubber/DefaultScrubberTooltip/utils.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+
3
+ import { describe, expect, it, jest } from '@jest/globals';
4
+ import { LABEL_VALUE_GAP, PADDING_X, PADDING_Y, ROW_GAP, ROW_HEIGHT, TITLE_GAP } from "./constants.js";
5
+ import { computeItemsBaseY, computeTooltipHeight, computeTooltipWidth, computeTooltipX, measureWidths, safeGetBBoxWidth } from "./utils.js";
6
+ describe('safeGetBBoxWidth', () => {
7
+ it('returns 0 for null', async () => {
8
+ expect(await safeGetBBoxWidth(null)).toBe(0);
9
+ });
10
+ it('returns the width from getBBox', async () => {
11
+ const el = {
12
+ getBBox: async () => ({
13
+ width: 42
14
+ })
15
+ };
16
+ expect(await safeGetBBoxWidth(el)).toBe(42);
17
+ });
18
+ it('returns 0 when getBBox resolves to undefined', async () => {
19
+ const el = {
20
+ getBBox: async () => undefined
21
+ };
22
+ expect(await safeGetBBoxWidth(el)).toBe(0);
23
+ });
24
+ it('returns 0 when getBBox throws', async () => {
25
+ const el = {
26
+ getBBox: async () => {
27
+ throw new Error('not supported');
28
+ }
29
+ };
30
+ expect(await safeGetBBoxWidth(el)).toBe(0);
31
+ });
32
+ });
33
+ describe('computeTooltipWidth', () => {
34
+ it('returns minWidth when widths is null', () => {
35
+ expect(computeTooltipWidth(null, false, 80)).toBe(80);
36
+ });
37
+ it('returns minWidth when computed fit is smaller', () => {
38
+ const widths = {
39
+ title: 0,
40
+ labels: [10],
41
+ values: [10]
42
+ };
43
+ const fitWidth = 10 + LABEL_VALUE_GAP + 10 + PADDING_X * 2;
44
+ expect(computeTooltipWidth(widths, false, fitWidth + 50)).toBe(fitWidth + 50);
45
+ });
46
+ it('returns fit width when it exceeds minWidth', () => {
47
+ const widths = {
48
+ title: 0,
49
+ labels: [200],
50
+ values: [200]
51
+ };
52
+ const expected = 200 + LABEL_VALUE_GAP + 200 + PADDING_X * 2;
53
+ expect(computeTooltipWidth(widths, false, 80)).toBe(expected);
54
+ });
55
+ it('accounts for title width when hasTitle is true', () => {
56
+ const widths = {
57
+ title: 300,
58
+ labels: [10],
59
+ values: [10]
60
+ };
61
+ const expected = 300 + PADDING_X * 2;
62
+ expect(computeTooltipWidth(widths, true, 80)).toBe(expected);
63
+ });
64
+ it('ignores title width when hasTitle is false', () => {
65
+ const widths = {
66
+ title: 300,
67
+ labels: [10],
68
+ values: [10]
69
+ };
70
+ const rowFit = 10 + LABEL_VALUE_GAP + 10 + PADDING_X * 2;
71
+ expect(computeTooltipWidth(widths, false, 40)).toBe(rowFit);
72
+ expect(computeTooltipWidth(widths, false, 80)).toBe(80);
73
+ });
74
+ it('uses the widest row when multiple items are present', () => {
75
+ const widths = {
76
+ title: 0,
77
+ labels: [10, 50],
78
+ values: [10, 50]
79
+ };
80
+ const widestRow = 50 + LABEL_VALUE_GAP + 50;
81
+ const expected = widestRow + PADDING_X * 2;
82
+ expect(computeTooltipWidth(widths, false, 80)).toBe(expected);
83
+ });
84
+ });
85
+ describe('computeTooltipX', () => {
86
+ const drawingArea = {
87
+ x: 0,
88
+ y: 0,
89
+ width: 400,
90
+ height: 200
91
+ };
92
+ it('places tooltip to the right when there is enough space', () => {
93
+ expect(computeTooltipX(100, 10, 80, drawingArea)).toBe(110);
94
+ });
95
+ it('flips to the left when placing right would overflow', () => {
96
+ expect(computeTooltipX(350, 10, 80, drawingArea)).toBe(260);
97
+ });
98
+ it('clamps to drawingArea.x when flipped position is negative', () => {
99
+ expect(computeTooltipX(195, 10, 200, drawingArea)).toBe(0);
100
+ });
101
+ it('clamps the right-side position to not overflow the right edge', () => {
102
+ expect(computeTooltipX(100, 10, 400, drawingArea)).toBe(0);
103
+ });
104
+ it('respects a non-zero drawingArea.x as the minimum clamp', () => {
105
+ const area = {
106
+ x: 20,
107
+ y: 0,
108
+ width: 400,
109
+ height: 200
110
+ };
111
+ expect(computeTooltipX(5, 10, 200, area)).toBe(20);
112
+ });
113
+ it('respects a custom offset', () => {
114
+ expect(computeTooltipX(100, 20, 80, drawingArea)).toBe(120);
115
+ });
116
+ });
117
+ describe('computeTooltipHeight', () => {
118
+ it('computes height for a single item without a title', () => {
119
+ const expected = PADDING_Y * 2 + ROW_HEIGHT;
120
+ expect(computeTooltipHeight(1, false)).toBe(expected);
121
+ });
122
+ it('adds the title block height when hasTitle is true', () => {
123
+ const titleBlockHeight = ROW_HEIGHT + TITLE_GAP;
124
+ const expected = PADDING_Y * 2 + titleBlockHeight + ROW_HEIGHT;
125
+ expect(computeTooltipHeight(1, true)).toBe(expected);
126
+ });
127
+ it('adds row gaps for multiple items', () => {
128
+ const itemCount = 3;
129
+ const expected = PADDING_Y * 2 + itemCount * ROW_HEIGHT + (itemCount - 1) * ROW_GAP;
130
+ expect(computeTooltipHeight(itemCount, false)).toBe(expected);
131
+ });
132
+ it('combines title block and row gaps correctly', () => {
133
+ const itemCount = 2;
134
+ const titleBlockHeight = ROW_HEIGHT + TITLE_GAP;
135
+ const expected = PADDING_Y * 2 + titleBlockHeight + itemCount * ROW_HEIGHT + (itemCount - 1) * ROW_GAP;
136
+ expect(computeTooltipHeight(itemCount, true)).toBe(expected);
137
+ });
138
+ });
139
+ describe('computeItemsBaseY', () => {
140
+ it('returns drawingAreaY + PADDING_Y when there is no title', () => {
141
+ expect(computeItemsBaseY(10, false)).toBe(10 + PADDING_Y);
142
+ });
143
+ it('adds the title block height when hasTitle is true', () => {
144
+ const titleBlockHeight = ROW_HEIGHT + TITLE_GAP;
145
+ expect(computeItemsBaseY(10, true)).toBe(10 + PADDING_Y + titleBlockHeight);
146
+ });
147
+ it('handles drawingAreaY of 0', () => {
148
+ expect(computeItemsBaseY(0, false)).toBe(PADDING_Y);
149
+ });
150
+ });
151
+ describe('measureWidths', () => {
152
+ const makeBBoxEl = width => ({
153
+ getBBox: jest.fn(async () => ({
154
+ width
155
+ }))
156
+ });
157
+ const makeRaf = () => jest.spyOn(global, 'requestAnimationFrame').mockImplementation(cb => {
158
+ cb(0);
159
+ return 0;
160
+ });
161
+ it('measures title, label and value widths after a RAF tick', async () => {
162
+ const raf = makeRaf();
163
+ const titleEl = makeBBoxEl(50);
164
+ const labelEl = makeBBoxEl(30);
165
+ const valueEl = makeBBoxEl(20);
166
+ const items = [{
167
+ label: 'L',
168
+ value: 'V'
169
+ }];
170
+ const titleRef = {
171
+ current: titleEl
172
+ };
173
+ const labelRefs = {
174
+ current: [labelEl]
175
+ };
176
+ const valueRefs = {
177
+ current: [valueEl]
178
+ };
179
+ const result = await measureWidths(items, true, titleRef, labelRefs, valueRefs);
180
+ expect(result).toEqual({
181
+ title: 50,
182
+ labels: [30],
183
+ values: [20]
184
+ });
185
+ raf.mockRestore();
186
+ });
187
+ it('returns 0 for the title when hasTitle is false', async () => {
188
+ const raf = makeRaf();
189
+ const items = [{
190
+ label: 'L',
191
+ value: 'V'
192
+ }];
193
+ const titleRef = {
194
+ current: makeBBoxEl(99)
195
+ };
196
+ const labelRefs = {
197
+ current: [makeBBoxEl(10)]
198
+ };
199
+ const valueRefs = {
200
+ current: [makeBBoxEl(10)]
201
+ };
202
+ const result = await measureWidths(items, false, titleRef, labelRefs, valueRefs);
203
+ expect(result.title).toBe(0);
204
+ raf.mockRestore();
205
+ });
206
+ it('measures multiple items', async () => {
207
+ const raf = makeRaf();
208
+ const items = [{
209
+ label: 'A',
210
+ value: '1'
211
+ }, {
212
+ label: 'B',
213
+ value: '2'
214
+ }];
215
+ const titleRef = {
216
+ current: null
217
+ };
218
+ const labelRefs = {
219
+ current: [makeBBoxEl(10), makeBBoxEl(20)]
220
+ };
221
+ const valueRefs = {
222
+ current: [makeBBoxEl(5), makeBBoxEl(15)]
223
+ };
224
+ const result = await measureWidths(items, false, titleRef, labelRefs, valueRefs);
225
+ expect(result.labels).toEqual([10, 20]);
226
+ expect(result.values).toEqual([5, 15]);
227
+ raf.mockRestore();
228
+ });
229
+ it('returns 0 for null refs', async () => {
230
+ const raf = makeRaf();
231
+ const items = [{
232
+ label: 'L',
233
+ value: 'V'
234
+ }];
235
+ const titleRef = {
236
+ current: null
237
+ };
238
+ const labelRefs = {
239
+ current: [null]
240
+ };
241
+ const valueRefs = {
242
+ current: [null]
243
+ };
244
+ const result = await measureWidths(items, true, titleRef, labelRefs, valueRefs);
245
+ expect(result).toEqual({
246
+ title: 0,
247
+ labels: [0],
248
+ values: [0]
249
+ });
250
+ raf.mockRestore();
251
+ });
252
+ });
253
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","jest","LABEL_VALUE_GAP","PADDING_X","PADDING_Y","ROW_GAP","ROW_HEIGHT","TITLE_GAP","computeItemsBaseY","computeTooltipHeight","computeTooltipWidth","computeTooltipX","measureWidths","safeGetBBoxWidth","toBe","el","getBBox","width","undefined","Error","widths","title","labels","values","fitWidth","expected","rowFit","widestRow","drawingArea","x","y","height","area","titleBlockHeight","itemCount","makeBBoxEl","fn","makeRaf","spyOn","global","mockImplementation","cb","raf","titleEl","labelEl","valueEl","items","label","value","titleRef","current","labelRefs","valueRefs","result","toEqual","mockRestore"],"sourceRoot":"../../../../../../src","sources":["lib/Components/Scrubber/DefaultScrubberTooltip/utils.test.ts"],"mappings":"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","ignoreList":[]}
@@ -2,15 +2,17 @@
2
2
 
3
3
  import { useTheme } from '@ledgerhq/lumen-ui-rnative';
4
4
  import { useId, useMemo } from 'react';
5
- import { Circle, Defs, G, Line, LinearGradient, Rect, Stop, Text as SvgText } from 'react-native-svg';
5
+ import { Circle, Defs, G, Line, LinearGradient, Rect, Stop } from 'react-native-svg';
6
6
  import { useCartesianChartContext } from "../CartesianChart/context/index.js";
7
- import { BEACON_RADIUS, BEACON_STROKE_WIDTH, LABEL_OFFSET_Y, LINE_GRADIENT_EDGE_OPACITY, OVERLAY_LINE_INSET, OVERLAY_OFFSET, OVERLAY_OPACITY } from "./constants.js";
7
+ import { BEACON_RADIUS, BEACON_STROKE_WIDTH, LINE_GRADIENT_EDGE_OPACITY, OVERLAY_LINE_INSET, OVERLAY_OFFSET, OVERLAY_OPACITY } from "./constants.js";
8
8
  import { useScrubberContext } from "./context/index.js";
9
+ import { DefaultScrubberTooltip } from "./DefaultScrubberTooltip/DefaultScrubberTooltip.js";
9
10
  import { resolvePixelX, resolvePixelY } from "./utils.js";
10
11
 
11
12
  /**
12
13
  * Renders the scrubber visuals: vertical reference line, future-data overlay
13
- * rect, per-series beacon dots, and an optional formatted label above the line.
14
+ * rect, per-series beacon dots, optional label above the line, and an optional
15
+ * tooltip when {@link ScrubberProps.tooltip} is set, using {@link DefaultScrubberTooltip}.
14
16
  *
15
17
  * Must be used as a child of `LineChart` (or `CartesianChart`) with
16
18
  * `enableScrubbing` enabled. Renders nothing when no scrubber position is active.
@@ -21,13 +23,24 @@ import { resolvePixelX, resolvePixelY } from "./utils.js";
21
23
  * <Scrubber label={(i) => data[i].date} />
22
24
  * </LineChart>
23
25
  * ```
26
+ *
27
+ * @example Tooltip
28
+ * ```tsx
29
+ * <Scrubber
30
+ * tooltip={(i) => ({
31
+ * title: `${counts[i]} Transactions`,
32
+ * items: [{ label: 'Index', value: String(i) }],
33
+ * minWidth: 160,
34
+ * })}
35
+ * />
36
+ * ```
24
37
  */
25
38
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
26
39
  export function Scrubber({
27
- label,
28
40
  hideLine = false,
29
41
  hideOverlay = false,
30
- showBeacons = false
42
+ showBeacons = false,
43
+ tooltip
31
44
  }) {
32
45
  const lineGradientId = useId();
33
46
  const {
@@ -61,10 +74,20 @@ export function Scrubber({
61
74
  };
62
75
  }).filter(b => b !== null);
63
76
  }, [scrubberPosition, showBeacons, series, seriesMap, getYScale]);
64
- const resolvedLabel = useMemo(() => {
65
- if (scrubberPosition === undefined || !label) return undefined;
66
- return label(scrubberPosition);
67
- }, [scrubberPosition, label]);
77
+ const tooltipPayload = useMemo(() => {
78
+ if (scrubberPosition === undefined || !tooltip) {
79
+ return undefined;
80
+ }
81
+ const content = tooltip(scrubberPosition);
82
+ if (content.items.length === 0) return undefined;
83
+ const resolvedTitle = typeof content.title === 'function' ? content.title(scrubberPosition) : content.title;
84
+ return {
85
+ items: content.items,
86
+ resolvedTitle,
87
+ offset: content.offset,
88
+ minWidth: content.minWidth
89
+ };
90
+ }, [scrubberPosition, tooltip]);
68
91
  if (scrubberPosition === undefined || pixelX === undefined) {
69
92
  return null;
70
93
  }
@@ -80,7 +103,6 @@ export function Scrubber({
80
103
  const overlayHeight = drawHeight + OVERLAY_OFFSET * 2;
81
104
  const borderMutedColor = theme.colors.border.base;
82
105
  const backgroundBaseColor = theme.colors.bg.base;
83
- const textBaseColor = theme.colors.text.base;
84
106
  const bgCanvasColor = theme.colors.bg.canvas;
85
107
  return /*#__PURE__*/_jsxs(G, {
86
108
  testID: "scrubber",
@@ -128,16 +150,6 @@ export function Scrubber({
128
150
  height: overlayHeight,
129
151
  fill: backgroundBaseColor,
130
152
  opacity: OVERLAY_OPACITY
131
- }), resolvedLabel !== undefined && /*#__PURE__*/_jsx(SvgText, {
132
- testID: "scrubber-label",
133
- x: pixelX,
134
- y: drawY - LABEL_OFFSET_Y,
135
- textAnchor: "middle",
136
- fill: textBaseColor,
137
- fontSize: theme.typographies.body4.fontSize,
138
- fontWeight: theme.typographies.body4.fontWeight,
139
- fontFamily: theme.fontFamilies.sans,
140
- children: resolvedLabel
141
153
  }), showBeacons && beacons.map(beacon => /*#__PURE__*/_jsx(Circle, {
142
154
  testID: `scrubber-beacon-${beacon.id}`,
143
155
  cx: pixelX,
@@ -146,7 +158,14 @@ export function Scrubber({
146
158
  fill: beacon.stroke,
147
159
  stroke: bgCanvasColor,
148
160
  strokeWidth: BEACON_STROKE_WIDTH
149
- }, beacon.id))]
161
+ }, beacon.id)), tooltipPayload !== undefined && /*#__PURE__*/_jsx(DefaultScrubberTooltip, {
162
+ pixelX: pixelX,
163
+ drawingArea: drawingArea,
164
+ title: tooltipPayload.resolvedTitle,
165
+ items: tooltipPayload.items,
166
+ offset: tooltipPayload.offset,
167
+ minWidth: tooltipPayload.minWidth
168
+ })]
150
169
  });
151
170
  }
152
171
  //# sourceMappingURL=Scrubber.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useTheme","useId","useMemo","Circle","Defs","G","Line","LinearGradient","Rect","Stop","Text","SvgText","useCartesianChartContext","BEACON_RADIUS","BEACON_STROKE_WIDTH","LABEL_OFFSET_Y","LINE_GRADIENT_EDGE_OPACITY","OVERLAY_LINE_INSET","OVERLAY_OFFSET","OVERLAY_OPACITY","useScrubberContext","resolvePixelX","resolvePixelY","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Scrubber","label","hideLine","hideOverlay","showBeacons","lineGradientId","theme","scrubberPosition","getXScale","getXAxisConfig","getYScale","drawingArea","series","seriesMap","pixelX","undefined","beacons","map","s","seriesData","get","id","data","pixelY","stroke","filter","b","resolvedLabel","x","drawX","y","drawY","width","drawWidth","height","drawHeight","overlayX","overlayY","overlayWidth","Math","max","overlayHeight","borderMutedColor","colors","border","base","backgroundBaseColor","bg","textBaseColor","text","bgCanvasColor","canvas","testID","children","gradientUnits","x1","y1","x2","y2","offset","stopColor","stopOpacity","strokeWidth","fill","opacity","textAnchor","fontSize","typographies","body4","fontWeight","fontFamily","fontFamilies","sans","beacon","cx","cy","r"],"sourceRoot":"../../../../../src","sources":["lib/Components/Scrubber/Scrubber.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,4BAA4B;AACrD,SAASC,KAAK,EAAEC,OAAO,QAAQ,OAAO;AACtC,SACEC,MAAM,EACNC,IAAI,EACJC,CAAC,EACDC,IAAI,EACJC,cAAc,EACdC,IAAI,EACJC,IAAI,EACJC,IAAI,IAAIC,OAAO,QACV,kBAAkB;AAEzB,SAASC,wBAAwB,QAAQ,oCAA2B;AACpE,SACEC,aAAa,EACbC,mBAAmB,EACnBC,cAAc,EACdC,0BAA0B,EAC1BC,kBAAkB,EAClBC,cAAc,EACdC,eAAe,QACV,gBAAa;AACpB,SAASC,kBAAkB,QAAQ,oBAAW;AAE9C,SAASC,aAAa,EAAEC,aAAa,QAAQ,YAAS;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAbA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAcA,OAAO,SAASC,QAAQA,CAAC;EACvBC,KAAK;EACLC,QAAQ,GAAG,KAAK;EAChBC,WAAW,GAAG,KAAK;EACnBC,WAAW,GAAG;AACS,CAAC,EAAE;EAC1B,MAAMC,cAAc,GAAGjC,KAAK,CAAC,CAAC;EAC9B,MAAM;IAAEkC;EAAM,CAAC,GAAGnC,QAAQ,CAAC,CAAC;EAC5B,MAAM;IAAEoC;EAAiB,CAAC,GAAGhB,kBAAkB,CAAC,CAAC;EACjD,MAAM;IACJiB,SAAS;IACTC,cAAc;IACdC,SAAS;IACTC,WAAW;IACXC,MAAM;IACNC;EACF,CAAC,GAAG9B,wBAAwB,CAAC,CAAC;EAE9B,MAAM+B,MAAM,GAAGzC,OAAO,CAAC,MAAM;IAC3B,IAAIkC,gBAAgB,KAAKQ,SAAS,EAAE,OAAOA,SAAS;IACpD,OAAOvB,aAAa,CAACe,gBAAgB,EAAEC,SAAS,EAAEC,cAAc,CAAC,CAAC,CAAC;EACrE,CAAC,EAAE,CAACF,gBAAgB,EAAEC,SAAS,EAAEC,cAAc,CAAC,CAAC;EAEjD,MAAMO,OAAO,GAAG3C,OAAO,CAAC,MAAM;IAC5B,IAAIkC,gBAAgB,KAAKQ,SAAS,IAAI,CAACX,WAAW,EAAE,OAAO,EAAE;IAC7D,OAAOQ,MAAM,CACVK,GAAG,CAAEC,CAAC,IAAK;MACV,MAAMC,UAAU,GAAGN,SAAS,CAACO,GAAG,CAACF,CAAC,CAACG,EAAE,CAAC,EAAEC,IAAI;MAC5C,MAAMC,MAAM,GAAG9B,aAAa,CAACc,gBAAgB,EAAEY,UAAU,EAAET,SAAS,CAAC;MACrE,IAAIa,MAAM,KAAKR,SAAS,EAAE,OAAO,IAAI;MACrC,OAAO;QAAEM,EAAE,EAAEH,CAAC,CAACG,EAAE;QAAEG,MAAM,EAAEN,CAAC,CAACM,MAAM;QAAED;MAAO,CAAC;IAC/C,CAAC,CAAC,CACDE,MAAM,CACJC,CAAC,IAA0DA,CAAC,KAAK,IACpE,CAAC;EACL,CAAC,EAAE,CAACnB,gBAAgB,EAAEH,WAAW,EAAEQ,MAAM,EAAEC,SAAS,EAAEH,SAAS,CAAC,CAAC;EAEjE,MAAMiB,aAAa,GAAGtD,OAAO,CAAC,MAAM;IAClC,IAAIkC,gBAAgB,KAAKQ,SAAS,IAAI,CAACd,KAAK,EAAE,OAAOc,SAAS;IAC9D,OAAOd,KAAK,CAACM,gBAAgB,CAAC;EAChC,CAAC,EAAE,CAACA,gBAAgB,EAAEN,KAAK,CAAC,CAAC;EAE7B,IAAIM,gBAAgB,KAAKQ,SAAS,IAAID,MAAM,KAAKC,SAAS,EAAE;IAC1D,OAAO,IAAI;EACb;EAEA,MAAM;IACJa,CAAC,EAAEC,KAAK;IACRC,CAAC,EAAEC,KAAK;IACRC,KAAK,EAAEC,SAAS;IAChBC,MAAM,EAAEC;EACV,CAAC,GAAGxB,WAAW;EAEf,MAAMyB,QAAQ,GAAGtB,MAAM,GAAG1B,kBAAkB;EAC5C,MAAMiD,QAAQ,GAAGN,KAAK,GAAG1C,cAAc;EACvC,MAAMiD,YAAY,GAAGC,IAAI,CAACC,GAAG,CAC3B,CAAC,EACDX,KAAK,GAAGI,SAAS,GAAGnB,MAAM,GAAG1B,kBAAkB,GAAGC,cACpD,CAAC;EACD,MAAMoD,aAAa,GAAGN,UAAU,GAAG9C,cAAc,GAAG,CAAC;EAErD,MAAMqD,gBAAgB,GAAGpC,KAAK,CAACqC,MAAM,CAACC,MAAM,CAACC,IAAI;EACjD,MAAMC,mBAAmB,GAAGxC,KAAK,CAACqC,MAAM,CAACI,EAAE,CAACF,IAAI;EAChD,MAAMG,aAAa,GAAG1C,KAAK,CAACqC,MAAM,CAACM,IAAI,CAACJ,IAAI;EAC5C,MAAMK,aAAa,GAAG5C,KAAK,CAACqC,MAAM,CAACI,EAAE,CAACI,MAAM;EAE5C,oBACEtD,KAAA,CAACrB,CAAC;IAAC4E,MAAM,EAAC,UAAU;IAAAC,QAAA,GACjB,CAACnD,QAAQ,iBACRL,KAAA,CAAAE,SAAA;MAAAsD,QAAA,gBACE1D,IAAA,CAACpB,IAAI;QAAA8E,QAAA,eACHxD,KAAA,CAACnB,cAAc;UACb2C,EAAE,EAAEhB,cAAe;UACnBiD,aAAa,EAAC,gBAAgB;UAC9BC,EAAE,EAAEzC,MAAO;UACX0C,EAAE,EAAEzB,KAAM;UACV0B,EAAE,EAAE3C,MAAO;UACX4C,EAAE,EAAE3B,KAAK,GAAGI,UAAW;UAAAkB,QAAA,gBAEvB1D,IAAA,CAACf,IAAI;YACH+E,MAAM,EAAC,IAAI;YACXC,SAAS,EAAElB,gBAAiB;YAC5BmB,WAAW,EAAE1E;UAA2B,CACzC,CAAC,eACFQ,IAAA,CAACf,IAAI;YAAC+E,MAAM,EAAC,KAAK;YAACC,SAAS,EAAElB,gBAAiB;YAACmB,WAAW,EAAE;UAAE,CAAE,CAAC,eAClElE,IAAA,CAACf,IAAI;YAAC+E,MAAM,EAAC,KAAK;YAACC,SAAS,EAAElB,gBAAiB;YAACmB,WAAW,EAAE;UAAE,CAAE,CAAC,eAClElE,IAAA,CAACf,IAAI;YACH+E,MAAM,EAAC,MAAM;YACbC,SAAS,EAAElB,gBAAiB;YAC5BmB,WAAW,EAAE1E;UAA2B,CACzC,CAAC;QAAA,CACY;MAAC,CACb,CAAC,eACPQ,IAAA,CAAClB,IAAI;QACH2E,MAAM,EAAC,eAAe;QACtBG,EAAE,EAAEzC,MAAO;QACX0C,EAAE,EAAEzB,KAAM;QACV0B,EAAE,EAAE3C,MAAO;QACX4C,EAAE,EAAE3B,KAAK,GAAGI,UAAW;QACvBX,MAAM,EAAE,QAAQnB,cAAc,GAAI;QAClCyD,WAAW,EAAE1E;MAAmB,CACjC,CAAC;IAAA,CACF,CACH,EAEA,CAACe,WAAW,iBACXR,IAAA,CAAChB,IAAI;MACHyE,MAAM,EAAC,kBAAkB;MACzBxB,CAAC,EAAEQ,QAAS;MACZN,CAAC,EAAEO,QAAS;MACZL,KAAK,EAAEM,YAAa;MACpBJ,MAAM,EAAEO,aAAc;MACtBsB,IAAI,EAAEjB,mBAAoB;MAC1BkB,OAAO,EAAE1E;IAAgB,CAC1B,CACF,EAEAqC,aAAa,KAAKZ,SAAS,iBAC1BpB,IAAA,CAACb,OAAO;MACNsE,MAAM,EAAC,gBAAgB;MACvBxB,CAAC,EAAEd,MAAO;MACVgB,CAAC,EAAEC,KAAK,GAAG7C,cAAe;MAC1B+E,UAAU,EAAC,QAAQ;MACnBF,IAAI,EAAEf,aAAc;MACpBkB,QAAQ,EAAE5D,KAAK,CAAC6D,YAAY,CAACC,KAAK,CAACF,QAAS;MAC5CG,UAAU,EAAE/D,KAAK,CAAC6D,YAAY,CAACC,KAAK,CAACC,UAAW;MAChDC,UAAU,EAAEhE,KAAK,CAACiE,YAAY,CAACC,IAAK;MAAAnB,QAAA,EAEnC1B;IAAa,CACP,CACV,EAEAvB,WAAW,IACVY,OAAO,CAACC,GAAG,CAAEwD,MAAM,iBACjB9E,IAAA,CAACrB,MAAM;MAEL8E,MAAM,EAAE,mBAAmBqB,MAAM,CAACpD,EAAE,EAAG;MACvCqD,EAAE,EAAE5D,MAAO;MACX6D,EAAE,EAAEF,MAAM,CAAClD,MAAO;MAClBqD,CAAC,EAAE5F,aAAc;MACjB+E,IAAI,EAAEU,MAAM,CAACjD,MAAO;MACpBA,MAAM,EAAE0B,aAAc;MACtBY,WAAW,EAAE7E;IAAoB,GAP5BwF,MAAM,CAACpD,EAQb,CACF,CAAC;EAAA,CACH,CAAC;AAER","ignoreList":[]}
1
+ {"version":3,"names":["useTheme","useId","useMemo","Circle","Defs","G","Line","LinearGradient","Rect","Stop","useCartesianChartContext","BEACON_RADIUS","BEACON_STROKE_WIDTH","LINE_GRADIENT_EDGE_OPACITY","OVERLAY_LINE_INSET","OVERLAY_OFFSET","OVERLAY_OPACITY","useScrubberContext","DefaultScrubberTooltip","resolvePixelX","resolvePixelY","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Scrubber","hideLine","hideOverlay","showBeacons","tooltip","lineGradientId","theme","scrubberPosition","getXScale","getXAxisConfig","getYScale","drawingArea","series","seriesMap","pixelX","undefined","beacons","map","s","seriesData","get","id","data","pixelY","stroke","filter","b","tooltipPayload","content","items","length","resolvedTitle","title","offset","minWidth","x","drawX","y","drawY","width","drawWidth","height","drawHeight","overlayX","overlayY","overlayWidth","Math","max","overlayHeight","borderMutedColor","colors","border","base","backgroundBaseColor","bg","bgCanvasColor","canvas","testID","children","gradientUnits","x1","y1","x2","y2","stopColor","stopOpacity","strokeWidth","fill","opacity","beacon","cx","cy","r"],"sourceRoot":"../../../../../src","sources":["lib/Components/Scrubber/Scrubber.tsx"],"mappings":"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","ignoreList":[]}