vue-data-ui
Version:
A user-empowering data visualization Vue 3 components library for eloquent data storytelling
935 lines • 91.6 kB
JavaScript
import { n as Y, t as W, q as G, r as J, d as K, u as Z, v as q, w as Q, m as $, x as ee, s as E, j as te } from "./lib-2iaAPQ_c.js";
import { u as se } from "./useNestedProp-2p4Tjzc8.js";
import { V as ne } from "./vue-ui-xy-GG6jRpRS.js";
import { V as re } from "./vue-ui-donut-CN7x4Wrm.js";
import le from "./BaseIcon-CbVDYv89.js";
import { resolveComponent as x, createElementBlock as u, openBlock as c, normalizeStyle as g, createCommentVNode as b, createElementVNode as a, toDisplayString as h, withDirectives as O, withKeys as L, withModifiers as S, vModelText as A, createVNode as P, Fragment as C, renderList as k, normalizeClass as p, createTextVNode as _, vModelSelect as H, createBlock as R, ref as oe, computed as ae, useCssVars as ie } from "vue";
import { _ as ce } from "./_plugin-vue_export-helper-CHgC5LLL.js";
const D = {
name: "vue-ui-table",
props: {
config: {
type: Object,
default() {
return {};
}
},
dataset: {
type: Object,
default() {
return {};
}
}
},
components: { VueUiXy: ne, VueUiDonut: re, BaseIcon: le },
emits: ["page-change"],
data() {
return {
uid: `vue-ui-table-${Math.random()}`,
bodyCopy: JSON.parse(JSON.stringify(this.dataset.body)).map((t, r) => ({
...t,
absoluteIndex: r
})),
buttonTimeout: null,
canMoveChart: !1,
chart: {
height: 316,
type: "bar",
width: 512
},
constants: {
ASC: 1,
BAR: "bar",
DATE: "date",
DESC: -1,
DONUT: "donut",
LINE: "line",
NUMERIC: "numeric",
PERCENTAGE: "percentage",
TEXT: "text"
},
clientX: 100,
clientY: 100,
dragOffsetX: 0,
dragOffsetY: 0,
modalWidth: 400,
modalHeight: 200,
cssClass: {
CELL: "smart-td-selected",
FIRST_TD: "smart-td-selected-first",
LAST_TD: "smart-td-selected-last",
ROW: "smart-td-selected-neighbor"
},
currentDonut: void 0,
currentFilter: void 0,
currentSearch: void 0,
currentSelectionSpan: {
col: void 0,
rows: []
},
currentPage: 0,
dates: {},
filteredDatesIndexes: {},
hasNaN: {},
iconColor: "#2D353C",
iconSize: 20,
immutableRangeFilters: {},
isExportRequest: !1,
isLoading: !1,
itemsPerPage: this.config.rowsPerPage ? this.config.rowsPerPage : 25,
multiselects: {},
paginatorOptions: [.../* @__PURE__ */ new Set([10, 25, 50, 100, 250, 500, this.config.rowsPerPage ? this.config.rowsPerPage : 25, this.dataset.body.length])].sort((t, r) => t - r),
palette: te,
percentages: {},
rafId: null,
rangeFilters: {},
searches: {},
selectedColumn: void 0,
selectedDonutCategory: void 0,
selectedPlot: void 0,
showChart: !1,
showDonutOptions: !1,
sorts: {},
chartStep: 0,
chartTimeLabelSourceModel: "",
tableBody: JSON.parse(JSON.stringify(this.dataset.body)).map((t, r) => ({
...t,
absoluteIndex: r
})),
tableHead: JSON.parse(JSON.stringify(this.dataset.header)).map((t, r) => ({
average: Object.hasOwn(t, "average") ? t.average : !1,
decimals: Object.hasOwn(t, "decimals") ? t.decimals : 0,
isMultiselect: Object.hasOwn(t, "isMultiselect") ? t.isMultiselect : !1,
isPercentage: Object.hasOwn(t, "isPercentage") ? t.isPercentage : !1,
isSearch: Object.hasOwn(t, "isSearch") ? t.isSearch : !1,
isSort: Object.hasOwn(t, "isSort") ? t.isSort : !1,
name: t.name,
// this attribute is mandatory
percentageTo: Object.hasOwn(t, "percentageTo") ? t.percentageTo : void 0,
prefix: Object.hasOwn(t, "prefix") ? t.prefix : "",
rangeFilter: Object.hasOwn(t, "rangeFilter") ? t.rangeFilter : !1,
suffix: Object.hasOwn(t, "suffix") ? t.suffix : "",
sum: Object.hasOwn(t, "sum") ? t.sum : !1,
type: t.type,
// this attribute is mandatory
index: r
})),
filename: ""
};
},
setup() {
const n = oe(null), t = ae(() => n.value ? n.value.getBoundingClientRect().height + 3 : 3);
return {
tableCaption: n,
exportButtonTop: t
};
},
mounted() {
if (this.dataset.header.length === 0)
throw new Error(`vue-ui-table error: missing header data.
Provide an array of objects of type:
{
name: string;
type: string; ('text' | 'numeric' | 'date')
average: boolean;
decimals: number | undefined;
sum: boolean;
isSort:boolean;
isSearch: boolean;
isMultiselect: boolean;
isPercentage: boolean;
percentageTo: string; (or '')
}`);
if (this.dataset.body.length === 0)
throw new Error("vue-ui-table error: missing body data");
this.isLoading = !0, this.promiseWithAsyncFunction(this.prepareBodyCopy, () => {
this.$forceUpdate(), this.isLoading = !1;
}), document.addEventListener("keydown", (n) => {
const t = document.activeElement;
(t && Array.from(t.classList).includes("td-focusable") && n.key.includes("Arrow") || n.code === "Space") && n.preventDefault();
}), this.filename = this.FINAL_CONFIG.style.exportMenu.filename, this.chartTimeLabelSourceModel = this.dateHeaders[0]?.name ?? "";
},
watch: {
isExportRequest: function(n) {
if (n) {
const t = this.$refs.filenameInputRef;
t && t.focus();
}
},
showChart: function(n) {
n && this.$nextTick(() => {
this.closeDragElement();
});
},
dataset: {
handler(n) {
this.isLoading = !0, this.bodyCopy = JSON.parse(JSON.stringify(n.body)).map((t, r) => ({
...t,
absoluteIndex: r
})), this.tableBody = JSON.parse(JSON.stringify(n.body)).map((t, r) => ({
...t,
absoluteIndex: r
})), this.tableHead = JSON.parse(JSON.stringify(n.header)).map((t, r) => ({
average: Object.hasOwn(t, "average") ? t.average : !1,
decimals: Object.hasOwn(t, "decimals") ? t.decimals : 0,
isMultiselect: Object.hasOwn(t, "isMultiselect") ? t.isMultiselect : !1,
isPercentage: Object.hasOwn(t, "isPercentage") ? t.isPercentage : !1,
isSearch: Object.hasOwn(t, "isSearch") ? t.isSearch : !1,
isSort: Object.hasOwn(t, "isSort") ? t.isSort : !1,
name: t.name,
percentageTo: Object.hasOwn(t, "percentageTo") ? t.percentageTo : void 0,
prefix: Object.hasOwn(t, "prefix") ? t.prefix : "",
rangeFilter: Object.hasOwn(t, "rangeFilter") ? t.rangeFilter : !1,
suffix: Object.hasOwn(t, "suffix") ? t.suffix : "",
sum: Object.hasOwn(t, "sum") ? t.sum : !1,
type: t.type,
index: r
})), this.currentSelectionSpan = { col: void 0, rows: [] }, this.selectedColumn = void 0, this.itemsPerPage = this.config.rowsPerPage ? this.config.rowsPerPage : 25, this.percentages = {}, this.dates = {}, this.filteredDatesIndexes = {}, this.hasNaN = {}, this.immutableRangeFilters = {}, this.rangeFilters = {}, this.multiselects = {}, this.searches = {}, this.sorts = {}, this.showChart = !1, this.currentDonut = void 0, this.selectedDonutCategory = void 0, this.selectedPlot = void 0, this.showDonutOptions = !1, this.currentSelectionSpan.col = void 0, this.currentSelectionSpan.rows = [], this.promiseWithAsyncFunction(this.prepareBodyCopy, () => {
this.$forceUpdate(), this.updateCurrentPage(), this.isLoading = !1;
});
},
deep: !0,
// In case dataset.body/header are updated in-place
immediate: !1
}
},
computed: {
colorCancelInactive() {
return this.FINAL_CONFIG.style.th.buttons.cancel.inactive.backgroundColor;
},
textColorCancelInactive() {
return this.FINAL_CONFIG.style.th.buttons.cancel.inactive.color;
},
colorCancelActive() {
return this.FINAL_CONFIG.style.th.buttons.cancel.active.backgroundColor;
},
colorCancelActiveLight() {
return G(this.colorCancelActive, 0.33);
},
colorCancelActiveOutline() {
return E(this.colorCancelActive, 33);
},
colorButtonSortActive() {
return this.FINAL_CONFIG.style.th.buttons.filter.active.backgroundColor;
},
colorButtonSortActiveLight() {
return G(this.colorButtonSortActive, 0.33);
},
colorButtonSortActiveOutline() {
return E(this.colorButtonSortActive, 33);
},
colorButtonSortInactive() {
return this.FINAL_CONFIG.style.th.buttons.filter.inactive.backgroundColor;
},
colorButtonSortActiveColorText() {
return this.FINAL_CONFIG.style.th.buttons.filter.active.color;
},
dateHeaders() {
return [...this.tableHead].filter((n) => n.type === this.constants.DATE);
},
chartTimeLabelOptions() {
return ["", ...this.dateHeaders.map((n) => n.name)];
},
chartTimeLabelSourceIndex() {
const n = this.dateHeaders.find((t) => t.name === this.chartTimeLabelSourceModel);
return n ? n.index : null;
},
chartTimeLabels() {
return this.chartTimeLabelSourceIndex == null ? [] : this.visibleRows.map((n) => n.td[this.chartTimeLabelSourceIndex]);
},
availableDonutCategories() {
return Object.keys(this.multiselects).map((n) => ({
index: n,
name: this.dataset.header[n].name,
options: this.multiselects[n]
}));
},
canChart() {
return this.FINAL_CONFIG.useChart && this.currentSelectionSpan.rows.length > 1;
},
chartData() {
if (!this.canChart) return [];
const n = 316, t = 512, r = this.currentSelectionSpan.rows.length, i = t / r, s = Math.max(...this.currentSelectionSpan.rows.map((v) => v.value)), e = Math.min(...this.currentSelectionSpan.rows.map((v) => v.value)), m = this.dataset.header[this.currentSelectionSpan.col].isPercentage && this.dataset.header[this.currentSelectionSpan.col].percentageTo, f = this.chart.type === this.constants.DONUT && this.selectedDonutCategory && this.selectedDonutCategory.name, w = this.dataset.header[this.currentSelectionSpan.col].name + (m ? ` / ${this.dataset.header[this.percentages[this.currentSelectionSpan.col].referenceIndex].name}` : "") + (f ? ` ${this.FINAL_CONFIG.translations.by} ${this.selectedDonutCategory.name}` : ""), o = this.dataset.header[this.currentSelectionSpan.col].prefix, l = this.dataset.header[this.currentSelectionSpan.col].suffix, d = [
{
name: w,
series: this.currentSelectionSpan.rows.map((v) => v.value),
type: "line",
useProgression: !0,
smooth: this.FINAL_CONFIG.style.chart.layout.line.smooth,
color: this.FINAL_CONFIG.style.chart.layout.line.stroke,
useArea: this.FINAL_CONFIG.style.chart.layout.line.useArea
}
], y = [
{
name: w,
series: this.currentSelectionSpan.rows.map((v) => v.value),
type: "bar",
useProgression: !0,
color: this.FINAL_CONFIG.style.chart.layout.bar.fill
}
], I = this.FINAL_CONFIG.style.chart.modal.backgroundColor, N = this.adaptColorToBackground(I), F = this.dataset.header[this.currentSelectionSpan.col].decimals, V = {
chart: {
backgroundColor: I,
color: N,
labels: {
fontSize: 18,
prefix: o,
suffix: l
},
grid: {
stroke: G(N, 0.5),
labels: {
color: N,
xAxisLabels: {
color: N,
show: this.chartTimeLabels.length,
values: this.chartTimeLabels,
datetimeFormatter: this.FINAL_CONFIG.style.chart.layout.datetimeFormatter,
showOnlyAtModulo: this.FINAL_CONFIG.style.chart.layout.timeLabels.showOnlyAtModulo,
modulo: this.FINAL_CONFIG.style.chart.layout.timeLabels.modulo
}
}
},
highlighter: {
color: N
},
legend: {
color: N
},
title: {
text: w,
color: N,
fontSize: 18
},
tooltip: {
showTimeLabel: this.chartTimeLabels.length,
backgroundOpacity: 30,
color: N,
backgroundColor: I,
showPercentage: !1,
roundingValue: F
},
userOptions: {
position: "left",
buttons: {
pdf: !1,
csv: !1,
table: !1,
annotator: !1
}
},
zoom: {
show: this.FINAL_CONFIG.style.chart.layout.zoom.show,
focusOnDrag: !0,
minimap: {
show: !0
}
}
},
line: {
labels: {
show: !0,
color: N,
rounding: F
},
dot: {
useSerieColor: !1,
fill: this.FINAL_CONFIG.style.chart.layout.line.plot.fill,
strokeWidth: this.FINAL_CONFIG.style.chart.layout.line.plot.strokeWidth
}
},
bar: {
useGradient: !1,
border: {
useSerieColor: !1,
stroke: this.FINAL_CONFIG.style.chart.layout.bar.stroke,
strokeWidth: this.FINAL_CONFIG.style.chart.layout.bar.strokeWidth
},
labels: {
show: !0,
color: N,
rounding: F
}
}
}, T = e >= 0 ? 0 : Math.abs(e), j = s + T, M = this.dataset.header[this.currentSelectionSpan.col].isPercentage, B = this.currentSelectionSpan.rows.map((v, X) => ({
x: i * X + i / 2,
y: (1 - (v.value + T) / j) * n,
value: M ? v.value * 100 : v.value,
suffix: M ? "%" : this.dataset.header[this.currentSelectionSpan.col].suffix ? this.dataset.header[this.currentSelectionSpan.col].suffix : "",
prefix: this.dataset.header[this.currentSelectionSpan.col].prefix ? this.dataset.header[this.currentSelectionSpan.col].prefix : "",
index: v.index,
absoluteValue: M ? Math.abs(v.value) * 100 : Math.abs(v.value)
}));
return {
donutConfig: {
userOptions: {
position: "left",
buttons: {
pdf: !1,
csv: !1,
table: !1,
annotator: !1
}
},
style: {
chart: {
backgroundColor: I,
color: N,
layout: {
curvedMarkers: !0,
donut: {
strokeWidth: 64
},
labels: {
dataLabels: {
suffix: M ? "%" : "",
prefix: o
},
value: {
rounding: F
},
percentage: {
color: N,
rounding: F
},
name: {
color: N
},
hollow: {
average: {
color: N,
text: this.FINAL_CONFIG.translations.average,
value: {
color: N
}
},
total: {
color: N,
offsetY: -12,
text: this.FINAL_CONFIG.translations.total,
value: {
color: N,
offsetY: -12
}
}
}
}
},
legend: {
backgroundColor: I,
color: N,
roundingValue: F,
roundingPercentage: F
},
padding: {
left: 12,
right: 12
},
title: {
text: w,
color: N,
fontSize: 18
},
tooltip: {
backgroundOpacity: 30,
color: N,
backgroundColor: I,
roundingValue: F,
roundingValue: F
}
}
}
},
xyConfig: V,
xyDatasetLine: d,
xyDatasetBar: y,
progression: B.length >= 2 ? this.calcLinearProgression(B) : !1
};
},
hasNumericTypes() {
return this.dataset.header.map((n) => n.type).includes(this.constants.NUMERIC);
},
icons() {
return {
arrowSort: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 9l4 -4l4 4m-4 -4v14" /><path d="M21 15l-4 4l-4 -4m4 4v-14" /></svg>`,
bar: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 12m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z" /><path d="M9 8m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z" /><path d="M15 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z" /><path d="M4 20l14 0" /></svg>`,
chart: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 19l16 0" /><path d="M4 15l4 -6l4 2l4 -5l4 4" /></svg>`,
chevronDown: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M6 9l6 6l6 -6" /></svg>`,
chevronLeft: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize * 1.6}" height="${this.iconSize * 1.6}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15 6l-6 6l6 6" /></svg>`,
chevronRight: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize * 1.6}" height="${this.iconSize * 1.6}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 6l6 6l-6 6" /></svg>`,
donut: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize * 0.8}" height="${this.iconSize * 0.8}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 3v5m4 4h5" /><path d="M8.929 14.582l-3.429 2.918" /><path d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" /><path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" /></svg>`,
export: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12.5 21h-7.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5" /><path d="M3 10h18" /><path d="M10 3v18" /><path d="M16 19h6" /><path d="M19 16l3 3l-3 3" /></svg>`,
fileDownload: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z" /><path d="M12 17v-6" /><path d="M9.5 14.5l2.5 2.5l2.5 -2.5" /></svg>`,
filter: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z" /></svg>`,
move: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 9l3 3l-3 3" /><path d="M15 12h6" /><path d="M6 9l-3 3l3 3" /><path d="M3 12h6" /><path d="M9 18l3 3l3 -3" /><path d="M12 15v6" /><path d="M15 6l-3 -3l-3 3" /><path d="M12 3v6" /></svg>`,
sort09: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 15l3 3l3 -3" /><path d="M7 6v12" /><path d="M17 3a2 2 0 0 1 2 2v3a2 2 0 1 1 -4 0v-3a2 2 0 0 1 2 -2z" /><path d="M17 16m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /><path d="M19 16v3a2 2 0 0 1 -2 2h-1.5" /></svg>`,
sort90: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 15l3 3l3 -3" /><path d="M7 6v12" /><path d="M17 14a2 2 0 0 1 2 2v3a2 2 0 1 1 -4 0v-3a2 2 0 0 1 2 -2z" /><path d="M17 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /><path d="M19 5v3a2 2 0 0 1 -2 2h-1.5" /></svg>`,
sortAZ: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15 10v-5c0 -1.38 .62 -2 2 -2s2 .62 2 2v5m0 -3h-4" /><path d="M19 21h-4l4 -7h-4" /><path d="M4 15l3 3l3 -3" /><path d="M7 6v12" /></svg>`,
sortZA: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M15 21v-5c0 -1.38 .62 -2 2 -2s2 .62 2 2v5m0 -3h-4" /><path d="M19 10h-4l4 -7h-4" /><path d="M4 15l3 3l3 -3" /><path d="M7 6v12" /></svg>`,
sum: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 16v2a1 1 0 0 1 -1 1h-11l6 -7l-6 -7h11a1 1 0 0 1 1 1v2" /></svg>`,
table: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" fill="white" d="M 10 2, 21 2, 21 21, 10 21Z"/><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z" /><path d="M3 10h18" /><path d="M10 3v18" /></svg>`,
warning: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize * 0.8}" height="${this.iconSize * 0.8}" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M10.24 3.957l-8.422 14.06a1.989 1.989 0 0 0 1.7 2.983h16.845a1.989 1.989 0 0 0 1.7 -2.983l-8.423 -14.06a1.989 1.989 0 0 0 -3.4 0z" /><path d="M12 9v4" /><path d="M12 17h.01" /></svg>`,
grip: `<svg xmlns="http://www.w3.org/2000/svg" width="${this.iconSize}" height="${this.iconSize}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M5 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M19 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M19 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /></svg>`
};
},
pages() {
const n = [];
if (this.bodyCopy.length)
for (let t = 0; t < this.bodyCopy.length; t += this.itemsPerPage)
n.push(this.bodyCopy.slice(t, t + this.itemsPerPage));
return n;
},
rows() {
return this.bodyCopy.map((n) => n.td);
},
selectedCellsCalculations() {
return {
sumPercentage: Number((this.currentSelectionSpan.rows.map((n) => n.value).reduce((n, t) => n + t, 0) * 100).toFixed(this.dataset.header[this.currentSelectionSpan.col].decimals)).toLocaleString(),
sumRegular: Number(this.currentSelectionSpan.rows.map((n) => n.value).reduce((n, t) => n + t, 0).toFixed(this.dataset.header[this.currentSelectionSpan.col].decimals)).toLocaleString(),
averagePercentage: Number((this.currentSelectionSpan.rows.map((n) => n.value).reduce((n, t) => n + t, 0) / this.currentSelectionSpan.rows.length * 100).toFixed(this.dataset.header[this.currentSelectionSpan.col].decimals)).toLocaleString(),
averageRegular: Number((this.currentSelectionSpan.rows.map((n) => n.value).reduce((n, t) => n + t, 0) / this.currentSelectionSpan.rows.length).toFixed(this.dataset.header[this.currentSelectionSpan.col].decimals)).toLocaleString()
};
},
FINAL_CONFIG() {
const { vue_ui_table: n } = se();
if (!Object.keys(this.config || {}).length)
return n;
const t = this.treeShake({
defaultConfig: n,
userConfig: this.config
});
return this.convertConfigColors(t);
},
visibleRows() {
return this.pages[this.currentPage];
}
},
methods: {
// lib
adaptColorToBackground: ee,
convertColorToHex: $,
convertConfigColors: Q,
createCsvContent: q,
darkenHexColor: Z,
dataLabel: K,
downloadCsv: J,
lightenHexColor: G,
treeShake: W,
// specific
applyDonutOption() {
const n = this.selectedDonutCategory.options.map((t, r) => ({
name: t,
color: this.palette[r] || this.palette[r % this.palette.length],
values: [this.visibleRows.filter((i, s) => i.td[this.selectedDonutCategory.index] === t && this.currentSelectionSpan.rows.map((e) => e.index).includes(s)).map((i) => i.td[this.currentSelectionSpan.col]).reduce((i, s) => Math.abs(i) + Math.abs(s), 0)],
absoluteValue: this.visibleRows.filter((i, s) => i.td[this.selectedDonutCategory.index] === t && this.currentSelectionSpan.rows.map((e) => e.index).includes(s)).map((i) => i.td[this.currentSelectionSpan.col]).reduce((i, s) => i + s, 0)
})).sort((t, r) => r.value - t.value);
this.currentDonut = n, this.$nextTick(() => {
this.chart.type = this.constants.DONUT, this.showDonutOptions = !1;
});
},
calcRectY(n, t) {
return n >= 0 ? t : this.chartData.zero;
},
canResetColumn(n, t) {
return !this.hasNaN[n] && (t.isSort || t.isSearch || t.isMultiselect || t.rangeFilter) && ![this.constants.DATE].includes(t.type);
},
createXls(n = "all") {
const t = this.dataset.header.map((e) => e.name), r = n === "all" ? this.bodyCopy.map((e) => e.td) : this.visibleRows.map((e) => e.td), i = [t].concat(r), s = this.createCsvContent(i);
this.downloadCsv({ csvContent: s, title: this.filename });
},
calcLinearProgression: Y,
closeAllDropdowns() {
const n = document.getElementsByClassName("th-dropdown");
n.length && Array.from(n).forEach((t) => {
t.dataset.isOpen = !1;
});
},
debounce(n, t) {
let r;
clearTimeout(r), r = setTimeout(n, t);
},
filterBody() {
this.bodyCopy = this.tableBody.filter((n) => {
for (const t in this.searches)
if (!n.td[t].toUpperCase().includes(this.searches[t].toUpperCase()))
return !1;
for (const t in this.multiselects)
if (!this.multiselects[t].some((i) => i === n.td[t]))
return !1;
for (const t in this.dates) {
const r = new Date(n.td[t]), i = new Date(this.dates[t].from), s = new Date(this.dates[t].to);
if (r < i || r > s)
return !1;
}
return !0;
}), this.sortBody();
},
getAverage(n) {
return this.rows.map((t) => t[n]).map((t) => isNaN(Number(t)) ? 0 : t).reduce((t, r) => t + r, 0) / this.bodyCopy.length;
},
getDatesRange(n) {
const t = this.dataset.body.map((y) => new Date(y.td[n])), r = new Date(Math.min(...t)), i = new Date(Math.max(...t)), s = r.getFullYear(), e = i.getFullYear(), m = String(r.getMonth() + 1).padStart(2, "0"), f = String(i.getMonth() + 1).padStart(2, "0"), w = String(r.getDate()).padStart(2, "0"), o = String(i.getDate()).padStart(2, "0"), l = `${s}-${m}-${w}`, d = `${e}-${f}-${o}`;
return {
from: l,
to: d
};
},
getDonutLegendValue(n) {
return Number((n * (this.dataset.header[this.currentSelectionSpan.col].isPercentage ? 100 : 1)).toFixed(this.dataset.header[this.currentSelectionSpan.col].decimals)).toLocaleString();
},
getDropdownOptions(n) {
return [...new Set(this.dataset.body.map((t) => t.td[n]))];
},
getSum(n) {
return this.rows.map((t) => t[n]).map((t) => isNaN(Number(t)) ? 0 : t).reduce((t, r) => t + r, 0);
},
includesNaN(n) {
return n.includes(NaN);
},
isDropdownOptionSelected(n, t) {
return this.multiselects[t] ? this.multiselects[t].includes(n) : !0;
},
isNumeric(n) {
return !isNaN(Number(String(n).replaceAll("%", "")));
},
isResetDisabled(n, t) {
const r = t.isSort, i = t.isSearch, s = t.isMultiselect && this.multiselects[n], e = t.rangeFilter, m = (f) => {
if (e && this.rangeFilters[f])
return Math.round(this.rangeFilters[f].min) === this.immutableRangeFilters[f].min && Math.round(this.rangeFilters[f].max) === this.immutableRangeFilters[f].max;
};
if (r && i && s && e)
return ["", void 0].includes(this.searches[n]) && [void 0].includes(this.sorts[n]) && this.multiselects[n].length === this.getDropdownOptions(n).length && m(n);
if (r && i && s)
return ["", void 0].includes(this.searches[n]) && [void 0].includes(this.sorts[n]) && this.multiselects[n].length === this.getDropdownOptions(n).length;
if (r && i && e)
return ["", void 0].includes(this.searches[n]) && [void 0].includes(this.sorts[n]) && m(n);
if (r && i)
return ["", void 0].includes(this.searches[n]) && [void 0].includes(this.sorts[n]);
if (r && s && e)
return [void 0].includes(this.sorts[n]) && this.multiselects[n].length === this.getDropdownOptions(n).length && m(n);
if (r && s)
return [void 0].includes(this.sorts[n]) && this.multiselects[n].length === this.getDropdownOptions(n).length;
if (i && s && e)
return ["", void 0].includes(this.searches[n]) && this.multiselects[n].length === this.getDropdownOptions(n).length && m(n);
if (i && s)
return ["", void 0].includes(this.searches[n]) && this.multiselects[n].length === this.getDropdownOptions(n).length;
if (i && e)
return ["", void 0].includes(this.searches[n]) && m(n);
if (i)
return ["", void 0].includes(this.searches[n]);
if (r && e)
return [void 0].includes(this.sorts[n]) && m(n);
if (r)
return [void 0].includes(this.sorts[n]);
if (s && e)
return this.multiselects[n].length === this.getDropdownOptions(n).length && m(n);
if (s)
return this.multiselects[n].length === this.getDropdownOptions(n).length;
},
getCurrentPageData() {
return {
totalPages: this.pages.length,
itemsPerPage: this.itemsPerPage,
currentPage: this.currentPage,
currentPageData: this.visibleRows.map((n) => n.td)
};
},
onPageChange() {
this.$emit("page-change", this.getCurrentPageData());
},
navigate(n) {
if (this.resetSelection(), n === "next" && this.currentPage < this.pages.length) {
if (this.currentPage + 1 > this.pages.length - 1)
return;
this.currentPage += 1;
} else if (n === "previous" && this.currentPage >= 1)
this.currentPage -= 1;
else {
if (n - 1 < 0 || n > this.pages.length || n === "previous")
return;
this.currentPage = n - 1;
}
this.onPageChange(), this.$refs.tableWrapper.scrollTo({
top: 0,
left: 0,
behavior: "smooth"
});
},
navigateCell(n) {
n.preventDefault();
const t = n.keyCode, r = 38, i = 40, s = 37, e = 39;
if (![r, i, s, e].includes(t)) return;
const m = n.target.id, f = /cell_(\d+)_(\d+)_vue-ui-table-(\d+)/, w = m.match(f), o = parseInt(w[1]), l = parseInt(w[2]), d = document.getElementById(`cell_${o}_${l + 1}_${this.uid}`), y = document.getElementById(`cell_${o}_${l - 1}_${this.uid}`), I = document.getElementById(`cell_${o + 1}_${l}_${this.uid}`), N = document.getElementById(`cell_${o - 1}_${l}_${this.uid}`);
let F;
switch (!0) {
case t === e:
F = d;
break;
case t === s:
F = y;
break;
case t === r:
F = N;
break;
case t === i:
F = I;
break;
default:
return;
}
F && (F.focus(), F.scrollIntoView({ behavior: "smooth", block: "center" }));
},
openDonutOptions() {
this.selectedDonutCategory = this.availableDonutCategories[0], this.showDonutOptions = !0;
},
placeLabelOnTopOrBottom({ previousPlot: n, currentPlot: t, nextPlot: r }) {
const i = t.y - 38, s = t.y + 16;
return n && r ? n.value < t.value && r.value < t.value ? i : n.value > t.value && r.value > t.value ? s : (n.value > t.value && r.value < t.value || n.value < t.value && r.value > t.value, i) : n && !r ? n.value > t.value ? s : i : !n && r && r.value > t.value ? s : i;
},
async prepareBodyCopy() {
return new Promise((n) => {
const t = [];
this.tableHead.forEach((r, i) => {
if (r.isSearch && Object.assign(this.searches, { [i]: "" }), r.isMultiselect && Object.assign(this.multiselects, { [i]: this.getDropdownOptions(i) }), r.type === this.constants.DATE && (Object.assign(this.dates, { [i]: this.getDatesRange(i) }), Object.assign(this.filteredDatesIndexes, { [i]: !1 })), (r.isPercentage || r.percentageTo) && Object.assign(this.percentages, {
[i]: {
reference: r.percentageTo,
referenceIndex: this.dataset.header.map((s) => s.name).indexOf(r.percentageTo)
}
}), r.rangeFilter && (Object.assign(this.rangeFilters, {
[i]: {
min: Math.round(Math.min(...this.dataset.body.map((s) => s.td).map((s) => s[i]))),
max: Math.round(Math.max(...this.dataset.body.map((s) => s.td).map((s) => s[i])))
}
}), Object.assign(this.immutableRangeFilters, {
[i]: {
min: Math.round(Math.min(...this.dataset.body.map((s) => s.td).map((s) => s[i]))),
max: Math.round(Math.max(...this.dataset.body.map((s) => s.td).map((s) => s[i])))
}
})), r.isPercentage) {
const s = this.dataset.header.map((m) => m.name).indexOf(r.percentageTo), e = this.dataset.body.map((m) => m.td[s]).reduce((m, f) => m + f, 0);
t.push([i, s, e]);
}
r.type === this.constants.NUMERIC && !r.isPercentage && Object.assign(this.hasNaN, { [i]: this.includesNaN(this.dataset.body.map((s) => Number(s.td[i]))) });
}), this.bodyCopy.forEach((r, i) => {
t.map((s) => {
const [e, m, f] = s;
r.td[e] = r.td[m] / f;
}), r.td.forEach((s, e) => {
this.dataset.header[e].type === this.constants.TEXT && this.dataset.header[e].isSearch && (r[e] = this.stringToNumber(s)), this.dataset.header[e].type === this.constants.DATE && (r[e] = new Date(s).getTime()), this.dataset.header[e].type === this.constants.NUMERIC && (r[e] = isNaN(Number(s)) ? e : s), this.tableBody[i][e] = r[e];
});
}), n(!0);
});
},
promiseWithAsyncFunction(n, t) {
return new Promise((r, i) => {
n().then((s) => {
try {
const e = t(s);
r(e);
} catch (e) {
i(e);
}
}).catch((s) => {
i(s);
});
});
},
resetDates(n) {
this.dates[n] = {
from: this.getDatesRange(n).from,
to: this.getDatesRange(n).to
}, this.filteredDatesIndexes[n] = !1, this.$forceUpdate(), this.filterBody();
},
resetFilter(n, t, r) {
const i = r.currentTarget;
clearTimeout(this.buttonTimeout), i.classList.add("clicked"), this.buttonTimeout = setTimeout(() => {
i.classList.remove("clicked");
}, 200), this.currentFilter = void 0, t.rangeFilter && (this.rangeFilters[n].min = this.immutableRangeFilters[n].min, this.rangeFilters[n].max = this.immutableRangeFilters[n].max), t.isMultiselect ? (this.multiselects[n] = this.getDropdownOptions(n), t.type === this.constants.TEXT && (this.sorts[n] = void 0), t.isSearch && (this.searches[n] = "")) : t.type === this.constants.NUMERIC ? this.sorts[n] = void 0 : t.type === this.constants.TEXT ? (this.sorts[n] = void 0, this.searches[n] = "") : t.type === this.constants.DATE && (this.sorts[n] = void 0), this.filterBody();
},
resetSelection() {
const n = document.getElementsByClassName(`tr_${this.uid}`);
Array.from(n).forEach((t) => {
Array.from(t.getElementsByTagName("td")).forEach((r) => {
r.dataset.row === "even" ? (r.style.background = this.FINAL_CONFIG.style.rows.even.backgroundColor, r.style.color = this.FINAL_CONFIG.style.rows.even.color) : (r.style.background = this.FINAL_CONFIG.style.rows.odd.backgroundColor, r.style.color = this.FINAL_CONFIG.style.rows.odd.color);
});
}), Array.from(n).forEach((t) => t.dataset.selected = "false"), this.currentPage > this.pages.length - 1 && (this.currentPage = this.pages.length - 1), this.showChart = !1, this.currentDonut = void 0, this.selectedColumn = void 0, this.chart.type = this.constants.BAR, this.currentSelectionSpan = {
col: void 0,
rows: []
}, this.clientX = 100, this.clientY = 100;
},
selectColumn(n) {
this.currentSelectionSpan.col !== n ? (this.visibleRows.forEach((t, r) => {
this.selectTd({
td: t.td[n],
rowIndex: r,
colIndex: n,
headerType: this.constants.NUMERIC,
event: {
currentTarget: document.getElementById(`cell_${r}_${n}_${this.uid}`)
}
});
}), this.selectedColumn = n) : (this.selectedColumn = void 0, this.resetSelection());
},
selectDropdownOption(n, t) {
this.multiselects[t].includes(n) ? this.multiselects[t] = this.multiselects[t].filter((r) => r !== n) : this.multiselects[t].push(n), this.$forceUpdate(), this.filterBody();
},
selectTd({ td: n, rowIndex: t, colIndex: r, headerType: i, event: s }) {
if (i !== this.constants.NUMERIC || isNaN(Number(n))) {
this.resetSelection();
return;
}
this.currentSelectionSpan.col !== r && this.resetSelection();
const e = s.currentTarget.parentNode;
this.currentSelectionSpan.col = r, this.currentSelectionSpan.rows.map((m) => m.index).includes(t) ? (e.dataset.selected = "false", this.currentSelectionSpan.rows = this.currentSelectionSpan.rows.filter((m) => m.index !== t), s.currentTarget.classList.remove(this.cssClass.CELL), Array.from(e.children).forEach((m, f) => {
m.dataset.row === "even" ? (m.style.background = this.FINAL_CONFIG.style.rows.even.backgroundColor, m.style.color = this.FINAL_CONFIG.style.rows.even.olor) : (m.style.background = this.FINAL_CONFIG.style.rows.odd.backgroundColor, m.style.color = this.FINAL_CONFIG.style.rows.odd.color);
}), s.currentTarget.dataset.row === "even" ? (s.currentTarget.style.background = this.FINAL_CONFIG.style.rows.even.backgroundColor, s.currentTarget.style.color = this.FINAL_CONFIG.style.rows.even.color) : (s.currentTarget.style.background = this.FINAL_CONFIG.style.rows.odd.backgroundColor, s.currentTarget.style.color = this.FINAL_CONFIG.style.rows.odd.color)) : (e.dataset.selected = "true", this.currentSelectionSpan.rows.push({
index: t,
value: n
}), Array.from(e.children).forEach((m, f) => {
m.dataset.row === "even" ? (m.style.background = this.FINAL_CONFIG.style.rows.even.selectedNeighbors.backgroundColor, m.style.color = this.FINAL_CONFIG.style.rows.even.selectedNeighbors.color) : (m.style.background = this.FINAL_CONFIG.style.rows.odd.selectedNeighbors.backgroundColor, m.style.color = this.FINAL_CONFIG.style.rows.odd.selectedNeighbors.color);
}), s.currentTarget.dataset.row === "odd" ? (s.currentTarget.style.background = this.FINAL_CONFIG.style.rows.odd.selectedCell.backgroundColor, s.currentTarget.style.color = this.FINAL_CONFIG.style.rows.odd.selectedCell.color) : (s.currentTarget.style.background = this.FINAL_CONFIG.style.rows.even.selectedCell.backgroundColor, s.currentTarget.style.color = this.FINAL_CONFIG.style.rows.even.selectedCell.color)), this.currentSelectionSpan.rows = this.currentSelectionSpan.rows.sort((m, f) => m.index - f.index), this.chart.type === this.constants.DONUT && this.currentSelectionSpan.rows.length > 0 && this.applyDonutOption();
},
setFilterDatesIndexes(n) {
this.filteredDatesIndexes[n] = !(this.getDatesRange(n).from === this.dates[n].from && this.getDatesRange(n).to === this.dates[n].to);
},
sortBody() {
this.resetSelection(), Object.keys(this.rangeFilters).forEach((n) => {
this.filterByRange(this.bodyCopy, n);
}), Object.keys(this.sorts).forEach((n) => {
this.sortByNumber(this.bodyCopy, n);
}), this.currentFilter !== void 0 && this.sortByNumber(this.bodyCopy, this.currentFilter), this.dataset.header.forEach((n, t) => {
if (n.isPercentage) {
const r = this.percentages[t].referenceIndex, i = this.bodyCopy.map((s) => s.td[r]).reduce((s, e) => s + e, 0);
this.bodyCopy.forEach((s) => {
s.td[t] = s.td[r] / i;
});
}
}), this.currentPage > this.pages.length - 1 && (this.currentPage = this.pages.length - 1), [-1].includes(this.currentPage) && (this.currentPage = 0), this.$forceUpdate();
},
filterByRange(n, t) {
this.bodyCopy = n.filter((r) => r.td[t] >= this.rangeFilters[t].min && r[t] <= this.rangeFilters[t].max);
},
sortByNumber(n, t) {
if (this.sorts[t] === this.constants.ASC && (n = n.sort((r, i) => r[t] - i[t])), this.sorts[t] === this.constants.DESC)
n = n.sort((r, i) => i[t] - r[t]);
else
return 0;
},
sortTh(n, t) {
this.currentFilter = n;
const r = t.currentTarget;
clearTimeout(this.buttonTimeout), r.classList.add("clicked"), this.buttonTimeout = setTimeout(() => {
r.classList.remove("clicked");
}, 200), this.sorts[n] === 1 ? this.sorts[n] = this.constants.DESC : this.sorts[n] = this.constants.ASC, this.sortBody();
},
stringToNumber(n) {
let t = 0;
for (let r = 0; r < n.length; r += 1)
t += n.charCodeAt(r);
return t;
},
toggleMultiselect(n, t, r) {
const i = r.currentTarget;
clearTimeout(this.buttonTimeout), i.classList.add("clicked"), this.buttonTimeout = setTimeout(() => {
i.classList.remove("clicked");
}, 200);
const s = document.getElementById(`th_dropdown_${n}`);
s.dataset.isOpen === "false" ? s.dataset.isOpen = "true" : s.dataset.isOpen = "false";
},
updateCurrentPage(n) {
this.resetSelection(), !n || !n.target.value ? this.currentPage = 0 : this.currentPage = Number(n.target.value), this.onPageChange();
},
// DONUTS
calcDonutMarkerConnectorColor(n) {
return n.proportion * 100 > 3 ? n.color : "transparent";
},
calcDonutMarkerLabelPositionX(n) {
return n.center.endX + this.calcMarkerOffset(n, 50);
},
calcMarkerOffset(n, t) {
return n.center.endX - t >= 0 ? 3 : -2;
},
displayArcPercentage(n, t) {
return isNaN(n.value / this.sumValues(t)) ? 0 : (n.value / this.sumValues(t) * 100).toFixed(0) + "%";
},
isArcBigEnough(n) {
return n.proportion * 100 > 3;
},
sumValues(n) {
return [...n].map((t) => t.value).reduce((t, r) => t + r, 0);
},
// CHART DRAGGING METHODS
closeDragElement() {
document.onmouseup = null, document.onmousemove = null;
},
dragMouseDown(n) {
n = n || window.event, n.preventDefault();
const r = this.$refs.chartModal.getBoundingClientRect();
this.dragOffsetX = n.clientX - r.left, this.dragOffsetY = n.clientY - r.top, this.modalWidth = r.width, this.modalHeight = r.height, document.onmouseup = this.closeDragElement, document.onmousemove = this.elementDrag;
},
elementDrag(n) {
if (this.rafId) return;
const r = this.$refs.chartModal.getBoundingClientRect();
this.clientX = n.clientX - this.dragOffsetX, this.clientY = n.clientY - this.dragOffsetY - 40, this.clientX < 0 && (this.clientX = 0), this.clientX + r.width > window.innerWidth && (this.clientX = window.innerWidth - r.width - 48), this.clientY < 0 && (this.clientY = 0), this.clientY + r.height > window.innerHeight && (this.clientY = window.innerHeight - r.height - 24);
}
}
}, z = () => {
ie((n) => ({
v19aea2e4: n.colorCancelInactive,
v191fad21: n.textColorCancelInactive,
v55eb90ad: n.colorCancelActiveLight,
fff8042e: n.colorCancelActive,
v3d2fda19: n.colorCancelActiveOutline,
v153aedf7: n.colorButtonSortActiveLight,
v8e240b42: n.colorButtonSortActive,
v4ef0df91: n.colorButtonSortActiveColorText,
v661d0ce3: n.colorButtonSortActiveOutline
}));
}, U = D.setup;
D.setup = U ? (n, t) => (z(), U(n, t)) : z;
const ue = ["innerHTML"], he = ["data-is-open"], de = { class: "vue-ui-table-export-hub-options" }, ge = { class: "vue-ui-table-export-hub-option-wrapper" }, me = { class: "label" }, ye = ["innerHTML"], be = { class: "vue-ui-table-export-hub-option-wrapper" }, fe = { class: "label" }, Ne = ["innerHTML"], Ce = { class: "vue-ui-table-dialog-field" }, pe = {
class: "label vue-ui-table-dialog-input-label",
style: { width: "100%" }
}, Ie = { style: { width: "fit-content" } }, Fe = { class: "vue-ui-table" }, ve = { key: 0 }, _e = { key: 0 }, we = { key: 1 }, ke = {
key: 0,
style: { display: "flex", "align-items": "center", "justify-content": "flex-end" }
}, Oe = ["innerHTML"], Le = {
key: 0,
style: { "margin-left": "3px" }
}, Se = { key: 0 }, Ae = { class: "th-filter" }, Me = {
key: 0,
class: "th-date"
}, Ge = { class: "date-wrapper--inputs" }, xe = { class: "date-fieldset" }, De = ["for"], Te = ["id", "onUpdate:modelValue", "onInput"], Be = { class: "date-fieldset" }, Ee = ["for"], Pe = ["id", "onUpdate:modelValue", "onInput"], He = { class: "date-wrapper--button" }, Re = ["onClick"], ze = ["innerHTML"], Ue = ["innerHTML"], Ve = ["innerHTML"], je = ["onClick", "disabled"], Xe = ["placeholder", "onUpdate:modelValue", "name"], Ye = ["onClick"], We = ["innerHTML"], Je = ["innerHTML"], Ke = ["innerHTML"], Ze = ["onClick", "innerHTML"], qe = ["innerHTML"], Qe = {
key: 5,
class: "th-range-filter"
}, $e = ["for"], et = ["id", "max", "min", "onUpdate:modelValue"], tt = ["id", "max", "min", "onUpdate:modelValue"], st = ["for"], nt = ["onClick", "disabled"], rt = ["id"], lt = ["onClick"], ot = ["onClick", "onKeyup"], at = ["innerHTML", "onClick", "onKeyup"], it = ["data-row"], ct = ["data-row"], ut = ["data-row", "onClick", "onKeyup", "id"], ht = ["innerHTML"], dt = { key: 1 }, gt = { key: 2 }, mt = { key: 5 }, yt = ["innerHTML"], bt = { key: 0 }, ft = { style: { "margin-left": "12px" } }, Nt = { class: "format-num" }, Ct = { style: { "margin-left": "12px" } }, pt = {
key: 0,
class: "format-num"
}, It = {
key: 1,
class: "format-num"
}, Ft = { key: 2 }, vt = { style: { "margin-left": "12px" } }, _t = {
key: 0,
class: "format-num"
}, wt = {
key: 1,
class: "format-num"
}, kt = { key: 2 }, Ot = {
key: 1,
class: "vue-ui-table-paginator format-num"
}, Lt = {
key: 2,
class: "vue-ui-table-size-warning"
}, St = ["innerHTML"], At = {
key: 4,
class: "vue-ui-table-pagination format-num"
}, Mt = ["innerHTML", "disabled"], Gt = ["disabled"], xt = {
key: 0,
class: "vue-ui-table-page-scroller-wrapper"
}, Dt = {
for: "pageScroller",
style: { "font-size": "14px" }
}, Tt = ["max", "value"], Bt = { key: 1 }, Et = ["disabled"], Pt = ["innerHTML", "disabled"], Ht = ["innerHTML"], Rt = { class: "chart-modal-options" }, zt = ["innerHTML"], Ut = ["innerHTML"], Vt = ["innerHTML"], jt = {
style: { width: "100%", height: "fit-content" },
ref: "chartModal"
}, Xt = { class: "vue-ui-table