UNPKG

vue-data-ui

Version:

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

1,020 lines 60.5 kB
import { useCssVars as He, computed as m, ref as T, watch as We, onMounted as Ke, createElementBlock as o, openBlock as a, unref as n, normalizeStyle as h, normalizeClass as k, createBlock as K, createCommentVNode as f, renderSlot as S, createSlots as Je, withCtx as B, normalizeProps as J, guardReactiveProps as Q, createVNode as Ce, createElementVNode as s, toDisplayString as c, Fragment as g, renderList as _, createTextVNode as Z, withKeys as Qe, nextTick as Te } from "vue"; import { u as Ze, c as et, t as tt, p as P, a as lt, b as at, g as ne, e as ee, d as re, o as ot, X as st, s as F, w as ze, i as G, f as z, G as Ne, m as Se, j as ut, k as H, n as V, q as nt, r as rt } from "./index-BaaDnc4F.js"; import { u as it, U as ct } from "./usePrinter-y4-4tCWT.js"; import dt from "./vue-ui-skeleton-6RiQNJSb.js"; import vt from "./BaseIcon-rw8rKNKS.js"; import yt from "./vue-ui-accordion-CF9kQTXq.js"; import { u as Fe } from "./useNestedProp-D8vQcOps.js"; import { _ as ht } from "./PackageVersion-D9Lm1C1X.js"; import { P as ft } from "./PenAndPaper-DR58HO_U.js"; import { u as bt } from "./useUserOptionState-BIvW1Kz7.js"; import { u as pt } from "./useChartAccessibility-BWojgys7.js"; import { _ as gt } from "./_plugin-vue_export-helper-CHgC5LLL.js"; const _t = ["id"], xt = { key: 1, ref: "noTitle", class: "vue-data-ui-no-title-space", style: "height:36px; width: 100%;background:transparent" }, mt = ["xmlns", "viewBox"], kt = ["width", "height"], wt = { key: 1 }, $t = ["fill", "font-weight", "font-size", "x", "y"], Ct = ["fill", "font-weight", "font-size", "x", "y"], Tt = ["id"], zt = ["stop-color"], Nt = ["stop-color"], St = ["id"], Ft = ["stop-color"], It = ["stop-color"], Lt = ["id"], Pt = ["stop-color"], Vt = ["stop-color"], Rt = ["stop-color"], Ot = ["id"], Mt = ["stop-color"], Bt = ["stop-color"], jt = ["stop-color"], At = ["id"], Xt = ["stop-color"], Gt = ["stop-color"], Et = ["stop-color"], Ut = { key: 2 }, Dt = ["x", "y", "font-size", "font-weight", "fill"], Yt = ["x", "y", "font-size", "font-weight", "fill"], qt = ["d", "stroke"], Ht = ["cx", "cy", "r", "fill"], Wt = ["cx", "cy", "r", "fill", "stroke", "stroke-width", "onClick"], Kt = { key: 3 }, Jt = ["x", "y", "font-size", "fill", "onClick"], Qt = { key: 0 }, Zt = ["x", "y", "fill", "font-size", "font-weight"], el = ["x", "y", "height", "width", "fill", "rx", "onClick"], tl = ["x", "y", "height", "width", "fill", "rx", "stroke", "stroke-width", "onClick"], ll = { key: 4 }, al = ["x", "y", "fill", "font-size", "onClick"], ol = ["d", "stroke"], sl = ["fill", "cx", "cy", "r", "onClick"], ul = { key: 5 }, nl = ["x", "y", "font-size", "font-weight", "fill"], rl = ["x1", "x2", "y1", "y2", "stroke", "stroke-width"], il = ["y", "height", "width"], cl = { style: { width: "100%", height: "100%", display: "flex", "align-items": "center", "justify-content": "center", "flex-direction": "column" } }, dl = { style: { display: "flex", "align-items": "center", "justify-content": "center", gap: "12px", "flex-wrap": "wrap", "flex-direction": "row" } }, vl = { viewBox: "0 0 20 20", height: "16", width: "16" }, yl = ["fill"], hl = { key: 7 }, fl = ["y", "height", "width"], bl = { style: { width: "100%", height: "100%", display: "flex", "align-items": "center", "justify-content": "center", "flex-direction": "column" } }, pl = { style: { display: "flex", "align-items": "center", "justify-content": "center", gap: "12px", "flex-wrap": "wrap", "flex-direction": "row" } }, gl = { viewBox: "0 0 20 20", height: "16", width: "16" }, _l = ["fill"], xl = ["cx", "cy", "fill"], ml = ["d", "stroke"], kl = ["cx", "cy", "fill"], wl = ["d", "stroke"], $l = ["cx", "cy", "fill"], Cl = ["cx", "cy", "fill"], Tl = ["x", "y", "fill", "font-size", "font-weight"], zl = ["x", "y", "fill", "font-size", "font-weight"], Nl = ["x", "text-anchor", "y", "fill", "font-size"], Sl = ["x", "text-anchor", "y", "fill", "font-size"], Fl = ["x", "text-anchor", "y", "fill", "font-size"], Il = ["x", "text-anchor", "y", "fill", "font-size"], Ll = ["x", "text-anchor", "y", "fill", "font-size"], Pl = ["x", "y", "font-size", "fill"], Vl = ["x", "y", "font-size", "fill"], Rl = ["x", "y", "font-size", "fill"], Ol = { key: 4, class: "vue-data-ui-watermark" }, Ml = { key: 6, ref: "source", dir: "auto" }, Bl = { style: { "padding-top": "36px", position: "relative" } }, jl = { class: "vue-ui-data-table" }, Al = { key: 0 }, Xl = ["data-cell"], Gl = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, El = { key: 0 }, Ul = { key: 1 }, Dl = ["data-cell"], Yl = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, ql = { key: 0 }, Hl = { key: 1 }, Wl = ["data-cell"], Kl = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, Jl = { key: 0 }, Ql = { key: 1 }, Zl = ["data-cell"], ea = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, ta = { key: 0 }, la = { key: 1 }, aa = ["data-cell"], oa = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, sa = { key: 0 }, ua = { key: 1 }, na = ["data-cell"], ra = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, ia = { key: 0 }, ca = { key: 1 }, da = ["data-cell"], va = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, ya = { key: 0 }, ha = { key: 1 }, fa = ["data-cell"], ba = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, pa = ["data-cell"], ga = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, _a = ["data-cell"], xa = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, ma = ["data-cell"], ka = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, wa = ["data-cell"], $a = { style: { display: "flex", "align-items": "center", gap: "5px", "justify-content": "flex-end", width: "100%", "padding-right": "3px" } }, Ca = { __name: "vue-ui-chestnut", props: { config: { type: Object, default() { return {}; } }, dataset: { type: Array, default() { return []; } } }, emits: ["selectRoot", "selectBranch", "selectNut"], setup(Ie, { expose: Le, emit: Pe }) { He((l) => ({ "4c4794f5": l.tdo })); const { vue_ui_chestnut: Ve } = Ze(), R = Ie, Y = m(() => !!R.dataset && R.dataset.length), w = T(et()), ie = T(null), Re = T(null), ce = T(0), e = m({ get: () => he(), set: (l) => l }), { userOptionsVisible: te, setUserOptionsVisibility: de, keepUserOptionState: ve } = bt({ config: e.value }), { svgRef: ye } = pt({ config: e.value.style.chart.layout.title }); function he() { const l = Fe({ userConfig: R.config, defaultConfig: Ve }); return l.theme ? { ...Fe({ userConfig: lt.vue_ui_chestnut[l.theme] || R.config, defaultConfig: l }), customPalette: tt[l.theme] || P } : l; } We(() => R.config, (l) => { e.value = he(), te.value = !e.value.userOptions.showOnChartHover, E.value.showTable = e.value.table.show, ke(); }, { deep: !0 }); const { isPrinting: fe, isImaging: be, generatePdf: pe, generateImage: ge } = it({ elementId: `vue-ui-chestnut_${w.value}`, fileName: e.value.style.chart.layout.title.text || "vue-ui-chestnut" }), Oe = m(() => e.value.userOptions.show), le = m(() => at(e.value.customPalette)), E = T({ showTable: e.value.table.show }), ae = T(null), _e = T(!1), Me = m(() => e.value.table.responsiveBreakpoint), r = T({ gap: 6, padding: { top: 102, left: 12, right: 12, bottom: 96 }, width: 1024, height: 0, branchSize: 32, branchStart: 128 }), C = m(() => ({ left: r.value.padding.left, top: r.value.padding.top, right: r.value.width - r.value.padding.right, bottom: r.value.height - r.value.padding.bottom, width: r.value.width - (r.value.padding.left + r.value.padding.right), height: r.value.height - (r.value.padding.top + r.value.padding.bottom), seedX: r.value.padding.left + 64 })), O = m(() => Y.value ? R.dataset.flatMap((l) => (l.branches || []).map((i) => i.value || 0)).reduce((l, i) => l + i, 0) : 0), N = m(() => (R.dataset.forEach((l, i) => { ne({ datasetObject: l, requiredAttributes: ["name", "branches"] }).forEach((t) => { ee({ componentName: "VueUiChestnut", type: "datasetSerieAttribute", property: t, index: i }); }), l.branches && l.branches.forEach((t, u) => { ne({ datasetObject: t, requiredAttributes: ["name", "value"] }).forEach((b) => { ee({ componentName: "VueUiChestnut", type: "datasetSerieAttribute", property: b, index: `${i} - ${u}` }); }), t.breakdown && t.breakdown.forEach((b, y) => { ne({ datasetObject: b, requiredAttributes: ["name", "value"] }).forEach((p) => { ee({ componentName: "VueUiChestnut", type: "datasetSerieAttribute", property: p, index: `${i} - ${u} - ${y}` }); }); }); }); }), R.dataset.map((l, i) => { const t = (l.branches || []).map((u) => u.value || 0).reduce((u, b) => u + b, 0); return { ...l, color: re(l.color) || le.value[i] || P[i] || P[i % P.length], id: l.id || `root_${i}_${w.value}`, type: "root", total: t, rootIndex: i, branches: (l.branches || []).map((u, b) => ({ ...u, rootName: l.name, rootIndex: i, color: re(l.color) || le.value[i] || P[i] || P[i % P.length], value: u.value >= 0 ? u.value : 0, id: u.id || `branch_${i}_${b}_${w.value}`, proportionToRoot: u.value / t, type: "branch", breakdown: (u.breakdown || []).map((y, p) => ({ table: { rootName: l.name, rootValue: t, rootToTotal: t / O.value, branchName: u.name, branchValue: u.value, branchToTotal: u.value / O.value, branchToRoot: u.value / t, nutName: y.name, nutValue: y.value, nutToTotal: y.value / O.value, nutToRoot: y.value / t, nutToBranch: y.value / u.value }, ...y, type: "nut", branchName: u.name, rootName: l.name, branchTotal: u.value >= 0 ? u.value : 0, proportionToBranch: y.value / u.value, proportionToRoot: y.value / t, proportionToTree: y.value / O.value, rootIndex: i, id: y.id || `nut_${i}_${b}_${p}_${w.value}`, color: re(y.color) || le.value[p] || P[p] || P[p % P.length], value: y.value >= 0 ? y.value : 0 })) })) }; }))); function Be() { return N.value; } const U = Pe, je = m(() => N.value.flatMap((l) => l.branches).length), Ae = m(() => Math.max(...N.value.map((l) => l.branches.map((i) => i.value).reduce((i, t) => i + t, 0)))), Xe = m(() => Math.max(...N.value.flatMap((l) => l.branches.map((i) => i.value)))), xe = m(() => 256 + r.value.padding.left), j = m(() => N.value.sort((l, i) => i.total - l.total).map((l, i) => { const t = C.value.height / N.value.length / 2, u = l.total / Ae.value * (t > 64 ? 64 : t); return { ...l, x: C.value.seedX, y: C.value.top + C.value.height / N.value.length * (i + 1) - (C.value.height / N.value.length / 2 + r.value.gap / 2), r: u < r.value.branchSize / 2 ? r.value.branchSize / 2 : u }; })), Ge = m(() => e.value.style.chart.layout.branches.widthRatio <= 0 ? 0.1 : e.value.style.chart.layout.branches.widthRatio > 1.8 ? 1.8 : e.value.style.chart.layout.branches.widthRatio), Ee = m(() => j.value.flatMap((l) => l.branches)), A = m(() => Ee.value.sort((l, i) => i.value - l.value).map((l, i) => ({ ...l, y1: i * r.value.branchSize + C.value.top + i * r.value.gap, y2: i * r.value.branchSize + r.value.branchSize, x1: xe.value, x2: 384 * l.value / Xe.value * Ge.value + xe.value }))); function oe(l) { const i = j.value.find((t) => t.rootIndex === l.rootIndex); return { x: i.x, y: i.y, r: i.r }; } const d = T(null), M = T(null), x = T(null), I = T(null); function $() { d.value = null, x.value = null, I.value = null; } function L(l) { return I.value ? I.value === null ? !0 : l.type === "root" ? l.id === I.value.id : l.rootIndex === I.value.rootIndex : d.value === null && x.value === null ? !0 : l.type === "nut" ? d.value.id === l.id : l.type === "branch" ? x.value.id === l.id : l.type === "root" ? x.value && x.value.rootIndex === l.rootIndex || d.value && d.value.rootIndex === l.rootIndex : !1; } function Ue(l) { $(), Te(() => { d.value = l, x.value = l, M.value = Se( { series: l.breakdown, base: 1 }, l.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, l.y1 + r.value.branchSize / 2, 80, 80 ), U("selectNut", l.breakdown); }); } function X() { d.value = null, M.value = null, U("selectNut", null); } function se(l) { x.value && x.value.id === l.id ? (x.value = null, $(), U("selectBranch", null)) : ($(), x.value = l, U("selectBranch", l)); } function me(l) { I.value && I.value.id === l.id ? ($(), U("selectRoot", null)) : ($(), I.value = l, U("selectRoot", l)); } function De() { return C.value.bottom - (d.value.y1 + 180) < 0 ? 0 : C.value.bottom; } function D(l) { return l.proportion * 100 > e.value.style.chart.layout.nuts.selected.labels.dataLabels.hideUnderValue; } function Ye() { const l = new ResizeObserver((i) => { i.forEach((t) => { _e.value = t.contentRect.width < Me.value; }); }); ae.value && l.observe(ae.value); } Ke(() => { ke(); }); function ke() { ot(R.dataset) && ee({ componentName: "VueUiChestnut", type: "dataset" }); const l = je.value * (r.value.branchSize + r.value.gap) + r.value.padding.top + r.value.padding.bottom; r.value.height = l, Ye(); } const v = m(() => { const l = [ e.value.table.th.translations.rootName, e.value.table.th.translations.rootValue, e.value.table.th.translations.rootToTotal, e.value.table.th.translations.branchName, e.value.table.th.translations.branchValue, e.value.table.th.translations.branchToRoot, e.value.table.th.translations.branchToTotal, e.value.table.th.translations.nutName, e.value.table.th.translations.nutValue, e.value.table.th.translations.nutToBranch, e.value.table.th.translations.nutToRoot, e.value.table.th.translations.nutToTotal ], i = N.value.flatMap((t, u) => t.branches.flatMap((b, y) => b.breakdown.flatMap((p, Ta) => p.table))); return { head: l, body: i }; }); function we() { Te(() => { const l = [[e.value.style.chart.layout.title.text], [e.value.style.chart.layout.title.subtitle.text], [""], ["Grand total", O.value], [""]], i = v.value.head, t = v.value.body.map((y, p) => [ v.value.body[p - 1] && v.value.body[p - 1].rootName === y.rootName ? "" : y.rootName, v.value.body[p - 1] && v.value.body[p - 1].rootName === y.rootName ? "" : y.rootValue, v.value.body[p - 1] && v.value.body[p - 1].rootName === y.rootName ? "" : y.rootToTotal, v.value.body[p - 1] && v.value.body[p - 1].branchName === y.branchName ? "" : y.branchName, v.value.body[p - 1] && v.value.body[p - 1].branchName === y.branchName ? "" : y.branchValue, v.value.body[p - 1] && v.value.body[p - 1].branchName === y.branchName ? "" : y.branchToRoot, v.value.body[p - 1] && v.value.body[p - 1].branchName === y.branchName ? "" : y.branchToTotal, y.nutName, y.nutValue, y.nutToBranch, y.nutToRoot, y.nutToTotal ]), u = l.concat([i]).concat(t), b = nt(u); rt({ csvContent: b, title: e.value.style.chart.layout.title.text || "vue-ui-chestnut" }); }); } const q = T(!1); function qe(l) { q.value = l, ce.value += 1; } function $e() { E.value.showTable = !E.value.showTable; } const W = T(!1); function ue() { W.value = !W.value; } return Le({ getData: Be, generatePdf: pe, generateCsv: we, generateImage: ge, toggleTable: $e, toggleAnnotator: ue }), (l, i) => (a(), o("div", { class: k(`vue-ui-chestnut ${q.value ? "vue-data-ui-wrapper-fullscreen" : ""}`), ref_key: "chestnutChart", ref: ie, id: `vue-ui-chestnut_${w.value}`, style: h(`font-family:${e.value.style.fontFamily};width:100%; text-align:center;background:${e.value.style.chart.backgroundColor}`), onMouseenter: i[2] || (i[2] = () => n(de)(!0)), onMouseleave: i[3] || (i[3] = () => n(de)(!1)) }, [ e.value.userOptions.buttons.annotator ? (a(), K(ft, { key: 0, svgRef: n(ye), backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, active: W.value, onClose: ue }, null, 8, ["svgRef", "backgroundColor", "color", "active"])) : f("", !0), Oe.value ? (a(), o("div", xt, null, 512)) : f("", !0), e.value.userOptions.show && Y.value && (n(ve) || n(te)) ? (a(), K(ct, { ref_key: "details", ref: Re, key: `user_options_${ce.value}`, backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, isImaging: n(be), isPrinting: n(fe), uid: w.value, 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: q.value, titles: { ...e.value.userOptions.buttonTitles }, chartElement: ie.value, position: e.value.userOptions.position, hasAnnotator: e.value.userOptions.buttons.annotator, isAnnotation: W.value, onToggleFullscreen: qe, onGeneratePdf: n(pe), onGenerateCsv: we, onGenerateImage: n(ge), onToggleTable: $e, onToggleAnnotator: ue, style: h({ visibility: n(ve) ? n(te) ? "visible" : "hidden" : "visible" }) }, Je({ _: 2 }, [ l.$slots.menuIcon ? { name: "menuIcon", fn: B(({ isOpen: t, color: u }) => [ S(l.$slots, "menuIcon", J(Q({ isOpen: t, color: u })), void 0, !0) ]), key: "0" } : void 0, l.$slots.optionPdf ? { name: "optionPdf", fn: B(() => [ S(l.$slots, "optionPdf", {}, void 0, !0) ]), key: "1" } : void 0, l.$slots.optionCsv ? { name: "optionCsv", fn: B(() => [ S(l.$slots, "optionCsv", {}, void 0, !0) ]), key: "2" } : void 0, l.$slots.optionImg ? { name: "optionImg", fn: B(() => [ S(l.$slots, "optionImg", {}, void 0, !0) ]), key: "3" } : void 0, l.$slots.optionTable ? { name: "optionTable", fn: B(() => [ S(l.$slots, "optionTable", {}, void 0, !0) ]), key: "4" } : void 0, l.$slots.optionFullscreen ? { name: "optionFullscreen", fn: B(({ toggleFullscreen: t, isFullscreen: u }) => [ S(l.$slots, "optionFullscreen", J(Q({ toggleFullscreen: t, isFullscreen: u })), void 0, !0) ]), key: "5" } : void 0, l.$slots.optionAnnotator ? { name: "optionAnnotator", fn: B(({ toggleAnnotator: t, isAnnotator: u }) => [ S(l.$slots, "optionAnnotator", J(Q({ toggleAnnotator: t, isAnnotator: u })), void 0, !0) ]), key: "6" } : void 0 ]), 1032, ["backgroundColor", "color", "isImaging", "isPrinting", "uid", "hasPdf", "hasImg", "hasXls", "hasTable", "hasFullscreen", "isFullscreen", "titles", "chartElement", "position", "hasAnnotator", "isAnnotation", "onGeneratePdf", "onGenerateImage", "style"])) : f("", !0), r.value.height > 0 && Y.value ? (a(), o("svg", { key: 3, ref_key: "svgRef", ref: ye, xmlns: n(st), class: k({ "vue-data-ui-fullscreen--on": q.value, "vue-data-ui-fulscreen--off": !q.value }), viewBox: `0 0 ${r.value.width <= 0 ? 10 : r.value.width} ${r.value.height <= 0 ? 10 : r.value.height}`, style: h(`overflow:visible;background:transparent;color:${e.value.style.chart.color}`) }, [ Ce(ht), l.$slots["chart-background"] ? (a(), o("foreignObject", { key: 0, x: 0, y: 0, width: r.value.width <= 0 ? 10 : r.value.width, height: r.value.height <= 0 ? 10 : r.value.height, style: { pointerEvents: "none" } }, [ S(l.$slots, "chart-background", {}, void 0, !0) ], 8, kt)) : f("", !0), d.value ? f("", !0) : (a(), o("g", wt, [ e.value.style.chart.layout.title.text ? (a(), o("text", { key: 0, "text-anchor": "middle", fill: e.value.style.chart.layout.title.color, "font-weight": e.value.style.chart.layout.title.bold ? "bold" : "normal", "font-size": e.value.style.chart.layout.title.fontSize, x: r.value.width / 2, y: 12 + e.value.style.chart.layout.title.fontSize + e.value.style.chart.layout.title.offsetY, onClick: $ }, c(e.value.style.chart.layout.title.text), 9, $t)) : f("", !0), e.value.style.chart.layout.title.subtitle.text ? (a(), o("text", { key: 1, "text-anchor": "middle", fill: e.value.style.chart.layout.title.subtitle.color, "font-weight": e.value.style.chart.layout.title.subtitle.bold ? "bold" : "normal", "font-size": e.value.style.chart.layout.title.subtitle.fontSize, x: r.value.width / 2, y: 48 + e.value.style.chart.layout.title.subtitle.fontSize + e.value.style.chart.layout.title.subtitle.offsetY, onClick: $ }, c(e.value.style.chart.layout.title.subtitle.text), 9, Ct)) : f("", !0) ])), s("defs", null, [ (a(!0), o(g, null, _(N.value, (t, u) => (a(), o("radialGradient", { cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", id: `root_gradient_${w.value}_${t.rootIndex}` }, [ s("stop", { offset: "0%", "stop-color": n(F)(n(ze)(t.color, 0.05), 100 - e.value.style.chart.layout.roots.gradientIntensity) }, null, 8, zt), s("stop", { offset: "100%", "stop-color": t.color }, null, 8, Nt) ], 8, Tt))), 256)), (a(!0), o(g, null, _(N.value, (t) => (a(), o("linearGradient", { x1: "0%", y1: "0%", x2: "100%", y2: "0%", id: `branch_gradient_${w.value}_${t.rootIndex}` }, [ s("stop", { offset: "0%", "stop-color": t.color }, null, 8, Ft), s("stop", { offset: "100%", "stop-color": n(F)(n(ze)(t.color, 0.02), 100 - e.value.style.chart.layout.branches.gradientIntensity) }, null, 8, It) ], 8, St))), 256)), s("radialGradient", { cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", id: `nutpick_${w.value}` }, [ s("stop", { offset: "0%", "stop-color": n(F)("#FFFFFF", 0) }, null, 8, Pt), s("stop", { offset: "80%", "stop-color": n(F)("#FFFFFF", e.value.style.chart.layout.nuts.selected.gradientIntensity) }, null, 8, Vt), s("stop", { offset: "100%", "stop-color": n(F)("#FFFFFF", 0) }, null, 8, Rt) ], 8, Lt), s("radialGradient", { cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", id: `nut_${w.value}` }, [ s("stop", { offset: "0%", "stop-color": n(F)("#FFFFFF", 0) }, null, 8, Mt), s("stop", { offset: "80%", "stop-color": n(F)("#FFFFFF", e.value.style.chart.layout.nuts.gradientIntensity) }, null, 8, Bt), s("stop", { offset: "100%", "stop-color": n(F)("#FFFFFF", 0) }, null, 8, jt) ], 8, Ot), s("radialGradient", { cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", id: `nut_underlayer_${w.value}` }, [ s("stop", { offset: "0%", "stop-color": n(F)(e.value.style.chart.backgroundColor, 100) }, null, 8, Xt), s("stop", { offset: "80%", "stop-color": n(F)(e.value.style.chart.backgroundColor, 60) }, null, 8, Gt), s("stop", { offset: "100%", "stop-color": n(F)(e.value.style.chart.backgroundColor, 0) }, null, 8, Et) ], 8, At) ]), e.value.style.chart.layout.grandTotal.show ? (a(), o("g", Ut, [ s("text", { x: C.value.seedX, y: 32 + e.value.style.chart.layout.grandTotal.offsetY, "font-size": e.value.style.chart.layout.grandTotal.fontSize, "font-weight": e.value.style.chart.layout.grandTotal.bold ? "bold" : "normal", fill: e.value.style.chart.layout.grandTotal.color, "text-anchor": "middle", onClick: $ }, c(e.value.style.chart.layout.grandTotal.text), 9, Dt), s("text", { x: C.value.seedX, y: 38 + e.value.style.chart.layout.grandTotal.fontSize + e.value.style.chart.layout.grandTotal.offsetY, "font-size": e.value.style.chart.layout.grandTotal.fontSize, "font-weight": e.value.style.chart.layout.grandTotal.bold ? "bold" : "normal", fill: e.value.style.chart.layout.grandTotal.color, "text-anchor": "middle", onClick: $ }, c(n(G)( e.value.style.chart.layout.grandTotal.formatter, O.value, n(z)({ p: e.value.style.chart.layout.grandTotal.prefix, v: O.value, s: e.value.style.chart.layout.grandTotal.suffix, r: e.value.style.chart.layout.grandTotal.roundingValue }) )), 9, Yt) ])) : f("", !0), (a(!0), o(g, null, _(A.value, (t) => (a(), o("g", null, [ (a(!0), o(g, null, _(r.value.branchSize, (u, b) => (a(), o("path", { d: `M ${t.x1},${t.y1 + b} C${t.x1 - 20},${t.y1 + b} ${t.x1 - 80},${t.y1 + b} ${oe(t).x + oe(t).r / 2}, ${oe(t).y} `, stroke: n(F)(t.color, e.value.style.chart.layout.links.opacity), fill: "none", "stroke-width": "2", "shape-rendering": "cirspEdges", style: h(`opacity:${L(t) ? 1 : 0}`), onClick: $ }, null, 12, qt))), 256)) ]))), 256)), (a(!0), o(g, null, _(j.value, (t) => (a(), o("circle", { cx: t.x, cy: t.y, r: t.r, fill: e.value.style.chart.layout.roots.underlayerColor, stroke: "none", style: h(`cursor:pointer; opacity:${L(t) ? 1 : 0.05}`) }, null, 12, Ht))), 256)), (a(!0), o(g, null, _(j.value, (t, u) => (a(), o("circle", { cx: t.x, cy: t.y, r: t.r, fill: e.value.style.chart.layout.roots.useGradient ? `url(#root_gradient_${w.value}_${t.rootIndex})` : t.color, stroke: e.value.style.chart.layout.roots.stroke, "stroke-width": e.value.style.chart.layout.roots.strokeWidth, style: h(`cursor:pointer; opacity:${L(t) ? 1 : 0.05}`), onClick: (b) => me(t) }, null, 12, Wt))), 256)), e.value.style.chart.layout.roots.labels.show ? (a(), o("g", Kt, [ (a(!0), o(g, null, _(j.value, (t, u) => (a(), o("text", { x: t.x, y: t.y + e.value.style.chart.layout.roots.labels.fontSize / 2.6, "text-anchor": "middle", "font-size": e.value.style.chart.layout.roots.labels.fontSize, fill: e.value.style.chart.layout.roots.labels.adaptColorToBackground ? n(Ne)(t.color) : e.value.style.chart.layout.roots.labels.color, "font-weight": "bold", style: h(`cursor:pointer; opacity:${L(t) ? 1 : 0.05}`), onClick: (b) => me(t) }, c(n(G)( e.value.style.chart.layout.roots.labels.formatter, t.total, n(z)({ p: e.value.style.chart.layout.roots.labels.prefix, v: t.total, s: e.value.style.chart.layout.roots.labels.suffix, r: e.value.style.chart.layout.roots.labels.roundingValue }), { datapoint: t } )), 13, Jt))), 256)), (a(!0), o(g, null, _(j.value, (t) => (a(), o("g", null, [ d.value && t.rootIndex === d.value.rootIndex || x.value && t.rootIndex === x.value.rootIndex || I.value && t.rootIndex === I.value.rootIndex ? (a(), o("g", Qt, [ s("text", { x: t.x, y: t.y + t.r + 24, "text-anchor": "middle", fill: e.value.style.chart.layout.roots.labels.name.color, "font-size": e.value.style.chart.layout.roots.labels.name.fontSize, "font-weight": e.value.style.chart.layout.roots.labels.name.bold ? "bold" : "normal", onClick: $ }, c(t.name), 9, Zt) ])) : f("", !0) ]))), 256)) ])) : f("", !0), (a(!0), o(g, null, _(A.value, (t) => (a(), o("rect", { x: t.x1, y: t.y1, height: r.value.branchSize, width: t.x2 - t.x1, fill: e.value.style.chart.layout.branches.underlayerColor, rx: e.value.style.chart.layout.branches.borderRadius, stroke: "none", style: h(`opacity:${L(t) ? 1 : 0.05}`), onClick: (u) => se(t) }, null, 12, el))), 256)), (a(!0), o(g, null, _(A.value, (t, u) => (a(), o("rect", { x: t.x1, y: t.y1, height: r.value.branchSize, width: t.x2 - t.x1, fill: e.value.style.chart.layout.branches.useGradient ? `url(#branch_gradient_${w.value}_${t.rootIndex})` : t.color, rx: e.value.style.chart.layout.branches.borderRadius, stroke: e.value.style.chart.layout.branches.stroke, "stroke-width": e.value.style.chart.layout.branches.strokeWidth, style: h(`cursor:pointer; opacity:${L(t) ? 1 : 0.05}`), onClick: (b) => se(t) }, null, 12, tl))), 256)), e.value.style.chart.layout.branches.labels.dataLabels.show ? (a(), o("g", ll, [ (a(!0), o(g, null, _(A.value, (t) => (a(), o("g", null, [ t.proportionToRoot * 100 > e.value.style.chart.layout.branches.labels.dataLabels.hideUnderValue ? (a(), o("text", { key: 0, x: t.x1 + 6, y: t.y1 + r.value.branchSize / 1.5, "text-anchor": "start", fill: n(Ne)(t.color), "font-size": e.value.style.chart.layout.branches.labels.dataLabels.fontSize, "font-weight": "bold", style: h(`cursor:pointer; opacity:${L(t) ? 1 : 0.05}`), onClick: (u) => se(t) }, c(n(G)( e.value.style.chart.layout.branches.labels.dataLabels.formatter, t.value, n(z)({ p: e.value.style.chart.layout.branches.labels.dataLabels.prefix, v: t.value, s: e.value.style.chart.layout.branches.labels.dataLabels.suffix, r: e.value.style.chart.layout.branches.labels.dataLabels.roundingValue }), { datapoint: t } )), 13, al)) : f("", !0) ]))), 256)) ])) : f("", !0), (a(!0), o(g, null, _(A.value, (t, u) => (a(), o("g", null, [ (a(!0), o(g, null, _(n(Se)( { series: t.breakdown, base: 1 }, t.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, t.y1 + r.value.branchSize / 2, r.value.branchSize / 3, r.value.branchSize / 3 ), (b, y) => (a(), o("path", { d: b.path, stroke: b.color, "stroke-width": 10, fill: "none", style: h(`opacity:${L(t) ? 1 : 0.1}`) }, null, 12, ol))), 256)), s("circle", { fill: e.value.style.chart.layout.nuts.useGradient ? `url(#nut_${w.value})` : "transparent", cx: t.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, cy: t.y1 + r.value.branchSize / 2, r: r.value.branchSize / 2 + 2, onClick: (b) => Ue(t), style: h(`cursor:pointer;opacity:${L(t) ? 1 : 0.1}`) }, null, 12, sl) ]))), 256)), e.value.style.chart.layout.branches.labels.show && !x.value ? (a(), o("g", ul, [ (a(!0), o(g, null, _(A.value, (t) => (a(), o("text", { x: t.x2 + r.value.branchSize + 24 + e.value.style.chart.layout.nuts.offsetX, y: t.y1 + r.value.branchSize / 2 + 5, "font-size": e.value.style.chart.layout.branches.labels.fontSize, "font-weight": e.value.style.chart.layout.branches.labels.bold ? "bold" : "normal", fill: e.value.style.chart.layout.branches.labels.color, "text-anchor": "start", style: h(`opacity:${L(t) ? 1 : 0.1}`) }, c(t.name), 13, nl))), 256)) ])) : f("", !0), s("line", { x1: 256 + r.value.padding.left, x2: 256 + r.value.padding.left, y1: C.value.top, y2: C.value.bottom, stroke: e.value.style.chart.layout.verticalSeparator.stroke, "stroke-width": e.value.style.chart.layout.verticalSeparator.strokeWidth }, null, 8, rl), !d.value && !x.value ? (a(), o("foreignObject", { key: 6, x: 0, y: C.value.bottom, height: r.value.height - C.value.bottom, width: r.value.width, style: { overflow: "visible" }, onClick: $ }, [ s("div", cl, [ s("div", dl, [ (a(!0), o(g, null, _(j.value, (t) => (a(), o("div", { style: h(`display:flex;align-items:center;gap:3px;flex-direction:row;font-size:${e.value.style.chart.layout.legend.fontSize}px;`) }, [ (a(), o("svg", vl, [ s("circle", { cx: "10", cy: "10", r: "10", fill: t.color, stroke: "none" }, null, 8, yl) ])), s("span", null, c(t.name) + ":", 1), s("b", null, c(n(G)( e.value.style.chart.layout.roots.labels.formatter, t.total, n(z)({ p: e.value.style.chart.layout.legend.prefix, v: t.total, s: e.value.style.chart.layout.legend.suffix, r: e.value.style.chart.layout.legend.roundingValue }), { datapoint: t } )), 1), Z(" (" + c(n(z)({ v: t.total / O.value * 100, s: "%", r: e.value.style.chart.layout.legend.roundingPercentage })) + ") ", 1) ], 4))), 256)) ]) ]) ], 8, il)) : f("", !0), d.value && M.value ? (a(), o("g", hl, [ (a(), o("foreignObject", { x: 0, y: De(), height: r.value.height - C.value.bottom, width: r.value.width, style: { overflow: "visible" }, onClick: $ }, [ s("div", bl, [ s("b", null, c(d.value.name), 1), s("div", pl, [ (a(!0), o(g, null, _(d.value.breakdown, (t, u) => (a(), o("div", { style: h(`display:flex;align-items:center;gap:6px;flex-direction:row;font-size:${e.value.style.chart.layout.legend.fontSize}px;`) }, [ (a(), o("svg", gl, [ s("circle", { cx: "10", cy: "10", r: "10", fill: t.color, stroke: "none" }, null, 8, _l) ])), s("span", null, [ Z(c(t.name) + ": ", 1), s("b", null, c(e.value.style.chart.layout.legend.prefix) + " " + c(t.value.toFixed(e.value.style.chart.layout.nuts.selected.labels.roundingValue)) + " " + c(e.value.style.chart.layout.legend.suffix), 1), Z(" (" + c((t.proportionToBranch * 100).toFixed(e.value.style.chart.layout.nuts.selected.labels.roundingPercentage)) + "%)", 1) ]) ], 4))), 256)) ]) ]) ], 8, fl)), s("circle", { cx: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, cy: d.value.y1 + r.value.branchSize / 2, r: 256, fill: `url(#nut_underlayer_${w.value})`, onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, null, 10, xl), (a(!0), o(g, null, _(M.value, (t) => (a(), o("g", null, [ D(t) ? (a(), o("path", { key: 0, d: n(ut)( t, { x: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, y: d.value.y1 + r.value.branchSize / 2 }, 16, 16, !1, !1, 64 ), stroke: t.color, "stroke-width": "1", "stroke-linecap": "round", "stroke-linejoin": "round", fill: "none", class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, null, 10, ml)) : f("", !0) ]))), 256)), s("circle", { cx: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, cy: d.value.y1 + r.value.branchSize / 2, r: 118, fill: e.value.style.chart.backgroundColor, onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, null, 10, kl), (a(!0), o(g, null, _(M.value, (t) => (a(), o("path", { d: t.path, stroke: t.color, "stroke-width": 64, fill: "none", onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, null, 10, wl))), 256)), s("circle", { cx: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, cy: d.value.y1 + r.value.branchSize / 2, r: 100, fill: `url(#nutpick_${w.value})`, onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, null, 10, $l), s("circle", { cx: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, cy: d.value.y1 + r.value.branchSize / 2, r: 48, fill: e.value.style.chart.backgroundColor, onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, null, 10, Cl), s("text", { x: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, y: d.value.y1 + 8, fill: e.value.style.chart.layout.nuts.selected.labels.core.total.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.core.total.fontSize, "font-weight": e.value.style.chart.layout.nuts.selected.labels.core.total.bold ? "bold" : "normal", "text-anchor": "middle", onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, c(e.value.translations.total), 11, Tl), s("text", { x: d.value.x2 + 24 + e.value.style.chart.layout.nuts.offsetX, y: d.value.y1 + 36, fill: e.value.style.chart.layout.nuts.selected.labels.core.value.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.core.value.fontSize, "font-weight": e.value.style.chart.layout.nuts.selected.labels.core.value.bold ? "bold" : "normal", "text-anchor": "middle", onClick: X, class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, c(n(G)( e.value.style.chart.layout.nuts.selected.labels.dataLabels.formatter, d.value.value, n(z)({ p: e.value.style.chart.layout.nuts.selected.labels.core.value.prefix, v: d.value.value, s: e.value.style.chart.layout.nuts.selected.labels.core.value.suffix, r: e.value.style.chart.layout.nuts.selected.roundingValue }), { datapoint: d.value } )), 11, zl), (a(!0), o(g, null, _(M.value, (t, u) => (a(), o("g", null, [ D(t) ? (a(), o("text", { key: 0, x: n(V)(t).x, "text-anchor": n(V)(t).anchor, y: n(H)(t), fill: t.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize, style: h(`font-weight:${e.value.style.chart.layout.nuts.selected.labels.dataLabels.bold ? "bold" : ""}`), class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, " ⬤ ", 14, Nl)) : f("", !0), D(t) ? (a(), o("text", { key: 1, x: n(V)(t, !0).x, "text-anchor": n(V)(t, !0).anchor, y: n(H)(t), fill: e.value.style.chart.layout.nuts.selected.labels.dataLabels.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize, style: h(`font-weight:${e.value.style.chart.layout.nuts.selected.labels.dataLabels.bold ? "bold" : ""}`), class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, c(d.value.breakdown[u].name), 15, Sl)) : f("", !0) ]))), 256)), (a(!0), o(g, null, _(M.value, (t, u) => (a(), o("g", null, [ D(t) ? (a(), o("text", { key: 0, x: n(V)(t, !0).x, "text-anchor": n(V)(t).anchor, y: n(H)(t) + e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize, fill: e.value.style.chart.layout.nuts.selected.labels.dataLabels.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize, style: h(`font-weight:${e.value.style.chart.layout.nuts.selected.labels.dataLabels.bold ? "bold" : ""}`), class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, c(n(z)({ v: d.value.breakdown[u].value / d.value.value * 100, s: "%", r: e.value.style.chart.layout.nuts.selected.labels.roundingPercentage })) + " " + c(e.value.translations.of) + " " + c(d.value.breakdown[u].branchName) + " " + c(n(G)( e.value.style.chart.layout.nuts.selected.labels.dataLabels.formatter, d.value.breakdown[u].value, n(z)({ p: e.value.style.chart.layout.nuts.selected.labels.dataLabels.prefix, v: d.value.breakdown[u].value, s: e.value.style.chart.layout.nuts.selected.labels.dataLabels.suffix, r: e.value.style.chart.layout.nuts.selected.roundingValue }), { datapoint: M.value, seriesIndex: u } )), 15, Fl)) : f("", !0), D(t) ? (a(), o("text", { key: 1, x: n(V)(t, !0).x, "text-anchor": n(V)(t).anchor, y: n(H)(t) + e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize * 2, fill: e.value.style.chart.layout.nuts.selected.labels.dataLabels.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize, style: h(`font-weight:${e.value.style.chart.layout.nuts.selected.labels.dataLabels.bold ? "bold" : ""}`), class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, c(n(z)({ v: d.value.breakdown[u].proportionToRoot * 100, s: "%", r: e.value.style.chart.layout.nuts.selected.labels.roundingPercentage })) + " " + c(e.value.translations.of) + " " + c(d.value.breakdown[u].rootName), 15, Il)) : f("", !0), D(t) ? (a(), o("text", { key: 2, x: n(V)(t, !0).x, "text-anchor": n(V)(t).anchor, y: n(H)(t) + e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize * 3, fill: e.value.style.chart.layout.nuts.selected.labels.dataLabels.color, "font-size": e.value.style.chart.layout.nuts.selected.labels.dataLabels.fontSize, style: h(`font-weight:${e.value.style.chart.layout.nuts.selected.labels.dataLabels.bold ? "bold" : ""}`), class: k(e.value.style.chart.layout.nuts.selected.useMotion ? "vue-ui-chestnut-animated" : "") }, c(n(z)({ v: d.value.breakdown[u].proportionToTree * 100, s: "%", r: e.value.style.chart.layout.nuts.selected.labels.roundingPercentage })) + " " + c(e.value.translations.proportionToTree), 15, Ll)) : f("", !0) ]))), 256)) ])) : f("", !0), (a(!0), o(g, null, _(A.value, (t) => (a(), o("g", null, [ x.value && x.value.id === t.id && !d.value ? (a(), o("text", { key: 0, x: t.x1 + 6, y: t.y1 + r.value.branchSize + 24, "font-weight": "bold", "text-anchor": "start", "font-size": e.value.style.chart.layout.branches.labels.dataLabels.fontSize, fill: e.value.style.chart.layout.branches.labels.color, onClick: $ }, c(t.name) + ": " + c(n(G)( e.value.style.chart.layout.branches.labels.dataLabels.formatter, t.value, n(z)({ p: e.value.style.chart.layout.branches.labels.dataLabels.prefix, v: t.value, s: e.value.style.chart.layout.branches.labels.dataLabels.suffix, r: e.value.style.chart.layout.branches.labels.dataLabels.roundingValue }), { datapoint: t } )), 9, Pl)) : f("", !0), x.value && x.value.id === t.id && !d.value ? (a(), o("text", { key: 1, x: t.x1 + 6, y: t.y1 + r.value.branchSize + 48, "text-anchor": "start", "font-size": e.value.style.chart.layout.branches.labels.dataLabels.fontSize, fill: e.value.style.chart.layout.branches.labels.color, onClick: $ }, c(n(z)({ v: t.proportionToRoot * 100, s: "%", r: e.value.style.chart.layout.branches.labels.dataLabels.roundingPercentage })) + " " +