@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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/lib/analysis/index.js.html +5406 -0
  4. package/lib/analysis/manual.js.html +5406 -0
  5. package/lib/charts-Ckh2qxB5.js +17571 -0
  6. package/lib/charts-Ckh2qxB5.js.map +1 -0
  7. package/lib/components-BcPePBeS.js +13688 -0
  8. package/lib/components-BcPePBeS.js.map +1 -0
  9. package/lib/core-9w0g6EOI.js +200 -0
  10. package/lib/core-9w0g6EOI.js.map +1 -0
  11. package/lib/createSeriesData-DOHScdgk.js +412 -0
  12. package/lib/createSeriesData-DOHScdgk.js.map +1 -0
  13. package/lib/customGraphicKeyframeAnimation-CvkEkSt_.js +8524 -0
  14. package/lib/customGraphicKeyframeAnimation-CvkEkSt_.js.map +1 -0
  15. package/lib/graphic-CPJ2K90a.js +10771 -0
  16. package/lib/graphic-CPJ2K90a.js.map +1 -0
  17. package/lib/index.js +309 -0
  18. package/lib/index.js.map +1 -0
  19. package/lib/manual.js +334 -0
  20. package/lib/manual.js.map +1 -0
  21. package/lib/parseGeoJson-BlBe5Vig.js +18498 -0
  22. package/lib/parseGeoJson-BlBe5Vig.js.map +1 -0
  23. package/lib/renderers-Dytryvoy.js +2044 -0
  24. package/lib/renderers-Dytryvoy.js.map +1 -0
  25. package/lib/types/charts.d.ts +7968 -0
  26. package/lib/types/charts.d.ts.map +1 -0
  27. package/lib/types/components.d.ts +4074 -0
  28. package/lib/types/components.d.ts.map +1 -0
  29. package/lib/types/core.d.ts +98 -0
  30. package/lib/types/core.d.ts.map +1 -0
  31. package/lib/types/createSeriesData.d.ts +325 -0
  32. package/lib/types/createSeriesData.d.ts.map +1 -0
  33. package/lib/types/customGraphicKeyframeAnimation.d.ts +3531 -0
  34. package/lib/types/customGraphicKeyframeAnimation.d.ts.map +1 -0
  35. package/lib/types/graphic.d.ts +4043 -0
  36. package/lib/types/graphic.d.ts.map +1 -0
  37. package/lib/types/index.d.ts +255 -0
  38. package/lib/types/index.d.ts.map +1 -0
  39. package/lib/types/index2.d.ts +2221 -0
  40. package/lib/types/index2.d.ts.map +1 -0
  41. package/lib/types/manual.d.ts +279 -0
  42. package/lib/types/manual.d.ts.map +1 -0
  43. package/lib/types/manual2.d.ts +2238 -0
  44. package/lib/types/manual2.d.ts.map +1 -0
  45. package/lib/types/parseGeoJson.d.ts +8695 -0
  46. package/lib/types/parseGeoJson.d.ts.map +1 -0
  47. package/lib/types/renderers.d.ts +995 -0
  48. package/lib/types/renderers.d.ts.map +1 -0
  49. package/package.json +58 -0
  50. package/src/chart-component.tsx +53 -0
  51. package/src/index.ts +64 -0
  52. package/src/loader.ts +222 -0
  53. package/src/manual.ts +36 -0
  54. package/src/tests/charts.test.tsx +363 -0
  55. package/src/types.ts +118 -0
  56. 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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"}