@ledgerhq/lumen-ui-rnative-visualization 0.1.21 → 0.1.23
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.
- package/dist/module/lib/Components/Point/Point.js +78 -48
- package/dist/module/lib/Components/Point/Point.js.map +1 -1
- package/dist/module/lib/Components/Point/Point.test.js +41 -0
- package/dist/module/lib/Components/Point/Point.test.js.map +1 -1
- package/dist/module/lib/Components/Point/constants.js +2 -0
- package/dist/module/lib/Components/Point/constants.js.map +1 -1
- package/dist/module/lib/Components/Point/usePointGeometry.js +60 -0
- package/dist/module/lib/Components/Point/usePointGeometry.js.map +1 -0
- package/dist/module/lib/Components/Point/usePointGeometry.test.js +86 -0
- package/dist/module/lib/Components/Point/usePointGeometry.test.js.map +1 -0
- package/dist/module/lib/Components/Point/utils.js +58 -15
- package/dist/module/lib/Components/Point/utils.js.map +1 -1
- package/dist/module/lib/Components/Point/utils.test.js +37 -75
- package/dist/module/lib/Components/Point/utils.test.js.map +1 -1
- package/dist/module/lib/utils/domain/domain.js +4 -4
- package/dist/module/lib/utils/domain/domain.js.map +1 -1
- package/dist/typescript/src/lib/Components/Point/Point.d.ts +1 -1
- package/dist/typescript/src/lib/Components/Point/Point.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Point/constants.d.ts +2 -0
- package/dist/typescript/src/lib/Components/Point/constants.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Point/types.d.ts +32 -0
- package/dist/typescript/src/lib/Components/Point/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Point/usePointGeometry.d.ts +33 -0
- package/dist/typescript/src/lib/Components/Point/usePointGeometry.d.ts.map +1 -0
- package/dist/typescript/src/lib/Components/Point/utils.d.ts +30 -4
- package/dist/typescript/src/lib/Components/Point/utils.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/lib/Components/Point/Point.test.tsx +46 -0
- package/src/lib/Components/Point/Point.tsx +75 -56
- package/src/lib/Components/Point/constants.ts +2 -0
- package/src/lib/Components/Point/types.ts +41 -0
- package/src/lib/Components/Point/usePointGeometry.test.ts +95 -0
- package/src/lib/Components/Point/usePointGeometry.ts +77 -0
- package/src/lib/Components/Point/utils.test.ts +34 -80
- package/src/lib/Components/Point/utils.ts +77 -19
- package/src/lib/utils/domain/domain.ts +4 -4
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useTheme } from '@ledgerhq/lumen-ui-rnative';
|
|
4
|
-
import { useMemo } from 'react';
|
|
5
4
|
import Animated from 'react-native-reanimated';
|
|
6
5
|
import { Circle, G, Polygon, Text as SvgText } from 'react-native-svg';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { DEFAULT_SIZE, STROKE_WIDTH } from "./constants.js";
|
|
11
|
-
import { useMagneticPointsContext } from "./pointContext/index.js";
|
|
12
|
-
import { buildArrowPoints, computeLabelY, isWithinBounds, resolveLabel, useMagneticRegistration } from "./utils.js";
|
|
6
|
+
import { DEFAULT_SIZE, LABEL_FONT_SIZE, STROKE_WIDTH } from "./constants.js";
|
|
7
|
+
import { usePointGeometry } from "./usePointGeometry.js";
|
|
8
|
+
import { buildArrowPoints, computeLabelGeometry, resolveLabel } from "./utils.js";
|
|
13
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
10
|
const AnimatedG = Animated.createAnimatedComponent(G);
|
|
15
11
|
export function PointLabel({
|
|
@@ -22,12 +18,48 @@ export function PointLabel({
|
|
|
22
18
|
return /*#__PURE__*/_jsx(SvgText, {
|
|
23
19
|
textAnchor: textAnchor,
|
|
24
20
|
fill: theme.colors.text.base,
|
|
25
|
-
fontSize:
|
|
21
|
+
fontSize: LABEL_FONT_SIZE,
|
|
26
22
|
fontWeight: theme.typographies.body4.fontWeight,
|
|
27
23
|
fontFamily: theme.fontFamilies.sans,
|
|
28
24
|
...props
|
|
29
25
|
});
|
|
30
26
|
}
|
|
27
|
+
function PointMarker({
|
|
28
|
+
x,
|
|
29
|
+
y,
|
|
30
|
+
size,
|
|
31
|
+
color
|
|
32
|
+
}) {
|
|
33
|
+
const {
|
|
34
|
+
theme
|
|
35
|
+
} = useTheme();
|
|
36
|
+
const radius = size / 2;
|
|
37
|
+
const fill = color ?? theme.colors.bg.mutedStrong;
|
|
38
|
+
return /*#__PURE__*/_jsx(Circle, {
|
|
39
|
+
testID: "point-circle",
|
|
40
|
+
cx: x,
|
|
41
|
+
cy: y,
|
|
42
|
+
r: radius,
|
|
43
|
+
fill: fill,
|
|
44
|
+
stroke: theme.colors.bg.canvas,
|
|
45
|
+
strokeWidth: STROKE_WIDTH
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function PointArrow({
|
|
49
|
+
x,
|
|
50
|
+
y,
|
|
51
|
+
size,
|
|
52
|
+
position
|
|
53
|
+
}) {
|
|
54
|
+
const {
|
|
55
|
+
theme
|
|
56
|
+
} = useTheme();
|
|
57
|
+
return /*#__PURE__*/_jsx(Polygon, {
|
|
58
|
+
testID: "point-arrow",
|
|
59
|
+
points: buildArrowPoints(x, y, size / 2, position),
|
|
60
|
+
fill: theme.colors.text.base
|
|
61
|
+
});
|
|
62
|
+
}
|
|
31
63
|
export function Point({
|
|
32
64
|
dataX,
|
|
33
65
|
dataY,
|
|
@@ -39,56 +71,54 @@ export function Point({
|
|
|
39
71
|
showLabelArrow = true,
|
|
40
72
|
size = DEFAULT_SIZE,
|
|
41
73
|
onPress,
|
|
42
|
-
magnetic = false
|
|
74
|
+
magnetic = false,
|
|
75
|
+
labelAlignment = 'auto'
|
|
43
76
|
}) {
|
|
44
77
|
const {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
} =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
} = useTheme();
|
|
56
|
-
const xScale = getXScale();
|
|
57
|
-
const yScale = getYScale();
|
|
58
|
-
const radius = size / 2;
|
|
59
|
-
const fill = color ?? theme.colors.bg.mutedStrong;
|
|
60
|
-
const pixel = useMemo(() => {
|
|
61
|
-
if (!xScale || !yScale) return undefined;
|
|
62
|
-
return projectPoint(dataX, dataY, xScale, yScale);
|
|
63
|
-
}, [dataX, dataY, xScale, yScale]);
|
|
64
|
-
if (!pixel || !isWithinBounds(pixel.x, pixel.y, drawingArea)) {
|
|
78
|
+
pixel,
|
|
79
|
+
drawingArea,
|
|
80
|
+
fadeProps,
|
|
81
|
+
isVisible
|
|
82
|
+
} = usePointGeometry({
|
|
83
|
+
dataX,
|
|
84
|
+
dataY,
|
|
85
|
+
magnetic
|
|
86
|
+
});
|
|
87
|
+
if (!isVisible || !pixel) {
|
|
65
88
|
return null;
|
|
66
89
|
}
|
|
67
|
-
const
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
90
|
+
const labelText = resolveLabel(label, dataX);
|
|
91
|
+
const isLabelVisible = labelText !== undefined;
|
|
92
|
+
const labelGeometry = isLabelVisible ? computeLabelGeometry({
|
|
93
|
+
text: labelText,
|
|
94
|
+
pixelX: pixel.x,
|
|
95
|
+
pixelY: pixel.y,
|
|
96
|
+
size,
|
|
97
|
+
labelPosition,
|
|
98
|
+
showLabelArrow,
|
|
99
|
+
area: drawingArea,
|
|
100
|
+
alignment: labelAlignment
|
|
101
|
+
}) : null;
|
|
71
102
|
const Label = LabelComponent ?? PointLabel;
|
|
72
103
|
return /*#__PURE__*/_jsxs(AnimatedG, {
|
|
73
104
|
testID: "point-group",
|
|
74
105
|
onPress: onPress,
|
|
75
106
|
animatedProps: fadeProps,
|
|
76
|
-
children: [!hidePoint && /*#__PURE__*/_jsx(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
stroke: theme.colors.bg.canvas,
|
|
83
|
-
strokeWidth: STROKE_WIDTH
|
|
84
|
-
}), renderArrow && /*#__PURE__*/_jsx(Polygon, {
|
|
85
|
-
testID: "point-arrow",
|
|
86
|
-
points: buildArrowPoints(pixel.x, pixel.y, radius, labelPosition),
|
|
87
|
-
fill: theme.colors.text.base
|
|
88
|
-
}), resolvedLabel != null && /*#__PURE__*/_jsx(Label, {
|
|
107
|
+
children: [!hidePoint && /*#__PURE__*/_jsx(PointMarker, {
|
|
108
|
+
x: pixel.x,
|
|
109
|
+
y: pixel.y,
|
|
110
|
+
size: size,
|
|
111
|
+
color: color
|
|
112
|
+
}), isLabelVisible && showLabelArrow && /*#__PURE__*/_jsx(PointArrow, {
|
|
89
113
|
x: pixel.x,
|
|
90
|
-
y:
|
|
91
|
-
|
|
114
|
+
y: pixel.y,
|
|
115
|
+
size: size,
|
|
116
|
+
position: labelPosition
|
|
117
|
+
}), labelText != null && labelGeometry && /*#__PURE__*/_jsx(Label, {
|
|
118
|
+
x: labelGeometry.x,
|
|
119
|
+
y: labelGeometry.y,
|
|
120
|
+
textAnchor: labelGeometry.textAnchor,
|
|
121
|
+
children: labelText
|
|
92
122
|
})]
|
|
93
123
|
});
|
|
94
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useTheme","
|
|
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":[]}
|
|
@@ -212,6 +212,47 @@ describe('Point', () => {
|
|
|
212
212
|
const bottomY = bottomSpy.mock.calls[0][0].y;
|
|
213
213
|
expect(bottomY).toBeGreaterThan(topY);
|
|
214
214
|
});
|
|
215
|
+
it('anchors a long label inward at the left edge by default', () => {
|
|
216
|
+
const labelSpy = jest.fn(({
|
|
217
|
+
x,
|
|
218
|
+
y,
|
|
219
|
+
children
|
|
220
|
+
}) => /*#__PURE__*/_jsx(SvgText, {
|
|
221
|
+
x: x,
|
|
222
|
+
y: y,
|
|
223
|
+
children: children
|
|
224
|
+
}));
|
|
225
|
+
renderInChart(/*#__PURE__*/_jsx(Point, {
|
|
226
|
+
dataX: 0,
|
|
227
|
+
dataY: 10,
|
|
228
|
+
label: "A long edge label",
|
|
229
|
+
LabelComponent: labelSpy
|
|
230
|
+
}));
|
|
231
|
+
expect(labelSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
232
|
+
textAnchor: 'start'
|
|
233
|
+
}), undefined);
|
|
234
|
+
});
|
|
235
|
+
it("centres a long edge label when labelAlignment is 'center'", () => {
|
|
236
|
+
const labelSpy = jest.fn(({
|
|
237
|
+
x,
|
|
238
|
+
y,
|
|
239
|
+
children
|
|
240
|
+
}) => /*#__PURE__*/_jsx(SvgText, {
|
|
241
|
+
x: x,
|
|
242
|
+
y: y,
|
|
243
|
+
children: children
|
|
244
|
+
}));
|
|
245
|
+
renderInChart(/*#__PURE__*/_jsx(Point, {
|
|
246
|
+
dataX: 0,
|
|
247
|
+
dataY: 10,
|
|
248
|
+
label: "A long edge label",
|
|
249
|
+
labelAlignment: "center",
|
|
250
|
+
LabelComponent: labelSpy
|
|
251
|
+
}));
|
|
252
|
+
expect(labelSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
253
|
+
textAnchor: 'middle'
|
|
254
|
+
}), undefined);
|
|
255
|
+
});
|
|
215
256
|
it('calls onPress when the point is pressed', () => {
|
|
216
257
|
const onPress = jest.fn();
|
|
217
258
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","it","expect","jest","ledgerLiveThemes","ThemeProvider","fireEvent","render","React","Text","SvgText","CartesianChart","Point","jsx","_jsx","sampleSeries","id","stroke","data","Wrapper","children","themes","colorScheme","renderInChart","pointElement","width","height","xAxis","yAxis","series","getByTestId","dataX","dataY","circle","toBeTruthy","props","r","toBe","color","size","fill","getByText","label","i","CustomLabel","x","y","testID","LabelComponent","queryByTestId","toBeNull","hidePoint","scaleType","showLabelArrow","topSpy","fn","bottomSpy","labelPosition","topY","mock","calls","bottomY","toBeGreaterThan","onPress","press","toHaveBeenCalled"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/Point.test.tsx"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,EAAEC,IAAI,QAAQ,eAAe;AAC1D,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,SAAS,EAAEC,MAAM,QAAQ,+BAA+B;AACjE,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,IAAIC,OAAO,QAAQ,kBAAkB;AAElD,SAASC,cAAc,QAAQ,4BAAmB;AAElD,SAASC,KAAK,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;
|
|
1
|
+
{"version":3,"names":["describe","it","expect","jest","ledgerLiveThemes","ThemeProvider","fireEvent","render","React","Text","SvgText","CartesianChart","Point","jsx","_jsx","sampleSeries","id","stroke","data","Wrapper","children","themes","colorScheme","renderInChart","pointElement","width","height","xAxis","yAxis","series","getByTestId","dataX","dataY","circle","toBeTruthy","props","r","toBe","color","size","fill","getByText","label","i","CustomLabel","x","y","testID","LabelComponent","queryByTestId","toBeNull","hidePoint","scaleType","showLabelArrow","topSpy","fn","bottomSpy","labelPosition","topY","mock","calls","bottomY","toBeGreaterThan","labelSpy","toHaveBeenCalledWith","objectContaining","textAnchor","undefined","labelAlignment","onPress","press","toHaveBeenCalled"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/Point.test.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,4 +6,6 @@ export const LABEL_FONT_SIZE = 10;
|
|
|
6
6
|
export const ARROW_WIDTH = 6;
|
|
7
7
|
export const ARROW_HEIGHT = 4;
|
|
8
8
|
export const GAP = 4;
|
|
9
|
+
/** Approximate width of a character in the label font, as a ratio of the font size. Used to compute the label width. */
|
|
10
|
+
export const LABEL_CHAR_WIDTH_RATIO = 0.6;
|
|
9
11
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_SIZE","STROKE_WIDTH","LABEL_FONT_SIZE","ARROW_WIDTH","ARROW_HEIGHT","GAP"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,YAAY,GAAG,CAAC;AAC7B,OAAO,MAAMC,eAAe,GAAG,EAAE;AACjC,OAAO,MAAMC,WAAW,GAAG,CAAC;AAC5B,OAAO,MAAMC,YAAY,GAAG,CAAC;AAC7B,OAAO,MAAMC,GAAG,GAAG,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["DEFAULT_SIZE","STROKE_WIDTH","LABEL_FONT_SIZE","ARROW_WIDTH","ARROW_HEIGHT","GAP","LABEL_CHAR_WIDTH_RATIO"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,YAAY,GAAG,CAAC;AAC7B,OAAO,MAAMC,eAAe,GAAG,EAAE;AACjC,OAAO,MAAMC,WAAW,GAAG,CAAC;AAC5B,OAAO,MAAMC,YAAY,GAAG,CAAC;AAC7B,OAAO,MAAMC,GAAG,GAAG,CAAC;AACpB;AACA,OAAO,MAAMC,sBAAsB,GAAG,GAAG","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useMemo } from 'react';
|
|
4
|
+
import { projectPoint } from "../../utils/scales/scales.js";
|
|
5
|
+
import { useCartesianChartContext } from "../CartesianChart/context/index.js";
|
|
6
|
+
import { useRevealFadeProps } from "../CartesianChart/RevealAnimation/index.js";
|
|
7
|
+
import { useMagneticPointsContext } from "./pointContext/index.js";
|
|
8
|
+
import { isWithinBounds, resolveDataXToIndex } from "./utils.js";
|
|
9
|
+
/**
|
|
10
|
+
* Resolves a point's chart geometry and behaviour: projects its data
|
|
11
|
+
* coordinates to pixels, registers it as a magnetic snap target when enabled,
|
|
12
|
+
* exposes the reveal-animation props, and reports whether it falls inside the
|
|
13
|
+
* drawing area.
|
|
14
|
+
*/
|
|
15
|
+
export const usePointGeometry = ({
|
|
16
|
+
dataX,
|
|
17
|
+
dataY,
|
|
18
|
+
magnetic
|
|
19
|
+
}) => {
|
|
20
|
+
const {
|
|
21
|
+
getXScale,
|
|
22
|
+
getYScale,
|
|
23
|
+
getXAxisConfig,
|
|
24
|
+
drawingArea
|
|
25
|
+
} = useCartesianChartContext();
|
|
26
|
+
const magneticContext = useMagneticPointsContext();
|
|
27
|
+
useMagneticRegistration(magnetic, dataX, getXAxisConfig, magneticContext);
|
|
28
|
+
const xScale = getXScale();
|
|
29
|
+
const yScale = getYScale();
|
|
30
|
+
const pixel = useMemo(() => {
|
|
31
|
+
if (!xScale || !yScale) return undefined;
|
|
32
|
+
return projectPoint(dataX, dataY, xScale, yScale);
|
|
33
|
+
}, [dataX, dataY, xScale, yScale]);
|
|
34
|
+
const fadeProps = useRevealFadeProps();
|
|
35
|
+
const isVisible = pixel !== undefined && isWithinBounds(pixel.x, pixel.y, drawingArea);
|
|
36
|
+
return {
|
|
37
|
+
pixel,
|
|
38
|
+
drawingArea,
|
|
39
|
+
fadeProps,
|
|
40
|
+
isVisible
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Registers/unregisters a data index as a magnetic snap target
|
|
46
|
+
* when the Point has `magnetic` enabled.
|
|
47
|
+
*/
|
|
48
|
+
export const useMagneticRegistration = (magnetic, dataX, getXAxisConfig, {
|
|
49
|
+
register,
|
|
50
|
+
unregister
|
|
51
|
+
}) => {
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!magnetic) return;
|
|
54
|
+
const index = resolveDataXToIndex(dataX, getXAxisConfig());
|
|
55
|
+
if (index === undefined) return;
|
|
56
|
+
register(index);
|
|
57
|
+
return () => unregister(index);
|
|
58
|
+
}, [magnetic, dataX, getXAxisConfig, register, unregister]);
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=usePointGeometry.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it, jest } from '@jest/globals';
|
|
4
|
+
import { renderHook } from '@testing-library/react-native';
|
|
5
|
+
import { useMagneticRegistration } from "./usePointGeometry.js";
|
|
6
|
+
const makeContext = () => ({
|
|
7
|
+
register: jest.fn(),
|
|
8
|
+
unregister: jest.fn(),
|
|
9
|
+
version: 0,
|
|
10
|
+
getMagneticPoints: () => new Set()
|
|
11
|
+
});
|
|
12
|
+
const noAxisConfig = () => undefined;
|
|
13
|
+
describe('useMagneticRegistration', () => {
|
|
14
|
+
it('registers the data index when magnetic is true', () => {
|
|
15
|
+
const ctx = makeContext();
|
|
16
|
+
renderHook(() => useMagneticRegistration(true, 3, noAxisConfig, ctx));
|
|
17
|
+
expect(ctx.register).toHaveBeenCalledWith(3);
|
|
18
|
+
});
|
|
19
|
+
it('does not register when magnetic is false', () => {
|
|
20
|
+
const ctx = makeContext();
|
|
21
|
+
renderHook(() => useMagneticRegistration(false, 3, noAxisConfig, ctx));
|
|
22
|
+
expect(ctx.register).not.toHaveBeenCalled();
|
|
23
|
+
});
|
|
24
|
+
it('unregisters on unmount', () => {
|
|
25
|
+
const ctx = makeContext();
|
|
26
|
+
const {
|
|
27
|
+
unmount
|
|
28
|
+
} = renderHook(() => useMagneticRegistration(true, 3, noAxisConfig, ctx));
|
|
29
|
+
unmount();
|
|
30
|
+
expect(ctx.unregister).toHaveBeenCalledWith(3);
|
|
31
|
+
});
|
|
32
|
+
it('resolves dataX through axis config data when provided', () => {
|
|
33
|
+
const ctx = makeContext();
|
|
34
|
+
const getXAxisConfig = () => ({
|
|
35
|
+
scaleType: 'band',
|
|
36
|
+
data: [100, 200, 300]
|
|
37
|
+
});
|
|
38
|
+
renderHook(() => useMagneticRegistration(true, 200, getXAxisConfig, ctx));
|
|
39
|
+
expect(ctx.register).toHaveBeenCalledWith(1);
|
|
40
|
+
});
|
|
41
|
+
it('does not register when axis data exists but does not contain the value', () => {
|
|
42
|
+
const ctx = makeContext();
|
|
43
|
+
const getXAxisConfig = () => ({
|
|
44
|
+
scaleType: 'band',
|
|
45
|
+
data: [100, 200, 300]
|
|
46
|
+
});
|
|
47
|
+
renderHook(() => useMagneticRegistration(true, 999, getXAxisConfig, ctx));
|
|
48
|
+
expect(ctx.register).not.toHaveBeenCalled();
|
|
49
|
+
});
|
|
50
|
+
it('re-registers when dataX changes', () => {
|
|
51
|
+
const ctx = makeContext();
|
|
52
|
+
const {
|
|
53
|
+
rerender
|
|
54
|
+
} = renderHook(({
|
|
55
|
+
dataX
|
|
56
|
+
}) => useMagneticRegistration(true, dataX, noAxisConfig, ctx), {
|
|
57
|
+
initialProps: {
|
|
58
|
+
dataX: 2
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
expect(ctx.register).toHaveBeenCalledWith(2);
|
|
62
|
+
rerender({
|
|
63
|
+
dataX: 4
|
|
64
|
+
});
|
|
65
|
+
expect(ctx.unregister).toHaveBeenCalledWith(2);
|
|
66
|
+
expect(ctx.register).toHaveBeenCalledWith(4);
|
|
67
|
+
});
|
|
68
|
+
it('unregisters and stops when magnetic switches to false', () => {
|
|
69
|
+
const ctx = makeContext();
|
|
70
|
+
const {
|
|
71
|
+
rerender
|
|
72
|
+
} = renderHook(({
|
|
73
|
+
magnetic
|
|
74
|
+
}) => useMagneticRegistration(magnetic, 3, noAxisConfig, ctx), {
|
|
75
|
+
initialProps: {
|
|
76
|
+
magnetic: true
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
expect(ctx.register).toHaveBeenCalledWith(3);
|
|
80
|
+
rerender({
|
|
81
|
+
magnetic: false
|
|
82
|
+
});
|
|
83
|
+
expect(ctx.unregister).toHaveBeenCalledWith(3);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=usePointGeometry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","jest","renderHook","useMagneticRegistration","makeContext","register","fn","unregister","version","getMagneticPoints","Set","noAxisConfig","undefined","ctx","toHaveBeenCalledWith","not","toHaveBeenCalled","unmount","getXAxisConfig","scaleType","data","rerender","dataX","initialProps","magnetic"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/usePointGeometry.test.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { LABEL_FONT_SIZE, ARROW_WIDTH, ARROW_HEIGHT, GAP } from "./constants.js";
|
|
3
|
+
import { ARROW_HEIGHT, ARROW_WIDTH, GAP, LABEL_CHAR_WIDTH_RATIO, LABEL_FONT_SIZE } from "./constants.js";
|
|
5
4
|
export const isWithinBounds = (px, py, area) => px >= area.x && px <= area.x + area.width && py >= area.y && py <= area.y + area.height;
|
|
6
5
|
|
|
7
6
|
/**
|
|
@@ -38,20 +37,36 @@ export const resolveDataXToIndex = (dataX, axisConfig) => {
|
|
|
38
37
|
};
|
|
39
38
|
|
|
40
39
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* Computes the label's horizontal placement, keeping it inside the drawing area
|
|
41
|
+
* near the left/right edges. Centred on the point when it fits; otherwise
|
|
42
|
+
* anchored to the edge and aligned with the arrow's outer vertex (offset by half
|
|
43
|
+
* the arrow width from the point, when an arrow is rendered).
|
|
43
44
|
*/
|
|
44
|
-
export const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
export const computeLabelX = (pixelX, label, area, alignment, hasArrow) => {
|
|
46
|
+
if (alignment === 'center') {
|
|
47
|
+
return {
|
|
48
|
+
x: pixelX,
|
|
49
|
+
textAnchor: 'middle'
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const halfWidth = label.length * LABEL_FONT_SIZE * LABEL_CHAR_WIDTH_RATIO / 2;
|
|
53
|
+
const arrowOffset = hasArrow ? ARROW_WIDTH / 2 : 0;
|
|
54
|
+
if (pixelX - halfWidth < area.x) {
|
|
55
|
+
return {
|
|
56
|
+
x: pixelX - arrowOffset,
|
|
57
|
+
textAnchor: 'start'
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (pixelX + halfWidth > area.x + area.width) {
|
|
61
|
+
return {
|
|
62
|
+
x: pixelX + arrowOffset,
|
|
63
|
+
textAnchor: 'end'
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
x: pixelX,
|
|
68
|
+
textAnchor: 'middle'
|
|
69
|
+
};
|
|
55
70
|
};
|
|
56
71
|
|
|
57
72
|
/**
|
|
@@ -61,4 +76,32 @@ export const computeLabelY = (pixelY, radius, labelPosition, renderArrow) => {
|
|
|
61
76
|
const arrowOffset = renderArrow ? ARROW_HEIGHT + GAP : GAP;
|
|
62
77
|
return labelPosition === 'top' ? pixelY - radius - arrowOffset - GAP : pixelY + radius + arrowOffset + GAP + LABEL_FONT_SIZE;
|
|
63
78
|
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Computes where a point's label and its connector arrow are drawn: the
|
|
82
|
+
* (optionally clamped) horizontal placement, the vertical baseline, and whether
|
|
83
|
+
* the arrow is rendered. Label content is resolved separately via
|
|
84
|
+
* {@link resolveLabel}.
|
|
85
|
+
*/
|
|
86
|
+
export const computeLabelGeometry = ({
|
|
87
|
+
text,
|
|
88
|
+
pixelX,
|
|
89
|
+
pixelY,
|
|
90
|
+
size,
|
|
91
|
+
labelPosition,
|
|
92
|
+
showLabelArrow,
|
|
93
|
+
area,
|
|
94
|
+
alignment
|
|
95
|
+
}) => {
|
|
96
|
+
const {
|
|
97
|
+
x,
|
|
98
|
+
textAnchor
|
|
99
|
+
} = computeLabelX(pixelX, text, area, alignment, showLabelArrow);
|
|
100
|
+
const y = computeLabelY(pixelY, size / 2, labelPosition, showLabelArrow);
|
|
101
|
+
return {
|
|
102
|
+
x,
|
|
103
|
+
y,
|
|
104
|
+
textAnchor
|
|
105
|
+
};
|
|
106
|
+
};
|
|
64
107
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ARROW_HEIGHT","ARROW_WIDTH","GAP","LABEL_CHAR_WIDTH_RATIO","LABEL_FONT_SIZE","isWithinBounds","px","py","area","x","width","y","height","buildArrowPoints","cx","cy","radius","position","halfW","tipY","baseY","resolveLabel","label","dataX","resolved","undefined","resolveDataXToIndex","axisConfig","axisData","data","index","indexOf","computeLabelX","pixelX","alignment","hasArrow","textAnchor","halfWidth","length","arrowOffset","computeLabelY","pixelY","labelPosition","renderArrow","computeLabelGeometry","text","size","showLabelArrow"],"sourceRoot":"../../../../../src","sources":["lib/Components/Point/utils.ts"],"mappings":"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","ignoreList":[]}
|