@pyreon/charts 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/lib/analysis/index.js.html +5406 -0
- package/lib/analysis/manual.js.html +5406 -0
- package/lib/charts-Ckh2qxB5.js +17571 -0
- package/lib/charts-Ckh2qxB5.js.map +1 -0
- package/lib/components-BcPePBeS.js +13688 -0
- package/lib/components-BcPePBeS.js.map +1 -0
- package/lib/core-9w0g6EOI.js +200 -0
- package/lib/core-9w0g6EOI.js.map +1 -0
- package/lib/createSeriesData-DOHScdgk.js +412 -0
- package/lib/createSeriesData-DOHScdgk.js.map +1 -0
- package/lib/customGraphicKeyframeAnimation-CvkEkSt_.js +8524 -0
- package/lib/customGraphicKeyframeAnimation-CvkEkSt_.js.map +1 -0
- package/lib/graphic-CPJ2K90a.js +10771 -0
- package/lib/graphic-CPJ2K90a.js.map +1 -0
- package/lib/index.js +309 -0
- package/lib/index.js.map +1 -0
- package/lib/manual.js +334 -0
- package/lib/manual.js.map +1 -0
- package/lib/parseGeoJson-BlBe5Vig.js +18498 -0
- package/lib/parseGeoJson-BlBe5Vig.js.map +1 -0
- package/lib/renderers-Dytryvoy.js +2044 -0
- package/lib/renderers-Dytryvoy.js.map +1 -0
- package/lib/types/charts.d.ts +7968 -0
- package/lib/types/charts.d.ts.map +1 -0
- package/lib/types/components.d.ts +4074 -0
- package/lib/types/components.d.ts.map +1 -0
- package/lib/types/core.d.ts +98 -0
- package/lib/types/core.d.ts.map +1 -0
- package/lib/types/createSeriesData.d.ts +325 -0
- package/lib/types/createSeriesData.d.ts.map +1 -0
- package/lib/types/customGraphicKeyframeAnimation.d.ts +3531 -0
- package/lib/types/customGraphicKeyframeAnimation.d.ts.map +1 -0
- package/lib/types/graphic.d.ts +4043 -0
- package/lib/types/graphic.d.ts.map +1 -0
- package/lib/types/index.d.ts +255 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index2.d.ts +2221 -0
- package/lib/types/index2.d.ts.map +1 -0
- package/lib/types/manual.d.ts +279 -0
- package/lib/types/manual.d.ts.map +1 -0
- package/lib/types/manual2.d.ts +2238 -0
- package/lib/types/manual2.d.ts.map +1 -0
- package/lib/types/parseGeoJson.d.ts +8695 -0
- package/lib/types/parseGeoJson.d.ts.map +1 -0
- package/lib/types/renderers.d.ts +995 -0
- package/lib/types/renderers.d.ts.map +1 -0
- package/package.json +58 -0
- package/src/chart-component.tsx +53 -0
- package/src/index.ts +64 -0
- package/src/loader.ts +222 -0
- package/src/manual.ts +36 -0
- package/src/tests/charts.test.tsx +363 -0
- package/src/types.ts +118 -0
- package/src/use-chart.ts +136 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { effect, signal } from "@pyreon/reactivity";
|
|
2
|
+
import { onUnmount } from "@pyreon/core";
|
|
3
|
+
|
|
4
|
+
//#region src/loader.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Lazily load echarts/core. Cached after first call.
|
|
8
|
+
*/
|
|
9
|
+
async function getCore() {
|
|
10
|
+
if (coreModule) return coreModule;
|
|
11
|
+
if (!corePromise) corePromise = import("./core.d.ts").then(m => {
|
|
12
|
+
coreModule = m;
|
|
13
|
+
return m;
|
|
14
|
+
});
|
|
15
|
+
return corePromise;
|
|
16
|
+
}
|
|
17
|
+
async function loadAndRegister(core, key, loader) {
|
|
18
|
+
if (registered.has(key)) return;
|
|
19
|
+
if (inflight.has(key)) return inflight.get(key);
|
|
20
|
+
const promise = loader().then(mod => {
|
|
21
|
+
core.use(mod);
|
|
22
|
+
registered.add(key);
|
|
23
|
+
inflight.delete(key);
|
|
24
|
+
});
|
|
25
|
+
inflight.set(key, promise);
|
|
26
|
+
return promise;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Analyze an ECharts option object and dynamically import only the
|
|
30
|
+
* required chart types, components, and renderer. All imports are
|
|
31
|
+
* cached — subsequent calls with the same types are instant.
|
|
32
|
+
*/
|
|
33
|
+
async function ensureModules(option, renderer = "canvas") {
|
|
34
|
+
const core = await getCore();
|
|
35
|
+
const loads = [];
|
|
36
|
+
loads.push(loadAndRegister(core, `renderer:${renderer}`, RENDERERS[renderer]));
|
|
37
|
+
const rawSeries = option.series;
|
|
38
|
+
const seriesList = rawSeries ? Array.isArray(rawSeries) ? rawSeries : [rawSeries] : [];
|
|
39
|
+
for (const s of seriesList) {
|
|
40
|
+
const type = s.type;
|
|
41
|
+
if (type && CHARTS[type]) loads.push(loadAndRegister(core, `chart:${type}`, CHARTS[type]));
|
|
42
|
+
}
|
|
43
|
+
for (const key of Object.keys(option)) if (COMPONENTS[key]) loads.push(loadAndRegister(core, `component:${key}`, COMPONENTS[key]));
|
|
44
|
+
for (const s of seriesList) for (const key of Object.keys(s)) if (SERIES_FEATURES[key]) loads.push(loadAndRegister(core, `feature:${key}`, SERIES_FEATURES[key]));
|
|
45
|
+
await Promise.all(loads);
|
|
46
|
+
return core;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/use-chart.ts
|
|
51
|
+
/**
|
|
52
|
+
* Reactive ECharts hook. Creates a chart instance bound to a container
|
|
53
|
+
* element, with automatic module lazy-loading, signal tracking, resize
|
|
54
|
+
* handling, error capture, and cleanup.
|
|
55
|
+
*
|
|
56
|
+
* Generic parameter `TOption` narrows the option type for exact autocomplete.
|
|
57
|
+
* Use `ComposeOption<SeriesUnion>` from ECharts to restrict to specific chart types.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* // Default — accepts any ECharts option
|
|
62
|
+
* const chart = useChart(() => ({
|
|
63
|
+
* series: [{ type: 'bar', data: revenue() }],
|
|
64
|
+
* }))
|
|
65
|
+
*
|
|
66
|
+
* // Strict — only bar + line allowed, full autocomplete
|
|
67
|
+
* import type { ComposeOption, BarSeriesOption, LineSeriesOption } from '@pyreon/charts'
|
|
68
|
+
* type MyChartOption = ComposeOption<BarSeriesOption | LineSeriesOption>
|
|
69
|
+
*
|
|
70
|
+
* const chart = useChart<MyChartOption>(() => ({
|
|
71
|
+
* series: [{ type: 'bar', data: revenue() }], // ✓
|
|
72
|
+
* }))
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
function useChart(optionsFn, config) {
|
|
76
|
+
const instance = signal(null);
|
|
77
|
+
const loading = signal(true);
|
|
78
|
+
const error = signal(null);
|
|
79
|
+
const container = signal(null);
|
|
80
|
+
const renderer = config?.renderer ?? "canvas";
|
|
81
|
+
let observer = null;
|
|
82
|
+
let initialized = false;
|
|
83
|
+
effect(() => {
|
|
84
|
+
const el = container();
|
|
85
|
+
if (!el || initialized) return;
|
|
86
|
+
initialized = true;
|
|
87
|
+
let opts;
|
|
88
|
+
try {
|
|
89
|
+
opts = optionsFn();
|
|
90
|
+
} catch (err) {
|
|
91
|
+
error.set(err instanceof Error ? err : new Error(String(err)));
|
|
92
|
+
loading.set(false);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
ensureModules(opts, renderer).then(core => {
|
|
96
|
+
if (!container.peek()) return;
|
|
97
|
+
try {
|
|
98
|
+
const chart = core.init(el, config?.theme, {
|
|
99
|
+
renderer,
|
|
100
|
+
locale: config?.locale,
|
|
101
|
+
devicePixelRatio: config?.devicePixelRatio,
|
|
102
|
+
width: config?.width,
|
|
103
|
+
height: config?.height
|
|
104
|
+
});
|
|
105
|
+
chart.setOption(opts);
|
|
106
|
+
instance.set(chart);
|
|
107
|
+
loading.set(false);
|
|
108
|
+
error.set(null);
|
|
109
|
+
config?.onInit?.(chart);
|
|
110
|
+
observer = new ResizeObserver(() => {
|
|
111
|
+
chart.resize();
|
|
112
|
+
});
|
|
113
|
+
observer.observe(el);
|
|
114
|
+
} catch (err) {
|
|
115
|
+
error.set(err instanceof Error ? err : new Error(String(err)));
|
|
116
|
+
loading.set(false);
|
|
117
|
+
}
|
|
118
|
+
}).catch(err => {
|
|
119
|
+
error.set(err instanceof Error ? err : new Error(String(err)));
|
|
120
|
+
loading.set(false);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
effect(() => {
|
|
124
|
+
const chart = instance();
|
|
125
|
+
if (!chart) return;
|
|
126
|
+
try {
|
|
127
|
+
const opts = optionsFn();
|
|
128
|
+
chart.setOption(opts, {
|
|
129
|
+
notMerge: config?.notMerge ?? false,
|
|
130
|
+
lazyUpdate: config?.lazyUpdate ?? true
|
|
131
|
+
});
|
|
132
|
+
error.set(null);
|
|
133
|
+
} catch (err) {
|
|
134
|
+
error.set(err instanceof Error ? err : new Error(String(err)));
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
onUnmount(() => {
|
|
138
|
+
observer?.disconnect();
|
|
139
|
+
observer = null;
|
|
140
|
+
const chart = instance.peek();
|
|
141
|
+
if (chart) {
|
|
142
|
+
chart.dispose();
|
|
143
|
+
instance.set(null);
|
|
144
|
+
}
|
|
145
|
+
initialized = false;
|
|
146
|
+
});
|
|
147
|
+
return {
|
|
148
|
+
ref: el => container.set(el),
|
|
149
|
+
instance,
|
|
150
|
+
loading,
|
|
151
|
+
error,
|
|
152
|
+
resize: () => instance.peek()?.resize()
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region ../../node_modules/.bun/@pyreon+core@0.6.0/node_modules/@pyreon/core/lib/jsx-runtime.js
|
|
158
|
+
/**
|
|
159
|
+
* Hyperscript function — the compiled output of JSX.
|
|
160
|
+
* `<div class="x">hello</div>` → `h("div", { class: "x" }, "hello")`
|
|
161
|
+
*
|
|
162
|
+
* Generic on P so TypeScript validates props match the component's signature
|
|
163
|
+
* at the call site, then stores the result in the loosely-typed VNode.
|
|
164
|
+
*/
|
|
165
|
+
/** Shared empty props sentinel — identity-checked in mountElement to skip applyProps. */
|
|
166
|
+
|
|
167
|
+
function h(type, props, ...children) {
|
|
168
|
+
return {
|
|
169
|
+
type,
|
|
170
|
+
props: props ?? EMPTY_PROPS,
|
|
171
|
+
children: normalizeChildren(children),
|
|
172
|
+
key: props?.key ?? null
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function normalizeChildren(children) {
|
|
176
|
+
for (let i = 0; i < children.length; i++) if (Array.isArray(children[i])) return flattenChildren(children);
|
|
177
|
+
return children;
|
|
178
|
+
}
|
|
179
|
+
function flattenChildren(children) {
|
|
180
|
+
const result = [];
|
|
181
|
+
for (const child of children) if (Array.isArray(child)) result.push(...flattenChildren(child));else result.push(child);
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* JSX automatic runtime.
|
|
186
|
+
*
|
|
187
|
+
* When tsconfig has `"jsxImportSource": "@pyreon/core"`, the TS/bundler compiler
|
|
188
|
+
* rewrites JSX to imports from this file automatically:
|
|
189
|
+
* <div class="x" /> → jsx("div", { class: "x" })
|
|
190
|
+
*/
|
|
191
|
+
function jsx(type, props, key) {
|
|
192
|
+
const {
|
|
193
|
+
children,
|
|
194
|
+
...rest
|
|
195
|
+
} = props;
|
|
196
|
+
const propsWithKey = key != null ? {
|
|
197
|
+
...rest,
|
|
198
|
+
key
|
|
199
|
+
} : rest;
|
|
200
|
+
if (typeof type === "function") return h(type, children !== void 0 ? {
|
|
201
|
+
...propsWithKey,
|
|
202
|
+
children
|
|
203
|
+
} : propsWithKey);
|
|
204
|
+
return h(type, propsWithKey, ...(children === void 0 ? [] : Array.isArray(children) ? children : [children]));
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
//#endregion
|
|
208
|
+
//#region src/chart-component.tsx
|
|
209
|
+
/**
|
|
210
|
+
* Reactive chart component. Wraps useChart in a div with automatic
|
|
211
|
+
* event binding.
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```tsx
|
|
215
|
+
* // Default — any chart type
|
|
216
|
+
* <Chart
|
|
217
|
+
* options={() => ({
|
|
218
|
+
* series: [{ type: 'bar', data: revenue() }],
|
|
219
|
+
* tooltip: {},
|
|
220
|
+
* })}
|
|
221
|
+
* style="height: 400px"
|
|
222
|
+
* />
|
|
223
|
+
*
|
|
224
|
+
* // Strict — only specific chart types
|
|
225
|
+
* import type { ComposeOption, BarSeriesOption } from '@pyreon/charts'
|
|
226
|
+
* <Chart<ComposeOption<BarSeriesOption>>
|
|
227
|
+
* options={() => ({
|
|
228
|
+
* series: [{ type: 'bar', data: revenue() }],
|
|
229
|
+
* })}
|
|
230
|
+
* style="height: 400px"
|
|
231
|
+
* />
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
function Chart(props) {
|
|
235
|
+
const chart = useChart(props.options, {
|
|
236
|
+
theme: props.theme,
|
|
237
|
+
renderer: props.renderer
|
|
238
|
+
});
|
|
239
|
+
effect(() => {
|
|
240
|
+
const inst = chart.instance();
|
|
241
|
+
if (!inst) return;
|
|
242
|
+
if (props.onClick) inst.on("click", props.onClick);
|
|
243
|
+
if (props.onMouseover) inst.on("mouseover", props.onMouseover);
|
|
244
|
+
if (props.onMouseout) inst.on("mouseout", props.onMouseout);
|
|
245
|
+
});
|
|
246
|
+
return () => /* @__PURE__ */jsx("div", {
|
|
247
|
+
ref: chart.ref,
|
|
248
|
+
style: props.style,
|
|
249
|
+
class: props.class
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
//#endregion
|
|
254
|
+
export { Chart, useChart };
|
|
255
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/loader.ts","../../src/use-chart.ts","../../../../node_modules/.bun/@pyreon+core@0.6.0/node_modules/@pyreon/core/lib/jsx-runtime.js","../../src/chart-component.tsx"],"x_google_ignoreList":[2],"mappings":"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"}
|