@oiij/e-charts
Version:
A Vue Composable for ECharts
131 lines (128 loc) • 4.12 kB
JavaScript
//#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;