@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/dist/index.js.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","DEFAULT_STYLE","useState","jsx","forwardRef","useMemo","RadarComp","echartsRegisterTheme"],"mappings":"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","file":"index.js","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","DEFAULT_STYLE","useState","jsx","forwardRef","useMemo","RadarComp","echartsRegisterTheme"],"mappings":"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","file":"index.js","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"]}
package/docs/EChart.md CHANGED
@@ -1,207 +1,207 @@
1
- # EChart
2
-
3
- Base chart component and compound series sub-components for rendering any ECharts chart type in React.
4
-
5
- ## Import
6
-
7
- ```tsx
8
- import { EChart } from "@particle-academy/fancy-echarts";
9
- ```
10
-
11
- ## Base Component
12
-
13
- `EChart` accepts a raw ECharts option object for full control.
14
-
15
- ```tsx
16
- <EChart
17
- option={{
18
- xAxis: { type: "category", data: ["Mon", "Tue", "Wed"] },
19
- yAxis: { type: "value" },
20
- series: [{ type: "line", data: [150, 230, 224] }],
21
- }}
22
- style={{ height: 400 }}
23
- />
24
- ```
25
-
26
- ### Base Props
27
-
28
- | Prop | Type | Default | Description |
29
- |------|------|---------|-------------|
30
- | `option` | `EChartsOption` | **required** | Full ECharts option object |
31
- | `theme` | `string \| object` | `undefined` | Theme name or object. Auto-detects dark mode when omitted |
32
- | `renderer` | `"canvas" \| "svg"` | `"canvas"` | Rendering engine |
33
- | `notMerge` | `boolean` | `false` | Replace option instead of merging |
34
- | `lazyUpdate` | `boolean` | `false` | Delay chart update |
35
- | `showLoading` | `boolean` | `false` | Show loading animation |
36
- | `loadingOption` | `object` | `undefined` | Customize loading spinner |
37
- | `onEvents` | `Record<string, (params) => void>` | `undefined` | Event handlers keyed by event name |
38
- | `autoResize` | `boolean` | `true` | Auto-resize on container size change |
39
- | `style` | `CSSProperties` | `{ width: "100%", height: 400 }` | Container styles |
40
- | `className` | `string` | `undefined` | CSS class name |
41
-
42
- Also accepts any `HTMLDivElement` attribute.
43
-
44
- ## Series Sub-Components
45
-
46
- All sub-components share a simplified props API. They build the ECharts option internally.
47
-
48
- ### Shared Series Props
49
-
50
- | Prop | Type | Default | Description |
51
- |------|------|---------|-------------|
52
- | `data` | `any[] \| { categories?, series[] }` | **required** | Chart data (see formats below) |
53
- | `title` | `string` | `undefined` | Chart title text |
54
- | `xAxis` | `EChartsOption["xAxis"]` | `{ type: "category" }` | X-axis config (axis charts only) |
55
- | `yAxis` | `EChartsOption["yAxis"]` | `{ type: "value" }` | Y-axis config (axis charts only) |
56
- | `tooltip` | `boolean \| object` | `true` | Tooltip config. `true` = `{ trigger: "axis" }` |
57
- | `legend` | `boolean \| object` | `false` | Legend config. `true` = default legend |
58
- | `grid` | `EChartsOption["grid"]` | `undefined` | Grid layout config |
59
- | `seriesOptions` | `Record<string, any>` | `{}` | Extra options merged into each series |
60
- | `option` | `Partial<EChartsOption>` | `{}` | Extra ECharts options merged last (overrides everything) |
61
-
62
- Plus all base props (`theme`, `renderer`, `autoResize`, etc.) and HTML div attributes.
63
-
64
- ### Data Formats
65
-
66
- **Single series** -- pass an array directly:
67
-
68
- ```tsx
69
- <EChart.Line data={[150, 230, 224, 218, 135]} />
70
- ```
71
-
72
- **Multi-series** -- pass an object with `categories` and `series`:
73
-
74
- ```tsx
75
- <EChart.Bar
76
- data={{
77
- categories: ["Q1", "Q2", "Q3", "Q4"],
78
- series: [
79
- { name: "2024", data: [120, 200, 150, 80] },
80
- { name: "2025", data: [180, 230, 190, 140] },
81
- ],
82
- }}
83
- legend
84
- />
85
- ```
86
-
87
- ## Available Sub-Components
88
-
89
- ### Axis-based charts
90
-
91
- These automatically configure `xAxis` / `yAxis`.
92
-
93
- | Component | Series Type | Typical Data |
94
- |-----------|-------------|-------------|
95
- | `EChart.Line` | `line` | `number[]` or `[x, y][]` |
96
- | `EChart.Bar` | `bar` | `number[]` or `[x, y][]` |
97
- | `EChart.Scatter` | `scatter` | `[x, y][]` |
98
- | `EChart.Candlestick` | `candlestick` | `[open, close, low, high][]` |
99
- | `EChart.Boxplot` | `boxplot` | `[min, Q1, median, Q3, max][]` |
100
- | `EChart.Heatmap` | `heatmap` | `[x, y, value][]` |
101
- | `EChart.EffectScatter` | `effectScatter` | `[x, y][]` |
102
- | `EChart.PictorialBar` | `pictorialBar` | `number[]` |
103
-
104
- ### Non-axis charts
105
-
106
- These do NOT auto-configure axes.
107
-
108
- | Component | Series Type | Typical Data |
109
- |-----------|-------------|-------------|
110
- | `EChart.Pie` | `pie` | `{ name, value }[]` |
111
- | `EChart.Radar` | `radar` | `{ name, value[] }[]` (requires `radar` in `option`) |
112
- | `EChart.Gauge` | `gauge` | `{ value, name? }[]` |
113
- | `EChart.Funnel` | `funnel` | `{ name, value }[]` |
114
- | `EChart.Treemap` | `treemap` | `{ name, value, children? }[]` |
115
- | `EChart.Sunburst` | `sunburst` | `{ name, value?, children? }[]` |
116
- | `EChart.Sankey` | `sankey` | Requires `nodes` and `links` via `seriesOptions` |
117
- | `EChart.Graph` | `graph` | Requires `nodes` and `links` via `seriesOptions` |
118
- | `EChart.Parallel` | `parallel` | `number[][]` (requires `parallelAxis` in `option`) |
119
- | `EChart.ThemeRiver` | `themeRiver` | `[date, value, name][]` |
120
- | `EChart.Map` | `map` | `{ name, value }[]` (requires map registration + `seriesOptions.map`) |
121
- | `EChart.Custom` | `custom` | Any (requires `seriesOptions.renderItem`) |
122
-
123
- ## Examples
124
-
125
- ### Line Chart
126
-
127
- ```tsx
128
- <EChart.Line
129
- title="Monthly Sales"
130
- data={[820, 932, 901, 934, 1290, 1330, 1320]}
131
- seriesOptions={{ smooth: true, areaStyle: {} }}
132
- />
133
- ```
134
-
135
- ### Pie Chart
136
-
137
- ```tsx
138
- <EChart.Pie
139
- title="Browser Share"
140
- data={[
141
- { name: "Chrome", value: 65 },
142
- { name: "Firefox", value: 15 },
143
- { name: "Safari", value: 12 },
144
- { name: "Edge", value: 8 },
145
- ]}
146
- seriesOptions={{ radius: ["40%", "70%"] }}
147
- legend
148
- />
149
- ```
150
-
151
- ### Multi-Series Bar
152
-
153
- ```tsx
154
- <EChart.Bar
155
- title="Revenue by Quarter"
156
- data={{
157
- categories: ["Q1", "Q2", "Q3", "Q4"],
158
- series: [
159
- { name: "Product A", data: [120, 200, 150, 80] },
160
- { name: "Product B", data: [60, 140, 190, 220] },
161
- ],
162
- }}
163
- legend
164
- />
165
- ```
166
-
167
- ### Scatter with Event Handling
168
-
169
- ```tsx
170
- <EChart.Scatter
171
- data={[[10, 20], [30, 40], [50, 60], [70, 80]]}
172
- seriesOptions={{ symbolSize: 12 }}
173
- onEvents={{
174
- click: (params) => console.log("Clicked:", params.data),
175
- }}
176
- />
177
- ```
178
-
179
- ### Gauge
180
-
181
- ```tsx
182
- <EChart.Gauge
183
- data={[{ value: 72, name: "Completion" }]}
184
- seriesOptions={{ detail: { formatter: "{value}%" } }}
185
- />
186
- ```
187
-
188
- ### Full Control via Base Component
189
-
190
- ```tsx
191
- <EChart
192
- option={{
193
- radar: {
194
- indicator: [
195
- { name: "Sales", max: 100 },
196
- { name: "Admin", max: 100 },
197
- { name: "Tech", max: 100 },
198
- ],
199
- },
200
- series: [{
201
- type: "radar",
202
- data: [{ value: [80, 60, 90], name: "Team A" }],
203
- }],
204
- }}
205
- theme="dark-preset"
206
- />
207
- ```
1
+ # EChart
2
+
3
+ Base chart component and compound series sub-components for rendering any ECharts chart type in React.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { EChart } from "@particle-academy/fancy-echarts";
9
+ ```
10
+
11
+ ## Base Component
12
+
13
+ `EChart` accepts a raw ECharts option object for full control.
14
+
15
+ ```tsx
16
+ <EChart
17
+ option={{
18
+ xAxis: { type: "category", data: ["Mon", "Tue", "Wed"] },
19
+ yAxis: { type: "value" },
20
+ series: [{ type: "line", data: [150, 230, 224] }],
21
+ }}
22
+ style={{ height: 400 }}
23
+ />
24
+ ```
25
+
26
+ ### Base Props
27
+
28
+ | Prop | Type | Default | Description |
29
+ |------|------|---------|-------------|
30
+ | `option` | `EChartsOption` | **required** | Full ECharts option object |
31
+ | `theme` | `string \| object` | `undefined` | Theme name or object. Auto-detects dark mode when omitted |
32
+ | `renderer` | `"canvas" \| "svg"` | `"canvas"` | Rendering engine |
33
+ | `notMerge` | `boolean` | `false` | Replace option instead of merging |
34
+ | `lazyUpdate` | `boolean` | `false` | Delay chart update |
35
+ | `showLoading` | `boolean` | `false` | Show loading animation |
36
+ | `loadingOption` | `object` | `undefined` | Customize loading spinner |
37
+ | `onEvents` | `Record<string, (params) => void>` | `undefined` | Event handlers keyed by event name |
38
+ | `autoResize` | `boolean` | `true` | Auto-resize on container size change |
39
+ | `style` | `CSSProperties` | `{ width: "100%", height: 400 }` | Container styles |
40
+ | `className` | `string` | `undefined` | CSS class name |
41
+
42
+ Also accepts any `HTMLDivElement` attribute.
43
+
44
+ ## Series Sub-Components
45
+
46
+ All sub-components share a simplified props API. They build the ECharts option internally.
47
+
48
+ ### Shared Series Props
49
+
50
+ | Prop | Type | Default | Description |
51
+ |------|------|---------|-------------|
52
+ | `data` | `any[] \| { categories?, series[] }` | **required** | Chart data (see formats below) |
53
+ | `title` | `string` | `undefined` | Chart title text |
54
+ | `xAxis` | `EChartsOption["xAxis"]` | `{ type: "category" }` | X-axis config (axis charts only) |
55
+ | `yAxis` | `EChartsOption["yAxis"]` | `{ type: "value" }` | Y-axis config (axis charts only) |
56
+ | `tooltip` | `boolean \| object` | `true` | Tooltip config. `true` = `{ trigger: "axis" }` |
57
+ | `legend` | `boolean \| object` | `false` | Legend config. `true` = default legend |
58
+ | `grid` | `EChartsOption["grid"]` | `undefined` | Grid layout config |
59
+ | `seriesOptions` | `Record<string, any>` | `{}` | Extra options merged into each series |
60
+ | `option` | `Partial<EChartsOption>` | `{}` | Extra ECharts options merged last (overrides everything) |
61
+
62
+ Plus all base props (`theme`, `renderer`, `autoResize`, etc.) and HTML div attributes.
63
+
64
+ ### Data Formats
65
+
66
+ **Single series** -- pass an array directly:
67
+
68
+ ```tsx
69
+ <EChart.Line data={[150, 230, 224, 218, 135]} />
70
+ ```
71
+
72
+ **Multi-series** -- pass an object with `categories` and `series`:
73
+
74
+ ```tsx
75
+ <EChart.Bar
76
+ data={{
77
+ categories: ["Q1", "Q2", "Q3", "Q4"],
78
+ series: [
79
+ { name: "2024", data: [120, 200, 150, 80] },
80
+ { name: "2025", data: [180, 230, 190, 140] },
81
+ ],
82
+ }}
83
+ legend
84
+ />
85
+ ```
86
+
87
+ ## Available Sub-Components
88
+
89
+ ### Axis-based charts
90
+
91
+ These automatically configure `xAxis` / `yAxis`.
92
+
93
+ | Component | Series Type | Typical Data |
94
+ |-----------|-------------|-------------|
95
+ | `EChart.Line` | `line` | `number[]` or `[x, y][]` |
96
+ | `EChart.Bar` | `bar` | `number[]` or `[x, y][]` |
97
+ | `EChart.Scatter` | `scatter` | `[x, y][]` |
98
+ | `EChart.Candlestick` | `candlestick` | `[open, close, low, high][]` |
99
+ | `EChart.Boxplot` | `boxplot` | `[min, Q1, median, Q3, max][]` |
100
+ | `EChart.Heatmap` | `heatmap` | `[x, y, value][]` |
101
+ | `EChart.EffectScatter` | `effectScatter` | `[x, y][]` |
102
+ | `EChart.PictorialBar` | `pictorialBar` | `number[]` |
103
+
104
+ ### Non-axis charts
105
+
106
+ These do NOT auto-configure axes.
107
+
108
+ | Component | Series Type | Typical Data |
109
+ |-----------|-------------|-------------|
110
+ | `EChart.Pie` | `pie` | `{ name, value }[]` |
111
+ | `EChart.Radar` | `radar` | `{ name, value[] }[]` (requires `radar` in `option`) |
112
+ | `EChart.Gauge` | `gauge` | `{ value, name? }[]` |
113
+ | `EChart.Funnel` | `funnel` | `{ name, value }[]` |
114
+ | `EChart.Treemap` | `treemap` | `{ name, value, children? }[]` |
115
+ | `EChart.Sunburst` | `sunburst` | `{ name, value?, children? }[]` |
116
+ | `EChart.Sankey` | `sankey` | Requires `nodes` and `links` via `seriesOptions` |
117
+ | `EChart.Graph` | `graph` | Requires `nodes` and `links` via `seriesOptions` |
118
+ | `EChart.Parallel` | `parallel` | `number[][]` (requires `parallelAxis` in `option`) |
119
+ | `EChart.ThemeRiver` | `themeRiver` | `[date, value, name][]` |
120
+ | `EChart.Map` | `map` | `{ name, value }[]` (requires map registration + `seriesOptions.map`) |
121
+ | `EChart.Custom` | `custom` | Any (requires `seriesOptions.renderItem`) |
122
+
123
+ ## Examples
124
+
125
+ ### Line Chart
126
+
127
+ ```tsx
128
+ <EChart.Line
129
+ title="Monthly Sales"
130
+ data={[820, 932, 901, 934, 1290, 1330, 1320]}
131
+ seriesOptions={{ smooth: true, areaStyle: {} }}
132
+ />
133
+ ```
134
+
135
+ ### Pie Chart
136
+
137
+ ```tsx
138
+ <EChart.Pie
139
+ title="Browser Share"
140
+ data={[
141
+ { name: "Chrome", value: 65 },
142
+ { name: "Firefox", value: 15 },
143
+ { name: "Safari", value: 12 },
144
+ { name: "Edge", value: 8 },
145
+ ]}
146
+ seriesOptions={{ radius: ["40%", "70%"] }}
147
+ legend
148
+ />
149
+ ```
150
+
151
+ ### Multi-Series Bar
152
+
153
+ ```tsx
154
+ <EChart.Bar
155
+ title="Revenue by Quarter"
156
+ data={{
157
+ categories: ["Q1", "Q2", "Q3", "Q4"],
158
+ series: [
159
+ { name: "Product A", data: [120, 200, 150, 80] },
160
+ { name: "Product B", data: [60, 140, 190, 220] },
161
+ ],
162
+ }}
163
+ legend
164
+ />
165
+ ```
166
+
167
+ ### Scatter with Event Handling
168
+
169
+ ```tsx
170
+ <EChart.Scatter
171
+ data={[[10, 20], [30, 40], [50, 60], [70, 80]]}
172
+ seriesOptions={{ symbolSize: 12 }}
173
+ onEvents={{
174
+ click: (params) => console.log("Clicked:", params.data),
175
+ }}
176
+ />
177
+ ```
178
+
179
+ ### Gauge
180
+
181
+ ```tsx
182
+ <EChart.Gauge
183
+ data={[{ value: 72, name: "Completion" }]}
184
+ seriesOptions={{ detail: { formatter: "{value}%" } }}
185
+ />
186
+ ```
187
+
188
+ ### Full Control via Base Component
189
+
190
+ ```tsx
191
+ <EChart
192
+ option={{
193
+ radar: {
194
+ indicator: [
195
+ { name: "Sales", max: 100 },
196
+ { name: "Admin", max: 100 },
197
+ { name: "Tech", max: 100 },
198
+ ],
199
+ },
200
+ series: [{
201
+ type: "radar",
202
+ data: [{ value: [80, 60, 90], name: "Team A" }],
203
+ }],
204
+ }}
205
+ theme="dark-preset"
206
+ />
207
+ ```