UNPKG

vue-data-ui

Version:

A user-empowering data visualization Vue 3 components library for eloquent data storytelling

677 lines (676 loc) 28.2 kB
import { useSlots as Ge, ref as i, computed as g, watch as He, onMounted as je, onBeforeUnmount as Xe, createElementBlock as v, openBlock as n, unref as r, normalizeStyle as I, normalizeClass as M, createBlock as O, createCommentVNode as m, createElementVNode as T, createVNode as J, createSlots as we, withCtx as h, renderSlot as d, normalizeProps as A, guardReactiveProps as F, Fragment as K, renderList as Q, mergeProps as qe, createTextVNode as Te, toDisplayString as E, nextTick as Ye } from "vue"; import { u as Je, c as _e, t as Ke, p as N, a as Qe, o as Ze, e as Z, g as et, b as tt, J as lt, d as xe, f as P, X as ot, s as at, w as st, v as G, i as Ie, q as nt, r as ut, x as rt, y as it } from "./index-BaaDnc4F.js"; import { t as vt, u as ct } from "./useResponsive-vZgZwV-S.js"; import { _ as dt } from "./Title-D_MGglyN.js"; import { u as pt, U as ht } from "./usePrinter-y4-4tCWT.js"; import { _ as gt } from "./Tooltip-HRgkF8HD.js"; import { D as ft } from "./DataTable-DvwmNjb-.js"; import { L as yt } from "./Legend-Be8mrJpb.js"; import mt from "./vue-ui-skeleton-6RiQNJSb.js"; import bt from "./vue-ui-accordion-CF9kQTXq.js"; import { u as Oe } from "./useNestedProp-D8vQcOps.js"; import { _ as kt } from "./PackageVersion-D9Lm1C1X.js"; import { P as Ct } from "./PenAndPaper-DR58HO_U.js"; import { u as $t } from "./useUserOptionState-BIvW1Kz7.js"; import { _ as wt } from "./Shape-BuwIrUMv.js"; import { u as Tt } from "./useChartAccessibility-BWojgys7.js"; import { _ as _t } from "./_plugin-vue_export-helper-CHgC5LLL.js"; const xt = ["id"], It = ["xmlns", "viewBox"], Ot = ["width", "height"], Nt = ["id"], Pt = ["stop-color"], St = ["stop-color"], At = { key: 1 }, Ft = ["stroke", "cx", "cy", "r", "fill"], Lt = ["stroke", "stroke-width", "cx", "cy", "r", "fill"], Rt = ["stroke", "stroke-width", "cx", "cy", "r", "fill"], Mt = ["cx", "cy", "r", "onMouseenter"], Vt = { key: 5, class: "vue-data-ui-watermark" }, zt = ["onClick"], Ut = { key: 0 }, Wt = { key: 1 }, Bt = ["innerHTML"], Dt = { __name: "vue-ui-rings", props: { config: { type: Object, default() { return {}; } }, dataset: { type: Array, default() { return []; } } }, emits: ["selectLegend"], setup(Ne, { expose: Pe, emit: Se }) { const { vue_ui_rings: Ae } = Je(), Fe = Ge(), b = Ne, x = i(!1), V = g(() => !!b.dataset && b.dataset.length), $ = i(_e()), Le = i(null), z = i(!1), H = i(""), w = i(null), ee = i(0), L = i(null), te = i(null), le = i(null), oe = i(null), ae = i(null), se = i(0), ne = i(0), ue = i(0), e = g({ get: () => ce(), set: (t) => t }), { userOptionsVisible: j, setUserOptionsVisibility: re, keepUserOptionState: ie } = $t({ config: e.value }), { svgRef: ve } = Tt({ config: e.value.style.chart.title }); function ce() { const t = Oe({ userConfig: b.config, defaultConfig: Ae }); return t.theme ? { ...Oe({ userConfig: Qe.vue_ui_rings[t.theme] || b.config, defaultConfig: t }), customPalette: Ke[t.theme] || N } : t; } He(() => b.config, (t) => { e.value = ce(), j.value = !e.value.userOptions.showOnChartHover, de(), se.value += 1, ne.value += 1, ue.value += 1, k.value.showTable = e.value.table.show, k.value.showTooltip = e.value.style.chart.tooltip.show; }, { deep: !0 }); const U = i(null); je(() => { de(); }); function de() { if (Ze(b.dataset) ? Z({ componentName: "VueUiRings", type: "dataset" }) : b.dataset.forEach((t, o) => { t.values.length || Z({ componentName: "VueUiRings", type: "dataset" }), et({ datasetObject: t, requiredAttributes: ["name", "values"] }).forEach((l) => { Z({ componentName: "VueUiRings", type: "datasetSerieAttribute", property: l, index: o }); }); }), e.value.responsive) { const t = vt(() => { const { width: o, height: l } = ct({ chart: L.value, title: e.value.style.chart.title.text ? te.value : null, legend: e.value.style.chart.legend.show ? le.value : null, source: oe.value, noTitle: ae.value }); requestAnimationFrame(() => { s.value.width = o, s.value.height = l; }); }); U.value = new ResizeObserver(t), U.value.observe(L.value.parentNode); } setTimeout(() => { x.value = !0; }, 600); } Xe(() => { U.value && U.value.disconnect(); }); const { isPrinting: pe, isImaging: he, generatePdf: ge, generateImage: fe } = pt({ elementId: `rings_${$.value}`, fileName: e.value.style.chart.title.text || "vue-ui-rings" }), Re = g(() => e.value.userOptions.show && !e.value.style.chart.title.text), ye = g(() => tt(e.value.customPalette)), k = i({ showTable: e.value.table.show, showTooltip: e.value.style.chart.tooltip.show }), s = i({ height: 360, width: 360 }), Me = g(() => Math.min(s.value.height, s.value.width)), Ve = Se, f = i([]); function X(t) { f.value.includes(t) ? f.value = f.value.filter((o) => o !== t) : f.value.push(t), Ve("selectLegend", p.value.map((o) => ({ name: o.name, color: o.color, value: o.value }))); } const ze = g(() => Math.max( ...W.value.filter((t) => !f.value.includes(t.uid)).map(({ value: t }) => t) )); function me(t) { return t / ze.value; } const W = g(() => b.dataset.map(({ values: t, name: o, color: l = null }, a) => { const u = lt(t).reduce((y, R) => y + R, 0); return { name: o, color: l || xe(l) || ye.value[a] || N[a] || N[a % N.length], value: u, proportion: u / b.dataset.map((y) => (y.values || []).reduce((R, Ee) => R + Ee, 0)).reduce((y, R) => y + R, 0), uid: _e(), absoluteIndex: a }; })), be = g(() => W.value.map((t) => ({ ...t, shape: "circle", opacity: f.value.includes(t.uid) ? 0.5 : 1, segregate: () => X(t.uid), isSegregated: f.value.includes(t.uid) })).toSorted((t, o) => o.value - t.value)), Ue = g(() => ({ cy: "rings-div-legend", backgroundColor: e.value.style.chart.legend.backgroundColor, color: e.value.style.chart.legend.color, fontSize: e.value.style.chart.legend.fontSize, paddingBottom: 12, fontWeight: e.value.style.chart.legend.bold ? "bold" : "" })), C = g(() => W.value.filter((t) => !f.value.includes(t.uid)).map(({ value: t }) => t).reduce((t, o) => t + o, 0)), p = g(() => W.value.filter((t) => !f.value.includes(t.uid)).map(({ name: t, value: o, color: l = null, uid: a, absoluteIndex: u }, y) => ({ absoluteIndex: u, uid: a, name: t, color: l || xe(l) || ye.value[y] || N[y] || N[y % N.length], value: o, proportion: me(o), percentage: o / C.value * 100, strokeWidth: e.value.style.chart.layout.rings.strokeWidth * me(o) })).toSorted((t, o) => o.value - t.value)); function We() { return p.value.map( ({ name: t, color: o, value: l, absoluteValues: a, percentage: u }) => ({ name: t, color: o, value: l, absoluteValues: a, percentage: u }) ); } const c = g(() => Me.value - e.value.style.chart.layout.rings.strokeWidth * 2), q = i(null); function Be(t, o) { if (f.value.length === b.dataset.length) return; q.value = { datapoint: o, seriesIndex: t, series: p.value, config: e.value }, w.value = t; const l = p.value[t], a = e.value.style.chart.tooltip.customFormat; if (rt(a) && it(() => a({ seriesIndex: t, datapoint: o, series: p.value, config: e.value }))) H.value = a({ seriesIndex: t, datapoint: o, series: p.value, config: e.value }); else { let u = ""; u += `<div style="width:100%;text-align:center;border-bottom:1px solid ${e.value.style.chart.tooltip.borderColor};padding-bottom:6px;margin-bottom:3px;">${l.name}</div>`, u += `<div style="display:flex;flex-direction:row;gap:6px;align-items:center;"><svg viewBox="0 0 60 60" height="14" width="14"><circle cx="30" cy="30" r="30" stroke="none" fill="${l.color}" />${Fe.pattern ? `<circle cx="30" cy="30" r="30" stroke="none" fill="url(#pattern_${$.value}_${o.absoluteIndex})" />` : ""}</svg>`, e.value.style.chart.tooltip.showValue && (u += `<b>${Ie( e.value.style.chart.layout.labels.dataLabels.formatter, l.value, P({ p: e.value.style.chart.layout.labels.dataLabels.prefix, v: l.value, s: e.value.style.chart.layout.labels.dataLabels.suffix, r: e.value.style.chart.tooltip.roundingValue }), { datapoint: o, seriesIndex: t } )} </b>`), e.value.style.chart.tooltip.showPercentage && (e.value.style.chart.tooltip.showValue ? u += `<span>(${P({ v: l.value / C.value * 100, s: "%", r: e.value.style.chart.tooltip.roundingPercentage })})</span></div>` : u += `<b>${P({ v: l.value / C.value * 100, s: "%", r: e.value.style.chart.tooltip.roundingPercentage })}</b></div>`), H.value = u; } z.value = !0; } const _ = g(() => { const t = p.value.map((l) => ({ name: l.name, color: l.color })), o = p.value.map((l) => l.value); return { head: t, body: o }; }), B = g(() => { const t = [ ' <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 16v2a1 1 0 0 1 -1 1h-11l6 -7l-6 -7h11a1 1 0 0 1 1 1v2" /></svg>', P({ p: e.value.style.chart.layout.labels.dataLabels.prefix, v: C.value, s: e.value.style.chart.layout.labels.dataLabels.suffix, r: e.value.table.td.roundingValue }), "100%" ], o = _.value.head.map((u, y) => [ { color: u.color, name: u.name }, P({ p: e.value.style.chart.layout.labels.dataLabels.prefix, v: _.value.body[y], s: e.value.style.chart.layout.labels.dataLabels.suffix, r: e.value.table.td.roundingValue }), isNaN(_.value.body[y] / C.value) ? "-" : (_.value.body[y] / C.value * 100).toFixed(e.value.table.td.roundingPercentage) + "%" ]), l = { th: { backgroundColor: e.value.table.th.backgroundColor, color: e.value.table.th.color, outline: e.value.table.th.outline }, td: { backgroundColor: e.value.table.td.backgroundColor, color: e.value.table.td.color, outline: e.value.table.td.outline }, breakpoint: e.value.table.responsiveBreakpoint }, a = [ e.value.table.columnNames.series, e.value.table.columnNames.value, e.value.table.columnNames.percentage ]; return { head: t, body: o, config: l, colNames: a }; }); function ke() { Ye(() => { const t = _.value.head.map((a, u) => [[ a.name ], [_.value.body[u]], [isNaN(_.value.body[u] / C.value) ? "-" : _.value.body[u] / C.value * 100]]), o = [[e.value.style.chart.title.text], [e.value.style.chart.title.subtitle.text], [[""], ["val"], ["%"]]].concat(t), l = nt(o); ut({ csvContent: l, title: e.value.style.chart.title.text || "vue-ui-rings" }); }); } const S = i(!1); function De(t) { S.value = t, ee.value += 1; } function Ce() { k.value.showTable = !k.value.showTable; } function $e() { k.value.showTooltip = !k.value.showTooltip; } const D = i(!1); function Y() { D.value = !D.value; } return Pe({ getData: We, generatePdf: ge, generateCsv: ke, generateImage: fe, toggleTable: Ce, toggleTooltip: $e, toggleAnnotator: Y }), (t, o) => (n(), v("div", { ref_key: "ringsChart", ref: L, class: M(`vue-ui-rings ${S.value ? "vue-data-ui-wrapper-fullscreen" : ""} ${e.value.useCssAnimation ? "" : "vue-ui-dna"}`), style: I(`font-family:${e.value.style.fontFamily};text-align:center;width:100%;background:${e.value.style.chart.backgroundColor};${e.value.responsive ? "height: 100%" : ""}`), id: `rings_${$.value}`, onMouseleave: o[3] || (o[3] = (l) => { w.value = null, z.value = !1, r(re)(!1); }), onMouseenter: o[4] || (o[4] = () => r(re)(!0)) }, [ e.value.userOptions.buttons.annotator ? (n(), O(Ct, { key: 0, svgRef: r(ve), backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, active: D.value, onClose: Y }, null, 8, ["svgRef", "backgroundColor", "color", "active"])) : m("", !0), Re.value ? (n(), v("div", { key: 1, ref_key: "noTitle", ref: ae, class: "vue-data-ui-no-title-space", style: "height:36px; width: 100%;background:transparent" }, null, 512)) : m("", !0), e.value.style.chart.title.text ? (n(), v("div", { key: 2, ref_key: "chartTitle", ref: te, style: "width:100%;background:transparent" }, [ (n(), O(dt, { key: `title_${se.value}`, config: { title: { cy: "rings-div-title", ...e.value.style.chart.title }, subtitle: { cy: "rings-div-subtitle", ...e.value.style.chart.title.subtitle } } }, null, 8, ["config"])) ], 512)) : m("", !0), e.value.userOptions.show && V.value && (r(ie) || r(j)) ? (n(), O(ht, { ref_key: "details", ref: Le, key: `user_options_${ee.value}`, backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, isPrinting: r(pe), isImaging: r(he), uid: $.value, hasTooltip: e.value.userOptions.buttons.tooltip && e.value.style.chart.tooltip.show, hasPdf: e.value.userOptions.buttons.pdf, hasXls: e.value.userOptions.buttons.csv, hasImg: e.value.userOptions.buttons.img, hasTable: e.value.userOptions.buttons.table, hasFullscreen: e.value.userOptions.buttons.fullscreen, isTooltip: k.value.showTooltip, isFullscreen: S.value, titles: { ...e.value.userOptions.buttonTitles }, chartElement: L.value, position: e.value.userOptions.position, hasAnnotator: e.value.userOptions.buttons.annotator, isAnnotation: D.value, onToggleFullscreen: De, onGeneratePdf: r(ge), onGenerateCsv: ke, onGenerateImage: r(fe), onToggleTable: Ce, onToggleTooltip: $e, onToggleAnnotator: Y, style: I({ visibility: r(ie) ? r(j) ? "visible" : "hidden" : "visible" }) }, we({ _: 2 }, [ t.$slots.menuIcon ? { name: "menuIcon", fn: h(({ isOpen: l, color: a }) => [ d(t.$slots, "menuIcon", A(F({ isOpen: l, color: a })), void 0, !0) ]), key: "0" } : void 0, t.$slots.optionTooltip ? { name: "optionTooltip", fn: h(() => [ d(t.$slots, "optionTooltip", {}, void 0, !0) ]), key: "1" } : void 0, t.$slots.optionPdf ? { name: "optionPdf", fn: h(() => [ d(t.$slots, "optionPdf", {}, void 0, !0) ]), key: "2" } : void 0, t.$slots.optionCsv ? { name: "optionCsv", fn: h(() => [ d(t.$slots, "optionCsv", {}, void 0, !0) ]), key: "3" } : void 0, t.$slots.optionImg ? { name: "optionImg", fn: h(() => [ d(t.$slots, "optionImg", {}, void 0, !0) ]), key: "4" } : void 0, t.$slots.optionTable ? { name: "optionTable", fn: h(() => [ d(t.$slots, "optionTable", {}, void 0, !0) ]), key: "5" } : void 0, t.$slots.optionFullscreen ? { name: "optionFullscreen", fn: h(({ toggleFullscreen: l, isFullscreen: a }) => [ d(t.$slots, "optionFullscreen", A(F({ toggleFullscreen: l, isFullscreen: a })), void 0, !0) ]), key: "6" } : void 0, t.$slots.optionAnnotator ? { name: "optionAnnotator", fn: h(({ toggleAnnotator: l, isAnnotator: a }) => [ d(t.$slots, "optionAnnotator", A(F({ toggleAnnotator: l, isAnnotator: a })), void 0, !0) ]), key: "7" } : void 0 ]), 1032, ["backgroundColor", "color", "isPrinting", "isImaging", "uid", "hasTooltip", "hasPdf", "hasXls", "hasImg", "hasTable", "hasFullscreen", "isTooltip", "isFullscreen", "titles", "chartElement", "position", "hasAnnotator", "isAnnotation", "onGeneratePdf", "onGenerateImage", "style"])) : m("", !0), V.value ? (n(), v("svg", { key: 4, ref_key: "svgRef", ref: ve, xmlns: r(ot), class: M({ "vue-data-ui-fullscreen--on": S.value, "vue-data-ui-fulscreen--off": !S.value }), viewBox: `0 0 ${s.value.width <= 0 ? 10 : s.value.width} ${s.value.height <= 0 ? 10 : s.value.height}`, style: I(`max-width:100%;overflow:visible;background:transparent;color:${e.value.style.chart.color}`) }, [ J(kt), t.$slots["chart-background"] ? (n(), v("foreignObject", { key: 0, x: 0, y: 0, width: s.value.width <= 0 ? 10 : s.value.width, height: s.value.height <= 0 ? 10 : s.value.height, style: { pointerEvents: "none" } }, [ d(t.$slots, "chart-background", {}, void 0, !0) ], 8, Ot)) : m("", !0), T("defs", null, [ (n(!0), v(K, null, Q(p.value, (l, a) => (n(), v("radialGradient", { cx: "50%", cy: "30%", r: "50%", fx: "50%", fy: "50%", id: `gradient_${$.value}_${a}` }, [ T("stop", { offset: "0%", "stop-color": r(at)(r(st)(l.color, 0.05), 100 - e.value.style.chart.layout.rings.gradient.intensity) }, null, 8, Pt), T("stop", { offset: "100%", "stop-color": l.color }, null, 8, St) ], 8, Nt))), 256)) ]), t.$slots.pattern ? (n(), v("g", At, [ (n(!0), v(K, null, Q(p.value, (l) => (n(), v("defs", null, [ d(t.$slots, "pattern", qe({ ref_for: !0 }, { seriesIndex: l.absoluteIndex, patternId: `pattern_${$.value}_${l.absoluteIndex}` }), void 0, !0) ]))), 256)) ])) : m("", !0), (n(!0), v(K, null, Q(p.value, (l, a) => (n(), v("g", null, [ T("circle", { class: M({ "vue-ui-rings-item": x.value && e.value.useCssAnimation, "vue-rings-item-onload": !x.value && e.value.useCssAnimation, "vue-ui-rings-opacity": w.value !== null && w.value !== a }), style: I(`animation-delay:${a * 100}ms`), stroke: e.value.style.chart.layout.rings.stroke, cx: s.value.width / 2, cy: a === 0 ? s.value.height / 2 : s.value.height / 2 + c.value * p.value[0].proportion / 2 - c.value * l.proportion / 2 - 2 * (a + 1), r: r(G)(c.value * l.proportion / 2 * 0.9 <= 0 ? 1e-4 : c.value * l.proportion / 2 * 0.9), fill: e.value.style.chart.layout.rings.gradient.underlayerColor }, null, 14, Ft), T("circle", { class: M({ "vue-ui-rings-item": x.value && e.value.useCssAnimation, "vue-rings-item-onload": !x.value && e.value.useCssAnimation, "vue-ui-rings-shadow": e.value.style.chart.layout.rings.useShadow, "vue-ui-rings-blur": w.value !== null && w.value !== a }), style: I(`animation-delay:${a * 100}ms`), stroke: e.value.style.chart.layout.rings.stroke, "stroke-width": l.strokeWidth < 0.5 ? 0.5 : l.strokeWidth, cx: s.value.width / 2, cy: a === 0 ? s.value.height / 2 : s.value.height / 2 + c.value * p.value[0].proportion / 2 - c.value * l.proportion / 2 - 2 * (a + 1), r: r(G)(c.value * l.proportion / 2 * 0.9 <= 0 ? 1e-4 : c.value * l.proportion / 2 * 0.9), fill: e.value.style.chart.layout.rings.gradient.show ? `url(#gradient_${$.value}_${a})` : l.color }, null, 14, Lt), t.$slots.pattern ? (n(), v("circle", { key: 0, class: M({ "vue-ui-rings-item": x.value && e.value.useCssAnimation, "vue-rings-item-onload": !x.value && e.value.useCssAnimation, "vue-ui-rings-shadow": e.value.style.chart.layout.rings.useShadow, "vue-ui-rings-blur": w.value !== null && w.value !== a }), style: I(`animation-delay:${a * 100}ms`), stroke: e.value.style.chart.layout.rings.stroke, "stroke-width": l.strokeWidth < 0.5 ? 0.5 : l.strokeWidth, cx: s.value.width / 2, cy: a === 0 ? s.value.height / 2 : s.value.height / 2 + c.value * p.value[0].proportion / 2 - c.value * l.proportion / 2 - 2 * (a + 1), r: r(G)(c.value * l.proportion / 2 * 0.9 <= 0 ? 1e-4 : c.value * l.proportion / 2 * 0.9), fill: `url(#pattern_${$.value}_${l.absoluteIndex})` }, null, 14, Rt)) : m("", !0), T("circle", { stroke: "none", cx: s.value.width / 2, cy: a === 0 ? s.value.height / 2 : s.value.height / 2 + c.value * p.value[0].proportion / 2 - c.value * l.proportion / 2 - 2 * (a + 1), r: r(G)(c.value * l.proportion / 2 * 0.9 <= 0 ? 1e-4 : c.value * l.proportion / 2 * 0.9), fill: "transparent", onMouseenter: (u) => Be(a, l), onMouseleave: o[0] || (o[0] = (u) => { w.value = null, z.value = !1; }) }, null, 40, Mt) ]))), 256)), d(t.$slots, "svg", { svg: s.value }, void 0, !0) ], 14, It)) : m("", !0), t.$slots.watermark ? (n(), v("div", Vt, [ d(t.$slots, "watermark", A(F({ isPrinting: r(pe) || r(he) })), void 0, !0) ])) : m("", !0), V.value ? m("", !0) : (n(), O(mt, { key: 6, config: { type: "rings", style: { backgroundColor: e.value.style.chart.backgroundColor, rings: { color: "#CCCCCC" } } } }, null, 8, ["config"])), T("div", { ref_key: "chartLegend", ref: le }, [ e.value.style.chart.legend.show ? (n(), O(yt, { key: `legend_${ue.value}`, legendSet: be.value, config: Ue.value, onClickMarker: o[1] || (o[1] = ({ legend: l }) => X(l.uid)) }, we({ item: h(({ legend: l, index: a }) => [ T("div", { onClick: (u) => X(l.uid), style: I(`opacity:${f.value.includes(l.uid) ? 0.5 : 1}`) }, [ Te(E(l.name) + ": " + E(r(Ie)( e.value.style.chart.layout.labels.dataLabels.formatter, l.value, r(P)({ p: e.value.style.chart.layout.labels.dataLabels.prefix, v: l.value, s: e.value.style.chart.layout.labels.dataLabels.suffix, r: e.value.style.chart.legend.roundingValue }), { datapoint: l, seriesIndex: a } )) + " ", 1), f.value.includes(l.uid) ? (n(), v("span", Wt, " ( - % ) ")) : (n(), v("span", Ut, " (" + E(isNaN(l.value / C.value) ? "-" : r(P)({ v: l.value / C.value * 100, s: "%", r: e.value.style.chart.legend.roundingPercentage })) + ") ", 1)) ], 12, zt) ]), _: 2 }, [ t.$slots.pattern ? { name: "legend-pattern", fn: h(({ legend: l, index: a }) => [ J(wt, { shape: l.shape, radius: 30, stroke: "none", plot: { x: 30, y: 30 }, fill: `url(#pattern_${$.value}_${a})` }, null, 8, ["shape", "fill"]) ]), key: "0" } : void 0 ]), 1032, ["legendSet", "config"])) : d(t.$slots, "legend", { key: 1, legend: be.value }, void 0, !0) ], 512), t.$slots.source ? (n(), v("div", { key: 7, ref_key: "source", ref: oe, dir: "auto" }, [ d(t.$slots, "source", {}, void 0, !0) ], 512)) : m("", !0), J(gt, { show: k.value.showTooltip && z.value && f.value.length < b.dataset.length, backgroundColor: e.value.style.chart.tooltip.backgroundColor, color: e.value.style.chart.tooltip.color, borderRadius: e.value.style.chart.tooltip.borderRadius, borderColor: e.value.style.chart.tooltip.borderColor, borderWidth: e.value.style.chart.tooltip.borderWidth, fontSize: e.value.style.chart.tooltip.fontSize, backgroundOpacity: e.value.style.chart.tooltip.backgroundOpacity, position: e.value.style.chart.tooltip.position, offsetY: e.value.style.chart.tooltip.offsetY, parent: L.value, content: H.value, isFullscreen: S.value, isCustom: e.value.style.chart.tooltip.customFormat && typeof e.value.style.chart.tooltip.customFormat == "function" }, { "tooltip-before": h(() => [ d(t.$slots, "tooltip-before", A(F({ ...q.value })), void 0, !0) ]), "tooltip-after": h(() => [ d(t.$slots, "tooltip-after", A(F({ ...q.value })), void 0, !0) ]), _: 3 }, 8, ["show", "backgroundColor", "color", "borderRadius", "borderColor", "borderWidth", "fontSize", "backgroundOpacity", "position", "offsetY", "parent", "content", "isFullscreen", "isCustom"]), V.value ? (n(), O(bt, { key: 8, hideDetails: "", config: { open: k.value.showTable, maxHeight: 1e4, body: { backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color }, head: { backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color } } }, { content: h(() => [ (n(), O(ft, { key: `table_${ne.value}`, colNames: B.value.colNames, head: B.value.head, body: B.value.body, config: B.value.config, title: `${e.value.style.chart.title.text}${e.value.style.chart.title.subtitle.text ? ` : ${e.value.style.chart.title.subtitle.text}` : ""}`, onClose: o[2] || (o[2] = (l) => k.value.showTable = !1) }, { th: h(({ th: l }) => [ T("div", { innerHTML: l, style: { display: "flex", "align-items": "center" } }, null, 8, Bt) ]), td: h(({ td: l }) => [ Te(E(l.name || l), 1) ]), _: 1 }, 8, ["colNames", "head", "body", "config", "title"])) ]), _: 1 }, 8, ["config"])) : m("", !0) ], 46, xt)); } }, nl = /* @__PURE__ */ _t(Dt, [["__scopeId", "data-v-380bda50"]]); export { nl as default };