UNPKG

vue-data-ui

Version:

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

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