UNPKG

@oiij/e-charts

Version:

A Vue Composable for ECharts

131 lines (128 loc) 4.12 kB
//#region rolldown:runtime var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: ((k) => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); //#endregion const __vueuse_core = __toESM(require("@vueuse/core")); const echarts_charts = __toESM(require("echarts/charts")); const echarts_components = __toESM(require("echarts/components")); const echarts_core = __toESM(require("echarts/core")); const echarts_features = __toESM(require("echarts/features")); const echarts_renderers = __toESM(require("echarts/renderers")); const vue = __toESM(require("vue")); //#region src/index.ts const baseChat = [ echarts_charts.BarChart, echarts_charts.LineChart, echarts_charts.PieChart ]; (0, echarts_core.use)([ echarts_components.TitleComponent, echarts_components.LegendComponent, echarts_components.TooltipComponent, echarts_components.GridComponent, echarts_components.DatasetComponent, echarts_components.TransformComponent, echarts_components.ToolboxComponent, echarts_features.LabelLayout, echarts_features.UniversalTransition, echarts_renderers.CanvasRenderer, ...baseChat ]); function register(ext) { (0, echarts_core.use)(ext); } function useECharts(options, darkMode, initOptions) { const domRef = (0, vue.shallowRef)(); const eChart = (0, vue.shallowRef)(null); const optionsRef = (0, vue.ref)((0, vue.toValue)(options)); (0, vue.watchEffect)(() => { optionsRef.value = (0, vue.toValue)(options); }); const { width, height } = (0, __vueuse_core.useElementSize)(domRef); const onRenderEvent = (0, __vueuse_core.createEventHook)(); const onUpdateEvent = (0, __vueuse_core.createEventHook)(); const onResizeEvent = (0, __vueuse_core.createEventHook)(); const onDisposeEvent = (0, __vueuse_core.createEventHook)(); function setOption(updateOptions) { if (eChart.value) { eChart.value.setOption(updateOptions); onUpdateEvent.trigger(updateOptions); } } function render() { if (domRef.value) { if (eChart.value) { resize(); return; } const theme = darkMode?.value ? "dark" : "default"; if (optionsRef.value) { eChart.value = (0, echarts_core.init)(domRef.value, theme, { ...initOptions }); setOption(optionsRef.value); onRenderEvent.trigger(eChart.value); } } } const renderDebounce = (0, __vueuse_core.useDebounceFn)(render, 100); function resize() { if (eChart.value) { eChart.value.resize(); onResizeEvent.trigger({ width: width.value, height: height.value }); } } const resizeDebounce = (0, __vueuse_core.useDebounceFn)(resize, 100); function destroy() { eChart.value?.dispose(); eChart.value = null; onDisposeEvent.trigger(); } (0, vue.watch)([width, height], ([width$1, height$1]) => { if (width$1 > 0 && height$1 > 0) if (eChart.value) resizeDebounce(); else renderDebounce(); }); (0, vue.watch)(optionsRef, (v) => { if (v) if (eChart.value) setOption(v); else render(); }); (0, vue.watchEffect)(() => { destroy(); render(); }); (0, vue.onUnmounted)(() => { destroy(); }); return { domRef, eChart, options: optionsRef, onRender: onRenderEvent.on, onUpdate: onUpdateEvent.on, onResize: onResizeEvent.on, onDispose: onDisposeEvent.on }; } //#endregion exports.baseChat = baseChat; exports.register = register; exports.useECharts = useECharts;