UNPKG

vue-data-ui

Version:

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

649 lines (648 loc) • 25 kB
import { useCssVars as Oe, computed as oe, ref as f, watch as me, onMounted as Ne, onBeforeUnmount as Ae, createElementBlock as X, openBlock as w, unref as h, normalizeStyle as re, createBlock as ae, createCommentVNode as B, createVNode as fe, createSlots as Ie, withCtx as P, renderSlot as F, normalizeProps as J, guardReactiveProps as K, normalizeClass as we, createElementVNode as pe, Fragment as Xe, renderList as Re, toDisplayString as Ce, createTextVNode as We, nextTick as ke } from "vue"; import { u as Ve, c as xe, aj as Be, v as Ye, t as De, p as ue, a as Ue, o as Ee, e as $e, g as Ge, f as Le, X as je, q as He, r as qe, x as Ze } from "./index-CO-5OgQA.js"; import { _ as Je } from "./Title-CxubvuEh.js"; import { u as Ke, U as Qe } from "./usePrinter-DldU0tBx.js"; import { t as et, u as tt, d as ot } from "./useResponsive-Cw4oZ8sQ.js"; import at from "./vue-ui-accordion-RRHvINsj.js"; import { D as lt } from "./DataTable-CVSajw4G.js"; import { u as Te } from "./useNestedProp-D8sa_wYF.js"; import { _ as nt } from "./PackageVersion-DqsC6J9R.js"; import { _ as st } from "./Tooltip-C0W6IWVK.js"; import { _ as it } from "./PenAndPaper-Bqjmruhh.js"; import { u as rt } from "./useUserOptionState-BIvW1Kz7.js"; import { u as ut } from "./useChartAccessibility-BWojgys7.js"; import { u as ct } from "./usePanZoom-CUkkqW81.js"; import dt from "./BaseIcon-V0HD2AAD.js"; import { _ as vt } from "./_plugin-vue_export-helper-CHgC5LLL.js"; function ht(b, p) { const { width: c, height: n } = b, d = p.getImageData(0, 0, c, n).data; let l = c, a = n, s = 0, g = 0, k = !1; for (let m = 0; m < n; m += 1) for (let y = 0; y < c; y += 1) d[(m * c + y) * 4 + 3] > 1 && (k = !0, y < l && (l = y), y > s && (s = y), m < a && (a = m), m > g && (g = m)); return k ? [l, a, s, g] : [0, 0, 0, 0]; } function Se({ word: b, fontSize: p, pad: c, canvas: n, ctx: r, svg: d }) { r.save(), r.font = `${d.style && d.style.bold ? "bold " : ""}${p}px Arial`; const l = r.measureText(b.name), a = Math.ceil(l.width) + 2 + (c ? c * 2 : 0), s = Math.ceil(p) + 2 + (c ? c * 2 : 0); n.width = a, n.height = s, r.clearRect(0, 0, a, s), r.font = `${d.style && d.style.bold ? "bold " : ""}${p}px Arial`, r.textAlign = "center", r.textBaseline = "middle", r.fillStyle = "black", r.fillText(b.name, a / 2, s / 2); const k = r.getImageData(0, 0, a, s).data, m = []; for (let _ = 0; _ < s; _ += 1) for (let Y = 0; Y < a; Y += 1) k[(_ * a + Y) * 4 + 3] > 1 && m.push([Y, _]); const [y, e, z, R] = ht(n, r); return r.restore(), { w: a, h: s, wordMask: m, minX: y, minY: e, maxX: z, maxY: R }; } function Fe({ mask: b, maskW: p, maskH: c, wx: n, wy: r, wordMask: d }) { for (let l = 0; l < d.length; l += 1) { const a = n + d[l][0], s = r + d[l][1]; if (a < 0 || s < 0 || a >= p || s >= c || b[s * p + a]) return !1; } return !0; } function Me({ mask: b, maskW: p, maskH: c, wx: n, wy: r, wordMask: d }) { for (let l = 0; l < d.length; l += 1) { const a = n + d[l][0], s = r + d[l][1]; a >= 0 && s >= 0 && a < p && s < c && (b[s * p + a] = 1); } } function mt({ wordMask: b, w: p, h: c, dilation: n }) { const r = new Set(b.map(([l, a]) => `${l},${a}`)), d = new Set(r); for (let [l, a] of b) for (let s = -n; s <= n; s += 1) for (let g = -n; g <= n; g += 1) { if (s === 0 && g === 0) continue; const k = l + s, m = a + g; k >= 0 && k < p && m >= 0 && m < c && d.add(`${k},${m}`); } return Array.from(d).map((l) => l.split(",").map(Number)); } function ft({ words: b, proximity: p = 0, svg: c, strictPixelPadding: n }) { const { width: r, height: d } = c, l = Math.round(r), a = Math.round(d), s = 1, g = c.minFontSize, k = Math.min(c.maxFontSize, 100), m = b.map((x) => x.value), y = Math.min(...m), e = Math.max(...m), z = new Uint8Array(l * a), R = document.createElement("canvas"), _ = R.getContext("2d", { willReadFrequently: !0 }); R.width = l, R.height = a; const Y = 6, le = 2, Q = 2, ne = 1, u = Math.floor(l / 2), se = Math.floor(a / 2), ce = [...b].sort((x, O) => O.value - x.value), E = []; for (const x of ce) { let O = g; e !== y && (O = (x.value - y) / (e - y) * (k - g) + g), O = Math.max(g, Math.min(k, O)); let W = !1, N = O; for (; !W && N >= s; ) { let { w: A, h: v, wordMask: D, minX: U, minY: L, maxX: G, maxY: q } = Se({ word: x, fontSize: N, pad: p, canvas: R, ctx: _, svg: c }); n && (D = mt({ wordMask: D, w: A, h: v, dilation: 1 })); let $ = 0, V = 0; for (; $ < Math.max(l, a) && !W && V < 1e4; ) { for (let I = 0; I < 360; I += Y) { V += 1; const M = Math.round(u + $ * Math.cos(I * Math.PI / 180) - A / 2), T = Math.round(se + $ * Math.sin(I * Math.PI / 180) - v / 2); if (!(M < 0 || T < 0 || M + A > l || T + v > a) && Fe({ mask: z, maskW: l, maskH: a, wx: M, wy: T, wordMask: D })) { E.push({ ...x, x: M - l / 2, y: T - a / 2, fontSize: N, width: A, height: v, angle: 0, minX: U, minY: L, maxX: G, maxY: q }), Me({ mask: z, maskW: l, maskH: a, wx: M, wy: T, wordMask: D }), W = !0; break; } } $ += le; } W || (N -= 1); } if (!W && N < s) { N = s; const { w: A, h: v, wordMask: D, minX: U, minY: L, maxX: G, maxY: q } = Se({ word: x, fontSize: N, pad: p, canvas: R, ctx: _, svg: c }); let $ = 0, V = 0; for (; $ < Math.max(l, a) && !W && V < 25e3; ) { for (let I = 0; I < 360; I += Q) { V += 1; const M = Math.round(u + $ * Math.cos(I * Math.PI / 180) - A / 2), T = Math.round(se + $ * Math.sin(I * Math.PI / 180) - v / 2); if (!(M < 0 || T < 0 || M + A > l || T + v > a) && Fe({ mask: z, maskW: l, maskH: a, wx: M, wy: T, wordMask: D })) { E.push({ ...x, x: M - l / 2, y: T - a / 2, fontSize: N, width: A, height: v, angle: 0, minX: U, minY: L, maxX: G, maxY: q }), Me({ mask: z, maskW: l, maskH: a, wx: M, wy: T, wordMask: D }), W = !0; break; } } $ += ne; } } } return E.sort((x, O) => O.fontSize - x.fontSize); } const pt = ["id"], gt = ["xmlns", "viewBox"], yt = ["width", "height"], bt = ["transform"], wt = ["x", "y", "width", "height", "onMouseover"], Ct = ["fill", "font-weight", "x", "y", "font-size", "transform"], kt = { key: 4, class: "vue-data-ui-watermark" }, xt = { key: 5, "data-dom-to-png-ignore": "", class: "reset-wrapper" }, $t = ["innerHTML"], Tt = { __name: "vue-ui-word-cloud", props: { config: { type: Object, default() { return {}; } }, dataset: { type: [Array, String], default() { return []; } } }, setup(b, { expose: p }) { Oe((t) => ({ "7200478e": t.slicerColor })); const { vue_ui_word_cloud: c } = Ve(), n = b, r = oe({ get() { return !!n.dataset && n.dataset.length; }, set(t) { return t; } }), d = f(xe()), l = f(0), a = f(null), s = f(null), g = f(null), k = f(0), m = f(0), y = f(!1), e = oe({ get: () => ne(), set: (t) => t }), z = f(R()); function R() { return typeof n.dataset == "string" ? Be(n.dataset) : n.dataset.map((t, i) => ({ ...t, value: Ye(t.value) })); } me(() => n.dataset, () => { z.value = R(), L(); }); const { userOptionsVisible: _, setUserOptionsVisibility: Y, keepUserOptionState: le } = rt({ config: e.value }), { svgRef: Q } = ut({ config: e.value.style.chart.title }); function ne() { const t = Te({ userConfig: n.config, defaultConfig: c }); return t.theme ? { ...Te({ userConfig: Ue.vue_ui_word_cloud[t.theme] || n.config, defaultConfig: t }), customPalette: De[t.theme] || ue } : t; } me(() => n.config, (t) => { e.value = ne(), _.value = !e.value.userOptions.showOnChartHover, x(), k.value += 1, m.value += 1, v.value.showTable = e.value.table.show, v.value.showTooltip = e.value.style.chart.tooltip.show; }, { deep: !0 }); const u = f({ width: e.value.style.chart.width, height: e.value.style.chart.height, maxFontSize: e.value.style.chart.words.maxFontSize, minFontSize: e.value.style.chart.words.minFontSize, bold: e.value.style.chart.words.bold }), se = ot(() => { L(); }, 10), ce = et(() => { const { width: t, height: i } = tt({ chart: a.value, title: e.value.style.chart.title.text ? s.value : null, source: g.value }); requestAnimationFrame(() => { u.value.width = t, u.value.height = i, ke(se); }); }), E = f(null); Ne(x); function x() { Ee(n.dataset) ? $e({ componentName: "VueUiWordCloud", type: "dataset" }) : z.value.forEach((t, i) => { Ge({ datasetObject: t, requiredAttributes: ["name", "value"] }).forEach((o) => { r.value = !1, $e({ componentName: "VueUiWordCloud", type: "datasetSerieAttribute", property: o, index: i }); }); }), e.value.responsive && (E.value = new ResizeObserver(ce), E.value.observe(a.value.parentNode)); } Ae(() => { E.value && E.value.disconnect(); }); const { isPrinting: O, isImaging: W, generatePdf: N, generateImage: A } = Ke({ elementId: `wordCloud_${d.value}`, fileName: e.value.style.chart.title.text || "vue-ui-word-cloud", options: e.value.userOptions.print }), v = f({ showTable: e.value.table.show, showTooltip: e.value.style.chart.tooltip.show }); function D(t, i, o = "Arial") { const C = document.createElement("canvas").getContext("2d"); return C.font = `${i}px ${e.value.style.chart.words.bold ? "bold" : "normal"} ${o}`, { width: C.measureText(t).width + e.value.style.chart.words.proximity, height: i }; } const U = f([]); me(() => n.dataset, L, { immediate: !0 }); function L() { const t = [...z.value].map((C) => C.value), i = Math.max(...t), o = Math.min(...t), S = [...z.value].map((C, j) => { let H = (C.value - o) / (i - o) * (u.value.maxFontSize - u.value.minFontSize) + u.value.minFontSize; H = isNaN(H) ? u.value.minFontSize : H; const be = D(C.name, H); return { ...C, id: xe(), fontSize: H, width: be.width, height: be.height, color: e.value.style.chart.words.usePalette ? e.value.customPalette[j] || e.value.customPalette[j % e.value.customPalette.length] || ue[j] || ue[j % ue.length] : e.value.style.chart.words.color }; }); U.value = ft({ words: S, svg: u.value, proximity: e.value.style.chart.words.proximity, strictPixelPadding: e.value.strictPixelPadding }); } const G = oe(() => { const t = U.value.map((o) => ({ name: o.name, color: o.color })), i = U.value.map((o) => o.value); return { head: t, body: i }; }); function q() { ke(() => { const t = G.value.head.map((S, C) => [[ S.name ], [G.value.body[C]]]), i = [[e.value.style.chart.title.text], [e.value.style.chart.title.subtitle.text], [[""], [e.value.table.columnNames.value]]].concat(t), o = He(i); qe({ csvContent: o, title: e.value.style.chart.title.text || "vue-ui-word-cloud" }); }); } const $ = oe(() => { const t = [ e.value.table.columnNames.series, e.value.table.columnNames.value ], i = G.value.head.map((C, j) => { const H = Le({ p: e.value.table.td.prefix, v: G.value.body[j], s: e.value.table.td.suffix, r: e.value.table.td.roundingValue }); return [ { color: C.color, name: C.name }, H ]; }), o = { 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 ], head: t, body: i, config: o }; }), V = f(!1); function I(t) { V.value = t, l.value += 1; } function M() { return U.value; } function T() { v.value.showTable = !v.value.showTable; } function ge() { v.value.showTooltip = !v.value.showTooltip; } const ee = f(!1); function de() { ee.value = !ee.value; } const Pe = oe(() => !ee.value && e.value.style.chart.zoom.show), { viewBox: ie, resetZoom: ye, isZoom: ze } = ct(Q, { x: 0, y: 0, width: u.value.width <= 0 ? 10 : u.value.width, height: u.value.height <= 0 ? 10 : u.value.height }, 1, Pe); p({ getData: M, generateCsv: q, generatePdf: N, generateImage: A, toggleTable: T, toggleTooltip: ge, toggleAnnotator: de }); const Z = f(null), te = f(!1), ve = f(""), he = f(null); function _e(t) { if (!v.value.showTooltip) return; Z.value = t.id, he.value = { datapoint: t, config: e.value }; const i = e.value.style.chart.tooltip.customFormat; if (te.value = !1, Ze(i)) try { const o = i({ datapoint: t, config: e.value }); typeof o == "string" && (ve.value = o, te.value = !0); } catch { console.warn("Custom format cannot be applied."), te.value = !1; } if (!te.value) { let o = `<svg viewBox="0 0 10 10" height="${e.value.style.chart.tooltip.fontSize}"><circle cx="5" cy="5" r="5" fill="${t.color}"/></svg><span>${t.name}:</span><b>${(t.value || 0).toFixed(e.value.style.chart.tooltip.roundingValue)}</b>`; ve.value = `<div dir="auto" style="display:flex; gap:4px; align-items:center; jsutify-content:center;">${o}</div>`; } y.value = !0; } return (t, i) => (w(), X("div", { class: "vue-ui-word-cloud", ref_key: "wordCloudChart", ref: a, id: `wordCloud_${d.value}`, style: re(`width: 100%; font-family:${e.value.style.fontFamily};background:${e.value.style.chart.backgroundColor};${e.value.responsive ? "height:100%" : ""}`), onMouseenter: i[3] || (i[3] = () => h(Y)(!0)), onMouseleave: i[4] || (i[4] = () => h(Y)(!1)) }, [ e.value.userOptions.buttons.annotator ? (w(), ae(it, { key: 0, svgRef: h(Q), backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, active: ee.value, onClose: de }, null, 8, ["svgRef", "backgroundColor", "color", "active"])) : B("", !0), e.value.style.chart.title.text ? (w(), X("div", { key: 1, ref_key: "chartTitle", ref: s, style: "width:100%;background:transparent;padding-bottom:24px" }, [ (w(), ae(Je, { key: `title_${k.value}`, config: { title: { ...e.value.style.chart.title }, subtitle: { ...e.value.style.chart.title.subtitle } } }, null, 8, ["config"])) ], 512)) : B("", !0), e.value.userOptions.show && r.value && (h(le) || h(_)) ? (w(), ae(Qe, { ref: "details", key: `user_option_${l.value}`, backgroundColor: e.value.style.chart.backgroundColor, color: e.value.style.chart.color, isPrinting: h(O), isImaging: h(W), uid: d.value, hasPdf: e.value.userOptions.buttons.pdf, hasXls: e.value.userOptions.buttons.csv, hasImg: e.value.userOptions.buttons.img, hasTable: e.value.userOptions.buttons.table, hasFullscreen: e.value.userOptions.buttons.fullscreen, isFullscreen: V.value, titles: { ...e.value.userOptions.buttonTitles }, chartElement: a.value, position: e.value.userOptions.position, hasTooltip: e.value.style.chart.tooltip.show && e.value.userOptions.buttons.tooltip, isTooltip: v.value.showTooltip, hasAnnotator: e.value.userOptions.buttons.annotator, isAnnotation: ee.value, onToggleFullscreen: I, onGeneratePdf: h(N), onGenerateCsv: q, onGenerateImage: h(A), onToggleTable: T, onToggleTooltip: ge, onToggleAnnotator: de, style: re({ visibility: h(le) ? h(_) ? "visible" : "hidden" : "visible" }) }, Ie({ _: 2 }, [ t.$slots.menuIcon ? { name: "menuIcon", fn: P(({ isOpen: o, color: S }) => [ F(t.$slots, "menuIcon", J(K({ isOpen: o, color: S })), void 0, !0) ]), key: "0" } : void 0, t.$slots.optionPdf ? { name: "optionPdf", fn: P(() => [ F(t.$slots, "optionPdf", {}, void 0, !0) ]), key: "1" } : void 0, t.$slots.optionCsv ? { name: "optionCsv", fn: P(() => [ F(t.$slots, "optionCsv", {}, void 0, !0) ]), key: "2" } : void 0, t.$slots.optionImg ? { name: "optionImg", fn: P(() => [ F(t.$slots, "optionImg", {}, void 0, !0) ]), key: "3" } : void 0, t.$slots.optionTable ? { name: "optionTable", fn: P(() => [ F(t.$slots, "optionTable", {}, void 0, !0) ]), key: "4" } : void 0, t.$slots.optionFullscreen ? { name: "optionFullscreen", fn: P(({ toggleFullscreen: o, isFullscreen: S }) => [ F(t.$slots, "optionFullscreen", J(K({ toggleFullscreen: o, isFullscreen: S })), void 0, !0) ]), key: "5" } : void 0, t.$slots.optionAnnotator ? { name: "optionAnnotator", fn: P(({ toggleAnnotator: o, isAnnotator: S }) => [ F(t.$slots, "optionAnnotator", J(K({ toggleAnnotator: o, isAnnotator: S })), void 0, !0) ]), key: "6" } : void 0 ]), 1032, ["backgroundColor", "color", "isPrinting", "isImaging", "uid", "hasPdf", "hasXls", "hasImg", "hasTable", "hasFullscreen", "isFullscreen", "titles", "chartElement", "position", "hasTooltip", "isTooltip", "hasAnnotator", "isAnnotation", "onGeneratePdf", "onGenerateImage", "style"])) : B("", !0), r.value ? (w(), X("svg", { key: 3, ref_key: "svgRef", ref: Q, class: we({ "vue-data-ui-fullscreen--on": V.value, "vue-data-ui-fulscreen--off": !V.value }), xmlns: h(je), viewBox: `${h(ie).x} ${h(ie).y} ${h(ie).width} ${h(ie).height}`, style: "overflow:hidden;background:transparent;" }, [ fe(nt), t.$slots["chart-background"] ? (w(), X("foreignObject", { key: 0, x: 0, y: 0, width: u.value.width <= 0 ? 10 : u.value.width, height: u.value.height <= 0 ? 10 : u.value.height, style: { pointerEvents: "none" } }, [ F(t.$slots, "chart-background", {}, void 0, !0) ], 8, yt)) : B("", !0), pe("g", { transform: `translate(${(u.value.width <= 0 ? 10 : u.value.width) / 2}, ${(u.value.height <= 0 ? 10 : u.value.height) / 2})` }, [ (w(!0), X(Xe, null, Re(U.value, (o, S) => (w(), X("g", null, [ o.minX !== void 0 ? (w(), X("rect", { key: 0, x: o.x + o.minX, y: o.y + o.minY * 1.25, width: o.maxX - o.minX, height: o.maxY - o.minY, fill: "transparent", "pointer-events": "visiblePainted", onMouseover: (C) => _e(o), onMouseleave: i[0] || (i[0] = (C) => { Z.value = null, y.value = !1; }) }, null, 40, wt)) : B("", !0), (w(), X("text", { fill: o.color, "font-weight": e.value.style.chart.words.bold ? "bold" : "normal", key: S, x: o.x, y: o.y, "font-size": o.fontSize, transform: `translate(${o.width / 2}, ${o.height / 2})`, class: we({ animated: e.value.useCssAnimation, "word-selected": Z.value && Z.value === o.id && v.value.showTooltip, "word-not-selected": Z.value && Z.value !== o.id && v.value.showTooltip }), "text-anchor": "middle", "dominant-baseline": "central", style: re(`animation-delay:${S * e.value.animationDelayMs}ms !important; pointer-events:none;`) }, Ce(o.name), 15, Ct)) ]))), 256)) ], 8, bt), F(t.$slots, "svg", { svg: { height: u.value.height, width: u.value.width } }, void 0, !0) ], 10, gt)) : B("", !0), t.$slots.watermark ? (w(), X("div", kt, [ F(t.$slots, "watermark", J(K({ isPrinting: h(O) || h(W) })), void 0, !0) ])) : B("", !0), h(ze) ? (w(), X("div", xt, [ F(t.$slots, "reset-action", { reset: h(ye) }, () => [ pe("button", { "data-cy-reset": "", tabindex: "0", role: "button", class: "vue-data-ui-refresh-button", style: re({ background: e.value.style.chart.backgroundColor }), onClick: i[1] || (i[1] = (o) => h(ye)(!0)) }, [ fe(dt, { name: "refresh", stroke: e.value.style.chart.color }, null, 8, ["stroke"]) ], 4) ], !0) ])) : B("", !0), fe(st, { show: v.value.showTooltip && y.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: a.value, content: ve.value, isCustom: te.value }, { "tooltip-before": P(() => [ F(t.$slots, "tooltip-before", J(K({ ...he.value })), void 0, !0) ]), "tooltip-after": P(() => [ F(t.$slots, "tooltip-after", J(K({ ...he.value })), void 0, !0) ]), _: 3 }, 8, ["show", "backgroundColor", "color", "fontSize", "borderRadius", "borderColor", "borderWidth", "backgroundOpacity", "position", "offsetY", "parent", "content", "isCustom"]), t.$slots.source ? (w(), X("div", { key: 6, ref_key: "source", ref: g, dir: "auto" }, [ F(t.$slots, "source", {}, void 0, !0) ], 512)) : B("", !0), r.value ? (w(), ae(at, { key: 7, hideDetails: "", config: { open: v.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: P(() => [ (w(), ae(lt, { key: `table_${m.value}`, colNames: $.value.colNames, head: $.value.head, body: $.value.body, config: $.value.config, title: `${e.value.style.chart.title.text}${e.value.style.chart.title.subtitle.text ? ` : ${e.value.style.chart.title.subtitle.text}` : ""}`, onClose: i[2] || (i[2] = (o) => v.value.showTable = !1) }, { th: P(({ th: o }) => [ pe("div", { innerHTML: o, style: { display: "flex", "align-items": "center" } }, null, 8, $t) ]), td: P(({ td: o }) => [ We(Ce(o.name || o), 1) ]), _: 1 }, 8, ["colNames", "head", "body", "config", "title"])) ]), _: 1 }, 8, ["config"])) : B("", !0) ], 44, pt)); } }, Dt = /* @__PURE__ */ vt(Tt, [["__scopeId", "data-v-cda211d1"]]); export { Dt as default };