react-native-metrify 0.1.0-alpha.4 → 0.1.0-beta.1
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 +35 -0
- package/README.md +184 -1
- package/dist/cjs/core/index.js +1 -0
- package/dist/cjs/core/index.js.map +1 -1
- package/dist/cjs/core/utils/dataTransform.js +331 -0
- package/dist/cjs/core/utils/dataTransform.js.map +1 -0
- package/dist/cjs/widgets/AreaChart/AreaChart.js +17 -137
- package/dist/cjs/widgets/AreaChart/AreaChart.js.map +1 -1
- package/dist/cjs/widgets/BarChart/BarChart.js +11 -1
- package/dist/cjs/widgets/BarChart/BarChart.js.map +1 -1
- package/dist/cjs/widgets/BoxPlot/BoxPlot.js +12 -1
- package/dist/cjs/widgets/BoxPlot/BoxPlot.js.map +1 -1
- package/dist/cjs/widgets/BubbleChart/BubbleChart.js +31 -2
- package/dist/cjs/widgets/BubbleChart/BubbleChart.js.map +1 -1
- package/dist/cjs/widgets/CandlestickChart/CandlestickChart.js +11 -1
- package/dist/cjs/widgets/CandlestickChart/CandlestickChart.js.map +1 -1
- package/dist/cjs/widgets/FunnelChart/FunnelChart.js +11 -1
- package/dist/cjs/widgets/FunnelChart/FunnelChart.js.map +1 -1
- package/dist/cjs/widgets/GroupedBarChart/GroupedBarChart.js +12 -1
- package/dist/cjs/widgets/GroupedBarChart/GroupedBarChart.js.map +1 -1
- package/dist/cjs/widgets/Heatmap/Heatmap.js +14 -1
- package/dist/cjs/widgets/Heatmap/Heatmap.js.map +1 -1
- package/dist/cjs/widgets/Histogram/Histogram.js +12 -1
- package/dist/cjs/widgets/Histogram/Histogram.js.map +1 -1
- package/dist/cjs/widgets/HorizontalBarChart/HorizontalBarChart.js +11 -1
- package/dist/cjs/widgets/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/dist/cjs/widgets/LineChart/LineChart.js +40 -6
- package/dist/cjs/widgets/LineChart/LineChart.js.map +1 -1
- package/dist/cjs/widgets/MultiLineSparkline/MultiLineSparkline.js +11 -1
- package/dist/cjs/widgets/MultiLineSparkline/MultiLineSparkline.js.map +1 -1
- package/dist/cjs/widgets/PieChart/PieChart.js +12 -1
- package/dist/cjs/widgets/PieChart/PieChart.js.map +1 -1
- package/dist/cjs/widgets/RadarChart/RadarChart.js +18 -1
- package/dist/cjs/widgets/RadarChart/RadarChart.js.map +1 -1
- package/dist/cjs/widgets/SankeyDiagram/SankeyDiagram.js +11 -1
- package/dist/cjs/widgets/SankeyDiagram/SankeyDiagram.js.map +1 -1
- package/dist/cjs/widgets/ScatterPlot/ScatterPlot.js +32 -3
- package/dist/cjs/widgets/ScatterPlot/ScatterPlot.js.map +1 -1
- package/dist/cjs/widgets/Sparkline/Sparkline.js +11 -1
- package/dist/cjs/widgets/Sparkline/Sparkline.js.map +1 -1
- package/dist/cjs/widgets/StackedBarChart/StackedBarChart.js +12 -1
- package/dist/cjs/widgets/StackedBarChart/StackedBarChart.js.map +1 -1
- package/dist/cjs/widgets/SunburstChart/SunburstChart.js +11 -1
- package/dist/cjs/widgets/SunburstChart/SunburstChart.js.map +1 -1
- package/dist/cjs/widgets/Treemap/Treemap.js +11 -1
- package/dist/cjs/widgets/Treemap/Treemap.js.map +1 -1
- package/dist/cjs/widgets/WaterfallChart/WaterfallChart.js +11 -1
- package/dist/cjs/widgets/WaterfallChart/WaterfallChart.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/utils/dataTransform.d.ts +209 -0
- package/dist/core/utils/dataTransform.d.ts.map +1 -0
- package/dist/esm/core/index.js +1 -0
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/core/utils/dataTransform.js +309 -0
- package/dist/esm/core/utils/dataTransform.js.map +1 -0
- package/dist/esm/widgets/AreaChart/AreaChart.js +18 -138
- package/dist/esm/widgets/AreaChart/AreaChart.js.map +1 -1
- package/dist/esm/widgets/BarChart/BarChart.js +11 -1
- package/dist/esm/widgets/BarChart/BarChart.js.map +1 -1
- package/dist/esm/widgets/BoxPlot/BoxPlot.js +12 -1
- package/dist/esm/widgets/BoxPlot/BoxPlot.js.map +1 -1
- package/dist/esm/widgets/BubbleChart/BubbleChart.js +31 -2
- package/dist/esm/widgets/BubbleChart/BubbleChart.js.map +1 -1
- package/dist/esm/widgets/CandlestickChart/CandlestickChart.js +11 -1
- package/dist/esm/widgets/CandlestickChart/CandlestickChart.js.map +1 -1
- package/dist/esm/widgets/FunnelChart/FunnelChart.js +11 -1
- package/dist/esm/widgets/FunnelChart/FunnelChart.js.map +1 -1
- package/dist/esm/widgets/GroupedBarChart/GroupedBarChart.js +12 -1
- package/dist/esm/widgets/GroupedBarChart/GroupedBarChart.js.map +1 -1
- package/dist/esm/widgets/Heatmap/Heatmap.js +14 -1
- package/dist/esm/widgets/Heatmap/Heatmap.js.map +1 -1
- package/dist/esm/widgets/Histogram/Histogram.js +12 -1
- package/dist/esm/widgets/Histogram/Histogram.js.map +1 -1
- package/dist/esm/widgets/HorizontalBarChart/HorizontalBarChart.js +11 -1
- package/dist/esm/widgets/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/dist/esm/widgets/LineChart/LineChart.js +42 -8
- package/dist/esm/widgets/LineChart/LineChart.js.map +1 -1
- package/dist/esm/widgets/MultiLineSparkline/MultiLineSparkline.js +11 -1
- package/dist/esm/widgets/MultiLineSparkline/MultiLineSparkline.js.map +1 -1
- package/dist/esm/widgets/PieChart/PieChart.js +12 -1
- package/dist/esm/widgets/PieChart/PieChart.js.map +1 -1
- package/dist/esm/widgets/RadarChart/RadarChart.js +18 -1
- package/dist/esm/widgets/RadarChart/RadarChart.js.map +1 -1
- package/dist/esm/widgets/SankeyDiagram/SankeyDiagram.js +11 -1
- package/dist/esm/widgets/SankeyDiagram/SankeyDiagram.js.map +1 -1
- package/dist/esm/widgets/ScatterPlot/ScatterPlot.js +32 -3
- package/dist/esm/widgets/ScatterPlot/ScatterPlot.js.map +1 -1
- package/dist/esm/widgets/Sparkline/Sparkline.js +11 -1
- package/dist/esm/widgets/Sparkline/Sparkline.js.map +1 -1
- package/dist/esm/widgets/StackedBarChart/StackedBarChart.js +12 -1
- package/dist/esm/widgets/StackedBarChart/StackedBarChart.js.map +1 -1
- package/dist/esm/widgets/SunburstChart/SunburstChart.js +11 -1
- package/dist/esm/widgets/SunburstChart/SunburstChart.js.map +1 -1
- package/dist/esm/widgets/Treemap/Treemap.js +11 -1
- package/dist/esm/widgets/Treemap/Treemap.js.map +1 -1
- package/dist/esm/widgets/WaterfallChart/WaterfallChart.js +11 -1
- package/dist/esm/widgets/WaterfallChart/WaterfallChart.js.map +1 -1
- package/dist/widgets/AreaChart/AreaChart.d.ts +14 -3
- package/dist/widgets/AreaChart/AreaChart.d.ts.map +1 -1
- package/dist/widgets/AreaChart/types.d.ts +8 -26
- package/dist/widgets/AreaChart/types.d.ts.map +1 -1
- package/dist/widgets/BarChart/BarChart.d.ts.map +1 -1
- package/dist/widgets/BarChart/types.d.ts +32 -5
- package/dist/widgets/BarChart/types.d.ts.map +1 -1
- package/dist/widgets/BoxPlot/BoxPlot.d.ts.map +1 -1
- package/dist/widgets/BoxPlot/types.d.ts +38 -5
- package/dist/widgets/BoxPlot/types.d.ts.map +1 -1
- package/dist/widgets/BubbleChart/BubbleChart.d.ts.map +1 -1
- package/dist/widgets/BubbleChart/types.d.ts +35 -5
- package/dist/widgets/BubbleChart/types.d.ts.map +1 -1
- package/dist/widgets/CandlestickChart/CandlestickChart.d.ts.map +1 -1
- package/dist/widgets/CandlestickChart/types.d.ts +38 -2
- package/dist/widgets/CandlestickChart/types.d.ts.map +1 -1
- package/dist/widgets/FunnelChart/FunnelChart.d.ts.map +1 -1
- package/dist/widgets/FunnelChart/types.d.ts +29 -5
- package/dist/widgets/FunnelChart/types.d.ts.map +1 -1
- package/dist/widgets/Gauge/types.d.ts +2 -2
- package/dist/widgets/Gauge/types.d.ts.map +1 -1
- package/dist/widgets/GroupedBarChart/GroupedBarChart.d.ts.map +1 -1
- package/dist/widgets/GroupedBarChart/types.d.ts +34 -5
- package/dist/widgets/GroupedBarChart/types.d.ts.map +1 -1
- package/dist/widgets/Heatmap/Heatmap.d.ts.map +1 -1
- package/dist/widgets/Heatmap/types.d.ts +32 -5
- package/dist/widgets/Heatmap/types.d.ts.map +1 -1
- package/dist/widgets/Histogram/Histogram.d.ts.map +1 -1
- package/dist/widgets/Histogram/types.d.ts +27 -5
- package/dist/widgets/Histogram/types.d.ts.map +1 -1
- package/dist/widgets/HorizontalBarChart/HorizontalBarChart.d.ts.map +1 -1
- package/dist/widgets/HorizontalBarChart/types.d.ts +30 -5
- package/dist/widgets/HorizontalBarChart/types.d.ts.map +1 -1
- package/dist/widgets/KPI/types.d.ts +2 -2
- package/dist/widgets/KPI/types.d.ts.map +1 -1
- package/dist/widgets/LineChart/LineChart.d.ts.map +1 -1
- package/dist/widgets/LineChart/types.d.ts +41 -2
- package/dist/widgets/LineChart/types.d.ts.map +1 -1
- package/dist/widgets/MultiLineSparkline/MultiLineSparkline.d.ts.map +1 -1
- package/dist/widgets/MultiLineSparkline/types.d.ts +28 -5
- package/dist/widgets/MultiLineSparkline/types.d.ts.map +1 -1
- package/dist/widgets/PieChart/PieChart.d.ts.map +1 -1
- package/dist/widgets/PieChart/types.d.ts +31 -5
- package/dist/widgets/PieChart/types.d.ts.map +1 -1
- package/dist/widgets/Progress/types.d.ts +2 -2
- package/dist/widgets/Progress/types.d.ts.map +1 -1
- package/dist/widgets/RadarChart/RadarChart.d.ts.map +1 -1
- package/dist/widgets/RadarChart/types.d.ts +32 -5
- package/dist/widgets/RadarChart/types.d.ts.map +1 -1
- package/dist/widgets/SankeyDiagram/SankeyDiagram.d.ts.map +1 -1
- package/dist/widgets/SankeyDiagram/types.d.ts +32 -5
- package/dist/widgets/SankeyDiagram/types.d.ts.map +1 -1
- package/dist/widgets/ScatterPlot/ScatterPlot.d.ts.map +1 -1
- package/dist/widgets/ScatterPlot/types.d.ts +32 -5
- package/dist/widgets/ScatterPlot/types.d.ts.map +1 -1
- package/dist/widgets/Sparkline/Sparkline.d.ts.map +1 -1
- package/dist/widgets/Sparkline/types.d.ts +24 -5
- package/dist/widgets/Sparkline/types.d.ts.map +1 -1
- package/dist/widgets/StackedBarChart/StackedBarChart.d.ts.map +1 -1
- package/dist/widgets/StackedBarChart/types.d.ts +33 -5
- package/dist/widgets/StackedBarChart/types.d.ts.map +1 -1
- package/dist/widgets/SunburstChart/SunburstChart.d.ts.map +1 -1
- package/dist/widgets/SunburstChart/types.d.ts +30 -5
- package/dist/widgets/SunburstChart/types.d.ts.map +1 -1
- package/dist/widgets/Treemap/Treemap.d.ts.map +1 -1
- package/dist/widgets/Treemap/types.d.ts +31 -5
- package/dist/widgets/Treemap/types.d.ts.map +1 -1
- package/dist/widgets/WaterfallChart/WaterfallChart.d.ts.map +1 -1
- package/dist/widgets/WaterfallChart/types.d.ts +32 -5
- package/dist/widgets/WaterfallChart/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.1.0-beta.1] - 2026-01-23
|
|
6
|
+
|
|
7
|
+
**🎉 Beta Release - Significant API Improvements**
|
|
8
|
+
|
|
9
|
+
This release includes major improvements and consolidations. Moving to beta indicates the API is stabilizing.
|
|
10
|
+
|
|
11
|
+
### 🚀 New Features
|
|
12
|
+
- **LineChart**: Added `filled` prop to create area charts (replaces AreaChart)
|
|
13
|
+
- **LineChart**: Added `showGradient` prop for beautiful gradient fills when `filled={true}`
|
|
14
|
+
- **ScatterPlot**: Added X-axis labels and grid lines for better data visualization
|
|
15
|
+
- **BubbleChart**: Added X-axis labels and grid lines for better data visualization
|
|
16
|
+
|
|
17
|
+
### 🐛 Bug Fixes
|
|
18
|
+
- **LineChart**: Fixed duplicate X-axis labels when using multiple `dataKeys`
|
|
19
|
+
- **ScatterPlot**: Now shows meaningful X-axis metrics instead of just dots
|
|
20
|
+
- **BubbleChart**: Better visual differentiation from ScatterPlot
|
|
21
|
+
|
|
22
|
+
### ⚠️ Deprecations
|
|
23
|
+
- **AreaChart**: Now deprecated in favor of `LineChart` with `filled={true}`
|
|
24
|
+
- AreaChart still works (backward compatible) but is now just a wrapper around LineChart
|
|
25
|
+
- Migration: Replace `<AreaChart ... />` with `<LineChart ... filled={true} />`
|
|
26
|
+
|
|
27
|
+
### 📚 Documentation
|
|
28
|
+
- Updated README.md with LineChart area chart examples
|
|
29
|
+
- Updated API_REFERENCE.md with new props and deprecation notices
|
|
30
|
+
- Updated SIMPLE_API_GUIDE.md with consolidated LineChart/AreaChart usage
|
|
31
|
+
- Added migration examples for AreaChart → LineChart
|
|
32
|
+
|
|
33
|
+
### 🔧 Technical Improvements
|
|
34
|
+
- Reduced code duplication (~200 lines) by consolidating AreaChart into LineChart
|
|
35
|
+
- Improved TypeScript types - AreaChart now uses LineChart types directly
|
|
36
|
+
- Better axis rendering with proper X-axis support across scatter-based charts
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
5
40
|
## [0.1.0-alpha.4] - 2026-01-22
|
|
6
41
|
|
|
7
42
|
### Fixed
|
package/README.md
CHANGED
|
@@ -80,6 +80,68 @@ export default function App() {
|
|
|
80
80
|
|
|
81
81
|
### 2. Use any chart component
|
|
82
82
|
|
|
83
|
+
#### Simple API (Recommended)
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { LineChart, AreaChart, BarChart } from 'react-native-metrify';
|
|
87
|
+
import { View } from 'react-native';
|
|
88
|
+
|
|
89
|
+
// Your data - just a simple array of objects!
|
|
90
|
+
const data = [
|
|
91
|
+
{ name: 'Jan', sales: 4000, expenses: 2400 },
|
|
92
|
+
{ name: 'Feb', sales: 3000, expenses: 1398 },
|
|
93
|
+
{ name: 'Mar', sales: 2000, expenses: 9800 },
|
|
94
|
+
{ name: 'Apr', sales: 2780, expenses: 3908 },
|
|
95
|
+
{ name: 'May', sales: 1890, expenses: 4800 },
|
|
96
|
+
{ name: 'Jun', sales: 2390, expenses: 3800 },
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
export default function Dashboard() {
|
|
100
|
+
return (
|
|
101
|
+
<View>
|
|
102
|
+
{/* LineChart - Just specify data and keys! */}
|
|
103
|
+
<LineChart
|
|
104
|
+
data={data}
|
|
105
|
+
xKey="name"
|
|
106
|
+
dataKeys={['sales', 'expenses']}
|
|
107
|
+
colors={['#82ca9d', '#ff7c7c']}
|
|
108
|
+
labels={['Sales', 'Expenses']}
|
|
109
|
+
width={350}
|
|
110
|
+
height={250}
|
|
111
|
+
showGrid
|
|
112
|
+
showLegend
|
|
113
|
+
/>
|
|
114
|
+
|
|
115
|
+
{/* LineChart as Area Chart - Just add filled prop! */}
|
|
116
|
+
<LineChart
|
|
117
|
+
data={data}
|
|
118
|
+
xKey="name"
|
|
119
|
+
dataKeys={['revenue']}
|
|
120
|
+
colors={['#8884d8']}
|
|
121
|
+
width={350}
|
|
122
|
+
height={250}
|
|
123
|
+
filled={true} // Makes it an area chart!
|
|
124
|
+
showGradient={true} // Beautiful gradient fill
|
|
125
|
+
/>
|
|
126
|
+
|
|
127
|
+
{/* BarChart - Single value per item */}
|
|
128
|
+
<BarChart
|
|
129
|
+
data={data}
|
|
130
|
+
xKey="name"
|
|
131
|
+
dataKey="sales"
|
|
132
|
+
width={350}
|
|
133
|
+
height={250}
|
|
134
|
+
showValues
|
|
135
|
+
/>
|
|
136
|
+
</View>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### Advanced API (Full Control)
|
|
142
|
+
|
|
143
|
+
For more control, you can still use the original API:
|
|
144
|
+
|
|
83
145
|
```tsx
|
|
84
146
|
import { KPI, LineChart, Gauge } from 'react-native-metrify';
|
|
85
147
|
import { View } from 'react-native';
|
|
@@ -202,7 +264,7 @@ export default function Dashboard() {
|
|
|
202
264
|
|
|
203
265
|
**Bar Charts:** BarChart, HorizontalBarChart, StackedBarChart, GroupedBarChart, WaterfallChart, Histogram
|
|
204
266
|
|
|
205
|
-
**Line & Area:** LineChart, AreaChart,
|
|
267
|
+
**Line & Area:** LineChart (with area support), MultiLineSparkline, ~~AreaChart~~ (deprecated, use LineChart with `filled={true}`)
|
|
206
268
|
|
|
207
269
|
**Distribution:** PieChart, FunnelChart, BoxPlot
|
|
208
270
|
|
|
@@ -210,6 +272,104 @@ export default function Dashboard() {
|
|
|
210
272
|
|
|
211
273
|
**Hierarchical:** Treemap, SunburstChart, SankeyDiagram
|
|
212
274
|
|
|
275
|
+
## 💡 Simple API (Data-Driven)
|
|
276
|
+
|
|
277
|
+
We've made it super easy to use charts! Inspired by Recharts, you can now pass your data directly without manual transformation.
|
|
278
|
+
|
|
279
|
+
### Before vs After
|
|
280
|
+
|
|
281
|
+
**❌ Old Way (Complex):**
|
|
282
|
+
```tsx
|
|
283
|
+
// Had to manually transform your data
|
|
284
|
+
const chartData = {
|
|
285
|
+
series: [
|
|
286
|
+
{
|
|
287
|
+
data: data.map(d => ({ x: d.month, y: d.sales })),
|
|
288
|
+
color: '#82ca9d',
|
|
289
|
+
label: 'Sales'
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
data: data.map(d => ({ x: d.month, y: d.expenses })),
|
|
293
|
+
color: '#ff7c7c',
|
|
294
|
+
label: 'Expenses'
|
|
295
|
+
}
|
|
296
|
+
]
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
<LineChart data={chartData} width={350} height={250} />
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**✅ New Way (Simple):**
|
|
303
|
+
```tsx
|
|
304
|
+
// Just pass your data and specify the keys!
|
|
305
|
+
<LineChart
|
|
306
|
+
data={data}
|
|
307
|
+
xKey="month"
|
|
308
|
+
dataKeys={['sales', 'expenses']}
|
|
309
|
+
colors={['#82ca9d', '#ff7c7c']}
|
|
310
|
+
labels={['Sales', 'Expenses']}
|
|
311
|
+
width={350}
|
|
312
|
+
height={250}
|
|
313
|
+
/>
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Supported Charts
|
|
317
|
+
|
|
318
|
+
The Simple API is available for **ALL** chart types:
|
|
319
|
+
|
|
320
|
+
**Line & Area:** LineChart, AreaChart
|
|
321
|
+
**Bar Charts:** BarChart, GroupedBarChart, StackedBarChart, HorizontalBarChart
|
|
322
|
+
**Pie & Distribution:** PieChart, FunnelChart
|
|
323
|
+
**Scatter:** ScatterPlot, BubbleChart
|
|
324
|
+
**Multi-Axis:** RadarChart
|
|
325
|
+
**Statistical:** Heatmap, BoxPlot, Histogram
|
|
326
|
+
**Financial:** WaterfallChart, CandlestickChart
|
|
327
|
+
|
|
328
|
+
### Quick Examples
|
|
329
|
+
|
|
330
|
+
```tsx
|
|
331
|
+
// LineChart - Multiple series
|
|
332
|
+
<LineChart data={data} xKey="month" dataKeys={['sales', 'expenses']} />
|
|
333
|
+
|
|
334
|
+
// LineChart as Area Chart - Just add filled prop
|
|
335
|
+
<LineChart data={data} xKey="month" dataKeys={['revenue']} filled={true} showGradient />
|
|
336
|
+
|
|
337
|
+
// AreaChart still works (deprecated, uses LineChart internally)
|
|
338
|
+
<AreaChart data={data} xKey="month" dataKeys={['revenue']} />
|
|
339
|
+
|
|
340
|
+
// BarChart - Single value
|
|
341
|
+
<BarChart data={data} xKey="category" dataKey="revenue" />
|
|
342
|
+
|
|
343
|
+
// PieChart - Segments
|
|
344
|
+
<PieChart data={data} labelKey="category" valueKey="amount" />
|
|
345
|
+
|
|
346
|
+
// ScatterPlot - X/Y coordinates
|
|
347
|
+
<ScatterPlot data={data} xKey="x" yKey="y" />
|
|
348
|
+
|
|
349
|
+
// RadarChart - Multi-axis comparison
|
|
350
|
+
<RadarChart data={data} categoryKey="skill" dataKeys={['you', 'teamAvg']} />
|
|
351
|
+
|
|
352
|
+
// Heatmap - Grid visualization
|
|
353
|
+
<Heatmap data={data} xKey="day" yKey="hour" valueKey="activity" />
|
|
354
|
+
|
|
355
|
+
// And 15+ more charts!
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Full Documentation
|
|
359
|
+
|
|
360
|
+
📖 **[Complete Simple API Reference →](./SIMPLE_API_REFERENCE.md)**
|
|
361
|
+
|
|
362
|
+
See all chart types with detailed examples in `SIMPLE_API_REFERENCE.md`
|
|
363
|
+
|
|
364
|
+
### Benefits
|
|
365
|
+
|
|
366
|
+
✓ **60% less code** - No manual data transformation needed
|
|
367
|
+
✓ **Works with ALL charts** - Consistent API across 20+ chart types
|
|
368
|
+
✓ **Familiar API** - Similar to Recharts and other popular charting libraries
|
|
369
|
+
✓ **Backward compatible** - Old API still works perfectly
|
|
370
|
+
✓ **Automatic colors** - Uses a nice default palette if you don't specify colors
|
|
371
|
+
✓ **TypeScript support** - Full type safety with autocomplete
|
|
372
|
+
|
|
213
373
|
## 🎨 Theming
|
|
214
374
|
|
|
215
375
|
### Using Built-in Themes
|
|
@@ -283,7 +443,30 @@ interface BaseWidgetProps {
|
|
|
283
443
|
|
|
284
444
|
### LineChart Component
|
|
285
445
|
|
|
446
|
+
**New in v0.1.0-beta.1:** LineChart now supports area charts with the `filled` prop!
|
|
447
|
+
|
|
286
448
|
```tsx
|
|
449
|
+
// Regular Line Chart
|
|
450
|
+
<LineChart
|
|
451
|
+
data={data}
|
|
452
|
+
xKey="month"
|
|
453
|
+
dataKeys={['sales', 'expenses']}
|
|
454
|
+
width={350}
|
|
455
|
+
height={250}
|
|
456
|
+
/>
|
|
457
|
+
|
|
458
|
+
// Area Chart (filled line chart)
|
|
459
|
+
<LineChart
|
|
460
|
+
data={data}
|
|
461
|
+
xKey="month"
|
|
462
|
+
dataKeys={['revenue']}
|
|
463
|
+
width={350}
|
|
464
|
+
height={250}
|
|
465
|
+
filled={true} // Enable area fill
|
|
466
|
+
showGradient={true} // Show gradient (optional)
|
|
467
|
+
/>
|
|
468
|
+
|
|
469
|
+
// Legacy API still works
|
|
287
470
|
<LineChart
|
|
288
471
|
data={{
|
|
289
472
|
series: [
|
package/dist/cjs/core/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,yCAAuB;AAEvB,mBAAmB;AACnB,2CAAyB;AAEzB,eAAe;AACf,0CAAwB;AAExB,oBAAoB;AACpB,8CAA4B;AAE5B,QAAQ;AACR,0CAAwB;AAExB,QAAQ;AACR,0CAAwB;AAExB,QAAQ;AACR,+CAA6B;AAC7B,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,yCAAuB;AAEvB,mBAAmB;AACnB,2CAAyB;AAEzB,eAAe;AACf,0CAAwB;AAExB,oBAAoB;AACpB,8CAA4B;AAE5B,QAAQ;AACR,0CAAwB;AAExB,QAAQ;AACR,0CAAwB;AAExB,QAAQ;AACR,+CAA6B;AAC7B,qDAAmC;AACnC,wDAAsC"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Data transformation utilities for converting simple data arrays
|
|
4
|
+
* into the internal format used by widgets
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DEFAULT_COLORS = void 0;
|
|
8
|
+
exports.isSimpleDataFormat = isSimpleDataFormat;
|
|
9
|
+
exports.transformToSeriesData = transformToSeriesData;
|
|
10
|
+
exports.transformToBarData = transformToBarData;
|
|
11
|
+
exports.transformToPieData = transformToPieData;
|
|
12
|
+
exports.transformToScatterData = transformToScatterData;
|
|
13
|
+
exports.transformToGroupedBarData = transformToGroupedBarData;
|
|
14
|
+
exports.transformToStackedBarData = transformToStackedBarData;
|
|
15
|
+
exports.transformToRadarData = transformToRadarData;
|
|
16
|
+
exports.transformToHeatmapData = transformToHeatmapData;
|
|
17
|
+
exports.transformToBoxPlotData = transformToBoxPlotData;
|
|
18
|
+
exports.transformToHistogramData = transformToHistogramData;
|
|
19
|
+
exports.transformToWaterfallData = transformToWaterfallData;
|
|
20
|
+
exports.transformToCandlestickData = transformToCandlestickData;
|
|
21
|
+
exports.transformToFunnelData = transformToFunnelData;
|
|
22
|
+
exports.transformToSparklineData = transformToSparklineData;
|
|
23
|
+
exports.transformToMultiSparklineData = transformToMultiSparklineData;
|
|
24
|
+
exports.transformToTreemapData = transformToTreemapData;
|
|
25
|
+
exports.transformToSunburstData = transformToSunburstData;
|
|
26
|
+
exports.transformToSankeyData = transformToSankeyData;
|
|
27
|
+
/**
|
|
28
|
+
* Default color palette for charts
|
|
29
|
+
*/
|
|
30
|
+
exports.DEFAULT_COLORS = [
|
|
31
|
+
'#8884d8',
|
|
32
|
+
'#82ca9d',
|
|
33
|
+
'#ffc658',
|
|
34
|
+
'#ff7c7c',
|
|
35
|
+
'#8dd1e1',
|
|
36
|
+
'#a4de6c',
|
|
37
|
+
'#d0ed57',
|
|
38
|
+
'#ffa07a',
|
|
39
|
+
'#ba68c8',
|
|
40
|
+
'#4db6ac',
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Check if props use the new simple API format
|
|
44
|
+
*/
|
|
45
|
+
function isSimpleDataFormat(props) {
|
|
46
|
+
return (props.data &&
|
|
47
|
+
Array.isArray(props.data) &&
|
|
48
|
+
props.data.length > 0 &&
|
|
49
|
+
typeof props.data[0] === 'object');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Transform simple data format to series format for LineChart/AreaChart
|
|
53
|
+
*/
|
|
54
|
+
function transformToSeriesData(data, options) {
|
|
55
|
+
const { xKey, dataKeys, colors, labels } = options;
|
|
56
|
+
const series = dataKeys.map((key, index) => {
|
|
57
|
+
const seriesData = data.map((item) => ({
|
|
58
|
+
x: item[xKey],
|
|
59
|
+
y: typeof item[key] === 'number' ? item[key] : 0,
|
|
60
|
+
}));
|
|
61
|
+
return {
|
|
62
|
+
data: seriesData,
|
|
63
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
64
|
+
label: labels?.[index] || key,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
return { series };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Transform simple data format to bar chart format
|
|
71
|
+
*/
|
|
72
|
+
function transformToBarData(data, xKey, dataKey, colors) {
|
|
73
|
+
return {
|
|
74
|
+
data: data.map((item, index) => ({
|
|
75
|
+
value: typeof item[dataKey] === 'number' ? item[dataKey] : 0,
|
|
76
|
+
label: String(item[xKey] ?? ''),
|
|
77
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
78
|
+
})),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Transform simple data format to pie chart format
|
|
83
|
+
*/
|
|
84
|
+
function transformToPieData(data, labelKey, valueKey, colors) {
|
|
85
|
+
return {
|
|
86
|
+
data: data.map((item, index) => ({
|
|
87
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
88
|
+
label: String(item[labelKey] ?? ''),
|
|
89
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
90
|
+
})),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Transform simple data format to scatter/bubble chart format
|
|
95
|
+
*/
|
|
96
|
+
function transformToScatterData(data, xKey, yKey, sizeKey, colors, labels) {
|
|
97
|
+
return {
|
|
98
|
+
data: data.map((item, index) => ({
|
|
99
|
+
x: typeof item[xKey] === 'number' ? item[xKey] : 0,
|
|
100
|
+
y: typeof item[yKey] === 'number' ? item[yKey] : 0,
|
|
101
|
+
size: sizeKey && typeof item[sizeKey] === 'number' ? item[sizeKey] : 10,
|
|
102
|
+
label: labels?.[index] || String(item[xKey] ?? ''),
|
|
103
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Transform simple data format to grouped bar chart format
|
|
109
|
+
*/
|
|
110
|
+
function transformToGroupedBarData(data, categoryKey, dataKeys, colors, labels) {
|
|
111
|
+
const groups = data.map((item) => ({
|
|
112
|
+
category: String(item[categoryKey] ?? ''),
|
|
113
|
+
values: dataKeys.map((key, index) => ({
|
|
114
|
+
value: typeof item[key] === 'number' ? item[key] : 0,
|
|
115
|
+
label: labels?.[index] || key,
|
|
116
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
117
|
+
})),
|
|
118
|
+
}));
|
|
119
|
+
return { groups };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Transform simple data format to stacked bar chart format
|
|
123
|
+
*/
|
|
124
|
+
function transformToStackedBarData(data, categoryKey, dataKeys, colors, labels) {
|
|
125
|
+
const stacks = data.map((item) => ({
|
|
126
|
+
category: String(item[categoryKey] ?? ''),
|
|
127
|
+
segments: dataKeys.map((key, index) => ({
|
|
128
|
+
value: typeof item[key] === 'number' ? item[key] : 0,
|
|
129
|
+
label: labels?.[index] || key,
|
|
130
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
131
|
+
})),
|
|
132
|
+
}));
|
|
133
|
+
return { stacks };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Transform simple data format to radar chart format
|
|
137
|
+
*/
|
|
138
|
+
function transformToRadarData(data, categoryKey, dataKeys, colors, labels) {
|
|
139
|
+
const series = dataKeys.map((key, index) => ({
|
|
140
|
+
data: data.map((item) => ({
|
|
141
|
+
category: String(item[categoryKey] ?? ''),
|
|
142
|
+
value: typeof item[key] === 'number' ? item[key] : 0,
|
|
143
|
+
})),
|
|
144
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
145
|
+
label: labels?.[index] || key,
|
|
146
|
+
}));
|
|
147
|
+
return { series };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Transform simple data format to heatmap format
|
|
151
|
+
*/
|
|
152
|
+
function transformToHeatmapData(data, xKey, yKey, valueKey) {
|
|
153
|
+
return {
|
|
154
|
+
data: data.map((item) => ({
|
|
155
|
+
x: String(item[xKey] ?? ''),
|
|
156
|
+
y: String(item[yKey] ?? ''),
|
|
157
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
158
|
+
})),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Transform simple data format to box plot format
|
|
163
|
+
*/
|
|
164
|
+
function transformToBoxPlotData(data, labelKey, minKey, q1Key, medianKey, q3Key, maxKey, colors) {
|
|
165
|
+
return {
|
|
166
|
+
data: data.map((item, index) => ({
|
|
167
|
+
label: String(item[labelKey] ?? ''),
|
|
168
|
+
min: typeof item[minKey] === 'number' ? item[minKey] : 0,
|
|
169
|
+
q1: typeof item[q1Key] === 'number' ? item[q1Key] : 0,
|
|
170
|
+
median: typeof item[medianKey] === 'number' ? item[medianKey] : 0,
|
|
171
|
+
q3: typeof item[q3Key] === 'number' ? item[q3Key] : 0,
|
|
172
|
+
max: typeof item[maxKey] === 'number' ? item[maxKey] : 0,
|
|
173
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
174
|
+
})),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Transform simple data format to histogram format
|
|
179
|
+
*/
|
|
180
|
+
function transformToHistogramData(data, valueKey, bins) {
|
|
181
|
+
const values = data
|
|
182
|
+
.map((item) => (typeof item[valueKey] === 'number' ? item[valueKey] : 0))
|
|
183
|
+
.filter((v) => !isNaN(v));
|
|
184
|
+
return { values, bins };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Transform simple data format to waterfall chart format
|
|
188
|
+
*/
|
|
189
|
+
function transformToWaterfallData(data, labelKey, valueKey, colors) {
|
|
190
|
+
return {
|
|
191
|
+
data: data.map((item, index) => ({
|
|
192
|
+
label: String(item[labelKey] ?? ''),
|
|
193
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
194
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
195
|
+
})),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Transform simple data format to candlestick chart format
|
|
200
|
+
*/
|
|
201
|
+
function transformToCandlestickData(data, dateKey, openKey, highKey, lowKey, closeKey) {
|
|
202
|
+
return {
|
|
203
|
+
data: data.map((item) => ({
|
|
204
|
+
date: item[dateKey],
|
|
205
|
+
open: typeof item[openKey] === 'number' ? item[openKey] : 0,
|
|
206
|
+
high: typeof item[highKey] === 'number' ? item[highKey] : 0,
|
|
207
|
+
low: typeof item[lowKey] === 'number' ? item[lowKey] : 0,
|
|
208
|
+
close: typeof item[closeKey] === 'number' ? item[closeKey] : 0,
|
|
209
|
+
})),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Transform simple data format to funnel chart format
|
|
214
|
+
*/
|
|
215
|
+
function transformToFunnelData(data, labelKey, valueKey, colors) {
|
|
216
|
+
return {
|
|
217
|
+
stages: data.map((item, index) => ({
|
|
218
|
+
label: String(item[labelKey] ?? ''),
|
|
219
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
220
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
221
|
+
})),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Transform simple data format to sparkline format
|
|
226
|
+
*/
|
|
227
|
+
function transformToSparklineData(data, valueKey) {
|
|
228
|
+
const values = data
|
|
229
|
+
.map((item) => (typeof item[valueKey] === 'number' ? item[valueKey] : 0))
|
|
230
|
+
.filter((v) => !isNaN(v));
|
|
231
|
+
return { data: values };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Transform simple data format to multi-line sparkline format
|
|
235
|
+
*/
|
|
236
|
+
function transformToMultiSparklineData(data, dataKeys, colors, labels) {
|
|
237
|
+
const series = dataKeys.map((key, index) => ({
|
|
238
|
+
data: data.map((item) => (typeof item[key] === 'number' ? item[key] : 0)),
|
|
239
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
240
|
+
label: labels?.[index] || key,
|
|
241
|
+
}));
|
|
242
|
+
return { series };
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Transform simple data format to treemap format
|
|
246
|
+
*/
|
|
247
|
+
function transformToTreemapData(data, labelKey, valueKey, parentKey, colors) {
|
|
248
|
+
// If no parentKey, all items are at root level
|
|
249
|
+
if (!parentKey) {
|
|
250
|
+
const nodes = data.map((item, index) => ({
|
|
251
|
+
label: String(item[labelKey] ?? ''),
|
|
252
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
253
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
254
|
+
}));
|
|
255
|
+
return { data: nodes };
|
|
256
|
+
}
|
|
257
|
+
// Build hierarchical structure if parentKey is provided
|
|
258
|
+
const nodeMap = new Map();
|
|
259
|
+
const rootNodes = [];
|
|
260
|
+
// First pass: create all nodes
|
|
261
|
+
data.forEach((item, index) => {
|
|
262
|
+
const label = String(item[labelKey] ?? '');
|
|
263
|
+
const node = {
|
|
264
|
+
label,
|
|
265
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
266
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
267
|
+
children: [],
|
|
268
|
+
};
|
|
269
|
+
nodeMap.set(label, node);
|
|
270
|
+
});
|
|
271
|
+
// Second pass: build hierarchy
|
|
272
|
+
data.forEach((item) => {
|
|
273
|
+
const label = String(item[labelKey] ?? '');
|
|
274
|
+
const parent = item[parentKey];
|
|
275
|
+
const node = nodeMap.get(label);
|
|
276
|
+
if (parent && nodeMap.has(String(parent))) {
|
|
277
|
+
const parentNode = nodeMap.get(String(parent));
|
|
278
|
+
parentNode.children.push(node);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
rootNodes.push(node);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
// Clean up empty children arrays
|
|
285
|
+
const cleanNode = (node) => {
|
|
286
|
+
if (node.children && node.children.length === 0) {
|
|
287
|
+
delete node.children;
|
|
288
|
+
}
|
|
289
|
+
else if (node.children) {
|
|
290
|
+
node.children.forEach(cleanNode);
|
|
291
|
+
}
|
|
292
|
+
return node;
|
|
293
|
+
};
|
|
294
|
+
rootNodes.forEach(cleanNode);
|
|
295
|
+
return { data: rootNodes };
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Transform simple data format to sunburst chart format
|
|
299
|
+
*/
|
|
300
|
+
function transformToSunburstData(data, labelKey, valueKey, parentKey, colors) {
|
|
301
|
+
// Reuse treemap transformation as the data structure is the same
|
|
302
|
+
return transformToTreemapData(data, labelKey, valueKey, parentKey, colors);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Transform simple data format to sankey diagram format
|
|
306
|
+
*/
|
|
307
|
+
function transformToSankeyData(data, sourceKey, targetKey, valueKey, colors) {
|
|
308
|
+
// Extract unique nodes
|
|
309
|
+
const nodeSet = new Set();
|
|
310
|
+
data.forEach((item) => {
|
|
311
|
+
const source = String(item[sourceKey] ?? '');
|
|
312
|
+
const target = String(item[targetKey] ?? '');
|
|
313
|
+
if (source)
|
|
314
|
+
nodeSet.add(source);
|
|
315
|
+
if (target)
|
|
316
|
+
nodeSet.add(target);
|
|
317
|
+
});
|
|
318
|
+
const nodes = Array.from(nodeSet).map((id) => ({
|
|
319
|
+
id,
|
|
320
|
+
label: id,
|
|
321
|
+
}));
|
|
322
|
+
// Create links
|
|
323
|
+
const links = data.map((item, index) => ({
|
|
324
|
+
source: String(item[sourceKey] ?? ''),
|
|
325
|
+
target: String(item[targetKey] ?? ''),
|
|
326
|
+
value: typeof item[valueKey] === 'number' ? item[valueKey] : 0,
|
|
327
|
+
color: colors?.[index] || exports.DEFAULT_COLORS[index % exports.DEFAULT_COLORS.length],
|
|
328
|
+
}));
|
|
329
|
+
return { nodes, links };
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=dataTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataTransform.js","sourceRoot":"","sources":["../../../../src/core/utils/dataTransform.ts"],"names":[],"mappings":"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"}
|