import { computed as k, ref as v, watch as Ze, onMounted as je, nextTick as et, onBeforeUnmount as Tt, createElementBlock as r, openBlock as n, unref as i, normalizeStyle as se, normalizeClass as R, createBlock as U, createCommentVNode as g, createVNode as tt, createSlots as Ft, withCtx as _, renderSlot as L, normalizeProps as E, guardReactiveProps as G, createElementVNode as m, Fragment as T, renderList as S, toDisplayString as V, withDirectives as lt, vShow as at, createTextVNode as ue } from "vue";
import { u as Ot, c as St, t as It, p as _e, a as At, H as D, o as Nt, e as Y, b as Vt, d as Pt, m as ot, f as F, X as Dt, s as st, J as zt, k as Le, n as X, i as J, x as ut, q as Mt, r as Rt, y as Ut, R as nt } from "./index-lwwgkcGL.js";
import { t as Bt, u as Et } from "./useResponsive-JZ9xq-JV.js";
import { _ as Gt } from "./Title-C9AEelQ1.js";
import { u as Yt, U as Xt } from "./usePrinter-BCTMiyK9.js";
import { D as Ht } from "./DataTable-C0D_esqj.js";
import { _ as Wt } from "./Tooltip-5snNLRyR.js";
import { L as qt } from "./Legend-0b4003Zt.js";
import Jt from "./vue-ui-skeleton-BufuSja5.js";
import Kt from "./vue-ui-accordion-CJnR6fHi.js";
import { u as rt } from "./useNestedProp-TXT2IHSL.js";
import { _ as Qt } from "./PackageVersion-C-ytTlJe.js";
import { _ as Zt } from "./PenAndPaper-__UJ-k8q.js";
import { u as jt } from "./useUserOptionState-BIvW1Kz7.js";
import { u as el } from "./useChartAccessibility-BWojgys7.js";
import { _ as tl } from "./_plugin-vue_export-helper-CHgC5LLL.js";
const ll = ["id"], al = ["xmlns", "viewBox"], ol = ["width", "height"], sl = ["id"], ul = ["offset", "stop-color"], nl = ["offset", "stop-opacity"], rl = ["id"], il = ["id"], dl = ["id"], cl = ["flood-color"], vl = ["d", "fill", "stroke", "stroke-width", "filter"], fl = { key: 1 }, hl = ["d", "fill"], pl = { key: 2 }, yl = ["x", "y", "font-size", "font-weight", "fill"], bl = { key: 3 }, gl = ["filter"], ml = ["opacity", "text-anchor", "x", "y", "fill", "font-size", "font-weight"], $l = ["opacity", "text-anchor", "x", "y", "fill", "font-size", "font-weight"], wl = ["text-anchor", "x", "y", "fill", "font-size", "font-weight"], kl = ["d", "fill", "onMouseenter", "onClick"], _l = {
  key: 5,
  class: "vue-data-ui-watermark"
}, Ll = {
  key: 0,
  class: "vue-ui-nested-donuts-legend-title"
}, xl = ["onClick"], Cl = ["innerHTML"], Tl = {
  __name: "vue-ui-nested-donuts",
  props: {
    config: {
      type: Object,
      default() {
        return {};
      }
    },
    dataset: {
      type: Array,
      default() {
        return [];
      }
    }
  },
  emits: ["selectLegend", "selectDatapoint"],
  setup(it, { expose: dt, emit: ct }) {
    const { vue_ui_nested_donuts: vt } = Ot(), x = it, K = k(() => !!x.dataset && x.dataset.length), y = v(St()), ne = v(!1), re = v(""), ft = v(null), xe = v(0), H = v(null), Ce = v(null), ie = v(null), Te = v(null), Fe = v(null), Oe = v(0), Se = v(0), Ie = v(0), z = v(!0), M = v([]), W = v([]), B = v(!1);
    function ht(l) {
      B.value = l, xe.value += 1;
    }
    const e = k({
      get: () => Pe(),
      set: (l) => l
    }), { userOptionsVisible: de, setUserOptionsVisibility: Ae, keepUserOptionState: Ne } = jt({ config: e.value }), { svgRef: Ve } = el({
      config: e.value.style.chart.title
    });
    function Pe() {
      const l = rt({
        userConfig: x.config,
        defaultConfig: vt
      });
      return l.theme ? {
        ...rt({
          userConfig: At.vue_ui_nested_donuts[l.theme] || x.config,
          defaultConfig: l
        }),
        customPalette: It[l.theme] || _e
      } : l;
    }
    Ze(
      () => x.config,
      (l) => {
        e.value = Pe(), de.value = !e.value.userOptions.showOnChartHover, ce(), Oe.value += 1, Se.value += 1, Ie.value += 1, w.value.dataLabels.show = e.value.style.chart.layout.labels.dataLabels.show, w.value.showTable = e.value.table.show, w.value.showTooltip = e.value.style.chart.tooltip.show;
      },
      { deep: !0 }
    );
    const De = k(() => {
      const { top: l, right: s, bottom: a, left: o } = e.value.style.chart.padding;
      return {
        css: `padding:${l}px ${s}px ${a}px ${o}px`,
        top: l,
        right: s,
        bottom: a,
        left: o
      };
    });
    function pt(l, s = 1e3, a = 50) {
      return new Promise((o) => {
        const t = l.length;
        M.value = Array(t).fill(0), W.value = [];
        let u = 0;
        l.forEach((c, p) => {
          setTimeout(() => {
            const N = performance.now();
            function C(d) {
              const f = Math.min((d - N) / s, 1), O = nt(f), ge = c * O;
              M.value[p] = ge, M.value = [...M.value];
              const ae = [];
              let q = 0;
              x.dataset.forEach((oe, me) => {
                const _t = oe.series.reduce(
                  (we, ke) => we + D(ke.values).reduce((xt, Ct) => xt + Ct, 0),
                  0
                ), Lt = M.value.slice(q, q + oe.series.length).reduce((we, ke) => we + ke, 0), $e = _t - Lt;
                $e > 1e-3 && ae.push({
                  name: "__ghost__",
                  arcOf: oe.name,
                  arcOfId: `${y.value}_${me}`,
                  id: `ghost_${y.value}_${me}`,
                  seriesIndex: -1,
                  datasetIndex: me,
                  color: "transparent",
                  value: $e,
                  fullValue: $e,
                  absoluteValues: [],
                  ghost: !0
                }), q += oe.series.length;
              }), W.value = ae, f < 1 ? requestAnimationFrame(C) : (u += 1, u === t && o());
            }
            requestAnimationFrame(C);
          }, p * a);
        });
      });
    }
    je(async () => {
      var l;
      if (ce(), (l = e.value.startAnimation) != null && l.show) {
        const a = x.dataset.flatMap((o) => o.series).map(
          (o) => D(o.values).reduce((t, u) => t + u, 0)
        );
        M.value = a.map(() => 0), z.value = !0, W.value = x.dataset.map((o, t) => {
          const u = o.series.reduce(
            (c, p) => c + D(p.values).reduce((N, C) => N + C, 0),
            0
          );
          return {
            name: "__ghost__",
            arcOf: o.name,
            arcOfId: `${y.value}_${t}`,
            id: `ghost_${y.value}_${t}`,
            seriesIndex: -1,
            datasetIndex: t,
            color: "transparent",
            value: u,
            fullValue: u,
            absoluteValues: [],
            ghost: !0
          };
        }), await et(), pt(
          a,
          e.value.startAnimation.durationMs,
          e.value.startAnimation.staggerMs
        ).then(() => {
          z.value = !1, W.value = [];
        });
      } else
        z.value = !1;
    });
    const Q = v(null);
    je(() => {
      ce();
    });
    function ce() {
      if (Nt(x.dataset) && Y({
        componentName: "VueUiNestedDonuts",
        type: "dataset"
      }), e.value.responsive) {
        const l = Bt(() => {
          const { width: s, height: a } = Et({
            chart: H.value,
            title: e.value.style.chart.title.text ? Ce.value : null,
            legend: e.value.style.chart.legend.show ? ie.value : null,
            source: Te.value,
            noTitle: Fe.value,
            padding: De.value
          });
          requestAnimationFrame(() => {
            h.value.width = s, h.value.height = a;
          });
        });
        Q.value = new ResizeObserver(l), Q.value.observe(H.value.parentNode);
      }
    }
    Tt(() => {
      Q.value && Q.value.disconnect();
    });
    const { isPrinting: ze, isImaging: Me, generatePdf: Re, generateImage: Ue } = Yt({
      elementId: `nested_donuts_${y.value}`,
      fileName: e.value.style.chart.title.text || "vue-ui-nested-donuts",
      options: e.value.userOptions.print
    }), yt = k(() => e.value.userOptions.show && !e.value.style.chart.title.text), bt = k(() => Vt(e.value.customPalette)), w = v({
      dataLabels: {
        show: e.value.style.chart.layout.labels.dataLabels.show
      },
      showTable: e.value.table.show,
      showTooltip: e.value.style.chart.tooltip.show
    }), h = v({
      height: 512,
      width: 512
    }), Be = ct;
    function gt({ datapoint: l, index: s }) {
      Be("selectDatapoint", { datapoint: l, index: s });
    }
    function Ee({
      from: l,
      to: s,
      duration: a,
      onUpdate: o,
      onDone: t,
      easing: u = nt
    }) {
      const c = performance.now();
      function p(N) {
        const C = Math.min((N - c) / a, 1), d = u(C), f = l + (s - l) * d;
        o(f, C), C < 1 ? requestAnimationFrame(p) : (o(s, 1), t && t());
      }
      requestAnimationFrame(p);
    }
    const $ = v([]), I = k(() => {
      x.dataset.forEach((s, a) => {
        [null, void 0].includes(s.name) && Y({
          componentName: "VueUiNestedDonuts",
          type: "datasetSerieAttribute",
          property: "name",
          index: a
        }), [null, void 0].includes(s.series) ? Y({
          componentName: "VueUiNestedDonuts",
          type: "datasetSerieAttribute",
          property: "series",
          index: a
        }) : s.series.length === 0 ? Y({
          componentName: "VueUiNestedDonuts",
          type: "datasetAttributeEmpty",
          property: `series at index ${a}`
        }) : s.series.forEach((o, t) => {
          [null, void 0].includes(o.name) && Y({
            componentName: "VueUiNestedDonuts",
            type: "datasetSerieAttribute",
            property: "name",
            index: t,
            key: "serie"
          }), [null, void 0].includes(o.values) && Y({
            componentName: "VueUiNestedDonuts",
            type: "datasetSerieAttribute",
            property: "values",
            index: t,
            key: "serie"
          });
        });
      });
      let l = 0;
      return x.dataset.map((s, a) => ({
        ...s,
        total: s.series.filter((o) => !$.value.includes(o.id)).map((o) => D(o.values).reduce((t, u) => t + u, 0)).reduce((o, t) => o + t, 0),
        datasetIndex: a,
        id: `${y.value}_${a}`,
        series: s.series.map((o, t) => {
          const u = D(o.values).reduce((c, p) => c + p, 0);
          return {
            name: o.name,
            arcOf: s.name,
            arcOfId: `${y.value}_${a}`,
            id: `${y.value}_${a}_${t}`,
            seriesIndex: t,
            datasetIndex: a,
            color: Pt(o.color) || bt.value[t] || _e[t % _e.length],
            value: z.value ? M.value[l++] ?? 0 : u,
            absoluteValues: o.values || []
          };
        })
      }));
    }), A = k(() => Math.min(h.value.height, h.value.width) * (e.value.style.chart.layout.donut.strokeWidth / 512)), Ge = k(() => [...I.value].map((l, s) => {
      const a = l.series.filter((o) => !$.value.includes(o.id)).map((o) => o.value).reduce((o, t) => o + t, 0);
      return {
        ...l,
        total: a,
        series: l.series.filter((o) => !$.value.includes(o.id)).map((o) => ({
          ...o,
          proportion: o.value / a
        }))
      };
    }));
    function mt(l, s, a) {
      let o = 0;
      for (let t = 0; t < l.length; t += 1)
        a.includes(l[t]) && (o += 1);
      return o < s;
    }
    const b = v(Ge.value);
    Ze(
      () => Ge.value,
      (l) => b.value = l
    );
    function ve(l) {
      var C;
      Be("selectLegend", l);
      const s = x.dataset.flatMap(
        (d, f) => d.series.map((O, ge) => ({
          value: D(O.values).reduce((ae, q) => ae + q, 0),
          id: `${y.value}_${f}_${ge}`,
          arcOfId: `${y.value}_${f}`
        }))
      ).find((d) => d.id === l.id);
      if (!s) return;
      const a = ((C = I.value.flatMap((d) => d.series).find((d) => d.id === l.id)) == null ? void 0 : C.value) ?? 0, o = b.value.flatMap((d) => d.series).find((d) => d.id === l.id);
      let u = o ? o.value : 0;
      const c = I.value.find(
        (d) => d.id === s.arcOfId
      );
      if (!c) return;
      const p = c.series.map((d) => d.id), N = mt(
        p,
        p.length - 1,
        $.value
      );
      $.value.includes(l.id) ? ($.value = $.value.filter((d) => d !== l.id), e.value.serieToggleAnimation.show ? Ee({
        from: u,
        to: a,
        duration: e.value.serieToggleAnimation.durationMs,
        onUpdate: (d) => {
          b.value = b.value.map((f) => ({
            ...f,
            series: f.series.map((O) => O.id === l.id ? { ...O, value: d } : O)
          }));
        }
      }) : b.value = b.value.map((d) => ({
        ...d,
        series: d.series.map((f) => f.id === l.id ? { ...f, value: a } : f)
      }))) : N && (e.value.serieToggleAnimation.show ? Ee({
        from: u,
        to: 0,
        duration: e.value.serieToggleAnimation.durationMs,
        onUpdate: (d) => {
          b.value = b.value.map((f) => ({
            ...f,
            series: f.series.map((O) => O.id === l.id ? { ...O, value: d } : O)
          }));
        },
        onDone: () => {
          $.value.push(l.id);
        }
      }) : (b.value = b.value.map((d) => ({
        ...d,
        series: d.series.map((f) => f.id === l.id ? { ...f, value: 0 } : f)
      })), $.value.push(l.id)));
    }
    const fe = k(() => A.value / I.value.length * e.value.style.chart.layout.donut.spacingRatio), Ye = k(() => b.value.map((l, s) => A.value - s * A.value / I.value.length)), Z = k(() => b.value.map((l, s) => {
      const a = A.value - s * A.value / b.value.length, o = z.value ? W.value.find((u) => u.datasetIndex === s) : null, t = [...l.series, ...o ? [o] : []].map((u) => ({
        ...u,
        value: u.value < 1e-3 ? 1e-3 : u.value
      }));
      return {
        ...l,
        radius: a,
        donut: ot(
          { series: t },
          h.value.width / 2,
          h.value.height / 2,
          a,
          a,
          1.99999,
          2,
          1,
          360,
          105.25,
          fe.value
        )
      };
    })), Xe = k(() => [...I.value].map((l, s) => {
      const a = s * A.value / I.value.length;
      return {
        sizeRatio: a,
        donut: ot(
          { series: [{ value: 1 }] },
          h.value.width / 2,
          h.value.height / 2,
          A.value - a,
          A.value - a,
          1.99999,
          2,
          1,
          360,
          105.25,
          A.value / I.value.length * e.value.style.chart.layout.donut.spacingRatio
        )[0]
      };
    })), He = v(null), j = v(null), ee = v(null), he = v(null);
    function $t({ datapoint: l, _relativeIndex: s, seriesIndex: a }) {
      He.value = l.arcOfId, j.value = l.id, ee.value = a, he.value = {
        datapoint: l,
        seriesIndex: a,
        series: b.value,
        config: e.value
      };
      const o = e.value.style.chart.tooltip.customFormat;
      if (ut(o) && Ut(
        () => o({
          seriesIndex: a,
          datapoint: l,
          series: b.value,
          config: e.value
        })
      ))
        re.value = o({
          seriesIndex: a,
          datapoint: l,
          series: b.value,
          config: e.value
        });
      else {
        let t = "";
        if (e.value.style.chart.tooltip.showAllItemsAtIndex && $.value.length === 0) {
          const u = b.value.map((c) => c.series.find((p) => p.seriesIndex === a));
          u.forEach((c, p) => {
            if (!c) return "";
            t += `
                    <div style="display:flex; flex-direction: column; justify-content:flex-start; align-items:flex-start;padding:6px 0; ${p < u.length - 1 ? `border-bottom:1px solid ${e.value.style.chart.tooltip.borderColor}` : ""}">
                        <div style="display:flex; flex-direction: row; gap: 3px; justify-content:flex-start; align-items:center;">
                            <svg viewBox="0 0 20 20" height="${e.value.style.chart.tooltip.fontSize}" width="${e.value.style.chart.tooltip.fontSize}">
                                <circle cx="10" cy="10" r="10" fill="${c.color}"/>
                            </svg>
                            <span>
                                ${c.arcOf ?? ""} - ${c.name}
                            </span>
                        </div>
                        <span>
                            ${e.value.style.chart.tooltip.showValue ? `<b>${J(
              e.value.style.chart.layout.labels.dataLabels.formatter,
              l.value,
              F({
                p: e.value.style.chart.layout.labels.dataLabels.prefix,
                v: l.value,
                s: e.value.style.chart.layout.labels.dataLabels.suffix,
                r: e.value.style.chart.tooltip.roundingValue
              }),
              { datapoint: l, seriesIndex: a }
            )}
                        </b>` : ""}
                            ${e.value.style.chart.tooltip.showPercentage ? `(${F({
              v: c.proportion * 100,
              s: "%",
              r: e.value.style.chart.tooltip.roundingPercentage
            })})` : ""}
                        </span>
                    </div>
                `;
          });
        } else
          t += `<div style="width:100%;text-align:center;border-bottom:1px solid ${e.value.style.chart.tooltip.borderColor};padding-bottom:6px;margin-bottom:3px;">${l.arcOf ?? ""} - ${l.name}</div>`, t += `<div style="display:flex;flex-direction:row;gap:6px;align-items:center;"><svg viewBox="0 0 12 12" height="14" width="14"><circle cx="6" cy="6" r="6" stroke="none" fill="${l.color}"/></svg>`, e.value.style.chart.tooltip.showValue && (t += `<b>${J(
            e.value.style.chart.layout.labels.dataLabels.formatter,
            l.value,
            F({
              p: e.value.style.chart.layout.labels.dataLabels.prefix,
              v: l.value,
              s: e.value.style.chart.layout.labels.dataLabels.suffix,
              r: e.value.style.chart.tooltip.roundingValue
            }),
            { datapoint: l, seriesIndex: a }
          )}</b>`), e.value.style.chart.tooltip.showPercentage && (e.value.style.chart.tooltip.showValue ? t += `<span>(${F({
            v: l.proportion * 100,
            s: "%",
            r: e.value.style.chart.tooltip.roundingPercentage
          })})</span></div>` : t += `<b>${F({
            v: l.proportion * 100,
            s: "%",
            r: e.value.style.chart.tooltip.roundingPercentage
          })}</b></div>`);
        re.value = `<div style="font-size:${e.value.style.chart.tooltip.fontSize}px">${t}</div>`;
      }
      ne.value = !0;
    }
    function pe(l) {
      return l.proportion * 100 > e.value.style.chart.layout.labels.dataLabels.hideUnderValue;
    }
    function We(l, s) {
      if (!e.value.useBlurOnHover)
        return "";
      if (e.value.style.chart.tooltip.showAllItemsAtIndex && $.value.length === 0)
        return [null, void 0].includes(ee.value) || ee.value === s ? "" : `url(#blur_${y.value})`;
      if (!e.value.style.chart.tooltip.showAllItemsAtIndex || $.value.length)
        return [null, void 0].includes(j.value) || j.value === l.id ? "" : `url(#blur_${y.value})`;
    }
    const ye = k(() => I.value.map((l, s) => {
      const a = l.series.filter(
        (t) => !$.value.includes(t.id)
      ), o = z.value ? a.map((t) => {
        const u = x.dataset[s].series.findIndex(
          (c) => c.name === t.name
        );
        return D(
          x.dataset[s].series[u].values
        ).reduce((c, p) => c + p, 0);
      }).reduce((t, u) => t + u, 0) : a.map((t) => t.value).reduce((t, u) => t + u, 0);
      return l.series.map((t, u) => {
        const c = D(x.dataset[s].series[u].values).reduce(
          (N, C) => N + C,
          0
        ), p = z.value ? c : t.value;
        return {
          name: t.name,
          color: t.color,
          value: p,
          shape: "circle",
          arcOf: t.arcOf,
          id: t.id,
          seriesIndex: u,
          datasetIndex: s,
          total: o,
          opacity: $.value.includes(t.id) ? 0.5 : 1,
          segregate: () => ve(t),
          isSegregated: $.value.includes(t.id)
        };
      });
    })), wt = k(() => ({
      cy: "nested-donuts-legend",
      backgroundColor: e.value.style.chart.legend.backgroundColor,
      color: e.value.style.chart.legend.color,
      fontSize: e.value.style.chart.legend.fontSize,
      paddingBottom: 12,
      fontWeight: e.value.style.chart.legend.bold ? "bold" : ""
    })), P = k(() => {
      const l = b.value.flatMap((a) => a.series.map((o) => ({
        name: `${a.name} - ${o.name}`,
        color: o.color,
        total: a.total
      }))), s = b.value.flatMap((a) => a.series.map((o) => o.value));
      return { head: l, body: s };
    });
    function qe() {
      et(() => {
        const l = P.value.head.map((o, t) => [
          [o.name],
          [P.value.body[t]],
          [
            isNaN(P.value.body[t] / o.total) ? "-" : P.value.body[t] / o.total * 100
          ]
        ]), s = [
          [e.value.style.chart.title.text],
          [e.value.style.chart.title.subtitle.text],
          [[""], ["val"], ["%"]]
        ].concat(l), a = Mt(s);
        Rt({
          csvContent: a,
          title: e.value.style.chart.title.text || "vue-ui-nested-donuts"
        });
      });
    }
    const te = k(() => {
      const l = [
        e.value.table.columnNames.series,
        e.value.table.columnNames.value,
        e.value.table.columnNames.percentage
      ], s = P.value.head.map((t, u) => {
        const c = F({
          p: e.value.style.chart.layout.labels.dataLabels.prefix,
          v: P.value.body[u],
          s: e.value.style.chart.layout.labels.dataLabels.suffix,
          r: e.value.table.td.roundingValue
        });
        return [
          {
            color: t.color,
            name: t.name
          },
          c,
          isNaN(P.value.body[u] / t.total) ? "-" : F({
            v: P.value.body[u] / t.total * 100,
            s: "%",
            r: e.value.table.td.roundingPercentage
          })
        ];
      }), a = {
        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.series,
          e.value.table.columnNames.value,
          e.value.table.columnNames.percentage
        ],
        head: l,
        body: s,
        config: a
      };
    });
    function kt() {
      return I.value;
    }
    function Je() {
      w.value.showTable = !w.value.showTable;
    }
    function Ke() {
      w.value.dataLabels.show = !w.value.dataLabels.show;
    }
    function Qe() {
      w.value.showTooltip = !w.value.showTooltip;
    }
    const le = v(!1);
    function be() {
      le.value = !le.value;
    }
    return dt({
      getData: kt,
      generatePdf: Re,
      generateCsv: qe,
      generateImage: Ue,
      toggleTable: Je,
      toggleLabels: Ke,
      toggleTooltip: Qe,
      toggleAnnotator: be
    }), (l, s) => (n(), r("div", {
      ref_key: "nestedDonutsChart",
      ref: H,
      class: R(`vue-ui-nested-donuts ${B.value ? "vue-data-ui-wrapper-fullscreen" : ""} ${e.value.useCssAnimation ? "" : "vue-ui-dna"}`),
      style: se(`font-family:${e.value.style.fontFamily};width:100%; text-align:center;background:${e.value.style.chart.backgroundColor}`),
      id: `nested_donuts_${y.value}`,
      onMouseenter: s[3] || (s[3] = () => i(Ae)(!0)),
      onMouseleave: s[4] || (s[4] = () => i(Ae)(!1))
    }, [
      e.value.userOptions.buttons.annotator ? (n(), U(Zt, {
        key: 0,
        svgRef: i(Ve),
        backgroundColor: e.value.style.chart.backgroundColor,
        color: e.value.style.chart.color,
        active: le.value,
        onClose: be
      }, null, 8, ["svgRef", "backgroundColor", "color", "active"])) : g("", !0),
      yt.value ? (n(), r("div", {
        key: 1,
        ref_key: "noTitle",
        ref: Fe,
        class: "vue-data-ui-no-title-space",
        style: "height:36px; width: 100%;background:transparent"
      }, null, 512)) : g("", !0),
      e.value.style.chart.title.text ? (n(), r("div", {
        key: 2,
        ref_key: "chartTitle",
        ref: Ce
      }, [
        (n(), U(Gt, {
          key: `title_${Oe.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)) : g("", !0),
      e.value.userOptions.show && K.value && (i(Ne) || i(de)) ? (n(), U(Xt, {
        ref: "details",
        key: `user_option_${xe.value}`,
        backgroundColor: e.value.style.chart.backgroundColor,
        color: e.value.style.chart.color,
        isPrinting: i(ze),
        isImaging: i(Me),
        uid: y.value,
        hasTooltip: e.value.userOptions.buttons.tooltip && e.value.style.chart.tooltip.show,
        hasPdf: e.value.userOptions.buttons.pdf,
        hasXls: e.value.userOptions.buttons.csv,
        hasImg: e.value.userOptions.buttons.img,
        hasTable: e.value.userOptions.buttons.table,
        hasLabel: e.value.userOptions.buttons.labels,
        hasFullscreen: e.value.userOptions.buttons.fullscreen,
        isFullscreen: B.value,
        isTooltip: w.value.showTooltip,
        titles: { ...e.value.userOptions.buttonTitles },
        chartElement: H.value,
        position: e.value.userOptions.position,
        hasAnnotator: e.value.userOptions.buttons.annotator,
        isAnnotation: le.value,
        onToggleFullscreen: ht,
        onGeneratePdf: i(Re),
        onGenerateCsv: qe,
        onGenerateImage: i(Ue),
        onToggleTable: Je,
        onToggleLabels: Ke,
        onToggleTooltip: Qe,
        onToggleAnnotator: be,
        style: se({
          visibility: i(Ne) ? i(de) ? "visible" : "hidden" : "visible"
        })
      }, Ft({ _: 2 }, [
        l.$slots.menuIcon ? {
          name: "menuIcon",
          fn: _(({ isOpen: a, color: o }) => [
            L(l.$slots, "menuIcon", E(G({ isOpen: a, color: o })), void 0, !0)
          ]),
          key: "0"
        } : void 0,
        l.$slots.optionTooltip ? {
          name: "optionTooltip",
          fn: _(() => [
            L(l.$slots, "optionTooltip", {}, void 0, !0)
          ]),
          key: "1"
        } : void 0,
        l.$slots.optionPdf ? {
          name: "optionPdf",
          fn: _(() => [
            L(l.$slots, "optionPdf", {}, void 0, !0)
          ]),
          key: "2"
        } : void 0,
        l.$slots.optionCsv ? {
          name: "optionCsv",
          fn: _(() => [
            L(l.$slots, "optionCsv", {}, void 0, !0)
          ]),
          key: "3"
        } : void 0,
        l.$slots.optionImg ? {
          name: "optionImg",
          fn: _(() => [
            L(l.$slots, "optionImg", {}, void 0, !0)
          ]),
          key: "4"
        } : void 0,
        l.$slots.optionTable ? {
          name: "optionTable",
          fn: _(() => [
            L(l.$slots, "optionTable", {}, void 0, !0)
          ]),
          key: "5"
        } : void 0,
        l.$slots.optionLabels ? {
          name: "optionLabels",
          fn: _(() => [
            L(l.$slots, "optionLabels", {}, void 0, !0)
          ]),
          key: "6"
        } : void 0,
        l.$slots.optionFullscreen ? {
          name: "optionFullscreen",
          fn: _(({ toggleFullscreen: a, isFullscreen: o }) => [
            L(l.$slots, "optionFullscreen", E(G({ toggleFullscreen: a, isFullscreen: o })), void 0, !0)
          ]),
          key: "7"
        } : void 0,
        l.$slots.optionAnnotator ? {
          name: "optionAnnotator",
          fn: _(({ toggleAnnotator: a, isAnnotator: o }) => [
            L(l.$slots, "optionAnnotator", E(G({ toggleAnnotator: a, isAnnotator: o })), void 0, !0)
          ]),
          key: "8"
        } : void 0
      ]), 1032, ["backgroundColor", "color", "isPrinting", "isImaging", "uid", "hasTooltip", "hasPdf", "hasXls", "hasImg", "hasTable", "hasLabel", "hasFullscreen", "isFullscreen", "isTooltip", "titles", "chartElement", "position", "hasAnnotator", "isAnnotation", "onGeneratePdf", "onGenerateImage", "style"])) : g("", !0),
      K.value ? (n(), r("svg", {
        key: 4,
        ref_key: "svgRef",
        ref: Ve,
        xmlns: i(Dt),
        class: R({
          "vue-data-ui-fullscreen--on": B.value,
          "vue-data-ui-fulscreen--off": !B.value
        }),
        viewBox: `0 0 ${h.value.width <= 0 ? 1e-3 : h.value.width} ${h.value.height < 0 ? 1e-3 : h.value.height}`,
        style: se(`max-width:100%; overflow: visible; background:transparent;color:${e.value.style.chart.color};${De.value.css}`)
      }, [
        tt(Qt),
        l.$slots["chart-background"] ? (n(), r("foreignObject", {
          key: 0,
          x: 0,
          y: 0,
          width: h.value.width <= 0 ? 1e-3 : h.value.width,
          height: h.value.height < 0 ? 1e-3 : h.value.height,
          style: {
            pointerEvents: "none"
          }
        }, [
          L(l.$slots, "chart-background", {}, void 0, !0)
        ], 8, ol)) : g("", !0),
        m("defs", null, [
          (n(!0), r(T, null, S(Xe.value, (a, o) => (n(), r("radialGradient", {
            id: `radial_${y.value}_${o}`
          }, [
            s[5] || (s[5] = m("stop", {
              offset: "0%",
              "stop-color": "#FFFFFF",
              "stop-opacity": "0"
            }, null, -1)),
            m("stop", {
              offset: `${(1 - fe.value / Ye.value[o]) * 100}%`,
              "stop-color": i(st)("#FFFFFF", 0),
              "stop-opacity": "0"
            }, null, 8, ul),
            m("stop", {
              offset: `${(1 - fe.value / Ye.value[o] / 2) * 100}%`,
              "stop-color": "#FFFFFF",
              "stop-opacity": e.value.style.chart.gradientIntensity / 100
            }, null, 8, nl),
            s[6] || (s[6] = m("stop", {
              offset: "100%",
              "stop-color": "#FFFFFF",
              "stop-opacity": "0"
            }, null, -1))
          ], 8, sl))), 256))
        ]),
        m("defs", null, [
          m("filter", {
            id: `blur_${y.value}`,
            x: "-50%",
            y: "-50%",
            width: "200%",
            height: "200%"
          }, [
            m("feGaussianBlur", {
              in: "SourceGraphic",
              stdDeviation: 2,
              id: `blur_std_${y.value}`
            }, null, 8, il),
            s[7] || (s[7] = m("feColorMatrix", {
              type: "saturate",
              values: "0"
            }, null, -1))
          ], 8, rl),
          m("filter", {
            id: `shadow_${y.value}`,
            "color-interpolation-filters": "sRGB"
          }, [
            m("feDropShadow", {
              dx: "0",
              dy: "0",
              stdDeviation: "10",
              "flood-opacity": "0.5",
              "flood-color": e.value.style.chart.layout.donut.shadowColor
            }, null, 8, cl)
          ], 8, dl)
        ]),
        (n(!0), r(T, null, S(Z.value, (a, o) => (n(), r("g", null, [
          (n(!0), r(T, null, S(a.donut.filter((t) => !t.ghost), (t, u) => (n(), r("g", null, [
            m("path", {
              class: "vue-ui-donut-arc-path",
              d: t.arcSlice,
              fill: i(st)(t.color, 80),
              stroke: e.value.style.chart.backgroundColor,
              "stroke-width": e.value.style.chart.layout.donut.borderWidth,
              filter: We(t, u)
            }, null, 8, vl)
          ]))), 256))
        ]))), 256)),
        e.value.style.chart.useGradient ? (n(), r("g", fl, [
          (n(!0), r(T, null, S(Xe.value, (a, o) => (n(), r("g", null, [
            m("path", {
              d: a.donut.arcSlice,
              fill: `url(#radial_${y.value}_${o})`,
              stroke: "transparent",
              "stroke-width": "0"
            }, null, 8, hl)
          ]))), 256))
        ])) : g("", !0),
        e.value.style.chart.layout.labels.dataLabels.showDonutName ? (n(), r("g", pl, [
          (n(!0), r(T, null, S(Z.value, (a, o) => (n(), r("g", null, [
            (n(!0), r(T, null, S(a.donut, (t, u) => (n(), r("g", null, [
              u === 0 && h.value.width && h.value.height ? (n(), r("text", {
                key: 0,
                class: R({ animated: e.value.useCssAnimation }),
                x: h.value.width / 2,
                y: t.startY - e.value.style.chart.layout.labels.dataLabels.fontSize + e.value.style.chart.layout.labels.dataLabels.donutNameOffsetY,
                "text-anchor": "middle",
                "font-size": e.value.style.chart.layout.labels.dataLabels.fontSize,
                "font-weight": e.value.style.chart.layout.labels.dataLabels.boldDonutName ? "bold" : "normal",
                fill: e.value.style.chart.layout.labels.dataLabels.color
              }, V(e.value.style.chart.layout.labels.dataLabels.donutNameAbbreviation ? i(zt)({
                source: a.name,
                length: e.value.style.chart.layout.labels.dataLabels.donutNameMaxAbbreviationSize
              }) : a.name), 11, yl)) : g("", !0)
            ]))), 256))
          ]))), 256))
        ])) : g("", !0),
        e.value.style.chart.layout.labels.dataLabels.show ? (n(), r("g", bl, [
          (n(!0), r(T, null, S(Z.value, (a, o) => (n(), r("g", null, [
            (n(!0), r(T, null, S(a.donut.filter((t) => !t.ghost), (t, u) => (n(), r("g", {
              filter: We(t, u)
            }, [
              lt(m("text", {
                class: R({ animated: e.value.useCssAnimation }),
                opacity: pe(t) ? 1 : 0,
                "text-anchor": i(X)(t, !0).anchor,
                x: i(X)(
                  t,
                  !1,
                  e.value.style.chart.layout.labels.dataLabels.offsetX
                ).x || 0,
                y: i(Le)(
                  t,
                  e.value.style.chart.layout.labels.dataLabels.offsetY,
                  e.value.style.chart.layout.labels.dataLabels.offsetY
                ),
                fill: e.value.style.chart.layout.labels.dataLabels.useSerieColor ? t.color : e.value.style.chart.layout.labels.dataLabels.color,
                "font-size": e.value.style.chart.layout.labels.dataLabels.fontSize,
                "font-weight": e.value.style.chart.layout.labels.dataLabels.boldPercentage ? "bold" : "normal"
              }, V(i(F)({
                v: t.proportion * 100,
                s: "%",
                r: e.value.style.chart.layout.labels.dataLabels.roundingPercentage
              })), 11, ml), [
                [
                  at,
                  w.value.dataLabels.show && e.value.style.chart.layout.labels.dataLabels.showPercentage
                ]
              ]),
              lt(m("text", {
                class: R({ animated: e.value.useCssAnimation }),
                opacity: pe(t) ? 1 : 0,
                "text-anchor": i(X)(t, !0).anchor,
                x: i(X)(
                  t,
                  !1,
                  e.value.style.chart.layout.labels.dataLabels.offsetX
                ).x || 0,
                y: i(Le)(
                  t,
                  e.value.style.chart.layout.labels.dataLabels.offsetY,
                  e.value.style.chart.layout.labels.dataLabels.offsetY
                ) + e.value.style.chart.layout.labels.dataLabels.fontSize,
                fill: e.value.style.chart.layout.labels.dataLabels.useSerieColor ? t.color : e.value.style.chart.layout.labels.dataLabels.color,
                "font-size": e.value.style.chart.layout.labels.dataLabels.fontSize,
                "font-weight": e.value.style.chart.layout.labels.dataLabels.boldValue ? "bold" : "normal"
              }, " (" + V(i(J)(
                e.value.style.chart.layout.labels.dataLabels.formatter,
                t.value,
                i(F)({
                  p: e.value.style.chart.layout.labels.dataLabels.prefix,
                  v: t.value,
                  s: e.value.style.chart.layout.labels.dataLabels.suffix,
                  r: e.value.style.chart.layout.labels.dataLabels.roundingValue
                }),
                { datapoint: t, seriesIndex: o, datapointIndex: u }
              )) + ") ", 11, $l), [
                [
                  at,
                  w.value.dataLabels.show && e.value.style.chart.layout.labels.dataLabels.showPercentage && e.value.style.chart.layout.labels.dataLabels.showValue
                ]
              ]),
              pe(t) && w.value.dataLabels.show && !e.value.style.chart.layout.labels.dataLabels.showPercentage && e.value.style.chart.layout.labels.dataLabels.showValue ? (n(), r("text", {
                key: 0,
                class: R({ animated: e.value.useCssAnimation }),
                "text-anchor": i(X)(t, !0).anchor,
                x: i(X)(
                  t,
                  !1,
                  e.value.style.chart.layout.labels.dataLabels.offsetX
                ).x || 0,
                y: i(Le)(
                  t,
                  e.value.style.chart.layout.labels.dataLabels.offsetY,
                  e.value.style.chart.layout.labels.dataLabels.offsetY
                ),
                fill: e.value.style.chart.layout.labels.dataLabels.useSerieColor ? t.color : e.value.style.chart.layout.labels.dataLabels.color,
                "font-size": e.value.style.chart.layout.labels.dataLabels.fontSize,
                "font-weight": e.value.style.chart.layout.labels.dataLabels.boldValue ? "bold" : "normal"
              }, V(i(J)(
                e.value.style.chart.layout.labels.dataLabels.formatter,
                t.value,
                i(F)({
                  p: e.value.style.chart.layout.labels.dataLabels.prefix,
                  v: t.value,
                  s: e.value.style.chart.layout.labels.dataLabels.suffix,
                  r: e.value.style.chart.layout.labels.dataLabels.roundingValue
                }),
                { datapoint: t, seriesIndex: o, datapointIndex: u }
              )), 11, wl)) : g("", !0)
            ], 8, gl))), 256))
          ]))), 256))
        ])) : g("", !0),
        (n(!0), r(T, null, S(Z.value, (a, o) => (n(), r("g", null, [
          (n(!0), r(T, null, S(a.donut, (t, u) => (n(), r("g", null, [
            m("path", {
              d: t.arcSlice,
              fill: ft.value === o ? "rgba(0,0,0,0.1)" : "transparent",
              onMouseenter: (c) => $t({
                datapoint: t,
                seriesIndex: t.seriesIndex
              }),
              onClick: (c) => gt({ datapoint: t, index: u }),
              onMouseleave: s[0] || (s[0] = (c) => {
                ne.value = !1, He.value = null, j.value = null, ee.value = null;
              })
            }, null, 40, kl)
          ]))), 256))
        ]))), 256)),
        L(l.$slots, "svg", { svg: h.value }, void 0, !0)
      ], 14, al)) : g("", !0),
      l.$slots.watermark ? (n(), r("div", _l, [
        L(l.$slots, "watermark", E(G({ isPrinting: i(ze) || i(Me) })), void 0, !0)
      ])) : g("", !0),
      K.value ? g("", !0) : (n(), U(Jt, {
        key: 6,
        config: {
          type: "donut",
          style: {
            backgroundColor: e.value.style.chart.backgroundColor,
            donut: {
              color: "#CCCCCC"
            }
          }
        }
      }, null, 8, ["config"])),
      tt(Wt, {
        show: w.value.showTooltip && ne.value,
        backgroundColor: e.value.style.chart.tooltip.backgroundColor,
        color: e.value.style.chart.tooltip.color,
        borderRadius: e.value.style.chart.tooltip.borderRadius,
        borderColor: e.value.style.chart.tooltip.borderColor,
        borderWidth: e.value.style.chart.tooltip.borderWidth,
        fontSize: e.value.style.chart.tooltip.fontSize,
        backgroundOpacity: e.value.style.chart.tooltip.backgroundOpacity,
        position: e.value.style.chart.tooltip.position,
        offsetY: e.value.style.chart.tooltip.offsetY,
        parent: H.value,
        content: re.value,
        isFullscreen: B.value,
        isCustom: i(ut)(e.value.style.chart.tooltip.customFormat)
      }, {
        "tooltip-before": _(() => [
          L(l.$slots, "tooltip-before", E(G({ ...he.value })), void 0, !0)
        ]),
        "tooltip-after": _(() => [
          L(l.$slots, "tooltip-after", E(G({ ...he.value })), void 0, !0)
        ]),
        _: 3
      }, 8, ["show", "backgroundColor", "color", "borderRadius", "borderColor", "borderWidth", "fontSize", "backgroundOpacity", "position", "offsetY", "parent", "content", "isFullscreen", "isCustom"]),
      e.value.style.chart.legend.show ? (n(), r("div", {
        key: 7,
        ref_key: "chartLegend",
        ref: ie,
        class: R({ "vue-ui-nested-donuts-legend": ye.value.length > 1 })
      }, [
        (n(!0), r(T, null, S(ye.value, (a, o) => (n(), U(qt, {
          key: `legend_${o}_${Ie.value}`,
          legendSet: a,
          config: wt.value,
          onClickMarker: s[1] || (s[1] = ({ legend: t }) => ve(t))
        }, {
          legendTitle: _(({ titleSet: t }) => [
            t[0] && t[0].arcOf ? (n(), r("div", Ll, V(t[0].arcOf), 1)) : g("", !0)
          ]),
          item: _(({ legend: t, index: u }) => [
            m("div", {
              onClick: (c) => ve(t),
              style: se(`opacity:${$.value.includes(t.id) ? 0.5 : 1}`)
            }, [
              ue(V(t.name) + ": " + V(i(J)(
                e.value.style.chart.layout.labels.dataLabels.formatter,
                t.value,
                i(F)({
                  p: e.value.style.chart.layout.labels.dataLabels.prefix,
                  v: t.value,
                  s: e.value.style.chart.layout.labels.dataLabels.suffix,
                  r: e.value.style.chart.legend.roundingValue
                }),
                { datapoint: t, seriesIndex: u }
              )) + " ", 1),
              $.value.includes(t.id) ? (n(), r(T, { key: 1 }, [
                ue(" ( - % ) ")
              ], 64)) : (n(), r(T, { key: 0 }, [
                ue(" (" + V(isNaN(t.value / t.total) ? "-" : i(F)({
                  v: t.value / t.total * 100,
                  s: "%",
                  r: e.value.style.chart.legend.roundingPercentage
                })) + ") ", 1)
              ], 64))
            ], 12, xl)
          ]),
          _: 2
        }, 1032, ["legendSet", "config"]))), 128))
      ], 2)) : g("", !0),
      e.value.style.chart.legend.show ? g("", !0) : (n(), r("div", {
        key: 8,
        ref_key: "chartLegend",
        ref: ie
      }, [
        L(l.$slots, "legend", { legend: ye.value }, void 0, !0)
      ], 512)),
      l.$slots.source ? (n(), r("div", {
        key: 9,
        ref_key: "source",
        ref: Te,
        dir: "auto"
      }, [
        L(l.$slots, "source", {}, void 0, !0)
      ], 512)) : g("", !0),
      K.value ? (n(), U(Kt, {
        key: 10,
        hideDetails: "",
        config: {
          open: w.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: _(() => [
          (n(), U(Ht, {
            key: `table_${Se.value}`,
            colNames: te.value.colNames,
            head: te.value.head,
            body: te.value.body,
            config: te.value.config,
            title: `${e.value.style.chart.title.text}${e.value.style.chart.title.subtitle.text ? ` : ${e.value.style.chart.title.subtitle.text}` : ""}`,
            onClose: s[2] || (s[2] = (a) => w.value.showTable = !1)
          }, {
            th: _(({ th: a }) => [
              m("div", {
                innerHTML: a,
                style: { display: "flex", "align-items": "center" }
              }, null, 8, Cl)
            ]),
            td: _(({ td: a }) => [
              ue(V(a.name || a), 1)
            ]),
            _: 1
          }, 8, ["colNames", "head", "body", "config", "title"]))
        ]),
        _: 1
      }, 8, ["config"])) : g("", !0)
    ], 46, ll));
  }
}, Yl = /* @__PURE__ */ tl(Tl, [["__scopeId", "data-v-3bc36ce2"]]);
export {
  Yl as default
};
