@coinbase/cds-mobile-visualization 3.4.0-beta.9 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +132 -0
- package/dts/chart/CartesianChart.d.ts +92 -7
- package/dts/chart/CartesianChart.d.ts.map +1 -1
- package/dts/chart/ChartContextBridge.d.ts.map +1 -1
- package/dts/chart/ChartProvider.d.ts +3 -0
- package/dts/chart/ChartProvider.d.ts.map +1 -1
- package/dts/chart/Path.d.ts +36 -13
- package/dts/chart/Path.d.ts.map +1 -1
- package/dts/chart/PeriodSelector.d.ts +20 -5
- package/dts/chart/PeriodSelector.d.ts.map +1 -1
- package/dts/chart/area/Area.d.ts +14 -11
- package/dts/chart/area/Area.d.ts.map +1 -1
- package/dts/chart/area/AreaChart.d.ts +33 -9
- package/dts/chart/area/AreaChart.d.ts.map +1 -1
- package/dts/chart/area/DottedArea.d.ts.map +1 -1
- package/dts/chart/area/GradientArea.d.ts.map +1 -1
- package/dts/chart/area/SolidArea.d.ts.map +1 -1
- package/dts/chart/axis/Axis.d.ts +22 -42
- package/dts/chart/axis/Axis.d.ts.map +1 -1
- package/dts/chart/axis/XAxis.d.ts +6 -0
- package/dts/chart/axis/XAxis.d.ts.map +1 -1
- package/dts/chart/axis/YAxis.d.ts +1 -0
- package/dts/chart/axis/YAxis.d.ts.map +1 -1
- package/dts/chart/bar/Bar.d.ts +51 -51
- package/dts/chart/bar/Bar.d.ts.map +1 -1
- package/dts/chart/bar/BarChart.d.ts +56 -11
- package/dts/chart/bar/BarChart.d.ts.map +1 -1
- package/dts/chart/bar/BarPlot.d.ts +2 -1
- package/dts/chart/bar/BarPlot.d.ts.map +1 -1
- package/dts/chart/bar/BarStack.d.ts +45 -20
- package/dts/chart/bar/BarStack.d.ts.map +1 -1
- package/dts/chart/bar/BarStackGroup.d.ts +2 -1
- package/dts/chart/bar/BarStackGroup.d.ts.map +1 -1
- package/dts/chart/bar/DefaultBar.d.ts.map +1 -1
- package/dts/chart/bar/DefaultBarStack.d.ts.map +1 -1
- package/dts/chart/gradient/Gradient.d.ts +5 -0
- package/dts/chart/gradient/Gradient.d.ts.map +1 -1
- package/dts/chart/index.d.ts +1 -0
- package/dts/chart/index.d.ts.map +1 -1
- package/dts/chart/legend/DefaultLegendEntry.d.ts +5 -0
- package/dts/chart/legend/DefaultLegendEntry.d.ts.map +1 -0
- package/dts/chart/legend/DefaultLegendShape.d.ts +5 -0
- package/dts/chart/legend/DefaultLegendShape.d.ts.map +1 -0
- package/dts/chart/legend/Legend.d.ts +168 -0
- package/dts/chart/legend/Legend.d.ts.map +1 -0
- package/dts/chart/legend/index.d.ts +4 -0
- package/dts/chart/legend/index.d.ts.map +1 -0
- package/dts/chart/line/DottedLine.d.ts.map +1 -1
- package/dts/chart/line/Line.d.ts +23 -19
- package/dts/chart/line/Line.d.ts.map +1 -1
- package/dts/chart/line/LineChart.d.ts +26 -9
- package/dts/chart/line/LineChart.d.ts.map +1 -1
- package/dts/chart/line/ReferenceLine.d.ts +1 -0
- package/dts/chart/line/ReferenceLine.d.ts.map +1 -1
- package/dts/chart/line/SolidLine.d.ts.map +1 -1
- package/dts/chart/point/Point.d.ts +26 -2
- package/dts/chart/point/Point.d.ts.map +1 -1
- package/dts/chart/scrubber/DefaultScrubberBeacon.d.ts +32 -2
- package/dts/chart/scrubber/DefaultScrubberBeacon.d.ts.map +1 -1
- package/dts/chart/scrubber/DefaultScrubberLabel.d.ts +2 -1
- package/dts/chart/scrubber/DefaultScrubberLabel.d.ts.map +1 -1
- package/dts/chart/scrubber/Scrubber.d.ts +86 -17
- package/dts/chart/scrubber/Scrubber.d.ts.map +1 -1
- package/dts/chart/scrubber/ScrubberAccessibilityView.d.ts +12 -0
- package/dts/chart/scrubber/ScrubberAccessibilityView.d.ts.map +1 -0
- package/dts/chart/scrubber/ScrubberBeaconGroup.d.ts +10 -0
- package/dts/chart/scrubber/ScrubberBeaconGroup.d.ts.map +1 -1
- package/dts/chart/scrubber/ScrubberBeaconLabelGroup.d.ts +16 -1
- package/dts/chart/scrubber/ScrubberBeaconLabelGroup.d.ts.map +1 -1
- package/dts/chart/scrubber/ScrubberProvider.d.ts.map +1 -1
- package/dts/chart/utils/axis.d.ts +45 -10
- package/dts/chart/utils/axis.d.ts.map +1 -1
- package/dts/chart/utils/bar.d.ts +190 -0
- package/dts/chart/utils/bar.d.ts.map +1 -1
- package/dts/chart/utils/chart.d.ts +32 -0
- package/dts/chart/utils/chart.d.ts.map +1 -1
- package/dts/chart/utils/context.d.ts +21 -6
- package/dts/chart/utils/context.d.ts.map +1 -1
- package/dts/chart/utils/gradient.d.ts +3 -1
- package/dts/chart/utils/gradient.d.ts.map +1 -1
- package/dts/chart/utils/path.d.ts +26 -0
- package/dts/chart/utils/path.d.ts.map +1 -1
- package/dts/chart/utils/point.d.ts +24 -12
- package/dts/chart/utils/point.d.ts.map +1 -1
- package/dts/chart/utils/scale.d.ts +11 -0
- package/dts/chart/utils/scale.d.ts.map +1 -1
- package/dts/chart/utils/scrubber.d.ts +2 -1
- package/dts/chart/utils/scrubber.d.ts.map +1 -1
- package/dts/chart/utils/transition.d.ts +63 -22
- package/dts/chart/utils/transition.d.ts.map +1 -1
- package/dts/sparkline/Sparkline.d.ts +2 -1
- package/dts/sparkline/Sparkline.d.ts.map +1 -1
- package/dts/sparkline/SparklineArea.d.ts +2 -1
- package/dts/sparkline/SparklineArea.d.ts.map +1 -1
- package/dts/sparkline/SparklineGradient.d.ts +2 -1
- package/dts/sparkline/SparklineGradient.d.ts.map +1 -1
- package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts +2 -1
- package/dts/sparkline/sparkline-interactive/SparklineInteractive.d.ts.map +1 -1
- package/esm/chart/CartesianChart.js +176 -82
- package/esm/chart/ChartContextBridge.js +14 -3
- package/esm/chart/ChartProvider.js +2 -2
- package/esm/chart/Path.js +34 -29
- package/esm/chart/PeriodSelector.js +5 -1
- package/esm/chart/__stories__/CartesianChart.stories.js +16 -80
- package/esm/chart/__stories__/ChartAccessibility.stories.js +721 -0
- package/esm/chart/__stories__/ChartTransitions.stories.js +625 -0
- package/esm/chart/__stories__/PeriodSelector.stories.js +99 -1
- package/esm/chart/area/Area.js +21 -9
- package/esm/chart/area/AreaChart.js +18 -13
- package/esm/chart/area/DottedArea.js +28 -18
- package/esm/chart/area/GradientArea.js +14 -7
- package/esm/chart/area/SolidArea.js +6 -2
- package/esm/chart/area/__stories__/AreaChart.stories.js +47 -5
- package/esm/chart/axis/Axis.js +5 -41
- package/esm/chart/axis/XAxis.js +116 -47
- package/esm/chart/axis/YAxis.js +105 -26
- package/esm/chart/axis/__stories__/Axis.stories.js +324 -48
- package/esm/chart/bar/Bar.js +17 -15
- package/esm/chart/bar/BarChart.js +38 -33
- package/esm/chart/bar/BarPlot.js +40 -45
- package/esm/chart/bar/BarStack.js +92 -475
- package/esm/chart/bar/BarStackGroup.js +37 -27
- package/esm/chart/bar/DefaultBar.js +27 -18
- package/esm/chart/bar/DefaultBarStack.js +25 -9
- package/esm/chart/bar/__stories__/BarChart.stories.js +728 -54
- package/esm/chart/gradient/Gradient.js +2 -1
- package/esm/chart/index.js +1 -0
- package/esm/chart/legend/DefaultLegendEntry.js +42 -0
- package/esm/chart/legend/DefaultLegendShape.js +64 -0
- package/esm/chart/legend/Legend.js +59 -0
- package/esm/chart/legend/__stories__/Legend.stories.js +574 -0
- package/esm/chart/legend/index.js +3 -0
- package/esm/chart/line/DottedLine.js +6 -2
- package/esm/chart/line/Line.js +42 -38
- package/esm/chart/line/LineChart.js +36 -12
- package/esm/chart/line/SolidLine.js +6 -2
- package/esm/chart/line/__stories__/LineChart.stories.js +236 -590
- package/esm/chart/line/__stories__/ReferenceLine.stories.js +95 -1
- package/esm/chart/point/Point.js +35 -36
- package/esm/chart/scrubber/DefaultScrubberBeacon.js +41 -38
- package/esm/chart/scrubber/DefaultScrubberLabel.js +26 -10
- package/esm/chart/scrubber/Scrubber.js +67 -35
- package/esm/chart/scrubber/ScrubberAccessibilityView.js +177 -0
- package/esm/chart/scrubber/ScrubberBeaconGroup.js +30 -22
- package/esm/chart/scrubber/ScrubberBeaconLabelGroup.js +35 -8
- package/esm/chart/scrubber/ScrubberProvider.js +29 -24
- package/esm/chart/scrubber/__stories__/Scrubber.stories.js +946 -0
- package/esm/chart/utils/axis.js +88 -44
- package/esm/chart/utils/bar.js +820 -0
- package/esm/chart/utils/chart.js +34 -7
- package/esm/chart/utils/context.js +7 -0
- package/esm/chart/utils/gradient.js +8 -4
- package/esm/chart/utils/path.js +91 -61
- package/esm/chart/utils/point.js +92 -39
- package/esm/chart/utils/scale.js +13 -2
- package/esm/chart/utils/scrubber.js +12 -5
- package/esm/chart/utils/transition.js +108 -60
- package/esm/sparkline/Sparkline.js +2 -1
- package/esm/sparkline/SparklineArea.js +2 -1
- package/esm/sparkline/SparklineGradient.js +2 -1
- package/esm/sparkline/__figma__/Sparkline.figma.js +1 -1
- package/esm/sparkline/sparkline-interactive/SparklineInteractive.js +2 -1
- package/esm/sparkline/sparkline-interactive/__figma__/SparklineInteractive.figma.js +1 -1
- package/esm/sparkline/sparkline-interactive-header/__figma__/SparklineInteractiveHeader.figma.js +1 -1
- package/esm/sparkline/sparkline-interactive-header/__stories__/SparklineInteractiveHeader.stories.js +2 -0
- package/package.json +5 -6
- package/esm/chart/__stories__/Chart.stories.js +0 -77
|
@@ -23,25 +23,29 @@ export const ScrubberProvider = _ref => {
|
|
|
23
23
|
throw new Error('ScrubberProvider must be used within a ChartContext');
|
|
24
24
|
}
|
|
25
25
|
const {
|
|
26
|
+
layout,
|
|
26
27
|
getXSerializableScale,
|
|
27
|
-
|
|
28
|
+
getYSerializableScale,
|
|
29
|
+
getXAxis,
|
|
30
|
+
getYAxis
|
|
28
31
|
} = chartContext;
|
|
29
32
|
const scrubberPosition = useSharedValue(undefined);
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
+
const categoryAxisIsX = useMemo(() => layout !== 'horizontal', [layout]);
|
|
34
|
+
const categoryAxis = useMemo(() => categoryAxisIsX ? getXAxis() : getYAxis(), [categoryAxisIsX, getXAxis, getYAxis]);
|
|
35
|
+
const categoryScale = useMemo(() => categoryAxisIsX ? getXSerializableScale() : getYSerializableScale(), [categoryAxisIsX, getXSerializableScale, getYSerializableScale]);
|
|
36
|
+
const getDataIndexFromPosition = useCallback(touchPosition => {
|
|
33
37
|
'worklet';
|
|
34
38
|
|
|
35
|
-
if (!
|
|
36
|
-
if (
|
|
37
|
-
const [domainMin, domainMax] =
|
|
39
|
+
if (!categoryScale || !categoryAxis) return 0;
|
|
40
|
+
if (categoryScale.type === 'band') {
|
|
41
|
+
const [domainMin, domainMax] = categoryScale.domain;
|
|
38
42
|
const categoryCount = domainMax - domainMin + 1;
|
|
39
43
|
let closestIndex = 0;
|
|
40
44
|
let closestDistance = Infinity;
|
|
41
45
|
for (let i = 0; i < categoryCount; i++) {
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
44
|
-
const distance = Math.abs(
|
|
46
|
+
const categoryPos = getPointOnSerializableScale(i, categoryScale);
|
|
47
|
+
if (categoryPos !== undefined) {
|
|
48
|
+
const distance = Math.abs(touchPosition - categoryPos);
|
|
45
49
|
if (distance < closestDistance) {
|
|
46
50
|
closestDistance = distance;
|
|
47
51
|
closestIndex = i;
|
|
@@ -50,18 +54,17 @@ export const ScrubberProvider = _ref => {
|
|
|
50
54
|
}
|
|
51
55
|
return closestIndex;
|
|
52
56
|
} else {
|
|
53
|
-
// For numeric scales with axis data, find the nearest data point
|
|
54
|
-
const axisData =
|
|
57
|
+
// For numeric scales with axis data, find the nearest data point.
|
|
58
|
+
const axisData = categoryAxis.data;
|
|
55
59
|
if (axisData && Array.isArray(axisData) && typeof axisData[0] === 'number') {
|
|
56
|
-
// We have numeric axis data - find the closest data point
|
|
57
60
|
const numericData = axisData;
|
|
58
61
|
let closestIndex = 0;
|
|
59
62
|
let closestDistance = Infinity;
|
|
60
63
|
for (let i = 0; i < numericData.length; i++) {
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
64
|
-
const distance = Math.abs(
|
|
64
|
+
const dataValue = numericData[i];
|
|
65
|
+
const categoryPos = getPointOnSerializableScale(dataValue, categoryScale);
|
|
66
|
+
if (categoryPos !== undefined) {
|
|
67
|
+
const distance = Math.abs(touchPosition - categoryPos);
|
|
65
68
|
if (distance < closestDistance) {
|
|
66
69
|
closestDistance = distance;
|
|
67
70
|
closestIndex = i;
|
|
@@ -71,13 +74,13 @@ export const ScrubberProvider = _ref => {
|
|
|
71
74
|
return closestIndex;
|
|
72
75
|
} else {
|
|
73
76
|
var _domain$min, _domain$max;
|
|
74
|
-
const
|
|
75
|
-
const dataIndex = Math.round(
|
|
76
|
-
const domain =
|
|
77
|
+
const dataValue = invertSerializableScale(touchPosition, categoryScale);
|
|
78
|
+
const dataIndex = Math.round(dataValue);
|
|
79
|
+
const domain = categoryAxis.domain;
|
|
77
80
|
return Math.max((_domain$min = domain.min) != null ? _domain$min : 0, Math.min(dataIndex, (_domain$max = domain.max) != null ? _domain$max : 0));
|
|
78
81
|
}
|
|
79
82
|
}
|
|
80
|
-
}, [
|
|
83
|
+
}, [categoryAxis, categoryScale]);
|
|
81
84
|
const handleStartEndHaptics = useCallback(() => {
|
|
82
85
|
void Haptics.lightImpact();
|
|
83
86
|
}, []);
|
|
@@ -95,13 +98,15 @@ export const ScrubberProvider = _ref => {
|
|
|
95
98
|
|
|
96
99
|
// Android does not trigger onUpdate when the gesture starts. This achieves consistent behavior across both iOS and Android
|
|
97
100
|
if (Platform.OS === 'android') {
|
|
98
|
-
const
|
|
101
|
+
const pointerPosition = categoryAxisIsX ? event.x : event.y;
|
|
102
|
+
const newScrubberPosition = getDataIndexFromPosition(pointerPosition);
|
|
99
103
|
if (newScrubberPosition !== scrubberPosition.value) {
|
|
100
104
|
scrubberPosition.value = newScrubberPosition;
|
|
101
105
|
}
|
|
102
106
|
}
|
|
103
107
|
}).onUpdate(function onUpdate(event) {
|
|
104
|
-
const
|
|
108
|
+
const pointerPosition = categoryAxisIsX ? event.x : event.y;
|
|
109
|
+
const newScrubberPosition = getDataIndexFromPosition(pointerPosition);
|
|
105
110
|
if (newScrubberPosition !== scrubberPosition.value) {
|
|
106
111
|
scrubberPosition.value = newScrubberPosition;
|
|
107
112
|
}
|
|
@@ -114,7 +119,7 @@ export const ScrubberProvider = _ref => {
|
|
|
114
119
|
if (enableScrubbing) {
|
|
115
120
|
scrubberPosition.value = undefined;
|
|
116
121
|
}
|
|
117
|
-
}), [allowOverflowGestures, handleStartEndHaptics,
|
|
122
|
+
}), [allowOverflowGestures, handleStartEndHaptics, getDataIndexFromPosition, categoryAxisIsX, scrubberPosition, enableScrubbing]);
|
|
118
123
|
const contextValue = useMemo(() => ({
|
|
119
124
|
enableScrubbing: !!enableScrubbing,
|
|
120
125
|
scrubberPosition
|