@ledgerhq/lumen-ui-rnative-visualization 0.1.2 → 0.1.4

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 (152) hide show
  1. package/dist/module/lib/Components/Axis/Axis.types.js +2 -0
  2. package/dist/module/lib/Components/Axis/Axis.types.js.map +1 -0
  3. package/dist/module/lib/Components/Axis/XAxis/XAxis.js +81 -0
  4. package/dist/module/lib/Components/Axis/XAxis/XAxis.js.map +1 -0
  5. package/dist/module/lib/Components/Axis/XAxis/XAxis.test.js +121 -0
  6. package/dist/module/lib/Components/Axis/XAxis/XAxis.test.js.map +1 -0
  7. package/dist/module/lib/Components/Axis/XAxis/index.js +4 -0
  8. package/dist/module/lib/Components/Axis/XAxis/index.js.map +1 -0
  9. package/dist/module/lib/Components/Axis/XAxis/types.js +4 -0
  10. package/dist/module/lib/Components/Axis/XAxis/types.js.map +1 -0
  11. package/dist/module/lib/Components/Axis/YAxis/YAxis.js +81 -0
  12. package/dist/module/lib/Components/Axis/YAxis/YAxis.js.map +1 -0
  13. package/dist/module/lib/Components/Axis/YAxis/YAxis.test.js +121 -0
  14. package/dist/module/lib/Components/Axis/YAxis/YAxis.test.js.map +1 -0
  15. package/dist/module/lib/Components/Axis/YAxis/index.js +4 -0
  16. package/dist/module/lib/Components/Axis/YAxis/index.js.map +1 -0
  17. package/dist/module/lib/Components/Axis/YAxis/types.js +4 -0
  18. package/dist/module/lib/Components/Axis/YAxis/types.js.map +1 -0
  19. package/dist/module/lib/Components/CartesianChart/CartesianChart.js +123 -0
  20. package/dist/module/lib/Components/CartesianChart/CartesianChart.js.map +1 -0
  21. package/dist/module/lib/Components/CartesianChart/context/cartesianChartContext.js +10 -0
  22. package/dist/module/lib/Components/CartesianChart/context/cartesianChartContext.js.map +1 -0
  23. package/dist/module/lib/Components/CartesianChart/context/index.js +5 -0
  24. package/dist/module/lib/Components/CartesianChart/context/index.js.map +1 -0
  25. package/dist/module/lib/Components/CartesianChart/context/useBuildChartContext.js +75 -0
  26. package/dist/module/lib/Components/CartesianChart/context/useBuildChartContext.js.map +1 -0
  27. package/dist/module/lib/Components/CartesianChart/context/useBuildChartContext.test.js +279 -0
  28. package/dist/module/lib/Components/CartesianChart/context/useBuildChartContext.test.js.map +1 -0
  29. package/dist/module/lib/Components/CartesianChart/index.js +5 -0
  30. package/dist/module/lib/Components/CartesianChart/index.js.map +1 -0
  31. package/dist/module/lib/Components/CartesianChart/types.js +4 -0
  32. package/dist/module/lib/Components/CartesianChart/types.js.map +1 -0
  33. package/dist/module/lib/Components/Line/Line.js +72 -0
  34. package/dist/module/lib/Components/Line/Line.js.map +1 -0
  35. package/dist/module/lib/Components/Line/index.js +4 -0
  36. package/dist/module/lib/Components/Line/index.js.map +1 -0
  37. package/dist/module/lib/Components/Line/types.js +2 -0
  38. package/dist/module/lib/Components/Line/types.js.map +1 -0
  39. package/dist/module/lib/Components/Line/utils.js +38 -0
  40. package/dist/module/lib/Components/Line/utils.js.map +1 -0
  41. package/dist/module/lib/Components/LineChart/LineChart.js +70 -31
  42. package/dist/module/lib/Components/LineChart/LineChart.js.map +1 -1
  43. package/dist/module/lib/Components/LineChart/LineChart.stories.js +271 -2
  44. package/dist/module/lib/Components/LineChart/LineChart.stories.js.map +1 -1
  45. package/dist/module/lib/Components/LineChart/LineChart.test.js +84 -3
  46. package/dist/module/lib/Components/LineChart/LineChart.test.js.map +1 -1
  47. package/dist/module/lib/Components/LineChart/types.js +4 -0
  48. package/dist/module/lib/Components/LineChart/types.js.map +1 -0
  49. package/dist/module/lib/utils/domain/domain.js +93 -0
  50. package/dist/module/lib/utils/domain/domain.js.map +1 -0
  51. package/dist/module/lib/utils/domain/domain.test.js +152 -0
  52. package/dist/module/lib/utils/domain/domain.test.js.map +1 -0
  53. package/dist/module/lib/utils/index.js +0 -2
  54. package/dist/module/lib/utils/index.js.map +1 -1
  55. package/dist/module/lib/utils/scales/scales.js +45 -0
  56. package/dist/module/lib/utils/scales/scales.js.map +1 -0
  57. package/dist/module/lib/utils/scales/scales.test.js +173 -0
  58. package/dist/module/lib/utils/scales/scales.test.js.map +1 -0
  59. package/dist/module/lib/utils/ticks/ticks.js +71 -0
  60. package/dist/module/lib/utils/ticks/ticks.js.map +1 -0
  61. package/dist/module/lib/utils/ticks/ticks.test.js +121 -0
  62. package/dist/module/lib/utils/ticks/ticks.test.js.map +1 -0
  63. package/dist/module/lib/utils/types.js +2 -0
  64. package/dist/typescript/src/lib/Components/Axis/Axis.types.d.ts +33 -0
  65. package/dist/typescript/src/lib/Components/Axis/Axis.types.d.ts.map +1 -0
  66. package/dist/typescript/src/lib/Components/Axis/XAxis/XAxis.d.ts +4 -0
  67. package/dist/typescript/src/lib/Components/Axis/XAxis/XAxis.d.ts.map +1 -0
  68. package/dist/typescript/src/lib/Components/Axis/XAxis/index.d.ts +3 -0
  69. package/dist/typescript/src/lib/Components/Axis/XAxis/index.d.ts.map +1 -0
  70. package/dist/typescript/src/lib/Components/Axis/XAxis/types.d.ts +9 -0
  71. package/dist/typescript/src/lib/Components/Axis/XAxis/types.d.ts.map +1 -0
  72. package/dist/typescript/src/lib/Components/Axis/YAxis/YAxis.d.ts +4 -0
  73. package/dist/typescript/src/lib/Components/Axis/YAxis/YAxis.d.ts.map +1 -0
  74. package/dist/typescript/src/lib/Components/Axis/YAxis/index.d.ts +3 -0
  75. package/dist/typescript/src/lib/Components/Axis/YAxis/index.d.ts.map +1 -0
  76. package/dist/typescript/src/lib/Components/Axis/YAxis/types.d.ts +14 -0
  77. package/dist/typescript/src/lib/Components/Axis/YAxis/types.d.ts.map +1 -0
  78. package/dist/typescript/src/lib/Components/CartesianChart/CartesianChart.d.ts +3 -0
  79. package/dist/typescript/src/lib/Components/CartesianChart/CartesianChart.d.ts.map +1 -0
  80. package/dist/typescript/src/lib/Components/CartesianChart/context/cartesianChartContext.d.ts +8 -0
  81. package/dist/typescript/src/lib/Components/CartesianChart/context/cartesianChartContext.d.ts.map +1 -0
  82. package/dist/typescript/src/lib/Components/CartesianChart/context/index.d.ts +3 -0
  83. package/dist/typescript/src/lib/Components/CartesianChart/context/index.d.ts.map +1 -0
  84. package/dist/typescript/src/lib/Components/CartesianChart/context/useBuildChartContext.d.ts +23 -0
  85. package/dist/typescript/src/lib/Components/CartesianChart/context/useBuildChartContext.d.ts.map +1 -0
  86. package/dist/typescript/src/lib/Components/CartesianChart/index.d.ts +4 -0
  87. package/dist/typescript/src/lib/Components/CartesianChart/index.d.ts.map +1 -0
  88. package/dist/typescript/src/lib/Components/CartesianChart/types.d.ts +46 -0
  89. package/dist/typescript/src/lib/Components/CartesianChart/types.d.ts.map +1 -0
  90. package/dist/typescript/src/lib/Components/Line/Line.d.ts +3 -0
  91. package/dist/typescript/src/lib/Components/Line/Line.d.ts.map +1 -0
  92. package/dist/typescript/src/lib/Components/Line/index.d.ts +3 -0
  93. package/dist/typescript/src/lib/Components/Line/index.d.ts.map +1 -0
  94. package/dist/typescript/src/lib/Components/Line/types.d.ts +24 -0
  95. package/dist/typescript/src/lib/Components/Line/types.d.ts.map +1 -0
  96. package/dist/typescript/src/lib/Components/Line/utils.d.ts +19 -0
  97. package/dist/typescript/src/lib/Components/Line/utils.d.ts.map +1 -0
  98. package/dist/typescript/src/lib/Components/LineChart/LineChart.d.ts +2 -8
  99. package/dist/typescript/src/lib/Components/LineChart/LineChart.d.ts.map +1 -1
  100. package/dist/typescript/src/lib/Components/LineChart/index.d.ts +1 -0
  101. package/dist/typescript/src/lib/Components/LineChart/index.d.ts.map +1 -1
  102. package/dist/typescript/src/lib/Components/LineChart/types.d.ts +62 -0
  103. package/dist/typescript/src/lib/Components/LineChart/types.d.ts.map +1 -0
  104. package/dist/typescript/src/lib/utils/domain/domain.d.ts +17 -0
  105. package/dist/typescript/src/lib/utils/domain/domain.d.ts.map +1 -0
  106. package/dist/typescript/src/lib/utils/index.d.ts +1 -1
  107. package/dist/typescript/src/lib/utils/index.d.ts.map +1 -1
  108. package/dist/typescript/src/lib/utils/scales/scales.d.ts +28 -0
  109. package/dist/typescript/src/lib/utils/scales/scales.d.ts.map +1 -0
  110. package/dist/typescript/src/lib/utils/ticks/ticks.d.ts +37 -0
  111. package/dist/typescript/src/lib/utils/ticks/ticks.d.ts.map +1 -0
  112. package/dist/typescript/src/lib/utils/types.d.ts +93 -6
  113. package/dist/typescript/src/lib/utils/types.d.ts.map +1 -1
  114. package/package.json +11 -1
  115. package/src/lib/Components/Axis/Axis.types.ts +32 -0
  116. package/src/lib/Components/Axis/XAxis/XAxis.test.tsx +89 -0
  117. package/src/lib/Components/Axis/XAxis/XAxis.tsx +116 -0
  118. package/src/lib/Components/Axis/XAxis/index.ts +2 -0
  119. package/src/lib/Components/Axis/XAxis/types.ts +9 -0
  120. package/src/lib/Components/Axis/YAxis/YAxis.test.tsx +89 -0
  121. package/src/lib/Components/Axis/YAxis/YAxis.tsx +115 -0
  122. package/src/lib/Components/Axis/YAxis/index.ts +2 -0
  123. package/src/lib/Components/Axis/YAxis/types.ts +14 -0
  124. package/src/lib/Components/CartesianChart/CartesianChart.tsx +153 -0
  125. package/src/lib/Components/CartesianChart/context/cartesianChartContext.ts +14 -0
  126. package/src/lib/Components/CartesianChart/context/index.ts +10 -0
  127. package/src/lib/Components/CartesianChart/context/useBuildChartContext.test.ts +224 -0
  128. package/src/lib/Components/CartesianChart/context/useBuildChartContext.ts +115 -0
  129. package/src/lib/Components/CartesianChart/index.ts +3 -0
  130. package/src/lib/Components/CartesianChart/types.ts +47 -0
  131. package/src/lib/Components/Line/Line.tsx +88 -0
  132. package/src/lib/Components/Line/index.ts +2 -0
  133. package/src/lib/Components/Line/types.ts +23 -0
  134. package/src/lib/Components/Line/utils.ts +72 -0
  135. package/src/lib/Components/LineChart/LineChart.stories.tsx +287 -4
  136. package/src/lib/Components/LineChart/LineChart.test.tsx +71 -2
  137. package/src/lib/Components/LineChart/LineChart.tsx +90 -34
  138. package/src/lib/Components/LineChart/index.ts +1 -0
  139. package/src/lib/Components/LineChart/types.ts +63 -0
  140. package/src/lib/utils/domain/domain.test.ts +129 -0
  141. package/src/lib/utils/domain/domain.ts +101 -0
  142. package/src/lib/utils/index.ts +11 -1
  143. package/src/lib/utils/scales/scales.test.ts +133 -0
  144. package/src/lib/utils/scales/scales.ts +74 -0
  145. package/src/lib/utils/ticks/ticks.test.ts +136 -0
  146. package/src/lib/utils/ticks/ticks.ts +108 -0
  147. package/src/lib/utils/types.ts +100 -6
  148. package/dist/module/lib/utils/math/index.js +0 -4
  149. package/dist/module/lib/utils/math/index.js.map +0 -1
  150. package/dist/typescript/src/lib/utils/math/index.d.ts +0 -1
  151. package/dist/typescript/src/lib/utils/math/index.d.ts.map +0 -1
  152. package/src/lib/utils/math/index.ts +0 -2
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from 'react';
4
+ import { computeDataLength, computeXDomain, computeYDomain } from "../../../utils/domain/domain.js";
5
+ import { getCategoricalScale, getNumericScale, isBandScaleType } from "../../../utils/scales/scales.js";
6
+ export const computeAxisRange = drawingArea => ({
7
+ xRange: {
8
+ min: drawingArea.x,
9
+ max: drawingArea.x + drawingArea.width
10
+ },
11
+ yRange: {
12
+ min: drawingArea.y + drawingArea.height,
13
+ max: drawingArea.y
14
+ }
15
+ });
16
+ export const buildScale = (domain, range, scaleType = 'linear') => isBandScaleType(scaleType) ? getCategoricalScale({
17
+ domain,
18
+ range
19
+ }) : getNumericScale({
20
+ scaleType,
21
+ domain,
22
+ range
23
+ });
24
+ export const computeDrawingArea = (width, height, inset, axisPadding) => {
25
+ const totalInset = {
26
+ top: inset.top + axisPadding.top,
27
+ right: inset.right + axisPadding.right,
28
+ bottom: inset.bottom + axisPadding.bottom,
29
+ left: inset.left + axisPadding.left
30
+ };
31
+ return {
32
+ x: totalInset.left,
33
+ y: totalInset.top,
34
+ width: Math.max(0, width - totalInset.left - totalInset.right),
35
+ height: Math.max(0, height - totalInset.top - totalInset.bottom)
36
+ };
37
+ };
38
+ export const useBuildChartContext = ({
39
+ series,
40
+ xAxis,
41
+ yAxis,
42
+ width,
43
+ height,
44
+ inset,
45
+ axisPadding
46
+ }) => {
47
+ const drawingArea = useMemo(() => computeDrawingArea(width, height, inset, axisPadding), [width, height, inset, axisPadding]);
48
+ return useMemo(() => {
49
+ const {
50
+ xRange,
51
+ yRange
52
+ } = computeAxisRange(drawingArea);
53
+ let xScale;
54
+ let yScale;
55
+ if (drawingArea.width > 0 && drawingArea.height > 0) {
56
+ const xDomain = computeXDomain(series, xAxis);
57
+ const yDomain = computeYDomain(series, yAxis);
58
+ xScale = buildScale(xDomain, xRange, xAxis?.scaleType);
59
+ yScale = buildScale(yDomain, yRange, yAxis?.scaleType);
60
+ }
61
+ const dataLength = computeDataLength(series, xAxis);
62
+ const seriesMap = new Map(series.map(s => [s.id, s]));
63
+ return {
64
+ series,
65
+ seriesMap,
66
+ getXScale: _id => xScale,
67
+ getYScale: _id => yScale,
68
+ getXAxisConfig: _id => xAxis,
69
+ getYAxisConfig: _id => yAxis,
70
+ drawingArea,
71
+ dataLength
72
+ };
73
+ }, [series, xAxis, yAxis, drawingArea]);
74
+ };
75
+ //# sourceMappingURL=useBuildChartContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","computeDataLength","computeXDomain","computeYDomain","getCategoricalScale","getNumericScale","isBandScaleType","computeAxisRange","drawingArea","xRange","min","x","max","width","yRange","y","height","buildScale","domain","range","scaleType","computeDrawingArea","inset","axisPadding","totalInset","top","right","bottom","left","Math","useBuildChartContext","series","xAxis","yAxis","xScale","yScale","xDomain","yDomain","dataLength","seriesMap","Map","map","s","id","getXScale","_id","getYScale","getXAxisConfig","getYAxisConfig"],"sourceRoot":"../../../../../../src","sources":["lib/Components/CartesianChart/context/useBuildChartContext.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+
3
+ import { describe, expect, it } from '@jest/globals';
4
+ import { renderHook } from '@testing-library/react-native';
5
+ import { isCategoricalScale, isNumericScale } from "../../../utils/scales/scales.js";
6
+ import { buildScale, computeAxisRange, computeDrawingArea, useBuildChartContext } from "./useBuildChartContext.js";
7
+ const makeSeries = data => ({
8
+ id: 'test',
9
+ stroke: '#000',
10
+ data
11
+ });
12
+ const DEFAULT_INSET = {
13
+ top: 0,
14
+ right: 0,
15
+ bottom: 0,
16
+ left: 0
17
+ };
18
+ const ZERO_PADDING = {
19
+ top: 0,
20
+ right: 0,
21
+ bottom: 0,
22
+ left: 0
23
+ };
24
+ const hookParams = (overrides = {}) => ({
25
+ series: [makeSeries([10, 20, 30])],
26
+ width: 400,
27
+ height: 200,
28
+ inset: DEFAULT_INSET,
29
+ axisPadding: ZERO_PADDING,
30
+ ...overrides
31
+ });
32
+ describe('computeAxisRange', () => {
33
+ it('computes x range from drawing area', () => {
34
+ const {
35
+ xRange
36
+ } = computeAxisRange({
37
+ x: 10,
38
+ y: 0,
39
+ width: 100,
40
+ height: 50
41
+ });
42
+ expect(xRange).toEqual({
43
+ min: 10,
44
+ max: 110
45
+ });
46
+ });
47
+ it('inverts y range for SVG coordinates', () => {
48
+ const {
49
+ yRange
50
+ } = computeAxisRange({
51
+ x: 0,
52
+ y: 10,
53
+ width: 100,
54
+ height: 200
55
+ });
56
+ expect(yRange).toEqual({
57
+ min: 210,
58
+ max: 10
59
+ });
60
+ });
61
+ });
62
+ describe('buildScale', () => {
63
+ const range = {
64
+ min: 0,
65
+ max: 400
66
+ };
67
+ it('builds a numeric linear scale by default', () => {
68
+ const scale = buildScale({
69
+ min: 0,
70
+ max: 100
71
+ }, range);
72
+ expect(isNumericScale(scale)).toBe(true);
73
+ });
74
+ it('builds a numeric log scale', () => {
75
+ const scale = buildScale({
76
+ min: 1,
77
+ max: 100
78
+ }, range, 'log');
79
+ expect(isNumericScale(scale)).toBe(true);
80
+ });
81
+ it('builds a categorical band scale', () => {
82
+ const scale = buildScale({
83
+ min: 0,
84
+ max: 2
85
+ }, range, 'band');
86
+ expect(isCategoricalScale(scale)).toBe(true);
87
+ });
88
+ });
89
+ describe('computeDrawingArea', () => {
90
+ it('subtracts inset from available space', () => {
91
+ const inset = {
92
+ top: 10,
93
+ right: 20,
94
+ bottom: 30,
95
+ left: 40
96
+ };
97
+ const area = computeDrawingArea(400, 200, inset, ZERO_PADDING);
98
+ expect(area).toEqual({
99
+ x: 40,
100
+ y: 10,
101
+ width: 340,
102
+ height: 160
103
+ });
104
+ });
105
+ it('combines inset and axis padding', () => {
106
+ const inset = {
107
+ top: 5,
108
+ right: 5,
109
+ bottom: 5,
110
+ left: 5
111
+ };
112
+ const axisPad = {
113
+ top: 0,
114
+ right: 0,
115
+ bottom: 28,
116
+ left: 40
117
+ };
118
+ const area = computeDrawingArea(400, 200, inset, axisPad);
119
+ expect(area).toEqual({
120
+ x: 45,
121
+ y: 5,
122
+ width: 350,
123
+ height: 162
124
+ });
125
+ });
126
+ it('clamps negative dimensions to zero', () => {
127
+ const huge = {
128
+ top: 100,
129
+ right: 100,
130
+ bottom: 100,
131
+ left: 100
132
+ };
133
+ const area = computeDrawingArea(50, 50, huge, ZERO_PADDING);
134
+ expect(area.width).toBe(0);
135
+ expect(area.height).toBe(0);
136
+ });
137
+ });
138
+
139
+ // ---------------------------------------------------------------------------
140
+ // Hook integration tests
141
+ // ---------------------------------------------------------------------------
142
+
143
+ describe('useBuildChartContext', () => {
144
+ it('returns undefined scales when drawing area is zero', () => {
145
+ const {
146
+ result
147
+ } = renderHook(() => useBuildChartContext(hookParams({
148
+ width: 0,
149
+ height: 0
150
+ })));
151
+ expect(result.current.getXScale()).toBeUndefined();
152
+ expect(result.current.getYScale()).toBeUndefined();
153
+ });
154
+ it('creates linear scales by default', () => {
155
+ const {
156
+ result
157
+ } = renderHook(() => useBuildChartContext(hookParams()));
158
+ const xScale = result.current.getXScale();
159
+ const yScale = result.current.getYScale();
160
+ expect(xScale).toBeDefined();
161
+ expect(yScale).toBeDefined();
162
+ expect(isNumericScale(xScale)).toBe(true);
163
+ expect(isNumericScale(yScale)).toBe(true);
164
+ });
165
+ it('creates a band scale when scaleType is band', () => {
166
+ const {
167
+ result
168
+ } = renderHook(() => useBuildChartContext(hookParams({
169
+ xAxis: {
170
+ scaleType: 'band'
171
+ }
172
+ })));
173
+ expect(isCategoricalScale(result.current.getXScale())).toBe(true);
174
+ });
175
+ it('computes data length from series', () => {
176
+ const {
177
+ result
178
+ } = renderHook(() => useBuildChartContext(hookParams({
179
+ series: [makeSeries([1, 2, 3, 4, 5])]
180
+ })));
181
+ expect(result.current.dataLength).toBe(5);
182
+ });
183
+ it('computes data length from axis data when provided', () => {
184
+ const {
185
+ result
186
+ } = renderHook(() => useBuildChartContext(hookParams({
187
+ xAxis: {
188
+ data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
189
+ }
190
+ })));
191
+ expect(result.current.dataLength).toBe(5);
192
+ });
193
+ it('applies domain overrides', () => {
194
+ const {
195
+ result
196
+ } = renderHook(() => useBuildChartContext(hookParams({
197
+ yAxis: {
198
+ domain: {
199
+ min: 0,
200
+ max: 100
201
+ }
202
+ }
203
+ })));
204
+ const yScale = result.current.getYScale();
205
+ expect(isNumericScale(yScale)).toBe(true);
206
+ expect(yScale.domain()).toEqual([0, 100]);
207
+ });
208
+ it('applies domain function overrides', () => {
209
+ const {
210
+ result
211
+ } = renderHook(() => useBuildChartContext(hookParams({
212
+ yAxis: {
213
+ domain: bounds => ({
214
+ min: bounds.min - 5,
215
+ max: bounds.max + 5
216
+ })
217
+ }
218
+ })));
219
+ const domain = result.current.getYScale().domain();
220
+ expect(domain[0]).toBe(0);
221
+ expect(domain[1]).toBe(40);
222
+ });
223
+ it('inverts Y range for SVG coordinates', () => {
224
+ const {
225
+ result
226
+ } = renderHook(() => useBuildChartContext(hookParams({
227
+ inset: {
228
+ top: 10,
229
+ right: 0,
230
+ bottom: 0,
231
+ left: 0
232
+ }
233
+ })));
234
+ const yScale = result.current.getYScale();
235
+ const range = yScale.range();
236
+ expect(range[0]).toBeGreaterThan(range[1]);
237
+ });
238
+ it('exposes series and axis configs', () => {
239
+ const series = [makeSeries([1, 2])];
240
+ const xAxis = {
241
+ scaleType: 'linear'
242
+ };
243
+ const {
244
+ result
245
+ } = renderHook(() => useBuildChartContext(hookParams({
246
+ series,
247
+ xAxis
248
+ })));
249
+ expect(result.current.series).toBe(series);
250
+ expect(result.current.getXAxisConfig()).toBe(xAxis);
251
+ });
252
+ it('builds a seriesMap for lookups', () => {
253
+ const series = [makeSeries([1, 2])];
254
+ const {
255
+ result
256
+ } = renderHook(() => useBuildChartContext(hookParams({
257
+ series
258
+ })));
259
+ expect(result.current.seriesMap.get('test')).toBe(series[0]);
260
+ expect(result.current.seriesMap.size).toBe(1);
261
+ });
262
+ it('applies static axisPadding to drawingArea', () => {
263
+ const axisPadding = {
264
+ top: 0,
265
+ right: 0,
266
+ bottom: 28,
267
+ left: 40
268
+ };
269
+ const {
270
+ result
271
+ } = renderHook(() => useBuildChartContext(hookParams({
272
+ axisPadding
273
+ })));
274
+ expect(result.current.drawingArea.x).toBe(40);
275
+ expect(result.current.drawingArea.width).toBe(400 - 40);
276
+ expect(result.current.drawingArea.height).toBe(200 - 28);
277
+ });
278
+ });
279
+ //# sourceMappingURL=useBuildChartContext.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","renderHook","isCategoricalScale","isNumericScale","buildScale","computeAxisRange","computeDrawingArea","useBuildChartContext","makeSeries","data","id","stroke","DEFAULT_INSET","top","right","bottom","left","ZERO_PADDING","hookParams","overrides","series","width","height","inset","axisPadding","xRange","x","y","toEqual","min","max","yRange","range","scale","toBe","area","axisPad","huge","result","current","getXScale","toBeUndefined","getYScale","xScale","yScale","toBeDefined","xAxis","scaleType","dataLength","yAxis","domain","bounds","toBeGreaterThan","getXAxisConfig","seriesMap","get","size","drawingArea"],"sourceRoot":"../../../../../../src","sources":["lib/Components/CartesianChart/context/useBuildChartContext.test.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { CartesianChart } from "./CartesianChart.js";
4
+ export { useCartesianChartContext } from "./context/index.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CartesianChart","useCartesianChartContext"],"sourceRoot":"../../../../../src","sources":["lib/Components/CartesianChart/index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,qBAAkB;AACjD,SAASC,wBAAwB,QAAQ,oBAAW","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["lib/Components/CartesianChart/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ import { useId, useMemo } from 'react';
4
+ import { Defs, LinearGradient, Path, Stop } from 'react-native-svg';
5
+ import { isNumericScale } from "../../utils/scales/scales.js";
6
+ import { useCartesianChartContext } from "../CartesianChart/context/index.js";
7
+ import { buildAreaPath, buildLinePath, toScaledPoints } from "./utils.js";
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
+ const STROKE_WIDTH = 2;
10
+ const AREA_GRADIENT_OPACITY = 0.2;
11
+ export const Line = ({
12
+ seriesId,
13
+ stroke,
14
+ showArea = false,
15
+ areaType: _areaType = 'gradient'
16
+ }) => {
17
+ const {
18
+ getXScale,
19
+ getYScale,
20
+ getXAxisConfig,
21
+ drawingArea,
22
+ seriesMap
23
+ } = useCartesianChartContext();
24
+ const xScale = getXScale();
25
+ const yScale = getYScale();
26
+ const xAxisConfig = getXAxisConfig();
27
+ const gradientId = useId();
28
+ const seriesData = seriesMap.get(seriesId);
29
+ const resolvedStroke = stroke ?? seriesData?.stroke;
30
+ const points = useMemo(() => seriesData?.data && xScale && yScale && isNumericScale(yScale) ? toScaledPoints(seriesData.data, xScale, yScale, xAxisConfig?.data) : null, [seriesData, xScale, yScale, xAxisConfig]);
31
+ const linePath = useMemo(() => points ? buildLinePath(points) : null, [points]);
32
+ const areaPath = useMemo(() => showArea && points && drawingArea ? buildAreaPath(points, drawingArea) : null, [showArea, points, drawingArea]);
33
+ if (!linePath) {
34
+ return null;
35
+ }
36
+ return /*#__PURE__*/_jsxs(_Fragment, {
37
+ children: [showArea && areaPath && resolvedStroke && /*#__PURE__*/_jsxs(_Fragment, {
38
+ children: [/*#__PURE__*/_jsx(Defs, {
39
+ children: /*#__PURE__*/_jsxs(LinearGradient, {
40
+ id: gradientId,
41
+ x1: "0",
42
+ y1: "0",
43
+ x2: "0",
44
+ y2: "1",
45
+ children: [/*#__PURE__*/_jsx(Stop, {
46
+ offset: "0%",
47
+ stopColor: resolvedStroke,
48
+ stopOpacity: AREA_GRADIENT_OPACITY
49
+ }), /*#__PURE__*/_jsx(Stop, {
50
+ offset: "100%",
51
+ stopColor: resolvedStroke,
52
+ stopOpacity: 0
53
+ })]
54
+ })
55
+ }), /*#__PURE__*/_jsx(Path, {
56
+ testID: "line-area",
57
+ d: areaPath,
58
+ fill: `url(#${gradientId})`,
59
+ stroke: "none"
60
+ })]
61
+ }), /*#__PURE__*/_jsx(Path, {
62
+ testID: "line-path",
63
+ d: linePath,
64
+ fill: "none",
65
+ stroke: resolvedStroke,
66
+ strokeWidth: STROKE_WIDTH,
67
+ strokeLinecap: "round",
68
+ strokeLinejoin: "round"
69
+ })]
70
+ });
71
+ };
72
+ //# sourceMappingURL=Line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useId","useMemo","Defs","LinearGradient","Path","Stop","isNumericScale","useCartesianChartContext","buildAreaPath","buildLinePath","toScaledPoints","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","STROKE_WIDTH","AREA_GRADIENT_OPACITY","Line","seriesId","stroke","showArea","areaType","_areaType","getXScale","getYScale","getXAxisConfig","drawingArea","seriesMap","xScale","yScale","xAxisConfig","gradientId","seriesData","get","resolvedStroke","points","data","linePath","areaPath","children","id","x1","y1","x2","y2","offset","stopColor","stopOpacity","testID","d","fill","strokeWidth","strokeLinecap","strokeLinejoin"],"sourceRoot":"../../../../../src","sources":["lib/Components/Line/Line.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { Line } from "./Line.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Line"],"sourceRoot":"../../../../../src","sources":["lib/Components/Line/index.ts"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,WAAQ","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["lib/Components/Line/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ import { area, curveBumpX, line } from 'd3-shape';
4
+ import { isCategoricalScale } from "../../utils/scales/scales.js";
5
+ /**
6
+ * Project series data into scaled [x, y] pixel coordinates, skipping nulls.
7
+ *
8
+ * When `xData` contains numeric values, those values are fed into the scale
9
+ * instead of the array index so the points honour a numeric X domain.
10
+ */
11
+ export const toScaledPoints = (data, xScale, yScale, xData) => {
12
+ const pts = [];
13
+ for (let i = 0; i < data.length; i++) {
14
+ const value = data[i];
15
+ if (value === null) continue;
16
+ const xInput = xData && typeof xData[i] === 'number' ? xData[i] : i;
17
+ const x = isCategoricalScale(xScale) ? (xScale(xInput) ?? 0) + xScale.bandwidth() / 2 : xScale(xInput);
18
+ const y = yScale(value);
19
+ pts.push([x, y]);
20
+ }
21
+ return pts.length >= 2 ? pts : null;
22
+ };
23
+
24
+ /**
25
+ * Build the SVG `d` attribute for the line stroke.
26
+ */
27
+ export const buildLinePath = points => {
28
+ return line().x(d => d[0]).y(d => d[1]).curve(curveBumpX)(points) ?? null;
29
+ };
30
+
31
+ /**
32
+ * Build the SVG `d` attribute for the filled area beneath the line.
33
+ */
34
+ export const buildAreaPath = (points, drawingArea) => {
35
+ const yBottom = drawingArea.y + drawingArea.height;
36
+ return area().x(d => d[0]).y0(yBottom).y1(d => d[1]).curve(curveBumpX)(points) ?? null;
37
+ };
38
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["area","curveBumpX","line","isCategoricalScale","toScaledPoints","data","xScale","yScale","xData","pts","i","length","value","xInput","x","bandwidth","y","push","buildLinePath","points","d","curve","buildAreaPath","drawingArea","yBottom","height","y0","y1"],"sourceRoot":"../../../../../src","sources":["lib/Components/Line/utils.ts"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,UAAU,EAAEC,IAAI,QAAQ,UAAU;AAEjD,SAASC,kBAAkB,QAAQ,8BAA2B;AAS9D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAGA,CAC5BC,IAAuB,EACvBC,MAA0B,EAC1BC,MAAoB,EACpBC,KAAoC,KACjB;EACnB,MAAMC,GAAY,GAAG,EAAE;EAEvB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;IACpC,MAAME,KAAK,GAAGP,IAAI,CAACK,CAAC,CAAC;IACrB,IAAIE,KAAK,KAAK,IAAI,EAAE;IAEpB,MAAMC,MAAM,GACVL,KAAK,IAAI,OAAOA,KAAK,CAACE,CAAC,CAAC,KAAK,QAAQ,GAAIF,KAAK,CAACE,CAAC,CAAC,GAAcA,CAAC;IAElE,MAAMI,CAAC,GAAGX,kBAAkB,CAACG,MAAM,CAAC,GAChC,CAACA,MAAM,CAACO,MAAM,CAAC,IAAI,CAAC,IAAIP,MAAM,CAACS,SAAS,CAAC,CAAC,GAAG,CAAC,GAC9CT,MAAM,CAACO,MAAM,CAAC;IAClB,MAAMG,CAAC,GAAGT,MAAM,CAACK,KAAK,CAAC;IAEvBH,GAAG,CAACQ,IAAI,CAAC,CAACH,CAAC,EAAYE,CAAC,CAAC,CAAC;EAC5B;EAEA,OAAOP,GAAG,CAACE,MAAM,IAAI,CAAC,GAAGF,GAAG,GAAG,IAAI;AACrC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMS,aAAa,GAAIC,MAAe,IAAoB;EAC/D,OACEjB,IAAI,CAAQ,CAAC,CACVY,CAAC,CAAEM,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,CAAC,CACdJ,CAAC,CAAEI,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,CAAC,CACdC,KAAK,CAACpB,UAAU,CAAC,CAACkB,MAAM,CAAC,IAAI,IAAI;AAExC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMG,aAAa,GAAGA,CAC3BH,MAAe,EACfI,WAAwB,KACN;EAClB,MAAMC,OAAO,GAAGD,WAAW,CAACP,CAAC,GAAGO,WAAW,CAACE,MAAM;EAElD,OACEzB,IAAI,CAAQ,CAAC,CACVc,CAAC,CAAEM,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,CAAC,CACdM,EAAE,CAACF,OAAO,CAAC,CACXG,EAAE,CAAEP,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC,CAAC,CACfC,KAAK,CAACpB,UAAU,CAAC,CAACkB,MAAM,CAAC,IAAI,IAAI;AAExC,CAAC","ignoreList":[]}
@@ -1,36 +1,75 @@
1
1
  "use strict";
2
2
 
3
- import { View } from 'react-native';
4
- import { Rect, Svg, Text as SvgText } from 'react-native-svg';
3
+ import { useMemo } from 'react';
4
+ import { DEFAULT_AXIS_HEIGHT, XAxis } from "../Axis/XAxis/index.js";
5
+ import { DEFAULT_AXIS_WIDTH, YAxis } from "../Axis/YAxis/index.js";
6
+ import { CartesianChart } from "../CartesianChart/index.js";
7
+ import { Line } from "../Line/index.js";
5
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
- export function LineChart({
7
- series: _series,
8
- width = 400,
9
- height = 300
10
- }) {
11
- return /*#__PURE__*/_jsx(View, {
12
- testID: "line-chart",
13
- accessibilityRole: "image",
14
- accessibilityLabel: "Line chart",
15
- children: /*#__PURE__*/_jsxs(Svg, {
16
- width: width,
17
- height: height,
18
- children: [/*#__PURE__*/_jsx(Rect, {
19
- width: width,
20
- height: height,
21
- rx: 8,
22
- fill: "#F3F0FA"
23
- }), /*#__PURE__*/_jsx(SvgText, {
24
- x: width / 2,
25
- y: height / 2,
26
- textAnchor: "middle",
27
- alignmentBaseline: "central",
28
- fill: "#7e4ea5",
29
- fontSize: 14,
30
- fontFamily: "Inter",
31
- children: "LineChart placeholder"
32
- })]
33
- })
9
+ export const LineChart = ({
10
+ series,
11
+ showArea = false,
12
+ areaType = 'gradient',
13
+ showXAxis = false,
14
+ showYAxis = false,
15
+ xAxis,
16
+ yAxis,
17
+ width,
18
+ height = 160,
19
+ inset,
20
+ children
21
+ }) => {
22
+ const {
23
+ scaleType: xScaleType,
24
+ data: xData,
25
+ domain: xDomain,
26
+ ...xAxisVisualProps
27
+ } = xAxis ?? {};
28
+ const {
29
+ scaleType: yScaleType,
30
+ data: yData,
31
+ domain: yDomain,
32
+ ...yAxisVisualProps
33
+ } = yAxis ?? {};
34
+ const xAxisConfig = {
35
+ scaleType: xScaleType,
36
+ data: xData,
37
+ domain: xDomain
38
+ };
39
+ const yAxisConfig = {
40
+ scaleType: yScaleType,
41
+ data: yData,
42
+ domain: yDomain
43
+ };
44
+ const axisPadding = useMemo(() => {
45
+ if (!showXAxis && !showYAxis) return undefined;
46
+ const xAxisPosition = xAxisVisualProps.position === 'top' ? 'top' : 'bottom';
47
+ const yAxisPosition = yAxisVisualProps.position === 'end' ? 'right' : 'left';
48
+ const yAxisWidth = yAxisVisualProps.width ?? DEFAULT_AXIS_WIDTH;
49
+ return {
50
+ top: showXAxis && xAxisPosition === 'top' ? DEFAULT_AXIS_HEIGHT : 0,
51
+ bottom: showXAxis && xAxisPosition === 'bottom' ? DEFAULT_AXIS_HEIGHT : 0,
52
+ left: showYAxis && yAxisPosition === 'left' ? yAxisWidth : 0,
53
+ right: showYAxis && yAxisPosition === 'right' ? yAxisWidth : 0
54
+ };
55
+ }, [showXAxis, showYAxis, xAxisVisualProps.position, yAxisVisualProps.position, yAxisVisualProps.width]);
56
+ return /*#__PURE__*/_jsxs(CartesianChart, {
57
+ series: series ?? [],
58
+ xAxis: xAxisConfig,
59
+ yAxis: yAxisConfig,
60
+ width: width,
61
+ height: height,
62
+ inset: inset,
63
+ axisPadding: axisPadding,
64
+ children: [showXAxis && /*#__PURE__*/_jsx(XAxis, {
65
+ ...xAxisVisualProps
66
+ }), showYAxis && /*#__PURE__*/_jsx(YAxis, {
67
+ ...yAxisVisualProps
68
+ }), series?.map(s => /*#__PURE__*/_jsx(Line, {
69
+ seriesId: s.id,
70
+ showArea: showArea,
71
+ areaType: areaType
72
+ }, s.id)), children]
34
73
  });
35
- }
74
+ };
36
75
  //# sourceMappingURL=LineChart.js.map