UNPKG

vue-data-ui

Version:

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

1,081 lines (1,080 loc) • 48.9 kB
import { defineAsyncComponent as L, computed as m, ref as d, toRefs as Vt, watch as ee, shallowRef as Ke, onMounted as Gt, onBeforeUnmount as Xt, watchEffect as Yt, createElementBlock as i, openBlock as n, unref as v, normalizeStyle as S, normalizeClass as X, createBlock as D, createCommentVNode as g, createElementVNode as I, createVNode as me, withCtx as h, renderSlot as p, normalizeProps as T, guardReactiveProps as z, createSlots as Qe, Fragment as w, renderList as P, toDisplayString as U, Teleport as qt, resolveDynamicComponent as Jt, mergeProps as Kt, createTextVNode as Ze, nextTick as Qt } from "vue"; import { c as be, t as Zt, i as ea, j as te, o as et, g as tt, l as ta, k as aa, m as oa, N as la, C as sa, A as na, ah as ra, X as ia, $ as ua, y as at, a2 as ae, v as ca, r as va, a as ot, d as lt, _ as da } from "./lib-2iaAPQ_c.js"; import { t as st, u as ha } from "./useResponsive-DfdjqQps.js"; import { u as pa, a as ge } from "./useNestedProp-2p4Tjzc8.js"; import { u as fa } from "./usePrinter-ChVMpU2f.js"; import { u as ma, B as ba } from "./BaseScanner-BMpwQAfz.js"; import { u as ga } from "./useSvgExport-ByUukOZt.js"; import { u as ya } from "./useThemeCheck-DGJ31Vi5.js"; import { u as Ca } from "./useUserOptionState-BIvW1Kz7.js"; import { u as ka } from "./useChartAccessibility-9icAAmYg.js"; import { u as xa } from "./useTimeLabelCollider-CIsgDrl9.js"; import Aa from "./Title-DSOZzIrU.js"; import wa from "./Legend-D2xmnFPH.js"; import { _ as $a } from "./Shape-12_eh8zD.js"; import Fa from "./img-CqYIrJ8I.js"; import { _ as Ta } from "./_plugin-vue_export-helper-CHgC5LLL.js"; const nt = { style: { chart: { backgroundColor: "#1A1A1A", color: "#CCCCCC", legend: { backgroundColor: "#1A1A1A", color: "#CCCCCC" }, title: { color: "#CCCCCC", subtitle: { color: "#757575" } }, tooltip: { backgroundColor: "#1A1A1A", backgroundOpacity: 70, color: "#CCCCCC", borderColor: "#5A5A5A" }, yAxis: { stroke: "#5A5A5A", labels: { axisNamesColor: "#CCCCCC", ticks: { color: "#CCCCCC" } } } } }, table: { th: { backgroundColor: "#1A1A1A", color: "#CCCCCC" }, td: { backgroundColor: "#1A1A1A", color: "#CCCCCC" } } }, rt = { style: { chart: { backgroundColor: "#FFF8E1", color: "#424242", legend: { backgroundColor: "#FFF8E1", color: "#424242" }, title: { color: "#424242", subtitle: { color: "#757575" } }, tooltip: { backgroundColor: "#FFECB3", backgroundOpacity: 30, color: "#424242", borderColor: "#FF8A65" }, yAxis: { stroke: "#5D4037", labels: { axisNamesColor: "#424242", ticks: { color: "#424242" } } } } }, table: { th: { backgroundColor: "#FFF8E1", color: "#424242" }, td: { backgroundColor: "#FFF8E1", color: "#424242" } } }, it = { style: { chart: { backgroundColor: "#1E1E1E", color: "#BDBDBD", legend: { backgroundColor: "#1E1E1E", color: "#BDBDBD" }, title: { color: "#FFF8E1", subtitle: { color: "#BDBDBD" } }, tooltip: { backgroundColor: "#1E1E1E", backgroundOpacity: 30, color: "#FFF8E1", borderColor: "#FF8A65" }, yAxis: { stroke: "#5D4037", labels: { axisNamesColor: "#BDBDBD", ticks: { color: "#BDBDBD" } } } } }, table: { th: { backgroundColor: "#1E1E1E", color: "#BDBDBD" }, td: { backgroundColor: "#1E1E1E", color: "#BDBDBD" } } }, ut = { style: { chart: { backgroundColor: "#1A1A1A", color: "#99AA99", legend: { backgroundColor: "#1A1A1A", color: "#99AA99" }, title: { color: "#66CC66", subtitle: { color: "#99AA99" } }, tooltip: { backgroundColor: "#2A2F2A", color: "#AACCAA", borderColor: "#66CC66", borderRadius: 0 }, yAxis: { stroke: "#3A3A3A", labels: { axisNamesColor: "#99AA99", ticks: { color: "#5A5A5A" } } } } }, table: { th: { backgroundColor: "#1A1A1A", color: "#99AA99" }, td: { backgroundColor: "#1A1A1A", color: "#AACCAA" } } }, ct = { style: { chart: { backgroundColor: "#fbfafa", color: "#8A9892", legend: { backgroundColor: "#fbfafa", color: "#99AA99" }, title: { color: "#8A9892", subtitle: { color: "#99AA99" } }, tooltip: { backgroundColor: "#fbfafa", color: "#8A9892" }, yAxis: { stroke: "#8F837A", labels: { axisNamesColor: "#8F837A", ticks: { color: "#8F837A" } } } } }, table: { th: { backgroundColor: "#fbfafa", color: "#8F837A" }, td: { backgroundColor: "#fbfafa", color: "#8F837A" } } }, vt = { style: { chart: { backgroundColor: "#f6f6fb", color: "#50606C", legend: { backgroundColor: "#f6f6fb", color: "#61747E" }, title: { color: "#50606C", subtitle: { color: "#718890" } }, tooltip: { backgroundColor: "#f6f6fb", color: "#50606C" }, yAxis: { stroke: "#50606C", labels: { axisNamesColor: "#50606C", ticks: { color: "#50606C" } } } } }, table: { th: { backgroundColor: "#f6f6fb", color: "#50606C" }, td: { backgroundColor: "#f6f6fb", color: "#50606C" } } }, dt = { default: {}, dark: nt, celebration: rt, celebrationNight: it, hack: ut, zen: ct, concrete: vt }, fo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, celebration: rt, celebrationNight: it, concrete: vt, dark: nt, default: dt, hack: ut, zen: ct }, Symbol.toStringTag, { value: "Module" })), za = ["id"], Na = ["id"], _a = ["xmlns", "viewBox"], Ma = ["x", "y", "width", "height"], Sa = { style: { "pointer-events": "none" } }, Da = ["x1", "x2", "y1", "y2", "stroke", "stroke-width"], Ia = ["x1", "x2", "y1", "y2", "stroke", "stroke-width"], Pa = { key: 0 }, Oa = ["x", "y", "fill", "font-size", "font-weight"], La = ["fill", "font-size", "font-weight", "text-anchor", "transform"], Ba = ["fill", "font-size", "font-weight", "text-anchor", "transform", "innerHTML"], Ea = { key: 0 }, Ra = ["x", "y", "font-size", "fill"], Ua = ["width", "x", "y"], Ha = { style: { width: "100%" } }, Wa = ["x", "y", "fill", "font-weight", "font-size", "onMouseenter", "onMouseleave", "onClick"], ja = ["d", "stroke", "stroke-width", "onMouseenter", "onMouseleave", "onClick"], Va = ["d", "onMouseenter", "onMouseleave", "onClick"], Ga = { key: 4, class: "vue-data-ui-watermark" }, Xa = ["id"], Ya = ["onClick"], qa = ["innerHTML"], Ja = { __name: "vue-ui-parallel-coordinate-plot", props: { config: { type: Object, default() { return {}; } }, dataset: { type: Array, default() { return []; } } }, emits: ["selectLegend", "selectDatapoint"], setup(ht, { expose: pt, emit: ft }) { const mt = L(() => import("./Tooltip-D0pGX8qz.js")), bt = L(() => import("./BaseIcon-CbVDYv89.js")), gt = L(() => import("./vue-ui-accordion-Dm0mNNKQ.js")), yt = L(() => import("./DataTable-BT_IeqPe.js")), Ct = L(() => import("./PenAndPaper-CvyKWfNl.js")), kt = L(() => import("./UserOptions-BQO4YFrn.js")), xt = L(() => import("./PackageVersion-Br3DrrFh.js")), At = L(() => import("./BaseDraggableDialog-Z5LfhW87.js")), { vue_ui_parallel_coordinate_plot: wt } = pa(), { isThemeValid: $t, warnInvalidTheme: Ft } = ya(), $ = ht, Y = m({ get() { return !!$.dataset && $.dataset.length; }, set(t) { return t; } }), ye = d(0), M = d(null), Ce = d(null), ke = d(null), xe = d(null), Ae = d(null), we = d(0), $e = d(0), Fe = d(0), Te = d(!1), j = d(null), oe = d(null), le = d(null), B = d(be()), E = d(!1); function ze(t) { E.value = t, ye.value += 1; } const e = d(ie()), { loading: R, FINAL_DATASET: Tt, manualLoading: se } = ma({ ...Vt($), FINAL_CONFIG: e, prepareConfig: ie, callback: () => { Promise.resolve().then(async () => { await Qt(), b.value.showTable = e.value.table.show; }); }, skeletonDataset: [ { name: "", shape: "circle", color: "transparent", series: [ { name: "", values: [1, 10, 100, 1e3] } ] }, { name: "", shape: "circle", color: "#CACACA", series: [ { name: "", values: [0.2, 3, 50, 800] } ] }, { name: "", shape: "circle", color: "transparent", series: [ { name: "", values: [0, 0, 0, 0] } ] } ], skeletonConfig: Zt({ defaultConfig: e.value, userConfig: { useCssAnimation: !1, userOptions: { show: !1 }, table: { show: !1 }, style: { chart: { backgroundColor: "#99999930", legend: { show: !0, backgroundColor: "transparent" }, yAxis: { stroke: "#6A6A6A", labels: { showAxisNames: !1, axisNames: [], ticks: { color: "#6A6A6A" } } } } } } }) }), { userOptionsVisible: ne, setUserOptionsVisibility: Ne, keepUserOptionState: _e } = Ca({ config: e.value }), { svgRef: re } = ka({ config: e.value.style.chart.title }); function ie() { const t = ge({ userConfig: $.config, defaultConfig: wt }), o = t.theme; if (!o) return t; if (!$t.value(t)) return Ft(t), t; const a = ge({ userConfig: dt[o] || $.config, defaultConfig: t }), s = ge({ userConfig: $.config, defaultConfig: a }); return { ...s, customPalette: s.customPalette.length ? s.customPalette : ea[o] || te }; } ee(() => $.config, (t) => { R.value || (e.value = ie()), ne.value = !e.value.userOptions.showOnChartHover, Se(), we.value += 1, Fe.value += 1, $e.value += 1, b.value.dataLabels.show = e.value.style.chart.yAxis.labels.datapoints.show, b.value.showTable = e.value.table.show, b.value.showTooltip = e.value.style.chart.tooltip.show; }, { deep: !0 }), ee(() => $.dataset, (t) => { Array.isArray(t) && t.length > 0 && (se.value = !1); }, { deep: !0 }); const O = Ke(null), H = Ke(null); Gt(() => { Te.value = !0, Se(); }); const Me = m(() => !!e.value.debug); function Se() { if (et($.dataset) ? (tt({ componentName: "VueUiParallelCoordinatePlot", type: "dataset", debug: Me.value }), se.value = !0) : $.dataset.forEach((t, o) => { ta({ datasetObject: t, requiredAttributes: ["name", "series"] }).forEach((a) => { Y.value = !1, tt({ componentName: "VueUiParallelCoordinatePlot", type: "datasetSerieAttribute", property: a, index: o, debug: Me.value }); }); }), et($.dataset) || (se.value = e.value.loading), e.value.responsive) { const t = st(() => { const { width: o, height: a } = ha({ chart: M.value, title: e.value.style.chart.title.text ? Ce.value : null, legend: e.value.style.chart.legend.show ? ke.value : null, source: xe.value, noTitle: Ae.value }); requestAnimationFrame(() => { c.value.width = o, c.value.height = a - 12, e.value.responsiveProportionalSizing ? (c.value.plotSize = ae({ relator: Math.min(o, a), adjuster: 600, source: e.value.style.chart.plots.radius, threshold: 2, fallback: 2 }), c.value.ticksFontSize = ae({ relator: Math.min(o, a), adjuster: 600, source: e.value.style.chart.yAxis.labels.ticks.fontSize, threshold: 10, fallback: 10 }), c.value.datapointFontSize = ae({ relator: Math.min(o, a), adjuster: 600, source: e.value.style.chart.yAxis.labels.datapoints.fontSize, threshold: 10, fallback: 10 }), c.value.axisNameFontSize = ae({ relator: Math.min(o, a), adjuster: 600, source: e.value.style.chart.yAxis.labels.axisNamesFontSize, threshold: 12, fallback: 12 })) : (c.value.plotSize = e.value.style.chart.plots.radius, c.value.ticksFontSize = e.value.style.chart.yAxis.labels.ticks.fontSize, c.value.datapointFontSize = e.value.style.chart.yAxis.labels.datapoints.fontSize, c.value.axisNameFontSize = e.value.style.chart.yAxis.labels.axisNamesFontSize); }); }); O.value && (H.value && O.value.unobserve(H.value), O.value.disconnect()), O.value = new ResizeObserver(t), H.value = M.value.parentNode, O.value.observe(H.value); } } Xt(() => { O.value && (H.value && O.value.unobserve(H.value), O.value.disconnect()); }); const { isPrinting: De, isImaging: Ie, generatePdf: Pe, generateImage: Oe } = fa({ elementId: `pcp_${B.value}`, fileName: e.value.style.chart.title.text || "vue-ui-parallel-coordinate-plot", options: e.value.userOptions.print }), zt = m(() => e.value.userOptions.show && !e.value.style.chart.title.text), c = d({ height: e.value.style.chart.height, width: e.value.style.chart.width, plotSize: e.value.style.chart.plots.radius, // ratio 100 ticksFontSize: e.value.style.chart.yAxis.labels.ticks.fontSize, // ratio 42.85 datapointFontSize: e.value.style.chart.yAxis.labels.datapoints.fontSize, axisNameFontSize: e.value.style.chart.yAxis.labels.axisNamesFontSize }), Le = m(() => c.value.width), Be = m(() => c.value.height), V = d(0), Nt = st((t) => { V.value = t; }, 100); Yt((t) => { const o = le.value; if (!o) return; const a = new ResizeObserver((s) => { Nt(s[0].contentRect.height); }); a.observe(o), t(() => a.disconnect()); }); const f = m(() => { const { top: t, right: o, bottom: a, left: s } = e.value.style.chart.padding, l = Be.value, u = Le.value; return { chartHeight: Math.max(1e-3, l), chartWidth: Math.max(1e-3, u), height: Math.max(1e-3, l - t - a - V.value - c.value.datapointFontSize * 2), width: Math.max(1e-3, u - s - o), top: t + V.value + c.value.datapointFontSize, left: s, right: u - o, bottom: l - a - c.value.datapointFontSize }; }), _t = m(() => aa(e.value.customPalette)), b = d({ dataLabels: { show: e.value.style.chart.yAxis.labels.datapoints.show }, showTable: e.value.table.show, showTooltip: e.value.style.chart.tooltip.show }); ee(e, () => { b.value = { dataLabels: { show: e.value.style.chart.yAxis.labels.datapoints.show }, showTable: e.value.table.show, showTooltip: e.value.style.chart.tooltip.show }; }, { immediate: !0 }); const F = d([]); function q(t) { F.value.includes(t) ? F.value = F.value.filter((o) => o !== t) : F.value.push(t); } const N = m(() => Tt.value.map((t, o) => { const a = oa(t.color) || _t.value[o] || te[o] || te[o % te.length]; return { ...t, series: t.series.map((s) => ({ ...s, id: be(), color: a })), seriesIndex: o, color: a, id: be(), shape: t.shape || "circle" }; })); function Ee(t) { if (!N.value.length) return e.value.debug && console.warn("VueUiParallelCoordinatePlot - There are no series to show."), null; const o = N.value.find((a) => a.name === t); return o || (e.value.debug && console.warn(`VueUiParallelCoordinatePlot - Series name not found "${t}"`), null); } function Mt(t) { const o = Ee(t); o !== null && F.value.includes(o.id) && q(o.id); } function St(t) { const o = Ee(t); o !== null && (F.value.includes(o.id) || q(o.id)); } const Re = m(() => N.value.map((t) => ({ ...t, opacity: F.value.includes(t.id) ? 0.5 : 1, segregate: () => q(t.id), isSegregated: F.value.includes(t.id), shape: t.shape || "circle" }))), Dt = m(() => ({ cy: "pcp-div-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" : "" })), Ue = m(() => Math.max( ...N.value.filter((t) => !F.value.includes(t.id)).map((t) => Math.max(...t.series.flatMap((o) => o.values.length))) )), A = m(() => f.value.width / Ue.value), ue = m(() => N.value.filter((t) => !F.value.includes(t.id))), y = m(() => { let t = []; for (let o = 0; o < Ue.value; o += 1) { const a = Math.min(...ue.value.flatMap((C) => C.series.map((k) => k.values[o] || 0) || 0)), s = Math.max(...ue.value.flatMap((C) => C.series.map((k) => k.values[o] || 0) || 0)), l = s === a ? a / 4 : a, u = s === a ? s * 2 : s, r = la(l, u, e.value.style.chart.yAxis.scaleTicks), _ = r.ticks.map((C, k) => { const Wt = r.min < 0 ? C + Math.abs(r.min) : C - Math.abs(r.min), jt = r.min < 0 ? r.max + Math.abs(r.min) : r.max - Math.abs(r.min); return { y: f.value.bottom - f.value.height * (Wt / jt), x: f.value.left + A.value * o + A.value / 2, value: C }; }); t.push({ scale: r, ticks: _, name: e.value.style.chart.yAxis.labels.axisNames[o] || `Y-${o + 1}` }); } return t; }), ce = m(() => ue.value.map((t, o) => ({ ...t, series: t.series.map((a, s) => ({ ...a, datapoints: a.values.map((l, u) => { const r = y.value[u].scale.min < 0 ? (l || 0) + Math.abs(y.value[u].scale.min) : (l || 0) - Math.abs(y.value[u].scale.min), _ = y.value[u].scale.min < 0 ? y.value[u].scale.max + Math.abs(y.value[u].scale.min) : y.value[u].scale.max - Math.abs(y.value[u].scale.min); return { name: a.name, seriesName: t.name, axisIndex: u, datapointIndex: s, seriesIndex: o, value: l || 0, x: f.value.left + A.value * u + A.value / 2, y: f.value.bottom - f.value.height * (r / _), comment: a.comments && a.comments[u] || "" }; }) })) })).map((t) => ({ ...t, series: t.series.map((o) => { const a = sa(o.datapoints), s = na(o.datapoints), l = ra(e.value.style.chart.lines.smooth ? `M ${s}` : `M ${a}`); return { ...o, smoothPath: s, straightPath: a, pathLength: l }; }) }))); function He({ value: t, index: o, datapoint: a }) { return ot( e.value.style.chart.yAxis.labels.formatters[o] || null, t, lt({ p: e.value.style.chart.yAxis.labels.prefixes[o] || "", v: t, s: e.value.style.chart.yAxis.labels.suffixes[o] || "", r: e.value.style.chart.yAxis.labels.roundings[o] || 0 }), { datapoint: a, seriesIndex: o } ); } const x = d(null), ve = d(null), de = d(!1), he = d(""); function J({ shape: t, serie: o, S: a }) { e.value.events.datapointLeave && e.value.events.datapointLeave({ datapoint: { ...o, shape: t }, seriesIndex: a }), x.value = null, de.value = null; } function K({ shape: t, serieName: o, serie: a, relativeIndex: s, seriesIndex: l, S: u }) { e.value.events.datapointEnter && e.value.events.datapointEnter({ datapoint: { ...a, shape: t }, seriesIndex: u }), ve.value = { serie: a, relativeIndex: s, seriesIndex: l, series: N.value, scales: y.value }, de.value = !0, x.value = a.id; let r = ""; const _ = e.value.style.chart.tooltip.customFormat; at(_) && da(() => _({ serie: a, seriesIndex: a.seriesIndex, series: N.value, config: e.value, scales: y.value })) ? he.value = _({ serie: a, seriesIndex: a.seriesIndex, series: N.value, config: e.value, scales: y.value }) : (r += `<div style="width:100%;text-align:center;border-bottom:1px solid ${e.value.style.chart.tooltip.borderColor};padding-bottom:6px;margin-bottom:3px;">${o ? o + " - " : ""}${a.name}</div>`, y.value.map((C) => C.name).forEach((C, k) => { r += ` <div class="vue-ui-tooltip-item" style="text-align:left"> <span>${C}: </span> <span> ${ot( e.value.style.chart.yAxis.labels.formatters[k] || null, a.datapoints[k].value, lt({ p: e.value.style.chart.yAxis.labels.prefixes[k] || "", v: a.datapoints[k].value, s: e.value.style.chart.yAxis.labels.suffixes[k] || "", r: e.value.style.chart.yAxis.labels.roundings[k] || "" }), { datapoint: a.datapoints[k], seriesIndex: k } )} </span> </div> `, e.value.style.chart.comments.showInTooltip && a.datapoints[k].comment && (r += `<div class="vue-data-ui-tooltip-comment" style="background:${a.color}20; padding: 6px; margin-bottom: 6px; border-left: 1px solid ${a.color}">${a.datapoints[k].comment}</div>`); }), he.value = `<div>${r}</div>`); } function It() { return N.value; } const W = m(() => { const t = [e.value.table.columnNames.series].concat([e.value.table.columnNames.item]).concat(y.value.map((l) => l.name)), o = ce.value.flatMap((l, u) => l.series.map((r) => [l.name].concat([r.name]).concat(r.values))), 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 }, s = [e.value.table.columnNames.series].concat([e.value.table.columnNames.item]).concat(y.value.map((l) => l.name)); return { body: o, head: t, config: a, colNames: s }; }), We = m(() => ce.value.length === 0 ? { head: [], body: [], config: {}, columnNames: [] } : { head: W.value.head, body: W.value.body }); function pe(t = null) { const o = [[e.value.style.chart.title.text], [e.value.style.chart.title.subtitle.text], [""]], a = We.value.head, s = We.value.body, l = o.concat([a]).concat(s), u = ca(l); t ? t(u) : va({ csvContent: u, title: e.value.style.chart.title.text || "vue-ui-parallel-coordinate-plot" }); } const je = ft; function Q({ serie: t, shape: o, S: a }) { e.value.events.datapointClick && e.value.events.datapointClick({ datapoint: { ...t, shape: o }, seriesIndex: a }), je("selectDatapoint", t); } function Ve(t) { je("selectLegend", { ...t, isSegregated: !t.isSegregated, opacity: t.isSegregated ? 1 : 0.5 }); } function Ge() { b.value.showTable = !b.value.showTable; } function Xe() { b.value.dataLabels.show = !b.value.dataLabels.show; } function Ye() { b.value.showTooltip = !b.value.showTooltip; } const Z = d(!1); function fe() { Z.value = !Z.value; } async function Pt({ scale: t = 2 } = {}) { if (!M.value) return; const { width: o, height: a } = M.value.getBoundingClientRect(), s = o / a, { imageUri: l, base64: u } = await Fa({ domElement: M.value, base64: !0, img: !0, scale: t }); return { imageUri: l, base64: u, title: e.value.style.chart.title.text, width: o, height: a, aspectRatio: s }; } const Ot = d({ start: 0, end: 1 }), Lt = m(() => y.value.map((t) => t.name)); xa({ timeLabelsEls: le, timeLabels: Lt, slicer: Ot, configRef: e, rotationPath: ["style", "chart", "yAxis", "labels", "axisNamesRotation"], autoRotatePath: ["style", "chart", "yAxis", "labels", "axisNamesAutoRotate", "enable"], isAutoSize: !1, width: Le, height: Be, targetClass: ".vue-ui-parallel-coordinate-plot-x-label", rotation: e.value.style.chart.yAxis.labels.axisNamesAutoRotate.angle }); const G = m(() => { const t = e.value.table.useDialog && !e.value.table.show, o = b.value.showTable; return { component: t ? At : gt, title: `${e.value.style.chart.title.text}${e.value.style.chart.title.subtitle.text ? `: ${e.value.style.chart.title.subtitle.text}` : ""}`, props: t ? { backgroundColor: e.value.table.th.backgroundColor, color: e.value.table.th.color, headerColor: e.value.table.th.color, headerBg: e.value.table.th.backgroundColor, isFullscreen: E.value, fullscreenParent: M.value, forcedWidth: Math.min(800, window.innerWidth * 0.8) } : { hideDetails: !0, config: { open: o, 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 } } } }; }); ee(() => b.value.showTable, (t) => { e.value.table.show || (t && e.value.table.useDialog && j.value ? j.value.open() : "close" in j.value && j.value.close()); }); function qe() { b.value.showTable = !1, oe.value && oe.value.setTableIconState(!1); } const Bt = m(() => e.value.style.chart.backgroundColor), Et = m(() => e.value.style.chart.legend), Rt = m(() => e.value.style.chart.title), { exportSvg: Ut, getSvg: Ht } = ga({ svg: re, title: Rt, legend: Et, legendItems: Re, backgroundColor: Bt }); async function Je({ isCb: t }) { if (t) { const { blob: o, url: a, text: s, dataUrl: l } = await Ht(); e.value.userOptions.callbacks.svg({ blob: o, url: a, text: s, dataUrl: l }); } else Ut(); } return pt({ getData: It, getImage: Pt, generateCsv: pe, generatePdf: Pe, generateImage: Oe, generateSvg: Je, hideSeries: St, showSeries: Mt, toggleTable: Ge, toggleLabels: Xe, toggleTooltip: Ye, toggleAnnotator: fe, toggleFullscreen: ze }), (t, o) => (n(), i("div", { ref_key: "pcpChart", ref: M, class: X(`vue-data-ui-component vue-ui-pcp ${E.value ? "vue-data-ui-wrapper-fullscreen" : ""} ${e.value.useCssAnimation ? "" : "vue-ui-dna"}`), style: S(`font-family:${e.value.style.fontFamily};width:100%; text-align:center;background:${e.value.style.chart.backgroundColor};${e.value.responsive ? "height:100%" : ""}`), id: `pcp_${B.value}`, onMouseenter: o[2] || (o[2] = () => v(Ne)(!0)), onMouseleave: o[3] || (o[3] = () => v(Ne)(!1)) }, [ e.value.userOptions.buttons.annotator ? (n(), D(v(Ct), { key: 0, svgRef: v(re), backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, active: Z.value, onClose: fe }, { "annotator-action-close": h(() => [ p(t.$slots, "annotator-action-close", {}, void 0, !0) ]), "annotator-action-color": h(({ color: a }) => [ p(t.$slots, "annotator-action-color", T(z({ color: a })), void 0, !0) ]), "annotator-action-draw": h(({ mode: a }) => [ p(t.$slots, "annotator-action-draw", T(z({ mode: a })), void 0, !0) ]), "annotator-action-undo": h(({ disabled: a }) => [ p(t.$slots, "annotator-action-undo", T(z({ disabled: a })), void 0, !0) ]), "annotator-action-redo": h(({ disabled: a }) => [ p(t.$slots, "annotator-action-redo", T(z({ disabled: a })), void 0, !0) ]), "annotator-action-delete": h(({ disabled: a }) => [ p(t.$slots, "annotator-action-delete", T(z({ disabled: a })), void 0, !0) ]), _: 3 }, 8, ["svgRef", "backgroundColor", "color", "active"])) : g("", !0), zt.value ? (n(), i("div", { key: 1, ref_key: "noTitle", ref: Ae, 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(), i("div", { key: 2, ref_key: "chartTitle", ref: Ce, style: "width:100%;background:transparent;padding-bottom:24px" }, [ (n(), D(Aa, { key: `title_${we.value}`, config: { title: { cy: "pcp-div-title", ...e.value.style.chart.title }, subtitle: { cy: "pcp-div-subtitle", ...e.value.style.chart.title.subtitle } } }, null, 8, ["config"])) ], 512)) : g("", !0), I("div", { id: `legend-top-${B.value}` }, null, 8, Na), e.value.userOptions.show && Y.value && (v(_e) || v(ne)) ? (n(), D(v(kt), { ref_key: "userOptionsRef", ref: oe, key: `user_options_${ye.value}`, backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, isPrinting: v(De), isImaging: v(Ie), uid: B.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, hasSvg: e.value.userOptions.buttons.svg, hasTable: e.value.userOptions.buttons.table, hasLabel: e.value.userOptions.buttons.labels, hasFullscreen: e.value.userOptions.buttons.fullscreen, isFullscreen: E.value, isTooltip: b.value.showTooltip, titles: { ...e.value.userOptions.buttonTitles }, chartElement: M.value, position: e.value.userOptions.position, hasAnnotator: e.value.userOptions.buttons.annotator, isAnnotation: Z.value, callbacks: e.value.userOptions.callbacks, printScale: e.value.userOptions.print.scale, tableDialog: e.value.table.useDialog, onToggleFullscreen: ze, onGeneratePdf: v(Pe), onGenerateCsv: pe, onGenerateImage: v(Oe), onGenerateSvg: Je, onToggleTable: Ge, onToggleLabels: Xe, onToggleTooltip: Ye, onToggleAnnotator: fe, style: S({ visibility: v(_e) ? v(ne) ? "visible" : "hidden" : "visible" }) }, Qe({ _: 2 }, [ t.$slots.menuIcon ? { name: "menuIcon", fn: h(({ isOpen: a, color: s }) => [ p(t.$slots, "menuIcon", T(z({ isOpen: a, color: s })), void 0, !0) ]), key: "0" } : void 0, t.$slots.optionPdf ? { name: "optionPdf", fn: h(() => [ p(t.$slots, "optionPdf", {}, void 0, !0) ]), key: "1" } : void 0, t.$slots.optionCsv ? { name: "optionCsv", fn: h(() => [ p(t.$slots, "optionCsv", {}, void 0, !0) ]), key: "2" } : void 0, t.$slots.optionImg ? { name: "optionImg", fn: h(() => [ p(t.$slots, "optionImg", {}, void 0, !0) ]), key: "3" } : void 0, t.$slots.optionSvg ? { name: "optionSvg", fn: h(() => [ p(t.$slots, "optionSvg", {}, void 0, !0) ]), key: "4" } : void 0, t.$slots.optionTable ? { name: "optionTable", fn: h(() => [ p(t.$slots, "optionTable", {}, void 0, !0) ]), key: "5" } : void 0, t.$slots.optionLabels ? { name: "optionLabels", fn: h(() => [ p(t.$slots, "optionLabels", {}, void 0, !0) ]), key: "6" } : void 0, t.$slots.optionFullscreen ? { name: "optionFullscreen", fn: h(({ toggleFullscreen: a, isFullscreen: s }) => [ p(t.$slots, "optionFullscreen", T(z({ toggleFullscreen: a, isFullscreen: s })), void 0, !0) ]), key: "7" } : void 0, t.$slots.optionAnnotator ? { name: "optionAnnotator", fn: h(({ toggleAnnotator: a, isAnnotator: s }) => [ p(t.$slots, "optionAnnotator", T(z({ toggleAnnotator: a, isAnnotator: s })), void 0, !0) ]), key: "8" } : void 0 ]), 1032, ["backgroundColor", "color", "isPrinting", "isImaging", "uid", "hasTooltip", "hasPdf", "hasXls", "hasImg", "hasSvg", "hasTable", "hasLabel", "hasFullscreen", "isFullscreen", "isTooltip", "titles", "chartElement", "position", "hasAnnotator", "isAnnotation", "callbacks", "printScale", "tableDialog", "onGeneratePdf", "onGenerateImage", "style"])) : g("", !0), (n(), i("svg", { ref_key: "svgRef", ref: re, xmlns: v(ia), class: X({ "vue-data-ui-fullscreen--on": E.value, "vue-data-ui-fulscreen--off": !E.value }), viewBox: `0 0 ${f.value.chartWidth <= 0 ? 10 : f.value.chartWidth} ${f.value.chartHeight <= 0 ? 10 : f.value.chartHeight}`, style: S(`max-width:100%; overflow: visible; background:transparent;color:${e.value.style.chart.color}`) }, [ me(v(xt)), t.$slots["chart-background"] ? (n(), i("foreignObject", { key: 0, x: f.value.left, y: f.value.top, width: f.value.width, height: f.value.height, style: { pointerEvents: "none" } }, [ p(t.$slots, "chart-background", {}, void 0, !0) ], 8, Ma)) : g("", !0), (n(!0), i(w, null, P(y.value, (a, s) => (n(), i("g", Sa, [ I("line", { x1: f.value.left + A.value * s + A.value / 2, x2: f.value.left + A.value * s + A.value / 2, y1: f.value.top, y2: f.value.bottom, stroke: e.value.style.chart.yAxis.stroke, "stroke-width": e.value.style.chart.yAxis.strokeWidth }, null, 8, Da), e.value.style.chart.yAxis.labels.ticks.show ? (n(), i(w, { key: 0 }, [ (n(!0), i(w, null, P(a.ticks, (l) => (n(), i("line", { x1: l.x, x2: l.x - 10, y1: l.y, y2: l.y, stroke: e.value.style.chart.yAxis.stroke, "stroke-width": e.value.style.chart.yAxis.strokeWidth, style: S(`opacity:${x.value && !b.value.showTooltip ? 0.2 : 1}`) }, null, 12, Ia))), 256)), v(R) ? g("", !0) : (n(), i("g", Pa, [ (n(!0), i(w, null, P(a.ticks, (l) => (n(), i("text", { x: l.x - 12 + e.value.style.chart.yAxis.labels.ticks.offsetX, y: l.y + e.value.style.chart.yAxis.labels.ticks.offsetY + c.value.ticksFontSize / 3, fill: e.value.style.chart.yAxis.labels.ticks.color, "text-anchor": "end", "font-size": c.value.ticksFontSize, "font-weight": e.value.style.chart.yAxis.labels.ticks.bold ? "bold" : "normal", style: S(`opacity:${x.value && !b.value.showTooltip ? 0.2 : 1}`) }, U(He({ value: l.value, index: s, datapoint: l })), 13, Oa))), 256)) ])) ], 64)) : g("", !0) ]))), 256)), e.value.style.chart.yAxis.labels.showAxisNames ? (n(), i("g", { key: 1, ref_key: "xAxisLabels", ref: le }, [ (n(!0), i(w, null, P(y.value, (a, s) => (n(), i(w, null, [ String(a.name).includes(` `) ? (n(), i("text", { key: 1, class: "vue-ui-parallel-coordinate-plot-x-label", fill: e.value.style.chart.yAxis.labels.axisNamesColor, "font-size": c.value.axisNameFontSize, "font-weight": e.value.style.chart.yAxis.labels.axisNamesBold ? "bold" : "", "text-anchor": e.value.style.chart.yAxis.labels.axisNamesRotation === 0 ? "middle" : e.value.style.chart.yAxis.labels.axisNamesRotation < 0 ? "start" : "end", transform: `translate(${f.value.left + A.value * s + A.value / 2}, ${V.value - c.value.axisNameFontSize}), rotate(${e.value.style.chart.yAxis.labels.axisNamesRotation})`, innerHTML: v(ua)({ content: String(a.name), fontSize: c.value.axisNameFontSize, fill: e.value.style.chart.yAxis.labels.axisNamesColor, x: 0, y: 0 }) }, null, 8, Ba)) : (n(), i("text", { key: 0, class: "vue-ui-parallel-coordinate-plot-x-label", fill: e.value.style.chart.yAxis.labels.axisNamesColor, "font-size": c.value.axisNameFontSize, "font-weight": e.value.style.chart.yAxis.labels.axisNamesBold ? "bold" : "", "text-anchor": e.value.style.chart.yAxis.labels.axisNamesRotation === 0 ? "middle" : e.value.style.chart.yAxis.labels.axisNamesRotation < 0 ? "start" : "end", transform: `translate(${f.value.left + A.value * s + A.value / 2}, ${V.value - c.value.axisNameFontSize}), rotate(${e.value.style.chart.yAxis.labels.axisNamesRotation})` }, U(a.name), 9, La)) ], 64))), 256)) ], 512)) : g("", !0), (n(!0), i(w, null, P(ce.value, (a, s) => (n(), i("g", null, [ (n(!0), i(w, null, P(a.series, (l, u) => (n(), i("g", null, [ e.value.style.chart.plots.show ? (n(), i("g", Ea, [ (n(!0), i(w, null, P(l.datapoints, (r, _) => (n(), D($a, { plot: { x: r.x, y: r.y }, color: a.color, shape: a.shape, radius: a.shape === "triangle" ? c.value.plotSize * 1.2 : c.value.plotSize, stroke: e.value.style.chart.backgroundColor, strokeWidth: 0.5, onMouseenter: (C) => K({ shape: a.shape, serieName: a.name, serie: l, relativeIndex: u, seriesIndex: l.seriesIndex, S: s }), onMouseleave: (C) => J({ serie: l, shape: a.shape, S: s }), style: S(`opacity:${x.value ? x.value === l.id ? e.value.style.chart.plots.opacity : 0.2 : e.value.style.chart.plots.opacity}`), onClick: () => Q({ serie: l, shape: a.shape, S: s }) }, null, 8, ["plot", "color", "shape", "radius", "stroke", "onMouseenter", "onMouseleave", "style", "onClick"]))), 256)), b.value.showTooltip ? g("", !0) : (n(), i(w, { key: 0 }, [ x.value && x.value === l.id && l.datapoints.length ? (n(), i("text", { key: 0, x: l.datapoints[0].x - c.value.ticksFontSize, y: l.datapoints[0].y + c.value.ticksFontSize / 3, "text-anchor": "end", "font-size": c.value.ticksFontSize, fill: a.color, "font-weight": "bold" }, U(l.name), 9, Ra)) : g("", !0) ], 64)), e.value.style.chart.comments.show ? (n(!0), i(w, { key: 1 }, P(l.datapoints, (r) => (n(), i("g", null, [ r.comment ? (n(), i("foreignObject", { key: 0, style: { overflow: "visible" }, height: "12", width: e.value.style.chart.comments.width, x: r.x - e.value.style.chart.comments.width / 2 + e.value.style.chart.comments.offsetX, y: r.y + e.value.style.chart.comments.offsetY + 6 }, [ I("div", Ha, [ p(t.$slots, "plot-comment", { plot: { ...r, color: a.color } }, void 0, !0) ]) ], 8, Ua)) : g("", !0) ]))), 256)) : g("", !0) ])) : g("", !0), !v(R) && (b.value.dataLabels.show || x.value && x.value === l.id) ? (n(!0), i(w, { key: 1 }, P(l.datapoints, (r, _) => (n(), i("text", { x: r.x + 12 + e.value.style.chart.yAxis.labels.datapoints.offsetX, y: r.y + e.value.style.chart.yAxis.labels.datapoints.offsetY + c.value.datapointFontSize / 3, fill: e.value.style.chart.yAxis.labels.datapoints.useSerieColor ? a.color : e.value.style.chart.yAxis.labels.datapoints.color, "text-anchor": "start", "font-weight": e.value.style.chart.yAxis.labels.datapoints.bold ? "bold" : "normal", class: X({ "vue-ui-pcp-animated": !1, "vue-ui-pcp-transition": !v(R) }), "font-size": c.value.datapointFontSize, onMouseenter: (C) => K({ shape: a.shape, serieName: a.name, serie: l, relativeIndex: u, seriesIndex: l.seriesIndex, S: s }), onMouseleave: (C) => J({ serie: l, shape: a.shape, S: s }), onClick: () => Q({ serie: l, shape: a.shape, S: s }), style: S(`opacity:${x.value ? x.value === l.id ? 1 : 0.2 : 1}`) }, U(He({ value: r.value, index: _, datapoint: r })), 47, Wa))), 256)) : g("", !0), I("path", { d: `M${e.value.style.chart.lines.smooth ? l.smoothPath : l.straightPath}`, stroke: a.color, "stroke-width": e.value.style.chart.lines.strokeWidth, fill: "none", class: X({ "vue-ui-pcp-animated vue-data-ui-line-animated": e.value.useCssAnimation, "vue-ui-pcp-transition": !v(R) }), onMouseenter: (r) => K({ shape: a.shape, serieName: a.name, serie: l, relativeIndex: u, seriesIndex: l.seriesIndex, S: s }), onMouseleave: (r) => J({ serie: l, shape: a.shape, S: s }), onClick: () => Q({ serie: l, shape: a.shape, S: s }), style: S(`opacity:${x.value ? x.value === l.id ? e.value.style.chart.lines.opacity : 0.2 : e.value.style.chart.lines.opacity}; stroke-dasharray:${l.pathLength}; stroke-dashoffset: ${e.value.useCssAnimation ? l.pathLength : 0}`) }, null, 46, ja), b.value.showTooltip ? (n(), i("path", { key: 2, d: `M${e.value.style.chart.lines.smooth ? l.smoothPath : l.straightPath}`, stroke: "transparent", "stroke-width": 12, fill: "none", class: X({ "vue-ui-pcp-animated vue-data-ui-line-animated": e.value.useCssAnimation, "vue-ui-pcp-transition": !v(R) }), onMouseenter: (r) => K({ shape: a.shape, serieName: a.name, serie: l, relativeIndex: u, seriesIndex: l.seriesIndex, S: s }), onMouseleave: (r) => J({ serie: l, shape: a.shape, S: s }), onClick: () => Q({ serie: l, shape: a.shape, S: s }), style: { opacity: "0" } }, null, 42, Va)) : g("", !0) ]))), 256)) ]))), 256)), p(t.$slots, "svg", { svg: f.value }, void 0, !0) ], 14, _a)), t.$slots.watermark ? (n(), i("div", Ga, [ p(t.$slots, "watermark", T(z({ isPrinting: v(De) || v(Ie) })), void 0, !0) ])) : g("", !0), I("div", { id: `legend-bottom-${B.value}` }, null, 8, Xa), Te.value ? (n(), D(qt, { key: 5, to: e.value.style.chart.legend.position === "top" ? `#legend-top-${B.value}` : `#legend-bottom-${B.value}` }, [ I("div", { ref_key: "chartLegend", ref: ke }, [ e.value.style.chart.legend.show && Y.value ? (n(), D(wa, { key: `legend_${$e.value}`, legendSet: Re.value, config: Dt.value, onClickMarker: o[0] || (o[0] = ({ legend: a }) => { q(a.id), Ve(a); }) }, { item: h(({ legend: a, index: s }) => [ I("div", { onClick: (l) => { a.segregate(), Ve(a); }, style: S(`opacity:${F.value.includes(a.id) ? 0.5 : 1}`) }, U(a.name), 13, Ya) ]), _: 1 }, 8, ["legendSet", "config"])) : p(t.$slots, "legend", { key: 1, legend: N.value }, void 0, !0) ], 512) ], 8, ["to"])) : g("", !0), t.$slots.source ? (n(), i("div", { key: 6, ref_key: "source", ref: xe, dir: "auto" }, [ p(t.$slots, "source", {}, void 0, !0) ], 512)) : g("", !0), me(v(mt), { show: b.value.showTooltip && de.value, backgroundColor: e.value.style.chart.tooltip.backgroundColor, color: e.value.style.chart.tooltip.color, fontSize: e.value.style.chart.tooltip.fontSize, borderRadius: e.value.style.chart.tooltip.borderRadius, borderColor: e.value.style.chart.tooltip.borderColor, borderWidth: e.value.style.chart.tooltip.borderWidth, backgroundOpacity: e.value.style.chart.tooltip.backgroundOpacity, position: e.value.style.chart.tooltip.position, offsetY: e.value.style.chart.tooltip.offsetY, parent: M.value, content: he.value, isFullscreen: E.value, isCustom: v(at)(e.value.style.chart.tooltip.customFormat), smooth: e.value.style.chart.tooltip.smooth, backdropFilter: e.value.style.chart.tooltip.backdropFilter, smoothForce: e.value.style.chart.tooltip.smoothForce, smoothSnapThreshold: e.value.style.chart.tooltip.smoothSnapThreshold }, { "tooltip-before": h(() => [ p(t.$slots, "tooltip-before", T(z({ ...ve.value })), void 0, !0) ]), "tooltip-after": h(() => [ p(t.$slots, "tooltip-after", T(z({ ...ve.value })), void 0, !0) ]), _: 3 }, 8, ["show", "backgroundColor", "color", "fontSize", "borderRadius", "borderColor", "borderWidth", "backgroundOpacity", "position", "offsetY", "parent", "content", "isFullscreen", "isCustom", "smooth", "backdropFilter", "smoothForce", "smoothSnapThreshold"]), Y.value && e.value.userOptions.buttons.table ? (n(), D(Jt(G.value.component), Kt({ key: 7 }, G.value.props, { ref_key: "tableUnit", ref: j, onClose: qe }), Qe({ content: h(() => [ (n(), D(v(yt), { key: `table_${Fe.value}`, colNames: W.value.colNames, head: W.value.head, body: W.value.body, config: W.value.config, title: e.value.table.useDialog ? "" : G.value.title, withCloseButton: !e.value.table.useDialog, onClose: qe }, { th: h(({ th: a }) => [ I("div", { innerHTML: a }, null, 8, qa) ]), td: h(({ td: a }) => [ Ze(U(a), 1) ]), _: 1 }, 8, ["colNames", "head", "body", "config", "title", "withCloseButton"])) ]), _: 2 }, [ e.value.table.useDialog ? { name: "title", fn: h(() => [ Ze(U(G.value.title), 1) ]), key: "0" } : void 0, e.value.table.useDialog ? { name: "actions", fn: h(() => [ I("button", { tabindex: "0", class: "vue-ui-user-options-button", onClick: o[1] || (o[1] = (a) => pe(e.value.userOptions.callbacks.csv)) }, [ me(v(bt), { name: "excel", stroke: G.value.props.color }, null, 8, ["stroke"]) ]) ]), key: "1" } : void 0 ]), 1040)) : g("", !0), v(R) ? (n(), D(ba, { key: 8 })) : g("", !0) ], 46, za)); } }, Ka = /* @__PURE__ */ Ta(Ja, [["__scopeId", "data-v-43c25705"]]), mo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: Ka }, Symbol.toStringTag, { value: "Module" })); export { fo as a, mo as b, Ka as v };