vue-data-ui
Version:
A user-empowering data visualization Vue 3 components library for eloquent data storytelling
1,589 lines • 63.9 kB
JavaScript
import { isRef as e, toRaw as t, unref as n } from "vue";
var r = {
dataset: "#COMP# dataset prop is either missing, undefined or empty.",
datasetAttribute: "#COMP# dataset is missing the '#ATTR#' attribute.",
datasetAttributeEmpty: "#COMP# dataset '#ATTR#' attribute cannot be empty.",
datasetSerieAttribute: "#COMP# dataset #KEY# item at index #INDX# is missing the '#ATTR#' attribute.",
notBuildable: "#COMP# : Chart could not be built. Dataset is not formatted correctly",
attributeWrongValue: "#COMP# : A wrong value was provided to the #ATTR# attribute (#KEY# is not a valid value)."
};
//#endregion
//#region src/lib.js
function i(e, t, n, r, i, a = 1.99999, o = 2, s = 1.45, l = 360, u = 105.25, d = 0) {
let { series: f } = e;
if (!f || f.length === 0) return [];
let p = f.reduce((e, t) => e + t.value, 0), m = [], g = 0;
for (let e = 0; e < f.length; e++) {
let _ = f[e].value, v = f.length === 1, y = v ? 1 : p > 0 ? _ / p : 0, b = Math.PI * a * y, x = (v ? .5 : p > 0 ? _ / 2 / p : .5) * (Math.PI * o), { startX: S, startY: C, endX: w, endY: T, path: E } = c([t, n], [r, i], [g, b], u, l, o), D = c([t, n], [r - d, i - d], [g, b], u, l, o, !0), O = c([t, n], [r * s, i * s], [g, x], u, l, o);
m.push({
arcSlice: `${E} L ${D.startX} ${D.startY} ${D.path} L ${S} ${C}`,
cx: h(t),
cy: h(n),
...f[e],
proportion: h(y),
ratio: h(b),
path: E.replaceAll("NaN", "0"),
startX: h(S),
startY: h(C),
endX: h(w),
endY: h(T),
separator: {
x: D.startX,
y: D.startY
},
firstSeparator: {
x: Number(D.path.split(" ").at(-2)),
y: Number(D.path.split(" ").at(-1))
},
center: O
}), g += b;
}
return m;
}
function a([e, t], [n, r]) {
return [e + n, t + r];
}
function o([[e, t], [n, r]], [i, a]) {
return [e * i + t * a, n * i + r * a];
}
function s(e) {
return [[Math.cos(e), -Math.sin(e)], [Math.sin(e), Math.cos(e)]];
}
function c([e, t], [n, r], [i, c], l, u = 360, d = 2, f = !1) {
c %= d * Math.PI;
let p = s(l), [m, g] = a(o(p, [n * Math.cos(i), r * Math.sin(i)]), [e, t]), [_, v] = a(o(p, [n * Math.cos(i + c), r * Math.sin(i + c)]), [e, t]), y = +(c > Math.PI), b = c > 0 ? +!f : +!!f;
return {
startX: h(f ? _ : m),
startY: h(f ? v : g),
endX: h(f ? m : _),
endY: h(f ? g : v),
path: `M${h(f ? _ : m)} ${h(f ? v : g)} A ${[
h(n),
h(r),
h(l / (d * Math.PI) * u),
h(y),
h(b),
h(f ? m : _),
h(f ? g : v)
].join(" ")}`
};
}
function l({ defaultConfig: e, userConfig: t }) {
let n = { ...e };
return Object.keys(n).forEach((e) => {
if (Object.hasOwn(t, e)) {
let r = t[e];
r === null ? n[e] = null : ["boolean", "function"].includes(typeof r) ? n[e] = r : ["string", "number"].includes(typeof r) ? f(r) && (n[e] = r) : Array.isArray(n[e]) ? u({
userConfig: t,
key: e
}) && (n[e] = r) : d({
userConfig: t,
key: e
}) && (n[e] = l({
defaultConfig: n[e],
userConfig: r
}));
}
}), Object.keys(t).forEach((e) => {
if (!Object.hasOwn(n, e)) {
let r = t[e];
n[e] = r && typeof r == "object" && !Array.isArray(r) ? { ...r } : r;
}
}), n;
}
function u({ userConfig: e, key: t }) {
return Object.hasOwn(e, t) && Array.isArray(e[t]) && e[t].length >= 0;
}
function d({ userConfig: e, key: t }) {
return Object.hasOwn(e, t) && !Array.isArray(e[t]) && typeof e[t] == "object";
}
function f(e) {
return ![
null,
void 0,
NaN,
Infinity,
-Infinity
].includes(e);
}
function p(e) {
return ![
void 0,
NaN,
Infinity,
-Infinity
].includes(e);
}
function m(e, t = 0) {
return f(e) ? e : t;
}
function h(e, t = 0) {
return isNaN(e) ? t : e;
}
var g = /* @__PURE__ */ "#1f77b4.#aec7e8.#ff7f0e.#ffbb78.#2ca02c.#98df8a.#d62728.#ff9896.#9467bd.#c5b0d5.#8c564b.#c49c94.#e377c2.#f7b6d2.#7f7f7f.#c7c7c7.#bcbd22.#dbdb8d.#17becf.#9edae5.#393b79.#5254a3.#6b6ecf.#9c9ede.#637939.#8ca252.#b5cf6b.#cedb9c.#8c6d31.#bd9e39.#e7ba52.#e7cb94.#843c39.#ad494a.#d6616b.#e7969c.#7b4173.#a55194.#ce6dbd.#de9ed6".split(".");
function _(e = "default") {
switch (e) {
case "hack": return v.hack;
case "zen": return v.zen;
case "concrete": return v.concrete;
case "celebration": return v.celebration;
case "celebrationNight": return v.celebrationNight;
case "minimal": return v.minimal;
case "minimalDark": return v.minimalDark;
default: return v.default;
}
}
var v = {
default: g,
dark: g,
minimal: [
"#2A2929",
"#454862",
"#65698E",
"#8D99AE",
"#678681",
"#7FA09B",
"#9CBCA8",
"#76645D",
"#877675",
"#A9998C",
"#C6B7AB",
"#906C70",
"#B08C91",
"#C9ACB0",
"#9F816B",
"#B39783",
"#D8C3B3",
"#825E76",
"#9D7D92",
"#C2A6B9"
],
minimalDark: [
"#524f4f",
"#454862",
"#65698E",
"#8D99AE",
"#678681",
"#7FA09B",
"#9CBCA8",
"#76645D",
"#877675",
"#A9998C",
"#C6B7AB",
"#906C70",
"#B08C91",
"#C9ACB0",
"#9F816B",
"#B39783",
"#D8C3B3",
"#825E76",
"#9D7D92",
"#C2A6B9"
],
celebration: [
"#D32F2F",
"#E64A19",
"#F57C00",
"#FF9800",
"#FF5722",
"#FFC107",
"#FFEB3B",
"#FFD54F",
"#FF6F00",
"#D84315",
"#BF360C",
"#C62828",
"#B71C1C",
"#FF7043",
"#FF8A65",
"#FFB74D",
"#FFA726",
"#FFCC80",
"#FFE082",
"#FFECB3"
],
celebrationNight: [
"#D32F2F",
"#E64A19",
"#F57C00",
"#FF9800",
"#FF5722",
"#FFC947",
"#FFEB3B",
"#FFD95B",
"#FF8800",
"#FF5722",
"#DD2C00",
"#F44336",
"#C62828",
"#FF6E6E",
"#FF867C",
"#FFB547",
"#FFA837",
"#FFD180",
"#FFE57F",
"#FFF59D"
],
concrete: /* @__PURE__ */ "#4A6A75.#6C94A0.#7DA9B5.#8EBFCA.#9FD4E0.#B0E9F5.#C1FFFF.#5C6B5B.#6D7D6D.#7E8F7E.#8FA290.#A1B5A3.#B2C7B5.#C3DAC8.#D4ECDA.#E6FFF0.#8A9CA5.#9AA7B0.#ABB1BC.#BBCBC7.#CCD6D3.#DEE1DE.#EFECEC.#404C4D.#50605F.#617472.#718885.#829C98.#92B0AB.#A3C4BE.#B3D8D2.#C4EDE5.#D4F1E8.#404C5A.#50606C.#61747E.#718890.#829CA2.#92B0B5".split("."),
hack: /* @__PURE__ */ "#004C00.#006600.#008000.#009900.#00B300.#00CC00.#00E600.#00FF00.#33FF33.#33E633.#33CC33.#33B333.#339933.#338033.#336633.#334C33.#333333.#00AF19.#19E619.#19CC19.#19B319.#199919.#198019.#196619.#194C19.#193319.#191919.#66FF66.#66E666.#66CC66.#66B366.#669966.#668066.#666666.#4CFF4C.#4CE64C.#4CCC4C.#4CB34C".split("."),
zen: /* @__PURE__ */ "#B9B99D.#E0CFC3.#DFCA99.#DCB482.#C09E85.#8F837A.#858480.#B0B9A8.#606C5A.#5E5E5E.#4F5B75.#647393.#818EA9.#9FA9BE.#BBC4D3.#DCDFE7.#928A98.#8A9892.#B1A7AD.#C5B8A7.#EBD6CC.#D7E0D2.#E0D2D7.#E0DBD2.#D2E0DB.#DBD2E0.#C1B7A5.#A5AFC1.#E0DBD2.#D2D7E0.#F7EDE2.#97ACB7.#C4CBBC.#C3C5C5.#A0AC94".split(".")
}, y = /* @__PURE__ */ "00.03.05.08.0A.0D.0F.12.14.17.1A.1C.1F.21.24.26.29.2B.2E.30.33.36.38.3B.3D.40.42.45.47.4A.4D.4F.52.54.57.59.5C.5E.61.63.66.69.6B.6E.70.73.75.78.7A.7D.80.82.85.87.8A.8C.8F.91.94.96.99.9C.9E.A1.A3.A6.A8.AB.AD.B0.B3.B5.B8.BA.BD.BF.C2.C4.C7.C9.CC.CF.D1.D4.D6.D9.DB.DE.E0.E3.E6.E8.EB.ED.F0.F2.F5.F7.FA.FC.FF".split(".");
function b(t) {
let r = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i, i = /^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i, a = /^rgba?\(\s*([+\-]?\d*\.?\d+%?)(?:\s*,\s*|\s+)([+\-]?\d*\.?\d+%?)(?:\s*,\s*|\s+)([+\-]?\d*\.?\d+%?)(?:\s*(?:,|\/)\s*([+\-]?\d*\.?\d+%?))?\s*\)$/i, o = /^hsla?\(\s*([+\-]?\d*\.?\d+(?:deg)?)(?:\s*,\s*|\s+)([\d.]+)%(?:\s*,\s*|\s+)([\d.]+)%(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i, s = /^oklch\(\s*([\d.]+)%?\s*[, ]\s*([\d.]+)%?\s*[, ]\s*([\d.]+)(?:deg)?\s*(?:\/\s*([\d.]+%?)\s*)?\)$/i, c = /^lch\(/i;
if (t == null || typeof t == "number" && isNaN(t)) return null;
if (t = e?.(t) ? n(t) : t, t = We(t), Array.isArray(t)) {
let [e, n, r, i = 1] = t;
t = `rgba(${e},${n},${r},${i})`;
} else if (typeof t == "object") if (Number.isFinite(t.r) && Number.isFinite(t.g) && Number.isFinite(t.b)) {
let e = Number.isFinite(t.a) ? t.a : 1;
t = `rgba(${t.r},${t.g},${t.b},${e})`;
} else return null;
else if (typeof t == "number") {
let e = t >>> 0, n = e.toString(16).padStart(e <= 16777215 ? 6 : 8, "0");
return `#${n.length === 6 ? n + "ff" : n}`;
} else if (typeof t != "string") return null;
if (t = t.trim(), c.test(t)) return console.warn("[convertColorToHex] lch() colors are not supported. Use oklch() instead."), null;
if (t.toLowerCase() === "transparent") return "#FFFFFF00";
t = t.replace(i, (e, t, n, r, i) => `#${t}${t}${n}${n}${r}${r}${i ? i + i : ""}`);
let l;
if (l = t.match(r)) {
let [, e, t, n, r] = l, i = r ? parseInt(r, 16) / 255 : 1;
return `#${e}${t}${n}${k(Math.round(S(i) * 255))}`;
}
if (l = t.match(a)) {
let [, e, t, n, r] = l, i = x(e), a = x(t), o = x(n), s = r ? D(r) : 1;
return i === null || a === null || o === null || s === null ? null : `#${k(i)}${k(a)}${k(o)}${k(Math.round(S(s) * 255))}`;
}
if (l = t.match(o)) {
let [, e, t, n, r] = l, i = parseFloat(e), a = Number(t), o = Number(n), s = r ? D(r) : 1;
if (!Number.isFinite(i) || !Number.isFinite(a) || !Number.isFinite(o) || s === null) return null;
let [c, u, d] = ne(i, a, o);
return `#${k(c)}${k(u)}${k(d)}${k(Math.round(S(s) * 255))}`;
}
if (l = t.match(s)) {
let [, e, t, n, r] = l, i = O(e);
if (i === null) return null;
let a = ee(t);
if (a === null) return null;
let o = te(n);
if (o === null) return null;
let s = D(r);
if (s === null) return null;
let [c, u, d] = T(i, a, o);
return `#${k(c)}${k(u)}${k(d)}${k(Math.round(S(s) * 255))}`;
}
return null;
}
function x(e) {
if (typeof e != "string") return null;
if (e.endsWith("%")) {
let t = parseFloat(e);
return Number.isFinite(t) ? Math.round(S(t / 100) * 255) : null;
}
let t = parseFloat(e);
return Number.isFinite(t) ? t < 0 ? 0 : t > 255 ? 255 : Math.round(t) : null;
}
function S(e) {
return Number.isFinite(e) ? e < 0 ? 0 : e > 1 ? 1 : e : 0;
}
function C(e) {
return !Number.isFinite(e) || e < 0 ? 0 : e > 255 ? 255 : Math.round(e);
}
function w(e) {
return e <= .0031308 ? 12.92 * e : 1.055 * e ** (1 / 2.4) - .055;
}
function T(e, t, n) {
let r = (n % 360 + 360) % 360 * (Math.PI / 180);
return E(e, t * Math.cos(r), t * Math.sin(r));
}
function E(e, t, n) {
let r = e + .3963377774 * t + .2158037573 * n, i = e - .1055613458 * t - .0638541728 * n, a = e - .0894841775 * t - 1.291485548 * n, o = r * r * r, s = i * i * i, c = a * a * a, l = 4.0767416621 * o - 3.3077115913 * s + .2309699292 * c, u = -1.2684380046 * o + 2.6097574011 * s - .3413193965 * c, d = -.0041960863 * o - .7034186147 * s + 1.707614701 * c;
l = S(l), u = S(u), d = S(d);
let f = w(l) * 255, p = w(u) * 255, m = w(d) * 255;
return [
C(f),
C(p),
C(m)
];
}
function D(e) {
if (e === void 0) return 1;
if (typeof e == "string" && e.endsWith("%")) {
let t = parseFloat(e);
return Number.isFinite(t) ? S(t / 100) : null;
}
let t = parseFloat(e);
return Number.isFinite(t) ? S(t) : null;
}
function O(e) {
let t = Number(e);
return Number.isFinite(t) ? (t > 1 && (t /= 100), S(t)) : null;
}
function ee(e) {
let t = Number(e);
return Number.isFinite(t) ? (t > 1 && (t /= 100), t < 0 ? 0 : t) : null;
}
function te(e) {
let t = Number(e);
return Number.isFinite(t) ? t : null;
}
function k(e) {
let t = Number(e).toString(16);
return t.length === 1 ? "0" + t : t;
}
function ne(e, t, n, r = 1) {
e /= 360, t /= 100, n /= 100;
let i, a, o;
if (t === 0) i = a = o = n;
else {
let r = (e, t, n) => (n < 0 && (n += 1), n > 1 && --n, n < 1 / 6 ? e + (t - e) * 6 * n : n < 1 / 2 ? t : n < 2 / 3 ? e + (t - e) * (2 / 3 - n) * 6 : e), s = n < .5 ? n * (1 + t) : n + t - n * t, c = 2 * n - s;
i = r(c, s, e + 1 / 3), a = r(c, s, e), o = r(c, s, e - 1 / 3);
}
return [
Math.round(i * 255),
Math.round(a * 255),
Math.round(o * 255),
r
];
}
function A(e, t) {
let n = e.length === 9 ? e.substring(0, 7) : e, r = e.length === 9 ? e.substring(7, 9) : null, i = (e) => ({
r: parseInt(e.substring(1, 3), 16),
g: parseInt(e.substring(3, 5), 16),
b: parseInt(e.substring(5, 7), 16)
}), a = ({ r: e, g: t, b: n }) => {
e /= 255, t /= 255, n /= 255;
let r = Math.max(e, t, n), i = Math.min(e, t, n), a, o, s = (r + i) / 2;
if (r === i) a = o = 0;
else {
let c = r - i;
switch (o = s > .5 ? c / (2 - r - i) : c / (r + i), r) {
case e:
a = (t - n) / c + (t < n ? 6 : 0);
break;
case t:
a = (n - e) / c + 2;
break;
case n: a = (e - t) / c + 4;
}
a /= 6;
}
return {
h: a,
s: o,
l: s
};
}, o = ({ h: e, s: t, l: n }) => {
let r, i, a;
if (t === 0) r = i = a = n;
else {
let o = (e, t, n) => (n < 0 && (n += 1), n > 1 && --n, n < 1 / 6 ? e + (t - e) * 6 * n : n < 1 / 2 ? t : n < 2 / 3 ? e + (t - e) * (2 / 3 - n) * 6 : e), s = n < .5 ? n * (1 + t) : n + t - n * t, c = 2 * n - s;
r = o(c, s, e + 1 / 3), i = o(c, s, e), a = o(c, s, e - 1 / 3);
}
return {
r: Math.round(r * 255),
g: Math.round(i * 255),
b: Math.round(a * 255)
};
}, s = a(i(n || "#000000"));
s.h += t, s.h = (s.h + 1) % 1;
let c = o(s);
return `#${(c.r << 16 | c.g << 8 | c.b).toString(16).padStart(6, "0")}` + (r || "");
}
function re({ centerX: e, centerY: t, outerPoints: n, radius: r, rotation: i }) {
let a = Math.PI / n, o = i, s = "", c = [];
for (let i = 0; i < n * 2; i += 1) {
let n = e + Math.cos(i * a + o) * r, l = t + Math.sin(i * a + o) * r;
s += `${n},${l} `, c.push({
x: n,
y: l
});
}
return {
path: `M${s}Z`,
coordinates: c
};
}
function ie({ plot: e, radius: t, sides: n, rotation: r = 0 }) {
let i = e.x, a = e.y;
return re({
centerX: i,
centerY: a,
outerPoints: n / 2,
radius: t + 1,
rotation: r
});
}
function ae({ centerX: e, centerY: t, innerCirclePoints: n, innerRadius: r, outerRadius: i }) {
let a = Math.PI / n, o = n * 2, s = "";
for (let n = 0; n < o; n += 1) {
let o = n % 2 == 0 ? i : r, c = e + Math.cos(n * a + 60) * o, l = t + Math.sin(n * a + 60) * o;
s += `${c},${l} `;
}
return s;
}
function oe({ plot: e, radius: t, apexes: n = 5 }) {
let r = e.x, i = e.y, a = n, o = t * 3.5 / a;
return ae({
centerX: r,
centerY: i,
innerCirclePoints: a,
innerRadius: o,
outerRadius: o * 2
});
}
function se({ series: e }) {
if (!Array.isArray(e) || e.length === 0) return "";
let t = Array.from(new Map(e.filter((e) => e && Number.isFinite(e.x) && Number.isFinite(e.y)).map((e) => [`${e.x},${e.y}`, {
x: +e.x,
y: +e.y
}])).values());
if (t.length === 0) return "";
if (t.length === 1) return `${Math.round(t[0].x)},${Math.round(t[0].y)} `;
let n = (e, t) => {
let n = e.x - t.x, r = e.y - t.y;
return n * n + r * r;
}, r = (e, t, n) => (t.x - e.x) * (n.y - e.y) - (t.y - e.y) * (n.x - e.x), i = t[0];
for (let e of t) (e.x < i.x || e.x === i.x && e.y < i.y) && (i = e);
let a = [i], o = i, s = t.length + 2, c = 0;
for (; !(++c > s);) {
let e = t[0] === o ? t[1] : t[0];
for (let i of t) {
if (i === o || i === e) continue;
let t = r(o, e, i);
t < 0 || (t > 0 || n(o, i) > n(o, e)) && (e = i);
}
if (e === i) break;
a.push(e), o = e;
}
let l = "";
for (let e of a) l += `${Math.round(e.x)},${Math.round(e.y)} `;
return l;
}
function j(e) {
return e * Math.PI / 180;
}
function ce(e, t, n) {
return Math.min(Math.max(e, t), n);
}
function le(e) {
if (typeof e != "string") return null;
let t = e.trim();
if (!t.startsWith("#")) return null;
let n = t.slice(1);
return n.length === 3 ? {
red: Number.parseInt(n[0] + n[0], 16),
green: Number.parseInt(n[1] + n[1], 16),
blue: Number.parseInt(n[2] + n[2], 16),
alpha: 1
} : n.length === 6 ? {
red: Number.parseInt(n.slice(0, 2), 16),
green: Number.parseInt(n.slice(2, 4), 16),
blue: Number.parseInt(n.slice(4, 6), 16),
alpha: 1
} : n.length === 8 ? {
red: Number.parseInt(n.slice(0, 2), 16),
green: Number.parseInt(n.slice(2, 4), 16),
blue: Number.parseInt(n.slice(4, 6), 16),
alpha: Number.parseInt(n.slice(6, 8), 16) / 255
} : null;
}
function ue(e, t, n) {
let r = e / 255, i = t / 255, a = n / 255, o = (e) => e <= .03928 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4, s = o(r), c = o(i), l = o(a);
return .2126 * s + .7152 * c + .0722 * l;
}
function de(e, t = {
dark: "#000000",
light: "#FFFFFF"
}) {
if (!e) return t?.dark ?? "#000000";
let n = le(b(e));
if (!n) return t?.dark ?? "#000000";
let r = ue(n.red, n.green, n.blue);
return (n.alpha < 1 ? n.alpha * r + (1 - n.alpha) * 1 : r) > .3 ? t?.dark ?? "#000000" : t?.light ?? "#FFFFFF";
}
function M(e) {
return typeof e == "object" && !!e && Object.prototype.toString.call(e) === "[object Object]" && (e.constructor === Object || e.constructor == null);
}
function N(e) {
return !!e && (e.__v_isRef || e.__v_isReactive || e.__v_isReadonly || e.effect || e.dep || e.deps || e.subs);
}
function P(e) {
return e === "" ? "#000000" : e === "transparent" ? "#FFFFFF00" : b(e) ?? e;
}
function F(r, i = /* @__PURE__ */ new WeakSet()) {
let a = t(r);
if (!M(a) || i.has(a)) return a;
i.add(a);
for (let t in a) {
let r = e(a[t]) ? n(a[t]) : a[t];
if (t === "color" || t === "backgroundColor") {
typeof r == "string" && (a[t] = P(r));
continue;
}
if (t === "stroke") {
typeof r == "string" ? a[t] = P(r) : M(r) && !N(r) && F(r, i);
continue;
}
if (Array.isArray(r)) {
for (let e of r) M(e) && !N(e) && F(e, i);
continue;
}
M(r) && !N(r) && F(r, i);
}
return a;
}
function fe(e) {
let t = e?.length ?? 0;
if (t < 2) return {
x1: 0,
y1: 0,
x2: 0,
y2: 0,
slope: 0,
trend: 0
};
let n = 0, r = 0, i = 0, a = 0;
for (let { x: t, y: o } of e) n += t, r += o, i += t * o, a += t * t;
let o = t * a - n * n || 1, s = (t * i - n * r) / o, c = (r - s * n) / t, l = e[0].x, u = e[t - 1].x, d = s * l + c, f = s * u + c, p = 0, m = 0, h = 0, g = 0;
for (let n = 0; n < t; n += 1) p += n, m += e[n].value, h += n * e[n].value, g += n * n;
let _ = t * g - p * p || 1, v = (t * h - p * m) / _, y = (m - v * p) / t, b = y, x = v * (t - 1) + y, S = Math.max(Math.abs(b), Math.abs(m / t), Math.abs(x), 1e-9);
return {
x1: l,
y1: d,
x2: u,
y2: f,
slope: s,
trend: (x - b) / S
};
}
function pe(e) {
if (!Array.isArray(e) || e.length === 0) return null;
let t = e.filter(Number.isFinite);
if (t.length === 0) return null;
if (t.length === 1) return t[0];
t.sort((e, t) => e - t);
let n = Math.floor(t.length / 2);
return t.length % 2 == 1 ? t[n] : t[n - 1] / 2 + t[n] / 2;
}
function me(e) {
if (!Array.isArray(e) || e.length === 0) return null;
let t = 0, n = 0;
for (let r of e) Number.isFinite(r) && (n += 1, t = t * ((n - 1) / n) + r / n);
return n === 0 ? null : t;
}
function he(e) {
let t = [];
for (let n = 0; n < e.length; n += 1) t.push(`${h(e[n].x)},${h(e[n].y)} `);
return t.join(" ").trim();
}
function ge(e, t = null) {
let n = (e) => e && e.value !== null && e.value !== void 0 && Number.isFinite(e.x) && Number.isFinite(e.y), r = [], i = [];
for (let t of e) n(t) ? i.push(t) : (i.length && r.push(i), i = []);
return i.length && r.push(i), r.map((e) => {
if (!e.length) return "";
let n = [`${h(e[0].x)},${h(e[0].y)}`];
for (let t = 1; t < e.length; t += 1) {
let r = e[t - 1], i = e[t];
n.push(`L${h(i.x)},${h(r.y)}`, `L${h(i.x)},${h(i.y)}`);
}
return t != null && (n.unshift(`${h(e[0].x)},${h(t)}`), n.push(`${h(e.at(-1).x)},${h(t)}`)), n.join(" ");
}).filter(Boolean).join(";");
}
function I(e) {
if (e.length < 2) return "0,0";
let t = e.length - 1, n = [`${h(e[0].x)},${h(e[0].y)}`], r = [], i = [], a = [], o = [];
for (let n = 0; n < t; n += 1) r[n] = e[n + 1].x - e[n].x, i[n] = e[n + 1].y - e[n].y, a[n] = i[n] / r[n];
o[0] = a[0], o[t] = a[t - 1];
for (let e = 1; e < t; e += 1) if (a[e - 1] * a[e] <= 0) o[e] = 0;
else {
let t = 2 * a[e - 1] * a[e] / (a[e - 1] + a[e]);
o[e] = t;
}
for (let r = 0; r < t; r += 1) {
let t = e[r].x, i = e[r].y, a = e[r + 1].x, s = e[r + 1].y, c = o[r], l = o[r + 1], u = t + (a - t) / 3, d = i + c * (a - t) / 3, f = a - (a - t) / 3, p = s - l * (a - t) / 3;
n.push(`C ${h(u)},${h(d)} ${h(f)},${h(p)} ${h(a)},${h(s)}`);
}
return n.join(" ");
}
function L(e, t = .2) {
function n(e, t) {
let n = t.x - e.x, r = t.y - e.y;
return {
length: Math.sqrt(n ** 2 + r ** 2),
angle: Math.atan2(r, n)
};
}
function r(e, r, i, a) {
let o = n(r || e, i || e), s = o.angle + (a ? Math.PI : 0), c = o.length * t;
return {
x: e.x + Math.cos(s) * c,
y: e.y + Math.sin(s) * c
};
}
function i(e, t, n) {
let i = r(n[t - 1], n[t - 2], e), a = r(e, n[t - 1], n[t + 1], !0);
return `C ${h(i.x)},${h(i.y)} ${h(a.x)},${h(a.y)} ${h(e.x)},${h(e.y)}`;
}
return e.filter((e) => !!e).reduce((e, t, n, r) => n === 0 ? `${h(t.x)},${h(t.y)} ` : `${e} ${i(t, n, r)} `, "");
}
function _e() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) {
let t = Math.random() * 16 | 0;
return (e == "x" ? t : t & 3 | 8).toString(16);
});
}
function R(e, t = !1, n = 16, r = !1) {
let i = 0, a = t ? n : 0, o = r ? "center" : "middle";
return e.center.endX > e.cx ? (i = e.center.endX + n + a, o = r ? "left" : "start") : e.center.endX < e.cx ? (i = e.center.endX - n - a, o = r ? "right" : "end") : (i = e.centerX + a, o = r ? "center" : "middle"), {
x: i,
anchor: o
};
}
function z(e, t = 16, n = 16) {
return e.center.endY > e.cy ? e.center.endY + n : e.center.endY < e.cy ? e.center.endY - t : e.center.endY;
}
function ve({ initX: e, initY: t, offset: n, centerX: r, centerY: i }) {
let a = Math.atan2(t - i, e - r);
return {
x: e + n * Math.cos(a),
y: t + n * Math.sin(a)
};
}
function B(e) {
let t = document.createElementNS("http://www.w3.org/2000/svg", "path");
t.setAttribute("d", e);
let n = t.getTotalLength(), r = 0, i = n, a = n / 2, o = .01;
for (; i - r > o;) {
let e = (r + i) / 2, n = t.getPointAtLength(e).x;
if (Math.abs(n - a) < o) {
a = e;
break;
}
n < a ? r = e : i = e;
}
let { x: s, y: c } = t.getPointAtLength(a);
return {
x: s,
y: c
};
}
function ye(e, t = !1, n = 16, r = 16, i = !1, a = !1, o = 0, s = 12, c = !1) {
let { x: l } = B(e.path), u = `${R(e).x},${z(e, n, r) - 4} `, d = "", f, p;
l > e.cx ? (f = R(e).x - s, p = z(e, n, r) - 4, d = `${f},${p}`) : (e.cx, f = R(e).x + s, p = z(e, n, r) - 4, d = `${f},${p}`);
let m = ` ${e.center.endX},${e.center.endY}`;
return c ? a ? `M${d} Q${d} ${m}` : `M${u} Q${d} ${m}` : `M${a ? "" : u}${d}${m}`;
}
function be(e) {
return ![
null,
void 0,
NaN
].includes(e);
}
function xe(e, t) {
return [...e].map((e) => e[t]).reduce((e, t) => e + t, 0);
}
function Se(e, t = !0, n = !1) {
if (!e.length) return "M0,0";
let r = "";
return e.forEach((e) => {
if (!e) return "";
r += `${e.x},${e.y} `;
}), n ? r.trim() : `M${r}${t ? "Z" : ""}`;
}
function Ce({ csvContent: e, title: t = "vue-data-ui" }) {
let n = encodeURI(e), r = document.createElement("a");
r.setAttribute("href", n), r.setAttribute("download", `${t}.csv`), document.body.appendChild(r), r.click(), r.remove(), window.URL.revokeObjectURL(n);
}
function we(e) {
return `data:text/csv;charset=utf-8,${e.map((e) => e.join(",")).join("\n")}`;
}
function Te(e, t) {
if (!/^#([0-9A-F]{3}){1,2}([0-9A-F]{2})?$/i.test(e)) return console.warn("lightenHexColor : Invalid hex color format"), "#000000";
let n = e.replace("#", "");
n.length === 3 && (n = n.split("").map((e) => e + e).join(""));
let r = parseInt(n.substring(0, 2), 16), i = parseInt(n.substring(2, 4), 16), a = parseInt(n.substring(4, 6), 16), o = Math.min(255, r + (255 - r) * t), s = Math.min(255, i + (255 - i) * t), c = Math.min(255, a + (255 - a) * t), l = `#${Math.round(o).toString(16).padStart(2, "0")}${Math.round(s).toString(16).padStart(2, "0")}${Math.round(c).toString(16).padStart(2, "0")}`;
return n.length === 8 ? l + n.substring(6, 8) : l;
}
function Ee(e, t) {
if (!/^#([0-9A-F]{3}){1,2}([0-9A-F]{2})?$/i.test(e)) return console.warn("darkenHexColor: Invalid hex color format"), "#000000";
let n = e.replace("#", "");
n.length === 3 && (n = n.split("").map((e) => e + e).join(""));
let r = parseInt(n.substring(0, 2), 16), i = parseInt(n.substring(2, 4), 16), a = parseInt(n.substring(4, 6), 16), o = Math.max(0, r - r * t), s = Math.max(0, i - i * t), c = Math.max(0, a - a * t), l = `#${Math.round(o).toString(16).padStart(2, "0")}${Math.round(s).toString(16).padStart(2, "0")}${Math.round(c).toString(16).padStart(2, "0")}`;
return n.length === 8 ? l + n.substring(6, 8) : l;
}
function V(e, t) {
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
}
function De(e, t, n, r = !1) {
let i = r ? t - e : V(t - e, !1), a = r ? i / (n - 1) : V(i / (n - 1), !0), o = Math.floor(e / a) * a, s = Math.ceil(t / a) * a, c = [];
for (let e = o; e <= s; e += a) c.push(e);
return {
min: o,
max: s,
tickSize: a,
ticks: c
};
}
function Oe(e, t, n, r = !1) {
let i = r ? t - e : V(t - e, !1), a = r ? i / (n - 1) : V(i / (n - 1), !0), o = Math.floor(e / a) * a, s = Math.ceil(t / a) * a, c = [], l = o;
for (; l <= s;) l >= e && l <= t && c.push(l), l += a;
return c[0] !== e && (c[0] = e), c[c.length - 1] !== t && (c[c.length - 1] = t), {
min: e,
max: t,
tickSize: a,
ticks: c
};
}
function ke(e) {
if (typeof e != "string") return console.error("hexColor must be a string"), "#000000ff";
let t = e.trim();
if (!t.startsWith("#")) return console.error("hexColor must start with #"), "#000000ff";
let n = t.slice(1);
return [
3,
4,
6,
8
].includes(n.length) ? /^[0-9a-fA-F]+$/.test(n) ? n.length === 3 || n.length === 4 ? `#${n.split("").map((e) => e + e).join("")}` : t : (console.error("hexColor contains invalid characters"), "#000000ff") : (console.error("hexColor must be #RGB, #RGBA, #RRGGBB, or #RRGGBBAA"), "#000000ff");
}
var H = (e) => {
let t = ke(e);
return {
r: parseInt(t.substring(1, 3), 16),
g: parseInt(t.substring(3, 5), 16),
b: parseInt(t.substring(5, 7), 16),
a: t.length === 9 ? parseInt(t.substring(7, 9), 16) / 255 : 1
};
}, Ae = ({ r: e, g: t, b: n, a: r = 1 }) => {
let i = U(r, 0, 1), a = `#${k(e)}${k(t)}${k(n)}`;
return i < 1 ? `${a}${k(i * 255)}` : a;
};
function U(e, t, n) {
return Math.min(Math.max(e, t), n);
}
function je(e, t, n, r, i) {
let a = H(e), o = H(t);
i = Math.min(Math.max(i, n), r);
let s = (i - n) / (r - n), c = {
r: Math.round(a.r + (o.r - a.r) * s),
g: Math.round(a.g + (o.g - a.g) * s),
b: Math.round(a.b + (o.b - a.b) * s)
}, l = a.a + (o.a - a.a) * s;
return Ae({
...c,
a: l
});
}
function Me({ colors: e, ratio: t }) {
if (!Array.isArray(e)) throw Error("colors must be an array");
if (!e.length) throw Error("colors must contain at least 1 hex color");
let n = (e) => Math.round(U(e, 0, 255)).toString(16).padStart(2, "0"), r = ({ r: e, g: t, b: r, a: i = 1 }) => `#${n(e)}${n(t)}${n(r)}${n(U(i, 0, 1) * 255)}`;
if (e.length === 1) return r(H(e[0]));
let i = U(t, 0, 1), a = e.map(H), o = a.length - 1, s = i * o, c = Math.min(Math.floor(s), o - 1), l = s - c, u = a[c], d = a[c + 1];
return r({
r: u.r + (d.r - u.r) * l,
g: u.g + (d.g - u.g) * l,
b: u.b + (d.b - u.b) * l,
a: u.a + (d.a - u.a) * l
});
}
function Ne({ p: e = "", v: t, s: n = "", r = 0, space: i = !1, isAnimating: a = !1, regex: o = /[^%]/g, replacement: s = "-", locale: c = null }) {
let l = c ? Number(Number(t).toFixed(r)).toLocaleString(c) : Number(Number(t).toFixed(r)).toLocaleString(), u = l === Infinity ? "∞" : l === -Infinity ? "-∞" : l, d = `${e ?? ""}${i ? " " : ""}${[void 0, null].includes(t) ? "-" : u}${i ? " " : ""}${n ?? ""}`;
return a ? d.replace(o, s) : d;
}
function Pe({ source: e, length: t = 3 }) {
if (!e && e !== 0) return "";
e = String(e);
let n = e.length > 1 ? e.split(" ") : [e];
if (n.length === 1 && n[0].length === 1) return String(e).toUpperCase();
if (n.length === 1) return e.slice(0, t).toUpperCase();
{
let e = [];
return n.forEach((n, r) => {
r < t && e.push(n.slice(0, 1));
}), e.join().replaceAll(",", "").toUpperCase();
}
}
function Fe(e) {
return !!e && typeof e == "function";
}
function Ie(e) {
return typeof e.apply(null, arguments) == "string";
}
function Le(e) {
return Array.isArray(e) ? e.length === 0 : !e || Object.keys(e).length === 0;
}
function Re({ componentName: e, type: t, property: n = "", index: i = "", key: a = "", warn: o = !0, debug: s = !0 }) {
if (!s) return;
let c = `\n> ${r[t].replace("#COMP#", e).replace("#ATTR#", n).replace("#INDX#", i).replace("#KEY#", a)}\n`;
if (o) console.warn(c);
else throw Error(c);
}
function ze({ points: e, a: t, b: n, angleStep: r, startX: i, startY: a }) {
let o = [];
for (let s = 0; s < e; s++) {
let e = r * s, c = t + n * e, l = c * Math.cos(e) + i, u = c * Math.sin(e) + a;
o.push({
x: l,
y: u
});
}
return o;
}
function Be(e) {
let t = Infinity, n = Infinity, r = -Infinity, i = -Infinity;
for (let a of e) a.x < t && (t = a.x), a.y < n && (n = a.y), a.x > r && (r = a.x), a.y > i && (i = a.y);
return {
minX: t,
minY: n,
maxX: r,
maxY: i,
width: r - t || 1,
height: i - n || 1
};
}
function Ve(e) {
if (!e.length) return "";
let t = `M${e[0].x} ${e[0].y}`;
for (let n = 1; n < e.length - 2; n += 2) {
let r = e[n - 1], i = e[n], a = e[n + 1], o = e[n + 2], s = (r.x + i.x) / 2, c = (r.y + i.y) / 2, l = (i.x + a.x) / 2, u = (i.y + a.y) / 2, d = (a.x + o.x) / 2, f = (a.y + o.y) / 2;
t += ` C${s} ${c}, ${l} ${u}, ${d} ${f}`;
}
return t;
}
function He({ maxPoints: e, a: t = 6, b: n = 6, angleStep: r = .07, startX: i, startY: a, boxWidth: o, boxHeight: s, padding: c = 12 }) {
let l = ze({
points: e,
a: t,
b: n,
angleStep: r,
startX: 0,
startY: 0
}), { minX: u, minY: d, maxX: f, maxY: p, width: m, height: h } = Be(l), g = (u + f) / 2, _ = (d + p) / 2, v = Math.max(1, o - 2 * c), y = Math.max(1, s - 2 * c), b = Math.min(v / m, y / h), x = i - g * b, S = a - _ * b;
return function(e) {
let t = Math.max(2, Math.min(Math.round(e), l.length));
return Ve(l.slice(0, t).map((e) => ({
x: e.x * b + x,
y: e.y * b + S
})));
};
}
function Ue({ datasetObject: e, requiredAttributes: t }) {
let n = [];
return t.forEach((t) => {
Object.hasOwn(e, t) || n.push(t);
}), n;
}
var W = {
ALICEBLUE: "#F0F8FF",
ANTIQUEWHITE: "#FAEBD7",
AQUA: "#00FFFF",
AQUAMARINE: "#7FFFD4",
AZURE: "#F0FFFF",
BEIGE: "#F5F5DC",
BISQUE: "#FFE4C4",
BLACK: "#000000",
BLANCHEDALMOND: "#FFEBCD",
BLUE: "#0000FF",
BLUEVIOLET: "#8A2BE2",
BROWN: "#A52A2A",
BURLYWOOD: "#DEB887",
CADETBLUE: "#5F9EA0",
CHARTREUSE: "#7FFF00",
CHOCOLATE: "#D2691E",
CORAL: "#FF7F50",
CORNFLOWERBLUE: "#6495ED",
CORNSILK: "#FFF8DC",
CRIMSON: "#DC143C",
CYAN: "#00FFFF",
DARKBLUE: "#00008B",
DARKCYAN: "#008B8B",
DARKGOLDENROD: "#B8860B",
DARKGREY: "#A9A9A9",
DARKGREEN: "#006400",
DARKKHAKI: "#BDB76B",
DARKMAGENTA: "#8B008B",
DARKOLIVEGREEN: "#556B2F",
DARKORANGE: "#FF8C00",
DARKORCHID: "#9932CC",
DARKRED: "#8B0000",
DARKSALMON: "#E9967A",
DARKSEAGREEN: "#8FBC8F",
DARKSLATEBLUE: "#483D8B",
DARKSLATEGREY: "#2F4F4F",
DARKTURQUOISE: "#00CED1",
DARKVIOLET: "#9400D3",
DEEPPINK: "#FF1493",
DEEPSKYBLUE: "#00BFFF",
DIMGRAY: "#696969",
DODGERBLUE: "#1E90FF",
FIREBRICK: "#B22222",
FLORALWHITE: "#FFFAF0",
FORESTGREEN: "#228B22",
FUCHSIA: "#FF00FF",
GAINSBORO: "#DCDCDC",
GHOSTWHITE: "#F8F8FF",
GOLD: "#FFD700",
GOLDENROD: "#DAA520",
GREY: "#808080",
GREEN: "#008000",
GREENYELLOW: "#ADFF2F",
HONEYDEW: "#F0FFF0",
HOTPINK: "#FF69B4",
INDIANRED: "#CD5C5C",
INDIGO: "#4B0082",
IVORY: "#FFFFF0",
KHAKI: "#F0E68C",
LAVENDER: "#E6E6FA",
LAVENDERBLUSH: "#FFF0F5",
LAWNGREEN: "#7CFC00",
LEMONCHIFFON: "#FFFACD",
LIGHTBLUE: "#ADD8E6",
LIGHTCORAL: "#F08080",
LIGHTCYAN: "#E0FFFF",
LIGHTGOLDENRODYELLOW: "#FAFAD2",
LIGHTGREY: "#D3D3D3",
LIGHTGREEN: "#90EE90",
LIGHTPINK: "#FFB6C1",
LIGHTSALMON: "#FFA07A",
LIGHTSEAGREEN: "#20B2AA",
LIGHTSKYBLUE: "#87CEFA",
LIGHTSLATEGREY: "#778899",
LIGHTSTEELBLUE: "#B0C4DE",
LIGHTYELLOW: "#FFFFE0",
LIME: "#00FF00",
LIMEGREEN: "#32CD32",
LINEN: "#FAF0E6",
MAGENTA: "#FF00FF",
MAROON: "#800000",
MEDIUMAQUAMARINE: "#66CDAA",
MEDIUMBLUE: "#0000CD",
MEDIUMORCHID: "#BA55D3",
MEDIUMPURPLE: "#9370D8",
MEDIUMSEAGREEN: "#3CB371",
MEDIUMSLATEBLUE: "#7B68EE",
MEDIUMSPRINGGREEN: "#00FA9A",
MEDIUMTURQUOISE: "#48D1CC",
MEDIUMVIOLETRED: "#C71585",
MIDNIGHTBLUE: "#191970",
MINTCREAM: "#F5FFFA",
MISTYROSE: "#FFE4E1",
MOCCASIN: "#FFE4B5",
NAVAJOWHITE: "#FFDEAD",
NAVY: "#000080",
OLDLACE: "#FDF5E6",
OLIVE: "#808000",
OLIVEDRAB: "#6B8E23",
ORANGE: "#FFA500",
ORANGERED: "#FF4500",
ORCHID: "#DA70D6",
PALEGOLDENROD: "#EEE8AA",
PALEGREEN: "#98FB98",
PALETURQUOISE: "#AFEEEE",
PALEVIOLETRED: "#D87093",
PAPAYAWHIP: "#FFEFD5",
PEACHPUFF: "#FFDAB9",
PERU: "#CD853F",
PINK: "#FFC0CB",
PLUM: "#DDA0DD",
POWDERBLUE: "#B0E0E6",
PURPLE: "#800080",
RED: "#FF0000",
ROSYBROWN: "#BC8F8F",
ROYALBLUE: "#4169E1",
SADDLEBROWN: "#8B4513",
SALMON: "#FA8072",
SANDYBROWN: "#F4A460",
SEAGREEN: "#2E8B57",
SEASHELL: "#FFF5EE",
SIENNA: "#A0522D",
SILVER: "#C0C0C0",
SKYBLUE: "#87CEEB",
SLATEBLUE: "#6A5ACD",
SLATEGREY: "#708090",
SNOW: "#FFFAFA",
SPRINGGREEN: "#00FF7F",
STEELBLUE: "#4682B4",
TAN: "#D2B48C",
TEAL: "#008080",
THISTLE: "#D8BFD8",
TOMATO: "#FF6347",
TURQUOISE: "#40E0D0",
VIOLET: "#EE82EE",
WHEAT: "#F5DEB3",
WHITE: "#FFFFFF",
WHITESMOKE: "#F5F5F5",
YELLOW: "#FFFF00",
YELLOWGREEN: "#9ACD32",
REBECCAPURPLE: "#663399"
};
function We(t) {
let r = e?.(t) ? n(t) : t;
if (typeof r != "string") return r;
let i = r.trim();
if (i === "" || i[0] === "#") return i;
if (i.toLowerCase() === "transparent") return "#FFFFFF00";
let a = i.toUpperCase(), o = a.replace(/GRAY/g, "GREY");
return W[a] || W[o] || i;
}
var G = "http://www.w3.org/2000/svg";
function Ge(e) {
if (e.length < 2) return 0;
let t = 0, n = 0;
for (let r = 1; r < e.length; r++) {
let i = e[r - 1], a = e[r];
if ([
null,
void 0,
0,
Infinity,
-Infinity
].includes(i)) continue;
let o = (a - i) / Math.abs(i) * 100;
t += o, n++;
}
return n === 0 ? 0 : t / n;
}
function K({ content: e, fontSize: t, fill: n, x: r, y: i, translateY: a = !1 }) {
let o = e.split("\n"), s = o.length * t, c = a ? (s - t) / 2 : 0;
return o.map((e, a) => `<tspan x="${r}" y="${i - c + a * t}" fill="${n}">${e}</tspan>`).join("");
}
function Ke(e) {
return f(e) ? (K({
content: e,
fontSize: 1,
fill: "",
x: 0,
y: 0
}).match(/<tspan\b/g) || []).length : 1;
}
function qe({ content: e, fontSize: t, fill: n, x: r, autoOffset: i = !1 }) {
let a = e.split("\n"), o = i ? (a.length - 1) * t / 2 : 0;
return a.map((e, i) => `<tspan x="${r}" dy="${i === 0 ? -o : t}" fill="${n}">${e}</tspan>`).join("");
}
function Je({ content: e, fontSize: t, fill: n, maxWords: r, x: i, y: a }) {
function o(e, t) {
let n = e.split(" "), r = [];
for (let e = 0; e < n.length; e += t) r.push(n.slice(e, e + t).join(" "));
return r;
}
let s = "";
return o(e, r).forEach((e, r) => {
let o = `<tspan x="${i}" y="${a + r * t}" fill="${n}">${e}</tspan>`;
s += o;
}), s;
}
function Ye(e) {
return e.length ? e.map((e) => b(e)) : [];
}
function Xe(e, t = null) {
let n = e.replace(/[\p{P}\p{S}]+/gu, " ").trim(), r = (/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Thai}\p{Script=Lao}\p{Script=Khmer}\p{Script=Tibetan}\p{Script=Myanmar}\p{Script=Devanagari}]/u.test(e) ? [...n] : n.split(/\s+/)).filter((e) => e.trim().length > 0).reduce((e, t) => (e[t] ? e[t] += 1 : e[t] = 1, e), {});
return Object.keys(r).map((e) => {
let n = e;
return typeof t == "function" && typeof t(e) == "string" && (n = t(e)), {
name: n,
value: r[e]
};
});
}
function Ze(e) {
let t = e.reduce((e, t) => e + (t.stackRatio || 0), 0), n = e.filter((e) => e.stackRatio === void 0).length, r = 1 - t, i = n > 0 ? r / n : 0, a = e.map((e) => ({
...e,
stackRatio: e.stackRatio === void 0 ? i : e.stackRatio
})), o = 0;
return a = a.map((e, t) => (o += e.stackRatio, {
...e,
stackIndex: t,
cumulatedStackRatio: o
})), a;
}
function Qe(e) {
function t(e, t, n, r) {
let i = n - e, a = r - t;
return Math.sqrt(i * i + a * a);
}
function n(e, n, r, i) {
let a = 0, o = e.x, s = e.y;
for (let c = 1; c <= 100; c += 1) {
let l = c / 100, u = 1 - l, d = u * u, f = l * l, p = d * u * e.x + 3 * d * l * n.x + 3 * u * f * r.x + f * l * i.x, m = d * u * e.y + 3 * d * l * n.y + 3 * u * f * r.y + f * l * i.y;
a += t(o, s, p, m), o = p, s = m;
}
return a;
}
let r = e.match(/[a-zA-Z][^a-zA-Z]*/g), i = 0, a = 0, o = 0, s = 0, c = 0;
return r.forEach((e) => {
let r = e[0], l = e.slice(1).trim().split(/[\s,]+/).map(Number), u = 0;
switch (r) {
case "M":
for (i = l[u++], a = l[u++], o = i, s = a; u < l.length;) c += t(i, a, l[u], l[u + 1]), i = l[u++], a = l[u++];
break;
case "L":
for (; u < l.length;) c += t(i, a, l[u], l[u + 1]), i = l[u++], a = l[u++];
break;
case "H":
for (; u < l.length;) c += t(i, a, l[u], a), i = l[u++];
break;
case "V":
for (; u < l.length;) c += t(i, a, i, l[u]), a = l[u++];
break;
case "C":
for (; u < l.length;) c += n({
x: i,
y: a
}, {
x: l[u],
y: l[u + 1]
}, {
x: l[u + 2],
y: l[u + 3]
}, {
x: l[u + 4],
y: l[u + 5]
}), i = l[u + 4], a = l[u + 5], u += 6;
break;
case "Z": c += t(i, a, o, s), i = o, a = s;
}
}), c;
}
function $e({ relator: e, adjuster: t, source: n, threshold: r = 0, fallback: i, max: a = 24 }) {
let o = e / (t / n);
return o > a ? a : o < r ? i : o;
}
function et(e) {
return e.reduce((e, t) => (t.series.forEach((t, n) => {
![
void 0,
null,
Infinity,
-Infinity
].includes(t) && !isNaN(t) && (e[n] = (e[n] || 0) + t);
}), e), []);
}
function tt(e, { value: t, config: n }) {
let r = !1, i = t;
if (typeof e == "function") try {
i = e({
value: t,
config: n
}), ["number", "string"].includes(typeof i) ? r = !0 : Array.isArray(i) ? (i = i.map(String).join("\n"), r = !0) : i = t;
} catch (e) {
console.warn("Formatter could not be applied:", e), r = !1;
}
return {
isValid: r,
value: i
};
}
function nt(e, t, n, r) {
let { isValid: i, value: a } = tt(e, {
value: t,
config: r
});
return i ? a : n;
}
function rt(e, t) {
return t.split(".").every((t) => typeof e == "object" && e && t in e ? (e = e[t], !0) : !1);
}
function it(e, t = [], n = !1) {
function r(e) {
return n && e === null ? null : typeof e == "string" && isNaN(Number(e)) || typeof e == "number" && isFinite(e) ? e : 0;
}
function i(e) {
if (Array.isArray(e)) return e.map((e) => i(e));
if (typeof e == "object" && e) {
let n = { ...e };
return t.forEach((e) => {
n.hasOwnProperty(e) && !(/* @__PURE__ */ "NAME.name.TITLE.title.DESCRIPTION.description.LABEL.label.TIME.time.PERIOD.period.MONTH.month.YEAR.year.MONTHS.months.YEARS.years.DAY.day.DAYS.days.HOUR.hour.HOURS.hours".split(".")).includes(e) && Array.isArray(n[e]) && (n[e] = i(n[e]));
}), Object.fromEntries(Object.entries(n).map(([e, t]) => [e, i(t)]));
}
return r(e);
}
return i(e);
}
function at(e, t = 100) {
return e.length === 9 ? e.substring(0, 7) + y[t] : e + y[t];
}
function ot({ series: e, center: t, maxRadius: n, hasGhost: r = !1 }) {
let i = 360 / (e.length - +!!r);
return e.map((e, r) => {
let a = e * n, o = r * i, s = o + i, c = o + i / 2, l = j(o) - j(90), u = j(s) - j(90), d = j(c) - j(90), f = t.x + a * Math.cos(l), p = t.y + a * Math.sin(l), m = t.x + a * Math.cos(u), h = t.y + a * Math.sin(u), g = t.x + a * Math.cos(d), _ = t.y + a * Math.sin(d);
return {
path: `
M ${t.x} ${t.y}
L ${f} ${p}
A ${a} ${a} 0 0 1 ${m} ${h}
Z
`.trim(),
middlePoint: {
x: g,
y: _
},
radius: a
};
});
}
function st({ data: e, threshold: t }) {
if (t >= e.length || t < 3) return e;
let n = [], r = (e.length - 2) / (t - 2), i = 0;
n.push(e[i]);
for (let a = 0; a < t - 2; a += 1) {
let t = Math.floor((a + 1) * r) + 1, o = Math.min(Math.floor((a + 2) * r) + 1, e.length), s = e.slice(t, o), c = 0, l = 0;
for (let e of s) c += e.x, l += e.y;
c /= s.length, l /= s.length;
let u = -1, d = i;
for (let n = t; n < o; n += 1) {
let t = Math.abs((e[i].x - c) * (e[n].y - e[i].y) - (e[i].x - e[n].x) * (l - e[i].y));
t > u && (u = t, d = n);
}
n.push(e[d]), i = d;
}
return n.push(e[e.length - 1]), n;
}
function ct({ data: e, threshold: t }) {
if (t >= e.length || t < 3) return e;
let n = [], r = (e.length - 2) / (t - 2), i = 0;
n.push(e[i]);
for (let a = 0; a < t - 2; a += 1) {
let t = Math.floor((a + 1) * r) + 1, o = Math.min(Math.floor((a + 2) * r) + 1, e.length), s = e.slice(t, o), c = s.reduce((e, t) => e + t, 0) / s.length, l = -1, u = i;
for (let n = t; n < o; n += 1) {
let t = Math.abs((e[i] - c) * (n - i));
t > l && (l = t, u = n);
}
n.push(e[u]), i = u;
}
return n.push(e[e.length - 1]), n;
}
function lt({ data: e, threshold: t, key: n = "value" }) {
if (t >= e.length || t < 3) return e;
let r = [], i = (e.length - 2) / (t - 2), a = 0;
r.push(e[a]);
for (let o = 0; o < t - 2; o += 1) {
let t = Math.floor((o + 1) * i) + 1, s = Math.min(Math.floor((o + 2) * i) + 1, e.length), c = e.slice(t, s), l = c.reduce((e, t) => e + t[n], 0) / c.length, u = -1, d = a;
for (let r = t; r < s; r += 1) {
let t = Math.abs((e[a][n] - l) * (r - a));
t > u && (u = t, d = r);
}
r.push(e[d]), a = d;
}
return r.push(e[e.length - 1]), r;
}
function ut({ radius: e, centerX: t, centerY: n, percentage: r }) {
r = Math.max(0, Math.min(1, r));
let i = r * Math.PI;
return `M ${t},${n} L ${t - e},${n} A ${e},${e} 0 0 1 ${t - e * Math.cos(i)},${n - e * Math.sin(i)} Z`.trim();
}
function dt({ svgElement: e, x: t, y: n, offsetY: r = 0, element: i }) {
if (!e || !i) return {
top: 0,
left: 0
};
let a = e.createSVGPoint();
a.x = t, a.y = n;
let o = a.matrixTransform(e.getScreenCTM()), s = e.getBoundingClientRect(), c = i.getBoundingClientRect(), l = 0, u = 0;
return l = o.x - c.width / 2 < s.left ? 0 : o.x + c.width > s.right ? -c.width : -c.width / 2, u = o.y - r - c.height < s.top ? r : -c.height - r, {
top: o.y + u,
left: o.x + l
};
}
function ft({ svgElement: e, x: t, y: n, element: r, position: i }) {
if (!e || !r) return {
top: 0,
left: 0
};
let a = e.createSVGPoint();
a.x = t, a.y = n;
let o = a.matrixTransform(e.getScreenCTM()), { height: s, width: c } = r.getBoundingClientRect(), l = i === "right" ? 0 : -c, u = -(s / 2);
return {
top: o.y + u,
left: o.x + l
};
}
function q(e) {
if (typeof e != "object" || !e) return e;
if (e instanceof Date) return new Date(e.getTime());
if (e instanceof RegExp) return new RegExp(e.source, e.flags);
if (e instanceof Map) {
let t = /* @__PURE__ */ new Map();
for (let [n, r] of e.entries()) t.set(n, q(r));
return t;
}
if (e instanceof Set) {
let t = /* @__PURE__ */ new Set();
for (let n of e.values()) t.add(q(n));
return t;
}
if (Array.isArray(e)) return e.map((e) => q(e));
let t = {};
for (let n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = q(e[n]));
return t;
}
function pt(e) {
let t = [], n = [];
for (let r of e) !r || r.value == null || Number.isNaN(r.x) || Number.isNaN(r.y) ? (n.length && t.push(n), n = []) : n.push(r);
return n.length && t.push(n), t;
}
function mt(e, t) {
let n = e.filter((e) => !!e);
if (!n[0]) return [
-10,
-10,
"",
-10,
-10
].toString();
let r = {
x: n[0].x,
y: t
}, i = {
x: n.at(-1).x,
y: t
}, a = [];
return n.forEach((e) => {
a.push(`${e.x},${e.y} `);
}), [
r.x,
r.y,
...a,
i.x,
i.y
].toString();
}
function ht(e, t) {
if (!e[0]) return [
-10,
-10,
"",
-10,
-10
].toString();
let n = pt(e);
return n.length ? n.map((e) => {
let n = {
x: e[0].x,
y: t
}, r = {
x: e.at(-1).x,
y: t
}, i = [];
return e.forEach((e) => {
i.push(`${e.x},${e.y} `);
}), [
n.x,
n.y,
...i,
r.x,
r.y
].toString();
}).join(";") : "";
}
function gt(e) {
let t = [], n = [];
for (let r of e) r.value == null || Number.isNaN(r.x) || Number.isNaN(r.y) ? (n.length > 1 && t.push(n), n = []) : n.push(r);
return n.length > 1 && t.push(n), t;
}
function _t(e) {
let t = "", n = !1;
for (let r = 0; r < e.length; r++) {
let i = e[r];
if (!X(i)) continue;
let a = `${h(i.x)},${h(i.y)}`;
if (!n) t += a, n = !0;
else {
let n = e[r - 1], i = X(n) ? "L" : "M";
t += `${i}${a}`;
}
t += " ";
}
return t.trim();
}
function J(e) {
let t = Number(e);
return Number.isFinite(t) ? Math.trunc(t) : null;
}
function Y(e) {
return `${h(e.x)},${h(e.y)}`;
}
function vt(e, t = []) {
let n = Array.isArray(e) ? e : [], r = n.length, i = /* @__PURE__ */ new Set(), a = r - 1;
for (let e of Array.isArray(t) ? t : []) {
let t = J(e);
t !== null && (t > 0 && i.add(t - 1), t < a && i.add(t));
}
let o = [], s = [], c = !1, l = !1, u = () => {
s.length >= 2 && o.push({
path: s.map((e, t) => t === 0 ? e : `L${e}`).join(" "),
dashed: c
}), s = [], l = !1;
};
for (let e = 0; e < r; e += 1) {
let t = n[e];
if (!X(t)) {
u();
continue;
}
let r = Y(t);
if (!l) {
s = [r], l = !0;
continue;
}
let a = n[e - 1];
if (!X(a)) {
u(), s = [r], l = !0;
continue;
}
let o = i.has(e - 1);
if (s.length === 1) {
c = o, s.push(r);
continue;
}
if (o !== c) {
let e = Y(a);
u(), c = o, s = [e, r], l = !0;
} else s.push(r);
}
return u(), o;
}
function yt(e) {
let t = gt(e);
if (!t.length) return "";
let n = "";
for (let [e, r] of t.entries()) {
if (r.length < 2) continue;
let t = r.length - 1, i = [], a = [], o = [], s = [];
for (let e = 0; e < t; e += 1) i[e] = r[e + 1].x - r[e].x, a[e] = r[e + 1].y - r[e].y, o[e] = a[e] / i[e];
s[0] = o[0], s[t] = o[t - 1];
for (let e = 1; e < t; e += 1) if (o[e - 1] * o[e] <= 0) s[e] = 0;
else {
let t = 2 * o[e - 1] * o[e] / (o[e - 1] + o[e]);
s[e] = t;
}
n += `${e === 0 ? "" : "M"}${h(r[0].x)},${h(r[0].y)} `;
for (let e = 0; e < t; e += 1) {
let t = r[e].x, i = r[e].y, a = r[e + 1].x, o = r[e + 1].y, c = s[e], l = s[e + 1], u = t + (a - t) / 3, d = i + c * (a - t) / 3, f = a - (a - t) / 3, p = o - l * (a - t) / 3;
n += `C${h(u)},${h(d)} ${h(f)},${h(p)} ${h(a)},${h(o)} `;
}
}
return n.trim();
}
function X(e) {
return e != null && e.value != null && Number.isFinite(e.x) && Number.isFinite(e.y);
}
function bt(e, t) {
let n = e - 1, r = /* @__PURE__ */ new Set(), i = Array.isArray(t) ? t : [];
for (let e of i) {
let t = J(e);
t !== null && (t > 0 && r.add(t - 1), t < n && r.add(t));
}
return r;
}
function xt(e) {
let t = [], n = [];
for (let r = 0; r < e.length; r += 1) {
let i = e[r];
X(i) ? n.push(r) : (n.length > 1 && t.push(n), n = []);
}
return n.length > 1 && t.push(n), t;
}
function St(e, t) {
let n = t.map((t) => e[t]), r = n.length - 1, i = [], a = [], o = [], s = [];
for (let e = 0; e < r; e += 1) i[e] = n[e + 1].x - n[e].x, a[e] = n[e + 1].y - n[e].y, o[e] = a[e] / i[e];
s[0] = o[0], s[r] = o[r - 1];
for (let e = 1; e < r; e += 1) o[e - 1] * o[e] <= 0 ? s[e] = 0 : s[e] = 2 * o[e - 1] * o[e] / (o[e - 1] + o[e]);
let c = Array(r);
for (let e = 0; e < r; e += 1) {
let t = n[e].x, r = n[e].y, i = n[e + 1].x, a = n[e + 1].y, o = s[e], l = s[e + 1], u = t + (i - t) / 3, d = r + o * (i - t) / 3, f = i - (i - t) / 3, p = a - l * (i - t) / 3;
c[e] = `C${h(u)},${h(d)} ${h(f)},${h(p)} ${h(i)},${h(a)}`;
}
return {
startCoord: Y(n[0]),
commands: c
};
}
function Ct(e) {
let t = [];
if (!e.length) return t;
let n = 0, r = e[0];
for (let i = 1; i < e.length; i += 1) e[i] !== r && (t.push({
startEdge: n,
endEdge: i - 1,
dashed: r
}), n = i, r = e[i]);
return t.push({
startEdge: n,
endEdge: e.length - 1,
dashed: r
}), t;
}
function wt(e, t = []) {
let n = Array.isArray(e) ? e : [];
if (n.length < 2) return [];
let r = bt(n.length, t), i = xt(n);
if (!i.length) return [];
let a = [];
for (let e of i) {
let { startCoord: t, commands: i } = St(n, e), o = Array(i.length);
for (let t = 0; t < i.length; t += 1) {
let n = e[t];
o[t] = r.has(n);
}
let s = Ct(o);
for (let r of s) {
let o = r.startEdge, s = `${o === 0 ? t : Y(n[e[o]])} ${i.slice(r.startEdge, r.endEdge + 1).join(" ")}`.trim();
a.push({
path: s,
dashed: r.dashed
});
}
}
return a;
}
function Tt(e, t, n = !1, r = !0) {
function i(e) {
let t = [], n = [];
for (let r of e) !r || r.value == null || Number.isNaN(r.x) || Number.isNaN(r.y) ? (n.length > 1 && t.push(n), n = []) : n.push(r);
return n.length > 1 && t.push(n), t;
}
return (n ? i(e) : [e]).map((e) => {
if (e.length < 2) return "";
let n = e.length - 1, i = [], a = [], o = [], s = [];
for (let t = 0; t < n; t += 1) i[t] = e[t + 1].x - e[t].x, a[t] = e[t + 1].y - e[t].y, o[t] = a[t] / i[t];
s[0] = o[0], s[n] = o[n - 1];
for (let e = 1; e < n; e += 1) if (o[e - 1] * o[e] <= 0) s[e] = 0;
else {
let t = 2 * o[e - 1] * o[e] / (o[e - 1] + o[e]);
s[e] = t;
}
let c = `M${e[0].x},${t}`;
c += ` L${e[0].x},${e[0].y}`;
for (let t = 0; t < n; t += 1) {
let n = e[t].x, r = e[t].y, i = e[t + 1].x, a = e[t + 1].y, o = s[t], l = s[t + 1], u = n + (i - n) / 3, d = r + o * (i - n) / 3, f = i - (i - n) / 3, p = a - l * (i - n) / 3;
c += ` C${u},${d} ${f},${p} ${i},${a}`;
}
return c += ` L${e[n].x},${t} ${r ? "Z" : ""}`, c;
}).filter(Boolean);
}
function Et(e) {
return e.toString().toLowerCase().replace(/\s+/g, "-").replace(/[^\p{L}\p{N}_-]+/gu, "").replace(/\-\-+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
}
function Dt(e) {
return e && typeof e == "object" && !Array.isArray(e) && Object.keys(e).length === 0 ? null : e;
}
function Z(e) {
if (Array.isArray(e)) return e.map(Z);
if (e && typeof e == "object" && !Array.isArray(e)) {
let t = {};
for (let n in e) Object.hasOwn(e, n) && (t[n] = Z(e[n]));
return Dt(t);
}
return e;
}
function Ot(e) {
return 1 - (1 - e) ** 3;
}
function kt({ values: e, config: t = {} }) {
let { keepInvalid: n = !0, convertInvalidToZero: r = !1 } = t, i = [], a = 0, o = 0;
function s(e) {
return typeof e != "number" || !Nu