@particle-academy/fancy-echarts 1.2.0 → 1.2.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/README.md +213 -213
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/docs/EChart.md +207 -207
- package/docs/EChart3D.md +178 -178
- package/docs/EChartGraphic.md +149 -149
- package/docs/registration.md +152 -152
- package/docs/themes.md +152 -152
- package/docs/useECharts.md +129 -129
- package/package.json +66 -66
package/README.md
CHANGED
|
@@ -1,213 +1,213 @@
|
|
|
1
|
-
# @particle-academy/fancy-echarts
|
|
2
|
-
|
|
3
|
-
React component library wrapping [Apache ECharts](https://echarts.apache.org/) with typed components for every chart type — 2D, 3D, and graphic layers.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# npm
|
|
9
|
-
npm install @particle-academy/fancy-echarts echarts
|
|
10
|
-
|
|
11
|
-
# pnpm
|
|
12
|
-
pnpm add @particle-academy/fancy-echarts echarts
|
|
13
|
-
|
|
14
|
-
# yarn
|
|
15
|
-
yarn add @particle-academy/fancy-echarts echarts
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
For 3D charts (globe, surface, scatter3D, bar3D):
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm install echarts-gl
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
**Peer dependencies:** `react >= 18`, `react-dom >= 18`, `echarts >= 5.5`
|
|
25
|
-
|
|
26
|
-
## Quick Start
|
|
27
|
-
|
|
28
|
-
```tsx
|
|
29
|
-
import { EChart, registerAll } from "@particle-academy/fancy-echarts";
|
|
30
|
-
|
|
31
|
-
// Register all chart types (convenience for quick start)
|
|
32
|
-
registerAll();
|
|
33
|
-
|
|
34
|
-
function App() {
|
|
35
|
-
return (
|
|
36
|
-
<EChart
|
|
37
|
-
option={{
|
|
38
|
-
xAxis: { type: "category", data: ["Mon", "Tue", "Wed", "Thu", "Fri"] },
|
|
39
|
-
yAxis: { type: "value" },
|
|
40
|
-
series: [{ type: "bar", data: [120, 200, 150, 80, 70] }],
|
|
41
|
-
}}
|
|
42
|
-
/>
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Security: untrusted formatter strings
|
|
48
|
-
|
|
49
|
-
ECharts permits HTML strings in many `option` text fields — `tooltip.formatter`, `title.subtext`, `legend.formatter`, axis label `formatter`, etc. The wrapper forwards your `option` to ECharts as-is. If a formatter string interpolates user-generated data, sanitize it first or use a function formatter and assemble safe DOM:
|
|
50
|
-
|
|
51
|
-
```tsx
|
|
52
|
-
// ❌ Unsafe — user-controlled name renders as HTML
|
|
53
|
-
option={{
|
|
54
|
-
tooltip: { formatter: `<b>${userName}</b>: ${value}` },
|
|
55
|
-
}}
|
|
56
|
-
|
|
57
|
-
// ✅ Function formatter, escape user input
|
|
58
|
-
option={{
|
|
59
|
-
tooltip: {
|
|
60
|
-
formatter: (params) => {
|
|
61
|
-
const safe = params.name.replace(/[&<>"']/g, (c) => ({
|
|
62
|
-
"&": "&", "<": "<", ">": ">", '"': """, "'": "'",
|
|
63
|
-
}[c]!));
|
|
64
|
-
return `<b>${safe}</b>: ${params.value}`;
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
}}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
This is consumer responsibility — the wrapper does not introspect `option` to identify HTML-bearing fields.
|
|
71
|
-
|
|
72
|
-
## Documentation
|
|
73
|
-
|
|
74
|
-
Full component documentation is available in the [docs/](docs/) folder:
|
|
75
|
-
|
|
76
|
-
| Topic | Description |
|
|
77
|
-
|-------|-------------|
|
|
78
|
-
| [EChart](docs/EChart.md) | Base chart component + all 20 series sub-components |
|
|
79
|
-
| [EChart3D](docs/EChart3D.md) | 3D charts (Bar, Scatter, Line, Surface, Globe) |
|
|
80
|
-
| [EChartGraphic](docs/EChartGraphic.md) | Custom drawing with the graphic API |
|
|
81
|
-
| [useECharts](docs/useECharts.md) | Core hook for custom integrations |
|
|
82
|
-
| [Registration](docs/registration.md) | Tree shaking and selective chart registration |
|
|
83
|
-
| [Themes](docs/themes.md) | Built-in themes and custom theme creation |
|
|
84
|
-
|
|
85
|
-
## Components
|
|
86
|
-
|
|
87
|
-
### `<EChart>` — Base Component
|
|
88
|
-
|
|
89
|
-
Accepts any ECharts option object. Full power of ECharts with React lifecycle management.
|
|
90
|
-
|
|
91
|
-
```tsx
|
|
92
|
-
<EChart
|
|
93
|
-
option={echartsOption}
|
|
94
|
-
theme="dark"
|
|
95
|
-
renderer="canvas"
|
|
96
|
-
autoResize={true}
|
|
97
|
-
onEvents={{ click: (params) => console.log(params) }}
|
|
98
|
-
style={{ height: 500 }}
|
|
99
|
-
/>
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
| Prop | Type | Default | Description |
|
|
103
|
-
|------|------|---------|-------------|
|
|
104
|
-
| `option` | `EChartsOption` | — | ECharts option object |
|
|
105
|
-
| `theme` | `string \| object` | auto | Theme name or object. Auto-detects dark mode if omitted |
|
|
106
|
-
| `renderer` | `"canvas" \| "svg"` | `"canvas"` | Rendering engine |
|
|
107
|
-
| `notMerge` | `boolean` | `false` | Replace option instead of merging |
|
|
108
|
-
| `lazyUpdate` | `boolean` | `false` | Delay chart update |
|
|
109
|
-
| `showLoading` | `boolean` | `false` | Show loading animation |
|
|
110
|
-
| `loadingOption` | `object` | — | Loading animation config |
|
|
111
|
-
| `onEvents` | `Record<string, Function>` | — | Event handlers (`click`, `mouseover`, etc.) |
|
|
112
|
-
| `autoResize` | `boolean` | `true` | Auto-resize on container change |
|
|
113
|
-
| `style` | `CSSProperties` | `{ width: "100%", height: 400 }` | Container style |
|
|
114
|
-
|
|
115
|
-
### `<EChart3D>` — 3D Charts
|
|
116
|
-
|
|
117
|
-
Separate component that automatically loads `echarts-gl` before rendering. Shows a loading placeholder until the 3D engine is ready.
|
|
118
|
-
|
|
119
|
-
```tsx
|
|
120
|
-
import { EChart3D } from "@particle-academy/fancy-echarts";
|
|
121
|
-
|
|
122
|
-
<EChart3D
|
|
123
|
-
option={{
|
|
124
|
-
globe: {
|
|
125
|
-
baseColor: "#1a3b5c",
|
|
126
|
-
shading: "color",
|
|
127
|
-
atmosphere: { show: true },
|
|
128
|
-
viewControl: { autoRotate: true },
|
|
129
|
-
},
|
|
130
|
-
}}
|
|
131
|
-
style={{ height: 500 }}
|
|
132
|
-
/>
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### `<EChartGraphic>` — Graphic Layer
|
|
136
|
-
|
|
137
|
-
For custom drawing with the ECharts graphic API.
|
|
138
|
-
|
|
139
|
-
```tsx
|
|
140
|
-
import { EChartGraphic } from "@particle-academy/fancy-echarts";
|
|
141
|
-
|
|
142
|
-
<EChartGraphic
|
|
143
|
-
elements={[
|
|
144
|
-
{ type: "circle", shape: { cx: 100, cy: 100, r: 50 }, style: { fill: "#5470c6" } },
|
|
145
|
-
{ type: "text", style: { text: "Hello", x: 100, y: 100, fill: "#fff" } },
|
|
146
|
-
]}
|
|
147
|
-
/>
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Hooks
|
|
151
|
-
|
|
152
|
-
### `useECharts`
|
|
153
|
-
|
|
154
|
-
Core hook for custom integrations:
|
|
155
|
-
|
|
156
|
-
```tsx
|
|
157
|
-
import { useECharts } from "@particle-academy/fancy-echarts";
|
|
158
|
-
|
|
159
|
-
function CustomChart() {
|
|
160
|
-
const { chartRef, instance } = useECharts({
|
|
161
|
-
option: { /* ... */ },
|
|
162
|
-
autoResize: true,
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
return <div ref={chartRef} style={{ width: "100%", height: 400 }} />;
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Dark Mode
|
|
170
|
-
|
|
171
|
-
Dark mode is automatic. When no `theme` prop is provided, the component detects `prefers-color-scheme: dark` and applies ECharts' built-in dark theme with a transparent background (so charts blend with your page's dark background). The theme updates reactively when the user toggles their system preference.
|
|
172
|
-
|
|
173
|
-
To override, pass a specific `theme` prop:
|
|
174
|
-
|
|
175
|
-
```tsx
|
|
176
|
-
<EChart option={option} theme="dark" /> {/* Always dark */}
|
|
177
|
-
<EChart option={option} theme="vintage" /> {/* Always vintage */}
|
|
178
|
-
<EChart option={option} /> {/* Auto dark/light */}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Tree Shaking
|
|
182
|
-
|
|
183
|
-
For production bundle optimization, use `registerCharts` to register only the chart types you need instead of `registerAll`:
|
|
184
|
-
|
|
185
|
-
```tsx
|
|
186
|
-
import { registerCharts, BarChart, LineChart, GridComponent, TooltipComponent, CanvasRenderer } from "@particle-academy/fancy-echarts";
|
|
187
|
-
|
|
188
|
-
registerCharts([BarChart, LineChart, GridComponent, TooltipComponent, CanvasRenderer]);
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## Themes
|
|
192
|
-
|
|
193
|
-
Built-in theme presets:
|
|
194
|
-
|
|
195
|
-
```tsx
|
|
196
|
-
import { registerBuiltinThemes } from "@particle-academy/fancy-echarts";
|
|
197
|
-
|
|
198
|
-
registerBuiltinThemes(); // Registers "dark-preset", "vintage", "pastel"
|
|
199
|
-
|
|
200
|
-
<EChart option={option} theme="vintage" />
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
## Supported Chart Types
|
|
204
|
-
|
|
205
|
-
**2D Charts:** Line, Bar, Pie, Scatter, Radar, Heatmap, Candlestick, Boxplot, Treemap, Sunburst, Funnel, Gauge, Sankey, Graph, Parallel, ThemeRiver, Calendar, PictorialBar, Map, Custom, EffectScatter
|
|
206
|
-
|
|
207
|
-
**3D Charts:** Bar3D, Scatter3D, Line3D, Surface, Globe
|
|
208
|
-
|
|
209
|
-
**Graphic:** Rect, Circle, Ring, Arc, Polygon, Polyline, Path, Image, Text, Group — with keyframe animation support
|
|
210
|
-
|
|
211
|
-
## License
|
|
212
|
-
|
|
213
|
-
MIT
|
|
1
|
+
# @particle-academy/fancy-echarts
|
|
2
|
+
|
|
3
|
+
React component library wrapping [Apache ECharts](https://echarts.apache.org/) with typed components for every chart type — 2D, 3D, and graphic layers.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# npm
|
|
9
|
+
npm install @particle-academy/fancy-echarts echarts
|
|
10
|
+
|
|
11
|
+
# pnpm
|
|
12
|
+
pnpm add @particle-academy/fancy-echarts echarts
|
|
13
|
+
|
|
14
|
+
# yarn
|
|
15
|
+
yarn add @particle-academy/fancy-echarts echarts
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
For 3D charts (globe, surface, scatter3D, bar3D):
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install echarts-gl
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Peer dependencies:** `react >= 18`, `react-dom >= 18`, `echarts >= 5.5`
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { EChart, registerAll } from "@particle-academy/fancy-echarts";
|
|
30
|
+
|
|
31
|
+
// Register all chart types (convenience for quick start)
|
|
32
|
+
registerAll();
|
|
33
|
+
|
|
34
|
+
function App() {
|
|
35
|
+
return (
|
|
36
|
+
<EChart
|
|
37
|
+
option={{
|
|
38
|
+
xAxis: { type: "category", data: ["Mon", "Tue", "Wed", "Thu", "Fri"] },
|
|
39
|
+
yAxis: { type: "value" },
|
|
40
|
+
series: [{ type: "bar", data: [120, 200, 150, 80, 70] }],
|
|
41
|
+
}}
|
|
42
|
+
/>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Security: untrusted formatter strings
|
|
48
|
+
|
|
49
|
+
ECharts permits HTML strings in many `option` text fields — `tooltip.formatter`, `title.subtext`, `legend.formatter`, axis label `formatter`, etc. The wrapper forwards your `option` to ECharts as-is. If a formatter string interpolates user-generated data, sanitize it first or use a function formatter and assemble safe DOM:
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
// ❌ Unsafe — user-controlled name renders as HTML
|
|
53
|
+
option={{
|
|
54
|
+
tooltip: { formatter: `<b>${userName}</b>: ${value}` },
|
|
55
|
+
}}
|
|
56
|
+
|
|
57
|
+
// ✅ Function formatter, escape user input
|
|
58
|
+
option={{
|
|
59
|
+
tooltip: {
|
|
60
|
+
formatter: (params) => {
|
|
61
|
+
const safe = params.name.replace(/[&<>"']/g, (c) => ({
|
|
62
|
+
"&": "&", "<": "<", ">": ">", '"': """, "'": "'",
|
|
63
|
+
}[c]!));
|
|
64
|
+
return `<b>${safe}</b>: ${params.value}`;
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
}}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This is consumer responsibility — the wrapper does not introspect `option` to identify HTML-bearing fields.
|
|
71
|
+
|
|
72
|
+
## Documentation
|
|
73
|
+
|
|
74
|
+
Full component documentation is available in the [docs/](docs/) folder:
|
|
75
|
+
|
|
76
|
+
| Topic | Description |
|
|
77
|
+
|-------|-------------|
|
|
78
|
+
| [EChart](docs/EChart.md) | Base chart component + all 20 series sub-components |
|
|
79
|
+
| [EChart3D](docs/EChart3D.md) | 3D charts (Bar, Scatter, Line, Surface, Globe) |
|
|
80
|
+
| [EChartGraphic](docs/EChartGraphic.md) | Custom drawing with the graphic API |
|
|
81
|
+
| [useECharts](docs/useECharts.md) | Core hook for custom integrations |
|
|
82
|
+
| [Registration](docs/registration.md) | Tree shaking and selective chart registration |
|
|
83
|
+
| [Themes](docs/themes.md) | Built-in themes and custom theme creation |
|
|
84
|
+
|
|
85
|
+
## Components
|
|
86
|
+
|
|
87
|
+
### `<EChart>` — Base Component
|
|
88
|
+
|
|
89
|
+
Accepts any ECharts option object. Full power of ECharts with React lifecycle management.
|
|
90
|
+
|
|
91
|
+
```tsx
|
|
92
|
+
<EChart
|
|
93
|
+
option={echartsOption}
|
|
94
|
+
theme="dark"
|
|
95
|
+
renderer="canvas"
|
|
96
|
+
autoResize={true}
|
|
97
|
+
onEvents={{ click: (params) => console.log(params) }}
|
|
98
|
+
style={{ height: 500 }}
|
|
99
|
+
/>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
| Prop | Type | Default | Description |
|
|
103
|
+
|------|------|---------|-------------|
|
|
104
|
+
| `option` | `EChartsOption` | — | ECharts option object |
|
|
105
|
+
| `theme` | `string \| object` | auto | Theme name or object. Auto-detects dark mode if omitted |
|
|
106
|
+
| `renderer` | `"canvas" \| "svg"` | `"canvas"` | Rendering engine |
|
|
107
|
+
| `notMerge` | `boolean` | `false` | Replace option instead of merging |
|
|
108
|
+
| `lazyUpdate` | `boolean` | `false` | Delay chart update |
|
|
109
|
+
| `showLoading` | `boolean` | `false` | Show loading animation |
|
|
110
|
+
| `loadingOption` | `object` | — | Loading animation config |
|
|
111
|
+
| `onEvents` | `Record<string, Function>` | — | Event handlers (`click`, `mouseover`, etc.) |
|
|
112
|
+
| `autoResize` | `boolean` | `true` | Auto-resize on container change |
|
|
113
|
+
| `style` | `CSSProperties` | `{ width: "100%", height: 400 }` | Container style |
|
|
114
|
+
|
|
115
|
+
### `<EChart3D>` — 3D Charts
|
|
116
|
+
|
|
117
|
+
Separate component that automatically loads `echarts-gl` before rendering. Shows a loading placeholder until the 3D engine is ready.
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
import { EChart3D } from "@particle-academy/fancy-echarts";
|
|
121
|
+
|
|
122
|
+
<EChart3D
|
|
123
|
+
option={{
|
|
124
|
+
globe: {
|
|
125
|
+
baseColor: "#1a3b5c",
|
|
126
|
+
shading: "color",
|
|
127
|
+
atmosphere: { show: true },
|
|
128
|
+
viewControl: { autoRotate: true },
|
|
129
|
+
},
|
|
130
|
+
}}
|
|
131
|
+
style={{ height: 500 }}
|
|
132
|
+
/>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### `<EChartGraphic>` — Graphic Layer
|
|
136
|
+
|
|
137
|
+
For custom drawing with the ECharts graphic API.
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
import { EChartGraphic } from "@particle-academy/fancy-echarts";
|
|
141
|
+
|
|
142
|
+
<EChartGraphic
|
|
143
|
+
elements={[
|
|
144
|
+
{ type: "circle", shape: { cx: 100, cy: 100, r: 50 }, style: { fill: "#5470c6" } },
|
|
145
|
+
{ type: "text", style: { text: "Hello", x: 100, y: 100, fill: "#fff" } },
|
|
146
|
+
]}
|
|
147
|
+
/>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Hooks
|
|
151
|
+
|
|
152
|
+
### `useECharts`
|
|
153
|
+
|
|
154
|
+
Core hook for custom integrations:
|
|
155
|
+
|
|
156
|
+
```tsx
|
|
157
|
+
import { useECharts } from "@particle-academy/fancy-echarts";
|
|
158
|
+
|
|
159
|
+
function CustomChart() {
|
|
160
|
+
const { chartRef, instance } = useECharts({
|
|
161
|
+
option: { /* ... */ },
|
|
162
|
+
autoResize: true,
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
return <div ref={chartRef} style={{ width: "100%", height: 400 }} />;
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Dark Mode
|
|
170
|
+
|
|
171
|
+
Dark mode is automatic. When no `theme` prop is provided, the component detects `prefers-color-scheme: dark` and applies ECharts' built-in dark theme with a transparent background (so charts blend with your page's dark background). The theme updates reactively when the user toggles their system preference.
|
|
172
|
+
|
|
173
|
+
To override, pass a specific `theme` prop:
|
|
174
|
+
|
|
175
|
+
```tsx
|
|
176
|
+
<EChart option={option} theme="dark" /> {/* Always dark */}
|
|
177
|
+
<EChart option={option} theme="vintage" /> {/* Always vintage */}
|
|
178
|
+
<EChart option={option} /> {/* Auto dark/light */}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Tree Shaking
|
|
182
|
+
|
|
183
|
+
For production bundle optimization, use `registerCharts` to register only the chart types you need instead of `registerAll`:
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
import { registerCharts, BarChart, LineChart, GridComponent, TooltipComponent, CanvasRenderer } from "@particle-academy/fancy-echarts";
|
|
187
|
+
|
|
188
|
+
registerCharts([BarChart, LineChart, GridComponent, TooltipComponent, CanvasRenderer]);
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Themes
|
|
192
|
+
|
|
193
|
+
Built-in theme presets:
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
import { registerBuiltinThemes } from "@particle-academy/fancy-echarts";
|
|
197
|
+
|
|
198
|
+
registerBuiltinThemes(); // Registers "dark-preset", "vintage", "pastel"
|
|
199
|
+
|
|
200
|
+
<EChart option={option} theme="vintage" />
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Supported Chart Types
|
|
204
|
+
|
|
205
|
+
**2D Charts:** Line, Bar, Pie, Scatter, Radar, Heatmap, Candlestick, Boxplot, Treemap, Sunburst, Funnel, Gauge, Sankey, Graph, Parallel, ThemeRiver, Calendar, PictorialBar, Map, Custom, EffectScatter
|
|
206
|
+
|
|
207
|
+
**3D Charts:** Bar3D, Scatter3D, Line3D, Surface, Globe
|
|
208
|
+
|
|
209
|
+
**Graphic:** Rect, Circle, Ring, Arc, Polygon, Polyline, Path, Image, Text, Group — with keyframe animation support
|
|
210
|
+
|
|
211
|
+
## License
|
|
212
|
+
|
|
213
|
+
MIT
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-resize-observer.ts","../src/hooks/use-echarts.ts","../src/components/EChart.tsx","../src/components/EChart3D.tsx","../src/components/EChartGraphic.tsx","../src/utils/register.ts","../src/utils/themes.ts"],"names":["useRef","useEffect","useSyncExternalStore","useState","getInstanceByDom","init","forwardRef","jsx","useMemo","DEFAULT_STYLE","Fragment","LineChart","BarChart","PieChart","ScatterChart","RadarChart","HeatmapChart","GaugeChart","FunnelChart","TreemapChart","SunburstChart","SankeyChart","GraphChart","CandlestickChart","BoxplotChart","ParallelChart","ThemeRiverChart","MapChart","CustomChart","EffectScatterChart","PictorialBarChart","GridComponent","TooltipComponent","TitleComponent","LegendComponent","DataZoomComponent","ToolboxComponent","VisualMapComponent","GeoComponent","ParallelComponent","CalendarComponent","GraphicComponent","PolarComponent","RadarComp","DatasetComponent","MarkLineComponent","MarkPointComponent","MarkAreaComponent","TimelineComponent","BrushComponent","SingleAxisComponent","CanvasRenderer","SVGRenderer","use","echartsRegisterTheme"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, type RefObject } from \"react\";\r\n\r\nexport function useResizeObserver(\r\n ref: RefObject<HTMLElement | null>,\r\n callback: () => void\r\n): void {\r\n const callbackRef = useRef(callback);\r\n callbackRef.current = callback;\r\n\r\n useEffect(() => {\r\n const element = ref.current;\r\n if (!element) return;\r\n\r\n const observer = new ResizeObserver(() => {\r\n callbackRef.current();\r\n });\r\n\r\n observer.observe(element);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [ref]);\r\n}\r\n","import { useEffect, useRef, useState, useSyncExternalStore, type RefObject } from \"react\";\r\nimport { init, getInstanceByDom, type EChartsType } from \"echarts/core\";\r\nimport type { EChartsOption } from \"echarts\";\r\n\r\ntype ECharts = EChartsType;\r\nimport { useResizeObserver } from \"./use-resize-observer\";\r\n\r\nexport interface UseEChartsOptions {\r\n option: EChartsOption;\r\n theme?: string | object;\r\n renderer?: \"canvas\" | \"svg\";\r\n notMerge?: boolean;\r\n lazyUpdate?: boolean;\r\n showLoading?: boolean;\r\n loadingOption?: object;\r\n onEvents?: Record<string, (params: any) => void>;\r\n autoResize?: boolean;\r\n}\r\n\r\nexport interface UseEChartsReturn {\r\n chartRef: RefObject<HTMLDivElement | null>;\r\n instance: ECharts | null;\r\n}\r\n\r\n/** Detect system dark mode preference reactively. */\r\nfunction useDarkMode(): boolean {\r\n return useSyncExternalStore(\r\n (callback) => {\r\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\r\n mq.addEventListener(\"change\", callback);\r\n return () => mq.removeEventListener(\"change\", callback);\r\n },\r\n () => window.matchMedia(\"(prefers-color-scheme: dark)\").matches,\r\n () => false,\r\n );\r\n}\r\n\r\nexport function useECharts(options: UseEChartsOptions): UseEChartsReturn {\r\n const {\r\n option,\r\n theme,\r\n renderer = \"canvas\",\r\n notMerge = false,\r\n lazyUpdate = false,\r\n showLoading = false,\r\n loadingOption,\r\n onEvents,\r\n autoResize = true,\r\n } = options;\r\n\r\n const isDark = useDarkMode();\r\n // Auto-detect theme: use explicit theme if provided, otherwise \"dark\" or undefined\r\n const autoDark = theme === undefined && isDark;\r\n const resolvedTheme = theme !== undefined ? theme : isDark ? \"dark\" : undefined;\r\n\r\n const chartRef = useRef<HTMLDivElement | null>(null);\r\n const instanceRef = useRef<ECharts | null>(null);\r\n const [instance, setInstance] = useState<ECharts | null>(null);\r\n\r\n // Init/dispose — re-init when theme changes (including dark mode toggle)\r\n useEffect(() => {\r\n if (!chartRef.current) return;\r\n\r\n // Dispose any existing instance (handles StrictMode double-mount)\r\n const existing = getInstanceByDom(chartRef.current);\r\n if (existing) {\r\n existing.dispose();\r\n }\r\n\r\n const chart = init(chartRef.current, resolvedTheme, { renderer });\r\n instanceRef.current = chart;\r\n setInstance(chart);\r\n\r\n return () => {\r\n chart.dispose();\r\n instanceRef.current = null;\r\n setInstance(null);\r\n };\r\n }, [resolvedTheme, renderer]);\r\n\r\n // Set option\r\n useEffect(() => {\r\n const chart = instanceRef.current;\r\n if (!chart || !option) return;\r\n // When using auto-detected dark theme, force transparent background\r\n // so charts blend with the page's own dark background\r\n const finalOption = autoDark\r\n ? { backgroundColor: \"transparent\", ...option }\r\n : option;\r\n chart.setOption(finalOption, { notMerge, lazyUpdate });\r\n }, [option, notMerge, lazyUpdate, autoDark]);\r\n\r\n // Loading state\r\n useEffect(() => {\r\n const chart = instanceRef.current;\r\n if (!chart) return;\r\n if (showLoading) {\r\n chart.showLoading(\"default\", loadingOption);\r\n } else {\r\n chart.hideLoading();\r\n }\r\n }, [showLoading, loadingOption]);\r\n\r\n // Event binding\r\n useEffect(() => {\r\n const chart = instanceRef.current;\r\n if (!chart || !onEvents) return;\r\n\r\n const entries = Object.entries(onEvents);\r\n for (const [event, handler] of entries) {\r\n chart.on(event, handler);\r\n }\r\n\r\n return () => {\r\n for (const [event, handler] of entries) {\r\n chart.off(event, handler);\r\n }\r\n };\r\n }, [onEvents]);\r\n\r\n // Auto-resize\r\n useResizeObserver(chartRef, () => {\r\n if (autoResize && instanceRef.current) {\r\n instanceRef.current.resize();\r\n }\r\n });\r\n\r\n return { chartRef, instance };\r\n}\r\n","import React, { forwardRef, useMemo } from \"react\";\r\nimport type { EChartsOption } from \"echarts\";\r\nimport { useECharts } from \"../hooks/use-echarts\";\r\nimport type {\r\n EChartComponentProps,\r\n SeriesComponentProps,\r\n ChartDivProps,\r\n} from \"../types\";\r\n\r\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\r\n\r\n/** Base EChart component — accepts any ECharts option. */\r\nconst EChartBase = forwardRef<HTMLDivElement, EChartComponentProps>(\r\n (\r\n {\r\n option,\r\n theme,\r\n renderer,\r\n notMerge,\r\n lazyUpdate,\r\n showLoading,\r\n loadingOption,\r\n onEvents,\r\n autoResize = true,\r\n style,\r\n className,\r\n ...rest\r\n },\r\n _ref\r\n ) => {\r\n const { chartRef } = useECharts({\r\n option,\r\n theme,\r\n renderer,\r\n notMerge,\r\n lazyUpdate,\r\n showLoading,\r\n loadingOption,\r\n onEvents,\r\n autoResize,\r\n });\r\n\r\n return (\r\n <div\r\n ref={chartRef}\r\n style={{ ...DEFAULT_STYLE, ...style }}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n }\r\n);\r\n\r\nEChartBase.displayName = \"EChart\";\r\n\r\n// --- Helper to create typed series sub-components ---\r\n\r\nfunction createSeriesComponent(\r\n seriesType: string,\r\n displayName: string\r\n): React.FC<SeriesComponentProps & ChartDivProps> {\r\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\r\n data,\r\n title,\r\n xAxis,\r\n yAxis,\r\n tooltip = true,\r\n legend = false,\r\n grid,\r\n seriesOptions = {},\r\n option: extraOption = {},\r\n style,\r\n className,\r\n ...rest\r\n }) => {\r\n const option = useMemo((): EChartsOption => {\r\n const base: EChartsOption = {};\r\n\r\n if (title) {\r\n base.title = { text: title };\r\n }\r\n\r\n if (tooltip === true) {\r\n base.tooltip = { trigger: \"axis\" };\r\n } else if (tooltip && typeof tooltip === \"object\") {\r\n base.tooltip = tooltip;\r\n }\r\n\r\n if (legend === true) {\r\n base.legend = {};\r\n } else if (legend && typeof legend === \"object\") {\r\n base.legend = legend;\r\n }\r\n\r\n if (grid) {\r\n base.grid = grid;\r\n }\r\n\r\n // Handle axis-based charts\r\n const axisCharts = [\r\n \"line\",\r\n \"bar\",\r\n \"scatter\",\r\n \"candlestick\",\r\n \"boxplot\",\r\n \"heatmap\",\r\n \"effectScatter\",\r\n \"pictorialBar\",\r\n ];\r\n if (axisCharts.includes(seriesType)) {\r\n base.xAxis = xAxis ?? { type: \"category\" };\r\n base.yAxis = yAxis ?? { type: \"value\" };\r\n }\r\n\r\n // Handle data format\r\n if (Array.isArray(data)) {\r\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\r\n } else if (data && typeof data === \"object\" && \"series\" in data) {\r\n // Multi-series: { categories: [...], series: [{ name, data }, ...] }\r\n const multiData = data as {\r\n categories?: string[];\r\n series: Array<{ name?: string; data: any[]; [k: string]: any }>;\r\n };\r\n if (multiData.categories && axisCharts.includes(seriesType)) {\r\n base.xAxis = xAxis ?? {\r\n type: \"category\",\r\n data: multiData.categories,\r\n };\r\n }\r\n base.series = multiData.series.map((s) => ({\r\n type: seriesType,\r\n ...seriesOptions,\r\n ...s,\r\n })) as any;\r\n } else {\r\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\r\n }\r\n\r\n return { ...base, ...extraOption };\r\n }, [\r\n data,\r\n title,\r\n xAxis,\r\n yAxis,\r\n tooltip,\r\n legend,\r\n grid,\r\n seriesOptions,\r\n extraOption,\r\n ]);\r\n\r\n return (\r\n <EChartBase\r\n option={option}\r\n style={style}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n };\r\n\r\n Component.displayName = displayName;\r\n return Component;\r\n}\r\n\r\n// --- Compound component with all chart type sub-components ---\r\n\r\nexport const EChart = Object.assign(EChartBase, {\r\n Line: createSeriesComponent(\"line\", \"EChart.Line\"),\r\n Bar: createSeriesComponent(\"bar\", \"EChart.Bar\"),\r\n Pie: createSeriesComponent(\"pie\", \"EChart.Pie\"),\r\n Scatter: createSeriesComponent(\"scatter\", \"EChart.Scatter\"),\r\n Radar: createSeriesComponent(\"radar\", \"EChart.Radar\"),\r\n Heatmap: createSeriesComponent(\"heatmap\", \"EChart.Heatmap\"),\r\n Gauge: createSeriesComponent(\"gauge\", \"EChart.Gauge\"),\r\n Funnel: createSeriesComponent(\"funnel\", \"EChart.Funnel\"),\r\n Treemap: createSeriesComponent(\"treemap\", \"EChart.Treemap\"),\r\n Sunburst: createSeriesComponent(\"sunburst\", \"EChart.Sunburst\"),\r\n Sankey: createSeriesComponent(\"sankey\", \"EChart.Sankey\"),\r\n Graph: createSeriesComponent(\"graph\", \"EChart.Graph\"),\r\n Candlestick: createSeriesComponent(\"candlestick\", \"EChart.Candlestick\"),\r\n Boxplot: createSeriesComponent(\"boxplot\", \"EChart.Boxplot\"),\r\n Parallel: createSeriesComponent(\"parallel\", \"EChart.Parallel\"),\r\n ThemeRiver: createSeriesComponent(\"themeRiver\", \"EChart.ThemeRiver\"),\r\n Map: createSeriesComponent(\"map\", \"EChart.Map\"),\r\n Custom: createSeriesComponent(\"custom\", \"EChart.Custom\"),\r\n EffectScatter: createSeriesComponent(\r\n \"effectScatter\",\r\n \"EChart.EffectScatter\"\r\n ),\r\n PictorialBar: createSeriesComponent(\"pictorialBar\", \"EChart.PictorialBar\"),\r\n});\r\n","import React, { forwardRef, useEffect, useMemo, useState } from \"react\";\r\nimport type { EChartsOption } from \"echarts\";\r\nimport { useECharts } from \"../hooks/use-echarts\";\r\nimport type {\r\n EChartComponentProps,\r\n SeriesComponentProps,\r\n ChartDivProps,\r\n} from \"../types\";\r\n\r\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 500 };\r\n\r\nlet glLoaded = false;\r\nlet glPromise: Promise<void> | null = null;\r\n\r\nfunction loadEChartsGL(): Promise<void> {\r\n if (glLoaded) return Promise.resolve();\r\n if (!glPromise) {\r\n glPromise = import(\"echarts-gl\")\r\n .then(() => {\r\n glLoaded = true;\r\n })\r\n .catch((err: unknown) => {\r\n console.warn(\"Failed to load echarts-gl for 3D charts:\", err);\r\n });\r\n }\r\n return glPromise;\r\n}\r\n\r\n/** Wrapper that delays mount until echarts-gl is loaded */\r\nfunction WithGL({ children, style, className }: { children: React.ReactNode; style?: React.CSSProperties; className?: string }) {\r\n const [ready, setReady] = useState(glLoaded);\r\n\r\n useEffect(() => {\r\n if (glLoaded) {\r\n setReady(true);\r\n return;\r\n }\r\n loadEChartsGL().then(() => setReady(true));\r\n }, []);\r\n\r\n if (!ready) {\r\n return (\r\n <div style={{ ...DEFAULT_STYLE, ...style, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }} className={className}>\r\n <span style={{ color: \"#9ca3af\", fontSize: 14 }}>Loading 3D engine...</span>\r\n </div>\r\n );\r\n }\r\n\r\n return <>{children}</>;\r\n}\r\n\r\n/**\r\n * EChart3D — 3D chart component that lazy-loads the bundled echarts-gl\r\n * engine on first mount (split into its own chunk to keep the main bundle small).\r\n */\r\nconst EChart3DInner = forwardRef<HTMLDivElement, EChartComponentProps>(\r\n (\r\n {\r\n option,\r\n theme,\r\n renderer,\r\n notMerge,\r\n lazyUpdate,\r\n showLoading,\r\n loadingOption,\r\n onEvents,\r\n autoResize = true,\r\n style,\r\n className,\r\n ...rest\r\n },\r\n _ref\r\n ) => {\r\n const { chartRef } = useECharts({\r\n option,\r\n theme,\r\n renderer,\r\n notMerge,\r\n lazyUpdate,\r\n showLoading,\r\n loadingOption,\r\n onEvents,\r\n autoResize,\r\n });\r\n\r\n return (\r\n <div\r\n ref={chartRef}\r\n style={{ ...DEFAULT_STYLE, ...style }}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n }\r\n);\r\n\r\nEChart3DInner.displayName = \"EChart3DInner\";\r\n\r\nconst EChart3DBase = forwardRef<HTMLDivElement, EChartComponentProps>(\r\n (props, ref) => {\r\n const { style, className, ...rest } = props;\r\n return (\r\n <WithGL style={style} className={className}>\r\n <EChart3DInner ref={ref} style={style} className={className} {...rest} />\r\n </WithGL>\r\n );\r\n }\r\n);\r\n\r\nEChart3DBase.displayName = \"EChart3D\";\r\n\r\nfunction create3DSeriesComponent(\r\n seriesType: string,\r\n displayName: string\r\n): React.FC<SeriesComponentProps & ChartDivProps> {\r\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\r\n data,\r\n title,\r\n tooltip = true,\r\n seriesOptions = {},\r\n option: extraOption = {},\r\n style,\r\n className,\r\n ...rest\r\n }) => {\r\n const option = useMemo((): EChartsOption => {\r\n const base: any = {};\r\n\r\n if (title) {\r\n base.title = { text: title };\r\n }\r\n\r\n if (tooltip === true) {\r\n base.tooltip = {};\r\n } else if (tooltip && typeof tooltip === \"object\") {\r\n base.tooltip = tooltip;\r\n }\r\n\r\n if ([\"bar3D\", \"scatter3D\", \"line3D\", \"surface\"].includes(seriesType)) {\r\n base.xAxis3D = { type: \"value\" };\r\n base.yAxis3D = { type: \"value\" };\r\n base.zAxis3D = { type: \"value\" };\r\n base.grid3D = {};\r\n }\r\n\r\n base.series = [{ type: seriesType, data, ...seriesOptions }];\r\n\r\n return { ...base, ...extraOption } as EChartsOption;\r\n }, [data, title, tooltip, seriesOptions, extraOption]);\r\n\r\n return (\r\n <EChart3DBase\r\n option={option}\r\n style={style}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n };\r\n\r\n Component.displayName = displayName;\r\n return Component;\r\n}\r\n\r\nfunction createGlobeComponent(): React.FC<\r\n Omit<SeriesComponentProps, \"data\"> &\r\n ChartDivProps & { globe?: any; series?: any[] }\r\n> {\r\n const Component: React.FC<\r\n Omit<SeriesComponentProps, \"data\"> &\r\n ChartDivProps & { globe?: any; series?: any[] }\r\n > = ({\r\n title,\r\n globe,\r\n series = [],\r\n option: extraOption = {},\r\n style,\r\n className,\r\n ...rest\r\n }) => {\r\n const option = useMemo((): EChartsOption => {\r\n const base: any = {};\r\n\r\n if (title) {\r\n base.title = { text: title };\r\n }\r\n\r\n base.globe = globe ?? {\r\n baseTexture: \"\",\r\n shading: \"lambert\",\r\n atmosphere: { show: true },\r\n };\r\n\r\n if (series.length > 0) {\r\n base.series = series;\r\n }\r\n\r\n return { ...base, ...extraOption } as EChartsOption;\r\n }, [title, globe, series, extraOption]);\r\n\r\n return (\r\n <EChart3DBase\r\n option={option}\r\n style={style}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n };\r\n\r\n Component.displayName = \"EChart3D.Globe\";\r\n return Component;\r\n}\r\n\r\nexport const EChart3D = Object.assign(EChart3DBase, {\r\n Bar: create3DSeriesComponent(\"bar3D\", \"EChart3D.Bar\"),\r\n Scatter: create3DSeriesComponent(\"scatter3D\", \"EChart3D.Scatter\"),\r\n Line: create3DSeriesComponent(\"line3D\", \"EChart3D.Line\"),\r\n Surface: create3DSeriesComponent(\"surface\", \"EChart3D.Surface\"),\r\n Globe: createGlobeComponent(),\r\n});\r\n","import React, { forwardRef, useMemo } from \"react\";\r\nimport type { EChartsOption } from \"echarts\";\r\nimport { useECharts } from \"../hooks/use-echarts\";\r\nimport type { EChartBaseProps, ChartDivProps } from \"../types\";\r\n\r\nexport interface GraphicElement {\r\n type:\r\n | \"rect\"\r\n | \"circle\"\r\n | \"ring\"\r\n | \"arc\"\r\n | \"polygon\"\r\n | \"polyline\"\r\n | \"path\"\r\n | \"image\"\r\n | \"text\"\r\n | \"group\";\r\n left?: number | string;\r\n top?: number | string;\r\n right?: number | string;\r\n bottom?: number | string;\r\n shape?: Record<string, any>;\r\n style?: Record<string, any>;\r\n children?: GraphicElement[];\r\n onclick?: (e: any) => void;\r\n onmouseover?: (e: any) => void;\r\n onmouseout?: (e: any) => void;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface EChartGraphicProps\r\n extends Omit<EChartBaseProps, \"option\">,\r\n ChartDivProps,\r\n React.HTMLAttributes<HTMLDivElement> {\r\n elements: GraphicElement[];\r\n option?: Partial<EChartsOption>;\r\n}\r\n\r\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\r\n\r\n/**\r\n * EChartGraphic — for custom drawing via ECharts graphic layer.\r\n * Supports rect, circle, ring, arc, polygon, polyline, path, image, text, group elements.\r\n */\r\nexport const EChartGraphic = forwardRef<HTMLDivElement, EChartGraphicProps>(\r\n (\r\n {\r\n elements,\r\n option: extraOption = {},\r\n theme,\r\n renderer,\r\n notMerge,\r\n lazyUpdate,\r\n showLoading,\r\n loadingOption,\r\n onEvents,\r\n autoResize = true,\r\n style,\r\n className,\r\n ...rest\r\n },\r\n _ref\r\n ) => {\r\n const option = useMemo((): EChartsOption => {\r\n return {\r\n graphic: {\r\n elements,\r\n },\r\n ...extraOption,\r\n } as EChartsOption;\r\n }, [elements, extraOption]);\r\n\r\n const { chartRef } = useECharts({\r\n option,\r\n theme,\r\n renderer,\r\n notMerge,\r\n lazyUpdate,\r\n showLoading,\r\n loadingOption,\r\n onEvents,\r\n autoResize,\r\n });\r\n\r\n return (\r\n <div\r\n ref={chartRef}\r\n style={{ ...DEFAULT_STYLE, ...style }}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n }\r\n);\r\n\r\nEChartGraphic.displayName = \"EChartGraphic\";\r\n","import { use } from \"echarts/core\";\r\nimport {\r\n LineChart,\r\n BarChart,\r\n PieChart,\r\n ScatterChart,\r\n RadarChart,\r\n HeatmapChart,\r\n GaugeChart,\r\n FunnelChart,\r\n TreemapChart,\r\n SunburstChart,\r\n SankeyChart,\r\n GraphChart,\r\n CandlestickChart,\r\n BoxplotChart,\r\n ParallelChart,\r\n ThemeRiverChart,\r\n MapChart,\r\n CustomChart,\r\n EffectScatterChart,\r\n PictorialBarChart,\r\n} from \"echarts/charts\";\r\nimport {\r\n GridComponent,\r\n TooltipComponent,\r\n TitleComponent,\r\n LegendComponent,\r\n DataZoomComponent,\r\n ToolboxComponent,\r\n VisualMapComponent,\r\n GeoComponent,\r\n ParallelComponent,\r\n CalendarComponent,\r\n GraphicComponent,\r\n PolarComponent,\r\n RadarComponent as RadarComp,\r\n DatasetComponent,\r\n MarkLineComponent,\r\n MarkPointComponent,\r\n MarkAreaComponent,\r\n TimelineComponent,\r\n BrushComponent,\r\n SingleAxisComponent,\r\n} from \"echarts/components\";\r\nimport { CanvasRenderer, SVGRenderer } from \"echarts/renderers\";\r\n\r\nconst allCharts = [\r\n LineChart,\r\n BarChart,\r\n PieChart,\r\n ScatterChart,\r\n RadarChart,\r\n HeatmapChart,\r\n GaugeChart,\r\n FunnelChart,\r\n TreemapChart,\r\n SunburstChart,\r\n SankeyChart,\r\n GraphChart,\r\n CandlestickChart,\r\n BoxplotChart,\r\n ParallelChart,\r\n ThemeRiverChart,\r\n MapChart,\r\n CustomChart,\r\n EffectScatterChart,\r\n PictorialBarChart,\r\n] as const;\r\n\r\nconst allComponents = [\r\n GridComponent,\r\n TooltipComponent,\r\n TitleComponent,\r\n LegendComponent,\r\n DataZoomComponent,\r\n ToolboxComponent,\r\n VisualMapComponent,\r\n GeoComponent,\r\n ParallelComponent,\r\n CalendarComponent,\r\n GraphicComponent,\r\n PolarComponent,\r\n RadarComp,\r\n DatasetComponent,\r\n MarkLineComponent,\r\n MarkPointComponent,\r\n MarkAreaComponent,\r\n TimelineComponent,\r\n BrushComponent,\r\n SingleAxisComponent,\r\n] as const;\r\n\r\nconst allRenderers = [CanvasRenderer, SVGRenderer] as const;\r\n\r\nlet registered = false;\r\n\r\n/** Register all ECharts chart types, components, and renderers. Convenient for demos/quick starts. */\r\nexport function registerAll(): void {\r\n if (registered) return;\r\n use([...allCharts, ...allComponents, ...allRenderers] as any);\r\n registered = true;\r\n}\r\n\r\n/** Register specific chart types by name for tree-shaking optimization. */\r\nexport function registerCharts(\r\n ...chartTypes: Array<(typeof allCharts)[number]>\r\n): void {\r\n use(chartTypes as any);\r\n}\r\n\r\n/** Register specific components by reference. */\r\nexport function registerComponents(\r\n ...components: Array<(typeof allComponents)[number]>\r\n): void {\r\n use(components as any);\r\n}\r\n\r\n// Re-export individual charts and components for manual registration\r\nexport {\r\n LineChart,\r\n BarChart,\r\n PieChart,\r\n ScatterChart,\r\n RadarChart,\r\n HeatmapChart,\r\n GaugeChart,\r\n FunnelChart,\r\n TreemapChart,\r\n SunburstChart,\r\n SankeyChart,\r\n GraphChart,\r\n CandlestickChart,\r\n BoxplotChart,\r\n ParallelChart,\r\n ThemeRiverChart,\r\n MapChart,\r\n CustomChart,\r\n EffectScatterChart,\r\n PictorialBarChart,\r\n GridComponent,\r\n TooltipComponent,\r\n TitleComponent,\r\n LegendComponent,\r\n DataZoomComponent,\r\n ToolboxComponent,\r\n VisualMapComponent,\r\n GeoComponent,\r\n CalendarComponent,\r\n GraphicComponent,\r\n PolarComponent,\r\n DatasetComponent,\r\n SingleAxisComponent,\r\n CanvasRenderer,\r\n SVGRenderer,\r\n};\r\n","import { registerTheme as echartsRegisterTheme } from \"echarts/core\";\r\n\r\n/** Dark theme preset */\r\nexport const darkTheme = {\r\n backgroundColor: \"#1a1a2e\",\r\n textStyle: { color: \"#e0e0e0\" },\r\n title: { textStyle: { color: \"#ffffff\" } },\r\n legend: { textStyle: { color: \"#cccccc\" } },\r\n categoryAxis: {\r\n axisLine: { lineStyle: { color: \"#444\" } },\r\n splitLine: { lineStyle: { color: \"#333\" } },\r\n axisLabel: { color: \"#aaa\" },\r\n },\r\n valueAxis: {\r\n axisLine: { lineStyle: { color: \"#444\" } },\r\n splitLine: { lineStyle: { color: \"#333\" } },\r\n axisLabel: { color: \"#aaa\" },\r\n },\r\n color: [\r\n \"#5470c6\",\r\n \"#91cc75\",\r\n \"#fac858\",\r\n \"#ee6666\",\r\n \"#73c0de\",\r\n \"#3ba272\",\r\n \"#fc8452\",\r\n \"#9a60b4\",\r\n \"#ea7ccc\",\r\n ],\r\n};\r\n\r\n/** Vintage theme preset */\r\nexport const vintageTheme = {\r\n color: [\r\n \"#d87c7c\",\r\n \"#919e8b\",\r\n \"#d7ab82\",\r\n \"#6e7074\",\r\n \"#61a0a8\",\r\n \"#efa18d\",\r\n \"#787464\",\r\n \"#cc7e63\",\r\n \"#724e58\",\r\n \"#4b565b\",\r\n ],\r\n backgroundColor: \"#fef8ef\",\r\n textStyle: {},\r\n title: { textStyle: { color: \"#333333\" } },\r\n categoryAxis: {\r\n axisLine: { lineStyle: { color: \"#ccc\" } },\r\n splitLine: { lineStyle: { color: \"#eee\" } },\r\n },\r\n valueAxis: {\r\n axisLine: { lineStyle: { color: \"#ccc\" } },\r\n splitLine: { lineStyle: { color: \"#eee\" } },\r\n },\r\n};\r\n\r\n/** Pastel theme preset */\r\nexport const pastelTheme = {\r\n color: [\r\n \"#c4b5fd\",\r\n \"#a5f3fc\",\r\n \"#fca5a5\",\r\n \"#fde68a\",\r\n \"#a7f3d0\",\r\n \"#fbcfe8\",\r\n \"#c7d2fe\",\r\n \"#fed7aa\",\r\n ],\r\n backgroundColor: \"#fafafa\",\r\n textStyle: { color: \"#555\" },\r\n title: { textStyle: { color: \"#333\" } },\r\n};\r\n\r\n/** Register a named theme with ECharts */\r\nexport function registerTheme(name: string, theme: object): void {\r\n echartsRegisterTheme(name, theme);\r\n}\r\n\r\n/** Register all built-in theme presets */\r\nexport function registerBuiltinThemes(): void {\r\n registerTheme(\"dark-preset\", darkTheme);\r\n registerTheme(\"vintage\", vintageTheme);\r\n registerTheme(\"pastel\", pastelTheme);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-resize-observer.ts","../src/hooks/use-echarts.ts","../src/components/EChart.tsx","../src/components/EChart3D.tsx","../src/components/EChartGraphic.tsx","../src/utils/register.ts","../src/utils/themes.ts"],"names":["useRef","useEffect","useSyncExternalStore","useState","getInstanceByDom","init","forwardRef","jsx","useMemo","DEFAULT_STYLE","Fragment","LineChart","BarChart","PieChart","ScatterChart","RadarChart","HeatmapChart","GaugeChart","FunnelChart","TreemapChart","SunburstChart","SankeyChart","GraphChart","CandlestickChart","BoxplotChart","ParallelChart","ThemeRiverChart","MapChart","CustomChart","EffectScatterChart","PictorialBarChart","GridComponent","TooltipComponent","TitleComponent","LegendComponent","DataZoomComponent","ToolboxComponent","VisualMapComponent","GeoComponent","ParallelComponent","CalendarComponent","GraphicComponent","PolarComponent","RadarComp","DatasetComponent","MarkLineComponent","MarkPointComponent","MarkAreaComponent","TimelineComponent","BrushComponent","SingleAxisComponent","CanvasRenderer","SVGRenderer","use","echartsRegisterTheme"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, type RefObject } from \"react\";\n\nexport function useResizeObserver(\n ref: RefObject<HTMLElement | null>,\n callback: () => void\n): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new ResizeObserver(() => {\n callbackRef.current();\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [ref]);\n}\n","import { useEffect, useRef, useState, useSyncExternalStore, type RefObject } from \"react\";\nimport { init, getInstanceByDom, type EChartsType } from \"echarts/core\";\nimport type { EChartsOption } from \"echarts\";\n\ntype ECharts = EChartsType;\nimport { useResizeObserver } from \"./use-resize-observer\";\n\nexport interface UseEChartsOptions {\n option: EChartsOption;\n theme?: string | object;\n renderer?: \"canvas\" | \"svg\";\n notMerge?: boolean;\n lazyUpdate?: boolean;\n showLoading?: boolean;\n loadingOption?: object;\n onEvents?: Record<string, (params: any) => void>;\n autoResize?: boolean;\n}\n\nexport interface UseEChartsReturn {\n chartRef: RefObject<HTMLDivElement | null>;\n instance: ECharts | null;\n}\n\n/** Detect system dark mode preference reactively. */\nfunction useDarkMode(): boolean {\n return useSyncExternalStore(\n (callback) => {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n mq.addEventListener(\"change\", callback);\n return () => mq.removeEventListener(\"change\", callback);\n },\n () => window.matchMedia(\"(prefers-color-scheme: dark)\").matches,\n () => false,\n );\n}\n\nexport function useECharts(options: UseEChartsOptions): UseEChartsReturn {\n const {\n option,\n theme,\n renderer = \"canvas\",\n notMerge = false,\n lazyUpdate = false,\n showLoading = false,\n loadingOption,\n onEvents,\n autoResize = true,\n } = options;\n\n const isDark = useDarkMode();\n // Auto-detect theme: use explicit theme if provided, otherwise \"dark\" or undefined\n const autoDark = theme === undefined && isDark;\n const resolvedTheme = theme !== undefined ? theme : isDark ? \"dark\" : undefined;\n\n const chartRef = useRef<HTMLDivElement | null>(null);\n const instanceRef = useRef<ECharts | null>(null);\n const [instance, setInstance] = useState<ECharts | null>(null);\n\n // Init/dispose — re-init when theme changes (including dark mode toggle)\n useEffect(() => {\n if (!chartRef.current) return;\n\n // Dispose any existing instance (handles StrictMode double-mount)\n const existing = getInstanceByDom(chartRef.current);\n if (existing) {\n existing.dispose();\n }\n\n const chart = init(chartRef.current, resolvedTheme, { renderer });\n instanceRef.current = chart;\n setInstance(chart);\n\n return () => {\n chart.dispose();\n instanceRef.current = null;\n setInstance(null);\n };\n }, [resolvedTheme, renderer]);\n\n // Set option\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart || !option) return;\n // When using auto-detected dark theme, force transparent background\n // so charts blend with the page's own dark background\n const finalOption = autoDark\n ? { backgroundColor: \"transparent\", ...option }\n : option;\n chart.setOption(finalOption, { notMerge, lazyUpdate });\n }, [option, notMerge, lazyUpdate, autoDark]);\n\n // Loading state\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart) return;\n if (showLoading) {\n chart.showLoading(\"default\", loadingOption);\n } else {\n chart.hideLoading();\n }\n }, [showLoading, loadingOption]);\n\n // Event binding\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart || !onEvents) return;\n\n const entries = Object.entries(onEvents);\n for (const [event, handler] of entries) {\n chart.on(event, handler);\n }\n\n return () => {\n for (const [event, handler] of entries) {\n chart.off(event, handler);\n }\n };\n }, [onEvents]);\n\n // Auto-resize\n useResizeObserver(chartRef, () => {\n if (autoResize && instanceRef.current) {\n instanceRef.current.resize();\n }\n });\n\n return { chartRef, instance };\n}\n","import React, { forwardRef, useMemo } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type {\n EChartComponentProps,\n SeriesComponentProps,\n ChartDivProps,\n} from \"../types\";\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\n\n/** Base EChart component — accepts any ECharts option. */\nconst EChartBase = forwardRef<HTMLDivElement, EChartComponentProps>(\n (\n {\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChartBase.displayName = \"EChart\";\n\n// --- Helper to create typed series sub-components ---\n\nfunction createSeriesComponent(\n seriesType: string,\n displayName: string\n): React.FC<SeriesComponentProps & ChartDivProps> {\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\n data,\n title,\n xAxis,\n yAxis,\n tooltip = true,\n legend = false,\n grid,\n seriesOptions = {},\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: EChartsOption = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n if (tooltip === true) {\n base.tooltip = { trigger: \"axis\" };\n } else if (tooltip && typeof tooltip === \"object\") {\n base.tooltip = tooltip;\n }\n\n if (legend === true) {\n base.legend = {};\n } else if (legend && typeof legend === \"object\") {\n base.legend = legend;\n }\n\n if (grid) {\n base.grid = grid;\n }\n\n // Handle axis-based charts\n const axisCharts = [\n \"line\",\n \"bar\",\n \"scatter\",\n \"candlestick\",\n \"boxplot\",\n \"heatmap\",\n \"effectScatter\",\n \"pictorialBar\",\n ];\n if (axisCharts.includes(seriesType)) {\n base.xAxis = xAxis ?? { type: \"category\" };\n base.yAxis = yAxis ?? { type: \"value\" };\n }\n\n // Handle data format\n if (Array.isArray(data)) {\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\n } else if (data && typeof data === \"object\" && \"series\" in data) {\n // Multi-series: { categories: [...], series: [{ name, data }, ...] }\n const multiData = data as {\n categories?: string[];\n series: Array<{ name?: string; data: any[]; [k: string]: any }>;\n };\n if (multiData.categories && axisCharts.includes(seriesType)) {\n base.xAxis = xAxis ?? {\n type: \"category\",\n data: multiData.categories,\n };\n }\n base.series = multiData.series.map((s) => ({\n type: seriesType,\n ...seriesOptions,\n ...s,\n })) as any;\n } else {\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\n }\n\n return { ...base, ...extraOption };\n }, [\n data,\n title,\n xAxis,\n yAxis,\n tooltip,\n legend,\n grid,\n seriesOptions,\n extraOption,\n ]);\n\n return (\n <EChartBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n\n// --- Compound component with all chart type sub-components ---\n\nexport const EChart = Object.assign(EChartBase, {\n Line: createSeriesComponent(\"line\", \"EChart.Line\"),\n Bar: createSeriesComponent(\"bar\", \"EChart.Bar\"),\n Pie: createSeriesComponent(\"pie\", \"EChart.Pie\"),\n Scatter: createSeriesComponent(\"scatter\", \"EChart.Scatter\"),\n Radar: createSeriesComponent(\"radar\", \"EChart.Radar\"),\n Heatmap: createSeriesComponent(\"heatmap\", \"EChart.Heatmap\"),\n Gauge: createSeriesComponent(\"gauge\", \"EChart.Gauge\"),\n Funnel: createSeriesComponent(\"funnel\", \"EChart.Funnel\"),\n Treemap: createSeriesComponent(\"treemap\", \"EChart.Treemap\"),\n Sunburst: createSeriesComponent(\"sunburst\", \"EChart.Sunburst\"),\n Sankey: createSeriesComponent(\"sankey\", \"EChart.Sankey\"),\n Graph: createSeriesComponent(\"graph\", \"EChart.Graph\"),\n Candlestick: createSeriesComponent(\"candlestick\", \"EChart.Candlestick\"),\n Boxplot: createSeriesComponent(\"boxplot\", \"EChart.Boxplot\"),\n Parallel: createSeriesComponent(\"parallel\", \"EChart.Parallel\"),\n ThemeRiver: createSeriesComponent(\"themeRiver\", \"EChart.ThemeRiver\"),\n Map: createSeriesComponent(\"map\", \"EChart.Map\"),\n Custom: createSeriesComponent(\"custom\", \"EChart.Custom\"),\n EffectScatter: createSeriesComponent(\n \"effectScatter\",\n \"EChart.EffectScatter\"\n ),\n PictorialBar: createSeriesComponent(\"pictorialBar\", \"EChart.PictorialBar\"),\n});\n","import React, { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type {\n EChartComponentProps,\n SeriesComponentProps,\n ChartDivProps,\n} from \"../types\";\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 500 };\n\nlet glLoaded = false;\nlet glPromise: Promise<void> | null = null;\n\nfunction loadEChartsGL(): Promise<void> {\n if (glLoaded) return Promise.resolve();\n if (!glPromise) {\n glPromise = import(\"echarts-gl\")\n .then(() => {\n glLoaded = true;\n })\n .catch((err: unknown) => {\n console.warn(\"Failed to load echarts-gl for 3D charts:\", err);\n });\n }\n return glPromise;\n}\n\n/** Wrapper that delays mount until echarts-gl is loaded */\nfunction WithGL({ children, style, className }: { children: React.ReactNode; style?: React.CSSProperties; className?: string }) {\n const [ready, setReady] = useState(glLoaded);\n\n useEffect(() => {\n if (glLoaded) {\n setReady(true);\n return;\n }\n loadEChartsGL().then(() => setReady(true));\n }, []);\n\n if (!ready) {\n return (\n <div style={{ ...DEFAULT_STYLE, ...style, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }} className={className}>\n <span style={{ color: \"#9ca3af\", fontSize: 14 }}>Loading 3D engine...</span>\n </div>\n );\n }\n\n return <>{children}</>;\n}\n\n/**\n * EChart3D — 3D chart component that lazy-loads the bundled echarts-gl\n * engine on first mount (split into its own chunk to keep the main bundle small).\n */\nconst EChart3DInner = forwardRef<HTMLDivElement, EChartComponentProps>(\n (\n {\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChart3DInner.displayName = \"EChart3DInner\";\n\nconst EChart3DBase = forwardRef<HTMLDivElement, EChartComponentProps>(\n (props, ref) => {\n const { style, className, ...rest } = props;\n return (\n <WithGL style={style} className={className}>\n <EChart3DInner ref={ref} style={style} className={className} {...rest} />\n </WithGL>\n );\n }\n);\n\nEChart3DBase.displayName = \"EChart3D\";\n\nfunction create3DSeriesComponent(\n seriesType: string,\n displayName: string\n): React.FC<SeriesComponentProps & ChartDivProps> {\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\n data,\n title,\n tooltip = true,\n seriesOptions = {},\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: any = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n if (tooltip === true) {\n base.tooltip = {};\n } else if (tooltip && typeof tooltip === \"object\") {\n base.tooltip = tooltip;\n }\n\n if ([\"bar3D\", \"scatter3D\", \"line3D\", \"surface\"].includes(seriesType)) {\n base.xAxis3D = { type: \"value\" };\n base.yAxis3D = { type: \"value\" };\n base.zAxis3D = { type: \"value\" };\n base.grid3D = {};\n }\n\n base.series = [{ type: seriesType, data, ...seriesOptions }];\n\n return { ...base, ...extraOption } as EChartsOption;\n }, [data, title, tooltip, seriesOptions, extraOption]);\n\n return (\n <EChart3DBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n\nfunction createGlobeComponent(): React.FC<\n Omit<SeriesComponentProps, \"data\"> &\n ChartDivProps & { globe?: any; series?: any[] }\n> {\n const Component: React.FC<\n Omit<SeriesComponentProps, \"data\"> &\n ChartDivProps & { globe?: any; series?: any[] }\n > = ({\n title,\n globe,\n series = [],\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: any = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n base.globe = globe ?? {\n baseTexture: \"\",\n shading: \"lambert\",\n atmosphere: { show: true },\n };\n\n if (series.length > 0) {\n base.series = series;\n }\n\n return { ...base, ...extraOption } as EChartsOption;\n }, [title, globe, series, extraOption]);\n\n return (\n <EChart3DBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = \"EChart3D.Globe\";\n return Component;\n}\n\nexport const EChart3D = Object.assign(EChart3DBase, {\n Bar: create3DSeriesComponent(\"bar3D\", \"EChart3D.Bar\"),\n Scatter: create3DSeriesComponent(\"scatter3D\", \"EChart3D.Scatter\"),\n Line: create3DSeriesComponent(\"line3D\", \"EChart3D.Line\"),\n Surface: create3DSeriesComponent(\"surface\", \"EChart3D.Surface\"),\n Globe: createGlobeComponent(),\n});\n","import React, { forwardRef, useMemo } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type { EChartBaseProps, ChartDivProps } from \"../types\";\n\nexport interface GraphicElement {\n type:\n | \"rect\"\n | \"circle\"\n | \"ring\"\n | \"arc\"\n | \"polygon\"\n | \"polyline\"\n | \"path\"\n | \"image\"\n | \"text\"\n | \"group\";\n left?: number | string;\n top?: number | string;\n right?: number | string;\n bottom?: number | string;\n shape?: Record<string, any>;\n style?: Record<string, any>;\n children?: GraphicElement[];\n onclick?: (e: any) => void;\n onmouseover?: (e: any) => void;\n onmouseout?: (e: any) => void;\n [key: string]: any;\n}\n\nexport interface EChartGraphicProps\n extends Omit<EChartBaseProps, \"option\">,\n ChartDivProps,\n React.HTMLAttributes<HTMLDivElement> {\n elements: GraphicElement[];\n option?: Partial<EChartsOption>;\n}\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\n\n/**\n * EChartGraphic — for custom drawing via ECharts graphic layer.\n * Supports rect, circle, ring, arc, polygon, polyline, path, image, text, group elements.\n */\nexport const EChartGraphic = forwardRef<HTMLDivElement, EChartGraphicProps>(\n (\n {\n elements,\n option: extraOption = {},\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const option = useMemo((): EChartsOption => {\n return {\n graphic: {\n elements,\n },\n ...extraOption,\n } as EChartsOption;\n }, [elements, extraOption]);\n\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChartGraphic.displayName = \"EChartGraphic\";\n","import { use } from \"echarts/core\";\nimport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n} from \"echarts/charts\";\nimport {\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n RadarComponent as RadarComp,\n DatasetComponent,\n MarkLineComponent,\n MarkPointComponent,\n MarkAreaComponent,\n TimelineComponent,\n BrushComponent,\n SingleAxisComponent,\n} from \"echarts/components\";\nimport { CanvasRenderer, SVGRenderer } from \"echarts/renderers\";\n\nconst allCharts = [\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n] as const;\n\nconst allComponents = [\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n RadarComp,\n DatasetComponent,\n MarkLineComponent,\n MarkPointComponent,\n MarkAreaComponent,\n TimelineComponent,\n BrushComponent,\n SingleAxisComponent,\n] as const;\n\nconst allRenderers = [CanvasRenderer, SVGRenderer] as const;\n\nlet registered = false;\n\n/** Register all ECharts chart types, components, and renderers. Convenient for demos/quick starts. */\nexport function registerAll(): void {\n if (registered) return;\n use([...allCharts, ...allComponents, ...allRenderers] as any);\n registered = true;\n}\n\n/** Register specific chart types by name for tree-shaking optimization. */\nexport function registerCharts(\n ...chartTypes: Array<(typeof allCharts)[number]>\n): void {\n use(chartTypes as any);\n}\n\n/** Register specific components by reference. */\nexport function registerComponents(\n ...components: Array<(typeof allComponents)[number]>\n): void {\n use(components as any);\n}\n\n// Re-export individual charts and components for manual registration\nexport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n DatasetComponent,\n SingleAxisComponent,\n CanvasRenderer,\n SVGRenderer,\n};\n","import { registerTheme as echartsRegisterTheme } from \"echarts/core\";\n\n/** Dark theme preset */\nexport const darkTheme = {\n backgroundColor: \"#1a1a2e\",\n textStyle: { color: \"#e0e0e0\" },\n title: { textStyle: { color: \"#ffffff\" } },\n legend: { textStyle: { color: \"#cccccc\" } },\n categoryAxis: {\n axisLine: { lineStyle: { color: \"#444\" } },\n splitLine: { lineStyle: { color: \"#333\" } },\n axisLabel: { color: \"#aaa\" },\n },\n valueAxis: {\n axisLine: { lineStyle: { color: \"#444\" } },\n splitLine: { lineStyle: { color: \"#333\" } },\n axisLabel: { color: \"#aaa\" },\n },\n color: [\n \"#5470c6\",\n \"#91cc75\",\n \"#fac858\",\n \"#ee6666\",\n \"#73c0de\",\n \"#3ba272\",\n \"#fc8452\",\n \"#9a60b4\",\n \"#ea7ccc\",\n ],\n};\n\n/** Vintage theme preset */\nexport const vintageTheme = {\n color: [\n \"#d87c7c\",\n \"#919e8b\",\n \"#d7ab82\",\n \"#6e7074\",\n \"#61a0a8\",\n \"#efa18d\",\n \"#787464\",\n \"#cc7e63\",\n \"#724e58\",\n \"#4b565b\",\n ],\n backgroundColor: \"#fef8ef\",\n textStyle: {},\n title: { textStyle: { color: \"#333333\" } },\n categoryAxis: {\n axisLine: { lineStyle: { color: \"#ccc\" } },\n splitLine: { lineStyle: { color: \"#eee\" } },\n },\n valueAxis: {\n axisLine: { lineStyle: { color: \"#ccc\" } },\n splitLine: { lineStyle: { color: \"#eee\" } },\n },\n};\n\n/** Pastel theme preset */\nexport const pastelTheme = {\n color: [\n \"#c4b5fd\",\n \"#a5f3fc\",\n \"#fca5a5\",\n \"#fde68a\",\n \"#a7f3d0\",\n \"#fbcfe8\",\n \"#c7d2fe\",\n \"#fed7aa\",\n ],\n backgroundColor: \"#fafafa\",\n textStyle: { color: \"#555\" },\n title: { textStyle: { color: \"#333\" } },\n};\n\n/** Register a named theme with ECharts */\nexport function registerTheme(name: string, theme: object): void {\n echartsRegisterTheme(name, theme);\n}\n\n/** Register all built-in theme presets */\nexport function registerBuiltinThemes(): void {\n registerTheme(\"dark-preset\", darkTheme);\n registerTheme(\"vintage\", vintageTheme);\n registerTheme(\"pastel\", pastelTheme);\n}\n"]}
|