UNPKG

vue-data-ui

Version:

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

659 lines (658 loc) 26.7 kB
import { useCssVars as We, computed as w, ref as p, watch as $e, onMounted as Xe, watchEffect as Ye, createElementBlock as b, openBlock as f, unref as m, normalizeStyle as K, normalizeClass as Te, createBlock as M, createCommentVNode as k, renderSlot as x, createSlots as Ze, withCtx as z, normalizeProps as U, guardReactiveProps as B, createVNode as Je, Fragment as Q, renderList as Ke, createElementVNode as C, mergeProps as Pe, toDisplayString as j, createTextVNode as Qe, nextTick as Se } from "vue"; import { u as et, c as Ie, t as ie, p as ee, a as tt, o as lt, e as at, b as ot, d as st, h as Oe, f as ce, X as nt, l as rt, G as q, a7 as ut, q as it, r as ct, i as Fe } from "./index-CHWA6Lnw.js"; import { u as Ne } from "./useNestedProp-ByBiJC9_.js"; import { u as vt, U as dt } from "./usePrinter-DibtVl2x.js"; import { _ as ht } from "./Title-BwZtefYd.js"; import { P as ft } from "./PenAndPaper-ljJaW1FE.js"; import { u as yt } from "./useUserOptionState-BIvW1Kz7.js"; import { _ as mt } from "./PackageVersion-DcMafJMi.js"; import pt from "./vue-ui-accordion-gHGrRoVr.js"; import { D as bt } from "./DataTable-B4YF6guk.js"; import gt from "./vue-ui-skeleton-BSUFPx4a.js"; import { u as kt } from "./useChartAccessibility-BWojgys7.js"; import { t as xt, u as wt } from "./useResponsive-vZgZwV-S.js"; import { _ as Ct } from "./_plugin-vue_export-helper-CHgC5LLL.js"; function Me(r, c = 0) { const h = r.reduce((a, { x: s, r: u }) => Math.min(a, s - u - c), 1 / 0), i = r.reduce((a, { x: s, r: u }) => Math.max(a, s + u + c), -1 / 0), v = r.reduce((a, { y: s, r: u }) => Math.min(a, s - u - c), 1 / 0), o = r.reduce((a, { y: s, r: u }) => Math.max(a, s + u + c), -1 / 0); return [h, v, i - h, o - v]; } function _t(r, c, h) { const i = r._, v = r.next._, o = i.r + v.r, a = (i.x * v.r + v.x * i.r) / o, s = (i.y * v.r + v.y * i.r) / o; return Math.max(Math.abs(a * h), Math.abs(s * c)); } function Ee(r, c, h) { const i = _t, v = r.length; if (!v) return r; let o, a, s; if (o = r[0], o.x = 0, o.y = 0, !(v > 1) || (a = r[1], o.x = -a.r, a.x = o.r, a.y = 0, !(v > 2))) return r; Re(a, o, s = r[2]), o = new te(o), a = new te(a), s = new te(s), o.next = s.previous = a, a.next = o.previous = s, s.next = a.previous = o; e: for (let u = 3; u < v; ++u) { Re(o._, a._, s = r[u]), s = new te(s); let g = a.next, $ = o.previous, E = a._.r, R = o._.r; do if (E <= R) { if (Ae(g._, s._)) { a = g, o.next = a, a.previous = o, --u; continue e; } E += g._.r, g = g.next; } else { if (Ae($._, s._)) { o = $, o.next = a, a.previous = o, --u; continue e; } R += $._.r, $ = $.previous; } while (g !== $.next); s.previous = o, s.next = a, o.next = a.previous = a = s; let A = i(o, h, c), W; for (; (s = s.next) !== a; ) (W = i(s, h, c)) < A && (o = s, A = W); a = o.next; } return r; } function Re(r, c, h) { const i = r.x - c.x, v = r.y - c.y, o = i * i + v * v; if (o) { const a = (c.r + h.r) ** 2, s = (r.r + h.r) ** 2; if (a > s) { const u = (o + s - a) / (2 * o), g = Math.sqrt(Math.max(0, s / o - u * u)); h.x = r.x - u * i - g * v, h.y = r.y - u * v + g * i; } else { const u = (o + a - s) / (2 * o), g = Math.sqrt(Math.max(0, a / o - u * u)); h.x = c.x + u * i - g * v, h.y = c.y + u * v + g * i; } } else h.x = c.x + h.r, h.y = c.y; } function Ae(r, c) { const h = r.r + c.r - 1e-6, i = c.x - r.x, v = c.y - r.y; return h > 0 && h * h > i * i + v * v; } class te { constructor(c) { this._ = c, this.next = null, this.previous = null; } } const zt = ["id"], $t = ["xmlns", "viewBox", "height", "width"], Tt = ["x", "y", "width", "height"], Pt = ["id"], St = ["stop-color"], It = ["stop-color"], Ot = ["stop-color"], Ft = { key: 0 }, Nt = ["x", "y", "width", "height", "stroke", "stroke-width", "fill", "rx", "onMouseenter", "onClick"], Mt = ["x", "y", "width", "height", "stroke", "stroke-width", "fill", "rx"], Et = ["opacity", "x", "y", "font-size", "fill", "font-weight"], Rt = ["opacity", "x", "y", "font-size", "fill", "font-weight"], At = ["cx", "cy", "r", "opacity", "stroke", "stroke-width", "fill"], Dt = { key: 0, style: { pointerEvents: "none" } }, Lt = { key: 1 }, Ht = ["opacity", "x", "y", "font-size", "fill", "font-weight"], Vt = ["opacity", "x", "y", "font-size", "fill", "font-weight"], Gt = { key: 6, class: "vue-data-ui-watermark" }, Ut = ["innerHTML"], Bt = { __name: "vue-ui-circle-pack", props: { config: { type: Object, default() { return {}; } }, dataset: { type: Array, default() { return []; } } }, emits: ["selectDatapoint"], setup(r, { expose: c, emit: h }) { We((t) => ({ bf62f51c: N.value, "623b642a": oe.value })); const i = r, v = h, { vue_ui_circle_pack: o } = et(), a = w(() => !!i.dataset && i.dataset.length), s = p(Ie()), u = p(null), g = p(null), $ = p(null), E = p(0), R = p(0), A = p(0), W = p(null), e = w({ get: () => fe(), set: (t) => t }), { svgRef: ve } = kt({ config: e.value.style.chart.title }), { userOptionsVisible: le, setUserOptionsVisibility: de, keepUserOptionState: he } = yt({ config: e.value }); function fe() { const t = Ne({ userConfig: i.config, defaultConfig: o }); return t.theme ? { ...Ne({ userConfig: tt.vue_ui_circle_pack[t.theme] || i.config, defaultConfig: t }), customPalette: ie[t.theme] || ee } : t; } $e(() => i.config, (t) => { e.value = fe(), le.value = !e.value.userOptions.showOnChartHover, ae(), E.value += 1, R.value += 1, D.value.showTable = e.value.table.show; }, { deep: !0 }); const { isPrinting: ye, isImaging: me, generatePdf: pe, generateImage: be } = vt({ elementId: `vue-ui-circle-pack_${s.value}`, fileName: e.value.style.chart.title.text || "vue-ui-circle-pack" }), De = w(() => e.value.userOptions.show && !e.value.style.chart.title.text), D = p({ showTable: e.value.table.show }), ge = p(null), I = p({ h: 10, w: 10 }), ke = p(0), O = p([0, 0, 100, 100]), X = p({ h: 0, w: 0 }); async function ae() { lt(i.dataset) && at({ componentName: "VueUiCirclePack", type: "dataset" }), F.value = await Ee(Y.value), T.value = Me(F.value, 1).join(" "), X.value = xe(u.value); const t = xt(() => { const { width: n, height: l, heightTitle: y, heightNoTitle: _ } = wt({ chart: u.value, title: g.value, noTitle: $.value }), re = n || 10, ue = l && l > 10 ? l : 10; ke.value = e.value.style.chart.title.text ? y : _, requestAnimationFrame(() => { I.value.w = re, I.value.h = ue - ke.value, Se(async () => { const je = Y.value.map((qe) => ({ ...qe })); F.value = await Ee(je, I.value.h, I.value.w), O.value = Me(F.value, 1), T.value = O.value.join(" "), X.value = xe(u.value); }); }); }); ge.value = new ResizeObserver(t), ge.value.observe(u.value.parentNode); } Xe(ae); function xe(t) { if (!t || !t.parentElement) return console.warn("Component or parent element is missing."), { w: 0, h: 0 }; const n = t.parentElement; if (n.offsetWidth > 0 && n.offsetHeight > 0) return { w: n.offsetWidth, h: n.offsetHeight }; const l = window.getComputedStyle(n), y = l.width, _ = l.height; return y !== "auto" && _ !== "auto" && parseFloat(y) > 0 && parseFloat(_) > 0 ? { w: parseFloat(y), h: parseFloat(_) } : { w: 0, h: 0 }; } $e(() => i.dataset, async (t) => { await ae(); }, { deep: !0 }); const Le = w(() => ot(e.value.customPalette)), Y = w(() => i.dataset.map((t, n) => { const l = st(t.color) || Le.value[n] || ie[e.value.theme || "default"][n % ie[e.value.theme || "default"].length] || ee[n] || ee[n % ee.length]; return { ...t, r: t.value, id: Ie(), color: l }; }).filter((t) => ![null, void 0, 1 / 0, -1 / 0].includes(t.value))), F = p([]), T = p("0 0 100 100"), L = w(() => Math.max(...F.value.map((t) => t.r))); function we(t, n) { return n / L.value * t; } const d = p(null); function He(t) { e.value.style.chart.circles.zoom.show && (d.value = t); } const N = w(() => d.value ? d.value.r : 0), oe = w(() => S.value ? N.value : d.value ? d.value.r > O.value[3] / 6 * e.value.style.chart.circles.zoom.zoomRatio ? d.value.r : O.value[3] / 6 * e.value.style.chart.circles.zoom.zoomRatio : 0), P = p(0), Ve = w(() => ({ pointerEvents: "none", opacity: P.value, filter: `drop-shadow(0px 0px 6px ${Oe(d.value.color, e.value.style.chart.circles.zoom.shadowForce)})` })), H = p(N.value); Ye(() => { H.value = N.value, P.value = 0; let t = null; function n(l) { t || (t = l); const y = (l - t) / e.value.style.chart.circles.zoom.animationFrameMs; y < 1 ? (H.value = N.value + (oe.value - N.value) * y, P.value = 0 + e.value.style.chart.circles.zoom.opacity * y, requestAnimationFrame(n)) : (H.value = oe.value, P.value = e.value.style.chart.circles.zoom.opacity); } requestAnimationFrame(n); }); const V = w(() => ({ name: e.value.style.chart.circles.zoom.label.name.fontSize * O.value[3] / 300, value: e.value.style.chart.circles.zoom.label.value.fontSize * O.value[3] / 300 })); function se(t) { return Fe( e.value.style.chart.circles.labels.value.formatter, t.value, ce({ p: e.value.style.chart.circles.labels.value.prefix, v: t.value, s: e.value.style.chart.circles.labels.value.suffix, r: e.value.style.chart.circles.labels.value.rounding }) ); } function Ge() { return Fe( e.value.style.chart.circles.zoom.label.value.formatter, d.value.value, ce({ p: e.value.style.chart.circles.zoom.label.value.prefix, v: d.value.value, s: e.value.style.chart.circles.zoom.label.value.suffix, r: e.value.style.chart.circles.zoom.label.value.rounding }) ); } function Ce(t) { if (!t) return 0; const n = t.r / se(t).length * (se(t).length === 1 ? 1 : 2); return Math.min(t.r / 2.5, n); } const G = p(!1); function Ue(t) { G.value = t, A.value += 1; } const S = p(!1); function ne() { S.value = !S.value; } const Z = w(() => { const t = Y.value.map((l) => ({ name: l.name, value: l.value, color: l.color })).toSorted((l, y) => y.value - l.value), n = t.map((l) => l.value); return { head: t, body: n }; }); function _e() { Se(() => { const t = Z.value.head.map((y, _) => [[ y.name ], [Z.value.body[_]]]), n = [[e.value.style.chart.title.text], [e.value.style.chart.title.subtitle.text], [[""], [e.value.table.columnNames.value]]].concat(t), l = it(n); ct({ csvContent: l, title: e.value.style.chart.title.text || "vue-ui-circle-pack" }); }); } const J = w(() => { const t = [ e.value.table.columnNames.datapoint, e.value.table.columnNames.value ], n = Z.value.head.map((_, re) => { const ue = ce({ p: e.value.style.chart.circles.labels.value.prefix, v: Z.value.body[re], s: e.value.style.chart.circles.labels.value.suffix, r: e.value.style.chart.circles.labels.value.rounding }); return [ { color: _.color, name: _.name }, ue ]; }), 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 }; return { colNames: [ e.value.table.columnNames.datapoint, e.value.table.columnNames.value ], head: t, body: n, config: l }; }); function ze() { D.value.showTable = !D.value.showTable; } function Be() { return Y.value; } return c({ getData: Be, generateCsv: _e, generatePdf: pe, generateImage: be, toggleTable: ze, toggleAnnotator: ne }), (t, n) => (f(), b("div", { id: `vue-ui-circle-pack_${s.value}`, class: Te(`vue-ui-circle-pack ${G.value ? "vue-data-ui-wrapper-fullscreen" : ""}`), ref_key: "circlePackChart", ref: u, style: K(`font-family:${e.value.style.fontFamily};text-align:center;background:${e.value.style.chart.backgroundColor}; height: ${X.value.h}px; width:${X.value.w}px`), onMouseenter: n[2] || (n[2] = () => m(de)(!0)), onMouseleave: n[3] || (n[3] = () => m(de)(!1)) }, [ e.value.userOptions.buttons.annotator ? (f(), M(ft, { key: 0, svgRef: m(ve), backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, active: S.value, scale: L.value / 100, onClose: ne }, null, 8, ["svgRef", "backgroundColor", "color", "active", "scale"])) : k("", !0), x(t.$slots, "userConfig", {}, void 0, !0), De.value ? (f(), b("div", { key: 1, ref_key: "noTitle", ref: $, class: "vue-data-ui-no-title-space", style: "height:36px; width: 100%;background:transparent" }, null, 512)) : k("", !0), e.value.style.chart.title.text ? (f(), b("div", { key: 2, ref_key: "chartTitle", ref: g, style: "width:100%;background:transparent;padding-bottom:12px" }, [ (f(), M(ht, { key: `title_${E.value}`, config: { title: { cy: "donut-div-title", ...e.value.style.chart.title }, subtitle: { cy: "donut-div-subtitle", ...e.value.style.chart.title.subtitle } } }, null, 8, ["config"])) ], 512)) : k("", !0), e.value.userOptions.show && a.value && (m(he) || m(le)) ? (f(), M(dt, { ref: "details", key: `user_option_${A.value}`, backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, isPrinting: m(ye), isImaging: m(me), uid: s.value, hasTooltip: !1, hasLabel: !1, hasPdf: e.value.userOptions.buttons.pdf, hasImg: e.value.userOptions.buttons.img, hasXls: e.value.userOptions.buttons.csv, hasTable: e.value.userOptions.buttons.table, hasFullscreen: e.value.userOptions.buttons.fullscreen, isFullscreen: G.value, chartElement: u.value, position: e.value.userOptions.position, titles: { ...e.value.userOptions.buttonTitles }, hasAnnotator: e.value.userOptions.buttons.annotator, isAnnotation: S.value, onToggleFullscreen: Ue, onGeneratePdf: m(pe), onGenerateCsv: _e, onGenerateImage: m(be), onToggleTable: ze, onToggleAnnotator: ne, style: K({ visibility: m(he) ? m(le) ? "visible" : "hidden" : "visible" }) }, Ze({ _: 2 }, [ t.$slots.menuIcon ? { name: "menuIcon", fn: z(({ isOpen: l, color: y }) => [ x(t.$slots, "menuIcon", U(B({ isOpen: l, color: y })), void 0, !0) ]), key: "0" } : void 0, t.$slots.optionPdf ? { name: "optionPdf", fn: z(() => [ x(t.$slots, "optionPdf", {}, void 0, !0) ]), key: "1" } : void 0, t.$slots.optionCsv ? { name: "optionCsv", fn: z(() => [ x(t.$slots, "optionCsv", {}, void 0, !0) ]), key: "2" } : void 0, t.$slots.optionImg ? { name: "optionImg", fn: z(() => [ x(t.$slots, "optionImg", {}, void 0, !0) ]), key: "3" } : void 0, t.$slots.optionTable ? { name: "optionTable", fn: z(() => [ x(t.$slots, "optionTable", {}, void 0, !0) ]), key: "4" } : void 0, t.$slots.optionFullscreen ? { name: "optionFullscreen", fn: z(({ toggleFullscreen: l, isFullscreen: y }) => [ x(t.$slots, "optionFullscreen", U(B({ toggleFullscreen: l, isFullscreen: y })), void 0, !0) ]), key: "5" } : void 0, t.$slots.optionAnnotator ? { name: "optionAnnotator", fn: z(({ toggleAnnotator: l, isAnnotator: y }) => [ x(t.$slots, "optionAnnotator", U(B({ toggleAnnotator: l, isAnnotator: y })), void 0, !0) ]), key: "6" } : void 0 ]), 1032, ["backgroundColor", "color", "isPrinting", "isImaging", "uid", "hasPdf", "hasImg", "hasXls", "hasTable", "hasFullscreen", "isFullscreen", "chartElement", "position", "titles", "hasAnnotator", "isAnnotation", "onGeneratePdf", "onGenerateImage", "style"])) : k("", !0), a.value ? (f(), b("svg", { key: 4, ref_key: "svgRef", ref: ve, xmlns: m(nt), viewBox: T.value, height: I.value.h, width: I.value.w, class: Te({ "vue-data-ui-fullscreen--on": G.value, "vue-data-ui-fulscreen--off": !G.value }), style: K(`max-width:100%;overflow:visible;background:transparent;color:${e.value.style.chart.color};background:${e.value.style.chart.backgroundColor};`) }, [ Je(mt), t.$slots["chart-background"] ? (f(), b("foreignObject", { key: 0, x: T.value.x, y: T.value.y, width: T.value.width, height: T.value.height, style: { pointerEvents: "none" } }, [ x(t.$slots, "chart-background", {}, void 0, !0) ], 8, Tt)) : k("", !0), (f(!0), b(Q, null, Ke(F.value, (l) => (f(), b(Q, null, [ C("defs", null, [ C("radialGradient", { id: l.id, fy: "30%" }, [ C("stop", { offset: "10%", "stop-color": m(rt)(l.color, e.value.style.chart.circles.gradient.intensity / 100) }, null, 8, St), C("stop", { offset: "90%", "stop-color": m(Oe)(l.color, 0.1) }, null, 8, It), C("stop", { offset: "100%", "stop-color": l.color }, null, 8, Ot) ], 8, Pt) ]), t.$slots.pattern ? (f(), b("g", Ft, [ C("defs", null, [ x(t.$slots, "pattern", Pe({ ref_for: !0 }, { ...l, patternId: `pattern_${s.value}_${l.id}` }), void 0, !0) ]) ])) : k("", !0), C("rect", { x: l.x - l.r, y: l.y - l.r, width: l.r * 2, height: l.r * 2, stroke: e.value.style.chart.circles.stroke, "stroke-width": e.value.style.chart.circles.strokeWidth * L.value / 100, fill: e.value.style.chart.circles.gradient.show ? `url(#${l.id})` : l.color, rx: l.r, onMouseenter: () => He(l), onMouseout: n[0] || (n[0] = (y) => d.value = null), onClick: (y) => v("selectDatapoint", l) }, null, 40, Nt), t.$slots.pattern ? (f(), b("rect", { key: 1, x: l.x - l.r, y: l.y - l.r, width: l.r * 2, height: l.r * 2, stroke: e.value.style.chart.circles.stroke, "stroke-width": e.value.style.chart.circles.strokeWidth * L.value / 100, fill: `url(#pattern_${s.value}_${l.id})`, rx: l.r, style: { pointerEvents: "none" } }, null, 8, Mt)) : k("", !0), t.$slots["data-label"] ? x(t.$slots, "data-label", Pe({ key: 2, ref_for: !0 }, { ...l, createTSpans: m(ut), fontSize: { name: l.r / 3 * e.value.style.chart.circles.labels.name.fontSizeRatio, value: Ce(l) * e.value.style.chart.circles.labels.value.fontSizeRatio }, color: e.value.style.chart.circles.labels.name.color ? e.value.style.chart.circles.labels.name.color : m(q)(l.color) }), void 0, !0) : (f(), b(Q, { key: 3 }, [ e.value.style.chart.circles.labels.name.show && l.name ? (f(), b("text", { key: 0, style: { pointerEvents: "none", transition: "opacity 0.2s ease-in-out" }, opacity: d.value && !S.value ? 0.2 : 1, x: l.x, y: l.y + we(l.r, e.value.style.chart.circles.labels.name.offsetY) - l.r / 10, "font-size": l.r / 3 * e.value.style.chart.circles.labels.name.fontSizeRatio, fill: e.value.style.chart.circles.labels.name.color ? e.value.style.chart.circles.labels.name.color : m(q)(l.color), "font-weight": e.value.style.chart.circles.labels.name.bold ? "bold" : "normal", "text-anchor": "middle" }, j(l.name), 9, Et)) : k("", !0), e.value.style.chart.circles.labels.value.show ? (f(), b("text", { key: 1, style: { pointerEvents: "none", transition: "opacity 0.2s ease-in-out" }, opacity: d.value && !S.value ? 0.2 : 1, x: l.x, y: l.y + we(l.r, e.value.style.chart.circles.labels.value.offsetY) + l.r / 2.5, "font-size": Ce(l) * e.value.style.chart.circles.labels.value.fontSizeRatio, fill: e.value.style.chart.circles.labels.value.color ? e.value.style.chart.circles.labels.value.color : m(q)(l.color), "font-weight": e.value.style.chart.circles.labels.value.bold ? "bold" : "normal", "text-anchor": "middle" }, j(se(l)), 9, Rt)) : k("", !0) ], 64)) ], 64))), 256)), d.value && e.value.style.chart.circles.zoom.show && !S.value ? (f(), b(Q, { key: 1 }, [ C("circle", { style: K(Ve.value), cx: d.value.x, cy: d.value.y, r: H.value, opacity: P.value, stroke: e.value.style.chart.circles.stroke, "stroke-width": e.value.style.chart.circles.strokeWidth * L.value / 100, fill: e.value.style.chart.circles.gradient.show ? `url(#${d.value.id})` : d.value.color }, null, 12, At), t.$slots["zoom-label"] ? (f(), b("g", Dt, [ x(t.$slots, "zoom-label", U(B({ ...d.value, zoomOpacity: P.value, currentRadius: H.value, fontSize: V.value })), void 0, !0) ])) : (f(), b("g", Lt, [ C("text", { style: { pointerEvents: "none" }, opacity: P.value, x: d.value.x, y: d.value.y + e.value.style.chart.circles.zoom.label.name.offsetY - V.value.name / 4, "text-anchor": "middle", "font-size": V.value.name, fill: e.value.style.chart.circles.zoom.label.name.color ? e.value.style.chart.circles.zoom.label.name.color : m(q)(d.value.color), "font-weight": e.value.style.chart.circles.zoom.label.name.bold ? "bold" : "normal" }, j(d.value.name), 9, Ht), C("text", { style: { pointerEvents: "none" }, opacity: P.value, x: d.value.x, y: d.value.y + V.value.value + e.value.style.chart.circles.zoom.label.value.offsetY, "text-anchor": "middle", "font-size": V.value.value, fill: e.value.style.chart.circles.zoom.label.value.color ? e.value.style.chart.circles.zoom.label.value.color : m(q)(d.value.color), "font-weight": e.value.style.chart.circles.zoom.label.value.bold ? "bold" : "normal" }, j(Ge()), 9, Vt) ])) ], 64)) : k("", !0), x(t.$slots, "svg", { svg: { ...T.value } }, void 0, !0) ], 14, $t)) : k("", !0), a.value ? k("", !0) : (f(), M(gt, { key: 5, config: { type: "circlePack", style: { color: "#CCCCCC" } } })), t.$slots.watermark ? (f(), b("div", Gt, [ x(t.$slots, "watermark", U(B({ isPrinting: m(ye) || m(me) })), void 0, !0) ])) : k("", !0), t.$slots.source ? (f(), b("div", { key: 7, ref_key: "source", ref: W, dir: "auto" }, [ x(t.$slots, "source", {}, void 0, !0) ], 512)) : k("", !0), a.value ? (f(), M(pt, { key: 8, hideDetails: "", config: { open: D.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: z(() => [ (f(), M(bt, { key: `table_${R.value}`, colNames: J.value.colNames, head: J.value.head, body: J.value.body, config: J.value.config, title: `${e.value.style.chart.title.text}${e.value.style.chart.title.subtitle.text ? ` : ${e.value.style.chart.title.subtitle.text}` : ""}`, onClose: n[1] || (n[1] = (l) => D.value.showTable = !1) }, { th: z(({ th: l }) => [ C("div", { innerHTML: l, style: { display: "flex", "align-items": "center" } }, null, 8, Ut) ]), td: z(({ td: l }) => [ Qe(j(l.name || l), 1) ]), _: 1 }, 8, ["colNames", "head", "body", "config", "title"])) ]), _: 1 }, 8, ["config"])) : k("", !0) ], 46, zt)); } }, sl = /* @__PURE__ */ Ct(Bt, [["__scopeId", "data-v-6e0719a8"]]); export { sl as default };