@coinbase/cds-web-visualization 3.4.0-beta.5 → 3.4.0-beta.6
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 +9 -0
- package/dts/chart/CartesianChart.d.ts +38 -2
- package/dts/chart/CartesianChart.d.ts.map +1 -1
- package/dts/chart/Path.d.ts +27 -7
- package/dts/chart/Path.d.ts.map +1 -1
- package/dts/chart/PeriodSelector.d.ts +0 -4
- package/dts/chart/PeriodSelector.d.ts.map +1 -1
- package/dts/chart/area/Area.d.ts +54 -24
- package/dts/chart/area/Area.d.ts.map +1 -1
- package/dts/chart/area/AreaChart.d.ts +33 -6
- package/dts/chart/area/AreaChart.d.ts.map +1 -1
- package/dts/chart/area/DottedArea.d.ts +21 -44
- package/dts/chart/area/DottedArea.d.ts.map +1 -1
- package/dts/chart/area/GradientArea.d.ts +21 -12
- package/dts/chart/area/GradientArea.d.ts.map +1 -1
- package/dts/chart/area/SolidArea.d.ts +16 -1
- package/dts/chart/area/SolidArea.d.ts.map +1 -1
- package/dts/chart/axis/Axis.d.ts +89 -43
- package/dts/chart/axis/Axis.d.ts.map +1 -1
- package/dts/chart/axis/DefaultAxisTickLabel.d.ts +8 -0
- package/dts/chart/axis/DefaultAxisTickLabel.d.ts.map +1 -0
- package/dts/chart/axis/XAxis.d.ts +1 -1
- package/dts/chart/axis/XAxis.d.ts.map +1 -1
- package/dts/chart/axis/YAxis.d.ts +1 -1
- package/dts/chart/axis/YAxis.d.ts.map +1 -1
- package/dts/chart/axis/index.d.ts +1 -0
- package/dts/chart/axis/index.d.ts.map +1 -1
- package/dts/chart/bar/Bar.d.ts +16 -13
- package/dts/chart/bar/Bar.d.ts.map +1 -1
- package/dts/chart/bar/BarChart.d.ts +17 -8
- 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 +40 -48
- package/dts/chart/bar/BarStack.d.ts.map +1 -1
- package/dts/chart/bar/BarStackGroup.d.ts +1 -0
- 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 +35 -0
- package/dts/chart/gradient/Gradient.d.ts.map +1 -0
- package/dts/chart/gradient/index.d.ts +2 -0
- package/dts/chart/gradient/index.d.ts.map +1 -0
- package/dts/chart/index.d.ts +2 -1
- package/dts/chart/index.d.ts.map +1 -1
- package/dts/chart/line/DefaultReferenceLineLabel.d.ts +9 -0
- package/dts/chart/line/DefaultReferenceLineLabel.d.ts.map +1 -0
- package/dts/chart/line/DottedLine.d.ts +15 -3
- package/dts/chart/line/DottedLine.d.ts.map +1 -1
- package/dts/chart/line/Line.d.ts +70 -28
- package/dts/chart/line/Line.d.ts.map +1 -1
- package/dts/chart/line/LineChart.d.ts +26 -8
- package/dts/chart/line/LineChart.d.ts.map +1 -1
- package/dts/chart/line/ReferenceLine.d.ts +85 -44
- package/dts/chart/line/ReferenceLine.d.ts.map +1 -1
- package/dts/chart/line/SolidLine.d.ts +14 -3
- package/dts/chart/line/SolidLine.d.ts.map +1 -1
- package/dts/chart/line/index.d.ts +1 -1
- package/dts/chart/line/index.d.ts.map +1 -1
- package/dts/chart/point/DefaultPointLabel.d.ts +10 -0
- package/dts/chart/point/DefaultPointLabel.d.ts.map +1 -0
- package/dts/chart/point/Point.d.ts +201 -0
- package/dts/chart/point/Point.d.ts.map +1 -0
- package/dts/chart/point/index.d.ts +3 -0
- package/dts/chart/point/index.d.ts.map +1 -0
- package/dts/chart/scrubber/DefaultScrubberBeacon.d.ts +24 -0
- package/dts/chart/scrubber/DefaultScrubberBeacon.d.ts.map +1 -0
- package/dts/chart/scrubber/DefaultScrubberBeaconLabel.d.ts +12 -0
- package/dts/chart/scrubber/DefaultScrubberBeaconLabel.d.ts.map +1 -0
- package/dts/chart/scrubber/DefaultScrubberLabel.d.ts +10 -0
- package/dts/chart/scrubber/DefaultScrubberLabel.d.ts.map +1 -0
- package/dts/chart/scrubber/Scrubber.d.ts +203 -64
- package/dts/chart/scrubber/Scrubber.d.ts.map +1 -1
- package/dts/chart/scrubber/ScrubberBeaconGroup.d.ts +70 -0
- package/dts/chart/scrubber/ScrubberBeaconGroup.d.ts.map +1 -0
- package/dts/chart/scrubber/ScrubberBeaconLabelGroup.d.ts +32 -0
- package/dts/chart/scrubber/ScrubberBeaconLabelGroup.d.ts.map +1 -0
- package/dts/chart/scrubber/index.d.ts +3 -0
- package/dts/chart/scrubber/index.d.ts.map +1 -1
- package/dts/chart/text/ChartText.d.ts +46 -43
- package/dts/chart/text/ChartText.d.ts.map +1 -1
- package/dts/chart/text/{SmartChartTextGroup.d.ts → ChartTextGroup.d.ts} +9 -3
- package/dts/chart/text/ChartTextGroup.d.ts.map +1 -0
- package/dts/chart/text/index.d.ts +1 -1
- package/dts/chart/text/index.d.ts.map +1 -1
- package/dts/chart/utils/chart.d.ts +27 -7
- package/dts/chart/utils/chart.d.ts.map +1 -1
- package/dts/chart/utils/context.d.ts +6 -0
- package/dts/chart/utils/context.d.ts.map +1 -1
- package/dts/chart/utils/gradient.d.ts +104 -0
- package/dts/chart/utils/gradient.d.ts.map +1 -0
- package/dts/chart/utils/index.d.ts +4 -0
- package/dts/chart/utils/index.d.ts.map +1 -1
- package/dts/chart/utils/interpolate.d.ts +112 -0
- package/dts/chart/utils/interpolate.d.ts.map +1 -0
- package/dts/chart/utils/path.d.ts +24 -1
- package/dts/chart/utils/path.d.ts.map +1 -1
- package/dts/chart/utils/point.d.ts +29 -0
- package/dts/chart/utils/point.d.ts.map +1 -1
- package/dts/chart/utils/scrubber.d.ts +39 -0
- package/dts/chart/utils/scrubber.d.ts.map +1 -0
- package/dts/chart/utils/transition.d.ts +65 -0
- package/dts/chart/utils/transition.d.ts.map +1 -0
- package/esm/chart/CartesianChart.js +140 -85
- package/esm/chart/Path.js +51 -46
- package/esm/chart/PeriodSelector.js +4 -18
- package/esm/chart/area/Area.js +24 -34
- package/esm/chart/area/AreaChart.js +24 -15
- package/esm/chart/area/DottedArea.js +35 -89
- package/esm/chart/area/GradientArea.js +34 -80
- package/esm/chart/area/SolidArea.js +29 -11
- package/esm/chart/axis/Axis.js +4 -25
- package/esm/chart/axis/DefaultAxisTickLabel.js +15 -0
- package/esm/chart/axis/XAxis.js +53 -36
- package/esm/chart/axis/YAxis.js +55 -32
- package/esm/chart/axis/index.js +1 -0
- package/esm/chart/bar/Bar.js +3 -1
- package/esm/chart/bar/BarChart.js +15 -32
- package/esm/chart/bar/BarPlot.js +3 -2
- package/esm/chart/bar/BarStack.js +65 -23
- package/esm/chart/bar/BarStackGroup.js +7 -17
- package/esm/chart/bar/DefaultBar.js +4 -7
- package/esm/chart/bar/DefaultBarStack.js +5 -7
- package/esm/chart/gradient/Gradient.js +104 -0
- package/esm/chart/gradient/index.js +1 -0
- package/esm/chart/index.js +2 -1
- package/esm/chart/line/DefaultReferenceLineLabel.js +81 -0
- package/esm/chart/line/DottedLine.js +38 -17
- package/esm/chart/line/Line.js +96 -70
- package/esm/chart/line/LineChart.js +18 -6
- package/esm/chart/line/ReferenceLine.js +34 -41
- package/esm/chart/line/SolidLine.js +36 -15
- package/esm/chart/line/index.js +1 -1
- package/esm/chart/{line/GradientLine.js → point/DefaultPointLabel.js} +31 -45
- package/esm/chart/point/Point.css +2 -0
- package/esm/chart/{Point.js → point/Point.js} +66 -57
- package/esm/chart/point/index.js +2 -0
- package/esm/chart/scrubber/DefaultScrubberBeacon.js +155 -0
- package/esm/chart/scrubber/{ScrubberBeaconLabel.js → DefaultScrubberBeaconLabel.js} +23 -10
- package/esm/chart/scrubber/DefaultScrubberLabel.js +30 -0
- package/esm/chart/scrubber/Scrubber.js +98 -392
- package/esm/chart/scrubber/ScrubberBeaconGroup.js +166 -0
- package/esm/chart/scrubber/ScrubberBeaconLabelGroup.js +186 -0
- package/esm/chart/scrubber/index.js +3 -1
- package/esm/chart/text/ChartText.js +13 -19
- package/esm/chart/text/{SmartChartTextGroup.js → ChartTextGroup.js} +4 -3
- package/esm/chart/text/index.js +1 -1
- package/esm/chart/utils/chart.js +29 -3
- package/esm/chart/utils/gradient.js +257 -0
- package/esm/chart/utils/index.js +4 -0
- package/esm/chart/utils/interpolate.js +644 -0
- package/esm/chart/utils/path.js +32 -9
- package/esm/chart/utils/point.js +69 -0
- package/esm/chart/utils/scrubber.js +132 -0
- package/esm/chart/utils/transition.js +111 -0
- package/package.json +5 -5
- package/dts/chart/Point.d.ts +0 -153
- package/dts/chart/Point.d.ts.map +0 -1
- package/dts/chart/line/GradientLine.d.ts +0 -42
- package/dts/chart/line/GradientLine.d.ts.map +0 -1
- package/dts/chart/scrubber/ScrubberBeacon.d.ts +0 -93
- package/dts/chart/scrubber/ScrubberBeacon.d.ts.map +0 -1
- package/dts/chart/scrubber/ScrubberBeaconLabel.d.ts +0 -7
- package/dts/chart/scrubber/ScrubberBeaconLabel.d.ts.map +0 -1
- package/dts/chart/text/SmartChartTextGroup.d.ts.map +0 -1
- package/esm/chart/Point.css +0 -2
- package/esm/chart/scrubber/ScrubberBeacon.js +0 -195
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/interpolate.ts"],"names":[],"mappings":"AAIA,KAAK,WAAW,GACZ,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AAER,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAoIF;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,WAAW,EACzB,UAAU,EAAE,WAAW,EACvB,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW,EAAE,CAWf;AAkJD,KAAK,gBAAgB,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,KAAK,OAAO,CAAC;AAmHxF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,EAAE,CA+BlF;AAED,KAAK,kBAAkB,GAAG;IACxB,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EAChD,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EAChD,kBAAkB,CAAC,EAAE,gBAAgB,GAAG,kBAAkB,GACzD,CAAC,CAAC,EAAE,MAAM,KAAK,WAAW,EAAE,CAoG9B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5B,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5B,kBAAkB,CAAC,EAAE,gBAAgB,GAAG,kBAAkB,GACzD,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAgDvB"}
|
|
@@ -24,7 +24,7 @@ export declare const getPathCurveFunction: (
|
|
|
24
24
|
* @example
|
|
25
25
|
* ```typescript
|
|
26
26
|
* const chartScale = getChartScale({ chartRect, domain, range, xScale, yScale });
|
|
27
|
-
* const path = getLinePath({ data: [1, 2, 3], chartScale, curve: '
|
|
27
|
+
* const path = getLinePath({ data: [1, 2, 3], chartScale, curve: 'bump' });
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
export declare const getLinePath: ({
|
|
@@ -33,6 +33,7 @@ export declare const getLinePath: ({
|
|
|
33
33
|
xScale,
|
|
34
34
|
yScale,
|
|
35
35
|
xData,
|
|
36
|
+
connectNulls,
|
|
36
37
|
}: {
|
|
37
38
|
data: (
|
|
38
39
|
| number
|
|
@@ -46,6 +47,11 @@ export declare const getLinePath: ({
|
|
|
46
47
|
xScale: ChartScaleFunction;
|
|
47
48
|
yScale: ChartScaleFunction;
|
|
48
49
|
xData?: number[];
|
|
50
|
+
/**
|
|
51
|
+
* When true, null values are skipped and the line connects across gaps.
|
|
52
|
+
* By default, null values create gaps in the line.
|
|
53
|
+
*/
|
|
54
|
+
connectNulls?: boolean;
|
|
49
55
|
}) => string;
|
|
50
56
|
/**
|
|
51
57
|
* Generates an SVG area path string from data using chart scale functions.
|
|
@@ -75,13 +81,30 @@ export declare const getAreaPath: ({
|
|
|
75
81
|
xScale,
|
|
76
82
|
yScale,
|
|
77
83
|
xData,
|
|
84
|
+
connectNulls,
|
|
78
85
|
}: {
|
|
79
86
|
data: (number | null)[] | Array<[number, number] | null>;
|
|
80
87
|
xScale: ChartScaleFunction;
|
|
81
88
|
yScale: ChartScaleFunction;
|
|
82
89
|
curve: ChartPathCurveType;
|
|
83
90
|
xData?: number[];
|
|
91
|
+
/**
|
|
92
|
+
* When true, null values are skipped and the area connects across gaps.
|
|
93
|
+
* By default null values create gaps in the area.
|
|
94
|
+
*/
|
|
95
|
+
connectNulls?: boolean;
|
|
84
96
|
}) => string;
|
|
97
|
+
/**
|
|
98
|
+
* Converts line coordinates to an SVG path string.
|
|
99
|
+
* Useful for rendering axis lines and tick marks.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const path = lineToPath(0, 0, 100, 100);
|
|
104
|
+
* // Returns: "M 0 0 L 100 100"
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare const lineToPath: (x1: number, y1: number, x2: number, y2: number) => string;
|
|
85
108
|
/**
|
|
86
109
|
* Creates an SVG path string for a rectangle with selective corner rounding.
|
|
87
110
|
* Useful for creating bars in charts with optional rounded corners.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/path.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,SAAS,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,UAAU,GACV,SAAS,GACT,MAAM,GACN,YAAY,GACZ,WAAW,CAAC;AAEhB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAO,kBAA6B,oCAsBxE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/path.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,SAAS,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,UAAU,GACV,SAAS,GACT,MAAM,GACN,YAAY,GACZ,WAAW,CAAC;AAEhB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAO,kBAA6B,oCAsBxE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,uDAOzB;IACD,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IACnD,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,KAAG,MAoBH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,GAAI,uDAOzB;IACD,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,KAAG,MAoFH,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,KAAG,MAE3E,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,GACrB,GAAG,MAAM,EACT,GAAG,MAAM,EACT,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,UAAU,OAAO,EACjB,aAAa,OAAO,KACnB,MA0BF,CAAC"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
import type { TextHorizontalAlignment, TextVerticalAlignment } from '../text';
|
|
1
2
|
import { type ChartScaleFunction } from './scale';
|
|
3
|
+
/**
|
|
4
|
+
* Position a label should be placed relative to the point
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* 'top' would have the label be located above the point itself,
|
|
8
|
+
* and thus the vertical alignment of that text would be bottom.
|
|
9
|
+
*/
|
|
10
|
+
export type PointLabelPosition = 'top' | 'bottom' | 'left' | 'right' | 'center';
|
|
2
11
|
/**
|
|
3
12
|
* Get a point from a data value and a scale.
|
|
4
13
|
* @note for categorical scales, the point will be centered within the band.
|
|
@@ -72,4 +81,24 @@ export declare const projectPoints: ({
|
|
|
72
81
|
x: number;
|
|
73
82
|
y: number;
|
|
74
83
|
} | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Determines text alignment based on label position.
|
|
86
|
+
* For example, a 'top' position needs the text aligned to the 'bottom' so it appears above the point.
|
|
87
|
+
*/
|
|
88
|
+
export declare const getAlignmentFromPosition: (position: PointLabelPosition) => {
|
|
89
|
+
horizontalAlignment: TextHorizontalAlignment;
|
|
90
|
+
verticalAlignment: TextVerticalAlignment;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Calculates the final label coordinates by applying offset based on position.
|
|
94
|
+
*/
|
|
95
|
+
export declare const getLabelCoordinates: (
|
|
96
|
+
x: number,
|
|
97
|
+
y: number,
|
|
98
|
+
position: PointLabelPosition,
|
|
99
|
+
offset: number,
|
|
100
|
+
) => {
|
|
101
|
+
x: number;
|
|
102
|
+
y: number;
|
|
103
|
+
};
|
|
75
104
|
//# sourceMappingURL=point.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAkD,MAAM,SAAS,CAAC;AAElG;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,EAAE,OAAO,kBAAkB,KAAG,MAc9E,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,GAAI,2BAK1B;IACD,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;CAC5B,KAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAEzB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,yCAM3B;IACD,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;CAC5B,KAAG,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqDxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/point.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE9E,OAAO,EAAE,KAAK,kBAAkB,EAAkD,MAAM,SAAS,CAAC;AAElG;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,EAAE,OAAO,kBAAkB,KAAG,MAc9E,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,GAAI,2BAK1B;IACD,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;CAC5B,KAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAEzB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,yCAM3B;IACD,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;CAC5B,KAAG,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqDxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,kBAAkB,KAC3B;IAAE,mBAAmB,EAAE,uBAAuB,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,CAAA;CAyB1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,GAAG,MAAM,EACT,GAAG,MAAM,EACT,UAAU,kBAAkB,EAC5B,QAAQ,MAAM,KACb;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CA0BxB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Rect } from '@coinbase/cds-common/types';
|
|
2
|
+
export type ScrubberLabelPosition = 'left' | 'right';
|
|
3
|
+
export type LabelPosition = {
|
|
4
|
+
seriesId: string;
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
};
|
|
8
|
+
export type LabelDimensions = {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Determines which side (left/right) to place scrubber labels based on available space.
|
|
14
|
+
* Prefers right side, switches to left when labels would overflow.
|
|
15
|
+
*/
|
|
16
|
+
export declare const getLabelPosition: (
|
|
17
|
+
beaconX: number,
|
|
18
|
+
maxLabelWidth: number,
|
|
19
|
+
drawingArea: Rect,
|
|
20
|
+
xOffset?: number,
|
|
21
|
+
) => ScrubberLabelPosition;
|
|
22
|
+
type LabelDimension = {
|
|
23
|
+
seriesId: string;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
preferredX: number;
|
|
27
|
+
preferredY: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Calculates Y positions for all labels avoiding overlaps while maintaining order.
|
|
31
|
+
*/
|
|
32
|
+
export declare const calculateLabelYPositions: (
|
|
33
|
+
dimensions: LabelDimension[],
|
|
34
|
+
drawingArea: Rect,
|
|
35
|
+
labelHeight: number,
|
|
36
|
+
minGap: number,
|
|
37
|
+
) => Map<string, number>;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=scrubber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrubber.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/scrubber.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,eAAe,MAAM,EACrB,aAAa,IAAI,EACjB,UAAS,MAAW,KACnB,qBASF,CAAC;AAQF,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GACnC,YAAY,cAAc,EAAE,EAC5B,aAAa,IAAI,EACjB,aAAa,MAAM,EACnB,QAAQ,MAAM,KACb,GAAG,CAAC,MAAM,EAAE,MAAM,CAoIpB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type MotionValue, type Transition } from 'framer-motion';
|
|
2
|
+
/**
|
|
3
|
+
* Default transition configuration used across all chart components.
|
|
4
|
+
*/
|
|
5
|
+
export declare const defaultTransition: Transition;
|
|
6
|
+
/**
|
|
7
|
+
* Duration in seconds for accessory elements to fade in.
|
|
8
|
+
*/
|
|
9
|
+
export declare const accessoryFadeTransitionDuration = 0.15;
|
|
10
|
+
/**
|
|
11
|
+
* Delay in seconds before accessory elements fade in.
|
|
12
|
+
*/
|
|
13
|
+
export declare const accessoryFadeTransitionDelay = 0.35;
|
|
14
|
+
/**
|
|
15
|
+
* Hook for path animation state and transitions.
|
|
16
|
+
*
|
|
17
|
+
* @param currentPath - Current target path to animate to
|
|
18
|
+
* @param initialPath - Initial path for enter animation. When provided, the first animation will go from initialPath to currentPath.
|
|
19
|
+
* @param transition - Transition configuration
|
|
20
|
+
* @returns MotionValue containing the current interpolated path string
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Simple path transition
|
|
24
|
+
* const animatedPath = usePathTransition({
|
|
25
|
+
* currentPath: d ?? '',
|
|
26
|
+
* transition: {
|
|
27
|
+
* type: 'spring',
|
|
28
|
+
* stiffness: 300,
|
|
29
|
+
* damping: 20
|
|
30
|
+
* }
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Time based animation
|
|
35
|
+
* const animatedPath = usePathTransition({
|
|
36
|
+
* currentPath: targetPath,
|
|
37
|
+
* initialPath: baselinePath,
|
|
38
|
+
* transition: {
|
|
39
|
+
* type: 'tween',
|
|
40
|
+
* duration: 0.3,
|
|
41
|
+
* ease: 'easeInOut'
|
|
42
|
+
* }
|
|
43
|
+
* });
|
|
44
|
+
*/
|
|
45
|
+
export declare const usePathTransition: ({
|
|
46
|
+
currentPath,
|
|
47
|
+
initialPath,
|
|
48
|
+
transition,
|
|
49
|
+
}: {
|
|
50
|
+
/**
|
|
51
|
+
* Current target path to animate to.
|
|
52
|
+
*/
|
|
53
|
+
currentPath: string;
|
|
54
|
+
/**
|
|
55
|
+
* Initial path for enter animation.
|
|
56
|
+
* When provided, the first animation will go from initialPath to currentPath.
|
|
57
|
+
* If not provided, defaults to currentPath (no enter animation).
|
|
58
|
+
*/
|
|
59
|
+
initialPath?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Transition configuration
|
|
62
|
+
*/
|
|
63
|
+
transition?: Transition;
|
|
64
|
+
}) => MotionValue<string>;
|
|
65
|
+
//# sourceMappingURL=transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../src/chart/utils/transition.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,UAAU,EAIhB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,UAK/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,iBAAiB,GAAI,2CAI/B;IACD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,KAAG,WAAW,CAAC,MAAM,CAwDrB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const _excluded = ["series", "children", "animate", "xAxis", "yAxis", "inset", "enableScrubbing", "onScrubberPositionChange", "width", "height", "className", "style"];
|
|
1
|
+
const _excluded = ["series", "children", "animate", "xAxis", "yAxis", "inset", "enableScrubbing", "onScrubberPositionChange", "width", "height", "className", "classNames", "style", "styles"];
|
|
2
2
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
4
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -20,15 +20,17 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
20
20
|
series,
|
|
21
21
|
children,
|
|
22
22
|
animate = true,
|
|
23
|
-
xAxis:
|
|
24
|
-
yAxis:
|
|
25
|
-
inset
|
|
23
|
+
xAxis: xAxisConfigProp,
|
|
24
|
+
yAxis: yAxisConfigProp,
|
|
25
|
+
inset,
|
|
26
26
|
enableScrubbing,
|
|
27
27
|
onScrubberPositionChange,
|
|
28
28
|
width = '100%',
|
|
29
29
|
height = '100%',
|
|
30
30
|
className,
|
|
31
|
-
|
|
31
|
+
classNames,
|
|
32
|
+
style,
|
|
33
|
+
styles
|
|
32
34
|
} = _ref,
|
|
33
35
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
34
36
|
const {
|
|
@@ -36,15 +38,13 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
36
38
|
width: chartWidth,
|
|
37
39
|
height: chartHeight
|
|
38
40
|
} = useDimensions();
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
return getChartInset(insetInput, defaultChartInset);
|
|
42
|
-
}, [insetInput]);
|
|
41
|
+
const svgRef = useRef(null);
|
|
42
|
+
const calculatedInset = useMemo(() => getChartInset(inset, defaultChartInset), [inset]);
|
|
43
43
|
|
|
44
44
|
// Axis configs store the properties of each axis, such as id, scale type, domain limit, etc.
|
|
45
45
|
// We only support 1 x axis but allow for multiple y axes.
|
|
46
|
-
const xAxisConfig = useMemo(() => getAxisConfig('x',
|
|
47
|
-
const yAxisConfig = useMemo(() => getAxisConfig('y',
|
|
46
|
+
const xAxisConfig = useMemo(() => getAxisConfig('x', xAxisConfigProp)[0], [xAxisConfigProp]);
|
|
47
|
+
const yAxisConfig = useMemo(() => getAxisConfig('y', yAxisConfigProp), [yAxisConfigProp]);
|
|
48
48
|
const {
|
|
49
49
|
renderedAxes,
|
|
50
50
|
registerAxis,
|
|
@@ -59,10 +59,10 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
59
59
|
height: 0
|
|
60
60
|
};
|
|
61
61
|
const totalInset = {
|
|
62
|
-
top:
|
|
63
|
-
right:
|
|
64
|
-
bottom:
|
|
65
|
-
left:
|
|
62
|
+
top: calculatedInset.top + axisPadding.top,
|
|
63
|
+
right: calculatedInset.right + axisPadding.right,
|
|
64
|
+
bottom: calculatedInset.bottom + axisPadding.bottom,
|
|
65
|
+
left: calculatedInset.left + axisPadding.left
|
|
66
66
|
};
|
|
67
67
|
const availableWidth = chartWidth - totalInset.left - totalInset.right;
|
|
68
68
|
const availableHeight = chartHeight - totalInset.top - totalInset.bottom;
|
|
@@ -72,11 +72,15 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
72
72
|
width: availableWidth > 0 ? availableWidth : 0,
|
|
73
73
|
height: availableHeight > 0 ? availableHeight : 0
|
|
74
74
|
};
|
|
75
|
-
}, [chartHeight, chartWidth,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
}, [chartHeight, chartWidth, calculatedInset, axisPadding]);
|
|
76
|
+
const {
|
|
77
|
+
xAxis,
|
|
78
|
+
xScale
|
|
79
|
+
} = useMemo(() => {
|
|
80
|
+
if (!chartRect || chartRect.width <= 0 || chartRect.height <= 0) return {
|
|
81
|
+
xAxis: undefined,
|
|
82
|
+
xScale: undefined
|
|
83
|
+
};
|
|
80
84
|
const domain = getAxisDomain(xAxisConfig, series !== null && series !== void 0 ? series : [], 'x');
|
|
81
85
|
const range = getAxisRange(xAxisConfig, chartRect, 'x');
|
|
82
86
|
const axisConfig = {
|
|
@@ -87,11 +91,43 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
87
91
|
categoryPadding: xAxisConfig.categoryPadding,
|
|
88
92
|
domainLimit: xAxisConfig.domainLimit
|
|
89
93
|
};
|
|
90
|
-
|
|
94
|
+
|
|
95
|
+
// Create the scale
|
|
96
|
+
const scale = getAxisScale({
|
|
97
|
+
config: axisConfig,
|
|
98
|
+
type: 'x',
|
|
99
|
+
range: axisConfig.range,
|
|
100
|
+
dataDomain: axisConfig.domain
|
|
101
|
+
});
|
|
102
|
+
if (!scale) return {
|
|
103
|
+
xAxis: undefined,
|
|
104
|
+
xScale: undefined
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// Update axis config with actual scale domain (after .nice() or other adjustments)
|
|
108
|
+
const scaleDomain = scale.domain();
|
|
109
|
+
const actualDomain = Array.isArray(scaleDomain) && scaleDomain.length === 2 ? {
|
|
110
|
+
min: scaleDomain[0],
|
|
111
|
+
max: scaleDomain[1]
|
|
112
|
+
} : axisConfig.domain;
|
|
113
|
+
const finalAxisConfig = _objectSpread(_objectSpread({}, axisConfig), {}, {
|
|
114
|
+
domain: actualDomain
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
xAxis: finalAxisConfig,
|
|
118
|
+
xScale: scale
|
|
119
|
+
};
|
|
91
120
|
}, [xAxisConfig, series, chartRect]);
|
|
92
|
-
const
|
|
121
|
+
const {
|
|
122
|
+
yAxes,
|
|
123
|
+
yScales
|
|
124
|
+
} = useMemo(() => {
|
|
93
125
|
const axes = new Map();
|
|
94
|
-
|
|
126
|
+
const scales = new Map();
|
|
127
|
+
if (!chartRect || chartRect.width <= 0 || chartRect.height <= 0) return {
|
|
128
|
+
yAxes: axes,
|
|
129
|
+
yScales: scales
|
|
130
|
+
};
|
|
95
131
|
yAxisConfig.forEach(axisParam => {
|
|
96
132
|
var _axisParam$id, _series$filter, _axisParam$domainLimi;
|
|
97
133
|
const axisId = (_axisParam$id = axisParam.id) !== null && _axisParam$id !== void 0 ? _axisParam$id : defaultAxisId;
|
|
@@ -102,36 +138,19 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
102
138
|
return ((_s$yAxisId = s.yAxisId) !== null && _s$yAxisId !== void 0 ? _s$yAxisId : defaultAxisId) === axisId;
|
|
103
139
|
})) !== null && _series$filter !== void 0 ? _series$filter : [];
|
|
104
140
|
|
|
105
|
-
// Calculate domain and range
|
|
106
|
-
const
|
|
141
|
+
// Calculate domain and range
|
|
142
|
+
const dataDomain = getAxisDomain(axisParam, relevantSeries, 'y');
|
|
107
143
|
const range = getAxisRange(axisParam, chartRect, 'y');
|
|
108
|
-
|
|
144
|
+
const axisConfig = {
|
|
109
145
|
scaleType: axisParam.scaleType,
|
|
110
|
-
domain,
|
|
146
|
+
domain: dataDomain,
|
|
111
147
|
range,
|
|
112
148
|
data: axisParam.data,
|
|
113
149
|
categoryPadding: axisParam.categoryPadding,
|
|
114
150
|
domainLimit: (_axisParam$domainLimi = axisParam.domainLimit) !== null && _axisParam$domainLimi !== void 0 ? _axisParam$domainLimi : 'nice'
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
return axes;
|
|
118
|
-
}, [yAxisConfig, series, chartRect]);
|
|
151
|
+
};
|
|
119
152
|
|
|
120
|
-
|
|
121
|
-
// They are calculated here based on the above axes.
|
|
122
|
-
const xScale = useMemo(() => {
|
|
123
|
-
if (!chartRect || chartRect.width <= 0 || chartRect.height <= 0 || xAxis === undefined) return undefined;
|
|
124
|
-
return getAxisScale({
|
|
125
|
-
config: xAxis,
|
|
126
|
-
type: 'x',
|
|
127
|
-
range: xAxis.range,
|
|
128
|
-
dataDomain: xAxis.domain
|
|
129
|
-
});
|
|
130
|
-
}, [chartRect, xAxis]);
|
|
131
|
-
const yScales = useMemo(() => {
|
|
132
|
-
const scales = new Map();
|
|
133
|
-
if (!chartRect || chartRect.width <= 0 || chartRect.height <= 0) return scales;
|
|
134
|
-
yAxes.forEach((axisConfig, axisId) => {
|
|
153
|
+
// Create the scale
|
|
135
154
|
const scale = getAxisScale({
|
|
136
155
|
config: axisConfig,
|
|
137
156
|
type: 'y',
|
|
@@ -140,10 +159,23 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
140
159
|
});
|
|
141
160
|
if (scale) {
|
|
142
161
|
scales.set(axisId, scale);
|
|
162
|
+
|
|
163
|
+
// Update axis config with actual scale domain (after .nice() or other adjustments)
|
|
164
|
+
const scaleDomain = scale.domain();
|
|
165
|
+
const actualDomain = Array.isArray(scaleDomain) && scaleDomain.length === 2 ? {
|
|
166
|
+
min: scaleDomain[0],
|
|
167
|
+
max: scaleDomain[1]
|
|
168
|
+
} : axisConfig.domain;
|
|
169
|
+
axes.set(axisId, _objectSpread(_objectSpread({}, axisConfig), {}, {
|
|
170
|
+
domain: actualDomain
|
|
171
|
+
}));
|
|
143
172
|
}
|
|
144
173
|
});
|
|
145
|
-
return
|
|
146
|
-
|
|
174
|
+
return {
|
|
175
|
+
yAxes: axes,
|
|
176
|
+
yScales: scales
|
|
177
|
+
};
|
|
178
|
+
}, [yAxisConfig, series, chartRect]);
|
|
147
179
|
const getXAxis = useCallback(() => xAxis, [xAxis]);
|
|
148
180
|
const getYAxis = useCallback(id => yAxes.get(id !== null && id !== void 0 ? id : defaultAxisId), [yAxes]);
|
|
149
181
|
const getXScale = useCallback(() => xScale, [xScale]);
|
|
@@ -157,6 +189,20 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
157
189
|
if (!seriesId) return undefined;
|
|
158
190
|
return stackedDataMap.get(seriesId);
|
|
159
191
|
}, [stackedDataMap]);
|
|
192
|
+
const dataLength = useMemo(() => {
|
|
193
|
+
// If xAxis has categorical data, use that length
|
|
194
|
+
if (xAxisConfig.data && xAxisConfig.data.length > 0) {
|
|
195
|
+
return xAxisConfig.data.length;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Otherwise, find the longest series
|
|
199
|
+
if (!series || series.length === 0) return 0;
|
|
200
|
+
return series.reduce((max, s) => {
|
|
201
|
+
var _seriesData$length;
|
|
202
|
+
const seriesData = getStackedSeriesData(s.id);
|
|
203
|
+
return Math.max(max, (_seriesData$length = seriesData === null || seriesData === void 0 ? void 0 : seriesData.length) !== null && _seriesData$length !== void 0 ? _seriesData$length : 0);
|
|
204
|
+
}, 0);
|
|
205
|
+
}, [xAxisConfig.data, series, getStackedSeriesData]);
|
|
160
206
|
const getAxisBounds = useCallback(axisId => {
|
|
161
207
|
const axis = renderedAxes.get(axisId);
|
|
162
208
|
if (!axis || !chartRect) return;
|
|
@@ -168,7 +214,7 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
168
214
|
const offsetFromPreviousAxes = axesAtPosition.slice(0, axisIndex).reduce((sum, a) => sum + a.size, 0);
|
|
169
215
|
if (axis.position === 'top') {
|
|
170
216
|
// Position above the chart rect, accounting for user inset
|
|
171
|
-
const startY =
|
|
217
|
+
const startY = calculatedInset.top + offsetFromPreviousAxes;
|
|
172
218
|
return {
|
|
173
219
|
x: chartRect.x,
|
|
174
220
|
y: startY,
|
|
@@ -186,7 +232,7 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
186
232
|
};
|
|
187
233
|
} else if (axis.position === 'left') {
|
|
188
234
|
// Position to the left of the chart rect, accounting for user inset
|
|
189
|
-
const startX =
|
|
235
|
+
const startX = calculatedInset.left + offsetFromPreviousAxes;
|
|
190
236
|
return {
|
|
191
237
|
x: startX,
|
|
192
238
|
y: chartRect.y,
|
|
@@ -203,7 +249,7 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
203
249
|
height: chartRect.height
|
|
204
250
|
};
|
|
205
251
|
}
|
|
206
|
-
}, [renderedAxes, chartRect,
|
|
252
|
+
}, [renderedAxes, chartRect, calculatedInset]);
|
|
207
253
|
const contextValue = useMemo(() => ({
|
|
208
254
|
series: series !== null && series !== void 0 ? series : [],
|
|
209
255
|
getSeries,
|
|
@@ -216,43 +262,52 @@ export const CartesianChart = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, r
|
|
|
216
262
|
getXScale,
|
|
217
263
|
getYScale,
|
|
218
264
|
drawingArea: chartRect,
|
|
265
|
+
dataLength,
|
|
219
266
|
registerAxis,
|
|
220
267
|
unregisterAxis,
|
|
221
268
|
getAxisBounds
|
|
222
|
-
}), [series, getSeries, getStackedSeriesData, animate, chartWidth, chartHeight, getXAxis, getYAxis, getXScale, getYScale, chartRect, registerAxis, unregisterAxis, getAxisBounds]);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
269
|
+
}), [series, getSeries, getStackedSeriesData, animate, chartWidth, chartHeight, getXAxis, getYAxis, getXScale, getYScale, chartRect, dataLength, registerAxis, unregisterAxis, getAxisBounds]);
|
|
270
|
+
const rootClassNames = useMemo(() => cx(className, classNames === null || classNames === void 0 ? void 0 : classNames.root), [className, classNames]);
|
|
271
|
+
const rootStyles = useMemo(() => _objectSpread(_objectSpread({}, style), styles === null || styles === void 0 ? void 0 : styles.root), [style, styles === null || styles === void 0 ? void 0 : styles.root]);
|
|
272
|
+
return /*#__PURE__*/_jsx(CartesianChartProvider, {
|
|
273
|
+
value: contextValue,
|
|
274
|
+
children: /*#__PURE__*/_jsx(ScrubberProvider, {
|
|
275
|
+
enableScrubbing: !!enableScrubbing,
|
|
276
|
+
onScrubberPositionChange: onScrubberPositionChange,
|
|
277
|
+
svgRef: svgRef,
|
|
278
|
+
children: /*#__PURE__*/_jsx(Box, _objectSpread(_objectSpread({
|
|
279
|
+
ref: node => {
|
|
280
|
+
observe(node);
|
|
281
|
+
},
|
|
282
|
+
className: rootClassNames,
|
|
283
|
+
height: height,
|
|
284
|
+
style: rootStyles,
|
|
285
|
+
width: width
|
|
286
|
+
}, props), {}, {
|
|
287
|
+
children: /*#__PURE__*/_jsx(Box, {
|
|
288
|
+
ref: node => {
|
|
289
|
+
const svgElement = node;
|
|
290
|
+
svgRef.current = svgElement;
|
|
291
|
+
// Forward the ref to the user
|
|
292
|
+
if (ref) {
|
|
293
|
+
if (typeof ref === 'function') {
|
|
294
|
+
ref(svgElement);
|
|
295
|
+
} else {
|
|
296
|
+
ref.current = svgElement;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"aria-live": "polite",
|
|
301
|
+
as: "svg",
|
|
302
|
+
className: cx(enableScrubbing && focusStylesCss, classNames === null || classNames === void 0 ? void 0 : classNames.chart),
|
|
303
|
+
height: "100%",
|
|
304
|
+
style: styles === null || styles === void 0 ? void 0 : styles.chart,
|
|
305
|
+
tabIndex: enableScrubbing ? 0 : undefined,
|
|
306
|
+
width: "100%",
|
|
307
|
+
children: children
|
|
308
|
+
})
|
|
309
|
+
}))
|
|
255
310
|
})
|
|
256
|
-
})
|
|
311
|
+
});
|
|
257
312
|
}));
|
|
258
313
|
import "./CartesianChart.css";
|